This commit was manufactured by cvs2svn to create tag 'CHANGES'.

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/tags/CHANGES@93990 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/Apache.dsp b/Apache.dsp
deleted file mode 100644
index 4a0bf21..0000000
--- a/Apache.dsp
+++ /dev/null
@@ -1,128 +0,0 @@
-# Microsoft Developer Studio Project File - Name="Apache" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Console Application" 0x0103
-
-CFG=Apache - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "Apache.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "Apache.mak" CFG="Apache - Win32 Release"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "Apache - Win32 Release" (based on "Win32 (x86) Console Application")
-!MESSAGE "Apache - Win32 Debug" (based on "Win32 (x86) Console Application")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "Apache - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "SHARED_MODULE" /FD /c
-# ADD CPP /nologo /MD /W3 /O2 /I "./include" /I "./srclib/apr/include" /I "./srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /Fd"Release\Apache" /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib advapi32.lib ws2_32.lib mswsock.lib /nologo /subsystem:console /map /machine:I386
-# ADD LINK32 kernel32.lib user32.lib advapi32.lib ws2_32.lib mswsock.lib /nologo /subsystem:console /map /machine:I386
-
-!ELSEIF  "$(CFG)" == "Apache - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "./include" /I "./srclib/apr/include" /I "./srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /Fd"Debug\Apache" /FD /c
-# SUBTRACT CPP /YX
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib advapi32.lib ws2_32.lib mswsock.lib /nologo /subsystem:console /incremental:no /map /debug /machine:I386
-# ADD LINK32 kernel32.lib user32.lib advapi32.lib ws2_32.lib mswsock.lib /nologo /subsystem:console /incremental:no /map /debug /machine:I386
-
-!ENDIF 
-
-# Begin Target
-
-# Name "Apache - Win32 Release"
-# Name "Apache - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\build\win32\Apache.ico
-# End Source File
-# Begin Source File
-
-SOURCE=.\build\win32\Apache.rc
-# End Source File
-# Begin Source File
-
-SOURCE=.\server\main.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\build\win32\win32ver.awk
-
-!IF  "$(CFG)" == "Apache - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=.\build\win32\win32ver.awk
-
-".\build\win32\Apache.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ./build/win32/win32ver.awk Apache "Apache HTTP Server"  ./include/ap_release.h icon=apache.ico > .\build\win32\Apache.rc
-
-# End Custom Build
-
-!ELSEIF  "$(CFG)" == "Apache - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=.\build\win32\win32ver.awk
-
-".\build\win32\Apache.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ./build/win32/win32ver.awk Apache "Apache HTTP Server"  ./include/ap_release.h icon=apache.ico > .\build\win32\Apache.rc
-
-# End Custom Build
-
-!ENDIF 
-
-# End Source File
-# End Target
-# End Project
diff --git a/Apache.dsw b/Apache.dsw
deleted file mode 100644
index e20b098..0000000
--- a/Apache.dsw
+++ /dev/null
@@ -1,1371 +0,0 @@
-Microsoft Developer Studio Workspace File, Format Version 6.00
-# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
-
-###############################################################################
-
-Project: "InstallBin"=".\InstallBin.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name BuildBin
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "BuildBin"=".\BuildBin.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name Apache
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name ApacheMonitor
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name mod_access
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name mod_actions
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name mod_alias
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name mod_asis
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name mod_auth
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name mod_auth_anon
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name mod_auth_dbm
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name mod_auth_digest
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name mod_autoindex
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name mod_cern_meta
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name mod_cgi
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name mod_dav_fs
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name mod_dir
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name mod_env
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name mod_expires
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name mod_file_cache
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name mod_headers
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name mod_imap
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name mod_include
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name mod_info
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name mod_isapi
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name mod_log_config
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name mod_mime
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name mod_mime_magic
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name mod_negotiation
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name mod_rewrite
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name mod_setenvif
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name mod_speling
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name mod_status
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name mod_unique_id
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name mod_userdir
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name mod_usertrack
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name mod_vhost_alias
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name mod_proxy_connect
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name mod_proxy_ftp
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name mod_proxy_http
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name ab
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name htdbm
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name htdigest
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name htpasswd
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name logresolve
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name rotatelogs
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name wintty
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "Apache"=".\Apache.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name libapr
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name libaprutil
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name libhttpd
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "ApacheMonitor"=".\support\win32\ApacheMonitor.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name apr
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name aprutil
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "ab"=".\support\ab.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name apr
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name aprutil
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "abs"=".\support\abs.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name apr
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name aprutil
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "apr"=".\srclib\apr\apr.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "aprutil"=".\srclib\apr-util\aprutil.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name apr
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name gen_uri_delims
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name xml
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "dftables"=".\srclib\pcre\dftables.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "gen_test_char"=".\server\gen_test_char.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name apr
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name aprutil
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "gen_uri_delims"=".\srclib\apr-util\uri\gen_uri_delims.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "htdigest"=".\support\htdigest.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name apr
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name aprutil
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "htdbm"=".\support\htdbm.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name libapr
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name libaprutil
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "htpasswd"=".\support\htpasswd.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name apr
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name aprutil
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "libapr"=".\srclib\apr\libapr.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "libaprutil"=".\srclib\apr-util\libaprutil.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name libapr
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name gen_uri_delims
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name xml
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "libhttpd"=".\libhttpd.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name libapr
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name libaprutil
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name pcre
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name pcreposix
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name gen_test_char
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "logresolve"=".\support\logresolve.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name apr
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name aprutil
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "mod_access"=".\modules\aaa\mod_access.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name libapr
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name libaprutil
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name libhttpd
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "mod_actions"=".\modules\mappers\mod_actions.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name libapr
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name libaprutil
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name libhttpd
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "mod_alias"=".\modules\mappers\mod_alias.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name libapr
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name libaprutil
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name libhttpd
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "mod_asis"=".\modules\generators\mod_asis.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name libapr
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name libaprutil
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name libhttpd
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "mod_auth"=".\modules\aaa\mod_auth.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name libapr
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name libaprutil
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name libhttpd
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "mod_auth_anon"=".\modules\aaa\mod_auth_anon.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name libapr
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name libaprutil
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name libhttpd
-    End Project Dependency
-}}}
-
-
-###############################################################################
-
-Project: "mod_auth_dbm"=".\modules\aaa\mod_auth_dbm.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name libapr
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name libaprutil
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name libhttpd
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "mod_auth_digest"=".\modules\aaa\mod_auth_digest.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name libapr
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name libaprutil
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name libhttpd
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "mod_autoindex"=".\modules\generators\mod_autoindex.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name libapr
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name libaprutil
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name libhttpd
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "mod_cern_meta"=".\modules\metadata\mod_cern_meta.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name libapr
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name libaprutil
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name libhttpd
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "mod_cgi"=".\modules\generators\mod_cgi.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name libapr
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name libaprutil
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name libhttpd
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "mod_dav"=".\modules\dav\main\mod_dav.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name libapr
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name libaprutil
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name libhttpd
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "mod_dav_fs"=".\modules\dav\fs\mod_dav_fs.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name libapr
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name libaprutil
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name libhttpd
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name mod_dav
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "mod_dir"=".\modules\mappers\mod_dir.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name libapr
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name libaprutil
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name libhttpd
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "mod_env"=".\modules\metadata\mod_env.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name libapr
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name libaprutil
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name libhttpd
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "mod_expires"=".\modules\metadata\mod_expires.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name libapr
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name libaprutil
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name libhttpd
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "mod_file_cache"=".\modules\cache\mod_file_cache.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name libapr
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name libaprutil
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name libhttpd
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "mod_headers"=".\modules\metadata\mod_headers.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name libapr
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name libaprutil
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name libhttpd
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "mod_imap"=".\modules\mappers\mod_imap.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name libapr
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name libaprutil
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name libhttpd
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "mod_include"=".\modules\filters\mod_include.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name libapr
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name libaprutil
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name libhttpd
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "mod_info"=".\modules\generators\mod_info.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name libapr
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name libaprutil
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name libhttpd
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "mod_isapi"=".\modules\arch\win32\mod_isapi.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name libapr
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name libaprutil
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name libhttpd
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "mod_log_config"=".\modules\loggers\mod_log_config.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name libapr
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name libaprutil
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name libhttpd
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "mod_mime"=".\modules\http\mod_mime.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name libapr
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name libaprutil
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name libhttpd
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "mod_mime_magic"=".\modules\metadata\mod_mime_magic.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name libapr
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name libaprutil
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name libhttpd
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "mod_negotiation"=".\modules\mappers\mod_negotiation.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name libapr
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name libaprutil
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name libhttpd
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "mod_proxy"=".\modules\proxy\mod_proxy.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name libapr
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name libaprutil
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name libhttpd
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "mod_rewrite"=".\modules\mappers\mod_rewrite.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name libapr
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name libaprutil
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name libhttpd
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "mod_setenvif"=".\modules\metadata\mod_setenvif.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name libapr
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name libaprutil
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name libhttpd
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "mod_speling"=".\modules\mappers\mod_speling.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name libapr
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name libaprutil
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name libhttpd
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "mod_ssl"=".\modules\ssl\mod_ssl.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name libapr
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name libaprutil
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name libhttpd
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "mod_status"=".\modules\generators\mod_status.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name libapr
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name libaprutil
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name libhttpd
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "mod_unique_id"=".\modules\metadata\mod_unique_id.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name libapr
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name libaprutil
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name libhttpd
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "mod_userdir"=".\modules\mappers\mod_userdir.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name libapr
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name libaprutil
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name libhttpd
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "mod_usertrack"=".\modules\metadata\mod_usertrack.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name libapr
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name libaprutil
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name libhttpd
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "mod_vhost_alias"=".\modules\mappers\mod_vhost_alias.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name libapr
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name libaprutil
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name libhttpd
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "mod_proxy_connect"=".\modules\proxy\mod_proxy_connect.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name libapr
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name libaprutil
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name libhttpd
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name mod_proxy
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "mod_proxy_ftp"=".\modules\proxy\mod_proxy_ftp.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name libapr
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name libaprutil
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name libhttpd
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name mod_proxy
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "mod_proxy_http"=".\modules\proxy\mod_proxy_http.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name libapr
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name libaprutil
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name libhttpd
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name mod_proxy
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "pcre"=".\srclib\pcre\pcre.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name dftables
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "pcreposix"=".\srclib\pcre\pcreposix.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name pcre
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "rotatelogs"=".\support\rotatelogs.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name apr
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name aprutil
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "wintty"=".\support\win32\wintty.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name apr
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name aprutil
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "xml"=".\srclib\apr-util\xml\expat\lib\xml.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Global:
-
-Package=<5>
-{{{
-}}}
-
-Package=<3>
-{{{
-}}}
-
-###############################################################################
-
diff --git a/BuildBin.dsp b/BuildBin.dsp
deleted file mode 100644
index d4574f4..0000000
--- a/BuildBin.dsp
+++ /dev/null
@@ -1,97 +0,0 @@
-# Microsoft Developer Studio Project File - Name="BuildBin" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) External Target" 0x0106
-
-CFG=BuildBin - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "BuildBin.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "BuildBin.mak" CFG="BuildBin - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "BuildBin - Win32 Release" (based on "Win32 (x86) External Target")
-!MESSAGE "BuildBin - Win32 Debug" (based on "Win32 (x86) External Target")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-
-!IF  "$(CFG)" == "BuildBin - Win32 Release"
-
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir ""
-# PROP BASE Intermediate_Dir ""
-# PROP BASE Cmd_Line "NMAKE /f makefile.win"
-# PROP BASE Rebuild_Opt "/a"
-# PROP BASE Target_File "\Apache2.0\bin\Apache.exe"
-# PROP BASE Bsc_Name ".\Browse\BuildBin.bsc"
-# PROP BASE Target_Dir ""
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir ""
-# PROP Intermediate_Dir ""
-# PROP Cmd_Line "NMAKE /f makefile.win INSTDIR="\Apache2" LONG=Release _tryssl _dummy"
-# PROP Rebuild_Opt ""
-# PROP Target_File "\Apache2\bin\Apache.exe"
-# PROP Bsc_Name ".\Browse\Apache.bsc"
-# PROP Target_Dir ""
-
-!ELSEIF  "$(CFG)" == "BuildBin - Win32 Debug"
-
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir ""
-# PROP BASE Intermediate_Dir ""
-# PROP BASE Cmd_Line "NMAKE /f makefile.win"
-# PROP BASE Rebuild_Opt "/a"
-# PROP BASE Target_File "\Apache2.0\bin\Apache.exe"
-# PROP BASE Bsc_Name ".\Browse\BuildBin.bsc"
-# PROP BASE Target_Dir ""
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir ""
-# PROP Intermediate_Dir ""
-# PROP Cmd_Line "NMAKE /f makefile.win INSTDIR="\Apache2" LONG=Debug _tryssl _dummy"
-# PROP Rebuild_Opt ""
-# PROP Target_File "\Apache2\bin\Apache.exe"
-# PROP Bsc_Name ".\Browse\Apache.bsc"
-# PROP Target_Dir ""
-
-!ENDIF 
-
-# Begin Target
-
-# Name "BuildBin - Win32 Release"
-# Name "BuildBin - Win32 Debug"
-
-!IF  "$(CFG)" == "BuildBin - Win32 Release"
-
-!ELSEIF  "$(CFG)" == "BuildBin - Win32 Debug"
-
-!ENDIF 
-
-# Begin Source File
-
-SOURCE=.\os\win32\BaseAddr.ref
-# End Source File
-# Begin Source File
-
-SOURCE=.\CHANGES
-# End Source File
-# Begin Source File
-
-SOURCE=.\Makefile.win
-# End Source File
-# Begin Source File
-
-SOURCE=.\STATUS
-# End Source File
-# End Target
-# End Project
diff --git a/CHANGES b/CHANGES
deleted file mode 100644
index f3d07bc..0000000
--- a/CHANGES
+++ /dev/null
@@ -1,11248 +0,0 @@
-Changes with Apache 2.0.34-dev
-
-  *) Small performance fixes for mod_include [Brian Pane]
-
-  *) Performance improvement for the error logger [Brian Pane]
-
-  *) Change configure so that Solaris 8 and above have 
-     SINGLE_LISTEN_UNSERIALIZED_ACCEPT defined by default.
-     according to sun people solaris 8+ doesn't have a thundering
-     herd problem [Ian Holsman]
-
-  *) Allow URIs specifying CGI scripts to include '/' at the end
-     (e.g., /cgi-bin/printenv/) on AIX and Solaris (and other OSs
-     which ignore '/' at the end of the names of non-directories).
-     PR 10138  [Jeff Trawick]
-
-  *) implement SSLSessionCache shmht and shmcb based on apr_rmm and
-     apr_shm.  [Madhusudan Mathihalli <madhusudan_mathihalli@hp.com>]
-
-  *) Fix apxs -g handling.  Move config_vars.mk from the top build
-     directory to the build directory.  PR 10163  [Jeff Trawick]
-
-  *) Fix some mod_include problems which broke evaluation of some
-     expressions.  PR 10108  [Jeff Trawick]
-
-  *) Fix the calculation of request time in mod_status.  [Stas Bekman]
-
-  *) Fix the calculation of thread_num in the worker score structure.
-     [Stas Bekman]
-
-  *) Use apr_atomic operations in managing the mod_mem_cache
-     cache_objects for SMP scalability. (see USE_ATOMICS
-     preprocessor directive in mod_file_cache)
-     [Bill Stoddard]
-
-  *) Add filehandle caching to mod_mem_cache. (see CACHE_FD
-     preprocessor directive in mod_file_cache)
-     [Bill Stoddard]
-
-  *) Implement prototype mod_disk_cache for use with mod_cache.
-     [Bill Stoddard]
-
-  *) Add a missing manualdir entry in the Debian config.layout.
-     [Thom May <thom@planetarytramp.net>]
-
-  *) Stop installing libtool for APR and tell APR where it should place
-     its copy of libtool (via our installbuildpath layout variable).
-     [Justin Erenkrantz]
-
-  *) New directive ProxyIOBufferSize. Sets the size of the buffer used
-     when reading from a remote HTTP server in proxy. [Graham Leggett]
-
-  *) Modify receive/send loop in proxy_http and proxy_ftp so that
-     should it be necessary, the remote server socket is closed before
-     transmitting the last buffer (set by ProxyIOBufferSize) to the
-     client. This prevents the backend server from being forced to hang
-     around while the last few bytes are transmitted to a slow client.
-     Fix the case where no error checking was performed on the final
-     brigade in the loop. [Graham Leggett]
-
-  *) Scrap CacheMaxExpireMin and CacheDefaultExpireMin. Change
-     CacheMaxExpire and CacheDefaultExpire to use seconds rather than
-     hours. [Graham Leggett, Bill Stoddard]
-
-  *) New Directive SSIUndefinedEcho. to change the '(none)' echoed
-     for a undefined variable. [Ian Holsman]
-
-  *) Proxy HTTP and CONNECT: Keep trying other addresses from the DNS
-     when we can't get a socket in the specified address family.  We may
-     have gotten back an IPv6 address first and yet our system is not
-     configured to allow IPv6 sockets.  [Jeff Trawick]
-
-  *) Be more careful about recursively removing CVS directories. Make
-     sure that we aren't cd'ing to their home directory first. PR: 9993
-     [Aaron Bannert, James LewisMoss <dres@lewismoss.net>]
-
-  *) Add a missing errordir entry in the Debian config.layout. PR: 10067
-     [Dirk-Jan Faber <dirk-jan@selwerd.nl>, Aaron Bannert,
-      Thom May <thom@planetarytramp.net>]
-
-  *) Rename the filter ordering priorities.  The recent filtering fixes
-     have showcased problems with their usage.  Therefore, we need to
-     rename them to increase the clarity.  (CONTENT->RESOURCE,
-     HTTP_HEADER->CONTENT_SET/PROTOCOL)  [Justin Erenkrantz]
-
-Changes with Apache 2.0.33
-
-  *) Fix a problem in the new --enable-layout functionality where
-     it wouldn't allow overrides from variables like --prefix,
-     --bindir, etc.  [Thom May <thom@planetarytramp.net>]
-
-  *) Fix a bug in the core input filter for AP_MODE_EXHAUSTIVE. It
-     no longer hangs around waiting for the socket to close before
-     returning exhaustive data.  [Aaron Bannert]
-
-  *) rename apr_exploded_time_t to apr_time_exp_t (as per renames pending)
-     [Thom May <thom@planetarytramp.net>]
-
-  *) Change mod_ssl to always do a full startup/teardown on restarts.
-     this allows mod_ssl to be added to a server that is already
-     running and makes it possible to add/change certs/keys after the
-     server has been started.  [Doug MacEachern]
-
-  *) Introduce PassPhraseDialog "|/path/to/pipe" mechanism to mod_ssl.
-     This pipe must be a bidirectional 'console' style relay, which
-     mod_ssl prints all prompts to the pipe's stdin, and reads the
-     passphrases from the pipe's stdout.  [William Rowe]
-
-  *) Fix bug where --sysconfdir and --localstatedir were being
-     ignored.  [Thom May <thom@planetarytramp.net>, Aaron Bannert]
-     PR 9888
-
-  *) Fix --enable-layout to work again. Caution: When specifying
-     --enable-layout, common arguments like --prefix, --exec-prefix,
-     etc. will be ignored and the settings from the layout will be
-     used instead.  [Thom May <thom@planetarytramp.net>, Aaron Bannert]
-     PR 9124, 9873, 9885
-
-  *) New Directive for mod_proxy: ProxyRemoteMatch. This provides
-     regex pattern matching for the determination of which requests
-     to use the remote proxy for. [Jim Jagielski]
-
-  *) Fix CustomLog bytes-sent with HTTP 0.9.  [Justin Erenkrantz]
-
-  *) Prevent Apache from ignoring SIGHUP due to some lingering 1.3
-     cruft in piped logs and rewritemap child processes.
-     [William Rowe]
-
-  *) All instances of apr_lock_t have been removed and converted
-     to one of the following new lock APIs: apr_thread_mutex.h,
-     apr_proc_mutex.h, or apr_global_mutex.h. No new code should
-     use the apr_lock.h API, as the old API will soon be deprecated.
-     [Aaron Bannert]
-
-  *) Merged in changes to mod_ssl up through 2.8.7-1.3.23.
-     [Ralf S. Engelschall, Cliff Woolley]
-
-  *) mod-include: make it handle flush'es and fix the 'false-alarm'
-     [Justin Erenkrantz, Brian Pane, Ian Holsman]
-
-  *) ap_get_*_filter_handle() functions to allow 3rd party modules
-     to lookup filter handles so they can bypass the filter name
-     lookup when adding filters to a request (via ap_add_*_filter_handle())
-     [Ryan Morgan <rmorgan@covalent.net>]
-
-  *) Fix for multiple file buckets on Win32, where the first file
-     bucket would cause the immediate closure of the socket on any
-     non-keepalive requests.  [Ryan Morgan <rmorgan@covalent.net>]
-
-  *) Correct Win32 failure of mmap of a segment beyond start of the
-     file; fixes large SSL and similar transfers.  [William Rowe]
-     PR 9898
-
-  *) Implement apr_proc_detach changes and allow -DNO_DETACH in the
-     multi-process mode to not "daemonize" while detaching from the
-     controlling terminal. This is necessary for Apache to work with
-     process-management tools like AIX's "System Resource Controller"
-     as well as Dan Bernstein's "daemontools".
-     [Jos Backus <josb@cncdsl.com>, Aaron Bannert]
-
-  *) Convert mod_auth_digest to use the new apr_global_mutex_t
-     type.  [Aaron Bannert]
-
-  *) fix bug in mod-include where it wouldn't send a unmatched
-     part if it was at the end of a bucket [Ian Holsman]
-
-  *) worker MPM: Improve logging of errors with the interface between
-     the listener thread and worker threads.  [Jeff Trawick]
-
-  *) Some browsers ignore cookies that have been merged into a
-     single Set-Cookie header. Set-Cookie and Set-Cookie2 headers
-     are now unmerged in the http proxy before being sent to the
-     client. [Graham Leggett]
-
-  *) Fix a problem with proxy where each entry of a duplicated
-     header such as Set-Cookie would overwrite and obliterate the
-     previous value of the header, resulting in multiple header
-     values (like cookies) going missing.
-     [Graham Leggett, Joshua Slive]
-
-  *) Add the server-limit and thread-limit values to the scoreboard
-     for the sake of third-party applications.
-     [Adam Sussman <myddryn@vishnu.vidya.com>]
-
-  *) Fix segfault when proxy recieves an invalid HTTP response [Ian Holsman]
-
-  *) OS/390: Get make install to properly copy DSO modules.
-     [Jeff Trawick]
-
-  *) Win32: Fix bug in mod_status with displaying "Restart Time"
-     and "Server uptime".
-     [Bill Stoddard]
-
-  *) Fix IPv6 name-based virtual hosts.  [Jeff Trawick]
-
-  *) Introduce AddOutputFilterByType directive.  [Justin Erenkrantz]
-
-  *) Fix DEBUG_CGI support in mod_cgi.  PR 9670, 9671.
-     [David MacKenzie <djm@pix.net>]
-
-  *) Fix incorrect check for script_in in mod_cgi.  PR 9669.
-     [David MacKenzie <djm@pix.net>]
-
-  *) Fix segfault and display error when SSLMutex file can not be
-     created.  [Adam Sussman <myddryn@vishnu.vidya.com>]
-
-  *) Add reference counting to mod_mem_cache cache objects to
-     better manage removing objects from the cache.
-     [Bill Stoddard]
-
-  *) Change the verbage on the ScoreBoardFile in our default configs.
-     Also change the default to be commented out (unspecified) so we
-     get anonymous shared memory by default.  [Aaron Bannert]
-
-  *) Implement new ScoreBoardFile directive logic. This affects how
-     we create the scoreboard's shared memory segment. If the directive
-     is present, a name-based segment is created. If the directive is
-     not present, first an anonymous segment is created, and if that
-     fails, a name-based segment is created from a file of the name
-     DEFAULT_SCOREBOARD. This gives third-party applications the
-     ability to access our scoreboard.  [Aaron Bannert]
-
-  *) Allow mod_deflate to work with non-GET requests and properly send
-     Content-Lengths.  [Sander Striker <striker@apache.org>]
-
-  *) Fix ap_directory_merge() to correctly merge configs when there is
-     no <Directory /> block.  [Justin Erenkrantz, William Rowe]
-
-  *) Remove spurious debug messsages that are normal under HTTP
-     keep-alive logic.  [Jeff Trawick, Justin Erenkrantz]
-
-  *) Fix a bug in mod_cgid that would prevent proper shutdown death
-     of the cgid process.  [Aaron Bannert]
-
-  *) Add signal handling back in to the worker MPM for the one_process
-     (-X, -DDEBUG, -DONE_PROCESS) case.  [Aaron Bannert]
-
-  *) Performance: Reuse per-connection transaction pools in the
-     worker MPM, rather than destroying and recreating them.  [Brian Pane]
-
-  *) Remove all signals from the worker MPM's child process.  Instead,
-     the parent uses the Pipe of Death for all communication with the
-     child processes.  [Ryan Bloom]
-
-Changes with Apache 2.0.32
-
-  *) mod_negotiation: ForceLanguagePriority now uses 'Prefer' as the
-     default if the directive is not specified.  This mirrors older
-     behavior without changes to the httpd.conf.  [William Rowe]
-
-  *) Win32: solve the win32 service problems in 2.0.31-alpha, by fixing
-     the service, mpm and logging code, and bugs in apr_file_open_stderr 
-     and apr_file_dup2 functions.  Win2K/XP services have no handles 
-     associated for stdin/out/err, which caused unpredictable behavior
-     in the prior release.  [William Rowe, Bill Stoddard]
-
-  *) Win32: simplify the Application Event Log messages, since there isn't
-     likely to be 'more information in the error log' before an error log
-     has been opened.  [William Rowe]
-
-  *) Win32: substantial cleanup to the mpm_winnt code for legibility and
-     to follow the program flow of other MPMs.  [Ryan Bloom, William Rowe]
-
-  *) Win32: apache -k shutdown now behaves like apache -k stop.
-     [Bill Stoddard]
-
-  *) Fix prefork to not kill the parent if a child hits a resource shortage
-     on accept().  [Greg Ames]
-
-  *) Fix seg faults that occur when what should be the httpd request line
-     starts with \r\n followed by garbage.  [Greg Ames]
-
-  *) Allow statically linked support binaries with the new
-     --enable-static-support flag, and enable this behavior in
-     the binbuild script. Also add a new --enable-static-htdbm
-     flag.  [Aaron Bannert]
-
-  *) Allow mod_autoindex to serve symlinks if permitted and attempt to
-     do only one stat() call when generating the directory listings.
-     [Justin Erenkrantz]
-
-  *) Fix resolve_symlink to save the original symlink name if known.
-     [Justin Erenkrantz]
-
-  *) Be a bit more sane with regard to CanonicalNames.  If the user has
-     specified they want to use the CanonicalName, but they have not
-     configured a port with the ServerName, then use the same port that 
-     the original request used. [Ryan Bloom and Ken Coar]
-
-  *) In core_input_filter, check for an empty brigade after 
-     APR_BRIGADE_NORMALIZE().  Otherwise, we can get segfaults if a
-     client says it will post some data but we get FIN before any
-     data arrives.  [Jeff Trawick]
-
-  *) Not being able to bind to the socket is a fatal error.  We should
-     print an error to the console, and return a non-zero status code.
-     With these changes, all of the Unix MPMs do that correctly.
-     [Ryan Bloom]
-
-  *) suexec: Allow HTTPS and SSL_* environment variables to be passed
-     through to CGI scripts. PR 9163
-     [Brian Reid <breid@customlogic.com>, 
-      Zvi Har'El <rl@math.technion.ac.il>]
-
-  *) binbuild.sh: Make sure that we use the expat from our source
-     tree so that there aren't any surprises on the target machine.
-     [Jeff Trawick]
-
-  *) mod_cgid: Add retry logic for when the daemon can't fork fast
-     enough to keep up with new requests.  Start using 
-     HTTP_SERVER_UNAVAILABLE instead of HTTP_INTERNAL_SERVER_ERROR
-     when we can't talk to the daemon.  [Jeff Trawick]
-
-  *) apxs: LTFLAGS envvar can override default libtool options.  Try
-     "LTFLAGS=' ' apxs -c mod_foo.c" to see what libtool does under
-     the covers.  [Jeff Trawick]
-
-  *) The Location: response header field, used for external
-     redirect, *must* be an absoluteURI.  The Redirect directive
-     tested for that, but RedirectMatch didn't -- it would allow
-     almost anything through.  Now it will try to turn an abs_path
-     into an absoluteURI, but it will correctly varf like Redirect
-     if the final redirection target isn't an absoluteURI.  [Ken Coar]
-
-Changes with Apache 2.0.31
-
-  *) Create the scoreboard (in the parent) in a global pool context,
-     so it survives graceful restarts. This fixes a SEGV during
-     graceful restarts.  [Aaron Bannert]
-
-  *) Add a timeout option to the proxy code 'ProxyTimeout' 
-     [Ian Holsman]
-
-  *) FTP directory listings are now always retrieved in ASCII mode.
-     The FTP proxy properly escapes URI's and HTML in the generated
-     listing, and escapes the path components when talking to the FTP
-     server. It is now possible to browse the root directory by using
-     a url like:   ftp://user@host/%2f/ (ported from apache_1.3.24)
-     Also, the last path component may contain wildcard characters
-     '*' and '?', and if they do, a directory listing is created instead
-     of a file retrieval. Example: ftp://user@host/httpd/server/*.c
-     [Martin Kraemer]
-
-  *) Added single-listener unserialized accept support to the
-     worker MPM [Brian Pane]
-
-  *) New Directive for mod_proxy: 'ProxyPreserveHost'. This passes
-     the incoming host header through to the proxied server
-     [Geoff <g.russell@ieee.org>]
-
-  *) New Directive Option for ProxyPass. It now can block a location
-     from being proxied [Jukka Pihl <jukka.pihl@entirem.com>]
-
-  *) Don't let the default handler try to serve a raw directory.  At
-     best you get gibberish.  Much worse things can happen depending
-     on the OS.  [Jeff Trawick]
-     
-  *) Change the pre_config hook to return a value. Modules can now emit
-     an error message and then cause the server to quit gracefully during
-     startup. This required a bump to the MMN.  [Aaron Bannert]
-
-  *) Fix some unix socket descriptor leaks in the handler side of
-     mod_cgid (the part that runs in the server process).  Whack a
-     silly "close(-1)" in the handler too.  [Jeff Trawick]
-
-  *) Change the pre_mpm hook to return a value, so that scoreboard
-     init errors percolate up to code that knows how to exit 
-     cleanly.  This required a bump to the MMN.  [Jeff Trawick]
-
-  *) Add the socket back to the conn_rec and remove the create_connection
-     hook. The create_connection hook had a design flaw that did not 
-     allow creating connections based on vhost info. [Bill Stoddard]
-
-  *) Fixed PATH_INFO and QUERY_STRING from mod_negotiation results.
-     Resolves the common case of using negotation to resolve the request
-     /script/foo for /script.cgi/foo.  [William Rowe]
-
-  *) Added new functions ap_add_(input|output)_filter_handle to
-     allow modules to bypass the usual filter name lookup when
-     adding hard-coded filters to a request [Brian Pane]
-
-  *) caching should now work on subrequests (still very experimental)
-     [Ian Holsman]
-  
-  *) The Win32 mpm_winnt now has a shared scoreboard.  [William Rowe]
-
-  *) Change ap_get_brigade prototype to use apr_off_t instead of apr_off_t*.
-     [Justin Erenkrantz]
-
-  *) Refactor ap_rgetline so that it does not use an internal brigade.
-     Change ap_rgetline's prototype to return errors.  [Justin Erenkrantz]
-
-  *) Remove mod_auth_db.  [Justin Erenkrantz]
-
-  *) Do not install unnecessary pcre headers like config.h and internal.h.
-     [Joe Orton <joe@manyfish.co.uk>]
-
-  *) Change in quick_hanlder behavior for subrequests. it now passes DONE
-     (as it does for a normal request). quick_handled sub-requests now work
-     in mod-include [Ian Holsman]
-
-  *) Change SUBREQ_CORE so that it is a 'HTTP_HEADER' filter instead of
-     'CONTENT' one, as it needs to run AFTER all content headers
-
-  *) Rename BeOS MPM directive RequestsPerThread to MaxRequestsPerThread.
-     [Lars Eilebrecht]
-
-  *) Split out blocking from the mode in the input filters.
-     [Justin Erenkrantz]
-
-  *) Fix a segfault in mod_include.  [Justin Erenkrantz, Jeff Trawick]
-
-  *) Cause Win32 to capture all child-worker process errors in
-     Apache to the main server error log, until the child can
-     open its own error logs.  [William Rowe]
-
-  *) HPUX 11.*: Do not kill the child process when accept() 
-     returns ENOBUFS on HPUX 11.*. (ported from a 1.3 patch
-     by [madhusudan_mathihalli@hp.com])
-     [Bill Stoddard]
-
-  *) Fix a problem in the parsing of the <Proxy foo> directive.
-     [Jeff Trawick]
-
-  *) rewrite of mod_ssl input filter for better performance and less
-     memory usage [Doug MacEachern]
-
-  *) allow quick_handler to be run on subrequests. [Ian Holsman]
-
-  *) mod_dav now asks its provider to place content directly into the
-     filter stack when handling a GET request. The mod_dav/provider
-     API has changed, so providers need to be updated. [Greg Stein]
-
-  *) Clear the output socket descriptor in unixd_accept() to make sure
-     we don't supply a bogus socket to the caller if the accept fails.
-     This caused problems with the worker MPM, which tried to process
-     the returned socket if it was non-NULL.  [Brian Pane]
-
-  *) Move a check for an empty brigade to the start of core input filter
-     to avoid segfaults.  [Justin Erenkrantz, Jeff Trawick]
-
-  *) Add FileETag directive to allow configurable control of what
-     data are used to form ETag values for file-based URIs.  MMN
-     bumped to 20020111 because of fields added to the end of
-     the core_dir_config structure.  [Ken Coar]
-
-  *) Fix a segfault in mod_rewrite's logging code caused by passing the
-     wrong config to ap_get_remote_host().  [Jeff Trawick]
-
-  *) Allow mod_cgid to work from a binary distribution install by
-     using 755 for the permissions on the log directory instead of
-     750.  [Jeff Trawick]
-
-  *) Fixed a segfault that happened during graceful shutdown (or when
-     the httpd ran out of file descriptors) with the worker MPM [Brian Pane]
-
-  *) Split all Win32 modules [excluding the core components mod_core, 
-     mod_so, mod_win32 and the winnt mpm] into individual loadable
-     modules, so the administrator may individually disable the former
-     compiled-in modules by simply commenting out their LoadModule
-     directives.  [William Rowe]
-
-  *) Saved Win32 module authors and porters many future headaches, by
-     duplicating the appropriate .h files such as os.h into the include
-     directory, including in the build tree.  [William Rowe]
-
-  *) mod_ssl adjustments to help with using toolkits other than OpenSSL:
-      Use SSL functions/macros instead of directly dereferencing SSL
-      structures wherever possible.
-      Add type-casts for the cases where functions return a generic pointer.
-      Add $SSL/include to configure search path.
-     [Madhusudan Mathihalli <madhusudan_mathihalli@hp.com>]
-
-  *) Moved several pointers out of the shared Scoreboard so it is
-     more portable, and will present the vhost name across server
-     generation restarts.  [William Rowe]
-
-  *) Fix SSLPassPhraseDialog exec: and SSLRandomSeed exec:
-     [Doug MacEachern]
-
-Changes with Apache 2.0.30
-
-  *) Fix the main bug for FreeBSD and threaded MPM's. There are
-     still issues (see STATUS) but at least the server will now
-     run without crashing the machine.
-     [David Reid, Aaron Bannert, Justin Erenkrantz]
-
-  *) Fix a typo in mod_deflate's m4 config section.
-     [albert chin (china@thewrittenword.com)]
-
-  *) Fix a couple of mod_proxy problems forwarding HTTP connections
-     and handling CONNECT:
-     (1) PR #9190  Proxy failed to connect to IPv6 hosts.
-     (2) Proxy failed to connect when the first IP address returned by 
-         the resolver was unreachable but a secondary IP address was.  
-     [Jeff Trawick]
-
-  *) Fix the module identifer as shown in the docs for various core
-     modules (e.g., the identifer for mod_log_config was previously
-     listed as config_log_module).  PR #9338
-     [James Watson <ap2bug@sowega.org>]
-
-  *) Fix LimitRequestBody directive by placing it in the HTTP
-     filter.  [Justin Erenkrantz]
-
-  *) Fix mod_proxy seg fault when the proxied server returns 
-     an HTTP/0.9 response or a bogus status line.
-     [Adam Sussman]
-
-  *) Prevent mod_proxy from truncating one character off the
-     end of the status line returned from the proxied server.
-     [Adam Sussman, Bill Stoddard]
-
-  *) Eliminate loop in ap_proxy_string_read().
-     [Adam Sussman, Bill Stoddard]
-
-  *) Provide $0..$9 results from mod_include regex parsing.
-     [William Rowe]
-
-  *) Allow mod-include to look for alternate start & end tags [Ian Holsman]
-
-  *) Introduced the ForceLanguagePriority directive, to prevent
-     returning MULTIPLE_CHOICES or NONE_ACCEPTABLE in some cases,
-     when using Multiviews.  [William Rowe]
-
-  *) Fix a problem which prevented mod_cgid and suexec from working
-     together reliably [Greg Ames]
-
-  *) Remove the call to exit() from within mod_auth_digest's post_config
-     phase.  [Aaron Bannert]
-
-  *) Fix a problem in mod_auth_digest that could potentially cause
-     problems with initialized static data on a system that uses DSOs.
-     [Aaron Bannert]
-
-  *) Fix a segfault in the worker MPM that could happen during
-     child process exits.  [Brian Pane, Aaron Bannert]
-
-  *) Allow mod_auth_dbm to handle multiple DBM types [Ian Holsman]
-
-  *) Fix matching of vhosts by ip address so we find IPv4
-     vhost address when target address is v4-mapped form of
-     that address.  [Jeff Trawick]
-
-  *) More performance tweaks to the BNDM string-search algorithm
-     used to find "<!--#" tokens in mod_include [Brian Pane]
-
-  *) Miscellaneous small performance fixes: optimized away various
-     string copy operations and removed large temp buffers from
-     the stack [Brian Pane]
-
-  *) Fixed startup segfault that occurred when a VirtualHost
-     directive had a port but no address [Brian Pane]
-
-  *) Allow htdbm to work with multiple DBM types [Ian Holsman]
-
-  *) Win32: Made change to apr_sendfile() to return APR_ENOTIMPL
-     if oslevel < WINNT.  This should fix several problems reported
-     Against 2.0.28 on Windows 98 [Bill Stoddard]
-
-  *) Win32: Fix bug that could cause CGI scripts with QUERY_STRINGS
-     to fail. [Bill Stoddard]
-
-  *) Change core code to allow an MPM to set hard thread/server
-     limits at startup.  prefork, worker, and perchild MPMs now have 
-     directives to set these limits.  [Jeff Trawick]
-
-  *) Win32: The async AcceptEx() event should be autoreset upon
-     successful completion of a wait (WaitForSingleObject). This
-     eliminates a number of spurious
-     setsockopt(SO_UPDATE_ACCEPT_CONTEXT) failed." messages.
-     [Bill Stoddard]
-
-  *) Move any load library path environment variables out of 
-     apachectl and into a separate environment variable file which
-     can be more easily tailored by the admin.  The environment
-     variable file as built by Apache may have additional system-
-     specific settings.  For example, on OS/390 we tailor the heap
-     settings to allow lots of threads.  [Jeff Trawick]
-    
-  *) Use the new APR pool code to reduce pool-related lock
-     contention in the worker MPM.  [Sander Striker]
-
-  *) The POD no longer assumes the child is listening on 127.0.0.1
-     and now pulls the first hostname in the list of listeners to
-     perform the dummy connect on. This fixes a bug when the user
-     had configured the Listen directive for an IP other than
-     127.0.0.1. This would result in undead children and error
-     messages such as "Connection refused: connect to listener".
-     [Aaron Bannert]
-
-  *) The worker MPM now respects the LockFile setting, needed to
-     avoid locking problems with NFS.  [Jeff Trawick]
-
-  *) Fix segfault when worker MPM receives SIGHUP.
-     [Ian Holsman, Aaron Bannert, Justin Erenkrantz]
-
-  *) Fix bug that could potentially prevent the perchild MPM from
-     working with more than one vhost/uid.  [Aaron Bannert]
-
-  *) Change make install and apxs -i processing of DSO modules to 
-     perform special handling on platforms where libtool doesn't install 
-     mod_foo.so.  This fixes some wonkiness on HP-UX, Tru64, and AIX 
-     which prevented standard LoadModule statements from working.
-     [Jeff Trawick]
-
-  *) Whenever mod_so is enabled (not just when there are DSOs for
-     our modules), do whatever special magic is required for compiling/
-     loading third-party modules.  This allows third-party DSOs to
-     be used on an AIX build when there were no built-in modules
-     built as DSOs.  (This should help on OS/390 and BeOS as well.)
-     [Jeff Trawick]
-
-  *) Allow apxs to be used to build DSOs on AIX without requiring the
-     user to hard-code the list of import files.  (This should help
-     on OS/390 and BeOS as well.)  [Jeff Trawick]
-     
-  *) Resolved segfault in mod_isapi when configuring with ISAPICacheFile.
-     PR 8563, 8919  [William Rowe]
-  
-  *) Get binary builds working when libapr and libaprutil are built
-     shared [Greg Ames]
-
-  *) Get shared builds of libapr and libaprutil, as well as Apache DSOs,
-     working on AIX.  [Aaron Bannert, Dick Dunbar <RLDunbar@pacbell.net>,
-     Gary Hook <ghook@us.ibm.com>, Victor Orlikowski, Jeff Trawick]
-
-  *) Fix the handling of SSI directives in which the ">" of the
-     terminating "-->" is the last byte in a file [Brian Pane]
-
-  *) Add back in the "suEXEC mechanism enabled (wrapper: /path/to/suexec)"
-     message that we had back in apache-1.3 and still have scattered
-     throughout our docs.  [Aaron Bannert]
-
-  *) Prevent the Win32 port from continuing after encountering an
-     error in the command line args to apache.  [William Rowe]
-
-  *) On a error in the proxy, make it write a line to the error log
-     [Ian Holsman]
-
-  *) Various mod_ssl performance improvements [Doug MacEachern]
-
-Changes with Apache 2.0.29
-
-  *) Add buffering in core_output_filter to ensure that long
-     lists of small buckets don't cause small packet writes.
-     [Brian Pane, Ryan Bloom]
-
-  *) Fix the installation target to make sure that the manual is 
-     installed in the correct location.
-     [Yoshifumi Hiramatsu <hiramatu@boreas.dti.ne.jp> and
-      Gomez Henri <hgomez@slib.fr>]
-
-  *) Fix the cmd command for mod_include.  When we are processing
-     a cmd command, we do not want to use the r->filename to set
-     the command name.  The command comes from the SSI tag.  To do this,
-     I added a variable to the function that builds the command line
-     in mod_cgi.  This allows the include_cmd function to specify
-     the command line itself. [Ryan Bloom]
-
-  *) Change open_logs hook to return a value, allowing you
-     to flag a error while opening logs
-     [Ian Holsman, Doug MacEachern]
-
-  *) Change post_config hook to return a value, allowing you
-     to flag a error post config
-     [Ian Holsman, Jeff Trawick]
-
-  *) Allow SUEXEC_BIN (the path to the suexec binary that is
-     hard-coded into the server) to be specified to the configure
-     script by the --with-suexec-bin parameter.  [Aaron Bannert]
-
-  *) Fix segv in worker MPM following accept on pipe-of-death
-     [Brian Pane]
-
-  *) Add mod_deflate to experimental.  
-     [Ian Holsman, Justin Erenkrantz]
-
-  *) Bail out at configure time if an invalid MPM was specified.
-     [jean-frederic clere <jfrederic.clere@fujitsu-siemens.com>]
-
-  *) Prevent segv in ap_note_basic_auth_failure() when no AuthName is
-     configured [John Sterling <sterling@covalent.net>]
-
-  *) Fix apxs to use sbindir.  [Henri Gomez <hgomez@slib.fr>]
-
-  *) Fix a problem with IPv6 vhosts.  PR #8118  [Jeff Trawick]
-
-  *) Optimization for the BNDM string-search function in
-     mod_include.  [Brian Pane]
-
-  *) Fixed the behavior of the XBitHack directive.
-     [Taketo Kabe <kabe@sra-tohoku.co.jp>, Cliff Woolley] PR#8804
-
-  *) The threaded MPM for Unix has been removed.  Use the worker
-     MPM instead.  [various]
-
-  *) APR-ize the resolver logic in mod_unique_id.  This fixes a bug
-     in logging the error from a failed DNS lookup.  [Jeff Trawick]
-
-  *) Added the missing macros AP_INIT_TAKE13 and AP_INIT_TAKE123.
-     [Cliff Woolley]
-
-  *) Get mod_cgid killed when a MPM exits due to a fatal error.
-     [Jeff Trawick]
-
-  *) Fix a file descriptor leak in mod_include.  When we include a
-     file, we use a sub-request, but we didn't destroy the sub-request
-     immediately, instead we waited until the original request was
-     done.  This patch closes the sub-request as soon as the data is
-     done being generated.  [Brian Pane <bpane@pacbell.net>]
-
-  *) Allow modules that add sockets to the ap_listeners list to
-     define the function that should be used to accept on that
-     socket.  Each MPM can define their own function to use for
-     the accept function with the MPM_ACCEPT_FUNC macro.  This
-     also abstracts out all of the Unix accept error handling
-     logic, which has become out of synch across Unix MPMs.
-     [Ryan Bloom]
-
-  *) Fix a bug which would cause the response headers to be omitted
-     when sending a negotiated ErrorDocument because the required
-     filters were attached to the wrong request_rec.
-     [John Sterling <sterling@covalent.net>]
-
-  *) Remove commas from the end of the macros that define
-     directives that are used by MPMs.  Prior to this patch,
-     you would use these macros without commas, which was unlike
-     the macros for any other directives.  Now, the caller provides
-     the comma rather than the macro providing it.  This makes
-     the macros look more like the rest of the directives.
-     [Ryan Bloom and Cliff Woolley]
-
-  *) Add 'redirect-carefully' environment option to disable sending
-     redirects under special circumstances.  This is helpful for 
-     Microsoft's WebFolders when accessing a directory resource via
-     DAV methods.  [Justin Erenkrantz]
-
-  *) Begin to abstract out the underlying transport layer.
-     The first step is to remove the socket from the conn_rec,
-     the server now lives in a context that is passed to the
-     core's input and output filters. This forces us to be very
-     careful when adding calls that use the socket directly,
-     because the socket isn't available in most locations.
-     [Ryan Bloom]
-
-  *) Really reset the MaxClients value in worker and threaded
-     when the configured value is not a multiple of the number 
-     of threads per child.  We said we did previously but we 
-     forgot to. [Jeff Trawick]
-
-  *) Add Debian layout.  [Daniel Stone <daniel@sfarc.net>]
-
-  *) If shared modules are requested and mod_so is not available,
-     produce a fatal config-time error.  [Justin Erenkrantz]
-
-  *) Improve http2env's performance by cutting the work it has to
-     do.  [Brian Pane <bpane@pacbell.net>]
-
-  *) use new 'apr_hash_merge' function in mod_mime (performance fix)
-     [Brian Pane <bpane@pacbell.net>]
-
-Changes with Apache 2.0.28
-
-  *) Fix infinite loop in mod_cgid.c.  
-     [Dale Ghent <daleg@elemental.org>, Brian Pane <bpane@pacbell.net>]
-
-  *) When no port is given in a "ServerName host" directive, the
-     server_rec->port is now set to zero, not 80. That allows for
-     run-time deduction of the correct server port (depending on
-     SSL/plain, and depending also on the current setting of
-     UseCanonicalName). This change makes redirections
-     work, even with https:// connections. As in Apache-1.3, the
-     connection's actual port number is never used, only the ServerName
-     setting or the client's Host: setting. Documentation updated
-     to reflect the change. [Martin Kraemer]
-
-  *) Add a '%{note-name}e' argument to mod-headers, which works in
-     the same way as mod_log_confg.  [Ian Holsman]
-
-  *) Fix the spelling of the AP_MPMQ_MIN_SPARE_DAEMONS and
-     AP_MPMQ_MAX_REQUESTS_DAEMON macros in ap_mpm.h and all standard
-     MPMs.  [Cliff Woolley]
-
-  *) Introduce htdbm, a user management utility for db/dbm authorization
-     databases.  [Mladen Turk <mturk@mappingsoft.com>]
-
-  *) Optimize usage of strlen and strcat in ap_directory_walk.
-     [Brian Pane <bpane@pacbell.net>]
-
-Changes with Apache 2.0.27
-
-  *) Introduce an Apache mod_ssl initial configuration template 
-     (ssl.conf, generated from ssl-std.conf).  [Ralf S. Engelschall]
-
-  *) Fixed a memory leak in the getline parsing code that could
-     be triggered by arbitrarily large header lines. Requests
-     from the core input filter for single lines are now limited
-     to HUGE_STRING_LEN (8192 bytes).  [Aaron Bannert]
-
-  *) Fix a truncation bug in how we print the port on the Via: header. 
-     The routine that prints the Via: header now takes a length for
-     the port string.  [Zvi Har'El <rl@math.technion.ac.il>]
-
-  *) Some syntax errors in mod_mime_magic's magic file can result
-     in a 500 error, which previously was unlogged.  Now we log the
-     error.  [Jeff Trawick]
-
-  *) Add the support/checkgid helper app, which checks the run-time
-     validity of group identifiers usable in the Group directive.
-     [Ken Coar]
-
-  *) Various --enable-so options have been fixed: --enable-so is
-     treated as "static"; explicit --enable-so=shared issues an error;
-     and explicit --enable-so fails with error on systems without
-     APR_HAS_DSO.  [Aaron Bannert]
-
-  *) Fix a segfault in the core input filter when the client socket
-     gets disconnected unexpectedly.  [Cliff Woolley]
-
-  *) Fix the reporting for child processes that die.  This removes
-     all of the non-portable W* macros from Apache. 
-     [Jeff Trawick and Ryan Bloom]
-
-  *) Win32: Track and display "Parent Server Generation:" in
-     mod_status output. The generation will be bumped at
-     server graceful restart, when the child process exits
-     by hitting MaxRequestsPerChild or if the child 
-     process exits abnormally. [Bill Stoddard]
-
-  *) Win32: Fix problem where MaxRequestsPerChild directive was
-     not being picked up in favor of the default. Enable
-     the parent to start up a new child process immediately upon
-     the old child starting shutdown.
-     [Bill Stoddard]
-
-  *) Fix some bungling of the remote port in rfc1413.c so that 
-     IdentityCheck retrieves the proper user id instead of failing
-     and thus always returning "nobody."  
-     [Dick Streefland <Dick.Streefland@xs4all.nl>]
-
-  *) Introduced thread saftey for mod_rewrite's internal cache.
-     [Brian Pane <bpane@pacbell.net>]
-
-  *) Simplified mod_env's directives to behave as most directives are
-     expected, in that UnsetEnv will not unset a SetEnv and PassEnv 
-     directive following that UnsetEnv within the same container.
-     Also provides a runtime startup warning if a PassEnv configured 
-     environment value is undefined.  [William Rowe]
-
-  *) The worker MPM is now completely ported to APR's new lock API. It
-     uses native APR types for thread mutexes, cross-process mutexes,
-     and condition variables.  [Aaron Bannert]
-
-  *) Sync up documentation to remove all references to the now deprecated
-     Port directive.  [Justin Erenkrantz]
-
-  *) Moved all ldap modules from the core to httpd-ldap sub-project
-     [Ryan Bloom]
-
-  *) Exit when we can't listen on any of the configured ports.  This
-     is the same behavior as 1.3, and it avoids having the MPMs to
-     deal with bogus ap_listen_rec structures.  [Jeff Trawick]
-
-  *) Cleanup the proxy code that creates a request to the origin
-     server.  This change adds an optional hook, which allows modules
-     to gain control while the request is created if the proxy module
-     is loaded.  The purpose of this hook is to allow modules to add
-     input and/or output filters to the request to the origin.  While
-     I was at it, I made the core use this hook, so that proxy request
-     creation uses some of the code from the core.  This can still be
-     greatly improved, but this is a good start.  [Ryan Bloom]
-
-Changes with Apache 2.0.26
-
-  *) Port the MaxClients changes from the worker MPM to the threaded
-     MPM.  [Ryan Bloom]
-
-  *) Fix mod_proxy so that it handles chunked transfer-encoding and works
-     with the new input filtering system.  [Justin Erenkrantz]
-
-  *) Introduce the MultiviewsMatch directive, to allow the operator
-     to be flexible in recognizing Handlers and Filters filename
-     extensions as part of the Multiviews matching logic, strict with
-     MultiviewsMatch NegotiatedOnly to accept only filename extentions 
-     that designate negotiated parameters, (content type, charset, etc.)
-     or MultiviewsAll for the 1.3 behavior of matching any files, even
-     if they have unregistered extensions.  [William Rowe]
-
-  *) Fixed the configure script to add a LoadModule directive to
-     the default httpd.conf for any module that was compiled
-     as a DSO.  [Aaron Bannert <aaron@clove.org>]
-
-  *) rewrite mod_ssl input filtering to work with the new input filtering
-     system.  [Justin Erenkrantz]
-
-  *) prefork: Don't segfault when we are able to listen on some but
-     not all of the configured ports.  [Jeff Trawick]
-
-  *) Build mod_so even if no core modules are built shared.
-     [Aaron Bannert <aaron@clove.org>]
-
-  *) Introduce ap_directory_walk rewrite (with further optimizations
-     required) to adapt to the ap_process_request_internal() changes.
-     Optimized so subrequests and redirects now reuse previous section 
-     merges, until we mismatch with the original directory_walk, and
-     precomputed r->finfo results will cause directory_walk to skip
-     the most expensive phases of the function.  [William Rowe]
-
-  *) Allow ApacheMonitor to connect to and control Apache on other 
-     WinNT/2K machines.   [Mladen Turk <mturk@mappingsoft.com>]
-
-  *) Remove the Port directive.  In it's place, the Listen directive
-     is now a required directive, which tells Apache what port to
-     listen on.  The ServerName directive has also been extended
-     to accept an optional port.  If the port is specified to the
-     ServerName, the server will report that port whenever it
-     reports the port that it is listening on.  This change was
-     made to ease configuration errors that stem from having a Port
-     directive, and a Listen directive.  In that situation, the server
-     would only listen to the port specified by the Listen command,
-     which caused a lot of confusion to users.  [Ryan Bloom]
-
-  *) Added mod_mime_magic, mod_unique_id and mod_vhost_alias to the Win32
-     build, as loadable modules.  [William Rowe]
-
-  *) Fix --enable-mods-shared processing.  If most is specified,
-     then all modules that can be compiled as shared modules are.
-     [Aaron Bannert <aaron@clove.org>]
-
-  *) Update the mime.types file to map video/vnd.mpegurl to mxu
-     and add commonly used audio/x-mpegurl for m3u extensions.        
-     [Heiko Recktenwald <uzs106@uni-bonn.de>, Lars Eilebrecht]
-
-  *) Eliminate the depreciated r->content_language, in favor of the array
-     r->content_languages introduced many years ago.  Module authors must
-     substantially overhaul their modules, so this needs to be upgraded
-     if the module still relied on backwards-brokeness.  [William Rowe]
-
-  *) Allow configure help strings to work with autoconf 2.50+ and 2.13.
-     [Justin Erenkrantz]
-
-  *) Rewrite the input filtering mechanisms to consolidate and reorganize
-     code.  In short, core_input_filter does something now and
-     ap_http_filter is now only concerned with HTTP.  [Justin Erenkrantz]
-
-  *) Update the Win32 build to re-absorb mod_proxy and family.
-     [William Rowe]
-
-  *) Resolved the build failure on Win32 using MSVC 5.0 (without the
-     current SDK.)  [William Rowe]
-
-  *) Some style changes to the code that does ProxyErrorOverride. Fixed
-     config merge behaviour. [Graham Leggett]
-
-  *) Allow support programs to be compiled against a static version
-     of libapr.  This allows the smaller support programs to be 
-     relocated.  [Aaron Bannert <aaron@clove.org>]
-
-  *) Update the mime.types file to the registered media types as
-     of 2001-09-25, and add mapping for xsl extension [Mark Cox]
-
-  *) Fix MaxClients in the Worker MPM, so that it specifies the maximum
-     number of clients that can connect at the same time, instead of
-     specifying the maximum number of child processes.
-     [Aaron Bannert <aaron@clove.org>]
-
-  *) Switch proc_pthread AcceptMutex configuration directive to pthread to 
-     be consistent with 1.3.  [Justin Erenkrantz]
-
-  *) Cache apr_explode_localtime() value for 15 seconds.
-     [Brian Pane <bpane@pacbell.net>]
-
-  *) Fix mod_include to not return ETag or Last-Modified headers.
-     [Ian Holsman <ianh@cnet.com>]
-
-  *) Fix worker MPM's scoreboard logic.  [Aaron Bannert <aaron@clove.org>]
-
-  *) Eliminate the wasteful run-time conversion of method names from strings 
-     to numbers in places where the methods are known at compile time.  
-     [Brian Pane <bpane@pacbell.net>]
-
-  *) Turn the worker MPM's queue into a LIFO.  This may
-     improve cache-hit performance under some conditions.
-     [Aaron Bannert <aaron@clove.org>]
-
-  *) Switch back to SIGUSR1 for graceful restarts on all platforms that
-     support it.  [Justin Erenkrantz]
-
-  *) Cleanup the worker MPM.  We no longer re-use transaction
-     pools.  This incurs less overhead than shuffling the pools
-     around so that they can be re-used.  Remove one of the
-     queue's condition variables.  We just redefined the API to
-     state that you can't try to add more stuff than you allocated
-     segments for.  [Aaron Bannert <aaron@clove.org>]
-
-  *) Fix SSL VPATH builds [Cody Sherr <csherr@covalent.net>]
-
-  *) Fixed persistent connections when a request contains a body.
-     [Greg Stein]
-
-  *) mod_dav uses a new API to speak to the backend provider for dead
-     property management. [Greg Stein]
-
-  *) Remove the Win32 script-processing exception from mod_cgi, and
-     roll build_command_line/build_argv_list into a unified, overrideable
-     ap_cgi_build_command optional function.  [William Rowe]
-
-  *) Rewrite find_start_sequence to use a better search algorithm
-     to find the start tag.  [Justin Erenkrantz]
-
-  *) Fix a seg fault in mod_include.  When we are generating an
-     internal redirect, we must set r->uri to "", not a bogus
-     string, and not NULL.  [Ryan Bloom]
-
-  *) Optimized location_walk, so subrequests, redirects and second passes
-     now reuse previous section merges on a <Location > by <Location >
-     basis, until we mismatch with the original location_walk. 
-     [William Rowe]
-
-  *) Back out the 1.45 change to util_script.c.  This change made
-     us set the environment variable REQUEST_URI to the redirected
-     URI, instead of the originally requested URI.
-     [Taketo Kabe <kabe@sra-tohoku.co.jp>]
-
-  *) Make mod_include do lazy evaluation of potentially expensive to
-     compute variables.  [Brian Pane <bpane@pacbell.net>]
-
-  *) Fix logging of bytes sent for HEAD requests.  %b and %B should
-     log either - or 0, before this patch, they were both logging
-     the file size.  [Taketo Kabe <kabe@sra-tohoku.co.jp>]
-
-  *) Make mod_include check for BYTE_CHECK_THRESHOLD per bucket rather 
-     than per character.  [Brian Pane <bpane@pacbell.net>]
-
-  *) Normalize the primary request, redirects and sub-requests to
-     run the same ap_process_request_internal for consistency in
-     robustness, behavior and security.  [William Rowe]
-
-  *) Fix a segfault with mod_include when r->path_info is not set
-     (which is the case with mod_proxy).  [Ian Holsman <ianh@cnet.com>]
-
-  *) Add -X functionality back.  This indicates to all MPMs and any other
-     part of Apache that it should run in "debug" mode.  [Justin Erenkrantz]
-
-  *) Some initial support for the cygwin platform [prefork only].
-     This is not to be confused with support for the WinNT/Win32
-     platform, which is the recommended configuration for native
-     Win32 users.  The cygwin platform support is recommended for
-     cygwin platform users. [Stipe Tolj <tolj@wapme-systems.de>]
-
-  *) Changed syntax of Set{Input|Output}Filter.  The list of filters
-     must be semicolon delimited (if more than one filter is given.)
-     The Set{Input|Output}Filter directive now overrides a parent
-     container's directive (e.g. SetInputFilter in <Directory /web/foo>
-     will override any SetInputFilter directive in <Directory /web>.)
-     This new syntax is more consistent with Add{Input|Output}Filter
-     directives defined in mod_mime.  Also cures a bug in prior releases
-     where the Set{Input|Output}Filter directive would corrupt the 
-     global configuration if the multiple directives were nested.
-     [William Rowe]
-
-  *) Cured what's ailed mime for quite some time.  If an AddSomething
-     was given in the configuration (Language, Charset, Handler or
-     Encoding) Apache would set the content type as given by AddType, 
-     but refused to check the mime.types file if AddType wasn't given 
-     for that specific extension.  Setting the AddHandler for .html 
-     without setting the AddType text/html html would cause Apache to 
-     use the default content type.  [William Rowe]
-
-  *) Added some bulletproofing to memory allocation in the LDAP cache
-     code. [Graham Leggett]
-
-Changes with Apache 2.0.25
-
-  *) Move the installed /manual directory out of the /htdocs/ tree, so
-     that it can be kept more independently from the remaining document
-     root. The "Alias /manual ..." already allowed for easy projection
-     into existing private document trees. [Martin Kraemer]
-
-  *) Add specified user attributes to the environment when using
-     mod_auth_ldap. This allows you to use mod_include to embed specified
-     user attributes in a page like so:
-     Hello <!--#echo var="AUTHENTICATE_CN"-->, how are you?
-     [Graham Leggett]
-
-  *) Fix a performance problem with the worker MPM.  We now create
-     transaction pools once, and re-use them for each connection.
-     [Aaron Bannert <aaron@clove.org>]
-
-  *) Modfied mod_mime to prevent mod_negotation from serving a multiview
-     of a 'handler' or 'filter', so that any filename extension that does 
-     not contribute to the negotiated metadata can't be served without
-     an explicit request.  E.g., if the .Z extension is associated with
-     an unzip filter, the user request somefile.Z.html, mod_negotiation
-     won't serve it.  It can serve somefile.Z.html when somefile.Z is
-     requested, since the .Z extension is explictly requested, if the
-     .html extension is associated with ContentType text/html.
-     [William Rowe]
-
-  *) Introduce the AddInputFilter filter[;filter...] ext [ext...]
-     and corresponding AddOutputFilter syntax, to insert one or more 
-     filters by mod_mime filename extension processing.
-     [William Rowe]
-
-  *) Fix a growing connection pool in core_output_filter() for 
-     keepalive requests.  [Jeff Trawick]
-
-  *) Moved split_and_pass_pretag_buckets back to being a
-     macro at Ryans's request. Removed the return from it
-     by setting and returning a return code instead. Updated
-     the code to check the return code from the macro and
-     do the right thing. [Paul J. Reder]
-
-  *) Fix a segfault when a numeric value was received for Host:.
-     [Jeff Trawick]
-
-  *) Add a function ap_remove_input_filter.  This is to match
-     up with ap_remove_output_filter.  [Ryan Bloom]
-
-  *) Clean up location_walk, so that this step performs a minimum
-     amount of redundant effort (it must be run twice, but it will no
-     longer reparse all <Location > blocks when the request uri
-     hadn't changed.)  [William Rowe]
-
-  *) Eliminate proxy: (and all other 'special') processing from the
-     ap_directory_walk() phase.  Modules that want to use special
-     walk logic should refer to the mod_proxy map_to_location example,
-     with it's proxy_walk and proxysection implementation.  This makes
-     either directory_walk flavor much more legible, since that phase
-     only runs against real <Directory > blocks.
-     [William Rowe]
-
-  *) Fix a security problem in mod_include which would allow
-     an SSI document to be passed to the client unparsed.
-     [Cliff Woolley, Brian Pane]
-
-  *) Introduce the map_to_storage hook, which allows modules to bypass
-     the directory_walk and file_walk for non-file requests.  TRACE
-     shortcut moved to http_protocol.c as APR_HOOK_MIDDLE, and the
-     directory_walk/file_walk happen as APR_HOOK_VERY_LAST in core.c.
-     [William Rowe]
-
-  *) Add the ability for mod_include to add the INCLUDES filter
-     if the file is configured for the server-parsed handler.
-     This makes the configuration for .shtml files much easier
-     to understand, and allows mod_include to honor Apache 1.3
-     config files.   Based on Doug MacEachern's patch to PHP
-     to do the same thing.  [Ryan Bloom]
-
-  *) force OpenSSL to ignore process local-caching and to always
-     get/set/delete sessions using mod_ssl's callbacks
-     [Madhusudan Mathihalli <madhusudan_mathihalli@hp.com>,
-      Geoff Thorpe <geoff@geoffthorpe.net>]
-
-  *) Make the worker MPM shutdown and restart cleanly.  This also
-     cleans up some race conditions, and gets the worker using
-     pools more cleanly.  [Aaron Bannert <aaron@clove.org>]
-
-  *) Implement CRYPTO_set_locking_callback() in terms of apr_lock
-     for mod_ssl
-     [Madhusudan Mathihalli <madhusudan_mathihalli@hp.com>]
-
-  *) Fix for mod_include. Ryan's patch to check error
-     codes put a return in the wrong place. Also, the
-     include handler return code wasn't being checked.
-     I don't like macros with returns, so I converted
-     SPLIT_AND_PASS_PRETAG_BUCKETS into a function.
-     [Paul J. Reder <rederpj@raleigh.ibm.com>]
-
-  *) fix segv in mod_mime if no AddTypes are configured
-     [John Sterling <sterling@covalent.net>]
-
-  *) Enable ssl client authentication at SSL_accept time
-     [Madhusudan Mathihalli <madhusudan_mathihalli@hp.com>]
-
-  *) Fix a segfault in mod_include when the original request has no
-     associated filename (e.g., we're filtering the error document for
-     a bad URI).  [Jeff Trawick]
-
-  *) Fix a storage leak (a strdup() call) in mod_mime_magic.  [Jeff Trawick]
-
-  *) The prefork and OS/2 MPMs are overwriting the pid file when a second copy
-     of httpd is started and shuts down due to socket conflict. Moving the
-     call to ap_log_pid solves the problem.
-
-  *) Changed the late-1.3 log_config substitution %c to %X, to log the
-     status of the closed connection, as it conflicts with the far more
-     common, historical ssl logging directive %...{var}c.  [William Rowe]
-
-  *) Added the common error/ tree to the build/install targets 
-     (similar to the common icons/ tree) for the multi-language error 
-     messages that Lars committed earlier.  [William Rowe]
-
-  *) Added a multi process, multi threaded OS/2 MPM mpmt_os2.  [Brian Havard]
-
-  *) Added a default commented-out mod_ldap and mod_auth_ldap
-     configuration to httpd-std.conf and httpd-win.conf
-     [Graham Leggett]
-
-  *) Added documentation for mod_ldap and mod_auth_ldap.
-     [Graham Leggett]
-
-  *) Enabled negative caching on attribute comparisons in the LDAP cache.
-     Fixed a problem where the default cache TTL was set in milliseconds
-     not microseconds causing the cache to time out almost immediately.
-     [Graham Leggett]
-
-  *) Fixed all the #if APR_HAS_SHARED_MEMORY checks within the LDAP
-     module code to follow APR. [Graham Leggett]
-
-  *) Fixed LDAP cleanup on graceful restarts. LDAP connections are now
-     cleaned up when the connection pool pool is cleaned up.
-     [Graham Leggett]
-
-  *) Fix a minor issue with Jeff Trawick's mod_include
-     patch. Without this patch, the code will just allocate
-     more bytes in get_combined_directive than are needed.
-     [Paul Reder]
-
-  *) Added the LDAP authentication module mod_auth_ldap.
-     [Dave Carrigan <dave@rudedog.org>, Graham Leggett]
-
-  *) Added the LDAP cache and connection pooling module mod_ldap.
-     [Dave Carrigan <dave@rudedog.org>, Graham Leggett]
-
-  *) Fix --enable-modules=all breakage with mod_auth_db and mod_auth_digest
-     by allowing a module to disable itself if its prerequisites are not
-     met.  [Justin Erenkrantz]
-
-Changes with Apache 2.0.24
-
-  *) Fix a couple of issues in mod_include when the tag appeared at
-     offsets near 8192 in the file being parsed.  [Jeff Trawick]
-
-  *) Fix an assertion failure in mod_ssl when the keepalive timeout is  
-     reached.  [Jeff Trawick]
-
-  *) Numerous improvements to the Win32 build system.  Introduced command line
-     builds without requiring .mak files for MSVC 6.0 and later versions.
-     Improved .dsp file compatibility for both Visual Studio 5.0 and 6.0 users.
-     [William Rowe]
-
-  *) Assorted corrections and improvements to the winnt_mpm startup code.  Better
-     reporting of uninstalled services and other error conditions, and changed the 
-     default service name to Apache2.  [William Rowe]
-
-  *) Numerous improvements to the Win32 ApacheMonitor utility, including winnt_mpm 
-     compatibility with existing Apache 1.3 Win32 Apache management utilites.  
-     [Mladen Turk <mturk@mappingsoft.com>, William Rowe]
-
-  *) Fixed the segfaults in mod_mime introduced by hash tables in 2.0.20.
-     [William Rowe, Greg Ames]
-
-  *) Rounded out the mod_mime Add/Remove pairs by adding RemoveLanguage
-     and RemoveCharset directives.  [William Rowe]
-
-  *) The Unix MPMs other than perchild now allow child server 
-     processes to use the accept mutex when starting as root and 
-     using SysV sems for the accept mutex.  Previously, this 
-     combination would lead to fatal errors in the child server 
-     processes.  perchild can't use SysV sems because of security
-     issues.  [Jeff Trawick, Greg Ames]
-
-  *) Added Win32 revision stamp resources to all http binaries
-     (including modules/ and support/ tools.)  PR7322  [William Rowe]
-
-  *) Fix ap_rvprintf to support more than 4K of data at one time.
-     [Cody Sherr <csherr@covalent.net>]
-
-  *) We have always used the obsolete/deprecated Netscape syntax
-     for our tracking cookies; now the CookieStyle directive
-     allows the Webmaster to choose the Netscape, RFC2109, or
-     RFC2965 format.  The new CookieDomain directive allows the
-     setting of the cookie's Domain= attribute, too.  PR #s 5006,
-     5023, 5920, 6140 [Ken Coar]
-
-  *) Tweak server/Makefile so that the rules for generating exports.c
-     are compatible with make utilities which don't expand wildcards
-     in a dependency list (e.g., OS/390 make, certain levels of GNU
-     make).  [Jeff Trawick]
-
-  *) Install the SSL headers.  [John Sterling <sterling@covalent.net>]
-
-  *) Begin to sanitize the MPM configuration directives.  Now, all
-     MPMs use the same functions for all common MPM directives.  This
-     should make it easier to catch all bugs in these directives once.
-     [Cody Sherr <csherr@covalent.net>]
-
-  *) Close a major resource leak.  Every time we had issued a
-     graceful restart, we leaked a socket descriptor.
-     [Ryan Bloom]
-
-  *) Fix a problem with the new method code.  We need to cast
-     the 1 to an apr_int64_t or it will be treated as a 32-bit
-     integer, and it will wrap after being shifted 32 times.
-     [Cody Sherr <csherr@covalent.net> and Ryan Morgan <rmorgan@covalent.net>]
-
-  *) Fix a bug in mod_expires.  Previous to this patch, if you
-     told mod_expires to add 604800 seconds to the last-modified
-     time, it actually added 604800 usec's to the last-modified time,
-     so that when looking at the response it looked like nothing
-     had been done.  The root of the problem was that we always compute
-     time in usec's, but we ask users to input sec's.  This means we
-     need to convert to usec's before using those values.
-     [Ryan Bloom]
-
-  *) The worker MPM now handles shutdown and restart requests.  It
-     definitely isn't perfect, but we do stop the servers correctly.
-     The biggest problem right now is that SIGHUP causes the server to
-     just die.  [Ryan Bloom]
-
-Changes with Apache 2.0.23
-
-  *) Use the prefork MPM by default on Unix.  [various]
-
-  *) Added a systray icon monitor application for Win32.
-     [Mladen Turk <mturk@mappingsoft.com>]
-
-  *) mod_rewrite: Fix the line ending on some non-Unix systems for 
-     messages written to the rewrite log.  
-     [Richard Labennett <rlabenn@us.ibm.com>]
-
-  *) All mod_autoindex query parsing is now quietly quashed with the 
-     IndexOption IgnoreClient.  The IndexOption SuppressColumnSorting 
-     still drops the column sort <a href>'s for the column headers, but 
-     IgnoreClient is required to ignore these Query options entirely.  
-     [William Rowe]
-
-  *) Introduced new mod_autoindex query argument parsing for F=[0|1|2]
-     to allow the client to select plain, FancyIndexing or HTMLTable
-     formatting, V=[0|1] to inhibit or enable version sorting, and 
-     P=pattern to return only specific files.  The old Query Arguments
-     were reorganized as C=f for sorting column 'f' (same N, D, S, or M
-     as before), and O=A|D for ordering ascending or descending.  
-     [William Rowe]
-
-  *) Fixed an error in mod_include's directive parsing routines which
-     caused #if, #elif, and #else expressions containing backslashes
-     to be improperly evaluated.  [Cliff Woolley]
-
-  *) Introduced new mod_autoindex IndexOptions flags: SuppressIcon to 
-     drop the icon column, SuppressRules to drop the <hr> elements, 
-     and HTMLTable to create rudimentary HTML table listings (implies 
-     FancyIndexing).  [William Rowe]
-
-  *) Re-introduced the mod_autoindex IndexOptions flag TrackModified
-     from Apache 1.3.15.  This is needed for two reasons, first, given
-     multiple machines within a server farm, ETags and Last-Modified 
-     stamps won't correspond from machine to machine, and second, many 
-     Unixes don't capture changes to the date or time stamp of existing 
-     files, since these don't modify the dirent itself.  [William Rowe]
-
-  *) Re-introduced the mod_autoindex IndexOptions flag FoldersFirst 
-     and DirectoryWidth options from Apache 1.3.10. 
-     [William Rowe, Ken Coar]
-
-  *) Eliminated FancyIndexing directive, deprecated early in Apache
-     1.3 by the IndexOptions FancyIndexing syntax.  [William Rowe]
-
-  *) mod_autoindex now excludes any file names that would result in
-     an error, other than a success or redirect.  Also optimized
-     the parent directory, always included except in the URI '/'.
-     [William Rowe]
-
-  *) Refactored mod_negotiation and mod_mime to help mod_dir accept
-     negotiated index pages, and prevent the server from defaulting
-     to an autoindex of the directory.  mod_negotiation will now die
-     with a 500 Internal Error if it could match some filenames 
-     (e.g. for mod_dir) but none can be served.  mod_negotation now
-     refuses to serve any file with an extention that mod_mime doesn't
-     recognize, and wasn't part of the request.  [William Rowe]
-
-  *) Eliminate mod_cgi's handling of .exe files without the .exe file
-     extension.  This is already handled by multiviews, if the admin
-     wishes to AddHandler .exe or define a content type handler and 
-     associate .exe files with that content type.  Multiviews must be
-     enabled to allow these to be served.  [William Rowe]
-
-  *) Speed up the server's response to a spike in incoming workload
-     or restarts by assigning empty scoreboard slots to new processes
-     when they are available.  [Greg Ames]
-
-  *) Add a handler to mod_includes.c.  This handler is designed to
-     implement the XbitHack directive.  This can't be done with a
-     fixup, because we need to check the content-type, which is
-     only available in the handler phase.  [Ryan Bloom]
-
-  *) Make the includes filter check return codes from filters lower in
-     the filter chain.  If a lower level filter returns an error, then
-     the request needs to stop immediately.  This allows mod_include to
-     stop parsing data once a lower filter recognizes an error.
-     [Ryan Bloom]
-
-  *) Add the ability to extend the methods that Apache understands
-     and have those methods <limit>able in the httpd.conf. It uses 
-     the same bit mask/shifted offset as the original HTTP methods 
-     such as M_GET or M_POST, but expands the total bits from an int to 
-     an ap_int64_t to handle more bits for new request methods than 
-     an int provides.  [Cody Sherr <csherr@covalent.net>]
-
-  *) Fix broken mod_mime behavior in merging its arguments.  Possible
-     cause of unexplicable crashes introduced in 2.0.20.  [William Rowe]
-
-  *) Solve many mod_ssl porting issues (too many to detail) with 
-     help from the whole team, but most notably [Ralf S. Engelschall, 
-     Madhusudan Mathihalli <madhusudan_mathihalli@hp.com>, 
-     Doug MacEachern, William Rowe, Cliff Woolley]
-
-  *) More stall fixes for the threaded & worker mpm's.
-     Make mod_status output more accurate.  Don't
-     count workers in processes which aren't actively
-     serving requests. [Greg Ames]
-     
-  *) Win32: Get SSI exec cgi tag working. [Bill Stoddard]
-
-  *) Add a single listener/multiple worker MPM.  This MPM is
-     definately not fully correct, but it allows us to solve many
-     of the problems that exist in the threaded MPM.  This is a 
-     modified version of the threaded MPM.  [Ryan Bloom]
-
-  *) Improve content generation throughout Apache, providing closer
-     compliance with HTML 3.2, HTML 4.01 Transitional and XHTML 1.0
-     Transitional specifications.  [William Rowe]
-
-Changes with Apache 2.0.22
-  
-  *) Fix a problem where the threaded MPM stalls after restarts or
-     segfaults.  Also prevent multiple active processes from using
-     the same scoreboard slot.  [Greg Ames]
-
-  *) Apache/Win32 now fills in the service description with Apache's
-     server version string, including loaded and advertised modules.
-     [William Rowe]
-
-  *) Improved support for the Win32 build, to recover gracefully from
-     missing apr or apr-util directories or the awk interpreter, 
-     create the proper cgi-bin examples, including a test-cgi.bat, and 
-     fix the perl shebang line for printenv.pl, when installing from 
-     the build environment.  [William Rowe]
-
-  *) Fix a segfault in threaded.c caused by passing uninitialized
-     apr_thread_t * to apr_thread_join().  [Jeff Trawick]
-
-  *) Use new APR number conversion functions to reduce CPU consumption 
-     when setting the content length, and in mod_log_config.
-     [Brian Pane]
-     
-  *) Fix problem reported by Taketo Kabe <kabe@sra-tohoku.co.jp>
-     where HEAD response headers were being repeated twice for
-     files greater than 32K bytes (4*AP_MIN_BYTES_TO_WRITE). This
-     problem in the http_header filter was exposed by the recent rewrite
-     of the content_length filter. [Taketo Kabe, Bill Stoddard]
-
-  *) Fix seg faults in mod_status with ExtendedStatus enabled, after
-     restarts.  A garbage pointer to a vhost's server_rec from the
-     previous generation was being left around under certain
-     conditions. [Greg Ames]
-
-  *) Fix a cosmetic problem with mod_include.  Non-existant SSI vars
-     used to appear as '(none', without the closing paren.
-     [Günter Knauf <eflash@gmx.net>]
-
-  *) Improve the exports generating awk script.  In the past, we had
-     work around problems in the awk script by avoiding some #if and
-     #ifdefs.  This has bitten us many times in generating the exports.c
-     file.  This improvement allows corrects the header file parsing.
-     [Sander Striker <striker@apache.org>]
-
-Changes with Apache 2.0.21
-
-  *) Resolve the Win32 htpasswd bug, where a file that existed would be
-     overwritten, regardless of the -c flag.
-     [William Rowe, Mladen Turk <mladen.turk@mail.inet.hr>]
-
-  *) Introduce connection sub-pools into ab.  Truncating the lifetime
-     of these allocations means that ab no longer perpetually grows
-     its working set, running out of memory on large request attempts.
-     [William Rowe]
-
-  *) Make scoreboard creation a hook.  This allows management
-     modules to have access to the scoreboard at the time that it is
-     created, and at every restart request.  
-     [Cody Sherr <csherr@covalent.net>]
-
-  *) Changed AP_MPMQ_MAX_DAEMONS to refer to MaxClients and
-     added an AP_MPMQ_MAX_DAEMON_USED to refer to the highest
-     daemon index actually used in the scoreboard. I also
-     updated the pertinent calls. [Paul J. Reder]
-
-  *) Win32: Prevent listening sockets from being inherited by
-     the Apache child process, CGI scripts, rotatelog process
-     etc.  If the Apache child process segfaults, any processes 
-     that the child started are not reaped. Prior to this fix,
-     these processes inherited the listening sockets which sometimes
-     prevented the restarted Apache child process from accepting
-     connections (ie, the server would hang). 
-     [Bill Stoddard]
-
-  *) Provide vhost and request strings when ExtendedStatus is on.
-     [Greg Ames]
-
-  *) Fix some issues with the pod and prefork: check the pod *after*
-     processing a connection so that a server processing a time-
-     consuming request bails out as soon as practical; when the
-     parent process wakes up a server process via connect(), use an
-     APR timeout on the connect() so that we don't hang for a long
-     time if there aren't server processes around to do accept().
-     [Jeff Trawick, Greg Ames]
-
-  *) Performance improvement to mod_mime.c. find_ct() in mod_mime, 
-     spends a lot of time in apr_table_get calls.  Using the default 
-     httpd.conf, the tables for languages and charsets are somewhat
-     large, so the time spent scanning them on each request is
-     significant. Replacing the tables with hash tables provides
-     a nice speedup. [Brian Pane <bpane@pacbell.net>]
-
-  *) Add two functions to allow modules to access random parts of the
-     scoreboard.  This allows modules compiled for one MPM to access the
-     scoreboard, even if it the server was compiled for another MPM.
-     [Harrie Hazewinkel <harrie@covalent.net>]
-
-Changes with Apache 2.0.20
-
-  *) Fix problem in content-length filter where the filter would
-     buffer all the output from a CGI before sending any bytes
-     down the filter stack to the network. This problem would cause
-     significant memory consumption if the CGIs generated
-     lots of bytes. [Bill Stoddard]
-  
-  *) Get non-blocking CGI pipe reads working with the bucket brigades.
-     [Bill Stoddard]
-
-  *) Fix seg fault on Windows when serving files cached with mod_file_cache.
-     [Bill Stoddard]
-
-  *) Fix a bug in the threaded MPM that would cause it to kill off all
-     workers immediately after starting if the number of workers started
-     was above a certain threshold.  [Ryan Bloom, Bill Stoddard]
-
-Changes with Apache 2.0.19
-
-  *) Fix problem with threaded MPM.  The problem was that if each child
-     process was busy serving a single long-lived request and the server
-     was sent a graceful restart signal, the server would stop serving
-     requests.  This would happen because each child process would wait to
-     die until the last thread was done, and the parent wouldn't spawn any
-     new children until a process died.  Now, the parent looks at the fact
-     that the children are dying gracefully, and starts new children.
-     Those new children only start enough threads to compliment the number
-     of threads in the other child process that shares the same spot in
-     the scoreboard.  In this way, we make sure to never go over
-     MaxClients.  [Ryan Bloom]
-
-  *) modified mod_negotiation and mod_autoindex to speed up by almost a
-     factor of two on apr_dir_read()-enhanced platforms, such as Win32
-     and OS2, by calling ap_sub_request_lookup_dirent() with the results
-     already provided by apr_dir_read().  [William Rowe]
-
-  *) mod_file_cache is now more robust to filtering and serves requests
-     slightly more efficiently.  [Cliff Woolley]
-
-  *) Fix problem handling FLUSH bucket in the chunked encoding filter.
-     Module was calling ap_rwrite() followed by ap_rflush() but the 
-     served content was not being displayed in the browser. Inspection
-     of the output stream revealed that the first data chunk was
-     missing the trailing CRLF required by the RFC.  [Bill Stoddard]
-
-  *) apxs no longer generates ap_send_http_header() in the example handler
-
-  *) Fix an ab problem which could cause a divide-by-zero exception
-     with certain invocations (e.g., ab -k -c 6 -n 100 localhost/).
-     [Ian Holsman <ianh@cnet.com>]
-
-  *) Solve case-insensitive platforms' confusion about negotiated
-     filenames, allowing files of differnt case to match in choosing
-     the document to serve.  [William Rowe]
-
-  *) Fix brokenness when ThreadsPerChild is higher than the built-in
-     limit.  We left ap_threads_per_child at the higher value which
-     led to segfaults when doing certain scoreboard operations.
-     [Jeff Trawick]
-
-  *) Fix seg faults and/or missing output from mod_include.  The
-     default_handler was using the subrequest pool for files and
-     MMAPs, even though the associated APR structures typically 
-     live longer than the subrequest. [Greg Ames]
-  
-  *) Extend mod_setenvif to support specifying regular expressions
-     on the SetEnvIf (and SetEnvIfNoCase) directive attribute field.
-     Example:  SetEnvIf ^TS*  [a-z].* HAVE_TS 
-     will cause HAVE_TS to be set if any of the request headers begins 
-     with "TS" and has a value that begins with any character in the
-     set [a-z]. [Bill Stoddard]
-
-  *) httpd children now re-bind themselves to a random CPU on
-     multiprocessor systems on AIX via bindprocessor() in 2.0.
-     [Victor J. Orlikowski]
-
-  *) Fix htdigest. It would go into a loop in getline when adding 
-     a second user. [Bill Stoddard]
-
-  *) Win32 platforms now fully support mod_userdir options.  [Will Rowe]
-
-  *) Automatically generate httpd.exp for AIX.
-     DSOs now work again on AIX in 2.0
-     [Victor J. Orlikowski]
-
-  *) Add a new request hook, error_log.  This phase allows modules
-     to act on the error log string _after_ it has been written
-     to the error log.  The goal for this hook is to allow monitoring
-     modules to send the error string to the monitoring agent.
-     [Ryan Bloom]
-
-  *) Modify mod_echo to make it use filters for input and output.
-     [Ryan Morgan <rmorgan@covalent.net>]
-
-  *) Extend mod_headers to support conditional driven Header 
-     add, append and set. Use SetEnvIf to set an envar and conditionally
-     add/append/set headers based on this envar thusly:
-
-     SetEnvIf TSMyHeader value HAVE_TSMyHeader
-     Header add MyHeader "%t %D" env=HAVE_TSMyHeader
-
-     If the request contains header "TSMyHeader: value" then header
-     MyHeader: "t=xxxxxxxxxx D=yyyy" will be sent on the response.
-     [Bill Stoddard]
-
-  *) Extend mod_headers to support using format specifiers on Header
-     add, append and set header values. Two format specifiers are supported:
-
-     %t - reports, in UTC microseconds since the epoch, when the
-          request was received.
-
-     %D - reports the time, in microseconds, between when the request was 
-          received and the response sent. 
-
-     Examples:
-     Header add MyHeader "This request served in %D microseconds. %t"
-
-     results in a header being added to the response that looks like this:
-     
-     MyHeader: This request served in D=5438 microseconds. t=991424704447256
-
-     [Bill Stoddard]
-
-  *) Fix reset_filter().  We need to be careful how we remove filters.
-     If we set r->output_filters to NULL, we also have to reset the
-     connection's filters.  [John Sterling]
-
-  *) Optimise reset_filter() in http_protocol.c. [Greg Stein]
-
-  *) Add a check to ap_die() to make sure the filter stack is sane and
-     contains the correct basic filters when an error occurs. This fixes
-     a problem where headers are not being sent on error. [John Sterling]
-
-  *) New Header directive 'echo' option. "Header echo regex" will
-     cause any headers received on the request that match regex to be
-     echoed to (included in) the response headers.
-     [Bill Stoddard]
-
-  *) include/ap_compat.h tested and set APR_COMPAT_H instead of AP_COMPAT_H.
-     This prevented the inclusion of apr_compat.h.  PR #7773
-     [Oleg Broytmann <phd@phd.pp.ru>]
-
-  *) Moved util_uri to the apr-util library.  This required a bunch of
-     apr_name changes for the uri utility functions.  [Justin Erenkrantz]
-
-  *) Move the addition of default AP_HTTP_HTTP_HEADER filters to the
-     insert_filter phase so that other filters are not bypassed by default.
-     [Graham Leggett]
-
-  *) Reimplement mod_headers as an output filter. mod_headers can now
-     add custom headers to inbound requests using the RequestHeader directive
-     and to responses using the same old Header directive.  [Graham Leggett]
-
-Changes with Apache 2.0.18
-
-  *) Fix command-line processing so that if a bad argument is specified
-     Apache will exit.  [Jeff Trawick]
-
-  *) Change the make targets and rules to be consistent in all of the
-     Apache-owned source trees.  [Roy Fielding]
-     
-  *) Fix processing of the TRACE method.  Previously we passed bogus
-     parms to form_header_field() and it overlaid some vhost structures,
-     resulting in a segfault in check_hostalias(). 
-     [Greg Ames, Jeff Trawick]
-
-  *) Win32: Add support for reliable piped logs. If the logging process
-     goes down, Apache will automatically restart it. This function has 
-     been part of Apache on Unix/Linux/BSD since the early v1.3 releases.
-     [Bill Stoddard]
-
-  *) Do not start piped log processes during the config file 
-     preflight.  This change also circumvents a problem on 
-     Windows where the rotatelog processes created during preflight
-     was not getting cleaned up properly.
-     [Bill Stoddard]
-
-  *) add "Request Phase Participation" info to mod_info
-     [Doug MacEachern]
-
-  *) Make first phase changes to the scoreboard data structures in
-     preparation for the rewriting of the scoreboard per my posted
-     design notes. [Paul J. Reder]
-
-  *) Fix httpd's definition of LTFLAGS to be consistent with that of apr
-     and apr-util, allow it to be overridden by the configure command-line
-     (default="--silent") and introduce LT_LDFLAGS to replace what we were
-     formerly abusing as LTFLAGS.  [Roy Fielding]
-
-  *) Clean up the reporting of incorrect closing container tags.
-     [Barrie Slaymaker <barries@slaysys.com>]
-
-  *) Simplify the configure process by moving all libtool stuff to APR
-     and moving hints.m4 inline.  [Roy Fielding]
-
-  *) Add the AP_DECLARE()/AP_CORE_DECLARE macros on the return types
-     of functions used by mod_proxy for export in the DLL 
-     [Ian Holsman <IanH@cnet.com>]
-
-  *) Prevent a hang when a cgi handled by mod_cgid tries to read a
-     request body from its stdin but no reqest body is being written to 
-     the cgi.  [Jeff Trawick]
-
-  *) mod_log_config: %c connection status incorrectly logged
-     as "-" (non-keepalive) when MaxKeepAliveRequests is set to 0.
-     [Bill Stoddard]
-
-  *) Get mod_cern_meta working under Windows
-     [Bill Stoddard]
-
-  *) Create Files, and thus MMAPs, out of the request pool, not the
-     connection pool.  This solves a small resource leak that had us
-     not closing files until a connection was closed.  In order to do
-     this, at the end of the core_output_filter, we loop through the
-     brigade and convert any data we have into a single HEAP bucket
-     that we know will survive clearing the request_rec.
-     [Ryan Bloom, Justin Erenkrantz <jerenkrantz@ebuilt.com>,
-      Cliff Woolley]
-
-  *) Completely revamp configure so that it preserves the standard make
-     variables CPPFLAGS, CFLAGS, CXXFLAGS, LDFLAGS and LIBS by moving
-     the configure additions to EXTRA_* variables.  Also, allow the user
-     to specify NOTEST_* values for all of the above, which eliminates the
-     need for THREAD_CPPFLAGS, THREAD_CFLAGS, and OPTIM.  Fix the setting
-     of INCLUDES and EXTRA_INCLUDES.  Check flags as they are added to
-     avoid pointless duplications.  Fix the order in which flags are given
-     on the compile and link lines.  Remove obsolete macros APR_DOEXTRA,
-     AC_ADD_LIBRARY, AC_CHECK_DEFINE, APACHE_PASSTHRU, and APACHE_ONCE.
-     Added APR_SAVE_THE_ENVIRONMENT and APR_RESTORE_THE_ENVIRONMENT macros.
-     Renamed AC_TYPE_RLIM_T macro to APACHE_TYPE_RLIM_T.  [Roy Fielding]
-
-  *) Get mod_tls to compile/work better on Windows.  PR #7612
-     [Bernhard Schrenk <b.schrenk@improx.com>]
-
-  *) Fix shutdown/restart hangs in the threaded MPM.
-     [Jeff Trawick, Greg Ames, Ryan Bloom]
-  
-  *) Removed the keptalive boolean from conn_rec because it is now only
-     used by a single routine and can be replaced by a local variable.
-     [Greg Stein, Ryan Bloom, Roy Fielding]
-
-  *) Patch prefork to put enough of the signal processing back in so that
-     signals are all handled properly now. The previous patch fixed the
-     deadlock race condition, but broke the user directed signal handling.
-     This fixes it to work the way it did before my previous prefork patch
-     (primarily, SIGTERM is now working).
- 
-  *) Change how input filters decide how much data is returned to the
-     higher filter.  We used to use a field in the conn_rec, with this
-     change, we use an argument to ap_get_brigade to determine how much
-     data is retrieved. [Ryan Bloom]
-
-  *) Fix seg fault at start-up introduced by Ryan's change to enable
-     modules to specify their own logging tags. mod_log_config
-     registers an optional function, ap_register_log_handler().
-     ap_register_log_handler() was being called by http_core before
-     the directive hash table was created. This patch creates the
-     directive hash table before ap_register_log_handler() is
-     registered as an optional function.
-     [jean-frederic clere <jfrederic.clere@fujitsu-siemens.com>]
-
-  *) Add ap_set_int_slot() function
-     [John K. Sterling <sterling@covalent.net>]
-
-  *) Under certain circumstances, Apache did not supply the
-     right response headers when requiring authentication.
-     [Gertjan van Wingerde <Gertjan.van.Wingerde@cmg.nl>] PR#7114
-     (This is a port of the change that went into Apache 1.3.19.)
-
-  *) Allow modules to specify their own logging tags.  This basically
-     allows a module to tell mod_log_config that when %x is encountered
-     a specific function should be called.  Currently, x can be any single
-     character.  It may be more useful to make this a string at some point.
-     [Ryan Bloom]
-
-Changes with Apache 2.0.17
-
-  *) If a higher-level filter handles the the byterange aspects of a
-     request, then the byterange filter should not try to redo the
-     work.  The most common case of this happening, is a byterange
-     request going through the proxy, and the origin server handles
-     the byterange request.  The proxy should ignore it.
-     [Graham Leggett <minfrin@sharp.fm>]
-
-  *) Changed the threaded mpm to have child_main join to each of the
-     worker threads to make sure the kids are all gone before child_main
-     exits after a signal (cleanup from perform_idle_server_maintenance).
-     This is an extension of Ryans recent commit to make the child_main
-     the signal thread.
-
-  *) Add more options to the ap_mpm_query function.  This also allows MPMs to
-     report if their threads are dynamic or static.  Finally, this also
-     implements a new API, ap_show_mpm, which returns the MPM that was
-     required into the core. [Harrie Hazewinkel <harrie@covalent.net>]
-
-  *) Do not install the binaries from the support directory twice.
-     [jun-ichiro hagino <itojun@iijlab.net>]
-
-  *) The ap_f* functions should flush data to the filter that is passed
-     in, not the the filter after the one passed in.
-     [Ryan Morgan <rmorgan@covalent.net>]
-
-  *) Make ab work again by changing its native types to apr types and formats.
-     [Justin Erenkrantz <jerenkrantz@ebuilt.com>]
-
-  *) Move the byterange filter and all of the supporting functions back
-     to the HTTP module.  The byterange filter turned out to be very
-     HTTP specific, and it belongs in the HTTP module.  [Greg Stein]
-
-  *) Make clean, distclean, and extraclean consistently according to the
-     Gnu makefile guidelines.  [Justin Erenkrantz <jerenkrantz@ebuilt.com>]
-
-  *) Fix errors in the renaming of the apr_threadattr_detach_xxx functions.
-     This may have been causing problems stopping processes in the threaded
-     mpm's. [Greg Ames]
-
-  *) Fix content-length in mod_negotiation to a long int representation.
-     [William Rowe]
-
-  *) Remove BindAddress from the default config file.
-     [giles@nemeton.com.au]
-
-  *) Allow module authors to add a module to their Apache build using
-     --with-module, without re-running buildconf.  The syntax is:
-	--with-module=module_type:/path/to/module.c
-     The configure script will copy the module.c file to 
-     modules/module_type, and it will be added to the relevant Makefiles.
-     currently, this only works for static modules.  [Ryan Bloom]
-
-  *) Changes required to make prefork clean up idle children properly.
-     There was a window during which a starting worker deadlocks when
-     an idle cleanup arrives before it completes init. Apache then keeps
-     trying to cleanup the same deadlocked worker forever (until higher
-     pids come along, but it still will never reduce below the deadlocked
-     pid). Thus the number of children would not reduce to the correct
-     idle level. [Paul J. Reder]
-
-Changes with Apache 2.0.16
-
-  *) Change the default installation directory to /usr/local/apache2,
-     as now defined by the "Apache" layout in config.layout. [Marc Slemko]
-
-  *) OS/2: Added support for building loadable modules as OS/2 DLLs. 
-     [Brian Havard]
-
-  *) Get MaxRequestsPerChild working with the Windows MPM.
-     [Bill Stoddard]
-
-  *) Make generic hooks to work, with mod_generic_hook_import/export
-     experimental modules.  [Ben Laurie, Will Rowe]
-
-  *) Fix segfaults for configuration file syntax errors such as
-     "<Directory>" followed by "</Directory" and
-     "<Directory>" followed by "</Directoryz>".  [Jeff Trawick]
-
-  *) Cleanup the --enable-layout option of configure.  This makes
-     us use a consistent location for the config.layout file, and it
-     makes configure more portable.
-     [jun-ichiro hagino <itojun@iijlab.net>]
-
-  *) Changes to 'ab'; fixed int overrun's, added statistics, output in
-     csv/gnuplot format, rudimentary ssl support and various other tweaks
-     to make results more true to what is measured. The upshot of this it
-     turns out that 'ab' has often underreported the true performance of
-     apache. Often by a order of magnitude :-) See talk/paper of Sander 
-     Temme <sctemme@covalent.net> at April ApacheCon 2001 for details.
-     [Dirk-Willem van Gulik]
-
-  *) Clean up mod_cgid's temporary request pool.  Besides fixing a
-     storage leak this ensures that some unnecessary pipes are closed.
-     [Jeff Trawick]
-
-  *) Performance: Add quick_handler hook. This hook is called at the
-     very beginning of the request processing before location_walk,
-     translate_name, etc.  This hook is useful for URI keyed content
-     caches like Mike Abbott's Quick Shortcut Cache.
-     [Bill Stoddard]
-
-  *) top_module global variable renamed to ap_top_module [Perl]
-
-  *) Move ap_set_last_modified to the core.  This is a potentially 
-     controversial change, because this is kind of HTTP specific.  However
-     many protocols should be able to take advantage of this kind of
-     information.  I expect that headers will need one more layer of
-     indirection for multi-protocol work, but this is a small step in
-     the right direction.  [Ryan Bloom]
-
-  *) Enable mod_status by default.  This matches what Apache 1.3 does.
-     [Ed Korthof]
-
-  *) Add a ScriptSock directive to the default config file.  This is
-     only enabled when mod_cgid is used.  
-     [Taketo Kabe <kabe@sra-tohoku.co.jp>]
-
-Changes with Apache 2.0.15
-
-  *) Untangled the buildconf script and eliminated the need for build's
-     aclocal.m4, generated_lists, build.mk, build2.mk, and a host of other
-     libtool muck that is now under srclib/apr/build.  [Roy Fielding]
-
-  *) Win32: Don't accept more connections than we have worker threads
-     to handle.
-     [Bill Stoddard]
-
-  *) Fix bug in the Unix threaded.c MPM that allowed child processes
-     to fork() new child processes. 
-     [Bill Stoddard]
-
-  *) Fix a major security problem with double-reverse lookup checking.  
-     Previously, a client connecting over IPv4 would not be matched 
-     properly when the server had an IPv6 listening socket.  PR #7407
-     [Taketo Kabe <kiabe@sra-tohoku.co.jp>]
-
-  *) Change the way the beos MPM handles polling to allow it to stop and
-     restart.  Problem was the sockets being polled were being reset by
-     the select call, so once it had accepted a connection it was no
-     longer listening on the UDP socket we use for shutdown instructions.
-     APR needs to be altered, patch on it's way. [David Reid]
-
-  *) Empty out the brigade shared by ap_getline()/ap_get_client_block()
-     on error exit from ap_getline().  Some other code got upset because
-     the wrong data was in the brigade.  [Greg Ames, Jeff Trawick]
-
-  *) Handle ap_discard_request_body() being called more than once.
-     [Greg Ames, Jeff Trawick]
-
-  *) Get rid of an inadvertent close of file descriptor 2 in
-     mod_mime_magic.  [Greg Ames, Jeff Trawick]
-
-  *) Add a hook, create_request.  This hook allows modules to modify
-     a request while it is being created.  This hook is called for all
-     request_rec's, main request, sub request, and internal redirect.
-     When this hook is called, the the r->main, r->prev, r->next
-     pointers have been set, so modules can determine what kind of
-     request this is.  [Ryan Bloom]
-
-  *) Cleanup the build process a bit more.  The Apache configure
-     script no longer creates its own helper scripts, it just
-     uses APR's.  
-     [jean-frederic clere <jfrederic.clere@fujitsu-siemens.com>]
-
-  *) Stop the forced downgrade of the connection to HTTP/1.0 for
-     proxy requests.  [Graham Leggett]
-
-  *) Avoid using sscanf to determine the HTTP protocol number in
-     the common case because sscanf is a performance hog. From
-     Mike Abbot's Accelerating Apache patch number 6.
-     [Mike Abbot <mja@trudge.engr.sgi.com>, Bill Stoddard]
-
-  *) Fix a security exposure in mod_access.  Previously when IPv6 
-     listening sockets were used, allow/deny-from-IPv4-address rules 
-     were not evaluated properly (PR #7407).  Also, add the ability to 
-     specify IPv6 address strings with optional prefix length on Allow 
-     and Deny.  [Jeff Trawick]
-
-  *) Enhance rotatelogs so that a UTC offset can be specified, and
-     the logfile name can be formatted using strftime(3).  (Brought
-     forward from 1.3.)  [Ken Coar]
-
-  *) Reimplement the Windows MPM (mpm_winnt.c) to eliminate calling 
-     DuplicateHandle on an IOCompletionPort (a practice which
-     MS "discourages"). The new model does not rely on associating
-     the completion port with the listening sockets, thus the
-     completion port can be completely managed within the child 
-     process.  A dedicated thread accepts connections off the network,
-     then calls PostQueuedCompletionStatus() to wake up worker
-     threads blocked on the completion port.
-     [Bill Stoddard]
-
-  *) Bring forward the --suexec-umask option which allows the
-     builder to preset the umask for suexec processes.  [Ken Coar]
-
-  *) Add a -V flag to suexec, which causes it to display the
-     compile-time settings with which it was built.  (Only
-     usable by root or the AP_HTTPD_USER username.)  [Ken Coar]
-
-  *) Mod_include should always unset the content-length if the file is
-     going to be passed through send_parsed_content.  There is no to
-     determine if the content will change before actually scanning the
-     entire content.  It is far safer to just remove the C-L as long
-     as we are scanning it.  [Ryan Bloom]
-
-  *) Make sure Apache sends WWW-Authenticate during a reverse proxy
-     request and not Proxy-Authenticate.
-     [Graham Leggett <minfrin@sharp.fm>]
-
-Changes with Apache 2.0.14
-
-  *) Fix content-length computation.  We ONLY compute a content-length if
-     We are not in a 1.1 request and we cannot chunk, and this is a keepalive
-     or we already have all the data.  [Ryan Bloom]
-
-  *) Report unbounded containers in the config file.  Previously, a typo
-     in the </container> directive could result in the rest of the config
-     file being silently ignored, with undesired defaults used.
-     [Jeff Trawick]
-
-  *) Make the old_write filter use the ap_f* functions for the buffering.
-     [Ryan Bloom]
-
-  *) Move more code from the http module into the core server.  This
-     is core code, basically the default handler, the default input
-     and output filters, and all of the core configuration directives.
-     All of this code is required in order for the server to work, with or
-     without HTTP.  The server is closer to working without the HTTP
-     module, although there is still more to do.  [Ryan Bloom]
-
-  *) Fix a number of SGI compile warnings throughout the server.  Fix some
-     bad parameters to apr_bucket_read().  Fix a bad statement in 
-     ap_method_in_list().  For the mod_rewrite cache use apr_time_t 
-     consistently; we were mixing apr_time_t and time_t in invalid ways 
-     before.  In load_file(), call apr_dso_error() instead of 
-     apr_strerror() so that we get a more specific string on some platforms.
-     PR #6980  [Jeff Trawick]
-
-  *) Allow modules to query the MPM about it's execution profile.  This
-     query API can and should be extended in the future, but for now,
-     max_daemons, and threading or forking is a very good start.
-     [Jon Travis <jtravis@covalent.net>]
-
-  *) Modify mod_include to send blocks of data no larger than 9k.
-     Without this, mod_include will wait until the whole file is parsed,
-     or the first tag is found to send any data to the client.
-     [Paul J. Reder <rederpj@raleigh.ibm.com>]
-
-  *) Fix mod_info, so that <Directory> and <Location> directives are
-     not displayed twice when displaying the current configuration.
-     [Ryan Morgan <rmorgan@covalent.net>]
-
-  *) Add config directives to override DEFAULT_ERROR_MSG and
-     DEFAULT_TIME_FORMAT.  This was sent in as PR 6193.
-     [Dan Rench <drench@xnet.com>]
-
-  *) Get mod_info building and loading on Win32.  [William Rowe]
-
-  *) Begin to move protocol independant functions out of mod_http.  The goal
-     is to have only functions that are HTTP specific in the http directory.
-     [Ryan Bloom]
-
-Changes with Apache 2.0.13
-
-  *) Don't assume that there will always be multiple calls to the byterange 
-     filter.  It is possible that we will need to do byteranges with only
-     one call to the filter.  [Ryan Morgan <rmorgan@covalent.net>]
-
-  *) Move the error_bucket definition from the http module to the
-     core server.  Every protocol will need this ability, not just
-     HTTP.  [Ryan Bloom]
-
-Changes with Apache 2.0.12
-
-  *) Modify mod_file_cache to save pre-formatted strings for 
-     content-length and last-modified headers for performance. 
-     [Mike Abbot <mja@trudge.engr.sgi.com>]
-
-  *) Namespace protect IOBUFSIZ since it is exposed in the API.
-     [Jon Travis <jtravis@covalent.net>]
-
-  *) Use "Basic" authentication instead of "basic" in ab, as the spec
-     says we should.  [Andre Breiler <andre.breiler@rd.bbc.co.uk>]
-
-  *) Fix a seg fault in mod_userdir.c.  We used to use the pw structure
-     without ever filling it out.  This fixes PR 7271.
-     [Taketo Kabe <kabe@sra-tohoku.co.jp> and 
-      Cliff Woolley <cliffwoolley@yahoo.com>]
-
-  *) Add a couple of GCC attribute tags to printf style functions.
-     [Jon Travis <jtravis@covalent.net>]
-
-  *) Add the correct language tag for interoperation with the Taiwanese
-     versions of MSIE and Netscape. [Clive Lin <clive@CirX.ORG>] PR#7142
-
-  *) Migrate the perchild MPM to use the new apr signal child, and 
-     APR thread functions.  [Ryan Bloom]
-
-  *) Close one copy of the CGI's stdout before creating the new process.
-     The CGI will still have stdout, because we have already dup'ed it.
-     This keeps Apache from waiting forever to send the results of a CGI
-     process that has forked a long-lived child process.
-     [Taketo Kabe <kabe@sra-tohoku.co.jp>]
-
-  *) Remove the rest of the pthreads functions from the threaded MPM.
-     This requires the APR support for a signal thread that was just
-     added.  [Ryan Bloom]
-
-  *) Make mod_dir use a fixup for sending a redirect to the browser.
-     Before this, we were using a handler, which doesn't make much
-     sense, because the handler wasn't generating any data, it would
-     either return a redirect error code, or DECLINED.  This fits the
-     current hooks better.  [Ryan Morgan <rmorgan@covalent.net>]
-
-  *) Make the threaded MPM use APR threads instead of pthreads.
-     [Ryan Bloom]
-
-  *) Get mod_tls to the point where it actually appears to work in all cases.
-     [Ben Laurie]
-
-  *) implement --enable-modules and --enable-mods-shared for "all" and
-     "most".  [Greg Stein]
-
-  *) Move the threaded MPM to use APR locks instead of pthread locks.
-     [Ryan Bloom]
-
-  *) Rename mpmt_pthread to threaded.  This is more in line with the
-     fact that mpmt_pthread shouldn't be using pthreads directly, and
-     it is a smaller name that doesn't tie into anything.
-     [Ryan Bloom]
-
-  *) Rename the module structures so that the exported symbol matches
-     the file name, and it is easier to automate the installation
-     process (generating LoadModule directives from the module filenames).
-     [Martin Kraemer]
-
-  *) Remove the coalesce filter.  With the ap_f* functions, this filter
-     is no longer needed. [Ryan Bloom]
-
-Changes with Apache 2.0.11
-
-  *) Remove the dexter MPM.  Perchild is the same basic idea, but it has the
-     added feature of allowing a uid/gid per child process.  If no
-     uid/gid is specified, then Perchild behaves exactly like dexter.
-     [Ryan Bloom]
-
-  *) Get perchild building again. [Ryan Bloom]
-
-  *) Don't disable threads just because we are using the prefork MPM.
-     If somebody wants to compile without threads, they must now add
-     --disable-threads to the configure command line.  [Ryan Bloom]
-
-  *) Begin to move the calls to update_child_status into common code, so
-     that each individual MPM does not need to update the scoreboard itself.
-     [Ryan Bloom]
-
-  *) Allow mod_tls to compile under Unix boxes where openssl has been
-     installed to the system include files.
-     [Gomez Henri <new-httpd@slib.fr>]
-
-  *) Cleanup the mod_tls configure process.  This should remove any need
-     to hand-edit any files.  We require OpenSSL 0.9.6 or later, but 
-     configure doesn't check that yet.  [Ryan Bloom]
-
-  *) Add a very early prototype of SSL support (in mod_tls.c). It is
-     vital that you read modules/tls/README before attempting to build
-     it. [Ben Laurie]
-
-  *) Fix a potential seg fault on all platforms.  David Reid fixed this
-     on BEOS, but the problem could happen anywhere, so we don't want
-     to #ifdef it. [Cliff Woolley <cliffwoolley@yahoo.com>]
- 
-  *) Add new LogFormat directive, %D, to log time it takes to serve a
-     request in microseconds. [Bill Stoddard]
-
-  *) Change AddInputFilter and AddOutputFilter to SetInputFilter and
-     SetOutputFilter.  This corresponds nicely with the other Set 
-     directives, which operate on containers while the Add* directives
-     tend to work directly on extensions.  [Ryan Bloom]
-
-  *) Cleanup the header handling a bit.  This uses the apr_brigade_*
-     functions for the buffering so that we don't need to compute
-     the length of the headers before we actually create the header
-     buffer.  [Ryan Bloom]
-
-  *) Allow filters to buffer data using the ap_f* functions.  These have
-     become macros that resolve directly to apr_brigade_*.  
-     [Ryan Bloom]
-
-  *) Get the Unix MPM's to do a graceful restart again.  If we are going
-     to register a cleanup with ap_cleanup_scoreboard, then we have to
-     kill the cleanup with the same function,  and that function can't be
-     static.  [Ryan Bloom]
-
-  *) Install all required header files.  Without these, it was not
-     possible to compile some modules outside of the server.
-     [Ryan Bloom]
-
-  *) Fix the AliasMatch directive in Apache 2.0.  When we brought a patch
-     forward from 1.3 to 2.0, we missed a single line, which broke regex
-     aliases.  [Ryan Bloom]
-
-  *) We have a poor abstraction in the protocol.  This is a temporary
-     hack to fix the bug, but it will need to be fixed for real.  If
-     we find an error while sending out a custom error response, we back
-     up to the first non-OK request and send the data.  Then, when we send
-     the EOS from finalize_request_protocol, we go to the last request,
-     to ensure that we aren't sending an EOS to a request that has already
-     received one.  Because the data is sent on a different request than
-     the EOS, the error text never gets sent down the filter stack.  This
-     fixes the problem by finding the last request, and sending the data
-     with that request.  [Ryan Bloom]
-
-  *) Make the server status page show the correct restart time, and
-     thus the proper uptime. [Ryan Bloom]
-
-  *) Move the CGI creation logic from mod_include to mod_cgi(d).  This
-     should reduce the amount of duplicate code that is required to
-     create CGI processes.
-     [Paul J. Reder <rederpj@raleigh.ibm.com>]
-
-  *) ap_new_connection() closes the socket and returns NULL if a socket
-     call fails.  Usually this is due to a connection which has been 
-     reset.  [Jeff Trawick]
-
-  *) Move the Apache version information out of httpd.h and into release.h.
-     This is in preparation for the first tag with the new tag and release
-     system.  [Ryan Bloom]
-
-  *) Begin restructuring scoreboard code to enable adding back in
-     the ability to use IPC other than shared memory.
-     Get mod_status working on Windows again. [Bill Stoddard]
-
-  *) Make mod_status work with 2.0.  This will work for prefork,
-     mpmt_pthread, and dexter.  [Ryan Bloom]
-
-  *) Correct a typo in httpd.conf.
-     [Kunihiro Tanaka <tanaka@apache.or.jp>] PR#7154 
-
-  *) Really fix mod_rewrite map lookups this time. [Tony Finch]
-
-  *) Get the correct IP address if ServerName isn't set and we can't
-     find a fully-qualified domain name at startup.
-     PR#7170 [Danek Duvall <dduvall@eng.sun.com>]
-
-  *) Make mod_cgid work with SuExec.  [Ryan Bloom]
-
-  *) Adopt apr user/group name features for mod_rewrite.  Eliminates some
-     'extra' stat's for user/group since they should never occur, and now
-     resolves the SCRIPT_USER and SCRIPT_GROUP, including on WinNT NTFS
-     volumes.  [William Rowe]
-
-  *) Adopt apr features to simplify mod_includes.  This changes the
-     behavior of the USER_NAME variable, unknown uid's are now reported
-     as USER_NAME="<unknown>" rather than the old user#000 result.
-     WinNT now resolves USER_NAME on NTFS volumes.  [William Rowe]
-
-  *) Adopt apr features for simplifing mod_userdir, and accept the new
-     Win32/OS2 exceptions without hiccuping.  [William Rowe]
-
-  *) Replace configure --with-optim option by using and saving the
-     environment variable OPTIM instead.  This is needed because configure
-     options do not support multiple flags separated by spaces.
-     [Roy Fielding]
-
-  *) Fix some byterange handling.  If we get a byte range that looks like
-     "-999999" where that is past the end of the file, we should return 
-     a PARTIAL CONTENT status code, and return the whole file as one big
-     byterange.  This matches the 1.3 handling now.  [Ryan Bloom]
-
-  *) Make the error bucket a real meta-data bucket.  This means that the
-     bucket length is 0, and a read returns NULL data.  If one of these
-     buckets is passed down after the headers are sent, this data will
-     just be ignored.  [Greg Stein]
-
-  *) The prefork MPM wasn't killing child processes correctly if a restart
-     signal was received while the process was serving a request.  The child
-     process would become the equivalent of a second parent process.  If
-     we break out of the accept loop, then we need to do die after cleaning
-     up after ourselves.  [Ryan Bloom]
-
-  *) Change the Prefork MPM to use SIGWINCH instead of SIGUSR1 for graceful
-     restarts.  [Ryan Bloom]
-
-  *) Modify the apr_stat/lstat/getfileinfo calls within apache to use
-     the most optimal APR_FINFO_wanted bits.  This spares Win32 from
-     performing very expensive owner, group and permission lookups
-     and allows the server to function until these apr_finfo_t fields
-     are implemented under Win32.  [William Rowe]
-
-  *) Support for typedsafe optional functions - that is functions exported by
-     optional modules, which, therefore, may or may not be present, depending
-     on configuration. See the experimental modules mod_optional_fn_{ex,im}port
-     for sample code. [Ben Laurie]
-
-  *) filters can now report an HTTP error to the server.  This is done
-     by sending a brigade where the first bucket is an error_bucket.
-     This bucket is a simple bucket that stores an HTTP error and
-     a string.  Currently the string is not used, but it may be needed
-     to output an error log.  The http_header_filter will find this
-     bucket, and output the error text, and then return 
-     AP_FILTER_ERROR, which informs the server that the error web page
-     has already been sent.  [Ryan Bloom]
-
-  *) If we get an error, then we should remove all filters except for
-     those critical to serving a web page.  This fixes a bug, where
-     error pages were going through the byterange filter, even though
-     that made no sense.  [Ryan Bloom]
-
-  *) Relax the syntax checking of Host: headers in order to support
-     iDNS. PR#6635 [Tony Finch]
-
-  *) Cleanup the byterange filter to use the apr_brigade_partition
-     and apr_bucket_copy functions.  This removes a lot of very messy
-     code, and hopefully makes this filter more stable.
-     [Ryan Bloom]
-
-  *) Remove AddModule and ClearModuleList directives.  Both of these
-     directives were used to ensure that modules could be enabled
-     in the correct order.  That requirement is now gone, because
-     we use hooks to ensure that modules are in the correct order.
-     [Ryan Bloom]
-
-  *) When SuExec is specified, we need to add it to the list of
-     targets to be built.  If we don't, then any changes to the
-     configuration won't affect SuExec, unless 'make suexec' is
-     specifically run.  [Ryan Bloom]
-
-  *) Cleaned out open_file from mod_file_cache, as apr now accepts
-     the APR_XTHREAD argument to open a file for consumption by
-     parallel threads on win32.  [William Rowe]
-
-  *) Correct a bug in determining when we follow symlinks.  The code
-     expected a stat -1 result, not an apr_status_t positive error.
-     Also check if the APR_FINFO_USER fields are valid before we
-     follow the link.  [William Rowe]
-
-  *) Move initgroupgs, ap_uname2id and ap_gname2id from util.c to
-     mpm_common.c.  These functions are only valid on some platforms,
-     so they should not be in the main-line code. [Ryan Bloom]
-
-  *) Remove ap_chdir_file().  This function is not thread-safe,
-     and nobody is currently using it.  [Ryan Bloom]
-
-  *) Do not try to run make depend if there are no .c files in the
-     current directory, doing so makes `make depend` fail.
-     [Ryan Bloom]
-
-   *) Update highperformance.conf to work with either prefork or
-      pthreads mpms.  [Greg Ames] 
-
-  *) Stop checking to see if this is a pipelined request if we know
-     for a fact that it isn't.  Basically, if r->connection->keepalive == 0.
-     This keeps us from making an extra read call when serving a 1.0
-     request.  [Ryan Bloom and Greg Stein]
-
-  *) Fix the handling of variable expansion look-ahead in mod_rewrite,
-     i.e. syntax like %{LA-U:REMOTE_USER}, and also fix the parsing of
-     more complicated nested RewriteMap lookups. PR#7087 [Tony Finch]
-
-  *) Fix the RFC number mentioned when complaining about a missing
-     Host: header. PR#7079 [Alexey Toptygin <alexeyt@wam.umd.edu>]
-
-  *) Fix an endless loop in ab which occurred when ab was posting
-     and the server dropped the connection unexpectedly.
-     [Jeff Trawick]
-
-  *) Fix a segfault while handling request bodies in ap_http_filter().  
-     This problem has been seen with mod_dav usage as well as with 
-     requests where the body was just being discarded.  [Jeff Trawick]
-
-  *) Some adjustment on the handling and automatic setting (via
-     hints.m4) of various compilation flags (eg: CFLAGS). Also,
-     add the capability to specify flags (NOTEST_CFLAGS and
-     NOTEST_LDFLAGS) which are used to compile Apache, but
-     not used during the configuration process. Useful for
-     flags like "-Werror". [Jim Jagielski]
-
-  *) Stop using environment variables to force debug mode or
-     no detach.  We now use the -D command line argument to 
-     specify the correct mode.  -DONE_PROCESS and -DNO_DETACH.
-     [Greg Stein, Ryan Bloom]
-
-  *) Change handlers to use hooks. [Ben Laurie]
-
-  *) Stop returning copies of filenames from both apr_file_t and
-     apr_dir_t.  We pstrdup the filenames that we store in the
-     actual structures, so we don't need to pstrdup the strings again.
-     [Ryan Bloom]
-
-  *) mod_cgi: Fix some problems where the wrong error value was being
-     traced.  [Jeff Trawick]
-
-  *) EBCDIC: Fix some missing ASCII conversion on some protocol data.
-     [Jeff Trawick]
-
-  *) Add generic hooks. [Ben Laurie]
-
-  *) Use a real pool to dup the error log descriptor.  [Ryan Bloom]
-
-  *) Fix a segfault caused by mod_ext_filter when the external filter 
-     program does not exist. [Jeff Trawick]
-
-  *) Fix an output truncation error when on an HTTP >= 1.0 request an
-     object of size between DEFAULT_BUCKET_SIZE and AP_MIN_BYTES_TO_WRITE 
-     was served through mod_charset_lite (or anything else that would
-     create a transient bucket in this size range).  ap_bucket_make_heap()
-     silently failed (fixed), transient_setaside() discovered it, but
-     ap_save_brigade() ignored it (fixed). [Jeff Trawick]
-     
-  *) Ignore \r\n or \n when using PEEK mode for input filters.  The problem
-     is that some browsers send extra lines at the end of POST requests, and
-     we don't want to delay sending data back to the user just because the
-     browser isn't well behaved. [Ryan Bloom]
-
-  *) Get SuEXEC working again.  We can't send absolute paths to suExec
-     because it refuses to execute those programs.  SuEXEC also wasn't
-     always recognizing configuration changes made using the autoconf
-     setup.  [Ryan Bloom]
-
-  *) Allow the buildconf process to find the config.m4 files in the correct
-     order.  Basically, we can now name config.m4 files as config\d\d.m4,
-     and we will sort them correctly when inserting them into the build
-     process.  [Ryan Bloom]
-
-  *) Get mod_cgid to use apr calls for creating the actual CGI process.
-     This also allows mod_cgid to use ap_os_create_priviledged_process,
-     thus allowing for SuExec execution from mod_cgid.  Currently, we do
-     not support everything that standard SuExec supports, but at least
-     it works minimally now. [Ryan Bloom]
-
-  *) Allow SuExec to be configured from the ./configure command line.
-     [Ryan Bloom]
-
-  *) Update some of the docs in README and INSTALL to reflect some of
-     the changes in Apache 2.0 [Cliff Woolley <cliffwoolley@yahoo.com>]
-
-  *) If we get EAGAIN returned from the call to apr_sendfile, then we
-     need to call sendfile again.  This gets us serving large files
-     such as apache_2.0a9.tar.gz on FreeBSD again. [Ryan Bloom]
-
-  *) Get the support programs building cleanly again.
-     [Cliff Woolley <cliffwoolley@yahoo.com>]
-
-  *) The Apache/Win32 Apache.exe and dll's now live in bin.  The 
-     current directory logic now backs up over bin/ to determine the
-     server root from the Apache.exe path.
-
-  *) Apache/Win32 now follows the standard conventions of mod_foo.so
-     loadable modules, dynamic libs are all named libfoo.dll, and the
-     makefile.win populates the include, lib and libexec directories.
-
-  *) Apache is now IPv6-capable.  On systems where APR supports IPv6,
-     Apache gets IPv6 listening sockets by default.  Additionally, the
-     Listen, NameVirtualHost, and <VirtualHost> directives support IPv6
-     numeric address strings (e.g., "Listen [fe80::1]:8080").
-     [Jeff Trawick]
-
-  *) Modify the install directory layout.  Modules are now installed in
-     modules/.  Shared libraries should be installed in libraries/, but
-     we don't have any of those on Unix yet.  All install directories
-     are modifyable at configure time. [Ryan Bloom]
-
-  *) Install all header files in the same directory on Unix. [Ryan Bloom]
-
-  *) Get the functions in server/linked into the server, regardless of
-     which modules linked into the server.  This uses the same hack 
-     for Apache that we use for APR and apr-util to ensure all of the
-     necessary functions are linked.  As a part of thise, the CHARSET_EBCDIC
-     was renamed to AP_CHARSET_EBCDIC for namespace protection, and to make
-     the scripts a bit easier.
-     [Ryan Bloom]
-
-  *) Rework the RFC1413 handling to make it thread-safe, use a timeout
-     on the query, and remove IPv4 dependencies.  [Jeff Trawick]
-
-  *) Get all of the auth modules to the point that they will install and
-     be loadable into the server.  Our new build/install mechanism expects
-     that all modules will have a common name format.  The auth modules 
-     didn't use that format, so we didn't install them properly.
-     [Ryan Bloom]
-
-  *) API routines ap_pgethostbyname() and ap_pduphostent() are no longer
-     available.  Use apr_getaddrinfo() instead.  [Jeff Trawick]
-
-  *) Get "NameVirtualHost *" working in 2.0.  [Ryan Bloom]
-
-  *) Return HTTP_RANGE_NOT_SATISFIABLE if the every range requested starts
-     after the end of the response. [Ryan Bloom]
-
-  *) Get byterange requests working with responses that do not have a
-     content-length.  Because of the way byterange requests work, we have to
-     have all of the data before we can actually do the byterange, so we
-     can compute the content-length in the byterange filter.
-     [Ryan Bloom]
-
-  *) Get exe CGI's working again on Windows.
-     [Allan Edwards]
-
-  *) Get mod_cgid and mod_rewrite to work as DSOs by changing the way
-     they keep track of whether or not their  post config hook has been
-     called before.  Instead of a static variable (which is replaced when 
-     the DSO is loaded a second time), use userdata in the process pool.
-     [Jeff Trawick]
-
-Changes with Apache 2.0a9
-
-  *) Win32 now requires perl to complete the final install step for users
-     to build + install on Win32.  Makefile.win now rewrites @@ServerRoot@
-     and installs the conf, htdocs and htdocs/manual directories.
-     [William Rowe]
-
-  *) Make mod_include use a hash table to associate directive tags with
-     functions.  This allows modules to implement their own SSI tags easily.
-     The idea is simple enough, a module can insert it's own tag and function
-     combination into a hash table provided by mod_include.  While mod_include
-     parses an SSI file, when it encounters a tag in the file, it does a
-     hash lookup to find the function that implements that tag, and passes
-     all of the relevant data to the function.  That function is then
-     responsible for processing the tag and handing the remaining data back
-     to mod_include for further processing.
-     [Paul J. Reder <rederpj@raleigh.ibm.com>]
-
-  *) Get rid of ap_new_apr_connection().  ap_new_connection() now has 
-     fewer parameters: the local and remote socket addresses were removed
-     from the parameter list because all required information is available
-     via the APR socket.  [Jeff Trawick]
-
-  *) Distribution directory structure reorganized to reflect a
-     normal source distribution with external install targets.
-     [Roy Fielding]
-
-  *) The MPMs that need multiple segments of shared memory now create
-     two apr_shmem_t variables, one for each shared memory allocation.
-     the problem is that we can't determine how much memory will be required
-     for shared memory allocations once we try to allocate more than one
-     variable.  The MM code automatically aligns the shared memory allocations,
-     so we end up needing to pad the amount of shared memory we want based
-     on how many variables will be allocated out of the shared memory segment.
-     It is just easier to create a second apr_shmem_t variable, and two
-     shmem memory blocks.
-     [Ryan Bloom]
-
-  *) Cleanup the export list a bit.  This creates a single unified list of
-     functions exported by APR.  The export list is generated at configure
-     time, and that list is then used to generate the exports.c file.
-     Because of the way the export list is generated, we only export those
-     functions that are valid on the platform we are building on.
-     [Ryan Bloom]
-
-  *) Enable logging the cookie with mod_log_config
-     [Sander van Zoest <sander@covalent.net>]
-
-  *) Fix a segfault in mod_info when it reaches the end of the configuration.
-     [Jeff Trawick]
-
-  *) Added lib/aputil/ as a placeholder for utility functions which are not
-     specific to the Apache HTTP Server (but do not make sense with APR).
-     The first utility is "apu_dbm": a set of functions to work with DBM
-     files. This first version can be compiled for SDBM or GDBM databases.
-     [Greg Stein]
-
-  *) Complete re-write of mod_include.  This makes mod_include a filter that
-     uses buckets directly.  This has now served the FAQ correctly.
-     [Paul Reder <rederpj@raleigh.ibm.com>]
-
-  *) Allow modules to specify the first filter in a sub_request when
-     making the sub_request.  This keeps modules from having to change the
-     output_filter immediately after creating the sub-request, and therefore
-     skip the sub_req_output_filter.  [Ryan Bloom]
-
-  *) Update ab to accept URLs with IPv6 literal address strings (in the
-     format described in RFC 2732), and to build Host header fields in
-     the same format.  This allows IPv6 literal address strings to be
-     used with ab.  This support has been tested against Apache 1.3 with 
-     the KAME patch, but Apache 2.0 does not yet work with this format
-     of the Host header field.  [Jeff Trawick]
-
-  *) Accomodate an out-of-space condition in the piped logs and the
-     rotatelogs.c code, and no longer churn log processes for this
-     condition.  [Victor J. Orlikowski]
-
-  *) Add support for partial writes with apr_sendfile() to core_output_filter.
-     [Greg Ames] 
-
-Changes with Apache 2.0a8
-
-  *) Add a directive to mod_mime so that filters can be associated with
-     a given mime-type.
-     [Ryan Bloom]
-
-  *) Get multi-views working again.  We were setting the path_info
-     field incorrectly if we couldn't find the specified file.
-     [Ryan Bloom]
-
-  *) Fix 304 processing.  The core should never try to send the headers
-     down the filter stack.  Always, just setup the table in the request
-     record, and let the header filter convert it to data that is ready
-     for the network.
-     [Ryan Bloom]
-
-  *) More fixes for the proxy.  There are still bugs in the proxy code,
-     but this has now proxied www.yahoo.com and www.ntrnet.net (my ISP)
-     successfully.
-     [Ryan Bloom]
-
-  *) Fix params for apr_getaddrinfo() call in connect proxy handler.
-     [Chuck Murcko]
-
-  *) APR: Add new apr_getopt_long function to handle long options.
-     [B. W. Fitzpatrick <fitz@red-bean.com>]
-
-  *) APR: Change apr_connect() to take apr_sockaddr_t instead of hostname.
-     Add generic apr_create_socket().  Add apr_getaddrinfo() for doing
-     hostname resolution/address string parsing and building
-     apr_sockaddr_t.  Add apr_get_sockaddr() for getting the address
-     of one of the apr_sockaddr_t structures for a socket.  Change
-     apr_bind() to take apr_sockaddr_t.  [David Reid and Jeff Trawick]
-
-  *) Remove the BUFF from the HTTP proxy.  This is still a bit ugly, but
-     I have proxied pages with it, cleanup will commence soon.
-     [Ryan Bloom]
-
-  *) Make the proxy work with filters.  This isn't perfect, because we
-     aren't dealing with the headers properly.  [Ryan Bloom]
-
-  *) Do not send a content-length iff the C-L is 0 and this is a head
-     request.  [Ryan Bloom]
-
-  *) Make cgi-bin work as a regular directory when using mod_vhost_alias
-     with no VirtualScriptAlias directives. PR#6829 [Tony Finch]
-
-  *) Remove BUFF from the PROXY connect handling. [Ryan Bloom]
-
-  *) Get the default_handler to stop trying to deal with HEAD requests.
-     The idea is to let the content-length filter compute the C-L before
-     we try to send the data.  If we can get the C-L correctly, then we
-     should send it in the HEAD response.
-     [Ryan Bloom]
-     
-  *) The Header filter can now determine if a body should be sent based
-     on r->header_only.  The general idea of this is that if we delay
-     deciding to send the body, then we might be able to compute the
-     content-length correctly, which will help caching proxies to cache
-     our data better.  Any handler that doesn't want to try to compute
-     the content-length can just send an EOS bucket without data and
-     everything will just work.
-     [Ryan Bloom]
-
-  *) Add the referer to the error log if one is available.
-     [Markus Gyger <mgyger@itr.ch>]
-
-  *) Mod_info.c has now been ported to Apache 2.0.  As a part of this
-     change, the root of the configuration tree has been exposed to modules
-     as ap_conftree.
-     [Ryan Morgan <rmorgan@covalent.net>]
-
-  *) Get the core_output_filter to use the bucket interface directly.
-     This keeps us from calling the content-length filter multiple times
-     for a simple static request.
-     [Ryan Bloom]
-
-  *) We are sending the content-type correctly now.
-     [Ryan Bloom and Will Rowe]
-
-  *) APR on FreeBSD: Fix a bug in apr_sendfile() which caused us to report
-     a bogus bytes-sent value when the only thing being sent was trailers
-     and writev() returned an error (or EAGAIN).  [Jeff Trawick]
-
-  *) Get SINGLE_LISTEN_UNSERIALIZED_ACCEPT working again.  This uses the
-     hints file to determine which platforms define 
-     SINGLE_LISTEN_UNSERIALIZED_ACCEPT.
-     [Ryan Bloom]
-
-  *) APR: add apr_get_home_directory()  [Jeff Trawick]
-
-  *) Initial import of 1.3-current mod_proxy. [Chuck Murcko]
-
-  *) Not all platforms have INADDR_NONE defined by default.  Apache
-     used to make this check and define INADDR_NONE if appropriate,
-     but APR needs the check too, and I suspect other applications will
-     as well.  APR now defines APR_INADDR_NONE, which is always a valid
-     value on all platforms.
-     [Branko Èibej <brane@xbc.nu>]
-
-  *) Destroy the pthread mutex in lock_intra_cleanup() for PR#6824.
-     [Shuichi Kitaguchi <ki@hh.iij4u.or.jp>] 
-
-  *) Relax the syntax checking of Host: headers in order to support
-     iDNS. PR#6635 [Tony Finch]
-
-  *) When reading from file buckets we convert to an MMAP if it makes
-     sense.  This also simplifies the default handler because the
-     default handler no longer needs to try to create MMAPs.
-     [Ryan Bloom]
-
-  *) BUFF has been removed from the main server.  The BUFF code will remain
-     in the code until it has been purged from the proxy module as well.
-     [Ryan Bloom]
-
-  *) Byteranges have been completely re-written to be a filter.  This
-     has been tested, and I believe it is working correctly, but it could
-     doesn't work for the Adobe Acrobat plug-in.  The output almost matches
-     the output from 1.3, the only difference being that 1.3 includes
-     a content-length in the response, and this does not.
-     [Ryan Bloom]
-
-  *) APR read/write functions and bucket read functions now operate
-     on unsigned integers, instead of signed ones.  It doesn't make
-     any sense to use signed ints, because we return the error codes,
-     so if we have an error we should report 0 bytes read or written.
-     [Ryan Bloom]
-
-  *) Always compute the content length, whether it is sent or not.
-     The reason for this, is that it allows us to correctly report
-     the bytes_sent when logging the request.  This also simplifies
-     content-length filter a bit, and fixes the actual byte-reporing
-     code in mod_log_config.c
-     [Ryan Bloom]
-
-  *) Remove AP_END_OF_BRIGADE definition.  This does not signify what
-     it says, because it was only used by EOS and FLUSH buckets.  Since
-     neither of those are required at the end of a brigade, this was
-     really signifying FLUSH_THE_DATA, but that can be determined better
-     by checking AP_BUCKET_IS_EOS() or AP_BUCKET_IS_FLUSH.  EOS and FLUSH
-     buckets now return a length of 0, which is actually the amount of data
-     read, so they make more sense.
-     [Ryan Bloom]
-
-  *) Allow the core_output_filter to save some data past the end of a
-     request.  If we get an EOS bucket, we only send the data if it 
-     makes sense to send it.  This allows us to pipeline request
-     responses.  As a part of this, we also need to allocate mmap
-     buckets out of the connection pool, not the request pool.  This
-     allows the mmap to outlive the request.
-     [Ryan Bloom]
-
-  *) Make blocking and non-blocking bucket reads work correctly for
-     sockets and pipes.  These are the only bucket types that should
-     have non-blocking reads, because the other bucket types should
-     ALWAYS be able to return something immediately.
-     [Ryan Bloom]
-
-  *) In the Apache/Win32 console window, accept Ctrl+C to stop the 
-     server, but use Ctrl+Break to initiate a graceful restart 
-     instead of duplicating behavior. [John Sterling]
-
-  *) Patch mod_autoindex to set the Last-Modified header based on
-     the directory's mtime, and add the ETag header.  [William Rowe]
-
-  *) Merge the 1.3 patch to add support for logging query string in 
-     such a way that "%m %U%q %H" is the same as "%r".
-     [Bill Stoddard]
-
-  *) Port three log methods from mod_log_config 1.3 to 2.0: 
-     CLF compliant '-' byte count, method and protocol.
-     [Bill Stoddard]
-
-  *) Add a new LogFormat directive, %c, that will log connection
-     status at the end of the response as follows:
-     'X' - connection aborted before the response completed.
-     '+' - connection may be kept-alive by the server.
-     '-' - connection will be closed by the server.
-     [Bill Stoddard]
-
-  *) Expand APR for WinNT to fully accept and return utf-8 encoded
-     Unicode file names and paths for Win32, and tag the Content-Type 
-     from mod_autoindex to reflect that charset if the the feature
-     macro APR_HAS_UNICODE_FS is true.  [William Rowe]
-
-  *) Compute the content length (and add appropriate header field) for
-     the response when no content length is available and we can't use 
-     chunked encoding.  [Jeff Trawick]
-
-  *) Changed ap_discard_request_body() to use REQUEST_CHUNKED_DECHUNK,
-     so that content input filters get dechunked data when using
-     the default handler. Also removed REQUEST_CHUNKED_PASS.
-     [Sascha Schumann]
-     
-  *) Add mod_ext_filter as an experimental module.  This module allows
-     the administrator to use external programs as filters.  Currently,
-     only filtering of output is supported.  [Jeff Trawick]
-
-  *) Most Apache functions work on EBCDIC machines again, as protocol
-     data is now translated (again).  [Jeff Trawick]
-
-  *) Introduce ap_xlate_proto_{to|from}_ascii() to clean up some of
-     the EBCDIC support.  They are noops on ASCII machines, so this
-     type of translation doesn't have to be surrounded by #ifdef
-     CHARSET_EBCDIC.  [Jeff Trawick]
-
-  *) Fix mod_include.  tag commands work again, and the server will
-     send the FAQ again.  This also allows mod_include to set aside
-     buckets that include partial buckets.
-     [Ryan Bloom and David Reid]
-
-  *) Add suexec support back.  [Manoj Kasichainula]
-
-  *) Lingering close now uses the socket directly instead of using
-     BUFF.  This has been tested, but since all we can tell is that it
-     doesn't fail, this needs to be really hacked on.
-     [Ryan Bloom]
-
-  *) Allow filters to modify headers and have those headers be sent to
-     the client.  The idea is that we have an http_header filter that
-     actually sends the headers to the network.  This removes the need
-     for the BUFF to send headers.
-     [Ryan Bloom]
-
-  *) Charset translation: mod_charset_lite handles translation of
-     request bodies.  Get rid of the xlate version of ap_md5_digest()
-     since we don't compute digests of filtered (e.g., translated) 
-     response bodies this way anymore.  (Note that we don't do it at
-     all at the present; somebody needs to write a filter to do so.)
-     [Jeff Trawick]
-
-  *) Input filters and ap_get_brigade() now have a input mode parameter 
-     (blocking, non-blocking, peek) instead of a length parameter.
-     [hackathon]
-
-  *) Update the mime.types file to the registered media types as
-     of 2000-10-19. PR#6613 [Carsten Klapp <carsten.klapp@home.net>,
-     Tony Finch]
-
-  *) Namespace protect some macros declared in ap_config.h
-     [Ryan Bloom]
-
-  *) Support HTTP header line folding with input filtering.
-     [Greg Ames]
-
-  *) Mod_include works again.  This should still be re-written, but at
-     least now we can serve an SHTML page again.
-     [Ryan Bloom]
-
-  *) Begin to remove BUFF from the core.  Currently, we keep a pointer
-     to both the BUFF and the socket in the conn_rec.  Functions that
-     want to use the BUFF can, functions that want to use the socket,
-     can.  They point to the same place.
-     [Ryan Bloom]
-
-  *) apr_psprintf doesn't understand %lld as a format.  Make it %ld.
-     [Tomas "Ögren" <stric@ing.umu.se>]
-
-  *) APR pipes on Unix and Win32 are now cleaned up automatically when the 
-     associated pool goes away.  (APR pipes on OS/2 were already had this
-     logic.)  This resolvs a fatal file descriptor leak with CGIs.  
-     [Jeff Trawick]
-
-  *) The final line of the config file was not being read if there was
-     no \n at the end of it.  This was caused by apr_fgets returning 
-     APR_EOF even though we had read valid data.  This is solved by
-     making cfg_getline check the buff that was returned from apr_fgets.
-     If apr_fgets return APR_EOF, but there was data in the buf, then we
-     return the buf, otherwise we return NULL.
-     [Ryan Bloom]
-
-  *) Piped logs work again in the 2.0 series.
-     [Ryan Bloom]
-
-  *) Restore functionality broken by the mod_rewrite security fix:
-     rewrite map lookup keys and default values are now expanded
-     so that the lookup can depend on the requested URI etc.
-     PR #6671 [Tony Finch]
-
-  *) Tighten up the syntax checking of Host: headers to fix a
-     security bug in some mass virtual hosting configurations
-     that can allow a remote attacker to retrieve some files
-     on the system that should be inaccessible. [Tony Finch]
-
-  *) Add a pool bucket type.  This bucket is used for data allocated out
-     of a pool.  If the pool is cleaned before the bucket is destroyed, then
-     the data is converted to a heap bucket, allowing it to survive the
-     death of the pool.
-     [Ryan Bloom]
-
-  *) Add a flush bucket.  This allows modules to signal that the filters
-     should all flush whatever data they currently have.  There is no way
-     to actually force them to do this, so if a filter ignores this bucket,
-     that's life, but at least we can try with this.
-     [Ryan Bloom]
-
-  *) Add an output filter for sub-requests.  This filter just strips the
-     EOS bucket so that we don't confuse the main request's core output
-     filter by sending multiple EOS buckets.  This change also makes sub
-     requests start to send EOS buckets when they are finished.
-     [Ryan Bloom]
-
-  *) Make ap_bucket_(read|destroy|split|setaside) into macros.  Also
-     makes ap_bucket_destroy a return void, which is okay because it
-     used to always return APR_SUCCESS, and nobody ever checked its
-     return value anyway.
-     [Cliff Woolley <cliffwoolley@yahoo.com>]
-
-  *) Remove the index into the bucket-type table from the buckets
-     structure.  This has now been replaced with a pointer to the
-     bucket_type.  Also add some macros to test the bucket-type.
-     [Ryan Bloom]
-
-  *) Renamed all MODULE_EXPORT symbols to AP_MODULE_DECLARE and all symbols
-     for CORE_EXPORT to AP_CORE_DECLARE (namespace protecting the wrapper)
-     and retitled API_EXPORT as AP_DECLARE and APR_EXPORT as APR_DECLARE.
-     All _VAR_ flavors changes to _DATA to be absolutely clear.
-     [William Rowe]
-
-  *) Add support for /, //, //servername and //server/sharename 
-     parsing of <Directory> blocks under Win32 and OS2.
-     [Tim Costello, William Rowe, Brian Harvard]
-
-  *) Remove the function pointers from the ap_bucket type.  They have been
-     replaced with a global table.  Modules are allowed to register bucket
-     types and use then use those buckets.
-     [Ryan Bloom]
-
-  *) mod_cgid: In the handler, shut down the Unix socket (only for write) 
-     once we finish writing the request body to the cgi child process; 
-     otherwise, the client doesn't hit EOF on stdin.  Small request bodies 
-     worked without this change (for reasons I don't understand), but large 
-     ones didn't.  [Jeff Trawick]
-
-  *) Remove file bucket specific information from the ap_bucket type.
-     This has been moved to a file_bucket specific type that hangs off
-     the data pointer in the ap_bucket type.
-     [Ryan Bloom]
-
-  *) Input filtering now has a third argument.  This is the amount of data
-     to read from lower filters.  This argument can be -1, 0, or a positive
-     number.  -1 means give me all the data you have, I'll deal with it and
-     let you know if I need more.  0 means give me one line and one line
-     only.  A positive number means I want no more than this much data.
-
-     Currently, only 0 and a positive number are implemented.  This allows
-     us to remove the remaining field from the conn_rec structure, which
-     has also been done.
-     [Ryan Bloom] 
-    
-  *) Big cleanup of the input filtering.  The goal is that http_filter
-     understands two conditions, headers and body.  It knows where it is
-     based on c->remaining.  If c->remaining is 0, then we are in headers,
-     and http_filter returns a line at a time.  If it is not 0, then we are
-     in body, and http_filter returns raw data, but only up to c->remaining
-     bytes.  It can return less, but never more.
-     [Greg Ames, Ryan Bloom, Jeff Trawick]
-
-  *) mod_cgi: Write all of the request body to the child, not just what
-     the kernel would accept on the first write.  [Jeff Trawick]
-
-  *) Back out the change that moved the brigade from the core_output_filters
-     ctx to the conn_rec.  Since all requests over a given connection
-     go through the same core_output_filter, the ctx pointer has the
-     correct lifetime.
-     [Ryan Bloom]
-
-  *) Fix another bug in the send_the_file() read/write loop. A partial
-     send by apr_send would cause unsent data in the read buffer to
-     get clobbered. Complete making send_the_file handle partial
-     writes to the network.
-     [Bill Stoddard]
-
-  *) Fix a couple of type fixes to allow compilation on AIX again
-     [Victor J. Orlikowski <v.j.orlikowski@gte.net>]
-
-  *) Fix bug in send_the_file() which causes offset to be ignored
-     if there are no headers to send.
-     [Bill Stoddard]
-
-  *) Handle APR_ENOTIMPL returned from apr_sendfile in the core
-     filter. Useful for supporting Windows 9* with a binary
-     compiled on Windows NT.
-     [Bill Stoddard]
-
-Changes with Apache 2.0a7
-
-  *) Reimplement core_output_filter to buffer/save bucket brigades
-     across multiple calls to the core_filter. The brigade will be
-     sent when either MIN_BYTES_TO_SEND or MAX_IOVEC_TO_WRITE
-     thresholds are hit or the EOS bucket is received.
-     [Bill Stoddard]
-
-  *) Create experimental filter (buffer_filter) that coalesces bytes 
-     into one large buffer before invoking the next filter in the
-     chain. This filter is particularly useful with the current 
-     implementation of mod_autoindex when it inserted above the
-     chunk_filter. mod_autoindex generates a lot of brigades that
-     containing buckets holding just a few bytes each. The
-     buffer_filter coalesces these buckets into a single large bucket.
-     [Bill Stoddard]
-
-  *) Add apr_sendfile() support into the core_output_filter.
-     [Bill Stoddard]
-
-  *) Add apr_sendv() support into the core_output_filter.
-     [Bill Stoddard]
-
-  *) Fix mod_log_config so that it compiles cleanly with BUFFERED_LOGS
-     [Mike Abbott <mja@sgi.com>]
-
-  *) Remove ap_send_fb.  This is no longer used in Apache, and it doesn't
-     make much sense, because Apache uses buckets instead of BUFFs now.
-     [Ryan Bloom]
-
-  *) send_the_file now falls back to a read/write loop on platforms that
-     do not have sendfile.
-     [Ryan Bloom and Brian Havard]
-
-  *) Install apachectl correctly, and substitute the proper values so
-     that it works again.  [Ryan Bloom]
-
-  *) Better(??) handle platforms that lack sendfile().
-     [Jim Jagielski]
-
-  *) APR now has UUID generation/formatting/parsing support.
-     [Greg Stein]
-
-  *) Begin the http_filter.  This is an input filter that understands
-     the absolute basic amount required to parse an HTTP Request.  The
-     goal is to be able to split headers from request body before passing
-     the data back to the other filters.
-     [Ryan Bloom]
-
-  *) Bring forward from 1.3.13 the config directory implementation
-     [Jim Jagielski]
-
-  *) install apxs if it is created
-     [Ryan Bloom]
-
-  *) Added APR_IS_STATUS_condition test macros to eliminate canonical error
-     conversions.  [William Rowe]
-
-  *) Now that we have ap_add_input_filter(), rename ap_add_filter() to 
-     ap_add_output_filter().  [Jeff Trawick]
-
-  *) Multiple build and configuration fixes
-    Build process:
-
-      -add datadir and localstatedir substitutions
-      -fix layout name
-      -fix logfilename misspelling
-      -fix evaluation of installation dir variables and
-      -replace $foobar by $(foobar) to be usefull in the makefile
-    
-    Cross compile:
-    
-      -add rules for cross-compiling in rules.mk. Okay, rule to check for
-       $CC_FOR_BUILD is still missing
-      -use CHECK_TOOL instead of CHECK_PROG for ranlib
-      -add missing "AR=@AR@" to severaly Makefile.in's
-      -cache result for "struct rlimit"
-      -compile all helper programs with native and cross compiler
-       and use the native version to generate header file
-     ["Rüdiger" Kuhlmann <Tadu@gmx.de>]
-
-  *) Prepare our autoconf setup for autoconf 2.14a and for cross-
-     compiling.
-     ["Rüdiger" Kuhlmann <Tadu@gmx.de>]
-
-  *) Fix a bug where a client which only sends \n to delimit header
-     lines (netcat) gets a strange looking HTTP_NOT_IMPLEMENTED 
-     message.  Start working on ebcdic co-existance with input 
-     filtering.
-     [William Rowe, Greg Ames]
-
-  *) If mod_so is enabled in the server always create libexec, even
-     if there are no modules installed in this directory.  This is a
-     requirement for APXS to work correctly.
-     [Ryan Bloom]
-
-  *) Connection oriented output filters are now stored in the 
-     conn_rec instead of the request_rec.  This allows us to add the
-     output filter in the pre-connection phase instead of the
-     post_read_request phase, which keeps us from trying to write an
-     error page before we have a filter to write to the network.
-     [Ryan Bloom, Jeff Trawick, and Greg Ames]
-
-  *) Cleaning up an mmap bucket no longer deletes the mmap.  An
-     mmap can be used across multiple buckets (default_handler with
-     byte ranges, mod_file_cache, mod_mmap_static), so cleanup of
-     the mmap itself can't be associated with the bucket.
-     [Jeff Trawick]
-
-  *) Add .dll caching directive ISAPICacheFile to mod_isapi.
-     [William Rowe]
-
-  *) Radical surgery to improve mod_isapi support under Win32.
-     Includes a number of newer ServerSupportFunction calls, support
-     for ReadClient (in order to retrieve POSTs greater than 48KB),
-     and general bug fixes to more reliably load ISAPI .dll's and
-     prevent leaking handle resources.  Note: There are still 
-     discrepancies between IIS's and Apache's ServerVariables, and
-     async calls are still not supported.  Additional warnings are
-     logged to facilitate debugging of unsupported ISAPI calls.
-     [William Rowe]
-
-  *) Add input filtering to Apache.  The basic idea for the input
-     filters is the same as the ideas for output filters.  The biggest
-     difference is that instead of calling ap_pass_brigade, ap_get_brigade
-     should be called, and the order of execution for the filter itself is
-     different.  When writing an output filter, a brigade is passed in,
-     and filters operate directly on that brigade, when done, they call
-     ap_pass_brigade.  Input filters are the exact opposite.  Because input
-     is not a push operation, filters first call ap_get_brigade.  When this
-     function returns, the input filter will be left with a valid brigade.
-     The input filter should then operate on the brigade, and return.
-     [Ryan Bloom]
-
-  *) Fix building on BSD/OS using its native make. The build system
-     falls back to the BSD .include directive on that host platform.
-     [Sascha Schumann]
-
-  *) Expand dbmmanage to allow -d -m -s -p options for Crypt, MD5,
-     SHA1 and plaintext password encodings.  Make feature tests a
-     bit more flexible.  [William Rowe]
-
-  *) Charset translation: mod_charset_lite handles output content 
-     translation in a filter.  mod_charset_lite no longer ignores 
-     subrequests.  A bunch of cruft related to BUFF's support for
-     translating request and response bodies was removed.  
-     [Jeff Trawick]
-
-  *) Move the addition of the CORE filter to the post_read_request
-     hook in http_core.c.  This removes the need to add the filter in
-     multiple places and allows for an SSL module to be added much
-     simpler. [Ryan Bloom]
-
-  *) Fix a security problem that affects certain configurations of
-     mod_rewrite. If the result of a RewriteRule is a filename that
-     contains expansion specifiers, especially regexp backreferences
-     $0..$9 and %0..%9, then it may be possible for an attacker to
-     access any file on the web server. [Tony Finch]
-
-  *) Fix a bug where errors that are detected during early request parsing
-     don't produce visible HTTP error messages at the browser, because
-     the core_filter wasn't present.  [Greg Ames]
-
-  *) Provide apr_socklen_t as a portability aid. 
-     [Victor  J. Orlikowski]
-
-  *) Overhaul of dbmmanage to allow a groups arg (as in Apache 1.2)
-     as well as a comment arg to the add, adduser and update cmds.
-     update allows the user to clear or preserve pw/groups/comment.
-     Fixed a bug in dbmmanage that prevented the check option from 
-     parsing a password followed by :group... text.  Corrected the
-     seed calcualation for Win32 systems, and added -lsdbm support.
-     [William Rowe]
-
-  *) Configured mod_auth_dbm to compile with sdbmlib under Win32.
-     [William Rowe]
-
-  *) Avoid a segfault when parsing .htaccess files.  An 
-     uninitialized tree pointer was passed to ap_build_config().
-     [Jeff Trawick]
-
-  *) Change the way that inet_addr & inet_network are checked for
-     in APR's configure process to allow BeOS BONE to correctly
-     find them. With this change BeOS BONE now builds from source
-     with no problems.  [David Reid]
-
-  *) Fix a bug in apr_create_process() for Unix.  The NULL signifying
-     the end of the parameters to execve() was stored in the wrong
-     location, overlaying the storage beyond the newargs[] array and 
-     also passing uninitialized storage to execve(), which would 
-     sometimes fail with EFAULT.  [Jeff Trawick]
-
-  *) Fix a bug parsing configuration file containers.  With a sequence
-     like this in the config file
-
-       <IfModule mod_kilroy.c>
-       any stuff
-       </IfModule>
-       <IfModule mod_lovejoy.c>
-       (blank line)
-       any stuff
-       </IfModule>
-
-     the second container would be terminated at the blank line due to
-     sediment in the buffer from reading the prior </IfModule> and an 
-     error message would be generated for the real </IfModule> for the
-     second container.  Also due to this problem, any two characters 
-     could be used for "</" in the close of a container.  
-     [Jeff Trawick]
-
-  *) ap_add_filter prototype changed to remove the ctx pointer.  The
-     pointer still remains in the filter structure, but it can not be
-     a part of the ap_add_filter prototype.  The reason is that when
-     the core uses AddFilter to add a filter to the stack it doesn't
-     know how to allocate the ctx pointer, or even how much memory should
-     be allocated.  The filters will have to be responsible for allocating
-     the ctx memory when they need it.
-     [Ryan Bloom]
-
-  *) Add an AddFilter directive.  This directive takes a list of filters
-     that should be activated for the requested resource.
-     [Ryan Bloom]
-
-  *) apr_snprintf(): Get quad format strings working on OS/390 (and perhaps
-     some other platforms).  [Jeff Trawick]
-
-  *) Modify mod_include to be a filter.  Currently, it has only been tested
-     on actual files, but it should work for CGI scripts too.
-     [Ryan Bloom]
-
-  *) apr_putc(), apr_puts() for Unix: handle buffered files and interrupted
-     writes.  apr_flush() for Unix: handle interrupted writes.
-     [Jeff Trawick]
-
-  *) NameVirtualHost can now take "*" as an argument instead of
-     an IP address. This allows you to create a purely name-based
-     virtual hosting server that does not have any IP addresses in
-     the configuration file and which ignores the local address
-     of any connections. PR #5595, PR #4455 [Tony Finch]
-
-  *) Fix some compile warnings in mod_mmap_static.c
-     [Mike Abbott <mja@sgi.com>]
-
-  *) Fix chunking problem with CGI scripts.  The general problem was that
-     the CGI modules were adding an EOS bucket and then the core added an
-     EOS bucket.  The chunking filter finalizes the chunked response when it
-     encounters an EOS bucket.  Because two EOS buckets were sent, we
-     finalized the response twice.  The fix is to make sure we only send one
-     EOS, by utilizing a flag in the request_rec.
-     [Ryan Bloom]
-
-  *) apr_put_os_file() now sets up the unget byte appropriately on Unix
-     and Win32.  Previously, the first read from an apr_file_t set up via
-     apr_put_os_file() would return a '\0'.  [Jeff Trawick]
-
-  *) Mod_cgid now creates a single element bucket brigade, with a pipe
-     bucket, instead of using BUFF's and ap_r*.
-     [Ryan Bloom]
-
-  *) APRVARS.in no longer overwrites the EXTRA_LIBS variable.
-     [Mike Abbott <mja@sgi.com>]
-
-  *) Remove ap_bopenf from buff code.  This required modifying the file_cache
-     code to use APR file's directly instead of going through BUFFs.
-     [Ryan Bloom]
-
-  *) Fix compile break on some platforms for mod_mime_magic.c
-     [John K. Sterling <sterling@covalent.net>]
-
-  *) Fix merging of AddDefaultCharset directive.
-     PR #5872 (1.3) [Jun Kuriyama <kuriyama@imgsrc.co.jp>]
-
-  *) Minor revamp of the rlimit sections of code. We now test
-     explicitly for setrlimit and getrlimit. Also, unixd_set_rlimit()
-     is now "available" even if the platform doesn't support
-     the rlimit family (it's just a noop though). [Jim Jagielski]
-
-  *) Migrate the pre-selection of which MPM to use for specific
-     platforms to hints.m4, which contains (or should contain)
-     all platform specific "hints". [Jim Jagielski]
-
-  *) Remove IOLs from Apache.  With filtering, IOLs are no longer necessary
-     [Ryan Bloom]
-
-  *) Add tables with non-string/binary values to APR.
-     [Ken Coar]
-
-  *) Fix some bad calls to ap_log_rerror() in mod_rewrite. 
-     [Jeff Trawick]
-
-  *) Update PCRE to version 3.2.  [Ryan Bloom]
-
-  *) Change the way buckets' destroy functions are called so that
-     they can be more directly used when changing the type of a
-     bucket in place. [Tony Finch]
-
-  *) Add generic support for reference-counting the resources used by
-     buckets, and alter the HEAP and MMAP buckets to use it. Change
-     the way buckets are initialised to support changing the type of
-     buckets in place, and use it when setting aside TRANSIENT buckets.
-     Change the implementation of TRANSIENT buckets so that it can be
-     mostly shared with IMMORTAL buckets, which are now implemented.
-     [Tony Finch]
-
-Changes with Apache 2.0a6
-
-  *) Add support to Apache and APR for dsos on OS/390.  [Greg Ames]
-
-  *) Add a chunking filter to Apache.  This brings us one step closer
-     to removing BUFF. [Ryan Bloom]
-
-  *) ap_add_filter now adds filters in a LIFO fashion.  The first filter
-     added to the stack is the last filter to be called.  [Ryan Bloom]
-
-  *) Apache 2.0 has been completely documented using Scandoc.  The
-     docs can be generated by running 'make docs'.  [Ryan Bloom]
-
-  *) Add filtered I/O to Apache.  This is based on bucket brigades,
-     Currently the buckets still use BUFF under the covers, but that
-     should change quickly.  The only currently written filter is the
-     core filter which just calls ap_bwrite.  [The Apache Group]
-
-  *) APR locks on Unix: Let APR_LOCKALL locks work when APR isn't
-     built with thread support.  [Jeff Trawick]
-
-  *) Abort configuration if --with-layout was specified and there's
-     no layout definition file.  [Ken Coar]
-
-  *) Add support for '--with-port=n' option to configure.  [Ken Coar]
-
-  *) Add support for extension methods for the Allow response header
-     field, and an API routine for accessing r->allowed and the
-     list of extension methods in a unified manner.  [Ken Coar]
-
-  *) mod_cern_meta: fix broken file reading loop in scan_meta_file().
-     [Rob Simonson <simo@us.ibm.com>]
-
-  *) Get xlate builds working again.  The apr renaming in 2.0a5 broke
-     APACHE_XLATE builds.  [Jeff Trawick]
-
-  *) A configuration file parsing problem was fixed.  When the 
-     configuration file started with an IfModule/IfDefine container, 
-     only the last statement in the container would be retained.  
-     [Jeff Trawick]
-
-Changes with Apache 2.0a5
-
-  *) Perchild is serving pages after passing them to different child
-     processes.  There are still a lot of bugs, but this does work.  I
-     have made requests against the same installation of Apache, and had
-     different servers use different user IDs to serve the responses.
-     This change moves to using socketpair instead of an AF_UNIX socket.
-     [Ryan Bloom]
-
-  *) Perchild MPM still doesn't work perfectly, but it is serving pages.
-     It can't seem to pass between child processes yet, but I think we
-     are closer now than before.  This moves us back to using Unix
-     Domain Sockets.  [Ryan Bloom]
-
-  *) libapr functions and types renamed with apr_ prefix.
-     #include "apr_compat.h" for 1.3.x backwards compat
-     [Perl]
-
-  *) Fix problems with APR sockaddr handling on Win32.  It didn't always
-     return the right information on the local socket address.
-     [Gregory Nicholls <gnicholls@level8.com>]
-
-  *) ap_recv() on Win32: Set bytes-read to 0 on error.  
-     [Gregory Nicholls <gnicholls@level8.com>]
-
-  *) Add an option to not detach from the controlling terminal without
-     going into single process mode.  This allows for much easier
-     debugging of the process startup code. [Ryan Bloom]
-
-  *) ab: don't use perror() to report the failure of an APR function.
-     [Jeff Trawick]
-
-  *) Make dexter, mpmt_pthread, and perchild MPMs not destroy the
-     scoreboard on graceful restarts.
-     [Ryan Bloom]
-
-  *) Fix segfault/SIGSEGV when running gzip from mod_mime_magic.c.
-     An invalid ap_proc_t was passed to ap_create_process().
-     [Jeff Trawick]
-
-  *) Allow modules to register filters.  Those filters are still
-     never called, but this is a step in the right direction.
-     [Ryan Bloom and Greg Stein]
-
-  *) Register the mod_cgid daemon process for cleanup so that it is
-     killed at termination if it does not die when the parent gets
-     SIGTERM.  This change is to fix occasional problems where the
-     process stays around.  Bugs in similar logic in mod_rewrite and
-     mod_include were also fixed.  [Jeff Trawick]
-
-  *) Fix a bug in the time handling.  Basically, we were imploding a time
-     in ap_parseHTTPdate, but it had bogus data in the exploded time format.
-     Namely, tm_usec and tm_gmtoff were not filled out.  ap_implode_time
-     uses those two fields to adjust the time value.  Because of the HTTP
-     spec, both of those values can be zero'ed out safely.  This fixes
-     the bug correctly.  [Ryan Bloom]
-
-  *) Fix a couple of place in the Windows code where the wrong error
-     code was being returned. [Gregory Nicholls <gnicholls@level8.com>]
-
-  *) Fix POOL_DEBUG (at least for prefork mpm). [Dean Gaudet]
-
-  *) Added the APR_EOL_STR macro for platform dependent differences in 
-     logfiles and other raw text (such as all APR files).  Fixes logfiles
-     not terminated with cr/lf sequences in Win32.  [William Rowe]
-
-  *) Move all strings functions in APR to src/lib/apr/strings and create
-     apr_strings.h for the prototypes. [Ryan Bloom]
-
-  *) APR lock fixes: when using SysV sems, flock(), or fcntl(), be sure
-     to repeat the syscall until we stop getting EINTR.  I noticed a
-     related problem at termination (SIGTERM) on FreeBSD when using
-     fcntl().  Apache 1.3 had these new loops too.  Also, make the flock() 
-     implementation work properly with child init.  Previously, ap_lock()
-     was essentially a no-op because all children were using different
-     locks and thus nobody ever blocked.  [Jeff Trawick]
-
-  *) The htdocs/ tree has been moved out of the CVS source tree into
-     a separate area for easier development.  This has NO EFFECT on
-     end-users or Apache installations.  [Ken Coar]
-
-  *) Integrate the mod_dav module for WebDAV protocol handling. This
-     adds the dav and dav_fs modules, the SDBM library, and additional
-     XML handling utilities. [Greg Stein]
-
-  *) Clean out obsolete names (from httpd.h) for the HTTP Status Codes
-     [Greg Stein]
-
-  *) Update the lib/expat-lite/ library (bring forward changes from
-     the Apache 1.3 repository). [Greg Stein]
-
-  *) If sizeof(long long) == sizeof(long), then prefer long in APR
-     configure.in.  [Dave Hill <ddhill@zk3.dec.com>]
-
-  *) Add ap_sendfile for Tru64 Unix.  Also, add an error message for
-     machines where sendfile is detected, but nobody has written ap_sendfile.
-     [Dave Hill <ddhill@zk3.dec.com>]
-
-  *) Compile fixes in mod_mmap_static.  [Victor J. Orlikowski]
-
-  *) ab would start up more connections than needed, then quit when the
-     desired number were finished. Also fixed a logic error involving
-     ab keepalives.  [Victor J. Orlikowski]
-
-  *) WinNT: Implement non-blocking pipes with timeouts to communicate
-     with CGIs. Apache 2.0a4 had non-blocking pipes but without 
-     timeouts (i.e, if a timeout was specified, the pipe reverted to
-     a full blocking pipe). Now the behaviour is more in line with
-     Unix non-blocking pipes.
-     [Bill Stoddard]
-
-  *) WinNT: Implement accept socket reuse. Using mod_file_cache to
-     cache open file handles along with accept socket reuse enables
-     Apache 2.0 to serve non-keepalive requests for static files at
-     3x the rate of Apache 1.3.(e.g, Apache 1.3 will serve 400 rps
-     and Apache 2.0 will serve almost 1200 rps on my system).
-     [Bill Stoddard]
-
-  *) Merge mod_mmap_static function into mod_file_cache. mod_file_cache
-     supports two config directives, mmapfile (same behavious as
-     mod_mmap_static) and cachefile. Use the cachefile directive
-     to cache open file handles. This directive only works on systems
-     that have implemented the ap_sendfile API. cachefile works today
-     on Windows NT, but has not been tested on any flavors of Unix.
-     [Bill Stoddard]
-
-  *) Cleanup the configuration.  With the last few changes the
-     configuration process automatically:
-         inherits information about how to build from APR.  Allowing
-         APR to inform Apache that it should or should not use -ldl
-        
-         Detects which mod_cgi should be used mod_cgi or mod_cgid,
-         based on the threading model
-
-         Apache calls APR's configure process before finishing it's
-         configuration processing, allowing for more information flow
-         between the two.
-     [Ryan Bloom]
-         
-
-  *) Change Unix and Win32 ap_setsockopt() so that APR_SO_NONBLOCK
-     with non-zero argument makes the socket non-blocking.  BeOS and
-     OS/2 already worked this way.  [Jeff Trawick]
-
-  *) ap_close() now calls ap_flush() for buffered files, so write
-     operations work a whole lot better on buffered files.
-     [Jeff Trawick]
-
-  *) Fix error messages issued from MPMs which explain where to change
-     compiled-in limits (e.g., ThreadsPerChild, MaxClients, StartTreads).
-     [Greg Ames]
-
-  *) ap_create_pipe() now leaves pipes in blocking state.  (This helps 
-     reduce the number of syscalls on Unix.)  ap_set_pipe_timeout() is
-     now the way that the blocking state of a pipe is manipulated.
-     ap_block_pipe() is gone.  [Jeff Trawick]
-
-  *) Correct the problem where the only local host name that the IP stack
-     can discover are 'undotted' private names.  If no fully qualified
-     domain name can be identified, the default ServerName will be set to
-     the machine's IP address string. A warning is always provided if the
-     ServerName not specified, but assumed.  Solves PR6215 [William Rowe]
-
-  *) Repair problems with config file processing which caused segfault
-     at init when virtual hosts were defined and which caused ServerName to
-     be ignored when there was no valid DNS setup.  [Jeff Trawick]
-
-  *) Removed pointless ap_is_aborted macro function. [Roy Fielding]
-
-  *) Add ap_sendfile implementation for AIX
-     [Victor J. Orlikowski]
-
-  *) Repair C++ compatibility in ap_config.h, apr_file_io.h, 
-     apr_network_io.h, and apr_thread_proc.h.  
-     [Tyler J. Brooks <tylerjbrooks@home.com>, Jeff Trawick]
-
-  *) Bring the allocation and pool debugging code back into a working
-     state.  This will need to be tested as so far it's only been used on
-     BeOS. [David Reid]
-
-  *) Change configuration command setup to be properly typesafe when in
-     maintainer mode. Note that this requires a compiler that can initialise
-     unions. [Ben Laurie]
-
-  *) Turn on buffering for config file reads.  Part of this was to
-     repair buffered I/O support in Unix and implement buffered
-     ap_fgets() for all platforms.  [Brian Havard, Jeff Trawick]
-
-  *) Win32: Fix problem where UTC offset was not being set correctly
-     in the access log. Problem reported on news group by Jerry Baker.
-     [Bill Stoddard]
-
-  *) Fix segfault when reporting this type of syntax error:
-     "</container> without matching <container> section", where
-     container is VirtualHost or Directory or whatever.
-     [Jeff Trawick]
-
-  *) Prevent the source code for CGIs from being revealed when using
-     mod_vhost_alias and the CGI directory is under the document root
-     and a user makes a request like http://www.example.com//cgi-bin/cgi
-     as reported in <news:960999105.344321@ernani.logica.co.uk>
-     [Tony Finch]
-
-  *) Add support for the new Beos NetwOrking Environment (BONE)
-     [David Reid]
-
-  *) xlate: ap_xlate_conv_buffer() now tells the caller when the
-     final input char is incomplete; ap_bwrite_xlate() now handles
-     incomplete final input chars.  [Jeff Trawick]
-
-  *) Yet another update to saferead/halfduplex stuff -- need to ensure
-     that a bhalfduplex call occurs before logging or else DNS and
-     such can delay the last packet of the response.  [Dean Gaudet]
-
-  *) Some syscall reduction in APR on unix -- don't seek when setting
-     up an mmap; and don't fcntl() more than once per socket.
-     [Dean Gaudet]
-
-  *) When mod_cgid is started as root, the cgi daemon now switches 
-     to the configured User/Group (like other httpd processes) 
-     instead of continuing as root.  [Jeff Trawick]
-
-  *) The prefork MPM now uses an APR lock for the accept() mutex.
-     It has not been getting a lock at all recently.  httpd -V now 
-     displays APR's selection of the lock mechanism instead of the 
-     symbols previously respected by prefork.  [Jeff Trawick]
-
-  *) Change the mmap() feature test to check only for existence.
-     The previous check required features not used by Apache.
-     [Greg Ames]
-
-  *) Fix a couple of bugs in mod_cgid:  The cgi arguments were
-     sometimes mangled.  The len parm to accept() was not 
-     initialized, leading sometimes to an endless loop of failed
-     accept() calls on OS/390 and anywhere else that failed the call
-     if the len was negative.  Use <sys/un.h> for struct sockaddr_un
-     instead of declaring it ourselves to fix a compilation problem
-     on Solaris.  [Jeff Trawick]
-
-  *) Add Resource limiting code back into Apache 2.0. [Ryan Bloom]
-
-  *) Fix zombie process problem with mod_cgi.  [Jeff Trawick]
-
-  *) Port mod_mmap_static to 2.0.  Make it go faster.  [Greg Ames]
-
-  *) Fix storage overlay when loading dsos.  Symptom: Apache dies at
-     initialization if ALLOC_DEBUG is defined; no known symptom 
-     otherwise.  [Jeff Trawick]
-
-  *) Fix typo in configure script when checking for mod_so.  bash
-     doesn't seem to have a problem but /bin/sh on Solaris does.
-     Symptom: "./configure: test: unknown operator =="
-     [Jeff Trawick]
-   
-  *) Rebind the Win32 NT and 9x services control into the MPM.  
-     All console, WinNT SCM and Win9x pseudo-service control code is
-     now wrapped within the WinNT MPM.
-     [William Rowe]
-
-  *) Make a copy of getenv("PATH") before storing for later use.  Some
-     getenv() implementations use the same storage for successive calls.
-     CGIs on OS/390 had a bad PATH due to this.  [Jeff Trawick]
-
-  *) Server Tokens work in 2.0 again.  This also propogates the change
-     to allow just the product name in the server string using
-     PRODUCT_ONLY.
-     [Ryan Bloom]
-
-Changes with Apache 2.0a4
-
-  *) EBCDIC: Rearrange calls to ap_checkconv() so that most handlers
-     won't need to call it.  [Greg Ames, Jeff Trawick]
-
-  *) Move pre_config hook call to between configuration read and config
-     tree walk.  This allows all modules to implement pre_config hooks
-     and know that they will be called at an appropriate time.
-     [Ryan Bloom] 
-
-  *) mod_cgi, mod_cgid: Make ScriptLog directive work again.  
-     [Jeff Trawick]
-
-  *) Add pre-config hooks back to all modules.
-     [Ryan Bloom]
-
-  *) Fix a SIGSEGV in ap_md5digest(), which is used when you have
-     ContentDigest enabled and we can't/don't mmap the file. 
-     [Jeff Trawick]
-
-  *) We now report the correct line number for syntax errors in config
-     files.  [Ryan Bloom, Greg Stein, Jeff Trawick]
-
-  *) Brought mod_auth_digest up to synch with 1.3, fixed ap_time_t-
-     related bugs, and changed shmem/locking to use apr API. Shared-mem
-     is currently disabled, however, because of problems with graceful
-     restarts. [Ronald Tschalär]
-
-  *) Fix corruption of IFS variable in --with-module= handling.  
-     Depending on the user's shell or customization thereof, there 
-     would be errors generating ap_config_auto.h later in the configure
-     procedure.  [Jeff Trawick]
-
-  *) mod_cgi: Restore logging of stderr from child process when ScriptLog 
-     isn't used (as in 1.3), except that on Unix it is now logged via 
-     ap_log_rerror() instead of by the child having STDERR_FILENO refer
-     to the error log.  [Greg Ames, Jeff Trawick]
-
-  *) Add '-D' argument processing for run time configuration defines.
-     [William Rowe]
-
-  *) Organize http_main.c as independent code, such that no code or
-     global data is exported from it.  WIN32 will dynamically link it
-     to the server core, so this will prevent mutual dependency.
-     [William Rowe]
-
-  *) Add separate dynamic linkage tags APR_EXPORT(), APR_EXPORT_NONSTD()
-     and APR_VAR_EXPORT to correctly resolve apr functions and globals.
-     [William Rowe]
-
-  *) Add Win9x service execution and Ctrl+C/Ctrl+Break/Shutdown handlers.
-     [William Rowe, Jan Just Keijser <KEIJSERJJ@logica.com>]
-
-  *) Add mod_charset_lite for configuring character set translation.
-     [Jeff Trawick]
-
-  *) Add '-n' option to htpasswd to make it print its user:pw record
-     on stdout rather than having to frob a text file.  [Ken Coar]
-
-  *) Fix saferead.  Basically, we flush the output buffer if a read on the
-     input will block.
-     [Ryan Bloom]
- 
-  *) APR: Add ap_xlate_get_sb() so that an app can find out whether or not
-     a conversion is single-byte only. [Jeff Trawick]
-
-  *) BEOS: ap_shutdown should return APR_SUCCESS or errno. Note that
-     the BeOS 5.0 documentation says that shutdown doesn't work yet.
-     [Roy Fielding]
-
-  *) Fix some minor errors where pid was being manipulated as an int
-     instead of the portable pid_t.  [Roy Fielding]
-
-  *) Fix some error log prints that were printing the pointer to a
-     structure rather than the pid within the structure.
-     [Jeff Trawick, Roy Fielding]
-
-  *) ab: Fix a command-line processing bug; track bad headers in 
-     err_response; support reading headers up to 2K. 
-     [Ask Bjoern Hansen <ask@valueclick.com>]
-
-  *) Fix ap_resolve_env() so that it handles new function added in a prior
-     alpha (see "Added the capability to do ${ENVVAR} constructs in the
-     config file.") as well as the constructs used by mod_rewrite.
-     [Paul Reder <rederpj@raleigh.ibm.com>]
-
-  *) Apache 2.0 builds and runs on OS/390. [Jeff Trawick, Greg Ames]
-
-  *) Change the EBCDIC support in functions for MD5, SHA1, and base 64 to use
-     APR to perform translation, instead of accessing the hard-coded tables
-     in 1.3's ebcdic.c. [Jeff Trawick]
-
-  *) Fix some bugs (mostly lost 1.3 code) in ab's command-line processing. 
-     [Jeff Trawick]
-
-  *) Add the ability to hook into the config file reading phase.  Basically
-     if a directive is specified EXEC_ON_READ, then when that directive is
-     read from the config file, the assocaited function is executed.  This
-     should only be used for those directives that must muck with HOW the
-     server INTERPRETS the config.  This should not be used for directives
-     that re-order or replace items in the config tree.  Those changes should
-     be made in the pre-config step.
-     [Ryan Bloom]
-
-  *) Add mod_example to the build system.
-     [Tony Finch]
-
-  *) APR: Add ap_xlate_conv_byte() to convert one char between single-
-     byte character sets. [Jeff Trawick]
-
-  *) Pick up various EBCDIC fixes from 1.3 (from Martin
-     Kraemer and Oliver Reh originally according to the change log).
-     [Jeff Trawick]
-
-  *) Fix a couple of problems in RFC1413 support (controlled by the
-     IdentityCheck directive).  Apache did not build the request string
-     properly and more importantly Apache would loop forever if the 
-     would-be ident server dropped the connection before sending a
-     properly terminated response. [Jeff Trawick]
-
-  *) apxs works in 2.0.
-     [Ryan Bloom]
-
-  *) Reliable piped logs work in 2.0.
-     [Ryan Bloom]
-
-  *) Introduce a hash table implementation into APR to be used for
-     replacing tables and other random data structures in Apache.
-     [Tony Finch]
-
-  *) Add some more error reporting to htpasswd in the case of problems
-     generating or accessing the temporary file.  Also, pass in a
-     buffer if the implementation knows how to use it (i.e., if L_tmpnam
-     is defined).  [Ken Coar]
-
-  *) Configure creates config.nice now containing your configure
-     options. Syntax: ./config.nice [--more-options]
-     [Sascha Schumann]
-
-  *) Fix various return code problems in APR on Win32.  For most of
-     these, APR was returning APR_EEXIST instead of GetLastError()/
-     WSAGetLastError().  [Jeff Trawick]
-
-  *) Make piped logs work again in version 2.0
-     [Ryan Bloom]
-
-  *) Add VPATH support to UNIX build system of Apache and APR.
-     [Sascha Schumann]
-
-  *) Fix ap_tokenize_to_argv to respect the const arguments that are
-     passed to it.
-     [Ryan Bloom]
-
-  *) Fix mm's memcpy/memset macros, pointer arithmetic was broken.
-     Patch submitted to author.
-     [Sascha Schumann]
-
-  *) Fix mm configuration on Solaris 8 x86 and OS/390.  Don't require
-     /sbin in PATH on FreeBSD (all submitted to rse previously) 
-     [Jeff Trawick]
-
-  *) Fix building Pthread-based MPMs on OpenBSD
-     [Sascha Schumann] PR#26
-
-  *) Fix ap_readdir() problem on systems where d_name[] field in
-     struct dirent is declared with only one byte.  (This problem only 
-     affected multithreaded builds.)  This caused a segfault during
-     pool cleanup with mod_autoindex on Solaris (Solaris 8 x86, at 
-     least). [Jeff Trawick]
-
-  *) Fix some make-portability problems on at least Tru64, Irix
-     and UnixWare.
-     [Sascha Schumann] PR#18, PR#39
-
-  *) Add ap_sigwait() to support old-style sigwait() on systems
-     like OS/390 and UnixWare.
-     [Sascha Schumann] 
-
-  *) Add POSIX-thread flags for more platforms.
-     [Sascha Schumann]
-
-  *) Fix some minor bugs in ap_strerror().  Teach ap_strerror()
-     (on Unix, at least) to handle resolver errors.  Fix a bug in
-     the definition of APR_ENOMEM so that ap_strerror() can spit
-     out the correct error message for it.
-     [Jeff Trawick]
-
-Changes with Apache 2.0a3
-
-  *) mod_so reports ap_os_dso_error() if ap_dso_load() fails
-     [Doug MacEachern]
-
-  *) API: *HOOK* macros now have an AP_ prefix
-     [Doug MacEachern]
-
-  *) Win32: Eliminate redundant calls to initialize winsock.
-     [Tim Costello <timcostello@ozemail.com.au>]
-
-  *) Fix bugs initializing ungetchar for pipes. 
-     [Chia-liang Kao <clkao@CirX.ORG>]
-
-  *) The ab program in the src/support directory is now portable using
-     APR.
-     [Ryan Bloom]
-
-  *) Support directory is being compiled when the server is built
-     [Ryan Bloom]
-
-  *) The configure option --with-program-name has been added to allow
-     developers to rename the executable at configure time.  This also
-     changes the name of the config files to match the executable's name.
-     [Ryan Bloom]
-
-  *) mod_autoindex: Add `IndexOptions +VersionSort', to nicely sort filenames
-     containing version numbers. [Martin Pool]
-
-  *) ap_open(..,APR_OS_DEFAULT,..) uses perms 0666 instead of 0777 on
-     Unix; access_log and error_log now created with these perms; non-
-     Unix is unaffected [Jeff Trawick]
-     
-  *) Finished move of ap_md5 routines to apr_md5.  Removed ap_md5.h.
-     Replaced more magic numbers with MD5_DIGESTSIZE.
-     [William Rowe, Roy Fielding]
-
-  *) Win32: Get mod_auth_digest compiling and added to the Windows
-     build environment. Not tested and I'd be suprised if it 
-     actually works. [Bill Stoddard]
-
-  *) Revamp the Win32 make environment. Makefiles have been removed and
-     Apache.dsw created to bring together all the pieces. Create new file
-     os/win32/BaseAddr.ref to define module base addresses (to prevent
-     dll relocation at start-up).
-     [William Rowe, Greg Marr, Tim Costello, Bill Stoddard]
-
-  *) [EBCDIC] Port Paul Gilmartin's CRLF patch from 1.3.  This replaces most
-     of the \015, \012, and \015\012 constants with macros.
-     [Greg Ames <gregames@us.ibm.com>]
-     
-  *) Add ap_xlate_open() et al for translation of text between different 
-     character sets.  The initial implementation requires iconv().
-     [Jeff Trawick]
-
-  *) More FAQs and answers from comp.infosystems.www.servers.unix.
-     [Joshua Slive <slive@finance.commerce.ubc.ca>]
-
-  *) CGI output is being timed out now.
-     [Ryan Bloom]
-
-  *) Fix the problem with dieing quietly.  dupfile now takes a pool which
-     is used by the new apr file.  There is no reason to create a new file
-     with the same lifetime as the original file.
-     [Ryan Bloom] 
-
-  *) Win32: Attempt to eliminate dll relocation at start-up by specifying
-     module base addresses. This will help shooting seg faults
-     in the field. [William Rowe <wrowe@lnd.com>]
-
-  *) Update Apache on Windows documentation. Add new document
-     describing how to compile Apache on Windows.
-     [William Rowe <wrowe@lnd.com>]
-
-  *) ap_set_pipe_timeout(), ap_poll(), and APR_SO_TIMEOUT now take 
-     microseconds instead of seconds.  Some storage leaks and other
-     minor bugs in related code were fixed.  [Jeff Trawick]
-
-  *) Win32: First cut at getting mod_isapi working under 2.0
-     [William Rowe <wrowe@lnd.com>]
-
-  *) First stab at getting mod_auth_digest working under 2.0
-     quick change summary:
-     - moved the random byte generation (ap_generate_random_bytes) into APR
-     - now uses ap_time_t
-     - compiles and runs on linux
-     - tested with amaya
-     [Brian Martin <bmartin@penguincomputing.com>]
-
-  *) Win32: Move the space stripping of physical service names
-     fix up from Apache 1.3. #include'ing "ap_mpm.h" fixes up an
-     unresolved symbol. Add dependency checking to the
-     CreateService call to ensure TCPIP and AFP (winsock) is started
-     before Apache.
-     [William Rowe <wrowe@lnd.com>]
-
-  *) Win32: Add code to perform latebinding on functions that may
-     not exist on all levels of Windows where Apache runs. This
-     is needed to allow Apache to start-up on Win95/98. All calls
-     to non portable functions should be protected with
-     ap_oslevel checks to prevent runtime segfaults. 
-     [William Rowe <wrowe@lnd.com>]
-
-  *) Fix fallback default values for SHM_R and SHM_W [Martin Kraemer]
-
-  *) Get lingering_close() working again. [Dean Gaudet, Jeff Trawick]
-
-  *) Win32: Get non-blocking CGI pipe reads working under Windows NT.
-     This addresses PR 1623. Still need to address timing out runaway
-     CGI scripts. [Bill Stoddard]
- 
-  *) Win32: Make ap_stat Windows 95/98 friendly
-     [William Rowe <wrowe@lnd.com>]                                            
-
-  *) Win32: Fix a bug in ap_get_oslevel which causes GetVersionEx() to 
-     always fail. Need to initialise the dwOSVersionInfoSize member of the 
-     OSVERSIONINFO struct before calling GetVersionEx, so GetVersionEx 
-     always fails. 
-
-     The patch also enhances ap_get_oslevel (and the associated enum) to 
-     handle selected service packs for NT4, and adds recognition for 
-     Windows 2000. This is useful, eg. if we can recognise NT4 SP2 then 
-     we can use ReadFileScatter and WriteFileGather in readwrite.c. 
-     [Tim Costello <Tim.Costello@BTFinancialgroup.com>]
-
-  *) Get mod_rewrite building and running, and mod_status building for Win NT
-     [Allan Edwards <ake@raleigh.ibm.com>]
-
-  *) Patch to port mod_auth_db to the 2.0 api and also to support 
-     Berlekey DB 3.0. It works for me with both Berkeley DB 3.0.55 and 
-     2.7.7.  It should work with version 1 as well but I haven't tested it.  
-     [Brian Martin <bmartin@penguincomputing.com>]
-
-  *) Get APR DSO code working under Windows. Includes cross platform
-     fixes to mod_so.c.
-     [Tim.Costello@BTFinancialgroup.com]
-
-  *) Fix some of the Windows APR time functions.
-     [William Rowe]
-
-  *) FAQ changes related to tidying up historical documents on the web site.
-     [Joshua Slive <slive@finance.commerce.ubc.ca>]
-
-  *) Move Windows DSO code into APR.
-     [Bill Stoddard]
-
-  *) Eliminate apr_win.h and apr_winconfig.h (and the ugly #ifdefs they cause).
-     Now, apr.h and apr_config.h are generated from apr.hw and apr_config.hw
-     at build time. At this point, the server will not compile on Windows because
-     of the recent DSO commits. Fixing those next.
-     [Bill Rowe & Bill Stoddard]
-
-  *) Added error checking for file I/O APR routines.
-     [Jon Travis <jtravis@covalent.net>]
-
-  *) APR: Don't use the values of resolver error codes for the 
-     corresponding APR error codes.  On Unix and Win32, return the 
-     proper APR error code after a resolver error. [Jeff Trawick]
-
-Changes with Apache 2.0a2
-
-  *) Renamed the executable back to httpd on all platforms other 
-     than Win32
-     [Ryan Bloom]
-
-  *) Allow BeOS to survive restarts, log properly and a few
-     small things it had problems with due to the way it setup
-     users and groups. [David Reid]
-
-  *) Get mod_rewrite working with APR locks
-     [Paul Reder <rederpj@raleigh.ibm.com>]
-
-  *) Actually remove the sempahore when the lock cleanup routine
-     is called on BeOS. [David Reid]
-
-  *) Clear hook registrations between reads of the config file.
-     When DSOs are unloaded and re-loaded the old hook pointers may
-     no longer be valid. This fix eliminates potential segfaults.
-     [Allan Edwards <ake@raleigh.ibm.com>]
-
-  *) Fix a problem with Sigfunc not being defined or bypassed
-     if sigaction() wasn't found. [Jim Jagielski]
-
-  *) Fix the locking mechanism on BSD variants.  They now use fcntl
-     locks.  This allows the server to start and serve pages.
-     [Ryan Bloom]
-
-  *) First cut at getting the Win32 installer to work
-     [William Rowe <wrowe@lnd.com>]
-
-  *) Get htpasswd compiling under Windows
-     [William Rowe <wrowe@lnd.com>]
-
-  *) Change the log message for a bind() failure to show the
-     interface and port number. [Jeff Trawick]
-
-  *) Import the documentation from 1.3.12 and bring parts of it
-     up-to-date with respect to the changes that have occurred
-     in 2.0.
-     [Tony Finch]
-
-  *) BeOS MPM updated.  CGI bug on BeOS fixed.  IP addresses
-     now logged correctly on BeOS.
-     [David Reid]
-
-  *) Create one makefile for all Win32 distributions (NT/2000/95/98).
-     Makefile.win includes the same user interface as the old 
-     Makefile.nt 
-     [William Rowe <wrowe@lnd.com>, Jeff Trawick <trawick@us.ibm.com>]
-
-  *) Win32 exec now uses COMSPEC environment string for command 
-     shell path resolution.
-     [William Rowe <wrowe@lnd.com>] PR#3715
-
-  *) Win32: ap_connect() was not returning correct error condition
-     PR5866
-     [Allen Prescott <allen@clanprescott.com>]
-
-  *) Win32: ap_open() was broken on Win9x because an NT-specific
-     flag was passed to CreateFile.  ap_puts() added an unnecessary
-     '\n'.
-     [Jeff Trawick <trawick@us.ibm.com>]
-
-  *) Put in Korean and Norwegian index.html pages (2.0 and 1.3)
-     which where donated by Lee Kuk Hyun and Lorant Czaran. 'Fixed'
-     confusing ee/et name and made all extensions language/dialect
-     rather than country reflecting. Changed example files to
-     explicit reflect the ISO charset and added a few common 
-     ones to the example config [dirkx]
-
-  *) Extend external module capability.  To use this, you call
-     configure with --with-module=path/to/mod1,path/to/mod2,etc.
-     [Ryan Bloom]
-
-  *) Backported the various "default charset" fixes from 1.3.12,
-     including the AddDefaultCharset directive. [Jim Jagielski]
-
-  *) Added the capability to do ${ENVVAR} constructs in the
-     config file. E.g. 'ServerAdmin ${POSTMASTER}'. As commited
-     it does this on a line by line basis; i.e. if the envvar
-     expands to something with spaces you have to protect it
-     by adding quotes around it (Unless of course you expect it
-     to contains more than one argument. Alternatively you
-     can compile it on a per token basis; which is what people
-     usually expect by setting RESOLVE_ENV_PER_TOKEN. But this
-     hampers fancier hacks.
-     [Dirk-Willem van Gulik]
-
-  *) Changed the 'ErrorDocument' syntax in that it NO longer
-     supports the asymetric
-
-                ErrorDocument 301 "Some message
-
-     Note the opening " quote, without a closing quote. It now
-     has either the following syntaxes
-
-                ErrorDocument XXX /local/uri
-                ErrorDocument XXX http://valid/url
-                ErrorDocument XXX "Some Message"
-
-     The recognition heuristic is: if it has a space it
-     is a message. If it has no spaces and starts with a /
-     or is a valid URL then treat it that way. Otherwise it
-     is assumed to be a message.
-
-     This breaks backward compatibility but makes live a hell
-     of a lot easier for GUI's and config file parsers.
-     [Dirk-Willem van Gulik]
-
-  *) Changed 'CacheNegotiatedDocs' from its present/not-present
-     syntax into a 'on' or 'off' syntax. As it currently is the
-     only non nesting token which uses NO_ARGS and thus is an
-     absolute pain for any config interface automation. This
-     breaks backward compatibility. [Dirk-Willem van Gulik]
-
-  *) Add ability to add external modules to the build process.  This is
-     done with --with-module=/path/to/module.  Modules can only be added
-     as static modules at this point.
-     [Ryan Bloom]
-
-Changes with Apache 2.0a1
-
-  *) Fix FreeBSD 3.3 core dump.
-     Basically, ap_initialize() needs to get called before 
-     create_process(), since create_process() passes op_on structure
-     to semop() to get a lock, but op_on isn't initialized until 
-     ap_initialize() calls setup_lock().  Here is a slight
-     rearrangement to main() which calls ap_initialize() earlier...
-     [Jeff Trawick <trawick@us.ibm.com>]
-
-  *) Enable Apache to use sendfile/TransmitFile API
-     [Bill Stoddard, David Reid, Paul Reder]
-
-  *) Re-Implement Win32 APR network I/O APIs and most of the file I/O
-     APIs.
-     [Bill Stoddard]
-
-  *) Make file I/O and network I/O writev/sendv APIs consistent.
-     Eliminate use of ap_iovec_t and use Posix struct iovec.
-     Use seperate variable on ap_writev to set the number of iovecs
-     passed in and number of bytes written.
-     [Bill Stoddard]
-
-  *) Adapt file iol to use APR functions. Replaced ap_open_file() 
-     with ap_create_file_iol(). ap_create_file_iol() requires that 
-     the file be opened prior to the call using ap_open().
-     [Bill Stoddard]
-
-  *) Port mod_include and mod_cgi to 2.0
-     [Paul Reder, Bill Stoddard]
-
-  *) ap_send{,v}, ap_recv, ap_sendfile API clarification --
-     bytes_read/bytes_written is always valid (never -1).  Plus
-     some fixes to buff.c to correct problems introduced by the
-     errno => ap_status_t changes a while back.  Plus a fix to
-     chunked encoding introduced right at the beginning of 2.0.
-     [Dean Gaudet]
-
-  *) Revamped UNIX build system to use autoconf and libtool.
-     [Manoj Kasichainula, Sascha Schumann]
-
-  *) port mod_rewrite to 2.0. [Paul J. Reder <rederpj@raleigh.ibm.com>]
-
-  *) More rigorous checking of Host: headers to fix security problems
-     with mass name-based virtual hosting (whether using mod_rewrite
-     or mod_vhost_alias).
-     [Ben Hyde, Tony Finch]
-  
-  *) Add back support for UseCanonicalName in <Directory> containers.
-     [Manoj Kasichainula]
-
-  *) Added APLOG_STARTUP log type.  This allows us to write an error
-     message without any of the date and time information.  As a part
-     of this change, I also removed all of the calls to fprintf(stderr
-     and replaced them with calls to ap_log_error using APLOG_STARTUP
-     writing to stderr is no longer portable, because we don't direct 
-     stderr to the error log on all platforms.
-     [Ryan Bloom] 
- 
-  *) Convert error logging functions to take errno as an argument.
-     This makes our error logs more portable, because some Windows API's 
-     don't set errno.  This change allows us to still output a valid
-     message on all of our platforms.
-     [Ryan Bloom]
-
-  *) mod_mime_magic runs in 2.0-dev now.
-     [Paul Reder <rederpj@raleigh.ibm.com>]
-
-  *) sendfile has been added to APR.
-     [John Zedlewski <zedlwski@Princeton.EDU>]
-
-  *) buff.c has been converted to no longer use errno.
-     [Manoj Kasichainula]
-
-  *) mod_speling runs in 2.0-dev now: a bug in readdir_r handling and
-     interface adaption to APR functions did it. [Martin Kraemer]
-
-  *) Support DSOs properly on 32-bit HP-UX 11.0
-     [Dilip Khandekar <dilip@cup.hp.com>]
-
-  *) Updated MM in APR source tree from version 1.0.8 to 1.0.11
-     [Ralf S. Engelschall]
-
-  *) Cleaned APR build environment integration and bootstrap APR 
-     automatically for developers from src/Configure.
-     [Ralf S. Engelschall]
-
-  *) Fixed building of src/support/htpasswd.c
-     [Ralf S. Engelschall]
-
-  *) When generating the Location: header, mod_speling forgot
-     to escape the spelling-fixed uri. (Forw-Port from 1.3)
-     [Martin Kraemer]
-
-  *) Moved mod_auth_digest.c from experimental to standard. [Roy Fielding]
-
-  *) Change all pools to APR contexts.  This is the first step to
-     incorporating APR into Apache. [Ryan Bloom]
-
-  *) Move "handler not found" warning message to below the check
-     for a wildcard handler.  [Dirk <dirkm@teleport.com>, Roy Fielding]
-     PR#2584, PR#2751, PR#3349, PR#3436, PR#3548, PR#4384, PR#4795, PR#4807
-
-  *) Support line-continuation feature in config.option file and
-     allow the loading of multiple option sections at once via
-     ``--with-option=<section1>,<section2>,...''
-     [Ralf S. Engelschall]
-
-  *) Rebuilt CVS repository with Apache 1.3.9 as basis.  [Roy Fielding]
-
-Changes with Apache MPM
-
-  *) Use asynchronous AcceptEx() and a completion port to accept and
-     dispatch connections to threads in Windows NT/2000. 
-     [Bill Stoddard]
-
-  *) Implement WINNT Win32 MPM from original Win32 code in http_main.c
-     [Bill Stoddard]  
-
-  *) Implement the APACI --with-option facility 
-     (per default used the config.option file).
-     [Ralf S. Engelschall]
-
-  *) MPM BEOS port.  [David Reid <abb37@dial.pipex.com>]
-
-  *) Start to implement module-defined hooks that are a) fast and b) typesafe.
-     Replace pre_connection module call with a register_hook call and
-     implement pre_connection as a hook. The intent is that these hooks will
-     be extended to allow Apache to be multi-protocol, and also to allow the
-     calling order to be specified on a per-hook/per-module basis.
-     [Ben Laurie]
-
-  *) Implement mpm_* methods as "modules". Each method gets its own
-     subdir in src/modules (eg: src/modules/prefork). Selection
-     of method uses Rule MPM_METHOD.  [Jim Jagielski]
-
-  *) Port the hybrid server from the apache-apr repository as
-     mpm_mpmt_pthread.  [Manoj Kasichainula]
-
-  *) os/unix/unixd.[ch]: detach, setuid, setgid, stuff which will be common
-     amongst the unix MPMs.
-
-  *) mpm_prefork: throw away all the alarm/timeout crud; and clean up the
-     signal handling for the new world order.  [Dean Gaudet]
-
-  *) Crude ap_thread_mutex abstraction so that we get the pthread stuff out
-     of alloc.c for now.  [Dean Gaudet]
-
-  *) Handle partial large writes correctly.  [Ben Laurie]
-
-  *) Eliminate conn_rec's pointer to server. All it knows is the base server
-     based on IP/port.  [Ben Laurie]
-
-  *) Port a bunch of modules to the new module structure.
-     ["Michael H. Voase" <mvoase@midcoast.com.au>]
-
-  *) I/O layering and BUFF revamp.  See docs/buff.txt.  [Dean Gaudet]
-
-  *) Basic restructuring to introduce the MPM concept; includes various
-     changes to the module API... better described by
-     docs/initial_blurb.txt.  [Dean Gaudet]
-
-Changes with Apache pthreads
-
-  *) New buff option added: BO_TIMEOUT. It describes the timeout for
-     buff operations (generally over a network).
-     [Dean Gaudet, Ryan Bloom, Manoj Kasichainula]
-
-  *) Created http_accept abstraction. Added 4 new functions (not exported):
-     init_accept(), begin_accepting_requests(), get_request(), 
-     stop_accepting_requests() [Bill Stoddard]
-
-  *) Fix to ap_rprintf call that allows mod_info to work properly.
-     [James Morris <jmorris@intercode.com.au>]
-
-  *) user and ap_auth_type fields were moved from connection_rec to 
-     request_rec. [Ryan Bloom] 
-
-  *) Removed the ap_block_alarms and ap_unblock_alarm calls.  These aren't
-     needed in a threaded server.
-
-  *) Initial pthread implementation from from Dean's apache-nspr code.
-     [Bill Stoddard, Ryan Bloom]
-
-
-Changes with Apache 1.3.9
-
-  *) Remove bogus error message when a redirect doesn't set Location.
-     Instead, use an empty string to avoid coredump if the error message
-     was supposed to include a location.  [Roy Fielding]
-
-  *) Don't allow configure to include mod_auth_digest unless it is
-     explicitly requested, even if the user asked for all modules.
-     [Roy Fielding]
-
-  *) Translate module names to dll names for OS/2 so that they are no more
-     than 8 characters long and have an extension of "dll" instead of "so".
-     [Brian Havard]
-
-  *) Print out pointer to Rule DEV_RANDOM when truerand lib not found.
-     Fix test-compile check to check for randbyte instead of trand32.
-     Use ap_base64encode_binary/decode instead of copy in mod_auth_digest.c
-     and tweak to make Amaya happier.  [Ronald Tschalär]
-
-  *) Ensure that the installed expat include files are world readable,
-     just like the other header files.  [Martin Kraemer]
-
-  *) Fixed generated AddModule adjustments in APACI's `configure' script
-     in order to allow (new) modules like mod_vhost_alias to be handled
-     correctly (which was touched by the adjustments for mod_alias).
-     [Ralf S. Engelschall]
-
-  *) For binary builds, add -R flag to apachectl to work around the lack of
-     an absolute path to the ./libexec directory where the libhttp.ep file
-     is needed for SHARED_CORE architectures.  [Randy Terbush]
-
-  *) WIN32: Create the CGI script process as DETACHED.  This may solve the
-     problem observed by some Win95/98 users where they get CGI script
-     output sent to the console.  [Bill Stoddard]
-
-  *) Fix (re)naming in the uuencode/decode section. The ap/ap_
-     routines are now called ap_base64* and are 'plain' (i.e., no 
-     pool access or anything clever). Inside util.c the routines acting
-     like pstrdup are called ap_pbase64encode() and ap_pbase64decode().
-     The oddly named ap_uuencode(), ap_uudecode() are kept around for
-     now but deprecated.  [dirkx]
-
-  *) Clean up the base64 and SHA1 additions and make sure they are
-     represented in the ApacheCore.def, ApacheCoreOS2.def, and httpd.exp
-     files.  [Roy Fielding]
-
-  *) WIN32: Migrate to InstallShield 5.5 and provide a bit more error
-     checking.  Allow compiling on VS 6.0.  [Randy Terbush]
-
-  *) Fixed assumption of absolute paths in binbuild.sh.  [Tony Finch]
-
-  *) Use TestCompile to search for the truerand library (rather than blindly
-     assuming its existence). If it is not found, complain (but do not
-     exit - yet).  [Martin Kraemer]
-
-  *) We forgot to add the new exported function names to
-     src/support/httpd.exp.  [Bill Stoddard, Randy Terbush]
-
-  *) Add description of -T command-line option to usage().
-     [Ralf S. Engelschall]
-
-  *) For "some" platforms (notably, EBCDIC based ones), libos needs to be
-     searched only AFTER libap has been searched, because libap needs
-     some symbols from libos.  [Martin Kraemer]
-
-  *) Fix conflict with original mod_digest related to the symbol of the
-     module dispatch list (which has to be unique for DSO and follow the
-     usual conventions for the installation procedure).
-     [Ralf S. Engelschall]
-
-  *) Add a dbm-library check for the "usual places" (-ldbm, -lndbm, -ldb)
-     for other platforms as well.  [Martin Kraemer]
-
-  *) Make ap_sha1.c compile for EBCDIC platforms: replace remaining LONG
-     types by AP_LONG and replace reference to renamed variable 'ubuf'
-     by 'buffer'.  [Martin Kraemer]
-
-Changes with Apache 1.3.8 [not released]
-
-  *) Flush the output buffer immediately after sending an error or redirect
-     response, since the result may be needed by the client to abort a
-     long data transfer or restart a series of pipelined requests.
-     [Tom Vaughan <tvaughan@aventail.com>, Roy Fielding]
-
-  *) PORT: Improved compilation and DSO support on Sequent DYNIX/ptx.
-     [Ian Turner <iant@sequent.com>] PR#4735
-
-  *) Local struct mmap in http_core.c conflicted with system structure
-     name on DYNIX -- changed to mmap_rec.  [Roy Fielding] PR#4735
-
-  *) Added updated mod_digest as modules/experimental/mod_auth_digest.
-     [Ronald Tschalär <ronald@innovation.ch>]
-
-  *) Fix a memory leak where the module counts were getting messed
-     up across restarts.  [David Harris <dharris@drh.net>]
-
-  *) CIDR addresses such as a.b.c.d/24 where d != 0 weren't handled
-     properly in mod_access.
-     ["Paul J. Reder" <rederpj@raleigh.ibm.com>] PR#4770
-
-  *) RewriteLock/RewriteMap didn't work properly with virtual hosts.
-     [Dmitry Khrustalev <dima@bog.msu.su>] PR#3874
-
-  *) PORT: Support for compaq/tandem/com.
-     [Michael Ottati <michael.ottati@compaq.com>, dirkx]
-
-  *) Added SHA1 password encryption support to easy migration from 
-     Netscape servers. See support/SHA1 for more information.
-     Caused the separation of ap_md5.c into md5, sha1 and a general
-     ap_checkpass.c with just a validate_passwd routine. Added a
-     couple of flags to support/htpasswd. Some reuse of the to64()
-     function; hence renamed to ap_to64().
-     [Dirk-Willem van Gulik, Clinton Wong <clintdw@netcom.com>]
-
-  *) Change for EBCDIC platforms (TPF and BS2000) to correctly deal
-     with ASCII/EBCDIC conversions in "ident" query.
-     [David McCreedy <McCreedy@us.ibm.com>]
-
-  *) Get rid of redefinition warning on MAC_OS_X_SERVER platform.
-     Change "Power Macintosh" to Power* so if uname prints "Power Book"
-     we're still happy on Rhapsody platforms.  [Wilfredo Sanchez]
-
-  *) Fix SIGSEGV on some systems because the Vary fix below included
-     a call to table_do with a variable argument list that was not
-     NULL terminated.  Replaced with better implementation. [Roy Fielding]
-
-Changes with Apache 1.3.7 [not released]
-
-  *) The "Vary" response header field is now sanitised right before
-     the header is sent back to the client.  Multiple "Vary" fields
-     are combined, and duplicate tokens (e.g., "Vary: host, host" or
-     "Vary: host, negotiate, host, accept-language") are reduced to
-     single instances.  This is a better solution than the force-no-vary
-     one (which is still valid for clients that can't cope with Vary
-     at all).  PR#3118 [Dean Gaudet, Roy Fielding, Ken Coar]
-
-  *) Portability changes for BeOS. [David Reid abb37@dial.pipex.com]
-
-  *) Link DSO's with "gcc -shared" instead of "ld -Bshareable" at 
-     least on Linux and FreeBSD for now.  
-     [Rasmus Lerdorf]
-
-  *) Win32: More apache -k restart work. Restarts are now honored
-     immediately and connections in the listen queue are -not- lost.
-     This is made possible by the use of the WSADuplicateSocket()
-     call.  The listeners are opened in the parent, duplicated, then
-     the duplicates are passed to the child. The original listen sockets 
-     are not closed by the parent across a restart, thus the listen queue 
-     is preserved.
-     [Bill Stoddard <stoddard@raleigh.ibm.com>]
-
-  *) Fix handling of case when a client has sent "Expect: 100-continue"
-     and we are going to respond with an error, but get stuck waiting to
-     discard the body in the pointless hope of preserving the connection.
-     [Roy Fielding, Joe Orton <jeo101@york.ac.uk>] PR#4499, PR#3806
-
-  *) Fix 'configure' to work correctly with SysV-based versions of
-     'tr' (consistent with Configure's use as well). [Jim Jagielski]
-
-  *) apxs: Add "-S var=val" option which allows for override of CFG_*
-     built-in values. Add "-e" option which works like -i but doesn't
-     install the DSO; useful for editing httpd.conf with apxs. Fix
-     editing code so that multiple invocations of apxs -a will not
-     create duplicate LoadModule/AddModule entries; apxs can now be
-     used to re- enable/disable a module.  [Wilfredo Sanchez]
-
-  *) Win32: Update the server to use Winsock 2. Specifically, link with
-     ws2_32.lib rather than wsock32.lib.  This gives us access to 
-     WSADuplcateSocket() in addition to some other enhanced comm APIs.
-     Win 95 users may need to update their TCP/IP stack to pick up
-     Winsock 2. (See http://www.microsoft.com/windows95/downloads/)
-     [Bill Stoddard stoddard@raleigh.ibm.com]
-
-  *) Win32: Redirect CGI script stderr (script debug info) into the 
-     error.log when CGI scripts fail. This makes Apache on Win32 
-     behave more like Unix.      
-     [Bill Stoddard stoddard@raleigh.ibm.com]
-
-  *) Fixed `httpd' usage display: -D was missing.
-     [Ralf S. Engelschall] PR#4614
-
-  *) Fix `make r' test procedure in src/regex/: ap_isprint was not found.
-     [Ralf S. Engelschall] PR#4561, PR#4562
-
-  *) OS/2: Fix problem with accept lock semaphores where server would die with
-     "OS2SEM: Error 105 getting accept lock. Exiting!" 
-     [Brian Havard] PR#4505
-
-  *) Add DSO support for DGUX 4.x using gcc. Tested on x86 platforms.
-     [Randy Terbush <randy@covalent.net>]
- 
-  *) Add the new mass-vhost module (mod_vhost_alias.c) developed and
-     used by Demon Internet, Ltd. [Tony Finch <fanf@demon.net>]
-
-  *) Better GCC detection for DSO flags under Solaris 2 where the `cc' 
-     command potentially _is_ GCC. [Ralf S. Engelschall]
-
-  *) Fix apxs build issues on AIX 
-     [Rasmus Lerdorf <rasmus@raleigh.ibm.com>]
-
-  *) DocumentRoot Checking: Under previous versions, when Apache
-     first started up, it used to do a stat of each DocumentRoot to
-     see if it existed and was a directory. If not, then an error
-     message was printed. THIS HAS BEEN DISABLED. If DocumentRoot
-     does not exist, you will get error messages in error_log. If
-     the '-t' command line option is used (to check the configuration)
-     the check of DocumentRoot IS performed. An additional command
-     line option, '-T', has been added if you want to avoid the
-     DocumentRoot check even when checking the configuration.
-     [Jim Jagielski]
-
-  *) Win32: The query switch "apache -S" didn't exit after showing the
-     vhost settings. That was inconsistent with the other query functions.
-     [Bill Stoddard - Fixed by Martin on Unix in 1.3.4]
-
-  *) Win32: Changed behaviour of apache -k restart. 
-     Previously, the server would drain all connections in the stack's
-     listen queue before honoring the restart. On a busy server, this
-     could take hours.  Now, a restart is honored almost immediately. 
-     All connections in Apache's queues are handled but connections in 
-     the stack's listen queue are discarded. Restart triggered by 
-     MaxRequestPerChild is unchanged.
-     [Bill Stoddard <stoddard@raleigh.ibm.com>]
-
-  *) Win32: Eliminated unnecessary call to wait_for_multiple_objects in
-     the accept loop. Good for a 5% performance boost. Cleaned up 
-     parent/child process management code. 
-     [Bill Stoddard <stoddard@raleigh.ibm.com>]
-
-  *) Added ceiling on file size for memory mapped files.
-     [John Giannandrea <jg@meer.net>] PR#4122
-
-  *) Fix ndbm.h include problems with brain-dead glibc >= 2.1 which 
-     has ndbm.h in a non-standard db1/ subdir. PR#4431, PR#4528
-     [Henri Gomez <gomez@slib.fr>, Ralf S. Engelschall] 
-
-  *) Determine AP_BYTE_ORDER for ap_config_auto.h and already
-     use this at least for Expat. [Ralf S. Engelschall]
-
-  *) Allow .module files to specify libraries with Lib:.
-     [Ben Laurie]
-
-  *) Allow SetEnvIf[NoCase] to test environment variables as well
-     as header fields and request attributes.  [Ken Coar]
-
-  *) Fix mod_autoindex's handling of ScanHTMLTitles when file
-     content-types are "text/html;parameters".  PR#4524  [Ken Coar]
-
-  *) Remove "mxb" support from mod_negotiation -- it was a draft feature
-     never accepted into any standard, and it opens up certain DoS
-     attacks.  [Koen Holtman <Koen.Holtman@cern.ch>]
-
-  *) TestCompile updated. We can now run programs and output the
-     results during the Configure process. [ Jim Jagielski]
-
-  *) The source is now quad (long long) aware as needed. Specifically,
-     the Configure process determines the correct size of off_t and
-     *void. When the OS/platform/compiler supports quads, ap_snprintf()
-     provides for the 'q' format qualifier (if quads are not available,
-     'q' is silently "demoted" to long). [Jim Jagielski]
-
-  *) When the username or password fed to htpasswd is too long, include the
-     size limit in the error message.  Also report illegal characters
-     (currently only ':') in the username.  Add the size restrictions
-     to the man page.  [Ken Coar]
-
-  *) Fixed the configure --without-support option so it doesn't result in
-     an infinite loop.  [Marc Slemko]
-
-  *) Piped error logs could cause a segfault if an error occured
-     during configuration after a restart.
-     [Aidan Cully <aidan@panix.com>] PR#4456
-
-  *) If a "Location" field was stored in r->err_headers_out rather
-     than r->headers_out, redirect processing wouldn't find it and
-     the server would core dump on ap_escape_html(NULL).  Check both
-     tables and raise HTTP_INTERNAL_SERVER_ERROR with a log message
-     if Location isn't set.  [Doug MacEachern, Ken Coar]
-
-  *) Add RULE_EXPAT, the src/lib/ directory structure, and a modified copy
-     of the Expat 1.0.2 distribution. [Greg Stein]
-
-  *) Replace regexec() calls with calls to a new API stub function
-     ap_regexec().  This solves problems with DSO modules which use the regex
-     library. [Jens-Uwe Mager <jum@helios.de>, Ralf S. Engelschall]
-
-  *) Add 'Request_Protocol' special keyword to mod_setenvif so that
-     environment variables can be set according to the protocol version
-     (e.g., HTTP/0.9 or HTTP/1.1) of the request.  [Ken Coar]
-
-  *) Add DSO support for OpenStep (Mach 4.2) platform.
-     [Ralf S. Engelschall, Rex Dieter <rdieter@math.unl.edu>] PR#3997
-
-  *) Fix sed regex for generating ap_config_auto.h in src/Configure.
-     [Jan Gallo <gallo@pvt.sk>] PR#3690, PR#4373
- 
-  *) Switch to /bin/sh5 in APACI on Ultrix and friends to avoid problems with
-     their brain-dead /bin/sh. [Ralf S. Engelschall] PR#4372
-
-  *) Better DSO flags recognition on NetBSD platforms using ELF.
-     [Todd Vierling <tv@pobox.com>] PR#4310
-
-  *) Always log months in english format for %t in mod_log_config.
-     [Petr Lampa <lampa@fee.vutbr.cz>] PR#4366, 679
-
-  *) Support for server-parsed and multiview-determined ReadmeName and
-     HeaderName files in mod_autoindex. Removed the restriction on
-     "/"s in ReadmeName and HeaderName directives since the *sub_req*
-     routines will deal with the access issues. (It's now possible to
-     have {site|group|project|customer|...} wide readmes and headers.)
-     [Raymond S Brand <rsbx@rsbx.net>, Ken Coar] PR#1574, 3026, 3529,
-     3569, 4256
-
-  *) When stat() fails, don't assume anything about the contents of
-     the struct stat.  [Ed Korthof <ed@bitmechanic.com>]
-
-  *) It's OK for a semop to return EINTR, just loop around and try
-     again.  [Dean Gaudet]
-
-  *) Fix configuration engine re-entrant hangups, which solve a
-     handful of problems seen with mod_perl <Perl> configuration sections
-     [Salvador Ortiz Garcia <sog@msg.com.mx>]
-
-  *) Mac OS and Mac OS X Server now use the appropriate custom layout
-     by default when building with APACI; allow for platform-specific
-     variable defaults in configure. [Wilfredo Sanchez]
-
-  *) Do setgid() before initgroups() in http_main; some platforms
-     zap the grouplist when setgid() is called.  This was fixed in
-     suexec earlier, but the main httpd code missed the change.
-     [Rob Saccoccio <robs@InfiniteTechnology.com>]  PR#2579
-
-  *) Add recognition of .tgz as a gzipped tarchive.
-     [Bertrand de Singly <bertrand.de-singly@polytechnique.fr>]  PR#2364
-
-  *) mod_include's fsize/flastmod should allow only relative paths, just
-     like "include file".  [Jaroslav Benkovsky <benkovsk@pha.pvt.cz>]
-
-  *) OS/2: Add support for building loadable modules using DLLs.
-     [Brian Havard]
-
-  *) Add iconsdir, htdocsdir, and cgidir to config.layout.
-     [Wilfredo Sanchez]
-
-  *) Fix minor but annoying bug with the test for Configuration.tmpl
-     being newer than Configuration so that it is less likely to fail
-     when using APACI and shadow sources. [Wilfredo Sanchez]
-
-  *) PORT: Add initial support for Mac OS (versions 10.0 and
-     greater). Use Mac OS X Server layout for now. Clean up dyld code
-     in unix/os.c, and don't install the dyld error handlers, which
-     are no longer needed in Mac OS. [Wilfredo Sanchez]
-
-  *) Rename Rhapsody layout to "Mac OS X Server". Change install
-     locations to appropriate ones for user-built (as opposed to
-     system) installs. [Wilfredo Sanchez]
-
-  *) Modify mod_autoindex's handling of AddDescription so that the
-     behaviour matches the documentation.  [Ken Coar] PR#1898, 3072.
-
-  *) Add functionality to the install-bindist.sh script created by
-     binbuild.sh to use tar when copying distribution files to the
-     serverroot. This allows upgrading an existing installation
-     without nesting the new distribution in the old.
-
-     install-bindist.sh now detects the local perl5 path to install
-     apxs and dbmmanage with proper path to perl interpreter.
-
-     Add an install-binsupport target which copies the source files
-     for apxs and dbmmanage to bindist to allow these scripts to
-     be properly installed relative to the destination serverroot.
-     [Randy Terbush, Covalent Technologies, randy@covalent.net]
-
-  *) Fix intermittent SEGV in ap_proxy_cache_error() in
-     src/modules/proxy_util.c where a NULL filepointer and
-     temporary filename were closed and unlinked.
-     [Graham Leggett <minfrin@sharp.fm>,
-     Tim Costello <tjcostel@socs.uts.edu.au>] PR#3178
-
-  *) Fix inconsistent error messages reported by mod_proxy.
-     [Graham Leggett <minfrin@sharp.fm>]
-
-  *) OS/2: Fix terminating CGIs that aren't compiled by EMX GCC when a 
-     connection is aborted.  [Brian Havard]
-
-  *) Force the LANG envariable to the known state of "C" so that we
-     have assurance about how string manipulators (e.g., tr) will
-     function.  [Ken Coar]  PR#1630
-
-  *) Add a directive to allow customising of the tracking cookie name.
-     [Ken Coar]  PR#2921, 4303
-
-  *) Add "force-no-vary" envariable to allow servers to work around
-     clients that choke on "Vary" fields in the response header.
-     [Ken Coar, Dmitry Khrustalev <dima@zippy.machaon.ru>]  PR#4118
-
-  *) Fixed a bug in mod_dir that causes a child process will infinitely
-     recurse when it attemps to handle a request for a directory wnd the
-     value of the DirectoryIndex directive is a single dot. Also likely
-     to happen for anyother values of DirectoryIndex that will map back
-     to the same directory. The handler now only considers regular files
-     as being index candidates. No PR#s found.
-     [Raymond S Brand <rsbx@rsbx.net>]
-
-  *) Ease configuration debugging by making TestCompile fall back to
-     using "make" if the $MAKE variable is unset [Martin Kraemer]
-
-  *) Fixed the ServerSignature directive to work as documented.
-     [Raymond S Brand <rsbx@rsbx.net>] PR#4248
-
-  *) Add "opt" (SysV-style) layout to config.layout. [Raymond S Brand
-     <rsbx@rsbx.net>]
-
-  *) Add APACI --without-execstrip option which can be used to disable the
-     stripping of executables on installation.  This is very important for DSO
-     and debugging situations. [Ralf S. Engelschall]
-
-  *) Add support for OS/2 (case insenstive filesystem, .exe suffix, etc)
-     to APACI files and related scripts. 
-     [Yitzchak Scott-Thoennes <sthoenna@efn.org>, Ralf S. Engelschall] PR#4269
-
-  *) Add support for standalone mode in TPF
-     [Joe Moenich <moenich@us.ibm.com>]
-
-  *) Fix number of bytes copied by read_connection() in src/support/ab.c
-     [Jim Cox <jc@superlink.net>] PR#4271
-
-  *) Fix special RewriteCond "-s" pattern matching.
-     [Bob Finch <bob@nas.com>]
-
-  *) Fix value quoting in src/Configure script for ap_config_auto.h 
-     [Paul Sutton <paul@awe.com>]
-
-  *) Make sure RewriteLock can be used only in the global context, (i.e.
-     outside of any <VirtualHost> sections) because it's a global facility of
-     the rewrite engine. [Ralf S. Engelschall]
-
-  *) Fix the ownership delegation for proxy directory under `make install'.
-     [Ralf S. Engelschall]
-
-  *) APACI would not correctly build suexec. [Maria Verina
-     <mariav@icgeb.trieste.it>] PR#4260
-
-  *) mod_mime_magic passed only the first 4k of a file to
-     uncompress/gzip, but those tools sometimes do not produce
-     any output unless a sufficient portion of the compressed
-     file is input.  Change to pass the entire file -- but
-     only read 4k of output.
-     [Marcin Cieslak <saper@system.pl>] PR#4097
-
-  *) "IndexOptions None" generated extra spaces at the end of each
-     line.  [inkling@firstnethou.com] PR#3770
-
-  *) The "100 Continue" response wasn't being sent after internal
-     redirects. [Jose KAHAN <kahan@w3.org>] PR#3910, 3806, 3575
-
-  *) When padding the name with spaces for display, mod_autoindex would
-     count &, <, and > in their escaped width, messing up the display.
-     [Dean Gaudet] PR#4075, 3758
-
-  *) PORT: fixed a compilation problem on NEXT.
-     [Jacques Distler <distler@golem.ph.utexas.edu>] PR#4130
-
-  *) r->request_time wasn't being set properly in certain error conditions.
-     [Dean Gaudet] PR#4156
-
-  *) PORT: deal with UTS compiler error in http_protocol.c
-     [Dave Dykstra <dwd@bell-labs.com>] PR#4189
-
-  *) Add ap_vrprintf() function.  [John Tobey <jtobey@banta-im.com>] PR#4246
-
-  *) Fix the mod_mime hash table to work properly with locales other
-     than C.  [Dean Gaudet] PR#3427
-
-  *) Fix a memory leak which is exacerbated by certain configurations.
-     [Dean Gaudet] PR#4225
-
-  *) Prevent clobbering saved IFS values in APACI. [Jim Jagielski]
-
-  *) Fix buffer overflows in ap_uuencode and ap_uudecode pointed out
-     by "Peter 'Luna' Altberg <peter@altberg.nu>" and PR#3422
-     [Peter 'Luna' Altberg <peter@altberg.nu>, Ronald Tschalär]
-
-  *) Make {Set,Unset,Pass}Env per-directory instead of per-server.
-     [Ben Laurie]
-
-  *) Correct an apparent typo: on the Windows and MPE platforms, the
-     htpasswd utility was limiting passwords to only 8 characters.
-     [Ken Coar]
-
-  *) EBCDIC platforms: David submitted patches for two bugs in the
-     MD5 digest port for EBCDIC machines:
-     a) the htdigest utility overwrote the old contents of the digest file
-     b) the Content-MD5 header value (ContentDigest directive) was wrong
-     when the returned file was not converted from EBCDIC, but was a
-     binary (e.g., image file) in the first place.
-     [David McCreedy <mccreedy@us.ibm.com>]
-
-  *) support/htpasswd now permits the password to be specified on the
-     command line with the '-b' switch.  This is useful when passwords
-     need to be maintained by scripts -- particularly in the Win32
-     environment.  [Ken Coar]
-
-  *) Win32: Win32 multiple services patch. Added capability to install and
-     run multiple copies of apache as individual services.
-
-     Example 1:
-     apache -n apache1 -i -f c:/httpd.conf
-        Installs apache as service 'apache1' and associates c:/httpd.conf
-        with that service.
-     net start apache1
-        Starts apache1 service.
-     net stop apache1
-        Stops apache1 service
-
-     Example 2:
-     apache -n apache2 -i
-        Installs apache as service 'apache2'. httpd.conf is located under
-        the default server root (/apache/conf/httpd.conf).
-     net start apache2
-        Starts apache2 service.
-
-     Example 3:
-     apache -n apache3 -i -d c:/program files/apache
-        Install apache as service 'apache3' and sets server root to
-        c:/program files/apache.
-
-     Example 4:
-     apache -n apache2 -k restart
-        Restart apache2 service 
-
-     [Keith Wannamaker, Ken Parzygnat, Bill Stoddard]
-
-  *) Correct the signed/unsigned character handling for the MD5 routines;
-     mismatches were causing compilation problems with gcc -pedantic and
-     in the TPF cross-compilation.  [Ken Coar]
-
-  *) OS/2: Rework CGI handling to use spawn*() instead of fork/exec, achieving
-     a roughly 5 fold speed up. [Brian Havard]
-
-  *) proxy ftp: instead of using the hardwired string "text/plain" as
-     a fallback type for files served by the ftp proxy, use the
-     ap_default_type() function to determine the configured type.
-     This allows for special configurations like
-        <Directory proxy:ftp://some.host>
-        DefaultType gargle/blurb
-        </Directory>
-     Additionally, add the Content-Encoding: header to FTP proxy replies
-     when the encoding is defined (by the AddEncoding directive).
-     Because it was missing, it was almost impossible to browse compressed
-     files using the FTP proxy (works now perfectly in Communicator).
-     The ftp proxy now also returns the Date: and Server: header lines (if not
-     much else... This code is "somewhat" broken) like normal requests do.
-     [Martin Kraemer]
-
-  *) Be more smart in APACI's configure script when determining the UID/GID
-     for User/Group directives and use the determined UID/GID to initialize
-     the permissions on the proxycachedir.
-     [Dirk-Willem van Gulik, Ralf S. Engelschall]
-
-  *) Changed the forking-prior-to-cleanup in the proxy module to first
-     check wether it actually needs to collect garbage. This reduces 
-     the number of fork()s from one/request to just the odd one an hour.
-     [Dirk-Willem van Gulik]
-
-  *) Added proxy, auth and header support to src/support/ab.c. Added a
-     README file to src/support/
-     [Dirk-Willem van Gulik]
-
-  *) Don't hard-code the path to AWK in --shadow bootstrapping Makefile.
-     [Ralf S. Engelschall] PR#4050
-
-  *) Add support for DSO module compilation on BSD/OS 3.x.
-     [Randy Terbush, Covalent Technologies]
-
-  *) Fix sed-substitutions in `make install': path elements like `httpd/conf'
-     (for instance from an APACI configure --sysconfdir=/etc/httpd/conf
-     option) were substituted with $(TARGET).conf, etc. Same for other strings
-     with dots where the dot wasn't matched as plain text. 
-     [Ralf S. Engelschall]
-
-  *) PORT: Add support for FreeBSD 4.x [Ralf S. Engelschall]
-
-  *) Fix verbose output of APACI configure (option -v) 
-     [Martin Kraemer, Ralf S. Engelschall]
-
-Changes with Apache 1.3.6
-
-  *) Removed new PassAllEnv code due to DSO problems. [Lars Eilebrecht]
-
-Changes with Apache 1.3.5 [not released]
-
-  *) M_INVALID needed a value within the scope of METHODS so that unknown
-     methods can be access controlled.  [Roy Fielding] PR#3821
-
-  *) Added PassAllEnv; makes server's entire environment available
-     to CGIs and SSIs executed within directive's scope.  [Ken Coar]
-
-  *) ap_uuencode() always added two trailing '='s and encoding of
-     8 bit characters on a machine with signed char may produced
-     incorrect results. Additionally ap_uuencode() should now
-     work correctly on EBCDIC platforms.
-     [Ronald Tschalär <ronald@innovation.ch>] PR#3411
-
-  *) WIN32: Binary installer now runs the configuration DLL before
-     the reboot prompt (which is only given if MSVCRT.DLL system
-     DLL is new or updated). This should avoid the configuration
-     directory being empty after installation. [Paul Sutton]
-     PR#3767, 3800, 3827, 3850, 3900, 3953, 3988
-
-  *) WIN32: Binary installer now creates Start menu options to start
-     and stop Apache as a console application and to uninstall
-     the Apache service on NT. [Paul Sutton] PR#3741
-
-  *) WIN32: Apache.exe now contains an icon. [Paul Sutton]
-
-  *) PORT: Switch back to using fcntl() locking on Linux -- instabilities
-     have been reported with flock() locking (probably related to kernel
-     version).  [Dean Gaudet] PR#2723, 3531
-
-  *) Using APACI, the main config file (usually httpd.conf) was
-     not being adjusted as $(TARGET).conf. [Wilfredo Sanchez
-     <wsanchez@apple.com>]
-
-  *) PORT: AIX does not require the SHARED_CODE "hack"
-     [Ryan Bloom <rbb@raleigh.ibm.com>]
-
-  *) Set-Cookie headers were being doubled up for some CGIs by the O(n^2)
-     avoidance code added in 1.3.3.
-     [Dean Gaudet, Jeff Lewis <lewis@stanford.edu>] PR#3872
-
-  *) ap_isxdigit was somehow neglected when adding the ap_isfoo() macros
-     for 8-bit safeness.  [Dean Gaudet]
-
-  *) PORT: Use -fPIC instead of -fpic on Solaris and SunOS for compiling DSOs
-     because SPARCs have a small machine-specific maximum size for the Global
-     Offset Table which is often exceeded when compiling one of the larger
-     third-party modules with Apache. [Peter Urban <Peter.Urban@epfl.ch>] PR#3977
-
-  *) Move the directive `ExtendedStatus' in httpd.conf-dist-win _after_ the
-     DSO/DLL section because it's a directive from mod_status and isn't
-     available before the DLL of mod_status is loaded.
-     [Martin POESCHL <mpoeschl@gmx.net>] PR#3936
-
-  *) SECURITY: Fix a bug in the calculation of the buffer size for the line 
-     continuation facility in Apache's configuration files which could 
-     lead to a buffer overflow situation.
-     [Thomas Devanneaux <Thomas.Devanneaux@enst.fr>] PR#3617
-
-  *) Make documentation and error messages of APACI's --activate-module=FILE 
-     option more clear. [Jan Wolter <janc@wwnet.net>] PR#3995
-
-  *) Fix the gcc version check (for enabling the `inline' facility) to 
-     really support all future gcc versions >= 2.7 until we know more.
-     [John Tobey <jtobey@banta-im.com>] PR#3983
-
-  *) Let APACI's configure script correctly complain for unknown --enable-XXX
-     and --disable-XXX options. [Ralf S. Engelschall] PR#3958
-
-  *) Link the shared core bootstrap program (``Rule SHARED_CORE=yes'') also
-     against libap.a and use its ap_snprintf() instead of sprintf() to avoid
-     possible buffer overflows. [Ralf S. Engelschall]
-
-  *) Remove no longer used non-API function ap_single_module_init().
-     [Ralf S. Engelschall]
-
-  *) Add Apple's Mac OS X Server Layout "Rhapsody" to config.layout.
-     [Wilfredo Sanchez]
-
-  *) Add cgidir, htdocsdir, iconsdir variables to Makefile.tmpl in order
-     to make platform installations easier.  [Wilfredo Sanchez]
-
-  *) In configure, do not append the target name to the directory path if
-     the path already contains "apache".  [Ralf S. Engelschall]
-
-  *) SIGPIPE is now ignored by the server core.  The request write routines
-     (ap_rputc, ap_rputs, ap_rvputs, ap_rwrite, ap_rprintf, ap_rflush) now
-     correctly check for output errors and mark the connection as aborted.
-     Replaced many direct (unchecked) calls to ap_b* routines with the
-     analogous ap_r* calls.  [Roy Fielding]
-
-  *) Enhanced mod_rewrite's mapfile handling: The in-core cache for text and
-     DBM format mapfiles now uses a 4-way hash table with LRU functionality.
-     Furthermore map lookups for non-existent keys are now cached as well.
-     Additionally "txt" maps are now parsed with simple string functions
-     instead of using ap_pregcomp(). As a side effect a bug that prevented
-     the usage of keys containing the "," character was fixed.
-     The changes drastically improve the performance when large rewrite maps
-     are in use.
-     [Michael van Elst <mlelstv@serpens.swb.de>, Lars Eilebrecht] PR#3160
-
-  *) Added ap_sub_req_method_uri() for doing a subrequest with a method
-     other than GET, and const'd the definition of method in request_rec.
-     [Greg Stein]
-
-  *) Use proper pid_t type for saving PIDs in alloc.c.  [John Bley]
-
-  *) Replaced use of WIN32 define with HAVE_DRIVE_LETTERS to indicate
-     when the OS allows a DOS drive letter within pathnames.  [Brian Havard]
-
-  *) Add %V to mod_log_config, this logs the hostname according to the
-     UseCanonicalName setting (this is the pre-1.3.4 behaviour of
-     %v).  Useful for mass vhosting.  [Tony Finch <dot@dotat.at>]
-
-  *) Add support for \n and \t to mod_log_config, can be used to produce
-     more reliable logs with multiline entries.  [Tony Finch <dot@dotat.at>]
-
-  *) Fixed a few compiler nits.  [John Bley <jbb6@acpub.duke.edu>]
-
-  *) Added informative error messages for failed munmap() and fseek() calls
-     in http_core.c. [John Bley, Roy Fielding]
-
-  *) Added some informative error messages for some failed malloc()
-     calls. [John Bley <jbb6@acpub.duke.edu>, Jim Jagielski]
-
-  *) OS/2 ap_os_canonical_filename()'s behaviour is improved: ap_assert()
-     is removed. This allows <Directory proxy:*> directives to work and
-     prevents invalid requests from killing the process.
-     [Brian Havard <brianh@kheldar.apana.org.au>]
-
-  *) Reorganised FAQ document.
-     [Joshua Slive <slive@finance.commerce.ubc.ca>] PR#2497
-
-  *) src/support/: The ApacheBench benchmark program was overhauled by
-     David N. Welton: you can now have it generate an HTML TABLE, presumably
-     for integration into other HTML sources. David updated the ab man page
-     as well and added some missing descriptions. Thanks!
-     [David N. Welton <davidw@prosa.it>]
-
-  *) Win32: The filename validity checker now allows filenames containing
-     characters in the range 0x80 to 0xff (for example accented characters).
-     [Paul Sutton] PR#3890
-
-  *) Added conditional logging based upon environment variables to
-     mod_log_config.  mod_log_referer and mod_log_agent
-     are now deprecated.  [Ken Coar]
-
-  *) Allow apache acting as a proxy server to relay the real
-     reason of a failure to a client rather than the "internal
-     server error" it does currently. The general exposure mechanism
-     can be triggered by any module by setting the "verbose-error-to"
-     note to "*"; this allows more than just proxy errors to be exposed.
-     [Cliff Skolnick, Roy Fielding, Martin Kraemer] Related to PR#3455, 4086
-
-  *) Moved man pages for ab and apachectrl to section 8.
-     [Wilfredo Sanchez, Roy Fielding]
-
-  *) Added -S option to install.sh so that options can be passed to
-     strip on some platforms. [Ralf S. Engelschall, Wilfredo Sanchez]
-
-  *) Tweak modules Makefile generated by Configure so that it handles
-     the test case of no modules being selected. [chaz@reliant.com]
-
-  *) Added a <LimitExcept method ...> sectioning directive that allows
-     the user to assign authentication control to any HTTP method that
-     is *not* given in the argument list; i.e., the logical negation
-     of the <Limit> directive.  This is particularly useful for controlling
-     access on methods unknown to the Apache core, but perhaps known by
-     some module or CGI script. [Roy Fielding, Tony Finch]
-
-  *) Prevent apachectl from complaining if the PIDFILE exists but
-     does not contain a process id, as might occur if the server is
-     being rapidly restarted. [Wilfredo Sanchez]
-
-  *) Win32: Add global symbols missing from ApacheCore.def. [Carl Olsen]
-
-  *) Entity tag comparisons for If-Match and If-None-Match were not being
-     performed correctly -- weak tags might cause false positives.  Also,
-     strong comparison wasn't properly enforced in all cases.
-     [Roy Fielding, Ken Coar, Dean Gaudet] PR#2065, 3657
-
-  *) OS/2: Supply OS/2 error code instead of errno on semaphore errors.
-     [Brian Havard]
-
-  *) Work around a bug in Lynx regarding its sending "Negotiate: trans"
-     even though it doesn't understand TCN.  [Koen Holtman, Roy Fielding]
-
-  *) Added ap_size_list_item(), ap_get_list_item(), and ap_find_list_item()
-     to util.c for parsing an HTTP header field value to extract the next
-     list item, taking into account the possible presence of nested comments,
-     quoted-pairs, and quoted-strings. ap_get_list_item() also removes
-     insignificant whitespace and lowercases non-quoted tokens.
-     [Roy Fielding] PR#2065
-
-  *) proxy: The various calls to ap_proxyerror() can return HTTP/1.1 status
-     code different from 500. This allows the proxy to, e.g., return
-     "403 Forbidden" for ProxyBlock'ed URL's. [Martin Kraemer] Related to PR#3455
-
-  *) Fix ordering of language variants for the case where the traditional
-     negotiation algorithm is being used with multiple language variants
-     and no Accept-Language. [James Treacy <treacy@debian.org>] PR#3299, 3688
-
-  *) Do not round the TCN quality calculation to 5 decimal places,
-     unlike RFC 2296, because the calculation might need 12 decimal places
-     to get the right result.  [Roy Fielding]
-
-  *) Remove unused code to disable transparent negotiation when
-     negotiating on encoding only, as we now handle encoding too
-     (though this is nonstandard for TCN), remove charset=ISO-8859-1
-     fiddle from the fiddle-averse RVSA comparison, and fix bugs in
-     some debugging statements within mod_negotiation. [Koen Holtman]
-
-  *) Fixed a rare memory corruption possibility in mod_dir if the index
-     file is negotiable and no acceptable variant can be found.
-     [Dean Gaudet, Roy Fielding, Martin Kraemer]
-
-  *) Win32: Add new config directive, ScriptInterpreterSource, to enable
-     searching the Win32 registry for script interpreters.
-     [Bill Stoddard]
-
-  *) Win32: The compiled-in default filename for the error log is now
-     error.log, which matches the default in the distributed httpd.conf.
-     [Paul Sutton]
-
-  *) Win32: Any error messages from -i or -u command line options are now
-     displayed on the console output rather than sent to the error log.
-     Also the "Running Apache..." message is not output unless Apache is
-     going to serve requests. [Paul Sutton]
-
-  *) Rework the MD5 authentication scheme to use FreeBSD's algorithm,
-     and use a private significator ('$apr1$') to mark passwords as
-     being smashed with our own algorithm.  Also abstract the password
-     checking into a new ap_validate_password() routine.  [Ken Coar]
-
-  *) Win32: The filename validity checker now allows "COM" but refuses 
-     access to "COM1" through "COM4". This allows filenames such
-     as "com.name" to be served. [Paul Sutton] PR#3769.
-
-  *) BS2000: Adapt to the new ufork() system call interface which will
-     make subtasking easier on the OSD/POSIX mainframe environment.
-     [Martin Kraemer]
-
-  *) Add a compatibility define for escape_uri() -> ap_escape_uri() to
-     ap_compat.h. [David White <david@persimmon.com>] PR#3725
-
-  *) Make NDBM file suffix determination for mod_rewrite more accurate, i.e.
-     use `.db' instead of `.pag' not only for FreeBSD, but also when
-     the NDBM library looks like Berkeley-DB based.
-     [Ralf S. Engelschall] PR#3773
-
-  *) Add ability to handle DES or MD5 authentication passwords.
-     [Ryan Bloom <rbb@Raleigh.IBM.Com>]
-
-  *) Fix O(n^2) memory consumption in mod_speling.  [Dean Gaudet]
-
-  *) SECURITY: Avoid some buffer overflow problems when escaping
-     quoted strings.  (This overflow was on the heap and we believe
-     impossible to exploit.)  [Rick Perry <perry@ece.vill.edu>]
-
-  *) Let src/Configure be aware of CFLAGS options starting with plus
-     signs as it's the case for the HP/UX compiler.
-     [Doug Yatcilla <yatcilda@umdnj.edu>] PR#3681
-
-  *) Remove the hard-wire of TAR=tar (we now check for gtar and gnutar first)
-     and check to see if the tar we wind up with supports '-h'.
-     [Jim Jagielski] PR#3671
-
-  *) A consistent and conservative style for all shell scripts has been
-     implemented. Basically, all shell string tests use the traditional
-     hack of 'if [ "x$var" != "x" ]' or 'if [ "x$var" = "xstring" ]'
-     to protect against bare null variable strings (ie: wrapping both
-     sides with double quotes and prepending 'x'). 'x' was chosen
-     because it's more universal and hopefully easier for old shell
-     prgrammers, as well as being easier to search for in 'vi' (/x\$) :)
-     [Jim Jagielski]
-
-  *) The status module now prints out both the main server generation as
-     well as the generation of each process. Also, the vhost info is
-     printed with '?notable'. [Jim Jagielski]
-
-  *) Move src/main/md5c.c to src/ap/ap_md5c.c; it's httpd-neutral
-     and this makes its functions available to things in src/support.
-     [Ken Coar]
-
-Changes with Apache 1.3.4
-
-  *) Renamed macros status_drops_connection to ap_status_drops_connection
-     and vestigial scan_script_header to ap_scan_script_header_err,
-     mostly for aesthetic reasons. [Roy Fielding]
-
-  *) The query switch "httpd -S" didn't exit after showing the
-     vhost settings. That was inconsistent with the other query functions.
-     [Martin Kraemer]
-
-  *) Moved the MODULE_MAGIC_COOKIE from before the versions and
-     filename to the end of the STANDARD_MODULE_STUFF.  Its
-     presence at the beginning prevented reporting of the filename
-     for modules compiled before 1 January 1999.  [Ken Coar]
-
-  *) SECURITY: ap_os_is_filename_valid() has been added to Win32
-     to detect and prevent access to special DOS device file names.
-     [Paul Sutton, Ken Parzygnat]
-     
-  *) WIN32: Created new makefiles Makefile_win32.txt (normal build)
-     and Makefile_win32_debug.txt (debug build) that work on Win95.
-     Run each of the following from the src directory:
-        nmake /f Makefile_win32.txt           # compiles normal build
-        nmake /f Makefile_win32.txt install   # compiles and installs
-        nmake /f Makefile_win32.txt clean     # removes compiled junk
-        nmake /f Makefile_win32_debug.txt     # compiles debug build
-        nmake /f Makefile_win32_debug.txt install
-        nmake /f Makefile_win32_debug.txt clean
-     [Roy Fielding]
-
-  *) Added binbuild.sh and findprg.sh helpers to make it easier for us
-     to build binary distributions. [Lars Eilebrecht]
-
-  *) IndexOptions SuppressColumnSorting only turned off making
-     the column headers anchors; you could still change the display
-     order by manually adding a '?N=A' or similar query string to the
-     URL.  Now SuppressColumnSorting locks in the sort order so
-     it can't be overridden this way.  [Ken Coar]
-
-  *) Added IndexOrderDefault directive to supply a default sort order
-     for FancyIndexed directory listings.  [Ken Coar] PR#1699
-
-  *) Change the ap_assert macro to a variant that works on all platforms.
-     [Richard Prinz <richard.prinz@cso.net>] PR#2575
-
-  *) Make sure under ELF-based NetBSD (now) and OpenBSD (future) we don't
-     search for an underscore on dlsym() (as it's already the case
-     for FreeBSD 3.0). [Todd Vierling <tv@pobox.com>] PR#2462
-  
-  *) Small fix for mod_env.html: The module was documented as to be _not_
-     compiled into Apache per default, although it _IS_ compiled into 
-     Apache per default. [Sim Harbert <sim@mindspring.com>] PR#3572
-
-  *) Instead of fixing a bug in the generation procedure for config.status (a
-     backslash was missing) we remove the bug together with it's complete
-     context because the special cases of the past can now no longer occur
-     because of the recent magic for the --with-layout default.
-     [Ralf S. Engelschall] PR#3590
- 
-  *) Make top-level Makefile aware of a parallel build procedures (make -j) by
-     making sure the src/support/ tools are _forced_ to be build last (they
-     depend on other libraries).
-     [Markus Theissinger <markus.theissinger@gmx.de>]
-
-  *) Fix installation procedure: Now that os-inline.c is actually used (a
-     recently fixed bug prevented this) we need to also install os-include.c
-     in addition to os.h into the PREFIX/include/ location or building of
-     module DSOs with APXS fails. [Ralf S. Engelschall] PR#3527
-
-  *) Added MODULE_MAGIC_COOKIE as the first field in a module structure to
-     allow us to distinguish between a garbled DSO (or even a file which isn't
-     an Apache module DSO at all) and a DSO which doesn't match the current
-     Apache API. [Ralf S. Engelschall] PR#3152
- 
-  *) Two minor enhancements to mod_rewrite: First RewriteRule now also
-     supports the ``nocase|NC'' flag (as RewriteCond already does for ages) to
-     match case insensitive (this especially avoids nasty patterns like
-     `[tT][eE][sS][tT]'). Second two additional internal map functions
-     `escape' and `unescape' were added which can be used to escape/unescape
-     to/from hex-encodings in URLs parts (this is especially useful in
-     combination with map lookups). 
-     [Magnus Bodin, Ian Kallen, Ralf S. Engelschall]
-
-  *) Renamed the macro escape_uri() to ap_escape_uri() which was
-     forgotten (because it was a macro) in the symbol renaming process.
-     [Ralf S. Engelschall]
-
-  *) Fix some inconsistencies related to the scopes of directives. The only
-     user visible change is that the directives `UseCanonicalName' and
-     `ContentDigest' now use the (more correct) `Options' scope instead of
-     (less correct) `AuthConfig' scope.  [Ralf S. Engelschall]
-
-  *) Using DSO, the Server token was being mangled. Specifically, the
-     module's token was being added first before the Apache token. This
-     has been fixed. [Jim Jagielski]
-
-  *) Major overhaul of mod_negotiation.c, part 2.
-     - properly handle "identity" within Accept-Encoding.
-     - allow encoded variants in RVSA negotiation and let them appear in
-       the Alternates field using the non-standard "encoding" tag-list.
-     - fixed both negotiation algorithms so that an explicitly accepted
-       encoding is preferred over no encoding if "identity" is not
-       included within Accept-Encoding.
-     - added ap_array_pstrcat() to alloc.c for efficient concatenation
-       of large substring sequences.
-     - replaced O(n^2) memory hogs in mod_negotiation with ap_array_pstrcat.
-     [Roy Fielding]
-
-  *) Major overhaul of mod_negotiation.c, part 1.
-     - cleanups to mod_negotiation comments and code structure
-     - made compliant with HTTP/1.1 proposed standard (rfc2068) and added
-       support for everything in the upcoming HTTP/1.1
-       revision (draft-ietf-http-v11-spec-rev-06.txt).
-         - language tag matching also handles tags with more than 2
-           levels like x-y-z
-         - empty Accept, Accept-Language, Accept-Charset headers are
-           processed correctly; previously an empty header would make all
-           values acceptable instead of unacceptable.
-         - allowed for q values in Accept-Encoding
-     - added support for transparent content negotiation (rfc2295 and
-       rfc2296) (though we do not implement all features in these drafts,
-       e.g. no feature negotiation).  Removed old experimental version.
-     - implemented 'structured entity tags' for better cache correctness
-       (structured entity tags ensure that caches which can deal with Vary
-       will (eventually) be updated if the set of variants on the server
-       is changed)
-         - this involved adding a vlist_validator element to request_rec
-         - this involved adding the ap_make_etag() function to the global API
-     - modified guessing of charsets used by Apache negotiation algorithm 
-       to guess 'no charset' if the variant is not a text/* type
-     - added code to sort multiviews variants into a canonical order so that
-       negotiation results are consistent across backup/restores and mirrors
-     - removed possibility of a type map file resolving to another type map
-       file as its best variant
-     [Koen Holtman, Roy Fielding, Lars Eilebrecht] PR#3451, 3299, 1987
-
-  *) RFC2396 allows the syntax http://host:/path (with no port number)
-     but the proxy disallowed it (ap_proxy_canon_netloc()).
-     [David Kristol <dmk@bell-labs.com>] PR#3530
-
-  *) When modules update/modify the file name in the configfile_t structure,
-     syntax errors will report the updated name, not the original one.
-     [Fabien Coelho <coelho@cri.ensmp.fr>] PR#3573
-
-  *) Correct some filename case assumptions from WIN32 to
-     CASE_BLIND_FILESYSTEM.  [Brian Havard <brianh@kheldar.apana.org.au>]
-
-  *) For %v log ServerName regardless of the UseCanonicalName
-     setting (similarly for %p).  [Dean Gaudet]
-
-  *) Configure was initializing the variables $OSDIR, $INCDIR and $SHELL
-     rather late (too late for some invocations of TestCompile).
-     This improves the make environment available to TestCompile and
-     the *.module scripts. [Martin Kraemer]
-
-  *) The hashbang emulation code in ap_execve.c would interpret
-     #!/hashbang/scripts correctly, but failed to fall back to a
-     standard shell for scripts which did NOT start with #!
-     Now SHELL_PATH is started in these cases. [Martin Kraemer]
-
-  *) PORT: Added the Cyberguard V2 port [Richard Stagg <stagg@lentil.org>]
-     PR#3336
-
-  *) Update APXS manual page: some -q option arguments were missing
-     and another was incorrect. [Mark Anderson <mda@discerning.com>] PR#3553
-
-  *) Cleanup the command line options: `-?' was documented to show
-     the usage list but does it with an error because `?' is not a valid
-     command. OTOH a lot of users expect `-h' to print such a usage list and
-     instead are annoyed for ages by our huge unreadable list of directives.
-     So we now changed the command line options this way:
-     1. `-L' => `-R' 
-        Intent: we need `-L' to be free, and `-R' for the DSO run-time path is
-        very similar to the popular linker option.
-     2. `-h' => `-L'
-        Intent: while -l gives the small list of modules, -L now gives the
-        large list of directives implemented by these modules.  This is also
-        consistent with -v (short version info) and -V (large version info).
-     3. `-?' => `-h' 
-        Intent: it's now the expected option ;-)
-     The manual page was adjusted accordingly. 
-     [Ralf S. Engelschall] PR#2714
-
-  *) Fixed problem of fclose() on an unopened file in suexec if LOG_EXEC
-     wasn't defined.  [Rick Franchuk <rickf@transpect.net>]
-
-  *) Removed recently introduced bugs and disfigurements in APACI:
-     o fixed argument line processing: using $args was broken: It was not
-       initialized and using args="$args $apc_option" and even args="$args
-       \"$apc_option\"" fails in the second processing round for any arguments
-       containing whitespaces. The only correct way is to use the construct
-       "$@" (but not possible here) or iterate _both_ times over the implicit
-       argument line (no argument to for-loop) which is what we now use.
-     o make --with-layout=Apache the default without creating
-       redundancy (copying the --with-layout block in the argument parsing
-       loop).  We achieve this by using the "$@" construct together with the
-       `set' command to prepend --with-layout=Apache to the command line in
-       case --with-layout is not used.
-     o fixed auto-suffix handling now that config.layout exists.
-       Paths which are auto-suffixed are marked with a trailing plus sign in
-       config.layout and every path now can be marked this way (not only the
-       four paths for which we do it currently).  Additionally the suffix is
-       no longer a static one. Instead it's now `/<target>' where <target> is
-       the argument of the --target option or per default `httpd'.
-     o allow also tabs (and only spaces) where we match whitespaces
-     o various fixes and cleanups related to used shell coding style
-     o made Jim happy by replacing `Written by' with `Initially written by' ;-)
-     o trimmed output of --help to fit into 80 columns
-     [Ralf S. Engelschall]
-
-  *) Added two new core API functions, ap_single_module_configure() and
-     ap_single_module_init(), which are now used by mod_so to configure a module
-     after loading. [Ralf S. Engelschall]
-
-  *) PORT: Add defines for USE_FLOCK_SERIALIZED_ACCEPT and
-     SINGLE_LISTEN_UNSERIALIZED_ACCEPT to NetBSD/OpenBSD section
-     of ap_config.h to allow serialized accept for multiport listens.
-     [Roy Fielding, Curt Sampson] PR#3120
-
-  *) PORT: Fixed a misplaced #endif for NetBSD/OpenBSD section
-     of ap_config.h that would skip several defines if DEFAULT_GROUP
-     was overridden. [Roy Fielding]
-
-  *) PORT: The I86 version of DGUX has support for strncasecmp and 
-     strcasecmp, so allow it in ap_config.h. [Amiel Lee Yee] PR#3247
-
-  *) Fix ordering of definitions in ap_config.h so that ap_inline is
-     defined before it might be used. [Victor Khimenko]
-
-  *) PORT: Add Dynamic Shared Object (DSO) support for BSDI (v4.0).
-     [Tom Serkowski <tks@bsdi.com>] PR#3453
-
-  *) Make generation of src/Configuration.apaci more robust: It failed to
-     differenciate between modules when one module name was a postfix of
-     another (e.g. cgi vs. fastcgi). We now check for mod_XXX, libXXX and even
-     just XXX (think about totally non-standard names like "apache_ssl", too).
-     [Ralf S. Engelschall] PR#3380
-
-  *) In src/Configure remove the SERVER_SUBVERSION support (already deprecated
-     since 1.3b7) and make whitespace handling more robust (it failed horrible
-     when whitespaces were present in the arguments of -D options).
-     [Ralf S. Engelschall] PR#3240
-
-  *) Add APACI --shadow=DIR variant (in addition to --shadow). This now first
-     creates an external package shadow tree in DIR before the local build
-     shadow tree is generated under DIR. This way one can have the extracted
-     Apache distribution tree read-only on NFS or CDROM and still build Apache
-     from these sources. An automatically triggered VPATH-like mechanism is
-     provided through the TOP variable, too.
-     [Ralf S. Engelschall, Wilfredo Sanchez <wsanchez@apple.com>]
-
-  *) Fix negotiation so that a Vary response header is correctly 
-     generated when, for a particular dimension, variants only vary
-     in having or not having a value for that dimension. [Paul Sutton]
-
-  *) Fix negotiation so that we prefer an encoded variant over an
-     unencoded variant if the user-agent explicitly says it can
-     accept that encoding. Previously we always preferred the unencoded
-     variant.
-     [Paul Ausbeck <paula@alumni.cse.ucsc.edu>, Paul Sutton] PR#3447
- 
-  *) Fix APXS tool: query variables LIBS_SHLIB and TARGET were not recognized
-     and the usage page was inconsistent with the functionality and manpage.
-     [Ralf S. Engelschall]
-
-  *) Allow special options -Wc,xxx and -Wl,xxx on APXS compile/link command.
-     They can occur multiple times and their arguments (`xxx') are passed AS
-     IS to the compiler/linker command.  [Ralf S. Engelschall]
-
-  *) Fixed possible (but harmless in practice) bug in the DBM lookup
-     procedure of mod_rewrite: very long keys were truncated.
-     [Ralf S. Engelschall]
-
-  *) Added a generic --with-layout=[FILE:]ID option. ID here is a layout
-     identifier, currently "Apache" and "GNU" are pre-defined in the file
-     config.layout.  Custom layouts are possible by using FILE:ID as the
-     argument where the layout ID is taken from FILE.
-
-     The config.layout file consists of <Layout ID>..</Layout> sections
-     where inside those sections "path_variable: path_value" pairs can be
-     specified. These lines are converted to path_variable='path_value'.
-
-  *) Add a DefaultLanguage directive so that files missing a language
-     extension (e.g., .fr, .de) can be labelled as being some other
-     default language. DefaultLanguage can appear in <Directory> and 
-     <Files> containers as well as .htaccess files.  [Paul Sutton]
-     PR#1180
-
-  *) Fix TARGET configuration when configuring and installing using
-     APACI configure. TARGET now defines the basename of the configuration
-     file, startup script, manual page, etc. log_error_core() now reports
-     the server binary name given by argv[0]. TARGET can now also be defined
-     with --target=TARGET parameter passed to APACI configure.
-     [Ralf Engelschall, Randy Terbush]
-
-  *) mod_include.c:handle_perl() now properly tests for OPT_INCNOEXEC
-     rather than OPT_INCLUDES [Rainer Schoepf <schoepf@uni-mainz.de>]
-
-  *) ap_md5_binary() was using sprintf() rather than a table lookup
-     to convert binary bytes to hex digits.
-     [Ronald Tschalär <ronald@innovation.ch>] PR#3409
-
-  *) Fix SEGV in TCN negotiation if no variants are acceptable.
-     [Martin Plechsmid <plechsmi@karlin.mff.cuni.cz>] PR#1987
-
-  *) API: ap_exists_config_define() function is now "public" [Doug MacEachern]
-
-  *) Fix documentation of `Action' directive: It can activate a CGI script
-     when either a handler or a MIME content type is triggered by the request.
-     [Andrew Pimlott <pimlott@math.harvard.edu>] PR#3340
-
-  *) Document the `add' command of `dbmmanage' in `dbmmanage.1' manpage.
-     [David MacKenzie <djm@uu.net>] PR#3394
-
-  *) Ignore a "ErrorDocument 401" directive with a full URL and write a
-     notice to the error log. It is not possible to send a 401 response
-     and a redirect at the same time.  [Lars Eilebrecht]
-
-  *) Fallback to native compilers for IRIX-32 platform. It seems that
-     a gcc 2.8.1 compiled apache is logging client addresses with all
-     bits set (255.255.255.255). This is the second such problem caused
-     by gcc 2.8.1 compiler. The first being broken semaphore locking.
-     [Randy Terbush]
-
-  *) Updated mime.types to reflect current Internet media types
-     and include a URL to the registry.
-     [Manoj Kasichainula, Roy Fielding] PR#2380, 2286, 2246
-
-  *) SECURITY: Do a more complete check in mod_include to avoid 
-     an infinite loop of recursive SSI includes.  [Marc Slemko] PR#3323
-
-  *) Add APACI --suexec-docroot and --suexec-logfile options which can be
-     used to set the document root directory (DOC_ROOT) and the suexec
-     logfile (LOG_EXEC), respectively. Additionally the --layout option
-     was changed to show more information about the suEXEC setup.
-     [Lars Eilebrecht] PR#3316, 3357, 3361
-
-  *) Added the last two WebDAV status codes of 424 (Failed Dependency)
-     and 507 (Insufficient Storage) for use by third-party modules.
-     [Roy Fielding]
-
-  *) Enabled all of the WebDAV method names for use by third-party
-     modules, Limit, and Script directives.  That includes PATCH,
-     PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, and UNLOCK.
-     Improved mod_actions.c so that it can use any of the methods
-     defined in httpd.h.  Added ap_method_number_of(method) for
-     getting the internal method number.  [Roy Fielding]
-
-  *) PORT: Add a port to the TPF OS. [Joe Moenich <moenich@us.ibm.com> and
-     others at IBM]
-
-  *) Fix problems with handling of UNC names (e.g., \\host\path)
-     on Win32.  [Ken Parzygnat <kparz@us.ibm.com>]
-
-  *) Rework os_canonical_*() on Win32 so it's simpler, more
-     robust, and works.  [Ken Parzygnat <kparz@us.ibm.com>]
-     PR#2555, 2915, 3064, 3232
-
-  *) Work around incomplete implementation of strftime on Win32.
-     [Manoj Kasichainula, Ken Parzygnat <kparz@us.ibm.com>]
-
-  *) Move a typedef to fix compile problems on Linux with 1.x kernels.
-     [Manoj Kasichainula] PR#3177
-
-  *) PORT: Add a port to the Concurrent PowerMAX OS. [Tom Horsley
-     <Tom.Horsley@mail.ccur.com>]
-
-  *) WIN32: Log more explicit error messages if spawning an interpreted 
-     script failed, including the command line used to attempt to execute 
-     the interpreter and the Win32 error code returned.  [Marc Slemko]
-
-  *) Disable sending of error-notes on a 500 (Internal Server Error) response
-     since it often includes file path info.  Enable sending of error-notes
-     on a 501 (Method Not Implemented).  [Roy Fielding] PR#3173
-
-  *) http_config.c would respond with 501 (Method Not Implemented) if a
-     content type handler was specified but could not be found, which
-     should have been a 500 response.  Likewise, mod_proxy.c would responsd
-     with a 501 if the URI scheme is unrecognized instead of the correct
-     response of 403 (Forbidden).  [Roy Fielding]
-
-  *) SECURITY: Eliminate DoS attack when a bad URI path contains what
-     looks like a printf format escape.  [Marc Slemko, Studenten Net Twente]
-
-  *) Fix in mod_autoindex: for files where the last modified time stamp was
-     unavailable, an empty string was printed which was 2 bytes short.
-     The size and description columns were therefore not aligned correctly.
-     [Martin Kraemer] (no PR#)
-
-  *) Update BS2000 OS code to work with recent versions. Starting with
-     release A17, the child fork() must be replaced by a _rfork().
-     (BS2000 only) [Martin Kraemer]
-
-  *) Add the actual server_rec structure of the specific Vhost to the
-     scoreboard file and avoid a string copy (as well as allow some
-     further future enhancements). [Harrie Hazewinkel
-     <harrie.hazewinkel@jrc.it>]
-
-  *) Add APACI --permute-module=foo:bar option which can be used to
-     on-the-fly/batch permute the order of two modules (mod_foo and mod_bar)
-     in the Configuration[.apaci] file. Two special and important variants are
-     supported for the option argument: first BEGIN:foo which permutes module
-     mod_foo with the begin of the module list, i.e. it `moves' the module to
-     the begin of the list (gives it lowest priority).  And second foo:END
-     which permutes mod_foo with the end of the module list, i.e. it `moves'
-     the module to the end of the list (gives it highest priority). 
-     [Ralf S. Engelschall]
-
-  *) Fix problem with 'apache -k shutdown' and startup event
-     synchronisation (Win32).  [Ken Parzygnat <kparz@raleigh.ibm.com>]
-     PR#3255
-
-  *) The config parser wasn't correctly noticing a missing '>'
-     on container start lines (e.g., it wouldn't spot
-     "<Directory /" as a syntax error).  [Ryan Bloom <rbbloom@us.ibm.com>]
-     PR#3279
-
-  *) Add a 'RemoveHandler' directive which will selectively remove
-     all handler associations for the specified file extensions.
-     [Ryan Bloom <rbbloom@us.ibm.com>] PR#1799.
-
-  *) Properly handle & allow "nul" and ".*/null" in AccessConfig and
-     ResourceConfig directives on Win32.  Also add a note to the effect
-     of 'useless User directive ignored on Win32' to the errorlog if
-     a User directive is encountered on Win32.
-     [Ken Parzygnat <kparz@raleigh.ibm.com>] PR#2078, 2303.
-
-  *) Fix multiple whitespace handling in imagemaps for mod_imap which was
-     broken since Apache 1.3.1 where we took out compressing of multiple
-     spaces in ap_cfg_getline().
-     [Ivan Richwalski <ivan@seppuku.net>] PR#3249
-
-  *) Fix Berkeley-DB/2.x support in mod_auth_db: The data structures were not
-     initialized correctly and the db_open() call used an invalid mode
-     parameter. [Ron Klatchko <ron@ckm.ucsf.edu>] PR#3171
-
-  *) PORT: DSO support for UnixWare 7
-     [Ralf S. Engelschall, Ron Record <rr@sco.com>]
-
-  *) Merge the contents of the {srm,access}.conf-dist* files into the
-     httpd.conf-dist* files.  The srm and access files now contain
-     only comments, and httpd.conf has all the combined contents in
-     a rational order.  [Ken Coar]
-
-  *) PORT: DSO/ELF support for FreeBSD 3.0.
-     [Ralf S. Engelschall, Dirk Froemberg <ibex@physik.TU-Berlin.DE>]
-  
-  *) Add a "default-handler" handler that calls the default_hander()
-     function which is normally called for static content.  This allows
-     you to override a specific handler.  [Marc Slemko]
-
-  *) Further simplify checking for absolute paths by replacing an
-     hard-coded syntax check with a call to a routine we already created to
-     do this.  [Ken Parzygnat <kparz@raleigh.ibm.com>] PR#2976, 3074
-
-  *) Log an error if we encounter a malformed "require" directive 
-     in mod_auth if we know that we know that no other module can
-     deal with it.  [Marc Slemko]
-
-  *) Remove ap_private_extern method of hiding conflicting symbols
-     on the NEXT platform because it is not correct for all versions,
-     and the versions for which it is correct are unknown.
-     [Wilfredo Sanchez <wsanchez@apple.com>]
-
-  *) Fix inheritance of IndexOptions NameWidth and remove unintended
-     restriction on +NameWidth, +IconHeight, and +IconWidth.  [Ken Coar]
-
-  *) Fix per-directory config merging for cases in which a 500 error
-     is encountered in an .htaccess file somewhere down the tree.
-     [Ken Coar]  PR#2409
-
-  *) Minor performance improvement to ap_escape_html(). [Roy Fielding]
-
-  *) Fixed a segmentation violation in mod_proxy when a response is
-     non-cachable.  [Roy Fielding, traced by Doug Bloebaum]. PR#2950, 3056
-
-Changes with Apache 1.3.3
-
-  *) Added a complete implementation of the Expect header field as
-     specified in rev-05 of HTTP/1.1.  Disabled the 100 Continue
-     response when we already know the final status, which is mighty
-     useful for PUT responses that result in 302 or 401. [Roy Fielding]
-
-  *) Remove extra trailing whitespace from the getline results as part
-     of the protocol processing, which is extra nice because it works
-     between continuation lines, is almost no cost in the normal case
-     of no extra whitespace, and saves memory. [Roy Fielding]
-
-  *) Added new HTTP status codes and default response bodies from the
-     revised HTTP/1.1 (307, 416, 417), WebDAV (102, 207, 422, 423), and 
-     HTTP Extension Framework (510) specifications.  Did not add the
-     WebDAV 424 and 425 codes because they are bogus.  We don't use any
-     of these codes yet, but they are now available to 3rd-party modules.
-     [Roy Fielding]
-
-  *) Fix a possible race condition between timed-out requests and the
-     ap_bhalfduplex select that might result in an infinite loop on
-     platforms that do not validate the descriptor. [Roy Fielding]
-
-  *) WIN32: Add "-k shutdown" and "-k restart" options to signal a
-     running Apache server [Paul Sutton]
-
-  *) Fix mod_autoindex bug where directories got a size of "0k" instead
-     of "-".  [Martin Plechsmid <plechsmi@karlin.mff.cuni.cz>, Marc Slemko]
-     PR#3130
-
-  *) PORT: DRS 6000 machine. [Paul Debleecker <pdebleecker@jetair.be>]
-
-  *) Add the server signature text (from the core ServerSignature directive)
-     to the list of envariables available to scripts, SSI, and the like.
-     [Ken Coar]
-
-  *) PORT: Fix sys/resource.h handling for SCO 3.x platform.
-     [M. Laak <maert@proinv.ee>] PR#3108
- 
-  *) Fallback from sysconf-based to plain HZ-based `ticks per second'
-     calculation in mod_status for all systems which don't have POSIX
-     sysconf() (like UTS 2.1) and not only for the NEXT platform.
-     [Dave Dykstra <dwd@bell-labs.com>] PR#3055
-
-  *) Fix `require ...' directive parsing in mod_auth, mod_auth_dbm and
-     mod_auth_db by using ap_getword_white() (which uses ap_isspace()) 
-     instead of ap_getword(..., ' ') (which parses only according to spaces 
-     but not tabs).  [James Morris <jmorris@intercode.com.au>, 
-     Ralf S. Engelschall] PR#3105
-
-  *) Fix the SERVER_NAME variable under sub-request situations (where
-     `UseCanonicalName off' is used) like CGI's called from SSI pages or
-     RewriteCond variables by adopting r->hostname to sub-requests.
-     [James Grinter <jrg@blodwen.demon.co.uk>] PR#3111
-
-  *) Fix stderr redirection under syslog-based error logging situation.
-     [Youichirou Koga <y-koga@jp.FreeBSD.org>] PR#3095
-
-  *) Document `ErrorLog syslog:facility' variant of error logging.
-     [Youichirou Koga <y-koga@jp.FreeBSD.org>] PR#3096
-
-  *) Fix http://localhost/ hints in top-level INSTALL document.
-     [Rob Jenson <robjen@spotch.com>, Ralf S. Engelschall] PR#3088
-
-  *) Quote paths in default configuration files.  [Wilfredo Sanchez]
-
-  *) PORT: Remove extra HAVE_SYS_RESOURCE_H define for RHAPSODY since
-     it is now taken care of properly by the header file tests.
-     [Wilfredo Sanchez <wsanchez@apple.com>]
-
-  *) Fix problem with scripts and filehandle inheritance on Win32.
-     [Ken Parzygnat <kparz@raleigh.ibm.com>]  PR#2884, 2910
-
-  *) Win32 name canonicalisation could end up using the server's
-     working directory to fill in some blanks.  [Ken Parzygnat
-     <kparz@raleigh.ibm.com>] PR#3001
-
-  *) Correct invalid assumption by ap_sub_req_lookup_file() that all
-     absolute paths begin with "/" -- because they don't on Win32.
-     [Ken Parzygnat <kparz@raleigh.ibm.com>] PR#2976, 3074
-
-  *) Add [REDIRECT_]VARIANTS environment variable to mod_speling
-     so that ErrorDocument 300 processors can reformat the list
-     if desired.  [Ken Coar] PR#2859
-
-  *) Add +/- incremental prefixes to IndexOptions keywords, and
-     enable merging of multiple IndexOptions directives.  [Ken Coar]
-
-  *) PORT: Allow GuessOS to recognize Unixware 7.0.1 [Steve Cameron
-     <steve.cameron@compaq.com>]
-
-  *) Reconstructed the loop through multiple htaccess file names so
-     that missing files are not confused with unreadable files.
-     [Roy Fielding]
-
-  *) The ap_pfopen and ap_pfdopen routines were failing to protect the
-     errno on an error, which leads to one error being mistaken for
-     another when reading non-existent .htaccess files.
-     [Jim Jagielski]
-
-  *) OS/2: The new header tests get things right, need to update
-     ap_config.h.  [Brian Havard]
-
-  *) The Perl %ENV hash will now be setup by default when using the
-     mod_include `perl' command [Doug MacEachern]
-
-  *) PORT: Add Pyramid DC/OSx support to configuration mechanism.
-     [Earle Ake <akee@wpdiss1.wpafb.af.mil>]
-
-  *) PORT: Fix sys/resource.h handling for Amdahl's UTS 2.1
-     [Dave Dykstra <dwd@bell-labs.com>] PR#3054
-
-  *) Correct comment in mod_log_config.c about its internals.
-     [Elf Sternberg <elf@halcyon.com>]
-
-  *) Avoid possible line overflow in Configure: Use an awkfile to
-     handle the creation of modules.c [Jim Jagielski]
-
-Changes with Apache 1.3.2
-
-  *) Fix bug in ap_remove_module(), which caused problems for dso's 
-     who were the top_module.  [Doug MacEachern]
-
-  *) Add support for Berkeley-DB/2.x (in addition to Berkeley-DB/1.x) to
-     mod_auth_db to both be friendly to users who wants to use this version
-     and to avoid problems under platforms where only version 2.x is present.
-     [Dan Jacobowitz <drow@false.org>, Ralf S. Engelschall]
-
-  *) When using ap_log_rerror(), make the error message available to the
-     *ERROR_NOTES envariables by default.  [Ken Coar]
-
-  *) BS2000 platform only: get rid of the nasty BS2000AuthFile.
-     You now must define a BS2000Account name for the server User.
-     This has fewer security implications than the old approach.
-     [Martin Kraemer]
-
-  *) Fix SHARED_CORE feature for HPUX platform: We now use extension `.sl'
-     instead of `.so' and `SHLIB_PATH' instead of `LD_LIBRARY_PATH' on this
-     platform to make the braindead HPUX linker happy. Notice, for the module
-     DSOs we don't have to use this, because these are loaded manually (and
-     not via HPUX' dld). [Ralf S. Engelschall] PR#2905, PR#2968
-
-  *) Remove 64 thread limit on Win32.
-     [Bill Stoddard <stoddard@raleigh.ibm.com>]
-
-  *) Remove redundant substitutions in top-level Makefile.tmpl.
-     [Ralf S. Engelschall]
-
-  *) Fix APACI's `Group' configuration adjustment - especially for Linux
-     platforms where `nogroup' exists in /etc/group. [Ralf S. Engelschall]
- 
-  *) Make PrintPath work generically instead of having one version
-     strictly for OS/2. [Jim Jagielski, Brian Havard]
-
-  *) Fix the recently introduced C header file checking: We now use the C
-     pre-processor pass only (and no longer the complete compiler pass) to
-     determine whether a C header file exists or not. Because only this way
-     we're safe against inter-header dependencies (which caused horrible
-     portability problems). The only drawback is that we now have a CPP
-     configuration variable which has to be determined first (we do a similar
-     approach as GNU Autoconf does here). When all fails the user still has
-     the possibility to override it manually via APACI or src/Configuration.
-     As a fallback for the header check itself we can directly check the
-     existance of the file under /usr/include, too.
-     [Ralf S. Engelschall] PR#2777
-
-  *) PORT: Added RHAPSODY (Mac OS X Server) support. MAP_TMPFILE defined
-     as an alternate mechanism for mmap'd shared memory for RHAPSODY.
-     ap_private_extern defined to hide symbols that conflict with loaded
-     dynamic libraries on the NEXT and RHAPSODY platforms.
-     [Wilfredo Sanchez <wsanchez@apple.com>]
-
-  *) Delete PID file on clean shutdowns.
-     [Charles Randall <crandall@matchlogic.com>] PR#2947
-
-  *) Fix mod_auth_*.html documents: NSCA -> NCSA
-     [Youichirou Koga <y-koga@jp.FreeBSD.org>] PR#2991
-
-  *) Fix INSTALL document: www.gnu.ai.mit.edu -> www.gnu.org
-     [Karl Berry <karl@gnu.org>] PR#2994
-
-  *) Fix dbmmanage.1 manual page.
-     [Youichirou Koga <y-koga@jp.FreeBSD.org>] PR#2992
-     
-  *) Fix possible buffer overflow situation in suexec.c.
-     [Jeff Stewart <jws@purdue.edu>] PR#2790
-
-  *) Add some more LIBS for the SCO5 platform which are needed for the already
-     used -lprot. It's actually a bug in SCO5, of course.
-     [Ronald Record <rr@sco.com>] PR#2533
-
-  *) Fix documentation of ProxyPass/ProxyPassReverse according to the
-     trailing slash problem. [Jon Drukman <jsd@gamespot.com>] PR#2933
-  
-  *) Remove `-msym' option from LDFLAGS_SHLIB for the Digital UNIX (OSF/1)
-     platform, because it's only supported under version 4.0 and higher. But
-     because our GuessOS is still unaware of Digital UNIX versions and the
-     -msym is just to optimize the DSO statup time a little bit it's safe and
-     best when we leave it out now.  [Ralf S. Engelschall] PR#2969
-
-  *) Fix the ap_log_error_old(), ap_log_unixerr() and ap_log_printf()
-     functions: First all three functions no longer fail on strings containing
-     "%" chars and second ap_log_printf() no longer does a double-formatting
-     (instead it directly passes through the message to be formatted to the
-     real internal formatting function). [Ralf S. Engelschall] PR#2941
-
-  *) Allow "Include" directives anywhere in the server config
-     files (but not .htaccess files).  [Ken Coar] PR#2727
-
-  *) The proxy was refusing to serve CONNECT requests except to
-     port 443 (https://) and 563 (snews://). The new AllowCONNECT
-     directive allows the configuration of the ports to which a
-     CONNECT is allowed.  [Sameer Parekh, Martin Kraemer]
-
-  *) mod_expires will now act on content that is not sent from a file
-     on disk.  Previously it would never add an Expires: header to
-     any response that did not come from a file on disk; the only
-     case where it still doesn't (and can't) add one for that type of 
-     content is if you are using a modification date based setting.  
-     [Marc Slemko, Paul Phillips <paulp@go2net.com>]
-
-  *) Problems encountered during .htaccess parsing or CGI execution
-     that lead to a "500 Server Error" condition now provide explanatory
-     text (in the *ERROR_NOTES envariable) to ErrorDocument 500 scripts.
-     [Ken Coar] PR#1291
-
-  *) Add NameWidth keyword to IndexOptions directive so that the
-     width of the filename column is customisable.  [Ken Coar, Dean Gaudet]
-     PR#1949, 2324.
-
-  *) Recognize lowercase _and_ uppercase `uname' results under
-     SCO OpenServer. [David Coelho <drc@ppt.com>]
-
-  *) As duplicate "HTTP/1.0 200 OK" lines within the header seem to be
-     a common problem of (mis-administrated?) IIS servers, make the apache
-     proxy immune to these errors (and ignore the duplicates, but log
-     the fact to error_log). [Martin Kraemer], after the proposal in PR#2914 
-     
-  *) The <IfModule and <IfDefine block starting directives now only
-     allow exactly one argument. Previously, the optional negation
-     character '!' could be separated by whitespace without a syntax
-     error being reported, albeit defeating the IfModule functionality
-     (enclosed directives would ALWAYS be executed). By using the
-     stricter syntax, these hard-to-track errors can be avoided.
-     [Martin Kraemer]
-
-  *) Simplify handling of IndexOptions in mod_autoindex -- and BTW
-     cause the standalone FancyIndexing directive to logically OR
-     into any existing IndexOptions settings rather than wiping
-     them out.  [Ken Coar]
-
-  *) Changes in ftp proxy: make URL parsing simpler by using the
-     parsed_uri stuff.
-     + Add display of the "current directory" in cases where it's
-     different from the supplied path (e.g., ftp://user@host/ lives
-     in /home/user, not in /, therefore clicking on "../" in the
-     starting directory might send us to /home/).
-     + When ftp login fails, (esp. when a user name was part of the
-     URL already), we now return [401 Unauthorized ] to allow the
-     browser to pop up an authorization dialog. This makes passwords
-     slightly less visible (they don't appear in the regular log files)
-     and implements a functionality that other www proxy servers
-     already offered.
-     [Martin Kraemer]
-
-  *) Triggered by the recent "Via:" header changes, the proxy module would
-     dump core for replies with invalid headers (e.g., duplicate
-     "HTTP/1.0 200 OK" lines). These errors are now logged and the
-     core dump is avoided. Also, broken replies are not cached.
-     [Martin Kraemer] PR#2914
-
-  *) new `GprofDir' directive when compiled with -DGPROF, where gprof can
-     plop gmon.out profile data for each child [Doug MacEachern]
-   
-  *) Use the construct ``"$@"'' instead of ``$*'' in the generated
-     config.status script to be immune against arguments with whitespaces.
-     [Yves Arrouye <yves@apple.com>] PR#2866
-
-  *) Replace the inlined information grabbing stuff for the configuration
-     adjustment feature (no --without-confadjust) with calls to a new helper
-     script `buildinfo.sh' which is both more flexible and already proofed to
-     be more robust against platform differences. This mainly fixes the
-     recently occured ``sed: command garbled: ...'' problems.
-     [Ralf S. Engelschall] PR#2776, PR#2848
-
-  *) Make ab.c again pass ``gcc -Wall -Wshadow -Wpointer-arith -Wcast-align
-     -Wmissing-prototypes -Wmissing-declarations -Wnested-externs -Winline''
-     without complains after we recently added the POST feature.
-     [Ralf S. Engelschall]
-
-  *) Renamed is_HTTP_xxx() macros to ap_is_HTTP_xxx() name. They are used inside
-     modules as API functions and we forgot them at the big symbol renaming.
-     [Ralf S. Engelschall]
-
-  *) Remove bad reference to non-existing SERVER_VERSION in mod_rewrite.html
-     [Youichirou Koga <y-koga@jp.FreeBSD.ORG>] PR#2895
-
-  *) Dynamically size the filename column of mod_autoindex output.
-     [Dean Gaudet]
-
-  *) Add the ability to do POST requests to the ab benchmarking tool.
-     [Kurt Sussman <kls@best.com>] PR#2871
-
-  *) Bump up MAX_ENV_FLAGS in mod_rewrite.h from the too conservatice limit of
-     5 to 10 because there are some users out there who always have 5 to 8
-     variables in one RewriteRule and had to patch mod_rewrite.h for every
-     release. So 15 should be now more than enough, even for them. (I never
-     needed more than 4 in my RewriteRules ;-)
-     [Ralf S. Engelschall]
-
-  *) Make the proxy generate and understand Via: headers
-     [Martin Kraemer]
-
-  *) Change the proxy to use tables instead of array_headers for
-     the header lines. [Martin Kraemer]
-
-  *) Make sure the config.status file is not overridden when just
-     ``configure --help'' is used. [Ralf S. Engelschall] PR#2844
-
-  *) Split MODULE_MAGIC_NUMBER into _MAJOR/_MINOR numbers. This should
-     provide a way to trace API changes that add functionality but do
-     not create a compatibility issue for precompiled modules, etc.
-     See include/ap_mmn.h for more details.  [Randy Terbush]
-
-  *) Fix suexec installation under `make install root=xxx' situation.
-     [Ralf S. Engelschall]
-
-  *) Extend the output of the -V switch to include the paths of all
-     compiled-in configuration files, if they were overridden at
-     compile time, for least astonishment of the user.
-     [Martin Kraemer]
-
-  *) When READing a request in ExtendedStatus mode, the "old"
-     vhost, request and client information is not displayed.
-     [Jim Jagielski]
-
-  *) STATUS is no longer available. Full status information now
-     run-time configurable using the ExtendedStatus directive.
-     [Jim Jagielski]
-
-  *) SECURITY: Eliminate O(n^2) space DoS attacks (and other O(n^2)
-     cpu time attacks) in header parsing.  Add ap_overlap_tables(),
-     a function which can be used to perform bulk update operations
-     on tables in a more efficient manner.  [Dean Gaudet]
-
-  *) SECURITY: Added compile-time and configurable limits for
-     various aspects of reading a client request to avoid some simple
-     denial of service attacks, including limits on maximum request-line
-     size (LimitRequestLine), number of header fields (LimitRequestFields),
-     and size of any one header field (LimitRequestFieldsize).  Also added
-     a configurable directive LimitRequestBody for limiting the size of the
-     request message body.  [Roy Fielding]
-
-  *) Make status module aware of DNS and logging states, even if
-     STATUS not defined.  [Jim Jagielski]
-
-  *) Fix a problem with the new OS/2 mutexes.  [Brian Havard]
-
-  *) Enhance mod_speling so that CheckSpelling can be used in
-     <Directory> containers and .htaccess files.  [Ken Coar]
-
-  *) API: new ap_custom_response() function for hooking into the
-     ErrorDocument mechanism at runtime [Doug MacEachern]
-
-  *) API: new ap_uuencode() function [Doug MacEachern]
-
-  *) API: scan_script_header_err_core() now "public" and renamed
-     ap_scan_script_header_err_core() [Doug MacEachern]
-
-  *) The 'status' module will now show the process pid's and their
-     state even without full STATUS accounting. [Jim Jagielski]
-
-  *) Restore the client IP address to the error log messages, this
-     was lost during the transition from 1.2 to 1.3.  Add a new
-     function ap_log_rerror() which takes a request_rec * and
-     formats it appropriately.  [Dean Gaudet] PR#2661
-
-  *) Cure ap_cfg_getline() of its nasty habit of compressing internal
-     whitespace in input lines -- including within quoted strings.
-     [Ken Coar]
-     but leading and trailing whitespace should continue to be
-     stripped [Martin Kraemer]
-
-  *) Cleanup of the PrintPath/PrintPathOS2 helper functions. Avoid
-     the ugly use of an env. variable and use command-line args for
-     alternate $PATH. Make more like advanced 'type's as well.
-     [Jim Jagielski]
-
-  *) The IRIXN32 Rule was being ignored. Configure now correctly adds
-     -n32 only if IRIXN32 says to. [Jim Jagielski, Alain St-Denis
-     <alain.st-denis@ec.gc.ca>] PR#2736
-
-  *) Clean up a warning in mod_proxy. [Ralf S. Engelschall]
-
-  *) Renamed __EMX__ (internal define of the gcc port under OS/2) to OS2
-     following the same idea as "MSVC vs WIN32". Additionally the src/os/emx/
-     directory was renamed to src/os/os2/ for consistency.
-     [Brian Havard, Ralf S. Engelschall]
-
-  *) Add new Rule SHARED_CHAIN which can be used to enable linking of DSO
-     files (here modules) against other DSO files (here shared libraries).
-     This is done by determining a subset of LIBS which can be safely used for
-     linking the DSOs, i.e. PIC libs and shared libs.  Currently the rule is
-     disabled for all platforms to avoid problems with this (experimental)
-     rule. But we provide it now for those people how ran into problems and
-     want to came out by forcing linking against DSOs.
-     [Ralf S. Engelschall] PR#2587
-
-  *) Fix suEXEC start message: Has to be of `notice' level to really get
-     printed together with the standard startup message because the `notice'
-     level is handled special inside ap_log_error() for startup messages.
-     [Ralf S. Engelschall] PR#2761 PR#2761 PR#2765
-
-  *) Add correct `model' MIME types from RFC2077 to mime.types file.
-     [Ralf S. Engelschall] PR#2732
-
-  *) Fixed examples in mod_rewrite.html document. 
-     [Youichirou Koga <y-koga@jp.FreeBSD.org>, Ralf S. Engelschall] PR#2756
-
-  *) Allow ap_read_request errors to propagate through the normal request
-     handling loop so that the connection can be properly closed with
-     lingering_close, thus avoiding a potential TCP reset that would
-     cause the client to miss the HTTP error response.  [Roy Fielding]
-
-  *) One more portability fix for APACI shadow tree support: Swap order of awk
-     and sed in top-level configure script to avoid sed fails on some
-     platforms (for instance SunOS 4.1.3 and NCR SysV) because of the
-     non-newline-termined output of Awk. [Ralf S. Engelschall] PR#2729
-
-  *) PORT: NEC EWS4800 support.
-     [MATSUURA Takanori <t-matsuu@protein.osaka-u.ac.jp>]
-
-  *) Fix a segfault in the proxy on OS/2.  [Brian Havard]
-
-  *) Fix Win32 part of ap_spawn_child() by providing a reasonable child_info
-     structure instead of just NULL. This fixes at least the RewriteMap
-     programs under Win32. [Marco De Michele <mdemichele@tin.it>] PR#2483
-
-  *) Add workaround to top-level `configure' script for brain dead 
-     `echo' commands which interpet escape sequences per default.
-     [Ralf S. Engelschall] PR#2654
-
-  *) Make sure that the path to the Perl interpreter is correctly
-     adjusted under `make install' also for the printenv CGI script.
-     [Ralf S. Engelschall] PR#2595
- 
-  *) Update the mod_rewrite.html document to correctly reflect the situation
-     of the `proxy' (`[P]') feature. [Ralf S. Engelschall] PR#2679
-
-  *) Fix `install-includes' sub-target of `install' target in top-level
-     Makefile.tmpl: The umask+cp approach didn't work as expected (especially
-     for users which extracted the distribution under 'umask 077'), so replace
-     it by an explicit cp+chmod approach.
-     [Richard Lloyd, Curt Sampson, Ralf S. Engelschall] PR#2656 PR#2626
- 
-  *) Fix `distclean' and `clean' targets in src/Makefile.tmpl to have same
-     behavior and to cleanup correctly even under enabled SHARED_CORE rule.
-     [Ralf S. Engelschall]
-
-  *) Use a more straight forward and thus less problematic Sed command in
-     src/helper/mkdir.sh script.  [Ralf S. Engelschall]
-
-  *) Make sure the `configure' scripts doesn't fail when trying to guess the
-     domainname of the machine and there are multiple `domainname' and
-     `search' entries in /etc/resolv.conf.
-     [Ralf S. Engelschall] PR#2710
-
-  *) Add note about the SHARED_CORE requirement on some platforms also to the
-     INSTALL file because a lot of users don't read htdocs/manual/dso.html
-     first. [Ralf S. Engelschall] PR#2701
-
-  *) Fix document "hyperlink" for dso.html in src/Configuration.tmpl
-     [Knut A.Syed <Knut.Syed@nhh.no>] PR#2674
-
-  *) Modify mod_rewrite to update the Vary response field if the URL rewriting
-     engine does any manipulations or decisions based upon request fields. 
-     [Ken Coar] PR#1644
-
-  *) Document the special APACI behavior for installation paths where
-     ``/apache'' is appended to paths under some (well defined, of course)
-     situations to prevent pollution of system locations with Apache files.
-     [Ralf S. Engelschall] PR#2660
-
-  *) Fixed problem with buffered response message not being sent for
-     the read_request error conditions of URI-too-long (414) and
-     malformed header fields (400).  [Roy Fielding] PR#2646
-
-  *) Add support for the Max-Forwards: header line required by RFC2068 for
-     the TRACE method. This allows apache to TRACE along a chain of proxies
-     up to a predetermined depth. [Martin Kraemer]
-
-  *) Fix SHARED_CORE rule: The CFLAGS_SHLIB variable is no longer doubled
-     (compilers complained) and the .so.V.R.P filename extension was adjusted
-     to correctly reflect the 1.3.2 version.
-     [Ralf S. Engelschall] PR#2644
-
-  *) SECURITY: Plug "..." and other canonicalization holes under OS/2.
-     [Brian Havard]
-  
-  *) PORT: implement serialized accepts for OS/2.  [Brian Havard]
-
-  *) mod_include had problems with the fsize and flastmod directives
-     under WIN32.  Fix also avoids the minor security hole of using
-     ".." paths for fsize and flastmod.
-     [Manoj Kasichainula <manojk@raleigh.ibm.com>] PR#2355
-
-  *) Fixed some Makefile dependency problems.  [Dean Gaudet]
-
-Changes with Apache 1.3.1
-
-  *) Disable the incorrect entry for application/msword in the 
-     mod_mime_magic "magic" file because it also matches other Office
-     documents.  [Ralf S. Engelschall] PR#2608
-
-  *) Fix broken RANLIB handling in src/Configure (the entry from
-     src/Configuration.tmpl was ignored) and additionally force RANLIB to
-     /bin/true under HP/UX where ranlib exists but is deprecated.
-     [Ralf S. Engelschall] PR#2627
-     
-  *) 'apachectl status' failed on some systems.
-     [Steve VanDevender <stevev@darkwing.uoregon.edu>, Lars Eilebrecht] PR#2613
-
-  *) Add new flags for ap_unparse_uri_components() to make it generate
-     the scheme://sitepart string only, or to omit the query string.
-     [Martin Kraemer]
-
-  *) WIN32: Canonicalize ServerRoot before checking to see if it
-     is a valid directory.  The failure to do this caused certain
-     ServerRoot settings (eg. "ServerRoot /apache") to be improperly
-     rejected.  [Marc Slemko]
-
-  *) Global renaming of C header files to both get rid of conflicts with third
-     party packages and to again reach consistency:
-       1. conf.h      -> ap_config.h
-       2. conf_auto.h -> ap_config_auto.h \ these are now merged
-       3. ap_config.h -> ap_config_auto.h / in the config process
-       4. compat.h    -> ap_compat.h
-       5. apctype.h   -> ap_ctype.h
-     Backward compatibility files for conf.h and compat.h were created.
-
-  *) mod_mmap_static will no longer take action on requests unless at 
-     least one "mmapfile" directive is present in the configuration. 
-     This experimental module has to do some black magic to operate 
-     inside the current API and thus creates side-effects for other 
-     modules under some circumstances.
-     [Ralf S. Engelschall]
- 
-  *) Add conservative ticks around more egrep arguments in top-level configure
-     to avoid problems under brain-dead platforms like Digital UNIX (OSF1).
-     [Ralf S. Engelschall] PR#2596
-
-  *) mod_rewrite created RewriteLock files under the UID of the parent
-     process, thus the child processes had no write access to the files.
-     Now a chown() is done on the file to the uid of the children,
-     if applicable.  [Lars Eilebrecht, Ralf S. Engelschall] PR#2341
-
-  *) Autogenerate some HAVE_XXXXX_H defines in conf_auto.h (determined via
-     TestCompile) instead of defining them manually in conf.h based on less
-     accurate platform definitions.  This way we no longer have to fiddle with
-     OS-type and/or OS-version identifiers to discover whether a system header
-     file exists or not.  Instead we now directly check for the existence of
-     those esoteric ones. 
-     [Ralf S. Engelschall] PR#2093, PR#2361, PR#2377, PR#2434,
-                           PR#2524, PR#2525, PR#2533, PR#2569
-
-  *) mod_setenvif (BrowserMatch* and friends) will now match a missing
-     field with "^$".  [Ken Coar]
-
-  *) Set the RTLD_GLOBAL dlopen mode parameter to allow dynamically loaded
-     modules to load their own modules dynamically.  This improves mod_perl
-     and mod_php3 when these modules are loaded dynamically into Apache.
-     [Rasmus Lerdorf]
-
-  *) Cache a proxied request in the event that the client cancels the
-     transfer, provided that the configured percentage of the file has
-     already been transfered. It works for HTTP transfers only.  The 
-     new configuration directive is called CacheForceCompletion. 
-     [Glen Parker <glenebob@nwlink.com>] PR#2277
-
-  *) Add the "<!DOCTYPE HTML" magic cookie used by modern documents (and
-     required by HTML 3.2 and later) to mod_mime_magic's conf/magic.
-     [Anna Shergold <anna@inext.co.uk>]
-
-  *) Fix yet another signal-based race condition involving nested timers.
-     Signals suck.  [Dean Gaudet]
-
-  *) suexec's error messages have been clarified a little bit.  [Ken Coar]
-
-  *) Clean up some, but perhaps not all, 8-bit character set problems
-     with config file parsing, and URL parsing.  We now define
-     ap_isdigit(), ap_isupper(), ... which cast to an (unsigned char).
-     This should work on most modern unixes.
-     [Dean Gaudet] PR#800, 2282, 2553  (and others)
-
-  *) The "handler not found" error was issued in cases where the handler
-     really did exist, but was just declining to serve the request.
-     [John Van Essen <jve@gamers.org>] PR#2529
-
-  *) Add Dynamic Shared Object (DSO) support for SCO5 (OpenServer 5.0.x).
-     [Ronald Record <rr@sco.com>] PR#2533
-
-  *) The APACI libexecdir was not extended with an "apache/" subdir
-     if the installation prefix didn't already contain "apache", but
-     it should be because the DSO files are Apache-specific.  Now
-     libexecdir is treated the same way sysconfdir, datadir, localstatedir
-     and includedir are already treated.
-     [Charles Levert <charles@comm.polymtl.ca>] PR#2551
-
-  *) The <Limit> parsing routine was incorrectly treating methods as
-     case-insensitive.  [Ken Coar]
-
-  *) The ap_bprintf() code neglected to test if there was an error on
-     the connection.  ap_bflush() misdiagnosed a failure as a success.
-     [Dean Gaudet]
-
-  *) add support for #perl arg interpolation in mod_include
-     [Doug MacEachern]
-
-  *) API: Name changes of table_elts to ap_table_elts, is_table_empty
-     to ap_is_table_empty and bgetflag to ap_bgetflag. [Ben Laurie]
-
-  *) PORT: Add UnixWare 7 support
-     [Vadim Kostoglodoff <vadim@olly.ru>] PR#2463
-
-  *) Fix the Guess-DSO-flags-from-Perl stuff in src/Configure: "perl" was
-     used instead of "$PERL" which contains the correctly determined Perl
-     interpreter (important for instance on systems where "perl" and "perl5"
-     exists, like BSDI or FreeBSD, etc).
-     [Ralf S. Engelschall] PR#2505
-
-  *) Move the initial suEXEC-related startup message from plain
-     fprintf()/stderr to a delayed ap_log_error()-based one to avoid problems
-     when Apache is started from inetd (instead of standalone). Under this
-     situation startup messages on stderr lead to problems (the line is sent
-     to the client in front of the requested document).
-     [Ralf S. Engelschall] PR#871, PR#1318
-
-  *) Add a flag so ap_fnmatch() can be used for case-blind pattern matching.
-     [Ken Coar, Dean Gaudet]
-
-  *) WIN32: Don't collapse multiple slashes in PATH_INFO.
-     [Ben Laurie, Bill Stoddard <wgstodda@us.ibm.com>] PR#2274
-
-  *) WIN32 SECURITY: Eliminate trailing "."s in path components. These are
-     ignored by the Windows filesystem, and so can be used to bypass security.
-     [Ben Laurie, Alexei Kosut].
-
-  *) We now attempt to dump core when we get SIGILL. [Jim Jagielski]
-
-  *) PORT: remove broken test for MAP_FILE in http_main.c.
-     [Wilfredo Sanchez <wsanchez@apple.com>]
-
-  *) PORT: Change support/apachectl to use "kill -0 $pid" to test if the
-     httpd is running.  This should be more portable than figuring out
-     which of three dozen different versions of "ps" are installed.
-     [a cast of dozens]
-
-  *) WIN32: If we can't figure out how to execute a file in a script
-     directory, bail out of the request with an error message.  [W G Stoddard]
-
-  *) WIN32 SECURITY: Eliminate directories consisting of three or more dots;
-     these are treated by Win32 as if they are ".." but are not detected by
-     other machinery within Apache. This is something of a kludge but
-     eliminates a security hole. [Manoj Kasichainula, Ben Laurie]
-
-  *) Move ap_escape_quotes() from src/ap to src/main/util.c; it uses
-     pools and thus pollutes libap (until the pool stuff is moved there).
-     [Ken Coar]
-
-  *) IndexIgnore should be case-blind on Win32 (and any other case-aware
-     but case-insensitive platforms).  New #define for this added to conf.h
-     (CASE_BLIND_FILESYSTEM).  [Ken Coar] PR#2455
-
-  *) Enable DSO support for OpenBSD in general, not only for 2.x, because it
-     also works for OpenBSD 1.x. [Ralf S. Engelschall]
-
-  *) PORT: Fix compilation problem on ARM Linux.
-     [Sam Kington <sam@illuminated.co.uk>] PR#2443
-
-  *) Let APACI's configure script determine some configuration parameters
-     (Group, Port, ServerAdmin, ServerName) via some intelligent tests to
-     remove some of the classical hurdles for new users when setting up
-     Apache. This is done per default because it is useful for the average
-     user. Package authors can use the --without-confadjust option to disable
-     these configuration adjustments.
-     [Ralf S. Engelschall]
-
-  *) Added an EXTRA_DEPS configuration parameter which can be used
-     to add an extra Makefile dependency for the httpd target, for instance
-     to external third-party libraries, etc.
-     [Ralf S. Engelschall]
-
-  *) Add <IfDefine>..</IfDefine> sections to the core module (with same spirit
-     as <IfModule>..</IfModule> sections) which can be used to skip or process
-     contained commands dependend of ``-D PARAMETER'' options on the command
-     line. This can be used to achieve logical conditions like <IfDefine
-     ReverseProxy> instead of physically ones (e.g. <IfModule mod_proxy.c>)
-     and thus especially can be used for conditionally loading DSO-based
-     modules via LoadModule, etc. [Ralf S. Engelschall]
-
-  *) PORT: clean up a warning in mod_status for OS/2.  [Brian Havard]
-
-  *) Make table elements const. This may prevent obscure errors. [Ben Laurie]
-
-  *) Fix parsing of FTP `SIZE' responses in proxy module: The newline was not
-     truncated which forced following HTTP headers to be data in the HTTP
-     reponse. [Ralf S. Engelschall, Charles Fu <ccwf@bacchus.com>] 
-     PR#2412, 2367
-
-  *) Portability fix for APACI shadow tree support: Swap order of awk and sed
-     in top-level configure script to avoid sed fails on some platforms (for
-     instance SunOS 4.1.3 and NCR SysV) because of the non-newline-termined
-     output of Awk. [Bill Houle <bhoule@sandiegoca.ncr.com>] PR#2435
-
-  *) Improve performance of directory listings (mod_autoindex) by comparing
-     integer keys (last-modified and size) as integers rather than converting
-     them to strings first.  Also use a set of explicit byte tests rather
-     than strcmp() to check for parent directory-ness of an entry.  Oh, and
-     make sure the parent directory (if displayed) is *always* listed first
-     regardless of the sort key.  Overall performance winnage should be good
-     in CPU time, instruction cache, and memory usage, particularly for large
-     directories.  [Ken Coar]
-
-  *) Add a tiny but useful goody to APACI's configure script: The generation
-     of a config.status script (as GNU Autoconf does) which remembers the used
-     configure command and hence can be used to restore the configuration by
-     just re-running this script or for remembering the configuration between
-     releases.
-     [Ralf S. Engelschall]
-
-  *) Add httpd -t (test) option for running configuration syntax tests only.
-     If something is broken it complains and exits with a return code
-     non-equal to 0. This can be used manually by the user to check the Apache
-     configuration after editing and is also automatically used by apachectl
-     on (graceful) restart command to make sure Apache doesn't die on restarts
-     because of a configuration which is now broken since the last (re)start.
-     This way `apachectl restart' can be used inside cronjobs without having
-     to expect Apache to be falling down. Additionally the httpd -t can be run
-     via `apachectl configtest'.
-     [Ralf S. Engelschall] PR#2393
-  
-  *) Minor display fix for "install" target of top-level Makefile:
-     the displayed installation command was incorrect although the
-     executed command was correct. Now they are in sync.
-     [Ralf S. Engelschall] PR#2402
-
-  *) Correct initialization of variable `allowed_globals' in http_main.c
-     [Justin Bradford <justin@ukans.edu>] PR#2400
-
-  *) Apache would incorrectly downcase the entire Content-Type passed from
-     CGIs.  This affected server-push scripts and such which use
-     multipart/x-mixed-replace;boundary=ThisRandomString.
-     [Dean Gaudet] PR#2394
-
-  *) PORT: QNX update to properly guess 32-bit systems.
-     [Sean Boudreau <seanb@qnx.com>] PR#2390
-
-  *) Make sure the DSO emulation code for HPUX finds the proprietary shl_xxx()
-     functions which are in libdld under HPUX 9/10.
-     [Ralf S. Engelschall] PR#2378
-
-  *) Make sure the "install" target of the top-level Makefile doesn't break
-     because of a return code of 1 from an "if" (for instance under braindead
-     Ultrix the result code of an "if" construct is 1 if the "then" clause
-     didn't match). [Ralf S. Engelschall]
-
-  *) Add an additional "dummy" target to the "$(LIB)" target in generated
-     modules/xxx/Makefile's to avoid problems with SVR4 Make under "full-DSO"
-     situation (no libxxx.a built, only mod_xxx.so's) where LIB and OBJS are
-     empty. [Ralf S. Engelschall, Dean Gaudet, Martin Kraemer]
-
-  *) Replace two bad sprintf() calls with ap_snprintf() variants in
-     mod_rewrite. [Ralf S. Engelschall]
-
-  *) Fix missing usage description for MetaFiles directive.
-     [David MacKenzie <djm@va.pubnix.com>] PR#2384
-
-  *) mod_log_config wouldn't let vhosts use log formats defined in the
-     main server.  [Christof Damian <damian@mediaconsult.com>] PR#2090
-
-  *) mod_usertrack was corrupting the client hostname.  As part of the
-     fix, the cookie values were slightly extended to include the
-     fully qualified hostname of the client.
-     [Dean Gaudet] PR#2190, 2229, 2366
-
-  *) Fix a typo in pool debugging code.  [Alvaro Martinez Echevarria]
-
-  *) mod_unique_id did not work on alpha linux (in general on any
-     architecture that has 64-bit time_t).
-     [Alvaro Martinez Echevarria]
-
-  *) PORT: Make SCO 5 (and probably 3) compile again. [Ben Laurie]
-
-  *) PORT: NCR MPRAS systems have the same bug with SIGHUP restart that
-     Solaris systems experience.  So define WORKAROUND_SOLARIS_BUG.
-     [Klaus Weber <kweber@chephren.germany.ncr.com>] PR#1973
-
-  *) Change "Options None" to "Options FollowSymLinks" in the 
-     <Directory /> section of the default access.conf-dist
-     (and -win even though it doesn't matter there).  This has better
-     performance, and more intuitive semantics.  [Dean Gaudet]
-
-  *) PORT: Updated support for UTS 2.1.2.
-     [Dave Dykstra <dwd@bell-labs.com>] PR#2320
-
-  *) Fix symbol export list (src/support/httpd.exp) after recent
-     API changes in the child spawning area.
-     [Jens-Uwe Mager <jum@helios.de>]
-
-  *) Workaround for configure script and old `test' commands which do not
-     support the -x flag (for instance under platforms like Ultrix). This is
-     solved by another helper script findprg.sh which searches for Perl and
-     Awk like PrintPath but _via different names_.
-     [Ralf S. Engelschall]
-
-  *) Remove the system() call from htpasswd.c, which eliminates a system
-     dependancy.  ["M.D.Parker" <mdpc@netcom.com>] PR#2332
-
-  *) PORT: Fix compilation failures on NEXTSTEP.
-     [Rex Dieter <rdieter@math.unl.edu>] PR#2293, 2316
-
-  *) PORT: F_NDELAY is a typo, should have been FNDELAY.  There's also
-     O_NDELAY on various systems.  [Dave Dykstra <dwd@bell-labs.com>] PR#2313
-
-  *) PORT: helpers/GuessOS updates for various versions for NCR SVR4.
-     [juerg schreiner <j.schreiner@zh.ch>,
-     Bill Houle <Bill.Houle@SanDiegoCA.NCR.COM>] PR#2310
-
-  *) Fix recently introduced Win32 child spawning code in mod_rewrite.c which
-     was broken because of invalid ap_pstrcat() -> strcat() transformation.
-     [Ralf S. Engelschall]
-
-  *) Proxy Cache Fixes: account for directory sizes, fork off garbage collection
-     to continue in background, use predefined types (off_t, size_t, time_t),
-     log the current cache usage percentage at LogLevel debug
-     [Martin Kraemer, based on discussion between Dean Gaudet & Dirk vanGulik]
-
-Changes with Apache 1.3.0
-
-  *) Using a type map file as a custom error document was not possible.
-     [Lars Eilebrecht] PR#1031
-
-  *) Avoid problems with braindead Awks by additionally searching for gawk 
-     and nawk in APACI's configure script.
-     [Dave Dykstra <dwd@bell-labs.com>, Ralf S. Engelschall] PR#2319
-
-  *) Rename md5.h to ap_md5.h to avoid conflicts with native MD5 on
-     some systems. [Randy Terbush]
-
-  *) Change usage of perror()+fprintf(stderr,...) in mod_rewrite to
-     more proper ap_log_error() variants.
-     [Ralf S. Engelschall]
-
-  *) Make sure the argument for the --add-module option to APACI's configure
-     script is of type [path/to/]mod_xxx.c because all calculations inside
-     configure and src/Configure depend on this.
-     [Ralf S. Engelschall] PR#2307
-
-  *) Changes usage of perror/fprintf to stderr to more proper ap_log_error
-     in mod_mime, mod_log_referer, mod_log_agent, and mod_log_config.
-     [Brian Behlendorf]
-
-  *) Various OS/2 cleanups ["Brian Havard" <brianh@kheldar.apana.org.au>]
-
-  *) PORT: QNX needed a #include <sys/mman.h>; and now it uses flock
-     serialized accept to handle multiple sockets.
-     [Rob Saccoccio <robs@InfiniteTechnology.com>] PR#2295, 2296
- 
-  *) Have NT properly set the directory for CGI scripts 
-     (& other spawned children)
-     [W G Stoddard <wgstodda@us.ibm.com>]
-
-  *) Propagate environment to CGI scripts correctly in Win32.
-     [W G Stoddard <wgstodda@us.ibm.com>] PR#2294
-
-  *) Some symbol renaming:
-     ap_spawn_child_err became ap_spawn_child
-     ap_spawn_child_err_buff became ap_bspawn_child
-     spawn_child was obsoleted and moved to compat.h
-     [Brian Behlendorf]
-
-  *) Upgrade the child spawning code in mod_rewrite for the RewriteMap
-     programs: ap_spawn_child_err() is used and the Win32 case now uses
-     CreateProcess() instead of a low-level execl() (which caused problems in
-     the past under Win32).
-     [Ralf S. Engelschall]
-
-  *) A few cosmetics and trivial enhancements to APXS to make the
-     generated Makefile more user friendly. [Ralf S. Engelschall]
-
-  *) Proxy Fix: The proxy special failure routine ap_proxyerror()
-     was updated to use the normal apache error processing, thereby allowing
-     proxy errors to be treated by ErrorDocument's as well. For this
-     purpose, a new module-to-core communication variable "error-notes"
-     was introduced; the proxy (and possibly other modules) communicates
-     its error text using this variable. Its content is copied to a new
-     cgi-env-var REDIRECT_ERROR_NOTES for use by ErrorDocuments.
-     The old proxy special error routine ap_proxy_log_uerror()
-     was replaced by regular ap_log_error() calls, many messages were made
-     more informative. 
-     [Martin Kraemer] PR#494, 1259
-
-  *) SECURITY: A possible buffer overflow in the ftp proxy was fixed.
-     [Martin Kraemer]
-
-  *) Transform the configure message "You need root privileges for suEXEC"
-     from a fatal error into a (more friendly) warning because the building
-     ("make") of Apache we can allow, of course. Root privileges are needed
-     only for the installation step ("make install"). So make sure the
-     user is aware of this fact but let him proceed as long as he can.
-     [Ralf S. Engelschall] PR#2288
-  
-  *) Renamed three more functions to common ap_ prefix which we missed at the
-     Big Symbol Renaming because they're #defines and not real C functions:
-     is_default_port(), default_port(), http_method().
-     [Ralf S. Engelschall]
-
-  *) A zero-length name after a $ in an SSI document should cause
-     just the $ to be in the expansion.  This was broken during the
-     security fixes in 1.2.5.  [Dean Gaudet] PR#1921, 2249
-
-  *) Call ap_destroy_sub_req() in ap_add_cgi_vars() to reclaim some
-     memory.  [Rob Saccoccio <robs@InfiniteTechnology.com>] PR#2252
-
-  *) Fix src/support/httpd.exp (DSO export file which is currently only
-     used under AIX) because of recent changes to function names.
-     [Ralf S. Engelschall]
-
-Changes with Apache 1.3b7
-
-  *) Make sure a MIME-type can be forced via a RewriteRule even when no
-     substitution takes place, for instance via the following rule:
-     ``RewriteRule ^myscript$ - [T=application/x-httpd-cgi]'' This was often
-     requested by users in the past to force a single script without a .cgi
-     extension and outside any cgi-bin dirs to be executed as a CGI program.
-     [Ralf S. Engelschall] PR#2254
-
-  *) A fix for protocol issues surrounding 400, 408, and
-     414 responses. [Ed Korthof]
-
-  *) Ignore MaxRequestsPerChild on WIN32. [Brian Behlendorf]
-
-  *) Fix discrepancy in proxy_ftp.c which was causing failures when 
-     trying to connect to certain ftpd's, such as anonftpd.  
-     [Rick Ohnemus <rick@ecompcon.com>]
-
-  *) Make mod_rewrite use ap_open_piped_log() for RewriteLog directive's
-     logfile instead of fiddling around itself with child spawning stuff.
-     [Ralf S. Engelschall]
-
-  *) Made RefererIgnore case-insensitive.
-
-  *) Mod_log_agent, mod_log_referer now use ap_open_piped_log for piped logs.
-     [Brian Behlendorf]
-
-  *) Replace use of spawn_child with ap_spawn_child_err_buff, to make everything
-     "safe" under Win32.  In: mod_include.c, mod_mime_magic.c
-     [Brian Behlendorf]
-
-  *) Improve RFC1413 support. [Bob Beck <beck@bofh.ucs.ualberta.ca>]
-
-  *) Fix support script `dbmmanage': It was unable to handle some sort
-     of passwords, especially passwords with "0" chars.
-     [Ralf S. Engelschall] PR#2242
-
-  *) WIN32: Clicking on "Last Modified" in a fancy index caused a crash. Fixed.
-     [Ben Laurie] PR#2238
-
-  *) WIN32: CGIs could cause a hang (because of a deadlock in the standard C
-     library), so CGI handling has been changed to use Win32 native handles
-     instead of C file descriptors.
-     [Ben Laurie and Bill Stoddard <wgstodda@us.ibm.com>] PR#1129, 1607
-
-  *) The proxy cache would store an incorrect content-length in the cached
-     file copy after a cache update. That resulted in repeated fetching
-     of the original copy instead of using the cached copy.
-     [Ernst Kloppenburg <kloppen@isr.uni-stuttgart.de>] PR#2094
-
-  *) The Makefiles assumed that DSO files are build via $(LD). This
-     is broken for two reasons: First we never defined at least LD=ld
-     somewhere to make sure this works (it was silently assumed that most Make
-     provide a built-in LD definition - ARGL!) and second using the generic LD
-     variable is not the truth. Instead a special variable named LD_SHLIB is
-     reasonable because although "ld" is usually the default, the command for
-     building DSO files can be "libtool" or even "cc" on some systems.
-     [Ralf S. Engelschall]
-
-  *) Replace the AddVersionPlatform directive with ServerTokens which
-     provides for more control over the format of the Server:
-     header line. SERVER_SUBVERSION is no longer supported;
-     all module should use the ap_add_version_component()
-     API function instead. [Jim Jagielski]
-
-  *) Support for the NCR MP/RAS 3.0
-     [John Withers <withers@semi.kcsc.mwr.irs.gov>]
-
-  *) The LDFLAGS_SHLIB_EXPORT variable of src/Configuration[.tmpl] was
-     not retrieved in src/Configure and thus was not useable.
-     [Ralf S. Engelschall]
- 
-  *) Various Makefile consistency cleanups:
-     - make OSDIR also automatically be relative to src/ like INCDIR
-     - SUBDIRS is now generated in src/Makefile only and not in
-       Makefile.config because it is a local define for this location.
-     - remove BROKEN_BPRINTF_FLAGS because is it no longer used inside
-       any Makefile but make sure that at least the "-K inline" is kept in
-       CFLAGS for SCO 5.
-     - update the "depend" targets in Makefile.tmpl files to use $(OSDIR), too.
-     - updated the dependencies theirself
-     - removed not existing SHLIB variable from "clean" targets
-     - replaced SHLIB_OBJS/SHLIBS_OBJ consistently with OBJS_PIC because OBJS
-       already exists and OBJS_PIC are also just plain objects and have not
-       directly to do with "shared" things. The only difference is that they
-       contain PIC. So OBJS_PIC is the more canonical name.
-     - Updated the Makefile-dependency lines for OBJS_PIC
-     - Removed the Makefile-dependency line in Configure to avoid double
-       definitions
-     - replaced ugly xx-so.o/xx.so-o hack with a clean and consistent usage
-       of xxx.lo as GNU libtool does with its PIC objects
-     - reduce local complexity in modules Makefile.tmpl by moving the last
-       existing target "depend" to the generation section in Configure, too.
-     - removed the historical $(SPACER) which was used in the past together
-       with BROKEN_BPRINTF_FLAGS to avoid zig-zags in the build process. This
-       is no longer needed.
-     - force the build and run of the gen_xxx programs under main/ as the
-       first step before building the objects because it looks cleaner
-     [Ralf S. Engelschall]
-
-  *) WIN32: Make Win32 work again after the /dev/null DoS fix.
-     [Ben Laurie]
-
-  *) WIN32: Check for buffer overflows in ap_os_canonical_filename.
-     [Ben Laurie]
-
-  *) WIN32: Don't force ISAPI headers to finish with \n.
-     [Jim Patterson <Jim.Patterson@Cognos.COM>, Ben Laurie] PR#2060
-
-  *) When opening "configuration" files (like httpd.conf, htaccess
-     and htpasswd), Apache will not allow them to be non-/dev/null
-     device files. This closes a DoS hole. At the same time,
-     we use ap_pfopen to open these files to handle timeouts.
-     [Jim Jagielski, Martin Kraemer]
-
-  *) Apache will now log the reason its httpd children exit if they exit
-     due to an unexpected signal.  (It requires a new porting define,
-     SYS_SIGLIST, which if defined should point to a list of text
-     descriptions of the signals available.  See PORTING.)  [Dean Gaudet]
-
-  *) WIN32: chdir() doesn't make sense in a multithreaded environment 
-     like WIN32.  Before, Win32 CGI's could have had sporadic failures 
-     if a chdir call from one thread was made between another chdir call 
-     and a spawn in another thread.  So, for now don't chdir for CGI scripts 
-     in WIN32.  The current CGI "spec" is unclear as to whether it's 
-     necessary.  Long-term fix is to either serialize the chdir/spawn combo 
-     or use WIN32 native calls to spawn a process.  This temp fix was 
-     necessary to remove this as a showstopper for 1.3's release. 
-     [Brian Behlendorf]
-
-  *) Cleanup the suEXEC support in APACI and make it more safe:
-     1. Add big fat hint in INSTALL about risks and to read the
-        htdocs/manual/suexec.html document before using the suexec-related
-        configure options.
-     2. Make sure the user has at least provided one --suexec-xxxx option
-        (specifies suEXEC parameters) in addition to --enable-suexec option.
-        If only --enable-suexec is given APACI stops with a hint to INSTALL
-        and htdocs/manual/suexec.html documents.
-     3. Provide two additional --suexec-xxxx options to make the suEXEC
-        configuration complete (especially for package maintainers who else
-        had to patch the source tree) by providing ways to configure minimal
-        UID/GID and safe PATH, too.
-     [Ralf S. Engelschall]
-
-  *) Cleanup of the `configure --shadow' process:
-     - make sure the configure script creates its temporary files in the
-       shadow tree to avoid conflicts with parallel configure runs
-     - removed unnecessary option "-r" from "rm" call for Makefiles
-     - make sure the configure scripts creates the shadow-wrapper Makefile
-       only when no shadow trees already exists
-     - make sure "make distclean" removes the shadow-wrapper Makefile but only
-       when no more shadow trees exists
-     - overhauled mkshadow.sh script: now its more IFS-safe and approx. twice
-       as fast (in the past it needed 70sec, now it runs just 38sec)
-     - make sure CVS does not complain about the created files
-       Makefille.<gnutriple> and directories src.<gnutriple>
-     [Ralf S. Engelschall]
-
-  *) Added the ap_add_version_component() API routine and the
-     AddVersionPlatform core directive.  The first allows modules to
-     declare themselves in the Server response header field value,
-     augmenting the SERVER_SUBVERSION define in the Configuration file
-     with run-time settings (more useful in a loadable-module environment).
-     AddVersionPlatform inserts a comment such as "(UNIX)" or "(Win32)"
-     into the server version string.  [Ken Coar] PR#2056
-
-  *) Minor stability tweaks to avoid core dumps in ap_snprintf.
-     [Martin Kraemer]
-
-  *) Emit the "Accept-Range" header for the default handler.
-     [Brian Behlendorf] PR#1464
-
-  *) Add a note to httpd.conf-dist that apache will on some systems fail
-     to start when the Group # is set to a negative or large positive value.
-     [Martin Kraemer]
-
-  *) Make sure the module execution order is correct even when some modules
-     are loaded under runtime (`LoadModule') via the DSO mechanism:
-     1. The list of loaded modules is now a dynamically allocated one
-        and not the original statically list from modules.c
-     2. The loaded modules are now correctly setup by LoadModule for
-        later use by the AddModule command.
-     3. When the DSO mechanism for modules is used APACI's `install'
-        target now enables all created `LoadModule' lines per default because
-        this is both already expected by the user _and_ needed to avoid
-        confusion with the next point and reduces the Makefile.tmpl complexity
-     4. When the DSO mechanism for modules is used, APACI's `install'
-        target now additionally makes sure the module list is reconstructed
-        via a complete `ClearModuleList+AddModule...' entry.
-     5. The support tool `apxs' now also makes sure an AddModule command
-        is added in addition to the LoadModule command.
-     6. The modules.c generation was extended to now contain two
-        comments to make sure no one is confused by the confusing terminology
-        of loading/linking (we use load=link+load & link=activate instead of
-        the obvious load=activate & link=link :-( )
-     This way now there is no longer a difference under execution time between
-     statically and dynamically linked modules.
-     [Ralf S. Engelschall]
-
-  *) Fix the generated mod_xxx.c from "apxs -g -f xxx" after the
-     Big Symbol Renaming. [Ralf S. Engelschall]
-
-  *) Add a comment to mod_example.c showing the format of a FLAG command
-     handler.  [Ken Coar]
-
-  *) Standardized the time format in mod_status to match that of other 
-     places in the code (e.g. DATE_GMT).  PR#1551
-
-  *) Fix handling of %Z in timefmt strings for those platforms with no time
-     zone information in their tm struct. [Paul Eggert <eggert@twinsun.com>]
-     PR#754
-
-  *) Makes mod_rewrite, mod_log_config, mod_status and the ServerSignature 
-     feature compatible with 'UseCanonicalName off' by changing  
-     r->server->server_hostname to ap_get_server_name().  And I changed some 
-     functions which use r->server->port to use ap_get_server_port() instead, 
-     because if there's no Port directive in the config r->server->port is 0.
-     [Lars Eilebrecht]
-
-  *) get/set_module_config are trivial enough to be better off inline.  Worth
-     1.5% performance boost. [Dean Gaudet]
-
-  *) Fix off-by-one error in ap_proxy_date_canon() in proxy_util.c
-     when ensuring 'x' is at least 30-chars big. [Jim Jagielski,
-     Brian Behlendorf]
-
-  *) [BS2000 security] BS2000 needs an extra authentication to initialize
-     the task environment to the unprivileged User id. Otherwise CGI scripts
-     would have a way to gain super user access. [Martin Kraemer]
-
-  *) Fix debug log messages for BS2000/OSD: instead of logging the whole
-     absolute path, only log base name of logging source as is done
-     in unix. [Martin Kraemer]
-
-  *) Ronald Tschalaer's Accept-Encoding patch - preserve the "x-" in
-     the encoding type from the Accept-Encoding header (if it's there)
-     and use it in the response, as that's probably what it'll be expecting.
-     [Ronald.Tschalaer@psi.ch]
-
-  *) Fix to mod_alias: translate_alias_redir is dealing with
-     a URI, not a filename, so the check for drive letters for win32 
-     and emx is not necessary. [Dean Gaudet]
-
-  *) WIN32: Allow .cmd as an executable extension.
-     [Kari Likovuori <Kari.Likovuori@mol.fi>] PR#2146
-
-  *) Make Apache header files, and some variables, C++ friendly.
-     [Michael Anderson's <mka@redes.int.com.mx>]
-
-  *) Child processes can now "signal" (by exiting with a status
-     of APEXIT_CHILDFATAL) the parent process to abort and
-     shutdown the server if the error in the child process was
-     fatal enough. [Jim Jagielski]
-
-  *) mod_autoindex's find_itme() was sensitive to MIME type case.
-     [Jim Jagielski] PR#2112
-
-  *) Make sure the referer_log and agent_log entries in the default httpd.conf
-     file are also adjusted for the actual relative installation paths.
-     [Ralf S. Engelschall] PR#2175
-
-  *) WIN32: Extensive overhaul of the way UNCs are handled. [Ben Laurie]
-
-  *) WIN32: Make roots of filesystems (e.g. c:/) work. [Ben Laurie]
-     PR#1558
-
-  *) PORT: Various porting changes to support AIX 3.2, 4.1.5, 4.2 and 4.3.
-     Additionally the checks for finding the vendor DSO library were moved
-     from mod_so.c to Configure because first it needs $PLAT etc. and second
-     mod_so already uses an abstraction layer and does not fiddle with the
-     vendor functions itself.
-     [Jens-Uwe Mager, Ralf S. Engelschall]
-
-  *) PORT: Some optimization defines for NetBSD
-     [Jaromir Dolecek <dolecek@ics.muni.cz>] PR#2165
-
-  *) PORT: Dynamic Shared Object (DSO) support for NetBSD.
-     [Jaromir Dolecek <dolecek@ics.muni.cz>, Ralf S. Engelschall] PR#2158
-
-  *) Add Dynamic Shared Object (DSO) support for AIX (at least 4.2 but older
-     AIX variants should work fine, too. Even AIX 3.x should work). This is
-     accomplished by using the free DSO emulation code from Jens-Uwe Mager
-     which we put into a os/unix/os-dso-aix.c file.
-     [Ralf S. Engelschall]
-  
-  *) PORT: Fix compiler warnings under AIX >= 4.2 where the manual pages imply
-     that we should use NET_SIZE_T == int but the include files force size_t.
-     [Ralf S. Engelschall]
-
-  *) Fix two bugs in select() handling in http_main.c.
-     [Roy Fielding]
-
-  *) Suppress "error(0)" messages for ap_log_error() when the APLOG_NOERRNO
-     is unset (as it is in situations like timeouts) where it is unclear
-     whether errno is set or not.  [Martin Kraemer]
-
-  *) Just having APACI's localstatedir is too general and not enough for most
-     of the systems. 1.3b6 again required manual APACI patches by package
-     maintainers from RedHat and FreeBSD because for their filesystem layout a
-     little bit more flexibility in configuring the paths is needed. Hence we
-     provide three additional configure options (--runtimedir, --logfiledir,
-     --proxycachedir) which now can be used for more granular adjustments if
-     --localstatedir is not enough to fit the particular needs. As a nice
-     side-effect this reduces some subdir fiddling in configure+Makefile.tmpl.
-     [Ralf S. Engelschall]
-
-  *) Make the install root for "make install" in APACI's Makefile overrideable
-     by package authors.  This way we are even more friendly to package
-     maintainers (especially Debian and RedHat) who build for the real prefix
-     via "configure --prefix=/<real>" but use a different local prefix via
-     "make root=/tmp/apache install" for rolling the package without bristling
-     the target location on their system. 
-     [Ralf S. Engelschall]
-
-  *) Workaround sed limitations in APACI's configure script by now
-     substituting in chunks of 50 commands (because for instance HPUX's vendor
-     sed has a limit of max. 98 commands)
-     [Ralf S. Engelschall] PR#2136
-
-  *) Adding SOCKS5 support and fixing existing SOCKS4 support.
-     [Ralf S. Engelschall] PR#2140
-
-  *) Manually fix some symbols which were not renamed to prefix ap_ in the BIG
-     RENAMING process because they are defined as pre-processor macros instead
-     of real functions: bputc, bgetc, piped_log_write_fd, piped_log_read_fd
-     [Ralf S. Engelschall]
-
-  *) Workaround braindead AWK's when generating ap_config.h: The split() and
-     substr() functions cannot be nested under vendor AWK from Solaris 2.6.
-     [Ralf S. Engelschall] PR#2139
-
-  *) Various bugfixes and cleanups for the APACI configure script:
-     o fix IFS handling for _nested_ situation
-     o fix Perl interpreter search: take first one found instead of last one
-     o fix DSO consistency check
-     o print error messages to stderr instead of stdout
-     o add install-quiet for --shadow situation to Makefile stub
-     o reduce complexity by avoiding sed-hacks for rule and module list loops
-     [Ralf S. Engelschall]
-
-  *) Fix DEBUG_CGI situation in mod_cgi.c [David MacKenzie] PR#2114
-
-  *) Make sure the input field separator (IFS) shell variable is explicitly
-     initialized correctly before _every_ `for' loop and also restored after
-     the loops. [Ralf S. Engelschall]
-
-  *) Make sure that "make install" doesn't overwrite the `mime.types' and
-     `magic' files from an existing Apache installation. Because people often
-     customize these for own MIME and content types.
-     [Ralf S. Engelschall]
-
-  *) PORT: Dynamic Shared Object (DSO) support for OpenBSD 2.x
-     [Peter Galbavy, Ralf S. Engelschall] PR#2109
-
-  *) Fix the path to the ScoreBoardFile in the install-config target, too.
-     [Ralf S. Engelschall] PR#2105
-
-  *) Let "configure" clear out the users parameters (provided as shell
-     variables) to avoid side-effects in "src/Configure" when the user
-     exported them (which is not needed, but some users do it). 
-     [Ralf S. Engelschall] PR#2101
-
-  *) Provide backward compatibility from some old src/Configuration.tmpl
-     parameter names to the canonical Autoconf-style shell variable names. For
-     instance CFLAGS vs. EXTRA_CFLAGS. The EXTRA_xxx variants are accepted now
-     but a hint message is displayed. [Ralf S. Engelschall]
-  
-  *) Make sure that "make install" doesn't overwrite the DocumentRoot and
-     CGI scripts from an existing Apache installation. 
-     [Ralf S. Engelschall, Jim Jagielski] PR#2084
-
-  *) Make `configure --compat' more "compatible" by first 
-     let the libexecdir default to EPREFIX/libexec instead of EPREFIX/bin and
-     second by making sure the "avoid-bristling-suffix" /apache is not
-     appended to sysconfdir, datadir, localstatedir and includedir when
-     --compat is used. [Ralf S. Engelschall, Lars Eilebrecht]
-
-  *) NeXT required strdup() in support/logresolve.c
-     [Francisco Tomei <fatomei@sandburg.unm.edu>] PR#2082
-
-  *) AIX required sys/select.h in support/ab.c
-     [Jens Schleusener <Jens.Schleusener@dlr.de>] PR#2081
-
-  *) Fix the path to the MimeMagicFile in the install-config target, too.
-     [Ralf S. Engelschall] PR#2089
-
-  *) PORT: Added HP-UX 11 patches [Jeff Earickson <jaearick@colby.edu>]
-
-  *) If you start apache with the -S command line option it will dump
-     out the parsed vhost settings.  This is useful for folks trying
-     to figure out what is wrong with their vhost configuration.
-     (Other dumps may be added in the future.) [Dean Gaudet]
-
-  *) Add %pA, %pI, and %pp codes to ap_vformatter (and hence ap_bprintf,
-     ap_snprintf, and ap_psprintf).  See include/ap.h for docs.
-     [Dean Gaudet]
-
-  *) Because /usr/local/apache is the default prefix the ``configure
-     --compat'' option no longer has to set prefix, again. This way the
-     --compat option honors a leading --prefix option. [Lars Eilebrecht]
-
-  *) PORT: Cast the first argument of dlopen() in ap_os_dso_load()
-     to `char *' under OSF1 and FreeBSD 2.x where it is defined this way
-     to avoid "discard const" warnings. [Ralf S. Engelschall]
-
-  *) If a specific handler is set for a file yet the request still
-     ends up being handled by the default handler, log an error
-     message before handling it.  This catches things such as trying 
-     to use SSIs without mod_include enabled.  [Marc Slemko]
-
-  *) Fix error logging for the startup case where ap_log_error() still uses
-     stderr as the target. Now the default log level is honored here, too.
-     [Ralf S. Engelschall]
-    
-  *) PORT: Make sure some AWK's don't fail in src/Configure with "string too
-     long" errors when generating the MODULES entry for src/Makefile
-     [Ben Hyde, Ralf S. Engelschall]
-
-  *) Make sure src/Configure doesn't complain about the old directory
-     /usr/local/etc/httpd/ when APACI is used.  [Lars Eilebrecht]
-   
-Changes with Apache 1.3b6
-
-  *) PORT: Clean up warnings on Ultrix and HPUX.  [Ben Hyde]
- 
-  *) Adding DSO support for the HP/UX platform by emulating the dlopen-style
-     interface via the similar but proprietary HP/UX shl_xxx-style system
-     calls. [Ralf S. Engelschall]
-
-  *) PORT: Updated UnixWare 2.0.x and 2.1.x entries for DSO support and made
-     APACI Makefile.tmpl "install" target more robust for sensible UnixWare
-     Make. [Ralf S. Engelschall]
-
-  *) ++++ THE BIG SYMBOL RENAMING ++++
-     To avoid symbol clashes with third-party code compiled into the server,
-     we globally applied the prefix "ap_" to the following classes of
-     functions:
-        - Apache provided general functions (e.g., ap_cpystrn)
-        - Public API functions (e.g., palloc, bgets)
-        - Private functions which we can't make static (because of
-          cross-object usage) but should be (e.g., new_connection)
-     For backward source compatibility a new header file named compat.h was
-     created which provides defines for the old symbol names and can be used
-     by third-party module authors.
-     [The Apache Group]
-
-  *) Added dynamic shared object (DSO) support for SVR4-derivates: The
-     problem under SVR4 is that there is no command flag to force the linker
-     to export the global symbols of the httpd executable therewith they are
-     available to the DSO's. Instead of problematic hacks like creating a
-     dummy.so file (containing dummy references to all global symbols) the
-     httpd binary is linked against, we use a clean trick stolen from Perl 5:
-     Placing the Apache core code itself into a DSO library named libhttpd.so.
-     This way the global symbols _HAVE_ to be exported and thus are available
-     to any manually loaded DSO's under runtime. To reduce the impact to the
-     user to null we go even further and create a stub httpd executable which
-     automatically keeps track of the DSO library loading itself and thus
-     hides the complete mechanism from the user. Although the generation of
-     this DSO library is automatically triggered for platforms which
-     essentially need it (mostly all SVR4-derivates) it can be also enabled
-     manually via the Rule SHARED_CORE. This can be interesting in the future
-     where we perhaps exploit this libhttpd.so mechanism for providing nifty
-     features like graceful upgrades, or whatever. 
-     [Ralf S. Engelschall, Martin Kraemer]
-
-  *) Build the libraries before building the rest of the tools. [Ben Hyde]
-
-  *) Add "distclean" target to src/-Makefiles to provide "make distclean" also
-     inside the src subtree (i.e. for non-APACI users). Following GNU Makefile
-     conventions while "clean" removes only stuff created by "all" targets,
-     "distclean" additionally removes the stuff from the configuration
-     process. This way "make distclean" (hence the name) provides a fresh
-     source tree as it was for distribution.
-     [Ralf S. Engelschall]
-
-  *) Allow top-level (APACI) Makefile to break on build errors
-     the same way the src/ subtree Makefiles breaks on them by replacing the
-     initial APACI sed-subdir-display-kludge with a more clean
-     variable-passing-solution: variable SDP can optionally hold the subdir
-     prefix which is consistently used for displaying the subdir movement.
-     This way even the top-level Makefile can stop correctly on errors as the
-     user expects. [Ralf S. Engelschall]
-
-  *) Fixed ordering of argument checks for RewriteBase directive.
-     [Todd Eigenschink <eigenstr@mixi.net>] PR#2045
-
-  *) Change Win32 IS_MODULE to SHARED_MODULE to match Unix' method of
-     indicating that a module is being compiled for dynamic loading. Also
-     remove #define IS_MODULE from modules and add SHARED_MODULE define
-     to the mak/dsp files. [Alexei Kosut]
-
-  *) Reduce logging level of "normal" warning messages to APLOG_INFO,
-     since we are now logging APLOG_WARNING by default. [Roy Fielding]
-
-  *) PORT: OS/2 tweak to deal with multiple .exe targets. [Brian Havard]
- 
-  *) Add documentation file and src/Configuration.tmpl entry for the
-     experimental mod_mmap_static module. Because although it is and marked as
-     an experimental one it is distributed and thus should be documented and
-     prepared for configuration the same way as all others modules. 
-     [Ralf S. Engelschall]
-
-  *) Add query (-q) option to apxs support tool to be able to manually query
-     specific settings from apxs. This is needed for instance when you
-     manually want to access Apache's header files and you need to assemble
-     the -I option.  Now you can do -I`apxs -q INCLUDEDIR`.
-     [Ralf S. Engelschall]
-
-  *) Now src/Configure uses a fallback strategy for the shared object support
-     on platforms where no explicit information is available: If a Perl
-     installation exists we ask it about its shared object support and if it's
-     the dlopen-style one we shamelessly guess the compiler and linker flags
-     for creating shared objects from Perls knowledge. Of course, the user is
-     warning about what we are doing and informed that he should send us
-     the guessed flags when they work. [Ralf S. Engelschall]
-
-  *) Provide APACI --without-support option to be able to disable the build
-     and installation of the support tools from the src/support/ area.
-     Although its useful to have these installed per default we should provide
-     a way to compile and install without them for backward-compatibility.
-     [Ralf S. Engelschall]
-
-  *) Add of the new APache eXtenSion (apxs) support tool for building and
-     installing modules into an _already installed_ Apache package through the
-     dynamic shared object (DSO) mechanism [mod_so.c]. The trick here is that
-     this approach actually doesn't need the Apache source tree.  The
-     (APACI-installed) server package is enough, because this now includes the
-     Apache C header files (PREFIX/include) and the new APXS tool
-     (SBINDIR/apxs).  The intend is to provide a handy tool for third-party
-     module authors to build their Apache modules _OUTSIDE_ the Apache source
-     tree while avoiding them to fiddle around with the totally platform
-     dependend way of compiling DSO files. The tool supports all ranges of
-     modules, from trivial ones (single mod_foo.c) to complex ones (like PHP3
-     which has a mod_php3.c plus a pre-built libmodphp3-so.a) and even can
-     on-the-fly generate a minimalistic Makefile and sample module for the
-     first step to provide both a quick success event and to demonstrate the
-     APXS mechanism to module authors. [Ralf S. Engelschall]
-
-  *) Fix core dumps in use of CONNECT in proxy.  
-     [Rainer.Scherg@rexroth.de] PR#1326, #1573, #1942
-
-  *) Modify the log directives in httpd.conf-dist files to use CustomLog
-     so that users have examples of how CustomLog can be used.
-     [Lars Eilebrecht]
-
-  *) Add the new Apache Autoconf-style Interface (APACI) for the top-level of
-     the Apache distribution tree.  Until Apache 1.3 there was no real
-     out-of-the-box batch-capable build and installation procedure for the
-     complete Apache package. This is now provided by a top-level "configure"
-     script and a corresponding top-level "Makefile.tmpl" file.  The goal is
-     to provide a GNU Autoconf-style frontend which is capable to both drive
-     the old src/Configure stuff in batch and additionally installs the
-     package with a GNU-conforming directory layout. Any options from the old
-     configuration scheme are available plus a lot of new options for flexibly
-     customizing Apache. [Ralf S. Engelschall]
-
-  *) The floating point ap_snprintf code wasn't threadsafe.
-     Had to remove the HAVE_CVT macro in order to do threadsafe
-     calling of the ?cvt() floating point routines.  [Dean Gaudet]
-
-  *) PORT: Add the SCO_SV port. [Jim Jagielski] PR#1962
-
-  *) PORT: IRIX needs the -n32 flag iff using the 'cc' compiler
-     [Jim Jagielski] PR#1901
-
-  *) BUG: Configure was using TCC and CC inconsistently. Make sure
-     Configure knows which CC we are using. [Jim Jagielski]
-
-  *) "Options +Includes" wasn't correctly merged if "+IncludesNoExec"
-     was defined in a parent directory. [Lars Eilebrecht]
-
-  *) API: ap_snprintf() code mutated into ap_vformatter(), which is
-     a generic printf-style routine that can call arbitrary output
-     routines.  Use this to replace http_bprintf.c.  Add new routines
-     psprintf(), pvsprintf() which allocate the exact amount of memory
-     required for a string from a pool.  Use psprintf() to clean up
-     various bits of code which used ap_snprintf()/pstrdup().
-     [Dean Gaudet]
-
-  *) PORT: HAVE_SNPRINTF doesn't do anything any longer.  This is because
-     ap_snprintf() has different semantics and formatting codes than
-     snprintf().  [Dean Gaudet]
-
-  *) SIGXCPU and SIGXFSZ are now reset to SIG_DFL at boot-time.  This
-     is necessary on at least Solaris where the /etc/rc?.d scripts
-     are run with these signals ignored, and "SIG_IGN" settings are
-     maintained across exec().
-     [Rein Tollevik <reint@sys.sol.no>] PR#2009
-
-  *) Fix the check for symbolic links in ``RewriteCond ... -l'': stat() was
-     used instead of lstat() and thus this flag didn't work as expected.
-     [Rein Tollevik <reint@sys.sol.no>] PR#2010
-
-  *) Fix the proxy pass-through feature of mod_rewrite for the case of
-     existing QUERY_STRING now that mod_proxy was recently changed because of
-     the new URL parsing stuff. [Ralf S. Engelschall]
-
-  *) A few changes to scoreboard definitions which helps gcc generate
-     better code.  [Dean Gaudet]
-
-  *) ANSI C doesn't guarantee that "int foo : 2" in a structure will
-     be a signed bitfield.  So mark a few bitfields as signed to
-     ensure correct code.  [Dean Gaudet]
-
-  *) The default for HostnameLookups was changed to Off, but there
-     was a problem and it wasn't taking effect. [Dean Gaudet]
-
-  *) PORT: Clean up undefined signals on some platforms (SCO, BeOS).
-     [Dean Gaudet]
-
-  *) After a SIGHUP the listening sockets in the parent weren't
-     properly marked for closure on fork().
-     [Jürgen Keil <jk@tools.de>] PR#2000
- 
-  *) Allow %2F in two situations: 1) it is in the query part of the URI,
-     therefore not exposed to %2F -> '/' translations and 2) the request
-     is a proxy request, so we're not dealing with a local resource anyway.
-     Without this, the proxy would fail to work for any URL's with
-     %2f in them (occurs quite often in
-     http://.../cgi-bin/...?http%3A%2F%2F... references) [Martin Kraemer]
-
-  *) Protect against FD_SETSIZE mismatches.  [Dean Gaudet]
-
-  *) Make the shared object compilation command more portable by avoiding
-     the direct combination of `-c' & `-o' which is not honored by some
-     compilers like UnixWare's cc. [Ralf S. Engelschall]
-
-  *) WIN32: the proxy was creating filenames missing the last four
-     characters.  While this normally doesn't stop anything from 
-     working, it can result in extra collisions.  
-     [Tim Costello <tjcostel@socs.uts.edu.au>] PR#1890
-
-  *) Now mod_proxy uses the response string (in addition to the response status
-     code) from the already used FTP SIZE command to setup the Content-Length
-     header if available. [Ralf S. Engelschall] PR#1183
-
-  *) Reanimated the (still undocumented) proxy receive buffer size directive:
-     Renamed from ReceiveBufferSize to ProxyReceiveBufferSize because the old
-     name was really too generic, added documentation for this directive to
-     the mod_proxy.html and corrected the hyperlink to it in the
-     new_features_1.3.html document.  [Ralf S. Engelschall] PR#1348
-
-  *) Fix a bug in the src/helpers/fp2rp script and make it a little bit
-     faster [Martin Kraemer]
-  
-  *) Make Configure die when you give it an unknown command switch.
-     [Ben Hyde]
-
-  *) Add five new and fresh manpages for the support programs: dbmmanage.1,
-     suexec.8, htdigest.1, rotatelogs.8 and logresolve.8.  Now all up-to-date
-     and per default compiled support programs have manual pages - just to
-     document our stuff a little bit more and to be able to do really
-     Unix-like installations ;-) [Ralf S. Engelschall]
-
-  *) Major cleanups to the Configure script to make it and its generated
-     Makefiles again readable and maintainable: add SRCDIR option, removed
-     INCLUDES_DEPTH[0-2] kludge, cleanup of TARGET option, cleanup of
-     generated sections, consequently added Makefile headers with inheritance
-     information, added subdir movement messages for easier following where
-     the build process currently stays (more verbose then standard Make, less
-     verbose than GNU make), same style to comments in the Configure script,
-     added Apache license header, fixed a few bugs, etc. [Ralf S. Engelschall]
-     
-  *) Add the new ApacheBench program "ab" to src/support/: This is derived
-     from the ZeusBench benchmarking program and can be used to determine the
-     response performance of an Apache installation. This version is
-     officially licensed with Zeus Technology, Ltd. See the license agreement
-     statements in <199803171224.NAA24547@en1.engelschall.com> in apache-core.
-     [Ralf S. Engelschall]
-
-  *) API: Various core functions that are definately not part of the API
-     have been made static, and a few have been marked API_EXPORT.  Still
-     more have been marked CORE_EXPORT and are not intended for general
-     use by modules.  [Doug MacEachern, Dean Gaudet]
-
-  *) mod_proxy was not clearing the Proxy-Connection header from
-     requests; now it does.  This did not violate any spec, however 
-     causes poor interactions when you are talking to remote proxies.  
-     [Marc Slemko] PR#1741
-
-  *) Various cleanups to the command line interface and manual pages.
-     [Ralf S. Engelschall]
-
-  *) cfg_getline() was not properly handling lines that did not end
-     with a line termination character.  [Marc Slemko] PR#1869, 1909
-
-  *) Performance tweak to mod_log_config.  [Dmitry Khrustalev]
-
-  *) Clean up some undocumented behavior of mod_setenvif related to
-     "merging" two SetEnvIf directives when they match the same header
-     and regex.  Document that mod_setenvif will perform comparisons in
-     the order they appear in the config file.  Optimize mod_setenvif by
-     doing more work at config time rather than at runtime.
-     [Dean Gaudet]
-
-  *) src/include/ap_config.h now wraps it's #define's with #ifndef/#endif's
-     to allow for modules to overrule them and to reduce redefinition
-     warnings [Jim Jagielski]
-
-  *) [PORT] For A/UX change the OS-#define for -DAUX to -DAUX3.
-     [Jim Jagielski]
-
-  *) Making the hard-coded cross-module function call mime_find_ct() (from
-     mod_proxy to mod_mime) obsolete by making sure the API hook for MIME type
-     checking is really called even for proxy requests except for URLs with
-     HTTP schemes (because there we can optimize by not running the type
-     checking hooks due to the fact that the proxy gets the MIME Content-type
-     from the remote host later). This change cleans up mod_mime by removing
-     the ugly export kludge, makes the one-liner file mod_mime.h obsolete, and
-     especially unbundles mod_proxy and mod_mime. This way they both now can
-     be compiled as shared objects and are no longer tied together. 
-     [Ralf S. Engelschall]
-
-  *) util.c cleanup and speedup. [Dean Gaudet]
-
-  *) API: Clarification, pstrndup() will always copy n bytes of the source
-     and NUL terminate at the (n+1)st byte.  [Dean Gaudet]
-
-  *) Mark module command_rec and handler_rec structures const so that they
-     end up in the read-only data section (and are friendlier to systems
-     that don't do optimistic memory allocation on fork()). [Dean Gaudet]
-
-  *) Add check to the "Port" directive to make sure the specified 
-     port is in the appropriate range.  [Ben Hyde]
-
-  *) Performance improvements to invoke_handler().
-     [Dmitry Khrustalev <dima@bog.msu.su>]
-
-  *) Added support for building shared objects even for library-style modules
-     (which are built from more than one object file). This now provides the
-     ability to build mod_proxy as a shared object module. Additionally
-     modules like mod_example are now also supported for shared object
-     building because the generated Makefiles now no longer assume there is at
-     least one statically linked module. [Ralf S. Engelschall]
-
-  *) API: Clarify usage of content_type, handler, content_encoding,
-     content_language and content_languages fields in request_rec.  They
-     must always be lowercased; and the strings pointed to shouldn't
-     be modified (you must copy them to modify them).  Fix a few bugs
-     related to this.  [Dean Gaudet]
-
-  *) API: Clarification: except for RAW_ARGS, all command handlers can
-     treat the char * parameters as permanent, and modifiable.  There
-     is no need to pstrdup() them.  Clean up some needless pstrdup().
-     [Dean Gaudet]
-
-  *) Now mod_so keeps track of which module shared objects with which names
-     are loaded and thus avoids multiple loading and unloading and irritating
-     error_log messages. [Ralf S. Engelschall]
-
-  *) Prior to the existence of mod_setenv it was necessary to tweak the TZ
-     environment variable in the apache core.  But that tweaking interferes
-     with mod_setenv.  So don't tweak if the user has specified an explicit
-     TZ variable.  [Jay Soffian <jay@cimedia.com>] PR#1888
-
-  *) rputs() did not calculate r->sent_bodyct properly.
-     [Siegmund Stirnweiss <siegst@kat.ina.de>] PR#1900
-
-  *) The CGI spec says that REMOTE_HOST should be set to the remote hosts's
-     name, or left unset if this value is unavailable.  Apache was setting
-     it to the IP address when unavailable.
-     [Tony Finch <fanf@demon.net>] PR#1925
-
-  *) Various improvements to the configuration and build support for compiling
-     modules as shared objects. Especially Solaris 2.x, SunOS 4.1, IRIX and
-     OSF1 support with GCC and vendor compilers was added.  This way shared
-     object support is now provided out-of-the-box for FreeBSD, Linux,
-     Solaris, SunOS, IRIX and OSF1. In short: On all major platforms!
-     [Ralf S. Engelschall]
-
-  *) Minor cleanup in http_main -- split QNX and OS2 specific "mmap"
-     scoreboard code into separate #defines -- USE_POSIX_SCOREBOARD
-     and USE_OS2_SCOREBOARD.  [Dean Gaudet]
-
-  *) Fix one more special locking problem for RewriteMap programs in
-     mod_rewrite: According to the documentation of flock(), "Locks are on
-     files, not file descriptors.  That is, file descriptors duplicated
-     through dup(2) or fork(2) do not result in multiple instances of a lock,
-     but rather multiple references to a single lock. If a process holding a
-     lock on a file forks and the child explicitly unlocks the file, the
-     parent will lose its lock.". To overcome this we have to make sure the
-     RewriteLock file is opened _AFTER_ the childs were spawned which is now
-     the case by opening it in the child_init instead of the module_init API
-     hook. [Ralf S. Engelschall] PR#1029
-
-  *) Change to Location and LocationMatch semantics.  LocationMatch no
-     longer lets a single slash match multiple adjacent slashes in the
-     URL.  This change is for consistency with RewriteRule and
-     AliasMatch.  Multiple slashes have meaning in URLs that they do
-     not have in (some) filesystems.  Location on the other hand can
-     be considered a shorthand for a more complicated regex, and it
-     does match multiple slashes with a single slash -- which is
-     also consistent with the Alias directive.
-     [Dean Gaudet] related PR#1440
-
-  *) Fix bug with mod_mime_magic causing certain files, including files
-     of length 0, to result in no response from the server.
-     [Dean Gaudet]
-
-  *) The Configure script now generates src/include/ap_config.h which
-     contains the set of defines used when Apache is compiled on a platform.
-     This file can then be included by external modules before including
-     any Apache header files in case they are being built separately from
-     Apache.  Along with this change, a couple of minor changes were
-     made to make Apache's #defines coexist peacefully with any autoconf
-     defines an external module might have. [Rasmus Lerdorf]
-
-  *) Fix mod_rewrite for the ugly API case where <VirtualHost> sections exist
-     but without any RewriteXXXXX directives. Here mod_rewrite is given no
-     chance by the API to initialize its per-server configuration and thus
-     receives the wrong one from the main server. This is now avoided by
-     remembering the server together with the config structure while
-     configuring and later assuming there is no config when we see a
-     difference between the remembered server and the one calling us. 
-     [Ralf S. Engelschall] PR#1790
-
-  *) Fixed the DBM RewriteMap support for mod_rewrite: First the support now
-     is automatically disabled under configure time when the dbm_xxx functions
-     are not available. Second, two heavy source code errors in the DBM
-     support code were fixed.  This makes DBM RewriteMap's usable again after
-     a long time of brokenness. [Ralf S. Engelschall] PR#1696
-
-  *) Now all configuration files support Unix-style line-continuation via 
-     the trailing backslash ("\") character. This enables us to write down
-     complex or just very long directives in a more readable way.  The
-     backslash character has to be really the last character before the
-     newline and it has not been prefixed by another (escaping) backslash.
-     [Ralf S. Engelschall]
-
-  *) When using ProxyPass the ?querystring was not passed correctly.
-     [Joel Truher <truher@wired.com>]
-
-  *) To deal with modules being compiled and [dynamically] linked
-     at a different time from the core, the SERVER_VERSION and
-     SERVER_BUILT symbols have been abstracted through the new
-     API routines apapi_get_server_version() and apapi_get_server_built().
-     [Ken Coar]  PR#1448
-
-  *) WIN32: Preserve trailing slash in canonical path (and hence
-     in PATH_INFO). [Paul Sutton, Ben Laurie]
-
-  *) PORT: USE_PTHREAD_SERIALIZED_ACCEPT has proven unreliable
-     depending on the rev of Solaris and what mixture of modules
-     are in use.  So it has been disabled, and Solaris is back to
-     using USE_FCNTL_SERIALIZED_ACCEPT.  Users may experiment with
-     USE_PTHREAD_SERIALIZED_ACCEPT at their own risk, it may speed
-     up static content only servers.  Or it may fail unpredictably.
-     [Dean Gaudet] PR#1779, 1854, 1904
-
-  *) mod_test_util_uri.c created which tests the logic in util_uri.c.
-     [Dean Gaudet]
-
-  *) API: Rewrite of absoluteURI handling, and in particular how
-     absoluteURIs match vhosts.  Unless a request is a proxy request, a
-     "http://host" url is treated as if a similar "Host:" header had been
-     supplied.  This change was made to support future HTTP/1.x protocols
-     which may require clients to send absoluteURIs for all requests.
-
-     In order to achieve this change subtle changes were made to the API.  In a
-     request_rec, r->hostlen has been removed.  r->unparsed_uri now exists so
-     that the unmodified uri can be retrieved easily.  r->proxyreq is not set
-     by the core, modules must set it during the post_read_request or
-     translate_names phase.
-
-     Plus changes to the virtualhost test suite for absoluteURI testing.
-
-     This fixes several bugs with the proxy proxying requests to vhosts
-     managed by the same httpd.
-     [Dean Gaudet]
-
-  *) API: Cleanup of code in http_vhost.c, and remove vhost matching
-     code from mod_rewrite.  The vhost matching is now performed by a
-     globally available function matches_request_vhost().  [Dean Gaudet]
-
-  *) Reduce memory usage, and speed up ServerAlias support.  As a
-     side-effect users can list multiple ServerAlias directives
-     and they're all considered.
-     [Chia-liang Kao <clkao@cirx.org>] PR#1531
-
-  *) The "poly" directive in image maps did not include the borders of the
-     polygon, whereas the "rect" directive does.  Fix this inconsistency.
-     [Konstantin Morshnev <moko@design.ru>] PR#1771
-
-  *) Make \\ behave as expected.  [Ronald.Tschalaer@psi.ch]
-
-  *) Add the `%a' construct to LogFormat and CustomLog to log the client IP
-     address. [Todd Eigenschink <eigenstr@mixi.net>] PR#1885
-
-  *) API: A new source module main/util_uri.c; It contains a routine
-     parse_uri_components() and friends which breaks a URI into its component
-     parts.  These parts are stored in a uri_components structure called
-     parsed_uri within each request_rec, and are available to all modules.
-     Additionally, an unparse routine is supplied which re-assembles the URI
-     components back to an URI, optionally hiding the username:password@ part
-     from ftp proxy requests, and other useful routines.  Within the structure,
-     you find on a ready-for-use basis:
-        scheme;     /* scheme ("http"/"ftp"/...) */
-        hostinfo;   /* combined [user[:password]@]host[:port] */
-        user;       /* user name, as in http://user:passwd@host:port/ */
-        password;   /* password, as in http://user:passwd@host:port/ */
-        hostname;   /* hostname from URI (or from Host: header) */
-        port_str;   /* port string (integer representation is in "port") */
-        path;       /* the request path (or "/" if only scheme://host was given) */
-        query;      /* Everything after a '?' in the path, if present */
-        fragment;   /* Trailing "#fragment" string, if present */
-     This is meant to serve as the platform for *BIG* savings in
-     code complexity for the proxy module (and maybe the vhost logic).
-     [Martin Kraemer]
-
-  *) Make all possible meta-construct expansions ($N, %N, %{NAME} and
-     ${map:key}) available for all location where a string is created in
-     mod_rewrite rewriting rulesets: 1st arg of RewriteCond, 2nd arg of
-     RewriteRule and for the [E=NAME:STRING] flag of RewriteRule. This way the
-     possible expansions are consequently usable at all string creation
-     locations. [Ralf S. Engelschall]
-
-  *) Fix initialization of RewriteLogLevel (default now is 0 as documented 
-     and not 1) and the per-virtual-server merging of directives. Now all
-     directives except `RewriteEngine' and `RewriteOption' are either
-     completely overridden (default) or completely inherited (when
-     `RewriteOptions inherit') is used. [Ralf S. Engelschall] PR#1325
-
-  *) Fix `RewriteMap' program lookup in situations where such maps are
-     defined but disabled (`RewriteEngine off') in per-server context. 
-     [Ralf S. Engelschall] PR#1431
-
-  *) Fix bug introduced in 1.3b4-dev, config with no Port setting would cause
-     server to bind to port 0 rather than 80.  [Dean Gaudet]
-
-  *) Fix long-standing problem with RewriteMap _programs_ under Unix derivates
-     (like SunOS and FreeBSD) which don't accept the locking of pipes
-     directly.  A new directive RewriteLock is introduced which can be used to
-     setup a separate locking file which then is used for synchronization.
-     [Ralf S. Engelschall] PR#1029
-
-  *) WIN32: The server root is obtained from the registry key
-     HKLM\SOFTWARE\Apache Group\Apache\<version> (version is currently
-     "1.3 beta"), unless overridden by the -d command line flag. The
-     value is stored by running "apache -i -d serverroot". [Paul Sutton]
-
-  *) Merged os/win32/mod_dll.c into modules/standard/mod_so.c to support
-     dynamic loading on Win32 and Unix via the same module. [Paul Sutton]
-
-  *) Now mod_rewrite no longer makes problematic assumptions on the characters
-     a username can contain when trying to expand it via /etc/passwd. 
-     [Ralf S. Engelschall]
-
-  *) The mod_setenvif BrowserMatch backwards compatibility command did not
-     work properly with spaces in the regex.  [Ronald Tschalaer] PR#1825
-
-  *) Add new RewriteMap types: First, `rnd' which is equivalent to the `txt'
-     type but with a special post-processing for the looked-up value: It
-     parses it into alternatives according to `|' chars and then only one
-     particular alternative is chosen randomly (this is an essential
-     functionality needed for balancing between backend-servers when using
-     Apache as a Reverse Proxy.  The looked up value here is a list of
-     servers). Second, `int' with the built-in maps named `tolower' and
-     `toupper' which can be used to map URL parts to a fixed case (this is an
-     essential feature to fix the case of server names when doing mass
-     virtual-hosting with the help of mod_rewrite instead of using
-     <VirtualHost> sections). [Ralf S. Engelschall, parts based on code from
-     Jay Soffian <jay@cimedia.com>] PR#1631
-
-  *) Add a new directive to mod_proxy similar to ProxyPass: `ProxyPassReverse'.
-     This directive lets Apache adjust the URL in Location-headers on HTTP
-     redirect responses sent by the remote server. This way the virtually
-     mapped area is no longer left on redirects and thus by-passed which is
-     especially essential when running Apache as a reverse proxy.  
-     [Ralf S. Engelschall]
-
-  *) Hide Proxy-Authorization from CGI/SSI/etc just like Authorization is
-     hidden. [Alvaro Martinez Echevarria]
-
-  *) Apache will, when started with the -X (single process) debugging flag,
-     honor the SIGINT or SIGQUIT signals again now. This capability got lost
-     a while ago during OS/2 signal handling changes.
-
-  *) [PORT] Work around the fact that NeXT runs on more than the
-     m68k chips in mod_status [Scott Anguish and Timothy Luoma
-     <luomat@peak.org>]
-
-  *) [PORT] Recognize FreeBSD versions so we can use the OS regex as well
-     as handling unsigned-chars for FreeBSD v3 and v2 [Andrey Chernov
-     <ache@nagual.pp.ru> and Jim] PR#1450
-
-  *) Use SA_RESETHAND or SA_ONESHOT when installing the coredump handlers.
-     In particular the handlers could trigger themselves into an infinite
-     loop if RLimitMem was used with a small amount of memory -- too small
-     for the signal stack frame to be set up.  [Dean Gaudet]
-
-  *) Fix problems with absoluteURIs introduced during 1.3b4.  [Dean Gaudet,
-     Alvaro Martinez Echevarria <alvaro@lander.es>]
-
-  *) Fix multiple UserDir problem introduced during 1.3b4-dev.
-     [Dean Gaudet] PR#1850
-
-  *) ap_cpystrn() had an off-by-1 error.
-     [Charles Fu <ccwf@klab.caltech.edu>] PR#1847
-
-  *) API: As Ken suggested the check_cmd_context() function and related
-     defines are non-static now so modules can use 'em.  [Martin Kraemer]
-
-  *) mod_info would occasionally produce an unpaired <tt> in its
-     output. Fixed. [Martin Kraemer]
-
-  *) By default AIX binds a process (and it's children) to a single
-     processor.  httpd children now unbind themselves from that cpu
-     and re-bind to one selected at random via bindprocessor()
-     [Doug MacEachern]
-
-  *) Linux 2.0 and above implement RLIMIT_AS, RLIMIT_DATA has almost no
-     effect.  Work around it by using RLIMIT_AS for the RLimitMEM
-     directive.  [Enrik Berkhan <enrik@inka.de>] PR#1816
-
-  *) mod_mime_magic error message should indicate the filename when
-     reads fail.  ["M.D.Parker" <mdpc@netcom.com>] PR#1827
-
-  *) Previously Apache would permit </Files> to end <FilesMatch> (and
-     similary for Location and Directory), now this is diagnosed as an
-     error.  Improve error messages for mismatched sections (<Files>,
-     <FilesMatch>, <Directory>, <DirectoryMatch>, ...).
-     [Dean Gaudet, Martin Kraemer]
-
-  *) <Files> is not permitted within <Location> (because of the
-     semantic ordering).  [Dean Gaudet] PR#379
-
-  *) <Files> with wildcards was broken by the change in wildcard
-     semantics (* does not match /).  To fix this, <Files> now
-     apply only to the basename of the request filename.  This
-     fixes some other inconsistencies in <Files> semantics
-     (such as <Files a*b> not working).  [Dean Gaudet] PR#1817
-
-  *) Removed bogus "dist.tar" target from Makefile.tmpl and make sure
-     backup files are removed on "clean" target [Ralf S. Engelschall]
-
-  *) PORT: Add -lm to LIBS for HPUX.  [Dean Gaudet] PR#1639
-
-  *) Various errors from select() and accept() in child_main() would
-     result in an infinite loop.  It seems these two tickle kernel
-     or library bugs occasionally, and result in log spammage and
-     a generally bad scene.  Now the child exits immediately,
-     which seems to be a good workaround.
-     [Dean Gaudet] PR#1747, 1107, 588, 1787, 987, 588
-
-  *) Cleaned up some race conditions in unix child_main during
-     initialization. [Dean Gaudet]
-
-  *) SECURITY: "UserDir /abspath" without a * in the path would allow
-     remote users to access "/~.." and bypass access restrictions
-     (but note /~../.. was handled properly).
-     [Lauri Jesmin <jesmin@ut.ee>] PR#1701
-
-  *) API: os_is_path_absolute() now takes a const char * instead of a char *.
-     [Dean Gaudet]
-
-Changes with Apache 1.3b5
-
-  *) Source file dependencies in Makefile.tmpl files throughout the
-     source tree were updated to accurately reflect reality.
-     [Dean Gaudet]
-
-  *) Preserve the content encoding given by the AddEncoding directive
-     when the client doesn't otherwise specify an encoding.
-     [Ronald Tschalaer <Ronald.Tschalaer@psi.ch>]
-
-  *) Sort out problems with canonical filename handling happening too late.
-     [Dean Gaudet, Ben Laurie]
-
-Changes with Apache 1.3b4
-
-  *) The module structure was modified to include a *dynamic_load_handle
-     in the STANDARD_MODULE_STUFF portion, and the MODULE_MAGIC_NUMBER
-     has been bumped accordingly.  [Paul Sutton]
-
-  *) All BrowserMatch directives mentioned in
-     htdocs/manual/known_client_problems.html are in the default
-     configuration files.  [Lars Eilebrecht]
-
-  *) MiNT port update. [Jan Paul Schmidt]
-
-  *) HTTP/1.1 requires x-gzip and gzip encodings be treated
-     equivalent, similarly for x-compress and compress.  Apache
-     now ignores a leading x- when comparing encodings.  It also
-     preserves the encoding the client requests (for example if
-     it requests x-gzip, then Apache will respond with x-gzip
-     in the Content-Encoding header).
-     [Ronald Tschalaer <Ronald.Tschalaer@psi.ch>] PR#1772
-
-  *) Fix a memory leak on keep-alive connections.  [Igor Tatarinov]
-
-  *) Added mod_so module to support dynamic loading of modules on Unix
-     (like mod_dld for Win32). This replaces mod_dld.c. Use SharedModule
-     instead of AddModule in Configuration to build shared modules
-     [Sameer Parekh, Paul Sutton]
-
-  *) Minor cleanups to r->finfo handling in some modules.
-     [Dean Gaudet]
-
-  *) Abstract read()/write() to ap_read()/ap_write().
-     Makes it easier to add other types of IO code such as SFIO.
-     [Randy Terbush]
-
-  *) API: Generalize default_port manipulations to make support of
-     different protocols easier. [Ben Laurie, Randy Terbush]
-
-  *) There are many cases where users do not want Apache to form
-     self-referential urls using the "canonical" ServerName and Port.
-     The new UseCanonicalName directive (default on), if set to off
-     will cause Apache to use the client-supplied hostname and port.
-     API: Part of this change required a change to the construct_url()
-     prototype; and the addition of get_server_name() and
-     get_server_port().
-     [Michael Douglass <mikedoug@texas.net>, Dean Gaudet]
-     PR#315, 459, 485, 1433
-
-  *) Yet another rearrangement of the source tree.. now all the common
-     header files are in the src/include directory.  The -Imain -Iap
-     references in Makefiles have been changed to the simpler -Iinclude
-     instead.  In addition to simplifying the build a little bit, this
-     also makes it clear when a module is referencing something in a
-     other than kosher manner (e.g., the proxy including mod_mime.h).
-     Module-private header files (the proxy, mod_mime, the regex library,
-     and mod_rewrite) have not been moved to src/include; nor have
-     the OS-abstraction files.  [Ken Coar]
-
-  *) Fix a bug where r->hostname didn't have the :port stripped
-     from it.  [Dean Gaudet]
-
-  *) Tweaked the headers_out table size, and the subprocess_env
-     table size guess in rename_original_environment().  Added
-     MAKE_TABLE_PROFILE which can help discover make_table()
-     calls that use too small an initial guess, see alloc.c.
-     [Dean Gaudet]
-
-  *) Options and AllowOverride weren't properly merging in the main
-     server setting inside vhosts (only an issue when you have no
-     <Directory> or other section containing an Options that affects
-     a request).  Options +foo or -foo in the main_server wouldn't
-     affect the main_server's lookup defaults.  [Dean Gaudet]
-
-  *) Variable 'cwd' was being used pointlessly before being set.
-     [Ken Coar] PR#1738
-
-  *) r->allowed handling cleaned up in the standard modules.
-     [Dean Gaudet]
-
-  *) Some case-sensitivity issues cleaned up to be consistent with
-     RFC2068.  [Dean Gaudet]
-
-  *) SIGURG doesn't exist everywhere.
-     [Mark Andrew Heinrich <heinrich@tinderbox.Stanford.EDU>]
-
-  *) mod_unique_id was erroneously generating a second unique id when
-     an internal redirect occured.  Such redirects occur, for example,
-     when processing a DirectoryIndex match.  [Dean Gaudet]
-
-  *) API: table_add, table_merge, and table_set include implicit pstrdup()
-     of the key and value.  But in many cases this is not required
-     because the key/value is a constant, or the value has been built
-     by pstrcat() or other similar means.  New routines table_addn,
-     table_mergen, and table_setn have been added to the API, these
-     routines do not pstrdup() their arguments.  The core code and
-     standard modules were changed to take advantage of these routines.
-     The resulting server is up to 20% faster in some situations.
-
-     Note that it is easy to get code subtly wrong if you pass a key/value
-     which is in a pool other than the pool of the table.  The only
-     safe thing to do is to pass key/values which are in the pool of
-     the table, or in one of the ancestors of the pool of the table.
-     i.e. if the table is part of a subrequest, a value from the main
-     request's pool is OK since the subrequest pool is a sub_pool of the
-     main request's pool (and therefore has a lifespan at most as long as
-     the main pool).  There is debugging code which can detect improper
-     usage, enabled by defining POOL_DEBUG.  See alloc.c for more details.
-     [Dmitry Khrustalev <dima@bog.msu.su>, Dean Gaudet]
-
-  *) More mod_mime_magic cleanup:  fewer syscalls; should handle "files"
-     which don't exist on disk more gracefully; handles vhosts properly.
-     Update documentation to reflect the code -- if there's no
-     MimeMagicFile directive then the module is not enabled.
-     [Dean Gaudet]
-
-  *) PORT: Some older *nix dialects cannot automatically start scripts
-     which begin with a #! interpreter line (the shell starts the scripts
-     appropriately on these platforms). Apache now supports starting of
-     "hashbang-scripts" when the NEED_HASHBANG_EMUL define is set.
-     [Martin Kraemer, with code from peter@zeus.dialix.oz.au (Peter Wemm)
-     taken from tcsh]
-
-  *) API: "typedef array_header table" removed from alloc.h, folks should
-     have been writing to use table as if it were an opaque type, but even
-     some standard modules got this wrong.  By changing the definition
-     to "typedef struct table table" module authors will receive compile
-     time warnings that they're doing the wrong thing.  This change
-     facilitates future changes with more sophisticated table
-     structures.  Specifically, module authors should be using table_elts()
-     to get access to an array_header * for the table. [Dean Gaudet]
-
-  *) API: Renamed new_connection() to avoid namespace collision with LDAP
-     library routines.  [Ken Coar, Rasmus Lerdorf]
-
-  *) WIN32: mod_speling is now available on the Win32 platform.
-     [Marc Slemko]
-
-  *) For clarity the following compile time definition was changed:
-
-        SAFE_UNSERIALIZED_ACCEPT  ->   SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-
-     Also, for example, HAVE_MMAP would mean to use mmap() scoreboards
-     and not be a general notice that the OS has mmap(). Now the
-     HAVE_MMAP/SHMGET #defines strictly are informational that the
-     OS has that method of shared memory; the type to use for
-     the scoreboard is a seperate #define (USE_MMAP_SCOREBOARD
-     and USE_SHMGET_SCOREBOARD). This allows outside modules to
-     determine if shared memory is available and allows Apache
-     to determine the best method to use for the scoreboard.
-     [Jim Jagielski]
-
-  *) PORT: UnixWare 2.1.2 SMP appears to require USE_FCNTL_SERIALIZED_ACCEPT,
-     as do various earlier versions.  It should be safe on all versions.
-     Unixware 1.x appears to have the same SIGHUP bug as solaris does with
-     the slack code.  A few other cleanups for Unixware.
-     [Tom Hughes <thh@cyberscience.com>] PR#1082, PR#1282, PR#1499, PR#1553
-
-  *) PORT: A/UX can handle single-listen accepts without mutex
-     locking, so we add SINGLE_LISTEN_UNSERIALIZED_ACCEPT. [Jim Jagielski]
-
-  *) When die() happens we need to eat any request body if one exists.
-     Otherwise we can't continue with a keepalive session.  This shows up
-     as a POST problem with MSIE 4.0, typically against pages which are
-     authenticated.  [Roy Fielding] PR#1399
-
-  *) If you define SECURITY_HOLE_PASS_AUTHORIZATION then the Authorization
-     header will be passed to CGIs.  This is generally a security hole, so
-     it's not a default.  [Marc Slemko] PR#549
-
-  *) Fix Y2K problem with date printing in suexec log.
-     [Paul Eggert <eggert@twinsun.com>] PR#1343
-
-  *) WIN32 deserves a pid file.  [Ben Hyde]
-
-  *) suexec errors now include the errno/description.  [Marc Slemko] PR#1543
-
-  *) PORT: OSF/1 now uses USE_FLOCK_SERIALIZED_ACCEPT to solve PR#467.
-     The choice of flock vs. fcntl was made based on timings which showed that
-     even on non-NFS, non-exported filesystems fcntl() was an order of
-     magnitude slower.  It also uses SINGLE_LISTEN_UNSERIALIZED_ACCEPT so
-     that single socket users will see no difference. [Dean Gaudet] PR#467
-
-  *) "File does not exist" error message was erroneously including the
-     errno.  [Marc Slemko]
-
-  *) Improve the warning message generated when a client drops the
-     connection (hits stop button, etc.) during a send.  [Roy Fielding]
-
-  *) Defining GPROF will disable profiling in the parent and enable it
-     in the children.  If you're profiling under Linux this is pretty much
-     necessary because SIGPROF is lost across a fork(). [Dean Gaudet]
-
-  *) htdigest and htpasswd needed slight tweaks to work on OS/2 and WIN32.
-     [Brian Havard]
-
-  *) The NeXT cc (which is gcc hacked up) doesn't appear to support some
-     gcc functionality.  Work around it.
-     [Keith Severson <keith@sssd.navy.mil>] PR#1613
-
-  *) Some linkers complain when .o files contain no functions.
-     [Keith Severson <keith@sssd.navy.mil>] PR#1614
-
-  *) Some const declarations in mod_imap.c that were added for debugging
-     purposes caused some compilers heartburn without adding any
-     significant value, so they've been removed.  [Ken Coar]
-
-  *) The src/main/*.h header files have had #ifndef wrappers added to
-     insulate them against duplicate calls if they get included through
-     multiple paths (e.g., in .c files as well as other .h files).
-     [Ken Coar]
-
-  *) The libap routines now have a header file for their prototypes,
-     src/ap/ap.h, to ease their use in non-httpd applications.  [Ken Coar]
-
-  *) mod_autoindex with a plaintext header file would emit the <PRE>
-     start-tag before the HTML preamble, rather than after the preamble
-     but before the header file contents.  [John Van Essen <jve@gamers.org>]
-     PR#1667
-
-  *) SECURITY: Fix a possible buffer overflow in logresolve.  This is
-     only an issue on systems without a MAXDNAME define or where
-     the resolver returns domain names longer than MAXDNAME.  [Marc Slemko]
-
-  *) SECURITY: Eliminate possible buffer overflow in cfg_getline, which
-     is used to read various types of files such as htaccess and
-     htpasswd files.  [Marc Slemko]
-
-  *) SECURITY: Ensure that the buffer returned by ht_time is always
-     properly null terminated.  [Marc Slemko]
-
-  *) The "Connection" header could be sent back with multiple "close"
-     tokens.  Not an error, but a waste.
-     [Ronald.Tschalaer@psi.ch] PR#1683
-
-  *) mod_rewrite's RewriteLog should behave like mod_log_config, it
-     shouldn't force hostname lookups.  [Dean Gaudet] PR#1684
-
-  *) "basic" auth needs a case-insensitive comparison.
-     [Ronald.Tschalaer@psi.ch] PR#1666
-
-  *) For maximum portability, the environment passed to CGIs should
-     only contain variables whose names match the regex
-     /[a-zA-Z][a-zA-Z0-9_]*/.  This is now enforced by stamping
-     underscores over any character outside the regex.  This
-     affects HTTP_* variables, in a way that should be backward
-     compatible for all the standard headers; and affects variables
-     set with SetEnv/BrowserMatch and similar directives.
-     [Dean Gaudet]
-
-  *) mod_speling returned incorrect HREF's when an ambigous match
-     was found. Noticed by <robinton@amtrash.comlink.de> (Soeren Ziehe)
-     [robinton@amtrash.comlink.de (Soeren Ziehe), Martin Kraemer]
-
-  *) PORT: Apache now compiles & runs on an EBCDIC mainframe
-     (the Siemens BS2000/OSD family) in the POSIX subsystem
-     [Martin Kraemer]
-
-  *) PORT: Fix problem killing children when terminating.  Allow ^C
-     to shut down the server.  [Brian Havard]
-
-  *) pstrdup() is implicit in calls to table_* functions, so there's
-     no need to do it before calling.  Clean up a few cases.
-     [Marc Slemko, Dean Gaudet]
-
-  *) new -C and -c command line arguments
-     usage:
-     -C "directive" : process directive before reading config files
-     -c "directive" : process directive after reading config files
-     example:
-     httpd -C "PerlModule Apache::httpd_conf"
-     [Doug MacEachern, Martin Kraemer]
-
-  *) WIN32: Fix the execution of CGIs that are scripts and called 
-     with path info that does not have an '=' in.
-     (eg. http://server/cgi-bin/printenv?foobar)  
-     [Marc Slemko] PR#1591
-
-  *) WIN32: Fix a call to os_canonical_filename so it doesn't try to 
-     mess with fake filenames.  This fixes proxy caching on 
-     win32. PR#1265
-
-  *) SECURITY: General mod_include cleanup, including fixing several
-     possible buffer overflows and a possible infinite loop.
-     [Dean Gaudet, Marc Slemko]
-
-  *) SECURITY: Numerous changes to mod_imap in a general cleanup
-     including fixing a possible buffer overflow.  [Dean Gaudet]
-
-  *) WIN32: overhaul of multithreading code. Shutdowns are now graceful
-     (connections are not dropped). Code can handle graceful restarts
-     (but there is as yet no way to signal this to Apache). Various
-     other cleanups. [Paul Sutton]
-
-  *) The aplog_error changes specific to 1.3 introduced a buffer
-     overrun in the (now legacy) log_printf function.  Fixed.
-     [Dean Gaudet]
-
-  *) mod_digest didn't properly deal with proxy authentication.  It
-     also lacked a case-insensitive comparision of the "Digest"
-     token.  [Ronald Tschalaer <Ronald.Tschalaer@psi.ch>] PR#1599
-
-  *) A few cleanups in mod_status for efficiency.  [Dean Gaudet]
-
-  *) A few cleanups in mod_info to make it thread-safe, and remove an
-     off-by-5 bug that could hammer \0 on the stack. [Dean Gaudet]
-
-  *) no2slash() was O(n^2) in the length of the input.  Make it O(n).
-     [Dean Gaudet]
-
-  *) API: migration from strncpy() to our "enhanced" version called
-     ap_cpystrn() for performance and functionality reasons.
-     Located in libap.a.  [Jim Jagielski]
-
-  *) table_set() and table_unset() did not deal correctly with
-     multiple occurrences of the same key.
-     [Stephen Scheck <sscheck@infonex.net>, Ben Laurie] PR#1604
-
-  *) The AuthName must now be enclosed in quotes if it is to contain
-     spaces.  [Ken Coar] PR#1195
-
-  *) API: new function: ap_escape_quotes(). [Ken Coar] PR#1195
-
-  *) WIN32: Work around optimiser bug that killed ISAPI in release
-     versions. [Ben Laurie] PR#1533
-
-  *) PORT: Update the MPE port [Mark Bixby, Jim Jagielski]
-
-  *) Interim (slow) fix for p->sub_pool critical sections in
-     alloc.c (affects win32 only).  [Ben Hyde]
-
-  *) non-WIN32 was missing destroy_mutex definition.  [Ben Hyde]
-
-  *) send_fd_length() did not calculate total_bytes_sent properly.
-     [Ben Reser <breser@regnow.com>] PR#1366
-
-  *) The bputc() macro was not properly integrated with the chunking
-     code; in many cases modules using bputc() could cause completely
-     bogus chunked output.  (Typically this will show up as problems
-     with Internet Explorer 4.0 reading a page, but other browsers
-     having no problem.) [Dean Gaudet]
-
-  *) Create LARGE_WRITE_THRESHOLD define which determines how many
-     bytes have to be supplied to bwrite() before it will consider
-     doing a writev() to assemble multiple buffers in one system
-     call.  This is critical for modules such as mod_include,
-     mod_autoindex, mod_php3 which all use bputc()/bputs() of smaller
-     strings in some cases.  The result would be extra effort
-     setting up writev(), and in many cases extra effort building
-     chunks.  The default is 31, it can be overriden at compile
-     time. [Dean Gaudet]
-
-  *) Move the gid switching code into the child so that log files
-     and pid files are opened with the root gid.
-     [Gregory A Lundberg <lundberg@vr.net>]
-
-  *) WIN32: Check for binaries by looking for the executable header
-     instead of counting control characters.
-     [Jim Patterson <Jim.Patterson@Cognos.COM>] PR#1340
-
-  *) ap_snprintf() moved from main/util_snprintf.c to ap/ap_snprintf.c
-     so the functionality is available to applications other than the
-     server itself (like the src/support tools).  [Ken Coar]
-
-  *) ap_slack() moved out of main/util.c into ap/ap_slack.c as part of
-     the libap consolidation work.  [Ken Coar]
-
-  *) ap_snprintf() with a len of 0 behaved like sprintf().  This is not
-     useful, and isn't what the standards require.  Now it returns 0
-     and writes nothing.  [Dean Gaudet]
-
-  *) When an error occurs in fcntl() locking suggest the user look up
-     the docs for LockFile.  [Dean Gaudet]
-
-  *) Eliminate some dead code from writev_it_all().
-     [Igor Tatarinov <tatarino@prairie.NoDak.edu>]
-
-  *) mod_autoindex had an fread() without checking the result code.
-     It also wouldn't handle "AddIconByType (TXT,/icons/text.gif text/*"
-     (note the missing closing paren) properly.  [Dean Gaudet]
-
-  *) It appears the "257th byte" bug (see
-     htdocs/manual/misc/known_client_problems.html#257th-byte) can happen
-     at the 256th byte as well.  Fixed.  [Dean Gaudet]
-
-  *) PORT: Fix mod_mime_magic under OS/2, no support for block devices.
-     [Brian Havard]
-
-  *) Fix memory corruption caused by allocating auth usernames in the
-     wrong pool.  [Dean Gaudet] PR#1500
-
-  *) Fix an off-by-1, and an unterminated string error in
-     mod_mime_magic.  [Dean Gaudet]
-
-  *) Fix a potential SEGV problem in mod_negotiation when dealing
-     with type-maps.  [Dean Gaudet]
-
-  *) Better glibc support under Linux.  [Dean Gaudet] PR#1542
-
-  *) "RedirectMatch gone /" would cause a SIGSEGV. [Dean Gaudet] PR#1319
-
-  *) WIN32: avoid overflows during file canonicalisations.
-     [malcolm@mgdev.demon.co.uk] PR#1378
-
-  *) WIN32: set_file_slot() didn't detect absolute paths. [Ben Laurie]
-     PR#1511, 1508
-
-  *) WIN32: mod_status display header didn't match fields. [Ben Laurie]
-
-  *) The pthread_mutex_* functions return an error code, and don't
-     set errno.  [Igor Tatarinov <tatarino@prairie.NoDak.edu>]
-
-  *) WIN32: Allow spaces to prefix the interpreter in #! lines.
-     [Ben Laurie] PR#1101
-
-  *) WIN32: Cure file leak in CGIs. [Peter Tillemans <pti@net4all.be>] PR#1523
-
-  *) proxy_ftp: the directory listings generated by the proxy ftp module
-     now have a title in which the path components are clickable and allow
-     quick navigation to the clicked-on directory on the currently listed
-     ftp server. This also fixes a bug where the ".." directory links would
-     sometimes refer to the wrong directory.  [Martin Kraemer]
-
-  *) WIN32: Allocate the correct amount of memory for the scoreboard.
-     [Ben Hyde] PR#1387
-
-  *) WIN32: Only lowercase the part of the path that is real. [Ben Laurie]
-     PR#1505
-
-  *) Fix problems with timeouts in inetd mode and -X mode.  [Dean Gaudet]
-
-  *) Fix the spurious "(0)unknown error: mmap_handler: mmap failed"
-     error messages. [Ben Hyde]
-
-Changes with Apache 1.3b3
-
-  *) WIN32: Work around brain-damaged spawn calls that can't deal
-     with spaces and slashes.  [Ben Laurie]
-
-  *) WIN32: Fix the code so CGIs can use socket calls on Windows.  
-     The problem was that certain undocumented environment variables
-     needed for sockets to work under Win32 were not being passed.
-     [Frank Faubert <frank@sane.com>]
-
-  *) Add a "-V" command line flag to the httpd binary.  This 
-     flag shows some of the defines that Apache was compiled with.
-     It is useful for debugging purposes.  [Martin Kraemer]
-
-  *) Start separating the ap_*() routines into their own library, so they
-     can be used by items in src/support among other things.  
-     [Ken Coar] PR#512, 905, 1252, 1308 
-
-  *) Give a more informative error when no AuthType is set.
-     [Lars Eilebrecht]
-
-  *) Remove strtoul() use from mod_proxy because it isn't available
-     on all platforms.   [Marc Slemko] PR#1214
-
-  *) WIN32: Some Win32 systems terminated all responses after 16 kB. 
-     This turns out to be a bug in Winsock - select() doesn't always 
-     return the correct status.  [Ben Laurie]
-
-  *) Directives owned by http_core can now use the new check_cmd_context()
-     routine to ensure that they're not being used within a container
-     (e.g., <Directory>) where they're invalid.  [Martin Kraemer]
-
-  *) PORT: Recent changes made it necessary to add explicit prototype
-     for fgetc() and fgets() on SunOS 4.x.  [Martin Kraemer, Ben Hyde]
-
-  *) It was necessary to distinguish between resources which are
-     allocated in the parent, for cleanup in the parent, and resources
-     which are allocated in each child, for cleanup in each child.
-     A new pool was created which is passed to the module child_init
-     and child_exit functions; modules are free to register per-child
-     cleanups there.  This fixes a bug with reliable piped logs.
-     [Dean Gaudet]
-
-  *) mod_autoindex wasn't displaying the ReadmeName file at the bottom
-     unless it was also doing FancyIndexes, but it displayed the
-     HeaderName file at the top under all circumstances.  It now shows
-     the ReadmeName file for simple indices, too, as it should.  
-     [Ken Coar] PR#1373
-
-  *) http_core was mmap()ing even in cases where it wasn't going to
-     read the file.  [Ben Hyde <bhyde@gensym.com>]
-
-  *) Complete rewrite ;-) of mod_rewrite's URL rewriting engine:
-     Now the rewriting engine (the heart of mod_rewrite) is organized more
-     straight-forward, first time well documented and reduced to the really
-     essential parts. All redundant cases were stripped off and processing now
-     is the same for both per-server and per-directory context with only a
-     minimum difference (the prefix stripping in per-dir context). As a
-     side-effect some subtle restrictions and two recently discovered problems
-     are gone: Wrong escaping of QUERY_STRING on redirects in per-directory
-     context and restrictions on the substitution URL on redirects.
-     Additionally some minor source cleanups were done. 
-     [Ralf S. Engelschall] 
-
-  *) Lars Eilebrecht wrote a whole new set of Apache Vhost Internals
-     documentation, examples, explanations and caveats. They live in a new
-     subdirectory htdocs/manual/vhost/. [Lars Eilebrecht <sfx@unix-ag.org>]
-
-  *) If ap_slack fails to allocate above the low slack line it's a good
-     indication that further problems will occur; it's a better indication
-     than many external libraries give us when we actually run out of
-     descriptors.  So report it to the user once per restart.
-     [Dean Gaudet] PR#1181
-
-  *) Change mod_include and mod_autoindex to use Y2K-safe date formats
-     by default.  [Ken Coar]
-
-  *) Add a "SuppressColumnSorting" option to the IndexOptions list,
-     which will keep the column heading from being links for sorting
-     the display.  [Ken Coar, suggested by Brian Tiemann <btman@pacific.net>]
-     PR #1261
-
-  *) PORT: Update the LynxOS port.  [Marius Groeger <mag@sysgo.de>]
-
-  *) Fix logic error when issuing a mmap() failed message
-     with a non-zero MMAP_THRESHOLD.
-     [David Chambers <davidc@flosun.salk.edu>] PR#1294
-
-  *) Preserve handler value on ProxyPass'ed requests by not
-     calling find_types on a proxy'd request; fixes problems
-     where some ProxyPass'ed URLs weren't actually passed
-     to the proxy.
-     [Lars Eilebrecht] PR#870
-
-  *) Fix a byte ordering problem in mod_access which prevented
-     the old-style syntax (i.e. "a.b.c." to match a class C)
-     from working properly. [Dean Gaudet] PR#1248, 1328, 1384
-
-  *) Fix problem with USE_FLOCK_SERIALIZED_ACCEPT not working
-     properly. Each child needs to open the lockfile instead
-     of using the passed file-descriptor from the parent. 
-     [Jim Jagielski] PR#1056
-
-  *) Fix the error logging in mod_cgi; the recent error log changes
-     introduced a bug that prevented it from working correctly.
-     [M.D.Parker] PR#1352
-
-  *) Default to USE_FCNTL_SERIALIZED_ACCEPT on HPUX to properly 
-     handle multiple Listen directives.  [Marc Slemko] PR#872
-
-  *) Inherit a bugfix to fnmatch.c from FreeBSD sources.
-     ["[KOI8-R] áÎÄÒÅÊ þÅÒÎÏ×" <ache@nagual.pp.ru>] PR#1311
-
-  *) When a configuration parse complained about a bad directive,
-     the logger would use whatever (unrelated) value was in errno.
-     errno is now forced to EINVAL first in this case.  [Ken Coar]
-
-  *) A sed command in the Configure script pushed the edge of POSIXness,
-     breaking on some systems.  [Bhaba R.Misra <system@vt.edu>] PR#1368
-
-  *) Solaris >= 2.5 was totally broken due to a mess up using pthread
-     mutexes.  [Roy Fielding, Dean Gaudet]
-
-  *) OS/2 Port updated; it should be possible to build OS/2 from the same
-     sources as Unix now.  [Brian Havard <brianh@kheldar.apana.org.au>]
-
-  *) Fix a year formatting bug in mod_usertrack.
-     [Paul Eggert <eggert@twinsun.com>] PR#1342
-
-  *) A mild SIGTERM/SIGALRM race condition was eliminated.
-     [Dean Gaudet] PR#1211
-
-  *) Warn user that default path has changed if /usr/local/etc/httpd
-     is found on the system.  [Lars Eilebrecht]
-
-  *) Various mod_mime_magic bug fixes and cleanups: Uncompression
-     should work, it should work on WIN32, and a few resource
-     leaks and abort conditions are fixed.
-     [Dean Gaudet] PR#1205
-
-  *) PORT: On AIX 1.x files can't be named '@', fix the proxy cache
-     to use '%' instead of '@' in its encodings.
-     [David Schuler <schuld@btv.ibm.com>] PR#1317
-
-  *) Improve the warning message generated when the "server is busy".
-     [Dean Gaudet] PR#1293
-
-  *) PORT: All ports which don't otherwise define DEF_WANTHSREGEX will
-     get Spencer regex by default.  This is to avoid having to
-     discover bugs in operating system libraries.  [Dean Gaudet]
-
-  *) PORT: "Fix" PR#467 by generating warnings on systems which we have
-     not been able to get working USE_*_SERIALIZED_ACCEPT settings for.
-     Document this a bit more in src/PORTING.  [Dean Gaudet] PR#467
-
-  *) Ensure that one copy of config warnings makes it to the
-     error_log.  [Dean Gaudet]
-
-  *) Invent new structure and associated methods to handle config file
-     reading. Add "custom" hook to use config file cfg_getline() on
-     something which is not a FILE*  [Martin Kraemer]
-
-  *) Make single-exe Windows install. [Ben Laurie and Eric Esselink]
-
-  *) WIN32: Make CGI work under Win95. [Ben Laurie and Paul Sutton]
-
-  *) WIN32: Make index.html and friends work under Win95. [Ben Laurie]
-
-  *) PORT: Solaris 2.4 needs Spencer regex, the system regex is broken.
-     [John Line <jml4@cam.ac.uk>] PR#1321
-
-  *) Default pathname has been changed everywhere to /usr/local/apache
-     [Sameer <sameer@c2.net>]
-
-  *) PORT: AIX now uses USE_FCNTL_SERIALIZED_ACCEPT.
-     [David Bronder <David-Bronder@uiowa.edu>] PR#849
-
-  *) PORT: i386 AIX does not have memmove.
-     [David Schuler <schuld@btv.ibm.com>] PR#1267
-
-  *) PORT: HPUX now defaults to using Spencer regex.
-     [Philippe Vanhaesendonck <pvanhaes@be.oracle.com>,
-     Omar Del Rio <al112263@academ01.lag.itesm.mx>] PR#482, 1246
-
-  *) PORT: Some versions of NetBSD don't automatically define
-     __NetBSD__.  Workaround by defining NETBSD.
-     [Chris Craft <ccraft@cncc.cc.co.us>] PR#977
-
-  *) PORT: UnixWare 2.x requires -lgen for syslog.
-     [Hans Snijder <hs@meganet.nl>] PR#1249
-
-  *) PORT: ULTRIX appears to not have syslog.
-     [Lars Eilebrecht <Lars.Eilebrecht@unix-ag.org>]
-
-  *) PORT: Basic Gemini port (treat it like unixware212).
-     ["Pavel Yakovlev (Paul McHacker)" <hac@tomcat.olly.ru>]
-
-  *) PORT: All SVR4 systems now use NET_SIZE_T = size_t, and
-     use USE_SHMGET_SCOREBOARD.
-     [Martin Kraemer]
-
-  *) Various improvements in detecting config file errors (missing closing
-     directives for <Directory>, <Files> etc. blocks, prohibiting global
-     server settings in <VirtualHost> blocks, flagging unhandled multiple
-     arguments to <Directory>, <Files> etc.)
-     [Martin Kraemer]
-
-  *) Add support to suexec wrapper program for mod_unique_id's UNIQUE_ID
-     variable to provide this one to suexec'd CGIs, too.
-     [M.D.Parker <mdpc@netcom.com>] PR#1284
-
-  *) New support tool: src/support/split-logfile, a sample Perl script which
-     splits up a combined access log into separate files based on the
-     name of the virtual host (listed first in the log records by "%v").
-     [Ken Coar]
-
-Changes with Apache 1.3b2 (there is no 1.3b1)
-
-  *) TestCompile was not passing $LIBS [Dean Gaudet]
-
-  *) Makefile.tmpl was not using $CFLAGS in the link phase. 
-     [Martin Kraemer]
-
-  *) Add debugging code to alloc.c.  Defining ALLOC_DEBUG provides a
-     rudimentary memory debugger which can be used on live servers with
-     low impact -- it sets all allocated and freed memory bytes to 0xa5.
-     Defining ALLOC_USE_MALLOC will cause the alloc code to use malloc()
-     and free() for each object.  This is far more expensive and should
-     only be used for testing with tools such as Electric Fence and
-     Purify.  See main/alloc.c for more details.  [Dean Gaudet]
-
-  *) Configure uses a sh trap and didn't set its exitcode properly.
-     [Dean Gaudet] PR#1159
-
-  *) Yet another vhost revamp.  Add the NameVirtualHost directive which
-     explicitly lists the ip:port pairs that are to be used for name-vhosts.
-     From a given ip:port, regardless what the Host: header is, you can
-     only reach the vhosts defined on that ip:port.  The precedence of
-     vhosts was reversed to match other precedences in the config --
-     the earlier vhosts override the later vhosts.  All vhost matching was
-     moved into http_vhost.[ch].  [Dean Gaudet]
-
-  *) ap_inline can be used to force inlining.  GNUC __attribute__() can
-     be used for whatever reason is appropriate (i.e. format() warnings
-     for printf style functions).  Both are enabled only with
-     gcc >= 2.7.x (so that we have fewer support issues with older
-     versions).  [Dean Gaudet]
-
-  *) Fix support for Proxy Authentication (we were testing the response
-     status too early). [Marc Slemko]
-
-  *) CoreDumpDirectory directive directs where the core file is
-     written when a SIGSEGV, SIGBUS, SIGABORT or SIGABRT are
-     received.  [Marc Slemko, Dean Gaudet]
-
-  *) PORT: Support for Atari MINT.
-     [Jan Paul Schmidt <Jan.P.Schmidt@mni.fh-giessen.de>]
-
-  *) When booting, apache will now detach itself from stdin, stdout,
-     and stderr.  stderr will not be detached until after the config
-     files have been read so you will be able to see initial error
-     messages.  After that all errors are logged in the error_log.
-     This makes it more convenient to start apache via rsh, ssh,
-     or crontabs.  [Dean Gaudet] PR#523
-
-  *) mod_proxy was sending HTTP/1.1 responses to ftp requests by mistake.
-     Also removed the auto-generated link to www.apache.org that was the
-     source of so many misdirected bug reports.  [Roy Fielding, Marc Slemko]
-
-  *) send_fb would not detect aborted connections in some situations.
-     [Dean Gaudet]
-
-  *) mod_include would use uninitialized data when parsing certain
-     expressions involving && and ||. [Brian Slesinsky] PR#1139
-
-  *) mod_imap should only handle GET methods.  [Jay Bloodworth]
-
-  *) suexec.c wouldn't build without -DLOG_EXEC. [Jason A. Dour]
-
-  *) mod_autoindex improperly counted &escapes; as more than one
-     character in the description.  It also improperly truncated
-     descriptions that were exactly the maximum length.
-     [Martin Kraemer]
-
-  *) RedirectMatch was not properly escaping the result (PR#1155).  Also
-     "RedirectMatch /advertiser/(.*) $1" is now permitted.
-     [Dean Gaudet]
-
-  *) mod_include now uses symbolic names to check for request success
-     and return HTTP errors, and correctly handles all types of
-     redirections (previously it only did temporary redirect correctly).
-     [Ken Coar, Roy Fielding]
-
-  *) mod_userdir was modifying r->finfo in cases where it wasn't setting
-     r->filename.  Since those two are meant to be in sync with each other
-     this is a bug.  ["Paul B. Henson" <henson@intranet.csupomona.edu>]
-
-  *) PORT: Support Unisys SVR4, whose uname returns mostly useless data.
-     ["Kaufman, Steven E" <Steven.Kaufman@unisys.com>]
-
-  *) Inetd mode (which is buggy) uses timeouts without having setup the
-     jmpbuffer. [Dean Gaudet] PR#1064
-
-  *) Work around problem under Linux where a child will start looping
-     reporting a select error over and over.
-     [Rick Franchuk <rickf@transpect.net>] PR#1107, 987, 588
-
-  *) Fixed error in proxy_util.c when looping through multiple host IP
-     addresses. [Lars Eilebrecht] PR#974
-
-  *) If BUFFERED_LOGS is defined then mod_log_config will do atomic
-     buffered writes -- that is, it will buffer up to PIPE_BUF (i.e. 4k)
-     bytes before writing, but it will never split a log entry across a
-     buffer boundary.  [Dean Gaudet]
-
-  *) API: the short_score record has been split into two pieces, one which
-     the parent writes on, and one which the child writes on.  As part of
-     this change the get_scoreboard_info() function was removed, and
-     scoreboard_image was exported.  This change fixes a race condition
-     in file based scoreboard systems, and speeds up changes involving the
-     scoreboard in earlier 1.3 development.  [Dean Gaudet]
-
-  *) API: New register_other_child() API (see http_main.h) which allows
-     modules to register children with the parent for maintenance.  It
-     is disabled by defining NO_OTHER_CHILD.  [Dean Gaudet]
-
-  *) API: New piped_log API (see http_log.h) which implements piped logs,
-     and will use register_other_child to implement reliable piped logs
-     when it is available.  The reliable piped logs part can be disabled
-     by defining NO_RELIABLE_PIPED_LOGS.  At the moment reliable piped
-     logs is only available on Unix. [Dean Gaudet]
-
-  *) API: set_last_modified() broken into set_last_modified(), set_etag(), and
-     meets_conditions().  This allows conditional HTTP selection to be
-     handled separately from the storing of the header fields, and provides
-     the ability for CGIs to set their own ETags for conditional checking.
-     [Ken Coar, Roy Fielding]  PR#895
-
-  *) Changes to mod_log_config to allow naming of format strings.
-     Format nicknames are defined with "LogFormat fmt nickname", and can
-     be used with "LogFormat nickname" and "CustomLog logtarget nickname".
-     [Ken Coar]
-
-  *) New module, "mod_speling", which can help find files even when 
-     the URL is slightly misspelled. [Martin Kraemer, Alexei Kosut]
-
-  *) API: New function child_terminate() triggers the child process to
-     exit, while allowing the child finish what it needs to for the
-     current request first.  
-     [Doug MacEachern, Alexei Kosut]
-
-  *) Windows now defaults to using full status reports with mod_status.
-     [Alexei Kosut] PR #1094
-
-  *) *Really* disable all mod_rewrite operations if the engine is off.
-     Some things (like RewriteMaps) were checked/performed even if they
-     weren't supposed to be.  [Ken Coar] PR #991
-
-  *) Implement a new timer scheme which eliminates the need to call alarm() all
-     the time.  Instead a counter in the scoreboard for each child is used to
-     show when the child has made forward progress.  The parent samples this
-     counter every scoreboard maintenance cycle, and issues SIGALRM if no
-     progress has been made in the timeout period.  This reduces the static
-     request best-case syscall count to 22 from 29.  This scheme is only
-     used by systems with memory-based scoreboards.  [Dean Gaudet]
-
-  *) The proxy now properly handles CONNECT requests which are sent
-     to proxy servers when using ProxyRemote.  [Marc Slemko] PR#1024
-
-  *) A script called apachectl has been added to the support 
-     directory.  This script allows you to do things such as 
-     "apachectl start" and "apachectl restart" from the command
-     line.  [Marc Slemko]
-
-  *) Modules and core routines are now put into libraries, which
-     simplifies the link line tremendously (among other advantages).
-     [Paul Sutton]
-
-  *) Some of the MD5 names defined in Apache have been renamed to have
-     an `ap_' prefix to avoid conflicts with routines supplied by
-     external libraries.  [Ken Coar]
-
-  *) Removal of mod_auth_msql.c from the distribution. There are many
-     other options for databases today. Rather than offer one option,
-     offer none at this time. mod_auth_msql and other SQL database
-     authentication modules can be found at the Apache Module Registry.
-     http://modules.apache.org/ It would be nice to offer a generic
-     mod_auth_sql option in the near future.
-
-  *) PORT: BeOS support added [Alexei Kosut]
-
-  *) Configure no longer accepts the -make option, since it creates
-     Makefile on the fly based on Makefile.tmpl and Configuration.
-
-  *) Apache now gracefully shuts down when it receives a SIGTERM, instead
-     of forcibly killing off all its processes and exiting without
-     cleaning up. [Alexei Kosut]
-
-  *) API: A new field in the request_rec, r->mtime, has been added to
-     avoid gratuitous parsing of date strings.  It is intended to hold
-     the last-modified date of the resource (if applicable).  An
-     update_mtime() routine has also been added to advance it if
-     appropriate.  [Roy Fielding, Ken Coar]
-
-  *) SECURITY: If a htaccess file can not be read due to bad permissions,
-     deny access to the directory with a HTTP_FORBIDDEN.  The previous
-     behavior was to ignore the htaccess file if it could not be read.
-     This change may make some setups with unreadable htaccess files
-     stop working.  [Marc Slemko] PR#817
-
-  *) Add aplog_error() providing a mechanism to define levels of
-     verbosity to the server error logging. This addition also provides
-     the ability to log errors using syslogd. Error logging is configurable
-     on a per-server basis using the LogLevel directive. Conversion
-     of log_*() in progress. [Randy Terbush]
-
-  *) Further enhance aplog_error() to not log filename, line number, and
-     errno information when it isn't applicable. [Ken Coar, Dean Gaudet]
-
-  *) WIN32: Canonicalise filenames under Win32. Short filenames are
-     converted to long ones. Backslashes are converted to forward
-     slashes. Case is converted to lower. Parts of URLs that do not
-     correspond to files are left completely alone. [Ben Laurie]
-
-  *) PORT: 2 new OSs added to the list of ports:
-      Encore's UMAX V: Arieh Markel <amarkel@encore.com>
-      Acorn RISCiX: Stephen Borrill <sborrill@xemplar.co.uk>
-
-  *) Add the server version (SERVER_VERSION macro) to the "server
-     configured and running" entry in the error_log.  Also build an
-     object file at link-time that contains the current time
-     (SERVER_BUILT global const char[]), and include that in the
-     message.  [Ken Coar]
-
-  *) Set r->headers_out when sending responses from the proxy.
-     This fixes things such as the logging of headers sent from
-     the proxy.  [Marc Slemko] PR#659
-
-  *) support/httpd_monitor is no longer distributed because the 
-     scoreboard should not be file based if at all possible. Use
-     mod_status to see current server snapshot.
-
-  *) (set_file_slot): New function, allowing auth directives to be
-     independent of the server root, so the server documents can be
-     moved to a different directory or machine more easily.
-     [David J. MacKenzie]
-
-  *) If no TransferLog is given explicitly, decline
-     to log.  This supports coexistence with other logging modules,
-     such as the custom one that UUNET uses. [David J. MacKenzie]
-
-  *) Check for titles in server-parsed HTML files.
-     Ignore leading newlines and returns in titles.  The old behavior
-     of replacing a newline after <title> with a space causes the
-     title to be misaligned in the listing. [David J. MacKenzie]
-
-  *) Change mod_cern_meta to be configurable on a per-directory basis.
-     [David J. MacKenzie]
-
-  *) Add 'Include' directive to allow inclusion of configuration
-     files within configuration files. [Randy Terbush]
-
-  *) Proxy errors on connect() are logged to the error_log (nothing
-     new); now they include the IP address and port that failed
-     (*that's* new).   [Ken Coar, Marc Slemko] PR#352
-
-  *) Various architectures now define USE_MMAP_FILES which causes
-     the server to use mmap() for static files.  There are two
-     compile-time tunables MMAP_THRESHOLD (minimum number of bytes
-     required to use mmap(), default is 0), and MMAP_SEGMENT_SIZE (maximum
-     number of bytes written in one cycle from a single mmap()d object,
-     default 32768).  [Dean Gaudet]
-
-  *) API: Added post_read_request API phase which is run right after reading
-     the request from a client, or right after an internal redirect.  It is
-     useful for modules setting environment variables that depend only on
-     the headers/contents of the request.  It does not run during subrequests
-     because subrequests inherit pretty much everything from the main
-     request. [Dean Gaudet]
-
-  *) Added mod_unique_id which is used to generate a unique identifier for
-     each hit, available in the environment variable UNIQUE_ID.
-     [Dean Gaudet]
-
-  *) init_modules is now called after the error logs have been opened.  This
-     allows modules to emit information messages into the error logs.
-     [Dean Gaudet]
-
-  *) Fixed proxy-pass-through feature of mod_rewrite; Added error logging
-     information for case where proxy module is not available. [Marc Slemko]
-
-  *) PORT: Apache has need for mutexes to serialize its children around
-     accept.  In prior versions either fcntl file locking or flock file
-     locking were used.  The method is chosen by the definition of
-     USE_xxx_SERIALIZED_ACCEPT in conf.h.  xxx is FCNTL for fcntl(),
-     and FLOCK for flock().  New options have been added:
-        - SYSVSEM to use System V style semaphores
-        - PTHREAD to use POSIX threads (appears to work on Solaris only)
-        - USLOCK to use IRIX uslock
-     Based on timing various techniques, the following changes were made
-     to the defaults:
-        - Linux 2.x uses flock instead of fcntl
-        - Solaris 2.x uses pthreads
-        - IRIX uses SysV semaphores -- however multiprocessor IRIX boxes
-          work far faster if you -DUSE_USLOCK_SERIALIZED_ACCEPT
-     [Dean Gaudet, Pierre-Yves Kerembellec <Pierre-Yves.Kerembellec@vtcom.fr>,
-     Martijn Koster <m.koster@pobox.com>]
-
-  *) PORT: The semantics of accept/select make it very desirable to use
-     mutexes to serialize accept when multiple Listens are in use.  But
-     in the case where only a single socket is open it is sometimes
-     redundant to serialize accept().  Not all unixes do a good job with
-     potentially dozens of children blocked on accept() on the same
-     socket.  It's now possible to define SINGLE_LISTEN_UNSERIALIZED_ACCEPT and
-     the server will avoid serialization when listening on only one socket,
-     and use serialization when listening on multiple sockets.
-     [Dean Gaudet] PR#467
-
-  *) Configure changes: TestLib replaced by TestCompile, which has
-     some additional capability (such as doing a sanity check of
-     the compiler and flags selected); the version of Solaris is now
-     available via the #define value of SOLARIS2; IRIX n32bit libs
-     now supported and selectable by new Configuration Rule: IRIXN32;
-     We no longer default to -O2 optimization.  [Jim Jagielski]
-
-  *) Updated Configure: Configuration now uses AddModule to specify
-     module source or binary file location, relative to src directory.
-     Modules can be dropped into modules/extra, or in their own 
-     directory, and modules can come with a Makefile or Configure can 
-     create one.  Modules can add compiler or library information to 
-     generated Makefiles. [Paul Sutton]
-
-  *) Source core re-organisation: distributed modules are now in 
-     modules/standard. All other source code is in main. OS-specific
-     code is in os/{unix,emx,win32} directories. [Paul Sutton]
-
-  *) mod_browser has been removed, since it's replaced by mod_setenvif.
-     [Ken Coar]
-
-  *) Fix another long-standing bug in sub_req_lookup_file where it would
-     happily skip past access checks on subdirectories looked up with
-     relative paths.  (It's used by mod_dir, mod_negotiation,
-     and mod_include.) [Dean Gaudet]
-
-  *) directory_walk optimization to reduce an O(N*M) loop to O(N+M) where
-     N is the number of <Directory> sections, and M is the number of
-     components in the filename of an object.
-
-     To achieve this optimization the following config changes were made:
-        - Wildcards (* and ?, not the regex forms) in <Directory>s,
-          <Files>s, and <Location>s now treat a slash as a special
-          character.  For example "/home/*/public_html" previously would
-          match "/home/a/andrew/public_html", now it only matches things
-          like "/home/bob/public_html".  This mimics /bin/sh behaviour.
-        - It's possible now to use [] wildcarding in <Directory>, <Files>
-          or <Location>.
-        - Regex <Directory>s are applied after all non-regex <Directory>s.
-
-    [Dean Gaudet]
-
-  *) Fix a bug introduced in 1.3a1 directory_walk regarding .htaccess files
-     and corrupted paths.  [Dean Gaudet]
-
-  *) Enhanced and cleaned up the URL rewriting engine of mod_rewrite:
-     First the grouped parts of RewriteRule pattern matches (parenthesis!) can
-     be accessed now via backreferences $1..$9 in RewriteConds test-against
-     strings in addition to RewriteRules subst string. Second the grouped
-     parts of RewriteCond pattern matches (parenthesis!) can be accessed now
-     via backreferences %1..%9 both in following RewriteCond test-against
-     strings and RewriteRules subst string. This provides maximum flexibility
-     through the use of backreferences.
-     Additionally the rewriting engine was cleaned up by putting common
-     code to the new expand_backrefs_inbuffer() function. 
-     [Ralf S. Engelschall]
-
-  *) When merging the main server's <Directory> and <Location> sections into
-     a vhost, put the main server's first and the vhost's second.  Otherwise
-     the vhost can't override the main server.  [Dean Gaudet] PR#717
-
-  *) The <Directory> code would merge and re-merge the same section after
-     a match was found, possibly causing problems with some modules.
-     [Dean Gaudet]
-
-  *) ip-based vhosts are stored and queried using a hashing function, which
-     has been shown to improve performance on servers with many ip-vhosts.
-     Some other changes had to be made to accommodate this:
-        - the * address for vhosts now behaves like _default_
-        - the matching process now is:
-            - match an ip-vhost directly via hash (possibly matches main
-              server)
-            - if that fails, just pretend it matched the main server
-            - if so far only the main server has been matched, perform
-              name-based lookups (ServerName, ServerAlias, ServerPath)
-              *only on name-based vhosts*
-            - if they fail, look for _default_ vhosts
-     [Dean Gaudet, Dave Hankins <dhankins@sugarat.net>]
-
-  *) dbmmanage overhaul:
-     - merge dbmmanage and dbmmanage.new functionality, remove dbmmanage.new 
-     - tie() to AnyDBM_File which will use one of DB_File, NDBM_File or
-       GDBM_File (-ldb, -lndbm, -lgdbm) (trying each in that order)
-     - provide better seed for rand
-     - prompt for password as per getpass(3) (turn off echo, read from
-       /dev/tty, etc.)
-     - use "newstyle" crypt based on $Config{osname} ($^O)
-     - will not add a user if already in database, use new `update' command
-       instead
-     - added `check' command to check a users' password
-     - added `import' command to convert existing password text-files or 
-       dbm files exported with `view'
-     - more descriptive usage, general cleanup, 'use strict' clean, etc.
-     [Doug MacEachern]
-
-  *) Added psocket() which is a pool form of socket(), various places within
-     the proxy weren't properly blocking alarms while registering the cleanup
-     for its sockets.  bclose() now uses pclose() and pclosesocket().  There
-     was a bug where the client socket was being close()d twice due a still
-     registered cleanup.  [Dean Gaudet]
-
-  *) A few cleanups were made to reduce time(), getpid(), and signal() calls.
-     [Dean Gaudet]
-
-  *) PORT: AIX >= 4.2 requires -lm due to libc changes.
-     [Jason Venner <jason@idiom.com>] PR#667
-
-  *) Enable ``=""'' for RewriteCond directives to match against
-     the empty string. This is the preferred way instead of ``^$''.
-     [Ralf S. Engelschall]
-
-  *) Fixed an infinite loop in mod_imap for references above the server root
-     [Dean Gaudet] PR#748
-
-  *) mod_proxy now has a ReceiveBufferSize directive, similar to
-     SendBufferSize, so that the TCP window can be set appropriately
-     for LFNs. [Phillip A. Prindeville]
-
-  *) mod_browser has been replaced by the more general mod_setenvif
-     (courtesy of Paul Sutton).  BrowserMatch* directives are still
-     available, but are now joined by SetEnvIf*, UnSetEnvIf*, and
-     UnSetEnvIfZero directives.  [Ken Coar]
-
-  *) "HostnameLookups double" forces double-reverse DNS to succeed in
-     order for remote_host to be set (for logging, or for the env var
-     REMOTE_HOST).  The old define MAXIMUM_DNS has been deprecated.
-     [Dean Gaudet]
-
-  *) mod_access overhaul:
-     - Now understands network/netmask syntax (i.e.  10.1.0.0/255.255.0.0)
-       and cidr syntax (i.e. 10.1.0.0/16).  PR#762
-     - Critical path was sped up by pre-computing a few things at config time.
-     - The undocumented syntax "allow user-agents" was removed,
-       the replacement is "allow from env=foobar" combined with mod_browser.
-     - When used with hostnames it now forces a double-reverse lookup
-       no matter what the directory settings are.  This double-reverse
-       doesn't affect any of the other routines that use the remote
-       hostname.  In particular it's still passed to CGIs and the log
-       without the double-reverse check.  Related PR#860.
-     [Dean Gaudet]
-
-  *) When a large bwrite() occurs (larger than the internal buffer size),
-     while there is already something in the buffer, apache will combine
-     the large write and the buffer into a single writev().  (This is
-     in anticipation of using mmap() for reading files.)
-     [Dean Gaudet]
-
-  *) In obscure cases where a partial socket write occurred while chunking,
-     Apache would omit the chunk header/footer on the next block.  Cleaned
-     up other bugs/inconsistencies in error conditions in buff.c.  Fixed
-     a bug where a long pause in DNS lookups could cause the last packet
-     of a response to be unduly delayed.  [Roy Fielding, Dean Gaudet]
-
-  *) API: Added child_exit function to module structure.  This is called
-     once per "heavy-weight process" just before a server child exit()'s 
-     e.g. when max_requests_per_child is reached, etc.
-     [Doug MacEachern, Dean Gaudet]
-
-  *) mod_include cleanup showed that handle_else was being used to handle
-     endif.  It didn't cause problems, but it was cleaned up too.
-     [Howard Fear]
-
-  *) mod_cern_meta would attempt to find meta files for the directory itself
-     in some cases, but not in others.  It now avoids it in all cases.
-     [Dean Gaudet]
-
-  *) mod_mime_magic would core dump if there was a decompression error.
-     [Martin Kraemer <Martin.Kraemer@mch.sni.de>] PR#904
-
-  *) PORT: some variants of DGUX require -lsocket -lnsl
-     [Alexander L Jones <alex@systems-options.co.uk>] PR#732
-
-  *) mod_autoindex now allows sorting of FancyIndexed directory listings
-     by the various fields (name, size, et cetera), either in ascending
-     or descending order.  Just click on the column header.  [Ken Coar]
-
-  *) PORT: Various tweaks to eliminate pointer-int casting warnings on 64-bit
-     CPUs like the Alpha.  Apache still stores ints in pointers, but that's
-     the relatively safe direction.  [Dean Gaudet] PR#344
-
-  *) PORT: QNX mmap() support for faster/more reliable scoreboard handling.
-     [Igor N Kovalenko <infoh@mail.wplus.net>] PR#683
-
-  *) child_main avoids an unneeded call to select() when there is only one
-     listening socket.  [Dean Gaudet]
-
-  *) In the event that the server is starved for idle servers it will
-     spawn 1, then 2, then 4, ..., then 32 servers each second,
-     doubling each second.  It'll also give a warning in the errorlog
-     since the most common reason for this is a poor StartServers
-     setting.  The define MAX_SPAWN_RATE can be used to raise/lower
-     the maximum.  [Dean Gaudet]
-
-  *) Apache now provides an effectively unbuffered connection for
-     CGI scripts.  This means that data will be sent to the client
-     as soon as the CGI pauses or stops output; previously, Apache would
-     buffer the output up to a fixed buffer size before sending, which
-     could result in the user viewing an empty page until the CGI finished
-     or output a complete buffer.  It is no longer necessary to use an
-     "nph-" CGI to get unbuffered output.  Given that most CGIs are written
-     in a language that by default does buffering (e.g. perl) this
-     shouldn't have a detrimental effect on performance.
-
-     "nph-" CGIs, which formerly provided a direct socket to the client
-     without any server post-processing, were not fully compatible with
-     HTTP/1.1 or SSL support.  As such they would have had to implement
-     the transport details, such as encryption or chunking, in order
-     to work properly in certain situations.  Now, the only difference
-     between nph and non-nph scripts is "non-parsed headers".
-     [Dean Gaudet, Sameer Parekh, Roy Fielding]
-
-  *) If a BUFF is switched from buffered to unbuffered reading the first
-     bread() will return whatever remained in the buffer prior to the
-     switch. [Dean Gaudet]
-
-Changes with Apache 1.3a1
-
-  *) Added another Configure helper script: TestLib. It determines
-     if a specified library exists.  [Jim Jagielski]
-
-  *) PORT: Allow for use of n32bit libraries under IRIX 6.x
-     [derived from patch from Jeff Hayes <jhayes@aw.sgi.com>]
-     PR#721
-
-  *) PORT: Some architectures use size_t for various lengths in network
-     functions such as accept(), and getsockname().  The definition
-     NET_SIZE_T is used to control this. [Dean Gaudet]
-
-  *) PORT: Linux: Attempt to detect glibc based systems and include crypt.h
-     and -lcrypt.  Test for various db libraries (dbm, ndbm, db) when
-     mod_auth_dbm or mod_auth_db are included.  [Dean Gaudet]
-
-  *) PORT: QNX doesn't have initgroups() which support/suexec.c uses.
-     [Igor N Kovalenko <infoh@mail.wplus.net>]
-
-  *) "force-response-1.0" now only applies to requests which are HTTP/1.0 to
-     begin with.  "nokeepalive" now works for HTTP/1.1 clients.  Added
-     "downgrade-1.0" which causes Apache to pretend it received a 1.0.
-     [Dean Gaudet] related PR#875
-
-  *) API: Correct child_init() slot declaration from int to void, to
-     match the init() declaration.  Update mod_example to use the new
-     hook.  [Ken Coar]
-
-  *) added transport handle slot (t_handle) to the BUFF structure
-     [Doug MacEachern]
-
-  *) get_client_block() returns wrong length if policy is
-     REQUEST_CHUNKED_DECHUNK.
-     [Kenichi Hori <ken@d2.bs1.fc.nec.co.jp>] PR#815
-
-  *) Support the image map format of FrontPage.  For example:
-        rect /url.hrm 10 20 30 40
-     ["Chris O'Byrne" <obyrne@iol.ie>] PR#807
-
-  *) PORT: -lresolv and -lsocks were in the wrong order for Solaris.
-     ["Darren O'Shaughnessy" <darren@aaii.oz.au>] PR#846
-
-  *) AddModuleInfo directive for mod_info which allows you to annotate
-     the output of mod_info.  ["Lou D. Langholtz" <ldl@usi.utah.edu>]
-
-  *) Added NoProxy directive to avoid using ProxyRemote for selected
-     addresses.  Added ProxyDomain directive to cause unqualified
-     names to be qualified by redirection.
-     [Martin Kraemer <Martin.Kraemer@mch.sni.de>]
-
-  *) Support Proxy Authentication, and don't pass the Proxy-Authorize
-     header to the remote host in the proxy. [Sameer Parekh and
-     Wallace]
-
-  *) Upgraded mod_rewrite from 3.0.6+ to latest officially available version
-     3.0.9. This upgrade includes: fixed deadlooping on rewriting to same
-     URLs, fixed rewritelog(), fixed forced response code handling on
-     redirects from within .htaccess files, disabled pipe locking under
-     braindead SunOS 4.1.x, allow env variables to be set even on rules with
-     no substitution, bugfixed situations where HostnameLookups is off, made
-     mod_rewrite more thread-safe for NT port and fixed problem when creating
-     an empty query string via "xxx?".
-         This update also removes the copyright of Ralf S. Engelschall,
-     i.e. now mod_rewrite no longer has a shared copyright. Instead is is
-     exclusively copyrighted by the Apache Group now. This happened because
-     the author now has gifted mod_rewrite exclusively to the Apache Group and 
-     no longer maintains an external version.
-     [Ralf S. Engelschall]
-
-  *) API: Added child_init function to module structure.  This is called
-     once per "heavy-weight process" before any requests are handled.
-     See http_config.h for more details.  [Dean Gaudet]
-
-  *) Anonymous_LogEmail was logging on each subrequest.
-     [Dean Gaudet] PR#421, 868
-
-  *) API: Added is_initial_req() which tests if the request being
-     processed is the initial request, or a subrequest.
-     [Doug MacEachern]
-
-  *) Extended SSI (mod_include) now handles additional relops for
-     string comparisons (<, >, <=, and >=).  [Bruno Wolff III] PR#41
-
-  *) Configure fixed to correctly propagate user-selected options and
-     settings (such as CC and OPTIM) to Makefiles other than
-     src/Makefile (notably support/Makefile).  [Ken Coar] PR#666, #834
-
-  *) IndexOptions SuppressHTMLPreamble now causes the actual HTML of
-     directory indices to start with the contents of the HeaderName file
-     if there is one.  If there isn't one, the behaviour is unchanged.
-     [Ken Coar, Roy Fielding, Andrey A. Chernov]
-
-  *) WIN32: Modules can now be dynamically loaded DLLs using the
-     LoadModule/LoadFile directives. Note that module DLLs must be
-     compiled with the multithreaded DLL version of the runtime library.
-     [Alexei Kosut and Ben Laurie]
-
-  *) Automatic indexing removed from mod_dir and placed into mod_autoindex.
-     This allows the admin to completely remove automatic indexing
-     from the server, while still supporting the basic functions of
-     trailing-slash redirects and DirectoryIndex files.  Note that if
-     you're carrying over an old Configuration file and you use directory
-     indexing then you'll want to add:
-
-     Module autoindex_module    mod_autoindex.o
-
-     before mod_dir in your Configuration.  [Dean Gaudet]
-
-  *) popendir/pclosedir created to properly protect directory scanning.
-     [Dean Gaudet] PR#525
-
-  *) AliasMatch, ScriptAliasMatch and RedirectMatch directives added,
-     giving regex support to mod_alias. <DirectoryMatch>, <LocationMatch>
-     and <FilesMatch> sections added to succeed <DirectoryMatch ~>, etc...
-     [Alexei Kosut]
-
-  *) The AccessFileName directive can now take more than one filename.
-     ["Lou D. Langholtz" <ldl@usi.utah.edu>]
-
-  *) The new mod_mime_magic can be used to "magically" determine the type
-     of a file if the extension is unknown.  Based on the unix file(1)
-     command.  [Ian Kluft <ikluft@cisco.com>]
-
-  *) We now determine and display the time spent processing a
-     request if desired.  [Jim Jagielski]
-
-  *) mod_status: PID field of "dead" child slots no longer displays
-     main httpd process's PID.  [Jim Jagielski]
-
-  *) Makefile.nt added - to build all the bits from the command line:
-        nmake -f Makefile.nt
-         Doesn't yet work properly. [Ben Laurie]
-
-  *) Default text of 404 error is now "Not Found" rather than the
-     potentially misleading "File Not Found".  [Ken Coar]
-
-  *) CONFIG: "HostnameLookups" now defaults to off because it is far better
-     for the net if we require people that actually need this data to
-     enable it.  [Linus Torvalds]
-
-  *) directory_walk() is an expensive function, keep a little more state to
-     avoid needless string counting.  Add two new functions make_dirstr_parent
-     and make_dirstr_prefix which replace all existing uses of make_dirstr.
-     The new functions are a little less general than make_dirstr, but
-     work more efficiently (less memory, less string counting).
-     [Dean Gaudet]
-
-  *) EXTRA_LFLAGS was changed to EXTRA_LDFLAGS (and LFLAGS was changed
-     to LDFLAGS) to avoid complications with lex rules in make files.
-     [Dean Gaudet] PR#372
-
-  *) run_method optimized to avoid needless scanning over NULLs in the
-     module list.  [Dean Gaudet]
-
-  *) Revamp of (unix) scoreboard management code such that it avoids
-     unnecessary traversals of the scoreboard on each hit.  This is
-     particularly important for high volume sites with a large
-     HARD_SERVER_LIMIT.  Some of the previous operations were O(n^2),
-     and are now O(n).  See also SCOREBOARD_MAINTENANCE_INTERVAL in
-     httpd.h. [Dean Gaudet]
-
-  *) In configurations using multiple Listen statements it was possible for
-     busy sockets to starve other sockets of service.  [Dean Gaudet]
-
-  *) Added hook so standalone_main can be replaced at compile time
-     (define STANDALONE_MAIN)
-     [Doug MacEachern]
-
-  *) Lowest-level read/write functions in buff.c will be replaced with
-     the SFIO library calls sfread/sfwrite if B_SFIO is defined at
-     compile time.  The default sfio discipline will behave as apache
-     would without sfio compiled in.
-     [Doug MacEachern]
-
-  *) Enhance UserDir directive (mod_userdir) to accept a list of
-     usernames for the 'disable' keyword, and add 'enable user...' to
-     selectively *en*able userdirs if they're globally disabled.
-     [Ken Coar]
-
-  *) If NETSCAPE_DBM_COMPAT is defined in EXTRA_CFLAGS then Apache
-     will work with Netscape dbm files.  (dbmmanage will probably not
-     work however.) [Alexander Spohr <aspohr@netmatic.com>] PR#444
-
-  *) Add a ListenBacklog directive to control the backlog parameter
-     passed to listen().  Also change the default to 511 from 512.
-     [Marc Slemko]
-
-  *) API: A new handler response DONE which informs apache that the
-     request has been handled and it can finish off quickly, similar to
-     how it handles errors. [Rob Hartill]
-
-  *) Turn off chunked encoding after sending terminating chunk/footer
-     so that we can't do it twice by accident. [Roy Fielding]
-
-  *) mod_expire also issues Cache-Control: max-age headers.
-     [Rob Hartill]
-
-  *) API: Added kill_only_once option for free_proc_chain so that it won't
-     aggressively try to kill off specific children.  For fastcgi.
-     [Stanley Gambarin <gambarin@OpenMarket.com>]
-
-  *) mod_auth deals with extra ':' delimited fields.  [Marc Slemko]
-
-  *) Added IconHeight and IconWidth to mod_dir's IndexOptions directive.
-     When used together, these cause mod_dir to emit HEIGHT and WIDTH
-     attributes in the FancyIndexing IMG tags.  [Ken Coar]
-
-  *) PORT: Sequent and SONY NEWS-OS support added.  [Jim Jagielski]
-
-  *) PORT: Added Windows NT support
-     [Ben Laurie and Ambarish Malpani <ambarish@valicert.com>]
-
-Changes with Apache 1.2.6
-
-  *) mod_include when using XBitHack Full would send ETags in addition to
-     sending Last-Modifieds.  This is incorrect HTTP/1.1 behaviour.
-     [Dean Gaudet] PR#1133
-
-  *) SECURITY: When a client connects to a particular port/addr, and
-     gives a Host: header ensure that the virtual host requested can
-     actually be reached via that port/addr.  [Ed Korthof <ed@organic.com>]
-
-  *) Support virtual hosts with wildcard port and/or multiple ports
-     properly.  [Ed Korthof <ed@organic.com>]
-
-  *) Fixed some case-sensitivity issues according to RFC2068.
-     [Dean Gaudet]
-
-  *) Set r->allowed properly in mod_asis.c, mod_dir.c, mod_info.c,
-     and mod_include.c.  [Dean Gaudet]
-
-  *) Variable 'cwd' was being used pointlessly before being set.
-     [Ken Coar] PR#1738
-
-  *) SIGURG doesn't exist on all platforms.
-     [Mark Andrew Heinrich <heinrich@tinderbox.Stanford.EDU>]
-
-  *) When an error occurs during a POST, or other operation with a
-     request body, the body has to be read from the net before allowing
-     a keepalive session to continue.  [Roy Fielding] PR#1399
-
-  *) When an error occurs in fcntl() locking suggest the user look up
-     the docs for LockFile.  [Dean Gaudet]
-
-  *) table_set() and table_unset() did not deal correctly with
-     multiple occurrences of the same key. [Stephen Scheck
-     <sscheck@infonex.net>, Ben Laurie] PR#1604
-
-  *) send_fd_length() did not calculate total_bytes_sent properly in error
-     cases.  [Ben Reser <breser@regnow.com>] PR#1366
-
-  *) r->connection->user was allocated in the wrong pool causing corruption
-     in some cases when used with mod_cern_meta.  [Dean Gaudet] PR#1500
-
-  *) mod_proxy was sending HTTP/1.1 responses to ftp requests by mistake.
-     Also removed the auto-generated link to www.apache.org that was the
-     source of so many misdirected bug reports.  [Roy Fielding, Marc Slemko]
-
-  *) Multiple "close" tokens may have been set in the "Connection"
-     header, not an error, but a waste.
-     [Ronald.Tschalaer@psi.ch] PR#1683
-
-  *) "basic" and "digest" auth tokens should be tested case-insensitive.
-     [Ronald.Tschalaer@psi.ch] PR#1599, PR#1666
-
-  *) It appears the "257th byte" bug (see
-     htdocs/manual/misc/known_client_problems.html#257th-byte) can happen
-     at the 256th byte as well.  Fixed.  [Dean Gaudet]
-
-  *) mod_rewrite would not handle %3f properly in some situations.
-     [Ralf Engelschall]
-
-  *) Apache could generate improperly chunked HTTP/1.1 responses when
-     the bputc() or rputc() functions were used by modules (such as
-     mod_include).  [Dean Gaudet]
-
-  *) #ifdef wrap a few #defines in httpd.h to make life easier on
-     some ports.  [Ralf Engelschall]
-
-  *) Fix MPE compilation error in mod_usertrack.c.  [Mark Bixby]
-
-  *) Quote CC='$(CC)' to improve recurse make calls.  [Martin Kraemer]
-
-  *) Avoid B_ERROR redeclaration on sysvr4 systems.  [Martin Kraemer]
-
-Changes with Apache 1.2.5
-
-  *) SECURITY: Fix a possible buffer overflow in logresolve.  This is
-     only an issue on systems without a MAXDNAME define or where 
-     the resolver returns domain names longer than MAXDNAME.  [Marc Slemko]
-
-  *) Fix an improper length in an ap_snprintf call in proxy_date_canon().
-     [Marc Slemko]
-
-  *) Fix core dump in the ftp proxy when reading incorrectly formatted
-     directory listings.  [Marc Slemko]
-
-  *) SECURITY: Fix possible minor buffer overflow in the proxy cache.
-     [Marc Slemko]
-
-  *) SECURITY: Eliminate possible buffer overflow in cfg_getline, which
-     is used to read various types of files such as htaccess and 
-     htpasswd files.  [Marc Slemko]
-
-  *) SECURITY: Ensure that the buffer returned by ht_time is always
-     properly null terminated.  [Marc Slemko]
-
-  *) SECURITY: General mod_include cleanup, including fixing several
-     possible buffer overflows and a possible infinite loop.  This cleanup
-     was done against 1.3 code and then backported to 1.2, the result
-     is a large difference (due to indentation cleanup in 1.3 code).
-     Users interested in seeing a smaller set of relevant differences
-     should consider comparing against src/modules/standard/mod_include.c
-     from the 1.3b3 release.  Non-indentation changes to mod_include
-     between 1.2 and 1.3 were minimal.  [Dean Gaudet, Marc Slemko]
-
-  *) SECURITY: Numerous changes to mod_imap in a general cleanup
-     including fixing a possible buffer overflow.  This cleanup also
-     was done with 1.3 code as a basis, see the the previous note
-     about mod_include.  [Dean Gaudet]
-
-  *) SECURITY: If a htaccess file can not be read due to bad 
-     permissions, deny access to the directory with a HTTP_FORBIDDEN.  
-     The previous behavior was to ignore the htaccess file if it could not
-     be read.  This change may make some setups with unreadable
-     htaccess files stop working.  PR#817  [Marc Slemko]
-
-  *) SECURITY: no2slash() was O(n^2) in the length of the input.  
-     Make it O(n).  This inefficiency could be used to mount a denial 
-     of service attack against the Apache server.  Thanks to 
-     Michal Zalewski <lcamtuf@boss.staszic.waw.pl> for reporting
-     this.  [Dean Gaudet]
-
-  *) mod_include used uninitialized data for some uses of && and ||.
-     [Brian Slesinsky <bslesins@wired.com>] PR#1139
-
-  *) mod_imap should decline all non-GET methods.
-     [Jay Bloodworth <jay@pathways.sde.state.sc.us>]
-
-  *) suexec.c wouldn't build without -DLOG_EXEC. [Jason A. Dour]
-
-  *) mod_userdir was modifying r->finfo in cases where it wasn't setting
-     r->filename.  Since those two are meant to be in sync with each other
-     this is a bug.  ["Paul B. Henson" <henson@intranet.csupomona.edu>]
-
-  *) mod_include did not properly handle all possible redirects from sub-
-     requests.  [Ken Coar]
-
-  *) Inetd mode (which is buggy) uses timeouts without having setup the
-     jmpbuffer. [Dean Gaudet] PR#1064
-
-  *) Work around problem under Linux where a child will start looping
-     reporting a select error over and over.
-     [Rick Franchuk <rickf@transpect.net>] PR#1107
-
-Changes with Apache 1.2.4
-
-  *) The ProxyRemote change in 1.2.3 introduced a bug resulting in the proxy
-     always making requests with the full-URI instead of just the URI path.
-     [Marc Slemko, Roy Fielding]
-
-  *) Add -lm for AIX versions >= 4.2 to allow Apache to link properly
-     on this platform.  [Marc Slemko]
-
-Changes with Apache 1.2.3
-
-  *) The request to a remote proxy was mangled if it was generated as the
-     result of a ProxyPass directive. URL schemes other than http:// were not
-     supported when ProxyRemote was used. PR#260, PR#656, PR#699, PR#713,
-     PR#812 [Lars Eilebrecht]
-
-  *) Fixed proxy-pass-through feature of mod_rewrite; Added error logging
-     information for case where proxy module is not available. [Marc Slemko]
-
-  *) Force proxy to always respond as HTTP/1.0, which it was failing to
-     do for errors and cached responses.  [Roy Fielding]
-
-  *) PORT: Improved support for ConvexOS 11.  [Jeff Venters]
-
-Changes with Apache 1.2.2 [not released]
-
-  *) Fixed another long-standing bug in sub_req_lookup_file where it would
-     happily skip past access checks on subdirectories looked up with relative
-     paths.  (It's used by mod_dir, mod_negotiation, and mod_include.)
-     [Dean Gaudet]
-
-  *) Add lockfile name to error message printed out when
-     USE_FLOCK_SERIALIZED_ACCEPT is defined.
-     [Marc Slemko]
-
-  *) Enhanced the chunking and error handling inside the buffer functions.
-     [Dean Gaudet, Roy Fielding]
-
-  *) When merging the main server's <Directory> and <Location> sections into
-     a vhost, put the main server's first and the vhost's second.  Otherwise
-     the vhost can't override the main server.  [Dean Gaudet] PR#717
-
-  *) The <Directory> code would merge and re-merge the same section after
-     a match was found, possibly causing problems with some modules.
-     [Dean Gaudet]
-
-  *) Fixed an infinite loop in mod_imap for references above the server root.
-     [Dean Gaudet] PR#748
-
-  *) mod_include cleanup showed that handle_else was being used to handle
-     endif.  It didn't cause problems, but it was cleaned up too.
-     [Howard Fear]
-
-  *) Last official synchronization of mod_rewrite with author version (because
-     mod_rewrite is now directly developed by the author at the Apache Group):
-     o added diff between mod_rewrite 3.0.6+ and 3.0.9
-       minus WIN32/NT stuff, but plus copyright removement.
-       In detail:
-       - workaround for detecting infinite rewriting loops
-       - fixed setting of env vars when "-" is used as subst string
-       - fixed forced response code on redirects (PR#777)
-       - fixed cases where r->args is ""
-       - kludge to disable locking on pipes under braindead SunOS
-       - fix for rewritelog in cases where remote hostname is unknown
-       - fixed totally damaged request_rec walk-back loop
-     o remove static from local data and add static to global ones.
-     o replaced ugly proxy finding stuff by simple
-       find_linked_module("mod_proxy") call.
-     o added missing negation char on rewritelog()
-     o fixed a few comment typos
-     [Ralf S. Engelschall]
-
-  *) Anonymous_LogEmail was logging on each subrequest.
-     [Dean Gaudet] PR#421, PR#868
-
-  *) "force-response-1.0" now only applies to requests which are HTTP/1.0 to
-     begin with.  "nokeepalive" now works for HTTP/1.1 clients.  Added
-     "downgrade-1.0" which causes Apache to pretend it received a 1.0.
-     Additionally mod_browser now triggers during translate_name to workaround
-     a deficiency in the header_parse phase.
-     [Dean Gaudet] PR#875
-
-  *) get_client_block() returns wrong length if policy is 
-     REQUEST_CHUNKED_DECHUNK.
-     [Kenichi Hori <ken@d2.bs1.fc.nec.co.jp>] PR#815
-
-  *) Properly treat <files> container like other containers in mod_info.
-     [Marc Slemko] PR#848
-
-  *) The proxy didn't treat the "Host:" keyword of the host header as case-
-     insensitive.  The proxy would corrupt the first line of a response from
-     an HTTP/0.9 server.  [Kenichi Hori <ken@d2.bs1.fc.nec.co.jp>] PR#813,814
-
-  *) mod_include would log some bogus values occasionally.
-     [Skip Montanaro <skip@calendar.com>, Marc Slemko] PR#797
-
-  *) PORT: The slack fd changes in 1.2.1 introduced a problem with SIGHUP
-     under Solaris 2.x (up through 2.5.1).  It has been fixed.
-     [Dean Gaudet] PR#832
-
-  *) API: In HTTP/1.1, whether or not a request message contains a body
-     is independent of the request method and based solely on the presence
-     of a Content-Length or Transfer-Encoding.  Therefore, our default
-     handlers need to be prepared to read a body even if they don't know
-     what to do with it; otherwise, the body would be mistaken for the
-     next request on a persistent connection.  discard_request_body()
-     has been added to take care of that.  [Roy Fielding] PR#378
-
-  *) API: Symbol APACHE_RELEASE provides a numeric form of the Apache
-     release version number, such that it always increases along the
-     same lines as our source code branching.  [Roy Fielding]
-
-  *) Minor oversight on multiple variants fixed.  [Paul Sutton] PR#94
-
-Changes with Apache 1.2.1
-
-  *) SECURITY: Don't serve file system objects unless they are plain files,
-     symlinks, or directories.  This prevents local users from using pipes
-     or named sockets to invoke programs for an extremely crude form of
-     CGI.  [Dean Gaudet]
-
-  *) SECURITY: HeaderName and ReadmeName were settable in .htaccess and
-     could contain "../" allowing a local user to "publish" any file on
-     the system.  No slashes are allowed now.  [Dean Gaudet]
-
-  *) SECURITY: It was possible to violate the symlink Options using mod_dir
-     (headers, readmes, titles), mod_negotiation (type maps), or
-     mod_cern_meta (meta files).  [Dean Gaudet]
-
-  *) SECURITY: Apache will refuse to run as "User root" unless
-     BIG_SECURITY_HOLE is defined at compile time.  [Dean Gaudet]
-
-  *) CONFIG: If a symlink pointed to a directory then it would be disallowed
-     if it contained a .htaccess disallowing symlinks.  This is contrary
-     to the rule that symlink permissions are tested with the symlink
-     options of the parent directory.  [Dean Gaudet] PR#353
-
-  *) CONFIG: The LockFile directive can be used to place the serializing
-     lockfile in any location.  It previously defaulted to /usr/tmp/htlock.
-     [Somehow it took four of us: Randy Terbush, Jim Jagielski, Dean Gaudet,
-     Marc Slemko]
-
-  *) Request processing now retains state of whether or not the request
-     body has been read, so that internal redirects and subrequests will
-     not try to read it twice (and block). [Roy Fielding]
-
-  *) Add a placeholder in modules/Makefile to avoid errors with certain
-     makes. [Marc Slemko]
-
-  *) QUERY_STRING was unescaped in mod_include, it shouldn't be.
-     [Dean Gaudet] PR#644
-
-  *) mod_include was not properly changing the current directory.
-     [Marc Slemko] PR#742
-
-  *) Attempt to work around problems with third party libraries that do not
-     handle high numbered descriptors (examples include bind, and
-     solaris libc).  On all systems apache attempts to keep all permanent
-     descriptors above 15 (called the low slack line).  Solaris users
-     can also benefit from adding -DHIGH_SLACK_LINE=256 to EXTRA_CFLAGS
-     which keeps all non-FILE * descriptors above 255.  On all systems
-     this should make supporting large numbers of vhosts with many open
-     log files more feasible.  If this causes trouble please report it,
-     you can disable this workaround by adding -DNO_SLACK to EXTRA_CFLAGS.
-     [Dean Gaudet] various PRs
-
-  *) Related to the last entry, network sockets are now opened before
-     log files are opened.  The only known case where this can cause
-     problems is under Solaris with many virtualhosts and many Listen
-     directives.  But using -DHIGH_SLACK_LINE=256 described above will
-     work around this problem.  [Dean Gaudet]
-
-  *) USE_FLOCK_SERIALIZED_ACCEPT is now default for FreeBSD, A/UX, and
-     SunOS 4.
-
-  *) Improved unix error response logging.  [Marc Slemko]
-
-  *) Update mod_rewrite from 3.0.5 to 3.0.6.  New ruleflag
-     QSA=query_string_append.  Also fixed a nasty bug in per-dir context:
-     when a URL http://... was used in conjunction with a special
-     redirect flag, e.g. R=permanent, the permanent status was lost.
-     [Ronald Tschalaer <Ronald.Tschalaer@psi.ch>, Ralf S. Engelschall]
-
-  *) If an object has multiple variants that are otherwise equal Apache
-     would prefer the last listed variant rather than the first.
-     [Paul Sutton] PR#94
-
-  *) "make clean" at the top level now removes *.o.  [Dean Gaudet] PR#752
-
-  *) mod_status dumps core in inetd mode.  [Marc Slemko and Roy Fielding]
-     PR#566
-
-  *) pregsub had an off-by-1 in its error checking code. [Alexei Kosut]
-
-  *) PORT: fix rlim_t problems with AIX 4.2. [Marc Slemko] PR#333
-
-  *) PORT: Update UnixWare support for 2.1.2.
-     [Lawrence Rosenman <ler@lerctr.org>] PR#511
-
-  *) PORT: NonStop-UX [Joachim Schmitz <schmitz_joachim@tandem.com>] PR#327
-
-  *) PORT: Update ConvexOS support for 11.5.
-     [David DeSimone <fox@convex.com>] PR#399
-
-  *) PORT: Support for DEC cc compiler under ULTRIX.
-     ["P. Alejandro Lopez-Valencia" <alejolo@ideam.gov.co>] PR#388
-
-  *) PORT: Support for Maxion/OS SVR4.2 Real Time Unix. [no name given] PR#383
-
-  *) PORT: Workaround for AIX 3.x compiler bug in http_bprintf.c.  
-     [Marc Slemko] PR#725
-
-  *) PORT: fix problem compiling http_bprintf.c with gcc under SCO
-     [Marc Slemko] PR#695
-
-Changes with Apache 1.2
-
-Changes with Apache 1.2b11
-
-  *) Fixed open timestamp fd in proxy_cache.c [Chuck Murcko]
-
-  *) Added undocumented perl SSI mechanism for -DUSE_PERL_SSI and mod_perl.
-     [Doug MacEachern, Rob Hartill]
-
-  *) Proxy needs to use hard_timeout instead of soft_timeout when it is
-     reading from one buffer and writing to another, at least until it has
-     a custom timeout handler.  [Roy Fielding and Petr Lampa]
-
-  *) Fixed problem on IRIX with servers hanging in IdentityCheck,
-     apparently due to a mismatch between sigaction and setjmp.
-     [Roy Fielding] PR#502
-
-  *) Log correct status code if we timeout before receiving a request (408)
-     or if we received a request-line that was too long to process (414).
-     [Ed Korthof and Roy Fielding] PR#601
-
-  *) Virtual hosts with the same ServerName, but on different ports, were
-     not being selected properly.  [Ed Korthof]
-
-  *) Added code to return the requested IP address from proxy_host2addr()
-     if gethostbyaddr() fails due to reverse DNS lookup problems. Original
-     change submitted by Jozsef Hollosi <hollosi@sbcm.com>.
-     [Chuck Murcko] PR#614
-
-  *) If multiple requests on a single connection are used to retrieve
-     data from different virtual hosts, the virtual host list would be
-     scanned starting with the most recently used VH instead of the first,
-     causing most virtual hosts to be ignored.
-     [Paul Sutton and Martin Mares] PR#610
-
-  *) The OS/2 handling of process group was broken by a porting patch for
-     MPE, so restored prior code for OS/2.  [Roy Fielding and Garey Smiley]
-
-  *) Inherit virtual server port from main server if none (or "*") is
-     given for VirtualHost.  [Dean Gaudet] PR#576
-
-  *) If the lookup for a DirectoryIndex name with content negotiation
-     has found matching variants, but none are acceptable, return the
-     negotiation result if there are no more DirectoryIndex names to lookup.
-     [Petr Lampa and Roy Fielding]
-
-  *) If a soft_timeout occurs after keepalive is set, then the main child
-     loop would try to read another request even though the connection
-     has been aborted.  [Roy Fielding]
-
-  *) Configure changes: Allow for whitespace at the start of a
-     Module declaration. Also, be more understanding about the
-     CC=/OPTIM= format in Configuration. Finally, fix compiler
-     flags if using HP-UX's cc compiler. [Jim Jagielski]
-
-  *) Subrequests and internal redirects now inherit the_request from the
-     original request-line. [Roy Fielding]
-
-  *) Test for error conditions before creating output header fields, since
-     we don't want the error message to include those fields.  Likewise,
-     reset the content_language(s) and content_encoding of the response
-     before generating or redirecting to an error message, since the new
-     message will have its own Content-* definitions. [Dean Gaudet]
-
-  *) Restored the semantics of headers_out (headers sent only with 200..299
-     and 304 responses) and err_headers_out (headers sent with all responses).
-     Avoid the overhead of copying tables if err_headers_out is empty
-     (the usual case).  [Roy Fielding]
-
-  *) Fixed a couple places where a check for the default Content-Type was
-     not properly checking both the value configured by the DefaultType
-     directive and the DEFAULT_TYPE symbol in httpd.h.  Changed the value
-     of DEFAULT_TYPE to match the documented default (text/plain).
-     [Dean Gaudet] PR#506
-
-  *) Escape the HTML-sensitive characters in the Request-URI that is
-     output for each child by mod_status. [Dean Gaudet and Ken Coar] PR#501
-
-  *) Properly initialize the flock structures used by the mutex locking
-     around accept() when USE_FCNTL_SERIALIZED_ACCEPT is defined.
-     [Marc Slemko]
-
-  *) The method for determining PATH_INFO has been restored to the pre-1.2b
-     (and NCSA httpd) definition wherein it was the extra path info beyond
-     the CGI script filename.  The environment variable FILEPATH_INFO has
-     been removed, and instead we supply the original REQUEST_URI to any
-     script that wants to be Apache-specific and needs the real URI path.
-     This solves a problem with existing scripts that use extra path info
-     in the ScriptAlias directive to pass options to the CGI script.
-     [Roy Fielding]
-
-  *) The _default_ change in 1.2b10 will change the behaviour on configs
-     that use multiple Listen statements for listening on multiple ports.
-     But that change is necessary to make _default_ consistent with other
-     forms of <VirtualHost>.  It requires such configs to be modified
-     to use <VirtualHost _default_:*>.  The documentation has been
-     updated.  [Dean Gaudet] PR#530
-
-  *) If an ErrorDocument CGI script is used to respond to an error
-     generated by another CGI script which has already read the message
-     body of the request, the server would block trying to read the
-     message body again.  [Rob Hartill]
-
-  *) signal() replacement conflicted with a define on QNX (and potentially
-     other platforms). Fixed. [Ben Laurie] PR#512
-
-Changes with Apache 1.2b10
-
-  *) Allow HTTPD_ROOT, SERVER_CONFIG_FILE, DEFAULT_PATH, and SHELL_PATH
-     to be configured via -D in Configuration.  [Dean Gaudet] PR#449
-
-  *) <VirtualHost _default_:portnum> didn't work properly.  [Dean Gaudet]
-
-  *) Added prototype for mktemp() for SUNOS4 [Marc Slemko]
-
-  *) In mod_proxy.c, check return values for proxy_host2addr() when reading
-     config, in case the hostent struct returned is trash.
-     [Chuck Murcko] PR #491
-
-  *) Fixed the fix in 1.2b9 for parsing URL query info into args for CGI
-     scripts.  [Dean Gaudet, Roy Fielding, Marc Slemko]
-
-Changes with Apache 1.2b9  [never announced]
-
-  *) Reset the MODULE_MAGIC_NUMBER to account for the unsigned port
-     changes and in anticipation of 1.2 final release.  [Roy Fielding]
-
-  *) Fix problem with scripts not receiving a SIGPIPE when client drops
-     the connection (e.g., when user presses Stop).  Apache will now stop
-     trying to send a message body immediately after an error from write.
-     [Roy Fielding and Nathan Kurz] PR#335
-
-  *) Rearrange Configuration.tmpl so that mod_rewrite has higher priority
-     than mod_alias, and mod_alias has higher priority than mod_proxy;
-     rearranged other modules to enhance understanding of their purpose
-     and relative order (and maybe even reduce some overhead).
-     [Roy Fielding and Sameer Parekh]
-
-  *) Fix graceful restart.  Eliminate many signal-related race
-     conditions in both forms of restart, and in SIGTERM.  See
-     htdocs/manual/stopping.html for details on stopping and
-     restarting the parent.  [Dean Gaudet]
-
-  *) Fix memory leaks in mod_rewrite, mod_browser, mod_include.  Tune
-     memory allocator to avoid a behaviour that required extra blocks to
-     be allocated.  [Dean Gaudet]
-
-  *) Allow suexec to access files relative to current directory but not
-     above.  (Excluding leading / or any .. directory.)  [Ken Coar]
-     PR#269, 319, 395
-
-  *) Fix suexec segfault when group doesn't exist. [Gregory Neil Shapiro]
-     PR#367, 368, 354, 453
-
-  *) Fix the above fix: if suexec is enabled, avoid destroying r->url
-     while obtaining the /~user and save the username in a separate data
-     area so that it won't be overwritten by the call to getgrgid(), and
-     fix some misuse of the pool string allocation functions.  Also fixes
-     a general problem with parsing URL query info into args for CGI scripts.
-     [Roy Fielding] PR#339, 367, 354, 453
-
-  *) Fix IRIX warning about bzero undefined. [Marc Slemko]
-
-  *) Fix problem with <Directory proxy:...>. [Martin Kraemer] PR#271
-
-  *) Corrected spelling of "authoritative".  AuthDBAuthoratative became
-     AuthDBAuthoritative. [Marc Slemko] PR#420
-
-  *) MaxClients should be at least 1. [Lars Eilebrecht] PR#375
-
-  *) The default handler now logs invalid methods or URIs (i.e. PUT on an
-     object that can't be PUT, or FOOBAR for some method FOOBAR that
-     apache doesn't know about at all).  Log 404s that occur in mod_include.
-     [Paul Sutton, John Van Essen]
-
-  *) If a soft timeout (or lingerout) occurs while trying to flush a
-     buffer or write inside buff.c or fread'ing from a CGI's output,
-     then the timeout would be ignored. [Roy Fielding] PR#373
-
-  *) Work around a bug in Netscape Navigator versions 2.x, 3.x and 4.0b2's
-     parsing of headers.  If the terminating empty-line CRLF occurs starting
-     at the 256th or 257th byte of output, then Navigator will think a normal
-     image is invalid.  We are guessing that this is because their initial
-     read of a new request uses a 256 byte buffer. We check the bytes written
-     so far and, if we are about to tickle the bug, we instead insert a
-     padding header of eminent bogosity. [Roy Fielding and Dean Gaudet] PR#232
-
-  *) Fixed SIGSEGV problem when a DirectoryIndex file is also the source
-     of an external redirection.  [Roy Fielding and Paul Sutton]
-
-  *) Configure would create a broken Makefile if the configuration file
-     contained a commented-out Rule.  [Roy Fielding]
-
-  *) Promote per_dir_config and subprocess_env from the subrequest to the
-     main request in mod_negotiation.  In particular this fixes a bug
-     where <Files> sections wouldn't properly apply to negotiated content.
-     [Dean Gaudet]
-
-  *) Fix a potential deadlock in mod_cgi script_err handling.
-     [Ralf S. Engelschall]
-
-  *) rotatelogs zero-pads the logfile names to improve alphabetic sorting.
-     [Mitchell Blank Jr]
-
-  *) Updated mod_rewrite to 3.0.4: Fixes HTTP redirects from within
-     .htaccess files because the RewriteBase was not replaced correctly.
-     Updated mod_rewrite to 3.0.5: Fixes problem with rewriting inside
-     <Directory> sections missing a trailing /.  [Ralf S. Engelschall]
-
-  *) Clean up Linux settings in conf.h by detecting 2.x versus 1.x.  For
-     1.x the settings are those of pre-1.2b8.  For 2.x we include
-     USE_SHMGET_SCOREBOARD (scoreboard in shared memory rather than file) and
-     HAVE_SYS_RESOURCE_H (enable the RLimit commands).
-     [Dean Gaudet] PR#336, PR#340
-
-  *) Redirect did not preserve ?query_strings when present in the client's
-     request.  [Dean Gaudet]
-
-  *) Configure was finding non-modules on EXTRA_LIBS. [Frank Cringle] PR#380
-
-  *) Use /bin/sh5 on ULTRIX.  [P. Alejandro Lopez-Valencia] PR#369
-
-  *) Add UnixWare compile/install instructions.  [Chuck Murcko]
-
-  *) Add mod_example (illustration of API techniques).  [Ken Coar]
-
-  *) Add macro for memmove to conf.h for SUNOS4. [Marc Slemko]
-
-  *) Improve handling of directories when filenames have spaces in them.
-     [Chuck Murcko]
-
-  *) For hosts with multiple IP addresses, try all additional addresses if
-     necessary to get a connect. Fail only if hostent address list is
-     exhausted. [Chuck Murcko]
-
-  *) More signed/unsigned port fixes.  [Dean Gaudet]
-
-  *) HARD_SERVER_LIMIT can be defined in the Configuration file now.
-     [Dean Gaudet]
-
-Changes with Apache 1.2b8
-
-  *) suexec.c doesn't close the log file, allowing CGIs to continue writing
-     to it.  [Marc Slemko]
-
-  *) The addition of <Location> and <File> directives made the
-     sub_req_lookup_simple() function bogus, so we now handle
-     the special cases directly.  [Dean Gaudet]
-
-  *) We now try to log where the server is dumping core when a fatal
-     signal is received.  [Ken Coar]
-
-  *) Improved lingering_close by adding a special timeout, removing the
-     spurious log messages, removing the nonblocking settings (they
-     are not needed with the better timeout), and adding commentary
-     about the NO_LINGCLOSE and USE_SO_LINGER issues.  NO_LINGCLOSE is
-     now the default for SunOS4, UnixWare, NeXT, and IRIX.  [Roy Fielding]
-
-  *) Send error messages about setsockopt failures to the server error
-     log instead of stderr.  [Roy Fielding]
-
-  *) Fix loopholes in proxy cache expiry vis a vis alarms. [Brian Moore]
-
-  *) Stopgap solution for CGI 3-second delay with server-side includes: if
-     processing a subrequest, allocate memory from r->main->pool instead
-     of r->pool so that we can avoid waiting for free_proc_chain to cleanup
-     in the middle of an SSI request.  [Dean Gaudet] PR #122
-
-  *) Fixed status of response when POST is received for a nonexistent URL
-     (was sending 405, now 404) and when any method is sent with a
-     full-URI that doesn't match the server and the server is not acting
-     as a proxy (was sending 501, now 403).  [Roy Fielding]
-
-  *) Host port changed to unsigned short. [Ken Coar] PR #276
-
-  *) Fix typo in command definition of AuthAuthoritative. [Ken Coar] PR #246
-
-  *) Defined USE_SHMGET_SCOREBOARD for shared memory on Linux.  [Dean Gaudet]
-
-  *) Report extra info from errno with many errors that cause httpd to exit.
-     spawn_child, popenf, and pclosef now have valid errno returns in the
-     event of an error.  Correct problems where errno was stomped on
-     before being reported.  [Dean Gaudet]
-
-  *) In the proxy, if the cache filesystem was full, garbage_coll() was
-     never called, and thus the filesystem would remain full indefinitely.
-     We now also remove incomplete cache files left if the origin server
-     didn't send a Content-Length header and either the client has aborted
-     transfer or bwrite() to client has failed. [Petr Lampa]
-
-  *) Fixed the handling of module and script-added header fields.
-     Improved the interface for sending header fields and reduced
-     the duplication of code between sending okay responses and errors.
-     We now always send both headers_out and err_headers_out, and
-     ensure that the server-reserved fields are not being overridden,
-     while not overriding those that are not reserved.  [Roy Fielding]
-
-  *) Moved transparent content negotiation fields to err_headers_out
-     to reflect above changes.  [Petr Lampa]
-
-  *) Fixed the determination of whether or not we should make the
-     connection persistent for all of the cases where some other part
-     of the server has already indicated that we should not.  Also
-     improved the ordering of the test so that chunked encoding will
-     be set whenever it is desired instead of only when KeepAlive
-     is enabled. Added persistent connection capability for most error
-     responses (those that do not indicate a bad input stream) when
-     accessed by an HTTP/1.1 client. [Roy Fielding]
-
-  *) Added missing timeouts for sending header fields, error responses,
-     and the last chunk of chunked encoding, each of which could have
-     resulted in a process being stuck in write forever.  Using soft_timeout
-     requires that the sender check for an aborted connection rather than
-     continuing after an EINTR.  Timeouts that used to be initiated before
-     send_http_header (and never killed) are now initiated only within or
-     around the routines that actually do the sending, and not allowed to
-     propagate above the caller.  [Roy Fielding]
-
-  *) mod_auth_anon required an @ or a . in the email address, not both.
-     [Dirk vanGulik]
-
-  *) per_dir_defaults weren't set correctly until directory_walk for
-     name-based vhosts.  This fixes an obscure bug with the wrong config
-     info being used for vhosts that share the same ip as the server.
-     [Dean Gaudet]
-
-  *) Improved generation of modules/Makefile to be more generic for
-     new module directories. [Ken Coar, Chuck Murcko, Roy Fielding]
-
-  *) Generate makefile dependency for Configuration based on the actual
-     name given when running the Configure process.  [Dean Gaudet]
-
-  *) Fixed problem with vhost error log not being set prior to
-     initializing virtual hosts. [Dean Gaudet]
-
-  *) Fixed infinite loop when a trailing slash is included after a type map
-     file URL (extra path info). [Petr Lampa]
-
-  *) Fixed server status updating of per-connection counters. [Roy Fielding]
-
-  *) Add documentation for DNS issues (reliability and security), and try
-     to explain the virtual host matching process.  [Dean Gaudet]
-
-  *) Try to continue gracefully by disabling the vhost if a DNS lookup
-     fails while parsing the configuration file.  [Dean Gaudet]
-
-  *) Improved calls to setsockopt.  [Roy Fielding]
-
-  *) Negotiation changes: Don't output empty content-type in variant list;
-     Output charset in variant list; Return sooner from handle_multi() if
-     no variants found; Add handling of '*' wildcard in Accept-Charset.
-     [Petr Lampa and Paul Sutton]
-
-  *) Fixed overlaying of request/sub-request notes and headers in
-     mod_negotiation.  [Dean Gaudet]
-
-  *) If two variants' charset quality are equal and one is the default
-     charset (iso-8859-1), then prefer the variant that was specifically
-     listed in Accept-Charset instead of the default.  [Petr Lampa]
-
-  *) Memory allocation problem in push_array() -- it would corrupt memory
-     when nalloc==0.  [Kai Risku <krisku@tf.hut.fi> and Roy Fielding]
-
-  *) invoke_handler() doesn't handle mime arguments in content-type
-     [Petr Lampa] PR#160
-
-  *) Reduced IdentityCheck timeout to 30 seconds, as per RFC 1413 minimum.
-     [Ken Coar]
-
-  *) Fixed problem with ErrorDocument not working for virtual hosts
-     due to one of the performance changes in 1.2b7. [Dean Gaudet]
-
-  *) Log an error message if we get a request header that is too long,
-     since it may indicate a buffer overflow attack. [Marc Slemko]
-
-  *) Made is_url() allow "[-.+a-zA-Z0-9]+:" as a valid scheme and
-     not reject URLs without a double-slash, as per RFC2068 section 3.2.
-     [Ken Coar] PR #146, #187
-
-  *) Added table entry placeholder for new header_parser callback
-     in all of the distributed modules. [Ken Coar] PR #191
-
-  *) Allow for cgi files without the .EXE extension on them under OS/2.
-     [Garey Smiley] PR #59
-
-  *) Fixed error message when resource is not found and URL contains
-     path info. [Petr Lampa and Dean Gaudet] PR #40
-
-  *) Fixed user and server confusion over what should be a virtual host
-     and what is the main server, resulting in access to something
-     other than the name defined in the virtualhost directive (but
-     with the same IP address) failing. [Dean Gaudet]
-
-  *) Updated mod_rewrite to version 3.0.2, which: fixes compile error on
-     AIX; improves the redirection stuff to enable the users to generally
-     redirect to http, https, gopher and ftp; added TIME variable for
-     RewriteCond which expands to YYYYMMDDHHMMSS strings and added the
-     special patterns >STRING, <STRING and =STRING to RewriteCond, which
-     can be used in conjunction with %{TIME} or other variables to create
-     time-dependent rewriting rules. [Ralf S. Engelschall]
-
-  *) bpushfd() no longer notes cleanups for the file descriptors it is handed.
-     Module authors may need to adjust their code for proper cleanup to take
-     place (that is, call note_cleanups_for_fd()). This change fixes problems
-     with file descriptors being erroneously closed when the proxy module was
-     in use. [Ben Laurie]
-
-  *) Fix bug in suexec reintroduced by changes in 1.2b7 which allows
-     initgroups() to hose the group information needed for later
-     comparisons. [Randy Terbush]
-
-  *) Remove unnecessary call to va_end() in create_argv() which
-     caused a SEGV on some systems.
-
-  *) Use proper MAXHOSTNAMELEN symbol for limiting length of server name.
-     [Dean Gaudet]
-
-  *) Clear memory allocated for listeners. [Randy Terbush]
-
-  *) Improved handling of IP address as a virtualhost address and
-     introduced "_default_" as a synonym for the default vhost config.
-     [Dean Gaudet] PR #212
-
-Changes with Apache 1.2b7
-
-  *) Port to  UXP/DS(V20) [Toshiaki Nomura <nom@yk.fujitsu.co.jp>]
-
-  *) unset Content-Length if chunked (RFC-2068) [Petr Lampa]
-
-  *) mod_negotiation fixes [Petr Lampa] PR#157, PR#158, PR#159
-     - replace protocol response numbers with symbols
-     - save variant-list into main request notes
-     - free allocated memory from subrequests
-     - merge notes, headers_out and err_headers_out
-
-  *) changed status check mask in proxy_http.c from "HTTP/#.# ### *" to
-     "HTTP/#.# ###*" to be more lenient about what we accept.
-     [Chuck Murcko]
-
-  *) more proxy FTP bug fixes:
-     - Changed send_dir() to remove user/passwd from displayed URL.
-     - Changed login error messages to be more descriptive.
-     - remove setting of SO_DEBUG socket option
-     - Make ftp_getrc() more lenient about multiline responses,
-       specifically, 230 responses which don't have continuation 230-
-       on each line). These seem to be all NT FTP servers, and while
-       perhaps questionable, they appear to be legal by RFC 959.
-     - Add missing kill_timeout() after transfer to user completes.
-     [Chuck Murcko]
-
-  *) Fixed problem where a busy server could hang when restarting
-     after being sent a SIGHUP due to child processes not exiting.
-     [Marc Slemko]
-
-  *) Modify mod_include escaping so a '\' only signifies an escaped
-     character if the next character is one that needs
-     escaping.  [Ben Laurie]
-
-  *) Eliminated possible infinite loop in mod_imap when relative URLs are
-     used with a 'base' directive that does not have a '/' in it.
-     [Marc Slemko, reported by Onno Witvliet <onno@tc.hsa.nl>]
-
-  *) Reduced the default timeout from 1200 seconds to 300, and the
-     one in the sample configfile from 400 to 300.  [Marc Slemko]
-
-  *) Stop vbprintf from crashing if given a NULL string pointer;
-     print (null) instead.  [Ken Coar]
-
-  *) Don't disable Nagle algorithm if system doesn't have TCP_NODELAY.
-     [Marc Slemko and Roy Fielding]
-
-  *) Fixed problem with mod_cgi-generated internal redirects trying to
-     read the request message-body twice. [Archie Cobbs and Roy Fielding]
-
-  *) Reduced timeout on lingering close, removed possibility of a blocked
-     read causing the child to hang, and stopped logging of errors if
-     the socket is not connected (reset by client).  [Roy Fielding]
-
-  *) Rearranged main child loop to remove duplication of code in
-     select/accept and keep-alive requests, fixed several bugs regarding
-     checking scoreboard_image for exit indication and failure to
-     account for all success conditions and trap all error conditions,
-     prevented multiple flushes before closing the socket; close the entire
-     socket buffer instead of just one descriptor, prevent logging of
-     EPROTO and ECONNABORTED on platforms where supported, and generally
-     improved readability.  [Roy Fielding]
-
-  *) Extensive performance improvements. Cleaned up inefficient use of
-     auto initializers, multiple is_matchexp calls on a static string,
-     and excessive merging of response_code_strings. [Dean Gaudet]
-
-  *) Added double-buffering to mod_include to improve performance on
-     server-side includes. [Marc Slemko]
-
-  *) Several fixes for suexec wrapper. [Randy Terbush]
-     - Make wrapper work for files on NFS filesystem.
-     - Fix portability problem of MAXPATHLEN.
-     - Fix array overrun problem in clean_env().
-     - Fix allocation of PATH environment variable
-
-  *) Removed extraneous blank line is description of mod_status chars.
-     [Kurt Kohler]
-
-  *) Logging of errors from the call_exec routine simply went nowhere,
-     since the logfile fd has been closed, so now we send them to stderr.
-     [Harald T. Alvestrand]
-
-  *) Fixed core dump when DocumentRoot is a CGI.
-     [Ben Laurie, reported by geddis@tesserae.com]
-
-  *) Fixed potential file descriptor leak in mod_asis; updated it and
-     http_core to use pfopen/pfclose instead of fopen/fclose.
-     [Randy Terbush and Roy Fielding]
-
-  *) Fixed handling of unsigned ints in ap_snprintf() on some chips such
-     as the DEC Alpha which is 64-bit but uses 32-bit ints.
-     [Dean Gaudet and Ken Coar]
-
-  *) Return a 302 response code to the client when sending a redirect
-     due to a missing trailing '/' on a directory instead of a 301; now
-     it is cacheable. [Markus Gyger]
-
-  *) Fix condition where, if a bad directive occurs in .htaccess, and
-     sub_request() goes first to this directory, then log_reason() will
-     SIGSEGV because it doesn't have initialized r->per_dir_config.
-     [PR#162 from Petr Lampa, fix by Marc Slemko and Dean Gaudet]
-
-  *) Fix handling of lang_index in is_variant_better().  This was
-     causing problems which resulted in the server sending the
-     wrong language document in some cases. [Petr Lampa]
-
-  *) Remove free() from clean_env() in suexec wrapper. This was nuking
-     the clean environment on some systems.
-
-  *) Tweak byteserving code (e.g. serving PDF files) to work around
-     bugs in Netscape Navigator and Microsoft Internet Explorer.
-     Emit Content-Length header when sending multipart/byteranges.
-     [Alexei Kosut]
-
-  *) Port to HI-UX/WE2. [Nick Maclaren]
-
-  *) Port to HP MPE operating system for HP 3000 machines
-     [Mark Bixby <markb@cccd.edu>]
-
-  *) Fixed bug which caused a segmentation fault if only one argument
-     given to RLimit* directives. [Ed Korthof]
-
-  *) Continue persistent connection after 204 or 304 response. [Dean Gaudet]
-
-  *) Improved buffered output to the client by delaying the flush decision
-     until the BUFF code is actually about to read the next request.
-     This fixes a problem introduced in 1.2b5 with clients that send
-     an extra CRLF after a POST request. Also improved chunked output
-     performance by combining writes using writev() and removing as
-     many bflush() calls as possible.  NOTE: Platforms without writev()
-     must add -DNO_WRITEV to the compiler CFLAGS, either in Configuration
-     or Configure, unless we have already done so.  [Dean Gaudet]
-
-  *) Fixed mod_rewrite bug which truncated the rewritten URL [Marc Slemko]
-
-  *) Fixed mod_info output corruption bug introduced by buffer overflow
-     fixes. [Dean Gaudet]
-
-  *) Fixed http_protocol to correctly output all HTTP/1.1 headers, including
-     for the special case of a 304 response.  [Paul Sutton]
-
-  *) Improved handling of TRACE method by bypassing normal method handling
-     and header parsing routines; fixed Allow response to always allow TRACE.
-     [Dean Gaudet]
-
-  *) Fixed compiler warnings in the regex library. [Dean Gaudet]
-
-  *) Cleaned-up some of the generated HTML. [Ken Coar]
-
-Changes with Apache 1.2b6
-
-  *) Allow whitespace in imagemap mapfile coordinates. [Marc Slemko]
-
-  *) Fix typo introduced in fix for potential infinite loop around
-     accept() in child_main(). This change caused the rev to 1.2b6.
-     1.2b5 was never a public beta.
-
-Changes with Apache 1.2b5
-
-  *) Change KeepAlive semantics (On|Off instead of a number), add
-     MaxKeepAliveRequests directive. [Alexei Kosut]
-
-  *) Various NeXT compilation patches, as well as a change in
-     regex/regcomp.c since that file also used a NEXT define.
-     [Andreas Koenig]
-
-  *) Allow * to terminate the end of a directory match in mod_dir.
-     Allows /~* to match for both /~joe and /~joe/. [David Bronder]
-
-  *) Don't call can_exec() if suexec_enabled. Calling this requires
-     scripts executed by the suexec wrapper to be world executable, which
-     defeats one of the advantages of running the wrapper. [Randy Terbush]
-
-  *) Portability Fix: IRIX complained with 'make clean' about *pure* (removed)
-     [Jim Jagielski]
-
-  *) Migration from sprintf() to snprintf() to avoid buffer
-     overflows. [Marc Slemko]
-
-  *) Provide portable snprintf() implementation (ap_snprintf)
-     as well as *cvt family. [Jim Jagielski]
-
-  *) Portability Fix: NeXT lacks unistd.h so we wrap it's inclusion
-     [Jim Jagielski]
-
-  *) Remove mod_fastcgi.c from the distribution. This module appears
-     to be maintained more through the Open Market channels and should
-     continue to be easily available at http://www.fastcgi.com/
-
-  *) Fixed bug in modules/Makefile that wouldn't allow building in more
-     than one subdirectory (or cleaning, either). [Jeremy Laidman]
-
-  *) mod_info assumed that the config files were relative to ServerRoot.
-     [Ken the Rodent]
-
-  *) CGI scripts called as an error document resulting from failed
-     CGI execution would hang waiting for POST'ed data. [Rob Hartill]
-
-  *) Log reason when mod_dir returns access HTTP_FORBIDDEN
-     [Ken the Rodent]
-
-  *) Properly check errno to prevent display of a directory index
-     when server receives a long enough URL to confuse stat().
-     [Marc Slemko]
-
-  *) Several security enhancements to suexec wrapper. It is _highly_
-     recommended that previously installed versions of the wrapper
-     be replaced with this version.  [Randy Terbush, Jason Dour]
-
-        - ~user execution now properly restricted to ~user's home
-          directory and below.
-        - execution restricted to UID/GID > 100
-        - restrict passed environment to known variables
-        - call setgid() before initgroups() (portability fix)
-        - remove use of setenv() (portability fix)
-
-  *) Add HTTP/1.0 response forcing. [Ben Laurie]
-
-  *) Add access control via environment variables. [Ben Laurie]
-
-  *) Add rflush() function. [Alexei Kosut]
-
-  *) remove duplicate pcalloc() call in new_connection().
-
-  *) Fix incorrect comparison which could allow number of children =
-     MaxClients + 1 if less than HARD_SERVER_LIMIT. Also fix potential
-     problem if StartServers > HARD_SERVER_LIMIT. [Ed Korthof]
-
-  *) Updated support for OSes (MachTen, ULTRIX, Paragon, ISC, OpenBSD
-     AIX PS/2, CONVEXOS. [Jim Jagielski]
-
-  *) Replace instances of inet_ntoa() with inet_addr() for ProxyBlock.
-     It's more portable. [Martin Kraemer]
-
-  *) Replace references to make in Makefile.tmpl with $(MAKE).
-     [Chuck Murcko]
-
-  *) Add ProxyBlock directive w/IP address caching. Add IP address
-     caching to NoCache directive as well. ProxyBlock works with all
-     handlers; NoCache now also works with FTP for anonymous logins.
-     Still more code cleanup. [Chuck Murcko]
-
-  *) Add "header parse" API hook [Ben Laurie]
-
-  *) Fix byte ordering problems for REMOTE_PORT [Chuck Murcko]
-
-  *) suEXEC wrapper was freeing memory that had not been malloc'ed.
-
-  *) Correctly allow access and auth directives in <Files> sections in
-     server config files. [Alexei Kosut]
-
-  *) Fix bug with ServerPath that could cause certain files to be not
-     found by the server. [Alexei Kosut]
-
-  *) Fix handling of ErrorDocument so that it doesn't remove a trailing
-     double-quote from text and so that it properly checks for unsupported
-     status codes using the new index_of_response interface. [Roy Fielding]
-
-  *) Multiple fixes to the lingering_close code in order to avoid being
-     interrupted by a stray timeout, to avoid lingering on a connection
-     that has already been aborted or never really existed, to ensure that
-     we stop lingering as soon as any error condition is received, and to
-     prevent being stuck indefinitely if the read blocks.  Also improves
-     reporting of error conditions.  [Marc Slemko and Roy Fielding]
-
-  *) Fixed initialization of parameter structure for sigaction.
-     [mgyger@itr.ch, Adrian Filipi-Martin]
-
-  *) Fixed reinitializing the parameters before each call to accept and
-     select, and removed potential for infinite loop in accept.
-     [Roy Fielding, after useful PR from adrian@virginia.edu]
-
-  *) Fixed condition where, if a child fails to fork, the scoreboard would
-     continue to say SERVER_STARTING forever. Eventually, the main process
-     would refuse to start new children because count_idle_servers() will
-     count those SERVER_STARTING entries and will always report that there
-     are enough idle servers. [Phillip Vandry]
-
-  *) Fixed bug in bcwrite regarding failure to account for partial writes.
-     Avoided calling bflush() when the client is pipelining requests.
-     Removed unnecessary flushes from http_protocol. [Dean Gaudet]
-
-  *) Added description of "." mode in server-status [Jim Jagielski]
-
-Changes with Apache 1.2b4
-
-  *) Fix possible race condition in accept_mutex_init() that
-     could leave a small security hole open allowing files to be
-     overwritten in cases where the server UID has write permissions.
-     [Marc Slemko]
-
-  *) Fix awk compatibilty problem in Configure. [Jim Jagielski]
-
-  *) Fix portablity problem in util_script where ARG_MAX may not be
-     defined for some systems.
-
-  *) Add changes to allow compilation on Machten 4.0.3 for PowerPC.
-     [Randal Schwartz]
-
-  *) OS/2 changes to support an MMAP style scoreboard file and UNIX
-     style magic #! token for better script portability. [Garey Smiley]
-
-  *) Fix bug in suexec wrapper introduced in b3 that would cause failed
-     execution for ~userdir CGI. [Jason Dour]
-
-  *) Fix initgroups() business in suexec wrapper. [Jason Dour]
-
-  *) Fix month off by one in suexec wrapper logging.
-
-Changes with Apache 1.2b3:
-
-  *) Fix error in mod_cgi which could cause resources not to be properly
-     freed, or worse. [Dean Gaudet]
-
-  *) Fix find_string() NULL pointer dereference. [Howard Fear]
-
-  *) Add set_flag_slot() at the request of Dirk and others.
-     [Dirk vanGulik]
-
-  *) Sync mod_rewrite with patch level 10. [Ralf Engelschall]
-
-  *) Add changes to improve the error message given for invalid
-     ServerName parameters. [Dirk vanGulik]
-
-  *) Add "Authoritative" directive for Auth modules that don't
-     currently have it. This gives admin control to assign authoritative
-     control to an authentication scheme and allow "fall through" for
-     those authentication modules that aren't "Authoritative" thereby
-     allowing multiple authentication mechanisms to be chained.
-     [Dirk vanGulik]
-
-  *) Remove requirement for ResourceConfig/AccessConfig if not using
-     the three config file layout. [Randy Terbush]
-
-  *) Add PASV mode to mod_proxy FTP handler. [Chuck Murcko]
-
-  *) Changes to suexec wrapper to fix the following problems:
-     1.  symlinked homedirs will kill ~userdirs.
-     2.  initgroups() on Linux 2.0.x clobbers gr->grid.
-     3.  CGI command lines paramters problems
-     4.  pw-pwdir for "docroot check" still the httpd user's pw record.
-    [Randy Terbush, Jason Dour]
-
-  *) Change create_argv() to accept variable arguments. This fixes
-     a problem where arguments were not getting passed to the CGI via
-     argv[] when the suexec wrapper was active. [Randy Terbush, Jake Buchholz]
-
-  *) Collapse multiple slashes in path URLs to properly apply
-     handlers defined by <Location>. [Alexei Kosut]
-
-  *) Define a sane set of DEFAULT_USER and DEFAULT_GROUP values for AIX.
-
-  *) Improve the accuracy of request duration timings by setting
-     r->request_time in read_request_line() instead of read_request().
-     [Dean Gaudet]
-
-  *) Reset timeout while reading via get_client_block() in mod_cgi.c
-     Fixes problem with timed out transfers of large files. [Rasmus Lerdorf]
-
-  *) Add the ability to pass different Makefile.tmpl files to Configure
-     using the -make flag. [Rob Hartill]
-
-  *) Fix coredump triggered when sending a SIGHUP to the server caused
-     by an assertion failure, in turn caused by an uninitialised field in a
-     listen_rec.
-     [Ben Laurie]
-
-  *) Add FILEPATH_INFO variable to CGI environment, which is equal to
-     PATH_INFO from previous versions of Apache (in certain situations,
-     Apache 1.2's PATH_INFO will be different than 1.1's). [Alexei Kosut]
-     [later removed in 1.2b11]
-
-  *) Add rwrite() function to API to allow for sending strings of
-     arbitrary length. [Doug MacEachern]
-
-  *) Remove rlim_t typedef for NetBSD. Do older versions need this?
-
-  *) Defined rlim_t and WANTHSREGEX=yes and fixed waitpid() substitute for
-     NeXT. [Jim Jagielski]
-
-  *) Removed recent modification to promote the status code on internal
-     redirects, since the correct fix was to change the default log format
-     in mod_log_config so that it outputs the original status. [Rob Hartill]
-
-Changes with Apache 1.2b2:
-
-  *) Update set_signals() to use sigaction() for setting handlers.
-     This appears to fix a re-entrant problem in the seg_fault()
-     bus_error() handlers. [Randy Terbush]
-
-  *) Changes to allow mod_status compile for OS/2 [Garey Smiley]
-
-  *) changes for DEC AXP running OSF/1 v3.0. [Marc Evans]
-
-  *) proxy_http.c bugfixes:  [Chuck Murcko]
-        1) fixes possible NULL pointer reference w/NoCache
-        2) fixes NoCache behavior when using ProxyRemote (ProxyRemote
-           host would cache nothing if it was in the local domain,
-           and the local domain was in the NoCache list)
-        3) Adds Host: header when not available
-        4) Some code cleanup and clarification
-
-  *) mod_include.c bugfixes:
-        1) Fixed an ommission that caused include variables to not
-           be parsed in config errmsg directives [Howard Fear]
-        2) Remove HAVE_POSIX_REGEX cruft [Alexei Kosut]
-        3) Patch to fix compiler warnings [perrot@lal.in2p3.fr]
-        4) Allow backslash-escaping to all quoted text
-           [Ben Yoshino <ben@wiliki.eng.hawaii.edu>]
-        5) Pass variable to command line if not set in XSSI's env
-           [Howard Fear]
-
-  *) Fix infinite loop when processing Content-language lines in
-     type-map files. [Alexei Kosut]
-
-  *) Closed file-globbing hole in test-cgi script. [Brian Behlendorf]
-
-  *) Fixed problem in set_[user|group] that prevented CGI execution
-     for non-virtualhosts when suEXEC was enabled. [Randy Terbush]
-
-  *) Added PORTING information file.  [Jim Jagielski]
-
-  *) Added definitions for S_IWGRP and S_IWOTH to conf.h [Ben Laurie]
-
-  *) Changed default group to "nogroup" instead of "nobody" [Randy Terbush]
-
-  *) Fixed define typo of FCNTL_SERIALIZED_ACCEPT where
-     USE_FCNTL_SERIALIZED_ACCEPT was intended.
-
-  *) Fixed additional uses of 0xffffffff where INADDR_NONE was intended,
-     which caused problems of systems where socket s_addr is >32bits.
-
-  *) Added comment to explain (r->chunked = 1) side-effect in
-     http_protocol.c [Roy Fielding]
-
-  *) Replaced use of index() in mod_expires.c with more appropriate
-     and portable isdigit() test.  [Ben Laurie]
-
-  *) Updated Configure for ...
-        OS/2          (DEF_WANTHSREGEX=yes, other code changes)
-        *-dg-dgux*    (bad pattern match)
-        QNX           (DEF_WANTHSREGEX=yes)
-        *-sunos4*     (DEF_WANTHSREGEX=yes, -DUSEBCOPY)
-        *-ultrix      (new)
-        *-unixware211 (new)
-     and added some user diagnostic info.  [Ben Laurie]
-
-  *) In helpers/CutRule, replaced "cut" invocation with "awk" invocation
-     for better portability. [Jim Jagielski]
-
-  *) Updated helpers/GuessOS for ...
-        SCO 5            (recognize minor releases)
-        SCO UnixWare     (braindamaged uname, whatever-whatever-unixware2)
-        SCO UnixWare 2.1.1      (requires a separate set of #defines in conf.h)
-        IRIX64           (-sgi-irix64)
-        ULTRIX           (-unknown-ultrix)
-        SINIX            (-whatever-sysv4)
-        NCR Unix         (-ncr-sysv4)
-     and fixed something in helpers/PrintPath  [Ben Laurie]
-
-Changes with Apache 1.2b1
-
-  *) Not listed. See <http://www.apache.org/docs/new_features_1_2.html>
-
-Changes with Apache 1.1.1
-
-  *) Fixed bug where Cookie module would make two entries in the
-     logfile for each access [Mark Cox]
-
-  *) Fixed bug where Redirect in .htaccess files would cause memory
-     leak. [Nathan Neulinger]
-
-  *) MultiViews now works correctly with AddHandler [Alexei Kosut]
-
-  *) Problems with mod_auth_msql fixed [Dirk vanGulik]
-
-  *) Fix misspelling of "Anonymous_Authorative" directive in mod_auth_anon.
-
-Changes with Apache 1.1.0
-
-  *) Bring NeXT support up to date. [Takaaki Matsumoto]
-
-  *) Bring QNX support up to date. [Ben Laurie]
-
-  *) Make virtual hosts default to main server keepalive parameters.
-     [Alexei Kosut, Ben Laurie]
-
-  *) Allow ScanHTMLTitles to work with lowercase <title> tags. [Alexei Kosut]
-
-  *) Fix missing address family for connect, also remove unreachable statement
-     in mod_proxy. [Ben Laurie]
-
-  *) mod_env now turned on by default in Configuration.tmpl.
-
-  *) Bugs which were fixed:
-        a) yet more mod_proxy bugs [Ben Laurie]
-        b) CGI works again with inetd [Alexei Kosut]
-        c) Leading colons were stripped from passwords [osm@interguide.com]
-        d) Another fix to multi-method Limit problem [jk@tools.de]
-
-Changes with Apache 1.1b4
-
-  *) r->bytes_sent variable restored. [Robert Thau]
-
-  *) Previously broken multi-method <Limit> parsing fixed. [Robert Thau]
-
-  *) More possibly unsecure programs removed from the support directory.
-
-  *) More mod_auth_msql authentication improvements.
-
-  *) VirtualHosts based on Host: headers no longer conflict with the
-     Listen directive.
-
-  *) OS/2 compatibility enhancements. [Gary Smiley]
-
-  *) POST now allowed to directory index CGI scripts.
-
-  *) Actions now work with files of the default type.
-
-  *) Bugs which were fixed:
-        a) more mod_proxy bugs
-        b) early termination of inetd requests
-        c) compile warnings on several systems
-        d) problems when scripts stop reading output early
-
-Changes with Apache 1.1b3
-
-  *) Much of cgi-bin and all of cgi-src has been removed, due to
-     various security holes found and that we could no longer support
-     them.
-
-  *) The "Set-Cookie" header is now special-cased to not merge multiple
-     instances, since certain popular browsers can not handle multiple
-     Set-Cookie instructions in a single header. [Paul Sutton]
-
-  *) rprintf() added to buffer code, occurrences of sprintf removed.
-     [Ben Laurie]
-
-  *) CONNECT method for proxy module, which means tunneling SSL should work.
-     (No crypto needed)  Also a NoCache config directive.
-
-  *) Several API additions: pstrndup(), table_unset() and get_token()
-     functions now available to modules.
-
-  *) mod_imap fixups, in particular Location: headers are now complete
-     URL's.
-
-  *) New "info" module which reports on installed module set through a
-     special URL, a la mod_status.
-
-  *) "ServerPath" directive added - allows for graceful transition
-     for Host:-header-based virtual hosts.
-
-  *) Anonymous authentication module improvements.
-
-  *) MSQL authentication module improvements.
-
-  *) Status module design improved - output now table-based. [Ben Laurie]
-
-  *) htdigest utility included for use with digest authentication
-     module.
-
-  *) mod_negotiation: Accept values with wildcards to be treated with
-     less priority than those without wildcards at the same quality
-     value. [Alexei Kosut]
-
-  *) Bugs which were fixed:
-        a) numerous mod_proxy bugs
-        b) CGI early-termination bug [Ben Laurie]
-        c) Keepalives not working with virtual hosts
-        d) RefererIgnore problems
-        e) closing fd's twice in mod_include (causing core dumps on
-           Linux and elsewhere).
-
-Changes with Apache 1.1b2
-
-  *) Bugfixes:
-        a) core dumps in mod_digest
-        b) truncated hostnames/ip address in the logs
-        c) relative URL's in mod_imap map files
-
-Changes with Apache 1.1b1
-
-  *) Not listed. See <http://www.apache.org/docs/new_features_1_1.html>
-
-Changes with Apache 1.0.3
-
-  *) Internal redirects which occur in mod_dir.c now preserve the
-     query portion of a request (the bit after the question mark).
-     [Adam Sussman]
-
-  *) Escape active characters '<', '>' and '&' in html output in
-     directory listings, error messages and redirection links.
-     [David Robinson]
-
-  *) Apache will now work with LynxOS 2.3 and later [Steven Watt]
-
-  *) Fix for POSIX compliance in waiting for processes in alloc.c.
-     [Nick Williams]
-
-  *) setsockopt no longer takes a const declared argument [Martijn Koster]
-
-  *) Reset timeout timer after each successful fwrite() to the network.
-     This patch adds a reset_timeout() procedure that is called by
-     send_fd() to reset the timeout ever time data is written to the net.
-     [Nathan Schrenk]
-
-  *) timeout() signal handler now checks for SIGPIPE and reports
-     lost connections in a more user friendly way. [Rob Hartill]
-
-  *) Location of the "scoreboard" file which used to live in /tmp is
-     now configurable (for OSes that can't use mmap) via ScoreBoardFile
-     which works similar to PidFile (in httpd.conf) [Rob Hartill]
-
-  *) Include sys/resource.h in the correct place for SunOS4 [Sameer Parekh]
-
-  *) the pstrcat call in mod_cookies.c didn't have an ending NULL,
-     which caused a SEGV with cookies enabled
-
-  *) Output warning when MinSpareServers is set to <= 0 and change it to 1
-     [Rob Hartill]
-
-  *) Log the UNIX textual error returned by some system calls, in
-     particular errors from accept() [David Robinson]
-
-  *) Add strerror function to util.c for SunOS4 [Randy Terbush]
-
-Changes with Apache 1.0.2
-
-  *) patch to get Apache compiled on UnixWare 2.x, recommended as
-     a temporary measure, pending rewrite of rfc931.c. [Chuck Murcko]
-
-  *) Fix get_basic_auth_pw() to set the auth_type of the request.
-     [David Robinson]
-
-  *) past changes to http_config.c to only use the
-     setrlimit function on systems defining RLIMIT_NOFILE
-     broke the feature on SUNOS4. Now defines HAVE_RESOURCE
-     for SUNOS and prototypes the needed functions.
-
-  *) Remove uses of MAX_STRING_LEN/HUGE_STRING_LEN from several routines.
-     [David Robinson]
-
-  *) Fix use of pointer to scratch memory. [Cliff Skolnick]
-
-  *) Merge multiple headers from CGI scripts instead of taking last
-     one. [David Robinson]
-
-  *) Add support for SCO 5. [Ben Laurie]
-
-Changes with Apache 1.0.1
-
-  *) Silence mod_log_referer and mod_log_agent if not configured
-     [Randy Terbush]
-
-  *) Recursive includes can occur if the client supplies PATH_INFO data
-     and the server provider uses relative links; as file.html
-     relative to /doc.shtml/pathinfo is /doc.shtml/file.html. [David Robinson]
-
-  *) The replacement for initgroups() did not call {set,end}grent(). This
-     had two implications: if anything else used getgrent(), then
-     initgroups() would fail, and it was consuming a file descriptor.
-     [Ben Laurie]
-
-  *) On heavily loaded servers it was possible for the scoreboard to get
-     out of sync with reality, as a result of a race condition.
-     The observed symptoms are far more Apaches running than should
-     be, and heavy system loads, generally followed by catastrophic
-     system failure. [Ben Laurie]
-
-  *) Fix typo in license. [David Robinson]
-
-Changes with Apache 1.0.0                                        23 Nov 1995
-
-  *) Not listed. See <http://www.apache.org/docs/new_features_1_0.html>
-
-Changes with Apache 0.8.16                                       05 Nov 1995
-
-  *) New man page for 'httpd' added to support directory [David Robinson]
-
-  *) .htgroup files can have more than one line giving members for a
-     given group (each must have the group name in front), for NCSA
-     back-compatibility [Robert Thau]
-
-  *) Mutual exclusion around accept() is on by default for SVR4 systems
-     generally, since they generally can't handle multiple processes in
-     accept() on the same socket.  This should cure flaky behavior on
-     a lot of those systems.  [David Robinson]
-
-  *) AddType, AddEncoding, and AddLanguage directives take multiple
-     extensions on a single command line [David Robinson]
-
-  *) UserDir can be disabled for a given virtual host by saying
-     "UserDir disabled" in the <VirtualHost> section --- it was a bug
-     that this didn't work.  [David Robinson]
-
-  *) Compiles on QNX [Ben Laurie]
-
-  *) Corrected parsing of ctime time format [David Robinson]
-
-  *) httpd does a perror() before exiting if it can't log its pid
-     to the PidFile, to make diagnosing the error a bit easier.
-     [David Robinson]
-
-  *) <!--#include file="..."--> can no longer include files in the
-     parent directory, for NCSA back-compatibility.  [David Robinson]
-
-  *) '~' is *not* escaped in URIs generated for directory listings
-     [Roy Fielding]
-
-  *) Eliminated compiler warning in the imagemap module [Randy Terbush]
-
-  *) Fixed bug involving handling URIs with escaped %-characters
-     in redirects [David Robinson]
-
-Changes with Apache 0.8.15                                       14 Oct 1995
-
-  *) Switched to new, simpler license
-
-  *) Eliminated core dumps with improperly formatted DBM group files [Mark Cox]
-
-  *) Don't allow requests for ordinary files to have PATH_INFO [Ben Laurie]
-
-  *) Reject paths containing %-escaped '%' or null characters [David Robinson]
-
-  *) Correctly handles internal redirects to files with names containing '%'
-     [David Robinson]
-
-  *) Repunctuated some error messages [Aram Mirzadeh, Andrew Wilson]
-
-  *) Use geteuid() rather than getuid() to see if we have root privilege,
-     so that server correctly resets privilege if run setuid root.  [Andrew
-     Wilson]
-
-  *) Handle ftp: and telnet: URLs correctly in imagemaps (built-in module)
-     [Randy Terbush]
-
-  *) Fix relative URLs in imagemap files [Randy Terbush]
-
-  *) Somewhat better fix for the old "Alias /foo/ /bar/" business
-     [David Robinson]
-
-  *) Don't repeatedly open the ErrorLog if a bunch of <VirtualHost>
-     entries all name the same one. [David Robinson]
-
-  *) Fix directory listings with filenames containing unusual characters
-     [David Robinson]
-
-  *) Better URI-escaping for generated URIs in directories with filenames
-     containing unusual characters [Ben Laurie]
-
-  *) Fixed potential FILE* leak in http_main.c [Ben Laurie]
-
-  *) Unblock alarms on error return from spawn_child() [David Robinson]
-
-  *) Sample Config files have extra note for SCO users [Ben Laurie]
-
-  *) Configuration has note for HP-UX users [Rob Hartill]
-
-  *) Eliminated some bogus Linux-only #defines in conf.h [Aram Mirzadeh]
-
-  *) Nuked bogus #define in httpd.h [David Robinson]
-
-  *) Better test for whether a system has setrlimit() [David Robinson]
-
-  *) Calls update_child_status() after reopen_scoreboard() [David Robinson]
-
-  *) Doesn't send itself SIGHUP on startup when run in the -X debug-only mode
-     [Ben Laurie]
-
-Changes with Apache 0.8.14                                       19 Sep 1995
-
-  *) Compiles on SCO ODT 3.0 [Ben Laurie]
-
-  *) AddDescription works (better) [Ben Laurie]
-
-  *) Leaves an intelligible error diagnostic when it can't set group
-     privileges on standalone startup [Andrew Wilson]
-
-  *) Compiles on NeXT again --- the 0.8.13 RLIMIT patch was failing on
-     that machine, which claims to be BSD but does not support RLIMIT.
-     [Randy Terbush]
-
-  *) gcc -Wall no longer complains about an unused variable when util.c
-     is compiled with -DMINIMAL_DNS [Andrew Wilson]
-
-  *) Nuked another compiler warning for -Wall on Linux [Aram Mirzadeh]
-
-Changes with Apache 0.8.13                                       07 Sep 1995
-
-  *) Make IndexIgnore *work* (ooops) [Jarkko Torppa]
-
-  *) Have built-in imagemap code recognize & honor Point directive [James
-     Cloos]
-
-  *) Generate cleaner directory listings in directories with a mix of
-     long and short filenames [Rob Hartill]
-
-  *) Properly initialize dynamically loaded modules [Royston Shufflebotham]
-
-  *) Properly default ServerName for virtual servers [Robert Thau]
-
-  *) Rationalize handling of BSD in conf.h and elsewhere [Randy Terbush,
-     Paul Richards and a cast of thousands...]
-
-  *) On self-identified BSD systems (we don't try to guess any more),
-     allocate a few extra file descriptors per virtual host with setrlimit,
-     if we can, to avoid running out. [Randy Terbush]
-
-  *) Write 22-character lock file name into buffer with enough space
-     on startup [Konstantin Olchanski]
-
-  *) Use archaic setpgrp() interface on NeXT, which requires it [Brian
-     Pinkerton]
-
-  *) Suppress -Wall warning by casting const away in util.c [Aram Mirzadeh]
-
-  *) Suppress -Wall warning by initializing variable in negotiation code
-     [Tobias Weingartner]
-
-Changes with Apache 0.8.12                                       31 Aug 1995
-
-  *) Doesn't pause three seconds after including a CGI script which is
-     too slow to die off (this is done by not even trying to kill off
-     subprocesses, including the SIGTERM/pause/SIGKILL routine, until
-     after the entire document has been processed).  [Robert Thau]
-
-  *) Doesn't do SSI if Options Includes is off.  (Ooops).  [David Robinson]
-
-  *) Options IncludesNoExec allows inclusion of at least text/* [Roy Fielding]
-
-  *) Allows .htaccess files to override <Directory> sections naming the
-     same directory [David Robinson]
-
-  *) Removed an efficiency hack in sub_req_lookup_uri which was
-     causing certain extremely marginal cases (e.g., ScriptAlias of a
-     *particular* index.html file) to fail.  [David Robinson]
-
-  *) Doesn't log an error when the requested URI requires
-     authentication, but no auth header line was supplied by the
-     client; this is a normal condition (the client doesn't no auth is
-     needed here yet).  [Robert Thau]
-
-  *) Behaves more sanely when the name server loses its mind [Sean Welch]
-
-  *) RFC931 code compiles cleanly on old BSDI releases [Randy Terbush]
-
-  *) RFC931 code no longer passes out name of prior clients on current
-     requests if the current request came from a server that doesn't
-     do RFC931.  [David Robinson]
-
-  *) Configuration script accepts "Module" lines with trailing whitespace.
-     [Robert Thau]
-
-  *) Cleaned up compiler warning from mod_access.c [Robert Thau]
-
-  *) Cleaned up comments in mod_cgi.c [Robert Thau]
-
-Changes with Apache 0.8.11                                       24 Aug 1995
-
-  *) Wildcard <Directory> specifications work.  [Robert Thau]
-
-  *) Doesn't loop for buggy CGI on Solaris [Cliff Skolnick]
-
-  *) Symlink checks (FollowSymLinks off, or SymLinkIfOwnerMatch) always check
-     the file being requested itself, in addition to the directories leading
-     up to it. [Robert Thau]
-
-  *) Logs access failures due to symlink checks or invalid client address
-     in the error log [Roy Fielding, Robert Thau]
-
-  *) Symlink checks deal correctly with systems where lstat of
-     "/path/to/some/link/" follows the link.  [Thau, Fielding]
-
-  *) Doesn't reset DirectoryIndex to 'index.html' when
-     other directory options are set in a .htaccess file.  [Robert Thau]
-
-  *) Clarified init code and nuked bogus warning in mod_access.c
-     [Florent Guillaume]
-
-  *) Corrected several directives in sample srm.conf
-     --- includes corrections to directory indexing icon-related directives
-     (using unknown.gif rather than unknown.xbm as the DefaultIcon, doing
-     icons for encodings right, and turning on AddEncoding by default).
-     [Roy Fielding]
-
-  *) Corrected descriptions of args to AddIcon and AddAlt in command table
-     [James Cloos]
-
-  *) INSTALL & README mention "contributed modules" directory [Brian
-     Behlendorf]
-
-  *) Fixed English in the license language...  "for for" --> "for".
-     [Roy Fielding]
-
-  *) Fixed ScriptAlias/Alias interaction by moving ScriptAlias handling to
-     mod_alias.c, merging it almost completely with handling of Alias, and
-     adding a 'notes' field to the request_rec which allows the CGI module
-     to discover whether the Alias module has put this request through
-     ScriptAlias (which it needs to know for back-compatibility, as the old
-     NCSA code did not check Options ExecCGI in ScriptAlias directories).
-     [Robert Thau]
-
-Changes with Apache 0.8.10                                       18 Aug 1995
-
-  *) AllowOverride applies to the named directory, and not just
-     subdirectories.  [David Robinson]
-
-  *) Do locking for accept() exclusion (on systems that need it)
-     using a special file created for the purpose in /usr/tmp, and
-     not the error log; using the error log causes real problems
-     if it's NFS-mounted; this is known to be the cause of a whole
-     lot of "server hang" problems with Solaris.  [David Robinson;
-     thanks to Merten Schumann for help diagnosing the problem].
-
-Changes with Apache 0.8.9                                        12 Aug 1995
-
-  *) Compiles with -DMAXIMUM_DNS ---- ooops! [Henrik Mortensen]
-
-  *) Nested includes see environment variables of the including document,
-     for NCSA bug-compatibility (some sites have standard footer includes
-     which try to print out the last-modified date).  [Eric Hagberg/Robert
-     Thau]
-
-  *) <!--exec cgi="/some/uri/here"--> always treats the item named by the
-     URI as a CGI script, even if it would have been treated as something
-     else if requested directly, for NCSA back-compatibility.  (Note that
-     this means that people who know the name of the script can see the
-     code just by asking for it).  [Robert Thau]
-
-  *) New version of dbmmanage script included in support directory as
-     dbmmanage.new.
-
-  *) Check if scoreboard file couldn't be opened, and say so, rather
-     then going insane [David Robinson]
-
-  *) POST to CGI works on A/UX [Jim Jagielski]
-
-  *) AddIcon and AddAlt commands work properly [Rob Hartill]
-
-  *) NCSA server push works properly --- the Arena bug compatibility
-     workaround, which broke it, is gone (use -DARENA_BUG_WORKAROUND
-     if you still want the workaround).  [Rob Hartill]
-
-  *) If client didn't submit any Accept-encodings, ignore encodings in
-     content negotiation.  (NB this will all have to be reworked anyway
-     for the new HTTP draft).  [Florent Guillaume]
-
-  *) Don't dump core when trying to log timed-out requests [Jim Jagielski]
-
-  *) Really honor CacheNegotiatedDocs [Florent Guillaume]
-
-  *) Give Redirect priority over Alias, for NCSA bug compatibility
-     [David Robinson]
-
-  *) Correctly set PATH_TRANSLATED in all cases from <!--#exec cmd=""-->,
-     paralleling earlier bug fix for CGI [David Robinson]
-
-  *) If DBM auth is improperly configured, report a server error and don't
-     dump core.
-
-  *) Deleted FCNTL_SERIALIZED_ACCEPTS from conf.h entry for A/UX;
-     it seems to work well enough without it (even in a 10 hits/sec
-     workout), and the overhead for the locking under A/UX is
-     alarmingly high (though it is very low on other systems).
-     [Eric Hagberg, Jim Jagielski]
-
-  *) Fixed portability problems with mod_cookies.c [Cliff Skolnick]
-
-  *) Further de-Berklize mod_cookies.c; change the bogus #include.  [Brian
-     Behlendorf/Eric Hagberg]
-
-  *) More improvements to default Configuration for A/UX [Jim Jagielski]
-
-  *) Compiles clean on NEXT [Rob Hartill]
-
-  *) Compiles clean on SGI [Robert Thau]
-
-Changes with Apache 0.8.8                                        08 Aug 1995
-
-  *) SunOS library prototypes now never included unless explicitly
-     requested in the configuration (via -DSUNOS_LIB_PROTOTYPES);
-     people using GNU libc on SunOS are screwed by prototypes for the
-     standard library.
-
-     (Those who wish to compile clean with gcc -Wall on a standard
-     SunOS setup need the prototypes, and may obtain them using
-     -DSUNOS_LIB_PROTOTYPES.  Those wishing to use -Wall on a system
-     with nonstandard libraries are presumably competent to make their
-     own arrangements).
-
-  *) Strips trailing '/' characters off both args to the Alias command,
-     to make 'Alias /foo/ /bar/' work.
-
-Changes with Apache 0.8.7                                        03 Aug 1995
-
-  *) Don't hang when restarting with a child from 'TransferLog "|..."' running
-     [reported by David Robinson]
-
-  *) Compiles clean on OSF/1 [David Robinson]
-
-  *) Added some of the more recent significant changes (AddLanguage stuff,
-     experimental LogFormat support) to CHANGES file in distribution root
-     directory
-
-Changes with Apache 0.8.6                                        02 Aug 1995
-
-  *) Deleted Netscape reload workaround --- it's in violation of HTTP specs.
-     (If you actually wanted a conditional GET which bypassed the cache, you
-     couldn't get it). [Reported by Roy Fielding]
-
-  *) Properly terminate headers on '304 Not Modified' replies to conditional
-     GETs --- no browser we can find cares much, but the CERN proxy chokes.
-     [Reported by Cliff Skolnick; fix discovered independently by Rob Hartill]
-
-  *) httpd -v doesn't call itself "Shambhala".  [Reported by Chuck Murcko]
-
-  *) SunOS lib-function prototypes in conf.h conditionalized on __GNUC__,
-     not __SUNPRO_C (they're needed to quiet gcc -Wall, but acc chokes on 'em,
-     and older versions don't set the __SUNPRO_C preprocessor variable).  On
-     all other systems, these are never used anyway.  [Reported by Mark Cox].
-
-  *) Scoreboard file (/tmp/htstatus.*) no longer publically writable.
-
-Changes with Apache 0.8.5                                        01 Aug 1995
-
-  *) Added last-minute configurable log experiment, as optional module
-
-  *) Correctly set r->bytes_sent for HTTP/0.9 requests, so they get logged
-     properly.  (One-line fix to http_protocol.c).
-
-  *) Work around bogus behavior when reloading from Netscape.
-     It's Netscape's bug --- for some reason they expect a request with
-     If-modified-since: to not function as a conditional GET if it also
-     comes with Pragma: no-cache, which is way out of line with the HTTP
-     spec (according to Roy Fielding, the redactor).
-
-  *) Added parameter to set maximum number of server processes.
-
-  *) Added patches to make it work on A/UX.  A/UX is *weird*.  [Eric Hagberg,
-     Jim Jagielski]
-
-  *) IdentityCheck bugfix [Chuck Murcko].
-
-  *) Corrected cgi-src/Makefile entry for new imagemap script.  [Alexei Kosut]
-
-  *) More sample config file corrections; add extension to AddType for
-     *.asis, move AddType generic description to its proper place, and
-     fix miscellaneous typos. [ Alexei Kosut ]
-
-  *) Deleted the *other* reference to the regents from the Berkeley
-     legal disclaimer (everyplace).
-
-  *) Nuked Shambhala name from src/README; had already cleaned it out
-     of everywhere else.
-
-Changes with Apache 0.8.4
-
-  *) Changes to server-pool management parms --- renamed current
-     StartServers to MinSpareServers, created separate StartServers
-     parameter which means what it says, and renamed MaxServers to
-     MaxSpareServers (though the old name still works, for NCSA 1.4
-     back-compatibility).  The old names were generally regarded as
-     too confusing.  Also altered "docs" in sample config files.
-
-  *) More improvements to default config files ---
-     sample directives (commented out) for XBitHack, BindAddress,
-     CacheNegotiatedDocs, VirtualHost; decent set of AddLanguage
-     defaults, AddTypes for send-as-is and imagemap magic types, and
-     improvements to samples for DirectoryIndex [Alexei Kosut]
-
-  *) Yet more improvements to default config files --- changes to
-     Alexei's sample AddLanguage directives, and sample LanguagePriority
-     [ Florent Guillaume ]
-
-  *) Set config file locations properly if not set in httpd.conf
-     [ David Robinson ]
-
-  *) Don't escape URIs in internal redirects multiple times; don't
-     do that when translating PATH_INFO to PATH_TRANSLATED either.
-     [ David Robinson ]
-
-  *) Corrected spelling of "Required" in 401 error reports [Andrew Wilson]
-
-Changes with Apache 0.8.3
-
-  *) Edited distribution README to *briefly* summarize installation
-     procedures, and give a pointer to the INSTALL file in the src/
-     directory.
-
-  *) Upgraded imagemap script in cgi-bin to 1.8 version from more
-     recent NCSA distributions.
-
-  *) Bug fix to previous bug fix --- if .htaccess file and <Directory>
-     exist for the same directory, use both and don't segfault.  [Reported
-     by David Robinson]
-
-  *) Proper makefile dependencies [David Robinson]
-
-  *) Note (re)starts in error log --- reported by Rob Hartill.
-
-  *) Only call no2slash() after get_path_info() has been done, to
-     preserve multiple slashes in the PATH_INFO [NCSA compatibility,
-     reported by Andrew Wilson, though this one is probably a real bug]
-
-  *) Fixed mod_imap.c --- relative paths with base_uri referer don't
-     dump core when Referer is not supplied. [Randy Terbush]
-
-  *) Lightly edited sample config files to refer people to our documentation
-     instead of NCSA's, and to list Rob McCool as *original* author (also
-     deleted his old, and no doubt non-functional email address).  Would be
-     nice to have examples of new features...
-
-Changes with Apache 0.8.2                                        19 Jul 1995
-
-  *) Added AddLanuage code [Florent Guillaume]
-
-  *) Don't say "access forbidden" when a CGI script is not found.  [Mark Cox]
-
-  *) All sorts of problems when MultiViews finds a directory.  It would
-     be nice if mod_dir.c was robust enough to handle that, but for now,
-     just punt.  [reported by Brian Behlendorf]
-
-  *) Wait for all children on restart, to make sure that the old socket
-     is gone and we can reopen it.  [reported by Randy Terbush]
-
-  *) Imagemap module is enabled in default Configuration
-
-  *) RefererLog and UserAgentLog modules properly default the logfile
-     [Randy Terbush]
-
-  *) Mark Cox's mod_cookies added to the distribution as an optional
-     module (commented out in the default Configuration, and noted as
-     an experiment, along with mod_dld). [Mark Cox]
-
-  *) Compiles on ULTRIX (a continuing battle...). [Robert Thau]
-
-  *) Fixed nasty bug in SIGTERM handling [reported by Randy Terbush]
-
-  *) Changed "Shambhala" to "Apache" in API docs. [Robert Thau]
-
-  *) Added new, toothier legal disclaimer. [Robert Thau; copied from BSD
-     license]
-
-Changes with Apache 0.8.1
-
-  *) New imagemap module [Randy Terbush]
-
-  *) Replacement referer log module with NCSA-compatible RefererIgnore
-     [Matthew Gray again]
-
-  *) Don't mung directory listings with very long filenames.
-     [Florent Guillaume]
-
-Changes with Apache 0.8.0 (nee Shambhala 0.6.2)                  16 Jul 1995
-
-  *) New config script.  See INSTALL for info.  [Robert Thau]
-
-  *) Scoreboard mechanism for regulating the number of extant server
-     processes.  MaxServers and StartServers defaults are the same as
-     for NCSA, but the meanings are slightly different.  (Actually,
-     I should probably lower the MaxServers default to 10).
-
-     Before asking for a new connection, each server process checks
-     the number of other servers which are also waiting for a
-     connection.  If there are more than MaxServers, it quietly dies
-     off.  Conversely, every second, the root, or caretaker, process
-     looks to see how many servers are waiting for a new connection;
-     if there are fewer than StartServers, it starts a new one.  This
-     does not depend on the number of server processes already extant.
-     The accounting is arranged through a "scoreboard" file, named
-     /tmp/htstatus.*, on which each process has an independent file
-     descriptor (they need to seek without interference).
-
-     The end effect is that MaxServers is the maximum number of
-     servers on an *inactive* server machine, but more will be forked
-     off to handle unusually heavy loads (or unusually slow clients);
-     these will die off when they are no longer needed --- without
-     reverting to the overhead of full forking operation.  There is a
-     hard maximum of 150 server processes compiled in, largely to
-     avoid forking out of control and dragging the machine down.
-     (This is arguably too high).
-
-     In my server endurance tests, this mechanism did not appear to
-     impose any significant overhead, even after I forced it to put the
-     scoreboard file on a normal filesystem (which might have more
-     overhead than tmpfs).  [Robert Thau]
-
-  *) Set HTTP_FOO variables for SSI <!--#exec cmd-->s, not just CGI scripts.
-     [Cliff Skolnick]
-
-  *) Read .htaccess files even in directory with <Directory> section.
-     (Former incompatibility noted on mailing list, now fixed). [Robert
-     Thau]
-
-  *) "HEAD /" gives the client a "Bad Request" error message, rather
-     than trying to send no body *and* no headers.  [Cliff Skolnick].
-
-  *) Don't produce double error reports for some very obscure cases
-     mainly involving auth configuration (the "all modules decline to
-     handle" case which is a sure sign of a server bug in most cases,
-     but also happens when authentication is badly misconfigured).
-     [Robert Thau]
-
-  *) Moved FCNTL_SERIALIZED_ACCEPT defines into conf.h (that's what
-     it's *for*, and this sort of thing really shouldn't be cluttering
-     up the Makefile). [Robert Thau]
-
-  *) Incidental code cleanups in http_main.c --- stop dragging
-     sa_client around; just declare it where used.  [Robert Thau]
-
-  *) Another acc-related fix.  (It doesn't like const char
-     in some places...). [Mark Cox]
-
-Changes with Shambhala 0.6.1                                     13 Jul 1995
-
-  *) Fixed auth_name-related typos in http_core.c [Brian Behlendorf]
-     Also, fixed auth typo in http_protocol.c unmasked by this fix.
-
-  *) Compiles clean with acc on SunOS [Paul Sutton]
-
-  *) Reordered modules in modules.c so that Redirect takes priority
-     over ScriptAlias, for NCSA bug-compatibility [Rob Hartill] ---
-     believe it or not, he has an actual site with a ScriptAlias and
-     a Redirect declared for the *exact same directory*.  Even *my*
-     compatibility fetish wouldn't motivate me to fix this if the fix
-     required any effort, but it doesn't, so what the hey.
-
-  *) Fixed to properly default several server_rec fields for virtual
-     servers from the corresponding fields in the main server_rec.
-     [Cliff Skolnick --- 'port' was a particular irritant].
-
-  *) No longer kills off nph- child processes before they are
-     finished sending output. [Matthew Gray]
-
-Changes with Shambhala 0.6.0                                     10 Jul 1995
-
-  *) Two styles of timeout --- hard and soft.  soft_timeout()s just put
-     the connection to the client in an "aborted" state, but otherwise
-     allow whatever handlers are running to clean up.  hard_timeout()s
-     abort the request in progress completely; anything not tied to some
-     resource pool cleanup will leak.  They're still around because I
-     haven't yet come up with a more elegant way of handling
-     timeouts when talking to something that isn't the client.  The
-     default_handler and the dir_handler now use soft timeouts, largely
-     so I can test the feature.  [Robert Thau]
-
-  *) TransferLog "| my_postprocessor ..." seems to be there.  Note that
-     the case of log handlers dying prematurely is probably handled VERY
-     gracelessly at this point, and if the logger stops reading input,
-     the server will hang.  (It is known to correctly restart the
-     logging process on server restart; this is (should be!) going through
-     the same SIGTERM/pause/SIGKILL routine used to ding an errant CGI
-     script).  [Robert Thau]
-
-  *) asis files supported (new module).  [Robert Thau]
-
-  *) IdentityCheck code is compiled in, but has not been tested.  (I
-     don't know anyone who runs identd). [Robert Thau]
-
-  *) PATH_INFO and PATH_TRANSLATED are not set unless some real PATH_INFO
-     came in with the request, for NCSA bug-compatibility. [Robert Thau]
-
-  *) Don't leak the DIR * on HEAD request for a directory. [Robert Thau]
-
-  *) Deleted the block_alarms() stuff from dbm_auth; no longer necessary,
-     as timeouts are not in scope. [Robert Thau]
-
-  *) quoted-string args in config files now handled correctly (doesn't drop
-     the last character). [Robert Thau; reported by Randy Terbush]
-
-  *) Fixed silly typo in http_main.c which was suddenly fatal in HP-UX.
-     How the hell did it ever work? [Robert Thau; reported by Rob Hartill]
-
-  *) mod_core.c --- default_type returns DEFAULT_TYPE (the compile-time
-     default default type); the former default default behavior when all
-     type-checkers defaulted had been a core dump.  [Paul Sutton]
-
-  *) Copy filenames out of the struct dirent when indexing
-     directories.  (On Linux, readdir() returns a pointer to the same
-     memory area every time).  Fix is in mod_dir.c.  [Paul Sutton]
-
-Changes with Shambhala 0.5.3 [not released]
-
-  *) Default response handler notes "file not found" in the error log,
-     if the file was not found.  [Cliff Skolnick].
-
-  *) Another Cliff bug --- "GET /~user" now properly redirects (the userdir
-     code no longer sets up bogus PATH_INFO which fakes out the directory
-     handler). [Cliff Skolnick]
-
-Changes with Shambhala 0.5.2                                     06 Jul 1995
-
-  *) Changes to http_main.c --- root server no longer plays silly
-     games with SIGCHLD, and so now detects and replaces dying
-     children.  Child processes just die on SIGTERM, without taking
-     the whole process group with them.  Potential problem --- if any
-     child process refuses to die, we hang in restart.
-     MaxRequestsPerChild may still not work, but it certainly works
-     better than it did before this!  [Robert Thau]
-
-  *) mod_dir.c bug fixes: ReadmeName and HeaderName
-     work (or work better, at least); over-long description lines
-     properly terminated. [Mark Cox]
-
-  *) http_request.c now calls unescape_url() more places where it
-     should [Paul Sutton].
-
-  *) More directory handling bugs (reported by Cox)
-     Parent Directory link is now set correctly. [Robert Thau]
-
-Changes with Shambhala 0.5.1                                     04 Jul 1995
-
-  *) Generalized cleanup interface in alloc.c --- any function can be
-     registered with alloc.c as a cleanup for a resource pool;
-     tracking of files and file descriptors has been reimplemented in
-     terms of this interface, so I can give it some sort of a test.
-     [Robert Thau]
-
-  *) More changes in alloc.c --- new cleanup_for_exec() function,
-     which tracks down and closes all file descriptors which have been
-     registered with the alloc.c machinery before the server exec()s a
-     child process for CGI or <!--#exec-->.  CGI children now get
-     started with exactly three file descriptors open.  Hopefully,
-     this cures the problem Rob H. was having with overly persistent
-     CGI connections. [Robert Thau]
-
-  *) Mutual exclusion around the accept() in child_main() --- this is
-     required on at least SGI, Solaris and Linux, and is #ifdef'ed in
-     by default on those systems only (-DFCNTL_SERIALIZED_ACCEPT).
-     This uses fcntl(F_SETLK,...) on the error log descriptor because
-     flock() on that descriptor won't work on systems which have BSD
-     flock() semantics, including (I think) Linux 1.3 and Solaris.
-
-     This does work on SunOS (when the server is idle, only one
-     process in the pool is waiting on accept()); it *ought* to work
-     on the other systems. [Robert Thau]
-
-  *) FreeBSD and BSDI portability tweaks [Chuck Murcko]
-
-  *) sizeof(*sa_client) bugfix from [Rob Hartill]
-
-  *) pstrdup(..., NULL) returns NULL, [Randy Terbush]
-
-  *) block_alarms() to avoid leaking the DBM* in dbm auth (this should
-     be unnecessary if I go to the revised timeout-handling scheme).
-     [Robert Thau]
-
-  *) For NCSA bug-compatibility, set QUERY_STRING env var (to a null
-     string) even if none came in with the request.  [Robert Thau]
-
-  *) CHANGES file added to distribution ;-).
-
-Changes with Shambhala 0.4.5
-
-  *) mod_dld --- early dynamic loading support [rst]
-  *) Add wildcard content handlers for XBITHACK; default_hander now
-     invoked with that mechanism (as a handler hanging off mod_core) [rst]
-  *) XBITHACK supported as a wildcard content-handler, and 
-     configurable at run-time (not just at compile time, as in the
-     "patchy server" releases) [rst]
-
-Changes with Shambhala 0.4.4                                     30 Jun 1995
-
-  *) Fixed basic thinkos in mod_dbm_auth.c [rst, reported by Mark Cox]
-  *) Handle Addtype x/y .z [rst, reported by Cox]
-
-Changes with Shambhala 0.4.3
-
-  *) Fixed very dumb bug in mod_alias; "Alias" and "Redirect" are not
-     synonymous [rst, terbush]
-
-Changes with Shambhala 0.4.1                                     28 Jun 1995
-
-  *) First-cut virtual host implementation; some refit in the config
-     reading code, and log management, was necessary to support this [rst]
-  *) Sub-pool machinery, originally added to avoid excessive storage
-     allocation on listings of large directories (which turned out to
-     be the problem that the 0.3 storage accounting was added to
-     find).  Subrequests and mod_dir changed to use subpools.  [rst]
-  *) More memory debugging --- free list consistency checks. [rst]
-  *) Added err_headers to request_rec, with support elsewhere [rst]
-  *) Other fixes to minor bugs in mod_dir and mod_includes [rst, terbush]
-
-Changes with Shambhala 0.3                                       19 Jun 1995
-
-  *) Switch ONE_PROCESS to a runtime command-line option (-X)
-  *) Don't compile in mod_ai_backcompat by default
-  *) Switch name of server from Apache to Shambhala in Makefile
-  *) Add some accounting routines to track memory usage in the pools,
-     for debugging
-
-Changes with Shambhala 0.2
-
-  *) Set DOCUMENT_ROOT CGI variable
-  *) Add single-process debugging, as a compile-time option (ONE_PROCESS)
-  *) Add critical section protection to handling of cleanup structures 
-     in alloc.c [rst]
-  *) Significant code reorg within the server core to group related
-     functions together [rst]
-  *) Correctly handle clients that hang up before sending any request
-     [rst]
-  *) Replace dying child processes. [rst]
-
-Changes with Shambhala 0.1                                       12 Jun 1995
-
-   Major rewrite of the pre-existing "patchy server" codebase, by
-   Robert Thau (rst).  Significant portions of the server code, such
-   as configuration-file handling and HTTP authentication support,
-   were ripped out and rewritten from scratch.  Code that was not
-   completely rewritten was significantly altered.
-
-   Major changes with this release include:
-
-   *) Introduction of the module API; in request handling, the central 
-      machinery just dispatches to various modules, which actually do
-      most of the work.  Configuration handling is similar --- modules
-      declare their own commands, and the central machinery just
-      dispatches to them.  
-
-      API features from shambhala/0.1 were substantially unchanged in
-      Apache 1.0 and 1.1.  (1.0 API features not yet present in this
-      release, such as wildcard handlers and subpools, were added in
-      subsequent Shambhala releases, and were also generally rst's
-      work). 
-
-   *) This release included the following modules:
-
-      mod_access      (access control --- allow and deny directives),
-      mod_alias       (Alias and Redirect commands),
-      mod_auth        (straight HTTP authentication, based on flat-files)
-      mod_auth_dbm    (same, with dbm files)
-      mod_cgi         (CGI scripts and, in this release, ScriptAlias)
-      mod_common_log  (CLF access logs; later renamed mod_log_common)
-      mod_dir         (directory indexing)
-      mod_include     (server-side includes)
-      mod_mime        (AddType directives)
-      mod_negotiation (content negotiation)
-      mod_userdir     (support for users' public_html directories)
-
-      It also included a mod_ai_backcompat, which was a private hack
-      for back-compatibility with rst's own AI-lab servers.
-
-      All of these modules were substantially complete, and functional 
-      or nearly so (a few, which implemented features not in use at
-      Thau's site, required patches of a few lines).
-
-   *) sub-request machinery, to allow modules to determine how other
-      modules would assign MIME types to a given file, or optionally
-      serve its content (this is heavily used by mod_dir, mod_include
-      and mod_negotiation).
-
-   *) Resource pool system for keeping track of memory allocated and
-      files opened in service of a particular request.  Much of the
-      code in the modules (when they weren't rewrites) was adjusted to 
-      replace a pervasive convention of using fixed-size buffers on
-      the stack with an equally pervasive convention of using memory
-      allocated with palloc().
-
-   *) Reorganization of data structures associated with a given
-      request to eliminate use of global variables and the troublesome 
-      unmunge_name function (used in NCSA and early Apache releases to 
-      attempt to determine the URI which mapped to a given filename
-      --- a difficult proposition, given that it is easy to produce
-      setups in which multiple URIs map to the same file).
-
-   *) Source files renamed and rearranged
-
-   *) Very simple pre-forking behavior --- parent process forked off a 
-      fixed number of children, and then just waited for SIGHUP.
-
-   *) Other more minor changes too numerous to list.
-
-   This release included modified versions of a lot of code from the
-   Apache 0.6.4 public release, plus an early pre-forking patch
-   codeveloped by Robert Thau and Rob Hartill.
-
-Changes with Apache 0.7.3                                        20 Jun 1995
-
-   *) There were a bunch of changes between Apache 0.6.4 and 0.7.3 that
-      were incorporated by Rob Hartill on the main branch while Robert Thau
-      worked on the Shambhala rewrite above.  Most were merged into the
-      Shambala architecture after Apache 0.8.0.
-
-Changes with Apache 0.6.4                                        13 May 1995
-
-   *) Patches by Rob Hartill, Cliff Skolnick, Randy Terbush, Robert Thau,
-      and others.
-
-Changes with Apache 0.5.1                                        10 Apr 1995
-
-Changes with Apache 0.4                                          02 Apr 1995
-
-  *) Patches by Brian Behlendorf, Andrew Wilson, Robert Thau,
-     and Rob Hartill.
-
-Changes with Apache 0.3                                          24 Mar 1995
-
-  *) Patches by Robert Thau, David Robinson, Rob Hartill, and
-     Carlos Varela.
-
-Changes with Apache 0.2                                          18 Mar 1995
-
-  *) Based on NCSA httpd 1.3 by Rob McCool and patches by CERT,
-     Roy Fielding, Robert Thau, Nicolas Pioch, David Robinson,
-     Brian Behlendorf, Rob Hartill, and Cliff Skolnick.
diff --git a/INSTALL b/INSTALL
deleted file mode 100644
index 16472e9..0000000
--- a/INSTALL
+++ /dev/null
@@ -1,91 +0,0 @@
-
-  APACHE INSTALLATION OVERVIEW
-
-  Quick Start - Unix
-  ------------------
-
-  For complete installation documentation, see [ht]docs/manual/install.html or
-  http://httpd.apache.org/docs-2.0/install.html
-
-     $ ./configure --prefix=PREFIX
-     $ make
-     $ make install
-     $ PREFIX/bin/apachectl start
-
-     NOTES: * Replace PREFIX with the filesystem path under which 
-              Apache should be installed.  A typical installation
-              might use "/usr/local/apache2" for PREFIX (without the
-              quotes).
-
-            * If you are building on FreeBSD, be aware that threads will
-              be disabled and the prefork MPM will be used by default,
-              as threads do not work well with Apache on FreeBSD.  If
-              you wish to try a threaded Apache on FreeBSD anyway, use
-              "./configure --enable-threads".
-
-            * If you are building on Mac OS X (Darwin), make sure to
-              use libtool 1.4.2 or newer.
-
-            * If you are a developer building Apache directly from CVS,
-              you will need to run ./buildconf before running configure.
-
-  For a short impression of what possibilities you have, here is a
-  typical example which configures Apache for the installation tree
-  /sw/pkg/apache with a particular compiler and flags plus the two
-  additional modules mod_rewrite and mod_speling for later loading
-  through the DSO mechanism:
-
-     $ CC="pgcc" CFLAGS="-O2" \
-     ./configure --prefix=/sw/pkg/apache \
-     --enable-rewrite=shared \
-     --enable-speling=shared 
-
-  The easiest way to find all of the configuration flags for Apache 2.0
-  is to run ./configure --help.
-
-
-  Quick Start - Windows
-  ---------------------
-
-  For complete documentation, see [ht]docs/manual/platform/windows.html or
-  http://httpd.apache.org/docs-2.0/platform/windows.html.
-
-  The Apache/Win32 binaries are primarily distributed as a Windows Installer 
-  package (.msi), and may be available as a .zip file as well.  These packages 
-  are named apache-2.0.xx-win32-x86.msi and apache-2.0.xx-win32-x86.zip.  
-  Please choose the .msi package if at all possible.
-
-  If you have unpacked a source distribution (named httpd-2.0-xx.zip, without
-  any -win32-x86 notation) you must compile the package yourself, see the links
-  mentioned above.  Unless you intended to do this, please look again for the 
-  binary package from http://www.apache.org/dist/httpd/binaries/win32/ and
-  install that .msi (or .zip package, if you must.)
-
-  If you have unpacked this binary distribution from the .zip package, you 
-  _must_ edit the conf/httpd.conf file (with notepad or another text editor) 
-  to reflect the correct ServerName, Domain, and directory paths.  Search for 
-  the text "@@" to discover what you must edit.  To install and start the 
-  service after you have corrected the httpd.conf file, use the command
-
-    bin\Apache -k install
-    bin\Apache -k start
-
-  The .msi package configures the httpd.conf file, and installs and starts 
-  the Apache2 service for you.  It also installs plenty of useful shortcuts
-  and the taskbar ApacheMonitor.  We strongly encourage you to use it.
-
-
-  Postscript
-  ----------
-
-  The Apache HTTP Server group cannot field user's installation questions.
-  There are many valuable forums to help you get started.  Please refer your
-  questions to the appropriate forum, such as the Users Mailing List at
-  http://httpd.apache.org/userslist.html or the usenet newsgroups
-  comp.infosystems.www.servers.unix or
-  comp.infosystems.www.servers.ms-windows.
-
-  Thanks for using the Apache HTTP Server, version 2.0.
-
-                                     The Apache Software Foundation
-                                     http://www.apache.org/
diff --git a/InstallBin.dsp b/InstallBin.dsp
deleted file mode 100644
index e772efa..0000000
--- a/InstallBin.dsp
+++ /dev/null
@@ -1,109 +0,0 @@
-# Microsoft Developer Studio Project File - Name="InstallBin" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) External Target" 0x0106
-
-CFG=InstallBin - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "InstallBin.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "InstallBin.mak" CFG="InstallBin - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "InstallBin - Win32 Release" (based on "Win32 (x86) External Target")
-!MESSAGE "InstallBin - Win32 Debug" (based on "Win32 (x86) External Target")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-
-!IF  "$(CFG)" == "InstallBin - Win32 Release"
-
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Cmd_Line "NMAKE /f InstallBin.mak"
-# PROP BASE Rebuild_Opt "/a"
-# PROP BASE Target_File "\Apache2.0\bin\Apache.exe"
-# PROP BASE Bsc_Name "InstallBin.bsc"
-# PROP BASE Target_Dir ""
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Cmd_Line "NMAKE /f makefile.win INSTDIR="\Apache2" SHORT=R LONG=Release _install"
-# PROP Rebuild_Opt ""
-# PROP Target_File "\Apache2\bin\Apache.exe"
-# PROP Bsc_Name "Browse\Apache.bsc"
-# PROP Target_Dir ""
-
-!ELSEIF  "$(CFG)" == "InstallBin - Win32 Debug"
-
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Cmd_Line "NMAKE /f InstallBin.mak"
-# PROP BASE Rebuild_Opt "/a"
-# PROP BASE Target_File "\Apache2.0\bin\Apache.exe"
-# PROP BASE Bsc_Name "InstallBin.bsc"
-# PROP BASE Target_Dir ""
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Cmd_Line "NMAKE /f makefile.win INSTDIR="\Apache2" SHORT=D LONG=Debug _install"
-# PROP Rebuild_Opt ""
-# PROP Target_File "\Apache2\bin\Apache.exe"
-# PROP Bsc_Name ""
-# PROP Target_Dir ""
-
-!ENDIF 
-
-# Begin Target
-
-# Name "InstallBin - Win32 Release"
-# Name "InstallBin - Win32 Debug"
-
-!IF  "$(CFG)" == "InstallBin - Win32 Release"
-
-!ELSEIF  "$(CFG)" == "InstallBin - Win32 Debug"
-
-!ENDIF 
-
-# Begin Source File
-
-SOURCE=..\logs\access.log
-# End Source File
-# Begin Source File
-
-SOURCE=.\os\win32\BaseAddr.ref
-# End Source File
-# Begin Source File
-
-SOURCE=.\CHANGES
-# End Source File
-# Begin Source File
-
-SOURCE=..\logs\error.log
-# End Source File
-# Begin Source File
-
-SOURCE=..\conf\httpd.conf
-# End Source File
-# Begin Source File
-
-SOURCE=.\Makefile.win
-# End Source File
-# Begin Source File
-
-SOURCE=..\STATUS
-# End Source File
-# End Target
-# End Project
diff --git a/LICENSE b/LICENSE
deleted file mode 100644
index 0a0cb95..0000000
--- a/LICENSE
+++ /dev/null
@@ -1,525 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-
-APACHE HTTP SERVER SUBCOMPONENTS: 
-
-The Apache HTTP Server includes a number of subcomponents with
-separate copyright notices and license terms. Your use of the source
-code for the these subcomponents is subject to the terms and
-conditions of the following licenses. 
-
-For the mod_mime_magic component:
-
-/*
- * mod_mime_magic: MIME type lookup via file magic numbers
- * Copyright (c) 1996-1997 Cisco Systems, Inc.
- *
- * This software was submitted by Cisco Systems to the Apache Group in July
- * 1997.  Future revisions and derivatives of this source code must
- * acknowledge Cisco Systems as the original contributor of this module.
- * All other licensing and usage conditions are those of the Apache Group.
- *
- * Some of this code is derived from the free version of the file command
- * originally posted to comp.sources.unix.  Copyright info for that program
- * is included below as required.
- * ---------------------------------------------------------------------------
- * - Copyright (c) Ian F. Darwin, 1987. Written by Ian F. Darwin.
- *
- * This software is not subject to any license of the American Telephone and
- * Telegraph Company or of the Regents of the University of California.
- *
- * Permission is granted to anyone to use this software for any purpose on any
- * computer system, and to alter it and redistribute it freely, subject to
- * the following restrictions:
- *
- * 1. The author is not responsible for the consequences of use of this
- * software, no matter how awful, even if they arise from flaws in it.
- *
- * 2. The origin of this software must not be misrepresented, either by
- * explicit claim or by omission.  Since few users ever read sources, credits
- * must appear in the documentation.
- *
- * 3. Altered versions must be plainly marked as such, and must not be
- * misrepresented as being the original software.  Since few users ever read
- * sources, credits must appear in the documentation.
- *
- * 4. This notice may not be removed or altered.
- * -------------------------------------------------------------------------
- *
- */
-
-
-For the  modules\mappers\mod_imap.c component:
-
-  "macmartinized" polygon code copyright 1992 by Eric Haines, erich@eye.com
-
-For the  server\util_md5.c component:
-
-/************************************************************************
- * NCSA HTTPd Server
- * Software Development Group
- * National Center for Supercomputing Applications
- * University of Illinois at Urbana-Champaign
- * 605 E. Springfield, Champaign, IL 61820
- * httpd@ncsa.uiuc.edu
- *
- * Copyright  (C)  1995, Board of Trustees of the University of Illinois
- *
- ************************************************************************
- *
- * md5.c: NCSA HTTPd code which uses the md5c.c RSA Code
- *
- *  Original Code Copyright (C) 1994, Jeff Hostetler, Spyglass, Inc.
- *  Portions of Content-MD5 code Copyright (C) 1993, 1994 by Carnegie Mellon
- *     University (see Copyright below).
- *  Portions of Content-MD5 code Copyright (C) 1991 Bell Communications 
- *     Research, Inc. (Bellcore) (see Copyright below).
- *  Portions extracted from mpack, John G. Myers - jgm+@cmu.edu
- *  Content-MD5 Code contributed by Martin Hamilton (martin@net.lut.ac.uk)
- *
- */
-
-
-/* these portions extracted from mpack, John G. Myers - jgm+@cmu.edu */
-/* (C) Copyright 1993,1994 by Carnegie Mellon University
- * All Rights Reserved.
- *
- * Permission to use, copy, modify, distribute, and sell this software
- * and its documentation for any purpose is hereby granted without
- * fee, provided that the above copyright notice appear in all copies
- * and that both that copyright notice and this permission notice
- * appear in supporting documentation, and that the name of Carnegie
- * Mellon University not be used in advertising or publicity
- * pertaining to distribution of the software without specific,
- * written prior permission.  Carnegie Mellon University makes no
- * representations about the suitability of this software for any
- * purpose.  It is provided "as is" without express or implied
- * warranty.
- *
- * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO
- * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
- * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE
- * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
- * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
- * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
- * SOFTWARE.
- */
-
-/*
- * Copyright (c) 1991 Bell Communications Research, Inc. (Bellcore)
- *
- * Permission to use, copy, modify, and distribute this material
- * for any purpose and without fee is hereby granted, provided
- * that the above copyright notice and this permission notice
- * appear in all copies, and that the name of Bellcore not be
- * used in advertising or publicity pertaining to this
- * material without the specific, prior written permission
- * of an authorized representative of Bellcore.  BELLCORE
- * MAKES NO REPRESENTATIONS ABOUT THE ACCURACY OR SUITABILITY
- * OF THIS MATERIAL FOR ANY PURPOSE.  IT IS PROVIDED "AS IS",
- * WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES.  
- */
-
-For the  srclib\apr\include\apr_md5.h component: 
-/*
- * This is work is derived from material Copyright RSA Data Security, Inc.
- *
- * The RSA copyright statement and Licence for that original material is
- * included below. This is followed by the Apache copyright statement and
- * licence for the modifications made to that material.
- */
-
-/* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
-   rights reserved.
-
-   License to copy and use this software is granted provided that it
-   is identified as the "RSA Data Security, Inc. MD5 Message-Digest
-   Algorithm" in all material mentioning or referencing this software
-   or this function.
-
-   License is also granted to make and use derivative works provided
-   that such works are identified as "derived from the RSA Data
-   Security, Inc. MD5 Message-Digest Algorithm" in all material
-   mentioning or referencing the derived work.
-
-   RSA Data Security, Inc. makes no representations concerning either
-   the merchantability of this software or the suitability of this
-   software for any particular purpose. It is provided "as is"
-   without express or implied warranty of any kind.
-
-   These notices must be retained in any copies of any part of this
-   documentation and/or software.
- */
-
-For the  srclib\apr\passwd\apr_md5.c component:
-
-/*
- * This is work is derived from material Copyright RSA Data Security, Inc.
- *
- * The RSA copyright statement and Licence for that original material is
- * included below. This is followed by the Apache copyright statement and
- * licence for the modifications made to that material.
- */
-
-/* MD5C.C - RSA Data Security, Inc., MD5 message-digest algorithm
- */
-
-/* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
-   rights reserved.
-
-   License to copy and use this software is granted provided that it
-   is identified as the "RSA Data Security, Inc. MD5 Message-Digest
-   Algorithm" in all material mentioning or referencing this software
-   or this function.
-
-   License is also granted to make and use derivative works provided
-   that such works are identified as "derived from the RSA Data
-   Security, Inc. MD5 Message-Digest Algorithm" in all material
-   mentioning or referencing the derived work.
-
-   RSA Data Security, Inc. makes no representations concerning either
-   the merchantability of this software or the suitability of this
-   software for any particular purpose. It is provided "as is"
-   without express or implied warranty of any kind.
-
-   These notices must be retained in any copies of any part of this
-   documentation and/or software.
- */
-/*
- * The apr_md5_encode() routine uses much code obtained from the FreeBSD 3.0
- * MD5 crypt() function, which is licenced as follows:
- * ----------------------------------------------------------------------------
- * "THE BEER-WARE LICENSE" (Revision 42):
- * <phk@login.dknet.dk> wrote this file.  As long as you retain this notice you
- * can do whatever you want with this stuff. If we meet some day, and you think
- * this stuff is worth it, you can buy me a beer in return.  Poul-Henning Kamp
- * ----------------------------------------------------------------------------
- */
-
-For the srclib\apr-util\crypto\apr_md4.c component:
-
- * This is derived from material copyright RSA Data Security, Inc.
- * Their notice is reproduced below in its entirety.
- *
- * Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
- * rights reserved.
- *
- * License to copy and use this software is granted provided that it
- * is identified as the "RSA Data Security, Inc. MD4 Message-Digest
- * Algorithm" in all material mentioning or referencing this software
- * or this function.
- *
- * License is also granted to make and use derivative works provided
- * that such works are identified as "derived from the RSA Data
- * Security, Inc. MD4 Message-Digest Algorithm" in all material
- * mentioning or referencing the derived work.
- *
- * RSA Data Security, Inc. makes no representations concerning either
- * the merchantability of this software or the suitability of this
- * software for any particular purpose. It is provided "as is"
- * without express or implied warranty of any kind.
- *
- * These notices must be retained in any copies of any part of this
- * documentation and/or software.
- */
-
-For the srclib\apr-util\include\apr_md4.h component:
-
- *
- * This is derived from material copyright RSA Data Security, Inc.
- * Their notice is reproduced below in its entirety.
- *
- * Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
- * rights reserved.
- *
- * License to copy and use this software is granted provided that it
- * is identified as the "RSA Data Security, Inc. MD4 Message-Digest
- * Algorithm" in all material mentioning or referencing this software
- * or this function.
- *
- * License is also granted to make and use derivative works provided
- * that such works are identified as "derived from the RSA Data
- * Security, Inc. MD4 Message-Digest Algorithm" in all material
- * mentioning or referencing the derived work.
- *
- * RSA Data Security, Inc. makes no representations concerning either
- * the merchantability of this software or the suitability of this
- * software for any particular purpose. It is provided "as is"
- * without express or implied warranty of any kind.
- *
- * These notices must be retained in any copies of any part of this
- * documentation and/or software.
- */
-
-
-For the srclib\apr-util\test\testdbm.c component:
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * This file came from the SDBM package (written by oz@nexus.yorku.ca).
- * That package was under public domain. This file has been ported to
- * APR, updated to ANSI C and other, newer idioms, and added to the Apache
- * codebase under the above copyright and license.
- */
-
-
-For the srclib\apr-util\test\testmd4.c component:
-
- *
- * This is derived from material copyright RSA Data Security, Inc.
- * Their notice is reproduced below in its entirety.
- *
- * Copyright (C) 1990-2, RSA Data Security, Inc. Created 1990. All
- * rights reserved.
- *
- * RSA Data Security, Inc. makes no representations concerning either
- * the merchantability of this software or the suitability of this
- * software for any particular purpose. It is provided "as is"
- * without express or implied warranty of any kind.
- *
- * These notices must be retained in any copies of any part of this
- * documentation and/or software.
- */
-
-For the srclib\apr-util\xml\expat\conftools\install-sh component:
-
-#
-# install - install a program, script, or datafile
-# This comes from X11R5 (mit/util/scripts/install.sh).
-#
-# Copyright 1991 by the Massachusetts Institute of Technology
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of M.I.T. not be used in advertising or
-# publicity pertaining to distribution of the software without specific,
-# written prior permission.  M.I.T. makes no representations about the
-# suitability of this software for any purpose.  It is provided "as is"
-# without express or implied warranty.
-#
-
-For the srclib\pcre\install-sh component:
-
-#
-# Copyright 1991 by the Massachusetts Institute of Technology
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of M.I.T. not be used in advertising or
-# publicity pertaining to distribution of the software without specific,
-# written prior permission.  M.I.T. makes no representations about the
-# suitability of this software for any purpose.  It is provided "as is"
-# without express or implied warranty.
-
-For the pcre component:
-
-/*
-PCRE LICENCE
-------------
-PCRE is a library of functions to support regular expressions whose syntax
-and semantics are as close as possible to those of the Perl 5 language.
-Written by: Philip Hazel <ph10@cam.ac.uk>
-University of Cambridge Computing Service,
-Cambridge, England. Phone: +44 1223 334714.
-Copyright (c) 1997-2000 University of Cambridge
-
-Permission is granted to anyone to use this software for any purpose on any
-computer system, and to redistribute it freely, subject to the following
-restrictions:
-
-1. This software is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-
-2. The origin of this software must not be misrepresented, either by
-   explicit claim or by omission. In practice, this means you must put
-   a sentence like this
-
-     Regular expression support is provided by the PCRE library package,
-     which is open source software, copyright by the University of
-     Cambridge.
-
-   somewhere reasonably visible in your documentation and in any relevant
-   files. A reference to the ftp site for the source should also be given
-
-   ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/
-   in the documentation.
-
-3. Altered versions must be plainly marked as such, and must not be
-   misrepresented as being the original software.
-
-4. If PCRE is embedded in any software that is released under the GNU
-   General Purpose Licence (GPL), then the terms of that licence shall
-   supersede any condition above with which it is incompatible.
-
-End
-*/
-
-
-
-For the test\zb.c component:
-
-/*                          ZeusBench V1.01
-			    ===============
-
-This program is Copyright (C) Zeus Technology Limited 1996.
-
-This program may be used and copied freely providing this copyright notice
-is not removed.
-
-This software is provided "as is" and any express or implied waranties, 
-including but not limited to, the implied warranties of merchantability and
-fitness for a particular purpose are disclaimed.  In no event shall 
-Zeus Technology Ltd. be liable for any direct, indirect, incidental, special, 
-exemplary, or consequential damaged (including, but not limited to, 
-procurement of substitute good or services; loss of use, data, or profits;
-or business interruption) however caused and on theory of liability.  Whether
-in contract, strict liability or tort (including negligence or otherwise) 
-arising in any way out of the use of this software, even if advised of the
-possibility of such damage.
-
-     Written by Adam Twiss (adam@zeus.co.uk).  March 1996
-
-Thanks to the following people for their input:
-  Mike Belshe (mbelshe@netscape.com) 
-  Michael Campanella (campanella@stevms.enet.dec.com)
-
-*/
-
-For the expat xml parser component:
-
-Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd
-                               and Clark Cooper
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-	
-The above copyright notice and this permission notice shall be included
-in all copies or substantial portions of the Software.
-	
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-====================================================================
diff --git a/Makefile.in b/Makefile.in
deleted file mode 100644
index 3154be0..0000000
--- a/Makefile.in
+++ /dev/null
@@ -1,183 +0,0 @@
-
-SUBDIRS = srclib os server modules support
-CLEAN_SUBDIRS = test
-
-PROGRAM_NAME         = $(progname)
-PROGRAM_SOURCES      = modules.c
-PROGRAM_LDADD        = $(EXTRA_LDFLAGS) $(HTTPD_LDFLAGS) \
-                       $(PROGRAM_DEPENDENCIES) $(EXTRA_LIBS)
-PROGRAM_DEPENDENCIES = \
-  $(BUILTIN_LIBS) \
-  $(MPM_LIB) \
-  server/libmain.la \
-  os/$(OS_DIR)/libos.la \
-  $(AP_LIBS)
-
-PROGRAMS        = $(PROGRAM_NAME)
-TARGETS         = $(PROGRAMS) $(shared_build) $(other_targets)
-PHONY_TARGETS   = $(srcdir)/buildmark.c
-INSTALL_TARGETS = install-conf install-htdocs install-error install-icons \
-	install-other install-cgi install-include install-suexec install-man \
-	install-build
-
-DISTCLEAN_TARGETS  = include/ap_config_auto.h include/ap_config_path.h \
-	modules.c config.cache config.log config.status build/config_vars.mk \
-        build/rules.mk
-EXTRACLEAN_TARGETS = configure include/ap_config_auto.h.in generated_lists
-
-include $(top_builddir)/build/rules.mk
-include $(top_srcdir)/build/program.mk
-
-install-conf:
-	@echo Installing configuration files
-	@test -d $(sysconfdir) || $(MKINSTALLDIRS) $(sysconfdir)
-	@cd $(top_srcdir)/docs/conf; \
-	for i in mime.types magic; do \
-		$(INSTALL_DATA) $$i $(sysconfdir); \
-	done; \
-	for i in *-std* ssl.conf; do \
-		[ -f $$i ] || continue; \
-		( \
-			n_lm=`awk 'BEGIN {n=0} /@@LoadModule@@/ {n+=1} END {print n}' < $$i`; \
-			if test $$n_lm -eq 0 -o "x$(DSO_MODULES)" = "x"; then \
-				sed -e 's#@@ServerRoot@@#$(prefix)#g' \
-					-e 's#@@Port@@#$(PORT)#g' \
-					-e '/@@LoadModule@@/d' \
-					< $$i; \
-			else \
-				sed -n -e '/@@LoadModule@@/q' \
-					-e 's#@@ServerRoot@@#$(prefix)#g' \
-					-e 's#@@Port@@#$(PORT)#g' \
-					-e 'p' \
-					< $$i; \
-				for j in $(DSO_MODULES) "^EOL^"; do \
-					if test "x$$j" = "xssl"; then \
-						echo "<IfDefine SSL>"; \
-					fi; \
-					if test $$j != "^EOL^"; then \
-						echo "LoadModule $${j}_module modules/mod_$${j}.so"; \
-					fi; \
-					if test "x$$j" = "xssl"; then \
-						echo "</IfDefine>"; \
-					fi; \
-				done; \
-				sed -e '1,/@@LoadModule@@/d' \
-					-e '/@@LoadModule@@/d' \
-					-e 's#@@ServerRoot@@#$(prefix)#g' \
-					-e 's#@@Port@@#$(PORT)#g' \
-					< $$i; \
-			fi \
-		) > $(sysconfdir)/$$i; \
-		chmod 0644 $(sysconfdir)/$$i; \
-		file=`echo $$i|sed s/-std//`; \
-		if [ "$$file" = "httpd.conf" ]; then \
-			file=`echo $$file|sed s/.*.conf/$(PROGRAM_NAME).conf/`; \
-		fi; \
-		if test "$$file" != "$$i" && test ! -f $(sysconfdir)/$$file; then \
-			$(INSTALL_DATA) $(sysconfdir)/$$i $(sysconfdir)/$$file; \
-		fi; \
-	done
-	@if test -f "$(builddir)/envvars-std"; then \
-	    cp -p envvars-std $(sbindir); \
-	    if test ! -f $(sbindir)/envvars; then \
-	        cp -p envvars-std $(sbindir)/envvars ; \
-	    fi ; \
-	fi
-
-install-build:
-	@echo Installing build system files 
-	@test -d $(installbuilddir) || $(MKINSTALLDIRS) $(installbuilddir) 
-	@cp build/*.mk $(installbuilddir); \
-	sed 's#LIBTOOL = \(.*\)#LIBTOOL = $(SHELL) $(installbuilddir)/libtool $(LTFLAGS)#' \
-	    build/config_vars.mk > $(installbuilddir)/config_vars.mk; \
-	cp $(top_srcdir)/build/instdso.sh $(installbuilddir);
-
-htdocs-srcdir = $(top_srcdir)/docs/docroot
-
-docs::
-	mkdir -p ./docs/api
-	srclib/apr/build/scandoc.pl -i./build/default.pl -p./docs/api/ ./include/*.h
-
-dox::
-	doxygen $(top_srcdir)/docs/doxygen.conf
-
-install-htdocs:
-	@echo Installing HTML documents
-	@test -d $(htdocsdir) || $(MKINSTALLDIRS) $(htdocsdir)
-	@test -d $(htdocs-srcdir) && (cd $(htdocs-srcdir) && cp -rp * $(htdocsdir))
-	@test -d $(manualdir) || $(MKINSTALLDIRS) $(manualdir)
-	@test -d $(top_srcdir)/docs/manual && (cd $(top_srcdir)/docs/manual && cp -rp * $(manualdir))
-	@test "x$(htdocsdir)" != "x" && cd $(htdocsdir) && find . -name "CVS" -print | xargs rm -rf {} \;
-
-install-error:
-	@echo Installing error documents
-	@test -d $(errordir) || $(MKINSTALLDIRS) $(errordir)
-	@cd $(top_srcdir)/docs/error && cp -rp * $(errordir)
-	@test "x$(errordir)" != "x" && cd $(errordir) && find . -name "CVS" -print | xargs rm -rf {} \;
-
-install-icons:
-	@echo Installing icons
-	@test -d $(iconsdir) || $(MKINSTALLDIRS) $(iconsdir)
-	@cd $(top_srcdir)/docs/icons && cp -rp * $(iconsdir)
-	@test "x$(iconsdir)" != "x" && cd $(iconsdir) && find . -name "CVS" -print | xargs rm -rf {} \;
-
-install-cgi:
-	@echo Installing CGIs
-	@test -d $(cgidir) || $(MKINSTALLDIRS) $(cgidir)
-	@cd $(top_srcdir)/docs/cgi-examples && cp -rp * $(cgidir)
-	@test "x$(cgidir)" != "x" && cd $(cgidir) && find . -name "CVS" -print | xargs rm -rf {} \;
-
-install-other:
-	@test -d $(logfiledir) || $(MKINSTALLDIRS) $(logfiledir)
-	@for ext in dll x; do \
-		file=apachecore.$$ext; \
-		if test -f $$file; then \
-			cp -p $$file $(bindir); \
-		fi; \
-	done; \
-	file=httpd.dll; \
-	if test -f $$file; then \
-		cp -p $$file $(bindir); \
-	fi;
-
-install-include:
-	@echo Installing header files
-	@test -d $(includedir)     || $(MKINSTALLDIRS) $(includedir)
-	@cp -p include/*.h $(srcdir)/include/*.h $(includedir)
-	@cp -p $(srcdir)/os/$(OS_DIR)/os.h $(includedir)
-	@if test -f $(srcdir)/os/$(OS_DIR)/os-inline.c; then \
-            cp -p $(srcdir)/os/$(OS_DIR)/os-inline.c $(includedir); \
-        fi;
-	@cp -p $(srcdir)/server/mpm/$(MPM_NAME)/*.h $(includedir)
-	@cp -p $(srcdir)/modules/dav/main/mod_dav.h $(includedir)
-	@cp -p $(srcdir)/modules/filters/mod_include.h $(includedir)
-	@cp -p $(srcdir)/modules/generators/mod_cgi.h $(includedir)
-	@cp -p $(srcdir)/modules/loggers/mod_log_config.h $(includedir)
-	@cp -p $(srcdir)/modules/http/mod_core.h $(includedir)
-	@cp -p $(srcdir)/modules/proxy/mod_proxy.h $(includedir)
-	@cp -p $(srcdir)/modules/ssl/*.h $(includedir)
-	@cp -p $(srcdir)/srclib/pcre/pcre*.h $(includedir)
-	@cp -p $(srcdir)/srclib/apr/include/*.h $(includedir)
-	@cp -p $(srcdir)/srclib/apr-util/include/*.h $(includedir)
-	@cp -p $(srcdir)/os/$(OS_DIR)/*.h $(includedir)
-	@chmod 644 $(includedir)/*.h
-
-install-man:
-	@echo Installing man pages
-	@test -d $(mandir)      || $(MKINSTALLDIRS) $(mandir)
-	@test -d $(mandir)/man1 || $(MKINSTALLDIRS) $(mandir)/man1
-	@test -d $(mandir)/man8 || $(MKINSTALLDIRS) $(mandir)/man8
-	@cp -p $(top_srcdir)/docs/man/*.1 $(mandir)/man1
-	@cp -p $(top_srcdir)/docs/man/*.8 $(mandir)/man8
-
-install-suexec:
-	@if test -f $(builddir)/support/suexec; then \
-            test -d $(sbindir) || $(MKINSTALLDIRS) $(sbindir); \
-            $(INSTALL_PROGRAM) $(top_builddir)/support/suexec $(sbindir); \
-            chmod 4755 $(sbindir)/suexec; \
-	fi
-
-suexec:
-	cd support && $(MAKE) suexec
-
-include $(top_srcdir)/os/os2/core.mk
diff --git a/Makefile.win b/Makefile.win
deleted file mode 100644
index 01bc6c8..0000000
--- a/Makefile.win
+++ /dev/null
@@ -1,487 +0,0 @@
-# Makefile for Windows NT and Windows 95/98/2000
-
-# Targets are:
-#   _apacher   - build Apache in Release mode
-#   _apached   - build Apache in Debug mode
-#   installr   - build and install a Release build
-#   installd   - build and install a Debug build
-#   clean      - remove (most) generated files
-#   _cleanr    - remove (most) files generated by a Release build
-#   _cleand    - remove (most) files generated by a Debug build
-#   _browse    - build the browse info file
-#
-# The following install defaults may be customized;
-#
-#   Option      Default
-#   INSTDIR     \Apache2
-#   PORT        80
-#   SERVERNAME  localhost
-#
-# For example;
-#
-#   nmake /f Makefile.win PORT=80 INSTDIR="d:\Program Files\Apache" installr
-#
-# Be aware that certain awk's will not accept backslahed names,
-# so the server root should be given in forward slashes (quoted),
-# preferably with the drive designation!
-
-default:        _apacher
-
-!IF !EXIST("srclib\apr")
-!MESSAGE Please check out or download and unpack the Apache Portability Runtime
-!MESSAGE sources (apr and apr-util) into your $(INSTDIR)\srclib directory.
-!MESSAGE Apache cannot build without these libraries!
-!MESSAGE 
-!ERROR Need $(INSTDIR)\srclib\apr
-!ENDIF
-
-!IF !EXIST("srclib\apr-util")
-!MESSAGE Please check out or download and unpack the Apache Portability Runtime
-!MESSAGE sources (apr and apr-util) into your $(INSTDIR)\srclib directory.
-!MESSAGE Apache cannot build without these libraries!
-!MESSAGE 
-!ERROR Need $(INSTDIR)\srclib\apr-util
-!ENDIF
-
-# Note; _tryssl: is only used by the msvc developer studio environment to 'fix up'
-#	the build, since conditional dependencies aren't supported.
-#
-!IF EXIST("srclib\openssl")
-!IF "$(LONG)" == "Debug"
-SSLBIN=out32dll.dbg
-!ELSE
-SSLBIN=out32dll
-!ENDIF
-_tryssl:
-!IF EXIST("modules\ssl\mod_ssl.mak")
-	cd modules\ssl
-	$(MAKE) $(MAKEOPT) -f mod_ssl.mak CFG="mod_ssl - Win32 $(LONG)" RECURSE=0 .\$(LONG)\mod_ssl.so
-	cd ..\..
-	cd support
-	$(MAKE) $(MAKEOPT) -f abs.mak CFG="abs - Win32 $(LONG)" RECURSE=0 .\$(LONG)\abs.exe
-	cd ..
-!ELSE
-	msdev Apache.dsw /USEENV /MAKE \
-		"mod_ssl - Win32 $(LONG)"\
-		"abs - Win32 $(LONG)" /NORECURSE $(CTARGET)
-!ENDIF
-
-!ELSE
-_tryssl:
-	echo mod_ssl and ab/ssl will not build without openssl 
-	echo installed in $(INSTDIR)\srclib\openssl.  They must be precompiled 
-	echo using the ms/ntdll.mak file.  See INSTALL.W32 for details.
-!ENDIF
-
-!IF "$(INSTDIR)" == ""
-INSTDIR=\Apache2
-!MESSAGE INSTDIR not specified, installing to default $(INSTDIR)
-!ENDIF 
-!IF "$(PORT)" == ""
-PORT=80
-!MESSAGE PORT not specified, using default $(PORT)
-!MESSAGE To change this use $(MAKE) -f makefile.win PORT=8080 installr
-!ENDIF 
-!IF "$(SERVERNAME)" == ""
-SERVERNAME=localhost
-!MESSAGE SERVERNAME not specified, using default $(SERVERNAME)
-!MESSAGE To change this use $(MAKE) -f makefile.win PORT=www.example.com installr
-!ENDIF
-
-!IFNDEF MAKEOPT
-# Only default the behavior if MAKEOPT= is omitted
-!IF "$(MAKE)" == "NMAKE"
-# Microsoft NMake options
-MAKEOPT=-nologo
-!ELSEIF "($MAKE)" == "make"
-# Borland make options?  Not really supported (yet)
-MAKEOPT=-s -N
-!ENDIF
-!ENDIF
-
-_dummy:
-
-_browse:
-	cd Browse
-	  bscmake.exe -nologo -Iu -o Apache.bsc *.sbr
-	cd ..
-
-_apacher: 
-	$(MAKE) $(MAKEOPT) -f Makefile.win SHORT=R LONG=Release _build
-
-_apached: 
-	$(MAKE) $(MAKEOPT) -f Makefile.win SHORT=D LONG=Debug   _build
-
-installr: 
-	$(MAKE) $(MAKEOPT) -f Makefile.win SHORT=R LONG=Release _build _install
-
-installd: 
-	$(MAKE) $(MAKEOPT) -f Makefile.win SHORT=D LONG=Debug   _build _install
-
-clean:	_cleanr _cleand
-	rd /s Browse < << 
-y
-<<
-
-!IF EXIST("Apache.mak")
-
-_cleanr:
-	$(MAKE) $(MAKEOPT) -f Makefile.win SHORT=R LONG=Release CTARGET=CLEAN _build
-
-_cleand:  
-	$(MAKE) $(MAKEOPT) -f Makefile.win SHORT=D LONG=Debug   CTARGET=CLEAN _build
-
-_build:
-	echo Building Win32 $(LONG) targets ($(SHORT) suffixes)
-	cd srclib\apr
-	 $(MAKE) $(MAKEOPT) -f apr.mak             CFG="apr - Win32 $(LONG)" RECURSE=0 $(CTARGET)
-	 $(MAKE) $(MAKEOPT) -f libapr.mak          CFG="libapr - Win32 $(LONG)" RECURSE=0 $(CTARGET)
-	cd ..\..
-	cd srclib\apr-util\uri
-	 $(MAKE) $(MAKEOPT) -f gen_uri_delims.mak  CFG="gen_uri_delims - Win32 $(LONG)" RECURSE=0 $(CTARGET)
-	cd ..\..\..
-	cd srclib\apr-util\xml\expat\lib
-	 $(MAKE) $(MAKEOPT) -f xml.mak             CFG="xml - Win32 $(LONG)" RECURSE=0 $(CTARGET)
-	cd ..\..\..
-	 $(MAKE) $(MAKEOPT) -f aprutil.mak         CFG="aprutil - Win32 $(LONG)" RECURSE=0 $(CTARGET)
-	 $(MAKE) $(MAKEOPT) -f libaprutil.mak      CFG="libaprutil - Win32 $(LONG)" RECURSE=0 $(CTARGET)
-	cd ..\..
-	cd srclib\pcre
-	 $(MAKE) $(MAKEOPT) -f dftables.mak        CFG="dftables - Win32 $(LONG)" RECURSE=0 $(CTARGET)
-	 $(MAKE) $(MAKEOPT) -f pcre.mak            CFG="pcre - Win32 $(LONG)" RECURSE=0 $(CTARGET)
-	 $(MAKE) $(MAKEOPT) -f pcreposix.mak       CFG="pcreposix - Win32 $(LONG)" RECURSE=0 $(CTARGET)
-	cd ..\..
-	cd server
-	 $(MAKE) $(MAKEOPT) -f gen_test_char.mak   CFG="gen_test_char - Win32 $(LONG)" RECURSE=0 $(CTARGET)
-	cd ..
-	 -del $(LONG)\buildmark.obj
-	 $(MAKE) $(MAKEOPT) -f libhttpd.mak        CFG="libhttpd - Win32 $(LONG)" RECURSE=0 $(CTARGET)
-	 $(MAKE) $(MAKEOPT) -f Apache.mak          CFG="Apache - Win32 $(LONG)" RECURSE=0 $(CTARGET)
-	cd modules\aaa
-	 $(MAKE) $(MAKEOPT) -f mod_access.mak      CFG="mod_access - Win32 $(LONG)" RECURSE=0 $(CTARGET)
-	 $(MAKE) $(MAKEOPT) -f mod_auth.mak        CFG="mod_auth - Win32 $(LONG)" RECURSE=0 $(CTARGET)
-	 $(MAKE) $(MAKEOPT) -f mod_auth_anon.mak   CFG="mod_auth_anon - Win32 $(LONG)" RECURSE=0 $(CTARGET)
-	 $(MAKE) $(MAKEOPT) -f mod_auth_dbm.mak    CFG="mod_auth_dbm - Win32 $(LONG)" RECURSE=0 $(CTARGET)
-	 $(MAKE) $(MAKEOPT) -f mod_auth_digest.mak CFG="mod_auth_digest - Win32 $(LONG)" RECURSE=0 $(CTARGET)
-	cd ..\..
-	cd modules\arch\win32
-	 $(MAKE) $(MAKEOPT) -f mod_isapi.mak       CFG="mod_isapi - Win32 $(LONG)" RECURSE=0 $(CTARGET)
-	cd ..\..\..
-	cd modules\cache
-	 $(MAKE) $(MAKEOPT) -f mod_file_cache.mak  CFG="mod_file_cache - Win32 $(LONG)" RECURSE=0 $(CTARGET)
-	cd ..\..
-	cd modules\dav\main
-	 $(MAKE) $(MAKEOPT) -f mod_dav.mak         CFG="mod_dav - Win32 $(LONG)" RECURSE=0 $(CTARGET)
-	cd ..\..\..
-	cd modules\dav\fs
-	 $(MAKE) $(MAKEOPT) -f mod_dav_fs.mak      CFG="mod_dav_fs - Win32 $(LONG)" RECURSE=0 $(CTARGET)
-	cd ..\..\..
-	cd modules\filters
-	 $(MAKE) $(MAKEOPT) -f mod_include.mak     CFG="mod_include - Win32 $(LONG)" RECURSE=0 $(CTARGET)
-	cd ..\..
-	cd modules\generators
-	 $(MAKE) $(MAKEOPT) -f mod_asis.mak        CFG="mod_asis - Win32 $(LONG)" RECURSE=0 $(CTARGET)
-	 $(MAKE) $(MAKEOPT) -f mod_autoindex.mak   CFG="mod_autoindex - Win32 $(LONG)" RECURSE=0 $(CTARGET)
-	 $(MAKE) $(MAKEOPT) -f mod_cgi.mak         CFG="mod_cgi - Win32 $(LONG)" RECURSE=0 $(CTARGET)
-	 $(MAKE) $(MAKEOPT) -f mod_info.mak        CFG="mod_info - Win32 $(LONG)" RECURSE=0 $(CTARGET)
-	 $(MAKE) $(MAKEOPT) -f mod_status.mak      CFG="mod_status - Win32 $(LONG)" RECURSE=0 $(CTARGET)
-	cd ..\..
-	cd modules\http
-	 $(MAKE) $(MAKEOPT) -f mod_mime.mak        CFG="mod_mime - Win32 $(LONG)" RECURSE=0 $(CTARGET)
-	cd ..\..
-	cd modules\loggers
-	 $(MAKE) $(MAKEOPT) -f mod_log_config.mak  CFG="mod_log_config - Win32 $(LONG)" RECURSE=0 $(CTARGET)
-	cd ..\..
-	cd modules\mappers
-	 $(MAKE) $(MAKEOPT) -f mod_actions.mak     CFG="mod_actions - Win32 $(LONG)" RECURSE=0 $(CTARGET)
-	 $(MAKE) $(MAKEOPT) -f mod_alias.mak       CFG="mod_alias - Win32 $(LONG)" RECURSE=0 $(CTARGET)
-	 $(MAKE) $(MAKEOPT) -f mod_dir.mak         CFG="mod_dir - Win32 $(LONG)" RECURSE=0 $(CTARGET)
-	 $(MAKE) $(MAKEOPT) -f mod_imap.mak        CFG="mod_imap - Win32 $(LONG)" RECURSE=0 $(CTARGET)
-	 $(MAKE) $(MAKEOPT) -f mod_negotiation.mak CFG="mod_negotiation - Win32 $(LONG)" RECURSE=0 $(CTARGET)
-	 $(MAKE) $(MAKEOPT) -f mod_rewrite.mak     CFG="mod_rewrite - Win32 $(LONG)" RECURSE=0 $(CTARGET)
-	 $(MAKE) $(MAKEOPT) -f mod_speling.mak     CFG="mod_speling - Win32 $(LONG)" RECURSE=0 $(CTARGET)
-	 $(MAKE) $(MAKEOPT) -f mod_userdir.mak     CFG="mod_userdir - Win32 $(LONG)" RECURSE=0 $(CTARGET)
-	 $(MAKE) $(MAKEOPT) -f mod_vhost_alias.mak CFG="mod_vhost_alias - Win32 $(LONG)" RECURSE=0 $(CTARGET)
-	cd ..\..
-	cd modules\metadata
-	 $(MAKE) $(MAKEOPT) -f mod_cern_meta.mak   CFG="mod_cern_meta - Win32 $(LONG)" RECURSE=0 $(CTARGET)
-	 $(MAKE) $(MAKEOPT) -f mod_env.mak         CFG="mod_env - Win32 $(LONG)" RECURSE=0 $(CTARGET)
-	 $(MAKE) $(MAKEOPT) -f mod_expires.mak     CFG="mod_expires - Win32 $(LONG)" RECURSE=0 $(CTARGET)
-	 $(MAKE) $(MAKEOPT) -f mod_headers.mak     CFG="mod_headers - Win32 $(LONG)" RECURSE=0 $(CTARGET)
-	 $(MAKE) $(MAKEOPT) -f mod_mime_magic.mak  CFG="mod_mime_magic - Win32 $(LONG)" RECURSE=0 $(CTARGET)
-	 $(MAKE) $(MAKEOPT) -f mod_setenvif.mak    CFG="mod_setenvif - Win32 $(LONG)" RECURSE=0 $(CTARGET)
-	 $(MAKE) $(MAKEOPT) -f mod_unique_id.mak   CFG="mod_unique_id - Win32 $(LONG)" RECURSE=0 $(CTARGET)
-	 $(MAKE) $(MAKEOPT) -f mod_usertrack.mak   CFG="mod_usertrack - Win32 $(LONG)" RECURSE=0 $(CTARGET)
-	cd ..\..
-	cd modules\proxy
-	 $(MAKE) $(MAKEOPT) -f mod_proxy.mak       CFG="mod_proxy - Win32 $(LONG)" RECURSE=0 $(CTARGET)
-	 $(MAKE) $(MAKEOPT) -f mod_proxy_connect.mak CFG="mod_proxy_connect - Win32 $(LONG)" RECURSE=0 $(CTARGET)
-	 $(MAKE) $(MAKEOPT) -f mod_proxy_ftp.mak   CFG="mod_proxy_ftp - Win32 $(LONG)" RECURSE=0 $(CTARGET)
-	 $(MAKE) $(MAKEOPT) -f mod_proxy_http.mak  CFG="mod_proxy_http - Win32 $(LONG)" RECURSE=0 $(CTARGET)
-	cd ..\..
-!IF EXIST("srclib\openssl")
-	cd modules\ssl
-	 $(MAKE) $(MAKEOPT) -f mod_ssl.mak         CFG="mod_ssl - Win32 $(LONG)" RECURSE=0 $(CTARGET)
-	cd ..\..
-	cd support
-	 $(MAKE) $(MAKEOPT) -f abs.mak             CFG="abs - Win32 $(LONG)" RECURSE=0 $(CTARGET)
-	cd ..
-!ENDIF
-	cd support
-	 $(MAKE) $(MAKEOPT) -f ab.mak              CFG="ab - Win32 $(LONG)" RECURSE=0 $(CTARGET)
-	 $(MAKE) $(MAKEOPT) -f htdbm.mak           CFG="htdbm - Win32 $(LONG)" RECURSE=0 $(CTARGET)
-	 $(MAKE) $(MAKEOPT) -f htdigest.mak        CFG="htdigest - Win32 $(LONG)" RECURSE=0 $(CTARGET)
-	 $(MAKE) $(MAKEOPT) -f htpasswd.mak        CFG="htpasswd - Win32 $(LONG)" RECURSE=0 $(CTARGET)
-	 $(MAKE) $(MAKEOPT) -f logresolve.mak      CFG="logresolve - Win32 $(LONG)" RECURSE=0 $(CTARGET)
-	 $(MAKE) $(MAKEOPT) -f rotatelogs.mak      CFG="rotatelogs - Win32 $(LONG)" RECURSE=0 $(CTARGET)
-	cd ..
-	cd support\win32
-	 $(MAKE) $(MAKEOPT) -f ApacheMonitor.mak   CFG="ApacheMonitor - Win32 $(LONG)" RECURSE=0 $(CTARGET)
-	 $(MAKE) $(MAKEOPT) -f wintty.mak          CFG="wintty - Win32 $(LONG)" RECURSE=0 $(CTARGET)
-	cd ..\..
-
-!ELSE
-
-_cleanr:  
-	$(MAKE) $(MAKEOPT) -f Makefile.win SHORT=R LONG=Release CTARGET="/CLEAN" _build
-
-_cleand:  
-	$(MAKE) $(MAKEOPT) -f Makefile.win SHORT=D LONG=Debug   CTARGET="/CLEAN" _build
-
-_build:
-	echo Building Win32 $(LONG) targets ($(SHORT) suffixes)
-	-del $(LONG)\buildmark.obj
-	msdev Apache.dsw /USEENV /MAKE \
-		"BuildBin - Win32 $(LONG)" $(CTARGET)
-!IF EXIST("srclib\openssl")
-	msdev Apache.dsw /USEENV /MAKE \
-		"mod_ssl - Win32 $(LONG)" \
-		"abs - Win32 $(LONG)" /NORECURSE $(CTARGET)
-!ENDIF
-
-!ENDIF
-
-_install:
-	echo Y >.y
-	echo A >.A
-	-mkdir "$(INSTDIR)"
-	-mkdir "$(INSTDIR)\bin"
-	-mkdir "$(INSTDIR)\cgi-bin"
-	-mkdir "$(INSTDIR)\conf"
-	-mkdir "$(INSTDIR)\error"
-	-mkdir "$(INSTDIR)\htdocs"
-	-mkdir "$(INSTDIR)\manual"
-	-mkdir "$(INSTDIR)\icons"
-	-mkdir "$(INSTDIR)\include"
-	-mkdir "$(INSTDIR)\lib"
-	-mkdir "$(INSTDIR)\logs"
-	-mkdir "$(INSTDIR)\modules"
-	-mkdir "$(INSTDIR)\proxy"
-	copy ABOUT_APACHE "$(INSTDIR)\ABOUT_APACHE.txt" <.y
-	copy CHANGES "$(INSTDIR)\CHANGES.txt" <.y
-	copy INSTALL "$(INSTDIR)\INSTALL.txt" <.y
-	copy LICENSE "$(INSTDIR)\LICENSE.txt" <.y
-!IF EXIST("srclib\openssl")
-	copy << + README "$(INSTDIR)\README.txt" <.y
-
-  This product includes cryptographic software written by
-  Eric Young (eay@cryptsoft.com).  This product includes software written
-  by Tim Hudson (tjh@cryptsoft.com).  This product includes software
-  developed by the OpenSSL Project for use in the OpenSSL Toolkit.
-  (http://www.openssl.org/)
-<<
-!ELSE
-#	--- just a vanilla copy, in this case.
-	copy README "$(INSTDIR)\README.txt" <.y
-!ENDIF
-	copy $(LONG)\Apache.exe "$(INSTDIR)\bin" <.y
-	copy $(LONG)\libhttpd.dll "$(INSTDIR)\bin" <.y
-	copy srclib\apr\$(LONG)\libapr.dll "$(INSTDIR)\bin" <.y
-	copy srclib\apr-util\$(LONG)\libaprutil.dll "$(INSTDIR)\bin" <.y
-	copy modules\aaa\$(LONG)\mod_access.so "$(INSTDIR)\modules" <.y
-	copy modules\aaa\$(LONG)\mod_auth.so "$(INSTDIR)\modules" <.y
-	copy modules\aaa\$(LONG)\mod_auth_anon.so "$(INSTDIR)\modules" <.y
-	copy modules\aaa\$(LONG)\mod_auth_dbm.so "$(INSTDIR)\modules" <.y
-	copy modules\aaa\$(LONG)\mod_auth_digest.so "$(INSTDIR)\modules" <.y
-	copy modules\arch\win32\$(LONG)\mod_isapi.so "$(INSTDIR)\modules" <.y
-	copy modules\cache\$(LONG)\mod_file_cache.so "$(INSTDIR)\modules" <.y
-	copy modules\dav\fs\$(LONG)\mod_dav_fs.so "$(INSTDIR)\modules" <.y
-	copy modules\dav\main\$(LONG)\mod_dav.so "$(INSTDIR)\modules" <.y
-	copy modules\filters\$(LONG)\mod_include.so "$(INSTDIR)\modules" <.y
-	copy modules\generators\$(LONG)\mod_asis.so "$(INSTDIR)\modules" <.y
-	copy modules\generators\$(LONG)\mod_autoindex.so "$(INSTDIR)\modules" <.y
-	copy modules\generators\$(LONG)\mod_cgi.so "$(INSTDIR)\modules" <.y
-	copy modules\generators\$(LONG)\mod_info.so "$(INSTDIR)\modules" <.y
-	copy modules\generators\$(LONG)\mod_status.so "$(INSTDIR)\modules" <.y
-	copy modules\http\$(LONG)\mod_mime.so "$(INSTDIR)\modules" <.y
-	copy modules\loggers\$(LONG)\mod_log_config.so "$(INSTDIR)\modules" <.y
-	copy modules\mappers\$(LONG)\mod_actions.so "$(INSTDIR)\modules" <.y
-	copy modules\mappers\$(LONG)\mod_alias.so "$(INSTDIR)\modules" <.y
-	copy modules\mappers\$(LONG)\mod_dir.so "$(INSTDIR)\modules" <.y
-	copy modules\mappers\$(LONG)\mod_imap.so "$(INSTDIR)\modules" <.y
-	copy modules\mappers\$(LONG)\mod_negotiation.so "$(INSTDIR)\modules" <.y
-	copy modules\mappers\$(LONG)\mod_rewrite.so "$(INSTDIR)\modules" <.y
-	copy modules\mappers\$(LONG)\mod_speling.so "$(INSTDIR)\modules" <.y
-	copy modules\mappers\$(LONG)\mod_userdir.so "$(INSTDIR)\modules" <.y
-	copy modules\mappers\$(LONG)\mod_vhost_alias.so "$(INSTDIR)\modules" <.y
-	copy modules\metadata\$(LONG)\mod_cern_meta.so "$(INSTDIR)\modules" <.y
-	copy modules\metadata\$(LONG)\mod_env.so "$(INSTDIR)\modules" <.y
-	copy modules\metadata\$(LONG)\mod_expires.so "$(INSTDIR)\modules" <.y
-	copy modules\metadata\$(LONG)\mod_headers.so "$(INSTDIR)\modules" <.y
-	copy modules\metadata\$(LONG)\mod_mime_magic.so "$(INSTDIR)\modules" <.y
-	copy modules\metadata\$(LONG)\mod_setenvif.so "$(INSTDIR)\modules" <.y
-	copy modules\metadata\$(LONG)\mod_unique_id.so "$(INSTDIR)\modules" <.y
-	copy modules\metadata\$(LONG)\mod_usertrack.so "$(INSTDIR)\modules" <.y
-	copy modules\proxy\$(LONG)\mod_proxy.so "$(INSTDIR)\modules" <.y
-	copy modules\proxy\$(LONG)\mod_proxy_connect.so "$(INSTDIR)\modules" <.y
-	copy modules\proxy\$(LONG)\mod_proxy_ftp.so "$(INSTDIR)\modules" <.y
-	copy modules\proxy\$(LONG)\mod_proxy_http.so "$(INSTDIR)\modules" <.y
-!IF EXIST("srclib\openssl")
-	-copy modules\ssl\$(LONG)\mod_ssl.so "$(INSTDIR)\modules" <.y
-	-copy srclib\openssl\$(SSLBIN)\openssl.exe "$(INSTDIR)\bin" <.y
-	-copy srclib\openssl\$(SSLBIN)\libeay32.dll "$(INSTDIR)\bin" <.y
-	-copy srclib\openssl\$(SSLBIN)\ssleay32.dll "$(INSTDIR)\bin" <.y
-	-copy srclib\openssl\LICENSE "$(INSTDIR)\OPENSSL-LICENSE.txt" <.y
-	-copy << + srclib\openssl\NEWS "$(INSTDIR)\OPENSSL-NEWS.txt" <.y
-
- Apache HTTP Server 2.0 Limited OpenSSL Distribution  17 Aug 2001
-
- This binary distribution includes the minimal components of OpenSSL required
- to support mod_ssl for Apache HTTP Server version 2.0 (details are listed 
- in OPENSSL-README.txt.)  For the complete list of CHANGES to this and later 
- versions of OpenSSL, please refer to the definative source,
- <http://www.openssl.org/news/changelog.html>, or see the CHANGES file in the
- full binary or source distribution package from <http://www.openssl.org/>.
-
- These OpenSSL binaries were built for distribution from the U.S. without 
- support for the patented encryption methods IDEA, MDC-2 or RC5.
-
---------------------------------------------------------------------------------
-<<
-	-copy << + srclib\openssl\README "$(INSTDIR)\OPENSSL-README.txt" <.y
-
- Apache HTTP Server 2.0 Limited OpenSSL Distribution  19 Aug 2001
-
- This binary installation of OpenSSL is a limited distribution of the documents
- OPENSSL-LICENSE.txt, OPENSSL-NEWS.txt and OPENSSL-README.txt, and the binaries
-
-   libeay32.dll
-   ssleay32.dll
-   openssl.exe
-
- These are the minimal libraries and tools required to use mod_ssl as 
- distributed with Apache HTTP Server version 2.0.  No library files, headers
- or sources are distributed with this binary distribution.  Please refer to the
- <http://www.openssl.org/> site for complete source or binary distributions.
-
- These OpenSSL binaries were built for distribution from the U.S. without 
- support for the patented encryption methods IDEA, MDC-2 or RC5.
-
- The Apache HTTP Project only supports the binary distribution of these files
- and development of the mod_ssl module.  We cannot provide support assistance
- for using or configuring the OpenSSL package or these modules.  Please refer
- all installation and configuration questions to the appropriate forum,
- such as the user supported newsgroups comp.infosystems.www.servers.unix or
- comp.infosystems.www.servers.ms-windows, or see the support options
- listed at <http://www.openssl.org/support/>.
-
---------------------------------------------------------------------------------
-<<
-	copy support\$(LONG)\abs.exe "$(INSTDIR)\bin\ab.exe" <.y
-!ELSE
-	copy support\$(LONG)\ab.exe "$(INSTDIR)\bin" <.y
-!ENDIF
-	copy support\$(LONG)\htdbm.exe "$(INSTDIR)\bin" <.y
-	copy support\$(LONG)\htdigest.exe "$(INSTDIR)\bin" <.y
-	copy support\$(LONG)\htpasswd.exe "$(INSTDIR)\bin" <.y
-	copy support\$(LONG)\logresolve.exe "$(INSTDIR)\bin" <.y
-	copy support\$(LONG)\rotatelogs.exe "$(INSTDIR)\bin" <.y
-	copy support\win32\$(LONG)\ApacheMonitor.exe "$(INSTDIR)\bin" <.y
-	copy support\win32\$(LONG)\wintty.exe "$(INSTDIR)\bin" <.y
-	copy docs\cgi-examples\printenv "$(INSTDIR)\cgi-bin\printenv.pl" <.y
-	-awk -f <<script.awk "docs\cgi-examples\printenv" "$(INSTDIR)\cgi-bin\printenv.pl"
-    BEGIN { 
-	srcfl = ARGV[1];
-	dstfl = ARGV[2];
-	if ( "perl -e \"print $$^X;\"" | getline perlroot ) {
-	    gsub( /\\/, "/", perlroot );
-	    print "#!" perlroot > dstfl;
-	    getline < srcfl;
-	}
-	while ( ( getline < srcfl ) > 0 ) {
-	    print $$0 > dstfl;
-	}
-    }
-<<
-	xcopy docs\error "$(INSTDIR)\error" /s /d < .a
-	xcopy docs\docroot "$(INSTDIR)\htdocs" /d < .a
-	xcopy docs\manual "$(INSTDIR)\manual" /s /d < .a
-	xcopy srclib\pcre\pcre*.h "$(INSTDIR)\include" /d < .a
-	xcopy srclib\apr-util\xml\expat\lib\expat.h "$(INSTDIR)\include" /d < .a
-	xcopy srclib\apr\include\*.h "$(INSTDIR)\include" /d < .a
-	xcopy srclib\apr-util\include\*.h "$(INSTDIR)\include" /d < .a
-	xcopy include\*.h "$(INSTDIR)\include" /d < .a
-	xcopy docs\icons "$(INSTDIR)\icons" /s /d < .a
-	copy srclib\apr\Lib$(SHORT)\apr.lib "$(INSTDIR)\lib" <.y
-	copy srclib\apr-util\Lib$(SHORT)\aprutil.lib "$(INSTDIR)\lib" <.y
-	copy srclib\pcre\Lib$(SHORT)\pcre.lib "$(INSTDIR)\lib" <.y
-	copy srclib\pcre\Lib$(SHORT)\pcreposix.lib "$(INSTDIR)\lib" <.y
-#       ### until we determine if it's safe to change expat>libexpat and xml>expat
-#       within our cvs tree... at least remain consistent to our naming conventions;
-	copy srclib\apr-util\xml\expat\lib\Lib$(SHORT)\xml.lib "$(INSTDIR)\lib\expat.lib" <.y
-	copy srclib\apr\$(LONG)\libapr.lib "$(INSTDIR)\lib" <.y
-	copy srclib\apr\$(LONG)\libapr.exp "$(INSTDIR)\lib" <.y
-	copy srclib\apr-util\$(LONG)\libaprutil.lib "$(INSTDIR)\lib" <.y
-	copy srclib\apr-util\$(LONG)\libaprutil.exp "$(INSTDIR)\lib" <.y
-	copy $(LONG)\libhttpd.exp "$(INSTDIR)\lib" <.y
-	copy $(LONG)\libhttpd.lib "$(INSTDIR)\lib" <.y
-	copy modules\dav\main\$(LONG)\mod_dav.exp "$(INSTDIR)\lib" <.y
-	copy modules\dav\main\$(LONG)\mod_dav.lib "$(INSTDIR)\lib" <.y
-	copy docs\conf\magic "$(INSTDIR)\conf\magic.default" <.y
-	if not exist "$(INSTDIR)\conf\magic" \
-	    copy "$(INSTDIR)\conf\magic.default" "$(INSTDIR)\conf\magic"
-	copy docs\conf\mime.types "$(INSTDIR)\conf\mime.types.default" <.y
-	if not exist "$(INSTDIR)\conf\mime.types" \
-	    copy "$(INSTDIR)\conf\mime.types.default" "$(INSTDIR)\conf\mime.types"
-	copy docs\conf\httpd-win.conf "$(INSTDIR)\conf\httpd.default.conf" <.y
-	-awk -f <<script.awk "docs\conf\httpd-win.conf" "$(INSTDIR)\conf\httpd.default.conf" "$(INSTDIR)"
-    BEGIN { 
-	srcfl = ARGV[1];
-	dstfl = ARGV[2];
-	serverroot = ARGV[3];
-	gsub( /\\/, "/", serverroot );
-	while ( ( getline < srcfl ) > 0 ) {
-	    gsub( /@@ServerRoot@@/, serverroot );
-	    gsub( /@@ServerName@@/, "$(SERVERNAME)" );
-	    gsub( /@@Port@@/, "$(PORT)" );
-	    print $$0 > dstfl;
-	}
-    }
-<<
-	if not exist "$(INSTDIR)\conf\httpd.conf" \
-	    copy "$(INSTDIR)\conf\httpd.default.conf" "$(INSTDIR)\conf\httpd.conf"
-	copy docs\conf\ssl-std.conf "$(INSTDIR)\conf\ssl.default.conf" <.y
-	-awk -f <<script.awk "docs\conf\ssl-std.conf" "$(INSTDIR)\conf\ssl.default.conf" "$(INSTDIR)"
-    BEGIN { 
-	srcfl = ARGV[1];
-	dstfl = ARGV[2];
-	serverroot = ARGV[3];
-	gsub( /\\/, "/", serverroot );
-	while ( ( getline < srcfl ) > 0 ) {
-	    gsub( /@@ServerRoot@@/, serverroot );
-	    print $$0 > dstfl;
-	}
-    }
-<<
-	if not exist "$(INSTDIR)\conf\ssl.conf" \
-	    copy "$(INSTDIR)\conf\ssl.default.conf" "$(INSTDIR)\conf\ssl.conf"
-	awk -f <<script.awk "support\dbmmanage.in" >"$(INSTDIR)\bin\dbmmanage.pl"
-    { if ( $$0 ~ /^BEGIN \{ @AnyDBM_File::/ ) {
-	  sub( /ISA = qw\(.*\)/, "ISA = qw(SDBM_File)" ); 
-      }
-      if ( $$0 !~ /^#!@perlbin@/ )
-	  print $$0;
-    }
-<<
-	del .a .y
-
diff --git a/NWGNUmakefile b/NWGNUmakefile
deleted file mode 100644
index 93652e5..0000000
--- a/NWGNUmakefile
+++ /dev/null
@@ -1,400 +0,0 @@
-#
-# Declare the sub-directories to be built here
-#
-
-SUBDIRS = \
-	srclib\apr \
-	build \
-	support \
-	modules \
-	$(EOLIST) 
-
-#
-# Get the 'head' of the build environment.  This includes default targets and
-# paths to tools
-#
-
-include $(AP_WORK)\build\NWGNUhead.inc
-
-#
-# build this level's files
-
-#
-# Make sure all needed macro's are defined
-#
-
-#
-# These directories will be at the beginning of the include list, followed by
-# INCDIRS
-#
-XINCDIRS	+= \
-			$(AP_WORK)/srclib/apr/include \
-			$(AP_WORK)/srclib/include/arch/NetWare \
-			$(AP_WORK)/srclib/apr-util/include \
-			$(AP_WORK)/include \
-			$(AP_WORK)/modules/filters/ \
-			$(AP_WORK)/modules/generators/ \
-			$(AP_WORK)/modules/http/ \
-			$(AP_WORK)/modules/loggers/ \
-			$(AP_WORK)/modules/mappers/ \
-			$(AP_WORK)/modules/proxy/ \
-			$(AP_WORK)/os/NetWare \
-			$(AP_WORK)/server/mpm/NetWare \
-			$(AP_WORK)/srclib/pcre \
-			$(NWOS) \
-			$(EOLIST)
-
-#
-# These flags will come after CFLAGS
-#
-XCFLAGS		+= \
-			$(EOLIST)
-
-#
-# These defines will come after DEFINES
-#
-XDEFINES	+= \
-			$(EOLIST)
-
-#
-# These flags will be added to the link.opt file
-#
-XLFLAGS		+= \
-			$(EOLIST)
-
-#
-# These values will be appended to the correct variables based on the value of
-# RELEASE
-#
-ifeq "$(RELEASE)" "debug"
-XINCDIRS	+= \
-			$(EOLIST)
-
-XCFLAGS		+= \
-			$(EOLIST)
-
-XDEFINES	+= \
-			$(EOLIST)
-
-XLFLAGS		+= \
-		   	$(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "noopt"
-XINCDIRS	+= \
-			$(EOLIST)
-
-XCFLAGS		+= \
-			$(EOLIST)
-
-XDEFINES	+= \
-			$(EOLIST)
-
-XLFLAGS		+= \
-		   	$(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "release"
-XINCDIRS	+= \
-			$(EOLIST)
-
-XCFLAGS		+= \
-			$(EOLIST)
-
-XDEFINES	+= \
-			$(EOLIST)
-
-XLFLAGS		+= \
-			$(EOLIST)
-endif
-
-#
-# These are used by the link target if an NLM is being generated
-# This is used by the link 'name' directive to name the nlm.  If left blank
-# TARGET_nlm (see below) will be used.
-#
-NLM_NAME		= Apache2
-
-#
-# This is used by the link '-desc ' directive. 
-# If left blank, NLM_NAME will be used.
-#
-NLM_DESCRIPTION	= Apache Web Server 
-
-#
-# This is used by the '-threadname' directive.  If left blank,
-# NLM_NAME Thread will be used.
-#
-NLM_THREAD_NAME	= Apache
-#
-# If this is specified, it will override VERSION value in 
-# $(AP_WORK)\build\NWGNUenvironment.inc
-#
-NLM_VERSION		=
-
-#
-# If this is specified, it will override the default of 64K
-#
-NLM_STACK_SIZE	= 65536
- 
-
-#
-# If this is specified it will be used by the link '-entry' directive
-#
-NLM_ENTRY_SYM	= _LibCPrelude
-
-#
-# If this is specified it will be used by the link '-exit' directive
-#
-NLM_EXIT_SYM	= _LibCPostlude
-
-#
-# If this is specified it will be used by the link '-check' directive
-#
-NLM_CHECK_SYM	= _LibCCheckUnload
-
-#
-# If these are specified it will be used by the link '-flags' directive
-#
-NLM_FLAGS		=  PSEUDOPREEMPTION
-
-#
-# If this is specified it will be linked in with the XDCData option in the def 
-# file instead of the default of $(NWOS)/apache.xdc.  XDCData can be disabled
-# by setting APACHE_UNIPROC in the environment
-#
-XDCDATA         = 
-
-#
-# If there is an NLM target, put it here
-#
-TARGET_nlm = \
-	$(OBJDIR)/Apache2.nlm \
-	$(EOLIST)
-
-#
-# If there is an LIB target, put it here
-#
-TARGET_lib = \
-	$(EOLIST)
-
-#
-# These are the OBJ files needed to create the NLM target above.
-# Paths must all use the '/' character
-#
-FILES_nlm_objs = \
-	$(OBJDIR)/buildmark.o \
-	$(OBJDIR)/config.o \
-	$(OBJDIR)/connection.o \
-	$(OBJDIR)/core.o \
-	$(OBJDIR)/error_bucket.o \
-	$(OBJDIR)/http_core.o \
-	$(OBJDIR)/http_protocol.o \
-	$(OBJDIR)/http_request.o \
-	$(OBJDIR)/listen.o \
-	$(OBJDIR)/log.o \
-	$(OBJDIR)/main.o \
-	$(OBJDIR)/mod_access.o \
-	$(OBJDIR)/mod_actions.o \
-	$(OBJDIR)/mod_alias.o \
-	$(OBJDIR)/mod_asis.o \
-	$(OBJDIR)/mod_auth.o \
-	$(OBJDIR)/mod_autoindex.o \
-	$(OBJDIR)/mod_dir.o \
-	$(OBJDIR)/mod_env.o \
-	$(OBJDIR)/mod_imap.o \
-	$(OBJDIR)/mod_include.o \
-	$(OBJDIR)/mod_log_config.o \
-	$(OBJDIR)/mod_mime.o \
-	$(OBJDIR)/mod_negotiation.o \
-	$(OBJDIR)/mod_nw_ssl.o \
-	$(OBJDIR)/mod_setenvif.o \
-	$(OBJDIR)/mod_so.o \
-	$(OBJDIR)/mod_userdir.o \
-	$(OBJDIR)/modules.o \
-	$(OBJDIR)/mpm_common.o \
-	$(OBJDIR)/mpm_netware.o \
-	$(OBJDIR)/pcre.o \
-	$(OBJDIR)/pcreposix.o \
-	$(OBJDIR)/protocol.o \
-	$(OBJDIR)/request.o \
-	$(OBJDIR)/rfc1413.o \
-	$(OBJDIR)/scoreboard.o \
-	$(OBJDIR)/util.o \
-	$(OBJDIR)/util_cfgtree.o \
-	$(OBJDIR)/util_charset.o \
-	$(OBJDIR)/util_filter.o \
-	$(OBJDIR)/util_md5.o \
-	$(OBJDIR)/util_nw.o \
-	$(OBJDIR)/util_script.o \
-	$(OBJDIR)/util_time.o \
-	$(OBJDIR)/util_xml.o \
-	$(OBJDIR)/vhost.o \
-	$(EOLIST)
-
-#
-# These are the LIB files needed to create the NLM target above.
-# These will be added as a library command in the link.opt file.
-#
-FILES_nlm_libs = \
-   	libcpre.o \
-	$(EOLIST)
-
-#
-# These are the modules that the above NLM target depends on to load.
-# These will be added as a module command in the link.opt file.
-#
-FILES_nlm_modules = \
-	aprlib \
-	Libc \
-	$(EOLIST)
-
-#
-# If the nlm has a msg file, put it's path here
-#
-FILE_nlm_msg =
- 
-#
-# If the nlm has a hlp file put it's path here
-#
-FILE_nlm_hlp =
-
-#
-# If this is specified, it will override $(NWOS)\copyright.txt.
-#
-FILE_nlm_copyright =
-
-#
-# Any additional imports go here
-#
-FILES_nlm_Ximports = \
-	@netware.imp \
-	@$(APR)/aprlib.imp \
-	@libc.imp \
-	@ws2nlm.imp \
-	GetCurrentAddressSpace \
-	$(EOLIST)
- 
-#   
-# Any symbols exported to here
-#
-FILES_nlm_exports = \
-	@$(NWOS)/httpd.imp \
-	$(EOLIST)
-	
-#   
-# These are the OBJ files needed to create the LIB target above.
-# Paths must all use the '/' character
-#
-FILES_lib_objs = \
-		$(EOLIST)
-
-#
-# implement targets and dependancies (leave this section alone)
-#
-
-libs :: $(OBJDIR) $(TARGET_lib)
-
-nlms :: libs $(TARGET_nlm)
-
-#
-# Updated this target to create necessary directories and copy files to the 
-# correct place.  (See $(AP_WORK)\build\NWGNUhead.inc for examples)
-#
-install :: nlms FORCE
-	copy $(OBJDIR)\Apache2.nlm $(INSTALL)\Apache2\*.*
-	-copy ABOUT_APACHE              $(INSTALL)\Apache2\*.*
-	-copy README                    $(INSTALL)\Apache2\*.*
-	-copy STATUS                    $(INSTALL)\Apache2\*.*
-	-copy LICENSE                   $(INSTALL)\Apache2\*.*
-	-copy docs\cgi-examples\*.      $(INSTALL)\Apache2\cgi-examples\*.*
-	-awk  -f build\mkconfnw.awk docs\conf\httpd-std.conf >$(INSTALL)\Apache2\conf\httpd.conf
-	-copy docs\conf\magic           $(INSTALL)\Apache2\conf\magic
-	-copy docs\conf\mime.types      $(INSTALL)\Apache2\conf\mime.types
-	-copy docs\error\*.*            $(INSTALL)\Apache2\error\*.*
-	-copy docs\error\include\*.*    $(INSTALL)\Apache2\error\include\*.*
-	-copy docs\docroot\*.*          $(INSTALL)\Apache2\htdocs\*.*
-	-copy docs\icons\*.*            $(INSTALL)\Apache2\icons\*.*
-	-copy docs\icons\small\*.*      $(INSTALL)\Apache2\icons\small\*.*
-	-copy docs\man\*.*              $(INSTALL)\Apache2\man\*.*
-	-copy docs\manual\*.*           $(INSTALL)\Apache2\manual\*.*
-	-copy docs\manual\developer\*.* $(INSTALL)\Apache2\manual\developer
-	-copy docs\manual\faq\*.*       $(INSTALL)\Apache2\manual\faq
-	-copy docs\manual\howto\*.*     $(INSTALL)\Apache2\manual\howto
-	-copy docs\manual\images\*.*    $(INSTALL)\Apache2\manual\images
-	-copy docs\manual\misc\*.*      $(INSTALL)\Apache2\manual\misc
-	-copy docs\manual\mod\*.*       $(INSTALL)\Apache2\manual\mod
-	-copy docs\manual\platform\*.*  $(INSTALL)\Apache2\manual\platform
-	-copy docs\manual\programs\*.*  $(INSTALL)\Apache2\manual\programs
-	-copy docs\manual\search\*.*    $(INSTALL)\Apache2\manual\search
-	-copy docs\manual\vhosts\*.*    $(INSTALL)\Apache2\manual\vhosts
-    
-installdev :: FORCE
-	-copy $(subst /,\,$(AP_WORK))\include\*.h           $(INSTALL)\Apache2\include\*.*
-	-copy $(subst /,\,$(AP_WORK))\os\netware\*.h        $(INSTALL)\Apache2\include\*.*
-	-copy $(subst /,\,$(NWOS))\include\*.h              $(INSTALL)\Apache2\include\*.*
-	-copy $(subst /,\,$(NWOS))\*.imp                    $(INSTALL)\Apache2\lib\*.*
-	-copy $(subst /,\,$(APR))\include\*.h               $(INSTALL)\Apache2\include\*.*
-	-copy $(subst /,\,$(APR))\arch\netware\include\*.h  $(INSTALL)\Apache2\include\*.*
-	-copy $(subst /,\,$(APRUTIL))\include\*.h           $(INSTALL)\Apache2\include\*.*
-	-copy $(subst /,\,$(APR))\*.imp                     $(INSTALL)\Apache2\lib\*.*
-    
-#
-# Any specialized rules here
-#
-
-$(OBJDIR)/%.o: server/%.c $(OBJDIR)\cc.opt
-	@echo compiling $<
-	$(CC) $< -o=$(OBJDIR)\$(@F) @$(OBJDIR)\cc.opt
-
-$(OBJDIR)/%.o: modules/arch/netware/%.c $(OBJDIR)\cc.opt
-	@echo compiling $<
-	$(CC) $< -o=$(OBJDIR)\$(@F) @$(OBJDIR)\cc.opt
-
-$(OBJDIR)/%.o: modules/http/%.c $(OBJDIR)\cc.opt
-	@echo compiling $<
-	$(CC) $< -o=$(OBJDIR)\$(@F) @$(OBJDIR)\cc.opt
-
-$(OBJDIR)/%.o: modules/aaa/%.c $(OBJDIR)\cc.opt
-	@echo compiling $<
-	$(CC) $< -o=$(OBJDIR)\$(@F) @$(OBJDIR)\cc.opt
-
-$(OBJDIR)/%.o: modules/mappers/%.c $(OBJDIR)\cc.opt
-	@echo compiling $<
-	$(CC) $< -o=$(OBJDIR)\$(@F) @$(OBJDIR)\cc.opt
-
-$(OBJDIR)/%.o: modules/generators/%.c $(OBJDIR)\cc.opt
-	@echo compiling $<
-	$(CC) $< -o=$(OBJDIR)\$(@F) @$(OBJDIR)\cc.opt
-
-$(OBJDIR)/%.o: modules/metadata/%.c $(OBJDIR)\cc.opt
-	@echo compiling $<
-	$(CC) $< -o=$(OBJDIR)\$(@F) @$(OBJDIR)\cc.opt
-
-$(OBJDIR)/%.o: modules/filters/%.c $(OBJDIR)\cc.opt
-	@echo compiling $<
-	$(CC) $< -o=$(OBJDIR)\$(@F) @$(OBJDIR)\cc.opt
-
-$(OBJDIR)/%.o: modules/loggers/%.c $(OBJDIR)\cc.opt
-	@echo compiling $<
-	$(CC) $< -o=$(OBJDIR)\$(@F) @$(OBJDIR)\cc.opt
-
-$(OBJDIR)/%.o: os/netware/%.c $(OBJDIR)\cc.opt
-	@echo compiling $<
-	$(CC) $< -o=$(OBJDIR)\$(@F) @$(OBJDIR)\cc.opt
-
-$(OBJDIR)/%.o: server/mpm/netware/%.c $(OBJDIR)\cc.opt
-	@echo compiling $<
-	$(CC) $< -o=$(OBJDIR)\$(@F) @$(OBJDIR)\cc.opt
-
-$(OBJDIR)/%.o: srclib/pcre/%.c $(OBJDIR)\cc.opt
-	@echo compiling $<
-	$(CC) $< -o=$(OBJDIR)\$(@F) @$(OBJDIR)\cc.opt
-
-#
-# Include the 'tail' makefile that has targets that depend on variables defined
-# in this makefile
-#
-
-include $(AP_WORK)\build\NWGNUtail.inc
-
diff --git a/README b/README
deleted file mode 100644
index a227de1..0000000
--- a/README
+++ /dev/null
@@ -1,89 +0,0 @@
-
-                          Apache HTTP Server
-
-  What is it?
-  -----------
-
-  The Apache HTTP Server is a powerful and flexible HTTP/1.1 compliant
-  web server.  Originally designed as a replacement for the NCSA HTTP
-  Server, it has grown to be the most popular web server on the
-  Internet.  As a project of the Apache Software Foundation, the
-  developers aim to collaboratively develop and maintain a robust,
-  commercial-grade, standards-based server with freely available
-  source code.
-
-  The Latest Version
-  ------------------
-
-  Details of the latest version can be found on the Apache HTTP
-  server project page under http://httpd.apache.org/.
-
-  Documentation
-  -------------
-
-  The documentation available as of the date of this release is
-  included in HTML format in the docs/manual/ directory.  The most
-  up-to-date documentation can be found at
-  http://httpd.apache.org/docs-2.0/.
-
-  Installation
-  ------------
-
-  Please see the file called INSTALL.
-
-  Licensing
-  ---------
-
-  Please see the file called LICENSE.
-
-  Contacts
-  --------
-
-     o If you want to be informed about new code releases, bug fixes,
-       security fixes, general news and information about the Apache server
-       subscribe to the apache-announce mailing list as described under
-       http://httpd.apache.org/lists.html#http-announce
-
-     o If you want freely available support for running Apache please join the
-       Apache user community by subscribing to Users Mailing List at
-       http://httpd.apache.org/userslist.html or one of the following USENET
-       newsgroups:
-       comp.infosystems.www.servers.unix
-       comp.infosystems.www.servers.ms-windows
-       Also available at: 
-       http://groups.google.com/groups?group=comp.infosystems.www.servers
-
-     o If you want commercial support for running Apache please contact
-       one of the companies and contractors which are listed at
-       http://www.apache.org/info/support.cgi
-
-     o If you have a concrete bug report for Apache please go to the
-       Apache Group Bug Database and submit your report:
-       http://httpd.apache.org/bug_report.html
-
-     o If you want to participate in actively developing Apache please
-       subscribe to the `dev@httpd.apache.org' mailing list as described at
-       http://www.apache.org/lists.html#http-dev
-
-  Acknowledgments
-  ----------------
-
-  We wish to acknowledge the following copyrighted works that
-  make up portions of the Apache software:
-
-  Portions of this software were developed at the National Center
-  for Supercomputing Applications (NCSA) at the University of
-  Illinois at Urbana-Champaign.
-
-  This software contains code derived from the RSA Data Security
-  Inc. MD5 Message-Digest Algorithm, including various
-  modifications by Spyglass Inc., Carnegie Mellon University, and
-  Bell Communications Research, Inc (Bellcore).
-
-  Regular expression support is provided by the PCRE library package,
-  which is open source software, copyright by the University of Cambridge
-  and authored by Philip Hazel.  The original software is available from
-     ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/
-
-  Apache 2.0 relies heavily on the use of autoconf and libtool to provide
-  a build environment.
diff --git a/ROADMAP b/ROADMAP
deleted file mode 100644
index a878768..0000000
--- a/ROADMAP
+++ /dev/null
@@ -1,56 +0,0 @@
-APACHE 2.1+ ROADMAP:
-
-Last modified at [$Date: 2002/02/14 05:21:45 $]
-
-DEFERRRED FOR APACHE 2.1
-
-    * Source code should follow style guidelines.
-      OK, we all agree pretty code is good.  Probably best to clean this
-      up by hand immediately upon branching a 2.1 tree.
-      Status: Justin volunteers to hand-edit the entire source tree ;)
-
-      Justin says:
-        Recall when the release plan for 2.0 was written:
-            Absolute Enforcement of an "Apache Style" for code.
-        Watch this slip into 3.0.
-
-      David says:
-        The style guide needs to be reviewed before this can be done.
-        http://dev.apache.org/styleguide.html
-        The current file is dated April 20th 1998!
-        Also the file should be moved to the correct location for
-        future use.  Q: should APR have it's own copy as well?
-
-    * revamp the input filter syntax to provide for ordering of
-      filters created with the Set{Input|Output}Filter and the
-      Add{Input|Output}Filter directives.  A 'relative to filterx' 
-      syntax is definately preferable, but not realistic for 2.0.
-
-    * Platforms that do not support fork (primarily Win32 and AS/400)
-      Architect start-up code that avoids initializing all the modules 
-      in the parent process on platforms that do not support fork.
-      Better yet - not only inform the startup of which phase it's in,
-      but allow the parent 'process' to initialize shared memory, etc,
-      and create a module-by-module stream to pass to the child, so the
-      parent can actually arbitrate the important stuff.
-
-    * Replace stat [deferred open] with open/fstat in directory_walk.
-      Justin, Ian, OtherBill all interested in this.  Implies setting up
-      the apr_file_t member in request_rec, and having all modules use
-      that file, and allow the cleanup to close it [if it isn't a shared,
-      cached file handle.]
-
-    * Refactor auth into auth protocols and auth database stores.
-      Many interested hackers, too destabilizing for 2.0 inclusion.
-
-DEFERRRED FOR APACHE 3.0
-
-    * The Async Apache Server implemented in terms of APR.
-      [Bill Stoddard's pet project.]
-      Message-ID: <008301c17d42$9b446970$01000100@sashimi> (dev@apr)
-
-    * Add a string "class" that combines a char* with a length
-      and a reference count.  This will help reduce the number
-      of strlen and strdup operations during request processing.
-      Including both the length and allocation will save us a ton 
-      of reallocation we do today, in terms of string manipulation.
diff --git a/STATUS b/STATUS
deleted file mode 100644
index e6eb98c..0000000
--- a/STATUS
+++ /dev/null
@@ -1,853 +0,0 @@
-APACHE 2.0 STATUS:                                              -*-text-*-
-Last modified at [$Date: 2002/03/15 01:37:47 $]
-
-Release:
-
-    2.0.34  : in development
-    2.0.33  : tagged March 6, 2002.
-    2.0.32  : released Feburary 16, 2002.
-    2.0.31  : rolled Feburary 1, 2002.  not released.
-    2.0.30  : tagged January 8, 2002.  not rolled.
-    2.0.29  : tagged November 27, 2001.  not rolled.
-    2.0.28  : released November 13, 2001
-    2.0.27  : rolled November 6, 2001
-    2.0.26  : tagged October 16, 2001.  not rolled.
-    2.0.25  : rolled August 29, 2001
-    2.0.24  : rolled August 18, 2001
-    2.0.23  : rolled August 9, 2001
-    2.0.22  : rolled July 29, 2001
-    2.0.21  : rolled July 20, 2001
-    2.0.20  : rolled July 8, 2001
-    2.0.19  : rolled June 27, 2001
-    2.0.18  : rolled May 18, 2001
-    2.0.17  : rolled April 17, 2001
-    2.0.16  : rolled April 4, 2001
-    2.0.15  : rolled March 21, 2001
-    2.0.14  : rolled March 7, 2001
-    2.0a9   : released December 12, 2000
-    2.0a8   : released November 20, 2000
-    2.0a7   : released October 8, 2000
-    2.0a6   : released August 18, 2000
-    2.0a5   : released August 4, 2000
-    2.0a4   : released June 7, 2000
-    2.0a3   : released April 28, 2000
-    2.0a2   : released March 31, 2000
-    2.0a1   : released March 10, 2000
-
-Please consult the following STATUS files for information
-on related projects:
-
-    * srclib/apr/STATUS
-    * srclib/apr-util/STATUS
-    * docs/STATUS
-
-
-CURRENT RELEASE NOTES:
-
-    * 34 status: Let's get all API changes and showstoppers in this one.
-                 Please.
-
-FINAL RELEASE SHOWSTOPPERS:
-
-    * If any request gets to the core handler, without a flag that this 
-      r->filename was tested by dir/file_walk, we need to 500 at the very 
-      end of the ap_process_request_internal() processing.  This provides
-      authors of older modules better compatibility, while still improving
-      the security and robustness of 2.0. 
-        Status: still need to decide where this goes, OtherBill comments...
-        Message-ID: <065701c14526$495203b0$96c0b0d0@roweclan.net>
-        we need to look at halting this in the 'default handler' case,
-        and that implies pushing the 'handler election' into the request
-        internal processing phase from the run request phase.
-        Jim asks: would a stopgap be something bogus like adding another
-        flag to request_rec ala eos_sent and before we OK, if not set
-        force 500?
-        Jeff says: reviewing the original message and the one
-        follow-up (also from OtherBill) it looks like OtherBill had a
-        good handle on the problem, though I wonder why not just put a
-        simple check in default_handler to see if dir/file_walk has
-        been done (a footprint left by dir/file_walk doesn't have to
-        be in request_rec; a better place is core_request_config)
-
-    * We need to find out the right place to add the AddOutputFilterByType
-      directive.  mod_mime?  No.  core with fixups?  That's what it is now.
-      ap_pass_brigade() hook?  As a filter that runs at HTTP_HEADER stage?
-      This needs to be resolved before the next public release.
-        Message-ID: <018701c1b99c$f0f24310$0a01230a@KOJ>
-      BillS is working on this...
-        
-    * API changes planned for 2.0 that should happen before the
-      GA release:
-          * Free lists for bucket allocation
-
-    * We do not properly substitute the prefix-variables in the configuration
-      scripts or generated-configs.  (i.e. if sysconfdir is etc,
-      httpd-std.conf points to conf.)
-        Aaron says: This is not a showstopper, these problems have existed
-                    for as long as I can remember. It would be nice to fix
-                    them but they are not new.
-
-    * Address popular PRs
-        * Win32 doesn't install as service correctly [9863, 9914, 9961]
-
-CURRENT VOTES:
-
-    * Should we always build binaries statically unless otherwise
-      indicated?
-        Message-ID: <20020129210006.B23512@Lithium.MeepZor.Com>
-
-      +1:  Ken
-      -1:  Justin, Ian
-        
-    * If the parent process dies, should the remaining child processes
-      "gracefully" self-terminate. Or maybe we should make it a runtime
-      option, or have a concept of 2 parent processes (one being a 
-      "hot spare").
-      See: Message-ID: <3C58232C.FE91F19F@Golux.Com>
-
-      Self-destruct: Ken, Martin
-      Not self-destruct: BrianP, Ian, Cliff, BillS
-      Make it runtime configurable: Aaron, Jim, Justin
-      Have 2 parents: +1: Jim
-                      -1: Justin
-                      +0: Martin (while standing by, could it do
-                                  something useful?)
-
-    * Make the worker MPM the default MPM for threaded Unix boxes.
-      +1:   Justin, Ian, Cliff
-      -0:   Aaron (premature decision, needs more discussion), Lars
-
-RELEASE NON-SHOWSTOPPERS BUT WOULD BE REAL NICE TO WRAP THESE UP:
-
-    * Convert all instances of the old apr_lock_t type to the new
-      types.
-        Status: Aaron has converted all but the perchild MPM to
-                use the new lock API. Since perchild has been put
-                on the back burner, this is no longer a showstopper.
-                Aaron will patch perchild as soon as it becomes
-                buildable again.
-
-    * With AP_MODE_EXHAUSTIVE in the core, it is finally clear to me
-      how the Perchild MPM should be re-written.  It hasn't worked
-      correctly since filters were added because it wasn't possible to
-      get the content that had already been written and the socket at
-      the same time.  This mode lets us do that, so the MPM can be
-      fixed.
-
-    * htpasswd blindly processes the file you give it, and does no
-      sanity checking before totally corrupting whatever file it was
-      you thought you had. It should check the input file and bail
-      if it finds non-comment lines that do not contain exactly 1
-      ':' character.
-        Message-ID: <20020217150457.A31632@clove.org>
-
-    * Can a static httpd be built reliably?
-        Message-ID: <20020207142751.T31582@clove.org>
-
-    * [Ken] Test suite failures:
-      o worker is also failing some of the 'cgi' subtests
-      (see <URL:http://Source-Zone.Org/Apache/regression/>):
-        Justin says: "Worker should be fine and passes httpd-test here.
-                      If you can provide evidence that it can be reproduced
-                      outside of httpd-test, then it's a showstopper.  I
-                      think it's a perl or a httpd-test problem."
-        Not a showstopper: Justin
-
-    * Usage of APR_BRIGADE_NORMALIZE in core_input_filter should be
-      removed if possible.
-        Message-ID: <Pine.LNX.4.33.0201202232430.318-100000@deepthought.cs.virginia.edu>
-        
-    * There is a bug in how we sort some hooks, at least the pre-config
-      hook.  The first time we call the hooks, they are in the correct 
-      order, but the second time, we don't sort them correctly.  Currently,
-      the modules/http/config.m4 file has been renamed to 
-      modules/http/config2.m4 to work around this problem, it should moved
-      back when this is fixed.    rbb
-        Justin says: "Is this really a showstopper?  This has been here
-                      forever.  What's wrong?  Does this have to do with
-                      autoconf or m4?"
-        Not a showstopper: Justin, BrianP, trawick, gregames
-
-    * The Add...Filter and Set...Filter directives do not allow the
-      administrator to order filters, beyond the order of filename (mime)
-      extensions.  It isn't clear if Set...Filter(s) should be inserted 
-      before or after the Add...Filter(s) which are ordered by sequence of
-      filename extensions.  At minimum, some sort of +-[0-10] syntax seems
-      like the quickest fix for a 2.0 gold release.
-        Justin says: "Could we delay this for a point release or 2.1?"
-        Not a showstopper: justin, wrowe, trawick, stoddard, Jim, Ian, Aaron,
-                           gregames
-
-    * Get perchild to work on platforms other than Linux. This
-      will require a portable mechanism to pass data and file/socket
-      descriptors between vhost child groups. An API was proposed
-      on dev@apr:
-        Message-ID: <20020111115006.K1529@clove.org>
-
-    * CGI single-byte reads
-      BrianP suggests that this is caused by the ap_scan_script_header_err()
-      routine, which will do single-byte reads until it finds the end
-      of the header, at which point it constructs a pipe-bucket (buffered)
-      to read from.
-      Proposed solution in:
-        Message-ID: <3C36ADAF.60601@cnet.com>
-
-    * Try to get libtool inter-library dependency code working on AIX.
-        Message-ID: <cm3n10lx555.fsf@rdu163-40-092.nc.rr.com>
-
-      Justin says: If we get it working on AIX, we can enable this
-                   on all platforms and clean up our build system
-                   somewhat.
-      Jeff says:   I thought I tested a patch for you sometime in
-                   January that you were going to commit within a few
-                   days.
-
-    * Handling of %2f in URIs.  Currently both 1.3 and 2.0
-      completely disallow %2f in the request URI path (see
-      ap_unescape_url() in util.c).  It's permitted and passed
-      through in the query string, however.  Roy says the
-      original reason for disallowing it, from five years ago,
-      was to protect CGI scripts that applied PATH_INFO to
-      a filesystem location and which might be tricked by
-      ..%2f..%2f(...).  We *should* allow path-info of the
-      form 'http://foo.com/index.cgi/path/to/path%2finfo'.
-      Since we've revamped a lot of our processing of path
-      segments, it would be nice to allow this, or at least
-      allow it conditionally with a directive.
-
-    * FreeBSD, threads, and worker MPM.  All seems to work fine 
-      if you only have one worker process with many threads.  Add 
-      a second worker process and the accept lock seems to be
-      lost.  This might be an APR issue with how it deals with
-      the child_init hook (i.e. the fcntl lock needs to be resynced).
-      More examination and analysis is required.
-        Status: This has also been reported on Cygwin.  
-        Message-ID: <3C2CC514.8EF3BED1@wapme-systems.de> (cygnus)
-
-      Justin says: So, FreeBSD-CURRENT and Cywin have the same 
-                   problem.  Yum.  If another platform has this
-                   with worker, this becomes a showstopper.
-      Aaron says: I spent some time disecting this and have come to
-              the conclusion that it is not a problem in the worker MPM
-              (or at least, it is not isolated to a problem in worker).
-              I'll list some of the problems I'm seeing in case someone
-              else wants to pick up where I've left off:
-               - Delivery of just about any signal to one of the child
-                 processes will send it into an infinite loop as well.
-               - Even though the parent is spinning out of control,
-                 at first the child or children will appear to work
-                 properly. At times it is possible to get it into a state,
-                 however, where a request will hang until another concurrent
-                 request "kicks" the first, at which point the second will
-                 hang. My theory is that this has to do with the
-                 pthread_cond_*() implementation in FreeBSD, but it's still
-                 possible that it is in APR.
-      
-      Justin adds: Oh, FreeBSD threads are implemented entirely with 
-                   select()/poll()/longjmp().  Welcome to the nightmare.
-                   So, that means a ktrace output also has the thread 
-                   scheduling internals in it (since it is all the same to 
-                   the kernel).  Which makes it hard to distinguish between 
-                   our select() calls and their select() calls.  
-                   *bangs head on wall repeatedly*  But, some of the libc_r 
-                   files have a DBG_MSG #define.  This is moderately helpful
-                   when used with -DNO_DETACH.  The kernel scheduler isn't 
-                   waking up the threads on a select().  Yum.  And, I bet 
-                   those decrementing select calls have to do with the 
-                   scheduler.  Time to brush up on our OS fundamentals.
-
-    * There is increasing demand from module writers for an API
-      that will allow them to control the server à la apachectl.
-      Reasons include sole-function servers that need to die if
-      an external dependency (e.g., a database) fails, et cetera.
-      Perhaps something in the (ever more abused) scoreboard?
-        rbb: I don't believe the scoreboard is the correct mechanism
-             for this.  We already have a pipe that goes between parent
-             and child for graceful shutdown events, along with an API that
-             can be used to send a message down that pipe.  In threaded MPMs,
-             it is easy enough to make that one pipe be used for graceful
-             and graceless events, and it is also easy to open that pipe
-             to both parent and child for writing.  Then we just need to
-             figure out how to do graceless on non-threaded MPMs.
-
-    * Allow the DocumentRoot directive within <Location > scopes?  This
-      allows the beloved (crusty) Alias /foo/ /somepath/foo/ followed
-      by a <Directory /somepath/foo> to become simply 
-      <Location /foo/> DocumentRoot /somefile/foo (IMHO a bit more legible
-      and in-your-face.)  DocumentRoot unset would be accepted [and would
-      not permit content to be served, only virtual resources such as
-      server-info or server-status.
-        This proposed change would _not_ depricate Alias.
-
-    * Win32: Rotatelogs sometimes is not terminated when Apache
-      goes down hard.  FirstBill was looking at possibly tracking the 
-      child's-child processes in the parent process.
-        OtherBill asks, wasn't this fixed? 
-        stoddard: Not fixed. Shared scoreboard might offer a good
-        way for the parent to keep track of 'other child' processes
-        and whack them if the child goes down.
-
-    * Win32: Add a simple hold console open patch (wait for close or
-        the ESC key, with a nice message) if the server died a bad 
-        death (non-zero exit code) in console mode.
-        Resolution: bring forward same ugly hacks from 1.3.13-.20
-
-    * Port of mod_ssl to Apache 2.0:
-
-      The current porting state is summarized in modules/ssl/README. The
-      remaining work includes:
-      (1) stablizing/optimizing the SSL filter logic
-      (2) Enabling the various SSL caching mechanisms (shmcb, shmht)
-      (3) Enabling SSL extentions
-      (4) Trying to seperate the https filter logic from mod_ssl -
-          This is to facilitate other modules that wish to use the https
-          filter or the mod_ssl logic or both as required.
-        Justin: mod_ssl filter logic is redone, so that should be fine.
-                Madhu has submitted a patch for SSL caching - however, I
-                am -0 on that patch as I *think* we could implement the
-                shared memory another way that is much cleaner (i.e.
-                treat shmem directly as a dbm via APR routines).  Justin 
-                also thinks that the https filter logic may be sufficiently
-                decoupled now, but isn't really sure.
-
-    * Performance & Debug: Eliminate most (and perhaps all) of the 
-      malloc/free calls in the bucket brigade code.  Need some 
-      light weight memory management functions that allow freeing 
-      memory (putting it back into a memory pool) when it is no 
-      longer needed. Enabling simple debugging features like guard
-      bands, double free detection, etc. would be cool but certainly
-      not a hard requirement.
-
-          Status: Cliff started to implement this using SMS as has
-                  been discussed at length for months, but since
-                  SMS is not being used anywhere else in the server,
-                  several people expressed the opinion that we should
-                  get rid of it entirely, meaning that the buckets
-                  need their own memory management (free list) functions.
-                  Cliff will implement that this weekend so we at least
-                  have something to look at/compare with.
-
-    * Eliminate unnecessary creation of pipes in mod_cgid
-
-    * Combine log_child and piped_log_spawn. Clean up http_log.c.
-      Common logging API.
-
-    * Document mod_file_cache.
-
-    * Platforms that do not support fork (primarily Win32 and AS/400)
-      Architect start-up code that avoids initializing all the modules 
-      in the parent process on platforms that do not support fork.
-
-    * Win32: Migrate the MPM over to use APR thread/process calls. This
-      would eliminate some code in the Win32 branch that essentially
-      duplicates what is in APR.
-
-    * There are still a number of places in the code where we are
-      losing error status (i.e. throwing away the error returned by a
-      system call and replacing it with a generic error code)
-
-    * Mass vhosting version of suEXEC.
-
-    * All DBMs suffer from confusion in support/dbmmanage (perl script) since 
-      the dbmmanage employs the first-matched dbm format.  This is not
-      necessarily the library that Apache was built with.  Aught to
-      rewrite dbmmanage upon installation to bin/ with the proper library 
-      for predictable mod_auth_dbm administration.
-        Questions; htdbm exists, time to kill dbmmanage, or does it remain
-                   useful as a perl dbm management example?  If we keep it,
-                   do we address the issue above?
-
-    * Integrate mod_dav.
-        Some additional items remaining:
-        - case_preserved_filename stuff
-            (use the new canonical name stuff?)
-        - find a new home for ap_text(_header)
-        - is it possible to remove the DAV: namespace stuff from util_xml?
-
-    * ap_core_translate() and its use by mod_mmap_static and mod_file_cache
-      are a bit wonky.  The function should probably be exposed as a utility 
-      function (such as ap_translate_url2fs() or ap_validate_fs_url() or 
-      something).  Another approach would be a new hook phase after
-      "translate" which would allow the module to munge what the
-      translation has decided to do.
-        Status: Greg +1 (volunteers), Ryan +1
-
-    * Explore use of a post-config hook for the code in http_main.c which
-      calls ap_fixup_virutal_hosts(), ap_fini_vhost_config(), and
-      ap_sort_hooks()  [to reduce the logic in main()]
-
-    * read the config tree just once, and process N times (as necessary)
-
-    * (possibly) use UUIDs in mod_unique_id and/or mod_usertrack
-
-    * (possibly) port the bug fix for PR 6942 (segv when LoadModule is put
-      into a VirtualHost container) to 2.0.
-
-    * shift stuff to mod_core.h
-
-    * callers of ap_run_create_request() should check the return value
-      for failure (Doug volunteers)
-
-    * Win32: Get Apache working on Windows 95/98. The following work
-        (at least) needs to be done:
-        - Document warning that OSR2 is required (for Crypt functions, in
-        rand.c, at least.)  This could be resolved with an SSL library, or
-        randomization in APR itself.
-        - Bring the Win9xConHook.dll from 1.3 into 2.0 (no sense till it
-        actually works) and add in a splash of Win9x service code.
-
-    * In order to use a DSO version of mod_ssl we have to link with
-      -lssl and -lcrypto. A workaround is in place right now where the
-      entire EXTRA_LIBS macro is being appended to the objects list, but
-      this is a hack. We should either revamp the APACHE_CHECK_SSL_TOOLKIT
-      autoconf function or come up with some other autoconf checks to
-      search for libssl and libcrypto and properly add them to mod_ssl's
-      link flags.
-
-    * Fix the worker MPM to use POD to kill child processes instead
-      of ap_os_killpg, regardless of how they should die. (Ryan Bloom)
-
-    * mod_cache: handle cache_control: no_cache "field_name" to enable 
-      cacheing the response w/o header "field_name"
-      See RFC2616 section 14.9.1
-
-    * Scoreboard structures could be changed in the future such that
-      proper alignment is not maintained, leading to segfaults on 
-      some systems.  Cliff posted a patch to deal with this issue but
-      later recanted. See this message to dev@apr.apache.org:
-      Message-ID: <Pine.LNX.4.44.0203011354090.16457-200000@deepthought
-                  .cs.virginia.edu>
-     
-PRs that have been suspended forever waiting for someone to
-put them into 'the next release':
-
-    * PR#76: general
-      missing call to "setlocale();"
-        Status: 
-
-    * PR#78: mod_include
-      Additional status for XBitHack directive
-        Status: 
-
-    * PR#362: mod_proxy
-      Mod_proxy doesn't allow change of error pages
-        Status: 
-
-    * PR#370: mod_env
-      Modified PATH environemnt variable is not passed, instead
-      system's is used
-        Status: 
-
-    * PR#440: mod_proxy
-      Proxy doesn't deliver documents if not connected
-        Status: 
-
-    * PR#534: mod_proxy
-      proxy converts ~name to %7Ename when name starts with a dot (.)
-        Status: 
-
-    * PR#537: mod_access
-      mod_access syntax allows hosts that should be restricted
-        Status: 
-
-    * PR#557: mod_auth-any
-      ~UserHome directories are not honored in absolute pathname
-      requests (.htaccess)
-        Status: 
-
-    * PR#612: mod_proxy
-      Proxy FTP Authentication Fails
-        Status: 
-
-    * PR#623: mod_include
-      A smarter "Last Modified" value for SSI documents (see PR number 600)
-        Status: 
-
-    * PR#628: config
-      Request of "Options SymLinksIfGroupMatch"
-        Status: 
-
-    * PR#700: mod_proxy
-      Proxy doesn't do links right for OpenVMS files through ftp:
-        Status: 
-
-    * PR#759: mod_imap
-      imap should read <MAP><AREA>*</MAP> too!
-        Status: 
-
-    * PR#793: general
-      RLimitCPU and RLimitMEM don't apply to all children like they should
-        Status: 
-
-    * PR#921: suexec
-      Uses cwd before filling it in, doesn't use syslog
-        Status: 
-
-    * PR#922: config
-      it is useful to allow specifiction that root-owned symlinks
-      should always be followed
-        Status: 
-
-    * PR#980: mod_proxy
-      Controlling Access to Remote Proxies would be nice...
-        Status: 
-
-    * PR#994: mod_proxy
-      Adding authentication "on the fly" through the proxy module
-        Status: 
-
-    * PR#1004: apache-api
-      request_config field in request_rec is moderately bogus
-        Status: 
-
-    * PR#1028: other
-      DoS attacks involving memory consumption
-        Status: 
-
-    * PR#1050: mod_log-any
-      Logging of virtual server to error_log as well
-        Status: 
-
-    * PR#1085: mod_proxy
-      ProxyRemote make a dead cycle.
-        Status: 
-
-    * PR#1117: mod_auth-any
-      Using NIS passwd.byname dbm files with AuthDBMUserFile
-        Status: 
-
-    * PR#1120: suexec
-      suexec does not parse arguments to #exec cmd
-        Status: 
-
-    * PR#1145: mod_include
-      Allow for Last-Modified: without resorting to XBitHack
-        Status: 
-
-    * PR#1158: apache-api
-      improvements to child spawning API
-        Status: 
-
-    * PR#1166: mod_proxy
-      ``nph-'' not honored (no buffering) for ProxyRemote mapping
-        Status: 
-
-    * PR#1176: mod_cgi
-      Apache cannot handle continuation line in headers
-        Status: 
-
-    * PR#1191: general
-      setlogin() is not called, causing problems with e.g. identd
-        Status: 
-
-    * PR#1204: general
-      regerror() exists, use it
-        Status: 
-
-    * PR#1233: apache-api
-      there is no way to keep per-connection per-module state
-        Status: 
-
-    * PR#1263: mod_autoexec
-      Add frame-safe anchor attribute to mod_autoindex links
-        Status: 
-
-    * PR#1268: suexec
-      CGI scripts running as Apache user: security (suexec etc.)
-        Status: 
-
-    * PR#1285: suexec
-      Error messages could be easier to spot in cgi.log file for suexec.c
-        Status: 
-
-    * PR#1287: mod_access
-      add allow,deny/deny,allow warning to mod_access
-        Status: 
-
-    * PR#1290: mod_proxy
-      Need to know "hit-rate" on proxy cache
-        Status: 
-
-    * PR#1358: mod_log-any
-      Selective url-encode of log fields (or maybe a pseudo
-      log_rewrite module?)
-        Status: 
-
-    * PR#1383: mod_headers
-      I make mod_headers to modify request headers as well as
-      response ones.
-        Status: 
-
-    * PR#1532: mod_proxy
-      Proxy transfer logging
-        Status: 
-
-    * PR#1547: mod_proxy
-      No HTTP_X_FORWARDED_FOR set...
-        Status: 
-
-    * PR#1567: mod_proxy
-      ProxyRemote proxy requests fail authentication by firewall
-        Status: 
-
-    * PR#1582: mod_rewrite
-      mod_rewrite forms REQUEST_URI different than mod_cgi does
-        Status: 
-
-    * PR#1677: mod_headers
-      mod_headers should allow mod_log_config-style formats in
-      header values
-        Status: 
-
-    * PR#1702: mod_proxy
-      mod_proxy to support persistent conns?
-        Status: 
-
-    * PR#1803: mod_include
-      patches to mod_include to allow for file tests
-        Status: 
-
-    * PR#1809: mod_auth-any
-      Suggestion for improving authentication modules and core source
-      code, problem with 401 and ErrorDocument
-        Status: 
-
-    * PR#1878: mod_proxy
-      listing of proxy cache content
-        Status: 
-
-    * PR#1905: suexec
-      Allow modules to set user:group for execution.
-        Status: 
-
-    * PR#2024: apache-api
-      adding auth_why to conn_rec
-        Status: 
-
-    * PR#2073: mod_log-any
-      pipelined connections are not logged correctly
-        Status: 
-
-    * PR#2074: mod_rewrite
-      mod_rewrite doesn't pass Proxy Throughput on internal subrequests
-        Status: 
-
-    * PR#2113: config
-      HTTP Server Rebuild Line Needs Changing for the better
-        Status: 
-
-    * PR#2138: mod_status
-      mod_status always displays 256 possible connection slots
-        Status: 
-
-    * PR#2221: documentation
-      Make online documentation search link back to my installation
-        Status: 
-
-    * PR#2284: general
-      Can not POST to ErrorDocument - Apache/1.3b6
-        Status: 
-
-    * PR#2314: mod_proxy
-      patterns in ProxyRemote
-        Status: 
-
-    * PR#2343: mod_status
-      Status module averages are for entire uptime
-        Status: 
-
-    * PR#2360: suexec
-      suexec for general access of user content?
-        Status: 
-
-    * PR#2396: general
-      Proposal for TimeZone directive
-        Status: 
-
-    * PR#2415: mod_info
-      /server-info doesn't check for the virtual host to list the info
-        Status: 
-
-    * PR#2421: config
-      problem specifying ndbm library for build ?with autoconfigure
-        Status: 
-
-    * PR#2431: general
-      A small addition to rotatelogs.c to improve program functionality.
-        Status: 
-
-    * PR#2446: config
-      AllowOverride FileInfo is too coarse
-        Status: 
-
-    * PR#2460: mod_cgi
-      TimeOut applies to output of CGI scripts
-        Status: 
-
-    * PR#2512: mod_access
-      &lt;IfDenied&gt; directive wanted
-        Status: 
-
-    * PR#2573: suexec
-      CGI's for general use still have to be run as another user
-      with suExec
-        Status: 
-
-    * PR#2648: general
-      Cache file names in Proxy module
-        Status: 
-
-    * PR#2760: config
-      [PATCH] User/Group for <Directory> and <Location> i.e. not only
-      in global and <Virtual>.
-        Status: 
-
-    * PR#2763: general
-      mailto tags and bundling bug report script
-        Status: 
-
-    * PR#2785: os-aix
-      Support for System Resource Controller
-        Status: 
-
-    * PR#2793: protocol
-      When will Apache support P3P? Any Plans?
-        Status: 
-
-    * PR#2873: config
-      Feedback/Comment on APACI
-        Status: 
-
-    * PR#2889: general
-      Inclusion of RPM spec file in CVS/distributions
-        Status: 
-
-    * PR#2906: general
-      Propose that Apache recommend $UNIQUE_ID for all "session id"
-      algorithms
-        Status: 
-
-    * PR#2907: config
-      suggestion: power up your Include directive :)
-        Status: 
-
-    * PR#3018: general
-      cannot limit some HTTP methods
-        Status: 
-
-    * PR#3143: apache-api
-      No module specific data hook for per-connection data
-        Status: 
-
-    * PR#3191: mod_negotiation
-      no way to set global quality-of-source (qs) coneg values
-      with multiviews
-        Status: 
-
-    * PR#3568: mod_proxy
-      Accessing URL through proxy server corrupts data.
-        Status: 
-
-    * PR#3605: mod_proxy
-      Some anonymous FTP URLs ask for authentication
-        Status: 
-
-    * PR#3677: general
-      New ErrorDocumentMatch directive
-        Status: 
-
-    * PR#4241: config
-      Need to be able to override shebang line to make CGI scripts
-      more portable.
-        Status: 
-
-    * PR#4244: config
-      "Files" and "FilesMatch" regexp does not recognize bang as
-      negation operator
-        Status: 
-
-    * PR#4448: mod_log-any
-      Please allow CGI env variables (QUERY_STRING, ...) to be logged
-      with %{}e
-        Status: 
-
-    * PR#4459: mod_include
-      Suggestion for better handling of Last-modified headers
-        Status: 
-
-    * PR#4490: mod_cgi
-      mod_cgi prevents handling of OPTIONS requests
-        Status: 
-
-    * PR#5713: os-windows
-      [PATCH] install as win32 service with domain account
-        Status: Cannot accept password-as-arg, we should prompt the
-                user when -k install/-k config with a user argument.
-
-    * PR#5993: general
-      AllowOverride should have a 'CheckNone' and 'AllowNone' argument
-      instead of only 'None'
-        Status: 
-
-Other bugs that need fixing:
-
-    * MaxRequestsPerChild measures connections, not requests.
-        Until someone has a better way, we'll probably just rename it
-        "MaxConnectionsPerChild".
-    
-    * Regex containers don't work in an intutive way
-        Status: No one has come up with an efficient way to fix this
-        behavior. Dean has suggested getting rid of regex containers
-        completely.
-        OtherBill suggests: We at least seem to agree on eliminating
-                            the <Container ~ foo> forms, and using only
-                            <ContainerMatch foo> semantics.
-
-    * SIGSEGV on Linux (glibc 2.1.2) isn't caught properly by a
-      sigwaiting thread. We need to work around this, perhaps unless
-      there is hope soon for a fixed glibc.
-
-    * orig_ct in the byterange/multipart handling may not be
-      needed. Apache 1.3 just never stashed "multipart" into
-      r->content_type. We should probably follow suit since the
-      byterange stuff doesn't want the rest of the code to see the
-      multipart content-type; the other code should still think it is
-      dealing with the <orig_ct> stuff.
-        Status: Greg volunteers to investigate (esp. since he was most 
-                likely the one to break it :-)
-
-Other features that need writing:
-
-    * Finish infrastructure in core for async MPMs
-        Status: post 2.0
-
-    * TODO in source -- just do an egrep on "TODO" and see what's there
-
-Available Patches:
-
-   * Jon Travis's <jtravis@covalent.net> patch to deal with thread-safe
-     issues with inet_ntoa.  See message <20001201163220.A12827@covalent.net>
-        Status:  This is being set aside until the IPv6 work is finished
-                 so that we know exactly what is required.
-
-   * Martin Sojka <msojka@gmx.de>'s patch to add error reporting for failed 
-     htpasswd actions due to a full /tmp volume (other programs may have
-     similar problems?)
-        PR: 6475
-        Status:
-
-   * Mike Abbott's <mja@trudge.engr.sgi.com> patches to improve
-     performance
-       Status: These were written for 1.3, and are awaiting a port to
-       2.0
- 
-   * Jim Winstead's <jimw@trainedmonkey.com> patch to add CookieDomain and 
-     other small mod_usertrack features
-
-   * Dan Rench's <drench@xnet.com> patch to add allow the errmsg and timefmt 
-     of SSI's to be modified in the config file.  Patch is available in 
-     PR6193
-
-Open issues:
-
-   * Which MPMs will be included with Apache 2.0?
diff --git a/acconfig.h b/acconfig.h
deleted file mode 100644
index 31ad39f..0000000
--- a/acconfig.h
+++ /dev/null
@@ -1,2 +0,0 @@
-/* Define this if struct tm has a field tm_gmtoff */
-#undef HAVE_GMTOFF
diff --git a/acinclude.m4 b/acinclude.m4
deleted file mode 100644
index 38c5e58..0000000
--- a/acinclude.m4
+++ /dev/null
@@ -1,638 +0,0 @@
-
-dnl APACHE_HELP_STRING(LHS, RHS)
-dnl Autoconf 2.50 can not handle substr correctly.  It does have 
-dnl AC_HELP_STRING, so let's try to call it if we can.
-dnl Note: this define must be on one line so that it can be properly returned
-dnl as the help string.
-AC_DEFUN(APACHE_HELP_STRING,[ifelse(regexp(AC_ACVERSION, 2\.1), -1, AC_HELP_STRING($1,$2),[  ]$1 substr([                       ],len($1))$2)])dnl
-
-dnl APACHE_SUBST(VARIABLE)
-dnl Makes VARIABLE available in generated files
-dnl (do not use @variable@ in Makefiles, but $(variable))
-AC_DEFUN(APACHE_SUBST,[
-  APACHE_VAR_SUBST="$APACHE_VAR_SUBST $1"
-  AC_SUBST($1)
-])
-
-dnl APACHE_FAST_OUTPUT(FILENAME)
-dnl Perform substitutions on FILENAME (Makefiles only)
-AC_DEFUN(APACHE_FAST_OUTPUT,[
-  APACHE_FAST_OUTPUT_FILES="$APACHE_FAST_OUTPUT_FILES $1"
-])
-
-dnl APACHE_MKDIR_P_CHECK
-dnl checks whether mkdir -p works
-AC_DEFUN(APACHE_MKDIR_P_CHECK,[
-  AC_CACHE_CHECK(for working mkdir -p, ac_cv_mkdir_p,[
-    test -d conftestdir && rm -rf conftestdir
-    mkdir -p conftestdir/somedir >/dev/null 2>&1
-    if test -d conftestdir/somedir; then
-      ac_cv_mkdir_p=yes
-    else
-      ac_cv_mkdir_p=no
-    fi
-    rm -rf conftestdir
-  ])
-])
-
-dnl APACHE_GEN_CONFIG_VARS
-dnl Creates config_vars.mk
-AC_DEFUN(APACHE_GEN_CONFIG_VARS,[
-  APACHE_SUBST(abs_srcdir)
-  APACHE_SUBST(bindir)
-  APACHE_SUBST(sbindir)
-  APACHE_SUBST(cgidir)
-  APACHE_SUBST(logfiledir)
-  APACHE_SUBST(exec_prefix)
-  APACHE_SUBST(datadir)
-  APACHE_SUBST(localstatedir)
-  APACHE_SUBST(mandir)
-  APACHE_SUBST(libexecdir)
-  APACHE_SUBST(htdocsdir)
-  APACHE_SUBST(manualdir)
-  APACHE_SUBST(includedir)
-  APACHE_SUBST(errordir)
-  APACHE_SUBST(iconsdir)
-  APACHE_SUBST(sysconfdir)
-  APACHE_SUBST(installbuilddir)
-  APACHE_SUBST(runtimedir)
-  APACHE_SUBST(proxycachedir)
-  APACHE_SUBST(other_targets)
-  APACHE_SUBST(progname)
-  APACHE_SUBST(prefix)
-  APACHE_SUBST(AWK)
-  APACHE_SUBST(CC)
-  APACHE_SUBST(CPP)
-  APACHE_SUBST(CXX)
-  APACHE_SUBST(CPPFLAGS)
-  APACHE_SUBST(CFLAGS)
-  APACHE_SUBST(CXXFLAGS)
-  APACHE_SUBST(LTFLAGS)
-  APACHE_SUBST(LDFLAGS)
-  APACHE_SUBST(LT_LDFLAGS)
-  APACHE_SUBST(SH_LDFLAGS)
-  APACHE_SUBST(HTTPD_LDFLAGS)
-  APACHE_SUBST(UTIL_LDFLAGS)
-  APACHE_SUBST(LIBS)
-  APACHE_SUBST(DEFS)
-  APACHE_SUBST(INCLUDES)
-  APACHE_SUBST(NOTEST_CPPFLAGS)
-  APACHE_SUBST(NOTEST_CFLAGS)
-  APACHE_SUBST(NOTEST_CXXFLAGS)
-  APACHE_SUBST(NOTEST_LDFLAGS)
-  APACHE_SUBST(NOTEST_LIBS)
-  APACHE_SUBST(EXTRA_CPPFLAGS)
-  APACHE_SUBST(EXTRA_CFLAGS)
-  APACHE_SUBST(EXTRA_CXXFLAGS)
-  APACHE_SUBST(EXTRA_LDFLAGS)
-  APACHE_SUBST(EXTRA_LIBS)
-  APACHE_SUBST(EXTRA_INCLUDES)
-  APACHE_SUBST(LIBTOOL)
-  APACHE_SUBST(SHELL)
-  APACHE_SUBST(MODULE_DIRS)
-  APACHE_SUBST(MODULE_CLEANDIRS)
-  APACHE_SUBST(PORT)
-  APACHE_SUBST(CORE_IMPLIB_FILE)
-  APACHE_SUBST(CORE_IMPLIB)
-  APACHE_SUBST(SH_LIBS)
-  APACHE_SUBST(SH_LIBTOOL)
-  APACHE_SUBST(MK_IMPLIB)
-  APACHE_SUBST(INSTALL_PROG_FLAGS)
-  APACHE_SUBST(DSO_MODULES)
-
-  abs_srcdir="`(cd $srcdir && pwd)`"
-
-  APACHE_MKDIR_P_CHECK
-  echo creating config_vars.mk
-  > build/config_vars.mk
-  for i in $APACHE_VAR_SUBST; do
-    eval echo "$i = \$$i" >> build/config_vars.mk
-  done
-])
-
-dnl APACHE_GEN_MAKEFILES
-dnl Creates Makefiles
-AC_DEFUN(APACHE_GEN_MAKEFILES,[
-  $SHELL $srcdir/build/fastgen.sh $srcdir $ac_cv_mkdir_p $BSD_MAKEFILE $APACHE_FAST_OUTPUT_FILES
-])
-
-dnl ## APACHE_OUTPUT(file)
-dnl ## adds "file" to the list of files generated by AC_OUTPUT
-dnl ## This macro can be used several times.
-AC_DEFUN(APACHE_OUTPUT, [
-  APACHE_OUTPUT_FILES="$APACHE_OUTPUT_FILES $1"
-])
-
-dnl
-dnl APACHE_TYPE_RLIM_T
-dnl
-dnl If rlim_t is not defined, define it to int
-dnl
-AC_DEFUN(APACHE_TYPE_RLIM_T, [
-  AC_CACHE_CHECK([for rlim_t], ac_cv_type_rlim_t, [
-    AC_TRY_COMPILE([
-#include <sys/types.h>
-#include <sys/time.h>
-#include <sys/resource.h>
-], [rlim_t spoon;], [
-      ac_cv_type_rlim_t=yes
-    ],[ac_cv_type_rlim_t=no
-    ])
-  ])
-  if test "$ac_cv_type_rlim_t" = "no" ; then
-      AC_DEFINE(rlim_t, int,
-          [Define to 'int' if <sys/resource.h> doesn't define it for us])
-  fi
-])
-
-dnl APACHE_MODPATH_INIT(modpath)
-AC_DEFUN(APACHE_MODPATH_INIT,[
-  current_dir=$1
-  modpath_current=modules/$1
-  modpath_static=
-  modpath_shared=
-  test -d $1 || $srcdir/build/mkdir.sh $modpath_current
-  > $modpath_current/modules.mk
-])dnl
-dnl
-AC_DEFUN(APACHE_MODPATH_FINISH,[
-  echo "DISTCLEAN_TARGETS = modules.mk" >> $modpath_current/modules.mk
-  echo "static = $modpath_static" >> $modpath_current/modules.mk
-  echo "shared = $modpath_shared" >> $modpath_current/modules.mk
-  if test ! -z "$modpath_static" -o ! -z "$modpath_shared"; then
-    MODULE_DIRS="$MODULE_DIRS $current_dir"
-  else
-    MODULE_CLEANDIRS="$MODULE_CLEANDIRS $current_dir"
-  fi
-  APACHE_FAST_OUTPUT($modpath_current/Makefile)
-])dnl
-dnl
-dnl APACHE_MODPATH_ADD(name[, shared[, objects [, ldflags[, libs]]]])
-AC_DEFUN(APACHE_MODPATH_ADD,[
-  if test -z "$3"; then
-    objects="mod_$1.lo"
-  else
-    objects="$3"
-  fi
-
-  if test -z "$module_standalone"; then
-    if test -z "$2"; then
-      libname="mod_$1.la"
-      BUILTIN_LIBS="$BUILTIN_LIBS $modpath_current/$libname"
-      modpath_static="$modpath_static $libname"
-      cat >>$modpath_current/modules.mk<<EOF
-$libname: $objects
-	\$(MOD_LINK) $objects
-EOF
-    else
-      apache_need_shared=yes
-      libname="mod_$1.la"
-      shobjects=`echo $objects | sed 's/\.lo/.slo/g'`
-      modpath_shared="$modpath_shared $libname"
-      cat >>$modpath_current/modules.mk<<EOF
-$libname: $shobjects
-	\$(SH_LINK) -rpath \$(libexecdir) -module -avoid-version $4 $objects $5
-EOF
-    fi
-  fi
-])dnl
-
-dnl
-dnl APACHE_MODULE(name, helptext[, objects[, structname[, default[, config]]]])
-dnl
-dnl default is one of:
-dnl   yes    -- enabled by default. user must explicitly disable.
-dnl   no     -- disabled under default, most, all. user must explicitly enable.
-dnl   most   -- disabled by default. enabled explicitly or with most or all.
-dnl   static -- enabled as static by default, must be explicitly changed.
-dnl   ""     -- disabled under default, most. enabled explicitly or with all.
-dnl
-dnl basically: yes/no is a hard setting. "most" means follow the "most"
-dnl            setting. otherwise, fall under the "all" setting.
-dnl            explicit yes/no always overrides.
-dnl
-AC_DEFUN(APACHE_MODULE,[
-  AC_MSG_CHECKING(whether to enable mod_$1)
-  define([optname],[--]ifelse($5,yes,disable,enable)[-]translit($1,_,-))dnl
-  AC_ARG_ENABLE(translit($1,_,-),APACHE_HELP_STRING(optname(),$2),,enable_$1=ifelse($5,,maybe-all,$5))
-  undefine([optname])dnl
-  _apmod_extra_msg=""
-  dnl When --enable-modules=most is set and the module was not explicitly
-  dnl requested, allow a module to disable itself if its pre-reqs fail.
-  if test "$module_selection" = "most" -a "$enable_$1" = "most"; then
-    _apmod_error_fatal="no"
-  else
-    _apmod_error_fatal="yes"
-  fi
-  if test "$enable_$1" = "static"; then
-    enable_$1=yes
-  elif test "$enable_$1" = "yes"; then
-    enable_$1=$module_default
-    _apmod_extra_msg=" ($module_selection)"
-  elif test "$enable_$1" = "most"; then
-    if test "$module_selection" = "most" -o "$module_selection" = "all"; then
-      enable_$1=$module_default
-      _apmod_extra_msg=" ($module_selection)"
-    elif test "$enable_$1" != "yes"; then
-      enable_$1=no
-    fi
-  elif test "$enable_$1" = "maybe-all"; then
-    if test "$module_selection" = "all"; then
-      enable_$1=$module_default
-      _apmod_extra_msg=" (all)"
-    else
-      enable_$1=no
-    fi
-  fi
-  if test "$enable_$1" != "no"; then
-    dnl If we plan to enable it, allow the module to run some autoconf magic
-    dnl that may disable it because of missing dependencies.
-    ifelse([$6],,:,[AC_MSG_RESULT([checking dependencies])
-                    $6
-                    AC_MSG_CHECKING(whether to enable mod_$1)
-                    if test "$enable_$1" = "no"; then
-                      if test "$_apmod_error_fatal" = "no"; then
-                        _apmod_extra_msg=" (disabled)"
-                      else
-                        AC_MSG_ERROR([mod_$1 has been requested but can not be built due to prerequisite failures])
-                      fi
-                    fi])
-  fi
-  AC_MSG_RESULT($enable_$1$_apmod_extra_msg)
-  if test "$enable_$1" != "no"; then
-    case "$enable_$1" in
-    shared*)
-      enable_$1=`echo $ac_n $enable_$1$ac_c|sed 's/shared,*//'`
-      sharedobjs=yes
-      shared=yes
-      DSO_MODULES="$DSO_MODULES $1"
-      ;;
-    *)
-      MODLIST="$MODLIST ifelse($4,,$1,$4)"
-      if test "$1" = "so"; then
-          sharedobjs=yes
-      fi
-      shared="";;
-    esac
-    APACHE_MODPATH_ADD($1, $shared, $3)
-  fi
-])dnl
-
-dnl
-dnl APACHE_LAYOUT_DEFAULTS
-dnl
-AC_DEFUN(APACHE_LAYOUT_DEFAULTS,[
-  dnl Apache defaults for autoconf variables.
-  test "x${prefix}" = "xNONE" && prefix='/usr/local/apache2'
-  test "x${exec_prefix}" = "xNONE" && exec_prefix='${prefix}'
-  dnl Now we need to check the non-autoconf variables.
-  test "x${cgidir}" = "x" && cgidir='${datadir}/cgi-bin'
-  test "x${logfiledir}" = "x" && logfiledir='${localstatedir}/logs'
-  test "x${htdocsdir}" = "x" && htdocsdir='${datadir}/htdocs'
-  test "x${manualdir}" = "x" && manualdir='${datadir}/manual'
-  test "x${errordir}" = "x" && errordir='${datadir}/error'
-  test "x${iconsdir}" = "x" && iconsdir='${datadir}/icons'
-  test "x${installbuilddir}" = "x" && installbuilddir='${datadir}/build'
-  test "x${runtimedir}" = "x" && runtimedir='${localstatedir}/logs'
-  test "x${proxycachedir}" = "x" && proxycachedir='${localstatedir}/proxy'
-])dnl
-
-dnl
-dnl APACHE_LAYOUT(configlayout, layoutname)
-dnl
-AC_DEFUN(APACHE_LAYOUT,[
-  if test ! -f $srcdir/config.layout; then
-    echo "** Error: Layout file $srcdir/config.layout not found"
-    echo "** Error: Cannot use undefined layout '$LAYOUT'"
-    exit 1
-  fi
-  pldconf=./config.pld
-  changequote({,})
-  sed -e "1,/[ 	]*<[lL]ayout[ 	]*$2[ 	]*>[ 	]*/d" \
-      -e '/[ 	]*<\/Layout>[ 	]*/,$d' \
-      -e "s/^[ 	]*//g" \
-      -e "s/:[ 	]*/=\'/g" \
-      -e "s/[ 	]*$/'/g" \
-      $1 > $pldconf
-  layout_name=$2
-  . $pldconf
-  rm $pldconf
-  for var in prefix exec_prefix bindir sbindir libexecdir mandir \
-             sysconfdir datadir errordir iconsdir htdocsdir cgidir \
-             includedir localstatedir runtimedir logfiledir \
-             manualdir proxycachedir installbuilddir; do
-    eval "val=\"\$$var\""
-    case $val in
-      *+)
-        val=`echo $val | sed -e 's;\+$;;'`
-        eval "$var=\"\$val\""
-        autosuffix=yes
-        ;;
-      *)
-        autosuffix=no
-        ;;
-    esac
-    val=`echo $val | sed -e 's:\(.\)/*$:\1:'`
-    val=`echo $val | sed -e 's:[\$]\([a-z_]*\):${\1}:g'`
-    if test "$autosuffix" = "yes"; then
-      if echo $val | grep apache >/dev/null; then
-        addtarget=no
-      else
-        addtarget=yes
-      fi
-      if test "$addtarget" = "yes"; then
-        val="$val/apache2"
-      fi
-    fi
-    eval "$var='$val'"
-  done
-  changequote([,])
-])dnl
-
-dnl
-dnl APACHE_ENABLE_LAYOUT
-dnl
-AC_DEFUN(APACHE_ENABLE_LAYOUT,[
-AC_ARG_ENABLE(layout,
-[  --enable-layout=LAYOUT],[
-  LAYOUT=$enableval
-])
-
-if test -z "$LAYOUT"; then
-  LAYOUT="Apache"
-fi
-APACHE_LAYOUT($srcdir/config.layout, $LAYOUT)
-
-AC_MSG_CHECKING(for chosen layout)
-AC_MSG_RESULT($layout_name)
-])
-
-dnl
-dnl APACHE_ENABLE_MODULES
-dnl
-AC_DEFUN(APACHE_ENABLE_MODULES,[
-  module_selection=default
-  module_default=yes
-
-  AC_ARG_ENABLE(modules,
-  APACHE_HELP_STRING(--enable-modules=MODULE-LIST,Modules to enable),[
-    for i in $enableval; do
-      if test "$i" = "all" -o "$i" = "most"; then
-        module_selection=$i
-      else
-        eval "enable_$i=yes"
-      fi
-    done
-  ])
-  
-  AC_ARG_ENABLE(mods-shared,
-  APACHE_HELP_STRING(--enable-mods-shared=MODULE-LIST,Shared modules to enable),[
-    for i in $enableval; do
-      if test "$i" = "all" -o "$i" = "most"; then
-        module_selection=$i
-        module_default=shared
-      else
-        i=`echo $i | sed 's/-/_/g'`
-    	eval "enable_$i=shared"
-      fi
-    done
-  ])
-])
-
-AC_DEFUN(APACHE_REQUIRE_CXX,[
-  if test -z "$apache_cxx_done"; then
-    AC_PROG_CXX
-    AC_PROG_CXXCPP
-    apache_cxx_done=yes
-  fi
-])
-
-dnl
-dnl APACHE_CHECK_SSL_TOOLKIT
-dnl
-dnl Find the openssl toolkit installation and check it for the right
-dnl version, then add its flags to INCLUDES and LIBS.  This should
-dnl really be using a custom AC_TRY_COMPILE function to test the includes
-dnl and then AC_TRY_LINK to test the libraries directly for the version,
-dnl but that will require someone who knows how to program openssl.
-dnl
-AC_DEFUN(APACHE_CHECK_SSL_TOOLKIT,[
-if test "x$ap_ssltk_base" = "x"; then
-  AC_MSG_CHECKING(for SSL/TLS toolkit base)
-  ap_ssltk_base=""
-  AC_ARG_WITH(ssl, APACHE_HELP_STRING(--with-ssl=DIR,SSL/TLS toolkit (OpenSSL)), [
-    if test "x$withval" != "xyes" -a "x$withval" != "x"; then
-      ap_ssltk_base="$withval"
-    fi
-  ])
-  if test "x$ap_ssltk_base" = "x"; then
-    AC_CACHE_VAL(ap_cv_ssltk,[
-      #
-      # shotgun approach: find all occurrences of the openssl program
-      #
-      ap_ssltk_try=""
-      # The IFS=... trick eliminates the colons from $PATH, without using an external program
-      for p in `IFS=":$IFS"; echo $PATH` /usr/local/openssl/bin /usr/local/ssl/bin; do
-        if test -f "$p/openssl"; then
-          ap_ssltk_try="$ap_ssltk_try $p"
-        fi
-      done
-      if test "x$ap_ssltk_try" = "x"; then
-        AC_MSG_ERROR(['openssl' not found in path])
-      fi
-      for p in $ap_ssltk_try; do
-        ap_ssltk_version="`$p/openssl version`"
-        case "$ap_ssltk_version" in
-            "OpenSSL "[[1-9]]* | \
-            "OpenSSL "0.9.[[6-9]]* | \
-            "OpenSSL "0.[[1-9]][[0-9]]* )
-                ap_cv_ssltk="`(cd $p/.. && pwd)`"
-                break
-                ;;
-            *)
-                # skip because it is too old or a bad result
-                ;;
-        esac
-      done
-      if test "x$ap_cv_ssltk" = "x"; then
-        AC_MSG_ERROR([requires OpenSSL 0.9.6 or higher])
-      fi
-    ])
-    ap_ssltk_base="$ap_cv_ssltk"
-  fi
-  if test ! -d $ap_ssltk_base; then
-    AC_MSG_ERROR([invalid SSL/TLS toolkit base directory $ap_ssltk_base])
-  fi
-  AC_MSG_RESULT($ap_ssltk_base)
-    
-  AC_MSG_CHECKING(for SSL/TLS toolkit version)
-  AC_MSG_RESULT($ap_ssltk_version)
-    
-  AC_MSG_CHECKING(for SSL/TLS toolkit includes)
-  ap_ssltk_incdir=""
-  for p in $ap_ssltk_base/include /usr/local/openssl/include \
-           /usr/local/ssl/include /usr/local/include /usr/include; do
-    if test -f "$p/openssl/ssl.h"; then
-      ap_ssltk_incdir="$p"
-      break
-    elif test -f "$p/ssl.h"; then
-      ap_ssltk_incdir="$p"
-      break
-    fi
-  done
-  if test "x$ap_ssltk_incdir" = "x"; then
-    AC_MSG_ERROR([OpenSSL headers not found])
-  fi
-  AC_MSG_RESULT($ap_ssltk_incdir)
-
-  AC_MSG_CHECKING(for SSL/TLS toolkit libraries)
-  ap_ssltk_libdir=""
-  for p in $ap_ssltk_base/lib /usr/local/openssl/lib \
-           /usr/local/ssl/lib /usr/local/lib /usr/lib /lib; do
-    if test -f "$p/libssl.a" -o -f "$p/libssl.so"; then
-      ap_ssltk_libdir="$p"
-      break
-    fi
-  done
-  if test ".$ap_ssltk_libdir" = .; then
-    AC_MSG_ERROR([OpenSSL libraries not found])
-  fi
-  AC_MSG_RESULT($ap_ssltk_libdir)
-
-  dnl #  annotate the Apache build environment with determined information
-  APR_ADDTO(INCLUDES, [-I$ap_ssltk_incdir/openssl])
-  if test "x$ap_ssltk_incdir" != "x/usr/include"; then
-    APR_ADDTO(INCLUDES, [-I$ap_ssltk_incdir])
-  fi
-  if test "x$ap_ssltk_libdir" != "x/usr/lib"; then
-    APR_ADDTO(LDFLAGS, [-L$ap_ssltk_libdir])
-    if test "x$ap_platform_runtime_link_flag" != "x"; then
-      APR_ADDTO(LDFLAGS, [$ap_platform_runtime_link_flag$ap_ssltk_libdir])
-    fi
-  fi
-  APR_ADDTO(LIBS, [-lssl -lcrypto])
-  ap_cv_ssltk="$ap_ssltk_base"
-fi
-])
-
-dnl
-dnl APACHE_PARSE_ARGUMENTS
-dnl a reimplementation of autoconf's argument parser,
-dnl used here to allow us to co-exist layouts and argument based
-dnl set ups.
-AC_DEFUN(APACHE_PARSE_ARGUMENTS,[
-ac_prev=
-for ac_option
-do
-  # If the previous option needs an argument, assign it.
-  if test -n "$ac_prev"; then
-    eval "$ac_prev=\$ac_option"
-    ac_prev=
-    continue
-  fi
-
-  ac_optarg=`expr "x$ac_option" : 'x[[^=]]*=\(.*\)'`
-
-  case $ac_option in
-
-  -bindir | --bindir | --bindi | --bind | --bin | --bi)
-    ac_prev=bindir ;;
-  -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
-    bindir=$ac_optarg ;;
-
-  -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
-    ac_prev=datadir ;;
-  -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
-  | --da=*)
-    datadir=$ac_optarg ;;
-
-  -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
-  | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
-  | --exec | --exe | --ex)
-    ac_prev=exec_prefix ;;
-  -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
-  | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
-  | --exec=* | --exe=* | --ex=*)
-    exec_prefix=$ac_optarg ;;
-
-  -includedir | --includedir | --includedi | --included | --include \
-  | --includ | --inclu | --incl | --inc)
-    ac_prev=includedir ;;
-  -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
-  | --includ=* | --inclu=* | --incl=* | --inc=*)
-    includedir=$ac_optarg ;;
-
-  -infodir | --infodir | --infodi | --infod | --info | --inf)
-    ac_prev=infodir ;;
-  -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
-    infodir=$ac_optarg ;;
-
-  -libdir | --libdir | --libdi | --libd)
-    ac_prev=libdir ;;
-  -libdir=* | --libdir=* | --libdi=* | --libd=*)
-    libdir=$ac_optarg ;;
-
-  -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
-  | --libexe | --libex | --libe)
-    ac_prev=libexecdir ;;
-  -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
-  | --libexe=* | --libex=* | --libe=*)
-    libexecdir=$ac_optarg ;;
-
-  -localstatedir | --localstatedir | --localstatedi | --localstated \
-  | --localstate | --localstat | --localsta | --localst \
-  | --locals | --local | --loca | --loc | --lo)
-    ac_prev=localstatedir ;;
-  -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
-  | --localstate=* | --localstat=* | --localsta=* | --localst=* \
-  | --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
-    localstatedir=$ac_optarg ;;
-
-  -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
-    ac_prev=mandir ;;
-  -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
-    mandir=$ac_optarg ;;
-
-  -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
-    ac_prev=prefix ;;
-  -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
-    prefix=$ac_optarg ;;
-
-  -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
-    ac_prev=sbindir ;;
-  -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
-  | --sbi=* | --sb=*)
-    sbindir=$ac_optarg ;;
-
-  -sharedstatedir | --sharedstatedir | --sharedstatedi \
-  | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
-  | --sharedst | --shareds | --shared | --share | --shar \
-  | --sha | --sh)
-    ac_prev=sharedstatedir ;;
-  -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
-  | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
-  | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
-  | --sha=* | --sh=*)
-    sharedstatedir=$ac_optarg ;;
-
-  -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
-  | --syscon | --sysco | --sysc | --sys | --sy)
-    ac_prev=sysconfdir ;;
-  -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
-  | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
-    sysconfdir=$ac_optarg ;;
-
-  esac
-done
-
-# Be sure to have absolute paths.
-for ac_var in exec_prefix prefix
-do
-  eval ac_val=$`echo $ac_var`
-  case $ac_val in
-    [[\\/$]]* | ?:[[\\/]]* | NONE | '' ) ;;
-    *)  AC_MSG_ERROR([expected an absolute path for --$ac_var: $ac_val]);;
-  esac
-done
-
-])dnl
diff --git a/apachenw.mcp.zip b/apachenw.mcp.zip
deleted file mode 100644
index 5a2d455..0000000
--- a/apachenw.mcp.zip
+++ /dev/null
Binary files differ
diff --git a/build/.cvsignore b/build/.cvsignore
deleted file mode 100644
index 48698eb..0000000
--- a/build/.cvsignore
+++ /dev/null
@@ -1,2 +0,0 @@
-rules.mk
-config_vars.mk
diff --git a/build/NWGNUenvironment.inc b/build/NWGNUenvironment.inc
deleted file mode 100644
index 76149ad..0000000
--- a/build/NWGNUenvironment.inc
+++ /dev/null
@@ -1,286 +0,0 @@
-#
-# Setup needed Tools and Libraries
-#
-
-ifeq "$(wildcard $(AP_WORK)\NWGNUcustom.ini)" "$(AP_WORK)\NWGNUcustom.ini"
-include $(AP_WORK)\NWGNUcustom.ini
-CUSTOM_INI = $(AP_WORK)\NWGNUcustom.ini
-endif
-
-ifndef VERBOSE
-.SILENT:
-endif
-
-#
-# Treat like an include
-#
-ifndef EnvironmentDefined
-
-#
-# simple macros for parsing makefiles
-#
-EOLIST:=
-EMPTY :=
-COMMA := ,
-SPACE := $(EMPTY) $(EMPTY)
-
-#
-# Base environment
-#
-
-# Try and handle case issues
-ifndef NOVELLLIBC
-ifdef NovellLibC
-NOVELLLIBC = $(NovellLibC)
-endif
-endif
-
-ifndef NOVELLLIBC
-NOVELLLIBC = C:/novell/ndk/libc
-endif
-
-# This is a placeholder
-# ifndef LDAPSDK
-# LDAPSDK = C:/novell/ndk/cldapsdk
-# endif
-
-ifndef METROWERKS
-METROWERKS = C:\Program Files\Metrowerks\CodeWarrior
-endif
-
-# If LM_LICENSE_FILE isn't defined, define a variable that can be used to
-# restart make with it defined
-ifndef LM_LICENSE_FILE
-NO_LICENSE_FILE = NO_LICENSE_FILE
-endif
-
-#
-# Set the Release type that you want to build, possible values are:
-#
-#  debug		- full debug switches are set
-#  noopt		- normal switches are set (default)
-#  optimized	- optimization switches are set
-
-ifdef reltype
-RELEASE=$(reltype)
-endif
-
-ifdef RELTYPE
-RELEASE=$(RELTYPE)
-endif
-
-ifdef debug
-RELEASE=debug
-endif
-
-ifdef DEBUG
-RELEASE=debug
-endif
-
-ifdef optimized
-RELEASE=optimized
-endif
-
-ifdef OPTIMIZED
-RELEASE=optimized
-endif
-
-ifndef RELEASE
-RELEASE = optimized
-endif
-
-ifeq "$(RELEASE)" "debug"
-OBJDIR = Debug
-endif
-
-ifeq "$(RELEASE)" "noopt"
-OBJDIR = Noopt
-endif
-
-ifeq "$(RELEASE)" "optimized"
-OBJDIR = Release
-endif
-
-#
-# Setup compiler information
-#
-
-# MetroWerks NLM tools
-CC		= mwccnlm
-CPP		= mwccnlm
-LINK	= mwldnlm
-LIB		= mwldnlm -type library -w nocmdline
-
-NOVI	= $(NOVELLLIBC)\imports
-
-INCDIRS 	= $(NOVELLLIBC)\include;$(NOVELLLIBC)\include\nks;$(NOVELLLIBC)\include\winsock;
-
-DEFINES		= -DNETWARE
-
-#
-# MetroWerks static Libraries
-
-CLIB3S	= $(METROWERKS)\Novell Support\Metrowerks Support\Libraries\Runtime\mwcrtl.lib
-MATH3S	=
-PLIB3S	= $(METROWERKS)\Novell Support\Metrowerks Support\Libraries\MSL C++\MWCPP.lib
-
-# Base compile flags
-# and prefix or precompiled header added here.
-
-# The default flags are as follows:
-#
-# -c                    compile only, no link
-# -nosyspath            treat #include <...> like #include "..."
-# -Cpp_exceptions off   disable C++ exceptions
-# -RTTI off             disable C++ run-time typing information
-# -align 4              align on 4 byte bounderies
-# -w nocmdline          disable command-line driver/parser warnings
-# -proc PII             generate code base on Pentium II instruction set
-# -inst mmx             use MMX extensions
-
-CFLAGS = -c -nosyspath -Cpp_exceptions off -RTTI off -align 4 -w nocmdline -proc PII -inst mmx
-
-# -g                    generate debugging information
-# -O1                   level 1 optimizations
-
-ifeq "$(RELEASE)" "debug"
-CFLAGS += -g -O1
-endif
-
-# -O4,p                 level 4 optimizations, optimize for speed
-ifeq "$(RELEASE)" "optimized"
-CFLAGS += -O4,p
-endif
-
-# -prefix pre_nw.h      #include pre_nw.h for all files
-
-CFLAGS += -prefix pre_nw.h
-
-
-PATH:=$(PATH);$(METROWERKS)\bin;$(METROWERKS)\Other Metrowerks Tools\Command Line Tools
-
-#
-# Declare major project deliverables output directories here
-#
-
-ifdef DEST
-INSTALL = $(DEST)
-ifeq (\, $(findstring \,$(INSTALL)))
-INSTDIRS = $(DEST)
-endif
-endif
-
-ifdef dest
-INSTALL = $(dest)
-ifeq (\, $(findstring \,$(INSTALL)))
-INSTDIRS = $(dest)
-endif
-endif
-
-ifndef INSTALL
-INSTALL = $(AP_WORK)\..\Dist
-INSTDIRS = $(AP_WORK)\..\Dist
-endif
-
-INSTDEVDIRS := \
-    $(INSTDIRS) \
-	$(INSTALL)\Apache2\include \
-	$(INSTALL)\Apache2\lib \
-
-INSTDIRS += \
-	$(INSTALL)\Apache2 \
-	$(INSTALL)\Apache2\cgi-examples \
-	$(INSTALL)\Apache2\conf \
-	$(INSTALL)\Apache2\error \
-	$(INSTALL)\Apache2\error\include \
-	$(INSTALL)\Apache2\htdocs \
-	$(INSTALL)\Apache2\icons \
-	$(INSTALL)\Apache2\icons\small \
-	$(INSTALL)\Apache2\logs \
-	$(INSTALL)\Apache2\man \
-	$(INSTALL)\Apache2\manual \
-	$(INSTALL)\Apache2\manual\developer \
-	$(INSTALL)\Apache2\manual\faq \
-	$(INSTALL)\Apache2\manual\howto \
-	$(INSTALL)\Apache2\manual\images \
-	$(INSTALL)\Apache2\manual\misc \
-	$(INSTALL)\Apache2\manual\mod \
-	$(INSTALL)\Apache2\manual\platform \
-	$(INSTALL)\Apache2\manual\programs \
-	$(INSTALL)\Apache2\manual\search \
-	$(INSTALL)\Apache2\manual\ssl \
-	$(INSTALL)\Apache2\manual\vhosts \
-	$(INSTALL)\Apache2\modules \
-
-#
-# Declare Command and tool macros here
-#
-
-# Os2LibPath is an extra check to see if we are on NT
-ifdef Os2LibPath
-OS = Windows_NT
-endif
-
-ifeq "$(OS)" "Windows_NT"
-CMD=cmd /C
-CHK=cmd /C if exist
-CHKNOT=cmd /C if not exist
-DEL = del /F
-DELTREE = cmd /C rd /s/q
-WINNT=1
-else
-CMD=command /C
-CHK=command /C if exist
-CHKNOT=command /C if not exist
-DEL = del
-DELTREE = deltree /y
-endif
-
-
-#
-# Setup base C compiler flags
-#
-
-#
-# Common directories
-#
-
-STDMOD		= $(AP_WORK)/modules
-NWOS		= $(AP_WORK)/os/netware
-SERVER		= $(AP_WORK)/server
-SRC			= $(AP_WORK)
-APR			= $(AP_WORK)/srclib/apr
-APRUTIL		= $(AP_WORK)/srclib/apr-util
-SUPMOD		= $(AP_WORK)/support
-PCRE		= $(AP_WORK)/srclib/pcre
-APRTEST		= $(AP_WORK)/srclib/apr/test
-HTTPD		= $(AP_WORK)/modules/http
-XML			= $(AP_WORK)/srclib/apr-util/xml
-
-#
-# Internal Libraries
-#
-
-APRLIB		= $(APR)/$(OBJDIR)/aprlib.lib
-APRUTLIB	= $(APRUTIL)/$(OBJDIR)/aprutil.lib
-STMODLIB	= $(STDMOD)/$(OBJDIR)/stdmod.lib
-PCRELIB		= $(PCRE/$(OBJDIR)/pcre.lib
-NWOSLIB		= $(NWOS)/$(OBJDIR)/netware.lib
-SERVLIB		= $(SERVER)/$(OBJDIR)/server.lib
-HTTPDLIB	= $(HTTPD)/$(OBJDIR)/httpd.lib
-XMLLIB		= $(XML)/$(OBJDIR)/xmllib.lib
-
-#
-# Additional general defines
-#
-VERSION		= 2,0,0
-			
-EnvironmentDefined = 1
-endif # ifndef EnvironmentDefined
-
-# This is always set so that it will show up in lower directories
-
-ifdef Path
-Path = $(PATH)
-endif
-
diff --git a/build/NWGNUhead.inc b/build/NWGNUhead.inc
deleted file mode 100644
index 71855ab..0000000
--- a/build/NWGNUhead.inc
+++ /dev/null
@@ -1,103 +0,0 @@
-#
-# Obtain the global build environment
-#
-
-include $(AP_WORK)\build\NWGNUenvironment.inc
-
-#
-# Define base targets and rules
-# 
-
-TARGETS = libs nlms install clobber_libs clobber_nlms clean installdev
-
-.PHONY : $(TARGETS) default all help $(NO_LICENSE_FILE)
-
-# Here is where we will use the NO_LICENSE_FILE variable to see if we need to
-# restart the make with it defined
-
-ifdef NO_LICENSE_FILE
-
-default: NO_LICENSE_FILE
-
-all: NO_LICENSE_FILE
-
-install :: NO_LICENSE_FILE
-
-installdev :: NO_LICENSE_FILE
-
-NO_LICENSE_FILE :
-	$(MAKE) $(MAKECMDGOALS) -f NWGNUmakefile RELEASE=$(RELEASE) DEST="$(INSTALL)" LM_LICENSE_FILE="$(METROWERKS)\license.dat"
-
-else # LM_LICENSE_FILE must be defined so use the real targets
-
-default: $(SUBDIRS) libs nlms
-
-all: $(SUBDIRS) libs nlms install
-
-$(TARGETS) :: $(SUBDIRS)
-
-install :: nlms $(INSTDIRS)
-
-installdev :: $(INSTDEVDIRS)
-
-$(INSTDIRS) ::
-	$(CHKNOT) $@\NUL mkdir $@
-
-$(INSTDEVDIRS) ::
-	$(CHKNOT) $@\NUL mkdir $@
-
-endif #NO_LICENSE_FILE check
-
-help :
-	@echo targets for RELEASE=$(RELEASE):
-	@echo (default) . . . . libs nlms
-	@echo all . . . . . . . does everything (libs nlms install)
-	@echo libs. . . . . . . builds all libs
-	@echo nlms. . . . . . . builds all nlms
-	@echo install . . . . . builds libs and nlms and copies install files to
-	@echo                   "$(INSTALL)"
-	@echo clean . . . . . . deletes $(OBJDIR) dirs, *.err, and *.map
-	@echo clobber_all . . . deletes all possible output from the make
-	@echo clobber_install . deletes all files in $(INSTALL)
-	@$(CMD) echo.
-	@echo Multiple targets can be used on a single nmake command line -
-	@echo (i.e. $(MAKE) clean all)
-	@$(CMD) echo.
-	@echo You can also specify RELEASE=debug, RELEASE=noopt, or RELEASE=optimized
-	@echo The default is RELEASE=optimized
-
-clobber_all :: clean clobber_install
-
-clobber_install ::
-	-$(DELTREE) $(INSTALL) 2>NUL
-
-#
-# build recursive targets
-#
-
-$(SUBDIRS) : FORCE
-ifneq "$(MAKECMDGOALS)" "clean"
-	$(CMD) echo.
-	@echo Building $(CURDIR)/$@
-endif
-	$(MAKE) -C $@ $(MAKECMDGOALS) -f NWGNUmakefile RELEASE=$(RELEASE) DEST="$(INSTALL)" LM_LICENSE_FILE="$(LM_LICENSE_FILE)"
-	$(CMD) echo.
-
-FORCE:
-
-#
-# Standard targets
-#
-
-clean :: $(SUBDIRS)
-	@echo Cleaning up $(CURDIR)
-	-$(DELTREE) $(OBJDIR) 2> NUL
-	$(CHK) *.err $(DEL) *.err
-	$(CHK) *.map $(DEL) *.map
-	$(CHK) *.d $(DEL) *.d
-	$(CHK) *.tmp $(DEL) *.tmp
-	-$(DELTREE) $(OBJDIR) 2> NUL
-
-$(OBJDIR) ::
-	$(CHKNOT) $(OBJDIR)\nul mkdir $(OBJDIR)
-
diff --git a/build/NWGNUmakefile b/build/NWGNUmakefile
deleted file mode 100644
index deeef84..0000000
--- a/build/NWGNUmakefile
+++ /dev/null
@@ -1,80 +0,0 @@
-#
-# Declare the sub-directories to be built here
-#
-
-SUBDIRS = \
-	$(EOLIST) 
-
-#
-# Get the 'head' of the build environment.  This includes default targets and
-# paths to tools
-#
-
-include $(AP_WORK)\build\NWGNUhead.inc
-
-#
-# build this level's files
-
-FILES_prebuild_headers = \
-	$(APR)/include/apr.h \
-	$(APRUTIL)/include/apu.h \
-	$(APRUTIL)/include/apr_ldap.h \
-	$(PCRE)/config.h \
-	$(PCRE)/pcre.h \
-	$(EOLIST) 
-    
-nlms :: $(NWOS)/httpd.imp
-
-$(NWOS)/httpd.imp : make_nw_export.awk nw_export.i
-	@echo Generating $(subst /,\,$@)
-	awk -f make_nw_export.awk nw_export.i | sort >$(NWOS)/httpd.imp
-    
-nw_export.i : nw_export.inc $(FILES_prebuild_headers) cc.opt
-	@echo Generating $(subst /,\,$@)
-	$(CC) $< @cc.opt
-
-cc.opt : NWGNUmakefile $(AP_WORK)\build\NWGNUenvironment.inc $(AP_WORK)\build\NWGNUtail.inc $(AP_WORK)\build\NWGNUhead.inc
-	$(CHK) $@ $(DEL) $@
-	@echo -P >> $@
-	@echo -EP >> $@
-	@echo -nosyspath >> $@
-	@echo -w nocmdline >> $@
-	@echo -DNETWARE >> $@
-	@echo -DCORE_PRIVATE >> $@
-	@echo -I..\include >> $@
-	@echo -I..\modules\http >> $@
-	@echo -I..\os\netware >> $@
-	@echo -I..\server\mpm\netware >> $@
-	@echo -I..\srclib\apr\include >> $@
-	@echo -I..\srclib\apr-util\include >> $@
-	@echo -ir $(NOVELLLIBC) >> $@
-
-$(APR)/include/%.h: $(subst /,\,$(APR))\include\%.hnw
-	@echo Creating $(subst /,\,$@)
-	copy $< $(subst /,\,$(APR))\include\$(@F)
-
-$(APRUTIL)/include/%.h: $(subst /,\,$(APRUTIL))\include\%.hnw
-	@echo Creating $(subst /,\,$@)
-	copy $< $(subst /,\,$(APRUTIL))\include\$(@F)
-
-$(PCRE)/%.h: $(subst /,\,$(PCRE))\%.hw
-	@echo Creating $(subst /,\,$@)
-	copy $< $(subst /,\,$(PCRE))\$(@F)
-
-#
-# You can use this target if all that is needed is to copy files to the
-# installation area
-#
-install :: nlms FORCE
-	
-
-clean ::
-	$(CHK) nw_export.i                                  $(DEL) nw_export.i
-	$(CHK) cc.opt                                       $(DEL) cc.opt
-	$(CHK) $(subst /,\,$(APR))\include\apr.h            $(DEL) $(subst /,\,$(APR))\include\apr.h
-	$(CHK) $(subst /,\,$(APRUTIL))\include\apu.h        $(DEL) $(subst /,\,$(APRUTIL))\include\apu.h
-	$(CHK) $(subst /,\,$(APRUTIL))\include\apr_ldap.h   $(DEL) $(subst /,\,$(APRUTIL))\include\apr_ldap.h
-	$(CHK) $(subst /,\,$(PCRE))\config.h                $(DEL) $(subst /,\,$(PCRE))\config.h
-	$(CHK) $(subst /,\,$(PCRE))\pcre.h                  $(DEL) $(subst /,\,$(PCRE))\pcre.h
-	$(CHK) $(subst /,\,$(NWOS))\httpd.imp               $(DEL) $(subst /,\,$(NWOS))\httpd.imp
-    
diff --git a/build/NWGNUtail.inc b/build/NWGNUtail.inc
deleted file mode 100644
index 015f197..0000000
--- a/build/NWGNUtail.inc
+++ /dev/null
@@ -1,287 +0,0 @@
-#
-# This contains final targets and should be included at the end of any
-# NWGNUmakefile file
-#
-
-#
-# If we are going to create an nlm, make sure we have assigned variables to 
-# use during the link.
-#
-echo NLM_NAME=$(NLM_NAME)
-ifndef NLM_NAME
-NLM_NAME = $(TARGET_nlm)
-endif
-
-ifndef NLM_DESCRIPTION
-NLM_DESCRIPTION = $(NLM_NAME)
-endif
-
-ifndef NLM_THREAD_NAME
-NLM_THREAD_NAME = $(NLM_NAME) Thread
-endif
-
-#
-# Create dependency lists based on the files available
-#
-
-CCOPT_DEPENDS 	= \
-				$(AP_WORK)\build\NWGNUhead.inc \
-				$(AP_WORK)\build\NWGNUenvironment.inc \
-				$(AP_WORK)\build\NWGNUtail.inc \
-				NWGNUmakefile \
-				$(CUSTOM_INI) \
-				$(EOLIST)
-                
-CPPOPT_DEPENDS	= \
-				$(AP_WORK)\build\NWGNUhead.inc \
-				$(AP_WORK)\build\NWGNUenvironment.inc \
-				$(AP_WORK)\build\NWGNUtail.inc \
-				NWGNUmakefile \
-				$(CUSTOM_INI) \
-				$(EOLIST)
-
-$(NLM_NAME)_LINKOPT_DEPENDS	= \
-				$(TARGET_lib) \
-				$(AP_WORK)\build\NWGNUenvironment.inc \
-				NWGNUmakefile \
-				$(AP_WORK)\build\NWGNUtail.inc \
-				$(CUSTOM_INI) \
-				$(EOLIST)
-
-ifeq "$(words $(strip $(TARGET_lib)))" "1"
-LIB_NAME					= $(basename $(notdir $(TARGET_lib)))
-$(LIB_NAME)_LIBLST_DEPENDS	= \
-				$(FILES_lib_objs) \
-				$(AP_WORK)\build\NWGNUenvironment.inc \
-				NWGNUmakefile \
-				$(AP_WORK)\build\NWGNUtail.inc \
-				$(CUSTOM_INI) \
-				$(EOLIST)
-endif
-
-ifeq "$(wildcard NWGNU$(LIB_NAME))" "NWGNU$(LIB_NAME)"
-$(LIB_NAME)_LIBLST_DEPENDS	+= NWGNU$(LIB_NAME)
-endif
-
-ifeq "$(wildcard NWGNU$(NLM_NAME))" "NWGNU$(NLM_NAME)"
-$(NLM_NAME)_LINKOPT_DEPENDS	+= NWGNU$(NLM_NAME)
-CCOPT_DEPENDS 	+= NWGNU$(NLM_NAME)
-CPPOPT_DEPENDS 	+= NWGNU$(NLM_NAME)
-endif
-
-#
-# Generic compiler rules
-#
-
-$(OBJDIR)/%.o: %.c $(OBJDIR)\cc.opt
-	@echo Compiling $<
-	$(CC) $< -o=$(OBJDIR)\$(@F) @$(OBJDIR)\cc.opt 
-
-$(OBJDIR)\cc.opt: $(CCOPT_DEPENDS)
-	$(CHK) $@ $(DEL) $@
-	@echo Generating $@
-ifneq "$(strip $(CFLAGS))" ""
-	@echo $(CFLAGS) >> $@
-endif	
-ifneq "$(strip $(XCFLAGS))" ""
-	@echo $(XCFLAGS) >> $@
-endif
-ifneq "$(strip $(XINCDIRS))" ""
-	@echo $(foreach xincdir,$(strip $(subst ;,$(SPACE),$(XINCDIRS))),-I$(xincdir)) >> $@
-endif	
-ifneq "$(strip $(INCDIRS))" ""
-	@echo $(foreach incdir,$(strip $(subst ;,$(SPACE),$(INCDIRS))),-I$(incdir)) >> $@
-endif
-ifneq "$(strip $(DEFINES))" "" 
-	@echo $(DEFINES) >> $@
-endif
-ifneq "$(strip $(XDEFINES))" "" 
-	@echo $(XDEFINES) >> $@
-endif
-
-$(OBJDIR)/%.o: %.cpp $(OBJDIR)\cpp.opt
-	@echo Compiling $<
-	$(CPP) $< -o=$(OBJDIR)\$(@F) @$(OBJDIR)\cpp.opt 
-
-$(OBJDIR)\cpp.opt: $(CPPOPT_DEPENDS)
-	$(CHK) $@ $(DEL) $@
-	@echo Generating $@
-ifneq "$(strip $(CFLAGS))" ""
-	@echo $(CFLAGS) >> $@
-endif	
-ifneq "$(strip $(XCFLAGS))" ""
-	@echo $(XCFLAGS) >> $@
-endif
-ifneq "$(strip $(XINCDIRS))" ""
-	@echo $(foreach xincdir,$(strip $(subst ;,$(SPACE),$(XINCDIRS))),-I$(xincdir)) >> $@
-endif	
-ifneq "$(strip $(INCDIRS))" ""
-	@echo $(foreach incdir,$(strip $(subst ;,$(SPACE),$(INCDIRS))),-I$(incdir)) >> $@
-endif
-ifneq "$(strip $(DEFINES))" "" 
-	@echo $(DEFINES) >> $@
-endif
-ifneq "$(strip $(XDEFINES))" "" 
-	@echo $(XDEFINES) >> $@
-endif
-
-#
-# Rules to build libraries
-#
-
-# If we only have one target library then build it
-
-ifeq "$(words $(strip $(TARGET_lib)))" "1"
-
-$(TARGET_lib) : $(OBJDIR)\$(LIB_NAME)_lib.lst
-	@echo Generating $@
-	$(CHK) $(OBJDIR)\$(@F) $(DEL) $(OBJDIR)\$(@F)
-	$(LIB) -o $(OBJDIR)\$(@F) @$?
-   
-$(OBJDIR)\$(LIB_NAME)_lib.lst: $($(LIB_NAME)_LIBLST_DEPENDS)
-	$(CHK) $@ $(DEL) $@
-	@echo Generating $@
-ifneq "$(strip $(FILES_lib_objs))" ""
-	@echo $(foreach objfile,$(FILES_lib_objs),$(subst /,\,$(objfile)) ) >> $@
-endif
-
-else # We must have more than one target library so load the individual makefiles
-
-$(OBJDIR)/%.lib: NWGNU% $(AP_WORK)\build\NWGNUhead.inc $(AP_WORK)\build\NWGNUtail.inc $(AP_WORK)\build\NWGNUenvironment.inc FORCE
-	@echo Calling $<
-	$(MAKE) -f $< $(MAKECMDGOALS) RELEASE=$(RELEASE)
-
-endif
-
-#
-# Rules to build nlms. 
-#
-
-vpath libcpre.o $(NOVELLLIBC)\imports
-
-# If we only have one target NLM then build it
-ifeq "$(words $(strip $(TARGET_nlm)))" "1"
-
-$(TARGET_nlm) : $(FILES_nlm_objs) $(FILES_nlm_libs) $(OBJDIR)\$(NLM_NAME)_link.opt
-	@echo Linking $@
-	$(LINK) @$(OBJDIR)\$(NLM_NAME)_link.opt
-
-# This will force the link option file to be rebuilt if we change the 
-# corresponding makefile
-
-$(OBJDIR)\$(NLM_NAME)_link.opt : $($(NLM_NAME)_LINKOPT_DEPENDS)
-	$(CHK) $(OBJDIR)\$(@F) $(DEL) $(OBJDIR)\$(@F)
-	$(CHK) $(OBJDIR)\$(NLM_NAME)_link.def $(DEL) $(OBJDIR)\$(NLM_NAME)_link.def
-	@echo Generating $@
-	@echo -warnings off >> $@
-	@echo -zerobss >> $@
-	@echo -desc "$(NLM_DESCRIPTION)" >> $@
-	@echo -o $(TARGET_nlm) >> $@
-ifneq "$(FILE_nlm_copyright)" ""
-	@-type $(FILE_nlm_copyright) >> $@
-endif
-ifeq "$(RELEASE)" "debug"
-	@echo -g >> $@
-	@echo -sym internal >> $@
-	@echo -sym codeview4 >> $@
-	@echo -osym $(OBJDIR)\$(NLM_NAME).sym >> $@
-else	
-	@echo -sym internal >> $@
-endif	
-	@echo -screenname "Apache for NetWare" >> $@ 
-ifneq "$(NLM_VERSION)" ""
-	@echo -nlmversion=$(NLM_VERSION) >> $@ 
-else
-	@echo -nlmversion=$(VERSION) >> $@
-endif
-	@echo -l $(NWOS) >> $@
-	@echo -l $(AP)/$(OBJDIR) >> $@
-	@echo -l $(APR)/$(OBJDIR) >> $@
-	@echo -l $(APRUTIL)/$(OBJDIR) >> $@
-	@echo -l $(PCRE)/$(OBJDIR) >> $@
-	@echo -l $(HTTPD)/$(OBJDIR) >> $@
-	@echo -l $(SERVER)/$(OBJDIR) >> $@
-	@echo -l $(STDMOD)/$(OBJDIR) >> $@
-	@echo -l $(NWOS)/$(OBJDIR) >> $@
-	@echo -l "$(METROWERKS)/Novell Support/Metrowerks Support/Libraries/Runtime" >> $@
-	@echo -l "$(METROWERKS)/Novell Support/Metrowerks Support/Libraries/MSL C++" >> $@
-	@echo -l $(NOVELLLIBC)/imports >> $@
-ifneq "$(LDAPSDK)" ""    
-	@echo -l $(LDAPSDK)/lib/nlm >> $@
-endif    
-	@echo -l $(XML)/$(OBJDIR) >> $@
-	@echo -nodefaults >> $@
-	@echo -map $(OBJDIR)\$(NLM_NAME).map>> $@
-	@echo -threadname "$(NLM_THREAD_NAME)" >> $@
-ifneq "$(NLM_STACK_SIZE)" ""
-	@echo -stacksize $(subst K,000,$(subst k,K,$(strip $(NLM_STACK_SIZE)))) >> $@
-else	
-	@echo -stacksize 64000 >> $@
-endif
-ifneq "$(NLM_ENTRY_SYM)" ""
-	@echo -entry $(NLM_ENTRY_SYM) >> $@
-endif
-ifneq "$(NLM_EXIT_SYM)" ""
-	@echo -exit $(NLM_EXIT_SYM) >> $@
-endif
-ifneq "$(NLM_CHECK_SYM)" ""
-	@echo -check $(NLM_CHECK_SYM) >> $@
-endif
-ifneq "$(NLM_FLAGS)" ""
-	@echo -flags $(NLM_FLAGS) >> $@
-endif
-ifneq "$(strip $(FILES_nlm_objs))" ""
-	@echo $(foreach objfile,$(strip $(FILES_nlm_objs)),$(subst /,\,$(objfile))) >> $@
-endif
-ifneq "$(FILES_nlm_libs)" ""
-	@echo $(foreach libfile, $(notdir $(strip $(FILES_nlm_libs))),-l$(subst /,\,$(libfile))) >> $@
-endif
-	@echo -commandfile $(OBJDIR)\$(NLM_NAME)_link.def >> $@
-ifneq "$(FILE_nlm_msg)" ""
-	@echo Messages $(FILE_nlm_msg) >> $(OBJDIR)\$(NLM_NAME)_link.def
-endif
-ifneq "$(FILE_nlm_hlp)" ""
-	@echo Help $(FILE_nlm_hlp) >> $(OBJDIR)\$(NLM_NAME)_link.def
-endif
-ifneq "$(FILES_nlm_modules)" ""
-	@echo module $(foreach module,$(subst $(SPACE),$(COMMA),$(strip $(FILES_nlm_modules))),$(subst /,\,$(module))) >> $(OBJDIR)\$(NLM_NAME)_link.def
-endif
-ifneq "$(FILES_nlm_Ximports)" ""
-	@echo Import $(foreach import,$(subst $(SPACE),$(COMMA),$(strip $(FILES_nlm_Ximports))),$(subst /,\,$(import))) >> $(OBJDIR)\$(NLM_NAME)_link.def
-endif	
-ifneq "$(FILES_nlm_exports)" ""
-	@echo Export $(foreach export,$(subst $(SPACE),$(COMMA),$(strip $(FILES_nlm_exports))),$(subst /,\,$(export))) >> $(OBJDIR)\$(NLM_NAME)_link.def
-endif	
-ifneq "$(strip $(XLFLAGS))" ""
-	@echo $(XLFLAGS) >> $(OBJDIR)\$(NLM_NAME)_link.def
-endif
-
-# if APACHE_UNIPROC is defined, don't include XDCData
-ifndef APACHE_UNIPROC
-ifneq "$(string $(XDCDATA))" ""
-	@echo XDCData $(XDCDATA) >> $(OBJDIR)\$(NLM_NAME)_link.def
-else
-	@echo XDCData $(NWOS)\apache.xdc >> $(OBJDIR)\$(NLM_NAME)_link.def
-endif
-endif
-
-else # more than one target so look for individual makefiles.
-
-# Only include these if NO_LICENSE_FILE isn't set to prevent excessive 
-# recursion
-
-ifndef NO_LICENSE_FILE
-
-$(OBJDIR)/%.nlm: NWGNU% $(AP_WORK)\build\NWGNUhead.inc $(AP_WORK)\build\NWGNUtail.inc $(AP_WORK)\build\NWGNUenvironment.inc $(CUSTOM_INI) FORCE
-	@echo Calling $<
-	$(MAKE) -f $< $(MAKECMDGOALS) RELEASE=$(RELEASE)
-	$(CMD) echo.
-
-else
-
-$(TARGET_nlm):
-
-endif # NO_LICENSE_FILE
-
-endif
-
diff --git a/build/binbuild.sh b/build/binbuild.sh
deleted file mode 100755
index 2c3d23a..0000000
--- a/build/binbuild.sh
+++ /dev/null
@@ -1,186 +0,0 @@
-#!/bin/sh
-#
-# binbuild.sh - Builds an Apache binary distribution.
-# Initially written by Lars Eilebrecht <lars@apache.org>.
-#
-# This script falls under the Apache License.
-# See http://www.apache.org/docs/LICENSE
-
-OS=`./srclib/apr/build/config.guess`
-BUILD_DIR="`pwd`/bindist"
-DEFAULT_DIR="/usr/local/apache2"
-APDIR=`pwd`
-APDIR=`basename $APDIR`
-APFULLDIR=`pwd`
-CONFIGPARAM="--with-layout=BinaryDistribution --prefix=$BUILD_DIR --enable-mods-shared=most --with-expat=$APFULLDIR/srclib/apr-util/xml/expat --enable-static-support"
-VER=`echo $APDIR |sed s/httpd-//`
-TAR="`srclib/apr/build/PrintPath tar`"
-GTAR="`srclib/apr/build/PrintPath gtar`"
-GZIP="`srclib/apr/build/PrintPath gzip`"
-
-if [ x$1 != x ]; then
-  USER=$1
-else
-  USER="`build/buildinfo.sh -n %u@%h%d`"
-fi
-
-if [ ! -f ./ABOUT_APACHE ]
-then
-  echo "ERROR: The current directory contains no valid Apache distribution."
-  echo "Please change the directory to the top level directory of a freshly"
-  echo "unpacked Apache 2.0 source distribution and re-execute the script"
-  echo "'./build/binbuild.sh'." 
-  exit 1;
-fi
-
-if [ -d ./CVS ]
-then
-  echo "ERROR: The current directory is a CVS checkout of Apache."
-  echo "Only a standard Apache 2.0 source distribution should be used to"
-  echo "create a binary distribution."
-  exit 1;
-fi
-
-echo "Building Apache $VER binary distribution..."
-echo "Platform is \"$OS\"..."
-
-( echo "Build log for Apache binary distribution" && \
-  echo "----------------------------------------------------------------------" && \
-  ./configure $CONFIGPARAM && \
-  echo "----------------------------------------------------------------------" && \
-  make clean && \
-  rm -rf bindist install-bindist.sh *.bindist
-  echo "----------------------------------------------------------------------" && \
-  make && \
-  echo "----------------------------------------------------------------------" && \
-  make install root="bindist/" && \
-  echo "----------------------------------------------------------------------" && \
-  make clean && \
-  echo "----------------------------------------------------------------------" && \
-  echo "[EOF]" \
-) 2>&1 | tee build.log
-
-if [ ! -f ./bindist/bin/httpd ]
-then
-  echo "ERROR: Failed to build Apache. See \"build.log\" for details."
-  exit 1;
-fi
-
-echo "Binary image successfully created..."
-
-./bindist/bin/httpd -v
-
-echo "Creating supplementary files..."
-
-( echo " " && \
-  echo "Apache $VER binary distribution" && \
-  echo "================================" && \
-  echo " " && \
-  echo "This binary distribution is usable on a \"$OS\"" && \
-  echo "system and was built by \"$USER\"." && \
-  echo "" && \
-  echo "The distribution contains all standard Apache modules as shared" && \
-  echo "objects. This allows you to enable or disable particular modules" && \
-  echo "with the LoadModule/AddModule directives in the configuration file" && \
-  echo "without the need to re-compile Apache." && \
-  echo "" && \
-  echo "See \"INSTALL.bindist\" on how to install the distribution." && \
-  echo " " && \
-  echo "NOTE: Please do not send support-related mails to the address mentioned" && \
-  echo "      above or to any member of the Apache Group! Support questions" && \
-  echo "      should be directed to the \"comp.infosystems.www.servers.unix\"" && \
-  echo "      or \"comp.infosystems.www.servers.ms-windows\" newsgroup" && \
-  echo "      (as appropriate for the platform you use), where some of the" && \
-  echo "      Apache team lurk, in the company of many other Apache gurus" && \
-  echo "      who should be able to help." && \
-  echo "      If you think you found a bug in Apache or have a suggestion please" && \
-  echo "      visit the bug report page at http://www.apache.org/bug_report.html" && \
-  echo " " && \
-  echo "----------------------------------------------------------------------" && \
-  ./bindist/bin/httpd -V && \
-  echo "----------------------------------------------------------------------" \
-) > README.bindist
-cp README.bindist ../httpd-$VER-$OS.README
-
-( echo " " && \
-  echo "Apache $VER binary installation" && \
-  echo "================================" && \
-  echo " " && \
-  echo "To install this binary distribution you have to execute the installation" && \
-  echo "script \"install-bindist.sh\" in the top-level directory of the distribution." && \
-  echo " " && \
-  echo "The script takes the ServerRoot directory into which you want to install" && \
-  echo "Apache as an option. If you omit the option the default path" && \
-  echo "\"$DEFAULT_DIR\" is used." && \
-  echo "Make sure you have write permissions in the target directory, e.g. switch" && \
-  echo "to user \"root\" before you execute the script." && \
-  echo " " && \
-  echo "See \"README.bindist\" for further details about this distribution." && \
-  echo " " && \
-  echo "Please note that this distribution includes the complete Apache source code." && \
-  echo "Therefore you may compile Apache yourself at any time if you have a compiler" && \
-  echo "installation on your system." && \
-  echo "See \"INSTALL\" for details on how to accomplish this." && \
-  echo " " \
-) > INSTALL.bindist
-
-sed -e "s%\@default_dir\@%$DEFAULT_DIR%" \
-    -e "s%\@ver\@%$VER%" \
-    -e "s%\@os\@%$OS%" \
-    build/install-bindist.sh.in > install-bindist.sh
-    
-chmod 755 install-bindist.sh
-
-sed -e "s%$BUILD_DIR%$DEFAULT_DIR%" \
-    -e "s%^ServerAdmin.*%ServerAdmin you@your.address%" \
-    -e "s%#ServerName.*%#ServerName localhost%" \
-    bindist/conf/httpd-std.conf > bindist/conf/httpd.conf
-cp bindist/conf/httpd.conf bindist/conf/httpd-std.conf
-
-for one_file in apachectl envvars envvars-std; do
-    sed -e "s%$BUILD_DIR%$DEFAULT_DIR%" \
-        -e "s%^#binbuild %%" \
-        bindist/bin/$one_file > bindist/bin/$one_file.tmp
-    mv bindist/bin/$one_file.tmp bindist/bin/$one_file
-done
-
-echo "Creating distribution archive and readme file..."
- 
-if [ ".`grep -i error build.log > /dev/null`" != . ]
-then
-  echo "ERROR: Failed to build Apache. See \"build.log\" for details."
-  exit 1;
-else
-  if [ "x$GTAR" != "x" ]
-  then
-    $GTAR -zcf ../httpd-$VER-$OS.tar.gz -C .. httpd-$VER
-  else
-    if [ "x$TAR" != "x" ]
-    then
-      case "x$OS" in
-        x*390*) $TAR -cfU ../httpd-$VER-$OS.tar -C .. httpd-$VER;;
-	    *) (cd .. && $TAR -cf httpd-$VER-$OS.tar httpd-$VER);;
-      esac
-      if [ "x$GZIP" != "x" ]
-      then
-        $GZIP ../httpd-$VER-$OS.tar
-      fi
-    else
-      echo "ERROR: Could not find a 'tar' program!"
-      echo "       Please execute the following commands manually:"
-      echo "         tar -cf ../httpd-$VER-$OS.tar ."
-      echo "         gzip ../httpd-$VER-$OS.tar"
-    fi
-  fi
-
-  if [ -f ../httpd-$VER-$OS.tar.gz ] && [ -f ../httpd-$VER-$OS.README ]
-  then
-    echo "Ready."
-    echo "You can find the binary archive (httpd-$VER-$OS.tar.gz)"
-    echo "and the readme file (httpd-$VER-$OS.README) in the"
-    echo "parent directory."
-    exit 0;
-  else
-    exit 1;
-  fi
-fi
diff --git a/build/bsd_makefile b/build/bsd_makefile
deleted file mode 100755
index 34fb1de..0000000
--- a/build/bsd_makefile
+++ /dev/null
@@ -1,71 +0,0 @@
-#! /bin/sh
-# ====================================================================
-# The Apache Software License, Version 1.1
-#
-# Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
-# reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# 1. Redistributions of source code must retain the above copyright
-#    notice, this list of conditions and the following disclaimer.
-#
-# 2. Redistributions in binary form must reproduce the above copyright
-#    notice, this list of conditions and the following disclaimer in
-#    the documentation and/or other materials provided with the
-#    distribution.
-#
-# 3. The end-user documentation included with the redistribution,
-#    if any, must include the following acknowledgment:
-#       "This product includes software developed by the
-#        Apache Software Foundation (http://www.apache.org/)."
-#    Alternately, this acknowledgment may appear in the software itself,
-#    if and wherever such third-party acknowledgments normally appear.
-#
-# 4. The names "Apache" and "Apache Software Foundation" must
-#    not be used to endorse or promote products derived from this
-#    software without prior written permission. For written
-#    permission, please contact apache@apache.org.
-#
-# 5. Products derived from this software may not be called "Apache",
-#    nor may "Apache" appear in their name, without prior written
-#    permission of the Apache Software Foundation.
-#
-# THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
-# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-# DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
-# ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
-# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
-# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-# SUCH DAMAGE.
-# ====================================================================
-#
-# This software consists of voluntary contributions made by many
-# individuals on behalf of the Apache Software Foundation.  For more
-# information on the Apache Software Foundation, please see
-# <http://www.apache.org/>.
-#
-# The build environment was provided by Sascha Schumann.
-#
-
-# cwd must be top_srcdir
-test -f build/bsd_makefile || exit 2
-
-test -f bsd_converted && exit 0
-
-tmpfile=`mktemp /tmp/bsd_makefile.XXXXXX 2>/dev/null` || tmpfile="tmp.$$"
-for i in build/*.mk; do
-    sed 's/^include \(.*\)/.include "\1"/' $i >$tmpfile \
-        && cp $tmpfile $i
-done
-rm -f $tmpfile
-
-touch bsd_converted
-exit 0
diff --git a/build/build-modules-c.awk b/build/build-modules-c.awk
deleted file mode 100644
index a44571f..0000000
--- a/build/build-modules-c.awk
+++ /dev/null
@@ -1,56 +0,0 @@
-BEGIN {
-    RS = " "
-    modules[n++] = "core"
-    pmodules[pn++] = "core"
-} 
-{
-    modules[n] = $1;
-    pmodules[pn] = $1;
-    gsub("\n","",modules[n]);
-    gsub("\n","",pmodules[pn]);
-    ++n;
-    ++pn;
-} 
-END {
-    print "/*"
-    print " * modules.c --- automatically generated by Apache"
-    print " * configuration script.  DO NOT HAND EDIT!!!!!"
-    print " */"
-    print ""
-    print "#include \"ap_config.h\""
-    print "#include \"httpd.h\""
-    print "#include \"http_config.h\""
-    print ""
-    for (i = 0; i < pn; ++i) {
-        printf ("extern module %s_module;\n", pmodules[i])
-    }
-    print ""
-    print "/*"
-    print " *  Modules which implicitly form the"
-    print " *  list of activated modules on startup,"
-    print " *  i.e. these are the modules which are"
-    print " *  initially linked into the Apache processing"
-    print " *  [extendable under run-time via AddModule]"
-    print " */"
-    print "module *ap_prelinked_modules[] = {"
-    for (i = 0 ; i < n; ++i) {
-        printf "  &%s_module,\n", modules[i]
-    }
-    print "  NULL"
-    print "};"
-    print ""
-    print "/*"
-    print " *  Modules which initially form the"
-    print " *  list of available modules on startup,"
-    print " *  i.e. these are the modules which are"
-    print " *  initially loaded into the Apache process"
-    print " *  [extendable under run-time via LoadModule]"
-    print " */"
-    print "module *ap_preloaded_modules[] = {"
-    for (i = 0; i < pn; ++i) {
-        printf "  &%s_module,\n", pmodules[i]
-    }
-    print "  NULL"
-    print "};"
-    print ""
-}
diff --git a/build/buildinfo.sh b/build/buildinfo.sh
deleted file mode 100755
index 5c2a72d..0000000
--- a/build/buildinfo.sh
+++ /dev/null
@@ -1,160 +0,0 @@
-#!/bin/sh
-##
-##  buildinfo.sh -- Determine Build Information
-##  Initially written by Ralf S. Engelschall <rse@apache.org>
-##  for the Apache's Autoconf-style Interface (APACI) 
-##
-#
-# This script falls under the Apache License.
-# See http://www.apache.org/docs/LICENSE
-
-
-#
-#   argument line handling
-#
-error=no
-if [ $# -ne 1 -a $# -ne 2 ]; then
-    error=yes
-fi
-if [ $# -eq 2 -a "x$1" != "x-n" ]; then
-    error=yes
-fi
-if [ "x$error" = "xyes" ]; then
-    echo "$0:Error: invalid argument line"
-    echo "$0:Usage: $0 [-n] <format-string>"
-    echo "Where <format-string> can contain:"
-    echo "   %u ...... substituted by determined username    (foo)"
-    echo "   %h ...... substituted by determined hostname    (bar)"
-    echo "   %d ...... substituted by determined domainname  (.com)"
-    echo "   %D ...... substituted by determined day         (DD)"
-    echo "   %M ...... substituted by determined month       (MM)"
-    echo "   %Y ...... substituted by determined year        (YYYYY)"
-    echo "   %m ...... substituted by determined monthname   (Jan)"
-    exit 1
-fi
-if [ $# -eq 2 ]; then
-    newline=no
-    format_string="$2"
-else
-    newline=yes
-    format_string="$1"
-fi
-
-#
-#   initialization
-#
-username=''
-hostname=''
-domainname=''
-time_day=''
-time_month=''
-time_year=''
-time_monthname=''
-
-#
-#   determine username
-#
-username="$LOGNAME"
-if [ "x$username" = "x" ]; then
-    username="$USER"
-    if [ "x$username" = "x" ]; then
-        username="`(whoami) 2>/dev/null |\
-                   awk '{ printf("%s", $1); }'`"
-        if [ "x$username" = "x" ]; then
-            username="`(who am i) 2>/dev/null |\
-                       awk '{ printf("%s", $1); }'`"
-            if [ "x$username" = "x" ]; then
-                username='unknown'
-            fi
-        fi
-    fi
-fi
-
-#
-#   determine hostname and domainname
-#
-hostname="`(uname -n) 2>/dev/null |\
-           awk '{ printf("%s", $1); }'`"
-if [ "x$hostname" = "x" ]; then
-    hostname="`(hostname) 2>/dev/null |\
-               awk '{ printf("%s", $1); }'`"
-    if [ "x$hostname" = "x" ]; then
-        hostname='unknown'
-    fi
-fi
-case $hostname in
-    *.* )
-        domainname=".`echo $hostname | cut -d. -f2-`"
-        hostname="`echo $hostname | cut -d. -f1`"
-        ;;
-esac
-if [ "x$domainname" = "x" ]; then
-    if [ -f /etc/resolv.conf ]; then
-        domainname="`egrep '^[ 	]*domain' /etc/resolv.conf | head -1 |\
-                     sed -e 's/.*domain//' \
-                         -e 's/^[ 	]*//' -e 's/^ *//' -e 's/^	*//' \
-                         -e 's/^\.//' -e 's/^/./' |\
-                     awk '{ printf("%s", $1); }'`"
-        if [ "x$domainname" = "x" ]; then
-            domainname="`egrep '^[ 	]*search' /etc/resolv.conf | head -1 |\
-                         sed -e 's/.*search//' \
-                             -e 's/^[ 	]*//' -e 's/^ *//' -e 's/^	*//' \
-                             -e 's/ .*//' -e 's/	.*//' \
-                             -e 's/^\.//' -e 's/^/./' |\
-                         awk '{ printf("%s", $1); }'`"
-        fi
-    fi
-fi
-
-#
-#   determine current time
-#
-time_day="`date '+%d' | awk '{ printf("%s", $1); }'`"
-time_month="`date '+%m' | awk '{ printf("%s", $1); }'`"
-time_year="`date '+%Y' 2>/dev/null | awk '{ printf("%s", $1); }'`"
-if [ "x$time_year" = "x" ]; then
-    time_year="`date '+%y' | awk '{ printf("%s", $1); }'`"
-    case $time_year in
-        [5-9][0-9]) time_year="19$time_year" ;;
-        [0-4][0-9]) time_year="20$time_year" ;;
-    esac
-fi
-case $time_month in
-    1|01) time_monthname='Jan' ;;
-    2|02) time_monthname='Feb' ;;
-    3|03) time_monthname='Mar' ;;
-    4|04) time_monthname='Apr' ;;
-    5|05) time_monthname='May' ;;
-    6|06) time_monthname='Jun' ;;
-    7|07) time_monthname='Jul' ;;
-    8|08) time_monthname='Aug' ;;
-    9|09) time_monthname='Sep' ;;
-      10) time_monthname='Oct' ;;
-      11) time_monthname='Nov' ;;
-      12) time_monthname='Dec' ;;
-esac
-
-#
-#   create result string
-#
-if [ "x$newline" = "xyes" ]; then
-    echo $format_string |\
-    sed -e "s;%u;$username;g" \
-        -e "s;%h;$hostname;g" \
-        -e "s;%d;$domainname;g" \
-        -e "s;%D;$time_day;g" \
-        -e "s;%M;$time_month;g" \
-        -e "s;%Y;$time_year;g" \
-        -e "s;%m;$time_monthname;g"
-else
-    echo "${format_string}&" |\
-    sed -e "s;%u;$username;g" \
-        -e "s;%h;$hostname;g" \
-        -e "s;%d;$domainname;g" \
-        -e "s;%D;$time_day;g" \
-        -e "s;%M;$time_month;g" \
-        -e "s;%Y;$time_year;g" \
-        -e "s;%m;$time_monthname;g" |\
-    awk '-F&' '{ printf("%s", $1); }'
-fi
-
diff --git a/build/config-stubs b/build/config-stubs
deleted file mode 100755
index 425dc80..0000000
--- a/build/config-stubs
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/bin/sh
-
-#
-# Find all config files (config*.m4) and map them into lines with the
-# form: NUM? '0' ' ' PATH
-#
-# For example:
-#
-#  50 ./modules/generators/config5.m4
-#  0 ./modules/aaa/config.m4
-#  10 ./example/config1.m4
-#
-# These lines are sorted, then the first field is removed. Thus, we
-# have a set of paths sorted on the config-number (if present). All
-# config files without a number are sorted before those with a number.
-#
-
-configfiles=`find . -name "config*.m4" | \
-	sed 's#\(.*/config\)\(.*\).m4#\20 \1\2.m4#' | \
-	sort | \
-	sed 's#.* ##'`
-
-for configfile in $configfiles; do
-    if [ -r $configfile ]; then
-        echo "sinclude($configfile)"
-    fi
-done
diff --git a/build/default.pl b/build/default.pl
deleted file mode 100644
index 4a73b77..0000000
--- a/build/default.pl
+++ /dev/null
@@ -1,496 +0,0 @@
-<<
-# Scandoc template file.
-#
-# This is an example set of templates that is designed to create several 
-# different kinds of index files. It generates a "master index" which intended 
-# for use with a frames browser; A "package index" which is the root page of 
-# the index, and then "package files" containing documentation for all of the 
-# classes within a single package.
-
-######################################################################
-
-## For quick and superficial customization, 
-## simply change these variables
-
-$project_name     = '[Apache]';
-$company_logo     = '<img src="../images/ScanDocBig.jpg">'; # change this to an image tag.
-$copyright        = '&copy 2000 [Apache Software Foundation]';
-$image_directory  = "../images/";
-$bullet1_image    = $image_directory . "ball1.gif";
-$bullet2_image    = $image_directory . "ball2.gif";
-$bgcolor1         = "#FFFFFF";
-$bgcolor2         = "#FFFFFF";
-
-######################################################################
-
-## Begin generating frame index file.
-
-file "index.html";
->><html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html; iso-8859-1">
-    <title>$project_name</title>
-  </head>
-  <frameset cols="190,*">
-    <frame src="master.html"  name="Master Index" noresize>
-    <frame src="packages.html" name="Documentation">
-    <noframes>
-      <body bgcolor="$bgcolor2" stylesrc="index.html">
-        <p>Some Documentation</p>
-      </body>
-    </noframes>
-  </frameset>
-</html>
-<<
-
-######################################################################
-
-## Begin generating master index file (left-hand frame).
-
-file "master.html";
->><html>
-  <head>
-    <title>Master Index</title>
-  </head>
-  <body bgcolor="$bgcolor1" text=#0000ff link=#0020ff vlink=#0020ff>
-    <center><img src="${image_directory}ScanDocSmall.jpg" border="0" /></center>
-    <p>
-    <a href="packages.html" target="Documentation">Master Index</a>
-    </p>
-    <p>
-      <font size="2">
-        <nobr>
-<<
-
-## For each package, generate an index entry.
-
-foreach $p (packages()) {
-  $_ = $p->url;
-  s/\s/%20/g;
-  >><a href="$_" target="Documentation"><b>$(p.name)</b></a><br>
-    <dir>
-  <<
-  foreach $e ($p->classes()) {
-    $_ = $e->url;
-    s/\s/%20/g;
-    >><li><a href="$_" target="Documentation">$(e.fullname)</a>
-    <<
-  }
-  foreach $e ($p->globals()) {
-    $_ = $e->url;
-    s/\s/%20/g;
-    >><li><a href="$_" target="Documentation">$(e.fullname)</a>
-    <<
-  }
-  >></dir><<
-}
-
->>
-          <a href="to-do.html" target="Documentation"><b>To-Do List</b></a><br>
-        </nobr>
-      </font>
-    </p>
-  </body>
-</html>
-<<
-
-######################################################################
-
-## Begin generating package index file
-
-file "packages.html";
->><html>
-  <head>
-    <title>$project_name -- Packages</title>
-  </head>
-  <body bgcolor="$bgcolor2">
-
-    <center>$company_logo
-    <h1>Documentation for $project_name</h1>
-    </center>
-    <h2>Package List</h2>
-<<
-
-## For each package, generate an index entry.
-
-foreach $p (packages()) {
-  $_ = $p->url;
-  s/\s/%20/g;
-  >><a href = "$_">$(p.name)</a><br>
-  <<
-}
-
->>
-    <p>
-    <hr size=4>
-    $copyright<br>
-    Generated by <a href="$scandocURL"><b>ScanDoc $majorVersion.$minorVersion</b></a><br>
-    Last Updated: $date<br>
-  </body>
-</html>
-
-<<
-
-######################################################################
-
-## Generate "To-do list"
-
-file "to-do.html";
->><html>
-  <head>
-    <title>$project_name -- To-Do list</title>
-  </head>
-  <body bgcolor="$bgcolor2">
-
-    $company_logo
-
-    <h1>To-do list for $project_name</h1>
-<<
-
-if (&todolistFiles()) {
-  >><hr size=4><p>
-  <<
-  foreach $f (&todolistFiles()) {
-    my @m = &todolistEntries( $f );
-    if ($f =~ /([^\/]+)$/) { $f = $1; }
-    >><b>$f:</b><ul>
-    <<
-    foreach $text (@m) {
-      if ($text) {
-        print "<li>", &processDescription( $text ), "\n";
-      }
-    }
-    >></ul>
-    <<
-  }
-}
-
->>
-    <hr size=4>
-    $copyright<br>
-    Generated by <a href="$scandocURL"><b>ScanDoc $majorVersion.$minorVersion</b></a><br>
-    Last Updated: $date<br>
-  </body>
-</html>
-<<
-
-######################################################################
-
-## Generate individual files for each package.
-
-my $p;
-foreach $p (packages()) {
-  file $p->name() . ".html";
-  >><html>
-  <head>
-    <title>$project_name -- $(p.name)</title>
-  </head>
-  <body bgcolor="$bgcolor2">
-    <center>
-      <font size=6><b>$project_name</b></font>
-      <hr size=4><p>
-    </center>
-
-    <h2>Package Name: $(p.name)</h2>
-    <b>
-<<
-
-## Generate class and member index at the top of the file.
-
-foreach $c ($p->classes()) {
-  >><h3><img src="$bullet1_image" width=18 height=17 align=texttop>
-    <a href="$(c.url)">$(c.fullname)</h3></a>
-    <ul>
-  <<
-  foreach $m ($c->members()) {
-    >><li><a href="$(m.url)">$(m.longname)</a>
-    <<
-  }
-  >></ul>
-  <<
-}
-
->>
-</b>
-<<
-
-## Generate detailed class documentation
-foreach $c ($p->classes()) {
- ## Output searchable keyword list
- if ($c->keywords()) {
-   print "<!-- ", $c->keywords(), " -->\n";
- }
-
- >><hr size="4">
-   <a name="$(c.anchor)"></a>
-   <h1>$(c.fullname)</h1>
-   <table bgcolor="ffffff" border="0" cellspacing="4">
-     <tr>
-       <th align=center colspan=2>
-       </th>
-     </tr>
-  <<
-  
-  # Output author tag
-  if ($c->author()) {
-    >><tr><th width=20% align=right>Author:</th><<
-    >><td>$(c.author)</td></tr><<
-  }
-
-  # Output package version
-  if ($c->version()) {
-    >><tr><th width=20% align=right>Version:</th><<
-    >><td>$(c.version)</td></tr><<
-  }
-
-  # Output Source file
-  if ($c->sourcefile()) {
-    >><tr><th width=20% align=right>Source:</th><<
-    >><td>$(c.sourcefile)</td></tr><<
-  }
-
-  # Output base class list
-  if ($c->baseclasses()) {
-    >><tr><th width=20% align=right>Base classes:</th>
-    <td><<
-    my @t = ();
-    foreach $b ($c->baseclasses()) {
-      my $name = $b->name();
-      if ($url = $b->url()) {
-        push @t, "<a href=\"$url\">$name</a>";
-      }
-      else { push @t, $name; }
-    }
-    print join( ', ', @t );
-    >></td></tr>
-    <<
-  }	
-
-  # Output subclasses list
-  if ($c->subclasses()) {
-    >><tr><th width=20% align=right>Subclasses:</th>
-      <td><<
-    my @t = ();
-    foreach $s ($c->subclasses()) {
-      my $name = $s->name();
-      if ($url = $s->url()) {
-        push @t, "<a href=\"$url\">$name</a>";
-      }
-      else { push @t, $name; }
-    }
-    print join( ', ', @t );
-    >></td></tr><<
-  }
-
-  # Output main class description
-  >></tr>
-  </table>
-  <p>
-  <<
-  print &processDescription( $c->description() );
-	
-  # Output "see also" information
-  if ($c->seealso()) {
-    >><p><dt><b>See Also</b><dd>
-    <<
-    my @r = ();
-    foreach $a ($c->seealso()) {
-      my $name = $a->name();
-      if ($url = $a->url()) {
-        push @r, "<a href=\"$url\">$name</a>";
-      }
-      else { push @r, $name; }
-    }
-    print join( ',', @r );
-    >><p>
-    <<
-  }
-
-  # Output class member index
-  if ($c->members()) {
-    print "<h2>Member Index</h2>\n";
-    print "<ul>";
-    foreach $m ($c->members()) {
-      >><li><a href="$(m.url)">$(m.fullname)</a>
-	<<
-    }
-    >></ul><<
-  }
- 
-  # Output class member variable documentation
-  if ($c->membervars()) {
-    print "<h2>Class Variables</h2>\n";
-    print "<blockquote>\n";
-    foreach $m ($c->membervars()) { &variable( $m ); }
-    print "</blockquote>\n";
-  }
-
-  # Output class member function documentation
-  if ($c->memberfuncs()) {
-    print "<h2>Class Methods</h2>\n";
-    print "<blockquote>\n";
-    foreach $m ($c->memberfuncs()) { &function( $m ); }
-    print "</blockquote>\n";
-  }
-}
-
-# Output global variables
-if ($p->globalvars()) {
-  >><h2>Global Variables</h2>
-    <blockquote>
-  <<
-  foreach $m ($p->globalvars()) { &variable( $m ); }
-  print "</blockquote>\n";
-}
-
-# Output global functions
-if ($p->globalfuncs()) {
-  >><h2>Global Functions</h2>
-    <blockquote>
-  <<
-  foreach $m ($p->globalfuncs()) { &function( $m ); }
-  print "</blockquote>\n";
-}
-
->>
-    <hr size=4>
-    $copyright<br>
-    Generated by <a href="$scandocURL"><b>ScanDoc $majorVersion.$minorVersion</b></a><br>
-    Last Updated: $date<br>
-  </body>
-</html>
-<<
-} # end of foreach (packages) loop
-
-######################################################################
-
-## Subroutine to generate documentation for a member function or global function
-
-sub function {
-  local ($f) = @_;
-  
-  if ($f->keywords()) {
-    >><!-- $(f.keywords) -->
-      <<
-  }
-  >>
-  <a name="$(f.anchor)"></a>
-  <dl>
-    <dt>
-     <b><img src="$bullet2_image" width=19 height=17 align=texttop>$(f.fullname);</b>
-    <dd>
-  <<
-  print &processDescription( $f->description() );
-  >>
-  <p><dl>
-  <<
-  if ($f->params()) {
-    >>
-      <dt><b>Parameters</b><dd>
-	<table width="85%">
-    <<
-    foreach $a ($f->params()) {
-      >><tr valign=top><th align=right>
-	$(a.name)</th><td><<
-      print &processDescription( $a->description() );
-      >></td></tr>
-      <<
-    }
-    >></table>
-      <<
-  }
-	
-  if ($f->returnValue()) {
-    >><dt><b>Return Value</b>
-      <dd><<
-    print &processDescription( $f->returnValue() );
-    >><p><<
-  }
-  
-  if ($f->exceptions()) {
-    >><dt><b>Exceptions</b><dd>
-      <table width=85%><tr><td colspan=2><hr size=3></td></tr>
-    <<
-    foreach $a ($f->exceptions()) {
-      >><tr valign=top><th align=right>
-	$(a.name)</th><td><<
-	  print &processDescription( $a->description() );
-      >></td></tr>
-      <<
-    }
-    >><tr><td colspan=2><hr size=3></td></tr></table>
-    <<
-  }
-	
-  if ($f->seealso()) {
-    >><dt><b>See Also</b><dd>
-      <<
-    my @r = ();
-    foreach $a ($f->seealso()) {
-      my $name = $a->name();
-      if ($url = $a->url()) {
-	push @r, "<a href=\"$url\">$name</a>";
-      }
-      else { push @r, $name; }
-    }
-    print join( ',', @r );
-    >><p><<
-  }
-  >></dl></dl>
-  <<
-}
-
-######################################################################
-
-## Subroutine to generate documentation for a member variable or global variable.
-
-sub variable {
-  local ($v) = @_;
-  
-  if ($v->keywords()) {
-    print "<!-- $(v.keywords) -->";
-  }
-
-  >>
-    <a name="$(v.name)"></a>
-      <dl><dt>
-	<b><img src="$bullet2_image" width=19 height=17 align=texttop>$(v.fullname);</b>
-  <dd>
-  <<print &processDescription( $v->description() );>>
-  <p><dl>
-  <<
-  if ($v->seealso()) {
-    >><dt><b>See Also</b><dd>
-      <<
-	$comma = 0;
-    foreach $a ($v->seealso()) {
-      if ($comma) { print ","; }
-      $comma = 1;
-      >><a href="$(a.url)">$(a.name)</a>
-	<<
-    }
-    >><p>
-    <<
-  }
-  >></dl></dl>
-  <<
-}
-
-######################################################################
-
-sub processDescription {
-  local ($_) = @_;
-  
-  s/^\s+//;				# Remove whitespace from beginning
-  s/\s+$/\n/;				# Remove whitespace from end
-  s/\n\n/<p>\n/g;			# Replace multiple CR's with paragraph markers
-  s:\@heading(.*)\n:<p><h2>$1</h2>:;	# Handle heading text
-  
-  # Handle embedded image tags
-  s:\@caution:<p><img src=\"${image_directory}/caution.gif\" align=left>:;
-  s:\@warning:<p><img src=\"${image_directory}/warning.gif\" align=left>:;
-  s:\@bug:<p><img src=\"${image_directory}/bug.gif\">:;
-  s:\@tip:<p><img src=\"${image_directory}/tip.gif\">:;
-
-  return $_;
-}
diff --git a/build/fastgen.sh b/build/fastgen.sh
deleted file mode 100755
index 3a2bf69..0000000
--- a/build/fastgen.sh
+++ /dev/null
@@ -1,112 +0,0 @@
-#! /bin/sh
-# ====================================================================
-# The Apache Software License, Version 1.1
-#
-# Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
-# reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# 1. Redistributions of source code must retain the above copyright
-#    notice, this list of conditions and the following disclaimer.
-#
-# 2. Redistributions in binary form must reproduce the above copyright
-#    notice, this list of conditions and the following disclaimer in
-#    the documentation and/or other materials provided with the
-#    distribution.
-#
-# 3. The end-user documentation included with the redistribution,
-#    if any, must include the following acknowledgment:
-#       "This product includes software developed by the
-#        Apache Software Foundation (http://www.apache.org/)."
-#    Alternately, this acknowledgment may appear in the software itself,
-#    if and wherever such third-party acknowledgments normally appear.
-#
-# 4. The names "Apache" and "Apache Software Foundation" must
-#    not be used to endorse or promote products derived from this
-#    software without prior written permission. For written
-#    permission, please contact apache@apache.org.
-#
-# 5. Products derived from this software may not be called "Apache",
-#    nor may "Apache" appear in their name, without prior written
-#    permission of the Apache Software Foundation.
-#
-# THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
-# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-# DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
-# ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
-# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
-# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-# SUCH DAMAGE.
-# ====================================================================
-#
-# This software consists of voluntary contributions made by many
-# individuals on behalf of the Apache Software Foundation.  For more
-# information on the Apache Software Foundation, please see
-# <http://www.apache.org/>.
-#
-# The build environment was provided by Sascha Schumann.
-#
-
-srcdir=$1
-shift
-
-mkdir_p=$1
-shift
-
-bsd_makefile=$1
-shift
-
-top_srcdir=`(cd $srcdir; pwd)`
-top_builddir=`pwd`
-
-if test "$mkdir_p" = "yes"; then
-  mkdir_p="mkdir -p"
-else
-  mkdir_p="$top_srcdir/build/mkdir.sh"
-fi
-
-if test "$bsd_makefile" = "yes"; then
-  (cd $top_srcdir; ./build/bsd_makefile)  
-
-  for makefile in $@; do
-    echo "creating $makefile"
-    dir=`echo $makefile|sed 's%/*[^/][^/]*$%%'`
-    $mkdir_p "$dir/"
-
-    cat - $top_srcdir/$makefile.in <<EOF |sed 's/^include \(.*\)/.include "\1"/' >$makefile 
-top_srcdir   = $top_srcdir
-top_builddir = $top_builddir
-srcdir       = $top_srcdir/$dir
-builddir     = $top_builddir/$dir
-VPATH        = $top_srcdir/$dir
-EOF
-    
-    test -z "$dir" && dir="."
-    touch $dir/.deps
-  done
-else  
-  for makefile in $@; do
-    echo "creating $makefile"
-    dir=`echo $makefile|sed 's%/*[^/][^/]*$%%'`
-    $mkdir_p "$dir/"
-
-    cat - $top_srcdir/$makefile.in <<EOF >$makefile
-top_srcdir   = $top_srcdir
-top_builddir = $top_builddir
-srcdir       = $top_srcdir/$dir
-builddir     = $top_builddir/$dir
-VPATH        = $top_srcdir/$dir
-EOF
-  
-    test -z "$dir" && dir="."
-    touch $dir/.deps
-  done
-fi
diff --git a/build/httpd_roll_release b/build/httpd_roll_release
deleted file mode 100755
index b721f3f..0000000
--- a/build/httpd_roll_release
+++ /dev/null
@@ -1,111 +0,0 @@
-#!/bin/sh
-
-if [ "x$1" = "xhelp" -o "x$2" = "x" ]; then
-    echo "Usage:  ./httpd_roll_release tag log_name [user]"
-    echo "tag        the tag to use when checking out the repository"
-    echo "log_name   the name of a file to log the results to."
-    echo "user       An optional user name to use when siging the release"
-    exit
-else
-    TAG=$1
-fi
-
-LOG_NAME=`pwd`/$2
-
-USER=$3
-
-REPO="httpd-2.0"
-WORKING_DIR=`echo "$REPO" | sed -e 's/[\-\.]/_/g'`
-WORKING_TAG=`echo "$TAG" | sed -e 's/APACHE_2_0_/_/'`
-WORKING_DIR="$WORKING_DIR$WORKING_TAG"
-
-START_DIR=`echo "$PWD"`
-
-# Check out the correct repositories.
-echo "Checking out repository $REPO into $WORKING_DIR using tag $TAG"
-
-umask 022
-echo Checking out httpd-2.0 > $LOG_NAME
-cvs checkout -r $TAG -d $WORKING_DIR $REPO >> $LOG_NAME
-cd $WORKING_DIR/srclib
-echo "Checking out apr and apr-util" >> $LOG_NAME
-cvs checkout -r $TAG apr apr-util >> $LOG_NAME
-cd $START_DIR/$WORKING_DIR
-
-# Make sure the master site's FAQ is up-to-date.  It doesn't hurt to do this
-# all the time.  :-)
-echo "Updating the site's FAQ"
-(cd /www/httpd.apache.org/docs-2.0/faq/; cvs update)
-
-# Now update the FAQ in the tarball via a download from the master site.
-# The FAQ contains SSI tags too complex for the expand.pl script to handle.
-rm -f docs/manual/faq/*.html
-links -source http://httpd.apache.org/docs-2.0/faq/index.html?ONEPAGE \
-              > docs/manual/faq/index.html
-
-# Create the configure scripts
-echo "Creating the configure script"
-cd $START_DIR/$WORKING_DIR
-
-echo >> $LOG_NAME
-echo "Running ./buildconf" >> $LOG_NAME
-./buildconf >> $LOG_NAME
-
-# Remove any files we don't distribute with our code
-rm -f STATUS
-
-echo >> $LOG_NAME
-echo "Removing files that we don't distribute" >> $LOG_NAME
-find . -name ".cvsignore" -exec rm {} \; >> $LOG_NAME 
-find . -type d -name "CVS" | xargs rm -rf >> $LOG_NAME
-
-# expand SSI directives in the manual
-echo "Making sure people can read the manual (expanding SSI's)"
-
-echo >> $LOG_NAME
-echo "Making sure people can read the manual (expanding SSI's)" >> $LOG_NAME
-( cd docs/manual ; chmod +x expand.pl ; ./expand.pl ; rm ./expand.pl ) >> $LOG_NAME
-
-# Time to roll the tarball
-echo "Rolling the tarballs"
-
-cd $START_DIR
-echo >> $LOG_NAME
-echo "Rolling the tarball" >> $LOG_NAME
-tar cvf $WORKING_DIR-alpha.tar $WORKING_DIR >> $LOG_NAME
-cp -p $WORKING_DIR-alpha.tar x$WORKING_DIR-alpha.tar
-gzip -9 $WORKING_DIR-alpha.tar
-mv x$WORKING_DIR-alpha.tar $WORKING_DIR-alpha.tar
-compress $WORKING_DIR-alpha.tar
-
-# Test the tarballs
-echo "Testing the tarball"
-
-echo >> $LOG_NAME
-echo "Testing the tarball $WORKING_DIR-alpha.tar.gz" >> $LOG_NAME
-gunzip -c $WORKING_DIR-alpha.tar.gz | tar tvf - >> $LOG_NAME
-zcat $WORKING_DIR-alpha.tar.Z | tar tvf - >> $LOG_NAME
-
-# remember the CHANGES file
-echo "Copying the CHANGES file to this directory"
-cp $WORKING_DIR/CHANGES .
-
-# cleanup
-echo "Cleaning up my workspace"
-rm -fr $WORKING_DIR
-
-if [ "x$USER" != "x" ]; then
-    USER="-u $USER"
-fi
-
-echo Signing the tarballs
-
-echo "Signing the tarballs" >> $LOG_NAME
-pgp -sba $WORKING_DIR-alpha.tar.gz $USER
-pgp -sba $WORKING_DIR-alpha.tar.Z $USER
-
-pgp $WORKING_DIR-alpha.tar.gz.asc $WORKING_DIR-alpha.tar.gz >> $LOG_NAME
-pgp $WORKING_DIR-alpha.tar.Z.asc $WORKING_DIR-alpha.tar.Z >> $LOG_NAME
-
-echo "Don't forget to make the tarballs available by copying them to the"
-echo "/www/dev.apache.org/dist directory."
diff --git a/build/install-bindist.sh.in b/build/install-bindist.sh.in
deleted file mode 100755
index 673c933..0000000
--- a/build/install-bindist.sh.in
+++ /dev/null
@@ -1,151 +0,0 @@
-#!/bin/sh
-#
-# Usage: install-bindist.sh [ServerRoot]
-# This script installs the Apache binary distribution and
-# was automatically created by binbuild.sh.
- 
-lmkdir()
-{
-  path=""
-  dirs=`echo $1 | sed -e 's%/% %g'`
-  mode=$2
- 
-  set -- ${dirs}
- 
-  for d in ${dirs}
-  do
-    path="${path}/$d"
-    if test ! -d "${path}" ; then
-      mkdir ${path}
-      if test $? -ne 0 ; then
-        echo "Failed to create directory: ${path}"
-        exit 1
-      fi
-      chmod ${mode} ${path}
-    fi
-  done
-}
- 
-lcopy()
-{
-  from=$1
-  to=$2
-  dmode=$3
-  fmode=$4
- 
-  test -d ${to} || lmkdir ${to} ${dmode}
-  (cd ${from} && tar -cf - *) | (cd ${to} && tar -xf -)
- 
-  if test "X${fmode}" != X ; then
-    find ${to} -type f -print | xargs chmod ${fmode}
-  fi
-  if test "X${dmode}" != X ; then
-    find ${to} -type d -print | xargs chmod ${dmode}
-  fi
-}
- 
-##
-##  determine path to (optional) Perl interpreter
-##
-PERL=no-perl5-on-this-system
-perls='perl5 perl'
-path=`echo $PATH | sed -e 's/:/ /g'`
- 
-for dir in ${path} ;  do
-  for pperl in ${perls} ; do
-    if test -f "${dir}/${pperl}" ; then
-      if `${dir}/${pperl} -v | grep 'version 5\.' >/dev/null 2>&1` ; then
-        PERL="${dir}/${pperl}"
-        break
-      fi
-    fi
-  done
-done
- 
-if [ .$1 = . ]
-then
-  SR=@default_dir@
-else
-  SR=$1
-fi
-echo "Installing binary distribution for platform @os@"
-echo "into directory $SR ..."
-lmkdir $SR 755
-lmkdir $SR/proxy 750
-lmkdir $SR/logs 755
-lcopy bindist/man $SR/man 755 644
-if [ -d bindist/modules ]
-then
-  lcopy bindist/modules $SR/modules 750 750
-fi
-lcopy bindist/include $SR/include 755 644
-lcopy bindist/icons $SR/icons 755 644
-lcopy bindist/manual $SR/manual 755 644
-lcopy bindist/cgi-bin $SR/cgi-bin 750 750
-if [ -f $SR/bin/envvars ]
-then
-  echo "[Preserving existing envvars settings.]"
-  cp -p $SR/bin/envvars ./envvars.orig
-  HAD_ENVVARS=yes
-else
-  HAD_ENVVARS=no
-fi
-lcopy bindist/bin $SR/bin 750 750
-if [ $HAD_ENVVARS = yes ]
-then
-  cp -p ./envvars.orig $SR/bin/envvars
-  rm ./envvars.orig
-fi
-lcopy bindist/lib $SR/lib 750 750
-if [ -d $SR/conf ]
-then
-  echo "[Preserving existing configuration files.]"
-  cp bindist/conf/*-std.conf $SR/conf/
-else
-  lcopy bindist/conf $SR/conf 750 640
-  sed -e "s%@default_dir@%$SR%" $SR/conf/httpd-std.conf > $SR/conf/httpd.conf
-fi
-if [ -d $SR/htdocs ]
-then
-  echo "[Preserving existing htdocs directory.]"
-else
-  lcopy bindist/htdocs $SR/htdocs 755 644
-fi
-if [ -d $SR/error ]
-then
-  echo "[Preserving existing error documents directory.]"
-else
-  lcopy bindist/error $SR/error 755 644
-fi
- 
-sed -e "s;^#!/.*;#!$PERL;" -e "s;\@prefix\@;$SR;" -e "s;\@sbindir\@;$SR/bin;" \
-	-e "s;\@libexecdir\@;$SR/libexec;" -e "s;\@includedir\@;$SR/include;" \
-	-e "s;\@sysconfdir\@;$SR/conf;" bindist/bin/apxs > $SR/bin/apxs
-sed -e "s;^#!/.*;#!$PERL;" bindist/bin/dbmmanage > $SR/bin/dbmmanage
-sed -e "s%@default_dir@%$SR%" \
-        -e "s%^HTTPD=.*$%HTTPD=\"$SR/bin/httpd -d $SR\"%" bindist/bin/apachectl > $SR/bin/apachectl
-sed -e "s%@default_dir@%$SR%" \
-        bindist/bin/envvars-std > $SR/bin/envvars-std
-if [ $HAD_ENVVARS = no ]
-then
-    cp -p $SR/bin/envvars-std $SR/bin/envvars
-fi
- 
-echo "Ready."
-echo " +--------------------------------------------------------+"
-echo " | You now have successfully installed the Apache @ver@  |"
-echo " | HTTP server. To verify that Apache actually works      |"
-echo " | correctly you should first check the (initially        |"
-echo " | created or preserved) configuration files:             |"
-echo " |                                                        |"
-echo " |   $SR/conf/httpd.conf"
-echo " |                                                        |"
-echo " | You should then be able to immediately fire up         |"
-echo " | Apache the first time by running:                      |"
-echo " |                                                        |"
-echo " |   $SR/bin/apachectl start "
-echo " |                                                        |"
-echo " | Thanks for using Apache.       The Apache Group        |"
-echo " |                                http://www.apache.org/  |"
-echo " +--------------------------------------------------------+"
-echo " "
diff --git a/build/install.sh b/build/install.sh
deleted file mode 100755
index 9a8821f..0000000
--- a/build/install.sh
+++ /dev/null
@@ -1,112 +0,0 @@
-#!/bin/sh
-##
-##  install.sh -- install a program, script or datafile
-##
-##  Based on `install-sh' from the X Consortium's X11R5 distribution
-##  as of 89/12/18 which is freely available.
-##  Cleaned up for Apache's Autoconf-style Interface (APACI)
-##  by Ralf S. Engelschall <rse@apache.org>
-##
-#
-# This script falls under the Apache License.
-# See http://www.apache.org/docs/LICENSE
-
-
-#
-#   put in absolute paths if you don't have them in your path; 
-#   or use env. vars.
-#
-mvprog="${MVPROG-mv}"
-cpprog="${CPPROG-cp}"
-chmodprog="${CHMODPROG-chmod}"
-chownprog="${CHOWNPROG-chown}"
-chgrpprog="${CHGRPPROG-chgrp}"
-stripprog="${STRIPPROG-strip}"
-rmprog="${RMPROG-rm}"
-
-#
-#   parse argument line
-#
-instcmd="$mvprog"
-chmodcmd=""
-chowncmd=""
-chgrpcmd=""
-stripcmd=""
-rmcmd="$rmprog -f"
-mvcmd="$mvprog"
-ext=""
-src=""
-dst=""
-while [ "x$1" != "x" ]; do
-    case $1 in
-        -c) instcmd="$cpprog"
-            shift; continue
-            ;;
-        -m) chmodcmd="$chmodprog $2"
-            shift; shift; continue
-            ;;
-        -o) chowncmd="$chownprog $2"
-            shift; shift; continue
-            ;;
-        -g) chgrpcmd="$chgrpprog $2"
-            shift; shift; continue
-            ;;
-        -s) stripcmd="$stripprog"
-            shift; continue
-            ;;
-        -S) stripcmd="$stripprog $2"
-            shift; shift; continue
-            ;;
-        -e) ext="$2"
-            shift; shift; continue
-            ;;
-        *)  if [ "x$src" = "x" ]; then
-                src=$1
-            else
-                dst=$1
-            fi
-            shift; continue
-            ;;
-    esac
-done
-if [ "x$src" = "x" ]; then
-     echo "install.sh: no input file specified"
-     exit 1
-fi
-if [ "x$dst" = "x" ]; then
-     echo "install.sh: no destination specified"
-     exit 1
-fi
-
-#
-#  If destination is a directory, append the input filename; if
-#  your system does not like double slashes in filenames, you may
-#  need to add some logic
-#
-if [ -d $dst ]; then
-    dst="$dst/`basename $src`"
-fi
-
-#  Add a possible extension (such as ".exe") to src and dst
-src="$src$ext"
-dst="$dst$ext"
-
-#  Make a temp file name in the proper directory.
-dstdir=`dirname $dst`
-dsttmp=$dstdir/#inst.$$#
-
-#  Move or copy the file name to the temp name
-$instcmd $src $dsttmp
-
-#  And set any options; do chmod last to preserve setuid bits
-if [ "x$chowncmd" != "x" ]; then $chowncmd $dsttmp; fi
-if [ "x$chgrpcmd" != "x" ]; then $chgrpcmd $dsttmp; fi
-if [ "x$stripcmd" != "x" ]; then $stripcmd $dsttmp; fi
-if [ "x$chmodcmd" != "x" ]; then $chmodcmd $dsttmp; fi
-
-#  Now rename the file to the real destination.
-$rmcmd $dst
-$mvcmd $dsttmp $dst
-
-exit 0
-
diff --git a/build/instdso.sh b/build/instdso.sh
deleted file mode 100755
index 634a1f9..0000000
--- a/build/instdso.sh
+++ /dev/null
@@ -1,58 +0,0 @@
-#!/bin/sh
-#
-# instdso.sh - install Apache DSO modules
-#
-# we use this instead of libtool --install because:
-# 1) on a few platforms libtool doesn't install DSOs exactly like we'd
-#    want (weird names, doesn't remove DSO first)
-# 2) we never want the .la files copied, so we might as well copy
-#    the .so files ourselves
-
-if test "$#" != "3"; then
-    echo "wrong number of arguments to instdso.sh"
-    echo "Usage: instdso.sh SH_LIBTOOL-value dso-name path-to-modules"
-    exit 1
-fi
-
-SH_LIBTOOL=`echo $1 | sed -e 's/^SH_LIBTOOL=//'`
-DSOARCHIVE=$2
-TARGETDIR=$3
-DSOBASE=`echo $DSOARCHIVE | sed -e 's/\.la$//'`
-TARGET_NAME="$DSOBASE.so"
-
-SYS=`uname -s`
-case $SYS in
-    AIX)
-        # on AIX, shared libraries remain in storage even when
-        # all processes using them have exited; standard practice
-        # prior to installing a shared library is to rm -f first
-        CMD="rm -f $TARGETDIR/$TARGET_NAME"
-        echo $CMD
-        $CMD || exit $?
-        CMD="cp .libs/lib$DSOBASE.so.0 $TARGETDIR/$TARGET_NAME"
-        echo $CMD
-        $CMD || exit $?
-        ;;
-    HP-UX)
-        CMD="cp .libs/$DSOBASE.sl $TARGETDIR/$TARGET_NAME"
-        echo $CMD
-        $CMD || exit $?
-        ;;
-    OSF1)
-        CMD="cp .libs/lib$DSOBASE.so $TARGETDIR/$TARGET_NAME"
-        echo $CMD
-        $CMD || exit $?
-        ;;
-    OS/2|OS/390)
-        CMD="$SH_LIBTOOL --mode=install cp $DSOARCHIVE $TARGETDIR/"
-        echo $CMD
-        $CMD || exit $?
-        ;;
-    *)
-        CMD="cp .libs/$TARGET_NAME $TARGETDIR/$TARGET_NAME"
-        echo $CMD
-        $CMD || exit $?
-        ;;
-esac
-
-exit 0
diff --git a/build/library.mk b/build/library.mk
deleted file mode 100644
index 1f488d7..0000000
--- a/build/library.mk
+++ /dev/null
@@ -1,60 +0,0 @@
-# ====================================================================
-# The Apache Software License, Version 1.1
-#
-# Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
-# reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# 1. Redistributions of source code must retain the above copyright
-#    notice, this list of conditions and the following disclaimer.
-#
-# 2. Redistributions in binary form must reproduce the above copyright
-#    notice, this list of conditions and the following disclaimer in
-#    the documentation and/or other materials provided with the
-#    distribution.
-#
-# 3. The end-user documentation included with the redistribution,
-#    if any, must include the following acknowledgment:
-#       "This product includes software developed by the
-#        Apache Software Foundation (http://www.apache.org/)."
-#    Alternately, this acknowledgment may appear in the software itself,
-#    if and wherever such third-party acknowledgments normally appear.
-#
-# 4. The names "Apache" and "Apache Software Foundation" must
-#    not be used to endorse or promote products derived from this
-#    software without prior written permission. For written
-#    permission, please contact apache@apache.org.
-#
-# 5. Products derived from this software may not be called "Apache",
-#    nor may "Apache" appear in their name, without prior written
-#    permission of the Apache Software Foundation.
-#
-# THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
-# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-# DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
-# ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
-# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
-# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-# SUCH DAMAGE.
-# ====================================================================
-#
-# This software consists of voluntary contributions made by many
-# individuals on behalf of the Apache Software Foundation.  For more
-# information on the Apache Software Foundation, please see
-# <http://www.apache.org/>.
-#
-# The build environment was provided by Sascha Schumann.
-#
-
-LTLIBRARY_OBJECTS = $(LTLIBRARY_SOURCES:.c=.lo) $(LTLIBRARY_OBJECTS_X)
-
-$(LTLIBRARY_NAME): $(LTLIBRARY_OBJECTS) $(LTLIBRARY_DEPENDENCIES)
-	$(LINK) $(LTLIBRARY_LDFLAGS) $(LTLIBRARY_OBJECTS) $(LTLIBRARY_LIBADD)
diff --git a/build/ltlib.mk b/build/ltlib.mk
deleted file mode 100644
index 21f7e9e..0000000
--- a/build/ltlib.mk
+++ /dev/null
@@ -1,61 +0,0 @@
-# ====================================================================
-# The Apache Software License, Version 1.1
-#
-# Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
-# reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# 1. Redistributions of source code must retain the above copyright
-#    notice, this list of conditions and the following disclaimer.
-#
-# 2. Redistributions in binary form must reproduce the above copyright
-#    notice, this list of conditions and the following disclaimer in
-#    the documentation and/or other materials provided with the
-#    distribution.
-#
-# 3. The end-user documentation included with the redistribution,
-#    if any, must include the following acknowledgment:
-#       "This product includes software developed by the
-#        Apache Software Foundation (http://www.apache.org/)."
-#    Alternately, this acknowledgment may appear in the software itself,
-#    if and wherever such third-party acknowledgments normally appear.
-#
-# 4. The names "Apache" and "Apache Software Foundation" must
-#    not be used to endorse or promote products derived from this
-#    software without prior written permission. For written
-#    permission, please contact apache@apache.org.
-#
-# 5. Products derived from this software may not be called "Apache",
-#    nor may "Apache" appear in their name, without prior written
-#    permission of the Apache Software Foundation.
-#
-# THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
-# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-# DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
-# ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
-# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
-# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-# SUCH DAMAGE.
-# ====================================================================
-#
-# This software consists of voluntary contributions made by many
-# individuals on behalf of the Apache Software Foundation.  For more
-# information on the Apache Software Foundation, please see
-# <http://www.apache.org/>.
-#
-# The build environment was provided by Sascha Schumann.
-#
-
-TARGETS = $(LTLIBRARY_NAME)
-
-include $(top_builddir)/build/rules.mk
-include $(top_srcdir)/build/library.mk
-
diff --git a/build/make_exports.awk b/build/make_exports.awk
deleted file mode 100644
index 09651f2..0000000
--- a/build/make_exports.awk
+++ /dev/null
@@ -1,136 +0,0 @@
-
-BEGIN {
-    printf("/*\n")
-    printf(" * THIS FILE WAS AUTOGENERATED BY make_exports.awk\n")
-    printf(" *\n")
-    printf(" * This is an ugly hack that needs to be here, so\n")
-    printf(" * that libtool will link all of the APR functions\n")
-    printf(" * into server regardless of whether the base server\n")
-    printf(" * uses them.\n")
-    printf(" */\n")
-    printf("\n")
-    printf("#define CORE_PRIVATE\n")
-    printf("\n")
-    
-    for (i = 1; i < ARGC; i++) {
-        file = ARGV[i]
-        sub("([^/]*[/])*", "", file)
-        printf("#include \"%s\"\n", file)
-    }
-
-    printf("\n")
-    printf("const void *ap_ugly_hack = NULL;\n")
-    printf("\n")
-    
-    TYPE_NORMAL = 0
-    TYPE_HEADER = 1
-
-    stackptr = 0
-}
-
-function push(line) {
-    stack[stackptr] = line
-    stackptr++
-}
-
-function do_output() {
-    printf("/*\n")
-    printf(" * %s\n", FILENAME)
-    printf(" */\n")
-    
-    for (i = 0; i < stackptr; i++) {
-        printf("%s\n", stack[i])
-    }
-    
-    stackptr = 0
-
-    printf("\n");
-}
-
-function enter_scope(type) {
-    scope++
-    scope_type[scope] = type
-    scope_stack[scope] = stackptr
-    delete scope_used[scope]
-}
-
-function leave_scope() {
-    used = scope_used[scope]
-   
-    if (!used)
-        stackptr = scope_stack[scope]
-
-    scope--
-    if (used) {
-        scope_used[scope] = 1
-        
-        if (!scope)
-            do_output()
-    }
-}
-
-function add_symbol(symbol) {
-    if (!index(symbol, "#")) {
-        push("const void *ap_hack_" symbol " = (const void *)" symbol ";")
-        scope_used[scope] = 1
-    }
-}
-
-/^[ \t]*AP[RU]?_(CORE_)?DECLARE[^(]*[(][^)]*[)]([^ ]* )*[^(]+[(]/ {
-    sub("[ \t]*AP[RU]?_(CORE_)?DECLARE[^(]*[(][^)]*[)][ \t]*", "")
-    sub("[(].*", "")
-    sub("([^ ]* (^([ \t]*[(])))+", "")
-
-    add_symbol($0)
-    next
-}
-
-/^[ \t]*AP_DECLARE_HOOK[^(]*[(][^)]*/ {
-    split($0, args, ",")
-    symbol = args[2]
-    sub("^[ \t]+", "", symbol)
-    sub("[ \t]+$", "", symbol)
-
-    add_symbol("ap_hook_" symbol)
-    add_symbol("ap_hook_get_" symbol)
-    add_symbol("ap_run_" symbol)
-    next
-}
-
-/^[ \t]*APR_POOL_DECLARE_ACCESSOR[^(]*[(][^)]*[)]/ {
-    sub("[ \t]*APR_POOL_DECLARE_ACCESSOR[^(]*[(]", "", $0)
-    sub("[)].*$", "", $0)
-    add_symbol("apr_" $0 "_pool_get")
-    next
-}
-
-/^#[ \t]*if(ndef| !defined[(])([^_]*_)*H/ {
-    enter_scope(TYPE_HEADER)
-    next
-}
-
-/^#[ \t]*if([n]?def)? / {
-    enter_scope(TYPE_NORMAL)
-    push($0)
-    next
-}
-
-/^#[ \t]*endif/ {
-    if (scope_type[scope] == TYPE_NORMAL)
-        push($0)
-        
-    leave_scope()
-    next
-}
-
-/^#[ \t]*else/ {
-    push($0)
-    next
-}
-
-/^#[ \t]*elif/ {
-    push($0)
-    next
-}
-
-
diff --git a/build/make_nw_export.awk b/build/make_nw_export.awk
deleted file mode 100644
index 12b17a9..0000000
--- a/build/make_nw_export.awk
+++ /dev/null
@@ -1,55 +0,0 @@
-# Based on apr's make_export.awk, which is
-# based on Ryan Bloom's make_export.pl
-
-BEGIN {
-    printf(" (APACHE2)\n")
-}
-
-# List of functions that we don't support, yet??
-#/ap_some_name/{next}
-
-
-function add_symbol (sym_name) {
-	if (count) {
-		found++
-	}
-    gsub (/ /, "", sym_name)
-	line = line sym_name ",\n"
-
-	if (count == 0) {
-		printf(" %s", line)
-		line = ""
-	}
-}
-
-/^[ \t]*AP([RU]|_CORE)?_DECLARE[^(]*[(][^)]*[)]([^ ]* )*[^(]+[(]/ {
-    sub("[ \t]*AP([RU]|_CORE)?_DECLARE[^(]*[(][^)]*[)][ \t]*", "")
-    sub("[(].*", "")
-    sub("([^ ]* (^([ \t]*[(])))+", "")
-
-    add_symbol($0)
-    next
-}
-
-/^[ \t]*AP_DECLARE_HOOK[^(]*[(][^)]*/ {
-    split($0, args, ",")
-    symbol = args[2]
-    sub("^[ \t]+", "", symbol)
-    sub("[ \t]+$", "", symbol)
-
-    add_symbol("ap_hook_" symbol)
-    add_symbol("ap_hook_get_" symbol)
-    add_symbol("ap_run_" symbol)
-    next
-}
-
-/^[ \t]*AP[RU]?_DECLARE_DATA .*;$/ {
-       varname = $NF;
-       gsub( /[*;]/, "", varname);
-       gsub( /\[.*\]/, "", varname);
-       add_symbol(varname);
-}
-
-#END {
-#	printf(" %s", line)
-#}
diff --git a/build/make_var_export.awk b/build/make_var_export.awk
deleted file mode 100644
index 966e14e..0000000
--- a/build/make_var_export.awk
+++ /dev/null
@@ -1,59 +0,0 @@
-# Based on apr's make_export.awk, which is
-# based on Ryan Bloom's make_export.pl
-
-/^#[ \t]*if(def)? (AP[RU]?_|!?defined).*/ {
-	if (old_filename != FILENAME) {
-		if (old_filename != "") printf("%s", line)
-		macro_no = 0
-		found = 0
-		count = 0
-		old_filename = FILENAME
-		line = ""
-	}
-	macro_stack[macro_no++] = macro
-	macro = substr($0, length($1)+2)
-	count++
-	line = line "#ifdef " macro "\n"
-	next
-}
-
-/^#[ \t]*endif/ {
-	if (count > 0) {
-		count--
-		line = line "#endif /* " macro " */\n"
-		macro = macro_stack[--macro_no]
-	}
-	if (count == 0) {
-		if (found != 0) {
-			printf("%s", line)
-		}
-		line = ""
-	}
-	next
-}
-
-function add_symbol (sym_name) {
-	if (count) {
-		found++
-	}
-	for (i = 0; i < count; i++) {
-		line = line "\t"
-	}
-	line = line sym_name "\n"
-
-	if (count == 0) {
-		printf("%s", line)
-		line = ""
-	}
-}
-
-/^[ \t]*AP[RU]?_DECLARE_DATA .*;$/ {
-       varname = $NF;
-       gsub( /[*;]/, "", varname);
-       gsub( /\[.*\]/, "", varname);
-       add_symbol(varname);
-}
-
-END {
-	printf("%s", line)
-}
diff --git a/build/mkconfNW.awk b/build/mkconfNW.awk
deleted file mode 100644
index 0770bfb..0000000
--- a/build/mkconfNW.awk
+++ /dev/null
@@ -1,57 +0,0 @@
-
-
-BEGIN {
-    
-    A["ServerRoot"] = "SYS:/APACHE2"
-    A["Port"] = "80"
-    
-}
-
-/@@LoadModule@@/ {
-    print "#LoadModule auth_anon_module modules/authanon.nlm"
-    print "#LoadModule auth_dbm_module modules/authdbm.nlm"
-    print "#LoadModule auth_digest_module modules/digest.nlm"
-    print "#LoadModule cern_meta_module modules/cernmeta.nlm"
-    print "#LoadModule dav_module modules/mod_dav.nlm"
-    print "#LoadModule dav_fs_module modules/moddavfs.nlm"
-    print "#LoadModule expires_module modules/expires.nlm"
-    print "#LoadModule file_cache_module modules/filecach.nlm"
-    print "#LoadModule headers_module modules/headers.nlm"
-    print "#LoadModule info_module modules/info.nlm"
-    print "#LoadModule mime_magic_module modules/mimemagi.nlm"
-    print "#LoadModule proxy_module modules/proxy.nlm"
-    print "#LoadModule proxy_connect_module modules/proxy_connect.nlm"
-    print "#LoadModule proxy_http_module modules/proxy_http.nlm"
-    print "#LoadModule proxy_ftp_module modules/proxy_ftp.nlm"
-    print "#LoadModule rewrite_module modules/rewrite.nlm"
-    print "#LoadModule speling_module modules/speling.nlm"
-    print "#LoadModule status_module modules/status.nlm"
-    print "#LoadModule unique_id_module modules/uniqueid.nlm"
-    print "#LoadModule usertrack_module modules/usertrk.nlm"
-    print "#LoadModule vhost_alias_module modules/vhost.nlm"
-    print ""
-    next
-}
-
-match ($0,/@@.*@@/) {
-    s=substr($0,RSTART+2,RLENGTH-4)
-    sub(/@@.*@@/,A[s],$0)
-}
-
-
-{
-    print
-}
-
-
-END {
-    print
-    print "#"
-    print "# SecureListen: Allows you to securely bind Apache to specific IP addresses "
-    print "# and/or ports."
-    print "#"
-    print "# Change this to SecureListen on specific IP addresses as shown below to "
-    print "# prevent Apache from glomming onto all bound IP addresses (0.0.0.0)"
-    print "#"
-    print "#SecureListen 443 \"SSL CertificateIP\""
-}
diff --git a/build/mkdep.perl b/build/mkdep.perl
deleted file mode 100644
index a9f1a67..0000000
--- a/build/mkdep.perl
+++ /dev/null
@@ -1,92 +0,0 @@
-#!/usr/bin/perl
-#
-# $Id: mkdep.perl,v 1.2 2000/03/19 13:25:33 bjh Exp $
-#
-# Created: Thu Aug 15 11:57:33 1996 too
-# Last modified: Mon Dec 27 09:23:56 1999 too
-#
-# Copyright (c) 1996-1999 Tomi Ollila.  All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-# 1. Redistributions of source code must retain the above copyright
-#    notice, this list of conditions and the following disclaimer.
-# 2. Redistributions in binary form must reproduce the above copyright
-#    notice, this list of conditions and the following disclaimer in the
-#    documentation and/or other materials provided with the distribution.
-# 
-# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO
-# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-die "Usage: mkdep CPP-command [CPP options] file1 [file2...]\n"
-  if ($#ARGV < 1);
-
-$cmdl = shift(@ARGV);
-
-$cmdl = "$cmdl " . shift (@ARGV) while ($ARGV[0] =~ /^-[A-Z]/);
-  
-while ($file = shift(@ARGV))
-{
-    $file =~ s/\.o$/.c/;
-
-    open(F, "$cmdl $file|");
-
-    &parseout;
-
-    close(F);
-}
-
-
-sub initinit
-{
-    %used = ();
-    $of = $file;
-    $of =~ s/\.c$/.lo/;
-    $str = "$of:\t$file";
-    $len = length $str;
-}
-	
-sub initstr
-{
-    $str = "\t";
-    $len = length $str;
-}
-
-sub parseout
-{
-    &initinit;
-    while (<F>)
-    {
-        s/\\\\/\//g;
-	next unless (/^# [0-9]* "(.*\.h)"/);
-
-	next if ($1 =~ /^\//);
-
-	next if $used{$1};
-
-        $used{$1} = 1;
-
-	$nlen = length($1) + 1;
-
-	if ($len + $nlen > 72)
-	{
-	    print $str, "\\\n";
-	    &initstr;
-	    $str = $str . $1;
-	}
-	else { $str = $str . " " . $1; }
-		     
-	$len += $nlen;	
-		     
-    }
-    print $str, "\n";
-}
diff --git a/build/mkdir.sh b/build/mkdir.sh
deleted file mode 100755
index b947c92..0000000
--- a/build/mkdir.sh
+++ /dev/null
@@ -1,37 +0,0 @@
-#!/bin/sh
-## 
-##  mkdir.sh -- make directory hierarchy
-##
-##  Based on `mkinstalldirs' from Noah Friedman <friedman@prep.ai.mit.edu>
-##  as of 1994-03-25, which was placed in the Public Domain.
-##  Cleaned up for Apache's Autoconf-style Interface (APACI)
-##  by Ralf S. Engelschall <rse@apache.org>
-##
-#
-# This script falls under the Apache License.
-# See http://www.apache.org/docs/LICENSE
-
-
-umask 022
-errstatus=0
-for file in ${1+"$@"} ; do 
-    set fnord `echo ":$file" |\
-               sed -e 's/^:\//%/' -e 's/^://' -e 's/\// /g' -e 's/^%/\//'`
-    shift
-    pathcomp=
-    for d in ${1+"$@"}; do
-        pathcomp="$pathcomp$d"
-        case "$pathcomp" in
-            -* ) pathcomp=./$pathcomp ;;
-            ?: ) pathcomp="$pathcomp/" 
-                 continue ;;
-        esac
-        if test ! -d "$pathcomp"; then
-            echo "mkdir $pathcomp" 1>&2
-            mkdir "$pathcomp" || errstatus=$?
-        fi
-        pathcomp="$pathcomp/"
-    done
-done
-exit $errstatus
-
diff --git a/build/nw_export.inc b/build/nw_export.inc
deleted file mode 100644
index 27185ea..0000000
--- a/build/nw_export.inc
+++ /dev/null
@@ -1,47 +0,0 @@
-/* Must include ap_config.h first so that we can redefine
-    the standard prototypes macros after it messes with
-    them. */
-#include "ap_config.h"
-
-/* Define all of the standard prototype macros as themselves
-    so that httpd.h will not mess with them. This allows 
-    them to pass untouched so that the AWK script can pick 
-    them out of the preprocessed result file. */
-#define AP_DECLARE              AP_DECLARE
-#define AP_CORE_DECLARE         AP_CORE_DECLARE
-#define AP_DECLARE_NONSTD       AP_DECLARE_NONSTD
-#define AP_CORE_DECLARE_NONSTD  AP_CORE_DECLARE_NONSTD
-#define AP_DECLARE_HOOK         AP_DECLARE_HOOK
-#define AP_DECLARE_DATA         AP_DECLARE_DATA
-
-#include "httpd.h"
-
-/* Preprocess all of the standard HTTPD headers. */
-#include "ap_compat.h"
-#include "ap_listen.h"
-#include "ap_mmn.h"
-#include "ap_mpm.h"
-#include "ap_release.h"
-#include "http_config.h"
-#include "http_connection.h"
-#include "http_core.h"
-#include "http_log.h"
-#include "http_main.h"
-#include "http_protocol.h"
-#include "http_request.h"
-#include "http_vhost.h"
-#include "mpm_common.h"
-#include "pcreposix.h"
-#include "rfc1413.h"
-#include "scoreboard.h"
-#include "util_cfgtree.h"
-#include "util_charset.h"
-#include "util_ebcdic.h"
-#include "util_filter.h"
-/*#include "util_ldap.h"*/
-#include "util_md5.h"
-#include "util_script.h"
-#include "util_time.h"
-#include "util_xml.h"
-
-#include "mod_core.h"
diff --git a/build/prebuildNW.bat b/build/prebuildNW.bat
deleted file mode 100755
index 240b4a6..0000000
--- a/build/prebuildNW.bat
+++ /dev/null
@@ -1,47 +0,0 @@
-@echo off
-
-if not "%NovellLibC%" == "" goto CheckNDK
-set NovellLibC=\novell\ndk\libc
-@echo Could not find the NovellLibC environment variable
-@echo Setting NovellLibC = %NovellLibC%
-@echo ---------------------  
-
-:CheckNDK
-if exist %NovellLibC%\include\netware.h goto NDKOK
-@echo The path to the NDK "%NovellLibC%" is invalid.
-@echo Please set then NovellLibC environment variable to the location of the NDK
-@echo ---------------------  
-goto Done
-
-:NDKOK
-@echo # As part of the pre-build process, the utilities GenChars.NLM
-@echo #  (Gen Test Chars) and DFTables.NLM (dftables) must be built, 
-@echo #  copied to a NetWare server and run using the following commands:
-@echo #
-@echo # "sys:\genchars >sys:\test_char.h"
-@echo # "sys:\dftables >sys:\chartables.c"
-@echo #
-@echo #  The files "sys:\test_chars.h" and "sys:\chartables.c" must be 
-@echo #  copied to "httpd\os\netware" on the build machine.
-
-@echo Fixing up the APR headers
-copy ..\srclib\apr\include\apr.hnw ..\srclib\apr\include\apr.h
-
-@echo Fixing up the APR-Util headers
-copy ..\srclib\apr-util\include\apu.hnw ..\srclib\apr-util\include\apu.h
-copy ..\srclib\apr-util\include\apr_ldap.hnw ..\srclib\apr-util\include\apr_ldap.h
-
-@echo Fixing up the pcre headers
-copy ..\srclib\pcre\config.hw ..\srclib\pcre\config.h
-copy ..\srclib\pcre\pcre.hw ..\srclib\pcre\pcre.h
-
-@echo Generating the import lists...
-set MWCIncludes=..\include;..\modules\http;..\os\netware;..\server\mpm\netware;..\srclib\apr\include;..\srclib\apr-util\include;+%NovellLibC%
-mwccnlm -P nw_export.inc -d NETWARE -d CORE_PRIVATE -EP
-awk -f make_nw_export.awk nw_export.i |sort >..\os\netware\httpd.imp
-
-rem cd ..\srclib\apr\build
-rem call prebuildnw.bat
-
-:Done
-pause
diff --git a/build/program.mk b/build/program.mk
deleted file mode 100644
index 5c70a0e..0000000
--- a/build/program.mk
+++ /dev/null
@@ -1,60 +0,0 @@
-# ====================================================================
-# The Apache Software License, Version 1.1
-#
-# Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
-# reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# 1. Redistributions of source code must retain the above copyright
-#    notice, this list of conditions and the following disclaimer.
-#
-# 2. Redistributions in binary form must reproduce the above copyright
-#    notice, this list of conditions and the following disclaimer in
-#    the documentation and/or other materials provided with the
-#    distribution.
-#
-# 3. The end-user documentation included with the redistribution,
-#    if any, must include the following acknowledgment:
-#       "This product includes software developed by the
-#        Apache Software Foundation (http://www.apache.org/)."
-#    Alternately, this acknowledgment may appear in the software itself,
-#    if and wherever such third-party acknowledgments normally appear.
-#
-# 4. The names "Apache" and "Apache Software Foundation" must
-#    not be used to endorse or promote products derived from this
-#    software without prior written permission. For written
-#    permission, please contact apache@apache.org.
-#
-# 5. Products derived from this software may not be called "Apache",
-#    nor may "Apache" appear in their name, without prior written
-#    permission of the Apache Software Foundation.
-#
-# THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
-# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-# DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
-# ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
-# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
-# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-# SUCH DAMAGE.
-# ====================================================================
-#
-# This software consists of voluntary contributions made by many
-# individuals on behalf of the Apache Software Foundation.  For more
-# information on the Apache Software Foundation, please see
-# <http://www.apache.org/>.
-#
-# The build environment was provided by Sascha Schumann.
-#
-
-PROGRAM_OBJECTS = $(PROGRAM_SOURCES:.c=.lo)
-
-$(PROGRAM_NAME): $(PROGRAM_DEPENDENCIES) $(PROGRAM_OBJECTS)
-	$(LINK) $(PROGRAM_LDFLAGS) $(PROGRAM_OBJECTS) $(PROGRAM_LDADD)
diff --git a/build/rules.mk.in b/build/rules.mk.in
deleted file mode 100644
index bd427a6..0000000
--- a/build/rules.mk.in
+++ /dev/null
@@ -1,264 +0,0 @@
-# ====================================================================
-# The Apache Software License, Version 1.1
-#
-# Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
-# reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# 1. Redistributions of source code must retain the above copyright
-#    notice, this list of conditions and the following disclaimer.
-#
-# 2. Redistributions in binary form must reproduce the above copyright
-#    notice, this list of conditions and the following disclaimer in
-#    the documentation and/or other materials provided with the
-#    distribution.
-#
-# 3. The end-user documentation included with the redistribution,
-#    if any, must include the following acknowledgment:
-#       "This product includes software developed by the
-#        Apache Software Foundation (http://www.apache.org/)."
-#    Alternately, this acknowledgment may appear in the software itself,
-#    if and wherever such third-party acknowledgments normally appear.
-#
-# 4. The names "Apache" and "Apache Software Foundation" must
-#    not be used to endorse or promote products derived from this
-#    software without prior written permission. For written
-#    permission, please contact apache@apache.org.
-#
-# 5. Products derived from this software may not be called "Apache",
-#    nor may "Apache" appear in their name, without prior written
-#    permission of the Apache Software Foundation.
-#
-# THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
-# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-# DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
-# ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
-# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
-# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-# SUCH DAMAGE.
-# ====================================================================
-#
-# This software consists of voluntary contributions made by many
-# individuals on behalf of the Apache Software Foundation.  For more
-# information on the Apache Software Foundation, please see
-# <http://www.apache.org/>.
-#
-# The build environment was originally provided by Sascha Schumann.
-#
-
-include $(top_builddir)/build/config_vars.mk
-
-# Combine all of the flags together in the proper order so that
-# the user-defined flags can always override the configure ones, if needed.
-# Note that includes are listed after the flags because -I options have
-# left-to-right precedence and CPPFLAGS may include user-defined overrides.
-#
-ALL_CFLAGS   = $(EXTRA_CFLAGS) $(NOTEST_CFLAGS) $(CFLAGS)
-ALL_CPPFLAGS = $(DEFS) $(EXTRA_CPPFLAGS) $(NOTEST_CPPFLAGS) $(CPPFLAGS)
-ALL_CXXFLAGS = $(EXTRA_CXXFLAGS) $(NOTEST_CXXFLAGS) $(CXXFLAGS)
-ALL_LDFLAGS  = $(EXTRA_LDFLAGS) $(NOTEST_LDFLAGS) $(LDFLAGS)
-ALL_LIBS     = $(EXTRA_LIBS) $(NOTEST_LIBS) $(LIBS)
-ALL_INCLUDES = $(INCLUDES) $(EXTRA_INCLUDES)
-
-# Compile commands
-
-COMPILE      = $(CC)  $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(ALL_INCLUDES)
-CXX_COMPILE  = $(CXX) $(ALL_CXXFLAGS) $(ALL_CPPFLAGS) $(ALL_INCLUDES)
-
-SH_COMPILE     = $(LIBTOOL) --mode=compile $(COMPILE) @SHLTCFLAGS@ -c $< && touch $@
-SH_CXX_COMPILE = $(LIBTOOL) --mode=compile $(CXX_COMPILE) @SHLTCFLAGS@ -c $< && touch $@
-
-LT_COMPILE     = $(LIBTOOL) --mode=compile $(COMPILE) @LTCFLAGS@ -c $< && touch $@
-LT_CXX_COMPILE = $(LIBTOOL) --mode=compile $(CXX_COMPILE) @LTCFLAGS@ -c $< && touch $@
-
-# Link-related commands
-
-LINK     = $(LIBTOOL) --mode=link $(COMPILE) $(LT_LDFLAGS) $(ALL_LDFLAGS) -o $@
-SH_LINK  = $(SH_LIBTOOL) --mode=link $(COMPILE) $(LT_LDFLAGS) $(ALL_LDFLAGS) $(SH_LDFLAGS) $(CORE_IMPLIB) $(SH_LIBS) -o $@
-MOD_LINK = $(LIBTOOL) --mode=link $(COMPILE) -module $(LT_LDFLAGS) $(ALL_LDFLAGS) -o $@
-
-# Cross compile commands
-
-# Helper programs
-
-MKINSTALLDIRS = $(abs_srcdir)/build/mkdir.sh
-INSTALL = $(LIBTOOL) --mode=install $(abs_srcdir)/build/install.sh -c
-INSTALL_DATA = $(INSTALL) -m 644
-INSTALL_PROGRAM = $(INSTALL) -m 755 $(INSTALL_PROG_FLAGS)
-
-#
-# Standard build rules
-#
-all: all-recursive
-depend: depend-recursive
-clean: clean-recursive
-distclean: distclean-recursive
-extraclean: extraclean-recursive
-install: install-recursive
-shared-build: shared-build-recursive
-
-all-recursive install-recursive depend-recursive:
-	@otarget=`echo $@|sed s/-recursive//`; \
-	list=' $(BUILD_SUBDIRS) $(SUBDIRS)'; \
-	for i in $$list; do \
-	    if test -d "$$i"; then \
-		target="$$otarget"; \
-		echo "Making $$target in $$i"; \
-		if test "$$i" = "."; then \
-			made_local=yes; \
-			target="local-$$target"; \
-		fi; \
-		(cd $$i && $(MAKE) $$target) || exit 1; \
-	    fi; \
-	done; \
-	if test "$$otarget" = "all" && test -z '$(TARGETS)'; then \
-	    made_local=yes; \
-	fi; \
-	if test "$$made_local" != "yes"; then \
-	    $(MAKE) "local-$$otarget" || exit 1; \
-	fi
-
-clean-recursive distclean-recursive extraclean-recursive:
-	@otarget=`echo $@|sed s/-recursive//`; \
-	list='$(CLEAN_SUBDIRS) $(SUBDIRS)'; \
-	for i in $$list; do \
-	    if test -d "$$i"; then \
-		target="$$otarget"; \
-		echo "Making $$target in $$i"; \
-		if test "$$i" = "."; then \
-			made_local=yes; \
-			target="local-$$target"; \
-		fi; \
-		(cd $$i && $(MAKE) $$target); \
-	    fi; \
-	done; \
-	if test "$$otarget" = "all" && test -z '$(TARGETS)'; then \
-	    made_local=yes; \
-	fi; \
-	if test "$$made_local" != "yes"; then \
-	    $(MAKE) "local-$$otarget"; \
-	fi
-
-shared-build-recursive:
-	@if test `pwd` = "$(top_builddir)"; then \
-	    $(PRE_SHARED_CMDS) ; \
-	fi; \
-	list='$(SUBDIRS)'; for i in $$list; do \
-	    target="shared-build"; \
-	    if test "$$i" = "."; then \
-		made_local=yes; \
-		target="local-shared-build"; \
-	    fi; \
-	    if test "$$i" != "srclib"; then \
-		(cd $$i && $(MAKE) $$target) || exit 1; \
-	    fi; \
-	done; \
-	if test -f 'modules.mk'; then \
-	    if test -n '$(SHARED_TARGETS)'; then \
-		echo "Building shared: $(SHARED_TARGETS)"; \
-		if test "$$made_local" != "yes"; then \
-			$(MAKE) "local-shared-build" || exit 1; \
-		fi; \
-	    fi; \
-	fi; \
-	if test `pwd` = "$(top_builddir)"; then \
-		$(POST_SHARED_CMDS) ; \
-	fi
-
-local-all: $(TARGETS)
-
-local-shared-build: $(SHARED_TARGETS)
-
-local-depend: x-local-depend
-	if test "`echo $(srcdir)/*.c`" != "$(srcdir)'/*.c'"; then \
-		$(CC) -MM $(ALL_CPPFLAGS) $(ALL_INCLUDES) $(srcdir)/*.c | sed 's/\.o:/.lo:/' > $(builddir)/.deps || true;           \
-	fi
-
-local-clean: x-local-clean
-	rm -f *.o *.lo *.slo *.obj *.a *.la $(CLEAN_TARGETS) $(TARGETS)
-	rm -rf .libs
-
-local-distclean: local-clean x-local-distclean
-	rm -f .deps Makefile $(DISTCLEAN_TARGETS)
-
-local-extraclean: local-distclean x-local-extraclean
-	@if test -n "$(EXTRACLEAN_TARGETS)"; then \
-	    echo "rm -f $(EXTRACLEAN_TARGETS)"; \
-	    rm -f $(EXTRACLEAN_TARGETS) ; \
-	fi
-
-local-install: $(TARGETS) $(SHARED_TARGETS) $(INSTALL_TARGETS)
-	@if test -n '$(PROGRAMS)'; then \
-	    test -d $(sbindir) || $(MKINSTALLDIRS) $(sbindir); \
-	    list='$(PROGRAMS)'; for i in $$list; do \
-	        $(INSTALL_PROGRAM) $$i $(sbindir); \
-	    done; \
-	fi
-
-# to be filled in by the actual Makefile if extra commands are needed
-x-local-depend x-local-clean x-local-distclean x-local-extraclean:
-
-#
-# Implicit rules for creating outputs from input files
-#
-CXX_SUFFIX = cpp
-SHLIB_SUFFIX = so
-
-.SUFFIXES:
-.SUFFIXES: .S .c .$(CXX_SUFFIX) .lo .o .s .y .l .slo .def .la
-
-.c.o:
-	$(COMPILE) -c $<
-
-.s.o:
-	$(COMPILE) -c $<
-
-.c.lo:
-	$(LT_COMPILE)
-
-.s.lo:
-	$(LT_COMPILE)
-
-.c.slo:
-	$(SH_COMPILE)
-
-.$(CXX_SUFFIX).lo:
-	$(LT_CXX_COMPILE)
-
-.$(CXX_SUFFIX).slo:
-	$(SH_CXX_COMPILE)
-
-.y.c:
-	$(YACC) $(YFLAGS) $< && mv y.tab.c $*.c
-	if test -f y.tab.h; then \
-	if cmp -s y.tab.h $*.h; then rm -f y.tab.h; else mv y.tab.h $*.h; fi; \
-	else :; fi
-
-.l.c:
-	$(LEX) $(LFLAGS) $< && mv $(LEX_OUTPUT_ROOT).c $@
-
-# Makes an import library from a def file
-.def.la:
-	$(LIBTOOL) --mode=compile $(MK_IMPLIB) -o $@ $<
-
-#
-# Dependencies
-#
-include $(builddir)/.deps
-
-.PHONY: all all-recursive install-recursive local-all $(PHONY_TARGETS) \
-	shared-build shared-build-recursive local-shared-build \
-	depend depend-recursive local-depend x-local-depend \
-	clean clean-recursive local-clean x-local-clean \
-	distclean distclean-recursive local-distclean x-local-distclean \
-	extraclean extraclean-recursive local-extraclean x-local-extraclean \
-	install local-install $(INSTALL_TARGETS)
-
diff --git a/build/special.mk b/build/special.mk
deleted file mode 100644
index 089bd5d..0000000
--- a/build/special.mk
+++ /dev/null
@@ -1,76 +0,0 @@
-# ====================================================================
-# The Apache Software License, Version 1.1
-#
-# Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
-# reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# 1. Redistributions of source code must retain the above copyright
-#    notice, this list of conditions and the following disclaimer.
-#
-# 2. Redistributions in binary form must reproduce the above copyright
-#    notice, this list of conditions and the following disclaimer in
-#    the documentation and/or other materials provided with the
-#    distribution.
-#
-# 3. The end-user documentation included with the redistribution,
-#    if any, must include the following acknowledgment:
-#       "This product includes software developed by the
-#        Apache Software Foundation (http://www.apache.org/)."
-#    Alternately, this acknowledgment may appear in the software itself,
-#    if and wherever such third-party acknowledgments normally appear.
-#
-# 4. The names "Apache" and "Apache Software Foundation" must
-#    not be used to endorse or promote products derived from this
-#    software without prior written permission. For written
-#    permission, please contact apache@apache.org.
-#
-# 5. Products derived from this software may not be called "Apache",
-#    nor may "Apache" appear in their name, without prior written
-#    permission of the Apache Software Foundation.
-#
-# THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
-# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-# DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
-# ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
-# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
-# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-# SUCH DAMAGE.
-# ====================================================================
-#
-# This software consists of voluntary contributions made by many
-# individuals on behalf of the Apache Software Foundation.  For more
-# information on the Apache Software Foundation, please see
-# <http://www.apache.org/>.
-#
-# The build environment was provided by Sascha Schumann.
-#
-
-all: all-recursive
-
-include $(builddir)/modules.mk
-TARGETS = $(static)
-SHARED_TARGETS = $(shared)
-INSTALL_TARGETS = install-modules
-
-install-modules:
-	@test -d $(libexecdir) || $(MKINSTALLDIRS) $(libexecdir);
-	@builtin='$(BUILTIN_LIBS)'; \
-	has_mod_so=`echo $$builtin|sed 's/^.*mod_so.*$$/has_mod_so/'`; \
-	if [ "x$$has_mod_so" = "xhas_mod_so" ]; then \
-		list='$(shared)'; \
-		for i in $$list; do \
-			$(top_srcdir)/build/instdso.sh SH_LIBTOOL='$(SH_LIBTOOL)' $$i $(libexecdir); \
-		done; \
-	fi	
-
-include $(top_builddir)/build/rules.mk
-
diff --git a/build/sysv_makefile b/build/sysv_makefile
deleted file mode 100755
index b91952d..0000000
--- a/build/sysv_makefile
+++ /dev/null
@@ -1,71 +0,0 @@
-#! /bin/sh
-# ====================================================================
-# The Apache Software License, Version 1.1
-#
-# Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
-# reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# 1. Redistributions of source code must retain the above copyright
-#    notice, this list of conditions and the following disclaimer.
-#
-# 2. Redistributions in binary form must reproduce the above copyright
-#    notice, this list of conditions and the following disclaimer in
-#    the documentation and/or other materials provided with the
-#    distribution.
-#
-# 3. The end-user documentation included with the redistribution,
-#    if any, must include the following acknowledgment:
-#       "This product includes software developed by the
-#        Apache Software Foundation (http://www.apache.org/)."
-#    Alternately, this acknowledgment may appear in the software itself,
-#    if and wherever such third-party acknowledgments normally appear.
-#
-# 4. The names "Apache" and "Apache Software Foundation" must
-#    not be used to endorse or promote products derived from this
-#    software without prior written permission. For written
-#    permission, please contact apache@apache.org.
-#
-# 5. Products derived from this software may not be called "Apache",
-#    nor may "Apache" appear in their name, without prior written
-#    permission of the Apache Software Foundation.
-#
-# THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
-# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-# DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
-# ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
-# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
-# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-# SUCH DAMAGE.
-# ====================================================================
-#
-# This software consists of voluntary contributions made by many
-# individuals on behalf of the Apache Software Foundation.  For more
-# information on the Apache Software Foundation, please see
-# <http://www.apache.org/>.
-#
-# The build environment was provided by Sascha Schumann.
-#
-
-# cwd must be top_srcdir
-test -f build/sysv_makefile || exit 2
-
-test -f bsd_converted || exit 1
-
-tmpfile=`mktemp /tmp/sysv_makefile.XXXXXX 2>/dev/null` || tmpfile="tmp.$$"
-for i in build/*.mk; do
-    sed 's/^\.include "\(.*\)"/include \1/' $i >$tmpfile \
-        && cp $tmpfile $i
-done
-rm -f $tmpfile
-
-rm bsd_converted
-exit 0
diff --git a/build/win32/.cvsignore b/build/win32/.cvsignore
deleted file mode 100644
index be37498..0000000
--- a/build/win32/.cvsignore
+++ /dev/null
@@ -1,4 +0,0 @@
-Apache.aps
-Apache.rc
-libhttpd.rc
-libhttpd.aps
diff --git a/build/win32/apache.ico b/build/win32/apache.ico
deleted file mode 100644
index bfb4f63..0000000
--- a/build/win32/apache.ico
+++ /dev/null
Binary files differ
diff --git a/build/win32/win32ver.awk b/build/win32/win32ver.awk
deleted file mode 100644
index 26fe37d..0000000
--- a/build/win32/win32ver.awk
+++ /dev/null
@@ -1,106 +0,0 @@
-BEGIN {
-
-  # ff bits: 1(debug), 2(prerelease), 4(patched), 8(vendor) and 32(special)
-  # debug is summed based on the /Define _DEBUG
-  # prerelease is based on the -dev extension,
-  # patched is based on a non-standard "-ver" extension, 
-  # special and vendor are toggled by their args.
-  #
-  ff = 0;
-
-  file=ARGV[1];
-  desc=ARGV[2];
-  rel_h=ARGV[3];
-
-  i = 4;
-  while (length(ARGV[i])) {
-    if (match(ARGV[i], /icon=/)) {
-      icon = substr(ARGV[i], 6);
-    }
-    if (match(ARGV[i], /vendor=/)) {
-      vendor = substr(ARGV[i], 8);
-      ff = ff + 8;
-    }
-    if (match(ARGV[i], /special=/)) {
-      special = substr(ARGV[i], 9);
-      ff = ff + 32;
-    }
-    i = i + 1
-  }
-
-  i = i - 1;
-  while (i) {
-    delete ARGV[i];
-    i = i - 1;
-  }
-
-  while ((getline < rel_h) > 0) {
-    if (match ($0, /^#define AP_SERVER_BASEREVISION "[^"]+"/)) {
-      ver = substr($0, RSTART + 32, RLENGTH - 33);
-    }
-  }
-
-  verc = ver;
-  gsub(/\./, ",", verc);
-  if (build) {
-    sub(/-.*/, "", verc)
-    verc = verc "," build;
-  } else if (sub(/-dev/, ",0", verc)) {
-      ff = ff + 2;
-  } else if (!sub(/-alpha/, ",10", verc)  \
-          && !sub(/-beta/, ",100", verc)  \
-          && !sub(/-gold/, ",200", verc)) {
-    sub(/-.*/, "", verc);
-    verc = verc "," 0;
-  }
-  
-  if (length(vendor)) {
-    ff = ff + 8;
-  }
-
-  if (length(icon)) {
-    print "1 ICON DISCARDABLE \"" icon "\"";
-  }
-  print "1 VERSIONINFO";
-  print " FILEVERSION " verc "";
-  print " PRODUCTVERSION " verc "";
-  print " FILEFLAGSMASK 0x3fL";
-  print "#if defined(_DEBUG)"
-  print " FILEFLAGS 0x" sprintf("%02x", ff + 1) "L";
-  print "#else"
-  print " FILEFLAGS 0x" sprintf("%02x", ff) "L";
-  print "#endif"
-  print " FILEOS 0x40004L";
-  print " FILETYPE 0x1L";
-  print " FILESUBTYPE 0x0L";
-  print "BEGIN";
-  print "  BLOCK \"StringFileInfo\"";
-  print "  BEGIN";
-  print "    BLOCK \"040904b0\"";
-  print "    BEGIN";
-  print "      VALUE \"Comments\", \"All rights reserved.  The license "\
-        "is available at <http://www.apache.org/LICENSE.txt>.  The Apache "\
-        "HTTP Server project pages are at <http://httpd.apache.org/>.\\0\"";
-  print "      VALUE \"CompanyName\", \"Apache Software Foundation\\0\"";
-  print "      VALUE \"FileDescription\", \"" desc "\\0\"";
-  print "      VALUE \"FileVersion\", \"" ver "\\0\"";
-  print "      VALUE \"InternalName\", \"" file "\\0\"";
-  print "      VALUE \"LegalCopyright\", \"Copyright © 2000-2002 "\
-        "The Apache Software Foundation.\\0\"";
-  print "      VALUE \"OriginalFilename\", \"" file ".exe\\0\"";
-  if (vendor) {
-    print "      VALUE \"PrivateBuild\", \"" vendor "\\0\"";
-  }
-  if (special) {
-    print "      VALUE \"SpecialBuild\", \"" vendor "\\0\"";
-  }
-  print "      VALUE \"ProductName\", \"Apache HTTP Server\\0\"";
-  print "      VALUE \"ProductVersion\", \"" ver "\\0\"";
-  print "    END";
-  print "  END";
-  print "  BLOCK \"VarFileInfo\"";
-  print "  BEGIN";
-  print "    VALUE \"Translation\", 0x409, 1200";
-  print "  END";
-  print "END";
-}
diff --git a/buildconf b/buildconf
deleted file mode 100755
index 70461f8..0000000
--- a/buildconf
+++ /dev/null
@@ -1,128 +0,0 @@
-#!/bin/sh
-# ====================================================================
-# The Apache Software License, Version 1.1
-#
-# Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
-# reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# 1. Redistributions of source code must retain the above copyright
-#    notice, this list of conditions and the following disclaimer.
-#
-# 2. Redistributions in binary form must reproduce the above copyright
-#    notice, this list of conditions and the following disclaimer in
-#    the documentation and/or other materials provided with the
-#    distribution.
-#
-# 3. The end-user documentation included with the redistribution,
-#    if any, must include the following acknowledgment:
-#       "This product includes software developed by the
-#        Apache Software Foundation (http://www.apache.org/)."
-#    Alternately, this acknowledgment may appear in the software itself,
-#    if and wherever such third-party acknowledgments normally appear.
-#
-# 4. The names "Apache" and "Apache Software Foundation" must
-#    not be used to endorse or promote products derived from this
-#    software without prior written permission. For written
-#    permission, please contact apache@apache.org.
-#
-# 5. Products derived from this software may not be called "Apache",
-#    nor may "Apache" appear in their name, without prior written
-#    permission of the Apache Software Foundation.
-#
-# THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
-# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-# DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
-# ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
-# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
-# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-# SUCH DAMAGE.
-# ====================================================================
-#
-# This software consists of voluntary contributions made by many
-# individuals on behalf of the Apache Software Foundation.  For more
-# information on the Apache Software Foundation, please see
-# <http://www.apache.org/>.
-#
-
-# buildconf: Build the support scripts needed to compile from a
-#            checked-out version of the source code.
-
-#
-# Check to be sure that we have the srclib dependencies checked-out
-#
-if [ ! -d srclib/apr -o ! -f srclib/apr/build/apr_common.m4 ]; then
-    echo ""
-    echo "You don't have a srclib/apr/ subdirectory.  Please get one:"
-    echo ""
-    echo "   cd srclib"
-    echo "   cvs -d :pserver:anoncvs@cvs.apache.org:/home/cvspublic login"
-    echo "      (password 'anoncvs')"
-    echo "   cvs -d :pserver:anoncvs@cvs.apache.org:/home/cvspublic co apr"
-    echo ""
-    exit 1
-fi
-if [ ! -d srclib/apr-util -o ! -f srclib/apr-util/Makefile.in ]; then
-    echo ""
-    echo "You don't have a srclib/apr-util/ subdirectory.  Please get one:"
-    echo ""
-    echo "   cd srclib"
-    echo "   cvs -d :pserver:anoncvs@cvs.apache.org:/home/cvspublic login"
-    echo "      (password 'anoncvs')"
-    echo "   cvs -d :pserver:anoncvs@cvs.apache.org:/home/cvspublic co apr-util"
-    echo ""
-    exit 1
-fi
-
-# These are temporary until Roy finishes the other build changes
-#
-touch .deps
-rm -f aclocal.m4
-rm -f generated_lists
-
-case "`uname`" in
-*BSD/OS*)
-    ./build/bsd_makefile;;
-esac
-#
-# end temporary stuff
-
-apr_configure="srclib/apr/configure"
-aprutil_configure="srclib/apr-util/configure"
-pcre_configure="srclib/pcre/configure"
-config_h_in="include/ap_config_auto.h.in"
-
-cross_compile_warning="warning: AC_TRY_RUN called without default to allow cross compiling"
-
-echo rebuilding $apr_configure
-(cd srclib/apr && ./buildconf) || {
-    echo "./buildconf failed for apr"
-    exit 1
-}
-
-echo rebuilding $aprutil_configure
-(cd srclib/apr-util && ./buildconf) || {
-    echo "./buildconf failed for apr-util" 
-    exit 1
-}
-
-echo rebuilding $pcre_configure
-(cd srclib/pcre && autoconf)
-
-echo rebuilding $config_h_in
-rm -f $config_h_in
-autoheader 2>&1 | grep -v "$cross_compile_warning"
-
-echo rebuilding configure
-rm -f config.cache
-autoconf 2>&1 | grep -v "$cross_compile_warning"
-
-exit 0
diff --git a/config.layout b/config.layout
deleted file mode 100644
index 10f1e2b..0000000
--- a/config.layout
+++ /dev/null
@@ -1,311 +0,0 @@
-##
-##  config.layout -- Pre-defined Installation Path Layouts
-##
-##  Hints:
-##  - layouts can be loaded with configure's --with-layout=ID option
-##  - when no --with-layout option is given, the default layout is `Apache'
-##  - a trailing plus character (`+') on paths is replaced with a 
-##    `/<target>' suffix where <target> is currently hardcoded to 'apache2'.
-##    (This may become a configurable parameter at some point.)
-##
-
-#   Classical Apache path layout.
-<Layout Apache>
-    prefix:        /usr/local/apache2
-    exec_prefix:   ${prefix}
-    bindir:        ${exec_prefix}/bin
-    sbindir:       ${exec_prefix}/bin
-    libexecdir:    ${exec_prefix}/modules
-    mandir:        ${prefix}/man
-    sysconfdir:    ${prefix}/conf
-    datadir:       ${prefix}
-    installbuilddir: ${datadir}/build
-    errordir:      ${datadir}/error
-    iconsdir:      ${datadir}/icons
-    htdocsdir:     ${datadir}/htdocs
-    manualdir:     ${datadir}/manual
-    cgidir:        ${datadir}/cgi-bin
-    includedir:    ${prefix}/include
-    localstatedir: ${prefix}
-    runtimedir:    ${localstatedir}/logs
-    logfiledir:    ${localstatedir}/logs
-    proxycachedir: ${localstatedir}/proxy
-</Layout>
-
-#   GNU standards conforming path layout.
-#   See FSF's GNU project `make-stds' document for details.
-<Layout GNU>
-    prefix:        /usr/local
-    exec_prefix:   ${prefix}
-    bindir:        ${exec_prefix}/bin
-    sbindir:       ${exec_prefix}/sbin
-    libexecdir:    ${exec_prefix}/libexec
-    mandir:        ${prefix}/man
-    sysconfdir:    ${prefix}/etc+
-    datadir:       ${prefix}/share+
-    installbuilddir: ${datadir}/build
-    errordir:      ${datadir}/error
-    iconsdir:      ${datadir}/icons
-    htdocsdir:     ${datadir}/htdocs
-    manualdir:     ${datadir}/manual
-    cgidir:        ${datadir}/cgi-bin
-    includedir:    ${prefix}/include+
-    localstatedir: ${prefix}/var+
-    runtimedir:    ${localstatedir}/run
-    logfiledir:    ${localstatedir}/log
-    proxycachedir: ${localstatedir}/proxy
-</Layout>
-
-#   Apache binary distribution path layout
-<Layout BinaryDistribution>
-    prefix:        /usr/local/apache
-    exec_prefix:
-    bindir:        bin
-    sbindir:       bin
-    libexecdir:    libexec
-    mandir:        man
-    sysconfdir:    conf
-    datadir:
-    installbuilddir: build
-    errordir:      error
-    iconsdir:      icons
-    htdocsdir:     htdocs
-    manualdir:     manual
-    cgidir:        cgi-bin
-    includedir:    include
-    localstatedir:
-    runtimedir:    logs
-    logfiledir:    logs
-    proxycachedir: proxy
-</Layout>
-
-#   Mac OS X Server (Rhapsody)
-<Layout Mac OS X Server>
-    prefix:        /Local/Library/WebServer
-    exec_prefix:   /usr
-    bindir:        ${exec_prefix}/bin
-    sbindir:       ${exec_prefix}/sbin
-    libexecdir:    /System/Library/Apache/Modules
-    mandir:        ${exec_prefix}/share/man
-    sysconfdir:    ${prefix}/Configuration
-    datadir:       ${prefix}
-    installbuilddir: /System/Library/Apache/Build
-    errordir:      /System/Library/Apache/Error
-    iconsdir:      /System/Library/Apache/Icons
-    manualdir:     /System/Library/Apache/Manual
-    htdocsdir:     ${datadir}/Documents
-    cgidir:        ${datadir}/CGI-Executables
-    includedir:    /System/Library/Frameworks/Apache.framework/Versions/1.3/Headers
-    localstatedir: /var
-    runtimedir:    ${prefix}/Logs
-    logfiledir:    ${prefix}/Logs
-    proxycachedir: ${prefix}/ProxyCache
-</Layout>
-
-#   Darwin/Mac OS Layout
-<Layout Darwin>
-    prefix:        /usr
-    exec_prefix:   ${prefix}
-    bindir:        ${exec_prefix}/bin
-    sbindir:       ${exec_prefix}/sbin
-    libexecdir:    ${exec_prefix}/libexec+
-    mandir:        ${prefix}/share/man
-    datadir:       /Library/WebServer
-    sysconfdir:    /etc+
-    installbuilddir: ${prefix}/share/httpd/build
-    errordir:      ${prefix}/share/httpd/error
-    iconsdir:      ${prefix}/share/httpd/icons
-    htdocsdir:     ${datadir}/Documents
-    manualdir:     ${datadir}/share/httpd/manual
-    cgidir:        ${datadir}/CGI-Executables
-    includedir:    ${prefix}/include+
-    localstatedir: /var
-    runtimedir:    ${localstatedir}/run
-    logfiledir:    ${localstatedir}/log+
-    proxycachedir: ${runtimedir}/proxy
-</Layout>
-
-#   RedHat 5.x layout
-<Layout RedHat>
-    prefix:        /usr
-    exec_prefix:   ${prefix}
-    bindir:        ${prefix}/bin
-    sbindir:       ${prefix}/sbin
-    libexecdir:    ${prefix}/lib/apache
-    mandir:        ${prefix}/man
-    sysconfdir:    /etc/httpd/conf
-    datadir:       /home/httpd
-    installbuilddir: ${datadir}/build
-    errordir:      ${datadir}/error
-    iconsdir:      ${datadir}/icons
-    htdocsdir:     ${datadir}/html
-    manualdir:     ${datadir}/manual
-    cgidir:        ${datadir}/cgi-bin
-    includedir:    ${prefix}/include/apache
-    localstatedir: /var
-    runtimedir:    ${localstatedir}/run
-    logfiledir:    ${localstatedir}/log/httpd
-    proxycachedir: ${localstatedir}/cache/httpd
-</Layout>     
-
-#   According to the /opt filesystem conventions
-<Layout opt>
-    prefix:        /opt/apache
-    exec_prefix:   ${prefix}
-    bindir:        ${exec_prefix}/bin
-    sbindir:       ${exec_prefix}/sbin
-    libexecdir:    ${exec_prefix}/libexec
-    mandir:        ${prefix}/man
-    sysconfdir:    /etc${prefix}
-    datadir:       ${prefix}/share
-    installbuilddir: ${datadir}/build
-    errordir:      ${datadir}/error
-    iconsdir:      ${datadir}/icons
-    htdocsdir:     ${datadir}/htdocs
-    manualdir:     ${datadir}/manual
-    cgidir:        ${datadir}/cgi-bin
-    includedir:    ${prefix}/include
-    localstatedir: /var${prefix}
-    runtimedir:    ${localstatedir}/run
-    logfiledir:    ${localstatedir}/logs
-    proxycachedir: ${localstatedir}/proxy
-</Layout>
-
-#  BeOS layout...
-<Layout beos>
-    prefix:        /boot/home/apache
-    exec_prefix:   ${prefix}
-    bindir:        ${exec_prefix}/bin
-    sbindir:       ${exec_prefix}/bin
-    libexecdir:    ${exec_prefix}/libexec
-    mandir:        ${prefix}/man
-    sysconfdir:    ${prefix}/conf
-    datadir:       ${prefix}
-    installbuilddir: ${datadir}/build
-    errordir:      ${datadir}/error
-    iconsdir:      ${datadir}/icons
-    htdocsdir:     ${datadir}/htdocs
-    manualdir:     ${datadir}/manual
-    cgidir:        ${datadir}/cgi-bin
-    includedir:    ${prefix}/include
-    localstatedir: ${prefix}
-    runtimedir:    ${localstatedir}/logs
-    logfiledir:    ${localstatedir}/logs
-    proxycachedir: ${localstatedir}/proxy
-</Layout>
-
-#   SuSE 6.x layout
-<Layout SuSE>
-    prefix:        /usr
-    exec_prefix:   ${prefix}
-    bindir:        ${prefix}/bin
-    sbindir:       ${prefix}/sbin
-    libexecdir:    ${prefix}/lib/apache
-    mandir:        ${prefix}/man
-    sysconfdir:    /etc/httpd
-    datadir:       /usr/local/httpd
-    installbuilddir: ${datadir}/build
-    errordir:      ${datadir}/error
-    iconsdir:      ${datadir}/icons
-    htdocsdir:     ${datadir}/htdocs
-    manualdir:     ${datadir}/manual
-    cgidir:        ${datadir}/cgi-bin
-    includedir:    ${prefix}/include/apache
-    localstatedir: /var
-    runtimedir:    ${localstatedir}/run
-    logfiledir:    ${localstatedir}/log/httpd
-    proxycachedir: ${localstatedir}/cache/httpd
-</Layout>
-
-#   BSD/OS layout
-<Layout BSDI>
-    prefix:        /var/www
-    exec_prefix:   /usr/contrib
-    bindir:        ${exec_prefix}/bin
-    sbindir:       ${exec_prefix}/bin
-    libexecdir:    ${exec_prefix}/libexec/apache
-    mandir:        ${exec_prefix}/man
-    sysconfdir:    ${prefix}/conf
-    datadir:       ${prefix}
-    installbuilddir: ${datadir}/build
-    errordir:      ${datadir}/error
-    iconsdir:      ${datadir}/icons
-    htdocsdir:     ${datadir}/htdocs
-    manualdir:     ${datadir}/manual
-    cgidir:        ${datadir}/cgi-bin
-    includedir:    ${exec_prefix}/include/apache
-    localstatedir: /var
-    runtimedir:    ${localstatedir}/run
-    logfiledir:    ${localstatedir}/log/httpd
-    proxycachedir: ${localstatedir}/proxy
-</Layout>
-
-#   Solaris 8 Layout
-<Layout Solaris>
-    prefix:        /usr/apache
-    exec_prefix:   ${prefix}
-    bindir:        ${exec_prefix}/bin
-    sbindir:       ${exec_prefix}/bin
-    libexecdir:    ${exec_prefix}/libexec
-    mandir:        ${exec_prefix}/man
-    sysconfdir:    /etc/apache
-    datadir:       /var/apache
-    installbuilddir: ${datadir}/build
-    errordir:      ${datadir}/error
-    iconsdir:      ${datadir}/icons
-    htdocsdir:     ${datadir}/htdocs
-    manualdir:     ${datadir}/manual
-    cgidir:        ${datadir}/cgi-bin
-    includedir:    ${exec_prefix}/include
-    localstatedir: ${prefix}
-    runtimedir:    /var/run
-    logfiledir:    ${datadir}/logs
-    proxycachedir: ${datadir}/proxy
-</Layout>
-
-#   OpenBSD Layout
-<Layout OpenBSD>
-    prefix:        /var/www
-    exec_prefix:   /usr
-    bindir:        ${exec_prefix}/bin
-    sbindir:       ${exec_prefix}/sbin
-    libexecdir:    ${exec_prefix}/lib/apache/modules
-    mandir:        ${exec_prefix}/share/man
-    sysconfdir:    ${prefix}/conf
-    datadir:       ${prefix}
-    installbuilddir: ${prefix}/build
-    errordir:      ${prefix}/error
-    iconsdir:      ${prefix}/icons
-    htdocsdir:     ${prefix}/htdocs
-    manualdir:     ${datadir}/manual
-    cgidir:        ${prefix}/cgi-bin
-    includedir:    ${exec_prefix}/lib/apache/include
-    localstatedir: ${prefix}
-    runtimedir:    ${prefix}/logs
-    logfiledir:    ${prefix}/logs
-    proxycachedir: ${prefix}/proxy
-</Layout>
-
-# Debian layout
-<Layout Debian>
-    prefix:        
-    exec_prefix:   ${prefix}/usr
-    bindir:        ${exec_prefix}/bin
-    sbindir:       ${exec_prefix}/sbin
-    libexecdir:    ${exec_prefix}/lib/apache2/modules
-    mandir:        ${exec_prefix}/share/man
-    sysconfdir:    ${prefix}/etc/apache2
-    datadir:       ${exec_prefix}/share/apache2
-    iconsdir:      ${datadir}/icons
-    htdocsdir:     ${prefix}/usr/share/apache2/default-site/htdocs
-    manualdir:     ${htdocsdir}/manual
-    cgidir:        ${prefix}/usr/lib/cgi-bin
-    includedir:    ${exec_prefix}/include/apache2
-    localstatedir: ${prefix}/var/run
-    runtimedir:    ${prefix}/var/run
-    logfiledir:    ${prefix}/var/log/apache2
-    proxycachedir: ${prefix}/var/cache/apache2/proxy
-    infodir:       ${exec_prefix}/share/info
-    installbuilddir: ${prefix}/etc/apache2/build
-    errordir:      ${datadir}/error
-</Layout>
diff --git a/configure.in b/configure.in
deleted file mode 100644
index a8e74c7..0000000
--- a/configure.in
+++ /dev/null
@@ -1,485 +0,0 @@
-dnl
-dnl Autoconf configuration for Apache httpd
-dnl
-dnl     Use ./buildconf to produce a configure script
-dnl
-
-AC_PREREQ(2.13)
-AC_INIT(ABOUT_APACHE)
-
-AC_CONFIG_HEADER(include/ap_config_auto.h)
-AC_CONFIG_AUX_DIR(srclib/apr/build)
-
-dnl #
-dnl # Include our own M4 macros along with those for APR and libtool
-dnl #
-sinclude(srclib/apr/build/apr_common.m4)
-sinclude(srclib/apr/build/apr_network.m4)
-sinclude(srclib/apr/build/apr_threads.m4)
-sinclude(acinclude.m4)
-
-dnl XXX we can't just use AC_PREFIX_DEFAULT because that isn't subbed in
-dnl by configure until it is too late.  Is that how it should be or not?
-dnl Something seems broken here.                                               
-AC_PREFIX_DEFAULT(/usr/local/apache2)
-
-dnl Get the layout here, so we can pass the required variables to apr
-APACHE_ENABLE_LAYOUT
-
-dnl reparse the configure arguments.
-APACHE_PARSE_ARGUMENTS
-
-dnl Save user-defined environment settings for later restoration
-dnl
-APR_SAVE_THE_ENVIRONMENT(CPPFLAGS)
-APR_SAVE_THE_ENVIRONMENT(CFLAGS)
-APR_SAVE_THE_ENVIRONMENT(CXXFLAGS)
-APR_SAVE_THE_ENVIRONMENT(LDFLAGS)
-APR_SAVE_THE_ENVIRONMENT(LIBS)
-APR_SAVE_THE_ENVIRONMENT(INCLUDES)
-
-dnl Generate ./config.nice for reproducing runs of configure
-dnl
-APR_CONFIG_NICE(config.nice)
-
-nl='
-'
-
-dnl ## Run configure for packages Apache uses
-
-dnl shared library support for these packages doesn't currently
-dnl work on some platforms
-
-AC_CANONICAL_SYSTEM
-
-orig_prefix="$prefix"
-
-echo $ac_n "${nl}Configuring Apache Portable Runtime library ...${nl}"
-
-APR_SUBDIR_CONFIG(srclib/apr, "$apache_apr_flags --prefix=$prefix --exec-prefix=$exec_prefix --libdir=$libdir --bindir=$bindir --datadir=$datadir --with-installbuilddir=$installbuilddir")
-
-echo $ac_n "${nl}Configuring Apache Portable Runtime Utility library...${nl}"
-
-APR_SUBDIR_CONFIG(srclib/apr-util, "--with-apr=../apr --prefix=$prefix --exec-prefix=$exec_prefix --libdir=$libdir --bindir=$bindir")
-
-echo $ac_n "${nl}Configuring PCRE regular expression library ...${nl}"
-
-APR_SUBDIR_CONFIG(srclib/pcre, "--prefix=$prefix --exec-prefix=$exec_prefix --libdir=$libdir --bindir=$bindir")
-
-echo $ac_n "${nl}Configuring Apache httpd ...${nl}"
-
-echo $ac_n "obtaining flag settings from the sub-configures...${nl}"
-. ./srclib/apr/APRVARS
-
-dnl Now that we have APR's EXTRA_flags in our environment, move them over
-dnl to the normal variables to avoid duplications and use them for testing.
-dnl We ignore EXTRA_INCLUDES because our own includes will encompass them.
-dnl
-APR_ADDTO(CFLAGS, $EXTRA_CFLAGS)
-APR_ADDTO(CPPFLAGS, $EXTRA_CPPFLAGS)
-APR_ADDTO(LDFLAGS, $EXTRA_LDFLAGS)
-APR_ADDTO(LIBS, $EXTRA_LIBS)
-EXTRA_CFLAGS=
-EXTRA_CPPFLAGS=
-EXTRA_LDFLAGS=
-EXTRA_LIBS=
-EXTRA_INCLUDES=
-
-dnl Absolute source/build directory
-abs_srcdir=`(cd $srcdir && pwd)`
-abs_builddir=`pwd`
-
-dnl If the source dir is not equal to the build dir, 
-dnl then we are running in VPATH mode.
-
-if test "$abs_builddir" != "$abs_srcdir"; then
-  USE_VPATH=1
-  APR_ADDTO(INCLUDES, [-I. -I\$(srcdir) -I\$(top_builddir)/os/\$(OS_DIR) -I\$(top_srcdir)/os/\$(OS_DIR) -I\$(top_builddir)/server/mpm/\$(MPM_NAME) -I\$(top_srcdir)/server/mpm/\$(MPM_NAME) -I\$(top_builddir)/modules/http -I\$(top_srcdir)/modules/http -I\$(top_srcdir)/modules/proxy -I\$(top_builddir)/include -I\$(top_srcdir)/include -I\$(top_builddir)/srclib/apr/include -I\$(top_srcdir)/srclib/apr/include -I\$(top_builddir)/srclib/apr-util/include -I\$(top_srcdir)/srclib/apr-util/include])
-else
-  APR_ADDTO(INCLUDES, [-I. -I\$(top_srcdir)/os/\$(OS_DIR) -I\$(top_srcdir)/server/mpm/\$(MPM_NAME) -I\$(top_srcdir)/modules/http -I\$(top_srcdir)/modules/proxy -I\$(top_srcdir)/include -I\$(top_srcdir)/srclib/apr/include -I\$(top_srcdir)/srclib/apr-util/include])
-fi
-
-echo $ac_n "${nl}Applying OS-specific hints for httpd ...${nl}"
-
-case $host in
-  *os2*)
-      # Use a custom made libtool replacement
-      echo "using aplibtool"
-      LIBTOOL="$abs_srcdir/srclib/apr/build/aplibtool"
-      SH_LIBTOOL="$LIBTOOL --shared --export-all"
-      SH_LIBS="\$(ALL_LIBS)"
-      CORE_IMPLIB_FILE="ApacheCoreOS2.la"
-      CORE_IMPLIB="$abs_srcdir/server/$CORE_IMPLIB_FILE"
-      MK_IMPLIB="emximp"
-      other_targets="$other_targets os2core"
-      INSTALL_PROG_FLAGS="-e .exe"
-      SHLTCFLAGS=""
-      LTCFLAGS=""
-      ;;
-  *)
-      if test "x$LTFLAGS" = "x"; then
-          LTFLAGS='--silent'
-      fi
-      LIBTOOL='$(SHELL) $(top_builddir)/srclib/apr/libtool $(LTFLAGS)'
-      libtoolversion=`$abs_builddir/srclib/apr/libtool --version`
-      case $libtoolversion in
-          *1.4*)
-              SH_LIBTOOL='$(LIBTOOL)'
-              SHLTCFLAGS="-prefer-pic"
-              LTCFLAGS="-prefer-non-pic -static"
-              ;;
-          *)
-              SH_LIBTOOL='$(SHELL) $(top_builddir)/shlibtool $(LTFLAGS)'
-              SHLTCFLAGS=""
-              LTCFLAGS=""
-              ;;
-      esac
-      ;;
-esac
-APACHE_SUBST(SHLTCFLAGS)
-APACHE_SUBST(LTCFLAGS)
-
-AP_SIG_GRACEFUL=USR1
-
-case $host in
-  *-apple-aux3*)
-      APR_SETVAR(APACHE_MPM, [prefork])
-      APR_SETVAR(SINGLE_LISTEN_UNSERIALIZED_ACCEPT, [1])
-      ;;
-  *-beos*)
-      APR_SETVAR(APACHE_MPM, [beos])
-      APR_SETVAR(SINGLE_LISTEN_UNSERIALIZED_ACCEPT, [1])
-      ;;
-  *os2_emx*)
-      APR_SETVAR(APACHE_MPM, [mpmt_os2])
-      APR_SETVAR(SINGLE_LISTEN_UNSERIALIZED_ACCEPT, [1])
-      ;;
-  *-linux-*)
-      case `uname -r` in
-        2.0* ) 
-            AP_SIG_GRACEFUL=WINCH
-            ;;
-        2.[[2-9]]* ) 
-            APR_SETVAR(SINGLE_LISTEN_UNSERIALIZED_ACCEPT, [1])
-            ;;
-        * )
-            ;;
-      esac
-      ;;
-  *486-*-bsdi* | *-netbsd* | *-freebsd* | *-apple-darwin* | *-dec-osf* | *-qnx)
-      APR_SETVAR(SINGLE_LISTEN_UNSERIALIZED_ACCEPT, [1])
-      ;;
-  *-solaris2*)
-      dnl This is a hack -- we should be using AC_TRY_RUN instead
-      ap_platform_runtime_link_flag="-R"
-      dnl solaris 8 and above don't have a thundering herd
-      dnl not sure about rev's before this one.
-      case `uname -r` in
-        5.[567]*)
-            ;;
-        * )
-            APR_SETVAR(SINGLE_LISTEN_UNSERIALIZED_ACCEPT, [1])
-            ;;
-      esac
-      ;;
-  *cygwin*)
-      APR_SETVAR(APACHE_MPM, [prefork])
-      APR_SETVAR(SINGLE_LISTEN_UNSERIALIZED_ACCEPT, [1])
-      ;;
-esac
-
-dnl
-dnl Process command line arguments. This is done early in the process so the
-dnl user can get feedback quickly in case of an error.
-dnl
-dnl ### need to move some of the arguments "up here"
-
-dnl ## Check for programs
-
-AC_PATH_PROG(RM, rm)
-AC_PROG_AWK
-AC_PROG_CC
-AC_PROG_CPP
-AC_PROG_INSTALL
-AC_PROG_LN_S
-AC_CHECK_TOOL(RANLIB, ranlib, true)
-dnl AC_PATH_PROG(PERL_PATH, perl)
-
-dnl various OS checks that apparently set required flags
-AC_AIX
-AC_ISC_POSIX
-AC_MINIX
-
-dnl ## Check for libraries
-
-dnl ## Check for header files
-
-dnl I think these are just used all over the place, so just check for
-dnl them at the base of the tree. If some are specific to a single
-dnl directory, they should be moved (Comment #Spoon)
-
-dnl Regarding standard header files: AC_HEADER_STDC doesn't set symbols
-dnl HAVE_STRING_H, HAVE_STDLIB_H, etc., so those are checked for
-dnl explicitly so that the normal HAVE_xxx_H symbol is defined.
-
-AC_HEADER_STDC
-AC_CHECK_HEADERS( \
-string.h \
-limits.h \
-unistd.h \
-sys/socket.h \
-pwd.h \
-grp.h \
-strings.h \
-sys/processor.h \
-sys/sem.h
-)
-AC_HEADER_SYS_WAIT
-
-dnl ## Check for typedefs, structures, and compiler characteristics.
-
-AC_C_CONST
-if test "$ac_cv_prog_gcc" = "yes"; then
-  APR_ADDTO(NOTEST_CPPFLAGS,-DAP_HAVE_DESIGNATED_INITIALIZER)
-fi
-
-dnl ## Check for library functions
-
-dnl See Comment #Spoon
-
-AC_CHECK_FUNCS( \
-getpwnam \
-getgrnam \
-initgroups \
-bindprocessor \
-timegm \
-)
-
-dnl ## Check for the tm_gmtoff field in struct tm to get the timezone diffs
-AC_CACHE_CHECK([for tm_gmtoff in struct tm], ac_cv_struct_tm_gmtoff,
-[AC_TRY_COMPILE([#include <sys/types.h>
-#include <time.h>], [struct tm tm; tm.tm_gmtoff;],
-  ac_cv_struct_tm_gmtoff=yes, ac_cv_struct_tm_gmtoff=no)])
-if test "$ac_cv_struct_tm_gmtoff" = "yes"; then
-    AC_DEFINE(HAVE_GMTOFF)
-fi
-
-dnl ## Set up any appropriate OS-specific environment variables for apachectl
-
-case $host in
-    *aix*)
-        # for 32-bit builds, increase MAXDATA to allow lots of threads
-        if test x$OBJECT_MODE != x64; then
-            OS_SPECIFIC_VARS="set LDR_CNTRL=\"MAXDATA=0x80000000\" ; export LDR_CNTRL ;"
-        fi
-        OS_SPECIFIC_VARS="$OS_SPECIFIC_VARS set AIXTHREAD_SCOPE=S ; export AIXTHREAD_SCOPE"
-        ;;
-    *os390*)
-        OS_SPECIFIC_VARS="export _CEE_RUNOPTS=\"STACK(,,ANY)\" ; export _EDC_ADD_ERRNO2=1"
-        ;;
-    *)
-        OS_SPECIFIC_VARS=""
-esac
-      
-AC_ARG_WITH(port,APACHE_HELP_STRING(--with-port=PORT,Port on which to listen (default is 80)),
-        [if test "$withval" = "yes"; then AC_MSG_ERROR('option --with-port requires a value (the TCP port number)'); else PORT="$withval"; fi],
-	[PORT=80])
-
-AC_ARG_ENABLE(maintainer-mode,APACHE_HELP_STRING(--enable-maintainer-mode,Turn on debugging and compile time warnings),
-[
-  APR_ADDTO(CPPFLAGS, -DAP_DEBUG)
-])dnl
-
-prefix="$orig_prefix"
-APACHE_ENABLE_MODULES
-
-dnl reading config stubs
-esyscmd(./build/config-stubs .)
-
-APACHE_SUBST(progname)
-APACHE_SUBST(MPM_LIB)
-APACHE_SUBST(OS)
-APACHE_SUBST(OS_DIR)
-APACHE_SUBST(BUILTIN_LIBS)
-APACHE_SUBST(SHLIBPATH_VAR)
-APACHE_SUBST(OS_SPECIFIC_VARS)
-
-PRE_SHARED_CMDS='echo ""'
-POST_SHARED_CMDS='echo ""'
-
-dnl apache_need_shared tells us if Apache modules are being built as DSOs
-
-if test "$apache_need_shared" = "yes"; then
-  if test -f $ac_aux_dir/ltconfig; then
-    $SHELL $ac_aux_dir/ltconfig --output=shlibtool --disable-static --srcdir=$ac_aux_dir --cache-file=./config.cache $ac_aux_dir/ltmain.sh
-  fi
-  shared_build="shared-build"
-fi
-
-dnl enable_so tells us if *any* modules can be built as DSOs
-
-if test "$enable_so" = "yes"; then
-  case $host in
-    *-ibm-aix*)
-      HTTPD_LDFLAGS="$HTTPD_LDFLAGS -Wl,-uXML_Parse -Wl,-bE:$abs_builddir/server/httpd.exp"
-      SH_LDFLAGS="$SH_LDFLAGS \$(EXTRA_LDFLAGS) \$(EXTRA_LIBS)"
-      UTIL_LDFLAGS="$UTIL_LDFLAGS -Wl,-uXML_Parse"
-      ;;
-    *beos)
-      SH_LDFLAGS='$(top_builddir)/_APP_'
-      PRE_SHARED_CMDS='ln -s $(top_builddir)/httpd $(top_builddir)/_APP_'
-      POST_SHARED_CMDS='rm $(top_builddir)/_APP_'
-      ;;
-    *os390)
-      HTTPD_LDFLAGS="$HTTPD_LDFLAGS --main=$abs_srcdir/server/main.o --core-dll=$abs_srcdir/apachecore.dll"
-      SH_LDFLAGS="$SH_LDFLAGS --core-dll=$abs_srcdir/apachecore.dll"
-  esac
-fi
-
-APACHE_SUBST(PRE_SHARED_CMDS)
-APACHE_SUBST(POST_SHARED_CMDS)
-APACHE_SUBST(shared_build)
-
-AC_ARG_WITH(program-name,
-APACHE_HELP_STRING(--with-program-name,alternate executable name),[
-  progname="$withval" ], [
-  progname="httpd"] )
-
-# SuExec parameters
-AC_ARG_WITH(suexec-bin,
-APACHE_HELP_STRING(--with-suexec-bin,Path to suexec binary),[
-  AC_DEFINE_UNQUOTED(SUEXEC_BIN, "$withval", [Path to suexec binary] )
-] )
-
-AC_ARG_WITH(suexec-caller,
-APACHE_HELP_STRING(--with-suexec-caller,User allowed to call SuExec),[
-  AC_DEFINE_UNQUOTED(AP_HTTPD_USER, "$withval", [User allowed to call SuExec] ) ] )
-
-AC_ARG_WITH(suexec-userdir,
-APACHE_HELP_STRING(--with-suexec-userdir,User subdirectory),[
-  AC_DEFINE_UNQUOTED(AP_USERDIR_SUFFIX, "$withval", [User subdirectory] ) ] )
-
-AC_ARG_WITH(suexec-docroot,
-APACHE_HELP_STRING(--with-suexec-docroot,SuExec root directory),[
-  AC_DEFINE_UNQUOTED(AP_DOC_ROOT, "$withval", [SuExec root directory] ) ] )
-
-AC_ARG_WITH(suexec-uidmin,
-APACHE_HELP_STRING(--with-suexec-uidmin,Minimal allowed UID),[
-  AC_DEFINE_UNQUOTED(AP_UID_MIN, $withval, [Minimum allowed UID] ) ] )
-
-AC_ARG_WITH(suexec-gidmin,
-APACHE_HELP_STRING(--with-suexec-gidmin,Minimal allowed GID),[
-  AC_DEFINE_UNQUOTED(AP_GID_MIN, $withval, [Minimum allowed GID] ) ] )
-
-AC_ARG_WITH(suexec-logfile,
-APACHE_HELP_STRING(--with-suexec-logfile,Set the logfile),[
-  AC_DEFINE_UNQUOTED(AP_LOG_EXEC, "$withval", [SuExec log file] ) ] )
-
-AC_ARG_WITH(suexec-safepath,
-APACHE_HELP_STRING(--with-suexec-safepath,Set the safepath),[
-  AC_DEFINE_UNQUOTED(AP_SAFE_PATH, "$withval", [safe shell path for SuExec] ) ] )
-
-AC_ARG_WITH(suexec-umask,
-APACHE_HELP_STRING(--with-suexec-umask,umask for suexec'd process),[
-  AC_DEFINE_UNQUOTED(AP_SUEXEC_UMASK, 0$withval, [umask for suexec'd process] ) ] )
-
-dnl AP_LIBS specifies the actual libraries. note we have some required libs.
-AP_LIBS="$abs_builddir/srclib/pcre/libpcre.la $abs_builddir/srclib/apr-util/libaprutil.la $AP_LIBS"
-
-dnl APR should go after the other libs, so the right symbols can be picked up
-AP_LIBS="$AP_LIBS $abs_builddir/srclib/apr/libapr.la"
-APACHE_SUBST(AP_LIBS)
-
-AC_DEFINE(AP_USING_AUTOCONF, 1,
-		[Using autoconf to configure Apache])
-
-if test "$SINGLE_LISTEN_UNSERIALIZED_ACCEPT" = "1"; then
-    AC_DEFINE(SINGLE_LISTEN_UNSERIALIZED_ACCEPT, 1, 
-              [This platform doesn't suffer from the thundering herd problem])
-fi
-
-AC_DEFINE_UNQUOTED(AP_SIG_GRACEFUL, SIG$AP_SIG_GRACEFUL, [Signal used to gracefully restart])
-AC_DEFINE_UNQUOTED(AP_SIG_GRACEFUL_STRING, "SIG$AP_SIG_GRACEFUL", [Signal used to gracefully restart (as a quoted string)])
-AC_DEFINE_UNQUOTED(AP_SIG_GRACEFUL_SHORT, $AP_SIG_GRACEFUL, [Signal used to gracefully restart (without SIG prefix)])
-AP_SIG_GRACEFUL_SHORT=$AP_SIG_GRACEFUL
-AP_SIG_GRACEFUL=SIG$AP_SIG_GRACEFUL_SHORT
-AC_SUBST(AP_SIG_GRACEFUL)
-AC_SUBST(AP_SIG_GRACEFUL_STRING)
-AC_SUBST(AP_SIG_GRACEFUL_SHORT)
-
-dnl check for endianness
-if test "$cross_compiling" = "no"; then
-  AC_C_BIGENDIAN
-else
-  AC_DEFINE(AP_UNKNOWN_BYTE_ORDER,1,
-		[byte order is unknown due to cross-compilation])
-fi
-
-APACHE_FAST_OUTPUT(Makefile modules/Makefile srclib/Makefile) 
-APACHE_FAST_OUTPUT(os/beos/Makefile os/os2/Makefile os/Makefile)
-APACHE_FAST_OUTPUT(os/unix/Makefile server/Makefile)
-APACHE_FAST_OUTPUT(support/Makefile srclib/pcre/Makefile)
-
-if test -d ./test; then
-    APACHE_FAST_OUTPUT(test/Makefile)
-fi
-
-dnl get the exported vars from APRUTIL
-. ./srclib/apr-util/export_vars.sh
-APR_ADDTO(LIBS, $APRUTIL_EXPORT_LIBS)
-APR_ADDTO(INCLUDES, $APRUTIL_EXPORT_INCLUDES)
-APR_ADDTO(LDFLAGS, $APRUTIL_LDFLAGS)
-AP_LIBS="$AP_LIBS $LIBTOOL_LIBS"
-
-dnl ## Finalize the variables
-echo $ac_n "${nl}Restore user-defined environment settings...${nl}"
-
-APR_RESTORE_THE_ENVIRONMENT(CPPFLAGS, EXTRA_)
-APR_RESTORE_THE_ENVIRONMENT(CFLAGS, EXTRA_)
-APR_RESTORE_THE_ENVIRONMENT(CXXFLAGS, EXTRA_)
-APR_RESTORE_THE_ENVIRONMENT(LDFLAGS, EXTRA_)
-APR_RESTORE_THE_ENVIRONMENT(LIBS, EXTRA_)
-APR_RESTORE_THE_ENVIRONMENT(INCLUDES, EXTRA_)
-
-echo $ac_n "${nl}Construct makefiles and header files...${nl}"
-
-APACHE_GEN_CONFIG_VARS
-
-dnl ## Build modules.c
-rm -f modules.c
-echo $MODLIST | $AWK -f $srcdir/build/build-modules-c.awk > modules.c
-
-APR_EXPAND_VAR(ap_prefix, $prefix)
-AC_DEFINE_UNQUOTED(HTTPD_ROOT, "${ap_prefix}",
-	[Root directory of the Apache install area])
-APR_EXPAND_VAR(ap_sysconfdir, $sysconfdir)
-APR_PATH_RELATIVE(rel_sysconfdir, $ap_sysconfdir, $prefix)
-AC_DEFINE_UNQUOTED(SERVER_CONFIG_FILE, "${rel_sysconfdir}/${progname}.conf",
-	[Location of the config file, relative to the Apache root directory])
-AC_DEFINE_UNQUOTED(APACHE_MPM_DIR, "$MPM_DIR",
-	[Location of the source for the current MPM])
-
-perlbin=`$ac_aux_dir/PrintPath perl`
-if test "x$perlbin" = "x"; then
-    perlbin="/replace/with/path/to/perl/interpreter"
-fi
-AC_SUBST(perlbin)
-
-dnl If we are running on BSD/OS, we need to use the BSD .include syntax.
-
-BSD_MAKEFILE=no
-case $host in
-*bsdi*)
-    # Check whether they've installed GNU make
-    if make --version > /dev/null 2>&1; then
-        true
-    else
-        BSD_MAKEFILE=yes
-    fi
-    ;;
-esac
-
-AC_OUTPUT($APACHE_OUTPUT_FILES support/apxs support/apachectl support/dbmmanage support/envvars-std support/log_server_status support/logresolve.pl support/phf_abuse_log.cgi support/split-logfile build/rules.mk,[true],[
-  APACHE_GEN_MAKEFILES
-])
-
diff --git a/docs/STATUS b/docs/STATUS
deleted file mode 100644
index 1577146..0000000
--- a/docs/STATUS
+++ /dev/null
@@ -1,154 +0,0 @@
-Apache HTTP Server 2.0 Documentation Status File.
-Last modified: $Date: 2002/02/17 21:09:03 $
-
-If you are interested in helping accomplish some of the tasks on this
-list or otherwise improving the documentation, please join the
-apache-docs mailing list by mailing to 
-apache-docs-subscribe@apache.org
-
-For more information on how to contribute to the Apache Documentation
-Project, please see http://httpd.apache.org/docs-project/, and
-http://apache-server.com/tutorials/ATdocs-project.html for an excellent
-tutorial on how to get started with making your contribution.
-
-              ------------------------------
-
-The module docs are being converted to a new xml format.  The format
-is described at: http://httpd.apache.org/docs-project/docsformat.html
-Help with the conversion is needed.
-
-- IPv6: need to update some directives to show correct syntax for IPv6
-    - Listen
-    - NameVirtualHost/VirtualHost
-    - Allow/Deny
-
-- modules docs
-    - mod_suexec: very little documentation
-    - mod_proxy: updates for 2.0
-    - mod_status: updates for 2.0
-    - mod_example: updates for 2.0
-    
-- man pages
-    - Some of the man pages need to be updated for 2.0.  At least
-      the httpd man page appears to be outdated, and perhaps other.
-      After this is done, the manual/programs/ versions can be
-      regenerated.
-
-- MPM documentation
-   - Each MPM needs to have a documentation file in manual/mod/
-     which lists the directives it provides, and some details
-     about its operation.
-        Status: Initial outlines done.  Much more details need to be
-          filled in.
-          - Non unix/windows MPMs still need to be completed.
-          - worker has no docs
-          - the perchild directives in threaded/worker need docs
-
-   - Individual docs will need some cleanup. 
-        Status:  What docs still need to be touched here?
-                 - invoking.html has had a first-pass cleaning done.
-                 - misc/perf-tuning.html - needs major rewrite for 2.0
-                 - misc/tutorials.html - mostly not relevant to 2.0
-                 - misc/stopping.html
-                 - misc/rewriteguide.html - needs cleaning in 1.3 and 2.0
-                 - misc/known_client_problems.html - mostly ancient
-
-- New build process.
-    - install.html has had a first-pass rewrite, but needs more
-      work to be complete, and needs to track changes/bug-fixes
-      in the build system.
-
-- Documentation of new features.
-   - This will probably require more input from new-httpd, since
-     not many people here follow the development process close
-     enough to know what is going on.
-
-- API documentation
-    Status: Ben Laurie has written some hooks documentation
-
-- Translations
-    We appear to have people working on translation into the following
-    languages.  These may just be the 'it worked' page, but if so
-    the authors of those should perhaps be contacted to help do the
-    rest.. :-)  Note that this list is NOT identical to that for the
-    1.3 documentation project..!
-
-  [Should we attempt to get a known-current authorlist together? --jsl]
-
-    - Catalan (.ca)
-    - Czech Republic (.cz)
-    - German (.de)
-    - Danish (.dk)
-    - Estonia (.ee)
-    - Greek (.el)
-    - Spanish (.es)
-    - Estonian (.et)
-    - French (.fr)
-    - Hebrew (.he.iso8859-8)
-    - Italian (.it)
-    - Japanese (.ja.iso2022-jp, .ja.jis)
-    - Korean (.kr.iso2022-kr, .kt.iso-kr)
-    - ? (.ltz)
-    - ? (.lu)
-    - Dutch (.nl)
-    - Norwegian (.no)
-    - Polish (.po.iso-pl)
-    - Portuguese (.pt)
-    - Portuguese [Brasilian] (.pt-br)
-    - Russian (.ru.cp-1251, .ru.cp866, .ru.iso-ru, .ru.koi8-r, .ru.ucs[248])
-    - Swedish (.se)
-    - Twi (.tw, .tw.big5)
-      (is that supposed to be Chinese/Taiwanese?  Because if so, it is using
-      the code reserved for Twi..)
-    [Need this clarified --jsl]
-
-
-New User documentation
-======================
-
-* Directory Handling (mod_dir/mod_autoindex/etc)
-
-* Sections (<Directory>/<Files>/<Location>)
-
-* public_html - tutorial covering what is involved in helping users set
-  up web serving out of their home directory.
-
-* .htaccess - Perhaps as simple as an auto-generated listing of what
-  directives are permitted in .htaccess files. Would be nice if common
-  examples (authentication, adding SSI or CGI capabilities, etc) could
-  be given as well.
-
-
-Documentation improvements
-==========================
-
-* Improving the "security docs"
-
-  - More content and better organisation.
-
-* General cleaning and improving of module docs
-
-* Making the directive definitions "less terse" (i.e., adding more
-  examples and details to the definitions of the directives)
-
-  - We'll need to audit these and find out which ones need munging, as
-    some of it looks ok.  --jsl
-
-  - Every directive should have at least one example of usage, except
-    those directives which list all possible usages in the Syntax
-    description. Some module docs have been reviewed for this, and
-    mod/core.html has been checked up through the <Limit> directive.
-    --rcb
-
-* Making site-specific enhancements easier, including a documented
-  and robust way for 3P module docco to be added -- and have it
-  survive a server docco upgrade
-
-  - This could be something a simple and hackish as a manual/extra/
-    directory (a la the 1.3 src/modules/extra/ directory) and a
-    script in the support directory that scans the files there and
-    updates the manual indices.  (We do something like that now for
-    httpd.conf file with apxs [LoadModule, etc.].)
-
-
-
diff --git a/docs/cgi-examples/printenv b/docs/cgi-examples/printenv
deleted file mode 100644
index 2070743..0000000
--- a/docs/cgi-examples/printenv
+++ /dev/null
@@ -1,13 +0,0 @@
-#!/usr/local/bin/perl
-##
-##  printenv -- demo CGI program which just prints its environment
-##
-
-print "Content-type: text/plain\n\n";
-foreach $var (sort(keys(%ENV))) {
-    $val = $ENV{$var};
-    $val =~ s|\n|\\n|g;
-    $val =~ s|"|\\"|g;
-    print "${var}=\"${val}\"\n";
-}
-
diff --git a/docs/cgi-examples/test-cgi b/docs/cgi-examples/test-cgi
deleted file mode 100644
index a85631e..0000000
--- a/docs/cgi-examples/test-cgi
+++ /dev/null
@@ -1,31 +0,0 @@
-#!/bin/sh
-
-# disable filename globbing
-set -f
-
-echo Content-type: text/plain
-echo
-
-echo CGI/1.0 test script report:
-echo
-
-echo argc is $#. argv is "$*".
-echo
-
-echo SERVER_SOFTWARE = $SERVER_SOFTWARE
-echo SERVER_NAME = $SERVER_NAME
-echo GATEWAY_INTERFACE = $GATEWAY_INTERFACE
-echo SERVER_PROTOCOL = $SERVER_PROTOCOL
-echo SERVER_PORT = $SERVER_PORT
-echo REQUEST_METHOD = $REQUEST_METHOD
-echo HTTP_ACCEPT = "$HTTP_ACCEPT"
-echo PATH_INFO = "$PATH_INFO"
-echo PATH_TRANSLATED = "$PATH_TRANSLATED"
-echo SCRIPT_NAME = "$SCRIPT_NAME"
-echo QUERY_STRING = "$QUERY_STRING"
-echo REMOTE_HOST = $REMOTE_HOST
-echo REMOTE_ADDR = $REMOTE_ADDR
-echo REMOTE_USER = $REMOTE_USER
-echo AUTH_TYPE = $AUTH_TYPE
-echo CONTENT_TYPE = $CONTENT_TYPE
-echo CONTENT_LENGTH = $CONTENT_LENGTH
diff --git a/docs/conf/highperformance-std.conf b/docs/conf/highperformance-std.conf
deleted file mode 100755
index 2d35616..0000000
--- a/docs/conf/highperformance-std.conf
+++ /dev/null
@@ -1,69 +0,0 @@
-# Ha, you're reading this config file looking for the easy way out!
-# "how do I make my apache server go really really fast??"
-# Well you could start by reading the /manual/misc/perf-tuning.html
-# page.  But, we'll give you a head start.
-#
-# This config file is small, it is probably not what you'd expect on a
-# full featured internet webserver with multiple users.  But it's
-# probably a good starting point for any folks interested in testing
-# performance.
-#
-# To run this config you'll need to use something like:
-#     httpd -f @@ServerRoot@@/conf/highperformance.conf
-
-Listen 80
-ServerRoot @@ServerRoot@@
-DocumentRoot @@ServerRoot@@/htdocs
-
-User  nobody
-# If you're not on Linux, you'll probably need to change Group
-Group nobody
-
-<IfModule prefork.c>
-MaxClients       150
-StartServers     5
-MinSpareServers  5
-MaxSpareServers 10
-</IfModule>
-
-<IfModule worker.c>
-MaxClients       8
-StartServers     3
-MinSpareThreads  5
-MaxSpareThreads 10
-ThreadsPerChild 25
-</IfModule>
-
-# Assume no memory leaks at all
-MaxRequestsPerChild 0
-
-# it's always nice to know the server has started
-ErrorLog logs/error_log
-
-# Some benchmarks require logging, which is a good requirement.  Uncomment
-# this if you need logging.
-#TransferLog logs/access_log
-
-<Directory />
-    # The server can be made to avoid following symbolic links,
-    # to make security simpler. However, this takes extra CPU time,
-    # so we will just let it follow symlinks.
-    Options FollowSymLinks
-
-    # Don't check for .htaccess files in each directory - they slow
-    # things down
-    AllowOverride None
-
-    # If this was a real internet server you'd probably want to
-    # uncomment these:
-    #order deny,allow
-    #deny from all
-</Directory>
-
-# If this was a real internet server you'd probably want to uncomment this:
-#<Directory "@@ServerRoot@@/htdocs">
-#    order allow,deny
-#    allow from all
-#</Directory>
-
-# OK that's enough hints.  Read the documentation if you want more.
diff --git a/docs/conf/httpd-nw.conf b/docs/conf/httpd-nw.conf
deleted file mode 100644
index ccc6a8f..0000000
--- a/docs/conf/httpd-nw.conf
+++ /dev/null
@@ -1,945 +0,0 @@
-#
-# Based upon the NCSA server configuration files originally by Rob McCool.
-#
-# This is the main Apache server configuration file.  It contains the
-# configuration directives that give the server its instructions.
-# See <URL:http://httpd.apache.org/docs-2.0/> for detailed information about
-# the directives.
-#
-# Do NOT simply read the instructions in here without understanding
-# what they do.  They're here only as hints or reminders.  If you are unsure
-# consult the online docs. You have been warned.  
-#
-# The configuration directives are grouped into three basic sections:
-#  1. Directives that control the operation of the Apache server process as a
-#     whole (the 'global environment').
-#  2. Directives that define the parameters of the 'main' or 'default' server,
-#     which responds to requests that aren't handled by a virtual host.
-#     These directives also provide default values for the settings
-#     of all virtual hosts.
-#  3. Settings for virtual hosts, which allow Web requests to be sent to
-#     different IP addresses or hostnames and have them handled by the
-#     same Apache server process.
-#
-# Configuration and logfile names: If the filenames you specify for many
-# of the server's control files begin with "/" (or "drive:/" for Win32), the
-# server will use that explicit path.  If the filenames do *not* begin
-# with "/", the value of ServerRoot is prepended -- so "logs/foo.log"
-# with ServerRoot set to "/usr/local/apache" will be interpreted by the
-# server as "/usr/local/apache/logs/foo.log".
-#
-# NOTE: Where filenames are specified, you must use forward slashes
-# instead of backslashes (e.g., "c:/apache" instead of "c:\apache").
-# If a drive letter is omitted, the drive on which Apache.exe is located
-# will be used by default.  It is recommended that you always supply
-# an explicit drive letter in absolute paths, however, to avoid
-# confusion.
-#
-
-### Section 1: Global Environment
-#
-# The directives in this section affect the overall operation of Apache,
-# such as the number of concurrent requests it can handle or where it
-# can find its configuration files.
-#
-
-#
-# ServerRoot: The top of the directory tree under which the server's
-# configuration, error, and log files are kept.
-#
-# Do NOT add a slash at the end of the directory path.
-#
-ServerRoot "@@ServerRoot@@"
-
-#
-# Timeout: The number of seconds before receives and sends time out.
-#
-Timeout 300
-
-#
-# KeepAlive: Whether or not to allow persistent connections (more than
-# one request per connection). Set to "Off" to deactivate.
-#
-KeepAlive On
-
-#
-# MaxKeepAliveRequests: The maximum number of requests to allow
-# during a persistent connection. Set to 0 to allow an unlimited amount.
-# We recommend you leave this number high, for maximum performance.
-#
-MaxKeepAliveRequests 100
-
-#
-# KeepAliveTimeout: Number of seconds to wait for the next request from the
-# same client on the same connection.
-#
-KeepAliveTimeout 15
-
-##
-## Server-Pool Size Regulation (MPM specific)
-## 
-
-# NetWare MPM
-# ThreadStackSize ...... Stack size allocated for each worker thread
-# StartThreads ......... Number of worker threads launched at server startup
-# MinSpareThreads ...... Minimum number of idle threads, to handle request spikes
-# MaxSpareThreads ...... Maximum number of idle threads
-# MaxThreads ........... Maximum number of worker threads alive at the same time
-# MaxRequestsPerChild .. Maximum  number of requests a thread serves. It is 
-#                         recommended that the default value of 0 be set for this
-#                         directive on NetWare.  This will allow the thread to 
-#                         continue to service requests indefinitely.                          
-<IfModule mpm_netware.c>
-ThreadStackSize 65536
-StartThreads 250
-MinSpareThreads 25
-MaxSpareThreads 250
-MaxThreads 1000
-MaxRequestsPerChild  0
-</IfModule>
-
-#
-# Listen: Allows you to bind Apache to specific IP addresses and/or
-# ports, in addition to the default. See also the <VirtualHost>
-# directive.
-#
-# Change this to Listen on specific IP addresses as shown below to 
-# prevent Apache from glomming onto all bound IP addresses (0.0.0.0)
-#
-#Listen 12.34.56.78:80
-Listen @@Port@@
-
-#
-# Dynamic Shared Object (DSO) Support
-#
-# To be able to use the functionality of a module which was built as a DSO you
-# have to place corresponding `LoadModule' lines at this location so the
-# directives contained in it are actually available _before_ they are used.
-# Statically compiled modules (those listed by `httpd -l') do not need
-# to be loaded here.
-#
-#LoadModule auth_anon_module modules/authanon.nlm
-#LoadModule auth_dbm_module modules/authdbm.nlm
-#LoadModule auth_digest_module modules/digest.nlm
-#LoadModule cern_meta_module modules/cernmeta.nlm
-#LoadModule dav_module modules/mod_dav.nlm
-#LoadModule dav_fs_module modules/moddavfs.nlm
-#LoadModule expires_module modules/expires.nlm
-#LoadModule file_cache_module modules/filecach.nlm
-#LoadModule headers_module modules/headers.nlm
-#LoadModule info_module modules/info.nlm
-#LoadModule mime_magic_module modules/mimemagi.nlm
-#LoadModule proxy_module modules/proxy.nlm
-#LoadModule proxy_connect_module modules/proxy_connect.nlm
-#LoadModule proxy_http_module modules/proxy_http.nlm
-#LoadModule proxy_ftp_module modules/proxy_ftp.nlm
-#LoadModule rewrite_module modules/rewrite.nlm
-#LoadModule speling_module modules/speling.nlm
-#LoadModule status_module modules/status.nlm
-#LoadModule unique_id_module modules/uniqueid.nlm
-#LoadModule usertrack_module modules/usertrk.nlm
-#LoadModule vhost_alias_module modules/vhost.nlm
-
-#
-# ExtendedStatus controls whether Apache will generate "full" status
-# information (ExtendedStatus On) or just basic information (ExtendedStatus
-# Off) when the "server-status" handler is called. The default is Off.
-#
-#ExtendedStatus On
-
-#
-# SecureListen: Allows you to securely bind Apache to specific IP addresses 
-# and/or ports.
-#
-# Change this to SecureListen on specific IP addresses as shown below to 
-# prevent Apache from glomming onto all bound IP addresses (0.0.0.0)
-#
-#SecureListen 12.34.56.78:443 "SSL CertificateIP"
-#
-#SecureListen @@Port@@ "@@SSL_CERT_NAME@@"
-
-### Section 2: 'Main' server configuration
-#
-# The directives in this section set up the values used by the 'main'
-# server, which responds to any requests that aren't handled by a
-# <VirtualHost> definition.  These values also provide defaults for
-# any <VirtualHost> containers you may define later in the file.
-#
-# All of these directives may appear inside <VirtualHost> containers,
-# in which case these default settings will be overridden for the
-# virtual host being defined.
-#
-
-#
-# ServerAdmin: Your address, where problems with the server should be
-# e-mailed.  This address appears on some server-generated pages, such
-# as error documents.  e.g. admin@your-domain.com
-#
-ServerAdmin @@ServerAdmin@@
-
-#
-# ServerName gives the name and port that the server uses to identify itself.
-# This can often be determined automatically, but we recommend you specify
-# it explicitly to prevent problems during startup.
-#
-# If this is not set to valid DNS name for your host, server-generated
-# redirections will not work.  See also the UseCanonicalName directive.
-#
-# If your host doesn't have a registered DNS name, enter its IP address here.
-# You will have to access it by its address anyway, and this will make 
-# redirections work in a sensible way.
-#
-#ServerName new.host.name:80
-
-#
-# UseCanonicalName: Determines how Apache constructs self-referencing 
-# URLs and the SERVER_NAME and SERVER_PORT variables.
-# When set "Off", Apache will use the Hostname and Port supplied
-# by the client.  When set "On", Apache will use the value of the
-# ServerName directive.
-#
-UseCanonicalName Off
-
-#
-# DocumentRoot: The directory out of which you will serve your
-# documents. By default, all requests are taken from this directory, but
-# symbolic links and aliases may be used to point to other locations.
-#
-DocumentRoot "@@ServerRoot@@/htdocs"
-
-#
-# Each directory to which Apache has access can be configured with respect
-# to which services and features are allowed and/or disabled in that
-# directory (and its subdirectories). 
-#
-# First, we configure the "default" to be a very restrictive set of 
-# features.  
-#
-<Directory />
-    Options FollowSymLinks
-    AllowOverride None
-</Directory>
-
-#
-# Note that from this point forward you must specifically allow
-# particular features to be enabled - so if something's not working as
-# you might expect, make sure that you have specifically enabled it
-# below.
-#
-
-#
-# This should be changed to whatever you set DocumentRoot to.
-#
-<Directory "@@ServerRoot@@/htdocs">
-
-#
-# Possible values for the Options directive are "None", "All",
-# or any combination of:
-#   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI Multiviews
-#
-# Note that "MultiViews" must be named *explicitly* --- "Options All"
-# doesn't give it to you.
-#
-# The Options directive is both complicated and important.  Please see
-# http://httpd.apache.org/docs-2.0/mod/core.html#options
-# for more information.
-#
-    Options Indexes FollowSymLinks
-
-#
-# AllowOverride controls what directives may be placed in .htaccess files.
-# It can be "All", "None", or any combination of the keywords:
-#   Options FileInfo AuthConfig Limit
-#
-    AllowOverride None
-
-#
-# Controls who can get stuff from this server.
-#
-    Order allow,deny
-    Allow from all
-
-#
-# Note that directly accessing an index.html.var typemap is much faster
-# than using MultiViews negotation on a directory.  We distribute a typemap
-# of the complete index.html collection, so we use that index.html.var
-# typemap here.  If Options is set to Multiviews, this optimization is lost.
-#
-    AddHandler type-map var
-    DirectoryIndex index.html index.html.var
-
-</Directory>
-
-#
-# UserDir: The name of the directory which is appended onto a user's home
-# directory if a ~user request is received.  Be especially careful to use
-# proper, forward slashes here.
-#
-UserDir "public_html"
-
-#
-# Control access to UserDir directories.  The following is an example
-# for a site where these directories are restricted to read-only.
-#
-# You must correct the path for the root to match your system's configured
-# user directory location, e.g. "C:/WinNT/profiles/*/My Documents/My Website"
-# or whichever, as appropriate.
-#
-#<Directory "/users/*/public_html">
-#    AllowOverride FileInfo AuthConfig Limit
-#    Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
-#    <Limit GET POST OPTIONS PROPFIND>
-#        Order allow,deny
-#        Allow from all
-#    </Limit>
-#    <LimitExcept GET POST OPTIONS PROPFIND>
-#        Order deny,allow
-#        Deny from all
-#    </LimitExcept>
-#</Directory>
-
-#
-# DirectoryIndex: sets the file that Apache will serve if a directory
-# is requested.
-#
-DirectoryIndex index.html
-
-#
-# AccessFileName: The name of the file to look for in each directory
-# for access control information.  See also the AllowOverride directive.
-#
-AccessFileName .htaccess
-
-#
-# The following lines prevent .htaccess and .htpasswd files from being 
-# viewed by Web clients. 
-#
-<Files ~ "^\.ht">
-    Order allow,deny
-    Deny from all
-</Files>
-
-#
-# TypesConfig describes where the mime.types file (or equivalent) is
-# to be found.
-#
-TypesConfig conf/mime.types
-
-#
-# DefaultType is the default MIME type the server will use for a document
-# if it cannot otherwise determine one, such as from filename extensions.
-# If your server contains mostly text or HTML documents, "text/plain" is
-# a good value.  If most of your content is binary, such as applications
-# or images, you may want to use "application/octet-stream" instead to
-# keep browsers from trying to display binary files as though they are
-# text.
-#
-DefaultType text/plain
-
-#
-# The mod_mime_magic module allows the server to use various hints from the
-# contents of the file itself to determine its type.  The MIMEMagicFile
-# directive tells the module where the hint definitions are located.
-#
-<IfModule mod_mime_magic.c>
-    MIMEMagicFile conf/magic
-</IfModule>
-
-#
-# HostnameLookups: Log the names of clients or just their IP addresses
-# e.g., www.apache.org (on) or 204.62.129.132 (off).
-# The default is off because it'd be overall better for the net if people
-# had to knowingly turn this feature on, since enabling it means that
-# each client request will result in AT LEAST one lookup request to the
-# nameserver.
-#
-HostnameLookups Off
-
-#
-# ErrorLog: The location of the error log file.
-# If you do not specify an ErrorLog directive within a <VirtualHost>
-# container, error messages relating to that virtual host will be
-# logged here.  If you *do* define an error logfile for a <VirtualHost>
-# container, that host's errors will be logged there and not here.
-#
-ErrorLog logs/error.log
-
-#
-# LogLevel: Control the number of messages logged to the error.log.
-# Possible values include: debug, info, notice, warn, error, crit,
-# alert, emerg.
-#
-LogLevel warn
-
-#
-# The following directives define some format nicknames for use with
-# a CustomLog directive (see below).
-#
-LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
-LogFormat "%h %l %u %t \"%r\" %>s %b" common
-LogFormat "%{Referer}i -> %U" referer
-LogFormat "%{User-agent}i" agent
-
-#
-# The location and format of the access logfile (Common Logfile Format).
-# If you do not define any access logfiles within a <VirtualHost>
-# container, they will be logged here.  Contrariwise, if you *do*
-# define per-<VirtualHost> access logfiles, transactions will be
-# logged therein and *not* in this file.
-#
-CustomLog logs/access.log common
-
-#
-# If you would like to have agent and referer logfiles, uncomment the
-# following directives.
-#
-#CustomLog logs/referer.log referer
-#CustomLog logs/agent.log agent
-
-#
-# If you prefer a single logfile with access, agent, and referer information
-# (Combined Logfile Format) you can use the following directive.
-#
-#CustomLog logs/access.log combined
-
-#
-# Optionally add a line containing the server version and virtual host
-# name to server-generated pages (error documents, FTP directory listings,
-# mod_status and mod_info output etc., but not CGI generated documents).
-# Set to "EMail" to also include a mailto: link to the ServerAdmin.
-# Set to one of:  On | Off | EMail
-#
-ServerSignature On
-
-#
-# Aliases: Add here as many aliases as you need (with no limit). The format is 
-# Alias fakename realname
-#
-# Note that if you include a trailing / on fakename then the server will
-# require it to be present in the URL.  So "/icons" isn't aliased in this
-# example, only "/icons/".  If the fakename is slash-terminated, then the 
-# realname must also be slash terminated, and if the fakename omits the 
-# trailing slash, the realname must also omit it.
-#
-# We include the /icons/ alias for FancyIndexed directory listings.  If you
-# do not use FancyIndexing, you may comment this out.
-#
-Alias /icons/ "@@ServerRoot@@/icons/"
-
-<Directory "@@ServerRoot@@/icons">
-    Options Indexes MultiViews
-    AllowOverride None
-    Order allow,deny
-    Allow from all
-</Directory>
-
-#
-# This should be changed to the ServerRoot/manual/.  The alias provides
-# the manual, even if you choose to move your DocumentRoot.  You may comment
-# this out if you do not care for the documentation.
-#
-Alias /manual "@@ServerRoot@@/manual"
-
-<Directory "@@ServerRoot@@/manual">
-    Options Indexes FollowSymLinks MultiViews
-    AllowOverride None
-    Order allow,deny
-    Allow from all
-</Directory>
-
-#
-# ScriptAlias: This controls which directories contain server scripts.
-# ScriptAliases are essentially the same as Aliases, except that
-# documents in the realname directory are treated as applications and
-# run by the server when requested rather than as documents sent to the client.
-# The same rules about trailing "/" apply to ScriptAlias directives as to
-# Alias.
-#
-ScriptAlias /cgi-bin/ "@@ServerRoot@@/cgi-bin/"
-
-#
-# "@@ServerRoot@@/cgi-bin" should be changed to whatever your ScriptAliased
-# CGI directory exists, if you have that configured.
-#
-<Directory "@@ServerRoot@@/cgi-bin">
-    AllowOverride None
-    Options None
-    Order allow,deny
-    Allow from all
-</Directory>
-
-#
-# Redirect allows you to tell clients about documents which used to exist in
-# your server's namespace, but do not anymore. This allows you to tell the
-# clients where to look for the relocated document.
-# Example:
-# Redirect permanent /foo http://www.example.com/bar
-
-#
-# Directives controlling the display of server-generated directory listings.
-#
-
-#
-# FancyIndexing is whether you want fancy directory indexing or standard.
-# VersionSort is whether files containing version numbers should be 
-# compared in the natural way, so that `apache-1.3.9.tar' is placed before
-# `apache-1.3.12.tar'.
-#
-IndexOptions FancyIndexing VersionSort
-
-#
-# AddIcon* directives tell the server which icon to show for different
-# files or filename extensions.  These are only displayed for
-# FancyIndexed directories.
-#
-AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip
-
-AddIconByType (TXT,/icons/text.gif) text/*
-AddIconByType (IMG,/icons/image2.gif) image/*
-AddIconByType (SND,/icons/sound2.gif) audio/*
-AddIconByType (VID,/icons/movie.gif) video/*
-
-AddIcon /icons/binary.gif .bin .exe
-AddIcon /icons/binhex.gif .hqx
-AddIcon /icons/tar.gif .tar
-AddIcon /icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv
-AddIcon /icons/compressed.gif .Z .z .tgz .gz .zip
-AddIcon /icons/a.gif .ps .ai .eps
-AddIcon /icons/layout.gif .html .shtml .htm .pdf
-AddIcon /icons/text.gif .txt
-AddIcon /icons/c.gif .c
-AddIcon /icons/p.gif .pl .py
-AddIcon /icons/f.gif .for
-AddIcon /icons/dvi.gif .dvi
-AddIcon /icons/uuencoded.gif .uu
-AddIcon /icons/script.gif .conf .sh .shar .csh .ksh .tcl
-AddIcon /icons/tex.gif .tex
-AddIcon /icons/bomb.gif core
-
-AddIcon /icons/back.gif ..
-AddIcon /icons/hand.right.gif README
-AddIcon /icons/folder.gif ^^DIRECTORY^^
-AddIcon /icons/blank.gif ^^BLANKICON^^
-
-#
-# DefaultIcon is which icon to show for files which do not have an icon
-# explicitly set.
-#
-DefaultIcon /icons/unknown.gif
-
-#
-# AddDescription allows you to place a short description after a file in
-# server-generated indexes.  These are only displayed for FancyIndexed
-# directories.
-# Format: AddDescription "description" filename
-#
-#AddDescription "GZIP compressed document" .gz
-#AddDescription "tar archive" .tar
-#AddDescription "GZIP compressed tar archive" .tgz
-
-#
-# ReadmeName is the name of the README file the server will look for by
-# default, and append to directory listings.
-#
-# HeaderName is the name of a file which should be prepended to
-# directory indexes. 
-ReadmeName README.html
-HeaderName HEADER.html
-
-#
-# IndexIgnore is a set of filenames which directory indexing should ignore
-# and not include in the listing.  Shell-style wildcarding is permitted.
-#
-IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t
-
-#
-# AddEncoding allows you to have certain browsers (Mosaic/X 2.1+) uncompress
-# information on the fly. Note: Not all browsers support this.
-# Despite the name similarity, the following Add* directives have nothing
-# to do with the FancyIndexing customization directives above.
-#
-AddEncoding x-compress Z
-AddEncoding x-gzip gz tgz
-
-#
-# DefaultLanguage and AddLanguage allows you to specify the language of 
-# a document. You can then use content negotiation to give a browser a 
-# file in a language the user can understand.
-#
-# Specify a default language. This means that all data
-# going out without a specific language tag (see below) will 
-# be marked with this one. You probably do NOT want to set
-# this unless you are sure it is correct for all cases.
-#
-# * It is generally better to not mark a page as 
-# * being a certain language than marking it with the wrong
-# * language!
-#
-# DefaultLanguage nl
-#
-# Note 1: The suffix does not have to be the same as the language
-# keyword --- those with documents in Polish (whose net-standard
-# language code is pl) may wish to use "AddLanguage pl .po" to
-# avoid the ambiguity with the common suffix for perl scripts.
-#
-# Note 2: The example entries below illustrate that in some cases 
-# the two character 'Language' abbreviation is not identical to 
-# the two character 'Country' code for its country,
-# E.g. 'Danmark/dk' versus 'Danish/da'.
-#
-# Note 3: In the case of 'ltz' we violate the RFC by using a three char
-# specifier. There is 'work in progress' to fix this and get
-# the reference data for rfc1766 cleaned up.
-#
-# Danish (da) - Dutch (nl) - English (en) - Estonian (et)
-# French (fr) - German (de) - Greek-Modern (el)
-# Italian (it) - Norwegian (no) - Norwegian Nynorsk (nn) - Korean (kr)
-# Portugese (pt) - Luxembourgeois* (ltz)
-# Spanish (es) - Swedish (sv) - Catalan (ca) - Czech(cz)
-# Polish (pl) - Brazilian Portuguese (pt-br) - Japanese (ja)
-# Russian (ru) - Croatian (hr)
-#
-AddLanguage da .dk
-AddLanguage nl .nl
-AddLanguage en .en
-AddLanguage et .et
-AddLanguage fr .fr
-AddLanguage de .de
-AddLanguage he .he
-AddLanguage el .el
-AddLanguage it .it
-AddLanguage ja .ja
-AddLanguage pl .po
-AddLanguage kr .kr
-AddLanguage pt .pt
-AddLanguage nn .nn
-AddLanguage no .no
-AddLanguage pt-br .pt-br
-AddLanguage ltz .ltz
-AddLanguage ca .ca
-AddLanguage es .es
-AddLanguage sv .se
-AddLanguage cz .cz
-AddLanguage ru .ru
-AddLanguage tw .tw
-AddLanguage zh-tw .tw
-AddLanguage hr .hr
-
-#
-# LanguagePriority allows you to give precedence to some languages
-# in case of a tie during content negotiation.
-#
-# Just list the languages in decreasing order of preference. We have
-# more or less alphabetized them here. You probably want to change this.
-#
-LanguagePriority en da nl et fr de el it ja kr no pl pt pt-br ltz ca es sv tw
-
-#
-# ForceLanguagePriority allows you to serve a result page rather than
-# MULTIPLE CHOICES (Prefer) [in case of a tie] or NOT ACCEPTABLE (Fallback)
-# [in case no accepted languages matched the available variants]
-#
-ForceLanguagePriority Prefer Fallback
-
-#
-# Specify a default charset for all pages sent out. This is
-# always a good idea and opens the door for future internationalisation
-# of your web site, should you ever want it. Specifying it as
-# a default does little harm; as the standard dictates that a page
-# is in iso-8859-1 (latin1) unless specified otherwise i.e. you
-# are merely stating the obvious. There are also some security
-# reasons in browsers, related to javascript and URL parsing
-# which encourage you to always set a default char set.
-#
-AddDefaultCharset ISO-8859-1
-
-#
-# Commonly used filename extensions to character sets. You probably
-# want to avoid clashes with the language extensions, unless you
-# are good at carefully testing your setup after each change.
-# See ftp://ftp.isi.edu/in-notes/iana/assignments/character-sets for
-# the official list of charset names and their respective RFCs
-#
-AddCharset ISO-8859-1  .iso8859-1 .latin1
-AddCharset ISO-8859-2  .iso8859-2 .latin2 .cen
-AddCharset ISO-8859-3  .iso8859-3 .latin3
-AddCharset ISO-8859-4  .iso8859-4 .latin4
-AddCharset ISO-8859-5  .iso8859-5 .latin5 .cyr .iso-ru
-AddCharset ISO-8859-6  .iso8859-6 .latin6 .arb
-AddCharset ISO-8859-7  .iso8859-7 .latin7 .grk
-AddCharset ISO-8859-8  .iso8859-8 .latin8 .heb
-AddCharset ISO-8859-9  .iso8859-9 .latin9 .trk
-AddCharset ISO-2022-JP .iso2022-jp .jis
-AddCharset ISO-2022-KR .iso2022-kr .kis
-AddCharset ISO-2022-CN .iso2022-cn .cis
-AddCharset Big5        .Big5       .big5
-# For russian, more than one charset is used (depends on client, mostly):
-AddCharset WINDOWS-1251 .cp-1251   .win-1251
-AddCharset CP866       .cp866
-AddCharset KOI8-r      .koi8-r .koi8-ru
-AddCharset KOI8-ru     .koi8-uk .ua
-AddCharset ISO-10646-UCS-2 .ucs2
-AddCharset ISO-10646-UCS-4 .ucs4
-AddCharset UTF-8       .utf8
-
-# The set below does not map to a specific (iso) standard
-# but works on a fairly wide range of browsers. Note that
-# capitalization actually matters (it should not, but it
-# does for some browsers).
-#
-# See ftp://ftp.isi.edu/in-notes/iana/assignments/character-sets
-# for a list of sorts. But browsers support few.
-#
-AddCharset GB2312      .gb2312 .gb 
-AddCharset utf-7       .utf7
-AddCharset utf-8       .utf8
-AddCharset big5        .big5 .b5
-AddCharset EUC-TW      .euc-tw
-AddCharset EUC-JP      .euc-jp
-AddCharset EUC-KR      .euc-kr
-AddCharset shift_jis   .sjis
-
-#
-# AddType allows you to tweak mime.types without actually editing it, or to
-# make certain files to be certain types.
-#
-AddType application/x-tar .tgz
-
-#
-# AddHandler allows you to map certain file extensions to "handlers",
-# actions unrelated to filetype. These can be either built into the server
-# or added with the Action command (see below)
-#
-# If you want to use server side includes, or CGI outside
-# ScriptAliased directories, uncomment the following lines.
-#
-# To use CGI scripts:
-#
-#AddHandler cgi-script .cgi
-
-#
-# To use server-parsed HTML files
-#
-#<FilesMatch "\.shtml(\..+)?$">
-#    SetOutputFilter INCLUDES
-#</FilesMatch>
-
-#
-# Uncomment the following line to enable Apache's send-asis HTTP file
-# feature
-#
-#AddHandler send-as-is asis
-
-#
-# If you wish to use server-parsed imagemap files, use
-#
-#AddHandler imap-file map
-
-#
-# To enable type maps, you might want to use
-#
-#AddHandler type-map var
-
-#
-# Action lets you define media types that will execute a script whenever
-# a matching file is called. This eliminates the need for repeated URL
-# pathnames for oft-used CGI file processors.
-# Format: Action media/type /cgi-script/location
-# Format: Action handler-name /cgi-script/location
-#
-
-#
-# Customizable error response (Apache style)
-#  these come in three flavors
-#
-#    1) plain text
-#ErrorDocument 500 "The server made a boo boo."
-#
-#    2) local redirects
-#ErrorDocument 404 /missing.html
-#  to redirect to local URL /missing.html
-#ErrorDocument 404 "/cgi-bin/missing_handlder.pl"
-#    i.e. any string which starts with a '/' and has
-#    no spaces.
-#  N.B.: You can redirect to a script or a document using server-side-includes.
-#
-#    3) external redirects
-#ErrorDocument 402 http://www.example.com/subscription_info.html
-#    i.e. any string whichis a valid  URL.
-#  N.B.: Many of the environment variables associated with the original
-#  request will *not* be available to such a script.
-#
-#    4) borderline case
-#ErrorDocument 402 "http://www.example.com/info.html is the place to look"
-#    treated as case '1' as it has spaces and thus is not a valid URL
-
-#
-# Putting this all together, we can Internationalize error responses.
-#
-# We use Alias to redirect any /error/HTTP_<error>.html.var response to
-# our collection of by-error message multi-language collections.  We use 
-# includes to substitute the appropriate text.
-#
-# You can modify the messages' appearance without changing any of the
-# default HTTP_<error>.html.var files by adding the line;
-#
-#   Alias /error/include/ "/your/include/path/"
-#
-# which allows you to create your own set of files by starting with the
-# @@ServerRoot@@/error/include/ files and
-# copying them to /your/include/path/, even on a per-VirtualHost basis.
-#
-
-<IfModule mod_negotiation.c>
-<IfModule mod_include.c>
-    Alias /error/ "@@ServerRoot@@/error/"
-
-    <Directory "@@ServerRoot@@/error">
-        AllowOverride None
-        Options IncludesNoExec
-        AddOutputFilter Includes html
-        AddHandler type-map var
-        Order allow,deny
-        Allow from all
-        LanguagePriority en es de fr
-        ForceLanguagePriority Prefer Fallback
-    </Directory>
-
-    ErrorDocument 400 /error/HTTP_BAD_REQUEST.html.var
-    ErrorDocument 401 /error/HTTP_UNAUTHORIZED.html.var
-    ErrorDocument 403 /error/HTTP_FORBIDDEN.html.var
-    ErrorDocument 404 /error/HTTP_NOT_FOUND.html.var
-    ErrorDocument 405 /error/HTTP_METHOD_NOT_ALLOWED.html.var
-    ErrorDocument 408 /error/HTTP_REQUEST_TIME_OUT.html.var
-    ErrorDocument 410 /error/HTTP_GONE.html.var
-    ErrorDocument 411 /error/HTTP_LENGTH_REQUIRED.html.var
-    ErrorDocument 412 /error/HTTP_PRECONDITION_FAILED.html.var
-    ErrorDocument 413 /error/HTTP_REQUEST_ENTITY_TOO_LARGE.html.var
-    ErrorDocument 414 /error/HTTP_REQUEST_URI_TOO_LARGE.html.var
-    ErrorDocument 415 /error/HTTP_SERVICE_UNAVAILABLE.html.var
-    ErrorDocument 500 /error/HTTP_INTERNAL_SERVER_ERROR.html.var
-    ErrorDocument 501 /error/HTTP_NOT_IMPLEMENTED.html.var
-    ErrorDocument 502 /error/HTTP_BAD_GATEWAY.html.var
-    ErrorDocument 503 /error/HTTP_SERVICE_UNAVAILABLE.html.var
-    ErrorDocument 506 /error/HTTP_VARIANT_ALSO_VARIES.html.var
-
-</IfModule>
-</IfModule>
-
-#
-# The following directives modify normal HTTP response behavior to
-# handle known problems with browser implementations.
-#
-BrowserMatch "Mozilla/2" nokeepalive
-BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0
-BrowserMatch "RealPlayer 4\.0" force-response-1.0
-BrowserMatch "Java/1\.0" force-response-1.0
-BrowserMatch "JDK/1\.0" force-response-1.0
-
-#
-# The following directive disables redirects on non-GET requests for
-# a directory that does not include the trailing slash.  This fixes a 
-# problem with Microsoft WebFolders which does not appropriately handle 
-# redirects for folders with DAV methods.
-#
-BrowserMatch "Microsoft Data Access Internet Publishing Provider" redirect-carefully
-BrowserMatch "^WebDrive" redirect-carefully
-
-#
-# Allow server status reports, with the URL of http://servername/server-status
-# Change the ".@@DomainName@@" to match your domain to enable.
-#
-#<Location /server-status>
-#    SetHandler server-status
-#    Order deny,allow
-#    Deny from all
-#    Allow from .@@DomainName@@
-#</Location>
-
-#
-# Allow remote server configuration reports, with the URL of
-#  http://servername/server-info (requires that mod_info.c be loaded).
-# Change the ".your-domain.com" to match your domain to enable.
-#
-#<Location /server-info>
-#    SetHandler server-info
-#    Order deny,allow
-#    Deny from all
-#    Allow from .@@DomainName@@
-#</Location>
-
-#
-# Proxy Server directives. Uncomment the following lines to
-# enable the proxy server:
-#
-#<IfModule mod_proxy.c>
-#ProxyRequests On
-#
-#<Proxy *>
-#    Order deny,allow
-#    Deny from all
-#    Allow from .your-domain.com
-#</Proxy>
-
-#
-# Enable/disable the handling of HTTP/1.1 "Via:" headers.
-# ("Full" adds the server version; "Block" removes all outgoing Via: headers)
-# Set to one of: Off | On | Full | Block
-#
-#ProxyVia On
-
-#
-# To enable the cache as well, edit and uncomment the following lines:
-# (no cacheing without CacheRoot)
-#
-#CacheRoot "@@ServerRoot@@/proxy"
-#CacheSize 5
-#CacheGcInterval 4
-#CacheMaxExpire 24
-#CacheLastModifiedFactor 0.1
-#CacheDefaultExpire 1
-#NoCache a-domain.com another-domain.edu joes.garage-sale.com
-
-#</IfModule>
-# End of proxy directives.
-
-#
-# Bring in additional module-specific configurations
-#
-<IfModule mod_ssl.c>
-    Include conf/ssl.conf
-</IfModule>
-
-
-### Section 3: Virtual Hosts
-#
-# VirtualHost: If you want to maintain multiple domains/hostnames on your
-# machine you can setup VirtualHost containers for them. Most configurations
-# use only name-based virtual hosts so the server doesn't need to worry about
-# IP addresses. This is indicated by the asterisks in the directives below.
-#
-# Please see the documentation at 
-# <URL:http://httpd.apache.org/docs-2.0/vhosts/>
-# for further details before you try to setup virtual hosts.
-#
-# You may use the command line option '-S' to verify your virtual host
-# configuration.
-
-#
-# Use name-based virtual hosting.
-#
-#NameVirtualHost *
-
-#
-# VirtualHost example:
-# Almost any Apache directive may go into a VirtualHost container.
-# The first VirtualHost section is used for requests without a known
-# server name.
-#
-#<VirtualHost *>
-#    ServerAdmin webmaster@dummy-host.example.com
-#    DocumentRoot /www/docs/dummy-host.example.com
-#    ServerName dummy-host.example.com
-#    ErrorLog logs/dummy-host.example.com-error_log
-#    CustomLog logs/dummy-host.example.com-access_log common
-#</VirtualHost>
diff --git a/docs/conf/httpd-std.conf b/docs/conf/httpd-std.conf
deleted file mode 100644
index 7a40809..0000000
--- a/docs/conf/httpd-std.conf
+++ /dev/null
@@ -1,1013 +0,0 @@
-#
-# Based upon the NCSA server configuration files originally by Rob McCool.
-#
-# This is the main Apache server configuration file.  It contains the
-# configuration directives that give the server its instructions.
-# See <URL:http://httpd.apache.org/docs-2.0/> for detailed information about
-# the directives.
-#
-# Do NOT simply read the instructions in here without understanding
-# what they do.  They're here only as hints or reminders.  If you are unsure
-# consult the online docs. You have been warned.  
-#
-# The configuration directives are grouped into three basic sections:
-#  1. Directives that control the operation of the Apache server process as a
-#     whole (the 'global environment').
-#  2. Directives that define the parameters of the 'main' or 'default' server,
-#     which responds to requests that aren't handled by a virtual host.
-#     These directives also provide default values for the settings
-#     of all virtual hosts.
-#  3. Settings for virtual hosts, which allow Web requests to be sent to
-#     different IP addresses or hostnames and have them handled by the
-#     same Apache server process.
-#
-# Configuration and logfile names: If the filenames you specify for many
-# of the server's control files begin with "/" (or "drive:/" for Win32), the
-# server will use that explicit path.  If the filenames do *not* begin
-# with "/", the value of ServerRoot is prepended -- so "logs/foo.log"
-# with ServerRoot set to "/usr/local/apache" will be interpreted by the
-# server as "/usr/local/apache/logs/foo.log".
-#
-
-### Section 1: Global Environment
-#
-# The directives in this section affect the overall operation of Apache,
-# such as the number of concurrent requests it can handle or where it
-# can find its configuration files.
-#
-
-#
-# ServerRoot: The top of the directory tree under which the server's
-# configuration, error, and log files are kept.
-#
-# NOTE!  If you intend to place this on an NFS (or otherwise network)
-# mounted filesystem then please read the LockFile documentation
-# (available at <URL:http://httpd.apache.org/docs-2.0/mod/core.html#lockfile>);
-# you will save yourself a lot of trouble.
-#
-# Do NOT add a slash at the end of the directory path.
-#
-ServerRoot "@@ServerRoot@@"
-
-#
-# The accept serialization lock file MUST BE STORED ON A LOCAL DISK.
-#
-<IfModule !mpm_winnt.c>
-<IfModule !mpm_netware.c>
-#LockFile logs/accept.lock
-</IfModule>
-</IfModule>
-
-#
-# ScoreBoardFile: File used to store internal server process information.
-# If unspecified (the default), the scoreboard will be stored in an
-# anonymous shared memory segment, and will be unavailable to third-party
-# applications.
-# If specified, ensure that no two invocations of Apache share the same
-# scoreboard file. The scoreboard file MUST BE STORED ON A LOCAL DISK.
-#
-<IfModule !mpm_netware.c>
-<IfModule !perchild.c>
-#ScoreBoardFile logs/apache_runtime_status
-</IfModule>
-</IfModule>
-
-
-#
-# PidFile: The file in which the server should record its process
-# identification number when it starts.
-#
-<IfModule !mpm_netware.c>
-PidFile logs/httpd.pid
-</IfModule>
-
-#
-# Timeout: The number of seconds before receives and sends time out.
-#
-Timeout 300
-
-#
-# KeepAlive: Whether or not to allow persistent connections (more than
-# one request per connection). Set to "Off" to deactivate.
-#
-KeepAlive On
-
-#
-# MaxKeepAliveRequests: The maximum number of requests to allow
-# during a persistent connection. Set to 0 to allow an unlimited amount.
-# We recommend you leave this number high, for maximum performance.
-#
-MaxKeepAliveRequests 100
-
-#
-# KeepAliveTimeout: Number of seconds to wait for the next request from the
-# same client on the same connection.
-#
-KeepAliveTimeout 15
-
-##
-## Server-Pool Size Regulation (MPM specific)
-## 
-
-# prefork MPM
-# StartServers: number of server processes to start
-# MinSpareServers: minimum number of server processes which are kept spare
-# MaxSpareServers: maximum number of server processes which are kept spare
-# MaxClients: maximum number of server processes allowed to start
-# MaxRequestsPerChild: maximum number of requests a server process serves
-<IfModule prefork.c>
-StartServers         5
-MinSpareServers      5
-MaxSpareServers     10
-MaxClients         150
-MaxRequestsPerChild  0
-</IfModule>
-
-# worker MPM
-# StartServers: initial number of server processes to start
-# MaxClients: maximum number of simultaneous client connections
-# MinSpareThreads: minimum number of worker threads which are kept spare
-# MaxSpareThreads: maximum number of worker threads which are kept spare
-# ThreadsPerChild: constant number of worker threads in each server process
-# MaxRequestsPerChild: maximum number of requests a server process serves
-<IfModule worker.c>
-StartServers         2
-MaxClients         150
-MinSpareThreads     25
-MaxSpareThreads     75 
-ThreadsPerChild     25
-MaxRequestsPerChild  0
-</IfModule>
-
-# perchild MPM
-# NumServers: constant number of server processes
-# StartThreads: initial number of worker threads in each server process
-# MinSpareThreads: minimum number of worker threads which are kept spare
-# MaxSpareThreads: maximum number of worker threads which are kept spare
-# MaxThreadsPerChild: maximum number of worker threads in each server process
-# MaxRequestsPerChild: maximum number of connections per server process
-<IfModule perchild.c>
-NumServers           5
-StartThreads         5
-MinSpareThreads      5
-MaxSpareThreads     10
-MaxThreadsPerChild  20
-MaxRequestsPerChild  0
-</IfModule>
-
-# WinNT MPM
-# ThreadsPerChild: constant number of worker threads in the server process
-# MaxRequestsPerChild: maximum  number of requests a server process serves
-<IfModule mpm_winnt.c>
-ThreadsPerChild 250
-MaxRequestsPerChild  0
-</IfModule>
-
-# BeOS MPM
-# StartThreads: how many threads do we initially spawn?
-# MaxClients:   max number of threads we can have (1 thread == 1 client)
-# MaxRequestsPerThread: maximum number of requests each thread will process
-<IfModule beos.c>
-StartThreads               10
-MaxClients                 50
-MaxRequestsPerThread       10000
-</IfModule>    
-
-# NetWare MPM
-# ThreadStackSize ...... Stack size allocated for each worker thread
-# StartThreads ......... Number of worker threads launched at server startup
-# MinSpareThreads ...... Minimum number of idle threads, to handle request spikes
-# MaxSpareThreads ...... Maximum number of idle threads
-# MaxThreads ........... Maximum number of worker threads alive at the same time
-# MaxRequestsPerChild .. Maximum  number of requests a thread serves. It is 
-#                         recommended that the default value of 0 be set for this
-#                         directive on NetWare.  This will allow the thread to 
-#                         continue to service requests indefinitely.                          
-<IfModule mpm_netware.c>
-ThreadStackSize      65536
-StartThreads           250
-MinSpareThreads         25
-MaxSpareThreads        250
-MaxThreads            1000
-MaxRequestsPerChild      0
-</IfModule>
-
-#
-# Listen: Allows you to bind Apache to specific IP addresses and/or
-# ports, in addition to the default. See also the <VirtualHost>
-# directive.
-#
-# Change this to Listen on specific IP addresses as shown below to 
-# prevent Apache from glomming onto all bound IP addresses (0.0.0.0)
-#
-#Listen 12.34.56.78:80
-Listen @@Port@@
-
-#
-# Dynamic Shared Object (DSO) Support
-#
-# To be able to use the functionality of a module which was built as a DSO you
-# have to place corresponding `LoadModule' lines at this location so the
-# directives contained in it are actually available _before_ they are used.
-# Statically compiled modules (those listed by `httpd -l') do not need
-# to be loaded here.
-#
-# Example:
-# LoadModule foo_module modules/mod_foo.so
-#
-@@LoadModule@@
-
-#
-# ExtendedStatus controls whether Apache will generate "full" status
-# information (ExtendedStatus On) or just basic information (ExtendedStatus
-# Off) when the "server-status" handler is called. The default is Off.
-#
-#ExtendedStatus On
-
-### Section 2: 'Main' server configuration
-#
-# The directives in this section set up the values used by the 'main'
-# server, which responds to any requests that aren't handled by a
-# <VirtualHost> definition.  These values also provide defaults for
-# any <VirtualHost> containers you may define later in the file.
-#
-# All of these directives may appear inside <VirtualHost> containers,
-# in which case these default settings will be overridden for the
-# virtual host being defined.
-#
-
-<IfModule !mpm_winnt.c>
-<IfModule !mpm_netware.c>
-#
-# If you wish httpd to run as a different user or group, you must run
-# httpd as root initially and it will switch.  
-#
-# User/Group: The name (or #number) of the user/group to run httpd as.
-#  . On SCO (ODT 3) use "User nouser" and "Group nogroup".
-#  . On HPUX you may not be able to use shared memory as nobody, and the
-#    suggested workaround is to create a user www and use that user.
-#  NOTE that some kernels refuse to setgid(Group) or semctl(IPC_SET)
-#  when the value of (unsigned)Group is above 60000; 
-#  don't use Group #-1 on these systems!
-#
-User nobody
-Group #-1
-</IfModule>
-</IfModule>
-
-#
-# ServerAdmin: Your address, where problems with the server should be
-# e-mailed.  This address appears on some server-generated pages, such
-# as error documents.  e.g. admin@your-domain.com
-#
-ServerAdmin you@your.address
-
-#
-# ServerName gives the name and port that the server uses to identify itself.
-# This can often be determined automatically, but we recommend you specify
-# it explicitly to prevent problems during startup.
-#
-# If this is not set to valid DNS name for your host, server-generated
-# redirections will not work.  See also the UseCanonicalName directive.
-#
-# If your host doesn't have a registered DNS name, enter its IP address here.
-# You will have to access it by its address anyway, and this will make 
-# redirections work in a sensible way.
-#
-#ServerName new.host.name:80
-
-#
-# UseCanonicalName: Determines how Apache constructs self-referencing 
-# URLs and the SERVER_NAME and SERVER_PORT variables.
-# When set "Off", Apache will use the Hostname and Port supplied
-# by the client.  When set "On", Apache will use the value of the
-# ServerName directive.
-#
-UseCanonicalName Off
-
-#
-# DocumentRoot: The directory out of which you will serve your
-# documents. By default, all requests are taken from this directory, but
-# symbolic links and aliases may be used to point to other locations.
-#
-DocumentRoot "@@ServerRoot@@/htdocs"
-
-#
-# Each directory to which Apache has access can be configured with respect
-# to which services and features are allowed and/or disabled in that
-# directory (and its subdirectories). 
-#
-# First, we configure the "default" to be a very restrictive set of 
-# features.  
-#
-<Directory />
-    Options FollowSymLinks
-    AllowOverride None
-</Directory>
-
-#
-# Note that from this point forward you must specifically allow
-# particular features to be enabled - so if something's not working as
-# you might expect, make sure that you have specifically enabled it
-# below.
-#
-
-#
-# This should be changed to whatever you set DocumentRoot to.
-#
-<Directory "@@ServerRoot@@/htdocs">
-
-#
-# Possible values for the Options directive are "None", "All",
-# or any combination of:
-#   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI Multiviews
-#
-# Note that "MultiViews" must be named *explicitly* --- "Options All"
-# doesn't give it to you.
-#
-# The Options directive is both complicated and important.  Please see
-# http://httpd.apache.org/docs-2.0/mod/core.html#options
-# for more information.
-#
-    Options Indexes FollowSymLinks
-
-#
-# AllowOverride controls what directives may be placed in .htaccess files.
-# It can be "All", "None", or any combination of the keywords:
-#   Options FileInfo AuthConfig Limit
-#
-    AllowOverride None
-
-#
-# Controls who can get stuff from this server.
-#
-    Order allow,deny
-    Allow from all
-
-</Directory>
-
-#
-# UserDir: The name of the directory that is appended onto a user's home
-# directory if a ~user request is received.
-#
-UserDir public_html
-
-#
-# Control access to UserDir directories.  The following is an example
-# for a site where these directories are restricted to read-only.
-#
-#<Directory /home/*/public_html>
-#    AllowOverride FileInfo AuthConfig Limit
-#    Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
-#    <Limit GET POST OPTIONS PROPFIND>
-#        Order allow,deny
-#        Allow from all
-#    </Limit>
-#    <LimitExcept GET POST OPTIONS PROPFIND>
-#        Order deny,allow
-#        Deny from all
-#    </LimitExcept>
-#</Directory>
-
-#
-# DirectoryIndex: sets the file that Apache will serve if a directory
-# is requested.
-#
-# The index.html.var file (a type-map) is used to deliver content-
-# negotiated documents.  The MultiViews Option can be used for the 
-# same purpose, but it is much slower.
-#
-DirectoryIndex index.html index.html.var
-
-#
-# AccessFileName: The name of the file to look for in each directory
-# for access control information.  See also the AllowOverride directive.
-#
-AccessFileName .htaccess
-
-#
-# The following lines prevent .htaccess and .htpasswd files from being 
-# viewed by Web clients. 
-#
-<Files ~ "^\.ht">
-    Order allow,deny
-    Deny from all
-</Files>
-
-#
-# TypesConfig describes where the mime.types file (or equivalent) is
-# to be found.
-#
-TypesConfig conf/mime.types
-
-#
-# DefaultType is the default MIME type the server will use for a document
-# if it cannot otherwise determine one, such as from filename extensions.
-# If your server contains mostly text or HTML documents, "text/plain" is
-# a good value.  If most of your content is binary, such as applications
-# or images, you may want to use "application/octet-stream" instead to
-# keep browsers from trying to display binary files as though they are
-# text.
-#
-DefaultType text/plain
-
-#
-# The mod_mime_magic module allows the server to use various hints from the
-# contents of the file itself to determine its type.  The MIMEMagicFile
-# directive tells the module where the hint definitions are located.
-#
-<IfModule mod_mime_magic.c>
-    MIMEMagicFile conf/magic
-</IfModule>
-
-#
-# HostnameLookups: Log the names of clients or just their IP addresses
-# e.g., www.apache.org (on) or 204.62.129.132 (off).
-# The default is off because it'd be overall better for the net if people
-# had to knowingly turn this feature on, since enabling it means that
-# each client request will result in AT LEAST one lookup request to the
-# nameserver.
-#
-HostnameLookups Off
-
-#
-# ErrorLog: The location of the error log file.
-# If you do not specify an ErrorLog directive within a <VirtualHost>
-# container, error messages relating to that virtual host will be
-# logged here.  If you *do* define an error logfile for a <VirtualHost>
-# container, that host's errors will be logged there and not here.
-#
-ErrorLog logs/error_log
-
-#
-# LogLevel: Control the number of messages logged to the error_log.
-# Possible values include: debug, info, notice, warn, error, crit,
-# alert, emerg.
-#
-LogLevel warn
-
-#
-# The following directives define some format nicknames for use with
-# a CustomLog directive (see below).
-#
-LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
-LogFormat "%h %l %u %t \"%r\" %>s %b" common
-LogFormat "%{Referer}i -> %U" referer
-LogFormat "%{User-agent}i" agent
-
-#
-# The location and format of the access logfile (Common Logfile Format).
-# If you do not define any access logfiles within a <VirtualHost>
-# container, they will be logged here.  Contrariwise, if you *do*
-# define per-<VirtualHost> access logfiles, transactions will be
-# logged therein and *not* in this file.
-#
-CustomLog logs/access_log common
-
-#
-# If you would like to have agent and referer logfiles, uncomment the
-# following directives.
-#
-#CustomLog logs/referer_log referer
-#CustomLog logs/agent_log agent
-
-#
-# If you prefer a single logfile with access, agent, and referer information
-# (Combined Logfile Format) you can use the following directive.
-#
-#CustomLog logs/access_log combined
-
-#
-# Optionally add a line containing the server version and virtual host
-# name to server-generated pages (error documents, FTP directory listings,
-# mod_status and mod_info output etc., but not CGI generated documents).
-# Set to "EMail" to also include a mailto: link to the ServerAdmin.
-# Set to one of:  On | Off | EMail
-#
-ServerSignature On
-
-#
-# Aliases: Add here as many aliases as you need (with no limit). The format is 
-# Alias fakename realname
-#
-# Note that if you include a trailing / on fakename then the server will
-# require it to be present in the URL.  So "/icons" isn't aliased in this
-# example, only "/icons/".  If the fakename is slash-terminated, then the 
-# realname must also be slash terminated, and if the fakename omits the 
-# trailing slash, the realname must also omit it.
-#
-# We include the /icons/ alias for FancyIndexed directory listings.  If you
-# do not use FancyIndexing, you may comment this out.
-#
-Alias /icons/ "@@ServerRoot@@/icons/"
-
-<Directory "@@ServerRoot@@/icons">
-    Options Indexes MultiViews
-    AllowOverride None
-    Order allow,deny
-    Allow from all
-</Directory>
-
-#
-# This should be changed to the ServerRoot/manual/.  The alias provides
-# the manual, even if you choose to move your DocumentRoot.  You may comment
-# this out if you do not care for the documentation.
-#
-Alias /manual "@@ServerRoot@@/manual"
-
-<Directory "@@ServerRoot@@/manual">
-    Options Indexes FollowSymLinks MultiViews
-    AllowOverride None
-    Order allow,deny
-    Allow from all
-</Directory>
-
-#
-# ScriptAlias: This controls which directories contain server scripts.
-# ScriptAliases are essentially the same as Aliases, except that
-# documents in the realname directory are treated as applications and
-# run by the server when requested rather than as documents sent to the client.
-# The same rules about trailing "/" apply to ScriptAlias directives as to
-# Alias.
-#
-ScriptAlias /cgi-bin/ "@@ServerRoot@@/cgi-bin/"
-
-<IfModule mod_cgid.c>
-#
-# Additional to mod_cgid.c settings, mod_cgid has Scriptsock <path>
-# for setting UNIX socket for communicating with cgid.
-#
-#Scriptsock            logs/cgisock
-</IfModule>
-
-#
-# "@@ServerRoot@@/cgi-bin" should be changed to whatever your ScriptAliased
-# CGI directory exists, if you have that configured.
-#
-<Directory "@@ServerRoot@@/cgi-bin">
-    AllowOverride None
-    Options None
-    Order allow,deny
-    Allow from all
-</Directory>
-
-#
-# Redirect allows you to tell clients about documents which used to exist in
-# your server's namespace, but do not anymore. This allows you to tell the
-# clients where to look for the relocated document.
-# Example:
-# Redirect permanent /foo http://www.example.com/bar
-
-#
-# Directives controlling the display of server-generated directory listings.
-#
-
-#
-# FancyIndexing is whether you want fancy directory indexing or standard.
-# VersionSort is whether files containing version numbers should be 
-# compared in the natural way, so that `apache-1.3.9.tar' is placed before
-# `apache-1.3.12.tar'.
-#
-IndexOptions FancyIndexing VersionSort
-
-#
-# AddIcon* directives tell the server which icon to show for different
-# files or filename extensions.  These are only displayed for
-# FancyIndexed directories.
-#
-AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip
-
-AddIconByType (TXT,/icons/text.gif) text/*
-AddIconByType (IMG,/icons/image2.gif) image/*
-AddIconByType (SND,/icons/sound2.gif) audio/*
-AddIconByType (VID,/icons/movie.gif) video/*
-
-AddIcon /icons/binary.gif .bin .exe
-AddIcon /icons/binhex.gif .hqx
-AddIcon /icons/tar.gif .tar
-AddIcon /icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv
-AddIcon /icons/compressed.gif .Z .z .tgz .gz .zip
-AddIcon /icons/a.gif .ps .ai .eps
-AddIcon /icons/layout.gif .html .shtml .htm .pdf
-AddIcon /icons/text.gif .txt
-AddIcon /icons/c.gif .c
-AddIcon /icons/p.gif .pl .py
-AddIcon /icons/f.gif .for
-AddIcon /icons/dvi.gif .dvi
-AddIcon /icons/uuencoded.gif .uu
-AddIcon /icons/script.gif .conf .sh .shar .csh .ksh .tcl
-AddIcon /icons/tex.gif .tex
-AddIcon /icons/bomb.gif core
-
-AddIcon /icons/back.gif ..
-AddIcon /icons/hand.right.gif README
-AddIcon /icons/folder.gif ^^DIRECTORY^^
-AddIcon /icons/blank.gif ^^BLANKICON^^
-
-#
-# DefaultIcon is which icon to show for files which do not have an icon
-# explicitly set.
-#
-DefaultIcon /icons/unknown.gif
-
-#
-# AddDescription allows you to place a short description after a file in
-# server-generated indexes.  These are only displayed for FancyIndexed
-# directories.
-# Format: AddDescription "description" filename
-#
-#AddDescription "GZIP compressed document" .gz
-#AddDescription "tar archive" .tar
-#AddDescription "GZIP compressed tar archive" .tgz
-
-#
-# ReadmeName is the name of the README file the server will look for by
-# default, and append to directory listings.
-#
-# HeaderName is the name of a file which should be prepended to
-# directory indexes. 
-ReadmeName README.html
-HeaderName HEADER.html
-
-#
-# IndexIgnore is a set of filenames which directory indexing should ignore
-# and not include in the listing.  Shell-style wildcarding is permitted.
-#
-IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t
-
-#
-# AddEncoding allows you to have certain browsers (Mosaic/X 2.1+) uncompress
-# information on the fly. Note: Not all browsers support this.
-# Despite the name similarity, the following Add* directives have nothing
-# to do with the FancyIndexing customization directives above.
-#
-AddEncoding x-compress Z
-AddEncoding x-gzip gz tgz
-
-#
-# DefaultLanguage and AddLanguage allows you to specify the language of 
-# a document. You can then use content negotiation to give a browser a 
-# file in a language the user can understand.
-#
-# Specify a default language. This means that all data
-# going out without a specific language tag (see below) will 
-# be marked with this one. You probably do NOT want to set
-# this unless you are sure it is correct for all cases.
-#
-# * It is generally better to not mark a page as 
-# * being a certain language than marking it with the wrong
-# * language!
-#
-# DefaultLanguage nl
-#
-# Note 1: The suffix does not have to be the same as the language
-# keyword --- those with documents in Polish (whose net-standard
-# language code is pl) may wish to use "AddLanguage pl .po" to
-# avoid the ambiguity with the common suffix for perl scripts.
-#
-# Note 2: The example entries below illustrate that in some cases 
-# the two character 'Language' abbreviation is not identical to 
-# the two character 'Country' code for its country,
-# E.g. 'Danmark/dk' versus 'Danish/da'.
-#
-# Note 3: In the case of 'ltz' we violate the RFC by using a three char
-# specifier. There is 'work in progress' to fix this and get
-# the reference data for rfc1766 cleaned up.
-#
-# Danish (da) - Dutch (nl) - English (en) - Estonian (et)
-# French (fr) - German (de) - Greek-Modern (el)
-# Italian (it) - Norwegian (no) - Norwegian Nynorsk (nn) - Korean (kr) 
-# Portugese (pt) - Luxembourgeois* (ltz)
-# Spanish (es) - Swedish (sv) - Catalan (ca) - Czech(cz)
-# Polish (pl) - Brazilian Portuguese (pt-br) - Japanese (ja)
-# Russian (ru) - Croatian (hr)
-#
-AddLanguage da .dk
-AddLanguage nl .nl
-AddLanguage en .en
-AddLanguage et .et
-AddLanguage fr .fr
-AddLanguage de .de
-AddLanguage he .he
-AddLanguage el .el
-AddLanguage it .it
-AddLanguage ja .ja
-AddLanguage pl .po
-AddLanguage kr .kr
-AddLanguage pt .pt
-AddLanguage nn .nn
-AddLanguage no .no
-AddLanguage pt-br .pt-br
-AddLanguage ltz .ltz
-AddLanguage ca .ca
-AddLanguage es .es
-AddLanguage sv .se
-AddLanguage cz .cz
-AddLanguage ru .ru
-AddLanguage tw .tw
-AddLanguage zh-tw .tw
-AddLanguage hr .hr
-
-#
-# LanguagePriority allows you to give precedence to some languages
-# in case of a tie during content negotiation.
-#
-# Just list the languages in decreasing order of preference. We have
-# more or less alphabetized them here. You probably want to change this.
-#
-LanguagePriority en da nl et fr de el it ja kr no pl pt pt-br ltz ca es sv tw
-
-#
-# ForceLanguagePriority allows you to serve a result page rather than
-# MULTIPLE CHOICES (Prefer) [in case of a tie] or NOT ACCEPTABLE (Fallback)
-# [in case no accepted languages matched the available variants]
-#
-ForceLanguagePriority Prefer Fallback
-
-#
-# Specify a default charset for all pages sent out. This is
-# always a good idea and opens the door for future internationalisation
-# of your web site, should you ever want it. Specifying it as
-# a default does little harm; as the standard dictates that a page
-# is in iso-8859-1 (latin1) unless specified otherwise i.e. you
-# are merely stating the obvious. There are also some security
-# reasons in browsers, related to javascript and URL parsing
-# which encourage you to always set a default char set.
-#
-AddDefaultCharset ISO-8859-1
-
-#
-# Commonly used filename extensions to character sets. You probably
-# want to avoid clashes with the language extensions, unless you
-# are good at carefully testing your setup after each change.
-# See ftp://ftp.isi.edu/in-notes/iana/assignments/character-sets for
-# the official list of charset names and their respective RFCs
-#
-AddCharset ISO-8859-1  .iso8859-1  .latin1
-AddCharset ISO-8859-2  .iso8859-2  .latin2 .cen
-AddCharset ISO-8859-3  .iso8859-3  .latin3
-AddCharset ISO-8859-4  .iso8859-4  .latin4
-AddCharset ISO-8859-5  .iso8859-5  .latin5 .cyr .iso-ru
-AddCharset ISO-8859-6  .iso8859-6  .latin6 .arb
-AddCharset ISO-8859-7  .iso8859-7  .latin7 .grk
-AddCharset ISO-8859-8  .iso8859-8  .latin8 .heb
-AddCharset ISO-8859-9  .iso8859-9  .latin9 .trk
-AddCharset ISO-2022-JP .iso2022-jp .jis
-AddCharset ISO-2022-KR .iso2022-kr .kis
-AddCharset ISO-2022-CN .iso2022-cn .cis
-AddCharset Big5        .Big5       .big5
-# For russian, more than one charset is used (depends on client, mostly):
-AddCharset WINDOWS-1251 .cp-1251   .win-1251
-AddCharset CP866       .cp866
-AddCharset KOI8-r      .koi8-r .koi8-ru
-AddCharset KOI8-ru     .koi8-uk .ua
-AddCharset ISO-10646-UCS-2 .ucs2
-AddCharset ISO-10646-UCS-4 .ucs4
-AddCharset UTF-8       .utf8
-
-# The set below does not map to a specific (iso) standard
-# but works on a fairly wide range of browsers. Note that
-# capitalization actually matters (it should not, but it
-# does for some browsers).
-#
-# See ftp://ftp.isi.edu/in-notes/iana/assignments/character-sets
-# for a list of sorts. But browsers support few.
-#
-AddCharset GB2312      .gb2312 .gb 
-AddCharset utf-7       .utf7
-AddCharset utf-8       .utf8
-AddCharset big5        .big5 .b5
-AddCharset EUC-TW      .euc-tw
-AddCharset EUC-JP      .euc-jp
-AddCharset EUC-KR      .euc-kr
-AddCharset shift_jis   .sjis
-
-#
-# AddType allows you to add to or override the MIME configuration
-# file mime.types for specific file types.
-#
-AddType application/x-tar .tgz
-
-#
-# AddHandler allows you to map certain file extensions to "handlers":
-# actions unrelated to filetype. These can be either built into the server
-# or added with the Action directive (see below)
-#
-# To use CGI scripts outside of ScriptAliased directories:
-# (You will also need to add "ExecCGI" to the "Options" directive.)
-#
-#AddHandler cgi-script .cgi
-
-#
-# For files that include their own HTTP headers:
-#
-#AddHandler send-as-is asis
-
-#
-# For server-parsed imagemap files:
-#
-#AddHandler imap-file map
-
-#
-# For type maps (negotiated resources):
-# (This is enabled by default to allow the Apache "It Worked" page
-#  to be distributed in multiple languages.)
-#
-AddHandler type-map var
-
-# Filters allow you to process content before it is sent to the client.
-#
-# To parse .shtml files for server-side includes (SSI):
-# (You will also need to add "Includes" to the "Options" directive.)
-#
-#AddOutputFilter INCLUDES .shtml
-
-#
-# Action lets you define media types that will execute a script whenever
-# a matching file is called. This eliminates the need for repeated URL
-# pathnames for oft-used CGI file processors.
-# Format: Action media/type /cgi-script/location
-# Format: Action handler-name /cgi-script/location
-#
-
-#
-# Customizable error responses come in three flavors:
-# 1) plain text 2) local redirects 3) external redirects
-#
-# Some examples:
-#ErrorDocument 500 "The server made a boo boo."
-#ErrorDocument 404 /missing.html
-#ErrorDocument 404 "/cgi-bin/missing_handler.pl"
-#ErrorDocument 402 http://www.example.com/subscription_info.html
-#
-
-#
-# Putting this all together, we can Internationalize error responses.
-#
-# We use Alias to redirect any /error/HTTP_<error>.html.var response to
-# our collection of by-error message multi-language collections.  We use 
-# includes to substitute the appropriate text.
-#
-# You can modify the messages' appearance without changing any of the
-# default HTTP_<error>.html.var files by adding the line;
-#
-#   Alias /error/include/ "/your/include/path/"
-#
-# which allows you to create your own set of files by starting with the
-# @@ServerRoot@@/error/include/ files and
-# copying them to /your/include/path/, even on a per-VirtualHost basis.
-#
-
-<IfModule mod_negotiation.c>
-<IfModule mod_include.c>
-    Alias /error/ "@@ServerRoot@@/error/"
-
-    <Directory "@@ServerRoot@@/error">
-        AllowOverride None
-        Options IncludesNoExec
-        AddOutputFilter Includes html
-        AddHandler type-map var
-        Order allow,deny
-        Allow from all
-        LanguagePriority en es de fr
-        ForceLanguagePriority Prefer Fallback
-    </Directory>
-
-    ErrorDocument 400 /error/HTTP_BAD_REQUEST.html.var
-    ErrorDocument 401 /error/HTTP_UNAUTHORIZED.html.var
-    ErrorDocument 403 /error/HTTP_FORBIDDEN.html.var
-    ErrorDocument 404 /error/HTTP_NOT_FOUND.html.var
-    ErrorDocument 405 /error/HTTP_METHOD_NOT_ALLOWED.html.var
-    ErrorDocument 408 /error/HTTP_REQUEST_TIME_OUT.html.var
-    ErrorDocument 410 /error/HTTP_GONE.html.var
-    ErrorDocument 411 /error/HTTP_LENGTH_REQUIRED.html.var
-    ErrorDocument 412 /error/HTTP_PRECONDITION_FAILED.html.var
-    ErrorDocument 413 /error/HTTP_REQUEST_ENTITY_TOO_LARGE.html.var
-    ErrorDocument 414 /error/HTTP_REQUEST_URI_TOO_LARGE.html.var
-    ErrorDocument 415 /error/HTTP_SERVICE_UNAVAILABLE.html.var
-    ErrorDocument 500 /error/HTTP_INTERNAL_SERVER_ERROR.html.var
-    ErrorDocument 501 /error/HTTP_NOT_IMPLEMENTED.html.var
-    ErrorDocument 502 /error/HTTP_BAD_GATEWAY.html.var
-    ErrorDocument 503 /error/HTTP_SERVICE_UNAVAILABLE.html.var
-    ErrorDocument 506 /error/HTTP_VARIANT_ALSO_VARIES.html.var
-
-</IfModule>
-</IfModule>
-
-#
-# The following directives modify normal HTTP response behavior to
-# handle known problems with browser implementations.
-#
-BrowserMatch "Mozilla/2" nokeepalive
-BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0
-BrowserMatch "RealPlayer 4\.0" force-response-1.0
-BrowserMatch "Java/1\.0" force-response-1.0
-BrowserMatch "JDK/1\.0" force-response-1.0
-
-#
-# The following directive disables redirects on non-GET requests for
-# a directory that does not include the trailing slash.  This fixes a 
-# problem with Microsoft WebFolders which does not appropriately handle 
-# redirects for folders with DAV methods.
-#
-BrowserMatch "Microsoft Data Access Internet Publishing Provider" redirect-carefully
-BrowserMatch "^WebDrive" redirect-carefully
-
-#
-# Allow server status reports, with the URL of http://servername/server-status
-# Change the ".your-domain.com" to match your domain to enable.
-#
-#<Location /server-status>
-#    SetHandler server-status
-#    Order deny,allow
-#    Deny from all
-#    Allow from .your-domain.com
-#</Location>
-
-#
-# Allow remote server configuration reports, with the URL of
-#  http://servername/server-info (requires that mod_info.c be loaded).
-# Change the ".your-domain.com" to match your domain to enable.
-#
-#<Location /server-info>
-#    SetHandler server-info
-#    Order deny,allow
-#    Deny from all
-#    Allow from .your-domain.com
-#</Location>
-
-#
-# Proxy Server directives. Uncomment the following lines to
-# enable the proxy server:
-#
-#<IfModule mod_proxy.c>
-#ProxyRequests On
-#
-#<Proxy *>
-#    Order deny,allow
-#    Deny from all
-#    Allow from .your-domain.com
-#</Proxy>
-
-#
-# Enable/disable the handling of HTTP/1.1 "Via:" headers.
-# ("Full" adds the server version; "Block" removes all outgoing Via: headers)
-# Set to one of: Off | On | Full | Block
-#
-#ProxyVia On
-
-#
-# To enable the cache as well, edit and uncomment the following lines:
-# (no cacheing without CacheRoot)
-#
-#CacheRoot "@@ServerRoot@@/proxy"
-#CacheSize 5
-#CacheGcInterval 4
-#CacheMaxExpire 24
-#CacheLastModifiedFactor 0.1
-#CacheDefaultExpire 1
-#NoCache a-domain.com another-domain.edu joes.garage-sale.com
-
-#</IfModule>
-# End of proxy directives.
-
-#
-# Bring in additional module-specific configurations
-#
-<IfModule mod_ssl.c>
-    Include conf/ssl.conf
-</IfModule>
-
-
-### Section 3: Virtual Hosts
-#
-# VirtualHost: If you want to maintain multiple domains/hostnames on your
-# machine you can setup VirtualHost containers for them. Most configurations
-# use only name-based virtual hosts so the server doesn't need to worry about
-# IP addresses. This is indicated by the asterisks in the directives below.
-#
-# Please see the documentation at 
-# <URL:http://httpd.apache.org/docs-2.0/vhosts/>
-# for further details before you try to setup virtual hosts.
-#
-# You may use the command line option '-S' to verify your virtual host
-# configuration.
-
-#
-# Use name-based virtual hosting.
-#
-#NameVirtualHost *
-
-#
-# VirtualHost example:
-# Almost any Apache directive may go into a VirtualHost container.
-# The first VirtualHost section is used for requests without a known
-# server name.
-#
-#<VirtualHost *>
-#    ServerAdmin webmaster@dummy-host.example.com
-#    DocumentRoot /www/docs/dummy-host.example.com
-#    ServerName dummy-host.example.com
-#    ErrorLog logs/dummy-host.example.com-error_log
-#    CustomLog logs/dummy-host.example.com-access_log common
-#</VirtualHost>
diff --git a/docs/conf/httpd-win.conf b/docs/conf/httpd-win.conf
deleted file mode 100644
index 4714dfa..0000000
--- a/docs/conf/httpd-win.conf
+++ /dev/null
@@ -1,945 +0,0 @@
-#
-# Based upon the NCSA server configuration files originally by Rob McCool.
-#
-# This is the main Apache server configuration file.  It contains the
-# configuration directives that give the server its instructions.
-# See <URL:http://httpd.apache.org/docs-2.0/> for detailed information about
-# the directives.
-#
-# Do NOT simply read the instructions in here without understanding
-# what they do.  They're here only as hints or reminders.  If you are unsure
-# consult the online docs. You have been warned.  
-#
-# The configuration directives are grouped into three basic sections:
-#  1. Directives that control the operation of the Apache server process as a
-#     whole (the 'global environment').
-#  2. Directives that define the parameters of the 'main' or 'default' server,
-#     which responds to requests that aren't handled by a virtual host.
-#     These directives also provide default values for the settings
-#     of all virtual hosts.
-#  3. Settings for virtual hosts, which allow Web requests to be sent to
-#     different IP addresses or hostnames and have them handled by the
-#     same Apache server process.
-#
-# Configuration and logfile names: If the filenames you specify for many
-# of the server's control files begin with "/" (or "drive:/" for Win32), the
-# server will use that explicit path.  If the filenames do *not* begin
-# with "/", the value of ServerRoot is prepended -- so "logs/foo.log"
-# with ServerRoot set to "/usr/local/apache" will be interpreted by the
-# server as "/usr/local/apache/logs/foo.log".
-#
-# NOTE: Where filenames are specified, you must use forward slashes
-# instead of backslashes (e.g., "c:/apache" instead of "c:\apache").
-# If a drive letter is omitted, the drive on which Apache.exe is located
-# will be used by default.  It is recommended that you always supply
-# an explicit drive letter in absolute paths, however, to avoid
-# confusion.
-#
-
-### Section 1: Global Environment
-#
-# The directives in this section affect the overall operation of Apache,
-# such as the number of concurrent requests it can handle or where it
-# can find its configuration files.
-#
-
-#
-# ServerRoot: The top of the directory tree under which the server's
-# configuration, error, and log files are kept.
-#
-# NOTE!  If you intend to place this on an NFS (or otherwise network)
-# mounted filesystem then please read the LockFile documentation
-# (available at <URL:http://httpd.apache.org/docs-2.0/mod/core.html#lockfile>);
-# you will save yourself a lot of trouble.
-#
-# Do NOT add a slash at the end of the directory path.
-#
-ServerRoot "@@ServerRoot@@"
-
-#
-# ScoreBoardFile: File used to store internal server process information.
-# If unspecified (the default), the scoreboard will be stored in an
-# anonymous shared memory segment, and will be unavailable to third-party
-# applications.
-# If specified, ensure that no two invocations of Apache share the same
-# scoreboard file. The scoreboard file MUST BE STORED ON A LOCAL DISK.
-#
-#ScoreBoardFile logs/apache_runtime_status
-
-#
-# PidFile: The file in which the server should record its process
-# identification number when it starts.
-#
-PidFile logs/httpd.pid
-
-#
-# Timeout: The number of seconds before receives and sends time out.
-#
-Timeout 300
-
-#
-# KeepAlive: Whether or not to allow persistent connections (more than
-# one request per connection). Set to "Off" to deactivate.
-#
-KeepAlive On
-
-#
-# MaxKeepAliveRequests: The maximum number of requests to allow
-# during a persistent connection. Set to 0 to allow an unlimited amount.
-# We recommend you leave this number high, for maximum performance.
-#
-MaxKeepAliveRequests 100
-
-#
-# KeepAliveTimeout: Number of seconds to wait for the next request from the
-# same client on the same connection.
-#
-KeepAliveTimeout 15
-
-##
-## Server-Pool Size Regulation (MPM specific)
-## 
-
-# WinNT MPM
-# ThreadsPerChild: constant number of worker threads in the server process
-# MaxRequestsPerChild: maximum  number of requests a server process serves
-<IfModule mpm_winnt.c>
-ThreadsPerChild 250
-MaxRequestsPerChild  0
-</IfModule>
-
-#
-# Listen: Allows you to bind Apache to specific IP addresses and/or
-# ports, in addition to the default. See also the <VirtualHost>
-# directive.
-#
-# Change this to Listen on specific IP addresses as shown below to 
-# prevent Apache from glomming onto all bound IP addresses (0.0.0.0)
-#
-#Listen 12.34.56.78:80
-Listen @@Port@@
-
-#
-# Dynamic Shared Object (DSO) Support
-#
-# To be able to use the functionality of a module which was built as a DSO you
-# have to place corresponding `LoadModule' lines at this location so the
-# directives contained in it are actually available _before_ they are used.
-# Statically compiled modules (those listed by `httpd -l') do not need
-# to be loaded here.
-#
-# Example:
-# LoadModule foo_module modules/mod_foo.so
-#
-LoadModule access_module modules/mod_access.so
-LoadModule actions_module modules/mod_actions.so
-LoadModule alias_module modules/mod_alias.so
-LoadModule asis_module modules/mod_asis.so
-LoadModule auth_module modules/mod_auth.so
-#LoadModule auth_anon_module modules/mod_auth_anon.so
-#LoadModule auth_dbm_module modules/mod_auth_dbm.so
-#LoadModule auth_digest_module modules/mod_auth_digest.so
-LoadModule autoindex_module modules/mod_autoindex.so
-#LoadModule cern_meta_module modules/mod_cern_meta.so
-LoadModule cgi_module modules/mod_cgi.so
-#LoadModule dav_module modules/mod_dav.so
-#LoadModule dav_fs_module modules/mod_dav_fs.so
-LoadModule dir_module modules/mod_dir.so
-LoadModule env_module modules/mod_env.so
-#LoadModule expires_module modules/mod_expires.so
-#LoadModule file_cache_module modules/mod_file_cache.so
-#LoadModule headers_module modules/mod_headers.so
-LoadModule imap_module modules/mod_imap.so
-LoadModule include_module modules/mod_include.so
-#LoadModule info_module modules/mod_info.so
-LoadModule isapi_module modules/mod_isapi.so
-LoadModule log_config_module modules/mod_log_config.so
-LoadModule mime_module modules/mod_mime.so
-#LoadModule mime_magic_module modules/mod_mime_magic.so
-#LoadModule proxy_module modules/mod_proxy.so
-#LoadModule proxy_connect_module modules/mod_proxy_connect.so
-#LoadModule proxy_http_module modules/mod_proxy_http.so
-#LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
-LoadModule negotiation_module modules/mod_negotiation.so
-#LoadModule rewrite_module modules/mod_rewrite.so
-LoadModule setenvif_module modules/mod_setenvif.so
-#LoadModule speling_module modules/mod_speling.so
-#LoadModule status_module modules/mod_status.so
-#LoadModule unique_id_module modules/mod_unique_id.so
-LoadModule userdir_module modules/mod_userdir.so
-#LoadModule usertrack_module modules/mod_usertrack.so
-#LoadModule vhost_alias_module modules/mod_vhost_alias.so
-#LoadModule ssl_module modules/mod_ssl.so
-
-#
-# ExtendedStatus controls whether Apache will generate "full" status
-# information (ExtendedStatus On) or just basic information (ExtendedStatus
-# Off) when the "server-status" handler is called. The default is Off.
-#
-#ExtendedStatus On
-
-### Section 2: 'Main' server configuration
-#
-# The directives in this section set up the values used by the 'main'
-# server, which responds to any requests that aren't handled by a
-# <VirtualHost> definition.  These values also provide defaults for
-# any <VirtualHost> containers you may define later in the file.
-#
-# All of these directives may appear inside <VirtualHost> containers,
-# in which case these default settings will be overridden for the
-# virtual host being defined.
-#
-
-#
-# ServerAdmin: Your address, where problems with the server should be
-# e-mailed.  This address appears on some server-generated pages, such
-# as error documents.  e.g. admin@your-domain.com
-#
-ServerAdmin @@ServerAdmin@@
-
-#
-# ServerName gives the name and port that the server uses to identify itself.
-# This can often be determined automatically, but we recommend you specify
-# it explicitly to prevent problems during startup.
-#
-# If this is not set to valid DNS name for your host, server-generated
-# redirections will not work.  See also the UseCanonicalName directive.
-#
-# If your host doesn't have a registered DNS name, enter its IP address here.
-# You will have to access it by its address anyway, and this will make 
-# redirections work in a sensible way.
-#
-ServerName @@ServerName@@:@@Port@@
-
-#
-# UseCanonicalName: Determines how Apache constructs self-referencing 
-# URLs and the SERVER_NAME and SERVER_PORT variables.
-# When set "Off", Apache will use the Hostname and Port supplied
-# by the client.  When set "On", Apache will use the value of the
-# ServerName directive.
-#
-UseCanonicalName Off
-
-#
-# DocumentRoot: The directory out of which you will serve your
-# documents. By default, all requests are taken from this directory, but
-# symbolic links and aliases may be used to point to other locations.
-#
-DocumentRoot "@@ServerRoot@@/htdocs"
-
-#
-# Each directory to which Apache has access can be configured with respect
-# to which services and features are allowed and/or disabled in that
-# directory (and its subdirectories). 
-#
-# First, we configure the "default" to be a very restrictive set of 
-# features.  
-#
-<Directory />
-    Options FollowSymLinks
-    AllowOverride None
-</Directory>
-
-#
-# Note that from this point forward you must specifically allow
-# particular features to be enabled - so if something's not working as
-# you might expect, make sure that you have specifically enabled it
-# below.
-#
-
-#
-# This should be changed to whatever you set DocumentRoot to.
-#
-<Directory "@@ServerRoot@@/htdocs">
-
-#
-# Possible values for the Options directive are "None", "All",
-# or any combination of:
-#   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI Multiviews
-#
-# Note that "MultiViews" must be named *explicitly* --- "Options All"
-# doesn't give it to you.
-#
-# The Options directive is both complicated and important.  Please see
-# http://httpd.apache.org/docs-2.0/mod/core.html#options
-# for more information.
-#
-    Options Indexes FollowSymLinks
-
-#
-# AllowOverride controls what directives may be placed in .htaccess files.
-# It can be "All", "None", or any combination of the keywords:
-#   Options FileInfo AuthConfig Limit
-#
-    AllowOverride None
-
-#
-# Controls who can get stuff from this server.
-#
-    Order allow,deny
-    Allow from all
-
-</Directory>
-
-#
-# UserDir: The name of the directory that is appended onto a user's home
-# directory if a ~user request is received.  Be especially careful to use
-# proper, forward slashes here.
-#
-UserDir "My Documents/My Website"
-
-#
-# Control access to UserDir directories.  The following is an example
-# for a site where these directories are restricted to read-only.
-#
-# You must correct the path for the root to match your system's configured
-# user directory location, e.g. "C:/WinNT/profiles/*/My Documents/My Website"
-# or whichever, as appropriate.
-#
-#<Directory "C:/Documents and Settings/*/My Documents/My Website">
-#    AllowOverride FileInfo AuthConfig Limit
-#    Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
-#    <Limit GET POST OPTIONS PROPFIND>
-#        Order allow,deny
-#        Allow from all
-#    </Limit>
-#    <LimitExcept GET POST OPTIONS PROPFIND>
-#        Order deny,allow
-#        Deny from all
-#    </LimitExcept>
-#</Directory>
-
-#
-# DirectoryIndex: sets the file that Apache will serve if a directory
-# is requested.
-#
-# The index.html.var file (a type-map) is used to deliver content-
-# negotiated documents.  The MultiViews Option can be used for the 
-# same purpose, but it is much slower.
-#
-DirectoryIndex index.html index.html.var
-
-#
-# AccessFileName: The name of the file to look for in each directory
-# for access control information.  See also the AllowOverride directive.
-#
-AccessFileName .htaccess
-
-#
-# The following lines prevent .htaccess and .htpasswd files from being 
-# viewed by Web clients. 
-#
-<Files ~ "^\.ht">
-    Order allow,deny
-    Deny from all
-</Files>
-
-#
-# TypesConfig describes where the mime.types file (or equivalent) is
-# to be found.
-#
-TypesConfig conf/mime.types
-
-#
-# DefaultType is the default MIME type the server will use for a document
-# if it cannot otherwise determine one, such as from filename extensions.
-# If your server contains mostly text or HTML documents, "text/plain" is
-# a good value.  If most of your content is binary, such as applications
-# or images, you may want to use "application/octet-stream" instead to
-# keep browsers from trying to display binary files as though they are
-# text.
-#
-DefaultType text/plain
-
-#
-# The mod_mime_magic module allows the server to use various hints from the
-# contents of the file itself to determine its type.  The MIMEMagicFile
-# directive tells the module where the hint definitions are located.
-#
-<IfModule mod_mime_magic.c>
-    MIMEMagicFile conf/magic
-</IfModule>
-
-#
-# HostnameLookups: Log the names of clients or just their IP addresses
-# e.g., www.apache.org (on) or 204.62.129.132 (off).
-# The default is off because it'd be overall better for the net if people
-# had to knowingly turn this feature on, since enabling it means that
-# each client request will result in AT LEAST one lookup request to the
-# nameserver.
-#
-HostnameLookups Off
-
-#
-# ErrorLog: The location of the error log file.
-# If you do not specify an ErrorLog directive within a <VirtualHost>
-# container, error messages relating to that virtual host will be
-# logged here.  If you *do* define an error logfile for a <VirtualHost>
-# container, that host's errors will be logged there and not here.
-#
-ErrorLog logs/error.log
-
-#
-# LogLevel: Control the number of messages logged to the error.log.
-# Possible values include: debug, info, notice, warn, error, crit,
-# alert, emerg.
-#
-LogLevel warn
-
-#
-# The following directives define some format nicknames for use with
-# a CustomLog directive (see below).
-#
-LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
-LogFormat "%h %l %u %t \"%r\" %>s %b" common
-LogFormat "%{Referer}i -> %U" referer
-LogFormat "%{User-agent}i" agent
-
-#
-# The location and format of the access logfile (Common Logfile Format).
-# If you do not define any access logfiles within a <VirtualHost>
-# container, they will be logged here.  Contrariwise, if you *do*
-# define per-<VirtualHost> access logfiles, transactions will be
-# logged therein and *not* in this file.
-#
-CustomLog logs/access.log common
-
-#
-# If you would like to have agent and referer logfiles, uncomment the
-# following directives.
-#
-#CustomLog logs/referer.log referer
-#CustomLog logs/agent.log agent
-
-#
-# If you prefer a single logfile with access, agent, and referer information
-# (Combined Logfile Format) you can use the following directive.
-#
-#CustomLog logs/access.log combined
-
-#
-# Optionally add a line containing the server version and virtual host
-# name to server-generated pages (error documents, FTP directory listings,
-# mod_status and mod_info output etc., but not CGI generated documents).
-# Set to "EMail" to also include a mailto: link to the ServerAdmin.
-# Set to one of:  On | Off | EMail
-#
-ServerSignature On
-
-#
-# Aliases: Add here as many aliases as you need (with no limit). The format is 
-# Alias fakename realname
-#
-# Note that if you include a trailing / on fakename then the server will
-# require it to be present in the URL.  So "/icons" isn't aliased in this
-# example, only "/icons/".  If the fakename is slash-terminated, then the 
-# realname must also be slash terminated, and if the fakename omits the 
-# trailing slash, the realname must also omit it.
-#
-# We include the /icons/ alias for FancyIndexed directory listings.  If you
-# do not use FancyIndexing, you may comment this out.
-#
-Alias /icons/ "@@ServerRoot@@/icons/"
-
-<Directory "@@ServerRoot@@/icons">
-    Options Indexes MultiViews
-    AllowOverride None
-    Order allow,deny
-    Allow from all
-</Directory>
-
-#
-# This should be changed to the ServerRoot/manual/.  The alias provides
-# the manual, even if you choose to move your DocumentRoot.  You may comment
-# this out if you do not care for the documentation.
-#
-Alias /manual "@@ServerRoot@@/manual"
-
-<Directory "@@ServerRoot@@/manual">
-    Options Indexes FollowSymLinks MultiViews
-    AllowOverride None
-    Order allow,deny
-    Allow from all
-</Directory>
-
-#
-# ScriptAlias: This controls which directories contain server scripts.
-# ScriptAliases are essentially the same as Aliases, except that
-# documents in the realname directory are treated as applications and
-# run by the server when requested rather than as documents sent to the client.
-# The same rules about trailing "/" apply to ScriptAlias directives as to
-# Alias.
-#
-ScriptAlias /cgi-bin/ "@@ServerRoot@@/cgi-bin/"
-
-#
-# "@@ServerRoot@@/cgi-bin" should be changed to whatever your ScriptAliased
-# CGI directory exists, if you have that configured.
-#
-<Directory "@@ServerRoot@@/cgi-bin">
-    AllowOverride None
-    Options None
-    Order allow,deny
-    Allow from all
-</Directory>
-
-#
-# Redirect allows you to tell clients about documents which used to exist in
-# your server's namespace, but do not anymore. This allows you to tell the
-# clients where to look for the relocated document.
-# Example:
-# Redirect permanent /foo http://www.example.com/bar
-
-#
-# Directives controlling the display of server-generated directory listings.
-#
-
-#
-# FancyIndexing is whether you want fancy directory indexing or standard.
-# VersionSort is whether files containing version numbers should be 
-# compared in the natural way, so that `apache-1.3.9.tar' is placed before
-# `apache-1.3.12.tar'.
-#
-IndexOptions FancyIndexing VersionSort
-
-#
-# AddIcon* directives tell the server which icon to show for different
-# files or filename extensions.  These are only displayed for
-# FancyIndexed directories.
-#
-AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip
-
-AddIconByType (TXT,/icons/text.gif) text/*
-AddIconByType (IMG,/icons/image2.gif) image/*
-AddIconByType (SND,/icons/sound2.gif) audio/*
-AddIconByType (VID,/icons/movie.gif) video/*
-
-AddIcon /icons/binary.gif .bin .exe
-AddIcon /icons/binhex.gif .hqx
-AddIcon /icons/tar.gif .tar
-AddIcon /icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv
-AddIcon /icons/compressed.gif .Z .z .tgz .gz .zip
-AddIcon /icons/a.gif .ps .ai .eps
-AddIcon /icons/layout.gif .html .shtml .htm .pdf
-AddIcon /icons/text.gif .txt
-AddIcon /icons/c.gif .c
-AddIcon /icons/p.gif .pl .py
-AddIcon /icons/f.gif .for
-AddIcon /icons/dvi.gif .dvi
-AddIcon /icons/uuencoded.gif .uu
-AddIcon /icons/script.gif .conf .sh .shar .csh .ksh .tcl
-AddIcon /icons/tex.gif .tex
-AddIcon /icons/bomb.gif core
-
-AddIcon /icons/back.gif ..
-AddIcon /icons/hand.right.gif README
-AddIcon /icons/folder.gif ^^DIRECTORY^^
-AddIcon /icons/blank.gif ^^BLANKICON^^
-
-#
-# DefaultIcon is which icon to show for files which do not have an icon
-# explicitly set.
-#
-DefaultIcon /icons/unknown.gif
-
-#
-# AddDescription allows you to place a short description after a file in
-# server-generated indexes.  These are only displayed for FancyIndexed
-# directories.
-# Format: AddDescription "description" filename
-#
-#AddDescription "GZIP compressed document" .gz
-#AddDescription "tar archive" .tar
-#AddDescription "GZIP compressed tar archive" .tgz
-
-#
-# ReadmeName is the name of the README file the server will look for by
-# default, and append to directory listings.
-#
-# HeaderName is the name of a file which should be prepended to
-# directory indexes. 
-ReadmeName README.html
-HeaderName HEADER.html
-
-#
-# IndexIgnore is a set of filenames which directory indexing should ignore
-# and not include in the listing.  Shell-style wildcarding is permitted.
-#
-IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t
-
-#
-# AddEncoding allows you to have certain browsers (Mosaic/X 2.1+) uncompress
-# information on the fly. Note: Not all browsers support this.
-# Despite the name similarity, the following Add* directives have nothing
-# to do with the FancyIndexing customization directives above.
-#
-AddEncoding x-compress Z
-AddEncoding x-gzip gz tgz
-
-#
-# DefaultLanguage and AddLanguage allows you to specify the language of 
-# a document. You can then use content negotiation to give a browser a 
-# file in a language the user can understand.
-#
-# Specify a default language. This means that all data
-# going out without a specific language tag (see below) will 
-# be marked with this one. You probably do NOT want to set
-# this unless you are sure it is correct for all cases.
-#
-# * It is generally better to not mark a page as 
-# * being a certain language than marking it with the wrong
-# * language!
-#
-# DefaultLanguage nl
-#
-# Note 1: The suffix does not have to be the same as the language
-# keyword --- those with documents in Polish (whose net-standard
-# language code is pl) may wish to use "AddLanguage pl .po" to
-# avoid the ambiguity with the common suffix for perl scripts.
-#
-# Note 2: The example entries below illustrate that in some cases 
-# the two character 'Language' abbreviation is not identical to 
-# the two character 'Country' code for its country,
-# E.g. 'Danmark/dk' versus 'Danish/da'.
-#
-# Note 3: In the case of 'ltz' we violate the RFC by using a three char
-# specifier. There is 'work in progress' to fix this and get
-# the reference data for rfc1766 cleaned up.
-#
-# Danish (da) - Dutch (nl) - English (en) - Estonian (et)
-# French (fr) - German (de) - Greek-Modern (el)
-# Italian (it) - Norwegian (no) - Norwegian Nynorsk (nn) - Korean (kr)
-# Portugese (pt) - Luxembourgeois* (ltz)
-# Spanish (es) - Swedish (sv) - Catalan (ca) - Czech(cz)
-# Polish (pl) - Brazilian Portuguese (pt-br) - Japanese (ja)
-# Russian (ru) - Croatian (hr)
-#
-AddLanguage da .dk
-AddLanguage nl .nl
-AddLanguage en .en
-AddLanguage et .et
-AddLanguage fr .fr
-AddLanguage de .de
-AddLanguage he .he
-AddLanguage el .el
-AddLanguage it .it
-AddLanguage ja .ja
-AddLanguage pl .po
-AddLanguage kr .kr
-AddLanguage pt .pt
-AddLanguage nn .nn
-AddLanguage no .no
-AddLanguage pt-br .pt-br
-AddLanguage ltz .ltz
-AddLanguage ca .ca
-AddLanguage es .es
-AddLanguage sv .se
-AddLanguage cz .cz
-AddLanguage ru .ru
-AddLanguage tw .tw
-AddLanguage zh-tw .tw
-AddLanguage hr .hr
-
-#
-# LanguagePriority allows you to give precedence to some languages
-# in case of a tie during content negotiation.
-#
-# Just list the languages in decreasing order of preference. We have
-# more or less alphabetized them here. You probably want to change this.
-#
-LanguagePriority en da nl et fr de el it ja kr no pl pt pt-br ltz ca es sv tw
-
-#
-# ForceLanguagePriority allows you to serve a result page rather than
-# MULTIPLE CHOICES (Prefer) [in case of a tie] or NOT ACCEPTABLE (Fallback)
-# [in case no accepted languages matched the available variants]
-#
-ForceLanguagePriority Prefer Fallback
-
-#
-# Specify a default charset for all pages sent out. This is
-# always a good idea and opens the door for future internationalisation
-# of your web site, should you ever want it. Specifying it as
-# a default does little harm; as the standard dictates that a page
-# is in iso-8859-1 (latin1) unless specified otherwise i.e. you
-# are merely stating the obvious. There are also some security
-# reasons in browsers, related to javascript and URL parsing
-# which encourage you to always set a default char set.
-#
-AddDefaultCharset ISO-8859-1
-
-#
-# Commonly used filename extensions to character sets. You probably
-# want to avoid clashes with the language extensions, unless you
-# are good at carefully testing your setup after each change.
-# See ftp://ftp.isi.edu/in-notes/iana/assignments/character-sets for
-# the official list of charset names and their respective RFCs
-#
-AddCharset ISO-8859-1  .iso8859-1 .latin1
-AddCharset ISO-8859-2  .iso8859-2 .latin2 .cen
-AddCharset ISO-8859-3  .iso8859-3 .latin3
-AddCharset ISO-8859-4  .iso8859-4 .latin4
-AddCharset ISO-8859-5  .iso8859-5 .latin5 .cyr .iso-ru
-AddCharset ISO-8859-6  .iso8859-6 .latin6 .arb
-AddCharset ISO-8859-7  .iso8859-7 .latin7 .grk
-AddCharset ISO-8859-8  .iso8859-8 .latin8 .heb
-AddCharset ISO-8859-9  .iso8859-9 .latin9 .trk
-AddCharset ISO-2022-JP .iso2022-jp .jis
-AddCharset ISO-2022-KR .iso2022-kr .kis
-AddCharset ISO-2022-CN .iso2022-cn .cis
-AddCharset Big5        .Big5       .big5
-# For russian, more than one charset is used (depends on client, mostly):
-AddCharset WINDOWS-1251 .cp-1251   .win-1251
-AddCharset CP866       .cp866
-AddCharset KOI8-r      .koi8-r .koi8-ru
-AddCharset KOI8-ru     .koi8-uk .ua
-AddCharset ISO-10646-UCS-2 .ucs2
-AddCharset ISO-10646-UCS-4 .ucs4
-AddCharset UTF-8       .utf8
-
-# The set below does not map to a specific (iso) standard
-# but works on a fairly wide range of browsers. Note that
-# capitalization actually matters (it should not, but it
-# does for some browsers).
-#
-# See ftp://ftp.isi.edu/in-notes/iana/assignments/character-sets
-# for a list of sorts. But browsers support few.
-#
-AddCharset GB2312      .gb2312 .gb 
-AddCharset utf-7       .utf7
-AddCharset utf-8       .utf8
-AddCharset big5        .big5 .b5
-AddCharset EUC-TW      .euc-tw
-AddCharset EUC-JP      .euc-jp
-AddCharset EUC-KR      .euc-kr
-AddCharset shift_jis   .sjis
-
-#
-# AddType allows you to add to or override the MIME configuration
-# file mime.types for specific file types.
-#
-AddType application/x-tar .tgz
-
-#
-# AddHandler allows you to map certain file extensions to "handlers":
-# actions unrelated to filetype. These can be either built into the server
-# or added with the Action directive (see below)
-#
-# To use CGI scripts outside of ScriptAliased directories:
-# (You will also need to add "ExecCGI" to the "Options" directive.)
-#
-#AddHandler cgi-script .cgi
-
-#
-# For files that include their own HTTP headers:
-#
-#AddHandler send-as-is asis
-
-#
-# For server-parsed imagemap files:
-#
-#AddHandler imap-file map
-
-#
-# For type maps (negotiated resources):
-# (This is enabled by default to allow the Apache "It Worked" page
-#  to be distributed in multiple languages.)
-#
-AddHandler type-map var
-
-# Filters allow you to process content before it is sent to the client.
-#
-# To parse .shtml files for server-side includes (SSI):
-# (You will also need to add "Includes" to the "Options" directive.)
-#
-#AddOutputFilter INCLUDES .shtml
-
-#
-# Action lets you define media types that will execute a script whenever
-# a matching file is called. This eliminates the need for repeated URL
-# pathnames for oft-used CGI file processors.
-# Format: Action media/type /cgi-script/location
-# Format: Action handler-name /cgi-script/location
-#
-
-#
-# Customizable error responses come in three flavors:
-# 1) plain text 2) local redirects 3) external redirects
-#
-# Some examples:
-#ErrorDocument 500 "The server made a boo boo."
-#ErrorDocument 404 /missing.html
-#ErrorDocument 404 "/cgi-bin/missing_handler.pl"
-#ErrorDocument 402 http://www.example.com/subscription_info.html
-#
-
-#
-# Putting this all together, we can Internationalize error responses.
-#
-# We use Alias to redirect any /error/HTTP_<error>.html.var response to
-# our collection of by-error message multi-language collections.  We use 
-# includes to substitute the appropriate text.
-#
-# You can modify the messages' appearance without changing any of the
-# default HTTP_<error>.html.var files by adding the line;
-#
-#   Alias /error/include/ "/your/include/path/"
-#
-# which allows you to create your own set of files by starting with the
-# @@ServerRoot@@/error/include/ files and
-# copying them to /your/include/path/, even on a per-VirtualHost basis.
-#
-
-<IfModule mod_negotiation.c>
-<IfModule mod_include.c>
-    Alias /error/ "@@ServerRoot@@/error/"
-
-    <Directory "@@ServerRoot@@/error">
-        AllowOverride None
-        Options IncludesNoExec
-        AddOutputFilter Includes html
-        AddHandler type-map var
-        Order allow,deny
-        Allow from all
-        LanguagePriority en es de fr
-        ForceLanguagePriority Prefer Fallback
-    </Directory>
-
-    ErrorDocument 400 /error/HTTP_BAD_REQUEST.html.var
-    ErrorDocument 401 /error/HTTP_UNAUTHORIZED.html.var
-    ErrorDocument 403 /error/HTTP_FORBIDDEN.html.var
-    ErrorDocument 404 /error/HTTP_NOT_FOUND.html.var
-    ErrorDocument 405 /error/HTTP_METHOD_NOT_ALLOWED.html.var
-    ErrorDocument 408 /error/HTTP_REQUEST_TIME_OUT.html.var
-    ErrorDocument 410 /error/HTTP_GONE.html.var
-    ErrorDocument 411 /error/HTTP_LENGTH_REQUIRED.html.var
-    ErrorDocument 412 /error/HTTP_PRECONDITION_FAILED.html.var
-    ErrorDocument 413 /error/HTTP_REQUEST_ENTITY_TOO_LARGE.html.var
-    ErrorDocument 414 /error/HTTP_REQUEST_URI_TOO_LARGE.html.var
-    ErrorDocument 415 /error/HTTP_SERVICE_UNAVAILABLE.html.var
-    ErrorDocument 500 /error/HTTP_INTERNAL_SERVER_ERROR.html.var
-    ErrorDocument 501 /error/HTTP_NOT_IMPLEMENTED.html.var
-    ErrorDocument 502 /error/HTTP_BAD_GATEWAY.html.var
-    ErrorDocument 503 /error/HTTP_SERVICE_UNAVAILABLE.html.var
-    ErrorDocument 506 /error/HTTP_VARIANT_ALSO_VARIES.html.var
-
-</IfModule>
-</IfModule>
-
-#
-# The following directives modify normal HTTP response behavior to
-# handle known problems with browser implementations.
-#
-BrowserMatch "Mozilla/2" nokeepalive
-BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0
-BrowserMatch "RealPlayer 4\.0" force-response-1.0
-BrowserMatch "Java/1\.0" force-response-1.0
-BrowserMatch "JDK/1\.0" force-response-1.0
-
-#
-# The following directive disables redirects on non-GET requests for
-# a directory that does not include the trailing slash.  This fixes a 
-# problem with Microsoft WebFolders which does not appropriately handle 
-# redirects for folders with DAV methods.
-#
-BrowserMatch "Microsoft Data Access Internet Publishing Provider" redirect-carefully
-BrowserMatch "^WebDrive" redirect-carefully
-
-#
-# Allow server status reports, with the URL of http://servername/server-status
-# Change the ".@@DomainName@@" to match your domain to enable.
-#
-#<Location /server-status>
-#    SetHandler server-status
-#    Order deny,allow
-#    Deny from all
-#    Allow from .@@DomainName@@
-#</Location>
-
-#
-# Allow remote server configuration reports, with the URL of
-#  http://servername/server-info (requires that mod_info.c be loaded).
-# Change the ".your-domain.com" to match your domain to enable.
-#
-#<Location /server-info>
-#    SetHandler server-info
-#    Order deny,allow
-#    Deny from all
-#    Allow from .@@DomainName@@
-#</Location>
-
-#
-# Proxy Server directives. Uncomment the following lines to
-# enable the proxy server:
-#
-#<IfModule mod_proxy.c>
-#ProxyRequests On
-#
-#<Proxy *>
-#    Order deny,allow
-#    Deny from all
-#    Allow from .your-domain.com
-#</Proxy>
-
-#
-# Enable/disable the handling of HTTP/1.1 "Via:" headers.
-# ("Full" adds the server version; "Block" removes all outgoing Via: headers)
-# Set to one of: Off | On | Full | Block
-#
-#ProxyVia On
-
-#
-# To enable the cache as well, edit and uncomment the following lines:
-# (no cacheing without CacheRoot)
-#
-#CacheRoot "@@ServerRoot@@/proxy"
-#CacheSize 5
-#CacheGcInterval 4
-#CacheMaxExpire 24
-#CacheLastModifiedFactor 0.1
-#CacheDefaultExpire 1
-#NoCache a-domain.com another-domain.edu joes.garage-sale.com
-
-#</IfModule>
-# End of proxy directives.
-
-#
-# Bring in additional module-specific configurations
-#
-<IfModule mod_ssl.c>
-    Include conf/ssl.conf
-</IfModule>
-
-
-### Section 3: Virtual Hosts
-#
-# VirtualHost: If you want to maintain multiple domains/hostnames on your
-# machine you can setup VirtualHost containers for them. Most configurations
-# use only name-based virtual hosts so the server doesn't need to worry about
-# IP addresses. This is indicated by the asterisks in the directives below.
-#
-# Please see the documentation at 
-# <URL:http://httpd.apache.org/docs-2.0/vhosts/>
-# for further details before you try to setup virtual hosts.
-#
-# You may use the command line option '-S' to verify your virtual host
-# configuration.
-
-#
-# Use name-based virtual hosting.
-#
-#NameVirtualHost *
-
-#
-# VirtualHost example:
-# Almost any Apache directive may go into a VirtualHost container.
-# The first VirtualHost section is used for requests without a known
-# server name.
-#
-#<VirtualHost *>
-#    ServerAdmin webmaster@dummy-host.example.com
-#    DocumentRoot /www/docs/dummy-host.example.com
-#    ServerName dummy-host.example.com
-#    ErrorLog logs/dummy-host.example.com-error_log
-#    CustomLog logs/dummy-host.example.com-access_log common
-#</VirtualHost>
diff --git a/docs/conf/magic b/docs/conf/magic
deleted file mode 100644
index 0aff382..0000000
--- a/docs/conf/magic
+++ /dev/null
@@ -1,371 +0,0 @@
-# Magic data for mod_mime_magic Apache module (originally for file(1) command)
-# The module is described in /manual/mod/mod_mime_magic.html
-#
-# The format is 4-5 columns:
-#    Column #1: byte number to begin checking from, ">" indicates continuation
-#    Column #2: type of data to match
-#    Column #3: contents of data to match
-#    Column #4: MIME type of result
-#    Column #5: MIME encoding of result (optional)
-
-#------------------------------------------------------------------------------
-# Localstuff:  file(1) magic for locally observed files
-# Add any locally observed files here.
-
-#------------------------------------------------------------------------------
-# end local stuff
-#------------------------------------------------------------------------------
-
-#------------------------------------------------------------------------------
-# Java
-
-0	short		0xcafe
->2	short		0xbabe		application/java
-
-#------------------------------------------------------------------------------
-# audio:  file(1) magic for sound formats
-#
-# from Jan Nicolai Langfeldt <janl@ifi.uio.no>,
-#
-
-# Sun/NeXT audio data
-0	string		.snd
->12	belong		1		audio/basic
->12	belong		2		audio/basic
->12	belong		3		audio/basic
->12	belong		4		audio/basic
->12	belong		5		audio/basic
->12	belong		6		audio/basic
->12	belong		7		audio/basic
-
->12	belong		23		audio/x-adpcm
-
-# DEC systems (e.g. DECstation 5000) use a variant of the Sun/NeXT format
-# that uses little-endian encoding and has a different magic number
-# (0x0064732E in little-endian encoding).
-0	lelong		0x0064732E	
->12	lelong		1		audio/x-dec-basic
->12	lelong		2		audio/x-dec-basic
->12	lelong		3		audio/x-dec-basic
->12	lelong		4		audio/x-dec-basic
->12	lelong		5		audio/x-dec-basic
->12	lelong		6		audio/x-dec-basic
->12	lelong		7		audio/x-dec-basic
-#                                       compressed (G.721 ADPCM)
->12	lelong		23		audio/x-dec-adpcm
-
-# Bytes 0-3 of AIFF, AIFF-C, & 8SVX audio files are "FORM"
-#					AIFF audio data
-8	string		AIFF		audio/x-aiff	
-#					AIFF-C audio data
-8	string		AIFC		audio/x-aiff	
-#					IFF/8SVX audio data
-8	string		8SVX		audio/x-aiff	
-
-# Creative Labs AUDIO stuff
-#					Standard MIDI data
-0	string	MThd			audio/unknown	
-#>9 	byte	>0			(format %d)
-#>11	byte	>1			using %d channels
-#					Creative Music (CMF) data
-0	string	CTMF			audio/unknown	
-#					SoundBlaster instrument data
-0	string	SBI			audio/unknown	
-#					Creative Labs voice data
-0	string	Creative\ Voice\ File	audio/unknown	
-## is this next line right?  it came this way...
-#>19	byte	0x1A
-#>23	byte	>0			- version %d
-#>22	byte	>0			\b.%d
-
-# [GRR 950115:  is this also Creative Labs?  Guessing that first line
-#  should be string instead of unknown-endian long...]
-#0	long		0x4e54524b	MultiTrack sound data
-#0	string		NTRK		MultiTrack sound data
-#>4	long		x		- version %ld
-
-# Microsoft WAVE format (*.wav)
-# [GRR 950115:  probably all of the shorts and longs should be leshort/lelong]
-#					Microsoft RIFF
-0	string		RIFF		audio/unknown	
-#					- WAVE format
->8	string		WAVE		audio/x-wav	
-
-#------------------------------------------------------------------------------
-# c-lang:  file(1) magic for C programs or various scripts
-#
-
-# XPM icons (Greg Roelofs, newt@uchicago.edu)
-# ideally should go into "images", but entries below would tag XPM as C source
-0	string		/*\ XPM		image/x-xbm	7bit
-
-# this first will upset you if you're a PL/1 shop... (are there any left?)
-# in which case rm it; ascmagic will catch real C programs
-#					C or REXX program text
-0	string		/*		text/plain
-#					C++ program text
-0	string		//		text/plain
-
-#------------------------------------------------------------------------------
-# compress:  file(1) magic for pure-compression formats (no archives)
-#
-# compress, gzip, pack, compact, huf, squeeze, crunch, freeze, yabba, whap, etc.
-#
-# Formats for various forms of compressed data
-# Formats for "compress" proper have been moved into "compress.c",
-# because it tries to uncompress it to figure out what's inside.
-
-# standard unix compress
-0	string		\037\235	application/octet-stream	x-compress
-
-# gzip (GNU zip, not to be confused with [Info-ZIP/PKWARE] zip archiver)
-0       string          \037\213        application/octet-stream	x-gzip
-
-# According to gzip.h, this is the correct byte order for packed data.
-0	string		\037\036	application/octet-stream
-#
-# This magic number is byte-order-independent.
-#
-0	short		017437		application/octet-stream
-
-# XXX - why *two* entries for "compacted data", one of which is
-# byte-order independent, and one of which is byte-order dependent?
-#
-# compacted data
-0	short		0x1fff		application/octet-stream
-0	string		\377\037	application/octet-stream
-# huf output
-0	short		0145405		application/octet-stream
-
-# Squeeze and Crunch...
-# These numbers were gleaned from the Unix versions of the programs to
-# handle these formats.  Note that I can only uncrunch, not crunch, and
-# I didn't have a crunched file handy, so the crunch number is untested.
-#				Keith Waclena <keith@cerberus.uchicago.edu>
-#0	leshort		0x76FF		squeezed data (CP/M, DOS)
-#0	leshort		0x76FE		crunched data (CP/M, DOS)
-
-# Freeze
-#0	string		\037\237	Frozen file 2.1
-#0	string		\037\236	Frozen file 1.0 (or gzip 0.5)
-
-# lzh?
-#0	string		\037\240	LZH compressed data
-
-#------------------------------------------------------------------------------
-# frame:  file(1) magic for FrameMaker files
-#
-# This stuff came on a FrameMaker demo tape, most of which is
-# copyright, but this file is "published" as witness the following:
-#
-0	string		\<MakerFile	application/x-frame
-0	string		\<MIFFile	application/x-frame
-0	string		\<MakerDictionary	application/x-frame
-0	string		\<MakerScreenFon	application/x-frame
-0	string		\<MML		application/x-frame
-0	string		\<Book		application/x-frame
-0	string		\<Maker		application/x-frame
-
-#------------------------------------------------------------------------------
-# html:  file(1) magic for HTML (HyperText Markup Language) docs
-#
-# from Daniel Quinlan <quinlan@yggdrasil.com>
-# and Anna Shergold <anna@inext.co.uk>
-#
-0	string		\<!DOCTYPE\ HTML	text/html
-0	string		\<!doctype\ html	text/html
-0	string		\<HEAD		text/html
-0	string		\<head		text/html
-0	string		\<TITLE		text/html
-0	string		\<title		text/html
-0       string          \<html          text/html
-0       string          \<HTML          text/html
-0	string		\<!--		text/html
-0	string		\<h1		text/html
-0	string		\<H1		text/html
-
-#------------------------------------------------------------------------------
-# images:  file(1) magic for image formats (see also "c-lang" for XPM bitmaps)
-#
-# originally from jef@helios.ee.lbl.gov (Jef Poskanzer),
-# additions by janl@ifi.uio.no as well as others. Jan also suggested
-# merging several one- and two-line files into here.
-#
-# XXX - byte order for GIF and TIFF fields?
-# [GRR:  TIFF allows both byte orders; GIF is probably little-endian]
-#
-
-# [GRR:  what the hell is this doing in here?]
-#0	string		xbtoa		btoa'd file
-
-# PBMPLUS
-#					PBM file
-0	string		P1		image/x-portable-bitmap	7bit
-#					PGM file
-0	string		P2		image/x-portable-greymap	7bit
-#					PPM file
-0	string		P3		image/x-portable-pixmap	7bit
-#					PBM "rawbits" file
-0	string		P4		image/x-portable-bitmap
-#					PGM "rawbits" file
-0	string		P5		image/x-portable-greymap
-#					PPM "rawbits" file
-0	string		P6		image/x-portable-pixmap
-
-# NIFF (Navy Interchange File Format, a modification of TIFF)
-# [GRR:  this *must* go before TIFF]
-0	string		IIN1		image/x-niff
-
-# TIFF and friends
-#					TIFF file, big-endian
-0	string		MM		image/tiff
-#					TIFF file, little-endian
-0	string		II		image/tiff
-
-# possible GIF replacements; none yet released!
-# (Greg Roelofs, newt@uchicago.edu)
-#
-# GRR 950115:  this was mine ("Zip GIF"):
-#					ZIF image (GIF+deflate alpha)
-0	string		GIF94z		image/unknown
-#
-# GRR 950115:  this is Jeremy Wohl's Free Graphics Format (better):
-#					FGF image (GIF+deflate beta)
-0	string		FGF95a		image/unknown
-#
-# GRR 950115:  this is Thomas Boutell's Portable Bitmap Format proposal
-# (best; not yet implemented):
-#					PBF image (deflate compression)
-0	string		PBF		image/unknown
-
-# GIF
-0	string		GIF		image/gif
-
-# JPEG images
-0	beshort		0xffd8		image/jpeg
-
-# PC bitmaps (OS/2, Windoze BMP files)  (Greg Roelofs, newt@uchicago.edu)
-0	string		BM		image/bmp
-#>14	byte		12		(OS/2 1.x format)
-#>14	byte		64		(OS/2 2.x format)
-#>14	byte		40		(Windows 3.x format)
-#0	string		IC		icon
-#0	string		PI		pointer
-#0	string		CI		color icon
-#0	string		CP		color pointer
-#0	string		BA		bitmap array
-
-
-#------------------------------------------------------------------------------
-# lisp:  file(1) magic for lisp programs
-#
-# various lisp types, from Daniel Quinlan (quinlan@yggdrasil.com)
-0	string	;;			text/plain	8bit
-# Emacs 18 - this is always correct, but not very magical.
-0	string	\012(			application/x-elc
-# Emacs 19
-0	string	;ELC\023\000\000\000	application/x-elc
-
-#------------------------------------------------------------------------------
-# mail.news:  file(1) magic for mail and news
-#
-# There are tests to ascmagic.c to cope with mail and news.
-0	string		Relay-Version: 	message/rfc822	7bit
-0	string		#!\ rnews	message/rfc822	7bit
-0	string		N#!\ rnews	message/rfc822	7bit
-0	string		Forward\ to 	message/rfc822	7bit
-0	string		Pipe\ to 	message/rfc822	7bit
-0	string		Return-Path:	message/rfc822	7bit
-0	string		Path:		message/news	8bit
-0	string		Xref:		message/news	8bit
-0	string		From:		message/rfc822	7bit
-0	string		Article 	message/news	8bit
-#------------------------------------------------------------------------------
-# msword: file(1) magic for MS Word files
-#
-# Contributor claims:
-# Reversed-engineered MS Word magic numbers
-#
-
-0	string		\376\067\0\043			application/msword
-0	string		\333\245-\0\0\0			application/msword
-
-# disable this one because it applies also to other
-# Office/OLE documents for which msword is not correct. See PR#2608.
-#0	string		\320\317\021\340\241\261	application/msword
-
-
-
-#------------------------------------------------------------------------------
-# printer:  file(1) magic for printer-formatted files
-#
-
-# PostScript
-0	string		%!		application/postscript
-0	string		\004%!		application/postscript
-
-# Acrobat
-# (due to clamen@cs.cmu.edu)
-0	string		%PDF-		application/pdf
-
-#------------------------------------------------------------------------------
-# sc:  file(1) magic for "sc" spreadsheet
-#
-38	string		Spreadsheet	application/x-sc
-
-#------------------------------------------------------------------------------
-# tex:  file(1) magic for TeX files
-#
-# XXX - needs byte-endian stuff (big-endian and little-endian DVI?)
-#
-# From <conklin@talisman.kaleida.com>
-
-# Although we may know the offset of certain text fields in TeX DVI
-# and font files, we can't use them reliably because they are not
-# zero terminated. [but we do anyway, christos]
-0	string		\367\002	application/x-dvi
-#0	string		\367\203	TeX generic font data
-#0	string		\367\131	TeX packed font data
-#0	string		\367\312	TeX virtual font data
-#0	string		This\ is\ TeX,	TeX transcript text	
-#0	string		This\ is\ METAFONT,	METAFONT transcript text
-
-# There is no way to detect TeX Font Metric (*.tfm) files without
-# breaking them apart and reading the data.  The following patterns
-# match most *.tfm files generated by METAFONT or afm2tfm.
-#2	string		\000\021	TeX font metric data
-#2	string		\000\022	TeX font metric data
-#>34	string		>\0		(%s)
-
-# Texinfo and GNU Info, from Daniel Quinlan (quinlan@yggdrasil.com)
-#0	string		\\input\ texinfo	Texinfo source text
-#0	string		This\ is\ Info\ file	GNU Info text
-
-# correct TeX magic for Linux (and maybe more)
-# from Peter Tobias (tobias@server.et-inf.fho-emden.de)
-#
-0	leshort		0x02f7		application/x-dvi
-
-# RTF - Rich Text Format
-0	string		{\\rtf		application/rtf
-
-#------------------------------------------------------------------------------
-# animation:  file(1) magic for animation/movie formats
-#
-# animation formats, originally from vax@ccwf.cc.utexas.edu (VaX#n8)
-#						MPEG file
-0	string		\000\000\001\263	video/mpeg
-#
-# The contributor claims:
-#   I couldn't find a real magic number for these, however, this
-#   -appears- to work.  Note that it might catch other files, too,
-#   so BE CAREFUL!
-#
-# Note that title and author appear in the two 20-byte chunks
-# at decimal offsets 2 and 22, respectively, but they are XOR'ed with
-# 255 (hex FF)! DL format SUCKS BIG ROCKS.
-#
-#						DL file version 1 , medium format (160x100, 4 images/screen)
-0	byte		1			video/unknown
-0	byte		2			video/unknown
-
diff --git a/docs/conf/mime.types b/docs/conf/mime.types
deleted file mode 100644
index 16c8cbd..0000000
--- a/docs/conf/mime.types
+++ /dev/null
@@ -1,469 +0,0 @@
-# This is a comment. I love comments.
-
-# This file controls what Internet media types are sent to the client for
-# given file extension(s).  Sending the correct media type to the client
-# is important so they know how to handle the content of the file.
-# Extra types can either be added here or by using an AddType directive
-# in your config files. For more information about Internet media types,
-# please read RFC 2045, 2046, 2047, 2048, and 2077.  The Internet media type
-# registry is at <ftp://ftp.iana.org/in-notes/iana/assignments/media-types/>.
-
-# MIME type			Extension
-application/EDI-Consent
-application/EDI-X12
-application/EDIFACT
-application/activemessage
-application/andrew-inset	ez
-application/applefile
-application/atomicmail
-application/batch-SMTP
-application/beep+xml
-application/cals-1840
-application/commonground
-application/cybercash
-application/dca-rft
-application/dec-dx
-application/dvcs
-application/eshop
-application/http
-application/hyperstudio
-application/iges
-application/index
-application/index.cmd
-application/index.obj
-application/index.response
-application/index.vnd
-application/iotp
-application/ipp
-application/isup
-application/font-tdpfr
-application/mac-binhex40	hqx
-application/mac-compactpro	cpt
-application/macwriteii
-application/marc
-application/mathematica
-application/mathematica-old
-application/msword		doc
-application/news-message-id
-application/news-transmission
-application/ocsp-request
-application/ocsp-response
-application/octet-stream	bin dms lha lzh exe class so dll
-application/oda			oda
-application/parityfec
-application/pdf			pdf
-application/pgp-encrypted
-application/pgp-keys
-application/pgp-signature
-application/pkcs10
-application/pkcs7-mime
-application/pkcs7-signature
-application/pkix-cert
-application/pkix-crl
-application/pkixcmp
-application/postscript		ai eps ps
-application/prs.alvestrand.titrax-sheet
-application/prs.cww
-application/prs.nprend
-application/qsig
-application/remote-printing
-application/riscos
-application/rtf
-application/sdp
-application/set-payment
-application/set-payment-initiation
-application/set-registration
-application/set-registration-initiation
-application/sgml
-application/sgml-open-catalog
-application/sieve
-application/slate
-application/smil		smi smil
-application/timestamp-query
-application/timestamp-reply
-application/vemmi
-application/vnd.3M.Post-it-Notes
-application/vnd.FloGraphIt
-application/vnd.accpac.simply.aso
-application/vnd.accpac.simply.imp
-application/vnd.acucobol
-application/vnd.aether.imp
-application/vnd.anser-web-certificate-issue-initiation
-application/vnd.anser-web-funds-transfer-initiation
-application/vnd.audiograph
-application/vnd.businessobjects
-application/vnd.bmi
-application/vnd.canon-cpdl
-application/vnd.canon-lips
-application/vnd.claymore
-application/vnd.commerce-battelle
-application/vnd.commonspace
-application/vnd.comsocaller
-application/vnd.contact.cmsg
-application/vnd.cosmocaller
-application/vnd.cups-postscript
-application/vnd.cups-raster
-application/vnd.cups-raw
-application/vnd.ctc-posml
-application/vnd.cybank
-application/vnd.dna
-application/vnd.dpgraph
-application/vnd.dxr
-application/vnd.ecdis-update
-application/vnd.ecowin.chart
-application/vnd.ecowin.filerequest
-application/vnd.ecowin.fileupdate
-application/vnd.ecowin.series
-application/vnd.ecowin.seriesrequest
-application/vnd.ecowin.seriesupdate
-application/vnd.enliven
-application/vnd.epson.esf
-application/vnd.epson.msf
-application/vnd.epson.quickanime
-application/vnd.epson.salt
-application/vnd.epson.ssf
-application/vnd.ericsson.quickcall
-application/vnd.eudora.data
-application/vnd.fdf
-application/vnd.ffsns
-application/vnd.framemaker
-application/vnd.fsc.weblaunch
-application/vnd.fujitsu.oasys
-application/vnd.fujitsu.oasys2
-application/vnd.fujitsu.oasys3
-application/vnd.fujitsu.oasysgp
-application/vnd.fujitsu.oasysprs
-application/vnd.fujixerox.ddd
-application/vnd.fujixerox.docuworks
-application/vnd.fujixerox.docuworks.binder
-application/vnd.fut-misnet
-application/vnd.grafeq
-application/vnd.groove-account
-application/vnd.groove-identity-message
-application/vnd.groove-injector
-application/vnd.groove-tool-message
-application/vnd.groove-tool-template
-application/vnd.groove-vcard
-application/vnd.hhe.lesson-player
-application/vnd.hp-HPGL
-application/vnd.hp-PCL
-application/vnd.hp-PCLXL
-application/vnd.hp-hpid
-application/vnd.hp-hps
-application/vnd.httphone
-application/vnd.hzn-3d-crossword
-application/vnd.ibm.afplinedata
-application/vnd.ibm.MiniPay
-application/vnd.ibm.modcap
-application/vnd.informix-visionary
-application/vnd.intercon.formnet
-application/vnd.intertrust.digibox
-application/vnd.intertrust.nncp
-application/vnd.intu.qbo
-application/vnd.intu.qfx
-application/vnd.irepository.package+xml
-application/vnd.is-xpr
-application/vnd.japannet-directory-service
-application/vnd.japannet-jpnstore-wakeup
-application/vnd.japannet-payment-wakeup
-application/vnd.japannet-registration
-application/vnd.japannet-registration-wakeup
-application/vnd.japannet-setstore-wakeup
-application/vnd.japannet-verification
-application/vnd.japannet-verification-wakeup
-application/vnd.koan
-application/vnd.lotus-1-2-3
-application/vnd.lotus-approach
-application/vnd.lotus-freelance
-application/vnd.lotus-notes
-application/vnd.lotus-organizer
-application/vnd.lotus-screencam
-application/vnd.lotus-wordpro
-application/vnd.mcd
-application/vnd.mediastation.cdkey
-application/vnd.meridian-slingshot
-application/vnd.mif		mif
-application/vnd.minisoft-hp3000-save
-application/vnd.mitsubishi.misty-guard.trustweb
-application/vnd.mobius.daf
-application/vnd.mobius.dis
-application/vnd.mobius.msl
-application/vnd.mobius.plc
-application/vnd.mobius.txf
-application/vnd.motorola.flexsuite
-application/vnd.motorola.flexsuite.adsi
-application/vnd.motorola.flexsuite.fis
-application/vnd.motorola.flexsuite.gotap
-application/vnd.motorola.flexsuite.kmr
-application/vnd.motorola.flexsuite.ttc
-application/vnd.motorola.flexsuite.wem
-application/vnd.mozilla.xul+xml
-application/vnd.ms-artgalry
-application/vnd.ms-asf
-application/vnd.ms-excel	xls
-application/vnd.ms-lrm
-application/vnd.ms-powerpoint	ppt
-application/vnd.ms-project
-application/vnd.ms-tnef
-application/vnd.ms-works
-application/vnd.mseq
-application/vnd.msign
-application/vnd.music-niff
-application/vnd.musician
-application/vnd.netfpx
-application/vnd.noblenet-directory
-application/vnd.noblenet-sealer
-application/vnd.noblenet-web
-application/vnd.novadigm.EDM
-application/vnd.novadigm.EDX
-application/vnd.novadigm.EXT
-application/vnd.osa.netdeploy
-application/vnd.palm
-application/vnd.pg.format
-application/vnd.pg.osasli
-application/vnd.powerbuilder6
-application/vnd.powerbuilder6-s
-application/vnd.powerbuilder7
-application/vnd.powerbuilder7-s
-application/vnd.powerbuilder75
-application/vnd.powerbuilder75-s
-application/vnd.previewsystems.box
-application/vnd.publishare-delta-tree
-application/vnd.pvi.ptid1
-application/vnd.pwg-xhtml-print+xml
-application/vnd.rapid
-application/vnd.s3sms
-application/vnd.seemail
-application/vnd.shana.informed.formdata
-application/vnd.shana.informed.formtemplate
-application/vnd.shana.informed.interchange
-application/vnd.shana.informed.package
-application/vnd.sss-cod
-application/vnd.sss-dtf
-application/vnd.sss-ntf
-application/vnd.street-stream
-application/vnd.svd
-application/vnd.swiftview-ics
-application/vnd.triscape.mxs
-application/vnd.trueapp
-application/vnd.truedoc
-application/vnd.tve-trigger
-application/vnd.ufdl
-application/vnd.uplanet.alert
-application/vnd.uplanet.alert-wbxml
-application/vnd.uplanet.bearer-choice-wbxml
-application/vnd.uplanet.bearer-choice
-application/vnd.uplanet.cacheop
-application/vnd.uplanet.cacheop-wbxml
-application/vnd.uplanet.channel
-application/vnd.uplanet.channel-wbxml
-application/vnd.uplanet.list
-application/vnd.uplanet.list-wbxml
-application/vnd.uplanet.listcmd
-application/vnd.uplanet.listcmd-wbxml
-application/vnd.uplanet.signal
-application/vnd.vcx
-application/vnd.vectorworks
-application/vnd.vidsoft.vidconference
-application/vnd.visio
-application/vnd.vividence.scriptfile
-application/vnd.wap.sic
-application/vnd.wap.slc
-application/vnd.wap.wbxml	wbxml
-application/vnd.wap.wmlc	wmlc
-application/vnd.wap.wmlscriptc	wmlsc
-application/vnd.webturbo
-application/vnd.wrq-hp3000-labelled
-application/vnd.wt.stf
-application/vnd.xara
-application/vnd.xfdl
-application/vnd.yellowriver-custom-menu
-application/whoispp-query
-application/whoispp-response
-application/wita
-application/wordperfect5.1
-application/x-bcpio		bcpio
-application/x-cdlink		vcd
-application/x-chess-pgn		pgn
-application/x-compress
-application/x-cpio		cpio
-application/x-csh		csh
-application/x-director		dcr dir dxr
-application/x-dvi		dvi
-application/x-futuresplash	spl
-application/x-gtar		gtar
-application/x-gzip
-application/x-hdf		hdf
-application/x-javascript	js
-application/x-koan		skp skd skt skm
-application/x-latex		latex
-application/x-netcdf		nc cdf
-application/x-sh		sh
-application/x-shar		shar
-application/x-shockwave-flash	swf
-application/x-stuffit		sit
-application/x-sv4cpio		sv4cpio
-application/x-sv4crc		sv4crc
-application/x-tar		tar
-application/x-tcl		tcl
-application/x-tex		tex
-application/x-texinfo		texinfo texi
-application/x-troff		t tr roff
-application/x-troff-man		man
-application/x-troff-me		me
-application/x-troff-ms		ms
-application/x-ustar		ustar
-application/x-wais-source	src
-application/x400-bp
-application/xml
-application/xml-dtd
-application/xml-external-parsed-entity
-application/zip			zip
-audio/32kadpcm
-audio/basic			au snd
-audio/g.722.1
-audio/l16
-audio/midi			mid midi kar
-audio/mp4a-latm
-audio/mpa-robust
-audio/mpeg			mpga mp2 mp3
-audio/parityfec
-audio/prs.sid
-audio/telephone-event
-audio/tone
-audio/vnd.cisco.nse
-audio/vnd.cns.anp1
-audio/vnd.cns.inf1
-audio/vnd.digital-winds
-audio/vnd.everad.plj
-audio/vnd.lucent.voice
-audio/vnd.nortel.vbk
-audio/vnd.nuera.ecelp4800
-audio/vnd.nuera.ecelp7470
-audio/vnd.nuera.ecelp9600
-audio/vnd.octel.sbc
-audio/vnd.qcelp
-audio/vnd.rhetorex.32kadpcm
-audio/vnd.vmx.cvsd
-audio/x-aiff			aif aiff aifc
-audio/x-mpegurl			m3u
-audio/x-pn-realaudio		ram rm
-audio/x-pn-realaudio-plugin	rpm
-audio/x-realaudio		ra
-audio/x-wav			wav
-chemical/x-pdb			pdb
-chemical/x-xyz			xyz
-image/bmp			bmp
-image/cgm
-image/g3fax
-image/gif			gif
-image/ief			ief
-image/jpeg			jpeg jpg jpe
-image/naplps
-image/png			png
-image/prs.btif
-image/prs.pti
-image/tiff			tiff tif
-image/vnd.cns.inf2
-image/vnd.dwg
-image/vnd.dxf
-image/vnd.fastbidsheet
-image/vnd.fpx
-image/vnd.fst
-image/vnd.fujixerox.edmics-mmr
-image/vnd.fujixerox.edmics-rlc
-image/vnd.mix
-image/vnd.net-fpx
-image/vnd.svf
-image/vnd.wap.wbmp		wbmp
-image/vnd.xiff
-image/x-cmu-raster		ras
-image/x-portable-anymap		pnm
-image/x-portable-bitmap		pbm
-image/x-portable-graymap	pgm
-image/x-portable-pixmap		ppm
-image/x-rgb			rgb
-image/x-xbitmap			xbm
-image/x-xpixmap			xpm
-image/x-xwindowdump		xwd
-message/delivery-status
-message/disposition-notification
-message/external-body
-message/http
-message/news
-message/partial
-message/rfc822
-message/s-http
-model/iges			igs iges
-model/mesh			msh mesh silo
-model/vnd.dwf
-model/vnd.flatland.3dml
-model/vnd.gdl
-model/vnd.gs-gdl
-model/vnd.gtw
-model/vnd.mts
-model/vnd.vtu
-model/vrml			wrl vrml
-multipart/alternative
-multipart/appledouble
-multipart/byteranges
-multipart/digest
-multipart/encrypted
-multipart/form-data
-multipart/header-set
-multipart/mixed
-multipart/parallel
-multipart/related
-multipart/report
-multipart/signed
-multipart/voice-message
-text/calendar
-text/css			css
-text/directory
-text/enriched
-text/html			html htm
-text/parityfec
-text/plain			asc txt
-text/prs.lines.tag
-text/rfc822-headers
-text/richtext			rtx
-text/rtf			rtf
-text/sgml			sgml sgm
-text/tab-separated-values	tsv
-text/t140
-text/uri-list
-text/vnd.DMClientScript
-text/vnd.IPTC.NITF
-text/vnd.IPTC.NewsML
-text/vnd.abc
-text/vnd.curl
-text/vnd.flatland.3dml
-text/vnd.fly
-text/vnd.fmi.flexstor
-text/vnd.in3d.3dml
-text/vnd.in3d.spot
-text/vnd.latex-z
-text/vnd.motorola.reflex
-text/vnd.ms-mediapackage
-text/vnd.wap.si
-text/vnd.wap.sl
-text/vnd.wap.wml		wml
-text/vnd.wap.wmlscript		wmls
-text/x-setext			etx
-text/xml			xml xsl
-text/xml-external-parsed-entity
-video/mp4v-es
-video/mpeg			mpeg mpg mpe
-video/parityfec
-video/pointer
-video/quicktime			qt mov
-video/vnd.fvt
-video/vnd.motorola.video
-video/vnd.motorola.videop
-video/vnd.mpegurl		mxu
-video/vnd.mts
-video/vnd.nokia.interleaved-multimedia
-video/vnd.vivo
-video/x-msvideo			avi
-video/x-sgi-movie		movie
-x-conference/x-cooltalk		ice
diff --git a/docs/conf/ssl-std.conf b/docs/conf/ssl-std.conf
deleted file mode 100644
index 17cd5f9..0000000
--- a/docs/conf/ssl-std.conf
+++ /dev/null
@@ -1,264 +0,0 @@
-#
-# This is the Apache server configuration file providing SSL support.
-# It contains the configuration directives to instruct the server how to
-# serve pages over an https connection. For detailing information about these 
-# directives see <URL:http://httpd.apache.org/docs-2.0/mod/mod_ssl.html>
-#
-#   For the moment, see <URL:http://www.modssl.org/docs/> for this info. 
-#   The documents are still being prepared from material donated by the
-#   modssl project.
-# 
-# Do NOT simply read the instructions in here without understanding
-# what they do.  They're here only as hints or reminders.  If you are unsure
-# consult the online docs. You have been warned.  
-#
-<IfDefine SSL>
-
-#   Until documentation is completed, please check http://www.modssl.org/
-#   for additional config examples and module docmentation.  Directives
-#   and features of mod_ssl are largely unchanged from the mod_ssl project
-#   for Apache 1.3.
-
-#
-# When we also provide SSL we have to listen to the 
-# standard HTTP port (see above) and to the HTTPS port
-#
-Listen 443
-
-#
-# Dynamic Shared Object (DSO) Support
-#
-# To be able to use the functionality of a module which was built as a DSO you
-#    ErrorLog logs/dummy-host.example.com-error_log
-#    CustomLog logs/dummy-host.example.com-access_log common
-
-##
-##  SSL Global Context
-##
-##  All SSL configuration in this context applies both to
-##  the main server and all SSL-enabled virtual hosts.
-##
-
-#
-#   Some MIME-types for downloading Certificates and CRLs
-#
-AddType application/x-x509-ca-cert .crt
-AddType application/x-pkcs7-crl    .crl
-
-#   Pass Phrase Dialog:
-#   Configure the pass phrase gathering process.
-#   The filtering dialog program (`builtin' is a internal
-#   terminal dialog) has to provide the pass phrase on stdout.
-SSLPassPhraseDialog  builtin
-
-#   Inter-Process Session Cache:
-#   Configure the SSL Session Cache: First the mechanism 
-#   to use and second the expiring timeout (in seconds).
-#SSLSessionCache        none
-#SSLSessionCache        shmht:logs/ssl_scache(512000)
-#SSLSessionCache        shmcb:logs/ssl_scache(512000)
-SSLSessionCache         dbm:logs/ssl_scache
-SSLSessionCacheTimeout  300
-
-#   Semaphore:
-#   Configure the path to the mutual exclusion semaphore the
-#   SSL engine uses internally for inter-process synchronization. 
-SSLMutex  file:logs/ssl_mutex
-
-#   Pseudo Random Number Generator (PRNG):
-#   Configure one or more sources to seed the PRNG of the 
-#   SSL library. The seed data should be of good random quality.
-#   WARNING! On some platforms /dev/random blocks if not enough entropy
-#   is available. This means you then cannot use the /dev/random device
-#   because it would lead to very long connection times (as long as
-#   it requires to make more entropy available). But usually those
-#   platforms additionally provide a /dev/urandom device which doesn't
-#   block. So, if available, use this one instead. Read the mod_ssl User
-#   Manual for more details.
-SSLRandomSeed startup builtin
-SSLRandomSeed connect builtin
-#SSLRandomSeed startup file:/dev/random  512
-#SSLRandomSeed startup file:/dev/urandom 512
-#SSLRandomSeed connect file:/dev/random  512
-#SSLRandomSeed connect file:/dev/urandom 512
-
-#   Logging:
-#   The home of the dedicated SSL protocol logfile. Errors are
-#   additionally duplicated in the general error log file.  Put
-#   this somewhere where it cannot be used for symlink attacks on
-#   a real server (i.e. somewhere where only root can write).
-#   Log levels are (ascending order: higher ones include lower ones):
-#   none, error, warn, info, trace, debug.
-SSLLog      logs/ssl_engine_log
-SSLLogLevel info
-
-##
-## SSL Virtual Host Context
-##
-
-<VirtualHost _default_:443>
-
-#  General setup for the virtual host
-DocumentRoot "@@ServerRoot@@/htdocs"
-ServerName new.host.name:443
-ServerAdmin you@your.address
-ErrorLog logs/error_log
-TransferLog logs/access_log
-
-#   SSL Engine Switch:
-#   Enable/Disable SSL for this virtual host.
-SSLEngine on
-
-#   SSL Cipher Suite:
-#   List the ciphers that the client is permitted to negotiate.
-#   See the mod_ssl documentation for a complete list.
-SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
-
-#   Server Certificate:
-#   Point SSLCertificateFile at a PEM encoded certificate.  If
-#   the certificate is encrypted, then you will be prompted for a
-#   pass phrase.  Note that a kill -HUP will prompt again. A test
-#   certificate can be generated with `make certificate' under
-#   built time. Keep in mind that if you've both a RSA and a DSA
-#   certificate you can configure both in parallel (to also allow
-#   the use of DSA ciphers, etc.)
-SSLCertificateFile @@ServerRoot@@/conf/ssl.crt/server.crt
-#SSLCertificateFile @@ServerRoot@@/conf/ssl.crt/server-dsa.crt
-
-#   Server Private Key:
-#   If the key is not combined with the certificate, use this
-#   directive to point at the key file.  Keep in mind that if
-#   you've both a RSA and a DSA private key you can configure
-#   both in parallel (to also allow the use of DSA ciphers, etc.)
-SSLCertificateKeyFile @@ServerRoot@@/conf/ssl.key/server.key
-#SSLCertificateKeyFile @@ServerRoot@@/conf/ssl.key/server-dsa.key
-
-#   Server Certificate Chain:
-#   Point SSLCertificateChainFile at a file containing the
-#   concatenation of PEM encoded CA certificates which form the
-#   certificate chain for the server certificate. Alternatively
-#   the referenced file can be the same as SSLCertificateFile
-#   when the CA certificates are directly appended to the server
-#   certificate for convinience.
-#SSLCertificateChainFile @@ServerRoot@@/conf/ssl.crt/ca.crt
-
-#   Certificate Authority (CA):
-#   Set the CA certificate verification path where to find CA
-#   certificates for client authentication or alternatively one
-#   huge file containing all of them (file must be PEM encoded)
-#   Note: Inside SSLCACertificatePath you need hash symlinks
-#         to point to the certificate files. Use the provided
-#         Makefile to update the hash symlinks after changes.
-#SSLCACertificatePath @@ServerRoot@@/conf/ssl.crt
-#SSLCACertificateFile @@ServerRoot@@/conf/ssl.crt/ca-bundle.crt
-
-#   Certificate Revocation Lists (CRL):
-#   Set the CA revocation path where to find CA CRLs for client
-#   authentication or alternatively one huge file containing all
-#   of them (file must be PEM encoded)
-#   Note: Inside SSLCARevocationPath you need hash symlinks
-#         to point to the certificate files. Use the provided
-#         Makefile to update the hash symlinks after changes.
-#SSLCARevocationPath @@ServerRoot@@/conf/ssl.crl
-#SSLCARevocationFile @@ServerRoot@@/conf/ssl.crl/ca-bundle.crl
-
-#   Client Authentication (Type):
-#   Client certificate verification type and depth.  Types are
-#   none, optional, require and optional_no_ca.  Depth is a
-#   number which specifies how deeply to verify the certificate
-#   issuer chain before deciding the certificate is not valid.
-#SSLVerifyClient require
-#SSLVerifyDepth  10
-
-#   Access Control:
-#   With SSLRequire you can do per-directory access control based
-#   on arbitrary complex boolean expressions containing server
-#   variable checks and other lookup directives.  The syntax is a
-#   mixture between C and Perl.  See the mod_ssl documentation
-#   for more details.
-#<Location />
-#SSLRequire (    %{SSL_CIPHER} !~ m/^(EXP|NULL)/ \
-#            and %{SSL_CLIENT_S_DN_O} eq "Snake Oil, Ltd." \
-#            and %{SSL_CLIENT_S_DN_OU} in {"Staff", "CA", "Dev"} \
-#            and %{TIME_WDAY} >= 1 and %{TIME_WDAY} <= 5 \
-#            and %{TIME_HOUR} >= 8 and %{TIME_HOUR} <= 20       ) \
-#           or %{REMOTE_ADDR} =~ m/^192\.76\.162\.[0-9]+$/
-#</Location>
-
-#   SSL Engine Options:
-#   Set various options for the SSL engine.
-#   o FakeBasicAuth:
-#     Translate the client X.509 into a Basic Authorisation.  This means that
-#     the standard Auth/DBMAuth methods can be used for access control.  The
-#     user name is the `one line' version of the client's X.509 certificate.
-#     Note that no password is obtained from the user. Every entry in the user
-#     file needs this password: `xxj31ZMTZzkVA'.
-#   o ExportCertData:
-#     This exports two additional environment variables: SSL_CLIENT_CERT and
-#     SSL_SERVER_CERT. These contain the PEM-encoded certificates of the
-#     server (always existing) and the client (only existing when client
-#     authentication is used). This can be used to import the certificates
-#     into CGI scripts.
-#   o StdEnvVars:
-#     This exports the standard SSL/TLS related `SSL_*' environment variables.
-#     Per default this exportation is switched off for performance reasons,
-#     because the extraction step is an expensive operation and is usually
-#     useless for serving static content. So one usually enables the
-#     exportation for CGI and SSI requests only.
-#   o CompatEnvVars:
-#     This exports obsolete environment variables for backward compatibility
-#     to Apache-SSL 1.x, mod_ssl 2.0.x, Sioux 1.0 and Stronghold 2.x. Use this
-#     to provide compatibility to existing CGI scripts.
-#   o StrictRequire:
-#     This denies access when "SSLRequireSSL" or "SSLRequire" applied even
-#     under a "Satisfy any" situation, i.e. when it applies access is denied
-#     and no other module can change it.
-#   o OptRenegotiate:
-#     This enables optimized SSL connection renegotiation handling when SSL
-#     directives are used in per-directory context. 
-#SSLOptions +FakeBasicAuth +ExportCertData +CompatEnvVars +StrictRequire
-<Files ~ "\.(cgi|shtml|phtml|php3?)$">
-    SSLOptions +StdEnvVars
-</Files>
-<Directory "@@ServerRoot@@/cgi-bin">
-    SSLOptions +StdEnvVars
-</Directory>
-
-#   SSL Protocol Adjustments:
-#   The safe and default but still SSL/TLS standard compliant shutdown
-#   approach is that mod_ssl sends the close notify alert but doesn't wait for
-#   the close notify alert from client. When you need a different shutdown
-#   approach you can use one of the following variables:
-#   o ssl-unclean-shutdown:
-#     This forces an unclean shutdown when the connection is closed, i.e. no
-#     SSL close notify alert is send or allowed to received.  This violates
-#     the SSL/TLS standard but is needed for some brain-dead browsers. Use
-#     this when you receive I/O errors because of the standard approach where
-#     mod_ssl sends the close notify alert.
-#   o ssl-accurate-shutdown:
-#     This forces an accurate shutdown when the connection is closed, i.e. a
-#     SSL close notify alert is send and mod_ssl waits for the close notify
-#     alert of the client. This is 100% SSL/TLS standard compliant, but in
-#     practice often causes hanging connections with brain-dead browsers. Use
-#     this only for browsers where you know that their SSL implementation
-#     works correctly. 
-#   Notice: Most problems of broken clients are also related to the HTTP
-#   keep-alive facility, so you usually additionally want to disable
-#   keep-alive for those clients, too. Use variable "nokeepalive" for this.
-#   Similarly, one has to force some clients to use HTTP/1.0 to workaround
-#   their broken HTTP/1.1 implementation. Use variables "downgrade-1.0" and
-#   "force-response-1.0" for this.
-SetEnvIf User-Agent ".*MSIE.*" \
-         nokeepalive ssl-unclean-shutdown \
-         downgrade-1.0 force-response-1.0
-
-#   Per-Server Logging:
-#   The home of a custom SSL log file. Use this when you want a
-#   compact non-error SSL logfile on a virtual host basis.
-CustomLog logs/ssl_request_log \
-          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
-
-</VirtualHost>                                  
-
-</IfDefine>
-
diff --git a/docs/docroot/apache_pb.gif b/docs/docroot/apache_pb.gif
deleted file mode 100644
index 3a1c139..0000000
--- a/docs/docroot/apache_pb.gif
+++ /dev/null
Binary files differ
diff --git a/docs/docroot/apache_pb.png b/docs/docroot/apache_pb.png
deleted file mode 100644
index eb99a8c..0000000
--- a/docs/docroot/apache_pb.png
+++ /dev/null
Binary files differ
diff --git a/docs/docroot/apache_pb2.gif b/docs/docroot/apache_pb2.gif
deleted file mode 100644
index 4e67c71..0000000
--- a/docs/docroot/apache_pb2.gif
+++ /dev/null
Binary files differ
diff --git a/docs/docroot/apache_pb2.png b/docs/docroot/apache_pb2.png
deleted file mode 100644
index 28baa70..0000000
--- a/docs/docroot/apache_pb2.png
+++ /dev/null
Binary files differ
diff --git a/docs/docroot/apache_pb2_ani.gif b/docs/docroot/apache_pb2_ani.gif
deleted file mode 100644
index fc41c03..0000000
--- a/docs/docroot/apache_pb2_ani.gif
+++ /dev/null
Binary files differ
diff --git a/docs/docroot/index.html.ca b/docs/docroot/index.html.ca
deleted file mode 100644
index 1ef6837..0000000
--- a/docs/docroot/index.html.ca
+++ /dev/null
@@ -1,51 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<HTML>
- <HEAD>
-  <TITLE>P&agrave;gina de prova de l'instal&middot;laci&oacute; d'Apache</TITLE>
- </HEAD>
-<!-- Background white, links blue (unvisited), navy (visited), red (active) -->
- <BODY
-  BGCOLOR="#FFFFFF"
-  TEXT="#000000"
-  LINK="#0000FF"
-  VLINK="#000080"
-  ALINK="#FF0000"
- >
-  <H1 ALIGN="CENTER">
-   Funciona&nbsp;!  El servidor web Apache est&agrave; instal&middot;lat
-   en aquest lloc &nbsp;!
-  </H1>
-  <P>
-  Si veu aquesta p&agrave;gina, es que els propietaris d'aquest domini
-  acaben d'instal&middot;lar satisfact&ograve;riament el
-  servidor web Apache.
-  Ara han d'afegir contingut en aquest directori i substituir aquesta p&agrave;gina, 
-  o b&egrave; dirigir aquest servidor cap al contingut real.
-  </P>
-  <HR>
-  <BLOCKQUOTE>
-   Si est&agrave; veien aquesta p&agrave;gina i no es la que esperava, posis en
-   contacte  amb
-   <STRONG>l'administrador web d'aquest lloc.</STRONG>
-   (Provi d'enviar un correu electr&ograve;nic a <SAMP>&lt;Webmaster@<EM>domain</EM>&gt;</SAMP>.)
-   Encara que aquest lloc est&agrave; utilitzant el programari Apache, es gaireb&eacute; segur
-   que no t&egrave; res a veure amb el Grup Apache, per tant 
-   no envi&iuml; cap correu electr&ograve;nic als autors d'Apache referent a aquest lloc o al seu contingut.
-   Si es que ho fa, el seu missatge ser&agrave; <STRONG><BIG>ignorat</BIG></STRONG>.
-  </BLOCKQUOTE>
-  <HR>
-  <P>
-  La
-  <A HREF="manual/">documentaci&oacute;</A>
-  d'Apache ha estat inclosa en aquesta distribuci&oacute;.
-  </P>
-  <P>
-  L'administrador de web pot utilitzar lliurement la imatge d'aqu&iacute; sota
-  en el servidor web equipat amb el programari Apache.
-  Gr&agrave;cies per utilitzar Apache&nbsp;!
-  </P>
-  <DIV ALIGN="CENTER">
-   <IMG SRC="apache_pb.gif" ALT="">
-  </DIV>
- </BODY>
-</HTML>
diff --git a/docs/docroot/index.html.cz.iso8859-2 b/docs/docroot/index.html.cz.iso8859-2
deleted file mode 100644
index e0cd2ba..0000000
--- a/docs/docroot/index.html.cz.iso8859-2
+++ /dev/null
@@ -1,51 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<HTML>
- <HEAD>
-  <META HTTP-Equiv="Content-Type" CONTENT="text/html; charset=iso-8859-2">
-  <TITLE>Testovací stránka instalace web serveru Apache</TITLE>
- </HEAD>
-<!-- Background white, links blue (unvisited), navy (visited), red (active) -->
- <BODY
-  BGCOLOR="#FFFFFF"
-  TEXT="#000000"
-  LINK="#0000FF"
-  VLINK="#000080"
-  ALINK="#FF0000"
- >
-  <H1 ALIGN="CENTER">
-   Funguje to! Na tomto serveru bì¾í Apache!
-  </H1>
-  <P>
-  Pokud vidíte tuto zprávu, správce tohoto poèítaèe právì úspì¹nì
-  nainstaloval Apache web server.
-  Teï je¹tì musí doplnit obsah a nahradit tuto standardní uvítací
-  stránku, nebo pøesmìrovat server na skuteènou domovskou stránku.
-  </P>
-  <HR>
-  <BLOCKQUOTE>
-   Pokud vidíte tuto zprávu místo oèekávané domovské stránky, 
-   <STRONG>kontaktujte, prosím, správce pøíslu¹ného web
-   serveru.</STRONG> (Zkuste poslat e-mail na adresu
-   <SAMP>&lt;Webmaster@<EM>domain</EM>&gt;</SAMP>.) 
-   Pøesto¾e tento server pou¾ívá program Apache, témìø jistì nemá nic
-   spoleèného s Apache Group, proto prosím neposílejte e-maily o tomto
-   serveru nebo jeho obsahu autorùm Apache. Pokud to udìláte, budeme
-   va¹e zprávy <STRONG><BIG>ignorovat</BIG></STRONG>.
-  </BLOCKQUOTE>
-  <HR>
-  <P>
-  Zde najdete
-  <A
-   HREF="manual/"
-  >dokumentaci</A>
-  Apache (anglicky) obsa¾enou v této distribuci.
-  </P>
-  <P>
-  Následující logo mù¾e být pou¾ito bez omezení na web serveru s
-  programem Apache. Dìkujeme za pou¾ití Apache!
-  </P>
-  <DIV ALIGN="CENTER">
-   <IMG SRC="apache_pb.gif" ALT="">
-  </DIV>
- </BODY>
-</HTML>
diff --git a/docs/docroot/index.html.de b/docs/docroot/index.html.de
deleted file mode 100644
index cad034c..0000000
--- a/docs/docroot/index.html.de
+++ /dev/null
@@ -1,61 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<HTML>
- <HEAD>
-  <TITLE>Testseite fuer die Apache-Installation auf dieser Website</TITLE>
-  <!-- Translated Wed Aug 18 11:04:02 GMT 1999 - Martin.Kraemer@Mchp.Siemens.De -->
- </HEAD>
-<!-- Background white, links blue (unvisited), navy (visited), red (active) -->
- <BODY
-  BGCOLOR="#FFFFFF"
-  TEXT="#000000"
-  LINK="#0000FF"
-  VLINK="#000080"
-  ALINK="#FF0000"
- >
-  <H1 ALIGN="CENTER">
-   Es klappt! Der Apache-Webserver ist auf dieser Website installiert!
-  </H1>
-  <P>
-   Wenn Sie diese Seite sehen, dann bedeutet das, dass die
-   Eigent&uuml;mer dieser Dom&auml;ne soeben einen neuen
-   Apache-Webserver
-   erfolgreich installiert haben. Jetzt muss noch der
-   richtige Webinhalt zugef&uuml;gt und diese Platzhalterseite
-   ersetzt werden (oder der Webserver f&uuml;r den Zugriff auf den
-   richtigen Inhalt umkonfiguriert werden).
-  </P>
-  <HR>
-  <BLOCKQUOTE>
-   Wenn Sie diese Seite an Stelle einer anderen erwarteten Website
-   sehen sollten, dann <STRONG>nehmen Sie bitte Kontakt mit dem
-   Eigent&uuml;mer dieser Site auf</STRONG> (Versuchen Sie, eine E-Mail
-   an <SAMP>&lt;Webmaster@<EM>dom&auml;nenname</EM>&gt;</SAMP>
-   zu senden)!<BR>
-   <P>
-   Obwohl der Eigent&uuml;mer dieser Dom&auml;ne die Apache-Webserver-Software
-   verwendet, hat diese Website ziemlich sicher
-   keinerlei Verbindung mit der <EM>Apache Software Foundation</EM>
-   (die diese Software kostenlos vertreibt). Es besteht also
-   <BIG><STRONG>keinerlei Veranlassung</STRONG></BIG>, eine E-Mail an
-   die Entwickler der Software zu senden. Sollten Sie das dennoch
-   tun, wird Ihre E-Mail stillschweigend
-   <STRONG><BIG>ignoriert</BIG></STRONG>.
-  </BLOCKQUOTE>
-  <HR>
-  <P>
-   Die englische <A
-   HREF="manual/">Online-Dokumentation</A> f&uuml;r die
-   Apache-Webserver-Software ist Bestandteil dieser
-   Software-Distribution.
-  </P>
-  <P>
-   Dem <I>Webmaster</I> dieser Website steht es frei, das
-   untenstehende "Powered by Apache"-Logo auf einem Apache-basierten
-   Webserver zu verwenden.<BR>
-   Vielen Dank, dass Sie Apache gew&auml;hlt haben!
-  </P>
-  <DIV ALIGN="CENTER">
-   <IMG SRC="apache_pb.gif" ALT="Powered by Apache!">
-  </DIV>
- </BODY>
-</HTML>
diff --git a/docs/docroot/index.html.dk b/docs/docroot/index.html.dk
deleted file mode 100644
index cbe8aad..0000000
--- a/docs/docroot/index.html.dk
+++ /dev/null
@@ -1,47 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<HTML>
- <HEAD>
-  <TITLE>Pr&oslash;veside for Apache installationen</TITLE>
- </HEAD>
-<!-- Background white, links blue (unvisited), navy (visited), red (active) -->
- <BODY
-  BGCOLOR="#FFFFFF"
-  TEXT="#000000"
-  LINK="#0000FF"
-  VLINK="#000080"
-  ALINK="#FF0000"
- >
-  <H1 ALIGN="CENTER">
-   Det virkede!  Apache Webserveren er installeret p&aring; denne maskine!
-  </H1>
-  <P>
-  Hvis du kan se denne side, s&aring; har dem som ejer dette dom&aelig;ne lige
-  installeret Apache Webserveren.
-  Du m&aring; nu placere web sider i dette directory og fjerne denne side, eller
-  konfigurere serveren til at anvende et andet directory.
-  </P>
-  <HR>
-  <BLOCKQUOTE>
-   Hvis du ser denne side istedet for en anden forventet side, <STRONG>kontakt
-   venligst administratoren for den server du pr&oslash;ver at kontakte.</STRONG>
-   (Pr&oslash;v at sende mail til <SAMP>&lt;Webmaster@<EM>domain</EM>&gt;</SAMP>.)
-   Apachegruppen har ikke noget at g&oslash;re med denne site, s&aring; det vil ikke
-   hj&aelig;lpe at sende mail to Apache udviklerne ang&aring;ende denne site.  
-  </BLOCKQUOTE>
-  <HR>
-  <P>
-  Apache-
-  <A
-   HREF="manual/index.html"
-  >documentationen</A>
-  er inkluderet med denne distribution.
-  </P>
-  <P>
-  Webmasteren af denne site m&aring; gerne bruge den f&oslash;lgende grafik
-  p&aring; en Apache-drevet webserver.  Mange tak for at bruge Apache!
-  </P>
-  <DIV ALIGN="CENTER">
-   <IMG SRC="apache_pb.gif" ALT="">
-  </DIV>
- </BODY>
-</HTML>
diff --git a/docs/docroot/index.html.ee b/docs/docroot/index.html.ee
deleted file mode 100644
index 7d8bc9c..0000000
--- a/docs/docroot/index.html.ee
+++ /dev/null
@@ -1,53 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<HTML>
- <HEAD>
-  <TITLE>Apache veebiserveri installatsiooni testlehek&uuml;lg</TITLE>
-  <!-- Original translation: Ahti Heinla, ahti@ahti.bluemoon.ee, Thu Aug 19 12:57:48 GMT 1999 -->
- </HEAD>
-<!-- Background white, links blue (unvisited), navy (visited), red (active) -->
- <BODY
-  BGCOLOR="#FFFFFF"
-  TEXT="#000000"
-  LINK="#0000FF"
-  VLINK="#000080"
-  ALINK="#FF0000"
- >
-  <H1 ALIGN="CENTER">
-   Kujuta pilti, k&auml;ima l&auml;ks!  Apache veebiserver on installeeritud!
-  </H1>
-  <P>
-  Kui Sa n&auml;ed seda lehek&uuml;lge, siis selle domeeni omanikud on
-  edukalt hakkama saanud Apache veebiserveri
-  installeerimisega. J&auml;rgmiseks peaks nad selle lehek&uuml;lje asendama
-  misiganes materjaliga, mida nad oma veebisaidis n&auml;idata tahavad,
-  v&otilde;i siis juhatama veebiserverile k&auml;tte tegeliku materjali
-  asukoha.
-  </P>
-  <HR>
-  <BLOCKQUOTE>
-   Kui Sa ootasid siin lehek&uuml;ljel n&auml;ha hoopis midagi muud,
-   siis palun <STRONG>v&otilde;ta &uuml;hendust selle veebisaidi
-   administraatoriga.</STRONG> (V&otilde;id n&auml;iteks kirjutada aadressil
-   <SAMP>&lt;Webmaster@<EM>domain</EM>&gt;</SAMP>.) Kuigi see veebisait
-   kasutab Apache tarkvara, pole ta peaaegu kindlasti mitte Apache Group'iga
-   mingil muul moel seotud. Seega, palun &auml;ra kirjuta selle saidi
-   asjus Apache autoritele. Kui sa seda teed, siis sinu kirja
-   <STRONG><BIG>ignoreeritakse</BIG></STRONG>.
-  </BLOCKQUOTE>
-  <HR>
-  <P>
-  Ka Apache
-  <A
-   HREF="manual/index.html"
-  >dokumentatsioon</A>
-  on selles distributsioonis olemas.
-  </P>
-  <P>
-  Kohalik veebmeister v&otilde;ib vabalt kasutada allpool olevat
-  pilti oma Apache veebiserveril. Ait&auml;h Apachet kasutamast!
-  </P>
-  <DIV ALIGN="CENTER">
-   <IMG SRC="apache_pb.gif" ALT="">
-  </DIV>
- </BODY>
-</HTML>
diff --git a/docs/docroot/index.html.el b/docs/docroot/index.html.el
deleted file mode 100644
index 75c8737..0000000
--- a/docs/docroot/index.html.el
+++ /dev/null
@@ -1,37 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EL">
-<HTML>
- <HEAD>
-  <TITLE>ÄïêéìáóôéêÞ Óåëßäá ãéá ôçí ÅãêáôÜóôáóç ôïõ Apache</TITLE>
- </HEAD>
-<!-- Background white, links blue (unvisited), navy (visited), red (active) -->
- <BODY
-  BGCOLOR="#FFFFFF"
-  TEXT="#000000"
-  LINK="#0000FF"
-  VLINK="#000080"
-  ALINK="#FF0000"
- >
-
-
-<P>
-ÅÜí ìðïñåßôå íá äåßôå áõôÞ ôç óåëßäá, ôüôå ç åãêáôÜóôáóç ôïõ ëïãéóìéêïý ôïõ ÅîõðçñåôçôÞ WWW Apache óå áõôü ôï óýóôçìá Þôáí åðéôõ÷Þò. Ìðïñåßôå ôþñá íá ðñïóèÝóåôå ðåñéå÷üìåíï óå áõôü ôïí êáôÜëïãï êáé íá áíôéêáôáóôÞóåôå áõôÞ ôç óåëßäá.
-
-<P><HR WIDTH="50%" SIZE="8">
-
-<H2 ALIGN="CENTER">ÂëÝðåôå áõôÞ ôç óåëßäá áíôß ãéá ôï äéêôõáêü ôüðï ðïõ ðåñéìÝíáôå;</H2>
-
-<P>
-ÁõôÞ ç óåëßäá âñßóêåôáé åäþ ãéáôß ï äéá÷åéñéóôÞò áõôïý ôïõ äéêôõáêïý ôüðïõ ôñïðïðïßçóå ôéò ñõèìßóåéò óôïí åîõðçñåôçôÞ Apache. Ðáñáêáëþ <STRONG>åðéêïéíùíÞóôå ìå ôïí õðåýèõíï ãéá ôç äéá÷åßñéóç ôïõ ðáñüíôïò åîõðçñåôçôÞ.</STRONG> Ôï ºäñõìá Ëïãéóìéêïý Apache (The Apache Software Foundation) Ýãñáøå ôï ëïãéóìéêü ôïõ åîõðçñåôçôÞ WWW ôï ïðïßï ÷ñçóéìïðïéåß ï äéá÷åéñéóôÞò áõôïý ôïõ äéêôõáêïý ôüðïõ. Ôï ºäñõìá üìùò äåí Ý÷åé êáìéÜ áñìïäéüôçôá ó÷åôéêÞ ìå ôç äéá÷åßñéóç áõôïý ôïõ äéêôõáêïý ôüðïõ êáé äåí ìðïñåß íá âïçèÞóåé óôçí åðßëõóç èåìÜôùí ðïõ Ý÷ïõí ó÷Ýóç ìå ôéò ñõèìßóåéò ôïõ.
-
-<P><HR WIDTH="50%" SIZE="8">
-
-
-<P>
-Ç <A HREF="manual/">ôåêìçñßùóç</A> ôïõ Apache Ý÷åé óõìðåñéëçöèåß óå áõôÞ ôç äéáíïìÞ.
-
-<P>
-Åßóôå åëåýèåñïò/ç íá ÷ñçóéìïðïéÞóåôå ôçí ðáñáêÜôù åéêüíá óå Ýíáí åîõðçñåôçôÞ ôïõ WWW ðïõ âáóßæåôáé óå Apache.  Åõ÷áñéóôïýìå ðïõ ÷ñçóéìïðïéåßôå ôïí Apache!
-
-<DIV ALIGN="CENTER"><IMG SRC="apache_pb.gif" ALT=""></DIV>
-</BODY>
-</HTML>
diff --git a/docs/docroot/index.html.en b/docs/docroot/index.html.en
deleted file mode 100644
index dc4c518..0000000
--- a/docs/docroot/index.html.en
+++ /dev/null
@@ -1,38 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<title>Test Page for Apache Installation</title>
-</head>
-<!-- Background white, links blue (unvisited), navy (visited), red
-(active) -->
-<body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-vlink="#000080" alink="#FF0000">
-<p>If you can see this, it means that the installation of the <a
-href="http://www.apache.org/foundation/preFAQ.html">Apache web
-server</a> software on this system was successful. You may now add
-content to this directory and replace this page.</p>
-
-<hr width="50%" size="8" />
-<h2 align="center">Seeing this instead of the website you
-expected?</h2>
-
-<p>This page is here because the site administrator has changed the
-configuration of this web server. Please <strong>contact the person
-responsible for maintaining this server with questions.</strong>
-The Apache Software Foundation, which wrote the web server software
-this site administrator is using, has nothing to do with
-maintaining this site and cannot help resolve configuration
-issues.</p>
-
-<hr width="50%" size="8" />
-<p>The Apache <a href="manual/">documentation</a> has been included
-with this distribution.</p>
-
-<p>You are free to use the image below on an Apache-powered web
-server. Thanks for using Apache!</p>
-
-<div align="center"><img src="apache_pb.gif" alt="" /></div>
-</body>
-</html>
-
diff --git a/docs/docroot/index.html.es b/docs/docroot/index.html.es
deleted file mode 100644
index 6f501db..0000000
--- a/docs/docroot/index.html.es
+++ /dev/null
@@ -1,51 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//ES">
-<HTML>
- <HEAD>
-  <TITLE>Pag&iacute;na para probar la instalaci&oacute;n de Apache</TITLE>
- </HEAD>
-<!-- Background white, links blue (unvisited), navy (visited), red (active) -->
- <BODY
-  BGCOLOR="#FFFFFF"
-  TEXT="#000000"
-  LINK="#0000FF"
-  VLINK="#000080"
-  ALINK="#FF0000"
- >
-  <H1 ALIGN="CENTER">
-   &iexcl;Funcion&oacute;!  &iexcl;El Servidor de Red Apache ha sido instalado en ese sitio!
-  </H1>
-  <P>
-  Si usted puede ver esta pag&iacute;na, entonces los due&ntilde;os de esta
-  maqu&iacute;na han instalado el Servidor de
-  Red Apache con ex&iacute;to.  Ahora deben a&ntilde;adir contenido a este directorio
-  y reemplazar esta pag&iacute;na, &oacute; apuntar este servidor al contenido real.
-  </P>
-  <HR>
-  <BLOCKQUOTE>
-   Si usted esta leyendo esta pag&iacute;na y no es lo que esperaba, por favor
-   <STRONG>contacte el administrador de este sitio.</STRONG>
-   (Trate de enviar correo electr&oacute;nico a <SAMP>&lt;Webmaster@<EM>domain</EM>&gt;</SAMP>.)
-   Aunque este sitio esta utilizando el programa Apache es casi seguro
-   que no tiene ninguna conexi&oacute;n con el Apache Group, por eso favor de
-   no enviar correo sobre este sitio o su contenido a los autores de
-   Apache.  Si lo hace, su mensaje sera
-   <STRONG><BIG>ignorado</BIG></STRONG>.
-  </BLOCKQUOTE>
-  <HR>
-  <P>
-  La
-  <A
-   HREF="manual/index.html"
-  >documentaci&oacute;n</A>
-  de Apache ha sido incluida en esta distribuci&oacute;n.
-  </P>
-  <P>
-  El administrador del sitio esta invitado a usar la siguiente
-  imagen para indicar que su sitio es servido por Apache.
-  &iexcl;Gracias por usar Apache!
-  </P>
-  <DIV ALIGN="CENTER">
-   <IMG SRC="apache_pb.gif" ALT="">
-  </DIV>
- </BODY>
-</HTML>
diff --git a/docs/docroot/index.html.et b/docs/docroot/index.html.et
deleted file mode 100644
index 99f2ce6..0000000
--- a/docs/docroot/index.html.et
+++ /dev/null
@@ -1,53 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<HTML>
- <HEAD>
-  <TITLE>Apache veebiserveri installatsiooni testlehek&uuml;lg</TITLE>
-  <!-- Original translation: Ahti Heinla, ahti@ahti.bluemoon.ee, Thu Aug 19 12:57:48 GMT 1999 -->
- </HEAD>
-<!-- Background white, links blue (unvisited), navy (visited), red (active) -->
- <BODY
-  BGCOLOR="#FFFFFF"
-  TEXT="#000000"
-  LINK="#0000FF"
-  VLINK="#000080"
-  ALINK="#FF0000"
- >
-  <H1 ALIGN="CENTER">
-   Kujuta pilti, k&auml;ima l&auml;ks!  Apache veebiserver on installeeritud!
-  </H1>
-  <P>
-  Kui Sa n&auml;ed seda lehek&uuml;lge, siis selle domeeni omanikud on
-  edukalt hakkama saanud <A HREF="http://httpd.apache.org/">Apache veebiserveri</A>
-  installeerimisega. J&auml;rgmiseks peaks nad selle lehek&uuml;lje asendama
-  misiganes materjaliga, mida nad oma veebisaidis n&auml;idata tahavad,
-  v&otilde;i siis juhatama veebiserverile k&auml;tte tegeliku materjali
-  asukoha.
-  </P>
-  <HR>
-  <BLOCKQUOTE>
-   Kui Sa ootasid siin lehek&uuml;ljel n&auml;ha hoopis midagi muud,
-   siis palun <STRONG>v&otilde;ta &uuml;hendust selle veebisaidi
-   administraatoriga.</STRONG> (V&otilde;id n&auml;iteks kirjutada aadressil
-   <SAMP>&lt;Webmaster@<EM>domain</EM>&gt;</SAMP>.) Kuigi see veebisait
-   kasutab Apache tarkvara, pole ta peaaegu kindlasti mitte Apache Group'iga
-   mingil muul moel seotud. Seega, palun &auml;ra kirjuta selle saidi
-   asjus Apache autoritele. Kui sa seda teed, siis sinu kirja
-   <STRONG><BIG>ignoreeritakse</BIG></STRONG>.
-  </BLOCKQUOTE>
-  <HR>
-  <P>
-  Ka Apache
-  <A
-   HREF="manual/index.html"
-  >dokumentatsioon</A>
-  on selles distributsioonis olemas.
-  </P>
-  <P>
-  Kohalik veebmeister v&otilde;ib vabalt kasutada allpool olevat
-  pilti oma Apache veebiserveril. Ait&auml;h Apachet kasutamast!
-  </P>
-  <DIV ALIGN="CENTER">
-   <IMG SRC="apache_pb.gif" ALT="">
-  </DIV>
- </BODY>
-</HTML>
diff --git a/docs/docroot/index.html.fr b/docs/docroot/index.html.fr
deleted file mode 100644
index 98154f1..0000000
--- a/docs/docroot/index.html.fr
+++ /dev/null
@@ -1,47 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<HTML>
- <HEAD>
-  <meta http-equiv="Content-Type" content="text/html">
-  <TITLE>Page de test de l'installation d'Apache</TITLE>
- </HEAD>
-<!-- Background white, links blue (unvisited), navy (visited), red
-(active) -->
- <BODY
-  BGCOLOR="#FFFFFF"
-  TEXT="#000000"
-  LINK="#0000FF"
-  VLINK="#000080"
-  ALINK="#FF0000"
- >
-
-
-<p>Si vous lisez cette page, c'est que les propriétaires de ce
-domaine viennent d'installer le
-serveur web Apache
-avec succès. Ils doivent maintenant ajouter du contenu à ce
-répertoire et remplacer cette page, ou bien faire pointer le serveur
-vers l'endroit où se trouve le contenu réel du site.</p>
-
-<HR WIDTH="50%" SIZE="8">
-
-<H2 ALIGN="CENTER">Vous voyez cette page au lieu du site attendu&nbsp;?</H2>
-
-<p>Vous voyez cette page parce que l'administrateur du site a modifié
-la configuration de ce serveur Web. Veuillez contacter
-<STRONG>l'administrateur du site concerné</STRONG>. La Fondation
-Apache (Apache Software Foundation), qui produit le logiciel Apache
-utilisé par ce site, n'a rien à voir avec la maintenance de ce
-site et ne peut intervenir sur sa configuration.</p>
-
-<HR WIDTH="50%" SIZE="8">
-
-<p>La <A HREF="manual/">documentation</A> Apache est incluse dans cette
-distribution.</p>
-
-<p>Le webmaster de ce site peut librement utiliser l'image ci-dessous sur un
-site web utilisant le logiciel Apache. Merci d'avoir choisi Apache&nbsp;!</p>
-
-<DIV ALIGN="CENTER"><IMG SRC="apache_pb.gif" ALT=""></DIV>
-
-</BODY>
-</HTML>
diff --git a/docs/docroot/index.html.he.iso8859-8 b/docs/docroot/index.html.he.iso8859-8
deleted file mode 100644
index 7006856..0000000
--- a/docs/docroot/index.html.he.iso8859-8
+++ /dev/null
@@ -1,54 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<HTML>                      
- <HEAD>                                                             
-   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-8">
-   <TITLE>Apache-ä úøù úð÷úäì ïåéñð óã</TITLE>                              
- </HEAD>                                                                 
-<!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-<BODY
-  BGCOLOR="#FFFFFF"                                                             
-  TEXT="#000000"                                                                
-  LINK="#0000FF"                                                                
-  VLINK="#000080"                                                               
-  ALINK="#FF0000"                                                               
- >                                                                              
-
-<div align=center>
-                                                        <P>
-                        
-                                                   <BR> äæä ãåîòä úà äàåø äúà íà
-<BR>Apache èðøèðéàä úøù ìù äð÷úääù øîåà äæ
-                                                              <BR>!!!äçìöäá äøáò
-                                        <BR> êìù íéöá÷ä úà óéñåäì ìåëé äúà åéùëò
-                                             <BR>.äæä óãä úà óéìçäìå úàæä äöéçîì
-       
-                                                                         
-<P><HR WIDTH="50%" SIZE="8">                                                    
-                                                                                
-                      <H2 ALIGN="CENTER">?úéôéöù øúàä íå÷îá úàæ äàåø</H2>        
-                                                                             <P>
-                                   <BR> äæä øúàä ìò éàøçàä éë ,ïàë àöîð äæä ãåîòä
-                                   <BR>.äæä èðøèðéàä úøù ìù äéöøåâéôðå÷ä úà äðéù
-                       <BR>.<STRONG>úåìàù íò úøùä éàøçà íò øù÷ øåöéì</STRONG> àð
-                                      <BR>úà äøöé øùà Apache Software Foundation
-                                   <BR>úøùä ú÷åæçú ìò úéàøçà äðéà ,äæä úøùä úðëåú
-                                 <BR>äéöøåâéôðå÷ úåéòá ïåøúôá òééñì äìåëé äðéàå
-                                                                          .ïäùìë
-
-<P><HR WIDTH="50%" SIZE="8">                                                    
-
-                                                                             <P>
-              <BR> êåúá íéòöîð <A HREF="manual/index.html">äéöèðîå÷åãä éëîñî</A>
-                                                               .úøùä úðëåú úìéáç
-                                                                                
-                                                                                
-                                                                             <P>
-                                     <BR>ãåîòä úéúçúá àöîðä ìîñá ùîúùäì éàùø äúà
-                                              <BR>.Apache é''ò ìòôåîù úøùä ìò ÷ø
-                                                                                
-                                                      !!!Apache-á ùåîéùä ìò äãåú
-                                                                                
-           </div>                                                                     
-<DIV ALIGN="CENTER"><IMG SRC="apache_pb.gif" ALT=""></DIV>                      
-</BODY>                                                                         
-</HTML>                                                                         
diff --git a/docs/docroot/index.html.hr.iso8859-2 b/docs/docroot/index.html.hr.iso8859-2
deleted file mode 100644
index fdbc6a7..0000000
--- a/docs/docroot/index.html.hr.iso8859-2
+++ /dev/null
@@ -1,35 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">
-<title>Testna Stranica Apache Instalacije</title>
-</head>
-<!-- Background white, links blue (unvisited), navy (visited), red
-(active) -->
-<body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-vlink="#000080" alink="#FF0000">
-<h2 align="center">Èestitamo! Apache web poslu¾itelj funkcionira!</h2>
-<p>Ukoliko vidite ovu stranicu, to znaèi da je instalacija <a
-href="http://www.apache.org/foundation/preFAQ.html">Apache web poslu¾itelja</a> uspje¹no izvr¹ena na ovom raèunalu.
-Sada mo¾ete dodati sadr¾aj u ovaj direktorij te promijeniti ovu stranicu.</p>
-
-<hr width="50%" size="8" />
-<h2 align="center">Oèekivali ste neku drugu stranicu?</h2>
-
-<p>Ovu stranica vidite stoga ¹to je administrator ovog poslu¾itelja promijenio
-konfiguraciju. Apache Softver Fondacija napisala je softver koji koristi
-administrator ovog web poslulitelja i nije odgovorna za njegovo odr¾avanje! Zbog toga vas molimo da se za
-sva pitanja obratite <strong>administratoru ili osobi odgovornoj za odrzavanje ovog poslu¾itelja.</strong></p>
-
-<hr width="50%" size="8" />
-<p>Ovdje se nalazi <a href="manual/">Dokumentacija</a> o Apache web poslu¾itelju
-(engleski).</p>
-
-<p>Donju slièicu mo¾ete slobodno koristiti na stranicama ovog veb poslu¾itelja.
-Hvala vam ¹to koristite Apache!</p>
-
-<div align="center"><img src="apache_pb.gif" alt="Apache Web Poslu¾itelj" /></div>
-</body>
-</html>
-
diff --git a/docs/docroot/index.html.it b/docs/docroot/index.html.it
deleted file mode 100644
index e9ef9ed..0000000
--- a/docs/docroot/index.html.it
+++ /dev/null
@@ -1,39 +0,0 @@
-<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
-<html>
-<head>
-   <meta http-equiv="Content-Type" content="text/html">
-   <title>Pagina di prova dell'installazione di un sito Web con Apache</title>
-<!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-</head>
-<body text="#000000" bgcolor="#FFFFFF" link="#0000FF" vlink="#000080" alink="#FF0000">
-
-<center>
-<h1>
-Funziona! Il Server Web Apache &egrave; stato installato su questo sito Web!</h1></center>
-Se riuscite a vedere questa pagina, allora vuol dire che coloro che gestiscono
-questo dominio hanno appena installato il software
-Web&nbsp;Server
-Apache correttamente. Ora &egrave; necessario aggiungere il vostro materiale
-in questa directory e sostituire questa pagina di prova, oppure configurare
-il server per far riferimento al vostro materiale se collocato altrove.
-<p>
-<hr>
-<blockquote>Se state vedendo questa pagina invece del sito che pensavate,
-vi preghiamo di <b>contattare l'amministratore del sito in questione.</b>
-(Provate ad inviare un email a <tt>&lt;Webmaster@<i>domain</i>&gt;</tt>.)&nbsp;
-Nonostante questo sito stia utilizzando il software Apache, questo non
-vi garantisce nessun tipo di contatto diretto al Gruppo Apache, quindi
-vi preghiamo di non inviare email riguardanti questo sito o il materiale
-in esso contenuto agli autori di Apache. Ogni messaggio del genere verr&agrave;
-<b><font size="+1">ignorato</font></b>.</blockquote>
-
-<hr>
-<br>La <a href="manual/">documentazione</a> relativa di Apache
-&egrave; inclusa nella distribuzione.
-<p>Il Webmaster di questo sito &egrave; libero di utilizzare l'immagine qui sotto
-su qualsiasi Web server potenziato con Apache. Grazie per aver scelto Apache!
-<center>
-<p><img SRC="apache_pb.gif" ALT="" ></center>
-
-</body>
-</html>
diff --git a/docs/docroot/index.html.ja.iso2022-jp b/docs/docroot/index.html.ja.iso2022-jp
deleted file mode 100644
index ba3e736..0000000
--- a/docs/docroot/index.html.ja.iso2022-jp
+++ /dev/null
@@ -1,42 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN"
- "http://www.w3.org/TR/REC-html40/loose.dtd">
-<html>
- <head>
-  <meta http-equiv="Content-Type" content="text/html; charset=ISO-2022-JP">
-  <title>Apache $B%$%s%9%H!<%k;~$N%F%9%H%Z!<%8(B</title>
- </head>
-<!-- Background white, links blue (unvisited), navy (visited), red (active) -->
- <body
-  bgcolor="#ffffff"
-  text="#000000"
-  link="#0000ff"
-  vlink="#000080"
-  alink="#ff0000"
- >
-
-
-<p>
-$B$b$7$3$N%Z!<%8$,FI$a$?$N$G$"$l$P!"(B<a href="http://www.apache.org/foundation/preFAQ.html">Apache $B%&%'%V%5!<%P(B</a>$B$N%$%s%9%H!<%k$,$3$N7W;;5!$GL5;v$K=*N;$7$?$3$H$r0UL#$7$^$9!#$"$J$?$O!"$3$N%G%#%l%/%H%j$KJ8=q$r2C$($?$j!"$3$N%Z!<%8$rCV$-$+$($k$3$H$,$G$-$^$9!#(B
-</p>
-<hr width="50%" size="8">
-
-<h2 align="center">$B$"$J$?$NM=A[$KH?$7$F!"$3$N%Z!<%8$,8+$($F$$$k$G$7$g$&$+(B?</h2>
-
-<p>
-$B$3$N%Z!<%8$O!"%5%$%H4IM}<T$,$3$N(B web $B%5!<%P$N@_Dj$rJQ99$7$?$?$a$K8+$($F$$$^$9!#(B
-<strong>$B$3$N%5!<%P$r4IM}$9$k@UG$$r;}$C$F$$$kJ}$KO"Mm$r$H$C$F(B</strong>$B$/$@$5$$!#$3$N%5%$%H4IM}<T$,MxMQ$7$F$$$k(B web $B%5!<%P$r3+H/$7$?(B The Apache Software Foundation $B$O!"$3$N%5%$%H$N(B web $B%5!<%P$N4IM}$H$O4X78$,$J$/!"%5!<%P$N@_Dj$K4X$9$kLdBj$r2r7h$9$k$3$H$O$G$-$^$;$s!#(B
-</p>
-<hr width="50%" size="8">
-
-
-<p>
-Apache $B$K4X$9$k(B<A HREF="manual/">$BJ8=q(B</A> $B$O!"$3$N(B web $B%5!<%PG[I[J*$NCf$K4^$^$l$F$$$^$9!#(B
-</p>
-<p>
-$B0J2<$N2hA|$O!"(BApache $B$rMxMQ$7$F$$$k(B web $B%5!<%P$G<+M3$K;H$&$3$H$,$G$-$^$9!#(BApache $B$r$4MxMQ$$$?$@$-!"$"$j$,$H$&$4$6$$$^$9(B!
-</p>
-  <div align="center">
-   <img src="apache_pb.gif" alt="">
-  </div>
- </body>
-</html>
diff --git a/docs/docroot/index.html.kr.iso2022-kr b/docs/docroot/index.html.kr.iso2022-kr
deleted file mode 100644
index b72159e..0000000
--- a/docs/docroot/index.html.kr.iso2022-kr
+++ /dev/null
@@ -1,40 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//KR">
-<HTML>
- <HEAD>
- <META http-equiv="Content-Type" content="text/html; charset=ISO-2022-KR">
-  <TITLE>¾ÆÆÄÄ¡ ¼³Ä¡¸¦ À§ÇÑ Å×½ºÆ®ÆäÀÌÁö</TITLE>
- </HEAD>
-<!-- Background white, links blue (unvisited), navy (visited), red (active) -->
- <BODY
-  BGCOLOR="#FFFFFF"
-  TEXT="#000000"
-  LINK="#0000FF"
-  VLINK="#000080"
-  ALINK="#FF0000"
- >
-
-
-<P>
-ÇöÀçÈ­¸éÀÌ Àß º¸À̽Ŵٸé ÀÌ ½Ã½ºÅÛ¿¡ <A HREF="http://www.apache.org/foundation/preFAQ.html">Apache À¥¼­¹ö</A>  ¼ÒÇÁÆ®¿þ¾îÀÇ ¼³Ä¡°¡ ¼º°øÀûÀ¸·Î ³¡³µ´Ù´Â°É ÀǹÌÇÕ´Ï´Ù. ¿©·¯ºÐÀº ¾Æ¸¶ °ð ÀÌ ÆäÀÌÁö¸¦ Áö¿ì°í µð·ºÅ丮¿¡ »õ·Î¿î ³»¿ëÀ» Ãß°¡ÇÒ °ÍÀÔ´Ï´Ù.
-
-<P><HR WIDTH="50%" SIZE="8">
-
-<H2 ALIGN="CENTER">¿©·¯ºÐÀÌ ¿¹»óÇÑ À¥½ÎÀÌÆ® ´ë½Å ÀÌ È­¸éÀÌ º¸ÀԴϱî?</H2>
-
-<P>
-½ÎÀÌÆ® °ü¸®ÀÚ°¡  À¥ ¼­¹öÀÇ ¼³Á¤ÆÄÀÏÀ» º¯°æÇ߱⠶§¹®¿¡ ÀÌ ÆäÀÌÁö°¡ º¸ÀÌ´Â °Í ÀÔ´Ï´Ù.  
-<STRONG>Áú¹®»çÇ×Àº °¢ ¼­¹ö°ü¸® Ã¥ÀÓÀÚ¿¡°Ô ¹®ÀÇÇϽñ⠹ٶø´Ï´Ù.</STRONG> Apache Software FoundationÀº Çö ½ÎÀÌÆ®ÀÇ °ü¸®ÀÚ°¡ »ç¿ëÁßÀÎ À¥¼­¹ö¸¦ ¸¸µç ´Üü
-ÀÏ »Ó ½ÎÀÌÆ®ÀÇ °ü¸®¹æ¹ýÀ̳ª ¼³Á¤¹®Á¦¿¡ °üÇÑ µµ¿òÀ» µå¸± ¼ö ¾ø½À´Ï´Ù.
-
-<P><HR WIDTH="50%" SIZE="8">
-
-
-<P>
-¾ÆÆÄÄ¡ <A HREF="manual/">¹®¼­</A>´Â ÀÌ ¹èÆ÷ÆÇ¿¡ Æ÷ÇԵǾî ÀÖ½À´Ï´Ù. 
-
-<P>
-¾Æ·¡¿¡ ÀÖ´Â Apache À̹ÌÁö¸¦ »ç¿ëÇÏ´Â°Ç ¿©·¯ºÐÀÇ ÀÚÀ¯ÀÔ´Ï´Ù. ¾ÆÆÄÄ¡¸¦ »ç¿ëÇØ Áּż­ °¨»çÇÕ´Ï´Ù!
- 
-<DIV ALIGN="CENTER"><IMG SRC="apache_pb.gif" ALT=""></DIV>
-</BODY>
-</HTML>
diff --git a/docs/docroot/index.html.ltz.utf8 b/docs/docroot/index.html.ltz.utf8
deleted file mode 100644
index 3217d64..0000000
--- a/docs/docroot/index.html.ltz.utf8
+++ /dev/null
@@ -1,37 +0,0 @@
-<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
-<html>
-<head>
-   <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-   <!-- Originally translated by Jean-Luc Widlowski, jean-luc.widlowski@jrc.it Thu Aug 19 13:00:18 GMT 1999 -->
-   <title>Test Page for Apache Installation on Web Site</title>
-<!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-</head>
-<body text="#000000" bgcolor="#FFFFFF" link="#0000FF" vlink="#000080" alink="#FF0000">
-
-<center>
-<h1>
-Et huet geklappt! Den Apache Web Server as op d&euml;ser 'Web Site' installeiert!</h1></center>
-Wann Dir die heiten Sait gesit, dann hun d'Proprietairen vun d&euml;ser 'domain'
-elo just d'<a href="http://httpd.apache.org/">Apache Web server</a> software
-mat succ&eacute;s installeiert. Sie mussen allerdengs nach des Decksait
-remplaceieren oder awer de Server op eng aner Sait mat dem richtigen contenu
-em-dirigeieren.
-<br>
-<hr>
-<blockquote>Wann Dir die heiten Sait anstell vun der site die Dir erw&acirc;rt
-hut gesitt, da contacteiert wannechglift den <b>administrator vun dem betraffener
-site.</b> (Versicht &eacute;n email no <tt>&lt;Webmaster@<i>domain</i>&gt; </tt><font face="Times New Roman,Times">ze
-schecken.) Obwuel den heiten site </font>Apache software benotzt, as et
-ball secher datt keng Verbindung mat der Apache Group existeiert, also scheckt
-wannechglift keng email iwert desen site oder sein contenu zu den Apache
-Autoren. Falls Dir d&euml;st awer macht, get &auml;ren message&nbsp; <b><font size="+2">ignoreiert.</font></b></blockquote>
-
-<hr>
-<p>D'Apache <a href="manual/">documentation</a> ass d&euml;ser Ausgab
-beigef&uuml;cht.
-<p>Dem Webmaster vun dem heitenen site steht et zou dest Bild ob engem
-Apache-powered Web server ze presenteieren. Merci dat Dir Apache benotzt!
-<center><img SRC="apache_pb.gif" ALT="" ></center>
-
-</body>
-</html>
diff --git a/docs/docroot/index.html.lu.utf8 b/docs/docroot/index.html.lu.utf8
deleted file mode 100644
index f98c855..0000000
--- a/docs/docroot/index.html.lu.utf8
+++ /dev/null
@@ -1,37 +0,0 @@
-<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
-<html>
-<head>
-   <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-   <!-- Originally translated by Jean-Luc Widlowski, jean-luc.widlowski@jrc.it Thu Aug 19 13:00:18 GMT 1999 -->
-   <title>Test Page for Apache Installation on Web Site</title>
-<!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-</head>
-<body text="#000000" bgcolor="#FFFFFF" link="#0000FF" vlink="#000080" alink="#FF0000">
-
-<center>
-<h1>
-Et huet geklappt! Den Apache Web Server as op d&euml;ser 'Web Site' installeiert!</h1></center>
-Wann Dir die heiten Sait gesit, dann hun d'Proprietairen vun d&euml;ser 'domain'
-elo just d'Apache Web server software
-mat succ&eacute;s installeiert. Sie mussen allerdengs nach des Decksait
-remplaceieren oder awer de Server op eng aner Sait mat dem richtigen contenu
-em-dirigeieren.
-<br>
-<hr>
-<blockquote>Wann Dir die heiten Sait anstell vun der site die Dir erw&acirc;rt
-hut gesitt, da contacteiert wannechglift den <b>administrator vun dem betraffener
-site.</b> (Versicht &eacute;n email no <tt>&lt;Webmaster@<i>domain</i>&gt; </tt><font face="Times New Roman,Times">ze
-schecken.) Obwuel den heiten site </font>Apache software benotzt, as et
-ball secher datt keng Verbindung mat der Apache Group existeiert, also scheckt
-wannechglift keng email iwert desen site oder sein contenu zu den Apache
-Autoren. Falls Dir d&euml;st awer macht, get &auml;ren message&nbsp; <b><font size="+2">ignoreiert.</font></b></blockquote>
-
-<hr>
-<p>D'Apache <a href="manual/">documentation</a> ass d&euml;ser Ausgab
-beigef&uuml;cht.
-<p>Dem Webmaster vun dem heitenen site steht et zou dest Bild ob engem
-Apache-powered Web server ze presenteieren. Merci dat Dir Apache benotzt!
-<center><img SRC="apache_pb.gif" ALT="" ></center>
-
-</body>
-</html>
diff --git a/docs/docroot/index.html.nl b/docs/docroot/index.html.nl
deleted file mode 100644
index fdd7ff9..0000000
--- a/docs/docroot/index.html.nl
+++ /dev/null
@@ -1,54 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<HTML>
- <HEAD>
-  <TITLE>Test Pagina voor de Apache Installatie op deze Web Site</TITLE>
-  <!-- Translated Tue Aug 17 20:57:17 GMT 1999 - dirkx@webweaving.org -->
- </HEAD>
-<!-- Background white, links blue (unvisited), navy (visited), red (active) -->
- <BODY
-  BGCOLOR="#FFFFFF"
-  TEXT="#000000"
-  LINK="#0000FF"
-  VLINK="#000080"
-  ALINK="#FF0000"
- >
-  <H1 ALIGN="CENTER">
-   Alles Werkt! De Apache Web Server is geinstalleerd op deze Web Site
-  </H1>
-  <P>
-  Mocht u deze pagina zien, dan betekent dat, dat de eigenaren van dit
-  domein zojuist een nieuwe Apache Web
-  Server hebben geinstalleerd. Nu moet men nog de echte inhoud gaan
-  toevoegen, en moet men deze pagina gaan vervangen door de echte web
-  site. 
-  </P>
-  <HR>
-  <BLOCKQUOTE>
-   Mocht u deze pagina zien, in plaats van de pagina of web site die u 
-   verwachtte, neem dan <STRONG>contact op met de beheerder van
-   deze site</STRONG>. Bijvoorbeeld door een berichtje te sturen naar
-   <SAMP>&lt;Webmaster@<EM>dit-domain</EM>&gt;</SAMP>.
-   <P>
-   Alhoewel deze web site gebruik maakt van de Apache Software is er 
-   verder geen enkele relatie tussen de beheerders van deze web site en
-   de Apache Groep (die de web software geschreven heeft). Het heeft dus
-   <BIG><STRONG>absoluut</STRONG></BIG>
-   geen zin de web software auteurs een emailtje te sturen. Mocht u dat
-   toch doen, dan wordt uw bericht gewoon <STRONG><BIG>genegeerd</BIG></STRONG>.
-  </BLOCKQUOTE>
-  <HR>
-  <P>
-  De 
-  <A HREF="manual/index.html" >handleiding</A> voor de apache web
-  server software maakt deel uit van deze distributie.
-  </P>
-  <P>
-  Als beheerder of <I>webmaster</I> is het u toegestaan het onderstaande 
-  plaatje vrijelijk te gebruiken op uw 'Apache Powered' web site. Bedankt
-  voor het kiezen voor, en gebruiken van, Apache!
-  </P>
-  <DIV ALIGN="CENTER">
-   <IMG SRC="apache_pb.gif" ALT="Klein 'Powered by Apache' Logotje">
-  </DIV>
- </BODY>
-</HTML>
diff --git a/docs/docroot/index.html.nn b/docs/docroot/index.html.nn
deleted file mode 100644
index 67db957..0000000
--- a/docs/docroot/index.html.nn
+++ /dev/null
@@ -1,48 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<HTML>
- <HEAD>
-  <TITLE>Testside Apache-installasjon</TITLE>
- </HEAD>
-<!-- Background white, links blue (unvisited), navy (visited), red (active) -->
- <BODY
-  BGCOLOR="#FFFFFF"
-  TEXT="#000000"
-  LINK="#0000FF"
-  VLINK="#000080"
-  ALINK="#FF0000"
- >
-  <H1 ALIGN="CENTER">
-   Det gjekk bra! Apache er no installert på denne maskina!
-  </H1>
-  <P>
-  Dersom du kan sjå denne sida, har den eller dei som driv denne nettstaden
-  installert <A href="http://www.apache.org/foundation/preFAQ.html">Apache vevtenar</a>.
-  No må denne testsida erstattast med verkeleg innhald.
-  </P>
-  <HR>
-  <BLOCKQUOTE>
-  Dersom du hadde venta å sjå ei anna side enn denne, bør du
-  <strong>ta kontakt med den som er ansvarleg for denne nettstaden</strong>
-   (Prøv å sende e-post til <SAMP>&lt;webmaster@<EM>domene</EM>&gt;</SAMP>.)
-   Sjølv om denne nettstaden vert kjørt på Apache, har den ingen annan
-   tilknytning til Apache-gruppa, som har utvikla programvaren.
-   Ver snill og ikkje send e-post om denne nettstaden eller
-   innhaldet du finn her til utviklarane i Apache-gruppa. 
-   I så tilfelle vil førespurnaden <strong><BIG>ignorerast</BIG></strong>.
-  </BLOCKQUOTE>   
-  <HR>
-  <P>
-  <A
-   HREF="manual/index.html"
-  >Dokumentasjon</A>
-  for Apache er inkludert i denne pakka.
-  </P>
-  <P>
-  Logoen under kan brukast på kva som helst av maskiner som køyrer Apache.
-  Takk for at du nyttar Apache!
-  </P>
-  <DIV ALIGN="CENTER">
-   <IMG SRC="apache_pb.gif" ALT="">
-  </DIV>
- </BODY>
-</HTML>
diff --git a/docs/docroot/index.html.no b/docs/docroot/index.html.no
deleted file mode 100644
index d7553bc..0000000
--- a/docs/docroot/index.html.no
+++ /dev/null
@@ -1,48 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<HTML>
- <HEAD>
-  <TITLE>Testside Apache-installasjon</TITLE>
- </HEAD>
-<!-- Background white, links blue (unvisited), navy (visited), red (active) -->
- <BODY
-  BGCOLOR="#FFFFFF"
-  TEXT="#000000"
-  LINK="#0000FF"
-  VLINK="#000080"
-  ALINK="#FF0000"
- >
-  <H1 ALIGN="CENTER">
-   Det gikk bra! Apache er nå installert på denne maskinen!
-  </H1>
-  <P>
-  Hvis du kan se denne siden har den eller de som driver dette nettstedet
-  installert Apache Web server.
-  Nå må denne testsiden erstattes med virkelig innhold.
-  </P>
-  <HR>
-  <BLOCKQUOTE>
-  Hvis du hadde ventet å se en annen side enn denne bør du  
-  <STRONG>ta kontakt med den som har ansvaret for nettstedet.</STRONG>
-   (Prøv å sende e-post til <SAMP>&lt;webmaster@<EM>domene</EM>&gt;</SAMP>.)
-   Selv om dette nettstedet kjøres på Apache, har det ingen annen 
-   tilknytning til Apache-gruppen som har utviklet programvaren.
-   Vennligst ikke send post angående dette nettstedet eller dets
-   innhold til Apache-gruppens programmerere. I så fall vil din henvendelse
-   bli <STRONG><BIG>ignorert</BIG></STRONG>.  
-  </BLOCKQUOTE>   
-  <HR>
-  <P>
-  <A
-   HREF="manual/index.html"
-  >Dokumentasjon</A>
-  for Apache er inkludert i denne pakken.
-  </P>
-  <P>
-  Logoen under kan benyttes på en hvilken som helst maskin som kjører Apache.
-  Takk for at du benytter Apache!
-  </P>
-  <DIV ALIGN="CENTER">
-   <IMG SRC="apache_pb.gif" ALT="">
-  </DIV>
- </BODY>
-</HTML>
diff --git a/docs/docroot/index.html.po.iso8859-2 b/docs/docroot/index.html.po.iso8859-2
deleted file mode 100644
index 8b030bd..0000000
--- a/docs/docroot/index.html.po.iso8859-2
+++ /dev/null
@@ -1,40 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<HTML>
- <HEAD>
-  <TITLE>Strona testowa instalacji serwera Apache</TITLE>
-  <META http-equiv="Content-Type" content="text/html; charset=iso-8859-2">
-  <!-- translated by Bart Grzybicki, bgrzybicki@morliny.pl - http://www.bgrzybicki.morliny.pl on 19th of December 2000 -->
- </HEAD>
-<!-- Background white, links blue (unvisited), navy (visited), red (active) -->
- <BODY
-  BGCOLOR="#FFFFFF"
-  TEXT="#000000"
-  LINK="#0000FF"
-  VLINK="#000080"
-  ALINK="#FF0000"
- >
-
-
-<P>
-Je¿eli strona ta jest widoczna, oznacza to poprawn± instalacjê serwera Apache.  Mo¿na ju¿ zamieniæ zawarto¶æ tej witryny.
-
-<P><HR WIDTH="50%" SIZE="8">
-
-<H2 ALIGN="CENTER">Czy zamiast spodziewanej witryny WWW widoczna jest ta?</H2>
-
-<P>
-Strona ta jest widoczna, poniewa¿ administrator serwera WWW zmieni³ jego konfiguracjê.  
-Proszê <STRONG>skontaktowaæ siê z osob± odpowiedzialn± za zarz±dzanie tym serwerem.</STRONG> Apache Software Foundation, producent oprogramowania serwerowego Apache, nie administruje t± witryn± i nie jest w stanie pomóc w sprawach zwi±zanych z jej konfiguracj±.
-
-<P><HR WIDTH="50%" SIZE="8">
-
-
-<P>
-Do niniejszej dystrybucji serwera Apache do³±czono anglojêzyczn± <A HREF="manual/index.html">dokumentacjê</A>.
-
-<P>
-Poni¿sze logo, "Powered by Apache", mo¿na stosowaæ bez ograniczeñ. Dziêkujemy za wybranie Apache'a!
-
-<DIV ALIGN="CENTER"><IMG SRC="apache_pb.gif" ALT=""></DIV>
-</BODY>
-</HTML>
diff --git a/docs/docroot/index.html.pt b/docs/docroot/index.html.pt
deleted file mode 100644
index dbeb5ed..0000000
--- a/docs/docroot/index.html.pt
+++ /dev/null
@@ -1,42 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<HTML>
- <HEAD>
-  <TITLE>Página de teste da instalação do Apache Web Server</TITLE>
-<!-- original translation for portuguese by Hugo Ramos, ramos@pop3r.com, Sat Jan 29 05:30:00 GMT 2000 -->
- </HEAD>
-<!-- Background white, links blue (unvisited), navy (visited), red (active) -->
- <BODY
-  BGCOLOR="#FFFFFF"
-  TEXT="#000000"
-  LINK="#0000FF"
-  VLINK="#000080"
-  ALINK="#FF0000"
- >
-
-
-<P> Se est&aacute; a ver esta p&aacute;gina significa que a instala&ccedil;&atilde;o 
-  do Apache Web Server foi efectuada 
-  com sucesso. Pode agora adicionar conte&uacute;do a esta directoria e substituir 
-  esta p&aacute;gina. 
-<P><HR WIDTH="50%" SIZE="8">
-
-<H2 ALIGN="CENTER">Est&aacute; a ver esta p&aacute;gina em vez do website que 
-  esperava?</H2>
-
-<P> Esta p&aacute;gina est&aacute; neste momento activa porque o administrador 
-  deste site alterou a configura&ccedil;&atilde;o do web server. Por favor <STRONG>contacte 
-  a pessoa respons&aacute;vel pela manuten&ccedil;&atilde;o deste servidor.</STRONG> 
-  A Funda&ccedil;&atilde;o Apache Software (Apache Software Foundation), apesar 
-  de ter produzido o web server que o administrador deste site est&aacute; a usar, 
-  n&atilde;o tem qualquer tipo de responsabilidade pela manuten&ccedil;&atilde;o 
-  deste nem pode ajudar a resolver problemas de configura&ccedil;&atilde;o. 
-<P><HR WIDTH="50%" SIZE="8">
-
-
-<P> A <A HREF="manual/">documenta&ccedil;&atilde;o</A> foi inclu&iacute;da 
-  juntamente com esta distribui&ccedil;&atilde;o. 
-<P> A imagem abaixo pode ser usada livremente em qualquer site presente num servidor 
-  com o Apache Web Server instalado. Obrigado por usar o Apache Web Server! 
-<DIV ALIGN="CENTER"><IMG SRC="apache_pb.gif" ALT=""></DIV>
-</BODY>
-</HTML>
diff --git a/docs/docroot/index.html.pt-br b/docs/docroot/index.html.pt-br
deleted file mode 100644
index 59c9dc4..0000000
--- a/docs/docroot/index.html.pt-br
+++ /dev/null
@@ -1,46 +0,0 @@
-<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
-<html>
-<head>
-   <meta http-equiv="Content-Type" content="text/html">
-   <meta name="GENERATOR" content="Mozilla/4.73 [en] (X11; I; Linux 2.2.15-4mdk i586) [Netscape]">
-   <title>P&aacute;gina teste para a instala&ccedil;&atilde;o do Apache no
-Web Site</title>
-<!-- original translation Ricardo Oliva, rfoliva@writeme.com, Thu Dec 07
-19:51:00 PST 2000 -->
-<!-- Background white, links blue (unvisited), navy (visited), red
-   (active) -->
-</head>
-<body text="#000000" bgcolor="#FFFFFF" link="#0000FF" vlink="#000080" alink="#FF0000">
-
-<center>
-<h1>
-Funcionou! O Apache Web Server foi instalado corretamente neste Web Site!</h1></center>
-Se voc&ecirc; est&aacute; vendo esta p&aacute;gina, isso quer dizer que o software
-Apache
-Web server foi instalado com sucesso. Agora, basta adicionar o conte&uacute;do
-ao diret&oacute;rio raiz e substituir esta p&aacute;gina temporaria, ou apontar o servidor
-para o seu conte&uacute;do real.
-<br>
-<hr>
-<blockquote>
-<center>
-<h3>
-<b>Est&aacute; vendo esta p&aacute;gina em vez do site que esperava?</b></h3></center>
-Esta p&aacute;gina est&aacute; sendo carregada, pois o administrador modificou as
-configura&ccedil;&otilde;es
-deste servidor. Por favor, <b>contacte o administrador do site para esclarecimentos.</b>
-(Tente enviar um e-mail para <tt>&lt;Webmaster@dominio></tt>.) A Apache
-Server Foundation, que desenvolveu o software (web server) utilizado pelo
-administrador, n&atilde;o tem nenhuma responsabilidade sobre a manuten&ccedil;&atilde;o desta
-p&aacute;gina e n&atilde;o poder&aacute; ajudar a resolu&ccedil;&atilde;o de problemas de
-configura&ccedil;&atilde;o.</blockquote>
-
-<hr>
-<p>O Apache <a href="manual/index.html">documentation</a> foi inclu&iacute;do
-com esta distribui&ccedil;&atilde;o.
-<p>O Webmaster deste site &eacute; livre para utilizar a imagem abaixo num web
-server utilizando o Apache. Obrigado por utilizar o Apache!
-<center><img SRC="apache_pb.gif" ALT="" ></center>
-
-</body>
-</html>
diff --git a/docs/docroot/index.html.ru.cp-1251 b/docs/docroot/index.html.ru.cp-1251
deleted file mode 100644
index e9c51af..0000000
--- a/docs/docroot/index.html.ru.cp-1251
+++ /dev/null
@@ -1,34 +0,0 @@
-<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
-<html>
-<head>
-   <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
-   <meta name="GENERATOR" content="Mozilla/4.72 [koi8-r] (X11; U; Linux 2.2.12-20smp i686) [Netscape]">
-   <title>Òåñòîâàÿ ñòðàíèöà óñòàíîâêè Apache</title>
-<!-- Áåëûé ôîí, ññûëêè: ñèíèå (íåïîñåù¸ííûå), ò¸ìíî-ôèîëåòîâûå (ïîñåù¸ííûå), êðàñíûå (ïîñåù¸ííûå) -->
-</head>
-<body text="#000000" bgcolor="#FFFFFF" link="#0000FF" vlink="#000080" alink="#FF0000">
-Åñëè Âû ýòî âèäèòå, ýòî çíà÷èò, ÷òî óñòàíîâêà
-ÏÎ âåá-ñåðâåðà Apache íà ýòîé
-ñèñòåìå çàâåðøèëàñü óñïåøíî. Âû ìîæåòå òåïåðü äîáàâëÿòü ñîäåðæèìîå â ýòó
-äèðåêòîðèþ è çàìåíèòü ýòó ñòðàíèöó.
-<p>
-<hr WIDTH="50%" SIZE="8">
-<center>
-<h2>
-Âû âèäèòå ýòî âìåñòî îæèäàåìîé ñòðàíèöû?</h2></center>
-Ýòà ñòðàíèöà íàõîäèòñÿ çäåñü ïîòîìó, ÷òî àäìèíèñòðàòîð ñèñòåìû èçìåíèë
-êîíôèãóðàöèþ ýòîãî âåá-ñåðâåðà. Ïîæàëóéñòà, <b>ñâÿæèòåñü ñ ëèöîì, îòâåòñâåííûì
-çà ïîääåðæêó ýòîãî ñåðâåðà äëÿ âûÿñíåíèÿ âàøèõ âîïðîñîâ.</b> Apache Software
-Foundation, àâòîð ÏÎ âåá-ñåðâåðà, êîòîðûì ïîëüçóåòñÿ àäìèíèñòðàòîð ýòîé
-ñèñòåìû, íå ñâÿçàí ñ ïîääåðæêîé ýòîé ñèñòåìû è íå ìîæåò ïîìî÷ü&nbsp;Âàì
-ðàçðåøèòü ïðîáëåìû êîíôèãóðàöèè.
-<p>
-<hr WIDTH="50%" SIZE="8">
-<p><a href="manual/">Äîêóìåíòàöèÿ</a> ïî âåá-ñåðâåðó Apache ïðèëàãàåòñÿ
-ê êîìïëåêòó ÏÎ.
-<p>Âû ìîæåòå ñâîáîäíî èñïîëüçîâàòü ïèêòîãðàììó, íàõîäÿùóþñÿ íèæå, íà âåá-ñåðâåðå,
-èñïîëüçóþùèì ÏÎ Apache. Ñïàñèáî çà èñïîëüçîâàíèå Apache!
-<center><img SRC="apache_pb.gif" ALT="" ></center>
-
-</body>
-</html>
diff --git a/docs/docroot/index.html.ru.cp866 b/docs/docroot/index.html.ru.cp866
deleted file mode 100644
index 05fa119..0000000
--- a/docs/docroot/index.html.ru.cp866
+++ /dev/null
@@ -1,34 +0,0 @@
-<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
-<html>
-<head>
-   <meta http-equiv="Content-Type" content="text/html; charset=cp866">
-   <meta name="GENERATOR" content="Mozilla/4.72 [koi8-r] (X11; U; Linux 2.2.12-20smp i686) [Netscape]">
-   <title>’¥á⮢ ï áâà ­¨æ  ãáâ ­®¢ª¨ Apache</title>
-<!-- ¥«ë© ä®­, áá뫪¨: ᨭ¨¥ (­¥¯®á¥éñ­­ë¥), âñ¬­®-䨮«¥â®¢ë¥ (¯®á¥éñ­­ë¥), ªà á­ë¥ (¯®á¥éñ­­ë¥) -->
-</head>
-<body text="#000000" bgcolor="#FFFFFF" link="#0000FF" vlink="#000080" alink="#FF0000">
-…᫨ ‚ë íâ® ¢¨¤¨â¥, íâ® §­ ç¨â, çâ® ãáâ ­®¢ª 
-Ž ¢¥¡-á¥à¢¥à  Apache ­  í⮩
-á¨á⥬¥ § ¢¥à訫 áì ãᯥ譮. ‚ë ¬®¦¥â¥ ⥯¥àì ¤®¡ ¢«ïâì ᮤ¥à¦¨¬®¥ ¢ íâã
-¤¨à¥ªâ®à¨î ¨ § ¬¥­¨âì íâã áâà ­¨æã.
-<p>
-<hr WIDTH="50%" SIZE="8">
-<center>
-<h2>
-‚ë ¢¨¤¨â¥ íâ® ¢¬¥áâ® ®¦¨¤ ¥¬®© áâà ­¨æë?</h2></center>
-â  áâà ­¨æ  ­ å®¤¨âáï §¤¥áì ¯®â®¬ã, çâ®  ¤¬¨­¨áâà â®à á¨áâ¥¬ë ¨§¬¥­¨«
-ª®­ä¨£ãà æ¨î í⮣® ¢¥¡-á¥à¢¥à . ®¦ «ã©áâ , <b>á¢ï¦¨â¥áì á «¨æ®¬, ®â¢¥âᢥ­­ë¬
-§  ¯®¤¤¥à¦ªã í⮣® á¥à¢¥à  ¤«ï ¢ëïá­¥­¨ï ¢ è¨å ¢®¯à®á®¢.</b> Apache Software
-Foundation,  ¢â®à Ž ¢¥¡-á¥à¢¥à , ª®â®àë¬ ¯®«ì§ã¥âáï  ¤¬¨­¨áâà â®à í⮩
-á¨á⥬ë, ­¥ á¢ï§ ­ á ¯®¤¤¥à¦ª®© í⮩ á¨áâ¥¬ë ¨ ­¥ ¬®¦¥â ¯®¬®çì&nbsp;‚ ¬
-à §à¥è¨âì ¯à®¡«¥¬ë ª®­ä¨£ãà æ¨¨.
-<p>
-<hr WIDTH="50%" SIZE="8">
-<p><a href="manual/">„®ªã¬¥­â æ¨ï</a> ¯® ¢¥¡-á¥à¢¥àã Apache ¯à¨« £ ¥âáï
-ª ª®¬¯«¥ªâ㠏Ž.
-<p>‚ë ¬®¦¥â¥ ᢮¡®¤­® ¨á¯®«ì§®¢ âì ¯¨ªâ®£à ¬¬ã, ­ å®¤ïéãîáï ­¨¦¥, ­  ¢¥¡-á¥à¢¥à¥,
-¨á¯®«ì§ãî騬 Ž Apache. ‘¯ á¨¡® §  ¨á¯®«ì§®¢ ­¨¥ Apache!
-<center><img SRC="apache_pb.gif" ALT="" ></center>
-
-</body>
-</html>
diff --git a/docs/docroot/index.html.ru.iso-ru b/docs/docroot/index.html.ru.iso-ru
deleted file mode 100644
index ef25c80..0000000
--- a/docs/docroot/index.html.ru.iso-ru
+++ /dev/null
@@ -1,34 +0,0 @@
-<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
-<html>
-<head>
-   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-5">
-   <meta name="GENERATOR" content="Mozilla/4.72 [koi8-r] (X11; U; Linux 2.2.12-20smp i686) [Netscape]">
-   <title>ÂÕáâÞÒÐï áâàÐÝØæÐ ãáâÐÝÞÒÚØ Apache</title>
-<!-- ±ÕÛëÙ äÞÝ, ááëÛÚØ: áØÝØÕ (ÝÕßÞáÕéñÝÝëÕ), âñÜÝÞ-äØÞÛÕâÞÒëÕ (ßÞáÕéñÝÝëÕ), ÚàÐáÝëÕ (ßÞáÕéñÝÝëÕ) -->
-</head>
-<body text="#000000" bgcolor="#FFFFFF" link="#0000FF" vlink="#000080" alink="#FF0000">
-µáÛØ ²ë íâÞ ÒØÔØâÕ, íâÞ ×ÝÐçØâ, çâÞ ãáâÐÝÞÒÚÐ
-¿¾ ÒÕÑ-áÕàÒÕàÐ Apache ÝÐ íâÞÙ
-áØáâÕÜÕ ×ÐÒÕàèØÛÐáì ãáßÕèÝÞ. ²ë ÜÞÖÕâÕ âÕßÕàì ÔÞÑÐÒÛïâì áÞÔÕàÖØÜÞÕ Ò íâã
-ÔØàÕÚâÞàØî Ø ×ÐÜÕÝØâì íâã áâàÐÝØæã.
-<p>
-<hr WIDTH="50%" SIZE="8">
-<center>
-<h2>
-²ë ÒØÔØâÕ íâÞ ÒÜÕáâÞ ÞÖØÔÐÕÜÞÙ áâàÐÝØæë?</h2></center>
-ÍâÐ áâàÐÝØæÐ ÝÐåÞÔØâáï ×ÔÕáì ßÞâÞÜã, çâÞ ÐÔÜØÝØáâàÐâÞà áØáâÕÜë Ø×ÜÕÝØÛ
-ÚÞÝäØÓãàÐæØî íâÞÓÞ ÒÕÑ-áÕàÒÕàÐ. ¿ÞÖÐÛãÙáâÐ, <b>áÒïÖØâÕáì á ÛØæÞÜ, ÞâÒÕâáÒÕÝÝëÜ
-×Ð ßÞÔÔÕàÖÚã íâÞÓÞ áÕàÒÕàÐ ÔÛï ÒëïáÝÕÝØï ÒÐèØå ÒÞßàÞáÞÒ.</b> Apache Software
-Foundation, ÐÒâÞà ¿¾ ÒÕÑ-áÕàÒÕàÐ, ÚÞâÞàëÜ ßÞÛì×ãÕâáï ÐÔÜØÝØáâàÐâÞà íâÞÙ
-áØáâÕÜë, ÝÕ áÒï×ÐÝ á ßÞÔÔÕàÖÚÞÙ íâÞÙ áØáâÕÜë Ø ÝÕ ÜÞÖÕâ ßÞÜÞçì&nbsp;²ÐÜ
-àÐ×àÕèØâì ßàÞÑÛÕÜë ÚÞÝäØÓãàÐæØØ.
-<p>
-<hr WIDTH="50%" SIZE="8">
-<p><a href="manual/">´ÞÚãÜÕÝâÐæØï</a> ßÞ ÒÕÑ-áÕàÒÕàã Apache ßàØÛÐÓÐÕâáï
-Ú ÚÞÜßÛÕÚâã ¿¾.
-<p>²ë ÜÞÖÕâÕ áÒÞÑÞÔÝÞ ØáßÞÛì×ÞÒÐâì ßØÚâÞÓàÐÜÜã, ÝÐåÞÔïéãîáï ÝØÖÕ, ÝÐ ÒÕÑ-áÕàÒÕàÕ,
-ØáßÞÛì×ãîéØÜ ¿¾ Apache. ÁßÐáØÑÞ ×Ð ØáßÞÛì×ÞÒÐÝØÕ Apache!
-<center><img SRC="apache_pb.gif" ALT="" ></center>
-
-</body>
-</html>
diff --git a/docs/docroot/index.html.ru.koi8-r b/docs/docroot/index.html.ru.koi8-r
deleted file mode 100644
index db6ee83..0000000
--- a/docs/docroot/index.html.ru.koi8-r
+++ /dev/null
@@ -1,34 +0,0 @@
-<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
-<html>
-<head>
-   <meta http-equiv="Content-Type" content="text/html; charset=koi8-r">
-   <meta name="GENERATOR" content="Mozilla/4.72 [koi8-r] (X11; U; Linux 2.2.12-20smp i686) [Netscape]">
-   <title>ôÅÓÔÏ×ÁÑ ÓÔÒÁÎÉÃÁ ÕÓÔÁÎÏ×ËÉ Apache</title>
-<!-- âÅÌÙÊ ÆÏÎ, ÓÓÙÌËÉ: ÓÉÎÉÅ (ÎÅÐÏÓÅÝ£ÎÎÙÅ), Ô£ÍÎÏ-ÆÉÏÌÅÔÏ×ÙÅ (ÐÏÓÅÝ£ÎÎÙÅ), ËÒÁÓÎÙÅ (ÐÏÓÅÝ£ÎÎÙÅ) -->
-</head>
-<body text="#000000" bgcolor="#FFFFFF" link="#0000FF" vlink="#000080" alink="#FF0000">
-åÓÌÉ ÷Ù ÜÔÏ ×ÉÄÉÔÅ, ÜÔÏ ÚÎÁÞÉÔ, ÞÔÏ ÕÓÔÁÎÏ×ËÁ
-ðï ×ÅÂ-ÓÅÒ×ÅÒÁ Apache ÎÁ ÜÔÏÊ
-ÓÉÓÔÅÍÅ ÚÁ×ÅÒÛÉÌÁÓØ ÕÓÐÅÛÎÏ. ÷Ù ÍÏÖÅÔÅ ÔÅÐÅÒØ ÄÏÂÁ×ÌÑÔØ ÓÏÄÅÒÖÉÍÏÅ × ÜÔÕ
-ÄÉÒÅËÔÏÒÉÀ É ÚÁÍÅÎÉÔØ ÜÔÕ ÓÔÒÁÎÉÃÕ.
-<p>
-<hr WIDTH="50%" SIZE="8">
-<center>
-<h2>
-÷Ù ×ÉÄÉÔÅ ÜÔÏ ×ÍÅÓÔÏ ÏÖÉÄÁÅÍÏÊ ÓÔÒÁÎÉÃÙ?</h2></center>
-üÔÁ ÓÔÒÁÎÉÃÁ ÎÁÈÏÄÉÔÓÑ ÚÄÅÓØ ÐÏÔÏÍÕ, ÞÔÏ ÁÄÍÉÎÉÓÔÒÁÔÏÒ ÓÉÓÔÅÍÙ ÉÚÍÅÎÉÌ
-ËÏÎÆÉÇÕÒÁÃÉÀ ÜÔÏÇÏ ×ÅÂ-ÓÅÒ×ÅÒÁ. ðÏÖÁÌÕÊÓÔÁ, <b>Ó×ÑÖÉÔÅÓØ Ó ÌÉÃÏÍ, ÏÔ×ÅÔÓ×ÅÎÎÙÍ
-ÚÁ ÐÏÄÄÅÒÖËÕ ÜÔÏÇÏ ÓÅÒ×ÅÒÁ ÄÌÑ ×ÙÑÓÎÅÎÉÑ ×ÁÛÉÈ ×ÏÐÒÏÓÏ×.</b> Apache Software
-Foundation, Á×ÔÏÒ ðï ×ÅÂ-ÓÅÒ×ÅÒÁ, ËÏÔÏÒÙÍ ÐÏÌØÚÕÅÔÓÑ ÁÄÍÉÎÉÓÔÒÁÔÏÒ ÜÔÏÊ
-ÓÉÓÔÅÍÙ, ÎÅ Ó×ÑÚÁÎ Ó ÐÏÄÄÅÒÖËÏÊ ÜÔÏÊ ÓÉÓÔÅÍÙ É ÎÅ ÍÏÖÅÔ ÐÏÍÏÞØ&nbsp;÷ÁÍ
-ÒÁÚÒÅÛÉÔØ ÐÒÏÂÌÅÍÙ ËÏÎÆÉÇÕÒÁÃÉÉ.
-<p>
-<hr WIDTH="50%" SIZE="8">
-<p><a href="manual/">äÏËÕÍÅÎÔÁÃÉÑ</a> ÐÏ ×ÅÂ-ÓÅÒ×ÅÒÕ Apache ÐÒÉÌÁÇÁÅÔÓÑ
-Ë ËÏÍÐÌÅËÔÕ ðï.
-<p>÷Ù ÍÏÖÅÔÅ Ó×ÏÂÏÄÎÏ ÉÓÐÏÌØÚÏ×ÁÔØ ÐÉËÔÏÇÒÁÍÍÕ, ÎÁÈÏÄÑÝÕÀÓÑ ÎÉÖÅ, ÎÁ ×ÅÂ-ÓÅÒ×ÅÒÅ,
-ÉÓÐÏÌØÚÕÀÝÉÍ ðï Apache. óÐÁÓÉÂÏ ÚÁ ÉÓÐÏÌØÚÏ×ÁÎÉÅ Apache!
-<center><img SRC="apache_pb.gif" ALT="" ></center>
-
-</body>
-</html>
diff --git a/docs/docroot/index.html.ru.utf8 b/docs/docroot/index.html.ru.utf8
deleted file mode 100644
index fc6694f..0000000
--- a/docs/docroot/index.html.ru.utf8
+++ /dev/null
@@ -1,34 +0,0 @@
-<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
-<html>
-<head>
-   <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-   <meta name="GENERATOR" content="Mozilla/4.72 [koi8-r] (X11; U; Linux 2.2.12-20smp i686) [Netscape]">
-   <title>Тестовая страница установки Apache</title>
-<!-- Белый фон, ссылки: синие (непосещённые), тёмно-фиолетовые (посещённые), красные (посещённые) -->
-</head>
-<body text="#000000" bgcolor="#FFFFFF" link="#0000FF" vlink="#000080" alink="#FF0000">
-Если Вы это видите, это значит, что установка
-ПО веб-сервера Apache на этой
-системе завершилась успешно. Вы можете теперь добавлять содержимое в эту
-директорию и заменить эту страницу.
-<p>
-<hr WIDTH="50%" SIZE="8">
-<center>
-<h2>
-Вы видите это вместо ожидаемой страницы?</h2></center>
-Эта страница находится здесь потому, что администратор системы изменил
-конфигурацию этого веб-сервера. Пожалуйста, <b>свяжитесь с лицом, ответсвенным
-за поддержку этого сервера для выяснения ваших вопросов.</b> Apache Software
-Foundation, автор ПО веб-сервера, которым пользуется администратор этой
-системы, не связан с поддержкой этой системы и не может помочь&nbsp;Вам
-разрешить проблемы конфигурации.
-<p>
-<hr WIDTH="50%" SIZE="8">
-<p><a href="manual/">Документация</a> по веб-серверу Apache прилагается
-к комплекту ПО.
-<p>Вы можете свободно использовать пиктограмму, находящуюся ниже, на веб-сервере,
-использующим ПО Apache. Спасибо за использование Apache!
-<center><img SRC="apache_pb.gif" ALT="" ></center>
-
-</body>
-</html>
diff --git a/docs/docroot/index.html.se b/docs/docroot/index.html.se
deleted file mode 100644
index 377307f..0000000
--- a/docs/docroot/index.html.se
+++ /dev/null
@@ -1,43 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 3.2 Final//EN">
-<html>
- <head>
-  <title>Testsida f&ouml;r Apache-installationen</title>
- </head>
-<!-- Background white, links blue (unvisited), navy (visited), red (active) -->
- <body
-  bgcolor="#FFFFFF"
-  text="#000000"
-  link="#0000FF"
-  vlink="#000080"
-  alink="#FF0000"
- >
-  <h1 align="CENTER">
-   Det fungerade! Apache &auml;r installerad p&aring; denna maskin!
-  </h1>
-  <p>
-  Om du kan se denna sida s&aring; har &auml;garen till denna maskin installerat
-  webbserverprogramvaran Apache.<br>
-  Denne m&aring;ste nu placera webbsidor i detta bibliotek och &auml;ndra p&aring; denna sida, eller
-  peka servern mot ett annat bibliotek.
-  </p>
-  <hr>
-  <blockquote>
-   Om du f&ouml;rv&auml;ntat dig att se n&aring;got helt annat h&auml;r &auml;n denna sida, <strong>kontakta
-   v&auml;nligen administrat&ouml;ren f&ouml;r den webbserver du f&ouml;rs&ouml;ker komma i kontakt med.</strong>
-   (F&ouml;rs&ouml;k att skicka ett brev till <samp>&lt;webmaster@<em>domain</em>&gt;</samp>.)
-   Apache Software Foundation har inget med denna webbplats att g&ouml;ra, s&aring; det &auml;r ingen id&eacute;
-   att skicka mail till f&ouml;rfattarna av Apache r&ouml;rande denna webbplats.
-  </blockquote>
-  <hr>
-  <p>
-  Apache-<a href="manual/">dokumentationen</a> &auml;r inkluderad i denna distribution.
-  </p>
-  <p>
-  Administrat&ouml;ren av denna webbplats f&aring;r g&auml;rna anv&auml;nda f&ouml;ljande bild till en webbplats som anv&auml;nder Apache.<br>
-  Tack f&ouml;r att ni anv&auml;nder Apache!
-  </p>
-  <div align="CENTER">
-   <img src="apache_pb.gif" alt="">
-  </div>
- </body>
-</html>
diff --git a/docs/docroot/index.html.tw b/docs/docroot/index.html.tw
deleted file mode 100644
index 1ca0212..0000000
--- a/docs/docroot/index.html.tw
+++ /dev/null
@@ -1,46 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<HTML>
- <HEAD>
-  <TITLE>¦w¸Ë Apache ªº´ú¸Õºô­¶</TITLE>
- </HEAD>
- <!-- Background white, links blue (unvisited), navy (visited), red (active)-->
- <BODY
-  BGCOLOR="#FFFFFF"
-  TEXT="#000000"
-  LINK="#0000FF"
-  VLINK="#000080"
-  ALINK="#FF0000"
- >
-
-
-<P>
-¦pªG§A¥i¥H¬Ý¨£¦¹­¶¡A³oªí¥Ü§Aªº 
-<A HREF="http://httpd.apache.org/">Apache Web Server</A>
-¤w¸g¦w¸Ë¦¨¥\¡C
-§A¥i¥H¼W¥[¤º®e¨ì³o­Ó¥Ø¿ý¡A©Î§â³o­Óºô­¶´«±¼¡C<P>
-
-<P><HR WIDTH="50%" SIZE="8">
-
-<H2 ALIGN="CENTER">¨S¦³¬Ý¨ì§A·Q¬Ýªººô¯¸¶Ü ?</H2>
-
-<P>
-³o­Óºô­¶¤§©Ò¥H·|¦b³oùØ¡A¨º¬O¦]¬°ºô¯¸ºÞ²zªÌ¤w¸g§ó§ï³o­Óºô¯¸ªº³]©w¡C
-­Y¦³°ÝÃD, ½Ð»P <STRONG>ºûÅ@³o­Ó¦øªA¾¹ªº¤H­ûÁpµ¸</STRONG>¡C
-Apache ³nÅé°òª÷·|¡A¤]´N¬O¶}µo³o®M³nÅ骺³æ¦ì¡A»P¦¹ºô¯¸¨ÃµL¥ô¦óÃö«Y¡A
-¦Ó¥B¤]µLªkÀ°§A¸Ñ¨M³]©w¤Wªº°ÝÃD¡C
-
-<P><HR WIDTH="50%" SIZE="8">
-
-<P>
-Apache ªº
-<A HREF="manual/">¤å¥ó</A>
-¤w¸g¥]§t¦b¸Óª©¥»¤¤¡C
-
-<P>
-§A¥i¥H¦b¨Ï¥Î Apache ªººô¯¸¦øªA¾¹¤W¡A¦Û¥Ñªº¨Ï¥Î¤U­±¤§¹Ï¥Ü¡A
-·PÁ±z¨Ï¥Î Apache¡I
-<BR><BR>
-<DIV ALIGN="CENTER"><IMG SRC="apache_pb.gif" ALT=""></DIV>
-
-</BODY>
-</HTML>
diff --git a/docs/docroot/index.html.tw.Big5 b/docs/docroot/index.html.tw.Big5
deleted file mode 100644
index ec9d874..0000000
--- a/docs/docroot/index.html.tw.Big5
+++ /dev/null
@@ -1,46 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<HTML>
- <HEAD>
-  <TITLE>¦w¸Ë Apache ªº´ú¸Õºô­¶</TITLE>
- </HEAD>
- <!-- Background white, links blue (unvisited), navy (visited), red (active)-->
- <BODY
-  BGCOLOR="#FFFFFF"
-  TEXT="#000000"
-  LINK="#0000FF"
-  VLINK="#000080"
-  ALINK="#FF0000"
- >
-
-
-<P>
-¦pªG§A¥i¥H¬Ý¨£¦¹­¶¡A³oªí¥Ü§Aªº 
-Apache Web Server
-¤w¸g¦w¸Ë¦¨¥\¡C
-§A¥i¥H¼W¥[¤º®e¨ì³o­Ó¥Ø¿ý¡A©Î§â³o­Óºô­¶´«±¼¡C<P>
-
-<P><HR WIDTH="50%" SIZE="8">
-
-<H2 ALIGN="CENTER">¨S¦³¬Ý¨ì§A·Q¬Ýªººô¯¸¶Ü ?</H2>
-
-<P>
-³o­Óºô­¶¤§©Ò¥H·|¦b³oùØ¡A¨º¬O¦]¬°ºô¯¸ºÞ²zªÌ¤w¸g§ó§ï³o­Óºô¯¸ªº³]©w¡C
-­Y¦³°ÝÃD, ½Ð»P <STRONG>ºûÅ@³o­Ó¦øªA¾¹ªº¤H­ûÁpµ¸</STRONG>¡C
-Apache ³nÅé°òª÷·|¡A¤]´N¬O¶}µo³o®M³nÅ骺³æ¦ì¡A»P¦¹ºô¯¸¨ÃµL¥ô¦óÃö«Y¡A
-¦Ó¥B¤]µLªkÀ°§A¸Ñ¨M³]©w¤Wªº°ÝÃD¡C
-
-<P><HR WIDTH="50%" SIZE="8">
-
-<P>
-Apache ªº
-<A HREF="manual/">¤å¥ó</A>
-¤w¸g¥]§t¦b¸Óª©¥»¤¤¡C
-
-<P>
-§A¥i¥H¦b¨Ï¥Î Apache ªººô¯¸¦øªA¾¹¤W¡A¦Û¥Ñªº¨Ï¥Î¤U­±¤§¹Ï¥Ü¡A
-·PÁ±z¨Ï¥Î Apache¡I
-<BR><BR>
-<DIV ALIGN="CENTER"><IMG SRC="apache_pb.gif" ALT=""></DIV>
-
-</BODY>
-</HTML>
diff --git a/docs/docroot/index.html.var b/docs/docroot/index.html.var
deleted file mode 100644
index 532d753..0000000
--- a/docs/docroot/index.html.var
+++ /dev/null
@@ -1,123 +0,0 @@
-URI: index.html.ca
-Content-language: ca
-Content-type: text/html
-
-URI: index.html.cz.iso8859-2
-Content-language: cz
-Content-type: text/html;charset=ISO-8859-2
-
-URI: index.html.de
-Content-language: de
-Content-type: text/html
-
-URI: index.html.dk
-Content-language: da
-Content-type: text/html
-
-URI: index.html.ee
-Content-language: ee
-Content-type: text/html
-
-URI: index.html.el
-Content-language: el
-Content-type: text/html
-
-URI: index.html.en
-Content-language: en
-Content-type: text/html
-
-URI: index.html.es
-Content-language: es
-Content-type: text/html
-
-URI: index.html.et
-Content-language: et
-Content-type: text/html
-
-URI: index.html.fr
-Content-language: fr
-Content-type: text/html
-
-URI: index.html.he.iso8859-8
-Content-language: he
-Content-type: text/html;charset=ISO-8859-8
-
-URI: index.html.hr.iso8859-2
-Content-language: hr
-Content-type: text/html;charset=ISO-8859-2
-
-URI: index.html.it
-Content-language: it
-Content-type: text/html
-
-URI: index.html.ja.iso2022-jp
-Content-language: ja
-Content-type: text/html;charset=ISO-2022-JP
-
-URI: index.html.kr.iso2022-kr
-Content-language: kr
-Content-type: text/html;charset=ISO-2022-KR
-
-URI: index.html.ltz.utf8
-Content-language: ltz
-Content-type: text/html;charset=UTF-8
-
-URI: index.html.lu.utf8
-Content-language: lu
-Content-type: text/html;charset=UTF-8
-
-URI: index.html.nl
-Content-language: nl
-Content-type: text/html
-
-URI: index.html.nn
-Content-language: nn
-Contenty-Type: text/html
-
-URI: index.html.no
-Content-language: no
-Content-type: text/html
-
-URI: index.html.po.iso8859-2
-Content-language: pl
-Content-type: text/html;charset=ISO-8859-2
-
-URI: index.html.pt
-Content-language: pt
-Content-type: text/html
-
-URI: index.html.pt-br
-Content-language: pt-br
-Content-type: text/html
-
-URI: index.html.ru.cp-1251
-Content-language: ru
-Content-type: text/html;charset=WINDOWS-1251
-
-URI: index.html.ru.cp866
-Content-language: ru
-Content-type: text/html;charset=CP866
-
-URI: index.html.ru.iso-ru
-Content-language: ru
-Content-type: text/html;charset=ISO-8859-5
-
-URI: index.html.ru.koi8-r
-Content-language: ru
-Content-type: text/html;charset=KOI8-r
-
-URI: index.html.ru.utf8
-Content-language: ru
-Content-type: text/html;charset=UTF-8
-
-URI: index.html.se
-Content-language: sv
-Content-type: text/html
-
-URI: index.html.tw
-Content-language: zh-tw
-Content-type: text/html
-
-URI: index.html.tw.Big5
-Content-language: tw, zh-tw
-Content-type: text/html;charset=Big5
diff --git a/docs/doxygen.conf b/docs/doxygen.conf
deleted file mode 100644
index d6503b3..0000000
--- a/docs/doxygen.conf
+++ /dev/null
@@ -1,30 +0,0 @@
-PROJECT_NAME=Apache
-
-#INPUT=srclib/apr
-INPUT=.
-RECURSIVE=YES
-FILE_PATTERNS=*.h
-
-OUTPUT_DIRECTORY=docs/dox
-
-ENABLE_PREPROCESSING=YES
-MACRO_EXPANSION=YES
-QUIET=YES
-EXPAND_ONLY_PREDEF=YES
-#EXPAND_AS_DEFINED=
-# not sure why this doesn't work as EXPAND_AS_DEFINED, it should!
-PREDEFINED="APR_DECLARE(x)=x" \
-       "APR_DECLARE_NONSTD(x)=x" \
-       "AP_DECLARE_HOOK(ret,name,args)=ret name args;" \
-       "AP_DECLARE(x)=x" \
-       "AP_DECLARE_NONSTD(x)=x" \
-       DOXYGEN= \
-       APU_DECLARE_DATA= \
-       __pre_nw__= \
-       "APU_DECLARE(x)=x"
-
-OPTIMIZE_OUTPUT_FOR_C=YES
-
-FULL_PATH_NAMES=YES
-# some autoconf guru needs to make configure set this correctly...
-STRIP_FROM_PATH=/home/ianh/commit/httpd-2.0
diff --git a/docs/error/HTTP_BAD_GATEWAY.html.var b/docs/error/HTTP_BAD_GATEWAY.html.var
deleted file mode 100644
index c6f81de..0000000
--- a/docs/error/HTTP_BAD_GATEWAY.html.var
+++ /dev/null
@@ -1,66 +0,0 @@
-Content-language: de
-Content-type: text/html
-Body:----------de--
-<!--#set var="TITLE" value="Fehlerhaftes Gateway!" -->
-<!--#include virtual="include/top.html" -->
-
-    Der Proxy-Server erhielt eine fehlerhafte Antwort
-    eines übergeordneten Servers oder Proxies. 
-
-  <!--#if expr="$REDIRECT_ERROR_NOTES" -->
-    <!--#include virtual="include/spacer.html" -->
-    <!--#echo var="REDIRECT_ERROR_NOTES" -->
-  <!--#endif -->
-     
-<!--#include virtual="include/bottom.html" -->
-----------de--
-
-Content-language: en
-Content-type: text/html
-Body:----------en--
-<!--#set var="TITLE" value="Bad Gateway!" -->
-<!--#include virtual="include/top.html" -->
-
-    The proxy server received an invalid
-    response from an upstream server.
-
-  <!--#if expr="$REDIRECT_ERROR_NOTES" -->
-    <!--#include virtual="include/spacer.html" -->
-    <!--#echo var="REDIRECT_ERROR_NOTES" -->
-  <!--#endif -->
-    
-<!--#include virtual="include/bottom.html" -->
-----------en--
-
-Content-language: es
-Content-type: text/html
-Body:----------es--
-<!--#set var="TITLE" value="Bad Gateway!" -->
-<!--#include virtual="include/top.html" -->
-
-	El servidor fuente recibio informaci&oacute;n 
-	inv&aacute;lida por parte del servidor destino.
-
-  <!--#if expr="$REDIRECT_ERROR_NOTES" -->
-    <!--#include virtual="include/spacer.html" -->
-    <!--#echo var="REDIRECT_ERROR_NOTES" -->
-  <!--#endif -->
-    
-<!--#include virtual="include/bottom.html" -->
-----------es--
-
-Content-language: fr
-Content-type: text/html
-Body:----------fr--
-<!--#set var="TITLE" value="Gateway incorrect!" -->
-<!--#include virtual="include/top.html" -->
-
-    Le serveur proxy a re&ccedil;u une r&eacute;ponse incorrecte de la part d'un serveur sup&eacute;rieur. 
-
-  <!--#if expr="$REDIRECT_ERROR_NOTES" -->
-    <!--#include virtual="include/spacer.html" -->
-    <!--#echo var="REDIRECT_ERROR_NOTES" -->
-  <!--#endif -->
-
-<!--#include virtual="include/bottom.html" -->   
-----------fr--
diff --git a/docs/error/HTTP_BAD_REQUEST.html.var b/docs/error/HTTP_BAD_REQUEST.html.var
deleted file mode 100644
index 938db81..0000000
--- a/docs/error/HTTP_BAD_REQUEST.html.var
+++ /dev/null
@@ -1,46 +0,0 @@
-Content-language: de
-Content-type: text/html
-Body:----------de--
-<!--#set var="TITLE" value="Fehlerhafte Anfrage!" -->
-<!--#include virtual="include/top.html" -->
-
-    Ihr Browser (oder Proxy) hat eine ungültige Anfrage gesendet,
-    die vom Server nicht beantwortet werden kann.
-
-<!--#include virtual="include/bottom.html" -->
-----------de--
-
-Content-language: en
-Content-type: text/html
-Body:----------en--
-<!--#set var="TITLE" value="Bad request!" -->
-<!--#include virtual="include/top.html" -->
-
-    Your browser (or proxy) sent a request that
-    this server could not understand.
-
-<!--#include virtual="include/bottom.html" -->
-----------en--
-
-Content-language: es
-Content-type: text/html
-Body:----------es--
-<!--#set var="TITLE" value="Bad request!" -->
-<!--#include virtual="include/top.html" -->
-
-	El buscador ha solicitado una operaci&oacute;n
-	que no puede ser procesada por el servidor.
-
-<!--#include virtual="include/bottom.html" -->
-----------es--
-
-Content-language: fr
-Content-type: text/html
-Body:----------fr--
-<!--#set var="TITLE" value="demande incorrecte!" -->
-<!--#include virtual="include/top.html" -->
-
-    Votre navigateur (ou votre proxy) a envoy&eacute; une demande que ce serveur n'a pas comprise.
-
-<!--#include virtual="include/bottom.html" -->  
-----------fr--
diff --git a/docs/error/HTTP_FORBIDDEN.html.var b/docs/error/HTTP_FORBIDDEN.html.var
deleted file mode 100644
index fb76393..0000000
--- a/docs/error/HTTP_FORBIDDEN.html.var
+++ /dev/null
@@ -1,84 +0,0 @@
-Content-language: de
-Content-type: text/html
-Body:----------de--
-<!--#set var="TITLE" value="Zugriff verweigert!" -->
-<!--#include virtual="include/top.html" -->
-
-  <!--#if expr="$REDIRECT_URL = /\/$/" -->
-
-    Der Zugriff auf das angeforderte Verzeichnis ist nicht möglich.
-    Entweder ist kein Index-Dokument vorhanden oder das Verzeichnis
-    ist zugriffsgeschützt.
-
-  <!--#else -->
-
-    Der Zugriff auf das angeforderte Objekt ist nicht möglich.
-    Entweder kann es vom Server nicht gelesen werden oder es
-    ist zugriffsgeschützt.
-
-  <!--#endif -->
-
-<!--#include virtual="include/bottom.html" -->
-----------de--
-
-Content-language: en
-Content-type: text/html
-Body:----------en--
-<!--#set var="TITLE" value="Access forbidden!" -->
-<!--#include virtual="include/top.html" -->
-<!--#if expr="$REDIRECT_URL = /\/$/" -->
-
-   You don't have permission to access the requested directory.
-   There is either no index document or the directory is read-protected.
-
-  <!--#else -->
-
-   You don't have permission to access the requested object.
-   It is either read-protected or not readable by the server.
-
-  <!--#endif -->
-
-<!--#include virtual="include/bottom.html" -->
-----------en--
-
-Content-language: es
-Content-type: text/html
-Body:----------es--
-<!--#set var="TITLE" value="Access forbidden!" -->
-<!--#include virtual="include/top.html" -->
-
-  <!--#if expr="$REDIRECT_URL = /\/$/" -->
-
-        Usted no tiene permiso para accesar a la direcci&oacute;n
-        solicitada. Existe la posibilidad de que el directorio
-        este protegido contra lectura o que no exista la
-        documentaci&oacute;n requerida.
-
-  <!--#else -->
-
-        Usted no tiene permiso de accesar al objeto solicitado.
-        Existe la posibilidad de que este protegido contra
-        lectura o que no haya podido ser leido por el servidor.
-
-  <!--#endif -->
-
-<!--#include virtual="include/bottom.html" -->
-----------es--
-
-Content-language: fr
-Content-type: text/html
-Body:----------fr--
-<!--#set var="TITLE" value="Acc&egrave;s interdit!" -->
-<!--#include virtual="include/top.html" -->
-<!--#if expr="$REDIRECT_URL = /\/$/" -->
-Vous n'avez pas le droit d'acc&eacute;der au r&eacute;pertoire
-demand&eacute;. Soit il n'y a pas de document index soit le r&eacute;pertoire
-est prot&eacute;g&eacute;.
-<!--#else -->
-Vous n'avez pas le droit d'acc&eacute;der &agrave; l'objet
-demand&eacute;. Soit celui-ci est prot&eacute;g&eacute;, soit il ne peut
-&ecirc;tre lu par le serveur.
-<!--#endif -->
-
-<!--#include virtual="include/bottom.html" -->
-----------fr--
diff --git a/docs/error/HTTP_GONE.html.var b/docs/error/HTTP_GONE.html.var
deleted file mode 100644
index 22aef7c..0000000
--- a/docs/error/HTTP_GONE.html.var
+++ /dev/null
@@ -1,100 +0,0 @@
-Content-language: de
-Content-type: text/html
-Body:----------de--
-<!--#set var="TITLE" value="Objekt nicht mehr verfügbar!" -->
-<!--#include virtual="include/top.html" -->
-
-    Der angeforderte URL existiert auf dem Server nicht mehr
-    und wurde dauerhaft entfernt.
-    Eine Weiterleitungsadresse ist nicht verfügbar.
-
-  <!--#if expr="$HTTP_REFERER" -->
-
-    Bitte informieren Sie den Autor der
-    <a href="<!--#echo encoding="url" var="HTTP_REFERER"-->">verweisenden Seite</a>
-    das der Link nicht mehr aktuell ist.
-
-  <!--#else -->
-
-    Falls Sie einem Link von einer anderen Seite gefolgt sind,
-    informieren Sie bitte den Autor der Seite hierüber.
-
-  <!--#endif -->
-
-<!--#include virtual="include/bottom.html" -->
-----------de--
-
-Content-language: en
-Content-type: text/html
-Body:----------en--
-<!--#set var="TITLE" value="Resource is no longer available!" -->
-<!--#include virtual="include/top.html" -->
-
-   The requested URL is no longer available on this server and there is no
-   forwarding address.
-  
-  <!--#if expr="$HTTP_REFERER" -->
-  
-   Please inform the author of the
-   <a href="<!--#echo encoding="url" var="HTTP_REFERER"-->">referring
-   page</a> that the link is outdated.
-   
-  <!--#else -->
-  
-   If you followed a link from a foreign page, please contact the
-   author of this page.
-   
-  <!--#endif -->
-  
-<!--#include virtual="include/bottom.html" --> 
-----------en--
-
-Content-language: es
-Content-type: text/html
-Body:----------es--
-<!--#set var="TITLE" value="Resource is no longer available!" -->
-<!--#include virtual="include/top.html" -->
-
-	Los recursos solicitados ya no estan disponibles en
-	este servidor y no existe una direcci&oacute;n alterna.
-
-  <!--#if expr="$HTTP_REFERER" -->
-
-	Le solicitamos que comunique al autor de la 
-	<a href="<!--#echo encoding="url" var="HTTP_REFERER"-->">p&aacute;gina 
-	referida</a> que el URL esta fuera de tiempo.
-
-  <!--#else -->
-	
-	Si usted siguio el URL desde una p&aacute;gina externa, 
-	porfavor contacte al autor de esa p&aacute;gina.
-
-
-  <!--#endif -->
-
-<!--#include virtual="include/bottom.html" -->
-----------es--
-
-Content-language: fr
-Content-type: text/html
-Body:----------fr--
-<!--#set var="TITLE" value="Cette ressource n'existe plus!" -->
-<!--#include virtual="include/top.html" -->
-
-   L'URL demand&eacute;e n'est plus accessible sur ce serveur et il
-   n'y a pas d'adresse de suite. 
-
-  <!--#if expr="$HTTP_REFERER" --> 
-
-   Nous vous prions d'informer l'auteur de
-   <a href="<!--#echo encoding="url" var="HTTP_REFERER"-->">la 
-   page en question</a> que la r&eacute;f&eacute;rence n'est plus actuelle. 
-
-  <!--#else --> 
-
-   Si vous avez suivi une r&eacute;f&eacute;rence issue d'une page autre, 
-   veuillez contacter l'auteur de cette page.
-
-  <!--#endif -->
-<!--#include virtual="include/bottom.html" -->
-----------fr--
diff --git a/docs/error/HTTP_INTERNAL_SERVER_ERROR.html.var b/docs/error/HTTP_INTERNAL_SERVER_ERROR.html.var
deleted file mode 100644
index fb731a3..0000000
--- a/docs/error/HTTP_INTERNAL_SERVER_ERROR.html.var
+++ /dev/null
@@ -1,109 +0,0 @@
-Content-language: de
-Content-type: text/html
-Body:----------de--
-<!--#set var="TITLE" value="Serverfehler!" -->
-<!--#include virtual="include/top.html" -->
-
-  <!--#if expr="$REDIRECT_ERROR_NOTES" -->
-
-    Die Anfrage kann nicht beantwortet werden, da im Server
-    ein interner Fehler aufgetreten ist.
-
-    <!--#include virtual="include/spacer.html" -->
-
-    Fehlermeldung:
-    <BR><!--#echo var="REDIRECT_ERROR_NOTES" -->
-
-
-  <!--#else -->
-
-    Die Anfrage kann nicht beantwortet werden, da im Server
-    ein interner Fehler aufgetreten ist.
-    Der Server ist entweder überlastet oder ein Fehler in
-    einem CGI-Script ist aufgetreten.
-
-  <!--#endif -->
-
-<!--#include virtual="include/bottom.html" -->
-----------de--
-
-Content-language: en
-Content-type: text/html
-Body:----------en--
-<!--#set var="TITLE" value="Server error!" -->
-<!--#include virtual="include/top.html" -->
-
-  <!--#if expr="$REDIRECT_ERROR_NOTES" -->
-
-    <!--#include virtual="include/spacer.html" -->
-
-    Error message:
-    <BR><!--#echo var="REDIRECT_ERROR_NOTES" -->
-
-  <!--#else -->
-
-    The server encountered an internal error and was 
-    unable to complete your request. The server is either
-    overloaded or there was an error in a CGI script.
-
-  <!--#endif -->
-
-<!--#include virtual="include/bottom.html" -->
-----------en--
-
-Content-language: es
-Content-type: text/html
-Body:----------es--
-<!--#set var="TITLE" value="Server error!" -->
-<!--#include virtual="include/top.html" -->
-
-  <!--#if expr="$REDIRECT_ERROR_NOTES" -->
-
-	El servidor encontro un error interno y fue
-	imposible completar su solicitud. 
-
-    <!--#include virtual="include/spacer.html" -->
-
-        Mensaje de error:
-    <BR><!--#echo var="REDIRECT_ERROR_NOTES" -->
-
-  <!--#else -->
-
-	El servidor encontro un error interno y fue
-	imposible completar su solicitud. 
-	Existe tambien la posibilidad de que el servidor 
-	este sobrecargado o de alg&uacute;n error en un 
-	programa de CGI.
-
-  <!--#endif -->
-
-<!--#include virtual="include/bottom.html" -->
-----------es--
-
-Content-language: fr
-Content-type: text/html
-Body:----------fr--
-<!--#set var="TITLE" value="Erreur du serveur!" -->
-<!--#include virtual="include/top.html" -->
-
-  <!--#if expr="$REDIRECT_ERROR_NOTES" -->
-
-    Le serveur a &egrave;t&eacute; victime d'une erreur interne et n'a pas
-    &eacute;t&eacute; capable de faire aboutir votre requ&ecirc;te.
-
-    <!--#include virtual="include/spacer.html" -->
-
-        Message d'erreur:
-    <BR><!--#echo var="REDIRECT_ERROR_NOTES" -->
-
-  <!--#else -->
-
-    Le serveur a &egrave;t&eacute; victime d'une erreur interne et n'a pas
-    &eacute;t&eacute; capable de faire aboutir votre requ&ecirc;te.
-    Soit le server est surcharg&eacute; soit il s'agit d'une erreur dans
-    le script CGI.
-
-  <!--#endif -->
-
-<!--#include virtual="include/bottom.html" -->   
-----------fr--
diff --git a/docs/error/HTTP_LENGTH_REQUIRED.html.var b/docs/error/HTTP_LENGTH_REQUIRED.html.var
deleted file mode 100644
index bb7789f..0000000
--- a/docs/error/HTTP_LENGTH_REQUIRED.html.var
+++ /dev/null
@@ -1,37 +0,0 @@
-Content-language: de
-Content-type: text/html
-Body:----------de--
-<!--#set var="TITLE" value="Content-Length-Angabe fehlerhaft!" -->
-<!--#include virtual="include/top.html" -->
-
-    Die Anfrage kann nicht beantwortet werden.
-    Bei Verwendung der <!--#echo encoding="none" var="REDIRECT_REQUEST_METHOD"-->-Methode
-    muß ein korrekter <code>Content-Length</code>-Header
-    angegeben werden. 
-
-<!--#include virtual="include/bottom.html" -->
-----------de--
-
-Content-language: en
-Content-type: text/html
-Body:----------en--
-<!--#set var="TITLE" value="Bad Content-Length!" -->
-<!--#include virtual="include/top.html" -->
-
-    A request with the <!--#echo encoding="none" var="REDIRECT_REQUEST_METHOD"-->
-    method requires a valid <code>Content-Length</code> header.
-
-<!--#include virtual="include/bottom.html" -->
-----------en--
-
-Content-language: fr
-Content-type: text/html
-Body:----------fr--
-<!--#set var="TITLE" value="Longueur du contenu ill&eacute;gal!" -->
-<!--#include virtual="include/top.html" -->
-
-    Une requ&ecirc;te utilisant la m&eacute;thode <!--#echo encoding="none" var="REDIRECT_REQUEST_METHOD"-->
-    n&eacute;cessite un header valable <code>Content-Length</code> (indiquant la longueur).
-
-<!--#include virtual="include/bottom.html" -->
-----------fr--
diff --git a/docs/error/HTTP_METHOD_NOT_ALLOWED.html.var b/docs/error/HTTP_METHOD_NOT_ALLOWED.html.var
deleted file mode 100644
index 69d5fef..0000000
--- a/docs/error/HTTP_METHOD_NOT_ALLOWED.html.var
+++ /dev/null
@@ -1,48 +0,0 @@
-Content-language: de
-Content-type: text/html
-Body:----------de--
-<!--#set var="TITLE" value="Methode nicht erlaubt!" -->
-<!--#include virtual="include/top.html" -->
-
-    Die <!--#echo encoding="none" var="REDIRECT_REQUEST_METHOD"-->-Methode
-    ist für den angeforderten URL nicht erlaubt.
-
-<!--#include virtual="include/bottom.html" -->
-----------de--
-
-Content-language: en
-Content-type: text/html
-Body:----------en--
-<!--#set var="TITLE" value="Method not allowed!" -->
-<!--#include virtual="include/top.html" -->
-
-    The <!--#echo encoding="none" var="REDIRECT_REQUEST_METHOD"-->
-    method is not allowed for the requested URL.
-    
-<!--#include virtual="include/bottom.html" -->
-----------en--
-
-Content-language: es
-Content-type: text/html
-Body:----------es--
-<!--#set var="TITLE" value="Method not allowed!" -->
-<!--#include virtual="include/top.html" -->
-
-	El <!--#echo encoding="none" var="REDIRECT_REQUEST_METHOD"-->
-	m&eacute;todo utilizado por su solicitud no esta 
-	permitido por el URL.
-    
-<!--#include virtual="include/bottom.html" -->
-----------es--
-
-Content-language: fr
-Content-type: text/html
-Body:----------fr--
-<!--#set var="TITLE" value="M&eacute;thode interdite!" -->
-<!--#include virtual="include/top.html" -->
-
-    La m&eacute;thode <!--#echo encoding="none" var="REDIRECT_REQUEST_METHOD"-->
-    n'est pas utilisable pour l'URL requise.
-
-<!--#include virtual="include/bottom.html" -->
-----------fr--
diff --git a/docs/error/HTTP_NOT_ACCEPTABLE.html.var b/docs/error/HTTP_NOT_ACCEPTABLE.html.var
deleted file mode 100644
index fe4236f..0000000
--- a/docs/error/HTTP_NOT_ACCEPTABLE.html.var
+++ /dev/null
@@ -1,49 +0,0 @@
-Content-language: de
-Content-type: text/html
-Body:----------de--
-<!--#set var="TITLE" value="Kein passendes Objekt gefunden!" -->
-<!--#include virtual="include/top.html" -->
-
-    Unter dem angeforderten URL konnte kein geeignetes Objekt
-    auf dem Server gefunden werden, das dem vom Browser
-    geforderten Format entsprechen würde.  
-
-<!--#include virtual="include/bottom.html" -->
-----------de--
-
-Content-language: en
-Content-type: text/html
-Body:----------en--
-<!--#set var="TITLE" value="No acceptable object found!" -->
-<!--#include virtual="include/top.html" -->
-
-    An appropriate representation of the requested resource
-    could not be found on this server.
-
-<!--#include virtual="include/bottom.html" -->
-----------en--
-
-Content-language: es
-Content-type: text/html
-Body:----------es--
-<!--#set var="TITLE" value="No acceptable object found!" -->
-<!--#include virtual="include/top.html" -->
-
-	Una representaci&oacute;n apropiada de los recursos 
-	solicitados no ha podido ser localizada en 
-	este servidor.
-
-<!--#include virtual="include/bottom.html" -->
-----------es--
-
-Content-language: fr
-Content-type: text/html
-Body:----------fr--
-<!--#set var="TITLE" value="L'objet trouv&eacute; n'est pas acceptable!" -->
-<!--#include virtual="include/top.html" -->
-
-    Une repr&eacute;sentation appropri&eacute;e de la ressource requise
-    n'a pu &ecirc;tre trouv&eacute;e sur ce serveur.
-
-<!--#include virtual="include/bottom.html" -->  
-----------fr--
diff --git a/docs/error/HTTP_NOT_FOUND.html.var b/docs/error/HTTP_NOT_FOUND.html.var
deleted file mode 100644
index ed0a5b3..0000000
--- a/docs/error/HTTP_NOT_FOUND.html.var
+++ /dev/null
@@ -1,108 +0,0 @@
-Content-language: de
-Content-type: text/html
-Body:----------de--
-<!--#set var="TITLE" value="Objekt nicht gefunden!" -->
-<!--#include virtual="include/top.html" -->
-
-    Der angeforderte URL konnte auf dem Server nicht gefunden werden.
-
-  <!--#if expr="$HTTP_REFERER" -->
-
-    Der Link auf der
-    <a href="<!--#echo encoding="url" var="HTTP_REFERER"-->">verweisenden
-    Seite</a> scheint falsch oder nicht mehr aktuell zu sein.
-    Bitte informieren Sie den Autor
-    <a href="<!--#echo encoding="url" var="HTTP_REFERER"-->">dieser Seite</a>
-    über den Fehler.
-
-  <!--#else -->
-
-    Sofern Sie den URL manuell eingegeben haben,
-    überprüfen Sie bitte die Schreibweise und versuchen es erneut.
-
-  <!--#endif -->
-
-<!--#include virtual="include/bottom.html" -->
-----------de--
-
-Content-language: en
-Content-type: text/html
-Body:----------en--
-<!--#set var="TITLE" value="Object not found!" -->
-<!--#include virtual="include/top.html" -->
-
-    The requested URL was not found on this server.
-
-  <!--#if expr="$HTTP_REFERER" -->
-
-    The link on the
-    <a href="<!--#echo encoding="url" var="HTTP_REFERER"-->">referring
-    page</a> seems to be wrong or outdated. Please inform the author of
-    <a href="<!--#echo encoding="url" var="HTTP_REFERER"-->">that page</a>
-    about the error.
-
-  <!--#else -->
-
-    If you entered the URL manually please check your
-    spelling and try again.
-
-  <!--#endif -->
-
-<!--#include virtual="include/bottom.html" -->
-----------en--
-
-Content-language: es
-Content-type: text/html
-Body:----------es--
-<!--#set var="TITLE" value="Object not found!" -->
-<!--#include virtual="include/top.html" -->
-
-    El URL requerido no ha sido localizado en
-    este servidor.
-
-  <!--#if expr="$HTTP_REFERER" -->
-
-    El URL en la
-    <a href="<!--#echo encoding="url" var="HTTP_REFERER"-->">p&aacute;gina
-    referida</a> parece tener algun error o estar fuera de tiempo. Porfavor
-    comunique al autor de
-    <a href="<!--#echo encoding="url" var="HTTP_REFERER"-->">la
-    p&aacute;gina</a> acerca del error.
-
-  <!--#else -->
-
-    Si usted provisiono el URL de manera manual le solicitamos
-    que porfavor revise los datos e intente de nuevo.
-
-  <!--#endif -->
-
-<!--#include virtual="include/bottom.html" -->
-----------es--
-
-Content-language: fr
-Content-type: text/html
-Body:----------fr--
-<!--#set var="TITLE" value="Objet non trouv&eacute;!" -->
-<!--#include virtual="include/top.html" -->
-
-    L'URL requise n'a pu etre trouv&eacute;e sur ce serveur.
-
-  <!--#if expr="$HTTP_REFERER" -->
-
-    La r&eacute;f&eacute;rence sur
-    <a href="<!--#echo encoding="url" var="HTTP_REFERER"-->">la page
-    cit&eacute;e</a>
-    semble &ecirc;tre erron&eacute;e ou perim&eacute;e. Nous vous prions
-    d'informer l'auteur de
-    <a href="<!--#echo encoding="url" var="HTTP_REFERER"-->">cette page</a>
-    de cette erreur.
-
-  <!--#else -->
-
-    Si vous avez tap&eacute; l'URL &agrave; la main, veuillez v&eacute;rifier
-    l'orthographe et r&eacute;essayer.
-
-  <!--#endif -->
-
-<!--#include virtual="include/bottom.html" -->
-----------fr--
diff --git a/docs/error/HTTP_NOT_IMPLEMENTED.html.var b/docs/error/HTTP_NOT_IMPLEMENTED.html.var
deleted file mode 100644
index a3023ba..0000000
--- a/docs/error/HTTP_NOT_IMPLEMENTED.html.var
+++ /dev/null
@@ -1,45 +0,0 @@
-Content-language: de
-Content-type: text/html
-Body:----------de--
-<!--#set var="TITLE" value="Anfrage nicht ausführbar!" -->
-<!--#include virtual="include/top.html" -->
-
-    Die vom Browser angeforderte Aktion wird vom Server
-    nicht unterstützt.
-
-<!--#include virtual="include/bottom.html" -->
-----------de--
-
-Content-language: en
-Content-type: text/html
-Body:----------en--
-<!--#set var="TITLE" value="Cannot process request!" -->
-<!--#include virtual="include/top.html" -->
-
-   The server does not support the action requested by the browser.
-   
-<!--#include virtual="include/bottom.html" -->
-----------en--
-
-Content-language: es
-Content-type: text/html
-Body:----------es--
-<!--#set var="TITLE" value="Cannot proceed request!" -->
-<!--#include virtual="include/top.html" -->
-
-	El buscador esta solicitando una acci&oacute;n 
-	que no puede ser procesada.
-    
-<!--#include virtual="include/bottom.html" -->
-----------es--
-
-Content-language: fr
-Content-type: text/html
-Body:----------fr--
-<!--#set var="TITLE" value="La requ&ecirc;te ne peut &ecirc;tre effectu&eacute;e!" -->
-<!--#include virtual="include/top.html" -->
-
-Le serveur n'est pas en mesure d'effectuer l'action requise par le navigateur. 
-
-<!--#include virtual="include/bottom.html" -->
-----------fr--
diff --git a/docs/error/HTTP_PRECONDITION_FAILED.html.var b/docs/error/HTTP_PRECONDITION_FAILED.html.var
deleted file mode 100644
index 164bfce..0000000
--- a/docs/error/HTTP_PRECONDITION_FAILED.html.var
+++ /dev/null
@@ -1,44 +0,0 @@
-Content-language: de
-Content-type: text/html
-Body:----------de--
-<!--#set var="TITLE" value="Vorbedingung negativ!" -->
-<!--#include virtual="include/top.html" -->
-
-    Die Vorbedingung unter dem angeforderten URL wurde
-    negativ ausgewertet.
-    
-<!--#include virtual="include/bottom.html" -->
-----------de--
-
-Content-language: en
-Content-type: text/html
-Body:----------en--
-<!--#set var="TITLE" value="Precondition failed!" -->
-<!--#include virtual="include/top.html" -->
-
-  The precondition on the request for the URL failed positive evaluation.
-  
-<!--#include virtual="include/bottom.html" --> 
-----------en--
-
-Content-language: es
-Content-type: text/html
-Body:----------es--
-<!--#set var="TITLE" value="Precondition failed!" -->
-<!--#include virtual="include/top.html" -->
-
-	La precondicion para que exista una 
-	conecci&oacute;n al URL solicitado es falsa.
-
-<!--#include virtual="include/bottom.html" -->
-----------es--
-
-Content-language: fr
-Content-type: text/html
-Body:----------fr--
-<!--#set var="TITLE" value="Pr&eacute;condition n&eacute;gative!" -->
-<!--#include virtual="include/top.html" -->
-
-La pr&eacute;condition pour l'URL requise a &eacute;t&eacute; &eacute;valu&eacute;e n&eacute;gativement.
-
-<!--#include virtual="include/bottom.html" -->----------fr--
diff --git a/docs/error/HTTP_REQUEST_ENTITY_TOO_LARGE.html.var b/docs/error/HTTP_REQUEST_ENTITY_TOO_LARGE.html.var
deleted file mode 100644
index 112c6c2..0000000
--- a/docs/error/HTTP_REQUEST_ENTITY_TOO_LARGE.html.var
+++ /dev/null
@@ -1,51 +0,0 @@
-Content-language: de
-Content-type: text/html
-Body:----------de--
-<!--#set var="TITLE" value="Übergebene Daten zu groß!" -->
-<!--#include virtual="include/top.html" -->
-
-    Die bei der Anfrage übermittelnden Daten sind für
-    die <!--#echo encoding="none" var="REDIRECT_REQUEST_METHOD"-->-Methode nicht erlaubt
-    oder die Datenmenge hat das Maximum überschritten.
-
-<!--#include virtual="include/bottom.html" -->
-----------de--
-
-Content-language: en
-Content-type: text/html
-Body:----------en--
-<!--#set var="TITLE" value="Request entity too large!" -->
-<!--#include virtual="include/top.html" -->
-
-  The <!--#echo encoding="none" var="REDIRECT_REQUEST_METHOD"--> method does not allow the data
-  transmitted, or the data volume exceeds the capacity limit.
-
-<!--#include virtual="include/bottom.html" -->
-----------en--
-
-Content-language: es
-Content-type: text/html
-Body:----------es--
-<!--#set var="TITLE" value="Request entity too large!" -->
-<!--#include virtual="include/top.html" -->
-
-	Los recursos establecidos no permiten peticiones con
-	el <!--#echo encoding="none" var="REDIRECT_REQUEST_METHOD"--> m&eacute;todo 
-	suministrado por su solicitud, o, la cantidad de datos 
-	provistos exceden los l&iacute;mites de capacidad.
-
-<!--#include virtual="include/bottom.html" -->
-----------es--
-
-Content-language: fr
-Content-type: text/html
-Body:----------fr--
-<!--#set var="TITLE" value="Volume de la demande trop grand!" -->
-<!--#include virtual="include/top.html" -->
-
-La m&eacute;thode <!--#echo encoding="none" var="REDIRECT_REQUEST_METHOD"--> 
-n'autorise pas le transfert de ces donn&eacute;es ou bien le volume
-des donn&eacute;es exc&egrave;de la limite de capacit&eacute;.
-
-<!--#include virtual="include/bottom.html" -->               
-----------fr--
diff --git a/docs/error/HTTP_REQUEST_TIME_OUT.html.var b/docs/error/HTTP_REQUEST_TIME_OUT.html.var
deleted file mode 100644
index 6295279..0000000
--- a/docs/error/HTTP_REQUEST_TIME_OUT.html.var
+++ /dev/null
@@ -1,48 +0,0 @@
-Content-language: de
-Content-type: text/html
-Body:----------de--
-<!--#set var="TITLE" value="Zeitlimit überschritten!" -->
-<!--#include virtual="include/top.html" -->
-
-    Der Server konnte nicht mehr länger auf die Beendigung
-    der Browseranfrage warten, die Netzwerkverbindung wurde
-    vom Server geschlossen.
-    
-<!--#include virtual="include/bottom.html" -->
-----------de--
-
-Content-language: en
-Content-type: text/html
-Body:----------en--
-<!--#set var="TITLE" value="Request time-out!" -->
-<!--#include virtual="include/top.html" -->
-
-   The server closed the network connection because the browser
-   didn't finish the request within the specified time.
-   
-<!--#include virtual="include/bottom.html" --> 
-----------en--
-
-Content-language: es
-Content-type: text/html
-Body:----------es--
-<!--#set var="TITLE" value="Request time-out!" -->
-<!--#include virtual="include/top.html" -->
-
-	El servidor ha cerrado la conecci&oacute;n de red 
-	debido a que el buscador no termino la solicitud
-	dentro del tiempo especificado.
-    
-<!--#include virtual="include/bottom.html" -->
-----------es--
-
-Content-language: fr
-Content-type: text/html
-Body:----------fr--
-<!--#set var="TITLE" value="Pr&eacute;condition n&eacute;gative!" -->
-<!--#include virtual="include/top.html" -->
-
-La pr&eacute;condition pour l'URL requise a &eacute;t&eacute; &eacute;valu&eacute;e n&eacute;gativement.
-
-<!--#include virtual="include/bottom.html" -->
-----------fr--
diff --git a/docs/error/HTTP_REQUEST_URI_TOO_LARGE.html.var b/docs/error/HTTP_REQUEST_URI_TOO_LARGE.html.var
deleted file mode 100644
index f34de55..0000000
--- a/docs/error/HTTP_REQUEST_URI_TOO_LARGE.html.var
+++ /dev/null
@@ -1,48 +0,0 @@
-Content-language: de
-Content-type: text/html
-Body:----------de--
-<!--#set var="TITLE" value="Übergebener URI zu groß!" -->
-<!--#include virtual="include/top.html" -->
-
-    Der bei der Anfrage übermittelnde URI überschreitet
-    die maximale Länge.
-    Die Anfrage kann nicht ausgeführt werden.
-    
-<!--#include virtual="include/bottom.html" -->
-----------de--
-
-Content-language: en
-Content-type: text/html
-Body:----------en--
-<!--#set var="TITLE" value="Submitted URI too large!" -->
-<!--#include virtual="include/top.html" -->
-
-   The length of the requested URL exceeds the capacity limit for this server.
-   The request cannot be processed.
-   
-<!--#include virtual="include/bottom.html" -->
-----------en--
-
-Content-language: es
-Content-type: text/html
-Body:----------es--
-<!--#set var="TITLE" value="Submitted URI too large!" -->
-<!--#include virtual="include/top.html" -->
-
-	Su solicitud no puede procesarse debido a que la
-	longitud del URL excede la capacidad limite del 
-	servidor. 
-    
-<!--#include virtual="include/bottom.html" -->
-----------es--
-
-Content-language: fr
-Content-type: text/html
-Body:----------fr--
-<!--#set var="TITLE" value="L'URI demandee est trop longue!" -->
-<!--#include virtual="include/top.html" -->
-
-La longueur de l'URL demand&eacute;e exc&egrave;de la limite de capacit&egrave; pour ce serveur. Nous ne pouvons donner suite &agrave; votre requ&ecirc;te.
-
-<!--#include virtual="include/bottom.html" -->
-----------fr--
diff --git a/docs/error/HTTP_SERVICE_UNAVAILABLE.html.var b/docs/error/HTTP_SERVICE_UNAVAILABLE.html.var
deleted file mode 100644
index d29f16f..0000000
--- a/docs/error/HTTP_SERVICE_UNAVAILABLE.html.var
+++ /dev/null
@@ -1,56 +0,0 @@
-Content-language: de
-Content-type: text/html
-Body:----------de--
-<!--#set var="TITLE" value="Zugriff nicht möglich!" -->
-<!--#include virtual="include/top.html" -->
-
-    Der Server ist derzeit nicht in der Lage die Anfrage
-    zu bearbeiten. Entweder ist der Server derzeit überlastet
-    oder wegen Wartungsarbeiten nicht verfügbar.
-    Bitte versuchen Sie es später wieder. 
-    
-<!--#include virtual="include/bottom.html" -->
-----------de--
-
-Content-language: en
-Content-type: text/html
-Body:----------en--
-<!--#set var="TITLE" value="Service unavailable!" -->
-<!--#include virtual="include/top.html" -->
-
-    The server is temporarily unable to service your
-    request due to maintenance downtime or capacity
-    problems. Please try again later. 
-
-<!--#include virtual="include/bottom.html" -->
-----------en--
-
-Content-language: es
-Content-type: text/html
-Body:----------es--
-<!--#set var="TITLE" value="Service unavailable!" -->
-<!--#include virtual="include/top.html" -->
-
-	El servidor no puede atender su solicitud por
-	el momento debido a problemas de mantenimiento
-	o de capacidad.
-
-	Le solicitamos que porfavor repita la operaci&oacute;n
-	mas tarde.
-	
-
-<!--#include virtual="include/bottom.html" -->
-----------es--
-
-Content-language: fr
-Content-type: text/html
-Body:----------fr--
-<!--#set var="TITLE" value="Service inaccessible!" -->
-<!--#include virtual="include/top.html" -->
-
-    En raison de travaux de maintenance ou de probl&egrave;mes de capacit&eacute;
-    le serveur n'est pas en mesure de r&eacute;pondre &agrave; votre requ&ecirc;te pour l'instant.
-    Veuillez r&eacute;essayer plus tard.
-
-<!--#include virtual="include/bottom.html" -->
-----------fr--
diff --git a/docs/error/HTTP_UNAUTHORIZED.html.var b/docs/error/HTTP_UNAUTHORIZED.html.var
deleted file mode 100644
index 4152b66..0000000
--- a/docs/error/HTTP_UNAUTHORIZED.html.var
+++ /dev/null
@@ -1,84 +0,0 @@
-Content-language: de
-Content-type: text/html
-Body:----------de--
-<!--#set var="TITLE" value="Authentikation fehlgeschlagen!" -->
-<!--#include virtual="include/top.html" -->
-
-    Der Server konnte nicht verifizieren, ob Sie authorisiert sind,
-    auf den URL "<!--#echo encoding="url" var="REDIRECT_URL"-->" zuzugreifen.
-    Entweder wurden falsche Referenzen (z.B. ein falsches Passwort)
-    angeben oder ihr Browser versteht nicht, wie die geforderten
-    Referenzen zu übermitteln sind.
-
-<!--#include virtual="include/spacer.html" -->
-
-    Sofern Sie für den Zugriff berechtigt sind, überprüfen Sie bitte
-    die eingegebene User-ID und das Passwort und versuchen es erneut.  
-
-<!--#include virtual="include/bottom.html" -->
-----------de--
-
-Content-language: en
-Content-type: text/html
-Body:----------en--
-<!--#set var="TITLE" value="Authentication required!" -->
-<!--#include virtual="include/top.html" -->
-
-    This server could not verify that you are authorized to access
-    the URL "<!--#echo encoding="url" var="REDIRECT_URL" -->".
-    You either supplied the wrong credentials (e.g., bad password), or your
-    browser doesn't understand how to supply the credentials required.
-
-  <!--#include virtual="include/spacer.html" -->
-
-    In case you are allowed to request the document, please
-    check your user-id and password and try again.
-
-<!--#include virtual="include/bottom.html" -->
-----------en--
-
-Content-language: es
-Content-type: text/html
-Body:----------es--
-<!--#set var="TITLE" value="Authentication required!" -->
-<!--#include virtual="include/top.html" -->
-
- El servidor no puede certificar que usted este autorizado
- para accesar el URL "<!--#echo encoding="url" var="REDIRECT_URL" -->".
- Usted pudo suministrar informaci&oacute;n incorrecta accidentalmente
- (ejem. una contrase&ntilde;a inv&aacute;lida) o, el buscador no sabe 
- como suministrar la informaci&oacute;n requerida.
-
-  <!--#include virtual="include/spacer.html" -->
-
- En caso de que a usted le este permitido el uso del
- documento requerido, le solicitamos de la manera mas atenta
- que porfavor vuelva a intentar la operaci&oacute;n suministrando
- nuevamente su numero de identificaci&oacute;n y su contrase&ntilde;a.
-
- Muchas Gracias.
-<!--#include virtual="include/bottom.html" -->
-----------es--
-
-Content-language: fr
-Content-type: text/html
-Body:----------fr--
-<!--#set var="TITLE" value="Autorisation requise!" -->
-<!--#include virtual="include/top.html" -->
-
-    Ce server n'a pas &eacute;t&eacute; en mesure de v&eacute;rifier que
-    vous &ecirc;tes autoris&eacute; &agrave; acc&eacute;der &agrave; cette
-    URL "<!--#echo encoding="url" var="REDIRECT_URL" -->".
-
-    Vous avez ou bien fourni des coordonn&eacute;es erron&eacute;es
-    (p.ex. mot de passe inexact) ou bien votre navigateur ne parvient
-    pas &agrave; fournir les donn&eacute;es exactes.
-
-  <!--#include virtual="include/spacer.html" -->
-
-    Si vous &ecirc;tez autoris&eacute; &agrave; requ&eacute;rir le document,
-    veuillez v&eacute;rifier votre nom d'utilisateur et votre mot de passe
-    et r&eacute;essayer.
-
-<!--#include virtual="include/bottom.html" -->
-----------fr--
diff --git a/docs/error/HTTP_UNSUPPORTED_MEDIA_TYPE.html.var b/docs/error/HTTP_UNSUPPORTED_MEDIA_TYPE.html.var
deleted file mode 100644
index 78c48bd..0000000
--- a/docs/error/HTTP_UNSUPPORTED_MEDIA_TYPE.html.var
+++ /dev/null
@@ -1,45 +0,0 @@
-Content-language: de
-Content-type: text/html
-Body:----------de--
-<!--#set var="TITLE" value="Nicht unterstütztes Format!" -->
-<!--#include virtual="include/top.html" -->
-
-    Das bei der Anfrage übermittelte Format (media type)
-    wird vom Server nicht unterstützt.
-    
-<!--#include virtual="include/bottom.html" -->
-----------de--
-
-Content-language: en
-Content-type: text/html
-Body:----------en--
-<!--#set var="TITLE" value="Unsupported media type!" -->
-<!--#include virtual="include/top.html" -->
-
-   The server does not support the media type transmitted in the request.
-
-<!--#include virtual="include/bottom.html" -->
-----------en--
-
-Content-language: es
-Content-type: text/html
-Body:----------es--
-<!--#set var="TITLE" value="Unsupported media type!" -->
-<!--#include virtual="include/top.html" -->
-
-	Los datos de su solicitud no se encuentran en
-	un formato aceptado por este recurso.
-
-<!--#include virtual="include/bottom.html" -->
-----------es--
-
-Content-language: fr
-Content-type: text/html
-Body:----------fr--
-<!--#set var="TITLE" value="type de m&eacute;dia invalide!" -->
-<!--#include virtual="include/top.html" -->
-
-Le serveur ne supporte pas le type de m&eacute;dia utilis&eacute; dans votre requ&ecirc;te. 
-
-<!--#include virtual="include/bottom.html" -->
-----------fr--
diff --git a/docs/error/HTTP_VARIANT_ALSO_VARIES.html.var b/docs/error/HTTP_VARIANT_ALSO_VARIES.html.var
deleted file mode 100644
index b558284..0000000
--- a/docs/error/HTTP_VARIANT_ALSO_VARIES.html.var
+++ /dev/null
@@ -1,51 +0,0 @@
-Content-language: de
-Content-type: text/html
-Body:----------de--
-<!--#set var="TITLE" value="Variante ebenfalls veränderlich!" -->
-<!--#include virtual="include/top.html" -->
-
-    Ein Zugriff auf das angeforderte Objekt bzw. einer
-    Variante dieses Objektes ist nicht möglich, da es ebenfalls
-    ein variables Objekt darstellt.
-
-<!--#include virtual="include/bottom.html" -->
-----------de--
-
-Content-language: en
-Content-type: text/html
-Body:----------en--
-<!--#set var="TITLE" value="Variant also varies!" -->
-<!--#include virtual="include/top.html" -->
-
-    A variant for the requested entity
-    is itself a negotiable resource.
-    Access not possible.
-
-<!--#include virtual="include/bottom.html" -->
-----------en--
-
-Content-language: es
-Content-type: text/html
-Body:----------es--
-<!--#set var="TITLE" value="Variant also varies!" -->
-<!--#include virtual="include/top.html" -->
-
-	No es posible tener acceso debido a que
-	una variante de la solicitud es por si 
-	misma un recurso negociable.
-
-<!--#include virtual="include/bottom.html" -->
-----------es--
-
-Content-language: fr
-Content-type: text/html
-Body:----------fr--
-<!--#set var="TITLE" value="La variante varie elle-m&ecirc;me!" -->
-<!--#include virtual="include/top.html" -->
-
-    Une variante pour l'entit&eacute; requise
-    est elle-m&ecirc;me une ressource n&eacute;gociable.
-    L'acc&egrave;s est impossible.
-
-<!--#include virtual="include/bottom.html" -->  
-----------fr--
diff --git a/docs/error/README b/docs/error/README
deleted file mode 100644
index ec81638..0000000
--- a/docs/error/README
+++ /dev/null
@@ -1,28 +0,0 @@
-
- Multi Language Custom Error Documents
- -------------------------------------
-
- The 'error' directory contains HTTP error messages in multiple languages.
- If the preferred language of a client is available it is selected
- automatically via the MultiViews feature. This feature is enabled
- by default via the Options, Language and ErrorDocument directives.
-
- You may configure the design and markup of the documents by modifying
- the HTML files in the directory 'error/include'.
-
-
- Supported Languages:
- 
-  +------------------+------------------------------------------+
-  | Language         | Contributed by                           |
-  +------------------+------------------------------------------+
-  | English (en)     | Lars Eilebrecht                          |
-  | German (de)      | Lars Eilebrecht                          |
-  | Spanish (es)     | Karla Quintero                           |
-  | French (fr)      | Cecile de Crecy                          |
-  +------------------+------------------------------------------+
-  (Please see http://httpd.apache.org/docs-project/ if you would
-   like to contribute the pages in an additional language.)
-
-
- Copyright (c) 2001-2002 The Apache Software Foundation. All rights reserved.
diff --git a/docs/error/contact.html.var b/docs/error/contact.html.var
deleted file mode 100644
index e7e1417..0000000
--- a/docs/error/contact.html.var
+++ /dev/null
@@ -1,30 +0,0 @@
-Content-language: de
-Content-type: text/html
-Body:----------de--
- Sofern Sie dies f&uuml;r eine Fehlfunktion des Servers halten,
- informieren Sie bitte den
- <A HREF="mailto:<!--#echo encoding="none" var="SERVER_ADMIN" -->">webmaster</A>
- hier&uuml;ber.
-----------de--
-
-Content-language: en
-Content-type: text/html
-Body:----------en--
- If you think this is a server error, please contact
- the <A HREF="mailto:<!--#echo encoding="none" var="SERVER_ADMIN" -->">webmaster</A>
-----------en--
-
-Content-language: es
-Content-type: text/html
-Body:----------es--
-Favor de contactar al 
-<A HREF="mailto:<!--#echo encoding="none" var="SERVER_ADMIN" -->">webmaster</A>
-en caso de que usted crea que existe un error en el servidor. 
-----------es--
-
-Content-language: fr
-Content-type: text/html
-Body:----------fr--
-Si vous pensez qu'il s'agit d'une erreur du serveur, veuillez contacter 
-le <A HREF="mailto:<!--#echo encoding="none" var="SERVER_ADMIN" -->">gestionnaire du site</A>   
-----------fr--
diff --git a/docs/error/include/bottom.html b/docs/error/include/bottom.html
deleted file mode 100644
index 357c2ff..0000000
--- a/docs/error/include/bottom.html
+++ /dev/null
@@ -1,18 +0,0 @@
-</DL><DL><DD>
-<!--#include virtual="../contact.html.var" -->
-</DL>
-
-<H2>Error <!--#echo encoding="none" var="REDIRECT_STATUS" --></H2>
-<DL>
-<DD>
-<ADDRESS>
-  <A HREF="/"><!--#echo encoding="none" var="SERVER_NAME" --></A>
-  <BR>
-  <!--#config timefmt="%c" -->
-  <small><!--#echo encoding="none" var="DATE_LOCAL" --></small>
-  <BR>
-  <small><!--#echo encoding="none" var="SERVER_SOFTWARE" --></small>
-</ADDRESS>
-</DL>
-</BODY>
-</HTML>
diff --git a/docs/error/include/spacer.html b/docs/error/include/spacer.html
deleted file mode 100644
index 70c5b25..0000000
--- a/docs/error/include/spacer.html
+++ /dev/null
@@ -1 +0,0 @@
-</DL><DL><DD>
diff --git a/docs/error/include/top.html b/docs/error/include/top.html
deleted file mode 100644
index 3f8399d..0000000
--- a/docs/error/include/top.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<HTML>
-<HEAD>
-<TITLE><!--#echo var="TITLE" --></TITLE>
-<LINK REV="made" HREF="mailto:<!--#echo encoding="none" var="SERVER_ADMIN" -->">
-</HEAD>
-
-<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000CC">
-<H1><!--#echo encoding="none" var="TITLE" --></H1>
-<DL>
-<DD>
diff --git a/docs/icons/README b/docs/icons/README
deleted file mode 100644
index 74b2970..0000000
--- a/docs/icons/README
+++ /dev/null
@@ -1,158 +0,0 @@
-Public Domain Icons
-
-     These icons were originally made for Mosaic for X and have been
-     included in the NCSA httpd and Apache server distributions in the
-     past. They are in the public domain and may be freely included in any
-     application. The originals were done by Kevin Hughes 
-     (kevinh@kevcom.com).
-
-     Many thanks to Andy Polyakov for tuning the icon colors and adding a
-     few new images. If you'd like to contribute additions or ideas to
-     this set, please let me know.
-
-     Almost all of these icons are 20x22 pixels in size.  There are
-     alternative icons in the "small" directory that are 16x16 in size,
-     provided by Mike Brown (mike@hyperreal.org).
-
-Suggested Uses
-
-The following are a few suggestions, to serve as a starting point for ideas.
-Please feel free to tweak and rename the icons as you like.
-
-     a.gif
-          This might be used to represent PostScript or text layout
-          languages.
-
-     alert.black.gif, alert.red.gif
-          These can be used to highlight any important items, such as a
-          README file in a directory.
-
-     back.gif, forward.gif
-          These can be used as links to go to previous and next areas.
-
-     ball.gray.gif, ball.red.gif
-          These might be used as bullets.
-
-     binary.gif
-          This can be used to represent binary files.
-
-     binhex.gif
-          This can represent BinHex-encoded data.
-
-     blank.gif
-          This can be used as a placeholder or a spacing element.
-
-     bomb.gif
-          This can be used to repreesnt core files.
-
-     box1.gif, box2.gif
-          These icons can be used to represent generic 3D applications and
-          related files.
-
-     broken.gif
-          This can represent corrupted data.
-
-     burst.gif
-          This can call attention to new and important items.
-
-     c.gif
-          This might represent C source code.
-
-     comp.blue.gif, comp.red.gif
-          These little computer icons can stand for telnet or FTP
-          sessions.
-
-     compressed.gif
-          This may represent compressed data.
-
-     continued.gif
-          This can be a link to a continued listing of a directory.
-
-     down.gif, up.gif, left.gif, right.gif
-          These can be used to scroll up, down, left and right in a
-          listing or may be used to denote items in an outline.
-
-     dvi.gif
-          This can represent DVI files.
-
-     f.gif
-          This might represent FORTRAN or Forth source code.
-
-     folder.gif, folder.open.gif, folder.sec.gif
-          The folder can represent directories. There is also a version
-          that can represent secure directories or directories that cannot
-          be viewed.
-
-     generic.gif, generic.sec.gif, generic.red.gif
-          These can represent generic files, secure files, and important
-          files, respectively.
-
-     hand.right.gif, hand.up.gif
-          These can point out important items (pun intended).
-
-     image1.gif, image2.gif, image3.gif
-          These can represent image formats of various types.
-
-     index.gif
-          This might represent a WAIS index or search facility.
-
-     layout.gif
-          This might represent files and formats that contain graphics as
-          well as text layout, such as HTML and PDF files.
-
-     link.gif
-          This might represent files that are symbolic links.
-
-     movie.gif
-          This can represent various movie formats.
-
-     p.gif
-          This may stand for Perl or Python source code.
-
-     pie0.gif ... pie8.gif
-          These icons can be used in applications where a list of
-          documents is returned from a search. The little pie chart images
-          can denote how relevant the documents may be to your search
-          query.
-
-     patch.gif
-          This may stand for patches and diff files.
-
-     portal.gif
-          This might be a link to an online service or a 3D world.
-
-     ps.gif, quill.gif
-          These may represent PostScript files.
-
-     screw1.gif, screw2.gif
-          These may represent CAD or engineering data and formats.
-
-     script.gif
-          This can represent any of various interpreted languages, such as
-          Perl, python, TCL, and shell scripts, as well as server
-          configuration files.
-
-     sound1.gif, sound2.gif
-          These can represent sound files.
-
-     sphere1.gif, sphere2.gif
-          These can represent 3D worlds or rendering applications and
-          formats.
-
-     tex.gif
-          This can represent TeX files.
-
-     text.gif
-          This can represent generic (plain) text files.
-
-     transfer.gif
-          This can represent FTP transfers or uploads/downloads.
-
-     unknown.gif
-          This may represent a file of an unknown type.
-
-     uuencoded.gif
-          This can stand for uuencoded data.
-
-     world1.gif, world2.gif
-          These can represent 3D worlds or other 3D formats.
diff --git a/docs/icons/a.gif b/docs/icons/a.gif
deleted file mode 100644
index bb23d97..0000000
--- a/docs/icons/a.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/a.png b/docs/icons/a.png
deleted file mode 100644
index c184025..0000000
--- a/docs/icons/a.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/alert.black.gif b/docs/icons/alert.black.gif
deleted file mode 100644
index eaecd21..0000000
--- a/docs/icons/alert.black.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/alert.black.png b/docs/icons/alert.black.png
deleted file mode 100644
index af6b124..0000000
--- a/docs/icons/alert.black.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/alert.red.gif b/docs/icons/alert.red.gif
deleted file mode 100644
index a423894..0000000
--- a/docs/icons/alert.red.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/alert.red.png b/docs/icons/alert.red.png
deleted file mode 100644
index b9222fd..0000000
--- a/docs/icons/alert.red.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/apache_pb.gif b/docs/icons/apache_pb.gif
deleted file mode 100644
index 3a1c139..0000000
--- a/docs/icons/apache_pb.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/apache_pb.png b/docs/icons/apache_pb.png
deleted file mode 100644
index eb99a8c..0000000
--- a/docs/icons/apache_pb.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/apache_pb2.gif b/docs/icons/apache_pb2.gif
deleted file mode 100644
index 4e67c71..0000000
--- a/docs/icons/apache_pb2.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/apache_pb2.png b/docs/icons/apache_pb2.png
deleted file mode 100644
index 28baa70..0000000
--- a/docs/icons/apache_pb2.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/apache_pb2_ani.gif b/docs/icons/apache_pb2_ani.gif
deleted file mode 100644
index fc41c03..0000000
--- a/docs/icons/apache_pb2_ani.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/back.gif b/docs/icons/back.gif
deleted file mode 100644
index a694ae1..0000000
--- a/docs/icons/back.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/back.png b/docs/icons/back.png
deleted file mode 100644
index 2d8d353..0000000
--- a/docs/icons/back.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/ball.gray.gif b/docs/icons/ball.gray.gif
deleted file mode 100644
index eb84268..0000000
--- a/docs/icons/ball.gray.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/ball.gray.png b/docs/icons/ball.gray.png
deleted file mode 100644
index 7b756f2..0000000
--- a/docs/icons/ball.gray.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/ball.red.gif b/docs/icons/ball.red.gif
deleted file mode 100644
index a8425cb..0000000
--- a/docs/icons/ball.red.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/ball.red.png b/docs/icons/ball.red.png
deleted file mode 100644
index 05f3e50..0000000
--- a/docs/icons/ball.red.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/binary.gif b/docs/icons/binary.gif
deleted file mode 100644
index 9a15cba..0000000
--- a/docs/icons/binary.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/binary.png b/docs/icons/binary.png
deleted file mode 100644
index c5119d1..0000000
--- a/docs/icons/binary.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/binhex.gif b/docs/icons/binhex.gif
deleted file mode 100644
index 62d0363..0000000
--- a/docs/icons/binhex.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/binhex.png b/docs/icons/binhex.png
deleted file mode 100644
index eff5322..0000000
--- a/docs/icons/binhex.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/blank.gif b/docs/icons/blank.gif
deleted file mode 100644
index 0ccf01e..0000000
--- a/docs/icons/blank.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/blank.png b/docs/icons/blank.png
deleted file mode 100644
index 3802c03..0000000
--- a/docs/icons/blank.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/bomb.gif b/docs/icons/bomb.gif
deleted file mode 100644
index 270fdb1..0000000
--- a/docs/icons/bomb.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/bomb.png b/docs/icons/bomb.png
deleted file mode 100644
index 5261a05..0000000
--- a/docs/icons/bomb.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/box1.gif b/docs/icons/box1.gif
deleted file mode 100644
index 65dcd00..0000000
--- a/docs/icons/box1.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/box1.png b/docs/icons/box1.png
deleted file mode 100644
index c55fccf..0000000
--- a/docs/icons/box1.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/box2.gif b/docs/icons/box2.gif
deleted file mode 100644
index c43bc4f..0000000
--- a/docs/icons/box2.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/box2.png b/docs/icons/box2.png
deleted file mode 100644
index 26d1432..0000000
--- a/docs/icons/box2.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/broken.gif b/docs/icons/broken.gif
deleted file mode 100644
index 9f8cbe9..0000000
--- a/docs/icons/broken.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/broken.png b/docs/icons/broken.png
deleted file mode 100644
index e8fd150..0000000
--- a/docs/icons/broken.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/burst.gif b/docs/icons/burst.gif
deleted file mode 100644
index fbdcf57..0000000
--- a/docs/icons/burst.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/burst.png b/docs/icons/burst.png
deleted file mode 100644
index 2329898..0000000
--- a/docs/icons/burst.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/c.gif b/docs/icons/c.gif
deleted file mode 100644
index 7555b6c..0000000
--- a/docs/icons/c.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/c.png b/docs/icons/c.png
deleted file mode 100644
index 41593b3..0000000
--- a/docs/icons/c.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/comp.blue.gif b/docs/icons/comp.blue.gif
deleted file mode 100644
index f8d76a8..0000000
--- a/docs/icons/comp.blue.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/comp.blue.png b/docs/icons/comp.blue.png
deleted file mode 100644
index 60ff156..0000000
--- a/docs/icons/comp.blue.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/comp.gray.gif b/docs/icons/comp.gray.gif
deleted file mode 100644
index 7664cd0..0000000
--- a/docs/icons/comp.gray.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/comp.gray.png b/docs/icons/comp.gray.png
deleted file mode 100644
index 01538f8..0000000
--- a/docs/icons/comp.gray.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/compressed.gif b/docs/icons/compressed.gif
deleted file mode 100644
index 39e7327..0000000
--- a/docs/icons/compressed.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/compressed.png b/docs/icons/compressed.png
deleted file mode 100644
index de7276d..0000000
--- a/docs/icons/compressed.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/continued.gif b/docs/icons/continued.gif
deleted file mode 100644
index b0ffb7e..0000000
--- a/docs/icons/continued.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/continued.png b/docs/icons/continued.png
deleted file mode 100644
index 8f656e2..0000000
--- a/docs/icons/continued.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/dir.gif b/docs/icons/dir.gif
deleted file mode 100644
index 4826460..0000000
--- a/docs/icons/dir.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/dir.png b/docs/icons/dir.png
deleted file mode 100644
index 6b97905..0000000
--- a/docs/icons/dir.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/down.gif b/docs/icons/down.gif
deleted file mode 100644
index a354c87..0000000
--- a/docs/icons/down.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/down.png b/docs/icons/down.png
deleted file mode 100644
index be3904b..0000000
--- a/docs/icons/down.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/dvi.gif b/docs/icons/dvi.gif
deleted file mode 100644
index 791be33..0000000
--- a/docs/icons/dvi.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/dvi.png b/docs/icons/dvi.png
deleted file mode 100644
index 19c417f..0000000
--- a/docs/icons/dvi.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/f.gif b/docs/icons/f.gif
deleted file mode 100644
index fbe353c..0000000
--- a/docs/icons/f.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/f.png b/docs/icons/f.png
deleted file mode 100644
index c946f5b..0000000
--- a/docs/icons/f.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/folder.gif b/docs/icons/folder.gif
deleted file mode 100644
index 4826460..0000000
--- a/docs/icons/folder.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/folder.open.gif b/docs/icons/folder.open.gif
deleted file mode 100644
index 30979cb..0000000
--- a/docs/icons/folder.open.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/folder.open.png b/docs/icons/folder.open.png
deleted file mode 100644
index dd2d7e0..0000000
--- a/docs/icons/folder.open.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/folder.png b/docs/icons/folder.png
deleted file mode 100644
index 6b97905..0000000
--- a/docs/icons/folder.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/folder.sec.gif b/docs/icons/folder.sec.gif
deleted file mode 100644
index 75332d9..0000000
--- a/docs/icons/folder.sec.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/folder.sec.png b/docs/icons/folder.sec.png
deleted file mode 100644
index 833f59a..0000000
--- a/docs/icons/folder.sec.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/forward.gif b/docs/icons/forward.gif
deleted file mode 100644
index b2959b4..0000000
--- a/docs/icons/forward.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/forward.png b/docs/icons/forward.png
deleted file mode 100644
index c5584a4..0000000
--- a/docs/icons/forward.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/generic.gif b/docs/icons/generic.gif
deleted file mode 100644
index de60b29..0000000
--- a/docs/icons/generic.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/generic.png b/docs/icons/generic.png
deleted file mode 100644
index 0227cab..0000000
--- a/docs/icons/generic.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/generic.red.gif b/docs/icons/generic.red.gif
deleted file mode 100644
index 9474398..0000000
--- a/docs/icons/generic.red.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/generic.red.png b/docs/icons/generic.red.png
deleted file mode 100644
index be63249..0000000
--- a/docs/icons/generic.red.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/generic.sec.gif b/docs/icons/generic.sec.gif
deleted file mode 100644
index 88d5240..0000000
--- a/docs/icons/generic.sec.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/generic.sec.png b/docs/icons/generic.sec.png
deleted file mode 100644
index 0bd3d96..0000000
--- a/docs/icons/generic.sec.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/hand.right.gif b/docs/icons/hand.right.gif
deleted file mode 100644
index 5cdbc72..0000000
--- a/docs/icons/hand.right.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/hand.right.png b/docs/icons/hand.right.png
deleted file mode 100644
index 93035c6..0000000
--- a/docs/icons/hand.right.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/hand.up.gif b/docs/icons/hand.up.gif
deleted file mode 100644
index 85a5d68..0000000
--- a/docs/icons/hand.up.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/hand.up.png b/docs/icons/hand.up.png
deleted file mode 100644
index 1405a6f..0000000
--- a/docs/icons/hand.up.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/icon.sheet.gif b/docs/icons/icon.sheet.gif
deleted file mode 100644
index ad1686e..0000000
--- a/docs/icons/icon.sheet.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/icon.sheet.png b/docs/icons/icon.sheet.png
deleted file mode 100644
index b875cb6..0000000
--- a/docs/icons/icon.sheet.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/image1.gif b/docs/icons/image1.gif
deleted file mode 100644
index 01e442b..0000000
--- a/docs/icons/image1.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/image1.png b/docs/icons/image1.png
deleted file mode 100644
index c1374fd..0000000
--- a/docs/icons/image1.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/image2.gif b/docs/icons/image2.gif
deleted file mode 100644
index 751faee..0000000
--- a/docs/icons/image2.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/image2.png b/docs/icons/image2.png
deleted file mode 100644
index 606d4fb..0000000
--- a/docs/icons/image2.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/image3.gif b/docs/icons/image3.gif
deleted file mode 100644
index 4f30484..0000000
--- a/docs/icons/image3.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/image3.png b/docs/icons/image3.png
deleted file mode 100644
index 701fb1e..0000000
--- a/docs/icons/image3.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/index.gif b/docs/icons/index.gif
deleted file mode 100644
index 162478f..0000000
--- a/docs/icons/index.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/index.png b/docs/icons/index.png
deleted file mode 100644
index 9a0de35..0000000
--- a/docs/icons/index.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/layout.gif b/docs/icons/layout.gif
deleted file mode 100644
index c96338a..0000000
--- a/docs/icons/layout.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/layout.png b/docs/icons/layout.png
deleted file mode 100644
index 0a97c1c..0000000
--- a/docs/icons/layout.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/left.gif b/docs/icons/left.gif
deleted file mode 100644
index 279e671..0000000
--- a/docs/icons/left.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/left.png b/docs/icons/left.png
deleted file mode 100644
index d6e2404..0000000
--- a/docs/icons/left.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/link.gif b/docs/icons/link.gif
deleted file mode 100644
index c5b6889..0000000
--- a/docs/icons/link.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/link.png b/docs/icons/link.png
deleted file mode 100644
index 4714d0e..0000000
--- a/docs/icons/link.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/movie.gif b/docs/icons/movie.gif
deleted file mode 100644
index 0035183..0000000
--- a/docs/icons/movie.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/movie.png b/docs/icons/movie.png
deleted file mode 100644
index 5615180..0000000
--- a/docs/icons/movie.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/p.gif b/docs/icons/p.gif
deleted file mode 100644
index 7b917b4..0000000
--- a/docs/icons/p.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/p.png b/docs/icons/p.png
deleted file mode 100644
index 3fbe0e8..0000000
--- a/docs/icons/p.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/patch.gif b/docs/icons/patch.gif
deleted file mode 100644
index 39bc90e..0000000
--- a/docs/icons/patch.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/patch.png b/docs/icons/patch.png
deleted file mode 100644
index 808ed78..0000000
--- a/docs/icons/patch.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/pdf.gif b/docs/icons/pdf.gif
deleted file mode 100644
index c88fd77..0000000
--- a/docs/icons/pdf.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/pdf.png b/docs/icons/pdf.png
deleted file mode 100644
index 516142b..0000000
--- a/docs/icons/pdf.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/pie0.gif b/docs/icons/pie0.gif
deleted file mode 100644
index 6f7a0ae..0000000
--- a/docs/icons/pie0.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/pie0.png b/docs/icons/pie0.png
deleted file mode 100644
index 12e0200..0000000
--- a/docs/icons/pie0.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/pie1.gif b/docs/icons/pie1.gif
deleted file mode 100644
index 03aa6be..0000000
--- a/docs/icons/pie1.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/pie1.png b/docs/icons/pie1.png
deleted file mode 100644
index c44c793..0000000
--- a/docs/icons/pie1.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/pie2.gif b/docs/icons/pie2.gif
deleted file mode 100644
index b04c5e0..0000000
--- a/docs/icons/pie2.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/pie2.png b/docs/icons/pie2.png
deleted file mode 100644
index e0b7167..0000000
--- a/docs/icons/pie2.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/pie3.gif b/docs/icons/pie3.gif
deleted file mode 100644
index 4db9d02..0000000
--- a/docs/icons/pie3.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/pie3.png b/docs/icons/pie3.png
deleted file mode 100644
index 820a3c3..0000000
--- a/docs/icons/pie3.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/pie4.gif b/docs/icons/pie4.gif
deleted file mode 100644
index 93471fd..0000000
--- a/docs/icons/pie4.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/pie4.png b/docs/icons/pie4.png
deleted file mode 100644
index 35490d8..0000000
--- a/docs/icons/pie4.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/pie5.gif b/docs/icons/pie5.gif
deleted file mode 100644
index 57aee93..0000000
--- a/docs/icons/pie5.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/pie5.png b/docs/icons/pie5.png
deleted file mode 100644
index 359b7d3..0000000
--- a/docs/icons/pie5.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/pie6.gif b/docs/icons/pie6.gif
deleted file mode 100644
index 0dc327b..0000000
--- a/docs/icons/pie6.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/pie6.png b/docs/icons/pie6.png
deleted file mode 100644
index 4b293ea..0000000
--- a/docs/icons/pie6.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/pie7.gif b/docs/icons/pie7.gif
deleted file mode 100644
index 8661337..0000000
--- a/docs/icons/pie7.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/pie7.png b/docs/icons/pie7.png
deleted file mode 100644
index 6bfa2d0..0000000
--- a/docs/icons/pie7.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/pie8.gif b/docs/icons/pie8.gif
deleted file mode 100644
index 59ddb34..0000000
--- a/docs/icons/pie8.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/pie8.png b/docs/icons/pie8.png
deleted file mode 100644
index 716cf28..0000000
--- a/docs/icons/pie8.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/portal.gif b/docs/icons/portal.gif
deleted file mode 100644
index 0e6e506..0000000
--- a/docs/icons/portal.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/portal.png b/docs/icons/portal.png
deleted file mode 100644
index 937c0f8..0000000
--- a/docs/icons/portal.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/ps.gif b/docs/icons/ps.gif
deleted file mode 100644
index 0f565bc..0000000
--- a/docs/icons/ps.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/ps.png b/docs/icons/ps.png
deleted file mode 100644
index ccccf73..0000000
--- a/docs/icons/ps.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/quill.gif b/docs/icons/quill.gif
deleted file mode 100644
index 818a5cd..0000000
--- a/docs/icons/quill.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/quill.png b/docs/icons/quill.png
deleted file mode 100644
index b697770..0000000
--- a/docs/icons/quill.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/right.gif b/docs/icons/right.gif
deleted file mode 100644
index b256e5f..0000000
--- a/docs/icons/right.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/right.png b/docs/icons/right.png
deleted file mode 100644
index 41f8529..0000000
--- a/docs/icons/right.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/screw1.gif b/docs/icons/screw1.gif
deleted file mode 100644
index af6ba2b..0000000
--- a/docs/icons/screw1.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/screw1.png b/docs/icons/screw1.png
deleted file mode 100644
index 11673ab..0000000
--- a/docs/icons/screw1.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/screw2.gif b/docs/icons/screw2.gif
deleted file mode 100644
index 06dccb3..0000000
--- a/docs/icons/screw2.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/screw2.png b/docs/icons/screw2.png
deleted file mode 100644
index 5d7d2cf..0000000
--- a/docs/icons/screw2.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/script.gif b/docs/icons/script.gif
deleted file mode 100644
index d8a853b..0000000
--- a/docs/icons/script.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/script.png b/docs/icons/script.png
deleted file mode 100644
index 2520570..0000000
--- a/docs/icons/script.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/README.txt b/docs/icons/small/README.txt
deleted file mode 100644
index deb9670..0000000
--- a/docs/icons/small/README.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-
-These icons are provided as an alternative to the standard Apache
-icon graphics.  All graphics in this directory, with the exception
-of rainbow.gif, are 16x16 pixels in size, rather than the 20x22
-dimension icons which are the normal defaults for Apache and are
-in the parent directory of this one.
diff --git a/docs/icons/small/back.gif b/docs/icons/small/back.gif
deleted file mode 100644
index e331454..0000000
--- a/docs/icons/small/back.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/back.png b/docs/icons/small/back.png
deleted file mode 100644
index 2257df2..0000000
--- a/docs/icons/small/back.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/binary.gif b/docs/icons/small/binary.gif
deleted file mode 100644
index 995f79b..0000000
--- a/docs/icons/small/binary.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/binary.png b/docs/icons/small/binary.png
deleted file mode 100644
index 2e2e1b0..0000000
--- a/docs/icons/small/binary.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/binhex.gif b/docs/icons/small/binhex.gif
deleted file mode 100644
index 3d54a54..0000000
--- a/docs/icons/small/binhex.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/binhex.png b/docs/icons/small/binhex.png
deleted file mode 100644
index 9deab41..0000000
--- a/docs/icons/small/binhex.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/blank.gif b/docs/icons/small/blank.gif
deleted file mode 100644
index 606787a..0000000
--- a/docs/icons/small/blank.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/blank.png b/docs/icons/small/blank.png
deleted file mode 100644
index 86f57a5..0000000
--- a/docs/icons/small/blank.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/broken.gif b/docs/icons/small/broken.gif
deleted file mode 100644
index 1bcc57f..0000000
--- a/docs/icons/small/broken.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/broken.png b/docs/icons/small/broken.png
deleted file mode 100644
index 79c998c..0000000
--- a/docs/icons/small/broken.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/burst.gif b/docs/icons/small/burst.gif
deleted file mode 100644
index d882ceb..0000000
--- a/docs/icons/small/burst.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/burst.png b/docs/icons/small/burst.png
deleted file mode 100644
index 2b21436..0000000
--- a/docs/icons/small/burst.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/comp1.gif b/docs/icons/small/comp1.gif
deleted file mode 100644
index 712f36a..0000000
--- a/docs/icons/small/comp1.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/comp1.png b/docs/icons/small/comp1.png
deleted file mode 100644
index 6d8c345..0000000
--- a/docs/icons/small/comp1.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/comp2.gif b/docs/icons/small/comp2.gif
deleted file mode 100644
index 7759eb1..0000000
--- a/docs/icons/small/comp2.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/comp2.png b/docs/icons/small/comp2.png
deleted file mode 100644
index 57f7ad1..0000000
--- a/docs/icons/small/comp2.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/compressed.gif b/docs/icons/small/compressed.gif
deleted file mode 100644
index d3b1560..0000000
--- a/docs/icons/small/compressed.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/compressed.png b/docs/icons/small/compressed.png
deleted file mode 100644
index 43acd8b..0000000
--- a/docs/icons/small/compressed.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/continued.gif b/docs/icons/small/continued.gif
deleted file mode 100644
index e1c9f2c..0000000
--- a/docs/icons/small/continued.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/continued.png b/docs/icons/small/continued.png
deleted file mode 100644
index db17c42..0000000
--- a/docs/icons/small/continued.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/dir.gif b/docs/icons/small/dir.gif
deleted file mode 100644
index 7b37b09..0000000
--- a/docs/icons/small/dir.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/dir.png b/docs/icons/small/dir.png
deleted file mode 100644
index 9bd6256..0000000
--- a/docs/icons/small/dir.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/dir2.gif b/docs/icons/small/dir2.gif
deleted file mode 100644
index 425d6e4..0000000
--- a/docs/icons/small/dir2.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/dir2.png b/docs/icons/small/dir2.png
deleted file mode 100644
index 836daf4..0000000
--- a/docs/icons/small/dir2.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/doc.gif b/docs/icons/small/doc.gif
deleted file mode 100644
index 0fcf18d..0000000
--- a/docs/icons/small/doc.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/doc.png b/docs/icons/small/doc.png
deleted file mode 100644
index c560df2..0000000
--- a/docs/icons/small/doc.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/forward.gif b/docs/icons/small/forward.gif
deleted file mode 100644
index 2997466..0000000
--- a/docs/icons/small/forward.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/forward.png b/docs/icons/small/forward.png
deleted file mode 100644
index 4ddbc61..0000000
--- a/docs/icons/small/forward.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/generic.gif b/docs/icons/small/generic.gif
deleted file mode 100644
index f8da6ff..0000000
--- a/docs/icons/small/generic.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/generic.png b/docs/icons/small/generic.png
deleted file mode 100644
index 16374a1..0000000
--- a/docs/icons/small/generic.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/generic2.gif b/docs/icons/small/generic2.gif
deleted file mode 100644
index 992f133..0000000
--- a/docs/icons/small/generic2.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/generic2.png b/docs/icons/small/generic2.png
deleted file mode 100644
index 40d60c1..0000000
--- a/docs/icons/small/generic2.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/generic3.gif b/docs/icons/small/generic3.gif
deleted file mode 100644
index 85aa275..0000000
--- a/docs/icons/small/generic3.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/generic3.png b/docs/icons/small/generic3.png
deleted file mode 100644
index aa38963..0000000
--- a/docs/icons/small/generic3.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/image.gif b/docs/icons/small/image.gif
deleted file mode 100644
index dc3d95c..0000000
--- a/docs/icons/small/image.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/image.png b/docs/icons/small/image.png
deleted file mode 100644
index d92f0a5..0000000
--- a/docs/icons/small/image.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/image2.gif b/docs/icons/small/image2.gif
deleted file mode 100644
index a5c40f1..0000000
--- a/docs/icons/small/image2.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/image2.png b/docs/icons/small/image2.png
deleted file mode 100644
index 4049bda..0000000
--- a/docs/icons/small/image2.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/index.gif b/docs/icons/small/index.gif
deleted file mode 100644
index 526df6b..0000000
--- a/docs/icons/small/index.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/index.png b/docs/icons/small/index.png
deleted file mode 100644
index 080453e..0000000
--- a/docs/icons/small/index.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/key.gif b/docs/icons/small/key.gif
deleted file mode 100644
index 8dfd6c0..0000000
--- a/docs/icons/small/key.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/key.png b/docs/icons/small/key.png
deleted file mode 100644
index 1a45f67..0000000
--- a/docs/icons/small/key.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/movie.gif b/docs/icons/small/movie.gif
deleted file mode 100644
index 7b4a42e..0000000
--- a/docs/icons/small/movie.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/movie.png b/docs/icons/small/movie.png
deleted file mode 100644
index 7c12604..0000000
--- a/docs/icons/small/movie.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/patch.gif b/docs/icons/small/patch.gif
deleted file mode 100644
index 100484e..0000000
--- a/docs/icons/small/patch.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/patch.png b/docs/icons/small/patch.png
deleted file mode 100644
index c39f144..0000000
--- a/docs/icons/small/patch.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/ps.gif b/docs/icons/small/ps.gif
deleted file mode 100644
index fa4bcfc..0000000
--- a/docs/icons/small/ps.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/ps.png b/docs/icons/small/ps.png
deleted file mode 100644
index 5c60423..0000000
--- a/docs/icons/small/ps.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/rainbow.gif b/docs/icons/small/rainbow.gif
deleted file mode 100644
index 8216b89..0000000
--- a/docs/icons/small/rainbow.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/rainbow.png b/docs/icons/small/rainbow.png
deleted file mode 100644
index 175053c..0000000
--- a/docs/icons/small/rainbow.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/sound.gif b/docs/icons/small/sound.gif
deleted file mode 100644
index a7a89ff..0000000
--- a/docs/icons/small/sound.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/sound.png b/docs/icons/small/sound.png
deleted file mode 100644
index 6e3e95d..0000000
--- a/docs/icons/small/sound.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/sound2.gif b/docs/icons/small/sound2.gif
deleted file mode 100644
index 07706e0..0000000
--- a/docs/icons/small/sound2.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/sound2.png b/docs/icons/small/sound2.png
deleted file mode 100644
index bc46eb4..0000000
--- a/docs/icons/small/sound2.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/tar.gif b/docs/icons/small/tar.gif
deleted file mode 100644
index 59c3ffb..0000000
--- a/docs/icons/small/tar.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/tar.png b/docs/icons/small/tar.png
deleted file mode 100644
index 12f0347..0000000
--- a/docs/icons/small/tar.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/text.gif b/docs/icons/small/text.gif
deleted file mode 100644
index 66ceefb..0000000
--- a/docs/icons/small/text.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/text.png b/docs/icons/small/text.png
deleted file mode 100644
index b4e30f4..0000000
--- a/docs/icons/small/text.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/transfer.gif b/docs/icons/small/transfer.gif
deleted file mode 100644
index d460d3f..0000000
--- a/docs/icons/small/transfer.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/transfer.png b/docs/icons/small/transfer.png
deleted file mode 100644
index 3240481..0000000
--- a/docs/icons/small/transfer.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/unknown.gif b/docs/icons/small/unknown.gif
deleted file mode 100644
index 7bf0bbc..0000000
--- a/docs/icons/small/unknown.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/unknown.png b/docs/icons/small/unknown.png
deleted file mode 100644
index cad7e7a..0000000
--- a/docs/icons/small/unknown.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/uu.gif b/docs/icons/small/uu.gif
deleted file mode 100644
index 8c793f8..0000000
--- a/docs/icons/small/uu.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/small/uu.png b/docs/icons/small/uu.png
deleted file mode 100644
index ef87c82..0000000
--- a/docs/icons/small/uu.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/sound1.gif b/docs/icons/sound1.gif
deleted file mode 100644
index 8efb49f..0000000
--- a/docs/icons/sound1.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/sound1.png b/docs/icons/sound1.png
deleted file mode 100644
index 7a766be..0000000
--- a/docs/icons/sound1.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/sound2.gif b/docs/icons/sound2.gif
deleted file mode 100644
index 48e6a7f..0000000
--- a/docs/icons/sound2.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/sound2.png b/docs/icons/sound2.png
deleted file mode 100644
index 4511290..0000000
--- a/docs/icons/sound2.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/sphere1.gif b/docs/icons/sphere1.gif
deleted file mode 100644
index 7067070..0000000
--- a/docs/icons/sphere1.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/sphere1.png b/docs/icons/sphere1.png
deleted file mode 100644
index 2198ae8..0000000
--- a/docs/icons/sphere1.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/sphere2.gif b/docs/icons/sphere2.gif
deleted file mode 100644
index a9e462a..0000000
--- a/docs/icons/sphere2.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/sphere2.png b/docs/icons/sphere2.png
deleted file mode 100644
index 257632b..0000000
--- a/docs/icons/sphere2.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/tar.gif b/docs/icons/tar.gif
deleted file mode 100644
index 4032c1b..0000000
--- a/docs/icons/tar.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/tar.png b/docs/icons/tar.png
deleted file mode 100644
index 6c40521..0000000
--- a/docs/icons/tar.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/tex.gif b/docs/icons/tex.gif
deleted file mode 100644
index 45e4323..0000000
--- a/docs/icons/tex.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/tex.png b/docs/icons/tex.png
deleted file mode 100644
index 906622d..0000000
--- a/docs/icons/tex.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/text.gif b/docs/icons/text.gif
deleted file mode 100644
index 4c62390..0000000
--- a/docs/icons/text.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/text.png b/docs/icons/text.png
deleted file mode 100644
index 34d0edf..0000000
--- a/docs/icons/text.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/transfer.gif b/docs/icons/transfer.gif
deleted file mode 100644
index 33697db..0000000
--- a/docs/icons/transfer.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/transfer.png b/docs/icons/transfer.png
deleted file mode 100644
index efaf17b..0000000
--- a/docs/icons/transfer.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/unknown.gif b/docs/icons/unknown.gif
deleted file mode 100644
index 32b1ea2..0000000
--- a/docs/icons/unknown.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/unknown.png b/docs/icons/unknown.png
deleted file mode 100644
index 7c241c3..0000000
--- a/docs/icons/unknown.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/up.gif b/docs/icons/up.gif
deleted file mode 100644
index 6d6d6d1..0000000
--- a/docs/icons/up.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/up.png b/docs/icons/up.png
deleted file mode 100644
index a69ea00..0000000
--- a/docs/icons/up.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/uu.gif b/docs/icons/uu.gif
deleted file mode 100644
index 4387d52..0000000
--- a/docs/icons/uu.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/uu.png b/docs/icons/uu.png
deleted file mode 100644
index b1d1a85..0000000
--- a/docs/icons/uu.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/uuencoded.gif b/docs/icons/uuencoded.gif
deleted file mode 100644
index 4387d52..0000000
--- a/docs/icons/uuencoded.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/uuencoded.png b/docs/icons/uuencoded.png
deleted file mode 100644
index b1d1a85..0000000
--- a/docs/icons/uuencoded.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/world1.gif b/docs/icons/world1.gif
deleted file mode 100644
index 05b4ec2..0000000
--- a/docs/icons/world1.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/world1.png b/docs/icons/world1.png
deleted file mode 100644
index 3a65c00..0000000
--- a/docs/icons/world1.png
+++ /dev/null
Binary files differ
diff --git a/docs/icons/world2.gif b/docs/icons/world2.gif
deleted file mode 100644
index e3203f7..0000000
--- a/docs/icons/world2.gif
+++ /dev/null
Binary files differ
diff --git a/docs/icons/world2.png b/docs/icons/world2.png
deleted file mode 100644
index 9f8a3ea..0000000
--- a/docs/icons/world2.png
+++ /dev/null
Binary files differ
diff --git a/docs/man/ab.8 b/docs/man/ab.8
deleted file mode 100644
index e086535..0000000
--- a/docs/man/ab.8
+++ /dev/null
@@ -1,289 +0,0 @@
-.TH ab 1 "March 2000"
-.\" The Apache Software License, Version 1.1
-.\"
-.\" Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
-.\" reserved.
-.\"
-.\" Redistribution and use in source and binary forms, with or without
-.\" modification, are permitted provided that the following conditions
-.\" are met:
-.\"
-.\" 1. Redistributions of source code must retain the above copyright
-.\"    notice, this list of conditions and the following disclaimer.
-.\"
-.\" 2. Redistributions in binary form must reproduce the above copyright
-.\"    notice, this list of conditions and the following disclaimer in
-.\"    the documentation and/or other materials provided with the
-.\"    distribution.
-.\"
-.\" 3. The end-user documentation included with the redistribution,
-.\"    if any, must include the following acknowledgment:
-.\"       "This product includes software developed by the
-.\"        Apache Software Foundation (http://www.apache.org/)."
-.\"    Alternately, this acknowledgment may appear in the software itself,
-.\"    if and wherever such third-party acknowledgments normally appear.
-.\"
-.\" 4. The names "Apache" and "Apache Software Foundation" must
-.\"    not be used to endorse or promote products derived from this
-.\"    software without prior written permission. For written
-.\"    permission, please contact apache@apache.org.
-.\"
-.\" 5. Products derived from this software may not be called "Apache",
-.\"    nor may "Apache" appear in their name, without prior written
-.\"    permission of the Apache Software Foundation.
-.\"
-.\" THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
-.\" WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-.\" DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
-.\" ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-.\" SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-.\" LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
-.\" USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-.\" ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-.\" OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
-.\" OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-.\" SUCH DAMAGE.
-.\"
-.\" This software consists of voluntary contributions made by many
-.\" individuals on behalf of the Apache Software Foundation.  For more
-.\" information on the Apache Software Foundation, please see
-.\" <http://www.apache.org/>.
-.\"
-.SH NAME
-ab \- Apache HTTP server benchmarking tool
-.SH SYNOPSIS
-.B ab 
-[
-.B \-k
-] [
-.B \-e
-] [
-.B \-q
-] [
-.B \-S
-] [
-.B \-i
-] [
-+ .B \-s
-] [
-.BI \-n " requests"
-] [
-.BI \-t " timelimit"
-] [
-.BI \-c " concurrency"
-] [
-.BI \-p " POST file"
-] [
-.BI \-A " Authentication username:password"
-] [
-.BI \-P " Proxy Authentication username:password"
-] [
-.BI \-H " Custom header"
-] [
-.BI \-C " Cookie name=value"
-] [
-.BI \-T " content-type"
-] [
-.BI \-X " proxy [ :port ]"
-] [
-.BI \-v " verbosity"
-]
-] [
-.BI \-w " output HTML"
-]
-] [
-.BI \-g " output GNUPLOT"
-]
-] [
-.BI \-e " output CSV"
-]
-] [
-.BI \-x " <table> attributes"
-]
-] [
-.BI \-y " <tr> attributes"
-]
-] [
-.BI \-z " <td> attributes"
-]
-.I [http[s]://]hostname[:port]/path 
-
-.B ab
-[
-.B \-V
-] [
-.B \-h 
-]
-.PP
-.SH DESCRIPTION
-.B ab
-is a tool for benchmarking your Apache HyperText Transfer Protocol (HTTP)
-server. It is designed to give you an impression of how your current
-Apache installation performs.  This especially shows you how many
-requests per second your Apache installation is capable of serving. 
-.PP
-.SH OPTIONS
-.TP 12
-.B \-k 
-Enable the HTTP KeepAlive feature, i.e., perform multiple requests within one
-HTTP session. Default is no KeepAlive.
-.TP 12
-.BI \-n " requests"
-Number of requests to perform for the benchmarking session.  The default is to
-just perform a single request which usually leads to non-representative
-benchmarking results.
-.TP 12
-.BI \-t " timelimit"
-Maximum number of seconds to spend for benchmarking. This implies
-.B \-d
-Do not display the "percentage served within XX [ms] table". (legacy
-support).
-.TP 12
-.B \-S
-Do not display the median and standard deviation values, nor display
-the warning/error messages when the average and median are more than
-one or two times the standard deviation apart. And default to the 
-min/avg/max values. (legacy support).
-.TP 12
-.B \-s
-When compiled in (bb -h will show you) use the SSL protected
-.B https
-rather than the 
-.B http
-protocol. This feature is experimental and
-.B very
-rudimentary. You propably do not want to use it.
-.TP 12
-.B \-k 
-Enable the HTTP KeepAlive feature; that is, perform multiple requests
-within one HTTP session. Default is no KeepAlive.
-a 
-.B \-n 
-.B 50000
-internally. Use this to benchmark the server within a fixed total amount of
-time.  Per default there is no timelimit. 
-.TP 12
-.BI \-c " concurrency"
-Number of multiple requests to perform at a time. 
-Default is one request at a time.
-
-.TP 12
-.BI \-p " POST file"
-File containing data to POST.
-
-.TP 12
-.BI \-A " Authentication username:password"
-Supply BASIC Authentication credentials to the server. The username
-and password are separated by a single ':' and sent on the wire uuencoded.
-The string is sent regardless of whether the server needs it; (i.e., has
-sent an 401 authentication needed).
-
-.TP 12
-.BI \-X " proxy[:port]"
-Route all requests through the proxy (at optional port).
-
-.TP 12
-.BI \-P " Proxy-Authentication username:password"
-Supply BASIC Authentication credentials to a proxy en-route. The username
-and password are separated by a single ':' and sent on the wire uuencoded.
-The string is sent regardless of whether the proxy needs it; (i.e., has
-sent an 407 proxy authentication needed).
-
-.TP 12
-.BI \-C " Cookie name=value"
-Add a 'Cookie:' line to the request. The argument is typically in the form
-of a 'name=value' pair. This field is repeatable.
-
-.TP 12
-.BI \-p " Header string"
-Append extra headers to the request. The argument is typically in the form
-of a valid header line, containing a colon-separated field-value pair.
-(i.e., 'Accept-Encoding: zip/zop;8bit').
-
-.TP 12
-.BI \-T " content-type"
-Content-type header to use for POST data.
-
-.TP 12
-.BI \-g " gnuplot file"
-Write all measured values out as a 'gnuplot' or TSV (Tab separate values)
-file. This file can easily be imported into packages like Gnuplot, IDL, Mathematica,
-Igor or even Excell. The labels are on the first line of the file. 
-
-.TP 12
-.BI \-q
-When processing more than 150 requsts; 
-.B ab
-outputs a progress count on 
-.B stderr
-every 10% or 100 requests or so. The 
-.B -q
-flag qill suppress these messages.
-
-.TP 12
-.BI \-e " CSV file"
-Write a Comma separated value (CSV) file which contains for each
-percentage (from 1% to 100%) the time (in milli seconds) it took
-to serve that percentage of the requests. This is usually more
-usefull than the 'gnuplot' file; as the results are already
-'binned'.
-
-.TP 12
-.B \-v 
-Set verbosity level - 4 and above prints information on headers, 3 and
-above prints response codes (404, 200, etc.), 2 and above prints
-warnings and info.
-
-.TP 12
-.BI \-w
-Print out results in HTML tables.  Default table is two columns wide,
-with a white background.
-.TP 12
-.BI \-x " attributes"
-String to use as attributes for <table>.  Attributes are inserted
-<table 
-.B here
->
-.TP 12
-.BI \-y " attributes"
-String to use as attributes for <tr>.
-.TP 12
-.BI \-z " attributes"
-String to use as attributes for <td>.
-.TP 12
-.B \-V
-Display version number and exit.
-.TP 12
-.B \-h 
-Display usage information.
-.PD
-.SH BUGS
-There are various statically declared buffers of fixed length. Combined
-with the lazy parsing of the command line arguments, the response headers
-from the server and other external inputs, this might bite you.
-.P
-It does not implement HTTP/1.x fully; only accepts some 'expected' forms
-of responses. The rather heavy use of 
-.BR strstr(3)
-shows up top in profile,
-which might indicate a performance problem; i.e., you would measure the
-.BR ab
-performance rather than the server's.
-
-.SH SEE ALSO
-.BR httpd(8)
-.P
-The HTML output is not as complete as the text output.
-.P
-Up to version 1.3d
-.B ab
-has propably reported values way to low for most measurements;
-as a single timeout (which is usually in the order of seconds)
-will shift several thousands of milli-second responses by a
-considerable factor. This was further componded by a serious
-interger overrun which would for realistic run's (i.e. those
-longer than a few minutes) produce believable but totally 
-bogus results. Thanks to Sander Temme <sander@covalent.net>
-for solving this riddle.
-.
diff --git a/docs/man/apachectl.8 b/docs/man/apachectl.8
deleted file mode 100644
index b40b698..0000000
--- a/docs/man/apachectl.8
+++ /dev/null
@@ -1,135 +0,0 @@
-.TH apachectl 1 "September 1997"
-.\" The Apache Software License, Version 1.1
-.\"
-.\" Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
-.\" reserved.
-.\"
-.\" Redistribution and use in source and binary forms, with or without
-.\" modification, are permitted provided that the following conditions
-.\" are met:
-.\"
-.\" 1. Redistributions of source code must retain the above copyright
-.\"    notice, this list of conditions and the following disclaimer.
-.\"
-.\" 2. Redistributions in binary form must reproduce the above copyright
-.\"    notice, this list of conditions and the following disclaimer in
-.\"    the documentation and/or other materials provided with the
-.\"    distribution.
-.\"
-.\" 3. The end-user documentation included with the redistribution,
-.\"    if any, must include the following acknowledgment:
-.\"       "This product includes software developed by the
-.\"        Apache Software Foundation (http://www.apache.org/)."
-.\"    Alternately, this acknowledgment may appear in the software itself,
-.\"    if and wherever such third-party acknowledgments normally appear.
-.\"
-.\" 4. The names "Apache" and "Apache Software Foundation" must
-.\"    not be used to endorse or promote products derived from this
-.\"    software without prior written permission. For written
-.\"    permission, please contact apache@apache.org.
-.\"
-.\" 5. Products derived from this software may not be called "Apache",
-.\"    nor may "Apache" appear in their name, without prior written
-.\"    permission of the Apache Software Foundation.
-.\"
-.\" THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
-.\" WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-.\" DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
-.\" ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-.\" SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-.\" LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
-.\" USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-.\" ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-.\" OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
-.\" OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-.\" SUCH DAMAGE.
-.\"
-.\" This software consists of voluntary contributions made by many
-.\" individuals on behalf of the Apache Software Foundation.  For more
-.\" information on the Apache Software Foundation, please see
-.\" <http://www.apache.org/>.
-.\"
-.SH NAME
-apachectl \- Apache HTTP server control interface
-.SH SYNOPSIS
-.B apachectl 
-\fIcommand\fP [...]
-.SH DESCRIPTION
-.B apachectl
-is a front end to the Apache HyperText Transfer Protocol (HTTP) 
-server.  It is designed to help the administrator control the 
-functioning of the Apache 
-.B httpd
-daemon.  
-.PP
-.B NOTE: 
-If your Apache installation uses non-standard paths, you will need to 
-edit the 
-.B apachectl
-script to set the appropriate paths to your PID file and your 
-.B httpd
-binary.  See the comments in the script for details.
-.PP
-The 
-.B apachectl
-script returns a 0 exit value on success, and >0 if an error 
-occurs.  For more details, view the comments in the script.
-.PP
-Full documentation for Apache is available at 
-.B http://httpd.apache.org/
-.
-.SH OPTIONS
-The \fIcommand\fP can be any one or more of the following options:
-.TP 12
-.BI start
-Start the Apache daemon.  Gives an error if it is already running.
-.TP
-.BI stop
-Stops the Apache daemon.
-.TP
-.BI restart
-Restarts the Apache daemon by sending it a SIGHUP.  If the daemon
-is not running, it is started.
-This command automatically checks the configuration files via 
-.BI configtest
-before initiating the restart to make sure Apache doesn't die.
-.TP
-.BI fullstatus
-Displays a full status report from 
-.B mod_status. 
-For this to work, you need to have mod_status enabled on your server 
-and a text-based browser such as \fIlynx\fP available on your system.  The
-URL used to access the status report can be set by editing the
-.B STATUSURL
-variable in the script.
-.TP
-.BI status
-Displays a brief status report.  Similar to the fullstatus option,
-except that the list of requests currently being served is omitted.
-.TP
-.BI graceful
-Gracefully restarts the Apache daemon by sending it a SIGUSR1.  If
-the daemon is not running, it is started.  This differs from a
-normal restart in that currently open connections are not aborted.
-A side effect is that old log files will not be closed immediately.
-This means that if used in a log rotation script, a substantial delay may be
-necessary to ensure that the old log files are closed before processing them.
-This command automatically checks the configuration files via 
-.BI configtest
-before initiating the restart to make sure Apache doesn't die.
-On certain platforms that do not allow SIGUSR1 to be used for a graceful
-restart, an alternative signal may be used (such as SIGWINCH).  graceful 
-will send the right signal for your platform.
-.TP
-.BI configtest
-Run a configuration file syntax test. It parses the configuration
-files and either reports 
-.B "Syntax Ok"
-or detailed information about the particular syntax error.
-.TP
-.BI help
-Displays a short help message.
-.SH SEE ALSO
-.BR httpd(8)
-.
diff --git a/docs/man/apxs.8 b/docs/man/apxs.8
deleted file mode 100644
index 4779239..0000000
--- a/docs/man/apxs.8
+++ /dev/null
@@ -1,458 +0,0 @@
-.TH apxs 8 "April 1998"
-.\" The Apache Software License, Version 1.1
-.\"
-.\" Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
-.\" reserved.
-.\"
-.\" Redistribution and use in source and binary forms, with or without
-.\" modification, are permitted provided that the following conditions
-.\" are met:
-.\"
-.\" 1. Redistributions of source code must retain the above copyright
-.\"    notice, this list of conditions and the following disclaimer.
-.\"
-.\" 2. Redistributions in binary form must reproduce the above copyright
-.\"    notice, this list of conditions and the following disclaimer in
-.\"    the documentation and/or other materials provided with the
-.\"    distribution.
-.\"
-.\" 3. The end-user documentation included with the redistribution,
-.\"    if any, must include the following acknowledgment:
-.\"       "This product includes software developed by the
-.\"        Apache Software Foundation (http://www.apache.org/)."
-.\"    Alternately, this acknowledgment may appear in the software itself,
-.\"    if and wherever such third-party acknowledgments normally appear.
-.\"
-.\" 4. The names "Apache" and "Apache Software Foundation" must
-.\"    not be used to endorse or promote products derived from this
-.\"    software without prior written permission. For written
-.\"    permission, please contact apache@apache.org.
-.\"
-.\" 5. Products derived from this software may not be called "Apache",
-.\"    nor may "Apache" appear in their name, without prior written
-.\"    permission of the Apache Software Foundation.
-.\"
-.\" THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
-.\" WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-.\" DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
-.\" ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-.\" SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-.\" LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
-.\" USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-.\" ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-.\" OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
-.\" OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-.\" SUCH DAMAGE.
-.\"
-.\" This software consists of voluntary contributions made by many
-.\" individuals on behalf of the Apache Software Foundation.  For more
-.\" information on the Apache Software Foundation, please see
-.\" <http://www.apache.org/>.
-.\"
-.SH NAME
-apxs \- APache eXtenSion tool
-.SH SYNOPSIS
-.B apxs
-.B \-g
-[
-.BI \-S " name=value
-]
-.BI \-n " modname"
-
-.B apxs
-.B \-q
-[
-.BI \-S " name=value
-]
-.IR query " ..."
-
-.B apxs
-.B \-c
-[
-.BI \-S " name=value
-]
-[
-.BI \-o " dsofile"
-]
-[
-.BI \-I " incdir"
-]
-[
-.BI \-D " name=value"
-]
-[
-.BI \-L " libdir"
-]
-[
-.BI \-l " libname"
-]
-[
-.BI \-Wc, "compiler-flags"
-]
-[
-.BI \-Wl, "linker-flags"
-]
-.IR files " ..."
-
-.B apxs
-.B \-i
-[
-.BI \-S " name=value
-]
-[
-.BI \-n " modname"
-]
-[
-.B \-a
-]
-[
-.B \-A
-]
-.IR dsofile " ..."
-
-.B apxs
-.B \-e
-[
-.BI \-S " name=value
-]
-[
-.BI \-n " modname"
-]
-[
-.B \-a
-]
-[
-.B \-A
-]
-.IR dsofile " ..."
-.PP
-.SH DESCRIPTION
-.B apxs
-is a tool for building and installing extension modules for the Apache
-HyperText Transfer Protocol (HTTP) server. This is achieved by building a
-dynamic shared object (DSO) from one or more source or object
-.I files
-which then can be loaded into
-the Apache server under runtime via the
-.B LoadModule
-directive from
-.BR mod_so.
-
-So to use this extension mechanism your platform has
-to support the DSO feature and your
-Apache
-.B httpd
-binary has to be built with the
-.B mod_so
-module.
-The
-.B apxs
-tool automatically complains if this is not the case.
-You can check this yourself by manually running the command
-
-.nf
-  $ httpd -l
-.fi
-
-The module
-.B mod_so
-should be part of the displayed list.
-If these requirements are fulfilled you can easily extend
-your Apache server's functionality by installing your own
-modules with the DSO mechanism by the help of this
-.B apxs
-tool:
-
-.nf
-  $ apxs -i -a -c mod_foo.c
-  gcc -fpic -DSHARED_MODULE -I/path/to/apache/include -c mod_foo.c
-  ld -Bshareable -o mod_foo.so mod_foo.o
-  cp mod_foo.so /path/to/apache/modules/mod_foo.so
-  chmod 755 /path/to/apache/modules/mod_foo.so
-  [activating module `foo' in /path/to/apache/etc/httpd.conf]
-  $ apachectl restart
-  /path/to/apache/sbin/apachectl restart: httpd not running, trying to start
-  [Tue Mar 31 11:27:55 1998] [debug] mod_so.c(303): loaded module foo_module
-  /path/to/apache/sbin/apachectl restart: httpd started
-  $ _
-.fi
-
-The arguments
-.I files
-can be any C source file (.c), a object file (.o) or
-even a library archive (.a). The
-.B apxs
-tool automatically recognizes these extensions and automatically used the C
-source files for compilation while just using the object and archive files for
-the linking phase. But when using such pre-compiled objects make sure they are
-compiled for position independent code (PIC) to be able to use them for a
-dynamically loaded shared object.
-For instance with GCC you always just have to use
-.BR -fpic .
-For other
-C compilers consult its manual
-page or at watch for the flags
-.B apxs
-uses to compile the object files.
-
-For more details about DSO support in Apache read the documentation
-of
-.B mod_so
-or perhaps even read the
-.B src/modules/standard/mod_so.c
-source file.
-
-.PP
-.SH OPTIONS
-Common options:
-.TP 12
-.BI \-n " modname"
-This explicitly sets the module name for the
-.B \-i
-(install)
-and
-.B \-g
-(template generation) option. Use this to explicitly specify the module name.
-For option
-.B \-g
-this is required, for option
-.B \-i
-the
-.B apxs
-tool tries to determine the name from the source or (as a fallback) at least
-by guessing it from the filename.
-.PP
-Query options:
-.TP 12
-.B \-q 
-Performs a query for 
-.BR apxs 's
-knowledge about certain settings. The
-.I query
-parameters can be one or more of the following strings:
-.nf
-  CC              TARGET
-  CFLAGS          SBINDIR    
-  CFLAGS_SHLIB    INCLUDEDIR 
-  LD_SHLIB        LIBEXECDIR 
-  LDFLAGS_SHLIB   SYSCONFDIR 
-  LIBS_SHLIB
-.fi
-Use this for manually determining settings. For instance use
-.nf
-  INC=-I`apxs -q INCLUDEDIR`
-.fi
-inside your own Makefiles if you need manual access
-to Apache's C header files.
-.PP
-Configuration options:
-.TP 12
-.BI \-S " name=value"
-This option changes the apxs settings described above.
-.PP
-Template Generation options:
-.TP 12
-.B \-g
-This generates a subdirectory
-.I name
-(see option
-.BR \-n ")"
-and there two files: A sample module source file named
-.BI mod_ name.c
-which can be used as a template for creating your own modules or
-as a quick start for playing with the APXS mechanism.
-And a corresponding
-.B Makefile
-for even easier build and installing of this module.
-.PP
-DSO compilation options:
-.TP 12
-.B \-c
-This indicates the compilation operation. It first compiles the C source
-files (.c) of
-.I files
-into corresponding object files (.o) and then builds a dynamically shared object in
-.I dsofile
-by linking these object files plus the remaining
-object files (.o and .a) of
-.I files
-If no
-.B \-o
-option is specified
-the output file is guessed from the first filename in
-.I files
-and thus usually defaults to
-.BI mod_ name.so
-.TP 12
-.BI \-o " dsofile"
-Explicitly specifies the filename of the created dynamically shared object. If
-not specified and the name cannot be guessed from the
-.I files
-list, the fallback name
-.B mod_unknown.so
-is used.
-.TP 12
-.BI \-D " name=value"
-This option is directly passed through to the compilation command(s).
-Use this to add your own defines to the build process.
-.TP 12
-.BI \-I " incdir"
-This option is directly passed through to the compilation command(s).
-Use this to add your own include directories to search to the build process.
-.TP 12
-.BI \-L " libdir"
-This option is directly passed through to the linker command.
-Use this to add your own library directories to search to the build process.
-.TP 12
-.BI \-l " libname"
-This option is directly passed through to the linker command.
-Use this to add your own libraries to search to the build process.
-.TP 12
-.BI \-Wc, "compiler-flags"
-This option passes 
-.I compiler-flags
-as additional flags to the compiler command.
-Use this to add local compiler-specific options.
-.TP 12
-.BI \-Wl, "linker-flags"
-This option passes 
-.I linker-flags
-as additional flags to the linker command.
-Use this to add local linker-specific options.
-.PP
-DSO installation and configuration options:
-.TP 12
-.B \-i
-This indicates the installation operation and installs one or more
-dynamically shared objects into the
-server's
-.I modules
-directory.
-.TP 12
-.B \-a
-This activates the module by automatically adding a corresponding
-.B LoadModule
-line to Apache's
-.B httpd.conf
-configuration file, or by enabling it if it already exists.
-.TP 12
-.B \-A
-Same as option
-.B \-a
-but the created 
-.B LoadModule
-directive is prefixed with a hash sign (#), i.e. the module is
-just prepared for later activation but initially disabled. 
-.TP 12
-.B \-e
-This indicates the editing operation, which can be used with the
-.B \-a
-and
-.B \-A
-options similarly to the
-.B \-i
-operation to edit Apache's
-.B httpd.conf
-configuration file without attempting to install the module.
-.PD
-.SH EXAMPLES
-Assume you have an Apache module named mod_foo.c available which should extend
-Apache's server functionality. To accomplish this you first have to compile
-the C source into a shared object suitable for loading into the Apache server
-under runtime via the following command:
-
-.nf
-  $ apxs -c mod_foo.c
-  gcc -fpic -DSHARED_MODULE -I/path/to/apache/include -c mod_foo.c
-  ld -Bshareable -o mod_foo.so mod_foo.o
-  $ _
-.fi
-
-Then you have to update the Apache configuration by making sure a
-.B LoadModule
-directive is present to load this shared object. To simplify this
-step
-.B apxs
-provides an automatic way to install the shared object in its
-"modules" directory and updating the
-.B httpd.conf
-file accordingly. This can be achieved by running:
-
-.nf
-  $ apxs -i -a mod_foo.c
-  cp mod_foo.so /path/to/apache/modules/mod_foo.so
-  chmod 755 /path/to/apache/modules/mod_foo.so
-  [activating module `foo' in /path/to/apache/etc/httpd.conf]
-  $ _
-.fi
-
-This way a line named
-
-.nf
-  LoadModule foo_module modules/mod_foo.so
-.fi
-
-is added to the configuration file if still not present.
-If you want to have this disabled per default use the
-.B \-A
-option, i.e.
-
-.nf
-  $ apxs -i -A mod_foo.c
-.fi
-
-For a quick test of the APXS mechanism you can create a sample Apache module
-template plus a corresponding Makefile via:
-
-.nf
-  $ apxs -g -n foo
-  Creating [DIR]  foo
-  Creating [FILE] foo/Makefile
-  Creating [FILE] foo/mod_foo.c
-  $ _
-.fi
-
-Then you can immediately compile this sample module into a shared object and
-load it into the Apache server:
-
-.nf
-  $ cd foo
-  $ make all reload
-  apxs -c mod_foo.c
-  gcc -fpic -DSHARED_MODULE -I/path/to/apache/include -c mod_foo.c
-  ld -Bshareable -o mod_foo.so mod_foo.o
-  apxs -i -a -n "foo" mod_foo.so
-  cp mod_foo.so /path/to/apache/modules/mod_foo.so
-  chmod 755 /path/to/apache/modules/mod_foo.so
-  [activating module `foo' in /path/to/apache/etc/httpd.conf]
-  apachectl restart
-  /path/to/apache/sbin/apachectl restart: httpd not running, trying to start
-  [Tue Mar 31 11:27:55 1998] [debug] mod_so.c(303): loaded module foo_module
-  /path/to/apache/sbin/apachectl restart: httpd started
-  $ _
-.fi
-
-You can even use
-.B apxs
-to compile complex modules outside the Apache source tree, like PHP3:
-
-.nf
-  $ cd php3
-  $ ./configure --with-shared-apache=../apache-1.3
-  $ apxs -c -o libphp3.so mod_php3.c libmodphp3-so.a
-  gcc -fpic -DSHARED_MODULE -I/tmp/apache/include  -c mod_php3.c
-  ld -Bshareable -o libphp3.so mod_php3.o libmodphp3-so.a
-  $ _
-.fi
-
-because
-.B apxs
-automatically recognized C source files and object files.  Only C source files
-are compiled while remaining object files are used for the linking phase.
-
-.PD
-.SH SEE ALSO
-.BR apachectl(1),
-.BR httpd(8).
-.
diff --git a/docs/man/dbmmanage.1 b/docs/man/dbmmanage.1
deleted file mode 100644
index 800b8e6..0000000
--- a/docs/man/dbmmanage.1
+++ /dev/null
@@ -1,168 +0,0 @@
-.TH dbmmanage 1 "March 1998"
-.\" The Apache Software License, Version 1.1
-.\"
-.\" Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
-.\" reserved.
-.\"
-.\" Redistribution and use in source and binary forms, with or without
-.\" modification, are permitted provided that the following conditions
-.\" are met:
-.\"
-.\" 1. Redistributions of source code must retain the above copyright
-.\"    notice, this list of conditions and the following disclaimer.
-.\"
-.\" 2. Redistributions in binary form must reproduce the above copyright
-.\"    notice, this list of conditions and the following disclaimer in
-.\"    the documentation and/or other materials provided with the
-.\"    distribution.
-.\"
-.\" 3. The end-user documentation included with the redistribution,
-.\"    if any, must include the following acknowledgment:
-.\"       "This product includes software developed by the
-.\"        Apache Software Foundation (http://www.apache.org/)."
-.\"    Alternately, this acknowledgment may appear in the software itself,
-.\"    if and wherever such third-party acknowledgments normally appear.
-.\"
-.\" 4. The names "Apache" and "Apache Software Foundation" must
-.\"    not be used to endorse or promote products derived from this
-.\"    software without prior written permission. For written
-.\"    permission, please contact apache@apache.org.
-.\"
-.\" 5. Products derived from this software may not be called "Apache",
-.\"    nor may "Apache" appear in their name, without prior written
-.\"    permission of the Apache Software Foundation.
-.\"
-.\" THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
-.\" WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-.\" DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
-.\" ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-.\" SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-.\" LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
-.\" USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-.\" ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-.\" OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
-.\" OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-.\" SUCH DAMAGE.
-.\"
-.\" This software consists of voluntary contributions made by many
-.\" individuals on behalf of the Apache Software Foundation.  For more
-.\" information on the Apache Software Foundation, please see
-.\" <http://www.apache.org/>.
-.\"
-.SH NAME
-dbmmanage \- Create and update user authentication files in DBM format
-.SH SYNOPSIS
-.B dbmmanage
-.I filename
-[
-.I command
-] [
-.I username
-[
-.I encpasswd
-] ]
-.PP
-.SH DESCRIPTION
-.B dbmmanage
-is used to create and update the DBM format files used to store
-usernames and password for basic authentication of HTTP users.
-Resources available from the
-.B httpd
-Apache web server can be restricted to just the users listed
-in the files created by 
-.B dbmmanage.
-This program can only be used
-when the usernames are stored in a DBM file. To use a
-flat-file database see 
-\fBhtpasswd\fP.
-.PP
-This manual page only lists the command line arguments. For details of
-the directives necessary to configure user authentication in 
-.B httpd 
-see
-the Apache manual, which is part of the Apache distribution or can be
-found at http://www.apache.org/.
-.SH OPTIONS
-.IP \fB\fIfilename\fP
-The filename of the DBM format file. Usually without the 
-extension .db, .pag, or .dir.
-.IP \fB\fIcommand\fP
-This selects the operation to perform:
-.TP 12
-.B add
-Adds an entry for \fIusername\fP to \fIfilename\fP using the encrypted
-password \fIencpassword\fP.
-.TP 12
-.B adduser
-Asks for a password and then adds an entry for \fIusername\fP to
-\fIfilename\fP .
-.TP 12
-.B check
-Asks for a password and then checks if 
-\fIusername\fP is in \fIfilename\fP and if it's password matches
-the specified one.
-.TP 12
-.B delete
-Deletes the \fIusername\fP entry from \fIfilename\fP.
-.TP 12
-.B import
-Reads username:password entries (one per line) from STDIN and adds them to
-\fIfilename\fP. The passwords already has to be crypted.
-.TP 12
-.B update
-Same as the "adduser" command, except that it makes sure \fIusername\fP
-already exists in \fIfilename\fP.
-.TP 12
-.B view
-Just displays the complete contents of the DBM file.
-.IP \fB\fIusername\fP
-The user for which the update operation is performed.
-.PD
-.SH BUGS
-.PP
-One should be aware that there are a number of different DBM file
-formats in existence, and with all likelihood, libraries for more than
-one format may exist on your system.  The three primary examples are
-NDBM, the GNU project's GDBM, and Berkeley DB 2.  Unfortunately, all
-these libraries use different file formats, and you must make sure
-that the file format used by
-.I filename
-is the same format that 
-.B dbmmanage
-expects to see.  
-.B dbmmanage
-currently has no way of determining what type of DBM file it is
-looking at.  If used against the wrong format, 
-.dbmmanage
-will simply return nothing, or may create a different DBM file with a
-different name, or at worst, it may corrupt the DBM file if you were
-attempting to write to it.
-.PP
-.B dbmmanage
-has a list of DBM format preferences, defined by the 
-.B @AnyDBM::ISA
-array near the beginning of the program.  Since we prefer the Berkeley
-DB 2 file format, the order in which
-.B dbmmanage 
-will look for system libraries is Berkeley DB 2, then NDBM, and then
-GDBM.  The first library found will be the library
-.B dbmmanage
-will attempt to use for all DBM file transactions.  This ordering is
-slightly different than the standard 
-.B @AnyDBM::ISA
-ordering in perl, as well as the ordering used by the simple dbmopen()
-call in Perl, so if you use any other utilities to manage your DBM
-files, they must also follow this preference ordering.  Similar care
-must be taken if using programs in other languages, like C, to 
-access these files.
-.PP
-Apache's 
-.B mod_auth_dbm.c
-corresponds to the NDBM library.  Also, one can usually use the 
-.B file
-program supplied with most Unix systems to see what format a DBM file is in.
-.PD
-.SH SEE ALSO
-.BR httpd(8)
-.
diff --git a/docs/man/htdigest.1 b/docs/man/htdigest.1
deleted file mode 100644
index 24da9e4..0000000
--- a/docs/man/htdigest.1
+++ /dev/null
@@ -1,95 +0,0 @@
-.TH htdigest 1 "January 2001"
-.\" The Apache Software License, Version 1.1
-.\"
-.\" Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
-.\" reserved.
-.\"
-.\" Redistribution and use in source and binary forms, with or without
-.\" modification, are permitted provided that the following conditions
-.\" are met:
-.\"
-.\" 1. Redistributions of source code must retain the above copyright
-.\"    notice, this list of conditions and the following disclaimer.
-.\"
-.\" 2. Redistributions in binary form must reproduce the above copyright
-.\"    notice, this list of conditions and the following disclaimer in
-.\"    the documentation and/or other materials provided with the
-.\"    distribution.
-.\"
-.\" 3. The end-user documentation included with the redistribution,
-.\"    if any, must include the following acknowledgment:
-.\"       "This product includes software developed by the
-.\"        Apache Software Foundation (http://www.apache.org/)."
-.\"    Alternately, this acknowledgment may appear in the software itself,
-.\"    if and wherever such third-party acknowledgments normally appear.
-.\"
-.\" 4. The names "Apache" and "Apache Software Foundation" must
-.\"    not be used to endorse or promote products derived from this
-.\"    software without prior written permission. For written
-.\"    permission, please contact apache@apache.org.
-.\"
-.\" 5. Products derived from this software may not be called "Apache",
-.\"    nor may "Apache" appear in their name, without prior written
-.\"    permission of the Apache Software Foundation.
-.\"
-.\" THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
-.\" WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-.\" DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
-.\" ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-.\" SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-.\" LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
-.\" USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-.\" ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-.\" OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
-.\" OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-.\" SUCH DAMAGE.
-.\"
-.\" This software consists of voluntary contributions made by many
-.\" individuals on behalf of the Apache Software Foundation.  For more
-.\" information on the Apache Software Foundation, please see
-.\" <http://www.apache.org/>.
-.\"
-.SH NAME
-htdigest \- Create and update user authentication files
-.SH SYNOPSIS
-.B htdigest 
-[
-.B \-c
-] 
-.I passwdfile
-.I realm
-.I username
-.SH DESCRIPTION
-.B htdigest
-is used to create and update the flat-files used to store
-usernames, realm and password for digest authentication of HTTP users.
-Resources available from the
-.B httpd
-Apache web server can be restricted to just the users listed
-in the files created by 
-.B htdigest.
-.PP
-This manual page only lists the command line arguments. For details of
-the directives necessary to configure digest authentication in 
-.B httpd 
-see
-the Apache manual, which is part of the Apache distribution or can be
-found at http://www.apache.org/.
-.SH OPTIONS
-.IP \-c 
-Create the \fIpasswdfile\fP. If \fIpasswdfile\fP already exists, it
-is deleted first. 
-.IP \fB\fIpasswdfile\fP
-Name of the file to contain the username, realm and password. If \-c
-is given, this file is created if it does not already exist,
-or deleted and recreated if it does exist. 
-.IP \fB\fIrealm\fP
-The realm name to which the user name belongs. 
-.IP \fB\fIusername\fP
-The user name to create or update in \fBpasswdfile\fP. If
-\fIusername\fP does not exist is this file, an entry is added. If it
-does exist, the password is changed.
-.SH SEE ALSO
-.BR httpd(8) 
-.
diff --git a/docs/man/htpasswd.1 b/docs/man/htpasswd.1
deleted file mode 100644
index e1458b3..0000000
--- a/docs/man/htpasswd.1
+++ /dev/null
@@ -1,250 +0,0 @@
-.TH htpasswd 1 "May 2000"
-.\" The Apache Software License, Version 1.1
-.\"
-.\" Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
-.\" reserved.
-.\"
-.\" Redistribution and use in source and binary forms, with or without
-.\" modification, are permitted provided that the following conditions
-.\" are met:
-.\"
-.\" 1. Redistributions of source code must retain the above copyright
-.\"    notice, this list of conditions and the following disclaimer.
-.\"
-.\" 2. Redistributions in binary form must reproduce the above copyright
-.\"    notice, this list of conditions and the following disclaimer in
-.\"    the documentation and/or other materials provided with the
-.\"    distribution.
-.\"
-.\" 3. The end-user documentation included with the redistribution,
-.\"    if any, must include the following acknowledgment:
-.\"       "This product includes software developed by the
-.\"        Apache Software Foundation (http://www.apache.org/)."
-.\"    Alternately, this acknowledgment may appear in the software itself,
-.\"    if and wherever such third-party acknowledgments normally appear.
-.\"
-.\" 4. The names "Apache" and "Apache Software Foundation" must
-.\"    not be used to endorse or promote products derived from this
-.\"    software without prior written permission. For written
-.\"    permission, please contact apache@apache.org.
-.\"
-.\" 5. Products derived from this software may not be called "Apache",
-.\"    nor may "Apache" appear in their name, without prior written
-.\"    permission of the Apache Software Foundation.
-.\"
-.\" THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
-.\" WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-.\" DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
-.\" ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-.\" SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-.\" LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
-.\" USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-.\" ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-.\" OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
-.\" OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-.\" SUCH DAMAGE.
-.\"
-.\" This software consists of voluntary contributions made by many
-.\" individuals on behalf of the Apache Software Foundation.  For more
-.\" information on the Apache Software Foundation, please see
-.\" <http://www.apache.org/>.
-.\"
-.SH NAME
-htpasswd \- Create and update user authentication files
-.SH SYNOPSIS
-.B htpasswd 
-[
-.B \-c
-] 
-[
-.B \-m
-] 
-.I passwdfile
-.I username
-.br
-.B htpasswd
-.B \-b  
-[
-.B \-c
-] 
-[
-.B \-m
-|
-.B \-d
-|
-.B \-p
-|
-.B \-s
-] 
-.I passwdfile
-.I username
-.I password
-.br
-.B htpasswd 
-.B \-n
-[
-.B \-m
-|
-.B \-d
-|
-.B \-s
-|
-.B \-p
-] 
-.I username
-.br
-.B htpasswd
-.B \-nb
-[
-.B \-m
-|
-.B \-d
-|
-.B \-s
-|
-.B \-p
-] 
-.I username
-.I password
-.SH DESCRIPTION
-.B htpasswd
-is used to create and update the flat-files used to store
-usernames and password for basic authentication of HTTP users.
-If
-.B htpasswd
-cannot access a file, such as not being able to write to the output
-file or not being able to read the file in order to update it,
-it returns an error status and makes no changes.
-.PP
-Resources available from the
-.B httpd
-Apache web server can be restricted to just the users listed
-in the files created by 
-.B htpasswd.
-This program can only manage usernames and passwords
-stored in a flat-file. It can encrypt and display password information
-for use in other types of data stores, though.  To use a
-DBM database see 
-\fBdbmmanage\fP.
-.PP
-.B htpasswd
-encrypts passwords using either a version of MD5 modified for Apache,
-or the system's \fIcrypt()\fP routine.  Files managed by
-.B htpasswd
-may contain both types of passwords; some user records may have
-MD5-encrypted passwords while others in the same file may have passwords
-encrypted with \fIcrypt()\fP.
-.PP
-This manual page only lists the command line arguments. For details of
-the directives necessary to configure user authentication in 
-.B httpd 
-see
-the Apache manual, which is part of the Apache distribution or can be
-found at <URL:http://www.apache.org/>.
-.SH OPTIONS
-.IP \-b 
-Use batch mode; \fIi.e.\fP, get the password from the command line
-rather than prompting for it. \fBThis option should be used with
-extreme care, since the password is clearly visible on the command
-line.\fP
-.IP \-c 
-Create the \fIpasswdfile\fP. If \fIpasswdfile\fP already exists, it
-is rewritten and truncated.  This option cannot be combined with
-the \fB-n\fP option.
-.IP \-n
-Display the results on standard output rather than updating a file.
-This is useful for generating password records acceptable to Apache
-for inclusion in non-text data stores.  This option changes the
-syntax of the command line, since the \fIpasswdfile\fP argument
-(usually the first one) is omitted.  It cannot be combined with
-the \fB-c\fP option.
-.IP \-m 
-Use MD5 encryption for passwords. On Windows and TPF, this is the default.
-.IP \-d
-Use crypt() encryption for passwords. The default on all platforms but
-Windows and TPF. Though possibly supported by
-.B htpasswd
-on all platforms, it is not supported by the
-.B httpd
-server on Windows and TPF.
-.IP \-s
-Use SHA encryption for passwords. Facilitates migration from/to Netscape
-servers using the LDAP Directory Interchange Format (ldif).
-.IP \-p
-Use plaintext passwords. Though 
-.B htpasswd
-will support creation on all platforms, the
-.B httpd
-daemon will only accept plain text passwords on Windows and TPF.
-.IP \fB\fIpasswdfile\fP
-Name of the file to contain the user name and password. If \-c
-is given, this file is created if it does not already exist,
-or rewritten and truncated if it does exist. 
-.IP \fB\fIusername\fP
-The username to create or update in \fBpasswdfile\fP. If
-\fIusername\fP does not exist in this file, an entry is added. If it
-does exist, the password is changed.
-.IP \fB\fIpassword\fP
-The plaintext password to be encrypted and stored in the file.  Only used
-with the \fI-b\fP flag.
-.SH EXIT STATUS
-.B htpasswd
-returns a zero status ("true") if the username and password have
-been successfully added or updated in the \fIpasswdfile\fP.
-.B htpasswd
-returns 1 if it encounters some problem accessing files, 2 if there
-was a syntax problem with the command line, 3 if the password was
-entered interactively and the verification entry didn't match, 4 if
-its operation was interrupted, 5 if a value is too long (username,
-filename, password, or final computed record), and 6 if the username
-contains illegal characters (see the \fBRESTRICTIONS\fP section).
-.SH EXAMPLES
-\fBhtpasswd /usr/local/etc/apache/.htpasswd-users jsmith\fP
-.IP
-Adds or modifies the password for user \fIjsmith\fP.  
-The user is prompted for the password.  If executed
-on a Windows system, the password will be encrypted using the
-modified Apache MD5 algorithm; otherwise, the system's
-\fIcrypt()\fP routine will be used.  If the file does not
-exist, 
-.B htpasswd
-will do nothing except return an error.
-.LP
-\fBhtpasswd -c /home/doe/public_html/.htpasswd jane\fP
-.IP
-Creates a new file and stores a record in it for user \fIjane\fP.
-The user is prompted for the password.
-If the file exists and cannot be read, or cannot be written,
-it is not altered and
-.B htpasswd
-will display a message and return an error status.
-.LP
-\fBhtpasswd -mb /usr/web/.htpasswd-all jones Pwd4Steve\fP
-.IP
-Encrypts the password from the command line (\fIPwd4Steve\fP) using
-the MD5 algorithm, and stores it in the specified file.
-.LP
-.SH SECURITY CONSIDERATIONS
-Web password files such as those managed by
-.B htpasswd
-should \fBnot\fP be within the Web server's URI space -- that is,
-they should not be fetchable with a browser.
-.PP
-The use of the \fI-b\fP option is discouraged, since when it is
-used the unencrypted password appears on the command line.
-.SH RESTRICTIONS
-On the Windows and MPE platforms, passwords encrypted with
-.B htpasswd
-are limited to no more than 255 characters in length.  Longer
-passwords will be truncated to 255 characters.
-.PP
-The MD5 algorithm used by
-.B htpasswd
-is specific to the Apache software; passwords encrypted using it will not be
-usable with other Web servers.
-.PP
-Usernames are limited to 255 bytes and may not include the character ':'.
-.SH SEE ALSO
-.BR httpd(8)
-and the scripts in support/SHA1 which come with the distribution.
diff --git a/docs/man/httpd.8 b/docs/man/httpd.8
deleted file mode 100644
index a13162d..0000000
--- a/docs/man/httpd.8
+++ /dev/null
@@ -1,179 +0,0 @@
-.TH httpd 8 "February 1997"
-.\" The Apache Software License, Version 1.1
-.\"
-.\" Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
-.\" reserved.
-.\"
-.\" Redistribution and use in source and binary forms, with or without
-.\" modification, are permitted provided that the following conditions
-.\" are met:
-.\"
-.\" 1. Redistributions of source code must retain the above copyright
-.\"    notice, this list of conditions and the following disclaimer.
-.\"
-.\" 2. Redistributions in binary form must reproduce the above copyright
-.\"    notice, this list of conditions and the following disclaimer in
-.\"    the documentation and/or other materials provided with the
-.\"    distribution.
-.\"
-.\" 3. The end-user documentation included with the redistribution,
-.\"    if any, must include the following acknowledgment:
-.\"       "This product includes software developed by the
-.\"        Apache Software Foundation (http://www.apache.org/)."
-.\"    Alternately, this acknowledgment may appear in the software itself,
-.\"    if and wherever such third-party acknowledgments normally appear.
-.\"
-.\" 4. The names "Apache" and "Apache Software Foundation" must
-.\"    not be used to endorse or promote products derived from this
-.\"    software without prior written permission. For written
-.\"    permission, please contact apache@apache.org.
-.\"
-.\" 5. Products derived from this software may not be called "Apache",
-.\"    nor may "Apache" appear in their name, without prior written
-.\"    permission of the Apache Software Foundation.
-.\"
-.\" THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
-.\" WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-.\" DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
-.\" ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-.\" SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-.\" LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
-.\" USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-.\" ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-.\" OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
-.\" OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-.\" SUCH DAMAGE.
-.\"
-.\" This software consists of voluntary contributions made by many
-.\" individuals on behalf of the Apache Software Foundation.  For more
-.\" information on the Apache Software Foundation, please see
-.\" <http://www.apache.org/>.
-.\"
-.SH NAME
-httpd \- Apache hypertext transfer protocol server
-.SH SYNOPSIS
-.B httpd 
-[
-.BI \-d " serverroot"
-] [
-.BI \-f " config"
-] [
-.BI \-C " directive"
-] [
-.BI \-c " directive"
-] [
-.BI \-D " parameter"
-]
-
-.B httpd 
-[
-.B \-h
-] 
-[
-.B \-l
-] 
-[
-.B \-L
-] 
-[
-.B \-v
-] 
-[
-.B \-V
-] 
-[
-.B \-t
-] 
-[
-.B \-X
-]
-
-.SH DESCRIPTION
-.B httpd
-is the Apache HyperText Transfer Protocol (HTTP) server program. It is
-designed to be run as a standalone daemon process. When used like this
-it will create a pool of child processes to handle requests. To stop
-it, send a TERM signal to the initial (parent) process. The PID of
-this process is written to a file as given in the configuration file.
-.PP
-This manual page only lists the command line arguments. For details
-of the directives necessary to configure 
-.B httpd
-see the Apache manual,
-which is part of the Apache distribution or can be found at
-http://httpd.apache.org/. Paths in this manual may not reflect those
-compiled into 
-.B httpd.
-.SH OPTIONS
-.TP 12
-.BI \-d " serverroot"
-Set the initial value for the ServerRoot directive to \fIserverroot\fP. This
-can be overridden by the ServerRoot command in the configuration file. The
-default is \fB/usr/local/apache2\fP.
-.TP
-.BI \-f " config"
-Execute the commands in the file \fIconfig\fP on startup. If \fIconfig\fP
-does not begin with a /, then it is taken to be a path relative to
-the ServerRoot. The default is \fBconf/httpd.conf\fP.
-.TP
-.BI \-C " directive"
-Process the configuration \fIdirective\fP before reading config files.
-.TP
-.BI \-c " directive"
-Process the configuration \fIdirective\fP after reading config files.
-.TP
-.BI \-D " parameter"
-Sets a configuration \fIparameter\fP which can be used with
-<IfDefine>...</IfDefine> sections in the configuration files
-to conditionally skip or process commands.
-.TP
-.B \-h
-Output a short summary of available command line options.
-.TP
-.B \-l
-Output a list of modules compiled into the server.
-.TP
-.B \-L
-Output a list of directives together with expected arguments and
-places where the directive is valid.
-.TP
-.B \-S
-Show the settings as parsed from the config file (currently only shows the
-virtualhost settings).
-.TP
-.B \-t
-Run syntax tests for configuration files only. The program immediately exits
-after these syntax parsing with either a return code of 0 (Syntax OK) or
-return code not equal to 0 (Syntax Error).  If 
-.BI \-D " DUMP_VHOSTS"
-is also set, details of the virtual host configuration will be printed.
-.TP
-.B \-v
-Print the version of 
-.B httpd
-, and then exit.
-.TP
-.B \-V
-Print the version and build parameters of 
-.B httpd
-, and then exit.
-.TP
-.B \-X
-Run
-.B httpd
-in debug mode.  Only one worker will be started and the server will not detach
-from the console.
-.SH FILES
-.PD 0
-.B /usr/local/apache2/conf/httpd.conf
-.br
-.B /usr/local/apache2/conf/mime.types
-.br
-.B /usr/local/apache2/conf/magic
-.br
-.B /usr/local/apache2/logs/error_log
-.br
-.B /usr/local/apache2/logs/access_log
-.br
-.B /usr/local/apache2/logs/httpd.pid
diff --git a/docs/man/logresolve.8 b/docs/man/logresolve.8
deleted file mode 100644
index 2676e02..0000000
--- a/docs/man/logresolve.8
+++ /dev/null
@@ -1,86 +0,0 @@
-.TH logresolve 8 "March 1998"
-.\" The Apache Software License, Version 1.1
-.\"
-.\" Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
-.\" reserved.
-.\"
-.\" Redistribution and use in source and binary forms, with or without
-.\" modification, are permitted provided that the following conditions
-.\" are met:
-.\"
-.\" 1. Redistributions of source code must retain the above copyright
-.\"    notice, this list of conditions and the following disclaimer.
-.\"
-.\" 2. Redistributions in binary form must reproduce the above copyright
-.\"    notice, this list of conditions and the following disclaimer in
-.\"    the documentation and/or other materials provided with the
-.\"    distribution.
-.\"
-.\" 3. The end-user documentation included with the redistribution,
-.\"    if any, must include the following acknowledgment:
-.\"       "This product includes software developed by the
-.\"        Apache Software Foundation (http://www.apache.org/)."
-.\"    Alternately, this acknowledgment may appear in the software itself,
-.\"    if and wherever such third-party acknowledgments normally appear.
-.\"
-.\" 4. The names "Apache" and "Apache Software Foundation" must
-.\"    not be used to endorse or promote products derived from this
-.\"    software without prior written permission. For written
-.\"    permission, please contact apache@apache.org.
-.\"
-.\" 5. Products derived from this software may not be called "Apache",
-.\"    nor may "Apache" appear in their name, without prior written
-.\"    permission of the Apache Software Foundation.
-.\"
-.\" THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
-.\" WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-.\" DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
-.\" ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-.\" SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-.\" LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
-.\" USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-.\" ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-.\" OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
-.\" OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-.\" SUCH DAMAGE.
-.\"
-.\" This software consists of voluntary contributions made by many
-.\" individuals on behalf of the Apache Software Foundation.  For more
-.\" information on the Apache Software Foundation, please see
-.\" <http://www.apache.org/>.
-.\"
-.SH NAME
-logresolve \- resolve hostnames for IP-addresses in Apache logfiles
-.SH SYNOPSIS
-.B logresolve
-[
-.BI \-s " filename"
-] [
-.B \-c
-] < 
-.I access_log
->
-.I access_log.new
-.PP
-.SH DESCRIPTION
-.B logresolve
-is a post-processing program to resolve IP-addresses in Apache's access
-logfiles.  To minimize impact on your nameserver, logresolve has its very own
-internal hash-table cache. This means that each IP number will only be looked
-up the first time it is found in the log file.
-.SH OPTIONS
-.TP 12
-.BI \-s " filename"
-Specifies a filename to record statistics.
-.TP 12
-.B \-c 
-This causes 
-.B logresolve 
-to apply some DNS checks: after finding the hostname from the IP address, it
-looks up the IP addresses for the hostname and checks that one of these
-matches the original address.
-.PD
-.SH SEE ALSO
-.BR httpd(8)
-.
diff --git a/docs/man/rotatelogs.8 b/docs/man/rotatelogs.8
deleted file mode 100644
index b9d13f8..0000000
--- a/docs/man/rotatelogs.8
+++ /dev/null
@@ -1,137 +0,0 @@
-.TH rotatelogs 8 "March 2001"
-.\" The Apache Software License, Version 1.1
-.\"
-.\" Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
-.\" reserved.
-.\"
-.\" Redistribution and use in source and binary forms, with or without
-.\" modification, are permitted provided that the following conditions
-.\" are met:
-.\"
-.\" 1. Redistributions of source code must retain the above copyright
-.\"    notice, this list of conditions and the following disclaimer.
-.\"
-.\" 2. Redistributions in binary form must reproduce the above copyright
-.\"    notice, this list of conditions and the following disclaimer in
-.\"    the documentation and/or other materials provided with the
-.\"    distribution.
-.\"
-.\" 3. The end-user documentation included with the redistribution,
-.\"    if any, must include the following acknowledgment:
-.\"       "This product includes software developed by the
-.\"        Apache Software Foundation (http://www.apache.org/)."
-.\"    Alternately, this acknowledgment may appear in the software itself,
-.\"    if and wherever such third-party acknowledgments normally appear.
-.\"
-.\" 4. The names "Apache" and "Apache Software Foundation" must
-.\"    not be used to endorse or promote products derived from this
-.\"    software without prior written permission. For written
-.\"    permission, please contact apache@apache.org.
-.\"
-.\" 5. Products derived from this software may not be called "Apache",
-.\"    nor may "Apache" appear in their name, without prior written
-.\"    permission of the Apache Software Foundation.
-.\"
-.\" THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
-.\" WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-.\" DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
-.\" ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-.\" SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-.\" LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
-.\" USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-.\" ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-.\" OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
-.\" OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-.\" SUCH DAMAGE.
-.\"
-.\" This software consists of voluntary contributions made by many
-.\" individuals on behalf of the Apache Software Foundation.  For more
-.\" information on the Apache Software Foundation, please see
-.\" <http://www.apache.org/>.
-.\"
-.SH NAME
-rotatelogs \- rotate Apache logs without having to kill the server
-.SH SYNOPSIS
-.B rotatelogs
-.I logfile
-.I rotationtime
-.I [offset]
-.PP
-.SH DESCRIPTION
-.B rotatelogs
-is a simple program for use in conjunction with Apache's piped logfile
-feature, which can be used like this:
-
-.fi
-CustomLog "|bin/rotatelogs /var/logs/logfile 86400" common
-.mf
-
-This creates the files /var/logs/logfile.nnnn where nnnn is the system
-time at which the log nominally starts (this time will always be a multiple of
-the rotation time, so you can synchronize cron scripts with it).  At the end
-of each rotation time (here after 24 hours) a new log is started.
-.SH OPTIONS
-.IP \fB\fIlogfile\fP
-The path plus basename of the logfile.  If \fBlogfile\fP includes any
-'%' characters, it is treated as a format string for \fIstrftime(3)\fP.
-Otherwise, the suffix .nnnnnnnnnn is automatically added and is the time
-in seconds.  Both formats compute the start time from the beginning of the
-current period.
-.IP \fB\fIrotationtime\fP
-The rotation time in seconds.
-.IP \fB\fIoffset\fP
-The number of minutes offset from UTC.  If omitted, zero is assumed and
-UTC is used.  For example, to use local time in the zone UTC -5 hours,
-specify a value of \fI-300\fP for this argument.
-.SH PORTABILITY
-The following logfile format string substitutions should be supported by
-all \fIstrftime(3)\fP implementations, see the \fIstrftime(3)\fP man page
-for library-specific extensions.
-.IP %A
-full weekday name (localized)
-.IP %a
-3-character weekday name (localized)
-.IP %B
-full month name (localized)
-.IP %b
-3-character month name (localized)
-.IP %c
-date and time (localized)
-.IP %d
-2-digit day of month
-.IP %H
-2-digit hour (24 hour clock)
-.IP %I
-2-digit hour (12 hour clock)
-.IP %j
-3-digit day of year
-.IP %M
-2-digit minute
-.IP %m
-2-digit month
-.IP %p
-am/pm of 12 hour clock (localized)
-.IP %S
-2-digit second
-.IP %U
-2-digit week of year (Sunday first day of week)
-.IP %W
-2-digit week of year (Monday first day of week)
-.IP %w
-1-digit weekday (Sunday first day of week)
-.IP %X
-time (localized)
-.IP %x
-date (localized)
-.IP %Y
-4-digit year
-.IP %y
-2-digit year
-.IP %Z
-time zone name
-.IP %%
-literal `%'
-.PD
-.SH SEE ALSO
-.BR httpd(8)
diff --git a/docs/man/suexec.8 b/docs/man/suexec.8
deleted file mode 100644
index 1c85725..0000000
--- a/docs/man/suexec.8
+++ /dev/null
@@ -1,75 +0,0 @@
-.TH suexec 8 "March 2001"
-.\" The Apache Software License, Version 1.1
-.\"
-.\" Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
-.\" reserved.
-.\"
-.\" Redistribution and use in source and binary forms, with or without
-.\" modification, are permitted provided that the following conditions
-.\" are met:
-.\"
-.\" 1. Redistributions of source code must retain the above copyright
-.\"    notice, this list of conditions and the following disclaimer.
-.\"
-.\" 2. Redistributions in binary form must reproduce the above copyright
-.\"    notice, this list of conditions and the following disclaimer in
-.\"    the documentation and/or other materials provided with the
-.\"    distribution.
-.\"
-.\" 3. The end-user documentation included with the redistribution,
-.\"    if any, must include the following acknowledgment:
-.\"       "This product includes software developed by the
-.\"        Apache Software Foundation (http://www.apache.org/)."
-.\"    Alternately, this acknowledgment may appear in the software itself,
-.\"    if and wherever such third-party acknowledgments normally appear.
-.\"
-.\" 4. The names "Apache" and "Apache Software Foundation" must
-.\"    not be used to endorse or promote products derived from this
-.\"    software without prior written permission. For written
-.\"    permission, please contact apache@apache.org.
-.\"
-.\" 5. Products derived from this software may not be called "Apache",
-.\"    nor may "Apache" appear in their name, without prior written
-.\"    permission of the Apache Software Foundation.
-.\"
-.\" THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
-.\" WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-.\" DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
-.\" ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-.\" SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-.\" LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
-.\" USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-.\" ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-.\" OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
-.\" OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-.\" SUCH DAMAGE.
-.\"
-.\" This software consists of voluntary contributions made by many
-.\" individuals on behalf of the Apache Software Foundation.  For more
-.\" information on the Apache Software Foundation, please see
-.\" <http://www.apache.org/>.
-.\"
-.SH NAME
-suexec \- Switch User For Exec
-.SH SYNOPSIS
-.B suexec -V
-.PP
-No other synopsis for usage, because this program
-is otherwise only used internally by the Apache HTTP server. 
-.PP
-.SH DESCRIPTION
-.B suexec
-is the "wrapper" support program for the suexec behaviour for the
-Apache HTTP server.  It is run from within the server automatically
-to switch the user when an external program has to be run under a
-different user. For more information about suexec, see the online
-document `Apache suexec Support' on the HTTP server project's
-Web site at  http://httpd.apache.org/docs/suexec.html .
-.SH OPTIONS
-.IP -V
-Display the list of compile-time settings used when \fBsuexec\fP
-was built.  No other action is taken.
-.PD
-.SH SEE ALSO
-.BR httpd(8)
diff --git a/docs/manual/LICENSE b/docs/manual/LICENSE
deleted file mode 100644
index 504f556..0000000
--- a/docs/manual/LICENSE
+++ /dev/null
@@ -1,58 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
diff --git a/docs/manual/bind.html b/docs/manual/bind.html
deleted file mode 100644
index a52d8ee..0000000
--- a/docs/manual/bind.html
+++ /dev/null
@@ -1,111 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta name="generator" content="HTML Tidy, see www.w3.org" />
-
-    <title>Setting which addresses and ports Apache uses</title>
-  </head>
-  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-
-  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-  vlink="#000080" alink="#FF0000">
-    <!--#include virtual="header.html" -->
-
-    <h1 align="CENTER">Setting which addresses and ports Apache
-    uses</h1>
-
-    <p>When Apache starts, it connects to some port and address on
-    the local machine and waits for incoming requests. By default,
-    it listens to all addresses on the machine.  However, it needs to
-    be told to listen to specific ports, or to listen to only selected 
-    addresses, or a combination. This is often combined with the 
-    Virtual Host feature which determines how Apache responds to 
-    different IP addresses, hostnames and ports.</p>
-
-    <p>The <code>Listen</code> directive tells the server to accept
-    incoming requests only on the specified port or
-    address-and-port combinations. If only a port number is
-    specified in the <code>Listen</code> directive, the server
-    listens to the given port on all interfaces. If an IP address
-    is given as well as a port, the server will listen on the given
-    port and interface. Multiple Listen directives may be used to
-    specify a number of addresses and ports to listen to. The
-    server will respond to requests from any of the listed
-    addresses and ports.</p>
-
-    <p>For example, to make the server accept connections on both
-    port 80 and port 8000, use:</p>
-<pre>
-   Listen 80
-   Listen 8000
-</pre>
-    To make the server accept connections on two specified
-    interfaces and port numbers, use 
-<pre>
-   Listen 192.170.2.1:80
-   Listen 192.170.2.5:8000
-</pre>
-    IPv6 addresses must be surrounded in square brackets, as in the
-    following example:
-<pre>
-   Listen [fe80::a00:20ff:fea7:ccea]:80
-</pre>
-
-    <h2>Special IPv6 considerations</h2>
-
-    When APR supports IPv6, Apache will create IPv6-capable listening
-    sockets by default (i.e., when no IP address is specified on the
-    Listen directive).  In other words, when APR supports IPv6,
-<pre>
-   Listen 80
-</pre>
-    is equivalent to 
-<pre>
-   Listen [::]:80
-</pre>
-    When APR does not support IPv6,
-<pre>
-   Listen 80
-</pre>
-    is equivalent to
-<pre>
-   Listen 0.0.0.0:80
-</pre>
-    On some platforms, such as NetBSD, binding to the IPv6 wildcard address 
-    ("::") does not allow Apache to accept connections on IPv4 interfaces.
-    In this situation, multiple Listen directives are required, as shown
-    below:
-<pre>
-   Listen 0.0.0.0:80
-   Listen [::]:80
-</pre>
-    Apache does not currently detect this, so the Listen statements must
-    be edited manually by the administrator.
-
-    <h2>How this works with Virtual Hosts</h2>
-
-    <p>Listen does not implement Virtual Hosts. It only tells the
-    main server what addresses and ports to listen to. If no
-    &lt;VirtualHost&gt; directives are used, the server will behave
-    the same for all accepted requests. However,
-    &lt;VirtualHost&gt; can be used to specify a different behavior
-    for one or more of the addresses and ports. To implement a
-    VirtualHost, the server must first be told to listen to the
-    address and port to be used. Then a &lt;VirtualHost&gt; section
-    should be created for a specified address and port to set the
-    behavior of this virtual host. Note that if the
-    &lt;VirtualHost&gt; is set for an address and port that the
-    server is not listening to, it cannot be accessed.</p>
-
-    <h2>See also</h2>
-    See also the documentation on <a
-    href="mod/mpm_common.html#listen">Listen directive</a>, <a
-    href="vhosts/">Virtual Hosts</a>, <a
-    href="dns-caveats.html">DNS Issues</a> and <a
-    href="mod/core.html#virtualhost">&lt;VirtualHost&gt;
-    section</a>. <!--#include virtual="footer.html" -->
-  </body>
-</html>
-
diff --git a/docs/manual/bind.html.en b/docs/manual/bind.html.en
deleted file mode 100644
index a52d8ee..0000000
--- a/docs/manual/bind.html.en
+++ /dev/null
@@ -1,111 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta name="generator" content="HTML Tidy, see www.w3.org" />
-
-    <title>Setting which addresses and ports Apache uses</title>
-  </head>
-  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-
-  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-  vlink="#000080" alink="#FF0000">
-    <!--#include virtual="header.html" -->
-
-    <h1 align="CENTER">Setting which addresses and ports Apache
-    uses</h1>
-
-    <p>When Apache starts, it connects to some port and address on
-    the local machine and waits for incoming requests. By default,
-    it listens to all addresses on the machine.  However, it needs to
-    be told to listen to specific ports, or to listen to only selected 
-    addresses, or a combination. This is often combined with the 
-    Virtual Host feature which determines how Apache responds to 
-    different IP addresses, hostnames and ports.</p>
-
-    <p>The <code>Listen</code> directive tells the server to accept
-    incoming requests only on the specified port or
-    address-and-port combinations. If only a port number is
-    specified in the <code>Listen</code> directive, the server
-    listens to the given port on all interfaces. If an IP address
-    is given as well as a port, the server will listen on the given
-    port and interface. Multiple Listen directives may be used to
-    specify a number of addresses and ports to listen to. The
-    server will respond to requests from any of the listed
-    addresses and ports.</p>
-
-    <p>For example, to make the server accept connections on both
-    port 80 and port 8000, use:</p>
-<pre>
-   Listen 80
-   Listen 8000
-</pre>
-    To make the server accept connections on two specified
-    interfaces and port numbers, use 
-<pre>
-   Listen 192.170.2.1:80
-   Listen 192.170.2.5:8000
-</pre>
-    IPv6 addresses must be surrounded in square brackets, as in the
-    following example:
-<pre>
-   Listen [fe80::a00:20ff:fea7:ccea]:80
-</pre>
-
-    <h2>Special IPv6 considerations</h2>
-
-    When APR supports IPv6, Apache will create IPv6-capable listening
-    sockets by default (i.e., when no IP address is specified on the
-    Listen directive).  In other words, when APR supports IPv6,
-<pre>
-   Listen 80
-</pre>
-    is equivalent to 
-<pre>
-   Listen [::]:80
-</pre>
-    When APR does not support IPv6,
-<pre>
-   Listen 80
-</pre>
-    is equivalent to
-<pre>
-   Listen 0.0.0.0:80
-</pre>
-    On some platforms, such as NetBSD, binding to the IPv6 wildcard address 
-    ("::") does not allow Apache to accept connections on IPv4 interfaces.
-    In this situation, multiple Listen directives are required, as shown
-    below:
-<pre>
-   Listen 0.0.0.0:80
-   Listen [::]:80
-</pre>
-    Apache does not currently detect this, so the Listen statements must
-    be edited manually by the administrator.
-
-    <h2>How this works with Virtual Hosts</h2>
-
-    <p>Listen does not implement Virtual Hosts. It only tells the
-    main server what addresses and ports to listen to. If no
-    &lt;VirtualHost&gt; directives are used, the server will behave
-    the same for all accepted requests. However,
-    &lt;VirtualHost&gt; can be used to specify a different behavior
-    for one or more of the addresses and ports. To implement a
-    VirtualHost, the server must first be told to listen to the
-    address and port to be used. Then a &lt;VirtualHost&gt; section
-    should be created for a specified address and port to set the
-    behavior of this virtual host. Note that if the
-    &lt;VirtualHost&gt; is set for an address and port that the
-    server is not listening to, it cannot be accessed.</p>
-
-    <h2>See also</h2>
-    See also the documentation on <a
-    href="mod/mpm_common.html#listen">Listen directive</a>, <a
-    href="vhosts/">Virtual Hosts</a>, <a
-    href="dns-caveats.html">DNS Issues</a> and <a
-    href="mod/core.html#virtualhost">&lt;VirtualHost&gt;
-    section</a>. <!--#include virtual="footer.html" -->
-  </body>
-</html>
-
diff --git a/docs/manual/cgi_path.html b/docs/manual/cgi_path.html
deleted file mode 100644
index 4ed74ad..0000000
--- a/docs/manual/cgi_path.html
+++ /dev/null
@@ -1,98 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta name="generator" content="HTML Tidy, see www.w3.org" />
-
-    <title>PATH_INFO Changes in the CGI Environment</title>
-  </head>
-  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-
-  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-  vlink="#000080" alink="#FF0000">
-    <!--#include virtual="header.html" -->
-
-    <h1 align="CENTER">PATH_INFO Changes in the CGI
-    Environment</h1>
-    <hr />
-
-    <h2><a id="over" name="over">Overview</a></h2>
-
-    <p>As implemented in Apache 1.1.1 and earlier versions, the
-    method Apache used to create PATH_INFO in the CGI environment
-    was counterintuitive, and could result in crashes in certain
-    cases. In Apache 1.2 and beyond, this behavior has changed.
-    Although this results in some compatibility problems with
-    certain legacy CGI applications, the Apache 1.2 behavior is
-    still compatible with the CGI/1.1 specification, and CGI
-    scripts can be easily modified (<a href="#compat">see
-    below</a>).</p>
-
-    <h2><a id="prob" name="prob">The Problem</a></h2>
-
-    <p>Apache 1.1.1 and earlier implemented the PATH_INFO and
-    SCRIPT_NAME environment variables by looking at the filename,
-    not the URL. While this resulted in the correct values in many
-    cases, when the filesystem path was overloaded to contain path
-    information, it could result in errant behavior. For example,
-    if the following appeared in a config file:</p>
-<pre>
-     Alias /cgi-ralph /usr/local/httpd/cgi-bin/user.cgi/ralph
-</pre>
-
-    <p>In this case, <code>user.cgi</code> is the CGI script, the
-    "/ralph" is information to be passed onto the CGI. If this
-    configuration was in place, and a request came for
-    "<code>/cgi-ralph/script/</code>", the code would set PATH_INFO
-    to "<code>/ralph/script</code>", and SCRIPT_NAME to
-    "<code>/cgi-</code>". Obviously, the latter is incorrect. In
-    certain cases, this could even cause the server to crash.</p>
-
-    <h2><a id="solution" name="solution">The Solution</a></h2>
-
-    <p>Apache 1.2 and later now determine SCRIPT_NAME and PATH_INFO
-    by looking directly at the URL, and determining how much of the
-    URL is client-modifiable, and setting PATH_INFO to it. To use
-    the above example, PATH_INFO would be set to
-    "<code>/script</code>", and SCRIPT_NAME to
-    "<code>/cgi-ralph</code>". This makes sense and results in no
-    server behavior problems. It also permits the script to be
-    guaranteed that
-    "<code>http://$SERVER_NAME:$SERVER_PORT$SCRIPT_NAME$PATH_INFO</code>"
-    will always be an accessible URL that points to the current
-    script, something which was not necessarily true with previous
-    versions of Apache.</p>
-
-    <p>However, the "<code>/ralph</code>" information from the
-    <code>Alias</code> directive is lost. This is unfortunate, but
-    we feel that using the filesystem to pass along this sort of
-    information is not a recommended method, and a script making
-    use of it "deserves" not to work. Apache 1.2b3 and later,
-    however, do provide <a href="#compat">a workaround.</a></p>
-
-    <h2><a id="compat" name="compat">Compatibility with Previous
-    Servers</a></h2>
-
-    <p>It may be necessary for a script that was designed for
-    earlier versions of Apache or other servers to need the
-    information that the old PATH_INFO variable provided. For this
-    purpose, Apache 1.2 (1.2b3 and later) sets an additional
-    variable, FILEPATH_INFO. This environment variable contains the
-    value that PATH_INFO would have had with Apache 1.1.1.</p>
-
-    <p>A script that wishes to work with both Apache 1.2 and
-    earlier versions can simply test for the existence of
-    FILEPATH_INFO, and use it if available. Otherwise, it can use
-    PATH_INFO. For example, in Perl, one might use:</p>
-<pre>
-    $path_info = $ENV{'FILEPATH_INFO'} || $ENV{'PATH_INFO'};
-</pre>
-
-    <p>By doing this, a script can work with all servers supporting
-    the CGI/1.1 specification, including all versions of
-    Apache.</p>
-    <!--#include virtual="footer.html" -->
-  </body>
-</html>
-
diff --git a/docs/manual/cgi_path.html.en b/docs/manual/cgi_path.html.en
deleted file mode 100644
index 4ed74ad..0000000
--- a/docs/manual/cgi_path.html.en
+++ /dev/null
@@ -1,98 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta name="generator" content="HTML Tidy, see www.w3.org" />
-
-    <title>PATH_INFO Changes in the CGI Environment</title>
-  </head>
-  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-
-  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-  vlink="#000080" alink="#FF0000">
-    <!--#include virtual="header.html" -->
-
-    <h1 align="CENTER">PATH_INFO Changes in the CGI
-    Environment</h1>
-    <hr />
-
-    <h2><a id="over" name="over">Overview</a></h2>
-
-    <p>As implemented in Apache 1.1.1 and earlier versions, the
-    method Apache used to create PATH_INFO in the CGI environment
-    was counterintuitive, and could result in crashes in certain
-    cases. In Apache 1.2 and beyond, this behavior has changed.
-    Although this results in some compatibility problems with
-    certain legacy CGI applications, the Apache 1.2 behavior is
-    still compatible with the CGI/1.1 specification, and CGI
-    scripts can be easily modified (<a href="#compat">see
-    below</a>).</p>
-
-    <h2><a id="prob" name="prob">The Problem</a></h2>
-
-    <p>Apache 1.1.1 and earlier implemented the PATH_INFO and
-    SCRIPT_NAME environment variables by looking at the filename,
-    not the URL. While this resulted in the correct values in many
-    cases, when the filesystem path was overloaded to contain path
-    information, it could result in errant behavior. For example,
-    if the following appeared in a config file:</p>
-<pre>
-     Alias /cgi-ralph /usr/local/httpd/cgi-bin/user.cgi/ralph
-</pre>
-
-    <p>In this case, <code>user.cgi</code> is the CGI script, the
-    "/ralph" is information to be passed onto the CGI. If this
-    configuration was in place, and a request came for
-    "<code>/cgi-ralph/script/</code>", the code would set PATH_INFO
-    to "<code>/ralph/script</code>", and SCRIPT_NAME to
-    "<code>/cgi-</code>". Obviously, the latter is incorrect. In
-    certain cases, this could even cause the server to crash.</p>
-
-    <h2><a id="solution" name="solution">The Solution</a></h2>
-
-    <p>Apache 1.2 and later now determine SCRIPT_NAME and PATH_INFO
-    by looking directly at the URL, and determining how much of the
-    URL is client-modifiable, and setting PATH_INFO to it. To use
-    the above example, PATH_INFO would be set to
-    "<code>/script</code>", and SCRIPT_NAME to
-    "<code>/cgi-ralph</code>". This makes sense and results in no
-    server behavior problems. It also permits the script to be
-    guaranteed that
-    "<code>http://$SERVER_NAME:$SERVER_PORT$SCRIPT_NAME$PATH_INFO</code>"
-    will always be an accessible URL that points to the current
-    script, something which was not necessarily true with previous
-    versions of Apache.</p>
-
-    <p>However, the "<code>/ralph</code>" information from the
-    <code>Alias</code> directive is lost. This is unfortunate, but
-    we feel that using the filesystem to pass along this sort of
-    information is not a recommended method, and a script making
-    use of it "deserves" not to work. Apache 1.2b3 and later,
-    however, do provide <a href="#compat">a workaround.</a></p>
-
-    <h2><a id="compat" name="compat">Compatibility with Previous
-    Servers</a></h2>
-
-    <p>It may be necessary for a script that was designed for
-    earlier versions of Apache or other servers to need the
-    information that the old PATH_INFO variable provided. For this
-    purpose, Apache 1.2 (1.2b3 and later) sets an additional
-    variable, FILEPATH_INFO. This environment variable contains the
-    value that PATH_INFO would have had with Apache 1.1.1.</p>
-
-    <p>A script that wishes to work with both Apache 1.2 and
-    earlier versions can simply test for the existence of
-    FILEPATH_INFO, and use it if available. Otherwise, it can use
-    PATH_INFO. For example, in Perl, one might use:</p>
-<pre>
-    $path_info = $ENV{'FILEPATH_INFO'} || $ENV{'PATH_INFO'};
-</pre>
-
-    <p>By doing this, a script can work with all servers supporting
-    the CGI/1.1 specification, including all versions of
-    Apache.</p>
-    <!--#include virtual="footer.html" -->
-  </body>
-</html>
-
diff --git a/docs/manual/configuring.html.en b/docs/manual/configuring.html.en
deleted file mode 100644
index f0b3e2e..0000000
--- a/docs/manual/configuring.html.en
+++ /dev/null
@@ -1,244 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta name="generator" content="HTML Tidy, see www.w3.org" />
-
-    <title>Configuration Files</title>
-  </head>
-  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-
-  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-  vlink="#000080" alink="#FF0000">
-    <!--#include virtual="header.html" -->
-
-    <h1 align="CENTER">Configuration Files</h1>
-
-    <ul>
-      <li><a href="#main">Main Configuration Files</a></li>
-
-      <li><a href="#syntax">Syntax of the Configuration
-      Files</a></li>
-
-      <li><a href="#modules">Modules</a></li>
-
-      <li><a href="#scope">Scope of Directives</a></li>
-
-      <li><a href="#htaccess">.htaccess Files</a></li>
-    </ul>
-    <hr />
-
-    <h2><a id="main" name="main">Main Configuration Files</a></h2>
-
-    <table border="1">
-      <tr>
-        <td valign="top"><strong>Related Modules</strong><br />
-         <br />
-         <a href="mod/mod_mime.html">mod_mime</a><br />
-         </td>
-
-        <td valign="top"><strong>Related Directives</strong><br />
-         <br />
-         <a
-        href="mod/core.html#ifdefine">&lt;IfDefine&gt;</a><br />
-         <a href="mod/core.html#include">Include</a><br />
-         <a
-        href="mod/mod_mime.html#typesconfig">TypesConfig</a><br />
-         </td>
-      </tr>
-    </table>
-
-    <p>Apache is configured by placing <a
-    href="mod/directives.html">directives</a> in plain text
-    configuration files. The main configuration file is usually
-    called <code>httpd.conf</code>. The location of this file is
-    set at compile-time, but may be overridden with the
-    <code>-f</code> command line flag. In addition, other
-    configuration files may be added using the <code><a
-    href="mod/core.html#include">Include</a></code> directive. Any
-    directive may be placed in any of these configuration files.
-    Changes to the main configuration files are only recognized by
-    Apache when it is started or restarted.</p>
-
-    <p>New with Apache 1.3.13 is a feature where if any
-    configuration file is actually a directory, Apache will enter
-    that directory and parse any files (and subdirectories) found
-    there as configuration files. One possible use for this would
-    be to add VirtualHosts by creating small configuration files
-    for each host, and placing them in such a configuration
-    directory. Thus, you can add or remove VirtualHosts without
-    editing any files at all, simply adding or deleting them. This
-    makes automating such processes much easier.</p>
-
-    <p>The server also reads a file containing mime document types;
-    the filename is set by the <a
-    href="mod/mod_mime.html#typesconfig">TypesConfig</a> directive,
-    and is <code>mime.types</code> by default.</p>
-    <hr />
-
-    <h2><a id="syntax" name="syntax">Syntax of the Configuration
-    Files</a></h2>
-
-    <p>Apache configuration files contain one directive per line.
-    The back-slash "\" may be used as the last character on a line
-    to indicate that the directive continues onto the next line.
-    There must be no other characters or white space between the
-    back-slash and the end of the line.</p>
-
-    <p>Directives in the configuration files are case-insensitive,
-    but arguments to directives are often case sensitive. Lines
-    which begin with the hash character "#" are considered
-    comments, and are ignored. Comments may <strong>not</strong> be
-    included on a line after a configuration directive. Blank lines
-    and white space occurring before a directive are ignored, so
-    you may indent directives for clarity.</p>
-
-    <p>You can check your configuration files for syntax errors
-    without starting the server by using <code>apachectl
-    configtest</code> or the <code>-t</code> command line
-    option.</p>
-    <hr />
-
-    <h2><a id="modules" name="modules">Modules</a></h2>
-
-    <table border="1">
-      <tr>
-        <td valign="top"><strong>Related Modules</strong><br />
-         <br />
-         <a href="mod/mod_so.html">mod_so</a><br />
-         </td>
-
-        <td valign="top"><strong>Related Directives</strong><br />
-         <br />
-         <a href="mod/core.html#addmodule">AddModule</a><br />
-         <a
-        href="mod/core.html#clearmodulelist">ClearModuleList</a><br />
-         <a
-        href="mod/core.html#ifmodule">&lt;IfModule&gt;</a><br />
-         <a href="mod/mod_so.html#loadmodule">LoadModule</a><br />
-         </td>
-      </tr>
-    </table>
-
-    <p>Apache is a modular server. This implies that only the most
-    basic functionality is included in the core server. Extended
-    features are available through <a
-    href="mod/index-bytype.html">modules</a> which can be loaded
-    into Apache. By default, a <a
-    href="mod/module-dict.html#Status">base</a> set of modules is
-    included in the server at compile-time. If the server is
-    compiled to use <a href="dso.html">dynamically loaded</a>
-    modules, then modules can be compiled separately and added at
-    any time using the <a
-    href="mod/mod_so.html#loadmodule">LoadModule</a> directive.
-    Otherwise, Apache must be recompiled to add or remove modules.
-    Configuration directives may be included conditional on a
-    presence of a particular module by enclosing them in an <a
-    href="mod/core.html#ifmodule">&lt;IfModule&gt;</a> block.</p>
-
-    <p>To see which modules are currently compiled into the server,
-    you can use the <code>-l</code> command line option.</p>
-    <hr />
-
-    <h2><a id="scope" name="scope">Scope of Directives</a></h2>
-
-    <table border="1">
-      <tr>
-        <td valign="top"><strong>Related Directives</strong><br />
-         <br />
-         <a
-        href="mod/core.html#directory">&lt;Directory&gt;</a><br />
-         <a
-        href="mod/core.html#directorymatch">&lt;DirectoryMatch&gt;</a><br />
-         <a href="mod/core.html#files">&lt;Files&gt;</a><br />
-         <a
-        href="mod/core.html#filesmatch">&lt;FilesMatch&gt;</a><br />
-         <a
-        href="mod/core.html#location">&lt;Location&gt;</a><br />
-         <a
-        href="mod/core.html#locationmatch">&lt;LocationMatch&gt;</a><br />
-         <a
-        href="mod/core.html#virtualhost">&lt;VirtualHost&gt;</a><br />
-         </td>
-      </tr>
-    </table>
-
-    <p>Directives placed in the main configuration files apply to
-    the entire server. If you wish to change the configuration for
-    only a part of the server, you can scope your directives by
-    placing them in <code><a
-    href="mod/core.html#directory">&lt;Directory&gt;</a>, <a
-    href="mod/core.html#directorymatch">&lt;DirectoryMatch&gt;</a>,
-    <a href="mod/core.html#files">&lt;Files&gt;</a>, <a
-    href="mod/core.html#filesmatch">&lt;FilesMatch&gt;</a>, <a
-    href="mod/core.html#location">&lt;Location&gt;</a>,</code> and
-    <code><a
-    href="mod/core.html#locationmatch">&lt;LocationMatch&gt;</a></code>
-    sections. These sections limit the application of the
-    directives which they enclose to particular filesystem
-    locations or URLs. They can also be nested, allowing for very
-    fine grained configuration.</p>
-
-    <p>Apache has the capability to serve many different websites
-    simultaneously. This is called <a href="vhosts/">Virtual
-    Hosting</a>. Directives can also be scoped by placing them
-    inside <code><a
-    href="mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code>
-    sections, so that they will only apply to requests for a
-    particular website.</p>
-
-    <p>Although most directives can be placed in any of these
-    sections, some directives do not make sense in some contexts.
-    For example, directives controlling process creation can only
-    be placed in the main server context. To find which directives
-    can be placed in which sections, check the <a
-    href="mod/directive-dict.html#Context">Context</a> of the
-    directive. For further information, we provide details on <a
-    href="sections.html">How Directory, Location and Files sections
-    work</a>.</p>
-    <hr />
-
-    <h2><a id="htaccess" name="htaccess">.htaccess Files</a></h2>
-
-    <table border="1">
-      <tr>
-        <td valign="top"><strong>Related Directives</strong><br />
-         <br />
-         <a
-        href="mod/core.html#accessfilename">AccessFileName</a><br />
-         <a
-        href="mod/core.html#allowoverride">AllowOverride</a><br />
-         </td>
-      </tr>
-    </table>
-
-    <p>Apache allows for decentralized management of configuration
-    via special files placed inside the web tree. The special files
-    are usually called <code>.htaccess</code>, but any name can be
-    specified in the <a
-    href="mod/core.html#accessfilename"><code>AccessFileName</code></a>
-    directive. Directives placed in <code>.htaccess</code> files
-    apply to the directory where you place the file, and all
-    sub-directories. The <code>.htaccess</code> files follow the
-    same syntax as the main configuration files. Since
-    <code>.htaccess</code> files are read on every request, changes
-    made in these files take immediate effect.</p>
-
-    <p>To find which directives can be placed in
-    <code>.htaccess</code> files, check the <a
-    href="mod/directive-dict.html#Context">Context</a> of the
-    directive. The server administrator further controls what
-    directives may be placed in <code>.htaccess</code> files by
-    configuring the <a
-    href="mod/core.html#allowoverride"><code>AllowOverride</code></a>
-    directive in the main configuration files.</p>
-
-    <p>For more information on <code>.htaccess</code> files, see
-    Ken Coar's tutorial on <a
-    href="http://apache-server.com/tutorials/ATusing-htaccess.html">
-    Using .htaccess Files with Apache</a>.</p>
-    <!--#include virtual="footer.html" -->
-  </body>
-</html>
-
diff --git a/docs/manual/configuring.html.ja.jis b/docs/manual/configuring.html.ja.jis
deleted file mode 100644
index c1b41e5..0000000
--- a/docs/manual/configuring.html.ja.jis
+++ /dev/null
@@ -1,247 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<html>
-<head>
-<title>$B@_Dj%U%!%$%k(B</title>
-</head>
-<!-- English revision: 1.8 -->
-
-<!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-<body
- bgcolor="#FFFFFF"
- text="#000000"
- link="#0000FF"
- vlink="#000080"
- alink="#FF0000"
->
-<!--#include virtual="header.html" -->
-<h1 align="CENTER">$B%U%!%$%k$N@_Dj(B</h1>
-
-<ul>
-<li><a href="#main">$B%a%$%s$N@_Dj%U%!%$%k(B</a></li>
-<li><a href="#syntax">$B@_Dj%U%!%$%k$N9=J8(B</a></li>
-<li><a href="#modules">$B%b%8%e!<%k(B</a></li>
-<li><a href="#scope">$B%G%#%l%/%F%#%V$NE,MQHO0O(B</a></li>
-<li><a href="#htaccess">.htaccess $B%U%!%$%k(B</a></li>
-<li><a href="#logs">$B%m%0%U%!%$%k(B</a></li>
-</ul>
-
-<hr>
-
-<h2><a name="main">$B%a%$%s$N@_Dj%U%!%$%k(B</a></h2>
-
-<table border="1"><tr><td valign="top">
-<strong>$B4XO"%b%8%e!<%k(B</strong><br><br>
-<a href="mod/mod_mime.html">mod_mime</a><br>
-</td>
-
-<td valign="top">
-<strong>$B4XO"%G%#%l%/%F%#%V(B</strong><br><br>
-<a href="mod/core.html#ifdefine">&lt;IfDefine&gt;</a><br>
-<a href="mod/core.html#include">Include</a><br>
-<a href="mod/mod_mime.html#typesconfig">TypesConfig</a><br>
-</td></tr></table>
-
-<p>Apache $B$O(B <a href="mod/directives.html">$B%G%#%l%/%F%#%V(B</a> $B$r(B
-$B@_Dj%U%!%$%k$KJ?J8$G=q$/$3$H$K$h$j@_Dj$7$^$9!#%a%$%s$N(B
-$B@_Dj%U%!%$%k$OIaDL$O(B <code>httpd.conf</code> $B$H$$$&L>A0$G$9!#(B
-$B$3$N%U%!%$%k$N0LCV$O%3%s%Q%$%k;~$K@_Dj$5$l$^$9$,!"%3%^%s%I%i%$%s$N(B
-<code>-f</code> $B%U%i%0$K$h$j>e=q$-$G$-$^$9!#$=$N>e!"B>$N@_Dj%U%!%$%k$,(B
-<code><a href="mod/core.html#include">Include</a></code> $B%G%#%l%/%F%#%V(B
-$B$K$h$C$FDI2C$5$l$F$$$k$+$b$7$l$^$;$s!#$I$N%G%#%l%/%F%#%V$b(B
-$B$3$l$i$N@_Dj%U%!%$%k$N$I$l$K$G$bF~$l$i$l$^$9!#(BApache $B$O5/F0;~$+(B
-$B:F5/F0;~$N$_%a%$%s@_Dj%U%!%$%k$NJQ99$rG'<1$7$^$9!#(B</p>
-
-<p>Apache 1.3.13 $B$N?7$7$$5!G=$H$7$F!"@_Dj%U%!%$%k$,<B:]$O%G%#%l%/%H%j$G(B
-$B$"$k$H$-$K$O$=$N%G%#%l%/%H%j$G8+$D$+$C$?$9$Y$F$N%U%!%$%k(B
-($B$H%5%V%G%#%l%/%H%j(B) $B$r2r@O$9$k$H$$$&$b$N$,$"$j$^$9!#MxMQK!$H$7$F$O!"(B
-$B%P!<%A%c%k%[%9%H$rDI2C$9$k$H$-$K!"$=$l$>$l$N%[%9%H$KBP$7$F>.$5$J@_Dj(B
-$B%U%!%$%k$r:n$j!"@_Dj%G%#%l%/%H%j$KCV$/$H$$$&$b$N$,5s$2$i$l$^$9!#(B
-$B$3$&$9$k$H!"C1$K%U%!%$%k$NDI2C!":o=|$r$9$k$3$H$K$h$jA4$/%U%!%$%k$r(B
-$BJT=8$9$k$3$H$J$/%P!<%A%c%k%[%9%H$NDI2C!":o=|$,$G$-$^$9!#$3$l$O<+F02=$r(B
-$B$:$C$H4JC1$K$7$^$9!#(B</p>
-
-<p>
-$B%5!<%P$O(B mime $B%I%-%e%a%s%H%?%$%W$r4^$s$G$$$k%U%!%$%k$bFI$_9~$_$^$9!#(B
-$B%U%!%$%kL>$O(B <a href="mod/mod_mime.html#typesconfig"
->TypesConfig</a> $B$G@_Dj$5$l!"%G%U%)%k%H$G(B <code>mime.types</code>
-$B$K$J$C$F$$$^$9!#(B</p>
-<hr>
-
-<h2><a name="syntax">$B@_Dj%U%!%$%k$N9=J8(B</a></h2>
-
-<p>Apache $B@_Dj%U%!%$%k$O(B1$B9T$K(B1$B$D$N%G%#%l%/%F%#%V$+$i$J$j$^$9!#(B
-$B%P%C%/%9%i%C%7%e(B "\" $B$O%G%#%l%/%F%#%V$,<!$N9T$K7QB3$7$F$$$k$3$H$r(B
-$B<($9$?$a$K9T$N:G8e$NJ8;z$H$7$F;H$o$l$F$$$k$+$b$7$l$^$;$s!#(B
-$B9T$N:G8e$H%P%C%/%9%i%C%7%e$N4V$KB>$NJ8;z$d6uGr$,$"$C$F$O$$$1$^$;$s!#(B</p>
-
-<p>$B@_Dj%U%!%$%k$N%G%#%l%/%F%#%V$OBgJ8;z>.J8;z$r6hJL$7$^$;$s$,!"(B
-$B0z?t$K$O$7$P$7$P6hJL$9$k$b$N$,$"$j$^$9!#%O%C%7%eJ8;z(B "#" $B$G;O$^$k9T$O(B
-$B%3%a%s%H$H8+$J$5$l$FL5;k$5$l$^$9!#@_Dj%G%#%l%/%F%#%V$N8e$N9T$G$O(B
-$B%3%a%s%H$,4^$^$l$F$$$F$O(B<strong>$B$$$1$^$;$s(B</strong>$B!#%G%#%l%/%F%#%V$N(B
-$BA0$N6u9T$H6uGr$OL5;k$5$l$^$9$N$G!"$o$+$j$d$9$/$9$k$?$a$K%G%#%l%/%F%#%V$r(B
-$B%$%s%G%s%H$9$k$3$H$,$G$-$^$9!#(B</p>
-
-<p>$B@_Dj%U%!%$%k$N9=J8%(%i!<$O(B
-<code>apachectl configtest</code> $B$+%3%^%s%I%i%$%s%*%W%7%g%s(B
-<code>-t</code> $B$r;H$C$FD4$Y$i$l$^$9!#(B</p>
-
-<hr>
-
-<h2><a name="modules">$B%b%8%e!<%k(B</a></h2>
-
-<table border="1"><tr><td valign="top">
-<strong>$B4XO"%b%8%e!<%k(B</strong><br><br>
-<a href="mod/mod_so.html">mod_so</a><br>
-</td>
-<td valign="top">
-<strong>$B4XO"%G%#%l%/%F%#%V(B</strong><br><br>
-<a href="mod/core.html#addmodule">AddModule</a><br>
-<a href="mod/core.html#clearmodulelist">ClearModuleList</a><br>
-<a href="mod/core.html#ifmodule">&lt;IfModule&gt;</a><br>
-<a href="mod/mod_so.html#loadmodule">LoadModule</a><br>
-</td></tr></table>
-
-<p>Apache $B$O%b%8%e!<%k2=$5$l$?%5!<%P$G$9!#%3%"%5!<%P$K$O(B
-$B0lHV4pK\E*$J5!G=$@$1$,4^$^$l$F$$$^$9!#3HD%5!G=$O(B Apache $B$K(B
-$B%m!<%I$5$l$k(B<a href="mod/index-bytype.html">$B%b%8%e!<%k(B</a>$B$H$7$F(B
-$BMxMQ2DG=$G$9!#%G%U%)%k%H$G$O%3%s%Q%$%k;~$K%b%8%e!<%k$N(B<a
-href="mod/module-dict.html#Status">$B4pK\(B</a>$B%;%C%H$,(B
-$B%5!<%P$K4^$^$l$^$9!#%5!<%P$,(B<a href="dso.html">$BF0E*%m!<%I(B</a>$B%b%8%e!<%k$r(B
-$B;H$&$h$&$K%3%s%Q%$%k$5$l$F$$$k>l9g$O!"%b%8%e!<%k$rJL$K%3%s%Q%$%k$7$F!"(B
-$B$$$D$G$b(B <a href="mod/mod_so.html#loadmodule">LoadModule</a>
-$B%G%#%l%/%F%#%V$r;H$C$FDI2C$G$-$^$9!#$=$&$G$J$$>l9g$O!"%b%8%e!<%k$N(B
-$BDI2C$d:o=|$r$9$k$?$a$K$O(B Apache $B$r:F%3%s%Q%$%k$9$kI,MW$,$"$j$^$9!#(B
-$B@_Dj%G%#%l%/%F%#%V$O(B <a
-href="mod/core.html#ifmodule">&lt;IfModule&gt;</a> $B%V%m%C%/$K(B
-$BF~$l$k$3$H$GFCDj$N%b%8%e!<%k$,B8:_$9$k$H$-$@$1(B
-$B@_Dj%U%!%$%k$K4^$^$l$k$h$&$K$9$k$3$H$,$G$-$^$9!#(B</p>
-
-<p>$B%3%^%s%I%i%$%s%*%W%7%g%s(B <code>-l</code> $B$r;H$C$F(B
-$B8=;~E@$G$I$N%b%8%e!<%k$,%5!<%P$K%3%s%Q%$%k$5$l$F$$$k$+$r(B
-$BCN$k$3$H$,$G$-$^$9!#(B
-
-<hr>
-
-<h2><a name="scope">$B%G%#%l%/%F%#%V$NE,MQHO0O(B</a></h2>
-
-<table border="1"><tr><td valign="top">
-<strong>$B4XO"%G%#%l%/%F%#%V(B</strong><br><br>
-<a href="mod/core.html#directory">&lt;Directory&gt;</a><br>
-<a href="mod/core.html#directorymatch">&lt;DirectoryMatch&gt;</a><br>
-<a href="mod/core.html#files">&lt;Files&gt;</a><br>
-<a href="mod/core.html#filesmatch">&lt;FilesMatch&gt;</a><br>
-<a href="mod/core.html#location">&lt;Location&gt;</a><br>
-<a href="mod/core.html#locationmatch">&lt;LocationMatch&gt;</a><br>
-<a href="mod/core.html#virtualhost">&lt;VirtualHost&gt;</a><br>
-</td></tr></table>
-
-<p>$B%a%$%s@_Dj%U%!%$%k$K$"$k%G%#%l%/%F%#%V$O%5!<%PA4BN$KE,MQ$5$l$^$9!#(B
-$B%5!<%P$N0lItJ,$N@_Dj$@$1$rJQ99$7$?$$>l9g$O(B
-<code><a href="mod/core.html#directory">&lt;Directory&gt;</a>,
-<a href="mod/core.html#directorymatch">&lt;DirectoryMatch&gt;</a>,
-<a href="mod/core.html#files">&lt;Files&gt;</a>,
-<a href="mod/core.html#filesmatch">&lt;FilesMatch&gt;</a>,
-<a href="mod/core.html#location">&lt;Location&gt;</a>,
-<a href="mod/core.html#locationmatch">&lt;LocationMatch&gt;</a>
-</code>
-$B%;%/%7%g%s$NCf$KCV$/$3$H$GE,MQHO0O$r7h$a$i$l$^$9!#$3$l$i$N%;%/%7%g%s$O(B
-$B$=$NCf$K$"$k%G%#%l%/%F%#%V$NE,MQHO0O$rFCDj$N%U%!%$%k%7%9%F%`$N0LCV$d(B
-URL $B$K8BDj$7$^$9!#Hs>o$K:YN3EY$N@_Dj$r2DG=$K$9$k$?$a$K!"%;%/%7%g%s$r(B
-$BF~$l;R$K$9$k$3$H$b$G$-$^$9!#(B</p>
-
-<p>Apache $B$OF1;~$KB?$/$N0c$&%&%'%V%5%$%H$r07$&G=NO$,$"$j$^$9!#(B
-$B$3$l$O(B <a href="vhosts/">$B%P!<%A%c%k%[%9%H(B</a> $B$H8F$P$l$F$$$^$9!#(B
-$BFCDj$N%&%'%V%5%$%H$K$N$_E,MQ$5$l$k$h$&$K$9$k$?$a$K!"%G%#%l%/%F%#%V$O(B
-<code><a href="mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code>
-$B%;%/%7%g%s$NCf$KCV$/$3$H$G$bE,MQHO0O$rJQ$($k$3$H$,$G$-$^$9!#(B</p>
-
-<p>$B$[$H$s$I$N%G%#%l%/%F%#%V$O$I$N%;%/%7%g%s$K$G$b=q$1$^$9$,!"(B
-$BCf$K$O%3%s%F%-%9%H$K$h$C$F$O0UL#$r$J$5$J$$$b$N$b$"$j$^$9!#Nc$($P!"(B
-$B%W%m%;%9$N:n@.$r@)8f$7$F$$$k%G%#%l%/%F%#%V$O%a%$%s%5!<%P$N%3%s%F%-%9%H$K(B
-$B$N$_=q$/$3$H$,$G$-$^$9!#$I$N%G%#%l%/%F%#%V$r$I$N%;%/%7%g%s$K=q$/$3$H$,(B
-$B$G$-$k$+$rCN$k$?$a$K$O%G%#%l%/%F%#%V$N(B
-<a href="mod/directive-dict.html#Context">$B%3%s%F%-%9%H(B</a>$B$rD4$Y$F$/$@$5$$!#(B
-$B>\$7$$>pJs$O!"(B<a
-href="sections.html">Directory, Location, Files $B%;%/%7%g%s$NF0:nK!(B</a>
-$B$K$"$j$^$9!#(B</p>
-
-<hr>
-
-<h2><a name="htaccess">.htaccess $B%U%!%$%k(B</a></h2>
-
-<table border="1"><tr><td valign="top">
-<strong>$B4XO"%G%#%l%/%F%#%V(B</strong><br><br>
-<a href="mod/core.html#accessfilename">AccessFileName</a><br>
-<a href="mod/core.html#allowoverride">AllowOverride</a><br>
-</td></tr></table>
-
-<p>Apache $B$G$O%&%'%V%D%j!<$NCf$KCV$+$l$?FCJL$J%U%!%$%k$r;H$C$F(B
-$BHsCf1{=88"E*$J@_Dj4IM}$r$G$-$^$9!#$=$NFCJL$J%U%!%$%k$OIaDL$O(B
-<code>.htaccess</code> $B$H$$$&L>A0$G!"(B
-<a href="mod/core.html#accessfilename"><code
->AccessFileName</code></a> $B%G%#%l%/%F%#%V$G$I$s$JL>A0$G$b;XDj$G$-$^$9!#(B
-<code>.htaccess</code> $B%U%!%$%k$K=q$+$l$?%G%#%l%/%F%#%V$O%U%!%$%k$r(B
-$BCV$$$?%G%#%l%/%H%j$H$=$NA4$F$N%5%V%G%#%l%/%H%j$KE,MQ$5$l$^$9!#(B
-<code>.htaccess</code> $B%U%!%$%k$O$9$Y$F$N%j%/%(%9%H$G(B
-$BFI$_9~$^$l$k$?$a!"JQ99$O$9$0$KH?1G$5$l$^$9!#(B
-
-<p>$B$I$N%G%#%l%/%F%#%V$,(B <code>.htaccess</code> $B%U%!%$%k$K=q$1$k$+$r(B
-$BD4$Y$k$K$O!"%G%#%l%/%F%#%V$N(B
-<a href="mod/directive-dict.html#Context">$B%3%s%F%-%9%H(B</a> $B$rD4$Y$F$/$@$5$$!#(B
-$B%5!<%P4IM}<T$O$5$i$K%a%$%s@_Dj%U%!%$%k$N(B <a
-href="mod/core.html#allowoverride"><code>AllowOverride</code></a>
-$B$r@_Dj$9$k$3$H$G$I$N%G%#%l%/%F%#%V$r(B <code>.htaccess</code> $B%U%!%$%k$K(B
-$B=q$1$k$h$&$K$9$k$+$r@)8f$9$k$3$H$,$G$-$^$9!#(B</p>
-
-<hr>
-
-<h2><a name="logs">$B%m%0%U%!%$%k(B</a></h2>
-<!-- XXX: This section should be moved to its own file -->
-<h3>$B%;%-%e%j%F%#$K4X$9$k7Y9p(B</h3>
-<p>
-Apache $B$,%m%0%U%!%$%k$r=q$$$F$$$k%G%#%l%/%H%j$K=q$-9~$a$k?M$OC/$G$b(B
-$B$[$\3N<B$K%5!<%P$,5/F0$5$l$?(B uid $B$N%"%/%;%9$r<hF@$G$-$^$9!#(B
-$B$=$7$F$=$l$OIaDL(B root $B$G$9!#$=$N7k2L$r$h$/$o$+$i$:$K%m%0$,J]4I$5$l$F$$$k(B
-$B%G%#%l%/%H%j$K=q$-9~$_8"8B$rM?$($?$j(B<em>$B$7$J$$(B</em>$B$G$/$@$5$$!#>\:Y$O(B
-<a href="misc/security_tips.html">$B%;%-%e%j%F%#>pJs(B</a>$B$r;2>H$7$F$/$@$5$$!#(B</p>
-
-<h3>pid $B%U%!%$%k(B</h3>
-
-<p>$B5/F0;~$K(B Apache $B$O?F(B httpd $B%W%m%;%9$N%W%m%;%9(B ID $B$r(B
-<code>logs/httpd.pid</code> $B%U%!%$%k$KJ]B8$7$^$9!#$3$N%U%!%$%kL>$O(B
-<a href="mod/core.html#pidfile">PidFile</a>
-$B%G%#%l%/%F%#%V$GJQ99$9$k$3$H$,$G$-$^$9!#%W%m%;%9(B ID $B$O4IM}<T$,%G!<%b%s$r(B
-$B:F5/F0$7$?$j=*N;$7$?$j$9$k$?$a$K;H$$$^$9!#(BUnix $B$G$O(B HUP $B$H(B USR1 $B%7%0%J%k$G(B
-$B%G!<%b%s$,@_Dj%U%!%$%k$r:FFI$_9~$_$7$^$9!#(BTERM $B%7%0%J%k$O%G!<%b%s$r(B
-$BM%2m$K=*N;$5$;$^$9!#(BWindows $B$G$O!"Be$o$j$K%3%^%s%I%i%$%s%*%W%7%g%s(B -k $B$r(B
-$B;H$$$^$9!#(B
-$B>\$7$$>pJs$O(B<a href="stopping.html">$B5/F0$H=*N;(B</a>$B$r;2>H$7$F$/$@$5$$!#(B</p>
-
-<p>
-$B%W%m%;%9$,0[>o=*N;$9$k(B ($B$b$7$/$O(B kill $B$5$l$k(B) $B$H!";R(B httpd $B%W%m%;%9$r(B
-kill $B$9$kI,MW$,$"$j$^$9!#(B</p>
-
-<h3>$B%(%i!<%m%0(B</h3>
-
-<p>$B%5!<%P$O%(%i!<%a%C%;!<%8$r%m%0%U%!%$%k$K5-O?$7$^$9!#%G%U%)%k%H$O!"(BUnix
-$B$G$O(B <code>logs/error_log</code> $B$G(B Windows $B$H(B OS/2 $B$G$O(B
-<code>logs/error.log</code> $B$G$9!#%U%!%$%kL>$O(B <a
-href="mod/core.html#errorlog">ErrorLog</a> $B%G%#%l%/%F%#%V$G@_Dj$G$-$^$9!#(B
-$B0c$&(B<a
-href="mod/core.html#virtualhost">$B%P!<%A%c%k%[%9%H(B</a>
-$B$K0c$&%(%i!<%m%0$r@_Dj$9$k$3$H$,$G$-$^$9!#(B</p>
-
-<h3>$BE>Aw%m%0(B</h3>
-
-<p>$B%5!<%P$OIaDL$=$l$>$l$N%j%/%(%9%H$rE>Aw%U%!%$%k$K%m%0$r<h$j$^$9!#(B
-$B%G%U%)%k%H$O(B Unix $B$G$O(B <code>logs/access_log</code> $B$G(B Windows $B$H(B
-OS/2 $B$G$O(B <code>logs/access.log</code> $B$G$9!#%U%!%$%kL>$O(B
-<a href="mod/mod_log_config.html#customlog">CustomLog</a>
-$B%G%#%l%/%F%#%V$r$G@_Dj$G$-$^$9!#0c$&(B<a
-href="mod/core.html#virtualhost">$B%P!<%A%c%k%[%9%H(B</a>$B$K(B
-$B0c$&E>Aw%m%0$r@_Dj$9$k$3$H$,$G$-$^$9!#(B</p>
-
-
-<!--#include virtual="footer.html" -->
-</body>
-</html>
diff --git a/docs/manual/content-negotiation.html b/docs/manual/content-negotiation.html
deleted file mode 100644
index b5af8bf..0000000
--- a/docs/manual/content-negotiation.html
+++ /dev/null
@@ -1,651 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta name="generator" content="HTML Tidy, see www.w3.org" />
-
-    <title>Apache Content Negotiation</title>
-  </head>
-  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-
-  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-  vlink="#000080" alink="#FF0000">
-    <!--#include virtual="header.html" -->
-
-    <h1 align="CENTER">Content Negotiation</h1>
-
-    <p>Apache's support for content negotiation has been updated to
-    meet the HTTP/1.1 specification. It can choose the best
-    representation of a resource based on the browser-supplied
-    preferences for media type, languages, character set and
-    encoding. It is also implements a couple of features to give
-    more intelligent handling of requests from browsers which send
-    incomplete negotiation information.</p>
-
-    <p>Content negotiation is provided by the <a
-    href="mod/mod_negotiation.html">mod_negotiation</a> module,
-    which is compiled in by default.</p>
-    <hr />
-
-    <h2>About Content Negotiation</h2>
-
-    <p>A resource may be available in several different
-    representations. For example, it might be available in
-    different languages or different media types, or a combination.
-    One way of selecting the most appropriate choice is to give the
-    user an index page, and let them select. However it is often
-    possible for the server to choose automatically. This works
-    because browsers can send as part of each request information
-    about what representations they prefer. For example, a browser
-    could indicate that it would like to see information in French,
-    if possible, else English will do. Browsers indicate their
-    preferences by headers in the request. To request only French
-    representations, the browser would send</p>
-<pre>
-  Accept-Language: fr
-</pre>
-
-    <p>Note that this preference will only be applied when there is
-    a choice of representations and they vary by language.</p>
-
-    <p>As an example of a more complex request, this browser has
-    been configured to accept French and English, but prefer
-    French, and to accept various media types, preferring HTML over
-    plain text or other text types, and preferring GIF or JPEG over
-    other media types, but also allowing any other media type as a
-    last resort:</p>
-<pre>
-  Accept-Language: fr; q=1.0, en; q=0.5
-  Accept: text/html; q=1.0, text/*; q=0.8, image/gif; q=0.6,
-        image/jpeg; q=0.6, image/*; q=0.5, */*; q=0.1
-</pre>
-    Apache 1.2 supports 'server driven' content negotiation, as
-    defined in the HTTP/1.1 specification. It fully supports the
-    Accept, Accept-Language, Accept-Charset and Accept-Encoding
-    request headers. Apache 1.3.4 also supports 'transparent'
-    content negotiation, which is an experimental negotiation
-    protocol defined in RFC 2295 and RFC 2296. It does not offer
-    support for 'feature negotiation' as defined in these RFCs. 
-
-    <p>A <strong>resource</strong> is a conceptual entity
-    identified by a URI (RFC 2396). An HTTP server like Apache
-    provides access to <strong>representations</strong> of the
-    resource(s) within its namespace, with each representation in
-    the form of a sequence of bytes with a defined media type,
-    character set, encoding, etc. Each resource may be associated
-    with zero, one, or more than one representation at any given
-    time. If multiple representations are available, the resource
-    is referred to as <strong>negotiable</strong> and each of its
-    representations is termed a <strong>variant</strong>. The ways
-    in which the variants for a negotiable resource vary are called
-    the <strong>dimensions</strong> of negotiation.</p>
-
-    <h2>Negotiation in Apache</h2>
-
-    <p>In order to negotiate a resource, the server needs to be
-    given information about each of the variants. This is done in
-    one of two ways:</p>
-
-    <ul>
-      <li>Using a type map (<em>i.e.</em>, a <code>*.var</code>
-      file) which names the files containing the variants
-      explicitly, or</li>
-
-      <li>Using a 'MultiViews' search, where the server does an
-      implicit filename pattern match and chooses from among the
-      results.</li>
-    </ul>
-
-    <h3>Using a type-map file</h3>
-
-    <p>A type map is a document which is associated with the
-    handler named <code>type-map</code> (or, for
-    backwards-compatibility with older Apache configurations, the
-    mime type <code>application/x-type-map</code>). Note that to
-    use this feature, you must have a handler set in the
-    configuration that defines a file suffix as
-    <code>type-map</code>; this is best done with a</p>
-<pre>
-  AddHandler type-map .var
-</pre>
-    in the server configuration file. 
-
-    <p>Type map files should have the same name as the resource
-    which they are describing, and have an entry for each available
-    variant; these entries consist of contiguous HTTP-format header
-    lines. Entries for different variants are separated by blank
-    lines. Blank lines are illegal within an entry. It is
-    conventional to begin a map file with an entry for the combined
-    entity as a whole (although this is not required, and if
-    present will be ignored). An example map file is shown below.
-    This file would be named <code>foo.html</code>, as it describes
-    a resource named <code>foo</code>.</p>
-<pre>
-  URI: foo
-
-  URI: foo.en.html
-  Content-type: text/html
-  Content-language: en
-
-  URI: foo.fr.de.html
-  Content-type: text/html;charset=iso-8859-2
-  Content-language: fr, de
-</pre>
-    Note also that a typemap file will take precedence over the
-    filename's extension, even when Multiviews is on. If the
-    variants have different source qualities, that may be indicated
-    by the "qs" parameter to the media type, as in this picture
-    (available as jpeg, gif, or ASCII-art): 
-<pre>
-  URI: foo
-
-  URI: foo.jpeg
-  Content-type: image/jpeg; qs=0.8
-
-  URI: foo.gif
-  Content-type: image/gif; qs=0.5
-
-  URI: foo.txt
-  Content-type: text/plain; qs=0.01
-</pre>
-
-    <p>qs values can vary in the range 0.000 to 1.000. Note that
-    any variant with a qs value of 0.000 will never be chosen.
-    Variants with no 'qs' parameter value are given a qs factor of
-    1.0. The qs parameter indicates the relative 'quality' of this
-    variant compared to the other available variants, independent
-    of the client's capabilities. For example, a jpeg file is
-    usually of higher source quality than an ascii file if it is
-    attempting to represent a photograph. However, if the resource
-    being represented is an original ascii art, then an ascii
-    representation would have a higher source quality than a jpeg
-    representation. A qs value is therefore specific to a given
-    variant depending on the nature of the resource it
-    represents.</p>
-
-    <p>The full list of headers recognized is:</p>
-
-    <dl>
-      <dt><code>URI:</code></dt>
-
-      <dd>uri of the file containing the variant (of the given
-      media type, encoded with the given content encoding). These
-      are interpreted as URLs relative to the map file; they must
-      be on the same server (!), and they must refer to files to
-      which the client would be granted access if they were to be
-      requested directly.</dd>
-
-      <dt><code>Content-Type:</code></dt>
-
-      <dd>media type --- charset, level and "qs" parameters may be
-      given. These are often referred to as MIME types; typical
-      media types are <code>image/gif</code>,
-      <code>text/plain</code>, or
-      <code>text/html;&nbsp;level=3</code>.</dd>
-
-      <dt><code>Content-Language:</code></dt>
-
-      <dd>The languages of the variant, specified as an Internet
-      standard language tag from RFC 1766 (<em>e.g.</em>,
-      <code>en</code> for English, <code>kr</code> for Korean,
-      <em>etc.</em>).</dd>
-
-      <dt><code>Content-Encoding:</code></dt>
-
-      <dd>If the file is compressed, or otherwise encoded, rather
-      than containing the actual raw data, this says how that was
-      done. Apache only recognizes encodings that are defined by an
-      <a href="mod/mod_mime.html#addencoding">AddEncoding</a>
-      directive. This normally includes the encodings
-      <code>x-compress</code> for compress'd files, and
-      <code>x-gzip</code> for gzip'd files. The <code>x-</code>
-      prefix is ignored for encoding comparisons.</dd>
-
-      <dt><code>Content-Length:</code></dt>
-
-      <dd>The size of the file in bytes. Specifying content lengths
-      in the type-map allows the server to compare file sizes
-      without checking the actual files.</dd>
-
-      <dt><code>Description:</code></dt>
-
-      <dd>A human-readable textual description of the variant. If
-      Apache cannot find any appropriate variant to return, it will
-      return an error response which lists all available variants
-      instead. Such a variant list will include the human-readable
-      variant descriptions.</dd>
-    </dl>
-    Using a type map file is preferred over <code>MultiViews</code>
-    because it requires less CPU time, and less file access, to
-    parse a file explicitly listing the various resource variants,
-    than to have to look at every matching file, and parse its file
-    extensions. 
-
-    <h3>Multiviews</h3>
-
-    <p><code>MultiViews</code> is a per-directory option, meaning
-    it can be set with an <code>Options</code> directive within a
-    <code>&lt;Directory&gt;</code>, <code>&lt;Location&gt;</code>
-    or <code>&lt;Files&gt;</code> section in
-    <code>access.conf</code>, or (if <code>AllowOverride</code> is
-    properly set) in <code>.htaccess</code> files. Note that
-    <code>Options All</code> does not set <code>MultiViews</code>;
-    you have to ask for it by name.</p>
-
-    <p>The effect of <code>MultiViews</code> is as follows: if the
-    server receives a request for <code>/some/dir/foo</code>, if
-    <code>/some/dir</code> has <code>MultiViews</code> enabled, and
-    <code>/some/dir/foo</code> does <em>not</em> exist, then the
-    server reads the directory looking for files named foo.*, and
-    effectively fakes up a type map which names all those files,
-    assigning them the same media types and content-encodings it
-    would have if the client had asked for one of them by name. It
-    then chooses the best match to the client's requirements.</p>
-
-    <p><code>MultiViews</code> may also apply to searches for the
-    file named by the <code>DirectoryIndex</code> directive, if the
-    server is trying to index a directory. If the configuration
-    files specify</p>
-<pre>
-  DirectoryIndex index
-</pre>
-    then the server will arbitrate between <code>index.html</code>
-    and <code>index.html3</code> if both are present. If neither
-    are present, and <code>index.cgi</code> is there, the server
-    will run it. 
-
-    <p>If one of the files found when reading the directive is a
-    CGI script, it's not obvious what should happen. The code gives
-    that case special treatment --- if the request was a POST, or a
-    GET with QUERY_ARGS or PATH_INFO, the script is given an
-    extremely high quality rating, and generally invoked; otherwise
-    it is given an extremely low quality rating, which generally
-    causes one of the other views (if any) to be retrieved.</p>
-
-    <h2>The Negotiation Methods</h2>
-    After Apache has obtained a list of the variants for a given
-    resource, either from a type-map file or from the filenames in
-    the directory, it invokes one of two methods to decide on the
-    'best' variant to return, if any. It is not necessary to know
-    any of the details of how negotiation actually takes place in
-    order to use Apache's content negotiation features. However the
-    rest of this document explains the methods used for those
-    interested. 
-
-    <p>There are two negotiation methods:</p>
-
-    <ol>
-      <li><strong>Server driven negotiation with the Apache
-      algorithm</strong> is used in the normal case. The Apache
-      algorithm is explained in more detail below. When this
-      algorithm is used, Apache can sometimes 'fiddle' the quality
-      factor of a particular dimension to achieve a better result.
-      The ways Apache can fiddle quality factors is explained in
-      more detail below.</li>
-
-      <li><strong>Transparent content negotiation</strong> is used
-      when the browser specifically requests this through the
-      mechanism defined in RFC 2295. This negotiation method gives
-      the browser full control over deciding on the 'best' variant,
-      the result is therefore dependent on the specific algorithms
-      used by the browser. As part of the transparent negotiation
-      process, the browser can ask Apache to run the 'remote
-      variant selection algorithm' defined in RFC 2296.</li>
-    </ol>
-
-    <h3>Dimensions of Negotiation</h3>
-
-    <table>
-      <tr valign="top">
-        <th>Dimension</th>
-
-        <th>Notes</th>
-      </tr>
-
-      <tr valign="top">
-        <td>Media Type</td>
-
-        <td>Browser indicates preferences with the Accept header
-        field. Each item can have an associated quality factor.
-        Variant description can also have a quality factor (the
-        "qs" parameter).</td>
-      </tr>
-
-      <tr valign="top">
-        <td>Language</td>
-
-        <td>Browser indicates preferences with the Accept-Language
-        header field. Each item can have a quality factor. Variants
-        can be associated with none, one or more than one
-        language.</td>
-      </tr>
-
-      <tr valign="top">
-        <td>Encoding</td>
-
-        <td>Browser indicates preference with the Accept-Encoding
-        header field. Each item can have a quality factor.</td>
-      </tr>
-
-      <tr valign="top">
-        <td>Charset</td>
-
-        <td>Browser indicates preference with the Accept-Charset
-        header field. Each item can have a quality factor. Variants
-        can indicate a charset as a parameter of the media
-        type.</td>
-      </tr>
-    </table>
-
-    <h3>Apache Negotiation Algorithm</h3>
-
-    <p>Apache can use the following algorithm to select the 'best'
-    variant (if any) to return to the browser. This algorithm is
-    not further configurable. It operates as follows:</p>
-
-    <ol>
-      <li>First, for each dimension of the negotiation, check the
-      appropriate <em>Accept*</em> header field and assign a
-      quality to each variant. If the <em>Accept*</em> header for
-      any dimension implies that this variant is not acceptable,
-      eliminate it. If no variants remain, go to step 4.</li>
-
-      <li>
-        Select the 'best' variant by a process of elimination. Each
-        of the following tests is applied in order. Any variants
-        not selected at each test are eliminated. After each test,
-        if only one variant remains, select it as the best match
-        and proceed to step 3. If more than one variant remains,
-        move on to the next test. 
-
-        <ol>
-          <li>Multiply the quality factor from the Accept header
-          with the quality-of-source factor for this variant's
-          media type, and select the variants with the highest
-          value.</li>
-
-          <li>Select the variants with the highest language quality
-          factor.</li>
-
-          <li>Select the variants with the best language match,
-          using either the order of languages in the
-          Accept-Language header (if present), or else the order of
-          languages in the <code>LanguagePriority</code> directive
-          (if present).</li>
-
-          <li>Select the variants with the highest 'level' media
-          parameter (used to give the version of text/html media
-          types).</li>
-
-          <li>Select variants with the best charset media
-          parameters, as given on the Accept-Charset header line.
-          Charset ISO-8859-1 is acceptable unless explicitly
-          excluded. Variants with a <code>text/*</code> media type
-          but not explicitly associated with a particular charset
-          are assumed to be in ISO-8859-1.</li>
-
-          <li>Select those variants which have associated charset
-          media parameters that are <em>not</em> ISO-8859-1. If
-          there are no such variants, select all variants
-          instead.</li>
-
-          <li>Select the variants with the best encoding. If there
-          are variants with an encoding that is acceptable to the
-          user-agent, select only these variants. Otherwise if
-          there is a mix of encoded and non-encoded variants,
-          select only the unencoded variants. If either all
-          variants are encoded or all variants are not encoded,
-          select all variants.</li>
-
-          <li>Select the variants with the smallest content
-          length.</li>
-
-          <li>Select the first variant of those remaining. This
-          will be either the first listed in the type-map file, or
-          when variants are read from the directory, the one whose
-          file name comes first when sorted using ASCII code
-          order.</li>
-        </ol>
-      </li>
-
-      <li>The algorithm has now selected one 'best' variant, so
-      return it as the response. The HTTP response header Vary is
-      set to indicate the dimensions of negotiation (browsers and
-      caches can use this information when caching the resource).
-      End.</li>
-
-      <li>To get here means no variant was selected (because none
-      are acceptable to the browser). Return a 406 status (meaning
-      "No acceptable representation") with a response body
-      consisting of an HTML document listing the available
-      variants. Also set the HTTP Vary header to indicate the
-      dimensions of variance.</li>
-    </ol>
-
-    <h2><a id="better" name="better">Fiddling with Quality
-    Values</a></h2>
-
-    <p>Apache sometimes changes the quality values from what would
-    be expected by a strict interpretation of the Apache
-    negotiation algorithm above. This is to get a better result
-    from the algorithm for browsers which do not send full or
-    accurate information. Some of the most popular browsers send
-    Accept header information which would otherwise result in the
-    selection of the wrong variant in many cases. If a browser
-    sends full and correct information these fiddles will not be
-    applied.</p>
-
-    <h3>Media Types and Wildcards</h3>
-
-    <p>The Accept: request header indicates preferences for media
-    types. It can also include 'wildcard' media types, such as
-    "image/*" or "*/*" where the * matches any string. So a request
-    including:</p>
-<pre>
-  Accept: image/*, */*
-</pre>
-    would indicate that any type starting "image/" is acceptable,
-    as is any other type (so the first "image/*" is redundant).
-    Some browsers routinely send wildcards in addition to explicit
-    types they can handle. For example: 
-<pre>
-  Accept: text/html, text/plain, image/gif, image/jpeg, */*
-</pre>
-    The intention of this is to indicate that the explicitly listed
-    types are preferred, but if a different representation is
-    available, that is ok too. However under the basic algorithm,
-    as given above, the */* wildcard has exactly equal preference
-    to all the other types, so they are not being preferred. The
-    browser should really have sent a request with a lower quality
-    (preference) value for *.*, such as: 
-<pre>
-  Accept: text/html, text/plain, image/gif, image/jpeg, */*; q=0.01
-</pre>
-    The explicit types have no quality factor, so they default to a
-    preference of 1.0 (the highest). The wildcard */* is given a
-    low preference of 0.01, so other types will only be returned if
-    no variant matches an explicitly listed type. 
-
-    <p>If the Accept: header contains <em>no</em> q factors at all,
-    Apache sets the q value of "*/*", if present, to 0.01 to
-    emulate the desired behavior. It also sets the q value of
-    wildcards of the format "type/*" to 0.02 (so these are
-    preferred over matches against "*/*". If any media type on the
-    Accept: header contains a q factor, these special values are
-    <em>not</em> applied, so requests from browsers which send the
-    correct information to start with work as expected.</p>
-
-    <h3>Variants with no Language</h3>
-
-    <p>If some of the variants for a particular resource have a
-    language attribute, and some do not, those variants with no
-    language are given a very low language quality factor of
-    0.001.</p>
-
-    <p>The reason for setting this language quality factor for
-    variant with no language to a very low value is to allow for a
-    default variant which can be supplied if none of the other
-    variants match the browser's language preferences. For example,
-    consider the situation with three variants:</p>
-
-    <ul>
-      <li>foo.en.html, language en</li>
-
-      <li>foo.fr.html, language en</li>
-
-      <li>foo.html, no language</li>
-    </ul>
-
-    <p>The meaning of a variant with no language is that it is
-    always acceptable to the browser. If the request
-    Accept-Language header includes either en or fr (or both) one
-    of foo.en.html or foo.fr.html will be returned. If the browser
-    does not list either en or fr as acceptable, foo.html will be
-    returned instead.</p>
-
-    <h2>Extensions to Transparent Content Negotiation</h2>
-    Apache extends the transparent content negotiation protocol
-    (RFC 2295) as follows. A new <code>{encoding ..}</code> element
-    is used in variant lists to label variants which are available
-    with a specific content-encoding only. The implementation of
-    the RVSA/1.0 algorithm (RFC 2296) is extended to recognize
-    encoded variants in the list, and to use them as candidate
-    variants whenever their encodings are acceptable according to
-    the Accept-Encoding request header. The RVSA/1.0 implementation
-    does not round computed quality factors to 5 decimal places
-    before choosing the best variant. 
-
-    <h2>Note on hyperlinks and naming conventions</h2>
-
-    <p>If you are using language negotiation you can choose between
-    different naming conventions, because files can have more than
-    one extension, and the order of the extensions is normally
-    irrelevant (see the <a
-    href="mod/mod_mime.html#multipleext">mod_mime</a> documentation
-    for details).</p>
-
-    <p>A typical file has a MIME-type extension (<em>e.g.</em>,
-    <samp>html</samp>), maybe an encoding extension (<em>e.g.</em>,
-    <samp>gz</samp>), and of course a language extension
-    (<em>e.g.</em>, <samp>en</samp>) when we have different
-    language variants of this file.</p>
-
-    <p>Examples:</p>
-
-    <ul>
-      <li>foo.en.html</li>
-
-      <li>foo.html.en</li>
-
-      <li>foo.en.html.gz</li>
-    </ul>
-
-    <p>Here some more examples of filenames together with valid and
-    invalid hyperlinks:</p>
-
-    <table border="1" cellpadding="8" cellspacing="0">
-      <tr>
-        <th>Filename</th>
-
-        <th>Valid hyperlink</th>
-
-        <th>Invalid hyperlink</th>
-      </tr>
-
-      <tr>
-        <td><em>foo.html.en</em></td>
-
-        <td>foo<br />
-         foo.html</td>
-
-        <td>-</td>
-      </tr>
-
-      <tr>
-        <td><em>foo.en.html</em></td>
-
-        <td>foo</td>
-
-        <td>foo.html</td>
-      </tr>
-
-      <tr>
-        <td><em>foo.html.en.gz</em></td>
-
-        <td>foo<br />
-         foo.html</td>
-
-        <td>foo.gz<br />
-         foo.html.gz</td>
-      </tr>
-
-      <tr>
-        <td><em>foo.en.html.gz</em></td>
-
-        <td>foo</td>
-
-        <td>foo.html<br />
-         foo.html.gz<br />
-         foo.gz</td>
-      </tr>
-
-      <tr>
-        <td><em>foo.gz.html.en</em></td>
-
-        <td>foo<br />
-         foo.gz<br />
-         foo.gz.html</td>
-
-        <td>foo.html</td>
-      </tr>
-
-      <tr>
-        <td><em>foo.html.gz.en</em></td>
-
-        <td>foo<br />
-         foo.html<br />
-         foo.html.gz</td>
-
-        <td>foo.gz</td>
-      </tr>
-    </table>
-
-    <p>Looking at the table above you will notice that it is always
-    possible to use the name without any extensions in an hyperlink
-    (<em>e.g.</em>, <samp>foo</samp>). The advantage is that you
-    can hide the actual type of a document rsp. file and can change
-    it later, <em>e.g.</em>, from <samp>html</samp> to
-    <samp>shtml</samp> or <samp>cgi</samp> without changing any
-    hyperlink references.</p>
-
-    <p>If you want to continue to use a MIME-type in your
-    hyperlinks (<em>e.g.</em> <samp>foo.html</samp>) the language
-    extension (including an encoding extension if there is one)
-    must be on the right hand side of the MIME-type extension
-    (<em>e.g.</em>, <samp>foo.html.en</samp>).</p>
-
-    <h2>Note on Caching</h2>
-
-    <p>When a cache stores a representation, it associates it with
-    the request URL. The next time that URL is requested, the cache
-    can use the stored representation. But, if the resource is
-    negotiable at the server, this might result in only the first
-    requested variant being cached and subsequent cache hits might
-    return the wrong response. To prevent this, Apache normally
-    marks all responses that are returned after content negotiation
-    as non-cacheable by HTTP/1.0 clients. Apache also supports the
-    HTTP/1.1 protocol features to allow caching of negotiated
-    responses.</p>
-
-    <p>For requests which come from a HTTP/1.0 compliant client
-    (either a browser or a cache), the directive
-    <tt>CacheNegotiatedDocs</tt> can be used to allow caching of
-    responses which were subject to negotiation. This directive can
-    be given in the server config or virtual host, and takes no
-    arguments. It has no effect on requests from HTTP/1.1 clients. 
-    <!--#include virtual="footer.html" -->
-    </p>
-  </body>
-</html>
-
diff --git a/docs/manual/content-negotiation.html.en b/docs/manual/content-negotiation.html.en
deleted file mode 100644
index b5af8bf..0000000
--- a/docs/manual/content-negotiation.html.en
+++ /dev/null
@@ -1,651 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta name="generator" content="HTML Tidy, see www.w3.org" />
-
-    <title>Apache Content Negotiation</title>
-  </head>
-  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-
-  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-  vlink="#000080" alink="#FF0000">
-    <!--#include virtual="header.html" -->
-
-    <h1 align="CENTER">Content Negotiation</h1>
-
-    <p>Apache's support for content negotiation has been updated to
-    meet the HTTP/1.1 specification. It can choose the best
-    representation of a resource based on the browser-supplied
-    preferences for media type, languages, character set and
-    encoding. It is also implements a couple of features to give
-    more intelligent handling of requests from browsers which send
-    incomplete negotiation information.</p>
-
-    <p>Content negotiation is provided by the <a
-    href="mod/mod_negotiation.html">mod_negotiation</a> module,
-    which is compiled in by default.</p>
-    <hr />
-
-    <h2>About Content Negotiation</h2>
-
-    <p>A resource may be available in several different
-    representations. For example, it might be available in
-    different languages or different media types, or a combination.
-    One way of selecting the most appropriate choice is to give the
-    user an index page, and let them select. However it is often
-    possible for the server to choose automatically. This works
-    because browsers can send as part of each request information
-    about what representations they prefer. For example, a browser
-    could indicate that it would like to see information in French,
-    if possible, else English will do. Browsers indicate their
-    preferences by headers in the request. To request only French
-    representations, the browser would send</p>
-<pre>
-  Accept-Language: fr
-</pre>
-
-    <p>Note that this preference will only be applied when there is
-    a choice of representations and they vary by language.</p>
-
-    <p>As an example of a more complex request, this browser has
-    been configured to accept French and English, but prefer
-    French, and to accept various media types, preferring HTML over
-    plain text or other text types, and preferring GIF or JPEG over
-    other media types, but also allowing any other media type as a
-    last resort:</p>
-<pre>
-  Accept-Language: fr; q=1.0, en; q=0.5
-  Accept: text/html; q=1.0, text/*; q=0.8, image/gif; q=0.6,
-        image/jpeg; q=0.6, image/*; q=0.5, */*; q=0.1
-</pre>
-    Apache 1.2 supports 'server driven' content negotiation, as
-    defined in the HTTP/1.1 specification. It fully supports the
-    Accept, Accept-Language, Accept-Charset and Accept-Encoding
-    request headers. Apache 1.3.4 also supports 'transparent'
-    content negotiation, which is an experimental negotiation
-    protocol defined in RFC 2295 and RFC 2296. It does not offer
-    support for 'feature negotiation' as defined in these RFCs. 
-
-    <p>A <strong>resource</strong> is a conceptual entity
-    identified by a URI (RFC 2396). An HTTP server like Apache
-    provides access to <strong>representations</strong> of the
-    resource(s) within its namespace, with each representation in
-    the form of a sequence of bytes with a defined media type,
-    character set, encoding, etc. Each resource may be associated
-    with zero, one, or more than one representation at any given
-    time. If multiple representations are available, the resource
-    is referred to as <strong>negotiable</strong> and each of its
-    representations is termed a <strong>variant</strong>. The ways
-    in which the variants for a negotiable resource vary are called
-    the <strong>dimensions</strong> of negotiation.</p>
-
-    <h2>Negotiation in Apache</h2>
-
-    <p>In order to negotiate a resource, the server needs to be
-    given information about each of the variants. This is done in
-    one of two ways:</p>
-
-    <ul>
-      <li>Using a type map (<em>i.e.</em>, a <code>*.var</code>
-      file) which names the files containing the variants
-      explicitly, or</li>
-
-      <li>Using a 'MultiViews' search, where the server does an
-      implicit filename pattern match and chooses from among the
-      results.</li>
-    </ul>
-
-    <h3>Using a type-map file</h3>
-
-    <p>A type map is a document which is associated with the
-    handler named <code>type-map</code> (or, for
-    backwards-compatibility with older Apache configurations, the
-    mime type <code>application/x-type-map</code>). Note that to
-    use this feature, you must have a handler set in the
-    configuration that defines a file suffix as
-    <code>type-map</code>; this is best done with a</p>
-<pre>
-  AddHandler type-map .var
-</pre>
-    in the server configuration file. 
-
-    <p>Type map files should have the same name as the resource
-    which they are describing, and have an entry for each available
-    variant; these entries consist of contiguous HTTP-format header
-    lines. Entries for different variants are separated by blank
-    lines. Blank lines are illegal within an entry. It is
-    conventional to begin a map file with an entry for the combined
-    entity as a whole (although this is not required, and if
-    present will be ignored). An example map file is shown below.
-    This file would be named <code>foo.html</code>, as it describes
-    a resource named <code>foo</code>.</p>
-<pre>
-  URI: foo
-
-  URI: foo.en.html
-  Content-type: text/html
-  Content-language: en
-
-  URI: foo.fr.de.html
-  Content-type: text/html;charset=iso-8859-2
-  Content-language: fr, de
-</pre>
-    Note also that a typemap file will take precedence over the
-    filename's extension, even when Multiviews is on. If the
-    variants have different source qualities, that may be indicated
-    by the "qs" parameter to the media type, as in this picture
-    (available as jpeg, gif, or ASCII-art): 
-<pre>
-  URI: foo
-
-  URI: foo.jpeg
-  Content-type: image/jpeg; qs=0.8
-
-  URI: foo.gif
-  Content-type: image/gif; qs=0.5
-
-  URI: foo.txt
-  Content-type: text/plain; qs=0.01
-</pre>
-
-    <p>qs values can vary in the range 0.000 to 1.000. Note that
-    any variant with a qs value of 0.000 will never be chosen.
-    Variants with no 'qs' parameter value are given a qs factor of
-    1.0. The qs parameter indicates the relative 'quality' of this
-    variant compared to the other available variants, independent
-    of the client's capabilities. For example, a jpeg file is
-    usually of higher source quality than an ascii file if it is
-    attempting to represent a photograph. However, if the resource
-    being represented is an original ascii art, then an ascii
-    representation would have a higher source quality than a jpeg
-    representation. A qs value is therefore specific to a given
-    variant depending on the nature of the resource it
-    represents.</p>
-
-    <p>The full list of headers recognized is:</p>
-
-    <dl>
-      <dt><code>URI:</code></dt>
-
-      <dd>uri of the file containing the variant (of the given
-      media type, encoded with the given content encoding). These
-      are interpreted as URLs relative to the map file; they must
-      be on the same server (!), and they must refer to files to
-      which the client would be granted access if they were to be
-      requested directly.</dd>
-
-      <dt><code>Content-Type:</code></dt>
-
-      <dd>media type --- charset, level and "qs" parameters may be
-      given. These are often referred to as MIME types; typical
-      media types are <code>image/gif</code>,
-      <code>text/plain</code>, or
-      <code>text/html;&nbsp;level=3</code>.</dd>
-
-      <dt><code>Content-Language:</code></dt>
-
-      <dd>The languages of the variant, specified as an Internet
-      standard language tag from RFC 1766 (<em>e.g.</em>,
-      <code>en</code> for English, <code>kr</code> for Korean,
-      <em>etc.</em>).</dd>
-
-      <dt><code>Content-Encoding:</code></dt>
-
-      <dd>If the file is compressed, or otherwise encoded, rather
-      than containing the actual raw data, this says how that was
-      done. Apache only recognizes encodings that are defined by an
-      <a href="mod/mod_mime.html#addencoding">AddEncoding</a>
-      directive. This normally includes the encodings
-      <code>x-compress</code> for compress'd files, and
-      <code>x-gzip</code> for gzip'd files. The <code>x-</code>
-      prefix is ignored for encoding comparisons.</dd>
-
-      <dt><code>Content-Length:</code></dt>
-
-      <dd>The size of the file in bytes. Specifying content lengths
-      in the type-map allows the server to compare file sizes
-      without checking the actual files.</dd>
-
-      <dt><code>Description:</code></dt>
-
-      <dd>A human-readable textual description of the variant. If
-      Apache cannot find any appropriate variant to return, it will
-      return an error response which lists all available variants
-      instead. Such a variant list will include the human-readable
-      variant descriptions.</dd>
-    </dl>
-    Using a type map file is preferred over <code>MultiViews</code>
-    because it requires less CPU time, and less file access, to
-    parse a file explicitly listing the various resource variants,
-    than to have to look at every matching file, and parse its file
-    extensions. 
-
-    <h3>Multiviews</h3>
-
-    <p><code>MultiViews</code> is a per-directory option, meaning
-    it can be set with an <code>Options</code> directive within a
-    <code>&lt;Directory&gt;</code>, <code>&lt;Location&gt;</code>
-    or <code>&lt;Files&gt;</code> section in
-    <code>access.conf</code>, or (if <code>AllowOverride</code> is
-    properly set) in <code>.htaccess</code> files. Note that
-    <code>Options All</code> does not set <code>MultiViews</code>;
-    you have to ask for it by name.</p>
-
-    <p>The effect of <code>MultiViews</code> is as follows: if the
-    server receives a request for <code>/some/dir/foo</code>, if
-    <code>/some/dir</code> has <code>MultiViews</code> enabled, and
-    <code>/some/dir/foo</code> does <em>not</em> exist, then the
-    server reads the directory looking for files named foo.*, and
-    effectively fakes up a type map which names all those files,
-    assigning them the same media types and content-encodings it
-    would have if the client had asked for one of them by name. It
-    then chooses the best match to the client's requirements.</p>
-
-    <p><code>MultiViews</code> may also apply to searches for the
-    file named by the <code>DirectoryIndex</code> directive, if the
-    server is trying to index a directory. If the configuration
-    files specify</p>
-<pre>
-  DirectoryIndex index
-</pre>
-    then the server will arbitrate between <code>index.html</code>
-    and <code>index.html3</code> if both are present. If neither
-    are present, and <code>index.cgi</code> is there, the server
-    will run it. 
-
-    <p>If one of the files found when reading the directive is a
-    CGI script, it's not obvious what should happen. The code gives
-    that case special treatment --- if the request was a POST, or a
-    GET with QUERY_ARGS or PATH_INFO, the script is given an
-    extremely high quality rating, and generally invoked; otherwise
-    it is given an extremely low quality rating, which generally
-    causes one of the other views (if any) to be retrieved.</p>
-
-    <h2>The Negotiation Methods</h2>
-    After Apache has obtained a list of the variants for a given
-    resource, either from a type-map file or from the filenames in
-    the directory, it invokes one of two methods to decide on the
-    'best' variant to return, if any. It is not necessary to know
-    any of the details of how negotiation actually takes place in
-    order to use Apache's content negotiation features. However the
-    rest of this document explains the methods used for those
-    interested. 
-
-    <p>There are two negotiation methods:</p>
-
-    <ol>
-      <li><strong>Server driven negotiation with the Apache
-      algorithm</strong> is used in the normal case. The Apache
-      algorithm is explained in more detail below. When this
-      algorithm is used, Apache can sometimes 'fiddle' the quality
-      factor of a particular dimension to achieve a better result.
-      The ways Apache can fiddle quality factors is explained in
-      more detail below.</li>
-
-      <li><strong>Transparent content negotiation</strong> is used
-      when the browser specifically requests this through the
-      mechanism defined in RFC 2295. This negotiation method gives
-      the browser full control over deciding on the 'best' variant,
-      the result is therefore dependent on the specific algorithms
-      used by the browser. As part of the transparent negotiation
-      process, the browser can ask Apache to run the 'remote
-      variant selection algorithm' defined in RFC 2296.</li>
-    </ol>
-
-    <h3>Dimensions of Negotiation</h3>
-
-    <table>
-      <tr valign="top">
-        <th>Dimension</th>
-
-        <th>Notes</th>
-      </tr>
-
-      <tr valign="top">
-        <td>Media Type</td>
-
-        <td>Browser indicates preferences with the Accept header
-        field. Each item can have an associated quality factor.
-        Variant description can also have a quality factor (the
-        "qs" parameter).</td>
-      </tr>
-
-      <tr valign="top">
-        <td>Language</td>
-
-        <td>Browser indicates preferences with the Accept-Language
-        header field. Each item can have a quality factor. Variants
-        can be associated with none, one or more than one
-        language.</td>
-      </tr>
-
-      <tr valign="top">
-        <td>Encoding</td>
-
-        <td>Browser indicates preference with the Accept-Encoding
-        header field. Each item can have a quality factor.</td>
-      </tr>
-
-      <tr valign="top">
-        <td>Charset</td>
-
-        <td>Browser indicates preference with the Accept-Charset
-        header field. Each item can have a quality factor. Variants
-        can indicate a charset as a parameter of the media
-        type.</td>
-      </tr>
-    </table>
-
-    <h3>Apache Negotiation Algorithm</h3>
-
-    <p>Apache can use the following algorithm to select the 'best'
-    variant (if any) to return to the browser. This algorithm is
-    not further configurable. It operates as follows:</p>
-
-    <ol>
-      <li>First, for each dimension of the negotiation, check the
-      appropriate <em>Accept*</em> header field and assign a
-      quality to each variant. If the <em>Accept*</em> header for
-      any dimension implies that this variant is not acceptable,
-      eliminate it. If no variants remain, go to step 4.</li>
-
-      <li>
-        Select the 'best' variant by a process of elimination. Each
-        of the following tests is applied in order. Any variants
-        not selected at each test are eliminated. After each test,
-        if only one variant remains, select it as the best match
-        and proceed to step 3. If more than one variant remains,
-        move on to the next test. 
-
-        <ol>
-          <li>Multiply the quality factor from the Accept header
-          with the quality-of-source factor for this variant's
-          media type, and select the variants with the highest
-          value.</li>
-
-          <li>Select the variants with the highest language quality
-          factor.</li>
-
-          <li>Select the variants with the best language match,
-          using either the order of languages in the
-          Accept-Language header (if present), or else the order of
-          languages in the <code>LanguagePriority</code> directive
-          (if present).</li>
-
-          <li>Select the variants with the highest 'level' media
-          parameter (used to give the version of text/html media
-          types).</li>
-
-          <li>Select variants with the best charset media
-          parameters, as given on the Accept-Charset header line.
-          Charset ISO-8859-1 is acceptable unless explicitly
-          excluded. Variants with a <code>text/*</code> media type
-          but not explicitly associated with a particular charset
-          are assumed to be in ISO-8859-1.</li>
-
-          <li>Select those variants which have associated charset
-          media parameters that are <em>not</em> ISO-8859-1. If
-          there are no such variants, select all variants
-          instead.</li>
-
-          <li>Select the variants with the best encoding. If there
-          are variants with an encoding that is acceptable to the
-          user-agent, select only these variants. Otherwise if
-          there is a mix of encoded and non-encoded variants,
-          select only the unencoded variants. If either all
-          variants are encoded or all variants are not encoded,
-          select all variants.</li>
-
-          <li>Select the variants with the smallest content
-          length.</li>
-
-          <li>Select the first variant of those remaining. This
-          will be either the first listed in the type-map file, or
-          when variants are read from the directory, the one whose
-          file name comes first when sorted using ASCII code
-          order.</li>
-        </ol>
-      </li>
-
-      <li>The algorithm has now selected one 'best' variant, so
-      return it as the response. The HTTP response header Vary is
-      set to indicate the dimensions of negotiation (browsers and
-      caches can use this information when caching the resource).
-      End.</li>
-
-      <li>To get here means no variant was selected (because none
-      are acceptable to the browser). Return a 406 status (meaning
-      "No acceptable representation") with a response body
-      consisting of an HTML document listing the available
-      variants. Also set the HTTP Vary header to indicate the
-      dimensions of variance.</li>
-    </ol>
-
-    <h2><a id="better" name="better">Fiddling with Quality
-    Values</a></h2>
-
-    <p>Apache sometimes changes the quality values from what would
-    be expected by a strict interpretation of the Apache
-    negotiation algorithm above. This is to get a better result
-    from the algorithm for browsers which do not send full or
-    accurate information. Some of the most popular browsers send
-    Accept header information which would otherwise result in the
-    selection of the wrong variant in many cases. If a browser
-    sends full and correct information these fiddles will not be
-    applied.</p>
-
-    <h3>Media Types and Wildcards</h3>
-
-    <p>The Accept: request header indicates preferences for media
-    types. It can also include 'wildcard' media types, such as
-    "image/*" or "*/*" where the * matches any string. So a request
-    including:</p>
-<pre>
-  Accept: image/*, */*
-</pre>
-    would indicate that any type starting "image/" is acceptable,
-    as is any other type (so the first "image/*" is redundant).
-    Some browsers routinely send wildcards in addition to explicit
-    types they can handle. For example: 
-<pre>
-  Accept: text/html, text/plain, image/gif, image/jpeg, */*
-</pre>
-    The intention of this is to indicate that the explicitly listed
-    types are preferred, but if a different representation is
-    available, that is ok too. However under the basic algorithm,
-    as given above, the */* wildcard has exactly equal preference
-    to all the other types, so they are not being preferred. The
-    browser should really have sent a request with a lower quality
-    (preference) value for *.*, such as: 
-<pre>
-  Accept: text/html, text/plain, image/gif, image/jpeg, */*; q=0.01
-</pre>
-    The explicit types have no quality factor, so they default to a
-    preference of 1.0 (the highest). The wildcard */* is given a
-    low preference of 0.01, so other types will only be returned if
-    no variant matches an explicitly listed type. 
-
-    <p>If the Accept: header contains <em>no</em> q factors at all,
-    Apache sets the q value of "*/*", if present, to 0.01 to
-    emulate the desired behavior. It also sets the q value of
-    wildcards of the format "type/*" to 0.02 (so these are
-    preferred over matches against "*/*". If any media type on the
-    Accept: header contains a q factor, these special values are
-    <em>not</em> applied, so requests from browsers which send the
-    correct information to start with work as expected.</p>
-
-    <h3>Variants with no Language</h3>
-
-    <p>If some of the variants for a particular resource have a
-    language attribute, and some do not, those variants with no
-    language are given a very low language quality factor of
-    0.001.</p>
-
-    <p>The reason for setting this language quality factor for
-    variant with no language to a very low value is to allow for a
-    default variant which can be supplied if none of the other
-    variants match the browser's language preferences. For example,
-    consider the situation with three variants:</p>
-
-    <ul>
-      <li>foo.en.html, language en</li>
-
-      <li>foo.fr.html, language en</li>
-
-      <li>foo.html, no language</li>
-    </ul>
-
-    <p>The meaning of a variant with no language is that it is
-    always acceptable to the browser. If the request
-    Accept-Language header includes either en or fr (or both) one
-    of foo.en.html or foo.fr.html will be returned. If the browser
-    does not list either en or fr as acceptable, foo.html will be
-    returned instead.</p>
-
-    <h2>Extensions to Transparent Content Negotiation</h2>
-    Apache extends the transparent content negotiation protocol
-    (RFC 2295) as follows. A new <code>{encoding ..}</code> element
-    is used in variant lists to label variants which are available
-    with a specific content-encoding only. The implementation of
-    the RVSA/1.0 algorithm (RFC 2296) is extended to recognize
-    encoded variants in the list, and to use them as candidate
-    variants whenever their encodings are acceptable according to
-    the Accept-Encoding request header. The RVSA/1.0 implementation
-    does not round computed quality factors to 5 decimal places
-    before choosing the best variant. 
-
-    <h2>Note on hyperlinks and naming conventions</h2>
-
-    <p>If you are using language negotiation you can choose between
-    different naming conventions, because files can have more than
-    one extension, and the order of the extensions is normally
-    irrelevant (see the <a
-    href="mod/mod_mime.html#multipleext">mod_mime</a> documentation
-    for details).</p>
-
-    <p>A typical file has a MIME-type extension (<em>e.g.</em>,
-    <samp>html</samp>), maybe an encoding extension (<em>e.g.</em>,
-    <samp>gz</samp>), and of course a language extension
-    (<em>e.g.</em>, <samp>en</samp>) when we have different
-    language variants of this file.</p>
-
-    <p>Examples:</p>
-
-    <ul>
-      <li>foo.en.html</li>
-
-      <li>foo.html.en</li>
-
-      <li>foo.en.html.gz</li>
-    </ul>
-
-    <p>Here some more examples of filenames together with valid and
-    invalid hyperlinks:</p>
-
-    <table border="1" cellpadding="8" cellspacing="0">
-      <tr>
-        <th>Filename</th>
-
-        <th>Valid hyperlink</th>
-
-        <th>Invalid hyperlink</th>
-      </tr>
-
-      <tr>
-        <td><em>foo.html.en</em></td>
-
-        <td>foo<br />
-         foo.html</td>
-
-        <td>-</td>
-      </tr>
-
-      <tr>
-        <td><em>foo.en.html</em></td>
-
-        <td>foo</td>
-
-        <td>foo.html</td>
-      </tr>
-
-      <tr>
-        <td><em>foo.html.en.gz</em></td>
-
-        <td>foo<br />
-         foo.html</td>
-
-        <td>foo.gz<br />
-         foo.html.gz</td>
-      </tr>
-
-      <tr>
-        <td><em>foo.en.html.gz</em></td>
-
-        <td>foo</td>
-
-        <td>foo.html<br />
-         foo.html.gz<br />
-         foo.gz</td>
-      </tr>
-
-      <tr>
-        <td><em>foo.gz.html.en</em></td>
-
-        <td>foo<br />
-         foo.gz<br />
-         foo.gz.html</td>
-
-        <td>foo.html</td>
-      </tr>
-
-      <tr>
-        <td><em>foo.html.gz.en</em></td>
-
-        <td>foo<br />
-         foo.html<br />
-         foo.html.gz</td>
-
-        <td>foo.gz</td>
-      </tr>
-    </table>
-
-    <p>Looking at the table above you will notice that it is always
-    possible to use the name without any extensions in an hyperlink
-    (<em>e.g.</em>, <samp>foo</samp>). The advantage is that you
-    can hide the actual type of a document rsp. file and can change
-    it later, <em>e.g.</em>, from <samp>html</samp> to
-    <samp>shtml</samp> or <samp>cgi</samp> without changing any
-    hyperlink references.</p>
-
-    <p>If you want to continue to use a MIME-type in your
-    hyperlinks (<em>e.g.</em> <samp>foo.html</samp>) the language
-    extension (including an encoding extension if there is one)
-    must be on the right hand side of the MIME-type extension
-    (<em>e.g.</em>, <samp>foo.html.en</samp>).</p>
-
-    <h2>Note on Caching</h2>
-
-    <p>When a cache stores a representation, it associates it with
-    the request URL. The next time that URL is requested, the cache
-    can use the stored representation. But, if the resource is
-    negotiable at the server, this might result in only the first
-    requested variant being cached and subsequent cache hits might
-    return the wrong response. To prevent this, Apache normally
-    marks all responses that are returned after content negotiation
-    as non-cacheable by HTTP/1.0 clients. Apache also supports the
-    HTTP/1.1 protocol features to allow caching of negotiated
-    responses.</p>
-
-    <p>For requests which come from a HTTP/1.0 compliant client
-    (either a browser or a cache), the directive
-    <tt>CacheNegotiatedDocs</tt> can be used to allow caching of
-    responses which were subject to negotiation. This directive can
-    be given in the server config or virtual host, and takes no
-    arguments. It has no effect on requests from HTTP/1.1 clients. 
-    <!--#include virtual="footer.html" -->
-    </p>
-  </body>
-</html>
-
diff --git a/docs/manual/custom-error.html b/docs/manual/custom-error.html
deleted file mode 100644
index 3cbb570..0000000
--- a/docs/manual/custom-error.html
+++ /dev/null
@@ -1,182 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta name="generator" content="HTML Tidy, see www.w3.org" />
-
-    <title>Custom error responses</title>
-  </head>
-  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-
-  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-  vlink="#000080" alink="#FF0000">
-    <!--#include virtual="header.html" -->
-
-    <h1 align="CENTER">Custom error responses</h1>
-
-    <dl>
-      <dt>Purpose</dt>
-
-      <dd>
-        Additional functionality. Allows webmasters to configure
-        the response of Apache to some error or problem. 
-
-        <p>Customizable responses can be defined to be activated in
-        the event of a server detected error or problem.</p>
-
-        <p>e.g. if a script crashes and produces a "500 Server
-        Error" response, then this response can be replaced with
-        either some friendlier text or by a redirection to another
-        URL (local or external).</p>
-      </dd>
-
-      <dt>Old behavior</dt>
-
-      <dd>NCSA httpd 1.3 would return some boring old error/problem
-      message which would often be meaningless to the user, and
-      would provide no means of logging the symptoms which caused
-      it.<br />
-      </dd>
-
-      <dt>New behavior</dt>
-
-      <dd>
-        The server can be asked to; 
-
-        <ol>
-          <li>Display some other text, instead of the NCSA hard
-          coded messages, or</li>
-
-          <li>redirect to a local URL, or</li>
-
-          <li>redirect to an external URL.</li>
-        </ol>
-
-        <p>Redirecting to another URL can be useful, but only if
-        some information can be passed which can then be used to
-        explain and/or log the error/problem more clearly.</p>
-
-        <p>To achieve this, Apache will define new CGI-like
-        environment variables, <em>e.g.</em></p>
-
-        <blockquote>
-          <code>REDIRECT_HTTP_ACCEPT=*/*, image/gif,
-          image/x-xbitmap, image/jpeg<br />
-           REDIRECT_HTTP_USER_AGENT=Mozilla/1.1b2 (X11; I; HP-UX
-          A.09.05 9000/712)<br />
-           REDIRECT_PATH=.:/bin:/usr/local/bin:/etc<br />
-           REDIRECT_QUERY_STRING=<br />
-           REDIRECT_REMOTE_ADDR=121.345.78.123<br />
-           REDIRECT_REMOTE_HOST=ooh.ahhh.com<br />
-           REDIRECT_SERVER_NAME=crash.bang.edu<br />
-           REDIRECT_SERVER_PORT=80<br />
-           REDIRECT_SERVER_SOFTWARE=Apache/0.8.15<br />
-           REDIRECT_URL=/cgi-bin/buggy.pl<br />
-          </code>
-        </blockquote>
-
-        <p>note the <code>REDIRECT_</code> prefix.</p>
-
-        <p>At least <code>REDIRECT_URL</code> and
-        <code>REDIRECT_QUERY_STRING</code> will be passed to the
-        new URL (assuming it's a cgi-script or a cgi-include). The
-        other variables will exist only if they existed prior to
-        the error/problem. <strong>None</strong> of these will be
-        set if your ErrorDocument is an <em>external</em> redirect
-        (<em>i.e.</em>, anything starting with a scheme name like
-        <code>http:</code>, even if it refers to the same host as
-        the server).</p>
-      </dd>
-
-      <dt>Configuration</dt>
-
-      <dd>
-        Use of "ErrorDocument" is enabled for .htaccess files when
-        the <a href="mod/core.html#allowoverride">"FileInfo"
-        override</a> is allowed. 
-
-        <p>Here are some examples...</p>
-
-        <blockquote>
-          <code>ErrorDocument 500 /cgi-bin/crash-recover<br />
-           ErrorDocument 500 "Sorry, our script crashed. Oh
-          dear<br />
-           ErrorDocument 500 http://xxx/<br />
-           ErrorDocument 404 /Lame_excuses/not_found.html<br />
-           ErrorDocument 401
-          /Subscription/how_to_subscribe.html</code>
-        </blockquote>
-
-        <p>The syntax is,</p>
-
-        <p><code><a
-        href="mod/core.html#errordocument">ErrorDocument</a></code>
-        &lt;3-digit-code&gt; action</p>
-
-        <p>where the action can be,</p>
-
-        <ol>
-          <li>Text to be displayed. Prefix the text with a quote
-          ("). Whatever follows the quote is displayed. <em>Note:
-          the (") prefix isn't displayed.</em></li>
-
-          <li>An external URL to redirect to.</li>
-
-          <li>A local URL to redirect to.</li>
-        </ol>
-      </dd>
-    </dl>
-    <hr />
-
-    <h2>Custom error responses and redirects</h2>
-
-    <dl>
-      <dt>Purpose</dt>
-
-      <dd>Apache's behavior to redirected URLs has been modified so
-      that additional environment variables are available to a
-      script/server-include.</dd>
-
-      <dt>Old behavior</dt>
-
-      <dd>Standard CGI vars were made available to a script which
-      has been redirected to. No indication of where the
-      redirection came from was provided.</dd>
-
-      <dt>New behavior</dt>
-
-      <dd>A new batch of environment variables will be initialized
-      for use by a script which has been redirected to. Each new
-      variable will have the prefix <code>REDIRECT_</code>.
-      <code>REDIRECT_</code> environment variables are created from
-      the CGI environment variables which existed prior to the
-      redirect, they are renamed with a <code>REDIRECT_</code>
-      prefix, <em>i.e.</em>, <code>HTTP_USER_AGENT</code> becomes
-      <code>REDIRECT_HTTP_USER_AGENT</code>. In addition to these
-      new variables, Apache will define <code>REDIRECT_URL</code>
-      and <code>REDIRECT_STATUS</code> to help the script trace its
-      origin. Both the original URL and the URL being redirected to
-      can be logged in the access log.</dd>
-    </dl>
-
-    <p>If the ErrorDocument specifies a local redirect to a CGI
-    script, the script should include a "<samp>Status:</samp>"
-    header field in its output in order to ensure the propagation
-    all the way back to the client of the error condition that
-    caused it to be invoked. For instance, a Perl ErrorDocument
-    script might include the following:</p>
-<pre>
-      :
-    print  "Content-type: text/html\n";
-    printf "Status: %s Condition Intercepted\n", $ENV{"REDIRECT_STATUS"};
-      :
-</pre>
-
-    <p>If the script is dedicated to handling a particular error
-    condition, such as <samp>404&nbsp;Not&nbsp;Found</samp>, it can
-    use the specific code and error text instead.</p>
-    <!--#include virtual="footer.html" -->
-  </body>
-</html>
-
diff --git a/docs/manual/custom-error.html.en b/docs/manual/custom-error.html.en
deleted file mode 100644
index 3cbb570..0000000
--- a/docs/manual/custom-error.html.en
+++ /dev/null
@@ -1,182 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta name="generator" content="HTML Tidy, see www.w3.org" />
-
-    <title>Custom error responses</title>
-  </head>
-  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-
-  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-  vlink="#000080" alink="#FF0000">
-    <!--#include virtual="header.html" -->
-
-    <h1 align="CENTER">Custom error responses</h1>
-
-    <dl>
-      <dt>Purpose</dt>
-
-      <dd>
-        Additional functionality. Allows webmasters to configure
-        the response of Apache to some error or problem. 
-
-        <p>Customizable responses can be defined to be activated in
-        the event of a server detected error or problem.</p>
-
-        <p>e.g. if a script crashes and produces a "500 Server
-        Error" response, then this response can be replaced with
-        either some friendlier text or by a redirection to another
-        URL (local or external).</p>
-      </dd>
-
-      <dt>Old behavior</dt>
-
-      <dd>NCSA httpd 1.3 would return some boring old error/problem
-      message which would often be meaningless to the user, and
-      would provide no means of logging the symptoms which caused
-      it.<br />
-      </dd>
-
-      <dt>New behavior</dt>
-
-      <dd>
-        The server can be asked to; 
-
-        <ol>
-          <li>Display some other text, instead of the NCSA hard
-          coded messages, or</li>
-
-          <li>redirect to a local URL, or</li>
-
-          <li>redirect to an external URL.</li>
-        </ol>
-
-        <p>Redirecting to another URL can be useful, but only if
-        some information can be passed which can then be used to
-        explain and/or log the error/problem more clearly.</p>
-
-        <p>To achieve this, Apache will define new CGI-like
-        environment variables, <em>e.g.</em></p>
-
-        <blockquote>
-          <code>REDIRECT_HTTP_ACCEPT=*/*, image/gif,
-          image/x-xbitmap, image/jpeg<br />
-           REDIRECT_HTTP_USER_AGENT=Mozilla/1.1b2 (X11; I; HP-UX
-          A.09.05 9000/712)<br />
-           REDIRECT_PATH=.:/bin:/usr/local/bin:/etc<br />
-           REDIRECT_QUERY_STRING=<br />
-           REDIRECT_REMOTE_ADDR=121.345.78.123<br />
-           REDIRECT_REMOTE_HOST=ooh.ahhh.com<br />
-           REDIRECT_SERVER_NAME=crash.bang.edu<br />
-           REDIRECT_SERVER_PORT=80<br />
-           REDIRECT_SERVER_SOFTWARE=Apache/0.8.15<br />
-           REDIRECT_URL=/cgi-bin/buggy.pl<br />
-          </code>
-        </blockquote>
-
-        <p>note the <code>REDIRECT_</code> prefix.</p>
-
-        <p>At least <code>REDIRECT_URL</code> and
-        <code>REDIRECT_QUERY_STRING</code> will be passed to the
-        new URL (assuming it's a cgi-script or a cgi-include). The
-        other variables will exist only if they existed prior to
-        the error/problem. <strong>None</strong> of these will be
-        set if your ErrorDocument is an <em>external</em> redirect
-        (<em>i.e.</em>, anything starting with a scheme name like
-        <code>http:</code>, even if it refers to the same host as
-        the server).</p>
-      </dd>
-
-      <dt>Configuration</dt>
-
-      <dd>
-        Use of "ErrorDocument" is enabled for .htaccess files when
-        the <a href="mod/core.html#allowoverride">"FileInfo"
-        override</a> is allowed. 
-
-        <p>Here are some examples...</p>
-
-        <blockquote>
-          <code>ErrorDocument 500 /cgi-bin/crash-recover<br />
-           ErrorDocument 500 "Sorry, our script crashed. Oh
-          dear<br />
-           ErrorDocument 500 http://xxx/<br />
-           ErrorDocument 404 /Lame_excuses/not_found.html<br />
-           ErrorDocument 401
-          /Subscription/how_to_subscribe.html</code>
-        </blockquote>
-
-        <p>The syntax is,</p>
-
-        <p><code><a
-        href="mod/core.html#errordocument">ErrorDocument</a></code>
-        &lt;3-digit-code&gt; action</p>
-
-        <p>where the action can be,</p>
-
-        <ol>
-          <li>Text to be displayed. Prefix the text with a quote
-          ("). Whatever follows the quote is displayed. <em>Note:
-          the (") prefix isn't displayed.</em></li>
-
-          <li>An external URL to redirect to.</li>
-
-          <li>A local URL to redirect to.</li>
-        </ol>
-      </dd>
-    </dl>
-    <hr />
-
-    <h2>Custom error responses and redirects</h2>
-
-    <dl>
-      <dt>Purpose</dt>
-
-      <dd>Apache's behavior to redirected URLs has been modified so
-      that additional environment variables are available to a
-      script/server-include.</dd>
-
-      <dt>Old behavior</dt>
-
-      <dd>Standard CGI vars were made available to a script which
-      has been redirected to. No indication of where the
-      redirection came from was provided.</dd>
-
-      <dt>New behavior</dt>
-
-      <dd>A new batch of environment variables will be initialized
-      for use by a script which has been redirected to. Each new
-      variable will have the prefix <code>REDIRECT_</code>.
-      <code>REDIRECT_</code> environment variables are created from
-      the CGI environment variables which existed prior to the
-      redirect, they are renamed with a <code>REDIRECT_</code>
-      prefix, <em>i.e.</em>, <code>HTTP_USER_AGENT</code> becomes
-      <code>REDIRECT_HTTP_USER_AGENT</code>. In addition to these
-      new variables, Apache will define <code>REDIRECT_URL</code>
-      and <code>REDIRECT_STATUS</code> to help the script trace its
-      origin. Both the original URL and the URL being redirected to
-      can be logged in the access log.</dd>
-    </dl>
-
-    <p>If the ErrorDocument specifies a local redirect to a CGI
-    script, the script should include a "<samp>Status:</samp>"
-    header field in its output in order to ensure the propagation
-    all the way back to the client of the error condition that
-    caused it to be invoked. For instance, a Perl ErrorDocument
-    script might include the following:</p>
-<pre>
-      :
-    print  "Content-type: text/html\n";
-    printf "Status: %s Condition Intercepted\n", $ENV{"REDIRECT_STATUS"};
-      :
-</pre>
-
-    <p>If the script is dedicated to handling a particular error
-    condition, such as <samp>404&nbsp;Not&nbsp;Found</samp>, it can
-    use the specific code and error text instead.</p>
-    <!--#include virtual="footer.html" -->
-  </body>
-</html>
-
diff --git a/docs/manual/developer/API.html b/docs/manual/developer/API.html
deleted file mode 100644
index 2c0a4ad..0000000
--- a/docs/manual/developer/API.html
+++ /dev/null
@@ -1,1245 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta name="generator" content="HTML Tidy, see www.w3.org" />
-
-    <title>Apache API notes</title>
-  </head>
-  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-
-  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-  vlink="#000080" alink="#FF0000">
-    <!--#include virtual="header.html" -->
-
-    <blockquote>
-      <strong>Warning:</strong> This document has not been updated
-      to take into account changes made in the 2.0 version of the
-      Apache HTTP Server. Some of the information may still be
-      relevant, but please use it with care.
-    </blockquote>
-
-    <h1 align="CENTER">Apache API notes</h1>
-    These are some notes on the Apache API and the data structures
-    you have to deal with, <em>etc.</em> They are not yet nearly
-    complete, but hopefully, they will help you get your bearings.
-    Keep in mind that the API is still subject to change as we gain
-    experience with it. (See the TODO file for what <em>might</em>
-    be coming). However, it will be easy to adapt modules to any
-    changes that are made. (We have more modules to adapt than you
-    do). 
-
-    <p>A few notes on general pedagogical style here. In the
-    interest of conciseness, all structure declarations here are
-    incomplete --- the real ones have more slots that I'm not
-    telling you about. For the most part, these are reserved to one
-    component of the server core or another, and should be altered
-    by modules with caution. However, in some cases, they really
-    are things I just haven't gotten around to yet. Welcome to the
-    bleeding edge.</p>
-
-    <p>Finally, here's an outline, to give you some bare idea of
-    what's coming up, and in what order:</p>
-
-    <ul>
-      <li>
-        <a href="#basics">Basic concepts.</a> 
-
-        <ul>
-          <li><a href="#HMR">Handlers, Modules, and
-          Requests</a></li>
-
-          <li><a href="#moduletour">A brief tour of a
-          module</a></li>
-        </ul>
-      </li>
-
-      <li>
-        <a href="#handlers">How handlers work</a> 
-
-        <ul>
-          <li><a href="#req_tour">A brief tour of the
-          <code>request_rec</code></a></li>
-
-          <li><a href="#req_orig">Where request_rec structures come
-          from</a></li>
-
-          <li><a href="#req_return">Handling requests, declining,
-          and returning error codes</a></li>
-
-          <li><a href="#resp_handlers">Special considerations for
-          response handlers</a></li>
-
-          <li><a href="#auth_handlers">Special considerations for
-          authentication handlers</a></li>
-
-          <li><a href="#log_handlers">Special considerations for
-          logging handlers</a></li>
-        </ul>
-      </li>
-
-      <li><a href="#pools">Resource allocation and resource
-      pools</a></li>
-
-      <li>
-        <a href="#config">Configuration, commands and the like</a> 
-
-        <ul>
-          <li><a href="#per-dir">Per-directory configuration
-          structures</a></li>
-
-          <li><a href="#commands">Command handling</a></li>
-
-          <li><a href="#servconf">Side notes --- per-server
-          configuration, virtual servers, <em>etc</em>.</a></li>
-        </ul>
-      </li>
-    </ul>
-
-    <h2><a id="basics" name="basics">Basic concepts.</a></h2>
-    We begin with an overview of the basic concepts behind the API,
-    and how they are manifested in the code. 
-
-    <h3><a id="HMR" name="HMR">Handlers, Modules, and
-    Requests</a></h3>
-    Apache breaks down request handling into a series of steps,
-    more or less the same way the Netscape server API does
-    (although this API has a few more stages than NetSite does, as
-    hooks for stuff I thought might be useful in the future). These
-    are: 
-
-    <ul>
-      <li>URI -&gt; Filename translation</li>
-
-      <li>Auth ID checking [is the user who they say they
-      are?]</li>
-
-      <li>Auth access checking [is the user authorized
-      <em>here</em>?]</li>
-
-      <li>Access checking other than auth</li>
-
-      <li>Determining MIME type of the object requested</li>
-
-      <li>`Fixups' --- there aren't any of these yet, but the phase
-      is intended as a hook for possible extensions like
-      <code>SetEnv</code>, which don't really fit well
-      elsewhere.</li>
-
-      <li>Actually sending a response back to the client.</li>
-
-      <li>Logging the request</li>
-    </ul>
-    These phases are handled by looking at each of a succession of
-    <em>modules</em>, looking to see if each of them has a handler
-    for the phase, and attempting invoking it if so. The handler
-    can typically do one of three things: 
-
-    <ul>
-      <li><em>Handle</em> the request, and indicate that it has
-      done so by returning the magic constant <code>OK</code>.</li>
-
-      <li><em>Decline</em> to handle the request, by returning the
-      magic integer constant <code>DECLINED</code>. In this case,
-      the server behaves in all respects as if the handler simply
-      hadn't been there.</li>
-
-      <li>Signal an error, by returning one of the HTTP error
-      codes. This terminates normal handling of the request,
-      although an ErrorDocument may be invoked to try to mop up,
-      and it will be logged in any case.</li>
-    </ul>
-    Most phases are terminated by the first module that handles
-    them; however, for logging, `fixups', and non-access
-    authentication checking, all handlers always run (barring an
-    error). Also, the response phase is unique in that modules may
-    declare multiple handlers for it, via a dispatch table keyed on
-    the MIME type of the requested object. Modules may declare a
-    response-phase handler which can handle <em>any</em> request,
-    by giving it the key <code>*/*</code> (<em>i.e.</em>, a
-    wildcard MIME type specification). However, wildcard handlers
-    are only invoked if the server has already tried and failed to
-    find a more specific response handler for the MIME type of the
-    requested object (either none existed, or they all declined). 
-
-    <p>The handlers themselves are functions of one argument (a
-    <code>request_rec</code> structure. vide infra), which returns
-    an integer, as above.</p>
-
-    <h3><a id="moduletour" name="moduletour">A brief tour of a
-    module</a></h3>
-    At this point, we need to explain the structure of a module.
-    Our candidate will be one of the messier ones, the CGI module
-    --- this handles both CGI scripts and the
-    <code>ScriptAlias</code> config file command. It's actually a
-    great deal more complicated than most modules, but if we're
-    going to have only one example, it might as well be the one
-    with its fingers in every place. 
-
-    <p>Let's begin with handlers. In order to handle the CGI
-    scripts, the module declares a response handler for them.
-    Because of <code>ScriptAlias</code>, it also has handlers for
-    the name translation phase (to recognize
-    <code>ScriptAlias</code>ed URIs), the type-checking phase (any
-    <code>ScriptAlias</code>ed request is typed as a CGI
-    script).</p>
-
-    <p>The module needs to maintain some per (virtual) server
-    information, namely, the <code>ScriptAlias</code>es in effect;
-    the module structure therefore contains pointers to a functions
-    which builds these structures, and to another which combines
-    two of them (in case the main server and a virtual server both
-    have <code>ScriptAlias</code>es declared).</p>
-
-    <p>Finally, this module contains code to handle the
-    <code>ScriptAlias</code> command itself. This particular module
-    only declares one command, but there could be more, so modules
-    have <em>command tables</em> which declare their commands, and
-    describe where they are permitted, and how they are to be
-    invoked.</p>
-
-    <p>A final note on the declared types of the arguments of some
-    of these commands: a <code>pool</code> is a pointer to a
-    <em>resource pool</em> structure; these are used by the server
-    to keep track of the memory which has been allocated, files
-    opened, <em>etc.</em>, either to service a particular request,
-    or to handle the process of configuring itself. That way, when
-    the request is over (or, for the configuration pool, when the
-    server is restarting), the memory can be freed, and the files
-    closed, <em>en masse</em>, without anyone having to write
-    explicit code to track them all down and dispose of them. Also,
-    a <code>cmd_parms</code> structure contains various information
-    about the config file being read, and other status information,
-    which is sometimes of use to the function which processes a
-    config-file command (such as <code>ScriptAlias</code>). With no
-    further ado, the module itself:</p>
-<pre>
-/* Declarations of handlers. */
-
-int translate_scriptalias (request_rec *);
-int type_scriptalias (request_rec *);
-int cgi_handler (request_rec *);
-
-/* Subsidiary dispatch table for response-phase handlers, by MIME type */
-
-handler_rec cgi_handlers[] = {
-{ "application/x-httpd-cgi", cgi_handler },
-{ NULL }
-};
-
-/* Declarations of routines to manipulate the module's configuration
- * info.  Note that these are returned, and passed in, as void *'s;
- * the server core keeps track of them, but it doesn't, and can't,
- * know their internal structure.
- */
-
-void *make_cgi_server_config (pool *);
-void *merge_cgi_server_config (pool *, void *, void *);
-
-/* Declarations of routines to handle config-file commands */
-
-extern char *script_alias(cmd_parms *, void *per_dir_config, char *fake,
-                          char *real);
-
-command_rec cgi_cmds[] = {
-{ "ScriptAlias", script_alias, NULL, RSRC_CONF, TAKE2,
-    "a fakename and a realname"},
-{ NULL }
-};
-
-module cgi_module = {
-   STANDARD_MODULE_STUFF,
-   NULL,                     /* initializer */
-   NULL,                     /* dir config creator */
-   NULL,                     /* dir merger --- default is to override */
-   make_cgi_server_config,   /* server config */
-   merge_cgi_server_config,  /* merge server config */
-   cgi_cmds,                 /* command table */
-   cgi_handlers,             /* handlers */
-   translate_scriptalias,    /* filename translation */
-   NULL,                     /* check_user_id */
-   NULL,                     /* check auth */
-   NULL,                     /* check access */
-   type_scriptalias,         /* type_checker */
-   NULL,                     /* fixups */
-   NULL,                     /* logger */
-   NULL                      /* header parser */
-};
-</pre>
-
-    <h2><a id="handlers" name="handlers">How handlers work</a></h2>
-    The sole argument to handlers is a <code>request_rec</code>
-    structure. This structure describes a particular request which
-    has been made to the server, on behalf of a client. In most
-    cases, each connection to the client generates only one
-    <code>request_rec</code> structure. 
-
-    <h3><a id="req_tour" name="req_tour">A brief tour of the
-    <code>request_rec</code></a></h3>
-    The <code>request_rec</code> contains pointers to a resource
-    pool which will be cleared when the server is finished handling
-    the request; to structures containing per-server and
-    per-connection information, and most importantly, information
-    on the request itself. 
-
-    <p>The most important such information is a small set of
-    character strings describing attributes of the object being
-    requested, including its URI, filename, content-type and
-    content-encoding (these being filled in by the translation and
-    type-check handlers which handle the request,
-    respectively).</p>
-
-    <p>Other commonly used data items are tables giving the MIME
-    headers on the client's original request, MIME headers to be
-    sent back with the response (which modules can add to at will),
-    and environment variables for any subprocesses which are
-    spawned off in the course of servicing the request. These
-    tables are manipulated using the <code>ap_table_get</code> and
-    <code>ap_table_set</code> routines.</p>
-
-    <blockquote>
-      Note that the <samp>Content-type</samp> header value
-      <em>cannot</em> be set by module content-handlers using the
-      <samp>ap_table_*()</samp> routines. Rather, it is set by
-      pointing the <samp>content_type</samp> field in the
-      <samp>request_rec</samp> structure to an appropriate string.
-      <em>E.g.</em>, 
-<pre>
-  r-&gt;content_type = "text/html";
-</pre>
-    </blockquote>
-    Finally, there are pointers to two data structures which, in
-    turn, point to per-module configuration structures.
-    Specifically, these hold pointers to the data structures which
-    the module has built to describe the way it has been configured
-    to operate in a given directory (via <code>.htaccess</code>
-    files or <code>&lt;Directory&gt;</code> sections), for private
-    data it has built in the course of servicing the request (so
-    modules' handlers for one phase can pass `notes' to their
-    handlers for other phases). There is another such configuration
-    vector in the <code>server_rec</code> data structure pointed to
-    by the <code>request_rec</code>, which contains per (virtual)
-    server configuration data. 
-
-    <p>Here is an abridged declaration, giving the fields most
-    commonly used:</p>
-<pre>
-struct request_rec {
-
-  pool *pool;
-  conn_rec *connection;
-  server_rec *server;
-
-  /* What object is being requested */
-
-  char *uri;
-  char *filename;
-  char *path_info;
-  char *args;           /* QUERY_ARGS, if any */
-  struct stat finfo;    /* Set by server core;
-                         * st_mode set to zero if no such file */
-
-  char *content_type;
-  char *content_encoding;
-
-  /* MIME header environments, in and out.  Also, an array containing
-   * environment variables to be passed to subprocesses, so people can
-   * write modules to add to that environment.
-   *
-   * The difference between headers_out and err_headers_out is that
-   * the latter are printed even on error, and persist across internal
-   * redirects (so the headers printed for ErrorDocument handlers will
-   * have them).
-   */
-
-  table *headers_in;
-  table *headers_out;
-  table *err_headers_out;
-  table *subprocess_env;
-
-  /* Info about the request itself... */
-
-  int header_only;     /* HEAD request, as opposed to GET */
-  char *protocol;      /* Protocol, as given to us, or HTTP/0.9 */
-  char *method;        /* GET, HEAD, POST, <em>etc.</em> */
-  int method_number;   /* M_GET, M_POST, <em>etc.</em> */
-
-  /* Info for logging */
-
-  char *the_request;
-  int bytes_sent;
-
-  /* A flag which modules can set, to indicate that the data being
-   * returned is volatile, and clients should be told not to cache it.
-   */
-
-  int no_cache;
-
-  /* Various other config info which may change with .htaccess files
-   * These are config vectors, with one void* pointer for each module
-   * (the thing pointed to being the module's business).
-   */
-
-  void *per_dir_config;   /* Options set in config files, <em>etc.</em> */
-  void *request_config;   /* Notes on *this* request */
-
-};
-
-</pre>
-
-    <h3><a id="req_orig" name="req_orig">Where request_rec
-    structures come from</a></h3>
-    Most <code>request_rec</code> structures are built by reading
-    an HTTP request from a client, and filling in the fields.
-    However, there are a few exceptions: 
-
-    <ul>
-      <li>If the request is to an imagemap, a type map
-      (<em>i.e.</em>, a <code>*.var</code> file), or a CGI script
-      which returned a local `Location:', then the resource which
-      the user requested is going to be ultimately located by some
-      URI other than what the client originally supplied. In this
-      case, the server does an <em>internal redirect</em>,
-      constructing a new <code>request_rec</code> for the new URI,
-      and processing it almost exactly as if the client had
-      requested the new URI directly.</li>
-
-      <li>If some handler signaled an error, and an
-      <code>ErrorDocument</code> is in scope, the same internal
-      redirect machinery comes into play.</li>
-
-      <li>
-        Finally, a handler occasionally needs to investigate `what
-        would happen if' some other request were run. For instance,
-        the directory indexing module needs to know what MIME type
-        would be assigned to a request for each directory entry, in
-        order to figure out what icon to use. 
-
-        <p>Such handlers can construct a <em>sub-request</em>,
-        using the functions <code>ap_sub_req_lookup_file</code>,
-        <code>ap_sub_req_lookup_uri</code>, and
-        <code>ap_sub_req_method_uri</code>; these construct a new
-        <code>request_rec</code> structure and processes it as you
-        would expect, up to but not including the point of actually
-        sending a response. (These functions skip over the access
-        checks if the sub-request is for a file in the same
-        directory as the original request).</p>
-
-        <p>(Server-side includes work by building sub-requests and
-        then actually invoking the response handler for them, via
-        the function <code>ap_run_sub_req</code>).</p>
-      </li>
-    </ul>
-
-    <h3><a id="req_return" name="req_return">Handling requests,
-    declining, and returning error codes</a></h3>
-    As discussed above, each handler, when invoked to handle a
-    particular <code>request_rec</code>, has to return an
-    <code>int</code> to indicate what happened. That can either be 
-
-    <ul>
-      <li>OK --- the request was handled successfully. This may or
-      may not terminate the phase.</li>
-
-      <li>DECLINED --- no erroneous condition exists, but the
-      module declines to handle the phase; the server tries to find
-      another.</li>
-
-      <li>an HTTP error code, which aborts handling of the
-      request.</li>
-    </ul>
-    Note that if the error code returned is <code>REDIRECT</code>,
-    then the module should put a <code>Location</code> in the
-    request's <code>headers_out</code>, to indicate where the
-    client should be redirected <em>to</em>. 
-
-    <h3><a id="resp_handlers" name="resp_handlers">Special
-    considerations for response handlers</a></h3>
-    Handlers for most phases do their work by simply setting a few
-    fields in the <code>request_rec</code> structure (or, in the
-    case of access checkers, simply by returning the correct error
-    code). However, response handlers have to actually send a
-    request back to the client. 
-
-    <p>They should begin by sending an HTTP response header, using
-    the function <code>ap_send_http_header</code>. (You don't have
-    to do anything special to skip sending the header for HTTP/0.9
-    requests; the function figures out on its own that it shouldn't
-    do anything). If the request is marked
-    <code>header_only</code>, that's all they should do; they
-    should return after that, without attempting any further
-    output.</p>
-
-    <p>Otherwise, they should produce a request body which responds
-    to the client as appropriate. The primitives for this are
-    <code>ap_rputc</code> and <code>ap_rprintf</code>, for
-    internally generated output, and <code>ap_send_fd</code>, to
-    copy the contents of some <code>FILE *</code> straight to the
-    client.</p>
-
-    <p>At this point, you should more or less understand the
-    following piece of code, which is the handler which handles
-    <code>GET</code> requests which have no more specific handler;
-    it also shows how conditional <code>GET</code>s can be handled,
-    if it's desirable to do so in a particular response handler ---
-    <code>ap_set_last_modified</code> checks against the
-    <code>If-modified-since</code> value supplied by the client, if
-    any, and returns an appropriate code (which will, if nonzero,
-    be USE_LOCAL_COPY). No similar considerations apply for
-    <code>ap_set_content_length</code>, but it returns an error
-    code for symmetry.</p>
-<pre>
-int default_handler (request_rec *r)
-{
-    int errstatus;
-    FILE *f;
-
-    if (r-&gt;method_number != M_GET) return DECLINED;
-    if (r-&gt;finfo.st_mode == 0) return NOT_FOUND;
-
-    if ((errstatus = ap_set_content_length (r, r-&gt;finfo.st_size))
-    || (errstatus = ap_set_last_modified (r, r-&gt;finfo.st_mtime)))
-        return errstatus;
-
-    f = fopen (r-&gt;filename, "r");
-
-    if (f == NULL) {
-        log_reason("file permissions deny server access",
-                   r-&gt;filename, r);
-        return FORBIDDEN;
-    }
-
-    register_timeout ("send", r);
-    ap_send_http_header (r);
-
-    if (!r-&gt;header_only) send_fd (f, r);
-    ap_pfclose (r-&gt;pool, f);
-    return OK;
-}
-</pre>
-    Finally, if all of this is too much of a challenge, there are a
-    few ways out of it. First off, as shown above, a response
-    handler which has not yet produced any output can simply return
-    an error code, in which case the server will automatically
-    produce an error response. Secondly, it can punt to some other
-    handler by invoking <code>ap_internal_redirect</code>, which is
-    how the internal redirection machinery discussed above is
-    invoked. A response handler which has internally redirected
-    should always return <code>OK</code>. 
-
-    <p>(Invoking <code>ap_internal_redirect</code> from handlers
-    which are <em>not</em> response handlers will lead to serious
-    confusion).</p>
-
-    <h3><a id="auth_handlers" name="auth_handlers">Special
-    considerations for authentication handlers</a></h3>
-    Stuff that should be discussed here in detail: 
-
-    <ul>
-      <li>Authentication-phase handlers not invoked unless auth is
-      configured for the directory.</li>
-
-      <li>Common auth configuration stored in the core per-dir
-      configuration; it has accessors <code>ap_auth_type</code>,
-      <code>ap_auth_name</code>, and <code>ap_requires</code>.</li>
-
-      <li>Common routines, to handle the protocol end of things, at
-      least for HTTP basic authentication
-      (<code>ap_get_basic_auth_pw</code>, which sets the
-      <code>connection-&gt;user</code> structure field
-      automatically, and <code>ap_note_basic_auth_failure</code>,
-      which arranges for the proper <code>WWW-Authenticate:</code>
-      header to be sent back).</li>
-    </ul>
-
-    <h3><a id="log_handlers" name="log_handlers">Special
-    considerations for logging handlers</a></h3>
-    When a request has internally redirected, there is the question
-    of what to log. Apache handles this by bundling the entire
-    chain of redirects into a list of <code>request_rec</code>
-    structures which are threaded through the
-    <code>r-&gt;prev</code> and <code>r-&gt;next</code> pointers.
-    The <code>request_rec</code> which is passed to the logging
-    handlers in such cases is the one which was originally built
-    for the initial request from the client; note that the
-    bytes_sent field will only be correct in the last request in
-    the chain (the one for which a response was actually sent). 
-
-    <h2><a id="pools" name="pools">Resource allocation and resource
-    pools</a></h2>
-
-    <p>One of the problems of writing and designing a server-pool
-    server is that of preventing leakage, that is, allocating
-    resources (memory, open files, <em>etc.</em>), without
-    subsequently releasing them. The resource pool machinery is
-    designed to make it easy to prevent this from happening, by
-    allowing resource to be allocated in such a way that they are
-    <em>automatically</em> released when the server is done with
-    them.</p>
-
-    <p>The way this works is as follows: the memory which is
-    allocated, file opened, <em>etc.</em>, to deal with a
-    particular request are tied to a <em>resource pool</em> which
-    is allocated for the request. The pool is a data structure
-    which itself tracks the resources in question.</p>
-
-    <p>When the request has been processed, the pool is
-    <em>cleared</em>. At that point, all the memory associated with
-    it is released for reuse, all files associated with it are
-    closed, and any other clean-up functions which are associated
-    with the pool are run. When this is over, we can be confident
-    that all the resource tied to the pool have been released, and
-    that none of them have leaked.</p>
-
-    <p>Server restarts, and allocation of memory and resources for
-    per-server configuration, are handled in a similar way. There
-    is a <em>configuration pool</em>, which keeps track of
-    resources which were allocated while reading the server
-    configuration files, and handling the commands therein (for
-    instance, the memory that was allocated for per-server module
-    configuration, log files and other files that were opened, and
-    so forth). When the server restarts, and has to reread the
-    configuration files, the configuration pool is cleared, and so
-    the memory and file descriptors which were taken up by reading
-    them the last time are made available for reuse.</p>
-
-    <p>It should be noted that use of the pool machinery isn't
-    generally obligatory, except for situations like logging
-    handlers, where you really need to register cleanups to make
-    sure that the log file gets closed when the server restarts
-    (this is most easily done by using the function <code><a
-    href="#pool-files">ap_pfopen</a></code>, which also arranges
-    for the underlying file descriptor to be closed before any
-    child processes, such as for CGI scripts, are
-    <code>exec</code>ed), or in case you are using the timeout
-    machinery (which isn't yet even documented here). However,
-    there are two benefits to using it: resources allocated to a
-    pool never leak (even if you allocate a scratch string, and
-    just forget about it); also, for memory allocation,
-    <code>ap_palloc</code> is generally faster than
-    <code>malloc</code>.</p>
-
-    <p>We begin here by describing how memory is allocated to
-    pools, and then discuss how other resources are tracked by the
-    resource pool machinery.</p>
-
-    <h3>Allocation of memory in pools</h3>
-
-    <p>Memory is allocated to pools by calling the function
-    <code>ap_palloc</code>, which takes two arguments, one being a
-    pointer to a resource pool structure, and the other being the
-    amount of memory to allocate (in <code>char</code>s). Within
-    handlers for handling requests, the most common way of getting
-    a resource pool structure is by looking at the
-    <code>pool</code> slot of the relevant
-    <code>request_rec</code>; hence the repeated appearance of the
-    following idiom in module code:</p>
-<pre>
-int my_handler(request_rec *r)
-{
-    struct my_structure *foo;
-    ...
-
-    foo = (foo *)ap_palloc (r-&gt;pool, sizeof(my_structure));
-}
-</pre>
-
-    <p>Note that <em>there is no <code>ap_pfree</code></em> ---
-    <code>ap_palloc</code>ed memory is freed only when the
-    associated resource pool is cleared. This means that
-    <code>ap_palloc</code> does not have to do as much accounting
-    as <code>malloc()</code>; all it does in the typical case is to
-    round up the size, bump a pointer, and do a range check.</p>
-
-    <p>(It also raises the possibility that heavy use of
-    <code>ap_palloc</code> could cause a server process to grow
-    excessively large. There are two ways to deal with this, which
-    are dealt with below; briefly, you can use <code>malloc</code>,
-    and try to be sure that all of the memory gets explicitly
-    <code>free</code>d, or you can allocate a sub-pool of the main
-    pool, allocate your memory in the sub-pool, and clear it out
-    periodically. The latter technique is discussed in the section
-    on sub-pools below, and is used in the directory-indexing code,
-    in order to avoid excessive storage allocation when listing
-    directories with thousands of files).</p>
-
-    <h3>Allocating initialized memory</h3>
-
-    <p>There are functions which allocate initialized memory, and
-    are frequently useful. The function <code>ap_pcalloc</code> has
-    the same interface as <code>ap_palloc</code>, but clears out
-    the memory it allocates before it returns it. The function
-    <code>ap_pstrdup</code> takes a resource pool and a <code>char
-    *</code> as arguments, and allocates memory for a copy of the
-    string the pointer points to, returning a pointer to the copy.
-    Finally <code>ap_pstrcat</code> is a varargs-style function,
-    which takes a pointer to a resource pool, and at least two
-    <code>char *</code> arguments, the last of which must be
-    <code>NULL</code>. It allocates enough memory to fit copies of
-    each of the strings, as a unit; for instance:</p>
-<pre>
-     ap_pstrcat (r-&gt;pool, "foo", "/", "bar", NULL);
-</pre>
-
-    <p>returns a pointer to 8 bytes worth of memory, initialized to
-    <code>"foo/bar"</code>.</p>
-
-    <h3><a id="pools-used" name="pools-used">Commonly-used pools in
-    the Apache Web server</a></h3>
-
-    <p>A pool is really defined by its lifetime more than anything
-    else. There are some static pools in http_main which are passed
-    to various non-http_main functions as arguments at opportune
-    times. Here they are:</p>
-
-    <dl compact="compact">
-      <dt>permanent_pool</dt>
-
-      <dd>
-        <ul>
-          <li>never passed to anything else, this is the ancestor
-          of all pools</li>
-        </ul>
-      </dd>
-
-      <dt>pconf</dt>
-
-      <dd>
-        <ul>
-          <li>subpool of permanent_pool</li>
-
-          <li>created at the beginning of a config "cycle"; exists
-          until the server is terminated or restarts; passed to all
-          config-time routines, either via cmd-&gt;pool, or as the
-          "pool *p" argument on those which don't take pools</li>
-
-          <li>passed to the module init() functions</li>
-        </ul>
-      </dd>
-
-      <dt>ptemp</dt>
-
-      <dd>
-        <ul>
-          <li>sorry I lie, this pool isn't called this currently in
-          1.3, I renamed it this in my pthreads development. I'm
-          referring to the use of ptrans in the parent... contrast
-          this with the later definition of ptrans in the
-          child.</li>
-
-          <li>subpool of permanent_pool</li>
-
-          <li>created at the beginning of a config "cycle"; exists
-          until the end of config parsing; passed to config-time
-          routines <em>via</em> cmd-&gt;temp_pool. Somewhat of a
-          "bastard child" because it isn't available everywhere.
-          Used for temporary scratch space which may be needed by
-          some config routines but which is deleted at the end of
-          config.</li>
-        </ul>
-      </dd>
-
-      <dt>pchild</dt>
-
-      <dd>
-        <ul>
-          <li>subpool of permanent_pool</li>
-
-          <li>created when a child is spawned (or a thread is
-          created); lives until that child (thread) is
-          destroyed</li>
-
-          <li>passed to the module child_init functions</li>
-
-          <li>destruction happens right after the child_exit
-          functions are called... (which may explain why I think
-          child_exit is redundant and unneeded)</li>
-        </ul>
-      </dd>
-
-      <dt>ptrans</dt>
-
-      <dd>
-        <ul>
-          <li>should be a subpool of pchild, but currently is a
-          subpool of permanent_pool, see above</li>
-
-          <li>cleared by the child before going into the accept()
-          loop to receive a connection</li>
-
-          <li>used as connection-&gt;pool</li>
-        </ul>
-      </dd>
-
-      <dt>r-&gt;pool</dt>
-
-      <dd>
-        <ul>
-          <li>for the main request this is a subpool of
-          connection-&gt;pool; for subrequests it is a subpool of
-          the parent request's pool.</li>
-
-          <li>exists until the end of the request (<em>i.e.</em>,
-          ap_destroy_sub_req, or in child_main after
-          process_request has finished)</li>
-
-          <li>note that r itself is allocated from r-&gt;pool;
-          <em>i.e.</em>, r-&gt;pool is first created and then r is
-          the first thing palloc()d from it</li>
-        </ul>
-      </dd>
-    </dl>
-
-    <p>For almost everything folks do, r-&gt;pool is the pool to
-    use. But you can see how other lifetimes, such as pchild, are
-    useful to some modules... such as modules that need to open a
-    database connection once per child, and wish to clean it up
-    when the child dies.</p>
-
-    <p>You can also see how some bugs have manifested themself,
-    such as setting connection-&gt;user to a value from r-&gt;pool
-    -- in this case connection exists for the lifetime of ptrans,
-    which is longer than r-&gt;pool (especially if r-&gt;pool is a
-    subrequest!). So the correct thing to do is to allocate from
-    connection-&gt;pool.</p>
-
-    <p>And there was another interesting bug in
-    mod_include/mod_cgi. You'll see in those that they do this test
-    to decide if they should use r-&gt;pool or r-&gt;main-&gt;pool.
-    In this case the resource that they are registering for cleanup
-    is a child process. If it were registered in r-&gt;pool, then
-    the code would wait() for the child when the subrequest
-    finishes. With mod_include this could be any old #include, and
-    the delay can be up to 3 seconds... and happened quite
-    frequently. Instead the subprocess is registered in
-    r-&gt;main-&gt;pool which causes it to be cleaned up when the
-    entire request is done -- <em>i.e.</em>, after the output has
-    been sent to the client and logging has happened.</p>
-
-    <h3><a id="pool-files" name="pool-files">Tracking open files,
-    etc.</a></h3>
-
-    <p>As indicated above, resource pools are also used to track
-    other sorts of resources besides memory. The most common are
-    open files. The routine which is typically used for this is
-    <code>ap_pfopen</code>, which takes a resource pool and two
-    strings as arguments; the strings are the same as the typical
-    arguments to <code>fopen</code>, <em>e.g.</em>,</p>
-<pre>
-     ...
-     FILE *f = ap_pfopen (r-&gt;pool, r-&gt;filename, "r");
-
-     if (f == NULL) { ... } else { ... }
-</pre>
-
-    <p>There is also a <code>ap_popenf</code> routine, which
-    parallels the lower-level <code>open</code> system call. Both
-    of these routines arrange for the file to be closed when the
-    resource pool in question is cleared.</p>
-
-    <p>Unlike the case for memory, there <em>are</em> functions to
-    close files allocated with <code>ap_pfopen</code>, and
-    <code>ap_popenf</code>, namely <code>ap_pfclose</code> and
-    <code>ap_pclosef</code>. (This is because, on many systems, the
-    number of files which a single process can have open is quite
-    limited). It is important to use these functions to close files
-    allocated with <code>ap_pfopen</code> and
-    <code>ap_popenf</code>, since to do otherwise could cause fatal
-    errors on systems such as Linux, which react badly if the same
-    <code>FILE*</code> is closed more than once.</p>
-
-    <p>(Using the <code>close</code> functions is not mandatory,
-    since the file will eventually be closed regardless, but you
-    should consider it in cases where your module is opening, or
-    could open, a lot of files).</p>
-
-    <h3>Other sorts of resources --- cleanup functions</h3>
-
-    <blockquote>
-      More text goes here. Describe the the cleanup primitives in
-      terms of which the file stuff is implemented; also,
-      <code>spawn_process</code>.
-    </blockquote>
-
-    <p>Pool cleanups live until clear_pool() is called:
-    clear_pool(a) recursively calls destroy_pool() on all subpools
-    of a; then calls all the cleanups for a; then releases all the
-    memory for a. destroy_pool(a) calls clear_pool(a) and then
-    releases the pool structure itself. <em>i.e.</em>,
-    clear_pool(a) doesn't delete a, it just frees up all the
-    resources and you can start using it again immediately.</p>
-
-    <h3>Fine control --- creating and dealing with sub-pools, with
-    a note on sub-requests</h3>
-    On rare occasions, too-free use of <code>ap_palloc()</code> and
-    the associated primitives may result in undesirably profligate
-    resource allocation. You can deal with such a case by creating
-    a <em>sub-pool</em>, allocating within the sub-pool rather than
-    the main pool, and clearing or destroying the sub-pool, which
-    releases the resources which were associated with it. (This
-    really <em>is</em> a rare situation; the only case in which it
-    comes up in the standard module set is in case of listing
-    directories, and then only with <em>very</em> large
-    directories. Unnecessary use of the primitives discussed here
-    can hair up your code quite a bit, with very little gain). 
-
-    <p>The primitive for creating a sub-pool is
-    <code>ap_make_sub_pool</code>, which takes another pool (the
-    parent pool) as an argument. When the main pool is cleared, the
-    sub-pool will be destroyed. The sub-pool may also be cleared or
-    destroyed at any time, by calling the functions
-    <code>ap_clear_pool</code> and <code>ap_destroy_pool</code>,
-    respectively. (The difference is that
-    <code>ap_clear_pool</code> frees resources associated with the
-    pool, while <code>ap_destroy_pool</code> also deallocates the
-    pool itself. In the former case, you can allocate new resources
-    within the pool, and clear it again, and so forth; in the
-    latter case, it is simply gone).</p>
-
-    <p>One final note --- sub-requests have their own resource
-    pools, which are sub-pools of the resource pool for the main
-    request. The polite way to reclaim the resources associated
-    with a sub request which you have allocated (using the
-    <code>ap_sub_req_...</code> functions) is
-    <code>ap_destroy_sub_req</code>, which frees the resource pool.
-    Before calling this function, be sure to copy anything that you
-    care about which might be allocated in the sub-request's
-    resource pool into someplace a little less volatile (for
-    instance, the filename in its <code>request_rec</code>
-    structure).</p>
-
-    <p>(Again, under most circumstances, you shouldn't feel obliged
-    to call this function; only 2K of memory or so are allocated
-    for a typical sub request, and it will be freed anyway when the
-    main request pool is cleared. It is only when you are
-    allocating many, many sub-requests for a single main request
-    that you should seriously consider the
-    <code>ap_destroy_...</code> functions).</p>
-
-    <h2><a id="config" name="config">Configuration, commands and
-    the like</a></h2>
-    One of the design goals for this server was to maintain
-    external compatibility with the NCSA 1.3 server --- that is, to
-    read the same configuration files, to process all the
-    directives therein correctly, and in general to be a drop-in
-    replacement for NCSA. On the other hand, another design goal
-    was to move as much of the server's functionality into modules
-    which have as little as possible to do with the monolithic
-    server core. The only way to reconcile these goals is to move
-    the handling of most commands from the central server into the
-    modules. 
-
-    <p>However, just giving the modules command tables is not
-    enough to divorce them completely from the server core. The
-    server has to remember the commands in order to act on them
-    later. That involves maintaining data which is private to the
-    modules, and which can be either per-server, or per-directory.
-    Most things are per-directory, including in particular access
-    control and authorization information, but also information on
-    how to determine file types from suffixes, which can be
-    modified by <code>AddType</code> and <code>DefaultType</code>
-    directives, and so forth. In general, the governing philosophy
-    is that anything which <em>can</em> be made configurable by
-    directory should be; per-server information is generally used
-    in the standard set of modules for information like
-    <code>Alias</code>es and <code>Redirect</code>s which come into
-    play before the request is tied to a particular place in the
-    underlying file system.</p>
-
-    <p>Another requirement for emulating the NCSA server is being
-    able to handle the per-directory configuration files, generally
-    called <code>.htaccess</code> files, though even in the NCSA
-    server they can contain directives which have nothing at all to
-    do with access control. Accordingly, after URI -&gt; filename
-    translation, but before performing any other phase, the server
-    walks down the directory hierarchy of the underlying
-    filesystem, following the translated pathname, to read any
-    <code>.htaccess</code> files which might be present. The
-    information which is read in then has to be <em>merged</em>
-    with the applicable information from the server's own config
-    files (either from the <code>&lt;Directory&gt;</code> sections
-    in <code>access.conf</code>, or from defaults in
-    <code>srm.conf</code>, which actually behaves for most purposes
-    almost exactly like <code>&lt;Directory /&gt;</code>).</p>
-
-    <p>Finally, after having served a request which involved
-    reading <code>.htaccess</code> files, we need to discard the
-    storage allocated for handling them. That is solved the same
-    way it is solved wherever else similar problems come up, by
-    tying those structures to the per-transaction resource
-    pool.</p>
-
-    <h3><a id="per-dir" name="per-dir">Per-directory configuration
-    structures</a></h3>
-    Let's look out how all of this plays out in
-    <code>mod_mime.c</code>, which defines the file typing handler
-    which emulates the NCSA server's behavior of determining file
-    types from suffixes. What we'll be looking at, here, is the
-    code which implements the <code>AddType</code> and
-    <code>AddEncoding</code> commands. These commands can appear in
-    <code>.htaccess</code> files, so they must be handled in the
-    module's private per-directory data, which in fact, consists of
-    two separate <code>table</code>s for MIME types and encoding
-    information, and is declared as follows: 
-<pre>
-typedef struct {
-    table *forced_types;      /* Additional AddTyped stuff */
-    table *encoding_types;    /* Added with AddEncoding... */
-} mime_dir_config;
-</pre>
-    When the server is reading a configuration file, or
-    <code>&lt;Directory&gt;</code> section, which includes one of
-    the MIME module's commands, it needs to create a
-    <code>mime_dir_config</code> structure, so those commands have
-    something to act on. It does this by invoking the function it
-    finds in the module's `create per-dir config slot', with two
-    arguments: the name of the directory to which this
-    configuration information applies (or <code>NULL</code> for
-    <code>srm.conf</code>), and a pointer to a resource pool in
-    which the allocation should happen. 
-
-    <p>(If we are reading a <code>.htaccess</code> file, that
-    resource pool is the per-request resource pool for the request;
-    otherwise it is a resource pool which is used for configuration
-    data, and cleared on restarts. Either way, it is important for
-    the structure being created to vanish when the pool is cleared,
-    by registering a cleanup on the pool if necessary).</p>
-
-    <p>For the MIME module, the per-dir config creation function
-    just <code>ap_palloc</code>s the structure above, and a creates
-    a couple of <code>table</code>s to fill it. That looks like
-    this:</p>
-<pre>
-void *create_mime_dir_config (pool *p, char *dummy)
-{
-    mime_dir_config *new =
-      (mime_dir_config *) ap_palloc (p, sizeof(mime_dir_config));
-
-    new-&gt;forced_types = ap_make_table (p, 4);
-    new-&gt;encoding_types = ap_make_table (p, 4);
-
-    return new;
-}
-</pre>
-    Now, suppose we've just read in a <code>.htaccess</code> file.
-    We already have the per-directory configuration structure for
-    the next directory up in the hierarchy. If the
-    <code>.htaccess</code> file we just read in didn't have any
-    <code>AddType</code> or <code>AddEncoding</code> commands, its
-    per-directory config structure for the MIME module is still
-    valid, and we can just use it. Otherwise, we need to merge the
-    two structures somehow. 
-
-    <p>To do that, the server invokes the module's per-directory
-    config merge function, if one is present. That function takes
-    three arguments: the two structures being merged, and a
-    resource pool in which to allocate the result. For the MIME
-    module, all that needs to be done is overlay the tables from
-    the new per-directory config structure with those from the
-    parent:</p>
-<pre>
-void *merge_mime_dir_configs (pool *p, void *parent_dirv, void *subdirv)
-{
-    mime_dir_config *parent_dir = (mime_dir_config *)parent_dirv;
-    mime_dir_config *subdir = (mime_dir_config *)subdirv;
-    mime_dir_config *new =
-      (mime_dir_config *)ap_palloc (p, sizeof(mime_dir_config));
-
-    new-&gt;forced_types = ap_overlay_tables (p, subdir-&gt;forced_types,
-                                        parent_dir-&gt;forced_types);
-    new-&gt;encoding_types = ap_overlay_tables (p, subdir-&gt;encoding_types,
-                                          parent_dir-&gt;encoding_types);
-
-    return new;
-}
-</pre>
-    As a note --- if there is no per-directory merge function
-    present, the server will just use the subdirectory's
-    configuration info, and ignore the parent's. For some modules,
-    that works just fine (<em>e.g.</em>, for the includes module,
-    whose per-directory configuration information consists solely
-    of the state of the <code>XBITHACK</code>), and for those
-    modules, you can just not declare one, and leave the
-    corresponding structure slot in the module itself
-    <code>NULL</code>. 
-
-    <h3><a id="commands" name="commands">Command handling</a></h3>
-    Now that we have these structures, we need to be able to figure
-    out how to fill them. That involves processing the actual
-    <code>AddType</code> and <code>AddEncoding</code> commands. To
-    find commands, the server looks in the module's <code>command
-    table</code>. That table contains information on how many
-    arguments the commands take, and in what formats, where it is
-    permitted, and so forth. That information is sufficient to
-    allow the server to invoke most command-handling functions with
-    pre-parsed arguments. Without further ado, let's look at the
-    <code>AddType</code> command handler, which looks like this
-    (the <code>AddEncoding</code> command looks basically the same,
-    and won't be shown here): 
-<pre>
-char *add_type(cmd_parms *cmd, mime_dir_config *m, char *ct, char *ext)
-{
-    if (*ext == '.') ++ext;
-    ap_table_set (m-&gt;forced_types, ext, ct);
-    return NULL;
-}
-</pre>
-    This command handler is unusually simple. As you can see, it
-    takes four arguments, two of which are pre-parsed arguments,
-    the third being the per-directory configuration structure for
-    the module in question, and the fourth being a pointer to a
-    <code>cmd_parms</code> structure. That structure contains a
-    bunch of arguments which are frequently of use to some, but not
-    all, commands, including a resource pool (from which memory can
-    be allocated, and to which cleanups should be tied), and the
-    (virtual) server being configured, from which the module's
-    per-server configuration data can be obtained if required. 
-
-    <p>Another way in which this particular command handler is
-    unusually simple is that there are no error conditions which it
-    can encounter. If there were, it could return an error message
-    instead of <code>NULL</code>; this causes an error to be
-    printed out on the server's <code>stderr</code>, followed by a
-    quick exit, if it is in the main config files; for a
-    <code>.htaccess</code> file, the syntax error is logged in the
-    server error log (along with an indication of where it came
-    from), and the request is bounced with a server error response
-    (HTTP error status, code 500).</p>
-
-    <p>The MIME module's command table has entries for these
-    commands, which look like this:</p>
-<pre>
-command_rec mime_cmds[] = {
-{ "AddType", add_type, NULL, OR_FILEINFO, TAKE2,
-    "a mime type followed by a file extension" },
-{ "AddEncoding", add_encoding, NULL, OR_FILEINFO, TAKE2,
-    "an encoding (<em>e.g.</em>, gzip), followed by a file extension" },
-{ NULL }
-};
-</pre>
-    The entries in these tables are: 
-
-    <ul>
-      <li>The name of the command</li>
-
-      <li>The function which handles it</li>
-
-      <li>a <code>(void *)</code> pointer, which is passed in the
-      <code>cmd_parms</code> structure to the command handler ---
-      this is useful in case many similar commands are handled by
-      the same function.</li>
-
-      <li>A bit mask indicating where the command may appear. There
-      are mask bits corresponding to each
-      <code>AllowOverride</code> option, and an additional mask
-      bit, <code>RSRC_CONF</code>, indicating that the command may
-      appear in the server's own config files, but <em>not</em> in
-      any <code>.htaccess</code> file.</li>
-
-      <li>A flag indicating how many arguments the command handler
-      wants pre-parsed, and how they should be passed in.
-      <code>TAKE2</code> indicates two pre-parsed arguments. Other
-      options are <code>TAKE1</code>, which indicates one
-      pre-parsed argument, <code>FLAG</code>, which indicates that
-      the argument should be <code>On</code> or <code>Off</code>,
-      and is passed in as a boolean flag, <code>RAW_ARGS</code>,
-      which causes the server to give the command the raw, unparsed
-      arguments (everything but the command name itself). There is
-      also <code>ITERATE</code>, which means that the handler looks
-      the same as <code>TAKE1</code>, but that if multiple
-      arguments are present, it should be called multiple times,
-      and finally <code>ITERATE2</code>, which indicates that the
-      command handler looks like a <code>TAKE2</code>, but if more
-      arguments are present, then it should be called multiple
-      times, holding the first argument constant.</li>
-
-      <li>Finally, we have a string which describes the arguments
-      that should be present. If the arguments in the actual config
-      file are not as required, this string will be used to help
-      give a more specific error message. (You can safely leave
-      this <code>NULL</code>).</li>
-    </ul>
-    Finally, having set this all up, we have to use it. This is
-    ultimately done in the module's handlers, specifically for its
-    file-typing handler, which looks more or less like this; note
-    that the per-directory configuration structure is extracted
-    from the <code>request_rec</code>'s per-directory configuration
-    vector by using the <code>ap_get_module_config</code> function.
-    
-<pre>
-int find_ct(request_rec *r)
-{
-    int i;
-    char *fn = ap_pstrdup (r-&gt;pool, r-&gt;filename);
-    mime_dir_config *conf = (mime_dir_config *)
-             ap_get_module_config(r-&gt;per_dir_config, &amp;mime_module);
-    char *type;
-
-    if (S_ISDIR(r-&gt;finfo.st_mode)) {
-        r-&gt;content_type = DIR_MAGIC_TYPE;
-        return OK;
-    }
-
-    if((i=ap_rind(fn,'.')) &lt; 0) return DECLINED;
-    ++i;
-
-    if ((type = ap_table_get (conf-&gt;encoding_types, &amp;fn[i])))
-    {
-        r-&gt;content_encoding = type;
-
-        /* go back to previous extension to try to use it as a type */
-
-        fn[i-1] = '\0';
-        if((i=ap_rind(fn,'.')) &lt; 0) return OK;
-        ++i;
-    }
-
-    if ((type = ap_table_get (conf-&gt;forced_types, &amp;fn[i])))
-    {
-        r-&gt;content_type = type;
-    }
-
-    return OK;
-}
-
-</pre>
-
-    <h3><a id="servconf" name="servconf">Side notes --- per-server
-    configuration, virtual servers, <em>etc</em>.</a></h3>
-    The basic ideas behind per-server module configuration are
-    basically the same as those for per-directory configuration;
-    there is a creation function and a merge function, the latter
-    being invoked where a virtual server has partially overridden
-    the base server configuration, and a combined structure must be
-    computed. (As with per-directory configuration, the default if
-    no merge function is specified, and a module is configured in
-    some virtual server, is that the base configuration is simply
-    ignored). 
-
-    <p>The only substantial difference is that when a command needs
-    to configure the per-server private module data, it needs to go
-    to the <code>cmd_parms</code> data to get at it. Here's an
-    example, from the alias module, which also indicates how a
-    syntax error can be returned (note that the per-directory
-    configuration argument to the command handler is declared as a
-    dummy, since the module doesn't actually have per-directory
-    config data):</p>
-<pre>
-char *add_redirect(cmd_parms *cmd, void *dummy, char *f, char *url)
-{
-    server_rec *s = cmd-&gt;server;
-    alias_server_conf *conf = (alias_server_conf *)
-            ap_get_module_config(s-&gt;module_config,&amp;alias_module);
-    alias_entry *new = ap_push_array (conf-&gt;redirects);
-
-    if (!ap_is_url (url)) return "Redirect to non-URL";
-
-    new-&gt;fake = f; new-&gt;real = url;
-    return NULL;
-}
-</pre>
-    <!--#include virtual="footer.html" -->
-  </body>
-</html>
-
diff --git a/docs/manual/developer/debugging.html b/docs/manual/developer/debugging.html
deleted file mode 100644
index 79594df..0000000
--- a/docs/manual/developer/debugging.html
+++ /dev/null
@@ -1,257 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta name="generator" content="HTML Tidy, see www.w3.org" />
-
-    <title>Debugging Memory Allocation in APR</title>
-  </head>
-  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-
-  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-  vlink="#000080" alink="#FF0000">
-    <!--#include virtual="header.html" -->
-
-    <h1 align="CENTER">Debugging Memory Allocation in APR<br />
-    </h1>
-
-    <p>The allocation mechanism's within APR have a number of
-    debugging modes that can be used to assist in finding memory
-    problems. This document describes the modes available and gives
-    instructions on activating them.</p>
-
-    <ul>
-      <li><a href="#options">Available debugging options</a></li>
-
-      <li><a href="#combo">Allowable combinations</a></li>
-
-      <li><a href="#howto">How to activate debugging</a></li>
-    </ul>
-    <hr />
-
-    <h2>Allocation Debugging</h2>
-
-    <h3>ALLOC_DEBUG</h3>
-
-    <p><em>Debugging support: Define this to enable code which
-    helps detect re-use of freed memory and other such
-    nonsense.</em></p>
-
-    <p>The theory is simple. The FILL_BYTE (0xa5) is written over
-    all malloc'd memory as we receive it, and is written over
-    everything that we free up during a clear_pool. We check that
-    blocks on the free list always have the FILL_BYTE in them, and
-    we check during palloc() that the bytes still have FILL_BYTE in
-    them. If you ever see garbage URLs or whatnot containing lots
-    of 0xa5s then you know something used data that's been freed or
-    uninitialized.</p>
-
-    <h2>Malloc Support</h2>
-
-    <h3>ALLOC_USE_MALLOC</h3>
-
-    <p><em>If defined all allocations will be done with malloc and
-    free()d appropriately at the end.</em></p>
-
-    <p>This is intended to be used with something like Electric
-    Fence or Purify to help detect memory problems. Note that if
-    you're using efence then you should also add in ALLOC_DEBUG.
-    But don't add in ALLOC_DEBUG if you're using Purify because
-    ALLOC_DEBUG would hide all the uninitialized read errors that
-    Purify can diagnose.</p>
-
-    <h2>Pool Debugging</h2>
-
-    <h3>POOL_DEBUG</h3>
-
-    <p><em>This is intended to detect cases where the wrong pool is
-    used when assigning data to an object in another pool.</em></p>
-
-    <p>In particular, it causes the table_{set,add,merge}n routines
-    to check that their arguments are safe for the apr_table_t
-    they're being placed in. It currently only works with the unix
-    multiprocess model, but could be extended to others.</p>
-
-    <h2>Table Debugging</h2>
-
-    <h3>MAKE_TABLE_PROFILE</h3>
-
-    <p><em>Provide diagnostic information about make_table() calls
-    which are possibly too small.</em></p>
-
-    <p>This requires a recent gcc which supports
-    __builtin_return_address(). The error_log output will be a
-    message such as:</p>
-<pre>
-table_push: apr_table_t created by 0x804d874 hit limit of 10
-</pre>
-
-    <p>Use "<em><strong>l *0x804d874</strong></em>" to find the
-    source that corresponds to. It indicates that a apr_table_t
-    allocated by a call at that address has possibly too small an
-    initial apr_table_t size guess.</p>
-
-    <h2>Allocation Statistics</h2>
-
-    <h3>ALLOC_STATS</h3>
-
-    <p><em>Provide some statistics on the cost of
-    allocations.</em></p>
-
-    <p>This requires a bit of an understanding of how alloc.c
-    works.</p>
-    <hr />
-
-    <h2>Allowable Combinations</h2>
-
-    <p>Not all the options outlined above can be activated at the
-    same time. the following table gives more information.</p>
-
-    <table width="80%">
-      <tr>
-        <th width="25%">Option 1</th>
-
-        <th width="15%">ALLOC<br />
-         DEBUG</th>
-
-        <th width="15%">ALLOC<br />
-         USE<br />
-         MALLOC</th>
-
-        <th width="15%">POOL<br />
-         DEBUG</th>
-
-        <th width="15%">MAKE<br />
-         TABLE<br />
-         PROFILE</th>
-
-        <th width="15%">ALLOC<br />
-         STATS</th>
-      </tr>
-
-      <tr>
-        <td>ALLOC_DEBUG</td>
-
-        <td bgcolor="#ff0000">&nbsp;</td>
-
-        <td align="center">No</td>
-
-        <td align="center">Yes</td>
-
-        <td align="center">Yes</td>
-
-        <td align="center">Yes</td>
-      </tr>
-
-      <tr>
-        <td>ALLOC_USE<br />
-         MALLOC</td>
-
-        <td align="center">No</td>
-
-        <td bgcolor="#ff0000">&nbsp;</td>
-
-        <td align="center">No</td>
-
-        <td align="center">No</td>
-
-        <td align="center">No</td>
-      </tr>
-
-      <tr>
-        <td>POOL_DEBUG</td>
-
-        <td align="center">Yes</td>
-
-        <td align="center">No</td>
-
-        <td bgcolor="#ff0000">&nbsp;</td>
-
-        <td align="center">Yes</td>
-
-        <td align="center">Yes</td>
-      </tr>
-
-      <tr>
-        <td>MAKE_TABLE<br />
-         PROFILE</td>
-
-        <td align="center">Yes</td>
-
-        <td align="center">No</td>
-
-        <td align="center">Yes</td>
-
-        <td bgcolor="#ff0000">&nbsp;</td>
-
-        <td align="center">Yes</td>
-      </tr>
-
-      <tr>
-        <td>ALLOC_STATS</td>
-
-        <td align="center">Yes</td>
-
-        <td align="center">No</td>
-
-        <td align="center">Yes</td>
-
-        <td align="center">Yes</td>
-
-        <td bgcolor="#ff0000">&nbsp;</td>
-      </tr>
-    </table>
-
-    <p>Additionally the debugging options are not suitable for
-    multi-threaded versions of the server. When trying to debug
-    with these options the server should be started in single
-    process mode.</p>
-    <hr />
-
-    <h2>Activating Debugging Options</h2>
-
-    <p>The various options for debugging memory are now enabled in
-    the apr_general.h header file in APR. The various options are
-    enabled by uncommenting the define for the option you wish to
-    use. The section of the code currently looks like this
-    <em>(contained in srclib/apr/include/apr_pools.h)</em></p>
-<pre>
-/*
-#define ALLOC_DEBUG
-#define POOL_DEBUG
-#define ALLOC_USE_MALLOC
-#define MAKE_TABLE_PROFILE
-#define ALLOC_STATS
-*/
-
-typedef struct ap_pool_t {
-    union block_hdr *first;
-    union block_hdr *last;
-    struct cleanup *cleanups;
-    struct process_chain *subprocesses;
-    struct ap_pool_t *sub_pools;
-    struct ap_pool_t *sub_next;
-    struct ap_pool_t *sub_prev;
-    struct ap_pool_t *parent;
-    char *free_first_avail;
-#ifdef ALLOC_USE_MALLOC
-    void *allocation_list;
-#endif
-#ifdef POOL_DEBUG
-    struct ap_pool_t *joined;
-#endif
-    int (*apr_abort)(int retcode);
-    struct datastruct *prog_data;
-}ap_pool_t;
-</pre>
-
-    <p>To enable allocation debugging simply move the #define
-    ALLOC_DEBUG above the start of the comments block and rebuild
-    the server.</p>
-    <strong>NB. In order to use the various options the server MUST
-    be rebuilt after editing the header file.</strong> 
-    <!--#include virtual="footer.html" -->
-  </body>
-</html>
-
diff --git a/docs/manual/developer/documenting.html b/docs/manual/developer/documenting.html
deleted file mode 100644
index a342a62..0000000
--- a/docs/manual/developer/documenting.html
+++ /dev/null
@@ -1,73 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta name="generator" content="HTML Tidy, see www.w3.org" />
-
-    <title>Documenting Apache 2.0</title>
-  </head>
-  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-
-  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-  vlink="#000080" alink="#FF0000">
-    <!--#include virtual="header.html" -->
-
-    <h1 align="center">Documentating Apache 2.0</h1>
-
-    <p>Apache 2.0 uses DoxyGen to document the API's and global
-    variables in the the code. This will explain the basics of how
-    to document using DoxyGen.</p>
-
-    <p>To start a documentation block, use /**<br />
-     To end a documentation block, use */</p>
-
-    <p>In the middle of the block, there are multiple tags we can
-    use:</p>
-<pre>
-    Description of this functions purpose
-    @param parameter_name description
-
-
-<br />
-The deffunc is not always necessary.  DoxyGen does not have a full parser 
-   in it, so any prototype that use a macro in the return type declaration 
-   is too complex for scandoc.  Those functions require a deffunc.
-
-<br />
-An example (using &amp;gt; rather than &gt;):
-</pre>
-<pre>
-/**
- * return the final element of the pathname
- * @param pathname The path to get the final element of
- * @return the final element of the path
- * @tip Examples:
- * &lt;pre&gt;
- *                 "/foo/bar/gum"   -&amp;gt; "gum"
- *                 "/foo/bar/gum/"  -&amp;gt; ""
- *                 "gum"            -&amp;gt; "gum"
- *                 "wi\\n32\\stuff" -&amp;gt; "stuff"
- * &lt;/pre&gt;
- * @deffunc const char * ap_filename_of_pathname(const char *pathname)
- */
-</pre>
-<pre>
-<br />
-At the top of the header file, always include:
-</pre>
-<pre>
-/**
- * @package Name of library header
- */
-</pre>
-<pre>
-<br />
-ScanDoc uses a new html file for each package.  The html files are named
-   {Name_of_library_header}.html, so try to be concise with your names.
- 
-<!--#include virtual="footer.html" -->
-</pre>
-  </body>
-</html>
-
diff --git a/docs/manual/developer/filters.html b/docs/manual/developer/filters.html
deleted file mode 100644
index b8ac610..0000000
--- a/docs/manual/developer/filters.html
+++ /dev/null
@@ -1,168 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta name="generator" content="HTML Tidy, see www.w3.org" />
-
-    <title>Request Processing in Apache 2.0</title>
-  </head>
-  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-
-  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-  vlink="#000080" alink="#FF0000">
-    <!--#include virtual="header.html" -->
-
-    <h1>How filters work in Apache 2.0</h1>
-
-    <p>Warning - this is a cut 'n paste job from an email:
-       &lt022501c1c529$f63a9550$7f00000a@KOJ&gt</p>
-
-<pre>
-There are three basic filter types (each of these is actually broken
-down into two categories, but that comes later).
-
-CONNECTION:  Filters of this type are valid for the lifetime of this
-             connection.
-
-PROTOCOL:    Filters of this type are valid for the lifetime of this
-             request from the point of view of the client, this means
-             that the request is valid from the time that the request
-             is sent until the time that the response is received.
-
-RESOURCE:    Filters of this type are valid for the time that this
-             content is used to satisfy a request.  For simple
-             requests, this is identical to PROTOCOL, but internal redirects
-             and sub-requests can change the content without ending
-             the request.
-
-It is important to make the distinction between a protocol and a
-resource filter.  A resource filter is tied to a specific resource, it
-may also be tied to header information, but the main binding is to a
-resource.  If you are writing a filter and you want to know if it is
-resource or protocol, the correct question to ask is:  "Can this filter
-be removed if the request is redirected to a different resource?"  If
-the answer is yes, then it is a resource filter.  If it is no, then it
-is most likely a protocol or connection filter.  I won't go into
-connection filters, because they seem to be well understood.
-
-With this definition, a few examples might help:
-Byterange:  We have coded it to be inserted for all
-requests, and it is removed if not used.  Because this filter is active
-at the beginning of all requests, it can not be removed if it is
-redirected, so this is a protocol filter.
-
-http_header:  This filter actually writes the headers to the
-network.  This is obviously a required filter (except in the asis case
-which is special and will be dealt with below) and so it is a protocol
-filter.
-
-Deflate:  The administrator configures this filter based on
-which file has been requested.  If we do an internal redirect from an
-autoindex page to an index.html page, the deflate filter may be added or
-removed based on config, so this is a resource filter.
-
-The further breakdown of each category into two more filter types is
-strictly for ordering.  We could remove it, and only allow for one
-filter type, but the order would tend to be wrong, and we would need to
-hack things to make it work.  Currently, the RESOURCE filters only have
-one filter type, but that should change.
-
-How are filters inserted?
-This is actually rather simple in theory, but the code is
-complex.  First of all, it is important that everybody realize that
-there are three filter lists for each request, but they are all
-concatenated together.  So, the first list is r->output_filters, then
-r->proto_output_filters, and finally r->connection->output_filters.
-These correspond to the RESOURCE, PROTOCOL, and CONNECTION filters
-respectively.  The problem previously, was that we used a singly linked
-list to create the filter stack, and we started from the "correct"
-location.  This means that if I had a RESOURCE filter on the stack, and
-I added a CONNECTION filter, the CONNECTION filter would be ignored.
-This should make sense, because we would insert the connection filter at
-the top of the c->output_filters list, but the end of r->output_filters
-pointed to the filter that used to be at the front of c->output_filters.
-This is obviously wrong.  The new insertion code uses a doubly linked
-list.  This has the advantage that we never lose a filter that has been
-inserted.  Unfortunately, it comes with a separate set of headaches.
-
-The problem is that we have two different cases were we use subrequests.
-The first is to insert more data into a response.  The second is to
-replace the existing response with an internal redirect.  These are two
-different cases and need to be treated as such.
-
-In the first case, we are creating the subrequest from within a handler
-or filter.  This means that the next filter should be passed to
-make_sub_request function, and the last resource filter in the
-sub-request will point to the next filter in the main request.  This
-makes sense, because the sub-request's data needs to flow through the
-same set of filters as the main request.  A graphical representation
-might help:
-
-Default_handler --> includes_filter --> byterange --> content_length ->
-etc
-
-If the includes filter creates a sub request, then we don't want the
-data from that sub-request to go through the includes filter, because it
-might not be SSI data.  So, the subrequest adds the following:
-
-Default_handler --> includes_filter -/-> byterange --> content_length -> etc
-                                    /
-Default_handler --> sub_request_core
-
-What happens if the subrequest is SSI data?  Well, that's easy, the
-includes_filter is a resource filter, so it will be added to the sub
-request in between the Default_handler and the sub_request_core filter.
-
-The second case for sub-requests is when one sub-request is going to
-become the real request.  This happens whenever a sub-request is created
-outside of a handler or filter, and NULL is passed as the next filter to
-the make_sub_request function.
-
-In this case, the resource filters no longer make sense for the new
-request, because the resource has changed.  So, instead of starting from
-scratch, we simply point the front of the resource filters for the
-sub-request to the front of the protocol filters for the old request.
-This means that we won't lose any of the protocol filters, neither will
-we try to send this data through a filter that shouldn't see it.
-
-The problem is that we are using a doubly-linked list for our filter
-stacks now. But, you should notice that it is possible for two lists to
-intersect in this model.  So, you do you handle the previous pointer?
-This is a very difficult question to answer, because there is no "right"
-answer, either method is equally valid.  I looked at why we use the
-previous pointer.  The only reason for it is to allow for easier
-addition of new servers.  With that being said, the solution I chose was
-to make the previous pointer always stay on the original request.
-
-This causes some more complex logic, but it works for all cases.  My
-concern in having it move to the sub-request, is that for the more
-common case (where a sub-request is used to add data to a response), the
-main filter chain would be wrong.  That didn't seem like a good idea to
-me.
-
-asis:
-The final topic.  :-)  Mod_Asis is a bit of a hack, but the
-handler needs to remove all filters except for connection filters, and
-send the data.  If you are using mod_asis, all other bets are off.
-
-The absolutely last point is that the reason this code was so hard to
-get right, was because we had hacked so much to force it to work.  I
-wrote most of the hacks originally, so I am very much to blame.
-However, now that the code is right, I have started to remove some
-hacks.  Most people should have seen that the reset_filters and
-add_required_filters functions are gone.  Those inserted protocol level
-filters for error conditions, in fact, both functions did the same
-thing, one after the other, it was really strange.  Because we don't
-lose protocol filters for error cases any more, those hacks went away.
-The HTTP_HEADER, Content-length, and Byterange filters are all added in
-the insert_filters phase, because if they were added earlier, we had
-some interesting interactions.  Now, those could all be moved to be
-inserted with the HTTP_IN, CORE, and CORE_IN filters.  That would make
-the code easier to follow.
-</pre>
-
-    <!--#include virtual="footer.html" -->
-  </body>
-</html>
-
diff --git a/docs/manual/developer/footer.html b/docs/manual/developer/footer.html
deleted file mode 100644
index 965ff02..0000000
--- a/docs/manual/developer/footer.html
+++ /dev/null
@@ -1,7 +0,0 @@
-    <hr />
-
-    <h3 align="CENTER">Apache HTTP Server Version 2.0</h3>
-    <a href="./"><img src="../images/index.gif" alt="Index" /></a>
-    <a href="../"><img src="../images/home.gif" alt="Home" /></a>
-
-
diff --git a/docs/manual/developer/header.html b/docs/manual/developer/header.html
deleted file mode 100644
index 749461d..0000000
--- a/docs/manual/developer/header.html
+++ /dev/null
@@ -1,6 +0,0 @@
-    <div align="CENTER">
-      <img src="../images/sub.gif" alt="[APACHE DOCUMENTATION]" /> 
-
-      <h3>Apache HTTP Server Version 2.0</h3>
-    </div>
-
diff --git a/docs/manual/developer/hooks.html b/docs/manual/developer/hooks.html
deleted file mode 100644
index f7a5575..0000000
--- a/docs/manual/developer/hooks.html
+++ /dev/null
@@ -1,199 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta name="generator" content="HTML Tidy, see www.w3.org" />
-
-    <title>Apache 2.0 Hook Functions</title>
-  </head>
-  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-
-  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-  vlink="#000080" alink="#FF0000">
-    <!--#include virtual="header.html" -->
-
-    <h1 align="center">Apache Hook Functions</h1>
-
-    <p>In general, a hook function is one that Apache will call at
-    some point during the processing of a request. Modules can
-    provide functions that are called, and specify when they get
-    called in comparison to other modules.</p>
-
-    <h2>Creating a hook function</h2>
-
-    <p>In order to create a new hook, four things need to be
-    done:</p>
-
-    <h3>Declare the hook function</h3>
-
-    <p>Use the AP_DECLARE_HOOK macro, which needs to be given the
-    return type of the hook function, the name of the hook, and the
-    arguments. For example, if the hook returns an <tt>int</tt> and
-    takes a <tt>request_rec *</tt> and an <tt>int</tt> and is
-    called "do_something", then declare it like this:</p>
-    <tt>AP_DECLARE_HOOK(int,do_something,(request_rec *r,int
-    n))</tt> 
-
-    <p>This should go in a header which modules will include if
-    they want to use the hook.</p>
-
-    <h3>Create the hook structure</h3>
-
-    <p>Each source file that exports a hook has a private structure
-    which is used to record the module functions that use the hook.
-    This is declared as follows:</p>
-<pre>
-APR_HOOK_STRUCT(
-            APR_HOOK_LINK(do_something)
-            ...
-           )
-</pre>
-
-    <h3>Implement the hook caller</h3>
-
-    <p>The source file that exports the hook has to implement a
-    function that will call the hook. There are currently three
-    possible ways to do this. In all cases, the calling function is
-    called <tt>ap_run_<i>hookname</i>()</tt>.</p>
-
-    <h4>Void hooks</h4>
-
-    <p>If the return value of a hook is <tt>void</tt>, then all the
-    hooks are called, and the caller is implemented like this:</p>
-    <tt>AP_IMPLEMENT_HOOK_VOID(do_something,(request_rec *r,int
-    n),(r,n))</tt> 
-
-    <p>The second and third arguments are the dummy argument
-    declaration and the dummy arguments as they will be used when
-    calling the hook. In other words, this macro expands to
-    something like this:</p>
-<pre>
-void ap_run_do_something(request_rec *r,int n)
-{
-    ...
-    do_something(r,n);
-}
-</pre>
-
-    <h4>Hooks that return a value</h4>
-
-    <p>If the hook returns a value, then it can either be run until
-    the first hook that does something interesting, like so:</p>
-    <tt>AP_IMPLEMENT_HOOK_RUN_FIRST(int,do_something,(request_rec
-    *r,int n),(r,n),DECLINED)</tt> 
-
-    <p>The first hook that <i>doesn't</i> return <tt>DECLINED</tt>
-    stops the loop and its return value is returned from the hook
-    caller. Note that <tt>DECLINED</tt> is the tradition Apache
-    hook return meaning "I didn't do anything", but it can be
-    whatever suits you.</p>
-
-    <p>Alternatively, all hooks can be run until an error occurs.
-    This boils down to permitting <i>two</i> return values, one of
-    which means "I did something, and it was OK" and the other
-    meaning "I did nothing". The first function that returns a
-    value other than one of those two stops the loop, and its
-    return is the return value. Declare these like so:</p>
-    <tt>AP_IMPLEMENT_HOOK_RUN_ALL(int,do_something,(request_rec
-    *r,int n),(r,n),OK,DECLINED)</tt> 
-
-    <p>Again, <tt>OK</tt> and <tt>DECLINED</tt> are the traditional
-    values. You can use what you want.</p>
-
-    <h3>Call the hook callers</h3>
-
-    <p>At appropriate moments in the code, call the hook caller,
-    like so:</p>
-<pre>
-    int n,ret;
-    request_rec *r;
-
-    ret=ap_run_do_something(r,n);
-</pre>
-
-    <h2>Hooking the hook</h2>
-
-    <p>A module that wants a hook to be called needs to do two
-    things.</p>
-
-    <h3>Implement the hook function</h3>
-
-    <p>Include the appropriate header, and define a static function
-    of the correct type:</p>
-<pre>
-static int my_something_doer(request_rec *r,int n)
-{
-    ...
-    return OK;
-}
-</pre>
-
-    <h3>Add a hook registering function</h3>
-
-    <p>During initialisation, Apache will call each modules hook
-    registering function, which is included in the module
-    structure:</p>
-<pre>
-static void my_register_hooks()
-{
-    ap_hook_do_something(my_something_doer,NULL,NULL,HOOK_MIDDLE);
-}
-
-mode MODULE_VAR_EXPORT my_module =
-{
-    ...
-    my_register_hooks       /* register hooks */
-};
-</pre>
-
-    <h3>Controlling hook calling order</h3>
-
-    <p>In the example above, we didn't use the three arguments in
-    the hook registration function that control calling order.
-    There are two mechanisms for doing this. The first, rather
-    crude, method, allows us to specify roughly where the hook is
-    run relative to other modules. The final argument control this.
-    There are three possible values:</p>
-<pre>
-HOOK_FIRST
-HOOK_MIDDLE
-HOOK_LAST
-</pre>
-
-    <p>All modules using any particular value may be run in any
-    order relative to each other, but, of course, all modules using
-    <tt>HOOK_FIRST</tt> will be run before <tt>HOOK_MIDDLE</tt>
-    which are before <tt>HOOK_LAST</tt>. Modules that don't care
-    when they are run should use <tt>HOOK_MIDDLE</tt>. <i>(I spaced
-    these out so people could do stuff like <tt>HOOK_FIRST-2</tt>
-    to get in slightly earlier, but is this wise? - Ben)</i></p>
-
-    <p>Note that there are two more values,
-    <tt>HOOK_REALLY_FIRST</tt> and <tt>HOOK_REALLY_LAST</tt>. These
-    should only be used by the hook exporter.</p>
-
-    <p>The other method allows finer control. When a module knows
-    that it must be run before (or after) some other modules, it
-    can specify them by name. The second (third) argument is a
-    NULL-terminated array of strings consisting of the names of
-    modules that must be run before (after) the current module. For
-    example, suppose we want "mod_xyz.c" and "mod_abc.c" to run
-    before we do, then we'd hook as follows:</p>
-<pre>
-static void register_hooks()
-{
-    static const char * const aszPre[]={ "mod_xyz.c", "mod_abc.c", NULL };
-
-    ap_hook_do_something(my_something_doer,aszPre,NULL,HOOK_MIDDLE);
-}
-</pre>
-
-    <p>Note that the sort used to achieve this is stable, so
-    ordering set by <tt>HOOK_<i>ORDER</i></tt> is preserved, as far
-    as is possible.</p>
-    <i>Ben Laurie, 15th August 1999</i> 
-    <!--#include virtual="footer.html" -->
-  </body>
-</html>
-
diff --git a/docs/manual/developer/index.html b/docs/manual/developer/index.html
deleted file mode 100644
index f0555ec..0000000
--- a/docs/manual/developer/index.html
+++ /dev/null
@@ -1,56 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta name="generator" content="HTML Tidy, see www.w3.org" />
-
-    <title>Apache-2.0 Developer Documentation</title>
-  </head>
-  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-
-  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-  vlink="#000080" alink="#FF0000">
-    <!--#include virtual="header.html" -->
-
-    <h1 align="center">Developer Documentation for Apache-2.0</h1>
-
-    <p>Many of the documents on these Developer pages are lifted
-    from Apache 1.3's documentation. While they are all being
-    updated to Apache 2.0, they are in different stages of
-    progress. Please be patient, and point out any discrepancies or
-    errors on the developer/ pages directly to the
-    dev@httpd.apache.org mailing list.</p>
-
-    <h3>Topics</h3>
-
-    <dl>
-      <dt><a href="API.html">Apache 2.0 API Notes</a></dt>
-
-      <dd>Overview of Apache's Application Programming
-      Interface.</dd>
-
-      <dt><a href="hooks.html">Apache Hook Functions</a></dt>
-
-      <dd>
-        <dl>
-          <dt><a href="request.html">Request Processing in Apache
-          2.0</a></dt>
-        </dl>
-      </dd>
-
-      <dt><a href="filters.html">Apache Filters</a></dt>
-
-      <dt><a href="modules.html">Porting Apache 1.3
-      Modules</a></dt>
-
-      <dt><a href="debugging.html">Debugging Memory
-      Allocation</a></dt>
-
-      <dt><a href="documenting.html">Documenting Apache
-      2.0</a></dt>
-    </dl>
-    <!--#include virtual="footer.html" -->
-  </body>
-</html>
-
diff --git a/docs/manual/developer/layeredio.html b/docs/manual/developer/layeredio.html
deleted file mode 100644
index a4d1f5c..0000000
--- a/docs/manual/developer/layeredio.html
+++ /dev/null
@@ -1,85 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta name="generator" content="HTML Tidy, see www.w3.org" />
-
-    <title>Apache 2.0 Layered I/O</title>
-  </head>
-  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-
-  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-  vlink="#000080" alink="#FF0000">
-    <h1 align="center">Apache Layered I/O</h1>
-
-    <p>Layered I/O has been the holy grail of Apache module writers
-    for years. With Apache 2.0, module writers can finally take
-    advantage of layered I/O in their modules.</p>
-
-    <p>In all previous versions of Apache, only one handler was
-    allowed to modify the data stream that was sent to the client.
-    With Apache 2.0, one module can modify the data and then
-    specify that other modules can modify the data if they would
-    like.</p>
-
-    <h2>Taking advantage of layered I/O</h2>
-
-    <p>In order to make a module use layered I/O, there are some
-    modifications needed. A new return value has been added for
-    modules, RERUN_HANDLERS. When a handler returns this value, the
-    core searches through the list of handlers looking for another
-    module that wants to try the request.</p>
-
-    <p>When a module returns RERUN_HANDLERS, it must modify two
-    fields of the request_rec, the handler and content_type fields.
-    Most modules will set the handler field to NULL, and allow the
-    core to choose the which module gets run next. If these two
-    fields are not modified, then the server will loop forever
-    calling the same module's handler.</p>
-
-    <p>Most modules should not write out to the network if they
-    want to take advantage of layered I/O. Two BUFF structures have
-    been added to the request_rec, one for input and one for
-    output. The module should read and write to these BUFFs. The
-    module will also have to setup the input field for the next
-    module in the list. A new function has been added,
-    ap_setup_input, which all modules should call before they do
-    any reading to get data to modify. This function checks to
-    determine if the previous module set the input field, if so,
-    that input is used, if not the file is opened and that data
-    source is used. The output field is used basically the same
-    way. The module must set this field before they call ap_r* in
-    order to take advantage of layered I/O. If this field is not
-    set, ap_r* will write directly to the client. Usually at the
-    end of a handler, the input (for the next module) will be the
-    read side of a pipe, and the output will be the write side of
-    the same pipe.</p>
-
-    <h3>An Example of Layered I/O.</h3>
-
-    <p>This example is the most basic layered I/O example possible.
-    It is basically CGIs generated by mod_cgi and sent to the
-    network via http_core.</p>
-
-    <p>mod_cgi executes the cgi script, and then sets
-    request_rec-&gt;input to the output pipe of the CGI. It then
-    NULLs out request_rec-&gt;handler, and sets
-    request_rec-&gt;content_type to whatever the CGI writes out (in
-    this case, text/html). Finally, mod_cgi returns
-    RERUN_HANDLERS.</p>
-
-    <p>ap_invoke_handlers() then loops back to the top of the
-    handler list and searches for a handler that can deal with this
-    content_type. In this case the correct module is the
-    default_handler from http_core.</p>
-
-    <p>When default handler starts, it calls ap_setup_input, which
-    has found a valid request_rec-&gt;input, so that is used for
-    all inputs. The output field in the request_rec is NULL, so
-    when default_handler calls an output primitive it gets sent out
-    over the network.</p>
-    <i>Ryan Bloom, 25th March 2000</i>
-  </body>
-</html>
-
diff --git a/docs/manual/developer/modules.html b/docs/manual/developer/modules.html
deleted file mode 100644
index ebf7c33..0000000
--- a/docs/manual/developer/modules.html
+++ /dev/null
@@ -1,258 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta name="generator" content="HTML Tidy, see www.w3.org" />
-
-    <title>Converting Modules from Apache 1.3 to Apache 2.0</title>
-  </head>
-  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-
-  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-  vlink="#000080" alink="#FF0000">
-    <!--#include virtual="header.html" -->
-
-    <h1 align="CENTER">From Apache 1.3 to Apache 2.0<br />
-     Modules</h1>
-
-    <p>This is a first attempt at writing the lessons I learned
-    when trying to convert the mod_mmap_static module to Apache
-    2.0. It's by no means definitive and probably won't even be
-    correct in some ways, but it's a start.</p>
-    <hr />
-
-    <h2>The easier changes...</h2>
-
-    <h3>Cleanup Routines</h3>
-
-    <p>These now need to be of type apr_status_t and return a value
-    of that type. Normally the return value will be APR_SUCCESS
-    unless there is some need to signal an error in the cleanup. Be
-    aware that even though you signal an error not all code yet
-    checks and acts upon the error.</p>
-
-    <h3>Initialisation Routines</h3>
-
-    <p>These should now be renamed to better signify where they sit
-    in the overall process. So the name gets a small change from
-    mmap_init to mmap_post_config. The arguments passed have
-    undergone a radical change and now look like</p>
-
-    <ul style="list-style:none">
-      <li>apr_pool_t *p,</li>
-
-      <li>apr_pool_t *plog,</li>
-
-      <li>apr_pool_t *ptemp,</li>
-
-      <li>server_rec *s</li>
-    </ul>
-
-    <h3>Data Types</h3>
-
-    <p>A lot of the data types have been moved into the APR. This
-    means that some have had a name change, such as the one shown
-    above. The following is a brief list of some of the changes
-    that you are likely to have to make.</p>
-
-    <ul style="list-style:none">
-      <li>pool becomes apr_pool_t</li>
-
-      <li>table becomes apr_table_t</li>
-    </ul>
-    <hr />
-
-    <h2>The <em>messier</em> changes...</h2>
-
-    <h3>Register Hooks</h3>
-
-    <p>The new architecture uses a series of hooks to provide for
-    calling your functions. These you'll need to add to your module
-    by way of a new function, static void register_hooks(void). The
-    function is really reasonably straightforward once you
-    understand what needs to be done. Each function that needs
-    calling at some stage in the processing of a request needs to
-    be registered, handlers do not. There are a number of phases
-    where functions can be added, and for each you can specify with
-    a high degree of control the relative order that the function
-    will be called in.</p>
-
-    <p>This is the code that was added to mod_mmap_static:</p>
-<pre>
-static void register_hooks(void)
-{
-    static const char * const aszPre[]={ "http_core.c",NULL };
-    ap_hook_post_config(mmap_post_config,NULL,NULL,HOOK_MIDDLE);
-    ap_hook_translate_name(mmap_static_xlat,aszPre,NULL,HOOK_LAST);
-};
-</pre>
-
-    <p>This registers 2 functions that need to be called, one in
-    the post_config stage (virtually every module will need this
-    one) and one for the translate_name phase. note that while
-    there are different function names the format of each is
-    identical. So what is the format?</p>
-
-    <p><strong>ap_hook_[phase_name](function_name, predecessors,
-    successors, position);</strong></p>
-
-    <p>There are 3 hook positions defined...</p>
-
-    <ul style="list-style:none">
-      <li>HOOK_FIRST</li>
-
-      <li>HOOK_MIDDLE</li>
-
-      <li>HOOK_LAST</li>
-    </ul>
-
-    <p>To define the position you use the position and then modify
-    it with the predecessors and successors. each of the modifiers
-    can be a list of functions that should be called, either before
-    the function is run (predecessors) or after the function has
-    run (successors).</p>
-
-    <p>In the mod_mmap_static case I didn't care about the
-    post_config stage, but the mmap_static_xlat MUST be called
-    after the core module had done it's name translation, hence the
-    use of the aszPre to define a modifier to the position
-    HOOK_LAST.</p>
-
-    <h3>Module Definition</h3>
-
-    <p>There are now a lot fewer stages to worry about when
-    creating your module definition. The old defintion looked
-    like</p>
-<pre>
-module MODULE_VAR_EXPORT [module_name]_module =
-{
-    STANDARD_MODULE_STUFF,
-    /* initializer */
-    /* dir config creater */
-    /* dir merger --- default is to override */
-    /* server config */
-    /* merge server config */
-    /* command handlers */
-    /* handlers */
-    /* filename translation */
-    /* check_user_id */
-    /* check auth */
-    /* check access */
-    /* type_checker */
-    /* fixups */
-    /* logger */
-    /* header parser */
-    /* child_init */
-    /* child_exit */
-    /* post read-request */
-};
-</pre>
-
-    <p>The new structure is a great deal simpler...</p>
-<pre>
-module MODULE_VAR_EXPORT [module_name]_module =
-{
-    STANDARD20_MODULE_STUFF,
-    /* create per-directory config structures */
-    /* merge per-directory config structures  */
-    /* create per-server config structures    */
-    /* merge per-server config structures     */
-    /* command handlers */
-    /* handlers */
-    /* register hooks */
- };
-</pre>
-
-    <p>Some of these read directly across, some don't. I'll try to
-    summarise what should be done below.</p>
-
-    <p>The stages that read directly across :</p>
-
-    <ul style="list-style:none">
-      <li>/* dir config creater */ ==&gt; /* create per-directory
-      config structures */</li>
-
-      <li>/* server config */ ==&gt; /* create per-server config
-      structures */</li>
-
-      <li>/* dir merger */ ==&gt; /* merge per-directory config
-      structures */</li>
-
-      <li>/* merge server config */ ==&gt; /* merge per-server
-      config structures */</li>
-
-      <li>/* command table */ ==&gt; /* command apr_table_t */</li>
-
-      <li>/* handlers */ ==&gt; /* handlers */</li>
-    </ul>
-
-    <p>The remainder of the old functions should be registered as
-    hooks. There are the following hook stages defined so
-    far...</p>
-
-    <ul style="list-style:none">
-      <li>ap_hook_post_config <em>(this is where the old _init
-      routines get registered)</em></li>
-
-      <li>ap_hook_http_method <em>(retrieve the http method from a
-      request. (legacy))</em></li>
-
-      <li>ap_hook_open_logs <em>(open any specified logs)</em></li>
-
-      <li>ap_hook_auth_checker <em>(check if the resource requires
-      authorization)</em></li>
-
-      <li>ap_hook_access_checker <em>(check for module-specific
-      restrictions)</em></li>
-
-      <li>ap_hook_check_user_id <em>(check the user-id and
-      password)</em></li>
-
-      <li>ap_hook_default_port <em>(retrieve the default port for
-      the server)</em></li>
-
-      <li>ap_hook_pre_connection <em>(do any setup required just
-      before processing, but after accepting)</em></li>
-
-      <li>ap_hook_process_connection <em>(run the correct
-      protocol)</em></li>
-
-      <li>ap_hook_child_init <em>(call as soon as the child is
-      started)</em></li>
-
-      <li>ap_hook_create_request <em>(??)</em></li>
-
-      <li>ap_hook_fixups <em>(last chance to modify things before
-      generating content)</em></li>
-
-      <li>ap_hook_handler <em>(generate the content)</em></li>
-
-      <li>ap_hook_header_parser <em>(let's modules look at the
-      headers, not used by most modules, because they use
-      post_read_request for this.)</em></li>
-
-      <li>ap_hook_insert_filter <em>(to insert filters into the
-      filter chain)</em></li>
-
-      <li>ap_hook_log_transaction <em>(log information about the
-      request)</em></li>
-
-      <li>ap_hook_optional_fn_retrieve <em>(retrieve any functions
-      registered as optional)</em></li>
-
-      <li>ap_hook_post_read_request <em>(called after reading the
-      request, before any other phase)</em></li>
-
-      <li>ap_hook_quick_handler <em>(??)</em></li>
-
-      <li>ap_hook_translate_name <em>(translate the URI into a
-      filename)</em></li>
-
-      <li>ap_hook_type_checker <em>(determine and/or set the doc
-      type)</em> <!--#include virtual="footer.html" -->
-      </li>
-    </ul>
-  </body>
-</html>
-
diff --git a/docs/manual/developer/modules.html.en b/docs/manual/developer/modules.html.en
deleted file mode 100644
index ebf7c33..0000000
--- a/docs/manual/developer/modules.html.en
+++ /dev/null
@@ -1,258 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta name="generator" content="HTML Tidy, see www.w3.org" />
-
-    <title>Converting Modules from Apache 1.3 to Apache 2.0</title>
-  </head>
-  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-
-  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-  vlink="#000080" alink="#FF0000">
-    <!--#include virtual="header.html" -->
-
-    <h1 align="CENTER">From Apache 1.3 to Apache 2.0<br />
-     Modules</h1>
-
-    <p>This is a first attempt at writing the lessons I learned
-    when trying to convert the mod_mmap_static module to Apache
-    2.0. It's by no means definitive and probably won't even be
-    correct in some ways, but it's a start.</p>
-    <hr />
-
-    <h2>The easier changes...</h2>
-
-    <h3>Cleanup Routines</h3>
-
-    <p>These now need to be of type apr_status_t and return a value
-    of that type. Normally the return value will be APR_SUCCESS
-    unless there is some need to signal an error in the cleanup. Be
-    aware that even though you signal an error not all code yet
-    checks and acts upon the error.</p>
-
-    <h3>Initialisation Routines</h3>
-
-    <p>These should now be renamed to better signify where they sit
-    in the overall process. So the name gets a small change from
-    mmap_init to mmap_post_config. The arguments passed have
-    undergone a radical change and now look like</p>
-
-    <ul style="list-style:none">
-      <li>apr_pool_t *p,</li>
-
-      <li>apr_pool_t *plog,</li>
-
-      <li>apr_pool_t *ptemp,</li>
-
-      <li>server_rec *s</li>
-    </ul>
-
-    <h3>Data Types</h3>
-
-    <p>A lot of the data types have been moved into the APR. This
-    means that some have had a name change, such as the one shown
-    above. The following is a brief list of some of the changes
-    that you are likely to have to make.</p>
-
-    <ul style="list-style:none">
-      <li>pool becomes apr_pool_t</li>
-
-      <li>table becomes apr_table_t</li>
-    </ul>
-    <hr />
-
-    <h2>The <em>messier</em> changes...</h2>
-
-    <h3>Register Hooks</h3>
-
-    <p>The new architecture uses a series of hooks to provide for
-    calling your functions. These you'll need to add to your module
-    by way of a new function, static void register_hooks(void). The
-    function is really reasonably straightforward once you
-    understand what needs to be done. Each function that needs
-    calling at some stage in the processing of a request needs to
-    be registered, handlers do not. There are a number of phases
-    where functions can be added, and for each you can specify with
-    a high degree of control the relative order that the function
-    will be called in.</p>
-
-    <p>This is the code that was added to mod_mmap_static:</p>
-<pre>
-static void register_hooks(void)
-{
-    static const char * const aszPre[]={ "http_core.c",NULL };
-    ap_hook_post_config(mmap_post_config,NULL,NULL,HOOK_MIDDLE);
-    ap_hook_translate_name(mmap_static_xlat,aszPre,NULL,HOOK_LAST);
-};
-</pre>
-
-    <p>This registers 2 functions that need to be called, one in
-    the post_config stage (virtually every module will need this
-    one) and one for the translate_name phase. note that while
-    there are different function names the format of each is
-    identical. So what is the format?</p>
-
-    <p><strong>ap_hook_[phase_name](function_name, predecessors,
-    successors, position);</strong></p>
-
-    <p>There are 3 hook positions defined...</p>
-
-    <ul style="list-style:none">
-      <li>HOOK_FIRST</li>
-
-      <li>HOOK_MIDDLE</li>
-
-      <li>HOOK_LAST</li>
-    </ul>
-
-    <p>To define the position you use the position and then modify
-    it with the predecessors and successors. each of the modifiers
-    can be a list of functions that should be called, either before
-    the function is run (predecessors) or after the function has
-    run (successors).</p>
-
-    <p>In the mod_mmap_static case I didn't care about the
-    post_config stage, but the mmap_static_xlat MUST be called
-    after the core module had done it's name translation, hence the
-    use of the aszPre to define a modifier to the position
-    HOOK_LAST.</p>
-
-    <h3>Module Definition</h3>
-
-    <p>There are now a lot fewer stages to worry about when
-    creating your module definition. The old defintion looked
-    like</p>
-<pre>
-module MODULE_VAR_EXPORT [module_name]_module =
-{
-    STANDARD_MODULE_STUFF,
-    /* initializer */
-    /* dir config creater */
-    /* dir merger --- default is to override */
-    /* server config */
-    /* merge server config */
-    /* command handlers */
-    /* handlers */
-    /* filename translation */
-    /* check_user_id */
-    /* check auth */
-    /* check access */
-    /* type_checker */
-    /* fixups */
-    /* logger */
-    /* header parser */
-    /* child_init */
-    /* child_exit */
-    /* post read-request */
-};
-</pre>
-
-    <p>The new structure is a great deal simpler...</p>
-<pre>
-module MODULE_VAR_EXPORT [module_name]_module =
-{
-    STANDARD20_MODULE_STUFF,
-    /* create per-directory config structures */
-    /* merge per-directory config structures  */
-    /* create per-server config structures    */
-    /* merge per-server config structures     */
-    /* command handlers */
-    /* handlers */
-    /* register hooks */
- };
-</pre>
-
-    <p>Some of these read directly across, some don't. I'll try to
-    summarise what should be done below.</p>
-
-    <p>The stages that read directly across :</p>
-
-    <ul style="list-style:none">
-      <li>/* dir config creater */ ==&gt; /* create per-directory
-      config structures */</li>
-
-      <li>/* server config */ ==&gt; /* create per-server config
-      structures */</li>
-
-      <li>/* dir merger */ ==&gt; /* merge per-directory config
-      structures */</li>
-
-      <li>/* merge server config */ ==&gt; /* merge per-server
-      config structures */</li>
-
-      <li>/* command table */ ==&gt; /* command apr_table_t */</li>
-
-      <li>/* handlers */ ==&gt; /* handlers */</li>
-    </ul>
-
-    <p>The remainder of the old functions should be registered as
-    hooks. There are the following hook stages defined so
-    far...</p>
-
-    <ul style="list-style:none">
-      <li>ap_hook_post_config <em>(this is where the old _init
-      routines get registered)</em></li>
-
-      <li>ap_hook_http_method <em>(retrieve the http method from a
-      request. (legacy))</em></li>
-
-      <li>ap_hook_open_logs <em>(open any specified logs)</em></li>
-
-      <li>ap_hook_auth_checker <em>(check if the resource requires
-      authorization)</em></li>
-
-      <li>ap_hook_access_checker <em>(check for module-specific
-      restrictions)</em></li>
-
-      <li>ap_hook_check_user_id <em>(check the user-id and
-      password)</em></li>
-
-      <li>ap_hook_default_port <em>(retrieve the default port for
-      the server)</em></li>
-
-      <li>ap_hook_pre_connection <em>(do any setup required just
-      before processing, but after accepting)</em></li>
-
-      <li>ap_hook_process_connection <em>(run the correct
-      protocol)</em></li>
-
-      <li>ap_hook_child_init <em>(call as soon as the child is
-      started)</em></li>
-
-      <li>ap_hook_create_request <em>(??)</em></li>
-
-      <li>ap_hook_fixups <em>(last chance to modify things before
-      generating content)</em></li>
-
-      <li>ap_hook_handler <em>(generate the content)</em></li>
-
-      <li>ap_hook_header_parser <em>(let's modules look at the
-      headers, not used by most modules, because they use
-      post_read_request for this.)</em></li>
-
-      <li>ap_hook_insert_filter <em>(to insert filters into the
-      filter chain)</em></li>
-
-      <li>ap_hook_log_transaction <em>(log information about the
-      request)</em></li>
-
-      <li>ap_hook_optional_fn_retrieve <em>(retrieve any functions
-      registered as optional)</em></li>
-
-      <li>ap_hook_post_read_request <em>(called after reading the
-      request, before any other phase)</em></li>
-
-      <li>ap_hook_quick_handler <em>(??)</em></li>
-
-      <li>ap_hook_translate_name <em>(translate the URI into a
-      filename)</em></li>
-
-      <li>ap_hook_type_checker <em>(determine and/or set the doc
-      type)</em> <!--#include virtual="footer.html" -->
-      </li>
-    </ul>
-  </body>
-</html>
-
diff --git a/docs/manual/developer/request.html b/docs/manual/developer/request.html
deleted file mode 100644
index 2bd0531..0000000
--- a/docs/manual/developer/request.html
+++ /dev/null
@@ -1,231 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta name="generator" content="HTML Tidy, see www.w3.org" />
-
-    <title>Request Processing in Apache 2.0</title>
-  </head>
-  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-
-  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-  vlink="#000080" alink="#FF0000">
-    <!--#include virtual="header.html" -->
-
-    <h1>Request Processing in Apache 2.0</h1>
-
-    <p>Warning - this is a first (fast) draft that needs further
-    revision!</p>
-
-    <p>Several changes in Apache 2.0 affect the internal request
-    processing mechanics. Module authors need to be aware of these
-    changes so they may take advantage of the optimizations and
-    security enhancements.</p>
-
-    <p>The first major change is to the subrequest and redirect
-    mechanisms. There were a number of different code paths in
-    Apache 1.3 to attempt to optimize subrequest or redirect
-    behavior. As patches were introduced to 2.0, these
-    optimizations (and the server behavior) were quickly broken due
-    to this duplication of code. All duplicate code has been folded
-    back into <code>ap_process_internal_request()</code> to prevent
-    the code from falling out of sync again.</p>
-
-    <p>This means that much of the existing code was 'unoptimized'.
-    It is the Apache HTTP Project's first goal to create a robust
-    and correct implementation of the HTTP server RFC. Additional
-    goals include security, scalability and optimization. New
-    methods were sought to optimize the server (beyond the
-    performance of Apache 1.3) without introducing fragile or
-    insecure code.</p>
-
-    <h2>The Request Processing Cycle</h2>
-
-    <p>All requests pass through
-    <code>ap_process_request_internal()</code> in request.c,
-    including subrequests and redirects. If a module doesn't pass
-    generated requests through this code, the author is cautioned
-    that the module may be broken by future changes to request
-    processing.</p>
-
-    <p>To streamline requests, the module author can take advantage
-    of the hooks offered to drop out of the request cycle early, or
-    to bypass core Apache hooks which are irrelevant (and costly in
-    terms of CPU.)</p>
-
-    <h2>The Request Parsing Phase</h2>
-
-    <h3>Unescapes the URL</h3>
-
-    <p>The request's parsed_uri path is unescaped, once and only
-    once, at the beginning of internal request processing.</p>
-
-    <p>This step is bypassed if the proxyreq flag is set, or the
-    parsed_uri.path element is unset. The module has no further
-    control of this one-time unescape operation, either failing to
-    unescape or multiply unescaping the URL leads to security
-    reprecussions.</p>
-
-    <h3>Strips Parent and This Elements from the URI</h3>
-
-    <p>All <code>/../</code> and <code>/./</code> elements are
-    removed by <code>ap_getparents()</code>. This helps to ensure
-    the path is (nearly) absolute before the request processing
-    continues.</p>
-
-    <p>This step cannot be bypassed.</p>
-
-    <h3>Initial URI Location Walk</h3>
-
-    <p>Every request is subject to an
-    <code>ap_location_walk()</code> call. This ensures that
-    &lt;Location &gt; sections are consistently enforced for all
-    requests. If the request is an internal redirect or a
-    sub-request, it may borrow some or all of the processing from
-    the previous or parent request's ap_location_walk, so this step
-    is generally very efficient after processing the main
-    request.</p>
-
-    <h3>Hook: translate_name</h3>
-
-    <p>Modules can determine the file name, or alter the given URI
-    in this step. For example, mod_vhost_alias will translate the
-    URI's path into the configured virtual host, mod_alias will
-    translate the path to an alias path, and if the request falls
-    back on the core, the DocumentRoot is prepended to the request
-    resource.</p>
-
-    <p>If all modules DECLINE this phase, an error 500 is returned
-    to the browser, and a "couldn't translate name" error is logged
-    automatically.</p>
-
-    <h3>Hook: map_to_storage</h3>
-
-    <p>After the file or correct URI was determined, the
-    appropriate per-dir configurations are merged together. For
-    example, mod_proxy compares and merges the appropriate
-    &lt;Proxy &gt; sections. If the URI is nothing more than a
-    local (non-proxy) TRACE request, the core handles the request
-    and returns DONE. If no module answers this hook with OK or
-    DONE, the core will run the request filename against the
-    &lt;Directory &gt; and &lt;Files &gt; sections. If the request
-    'filename' isn't an absolute, legal filename, a note is set for
-    later termination.</p>
-
-    <h3>Initial URI Location Walk</h3>
-
-    <p>Every request is hardened by a second
-    <code>ap_location_walk()</code> call. This reassures that a
-    translated request is still subjected to the configured
-    &lt;Location &gt; sections. The request again borrows some or
-    all of the processing from it's previous location_walk above,
-    so this step is almost always very efficient unless the
-    translated URI mapped to a substantially different path or
-    Virtual Host.</p>
-
-    <h3>Hook: header_parser</h3>
-
-    <p>The main request then parses the client's headers. This
-    prepares the remaining request processing steps to better serve
-    the client's request.</p>
-
-    <h2>The Security Phase</h2>
-
-    <p>Needs Documentation. Code is;</p>
-<pre>
-    switch (ap_satisfies(r)) {
-    case SATISFY_ALL:
-    case SATISFY_NOSPEC:
-        if ((access_status = ap_run_access_checker(r)) != 0) {
-            return decl_die(access_status, "check access", r);
-        }
-        if (ap_some_auth_required(r)) {
-            if (((access_status = ap_run_check_user_id(r)) != 0) || !ap_auth_type(r)) {
-                return decl_die(access_status, ap_auth_type(r)
-                    ? "check user.  No user file?"
-                    : "perform authentication. AuthType not set!", r);
-            }
-            if (((access_status = ap_run_auth_checker(r)) != 0) || !ap_auth_type(r)) {
-                return decl_die(access_status, ap_auth_type(r)
-                    ? "check access.  No groups file?"
-                    : "perform authentication. AuthType not set!", r);
-            }
-        }
-        break;
-    case SATISFY_ANY:
-        if (((access_status = ap_run_access_checker(r)) != 0) || !ap_auth_type(r)) {
-            if (!ap_some_auth_required(r)) {
-                return decl_die(access_status, ap_auth_type(r)
-                    ? "check access"
-                    : "perform authentication. AuthType not set!", r);
-            }
-            if (((access_status = ap_run_check_user_id(r)) != 0) || !ap_auth_type(r)) {
-                return decl_die(access_status, ap_auth_type(r)
-                    ? "check user.  No user file?"
-                    : "perform authentication. AuthType not set!", r);
-            }
-            if (((access_status = ap_run_auth_checker(r)) != 0) || !ap_auth_type(r)) {
-                return decl_die(access_status, ap_auth_type(r)
-                    ? "check access.  No groups file?"
-                    : "perform authentication. AuthType not set!", r);
-            }
-            }
-        break;
-    }
-</pre>
-
-    <h2>The Preparation Phase</h2>
-
-    <h3>Hook: type_checker</h3>
-
-    <p>The modules have an opportunity to test the URI or filename
-    against the target resource, and set mime information for the
-    request. Both mod_mime and mod_mime_magic use this phase to
-    compare the file name or contents against the administrator's
-    configuration and set the content type, language, character set
-    and request handler. Some modules may set up their filters or
-    other request handling parameters at this time.</p>
-
-    <p>If all modules DECLINE this phase, an error 500 is returned
-    to the browser, and a "couldn't find types" error is logged
-    automatically.</p>
-
-    <h3>Hook: fixups</h3>
-
-    <p>Many modules are 'trounced' by some phase above. The fixups
-    phase is used by modules to 'reassert' their ownership or force
-    the request's fields to their appropriate values. It isn't
-    always the cleanest mechanism, but occasionally it's the only
-    option.</p>
-
-    <h3>Hook: insert_filter</h3>
-
-    <p>Modules that transform the content in some way can insert
-    their values and override existing filters, such that if the
-    user configured a more advanced filter out-of-order, then the
-    module can move it's order as need be.</p>
-
-    <h2>The Handler Phase</h2>
-
-    <p>This phase is <strong><em>not</em></strong> part of the
-    processing in <code>ap_process_request_internal()</code>. Many
-    modules prepare one or more subrequests prior to creating any
-    content at all. After the core, or a module calls
-    <code>ap_process_request_internal()</code> it then calls
-    <code>ap_invoke_handler()</code> to generate the request.</p>
-
-    <h3>Hook: handler</h3>
-
-    <p>The module finally has a chance to serve the request in it's
-    handler hook. Note that not every prepared request is sent to
-    the handler hook. Many modules, such as mod_autoindex, will
-    create subrequests for a given URI, and then never serve the
-    subrequest, but simply lists it for the user. Remember not to
-    put required teardown from the hooks above into this module,
-    but register pool cleanups against the request pool to free
-    resources as required.</p>
-    <!--#include virtual="footer.html" -->
-  </body>
-</html>
-
diff --git a/docs/manual/dns-caveats.html b/docs/manual/dns-caveats.html
deleted file mode 100644
index a68c8c5..0000000
--- a/docs/manual/dns-caveats.html
+++ /dev/null
@@ -1,217 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta name="generator" content="HTML Tidy, see www.w3.org" />
-
-    <title>Issues Regarding DNS and Apache</title>
-  </head>
-  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-
-  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-  vlink="#000080" alink="#FF0000">
-    <!--#include virtual="header.html" -->
-
-    <h1 align="CENTER">Issues Regarding DNS and Apache</h1>
-
-    <p>This page could be summarized with the statement: <em>don't
-    require Apache to use DNS for any parsing of the configuration
-    files</em>. If Apache has to use DNS to parse the configuration
-    files then your server may be subject to reliability problems
-    (it might not boot), or denial and theft of service attacks
-    (including users able to steal hits from other users).</p>
-
-    <h3>A Simple Example</h3>
-    Consider this configuration snippet: 
-
-    <blockquote>
-<pre>
-    &lt;VirtualHost www.abc.dom&gt;
-    ServerAdmin webgirl@abc.dom
-    DocumentRoot /www/abc
-    &lt;/VirtualHost&gt;
-</pre>
-    </blockquote>
-
-    <p>In order for Apache to function properly it absolutely needs
-    to have two pieces of information about each virtual host: the
-    <a href="mod/core.html#servername"><code>ServerName</code></a>
-    and at least one IP address that the server responds to. This
-    example does not include the IP address, so Apache must use DNS
-    to find the address of <code>www.abc.dom</code>. If for some
-    reason DNS is not available at the time your server is parsing
-    its config file, then this virtual host <strong>will not be
-    configured</strong>. It won't be able to respond to any hits to
-    this virtual host (prior to Apache version 1.2 the server would
-    not even boot).</p>
-
-    <p>Suppose that <code>www.abc.dom</code> has address 10.0.0.1.
-    Then consider this configuration snippet:</p>
-
-    <blockquote>
-<pre>
-    &lt;VirtualHost 10.0.0.1&gt;
-    ServerAdmin webgirl@abc.dom
-    DocumentRoot /www/abc
-    &lt;/VirtualHost&gt;
-</pre>
-    </blockquote>
-
-    <p>Now Apache needs to use reverse DNS to find the
-    <code>ServerName</code> for this virtualhost. If that reverse
-    lookup fails then it will partially disable the virtualhost
-    (prior to Apache version 1.2 the server would not even boot).
-    If the virtual host is name-based then it will effectively be
-    totally disabled, but if it is IP-based then it will mostly
-    work. However if Apache should ever have to generate a full URL
-    for the server which includes the server name then it will fail
-    to generate a valid URL.</p>
-
-    <p>Here is a snippet that avoids both of these problems.</p>
-
-    <blockquote>
-<pre>
-    &lt;VirtualHost 10.0.0.1&gt;
-    ServerName www.abc.dom
-    ServerAdmin webgirl@abc.dom
-    DocumentRoot /www/abc
-    &lt;/VirtualHost&gt;
-</pre>
-    </blockquote>
-
-    <h3>Denial of Service</h3>
-
-    <p>There are (at least) two forms that denial of service can
-    come in. If you are running a version of Apache prior to
-    version 1.2 then your server will not even boot if one of the
-    two DNS lookups mentioned above fails for any of your virtual
-    hosts. In some cases this DNS lookup may not even be under your
-    control. For example, if <code>abc.dom</code> is one of your
-    customers and they control their own DNS then they can force
-    your (pre-1.2) server to fail while booting simply by deleting
-    the <code>www.abc.dom</code> record.</p>
-
-    <p>Another form is far more insidious. Consider this
-    configuration snippet:</p>
-
-    <blockquote>
-<pre>
-    &lt;VirtualHost www.abc.dom&gt;
-    ServerAdmin webgirl@abc.dom
-    DocumentRoot /www/abc
-    &lt;/VirtualHost&gt;
-</pre>
-    </blockquote>
-
-    <blockquote>
-<pre>
-    &lt;VirtualHost www.def.dom&gt;
-    ServerAdmin webguy@def.dom
-    DocumentRoot /www/def
-    &lt;/VirtualHost&gt;
-</pre>
-    </blockquote>
-
-    <p>Suppose that you've assigned 10.0.0.1 to
-    <code>www.abc.dom</code> and 10.0.0.2 to
-    <code>www.def.dom</code>. Furthermore, suppose that
-    <code>def.com</code> has control of their own DNS. With this
-    config you have put <code>def.com</code> into a position where
-    they can steal all traffic destined to <code>abc.com</code>. To
-    do so, all they have to do is set <code>www.def.dom</code> to
-    10.0.0.1. Since they control their own DNS you can't stop them
-    from pointing the <code>www.def.com</code> record wherever they
-    wish.</p>
-
-    <p>Requests coming in to 10.0.0.1 (including all those where
-    users typed in URLs of the form
-    <code>http://www.abc.dom/whatever</code>) will all be served by
-    the <code>def.com</code> virtual host. To better understand why
-    this happens requires a more in-depth discussion of how Apache
-    matches up incoming requests with the virtual host that will
-    serve it. A rough document describing this <a
-    href="vhosts/details.html">is available</a>.</p>
-
-    <h3>The "main server" Address</h3>
-
-    <p>The addition of <a href="vhosts/name-based.html">name-based
-    virtual host support</a> in Apache 1.1 requires Apache to know
-    the IP address(es) of the host that httpd is running on. To get
-    this address it uses either the global <code>ServerName</code>
-    (if present) or calls the C function <code>gethostname</code>
-    (which should return the same as typing "hostname" at the
-    command prompt). Then it performs a DNS lookup on this address.
-    At present there is no way to avoid this lookup.</p>
-
-    <p>If you fear that this lookup might fail because your DNS
-    server is down then you can insert the hostname in
-    <code>/etc/hosts</code> (where you probably already have it so
-    that the machine can boot properly). Then ensure that your
-    machine is configured to use <code>/etc/hosts</code> in the
-    event that DNS fails. Depending on what OS you are using this
-    might be accomplished by editing <code>/etc/resolv.conf</code>,
-    or maybe <code>/etc/nsswitch.conf</code>.</p>
-
-    <p>If your server doesn't have to perform DNS for any other
-    reason then you might be able to get away with running Apache
-    with the <code>HOSTRESORDER</code> environment variable set to
-    "local". This all depends on what OS and resolver libraries you
-    are using. It also affects CGIs unless you use <a
-    href="mod/mod_env.html"><code>mod_env</code></a> to control the
-    environment. It's best to consult the man pages or FAQs for
-    your OS.</p>
-
-    <h3><a id="tips" name="tips">Tips to Avoid these
-    problems</a></h3>
-
-    <ul>
-      <li>use IP addresses in <code>&lt;VirtualHost&gt;</code></li>
-
-      <li>use IP addresses in <code>Listen</code></li>
-
-      <li>use IP addresses in <code>BindAddress</code></li>
-
-      <li>ensure all virtual hosts have an explicit
-      <code>ServerName</code></li>
-
-      <li>create a <code>&lt;VirtualHost _default_:*&gt;</code>
-      server that has no pages to serve</li>
-    </ul>
-
-    <h3>Appendix: Future Directions</h3>
-
-    <p>The situation regarding DNS is highly undesirable. For
-    Apache 1.2 we've attempted to make the server at least continue
-    booting in the event of failed DNS, but it might not be the
-    best we can do. In any event requiring the use of explicit IP
-    addresses in configuration files is highly undesirable in
-    today's Internet where renumbering is a necessity.</p>
-
-    <p>A possible work around to the theft of service attack
-    described above would be to perform a reverse DNS lookup on the
-    ip address returned by the forward lookup and compare the two
-    names. In the event of a mismatch the virtualhost would be
-    disabled. This would require reverse DNS to be configured
-    properly (which is something that most admins are familiar with
-    because of the common use of "double-reverse" DNS lookups by
-    FTP servers and TCP wrappers).</p>
-
-    <p>In any event it doesn't seem possible to reliably boot a
-    virtual-hosted web server when DNS has failed unless IP
-    addresses are used. Partial solutions such as disabling
-    portions of the configuration might be worse than not booting
-    at all depending on what the webserver is supposed to
-    accomplish.</p>
-
-    <p>As HTTP/1.1 is deployed and browsers and proxies start
-    issuing the <code>Host</code> header it will become possible to
-    avoid the use of IP-based virtual hosts entirely. In this event
-    a webserver has no requirement to do DNS lookups during
-    configuration. But as of March 1997 these features have not
-    been deployed widely enough to be put into use on critical
-    webservers. <!--#include virtual="footer.html" -->
-    </p>
-  </body>
-</html>
-
diff --git a/docs/manual/dso.html b/docs/manual/dso.html
deleted file mode 100644
index 38d28ba..0000000
--- a/docs/manual/dso.html
+++ /dev/null
@@ -1,344 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta name="generator" content="HTML Tidy, see www.w3.org" />
-
-    <title>Dynamic Shared Object (DSO) support</title>
-  </head>
-  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-
-  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-  vlink="#000080" alink="#FF0000">
-    <!--#include virtual="header.html" -->
-
-    <h1 align="center">Dynamic Shared Object (DSO) Support</h1>
-
-    <p>The Apache HTTP Server is a modular program where the
-    administrator can choose the functionality to include in the
-    server by selecting a set of modules. The modules can be
-    statically compiled into the <code>httpd</code> binary when the
-    server is built. Alternatively, modules can be compiled as
-    Dynamic Shared Objects (DSOs) that exist separately from the
-    main <code>httpd</code> binary file. DSO modules may be
-    compiled at the time the server is built, or they may be
-    compiled and added at a later time using the Apache Extension
-    Tool (<a href="programs/apxs.html">apxs</a>).</p>
-
-    <p>This document describes how to use DSO modules as well as
-    the theory behind their use.</p>
-
-    <ul>
-      <li><a href="#implementation">Implementation</a></li>
-
-      <li><a href="#usage">Usage Summary</a></li>
-
-      <li><a href="#background">Background</a></li>
-
-      <li><a href="#advantages">Advantages and
-      Disadvantages</a></li>
-    </ul>
-    <hr />
-
-    <table border="1">
-      <tr>
-        <td valign="top"><strong>Related Modules</strong><br />
-         <br />
-         <a href="mod/mod_so.html">mod_so</a><br />
-         </td>
-
-        <td valign="top"><strong>Related Directives</strong><br />
-         <br />
-         <a href="mod/mod_so.html#loadmodule">LoadModule</a><br />
-         </td>
-      </tr>
-    </table>
-
-    <h2><a id="implementation"
-    name="implementation">Implementation</a></h2>
-
-    <p>The DSO support for loading individual Apache modules is
-    based on a module named <a
-    href="mod/mod_so.html"><code>mod_so.c</code></a> which must be
-    statically compiled into the Apache core. It is the only module
-    besides <code>core.c</code> which cannot be put into a DSO
-    itself. Practically all other distributed Apache modules then
-    can then be placed into a DSO by individually enabling the DSO
-    build for them via <code>configure</code>'s
-    <code>--enable-<i>module</i>=shared</code> option as disucussed
-    in the <a href="install.html">install documentation</a>. After
-    a module is compiled into a DSO named <code>mod_foo.so</code>
-    you can use <a href="mod/mod_so.html"><code>mod_so</code></a>'s
-    <a
-    href="mod/mod_so.html#loadmodule"><code>LoadModule</code></a>
-    command in your <code>httpd.conf</code> file to load this
-    module at server startup or restart.</p>
-
-    <p>To simplify this creation of DSO files for Apache modules
-    (especially for third-party modules) a new support program
-    named <a href="programs/apxs.html">apxs</a> (<em>APache
-    eXtenSion</em>) is available. It can be used to build DSO based
-    modules <em>outside of</em> the Apache source tree. The idea is
-    simple: When installing Apache the <code>configure</code>'s
-    <code>make install</code> procedure installs the Apache C
-    header files and puts the platform-dependent compiler and
-    linker flags for building DSO files into the <code>apxs</code>
-    program. This way the user can use <code>apxs</code> to compile
-    his Apache module sources without the Apache distribution
-    source tree and without having to fiddle with the
-    platform-dependent compiler and linker flags for DSO
-    support.</p>
-
-    <h2><a id="usage" name="usage">Usage Summary</a></h2>
-
-    <p>To give you an overview of the DSO features of Apache 2.0,
-    here is a short and concise summary:</p>
-
-    <ol>
-      <li>
-        Build and install a <em>distributed</em> Apache module, say
-        <code>mod_foo.c</code>, into its own DSO
-        <code>mod_foo.so</code>: 
-
-        <table bgcolor="#f0f0f0" cellpadding="10">
-          <tr>
-            <td>
-<pre>
-$ ./configure --prefix=/path/to/install
-        --enable-foo=shared
-$ make install
-</pre>
-            </td>
-          </tr>
-        </table>
-      </li>
-
-      <li>
-        Build and install a <em>third-party</em> Apache module, say
-        <code>mod_foo.c</code>, into its own DSO
-        <code>mod_foo.so</code>: 
-
-        <table bgcolor="#f0f0f0" cellpadding="10">
-          <tr>
-            <td>
-<pre>
-$ ./configure --add-module=module_type:/path/to/3rdparty/mod_foo.c 
-        --enable-foo=shared
-$ make install
-</pre>
-            </td>
-          </tr>
-        </table>
-      </li>
-
-      <li>
-        Configure Apache for <em>later installation</em> of shared
-        modules: 
-
-        <table bgcolor="#f0f0f0" cellpadding="10">
-          <tr>
-            <td>
-<pre>
-$ ./configure --enable-so
-$ make install
-</pre>
-            </td>
-          </tr>
-        </table>
-      </li>
-
-      <li>
-        Build and install a <em>third-party</em> Apache module, say
-        <code>mod_foo.c</code>, into its own DSO
-        <code>mod_foo.so</code> <em>outside of</em> the Apache
-        source tree using <a href="programs/apxs.html">apxs</a>: 
-
-        <table bgcolor="#f0f0f0" cellpadding="10">
-          <tr>
-            <td>
-<pre>
-$ cd /path/to/3rdparty
-$ apxs -c mod_foo.c
-$ apxs -i -a -n foo mod_foo.so
-</pre>
-            </td>
-          </tr>
-        </table>
-      </li>
-    </ol>
-
-    <p>In all cases, once the shared module is compiled, you must
-    use a <a
-    href="mod/mod_so.html#loadmodule"><code>LoadModule</code></a>
-    directive in <code>httpd.conf</code> to tell Apache to activate
-    the module.</p>
-
-    <h2><a id="background" name="background">Background</a></h2>
-
-    <p>On modern Unix derivatives there exists a nifty mechanism
-    usually called dynamic linking/loading of <em>Dynamic Shared
-    Objects</em> (DSO) which provides a way to build a piece of
-    program code in a special format for loading it at run-time
-    into the address space of an executable program.</p>
-
-    <p>This loading can usually be done in two ways: Automatically
-    by a system program called <code>ld.so</code> when an
-    executable program is started or manually from within the
-    executing program via a programmatic system interface to the
-    Unix loader through the system calls
-    <code>dlopen()/dlsym()</code>.</p>
-
-    <p>In the first way the DSO's are usually called <em>shared
-    libraries</em> or <em>DSO libraries</em> and named
-    <code>libfoo.so</code> or <code>libfoo.so.1.2</code>. They
-    reside in a system directory (usually <code>/usr/lib</code>)
-    and the link to the executable program is established at
-    build-time by specifying <code>-lfoo</code> to the linker
-    command. This hard-codes library references into the executable
-    program file so that at start-time the Unix loader is able to
-    locate <code>libfoo.so</code> in <code>/usr/lib</code>, in
-    paths hard-coded via linker-options like <code>-R</code> or in
-    paths configured via the environment variable
-    <code>LD_LIBRARY_PATH</code>. It then resolves any (yet
-    unresolved) symbols in the executable program which are
-    available in the DSO.</p>
-
-    <p>Symbols in the executable program are usually not referenced
-    by the DSO (because it's a reusable library of general code)
-    and hence no further resolving has to be done. The executable
-    program has no need to do anything on its own to use the
-    symbols from the DSO because the complete resolving is done by
-    the Unix loader. (In fact, the code to invoke
-    <code>ld.so</code> is part of the run-time startup code which
-    is linked into every executable program which has been bound
-    non-static). The advantage of dynamic loading of common library
-    code is obvious: the library code needs to be stored only once,
-    in a system library like <code>libc.so</code>, saving disk
-    space for every program.</p>
-
-    <p>In the second way the DSO's are usually called <em>shared
-    objects</em> or <em>DSO files</em> and can be named with an
-    arbitrary extension (although the canonical name is
-    <code>foo.so</code>). These files usually stay inside a
-    program-specific directory and there is no automatically
-    established link to the executable program where they are used.
-    Instead the executable program manually loads the DSO at
-    run-time into its address space via <code>dlopen()</code>. At
-    this time no resolving of symbols from the DSO for the
-    executable program is done. But instead the Unix loader
-    automatically resolves any (yet unresolved) symbols in the DSO
-    from the set of symbols exported by the executable program and
-    its already loaded DSO libraries (especially all symbols from
-    the ubiquitous <code>libc.so</code>). This way the DSO gets
-    knowledge of the executable program's symbol set as if it had
-    been statically linked with it in the first place.</p>
-
-    <p>Finally, to take advantage of the DSO's API the executable
-    program has to resolve particular symbols from the DSO via
-    <code>dlsym()</code> for later use inside dispatch tables
-    <em>etc.</em> In other words: The executable program has to
-    manually resolve every symbol it needs to be able to use it.
-    The advantage of such a mechanism is that optional program
-    parts need not be loaded (and thus do not spend memory) until
-    they are needed by the program in question. When required,
-    these program parts can be loaded dynamically to extend the
-    base program's functionality.</p>
-
-    <p>Although this DSO mechanism sounds straightforward there is
-    at least one difficult step here: The resolving of symbols from
-    the executable program for the DSO when using a DSO to extend a
-    program (the second way). Why? Because "reverse resolving" DSO
-    symbols from the executable program's symbol set is against the
-    library design (where the library has no knowledge about the
-    programs it is used by) and is neither available under all
-    platforms nor standardized. In practice the executable
-    program's global symbols are often not re-exported and thus not
-    available for use in a DSO. Finding a way to force the linker
-    to export all global symbols is the main problem one has to
-    solve when using DSO for extending a program at run-time.</p>
-
-    <p>The shared library approach is the typical one, because it
-    is what the DSO mechanism was designed for, hence it is used
-    for nearly all types of libraries the operating system
-    provides. On the other hand using shared objects for extending
-    a program is not used by a lot of programs.</p>
-
-    <p>As of 1998 there are only a few software packages available
-    which use the DSO mechanism to actually extend their
-    functionality at run-time: Perl 5 (via its XS mechanism and the
-    DynaLoader module), Netscape Server, <em>etc.</em> Starting
-    with version 1.3, Apache joined the crew, because Apache
-    already uses a module concept to extend its functionality and
-    internally uses a dispatch-list-based approach to link external
-    modules into the Apache core functionality. So, Apache is
-    really predestined for using DSO to load its modules at
-    run-time.</p>
-
-    <h2><a id="advantages" name="advantages">Advantages and
-    Disadvantages</a></h2>
-
-    <p>The above DSO based features have the following
-    advantages:</p>
-
-    <ul>
-      <li>The server package is more flexible at run-time because
-      the actual server process can be assembled at run-time via <a
-      href="mod/mod_so.html#loadmodule"><code>LoadModule</code></a>
-      <code>httpd.conf</code> configuration commands instead of
-      <code>configure</code> options at build-time. For instance
-      this way one is able to run different server instances
-      (standard &amp; SSL version, minimalistic &amp; powered up
-      version [mod_perl, PHP3], <em>etc.</em>) with only one Apache
-      installation.</li>
-
-      <li>The server package can be easily extended with
-      third-party modules even after installation. This is at least
-      a great benefit for vendor package maintainers who can create
-      a Apache core package and additional packages containing
-      extensions like PHP3, mod_perl, mod_fastcgi,
-      <em>etc.</em></li>
-
-      <li>Easier Apache module prototyping because with the
-      DSO/<code>apxs</code> pair you can both work outside the
-      Apache source tree and only need an <code>apxs -i</code>
-      command followed by an <code>apachectl restart</code> to
-      bring a new version of your currently developed module into
-      the running Apache server.</li>
-    </ul>
-
-    <p>DSO has the following disadvantages:</p>
-
-    <ul>
-      <li>The DSO mechanism cannot be used on every platform
-      because not all operating systems support dynamic loading of
-      code into the address space of a program.</li>
-
-      <li>The server is approximately 20% slower at startup time
-      because of the symbol resolving overhead the Unix loader now
-      has to do.</li>
-
-      <li>The server is approximately 5% slower at execution time
-      under some platforms because position independent code (PIC)
-      sometimes needs complicated assembler tricks for relative
-      addressing which are not necessarily as fast as absolute
-      addressing.</li>
-
-      <li>Because DSO modules cannot be linked against other
-      DSO-based libraries (<code>ld -lfoo</code>) on all platforms
-      (for instance a.out-based platforms usually don't provide
-      this functionality while ELF-based platforms do) you cannot
-      use the DSO mechanism for all types of modules. Or in other
-      words, modules compiled as DSO files are restricted to only
-      use symbols from the Apache core, from the C library
-      (<code>libc</code>) and all other dynamic or static libraries
-      used by the Apache core, or from static library archives
-      (<code>libfoo.a</code>) containing position independent code.
-      The only chances to use other code is to either make sure the
-      Apache core itself already contains a reference to it or
-      loading the code yourself via <code>dlopen()</code>.</li>
-    </ul>
-    <!--#include virtual="footer.html" -->
-  </body>
-</html>
-
diff --git a/docs/manual/dso.html.en b/docs/manual/dso.html.en
deleted file mode 100644
index 38d28ba..0000000
--- a/docs/manual/dso.html.en
+++ /dev/null
@@ -1,344 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta name="generator" content="HTML Tidy, see www.w3.org" />
-
-    <title>Dynamic Shared Object (DSO) support</title>
-  </head>
-  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-
-  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-  vlink="#000080" alink="#FF0000">
-    <!--#include virtual="header.html" -->
-
-    <h1 align="center">Dynamic Shared Object (DSO) Support</h1>
-
-    <p>The Apache HTTP Server is a modular program where the
-    administrator can choose the functionality to include in the
-    server by selecting a set of modules. The modules can be
-    statically compiled into the <code>httpd</code> binary when the
-    server is built. Alternatively, modules can be compiled as
-    Dynamic Shared Objects (DSOs) that exist separately from the
-    main <code>httpd</code> binary file. DSO modules may be
-    compiled at the time the server is built, or they may be
-    compiled and added at a later time using the Apache Extension
-    Tool (<a href="programs/apxs.html">apxs</a>).</p>
-
-    <p>This document describes how to use DSO modules as well as
-    the theory behind their use.</p>
-
-    <ul>
-      <li><a href="#implementation">Implementation</a></li>
-
-      <li><a href="#usage">Usage Summary</a></li>
-
-      <li><a href="#background">Background</a></li>
-
-      <li><a href="#advantages">Advantages and
-      Disadvantages</a></li>
-    </ul>
-    <hr />
-
-    <table border="1">
-      <tr>
-        <td valign="top"><strong>Related Modules</strong><br />
-         <br />
-         <a href="mod/mod_so.html">mod_so</a><br />
-         </td>
-
-        <td valign="top"><strong>Related Directives</strong><br />
-         <br />
-         <a href="mod/mod_so.html#loadmodule">LoadModule</a><br />
-         </td>
-      </tr>
-    </table>
-
-    <h2><a id="implementation"
-    name="implementation">Implementation</a></h2>
-
-    <p>The DSO support for loading individual Apache modules is
-    based on a module named <a
-    href="mod/mod_so.html"><code>mod_so.c</code></a> which must be
-    statically compiled into the Apache core. It is the only module
-    besides <code>core.c</code> which cannot be put into a DSO
-    itself. Practically all other distributed Apache modules then
-    can then be placed into a DSO by individually enabling the DSO
-    build for them via <code>configure</code>'s
-    <code>--enable-<i>module</i>=shared</code> option as disucussed
-    in the <a href="install.html">install documentation</a>. After
-    a module is compiled into a DSO named <code>mod_foo.so</code>
-    you can use <a href="mod/mod_so.html"><code>mod_so</code></a>'s
-    <a
-    href="mod/mod_so.html#loadmodule"><code>LoadModule</code></a>
-    command in your <code>httpd.conf</code> file to load this
-    module at server startup or restart.</p>
-
-    <p>To simplify this creation of DSO files for Apache modules
-    (especially for third-party modules) a new support program
-    named <a href="programs/apxs.html">apxs</a> (<em>APache
-    eXtenSion</em>) is available. It can be used to build DSO based
-    modules <em>outside of</em> the Apache source tree. The idea is
-    simple: When installing Apache the <code>configure</code>'s
-    <code>make install</code> procedure installs the Apache C
-    header files and puts the platform-dependent compiler and
-    linker flags for building DSO files into the <code>apxs</code>
-    program. This way the user can use <code>apxs</code> to compile
-    his Apache module sources without the Apache distribution
-    source tree and without having to fiddle with the
-    platform-dependent compiler and linker flags for DSO
-    support.</p>
-
-    <h2><a id="usage" name="usage">Usage Summary</a></h2>
-
-    <p>To give you an overview of the DSO features of Apache 2.0,
-    here is a short and concise summary:</p>
-
-    <ol>
-      <li>
-        Build and install a <em>distributed</em> Apache module, say
-        <code>mod_foo.c</code>, into its own DSO
-        <code>mod_foo.so</code>: 
-
-        <table bgcolor="#f0f0f0" cellpadding="10">
-          <tr>
-            <td>
-<pre>
-$ ./configure --prefix=/path/to/install
-        --enable-foo=shared
-$ make install
-</pre>
-            </td>
-          </tr>
-        </table>
-      </li>
-
-      <li>
-        Build and install a <em>third-party</em> Apache module, say
-        <code>mod_foo.c</code>, into its own DSO
-        <code>mod_foo.so</code>: 
-
-        <table bgcolor="#f0f0f0" cellpadding="10">
-          <tr>
-            <td>
-<pre>
-$ ./configure --add-module=module_type:/path/to/3rdparty/mod_foo.c 
-        --enable-foo=shared
-$ make install
-</pre>
-            </td>
-          </tr>
-        </table>
-      </li>
-
-      <li>
-        Configure Apache for <em>later installation</em> of shared
-        modules: 
-
-        <table bgcolor="#f0f0f0" cellpadding="10">
-          <tr>
-            <td>
-<pre>
-$ ./configure --enable-so
-$ make install
-</pre>
-            </td>
-          </tr>
-        </table>
-      </li>
-
-      <li>
-        Build and install a <em>third-party</em> Apache module, say
-        <code>mod_foo.c</code>, into its own DSO
-        <code>mod_foo.so</code> <em>outside of</em> the Apache
-        source tree using <a href="programs/apxs.html">apxs</a>: 
-
-        <table bgcolor="#f0f0f0" cellpadding="10">
-          <tr>
-            <td>
-<pre>
-$ cd /path/to/3rdparty
-$ apxs -c mod_foo.c
-$ apxs -i -a -n foo mod_foo.so
-</pre>
-            </td>
-          </tr>
-        </table>
-      </li>
-    </ol>
-
-    <p>In all cases, once the shared module is compiled, you must
-    use a <a
-    href="mod/mod_so.html#loadmodule"><code>LoadModule</code></a>
-    directive in <code>httpd.conf</code> to tell Apache to activate
-    the module.</p>
-
-    <h2><a id="background" name="background">Background</a></h2>
-
-    <p>On modern Unix derivatives there exists a nifty mechanism
-    usually called dynamic linking/loading of <em>Dynamic Shared
-    Objects</em> (DSO) which provides a way to build a piece of
-    program code in a special format for loading it at run-time
-    into the address space of an executable program.</p>
-
-    <p>This loading can usually be done in two ways: Automatically
-    by a system program called <code>ld.so</code> when an
-    executable program is started or manually from within the
-    executing program via a programmatic system interface to the
-    Unix loader through the system calls
-    <code>dlopen()/dlsym()</code>.</p>
-
-    <p>In the first way the DSO's are usually called <em>shared
-    libraries</em> or <em>DSO libraries</em> and named
-    <code>libfoo.so</code> or <code>libfoo.so.1.2</code>. They
-    reside in a system directory (usually <code>/usr/lib</code>)
-    and the link to the executable program is established at
-    build-time by specifying <code>-lfoo</code> to the linker
-    command. This hard-codes library references into the executable
-    program file so that at start-time the Unix loader is able to
-    locate <code>libfoo.so</code> in <code>/usr/lib</code>, in
-    paths hard-coded via linker-options like <code>-R</code> or in
-    paths configured via the environment variable
-    <code>LD_LIBRARY_PATH</code>. It then resolves any (yet
-    unresolved) symbols in the executable program which are
-    available in the DSO.</p>
-
-    <p>Symbols in the executable program are usually not referenced
-    by the DSO (because it's a reusable library of general code)
-    and hence no further resolving has to be done. The executable
-    program has no need to do anything on its own to use the
-    symbols from the DSO because the complete resolving is done by
-    the Unix loader. (In fact, the code to invoke
-    <code>ld.so</code> is part of the run-time startup code which
-    is linked into every executable program which has been bound
-    non-static). The advantage of dynamic loading of common library
-    code is obvious: the library code needs to be stored only once,
-    in a system library like <code>libc.so</code>, saving disk
-    space for every program.</p>
-
-    <p>In the second way the DSO's are usually called <em>shared
-    objects</em> or <em>DSO files</em> and can be named with an
-    arbitrary extension (although the canonical name is
-    <code>foo.so</code>). These files usually stay inside a
-    program-specific directory and there is no automatically
-    established link to the executable program where they are used.
-    Instead the executable program manually loads the DSO at
-    run-time into its address space via <code>dlopen()</code>. At
-    this time no resolving of symbols from the DSO for the
-    executable program is done. But instead the Unix loader
-    automatically resolves any (yet unresolved) symbols in the DSO
-    from the set of symbols exported by the executable program and
-    its already loaded DSO libraries (especially all symbols from
-    the ubiquitous <code>libc.so</code>). This way the DSO gets
-    knowledge of the executable program's symbol set as if it had
-    been statically linked with it in the first place.</p>
-
-    <p>Finally, to take advantage of the DSO's API the executable
-    program has to resolve particular symbols from the DSO via
-    <code>dlsym()</code> for later use inside dispatch tables
-    <em>etc.</em> In other words: The executable program has to
-    manually resolve every symbol it needs to be able to use it.
-    The advantage of such a mechanism is that optional program
-    parts need not be loaded (and thus do not spend memory) until
-    they are needed by the program in question. When required,
-    these program parts can be loaded dynamically to extend the
-    base program's functionality.</p>
-
-    <p>Although this DSO mechanism sounds straightforward there is
-    at least one difficult step here: The resolving of symbols from
-    the executable program for the DSO when using a DSO to extend a
-    program (the second way). Why? Because "reverse resolving" DSO
-    symbols from the executable program's symbol set is against the
-    library design (where the library has no knowledge about the
-    programs it is used by) and is neither available under all
-    platforms nor standardized. In practice the executable
-    program's global symbols are often not re-exported and thus not
-    available for use in a DSO. Finding a way to force the linker
-    to export all global symbols is the main problem one has to
-    solve when using DSO for extending a program at run-time.</p>
-
-    <p>The shared library approach is the typical one, because it
-    is what the DSO mechanism was designed for, hence it is used
-    for nearly all types of libraries the operating system
-    provides. On the other hand using shared objects for extending
-    a program is not used by a lot of programs.</p>
-
-    <p>As of 1998 there are only a few software packages available
-    which use the DSO mechanism to actually extend their
-    functionality at run-time: Perl 5 (via its XS mechanism and the
-    DynaLoader module), Netscape Server, <em>etc.</em> Starting
-    with version 1.3, Apache joined the crew, because Apache
-    already uses a module concept to extend its functionality and
-    internally uses a dispatch-list-based approach to link external
-    modules into the Apache core functionality. So, Apache is
-    really predestined for using DSO to load its modules at
-    run-time.</p>
-
-    <h2><a id="advantages" name="advantages">Advantages and
-    Disadvantages</a></h2>
-
-    <p>The above DSO based features have the following
-    advantages:</p>
-
-    <ul>
-      <li>The server package is more flexible at run-time because
-      the actual server process can be assembled at run-time via <a
-      href="mod/mod_so.html#loadmodule"><code>LoadModule</code></a>
-      <code>httpd.conf</code> configuration commands instead of
-      <code>configure</code> options at build-time. For instance
-      this way one is able to run different server instances
-      (standard &amp; SSL version, minimalistic &amp; powered up
-      version [mod_perl, PHP3], <em>etc.</em>) with only one Apache
-      installation.</li>
-
-      <li>The server package can be easily extended with
-      third-party modules even after installation. This is at least
-      a great benefit for vendor package maintainers who can create
-      a Apache core package and additional packages containing
-      extensions like PHP3, mod_perl, mod_fastcgi,
-      <em>etc.</em></li>
-
-      <li>Easier Apache module prototyping because with the
-      DSO/<code>apxs</code> pair you can both work outside the
-      Apache source tree and only need an <code>apxs -i</code>
-      command followed by an <code>apachectl restart</code> to
-      bring a new version of your currently developed module into
-      the running Apache server.</li>
-    </ul>
-
-    <p>DSO has the following disadvantages:</p>
-
-    <ul>
-      <li>The DSO mechanism cannot be used on every platform
-      because not all operating systems support dynamic loading of
-      code into the address space of a program.</li>
-
-      <li>The server is approximately 20% slower at startup time
-      because of the symbol resolving overhead the Unix loader now
-      has to do.</li>
-
-      <li>The server is approximately 5% slower at execution time
-      under some platforms because position independent code (PIC)
-      sometimes needs complicated assembler tricks for relative
-      addressing which are not necessarily as fast as absolute
-      addressing.</li>
-
-      <li>Because DSO modules cannot be linked against other
-      DSO-based libraries (<code>ld -lfoo</code>) on all platforms
-      (for instance a.out-based platforms usually don't provide
-      this functionality while ELF-based platforms do) you cannot
-      use the DSO mechanism for all types of modules. Or in other
-      words, modules compiled as DSO files are restricted to only
-      use symbols from the Apache core, from the C library
-      (<code>libc</code>) and all other dynamic or static libraries
-      used by the Apache core, or from static library archives
-      (<code>libfoo.a</code>) containing position independent code.
-      The only chances to use other code is to either make sure the
-      Apache core itself already contains a reference to it or
-      loading the code yourself via <code>dlopen()</code>.</li>
-    </ul>
-    <!--#include virtual="footer.html" -->
-  </body>
-</html>
-
diff --git a/docs/manual/ebcdic.html b/docs/manual/ebcdic.html
deleted file mode 100644
index 8936ec3..0000000
--- a/docs/manual/ebcdic.html
+++ /dev/null
@@ -1,648 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta name="generator" content="HTML Tidy, see www.w3.org" />
-
-    <title>The Apache EBCDIC Port</title>
-  </head>
-  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-
-  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-  vlink="#000080" alink="#FF0000">
-    <!--#include virtual="header.html" -->
-
-    <blockquote>
-      <strong>Warning:</strong> This document has not been updated
-      to take into account changes made in the 2.0 version of the
-      Apache HTTP Server. Some of the information may still be
-      relevant, but please use it with care.
-    </blockquote>
-
-    <h1 align="CENTER">Overview of the Apache EBCDIC Port</h1>
-
-    <p>Version 1.3 of the Apache HTTP Server is the first version
-    which includes a port to a (non-ASCII) mainframe machine which
-    uses the EBCDIC character set as its native codeset.<br />
-     (It is the SIEMENS family of mainframes running the <a
-    href="http://www.siemens.de/servers/bs2osd/osdbc_us.htm">BS2000/OSD
-    operating system</a>. This mainframe OS nowadays features a
-    SVR4-derived POSIX subsystem).</p>
-
-    <p>The port was started initially to</p>
-
-    <ul>
-      <li>prove the feasibility of porting <a
-      href="http://dev.apache.org/">the Apache HTTP server</a> to
-      this platform</li>
-
-      <li>find a "worthy and capable" successor for the venerable
-      <a href="http://www.w3.org/Daemon/">CERN-3.0</a> daemon
-      (which was ported a couple of years ago), and to</li>
-
-      <li>prove that Apache's preforking process model can on this
-      platform easily outperform the accept-fork-serve model used
-      by CERN by a factor of 5 or more.</li>
-    </ul>
-    <br />
-     <br />
-     
-
-    <p>This document serves as a rationale to describe some of the
-    design decisions of the port to this machine.</p>
-
-    <h2 align="CENTER">Design Goals</h2>
-
-    <p>One objective of the EBCDIC port was to maintain enough
-    backwards compatibility with the (EBCDIC) CERN server to make
-    the transition to the new server attractive and easy. This
-    required the addition of a configurable method to define
-    whether a HTML document was stored in ASCII (the only format
-    accepted by the old server) or in EBCDIC (the native document
-    format in the POSIX subsystem, and therefore the only realistic
-    format in which the other POSIX tools like grep or sed could
-    operate on the documents). The current solution to this is a
-    "pseudo-MIME-format" which is intercepted and interpreted by
-    the Apache server (see below). Future versions might solve the
-    problem by defining an "ebcdic-handler" for all documents which
-    must be converted.</p>
-
-    <h2 align="CENTER">Technical Solution</h2>
-
-    <p>Since all Apache input and output is based upon the BUFF
-    data type and its methods, the easiest solution was to add the
-    conversion to the BUFF handling routines. The conversion must
-    be settable at any time, so a BUFF flag was added which defines
-    whether a BUFF object has currently enabled conversion or not.
-    This flag is modified at several points in the HTTP
-    protocol:</p>
-
-    <ul>
-      <li><strong>set</strong> before a request is received
-      (because the request and the request header lines are always
-      in ASCII format)</li>
-
-      <li><strong>set/unset</strong> when the request body is
-      received - depending on the content type of the request body
-      (because the request body may contain ASCII text or a binary
-      file)</li>
-
-      <li><strong>set</strong> before a reply header is sent
-      (because the response header lines are always in ASCII
-      format)</li>
-
-      <li><strong>set/unset</strong> when the response body is sent
-      - depending on the content type of the response body (because
-      the response body may contain text or a binary file)</li>
-    </ul>
-    <br />
-     <br />
-     
-
-    <h2 align="CENTER">Porting Notes</h2>
-
-    <ol>
-      <li>
-        The relevant changes in the source are #ifdef'ed into two
-        categories: 
-
-        <dl>
-          <dt><code><strong>#ifdef
-          CHARSET_EBCDIC</strong></code></dt>
-
-          <dd>Code which is needed for any EBCDIC based machine.
-          This includes character translations, differences in
-          contiguity of the two character sets, flags which
-          indicate which part of the HTTP protocol has to be
-          converted and which part doesn't <em>etc.</em></dd>
-
-          <dt><code><strong>#ifdef _OSD_POSIX</strong></code></dt>
-
-          <dd>Code which is needed for the SIEMENS BS2000/OSD
-          mainframe platform only. This deals with include file
-          differences and socket implementation topics which are
-          only required on the BS2000/OSD platform.</dd>
-        </dl>
-      </li>
-
-      <li style="list-style: none"><br />
-      </li>
-
-      <li>The possibility to translate between ASCII and EBCDIC at
-      the socket level (on BS2000 POSIX, there is a socket option
-      which supports this) was intentionally <em>not</em> chosen,
-      because the byte stream at the HTTP protocol level consists
-      of a mixture of protocol related strings and non-protocol
-      related raw file data. HTTP protocol strings are always
-      encoded in ASCII (the GET request, any Header: lines, the
-      chunking information <em>etc.</em>) whereas the file transfer
-      parts (<em>i.e.</em>, GIF images, CGI output <em>etc.</em>)
-      should usually be just "passed through" by the server. This
-      separation between "protocol string" and "raw data" is
-      reflected in the server code by functions like bgets() or
-      rvputs() for strings, and functions like bwrite() for binary
-      data. A global translation of everything would therefore be
-      inadequate.<br />
-       (In the case of text files of course, provisions must be
-      made so that EBCDIC documents are always served in
-      ASCII)</li>
-
-      <li style="list-style: none"><br />
-      </li>
-
-      <li>This port therefore features a built-in protocol level
-      conversion for the server-internal strings (which the
-      compiler translated to EBCDIC strings) and thus for all
-      server-generated documents. The hard coded ASCII escapes \012
-      and \015 which are ubiquitous in the server code are an
-      exception: they are already the binary encoding of the ASCII
-      \n and \r and must not be converted to ASCII a second time.
-      This exception is only relevant for server-generated strings;
-      and <em>external</em> EBCDIC documents are not expected to
-      contain ASCII newline characters.</li>
-
-      <li style="list-style: none"><br />
-      </li>
-
-      <li>By examining the call hierarchy for the BUFF management
-      routines, I added an "ebcdic/ascii conversion layer" which
-      would be crossed on every puts/write/get/gets, and a
-      conversion flag which allowed enabling/disabling the
-      conversions on-the-fly. Usually, a document crosses this
-      layer twice from its origin source (a file or CGI output) to
-      its destination (the requesting client): <samp>file -&gt;
-      Apache</samp>, and <samp>Apache -&gt; client</samp>.<br />
-       The server can now read the header lines of a CGI-script
-      output in EBCDIC format, and then find out that the remainder
-      of the script's output is in ASCII (like in the case of the
-      output of a WWW Counter program: the document body contains a
-      GIF image). All header processing is done in the native
-      EBCDIC format; the server then determines, based on the type
-      of document being served, whether the document body (except
-      for the chunking information, of course) is in ASCII already
-      or must be converted from EBCDIC.</li>
-
-      <li style="list-style: none"><br />
-      </li>
-
-      <li>
-        For Text documents (MIME types text/plain, text/html
-        <em>etc.</em>), an implicit translation to ASCII can be
-        used, or (if the users prefer to store some documents in
-        raw ASCII form for faster serving, or because the files
-        reside on a NFS-mounted directory tree) can be served
-        without conversion.<br />
-         <strong>Example:</strong> 
-
-        <blockquote>
-          to serve files with the suffix .ahtml as a raw ASCII
-          text/html document without implicit conversion (and
-          suffix .ascii as ASCII text/plain), use the directives: 
-<pre>
-      AddType  text/x-ascii-html  .ahtml
-      AddType  text/x-ascii-plain .ascii
-     
-</pre>
-        </blockquote>
-        Similarly, any text/foo MIME type can be served as "raw
-        ASCII" by configuring a MIME type "text/x-ascii-foo" for it
-        using AddType.
-      </li>
-
-      <li style="list-style: none"><br />
-      </li>
-
-      <li>Non-text documents are always served "binary" without
-      conversion. This seems to be the most sensible choice for,
-      .<em>e.g.</em>, GIF/ZIP/AU file types. This of course
-      requires the user to copy them to the mainframe host using
-      the "rcp -b" binary switch.</li>
-
-      <li style="list-style: none"><br />
-      </li>
-
-      <li>Server parsed files are always assumed to be in native
-      (<em>i.e.</em>, EBCDIC) format as used on the machine, and
-      are converted after processing.</li>
-
-      <li style="list-style: none"><br />
-      </li>
-
-      <li>For CGI output, the CGI script determines whether a
-      conversion is needed or not: by setting the appropriate
-      Content-Type, text files can be converted, or GIF output can
-      be passed through unmodified. An example for the latter case
-      is the wwwcount program which we ported as well.</li>
-
-      <li style="list-style: none"><br />
-      </li>
-    </ol>
-    <br />
-     <br />
-     
-
-    <h2 align="CENTER">Document Storage Notes</h2>
-
-    <h3 align="CENTER">Binary Files</h3>
-
-    <p>All files with a <samp>Content-Type:</samp> which does not
-    start with <samp>text/</samp> are regarded as <em>binary
-    files</em> by the server and are not subject to any conversion.
-    Examples for binary files are GIF images, gzip-compressed files
-    and the like.</p>
-
-    <p>When exchanging binary files between the mainframe host and
-    a Unix machine or Windows PC, be sure to use the ftp "binary"
-    (<samp>TYPE I</samp>) command, or use the
-    <samp>rcp&nbsp;-b</samp> command from the mainframe host (the
-    -b switch is not supported in unix rcp's).</p>
-
-    <h3 align="CENTER">Text Documents</h3>
-
-    <p>The default assumption of the server is that Text Files
-    (<em>i.e.</em>, all files whose <samp>Content-Type:</samp>
-    starts with <samp>text/</samp>) are stored in the native
-    character set of the host, EBCDIC.</p>
-
-    <h3 align="CENTER">Server Side Included Documents</h3>
-
-    <p>SSI documents must currently be stored in EBCDIC only. No
-    provision is made to convert it from ASCII before
-    processing.</p>
-
-    <h2 align="CENTER">Apache Modules' Status</h2>
-
-    <table border="1" align="middle">
-      <tr>
-        <th>Module</th>
-
-        <th>Status</th>
-
-        <th>Notes</th>
-      </tr>
-
-      <tr>
-        <td align="LEFT">http_core</td>
-
-        <td align="CENTER">+</td>
-
-        <td>
-        </td>
-      </tr>
-
-      <tr>
-        <td align="LEFT">mod_access</td>
-
-        <td align="CENTER">+</td>
-
-        <td>
-        </td>
-      </tr>
-
-      <tr>
-        <td align="LEFT">mod_actions</td>
-
-        <td align="CENTER">+</td>
-
-        <td>
-        </td>
-      </tr>
-
-      <tr>
-        <td align="LEFT">mod_alias</td>
-
-        <td align="CENTER">+</td>
-
-        <td>
-        </td>
-      </tr>
-
-      <tr>
-        <td align="LEFT">mod_asis</td>
-
-        <td align="CENTER">+</td>
-
-        <td>
-        </td>
-      </tr>
-
-      <tr>
-        <td align="LEFT">mod_auth</td>
-
-        <td align="CENTER">+</td>
-
-        <td>
-        </td>
-      </tr>
-
-      <tr>
-        <td align="LEFT">mod_auth_anon</td>
-
-        <td align="CENTER">+</td>
-
-        <td>
-        </td>
-      </tr>
-
-      <tr>
-        <td align="LEFT">mod_auth_dbm</td>
-
-        <td align="CENTER">?</td>
-
-        <td>with own libdb.a</td>
-      </tr>
-
-      <tr>
-        <td align="LEFT">mod_autoindex</td>
-
-        <td align="CENTER">+</td>
-
-        <td>
-        </td>
-      </tr>
-
-      <tr>
-        <td align="LEFT">mod_cern_meta</td>
-
-        <td align="CENTER">?</td>
-
-        <td>
-        </td>
-      </tr>
-
-      <tr>
-        <td align="LEFT">mod_cgi</td>
-
-        <td align="CENTER">+</td>
-
-        <td>
-        </td>
-      </tr>
-
-      <tr>
-        <td align="LEFT">mod_digest</td>
-
-        <td align="CENTER">+</td>
-
-        <td>
-        </td>
-      </tr>
-
-      <tr>
-        <td align="LEFT">mod_dir</td>
-
-        <td align="CENTER">+</td>
-
-        <td>
-        </td>
-      </tr>
-
-      <tr>
-        <td align="LEFT">mod_so</td>
-
-        <td align="CENTER">-</td>
-
-        <td>no shared libs</td>
-      </tr>
-
-      <tr>
-        <td align="LEFT">mod_env</td>
-
-        <td align="CENTER">+</td>
-
-        <td>
-        </td>
-      </tr>
-
-      <tr>
-        <td align="LEFT">mod_example</td>
-
-        <td align="CENTER">-</td>
-
-        <td>(test bed only)</td>
-      </tr>
-
-      <tr>
-        <td align="LEFT">mod_expires</td>
-
-        <td align="CENTER">+</td>
-
-        <td>
-        </td>
-      </tr>
-
-      <tr>
-        <td align="LEFT">mod_headers</td>
-
-        <td align="CENTER">+</td>
-
-        <td>
-        </td>
-      </tr>
-
-      <tr>
-        <td align="LEFT">mod_imap</td>
-
-        <td align="CENTER">+</td>
-
-        <td>
-        </td>
-      </tr>
-
-      <tr>
-        <td align="LEFT">mod_include</td>
-
-        <td align="CENTER">+</td>
-
-        <td>
-        </td>
-      </tr>
-
-      <tr>
-        <td align="LEFT">mod_info</td>
-
-        <td align="CENTER">+</td>
-
-        <td>
-        </td>
-      </tr>
-
-      <tr>
-        <td align="LEFT">mod_log_agent</td>
-
-        <td align="CENTER">+</td>
-
-        <td>
-        </td>
-      </tr>
-
-      <tr>
-        <td align="LEFT">mod_log_config</td>
-
-        <td align="CENTER">+</td>
-
-        <td>
-        </td>
-      </tr>
-
-      <tr>
-        <td align="LEFT">mod_log_referer</td>
-
-        <td align="CENTER">+</td>
-
-        <td>
-        </td>
-      </tr>
-
-      <tr>
-        <td align="LEFT">mod_mime</td>
-
-        <td align="CENTER">+</td>
-
-        <td>
-        </td>
-      </tr>
-
-      <tr>
-        <td align="LEFT">mod_mime_magic</td>
-
-        <td align="CENTER">?</td>
-
-        <td>not ported yet</td>
-      </tr>
-
-      <tr>
-        <td align="LEFT">mod_negotiation</td>
-
-        <td align="CENTER">+</td>
-
-        <td>
-        </td>
-      </tr>
-
-      <tr>
-        <td align="LEFT">mod_proxy</td>
-
-        <td align="CENTER">+</td>
-
-        <td>
-        </td>
-      </tr>
-
-      <tr>
-        <td align="LEFT">mod_rewrite</td>
-
-        <td align="CENTER">+</td>
-
-        <td>untested</td>
-      </tr>
-
-      <tr>
-        <td align="LEFT">mod_setenvif</td>
-
-        <td align="CENTER">+</td>
-
-        <td>
-        </td>
-      </tr>
-
-      <tr>
-        <td align="LEFT">mod_speling</td>
-
-        <td align="CENTER">+</td>
-
-        <td>
-        </td>
-      </tr>
-
-      <tr>
-        <td align="LEFT">mod_status</td>
-
-        <td align="CENTER">+</td>
-
-        <td>
-        </td>
-      </tr>
-
-      <tr>
-        <td align="LEFT">mod_unique_id</td>
-
-        <td align="CENTER">+</td>
-
-        <td>
-        </td>
-      </tr>
-
-      <tr>
-        <td align="LEFT">mod_userdir</td>
-
-        <td align="CENTER">+</td>
-
-        <td>
-        </td>
-      </tr>
-
-      <tr>
-        <td align="LEFT">mod_usertrack</td>
-
-        <td align="CENTER">?</td>
-
-        <td>untested</td>
-      </tr>
-    </table>
-
-    <h2 align="CENTER">Third Party Modules' Status</h2>
-
-    <table border="1" align="middle">
-      <tr>
-        <th>Module</th>
-
-        <th>Status</th>
-
-        <th>Notes</th>
-      </tr>
-
-      <tr>
-        <td align="LEFT"><a
-        href="http://java.apache.org/">mod_jserv</a> </td>
-
-        <td align="CENTER">-</td>
-
-        <td>JAVA still being ported.</td>
-      </tr>
-
-      <tr>
-        <td align="LEFT"><a href="http://www.php.net/">mod_php3</a>
-        </td>
-
-        <td align="CENTER">+</td>
-
-        <td>mod_php3 runs fine, with LDAP and GD and FreeType
-        libraries</td>
-      </tr>
-
-      <tr>
-        <td align="LEFT"><a
-        href="http://hpwww.ec-lyon.fr/~vincent/apache/mod_put.html">
-        mod_put</a> </td>
-
-        <td align="CENTER">?</td>
-
-        <td>untested</td>
-      </tr>
-
-      <tr>
-        <td align="LEFT"><a
-        href="ftp://hachiman.vidya.com/pub/apache/">mod_session</a>
-        </td>
-
-        <td align="CENTER">-</td>
-
-        <td>untested</td>
-      </tr>
-    </table>
-    <!--#include virtual="footer.html" -->
-  </body>
-</html>
-
diff --git a/docs/manual/env.html b/docs/manual/env.html
deleted file mode 100644
index f030a9d..0000000
--- a/docs/manual/env.html
+++ /dev/null
@@ -1,350 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta name="generator" content="HTML Tidy, see www.w3.org" />
-
-    <title>Environment Variables in Apache</title>
-  </head>
-  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-
-  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-  vlink="#000080" alink="#FF0000">
-    <!--#include virtual="header.html" -->
-
-    <h1 align="center">Environment Variables in Apache</h1>
-
-    <p>The Apache HTTP Server provides a mechanism for storing
-    information in named variables that are called <em>environment
-    variables</em>. This information can be used to control various
-    operations such as logging or access control. The variables are
-    also used as a mechanism to communicate with external programs
-    such as CGI scripts. This document discusses different ways to
-    manipulate and use these variables.</p>
-
-    <p>Although these variables are referred to as <em>environment
-    variables</em>, they are not the same as the environment
-    variables controlled by the underlying operating system.
-    Instead, these variables are stored and manipulated in an
-    internal Apache structure. They only become actual operating
-    system environment variables when they are provided to CGI
-    scripts and Server Side Include scripts. If you wish to
-    manipulate the operating system environment under which the
-    server itself runs, you must use the standard environment
-    manipulation mechanisms provided by your operating system
-    shell.</p>
-
-    <ul>
-      <li><a href="#setting">Setting Environment Variables</a></li>
-
-      <li><a href="#using">Using Environment Variables</a></li>
-
-      <li><a href="#special">Special Purpose Environment
-      Variables</a></li>
-
-      <li><a href="#examples">Examples</a></li>
-    </ul>
-    <hr />
-
-    <h2><a id="setting" name="setting">Setting Environment
-    Variables</a></h2>
-
-    <table border="1">
-      <tr>
-        <td valign="top"><strong>Related Modules</strong><br />
-         <br />
-         <a href="mod/mod_env.html">mod_env</a><br />
-         <a href="mod/mod_rewrite.html">mod_rewrite</a><br />
-         <a href="mod/mod_setenvif.html">mod_setenvif</a><br />
-         <a href="mod/mod_unique_id.html">mod_unique_id</a><br />
-         </td>
-
-        <td valign="top"><strong>Related Directives</strong><br />
-         <br />
-         <a
-        href="mod/mod_setenvif.html#BrowserMatch">BrowserMatch</a><br />
-         <a
-        href="mod/mod_setenvif.html#BrowserMatchNoCase">BrowserMatchNoCase</a><br />
-         <a href="mod/mod_env.html#passenv">PassEnv</a><br />
-         <a
-        href="mod/mod_rewrite.html#RewriteRule">RewriteRule</a><br />
-         <a href="mod/mod_env.html#setenv">SetEnv</a><br />
-         <a
-        href="mod/mod_setenvif.html#SetEnvIf">SetEnvIf</a><br />
-         <a
-        href="mod/mod_setenvif.html#SetEnvIfNoCase">SetEnvIfNoCase</a><br />
-         <a href="mod/mod_env.html#unsetenv">UnsetEnv</a><br />
-         </td>
-      </tr>
-    </table>
-
-    <h3>Basic Environment Manipulation</h3>
-
-    <p>The most basic way to set an environment variable in Apache
-    is using the unconditional <code>SetEnv</code> directive.
-    Variables may also be passed from the environment of the shell
-    which started the server using the <code>PassEnv</code>
-    directive.</p>
-
-    <h3>Conditional Per-Request Settings</h3>
-
-    <p>For additional flexibility, the directives provided by
-    mod_setenvif allow environment variables to be set on a
-    per-request basis, conditional on characteristics of particular
-    requests. For example, a variable could be set only when a
-    specific browser (User-Agent) is making a request, or only when
-    a specific Referer [sic] header is found. Even more flexibility
-    is available through the mod_rewrite's <code>RewriteRule</code>
-    which uses the <code>[E=...]</code> option to set environment
-    variables.</p>
-
-    <h3>Unique Identifiers</h3>
-
-    <p>Finally, mod_unique_id sets the environment variable
-    <code>UNIQUE_ID</code> for each request to a value which is
-    guaranteed to be unique across "all" requests under very
-    specific conditions.</p>
-
-    <h3>Standard CGI Variables</h3>
-
-    <p>In addition to all environment variables set within the
-    Apache configuration and passed from the shell, CGI scripts and
-    SSI pages are provided with a set of environment variables
-    containing meta-information about the request as required by
-    the <a href="http://cgi-spec.golux.com/">CGI
-    specification</a>.</p>
-
-    <h3>Some Caveats</h3>
-
-    <ul>
-      <li>It is not possible to override or change the standard CGI
-      variables using the environment manipulation directives.</li>
-
-      <li>When <a href="suexec.html">suexec</a> is used to launch
-      CGI scripts, the environment will be cleaned down to a set of
-      <em>safe</em> variables before CGI scripts are launched. The
-      list of <em>safe</em> variables is defined at compile-time in
-      <code>suexec.c</code>.</li>
-
-      <li>For portability reasons, the names of environment
-      variables may contain only letters, numbers, and the
-      underscore character. In addition, the first character may
-      not be a number. Characters which do not match this
-      restriction will be replaced by an underscore when passed to
-      CGI scripts and SSI pages.</li>
-    </ul>
-    <hr />
-
-    <h2><a id="using" name="using">Using Environment
-    Variables</a></h2>
-
-    <table border="1">
-      <tr>
-        <td valign="top"><strong>Related Modules</strong><br />
-         <br />
-         <a href="mod/mod_access.html">mod_access</a><br />
-         <a href="mod/mod_cgi.html">mod_cgi</a><br />
-         <a href="mod/mod_headers.html">mod_headers</a><br />
-         <a href="mod/mod_include.html">mod_include</a><br />
-         <a href="mod/mod_log_config.html">mod_log_config</a><br />
-         <a href="mod/mod_rewrite.html">mod_rewrite</a><br />
-         </td>
-
-        <td valign="top"><strong>Related Directives</strong><br />
-         <br />
-         <a href="mod/mod_access.html#allow">Allow</a><br />
-         <a
-        href="mod/mod_log_config.html#customlog">CustomLog</a><br />
-         <a href="mod/mod_access.html#deny">Deny</a><br />
-         <a href="mod/mod_headers.html#Header">Header</a><br />
-         <a
-        href="mod/mod_log_config.html#logformat">LogFormat</a><br />
-         <a
-        href="mod/mod_rewrite.html#RewriteCond">RewriteCond</a><br />
-         <a
-        href="mod/mod_rewrite.html#RewriteRule">RewriteRule</a><br />
-         </td>
-      </tr>
-    </table>
-
-    <h3>CGI Scripts</h3>
-
-    <p>One of the primary uses of environment variables is to
-    communicate information to CGI scripts. As discussed above, the
-    environment passed to CGI scripts includes standard
-    meta-information about the request in addition to any variables
-    set within the Apache configuration. For more details, see the
-    <a href="howto/cgi.html">CGI tutorial</a>.</p>
-
-    <h3>SSI Pages</h3>
-
-    <p>Server-parsed (SSI) documents processed by mod_include's
-    <code>INCLUDES</code> filter can print environment variables
-    using the <code>echo</code> element, and can use environment
-    variables in flow control elements to makes parts of a page
-    conditional on characteristics of a request. Apache also
-    provides SSI pages with the standard CGI environment variables
-    as discussed above. For more details, see the <a
-    href="howto/ssi.html">SSI tutorial</a>.</p>
-
-    <h3>Access Control</h3>
-
-    <p>Access to the server can be controlled based on the value of
-    environment variables using the <code>allow from env=</code>
-    and <code>deny from env=</code> directives. In combination with
-    <code>SetEnvIf</code>, this allows for flexible control of
-    access to the server based on characteristics of the client.
-    For example, you can use these directives to deny access to a
-    particular browser (User-Agent).</p>
-
-    <h3>Conditional Logging</h3>
-
-    <p>Environment variables can be logged in the access log using
-    the <code>LogFormat</code> option <code>%e</code>. In addition,
-    the decision on whether or not to log requests can be made
-    based on the status of environment variables using the
-    conditional form of the <code>CustomLog</code> directive. In
-    combination with <code>SetEnvIf</code> this allows for flexible
-    control of which requests are logged. For example, you can
-    choose not to log requests for filenames ending in
-    <code>gif</code>, or you can choose to only log requests from
-    clients which are outside your subnet.</p>
-
-    <h3>Conditional Response Headers</h3>
-
-    <p>The <code>Header</code> directive can use the presence or
-    absence of an environment variable to determine whether or not
-    a certain HTTP header will be placed in the response to the
-    client. This allows, for example, a certain response header to
-    be sent only if a corresponding header is received in the
-    request from the client.</p>
-
-    <h3>URL Rewriting</h3>
-
-    <p>The <code>%{ENV:...}</code> form of <em>TestString</em> in
-    the <code>RewriteCond</code> allows mod_rewrite's rewrite
-    engine to make decisions conditional on environment variables.
-    Note that the variables accessible in mod_rewrite without the
-    <code>ENV:</code> prefix are not actually environment
-    variables. Rather, they are variables special to mod_rewrite
-    which cannot be accessed from other modules.</p>
-    <hr />
-
-    <h2><a id="special" name="special">Special Purpose Environment
-    Variables</a></h2>
-
-    <p>Interoperability problems have led to the introduction of
-    mechanisms to modify the way Apache behaves when talking to
-    particular clients. To make these mechanisms as flexible as
-    possible, they are invoked by defining environment variables,
-    typically with <a
-    href="mod/mod_setenvif.html#browsermatch">BrowserMatch</a>,
-    though <a href="mod/mod_env.html#setenv">SetEnv</a> and <a
-    href="mod/mod_env.html#passenv">PassEnv</a> could also be used,
-    for example.</p>
-
-    <h2>downgrade-1.0</h2>
-
-    <p>This forces the request to be treated as a HTTP/1.0 request
-    even if it was in a later dialect.</p>
-
-    <h2>force-no-vary</h2>
-
-    <p>This causes any <code>Vary</code> fields to be removed from
-    the response header before it is sent back to the client. Some
-    clients don't interpret this field correctly (see the <a
-    href="misc/known_client_problems.html">known client
-    problems</a> page); setting this variable can work around this
-    problem. Setting this variable also implies
-    <strong>force-response-1.0</strong>.</p>
-
-    <h2>force-response-1.0</h2>
-
-    <p>This forces an HTTP/1.0 response when set. It was originally
-    implemented as a result of a problem with AOL's proxies. Some
-    clients may not behave correctly when given an HTTP/1.1
-    response, and this can be used to interoperate with them.</p>
-
-    <h2>nokeepalive</h2>
-
-    <p>This disables <a
-    href="mod/core.html#keepalive">KeepAlive</a> when set.</p>
-
-    <h2>redirect-carefully</h2>
-
-    <p>This forces the server to be more careful when sending a redirect
-    to the client.  This is typically used when a client has a known
-    problem handling redirects.  This was originally implemented as a
-    result of a problem with Microsoft's WebFolders software which has
-    a problem handling redirects on directory resources via DAV 
-    methods.</p>
-
-    <hr />
-    <h2><a id="examples" name="examples">Examples</a></h2>
-
-    <h3>Changing protocol behavior with misbehaving clients</h3>
-
-    <p>We recommend that the following lines be included in
-    httpd.conf to deal with known client problems.</p>
-<pre>
-#
-# The following directives modify normal HTTP response behavior.
-# The first directive disables keepalive for Netscape 2.x and browsers that
-# spoof it. There are known problems with these browser implementations.
-# The second directive is for Microsoft Internet Explorer 4.0b2
-# which has a broken HTTP/1.1 implementation and does not properly
-# support keepalive when it is used on 301 or 302 (redirect) responses.
-#
-BrowserMatch "Mozilla/2" nokeepalive
-BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0
-
-#
-# The following directive disables HTTP/1.1 responses to browsers which
-# are in violation of the HTTP/1.0 spec by not being able to grok a
-# basic 1.1 response.
-#
-BrowserMatch "RealPlayer 4\.0" force-response-1.0
-BrowserMatch "Java/1\.0" force-response-1.0
-BrowserMatch "JDK/1\.0" force-response-1.0
-</pre>
-
-    <h3>Do not log requests for images in the access log</h3>
-
-    <p>This example keeps requests for images from appearing in the
-    access log. It can be easily modified to prevent logging of
-    particular directories, or to prevent logging of requests
-    coming from particular hosts.</p>
-<pre>
-    SetEnvIf Request_URI \.gif image-request
-    SetEnvIf Request_URI \.jpg image-request
-    SetEnvIf Request_URI \.png image-request
-    CustomLog logs/access_log env=!image-request
-</pre>
-
-    <h3>Prevent "Image Theft"</h3>
-
-    <p>This example shows how to keep people not on your server
-    from using images on your server as inline-images on their
-    pages. This is not a recommended configuration, but it can work
-    in limited circumstances. We assume that all your images are in
-    a directory called /web/images.</p>
-<pre>
-    SetEnvIf Referer "^http://www.example.com/" local_referal
-    # Allow browsers that do not send Referer info
-    SetEnvIf Referer "^$" local_referal
-    &lt;Directory /web/images&gt;
-       Order Deny,Allow
-       Deny from all
-       Allow from env=local_referal
-    &lt;/Directory&gt;
-</pre>
-
-    <p>For more information about this technique, see the
-    ApacheToday tutorial " <a
-    href="http://apachetoday.com/news_story.php3?ltsn=2000-06-14-002-01-PS">
-    Keeping Your Images from Adorning Other Sites</a>".</p>
-    <!--#include virtual="footer.html" -->
-  </body>
-</html>
-
diff --git a/docs/manual/env.html.en b/docs/manual/env.html.en
deleted file mode 100644
index f030a9d..0000000
--- a/docs/manual/env.html.en
+++ /dev/null
@@ -1,350 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta name="generator" content="HTML Tidy, see www.w3.org" />
-
-    <title>Environment Variables in Apache</title>
-  </head>
-  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-
-  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-  vlink="#000080" alink="#FF0000">
-    <!--#include virtual="header.html" -->
-
-    <h1 align="center">Environment Variables in Apache</h1>
-
-    <p>The Apache HTTP Server provides a mechanism for storing
-    information in named variables that are called <em>environment
-    variables</em>. This information can be used to control various
-    operations such as logging or access control. The variables are
-    also used as a mechanism to communicate with external programs
-    such as CGI scripts. This document discusses different ways to
-    manipulate and use these variables.</p>
-
-    <p>Although these variables are referred to as <em>environment
-    variables</em>, they are not the same as the environment
-    variables controlled by the underlying operating system.
-    Instead, these variables are stored and manipulated in an
-    internal Apache structure. They only become actual operating
-    system environment variables when they are provided to CGI
-    scripts and Server Side Include scripts. If you wish to
-    manipulate the operating system environment under which the
-    server itself runs, you must use the standard environment
-    manipulation mechanisms provided by your operating system
-    shell.</p>
-
-    <ul>
-      <li><a href="#setting">Setting Environment Variables</a></li>
-
-      <li><a href="#using">Using Environment Variables</a></li>
-
-      <li><a href="#special">Special Purpose Environment
-      Variables</a></li>
-
-      <li><a href="#examples">Examples</a></li>
-    </ul>
-    <hr />
-
-    <h2><a id="setting" name="setting">Setting Environment
-    Variables</a></h2>
-
-    <table border="1">
-      <tr>
-        <td valign="top"><strong>Related Modules</strong><br />
-         <br />
-         <a href="mod/mod_env.html">mod_env</a><br />
-         <a href="mod/mod_rewrite.html">mod_rewrite</a><br />
-         <a href="mod/mod_setenvif.html">mod_setenvif</a><br />
-         <a href="mod/mod_unique_id.html">mod_unique_id</a><br />
-         </td>
-
-        <td valign="top"><strong>Related Directives</strong><br />
-         <br />
-         <a
-        href="mod/mod_setenvif.html#BrowserMatch">BrowserMatch</a><br />
-         <a
-        href="mod/mod_setenvif.html#BrowserMatchNoCase">BrowserMatchNoCase</a><br />
-         <a href="mod/mod_env.html#passenv">PassEnv</a><br />
-         <a
-        href="mod/mod_rewrite.html#RewriteRule">RewriteRule</a><br />
-         <a href="mod/mod_env.html#setenv">SetEnv</a><br />
-         <a
-        href="mod/mod_setenvif.html#SetEnvIf">SetEnvIf</a><br />
-         <a
-        href="mod/mod_setenvif.html#SetEnvIfNoCase">SetEnvIfNoCase</a><br />
-         <a href="mod/mod_env.html#unsetenv">UnsetEnv</a><br />
-         </td>
-      </tr>
-    </table>
-
-    <h3>Basic Environment Manipulation</h3>
-
-    <p>The most basic way to set an environment variable in Apache
-    is using the unconditional <code>SetEnv</code> directive.
-    Variables may also be passed from the environment of the shell
-    which started the server using the <code>PassEnv</code>
-    directive.</p>
-
-    <h3>Conditional Per-Request Settings</h3>
-
-    <p>For additional flexibility, the directives provided by
-    mod_setenvif allow environment variables to be set on a
-    per-request basis, conditional on characteristics of particular
-    requests. For example, a variable could be set only when a
-    specific browser (User-Agent) is making a request, or only when
-    a specific Referer [sic] header is found. Even more flexibility
-    is available through the mod_rewrite's <code>RewriteRule</code>
-    which uses the <code>[E=...]</code> option to set environment
-    variables.</p>
-
-    <h3>Unique Identifiers</h3>
-
-    <p>Finally, mod_unique_id sets the environment variable
-    <code>UNIQUE_ID</code> for each request to a value which is
-    guaranteed to be unique across "all" requests under very
-    specific conditions.</p>
-
-    <h3>Standard CGI Variables</h3>
-
-    <p>In addition to all environment variables set within the
-    Apache configuration and passed from the shell, CGI scripts and
-    SSI pages are provided with a set of environment variables
-    containing meta-information about the request as required by
-    the <a href="http://cgi-spec.golux.com/">CGI
-    specification</a>.</p>
-
-    <h3>Some Caveats</h3>
-
-    <ul>
-      <li>It is not possible to override or change the standard CGI
-      variables using the environment manipulation directives.</li>
-
-      <li>When <a href="suexec.html">suexec</a> is used to launch
-      CGI scripts, the environment will be cleaned down to a set of
-      <em>safe</em> variables before CGI scripts are launched. The
-      list of <em>safe</em> variables is defined at compile-time in
-      <code>suexec.c</code>.</li>
-
-      <li>For portability reasons, the names of environment
-      variables may contain only letters, numbers, and the
-      underscore character. In addition, the first character may
-      not be a number. Characters which do not match this
-      restriction will be replaced by an underscore when passed to
-      CGI scripts and SSI pages.</li>
-    </ul>
-    <hr />
-
-    <h2><a id="using" name="using">Using Environment
-    Variables</a></h2>
-
-    <table border="1">
-      <tr>
-        <td valign="top"><strong>Related Modules</strong><br />
-         <br />
-         <a href="mod/mod_access.html">mod_access</a><br />
-         <a href="mod/mod_cgi.html">mod_cgi</a><br />
-         <a href="mod/mod_headers.html">mod_headers</a><br />
-         <a href="mod/mod_include.html">mod_include</a><br />
-         <a href="mod/mod_log_config.html">mod_log_config</a><br />
-         <a href="mod/mod_rewrite.html">mod_rewrite</a><br />
-         </td>
-
-        <td valign="top"><strong>Related Directives</strong><br />
-         <br />
-         <a href="mod/mod_access.html#allow">Allow</a><br />
-         <a
-        href="mod/mod_log_config.html#customlog">CustomLog</a><br />
-         <a href="mod/mod_access.html#deny">Deny</a><br />
-         <a href="mod/mod_headers.html#Header">Header</a><br />
-         <a
-        href="mod/mod_log_config.html#logformat">LogFormat</a><br />
-         <a
-        href="mod/mod_rewrite.html#RewriteCond">RewriteCond</a><br />
-         <a
-        href="mod/mod_rewrite.html#RewriteRule">RewriteRule</a><br />
-         </td>
-      </tr>
-    </table>
-
-    <h3>CGI Scripts</h3>
-
-    <p>One of the primary uses of environment variables is to
-    communicate information to CGI scripts. As discussed above, the
-    environment passed to CGI scripts includes standard
-    meta-information about the request in addition to any variables
-    set within the Apache configuration. For more details, see the
-    <a href="howto/cgi.html">CGI tutorial</a>.</p>
-
-    <h3>SSI Pages</h3>
-
-    <p>Server-parsed (SSI) documents processed by mod_include's
-    <code>INCLUDES</code> filter can print environment variables
-    using the <code>echo</code> element, and can use environment
-    variables in flow control elements to makes parts of a page
-    conditional on characteristics of a request. Apache also
-    provides SSI pages with the standard CGI environment variables
-    as discussed above. For more details, see the <a
-    href="howto/ssi.html">SSI tutorial</a>.</p>
-
-    <h3>Access Control</h3>
-
-    <p>Access to the server can be controlled based on the value of
-    environment variables using the <code>allow from env=</code>
-    and <code>deny from env=</code> directives. In combination with
-    <code>SetEnvIf</code>, this allows for flexible control of
-    access to the server based on characteristics of the client.
-    For example, you can use these directives to deny access to a
-    particular browser (User-Agent).</p>
-
-    <h3>Conditional Logging</h3>
-
-    <p>Environment variables can be logged in the access log using
-    the <code>LogFormat</code> option <code>%e</code>. In addition,
-    the decision on whether or not to log requests can be made
-    based on the status of environment variables using the
-    conditional form of the <code>CustomLog</code> directive. In
-    combination with <code>SetEnvIf</code> this allows for flexible
-    control of which requests are logged. For example, you can
-    choose not to log requests for filenames ending in
-    <code>gif</code>, or you can choose to only log requests from
-    clients which are outside your subnet.</p>
-
-    <h3>Conditional Response Headers</h3>
-
-    <p>The <code>Header</code> directive can use the presence or
-    absence of an environment variable to determine whether or not
-    a certain HTTP header will be placed in the response to the
-    client. This allows, for example, a certain response header to
-    be sent only if a corresponding header is received in the
-    request from the client.</p>
-
-    <h3>URL Rewriting</h3>
-
-    <p>The <code>%{ENV:...}</code> form of <em>TestString</em> in
-    the <code>RewriteCond</code> allows mod_rewrite's rewrite
-    engine to make decisions conditional on environment variables.
-    Note that the variables accessible in mod_rewrite without the
-    <code>ENV:</code> prefix are not actually environment
-    variables. Rather, they are variables special to mod_rewrite
-    which cannot be accessed from other modules.</p>
-    <hr />
-
-    <h2><a id="special" name="special">Special Purpose Environment
-    Variables</a></h2>
-
-    <p>Interoperability problems have led to the introduction of
-    mechanisms to modify the way Apache behaves when talking to
-    particular clients. To make these mechanisms as flexible as
-    possible, they are invoked by defining environment variables,
-    typically with <a
-    href="mod/mod_setenvif.html#browsermatch">BrowserMatch</a>,
-    though <a href="mod/mod_env.html#setenv">SetEnv</a> and <a
-    href="mod/mod_env.html#passenv">PassEnv</a> could also be used,
-    for example.</p>
-
-    <h2>downgrade-1.0</h2>
-
-    <p>This forces the request to be treated as a HTTP/1.0 request
-    even if it was in a later dialect.</p>
-
-    <h2>force-no-vary</h2>
-
-    <p>This causes any <code>Vary</code> fields to be removed from
-    the response header before it is sent back to the client. Some
-    clients don't interpret this field correctly (see the <a
-    href="misc/known_client_problems.html">known client
-    problems</a> page); setting this variable can work around this
-    problem. Setting this variable also implies
-    <strong>force-response-1.0</strong>.</p>
-
-    <h2>force-response-1.0</h2>
-
-    <p>This forces an HTTP/1.0 response when set. It was originally
-    implemented as a result of a problem with AOL's proxies. Some
-    clients may not behave correctly when given an HTTP/1.1
-    response, and this can be used to interoperate with them.</p>
-
-    <h2>nokeepalive</h2>
-
-    <p>This disables <a
-    href="mod/core.html#keepalive">KeepAlive</a> when set.</p>
-
-    <h2>redirect-carefully</h2>
-
-    <p>This forces the server to be more careful when sending a redirect
-    to the client.  This is typically used when a client has a known
-    problem handling redirects.  This was originally implemented as a
-    result of a problem with Microsoft's WebFolders software which has
-    a problem handling redirects on directory resources via DAV 
-    methods.</p>
-
-    <hr />
-    <h2><a id="examples" name="examples">Examples</a></h2>
-
-    <h3>Changing protocol behavior with misbehaving clients</h3>
-
-    <p>We recommend that the following lines be included in
-    httpd.conf to deal with known client problems.</p>
-<pre>
-#
-# The following directives modify normal HTTP response behavior.
-# The first directive disables keepalive for Netscape 2.x and browsers that
-# spoof it. There are known problems with these browser implementations.
-# The second directive is for Microsoft Internet Explorer 4.0b2
-# which has a broken HTTP/1.1 implementation and does not properly
-# support keepalive when it is used on 301 or 302 (redirect) responses.
-#
-BrowserMatch "Mozilla/2" nokeepalive
-BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0
-
-#
-# The following directive disables HTTP/1.1 responses to browsers which
-# are in violation of the HTTP/1.0 spec by not being able to grok a
-# basic 1.1 response.
-#
-BrowserMatch "RealPlayer 4\.0" force-response-1.0
-BrowserMatch "Java/1\.0" force-response-1.0
-BrowserMatch "JDK/1\.0" force-response-1.0
-</pre>
-
-    <h3>Do not log requests for images in the access log</h3>
-
-    <p>This example keeps requests for images from appearing in the
-    access log. It can be easily modified to prevent logging of
-    particular directories, or to prevent logging of requests
-    coming from particular hosts.</p>
-<pre>
-    SetEnvIf Request_URI \.gif image-request
-    SetEnvIf Request_URI \.jpg image-request
-    SetEnvIf Request_URI \.png image-request
-    CustomLog logs/access_log env=!image-request
-</pre>
-
-    <h3>Prevent "Image Theft"</h3>
-
-    <p>This example shows how to keep people not on your server
-    from using images on your server as inline-images on their
-    pages. This is not a recommended configuration, but it can work
-    in limited circumstances. We assume that all your images are in
-    a directory called /web/images.</p>
-<pre>
-    SetEnvIf Referer "^http://www.example.com/" local_referal
-    # Allow browsers that do not send Referer info
-    SetEnvIf Referer "^$" local_referal
-    &lt;Directory /web/images&gt;
-       Order Deny,Allow
-       Deny from all
-       Allow from env=local_referal
-    &lt;/Directory&gt;
-</pre>
-
-    <p>For more information about this technique, see the
-    ApacheToday tutorial " <a
-    href="http://apachetoday.com/news_story.php3?ltsn=2000-06-14-002-01-PS">
-    Keeping Your Images from Adorning Other Sites</a>".</p>
-    <!--#include virtual="footer.html" -->
-  </body>
-</html>
-
diff --git a/docs/manual/expand.pl b/docs/manual/expand.pl
deleted file mode 100644
index 6dd66d1..0000000
--- a/docs/manual/expand.pl
+++ /dev/null
@@ -1,104 +0,0 @@
-#!/usr/bin/perl
-
-# This is a very simple Perl script to expand server-side includes
-# in the directory it is run, and direct subdirectories. It will
-# work only on SSI directives of the form
-#
-# <!--#include virtual="filename" -->
-#
-# Filename must be relative to the directory the file appears in.
-#
-# Nov 30, 1996 - Alexei Kosut <akosut@apache.org>
-
-# ====================================================================
-# The Apache Software License, Version 1.1
-#
-# Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
-# reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# 1. Redistributions of source code must retain the above copyright
-#    notice, this list of conditions and the following disclaimer.
-#
-# 2. Redistributions in binary form must reproduce the above copyright
-#    notice, this list of conditions and the following disclaimer in
-#    the documentation and/or other materials provided with the
-#    distribution.
-#
-# 3. The end-user documentation included with the redistribution,
-#    if any, must include the following acknowledgment:
-#       "This product includes software developed by the
-#        Apache Software Foundation (http://www.apache.org/)."
-#    Alternately, this acknowledgment may appear in the software itself,
-#    if and wherever such third-party acknowledgments normally appear.
-#
-# 4. The names "Apache" and "Apache Software Foundation" must
-#    not be used to endorse or promote products derived from this
-#    software without prior written permission. For written
-#    permission, please contact apache@apache.org.
-#
-# 5. Products derived from this software may not be called "Apache",
-#    nor may "Apache" appear in their name, without prior written
-#    permission of the Apache Software Foundation.
-#
-# THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
-# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-# DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
-# ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
-# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
-# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-# SUCH DAMAGE.
-# ====================================================================
-#
-# This software consists of voluntary contributions made by many
-# individuals on behalf of the Apache Software Foundation.  For more
-# information on the Apache Software Foundation, please see
-# <http://www.apache.org/>.
-#
-
-# Put a list of dirs (except ..) into @dirs
-
-opendir DIR, "." or die "Could not open directory: $!";
-@dirs = grep !/^\.\.$/, (grep -d, readdir DIR);
-closedir DIR;
-
-foreach $dir (@dirs) {
-    print "Entering directory $dir\n";
-    opendir SUBDIR, "$dir" or die "Could not open subdir $dir: $!";
-    foreach $file (grep /\.html(\.[^.]+)*$/, readdir SUBDIR) {
-	print "Expanding file $dir/$file\n";
-	rename "$dir/$file", "$dir/${file}.old";
-	open READ, "$dir/${file}.old" or die "Couldn't read $dir/$file: $!";
-	open WRITE, ">$dir/$file" or die "Couldn't write $dir/$file: $!";
-	while ($r = <READ>) {
-	    if ($r =~ /<!--#include virtual="(.*)" -->/) {
-		($pre, $include, $post) = ($`, $1, $');
-		print WRITE $pre;
-
-		open INC, "$dir/$include" or
-		    print "Could not include file $dir/$include: $!";
-		print WRITE while (<INC>);
-		close INC;
-
-		print WRITE $post;
-	    }
-	    else {
-		print WRITE $r;
-	    }
-	}
-	close READ;
-	close WRITE;
-	unlink "$dir/$file.old";
-    }
-    closedir SUBDIR;
-}
-
-
diff --git a/docs/manual/faq/footer.html b/docs/manual/faq/footer.html
deleted file mode 100644
index 54f6044..0000000
--- a/docs/manual/faq/footer.html
+++ /dev/null
@@ -1,6 +0,0 @@
-    <hr />
-
-    <h3 align="CENTER">Apache HTTP Server Version 2.0</h3>
-    <a href="./"><img src="../images/index.gif" alt="Index" /></a>
-    <a href="../"><img src="../images/home.gif" alt="Home" /></a>
-
diff --git a/docs/manual/faq/header.html b/docs/manual/faq/header.html
deleted file mode 100644
index cbdcb99..0000000
--- a/docs/manual/faq/header.html
+++ /dev/null
@@ -1,7 +0,0 @@
-    <div align="CENTER">
-      <img src="../images/sub.gif" alt="[APACHE DOCUMENTATION]" /> 
-
-      <h3>Apache HTTP Server Version 2.0</h3>
-    </div>
-
-
diff --git a/docs/manual/faq/index.html b/docs/manual/faq/index.html
deleted file mode 100644
index 5916e75..0000000
--- a/docs/manual/faq/index.html
+++ /dev/null
@@ -1,58 +0,0 @@
-<!--#if expr="$QUERY_STRING = ONEPAGE" -->
-<!--#set var="ONEPAGE" value="YES" -->
-<!--#else -->
-<!--#set var="ONEPAGE" value="" -->
-<!--#endif -->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta name="generator" content="HTML Tidy, see www.w3.org" />
-
-    <title>Apache Server Frequently Asked Questions</title>
-  </head>
-
-  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-  vlink="#000080" alink="#FF0000">
-    <!--#include virtual="header.html" -->
-
-    <h1 align="CENTER">Frequently Asked Questions</h1>
-
-    <p>The latest version of this FAQ is always available from the
-    main Apache web site, at &lt;<a
-    href="http://httpd.apache.org/docs-2.0/faq/"
-    rel="Help"><samp>http://httpd.apache.org/docs-2.0/faq/</samp></a>&gt;.
-    <!--#if expr="!$ONEPAGE" --> In addition, you can view this FAQ
-    <a href="./?ONEPAGE">all in one page</a> for easy searching and
-    printing.<!--#endif -->
-    </p>
-
-    <p>Since Apache 2.0 is very new, we don't yet know what the
-    <em>Frequently Asked Questions</em> will be. While this section
-    fills up, you should also consult the <a
-    href="http://httpd.apache.org/docs/misc/FAQ.html">Apache 1.3
-    FAQ</a> to see if your question is answered there.</p>
-
-    <h2>Categories</h2>
-    <!--#if expr="!$ONEPAGE" -->
-
-    <dl>
-      <dt><a href="support.html">Support</a></dt>
-
-      <dd>What do I do when I have problems?</dd>
-    </dl>
-    <!--#else -->
-
-    <dl>
-      <dt><a href="#support.html">Support</a></dt>
-
-      <dd>What do I do when I have problems?</dd>
-    </dl>
-    <hr />
-    <!--#include virtual="support.html" -->
-    <!--#endif -->
-    <!--#include virtual="footer.html" -->
-  </body>
-</html>
-
diff --git a/docs/manual/faq/support.html b/docs/manual/faq/support.html
deleted file mode 100644
index 1501ec7..0000000
--- a/docs/manual/faq/support.html
+++ /dev/null
@@ -1,159 +0,0 @@
-<!--#if expr="!$ONEPAGE" -->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta name="generator" content="HTML Tidy, see www.w3.org" />
-
-    <title>Support - Apache Server Frequently Asked
-    Questions</title>
-  </head>
-  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-
-  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-  vlink="#000080" alink="#FF0000">
-    <!--#include virtual="header.html" -->
-
-    <h1 align="CENTER">Frequently Asked Questions</h1>
-    <!--#endif -->
-
-    <h2><a id="support.html" name="support.html">Support</a></h2>
-
-    <ul>
-      <li><a href="#what2do">"Why can't I ...? Why won't ... work?"
-      What to do in case of problems</a></li>
-
-      <li><a href="#support">Whom do I contact for
-      support?</a></li>
-    </ul>
-    <hr />
-
-    <h3><a id="what2do" name="what2do">"Why can't I ...? Why won't
-    ... work?" What to do in case of problems</a></h3>
-
-    <p>If you are having trouble with your Apache server software,
-    you should take the following steps:</p>
-
-    <ol>
-      <li>
-        <strong>Check the errorlog!</strong> 
-
-        <p>Apache tries to be helpful when it encounters a problem.
-        In many cases, it will provide some details by writing one
-        or messages to the server error log. Sometimes this is
-        enough for you to diagnose &amp; fix the problem yourself
-        (such as file permissions or the like). The default
-        location of the error log is
-        <samp>/usr/local/apache2/logs/error_log</samp>, but see the
-        <a
-        href="../mod/core.html#errorlog"><samp>ErrorLog</samp></a>
-        directive in your config files for the location on your
-        server.</p>
-      </li>
-
-      <li>
-        <strong>Check the <a
-        href="http://httpd.apache.org/docs-2.0/faq/">FAQ</a>!</strong>
-        
-
-        <p>The latest version of the Apache Frequently-Asked
-        Questions list can always be found at the main Apache web
-        site.</p>
-      </li>
-
-      <li>
-        <strong>Check the Apache bug database</strong> 
-
-        <p>Most problems that get reported to The Apache Group are
-        recorded in the <a href="http://bugs.apache.org/">bug
-        database</a>. <em><strong>Please</strong> check the
-        existing reports, open <strong>and</strong> closed, before
-        adding one.</em> If you find that your issue has already
-        been reported, please <em>don't</em> add a "me, too"
-        report. If the original report isn't closed yet, we suggest
-        that you check it periodically. You might also consider
-        contacting the original submitter, because there may be an
-        email exchange going on about the issue that isn't getting
-        recorded in the database.</p>
-      </li>
-
-      <li>
-        <strong><a id="user-support" name="user-support">Ask in a
-        user support forum</a></strong> 
-
-        <p>Apache has an active community of users who are willing
-        to share their knowledge. Participating in this community
-        is usually the best and fastest way to get answers to your
-        questions and problems.</p>
-
-        <p><a href="http://httpd.apache.org/userslist.html">Users
-        mailing list</a></p>
-
-        <p>USENET newsgroups:</p>
-
-        <ul>
-          <li>comp.infosystems.www.servers.unix [<a
-          href="news:comp.infosystems.www.servers.unix">nntp</a>] [
-          <a
-          href="http://groups.google.com/groups?group=comp.infosystems.www.servers.unix">
-          google</a>]</li>
-
-          <li>comp.infosystems.www.servers.ms-windows [<a
-          href="news:comp.infosystems.www.servers.ms-windows">nntp</a>]
-          [ <a
-          href="http://groups.google.com/groups?group=comp.infosystems.www.servers.ms-windows">
-          google</a>]</li>
-
-          <li>comp.infosystems.www.authoring.cgi [<a
-          href="news:comp.infosystems.www.authoring.cgi">news</a>]
-          [ <a
-          href="http://groups.google.com/groups?group=comp.infosystems.www.authoring.cgi">
-          google</a>]</li>
-        </ul>
-
-      <li>
-        <strong>If all else fails, report the problem in the bug
-        database</strong> 
-
-        <p>If you've gone through those steps above that are
-        appropriate and have obtained no relief, then please
-        <em>do</em> let The Apache Group know about the problem by
-        <a href="http://httpd.apache.org/bug_report.html">logging a
-        bug report</a>.</p>
-
-        <p>If your problem involves the server crashing and
-        generating a core dump, please include a backtrace (if
-        possible). As an example,</p>
-
-        <dl>
-          <dd><code># cd <em>ServerRoot</em><br />
-           # dbx httpd core<br />
-           (dbx) where</code></dd>
-        </dl>
-
-        <p>(Substitute the appropriate locations for your
-        <samp>ServerRoot</samp> and your <samp>httpd</samp> and
-        <samp>core</samp> files. You may have to use
-        <code>gdb</code> instead of <code>dbx</code>.)</p>
-      </li>
-    </ol>
-    <hr />
-
-    <h3><a id="support" name="support">Whom do I contact for
-    support?</a></h3>
-
-    <p>With several million users and fewer than forty volunteer
-    developers, we cannot provide personal support for Apache. For
-    free support, we suggest participating in a <a
-    href="#user-support">user forum</a>.</p>
-
-    <p>Professional, commercial support for Apache is available
-    from <a href="http://www.apache.org/info/support.cgi">a number
-    of companies</a>.</p>
-    <!--#if expr="!$ONEPAGE" -->
-    <!--#include virtual="footer.html" -->
-    <!--#endif -->
-  </body>
-</html>
-
diff --git a/docs/manual/filter.html b/docs/manual/filter.html
deleted file mode 100644
index 9d17666..0000000
--- a/docs/manual/filter.html
+++ /dev/null
@@ -1,68 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta name="generator" content="HTML Tidy, see www.w3.org" />
-
-    <title>Filters - Apache HTTPD</title>
-  </head>
-  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-
-  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-  vlink="#000080" alink="#FF0000">
-    <!--#include virtual="header.html" -->
-
-    <h1 align="CENTER">Filters</h1>
-
-    <table border="1">
-      <tr>
-        <td valign="top"><strong>Related Modules</strong><br />
-         <br />
-         <a href="mod/mod_ext_filter.html">mod_ext_filter</a><br />
-         <a href="mod/mod_include.html">mod_include</a><br />
-         </td>
-
-        <td valign="top"><strong>Related Directives</strong><br />
-         <br />
-         <a
-        href="mod/mod_mime.html#addinputfilter">AddInputFilter</a><br />
-         <a
-        href="mod/mod_mime.html#addoutputfilter">AddOutputFilter</a><br />
-         <a
-        href="mod/mod_ext_filter.html#extfilterdefine">ExtFilterDefine</a><br />
-         <a
-        href="mod/mod_ext_filter.html#extfilteroptions">ExtFilterOptions</a><br />
-         <a
-        href="mod/core.html#setinputfilter">SetInputFilter</a><br />
-         <a
-        href="mod/core.html#setoutputfilter">SetOutputFilter</a><br />
-         </td>
-      </tr>
-    </table>
-
-    <p>A <em>filter</em> is a process which is applied to data that
-    is sent or received by the server. Data sent by clients to the
-    server is processed by <em>input filters</em> while data sent
-    by the server to the client is processed by <em>output
-    filters</em>. Multiple filters can be applied to the data, and
-    the order of the filters can be explicitly specified.</p>
-
-    <p>Filters are used internally by Apache to perform functions
-    such as chunking and byte-range request handling. In addition,
-    modules can provide filters which are selectable using run-time
-    configuration directives. The set of filters which apply to
-    data can be manipulated with the <code>SetInputFilter</code>
-    and <code>SetOutputFilter</code> directives.</p>
-
-    <p>The only configurable filter currently included with the
-    Apache distribution is the <code>INCLUDES</code> filter which
-    is provided by <a href="mod/mod_include.html">mod_include</a>
-    to process output for Server Side Includes. There is also an
-    experimental module called <a
-    href="mod/mod_ext_filter.html">mod_ext_filter</a> which allows
-    for external programs to be defined as filters.</p>
-    <!--#include virtual="footer.html" -->
-  </body>
-</html>
-
diff --git a/docs/manual/filter.html.en b/docs/manual/filter.html.en
deleted file mode 100644
index 9d17666..0000000
--- a/docs/manual/filter.html.en
+++ /dev/null
@@ -1,68 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta name="generator" content="HTML Tidy, see www.w3.org" />
-
-    <title>Filters - Apache HTTPD</title>
-  </head>
-  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-
-  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-  vlink="#000080" alink="#FF0000">
-    <!--#include virtual="header.html" -->
-
-    <h1 align="CENTER">Filters</h1>
-
-    <table border="1">
-      <tr>
-        <td valign="top"><strong>Related Modules</strong><br />
-         <br />
-         <a href="mod/mod_ext_filter.html">mod_ext_filter</a><br />
-         <a href="mod/mod_include.html">mod_include</a><br />
-         </td>
-
-        <td valign="top"><strong>Related Directives</strong><br />
-         <br />
-         <a
-        href="mod/mod_mime.html#addinputfilter">AddInputFilter</a><br />
-         <a
-        href="mod/mod_mime.html#addoutputfilter">AddOutputFilter</a><br />
-         <a
-        href="mod/mod_ext_filter.html#extfilterdefine">ExtFilterDefine</a><br />
-         <a
-        href="mod/mod_ext_filter.html#extfilteroptions">ExtFilterOptions</a><br />
-         <a
-        href="mod/core.html#setinputfilter">SetInputFilter</a><br />
-         <a
-        href="mod/core.html#setoutputfilter">SetOutputFilter</a><br />
-         </td>
-      </tr>
-    </table>
-
-    <p>A <em>filter</em> is a process which is applied to data that
-    is sent or received by the server. Data sent by clients to the
-    server is processed by <em>input filters</em> while data sent
-    by the server to the client is processed by <em>output
-    filters</em>. Multiple filters can be applied to the data, and
-    the order of the filters can be explicitly specified.</p>
-
-    <p>Filters are used internally by Apache to perform functions
-    such as chunking and byte-range request handling. In addition,
-    modules can provide filters which are selectable using run-time
-    configuration directives. The set of filters which apply to
-    data can be manipulated with the <code>SetInputFilter</code>
-    and <code>SetOutputFilter</code> directives.</p>
-
-    <p>The only configurable filter currently included with the
-    Apache distribution is the <code>INCLUDES</code> filter which
-    is provided by <a href="mod/mod_include.html">mod_include</a>
-    to process output for Server Side Includes. There is also an
-    experimental module called <a
-    href="mod/mod_ext_filter.html">mod_ext_filter</a> which allows
-    for external programs to be defined as filters.</p>
-    <!--#include virtual="footer.html" -->
-  </body>
-</html>
-
diff --git a/docs/manual/footer.html b/docs/manual/footer.html
deleted file mode 100644
index 48bfc2c..0000000
--- a/docs/manual/footer.html
+++ /dev/null
@@ -1,6 +0,0 @@
-    <hr />
-
-    <h3 align="CENTER">Apache HTTP Server Version 2.0</h3>
-    <a href="./"><img src="images/index.gif" alt="Index" /></a>
-
-
diff --git a/docs/manual/handler.html.en b/docs/manual/handler.html.en
deleted file mode 100644
index e243073..0000000
--- a/docs/manual/handler.html.en
+++ /dev/null
@@ -1,160 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta name="generator" content="HTML Tidy, see www.w3.org" />
-
-    <title>Apache's Handler Use</title>
-  </head>
-  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-
-  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-  vlink="#000080" alink="#FF0000">
-    <!--#include virtual="header.html" -->
-
-    <h1 align="CENTER">Apache's Handler Use</h1>
-
-    <ul>
-      <li><a href="#definition">What is a Handler</a></li>
-
-      <li><a href="#examples">Examples</a></li>
-
-      <li><a href="#programmer">Programmer's Note</a></li>
-    </ul>
-    <hr />
-
-    <h2><a id="definition" name="definition">What is a
-    Handler</a></h2>
-
-    <table border="1">
-      <tr>
-        <td valign="top"><strong>Related Modules</strong><br />
-         <br />
-         <a href="mod/mod_actions.html">mod_actions</a><br />
-         <a href="mod/mod_asis.html">mod_asis</a><br />
-         <a href="mod/mod_cgi.html">mod_cgi</a><br />
-         <a href="mod/mod_imap.html">mod_imap</a><br />
-         <a href="mod/mod_info.html">mod_info</a><br />
-         <a href="mod/mod_mime.html">mod_mime</a><br />
-         <a
-        href="mod/mod_negotiation.html">mod_negotiation</a><br />
-         <a href="mod/mod_status.html">mod_status</a><br />
-         </td>
-
-        <td valign="top"><strong>Related Directives</strong><br />
-         <br />
-         <a href="mod/mod_actions.html#action">Action</a><br />
-         <a
-        href="mod/mod_mime.html#addhandler">AddHandler</a><br />
-         <a
-        href="mod/mod_mime.html#removehandler">RemoveHandler</a><br />
-         <a
-        href="mod/mod_mime.html#sethandler">SetHandler</a><br />
-         </td>
-      </tr>
-    </table>
-
-    <p>A "handler" is an internal Apache representation of the
-    action to be performed when a file is called. Generally, files
-    have implicit handlers, based on the file type. Normally, all
-    files are simply served by the server, but certain file types
-    are "handled" separately.</p>
-
-    <p>Apache 1.1 adds the ability to use handlers explicitly.
-    Based on either filename extensions or on location, handlers
-    can be specified without relation to file type. This is
-    advantageous both because it is a more elegant solution, and
-    because it also allows for both a type <strong>and</strong> a
-    handler to be associated with a file. (See also <a
-    href="mod/mod_mime.html#multipleext">Files with Multiple
-    Extensions</a>.)</p>
-
-    <p>Handlers can either be built into the server or included in
-    a module, or they can be added with the <a
-    href="mod/mod_actions.html#action">Action</a> directive. The
-    built-in handlers in the standard distribution are as
-    follows:</p>
-
-    <ul>
-      <li><strong>default-handler</strong>: Send the file using the
-      <code>default_handler()</code>, which is the handler used by
-      default to handle static content. (core)</li>
-
-      <li><strong>send-as-is</strong>: Send file with HTTP headers
-      as is. (<a href="mod/mod_asis.html">mod_asis</a>)</li>
-
-      <li><strong>cgi-script</strong>: Treat the file as a CGI
-      script. (<a href="mod/mod_cgi.html">mod_cgi</a>)</li>
-
-      <li><strong>imap-file</strong>: Parse as an imagemap rule
-      file. (<a href="mod/mod_imap.html">mod_imap</a>)</li>
-
-      <li><strong>server-info</strong>: Get the server's
-      configuration information. (<a
-      href="mod/mod_info.html">mod_info</a>)</li>
-
-      <li><strong>server-status</strong>: Get the server's status
-      report. (<a href="mod/mod_status.html">mod_status</a>)</li>
-
-      <li><strong>type-map</strong>: Parse as a type map file for
-      content negotiation. (<a
-      href="mod/mod_negotiation.html">mod_negotiation</a>)</li>
-    </ul>
-    <hr />
-
-    <h2><a id="examples" name="examples">Examples</a></h2>
-
-    <h3>Modifying static content using a CGI script</h3>
-
-    <p>The following directives will cause requests for files with
-    the <code>html</code> extension to trigger the launch of the
-    <code>footer.pl</code> CGI script.</p>
-<pre>
-     Action add-footer /cgi-bin/footer.pl
-     AddHandler add-footer .html
-</pre>
-
-    <p>Then the CGI script is responsible for sending the
-    originally requested document (pointed to by the
-    <code>PATH_TRANSLATED</code> environment variable) and making
-    whatever modifications or additions are desired.</p>
-
-    <h3>Files with HTTP headers</h3>
-
-    <p>The following directives will enable the
-    <code>send-as-is</code> handler, which is used for files which
-    contain their own HTTP headers. All files in the
-    <code>/web/htdocs/asis/</code> directory will be processed by
-    the <code>send-as-is</code> handler, regardless of their
-    filename extensions.</p>
-<pre>
-    &lt;Directory /web/htdocs/asis&gt;
-    SetHandler send-as-is
-    &lt;/Directory&gt;
-</pre>
-    <hr />
-
-    <h2><a id="programmer" name="programmer">Programmer's
-    Note</a></h2>
-
-    <p>In order to implement the handler features, an addition has
-    been made to the <a href="misc/API.html">Apache API</a> that
-    you may wish to make use of. Specifically, a new record has
-    been added to the <code>request_rec</code> structure:</p>
-<pre>
-    char *handler
-</pre>
-
-    <p>If you wish to have your module engage a handler, you need
-    only to set <code>r-&gt;handler</code> to the name of the
-    handler at any time prior to the <code>invoke_handler</code>
-    stage of the request. Handlers are implemented as they were
-    before, albeit using the handler name instead of a content
-    type. While it is not necessary, the naming convention for
-    handlers is to use a dash-separated word, with no slashes, so
-    as to not invade the media type name-space.</p>
-    <!--#include virtual="footer.html" -->
-  </body>
-</html>
-
diff --git a/docs/manual/handler.html.ja.jis b/docs/manual/handler.html.ja.jis
deleted file mode 100644
index d00827f..0000000
--- a/docs/manual/handler.html.ja.jis
+++ /dev/null
@@ -1,39 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta name="generator" content="HTML Tidy, see www.w3.org" />
-
-    <title>Apache &#27;$B$N%O%s%I%i$N;HMQ&#27;(B</title>
-  </head>
-  <!-- English revision: 1.22 -->
-  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-
-  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-  vlink="#000080" alink="#FF0000">
-    <!--#include virtual="header.html" -->
-
-    <h1 align="CENTER">Apache &#27;$B$N%O%s%I%i$N;HMQ&#27;(B</h1>
-
-    <ul>
-      <li><a href="#definition">&#27;$B%O%s%I%i$H$O&#27;(B</a></li>
-
-      <li><a href="#examples">&#27;$BNc&#27;(B</a></li>
-
-      <li><a
-      href="#programmer">&#27;$B%W%m%0%i%^8~$1$N%a%b&#27;(B</a></li>
-    </ul>
-    <hr />
-
-    <h2><a id="definition"
-    name="definition">&#27;$B%O%s%I%i$H$O&#27;(B</a></h2>
-
-    <table border="1">
-      <tr>
-        <td valign="top"><strong>&#27;$B4XO"%b%8%e!</strong></td>
-      </tr>
-    </table>
-  </body>
-</html>
-
diff --git a/docs/manual/header.html b/docs/manual/header.html
deleted file mode 100644
index 040cd98..0000000
--- a/docs/manual/header.html
+++ /dev/null
@@ -1,7 +0,0 @@
-    <div align="CENTER">
-      <img src="images/sub.gif" alt="[APACHE DOCUMENTATION]" /> 
-
-      <h3>Apache HTTP Server Version 2.0</h3>
-    </div>
-
-
diff --git a/docs/manual/howto/auth.html b/docs/manual/howto/auth.html
deleted file mode 100644
index ca7cedb..0000000
--- a/docs/manual/howto/auth.html
+++ /dev/null
@@ -1,379 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta name="generator" content="HTML Tidy, see www.w3.org" />
-
-    <title>Authentication</title>
-    <link rev="made" href="mailto:rbowen@rcbowen.com" />
-  </head>
-  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-
-  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-  vlink="#000080" alink="#FF0000">
-    <!--#include virtual="header.html" -->
-
-    <h1 align="center">Authentication</h1>
-    <a id="__index__" name="__index__"></a> <!-- INDEX BEGIN -->
-     
-
-    <ul>
-      <li><a href="#introduction">Introduction</a></li>
-
-      <li><a href="#theprerequisites">The prerequisites</a></li>
-
-      <li><a href="#gettingitworking">Getting it working</a></li>
-
-      <li><a href="#lettingmorethanonepersonin">Letting more
-      than one person in</a></li>
-
-      <li><a href="#possibleproblems">Possible problems</a></li>
-
-      <li><a href="#whatotherneatstuffcanido">What other neat
-      stuff can I do?</a></li>
-
-      <li><a href="#moreinformation">More information</a></li>
-    </ul>
-    <!-- INDEX END -->
-    <hr />
-
-    <table border="1">
-      <tr>
-        <td valign="top"><strong>Related Modules</strong><br />
-         <br />
-         <a href="../mod/mod_auth.html">mod_auth</a><br />
-         <a href="../mod/mod_access.html">mod_access</a><br />
-         </td>
-
-        <td valign="top"><strong>Related Directives</strong><br />
-         <br />
-         <a href="../mod/mod_access.html#allow">Allow</a><br />
-         <a
-        href="../mod/mod_auth.html#authgroupfile">AuthGroupFile</a><br />
-         <a href="../mod/core.html#authname">AuthName</a><br />
-         <a href="../mod/core.html#authtype">AuthType</a><br />
-         <a
-        href="../mod/mod_auth.html#authuserfile">AuthUserFile</a><br />
-         <a href="../mod/mod_access.html#deny">Deny</a><br />
-         <a href="../mod/core.html#options">Options</a><br />
-         <a href="../mod/core.html#require">Require</a><br />
-         </td>
-      </tr>
-    </table>
-
-    <h1><a id="authentication"
-    name="authentication">Authentication</a></h1>
-
-    <p>Authentication is any process by which you verify that
-    someone is who they claim they are. Authorization is any
-    process by which someone is allowed to be where they want to
-    go, or to have information that they want to have.</p>
-
-    <h2><a id="introduction"
-    name="introduction">Introduction</a></h2>
-
-    <p>If you have information on your web site that is sensitive
-    or intended for only a small group of people, the techniques in
-    this article will help you make sure that the people that see
-    those pages are the people that you wanted to see them.</p>
-
-    <p>This article covers the "standard" way of protecting parts
-    of your web site that most of you are going to use.</p>
-
-    <h2><a id="theprerequisites" name="theprerequisites">The
-    prerequisites</a></h2>
-
-    <p>The directives discussed in this article will need to go
-    either in your main server configuration file (typically in a
-    &lt;Directory&gt; section), or in per-directory configuration
-    files (<code>.htaccess</code> files).</p>
-
-    <p>If you plan to use <code>.htaccess</code> files, you will
-    need to have a server configuration that permits putting
-    authentication directives in these files. This is done with the
-    <code><a
-    href="../mod/core.html#allowoverride">AllowOverride</a></code>
-    directive, which specifies which directives, if any, may be put
-    in per-directory configuration files.</p>
-
-    <p>Since we're talking here about authentication, you will need
-    an <code>AllowOverride</code> directive like the following:</p>
-<pre>
-    AllowOverride AuthConfig
-</pre>
-
-    <p>Or, if you are just going to put the directives directly in
-    your main server configuration file, you will of course need to
-    have write permission to that file.</p>
-
-    <p>And you'll need to know a little bit about the directory
-    structure of your server, in order to know where some files are
-    kept. This should not be terribly difficult, and I'll try to
-    make this clear when we come to that point.</p>
-
-    <h2><a id="gettingitworking"
-    name="gettingitworking">Getting it working</a></h2>
-
-    <p>Here's the basics of password protecting a directory on your
-    server.</p>
-
-    <p>You'll need to create a password file. This file should be
-    placed somewhere not accessible from the web. This is so that
-    folks cannot download the password file. For example, if your
-    documents are served out of
-    <code>/usr/local/apache/htdocs</code> you might want to put the
-    password file(s) in <code>/usr/local/apache/passwd</code>.</p>
-
-    <p>To create the file, use the <a
-    href="../programs/htpasswd.html">htpasswd</a> utility that came
-    with Apache. This be located in the <code>bin</code> directory
-    of wherever you installed Apache. To create the file, type:</p>
-<pre>
-        htpasswd -c /usr/local/apache/passwd/password rbowen
-</pre>
-
-    <p><code>htpasswd</code> will ask you for the password, and
-    then ask you to type it again to confirm it:</p>
-<pre>
-        # htpasswd -c /usr/local/apache/passwd/passwords rbowen
-        New password: mypassword
-        Re-type new password: mypassword
-        Adding password for user rbowen
-</pre>
-
-    <p>If <code>htpasswd</code> is not in your path, of course
-    you'll have to type the full path to the file to get it to run.
-    On my server, it's located at
-    <code>/usr/local/apache/bin/htpasswd</code></p>
-
-    <p>Next, you'll need to configure the server to request a
-    password and tell the server which users are allowed access.
-    You can do this either by editing the <code>httpd.conf</code>
-    file or using an <code>.htaccess</code> file. For example, if
-    you wish to protect the directory
-    <code>/usr/local/apache/htdocs/secret</code>, you can use the
-    following directives, either placed in the file
-    <code>/usr/local/apache/htdocs/secret/.htaccess</code>, or
-    placed in httpd.conf inside a &lt;Directory
-    /usr/local/apache/apache/htdocs/secret&gt; section.</p>
-<pre>
-        AuthType Basic
-        AuthName "Restricted Files"
-        AuthUserFile /usr/local/apache/passwd/passwords
-        require user rbowen
-</pre>
-
-    <p>Let's examine each of those directives individually. The <a
-    href="../mod/core.html#authtype">AuthType</a> directive selects
-    that method that is used to authenticate the user. The most
-    common method is <code>Basic</code>, and this is the method
-    implemented by <a href="../mod/mod_auth.html">mod_auth</a>. It
-    is important to be aware, however, that Basic authentication
-    sends the password from the client to the browser unencrypted.
-    This method should therefore not be used for highly sensitive
-    data. Apache supports one other authentication method:
-    <code>AuthType Digest</code>. This method is implemented by <a
-    href="../mod/mod_auth_digest.html">mod_auth_digest</a> and is
-    much more secure. Only the most recent versions of clients are
-    known to support Digest authentication.</p>
-
-    <p>The <a href="../mod/core.html#authname">AuthName</a>
-    directive sets the <em>Realm</em> to be used in the
-    authentication. The realm serves two major functions. First,
-    the client often presents this information to the user as part
-    of the password dialog box. Second, it is used by the client to
-    determine what password to send for a given authenticated area.
-    So, for example, once a client has authenticated in the
-    <code>"Restricted Files"</code> area, it will automatically
-    retry the same password for any area on the same server that is
-    marked with the <code>"Restricted Files"</code> Realm.
-    Therefore, you can prevent a user from being prompted more than
-    once for a password by letting multiple restricted areas share
-    the same realm. Of course, for security reasons, the client
-    will always need to ask again for the password whenever the
-    hostname of the server changes.</p>
-
-    <p>The <a
-    href="../mod/mod_auth.html#authuserfile">AuthUserFile</a>
-    directive sets the path to the password file that we just
-    created with <code>htpasswd</code>. If you have a large number
-    of users, it can be quite slow to search through a plain text
-    file to authenticate the user on each request. Apache also has
-    the ability to store user information in fast database files.
-    The <a href="../mod/mod_auth_dbm.html">mod_auth_dbm</a> module
-    provides the <a
-    href="../mod/mod_auth_dbm.html#authdbmuserfile">AuthDBMUserFile</a>
-    directive. These files can be created and
-    manipulated with the <a
-    href="../programs/dbmmanage.html">dbmmanage</a> program. Many
-    other types of authentication options are available from third
-    party modules in the <a
-    href="http://modules.apache.org/">Apache Modules
-    Database</a>.</p>
-
-    <p>Finally, the <a href="../mod/core.html#require">require</a>
-    directive provides the authorization part of the process by
-    setting the user that is allowed to access this region of the
-    server. In the next section, we discuss various ways to use the
-    <code>require</code> directive.</p>
-
-    <h2><a id="lettingmorethanonepersonin"
-    name="lettingmorethanonepersonin">Letting more than one
-    person in</a></h2>
-
-    <p>The directives above only let one person (specifically
-    someone with a username of <code>rbowen</code>) into the
-    directory. In most cases, you'll want to let more than one
-    person in. This is where the <a
-    href="../mod/mod_auth.html#authgroupfile">AuthGroupFile</a>
-    comes in.</p>
-
-    <p>If you want to let more than one person in, you'll need to
-    create a group file that associates group names with a list of
-    users in that group. The format of this file is pretty simple,
-    and you can create it with your favorite editor. The contents
-    of the file will look like this:</p>
-<pre>
-        GroupName: rbowen dpitts sungo rshersey
-</pre>
-
-    <p>That's just a list of the members of the group in a long
-    line separated by spaces.</p>
-
-    <p>To add a user to your already existing password file,
-    type:</p>
-<pre>
-        htpasswd /usr/local/apache/passwd/password dpitts
-</pre>
-
-    <p>You'll get the same response as before, but it will be
-    appended to the existing file, rather than creating a new file.
-    (It's the <code>-c</code> that makes it create a new password
-    file.</p>
-
-    <p>Now, you need to modify your <code>.htaccess</code> file to
-    look like the following:</p>
-<pre>
-        AuthType Basic
-        AuthName "By Invitation Only"
-        AuthUserFile /usr/local/apache/passwd/passwords
-        AuthGroupFile /usr/local/apache/passwd/groups
-        require group GroupName
-</pre>
-
-    <p>Now, anyone that is listed in the group
-    <code>GroupName</code>, and has an entry in the
-    <code>password</code> file, will be let in, if they type the
-    correct password.</p>
-
-    <p>There's another way to let multiple users in that is less
-    specific. Rather than creating a group file, you can just use
-    the following directive:</p>
-<pre>
-        require valid-user
-</pre>
-
-    <p>Using that rather than the <code>require user rbowen</code>
-    line will allow anyone in that is listed in the password file,
-    and who correctly enters their password. You can even emulate
-    the group behavior here, by just keeping a separate password
-    file for each group. The advantage of this approach is that
-    Apache only has to check one file, rather than two. The
-    disadvantage is that you have to maintain a bunch of password
-    files, and remember to reference th right one in the
-    <code>AuthUserFile</code> directive.</p>
-
-    <h2><a id="possibleproblems" name="possibleproblems">Possible
-    problems</a></h2>
-
-    <p>Because of the way that Basic authentication is specified,
-    your username and password must be verified every time you
-    request a document from the server. This is even if you're
-    reloading the same page, and for every image on the page (if
-    they come from a protected directory). As you can imagine, this
-    slows things down a little. The amount that it slows things
-    down is proportional to the size of the password file, because
-    it has to open up that file, and go down the list of users
-    until it gets to your name. And it has to do this every time a
-    page is loaded.</p>
-
-    <p>A consequence of this is that there's a practical limit to
-    how many users you can put in one password file. This limit
-    will vary depending on the performance of your particular
-    server machine, but you can expect to see slowdowns once you
-    get above a few hundred entries, and may wish to consider a
-    different authentication method at that time.</p>
-
-    <h2><a id="whatotherneatstuffcanido"
-    name="whatotherneatstuffcanido">What other neat stuff can
-    I do?</a></h2>
-
-    <p>Authentication by username and password is only part of the
-    story. Frequently you want to let people in based on something
-    other than who they are. Something such as where they are
-    coming from.</p>
-
-    <p>The <code>allow</code> and <code>deny</code> directives let
-    you allow and deny access based on the host name, or host
-    address, of the machine requesting a document. The
-    <code>order</code> directive goes hand-in-hand with these two,
-    and tells Apache in which order to apply the filters.</p>
-
-    <p>The usage of these directives is:</p>
-<pre>
-        allow from address
-</pre>
-
-    <p>where <em>address</em> is an IP address (or a partial IP
-    address) or a fully qualified domain name (or a partial domain
-    name); you may provide multiple addresses or domain names, if
-    desired.</p>
-
-    <p>For example, if you have someone spamming your message
-    board, and you want to keep them out, you could do the
-    following:</p>
-<pre>
-        deny from 205.252.46.165
-</pre>
-
-    <p>Visitors coming from that address will not be able to see
-    the content covered by this directive. If, instead, you have a
-    machine name, rather than an IP address, you can use that.</p>
-<pre>
-        deny from host.example.com
-</pre>
-
-    <p>And, if you'd like to block access from an entire domain,
-    you can specify just part of an address or domain name:</p>
-<pre>
-        deny from 192.101.205
-        deny from cyberthugs.com moreidiots.com
-        deny from ke
-</pre>
-
-    <p>Using <code>order</code> will let you be sure that you are
-    actually restricting things to the group that you want to let
-    in, by combining a <code>deny</code> and an <code>allow</code>
-    directive:</p>
-<pre>
-        order deny,allow
-        deny from all
-        allow from dev.example.com
-</pre>
-
-    <p>Listing just the <code>allow</code> directive would not do
-    what you want, because it will let folks from that host in, in
-    addition to letting everyone in. What you want is to let
-    <em>only</em> those folks in.</p>
-
-    <h2><a id="moreinformation" name="moreinformation">More
-    information</a></h2>
-
-    <p>You should also read the documentation for <code><a
-    href="../mod/mod_auth.html">mod_auth</a></code> and <code><a
-    href="../mod/mod_access.html">mod_access</a></code> which
-    contain some more information about how this all works.</p>
-  </body>
-</html>
-
diff --git a/docs/manual/howto/auth.html.en b/docs/manual/howto/auth.html.en
deleted file mode 100644
index ca7cedb..0000000
--- a/docs/manual/howto/auth.html.en
+++ /dev/null
@@ -1,379 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta name="generator" content="HTML Tidy, see www.w3.org" />
-
-    <title>Authentication</title>
-    <link rev="made" href="mailto:rbowen@rcbowen.com" />
-  </head>
-  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-
-  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-  vlink="#000080" alink="#FF0000">
-    <!--#include virtual="header.html" -->
-
-    <h1 align="center">Authentication</h1>
-    <a id="__index__" name="__index__"></a> <!-- INDEX BEGIN -->
-     
-
-    <ul>
-      <li><a href="#introduction">Introduction</a></li>
-
-      <li><a href="#theprerequisites">The prerequisites</a></li>
-
-      <li><a href="#gettingitworking">Getting it working</a></li>
-
-      <li><a href="#lettingmorethanonepersonin">Letting more
-      than one person in</a></li>
-
-      <li><a href="#possibleproblems">Possible problems</a></li>
-
-      <li><a href="#whatotherneatstuffcanido">What other neat
-      stuff can I do?</a></li>
-
-      <li><a href="#moreinformation">More information</a></li>
-    </ul>
-    <!-- INDEX END -->
-    <hr />
-
-    <table border="1">
-      <tr>
-        <td valign="top"><strong>Related Modules</strong><br />
-         <br />
-         <a href="../mod/mod_auth.html">mod_auth</a><br />
-         <a href="../mod/mod_access.html">mod_access</a><br />
-         </td>
-
-        <td valign="top"><strong>Related Directives</strong><br />
-         <br />
-         <a href="../mod/mod_access.html#allow">Allow</a><br />
-         <a
-        href="../mod/mod_auth.html#authgroupfile">AuthGroupFile</a><br />
-         <a href="../mod/core.html#authname">AuthName</a><br />
-         <a href="../mod/core.html#authtype">AuthType</a><br />
-         <a
-        href="../mod/mod_auth.html#authuserfile">AuthUserFile</a><br />
-         <a href="../mod/mod_access.html#deny">Deny</a><br />
-         <a href="../mod/core.html#options">Options</a><br />
-         <a href="../mod/core.html#require">Require</a><br />
-         </td>
-      </tr>
-    </table>
-
-    <h1><a id="authentication"
-    name="authentication">Authentication</a></h1>
-
-    <p>Authentication is any process by which you verify that
-    someone is who they claim they are. Authorization is any
-    process by which someone is allowed to be where they want to
-    go, or to have information that they want to have.</p>
-
-    <h2><a id="introduction"
-    name="introduction">Introduction</a></h2>
-
-    <p>If you have information on your web site that is sensitive
-    or intended for only a small group of people, the techniques in
-    this article will help you make sure that the people that see
-    those pages are the people that you wanted to see them.</p>
-
-    <p>This article covers the "standard" way of protecting parts
-    of your web site that most of you are going to use.</p>
-
-    <h2><a id="theprerequisites" name="theprerequisites">The
-    prerequisites</a></h2>
-
-    <p>The directives discussed in this article will need to go
-    either in your main server configuration file (typically in a
-    &lt;Directory&gt; section), or in per-directory configuration
-    files (<code>.htaccess</code> files).</p>
-
-    <p>If you plan to use <code>.htaccess</code> files, you will
-    need to have a server configuration that permits putting
-    authentication directives in these files. This is done with the
-    <code><a
-    href="../mod/core.html#allowoverride">AllowOverride</a></code>
-    directive, which specifies which directives, if any, may be put
-    in per-directory configuration files.</p>
-
-    <p>Since we're talking here about authentication, you will need
-    an <code>AllowOverride</code> directive like the following:</p>
-<pre>
-    AllowOverride AuthConfig
-</pre>
-
-    <p>Or, if you are just going to put the directives directly in
-    your main server configuration file, you will of course need to
-    have write permission to that file.</p>
-
-    <p>And you'll need to know a little bit about the directory
-    structure of your server, in order to know where some files are
-    kept. This should not be terribly difficult, and I'll try to
-    make this clear when we come to that point.</p>
-
-    <h2><a id="gettingitworking"
-    name="gettingitworking">Getting it working</a></h2>
-
-    <p>Here's the basics of password protecting a directory on your
-    server.</p>
-
-    <p>You'll need to create a password file. This file should be
-    placed somewhere not accessible from the web. This is so that
-    folks cannot download the password file. For example, if your
-    documents are served out of
-    <code>/usr/local/apache/htdocs</code> you might want to put the
-    password file(s) in <code>/usr/local/apache/passwd</code>.</p>
-
-    <p>To create the file, use the <a
-    href="../programs/htpasswd.html">htpasswd</a> utility that came
-    with Apache. This be located in the <code>bin</code> directory
-    of wherever you installed Apache. To create the file, type:</p>
-<pre>
-        htpasswd -c /usr/local/apache/passwd/password rbowen
-</pre>
-
-    <p><code>htpasswd</code> will ask you for the password, and
-    then ask you to type it again to confirm it:</p>
-<pre>
-        # htpasswd -c /usr/local/apache/passwd/passwords rbowen
-        New password: mypassword
-        Re-type new password: mypassword
-        Adding password for user rbowen
-</pre>
-
-    <p>If <code>htpasswd</code> is not in your path, of course
-    you'll have to type the full path to the file to get it to run.
-    On my server, it's located at
-    <code>/usr/local/apache/bin/htpasswd</code></p>
-
-    <p>Next, you'll need to configure the server to request a
-    password and tell the server which users are allowed access.
-    You can do this either by editing the <code>httpd.conf</code>
-    file or using an <code>.htaccess</code> file. For example, if
-    you wish to protect the directory
-    <code>/usr/local/apache/htdocs/secret</code>, you can use the
-    following directives, either placed in the file
-    <code>/usr/local/apache/htdocs/secret/.htaccess</code>, or
-    placed in httpd.conf inside a &lt;Directory
-    /usr/local/apache/apache/htdocs/secret&gt; section.</p>
-<pre>
-        AuthType Basic
-        AuthName "Restricted Files"
-        AuthUserFile /usr/local/apache/passwd/passwords
-        require user rbowen
-</pre>
-
-    <p>Let's examine each of those directives individually. The <a
-    href="../mod/core.html#authtype">AuthType</a> directive selects
-    that method that is used to authenticate the user. The most
-    common method is <code>Basic</code>, and this is the method
-    implemented by <a href="../mod/mod_auth.html">mod_auth</a>. It
-    is important to be aware, however, that Basic authentication
-    sends the password from the client to the browser unencrypted.
-    This method should therefore not be used for highly sensitive
-    data. Apache supports one other authentication method:
-    <code>AuthType Digest</code>. This method is implemented by <a
-    href="../mod/mod_auth_digest.html">mod_auth_digest</a> and is
-    much more secure. Only the most recent versions of clients are
-    known to support Digest authentication.</p>
-
-    <p>The <a href="../mod/core.html#authname">AuthName</a>
-    directive sets the <em>Realm</em> to be used in the
-    authentication. The realm serves two major functions. First,
-    the client often presents this information to the user as part
-    of the password dialog box. Second, it is used by the client to
-    determine what password to send for a given authenticated area.
-    So, for example, once a client has authenticated in the
-    <code>"Restricted Files"</code> area, it will automatically
-    retry the same password for any area on the same server that is
-    marked with the <code>"Restricted Files"</code> Realm.
-    Therefore, you can prevent a user from being prompted more than
-    once for a password by letting multiple restricted areas share
-    the same realm. Of course, for security reasons, the client
-    will always need to ask again for the password whenever the
-    hostname of the server changes.</p>
-
-    <p>The <a
-    href="../mod/mod_auth.html#authuserfile">AuthUserFile</a>
-    directive sets the path to the password file that we just
-    created with <code>htpasswd</code>. If you have a large number
-    of users, it can be quite slow to search through a plain text
-    file to authenticate the user on each request. Apache also has
-    the ability to store user information in fast database files.
-    The <a href="../mod/mod_auth_dbm.html">mod_auth_dbm</a> module
-    provides the <a
-    href="../mod/mod_auth_dbm.html#authdbmuserfile">AuthDBMUserFile</a>
-    directive. These files can be created and
-    manipulated with the <a
-    href="../programs/dbmmanage.html">dbmmanage</a> program. Many
-    other types of authentication options are available from third
-    party modules in the <a
-    href="http://modules.apache.org/">Apache Modules
-    Database</a>.</p>
-
-    <p>Finally, the <a href="../mod/core.html#require">require</a>
-    directive provides the authorization part of the process by
-    setting the user that is allowed to access this region of the
-    server. In the next section, we discuss various ways to use the
-    <code>require</code> directive.</p>
-
-    <h2><a id="lettingmorethanonepersonin"
-    name="lettingmorethanonepersonin">Letting more than one
-    person in</a></h2>
-
-    <p>The directives above only let one person (specifically
-    someone with a username of <code>rbowen</code>) into the
-    directory. In most cases, you'll want to let more than one
-    person in. This is where the <a
-    href="../mod/mod_auth.html#authgroupfile">AuthGroupFile</a>
-    comes in.</p>
-
-    <p>If you want to let more than one person in, you'll need to
-    create a group file that associates group names with a list of
-    users in that group. The format of this file is pretty simple,
-    and you can create it with your favorite editor. The contents
-    of the file will look like this:</p>
-<pre>
-        GroupName: rbowen dpitts sungo rshersey
-</pre>
-
-    <p>That's just a list of the members of the group in a long
-    line separated by spaces.</p>
-
-    <p>To add a user to your already existing password file,
-    type:</p>
-<pre>
-        htpasswd /usr/local/apache/passwd/password dpitts
-</pre>
-
-    <p>You'll get the same response as before, but it will be
-    appended to the existing file, rather than creating a new file.
-    (It's the <code>-c</code> that makes it create a new password
-    file.</p>
-
-    <p>Now, you need to modify your <code>.htaccess</code> file to
-    look like the following:</p>
-<pre>
-        AuthType Basic
-        AuthName "By Invitation Only"
-        AuthUserFile /usr/local/apache/passwd/passwords
-        AuthGroupFile /usr/local/apache/passwd/groups
-        require group GroupName
-</pre>
-
-    <p>Now, anyone that is listed in the group
-    <code>GroupName</code>, and has an entry in the
-    <code>password</code> file, will be let in, if they type the
-    correct password.</p>
-
-    <p>There's another way to let multiple users in that is less
-    specific. Rather than creating a group file, you can just use
-    the following directive:</p>
-<pre>
-        require valid-user
-</pre>
-
-    <p>Using that rather than the <code>require user rbowen</code>
-    line will allow anyone in that is listed in the password file,
-    and who correctly enters their password. You can even emulate
-    the group behavior here, by just keeping a separate password
-    file for each group. The advantage of this approach is that
-    Apache only has to check one file, rather than two. The
-    disadvantage is that you have to maintain a bunch of password
-    files, and remember to reference th right one in the
-    <code>AuthUserFile</code> directive.</p>
-
-    <h2><a id="possibleproblems" name="possibleproblems">Possible
-    problems</a></h2>
-
-    <p>Because of the way that Basic authentication is specified,
-    your username and password must be verified every time you
-    request a document from the server. This is even if you're
-    reloading the same page, and for every image on the page (if
-    they come from a protected directory). As you can imagine, this
-    slows things down a little. The amount that it slows things
-    down is proportional to the size of the password file, because
-    it has to open up that file, and go down the list of users
-    until it gets to your name. And it has to do this every time a
-    page is loaded.</p>
-
-    <p>A consequence of this is that there's a practical limit to
-    how many users you can put in one password file. This limit
-    will vary depending on the performance of your particular
-    server machine, but you can expect to see slowdowns once you
-    get above a few hundred entries, and may wish to consider a
-    different authentication method at that time.</p>
-
-    <h2><a id="whatotherneatstuffcanido"
-    name="whatotherneatstuffcanido">What other neat stuff can
-    I do?</a></h2>
-
-    <p>Authentication by username and password is only part of the
-    story. Frequently you want to let people in based on something
-    other than who they are. Something such as where they are
-    coming from.</p>
-
-    <p>The <code>allow</code> and <code>deny</code> directives let
-    you allow and deny access based on the host name, or host
-    address, of the machine requesting a document. The
-    <code>order</code> directive goes hand-in-hand with these two,
-    and tells Apache in which order to apply the filters.</p>
-
-    <p>The usage of these directives is:</p>
-<pre>
-        allow from address
-</pre>
-
-    <p>where <em>address</em> is an IP address (or a partial IP
-    address) or a fully qualified domain name (or a partial domain
-    name); you may provide multiple addresses or domain names, if
-    desired.</p>
-
-    <p>For example, if you have someone spamming your message
-    board, and you want to keep them out, you could do the
-    following:</p>
-<pre>
-        deny from 205.252.46.165
-</pre>
-
-    <p>Visitors coming from that address will not be able to see
-    the content covered by this directive. If, instead, you have a
-    machine name, rather than an IP address, you can use that.</p>
-<pre>
-        deny from host.example.com
-</pre>
-
-    <p>And, if you'd like to block access from an entire domain,
-    you can specify just part of an address or domain name:</p>
-<pre>
-        deny from 192.101.205
-        deny from cyberthugs.com moreidiots.com
-        deny from ke
-</pre>
-
-    <p>Using <code>order</code> will let you be sure that you are
-    actually restricting things to the group that you want to let
-    in, by combining a <code>deny</code> and an <code>allow</code>
-    directive:</p>
-<pre>
-        order deny,allow
-        deny from all
-        allow from dev.example.com
-</pre>
-
-    <p>Listing just the <code>allow</code> directive would not do
-    what you want, because it will let folks from that host in, in
-    addition to letting everyone in. What you want is to let
-    <em>only</em> those folks in.</p>
-
-    <h2><a id="moreinformation" name="moreinformation">More
-    information</a></h2>
-
-    <p>You should also read the documentation for <code><a
-    href="../mod/mod_auth.html">mod_auth</a></code> and <code><a
-    href="../mod/mod_access.html">mod_access</a></code> which
-    contain some more information about how this all works.</p>
-  </body>
-</html>
-
diff --git a/docs/manual/howto/cgi.html.en b/docs/manual/howto/cgi.html.en
deleted file mode 100644
index 8d80d53..0000000
--- a/docs/manual/howto/cgi.html.en
+++ /dev/null
@@ -1,552 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta name="generator" content="HTML Tidy, see www.w3.org" />
-
-    <title>Apache Tutorial: Dynamic Content with CGI</title>
-    <link rev="made" href="mailto:rbowen@rcbowen.com" />
-  </head>
-  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-
-  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-  vlink="#000080" alink="#FF0000">
-    <!--#include virtual="header.html" -->
-
-    <h1 align="CENTER">Dynamic Content with CGI</h1>
-    <a id="__index__" name="__index__"></a> <!-- INDEX BEGIN -->
-     
-
-    <ul>
-      <li><a href="#dynamiccontentwithcgi">Dynamic Content with
-      CGI</a></li>
-
-      <li>
-        <a href="#configuringapachetopermitcgi">Configuring Apache
-        to permit CGI</a> 
-
-        <ul>
-          <li><a href="#scriptalias">ScriptAlias</a></li>
-
-          <li>
-            <a href="#cgioutsideofscriptaliasdirectories">CGI
-            outside of ScriptAlias directories</a> 
-
-            <ul>
-              <li><a
-              href="#explicitlyusingoptionstopermitcgiexecution">Explicitly
-              using Options to permit CGI execution</a></li>
-
-              <li><a href="#htaccessfiles">.htaccess files</a></li>
-            </ul>
-          </li>
-        </ul>
-      </li>
-
-      <li>
-        <a href="#writingacgiprogram">Writing a CGI program</a> 
-
-        <ul>
-          <li><a href="#yourfirstcgiprogram">Your first CGI
-          program</a></li>
-        </ul>
-      </li>
-
-      <li>
-        <a href="#butitsstillnotworking">But it's still not
-        working!</a> 
-
-        <ul>
-          <li><a href="#filepermissions">File permissions</a></li>
-
-          <li><a href="#pathinformation">Path information</a></li>
-
-          <li><a href="#syntaxerrors">Syntax errors</a></li>
-
-          <li><a href="#errorlogs">Error logs</a></li>
-        </ul>
-      </li>
-
-      <li>
-        <a href="#whatsgoingonbehindthescenes">What's going on
-        behind the scenes?</a> 
-
-        <ul>
-          <li><a href="#environmentvariables">Environment
-          variables</a></li>
-
-          <li><a href="#stdinandstdout">STDIN and STDOUT</a></li>
-        </ul>
-      </li>
-
-      <li><a href="#cgimoduleslibraries">CGI
-      modules/libraries</a></li>
-
-      <li><a href="#formoreinformation">For more
-      information</a></li>
-    </ul>
-    <!-- INDEX END -->
-    <hr />
-
-    <h2><a id="dynamiccontentwithcgi"
-    name="dynamiccontentwithcgi">Dynamic Content with CGI</a></h2>
-
-    <table border="1">
-      <tr>
-        <td valign="top"><strong>Related Modules</strong><br />
-         <br />
-         <a href="../mod/mod_alias.html">mod_alias</a><br />
-         <a href="../mod/mod_cgi.html">mod_cgi</a><br />
-         </td>
-
-        <td valign="top"><strong>Related Directives</strong><br />
-         <br />
-         <a
-        href="../mod/mod_mime.html#addhandler">AddHandler</a><br />
-         <a href="../mod/core.html#options">Options</a><br />
-         <a
-        href="../mod/mod_alias.html#scriptalias">ScriptAlias</a><br />
-         </td>
-      </tr>
-    </table>
-
-    <p>The CGI (Common Gateway Interface) defines a way for a web
-    server to interact with external content-generating programs,
-    which are often referred to as CGI programs or CGI scripts. It
-    is the simplest, and most common, way to put dynamic content on
-    your web site. This document will be an introduction to setting
-    up CGI on your Apache web server, and getting started writing
-    CGI programs.</p>
-    <hr />
-
-    <h2><a id="configuringapachetopermitcgi"
-    name="configuringapachetopermitcgi">Configuring Apache to
-    permit CGI</a></h2>
-
-    <p>In order to get your CGI programs to work properly, you'll
-    need to have Apache configured to permit CGI execution. There
-    are several ways to do this.</p>
-
-    <h3><a id="scriptalias" name="scriptalias">ScriptAlias</a></h3>
-
-    <p>The <code>ScriptAlias</code> directive tells Apache that a
-    particular directory is set aside for CGI programs. Apache will
-    assume that every file in this directory is a CGI program, and
-    will attempt to execute it, when that particular resource is
-    requested by a client.</p>
-
-    <p>The <code>ScriptAlias</code> directive looks like:</p>
-<pre>
-        ScriptAlias /cgi-bin/ /usr/local/apache/cgi-bin/
-</pre>
-
-    <p>The example shown is from your default
-    <code>httpd.conf</code> configuration file, if you installed
-    Apache in the default location. The <code>ScriptAlias</code>
-    directive is much like the <code>Alias</code> directive, which
-    defines a URL prefix that is to mapped to a particular
-    directory. <code>Alias</code> and <code>ScriptAlias</code> are
-    usually used for directories that are outside of the
-    <code>DocumentRoot</code> directory. The difference between
-    <code>Alias</code> and <code>ScriptAlias</code> is that
-    <code>ScriptAlias</code> has the added meaning that everything
-    under that URL prefix will be considered a CGI program. So, the
-    example above tells Apache that any request for a resource
-    beginning with <code>/cgi-bin/</code> should be served from the
-    directory <code>/usr/local/apache/cgi-bin/</code>, and should
-    be treated as a CGI program.</p>
-
-    <p>For example, if the URL
-    <code>http://dev.rcbowen.com/cgi-bin/test.pl</code> is
-    requested, Apache will attempt to execute the file
-    <code>/usr/local/apache/cgi-bin/test.pl</code> and return the
-    output. Of course, the file will have to exist, and be
-    executable, and return output in a particular way, or Apache
-    will return an error message.</p>
-
-    <h3><a id="cgioutsideofscriptaliasdirectories"
-    name="cgioutsideofscriptaliasdirectories">CGI outside of
-    ScriptAlias directories</a></h3>
-
-    <p>CGI programs are often restricted to
-    <code>ScriptAlias</code>'ed directories for security reasons.
-    In this way, administrators can tightly control who is allowed
-    to use CGI programs. However, if the proper security
-    precautions are taken, there is no reason why CGI programs
-    cannot be run from arbitrary directories. For example, you may
-    wish to let users have web content in their home directories
-    with the <code>UserDir</code> directive. If they want to have
-    their own CGI programs, but don't have access to the main
-    <code>cgi-bin</code> directory, they will need to be able to
-    run CGI programs elsewhere.</p>
-
-    <h3><a id="explicitlyusingoptionstopermitcgiexecution"
-    name="explicitlyusingoptionstopermitcgiexecution">Explicitly
-    using Options to permit CGI execution</a></h3>
-
-    <p>You could explicitly use the <code>Options</code> directive,
-    inside your main server configuration file, to specify that CGI
-    execution was permitted in a particular directory:</p>
-<pre>
-        &lt;Directory /usr/local/apache/htdocs/somedir&gt;
-                Options +ExecCGI
-        &lt;/Directory&gt;
-</pre>
-
-    <p>The above directive tells Apache to permit the execution of
-    CGI files. You will also need to tell the server what files are
-    CGI files. The following <code>AddHandler</code> directive
-    tells the server to treat all files with the <code>cgi</code>
-    or <code>pl</code> extension as CGI programs:</p>
-<pre>
-     AddHandler cgi-script cgi pl
-</pre>
-
-    <h3><a id="htaccessfiles" name="htaccessfiles">.htaccess
-    files</a></h3>
-
-    <p>A <code>.htaccess</code> file is a way to set configuration
-    directives on a per-directory basis. When Apache serves a
-    resource, it looks in the directory from which it is serving a
-    file for a file called <code>.htaccess</code>, and, if it finds
-    it, it will apply directives found therein.
-    <code>.htaccess</code> files can be permitted with the
-    <code>AllowOverride</code> directive, which specifies what
-    types of directives can appear in these files, or if they are
-    not allowed at all. To permit the directive we will need for
-    this purpose, the following configuration will be needed in
-    your main server configuration:</p>
-<pre>
-        AllowOverride Options
-</pre>
-
-    <p>In the <code>.htaccess</code> file, you'll need the
-    following directive:</p>
-<pre>
-        Options +ExecCGI
-</pre>
-
-    <p>which tells Apache that execution of CGI programs is
-    permitted in this directory.</p>
-    <hr />
-
-    <h2><a id="writingacgiprogram"
-    name="writingacgiprogram">Writing a CGI program</a></h2>
-
-    <p>There are two main differences between ``regular''
-    programming, and CGI programming.</p>
-
-    <p>First, all output from your CGI program must be preceded by
-    a MIME-type header. This is HTTP header that tells the client
-    what sort of content it is receiving. Most of the time, this
-    will look like:</p>
-<pre>
-        Content-type: text/html
-</pre>
-
-    <p>Secondly, your output needs to be in HTML, or some other
-    format that a browser will be able to display. Most of the
-    time, this will be HTML, but occasionally you might write a CGI
-    program that outputs a gif image, or other non-HTML
-    content.</p>
-
-    <p>Apart from those two things, writing a CGI program will look
-    a lot like any other program that you might write.</p>
-
-    <h3><a id="yourfirstcgiprogram" name="yourfirstcgiprogram">Your
-    first CGI program</a></h3>
-
-    <p>The following is an example CGI program that prints one line
-    to your browser. Type in the following, save it to a file
-    called <code>first.pl</code>, and put it in your
-    <code>cgi-bin</code> directory.</p>
-<pre>
-        #!/usr/bin/perl
-        print "Content-type: text/html\r\n\r\n";
-        print "Hello, World.";
-</pre>
-
-    <p>Even if you are not familiar with Perl, you should be able
-    to see what is happening here. The first line tells Apache (or
-    whatever shell you happen to be running under) that this
-    program can be executed by feeding the file to the interpreter
-    found at the location <code>/usr/bin/perl</code>. The second
-    line prints the content-type declaration we talked about,
-    followed by two carriage-return newline pairs. This puts a
-    blank line after the header, to indicate the end of the HTTP
-    headers, and the beginning of the body. The third line prints
-    the string ``Hello, World.'' And that's the end of it.</p>
-
-    <p>If you open your favorite browser and tell it to get the
-    address</p>
-<pre>
-        http://www.example.com/cgi-bin/first.pl
-</pre>
-
-    <p>or wherever you put your file, you will see the one line
-    <code>Hello, World.</code> appear in your browser window. It's
-    not very exciting, but once you get that working, you'll have a
-    good chance of getting just about anything working.</p>
-    <hr />
-
-    <h2><a id="butitsstillnotworking"
-    name="butitsstillnotworking">But it's still not
-    working!</a></h2>
-
-    <p>There are four basic things that you may see in your browser
-    when you try to access your CGI program from the web:</p>
-
-    <dl>
-      <dt>The output of your CGI program</dt>
-
-      <dd>Great! That means everything worked fine.<br />
-      <br />
-      </dd>
-
-      <dt>The source code of your CGI program or a "POST Method Not
-      Allowed" message</dt>
-
-      <dd>That means that you have not properly configured Apache
-      to process your CGI program. Reread the section on <a
-      href="#configuringapachetopermitcgi">configuring Apache</a>
-      and try to find what you missed.<br />
-      <br />
-      </dd>
-
-      <dt>A message starting with "Forbidden"</dt>
-
-      <dd>That means that there is a permissions problem. Check the
-      <a href="#errorlogs">Apache error log</a> and the section
-      below on <a href="#filepermissions">file
-      permissions</a>.<br />
-      <br />
-      </dd>
-
-      <dt>A message saying "Internal Server Error"</dt>
-
-      <dd>If you check the <a href="#errorlogs">Apache error
-      log</a>, you will probably find that it says "Premature end
-      of script headers", possibly along with an error message
-      generated by your CGI program. In this case, you will want to
-      check each of the below sections to see what might be
-      preventing your CGI program from emitting the proper HTTP
-      headers.</dd>
-    </dl>
-
-    <h3><a id="filepermissions" name="filepermissions">File
-    permissions</a></h3>
-
-    <p>Remember that the server does not run as you. That is, when
-    the server starts up, it is running with the permissions of an
-    unprivileged user - usually ``nobody'', or ``www'' - and so it
-    will need extra permissions to execute files that are owned by
-    you. Usually, the way to give a file sufficient permissions to
-    be executed by ``nobody'' is to give everyone execute
-    permission on the file:</p>
-<pre>
-        chmod a+x first.pl
-</pre>
-
-    <p>Also, if your program reads from, or writes to, any other
-    files, those files will need to have the correct permissions to
-    permit this.</p>
-
-    <p>The exception to this is when the server is configured to
-    use <a href="../suexec.html">suexec</a>. This program allows
-    CGI programs to be run under different user permissions,
-    depending on which virtual host or user home directory they are
-    located in. Suexec has very strict permission checking, and any
-    failure in that checking will result in your CGI programs
-    failing with an "Internal Server Error". In this case, you will
-    need to check the suexec log file to see what specific security
-    check is failing.</p>
-
-    <h3><a id="pathinformation" name="pathinformation">Path
-    information</a></h3>
-
-    <p>When you run a program from your command line, you have
-    certain information that is passed to the shell without you
-    thinking about it. For example, you have a path, which tells
-    the shell where it can look for files that you reference.</p>
-
-    <p>When a program runs through the web server as a CGI program,
-    it does not have that path. Any programs that you invoke in
-    your CGI program (like 'sendmail', for example) will need to be
-    specified by a full path, so that the shell can find them when
-    it attempts to execute your CGI program.</p>
-
-    <p>A common manifestation of this is the path to the script
-    interpreter (often <code>perl</code>) indicated in the first
-    line of your CGI program, which will look something like:</p>
-<pre>
-     #!/usr/bin/perl
-</pre>
-
-    <p>Make sure that this is in fact the path to the
-    interpreter.</p>
-
-    <h3><a id="syntaxerrors" name="syntaxerrors">Syntax
-    errors</a></h3>
-
-    <p>Most of the time when a CGI program fails, it's because of a
-    problem with the program itself. This is particularly true once
-    you get the hang of this CGI stuff, and no longer make the
-    above two mistakes. Always attempt to run your program from the
-    command line before you test if via a browser. This will
-    eliminate most of your problems.</p>
-
-    <h3><a id="errorlogs" name="errorlogs">Error logs</a></h3>
-
-    <p>The error logs are your friend. Anything that goes wrong
-    generates message in the error log. You should always look
-    there first. If the place where you are hosting your web site
-    does not permit you access to the error log, you should
-    probably host your site somewhere else. Learn to read the error
-    logs, and you'll find that almost all of your problems are
-    quickly identified, and quickly solved.</p>
-    <hr />
-
-    <h2><a id="whatsgoingonbehindthescenes"
-    name="whatsgoingonbehindthescenes">What's going on behind the
-    scenes?</a></h2>
-
-    <p>As you become more advanced in CGI programming, it will
-    become useful to understand more about what's happening behind
-    the scenes. Specifically, how the browser and server
-    communicate with one another. Because although it's all very
-    well to write a program that prints ``Hello, World.'', it's not
-    particularly useful.</p>
-
-    <h3><a id="environmentvariables"
-    name="environmentvariables">Environment variables</a></h3>
-
-    <p>Environment variables are values that float around you as
-    you use your computer. They are useful things like your path
-    (where the computer searches for a the actual file implementing
-    a command when you type it), your username, your terminal type,
-    and so on. For a full list of your normal, every day
-    environment variables, type <code>env</code> at a command
-    prompt.</p>
-
-    <p>During the CGI transaction, the server and the browser also
-    set environment variables, so that they can communicate with
-    one another. These are things like the browser type (Netscape,
-    IE, Lynx), the server type (Apache, IIS, WebSite), the name of
-    the CGI program that is being run, and so on.</p>
-
-    <p>These variables are available to the CGI programmer, and are
-    half of the story of the client-server communication. The
-    complete list of required variables is at <a
-    href="http://hoohoo.ncsa.uiuc.edu/cgi/env.html">http://hoohoo.ncsa.uiuc.edu/cgi/env.html</a></p>
-
-    <p>This simple Perl CGI program will display all of the
-    environment variables that are being passed around. Two similar
-    programs are included in the <code>cgi-bin</code> directory of
-    the Apache distribution. Note that some variables are required,
-    while others are optional, so you may see some variables listed
-    that were not in the official list. In addition, Apache
-    provides many different ways for you to <a
-    href="../env.html">add your own environment variables</a> to
-    the basic ones provided by default.</p>
-<pre>
-     #!/usr/bin/perl
-     print "Content-type: text/html\n\n";
-     foreach $key (keys %ENV) {
-          print "$key --&gt; $ENV{$key}&lt;br&gt;";
-     }
-</pre>
-
-    <h3><a id="stdinandstdout" name="stdinandstdout">STDIN and
-    STDOUT</a></h3>
-
-    <p>Other communication between the server and the client
-    happens over standard input (<code>STDIN</code>) and standard
-    output (<code>STDOUT</code>). In normal everyday context,
-    <code>STDIN</code> means the keyboard, or a file that a program
-    is given to act on, and <code>STDOUT</code> usually means the
-    console or screen.</p>
-
-    <p>When you <code>POST</code> a web form to a CGI program, the
-    data in that form is bundled up into a special format and gets
-    delivered to your CGI program over <code>STDIN</code>. The
-    program then can process that data as though it was coming in
-    from the keyboard, or from a file</p>
-
-    <p>The ``special format'' is very simple. A field name and its
-    value are joined together with an equals (=) sign, and pairs of
-    values are joined together with an ampersand (&amp;).
-    Inconvenient characters like spaces, ampersands, and equals
-    signs, are converted into their hex equivalent so that they
-    don't gum up the works. The whole data string might look
-    something like:</p>
-<pre>
-     name=Rich%20Bowen&amp;city=Lexington&amp;state=KY&amp;sidekick=Squirrel%20Monkey
-</pre>
-
-    <p>You'll sometimes also see this type of string appended to
-    the a URL. When that is done, the server puts that string into
-    the environment variable called <code>QUERY_STRING</code>.
-    That's called a <code>GET</code> request. Your HTML form
-    specifies whether a <code>GET</code> or a <code>POST</code> is
-    used to deliver the data, by setting the <code>METHOD</code>
-    attribute in the <code>FORM</code> tag.</p>
-
-    <p>Your program is then responsible for splitting that string
-    up into useful information. Fortunately, there are libraries
-    and modules available to help you process this data, as well as
-    handle other of the aspects of your CGI program.</p>
-    <hr />
-
-    <h2><a id="cgimoduleslibraries" name="cgimoduleslibraries">CGI
-    modules/libraries</a></h2>
-
-    <p>When you write CGI programs, you should consider using a
-    code library, or module, to do most of the grunt work for you.
-    This leads to fewer errors, and faster development.</p>
-
-    <p>If you're writing CGI programs in Perl, modules are
-    available on <a href="http://www.cpan.org/">CPAN</a>. The most
-    popular module for this purpose is CGI.pm. You might also
-    consider CGI::Lite, which implements a minimal set of
-    functionality, which is all you need in most programs.</p>
-
-    <p>If you're writing CGI programs in C, there are a variety of
-    options. One of these is the CGIC library, from <a
-    href="http://www.boutell.com/cgic/">http://www.boutell.com/cgic/</a></p>
-    <hr />
-
-    <h2><a id="formoreinformation" name="formoreinformation">For
-    more information</a></h2>
-
-    <p>There are a large number of CGI resources on the web. You
-    can discuss CGI problems with other users on the Usenet group
-    comp.infosystems.www.authoring.cgi. And the -servers mailing
-    list from the HTML Writers Guild is a great source of answers
-    to your questions. You can find out more at <a
-    href="http://www.hwg.org/lists/hwg-servers/">http://www.hwg.org/lists/hwg-servers/</a></p>
-
-    <p>And, of course, you should probably read the CGI
-    specification, which has all the details on the operation of
-    CGI programs. You can find the original version at the <a
-    href="http://hoohoo.ncsa.uiuc.edu/cgi/interface.html">NCSA</a>
-    and there is an updated draft at the <a
-    href="http://web.golux.com/coar/cgi/">Common Gateway Interface
-    RFC project</a>.</p>
-
-    <p>When you post a question about a CGI problem that you're
-    having, whether to a mailing list, or to a newsgroup, make sure
-    you provide enough information about what happened, what you
-    expected to happen, and how what actually happened was
-    different, what server you're running, what language your CGI
-    program was in, and, if possible, the offending code. This will
-    make finding your problem much simpler.</p>
-
-    <p>Note that questions about CGI problems should
-    <strong>never</strong> be posted to the Apache bug database
-    unless you are sure you have found a problem in the Apache
-    source code.</p>
-    <!--#include virtual="footer.html" -->
-  </body>
-</html>
-
diff --git a/docs/manual/howto/cgi.html.ja.jis b/docs/manual/howto/cgi.html.ja.jis
deleted file mode 100644
index b6bf58c..0000000
--- a/docs/manual/howto/cgi.html.ja.jis
+++ /dev/null
@@ -1,495 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<html>
-<head>
-<title>Apache Tutorial: CGI $B$K$h$kF0E*%3%s%F%s%D(B</title>
-</head>
-<!-- English revision: 1.6 -->
-<!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-<body bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#000080"
-alink="#FF0000">
-<!--#include virtual="header.html" -->
-<h1 align="CENTER">CGI $B$K$h$kF0E*%3%s%F%s%D(B</h1>
-
-<a name="__index__"></a> <!-- INDEX BEGIN -->
- 
-
-<ul>
-<li><a href="#dynamiccontentwithcgi">CGI $B$K$h$kF0E*%3%s%F%s%D(B</a></li>
-
-<li><a href="#configuringapachetopermitcgi">CGI $B$r5v2D$9$k$h$&$K(B Apache $B$r(B
-$B@_Dj$9$k(B</a>
-
-<ul>
-<li><a href="#scriptalias">ScriptAlias</a></li>
-
-<li><a href="#cgioutsideofscriptaliasdirectories">ScriptAlias $B%G%#%l%/%H%j30$N(B
-CGI</a>
-
-<ul>
-<li><a href="#explicitlyusingoptionstopermitcgiexecution">CGI $B$N<B9T$r2DG=$K(B
-$B$9$k$?$a$K(B Options $B$rL@<(E*$K;HMQ$9$k(B</a></li>
-
-
-<li><a href="#htaccessfiles">.htaccess $B%U%!%$%k(B</a></li>
-</ul>
-</li>
-</ul>
-</li>
-
-<li><a href="#writingacgiprogram">CGI $B%W%m%0%i%`$r=q$/(B</a>
-
-<ul>
-<li><a href="#yourfirstcgiprogram">$B$"$J$?$N:G=i$N(B CGI $B%W%m%0%i%`(B</a></li>
-</ul>
-</li>
-
-<li><a href="#butitsstillnotworking">$B$7$+$7!"$^$@F0$+$J$$(B !</a>
-
-<ul>
-<li><a href="#filepermissions">$B%U%!%$%k$N%Q!<%_%C%7%g%s(B</a></li>
-
-<li><a href="#pathinformation">$B%Q%9>pJs(B</a></li>
-
-<li><a href="#syntaxerrors">$B9=J8%(%i!<(B</a></li>
-
-<li><a href="#errorlogs">$B%(%i!<%m%0(B</a></li>
-</ul>
-</li>
-
-<li><a href="#whatsgoingonbehindthescenes">$BN"$G2?$,5/$3$C$F$$$k$N$+(B?</a>
-
-<ul>
-<li><a href="#environmentvariables">$B4D6-JQ?t(B</a></li>
-
-<li><a href="#stdinandstdout">$BI8=`F~=PNO(B</a></li>
-</ul>
-</li>
-
-<li><a href="#cgimoduleslibraries">CGI $B%b%8%e!<%k(B/$B%i%$%V%i%j(B</a></li>
-
-<li><a href="#formoreinformation">$B99$J$k>pJs(B</a></li>
-</ul>
-
-<!-- INDEX END -->
-<hr>
-<h2><a name="dynamiccontentwithcgi">CGI $B$K$h$kF0E*%3%s%F%s%D(B</a></h2>
-
-<table border="1">
-<tr><td valign="top">
-<strong>$B4XO"%b%8%e!<%k(B</strong><br><br>
-
-<a href="../mod/mod_alias.html">mod_alias</a><br>
-<a href="../mod/mod_cgi.html">mod_cgi</a><br>
-
-</td><td valign="top">
-<strong>$B4XO"%G%#%l%/%F%#%V(B</strong><br><br>
-
-<a href="../mod/mod_mime.html#addhandler">AddHandler</a><br>
-<A HREF="../mod/core.html#options">Options</a><br>
-<a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a><br>
-
-</td></tr></table>
-
-<p>CGI (Common Gateway Interface) $B$O!"%&%'%V%5!<%P$,%3%s%F%s%D@8@.$r$9$k(B
-$B30It%W%m%0%i%`$H6(D4$7$FF0:n$9$k$?$a$NJ}K!$rDj5A$7$F$$$^$9!#$=$N%W%m%0%i%`$O$7$P$7$P(B
-CGI $B%W%m%0%i%`$d(B CGI $B%9%/%j%W%H$H8F$P$l$^$9!#(BCGI $B$O!"%&%'%V%5%$%H$K(B
-$BF0E*$J%3%s%F%s%D$rCV$/$?$a$N:G$b4JC1$G0lHLE*$JJ}K!$G$9!#$3$N%I%-%e%a%s%H$O!"(B
-Apache $B%&%'%V%5!<%P$G(B CGI $B$r@_Dj$7!"(BCGI $B%W%m%0%i%`$r=q$-;O$a$k$?$a$N(B
-$BF~Lg=q$H$J$k$G$7$g$&!#(B</p>
-
-<hr>
-<h2><a name="configuringapachetopermitcgi">CGI $B$r5v2D$9$k$h$&$K(B Apache $B$r(B
-$B@_Dj$9$k(B</a></h2>
-
-<p>CGI $B%W%m%0%i%`$r@5$7$/F0:n$5$;$k$K$O!"(BCGI $B$r5v2D$9$k$h$&$K(B
-Apache $B$N@_Dj$r9T$&I,MW$,$"$j$^$9!#$3$l$r9T$J$&$?$a$NJ}K!$,$$$/$D$+(B
-$B$"$j$^$9!#(B</p>
-
-<h3><a name="scriptalias">ScriptAlias</a></h3>
-
-<p><code>ScriptAlias</code> $B%G%#%l%/%F%#%V$r;HMQ$7$F!"(BCGI $B%W%m%0%i%`MQ$N(B
-$BFCJL$JJL%G%#%l%/%H%j$r(B Apache $B$K@_Dj$7$^$9!#(B
-Apache $B$O!"$3$N%G%#%l%/%H%jCf$NA4$F$N%U%!%$%k$r(B CGI $B%W%m%0%i%`$G$"$k$H(B
-$B2>Dj$7$^$9!#$=$7$F!"$3$NFCJL$J%j%=!<%9$,%/%i%$%"%s%H$+$iMW5a$5$l$k$H!"(B
-$B$=$N%W%m%0%i%`$N<B9T$r;n$_$^$9!#(B</p>
-
-<p><code>ScriptAlias</code> $B%G%#%l%/%F%#%V$O0J2<$N$h$&$K;HMQ$7$^$9(B:</p>
-
-<pre>
-        ScriptAlias /cgi-bin/ /usr/local/apache/cgi-bin/
-</pre>
-
-<p>$B%G%U%)%k%H0LCV$K(B Apache $B$r%$%s%9%H!<%k$7$?$J$i$P!"(B
-$B$3$NNc$O%G%U%)%k%H>uBV$N(B <code>httpd.conf</code> $B@_Dj%U%!%$%k(B
-$B$K4^$^$l$F$$$^$9!#(B
-<code>ScriptAlias</code> $B%G%#%l%/%F%#%V$O!"(BURL $B$NA0$KIU2C$9$k%G%#%l%/%H%j$rDj5A$9$k(B <code>Alias</code> $B%G%#%l%/%F%#%V$H$+$J$j;w$F$$$^$9!#(B
-<code>Alias</code> $B$H(B <code>ScriptAlias</code> $B$ODL>o!"(B
-<code>DocumentRoot</code> $B%G%#%l%/%H%j30$N%G%#%l%/%H%j$N$?$a$K;HMQ$5$l$^$9!#(B
-<code>Alias</code> $B$H(B <code>ScriptAlias</code> $B$H$N:9$O!"(B
-<code>ScriptAlias</code> $B$,@\F,<-$G;O$^$k$9$Y$F$N(B URL $B$O(B CGI $B%W%m%0%i%`$H(B
-$B$_$J$5$l$k$H$$$&DI2C$N0UL#$r4^$s$G$$$k$3$H$G$9!#=>$C$F!"(B
-$B>e5-$NNc$G$O!"(B<code>/cgi-bin/</code>
-$B$G;O$^$k%j%=!<%9$X$N$"$i$f$k%j%/%(%9%H$KBP$7$F!"%G%#%l%/%H%j(B
-<code>/usr/local/apache/cgi-bin/</code>
-$B$+$iDs6!$7!"$=$l$i$r(B CGI $B%W%m%0%i%`$H$7$F07$&$h$&(B Apache $B$K<($7$^$9!#(B</p>
-
-<p>$BNc$($P!"(BURL <code>http://dev.rcbowen.com/cgi-bin/test.pl</code>
-$B$,MW5a$5$l$?>l9g!"(BApache $B$O(B $B%U%!%$%k(B
-<code>/usr/local/apache/cgi-bin/test.pl</code> $B$r<B9T$7!"$=$N=PNO$rJV$9$3$H$r(B
-$B;n$_$^$9!#(B
-$B$b$A$m$s!"%U%!%$%k$,B8:_$7!"<B9T2DG=$G$"$j!"7h$a$i$l$?J}K!$G=PNO$rJV$7$^$9!#(B
-$B$=$&$G$J$1$l$P!"(BApache $B$O%(%i!<%a%C%;!<%8$rJV$7$^$9!#(B
-
-<h3><a name="cgioutsideofscriptaliasdirectories">
-ScriptAlias $B%G%#%l%/%H%j30$N(B CGI</a></h3>
-
-<p>CGI $B%W%m%0%i%`$O!"%;%-%e%j%F%#>e$NM}M3$+$i(B
-<code>ScriptAlias</code> $B$5$l$?%G%#%l%/%H%j$K@)8B$5$l$k$3$H$,$7$P$7$P$"$j$^$9!#(B
-$B$3$NJ}K!$K$h$j!"(BCGI $B%W%m%0%i%`$r;HMQ$G$-$k%f!<%6$r4IM}<T$,87$7$/@)8f$9$k(B
-$B$3$H$,$G$-$^$9!#(B
-$B$7$+$7$J$,$i!"E,@Z$J%;%-%e%j%F%#;vA0BP:v$,$H$i$l$k$J$i$P!"(BCGI $B%W%m%0%i%`(B
-$B$rG$0U$N%G%#%l%/%H%j$G<B9T$G$-$J$$$h$&$K$9$kM}M3$O$"$j$^$;$s!#(B
-$BNc$($P!"%f!<%6$K(B <code>UserDir</code> $B%G%#%l%/%F%#%V$G(B
-$BH`$i$N%[!<%`%G%#%l%/%H%jG[2<$K%&%'%V%3%s%F%s%D$r;}$?$;$?$$$H$7$^$9!#(B
-$B$b$7!"H`$i$,(B CGI $B%W%m%0%i%`$r;}$D$3$H$rK>$s$G$$$F$b!"%a%$%s$N(B
-<code>cgi-bin</code> $B%G%#%l%/%H%j$X$N%"%/%;%9$,$G$-$J$$>l9g!"(BCGI $B%W%m%0%i%`$r(B
-$B<B9T$9$k$3$H$,$G$-$kB>$N>l=j$,I,MW$K$J$j$^$9!#(B</p>
-
-<h3><a name="explicitlyusingoptionstopermitcgiexecution">
-CGI $B$N<B9T$r2DG=$K$9$k$?$a$K(B Options $B$rL@<(E*$K;HMQ$9$k(B</a></h3>
-
-<p>$B%5!<%P$N%a%$%s$N@_Dj%U%!%$%kCf$G(B <code>Options</code> $B%G%#%l%/%F%#%V$r(B
-$BL@<(E*$K;HMQ$9$k$3$H$G!"FCDj$N%G%#%l%/%H%jG[2<$G(B CGI $B$N<B9T$r5v2D$9$k$h$&$K(B
-$B;XDj$9$k$3$H$,$G$-$^$9(B:<p>
-
-<pre>
-        &lt;Directory /usr/local/apache/htdocs/somedir&gt;
-                Options +ExecCGI
-        &lt;/Directory&gt;
-</pre>
-
-<p>$B>e5-%G%#%l%/%F%#%V$O!"(BCGI $B%U%!%$%k$N<B9T$r2DG=$K$9$k$h$&(B Apache 
-$B$KEA$($^$9!#$^$?!"$I$N%U%!%$%k$,(B CGI $B%U%!%$%k$+$r(B
-$B%5!<%P$KEA$($kI,MW$,$"$j$^$9!#<!$N(B <code>AddHandler</code>
-$B%G%#%l%/%F%#%V$NNc$G$O!"(B<code>cgi</code> $B$^$?$O(B <code>pl</code> $B$r3HD%;R$K(B
-$B;}$D$9$Y$F$N%U%!%$%k$r(B CGI $B%W%m%0%i%`$H$7$F$_$J$9$3$H$r%5!<%P$KEA$($^$9(B:<p>
-
-<pre>
-     AddHandler cgi-script cgi pl
-</pre>
-
-<h3><a name="htaccessfiles">.htaccess $B%U%!%$%k(B</a></h3>
-
-<p><code>.htaccess</code> $B%U%!%$%k$O!"%G%#%l%/%H%jKh$K(B
-$B%G%#%l%/%F%#%V$r;XDj$9$kJ}K!$G$9!#(B
-Apache $B$O!"%j%=!<%9$rDs6!$9$k$H$-$K!"Ds6!$9$k%U%!%$%k$,CV$+$l$F$$$k(B
-$B%G%#%l%/%H%jCf$N(B <code>.htaccess</code> $B$H$$$&%U%!%$%k$r;2>H$7$^$9!#(B
-$B$=$N%U%!%$%k$rH/8+$7$?$i!"$=$NCf$GH/8+$5$l$?%G%#%l%/%F%#%V$,E,MQ$5$l$^$9!#(B
-<code>.htaccess</code> $B%U%!%$%k$O!"(B<code>AllowOverride</code> 
-$B%G%#%l%/%F%#%V$N;XDj$K$h$j;H$($k$h$&$K$J$j$^$9!#(B
-<code>AllowOverride</code> $B%G%#%l%/%F%#%V$O!"(B<code>.htaccess</code> $B%U%!%$%k$G(B
-$B@_Dj$G$-$k%G%#%l%/%F%#%V$N%?%$%W$r;XDj$7$^$9!#(B
-<code>AllowOverride</code> $B%G%#%l%/%F%#%V$N;XDj$,$J$$>l9g!"$^$C$?$/;H$($^$;$s!#(B
-CGI $B$N<B9T$r5v2D$9$k$?$a$KI,MW$H$J$k%G%#%l%/%F%#%V$r;XDj2DG=$K$9$k$K$O!"(B
-$B0J2<$N@_Dj$,%5!<%P$N%a%$%s$N@_Dj$GI,MW$K$J$j$^$9(B:</p>
-
-<pre>
-        AllowOverride Options
-</pre>
-
-<p><code>.htaccess</code> $B%U%!%$%k$G$O!"<!$N%G%#%l%/%F%#%V$,I,MW$H(B
-$B$J$j$^$9(B:</p>
-
-<pre>
-        Options +ExecCGI
-</pre>
-
-<p>$B$3$N@_Dj$G$O!"$3$N%G%#%l%/%H%j$K$*$1$k(B CGI $B%W%m%0%i%`$N<B9T$r5v2D$9$k$h$&(B
-Apache $B$KEA$($^$9!#(B</p>
-
-<hr>
-<h2><a name="writingacgiprogram">CGI $B%W%m%0%i%`$r=q$/(B</a></h2>
-
-<p>$BDL>o$N%W%m%0%i%_%s%0$H(B CGI $B%W%m%0%i%_%s%0$N4V$K$O<g$KFs$D$N0c$$$,(B
-$B$"$j$^$9!#(B</p>
-
-<p>$B0l$D$O!"(BCGI $B%W%m%0%i%`$N$9$Y$F$N=PNO$K$O(B MIME-type
-$B%X%C%@$rIU$1$J$1$l$P$J$j$^$;$s!#$3$l$O$I$N$h$&$J<oN`$N%3%s%F%s%D$r<u$1<h$C$F(B
-$B$$$k$+$r%/%i%$%"%s%H$K<($9(B HTTP $B%X%C%@$G$9!#$[$H$s$I$N>l9g$G$O!"(B
-$B<!$N$h$&$K=PNO$7$^$9(B:</p>
-
-<pre>
-        Content-type: text/html
-</pre>
-
-<p>$B$b$&0l$D$O!"=PNO$r(B HTML $B$+!"%V%i%&%6$,I=<($9$k$3$H$,(B
-$B$G$-$k2?$+B>$N7A<0$K$9$kI,MW$,$"$j$^$9!#(B
-$BBgDq$N>l9g$O(B HTML $B$G$7$g$&$,!"(BGIF $B%$%a!<%8$dB>$NHs(B HTML 
-$B%3%s%F%s%D$r=PNO$9$k(B CGI $B%W%m%0%i%`$r=q$/$3$H$b$"$k$G$7$g$&!#(B</p>
-
-<p>$B$3$l$iFsE@0J30$G$O!"(BCGI $B%W%m%0%i%`$r=q$/$3$H$O!"$"$J$?$,=q$$$F$$$k(B
-$BB>$N%W%m%0%i%`$HBg$$$K;w$F$$$k$G$7$g$&!#(B</p>
-
-<h3><a name="yourfirstcgiprogram">$B$"$J$?$N:G=i$N(B CGI $B%W%m%0%i%`(B</a></h3>
-
-<p>$B<!$K<($9$N$O!"%V%i%&%6$K(B 1 $B9T0u;z$9$k(B CGI $B%W%m%0%i%`$NNc$G$9!#(B
-$B0J2<$rF~NO$7!"(B<code>first.pl</code> $B$H$$$&%U%!%$%k$KJ]B8$7!"$=$l$r(B
-<code>cgi-bin</code> $B%G%#%l%/%H%j$KCV$$$F$/$@$5$$!#(B</p>
-
-<pre>
-        #!/usr/bin/perl
-        print "Content-type: text/html\r\n\r\n";
-        print "Hello, World.";
-</pre>
-
-<p>Perl $B$K@:DL$7$F$$$J$/$F$b!"2?$,5/$3$k$+$r(B
-$BM}2r$9$k$3$H$O$G$-$k$O$:$G$9!#(B
-1 $B9TL\$O!"(B<code>/usr/bin/perl</code> $B$G8+$D$1(B
-$B$i$l$k%$%s%?%W%j%?$K$3$N%U%!%$%k$r6!5k$9$k$3$H$G$3$N%W%m%0%i%`$,<B9T$5$l$k$3$H$r(B
-Apache $B$K(B ($B%7%'%k>e$G<B9T$7$h$&$H$7$F$$$k$J$i$P!"$=$N%7%'%k$K(B ) $B<($7$^$9!#(B
-2 $B9TL\$O!"A0=R$7$?$H$*$j(B content-type $B$NDj5A$r0u;z$7$^$9!#(B
-$B$3$l$K$OI|5"2~9T$NFs$D$NAH$r8e$KIU2C$7$^$9!#$3$l$K$h$j!"(B
-$B%X%C%@$N=*$j$K6u9T$,CV$+$l!"(BHTTP $B%X%C%@$N=*$j$H%\%G%#$N;O$^$j$r<($7$^$9!#(B
-3 $B9TL\$O!"(B``Hello, World.'' $B$H$$$&J8;zNs$r0u;z$7!"$3$l$G=*$j$H$J$j$^$9!#(B</p>
-
-<p>$B9%$_$N%V%i%&%6$r3+$-!"%"%I%l%9(B</p>
-
-<pre>
-        http://www.example.com/cgi-bin/first.pl
-</pre>
-
-<p>$B$"$k$$$O%U%!%$%k$rCV$$$?%m%1!<%7%g%s$r;XDj$9$k$H!"(B
-<code>Hello, World.</code> $B$H$$$&(B 1 $B9T$,%V%i%&%6%&%#%s%I$K8=$l$k$G$7$g$&!#(B
-$B$=$l$O$"$^$j%(%-%5%$%F%#%s%0$J$3$H$G$O$"$j$^$;$s!#(B
-$B$7$+$7!"$3$l$,$&$^$/F0$1$P!"(B
-$BB>$N$I$N$h$&$J$b$N$G$bF0$+$9$3$H$,$G$-$k$h$&$K$J$j$^$9!#(B</p>
-
-<hr>
-<h2><a name="butitsstillnotworking">$B$7$+$7!"$^$@F0$+$J$$(B !</a></h2>
-
-<p>$B%&%'%V$+$i(B CGI $B%W%m%0%i%`$X$N%"%/%;%9$r9T$J$C$?$H$-!"(B
-$B%V%i%&%6$G8+$k2DG=@-$,$"$k;M$D$N4pK\E*$J$3$H$,$"$j$^$9(B:</p>
-
-<dl>
-<dt>CGI $B%W%m%0%i%`$N=PNO(B</dt>
-<dd>$BAG@2$i$7$$(B ! $B$=$l$O$9$Y$F$,$&$^$/F0$$$?$3$H$r0UL#$7$^$9!#(B<br><br></dd>
-
-<dt>CGI $B%W%m%0%i%`$N%=!<%9%3!<%I!"$^$?$O(B "POST Method Not Allowed" 
-$B$H$$$&%a%C%;!<%8(B</dt> 
-<dd>$B$3$l$O!"(BCGI $B%W%m%0%i%`$r=hM}$G$-$k$h$&(B Apache $B$rE,@Z$K@_Dj$7$F(B
-$B$$$J$+$C$?$3$H$r0UL#$7$^$9!#(B
-<a href="#configuringapachetopermitcgi">$B!V(BCGI $B$r5v2D$9$k$h$&$K(B Apache $B$r@_Dj$9$k!W(B</a>$B$N>O$rFI$_D>$7!"$"$J$?$,2?$r4V0c$($?$+$r(B
-$BC5$7$F$_$F$/$@$5$$!#(B<br><br></dd>
-
-<dt>$B%a%C%;!<%8$,(B "Forbidden" $B$G;O$^$C$F$$$k(B</dt>
-<dd>$B$3$l$O%Q!<%_%C%7%g%s$NLdBj$H$$$&$3$H$r0UL#$7$^$9!#(B
-<a href="#errorlogs">Apache $B$N%(%i!<%m%0(B</a>$B$H!"8e=R$N(B
-<a href="#filepermissions">$B!V%U%!%$%k$N%Q!<%_%C%7%g%s!W(B</a>$B$N>O$r(B
-$B%A%'%C%/$7$F$/$@$5$$!#(B
-<br><br></dd>
-
-<dt>"Internal Server Error" $B$H$$$&%a%C%;!<%8(B</dt>
-<dd><a href="#errorlogs">Apache $B$N%(%i!<%m%0(B</a>$B$r%A%'%C%/$9$k$H!"(B
-"Premature end of script headers" $B$H$$$&%m%0$,5-O?$5$l$F$$$k$H;W$$$^$9!#(B
-$B$=$7$F!"$*$=$i$/(B CGI $B%W%m%0%i%`$K$h$C$F@8@.$5$l$?%(%i!<%a%C%;!<%8$b5-O?$5$l$F$$$k$G$7$g$&!#(B
-$B$3$N>l9g!"(BCGI $B%W%m%0%i%`$,E,@Z$J(B HTTP $B%X%C%@$r=PNO$G$-$J$$860x$r(B
-$BCN$k$?$a$K!"0J2<$N3F>O$G%A%'%C%/$7$F$_$F$/$@$5$$!#(B</dd>
-</dl>
-
-<h3><a name="filepermissions">$B%U%!%$%k$N%Q!<%_%C%7%g%s(B</a></h3>
-
-<p>$B%5!<%P$O$"$J$?$N8"8B$G<B9T$5$l$F$$$J$$$N$rK:$l$J$$$h$&$K!#(B
-$B$D$^$j!"5/F0$9$k$H$-!"%5!<%P$OFC8"$r$b$?$J$$%f!<%6(B - $BDL>o(B ``nobody'' $B$d(B ``www'' 
-$B$N8"8B$G<B9T$5$l$^$9!#$7$?$,$C$F!"$"$J$?$,=jM-$9$k%U%!%$%k$r(B
-$B<B9T$9$k$K$OJL$N%Q!<%_%C%7%g%s$,I,MW$H$J$j$^$9!#(B
-$BDL>o!"(B``nobody'' $B$,<B9T$9$k$N$K==J,$J%Q!<%_%C%7%g%s$rM?$($kJ}K!$O!"%U%!%$%k$K(B
-$BC/$G$b<B9T2DG=$H$9$k%Q!<%_%C%7%g%s$rM?$($k$3$H$G$9(B:</p>
-
-<pre>
-        chmod a+x first.pl
-</pre>
-
-<p>$B$^$?!"$b$7$"$J$?$N%W%m%0%i%`$,B>$N%U%!%$%k$rFI$_=q$-$9$k$J$i$P!"(B
-$B$=$l$i$N%U%!%$%k$O!"$3$l$,2DG=$H$J$k@5$7$$%Q!<%_%C%7%g%s$r;}$C$F$$$kI,MW$,(B
-$B$"$j$^$9!#(B</p>
-
-<p>$B$3$l$KBP$9$kNc30$O!"%5!<%P$,(B <a href="../suexec.html">suexec</a> $B$r(B
-$B;HMQ$9$k$h$&@_Dj$5$l$F$$$k>l9g$G$9!#(B
-suexec $B$O!"(BCGI $B%W%m%0%i%`$,CV$+$l$F$$$k%P!<%A%c%k%[%9%H$^$?$O%f!<%6$N%[!<%`(B
-$B%G%#%l%/%H%j$K$h$C$F!"0[$J$k%f!<%68"8B$G(B
-$B<B9T$5$l$k$h$&$K$7$^$9!#(B
-suexec $B$O$H$F$b87$7$$%Q!<%_%C%7%g%s$N%A%'%C%/$,$"$j!"(B
-$B$=$N%A%'%C%/$rDL2a$G$-$J$$$H(B "Internal Server Error" $B$H$J$j!"(B
-$B$=$N(B CGI $B%W%m%0%i%`$N<B9T$O<:GT$7$^$9!#(B
-$B$3$N>l9g!"$I$N%;%-%e%j%F%#%A%'%C%/$,<:GT$7$F$$$k$N$+$rCN$k(B
-$B$?$a$K(B suexec $B%m%0%U%!%$%k$r%A%'%C%/$9$kI,MW$,$"$j$^$9!#(B</p>
-
-<h3><a name="pathinformation">$B%Q%9>pJs(B</a></h3>
-
-<p>$B%3%^%s%I%i%$%s$+$i%W%m%0%i%`$r<B9T$9$k$H$-!"0U<1$7$J$/$F$b(B
-$B%7%'%k$KEO$5$l$k>pJs$,$"$j$^$9!#(B
-$BNc$($P!";2>H$9$k%U%!%$%k$N$?$a$K$I$3$r8!:w$7$?$i$h$$$+$r%7%'%k$KEA$($k%Q%9$,(B
-$B$"$j$^$9!#(B</p>
-
-<p>$B%W%m%0%i%`$,(B CGI $B%W%m%0%i%`$H$7$F%&%'%V%5!<%P$K$h$C$F<B9T$5$l$k$H$-!"(B
-$B$=$l$O%Q%9$r;}$A$^$;$s!#(B
-CGI $B%W%m%0%i%`Fb$G8F$S=P$9$"$i$f$k%W%m%0%i%`(B ($BNc$($P!"(B'sendmail' $B$N(B
-$B$h$&$J$b$N(B) $B$O!"%U%k%Q%9$G;XDj$9$kI,MW$,$"$k$G$7$g$&!#(B
-$B$=$l$K$h$j!"(BCGI $B%W%m%0%i%`$r<B9T$7$h$&$H$7$?$H$-!"%7%'%k$O$=$N$h$&$J%W%m%0%i%`$r(B
-$B8+$D$1$k$3$H$,$G$-$^$9!#(B</p>
-
-<p>$BF1MM$J$3$H$O!"%9%/%j%W%H$N%$%s%?%W%j%?(B ($B$7$P$7$P(B <code> perl </code>) 
-$B$X$N%Q%9$G!"(BCGI $B%W%m%0%i%`$N(B 1 $B9TL\$K<!$N$h$&$K<($5$l$^$9(B:</p>
-
-<pre>
-     #!/usr/bin/perl
-</pre>
-
-<p>$B$3$l$,%$%s%?!<%W%j%?$X$N<B:]$N%Q%9$G$"$k$3$H$r3N<B$K$7$F$*$-$^$9!#(B</p>
-
-<h3><a name="syntaxerrors">$B9=J8%(%i!<(B</a></h3>
-
-<p>CGI $B%W%m%0%i%`$,<:GT$9$k$N$OBgDq!"%W%m%0%i%`<+?H$KLdBj$,$"$k>l9g$G$9!#(B
-$B0lEY(B CGI $B$N;H$$J}$rM}2r$7!"A0=R$NFs$D$N8m$j$rHH$7$F$$$J$$$J$i$P!"(B
-$B$^$:4V0c$$$J$/$=$&$G$7$g$&!#%V%i%&%6$rDL$7$F%F%9%H$r9T$&A0$KI,$:!"%3%^%s%I%i%$%s(B
-$B$+$i%W%m%0%i%`$N<B9T$r;n$7$J$5$$!#$3$l$K$h$j!"BgDq$NLdBj$,5/$3$i$J$/$J$j$^$9!#(B</p>
-
-<h3><a name="errorlogs">$B%(%i!<%m%0(B</a></h3>
-
-<p>$B%(%i!<%m%0$OM'C#$G$9!#A4$F$N$&$^$/$$$+$J$$$3$H$O!"%(%i!<%m%0$K(B
-$B%a%C%;!<%8$r@8@.$7$^$9!#I,$:$=$l$r:G=i$K8+$k$Y$-$G$9!#(B
-$B$b$7!"$"$J$?$,%&%'%V%5%$%H$r<g:E$7$F$$$k>l=j$,%(%i!<%m%0$N;2>H$r(B
-$B5v$7$F$$$J$$$J$i$P!"$-$C$HB>$N%5%$%H$G<g:E$9$k$Y$-$G$9!#(B
-$B%(%i!<%m%0$NFI$_J}$r3X$V$3$H$G!"$[$H$s$IA4$F$NLdBj$,?WB.$K(B
-$B3NG'$5$l!"?WB.$K2r7h$5$l$k$H$$$&$3$H$,J,$+$k$G$7$g$&!#(B</p>
-
-<hr>
-<h2><a name="whatsgoingonbehindthescenes">$BN"$G2?$,5/$3$C$F$$$k$N$+(B?</a></h2>
-
-<p>CGI $B%W%m%0%i%_%s%0$K=OC#$9$k$H!"N"$G5/$3$C$F$$$k(B
-$B$3$H$K$D$$$F99$KM}2r$9$k$3$H$OM-1W$K$J$k$G$7$g$&!#%V%i%&%6$H(B
-$B%5!<%P$,$I$N$h$&$KAj8_DL?.$9$k$+$K$D$$$F$OFC$K$=$&$G$9!#$J$<$J$i!"(B
-``Hello, World.'' $B$r0u;z$9$k%W%m%0%i%`$r=q$/$3$H$O$^$3$H$K7k9=$G$9$,!"(B
-$B$=$l$OFC$KM-1W$G$O$"$j$^$;$s!#(B</p>
-
-<h3><a name="environmentvariables">$B4D6-JQ?t(B</a></h3>
-
-<p>$B4D6-JQ?t$O!"$"$J$?$,%3%s%T%e!<%?$r;H$&$H$-$KJU$j$KB8:_$7$F$$$kCM$G$9!#(B
-$B$=$l$i$O!"%Q%9(B ($B%3%^%s%I$r%?%$%W$7$?$H$-$K<B9T$9$k<B:]$N%U%!%$%k$r(B
-$BC5$7=P$9$H$3$m(B)$B!"%f!<%6L>!"C<Kv7?$J$I$N$h$&$JJXMx$J$b$N$G$9!#(B
-$BDL>o$N!"KhF|$N4D6-JQ?t$N40A4$J%j%9%H$rD4$Y$k$K$O!"%3%^%s%I%W%m%s%W%H$G(B 
-<code>env</code> $B$rF~NO$7$^$9!#(B</p>
-
-<p>CGI $B$N=hM}Cf!"%5!<%P$H%V%i%&%6$b4D6-JQ?t$r@_Dj$7!"$=$l$K$h$j(B
-$BAj8_$KDL?.$9$k$3$H$,$G$-$k$h$&$K$J$j$^$9!#(B
-$B$=$N4D6-JQ?t$O!"%V%i%&%6%?%$%W(B (Netscape, IE, Lynx)$B!"(B
-$B%5!<%P%?%$%W(B (Apache, IIS, WebSite)$B!"<B9T$5$l$F$$$k(B CGI $B%W%m%0%i%`$NL>A0(B
-$B$J$I$N$h$&$J$b$N$G$9!#(B</p>
-
-<p>$B$3$l$i$NJQ?t$O(B CGI $B%W%m%0%i%^$,;HMQ$9$k$3$H$,$G$-$^$9!#$=$7$F!"(B
-$B$=$l$O%/%i%$%"%s%H$H%5!<%P$NDL?.$NOC$NH>J,$G$9!#I,MW$JJQ?t$N40A4$J%j%9%H$O(B
-<a href="http://hoohoo.ncsa.uiuc.edu/cgi/env.html">http://hoohoo.ncsa.uiuc.edu/cgi/env.html</a>
-$B$K$"$j$^$9!#(B</p>
-
-<p>$B0J2<$NC1=c$J(B Perl CGI $B%W%m%0%i%`$O!"EO$5$l$kA4$F$N4D6-JQ?t$r(B
-$BI=<($7$^$9!#F1MM$N%W%m%0%i%`$O!"(BApache $B%G%#%9%H%j%S%e!<%7%g%s$N(B
-<code>cgi-bin</code> $B%G%#%l%/%H%j$KFs$D4^$^$l$F$$$^$9!#(B
-$B$$$/$D$+$NJQ?t$,I,?\$G$"$j!"$$$/$D$+$OG$0U$G$"$k$3$H$KCm0U$7$F$/$@$5$$!#(B
-$B$=$7$F!"8x<0$N%j%9%H$K$O$J$$$$$/$D$+$NJQ?t$,I=<($5$l$F$$$k$+$b$7$l$^$;$s!#(B
-$B$5$i$K!"(BApache $B$O%G%U%)%k%H$GMQ0U$5$l$F$$$k4pK\E*$J$b$N$K(B
-<a href="../env.html">$B$"$J$?<+?H$N4D6-JQ?t$r2C$($k(B</a>
-$B$?$a$N!"B?$/$N0[$J$kJ}K!$rMQ0U$7$F$7$^$9!#(B</p>
-
-<pre>
-     #!/usr/bin/perl
-     print "Content-type: text/html\n\n";
-     foreach $key (keys %ENV) {
-          print "$key --&gt; $ENV{$key}&lt;br&gt;";
-     }
-</pre>
-
-<h3><a name="stdinandstdout">STDIN $B$H(B STDOUT</a></h3>
-
-<p>$B%5!<%P$H%/%i%$%"%s%H4V$N$b$&0l$D$NDL?.$O!"I8=`F~NO(B (<code>STDIN</code>)$B$H(B
-$BI8=`=PNO(B (<code>STDOUT</code>) $B$rDL$8$F9T$J$o$l$^$9!#DL>o$NJ8L.$K$*$$$F!"(B
-<code>STDIN</code> $B$O%-!<%\!<%I$d%W%m%0%i%`$,F0:n$9$k$?$a$KM?$($i$l$k(B
-$B%U%!%$%k$r0UL#$7!"(B<code>STDOUT</code> $B$ODL>o%3%s%=!<%k$^$?$O%9%/%j!<%s$r(B
-$B0UL#$7$^$9!#(B</p>
-
-<p>$B%&%'%V%U%)!<%`$+$i(B CGI $B%W%m%0%i%`$X(B<code>POST</code> $B$7$?$H$-!"(B
-$B%U%)!<%`$N%G!<%?$OFCJL$J%U%)!<%^%C%H$GB+$M$i$l!"(B<code>STDIN</code> $B$r(B
-$BDL$7$F!"(BCGI $B%W%m%0%i%`$K0z$-EO$5$l$^$9!#%W%m%0%i%`$O%G!<%?$,%-!<%\!<%I(B
-$B$b$7$/$O%U%!%$%k$+$iMh$F$$$?$+$N$h$&$K=hM}$9$k$3$H$,$G$-$^$9!#(B</p>
-
-<P>$B!VFCJL$J%U%)!<%^%C%H!W$O$H$F$bC1=c$G$9!#%U%#!<%k%IL>$HCM$O%$%3!<%k(B
-(=) $B$G7k$P$l$^$9!#$=$7$FCM$NAH$O%"%s%Q%5%s%I(B (&amp;) $B$G(B
-$B7k$P$l$^$9!#%9%Z!<%9!"%"%s%Q%5%s%I!"%$%3!<%k$N$h$&$JLLE]$JJ8;z(B
-$B$O!"$=$l$i$,F0:n$rBLL\$K$7$J$$$h$&$K$=$NJ8;z$KAjEv$9$k(B 16 $B?J$KJQ49$5$l$^$9!#(B
-$BA4%G!<%?J8;zNs$O!"0J2<$N$h$&$K$J$j$^$9(B:</p>
-
-<pre>
-     name=Rich%20Bowen&amp;city=Lexington&amp;state=KY&amp;sidekick=Squirrel%20Monkey
-</pre>
-
-<p>$B;~!9!"$3$N$h$&$JJ8;zNs$,(B URL $B$KIU2C$5$l$k$N$r8+$k$G$7$g$&!#(B
-$B$=$N>l9g!"%5!<%P$O(B <code>QUERY_STRING</code> $B$H$$$&4D6-JQ?t$K$=$N(B
-$BJ8;zNs$rF~$l$^$9!#$=$l$O(B <code>GET</code> $B%j%/%(%9%H$H8F$P$l$^$9!#(B
-HTML $B%U%)!<%`$G$O!"%G!<%?$rEO$9$?$a$K(B <code>GET</code> $B$H(B <code>POST</code> 
-$B$N$I$A$i$r;HMQ$9$k$+$r!"(B
-<code>FORM</code>$B%?%0$N(B <code>METHOD</code> $BB0@-$N@_Dj$G;XDj$7$^$9!#(B</p>
-
-<p>CGI $B%W%m%0%i%`$O!"$=$NJ8;zNs$rLr$KN)$D>pJs$KJ,3d$9$k@UG$$,$"$j$^$9!#(B
-$B9,$$$K$b!"$=$N%G!<%?=hM}$r=u$1$k%i%$%V%i%j$d%b%8%e!<%k$,B8:_$7$^$9!#$3$l$i$O!"(B
-CGI $B%W%m%0%i%`$NB>$NLL$G$bF1MM$KLr$KN)$A$^$9!#(B</p>
-
-<hr>
-<h2><a name="cgimoduleslibraries">CGI $B%b%8%e!<%k(B/$B%i%$%V%i%j(B</a></h2>
-
-<p>CGI $B%W%m%0%i%`$r=q$/$H$-!"LLE]$J;E;v$NBgItJ,$r$7$F$/$l$k(B
-$B%3!<%I%i%$%V%i%j$^$?$O%b%8%e!<%k$r;H$&$3$H$r8!F$$9$Y$-$G$9!#(B
-$B$3$l$O%(%i!<$r8:$i$7!"Aa$$3+H/$K$D$J$,$j$^$9!#(B</p>
-
-<p>Perl $B$G(B CGI $B%W%m%0%i%`$r=q$$$F$$$k$J$i!"%b%8%e!<%k$O(B
-<a href="http://www.cpan.org/">CPAN</a> $B$GDs6!$5$l$F$$$^$9!#$3$NL\E*$N$?$a$N(B
-$B:G$bIa5Z$7$F$$$k%b%8%e!<%k$O(B CGI.pm $B$G$9!#(B
-CGI::Lite $B$b8!F$$7$^$7$g$&!#$3$l$O!"$[$H$s$I$N%W%m%0%i%`$K$*$$$FI,MW$H$9$k$9$Y$F$N5!G=$N:G>.%;%C%H$N<BAu$G$9!#(B</p>
-
-<p>C $B$G(B CGI $B%W%m%0%i%`$r=q$$$F$$$k$J$i!"$$$m$$$m$J(B
-$B%*%W%7%g%s$,$"$j$^$9!#$3$l$i$NFb$N0l$D$O(B
-<a href="http://www.boutell.com/cgic/">http://www.boutell.com/cgic/</a>
-$B$GDs6!$5$l$F$$$k(B CGIC $B%i%$%V%i%j$G$9!#(B</p>
-
-<hr>
-<h2><a name="formoreinformation">$B99$J$k>pJs(B</a></h2>
-
-<p>CGI $B$K4X$9$k>pJs$O%&%'%V$G?tB?$/Ds6!$5$l$F$$$^$9!#(BCGI $B$NLdBj$K$D$$$F$O(B
-Usenet $B$N(B comp.infosystems.www.authoring.cgi $B$G!"B>$N%f!<%6$H(B
-$BO@5D$9$k$3$H$,$G$-$^$9!#(BHTML Writers Guide $B$N(B -servers$B%a!<%j%s%0%j%9%H(B
-$B$O!"$"$J$?$N<ALd$K2sEz$7$F$/$l$k0NBg$J%j%=!<%9$G$9!#(B
-<a href="http://www.hwg.org/lists/hwg-servers/">http://www.hwg.org/lists/hwg-servers/</a>
-$B$G99$KB?$/$rC5$7=P$9$3$H$,(B
-$B$G$-$^$9!#(B</p>
-
-<p>$B$=$7$F$b$A$m$s!"$*$=$i$/(B CGI $B%W%m%0%i%`$NF0:n$K4X$9$k>\:Y$N(B
-$BA4$F$,5-=R$5$l$F$$$k(B CGI $B$N;EMM$rFI$`$Y$-$G$9!#%*%j%8%J%k%P!<%8%g%s$r(B
-<a href="http://hoohoo.ncsa.uiuc.edu/cgi/interface.html">NCSA</a> $B$G!"(B
-$B%"%C%W%G!<%H$5$l$?%I%i%U%H$r(B
-<a href="http://web.golux.com/coar/cgi/">Common Gateway Interface RFC
-$B%W%m%8%'%/%H(B</a>$B$G;2>H$9$k$3$H$,$G$-$^$9!#(B</p>
-
-<p>CGI $B$NLdBj$K$D$$$F!"2C$o$C$F$$$k%a!<%j%s%0%j%9%H$^$?$O%K%e!<%9(B
-$B%0%k!<%W$K<ALd$rAw$k$H$-!"5/$3$C$?$b$N!"5/$3$C$F$[$7$$$3$H!"(B
-$B<B:]$K5/$3$C$?$3$H$,$I$&0c$&$+!";HMQ$7$F$$$k%5!<%P!"(B
-CGI $B%W%m%0%i%`$r5-=R$7$F$$$k8@8l$K4X$9$k==J,$J>pJs$H!"(B
-$B2DG=$G$"$l$PLdBj$N%3!<%I$rDs6!$9$k$h$&$K$7$F$/$@$5$$!#(B
-$B$=$&$9$k$3$H$G!"LdBj$,$h$j4VC1$K8+$D$+$k$h$&$K$J$j$^$9!#(B</p>
-
-<p>Apache $B$N%=!<%9%3!<%I$K$*$$$FLdBj$rH/8+$7$?$3$H$r3N?.$7$F$$$J$$(B
-$B8B$j!"(BCGI $B$NLdBj$K4X$9$k<ALd$r(B Apache $B%P%0%G!<%?%Y!<%9$KAw$k$Y$-$G$J$$(B
-$B$3$H$KCmL\$7$F$/$@$5$$!#(B</p>
-
-<!--#include virtual="footer.html" -->
-
-</body>
-</html>
-
diff --git a/docs/manual/howto/footer.html b/docs/manual/howto/footer.html
deleted file mode 100644
index 965ff02..0000000
--- a/docs/manual/howto/footer.html
+++ /dev/null
@@ -1,7 +0,0 @@
-    <hr />
-
-    <h3 align="CENTER">Apache HTTP Server Version 2.0</h3>
-    <a href="./"><img src="../images/index.gif" alt="Index" /></a>
-    <a href="../"><img src="../images/home.gif" alt="Home" /></a>
-
-
diff --git a/docs/manual/howto/header.html b/docs/manual/howto/header.html
deleted file mode 100644
index 749461d..0000000
--- a/docs/manual/howto/header.html
+++ /dev/null
@@ -1,6 +0,0 @@
-    <div align="CENTER">
-      <img src="../images/sub.gif" alt="[APACHE DOCUMENTATION]" /> 
-
-      <h3>Apache HTTP Server Version 2.0</h3>
-    </div>
-
diff --git a/docs/manual/howto/ssi.html.en b/docs/manual/howto/ssi.html.en
deleted file mode 100644
index eef2ed2..0000000
--- a/docs/manual/howto/ssi.html.en
+++ /dev/null
@@ -1,548 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta name="generator" content="HTML Tidy, see www.w3.org" />
-
-    <title>Apache Tutorial: Introduction to Server Side
-    Includes</title>
-    <link rev="made" href="mailto:rbowen@rcbowen.com" />
-  </head>
-  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-
-  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-  vlink="#000080" alink="#FF0000">
-    <!--#include virtual="header.html" -->
-
-    <h1 align="CENTER">Apache Tutorial: Introduction to Server Side
-    Includes</h1>
-    <a id="__index__" name="__index__"></a> <!-- INDEX BEGIN -->
-     
-
-    <ul>
-      <li><a
-      href="#apachetutorial:introductiontoserversideincludes">Apache
-      Tutorial: Introduction to Server Side Includes</a></li>
-
-      <li><a href="#whataressi">What are SSI?</a></li>
-
-      <li><a href="#configuringyourservertopermitssi">Configuring
-      your server to permit SSI</a></li>
-
-      <li>
-        <a href="#basicssidirectives">Basic SSI directives</a> 
-
-        <ul>
-          <li><a href="#today'sdate">Today's date</a></li>
-
-          <li><a href="#modificationdateofthefile">Modification
-          date of the file</a></li>
-
-          <li><a href="#includingtheresultsofacgiprogram">Including
-          the results of a CGI program</a></li>
-        </ul>
-      </li>
-
-      <li>
-        <a href="#additionalexamples">Additional examples</a> 
-
-        <ul>
-          <li><a href="#whenwasthisdocumentmodified">When was this
-          document modified?</a></li>
-
-          <li><a href="#includingastandardfooter">Including a
-          standard footer</a></li>
-
-          <li><a href="#whatelsecaniconfig">What else can I
-          config?</a></li>
-
-          <li><a href="#executingcommands">Executing
-          commands</a></li>
-        </ul>
-      </li>
-
-      <li>
-        <a href="#advancedssitechniques">Advanced SSI
-        techniques</a> 
-
-        <ul>
-          <li><a href="#settingvariables">Setting
-          variables</a></li>
-
-          <li><a href="#conditionalexpressions">Conditional
-          expressions</a></li>
-        </ul>
-      </li>
-
-      <li><a href="#conclusion">Conclusion</a></li>
-    </ul>
-    <!-- INDEX END -->
-    <hr />
-
-    <h2><a id="apachetutorial:introductiontoserversideincludes"
-    name="apachetutorial:introductiontoserversideincludes">Apache
-    Tutorial: Introduction to Server Side Includes</a></h2>
-
-    <table border="1">
-      <tr>
-        <td valign="top"><strong>Related Modules</strong><br />
-         <br />
-         <a href="../mod/mod_include.html">mod_include</a><br />
-         <a href="../mod/mod_cgi.html">mod_cgi</a><br />
-         <a href="../mod/mod_expires.html">mod_expires</a><br />
-         </td>
-
-        <td valign="top"><strong>Related Directives</strong><br />
-         <br />
-         <a href="../mod/core.html#options">Options</a><br />
-         <a
-        href="../mod/mod_include.html#xbithack">XBitHack</a><br />
-         <a href="../mod/mod_mime.html#addtype">AddType</a><br />
-         <a
-        href="../mod/core.html.html#setoutputfilter">SetOutputFilter</a><br />
-         <a
-        href="../mod/mod_setenvif.html#BrowserMatchNoCase">BrowserMatchNoCase</a><br />
-         </td>
-      </tr>
-    </table>
-
-    <p>This article deals with Server Side Includes, usually called
-    simply SSI. In this article, I'll talk about configuring your
-    server to permit SSI, and introduce some basic SSI techniques
-    for adding dynamic content to your existing HTML pages.</p>
-
-    <p>In the latter part of the article, we'll talk about some of
-    the somewhat more advanced things that can be done with SSI,
-    such as conditional statements in your SSI directives.</p>
-    <hr />
-
-    <h2><a id="whataressi" name="whataressi">What are SSI?</a></h2>
-
-    <p>SSI (Server Side Includes) are directives that are placed in
-    HTML pages, and evaluated on the server while the pages are
-    being served. They let you add dynamically generated content to
-    an existing HTML page, without having to serve the entire page
-    via a CGI program, or other dynamic technology.</p>
-
-    <p>The decision of when to use SSI, and when to have your page
-    entirely generated by some program, is usually a matter of how
-    much of the page is static, and how much needs to be
-    recalculated every time the page is served. SSI is a great way
-    to add small pieces of information, such as the current time.
-    But if a majority of your page is being generated at the time
-    that it is served, you need to look for some other
-    solution.</p>
-    <hr />
-
-    <h2><a id="configuringyourservertopermitssi"
-    name="configuringyourservertopermitssi">Configuring your server
-    to permit SSI</a></h2>
-
-    <p>To permit SSI on your server, you must have the following
-    directive either in your <code>httpd.conf</code> file, or in a
-    <code>.htaccess</code> file:</p>
-<pre>
-        Options +Includes
-</pre>
-
-    <p>This tells Apache that you want to permit files to be parsed
-    for SSI directives.  Note that most configurations contain
-    multiple <a href="../mod/core.html#options">Options</a> directives
-    that can override each other.  You will probably need to apply the
-    <code>Options</code> to the specific directory where you want SSI
-    enabled in order to assure that it gets evaluated last.</p>
-
-    <p>Not just any file is parsed for SSI directives. You have to
-    tell Apache which files should be parsed. There are two ways to
-    do this. You can tell Apache to parse any file with a
-    particular file extension, such as <code>.shtml</code>, with
-    the following directives:</p>
-<pre>
-        AddType text/html .shtml
-	AddOutputFilter INCLUDES .shtml
-</pre>
-
-    <p>One disadvantage to this approach is that if you wanted to
-    add SSI directives to an existing page, you would have to
-    change the name of that page, and all links to that page, in
-    order to give it a <code>.shtml</code> extension, so that those
-    directives would be executed.</p>
-
-    <p>The other method is to use the <code>XBitHack</code>
-    directive:</p>
-<pre>
-        XBitHack on
-</pre>
-
-    <p><code>XBitHack</code> tells Apache to parse files for SSI
-    directives if they have the execute bit set. So, to add SSI
-    directives to an existing page, rather than having to change
-    the file name, you would just need to make the file executable
-    using <code>chmod</code>.</p>
-<pre>
-        chmod +x pagename.html
-</pre>
-
-    <p>A brief comment about what not to do. You'll occasionally
-    see people recommending that you just tell Apache to parse all
-    <code>.html</code> files for SSI, so that you don't have to
-    mess with <code>.shtml</code> file names. These folks have
-    perhaps not heard about <code>XBitHack</code>. The thing to
-    keep in mind is that, by doing this, you're requiring that
-    Apache read through every single file that it sends out to
-    clients, even if they don't contain any SSI directives. This
-    can slow things down quite a bit, and is not a good idea.</p>
-
-    <p>Of course, on Windows, there is no such thing as an execute
-    bit to set, so that limits your options a little.</p>
-
-    <p>In its default configuration, Apache does not send the last
-    modified date or content length HTTP headers on SSI pages,
-    because these values are difficult to calculate for dynamic
-    content. This can prevent your document from being cached, and
-    result in slower perceived client performance. There are two
-    ways to solve this:</p>
-
-    <ol>
-      <li>Use the <code>XBitHack Full</code> configuration. This
-      tells Apache to determine the last modified date by looking
-      only at the date of the originally requested file, ignoring
-      the modification date of any included files.</li>
-
-      <li>Use the directives provided by <a
-      href="../mod/mod_expires.html">mod_expires</a> to set an
-      explicit expiration time on your files, thereby letting
-      browsers and proxies know that it is acceptable to cache
-      them.</li>
-    </ol>
-    <hr />
-
-    <h2><a id="basicssidirectives" name="basicssidirectives">Basic
-    SSI directives</a></h2>
-
-    <p>SSI directives have the following syntax:</p>
-<pre>
-        &lt;!--#element attribute=value attribute=value ... --&gt;
-</pre>
-
-    <p>It is formatted like an HTML comment, so if you don't have
-    SSI correctly enabled, the browser will ignore it, but it will
-    still be visible in the HTML source. If you have SSI correctly
-    configured, the directive will be replaced with its
-    results.</p>
-
-    <p>The element can be one of a number of things, and we'll talk
-    some more about most of these in the next installment of this
-    series. For now, here are some examples of what you can do with
-    SSI</p>
-
-    <h3><a id="today'sdate" name="today'sdate">Today's
-    date</a></h3>
-<pre>
-        &lt;!--#echo var="DATE_LOCAL" --&gt;
-</pre>
-
-    <p>The <code>echo</code> element just spits out the value of a
-    variable. There are a number of standard variables, which
-    include the whole set of environment variables that are
-    available to CGI programs. Also, you can define your own
-    variables with the <code>set</code> element.</p>
-
-    <p>If you don't like the format in which the date gets printed,
-    you can use the <code>config</code> element, with a
-    <code>timefmt</code> attribute, to modify that formatting.</p>
-<pre>
-        &lt;!--#config timefmt="%A %B %d, %Y" --&gt;
-        Today is &lt;!--#echo var="DATE_LOCAL" --&gt;
-</pre>
-
-    <h3><a id="modificationdateofthefile"
-    name="modificationdateofthefile">Modification date of the
-    file</a></h3>
-<pre>
-        This document last modified &lt;!--#flastmod file="index.html" --&gt;
-</pre>
-
-    <p>This element is also subject to <code>timefmt</code> format
-    configurations.</p>
-
-    <h3><a id="includingtheresultsofacgiprogram"
-    name="includingtheresultsofacgiprogram">Including the results
-    of a CGI program</a></h3>
-
-    <p>This is one of the more common uses of SSI - to output the
-    results of a CGI program, such as everybody's favorite, a ``hit
-    counter.''</p>
-<pre>
-        &lt;!--#include virtual="/cgi-bin/counter.pl" --&gt;
-</pre>
-    <hr />
-
-    <h2><a id="additionalexamples"
-    name="additionalexamples">Additional examples</a></h2>
-
-    <p>Following are some specific examples of things you can do in
-    your HTML documents with SSI.</p>
-    <hr />
-
-    <h2><a id="whenwasthisdocumentmodified"
-    name="whenwasthisdocumentmodified">When was this document
-    modified?</a></h2>
-
-    <p>Earlier, we mentioned that you could use SSI to inform the
-    user when the document was most recently modified. However, the
-    actual method for doing that was left somewhat in question. The
-    following code, placed in your HTML document, will put such a
-    time stamp on your page. Of course, you will have to have SSI
-    correctly enabled, as discussed above.</p>
-<pre>
-        &lt;!--#config timefmt="%A %B %d, %Y" --&gt;
-        This file last modified &lt;!--#flastmod file="ssi.shtml" --&gt;
-</pre>
-
-    <p>Of course, you will need to replace the
-    <code>ssi.shtml</code> with the actual name of the file that
-    you're referring to. This can be inconvenient if you're just
-    looking for a generic piece of code that you can paste into any
-    file, so you probably want to use the
-    <code>LAST_MODIFIED</code> variable instead:</p>
-<pre>
-        &lt;!--#config timefmt="%D" --&gt;
-        This file last modified &lt;!--#echo var="LAST_MODIFIED" --&gt;
-</pre>
-
-    <p>For more details on the <code>timefmt</code> format, go to
-    your favorite search site and look for <code>ctime</code>. The
-    syntax is the same.</p>
-    <hr />
-
-    <h2><a id="includingastandardfooter"
-    name="includingastandardfooter">Including a standard
-    footer</a></h2>
-
-    <p>If you are managing any site that is more than a few pages,
-    you may find that making changes to all those pages can be a
-    real pain, particularly if you are trying to maintain some kind
-    of standard look across all those pages.</p>
-
-    <p>Using an include file for a header and/or a footer can
-    reduce the burden of these updates. You just have to make one
-    footer file, and then include it into each page with the
-    <code>include</code> SSI command. The <code>include</code>
-    element can determine what file to include with either the
-    <code>file</code> attribute, or the <code>virtual</code>
-    attribute. The <code>file</code> attribute is a file path,
-    <em>relative to the current directory</em>. That means that it
-    cannot be an absolute file path (starting with /), nor can it
-    contain ../ as part of that path. The <code>virtual</code>
-    attribute is probably more useful, and should specify a URL
-    relative to the document being served. It can start with a /,
-    but must be on the same server as the file being served.</p>
-<pre>
-        &lt;!--#include virtual="/footer.html" --&gt;
-</pre>
-
-    <p>I'll frequently combine the last two things, putting a
-    <code>LAST_MODIFIED</code> directive inside a footer file to be
-    included. SSI directives can be contained in the included file,
-    and includes can be nested - that is, the included file can
-    include another file, and so on.</p>
-    <hr />
-
-    <h2><a id="whatelsecaniconfig" name="whatelsecaniconfig">What
-    else can I config?</a></h2>
-
-    <p>In addition to being able to <code>config</code> the time
-    format, you can also <code>config</code> two other things.</p>
-
-    <p>Usually, when something goes wrong with your SSI directive,
-    you get the message</p>
-<pre>
-        [an error occurred while processing this directive]
-</pre>
-
-    <p>If you want to change that message to something else, you
-    can do so with the <code>errmsg</code> attribute to the
-    <code>config</code> element:</p>
-<pre>
-        &lt;!--#config errmsg="[It appears that you don't know how to use SSI]" --&gt;
-</pre>
-
-    <p>Hopefully, end users will never see this message, because
-    you will have resolved all the problems with your SSI
-    directives before your site goes live. (Right?)</p>
-
-    <p>And you can <code>config</code> the format in which file
-    sizes are returned with the <code>sizefmt</code> attribute. You
-    can specify <code>bytes</code> for a full count in bytes, or
-    <code>abbrev</code> for an abbreviated number in Kb or Mb, as
-    appropriate.</p>
-    <hr />
-
-    <h2><a id="executingcommands"
-    name="executingcommands">Executing commands</a></h2>
-
-    <p>I expect that I'll have an article some time in the coming
-    months about using SSI with small CGI programs. For now, here's
-    something else that you can do with the <code>exec</code>
-    element. You can actually have SSI execute a command using the
-    shell (<code>/bin/sh</code>, to be precise - or the DOS shell,
-    if you're on Win32). The following, for example, will give you
-    a directory listing.</p>
-<pre>
-        &lt;pre&gt;
-        &lt;!--#exec cmd="ls" --&gt;
-        &lt;/pre&gt;
-</pre>
-
-    <p>or, on Windows</p>
-<pre>
-        &lt;pre&gt;
-        &lt;!--#exec cmd="dir" --&gt;
-        &lt;/pre&gt;
-</pre>
-
-    <p>You might notice some strange formatting with this directive
-    on Windows, because the output from <code>dir</code> contains
-    the string ``&lt;<code>dir</code>&gt;'' in it, which confuses
-    browsers.</p>
-
-    <p>Note that this feature is exceedingly dangerous, as it will
-    execute whatever code happens to be embedded in the
-    <code>exec</code> tag. If you have any situation where users
-    can edit content on your web pages, such as with a
-    ``guestbook'', for example, make sure that you have this
-    feature disabled. You can allow SSI, but not the
-    <code>exec</code> feature, with the <code>IncludesNOEXEC</code>
-    argument to the <code>Options</code> directive.</p>
-    <hr />
-
-    <h2><a id="advancedssitechniques"
-    name="advancedssitechniques">Advanced SSI techniques</a></h2>
-
-    <p>In addition to spitting out content, Apache SSI gives you
-    the option of setting variables, and using those variables in
-    comparisons and conditionals.</p>
-
-    <h3><a id="caveat" name="caveat">Caveat</a></h3>
-
-    <p>Most of the features discussed in this article are only
-    available to you if you are running Apache 1.2 or later. Of
-    course, if you are not running Apache 1.2 or later, you need to
-    upgrade immediately, if not sooner. Go on. Do it now. We'll
-    wait.</p>
-    <hr />
-
-    <h2><a id="settingvariables" name="settingvariables">Setting
-    variables</a></h2>
-
-    <p>Using the <code>set</code> directive, you can set variables
-    for later use. We'll need this later in the discussion, so
-    we'll talk about it here. The syntax of this is as follows:</p>
-<pre>
-        &lt;!--#set var="name" value="Rich" --&gt;
-</pre>
-
-    <p>In addition to merely setting values literally like that,
-    you can use any other variable, including, for example,
-    environment variables, or some of the variables we discussed in
-    the last article (like <code>LAST_MODIFIED</code>, for example)
-    to give values to your variables. You will specify that
-    something is a variable, rather than a literal string, by using
-    the dollar sign ($) before the name of the variable.</p>
-<pre>
-        &lt;!--#set var="modified" value="$LAST_MODIFIED" --&gt;
-</pre>
-
-    <p>To put a literal dollar sign into the value of your
-    variable, you need to escape the dollar sign with a
-    backslash.</p>
-<pre>
-        &lt;!--#set var="cost" value="\$100" --&gt;
-</pre>
-
-    <p>Finally, if you want to put a variable in the midst of a
-    longer string, and there's a chance that the name of the
-    variable will run up against some other characters, and thus be
-    confused with those characters, you can place the name of the
-    variable in braces, to remove this confusion. (It's hard to
-    come up with a really good example of this, but hopefully
-    you'll get the point.)</p>
-<pre>
-        &lt;!--#set var="date" value="${DATE_LOCAL}_${DATE_GMT}" --&gt;
-</pre>
-    <hr />
-
-    <h2><a id="conditionalexpressions"
-    name="conditionalexpressions">Conditional expressions</a></h2>
-
-    <p>Now that we have variables, and are able to set and compare
-    their values, we can use them to express conditionals. This
-    lets SSI be a tiny programming language of sorts.
-    <code>mod_include</code> provides an <code>if</code>,
-    <code>elif</code>, <code>else</code>, <code>endif</code>
-    structure for building conditional statements. This allows you
-    to effectively generate multiple logical pages out of one
-    actual page.</p>
-
-    <p>The structure of this conditional construct is:</p>
-<pre>
-        &lt;!--#if expr="test_condition" --&gt;
-    &lt;!--#elif expr="test_condition" --&gt;
-    &lt;!--#else --&gt;
-    &lt;!--#endif --&gt;
-</pre>
-
-    <p>A <em>test_condition</em> can be any sort of logical
-    comparison - either comparing values to one another, or testing
-    the ``truth'' of a particular value. (A given string is true if
-    it is nonempty.) For a full list of the comparison operators
-    available to you, see the <code>mod_include</code>
-    documentation. Here are some examples of how one might use this
-    construct.</p>
-
-    <p>In your configuration file, you could put the following
-    line:</p>
-<pre>
-        BrowserMatchNoCase macintosh Mac
-        BrowserMatchNoCase MSIE InternetExplorer
-</pre>
-
-    <p>This will set environment variables ``Mac'' and
-    ``InternetExplorer'' to true, if the client is running Internet
-    Explorer on a Macintosh.</p>
-
-    <p>Then, in your SSI-enabled document, you might do the
-    following:</p>
-<pre>
-        &lt;!--#if expr="${Mac} &amp;&amp; ${InternetExplorer}" --&gt;
-        Apologetic text goes here
-        &lt;!--#else --&gt;
-        Cool JavaScript code goes here
-        &lt;!--#endif --&gt;
-</pre>
-
-    <p>Not that I have anything against IE on Macs - I just
-    struggled for a few hours last week trying to get some
-    JavaScript working on IE on a Mac, when it was working
-    everywhere else. The above was the interim workaround.</p>
-
-    <p>Any other variable (either ones that you define, or normal
-    environment variables) can be used in conditional statements.
-    With Apache's ability to set environment variables with the
-    <code>SetEnvIf</code> directives, and other related directives,
-    this functionality can let you do some pretty involved dynamic
-    stuff without ever resorting to CGI.</p>
-    <hr />
-
-    <h2><a id="conclusion" name="conclusion">Conclusion</a></h2>
-
-    <p>SSI is certainly not a replacement for CGI, or other
-    technologies used for generating dynamic web pages. But it is a
-    great way to add small amounts of dynamic content to pages,
-    without doing a lot of extra work.</p>
-    <!--#include virtual="footer.html" -->
-  </body>
-</html>
-
diff --git a/docs/manual/howto/ssi.html.ja.jis b/docs/manual/howto/ssi.html.ja.jis
deleted file mode 100644
index eafa315..0000000
--- a/docs/manual/howto/ssi.html.ja.jis
+++ /dev/null
@@ -1,501 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<html>
-<head>
-<title>Apache $B%A%e!<%H%j%"%k(B: Server Side Includes $BF~Lg(B</title>
-<!-- link rev="made" href="mailto:rbowen@rcbowen.com" -->
-</head>
-<!-- English revision: 1.7 -->
-<!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-<body bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#000080"
-alink="#FF0000">
-<!--#include virtual="header.html" -->
-<h1 align="CENTER">Apache $B%A%e!<%H%j%"%k(B: Server Side Includes $BF~Lg(B</h1>
-
-<a name="__index__"></a> <!-- INDEX BEGIN -->
- 
-
-<ul>
-<li><a href="#apachetutorial:introductiontoserversideincludes">Apache
- $B%A%e!<%H%j%"%k(B: Server Side Includes $BF~Lg(B</a></li>
-
-<li><a href="#whataressi">SSI $B$H$O(B?</a></li>
-
-<li><a href="#configuringyourservertopermitssi">SSI $B$r5v2D$9$k$?$a$N(B
-$B%5!<%P$N@_Dj(B</a></li>
-
-<li><a href="#basicssidirectives">$B4pK\E*$J(B SSI $B%G%#%l%/%F%#%V(B</a>
-
-<ul>
-  <li><a href="#today'sdate">$B:#F|$NF|IU(B</a></li>
-
-  <li><a href="#modificationdateofthefile">$B%U%!%$%k$NJQ99F|(B</a></li>
-
-  <li><a href="#includingtheresultsofacgiprogram">CGI $B%W%m%0%i%`$N7k2L$r(B
-$B<h$j9~$`(B</a></li>
-</ul>
-</li>
-
-<li><a href="#additionalexamples">$BDI2C$NNc(B</a>
-
-<ul>
-<li><a href="#whenwasthisdocumentmodified">$B$$$D$3$N%I%-%e%a%s%H$O(B
-$B=$@5$5$l$?$N$+(B?</a></li>
-
-<li><a href="#includingastandardfooter">$BI8=`$N%U%C%?$rA^F~$9$k(B</a></li>
-
-<li><a href="#whatelsecaniconfig">$BB>$K2?$,@_Dj$G$-$k$N$+(B?</a></li>
-
-<li><a href="#executingcommands">$B%3%^%s%I$N<B9T(B</a></li>
-</ul>
-</li>
-
-<li><a href="#advancedssitechniques">$B9bEY$J(B SSI $B%F%/%K%C%/(B</a>
-
-<ul>
-<li><a href="#settingvariables">$BJQ?t$r@_Dj$9$k(B</a></li>
-
-<li><a href="#conditionalexpressions">$B>r7o<0(B</a></li>
-</ul>
-</li>
-
-<li><a href="#conclusion">$B=*$o$j$K(B</a></li>
-</ul>
-
-<!-- INDEX END -->
-<hr>
-<h2><a name=
-"apachetutorial:introductiontoserversideincludes">Apache
-$B%A%e!<%H%j%"%k(B: Server Side Includes $BF~Lg(B</a></h2>
-
-<table border="1">
-<tr>
-<td valign="top"><strong>$B4XO"%b%8%e!<%k(B</strong><br>
-<br>
- <a href="../mod/mod_include.html">mod_include</a><br>
-<a href="../mod/mod_cgi.html">mod_cgi</a><br>
-<a href="../mod/mod_expires.html">mod_expires</a><br>
- </td>
-<td valign="top"><strong>$B4XO"%G%#%l%/%F%#%V(B</strong><br>
-<br>
- <a href="../mod/core.html#options">Options</a><br>
-<a href="../mod/mod_include.html#xbithack">XBitHack</a><br>
-<a href="../mod/mod_mime.html#addtype">AddType</a><br>
-<a href="../mod/mod_mime.html#addhandler">AddHandler</a><br>
-<a href=
-"../mod/mod_setenvif.html#BrowserMatchNoCase">BrowserMatchNoCase</a><br>
-
- </td>
-</tr>
-</table>
-
-<p>$B$3$NJ8=q$O:G=i!"(BApache Today (http://www.apachetoday.com/) $B$K;02s$NO":\5-;v$H$7$F7G:\$5$l$^$7$?!#(B
-$B$3$3$G$O!"(BApcheToday $B$H(B Internet.com $B$H$N6(Dj$K$h$j:\$;$F$$$^$9!#(B</p>
-
-<p>$B$3$N5-;v$O!"DL>o$OC1$K(B SSI $B$H8F$P$l$k(B Server Side Includes $B$r(B
-$B07$$$^$9!#$3$N5-;v$K$*$$$F$O!"%5!<%P$G$N(B SSI $B$r5v2D$9$k$?$a$N@_Dj$H!"(B
-$B8=:_$N(B HTML $B%Z!<%8$KF0E*$J%3%s%F%s%D$r2C$($k$?$a$N$$$/$D$+$N4pK\E*$J(B
-SSI $B5;=Q$r>R2p$7$^$9!#(B</p>
-
-<p>$B5-;v$N8eH>$G$O!"(BSSI $B%G%#%l%/%F%#%V$G(B
-SSI $B$H6&$K<B9T$9$k$3$H$,$G$-$k>r7oJ8$N$h$&$J4vJ,9bEY$J;vJA$K(B
-$B$D$$$F=R$Y$F$$$^$9!#(B</p>
-
-<hr>
-<h2><a name="whataressi">SSI $B$H$O(B?</a></h2>
-
-<p>SSI (Server Side Includes) $B$O!"(BHTML $B%Z!<%8Cf$KG[CV$5$l$k%G%#%l%/%F%#%V$G$"$j!"(B
-$B%5!<%P$G%Z!<%8$rDs6!$9$k;~$KI>2A$5$l$^$9!#(B
-SSI $B$O!"(BCGI $B%W%m%0%i%`$d$=$NB>$NF0E*$J5;=Q$GA4$F$N%Z!<%8$rDs6!(B
-$B$;$:$K!"F0E*$K@8@.$5$l$?%3%s%F%s%D$r8=:_$N(B HTML $B%Z!<%8$K(B
-$B2C$($^$9!#(B</p>
-
-<p>$B$I$&$$$&>l9g$K(B SSI $B$r;H$$!"$I$&$$$&>l9g$K%W%m%0%i%`$G%Z!<%8$r40A4$K@8@.$9$k$+(B
-$B$O!"%Z!<%8$N$&$A$I$NDxEY$,@EE*$G$"$j!"%Z!<%8$,Ds6!$5$l$k$?$S$K(B
-$B:F7W;;$9$kI,MW$,$I$NDxEY$"$k$+$GDL>o$O7hDj$7$^$9!#(BSSI $B$O8=:_;~9o$N$h$&$J(B
-$B>.$5$$>pJs$r2C$($k$K$O$&$C$F$D$1$NJ}K!$G$9!#(B
-$B$7$+$7!"$=$N%Z!<%8$N$[$H$s$I$NItJ,$,Ds6!;~$K@8@.$5$l$k>l9g$O!"(B
-$BB>$NJ}K!$rC5$9I,MW$,$"$j$^$9!#(B</p>
-
-<hr>
-<h2><a name="configuringyourservertopermitssi">SSI $B$r5v2D$9$k$?$a$N(B
-$B%5!<%P$N@_Dj(B</a></h2>
-
-<p>$B%5!<%P$G(B SSI $B5v2D$9$k$K$O!"(B<code>httpd.conf</code> $B%U%!%$%k(B
-$B$^$?$O(B <code>.htaccess</code> $B%U%!%$%k$K<!$N%G%#%l%/%F%#%V$r;XDj$9$kI,MW$,$"$j$^$9(B:</p>
-
-<pre>
-        Options +Includes
-</pre>
-
-<p>$B$3$N;XDj$O!"%U%!%$%k$r(B SSI $B%G%#%l%/%F%#%V$G2r@O$5$;$k$3$H$r5v2D$9$k(B
-$B$H$$$&$3$H$r(B Apache $B$KEA$($^$9!#(B</p>
-
-<p>$BA4$F$N%U%!%$%k$,(B SSI $B%G%#%l%/%F%#%V$G2r@O$5$l$k$H$$$&$o$1$G$O$"$j$^$;$s!#(B
-$B$I$N%U%!%$%k$,2r@O$5$l$k$+$r(B Apache $B$KEA$($kI,MW$,$"$j$^$9!#$3$l$r(B
-$B9T$J$&$K$OFs$DJ}K!$,$"$j$^$9!#<!$N%G%#%l%/%F%#%V$r;H$&$3$H$G!"(B
-$BNc$($P(B <code>.shtml</code> $B$N$h$&$JFCJL$J%U%!%$%k3HD%;R$r;}$D%U%!%$%k$r(B
-$B2r@O$9$k$h$&(B Apache $B$KEA$($k$3$H$,$G$-$^$9(B:</p>
-
-<pre>
-        AddType text/html .shtml
-        AddHandler server-parsed .shtml
-</pre>
-
-<p>$B$3$NJ}K!$N7gE@$O!"$b$78=:_$N%Z!<%8$K(B SSI 
-$B%G%#%l%/%F%#%V$r2C$($?$$>l9g!"$=$l$i$N%G%#%l%/%F%#%V$,<B9T$5$l$k(B
-$B$h$&$K(B <code>.shtml</code> $B3HD%;R$K$9$k$?$a!"$=$N%Z!<%8$NL>A0$H!"(B
-$B$=$N%Z!<%8$X$NA4$F$N%j%s%/$rJQ99$7$J$1$l$P$J$i$J$$$3$H$G$9!#(B</p>
-
-<p>$B$b$&0l$D$NJ}K!$O!"(B<code>XBitHack</code> $B%G%#%l%/%F%#%V$r;HMQ$9$k$3$H$G$9(B:</p>
-
-<pre>
-        XBitHack on
-</pre>
-
-<p><code>XBitHack</code> $B$O!"%U%!%$%k$N<B9T%S%C%H$,N)$C$F$$$k>l9g!"(B
-SSI $B%G%#%l%/%F%#%V$K$h$j2r@O$9$k$3$H$r(B Apache $B$KEA$($^$9!#=>$C$F!"(B
-SSI $B%G%#%l%/%F%#%V$r8=:_$N%Z!<%8$K2C$($k$?$a$K$O!"%U%!%$%kL>$rJQ99$7$J$/$F$b$h$/!"(B
-$BC1$K(B <code>chmod</code> $B$r;HMQ$7$F%U%!%$%k$r<B9T2DG=$K$9$k(B
-$B$@$1$G:Q$_$^$9!#(B</p>
-
-<pre>
-        chmod +x pagename.html
-</pre>
-
-<p>$B9T$J$&$Y$-$G$O$J$$$3$H$K4X$9$kC;$$%3%a%s%H!#;~!9C/$+$,!"(B
-$BA4$F$N(B <code>.html</code> $B%U%!%$%k$r(B SSI $B$G2r@O$9$k$h$&(B Apache $B$KEA$($l$P!"(B
-$B$o$6$o$6(B <code>.shtml</code> $B$H$$$&%U%!%$%kL>$K$9$kI,MW$,$J$$$H$$$C$F(B
-$BA&$a$k$N$r8+$k$3$H$G$7$g$&!#$3$&$$$&?M$?$A$O!"$*$=$i$/(B <code>XBitHack</code>
-$B$K$D$$$FJ9$$$?$3$H$,$J$$$N$G$7$g$&!#$3$NJ}K!$K$D$$$FCm0U$9$k$3$H$O!"(B
-$B$?$H$((B SSI $B%G%#%l%/%F%#%V$rA4$/4^$^$J$$>l9g$G$b!"(BApache $B$,%/%i%$%"%s%H$K(B
-$BAw$kA4$F$N%U%!%$%k$r:G8e$^$GFI$_9~$^$;$k$3$H$K$J$j$^$9!#(B
-$B$3$NJ}K!$O$+$J$j=hM}$rCY$/$9$k$b$N$G$"$j!"NI$/$J$$%"%$%G%"$G$9!#(B</p>
-
-<p>$B$b$A$m$s!"(BWindows $B$G$O$=$N$h$&$J<B9T%S%C%H$r%;%C%H$9$k$h$&$J$b$N$O(B
-$B$"$j$^$;$s$N$G%*%W%7%g%s$,>/$7@)8B$5$l$F$$$^$9!#(B</p>
-
-<p>$B%G%U%)%k%H$N@_Dj$G$O!"(BApache $B$O(B SSI $B%Z!<%8$K$D$$$F:G=*JQ99;~9o$d(B
-$B%3%s%F%s%D$ND9$5$r(B HTTP $B%X%C%@$KAw$j$^$;$s!#(B
-$BF0E*$J%3%s%F%s%D$G$"$k$?$a!"$=$l$i$NCM$r7W;;$9$k$N$,Fq$7$$$+$i$G$9!#(B
-$B$3$N$?$a%I%-%e%a%s%H$,(B
-$B%-%c%C%7%e$5$l$J$/$J$j!"7k2L$H$7$F%/%i%$%"%s%H$N@-G=$,(B
-$BCY$/$J$C$?$h$&$K46$8$5$;$k$3$H$K$J$j$^$9!#(B
-$B$3$l$r2r7h$9$kJ}K!$,Fs$D$"$j$^$9(B:</p>
-
-<ol> 
-
-<li><code>XBitHack Full</code> $B@_Dj$r;HMQ$9$k!#$3$N@_Dj$K$h$j!"$b$H$b$HMW5a$5$l$?(B
-$B%U%!%$%k$N;~9o$r;2>H$7!"FI$_9~$^$l$k%U%!%$%k$NJQ99;~9o$r(B
-$BL5;k$7$F:G=*JQ99;~9o$r7hDj$9$k$h$&(B Apache $B$KEA$($^$9!#(B</li>
-
-<li><a href="../mod/mod_expires.html">mod_expires</a> $B$GDs6!$5$l$F$$$k%G%#%l%/%F%#%V$r;HMQ$7$F!"(B
-$B%U%!%$%k$,L58z$K$J$k;~9o$rL@<($7$^$9!#(B
-$B$3$l$K$h$j!"%V%i%&%6$H%W%m%-%7$K%-%c%C%7%e$,M-8z$G$"$k$3$H$rDLCN$7$^$9!#(B</li>
-
-</ol>
-
-<hr>
-<h2><a name="basicssidirectives">$B4pK\E*$J(B SSI $B%G%#%l%/%F%#%V(B</a></h2>
-
-<p>SSI $B%G%#%l%/%F%#%V$O0J2<$NJ8K!$G5-=R$7$^$9(B:</p>
-
-<pre>
-        &lt;!--#element attribute=value attribute=value ... --&gt;
-</pre>
-
-<p>HTML $B$N%3%a%s%H$N$h$&$J=q<0$r$7$F$$$k$N$G!"$b$7(B SSI $B$r(B
-$B@5$7$/F0:n2DG=$K$7$J$1$l$P!"%V%i%&%6$O$=$l$rL5;k$9$k$G$7$g$&!#$7$+$7!"(B
-HTML $B%=!<%9Cf$G$O8+$($^$9!#$b$7(B SSI $B$r@5$7$/@_Dj$7$?$J$i!"(B
-$B%G%#%l%/%F%#%V$O$=$N7k2L$HCV$-49$($i$l$^$9!#(B</p>
-
-<p>element $B$O$?$/$5$s$"$k$b$N$+$i0l$D;XDj$9$k$3$H$,$G$-$^$9!#(B
-$B;XDj$G$-$k$b$N$NBgB??t$K$D$$$F$O!"<!2s$b$&>/$7>\$7$/@bL@$7$^$9!#(B
-$B$3$3$G$O!"(BSSI $B$G9T$J$&$3$H$,$G$-$kNc$r$$$/$D$+<($7$^$9!#(B</p>
-
-<h3><a name="today'sdate">$B:#F|$NF|IU(B</a></h3>
-
-<pre>
-        &lt;!--#echo var="DATE_LOCAL" --&gt;
-</pre>
-
-<p><code>echo</code> $BMWAG$OC1$KJQ?t$NCM$r=PNO$7$^$9!#(BCGI $B%W%m%0%i%`$K(B
-$BMxMQ2DG=$J4D6-JQ?t$NA4$F$N%;%C%H$r4^$`B?$/$NI8=`JQ?t$,$"$j$^$9!#(B
-$B$^$?!"(B<code>set</code> $BMWAG$rMQ$$$k$3$H$G!"FH<+$NJQ?t$rDj5A$9$k$3$H$,(B
-$B$G$-$^$9!#(B</p>
-
-<p>$B=PNO$5$l$kF|IU$N=q<0$,9%$-$G$O$J$$>l9g!"$=$N=q<0$r(B
-$B=$@5$9$k$?$a$K!"(B<code>config</code> $BMWAG$K(B <code>timefmt</code> $BB0@-$r(B
-$B;HMQ$9$k$3$H$,$G$-$^$9!#(B</p>
-
-<pre>
-        &lt;!--#config timefmt="%A %B %d, %Y" --&gt;
-        Today is &lt;!--#echo var="DATE_LOCAL" --&gt;
-</pre>
-
-<h3><a name="modificationdateofthefile">$B%U%!%$%k$NJQ99F|(B</a></h3>
-
-<pre>
-        This document last modified &lt;!--#flastmod file="index.html" --&gt;
-</pre>
-
-<p>$B$3$NMWAG$b(B <code>timefmt</code> $B%U%)!<%^%C%H$N@_Dj$K=>$$$^$9!#(B</p>
-
-<h3><a name="includingtheresultsofacgiprogram">CGI $B%W%m%0%i%`$N7k2L$r<h$j9~$`(B
-</a></h3>
-
-<p>$B$3$l$O!"A4$F$N?M$N$*5$$KF~$j$G$"$k(B ``$B%R%C%H%+%&%s%?(B'' $B$N$h$&$J(B CGI $B%W%m%0%i%`$N(B
-$B7k2L$r=PNO$9$k(B SSI $B$N$h$j0lHLE*$J;HMQ$N$&$A$N0l$D$G$9!#(B</p>
-
-<pre>
-        &lt;!--#include virtual="/cgi-bin/counter.pl" --&gt;
-</pre>
-
-<hr>
-<h2><a name="additionalexamples">$BDI2C$NNc(B</a></h2>
-
-<p>$B0J2<$O!"(BSSI $B$r;HMQ$7$F(B HTML $B%I%-%e%a%s%H$K$*$$$F$G$-$k$3$H$N(B
-$B$$$/$D$+$NFCJL$JNc$G$9!#(B</p>
-
-<hr>
-<h2><a name="whenwasthisdocumentmodified">$B$$$D$3$N%I%-%e%a%s%H$O=$@5$5$l$?$N$+(B?
-</a></h2>
-
-<p>$B@h$K!"%I%-%e%a%s%H$,:G8e$KJQ99$5$l$?$N$O$$$D$+$r%f!<%6$KDLCN$9$k$?$a$K(B SSI $B$r;HMQ$9$k$3$H$,$G$-$k$3$H$r(B
-$B=R$Y$^$7$?!#$7$+$7$J$,$i!"<B:]$NJ}K!$O!"$$$/$V$sLdBj$N$^$^$K$7$F$*$-$^$7$?!#(B
-HTML $B%I%-%e%a%s%H$KG[CV$5$l$?<!$N%3!<%I$O!"%Z!<%8$K(B
-$B$=$N$h$&$J%?%$%`%9%?%s%W$rF~$l$k$G$7$g$&!#$b$A$m$s!">e=R$N(B
-$B$h$&$K!"(BSSI $B$r@5$7$/F0:n2DG=$K$7$F$*$/I,MW$,$"$j$^$9!#(B</p>
-
-<pre>
-        &lt;!--#config timefmt="%A %B %d, %Y" --&gt;
-        This file last modified &lt;!--#flastmod file="ssi.shtml" --&gt;
-</pre>
-
-<p>$B$b$A$m$s!"(B<code>ssi.shtml</code> $B$NItJ,$r<B:]$NEv3:%U%!%$%kL>$H(B
-$BCV$-49$($kI,MW$,$"$j$^$9!#$b$7!"$"$i$f$k%U%!%$%k$KD%$k$3$H$,(B
-$B$G$-$k0lHLE*$J%3!<%I$rC5$7$F$$$k$J$i!"$3$l$OITJX$G$"$k$+$b$7$l$^$;$s!#(B
-$B$*$=$i$/$=$N>l9g$O!"$=$&$9$kBe$o$j$KJQ?t(B <code>LAST_MODIFIED</code>
-$B$r;HMQ$7$?$$$H9M$($k$G$7$g$&(B:</p>
-
-<pre>
-        &lt;!--#config timefmt="%D" --&gt;
-        This file last modified &lt;!--#echo var="LAST_MODIFIED" --&gt;
-</pre>
-
-<p><code>timefmt</code> $B=q<0$K$D$$$F$N$h$j>\:Y$K$D$$$F$O!"(B
-$B$*9%$_$N8!:w%5%$%H$K9T$-!"(B<code>ctime</code> $B$G8!:w$7$F$_$F$/$@$5$$!#J8K!$OF1$8$G$9!#(B</p>
-
-<hr>
-<h2><a name="includingastandardfooter">$BI8=`$N%U%C%?$rA^F~$9$k(B</a></h2>
-
-<p>$B$b$7?t%Z!<%8$rD6$($k%Z!<%8$r;}$D%5%$%H$r4IM}$7$F$$$k$J$i$P!"(B
-$BA4%Z!<%8$KBP$7$FJQ9`$r9T$J$&$3$H$,K\Ev$K6lDK$H$J$jF@$k$3$H$,J,$+$k$G$7$g$&!#(B
-$BA4$F$N%Z!<%8$KEO$C$F$"$k<o$NI8=`E*$J304Q$r0];}$7$h$&$H(B
-$B$7$F$$$k$J$i$PFC$K$=$&$G$7$g$&!#(B</p>
-
-<p>$B%X%C%@$d%U%C%?MQ$NA^F~MQ%U%!%$%k$r;HMQ$9$k$3$H$G!"$3$N$h$&$J(B
-$B99?7$K$+$+$kIiC4$r8:$i$9$3$H$,$G$-$^$9!#0l$D$N%U%C%?%U%!%$%k$r(B
-$B:n@.$7!"$=$l$r(B <code>include</code> SSI $B%3%^%s%I$G3F%Z!<%8$K(B
-$BF~$l$k$@$1$G:Q$_$^$9!#(B<code>include</code> $BMWAG$O!"(B<code>file</code> $BB0@-(B
-$B$^$?$O(B <code>virtual</code> $BB0@-$N$$$:$l$+$r;HMQ$7$F$I$N%U%!%$%k$rA^F~$9$k$+$r(B
-$B7h$a$k$3$H$,$G$-$^$9!#(B<code>file</code> $BB0@-$O!"(B<em>$B%+%l%s%H%G%#%l%/%H%j$+$i$N(B
-$BAjBP%Q%9$G<($5$l$?(B</em>$B%U%!%$%k%Q%9$G$9!#$=$l$O(B
-/ $B$G;O$^$k@dBP%U%!%$%k%Q%9$K$O$G$-$:!"$^$?!"$=$N%Q%9$N0lIt$K(B ../ $B$r(B
-$B4^$`$3$H$,$G$-$J$$$3$H$r0UL#$7$^$9!#(B<code>virtual</code> $BB0@-$O!"$*$=$i$/(B
-$B$h$jJXMx$@$H;W$$$^$9$,!"Ds6!$9$k%I%-%e%a%s%H$+$i$NAjBP(B URL $B$G;XDj$9$Y$-$G$9!#(B
-$B$=$l$O(B / $B$G;O$a$k$3$H$,$G$-$^$9$,!"Ds6!$9$k%U%!%$%k$HF1$8%5!<%P>e$K(B
-$BB8:_$7$J$/$F$O$J$j$^$;$s!#(B</p>
-
-<pre>
-        &lt;!--#include virtual="/footer.html" --&gt;
-</pre>
-
-<p>$B;d$O:G8e$NFs$D$rAH$_9g$o$;$F!"(B<code>LAST_MODIFIED</code> $B%G%#%l%/%F%#%V$r(B
-$B%U%C%?%U%!%$%k$NCf$KCV$/$3$H$,$h$/$"$j$^$9!#(B
-SSI $B%G%#%l%/%F%#%V$O!"A^F~MQ$N%U%!%$%k$K4^$^$;$?$j!"(B
-$BA^F~%U%!%$%k$N%M%9%H$r$7$?$j$9$k$3$H$,$G$-$^$9!#$9$J$o$A!"(B
-$BA^F~MQ$N%U%!%$%k$OB>$N%U%!%$%k$r:F5"E*$KA^F~$9$k$3$H$,$G$-$^$9!#(B</p>
-
-<hr>
-<h2><a name="whatelsecaniconfig">$BB>$K2?$,@_Dj$G$-$k$N$+(B?</a></h2>
-
-<p>$B;~9o=q<0$r(B <code>config</code> $B$G@_Dj$G$-$k$3$H$K2C$($F!"(B
-$B99$KFs$D(B <code>config</code> $B$G@_Dj$9$k$3$H$,$G$-$^$9!#(B</p>
-
-<p>$BDL>o!"(BSSI $B%G%#%l%/%F%#%V$G2?$+$,$&$^$/$$$+$J$$$H$-$O!"<!$N%a%C%;!<%8$,(B
-$B=PNO$5$l$^$9!#(B</p>
-
-<pre>
-        [an error occurred while processing this directive]
-</pre>
-
-<p>$B$3$N%a%C%;!<%8$rB>$N$b$N$K$7$?$$>l9g!"(B
-<code>config</code> $BMWAG$N(B <code>errmsg</code> $BB0@-$GJQ99$9$k$3$H$,(B
-$B$G$-$^$9(B:<p>
-
-<pre>
-        &lt;!--#config errmsg="[It appears that you don't know how to use SSI]" --&gt;
-</pre>
-
-<p>$B$*$=$i$/!"%(%s%I%f!<%6$O$3$N%a%C%;!<%8$r7h$7$F8+$k$3$H$O$"$j$^$;$s!#(B
-$B$J$<$J$i!"$=$N%5%$%H$,@8$-$?>uBV$K$J$kA0$K(B SSI $B%G%#%l%/%F%#%V$K4X$9$k(B
-$BA4$F$NLdBj$r2r7h$7$F$$$k$O$:$@$+$i$G$9!#(B($B$=$&$G$9$h$M(B?)</p>
-
-<p>$B$=$7$F!"(B<code>config</code> $B$K$*$$$F(B <code>sizefmt</code> $BB0@-$r;HMQ$9$k$3$H$G!"(B
-$BJV$5$l$k%U%!%$%k%5%$%:$N=q<0$r@_Dj$9$k$3$H$,$G$-$^$9!#(B
-$B%P%$%H?t$K$O(B <code>bytes</code> $B$r!"E,Ev$K(B Kb $B$d(B Mb $B$K(B
-$BC;=L$5$;$k$K$O(B <code>abbrev</code> $B$r;XDj$9$k$3$H$,$G$-$^$9!#(B</p>
-
-<hr>
-<h2><a name="executingcommands">$B%3%^%s%I$N<B9T(B</a></h2>
-
-<p>$B:#8e?t%v7n$NFb$K!">.$5$J(B CGI $B%W%m%0%i%`$H(B SSI $B$r;HMQ$9$k(B
-$B5-;v$r=P$7$?$$$H9M$($F$$$^$9!#$3$3$G$O$=$l$H$OJL$K!"(B
-<code>exec</code> $BMWAG$K$h$C$F9T$J$&$3$H$,$G$-$k$3$H$r<($7$^$9!#(B
-SSI $B$K%7%'%k(B ($B@53N$K$O(B <code>/bin/sh</code>$B!#(BWin32 $B$J$i$P(B DOS $B%7%'%k(B)
-$B$r;HMQ$7$F%3%^%s%I$r<B9T$5$;$k$3$H$,$G$-$^$9!#2<5-$NNc$G$O!"%G%#%l%/%H%j(B
-$B%j%9%H=PNO$r9T$J$$$^$9!#(B</p>
-
-<pre>
-        &lt;pre&gt;
-        &lt;!--#exec cmd="ls" --&gt;
-        &lt;/pre&gt;
-</pre>
-
-<p>Windows $B>e$G$O!"(B</p>
-
-<pre>
-        &lt;pre&gt;
-        &lt;!--#exec cmd="dir" --&gt;
-        &lt;/pre&gt;
-</pre>
-
-<p>Windows $B>e$G$O!"$3$N%G%#%l%/%F%#%V$K$h$C$F$$$/$D$+$N4qL/$J(B
-$B=q<0$K5$$E$/$G$7$g$&!#$J$<$J$i(B <code>dir</code> $B$N=PNO$,(B
-$BJ8;zNs(B ``&lt;<code>dir</code>&gt;'' $B$r4^$_!"%V%i%&%6$r:.Mp$5$;$k$+$i$G$9!#(B</P>
-
-<p>$B$3$N5!G=$OHs>o$K4m81$G$"$j!"$I$s$J%3!<%I$G$b(B <code>exec</code> $B%?%0$K(B
-$BKd$a9~$^$l$F$7$^$($P<B9T$9$k$3$H$KCm0U$7$F$/$@$5$$!#Nc$($P(B 
-`` $B%2%9%H%V%C%/(B '' $B$N$h$&$K!"$b$7!"%f!<%6$,%Z!<%8$NFbMF$r(B
-$BJT=8$G$-$k>u67$K$"$k$J$i$P!"$3$N5!G=$r3N<B$KM^@)$7$F$/$@$5$$!#(B
-<code>Options</code> $B%G%#%l%/%F%#%V$N(B <code>IncludesNOEXEC</code> $B0z?t$r;XDj$9$k$3$H$G!"(B
-SSI $B$O5v2D$9$k$1$l$I(B <code>exec</code> $B5!G=$O5v2D$7$J$$$h$&$K$9$k$3$H$,$G$-$^$9!#(B</p>
-
-<hr>
-<h2><a name="advancedssitechniques">$B9bEY$J(B SSI $B%F%/%K%C%/(B</a></h2>
-
-<p>$B%3%s%F%s%D$r=PNO$9$k$3$H$K2C$(!"(BApache SSI $B$OJQ?t$r@_Dj$7!"$=$7$FHf3S(B
-$B$H>r7oJ,4t$K$=$NJQ?t$r;HMQ$G$-$k5!G=$rDs6!$7$F$$$^$9!#(B</p>
-
-<h3><a name="caveat">$B7Y9p(B</a></h3>
-
-<p>$B$3$N5-;v$G=R$Y$?BgItJ,$N5!G=$O!"(BApache 1.2 $B0J9_$r(B
-$B;HMQ$7$F$$$k>l9g$N$_MxMQ2DG=$G$9!#$b$A$m$s!"$b$7(B Apache 1.2 $B0J9_$r(B
-$B;HMQ$7$F$J$$>l9g!"D>$A$K%"%C%W%0%l!<%I$9$kI,MW$,$"$j$^$9!#(B
-$B$5$!!":#$=$l$r9T$J$$$J$5$$!#$=$l$^$GBT$C$F$$$^$9!#(B</p>
-
-<hr>
-<h2><a name="settingvariables">$BJQ?t$r@_Dj$9$k(B</a></h2>
-
-<p><code>set</code> $B%G%#%l%/%F%#%V$r;HMQ$7$F!"8e$G;HMQ$9$k$?$a$KJQ?t$r(B
-$B@_Dj$9$k$3$H$,$G$-$^$9!#$3$l$O8e$N@bL@$GI,MW$K$J$k$N$G!"$3$3$G(B
-$B$=$l$K$D$$$F=R$Y$F$$$^$9!#J8K!$O0J2<$N$H$*$j$G$9(B:</p>
-
-<pre>
-        &lt;!--#set var="name" value="Rich" --&gt;
-</pre>
-
-<p>$B$3$N$h$&$KC1=c$KJ8;z$I$*$j$K@_Dj$9$k$3$H$K2C$(!"(B
-$BNc$($P4D6-JQ?t$dA0$N5-;v$G=R$Y$?JQ?t(B ($BNc$($P(B <code
->LAST_MODIFIED</code> $B$N$h$&$J(B) $B$r4^$`B>$N$"$i$f$kJQ?t$r(B
-$BCM$r@_Dj$9$k$N$K;HMQ$9$k$3$H$,(B
-$B$G$-$^$9!#JQ?tL>$NA0$K%I%k5-9f(B ($) $B$r;HMQ$9$k$3$H$G!"(B
-$B$=$l$,%j%F%i%kJ8;zNs$G$O$J$/$FJQ?t$G$"$k$3$H$r<($7$^$9!#(B</p>
-
-<pre>
-        &lt;!--#set var="modified" value="$LAST_MODIFIED" --&gt;
-</pre>
-
-<p>$B%I%k5-9f(B ($) $B$rJ8;z$H$7$FJQ?t$NCM$KF~$l$k$K$O!"%P%C%/%9%i%C%7%e$K$h$C$F(B
-$B%I%k5-9f$r%(%9%1!<%W$9$kI,MW$,$"$j$^$9!#(B</p>
-
-<pre>
-        &lt;!--#set var="cost" value="\$100" --&gt;
-</pre>
-
-<p>$B:G8e$K$J$j$^$9$,!"D9$$J8;zNs$NCf$KJQ?t$rCV$-$?$$>l9g$G!"(B
-$BJQ?tL>$,B>$NJ8;z$H$V$D$+$k2DG=@-$,$"$j!"$=$l$i$NJ8;z$K$D$$$F(B
-$B:.Mp$7$F$7$^$&>l9g!"$3$N:.Mp$r<h$j=|$/$?$a!"JQ?tL>$rCf3g8L$G(B
-$B0O$`$3$H$,$G$-$^$9(B ($B$3$l$K$D$$$F$NNI$$Nc$r<($9$N$OFq$7$$$N$G$9$,!"(B
-$B$*$=$i$/J,$+$C$F$$$?$@$1$k$G$7$g$&(B)$B!#(B</P>
-
-<pre>
-        &lt;!--#set var="date" value="${DATE_LOCAL}_${DATE_GMT}" --&gt;
-</pre>
-
-<hr>
-<h2><a name="conditionalexpressions">$B>r7o<0(B</a></h2>
-
-<p>$B$5$F!"JQ?t$r;}$C$F$$$F!"$=$l$i$NCM$r@_Dj$7$FHf3S$9$k$3$H$,$G$-$k$N$G$9$+$i!"(B
-$B>r7o$rI=$9$?$a$K$=$l$i$r;HMQ$9$k$3$H$,$G$-$^$9!#$3$l$K$h$j(B SSI $B$O(B
-$B$"$k<o$N>.$5$J%W%m%0%i%_%s%08@8l$K$J$C$F$$$^$9!#(B<code>mod_include</code> $B$O(B
-$B>r7o$rI=8=$9$k$?$a$K(B <code>if</code>, <code>elif</code>, <code>else</code>,
-<code>endif</code> $B9=B$$rDs6!$7$F$$$^$9!#$3$l$K$h$C$F!"0l$D$N<B:]$N%Z!<%8$+$i(B
-$BJ#?t$NO@M}%Z!<%8$r8z2LE*$K@8@.$9$k$3$H$,$G$-$^$9!#(B</p>
-
-<p>$B>r7o9=B$$O0J2<$N$H$*$j$G$9(B:</p>
-
-<pre>
-        &lt;!--#if expr="test_condition" --&gt;
-        &lt;!--#elif expr="test_condition" --&gt;
-        &lt;!--#else --&gt;
-        &lt;!--#endif --&gt;
-</pre>
-
-<p><em>test_condition</em> $B$O$"$i$f$k<oN`$NO@M}E*Hf3S$r$9$k$3$H$,$G$-$^$9!#(B
-$BCM$rHf3S$7$?$j!"$=$NCM$,(B ``$B??(B'' $B$+$I$&$+$rI>2A$7$^$9(B ($B6u$G$J$$$J$i(B
-$BM?$($i$l$?J8;zNs$O??$G$9(B)$B!#MxMQ2DG=$JHf3S1i;;;R$NA4$F$N%j%9%H$K$D$$$F$O!"(B
-<code>mod_include</code> $B%I%-%e%a%s%F!<%7%g%s$r;2>H$7$F$/$@$5$$!#(B
-$B$3$3$G$O!"$3$N9=B$$r$I$&;HMQ$9$k$+$NNc$r$$$/$D$+<($7$^$9!#(B</p>
-
-<p>$B@_Dj%U%!%$%k$G<!$N9T$r5-=R$7$^$9(B:</P>
-
-<pre>
-        BrowserMatchNoCase macintosh Mac
-        BrowserMatchNoCase MSIE InternetExplorer
-</pre>
-
-<p>$B$3$l$O%/%i%$%"%s%H$,(B Macintosh $B>e$G%$%s%?!<%M%C%H%(%/%9%W%m!<%i$,(B
-$BF0$$$F$$$k>l9g!"4D6-JQ?t(B ``Mac'' $B$H(B ``InternetExplorer'' $B$r??$H@_Dj$7$^$9!#(B</P>
-
-<p>$B<!$K!"(BSSI $B$,2DG=$K$J$C$?%I%-%e%a%s%H$G0J2<$r9T$J$$$^$9(B:</p>
-
-<pre>
-        &lt;!--#if expr="${Mac} &amp;&amp; ${InternetExplorer}" --&gt;
-        Apologetic text goes here
-        &lt;!--#else --&gt;
-        Cool JavaScript code goes here
-        &lt;!--#endif --&gt;
-</pre>
-
-<p>Mac $B>e$N(B IE $B$KBP$7$F2?$+;W$&$H$3$m$,$"$k$o$1$G$"$j$^$;$s!#(B
-$BB>$G$O<B9T$G$-$F$$$k$$$/$D$+$N(B JavaScript $B$r(B Mac $B>e$N(B IE $B$G(B
-$B<B9T$5$;$k$N$K!"@h=5?t;~4V6lO+$7$?$H$$$&$@$1$N$3$H$G$9!#(B
-$B>e$NNc$O$=$N;CDjE*$JBP=hJ}K!$G$9!#(B</p>
-
-<p>$BB>$N$I$s$JJQ?t(B ($B$"$J$?$,Dj5A$9$k$b$N!"$^$?$OIaDL$N4D6-JQ?t$N$$$:$l$+(B) $B$b!"(B
-$B>r7oJ8$K;HMQ$9$k$3$H$,$G$-$^$9!#(BApache $B$O(B <code>SetEnvIf</code> 
-$B%G%#%l%/%F%#%V$dB>$N4XO"%G%#%l%/%F%#%V;HMQ$7$F4D6-JQ?t$r@_Dj$9$k$3$H$,(B
-$B$G$-$^$9!#$3$N5!G=$K$h$j!"(BCGI $B$KMj$k$3$H$J$/$+$J$jJ#;($JF0E*$J$3$H$r$5$;$k(B
-$B$3$H$,$G$-$^$9!#(B</p>
-
-<hr>
-<h2><a name="conclusion">$B=*$o$j$K(B</a></h2>
-
-<p>SSI $B$O3N$+$K(B CGI $B$dF0E*$J%&%'%V%Z!<%8$r@8@.$9$kB>$N5;=Q$KBe$o$k$b$N(B
-$B$G$O$"$j$^$;$s!#$7$+$7!"(B
-$B$?$/$5$s$NM>J,$J:n6H$r$;$:$K!">/NL$NF0E*$J%3%s%F%s%D$r2C$($k$K$O(B
-$B$9$0$l$?J}K!$G$9!#(B</p>
-
-</body>
-</html>
diff --git a/docs/manual/images/apache_header.gif b/docs/manual/images/apache_header.gif
deleted file mode 100644
index 260e421..0000000
--- a/docs/manual/images/apache_header.gif
+++ /dev/null
Binary files differ
diff --git a/docs/manual/images/apache_header.png b/docs/manual/images/apache_header.png
deleted file mode 100644
index f845946..0000000
--- a/docs/manual/images/apache_header.png
+++ /dev/null
Binary files differ
diff --git a/docs/manual/images/custom_errordocs.gif b/docs/manual/images/custom_errordocs.gif
deleted file mode 100644
index d566c5d..0000000
--- a/docs/manual/images/custom_errordocs.gif
+++ /dev/null
Binary files differ
diff --git a/docs/manual/images/custom_errordocs.png b/docs/manual/images/custom_errordocs.png
deleted file mode 100644
index 11553cb..0000000
--- a/docs/manual/images/custom_errordocs.png
+++ /dev/null
Binary files differ
diff --git a/docs/manual/images/home.gif b/docs/manual/images/home.gif
deleted file mode 100644
index 11299c1..0000000
--- a/docs/manual/images/home.gif
+++ /dev/null
Binary files differ
diff --git a/docs/manual/images/home.png b/docs/manual/images/home.png
deleted file mode 100644
index 13816e4..0000000
--- a/docs/manual/images/home.png
+++ /dev/null
Binary files differ
diff --git a/docs/manual/images/index.gif b/docs/manual/images/index.gif
deleted file mode 100644
index 741c893..0000000
--- a/docs/manual/images/index.gif
+++ /dev/null
Binary files differ
diff --git a/docs/manual/images/index.png b/docs/manual/images/index.png
deleted file mode 100644
index 4447da8..0000000
--- a/docs/manual/images/index.png
+++ /dev/null
Binary files differ
diff --git a/docs/manual/images/mod_rewrite_fig1.fig b/docs/manual/images/mod_rewrite_fig1.fig
deleted file mode 100644
index 7c80fea..0000000
--- a/docs/manual/images/mod_rewrite_fig1.fig
+++ /dev/null
@@ -1,60 +0,0 @@
-#FIG 3.2
-Landscape
-Center
-Inches
-Letter  
-100.00
-Single
--2
-1200 2
-0 32 #efefef
-0 33 #cfcfef
-0 34 #bebebe
-2 1 0 4 4 7 0 0 -1 0.000 0 0 -1 1 0 6
-	1 1 2.00 120.00 240.00
-	 6675 5250 6900 5250 6900 4650 4950 4650 4950 4050 5475 4050
-2 1 0 4 4 7 0 0 -1 0.000 0 0 -1 1 0 2
-	1 1 2.00 120.00 240.00
-	 6900 4050 7650 4050
-2 1 0 4 4 7 0 0 -1 0.000 0 0 -1 1 0 6
-	1 1 2.00 120.00 240.00
-	 9375 4050 9900 4050 9900 4650 7200 4650 7200 5250 7650 5250
-2 1 0 4 9 7 0 0 -1 0.000 0 0 -1 1 0 4
-	1 1 2.00 120.00 240.00
-	 9300 5250 9900 5250 9900 6300 6975 6300
-2 1 2 4 0 7 0 0 -1 7.500 1 1 -1 0 0 2
-	 3900 2100 3900 1500
-2 1 2 4 0 7 0 0 -1 7.500 1 1 -1 0 0 2
-	 3900 7950 3900 7350
-2 1 1 4 9 7 0 0 -1 10.000 0 0 -1 1 0 4
-	1 1 2.00 120.00 240.00
-	 5625 6300 2700 6300 2700 7050 3225 7050
-2 1 0 4 9 7 0 0 -1 0.000 0 0 -1 1 0 4
-	1 1 2.00 120.00 240.00
-	 5550 3000 2700 3000 2700 5250 3225 5250
-2 1 1 4 9 7 0 0 -1 10.000 0 0 -1 1 0 4
-	1 1 2.00 120.00 240.00
-	 9225 2325 9900 2325 9900 3000 6975 3000
-2 1 0 4 9 7 0 0 -1 0.000 0 0 -1 1 0 2
-	1 1 2.00 120.00 240.00
-	 4800 5250 5550 5250
-2 4 0 2 9 7 0 0 -1 0.000 0 0 7 0 0 5
-	 6900 3300 5700 3300 5700 2700 6900 2700 6900 3300
-2 4 0 2 9 7 0 0 -1 0.000 0 0 7 0 0 5
-	 6900 6600 5700 6600 5700 6000 6900 6000 6900 6600
-4 0 0 0 0 0 20 0.0000 4 195 1455 3300 5400 RewriteRule\001
-4 0 0 0 0 1 20 0.0000 4 210 1440 7800 4200 CondPattern\001
-4 0 0 0 0 1 20 0.0000 4 270 1110 5625 4200 TestString\001
-4 0 0 0 0 0 20 0.0000 4 195 1905 3300 4200 RewriteCond     \001
-4 0 0 0 0 1 20 0.0000 4 210 1320 7800 5400 Substitution\001
-4 0 0 0 0 1 20 0.0000 4 195 825 5700 5400 Pattern\001
-4 0 0 0 0 0 20 0.0000 4 195 1455 3300 7200 RewriteRule\001
-4 0 0 0 0 0 20 0.0000 4 195 1455 3300 2400 RewriteRule\001
-4 0 0 0 0 1 20 0.0000 4 195 825 5700 7200 Pattern\001
-4 0 0 0 0 1 20 0.0000 4 210 1320 7800 7200 Substitution\001
-4 0 0 0 0 1 20 0.0000 4 210 1320 7800 2400 Substitution\001
-4 0 0 0 0 1 20 0.0000 4 195 825 5700 2400 Pattern\001
-4 0 9 0 0 18 12 0.0000 4 135 645 6000 2925 current\001
-4 0 9 0 0 18 12 0.0000 4 135 375 6075 3150 URL\001
-4 0 9 0 0 18 12 0.0000 4 135 825 5925 6225 rewritten\001
-4 0 9 0 0 18 12 0.0000 4 135 375 6075 6450 URL\001
diff --git a/docs/manual/images/mod_rewrite_fig1.gif b/docs/manual/images/mod_rewrite_fig1.gif
deleted file mode 100644
index 664ac1e..0000000
--- a/docs/manual/images/mod_rewrite_fig1.gif
+++ /dev/null
Binary files differ
diff --git a/docs/manual/images/mod_rewrite_fig1.png b/docs/manual/images/mod_rewrite_fig1.png
deleted file mode 100644
index f3a68d9..0000000
--- a/docs/manual/images/mod_rewrite_fig1.png
+++ /dev/null
Binary files differ
diff --git a/docs/manual/images/mod_rewrite_fig2.fig b/docs/manual/images/mod_rewrite_fig2.fig
deleted file mode 100644
index facf410..0000000
--- a/docs/manual/images/mod_rewrite_fig2.fig
+++ /dev/null
@@ -1,50 +0,0 @@
-#FIG 3.2
-Landscape
-Center
-Inches
-Letter  
-100.00
-Single
--2
-1200 2
-0 32 #efefef
-0 33 #cfcfef
-0 34 #bebebe
-2 1 2 4 0 7 0 0 -1 10.000 1 1 -1 0 0 2
-	 4050 3750 4050 4425
-2 1 0 2 9 7 0 0 -1 0.000 0 0 -1 1 0 2
-	1 1 2.00 120.00 240.00
-	 4950 4800 5550 4800
-2 1 0 2 9 7 0 0 -1 0.000 0 0 -1 1 0 2
-	1 1 2.00 120.00 240.00
-	 4950 3600 5550 3600
-2 1 0 2 9 7 0 0 -1 0.000 0 0 -1 1 0 2
-	1 1 2.00 120.00 240.00
-	 6600 5700 7725 5700
-2 1 0 2 9 7 0 0 -1 0.000 0 0 -1 1 0 6
-	1 1 2.00 120.00 240.00
-	 6600 5550 6900 5550 6900 5100 4950 5100 4950 2850 5550 2850
-2 1 0 2 4 7 0 0 -1 0.000 0 0 -1 1 0 6
-	1 1 2.00 120.00 240.00
-	 9525 4800 9750 4800 9750 5100 7200 5100 7200 5550 7725 5550
-2 1 0 2 4 7 0 0 -1 0.000 0 0 -1 1 0 6
-	1 1 2.00 120.00 240.00
-	 9450 3000 9750 3000 9750 3225 5100 3225 5100 3450 5550 3450
-2 1 0 2 4 7 0 0 -1 0.000 0 0 -1 1 0 6
-	1 1 2.00 120.00 240.00
-	 9450 3600 9750 3600 9750 3825 5100 3825 5100 4050 5550 4050
-2 1 0 2 4 7 0 0 -1 0.000 0 0 -1 1 0 6
-	1 1 2.00 120.00 240.00
-	 9450 4200 9750 4200 9750 4425 5100 4425 5100 4650 5550 4650
-4 0 0 0 0 0 20 0.0000 4 195 1905 3300 4800 RewriteCond     \001
-4 0 0 0 0 1 20 0.0000 4 210 1620 7800 4800 CondPatternN\001
-4 0 0 0 0 0 20 0.0000 4 195 1905 3300 3600 RewriteCond     \001
-4 0 0 0 0 1 20 0.0000 4 210 1575 7800 3600 CondPattern2\001
-4 0 0 0 0 1 20 0.0000 4 270 1290 5625 4800 TestStringN\001
-4 0 0 0 0 1 20 0.0000 4 270 1245 5625 3600 TestString2\001
-4 0 0 0 0 0 20 0.0000 4 195 1905 3300 3000 RewriteCond     \001
-4 0 0 0 0 1 20 0.0000 4 270 1245 5625 3000 TestString1\001
-4 0 0 0 0 1 20 0.0000 4 210 1575 7800 3000 CondPattern1\001
-4 0 0 0 0 1 20 0.0000 4 210 1320 7800 5700 Substitution\001
-4 0 0 0 0 1 20 0.0000 4 195 825 5700 5700 Pattern\001
-4 0 0 0 0 0 20 0.0000 4 195 1455 3300 5700 RewriteRule\001
diff --git a/docs/manual/images/mod_rewrite_fig2.gif b/docs/manual/images/mod_rewrite_fig2.gif
deleted file mode 100644
index 3ea8cb6..0000000
--- a/docs/manual/images/mod_rewrite_fig2.gif
+++ /dev/null
Binary files differ
diff --git a/docs/manual/images/mod_rewrite_fig2.png b/docs/manual/images/mod_rewrite_fig2.png
deleted file mode 100644
index bc141be..0000000
--- a/docs/manual/images/mod_rewrite_fig2.png
+++ /dev/null
Binary files differ
diff --git a/docs/manual/images/pixel.gif b/docs/manual/images/pixel.gif
deleted file mode 100644
index c080147..0000000
--- a/docs/manual/images/pixel.gif
+++ /dev/null
Binary files differ
diff --git a/docs/manual/images/pixel.png b/docs/manual/images/pixel.png
deleted file mode 100644
index a44bfab..0000000
--- a/docs/manual/images/pixel.png
+++ /dev/null
Binary files differ
diff --git a/docs/manual/images/sub.gif b/docs/manual/images/sub.gif
deleted file mode 100644
index 93061c5..0000000
--- a/docs/manual/images/sub.gif
+++ /dev/null
Binary files differ
diff --git a/docs/manual/images/sub.png b/docs/manual/images/sub.png
deleted file mode 100644
index 7eef6bd..0000000
--- a/docs/manual/images/sub.png
+++ /dev/null
Binary files differ
diff --git a/docs/manual/index.html.en b/docs/manual/index.html.en
deleted file mode 100644
index c590818..0000000
--- a/docs/manual/index.html.en
+++ /dev/null
@@ -1,313 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta name="generator" content="HTML Tidy, see www.w3.org" />
-
-    <title>Apache HTTP Server Version 2.0 Documentation</title>
-  </head>
-
-  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-  vlink="#000080" alink="#FF0000">
-    <div align="center">
-      <table cellspacing="0" cellpadding="0" border="0"
-      width="600">
-        <tr>
-          <td align="center"><img src="images/apache_header.gif"
-          width="600" height="62" border="0"
-          alt="[Apache Documentation]" /></td>
-        </tr>
-
-        <tr>
-          <td align="center" bgcolor="#4f4f4f">
-            <table cellspacing="1" cellpadding="4" border="0"
-            width="100%">
-              <tr>
-                <td align="center" bgcolor="#bebebe"><a
-                href="faq/"><strong>FAQ</strong></a> </td>
-
-                <td align="center" bgcolor="#bebebe"><a
-                href="sitemap.html"><strong>SiteMap</strong></a>
-                </td>
-
-                <td align="center" bgcolor="#bebebe"><a
-                href="mod/directives.html"><strong>Directives</strong></a>
-                </td>
-
-                <td align="center" bgcolor="#bebebe"><a
-                href="mod/"><strong>Modules</strong></a> </td>
-
-                <td align="center" bgcolor="#bebebe"><a
-                href="http://www.apache.org/search.html"><strong>Search</strong></a>
-                </td>
-              </tr>
-            </table>
-          </td>
-        </tr>
-
-        <tr>
-          <td>&nbsp;</td>
-        </tr>
-
-        <tr>
-          <td align="center" height="30">
-            <h3>Apache HTTP Server Version 2.0</h3>
-          </td>
-        </tr>
-      </table>
-    </div>
-
-    <div align="center">
-      <table cellspacing="0" cellpadding="0" border="0"
-      width="600">
-        <tr>
-          <td align="center">
-            <form method="post" action="http://search.apache.org/">
-              <input type="hidden" name="what"
-              value="httpd.apache.org" /> <input type="hidden"
-              name="results" value="20" /> <input type="hidden"
-              name="version" value="2" /> <input type="text"
-              name="keyword" size="20" /> <input type="submit"
-              value="Search" />
-            </form>
-          </td>
-        </tr>
-      </table>
-      <!--
-                  <table cellspacing="0" cellpadding="0" border="0" width="600">
-                  <tr>
-                  <td align="center"><hr size="1" noshade width="100%">
-                  </td>
-                  </tr>
-                  </table>
-                  -->
-
-      <table cellspacing="0" cellpadding="0" border="0"
-      width="600">
-        <tr>
-          <td align="center" valign="top">
-            <table border="0" cellpadding="4" cellspacing="0"
-            bgcolor="#ffffff" width="280">
-              <tr>
-                <td align="center" bgcolor="#e9e9e9">
-                <strong>Release Notes</strong> </td>
-              </tr>
-
-              <tr>
-                <td><a href="new_features_2_0.html">New Features in
-                Version 2.0</a> </td>
-              </tr>
-
-              <tr>
-                <td><a href="upgrading.html">Upgrading to Version
-                2.0</a> </td>
-              </tr>
-
-              <tr>
-                <td><a href="LICENSE">Apache License</a> </td>
-              </tr>
-            </table>
-
-            <table border="0" cellpadding="4" cellspacing="0"
-            bgcolor="#ffffff" width="280">
-              <tr>
-                <td align="center" bgcolor="#e9e9e9">
-                <strong>Reference Manual</strong> </td>
-              </tr>
-
-              <tr>
-                <td><a href="install.html">Compiling and
-                Installing</a> </td>
-              </tr>
-
-              <tr>
-                <td><a href="invoking.html">Starting</a> </td>
-              </tr>
-
-              <tr>
-                <td><a href="stopping.html">Stopping or
-                Restarting</a> </td>
-              </tr>
-
-              <tr>
-                <td><a href="mod/directives.html">Run-time
-                Configuration Directives</a> </td>
-              </tr>
-
-              <tr>
-                <td>Modules: <a href="mod/index-bytype.html">By
-                Type</a> or <a href="mod/">Alphabetical</a> </td>
-              </tr>
-
-              <tr>
-                <td><a href="mpm.html">Multi-Processing Modules
-                (MPMs)</a> </td>
-              </tr>
-
-              <tr>
-                <td><a href="programs/">Server and Supporting
-                Programs</a> </td>
-              </tr>
-
-              <tr>
-                <td><a href="dso.html">Dynamic Shared Object (DSO)
-                Support</a> </td>
-              </tr>
-            </table>
-
-            <table border="0" cellpadding="4" cellspacing="0"
-            bgcolor="#ffffff" width="280">
-              <tr>
-                <td align="center" bgcolor="#e9e9e9">
-                <strong>Platform Specific Notes</strong> </td>
-              </tr>
-
-              <tr>
-                <td><a href="platform/windows.html">Microsoft
-                Windows</a> </td>
-              </tr>
-              <tr>
-                <td><a href="platform/netware.html">Novell NetWare
-                </a> </td>
-              </tr>
-            </table>
-          </td>
-
-          <td align="center" valign="top" bgcolor="#cccccc">
-            <table border="0" cellpadding="0" cellspacing="0"
-            bgcolor="#cccccc">
-              <tr>
-                <td align="center"><img src="images/pixel.gif"
-                width="1" height="1" border="0" alt="." /></td>
-              </tr>
-            </table>
-          </td>
-
-          <td align="center" valign="top">
-            <table border="0" cellpadding="4" cellspacing="0"
-            bgcolor="#ffffff" width="280">
-              <tr>
-                <td align="center" bgcolor="#e9e9e9"><strong>Using
-                the Apache HTTP Server</strong> </td>
-              </tr>
-
-              <tr>
-                <td><a href="configuring.html">Configuration
-                Files</a> </td>
-              </tr>
-
-              <tr>
-                <td><a href="server-wide.html">Server-Wide
-                Configuration</a> </td>
-              </tr>
-
-              <tr>
-                <td><a href="logs.html">Log Files</a> </td>
-              </tr>
-
-              <tr>
-                <td><a href="urlmapping.html">Mapping URLs to the
-                Filesystem</a> </td>
-              </tr>
-
-              <tr>
-                <td><a href="vhosts/">Virtual Hosts</a> </td>
-              </tr>
-
-              <tr>
-                <td><a href="ssl/">SSL/TLS Strong Encryption</a></td>
-              </tr>
-
-              <tr>
-                <td><a href="howto/ssi.html">Server Side
-                Includes</a> </td>
-              </tr>
-
-              <tr>
-                <td><a href="howto/cgi.html">Dynamic Content with
-                CGI</a> </td>
-              </tr>
-
-              <tr>
-                <td><a href="handler.html">Handlers</a> </td>
-              </tr>
-
-              <tr>
-                <td><a href="filter.html">Filters</a> </td>
-              </tr>
-
-              <tr>
-                <td><a href="content-negotiation.html">Content
-                negotiation</a> </td>
-              </tr>
-
-              <tr>
-                <td><a href="env.html">Environment Variables</a>
-                </td>
-              </tr>
-
-              <tr>
-                <td><a href="suexec.html">Using SetUserID Execution
-                for CGI</a> </td>
-              </tr>
-
-              <tr>
-                <td><a href="misc/perf-tuning.html">General
-                Performance hints</a> </td>
-              </tr>
-
-              <tr>
-                <td><a href="misc/security_tips.html">Security
-                tips</a> </td>
-              </tr>
-
-              <tr>
-                <td><a href="misc/rewriteguide.html">URL Rewriting
-                Guide</a> </td>
-              </tr>
-            </table>
-
-            <table border="0" cellpadding="4" cellspacing="0"
-            bgcolor="#ffffff" width="280">
-              <tr>
-                <td align="center" bgcolor="#e9e9e9"><strong>Other
-                Topics</strong> </td>
-              </tr>
-
-              <tr>
-                <td><a href="faq/">Frequently Asked Questions</a>
-                </td>
-              </tr>
-
-              <tr>
-                <td><a href="sitemap.html">SiteMap</a>
-                </td>
-              </tr>
-
-              <tr>
-                <td><a href="misc/tutorials.html">Tutorials</a>
-                </td>
-              </tr>
-
-              <tr>
-                <td><a href="developer/">Documentation for
-                Developers</a> </td>
-              </tr>
-
-              <tr>
-                <td><a href="misc/">Other Notes</a> </td>
-              </tr>
-            </table>
-          </td>
-        </tr>
-      </table>
-    </div>
-
-    <p align="center">Maintained by the <a
-    href="http://httpd.apache.org/docs-project/">Apache HTTP Server
-    Documentation Project</a>.</p>
-    <!--#include virtual="footer.html" -->
-  </body>
-</html>
-
diff --git a/docs/manual/index.html.fr b/docs/manual/index.html.fr
deleted file mode 100644
index 73f0f72..0000000
--- a/docs/manual/index.html.fr
+++ /dev/null
@@ -1,267 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta name="generator" content="HTML Tidy, see www.w3.org" />
-    <meta http-equiv="Content-Type"
-    content="text/html; charset=iso-8859-1" />
-
-    <title>Documentation du serveur HTTP Apache version 2.0</title>
-  </head>
-
-  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-  vlink="#000080" alink="#FF0000">
-    <div align="center">
-      <table cellspacing="0" cellpadding="0" border="0"
-      width="600">
-        <tr>
-          <td align="center"><img src="images/apache_header.gif"
-          width="600" height="62" border="0"
-          alt="[Documentation Apache]" /></td>
-        </tr>
-
-        <tr>
-          <td align="center" bgcolor="#4f4f4f">
-            <table cellspacing="1" cellpadding="4" border="0"
-            width="100%">
-              <tr>
-                <td align="center" bgcolor="#bebebe"><a
-                href="faq/"><strong>FAQ</strong></a> </td>
-
-                <td align="center" bgcolor="#bebebe"><a
-                href="mod/directives.html"><strong>Directives</strong></a>
-                </td>
-
-                <td align="center" bgcolor="#bebebe"><a
-                href="mod/"><strong>Modules</strong></a> </td>
-
-                <td align="center" bgcolor="#bebebe"><a
-                href="http://www.apache.org/search.html"><strong>Rechercher</strong></a>
-                </td>
-              </tr>
-            </table>
-          </td>
-        </tr>
-
-        <tr>
-          <td>&nbsp;</td>
-        </tr>
-
-        <tr>
-          <td align="center" height="30">
-            <h3>Serveur HTTP Apache version 2.0</h3>
-          </td>
-        </tr>
-      </table>
-    </div>
-
-    <div align="center">
-      <table cellspacing="0" cellpadding="0" border="0"
-      width="600">
-        <tr>
-          <td align="center">
-            <form method="post" action="http://search.apache.org/">
-              <input type="hidden" name="what"
-              value="httpd.apache.org" /> <input type="hidden"
-              name="results" value="20" /> <input type="hidden"
-              name="version" value="2" /> <input type="text"
-              name="keyword" size="20" /> <input type="submit"
-              value="Chercher" />
-            </form>
-          </td>
-        </tr>
-      </table>
-
-      <table cellspacing="0" cellpadding="0" border="0"
-      width="600">
-        <tr>
-          <td align="center" valign="top">
-            <table border="0" cellpadding="4" cellspacing="0"
-            bgcolor="#ffffff" width="280">
-              <tr>
-                <td align="center" bgcolor="#e9e9e9"><strong>Notes
-                sur cette version</strong> </td>
-              </tr>
-
-              <tr>
-                <td><a href="new_features_2_0.html">Nouvelles
-                fonctionnalit&eacute;s de la version 2.0</a> </td>
-              </tr>
-
-              <tr>
-                <td><a href="upgrading.html">Migrer vers la version
-                2.0</a> </td>
-              </tr>
-
-              <tr>
-                <td><a href="LICENSE">Licence Apache</a> </td>
-              </tr>
-            </table>
-
-            <table border="0" cellpadding="4" cellspacing="0"
-            bgcolor="#ffffff" width="280">
-              <tr>
-                <td align="center" bgcolor="#e9e9e9"><strong>Manuel
-                de r&eacute;f&eacute;rence</strong> </td>
-              </tr>
-
-              <tr>
-                <td><a href="install.html">Compilation et
-                installation</a> </td>
-              </tr>
-
-              <tr>
-                <td><a href="invoking.html">D&eacute;marrage</a>
-                </td>
-              </tr>
-
-              <tr>
-                <td><a href="stopping.html">Arr&ecirc;t et
-                red&eacute;marrage</a> </td>
-              </tr>
-
-              <tr>
-                <td><a href="mod/directives.html">Directives de
-                configuration de l'ex&eacute;cution</a> </td>
-              </tr>
-
-              <tr>
-                <td>Modules <a href="mod/index-bytype.html">par
-                type</a> ou <a href="mod/">par ordre
-                alphab&eacute;tique</a> </td>
-              </tr>
-
-              <tr>
-                <td><a href="mpm.html">Modules Multi-Traitements
-                (MPMs)</a> </td>
-              </tr>
-
-              <tr>
-                <td><a href="dso.html">Support des Objets
-                partag&eacute;s dynamiques (DSO)</a> </td>
-              </tr>
-            </table>
-
-            <table border="0" cellpadding="4" cellspacing="0"
-            bgcolor="#ffffff" width="280">
-              <tr>
-                <td align="center" bgcolor="#e9e9e9"><strong>Notes
-                li&eacute;es aux plates-formes</strong> </td>
-              </tr>
-
-              <tr>
-                <td><a href="platform/windows.html">Microsoft
-                Windows</a> </td>
-              </tr>
-
-              <tr>
-                <td><a href="platform/">Autres notes pour
-                plates-formes sp&eacute;cifiques</a> </td>
-              </tr>
-            </table>
-          </td>
-
-          <td align="center" valign="top" bgcolor="#cccccc">
-            <table border="0" cellpadding="0" cellspacing="0"
-            bgcolor="#cccccc">
-              <tr>
-                <td align="center"><img src="images/pixel.gif"
-                width="1" height="1" border="0" alt="." /></td>
-              </tr>
-            </table>
-          </td>
-
-          <td align="center" valign="top">
-            <table border="0" cellpadding="4" cellspacing="0"
-            bgcolor="#ffffff" width="280">
-              <tr>
-                <td align="center" bgcolor="#e9e9e9">
-                <strong>Utilisation du serveur HTTP Apache</strong>
-                </td>
-              </tr>
-
-              <tr>
-                <td><a href="configuring.html">Fichiers de
-                configuration</a> </td>
-              </tr>
-
-              <tr>
-                <td><a href="server-wide.html">Configuration
-                globale du serveur</a> </td>
-              </tr>
-
-              <tr>
-                <td><a href="vhosts/">H&ocirc;tes virtuels</a>
-                </td>
-              </tr>
-
-              <tr>
-                <td><a href="handler.html">Handlers</a> </td>
-              </tr>
-
-              <tr>
-                <td><a
-                href="content-negotiation.html">N&eacute;gotiation
-                de contenu</a> </td>
-              </tr>
-
-              <tr>
-                <td><a href="env.html">Variables
-                d'environnement</a> </td>
-              </tr>
-
-              <tr>
-                <td><a href="suexec.html">Utilisation du SetUserID
-                pour les CGI</a> </td>
-              </tr>
-
-              <tr>
-                <td><a href="misc/perf-tuning.html">Aides sur les
-                performances g&eacute;n&eacute;rales</a> </td>
-              </tr>
-
-              <tr>
-                <td><a href="misc/security_tips.html">Trucs sur la
-                s&eacute;curit&eacute;</a> </td>
-              </tr>
-
-              <tr>
-                <td><a href="misc/rewriteguide.html">Guide de
-                r&eacute;&eacute;criture d'URLs</a> </td>
-              </tr>
-            </table>
-
-            <table border="0" cellpadding="4" cellspacing="0"
-            bgcolor="#ffffff" width="280">
-              <tr>
-                <td align="center" bgcolor="#e9e9e9"><strong>Autres
-                sujets</strong> </td>
-              </tr>
-
-              <tr>
-                <td><a href="faq/">Foires aux questions</a> </td>
-              </tr>
-
-              <tr>
-                <td><a href="misc/tutorials.html">Tutoriels</a>
-                </td>
-              </tr>
-
-              <tr>
-                <td><a href="developer/">Documentation pour les
-                d&eacute;veloppeurs</a> </td>
-              </tr>
-
-              <tr>
-                <td><a href="misc/">Autres notes</a> </td>
-              </tr>
-            </table>
-          </td>
-        </tr>
-      </table>
-    </div>
-    <!--#include virtual="footer.html" -->
-  </body>
-</html>
-
diff --git a/docs/manual/index.html.ja.jis b/docs/manual/index.html.ja.jis
deleted file mode 100644
index ea7afa2..0000000
--- a/docs/manual/index.html.ja.jis
+++ /dev/null
@@ -1,179 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head><title>Apache HTTP $B%5!<%P(B $B%P!<%8%g%s(B 2.0 $B%I%-%e%a%s%H(B</title></head>
-<!-- English revision: 1.21 -->
-<body
- bgcolor="#FFFFFF"
- text="#000000"
- link="#0000FF"
- vlink="#000080"
- alink="#FF0000"
->
-<div align="center">
-<table cellspacing="0" cellpadding="0" border="0" width="600">
-<tr>
-<td align="center">
-    <img src="images/apache_header.gif" width=600 height=62 border=0 alt="[Apache $B%I%-%e%a%s%H(B]"></td>
-</tr>
-<tr>
-<td align="center" bgcolor="#4f4f4f">
-    <table cellspacing="1" cellpadding="4" border="0" width="100%">
-    <tr>
-    <td align="center" bgcolor="#bebebe">
-    <a href="faq/"><strong>FAQ</strong></a>
-    </td>
-    <td align="center" bgcolor="#bebebe">
-    <a href="mod/directives.html"><strong>$B%G%#%l%/%F%#%V(B</strong></a>
-    </td>
-    <td align="center" bgcolor="#bebebe">
-    <a href="mod/"><strong>$B%b%8%e!<%k(B</strong></a>
-    </td>
-    <td align="center" bgcolor="#bebebe">
-    <a href="http://www.apache.org/search.html"><strong>$B8!:w(B</strong></a>
-    </td>
-    </tr></table>
-</td>
-</tr>
-<tr>
-<td>&nbsp;</td>
-</tr><tr>
-<td align="center" height="30">
-	<h3>Apache HTTP Server Version 2.0</h3>
-</td>
-</tr>
-</table>
-</div>
-
-<div align="center">
-
-<table cellspacing="0" cellpadding="0" border="0" width="600">
-<tr><td align="center">
-   <form method="post" action="http://search.apache.org/">
-   <input type="hidden" name="what" value="httpd.apache.org">
-   <input type="hidden" name="results" value="20">
-   <input type="hidden" name="version" value="2">
-   <input type="text" name="keyword" size="20">
-   <input type="submit" value="Search">
-   </form>
-</td></tr></table>
-
-<!--
-<table cellspacing="0" cellpadding="0" border="0" width="600">
-<tr>
-<td align="center"><hr size="1" noshade width="100%">
-</td>
-</tr>
-</table>
--->
-
-<table cellspacing="0" cellpadding="0" border="0" width="600">
-<tr>
-<td align="center" valign="top">
-<table border="0" cellpadding="4" cellspacing="0" bgcolor="#ffffff" width="280">
-<tr><td align="center" bgcolor="#e9e9e9">
-  <strong>$B%j%j!<%9%N!<%H(B</strong>
-</td></tr><tr><td>
-<a href="new_features_2_0.html">Apache 2.0 $B$N?75!G=(B</a>
-</td></tr><tr><td>
-<a href="upgrading.html">Apache 2.0 $B$X$N%"%C%W%0%l!<%I(B</a>
-</td></tr><tr><td>
-<a href="LICENSE">Apache $B$N%i%$%;%s%9(B</a>
-</td></tr>
-</table>
-
-<p>
-<table border="0" cellpadding="4" cellspacing="0" bgcolor="#ffffff" width="280">
-<tr><td align="center" bgcolor="#e9e9e9">
-<strong>$B%j%U%!%l%s%9%^%K%e%"%k(B</strong>
-</td></tr><tr><td>
-<a href="install.html">$B%3%s%Q%$%k$H%$%s%9%H!<%k(B</a>
-</td></tr><tr><td>
-<a href="invoking.html">$B5/F0(B</a>
-</td></tr><tr><td>
-<a href="stopping.html">$B=*N;$^$?$O:F5/F0(B</a>
-</td></tr><tr><td>
-<a href="mod/directives.html">$B<B9T;~$N@_DjJ}K!(B</a>
-</td></tr><tr><td>
-$B%b%8%e!<%k(B: <a href="mod/index-bytype.html">$B<oN`JL(B</a> $B$H(B 
-    <a href="mod/">$B%"%k%U%!%Y%C%H=g(B</a>
-</td></tr><tr><td>
-<a href="mpm.html">Multi-Processing Modules (MPM)</a>
-</td></tr><tr><td>
-<a href="programs/">$B%5!<%P$H%5%]!<%H%W%m%0%i%`(B</a>
-</td></tr><tr><td>
-<a href="dso.html">Dynamic Shared Object (DSO) $B$N%5%]!<%H(B</a>
-</td></tr></table>
-
-<p>
-<table border="0" cellpadding="4" cellspacing="0" bgcolor="#ffffff" width="280">
-<tr><td align="center" bgcolor="#e9e9e9">
-<strong>$B%W%i%C%H%U%)!<%`8GM-$N>pJs(B</strong>
-</td></tr><tr><td>
-<a href="platform/windows.html">Microsoft Windows</a>
-</td></tr><tr><td>
-<a href="platform/">$BB>$N%W%i%C%H%U%)!<%`FCM-$N>pJs(B</a>
-</td></tr></table>
-	
-</td>
-<td align="center" valign="top" bgcolor="#cccccc">
-<table border="0" cellpadding="0" cellspacing="0" bgcolor="#cccccc"><tr><td
- align="center"><img src="images/pixel.gif" width="1" height="1"
- border="0" alt="."></td></tr></table>
-</td>
-<td align="center" valign="top">
-<table border="0" cellpadding="4" cellspacing="0" bgcolor="#ffffff" width="280">
-<tr><td align="center" bgcolor="#e9e9e9">
-<strong>Apache HTTP $B%5!<%P$r;H$&(B</strong>
-</td></tr><tr><td>
-<a href="configuring.html">$B@_Dj%U%!%$%k(B</a>
-</td></tr><tr><td>
-<a href="server-wide.html">$B%5!<%PA4BN$N@_Dj(B</a>
-</td></tr><tr><td>
-<a href="urlmapping.html">URL $B$r%U%!%$%k%7%9%F%`$K%^%C%W$9$k(B<a>
-</td></tr><tr><td>
-<a href="vhosts/">$B%P!<%A%c%k%[%9%H(B</a>
-</td></tr><tr><td>
-<a href="handler.html">$B%O%s%I%i(B</a>
-</td></tr><tr><td>
-<a href="filter.html">$B%U%#%k%?(B</a>
-</td></tr><tr><td>
-<a href="content-negotiation.html">$B%3%s%F%s%H%M%4%7%(!<%7%g%s(B</a>
-</td></tr><tr><td>
-<a href="env.html">$B4D6-JQ?t(B</a>
-</td></tr><tr><td>
-<a href="suexec.html">CGI $B$G(B SetUserID $B<B9T$r;H$&(B</a>
-</td></tr><tr><td>
-<a href="misc/perf-tuning.html">$B0lHLE*$J@-G=$K4X$9$k%R%s%H(B</a>
-</td></tr><tr><td>
-<a href="misc/security_tips.html">$B%;%-%e%j%F%#>pJs(B</a>
-</td></tr><tr><td>
-<a href="misc/rewriteguide.html">URL Rewriting $B$N%,%$%I(B</a>
-</td></tr></table>
-
-<p>
-<table border="0" cellpadding="4" cellspacing="0" bgcolor="#ffffff" width="280">
-<tr><td align="center" bgcolor="#e9e9e9">
-<strong>$B$=$NB>(B</strong>
-</td></tr><tr><td>
-<a href="faq/">FAQ</a>
-</td></tr><tr><td>
-<a href="misc/tutorials.html">$B%A%e!<%H%j%"%k(B</a>
-</td></tr><tr><td>
-<a href="developer/">$B3+H/<T$N$?$a$N%I%-%e%a%s%H(B</a>
-</td></tr><tr><td>
-<a href="misc/">$B$=$NB>(B</a>
-</td></tr></table>
-</td>
-</tr>
-</table>
-
-</div>
-
-<p align="center"><a
-href="http://httpd.apache.org/docs-project/">Apache HTTP Server
-Documentation Project</a> $B$K$h$j%a%s%F%J%s%9$5$l$F$$$^$9!#(B</p>
-
-<!--#include virtual="footer.html" -->
-</body>
-</html>
-
diff --git a/docs/manual/install.html b/docs/manual/install.html
deleted file mode 100644
index ee9600d..0000000
--- a/docs/manual/install.html
+++ /dev/null
@@ -1,634 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta name="generator" content="HTML Tidy, see www.w3.org" />
-
-    <title>Compiling and Installing Apache</title>
-  </head>
-  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-
-  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-  vlink="#000080" alink="#FF0000">
-    <!--#include virtual="header.html" -->
-
-    <h1 align="CENTER">Compiling and Installing</h1>
-
-    <p>This document covers compilation and installation of Apache
-    on Unix and Unix-like systems only. For compiling and
-    installation on Windows, see <a
-    href="platform/windows.html">Using Apache with Microsoft
-    Windows</a>. For other platforms, see the <a
-    href="platform/">platform</a> documentation.</p>
-
-    <p>Apache 2.0's configuration and installation environment has
-    changed completely from Apache 1.3. Apache 1.3 used a custom
-    set of scripts to achieve easy installation. Apache 2.0 now
-    uses libtool and autoconf to create an environment that looks
-    like many other Open Source projects.</p>
-
-    <ul>
-      <li><a href="#overview">Overview for the impatient</a></li>
-
-      <li><a href="#requirements">Requirements</a></li>
-
-      <li><a href="#download">Download</a></li>
-
-      <li><a href="#extract">Extract</a></li>
-
-      <li>
-        <a href="#configure">Configuring the source tree</a> 
-
-        <ul>
-          <li><a href="#environment">Environment Variables</a></li>
-
-          <li><a href="#output">autoconf Output Options</a></li>
-
-          <li><a href="#pathnames">Pathnames</a></li>
-
-          <li><a href="#modules">Modules</a></li>
-
-          <li><a href="#suexec">Suexec</a></li>
-        </ul>
-      </li>
-
-      <li><a href="#compile">Build</a></li>
-
-      <li><a href="#install">Install</a></li>
-
-      <li><a href="#customize">Customize</a></li>
-
-      <li><a href="#test">Test</a></li>
-    </ul>
-    <hr />
-
-    <h3><a id="overview" name="overview">Overview for the
-    impatient</a></h3>
-
-    <table>
-      <tr>
-        <td><a href="#download">Download</a></td>
-
-        <td><code>$ lynx
-        http://www.apache.org/dist/httpd/httpd-2_0_<em>NN</em>.tar.gz</code>
-        </td>
-      </tr>
-
-      <tr>
-        <td><a href="#extract">Extract</a></td>
-
-        <td><code>$ gzip -d httpd-2_0_<em>NN</em>.tar.gz<br />
-         $ tar xvf httpd-2_0_<em>NN</em>.tar</code> </td>
-      </tr>
-
-      <tr>
-        <td><a href="#configure">Configure</a></td>
-
-        <td><code>$ ./configure --prefix=<em>PREFIX</em></code>
-        </td>
-      </tr>
-
-      <tr>
-        <td><a href="#compile">Compile</a></td>
-
-        <td><code>$ make</code> </td>
-      </tr>
-
-      <tr>
-        <td><a href="#install">Install</a></td>
-
-        <td><code>$ make install</code> </td>
-      </tr>
-
-      <tr>
-        <td><a href="#customize">Customize</a></td>
-
-        <td><code>$ vi <em>PREFIX</em>/conf/httpd.conf</code> </td>
-      </tr>
-
-      <tr>
-        <td><a href="#test">Test</a></td>
-
-        <td><code>$ <em>PREFIX</em>/bin/apachectl start</code>
-        </td>
-      </tr>
-    </table>
-
-    <p><em>NN</em> must be replaced with the current minor version
-    number, and <em>PREFIX</em> must be replaced with the
-    filesystem path under which the server should be installed. If
-    <em>PREFIX</em> is not specified, it defaults to
-    <code>/usr/local/apache2</code>.</p>
-
-    <p>Each section of the compilation and installation process is
-    described in more detail below, beginning with the requirements
-    for compiling and installing Apache HTTPD.</p>
-
-    <h3><a id="requirements"
-    name="requirements">Requirements</a></h3>
-
-    <p>The following requirements exist for building Apache:</p>
-
-    <ul>
-      <li>Disk Space<br />
-      <br />
-       Make sure you have at least 50 MB of temporary free disk
-      space available. After installation Apache occupies
-      approximately 10 MB of disk space. The actual disk space
-      requirements will vary considerably based on your chosen
-      configuration options and any third-party modules.<br />
-      <br />
-      </li>
-
-      <li>ANSI-C Compiler and Build System<br />
-      <br />
-       Make sure you have an ANSI-C compiler installed. The <a
-      href="http://www.gnu.org/software/gcc/gcc.html">GNU C
-      compiler (GCC)</a> from the <a
-      href="http://www.gnu.org/">Free Software Foundation (FSF)</a>
-      is recommended (version 2.7.2 is fine). If you don't have GCC
-      then at least make sure your vendor's compiler is ANSI
-      compliant. In addition, your <code>PATH</code> must contain
-      basic build tools such as <code>make</code>.<br />
-      <br />
-      </li>
-
-      <li>Accurate time keeping<br />
-      <br />
-       Elements of the HTTP protocol are expressed as the time of
-      day. So, it's time to investigate setting some time
-      synchronization facility on your system. Usually the ntpdate
-      or xntpd programs are used for this purpose which are based
-      on the Network Time Protocol (NTP). See the Usenet newsgroup
-      <a
-      href="news:comp.protocols.time.ntp">comp.protocols.time.ntp</a>
-      and the <a href="http://www.eecis.udel.edu/~ntp/">NTP
-      homepage</a> for more details about NTP software and public
-      time servers.<br />
-      <br />
-      </li>
-
-      <li><a href="http://www.perl.org/">Perl 5</a>
-      [OPTIONAL]<br />
-      <br />
-       For some of the support scripts like <a
-      href="programs/apxs.html">apxs</a> or <a
-      href="programs/dbmmanage.html">dbmmanage</a> (which are
-      written in Perl) the Perl 5 interpreter is required (versions
-      5.003 and 5.004 are fine). If no such interpreter is found by
-      the `configure' script there is no harm. Of course, you still
-      can build and install Apache 2.0. Only those support scripts
-      cannot be used. If you have multiple Perl interpreters
-      installed (perhaps a Perl 4 from the vendor and a Perl 5 from
-      your own), then it is recommended to use the --with-perl
-      option (see below) to make sure the correct one is selected
-      by ./configure.<br />
-      <br />
-      </li>
-    </ul>
-
-    <h3><a id="download" name="download">Download</a></h3>
-
-    <p>Apache can be downloaded from the <a
-    href="http://www.apache.org/dist/httpd/">Apache Software
-    Foundation download site</a> or from a <a
-    href="http://www.apache.org/dyn/closer.cgi">nearby
-    mirror</a>.</p>
-
-    <p>Version numbers that end in <code>alpha</code> indicate
-    early pre-test versions which may or may not work. Version
-    numbers ending in <code>beta</code> indicate more reliable
-    releases that still require further testing or bug fixing. If
-    you wish to download the best available production release of
-    the Apache HTTP Server, you should choose the latest version
-    with neither <code>alpha</code> nor <code>beta</code> in its
-    filename.</p>
-
-    <p>After downloading, especially if a mirror site is used, it
-    is important to verify that you have a complete and unmodified
-    version of the Apache HTTP Server. This can be accomplished by
-    testing the downloaded tarball against the PGP signature. This,
-    in turn, is a two step procedure. First, you must obtain the
-    <code>KEYS</code> file from the <a
-    href="http://www.apache.org/dist/httpd/">Apache distribution
-    site</a>. (To assure that the <code>KEYS</code> file itself has
-    not been modified, it may be a good idea to use a file from a
-    previous distribution of Apache or import the keys from a
-    public key server.) The keys are imported into your personal
-    key ring using one of the following commands (depending on your
-    pgp version):</p>
-
-    <blockquote>
-      <code>$ pgp &lt; KEYS</code>
-    </blockquote>
-    or 
-
-    <blockquote>
-      <code>$ gpg --import KEYS</code>
-    </blockquote>
-
-    <p>The next step is to test the tarball against the PGP
-    signature, which should always be obtained from the <a
-    href="http://www.apache.org/dist/httpd/">main Apache
-    website</a>. The signature file has a filename identical to the
-    source tarball with the addition of <code>.asc</code>. Then you
-    can check the distribution with one of the following commands
-    (again, depending on your pgp version):</p>
-
-    <blockquote>
-      <code>$ pgp httpd-2_0_<em>NN</em>.tar.gz.asc</code>
-    </blockquote>
-    or 
-
-    <blockquote>
-      <code>$ gpg --verify httpd-2_0_<em>NN</em>.tar.gz.asc</code>
-    </blockquote>
-    You should receive a message like<br />
-     <br />
-     
-
-    <blockquote>
-      <code>Good signature from user "Martin Kraemer
-      &lt;martin@apache.org&gt;".</code>
-    </blockquote>
-
-    <p>Depending on the trust relationships contained in your key
-    ring, you may also receive a message saying that the
-    relationship between the key and the signer of the key cannot
-    be verified. This is not a problem if you trust the
-    authenticity of the <code>KEYS</code> file.</p>
-
-    <h3><a id="extract" name="extract">Extract</a></h3>
-
-    <p>Extracting the source from the Apache HTTPD tarball is a
-    simple matter of uncompressing, and then untarring:</p>
-
-    <blockquote>
-      <code>$ gzip -d httpd-2_0_<em>NN</em>.tar.gz<br />
-       $ tar xvf httpd-2_0_<em>NN</em>.tar</code>
-    </blockquote>
-
-    <p>This will create a new directory under the current directory
-    containing the source code for the distribution. You should
-    <code>cd</code> into that directory before proceeding with
-    compiling the server.</p>
-
-    <h3><a id="configure" name="configure">Configuring the source
-    tree</a></h3>
-
-    <p>The next step is to configure the Apache source tree for
-    your particular platform and personal requirements. This is
-    done using the script <code>configure</code> included in the
-    root directory of the distribution. (Developers downloading the
-    CVS version of the Apache source tree will need to have
-    <code>autoconf</code> and <code>libtool</code> installed and
-    will need to run <code>buildconf</code> before proceeding with
-    the next steps. This is not necessary for official
-    releases.)</p>
-
-    <p>To configure the source tree using all the default options,
-    simply type <code>./configure</code>. To change the default
-    options, <code>configure</code> accepts a variety of variables
-    and command line options. Environment variables are generally
-    placed before the <code>./configure</code> command, while other
-    options are placed after. The most important option here is the
-    location prefix where Apache is to be installed later, because
-    Apache has to be configured for this location to work
-    correctly. But there are a lot of other options available for
-    your pleasure.</p>
-
-    <p>For a short impression of what possibilities you have, here
-    is a typical example which compiles Apache for the installation
-    tree /sw/pkg/apache with a particular compiler and flags plus
-    the two additional modules mod_rewrite and mod_speling for
-    later loading through the DSO mechanism:</p>
-
-    <blockquote>
-      <code>$ CC="pgcc" CFLAGS="-O2" \<br />
-       ./configure --prefix=/sw/pkg/apache \<br />
-       --enable-rewrite=shared \<br />
-       --enable-speling=shared</code>
-    </blockquote>
-
-    <p>When configure is run it will take several minutes to test
-    for the availability of features on your system and build
-    Makefiles which will later be used to compile the server.</p>
-
-    <p>The easiest way to find all of the configuration flags for
-    Apache is to run ./configure --help. What follows is a brief
-    description of most of the arguments and environment
-    variables.</p>
-
-    <h4><a id="environment" name="environment">Environment
-    Variables</a></h4>
-
-    <p>The autoconf build process uses several environment
-    variables to configure the build environment. In general, these
-    variables change the method used to build Apache, but not the
-    eventual features of the server. These variables can be placed
-    in the environment before invoking <code>configure</code>, but
-    it is usually easier to specify them on the
-    <code>configure</code> command line as demonstrated in the
-    example above.</p>
-
-    <dl>
-      <dt><code>CC=...</code></dt>
-
-      <dd>The name of the C compiler command.</dd>
-
-      <dt><code>CPPFLAGS=...</code></dt>
-
-      <dd>Miscellaneous C preprocessor and compiler options.</dd>
-
-      <dt><code>CFLAGS=...</code></dt>
-
-      <dd>Debugging and optimization options for the C
-      compiler.</dd>
-
-      <dt><code>LDFLAGS=...</code></dt>
-
-      <dd>Miscellaneous options to be passed to the linker.</dd>
-
-      <dt><code>LIBS=...</code></dt>
-
-      <dd>Library location information ("-L" and "-l" options) to
-      pass to the linker.</dd>
-
-      <dt><code>INCLUDES=...</code></dt>
-
-      <dd>Header file search directories ("-I<em>dir</em>").</dd>
-
-      <dt><code>TARGET=...</code> [Default: apache]</dt>
-
-      <dd>Name of the executable which will be built.</dd>
-
-      <dt><code>NOTEST_CPPFLAGS=...</code></dt>
-
-      <dt><code>NOTEST_CFLAGS=...</code></dt>
-
-      <dt><code>NOTEST_LDFLAGS=...</code></dt>
-
-      <dt><code>NOTEST_LIBS=...</code></dt>
-
-      <dd>These variables share the same function as their
-      non-NOTEST namesakes. However, the variables are applied to
-      the build process only after autoconf has performed its
-      feature testing. This allows the inclusion of flags which
-      will cause problems during feature testing, but must be used
-      for the final compilation.</dd>
-
-      <dt><code>SHLIB_PATH=...</code></dt>
-
-      <dd>Options which specify shared library paths for the
-      compiler and linker.</dd>
-    </dl>
-
-    <h4><a id="output" name="output">autoconf Output
-    Options</a></h4>
-
-    <dl>
-      <dt><code>--help</code></dt>
-
-      <dd>Prints the usage message including all available options,
-      but does not actually configure anything.</dd>
-
-      <dt><code>--quiet</code></dt>
-
-      <dd>Prevents the printing of the usual "checking..."
-      messages.</dd>
-
-      <dt><code>--verbose</code></dt>
-
-      <dd>Prints much more information during the configuration
-      process, including the names of all the files examined.</dd>
-    </dl>
-
-    <h4><a id="pathnames" name="pathnames">Pathnames</a></h4>
-
-    <p>There are currently two ways to configure the pathnames
-    under which Apache will install its files. First, you can
-    specify a directory and have Apache install itself under that
-    directory in its default locations.</p>
-
-    <dl>
-      <dt><code>--prefix=<em>PREFIX</em></code> [Default:
-      /usr/local/apache2]</dt>
-
-      <dd>Specifies the directory under which the Apache files will
-      be installed.</dd>
-    </dl>
-
-    <p>It is possible to specify that architecture-dependent files
-    should be placed under a different directory.</p>
-
-    <dl>
-      <dt><code>--exec-prefix=<em>EPREFIX</em></code> [Default:
-      <em>PREFIX</em>]</dt>
-
-      <dd>Specifies the directory under which
-      architecture-dependent files will be placed.</dd>
-    </dl>
-
-    <p>The second, and more flexible way to configure the install
-    path locations for Apache is using the
-    <code>config.layout</code> file. Using this method, it is
-    possible to separately specify the location for each type of
-    file within the Apache installation. The
-    <code>config.layout</code> file contains several example
-    configurations, and you can also create your own custom
-    configuration following the examples. The different layouts in
-    this file are grouped into <code>&lt;Layout
-    FOO&gt;...&lt;/Layout&gt;</code> sections and referred to by
-    name as in <code>FOO</code>.</p>
-
-    <dl>
-      <dt><code>--enable-layout=<em>LAYOUT</em></code></dt>
-
-      <dd>Use the named layout in the <code>config.layout</code>
-      file to specify the installation paths.</dd>
-    </dl>
-
-    <p>Presently it is not possible to mix the
-    <code>--enable-layout</code> and <code>--prefix</code> options.
-    Nor is it possible to individually specify detailed pathnames
-    on the <code>configure</code> command line. If you want just a
-    basic install, you can simply use the <code>--prefix</code>
-    option on its own. If you want to customize your install, you
-    should edit the <code>config.layout</code> file and use the
-    <code>--enable-layout</code> option.</p>
-
-    <h4><a id="modules" name="modules">Modules</a></h4>
-
-    <p>Apache is a modular server. Only the most basic
-    functionality is included in the core server. Extended features
-    are available in various modules. During the configuration
-    process, you must select which modules to compile for use with
-    your server. You can view a <a
-    href="mod/index-bytype.html">list of modules</a> included in
-    the documentation. Those modules with a <a
-    href="mod/module-dict.html#Status">status</a> of "Base" are
-    included by default and must be specifically disabled if you do
-    not want them. Modules with any other status must be
-    specifically enabled if you wish to use them.</p>
-
-    <p>There are two ways for a module to be compiled and used with
-    Apache. Modules may be <em>statically compiled</em>, which
-    means that they are permanently included in the Apache binary.
-    Alternatively, if your operating system supports Dynamic Shared
-    Objects (DSOs) and autoconf can detect that support, then
-    modules may be <em>dynamically compiled</em>. DSO modules are
-    stored separately from the Apache binary, and may be included
-    or excluded from the server using the run-time configuration
-    directives provided by <a href="mod/mod_so.html">mod_so</a>.
-    The mod_so is automatically included in the server if any
-    dynamic modules are included in the compilation. If you would
-    like to make your server capable of loading DSOs without
-    actually compiling any dynamic modules, you can explicitly
-    <code>--enable-so</code>.</p>
-
-    <dl>
-      <dt><code>--enable-<em>MODULE</em>[=shared]</code></dt>
-
-      <dd>Compile and include the module <em>MODULE</em>. The
-      identifier <em>MODULE</em> is the <a
-      href="mod/module-dict.html#ModuleIdentifier">Module
-      Identifier</a> from the module documentation without the
-      "_module" string. To compile the module as a DSO, add the
-      option <code>=shared</code>.</dd>
-
-      <dt><code>--disable-<em>MODULE</em></code></dt>
-
-      <dd>Remove the module <em>MODULE</em> which would otherwise
-      be compiled and included.</dd>
-
-      <dt><code>--enable-modules=<em>MODULE-LIST</em></code></dt>
-
-      <dd>Compile and include the modules listed in the
-      space-separated <em>MODULE-LIST</em>.</dd>
-
-      <dt>
-      <code>--enable-mods-shared=<em>MODULE-LIST</em></code></dt>
-
-      <dd>Compile and include the modules in the space-separated
-      <em>MODULE-LIST</em> as dynamically loadable (DSO)
-      modules.</dd>
-    </dl>
-
-    <p>The <em>MODULE-LIST</em> in the
-    <code>--enable-modules</code> and
-    <code>--enable-mods-shared</code> options is usually a
-    space-separated list of module identifiers. For example, to
-    enable mod_dav and mod_info, you can either use</p>
-
-    <blockquote>
-      <code>./configure --enable-dav --enable-info</code>
-    </blockquote>
-
-    <p>or, equivalently,</p>
-
-    <blockquote>
-      <code>./configure --enable-modules="dav info"</code>
-    </blockquote>
-
-    <p>In addition, the special keywords <code>all</code> or
-    <code>most</code> can be used to add all or most of the modules
-    in one step. You can then remove any modules that you do not
-    want with the <code>--disable-<em>MODULE</em></code> option.
-    For example, to include all modules as DSOs with the exception
-    of mod_info, you can use</p>
-
-    <blockquote>
-      <code>./configure --enable-mods-shared=all
-      --disable-info</code>
-    </blockquote>
-
-    <p>In addition to the standard set of modules, Apache 2.0 also
-    includes a choice of <a href="mpm.html">Multi-Processing
-    Modules</a> (MPMs). One, and only one MPM must be included in
-    the compilation process. The default MPMs for each platform are
-    listed on the <a href="mpm.html">MPM documentation page</a>,
-    but can be overridden on the <code>configure</code> command
-    line.</p>
-
-    <dl>
-      <dt><code>--with-mpm=<em>NAME</em></code></dt>
-
-      <dd>Choose the mpm <em>NAME</em>.</dd>
-    </dl>
-
-    <h4><a id="suexec" name="suexec">Suexec</a></h4>
-
-    <p>Apache includes a support program called <a
-    href="suexec.html">suexec</a> which can be used to isolate user
-    CGI programs. However, if suexec is improperly configured, it
-    can cause serious security problems. Therefore, you should
-    carefully read and consider the <a href="suexec.html">suexec
-    documentation</a> before implementing this feature.</p>
-
-    <h3><a id="compile" name="compile">Build</a></h3>
-
-    <p>Now you can build the various parts which form the Apache
-    package by simply running the command:</p>
-
-    <blockquote>
-      <code>$ make</code>
-    </blockquote>
-
-    <p>Please be patient here, since a base configuration takes
-    approximately 3 minutes to compile under a Pentium III/Linux
-    2.2 system, but this will vary widely depending on your
-    hardware and the number of modules which you have enabled.</p>
-
-    <h3><a id="install" name="install">Install</a></h3>
-
-    <p>Now its time to install the package under the configured
-    installation <em>PREFIX</em> (see <code>--prefix</code> option
-    above) by running:</p>
-
-    <blockquote>
-      <code>$ make install</code>
-    </blockquote>
-
-    <p>If you are upgrading, the installation will not overwrite
-    your configuration files or documents.</p>
-
-    <h3><a id="customize" name="customize">Customize</a></h3>
-
-    <p>Next, you can customize your Apache HTTP server by editing
-    the <a href="configuring.html">configuration files</a> under
-    <em>PREFIX</em>/conf/.</p>
-
-    <blockquote>
-      <code>$ vi <em>PREFIX</em>/conf/httpd.conf</code>
-    </blockquote>
-
-    <p>Have a look at the Apache manual under <a
-    href="./">docs/manual/</a> or <a
-    href="http://httpd.apache.org/docs/">http://httpd.apache.org/docs/</a>
-    for a complete reference of available <a
-    href="mod/directives.html">configuration directives</a>.</p>
-
-    <h3><a id="test" name="test">Test</a></h3>
-
-    <p>Now you can <a href="invoking.html">start</a> your Apache
-    HTTP server by immediately running:</p>
-
-    <blockquote>
-      <code>$ <em>PREFIX</em>/bin/apachectl start</code>
-    </blockquote>
-
-    <p>and then you should be able to request your first document
-    via URL http://localhost/. The web page you see is located
-    under the <a href="mod/core.html#documentroot">DocumentRoot</a>
-    which will usually be <code><em>PREFIX</em>/htdocs/</code>.
-    Then <a href="stopping.html">stop</a> the server again by
-    running:</p>
-
-    <blockquote>
-      <code>$ <em>PREFIX</em>/bin/apachectl stop</code>
-    </blockquote>
-    <!--#include virtual="footer.html" -->
-  </body>
-</html>
-
diff --git a/docs/manual/install.html.en b/docs/manual/install.html.en
deleted file mode 100644
index ee9600d..0000000
--- a/docs/manual/install.html.en
+++ /dev/null
@@ -1,634 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta name="generator" content="HTML Tidy, see www.w3.org" />
-
-    <title>Compiling and Installing Apache</title>
-  </head>
-  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-
-  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-  vlink="#000080" alink="#FF0000">
-    <!--#include virtual="header.html" -->
-
-    <h1 align="CENTER">Compiling and Installing</h1>
-
-    <p>This document covers compilation and installation of Apache
-    on Unix and Unix-like systems only. For compiling and
-    installation on Windows, see <a
-    href="platform/windows.html">Using Apache with Microsoft
-    Windows</a>. For other platforms, see the <a
-    href="platform/">platform</a> documentation.</p>
-
-    <p>Apache 2.0's configuration and installation environment has
-    changed completely from Apache 1.3. Apache 1.3 used a custom
-    set of scripts to achieve easy installation. Apache 2.0 now
-    uses libtool and autoconf to create an environment that looks
-    like many other Open Source projects.</p>
-
-    <ul>
-      <li><a href="#overview">Overview for the impatient</a></li>
-
-      <li><a href="#requirements">Requirements</a></li>
-
-      <li><a href="#download">Download</a></li>
-
-      <li><a href="#extract">Extract</a></li>
-
-      <li>
-        <a href="#configure">Configuring the source tree</a> 
-
-        <ul>
-          <li><a href="#environment">Environment Variables</a></li>
-
-          <li><a href="#output">autoconf Output Options</a></li>
-
-          <li><a href="#pathnames">Pathnames</a></li>
-
-          <li><a href="#modules">Modules</a></li>
-
-          <li><a href="#suexec">Suexec</a></li>
-        </ul>
-      </li>
-
-      <li><a href="#compile">Build</a></li>
-
-      <li><a href="#install">Install</a></li>
-
-      <li><a href="#customize">Customize</a></li>
-
-      <li><a href="#test">Test</a></li>
-    </ul>
-    <hr />
-
-    <h3><a id="overview" name="overview">Overview for the
-    impatient</a></h3>
-
-    <table>
-      <tr>
-        <td><a href="#download">Download</a></td>
-
-        <td><code>$ lynx
-        http://www.apache.org/dist/httpd/httpd-2_0_<em>NN</em>.tar.gz</code>
-        </td>
-      </tr>
-
-      <tr>
-        <td><a href="#extract">Extract</a></td>
-
-        <td><code>$ gzip -d httpd-2_0_<em>NN</em>.tar.gz<br />
-         $ tar xvf httpd-2_0_<em>NN</em>.tar</code> </td>
-      </tr>
-
-      <tr>
-        <td><a href="#configure">Configure</a></td>
-
-        <td><code>$ ./configure --prefix=<em>PREFIX</em></code>
-        </td>
-      </tr>
-
-      <tr>
-        <td><a href="#compile">Compile</a></td>
-
-        <td><code>$ make</code> </td>
-      </tr>
-
-      <tr>
-        <td><a href="#install">Install</a></td>
-
-        <td><code>$ make install</code> </td>
-      </tr>
-
-      <tr>
-        <td><a href="#customize">Customize</a></td>
-
-        <td><code>$ vi <em>PREFIX</em>/conf/httpd.conf</code> </td>
-      </tr>
-
-      <tr>
-        <td><a href="#test">Test</a></td>
-
-        <td><code>$ <em>PREFIX</em>/bin/apachectl start</code>
-        </td>
-      </tr>
-    </table>
-
-    <p><em>NN</em> must be replaced with the current minor version
-    number, and <em>PREFIX</em> must be replaced with the
-    filesystem path under which the server should be installed. If
-    <em>PREFIX</em> is not specified, it defaults to
-    <code>/usr/local/apache2</code>.</p>
-
-    <p>Each section of the compilation and installation process is
-    described in more detail below, beginning with the requirements
-    for compiling and installing Apache HTTPD.</p>
-
-    <h3><a id="requirements"
-    name="requirements">Requirements</a></h3>
-
-    <p>The following requirements exist for building Apache:</p>
-
-    <ul>
-      <li>Disk Space<br />
-      <br />
-       Make sure you have at least 50 MB of temporary free disk
-      space available. After installation Apache occupies
-      approximately 10 MB of disk space. The actual disk space
-      requirements will vary considerably based on your chosen
-      configuration options and any third-party modules.<br />
-      <br />
-      </li>
-
-      <li>ANSI-C Compiler and Build System<br />
-      <br />
-       Make sure you have an ANSI-C compiler installed. The <a
-      href="http://www.gnu.org/software/gcc/gcc.html">GNU C
-      compiler (GCC)</a> from the <a
-      href="http://www.gnu.org/">Free Software Foundation (FSF)</a>
-      is recommended (version 2.7.2 is fine). If you don't have GCC
-      then at least make sure your vendor's compiler is ANSI
-      compliant. In addition, your <code>PATH</code> must contain
-      basic build tools such as <code>make</code>.<br />
-      <br />
-      </li>
-
-      <li>Accurate time keeping<br />
-      <br />
-       Elements of the HTTP protocol are expressed as the time of
-      day. So, it's time to investigate setting some time
-      synchronization facility on your system. Usually the ntpdate
-      or xntpd programs are used for this purpose which are based
-      on the Network Time Protocol (NTP). See the Usenet newsgroup
-      <a
-      href="news:comp.protocols.time.ntp">comp.protocols.time.ntp</a>
-      and the <a href="http://www.eecis.udel.edu/~ntp/">NTP
-      homepage</a> for more details about NTP software and public
-      time servers.<br />
-      <br />
-      </li>
-
-      <li><a href="http://www.perl.org/">Perl 5</a>
-      [OPTIONAL]<br />
-      <br />
-       For some of the support scripts like <a
-      href="programs/apxs.html">apxs</a> or <a
-      href="programs/dbmmanage.html">dbmmanage</a> (which are
-      written in Perl) the Perl 5 interpreter is required (versions
-      5.003 and 5.004 are fine). If no such interpreter is found by
-      the `configure' script there is no harm. Of course, you still
-      can build and install Apache 2.0. Only those support scripts
-      cannot be used. If you have multiple Perl interpreters
-      installed (perhaps a Perl 4 from the vendor and a Perl 5 from
-      your own), then it is recommended to use the --with-perl
-      option (see below) to make sure the correct one is selected
-      by ./configure.<br />
-      <br />
-      </li>
-    </ul>
-
-    <h3><a id="download" name="download">Download</a></h3>
-
-    <p>Apache can be downloaded from the <a
-    href="http://www.apache.org/dist/httpd/">Apache Software
-    Foundation download site</a> or from a <a
-    href="http://www.apache.org/dyn/closer.cgi">nearby
-    mirror</a>.</p>
-
-    <p>Version numbers that end in <code>alpha</code> indicate
-    early pre-test versions which may or may not work. Version
-    numbers ending in <code>beta</code> indicate more reliable
-    releases that still require further testing or bug fixing. If
-    you wish to download the best available production release of
-    the Apache HTTP Server, you should choose the latest version
-    with neither <code>alpha</code> nor <code>beta</code> in its
-    filename.</p>
-
-    <p>After downloading, especially if a mirror site is used, it
-    is important to verify that you have a complete and unmodified
-    version of the Apache HTTP Server. This can be accomplished by
-    testing the downloaded tarball against the PGP signature. This,
-    in turn, is a two step procedure. First, you must obtain the
-    <code>KEYS</code> file from the <a
-    href="http://www.apache.org/dist/httpd/">Apache distribution
-    site</a>. (To assure that the <code>KEYS</code> file itself has
-    not been modified, it may be a good idea to use a file from a
-    previous distribution of Apache or import the keys from a
-    public key server.) The keys are imported into your personal
-    key ring using one of the following commands (depending on your
-    pgp version):</p>
-
-    <blockquote>
-      <code>$ pgp &lt; KEYS</code>
-    </blockquote>
-    or 
-
-    <blockquote>
-      <code>$ gpg --import KEYS</code>
-    </blockquote>
-
-    <p>The next step is to test the tarball against the PGP
-    signature, which should always be obtained from the <a
-    href="http://www.apache.org/dist/httpd/">main Apache
-    website</a>. The signature file has a filename identical to the
-    source tarball with the addition of <code>.asc</code>. Then you
-    can check the distribution with one of the following commands
-    (again, depending on your pgp version):</p>
-
-    <blockquote>
-      <code>$ pgp httpd-2_0_<em>NN</em>.tar.gz.asc</code>
-    </blockquote>
-    or 
-
-    <blockquote>
-      <code>$ gpg --verify httpd-2_0_<em>NN</em>.tar.gz.asc</code>
-    </blockquote>
-    You should receive a message like<br />
-     <br />
-     
-
-    <blockquote>
-      <code>Good signature from user "Martin Kraemer
-      &lt;martin@apache.org&gt;".</code>
-    </blockquote>
-
-    <p>Depending on the trust relationships contained in your key
-    ring, you may also receive a message saying that the
-    relationship between the key and the signer of the key cannot
-    be verified. This is not a problem if you trust the
-    authenticity of the <code>KEYS</code> file.</p>
-
-    <h3><a id="extract" name="extract">Extract</a></h3>
-
-    <p>Extracting the source from the Apache HTTPD tarball is a
-    simple matter of uncompressing, and then untarring:</p>
-
-    <blockquote>
-      <code>$ gzip -d httpd-2_0_<em>NN</em>.tar.gz<br />
-       $ tar xvf httpd-2_0_<em>NN</em>.tar</code>
-    </blockquote>
-
-    <p>This will create a new directory under the current directory
-    containing the source code for the distribution. You should
-    <code>cd</code> into that directory before proceeding with
-    compiling the server.</p>
-
-    <h3><a id="configure" name="configure">Configuring the source
-    tree</a></h3>
-
-    <p>The next step is to configure the Apache source tree for
-    your particular platform and personal requirements. This is
-    done using the script <code>configure</code> included in the
-    root directory of the distribution. (Developers downloading the
-    CVS version of the Apache source tree will need to have
-    <code>autoconf</code> and <code>libtool</code> installed and
-    will need to run <code>buildconf</code> before proceeding with
-    the next steps. This is not necessary for official
-    releases.)</p>
-
-    <p>To configure the source tree using all the default options,
-    simply type <code>./configure</code>. To change the default
-    options, <code>configure</code> accepts a variety of variables
-    and command line options. Environment variables are generally
-    placed before the <code>./configure</code> command, while other
-    options are placed after. The most important option here is the
-    location prefix where Apache is to be installed later, because
-    Apache has to be configured for this location to work
-    correctly. But there are a lot of other options available for
-    your pleasure.</p>
-
-    <p>For a short impression of what possibilities you have, here
-    is a typical example which compiles Apache for the installation
-    tree /sw/pkg/apache with a particular compiler and flags plus
-    the two additional modules mod_rewrite and mod_speling for
-    later loading through the DSO mechanism:</p>
-
-    <blockquote>
-      <code>$ CC="pgcc" CFLAGS="-O2" \<br />
-       ./configure --prefix=/sw/pkg/apache \<br />
-       --enable-rewrite=shared \<br />
-       --enable-speling=shared</code>
-    </blockquote>
-
-    <p>When configure is run it will take several minutes to test
-    for the availability of features on your system and build
-    Makefiles which will later be used to compile the server.</p>
-
-    <p>The easiest way to find all of the configuration flags for
-    Apache is to run ./configure --help. What follows is a brief
-    description of most of the arguments and environment
-    variables.</p>
-
-    <h4><a id="environment" name="environment">Environment
-    Variables</a></h4>
-
-    <p>The autoconf build process uses several environment
-    variables to configure the build environment. In general, these
-    variables change the method used to build Apache, but not the
-    eventual features of the server. These variables can be placed
-    in the environment before invoking <code>configure</code>, but
-    it is usually easier to specify them on the
-    <code>configure</code> command line as demonstrated in the
-    example above.</p>
-
-    <dl>
-      <dt><code>CC=...</code></dt>
-
-      <dd>The name of the C compiler command.</dd>
-
-      <dt><code>CPPFLAGS=...</code></dt>
-
-      <dd>Miscellaneous C preprocessor and compiler options.</dd>
-
-      <dt><code>CFLAGS=...</code></dt>
-
-      <dd>Debugging and optimization options for the C
-      compiler.</dd>
-
-      <dt><code>LDFLAGS=...</code></dt>
-
-      <dd>Miscellaneous options to be passed to the linker.</dd>
-
-      <dt><code>LIBS=...</code></dt>
-
-      <dd>Library location information ("-L" and "-l" options) to
-      pass to the linker.</dd>
-
-      <dt><code>INCLUDES=...</code></dt>
-
-      <dd>Header file search directories ("-I<em>dir</em>").</dd>
-
-      <dt><code>TARGET=...</code> [Default: apache]</dt>
-
-      <dd>Name of the executable which will be built.</dd>
-
-      <dt><code>NOTEST_CPPFLAGS=...</code></dt>
-
-      <dt><code>NOTEST_CFLAGS=...</code></dt>
-
-      <dt><code>NOTEST_LDFLAGS=...</code></dt>
-
-      <dt><code>NOTEST_LIBS=...</code></dt>
-
-      <dd>These variables share the same function as their
-      non-NOTEST namesakes. However, the variables are applied to
-      the build process only after autoconf has performed its
-      feature testing. This allows the inclusion of flags which
-      will cause problems during feature testing, but must be used
-      for the final compilation.</dd>
-
-      <dt><code>SHLIB_PATH=...</code></dt>
-
-      <dd>Options which specify shared library paths for the
-      compiler and linker.</dd>
-    </dl>
-
-    <h4><a id="output" name="output">autoconf Output
-    Options</a></h4>
-
-    <dl>
-      <dt><code>--help</code></dt>
-
-      <dd>Prints the usage message including all available options,
-      but does not actually configure anything.</dd>
-
-      <dt><code>--quiet</code></dt>
-
-      <dd>Prevents the printing of the usual "checking..."
-      messages.</dd>
-
-      <dt><code>--verbose</code></dt>
-
-      <dd>Prints much more information during the configuration
-      process, including the names of all the files examined.</dd>
-    </dl>
-
-    <h4><a id="pathnames" name="pathnames">Pathnames</a></h4>
-
-    <p>There are currently two ways to configure the pathnames
-    under which Apache will install its files. First, you can
-    specify a directory and have Apache install itself under that
-    directory in its default locations.</p>
-
-    <dl>
-      <dt><code>--prefix=<em>PREFIX</em></code> [Default:
-      /usr/local/apache2]</dt>
-
-      <dd>Specifies the directory under which the Apache files will
-      be installed.</dd>
-    </dl>
-
-    <p>It is possible to specify that architecture-dependent files
-    should be placed under a different directory.</p>
-
-    <dl>
-      <dt><code>--exec-prefix=<em>EPREFIX</em></code> [Default:
-      <em>PREFIX</em>]</dt>
-
-      <dd>Specifies the directory under which
-      architecture-dependent files will be placed.</dd>
-    </dl>
-
-    <p>The second, and more flexible way to configure the install
-    path locations for Apache is using the
-    <code>config.layout</code> file. Using this method, it is
-    possible to separately specify the location for each type of
-    file within the Apache installation. The
-    <code>config.layout</code> file contains several example
-    configurations, and you can also create your own custom
-    configuration following the examples. The different layouts in
-    this file are grouped into <code>&lt;Layout
-    FOO&gt;...&lt;/Layout&gt;</code> sections and referred to by
-    name as in <code>FOO</code>.</p>
-
-    <dl>
-      <dt><code>--enable-layout=<em>LAYOUT</em></code></dt>
-
-      <dd>Use the named layout in the <code>config.layout</code>
-      file to specify the installation paths.</dd>
-    </dl>
-
-    <p>Presently it is not possible to mix the
-    <code>--enable-layout</code> and <code>--prefix</code> options.
-    Nor is it possible to individually specify detailed pathnames
-    on the <code>configure</code> command line. If you want just a
-    basic install, you can simply use the <code>--prefix</code>
-    option on its own. If you want to customize your install, you
-    should edit the <code>config.layout</code> file and use the
-    <code>--enable-layout</code> option.</p>
-
-    <h4><a id="modules" name="modules">Modules</a></h4>
-
-    <p>Apache is a modular server. Only the most basic
-    functionality is included in the core server. Extended features
-    are available in various modules. During the configuration
-    process, you must select which modules to compile for use with
-    your server. You can view a <a
-    href="mod/index-bytype.html">list of modules</a> included in
-    the documentation. Those modules with a <a
-    href="mod/module-dict.html#Status">status</a> of "Base" are
-    included by default and must be specifically disabled if you do
-    not want them. Modules with any other status must be
-    specifically enabled if you wish to use them.</p>
-
-    <p>There are two ways for a module to be compiled and used with
-    Apache. Modules may be <em>statically compiled</em>, which
-    means that they are permanently included in the Apache binary.
-    Alternatively, if your operating system supports Dynamic Shared
-    Objects (DSOs) and autoconf can detect that support, then
-    modules may be <em>dynamically compiled</em>. DSO modules are
-    stored separately from the Apache binary, and may be included
-    or excluded from the server using the run-time configuration
-    directives provided by <a href="mod/mod_so.html">mod_so</a>.
-    The mod_so is automatically included in the server if any
-    dynamic modules are included in the compilation. If you would
-    like to make your server capable of loading DSOs without
-    actually compiling any dynamic modules, you can explicitly
-    <code>--enable-so</code>.</p>
-
-    <dl>
-      <dt><code>--enable-<em>MODULE</em>[=shared]</code></dt>
-
-      <dd>Compile and include the module <em>MODULE</em>. The
-      identifier <em>MODULE</em> is the <a
-      href="mod/module-dict.html#ModuleIdentifier">Module
-      Identifier</a> from the module documentation without the
-      "_module" string. To compile the module as a DSO, add the
-      option <code>=shared</code>.</dd>
-
-      <dt><code>--disable-<em>MODULE</em></code></dt>
-
-      <dd>Remove the module <em>MODULE</em> which would otherwise
-      be compiled and included.</dd>
-
-      <dt><code>--enable-modules=<em>MODULE-LIST</em></code></dt>
-
-      <dd>Compile and include the modules listed in the
-      space-separated <em>MODULE-LIST</em>.</dd>
-
-      <dt>
-      <code>--enable-mods-shared=<em>MODULE-LIST</em></code></dt>
-
-      <dd>Compile and include the modules in the space-separated
-      <em>MODULE-LIST</em> as dynamically loadable (DSO)
-      modules.</dd>
-    </dl>
-
-    <p>The <em>MODULE-LIST</em> in the
-    <code>--enable-modules</code> and
-    <code>--enable-mods-shared</code> options is usually a
-    space-separated list of module identifiers. For example, to
-    enable mod_dav and mod_info, you can either use</p>
-
-    <blockquote>
-      <code>./configure --enable-dav --enable-info</code>
-    </blockquote>
-
-    <p>or, equivalently,</p>
-
-    <blockquote>
-      <code>./configure --enable-modules="dav info"</code>
-    </blockquote>
-
-    <p>In addition, the special keywords <code>all</code> or
-    <code>most</code> can be used to add all or most of the modules
-    in one step. You can then remove any modules that you do not
-    want with the <code>--disable-<em>MODULE</em></code> option.
-    For example, to include all modules as DSOs with the exception
-    of mod_info, you can use</p>
-
-    <blockquote>
-      <code>./configure --enable-mods-shared=all
-      --disable-info</code>
-    </blockquote>
-
-    <p>In addition to the standard set of modules, Apache 2.0 also
-    includes a choice of <a href="mpm.html">Multi-Processing
-    Modules</a> (MPMs). One, and only one MPM must be included in
-    the compilation process. The default MPMs for each platform are
-    listed on the <a href="mpm.html">MPM documentation page</a>,
-    but can be overridden on the <code>configure</code> command
-    line.</p>
-
-    <dl>
-      <dt><code>--with-mpm=<em>NAME</em></code></dt>
-
-      <dd>Choose the mpm <em>NAME</em>.</dd>
-    </dl>
-
-    <h4><a id="suexec" name="suexec">Suexec</a></h4>
-
-    <p>Apache includes a support program called <a
-    href="suexec.html">suexec</a> which can be used to isolate user
-    CGI programs. However, if suexec is improperly configured, it
-    can cause serious security problems. Therefore, you should
-    carefully read and consider the <a href="suexec.html">suexec
-    documentation</a> before implementing this feature.</p>
-
-    <h3><a id="compile" name="compile">Build</a></h3>
-
-    <p>Now you can build the various parts which form the Apache
-    package by simply running the command:</p>
-
-    <blockquote>
-      <code>$ make</code>
-    </blockquote>
-
-    <p>Please be patient here, since a base configuration takes
-    approximately 3 minutes to compile under a Pentium III/Linux
-    2.2 system, but this will vary widely depending on your
-    hardware and the number of modules which you have enabled.</p>
-
-    <h3><a id="install" name="install">Install</a></h3>
-
-    <p>Now its time to install the package under the configured
-    installation <em>PREFIX</em> (see <code>--prefix</code> option
-    above) by running:</p>
-
-    <blockquote>
-      <code>$ make install</code>
-    </blockquote>
-
-    <p>If you are upgrading, the installation will not overwrite
-    your configuration files or documents.</p>
-
-    <h3><a id="customize" name="customize">Customize</a></h3>
-
-    <p>Next, you can customize your Apache HTTP server by editing
-    the <a href="configuring.html">configuration files</a> under
-    <em>PREFIX</em>/conf/.</p>
-
-    <blockquote>
-      <code>$ vi <em>PREFIX</em>/conf/httpd.conf</code>
-    </blockquote>
-
-    <p>Have a look at the Apache manual under <a
-    href="./">docs/manual/</a> or <a
-    href="http://httpd.apache.org/docs/">http://httpd.apache.org/docs/</a>
-    for a complete reference of available <a
-    href="mod/directives.html">configuration directives</a>.</p>
-
-    <h3><a id="test" name="test">Test</a></h3>
-
-    <p>Now you can <a href="invoking.html">start</a> your Apache
-    HTTP server by immediately running:</p>
-
-    <blockquote>
-      <code>$ <em>PREFIX</em>/bin/apachectl start</code>
-    </blockquote>
-
-    <p>and then you should be able to request your first document
-    via URL http://localhost/. The web page you see is located
-    under the <a href="mod/core.html#documentroot">DocumentRoot</a>
-    which will usually be <code><em>PREFIX</em>/htdocs/</code>.
-    Then <a href="stopping.html">stop</a> the server again by
-    running:</p>
-
-    <blockquote>
-      <code>$ <em>PREFIX</em>/bin/apachectl stop</code>
-    </blockquote>
-    <!--#include virtual="footer.html" -->
-  </body>
-</html>
-
diff --git a/docs/manual/invoking.html b/docs/manual/invoking.html
deleted file mode 100644
index a9c6255..0000000
--- a/docs/manual/invoking.html
+++ /dev/null
@@ -1,139 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta name="generator" content="HTML Tidy, see www.w3.org" />
-
-    <title>Starting Apache</title>
-  </head>
-  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-
-  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-  vlink="#000080" alink="#FF0000">
-    <!--#include virtual="header.html" -->
-
-    <h1 align="CENTER">Starting Apache</h1>
-
-    <ul>
-      <li><a href="#windows">Starting Apache on Windows</a></li>
-
-      <li>
-        <a href="#unix">Starting Apache on Unix</a> 
-
-        <ul>
-          <li><a href="#errors">Errors During Start-up</a></li>
-
-          <li><a href="#boot">Starting at Boot-Time</a></li>
-
-          <li><a href="#info">Additional Information</a></li>
-        </ul>
-      </li>
-    </ul>
-    <hr />
-
-    <h2><a id="windows" name="windows">Starting Apache On
-    Windows</a></h2>
-
-    <p>On Windows, Apache is normally run as a service on Windows
-    NT, or as a console application on Windows 95. For details, see
-    <a href="platform/windows.html#run">running Apache for
-    Windows</a>.</p>
-
-    <h2><a id="unix" name="unix">Starting Apache on Unix</a></h2>
-
-    <p>On Unix, the <a href="programs/httpd.html">httpd</a> program
-    is run as a daemon which executes continuously in the
-    background to handle requests.</p>
-
-    <p>If the <a href="mod/mpm_common.html#Listen">Listen</a> specified in
-    the configuration file is default of 80 (or any other port
-    below 1024), then it is necessary to have root privileges in
-    order to start apache, so that it can bind to this privileged
-    port. Once the server has started and performed a few
-    preliminary activities such as opening its log files, it will
-    launch several <em>child</em> processes which do the work of
-    listening for and answering requests from clients. The main
-    <code>httpd</code> process continues to run as the root user,
-    but the child processes run as a less privileged user. This is
-    controlled by the selected <a href="mpm.html">Multi-Processing
-    Module</a>.</p>
-
-    <p>The first thing that <code>httpd</code> does when it is
-    invoked is to locate and read the <a
-    href="configuring.html">configuration file</a>
-    <code>httpd.conf</code>. The location of this file is set at
-    compile-time, but it is possible to specify its location at run
-    time using the <code>-f</code> command-line option as in</p>
-
-    <blockquote>
-      <code>/usr/local/apache/bin/httpd -f
-      /usr/local/apache/conf/httpd.conf</code>
-    </blockquote>
-
-    <p>As an alternative to invoking the <code>httpd</code> binary
-    directly, a shell script called <a
-    href="programs/apachectl.html">apachectl</a> is provided which
-    can be used to control the daemon process with simple commands
-    such as <code>apachectl start</code> and <code>apachectl
-    stop</code>.</p>
-
-    <p>If all goes well during startup, the server will detach from
-    the terminal and the command prompt will return almost
-    immediately. This indicates that the server is up and running.
-    You can then use your browser to connect to the server and view
-    the test page in the <a
-    href="mod/core.html#documentroot">DocumentRoot</a> directory
-    and the local copy of the documentation linked from that
-    page.</p>
-
-    <h3><a id="errors" name="errors">Errors During
-    Start-up</a></h3>
-
-    <p>If Apache suffers a fatal problem during startup, it will
-    write a message describing the problem either to the console or
-    to the <a href="mod/core.html#errorlog">ErrorLog</a> before
-    exiting. One of the most common error messages is "<code>Unable
-    to bind to Port ...</code>". This message is usually caused by
-    either:</p>
-
-    <ul>
-      <li>Trying to start the server on a privileged port when not
-      logged in as the root user; or</li>
-
-      <li>Trying to start the server when there is another instance
-      of Apache or some other web server already bound to the same
-      Port.</li>
-    </ul>
-
-    <p>For further trouble-shooting instructions, consult the
-    Apache <a href="faq/">FAQ</a>.</p>
-
-    <h3><a id="boot" name="boot">Starting at Boot-Time</a></h3>
-
-    <p>If you want your server to continue running after a system
-    reboot, you should add a call to <code>httpd</code> or
-    <code>apachectl</code> to your system startup files (typically
-    <code>rc.local</code> or a file in an <code>rc.N</code>
-    directory). This will start Apache as root. Before doing this
-    ensure that your server is properly configured for security and
-    access restrictions. The <code>apachectl</code> script is
-    designed so that it can often be linked directly as an init
-    script, but be sure to check the exact requirements of your
-    system.</p>
-
-    <h3><a id="info" name="info">Additional Information</a></h3>
-
-    <p>Additional information about the command-line options of <a
-    href="programs/httpd.html">httpd</a> and <a
-    href="programs/apachectl.html">apachectl</a> as well as other
-    support programs included with the server is available on the
-    <a href="programs/">Server and Supporting Programs</a> page.
-    There is also documentation on all the <a
-    href="mod/">modules</a> included with the Apache distribution
-    and the <a href="mod/directives.html">directives</a> that they
-    provide.</p>
-    <!--#include virtual="footer.html" -->
-  </body>
-</html>
-
diff --git a/docs/manual/invoking.html.en b/docs/manual/invoking.html.en
deleted file mode 100644
index a9c6255..0000000
--- a/docs/manual/invoking.html.en
+++ /dev/null
@@ -1,139 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta name="generator" content="HTML Tidy, see www.w3.org" />
-
-    <title>Starting Apache</title>
-  </head>
-  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-
-  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-  vlink="#000080" alink="#FF0000">
-    <!--#include virtual="header.html" -->
-
-    <h1 align="CENTER">Starting Apache</h1>
-
-    <ul>
-      <li><a href="#windows">Starting Apache on Windows</a></li>
-
-      <li>
-        <a href="#unix">Starting Apache on Unix</a> 
-
-        <ul>
-          <li><a href="#errors">Errors During Start-up</a></li>
-
-          <li><a href="#boot">Starting at Boot-Time</a></li>
-
-          <li><a href="#info">Additional Information</a></li>
-        </ul>
-      </li>
-    </ul>
-    <hr />
-
-    <h2><a id="windows" name="windows">Starting Apache On
-    Windows</a></h2>
-
-    <p>On Windows, Apache is normally run as a service on Windows
-    NT, or as a console application on Windows 95. For details, see
-    <a href="platform/windows.html#run">running Apache for
-    Windows</a>.</p>
-
-    <h2><a id="unix" name="unix">Starting Apache on Unix</a></h2>
-
-    <p>On Unix, the <a href="programs/httpd.html">httpd</a> program
-    is run as a daemon which executes continuously in the
-    background to handle requests.</p>
-
-    <p>If the <a href="mod/mpm_common.html#Listen">Listen</a> specified in
-    the configuration file is default of 80 (or any other port
-    below 1024), then it is necessary to have root privileges in
-    order to start apache, so that it can bind to this privileged
-    port. Once the server has started and performed a few
-    preliminary activities such as opening its log files, it will
-    launch several <em>child</em> processes which do the work of
-    listening for and answering requests from clients. The main
-    <code>httpd</code> process continues to run as the root user,
-    but the child processes run as a less privileged user. This is
-    controlled by the selected <a href="mpm.html">Multi-Processing
-    Module</a>.</p>
-
-    <p>The first thing that <code>httpd</code> does when it is
-    invoked is to locate and read the <a
-    href="configuring.html">configuration file</a>
-    <code>httpd.conf</code>. The location of this file is set at
-    compile-time, but it is possible to specify its location at run
-    time using the <code>-f</code> command-line option as in</p>
-
-    <blockquote>
-      <code>/usr/local/apache/bin/httpd -f
-      /usr/local/apache/conf/httpd.conf</code>
-    </blockquote>
-
-    <p>As an alternative to invoking the <code>httpd</code> binary
-    directly, a shell script called <a
-    href="programs/apachectl.html">apachectl</a> is provided which
-    can be used to control the daemon process with simple commands
-    such as <code>apachectl start</code> and <code>apachectl
-    stop</code>.</p>
-
-    <p>If all goes well during startup, the server will detach from
-    the terminal and the command prompt will return almost
-    immediately. This indicates that the server is up and running.
-    You can then use your browser to connect to the server and view
-    the test page in the <a
-    href="mod/core.html#documentroot">DocumentRoot</a> directory
-    and the local copy of the documentation linked from that
-    page.</p>
-
-    <h3><a id="errors" name="errors">Errors During
-    Start-up</a></h3>
-
-    <p>If Apache suffers a fatal problem during startup, it will
-    write a message describing the problem either to the console or
-    to the <a href="mod/core.html#errorlog">ErrorLog</a> before
-    exiting. One of the most common error messages is "<code>Unable
-    to bind to Port ...</code>". This message is usually caused by
-    either:</p>
-
-    <ul>
-      <li>Trying to start the server on a privileged port when not
-      logged in as the root user; or</li>
-
-      <li>Trying to start the server when there is another instance
-      of Apache or some other web server already bound to the same
-      Port.</li>
-    </ul>
-
-    <p>For further trouble-shooting instructions, consult the
-    Apache <a href="faq/">FAQ</a>.</p>
-
-    <h3><a id="boot" name="boot">Starting at Boot-Time</a></h3>
-
-    <p>If you want your server to continue running after a system
-    reboot, you should add a call to <code>httpd</code> or
-    <code>apachectl</code> to your system startup files (typically
-    <code>rc.local</code> or a file in an <code>rc.N</code>
-    directory). This will start Apache as root. Before doing this
-    ensure that your server is properly configured for security and
-    access restrictions. The <code>apachectl</code> script is
-    designed so that it can often be linked directly as an init
-    script, but be sure to check the exact requirements of your
-    system.</p>
-
-    <h3><a id="info" name="info">Additional Information</a></h3>
-
-    <p>Additional information about the command-line options of <a
-    href="programs/httpd.html">httpd</a> and <a
-    href="programs/apachectl.html">apachectl</a> as well as other
-    support programs included with the server is available on the
-    <a href="programs/">Server and Supporting Programs</a> page.
-    There is also documentation on all the <a
-    href="mod/">modules</a> included with the Apache distribution
-    and the <a href="mod/directives.html">directives</a> that they
-    provide.</p>
-    <!--#include virtual="footer.html" -->
-  </body>
-</html>
-
diff --git a/docs/manual/logs.html b/docs/manual/logs.html
deleted file mode 100644
index 2b2b892..0000000
--- a/docs/manual/logs.html
+++ /dev/null
@@ -1,667 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta name="generator" content="HTML Tidy, see www.w3.org" />
-
-    <title>Log Files - Apache HTTP Server</title>
-  </head>
-  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-
-  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-  vlink="#000080" alink="#FF0000">
-    <!--#include virtual="header.html" -->
-
-    <h1 align="center">Log Files</h1>
-
-    <p>In order to effectively manage a web server, it is necessary
-    to get feedback about the activity and performance of the
-    server as well as any problems that may be occuring. The Apache
-    HTTP Server provides very comprehensive and flexible logging
-    capabilities. This document describes how to configure its
-    logging capabilities, and how to understand what the logs
-    contain.</p>
-
-    <ul>
-      <li><a href="#security">Security Warning</a></li>
-
-      <li><a href="#errorlog">Error Log</a></li>
-
-      <li>
-        <a href="#accesslog">Access Log</a> 
-
-        <ul>
-          <li><a href="#common">Common Log Format</a></li>
-
-          <li><a href="#combined">Combined Log Format</a></li>
-
-          <li><a href="#multiple">Multiple Access Logs</a></li>
-
-          <li><a href="#conditional">Conditional Logging</a></li>
-        </ul>
-      </li>
-
-      <li><a href="#rotation">Log Rotation</a></li>
-
-      <li><a href="#piped">Piped Logs</a></li>
-
-      <li><a href="#virtualhosts">VirtualHosts</a></li>
-
-      <li>
-        <a href="#other">Other Log Files</a> 
-
-        <ul>
-          <li><a href="#pidfile">PID File</a></li>
-
-          <li><a href="#scriptlog">Script Log</a></li>
-
-          <li><a href="#rewritelog">Rewrite Log</a></li>
-        </ul>
-      </li>
-    </ul>
-    <hr />
-
-    <h2><a id="security" name="security">Security Warning</a></h2>
-
-    <p>Anyone who can write to the directory where Apache is
-    writing a log file can almost certainly gain access to the uid
-    that the server is started as, which is normally root. Do
-    <em>NOT</em> give people write access to the directory the logs
-    are stored in without being aware of the consequences; see the
-    <a href="misc/security_tips.html">security tips</a> document
-    for details.</p>
-
-    <p>In addition, log files may contain information supplied
-    directly by the client, without escaping. Therefore, it is
-    possible for malicious clients to insert control-characters in
-    the log files, so care must be taken in dealing with raw
-    logs.</p>
-    <hr />
-
-    <h2><a id="errorlog" name="errorlog">Error Log</a></h2>
-
-    <table border="1">
-      <tr>
-        <td valign="top"><strong>Related Directives</strong><br />
-         <br />
-         <a href="mod/core.html#errorlog">ErrorLog</a><br />
-         <a href="mod/core.html#loglevel">LogLevel</a> </td>
-      </tr>
-    </table>
-
-    <p>The server error log, whose name and location is set by the
-    <a href="mod/core.html#errorlog">ErrorLog</a> directive, is the
-    most important log file. This is the place where Apache httpd
-    will send diagnostic information and record any errors that it
-    encounters in processing requests. It is the first place to
-    look when a problem occurs with starting the server or with the
-    operation of the server, since it will often contain details of
-    what went wrong and how to fix it.</p>
-
-    <p>The error log is usually written to a file (typically
-    <code>error_log</code> on unix systems and
-    <code>error.log</code> on Windows and OS/2). On unix systems it
-    is also possible to have the server send errors to
-    <code>syslog</code> or <a href="#pipe">pipe them to a
-    program</a>.</p>
-
-    <p>The format of the error log is relatively free-form and
-    descriptive. But there is certain information that is contained
-    in most error log entries. For example, here is a typical
-    message.</p>
-
-    <blockquote>
-      <code>[Wed Oct 11 14:32:52 2000] [error] [client 127.0.0.1]
-      client denied by server configuration:
-      /export/home/live/ap/htdocs/test</code>
-    </blockquote>
-
-    <p>The first item in the log entry is the date and time of the
-    message. The second entry lists the severity of the error being
-    reported. The <a href="mod/core.html#loglevel">LogLevel</a>
-    directive is used to control the types of errors that are sent
-    to the error log by restricting the severity level. The third
-    entry gives the IP address of the client that generated the
-    error. Beyond that is the message itself, which in this case
-    indicates that the server has been configured to deny the
-    client access. The server reports the file-system path (as
-    opposed to the web path) of the requested document.</p>
-
-    <p>A very wide variety of different messages can appear in the
-    error log. Most look similar to the example above. The error
-    log will also contain debugging output from CGI scripts. Any
-    information written to <code>stderr</code> by a CGI script will
-    be copied directly to the error log.</p>
-
-    <p>It is not possible to customize the error log by adding or
-    removing information. However, error log entries dealing with
-    particular requests have corresponding entries in the <a
-    href="#accesslog">access log</a>. For example, the above example
-    entry corresponds to an access log entry with status code 403.
-    Since it is possible to customize the access log, you can
-    obtain more information about error conditions using that log
-    file.</p>
-
-    <p>During testing, it is often useful to continuously monitor
-    the error log for any problems. On unix systems, you can
-    accomplish this using:</p>
-
-    <blockquote>
-      <code>tail -f error_log</code>
-    </blockquote>
-    <hr />
-
-    <h2><a id="accesslog" name="accesslog">Access Log</a></h2>
-
-    <table border="1">
-      <tr>
-        <td valign="top"><strong>Related Modules</strong><br />
-         <br />
-         <a href="mod/mod_log_config.html">mod_log_config</a><br />
-         </td>
-
-        <td valign="top"><strong>Related Directives</strong><br />
-         <br />
-         <a
-        href="mod/mod_log_config.html#customlog">CustomLog</a><br />
-         <a
-        href="mod/mod_log_config.html#logformat">LogFormat</a><br />
-         <a href="mod/mod_setenvif.html#setenvif">SetEnvIf</a>
-        </td>
-      </tr>
-    </table>
-
-    <p>The server access log records all requests processed by the
-    server. The location and content of the access log are
-    controlled by the <a
-    href="mod/mod_log_config.html#customlog">CustomLog</a>
-    directive. The <a
-    href="mod/mod_log_config.html#logformat">LogFormat</a>
-    directive can be used to simplify the selection of the contents
-    of the logs. This section describes how to configure the server
-    to record information in the access log.</p>
-
-    <p>Of course, storing the information in the access log is only
-    the start of log management. The next step is to analyze this
-    information to produce useful statistics. Log analysis in
-    general is beyond the scope of this document, and not really
-    part of the job of the web server itself. For more information
-    about this topic, and for applications which perform log
-    analysis, check the <a
-    href="http://dmoz.org/Computers/Software/Internet/Site_Management/Log_analysis/">
-    Open Directory</a> or <a
-    href="http://dir.yahoo.com/Computers_and_Internet/Software/Internet/World_Wide_Web/Servers/Log_Analysis_Tools/">
-    Yahoo</a>.</p>
-
-    <p>Various versions of Apache httpd have used other modules and
-    directives to control access logging, including
-    mod_log_referer, mod_log_agent, and the
-    <code>TransferLog</code> directive. The <code>CustomLog</code>
-    directive now subsumes the functionality of all the older
-    directives.</p>
-
-    <p>The format of the access log is highly configurable. The
-    format is specified using a <a
-    href="mod/mod_log_config.html#format">format string</a> that
-    looks much like a C-style printf(1) format string. Some
-    examples are presented in the next sections. For a complete
-    list of the possible contents of the format string, see the <a
-    href="mod/mod_log_config.html">mod_log_config
-    documentation</a>.</p>
-
-    <h3><a id="common" name="common">Common Log Format</a></h3>
-
-    <p>A typical configuration for the access log might look as
-    follows.</p>
-
-    <blockquote>
-      <code>LogFormat "%h %l %u %t \"%r\" %&gt;s %b" common<br />
-       CustomLog logs/access_log common</code>
-    </blockquote>
-
-    <p>This defines the <em>nickname</em> <code>common</code> and
-    associates it with a particular log format string. The format
-    string consists of percent directives, each of which tell the
-    server to log a particular piece of information. Literal
-    characters may also be placed in the format string and will be
-    copied directly into the log output. The quote character
-    (<code>"</code>) must be escaped by placing a back-slash before
-    it to prevent it from being interpreted as the end of the
-    format string. The format string may also contain the special
-    control characters "<code>\n</code>" for new-line and
-    "<code>\t</code>" for tab.</p>
-
-    <p>The <code>CustomLog</code> directive sets up a new log file
-    using the defined <em>nickname</em>. The filename for the
-    access log is relative to the <a
-    href="mod/core.html#serverroot">ServerRoot</a> unless it begins
-    with a slash.</p>
-
-    <p>The above configuration will write log entries in a format
-    known as the Common Log Format (CLF). This standard format can
-    be produced by many different web servers and read by many log
-    analysis programs. The log file entries produced in CLF will
-    look something like this:</p>
-
-    <blockquote>
-      <code>127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET
-      /apache_pb.gif HTTP/1.0" 200 2326</code>
-    </blockquote>
-
-    <p>Each part of this log entry is described below.</p>
-
-    <dl>
-      <dt><code>127.0.0.1</code> (<code>%h</code>)</dt>
-
-      <dd>This is the IP address of the client (remote host) which
-      made the request to the server. If <a
-      href="mod/core.html#hostnamelookups">HostnameLookups</a> is
-      set to <code>On</code>, then the server will try to determine
-      the hostname and log it in place of the IP address. However,
-      this configuration is not recommended since it can
-      significantly slow the server. Instead, it is best to use a
-      log post-processor such as <a
-      href="programs/logresolve.html">logresolve</a> to determine
-      the hostnames. The IP address reported here is not
-      necessarily the address of the machine at which the user is
-      sitting. If a proxy server exists between the user and the
-      server, this address will be the address of the proxy, rather
-      than the originating machine.</dd>
-
-      <dt><code>-</code> (<code>%l</code>)</dt>
-
-      <dd>The "hyphen" in the output indicates that the requested
-      piece of information is not available. In this case, the
-      information that is not available is the RFC 1413 identity of
-      the client determined by <code>identd</code> on the clients
-      machine. This information is highly unreliable and should
-      almost never be used except on tightly controlled internal
-      networks. Apache httpd will not even attempt to determine
-      this information unless <a
-      href="mod/core.html#identitycheck">IdentityCheck</a> is set
-      to <code>On</code>.</dd>
-
-      <dt><code>frank</code> (<code>%u</code>)</dt>
-
-      <dd>This is the userid of the person requesting the document
-      as determined by HTTP authentication. The same value is
-      typically provided to CGI scripts in the
-      <code>REMOTE_USER</code> environment variable. If the status
-      code for the request (see below) is 401, then this value
-      should not be trusted because the user is not yet
-      authenticated. If the document is not password protected,
-      this entry will be "<code>-</code>" just like the previous
-      one.</dd>
-
-      <dt><code>[10/Oct/2000:13:55:36 -0700]</code>
-      (<code>%t</code>)</dt>
-
-      <dd>
-        The time that the server finished processing the request.
-        The format is: 
-
-        <blockquote>
-          <code>[day/month/year:hour:minute:second zone]<br />
-           day = 2*digit<br />
-           month = 3*letter<br />
-           year = 4*digit<br />
-           hour = 2*digit<br />
-           minute = 2*digit<br />
-           second = 2*digit<br />
-           zone = (`+' | `-') 4*digit</code>
-        </blockquote>
-        It is possible to have the time displayed in another format
-        by specifying <code>%{format}t</code> in the log format
-        string, where <code>format</code> is as in
-        <code>strftime(3)</code> from the C standard library.
-      </dd>
-
-      <dt><code>"GET /apache_pb.gif HTTP/1.0"</code>
-      (<code>\"%r\"</code>)</dt>
-
-      <dd>The request line from the client is given in double
-      quotes. The request line contains a great deal of useful
-      information. First, the method used by the client is
-      <code>GET</code>. Second, the client requested the resource
-      <code>/apache_pb.gif</code>, and third, the client used the
-      protocol <code>HTTP/1.0</code>. It is also possible to log
-      one or more parts of the request line independently. For
-      example, the format string "<code>%m %U%q %H</code>" will log
-      the method, path, query-string, and protocol, resulting in
-      exactly the same output as "<code>%r</code>".</dd>
-
-      <dt><code>200</code> (<code>%&gt;s</code>)</dt>
-
-      <dd>This is the status code that the server sends back to the
-      client. This information is very valuable, because it reveals
-      whether the request resulted in a successful response (codes
-      beginning in 2), a redirection (codes beginning in 3), an
-      error caused by the client (codes beginning in 4), or an
-      error in the server (codes beginning in 5). The full list of
-      possible status codes can be found in the <a
-      href="http://www.w3.org/Protocols/rfc2616/rfc2616.txt">HTTP
-      specification</a> (RFC2616 section 10).</dd>
-
-      <dt><code>2326</code> (<code>%b</code>)</dt>
-
-      <dd>The last entry indicates the size of the object returned
-      to the client, not including the response headers. If no
-      content was returned to the client, this value will be
-      "<code>-</code>". To log "<code>0</code>" for no content, use
-      <code>%B</code> instead.</dd>
-    </dl>
-
-    <h4><a id="combined" name="combined">Combined Log
-    Format</a></h4>
-
-    <p>Another commonly used format string is called the Combined
-    Log Format. It can be used as follows.</p>
-
-    <blockquote>
-      <code>LogFormat "%h %l %u %t \"%r\" %&gt;s %b \"%{Referer}i\"
-      \"%{User-agent}i\"" combined<br />
-       CustomLog log/acces_log combined</code>
-    </blockquote>
-
-    <p>This format is exactly the same as the Common Log Format,
-    with the addition of two more fields. Each of the additional
-    fields uses the percent-directive
-    <code>%{<em>header</em>}i</code>, where <em>header</em> can be
-    any HTTP request header. The access log under this format will
-    look like:</p>
-
-    <blockquote>
-      <code>127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET
-      /apache_pb.gif HTTP/1.0" 200 2326
-      "http://www.example.com/start.html" "Mozilla/4.08 [en]
-      (Win98; I ;Nav)"</code>
-    </blockquote>
-
-    <p>The additional fields are:</p>
-
-    <dl>
-      <dt><code>"http://www.example.com/start.html"</code>
-      (<code>\"%{Referer}i\"</code>)</dt>
-
-      <dd>The "Referer" (sic) HTTP request header. This gives the
-      site that the client reports having been referred from. (This
-      should be the page that links to or includes
-      <code>/apache_pb.gif</code>).</dd>
-
-      <dt><code>"Mozilla/4.08 [en] (Win98; I ;Nav)"</code>
-      (<code>\"%{User-agent}i\"</code>)</dt>
-
-      <dd>The User-Agent HTTP request header. This is the
-      identifying information that the client browser reports about
-      itself.</dd>
-    </dl>
-
-    <h3><a id="multiple" name="multiple">Multiple Access
-    Logs</a></h3>
-
-    <p>Multiple access logs can be created simply by specifying
-    multiple <code>CustomLog</code> directives in the configuration
-    file. For example, the following directives will create three
-    access logs. The first contains the basic CLF information,
-    while the second and third contain referer and browser
-    information. The last two <code>CustomLog</code> lines show how
-    to mimic the effects of the <code>ReferLog</code> and
-    <code>AgentLog</code> directives.</p>
-
-    <blockquote>
-      <code>LogFormat "%h %l %u %t \"%r\" %&gt;s %b" common<br />
-       CustomLog logs/access_log common<br />
-       CustomLog logs/referer_log "%{Referer}i -&gt; %U"<br />
-       CustomLog logs/agent_log "%{User-agent}i"</code>
-    </blockquote>
-
-    <p>This example also shows that it is not necessary to define a
-    nickname with the <code>LogFormat</code> directive. Instead,
-    the log format can be specified directly in the
-    <code>CustomLog</code> directive.</p>
-
-    <h3><a id="conditional" name="conditional">Conditional
-    Logging</a></h3>
-
-    <p>There are times when it is convenient to exclude certain
-    entries from the access logs based on characteristics of the
-    client request. This is easily accomplished with the help of <a
-    href="env.html">environment variables</a>. First, an
-    environment variable must be set to indicate that the request
-    meets certain conditions. This is usually accomplished with <a
-    href="mod/mod_setenvif.html#setenvif">SetEnvIf</a>. Then the
-    <code>env=</code> clause of the <code>CustomLog</code>
-    directive is used to include or exclude requests where the
-    environment variable is set. Some examples:</p>
-
-    <blockquote>
-      <code># Mark requests from the loop-back interface<br />
-       SetEnvIf Remote_Addr "127\.0\.0\.1" dontlog<br />
-       # Mark requests for the robots.txt file<br />
-       SetEnvIf Request_URI "^/robots\.txt$" dontlog<br />
-       # Log what remains<br />
-       CustomLog logs/access_log common env=!dontlog</code>
-    </blockquote>
-
-    <p>As another example, consider logging requests from
-    english-speakers to one log file, and non-english speakers to a
-    different log file.</p>
-
-    <blockquote>
-      <code>SetEnvIf Accept-Language "en" english<br />
-       CustomLog logs/english_log common env=english<br />
-       CustomLog logs/non_english_log common env=!english</code>
-    </blockquote>
-
-    <p>Although we have just shown that conditional logging is very
-    powerful and flexibly, it is not the only way to control the
-    contents of the logs. Log files are more useful when they
-    contain a complete record of server activity. It is often
-    easier to simply post-process the log files to remove requests
-    that you do not want to consider.</p>
-    <hr />
-
-    <h2><a id="rotation" name="rotation">Log Rotation</a></h2>
-
-    <p>On even a moderately busy server, the quantity of
-    information stored in the log files is very large. The access
-    log file typically grows 1 MB or more per 10,000 requests. It
-    will consequently be necessary to periodically rotate the log
-    files by moving or deleting the existing logs. This cannot be
-    done while the server is running, because Apache will continue
-    writing to the old log file as long as it holds the file open.
-    Instead, the server must be <a
-    href="stopping.html">restarted</a> after the log files are
-    moved or deleted so that it will open new log files.</p>
-
-    <p>By using a <em>graceful</em> restart, the server can be
-    instructed to open new log files without losing any existing or
-    pending connections from clients. However, in order to
-    accomplish this, the server must continue to write to the old
-    log files while it finishes serving old requests. It is
-    therefore necessary to wait for some time after the restart
-    before doing any processing on the log files. A typical
-    scenario that simply rotates the logs and compresses the old
-    logs to save space is:</p>
-
-    <blockquote>
-      <code>mv access_log access_log.old<br />
-       mv error_log error_log.old<br />
-       apachectl graceful<br />
-       sleep 600<br />
-       gzip access_log.old error_log.old</code>
-    </blockquote>
-
-    <p>Another way to perform log rotation is using <a
-    href="#piped">piped logs</a> as discussed in the next
-    section.</p>
-    <hr />
-
-    <h2><a id="piped" name="piped">Piped Logs</a></h2>
-
-    <p>Apache httpd is capable of writing error and access log
-    files through a pipe to another process, rather than directly
-    to a file. This capability dramatically increases the
-    flexibility of logging, without adding code to the main server.
-    In order to write logs to a pipe, simply replace the filename
-    with the pipe character "<code>|</code>", followed by the name
-    of the executable which should accept log entries on its
-    standard input. Apache will start the piped-log process when
-    the server starts, and will restart it if it crashes while the
-    server is running. (This last feature is why we can refer to
-    this technique as "reliable piped logging".)</p>
-
-    <p>Piped log processes are spawned by the parent Apache httpd
-    process, and inherit the userid of that process. This means
-    that piped log programs usually run as root. It is therefore
-    very important to keep the programs simple and secure.</p>
-
-    <p>Some simple examples using piped logs:</p>
-
-    <blockquote>
-      <code># compressed logs<br />
-       CustomLog "|/usr/bin/gzip -c &gt;&gt;
-      /var/log/access_log.gz" common<br />
-       # almost-real-time name resolution<br />
-       CustomLog "|/usr/local/apache/bin/logresolve &gt;&gt;
-      /var/log/access_log" common</code>
-    </blockquote>
-
-    <p>Notice that quotes are used to enclose the entire command
-    that will be called for the pipe. Although these examples are
-    for the access log, the same technique can be used for the
-    error log.</p>
-
-    <p>One important use of piped logs is to allow log rotation
-    without having to restart the server. The Apache HTTP Server
-    includes a simple program called <a
-    href="programs/rotatelogs.html">rotatelogs</a> for this
-    purpose. For example, to rotate the logs every 24 hours, you
-    can use:</p>
-
-    <blockquote>
-      <code>CustomLog "|/usr/local/apache/bin/rotatelogs
-      /var/log/access_log 86400" common</code>
-    </blockquote>
-
-    <p>A similar, but much more flexible log rotation program
-    called <a
-    href="http://www.ford-mason.co.uk/resources/cronolog/">cronolog</a>
-    is available at an external site.</p>
-
-    <p>As with conditional logging, piped logs are a very powerful
-    tool, but they should not be used where a simpler solution like
-    off-line post-processing is available.</p>
-    <hr />
-
-    <h2><a id="virtualhosts" name="virtualhosts">Virtual
-    Hosts</a></h2>
-
-    <p>When running a server with many <a href="vhosts/">virtual
-    hosts</a>, there are several options for dealing with log
-    files. First, it is possible to use logs exactly as in a
-    single-host server. Simply by placing the logging directives
-    outside the <code>&lt;VirtualHost&gt;</code> sections in the
-    main server context, it is possible to log all requests in the
-    same access log and error log. This technique does not allow
-    for easy collection of statistics on individual virtual
-    hosts.</p>
-
-    <p>If <code>CustomLog</code> or <code>ErrorLog</code>
-    directives are placed inside a <code>&lt;VirtualHost&gt;</code>
-    section, all requests or errors for that virtual host will be
-    logged only to the specified file. Any virtual host which does
-    not have logging directives will still have its requests sent
-    to the main server logs. This technique is very useful for a
-    small number of virtual hosts, but if the number of hosts is
-    very large, it can be complicated to manage. In addition, it
-    can often create problems with <a
-    href="vhosts/fd-limits.html">insufficient file
-    descriptors</a>.</p>
-
-    <p>For the access log, there is a very good compromise. By
-    adding information on the virtual host to the log format
-    string, it is possible to log all hosts to the same log, and
-    later split the log into individual files. For example,
-    consider the following directives.</p>
-
-    <blockquote>
-      <code>LogFormat "%v %l %u %t \"%r\" %&gt;s %b"
-      comonvhost<br />
-       CustomLog logs/access_log comonvhost</code>
-    </blockquote>
-
-    <p>The <code>%v</code> is used to log the name of the virtual
-    host that is serving the request. Then a program like <a
-    href="programs/other.html">split-logfile</a> can be used to
-    post-process the access log in order to split it into one file
-    per virtual host.</p>
-
-    <p>Unfortunately, no similar technique is available for the
-    error log, so you must choose between mixing all virtual hosts
-    in the same error log and using one error log per virtual
-    host.</p>
-    <hr />
-
-    <h2><a id="other" name="other">Other Log Files</a></h2>
-
-    <table border="1">
-      <tr>
-        <td valign="top"><strong>Related Modules</strong><br />
-         <br />
-         <a href="mod/mod_cgi.html">mod_cgi</a><br />
-         <a href="mod/mod_rewrite.html">mod_rewrite</a> </td>
-
-        <td valign="top"><strong>Related Directives</strong><br />
-         <br />
-         <a href="mod/core.html#pidfile">PidFile</a><br />
-         <a
-        href="mod/mod_rewrite.html#RewriteLog">RewriteLog</a><br />
-         <a
-        href="mod/mod_rewrite.html#RewriteLogLevel">RewriteLogLevel</a><br />
-         <a href="mod/mod_cgi.html#scriptlog">ScriptLog</a><br />
-         <a
-        href="mod/mod_cgi.html#scriptloglength">ScriptLogLength</a><br />
-         <a
-        href="mod/mod_cgi.html#scriptlogbuffer">ScriptLogBuffer</a>
-        </td>
-      </tr>
-    </table>
-
-    <h3><a id="pidfile" name="pidfile">PID File</a></h3>
-
-    <p>On startup, Apache httpd saves the process id of the parent
-    httpd process to the file <code>logs/httpd.pid</code>. This
-    filename can be changed with the <a
-    href="mod/core.html#pidfile">PidFile</a> directive. The
-    process-id is for use by the administrator in restarting and
-    terminating the daemon by sending signals to the parent
-    process; on Windows, use the -k command line option instead.
-    For more information see the <a href="stopping.html">Stopping
-    and Restarting</a> page.</p>
-
-    <h3><a id="scriptlog" name="scriptlog">Script Log</a></h3>
-
-    <p>In order to aid in debugging, the <a
-    href="mod/mod_cgi.html#scriptlog">ScriptLog</a> directive
-    allows you to record the input to and output from CGI scripts.
-    This should only be used in testing - not for live servers.
-    More information is available in the <a
-    href="mod/mod_cgi.html">mod_cgi documentation</a>.</p>
-
-    <h3><a id="rewritelog" name="rewritelog">Rewrite Log</a></h3>
-
-    <p>When using the powerful and complex features of <a
-    href="mod/mod_rewrite.html">mod_rewrite</a>, it is almost
-    always necessary to use the <a
-    href="mod/mod_rewrite.html#RewriteLog">RewriteLog</a> to help
-    in debugging. This log file produces a detailed analysis of how
-    the rewriting engine transforms requests. The level of detail
-    is controlled by the <a
-    href="mod/mod_rewrite.html#RewriteLogLevel">RewriteLogLevel</a>
-    directive.</p>
-    <!--#include virtual="footer.html" -->
-  </body>
-</html>
-
diff --git a/docs/manual/logs.html.en b/docs/manual/logs.html.en
deleted file mode 100644
index 2b2b892..0000000
--- a/docs/manual/logs.html.en
+++ /dev/null
@@ -1,667 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta name="generator" content="HTML Tidy, see www.w3.org" />
-
-    <title>Log Files - Apache HTTP Server</title>
-  </head>
-  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-
-  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-  vlink="#000080" alink="#FF0000">
-    <!--#include virtual="header.html" -->
-
-    <h1 align="center">Log Files</h1>
-
-    <p>In order to effectively manage a web server, it is necessary
-    to get feedback about the activity and performance of the
-    server as well as any problems that may be occuring. The Apache
-    HTTP Server provides very comprehensive and flexible logging
-    capabilities. This document describes how to configure its
-    logging capabilities, and how to understand what the logs
-    contain.</p>
-
-    <ul>
-      <li><a href="#security">Security Warning</a></li>
-
-      <li><a href="#errorlog">Error Log</a></li>
-
-      <li>
-        <a href="#accesslog">Access Log</a> 
-
-        <ul>
-          <li><a href="#common">Common Log Format</a></li>
-
-          <li><a href="#combined">Combined Log Format</a></li>
-
-          <li><a href="#multiple">Multiple Access Logs</a></li>
-
-          <li><a href="#conditional">Conditional Logging</a></li>
-        </ul>
-      </li>
-
-      <li><a href="#rotation">Log Rotation</a></li>
-
-      <li><a href="#piped">Piped Logs</a></li>
-
-      <li><a href="#virtualhosts">VirtualHosts</a></li>
-
-      <li>
-        <a href="#other">Other Log Files</a> 
-
-        <ul>
-          <li><a href="#pidfile">PID File</a></li>
-
-          <li><a href="#scriptlog">Script Log</a></li>
-
-          <li><a href="#rewritelog">Rewrite Log</a></li>
-        </ul>
-      </li>
-    </ul>
-    <hr />
-
-    <h2><a id="security" name="security">Security Warning</a></h2>
-
-    <p>Anyone who can write to the directory where Apache is
-    writing a log file can almost certainly gain access to the uid
-    that the server is started as, which is normally root. Do
-    <em>NOT</em> give people write access to the directory the logs
-    are stored in without being aware of the consequences; see the
-    <a href="misc/security_tips.html">security tips</a> document
-    for details.</p>
-
-    <p>In addition, log files may contain information supplied
-    directly by the client, without escaping. Therefore, it is
-    possible for malicious clients to insert control-characters in
-    the log files, so care must be taken in dealing with raw
-    logs.</p>
-    <hr />
-
-    <h2><a id="errorlog" name="errorlog">Error Log</a></h2>
-
-    <table border="1">
-      <tr>
-        <td valign="top"><strong>Related Directives</strong><br />
-         <br />
-         <a href="mod/core.html#errorlog">ErrorLog</a><br />
-         <a href="mod/core.html#loglevel">LogLevel</a> </td>
-      </tr>
-    </table>
-
-    <p>The server error log, whose name and location is set by the
-    <a href="mod/core.html#errorlog">ErrorLog</a> directive, is the
-    most important log file. This is the place where Apache httpd
-    will send diagnostic information and record any errors that it
-    encounters in processing requests. It is the first place to
-    look when a problem occurs with starting the server or with the
-    operation of the server, since it will often contain details of
-    what went wrong and how to fix it.</p>
-
-    <p>The error log is usually written to a file (typically
-    <code>error_log</code> on unix systems and
-    <code>error.log</code> on Windows and OS/2). On unix systems it
-    is also possible to have the server send errors to
-    <code>syslog</code> or <a href="#pipe">pipe them to a
-    program</a>.</p>
-
-    <p>The format of the error log is relatively free-form and
-    descriptive. But there is certain information that is contained
-    in most error log entries. For example, here is a typical
-    message.</p>
-
-    <blockquote>
-      <code>[Wed Oct 11 14:32:52 2000] [error] [client 127.0.0.1]
-      client denied by server configuration:
-      /export/home/live/ap/htdocs/test</code>
-    </blockquote>
-
-    <p>The first item in the log entry is the date and time of the
-    message. The second entry lists the severity of the error being
-    reported. The <a href="mod/core.html#loglevel">LogLevel</a>
-    directive is used to control the types of errors that are sent
-    to the error log by restricting the severity level. The third
-    entry gives the IP address of the client that generated the
-    error. Beyond that is the message itself, which in this case
-    indicates that the server has been configured to deny the
-    client access. The server reports the file-system path (as
-    opposed to the web path) of the requested document.</p>
-
-    <p>A very wide variety of different messages can appear in the
-    error log. Most look similar to the example above. The error
-    log will also contain debugging output from CGI scripts. Any
-    information written to <code>stderr</code> by a CGI script will
-    be copied directly to the error log.</p>
-
-    <p>It is not possible to customize the error log by adding or
-    removing information. However, error log entries dealing with
-    particular requests have corresponding entries in the <a
-    href="#accesslog">access log</a>. For example, the above example
-    entry corresponds to an access log entry with status code 403.
-    Since it is possible to customize the access log, you can
-    obtain more information about error conditions using that log
-    file.</p>
-
-    <p>During testing, it is often useful to continuously monitor
-    the error log for any problems. On unix systems, you can
-    accomplish this using:</p>
-
-    <blockquote>
-      <code>tail -f error_log</code>
-    </blockquote>
-    <hr />
-
-    <h2><a id="accesslog" name="accesslog">Access Log</a></h2>
-
-    <table border="1">
-      <tr>
-        <td valign="top"><strong>Related Modules</strong><br />
-         <br />
-         <a href="mod/mod_log_config.html">mod_log_config</a><br />
-         </td>
-
-        <td valign="top"><strong>Related Directives</strong><br />
-         <br />
-         <a
-        href="mod/mod_log_config.html#customlog">CustomLog</a><br />
-         <a
-        href="mod/mod_log_config.html#logformat">LogFormat</a><br />
-         <a href="mod/mod_setenvif.html#setenvif">SetEnvIf</a>
-        </td>
-      </tr>
-    </table>
-
-    <p>The server access log records all requests processed by the
-    server. The location and content of the access log are
-    controlled by the <a
-    href="mod/mod_log_config.html#customlog">CustomLog</a>
-    directive. The <a
-    href="mod/mod_log_config.html#logformat">LogFormat</a>
-    directive can be used to simplify the selection of the contents
-    of the logs. This section describes how to configure the server
-    to record information in the access log.</p>
-
-    <p>Of course, storing the information in the access log is only
-    the start of log management. The next step is to analyze this
-    information to produce useful statistics. Log analysis in
-    general is beyond the scope of this document, and not really
-    part of the job of the web server itself. For more information
-    about this topic, and for applications which perform log
-    analysis, check the <a
-    href="http://dmoz.org/Computers/Software/Internet/Site_Management/Log_analysis/">
-    Open Directory</a> or <a
-    href="http://dir.yahoo.com/Computers_and_Internet/Software/Internet/World_Wide_Web/Servers/Log_Analysis_Tools/">
-    Yahoo</a>.</p>
-
-    <p>Various versions of Apache httpd have used other modules and
-    directives to control access logging, including
-    mod_log_referer, mod_log_agent, and the
-    <code>TransferLog</code> directive. The <code>CustomLog</code>
-    directive now subsumes the functionality of all the older
-    directives.</p>
-
-    <p>The format of the access log is highly configurable. The
-    format is specified using a <a
-    href="mod/mod_log_config.html#format">format string</a> that
-    looks much like a C-style printf(1) format string. Some
-    examples are presented in the next sections. For a complete
-    list of the possible contents of the format string, see the <a
-    href="mod/mod_log_config.html">mod_log_config
-    documentation</a>.</p>
-
-    <h3><a id="common" name="common">Common Log Format</a></h3>
-
-    <p>A typical configuration for the access log might look as
-    follows.</p>
-
-    <blockquote>
-      <code>LogFormat "%h %l %u %t \"%r\" %&gt;s %b" common<br />
-       CustomLog logs/access_log common</code>
-    </blockquote>
-
-    <p>This defines the <em>nickname</em> <code>common</code> and
-    associates it with a particular log format string. The format
-    string consists of percent directives, each of which tell the
-    server to log a particular piece of information. Literal
-    characters may also be placed in the format string and will be
-    copied directly into the log output. The quote character
-    (<code>"</code>) must be escaped by placing a back-slash before
-    it to prevent it from being interpreted as the end of the
-    format string. The format string may also contain the special
-    control characters "<code>\n</code>" for new-line and
-    "<code>\t</code>" for tab.</p>
-
-    <p>The <code>CustomLog</code> directive sets up a new log file
-    using the defined <em>nickname</em>. The filename for the
-    access log is relative to the <a
-    href="mod/core.html#serverroot">ServerRoot</a> unless it begins
-    with a slash.</p>
-
-    <p>The above configuration will write log entries in a format
-    known as the Common Log Format (CLF). This standard format can
-    be produced by many different web servers and read by many log
-    analysis programs. The log file entries produced in CLF will
-    look something like this:</p>
-
-    <blockquote>
-      <code>127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET
-      /apache_pb.gif HTTP/1.0" 200 2326</code>
-    </blockquote>
-
-    <p>Each part of this log entry is described below.</p>
-
-    <dl>
-      <dt><code>127.0.0.1</code> (<code>%h</code>)</dt>
-
-      <dd>This is the IP address of the client (remote host) which
-      made the request to the server. If <a
-      href="mod/core.html#hostnamelookups">HostnameLookups</a> is
-      set to <code>On</code>, then the server will try to determine
-      the hostname and log it in place of the IP address. However,
-      this configuration is not recommended since it can
-      significantly slow the server. Instead, it is best to use a
-      log post-processor such as <a
-      href="programs/logresolve.html">logresolve</a> to determine
-      the hostnames. The IP address reported here is not
-      necessarily the address of the machine at which the user is
-      sitting. If a proxy server exists between the user and the
-      server, this address will be the address of the proxy, rather
-      than the originating machine.</dd>
-
-      <dt><code>-</code> (<code>%l</code>)</dt>
-
-      <dd>The "hyphen" in the output indicates that the requested
-      piece of information is not available. In this case, the
-      information that is not available is the RFC 1413 identity of
-      the client determined by <code>identd</code> on the clients
-      machine. This information is highly unreliable and should
-      almost never be used except on tightly controlled internal
-      networks. Apache httpd will not even attempt to determine
-      this information unless <a
-      href="mod/core.html#identitycheck">IdentityCheck</a> is set
-      to <code>On</code>.</dd>
-
-      <dt><code>frank</code> (<code>%u</code>)</dt>
-
-      <dd>This is the userid of the person requesting the document
-      as determined by HTTP authentication. The same value is
-      typically provided to CGI scripts in the
-      <code>REMOTE_USER</code> environment variable. If the status
-      code for the request (see below) is 401, then this value
-      should not be trusted because the user is not yet
-      authenticated. If the document is not password protected,
-      this entry will be "<code>-</code>" just like the previous
-      one.</dd>
-
-      <dt><code>[10/Oct/2000:13:55:36 -0700]</code>
-      (<code>%t</code>)</dt>
-
-      <dd>
-        The time that the server finished processing the request.
-        The format is: 
-
-        <blockquote>
-          <code>[day/month/year:hour:minute:second zone]<br />
-           day = 2*digit<br />
-           month = 3*letter<br />
-           year = 4*digit<br />
-           hour = 2*digit<br />
-           minute = 2*digit<br />
-           second = 2*digit<br />
-           zone = (`+' | `-') 4*digit</code>
-        </blockquote>
-        It is possible to have the time displayed in another format
-        by specifying <code>%{format}t</code> in the log format
-        string, where <code>format</code> is as in
-        <code>strftime(3)</code> from the C standard library.
-      </dd>
-
-      <dt><code>"GET /apache_pb.gif HTTP/1.0"</code>
-      (<code>\"%r\"</code>)</dt>
-
-      <dd>The request line from the client is given in double
-      quotes. The request line contains a great deal of useful
-      information. First, the method used by the client is
-      <code>GET</code>. Second, the client requested the resource
-      <code>/apache_pb.gif</code>, and third, the client used the
-      protocol <code>HTTP/1.0</code>. It is also possible to log
-      one or more parts of the request line independently. For
-      example, the format string "<code>%m %U%q %H</code>" will log
-      the method, path, query-string, and protocol, resulting in
-      exactly the same output as "<code>%r</code>".</dd>
-
-      <dt><code>200</code> (<code>%&gt;s</code>)</dt>
-
-      <dd>This is the status code that the server sends back to the
-      client. This information is very valuable, because it reveals
-      whether the request resulted in a successful response (codes
-      beginning in 2), a redirection (codes beginning in 3), an
-      error caused by the client (codes beginning in 4), or an
-      error in the server (codes beginning in 5). The full list of
-      possible status codes can be found in the <a
-      href="http://www.w3.org/Protocols/rfc2616/rfc2616.txt">HTTP
-      specification</a> (RFC2616 section 10).</dd>
-
-      <dt><code>2326</code> (<code>%b</code>)</dt>
-
-      <dd>The last entry indicates the size of the object returned
-      to the client, not including the response headers. If no
-      content was returned to the client, this value will be
-      "<code>-</code>". To log "<code>0</code>" for no content, use
-      <code>%B</code> instead.</dd>
-    </dl>
-
-    <h4><a id="combined" name="combined">Combined Log
-    Format</a></h4>
-
-    <p>Another commonly used format string is called the Combined
-    Log Format. It can be used as follows.</p>
-
-    <blockquote>
-      <code>LogFormat "%h %l %u %t \"%r\" %&gt;s %b \"%{Referer}i\"
-      \"%{User-agent}i\"" combined<br />
-       CustomLog log/acces_log combined</code>
-    </blockquote>
-
-    <p>This format is exactly the same as the Common Log Format,
-    with the addition of two more fields. Each of the additional
-    fields uses the percent-directive
-    <code>%{<em>header</em>}i</code>, where <em>header</em> can be
-    any HTTP request header. The access log under this format will
-    look like:</p>
-
-    <blockquote>
-      <code>127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET
-      /apache_pb.gif HTTP/1.0" 200 2326
-      "http://www.example.com/start.html" "Mozilla/4.08 [en]
-      (Win98; I ;Nav)"</code>
-    </blockquote>
-
-    <p>The additional fields are:</p>
-
-    <dl>
-      <dt><code>"http://www.example.com/start.html"</code>
-      (<code>\"%{Referer}i\"</code>)</dt>
-
-      <dd>The "Referer" (sic) HTTP request header. This gives the
-      site that the client reports having been referred from. (This
-      should be the page that links to or includes
-      <code>/apache_pb.gif</code>).</dd>
-
-      <dt><code>"Mozilla/4.08 [en] (Win98; I ;Nav)"</code>
-      (<code>\"%{User-agent}i\"</code>)</dt>
-
-      <dd>The User-Agent HTTP request header. This is the
-      identifying information that the client browser reports about
-      itself.</dd>
-    </dl>
-
-    <h3><a id="multiple" name="multiple">Multiple Access
-    Logs</a></h3>
-
-    <p>Multiple access logs can be created simply by specifying
-    multiple <code>CustomLog</code> directives in the configuration
-    file. For example, the following directives will create three
-    access logs. The first contains the basic CLF information,
-    while the second and third contain referer and browser
-    information. The last two <code>CustomLog</code> lines show how
-    to mimic the effects of the <code>ReferLog</code> and
-    <code>AgentLog</code> directives.</p>
-
-    <blockquote>
-      <code>LogFormat "%h %l %u %t \"%r\" %&gt;s %b" common<br />
-       CustomLog logs/access_log common<br />
-       CustomLog logs/referer_log "%{Referer}i -&gt; %U"<br />
-       CustomLog logs/agent_log "%{User-agent}i"</code>
-    </blockquote>
-
-    <p>This example also shows that it is not necessary to define a
-    nickname with the <code>LogFormat</code> directive. Instead,
-    the log format can be specified directly in the
-    <code>CustomLog</code> directive.</p>
-
-    <h3><a id="conditional" name="conditional">Conditional
-    Logging</a></h3>
-
-    <p>There are times when it is convenient to exclude certain
-    entries from the access logs based on characteristics of the
-    client request. This is easily accomplished with the help of <a
-    href="env.html">environment variables</a>. First, an
-    environment variable must be set to indicate that the request
-    meets certain conditions. This is usually accomplished with <a
-    href="mod/mod_setenvif.html#setenvif">SetEnvIf</a>. Then the
-    <code>env=</code> clause of the <code>CustomLog</code>
-    directive is used to include or exclude requests where the
-    environment variable is set. Some examples:</p>
-
-    <blockquote>
-      <code># Mark requests from the loop-back interface<br />
-       SetEnvIf Remote_Addr "127\.0\.0\.1" dontlog<br />
-       # Mark requests for the robots.txt file<br />
-       SetEnvIf Request_URI "^/robots\.txt$" dontlog<br />
-       # Log what remains<br />
-       CustomLog logs/access_log common env=!dontlog</code>
-    </blockquote>
-
-    <p>As another example, consider logging requests from
-    english-speakers to one log file, and non-english speakers to a
-    different log file.</p>
-
-    <blockquote>
-      <code>SetEnvIf Accept-Language "en" english<br />
-       CustomLog logs/english_log common env=english<br />
-       CustomLog logs/non_english_log common env=!english</code>
-    </blockquote>
-
-    <p>Although we have just shown that conditional logging is very
-    powerful and flexibly, it is not the only way to control the
-    contents of the logs. Log files are more useful when they
-    contain a complete record of server activity. It is often
-    easier to simply post-process the log files to remove requests
-    that you do not want to consider.</p>
-    <hr />
-
-    <h2><a id="rotation" name="rotation">Log Rotation</a></h2>
-
-    <p>On even a moderately busy server, the quantity of
-    information stored in the log files is very large. The access
-    log file typically grows 1 MB or more per 10,000 requests. It
-    will consequently be necessary to periodically rotate the log
-    files by moving or deleting the existing logs. This cannot be
-    done while the server is running, because Apache will continue
-    writing to the old log file as long as it holds the file open.
-    Instead, the server must be <a
-    href="stopping.html">restarted</a> after the log files are
-    moved or deleted so that it will open new log files.</p>
-
-    <p>By using a <em>graceful</em> restart, the server can be
-    instructed to open new log files without losing any existing or
-    pending connections from clients. However, in order to
-    accomplish this, the server must continue to write to the old
-    log files while it finishes serving old requests. It is
-    therefore necessary to wait for some time after the restart
-    before doing any processing on the log files. A typical
-    scenario that simply rotates the logs and compresses the old
-    logs to save space is:</p>
-
-    <blockquote>
-      <code>mv access_log access_log.old<br />
-       mv error_log error_log.old<br />
-       apachectl graceful<br />
-       sleep 600<br />
-       gzip access_log.old error_log.old</code>
-    </blockquote>
-
-    <p>Another way to perform log rotation is using <a
-    href="#piped">piped logs</a> as discussed in the next
-    section.</p>
-    <hr />
-
-    <h2><a id="piped" name="piped">Piped Logs</a></h2>
-
-    <p>Apache httpd is capable of writing error and access log
-    files through a pipe to another process, rather than directly
-    to a file. This capability dramatically increases the
-    flexibility of logging, without adding code to the main server.
-    In order to write logs to a pipe, simply replace the filename
-    with the pipe character "<code>|</code>", followed by the name
-    of the executable which should accept log entries on its
-    standard input. Apache will start the piped-log process when
-    the server starts, and will restart it if it crashes while the
-    server is running. (This last feature is why we can refer to
-    this technique as "reliable piped logging".)</p>
-
-    <p>Piped log processes are spawned by the parent Apache httpd
-    process, and inherit the userid of that process. This means
-    that piped log programs usually run as root. It is therefore
-    very important to keep the programs simple and secure.</p>
-
-    <p>Some simple examples using piped logs:</p>
-
-    <blockquote>
-      <code># compressed logs<br />
-       CustomLog "|/usr/bin/gzip -c &gt;&gt;
-      /var/log/access_log.gz" common<br />
-       # almost-real-time name resolution<br />
-       CustomLog "|/usr/local/apache/bin/logresolve &gt;&gt;
-      /var/log/access_log" common</code>
-    </blockquote>
-
-    <p>Notice that quotes are used to enclose the entire command
-    that will be called for the pipe. Although these examples are
-    for the access log, the same technique can be used for the
-    error log.</p>
-
-    <p>One important use of piped logs is to allow log rotation
-    without having to restart the server. The Apache HTTP Server
-    includes a simple program called <a
-    href="programs/rotatelogs.html">rotatelogs</a> for this
-    purpose. For example, to rotate the logs every 24 hours, you
-    can use:</p>
-
-    <blockquote>
-      <code>CustomLog "|/usr/local/apache/bin/rotatelogs
-      /var/log/access_log 86400" common</code>
-    </blockquote>
-
-    <p>A similar, but much more flexible log rotation program
-    called <a
-    href="http://www.ford-mason.co.uk/resources/cronolog/">cronolog</a>
-    is available at an external site.</p>
-
-    <p>As with conditional logging, piped logs are a very powerful
-    tool, but they should not be used where a simpler solution like
-    off-line post-processing is available.</p>
-    <hr />
-
-    <h2><a id="virtualhosts" name="virtualhosts">Virtual
-    Hosts</a></h2>
-
-    <p>When running a server with many <a href="vhosts/">virtual
-    hosts</a>, there are several options for dealing with log
-    files. First, it is possible to use logs exactly as in a
-    single-host server. Simply by placing the logging directives
-    outside the <code>&lt;VirtualHost&gt;</code> sections in the
-    main server context, it is possible to log all requests in the
-    same access log and error log. This technique does not allow
-    for easy collection of statistics on individual virtual
-    hosts.</p>
-
-    <p>If <code>CustomLog</code> or <code>ErrorLog</code>
-    directives are placed inside a <code>&lt;VirtualHost&gt;</code>
-    section, all requests or errors for that virtual host will be
-    logged only to the specified file. Any virtual host which does
-    not have logging directives will still have its requests sent
-    to the main server logs. This technique is very useful for a
-    small number of virtual hosts, but if the number of hosts is
-    very large, it can be complicated to manage. In addition, it
-    can often create problems with <a
-    href="vhosts/fd-limits.html">insufficient file
-    descriptors</a>.</p>
-
-    <p>For the access log, there is a very good compromise. By
-    adding information on the virtual host to the log format
-    string, it is possible to log all hosts to the same log, and
-    later split the log into individual files. For example,
-    consider the following directives.</p>
-
-    <blockquote>
-      <code>LogFormat "%v %l %u %t \"%r\" %&gt;s %b"
-      comonvhost<br />
-       CustomLog logs/access_log comonvhost</code>
-    </blockquote>
-
-    <p>The <code>%v</code> is used to log the name of the virtual
-    host that is serving the request. Then a program like <a
-    href="programs/other.html">split-logfile</a> can be used to
-    post-process the access log in order to split it into one file
-    per virtual host.</p>
-
-    <p>Unfortunately, no similar technique is available for the
-    error log, so you must choose between mixing all virtual hosts
-    in the same error log and using one error log per virtual
-    host.</p>
-    <hr />
-
-    <h2><a id="other" name="other">Other Log Files</a></h2>
-
-    <table border="1">
-      <tr>
-        <td valign="top"><strong>Related Modules</strong><br />
-         <br />
-         <a href="mod/mod_cgi.html">mod_cgi</a><br />
-         <a href="mod/mod_rewrite.html">mod_rewrite</a> </td>
-
-        <td valign="top"><strong>Related Directives</strong><br />
-         <br />
-         <a href="mod/core.html#pidfile">PidFile</a><br />
-         <a
-        href="mod/mod_rewrite.html#RewriteLog">RewriteLog</a><br />
-         <a
-        href="mod/mod_rewrite.html#RewriteLogLevel">RewriteLogLevel</a><br />
-         <a href="mod/mod_cgi.html#scriptlog">ScriptLog</a><br />
-         <a
-        href="mod/mod_cgi.html#scriptloglength">ScriptLogLength</a><br />
-         <a
-        href="mod/mod_cgi.html#scriptlogbuffer">ScriptLogBuffer</a>
-        </td>
-      </tr>
-    </table>
-
-    <h3><a id="pidfile" name="pidfile">PID File</a></h3>
-
-    <p>On startup, Apache httpd saves the process id of the parent
-    httpd process to the file <code>logs/httpd.pid</code>. This
-    filename can be changed with the <a
-    href="mod/core.html#pidfile">PidFile</a> directive. The
-    process-id is for use by the administrator in restarting and
-    terminating the daemon by sending signals to the parent
-    process; on Windows, use the -k command line option instead.
-    For more information see the <a href="stopping.html">Stopping
-    and Restarting</a> page.</p>
-
-    <h3><a id="scriptlog" name="scriptlog">Script Log</a></h3>
-
-    <p>In order to aid in debugging, the <a
-    href="mod/mod_cgi.html#scriptlog">ScriptLog</a> directive
-    allows you to record the input to and output from CGI scripts.
-    This should only be used in testing - not for live servers.
-    More information is available in the <a
-    href="mod/mod_cgi.html">mod_cgi documentation</a>.</p>
-
-    <h3><a id="rewritelog" name="rewritelog">Rewrite Log</a></h3>
-
-    <p>When using the powerful and complex features of <a
-    href="mod/mod_rewrite.html">mod_rewrite</a>, it is almost
-    always necessary to use the <a
-    href="mod/mod_rewrite.html#RewriteLog">RewriteLog</a> to help
-    in debugging. This log file produces a detailed analysis of how
-    the rewriting engine transforms requests. The level of detail
-    is controlled by the <a
-    href="mod/mod_rewrite.html#RewriteLogLevel">RewriteLogLevel</a>
-    directive.</p>
-    <!--#include virtual="footer.html" -->
-  </body>
-</html>
-
diff --git a/docs/manual/misc/custom_errordocs.html b/docs/manual/misc/custom_errordocs.html
deleted file mode 100644
index 2623a97..0000000
--- a/docs/manual/misc/custom_errordocs.html
+++ /dev/null
@@ -1,489 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta name="generator" content="HTML Tidy, see www.w3.org" />
-
-    <title>International Customized Server Error Messages</title>
-  </head>
-  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-
-  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-  vlink="#000080" alink="#FF0000">
-    <!--#include virtual="header.html" -->
-
-    <h1 align="CENTER">Using XSSI and <samp>ErrorDocument</samp> to
-    configure customized international server error responses</h1>
-
-    <h2>Index</h2>
-
-    <ul>
-      <li><a href="#intro">Introduction</a></li>
-
-      <li><a href="#createdir">Creating an ErrorDocument
-      directory</a></li>
-
-      <li><a href="#docnames">Naming the individual error document
-      files</a></li>
-
-      <li><a href="#headfoot">The common header and footer
-      files</a></li>
-
-      <li><a href="#createdocs">Creating ErrorDocuments in
-      different languages</a></li>
-
-      <li><a href="#fallback">The fallback language</a></li>
-
-      <li><a href="#proxy">Customizing Proxy Error
-      Messages</a></li>
-
-      <li><a href="#listings">HTML listing of the discussed
-      example</a></li>
-    </ul>
-    <hr />
-
-    <h2><a id="intro" name="intro">Introduction</a></h2>
-    This document describes an easy way to provide your apache WWW
-    server with a set of customized error messages which take
-    advantage of <a href="../content-negotiation.html">Content
-    Negotiation</a> and <a href="../mod/mod_include.html">eXtended
-    Server Side Includes (XSSI)</a> to return error messages
-    generated by the server in the client's native language. <br />
-     <br />
-     
-
-    <p>By using XSSI, all <a
-    href="../mod/core.html#errordocument">customized messages</a>
-    can share a homogenous and consistent style and layout, and
-    maintenance work (changing images, changing links) is kept to a
-    minimum because all layout information can be kept in a single
-    file.<br />
-     Error documents can be shared across different servers, or
-    even hosts, because all varying information is inserted at the
-    time the error document is returned on behalf of a failed
-    request.</p>
-
-    <p>Content Negotiation then selects the appropriate language
-    version of a particular error message text, honoring the
-    language preferences passed in the client's request. (Users
-    usually select their favorite languages in the preferences
-    options menu of today's browsers). When an error document in
-    the client's primary language version is unavailable, the
-    secondary languages are tried or a default (fallback) version
-    is used.</p>
-
-    <p>You have full flexibility in designing your error documents
-    to your personal taste (or your company's conventions). For
-    demonstration purposes, we present a simple generic error
-    document scheme. For this hypothetic server, we assume that all
-    error messages...</p>
-
-    <ul>
-      <li>possibly are served by different virtual hosts (different
-      host name, different IP address, or different port) on the
-      server machine,</li>
-
-      <li>show a predefined company logo in the right top of the
-      message (selectable by virtual host),</li>
-
-      <li>print the error title first, followed by an explanatory
-      text and (depending on the error context) help on how to
-      resolve the error,</li>
-
-      <li>have some kind of standardized background image,</li>
-
-      <li>display an apache logo and a feedback email address at
-      the bottom of the error message.</li>
-    </ul>
-    <br />
-     <br />
-     
-
-    <p>An example of a "document not found" message for a german
-    client might look like this:<br />
-     <img src="../images/custom_errordocs.gif"
-    alt="[Needs graphics capability to display]" /><br />
-     All links in the document as well as links to the server's
-    administrator mail address, and even the name and port of the
-    serving virtual host are inserted in the error document at
-    "run-time", <em>i.e.</em>, when the error actually occurs.</p>
-
-    <h2><a id="createdir" name="createdir">Creating an
-    ErrorDocument directory</a></h2>
-    For this concept to work as easily as possible, we must take
-    advantage of as much server support as we can get: 
-
-    <ol>
-      <li>By defining the <a
-      href="../mod/core.html#options">MultiViews option</a>, we
-      enable the language selection of the most appropriate
-      language alternative (content negotiation).</li>
-
-      <li>By setting the <a
-      href="../mod/mod_negotiation.html#languagepriority">LanguagePriority</a>
-      directive we define a set of default fallback languages in
-      the situation where the client's browser did not express any
-      preference at all.</li>
-
-      <li>By enabling <a href="../mod/mod_include.html">Server Side
-      Includes</a> (and disallowing execution of cgi scripts for
-      security reasons), we allow the server to include building
-      blocks of the error message, and to substitute the value of
-      certain environment variables into the generated document
-      (dynamic HTML) or even to conditionally include or omit parts
-      of the text.</li>
-
-      <li>The <a
-      href="../mod/mod_mime.html#addhandler">AddHandler</a> and <a
-      href="../mod/mod_mime.html#addtype">AddType</a> directives
-      are useful for automatically XSSI-expanding all files with a
-      <samp>.shtml</samp> suffix to <em>text/html</em>.</li>
-
-      <li>By using the <a
-      href="../mod/mod_alias.html#alias">Alias</a> directive, we
-      keep the error document directory outside of the document
-      tree because it can be regarded more as a server part than
-      part of the document tree.</li>
-
-      <li>The <a
-      href="../mod/core.html#directory">&lt;Directory&gt;</a>-Block
-      restricts these "special" settings to the error document
-      directory and avoids an impact on any of the settings for the
-      regular document tree.</li>
-
-      <li>For each of the error codes to be handled (see RFC2068
-      for an exact description of each error code, or look at
-      <code>src/main/http_protocol.c</code> if you wish to see
-      apache's standard messages), an <a
-      href="../mod/core.html#errordocument">ErrorDocument</a> in
-      the aliased <samp>/errordocs</samp> directory is defined.
-      Note that we only define the basename of the document here
-      because the MultiViews option will select the best candidate
-      based on the language suffixes and the client's preferences.
-      Any error situation with an error code <em>not</em> handled
-      by a custom document will be dealt with by the server in the
-      standard way (<em>i.e.</em>, a plain error message in
-      english).</li>
-
-      <li>Finally, the <a
-      href="../mod/core.html#allowoverride">AllowOverride</a>
-      directive tells apache that it is not necessary to look for a
-      .htaccess file in the /errordocs directory: a minor speed
-      optimization.</li>
-    </ol>
-    The resulting <samp>httpd.conf</samp> configuration would then
-    look similar to this: <small>(Note that you can define your own
-    error messages using this method for only part of the document
-    tree, e.g., a /~user/ subtree. In this case, the configuration
-    could as well be put into the .htaccess file at the root of the
-    subtree, and the &lt;Directory&gt; and &lt;/Directory&gt;
-    directives -but not the contained directives- must be
-    omitted.)</small> 
-<pre>
-  LanguagePriority en fr de 
-  Alias  /errordocs  /usr/local/apache/errordocs
-  &lt;Directory /usr/local/apache/errordocs&gt;
-   AllowOverride none
-   Options MultiViews IncludesNoExec FollowSymLinks
-   AddType text/html .shtml
-   &lt;FilesMatch "\.shtml[.$]"&gt;
-    SetOutputFilter INCLUDES
-   &lt;/FilesMatch&gt;
-  &lt;/Directory&gt;
-  #    "400 Bad Request",
-  ErrorDocument  400  /errordocs/400
-  #    "401 Authorization Required",
-  ErrorDocument  401  /errordocs/401
-  #    "403 Forbidden",
-  ErrorDocument  403  /errordocs/403
-  #    "404 Not Found",
-  ErrorDocument  404  /errordocs/404
-  #    "500 Internal Server Error",
-  ErrorDocument  500  /errordocs/500
-</pre>
-    The directory for the error messages (here:
-    <samp>/usr/local/apache/errordocs/</samp>) must then be created
-    with the appropriate permissions (readable and executable by
-    the server uid or gid, only writable for the administrator). 
-
-    <h3><a id="docnames" name="docnames">Naming the individual
-    error document files</a></h3>
-    By defining the <samp>MultiViews</samp> option, the server was
-    told to automatically scan the directory for matching variants
-    (looking at language and content type suffixes) when a
-    requested document was not found. In the configuration, we
-    defined the names for the error documents to be just their
-    error number (without any suffix). 
-
-    <p>The names of the individual error documents are now
-    determined like this (I'm using 403 as an example, think of it
-    as a placeholder for any of the configured error
-    documents):</p>
-
-    <ul>
-      <li>No file errordocs/403 should exist. Otherwise, it would
-      be found and served (with the DefaultType, usually
-      text/plain), all negotiation would be bypassed.</li>
-
-      <li>For each language for which we have an internationalized
-      version (note that this need not be the same set of languages
-      for each error code - you can get by with a single language
-      version until you actually <em>have</em> translated
-      versions), a document
-      <samp>errordocs/403.shtml.<em>lang</em></samp> is created and
-      filled with the error text in that language (<a
-      href="#createdocs">see below</a>).</li>
-
-      <li>One fallback document called
-      <samp>errordocs/403.shtml</samp> is created, usually by
-      creating a symlink to the default language variant (<a
-      href="#fallback">see below</a>).</li>
-    </ul>
-
-    <h3><a id="headfoot" name="headfoot">The common header and
-    footer files</a></h3>
-    By putting as much layout information in two special "include
-    files", the error documents can be reduced to a bare minimum. 
-
-    <p>One of these layout files defines the HTML document header
-    and a configurable list of paths to the icons to be shown in
-    the resulting error document. These paths are exported as a set
-    of XSSI environment variables and are later evaluated by the
-    "footer" special file. The title of the current error (which is
-    put into the TITLE tag and an H1 header) is simply passed in
-    from the main error document in a variable called
-    <code>title</code>.<br />
-     <strong>By changing this file, the layout of all generated
-    error messages can be changed in a second.</strong> (By
-    exploiting the features of XSSI, you can easily define
-    different layouts based on the current virtual host, or even
-    based on the client's domain name).</p>
-
-    <p>The second layout file describes the footer to be displayed
-    at the bottom of every error message. In this example, it shows
-    an apache logo, the current server time, the server version
-    string and adds a mail reference to the site's webmaster.</p>
-
-    <p>For simplicity, the header file is simply called
-    <code>head.shtml</code> because it contains server-parsed
-    content but no language specific information. The footer file
-    exists once for each language translation, plus a symlink for
-    the default language.</p>
-
-    <p><strong>Example:</strong> for English, French and German
-    versions (default english)<br />
-     <code>foot.shtml.en</code>,<br />
-     <code>foot.shtml.fr</code>,<br />
-     <code>foot.shtml.de</code>,<br />
-     <code>foot.shtml</code> symlink to
-    <code>foot.shtml.en</code></p>
-
-    <p>Both files are included into the error document by using the
-    directives <code>&lt;!--#include virtual="head" --&gt;</code>
-    and <code>&lt;!--#include virtual="foot" --&gt;</code>
-    respectively: the rest of the magic occurs in mod_negotiation
-    and in mod_include.</p>
-
-    <p>See <a href="#listings">the listings below</a> to see an
-    actual HTML implementation of the discussed example.</p>
-
-    <h3><a id="createdocs" name="createdocs">Creating
-    ErrorDocuments in different languages</a></h3>
-    After all this preparation work, little remains to be said
-    about the actual documents. They all share a simple common
-    structure: 
-<pre>
-&lt;!--#set var="title" value="<em>error description title</em>" --&gt;
-&lt;!--#include virtual="head" --&gt;
-   <em>explanatory error text</em>
-&lt;!--#include virtual="foot" --&gt;
-</pre>
-    In the <a href="#listings">listings section</a>, you can see an
-    example of a [400 Bad Request] error document. Documents as
-    simple as that certainly cause no problems to translate or
-    expand. 
-
-    <h3><a id="fallback" name="fallback">The fallback
-    language</a></h3>
-    Do we need a special handling for languages other than those we
-    have translations for? We did set the LanguagePriority, didn't
-    we?! 
-
-    <p>Well, the LanguagePriority directive is for the case where
-    the client does not express any language priority at all. But
-    what happens in the situation where the client wants one of the
-    languages we do not have, and none of those we do have?</p>
-
-    <p>Without doing anything, the Apache server will usually
-    return a [406 no acceptable variant] error, listing the choices
-    from which the client may select. But we're in an error message
-    already, and important error information might get lost when
-    the client had to choose a language representation first.</p>
-
-    <p>So, in this situation it appears to be easier to define a
-    fallback language (by copying or linking, <em>e.g.</em>, the
-    english version to a language-less version). Because the
-    negotiation algorithm prefers "more specialized" variants over
-    "more generic" variants, these generic alternatives will only
-    be chosen when the normal negotiation did not succeed.</p>
-
-    <p>A simple shell script to do it (execute within the
-    errordocs/ dir):</p>
-<pre>
-  for f in *.shtml.en
-  do
-     ln -s $f `basename $f .en`
-  done
-</pre>
-
-    <h2><a id="proxy" name="proxy">Customizing Proxy Error
-    Messages</a></h2>
-
-    <p>As of Apache-1.3, it is possible to use the
-    <code>ErrorDocument</code> mechanism for proxy error messages
-    as well (previous versions always returned fixed predefined
-    error messages).</p>
-
-    <p>Most proxy errors return an error code of [500 Internal
-    Server Error]. To find out whether a particular error document
-    was invoked on behalf of a proxy error or because of some other
-    server error, and what the reason for the failure was, you can
-    check the contents of the new <code>ERROR_NOTES</code> CGI
-    environment variable: if invoked for a proxy error, this
-    variable will contain the actual proxy error message text in
-    HTML form.</p>
-
-    <p>The following excerpt demonstrates how to exploit the
-    <code>ERROR_NOTES</code> variable within an error document:</p>
-<pre>
- &lt;!--#if expr="$REDIRECT_ERROR_NOTES = ''" --&gt;
-  &lt;p&gt;
-   The server encountered an unexpected condition
-   which prevented it from fulfilling the request. 
-  &lt;/p&gt;
-  &lt;p&gt;
-   &lt;A HREF="mailto:&lt;!--#echo var="SERVER_ADMIN" --&gt;"
-    SUBJECT="Error message [&lt;!--#echo var="REDIRECT_STATUS" --&gt;] &lt;!--#echo var="title" --&gt; for &lt;!--#echo var="REQUEST_URI" --&gt;"&gt;
-   Please forward this error screen to &lt;!--#echo var="SERVER_NAME" --&gt;'s
-   WebMaster&lt;/A&gt;; it includes useful debugging information about
-   the Request which caused the error.
-   &lt;pre&gt;&lt;!--#printenv --&gt;&lt;/pre&gt;
-  &lt;/p&gt;
- &lt;!--#else --&gt;
-  &lt;!--#echo var="REDIRECT_ERROR_NOTES" --&gt;
- &lt;!--#endif --&gt;
-</pre>
-
-    <h2><a id="listings" name="listings">HTML listing of the
-    discussed example</a></h2>
-    So, to summarize our example, here's the complete listing of
-    the <samp>400.shtml.en</samp> document. You will notice that it
-    contains almost nothing but the error text (with conditional
-    additions). Starting with this example, you will find it easy
-    to add more error documents, or to translate the error
-    documents to different languages. 
-    <hr />
-<pre>
-&lt;!--#set var="title" value="Bad Request"
---&gt;&lt;!--#include virtual="head" --&gt;&lt;P&gt;
-   Your browser sent a request that this server could not understand:
-   &lt;BLOCKQUOTE&gt;
-     &lt;STRONG&gt;&lt;!--#echo var="REQUEST_URI" --&gt;&lt;/STRONG&gt;
-   &lt;/BLOCKQUOTE&gt;
-   The request could not be understood by the server due to malformed
-   syntax. The client should not repeat the request without
-   modifications.
-   &lt;/P&gt;
-   &lt;P&gt;
-   &lt;!--#if expr="$HTTP_REFERER != ''" --&gt;
-    Please inform the owner of
-    &lt;A HREF="&lt;!--#echo var="HTTP_REFERER" --&gt;"&gt;the referring page&lt;/A&gt; about 
-    the malformed link.
-   &lt;!--#else --&gt;
-    Please check your request for typing errors and retry.
-   &lt;!--#endif --&gt;
-   &lt;/P&gt;
-&lt;!--#include virtual="foot" --&gt;
-</pre>
-    <hr />
-    Here is the complete <samp>head.shtml</samp> file (the funny
-    line breaks avoid empty lines in the document after XSSI
-    processing). Note the configuration section at top. That's
-    where you configure the images and logos as well as the apache
-    documentation directory. Look how this file displays two
-    different logos depending on the content of the virtual host
-    name ($SERVER_NAME), and that an animated apache logo is shown
-    if the browser appears to support it (the latter requires
-    server configuration lines of the form <br />
-     <code>BrowserMatch "^Mozilla/[2-4]" anigif</code><br />
-     for browser types which support animated GIFs). 
-    <hr />
-<pre>
-&lt;!--#if expr="$SERVER_NAME = /.*\.mycompany\.com/" 
---&gt;&lt;!--#set var="IMG_CorpLogo"
-            value="http://$SERVER_NAME:$SERVER_PORT/errordocs/CorpLogo.gif" 
---&gt;&lt;!--#set var="ALT_CorpLogo" value="Powered by Linux!" 
---&gt;&lt;!--#else
---&gt;&lt;!--#set var="IMG_CorpLogo"
-            value="http://$SERVER_NAME:$SERVER_PORT/errordocs/PrivLogo.gif" 
---&gt;&lt;!--#set var="ALT_CorpLogo" value="Powered by Linux!" 
---&gt;&lt;!--#endif
---&gt;&lt;!--#set var="IMG_BgImage" value="http://$SERVER_NAME:$SERVER_PORT/errordocs/BgImage.gif" 
---&gt;&lt;!--#set var="DOC_Apache" value="http://$SERVER_NAME:$SERVER_PORT/Apache/" 
---&gt;&lt;!--#if expr="$anigif" 
---&gt;&lt;!--#set var="IMG_Apache" value="http://$SERVER_NAME:$SERVER_PORT/icons/apache_anim.gif" 
---&gt;&lt;!--#else
---&gt;&lt;!--#set var="IMG_Apache" value="http://$SERVER_NAME:$SERVER_PORT/icons/apache_pb.gif" 
---&gt;&lt;!--#endif
---&gt;&lt;!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"&gt;
-&lt;HTML&gt;
- &lt;HEAD&gt;
-  &lt;TITLE&gt;
-   [&lt;!--#echo var="REDIRECT_STATUS" --&gt;] &lt;!--#echo var="title" --&gt;
-  &lt;/TITLE&gt;
- &lt;/HEAD&gt;
- &lt;BODY BGCOLOR="white" BACKGROUND="&lt;!--#echo var="IMG_BgImage" --&gt;"&gt;&lt;UL&gt;
-  &lt;H1 ALIGN="center"&gt;
-   [&lt;!--#echo var="REDIRECT_STATUS" --&gt;] &lt;!--#echo var="title" --&gt;
-   &lt;IMG SRC="&lt;!--#echo var="IMG_CorpLogo" --&gt;"
-        ALT="&lt;!--#echo var="ALT_CorpLogo" --&gt;" ALIGN=right&gt;
-  &lt;/H1&gt;
-  &lt;HR&gt;&lt;!-- ======================================================== --&gt;
-  &lt;DIV&gt;
-</pre>
-    <hr />
-    and this is the <samp>foot.shtml.en</samp> file: 
-    <hr />
-<pre>
-  &lt;/DIV&gt;
-  &lt;HR&gt;
-  &lt;DIV ALIGN="right"&gt;&lt;SMALL&gt;&lt;SUP&gt;Local Server time:
-      &lt;!--#echo var="DATE_LOCAL" --&gt;
-  &lt;/SUP&gt;&lt;/SMALL&gt;&lt;/DIV&gt;
-  &lt;DIV ALIGN="center"&gt;
-    &lt;A HREF="&lt;!--#echo var="DOC_Apache" --&gt;"&gt;
-    &lt;IMG SRC="&lt;!--#echo var="IMG_Apache" --&gt;" BORDER=0 ALIGN="bottom"
-         ALT="Powered by &lt;!--#echo var="SERVER_SOFTWARE" --&gt;"&gt;&lt;/A&gt;&lt;BR&gt;
-    &lt;SMALL&gt;&lt;SUP&gt;&lt;!--#set var="var"
-     value="Powered by $SERVER_SOFTWARE -- File last modified on $LAST_MODIFIED"
-    --&gt;&lt;!--#echo var="var" --&gt;&lt;/SUP&gt;&lt;/SMALL&gt;
-  &lt;/DIV&gt;
-  &lt;ADDRESS&gt;If the indicated error looks like a misconfiguration, please inform
-   &lt;A HREF="mailto:&lt;!--#echo var="SERVER_ADMIN" --&gt;"
-      SUBJECT="Feedback about Error message [&lt;!--#echo var="REDIRECT_STATUS" 
-        --&gt;] &lt;!--#echo var="title" --&gt;, req=&lt;!--#echo var="REQUEST_URI" --&gt;"&gt;
-   &lt;!--#echo var="SERVER_NAME" --&gt;'s WebMaster&lt;/A&gt;.
-  &lt;/ADDRESS&gt;
- &lt;/UL&gt;&lt;/BODY&gt;
-&lt;/HTML&gt;
-</pre>
-    <hr />
-
-    <h3>More welcome!</h3>
-    If you have tips to contribute, send mail to <a
-    href="mailto:martin@apache.org">martin@apache.org</a> 
-    <!--#include virtual="footer.html" -->
-  </body>
-</html>
-
diff --git a/docs/manual/misc/descriptors.html b/docs/manual/misc/descriptors.html
deleted file mode 100644
index 6f8485c..0000000
--- a/docs/manual/misc/descriptors.html
+++ /dev/null
@@ -1,197 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta name="generator" content="HTML Tidy, see www.w3.org" />
-
-    <title>Descriptors and Apache</title>
-  </head>
-  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-
-  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-  vlink="#000080" alink="#FF0000">
-    <!--#include virtual="header.html" -->
-
-    <h1 align="CENTER">Descriptors and Apache</h1>
-
-    <p>A <em>descriptor</em>, also commonly called a <em>file
-    handle</em> is an object that a program uses to read or write
-    an open file, or open network socket, or a variety of other
-    devices. It is represented by an integer, and you may be
-    familiar with <code>stdin</code>, <code>stdout</code>, and
-    <code>stderr</code> which are descriptors 0, 1, and 2
-    respectively. Apache needs a descriptor for each log file, plus
-    one for each network socket that it listens on, plus a handful
-    of others. Libraries that Apache uses may also require
-    descriptors. Normal programs don't open up many descriptors at
-    all, and so there are some latent problems that you may
-    experience should you start running Apache with many
-    descriptors (<em>i.e.</em>, with many virtual hosts).</p>
-
-    <p>The operating system enforces a limit on the number of
-    descriptors that a program can have open at a time. There are
-    typically three limits involved here. One is a kernel
-    limitation, depending on your operating system you will either
-    be able to tune the number of descriptors available to higher
-    numbers (this is frequently called <em>FD_SETSIZE</em>). Or you
-    may be stuck with a (relatively) low amount. The second limit
-    is called the <em>hard resource</em> limit, and it is sometimes
-    set by root in an obscure operating system file, but frequently
-    is the same as the kernel limit. The third limit is called the
-    <em>soft resource</em> limit. The soft limit is always less
-    than or equal to the hard limit. For example, the hard limit
-    may be 1024, but the soft limit only 64. Any user can raise
-    their soft limit up to the hard limit. Root can raise the hard
-    limit up to the system maximum limit. The soft limit is the
-    actual limit that is used when enforcing the maximum number of
-    files a process can have open.</p>
-
-    <p>To summarize:</p>
-
-    <center>
-<pre>
-  #open files  &lt;=  soft limit  &lt;=  hard limit  &lt;=  kernel limit
-</pre>
-    </center>
-
-    <p>You control the hard and soft limits using the
-    <code>limit</code> (csh) or <code>ulimit</code> (sh)
-    directives. See the respective man pages for more information.
-    For example you can probably use <code>ulimit -n
-    unlimited</code> to raise your soft limit up to the hard limit.
-    You should include this command in a shell script which starts
-    your webserver.</p>
-
-    <p>Unfortunately, it's not always this simple. As mentioned
-    above, you will probably run into some system limitations that
-    will need to be worked around somehow. Work was done in version
-    1.2.1 to improve the situation somewhat. Here is a partial list
-    of systems and workarounds (assuming you are using 1.2.1 or
-    later):</p>
-
-    <dl>
-      <dt><strong>BSDI 2.0</strong></dt>
-
-      <dd>Under BSDI 2.0 you can build Apache to support more
-      descriptors by adding <code>-DFD_SETSIZE=nnn</code> to
-      <code>EXTRA_CFLAGS</code> (where nnn is the number of
-      descriptors you wish to support, keep it less than the hard
-      limit). But it will run into trouble if more than
-      approximately 240 Listen directives are used. This may be
-      cured by rebuilding your kernel with a higher
-      FD_SETSIZE.</dd>
-
-      <dt><strong>FreeBSD 2.2, BSDI 2.1+</strong></dt>
-
-      <dd>Similar to the BSDI 2.0 case, you should define
-      <code>FD_SETSIZE</code> and rebuild. But the extra Listen
-      limitation doesn't exist.</dd>
-
-      <dt><strong>Linux</strong></dt>
-
-      <dd>By default Linux has a kernel maximum of 256 open
-      descriptors per process. There are several patches available
-      for the 2.0.x series which raise this to 1024 and beyond, and
-      you can find them in the "unofficial patches" section of <a
-      href="http://www.linuxhq.com/">the Linux Information HQ</a>.
-      None of these patches are perfect, and an entirely different
-      approach is likely to be taken during the 2.1.x development.
-      Applying these patches will raise the FD_SETSIZE used to
-      compile all programs, and unless you rebuild all your
-      libraries you should avoid running any other program with a
-      soft descriptor limit above 256. As of this writing the
-      patches available for increasing the number of descriptors do
-      not take this into account. On a dedicated webserver you
-      probably won't run into trouble.</dd>
-
-      <dt><strong>Solaris through 2.5.1</strong></dt>
-
-      <dd>Solaris has a kernel hard limit of 1024 (may be lower in
-      earlier versions). But it has a limitation that files using
-      the stdio library cannot have a descriptor above 255. Apache
-      uses the stdio library for the ErrorLog directive. When you
-      have more than approximately 110 virtual hosts (with an error
-      log and an access log each) you will need to build Apache
-      with <code>-DHIGH_SLACK_LINE=256</code> added to
-      <code>EXTRA_CFLAGS</code>. You will be limited to
-      approximately 240 error logs if you do this.</dd>
-
-      <dt><strong>AIX</strong></dt>
-
-      <dd>AIX version 3.2?? appears to have a hard limit of 128
-      descriptors. End of story. Version 4.1.5 has a hard limit of
-      2000.</dd>
-
-      <dt><strong>SCO OpenServer</strong></dt>
-
-      <dd>Edit the <code>/etc/conf/cf.d/stune</code> file or use
-      <code>/etc/conf/cf.d/configure</code> choice 7 (User and
-      Group configuration) and modify the <code>NOFILES</code>
-      kernel parameter to a suitably higher value. SCO recommends a
-      number between 60 and 11000, the default is 110. Relink and
-      reboot, and the new number of descriptors will be
-      available.</dd>
-
-      <dt><strong>Compaq Tru64 UNIX/Digital UNIX/OSF</strong></dt>
-
-      <dd>
-        <ol>
-          <li>Raise <code>open_max_soft</code> and
-          <code>open_max_hard</code> to 4096 in the proc subsystem.
-          Do a man on sysconfig, sysconfigdb, and
-          sysconfigtab.</li>
-
-          <li>Raise <code>max-vnodes</code> to a large number which
-          is greater than the number of apache processes * 4096
-          (Setting it to 250,000 should be good for most people).
-          Do a man on sysconfig, sysconfigdb, and
-          sysconfigtab.</li>
-
-          <li>If you are using Tru64 5.0, 5.0A, or 5.1, define
-          <code>NO_SLACK</code> to work around a bug in the OS.
-          <code>CFLAGS="-DNO_SLACK" ./configure</code></li>
-        </ol>
-      </dd>
-
-      <dt><strong>Others</strong></dt>
-
-      <dd>If you have details on another operating system, please
-      submit it through our <a
-      href="http://httpd.apache.org/bug_report.html">Bug Report
-      Page</a>.</dd>
-    </dl>
-
-    <p>In addition to the problems described above there are
-    problems with many libraries that Apache uses. The most common
-    example is the bind DNS resolver library that is used by pretty
-    much every unix, which fails if it ends up with a descriptor
-    above 256. We suspect there are other libraries that similar
-    limitations. So the code as of 1.2.1 takes a defensive stance
-    and tries to save descriptors less than 16 for use while
-    processing each request. This is called the <em>low slack
-    line</em>.</p>
-
-    <p>Note that this shouldn't waste descriptors. If you really
-    are pushing the limits and Apache can't get a descriptor above
-    16 when it wants it, it will settle for one below 16.</p>
-
-    <p>In extreme situations you may want to lower the low slack
-    line, but you shouldn't ever need to. For example, lowering it
-    can increase the limits 240 described above under Solaris and
-    BSDI 2.0. But you'll play a delicate balancing game with the
-    descriptors needed to serve a request. Should you want to play
-    this game, the compile time parameter is
-    <code>LOW_SLACK_LINE</code> and there's a tiny bit of
-    documentation in the header file <code>httpd.h</code>.</p>
-
-    <p>Finally, if you suspect that all this slack stuff is causing
-    you problems, you can disable it. Add <code>-DNO_SLACK</code>
-    to <code>EXTRA_CFLAGS</code> and rebuild. But please report it
-    to our <a href="http://httpd.apache.org/bug_report.html">Bug
-    Report Page</a> so that we can investigate. 
-    <!--#include virtual="footer.html" -->
-    </p>
-  </body>
-</html>
-
diff --git a/docs/manual/misc/fin_wait_2.html b/docs/manual/misc/fin_wait_2.html
deleted file mode 100644
index 01f4523..0000000
--- a/docs/manual/misc/fin_wait_2.html
+++ /dev/null
@@ -1,399 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta name="generator" content="HTML Tidy, see www.w3.org" />
-
-    <title>Connections in FIN_WAIT_2 and Apache</title>
-    <link rev="made" href="mailto:marc@apache.org" />
-  </head>
-  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-
-  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-  vlink="#000080" alink="#FF0000">
-    <!--#include virtual="header.html" -->
-
-    <h1 align="CENTER">Connections in the FIN_WAIT_2 state and
-    Apache</h1>
-
-    <ol>
-      <li>
-        <h2>What is the FIN_WAIT_2 state?</h2>
-        Starting with the Apache 1.2 betas, people are reporting
-        many more connections in the FIN_WAIT_2 state (as reported
-        by <code>netstat</code>) than they saw using older
-        versions. When the server closes a TCP connection, it sends
-        a packet with the FIN bit sent to the client, which then
-        responds with a packet with the ACK bit set. The client
-        then sends a packet with the FIN bit set to the server,
-        which responds with an ACK and the connection is closed.
-        The state that the connection is in during the period
-        between when the server gets the ACK from the client and
-        the server gets the FIN from the client is known as
-        FIN_WAIT_2. See the <a
-        href="ftp://ds.internic.net/rfc/rfc793.txt">TCP RFC</a> for
-        the technical details of the state transitions. 
-
-        <p>The FIN_WAIT_2 state is somewhat unusual in that there
-        is no timeout defined in the standard for it. This means
-        that on many operating systems, a connection in the
-        FIN_WAIT_2 state will stay around until the system is
-        rebooted. If the system does not have a timeout and too
-        many FIN_WAIT_2 connections build up, it can fill up the
-        space allocated for storing information about the
-        connections and crash the kernel. The connections in
-        FIN_WAIT_2 do not tie up an httpd process.</p>
-      </li>
-
-      <li>
-        <h2>But why does it happen?</h2>
-        There are numerous reasons for it happening, some of them
-        may not yet be fully clear. What is known follows. 
-
-        <h3>Buggy clients and persistent connections</h3>
-        Several clients have a bug which pops up when dealing with
-        <a href="../keepalive.html">persistent connections</a> (aka
-        keepalives). When the connection is idle and the server
-        closes the connection (based on the <a
-        href="../mod/core.html#keepalivetimeout">KeepAliveTimeout</a>),
-        the client is programmed so that the client does not send
-        back a FIN and ACK to the server. This means that the
-        connection stays in the FIN_WAIT_2 state until one of the
-        following happens: 
-
-        <ul>
-          <li>The client opens a new connection to the same or a
-          different site, which causes it to fully close the older
-          connection on that socket.</li>
-
-          <li>The user exits the client, which on some (most?)
-          clients causes the OS to fully shutdown the
-          connection.</li>
-
-          <li>The FIN_WAIT_2 times out, on servers that have a
-          timeout for this state.</li>
-        </ul>
-
-        <p>If you are lucky, this means that the buggy client will
-        fully close the connection and release the resources on
-        your server. However, there are some cases where the socket
-        is never fully closed, such as a dialup client
-        disconnecting from their provider before closing the
-        client. In addition, a client might sit idle for days
-        without making another connection, and thus may hold its
-        end of the socket open for days even though it has no
-        further use for it. <strong>This is a bug in the browser or
-        in its operating system's TCP implementation.</strong></p>
-
-        <p>The clients on which this problem has been verified to
-        exist:</p>
-
-        <ul>
-          <li>Mozilla/3.01 (X11; I; FreeBSD 2.1.5-RELEASE
-          i386)</li>
-
-          <li>Mozilla/2.02 (X11; I; FreeBSD 2.1.5-RELEASE
-          i386)</li>
-
-          <li>Mozilla/3.01Gold (X11; I; SunOS 5.5 sun4m)</li>
-
-          <li>MSIE 3.01 on the Macintosh</li>
-
-          <li>MSIE 3.01 on Windows 95</li>
-        </ul>
-
-        <p>This does not appear to be a problem on:</p>
-
-        <ul>
-          <li>Mozilla/3.01 (Win95; I)</li>
-        </ul>
-
-        <p>It is expected that many other clients have the same
-        problem. What a client <strong>should do</strong> is
-        periodically check its open socket(s) to see if they have
-        been closed by the server, and close their side of the
-        connection if the server has closed. This check need only
-        occur once every few seconds, and may even be detected by a
-        OS signal on some systems (<em>e.g.</em>, Win95 and NT
-        clients have this capability, but they seem to be ignoring
-        it).</p>
-
-        <p>Apache <strong>cannot</strong> avoid these FIN_WAIT_2
-        states unless it disables persistent connections for the
-        buggy clients, just like we recommend doing for Navigator
-        2.x clients due to other bugs. However, non-persistent
-        connections increase the total number of connections needed
-        per client and slow retrieval of an image-laden web page.
-        Since non-persistent connections have their own resource
-        consumptions and a short waiting period after each closure,
-        a busy server may need persistence in order to best serve
-        its clients.</p>
-
-        <p>As far as we know, the client-caused FIN_WAIT_2 problem
-        is present for all servers that support persistent
-        connections, including Apache 1.1.x and 1.2.</p>
-
-        <h3>A necessary bit of code introduced in 1.2</h3>
-        While the above bug is a problem, it is not the whole
-        problem. Some users have observed no FIN_WAIT_2 problems
-        with Apache 1.1.x, but with 1.2b enough connections build
-        up in the FIN_WAIT_2 state to crash their server. The most
-        likely source for additional FIN_WAIT_2 states is a
-        function called <code>lingering_close()</code> which was
-        added between 1.1 and 1.2. This function is necessary for
-        the proper handling of persistent connections and any
-        request which includes content in the message body
-        (<em>e.g.</em>, PUTs and POSTs). What it does is read any
-        data sent by the client for a certain time after the server
-        closes the connection. The exact reasons for doing this are
-        somewhat complicated, but involve what happens if the
-        client is making a request at the same time the server
-        sends a response and closes the connection. Without
-        lingering, the client might be forced to reset its TCP
-        input buffer before it has a chance to read the server's
-        response, and thus understand why the connection has
-        closed. See the <a href="#appendix">appendix</a> for more
-        details. 
-
-        <p>The code in <code>lingering_close()</code> appears to
-        cause problems for a number of factors, including the
-        change in traffic patterns that it causes. The code has
-        been thoroughly reviewed and we are not aware of any bugs
-        in it. It is possible that there is some problem in the BSD
-        TCP stack, aside from the lack of a timeout for the
-        FIN_WAIT_2 state, exposed by the
-        <code>lingering_close</code> code that causes the observed
-        problems.</p>
-      </li>
-
-      <li>
-        What can I do about it? There are several possible
-        workarounds to the problem, some of which work better than
-        others. 
-
-        <h3>Add a timeout for FIN_WAIT_2</h3>
-        The obvious workaround is to simply have a timeout for the
-        FIN_WAIT_2 state. This is not specified by the RFC, and
-        could be claimed to be a violation of the RFC, but it is
-        widely recognized as being necessary. The following systems
-        are known to have a timeout: 
-
-        <ul>
-          <li><a href="http://www.freebsd.org/">FreeBSD</a>
-          versions starting at 2.0 or possibly earlier.</li>
-
-          <li><a href="http://www.netbsd.org/">NetBSD</a> version
-          1.2(?)</li>
-
-          <li><a href="http://www.openbsd.org/">OpenBSD</a> all
-          versions(?)</li>
-
-          <li><a href="http://www.bsdi.com/">BSD/OS</a> 2.1, with
-          the <a
-          href="ftp://ftp.bsdi.com/bsdi/patches/patches-2.1/K210-027">
-          K210-027</a> patch installed.</li>
-
-          <li><a href="http://www.sun.com/">Solaris</a> as of
-          around version 2.2. The timeout can be tuned by using
-          <code>ndd</code> to modify
-          <code>tcp_fin_wait_2_flush_interval</code>, but the
-          default should be appropriate for most servers and
-          improper tuning can have negative impacts.</li>
-
-          <li><a href="http://www.linux.org/">Linux</a> 2.0.x and
-          earlier(?)</li>
-
-          <li><a href="http://www.hp.com/">HP-UX</a> 10.x defaults
-          to terminating connections in the FIN_WAIT_2 state after
-          the normal keepalive timeouts. This does not refer to the
-          persistent connection or HTTP keepalive timeouts, but the
-          <code>SO_LINGER</code> socket option which is enabled by
-          Apache. This parameter can be adjusted by using
-          <code>nettune</code> to modify parameters such as
-          <code>tcp_keepstart</code> and <code>tcp_keepstop</code>.
-          In later revisions, there is an explicit timer for
-          connections in FIN_WAIT_2 that can be modified; contact
-          HP support for details.</li>
-
-          <li><a href="http://www.sgi.com/">SGI IRIX</a> can be
-          patched to support a timeout. For IRIX 5.3, 6.2, and 6.3,
-          use patches 1654, 1703 and 1778 respectively. If you have
-          trouble locating these patches, please contact your SGI
-          support channel for help.</li>
-
-          <li><a href="http://www.ncr.com/">NCR's MP RAS Unix</a>
-          2.xx and 3.xx both have FIN_WAIT_2 timeouts. In 2.xx it
-          is non-tunable at 600 seconds, while in 3.xx it defaults
-          to 600 seconds and is calculated based on the tunable
-          "max keep alive probes" (default of 8) multiplied by the
-          "keep alive interval" (default 75 seconds).</li>
-
-          <li><a href="http://www.sequent.com">Sequent's ptx/TCP/IP
-          for DYNIX/ptx</a> has had a FIN_WAIT_2 timeout since
-          around release 4.1 in mid-1994.</li>
-        </ul>
-
-        <p>The following systems are known to not have a
-        timeout:</p>
-
-        <ul>
-          <li><a href="http://www.sun.com/">SunOS 4.x</a> does not
-          and almost certainly never will have one because it as at
-          the very end of its development cycle for Sun. If you
-          have kernel source should be easy to patch.</li>
-        </ul>
-
-        <p>There is a <a
-        href="http://www.apache.org/dist/httpd/contrib/patches/1.2/fin_wait_2.patch">
-        patch available</a> for adding a timeout to the FIN_WAIT_2
-        state; it was originally intended for BSD/OS, but should be
-        adaptable to most systems using BSD networking code. You
-        need kernel source code to be able to use it. If you do
-        adapt it to work for any other systems, please drop me a
-        note at <a
-        href="mailto:marc@apache.org">marc@apache.org</a>.</p>
-
-        <h3>Compile without using
-        <code>lingering_close()</code></h3>
-        It is possible to compile Apache 1.2 without using the
-        <code>lingering_close()</code> function. This will result
-        in that section of code being similar to that which was in
-        1.1. If you do this, be aware that it can cause problems
-        with PUTs, POSTs and persistent connections, especially if
-        the client uses pipelining. That said, it is no worse than
-        on 1.1, and we understand that keeping your server running
-        is quite important. 
-
-        <p>To compile without the <code>lingering_close()</code>
-        function, add <code>-DNO_LINGCLOSE</code> to the end of the
-        <code>EXTRA_CFLAGS</code> line in your
-        <code>Configuration</code> file, rerun
-        <code>Configure</code> and rebuild the server.</p>
-
-        <h3>Use <code>SO_LINGER</code> as an alternative to
-        <code>lingering_close()</code></h3>
-        On most systems, there is an option called
-        <code>SO_LINGER</code> that can be set with
-        <code>setsockopt(2)</code>. It does something very similar
-        to <code>lingering_close()</code>, except that it is broken
-        on many systems so that it causes far more problems than
-        <code>lingering_close</code>. On some systems, it could
-        possibly work better so it may be worth a try if you have
-        no other alternatives. 
-
-        <p>To try it, add <code>-DUSE_SO_LINGER
-        -DNO_LINGCLOSE</code> to the end of the
-        <code>EXTRA_CFLAGS</code> line in your
-        <code>Configuration</code> file, rerun
-        <code>Configure</code> and rebuild the server.</p>
-
-        <p><strong>NOTE:</strong> Attempting to use
-        <code>SO_LINGER</code> and <code>lingering_close()</code>
-        at the same time is very likely to do very bad things, so
-        don't.</p>
-
-        <h3>Increase the amount of memory used for storing
-        connection state</h3>
-
-        <dl>
-          <dt>BSD based networking code:</dt>
-
-          <dd>
-            BSD stores network data, such as connection states, in
-            something called an mbuf. When you get so many
-            connections that the kernel does not have enough mbufs
-            to put them all in, your kernel will likely crash. You
-            can reduce the effects of the problem by increasing the
-            number of mbufs that are available; this will not
-            prevent the problem, it will just make the server go
-            longer before crashing. 
-
-            <p>The exact way to increase them may depend on your
-            OS; look for some reference to the number of "mbufs" or
-            "mbuf clusters". On many systems, this can be done by
-            adding the line <code>NMBCLUSTERS="n"</code>, where
-            <code>n</code> is the number of mbuf clusters you want
-            to your kernel config file and rebuilding your
-            kernel.</p>
-          </dd>
-        </dl>
-
-        <h3>Disable KeepAlive</h3>
-
-        <p>If you are unable to do any of the above then you
-        should, as a last resort, disable KeepAlive. Edit your
-        httpd.conf and change "KeepAlive On" to "KeepAlive
-        Off".</p>
-      </li>
-
-      <li>
-        Feedback If you have any information to add to this page,
-        please contact me at <a
-        href="mailto:marc@apache.org">marc@apache.org</a>. 
-
-        <h2><a id="appendix" name="appendix"></a></h2>
-      </li>
-
-      <li>
-        Appendix 
-
-        <p>Below is a message from Roy Fielding, one of the authors
-        of HTTP/1.1.</p>
-
-        <h3>Why the lingering close functionality is necessary with
-        HTTP</h3>
-        The need for a server to linger on a socket after a close
-        is noted a couple times in the HTTP specs, but not
-        explained. This explanation is based on discussions between
-        myself, Henrik Frystyk, Robert S. Thau, Dave Raggett, and
-        John C. Mallery in the hallways of MIT while I was at W3C. 
-
-        <p>If a server closes the input side of the connection
-        while the client is sending data (or is planning to send
-        data), then the server's TCP stack will signal an RST
-        (reset) back to the client. Upon receipt of the RST, the
-        client will flush its own incoming TCP buffer back to the
-        un-ACKed packet indicated by the RST packet argument. If
-        the server has sent a message, usually an error response,
-        to the client just before the close, and the client
-        receives the RST packet before its application code has
-        read the error message from its incoming TCP buffer and
-        before the server has received the ACK sent by the client
-        upon receipt of that buffer, then the RST will flush the
-        error message before the client application has a chance to
-        see it. The result is that the client is left thinking that
-        the connection failed for no apparent reason.</p>
-
-        <p>There are two conditions under which this is likely to
-        occur:</p>
-
-        <ol>
-          <li>sending POST or PUT data without proper
-          authorization</li>
-
-          <li>sending multiple requests before each response
-          (pipelining) and one of the middle requests resulting in
-          an error or other break-the-connection result.</li>
-        </ol>
-
-        <p>The solution in all cases is to send the response, close
-        only the write half of the connection (what shutdown is
-        supposed to do), and continue reading on the socket until
-        it is either closed by the client (signifying it has
-        finally read the response) or a timeout occurs. That is
-        what the kernel is supposed to do if SO_LINGER is set.
-        Unfortunately, SO_LINGER has no effect on some systems; on
-        some other systems, it does not have its own timeout and
-        thus the TCP memory segments just pile-up until the next
-        reboot (planned or not).</p>
-
-        <p>Please note that simply removing the linger code will
-        not solve the problem -- it only moves it to a different
-        and much harder one to detect.</p>
-      </li>
-    </ol>
-    <!--#include virtual="footer.html" -->
-  </body>
-</html>
-
diff --git a/docs/manual/misc/footer.html b/docs/manual/misc/footer.html
deleted file mode 100644
index 24e2703..0000000
--- a/docs/manual/misc/footer.html
+++ /dev/null
@@ -1,5 +0,0 @@
-    <hr />
-
-    <h3 align="CENTER">Apache HTTP Server Version 2.0</h3>
-    <a href="./"><img src="../images/index.gif" alt="Index" /></a>
-    <a href="../"><img src="../images/home.gif" alt="Home" /></a>
diff --git a/docs/manual/misc/header.html b/docs/manual/misc/header.html
deleted file mode 100644
index 749461d..0000000
--- a/docs/manual/misc/header.html
+++ /dev/null
@@ -1,6 +0,0 @@
-    <div align="CENTER">
-      <img src="../images/sub.gif" alt="[APACHE DOCUMENTATION]" /> 
-
-      <h3>Apache HTTP Server Version 2.0</h3>
-    </div>
-
diff --git a/docs/manual/misc/index.html b/docs/manual/misc/index.html
deleted file mode 100644
index 8e05abc..0000000
--- a/docs/manual/misc/index.html
+++ /dev/null
@@ -1,67 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta name="generator" content="HTML Tidy, see www.w3.org" />
-
-    <title>Apache Miscellaneous Documentation</title>
-  </head>
-  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-
-  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-  vlink="#000080" alink="#FF0000">
-    <!--#include virtual="header.html" -->
-
-    <h1 align="CENTER">Apache Miscellaneous Documentation</h1>
-
-    <p>Below is a list of additional documentation pages that apply
-    to the Apache web server development project.</p>
-
-    <dl>
-      <dt><a href="custom_errordocs.html">How to use XSSI and
-      Negotiation for custom ErrorDocuments</a></dt>
-
-      <dd>Describes a solution which uses XSSI and negotiation to
-      custom-tailor the Apache ErrorDocuments to taste, adding the
-      advantage of returning internationalized versions of the
-      error messages depending on the client's language
-      preferences.</dd>
-
-      <dt><a href="descriptors.html">File Descriptor use in
-      Apache</a></dt>
-
-      <dd>Describes how Apache uses file descriptors and talks
-      about various limits imposed on the number of descriptors
-      available by various operating systems.</dd>
-
-      <dt><a
-      href="fin_wait_2.html"><samp>FIN_WAIT_2</samp></a></dt>
-
-      <dd>A description of the causes of Apache processes going
-      into the <samp>FIN_WAIT_2</samp> state, and what you can do
-      about it.</dd>
-
-      <dt><a href="known_client_problems.html">Known Client
-      Problems</a></dt>
-
-      <dd>A list of problems in HTTP clients which can be mitigated
-      by Apache.</dd>
-
-      <dt><a href="perf-tuning.html">Performance Notes -- Apache
-      Tuning</a></dt>
-
-      <dd>Notes about how to (run-time and compile-time) configure
-      Apache for highest performance. Notes explaining why Apache
-      does some things, and why it doesn't do other things (which
-      make it slower/faster).</dd>
-
-      <dt><a href="security_tips.html">Security Tips</a></dt>
-
-      <dd>Some "do"s - and "don't"s - for keeping your Apache web
-      site secure.</dd>
-    </dl>
-    <!--#include virtual="footer.html" -->
-  </body>
-</html>
-
diff --git a/docs/manual/misc/known_client_problems.html b/docs/manual/misc/known_client_problems.html
deleted file mode 100644
index 54643ef..0000000
--- a/docs/manual/misc/known_client_problems.html
+++ /dev/null
@@ -1,346 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta name="generator" content="HTML Tidy, see www.w3.org" />
-
-    <title>Apache HTTP Server Project</title>
-  </head>
-  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-
-  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-  vlink="#000080" alink="#FF0000">
-    <!--#include virtual="header.html" -->
-
-    <h1 align="CENTER">Known Problems in Clients</h1>
-
-    <p>Over time the Apache Group has discovered or been notified
-    of problems with various clients which we have had to work
-    around, or explain. This document describes these problems and
-    the workarounds available. It's not arranged in any particular
-    order. Some familiarity with the standards is assumed, but not
-    necessary.</p>
-
-    <p>For brevity, <em>Navigator</em> will refer to Netscape's
-    Navigator product (which in later versions was renamed
-    "Communicator" and various other names), and <em>MSIE</em> will
-    refer to Microsoft's Internet Explorer product. All trademarks
-    and copyrights belong to their respective companies. We welcome
-    input from the various client authors to correct
-    inconsistencies in this paper, or to provide us with exact
-    version numbers where things are broken/fixed.</p>
-
-    <p>For reference, <a
-    href="ftp://ds.internic.net/rfc/rfc1945.txt">RFC1945</a>
-    defines HTTP/1.0, and <a
-    href="ftp://ds.internic.net/rfc/rfc2068.txt">RFC2068</a>
-    defines HTTP/1.1. Apache as of version 1.2 is an HTTP/1.1
-    server (with an optional HTTP/1.0 proxy).</p>
-
-    <p>Various of these workarounds are triggered by environment
-    variables. The admin typically controls which are set, and for
-    which clients, by using <a
-    href="../mod/mod_browser.html">mod_browser</a>. Unless
-    otherwise noted all of these workarounds exist in versions 1.2
-    and later.</p>
-
-    <h3><a id="trailing-crlf" name="trailing-crlf">Trailing CRLF on
-    POSTs</a></h3>
-
-    <p>This is a legacy issue. The CERN webserver required
-    <code>POST</code> data to have an extra <code>CRLF</code>
-    following it. Thus many clients send an extra <code>CRLF</code>
-    that is not included in the <code>Content-Length</code> of the
-    request. Apache works around this problem by eating any empty
-    lines which appear before a request.</p>
-
-    <h3><a id="broken-keepalive" name="broken-keepalive">Broken
-    keepalive</a></h3>
-
-    <p>Various clients have had broken implementations of
-    <em>keepalive</em> (persistent connections). In particular the
-    Windows versions of Navigator 2.0 get very confused when the
-    server times out an idle connection. The workaround is present
-    in the default config files:</p>
-
-    <blockquote>
-      <code>BrowserMatch Mozilla/2 nokeepalive</code>
-    </blockquote>
-    Note that this matches some earlier versions of MSIE, which
-    began the practice of calling themselves <em>Mozilla</em> in
-    their user-agent strings just like Navigator. 
-
-    <p>MSIE 4.0b2, which claims to support HTTP/1.1, does not
-    properly support keepalive when it is used on 301 or 302
-    (redirect) responses. Unfortunately Apache's
-    <code>nokeepalive</code> code prior to 1.2.2 would not work
-    with HTTP/1.1 clients. You must apply <a
-    href="http://www.apache.org/dist/httpd/patches/apply_to_1.2.1/msie_4_0b2_fixes.patch">
-    this patch</a> to version 1.2.1. Then add this to your
-    config:</p>
-
-    <blockquote>
-      <code>BrowserMatch "MSIE 4\.0b2;" nokeepalive</code>
-    </blockquote>
-
-    <h3><a id="force-response-1.0"
-    name="force-response-1.0">Incorrect interpretation of
-    <code>HTTP/1.1</code> in response</a></h3>
-
-    <p>To quote from section 3.1 of RFC1945:</p>
-
-    <blockquote>
-      HTTP uses a "&lt;MAJOR&gt;.&lt;MINOR&gt;" numbering scheme to
-      indicate versions of the protocol. The protocol versioning
-      policy is intended to allow the sender to indicate the format
-      of a message and its capacity for understanding further HTTP
-      communication, rather than the features obtained via that
-      communication.
-    </blockquote>
-    Since Apache is an HTTP/1.1 server, it indicates so as part of
-    its response. Many client authors mistakenly treat this part of
-    the response as an indication of the protocol that the response
-    is in, and then refuse to accept the response. 
-
-    <p>The first major indication of this problem was with AOL's
-    proxy servers. When Apache 1.2 went into beta it was the first
-    wide-spread HTTP/1.1 server. After some discussion, AOL fixed
-    their proxies. In anticipation of similar problems, the
-    <code>force-response-1.0</code> environment variable was added
-    to Apache. When present Apache will indicate "HTTP/1.0" in
-    response to an HTTP/1.0 client, but will not in any other way
-    change the response.</p>
-
-    <p>The pre-1.1 Java Development Kit (JDK) that is used in many
-    clients (including Navigator 3.x and MSIE 3.x) exhibits this
-    problem. As do some of the early pre-releases of the 1.1 JDK.
-    We think it is fixed in the 1.1 JDK release. In any event the
-    workaround:</p>
-
-    <blockquote>
-      <code>BrowserMatch Java/1.0 force-response-1.0<br />
-       BrowserMatch JDK/1.0 force-response-1.0</code>
-    </blockquote>
-
-    <p>RealPlayer 4.0 from Progressive Networks also exhibits this
-    problem. However they have fixed it in version 4.01 of the
-    player, but version 4.01 uses the same <code>User-Agent</code>
-    as version 4.0. The workaround is still:</p>
-
-    <blockquote>
-      <code>BrowserMatch "RealPlayer 4.0" force-response-1.0</code>
-    </blockquote>
-
-    <h3><a id="msie4.0b2" name="msie4.0b2">Requests use HTTP/1.1
-    but responses must be in HTTP/1.0</a></h3>
-
-    <p>MSIE 4.0b2 has this problem. Its Java VM makes requests in
-    HTTP/1.1 format but the responses must be in HTTP/1.0 format
-    (in particular, it does not understand <em>chunked</em>
-    responses). The workaround is to fool Apache into believing the
-    request came in HTTP/1.0 format.</p>
-
-    <blockquote>
-      <code>BrowserMatch "MSIE 4\.0b2;" downgrade-1.0
-      force-response-1.0</code>
-    </blockquote>
-    This workaround is available in 1.2.2, and in a <a
-    href="http://www.apache.org/dist/httpd/patches/apply_to_1.2.1/msie_4_0b2_fixes.patch">
-    patch</a> against 1.2.1. 
-
-    <h3><a id="257th-byte" name="257th-byte">Boundary problems with
-    header parsing</a></h3>
-
-    <p>All versions of Navigator from 2.0 through 4.0b2 (and
-    possibly later) have a problem if the trailing CRLF of the
-    response header starts at offset 256, 257 or 258 of the
-    response. A BrowserMatch for this would match on nearly every
-    hit, so the workaround is enabled automatically on all
-    responses. The workaround implemented detects when this
-    condition would occur in a response and adds extra padding to
-    the header to push the trailing CRLF past offset 258 of the
-    response.</p>
-
-    <h3><a id="boundary-string" name="boundary-string">Multipart
-    responses and Quoted Boundary Strings</a></h3>
-
-    <p>On multipart responses some clients will not accept quotes
-    (") around the boundary string. The MIME standard recommends
-    that such quotes be used. But the clients were probably written
-    based on one of the examples in RFC2068, which does not include
-    quotes. Apache does not include quotes on its boundary strings
-    to workaround this problem.</p>
-
-    <h3><a id="byterange-requests"
-    name="byterange-requests">Byterange requests</a></h3>
-
-    <p>A byterange request is used when the client wishes to
-    retrieve a portion of an object, not necessarily the entire
-    object. There was a very old draft which included these
-    byteranges in the URL. Old clients such as Navigator 2.0b1 and
-    MSIE 3.0 for the MAC exhibit this behaviour, and it will appear
-    in the servers' access logs as (failed) attempts to retrieve a
-    URL with a trailing ";xxx-yyy". Apache does not attempt to
-    implement this at all.</p>
-
-    <p>A subsequent draft of this standard defines a header
-    <code>Request-Range</code>, and a response type
-    <code>multipart/x-byteranges</code>. The HTTP/1.1 standard
-    includes this draft with a few fixes, and it defines the header
-    <code>Range</code> and type
-    <code>multipart/byteranges</code>.</p>
-
-    <p>Navigator (versions 2 and 3) sends both <code>Range</code>
-    and <code>Request-Range</code> headers (with the same value),
-    but does not accept a <code>multipart/byteranges</code>
-    response. The response must be
-    <code>multipart/x-byteranges</code>. As a workaround, if Apache
-    receives a <code>Request-Range</code> header it considers it
-    "higher priority" than a <code>Range</code> header and in
-    response uses <code>multipart/x-byteranges</code>.</p>
-
-    <p>The Adobe Acrobat Reader plugin makes extensive use of
-    byteranges and prior to version 3.01 supports only the
-    <code>multipart/x-byterange</code> response. Unfortunately
-    there is no clue that it is the plugin making the request. If
-    the plugin is used with Navigator, the above workaround works
-    fine. But if the plugin is used with MSIE 3 (on Windows) the
-    workaround won't work because MSIE 3 doesn't give the
-    <code>Range-Request</code> clue that Navigator does. To
-    workaround this, Apache special cases "MSIE 3" in the
-    <code>User-Agent</code> and serves
-    <code>multipart/x-byteranges</code>. Note that the necessity
-    for this with MSIE 3 is actually due to the Acrobat plugin, not
-    due to the browser.</p>
-
-    <p>Netscape Communicator appears to not issue the non-standard
-    <code>Request-Range</code> header. When an Acrobat plugin prior
-    to version 3.01 is used with it, it will not properly
-    understand byteranges. The user must upgrade their Acrobat
-    reader to 3.01.</p>
-
-    <h3><a id="cookie-merge"
-    name="cookie-merge"><code>Set-Cookie</code> header is
-    unmergeable</a></h3>
-
-    <p>The HTTP specifications say that it is legal to merge
-    headers with duplicate names into one (separated by commas).
-    Some browsers that support Cookies don't like merged headers
-    and prefer that each <code>Set-Cookie</code> header is sent
-    separately. When parsing the headers returned by a CGI, Apache
-    will explicitly avoid merging any <code>Set-Cookie</code>
-    headers.</p>
-
-    <h3><a id="gif89-expires"
-    name="gif89-expires"><code>Expires</code> headers and GIF89A
-    animations</a></h3>
-
-    <p>Navigator versions 2 through 4 will erroneously re-request
-    GIF89A animations on each loop of the animation if the first
-    response included an <code>Expires</code> header. This happens
-    regardless of how far in the future the expiry time is set.
-    There is no workaround supplied with Apache, however there are
-    hacks for <a
-    href="http://www.arctic.org/~dgaudet/patches/apache-1.2-gif89-expires-hack.patch">
-    1.2</a> and for <a
-    href="http://www.arctic.org/~dgaudet/patches/apache-1.3-gif89-expires-hack.patch">
-    1.3</a>.</p>
-
-    <h3><a id="no-content-length"
-    name="no-content-length"><code>POST</code> without
-    <code>Content-Length</code></a></h3>
-
-    <p>In certain situations Navigator 3.01 through 3.03 appear to
-    incorrectly issue a POST without the request body. There is no
-    known workaround. It has been fixed in Navigator 3.04,
-    Netscapes provides some <a
-    href="http://help.netscape.com/kb/client/971014-42.html">information</a>.
-    There's also <a
-    href="http://www.arctic.org/~dgaudet/apache/no-content-length/">
-    some information</a> about the actual problem.</p>
-
-    <h3><a id="jdk-12-bugs" name="jdk-12-bugs">JDK 1.2 betas lose
-    parts of responses.</a></h3>
-
-    <p>The http client in the JDK1.2beta2 and beta3 will throw away
-    the first part of the response body when both the headers and
-    the first part of the body are sent in the same network packet
-    AND keep-alive's are being used. If either condition is not met
-    then it works fine.</p>
-
-    <p>See also Bug-ID's 4124329 and 4125538 at the java developer
-    connection.</p>
-
-    <p>If you are seeing this bug yourself, you can add the
-    following BrowserMatch directive to work around it:</p>
-
-    <blockquote>
-      <code>BrowserMatch "Java1\.2beta[23]" nokeepalive</code>
-    </blockquote>
-
-    <p>We don't advocate this though since bending over backwards
-    for beta software is usually not a good idea; ideally it gets
-    fixed, new betas or a final release comes out, and no one uses
-    the broken old software anymore. In theory.</p>
-
-    <h3><a id="content-type-persistence"
-    name="content-type-persistence"><code>Content-Type</code>
-    change is not noticed after reload</a></h3>
-
-    <p>Navigator (all versions?) will cache the
-    <code>content-type</code> for an object "forever". Using reload
-    or shift-reload will not cause Navigator to notice a
-    <code>content-type</code> change. The only work-around is for
-    the user to flush their caches (memory and disk). By way of an
-    example, some folks may be using an old <code>mime.types</code>
-    file which does not map <code>.htm</code> to
-    <code>text/html</code>, in this case Apache will default to
-    sending <code>text/plain</code>. If the user requests the page
-    and it is served as <code>text/plain</code>. After the admin
-    fixes the server, the user will have to flush their caches
-    before the object will be shown with the correct
-    <code>text/html</code> type.</p>
-
-    <h3><a id="msie-cookie-y2k" name="msie-cookie-y2k">MSIE Cookie
-    problem with expiry date in the year 2000</a></h3>
-
-    <p>MSIE versions 3.00 and 3.02 (without the Y2K patch) do not
-    handle cookie expiry dates in the year 2000 properly. Years
-    after 2000 and before 2000 work fine. This is fixed in IE4.01
-    service pack 1, and in the Y2K patch for IE3.02. Users should
-    avoid using expiry dates in the year 2000.</p>
-
-    <h3><a id="lynx-negotiate-trans"
-    name="lynx-negotiate-trans">Lynx incorrectly asking for
-    transparent content negotiation</a></h3>
-
-    <p>The Lynx browser versions 2.7 and 2.8 send a "negotiate:
-    trans" header in their requests, which is an indication the
-    browser supports transparent content negotiation (TCN). However
-    the browser does not support TCN. As of version 1.3.4, Apache
-    supports TCN, and this causes problems with these versions of
-    Lynx. As a workaround future versions of Apache will ignore
-    this header when sent by the Lynx client.</p>
-
-    <h3><a id="ie40-vary" name="ie40-vary">MSIE 4.0 mishandles Vary
-    response header</a></h3>
-
-    <p>MSIE 4.0 does not handle a Vary header properly. The Vary
-    header is generated by mod_rewrite in apache 1.3. The result is
-    an error from MSIE saying it cannot download the requested
-    file. There are more details in <a
-    href="http://bugs.apache.org/index/full/4118">PR#4118</a>.</p>
-
-    <p>A workaround is to add the following to your server's
-    configuration files:</p>
-<pre>
-    BrowserMatch "MSIE 4\.0" force-no-vary
-</pre>
-
-    <p>(This workaround is only available with releases
-    <strong>after</strong> 1.3.6 of the Apache Web server.)</p>
-    <!--#include virtual="footer.html" -->
-  </body>
-</html>
-
diff --git a/docs/manual/misc/perf-tuning.html b/docs/manual/misc/perf-tuning.html
deleted file mode 100644
index 6e0aea4..0000000
--- a/docs/manual/misc/perf-tuning.html
+++ /dev/null
@@ -1,1063 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta name="generator" content="HTML Tidy, see www.w3.org" />
-
-    <title>Apache Performance Notes</title>
-  </head>
-  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-
-  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-  vlink="#000080" alink="#FF0000">
-    <!--#include virtual="header.html" -->
-
-    <blockquote>
-      <strong>Warning:</strong> This document has not been updated
-      to take into account changes made in the 2.0 version of the
-      Apache HTTP Server. Some of the information may still be
-      relevant, but please use it with care.
-    </blockquote>
-
-    <h1 align="center">Apache Performance Notes</h1>
-
-    <p>Author: Dean Gaudet</p>
-
-    <ul>
-      <li><a href="#introduction">Introduction</a></li>
-
-      <li><a href="#hardware">Hardware and Operating System
-      Issues</a></li>
-
-      <li><a href="#runtime">Run-Time Configuration Issues</a></li>
-
-      <li><a href="#compiletime">Compile-Time Configuration
-      Issues</a></li>
-
-      <li>
-        Appendixes 
-
-        <ul>
-          <li><a href="#trace">Detailed Analysis of a
-          Trace</a></li>
-
-          <li><a href="#patches">Patches Available</a></li>
-
-          <li><a href="#preforking">The Pre-Forking Model</a></li>
-        </ul>
-      </li>
-    </ul>
-    <hr />
-
-    <table border="1">
-      <tr>
-        <td valign="top"><strong>Related Modules</strong><br />
-         <br />
-         <a href="../mod/mod_dir.html">mod_dir</a><br />
-         <a href="../mod/mpm_common.html">Multi-Processing
-        module</a><br />
-         <a href="../mod/mod_status.html">mod_status</a><br />
-         </td>
-
-        <td valign="top"><strong>Related Directives</strong><br />
-         <br />
-         <a
-        href="../mod/core.html#allowoverride">AllowOverride</a><br />
-         <a
-        href="../mod/mod_dir.html#directoryindex">DirectoryIndex</a><br />
-         <a
-        href="../mod/core.html#hostnamelookups">HostnameLookups</a><br />
-         <a
-        href="../mod/core.html#keepalivetimeout">KeepAliveTimeout</a><br />
-         <a
-        href="../mod/prefork.html#maxspareservers">MaxSpareServers</a><br />
-         <a
-        href="../mod/prefork.html#mixspareservers">MinSpareServers</a><br />
-         <a href="../mod/core.html#options">Options</a>
-        (FollowSymLinks and FollowIfOwnerMatch)<br />
-         <a
-        href="../mod/mpm_common.html#startservers">StartServers</a><br />
-         </td>
-      </tr>
-    </table>
-
-    <h3><a id="introduction"
-    name="introduction">Introduction</a></h3>
-
-    <p>Apache is a general webserver, which is designed to be
-    correct first, and fast second. Even so, its performance is
-    quite satisfactory. Most sites have less than 10Mbits of
-    outgoing bandwidth, which Apache can fill using only a low end
-    Pentium-based webserver. In practice sites with more bandwidth
-    require more than one machine to fill the bandwidth due to
-    other constraints (such as CGI or database transaction
-    overhead). For these reasons the development focus has been
-    mostly on correctness and configurability.</p>
-
-    <p>Unfortunately many folks overlook these facts and cite raw
-    performance numbers as if they are some indication of the
-    quality of a web server product. There is a bare minimum
-    performance that is acceptable, beyond that extra speed only
-    caters to a much smaller segment of the market. But in order to
-    avoid this hurdle to the acceptance of Apache in some markets,
-    effort was put into Apache 1.3 to bring performance up to a
-    point where the difference with other high-end webservers is
-    minimal.</p>
-
-    <p>Finally there are the folks who just plain want to see how
-    fast something can go. The author falls into this category. The
-    rest of this document is dedicated to these folks who want to
-    squeeze every last bit of performance out of Apache's current
-    model, and want to understand why it does some things which
-    slow it down.</p>
-
-    <p>Note that this is tailored towards Apache 1.3 on Unix. Some
-    of it applies to Apache on NT. Apache on NT has not been tuned
-    for performance yet; in fact it probably performs very poorly
-    because NT performance requires a different programming
-    model.</p>
-    <hr />
-
-    <h3><a id="hardware" name="hardware">Hardware and Operating
-    System Issues</a></h3>
-
-    <p>The single biggest hardware issue affecting webserver
-    performance is RAM. A webserver should never ever have to swap,
-    swapping increases the latency of each request beyond a point
-    that users consider "fast enough". This causes users to hit
-    stop and reload, further increasing the load. You can, and
-    should, control the <code>MaxClients</code> setting so that
-    your server does not spawn so many children it starts
-    swapping.</p>
-
-    <p>Beyond that the rest is mundane: get a fast enough CPU, a
-    fast enough network card, and fast enough disks, where "fast
-    enough" is something that needs to be determined by
-    experimentation.</p>
-
-    <p>Operating system choice is largely a matter of local
-    concerns. But a general guideline is to always apply the latest
-    vendor TCP/IP patches. HTTP serving completely breaks many of
-    the assumptions built into Unix kernels up through 1994 and
-    even 1995. Good choices include recent FreeBSD, and Linux.</p>
-    <hr />
-
-    <h3><a id="runtime" name="runtime">Run-Time Configuration
-    Issues</a></h3>
-
-    <h4>HostnameLookups</h4>
-
-    <p>Prior to Apache 1.3, <code>HostnameLookups</code> defaulted
-    to On. This adds latency to every request because it requires a
-    DNS lookup to complete before the request is finished. In
-    Apache 1.3 this setting defaults to Off. However (1.3 or
-    later), if you use any <code>Allow from domain</code> or
-    <code>Deny from domain</code> directives then you will pay for
-    a double reverse DNS lookup (a reverse, followed by a forward
-    to make sure that the reverse is not being spoofed). So for the
-    highest performance avoid using these directives (it's fine to
-    use IP addresses rather than domain names).</p>
-
-    <p>Note that it's possible to scope the directives, such as
-    within a <code>&lt;Location /server-status&gt;</code> section.
-    In this case the DNS lookups are only performed on requests
-    matching the criteria. Here's an example which disables lookups
-    except for .html and .cgi files:</p>
-
-    <blockquote>
-<pre>
-HostnameLookups off
-&lt;Files ~ "\.(html|cgi)$"&gt;
-    HostnameLookups on
-&lt;/Files&gt;
-</pre>
-    </blockquote>
-    But even still, if you just need DNS names in some CGIs you
-    could consider doing the <code>gethostbyname</code> call in the
-    specific CGIs that need it. 
-
-    <p>Similarly, if you need to have hostname information in your
-    server logs in order to generate reports of this information,
-    you can postprocess your log file with <a
-    href="../programs/logresolve.html">logresolve</a>, so that
-    these lookups can be done without making the client wait. It is
-    recommended that you do this postprocessing, and any other
-    statistical analysis of the log file, somewhere other than your
-    production web server machine, in order that this activity does
-    not adversely affect server performance.</p>
-
-    <h4>FollowSymLinks and SymLinksIfOwnerMatch</h4>
-
-    <p>Wherever in your URL-space you do not have an <code>Options
-    FollowSymLinks</code>, or you do have an <code>Options
-    SymLinksIfOwnerMatch</code> Apache will have to issue extra
-    system calls to check up on symlinks. One extra call per
-    filename component. For example, if you had:</p>
-
-    <blockquote>
-<pre>
-DocumentRoot /www/htdocs
-&lt;Directory /&gt;
-    Options SymLinksIfOwnerMatch
-&lt;/Directory&gt;
-</pre>
-    </blockquote>
-    and a request is made for the URI <code>/index.html</code>.
-    Then Apache will perform <code>lstat(2)</code> on
-    <code>/www</code>, <code>/www/htdocs</code>, and
-    <code>/www/htdocs/index.html</code>. The results of these
-    <code>lstats</code> are never cached, so they will occur on
-    every single request. If you really desire the symlinks
-    security checking you can do something like this: 
-
-    <blockquote>
-<pre>
-DocumentRoot /www/htdocs
-&lt;Directory /&gt;
-    Options FollowSymLinks
-&lt;/Directory&gt;
-&lt;Directory /www/htdocs&gt;
-    Options -FollowSymLinks +SymLinksIfOwnerMatch
-&lt;/Directory&gt;
-</pre>
-    </blockquote>
-    This at least avoids the extra checks for the
-    <code>DocumentRoot</code> path. Note that you'll need to add
-    similar sections if you have any <code>Alias</code> or
-    <code>RewriteRule</code> paths outside of your document root.
-    For highest performance, and no symlink protection, set
-    <code>FollowSymLinks</code> everywhere, and never set
-    <code>SymLinksIfOwnerMatch</code>. 
-
-    <h4>AllowOverride</h4>
-
-    <p>Wherever in your URL-space you allow overrides (typically
-    <code>.htaccess</code> files) Apache will attempt to open
-    <code>.htaccess</code> for each filename component. For
-    example,</p>
-
-    <blockquote>
-<pre>
-DocumentRoot /www/htdocs
-&lt;Directory /&gt;
-    AllowOverride all
-&lt;/Directory&gt;
-</pre>
-    </blockquote>
-    and a request is made for the URI <code>/index.html</code>.
-    Then Apache will attempt to open <code>/.htaccess</code>,
-    <code>/www/.htaccess</code>, and
-    <code>/www/htdocs/.htaccess</code>. The solutions are similar
-    to the previous case of <code>Options FollowSymLinks</code>.
-    For highest performance use <code>AllowOverride None</code>
-    everywhere in your filesystem. 
-
-    <h4>Negotiation</h4>
-
-    <p>If at all possible, avoid content-negotiation if you're
-    really interested in every last ounce of performance. In
-    practice the benefits of negotiation outweigh the performance
-    penalties. There's one case where you can speed up the server.
-    Instead of using a wildcard such as:</p>
-
-    <blockquote>
-<pre>
-DirectoryIndex index
-</pre>
-    </blockquote>
-    Use a complete list of options: 
-
-    <blockquote>
-<pre>
-DirectoryIndex index.cgi index.pl index.shtml index.html
-</pre>
-    </blockquote>
-    where you list the most common choice first. 
-
-    <p>Also note that explicitly creating a <code>type-map</code>
-    file provides better performance than using
-    <code>MultiViews</code>, as the necessary information can be
-    determined by reading this single file, rather than having to
-    scan the directory for files.</p>
-
-    <h4>Process Creation</h4>
-
-    <p>Prior to Apache 1.3 the <code>MinSpareServers</code>,
-    <code>MaxSpareServers</code>, and <code>StartServers</code>
-    settings all had drastic effects on benchmark results. In
-    particular, Apache required a "ramp-up" period in order to
-    reach a number of children sufficient to serve the load being
-    applied. After the initial spawning of
-    <code>StartServers</code> children, only one child per second
-    would be created to satisfy the <code>MinSpareServers</code>
-    setting. So a server being accessed by 100 simultaneous
-    clients, using the default <code>StartServers</code> of 5 would
-    take on the order 95 seconds to spawn enough children to handle
-    the load. This works fine in practice on real-life servers,
-    because they aren't restarted frequently. But does really
-    poorly on benchmarks which might only run for ten minutes.</p>
-
-    <p>The one-per-second rule was implemented in an effort to
-    avoid swamping the machine with the startup of new children. If
-    the machine is busy spawning children it can't service
-    requests. But it has such a drastic effect on the perceived
-    performance of Apache that it had to be replaced. As of Apache
-    1.3, the code will relax the one-per-second rule. It will spawn
-    one, wait a second, then spawn two, wait a second, then spawn
-    four, and it will continue exponentially until it is spawning
-    32 children per second. It will stop whenever it satisfies the
-    <code>MinSpareServers</code> setting.</p>
-
-    <p>This appears to be responsive enough that it's almost
-    unnecessary to twiddle the <code>MinSpareServers</code>,
-    <code>MaxSpareServers</code> and <code>StartServers</code>
-    knobs. When more than 4 children are spawned per second, a
-    message will be emitted to the <code>ErrorLog</code>. If you
-    see a lot of these errors then consider tuning these settings.
-    Use the <code>mod_status</code> output as a guide.</p>
-
-    <p>Related to process creation is process death induced by the
-    <code>MaxRequestsPerChild</code> setting. By default this is 0,
-    which means that there is no limit to the number of requests
-    handled per child. If your configuration currently has this set
-    to some very low number, such as 30, you may want to bump this
-    up significantly. If you are running SunOS or an old version of
-    Solaris, limit this to 10000 or so because of memory leaks.</p>
-
-    <p>When keep-alives are in use, children will be kept busy
-    doing nothing waiting for more requests on the already open
-    connection. The default <code>KeepAliveTimeout</code> of 15
-    seconds attempts to minimize this effect. The tradeoff here is
-    between network bandwidth and server resources. In no event
-    should you raise this above about 60 seconds, as <a
-    href="http://www.research.digital.com/wrl/techreports/abstracts/95.4.html">
-    most of the benefits are lost</a>.</p>
-    <hr />
-
-    <h3><a id="compiletime" name="compiletime">Compile-Time
-    Configuration Issues</a></h3>
-
-    <h4>mod_status and ExtendedStatus On</h4>
-
-    <p>If you include <code>mod_status</code> and you also set
-    <code>ExtendedStatus On</code> when building and running
-    Apache, then on every request Apache will perform two calls to
-    <code>gettimeofday(2)</code> (or <code>times(2)</code>
-    depending on your operating system), and (pre-1.3) several
-    extra calls to <code>time(2)</code>. This is all done so that
-    the status report contains timing indications. For highest
-    performance, set <code>ExtendedStatus off</code> (which is the
-    default).</p>
-
-    <h4>accept Serialization - multiple sockets</h4>
-
-    <p>This discusses a shortcoming in the Unix socket API. Suppose
-    your web server uses multiple <code>Listen</code> statements to
-    listen on either multiple ports or multiple addresses. In order
-    to test each socket to see if a connection is ready Apache uses
-    <code>select(2)</code>. <code>select(2)</code> indicates that a
-    socket has <em>zero</em> or <em>at least one</em> connection
-    waiting on it. Apache's model includes multiple children, and
-    all the idle ones test for new connections at the same time. A
-    naive implementation looks something like this (these examples
-    do not match the code, they're contrived for pedagogical
-    purposes):</p>
-
-    <blockquote>
-<pre>
-    for (;;) {
-    for (;;) {
-        fd_set accept_fds;
-
-        FD_ZERO (&amp;accept_fds);
-        for (i = first_socket; i &lt;= last_socket; ++i) {
-        FD_SET (i, &amp;accept_fds);
-        }
-        rc = select (last_socket+1, &amp;accept_fds, NULL, NULL, NULL);
-        if (rc &lt; 1) continue;
-        new_connection = -1;
-        for (i = first_socket; i &lt;= last_socket; ++i) {
-        if (FD_ISSET (i, &amp;accept_fds)) {
-            new_connection = accept (i, NULL, NULL);
-            if (new_connection != -1) break;
-        }
-        }
-        if (new_connection != -1) break;
-    }
-    process the new_connection;
-    }
-</pre>
-    </blockquote>
-    But this naive implementation has a serious starvation problem.
-    Recall that multiple children execute this loop at the same
-    time, and so multiple children will block at
-    <code>select</code> when they are in between requests. All
-    those blocked children will awaken and return from
-    <code>select</code> when a single request appears on any socket
-    (the number of children which awaken varies depending on the
-    operating system and timing issues). They will all then fall
-    down into the loop and try to <code>accept</code> the
-    connection. But only one will succeed (assuming there's still
-    only one connection ready), the rest will be <em>blocked</em>
-    in <code>accept</code>. This effectively locks those children
-    into serving requests from that one socket and no other
-    sockets, and they'll be stuck there until enough new requests
-    appear on that socket to wake them all up. This starvation
-    problem was first documented in <a
-    href="http://bugs.apache.org/index/full/467">PR#467</a>. There
-    are at least two solutions. 
-
-    <p>One solution is to make the sockets non-blocking. In this
-    case the <code>accept</code> won't block the children, and they
-    will be allowed to continue immediately. But this wastes CPU
-    time. Suppose you have ten idle children in
-    <code>select</code>, and one connection arrives. Then nine of
-    those children will wake up, try to <code>accept</code> the
-    connection, fail, and loop back into <code>select</code>,
-    accomplishing nothing. Meanwhile none of those children are
-    servicing requests that occurred on other sockets until they
-    get back up to the <code>select</code> again. Overall this
-    solution does not seem very fruitful unless you have as many
-    idle CPUs (in a multiprocessor box) as you have idle children,
-    not a very likely situation.</p>
-
-    <p>Another solution, the one used by Apache, is to serialize
-    entry into the inner loop. The loop looks like this
-    (differences highlighted):</p>
-
-    <blockquote>
-<pre>
-    for (;;) {
-    <strong>accept_mutex_on ();</strong>
-    for (;;) {
-        fd_set accept_fds;
-
-        FD_ZERO (&amp;accept_fds);
-        for (i = first_socket; i &lt;= last_socket; ++i) {
-        FD_SET (i, &amp;accept_fds);
-        }
-        rc = select (last_socket+1, &amp;accept_fds, NULL, NULL, NULL);
-        if (rc &lt; 1) continue;
-        new_connection = -1;
-        for (i = first_socket; i &lt;= last_socket; ++i) {
-        if (FD_ISSET (i, &amp;accept_fds)) {
-            new_connection = accept (i, NULL, NULL);
-            if (new_connection != -1) break;
-        }
-        }
-        if (new_connection != -1) break;
-    }
-    <strong>accept_mutex_off ();</strong>
-    process the new_connection;
-    }
-</pre>
-    </blockquote>
-    <a id="serialize" name="serialize">The functions</a>
-    <code>accept_mutex_on</code> and <code>accept_mutex_off</code>
-    implement a mutual exclusion semaphore. Only one child can have
-    the mutex at any time. There are several choices for
-    implementing these mutexes. The choice is defined in
-    <code>src/conf.h</code> (pre-1.3) or
-    <code>src/include/ap_config.h</code> (1.3 or later). Some
-    architectures do not have any locking choice made, on these
-    architectures it is unsafe to use multiple <code>Listen</code>
-    directives. 
-
-    <dl>
-      <dt><code>USE_FLOCK_SERIALIZED_ACCEPT</code></dt>
-
-      <dd>This method uses the <code>flock(2)</code> system call to
-      lock a lock file (located by the <code>LockFile</code>
-      directive).</dd>
-
-      <dt><code>USE_FCNTL_SERIALIZED_ACCEPT</code></dt>
-
-      <dd>This method uses the <code>fcntl(2)</code> system call to
-      lock a lock file (located by the <code>LockFile</code>
-      directive).</dd>
-
-      <dt><code>USE_SYSVSEM_SERIALIZED_ACCEPT</code></dt>
-
-      <dd>(1.3 or later) This method uses SysV-style semaphores to
-      implement the mutex. Unfortunately SysV-style semaphores have
-      some bad side-effects. One is that it's possible Apache will
-      die without cleaning up the semaphore (see the
-      <code>ipcs(8)</code> man page). The other is that the
-      semaphore API allows for a denial of service attack by any
-      CGIs running under the same uid as the webserver
-      (<em>i.e.</em>, all CGIs, unless you use something like
-      suexec or cgiwrapper). For these reasons this method is not
-      used on any architecture except IRIX (where the previous two
-      are prohibitively expensive on most IRIX boxes).</dd>
-
-      <dt><code>USE_USLOCK_SERIALIZED_ACCEPT</code></dt>
-
-      <dd>(1.3 or later) This method is only available on IRIX, and
-      uses <code>usconfig(2)</code> to create a mutex. While this
-      method avoids the hassles of SysV-style semaphores, it is not
-      the default for IRIX. This is because on single processor
-      IRIX boxes (5.3 or 6.2) the uslock code is two orders of
-      magnitude slower than the SysV-semaphore code. On
-      multi-processor IRIX boxes the uslock code is an order of
-      magnitude faster than the SysV-semaphore code. Kind of a
-      messed up situation. So if you're using a multiprocessor IRIX
-      box then you should rebuild your webserver with
-      <code>-DUSE_USLOCK_SERIALIZED_ACCEPT</code> on the
-      <code>EXTRA_CFLAGS</code>.</dd>
-
-      <dt><code>USE_PTHREAD_SERIALIZED_ACCEPT</code></dt>
-
-      <dd>(1.3 or later) This method uses POSIX mutexes and should
-      work on any architecture implementing the full POSIX threads
-      specification, however appears to only work on Solaris (2.5
-      or later), and even then only in certain configurations. If
-      you experiment with this you should watch out for your server
-      hanging and not responding. Static content only servers may
-      work just fine.</dd>
-    </dl>
-
-    <p>If your system has another method of serialization which
-    isn't in the above list then it may be worthwhile adding code
-    for it (and submitting a patch back to Apache).</p>
-
-    <p>Another solution that has been considered but never
-    implemented is to partially serialize the loop -- that is, let
-    in a certain number of processes. This would only be of
-    interest on multiprocessor boxes where it's possible multiple
-    children could run simultaneously, and the serialization
-    actually doesn't take advantage of the full bandwidth. This is
-    a possible area of future investigation, but priority remains
-    low because highly parallel web servers are not the norm.</p>
-
-    <p>Ideally you should run servers without multiple
-    <code>Listen</code> statements if you want the highest
-    performance. But read on.</p>
-
-    <h4>accept Serialization - single socket</h4>
-
-    <p>The above is fine and dandy for multiple socket servers, but
-    what about single socket servers? In theory they shouldn't
-    experience any of these same problems because all children can
-    just block in <code>accept(2)</code> until a connection
-    arrives, and no starvation results. In practice this hides
-    almost the same "spinning" behaviour discussed above in the
-    non-blocking solution. The way that most TCP stacks are
-    implemented, the kernel actually wakes up all processes blocked
-    in <code>accept</code> when a single connection arrives. One of
-    those processes gets the connection and returns to user-space,
-    the rest spin in the kernel and go back to sleep when they
-    discover there's no connection for them. This spinning is
-    hidden from the user-land code, but it's there nonetheless.
-    This can result in the same load-spiking wasteful behaviour
-    that a non-blocking solution to the multiple sockets case
-    can.</p>
-
-    <p>For this reason we have found that many architectures behave
-    more "nicely" if we serialize even the single socket case. So
-    this is actually the default in almost all cases. Crude
-    experiments under Linux (2.0.30 on a dual Pentium pro 166
-    w/128Mb RAM) have shown that the serialization of the single
-    socket case causes less than a 3% decrease in requests per
-    second over unserialized single-socket. But unserialized
-    single-socket showed an extra 100ms latency on each request.
-    This latency is probably a wash on long haul lines, and only an
-    issue on LANs. If you want to override the single socket
-    serialization you can define
-    <code>SINGLE_LISTEN_UNSERIALIZED_ACCEPT</code> and then
-    single-socket servers will not serialize at all.</p>
-
-    <h4>Lingering Close</h4>
-
-    <p>As discussed in <a
-    href="http://www.ics.uci.edu/pub/ietf/http/draft-ietf-http-connection-00.txt">
-    draft-ietf-http-connection-00.txt</a> section 8, in order for
-    an HTTP server to <strong>reliably</strong> implement the
-    protocol it needs to shutdown each direction of the
-    communication independently (recall that a TCP connection is
-    bi-directional, each half is independent of the other). This
-    fact is often overlooked by other servers, but is correctly
-    implemented in Apache as of 1.2.</p>
-
-    <p>When this feature was added to Apache it caused a flurry of
-    problems on various versions of Unix because of a
-    shortsightedness. The TCP specification does not state that the
-    FIN_WAIT_2 state has a timeout, but it doesn't prohibit it. On
-    systems without the timeout, Apache 1.2 induces many sockets
-    stuck forever in the FIN_WAIT_2 state. In many cases this can
-    be avoided by simply upgrading to the latest TCP/IP patches
-    supplied by the vendor. In cases where the vendor has never
-    released patches (<em>i.e.</em>, SunOS4 -- although folks with
-    a source license can patch it themselves) we have decided to
-    disable this feature.</p>
-
-    <p>There are two ways of accomplishing this. One is the socket
-    option <code>SO_LINGER</code>. But as fate would have it, this
-    has never been implemented properly in most TCP/IP stacks. Even
-    on those stacks with a proper implementation (<em>i.e.</em>,
-    Linux 2.0.31) this method proves to be more expensive (cputime)
-    than the next solution.</p>
-
-    <p>For the most part, Apache implements this in a function
-    called <code>lingering_close</code> (in
-    <code>http_main.c</code>). The function looks roughly like
-    this:</p>
-
-    <blockquote>
-<pre>
-    void lingering_close (int s)
-    {
-    char junk_buffer[2048];
-
-    /* shutdown the sending side */
-    shutdown (s, 1);
-
-    signal (SIGALRM, lingering_death);
-    alarm (30);
-
-    for (;;) {
-        select (s for reading, 2 second timeout);
-        if (error) break;
-        if (s is ready for reading) {
-        if (read (s, junk_buffer, sizeof (junk_buffer)) &lt;= 0) {
-            break;
-        }
-        /* just toss away whatever is here */
-        }
-    }
-
-    close (s);
-    }
-</pre>
-    </blockquote>
-    This naturally adds some expense at the end of a connection,
-    but it is required for a reliable implementation. As HTTP/1.1
-    becomes more prevalent, and all connections are persistent,
-    this expense will be amortized over more requests. If you want
-    to play with fire and disable this feature you can define
-    <code>NO_LINGCLOSE</code>, but this is not recommended at all.
-    In particular, as HTTP/1.1 pipelined persistent connections
-    come into use <code>lingering_close</code> is an absolute
-    necessity (and <a
-    href="http://www.w3.org/Protocols/HTTP/Performance/Pipeline.html">
-    pipelined connections are faster</a>, so you want to support
-    them). 
-
-    <h4>Scoreboard File</h4>
-
-    <p>Apache's parent and children communicate with each other
-    through something called the scoreboard. Ideally this should be
-    implemented in shared memory. For those operating systems that
-    we either have access to, or have been given detailed ports
-    for, it typically is implemented using shared memory. The rest
-    default to using an on-disk file. The on-disk file is not only
-    slow, but it is unreliable (and less featured). Peruse the
-    <code>src/main/conf.h</code> file for your architecture and
-    look for either <code>USE_MMAP_SCOREBOARD</code> or
-    <code>USE_SHMGET_SCOREBOARD</code>. Defining one of those two
-    (as well as their companions <code>HAVE_MMAP</code> and
-    <code>HAVE_SHMGET</code> respectively) enables the supplied
-    shared memory code. If your system has another type of shared
-    memory, edit the file <code>src/main/http_main.c</code> and add
-    the hooks necessary to use it in Apache. (Send us back a patch
-    too please.)</p>
-
-    <p>Historical note: The Linux port of Apache didn't start to
-    use shared memory until version 1.2 of Apache. This oversight
-    resulted in really poor and unreliable behaviour of earlier
-    versions of Apache on Linux.</p>
-
-    <h4><code>DYNAMIC_MODULE_LIMIT</code></h4>
-
-    <p>If you have no intention of using dynamically loaded modules
-    (you probably don't if you're reading this and tuning your
-    server for every last ounce of performance) then you should add
-    <code>-DDYNAMIC_MODULE_LIMIT=0</code> when building your
-    server. This will save RAM that's allocated only for supporting
-    dynamically loaded modules.</p>
-    <hr />
-
-    <h3><a id="trace" name="trace">Appendix: Detailed Analysis of a
-    Trace</a></h3>
-    Here is a system call trace of Apache 1.3 running on Linux. The
-    run-time configuration file is essentially the default plus: 
-
-    <blockquote>
-<pre>
-&lt;Directory /&gt;
-    AllowOverride none
-    Options FollowSymLinks
-&lt;/Directory&gt;
-</pre>
-    </blockquote>
-    The file being requested is a static 6K file of no particular
-    content. Traces of non-static requests or requests with content
-    negotiation look wildly different (and quite ugly in some
-    cases). First the entire trace, then we'll examine details.
-    (This was generated by the <code>strace</code> program, other
-    similar programs include <code>truss</code>,
-    <code>ktrace</code>, and <code>par</code>.) 
-
-    <blockquote>
-<pre>
-accept(15, {sin_family=AF_INET, sin_port=htons(22283), sin_addr=inet_addr("127.0.0.1")}, [16]) = 3
-flock(18, LOCK_UN)                      = 0
-sigaction(SIGUSR1, {SIG_IGN}, {0x8059954, [], SA_INTERRUPT}) = 0
-getsockname(3, {sin_family=AF_INET, sin_port=htons(8080), sin_addr=inet_addr("127.0.0.1")}, [16]) = 0
-setsockopt(3, IPPROTO_TCP1, [1], 4)     = 0
-read(3, "GET /6k HTTP/1.0\r\nUser-Agent: "..., 4096) = 60
-sigaction(SIGUSR1, {SIG_IGN}, {SIG_IGN}) = 0
-time(NULL)                              = 873959960
-gettimeofday({873959960, 404935}, NULL) = 0
-stat("/home/dgaudet/ap/apachen/htdocs/6k", {st_mode=S_IFREG|0644, st_size=6144, ...}) = 0
-open("/home/dgaudet/ap/apachen/htdocs/6k", O_RDONLY) = 4
-mmap(0, 6144, PROT_READ, MAP_PRIVATE, 4, 0) = 0x400ee000
-writev(3, [{"HTTP/1.1 200 OK\r\nDate: Thu, 11"..., 245}, {"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 6144}], 2) = 6389
-close(4)                                = 0
-time(NULL)                              = 873959960
-write(17, "127.0.0.1 - - [10/Sep/1997:23:39"..., 71) = 71
-gettimeofday({873959960, 417742}, NULL) = 0
-times({tms_utime=5, tms_stime=0, tms_cutime=0, tms_cstime=0}) = 446747
-shutdown(3, 1 /* send */)               = 0
-oldselect(4, [3], NULL, [3], {2, 0})    = 1 (in [3], left {2, 0})
-read(3, "", 2048)                       = 0
-close(3)                                = 0
-sigaction(SIGUSR1, {0x8059954, [], SA_INTERRUPT}, {SIG_IGN}) = 0
-munmap(0x400ee000, 6144)                = 0
-flock(18, LOCK_EX)                      = 0
-</pre>
-    </blockquote>
-
-    <p>Notice the accept serialization:</p>
-
-    <blockquote>
-<pre>
-flock(18, LOCK_UN)                      = 0
-...
-flock(18, LOCK_EX)                      = 0
-</pre>
-    </blockquote>
-    These two calls can be removed by defining
-    <code>SINGLE_LISTEN_UNSERIALIZED_ACCEPT</code> as described
-    earlier. 
-
-    <p>Notice the <code>SIGUSR1</code> manipulation:</p>
-
-    <blockquote>
-<pre>
-sigaction(SIGUSR1, {SIG_IGN}, {0x8059954, [], SA_INTERRUPT}) = 0
-...
-sigaction(SIGUSR1, {SIG_IGN}, {SIG_IGN}) = 0
-...
-sigaction(SIGUSR1, {0x8059954, [], SA_INTERRUPT}, {SIG_IGN}) = 0
-</pre>
-    </blockquote>
-    This is caused by the implementation of graceful restarts. When
-    the parent receives a <code>SIGUSR1</code> it sends a
-    <code>SIGUSR1</code> to all of its children (and it also
-    increments a "generation counter" in shared memory). Any
-    children that are idle (between connections) will immediately
-    die off when they receive the signal. Any children that are in
-    keep-alive connections, but are in between requests will die
-    off immediately. But any children that have a connection and
-    are still waiting for the first request will not die off
-    immediately. 
-
-    <p>To see why this is necessary, consider how a browser reacts
-    to a closed connection. If the connection was a keep-alive
-    connection and the request being serviced was not the first
-    request then the browser will quietly reissue the request on a
-    new connection. It has to do this because the server is always
-    free to close a keep-alive connection in between requests
-    (<em>i.e.</em>, due to a timeout or because of a maximum number
-    of requests). But, if the connection is closed before the first
-    response has been received the typical browser will display a
-    "document contains no data" dialogue (or a broken image icon).
-    This is done on the assumption that the server is broken in
-    some way (or maybe too overloaded to respond at all). So Apache
-    tries to avoid ever deliberately closing the connection before
-    it has sent a single response. This is the cause of those
-    <code>SIGUSR1</code> manipulations.</p>
-
-    <p>Note that it is theoretically possible to eliminate all
-    three of these calls. But in rough tests the gain proved to be
-    almost unnoticeable.</p>
-
-    <p>In order to implement virtual hosts, Apache needs to know
-    the local socket address used to accept the connection:</p>
-
-    <blockquote>
-<pre>
-getsockname(3, {sin_family=AF_INET, sin_port=htons(8080), sin_addr=inet_addr("127.0.0.1")}, [16]) = 0
-</pre>
-    </blockquote>
-    It is possible to eliminate this call in many situations (such
-    as when there are no virtual hosts, or when <code>Listen</code>
-    directives are used which do not have wildcard addresses). But
-    no effort has yet been made to do these optimizations. 
-
-    <p>Apache turns off the Nagle algorithm:</p>
-
-    <blockquote>
-<pre>
-setsockopt(3, IPPROTO_TCP1, [1], 4)     = 0
-</pre>
-    </blockquote>
-    because of problems described in <a
-    href="http://www.isi.edu/~johnh/PAPERS/Heidemann97a.html">a
-    paper by John Heidemann</a>. 
-
-    <p>Notice the two <code>time</code> calls:</p>
-
-    <blockquote>
-<pre>
-time(NULL)                              = 873959960
-...
-time(NULL)                              = 873959960
-</pre>
-    </blockquote>
-    One of these occurs at the beginning of the request, and the
-    other occurs as a result of writing the log. At least one of
-    these is required to properly implement the HTTP protocol. The
-    second occurs because the Common Log Format dictates that the
-    log record include a timestamp of the end of the request. A
-    custom logging module could eliminate one of the calls. Or you
-    can use a method which moves the time into shared memory, see
-    the <a href="#patches">patches section below</a>. 
-
-    <p>As described earlier, <code>ExtendedStatus On</code> causes
-    two <code>gettimeofday</code> calls and a call to
-    <code>times</code>:</p>
-
-    <blockquote>
-<pre>
-gettimeofday({873959960, 404935}, NULL) = 0
-...
-gettimeofday({873959960, 417742}, NULL) = 0
-times({tms_utime=5, tms_stime=0, tms_cutime=0, tms_cstime=0}) = 446747
-</pre>
-    </blockquote>
-    These can be removed by setting <code>ExtendedStatus Off</code>
-    (which is the default). 
-
-    <p>It might seem odd to call <code>stat</code>:</p>
-
-    <blockquote>
-<pre>
-stat("/home/dgaudet/ap/apachen/htdocs/6k", {st_mode=S_IFREG|0644, st_size=6144, ...}) = 0
-</pre>
-    </blockquote>
-    This is part of the algorithm which calculates the
-    <code>PATH_INFO</code> for use by CGIs. In fact if the request
-    had been for the URI <code>/cgi-bin/printenv/foobar</code> then
-    there would be two calls to <code>stat</code>. The first for
-    <code>/home/dgaudet/ap/apachen/cgi-bin/printenv/foobar</code>
-    which does not exist, and the second for
-    <code>/home/dgaudet/ap/apachen/cgi-bin/printenv</code>, which
-    does exist. Regardless, at least one <code>stat</code> call is
-    necessary when serving static files because the file size and
-    modification times are used to generate HTTP headers (such as
-    <code>Content-Length</code>, <code>Last-Modified</code>) and
-    implement protocol features (such as
-    <code>If-Modified-Since</code>). A somewhat more clever server
-    could avoid the <code>stat</code> when serving non-static
-    files, however doing so in Apache is very difficult given the
-    modular structure. 
-
-    <p>All static files are served using <code>mmap</code>:</p>
-
-    <blockquote>
-<pre>
-mmap(0, 6144, PROT_READ, MAP_PRIVATE, 4, 0) = 0x400ee000
-...
-munmap(0x400ee000, 6144)                = 0
-</pre>
-    </blockquote>
-    On some architectures it's slower to <code>mmap</code> small
-    files than it is to simply <code>read</code> them. The define
-    <code>MMAP_THRESHOLD</code> can be set to the minimum size
-    required before using <code>mmap</code>. By default it's set to
-    0 (except on SunOS4 where experimentation has shown 8192 to be
-    a better value). Using a tool such as <a
-    href="http://www.bitmover.com/lmbench/">lmbench</a> you can
-    determine the optimal setting for your environment. 
-
-    <p>You may also wish to experiment with
-    <code>MMAP_SEGMENT_SIZE</code> (default 32768) which determines
-    the maximum number of bytes that will be written at a time from
-    mmap()d files. Apache only resets the client's
-    <code>Timeout</code> in between write()s. So setting this large
-    may lock out low bandwidth clients unless you also increase the
-    <code>Timeout</code>.</p>
-
-    <p>It may even be the case that <code>mmap</code> isn't used on
-    your architecture; if so then defining
-    <code>USE_MMAP_FILES</code> and <code>HAVE_MMAP</code> might
-    work (if it works then report back to us).</p>
-
-    <p>Apache does its best to avoid copying bytes around in
-    memory. The first write of any request typically is turned into
-    a <code>writev</code> which combines both the headers and the
-    first hunk of data:</p>
-
-    <blockquote>
-<pre>
-writev(3, [{"HTTP/1.1 200 OK\r\nDate: Thu, 11"..., 245}, {"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 6144}], 2) = 6389
-</pre>
-    </blockquote>
-    When doing HTTP/1.1 chunked encoding Apache will generate up to
-    four element <code>writev</code>s. The goal is to push the byte
-    copying into the kernel, where it typically has to happen
-    anyhow (to assemble network packets). On testing, various
-    Unixes (BSDI 2.x, Solaris 2.5, Linux 2.0.31+) properly combine
-    the elements into network packets. Pre-2.0.31 Linux will not
-    combine, and will create a packet for each element, so
-    upgrading is a good idea. Defining <code>NO_WRITEV</code> will
-    disable this combining, but result in very poor chunked
-    encoding performance. 
-
-    <p>The log write:</p>
-
-    <blockquote>
-<pre>
-write(17, "127.0.0.1 - - [10/Sep/1997:23:39"..., 71) = 71
-</pre>
-    </blockquote>
-    can be deferred by defining <code>BUFFERED_LOGS</code>. In this
-    case up to <code>PIPE_BUF</code> bytes (a POSIX defined
-    constant) of log entries are buffered before writing. At no
-    time does it split a log entry across a <code>PIPE_BUF</code>
-    boundary because those writes may not be atomic.
-    (<em>i.e.</em>, entries from multiple children could become
-    mixed together). The code does its best to flush this buffer
-    when a child dies. 
-
-    <p>The lingering close code causes four system calls:</p>
-
-    <blockquote>
-<pre>
-shutdown(3, 1 /* send */)               = 0
-oldselect(4, [3], NULL, [3], {2, 0})    = 1 (in [3], left {2, 0})
-read(3, "", 2048)                       = 0
-close(3)                                = 0
-</pre>
-    </blockquote>
-    which were described earlier. 
-
-    <p>Let's apply some of these optimizations:
-    <code>-DSINGLE_LISTEN_UNSERIALIZED_ACCEPT
-    -DBUFFERED_LOGS</code> and <code>ExtendedStatus Off</code>.
-    Here's the final trace:</p>
-
-    <blockquote>
-<pre>
-accept(15, {sin_family=AF_INET, sin_port=htons(22286), sin_addr=inet_addr("127.0.0.1")}, [16]) = 3
-sigaction(SIGUSR1, {SIG_IGN}, {0x8058c98, [], SA_INTERRUPT}) = 0
-getsockname(3, {sin_family=AF_INET, sin_port=htons(8080), sin_addr=inet_addr("127.0.0.1")}, [16]) = 0
-setsockopt(3, IPPROTO_TCP1, [1], 4)     = 0
-read(3, "GET /6k HTTP/1.0\r\nUser-Agent: "..., 4096) = 60
-sigaction(SIGUSR1, {SIG_IGN}, {SIG_IGN}) = 0
-time(NULL)                              = 873961916
-stat("/home/dgaudet/ap/apachen/htdocs/6k", {st_mode=S_IFREG|0644, st_size=6144, ...}) = 0
-open("/home/dgaudet/ap/apachen/htdocs/6k", O_RDONLY) = 4
-mmap(0, 6144, PROT_READ, MAP_PRIVATE, 4, 0) = 0x400e3000
-writev(3, [{"HTTP/1.1 200 OK\r\nDate: Thu, 11"..., 245}, {"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 6144}], 2) = 6389
-close(4)                                = 0
-time(NULL)                              = 873961916
-shutdown(3, 1 /* send */)               = 0
-oldselect(4, [3], NULL, [3], {2, 0})    = 1 (in [3], left {2, 0})
-read(3, "", 2048)                       = 0
-close(3)                                = 0
-sigaction(SIGUSR1, {0x8058c98, [], SA_INTERRUPT}, {SIG_IGN}) = 0
-munmap(0x400e3000, 6144)                = 0
-</pre>
-    </blockquote>
-    That's 19 system calls, of which 4 remain relatively easy to
-    remove, but don't seem worth the effort. 
-
-    <h3><a id="patches" name="patches">Appendix: Patches
-    Available</a></h3>
-    There are <a
-    href="http://www.arctic.org/~dgaudet/apache/1.3/">several
-    performance patches available for 1.3.</a> Although they may
-    not apply cleanly to the current version, it shouldn't be
-    difficult for someone with a little C knowledge to update them.
-    In particular: 
-
-    <ul>
-      <li>A <a
-      href="http://www.arctic.org/~dgaudet/apache/1.3/shared_time.patch">
-      patch</a> to remove all <code>time(2)</code> system
-      calls.</li>
-
-      <li>A <a
-      href="http://www.arctic.org/~dgaudet/apache/1.3/mod_include_speedups.patch">
-      patch</a> to remove various system calls from
-      <code>mod_include</code>, these calls are used by few sites
-      but required for backwards compatibility.</li>
-
-      <li>A <a
-      href="http://www.arctic.org/~dgaudet/apache/1.3/top_fuel.patch">
-      patch</a> which integrates the above two plus a few other
-      speedups at the cost of removing some functionality.</li>
-    </ul>
-
-    <h3><a id="preforking" name="preforking">Appendix: The
-    Pre-Forking Model</a></h3>
-
-    <p>Apache (on Unix) is a <em>pre-forking</em> model server. The
-    <em>parent</em> process is responsible only for forking
-    <em>child</em> processes, it does not serve any requests or
-    service any network sockets. The child processes actually
-    process connections, they serve multiple connections (one at a
-    time) before dying. The parent spawns new or kills off old
-    children in response to changes in the load on the server (it
-    does so by monitoring a scoreboard which the children keep up
-    to date).</p>
-
-    <p>This model for servers offers a robustness that other models
-    do not. In particular, the parent code is very simple, and with
-    a high degree of confidence the parent will continue to do its
-    job without error. The children are complex, and when you add
-    in third party code via modules, you risk segmentation faults
-    and other forms of corruption. Even should such a thing happen,
-    it only affects one connection and the server continues serving
-    requests. The parent quickly replaces the dead child.</p>
-
-    <p>Pre-forking is also very portable across dialects of Unix.
-    Historically this has been an important goal for Apache, and it
-    continues to remain so.</p>
-
-    <p>The pre-forking model comes under criticism for various
-    performance aspects. Of particular concern are the overhead of
-    forking a process, the overhead of context switches between
-    processes, and the memory overhead of having multiple
-    processes. Furthermore it does not offer as many opportunities
-    for data-caching between requests (such as a pool of
-    <code>mmapped</code> files). Various other models exist and
-    extensive analysis can be found in the <a
-    href="http://www.cs.wustl.edu/~jxh/research/research.html">papers
-    of the JAWS project</a>. In practice all of these costs vary
-    drastically depending on the operating system.</p>
-
-    <p>Apache's core code is already multithread aware, and Apache
-    version 1.3 is multithreaded on NT. There have been at least
-    two other experimental implementations of threaded Apache, one
-    using the 1.3 code base on DCE, and one using a custom
-    user-level threads package and the 1.0 code base; neither is
-    publicly available. There is also an experimental port of
-    Apache 1.3 to <a
-    href="http://www.mozilla.org/docs/refList/refNSPR/">Netscape's
-    Portable Run Time</a>, which <a
-    href="http://www.arctic.org/~dgaudet/apache/2.0/">is
-    available</a> (but you're encouraged to join the <a
-    href="http://dev.apache.org/mailing-lists">new-httpd mailing
-    list</a> if you intend to use it). Part of our redesign for
-    version 2.0 of Apache will include abstractions of the server
-    model so that we can continue to support the pre-forking model,
-    and also support various threaded models. 
-    <!--#include virtual="footer.html" -->
-    </p>
-  </body>
-</html>
-
diff --git a/docs/manual/misc/rewriteguide.html b/docs/manual/misc/rewriteguide.html
deleted file mode 100644
index edfe49c..0000000
--- a/docs/manual/misc/rewriteguide.html
+++ /dev/null
@@ -1,2360 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta name="generator" content="HTML Tidy, see www.w3.org" />
-
-    <title>Apache 1.3 URL Rewriting Guide</title>
-  </head>
-  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-
-  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-  vlink="#000080" alink="#FF0000">
-    <blockquote>
-      <!--#include virtual="header.html" -->
-
-      <div align="CENTER">
-        <h1>Apache 1.3<br />
-         URL Rewriting Guide<br />
-        </h1>
-
-        <address>
-          Originally written by<br />
-           Ralf S. Engelschall &lt;rse@apache.org&gt;<br />
-           December 1997
-        </address>
-      </div>
-
-      <p>This document supplements the mod_rewrite <a
-      href="../mod/mod_rewrite.html">reference documentation</a>.
-      It describes how one can use Apache's mod_rewrite to solve
-      typical URL-based problems webmasters are usually confronted
-      with in practice. I give detailed descriptions on how to
-      solve each problem by configuring URL rewriting rulesets.</p>
-
-      <h2><a id="ToC1" name="ToC1">Introduction to
-      mod_rewrite</a></h2>
-      The Apache module mod_rewrite is a killer one, i.e. it is a
-      really sophisticated module which provides a powerful way to
-      do URL manipulations. With it you can nearly do all types of
-      URL manipulations you ever dreamed about. The price you have
-      to pay is to accept complexity, because mod_rewrite's major
-      drawback is that it is not easy to understand and use for the
-      beginner. And even Apache experts sometimes discover new
-      aspects where mod_rewrite can help. 
-
-      <p>In other words: With mod_rewrite you either shoot yourself
-      in the foot the first time and never use it again or love it
-      for the rest of your life because of its power. This paper
-      tries to give you a few initial success events to avoid the
-      first case by presenting already invented solutions to
-      you.</p>
-
-      <h2><a id="ToC2" name="ToC2">Practical Solutions</a></h2>
-      Here come a lot of practical solutions I've either invented
-      myself or collected from other peoples solutions in the past.
-      Feel free to learn the black magic of URL rewriting from
-      these examples. 
-
-      <table bgcolor="#FFE0E0" border="0" cellspacing="0"
-      cellpadding="5">
-        <tr>
-          <td>ATTENTION: Depending on your server-configuration it
-          can be necessary to slightly change the examples for your
-          situation, e.g. adding the [PT] flag when additionally
-          using mod_alias and mod_userdir, etc. Or rewriting a
-          ruleset to fit in <code>.htaccess</code> context instead
-          of per-server context. Always try to understand what a
-          particular ruleset really does before you use it. It
-          avoid problems.</td>
-        </tr>
-      </table>
-
-      <h1>URL Layout</h1>
-
-      <h2>Canonical URLs</h2>
-
-      <dl>
-        <dt><strong>Description:</strong></dt>
-
-        <dd>On some webservers there are more than one URL for a
-        resource. Usually there are canonical URLs (which should be
-        actually used and distributed) and those which are just
-        shortcuts, internal ones, etc. Independed which URL the
-        user supplied with the request he should finally see the
-        canonical one only.</dd>
-
-        <dt><strong>Solution:</strong></dt>
-
-        <dd>
-          We do an external HTTP redirect for all non-canonical
-          URLs to fix them in the location view of the Browser and
-          for all subsequent requests. In the example ruleset below
-          we replace <code>/~user</code> by the canonical
-          <code>/u/user</code> and fix a missing trailing slash for
-          <code>/u/user</code>. 
-
-          <table bgcolor="#E0E5F5" border="0" cellspacing="0"
-          cellpadding="5">
-            <tr>
-              <td>
-<pre>
-RewriteRule   ^/<strong>~</strong>([^/]+)/?(.*)    /<strong>u</strong>/$1/$2  [<strong>R</strong>]
-RewriteRule   ^/([uge])/(<strong>[^/]+</strong>)$  /$1/$2<strong>/</strong>   [<strong>R</strong>]
-</pre>
-              </td>
-            </tr>
-          </table>
-        </dd>
-      </dl>
-
-      <h2>Canonical Hostnames</h2>
-
-      <dl>
-        <dt><strong>Description:</strong></dt>
-
-        <dd>...</dd>
-
-        <dt><strong>Solution:</strong></dt>
-
-        <dd>
-          <table bgcolor="#E0E5F5" border="0" cellspacing="0"
-          cellpadding="5">
-            <tr>
-              <td>
-<pre>
-RewriteCond %{HTTP_HOST}   !^fully\.qualified\.domain\.name [NC]
-RewriteCond %{HTTP_HOST}   !^$
-RewriteCond %{SERVER_PORT} !^80$
-RewriteRule ^/(.*)         http://fully.qualified.domain.name:%{SERVER_PORT}/$1 [L,R]
-RewriteCond %{HTTP_HOST}   !^fully\.qualified\.domain\.name [NC]
-RewriteCond %{HTTP_HOST}   !^$
-RewriteRule ^/(.*)         http://fully.qualified.domain.name/$1 [L,R]
-</pre>
-              </td>
-            </tr>
-          </table>
-        </dd>
-      </dl>
-
-      <h2>Moved DocumentRoot</h2>
-
-      <dl>
-        <dt><strong>Description:</strong></dt>
-
-        <dd>Usually the DocumentRoot of the webserver directly
-        relates to the URL ``<code>/</code>''. But often this data
-        is not really of top-level priority, it is perhaps just one
-        entity of a lot of data pools. For instance at our Intranet
-        sites there are <code>/e/www/</code> (the homepage for
-        WWW), <code>/e/sww/</code> (the homepage for the Intranet)
-        etc. Now because the data of the DocumentRoot stays at
-        <code>/e/www/</code> we had to make sure that all inlined
-        images and other stuff inside this data pool work for
-        subsequent requests.</dd>
-
-        <dt><strong>Solution:</strong></dt>
-
-        <dd>
-          We just redirect the URL <code>/</code> to
-          <code>/e/www/</code>. While is seems trivial it is
-          actually trivial with mod_rewrite, only. Because the
-          typical old mechanisms of URL <em>Aliases</em> (as
-          provides by mod_alias and friends) only used
-          <em>prefix</em> matching. With this you cannot do such a
-          redirection because the DocumentRoot is a prefix of all
-          URLs. With mod_rewrite it is really trivial: 
-
-          <table bgcolor="#E0E5F5" border="0" cellspacing="0"
-          cellpadding="5">
-            <tr>
-              <td>
-<pre>
-RewriteEngine on
-RewriteRule   <strong>^/$</strong>  /e/www/  [<strong>R</strong>]
-</pre>
-              </td>
-            </tr>
-          </table>
-        </dd>
-      </dl>
-
-      <h2>Trailing Slash Problem</h2>
-
-      <dl>
-        <dt><strong>Description:</strong></dt>
-
-        <dd>Every webmaster can sing a song about the problem of
-        the trailing slash on URLs referencing directories. If they
-        are missing, the server dumps an error, because if you say
-        <code>/~quux/foo</code> instead of <code>/~quux/foo/</code>
-        then the server searches for a <em>file</em> named
-        <code>foo</code>. And because this file is a directory it
-        complains. Actually is tries to fix it themself in most of
-        the cases, but sometimes this mechanism need to be emulated
-        by you. For instance after you have done a lot of
-        complicated URL rewritings to CGI scripts etc.</dd>
-
-        <dt><strong>Solution:</strong></dt>
-
-        <dd>
-          The solution to this subtle problem is to let the server
-          add the trailing slash automatically. To do this
-          correctly we have to use an external redirect, so the
-          browser correctly requests subsequent images etc. If we
-          only did a internal rewrite, this would only work for the
-          directory page, but would go wrong when any images are
-          included into this page with relative URLs, because the
-          browser would request an in-lined object. For instance, a
-          request for <code>image.gif</code> in
-          <code>/~quux/foo/index.html</code> would become
-          <code>/~quux/image.gif</code> without the external
-          redirect! 
-
-          <p>So, to do this trick we write:</p>
-
-          <table bgcolor="#E0E5F5" border="0" cellspacing="0"
-          cellpadding="5">
-            <tr>
-              <td>
-<pre>
-RewriteEngine  on
-RewriteBase    /~quux/
-RewriteRule    ^foo<strong>$</strong>  foo<strong>/</strong>  [<strong>R</strong>]
-</pre>
-              </td>
-            </tr>
-          </table>
-
-          <p>The crazy and lazy can even do the following in the
-          top-level <code>.htaccess</code> file of their homedir.
-          But notice that this creates some processing
-          overhead.</p>
-
-          <table bgcolor="#E0E5F5" border="0" cellspacing="0"
-          cellpadding="5">
-            <tr>
-              <td>
-<pre>
-RewriteEngine  on
-RewriteBase    /~quux/
-RewriteCond    %{REQUEST_FILENAME}  <strong>-d</strong>
-RewriteRule    ^(.+<strong>[^/]</strong>)$           $1<strong>/</strong>  [R]
-</pre>
-              </td>
-            </tr>
-          </table>
-        </dd>
-      </dl>
-
-      <h2>Webcluster through Homogeneous URL Layout</h2>
-
-      <dl>
-        <dt><strong>Description:</strong></dt>
-
-        <dd>We want to create a homogenous and consistent URL
-        layout over all WWW servers on a Intranet webcluster, i.e.
-        all URLs (per definition server local and thus server
-        dependent!) become actually server <em>independed</em>!
-        What we want is to give the WWW namespace a consistent
-        server-independend layout: no URL should have to include
-        any physically correct target server. The cluster itself
-        should drive us automatically to the physical target
-        host.</dd>
-
-        <dt><strong>Solution:</strong></dt>
-
-        <dd>
-          First, the knowledge of the target servers come from
-          (distributed) external maps which contain information
-          where our users, groups and entities stay. The have the
-          form 
-<pre>
-user1  server_of_user1
-user2  server_of_user2
-:      :
-</pre>
-
-          <p>We put them into files <code>map.xxx-to-host</code>.
-          Second we need to instruct all servers to redirect URLs
-          of the forms</p>
-<pre>
-/u/user/anypath
-/g/group/anypath
-/e/entity/anypath
-</pre>
-
-          <p>to</p>
-<pre>
-http://physical-host/u/user/anypath
-http://physical-host/g/group/anypath
-http://physical-host/e/entity/anypath
-</pre>
-
-          <p>when the URL is not locally valid to a server. The
-          following ruleset does this for us by the help of the map
-          files (assuming that server0 is a default server which
-          will be used if a user has no entry in the map):</p>
-
-          <table bgcolor="#E0E5F5" border="0" cellspacing="0"
-          cellpadding="5">
-            <tr>
-              <td>
-<pre>
-RewriteEngine on
-
-RewriteMap      user-to-host   txt:/path/to/map.user-to-host
-RewriteMap     group-to-host   txt:/path/to/map.group-to-host
-RewriteMap    entity-to-host   txt:/path/to/map.entity-to-host
-
-RewriteRule   ^/u/<strong>([^/]+)</strong>/?(.*)   http://<strong>${user-to-host:$1|server0}</strong>/u/$1/$2
-RewriteRule   ^/g/<strong>([^/]+)</strong>/?(.*)  http://<strong>${group-to-host:$1|server0}</strong>/g/$1/$2
-RewriteRule   ^/e/<strong>([^/]+)</strong>/?(.*) http://<strong>${entity-to-host:$1|server0}</strong>/e/$1/$2
-
-RewriteRule   ^/([uge])/([^/]+)/?$          /$1/$2/.www/
-RewriteRule   ^/([uge])/([^/]+)/([^.]+.+)   /$1/$2/.www/$3\
-</pre>
-              </td>
-            </tr>
-          </table>
-        </dd>
-      </dl>
-
-      <h2>Move Homedirs to Different Webserver</h2>
-
-      <dl>
-        <dt><strong>Description:</strong></dt>
-
-        <dd>A lot of webmaster aksed for a solution to the
-        following situation: They wanted to redirect just all
-        homedirs on a webserver to another webserver. They usually
-        need such things when establishing a newer webserver which
-        will replace the old one over time.</dd>
-
-        <dt><strong>Solution:</strong></dt>
-
-        <dd>
-          The solution is trivial with mod_rewrite. On the old
-          webserver we just redirect all
-          <code>/~user/anypath</code> URLs to
-          <code>http://newserver/~user/anypath</code>. 
-
-          <table bgcolor="#E0E5F5" border="0" cellspacing="0"
-          cellpadding="5">
-            <tr>
-              <td>
-<pre>
-RewriteEngine on
-RewriteRule   ^/~(.+)  http://<strong>newserver</strong>/~$1  [R,L]
-</pre>
-              </td>
-            </tr>
-          </table>
-        </dd>
-      </dl>
-
-      <h2>Structured Homedirs</h2>
-
-      <dl>
-        <dt><strong>Description:</strong></dt>
-
-        <dd>Some sites with thousend of users usually use a
-        structured homedir layout, i.e. each homedir is in a
-        subdirectory which begins for instance with the first
-        character of the username. So, <code>/~foo/anypath</code>
-        is <code>/home/<strong>f</strong>/foo/.www/anypath</code>
-        while <code>/~bar/anypath</code> is
-        <code>/home/<strong>b</strong>/bar/.www/anypath</code>.</dd>
-
-        <dt><strong>Solution:</strong></dt>
-
-        <dd>
-          We use the following ruleset to expand the tilde URLs
-          into exactly the above layout. 
-
-          <table bgcolor="#E0E5F5" border="0" cellspacing="0"
-          cellpadding="5">
-            <tr>
-              <td>
-<pre>
-RewriteEngine on
-RewriteRule   ^/~(<strong>([a-z])</strong>[a-z0-9]+)(.*)  /home/<strong>$2</strong>/$1/.www$3
-</pre>
-              </td>
-            </tr>
-          </table>
-        </dd>
-      </dl>
-
-      <h2>Filesystem Reorganisation</h2>
-
-      <dl>
-        <dt><strong>Description:</strong></dt>
-
-        <dd>
-          This really is a hardcore example: a killer application
-          which heavily uses per-directory
-          <code>RewriteRules</code> to get a smooth look and feel
-          on the Web while its data structure is never touched or
-          adjusted. Background: <strong><em>net.sw</em></strong> is
-          my archive of freely available Unix software packages,
-          which I started to collect in 1992. It is both my hobby
-          and job to to this, because while I'm studying computer
-          science I have also worked for many years as a system and
-          network administrator in my spare time. Every week I need
-          some sort of software so I created a deep hierarchy of
-          directories where I stored the packages: 
-<pre>
-drwxrwxr-x   2 netsw  users    512 Aug  3 18:39 Audio/
-drwxrwxr-x   2 netsw  users    512 Jul  9 14:37 Benchmark/
-drwxrwxr-x  12 netsw  users    512 Jul  9 00:34 Crypto/
-drwxrwxr-x   5 netsw  users    512 Jul  9 00:41 Database/
-drwxrwxr-x   4 netsw  users    512 Jul 30 19:25 Dicts/
-drwxrwxr-x  10 netsw  users    512 Jul  9 01:54 Graphic/
-drwxrwxr-x   5 netsw  users    512 Jul  9 01:58 Hackers/
-drwxrwxr-x   8 netsw  users    512 Jul  9 03:19 InfoSys/
-drwxrwxr-x   3 netsw  users    512 Jul  9 03:21 Math/
-drwxrwxr-x   3 netsw  users    512 Jul  9 03:24 Misc/
-drwxrwxr-x   9 netsw  users    512 Aug  1 16:33 Network/
-drwxrwxr-x   2 netsw  users    512 Jul  9 05:53 Office/
-drwxrwxr-x   7 netsw  users    512 Jul  9 09:24 SoftEng/
-drwxrwxr-x   7 netsw  users    512 Jul  9 12:17 System/
-drwxrwxr-x  12 netsw  users    512 Aug  3 20:15 Typesetting/
-drwxrwxr-x  10 netsw  users    512 Jul  9 14:08 X11/
-</pre>
-
-          <p>In July 1996 I decided to make this archive public to
-          the world via a nice Web interface. "Nice" means that I
-          wanted to offer an interface where you can browse
-          directly through the archive hierarchy. And "nice" means
-          that I didn't wanted to change anything inside this
-          hierarchy - not even by putting some CGI scripts at the
-          top of it. Why? Because the above structure should be
-          later accessible via FTP as well, and I didn't want any
-          Web or CGI stuff to be there.</p>
-        </dd>
-
-        <dt><strong>Solution:</strong></dt>
-
-        <dd>
-          The solution has two parts: The first is a set of CGI
-          scripts which create all the pages at all directory
-          levels on-the-fly. I put them under
-          <code>/e/netsw/.www/</code> as follows: 
-<pre>
--rw-r--r--   1 netsw  users    1318 Aug  1 18:10 .wwwacl
-drwxr-xr-x  18 netsw  users     512 Aug  5 15:51 DATA/
--rw-rw-rw-   1 netsw  users  372982 Aug  5 16:35 LOGFILE
--rw-r--r--   1 netsw  users     659 Aug  4 09:27 TODO
--rw-r--r--   1 netsw  users    5697 Aug  1 18:01 netsw-about.html
--rwxr-xr-x   1 netsw  users     579 Aug  2 10:33 netsw-access.pl
--rwxr-xr-x   1 netsw  users    1532 Aug  1 17:35 netsw-changes.cgi
--rwxr-xr-x   1 netsw  users    2866 Aug  5 14:49 netsw-home.cgi
-drwxr-xr-x   2 netsw  users     512 Jul  8 23:47 netsw-img/
--rwxr-xr-x   1 netsw  users   24050 Aug  5 15:49 netsw-lsdir.cgi
--rwxr-xr-x   1 netsw  users    1589 Aug  3 18:43 netsw-search.cgi
--rwxr-xr-x   1 netsw  users    1885 Aug  1 17:41 netsw-tree.cgi
--rw-r--r--   1 netsw  users     234 Jul 30 16:35 netsw-unlimit.lst
-</pre>
-
-          <p>The <code>DATA/</code> subdirectory holds the above
-          directory structure, i.e. the real
-          <strong><em>net.sw</em></strong> stuff and gets
-          automatically updated via <code>rdist</code> from time to
-          time. The second part of the problem remains: how to link
-          these two structures together into one smooth-looking URL
-          tree? We want to hide the <code>DATA/</code> directory
-          from the user while running the appropriate CGI scripts
-          for the various URLs. Here is the solution: first I put
-          the following into the per-directory configuration file
-          in the Document Root of the server to rewrite the
-          announced URL <code>/net.sw/</code> to the internal path
-          <code>/e/netsw</code>:</p>
-
-          <table bgcolor="#E0E5F5" border="0" cellspacing="0"
-          cellpadding="5">
-            <tr>
-              <td>
-<pre>
-RewriteRule  ^net.sw$       net.sw/        [R]
-RewriteRule  ^net.sw/(.*)$  e/netsw/$1
-</pre>
-              </td>
-            </tr>
-          </table>
-
-          <p>The first rule is for requests which miss the trailing
-          slash! The second rule does the real thing. And then
-          comes the killer configuration which stays in the
-          per-directory config file
-          <code>/e/netsw/.www/.wwwacl</code>:</p>
-
-          <table bgcolor="#E0E5F5" border="0" cellspacing="0"
-          cellpadding="5">
-            <tr>
-              <td>
-<pre>
-Options       ExecCGI FollowSymLinks Includes MultiViews 
-
-RewriteEngine on
-
-#  we are reached via /net.sw/ prefix
-RewriteBase   /net.sw/
-
-#  first we rewrite the root dir to 
-#  the handling cgi script
-RewriteRule   ^$                       netsw-home.cgi     [L]
-RewriteRule   ^index\.html$            netsw-home.cgi     [L]
-
-#  strip out the subdirs when
-#  the browser requests us from perdir pages
-RewriteRule   ^.+/(netsw-[^/]+/.+)$    $1                 [L]
-
-#  and now break the rewriting for local files
-RewriteRule   ^netsw-home\.cgi.*       -                  [L]
-RewriteRule   ^netsw-changes\.cgi.*    -                  [L]
-RewriteRule   ^netsw-search\.cgi.*     -                  [L]
-RewriteRule   ^netsw-tree\.cgi$        -                  [L]
-RewriteRule   ^netsw-about\.html$      -                  [L]
-RewriteRule   ^netsw-img/.*$           -                  [L]
-
-#  anything else is a subdir which gets handled
-#  by another cgi script
-RewriteRule   !^netsw-lsdir\.cgi.*     -                  [C]
-RewriteRule   (.*)                     netsw-lsdir.cgi/$1
-</pre>
-              </td>
-            </tr>
-          </table>
-
-          <p>Some hints for interpretation:</p>
-
-          <ol>
-            <li>Notice the L (last) flag and no substitution field
-            ('-') in the forth part</li>
-
-            <li>Notice the ! (not) character and the C (chain) flag
-            at the first rule in the last part</li>
-
-            <li>Notice the catch-all pattern in the last rule</li>
-          </ol>
-        </dd>
-      </dl>
-
-      <h2>NCSA imagemap to Apache mod_imap</h2>
-
-      <dl>
-        <dt><strong>Description:</strong></dt>
-
-        <dd>When switching from the NCSA webserver to the more
-        modern Apache webserver a lot of people want a smooth
-        transition. So they want pages which use their old NCSA
-        <code>imagemap</code> program to work under Apache with the
-        modern <code>mod_imap</code>. The problem is that there are
-        a lot of hyperlinks around which reference the
-        <code>imagemap</code> program via
-        <code>/cgi-bin/imagemap/path/to/page.map</code>. Under
-        Apache this has to read just
-        <code>/path/to/page.map</code>.</dd>
-
-        <dt><strong>Solution:</strong></dt>
-
-        <dd>
-          We use a global rule to remove the prefix on-the-fly for
-          all requests: 
-
-          <table bgcolor="#E0E5F5" border="0" cellspacing="0"
-          cellpadding="5">
-            <tr>
-              <td>
-<pre>
-RewriteEngine  on
-RewriteRule    ^/cgi-bin/imagemap(.*)  $1  [PT]
-</pre>
-              </td>
-            </tr>
-          </table>
-        </dd>
-      </dl>
-
-      <h2>Search pages in more than one directory</h2>
-
-      <dl>
-        <dt><strong>Description:</strong></dt>
-
-        <dd>Sometimes it is neccessary to let the webserver search
-        for pages in more than one directory. Here MultiViews or
-        other techniques cannot help.</dd>
-
-        <dt><strong>Solution:</strong></dt>
-
-        <dd>
-          We program a explicit ruleset which searches for the
-          files in the directories. 
-
-          <table bgcolor="#E0E5F5" border="0" cellspacing="0"
-          cellpadding="5">
-            <tr>
-              <td>
-<pre>
-RewriteEngine on
-
-#   first try to find it in custom/...
-#   ...and if found stop and be happy:
-RewriteCond         /your/docroot/<strong>dir1</strong>/%{REQUEST_FILENAME}  -f
-RewriteRule  ^(.+)  /your/docroot/<strong>dir1</strong>/$1  [L]
-
-#   second try to find it in pub/...
-#   ...and if found stop and be happy:
-RewriteCond         /your/docroot/<strong>dir2</strong>/%{REQUEST_FILENAME}  -f
-RewriteRule  ^(.+)  /your/docroot/<strong>dir2</strong>/$1  [L]
-
-#   else go on for other Alias or ScriptAlias directives,
-#   etc.
-RewriteRule   ^(.+)  -  [PT]
-</pre>
-              </td>
-            </tr>
-          </table>
-        </dd>
-      </dl>
-
-      <h2>Set Environment Variables According To URL Parts</h2>
-
-      <dl>
-        <dt><strong>Description:</strong></dt>
-
-        <dd>Perhaps you want to keep status information between
-        requests and use the URL to encode it. But you don't want
-        to use a CGI wrapper for all pages just to strip out this
-        information.</dd>
-
-        <dt><strong>Solution:</strong></dt>
-
-        <dd>
-          We use a rewrite rule to strip out the status information
-          and remember it via an environment variable which can be
-          later dereferenced from within XSSI or CGI. This way a
-          URL <code>/foo/S=java/bar/</code> gets translated to
-          <code>/foo/bar/</code> and the environment variable named
-          <code>STATUS</code> is set to the value "java". 
-
-          <table bgcolor="#E0E5F5" border="0" cellspacing="0"
-          cellpadding="5">
-            <tr>
-              <td>
-<pre>
-RewriteEngine on
-RewriteRule   ^(.*)/<strong>S=([^/]+)</strong>/(.*)    $1/$3 [E=<strong>STATUS:$2</strong>]
-</pre>
-              </td>
-            </tr>
-          </table>
-        </dd>
-      </dl>
-
-      <h2>Virtual User Hosts</h2>
-
-      <dl>
-        <dt><strong>Description:</strong></dt>
-
-        <dd>Assume that you want to provide
-        <code>www.<strong>username</strong>.host.domain.com</code>
-        for the homepage of username via just DNS A records to the
-        same machine and without any virtualhosts on this
-        machine.</dd>
-
-        <dt><strong>Solution:</strong></dt>
-
-        <dd>
-          For HTTP/1.0 requests there is no solution, but for
-          HTTP/1.1 requests which contain a Host: HTTP header we
-          can use the following ruleset to rewrite
-          <code>http://www.username.host.com/anypath</code>
-          internally to <code>/home/username/anypath</code>: 
-
-          <table bgcolor="#E0E5F5" border="0" cellspacing="0"
-          cellpadding="5">
-            <tr>
-              <td>
-<pre>
-RewriteEngine on
-RewriteCond   %{<strong>HTTP_HOST</strong>}                 ^www\.<strong>[^.]+</strong>\.host\.com$
-RewriteRule   ^(.+)                        %{HTTP_HOST}$1          [C]
-RewriteRule   ^www\.<strong>([^.]+)</strong>\.host\.com(.*) /home/<strong>$1</strong>$2
-</pre>
-              </td>
-            </tr>
-          </table>
-        </dd>
-      </dl>
-
-      <h2>Redirect Homedirs For Foreigners</h2>
-
-      <dl>
-        <dt><strong>Description:</strong></dt>
-
-        <dd>We want to redirect homedir URLs to another webserver
-        <code>www.somewhere.com</code> when the requesting user
-        does not stay in the local domain
-        <code>ourdomain.com</code>. This is sometimes used in
-        virtual host contexts.</dd>
-
-        <dt><strong>Solution:</strong></dt>
-
-        <dd>
-          Just a rewrite condition: 
-
-          <table bgcolor="#E0E5F5" border="0" cellspacing="0"
-          cellpadding="5">
-            <tr>
-              <td>
-<pre>
-RewriteEngine on
-RewriteCond   %{REMOTE_HOST}  <strong>!^.+\.ourdomain\.com$</strong>
-RewriteRule   ^(/~.+)         http://www.somewhere.com/$1 [R,L]
-</pre>
-              </td>
-            </tr>
-          </table>
-        </dd>
-      </dl>
-
-      <h2>Redirect Failing URLs To Other Webserver</h2>
-
-      <dl>
-        <dt><strong>Description:</strong></dt>
-
-        <dd>A typical FAQ about URL rewriting is how to redirect
-        failing requests on webserver A to webserver B. Usually
-        this is done via ErrorDocument CGI-scripts in Perl, but
-        there is also a mod_rewrite solution. But notice that this
-        is less performant than using a ErrorDocument
-        CGI-script!</dd>
-
-        <dt><strong>Solution:</strong></dt>
-
-        <dd>
-          The first solution has the best performance but less
-          flexibility and is less error safe: 
-
-          <table bgcolor="#E0E5F5" border="0" cellspacing="0"
-          cellpadding="5">
-            <tr>
-              <td>
-<pre>
-RewriteEngine on
-RewriteCond   /your/docroot/%{REQUEST_FILENAME} <strong>!-f</strong>
-RewriteRule   ^(.+)                             http://<strong>webserverB</strong>.dom/$1
-</pre>
-              </td>
-            </tr>
-          </table>
-
-          <p>The problem here is that this will only work for pages
-          inside the DocumentRoot. While you can add more
-          Conditions (for instance to also handle homedirs, etc.)
-          there is better variant:</p>
-
-          <table bgcolor="#E0E5F5" border="0" cellspacing="0"
-          cellpadding="5">
-            <tr>
-              <td>
-<pre>
-RewriteEngine on
-RewriteCond   %{REQUEST_URI} <strong>!-U</strong>
-RewriteRule   ^(.+)          http://<strong>webserverB</strong>.dom/$1
-</pre>
-              </td>
-            </tr>
-          </table>
-
-          <p>This uses the URL look-ahead feature of mod_rewrite.
-          The result is that this will work for all types of URLs
-          and is a safe way. But it does a performance impact on
-          the webserver, because for every request there is one
-          more internal subrequest. So, if your webserver runs on a
-          powerful CPU, use this one. If it is a slow machine, use
-          the first approach or better a ErrorDocument
-          CGI-script.</p>
-        </dd>
-      </dl>
-
-      <h2>Extended Redirection</h2>
-
-      <dl>
-        <dt><strong>Description:</strong></dt>
-
-        <dd>Sometimes we need more control (concerning the
-        character escaping mechanism) of URLs on redirects. Usually
-        the Apache kernels URL escape function also escapes
-        anchors, i.e. URLs like "url#anchor". You cannot use this
-        directly on redirects with mod_rewrite because the
-        uri_escape() function of Apache would also escape the hash
-        character. How can we redirect to such a URL?</dd>
-
-        <dt><strong>Solution:</strong></dt>
-
-        <dd>
-          We have to use a kludge by the use of a NPH-CGI script
-          which does the redirect itself. Because here no escaping
-          is done (NPH=non-parseable headers). First we introduce a
-          new URL scheme <code>xredirect:</code> by the following
-          per-server config-line (should be one of the last rewrite
-          rules): 
-
-          <table bgcolor="#E0E5F5" border="0" cellspacing="0"
-          cellpadding="5">
-            <tr>
-              <td>
-<pre>
-RewriteRule ^xredirect:(.+) /path/to/nph-xredirect.cgi/$1 \
-            [T=application/x-httpd-cgi,L]
-</pre>
-              </td>
-            </tr>
-          </table>
-
-          <p>This forces all URLs prefixed with
-          <code>xredirect:</code> to be piped through the
-          <code>nph-xredirect.cgi</code> program. And this program
-          just looks like:</p>
-
-          <table bgcolor="#E0E5F5" border="0" cellspacing="0"
-          cellpadding="5">
-            <tr>
-              <td>
-<pre>
-#!/path/to/perl
-##
-##  nph-xredirect.cgi -- NPH/CGI script for extended redirects
-##  Copyright (c) 1997 Ralf S. Engelschall, All Rights Reserved. 
-##
-
-$| = 1;
-$url = $ENV{'PATH_INFO'};
-
-print "HTTP/1.0 302 Moved Temporarily\n";
-print "Server: $ENV{'SERVER_SOFTWARE'}\n";
-print "Location: $url\n";
-print "Content-type: text/html\n";
-print "\n";
-print "&lt;html&gt;\n";
-print "&lt;head&gt;\n";
-print "&lt;title&gt;302 Moved Temporarily (EXTENDED)&lt;/title&gt;\n";
-print "&lt;/head&gt;\n";
-print "&lt;body&gt;\n";
-print "&lt;h1&gt;Moved Temporarily (EXTENDED)&lt;/h1&gt;\n";
-print "The document has moved &lt;a HREF=\"$url\"&gt;here&lt;/a&gt;.&lt;p&gt;\n";
-print "&lt;/body&gt;\n";
-print "&lt;/html&gt;\n";
-
-##EOF##
-</pre>
-              </td>
-            </tr>
-          </table>
-
-          <p>This provides you with the functionality to do
-          redirects to all URL schemes, i.e. including the one
-          which are not directly accepted by mod_rewrite. For
-          instance you can now also redirect to
-          <code>news:newsgroup</code> via</p>
-
-          <table bgcolor="#E0E5F5" border="0" cellspacing="0"
-          cellpadding="5">
-            <tr>
-              <td>
-<pre>
-RewriteRule ^anyurl  xredirect:news:newsgroup
-</pre>
-              </td>
-            </tr>
-          </table>
-
-          <p>Notice: You have not to put [R] or [R,L] to the above
-          rule because the <code>xredirect:</code> need to be
-          expanded later by our special "pipe through" rule
-          above.</p>
-        </dd>
-      </dl>
-
-      <h2>Archive Access Multiplexer</h2>
-
-      <dl>
-        <dt><strong>Description:</strong></dt>
-
-        <dd>Do you know the great CPAN (Comprehensive Perl Archive
-        Network) under <a
-        href="http://www.perl.com/CPAN">http://www.perl.com/CPAN</a>?
-        This does a redirect to one of several FTP servers around
-        the world which carry a CPAN mirror and is approximately
-        near the location of the requesting client. Actually this
-        can be called an FTP access multiplexing service. While
-        CPAN runs via CGI scripts, how can a similar approach
-        implemented via mod_rewrite?</dd>
-
-        <dt><strong>Solution:</strong></dt>
-
-        <dd>
-          First we notice that from version 3.0.0 mod_rewrite can
-          also use the "ftp:" scheme on redirects. And second, the
-          location approximation can be done by a rewritemap over
-          the top-level domain of the client. With a tricky chained
-          ruleset we can use this top-level domain as a key to our
-          multiplexing map. 
-
-          <table bgcolor="#E0E5F5" border="0" cellspacing="0"
-          cellpadding="5">
-            <tr>
-              <td>
-<pre>
-RewriteEngine on
-RewriteMap    multiplex                txt:/path/to/map.cxan
-RewriteRule   ^/CxAN/(.*)              %{REMOTE_HOST}::$1                 [C]
-RewriteRule   ^.+\.<strong>([a-zA-Z]+)</strong>::(.*)$  ${multiplex:<strong>$1</strong>|ftp.default.dom}$2  [R,L]
-</pre>
-              </td>
-            </tr>
-          </table>
-
-          <table bgcolor="#E0E5F5" border="0" cellspacing="0"
-          cellpadding="5">
-            <tr>
-              <td>
-<pre>
-##
-##  map.cxan -- Multiplexing Map for CxAN
-##
-
-de        ftp://ftp.cxan.de/CxAN/
-uk        ftp://ftp.cxan.uk/CxAN/
-com       ftp://ftp.cxan.com/CxAN/
- :
-##EOF##
-</pre>
-              </td>
-            </tr>
-          </table>
-        </dd>
-      </dl>
-
-      <h2>Time-Dependend Rewriting</h2>
-
-      <dl>
-        <dt><strong>Description:</strong></dt>
-
-        <dd>When tricks like time-dependend content should happen a
-        lot of webmasters still use CGI scripts which do for
-        instance redirects to specialized pages. How can it be done
-        via mod_rewrite?</dd>
-
-        <dt><strong>Solution:</strong></dt>
-
-        <dd>
-          There are a lot of variables named <code>TIME_xxx</code>
-          for rewrite conditions. In conjunction with the special
-          lexicographic comparison patterns &lt;STRING, &gt;STRING
-          and =STRING we can do time-dependend redirects: 
-
-          <table bgcolor="#E0E5F5" border="0" cellspacing="0"
-          cellpadding="5">
-            <tr>
-              <td>
-<pre>
-RewriteEngine on
-RewriteCond   %{TIME_HOUR}%{TIME_MIN} &gt;0700
-RewriteCond   %{TIME_HOUR}%{TIME_MIN} &lt;1900
-RewriteRule   ^foo\.html$             foo.day.html
-RewriteRule   ^foo\.html$             foo.night.html
-</pre>
-              </td>
-            </tr>
-          </table>
-
-          <p>This provides the content of <code>foo.day.html</code>
-          under the URL <code>foo.html</code> from 07:00-19:00 and
-          at the remaining time the contents of
-          <code>foo.night.html</code>. Just a nice feature for a
-          homepage...</p>
-        </dd>
-      </dl>
-
-      <h2>Backward Compatibility for YYYY to XXXX migration</h2>
-
-      <dl>
-        <dt><strong>Description:</strong></dt>
-
-        <dd>How can we make URLs backward compatible (still
-        existing virtually) after migrating document.YYYY to
-        document.XXXX, e.g. after translating a bunch of .html
-        files to .phtml?</dd>
-
-        <dt><strong>Solution:</strong></dt>
-
-        <dd>
-          We just rewrite the name to its basename and test for
-          existence of the new extension. If it exists, we take
-          that name, else we rewrite the URL to its original state.
-          
-
-          <table bgcolor="#E0E5F5" border="0" cellspacing="0"
-          cellpadding="5">
-            <tr>
-              <td>
-<pre>
-#   backward compatibility ruleset for 
-#   rewriting document.html to document.phtml
-#   when and only when document.phtml exists
-#   but no longer document.html
-RewriteEngine on
-RewriteBase   /~quux/
-#   parse out basename, but remember the fact
-RewriteRule   ^(.*)\.html$              $1      [C,E=WasHTML:yes]
-#   rewrite to document.phtml if exists
-RewriteCond   %{REQUEST_FILENAME}.phtml -f
-RewriteRule   ^(.*)$ $1.phtml                   [S=1]
-#   else reverse the previous basename cutout
-RewriteCond   %{ENV:WasHTML}            ^yes$
-RewriteRule   ^(.*)$ $1.html
-</pre>
-              </td>
-            </tr>
-          </table>
-        </dd>
-      </dl>
-
-      <h1>Content Handling</h1>
-
-      <h2>From Old to New (intern)</h2>
-
-      <dl>
-        <dt><strong>Description:</strong></dt>
-
-        <dd>Assume we have recently renamed the page
-        <code>bar.html</code> to <code>foo.html</code> and now want
-        to provide the old URL for backward compatibility. Actually
-        we want that users of the old URL even not recognize that
-        the pages was renamed.</dd>
-
-        <dt><strong>Solution:</strong></dt>
-
-        <dd>
-          We rewrite the old URL to the new one internally via the
-          following rule: 
-
-          <table bgcolor="#E0E5F5" border="0" cellspacing="0"
-          cellpadding="5">
-            <tr>
-              <td>
-<pre>
-RewriteEngine  on
-RewriteBase    /~quux/
-RewriteRule    ^<strong>foo</strong>\.html$  <strong>bar</strong>.html
-</pre>
-              </td>
-            </tr>
-          </table>
-        </dd>
-      </dl>
-
-      <h2>From Old to New (extern)</h2>
-
-      <dl>
-        <dt><strong>Description:</strong></dt>
-
-        <dd>Assume again that we have recently renamed the page
-        <code>bar.html</code> to <code>foo.html</code> and now want
-        to provide the old URL for backward compatibility. But this
-        time we want that the users of the old URL get hinted to
-        the new one, i.e. their browsers Location field should
-        change, too.</dd>
-
-        <dt><strong>Solution:</strong></dt>
-
-        <dd>
-          We force a HTTP redirect to the new URL which leads to a
-          change of the browsers and thus the users view: 
-
-          <table bgcolor="#E0E5F5" border="0" cellspacing="0"
-          cellpadding="5">
-            <tr>
-              <td>
-<pre>
-RewriteEngine  on
-RewriteBase    /~quux/
-RewriteRule    ^<strong>foo</strong>\.html$  <strong>bar</strong>.html  [<strong>R</strong>]
-</pre>
-              </td>
-            </tr>
-          </table>
-        </dd>
-      </dl>
-
-      <h2>Browser Dependend Content</h2>
-
-      <dl>
-        <dt><strong>Description:</strong></dt>
-
-        <dd>At least for important top-level pages it is sometimes
-        necesarry to provide the optimum of browser dependend
-        content, i.e. one has to provide a maximum version for the
-        latest Netscape variants, a minimum version for the Lynx
-        browsers and a average feature version for all others.</dd>
-
-        <dt><strong>Solution:</strong></dt>
-
-        <dd>
-          We cannot use content negotiation because the browsers do
-          not provide their type in that form. Instead we have to
-          act on the HTTP header "User-Agent". The following condig
-          does the following: If the HTTP header "User-Agent"
-          begins with "Mozilla/3", the page <code>foo.html</code>
-          is rewritten to <code>foo.NS.html</code> and and the
-          rewriting stops. If the browser is "Lynx" or "Mozilla" of
-          version 1 or 2 the URL becomes <code>foo.20.html</code>.
-          All other browsers receive page <code>foo.32.html</code>.
-          This is done by the following ruleset: 
-
-          <table bgcolor="#E0E5F5" border="0" cellspacing="0"
-          cellpadding="5">
-            <tr>
-              <td>
-<pre>
-RewriteCond %{HTTP_USER_AGENT}  ^<strong>Mozilla/3</strong>.*
-RewriteRule ^foo\.html$         foo.<strong>NS</strong>.html          [<strong>L</strong>]
-
-RewriteCond %{HTTP_USER_AGENT}  ^<strong>Lynx/</strong>.*         [OR]
-RewriteCond %{HTTP_USER_AGENT}  ^<strong>Mozilla/[12]</strong>.*
-RewriteRule ^foo\.html$         foo.<strong>20</strong>.html          [<strong>L</strong>]
-
-RewriteRule ^foo\.html$         foo.<strong>32</strong>.html          [<strong>L</strong>]
-</pre>
-              </td>
-            </tr>
-          </table>
-        </dd>
-      </dl>
-
-      <h2>Dynamic Mirror</h2>
-
-      <dl>
-        <dt><strong>Description:</strong></dt>
-
-        <dd>Assume there are nice webpages on remote hosts we want
-        to bring into our namespace. For FTP servers we would use
-        the <code>mirror</code> program which actually maintains an
-        explicit up-to-date copy of the remote data on the local
-        machine. For a webserver we could use the program
-        <code>webcopy</code> which acts similar via HTTP. But both
-        techniques have one major drawback: The local copy is
-        always just as up-to-date as often we run the program. It
-        would be much better if the mirror is not a static one we
-        have to establish explicitly. Instead we want a dynamic
-        mirror with data which gets updated automatically when
-        there is need (updated data on the remote host).</dd>
-
-        <dt><strong>Solution:</strong></dt>
-
-        <dd>
-          To provide this feature we map the remote webpage or even
-          the complete remote webarea to our namespace by the use
-          of the <i>Proxy Throughput</i> feature (flag [P]): 
-
-          <table bgcolor="#E0E5F5" border="0" cellspacing="0"
-          cellpadding="5">
-            <tr>
-              <td>
-<pre>
-RewriteEngine  on
-RewriteBase    /~quux/
-RewriteRule    ^<strong>hotsheet/</strong>(.*)$  <strong>http://www.tstimpreso.com/hotsheet/</strong>$1  [<strong>P</strong>]
-</pre>
-              </td>
-            </tr>
-          </table>
-
-          <table bgcolor="#E0E5F5" border="0" cellspacing="0"
-          cellpadding="5">
-            <tr>
-              <td>
-<pre>
-RewriteEngine  on
-RewriteBase    /~quux/
-RewriteRule    ^<strong>usa-news\.html</strong>$   <strong>http://www.quux-corp.com/news/index.html</strong>  [<strong>P</strong>]
-</pre>
-              </td>
-            </tr>
-          </table>
-        </dd>
-      </dl>
-
-      <h2>Reverse Dynamic Mirror</h2>
-
-      <dl>
-        <dt><strong>Description:</strong></dt>
-
-        <dd>...</dd>
-
-        <dt><strong>Solution:</strong></dt>
-
-        <dd>
-          <table bgcolor="#E0E5F5" border="0" cellspacing="0"
-          cellpadding="5">
-            <tr>
-              <td>
-<pre>
-RewriteEngine on
-RewriteCond   /mirror/of/remotesite/$1           -U 
-RewriteRule   ^http://www\.remotesite\.com/(.*)$ /mirror/of/remotesite/$1
-</pre>
-              </td>
-            </tr>
-          </table>
-        </dd>
-      </dl>
-
-      <h2>Retrieve Missing Data from Intranet</h2>
-
-      <dl>
-        <dt><strong>Description:</strong></dt>
-
-        <dd>This is a tricky way of virtually running a corporates
-        (external) Internet webserver
-        (<code>www.quux-corp.dom</code>), while actually keeping
-        and maintaining its data on a (internal) Intranet webserver
-        (<code>www2.quux-corp.dom</code>) which is protected by a
-        firewall. The trick is that on the external webserver we
-        retrieve the requested data on-the-fly from the internal
-        one.</dd>
-
-        <dt><strong>Solution:</strong></dt>
-
-        <dd>
-          First, we have to make sure that our firewall still
-          protects the internal webserver and that only the
-          external webserver is allowed to retrieve data from it.
-          For a packet-filtering firewall we could for instance
-          configure a firewall ruleset like the following: 
-
-          <table bgcolor="#E0E5F5" border="0" cellspacing="0"
-          cellpadding="5">
-            <tr>
-              <td>
-<pre>
-<strong>ALLOW</strong> Host www.quux-corp.dom Port &gt;1024 --&gt; Host www2.quux-corp.dom Port <strong>80</strong>  
-<strong>DENY</strong>  Host *                 Port *     --&gt; Host www2.quux-corp.dom Port <strong>80</strong>
-</pre>
-              </td>
-            </tr>
-          </table>
-
-          <p>Just adjust it to your actual configuration syntax.
-          Now we can establish the mod_rewrite rules which request
-          the missing data in the background through the proxy
-          throughput feature:</p>
-
-          <table bgcolor="#E0E5F5" border="0" cellspacing="0"
-          cellpadding="5">
-            <tr>
-              <td>
-<pre>
-RewriteRule ^/~([^/]+)/?(.*)          /home/$1/.www/$2
-RewriteCond %{REQUEST_FILENAME}       <strong>!-f</strong>
-RewriteCond %{REQUEST_FILENAME}       <strong>!-d</strong>
-RewriteRule ^/home/([^/]+)/.www/?(.*) http://<strong>www2</strong>.quux-corp.dom/~$1/pub/$2 [<strong>P</strong>]
-</pre>
-              </td>
-            </tr>
-          </table>
-        </dd>
-      </dl>
-
-      <h2>Load Balancing</h2>
-
-      <dl>
-        <dt><strong>Description:</strong></dt>
-
-        <dd>Suppose we want to load balance the traffic to
-        <code>www.foo.com</code> over <code>www[0-5].foo.com</code>
-        (a total of 6 servers). How can this be done?</dd>
-
-        <dt><strong>Solution:</strong></dt>
-
-        <dd>
-          There are a lot of possible solutions for this problem.
-          We will discuss first a commonly known DNS-based variant
-          and then the special one with mod_rewrite: 
-
-          <ol>
-            <li>
-              <strong>DNS Round-Robin</strong> 
-
-              <p>The simplest method for load-balancing is to use
-              the DNS round-robin feature of BIND. Here you just
-              configure <code>www[0-9].foo.com</code> as usual in
-              your DNS with A(address) records, e.g.</p>
-
-              <table bgcolor="#E0E5F5" border="0" cellspacing="0"
-              cellpadding="5">
-                <tr>
-                  <td>
-<pre>
-www0   IN  A       1.2.3.1
-www1   IN  A       1.2.3.2
-www2   IN  A       1.2.3.3
-www3   IN  A       1.2.3.4
-www4   IN  A       1.2.3.5
-www5   IN  A       1.2.3.6
-</pre>
-                  </td>
-                </tr>
-              </table>
-
-              <p>Then you additionally add the following entry:</p>
-
-              <table bgcolor="#E0E5F5" border="0" cellspacing="0"
-              cellpadding="5">
-                <tr>
-                  <td>
-<pre>
-www    IN  CNAME   www0.foo.com.
-       IN  CNAME   www1.foo.com.
-       IN  CNAME   www2.foo.com.
-       IN  CNAME   www3.foo.com.
-       IN  CNAME   www4.foo.com.
-       IN  CNAME   www5.foo.com.
-       IN  CNAME   www6.foo.com.
-</pre>
-                  </td>
-                </tr>
-              </table>
-
-              <p>Notice that this seems wrong, but is actually an
-              intended feature of BIND and can be used in this way.
-              However, now when <code>www.foo.com</code> gets
-              resolved, BIND gives out <code>www0-www6</code> - but
-              in a slightly permutated/rotated order every time.
-              This way the clients are spread over the various
-              servers. But notice that this not a perfect load
-              balancing scheme, because DNS resolve information
-              gets cached by the other nameservers on the net, so
-              once a client has resolved <code>www.foo.com</code>
-              to a particular <code>wwwN.foo.com</code>, all
-              subsequent requests also go to this particular name
-              <code>wwwN.foo.com</code>. But the final result is
-              ok, because the total sum of the requests are really
-              spread over the various webservers.</p>
-            </li>
-
-            <li>
-              <strong>DNS Load-Balancing</strong> 
-
-              <p>A sophisticated DNS-based method for
-              load-balancing is to use the program
-              <code>lbnamed</code> which can be found at <a
-              href="http://www.stanford.edu/~schemers/docs/lbnamed/lbnamed.html">
-              http://www.stanford.edu/~schemers/docs/lbnamed/lbnamed.html</a>.
-              It is a Perl 5 program in conjunction with auxilliary
-              tools which provides a real load-balancing for
-              DNS.</p>
-            </li>
-
-            <li>
-              <strong>Proxy Throughput Round-Robin</strong> 
-
-              <p>In this variant we use mod_rewrite and its proxy
-              throughput feature. First we dedicate
-              <code>www0.foo.com</code> to be actually
-              <code>www.foo.com</code> by using a single</p>
-
-              <table bgcolor="#E0E5F5" border="0" cellspacing="0"
-              cellpadding="5">
-                <tr>
-                  <td>
-<pre>
-www    IN  CNAME   www0.foo.com.
-</pre>
-                  </td>
-                </tr>
-              </table>
-
-              <p>entry in the DNS. Then we convert
-              <code>www0.foo.com</code> to a proxy-only server,
-              i.e. we configure this machine so all arriving URLs
-              are just pushed through the internal proxy to one of
-              the 5 other servers (<code>www1-www5</code>). To
-              accomplish this we first establish a ruleset which
-              contacts a load balancing script <code>lb.pl</code>
-              for all URLs.</p>
-
-              <table bgcolor="#E0E5F5" border="0" cellspacing="0"
-              cellpadding="5">
-                <tr>
-                  <td>
-<pre>
-RewriteEngine on
-RewriteMap    lb      prg:/path/to/lb.pl
-RewriteRule   ^/(.+)$ ${lb:$1}           [P,L]
-</pre>
-                  </td>
-                </tr>
-              </table>
-
-              <p>Then we write <code>lb.pl</code>:</p>
-
-              <table bgcolor="#E0E5F5" border="0" cellspacing="0"
-              cellpadding="5">
-                <tr>
-                  <td>
-<pre>
-#!/path/to/perl
-##
-##  lb.pl -- load balancing script
-##
-
-$| = 1;
-
-$name   = "www";     # the hostname base
-$first  = 1;         # the first server (not 0 here, because 0 is myself) 
-$last   = 5;         # the last server in the round-robin
-$domain = "foo.dom"; # the domainname
-
-$cnt = 0;
-while (&lt;STDIN&gt;) {
-    $cnt = (($cnt+1) % ($last+1-$first));
-    $server = sprintf("%s%d.%s", $name, $cnt+$first, $domain);
-    print "http://$server/$_";
-}
-
-##EOF##
-</pre>
-                  </td>
-                </tr>
-              </table>
-
-              <p>A last notice: Why is this useful? Seems like
-              <code>www0.foo.com</code> still is overloaded? The
-              answer is yes, it is overloaded, but with plain proxy
-              throughput requests, only! All SSI, CGI, ePerl, etc.
-              processing is completely done on the other machines.
-              This is the essential point.</p>
-            </li>
-
-            <li>
-              <strong>Hardware/TCP Round-Robin</strong> 
-
-              <p>There is a hardware solution available, too. Cisco
-              has a beast called LocalDirector which does a load
-              balancing at the TCP/IP level. Actually this is some
-              sort of a circuit level gateway in front of a
-              webcluster. If you have enough money and really need
-              a solution with high performance, use this one.</p>
-            </li>
-          </ol>
-        </dd>
-      </dl>
-
-      <h2>Reverse Proxy</h2>
-
-      <dl>
-        <dt><strong>Description:</strong></dt>
-
-        <dd>...</dd>
-
-        <dt><strong>Solution:</strong></dt>
-
-        <dd>
-          <table bgcolor="#E0E5F5" border="0" cellspacing="0"
-          cellpadding="5">
-            <tr>
-              <td>
-<pre>
-##
-##  apache-rproxy.conf -- Apache configuration for Reverse Proxy Usage
-##
-
-#   server type
-ServerType           standalone
-Listen               8000
-MinSpareServers      16
-StartServers         16
-MaxSpareServers      16
-MaxClients           16
-MaxRequestsPerChild  100
-
-#   server operation parameters
-KeepAlive            on
-MaxKeepAliveRequests 100
-KeepAliveTimeout     15
-Timeout              400
-IdentityCheck        off
-HostnameLookups      off
-
-#   paths to runtime files
-PidFile              /path/to/apache-rproxy.pid
-LockFile             /path/to/apache-rproxy.lock
-ErrorLog             /path/to/apache-rproxy.elog
-CustomLog            /path/to/apache-rproxy.dlog "%{%v/%T}t %h -&gt; %{SERVER}e URL: %U"
-
-#   unused paths
-ServerRoot           /tmp
-DocumentRoot         /tmp
-CacheRoot            /tmp
-RewriteLog           /dev/null
-TransferLog          /dev/null
-TypesConfig          /dev/null
-AccessConfig         /dev/null
-ResourceConfig       /dev/null
-
-#   speed up and secure processing
-&lt;Directory /&gt;
-Options -FollowSymLinks -SymLinksIfOwnerMatch
-AllowOverride None
-&lt;/Directory&gt;
-
-#   the status page for monitoring the reverse proxy
-&lt;Location /apache-rproxy-status&gt;
-SetHandler server-status
-&lt;/Location&gt;
-
-#   enable the URL rewriting engine
-RewriteEngine        on
-RewriteLogLevel      0
-
-#   define a rewriting map with value-lists where
-#   mod_rewrite randomly chooses a particular value
-RewriteMap     server  rnd:/path/to/apache-rproxy.conf-servers
-
-#   make sure the status page is handled locally
-#   and make sure no one uses our proxy except ourself
-RewriteRule    ^/apache-rproxy-status.*  -  [L]
-RewriteRule    ^(http|ftp)://.*          -  [F]
-
-#   now choose the possible servers for particular URL types
-RewriteRule    ^/(.*\.(cgi|shtml))$  to://${server:dynamic}/$1  [S=1]
-RewriteRule    ^/(.*)$               to://${server:static}/$1  
-
-#   and delegate the generated URL by passing it 
-#   through the proxy module
-RewriteRule    ^to://([^/]+)/(.*)    http://$1/$2   [E=SERVER:$1,P,L]
-
-#   and make really sure all other stuff is forbidden 
-#   when it should survive the above rules...
-RewriteRule    .*                    -              [F]
-
-#   enable the Proxy module without caching
-ProxyRequests        on
-NoCache              *
-
-#   setup URL reverse mapping for redirect reponses
-ProxyPassReverse  /  http://www1.foo.dom/
-ProxyPassReverse  /  http://www2.foo.dom/
-ProxyPassReverse  /  http://www3.foo.dom/
-ProxyPassReverse  /  http://www4.foo.dom/
-ProxyPassReverse  /  http://www5.foo.dom/
-ProxyPassReverse  /  http://www6.foo.dom/
-</pre>
-              </td>
-            </tr>
-          </table>
-
-          <table bgcolor="#E0E5F5" border="0" cellspacing="0"
-          cellpadding="5">
-            <tr>
-              <td>
-<pre>
-##
-##  apache-rproxy.conf-servers -- Apache/mod_rewrite selection table
-##
-
-#   list of backend servers which serve static
-#   pages (HTML files and Images, etc.)
-static    www1.foo.dom|www2.foo.dom|www3.foo.dom|www4.foo.dom
-
-#   list of backend servers which serve dynamically 
-#   generated page (CGI programs or mod_perl scripts)
-dynamic   www5.foo.dom|www6.foo.dom
-</pre>
-              </td>
-            </tr>
-          </table>
-        </dd>
-      </dl>
-
-      <h2>New MIME-type, New Service</h2>
-
-      <dl>
-        <dt><strong>Description:</strong></dt>
-
-        <dd>
-          On the net there are a lot of nifty CGI programs. But
-          their usage is usually boring, so a lot of webmaster
-          don't use them. Even Apache's Action handler feature for
-          MIME-types is only appropriate when the CGI programs
-          don't need special URLs (actually PATH_INFO and
-          QUERY_STRINGS) as their input. First, let us configure a
-          new file type with extension <code>.scgi</code> (for
-          secure CGI) which will be processed by the popular
-          <code>cgiwrap</code> program. The problem here is that
-          for instance we use a Homogeneous URL Layout (see above)
-          a file inside the user homedirs has the URL
-          <code>/u/user/foo/bar.scgi</code>. But
-          <code>cgiwrap</code> needs the URL in the form
-          <code>/~user/foo/bar.scgi/</code>. The following rule
-          solves the problem: 
-
-          <table bgcolor="#E0E5F5" border="0" cellspacing="0"
-          cellpadding="5">
-            <tr>
-              <td>
-<pre>
-RewriteRule ^/[uge]/<strong>([^/]+)</strong>/\.www/(.+)\.scgi(.*) ...
-... /internal/cgi/user/cgiwrap/~<strong>$1</strong>/$2.scgi$3  [NS,<strong>T=application/x-http-cgi</strong>]
-</pre>
-              </td>
-            </tr>
-          </table>
-
-          <p>Or assume we have some more nifty programs:
-          <code>wwwlog</code> (which displays the
-          <code>access.log</code> for a URL subtree and
-          <code>wwwidx</code> (which runs Glimpse on a URL
-          subtree). We have to provide the URL area to these
-          programs so they know on which area they have to act on.
-          But usually this ugly, because they are all the times
-          still requested from that areas, i.e. typically we would
-          run the <code>swwidx</code> program from within
-          <code>/u/user/foo/</code> via hyperlink to</p>
-<pre>
-/internal/cgi/user/swwidx?i=/u/user/foo/
-</pre>
-
-          <p>which is ugly. Because we have to hard-code
-          <strong>both</strong> the location of the area
-          <strong>and</strong> the location of the CGI inside the
-          hyperlink. When we have to reorganise or area, we spend a
-          lot of time changing the various hyperlinks.</p>
-        </dd>
-
-        <dt><strong>Solution:</strong></dt>
-
-        <dd>
-          The solution here is to provide a special new URL format
-          which automatically leads to the proper CGI invocation.
-          We configure the following: 
-
-          <table bgcolor="#E0E5F5" border="0" cellspacing="0"
-          cellpadding="5">
-            <tr>
-              <td>
-<pre>
-RewriteRule   ^/([uge])/([^/]+)(/?.*)/\*  /internal/cgi/user/wwwidx?i=/$1/$2$3/
-RewriteRule   ^/([uge])/([^/]+)(/?.*):log /internal/cgi/user/wwwlog?f=/$1/$2$3
-</pre>
-              </td>
-            </tr>
-          </table>
-
-          <p>Now the hyperlink to search at
-          <code>/u/user/foo/</code> reads only</p>
-<pre>
-HREF="*"
-</pre>
-
-          <p>which internally gets automatically transformed to</p>
-<pre>
-/internal/cgi/user/wwwidx?i=/u/user/foo/
-</pre>
-
-          <p>The same approach leads to an invocation for the
-          access log CGI program when the hyperlink
-          <code>:log</code> gets used.</p>
-        </dd>
-      </dl>
-
-      <h2>From Static to Dynamic</h2>
-
-      <dl>
-        <dt><strong>Description:</strong></dt>
-
-        <dd>How can we transform a static page
-        <code>foo.html</code> into a dynamic variant
-        <code>foo.cgi</code> in a seemless way, i.e. without notice
-        by the browser/user.</dd>
-
-        <dt><strong>Solution:</strong></dt>
-
-        <dd>
-          We just rewrite the URL to the CGI-script and force the
-          correct MIME-type so it gets really run as a CGI-script.
-          This way a request to <code>/~quux/foo.html</code>
-          internally leads to the invokation of
-          <code>/~quux/foo.cgi</code>. 
-
-          <table bgcolor="#E0E5F5" border="0" cellspacing="0"
-          cellpadding="5">
-            <tr>
-              <td>
-<pre>
-RewriteEngine  on
-RewriteBase    /~quux/
-RewriteRule    ^foo\.<strong>html</strong>$  foo.<strong>cgi</strong>  [T=<strong>application/x-httpd-cgi</strong>]
-</pre>
-              </td>
-            </tr>
-          </table>
-        </dd>
-      </dl>
-
-      <h2>On-the-fly Content-Regeneration</h2>
-
-      <dl>
-        <dt><strong>Description:</strong></dt>
-
-        <dd>Here comes a really esoteric feature: Dynamically
-        generated but statically served pages, i.e. pages should be
-        delivered as pure static pages (read from the filesystem
-        and just passed through), but they have to be generated
-        dynamically by the webserver if missing. This way you can
-        have CGI-generated pages which are statically served unless
-        one (or a cronjob) removes the static contents. Then the
-        contents gets refreshed.</dd>
-
-        <dt><strong>Solution:</strong></dt>
-
-        <dd>
-          This is done via the following ruleset: 
-
-          <table bgcolor="#E0E5F5" border="0" cellspacing="0"
-          cellpadding="5">
-            <tr>
-              <td>
-<pre>
-RewriteCond %{REQUEST_FILENAME}   <strong>!-s</strong>
-RewriteRule ^page\.<strong>html</strong>$          page.<strong>cgi</strong>   [T=application/x-httpd-cgi,L]
-</pre>
-              </td>
-            </tr>
-          </table>
-
-          <p>Here a request to <code>page.html</code> leads to a
-          internal run of a corresponding <code>page.cgi</code> if
-          <code>page.html</code> is still missing or has filesize
-          null. The trick here is that <code>page.cgi</code> is a
-          usual CGI script which (additionally to its STDOUT)
-          writes its output to the file <code>page.html</code>.
-          Once it was run, the server sends out the data of
-          <code>page.html</code>. When the webmaster wants to force
-          a refresh the contents, he just removes
-          <code>page.html</code> (usually done by a cronjob).</p>
-        </dd>
-      </dl>
-
-      <h2>Document With Autorefresh</h2>
-
-      <dl>
-        <dt><strong>Description:</strong></dt>
-
-        <dd>Wouldn't it be nice while creating a complex webpage if
-        the webbrowser would automatically refresh the page every
-        time we write a new version from within our editor?
-        Impossible?</dd>
-
-        <dt><strong>Solution:</strong></dt>
-
-        <dd>
-          No! We just combine the MIME multipart feature, the
-          webserver NPH feature and the URL manipulation power of
-          mod_rewrite. First, we establish a new URL feature:
-          Adding just <code>:refresh</code> to any URL causes this
-          to be refreshed every time it gets updated on the
-          filesystem. 
-
-          <table bgcolor="#E0E5F5" border="0" cellspacing="0"
-          cellpadding="5">
-            <tr>
-              <td>
-<pre>
-RewriteRule   ^(/[uge]/[^/]+/?.*):refresh  /internal/cgi/apache/nph-refresh?f=$1
-</pre>
-              </td>
-            </tr>
-          </table>
-
-          <p>Now when we reference the URL</p>
-<pre>
-/u/foo/bar/page.html:refresh
-</pre>
-
-          <p>this leads to the internal invocation of the URL</p>
-<pre>
-/internal/cgi/apache/nph-refresh?f=/u/foo/bar/page.html
-</pre>
-
-          <p>The only missing part is the NPH-CGI script. Although
-          one would usually say "left as an exercise to the reader"
-          ;-) I will provide this, too.</p>
-<pre>
-#!/sw/bin/perl
-##
-##  nph-refresh -- NPH/CGI script for auto refreshing pages
-##  Copyright (c) 1997 Ralf S. Engelschall, All Rights Reserved. 
-##
-$| = 1;
-
-#   split the QUERY_STRING variable
-@pairs = split(/&amp;/, $ENV{'QUERY_STRING'});
-foreach $pair (@pairs) {
-    ($name, $value) = split(/=/, $pair);
-    $name =~ tr/A-Z/a-z/;
-    $name = 'QS_' . $name;
-    $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
-    eval "\$$name = \"$value\"";
-}
-$QS_s = 1 if ($QS_s eq '');
-$QS_n = 3600 if ($QS_n eq '');
-if ($QS_f eq '') {
-    print "HTTP/1.0 200 OK\n";
-    print "Content-type: text/html\n\n";
-    print "&amp;lt;b&amp;gt;ERROR&amp;lt;/b&amp;gt;: No file given\n";
-    exit(0);
-}
-if (! -f $QS_f) {
-    print "HTTP/1.0 200 OK\n";
-    print "Content-type: text/html\n\n";
-    print "&amp;lt;b&amp;gt;ERROR&amp;lt;/b&amp;gt;: File $QS_f not found\n";
-    exit(0);
-}
-
-sub print_http_headers_multipart_begin {
-    print "HTTP/1.0 200 OK\n";
-    $bound = "ThisRandomString12345";
-    print "Content-type: multipart/x-mixed-replace;boundary=$bound\n";
-    &amp;print_http_headers_multipart_next;
-}
-
-sub print_http_headers_multipart_next {
-    print "\n--$bound\n";
-}
-
-sub print_http_headers_multipart_end {
-    print "\n--$bound--\n";
-}
-
-sub displayhtml {
-    local($buffer) = @_;
-    $len = length($buffer);
-    print "Content-type: text/html\n";
-    print "Content-length: $len\n\n";
-    print $buffer;
-}
-
-sub readfile {
-    local($file) = @_;
-    local(*FP, $size, $buffer, $bytes);
-    ($x, $x, $x, $x, $x, $x, $x, $size) = stat($file);
-    $size = sprintf("%d", $size);
-    open(FP, "&amp;lt;$file");
-    $bytes = sysread(FP, $buffer, $size);
-    close(FP);
-    return $buffer;
-}
-
-$buffer = &amp;readfile($QS_f);
-&amp;print_http_headers_multipart_begin;
-&amp;displayhtml($buffer);
-
-sub mystat {
-    local($file) = $_[0];
-    local($time);
-
-    ($x, $x, $x, $x, $x, $x, $x, $x, $x, $mtime) = stat($file);
-    return $mtime;
-}
-
-$mtimeL = &amp;mystat($QS_f);
-$mtime = $mtime;
-for ($n = 0; $n &amp;lt; $QS_n; $n++) {
-    while (1) {
-        $mtime = &amp;mystat($QS_f);
-        if ($mtime ne $mtimeL) {
-            $mtimeL = $mtime;
-            sleep(2);
-            $buffer = &amp;readfile($QS_f);
-            &amp;print_http_headers_multipart_next;
-            &amp;displayhtml($buffer);
-            sleep(5);
-            $mtimeL = &amp;mystat($QS_f);
-            last;
-        }
-        sleep($QS_s);
-    }
-}
-
-&amp;print_http_headers_multipart_end;
-
-exit(0);
-
-##EOF##
-</pre>
-        </dd>
-      </dl>
-
-      <h2>Mass Virtual Hosting</h2>
-
-      <dl>
-        <dt><strong>Description:</strong></dt>
-
-        <dd>The <code>&lt;VirtualHost&gt;</code> feature of Apache
-        is nice and works great when you just have a few dozens
-        virtual hosts. But when you are an ISP and have hundreds of
-        virtual hosts to provide this feature is not the best
-        choice.</dd>
-
-        <dt><strong>Solution:</strong></dt>
-
-        <dd>
-          To provide this feature we map the remote webpage or even
-          the complete remote webarea to our namespace by the use
-          of the <i>Proxy Throughput</i> feature (flag [P]): 
-
-          <table bgcolor="#E0E5F5" border="0" cellspacing="0"
-          cellpadding="5">
-            <tr>
-              <td>
-<pre>
-##
-##  vhost.map 
-## 
-www.vhost1.dom:80  /path/to/docroot/vhost1
-www.vhost2.dom:80  /path/to/docroot/vhost2
-     :
-www.vhostN.dom:80  /path/to/docroot/vhostN
-</pre>
-              </td>
-            </tr>
-          </table>
-
-          <table bgcolor="#E0E5F5" border="0" cellspacing="0"
-          cellpadding="5">
-            <tr>
-              <td>
-<pre>
-##
-##  httpd.conf
-##
-    :
-#   use the canonical hostname on redirects, etc.
-UseCanonicalName on
-
-    :
-#   add the virtual host in front of the CLF-format
-CustomLog  /path/to/access_log  "%{VHOST}e %h %l %u %t \"%r\" %&gt;s %b"
-    :
-
-#   enable the rewriting engine in the main server
-RewriteEngine on
-
-#   define two maps: one for fixing the URL and one which defines
-#   the available virtual hosts with their corresponding
-#   DocumentRoot.
-RewriteMap    lowercase    int:tolower
-RewriteMap    vhost        txt:/path/to/vhost.map
-
-#   Now do the actual virtual host mapping
-#   via a huge and complicated single rule:
-#
-#   1. make sure we don't map for common locations
-RewriteCond   %{REQUEST_URL}  !^/commonurl1/.*
-RewriteCond   %{REQUEST_URL}  !^/commonurl2/.*
-    :
-RewriteCond   %{REQUEST_URL}  !^/commonurlN/.*
-#
-#   2. make sure we have a Host header, because
-#      currently our approach only supports 
-#      virtual hosting through this header
-RewriteCond   %{HTTP_HOST}  !^$
-#
-#   3. lowercase the hostname
-RewriteCond   ${lowercase:%{HTTP_HOST}|NONE}  ^(.+)$
-#
-#   4. lookup this hostname in vhost.map and
-#      remember it only when it is a path 
-#      (and not "NONE" from above)
-RewriteCond   ${vhost:%1}  ^(/.*)$
-#
-#   5. finally we can map the URL to its docroot location 
-#      and remember the virtual host for logging puposes
-RewriteRule   ^/(.*)$   %1/$1  [E=VHOST:${lowercase:%{HTTP_HOST}}]
-    : 
-</pre>
-              </td>
-            </tr>
-          </table>
-        </dd>
-      </dl>
-
-      <h1>Access Restriction</h1>
-
-      <h2>Blocking of Robots</h2>
-
-      <dl>
-        <dt><strong>Description:</strong></dt>
-
-        <dd>How can we block a really annoying robot from
-        retrieving pages of a specific webarea? A
-        <code>/robots.txt</code> file containing entries of the
-        "Robot Exclusion Protocol" is typically not enough to get
-        rid of such a robot.</dd>
-
-        <dt><strong>Solution:</strong></dt>
-
-        <dd>
-          We use a ruleset which forbids the URLs of the webarea
-          <code>/~quux/foo/arc/</code> (perhaps a very deep
-          directory indexed area where the robot traversal would
-          create big server load). We have to make sure that we
-          forbid access only to the particular robot, i.e. just
-          forbidding the host where the robot runs is not enough.
-          This would block users from this host, too. We accomplish
-          this by also matching the User-Agent HTTP header
-          information. 
-
-          <table bgcolor="#E0E5F5" border="0" cellspacing="0"
-          cellpadding="5">
-            <tr>
-              <td>
-<pre>
-RewriteCond %{HTTP_USER_AGENT}   ^<strong>NameOfBadRobot</strong>.*      
-RewriteCond %{REMOTE_ADDR}       ^<strong>123\.45\.67\.[8-9]</strong>$
-RewriteRule ^<strong>/~quux/foo/arc/</strong>.+   -   [<strong>F</strong>]
-</pre>
-              </td>
-            </tr>
-          </table>
-        </dd>
-      </dl>
-
-      <h2>Blocked Inline-Images</h2>
-
-      <dl>
-        <dt><strong>Description:</strong></dt>
-
-        <dd>Assume we have under http://www.quux-corp.de/~quux/
-        some pages with inlined GIF graphics. These graphics are
-        nice, so others directly incorporate them via hyperlinks to
-        their pages. We don't like this practice because it adds
-        useless traffic to our server.</dd>
-
-        <dt><strong>Solution:</strong></dt>
-
-        <dd>
-          While we cannot 100% protect the images from inclusion,
-          we can at least restrict the cases where the browser
-          sends a HTTP Referer header. 
-
-          <table bgcolor="#E0E5F5" border="0" cellspacing="0"
-          cellpadding="5">
-            <tr>
-              <td>
-<pre>
-RewriteCond %{HTTP_REFERER} <strong>!^$</strong>                                  
-RewriteCond %{HTTP_REFERER} !^http://www.quux-corp.de/~quux/.*$ [NC]
-RewriteRule <strong>.*\.gif$</strong>        -                                    [F]
-</pre>
-              </td>
-            </tr>
-          </table>
-
-          <table bgcolor="#E0E5F5" border="0" cellspacing="0"
-          cellpadding="5">
-            <tr>
-              <td>
-<pre>
-RewriteCond %{HTTP_REFERER}         !^$                                  
-RewriteCond %{HTTP_REFERER}         !.*/foo-with-gif\.html$
-RewriteRule <strong>^inlined-in-foo\.gif$</strong>   -                        [F]
-</pre>
-              </td>
-            </tr>
-          </table>
-        </dd>
-      </dl>
-
-      <h2>Host Deny</h2>
-
-      <dl>
-        <dt><strong>Description:</strong></dt>
-
-        <dd>How can we forbid a list of externally configured hosts
-        from using our server?</dd>
-
-        <dt><strong>Solution:</strong></dt>
-
-        <dd>
-          For Apache &gt;= 1.3b6: 
-
-          <table bgcolor="#E0E5F5" border="0" cellspacing="0"
-          cellpadding="5">
-            <tr>
-              <td>
-<pre>
-RewriteEngine on
-RewriteMap    hosts-deny  txt:/path/to/hosts.deny
-RewriteCond   ${hosts-deny:%{REMOTE_HOST}|NOT-FOUND} !=NOT-FOUND [OR]
-RewriteCond   ${hosts-deny:%{REMOTE_ADDR}|NOT-FOUND} !=NOT-FOUND
-RewriteRule   ^/.*  -  [F]
-</pre>
-              </td>
-            </tr>
-          </table>
-
-          <p>For Apache &lt;= 1.3b6:</p>
-
-          <table bgcolor="#E0E5F5" border="0" cellspacing="0"
-          cellpadding="5">
-            <tr>
-              <td>
-<pre>
-RewriteEngine on
-RewriteMap    hosts-deny  txt:/path/to/hosts.deny
-RewriteRule   ^/(.*)$ ${hosts-deny:%{REMOTE_HOST}|NOT-FOUND}/$1
-RewriteRule   !^NOT-FOUND/.* - [F]
-RewriteRule   ^NOT-FOUND/(.*)$ ${hosts-deny:%{REMOTE_ADDR}|NOT-FOUND}/$1 
-RewriteRule   !^NOT-FOUND/.* - [F]
-RewriteRule   ^NOT-FOUND/(.*)$ /$1
-</pre>
-              </td>
-            </tr>
-          </table>
-
-          <table bgcolor="#E0E5F5" border="0" cellspacing="0"
-          cellpadding="5">
-            <tr>
-              <td>
-<pre>
-##
-##  hosts.deny 
-##
-##  ATTENTION! This is a map, not a list, even when we treat it as such.
-##             mod_rewrite parses it for key/value pairs, so at least a
-##             dummy value "-" must be present for each entry.
-##
-
-193.102.180.41 -
-bsdti1.sdm.de  -
-192.76.162.40  -
-</pre>
-              </td>
-            </tr>
-          </table>
-        </dd>
-      </dl>
-
-      <h2>Proxy Deny</h2>
-
-      <dl>
-        <dt><strong>Description:</strong></dt>
-
-        <dd>How can we forbid a certain host or even a user of a
-        special host from using the Apache proxy?</dd>
-
-        <dt><strong>Solution:</strong></dt>
-
-        <dd>
-          We first have to make sure mod_rewrite is below(!)
-          mod_proxy in the <code>Configuration</code> file when
-          compiling the Apache webserver. This way it gets called
-          _before_ mod_proxy. Then we configure the following for a
-          host-dependend deny... 
-
-          <table bgcolor="#E0E5F5" border="0" cellspacing="0"
-          cellpadding="5">
-            <tr>
-              <td>
-<pre>
-RewriteCond %{REMOTE_HOST} <strong>^badhost\.mydomain\.com$</strong> 
-RewriteRule !^http://[^/.]\.mydomain.com.*  - [F]
-</pre>
-              </td>
-            </tr>
-          </table>
-
-          <p>...and this one for a user@host-dependend deny:</p>
-
-          <table bgcolor="#E0E5F5" border="0" cellspacing="0"
-          cellpadding="5">
-            <tr>
-              <td>
-<pre>
-RewriteCond %{REMOTE_IDENT}@%{REMOTE_HOST}  <strong>^badguy@badhost\.mydomain\.com$</strong>
-RewriteRule !^http://[^/.]\.mydomain.com.*  - [F]
-</pre>
-              </td>
-            </tr>
-          </table>
-        </dd>
-      </dl>
-
-      <h2>Special Authentication Variant</h2>
-
-      <dl>
-        <dt><strong>Description:</strong></dt>
-
-        <dd>Sometimes a very special authentication is needed, for
-        instance a authentication which checks for a set of
-        explicitly configured users. Only these should receive
-        access and without explicit prompting (which would occur
-        when using the Basic Auth via mod_access).</dd>
-
-        <dt><strong>Solution:</strong></dt>
-
-        <dd>
-          We use a list of rewrite conditions to exclude all except
-          our friends: 
-
-          <table bgcolor="#E0E5F5" border="0" cellspacing="0"
-          cellpadding="5">
-            <tr>
-              <td>
-<pre>
-RewriteCond %{REMOTE_IDENT}@%{REMOTE_HOST} <strong>!^friend1@client1.quux-corp\.com$</strong> 
-RewriteCond %{REMOTE_IDENT}@%{REMOTE_HOST} <strong>!^friend2</strong>@client2.quux-corp\.com$ 
-RewriteCond %{REMOTE_IDENT}@%{REMOTE_HOST} <strong>!^friend3</strong>@client3.quux-corp\.com$ 
-RewriteRule ^/~quux/only-for-friends/      -                                 [F]
-</pre>
-              </td>
-            </tr>
-          </table>
-        </dd>
-      </dl>
-
-      <h2>Referer-based Deflector</h2>
-
-      <dl>
-        <dt><strong>Description:</strong></dt>
-
-        <dd>How can we program a flexible URL Deflector which acts
-        on the "Referer" HTTP header and can be configured with as
-        many referring pages as we like?</dd>
-
-        <dt><strong>Solution:</strong></dt>
-
-        <dd>
-          Use the following really tricky ruleset... 
-
-          <table bgcolor="#E0E5F5" border="0" cellspacing="0"
-          cellpadding="5">
-            <tr>
-              <td>
-<pre>
-RewriteMap  deflector txt:/path/to/deflector.map
-
-RewriteCond %{HTTP_REFERER} !=""
-RewriteCond ${deflector:%{HTTP_REFERER}} ^-$
-RewriteRule ^.* %{HTTP_REFERER} [R,L]
-
-RewriteCond %{HTTP_REFERER} !=""
-RewriteCond ${deflector:%{HTTP_REFERER}|NOT-FOUND} !=NOT-FOUND
-RewriteRule ^.* ${deflector:%{HTTP_REFERER}} [R,L]
-</pre>
-              </td>
-            </tr>
-          </table>
-
-          <p>... in conjunction with a corresponding rewrite
-          map:</p>
-
-          <table bgcolor="#E0E5F5" border="0" cellspacing="0"
-          cellpadding="5">
-            <tr>
-              <td>
-<pre>
-##
-##  deflector.map
-##
-
-http://www.badguys.com/bad/index.html    -
-http://www.badguys.com/bad/index2.html   -
-http://www.badguys.com/bad/index3.html   http://somewhere.com/
-</pre>
-              </td>
-            </tr>
-          </table>
-
-          <p>This automatically redirects the request back to the
-          referring page (when "-" is used as the value in the map)
-          or to a specific URL (when an URL is specified in the map
-          as the second argument).</p>
-        </dd>
-      </dl>
-
-      <h1>Other</h1>
-
-      <h2>External Rewriting Engine</h2>
-
-      <dl>
-        <dt><strong>Description:</strong></dt>
-
-        <dd>A FAQ: How can we solve the FOO/BAR/QUUX/etc. problem?
-        There seems no solution by the use of mod_rewrite...</dd>
-
-        <dt><strong>Solution:</strong></dt>
-
-        <dd>
-          Use an external rewrite map, i.e. a program which acts
-          like a rewrite map. It is run once on startup of Apache
-          receives the requested URLs on STDIN and has to put the
-          resulting (usually rewritten) URL on STDOUT (same
-          order!). 
-
-          <table bgcolor="#E0E5F5" border="0" cellspacing="0"
-          cellpadding="5">
-            <tr>
-              <td>
-<pre>
-RewriteEngine on
-RewriteMap    quux-map       <strong>prg:</strong>/path/to/map.quux.pl
-RewriteRule   ^/~quux/(.*)$  /~quux/<strong>${quux-map:$1}</strong>
-</pre>
-              </td>
-            </tr>
-          </table>
-
-          <table bgcolor="#E0E5F5" border="0" cellspacing="0"
-          cellpadding="5">
-            <tr>
-              <td>
-<pre>
-#!/path/to/perl
-
-#   disable buffered I/O which would lead 
-#   to deadloops for the Apache server
-$| = 1;
-
-#   read URLs one per line from stdin and
-#   generate substitution URL on stdout
-while (&lt;&gt;) {
-    s|^foo/|bar/|;
-    print $_;
-}
-</pre>
-              </td>
-            </tr>
-          </table>
-
-          <p>This is a demonstration-only example and just rewrites
-          all URLs <code>/~quux/foo/...</code> to
-          <code>/~quux/bar/...</code>. Actually you can program
-          whatever you like. But notice that while such maps can be
-          <strong>used</strong> also by an average user, only the
-          system administrator can <strong>define</strong> it.</p>
-        </dd>
-      </dl>
-      <!--#include virtual="footer.html" -->
-    </blockquote>
-  </body>
-</html>
-
diff --git a/docs/manual/misc/security_tips.html b/docs/manual/misc/security_tips.html
deleted file mode 100644
index 190bdbf..0000000
--- a/docs/manual/misc/security_tips.html
+++ /dev/null
@@ -1,291 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta name="generator" content="HTML Tidy, see www.w3.org" />
-    <title>Apache HTTP Server: Security Tips</title>
-  </head>
-  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-
-  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-  vlink="#000080" alink="#FF0000">
-    <!--#include virtual="header.html" -->
-
-    <h1 align="CENTER">Security Tips for Server Configuration</h1>
-
-    <ul>
-      <li><a href="#serverroot">Permissions on ServerRoot
-      Directories</a></li>
-
-      <li><a href="#ssi">Server Side Includes</a></li>
-
-      <li><a href="#nsaliasedcgi">Non Script Aliased CGI</a></li>
-
-      <li><a href="#saliasedcgi">Script Aliased CGI</a></li>
-
-      <li><a href="#cgi">CGI in General</a></li>
-
-      <li><a href="#systemsettings">Protecting System
-      Settings</a></li>
-
-      <li><a href="#protectserverfiles">Protect Server Files by
-      Default</a></li>
-    </ul>
-    <hr />
-
-    <p>Some hints and tips on security issues in setting up a web
-    server. Some of the suggestions will be general, others
-    specific to Apache.</p>
-    <hr />
-
-    <h2><a id="serverroot" name="serverroot">Permissions on
-    ServerRoot Directories</a></h2>
-
-    <p>In typical operation, Apache is started by the root user,
-    and it switches to the user defined by the <a
-    href="../mod/mpm_common.html#user"><strong>User</strong></a>
-    directive to serve hits. As is the case with any command that
-    root executes, you must take care that it is protected from
-    modification by non-root users. Not only must the files
-    themselves be writeable only by root, but so must the
-    directories, and parents of all directories. For example, if
-    you choose to place ServerRoot in <code>
-    /usr/local/apache</code> then it is suggested that you create
-    that directory as root, with commands like these:</p>
-
-    <blockquote>
-<pre>
-    mkdir /usr/local/apache
-    cd /usr/local/apache
-    mkdir bin conf logs
-    chown 0 . bin conf logs
-    chgrp 0 . bin conf logs
-    chmod 755 . bin conf logs
-</pre>
-    </blockquote>
-    It is assumed that /, /usr, and /usr/local are only modifiable
-    by root. When you install the httpd executable, you should
-    ensure that it is similarly protected: 
-
-    <blockquote>
-<pre>
-    cp httpd /usr/local/apache/bin
-    chown 0 /usr/local/apache/bin/httpd
-    chgrp 0 /usr/local/apache/bin/httpd
-    chmod 511 /usr/local/apache/bin/httpd
-</pre>
-    </blockquote>
-
-    <p>You can create an htdocs subdirectory which is modifiable by
-    other users -- since root never executes any files out of
-    there, and shouldn't be creating files in there.</p>
-
-    <p>If you allow non-root users to modify any files that root
-    either executes or writes on then you open your system to root
-    compromises. For example, someone could replace the httpd
-    binary so that the next time you start it, it will execute some
-    arbitrary code. If the logs directory is writeable (by a
-    non-root user), someone could replace a log file with a symlink
-    to some other system file, and then root might overwrite that
-    file with arbitrary data. If the log files themselves are
-    writeable (by a non-root user), then someone may be able to
-    overwrite the log itself with bogus data.</p>
-    <hr />
-
-    <h2><a id="ssi" name="ssi">Server Side Includes</a></h2>
-
-    <p>Server Side Includes (SSI) present a server administrator with
-    several potential security risks.</p>
-
-    <p>
-    The first risk is the increased load on the server.  All SSI-enabled
-    files have to be parsed by Apache, whether or not there are any SSI
-    directives included within the files.  While this load increase is
-    minor, in a shared server environment it can become significant.</p>
-
-    <p>
-    SSI files also pose the same risks that are associated with CGI
-    scripts in general.  Using the "exec cmd" element, SSI-enabled
-    files can execute any CGI script or program under the permissions
-    of the user and group Apache runs as, as configured in httpd.conf.
-    That should definitely give server administrators pause.</p>
-
-    <p>
-    There are ways to enhance the security of SSI files while still taking
-    advantage of the benefits they provide.</p>
-
-    <p>To isolate the damage a wayward SSI file can cause, a server
-    administrator can enable <a href="../docs/suexec.html"
-    >suexec</a> as described in the <a href="#cgi">CGI in General</a>
-    section.</p>
-
-    <p>
-    Enabling SSI for files with .html or .htm extensions can be
-    dangerous.  This is especially true in a shared, or high traffic,
-    server environment.  SSI-enabled files should have a separate
-    extension, such as the conventional .shtml.  This helps keep
-    server load at a minimum and allows for easier management of
-    risk.</p>
-
-
-    <p>Another solution is to disable the ability to run scripts and
-    programs from SSI pages. To do this replace <code>Includes</code>
-    with <code>IncludesNOEXEC</code> in the <a
-    href="../mod/core.html#options">Options</a> directive.  Note that
-    users may still use &lt;--#include virtual="..." --&gt; to execute
-    CGI scripts if these scripts are in directories desginated by a <a
-    href="../mod/mod_alias.html#ScriptAlias">ScriptAlias</a>
-    directive.</p>
-
-    <hr />
-
-    <h2><a id="nsaliasedcgi" name="nsaliasedcgi">Non Script Aliased
-    CGI</a></h2>
-
-    <p>Allowing users to execute <strong>CGI</strong> scripts in
-    any directory should only be considered if;</p>
-
-    <ol>
-      <li>You trust your users not to write scripts which will
-      deliberately or accidentally expose your system to an
-      attack.</li>
-
-      <li>You consider security at your site to be so feeble in
-      other areas, as to make one more potential hole
-      irrelevant.</li>
-
-      <li>You have no users, and nobody ever visits your
-      server.</li>
-    </ol>
-    <hr />
-
-    <h2><a id="saliasedcgi" name="saliasedcgi">Script Aliased
-    CGI</a></h2>
-
-    <p>Limiting <strong>CGI</strong> to special directories gives
-    the admin control over what goes into those directories. This
-    is inevitably more secure than non script aliased CGI, but
-    <strong>only if users with write access to the directories are
-    trusted</strong> or the admin is willing to test each new CGI
-    script/program for potential security holes.</p>
-
-    <p>Most sites choose this option over the non script aliased
-    CGI approach.</p>
-
-    <p></p>
-    <hr />
-
-    <h2><a id="cgi" name="cgi">CGI in General</a></h2>
-
-    <p>Always remember that you must trust the writers of the CGI
-    script/programs or your ability to spot potential security
-    holes in CGI, whether they were deliberate or accidental.</p>
-
-    <p>All the CGI scripts will run as the same user, so they have
-    potential to conflict (accidentally or deliberately) with other
-    scripts <em>e.g.</em> User A hates User B, so he writes a
-    script to trash User B's CGI database. One program which can be
-    used to allow scripts to run as different users is <a
-    href="../suexec.html">suEXEC</a> which is included with Apache
-    as of 1.2 and is called from special hooks in the Apache server
-    code. Another popular way of doing this is with <a
-    href="http://wwwcgi.umr.edu/~cgiwrap/">CGIWrap</a>.</p>
-
-    <p></p>
-    <hr />
-
-    <h2><a id="systemsettings" name="systemsettings">Protecting
-    System Settings</a></h2>
-
-    <p>To run a really tight ship, you'll want to stop users from
-    setting up <code>.htaccess</code> files which can override
-    security features you've configured. Here's one way to do
-    it.</p>
-
-    <p>In the server configuration file, put</p>
-
-    <blockquote>
-      <code>&lt;Directory /&gt;<br />
-       AllowOverride None<br />
-       &lt;/Directory&gt;<br />
-      </code>
-    </blockquote>
-
-    <p>This prevents the use of <code>.htaccess</code> files in all
-    directories apart from those specifically enabled.</p>
-    <hr />
-
-    <h2><a id="protectserverfiles" name="protectserverfiles">
-    Protect Server Files by Default</a></h2>
-
-    <p>One aspect of Apache which is occasionally misunderstood is
-    the feature of default access. That is, unless you take steps
-    to change it, if the server can find its way to a file through
-    normal URL mapping rules, it can serve it to clients.</p>
-
-    <p>For instance, consider the following example:</p>
-
-    <ol>
-      <li><samp># cd /; ln -s / public_html</samp></li>
-
-      <li>Accessing <samp>http://localhost/~root/</samp></li>
-    </ol>
-
-    <p>This would allow clients to walk through the entire
-    filesystem. To work around this, add the following block to
-    your server's configuration:</p>
-<pre>
- &lt;Directory /&gt;
-     Order Deny,Allow
-     Deny from all
- &lt;/Directory&gt;
-</pre>
-
-    <p>This will forbid default access to filesystem locations. Add
-    appropriate <a href="../mod/core.html#directory"><samp>
-    &lt;Directory&gt;</samp></a> blocks to allow access only in
-    those areas you wish. For example,</p>
-<pre>
- &lt;Directory /usr/users/*/public_html&gt;
-     Order Deny,Allow
-     Allow from all
- &lt;/Directory&gt;
- &lt;Directory /usr/local/httpd&gt;
-     Order Deny,Allow
-     Allow from all
- &lt;/Directory&gt;
-</pre>
-
-    <p>Pay particular attention to the interactions of <a
-    href="../mod/core.html#location"><samp>
-    &lt;Location&gt;</samp></a> and <a
-    href="../mod/core.html#directory"><samp>
-    &lt;Directory&gt;</samp></a> directives; for instance, even if
-    <samp>&lt;Directory /&gt;</samp> denies access, a <samp>
-    &lt;Location /&gt;</samp> directive might overturn it.</p>
-
-    <p>Also be wary of playing games with the <a
-    href="../mod/mod_userdir.html#userdir">UserDir</a> directive;
-    setting it to something like <samp>"./"</samp> would have the
-    same effect, for root, as the first example above. If you are
-    using Apache 1.3 or above, we strongly recommend that you
-    include the following line in your server configuration
-    files:</p>
-
-    <dl>
-      <dd><samp>UserDir&nbsp;disabled&nbsp;root</samp></dd>
-    </dl>
-    <hr />
-
-    <p>Please send any other useful security tips to The Apache
-    Group by filling out a <a href="http://bugs.apache.org/">
-    problem report</a>. If you are confident you have found a
-    security bug in the Apache source code itself, <a
-    href="http://httpd.apache.org/bug_report.html">please let us
-    know</a>.</p>
-
-    <p><!--#include virtual="footer.html" --></p>
-  </body>
-</html>
-
diff --git a/docs/manual/misc/tutorials.html b/docs/manual/misc/tutorials.html
deleted file mode 100644
index 8a35e86..0000000
--- a/docs/manual/misc/tutorials.html
+++ /dev/null
@@ -1,211 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta name="generator" content="HTML Tidy, see www.w3.org" />
-
-    <title>Apache Tutorials</title>
-  </head>
-  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-
-  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-  vlink="#000080" alink="#FF0000">
-    <!--#include virtual="header.html" -->
-
-    <blockquote>
-      <strong>Warning:</strong> This document has not been updated
-      to take into account changes made in the 2.0 version of the
-      Apache HTTP Server. Some of the information may still be
-      relevant, but please use it with care.
-    </blockquote>
-
-    <h1 align="CENTER">Apache Tutorials</h1>
-
-    <p>The following documents give you step-by-step instructions
-    on how to accomplish common tasks with the Apache http server.
-    Many of these documents are located at external sites and are
-    not the work of the Apache Software Foundation. Copyright to
-    documents on external sites is owned by the authors or their
-    assignees. Please consult the <a href="../">official Apache
-    Server documentation</a> to verify what you read on external
-    sites.</p>
-
-    <h2>Installation &amp; Getting Started</h2>
-
-    <ul>
-      <li><a
-      href="http://apachetoday.com/news_story.php3?ltsn=2000-06-1-001-01-NW-DP-LF">
-      Getting Started with Apache 1.3</a> (ApacheToday)</li>
-
-      <li><a
-      href="http://apachetoday.com/news_story.php3?ltsn=2000-07-10-001-01-NW-LF-SW">
-      Configuring Your Apache Server Installation</a>
-      (ApacheToday)</li>
-
-      <li><a
-      href="http://oreilly.apacheweek.com/pub/a/apache/2000/02/24/installing_apache.html">
-      Getting, Installing, and Running Apache (on Unix)</a>
-      (O'Reilly Network Apache DevCenter)</li>
-
-      <li><a
-      href="http://www.builder.com/Servers/Apache/ss01.html">Maximum
-      Apache: Getting Started</a> (CNET Builder.com)</li>
-
-      <li><a
-      href="http://www.devshed.com/Server_Side/Administration/APACHE/">
-      How to Build the Apache of Your Dreams</a> (Developer
-      Shed)</li>
-    </ul>
-
-    <h2>Basic Configuration</h2>
-
-    <ul>
-      <li><a
-      href="http://oreilly.apacheweek.com/pub/a/apache/2000/03/02/configuring_apache.html">
-      An Amble Through Apache Configuration</a> (O'Reilly Network
-      Apache DevCenter)</li>
-
-      <li><a
-      href="http://apachetoday.com/news_story.php3?ltsn=2000-07-19-002-01-NW-LF-SW">
-      Using .htaccess Files with Apache</a> (ApacheToday)</li>
-
-      <li><a
-      href="http://apachetoday.com/news_story.php3?ltsn=2000-07-17-001-01-PS">
-      Setting Up Virtual Hosts</a> (ApacheToday)</li>
-
-      <li><a
-      href="http://www.builder.com/Servers/Apache/ss02.html">Maximum
-      Apache: Configure Apache</a> (CNET Builder.com)</li>
-
-      <li><a
-      href="http://www.devshed.com/Server_Side/Administration/MoreApache/">
-      Getting More Out of Apache</a> (Developer Shed)</li>
-    </ul>
-
-    <h2>Security</h2>
-
-    <ul>
-      <li><a
-      href="http://www.linuxplanet.com/linuxplanet/tutorials/1527/1/">
-      Security and Apache: An Essential Primer</a>
-      (LinuxPlanet)</li>
-
-      <li><a
-      href="http://www.apacheweek.com/features/userauth">Using User
-      Authentication</a> (Apacheweek)</li>
-
-      <li><a href="http://www.apacheweek.com/features/dbmauth">DBM
-      User Authentication</a> (Apacheweek)</li>
-
-      <li><a
-      href="http://linux.com/security/newsitem.phtml?sid=12&amp;aid=3549">
-      An Introduction to Securing Apache</a> (Linux.com)</li>
-
-      <li><a
-      href="http://linux.com/security/newsitem.phtml?sid=12&amp;aid=3667">
-      Securing Apache - Access Control</a> (Linux.com)</li>
-
-      <li>Apache Authentication <a
-      href="http://apachetoday.com/news_story.php3?ltsn=2000-07-24-002-01-NW-LF-SW">
-      Part 1</a> - <a
-      href="http://apachetoday.com/news_story.php3?ltsn=2000-07-31-001-01-NW-DP-LF">
-      Part 2</a> - <a
-      href="http://apachetoday.com/news_story.php3?ltsn=2000-08-07-001-01-NW-LF-SW">
-      Part 3</a> - <a
-      href="http://apachetoday.com/news_story.php3?ltsn=2000-08-14-001-01-NW-LF-SW">
-      Part 4</a> (ApacheToday)</li>
-
-      <li><a
-      href="http://apachetoday.com/news_story.php3?ltsn=2000-11-13-003-01-SC-LF-SW">
-      mod_access: Restricting Access by Host</a> (ApacheToday)</li>
-    </ul>
-
-    <h2>Logging</h2>
-
-    <ul>
-      <li><a
-      href="http://oreilly.apacheweek.com/pub/a/apache/2000/03/10/log_rhythms.html">
-      Log Rhythms</a> (O'Reilly Network Apache DevCenter)</li>
-
-      <li><a
-      href="http://www.apacheweek.com/features/logfiles">Gathering
-      Visitor Information: Customising Your Logfiles</a>
-      (Apacheweek)</li>
-
-      <li>Apache Guide: Logging <a
-      href="http://apachetoday.com/news_story.php3?ltsn=2000-08-21-003-01-NW-LF-SW">
-      Part 1</a> - <a
-      href="http://apachetoday.com/news_story.php3?ltsn=2000-08-28-001-01-NW-LF-SW">
-      Part 2</a> - <a
-      href="http://apachetoday.com/news_story.php3?ltsn=2000-09-05-001-01-NW-LF-SW">
-      Part 3</a> - <a
-      href="http://apachetoday.com/news_story.php3?ltsn=2000-09-18-003-01-NW-LF-SW">
-      Part 4</a> - <a
-      href="http://apachetoday.com/news_story.php3?ltsn=2000-09-25-001-01-NW-LF-SW">
-      Part 5</a> (ApacheToday)</li>
-    </ul>
-
-    <h2>CGI and SSI</h2>
-
-    <ul>
-      <li><a
-      href="http://apachetoday.com/news_story.php3?ltsn=2000-06-05-001-10-NW-LF-SW">
-      Dynamic Content with CGI</a> (ApacheToday)</li>
-
-      <li><a
-      href="http://www.cpan.org/doc/FAQs/cgi/idiots-guide.html">
-      The Idiot's Guide to Solving Perl CGI Problems</a>
-      (CPAN)</li>
-
-      <li><a
-      href="http://www.linuxplanet.com/linuxplanet/tutorials/1445/1/">
-      Executing CGI Scripts as Other Users</a> (LinuxPlanet)</li>
-
-      <li><a href="http://www.htmlhelp.org/faq/cgifaq.html">CGI
-      Programming FAQ</a> (Web Design Group)</li>
-
-      <li>Introduction to Server Side Includes <a
-      href="http://apachetoday.com/news_story.php3?ltsn=2000-06-12-001-01-PS">
-      Part 1</a> - <a
-      href="http://apachetoday.com/news_story.php3?ltsn=2000-06-19-002-01-NW-LF-SW">
-      Part 2</a> (ApacheToday)</li>
-
-      <li><a
-      href="http://apachetoday.com/news_story.php3?ltsn=2000-06-26-001-01-NW-LF-SW">
-      Advanced SSI Techniques</a> (ApacheToday)</li>
-
-      <li><a
-      href="http://www.builder.com/Servers/ApacheFiles/082400/">Setting
-      up CGI and SSI with Apache</a> (CNET Builder.com)</li>
-    </ul>
-
-    <h2>Other Features</h2>
-
-    <ul>
-      <li><a
-      href="http://www.apacheweek.com/features/negotiation">Content
-      Negotiation Explained</a> (Apacheweek)</li>
-
-      <li><a
-      href="http://www.apacheweek.com/features/imagemaps">Using
-      Apache Imagemaps</a> (Apacheweek)</li>
-
-      <li><a
-      href="http://apachetoday.com/news_story.php3?ltsn=2000-06-14-002-01-PS">
-      Keeping Your Images from Adorning Other Sites</a>
-      (ApacheToday)</li>
-
-      <li><a
-      href="http://ppewww.ph.gla.ac.uk/~flavell/www/lang-neg.html">Language
-      Negotiation Notes</a> (Alan J. Flavell)</li>
-    </ul>
-
-    <p>If you have a pointer to a an accurate and well-written
-    tutorial not included here, please let us know by submitting it
-    to the <a href="http://bugs.apache.org/">Apache Bug
-    Database</a>. <!--#include virtual="footer.html" -->
-    </p>
-  </body>
-</html>
-
diff --git a/docs/manual/mod/allmodules.xml b/docs/manual/mod/allmodules.xml
deleted file mode 100644
index 8bdd9b9..0000000
--- a/docs/manual/mod/allmodules.xml
+++ /dev/null
@@ -1,51 +0,0 @@
-<modulelist>
-<modulefile>core.xml</modulefile>
-<modulefile>mod_access.xml</modulefile>
-<modulefile>mod_actions.xml</modulefile>
-<modulefile>mod_alias.xml</modulefile>
-<modulefile>mod_asis.xml</modulefile>
-<modulefile>mod_auth.xml</modulefile>
-<modulefile>mod_auth_anon.xml</modulefile>
-<modulefile>mod_auth_dbm.xml</modulefile>
-<modulefile>mod_auth_digest.xml</modulefile>
-<modulefile>mod_autoindex.xml</modulefile>
-<modulefile>mod_cern_meta.xml</modulefile>
-<modulefile>mod_cgi.xml</modulefile>
-<modulefile>mod_cgid.xml</modulefile>
-<modulefile>mod_charset_lite.xml</modulefile>
-<modulefile>mod_dav.xml</modulefile>
-<modulefile>mod_deflate.xml</modulefile>
-<modulefile>mod_dir.xml</modulefile>
-<modulefile>mod_env.xml</modulefile>
-<modulefile>mod_example.xml</modulefile>
-<modulefile>mod_expires.xml</modulefile>
-<modulefile>mod_ext_filter.xml</modulefile>
-<modulefile>mod_file_cache.xml</modulefile>
-<modulefile>mod_headers.xml</modulefile>
-<modulefile>mod_imap.xml</modulefile>
-<modulefile>mod_include.xml</modulefile>
-<modulefile>mod_info.xml</modulefile>
-<modulefile>mod_isapi.xml</modulefile>
-<modulefile>mod_log_config.xml</modulefile>
-<modulefile>mod_mime.xml</modulefile>
-<modulefile>mod_mime_magic.xml</modulefile>
-<modulefile>mod_negotiation.xml</modulefile>
-<modulefile>mod_proxy.xml</modulefile>
-<modulefile>mod_rewrite.xml</modulefile>
-<modulefile>mod_setenvif.xml</modulefile>
-<modulefile>mod_so.xml</modulefile>
-<modulefile>mod_ssl.xml</modulefile>
-<modulefile>mod_speling.xml</modulefile>
-<modulefile>mod_status.xml</modulefile>
-<modulefile>mod_suexec.xml</modulefile>
-<modulefile>mod_unique_id.xml</modulefile>
-<modulefile>mod_userdir.xml</modulefile>
-<modulefile>mod_usertrack.xml</modulefile>
-<modulefile>mod_vhost_alias.xml</modulefile>
-<modulefile>mpm_common.xml</modulefile>
-<modulefile>mpm_netware.xml</modulefile>
-<modulefile>mpm_winnt.xml</modulefile>
-<modulefile>perchild.xml</modulefile>
-<modulefile>prefork.xml</modulefile>
-<modulefile>worker.xml</modulefile>
-</modulelist>
\ No newline at end of file
diff --git a/docs/manual/mod/core.html b/docs/manual/mod/core.html
deleted file mode 100644
index a0589ee..0000000
--- a/docs/manual/mod/core.html
+++ /dev/null
@@ -1,1727 +0,0 @@
-<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-     This file is generated from xml source: DO NOT EDIT
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
---><title>core - Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img alt="[APACHE DOCUMENTATION]" src="../images/sub.gif"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module core</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td><description>Core Apache HTTP Server features that are always
-available</description></td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr></table></td></tr></table><h2>Directives</h2><ul><li><a href="#acceptpathinfo">AcceptPathInfo</a></li><li><a href="#accessfilename">AccessFileName</a></li><li><a href="#adddefaultcharset">AddDefaultCharset</a></li><li><a href="#addmodule">AddModule</a></li><li><a href="#allowoverride">AllowOverride</a></li><li><a href="#authname">AuthName</a></li><li><a href="#authtype">AuthType</a></li><li><a href="#contentdigest">ContentDigest</a></li><li><a href="#defaulttype">DefaultType</a></li><li><a href="#directory">Directory</a></li><li><a href="#directorymatch">DirectoryMatch</a></li><li><a href="#documentroot">DocumentRoot</a></li><li><a href="#errordocument">ErrorDocument</a></li><li><a href="#errorlog">ErrorLog</a></li><li><a href="#fileetag">FileETag</a></li><li><a href="#files">Files</a></li><li><a href="#filesmatch">FilesMatch</a></li><li><a href="#forcetype">ForceType</a></li><li><a href="#hostnamelookups">HostnameLookups</a></li><li><a href="#identitycheck">IdentityCheck</a></li><li><a href="#ifdefine">IfDefine</a></li><li><a href="#ifmodule">IfModule</a></li><li><a href="#include">Include</a></li><li><a href="#keepalive">KeepAlive</a></li><li><a href="#keepalivetimeout">KeepAliveTimeout</a></li><li><a href="#limit">Limit</a></li><li><a href="#limitexcept">LimitExcept</a></li><li><a href="#limitrequestbody">LimitRequestBody</a></li><li><a href="#limitrequestfields">LimitRequestFields</a></li><li><a href="#limitrequestfieldsize">LimitRequestFieldSize</a></li><li><a href="#limitrequestline">LimitRequestLine</a></li><li><a href="#limitxmlrequestbody">LimitXMLRequestBody</a></li><li><a href="#location">Location</a></li><li><a href="#locationmatch">LocationMatch</a></li><li><a href="#loglevel">LogLevel</a></li><li><a href="#maxkeepaliverequests">MaxKeepAliveRequests</a></li><li><a href="#namevirtualhost">NameVirtualHost</a></li><li><a href="#options">Options</a></li><li><a href="#require">Require</a></li><li><a href="#rlimitcpu">RLimitCPU</a></li><li><a href="#rlimitmem">RLimitMEM</a></li><li><a href="#rlimitnproc">RLimitNPROC</a></li><li><a href="#satisfy">Satisfy</a></li><li><a href="#scriptinterpretersource">ScriptInterpreterSource</a></li><li><a href="#serveradmin">ServerAdmin</a></li><li><a href="#serveralias">ServerAlias</a></li><li><a href="#servername">ServerName</a></li><li><a href="#serverpath">ServerPath</a></li><li><a href="#serverroot">ServerRoot</a></li><li><a href="#serversignature">ServerSignature</a></li><li><a href="#servertokens">ServerTokens</a></li><li><a href="#sethandler">SetHandler</a></li><li><a href="#setinputfilter">SetInputFilter</a></li><li><a href="#setoutputfilter">SetOutputFilter</a></li><li><a href="#timeout">TimeOut</a></li><li><a href="#usecanonicalname">UseCanonicalName</a></li><li><a href="#virtualhost">VirtualHost</a></li></ul><hr/><h2><a name="AcceptPathInfo">AcceptPathInfo</a> <a name="acceptpathinfo">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Controls whether requests can contain trailing pathname information</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>AcceptPathInfo On|Off|Default</syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>AcceptPathInfo Default</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>Available in Apache 2.0.30 and later</td></tr></table></td></tr></table><usage>
-
-    <p>This directive controls whether requests that contain trailing
-    pathname information that follows an actual filename (or
-    non-existent file in an existing directory) will be accepted or
-    rejected.  The trailing pathname information can be made
-    available to scripts in the PATH_INFO environment variable.</p>
-
-    <p>For example, assume the location <code>/test/</code> points to
-    a directory that contains only the single file
-    <code>here.html</code>.  Then requests for
-    <code>/test/here.html/more</code> and
-    <code>/test/nothere.html/more</code> both collect
-    <code>/more</code> as PATH_INFO.</p>
-
-    <p>The three possible arguments for the
-    <code class="directive">AcceptPathInfo</code> directive are:</p>
-    <dl>
-    <dt><code>off</code></dt><dd>A request will only be accepted if it
-    maps to a literal path that exists.  Therefore a request with
-    trailing pathname information after the true filename such as
-    <code>/test/here.html/more</code> in the above example will return
-    a 404 NOT FOUND error.</dd>
-
-    <dt><code>on</code></dt><dd>A request will be accepted if a
-    leading path component maps to a file that exists.  The above
-    example <code>/test/here.html/more</code> will be accepted if
-    <code>/test/here.html</code> maps to a valid file.</dd>
-    
-    <dt><code>default</code></dt><dd>The treatment of requests with
-    trailing pathname information is determined by the <a href="../handler.html">handler</a> responsible for the request.
-    The core handler for normal files defaults to rejecting PATH_INFO.
-    Handlers that serve scripts, such as <a href="mod_cgi.html">cgi-script</a> and <a href="mod_isapi.html">isapi-isa</a>, generally accept PATH_INFO by
-    default.</dd>
-    </dl>
-
-    <p>The primary purpose of the <code>AcceptPathInfo</code>
-    directive is to allow you to override the handler's choice of
-    accepting or rejecting PATH_INFO.  This override is required, for
-    example, when you use a <a href="../filter.html">filter</a>, such
-    as <a href="mod_include.html">INCLUDES</a>, to generate content
-    based on PATH_INFO.  The core handler would usually reject the
-    request, so you can use the following configuration to enable
-    such a script:</p>
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-&lt;Files "mypaths.shtml"&gt;<br>
-    Options +Includes<br>
-    SetOutputFilter INCLUDES<br>
-    AcceptPathInfo on<br>
-&lt;/Files&gt;
-</code></td></tr></table></blockquote>
-</usage><hr/><h2><a name="AccessFileName">AccessFileName</a> <a name="accessfilename">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sets the name of the .htaccess file</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>AccessFileName <em>filename</em> [<em>filename</em>] ...</syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>AccessFileName .htaccess</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr></table></td></tr></table><usage>
-    <p>When returning a document to the client the server looks for
-    the first existing access control file from this list of names
-    in every directory of the path to the document, if access
-    control files are enabled for that directory. For example:</p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-AccessFileName .acl
-</code></td></tr></table></blockquote>
-
-    <p>before returning the document
-    <code>/usr/local/web/index.html</code>, the server will read
-    <code>/.acl</code>, <code>/usr/.acl</code>,
-    <code>/usr/local/.acl</code> and <code>/usr/local/web/.acl</code>
-    for directives, unless they have been disabled with</p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-&lt;Directory /&gt;<br>
-&nbsp;&nbsp;AllowOverride None<br>
-&lt;/Directory&gt;
-</code></td></tr></table></blockquote>
-</usage><p><strong>See also </strong></p><ul><li><a href="#allowoverride" class="directive"><code class="directive">AllowOverride</code></a></li><li><a href="../configuring.html">Configuration Files</a></li></ul><hr/><h2><a name="AddDefaultCharset">AddDefaultCharset</a> <a name="adddefaultcharset">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Specifies the default character set to be added for a
-response without an explicit character set</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>AddDefaultCharset On|Off|<em>charset</em></syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>AddDefaultCharset Off</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr></table></td></tr></table><usage>
-
-    <p>This directive specifies the name of the character set that
-    will be added to any response that does not have any parameter on
-    the content type in the HTTP headers. This will override any
-    character set specified in the body of the document via a
-    <code>META</code> tag. A setting of <code>AddDefaultCharset
-    Off</code> disables this
-    functionality. <code>AddDefaultCharset On</code> enables
-    Apache's internal default charset of <code>iso-8859-1</code> as
-    required by the directive. You can also specify an alternate
-    <em>charset</em> to be used. For example:</p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-    AddDefaultCharset utf-8
-</code></td></tr></table></blockquote>
-</usage><hr/><h2><a name="AddModule">AddModule</a> <a name="addmodule">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td/></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>AddModule <em>module</em> [<em>module</em>] ...</syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr></table></td></tr></table><usage>
-    <p>The server can have modules compiled in which are not
-    actively in use. This directive can be used to enable the use
-    of those modules. The server comes with a pre-loaded list of
-    active modules; this list can be cleared with the <a href="#clearmodulelist" class="directive"><code class="directive">ClearModuleList</code></a> directive.</p>
-
-    <p>For example:</p>
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-AddDefaultCharset utf-8
-</code></td></tr></table></blockquote>
-</usage><hr/><h2><a name="AllowOverride">AllowOverride</a> <a name="allowoverride">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sets the types of directives that are allowed in
-.htaccess files</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>AllowOverride All|None|<em>directive-type</em> [<em>directive-type</em>] ...</syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>AllowOverride All</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>directory</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr></table></td></tr></table><usage>
-    <p>When the server finds an .htaccess file (as specified by <a href="#accessfilename" class="directive"><code class="directive">AccessFileName</code></a>) it needs to know
-    which directives declared in that file can override earlier
-    access information.</p>
-
-    <p>When this directive is set to <code>None</code>, then
-    .htaccess files are completely ignored. In this case, the
-    server will not even attempt to read .htaccess files in the
-    filesystem.</p>
-
-    <p>When this directive is set to <code>All</code>, then any
-    directive which has the .htaccess <a href="directive-dict.html#Context">Context</a> is allowed in
-    .htaccess files.</p>
-
-    <p>The <em>directive-type</em> can be one of the following
-    groupings of directives.</p>
-
-    <dl>
-      <dt>AuthConfig</dt>
-
-      <dd>
-
-      Allow use of the authorization directives (<a href="mod_auth_dbm.html#authdbmgroupfile" class="directive"><code class="directive">AuthDBMGroupFile</code></a>,
-      <a href="mod_auth_dbm.html#authdbmuserfile" class="directive"><code class="directive">AuthDBMUserFile</code></a>,
-      <a href="mod_auth.html#authgroupfile" class="directive"><code class="directive">AuthGroupFile</code></a>,
-      <a href="#authname" class="directive"><code class="directive">AuthName</code></a>, 
-      <a href="#authtype" class="directive"><code class="directive">AuthType</code></a>, <a href="mod_auth.html#authuserfile" class="directive"><code class="directive">AuthUserFile</code></a>, <a href="#require" class="directive"><code class="directive">Require</code></a>, <em>etc.</em>).</dd>
-
-      <dt>FileInfo</dt>
-
-      <dd>
-      Allow use of the directives controlling document types (<a href="#defaulttype" class="directive"><code class="directive">DefaultType</code></a>, <a href="#errordocument" class="directive"><code class="directive">ErrorDocument</code></a>, <a href="#forcetype" class="directive"><code class="directive">ForceType</code></a>, <a href="mod_negotiation.html#languagepriority" class="directive"><code class="directive">LanguagePriority</code></a>,
-      <a href="#sethandler" class="directive"><code class="directive">SetHandler</code></a>, <a href="#setinputfilter" class="directive"><code class="directive">SetInputFilter</code></a>, <a href="#setoutputfilter" class="directive"><code class="directive">SetOutputFilter</code></a>, and 
-      <code><a href="mod_mime.html">mod_mime</a></code> Add* and Remove*
-      directives, <em>etc.</em>).</dd>
-
-      <dt>Indexes</dt>
-
-      <dd>
-      Allow use of the directives controlling directory indexing
-      (<a href="mod_autoindex.html#adddescription" class="directive"><code class="directive">AddDescription</code></a>,
-      <a href="mod_autoindex.html#addicon" class="directive"><code class="directive">AddIcon</code></a>, <a href="mod_autoindex.html#addiconbyencoding" class="directive"><code class="directive">AddIconByEncoding</code></a>,
-      <a href="mod_autoindex.html#addiconbytype" class="directive"><code class="directive">AddIconByType</code></a>,
-      <a href="mod_autoindex.html#defaulticon" class="directive"><code class="directive">DefaultIcon</code></a>, <a href="mod_dir.html#directoryindex" class="directive"><code class="directive">DirectoryIndex</code></a>, <a href="mod_autoindex.html#fancyindexing" class="directive"><code class="directive">FancyIndexing</code></a>, <a href="mod_autoindex.html#headername" class="directive"><code class="directive">HeaderName</code></a>, <a href="mod_autoindex.html#indexignore" class="directive"><code class="directive">IndexIgnore</code></a>, <a href="mod_autoindex.html#indexoptions" class="directive"><code class="directive">IndexOptions</code></a>, <a href="mod_autoindex.html#readmename" class="directive"><code class="directive">ReadmeName</code></a>,
-      <em>etc.</em>).</dd>
-
-      <dt>Limit</dt>
-
-      <dd>
-      Allow use of the directives controlling host access (<a href="mod_access.html#allow" class="directive"><code class="directive">Allow</code></a>, <a href="mod_access.html#deny" class="directive"><code class="directive">Deny</code></a> and <a href="mod_access.html#order" class="directive"><code class="directive">Order</code></a>).</dd>
-
-      <dt>Options</dt>
-
-      <dd>
-      Allow use of the directives controlling specific directory
-      features (<a href="#options" class="directive"><code class="directive">Options</code></a> and
-      <a href="mod_include.html#xbithack" class="directive"><code class="directive">XBitHack</code></a>).</dd>
-    </dl>
-
-    <p>Example:</p>
-
-    <blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>AllowOverride AuthConfig Indexes</code></td></tr></table></blockquote>
-</usage><p><strong>See also </strong></p><ul><li><a href="#accessfilename" class="directive"><code class="directive">AccessFileName</code></a></li><li><a href="../configuring.html">Configuration Files</a></li></ul><hr/><h2><a name="AuthName">AuthName</a> <a name="authname">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sets the authorization realm for use in HTTP
-authentication</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>AuthName <em>auth-domain</em></syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>AuthConfig</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr></table></td></tr></table><usage>
-    <p>This directive sets the name of the authorization realm for a
-    directory. This realm is given to the client so that the user
-    knows which username and password to send.
-    <code class="directive">AuthName</code> takes a single argument; if the
-    realm name contains spaces, it must be enclosed in quotation
-    marks.  It must be accompanied by <a href="#authtype" class="directive"><code class="directive">AuthType</code></a> and <a href="#require" class="directive"><code class="directive">Require</code></a> directives, and directives such
-    as <a href="mod_auth.html#authuserfile" class="directive"><code class="directive">AuthUserFile</code></a> and
-    <a href="mod_auth.html#authgroupfile" class="directive"><code class="directive">AuthGroupFile</code></a> to
-    work.</p>
-
-   <p>For example:</p>
-
-   <blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>AuthName "Top Secret"</code></td></tr></table></blockquote>
-
-    <p>The string provided for the <code>AuthRealm</code> is what will
-    appear in the password dialog provided by most browsers.</p>
-</usage><p><strong>See also </strong></p><ul><li><a href="../howto/auth.html">Authentication, Authorization, and 
-    Access Control</a></li></ul><hr/><h2><a name="AuthType">AuthType</a> <a name="authtype">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Selects the type of user authentication</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>AuthType Basic|Digest</syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>AuthConfig</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr></table></td></tr></table><usage>
-    <p>This directive selects the type of user authentication for a
-    directory. Only <code>Basic</code> and <code>Digest</code> are
-    currently implemented. 
-
-     It must be accompanied by <a href="#authname" class="directive"><code class="directive">AuthName</code></a> and <a href="#require" class="directive"><code class="directive">Require</code></a> directives, and directives such
-     as <a href="mod_auth.html#authuserfile" class="directive"><code class="directive">AuthUserFile</code></a> and
-     <a href="mod_auth.html#authgroupfile" class="directive"><code class="directive">AuthGroupFile</code></a> to
-     work.</p>
-</usage><p><strong>See also </strong></p><ul><li><a href="../howto/auth.html">Authentication, Authorization,
-and Access Control</a></li></ul><hr/><h2><a name="ContentDigest">ContentDigest</a> <a name="contentdigest">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Enables the generation of Content-MD5 HTTP Response
-headers</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>ContentDigest on|off</syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>ContentDigest off</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>Options</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>Available in Apache 1.1 and later</td></tr></table></td></tr></table><usage>
-    <p>This directive enables the generation of
-    <code>Content-MD5</code> headers as defined in RFC1864
-    respectively RFC2068.</p>
-
-    <p>MD5 is an algorithm for computing a "message digest"
-    (sometimes called "fingerprint") of arbitrary-length data, with
-    a high degree of confidence that any alterations in the data
-    will be reflected in alterations in the message digest.</p>
-
-    <p>The <code>Content-MD5</code> header provides an end-to-end
-    message integrity check (MIC) of the entity-body. A proxy or
-    client may check this header for detecting accidental
-    modification of the entity-body in transit. Example header:</p>
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-   Content-MD5: AuLb7Dp1rqtRtxz2m9kRpA==
-</code></td></tr></table></blockquote>
-
-    <p>Note that this can cause performance problems on your server
-    since the message digest is computed on every request (the
-    values are not cached).</p>
-
-    <p><code>Content-MD5</code> is only sent for documents served
-    by the core, and not by any module. For example, SSI documents,
-    output from CGI scripts, and byte range responses do not have
-    this header.</p>
-</usage><hr/><h2><a name="DefaultType">DefaultType</a> <a name="defaulttype">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sets the MIME content-type that will be sent if the
-server cannot determine a type in any other way</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>DefaultType <em>MIME-type</em></syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>DefaultType text/html</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>FileInfo</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr></table></td></tr></table><usage>
-    <p>There will be times when the server is asked to provide a
-    document whose type cannot be determined by its MIME types
-    mappings.</p>
-
-    <p>The server must inform the client of the content-type of the
-    document, so in the event of an unknown type it uses the
-    <code>DefaultType</code>. For example:</p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-      <code>DefaultType image/gif</code>
-</code></td></tr></table></blockquote>
-    <p>would be appropriate for a directory which contained many gif
-    images with filenames missing the .gif extension.</p>
-
-    <p>Note that unlike <a href="#forcetype" class="directive"><code class="directive">ForceType</code></a>, this directive is only
-    provides the default mime-type. All other mime-type definitions,
-    including filename extensions, that might identify the media type
-    will override this default.</p> 
-</usage><hr/><h2><a name="Directory">&lt;Directory&gt;</a> <a name="directory">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Enclose a group of directives that apply only to the
-named file-system directory and sub-directories</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>&lt;Directory <em>directory-path</em>&gt;
-... &lt;/Directory&gt;</syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr></table></td></tr></table><usage>
-    <p><code class="directive">&lt;Directory&gt;</code> and
-    <code>&lt;/Directory&gt;</code> are used to enclose a group of
-    directives which will apply only to the named directory and
-    sub-directories of that directory. Any directive which is allowed
-    in a directory context may be used.  <em>Directory-path</em> is
-    either the full path to a directory, or a wild-card string. In a
-    wild-card string, `?' matches any single character, and `*'
-    matches any sequences of characters.  You may
-    also use `[]' character ranges like in the shell. Also as of
-    Apache 1.3 none of the wildcards match a `/' character, which more
-    closely mimics the behavior of Unix shells. Example:</p>
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-   &lt;Directory /usr/local/httpd/htdocs&gt;<br>
-&nbsp;&nbsp;Options Indexes FollowSymLinks<br>
-   &lt;/Directory&gt;<br>
-</code></td></tr></table></blockquote>
-
-    <p>Extended regular
-    expressions can also be used, with the addition of the
-    <code>~</code> character. For example:</p>
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-   &lt;Directory ~ "^/www/.*/[0-9]{3}"&gt;
-</code></td></tr></table></blockquote>
-    <p>would match directories in /www/ that consisted of three
-    numbers.</p>
-
-    <p>If multiple (non-regular expression) directory sections
-    match the directory (or its parents) containing a document,
-    then the directives are applied in the order of shortest match
-    first, interspersed with the directives from the <a href="#accessfilename">.htaccess</a> files. For example,
-    with</p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-      &lt;Directory /&gt;<br>
-       &nbsp;&nbsp;AllowOverride None<br>
-       &lt;/Directory&gt;<br>
-      <br>
-       &lt;Directory /home/*&gt;<br>
-       &nbsp;&nbsp;AllowOverride FileInfo<br>
-       &lt;/Directory&gt;
-</code></td></tr></table></blockquote>
-    <p>for access to the document <code>/home/web/dir/doc.html</code>
-    the steps are:</p>
-
-    <ul>
-      <li>Apply directive <code>AllowOverride None</code>
-      (disabling <code>.htaccess</code> files).</li>
-
-      <li>Apply directive <code>AllowOverride FileInfo</code> (for
-      directory <code>/home/web</code>).</li>
-
-      <li>Apply any FileInfo directives in
-      <code>/home/web/.htaccess</code></li>
-    </ul>
-
-    <p>Regular expressions are not considered until after all of the
-    normal sections have been applied. Then all of the regular
-    expressions are tested in the order they appeared in the
-    configuration file. For example, with</p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>&lt;Directory ~ abc$&gt;<br>
-       ... directives here ...<br>
-       &lt;/Directory&gt;<br>
-</code></td></tr></table></blockquote>
-
-    <p>The regular expression section won't be considered until after
-    all normal &lt;Directory&gt;s and <code>.htaccess</code> files
-    have been applied. Then the regular expression will match on
-    <code>/home/abc/public_html/abc</code> and be applied.</p>
-
-   <p><strong>Note that the default Apache access for
-    &lt;Directory /&gt; is <code>Allow from All</code>. This means
-    that Apache will serve any file mapped from an URL. It is
-    recommended that you change this with a block such
-    as</strong></p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
- &lt;Directory /&gt;<br>
-     &nbsp;&nbsp;Order Deny,Allow<br>
-     &nbsp;&nbsp;Deny from All<br>
- &lt;/Directory&gt;
-</code></td></tr></table></blockquote>
-
-    <p><strong>and then override this for directories you
-    <em>want</em> accessible. See the <a href="../misc/security_tips.html">Security Tips</a> page for more
-    details.</strong></p> 
-
-    <p>The directory sections typically occur in
-    the access.conf file, but they may appear in any configuration
-    file.  <code class="directive">&lt;Directory&gt;</code> directives
-    cannot nest, and cannot appear in a <a href="#limit" class="directive"><code class="directive">&lt;Limit&gt;</code></a> or <a href="#limitexcept" class="directive"><code class="directive">&lt;LimitExcept&gt;</code></a> section.</p>
-</usage><p><strong>See also </strong></p><ul><li><a href="../sections.html">How
-    Directory, Location and Files sections work</a> for an
-    explanation of how these different sections are combined when a
-    request is received</li></ul><hr/><h2><a name="DirectoryMatch">&lt;DirectoryMatch&gt;</a> <a name="directorymatch">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Enclose a group of directives that apply only to 
-file-system directories that match a regular expression and their
-subdirectories</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>&lt;Directory <em>regex</em>&gt;
-... &lt;/Directory&gt;</syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr></table></td></tr></table><usage>
-    <p><code class="directive">&lt;DirectoryMatch&gt;</code> and
-    <code>&lt;/DirectoryMatch&gt;</code> are used to enclose a group
-    of directives which will apply only to the named directory and
-    sub-directories of that directory, the same as <a href="#directory" class="directive"><code class="directive">&lt;Directory&gt;</code></a>. However, it
-    takes as an argument a regular expression. For example:</p>
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-   &lt;DirectoryMatch "^/www/.*/[0-9]{3}"&gt;
-</code></td></tr></table></blockquote>
-
-    <p>would match directories in <code>/www/</code> that consisted of three
-    numbers.</p>
-</usage><p><strong>See also </strong></p><ul><li><a href="#directory" class="directive"><code class="directive">&lt;Directory&gt;</code></a> for
-a description of how regular expressions are mixed in with normal
-<code>&lt;Directory&gt;</code>s</li><li><a href="../sections.html">How Directory, Location and Files sections
-work</a> for an explanation of how these different sections are
-combined when a request is received</li></ul><hr/><h2><a name="DocumentRoot">DocumentRoot</a> <a name="documentroot">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sets the directory that forms the main document tree visible
-from the web</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>DocumentRoot <em>directory-path</em></syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>DocumentRoot /usr/local/apache/htdocs</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr></table></td></tr></table><usage>
-    <p>This directive sets the directory from which httpd will
-    serve files. Unless matched by a directive like Alias, the
-    server appends the path from the requested URL to the document
-    root to make the path to the document. Example:</p>
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-   DocumentRoot /usr/web
-</code></td></tr></table></blockquote>
-    <p>then an access to
-    <code>http://www.my.host.com/index.html</code> refers to
-    <code>/usr/web/index.html</code>.</p>
-
-    <p>The <code class="directive">DocumentRoot</code> should be specified without
-    a trailing slash.</p>
-</usage><p><strong>See also </strong></p><ul><li><a href="../urlmapping.html">Mapping URLs to Filesystem
-Location</a></li></ul><hr/><h2><a name="ErrorDocument">ErrorDocument</a> <a name="errordocument">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Specifies what the server will return to the client
-in case of an error</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>ErrorDocument <em>error-code document</em></syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>FileInfo</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>Quoting syntax for text messages is different in Apache
-2.0</td></tr></table></td></tr></table><usage>
-    <p>In the event of a problem or error, Apache can be configured
-    to do one of four things,</p>
-
-    <ol>
-      <li>output a simple hardcoded error message</li>
-
-      <li>output a customized message</li>
-
-      <li>redirect to a local <em>URL-path</em> to handle the
-      problem/error</li>
-
-      <li>redirect to an external <em>URL</em> to handle the
-      problem/error</li>
-    </ol>
-
-    <p>The first option is the default, while options 2-4 are
-    configured using the <code class="directive">ErrorDocument</code>
-    directive, which is followed by the HTTP response code and a URL
-    or a message. Apache will sometimes offer additional information
-    regarding the problem/error.</p>
-
-    <p>URLs can begin with a slash (/) for local URLs, or be a full
-    URL which the client can resolve. Alternatively, a message can
-    be provided to be displayed by the browser. Examples:</p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-      ErrorDocument 500
-      http://foo.example.com/cgi-bin/tester<br>
-       ErrorDocument 404 /cgi-bin/bad_urls.pl<br>
-       ErrorDocument 401 /subscription_info.html<br>
-       ErrorDocument 403 "Sorry can't allow you access
-      today"
-</code></td></tr></table></blockquote>
-
-    <p>Note that when you specify an <code class="directive">ErrorDocument</code>
-    that points to a remote URL (ie. anything with a method such as
-    "http" in front of it), Apache will send a redirect to the
-    client to tell it where to find the document, even if the
-    document ends up being on the same server. This has several
-    implications, the most important being that the client will not
-    receive the original error status code, but instead will
-    receive a redirect status code. This in turn can confuse web
-    robots and other clients which try to determine if a URL is
-    valid using the status code. In addition, if you use a remote
-    URL in an <code>ErrorDocument 401</code>, the client will not
-    know to prompt the user for a password since it will not
-    receive the 401 status code. Therefore, <strong>if you use an
-    "ErrorDocument 401" directive then it must refer to a local
-    document.</strong></p>
-
-    <p>Prior to version 2.0, messages were indicated by prefixing
-    them with a single unmatched double quote character.</p>
-</usage><p><strong>See also </strong></p><ul><li><a href="../custom-error.html">documentation of
-    customizable responses</a></li></ul><hr/><h2><a name="ErrorLog">ErrorLog</a> <a name="errorlog">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sets the name of the file to which the server
-will log errors</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax> ErrorLog <em>file-path</em>|syslog[:<em>facility</em>]</syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>ErrorLog logs/error_log (Unix)
-ErrorLog logs/error.log (Windows and OS/2)</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr></table></td></tr></table><usage>
-    <p>The <code class="directive">ErrorLog</code> directive sets the name of
-    the file to which the server will log any errors it encounters. If
-    the <em>file-path</em> does not begin with a slash (/) then it is
-    assumed to be relative to the <a href="#serverroot" class="directive"><code class="directive">ServerRoot</code></a>. If the <em>file-path</em>
-    begins with a pipe (|) then it is assumed to be a command to spawn
-    to handle the error log.</p>
-
-    <p>Using <code>syslog</code> instead of a filename enables logging
-    via syslogd(8) if the system supports it. The default is to use
-    syslog facility <code>local7</code>, but you can override this by
-    using the <code>syslog:</code><em>facility</em> syntax where
-    <em>facility</em> can be one of the names usually documented in
-    syslog(1).</p>
-
-    <p>SECURITY: See the <a href="../misc/security_tips.html#serverroot">security tips</a>
-    document for details on why your security could be compromised
-    if the directory where logfiles are stored is writable by
-    anyone other than the user that starts the server.</p>
-</usage><p><strong>See also </strong></p><ul><li><a href="#loglevel" class="directive"><code class="directive">LogLevel</code></a></li><li><a href="../logs.html">Apache Log Files</a></li></ul><hr/><h2><a name="FileETag">FileETag</a> <a name="fileetag">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Configures the file attributes used to create the ETag
-HTTP response header</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>FileETag <em>component</em> ...</syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>FileInfo</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr></table></td></tr></table><usage>
-    <p>
-    The <code class="directive">FileETag</code> directive configures the file
-    attributes that are used to create the ETag (entity tag) response
-    header field when the document is based on a file.  (The ETag
-    value is used in cache management to save network bandwidth.)  In
-    Apache 1.3.22 and earlier, the ETag value was <em>always</em> formed
-    from the file's inode, size, and last-modified time (mtime).  The
-    FileETag directive allows you to choose which of these -- if any
-    -- should be used.  The recognized keywords are:
-    </p>
-    <dl>
-     <dt><strong>INode</strong></dt>
-     <dd>The file's i-node number will be included in the calculation</dd>
-     <dt><strong>MTime</strong></dt>
-     <dd>The date and time the file was last modified will be included</dd>
-     <dt><strong>Size</strong></dt>
-     <dd>The number of bytes in the file will be included</dd>
-     <dt><strong>All</strong></dt>
-     <dd>All available fields will be used (equivalent to
-      '<code>FileETag&nbsp;INode&nbsp;MTime&nbsp;Size</code>')</dd>
-     <dt><strong>None</strong></dt>
-     <dd>If a document is file-based, no ETag field will be included in the
-      response</dd>
-    </dl>
-    <p>
-    The INode, MTime, and Size keywords may be prefixed with either '+'
-    or '-', which allow changes to be made to the default setting
-    inherited from a broader scope.  Any keyword appearing without
-    such a prefix immediately and completely cancels the inherited
-    setting.
-    </p>
-    <p>
-    If a directory's configuration includes
-    '<code>FileETag&nbsp;INode&nbsp;MTime&nbsp;Size</code>', and a
-    subdirectory's includes '<code>FileETag&nbsp;-INode</code>',
-    the setting for that subdirectory (which will be inherited by
-    any sub-subdirectories that don't override it) will be equivalent to
-    '<code>FileETag&nbsp;MTime&nbsp;Size</code>'.
-    </p>
-</usage><hr/><h2><a name="Files">&lt;Files&gt;</a> <a name="files">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Contains that directives that apply to matched
-filenames</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>&lt;Files <em>filename</em>&gt; ... &lt;/Files&gt;</syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr></table></td></tr></table><usage>
-    <p>The <code class="directive">&lt;Files&gt;</code> directive
-    provides for access control by filename. It is comparable to the
-    <a href="#directory" class="directive"><code class="directive">Directory</code></a>
-    directive and <a href="#location" class="directive"><code class="directive">Location</code></a> directives. It should be
-    matched with a <code>&lt;/Files&gt;</code> directive. The
-    directives given within this section will be applied to any object
-    with a basename (last component of filename) matching the
-    specified filename. <code class="directive">&lt;Files&gt;</code>
-    sections are processed in the order they appear in the
-    configuration file, after the <a href="#directory" class="directive"><code class="directive">&lt;Directory&gt;</code></a> sections and
-    <code>.htaccess</code> files are read, but before <a href="#location" class="directive"><code class="directive">&lt;Location&gt;</code></a> sections. Note
-    that <code class="directive">&lt;Files&gt;</code> can be nested
-    inside <a href="#directory" class="directive"><code class="directive">&lt;Directory&gt;</code></a> sections to restrict the
-    portion of the filesystem they apply to.</p>
-
-    <p>The <em>filename</em> argument should include a filename, or
-    a wild-card string, where `?' matches any single character, and
-    `*' matches any sequences of characters. Extended regular
-    expressions can also be used, with the addition of the
-    <code>~</code> character. For example:</p>
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-   &lt;Files ~ "\.(gif|jpe?g|png)$"&gt;
-</code></td></tr></table></blockquote>
-    <p>would match most common Internet graphics formats. In Apache 1.3
-    and later, <a href="#filesmatch" class="directive"><code class="directive">&lt;FilesMatch&gt;</code></a> is preferred, however.</p>
-
-    <p>Note that unlike <a href="#directory" class="directive"><code class="directive">&lt;Directory&gt;</code></a> and <a href="#location" class="directive"><code class="directive">&lt;Location&gt;</code></a> sections, <code class="directive">&lt;Files&gt;</code> sections can be used inside
-    .htaccess files. This allows users to control access to their own
-    files, at a file-by-file level.</p>
-
-</usage><p><strong>See also </strong></p><ul><li><a href="../sections.html">How
-    Directory, Location and Files sections work</a> for an
-    explanation of how these different sections are combined when a
-    request is received</li></ul><hr/><h2><a name="FilesMatch">&lt;FilesMatch&gt;</a> <a name="filesmatch">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Contains that directives that apply to regular-expression matched
-filenames</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>&lt;FilesMatch <em>regex</em>&gt; ... &lt;/FilesMatch&gt;</syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr></table></td></tr></table><usage>
-    <p>The <code class="directive">&lt;FilesMatch&gt;</code> directive
-    provides for access control by filename, just as the <a href="#files" class="directive"><code class="directive">&lt;Files&gt;</code></a> directive
-    does. However, it accepts a regular expression. For example:</p>
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-   &lt;FilesMatch "\.(gif|jpe?g|png)$"&gt;
-</code></td></tr></table></blockquote>
-
-    <p>would match most common Internet graphics formats.</p>
-</usage><p><strong>See also </strong></p><ul><li><a href="../sections.html">How
-    Directory, Location and Files sections work</a> for an
-    explanation of how these different sections are combined when a
-    request is received</li></ul><hr/><h2><a name="ForceType">ForceType</a> <a name="forcetype">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Forces all matching files to be served with the specified
-MIME content-type</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>ForceType <em>mime-type</em></syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>Moved to the core in Apache 2.0</td></tr></table></td></tr></table><usage>
-    <p>When placed into an <code>.htaccess</code> file or a
-    <a href="#directory" class="directive"><code class="directive">&lt;Directory&gt;</code></a>, or
-    <a href="#location" class="directive"><code class="directive">&lt;Location&gt;</code></a> or 
-    <a href="#files" class="directive"><code class="directive">&lt;Files&gt;</code></a>
-    section, this directive forces all matching files to be served
-    with the content type identification given by
-    <em>mime-type</em>. For example, if you had a directory full of
-    GIF files, but did not want to label them all with ".gif", you
-    might want to use:</p>
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-    ForceType image/gif
-</code></td></tr></table></blockquote>
-
-    <p>Note that unlike <a href="#defaulttype" class="directive"><code class="directive">DefaultType</code></a>,
-    this directive overrides all mime-type associations, including
-    filename extensions, that might identify the media type.</p>
-</usage><hr/><h2><a name="HostnameLookups">HostnameLookups</a> <a name="hostnamelookups">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Enables DNS lookups on client IP addresses</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>HostnameLookups on|off|double</syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>HostnameLookups off</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr></table></td></tr></table><usage>
-    <p>This directive enables DNS lookups so that host names can be
-    logged (and passed to CGIs/SSIs in <code>REMOTE_HOST</code>).
-    The value <code>double</code> refers to doing double-reverse
-    DNS. That is, after a reverse lookup is performed, a forward
-    lookup is then performed on that result. At least one of the ip
-    addresses in the forward lookup must match the original
-    address. (In "tcpwrappers" terminology this is called
-    <code>PARANOID</code>.)</p>
-
-    <p>Regardless of the setting, when <code><a href="mod_access.html">mod_access</a></code> is
-    used for controlling access by hostname, a double reverse lookup
-    will be performed.  This is necessary for security. Note that the
-    result of this double-reverse isn't generally available unless you
-    set <code>HostnameLookups double</code>. For example, if only
-    <code>HostnameLookups on</code> and a request is made to an object
-    that is protected by hostname restrictions, regardless of whether
-    the double-reverse fails or not, CGIs will still be passed the
-    single-reverse result in <code>REMOTE_HOST</code>.</p>
-
-    <p>The default is off in order to save the network
-    traffic for those sites that don't truly need the reverse
-    lookups done. It is also better for the end users because they
-    don't have to suffer the extra latency that a lookup entails.
-    Heavily loaded sites should leave this directive
-    <code>off</code>, since DNS lookups can take considerable
-    amounts of time. The utility <a href="../programs/logresolve.html">logresolve</a>, provided in
-    the <em>/support</em> directory, can be used to look up host
-    names from logged IP addresses offline.</p>
-</usage><hr/><h2><a name="IdentityCheck">IdentityCheck</a> <a name="identitycheck">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Enables logging of the RFC1413 identity of the remote 
-user</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>IdentityCheck on|off</syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>IdentityCheck off</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td/></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr></table></td></tr></table><usage>
-    <p>This directive enables RFC1413-compliant logging of the
-    remote user name for each connection, where the client machine
-    runs identd or something similar. This information is logged in
-    the access log.</p>
-
-    <p>The information should not be trusted in any way except for
-    rudimentary usage tracking.</p>
-
-    <p>Note that this can cause serious latency problems accessing
-    your server since every request requires one of these lookups
-    to be performed. When firewalls are involved each lookup might
-    possibly fail and add 30 seconds of latency to each hit. So in
-    general this is not very useful on public servers accessible
-    from the Internet.</p>
-</usage><hr/><h2><a name="IfDefine">&lt;IfDefine&gt;</a> <a name="ifdefine">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Encloses directives that will be processed only
-if a test is true at startup</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>&lt;IfDefine [!]<em>parameter-name</em>&gt; <em>...</em>
-    &lt;/IfDefine&gt;</syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr></table></td></tr></table><usage>
-    <p>The <code>&lt;IfDefine
-    <em>test</em>&gt;...&lt;/IfDefine&gt;</code> section is used to
-    mark directives that are conditional. The directives within an
-    <code class="directive">&lt;IfDefine&gt;</code> section are only
-    processed if the <em>test</em> is true. If <em>test</em> is false,
-    everything between the start and end markers is ignored.</p>
-
-    <p>The <em>test</em> in the <code class="directive">&lt;IfDefine&gt;</code> section directive can be one
-    of two forms:</p>
-
-    <ul>
-      <li><em>parameter-name</em></li>
-
-      <li><code>!</code><em>parameter-name</em></li>
-    </ul>
-
-    <p>In the former case, the directives between the start and end
-    markers are only processed if the parameter named
-    <em>parameter-name</em> is defined. The second format reverses
-    the test, and only processes the directives if
-    <em>parameter-name</em> is <strong>not</strong> defined.</p>
-
-    <p>The <em>parameter-name</em> argument is a define as given on
-    the <code>httpd</code> command line via
-    <code>-D</code><em>parameter-</em>, at the time the server was
-    started.</p>
-
-    <p><code class="directive">&lt;IfDefine&gt;</code> sections are
-    nest-able, which can be used to implement simple
-    multiple-parameter tests. Example:</p>
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code><pre>
-  $ httpd -DReverseProxy ...
-
-  # httpd.conf
-  &lt;IfDefine ReverseProxy&gt;
-  LoadModule rewrite_module modules/mod_rewrite.so
-  LoadModule proxy_module   modules/libproxy.so
-  &lt;/IfDefine&gt;
-</pre></code></td></tr></table></blockquote>
-
-</usage><hr/><h2><a name="IfModule">&lt;IfModule&gt;</a> <a name="ifmodule">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Encloses directives that are processed conditional on the
-presence of absence of a specific module</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>&lt;IfModule [!]<em>module-name</em>&gt; <em>...</em>
-    &lt;/IfModule&gt;</syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr></table></td></tr></table><usage>
-    <p>The <code>&lt;IfModule
-    <em>test</em>&gt;...&lt;/IfModule&gt;</code> section is used to
-    mark directives that are conditional. The directives within an
-    <code class="directive">&lt;IfModule&gt;</code> section are only
-    processed if the <em>test</em> is true. If <em>test</em> is false,
-    everything between the start and end markers is ignored.</p>
-
-    <p>The <em>test</em> in the <code class="directive">&lt;IfModule&gt;</code> section directive can be one
-    of two forms:</p>
-
-    <ul>
-      <li><em>module name</em></li>
-
-      <li>!<em>module name</em></li>
-    </ul>
-
-    <p>In the former case, the directives between the start and end
-    markers are only processed if the module named <em>module
-    name</em> is included in Apache -- either compiled in or
-    dynamically loaded using <a href="mod_so.html#loadmodule" class="directive"><code class="directive">LoadModule</code></a>. The second format
-    reverses the test, and only processes the directives if <em>module
-    name</em> is <strong>not</strong> included.</p>
-
-    <p>The <em>module name</em> argument is the file name of the
-    module, at the time it was compiled.
-    For example, <code>mod_rewrite.c</code>.</p>
-
-    <p><code class="directive">&lt;IfModule&gt;</code> sections are
-    nest-able, which can be used to implement simple multiple-module
-    tests.</p>
-</usage><hr/><h2><a name="Include">Include</a> <a name="include">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Includes other configuration files from within
-the server configuration files</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>Include <em>file-path</em>|<em>directory-path</em></syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr></table></td></tr></table><usage>
-    <p>This directive allows inclusion of other configuration files
-    from within the server configuration files.</p>
-
-    <p>If <code class="directive">Include</code> points to a directory, rather than a
-    file, Apache will read all files in that directory, and any
-    subdirectory, and parse those as configuration files.</p>
-
-    <p>The file path specified may be a fully qualified path (i.e.
-    starting with a slash), or may be relative to the 
-    <a href="#serverroot" class="directive"><code class="directive">ServerRoot</code></a> directory.</p>
-
-    <p>Examples:</p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-     Include /usr/local/apache/conf/ssl.conf<br>
-     Include /usr/local/apache/conf/vhosts/
-</code></td></tr></table></blockquote>
-
-     <p>Or, providing paths relative to your <code>ServerRoot</code>
-     directory:</p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-     Include conf/ssl.conf<br>
-     Include conf/vhosts/
-</code></td></tr></table></blockquote>
-
-     <p>Make sure that an included directory does not contain any stray
-     files, such as editor temporary files, for example, as Apache will
-     attempt to read them in and use the contents as configuration
-     directives, which may cause the server to fail on start up.
-     Running <code>apachectl configtest</code> will give you a list of
-     the files that are being processed during the configuration
-     check:</p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code><pre>
- root@host# apachectl configtest
-  Processing config directory: /usr/local/apache/conf/vhosts
-  Processing config file: /usr/local/apache/conf/vhosts/vhost1
-  Processing config file: /usr/local/apache/conf/vhosts/vhost2
- Syntax OK
-</pre></code></td></tr></table></blockquote>
-
-     <p>This will help in verifying that you are getting only the files
-     that you intended as part of your configuration.</p>
-</usage><p><strong>See also </strong></p><ul><li><a href="../programs/apachectl.html">apachectl</a></li></ul><hr/><h2><a name="KeepAlive">KeepAlive</a> <a name="keepalive">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Turns on or off HTTP persistent connections.</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>KeepAlive on|off</syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>KeepAlive On</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr></table></td></tr></table><usage>
-    <p>The Keep-Alive extension to HTTP/1.0 and the persistent
-    connection feature of HTTP/1.1 provide long-lived HTTP sessions
-    which allow multiple requests to be sent over the same TCP
-    connection. In some cases this has been shown to result in an
-    almost 50% speedup in latency times for HTML documents with
-    many images. To enable Keep-Alive connections in Apache 1.2 and
-    later, set <code>KeepAlive On</code>.</p>
-
-    <p>For HTTP/1.0 clients, Keep-Alive connections will only be
-    used if they are specifically requested by a client. In
-    addition, a Keep-Alive connection with an HTTP/1.0 client can
-    only be used when the length of the content is known in
-    advance. This implies that dynamic content such as CGI output,
-    SSI pages, and server-generated directory listings will
-    generally not use Keep-Alive connections to HTTP/1.0 clients.
-    For HTTP/1.1 clients, persistent connections are the default
-    unless otherwise specified. If the client requests it, chunked
-    encoding will be used in order to send content of unknown
-    length over persistent connections.</p>
-</usage><p><strong>See also </strong></p><ul><li><a href="#maxkeepaliverequests" class="directive"><code class="directive">MaxKeepAliveRequests</code></a></li></ul><hr/><h2><a name="KeepAliveTimeout">KeepAliveTimeout</a> <a name="keepalivetimeout">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sets the amount of time the server will wait for subsequent
-requests on a persistent connection</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>KeepAliveTimeout <em>seconds</em></syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>KeepAliveTimeout 15</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr></table></td></tr></table><usage>
-    <p>The number of seconds Apache will wait for a subsequent
-    request before closing the connection. Once a request has been
-    received, the timeout value specified by the
-    <a href="#timeout" class="directive"><code class="directive">Timeout</code></a> directive applies.</p>
-
-    <p>Setting <code class="directive">KeepAliveTimeout</code> to a high value
-    may cause performance problems in heavily loaded servers. The
-    higher the timeout, the more server processes will be kept
-    occupied waiting on connections with idle clients.</p>
-</usage><hr/><h2><a name="Limit">&lt;Limit&gt;</a> <a name="limit">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Restrict access controls to only certain HTTP
-methods</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>&lt;Limit <em>method</em> [<em>method</em>] ... &gt; ...
-    &lt;/Limit&gt;</syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr></table></td></tr></table><usage>
-    <p>Access controls are normally effective for
-    <strong>all</strong> access methods, and this is the usual
-    desired behavior. <strong>In the general case, access control
-    directives should not be placed within a
-    <code class="directive">&lt;limit&gt;</code> section.</strong></p>
-
-    <p>The purpose of the <code class="directive">&lt;Limit&gt;</code>
-    directive is to restrict the effect of the access controls to the
-    nominated HTTP methods. For all other methods, the access
-    restrictions that are enclosed in the <code>&lt;Limit&gt;</code>
-    bracket <strong>will have no effect</strong>. The following
-    example applies the access control only to the methods POST, PUT,
-    and DELETE, leaving all other methods unprotected:</p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-      <code>&lt;Limit POST PUT DELETE&gt;<br>
-       &nbsp;&nbsp;Require valid-user<br>
-       &lt;/Limit&gt;</code>
-</code></td></tr></table></blockquote>
-    <p>The method names listed can be one or more of: GET, POST, PUT,
-    DELETE, CONNECT, OPTIONS, TRACE, PATCH, PROPFIND, PROPPATCH,
-    MKCOL, COPY, MOVE, LOCK, and UNLOCK. <strong>The method name is
-    case-sensitive.</strong> If GET is used it will also restrict
-    HEAD requests.</p>
-</usage><hr/><h2><a name="LimitExcept">&lt;LimitExcept&gt;</a> <a name="limitexcept">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Restrict access controls to all HTTP methods
-except the named ones</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>&lt;LimitExcept <em>method</em> [<em>method</em>] ... &gt; ...
-    &lt;/LimitExcept&gt;</syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr></table></td></tr></table><usage>
-    <p><code class="directive">&lt;LimitExcept&gt;</code> and
-    <code>&lt;/LimitExcept&gt;</code> are used to enclose a group of
-    access control directives which will then apply to any HTTP access
-    method <strong>not</strong> listed in the arguments; i.e., it is
-    the opposite of a <a href="#limit" class="directive"><code class="directive">&lt;Limit&gt;</code></a> section and can be used to control
-    both standard and nonstandard/unrecognized methods. See the
-    documentation for <a href="#limit" class="directive"><code class="directive">&lt;Limit&gt;</code></a> for more details.</p>
-</usage><hr/><h2><a name="LimitRequestBody">LimitRequestBody</a> <a name="limitrequestbody">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Restricts the total size of the HTTP request body sent
-from the client</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>LimitRequestBody <em>bytes</em></syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>LimitRequestBody 0</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr></table></td></tr></table><usage>
-    <p>This directive specifies the number of <em>bytes</em> from 0
-    (meaning unlimited) to 2147483647 (2GB) that are allowed in a
-    request body. The default value is defined by the compile-time
-    constant <code>DEFAULT_LIMIT_REQUEST_BODY</code> (0 as
-    distributed).</p>
-
-    <p>The <code class="directive">LimitRequestBody</code> directive allows
-    the user to set a limit on the allowed size of an HTTP request
-    message body within the context in which the directive is given
-    (server, per-directory, per-file or per-location). If the client
-    request exceeds that limit, the server will return an error
-    response instead of servicing the request. The size of a normal
-    request message body will vary greatly depending on the nature of
-    the resource and the methods allowed on that resource. CGI scripts
-    typically use the message body for passing form information to the
-    server. Implementations of the PUT method will require a value at
-    least as large as any representation that the server wishes to
-    accept for that resource.</p>
-
-    <p>This directive gives the server administrator greater
-    control over abnormal client request behavior, which may be
-    useful for avoiding some forms of denial-of-service
-    attacks.</p>
-</usage><hr/><h2><a name="LimitRequestFields">LimitRequestFields</a> <a name="limitrequestfields">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Limits the number of HTTP request header fields that 
-will be accepted from the client</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>LimitRequestFields <em>number</em></syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>LimitRequestFields 100</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr></table></td></tr></table><usage>
-    <p><em>Number</em> is an integer from 0 (meaning unlimited) to
-    32767. The default value is defined by the compile-time
-    constant <code>DEFAULT_LIMIT_REQUEST_FIELDS</code> (100 as
-    distributed).</p>
-
-    <p>The <code class="directive">LimitRequestFields</code> directive allows
-    the server administrator to modify the limit on the number of
-    request header fields allowed in an HTTP request. A server needs
-    this value to be larger than the number of fields that a normal
-    client request might include. The number of request header fields
-    used by a client rarely exceeds 20, but this may vary among
-    different client implementations, often depending upon the extent
-    to which a user has configured their browser to support detailed
-    content negotiation. Optional HTTP extensions are often expressed
-    using request header fields.</p>
-
-    <p>This directive gives the server administrator greater
-    control over abnormal client request behavior, which may be
-    useful for avoiding some forms of denial-of-service attacks.
-    The value should be increased if normal clients see an error
-    response from the server that indicates too many fields were
-    sent in the request.</p>
-</usage><hr/><h2><a name="LimitRequestFieldSize">LimitRequestFieldSize</a> <a name="limitrequestfieldsize">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Limits the size of the HTTP request header allowed from the
-client</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>LimitRequestFieldsize <em>bytes</em></syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>LimitRequestFieldsize 8190</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr></table></td></tr></table><usage>
-    <p>This directive specifies the number of <em>bytes</em> from 0
-    to the value of the compile-time constant
-    <code>DEFAULT_LIMIT_REQUEST_FIELDSIZE</code> (8190 as
-    distributed) that will be allowed in an HTTP request
-    header.</p>
-
-    <p>The <code class="directive">LimitRequestFieldsize</code> directive
-    allows the server administrator to reduce the limit on the allowed
-    size of an HTTP request header field below the normal input buffer
-    size compiled with the server. A server needs this value to be
-    large enough to hold any one header field from a normal client
-    request. The size of a normal request header field will vary
-    greatly among different client implementations, often depending
-    upon the extent to which a user has configured their browser to
-    support detailed content negotiation.</p>
-
-    <p>This directive gives the server administrator greater
-    control over abnormal client request behavior, which may be
-    useful for avoiding some forms of denial-of-service attacks.
-    Under normal conditions, the value should not be changed from
-    the default.</p>
-</usage><hr/><h2><a name="LimitRequestLine">LimitRequestLine</a> <a name="limitrequestline">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Limit the size of the HTTP request line that will be accepted
-from the client</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>LimitRequestLine <em>bytes</em></syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>LimitRequestLine 8190</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr></table></td></tr></table><usage>
-    <p>This directive sets the number of <em>bytes</em> from 0 to
-    the value of the compile-time constant
-    <code>DEFAULT_LIMIT_REQUEST_LINE</code> (8190 as distributed)
-    that will be allowed on the HTTP request-line.</p>
-
-    <p>The <code class="directive">LimitRequestLine</code> directive allows
-    the server administrator to reduce the limit on the allowed size
-    of a client's HTTP request-line below the normal input buffer size
-    compiled with the server. Since the request-line consists of the
-    HTTP method, URI, and protocol version, the
-    <code class="directive">LimitRequestLine</code> directive places a
-    restriction on the length of a request-URI allowed for a request
-    on the server. A server needs this value to be large enough to
-    hold any of its resource names, including any information that
-    might be passed in the query part of a GET request.</p>
-
-    <p>This directive gives the server administrator greater
-    control over abnormal client request behavior, which may be
-    useful for avoiding some forms of denial-of-service attacks.
-    Under normal conditions, the value should not be changed from
-    the default.</p>
-</usage><hr/><h2><a name="LimitXMLRequestBody">LimitXMLRequestBody</a> <a name="limitxmlrequestbody">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Limits the size of an XML-based request body</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>LimitXMLRequestBody <em>number</em></syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>LimitXMLRequestBody 1000000</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr></table></td></tr></table><usage>
-    <p>Limit (in bytes) on maximum size of an XML-based request
-    body. A value of <code>0</code> will disable any checking.</p>
-</usage><hr/><h2><a name="Location">&lt;Location&gt;</a> <a name="location">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Applies the enclosed directives only to matching
-URLs</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>&lt;Location
-    <em>URL-path</em>|<em>URL</em>&gt; ... &lt;/Location&gt;</syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr></table></td></tr></table><usage>
-    <p>The <code class="directive">&lt;Location&gt;</code> directive
-    provides for access control by URL. It is similar to the
-    <a href="#directory" class="directive"><code class="directive">&lt;Directory&gt;</code></a>
-    directive, and starts a subsection which is terminated with a
-    <code>&lt;/Location&gt;</code> directive. <code class="directive">&lt;Location&gt;</code> sections are processed in the
-    order they appear in the configuration file, after the <a href="#directory" class="directive"><code class="directive">&lt;Directory&gt;</code></a> sections and
-    <code>.htaccess</code> files are read, and after the <a href="#files" class="directive"><code class="directive">&lt;Files&gt;</code></a> sections.</p>
-
-    <p>Note that URLs do not have to line up with the filesystem at
-    all, it should be emphasized that &lt;Location&gt; operates
-    completely outside the filesystem.</p>
-
-    <p>For all origin (non-proxy) requests, the URL to be matched
-    is of the form <code>/path/</code>, and you should not include
-    any <code>http://servername</code> prefix. For proxy requests,
-    the URL to be matched is of the form
-    <code>scheme://servername/path</code>, and you must include the
-    prefix.</p>
-
-    <p>The URL may use wildcards In a wild-card string, `?' matches
-    any single character, and `*' matches any sequences of
-    characters.</p>
-
-    <p>Extended regular
-    expressions can also be used, with the addition of the
-    <code>~</code> character. For example:</p>
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-   &lt;Location ~ "/(extra|special)/data"&gt;
-</code></td></tr></table></blockquote>
-
-    <p>would match URLs that contained the substring "/extra/data" or
-    "/special/data". In Apache 1.3 and above, a new directive
-    <a href="#locationmatch" class="directive"><code class="directive">&lt;LocationMatch&gt;</code></a>
-    exists which behaves identical to the regex version of
-    <code class="directive">&lt;Location&gt;</code>.</p>
-
-    <p>The <code class="directive">&lt;Location&gt;</code>
-    functionality is especially useful when combined with the
-    <a href="#sethandler" class="directive"><code class="directive">SetHandler</code></a>
-    directive. For example, to enable status requests, but allow them
-    only from browsers at foo.com, you might use:</p>
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-    &lt;Location /status&gt;<br>
-    SetHandler server-status<br>
-    Order Deny,Allow<br>
-    Deny from all<br>
-    Allow from .foo.com<br>
-    &lt;/Location&gt;
-</code></td></tr></table></blockquote>
-
-<blockquote><table><tr><td bgcolor="#e0e5f5"><p align="center"><strong>Note about / (slash)</strong></p> <p>The slash character has
-special meaning depending on where in a URL it appears. People may be
-used to its behavior in the filesystem where multiple adjacent slashes
-are frequently collapsed to a single slash (<em>i.e.</em>,
-<code>/home///foo</code> is the same as <code>/home/foo</code>). In
-URL-space this is not necessarily true. The <a href="#locationmatch" class="directive"><code class="directive">&lt;LocationMatch&gt;</code></a> directive and the regex
-version of <code class="directive">&lt;Location&gt;</code> require you
-to explicitly specify multiple slashes if that is your intention.  For
-example, <code>&lt;LocationMatch ^/abc&gt;</code> would match the
-request URL <code>/abc</code> but not the request URL
-<code>//abc</code>. The (non-regex) <code class="directive">&lt;Location&gt;</code> directive behaves similarly when
-used for proxy requests. But when (non-regex) <code class="directive">&lt;Location&gt;</code> is used for non-proxy requests it
-will implicitly match multiple slashes with a single slash. For
-example, if you specify <code>&lt;Location /abc/def&gt;</code> and the
-request is to <code>/abc//def</code> then it will match.</p>
-</td></tr></table></blockquote>
-</usage><p><strong>See also </strong></p><ul><li><a href="../sections.html">How
-    Directory, Location and Files sections work</a> for an
-    explanation of how these different sections are combined when a
-    request is received</li></ul><hr/><h2><a name="LocationMatch">&lt;LocationMatch&gt;</a> <a name="locationmatch">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Applies the enclosed directives only to regular-expression 
-matching URLs</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>&lt;LocationMatch
-    <em>regex</em>&gt; ... &lt;/Location&gt;</syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr></table></td></tr></table><usage>
-    <p>The <code class="directive">&lt;LocationMatch&gt;</code> directive
-    provides for access control by URL, in an identical manner to
-    <a href="#location" class="directive"><code class="directive">&lt;Location&gt;</code></a>. However, it takes a regular
-    expression as an argument instead of a simple string.  For
-    example:</p>
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-   &lt;LocationMatch "/(extra|special)/data"&gt;
-</code></td></tr></table></blockquote>
-
-    <p>would match URLs that contained the substring "/extra/data"
-    or "/special/data".</p>
-</usage><p><strong>See also </strong></p><ul><li><a href="../sections.html">How
-    Directory, Location and Files sections work</a> for an
-    explanation of how these different sections are combined when a
-    request is received</li></ul><hr/><h2><a name="LogLevel">LogLevel</a> <a name="loglevel">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Controls the verbosity of the ErrorLog</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>LogLevel <em>level</em></syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>LogLevel warn</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr></table></td></tr></table><usage>
-    <p><code class="directive">LogLevel</code> adjusts the verbosity of the
-    messages recorded in the error logs (see <a href="#errorlog" class="directive"><code class="directive">ErrorLog</code></a> directive). The following
-    <em>level</em>s are available, in order of decreasing
-    significance:</p>
-
-    <table>
-      <tr>
-        <th><strong>Level</strong> </th>
-
-        <th><strong>Description</strong> </th>
-      </tr>
-
-      <tr>
-        <th>
-        </th>
-
-        <th><strong>Example</strong> </th>
-      </tr>
-
-      <tr>
-        <td><code>emerg</code> </td>
-
-        <td>Emergencies - system is unusable.</td>
-      </tr>
-
-      <tr>
-        <td>
-        </td>
-
-        <td>"Child cannot open lock file. Exiting"</td>
-      </tr>
-
-      <tr>
-        <td><code>alert</code> </td>
-
-        <td>Action must be taken immediately.</td>
-      </tr>
-
-      <tr>
-        <td>
-        </td>
-
-        <td>"getpwuid: couldn't determine user name from uid"</td>
-      </tr>
-
-      <tr>
-        <td><code>crit</code> </td>
-
-        <td>Critical Conditions.</td>
-      </tr>
-
-      <tr>
-        <td>
-        </td>
-
-        <td>"socket: Failed to get a socket, exiting child"</td>
-      </tr>
-
-      <tr>
-        <td><code>error</code> </td>
-
-        <td>Error conditions.</td>
-      </tr>
-
-      <tr>
-        <td>
-        </td>
-
-        <td>"Premature end of script headers"</td>
-      </tr>
-
-      <tr>
-        <td><code>warn</code> </td>
-
-        <td>Warning conditions.</td>
-      </tr>
-
-      <tr>
-        <td>
-        </td>
-
-        <td>"child process 1234 did not exit, sending another
-        SIGHUP"</td>
-      </tr>
-
-      <tr>
-        <td><code>notice</code> </td>
-
-        <td>Normal but significant condition.</td>
-      </tr>
-
-      <tr>
-        <td>
-        </td>
-
-        <td>"httpd: caught SIGBUS, attempting to dump core in
-        ..."</td>
-      </tr>
-
-      <tr>
-        <td><code>info</code> </td>
-
-        <td>Informational.</td>
-      </tr>
-
-      <tr>
-        <td>
-        </td>
-
-        <td>"Server seems busy, (you may need to increase
-        StartServers, or Min/MaxSpareServers)..."</td>
-      </tr>
-
-      <tr>
-        <td><code>debug</code> </td>
-
-        <td>Debug-level messages</td>
-      </tr>
-
-      <tr>
-        <td>
-        </td>
-
-        <td>"Opening config file ..."</td>
-      </tr>
-    </table>
-
-    <p>When a particular level is specified, messages from all
-    other levels of higher significance will be reported as well.
-    <em>E.g.</em>, when <code>LogLevel info</code> is specified,
-    then messages with log levels of <code>notice</code> and
-    <code>warn</code> will also be posted.</p>
-
-    <p>Using a level of at least <code>crit</code> is
-    recommended.</p>
-</usage><hr/><h2><a name="MaxKeepAliveRequests">MaxKeepAliveRequests</a> <a name="maxkeepaliverequests">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sets the number of requests allowed on a persistent 
-connection</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>MaxKeepAliveRequests <em>number</em></syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>MaxKeepAliveRequests 100</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr></table></td></tr></table><usage>
-    <p>The <code class="directive">MaxKeepAliveRequests</code> directive
-    limits the number of requests allowed per connection when
-    <a href="#keepalive" class="directive"><code class="directive">KeepAlive</code></a> is on. If it is
-    set to "<code>0</code>", unlimited requests will be allowed. We
-    recommend that this setting be kept to a high value for maximum
-    server performance.</p>
-</usage><hr/><h2><a name="NameVirtualHost">NameVirtualHost</a> <a name="namevirtualhost">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Configures an IP address for name-virtual
-hosting</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>NameVirtualHost <em>addr</em>[:<em>port</em>]</syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr></table></td></tr></table><usage>
-    <p>The <code class="directive">NameVirtualHost</code> directive is a
-    required directive if you want to configure <a href="../vhosts/">name-based virtual hosts</a>.</p>
-
-    <p>Although <em>addr</em> can be hostname it is recommended
-    that you always use an IP address, <em>e.g.</em></p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>NameVirtualHost 111.22.33.44</code></td></tr></table></blockquote>
-
-    <p>With the <code class="directive">NameVirtualHost</code> directive you
-    specify the IP address on which the server will receive requests
-    for the name-based virtual hosts. This will usually be the address
-    to which your name-based virtual host names resolve. In cases
-    where a firewall or other proxy receives the requests and forwards
-    them on a different IP address to the server, you must specify the
-    IP address of the physical interface on the machine which will be
-    servicing the requests. If you have multiple name-based hosts on
-    multiple addresses, repeat the directive for each address.</p>
-
-    <p>Note: the "main server" and any _default_ servers will
-    <strong>never</strong> be served for a request to a
-    <code class="directive">NameVirtualHost</code> IP Address (unless for some
-    reason you specify <code class="directive">NameVirtualHost</code> but then
-    don't define any VirtualHosts for that address).</p>
-
-    <p>Optionally you can specify a port number on which the
-    name-based virtual hosts should be used, <em>e.g.</em></p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>NameVirtualHost 111.22.33.44:8080</code></td></tr></table></blockquote>
-
-     <p>IPv6 addresses must be enclosed in square brackets, as shown
-     in the following example:</p>
- 
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>NameVirtualHost [fe80::a00:20ff:fea7:ccea]:8080</code></td></tr></table></blockquote>
-
-</usage><hr/><h2><a name="Options">Options</a> <a name="options">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Configures what features are available in a particular
-directory</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>Options
-    [+|-]<em>option</em> [[+|-]<em>option</em>] ...</syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>Options All</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>Options</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr></table></td></tr></table><usage>
-    <p>The <code class="directive">Options</code> directive controls which
-    server features are available in a particular directory.</p>
-
-    <p><em>option</em> can be set to <code>None</code>, in which
-    case none of the extra features are enabled, or one or more of
-    the following:</p>
-
-    <dl>
-      <dt>All</dt>
-
-      <dd>All options except for MultiViews. This is the default
-      setting.</dd>
-
-      <dt>ExecCGI</dt>
-
-      <dd>
-      Execution of CGI scripts is permitted.</dd>
-
-      <dt>FollowSymLinks</dt>
-
-      <dd>
-
-      The server will follow symbolic links in this directory.<br>
-      <strong>Note</strong>: even though the server follows the
-      symlink it does <em>not</em> change the pathname used to match
-      against <a href="#directory" class="directive"><code class="directive">&lt;Directory&gt;</code></a> sections.<br>
-      <strong>Note</strong>: this option gets ignored if set inside a
-      <a href="#location" class="directive"><code class="directive">&lt;Location&gt;</code></a>
-      section.</dd>
-
-      <dt>Includes</dt>
-
-      <dd>
-      Server-side includes are permitted.</dd>
-
-      <dt>IncludesNOEXEC</dt>
-
-      <dd>
-
-      Server-side includes are permitted, but the #exec command and
-      #exec CGI are disabled. It is still possible to #include
-      virtual CGI scripts from ScriptAliase'd directories.</dd>
-
-      <dt>Indexes</dt>
-
-      <dd>
-      If a URL which maps to a directory is requested, and the
-      there is no DirectoryIndex (<em>e.g.</em>, index.html) in
-      that directory, then the server will return a formatted
-      listing of the directory.</dd>
-
-      <dt>MultiViews</dt>
-
-      <dd>
-      <a href="../content-negotiation.html">Content negotiated</a>
-      MultiViews are allowed.</dd>
-
-      <dt>SymLinksIfOwnerMatch</dt>
-
-      <dd>
-
-      The server will only follow symbolic links for which the target
-      file or directory is owned by the same user id as the link.<br> <strong>Note</strong>: this option gets ignored if set inside
-      a <a href="#location" class="directive"><code class="directive">&lt;Location&gt;</code></a>
-      section.</dd>
-    </dl>
-    <p>Normally, if multiple <code class="directive">Options</code> could apply to a
-    directory, then the most specific one is taken complete; the
-    options are not merged. However if <em>all</em> the options on
-    the <code class="directive">Options</code> directive are preceded by a + or -
-    symbol, the options are merged. Any options preceded by a + are
-    added to the options currently in force, and any options
-    preceded by a - are removed from the options currently in
-    force. </p>
-
-    <p>For example, without any + and - symbols:</p>
-
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>&lt;Directory /web/docs&gt;<br>
-       Options Indexes FollowSymLinks<br>
-       &lt;/Directory&gt;<br>
-       &lt;Directory /web/docs/spec&gt;<br>
-       Options Includes<br>
-       &lt;/Directory&gt;
-</code></td></tr></table></blockquote>
-    <p>then only <code>Includes</code> will be set for the
-    /web/docs/spec directory. However if the second
-    <code class="directive">Options</code> directive uses the + and - symbols:</p> 
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-      &lt;Directory /web/docs&gt;<br>
-       Options Indexes FollowSymLinks<br>
-       &lt;/Directory&gt;<br>
-       &lt;Directory /web/docs/spec&gt;<br>
-       Options +Includes -Indexes<br>
-       &lt;/Directory&gt;
-</code></td></tr></table></blockquote>
-    <p>then the options <code>FollowSymLinks</code> and
-    <code>Includes</code> are set for the /web/docs/spec directory.</p>
-    
-
-    <p><strong>Note:</strong> Using <code>-IncludesNOEXEC</code> or
-    <code>-Includes</code> disables server-side includes completely
-    regardless of the previous setting.</p>
-
-    <p>The default in the absence of any other settings is
-    <code>All</code>.</p>
-</usage><hr/><h2><a name="Require">Require</a> <a name="require">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Selects which authenticated users can access
-a resource</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>Require <em>entity-name</em> [<em>entity-name</em>] ...</syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>AuthConfig</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr></table></td></tr></table><usage>
-    <p>This directive selects which authenticated users can access
-    a directory. The allowed syntaxes are:</p>
-
-    <ul>
-      <li>
-        Require user <em>userid</em> [<em>userid</em>] ... 
-
-        <p>Only the named users can access the directory.</p>
-      </li>
-
-      <li>
-        Require group <em>group-name</em> [<em>group-name</em>] ...
-        
-
-        <p>Only users in the named groups can access the
-        directory.</p>
-      </li>
-
-      <li>
-        Require valid-user 
-
-        <p>All valid users can access the directory.</p>
-      </li>
-    </ul>
-
-    <p><code class="directive">Require</code> must be accompanied by
-    <a href="#authname" class="directive"><code class="directive">AuthName</code></a> and <a href="#authtype" class="directive"><code class="directive">AuthType</code></a> directives, and directives such
-    as <a href="mod_auth.html#authuserfile" class="directive"><code class="directive">AuthUserFile</code></a>
-    and <a href="mod_auth.html#authgroupfile" class="directive"><code class="directive">AuthGroupFile</code></a> (to
-    define users and groups) in order to work correctly. Example:</p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-       AuthType Basic<br>
-       AuthName "Restricted Directory"<br>
-       AuthUserFile /web/users<br>
-       AuthGroupFile /web/groups<br>
-       Require group admin<br>
-</code></td></tr></table></blockquote>
-
-    <p>Access controls which are applied in this way are effective for
-    <strong>all</strong> methods. <strong>This is what is normally
-    desired.</strong> If you wish to apply access controls only to
-    specific methods, while leaving other methods unprotected, then
-    place the <code class="directive">Require</code> statement into a
-    <a href="#limit" class="directive"><code class="directive">&lt;Limit&gt;</code></a>
-    section.</p>
-</usage><p><strong>See also </strong></p><ul><li><a href="#satisfy" class="directive"><code class="directive">Satisfy</code></a></li><li><code><a href="mod_access.html">mod_access</a></code></li></ul><hr/><h2><a name="RLimitCPU">RLimitCPU</a> <a name="rlimitcpu">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Limits the CPU consumption of processes launched
-by Apache children</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>RLimitCPU <em>number</em>|max [<em>number</em>|max]</syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>Unset; uses operating system defaults</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>Moved in version 2.0 to
-    the MPMs</td></tr></table></td></tr></table><usage>
-    <p>Takes 1 or 2 parameters. The first parameter sets the soft
-    resource limit for all processes and the second parameter sets
-    the maximum resource limit. Either parameter can be a number,
-    or <em>max</em> to indicate to the server that the limit should
-    be set to the maximum allowed by the operating system
-    configuration. Raising the maximum resource limit requires that
-    the server is running as root, or in the initial startup
-    phase.</p>
-
-    <p>This applies to processes forked off from Apache children
-    servicing requests, not the Apache children themselves. This
-    includes CGI scripts and SSI exec commands, but not any
-    processes forked off from the Apache parent such as piped
-    logs.</p>
-
-    <p>CPU resource limits are expressed in seconds per
-    process.</p>
-</usage><p><strong>See also </strong></p><ul><li><a href="#rlimitmem" class="directive"><code class="directive">RLimitMEM</code></a></li><li><a href="#rlimitnproc" class="directive"><code class="directive">RLimitNPROC</code></a></li></ul><hr/><h2><a name="RLimitMEM">RLimitMEM</a> <a name="rlimitmem">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Limits the memory consumption of processes launched
-by Apache children</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>RLimitMEM <em>number</em>|max [<em>number</em>|max]</syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>Unset; uses operating system defaults</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>Moved in version 2.0 to the MPMs.</td></tr></table></td></tr></table><usage>
-    <p>Takes 1 or 2 parameters. The first parameter sets the soft
-    resource limit for all processes and the second parameter sets
-    the maximum resource limit. Either parameter can be a number,
-    or <em>max</em> to indicate to the server that the limit should
-    be set to the maximum allowed by the operating system
-    configuration. Raising the maximum resource limit requires that
-    the server is running as root, or in the initial startup
-    phase.</p>
-
-    <p>This applies to processes forked off from Apache children
-    servicing requests, not the Apache children themselves. This
-    includes CGI scripts and SSI exec commands, but not any
-    processes forked off from the Apache parent such as piped
-    logs.</p>
-
-    <p>Memory resource limits are expressed in bytes per
-    process.</p>
-</usage><p><strong>See also </strong></p><ul><li><a href="#rlimitcpu" class="directive"><code class="directive">RLimitCPU</code></a></li><li><a href="#rlimitnproc" class="directive"><code class="directive">RLimitNPROC</code></a></li></ul><hr/><h2><a name="RLimitNPROC">RLimitNPROC</a> <a name="rlimitnproc">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Limits the number of processes that can be launched by 
-processes launched by Apache children</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>RLimitNPROC <em>number</em>|max [<em>number</em>|max]</syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>Unset; uses operating system defaults</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>Moved in version 2.0 to the MPMs.</td></tr></table></td></tr></table><usage>
-    <p>Takes 1 or 2 parameters. The first parameter sets the soft
-    resource limit for all processes and the second parameter sets
-    the maximum resource limit. Either parameter can be a number,
-    or <code>max</code> to indicate to the server that the limit
-    should be set to the maximum allowed by the operating system
-    configuration. Raising the maximum resource limit requires that
-    the server is running as root, or in the initial startup
-    phase.</p>
-
-    <p>This applies to processes forked off from Apache children
-    servicing requests, not the Apache children themselves. This
-    includes CGI scripts and SSI exec commands, but not any
-    processes forked off from the Apache parent such as piped
-    logs.</p>
-
-    <p>Process limits control the number of processes per user.</p>
-
-    <p>Note: If CGI processes are <strong>not</strong> running
-    under userids other than the web server userid, this directive
-    will limit the number of processes that the server itself can
-    create. Evidence of this situation will be indicated by
-    <strong><em>cannot fork</em></strong> messages in the
-    error_log.</p>
-</usage><p><strong>See also </strong></p><ul><li><a href="#rlimitmem" class="directive"><code class="directive">RLimitMEM</code></a></li><li><a href="#rlimitcpu" class="directive"><code class="directive">RLimitCPU</code></a></li></ul><hr/><h2><a name="Satisfy">Satisfy</a> <a name="satisfy">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Configures how host-level access control and user authentication
-interact</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>Satisfy any|all</syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>Satisfy all</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr></table></td></tr></table><usage>
-    <p>Access policy if both <a href="#allow" class="directive"><code class="directive">Allow</code></a> and <a href="#require" class="directive"><code class="directive">Require</code></a> used. The parameter can be
-    either <em>'all'</em> or <em>'any'</em>. This directive is only
-    useful if access to a particular area is being restricted by both
-    username/password <em>and</em> client host address. In this case
-    the default behavior ("all") is to require that the client passes
-    the address access restriction <em>and</em> enters a valid
-    username and password. With the "any" option the client will be
-    granted access if they either pass the host restriction or enter a
-    valid username and password. This can be used to password restrict
-    an area, but to let clients from particular addresses in without
-    prompting for a password.</p>
-</usage><hr/><h2><a name="ScriptInterpreterSource">ScriptInterpreterSource</a> <a name="scriptinterpretersource">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Controls how the interpreter for CGI scripts is
-located</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>ScriptInterpreterSource registry|script</syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>ScriptInterpreterSource script</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>Win32 only</td></tr></table></td></tr></table><usage>
-    <p>This directive is used to control how Apache finds the
-    interpreter used to run CGI scripts. The default technique is to
-    use the interpreter pointed to by the #! line in the
-    script. Setting <code>ScriptInterpreterSource registry</code> will
-    cause the Windows Registry to be searched using the script file
-    extension (e.g., .pl) as a search key.</p>
-</usage><hr/><h2><a name="ServerAdmin">ServerAdmin</a> <a name="serveradmin">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sets the email address that the server includes in error
-messages sent to the client</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>ServerAdmin <em>email-address</em></syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr></table></td></tr></table><usage>
-    <p>The <code class="directive">ServerAdmin</code> sets the e-mail address
-    that the server includes in any error messages it returns to the
-    client.</p>
-
-    <p>It may be worth setting up a dedicated address for this,
-    <em>e.g.</em></p>
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>ServerAdmin www-admin@foo.bar.com</code></td></tr></table></blockquote>
-    <p>as users do not always mention that they are talking about the
-    server!</p>
-</usage><hr/><h2><a name="ServerAlias">ServerAlias</a> <a name="serveralias">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sets alternate names for a host used when matching requests
-to name-virtual hosts</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>ServerAlias <em>hostname</em> [<em>hostname</em>] ...</syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr></table></td></tr></table><usage>
-    <p>The <code class="directive">ServerAlias</code> directive sets the
-    alternate names for a host, for use with <a href="../vhosts/name-based.html">name-based virtual hosts</a>.</p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-    &lt;VirtualHost *&gt;<br>
-    ServerName server.domain.com<br>
-    ServerAlias server server2.domain.com server2<br>
-    ...<br>
-    &lt;/VirtualHost&gt;
-</code></td></tr></table></blockquote>
-</usage><p><strong>See also </strong></p><ul><li><a href="../vhosts/">Apache Virtual Host documentation</a></li></ul><hr/><h2><a name="ServerName">ServerName</a> <a name="servername">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sets the hostname and port that the server uses to identify
-itself</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>ServerName <em>fully-qualified-domain-name[:port]</em></syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>In version 2.0, this
-     directive supersedes the functionality of the Port
-     directive from version 1.3.</td></tr></table></td></tr></table><usage>
-    <p>The <code class="directive">ServerName</code> directive sets the hostname and
-    port that the server uses to identify itself.  This is used when
-    creating redirection URLs.  For example, if the name of the
-    machine hosting the webserver is <code>simple.example.com</code>,
-    but the machine also has the DNS alias <code>www.example.com</code>
-    and you wish the webserver to be so identified, the following
-    directive should be used:</p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>ServerName www.example.com:80</code></td></tr></table></blockquote>
-
-    <p>If no <code class="directive">ServerName</code> is specified, then the
-    server attempts to deduce the hostname by performing a reverse
-    lookup on the IP address.  If no port is specified in the
-    servername, then the server will use the port from the incoming
-    request.  For optimal reliability and predictability, you should
-    specify an explicit hostname and port using the
-    <code class="directive">ServerName</code> directive.</p>
-
-    <p>If you are using <a href="../vhosts/name-based.html">name-based virtual hosts</a>,
-    the <code class="directive">ServerName</code> inside a
-    <a href="#virtualhost" class="directive"><code class="directive">&lt;VirtualHost&gt;</code></a>
-    section specifies what hostname must appear in the request's
-    <code>Host:</code> header to match this virtual host.</p>
-
-    <p>See the description of the
-    <a href="#usecanonicalname" class="directive"><code class="directive">UseCanonicalName</code></a> directive for
-    settings which determine whether self-referential URL's (e.g., by the
-    <code><a href="mod_dir.html">mod_dir</a></code> module) will refer to the
-    specified port, or to the port number given in the client's request.
-    </p>
-</usage><p><strong>See also </strong></p><ul><li><a href="../dns-caveats.html">DNS Issues</a></li><li><a href="../vhosts/">Apache virtual host
-    documentation</a></li><li><a href="#usecanonicalname" class="directive"><code class="directive">UseCanonicalName</code></a></li><li><a href="#namevirtualhost" class="directive"><code class="directive">NameVirtualHost</code></a></li><li><a href="#serveralias" class="directive"><code class="directive">ServerAlias</code></a></li></ul><hr/><h2><a name="ServerPath">ServerPath</a> <a name="serverpath">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sets the legacy URL pathname for a name-virtual host that
-is accessed by an incompatible browser</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>ServerPath <em>directory-path</em></syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr></table></td></tr></table><usage>
-    <p>The <code class="directive">ServerPath</code> directive sets the legacy
-    URL pathname for a host, for use with <a href="../vhosts/">name-based virtual hosts</a>.</p>
-</usage><p><strong>See also </strong></p><ul><li><a href="../vhosts/">Apache Virtual Host documentation</a></li></ul><hr/><h2><a name="ServerRoot">ServerRoot</a> <a name="serverroot">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sets the base directory for the server installation</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>ServerRoot <em>directory-path</em></syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>ServerRoot /usr/local/apache</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr></table></td></tr></table><usage>
-    <p>The <code class="directive">ServerRoot</code> directive sets the
-    directory in which the server lives. Typically it will contain the
-    subdirectories <code>conf/</code> and <code>logs/</code>. Relative
-    paths for other configuration files are taken as relative to this
-    directory.</p>
-</usage><p><strong>See also </strong></p><ul><li><a href="../invoking.html">the <code>-d</code>
-    option to <code>httpd</code></a></li><li><a href="../misc/security_tips.html#serverroot">the
-    security tips</a> for information on how to properly set
-    permissions on the ServerRoot</li></ul><hr/><h2><a name="ServerSignature">ServerSignature</a> <a name="serversignature">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Configures the footer on server-generated documents</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>ServerSignature On|Off|EMail</syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>ServerSignature Off</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr></table></td></tr></table><usage>
-    <p>The <code class="directive">ServerSignature</code> directive allows the
-    configuration of a trailing footer line under server-generated
-    documents (error messages, mod_proxy ftp directory listings,
-    mod_info output, ...). The reason why you would want to enable
-    such a footer line is that in a chain of proxies, the user often
-    has no possibility to tell which of the chained servers actually
-    produced a returned error message.<br> The <code>Off</code>
-    setting, which is the default, suppresses the error line (and is
-    therefore compatible with the behavior of Apache-1.2 and
-    below). The <code>On</code> setting simply adds a line with the
-    server version number and <a href="#servername" class="directive"><code class="directive">ServerName</code></a> of the serving virtual host,
-    and the <code>EMail</code> setting additionally creates a
-    "mailto:" reference to the <a href="#serveradmin" class="directive"><code class="directive">ServerAdmin</code></a> of the referenced
-    document.</p>
-</usage><hr/><h2><a name="ServerTokens">ServerTokens</a> <a name="servertokens">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Configures the Server HTTP response header</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>ServerTokens Minimal|ProductOnly|OS|Full</syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>ServerTokens Full</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr></table></td></tr></table><usage>
-    <p>This directive controls whether <code>Server</code> response
-    header field which is sent back to clients includes a
-    description of the generic OS-type of the server as well as
-    information about compiled-in modules.</p>
-
-    <dl>
-      <dt><code>ServerTokens Prod[uctOnly]</code></dt>
-
-      <dd>Server sends (<em>e.g.</em>): <code>Server:
-      Apache</code></dd>
-
-      <dt><code>ServerTokens Min[imal]</code></dt>
-
-      <dd>Server sends (<em>e.g.</em>): <code>Server:
-      Apache/1.3.0</code></dd>
-
-      <dt><code>ServerTokens OS</code></dt>
-
-      <dd>Server sends (<em>e.g.</em>): <code>Server: Apache/1.3.0
-      (Unix)</code></dd>
-
-      <dt><code>ServerTokens Full</code> (or not specified)</dt>
-
-      <dd>Server sends (<em>e.g.</em>): <code>Server: Apache/1.3.0
-      (Unix) PHP/3.0 MyMod/1.2</code></dd>
-    </dl>
-
-    <p>This setting applies to the entire server, and cannot be
-    enabled or disabled on a virtualhost-by-virtualhost basis.</p>
-</usage><hr/><h2><a name="SetHandler">SetHandler</a> <a name="sethandler">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Forces all matching files to be processed by a
-handler</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>SetHandler <em>handler-name</em></syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>Moved into the core in Apache 2.0</td></tr></table></td></tr></table><usage>
-    <p>When placed into an <code>.htaccess</code> file or a
-    <a href="#directory" class="directive"><code class="directive">&lt;Directory&gt;</code></a> or 
-    <a href="#location" class="directive"><code class="directive">&lt;Location&gt;</code></a>
-    section, this directive forces all matching files to be parsed
-    through the <a href="../handler.html">handler</a> given by
-    <em>handler-name</em>. For example, if you had a directory you
-    wanted to be parsed entirely as imagemap rule files, regardless
-    of extension, you might put the following into an
-    <code>.htaccess</code> file in that directory:</p>
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-    SetHandler imap-file
-</code></td></tr></table></blockquote>
-
-    <p>Another example: if you wanted to have the server display a
-    status report whenever a URL of
-    <code>http://servername/status</code> was called, you might put
-    the following into httpd.conf:</p>
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-    &lt;Location /status&gt;<br>
-    SetHandler server-status<br>
-    &lt;/Location&gt;
-</code></td></tr></table></blockquote>
-</usage><hr/><h2><a name="SetInputFilter">SetInputFilter</a> <a name="setinputfilter">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sets the filters that will process client requests and POST
-input</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>SetInputFilter <em>filter</em>[<em>;filter</em>...]</syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr></table></td></tr></table><usage>
-    <p>The <code class="directive">SetInputFilter</code> directive sets the
-    filter or filters which will process client requests and POST
-    input when they are received by the server. This is in addition to
-    any filters defined elsewhere, including the
-    <a href="mod_mime.html#addinputfilter" class="directive"><code class="directive">AddInputFilter</code></a>
-    directive.</p>
-
-    <p>If more than one filter is specified, they must be separated
-    by semicolons in the order in which they should process the
-    content.</p>
-</usage><p><strong>See also </strong></p><ul><li><a href="../filter.html">Filters</a> documentation</li></ul><hr/><h2><a name="SetOutputFilter">SetOutputFilter</a> <a name="setoutputfilter">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sets the filters that will process responses from the
-server</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>SetOutputFilter <em>filter</em> [<em>filter</em>] ...</syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr></table></td></tr></table><usage>
-    <p>The <code class="directive">SetOutputFilter</code> directive sets the filters
-    which will process responses from the server before they are
-    sent to the client. This is in addition to any filters defined
-    elsewhere, including the
-    <a href="mod_mime.html#addoutputfilter" class="directive"><code class="directive">AddOutputFilter</code></a>
-    directive.</p>
-
-    <p>For example, the following configuration will process all files
-    in the <code>/www/data/</code> directory for server-side
-    includes.</p>
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-&lt;Directory /www/data/&gt;<br>
-&nbsp;&nbsp;SetOutputFilter INCLUDES<br>
-&lt;/Directory&gt;
-</code></td></tr></table></blockquote>
-
-    <p>If more than one filter is specified, they must be separated
-    by semicolons in the order in which they should process the
-    content.</p>
-</usage><p><strong>See also </strong></p><ul><li><a href="../filter.html">Filters</a> documentation</li></ul><hr/><h2><a name="TimeOut">TimeOut</a> <a name="timeout">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Defines the amount of time the server will wait for
-certain events before failing a request</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>TimeOut <em>number</em></syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>TimeOut 300</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr></table></td></tr></table><usage>
-    <p>The <code class="directive">TimeOut</code> directive currently defines
-    the amount of time Apache will wait for three things:</p>
-
-    <ol>
-      <li>The total amount of time it takes to receive a GET
-      request.</li>
-
-      <li>The amount of time between receipt of TCP packets on a
-      POST or PUT request.</li>
-
-      <li>The amount of time between ACKs on transmissions of TCP
-      packets in responses.</li>
-    </ol>
-    
-    <p>We plan on making these separately configurable at some point
-    down the road. The timer used to default to 1200 before 1.2,
-    but has been lowered to 300 which is still far more than
-    necessary in most situations. It is not set any lower by
-    default because there may still be odd places in the code where
-    the timer is not reset when a packet is sent. </p>
-</usage><hr/><h2><a name="UseCanonicalName">UseCanonicalName</a> <a name="usecanonicalname">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Configures how the server determines its own name and
-port</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>UseCanonicalName on|off|dns</syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>UseCanonicalName on</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>Options</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr></table></td></tr></table><usage>
-    <p>In many situations Apache has to construct a
-    <em>self-referential</em> URL. That is, a URL which refers back to
-    the same server. With <code>UseCanonicalName on</code> Apache will
-    use the hostname and port specified in the <a href="#servername" class="directive"><code class="directive">ServerName</code></a> directive to construct a canonical
-    name for the server. This name is used in all self-referential
-    URLs, and for the values of <code>SERVER_NAME</code> and
-    <code>SERVER_PORT</code> in CGIs.</p>
-
-    <p>With <code>UseCanonicalName off</code> Apache will form
-    self-referential URLs using the hostname and port supplied by
-    the client if any are supplied (otherwise it will use the
-    canonical name). These values are the same that are used to
-    implement <a href="../vhosts/name-based.html">name based
-    virtual hosts</a>, and are available with the same clients. The
-    CGI variables <code>SERVER_NAME</code> and
-    <code>SERVER_PORT</code> will be constructed from the client
-    supplied values as well.</p>
-
-    <p>An example where this may be useful is on an intranet server
-    where you have users connecting to the machine using short
-    names such as <code>www</code>. You'll notice that if the users
-    type a shortname, and a URL which is a directory, such as
-    <code>http://www/splat</code>, <em>without the trailing
-    slash</em> then Apache will redirect them to
-    <code>http://www.domain.com/splat/</code>. If you have
-    authentication enabled, this will cause the user to have to
-    reauthenticate twice (once for <code>www</code> and once again
-    for <code>www.domain.com</code>). But if
-    <code class="directive">UseCanonicalName</code> is set off, then Apache will
-    redirect to <code>http://www/splat/</code>.</p>
-
-    <p>There is a third option, <code>UseCanonicalName DNS</code>,
-    which is intended for use with mass IP-based virtual hosting to
-    support ancient clients that do not provide a
-    <code>Host:</code> header. With this option Apache does a
-    reverse DNS lookup on the server IP address that the client
-    connected to in order to work out self-referential URLs.</p>
-
-    <p><strong>Warning:</strong> if CGIs make assumptions about the
-    values of <code>SERVER_NAME</code> they may be broken by this
-    option. The client is essentially free to give whatever value
-    they want as a hostname. But if the CGI is only using
-    <code>SERVER_NAME</code> to construct self-referential URLs
-    then it should be just fine.</p>
-</usage><p><strong>See also </strong></p><ul><li><a href="#servername" class="directive"><code class="directive">ServerName</code></a></li><li><a href="mpm_common.html#listen" class="directive"><code class="directive">Listen</code></a></li></ul><hr/><h2><a name="VirtualHost">&lt;VirtualHost&gt;</a> <a name="virtualhost">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Contains directives that apply only to a specific
-hostname or IP address</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>&lt;VirtualHost
-    <em>addr</em>[:<em>port</em>] [<em>addr</em>[:<em>port</em>]]
-    ...&gt; ... &lt;/VirtualHost&gt;</syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr></table></td></tr></table><usage>
-    <p><code class="directive">&lt;VirtualHost&gt;</code> and
-    <code>&lt;/VirtualHost&gt;</code> are used to enclose a group of
-    directives which will apply only to a particular virtual host. Any
-    directive which is allowed in a virtual host context may be
-    used. When the server receives a request for a document on a
-    particular virtual host, it uses the configuration directives
-    enclosed in the <code class="directive">&lt;VirtualHost&gt;</code>
-    section. <em>Addr</em> can be</p>
-
-    <ul>
-      <li>The IP address of the virtual host</li>
-
-      <li>A fully qualified domain name for the IP address of the
-      virtual host.</li>
-    </ul>
-    
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><p align="center"><strong>Example</strong></p><code>
-       &lt;VirtualHost 10.1.2.3&gt;<br>
-       ServerAdmin webmaster@host.foo.com<br>
-       DocumentRoot /www/docs/host.foo.com<br>
-       ServerName host.foo.com<br>
-       ErrorLog logs/host.foo.com-error_log<br>
-       TransferLog logs/host.foo.com-access_log<br>
-       &lt;/VirtualHost&gt;
-</code></td></tr></table></blockquote>
-
- 
-     <p>IPv6 addresses must be specified in square brackets because
-     the optional port number could not be determined otherwise.  An
-     IPv6 example is shown below:</p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>     
-&lt;VirtualHost [fe80::a00:20ff:fea7:ccea]&gt;<br>
-        ServerAdmin webmaster@host.foo.com<br>
-        DocumentRoot /www/docs/host.foo.com<br>
-        ServerName host.foo.com<br>
-       ErrorLog logs/host.foo.com-error_log<br>
-        TransferLog logs/host.foo.com-access_log<br>
-        &lt;/VirtualHost&gt;
-</code></td></tr></table></blockquote>  
-
-    <p>Each Virtual Host must correspond to a different IP address,
-    different port number or a different host name for the server,
-    in the former case the server machine must be configured to
-    accept IP packets for multiple addresses. (If the machine does
-    not have multiple network interfaces, then this can be
-    accomplished with the <code>ifconfig alias</code> command (if
-    your OS supports it), or with kernel patches like <a href="../misc/vif-info.html">VIF</a> (for SunOS(TM) 4.1.x)).</p>
-
-    <p>The special name <code>_default_</code> can be specified in
-    which case this virtual host will match any IP address that is
-    not explicitly listed in another virtual host. In the absence
-    of any _default_ virtual host the "main" server config,
-    consisting of all those definitions outside any VirtualHost
-    section, is used when no match occurs.</p>
-
-    <p>You can specify a <code>:port</code> to change the port that is
-    matched. If unspecified then it defaults to the same port as the
-    most recent <a href="mpm_common.html#listen" class="directive"><code class="directive">Listen</code></a>
-    statement of the main server. You may also specify <code>:*</code>
-    to match all ports on that address. (This is recommended when used
-    with <code>_default_</code>.)</p>
-
-    <p><strong>SECURITY</strong>: See the <a href="../misc/security_tips.html">security tips</a> document
-    for details on why your security could be compromised if the
-    directory where logfiles are stored is writable by anyone other
-    than the user that starts the server.</p>
-
-    <p><strong>NOTE</strong>: The use of <code class="directive">&lt;VirtualHost&gt;</code> does <strong>not</strong>
-    affect what addresses Apache listens on.  You may need to ensure
-    that Apache is listening on the correct addresses using <a href="mpm_common.html#listen" class="directive"><code class="directive">Listen</code></a>.</p>
-</usage><p><strong>See also </strong></p><ul><li><a href="../vhosts/">Apache Virtual Host documentation</a></li><li><a href="../dns-caveats.html">Warnings about DNS and
-    Apache</a></li><li><a href="../bind.html">Setting
-    which addresses and ports Apache uses</a></li><li><a href="../sections.html">How
-    Directory, Location and Files sections work</a> for an
-    explanation of how these different sections are combined when a
-    request is received</li></ul><hr/><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img alt="Index" src="../images/index.gif"/></a><a href="../"><img alt="Home" src="../images/home.gif"/></a></blockquote></body></html>
\ No newline at end of file
diff --git a/docs/manual/mod/core.xml b/docs/manual/mod/core.xml
deleted file mode 100644
index dbc404f..0000000
--- a/docs/manual/mod/core.xml
+++ /dev/null
@@ -1,2483 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.xsl"?>
-<modulesynopsis>
-
-<name>core</name>
-<description>Core Apache HTTP Server features that are always
-available</description>
-<status>Core</status>
-
-<directivesynopsis>
-<name>AcceptPathInfo</name>
-<description>Controls whether requests can contain trailing pathname information</description>    
-<syntax>AcceptPathInfo On|Off|Default</syntax>
-<default>AcceptPathInfo Default</default>
-<contextlist><context>server config</context>
-<context>virtual host</context><context>directory</context>
-<context>.htaccess</context></contextlist>
-<compatibility>Available in Apache 2.0.30 and later</compatibility>
-
-<usage>
-
-    <p>This directive controls whether requests that contain trailing
-    pathname information that follows an actual filename (or
-    non-existent file in an existing directory) will be accepted or
-    rejected.  The trailing pathname information can be made
-    available to scripts in the PATH_INFO environment variable.</p>
-
-    <p>For example, assume the location <code>/test/</code> points to
-    a directory that contains only the single file
-    <code>here.html</code>.  Then requests for
-    <code>/test/here.html/more</code> and
-    <code>/test/nothere.html/more</code> both collect
-    <code>/more</code> as PATH_INFO.</p>
-
-    <p>The three possible arguments for the
-    <directive>AcceptPathInfo</directive> directive are:</p>
-    <dl>
-    <dt><code>off</code></dt><dd>A request will only be accepted if it
-    maps to a literal path that exists.  Therefore a request with
-    trailing pathname information after the true filename such as
-    <code>/test/here.html/more</code> in the above example will return
-    a 404 NOT FOUND error.</dd>
-
-    <dt><code>on</code></dt><dd>A request will be accepted if a
-    leading path component maps to a file that exists.  The above
-    example <code>/test/here.html/more</code> will be accepted if
-    <code>/test/here.html</code> maps to a valid file.</dd>
-    
-    <dt><code>default</code></dt><dd>The treatment of requests with
-    trailing pathname information is determined by the <a
-    href="../handler.html">handler</a> responsible for the request.
-    The core handler for normal files defaults to rejecting PATH_INFO.
-    Handlers that serve scripts, such as <a
-    href="mod_cgi.html">cgi-script</a> and <a
-    href="mod_isapi.html">isapi-isa</a>, generally accept PATH_INFO by
-    default.</dd>
-    </dl>
-
-    <p>The primary purpose of the <code>AcceptPathInfo</code>
-    directive is to allow you to override the handler's choice of
-    accepting or rejecting PATH_INFO.  This override is required, for
-    example, when you use a <a href="../filter.html">filter</a>, such
-    as <a href="mod_include.html">INCLUDES</a>, to generate content
-    based on PATH_INFO.  The core handler would usually reject the
-    request, so you can use the following configuration to enable
-    such a script:</p>
-<example>
-&lt;Files "mypaths.shtml"&gt;<br />
-    Options +Includes<br />
-    SetOutputFilter INCLUDES<br />
-    AcceptPathInfo on<br />
-&lt;/Files&gt;
-</example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AccessFileName</name>
-<description>Sets the name of the .htaccess file</description>
-<syntax>AccessFileName <em>filename</em> [<em>filename</em>] ...</syntax>
-<default>AccessFileName .htaccess</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
-    <p>When returning a document to the client the server looks for
-    the first existing access control file from this list of names
-    in every directory of the path to the document, if access
-    control files are enabled for that directory. For example:</p>
-
-<example>
-AccessFileName .acl
-</example>
-
-    <p>before returning the document
-    <code>/usr/local/web/index.html</code>, the server will read
-    <code>/.acl</code>, <code>/usr/.acl</code>,
-    <code>/usr/local/.acl</code> and <code>/usr/local/web/.acl</code>
-    for directives, unless they have been disabled with</p>
-
-<example>
-&lt;Directory /&gt;<br />
-&nbsp;&nbsp;AllowOverride None<br />
-&lt;/Directory&gt;
-</example>
-</usage>
-<seealso><directive module="core">AllowOverride</directive></seealso>
-<seealso><a href="../configuring.html">Configuration Files</a></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AddDefaultCharset</name>
-<description>Specifies the default character set to be added for a
-response without an explicit character set</description>
-<syntax>AddDefaultCharset On|Off|<em>charset</em></syntax>
-<default>AddDefaultCharset Off</default>
-<contextlist><context>server config</context>
-<context>virtual host</context><context>directory</context>
-<context>.htaccess</context></contextlist>
-
-
-<usage>
-
-    <p>This directive specifies the name of the character set that
-    will be added to any response that does not have any parameter on
-    the content type in the HTTP headers. This will override any
-    character set specified in the body of the document via a
-    <code>META</code> tag. A setting of <code>AddDefaultCharset
-    Off</code> disables this
-    functionality. <code>AddDefaultCharset On</code> enables
-    Apache's internal default charset of <code>iso-8859-1</code> as
-    required by the directive. You can also specify an alternate
-    <em>charset</em> to be used. For example:</p>
-
-<example>
-    AddDefaultCharset utf-8
-</example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AddModule</name>
-<syntax>AddModule <em>module</em> [<em>module</em>] ...</syntax>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
-    <p>The server can have modules compiled in which are not
-    actively in use. This directive can be used to enable the use
-    of those modules. The server comes with a pre-loaded list of
-    active modules; this list can be cleared with the <directive
-    module="core">ClearModuleList</directive> directive.</p>
-
-    <p>For example:</p>
-<example>
-AddDefaultCharset utf-8
-</example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AllowOverride</name>
-<description>Sets the types of directives that are allowed in
-.htaccess files</description>
-<syntax>AllowOverride All|None|<em>directive-type</em> [<em>directive-type</em>] ...</syntax>
-<default>AllowOverride All</default>
-<contextlist><context>directory</context></contextlist>
-
-<usage>
-    <p>When the server finds an .htaccess file (as specified by <directive
-    module="core">AccessFileName</directive>) it needs to know
-    which directives declared in that file can override earlier
-    access information.</p>
-
-    <p>When this directive is set to <code>None</code>, then
-    .htaccess files are completely ignored. In this case, the
-    server will not even attempt to read .htaccess files in the
-    filesystem.</p>
-
-    <p>When this directive is set to <code>All</code>, then any
-    directive which has the .htaccess <a
-    href="directive-dict.html#Context">Context</a> is allowed in
-    .htaccess files.</p>
-
-    <p>The <em>directive-type</em> can be one of the following
-    groupings of directives.</p>
-
-    <dl>
-      <dt>AuthConfig</dt>
-
-      <dd>
-
-      Allow use of the authorization directives (<directive
-      module="mod_auth_dbm">AuthDBMGroupFile</directive>,
-      <directive module="mod_auth_dbm">AuthDBMUserFile</directive>,
-      <directive module="mod_auth">AuthGroupFile</directive>,
-      <directive module="core">AuthName</directive>, 
-      <directive module="core">AuthType</directive>, <directive
-      module="mod_auth">AuthUserFile</directive>, <directive
-      module="core">Require</directive>, <em>etc.</em>).</dd>
-
-      <dt>FileInfo</dt>
-
-      <dd>
-      Allow use of the directives controlling document types (<directive
-      module="core">DefaultType</directive>, <directive
-      module="core">ErrorDocument</directive>, <directive
-      module="core">ForceType</directive>, <directive
-      module="mod_negotiation">LanguagePriority</directive>,
-      <directive module="core">SetHandler</directive>, <directive
-      module="core">SetInputFilter</directive>, <directive
-      module="core">SetOutputFilter</directive>, and 
-      <module>mod_mime</module> Add* and Remove*
-      directives, <em>etc.</em>).</dd>
-
-      <dt>Indexes</dt>
-
-      <dd>
-      Allow use of the directives controlling directory indexing
-      (<directive
-      module="mod_autoindex">AddDescription</directive>,
-      <directive module="mod_autoindex">AddIcon</directive>, <directive
-      module="mod_autoindex">AddIconByEncoding</directive>,
-      <directive module="mod_autoindex">AddIconByType</directive>,
-      <directive module="mod_autoindex">DefaultIcon</directive>, <directive
-      module="mod_dir">DirectoryIndex</directive>, <directive
-      module="mod_autoindex">FancyIndexing</directive>, <directive
-      module="mod_autoindex">HeaderName</directive>, <directive
-      module="mod_autoindex">IndexIgnore</directive>, <directive
-      module="mod_autoindex">IndexOptions</directive>, <directive
-      module="mod_autoindex">ReadmeName</directive>,
-      <em>etc.</em>).</dd>
-
-      <dt>Limit</dt>
-
-      <dd>
-      Allow use of the directives controlling host access (<directive
-      module="mod_access">Allow</directive>, <directive
-      module="mod_access">Deny</directive> and <directive
-      module="mod_access">Order</directive>).</dd>
-
-      <dt>Options</dt>
-
-      <dd>
-      Allow use of the directives controlling specific directory
-      features (<directive module="core">Options</directive> and
-      <directive module="mod_include">XBitHack</directive>).</dd>
-    </dl>
-
-    <p>Example:</p>
-
-    <example>AllowOverride AuthConfig Indexes</example>
-</usage>
-
-<seealso><directive module="core">AccessFileName</directive></seealso>
-<seealso><a href="../configuring.html">Configuration Files</a></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AuthName</name>
-<description>Sets the authorization realm for use in HTTP
-authentication</description>
-<syntax>AuthName <em>auth-domain</em></syntax>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
-    <p>This directive sets the name of the authorization realm for a
-    directory. This realm is given to the client so that the user
-    knows which username and password to send.
-    <directive>AuthName</directive> takes a single argument; if the
-    realm name contains spaces, it must be enclosed in quotation
-    marks.  It must be accompanied by <directive
-    module="core">AuthType</directive> and <directive
-    module="core">Require</directive> directives, and directives such
-    as <directive module="mod_auth">AuthUserFile</directive> and
-    <directive module="mod_auth">AuthGroupFile</directive> to
-    work.</p>
-
-   <p>For example:</p>
-
-   <example>AuthName "Top Secret"</example>
-
-    <p>The string provided for the <code>AuthRealm</code> is what will
-    appear in the password dialog provided by most browsers.</p>
-</usage>
-<seealso><a 
-    href="../howto/auth.html">Authentication, Authorization, and 
-    Access Control</a></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AuthType</name>
-<description>Selects the type of user authentication</description>
-<syntax>AuthType Basic|Digest</syntax>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
-    <p>This directive selects the type of user authentication for a
-    directory. Only <code>Basic</code> and <code>Digest</code> are
-    currently implemented. 
-
-     It must be accompanied by <directive
-     module="core">AuthName</directive> and <directive
-     module="core">Require</directive> directives, and directives such
-     as <directive module="mod_auth">AuthUserFile</directive> and
-     <directive module="mod_auth">AuthGroupFile</directive> to
-     work.</p>
-</usage>
-<seealso><a href="../howto/auth.html">Authentication, Authorization,
-and Access Control</a></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ContentDigest</name>
-<description>Enables the generation of Content-MD5 HTTP Response
-headers</description> 
-<syntax>ContentDigest on|off</syntax>
-<default>ContentDigest off</default>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>Options</override>
-<status>Experimental</status>
-<compatibility>Available in Apache 1.1 and later</compatibility>
-
-<usage>
-    <p>This directive enables the generation of
-    <code>Content-MD5</code> headers as defined in RFC1864
-    respectively RFC2068.</p>
-
-    <p>MD5 is an algorithm for computing a "message digest"
-    (sometimes called "fingerprint") of arbitrary-length data, with
-    a high degree of confidence that any alterations in the data
-    will be reflected in alterations in the message digest.</p>
-
-    <p>The <code>Content-MD5</code> header provides an end-to-end
-    message integrity check (MIC) of the entity-body. A proxy or
-    client may check this header for detecting accidental
-    modification of the entity-body in transit. Example header:</p>
-<example>
-   Content-MD5: AuLb7Dp1rqtRtxz2m9kRpA==
-</example>
-
-    <p>Note that this can cause performance problems on your server
-    since the message digest is computed on every request (the
-    values are not cached).</p>
-
-    <p><code>Content-MD5</code> is only sent for documents served
-    by the core, and not by any module. For example, SSI documents,
-    output from CGI scripts, and byte range responses do not have
-    this header.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>DefaultType</name>
-<description>Sets the MIME content-type that will be sent if the
-server cannot determine a type in any other way</description>
-<syntax>DefaultType <em>MIME-type</em></syntax>
-<default>DefaultType text/html</default>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>FileInfo</override>
-
-<usage>
-    <p>There will be times when the server is asked to provide a
-    document whose type cannot be determined by its MIME types
-    mappings.</p>
-
-    <p>The server must inform the client of the content-type of the
-    document, so in the event of an unknown type it uses the
-    <code>DefaultType</code>. For example:</p>
-
-<example>
-      <code>DefaultType image/gif</code>
-</example>
-    <p>would be appropriate for a directory which contained many gif
-    images with filenames missing the .gif extension.</p>
-
-    <p>Note that unlike <directive
-    module="core">ForceType</directive>, this directive is only
-    provides the default mime-type. All other mime-type definitions,
-    including filename extensions, that might identify the media type
-    will override this default.</p> 
-</usage>
-</directivesynopsis>
-
-<directivesynopsis type="section">
-<name>Directory</name>
-<description>Enclose a group of directives that apply only to the
-named file-system directory and sub-directories</description>
-<syntax>&lt;Directory <em>directory-path</em>&gt;
-... &lt;/Directory&gt;</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
-    <p><directive type="section">Directory</directive> and
-    <code>&lt;/Directory&gt;</code> are used to enclose a group of
-    directives which will apply only to the named directory and
-    sub-directories of that directory. Any directive which is allowed
-    in a directory context may be used.  <em>Directory-path</em> is
-    either the full path to a directory, or a wild-card string. In a
-    wild-card string, `?' matches any single character, and `*'
-    matches any sequences of characters.  You may
-    also use `[]' character ranges like in the shell. Also as of
-    Apache 1.3 none of the wildcards match a `/' character, which more
-    closely mimics the behavior of Unix shells. Example:</p>
-<example>
-   &lt;Directory /usr/local/httpd/htdocs&gt;<br />
-&nbsp;&nbsp;Options Indexes FollowSymLinks<br />
-   &lt;/Directory&gt;<br />
-</example>
-
-    <p>Extended regular
-    expressions can also be used, with the addition of the
-    <code>~</code> character. For example:</p>
-<example>
-   &lt;Directory ~ "^/www/.*/[0-9]{3}"&gt;
-</example>
-    <p>would match directories in /www/ that consisted of three
-    numbers.</p>
-
-    <p>If multiple (non-regular expression) directory sections
-    match the directory (or its parents) containing a document,
-    then the directives are applied in the order of shortest match
-    first, interspersed with the directives from the <a
-    href="#accessfilename">.htaccess</a> files. For example,
-    with</p>
-
-<example>
-      &lt;Directory /&gt;<br />
-       &nbsp;&nbsp;AllowOverride None<br />
-       &lt;/Directory&gt;<br />
-      <br />
-       &lt;Directory /home/*&gt;<br />
-       &nbsp;&nbsp;AllowOverride FileInfo<br />
-       &lt;/Directory&gt;
-</example>
-    <p>for access to the document <code>/home/web/dir/doc.html</code>
-    the steps are:</p>
-
-    <ul>
-      <li>Apply directive <code>AllowOverride None</code>
-      (disabling <code>.htaccess</code> files).</li>
-
-      <li>Apply directive <code>AllowOverride FileInfo</code> (for
-      directory <code>/home/web</code>).</li>
-
-      <li>Apply any FileInfo directives in
-      <code>/home/web/.htaccess</code></li>
-    </ul>
-
-    <p>Regular expressions are not considered until after all of the
-    normal sections have been applied. Then all of the regular
-    expressions are tested in the order they appeared in the
-    configuration file. For example, with</p>
-
-<example>&lt;Directory ~ abc$&gt;<br />
-       ... directives here ...<br />
-       &lt;/Directory&gt;<br />
-</example>
-
-    <p>The regular expression section won't be considered until after
-    all normal &lt;Directory&gt;s and <code>.htaccess</code> files
-    have been applied. Then the regular expression will match on
-    <code>/home/abc/public_html/abc</code> and be applied.</p>
-
-   <p><strong>Note that the default Apache access for
-    &lt;Directory /&gt; is <code>Allow from All</code>. This means
-    that Apache will serve any file mapped from an URL. It is
-    recommended that you change this with a block such
-    as</strong></p>
-
-<example>
- &lt;Directory /&gt;<br />
-     &nbsp;&nbsp;Order Deny,Allow<br />
-     &nbsp;&nbsp;Deny from All<br />
- &lt;/Directory&gt;
-</example>
-
-    <p><strong>and then override this for directories you
-    <em>want</em> accessible. See the <a
-    href="../misc/security_tips.html">Security Tips</a> page for more
-    details.</strong></p> 
-
-    <p>The directory sections typically occur in
-    the access.conf file, but they may appear in any configuration
-    file.  <directive type="section">Directory</directive> directives
-    cannot nest, and cannot appear in a <directive module="core"
-    type="section">Limit</directive> or <directive module="core"
-    type="section">LimitExcept</directive> section.</p>
-</usage>
-<seealso><a href="../sections.html">How
-    Directory, Location and Files sections work</a> for an
-    explanation of how these different sections are combined when a
-    request is received</seealso>
-</directivesynopsis>
-
-<directivesynopsis type="section">
-<name>DirectoryMatch</name>
-<description>Enclose a group of directives that apply only to 
-file-system directories that match a regular expression and their
-subdirectories</description>
-<syntax>&lt;Directory <em>regex</em>&gt;
-... &lt;/Directory&gt;</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
-    <p><directive type="section">DirectoryMatch</directive> and
-    <code>&lt;/DirectoryMatch&gt;</code> are used to enclose a group
-    of directives which will apply only to the named directory and
-    sub-directories of that directory, the same as <directive
-    module="core" type="section">Directory</directive>. However, it
-    takes as an argument a regular expression. For example:</p>
-<example>
-   &lt;DirectoryMatch "^/www/.*/[0-9]{3}"&gt;
-</example>
-
-    <p>would match directories in <code>/www/</code> that consisted of three
-    numbers.</p>
-</usage>
-<seealso><directive type="section" module="core">Directory</directive> for
-a description of how regular expressions are mixed in with normal
-<code>&lt;Directory&gt;</code>s</seealso>
-<seealso><a
-href="../sections.html">How Directory, Location and Files sections
-work</a> for an explanation of how these different sections are
-combined when a request is received</seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>DocumentRoot</name>
-<description>Sets the directory that forms the main document tree visible
-from the web</description>
-<syntax>DocumentRoot <em>directory-path</em></syntax>
-<default>DocumentRoot /usr/local/apache/htdocs</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
-    <p>This directive sets the directory from which httpd will
-    serve files. Unless matched by a directive like Alias, the
-    server appends the path from the requested URL to the document
-    root to make the path to the document. Example:</p>
-<example>
-   DocumentRoot /usr/web
-</example>
-    <p>then an access to
-    <code>http://www.my.host.com/index.html</code> refers to
-    <code>/usr/web/index.html</code>.</p>
-
-    <p>The <directive>DocumentRoot</directive> should be specified without
-    a trailing slash.</p>
-</usage>
-<seealso><a href="../urlmapping.html">Mapping URLs to Filesystem
-Location</a></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ErrorDocument</name>
-<description>Specifies what the server will return to the client
-in case of an error</description>
-<syntax>ErrorDocument <em>error-code document</em></syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>FileInfo</override>
-<compatibility>Quoting syntax for text messages is different in Apache
-2.0</compatibility>
-
-<usage>
-    <p>In the event of a problem or error, Apache can be configured
-    to do one of four things,</p>
-
-    <ol>
-      <li>output a simple hardcoded error message</li>
-
-      <li>output a customized message</li>
-
-      <li>redirect to a local <em>URL-path</em> to handle the
-      problem/error</li>
-
-      <li>redirect to an external <em>URL</em> to handle the
-      problem/error</li>
-    </ol>
-
-    <p>The first option is the default, while options 2-4 are
-    configured using the <directive>ErrorDocument</directive>
-    directive, which is followed by the HTTP response code and a URL
-    or a message. Apache will sometimes offer additional information
-    regarding the problem/error.</p>
-
-    <p>URLs can begin with a slash (/) for local URLs, or be a full
-    URL which the client can resolve. Alternatively, a message can
-    be provided to be displayed by the browser. Examples:</p>
-
-<example>
-      ErrorDocument 500
-      http://foo.example.com/cgi-bin/tester<br />
-       ErrorDocument 404 /cgi-bin/bad_urls.pl<br />
-       ErrorDocument 401 /subscription_info.html<br />
-       ErrorDocument 403 "Sorry can't allow you access
-      today"
-</example>
-
-    <p>Note that when you specify an <directive>ErrorDocument</directive>
-    that points to a remote URL (ie. anything with a method such as
-    "http" in front of it), Apache will send a redirect to the
-    client to tell it where to find the document, even if the
-    document ends up being on the same server. This has several
-    implications, the most important being that the client will not
-    receive the original error status code, but instead will
-    receive a redirect status code. This in turn can confuse web
-    robots and other clients which try to determine if a URL is
-    valid using the status code. In addition, if you use a remote
-    URL in an <code>ErrorDocument 401</code>, the client will not
-    know to prompt the user for a password since it will not
-    receive the 401 status code. Therefore, <strong>if you use an
-    "ErrorDocument 401" directive then it must refer to a local
-    document.</strong></p>
-
-    <p>Prior to version 2.0, messages were indicated by prefixing
-    them with a single unmatched double quote character.</p>
-</usage>
-
-<seealso><a href="../custom-error.html">documentation of
-    customizable responses</a></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ErrorLog</name>
-<description>Sets the name of the file to which the server
-will log errors</description>    
-<syntax> ErrorLog <em>file-path</em>|syslog[:<em>facility</em>]</syntax>
-<default>ErrorLog logs/error_log (Unix)
-ErrorLog logs/error.log (Windows and OS/2)</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
-    <p>The <directive>ErrorLog</directive> directive sets the name of
-    the file to which the server will log any errors it encounters. If
-    the <em>file-path</em> does not begin with a slash (/) then it is
-    assumed to be relative to the <directive
-    module="core">ServerRoot</directive>. If the <em>file-path</em>
-    begins with a pipe (|) then it is assumed to be a command to spawn
-    to handle the error log.</p>
-
-    <p>Using <code>syslog</code> instead of a filename enables logging
-    via syslogd(8) if the system supports it. The default is to use
-    syslog facility <code>local7</code>, but you can override this by
-    using the <code>syslog:</code><em>facility</em> syntax where
-    <em>facility</em> can be one of the names usually documented in
-    syslog(1).</p>
-
-    <p>SECURITY: See the <a
-    href="../misc/security_tips.html#serverroot">security tips</a>
-    document for details on why your security could be compromised
-    if the directory where logfiles are stored is writable by
-    anyone other than the user that starts the server.</p>
-</usage>
-<seealso><directive module="core">LogLevel</directive></seealso>
-<seealso><a href="../logs.html">Apache Log Files</a></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>FileETag</name>
-<description>Configures the file attributes used to create the ETag
-HTTP response header</description>
-<syntax>FileETag <em>component</em> ...</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>FileInfo</override>
-
-<usage>
-    <p>
-    The <directive>FileETag</directive> directive configures the file
-    attributes that are used to create the ETag (entity tag) response
-    header field when the document is based on a file.  (The ETag
-    value is used in cache management to save network bandwidth.)  In
-    Apache 1.3.22 and earlier, the ETag value was <em>always</em> formed
-    from the file's inode, size, and last-modified time (mtime).  The
-    FileETag directive allows you to choose which of these -- if any
-    -- should be used.  The recognized keywords are:
-    </p>
-    <dl>
-     <dt><strong>INode</strong></dt>
-     <dd>The file's i-node number will be included in the calculation</dd>
-     <dt><strong>MTime</strong></dt>
-     <dd>The date and time the file was last modified will be included</dd>
-     <dt><strong>Size</strong></dt>
-     <dd>The number of bytes in the file will be included</dd>
-     <dt><strong>All</strong></dt>
-     <dd>All available fields will be used (equivalent to
-      '<code>FileETag&nbsp;INode&nbsp;MTime&nbsp;Size</code>')</dd>
-     <dt><strong>None</strong></dt>
-     <dd>If a document is file-based, no ETag field will be included in the
-      response</dd>
-    </dl>
-    <p>
-    The INode, MTime, and Size keywords may be prefixed with either '+'
-    or '-', which allow changes to be made to the default setting
-    inherited from a broader scope.  Any keyword appearing without
-    such a prefix immediately and completely cancels the inherited
-    setting.
-    </p>
-    <p>
-    If a directory's configuration includes
-    '<code>FileETag&nbsp;INode&nbsp;MTime&nbsp;Size</code>', and a
-    subdirectory's includes '<code>FileETag&nbsp;-INode</code>',
-    the setting for that subdirectory (which will be inherited by
-    any sub-subdirectories that don't override it) will be equivalent to
-    '<code>FileETag&nbsp;MTime&nbsp;Size</code>'.
-    </p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis type="section">
-<name>Files</name>
-<description>Contains that directives that apply to matched
-filenames</description>
-<syntax>&lt;Files <em>filename</em>&gt; ... &lt;/Files&gt;</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-
-<usage>
-    <p>The <directive type="section">Files</directive> directive
-    provides for access control by filename. It is comparable to the
-    <directive module="core" type="directive">Directory</directive>
-    directive and <directive module="core"
-    type="directive">Location</directive> directives. It should be
-    matched with a <code>&lt;/Files&gt;</code> directive. The
-    directives given within this section will be applied to any object
-    with a basename (last component of filename) matching the
-    specified filename. <directive type="section">Files</directive>
-    sections are processed in the order they appear in the
-    configuration file, after the <directive module="core"
-    type="section">Directory</directive> sections and
-    <code>.htaccess</code> files are read, but before <directive
-    type="section" module="core">Location</directive> sections. Note
-    that <directive type="section">Files</directive> can be nested
-    inside <directive type="section"
-    module="core">Directory</directive> sections to restrict the
-    portion of the filesystem they apply to.</p>
-
-    <p>The <em>filename</em> argument should include a filename, or
-    a wild-card string, where `?' matches any single character, and
-    `*' matches any sequences of characters. Extended regular
-    expressions can also be used, with the addition of the
-    <code>~</code> character. For example:</p>
-<example>
-   &lt;Files ~ "\.(gif|jpe?g|png)$"&gt;
-</example>
-    <p>would match most common Internet graphics formats. In Apache 1.3
-    and later, <directive module="core"
-    type="section">FilesMatch</directive> is preferred, however.</p>
-
-    <p>Note that unlike <directive type="section"
-    module="core">Directory</directive> and <directive type="section"
-    module="core">Location</directive> sections, <directive
-    type="section">Files</directive> sections can be used inside
-    .htaccess files. This allows users to control access to their own
-    files, at a file-by-file level.</p>
-
-</usage>
-<seealso><a href="../sections.html">How
-    Directory, Location and Files sections work</a> for an
-    explanation of how these different sections are combined when a
-    request is received</seealso>
-</directivesynopsis>
-
-<directivesynopsis type="section">
-<name>FilesMatch</name>
-<description>Contains that directives that apply to regular-expression matched
-filenames</description>
-<syntax>&lt;FilesMatch <em>regex</em>&gt; ... &lt;/FilesMatch&gt;</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-
-<usage>
-    <p>The <directive type="section">FilesMatch</directive> directive
-    provides for access control by filename, just as the <directive
-    module="core" type="section">Files</directive> directive
-    does. However, it accepts a regular expression. For example:</p>
-<example>
-   &lt;FilesMatch "\.(gif|jpe?g|png)$"&gt;
-</example>
-
-    <p>would match most common Internet graphics formats.</p>
-</usage>
-
-<seealso><a href="../sections.html">How
-    Directory, Location and Files sections work</a> for an
-    explanation of how these different sections are combined when a
-    request is received</seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ForceType</name>
-<description>Forces all matching files to be served with the specified
-MIME content-type</description>
-<syntax>ForceType <em>mime-type</em></syntax>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<compatibility>Moved to the core in Apache 2.0</compatibility>
-
-<usage>
-    <p>When placed into an <code>.htaccess</code> file or a
-    <directive type="section" module="core">Directory</directive>, or
-    <directive type="section" module="core">Location</directive> or 
-    <directive type="section" module="core">Files</directive>
-    section, this directive forces all matching files to be served
-    with the content type identification given by
-    <em>mime-type</em>. For example, if you had a directory full of
-    GIF files, but did not want to label them all with ".gif", you
-    might want to use:</p>
-<example>
-    ForceType image/gif
-</example>
-
-    <p>Note that unlike <directive module="core">DefaultType</directive>,
-    this directive overrides all mime-type associations, including
-    filename extensions, that might identify the media type.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>HostnameLookups</name>
-<description>Enables DNS lookups on client IP addresses</description>
-<syntax>HostnameLookups on|off|double</syntax>
-<default>HostnameLookups off</default>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context></contextlist>
-
-<usage>
-    <p>This directive enables DNS lookups so that host names can be
-    logged (and passed to CGIs/SSIs in <code>REMOTE_HOST</code>).
-    The value <code>double</code> refers to doing double-reverse
-    DNS. That is, after a reverse lookup is performed, a forward
-    lookup is then performed on that result. At least one of the ip
-    addresses in the forward lookup must match the original
-    address. (In "tcpwrappers" terminology this is called
-    <code>PARANOID</code>.)</p>
-
-    <p>Regardless of the setting, when <module>mod_access</module> is
-    used for controlling access by hostname, a double reverse lookup
-    will be performed.  This is necessary for security. Note that the
-    result of this double-reverse isn't generally available unless you
-    set <code>HostnameLookups double</code>. For example, if only
-    <code>HostnameLookups on</code> and a request is made to an object
-    that is protected by hostname restrictions, regardless of whether
-    the double-reverse fails or not, CGIs will still be passed the
-    single-reverse result in <code>REMOTE_HOST</code>.</p>
-
-    <p>The default is off in order to save the network
-    traffic for those sites that don't truly need the reverse
-    lookups done. It is also better for the end users because they
-    don't have to suffer the extra latency that a lookup entails.
-    Heavily loaded sites should leave this directive
-    <code>off</code>, since DNS lookups can take considerable
-    amounts of time. The utility <a
-    href="../programs/logresolve.html">logresolve</a>, provided in
-    the <em>/support</em> directory, can be used to look up host
-    names from logged IP addresses offline.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>IdentityCheck</name>
-<description>Enables logging of the RFC1413 identity of the remote 
-user</description>
-<syntax>IdentityCheck on|off</syntax>
-<default>IdentityCheck off</default>
-
-<usage>
-    <p>This directive enables RFC1413-compliant logging of the
-    remote user name for each connection, where the client machine
-    runs identd or something similar. This information is logged in
-    the access log.</p>
-
-    <p>The information should not be trusted in any way except for
-    rudimentary usage tracking.</p>
-
-    <p>Note that this can cause serious latency problems accessing
-    your server since every request requires one of these lookups
-    to be performed. When firewalls are involved each lookup might
-    possibly fail and add 30 seconds of latency to each hit. So in
-    general this is not very useful on public servers accessible
-    from the Internet.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis type="section">
-<name>IfDefine</name>
-<description>Encloses directives that will be processed only
-if a test is true at startup</description>
-<syntax>&lt;IfDefine [!]<em>parameter-name</em>&gt; <em>...</em>
-    &lt;/IfDefine&gt;</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-
-<usage>
-    <p>The <code>&lt;IfDefine
-    <em>test</em>&gt;...&lt;/IfDefine&gt;</code> section is used to
-    mark directives that are conditional. The directives within an
-    <directive type="section">IfDefine</directive> section are only
-    processed if the <em>test</em> is true. If <em>test</em> is false,
-    everything between the start and end markers is ignored.</p>
-
-    <p>The <em>test</em> in the <directive
-    type="section">IfDefine</directive> section directive can be one
-    of two forms:</p>
-
-    <ul>
-      <li><em>parameter-name</em></li>
-
-      <li><code>!</code><em>parameter-name</em></li>
-    </ul>
-
-    <p>In the former case, the directives between the start and end
-    markers are only processed if the parameter named
-    <em>parameter-name</em> is defined. The second format reverses
-    the test, and only processes the directives if
-    <em>parameter-name</em> is <strong>not</strong> defined.</p>
-
-    <p>The <em>parameter-name</em> argument is a define as given on
-    the <code>httpd</code> command line via
-    <code>-D</code><em>parameter-</em>, at the time the server was
-    started.</p>
-
-    <p><directive type="section">IfDefine</directive> sections are
-    nest-able, which can be used to implement simple
-    multiple-parameter tests. Example:</p>
-<example><pre>
-  $ httpd -DReverseProxy ...
-
-  # httpd.conf
-  &lt;IfDefine ReverseProxy&gt;
-  LoadModule rewrite_module modules/mod_rewrite.so
-  LoadModule proxy_module   modules/libproxy.so
-  &lt;/IfDefine&gt;
-</pre></example>
-
-</usage>
-</directivesynopsis>
-
-<directivesynopsis type="section">
-<name>IfModule</name>
-<description>Encloses directives that are processed conditional on the
-presence of absence of a specific module</description>
-<syntax>&lt;IfModule [!]<em>module-name</em>&gt; <em>...</em>
-    &lt;/IfModule&gt;</syntax>     
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-
-<usage>
-    <p>The <code>&lt;IfModule
-    <em>test</em>&gt;...&lt;/IfModule&gt;</code> section is used to
-    mark directives that are conditional. The directives within an
-    <directive type="section">IfModule</directive> section are only
-    processed if the <em>test</em> is true. If <em>test</em> is false,
-    everything between the start and end markers is ignored.</p>
-
-    <p>The <em>test</em> in the <directive
-    type="section">IfModule</directive> section directive can be one
-    of two forms:</p>
-
-    <ul>
-      <li><em>module name</em></li>
-
-      <li>!<em>module name</em></li>
-    </ul>
-
-    <p>In the former case, the directives between the start and end
-    markers are only processed if the module named <em>module
-    name</em> is included in Apache -- either compiled in or
-    dynamically loaded using <directive module="mod_so"
-    >LoadModule</directive>. The second format
-    reverses the test, and only processes the directives if <em>module
-    name</em> is <strong>not</strong> included.</p>
-
-    <p>The <em>module name</em> argument is the file name of the
-    module, at the time it was compiled.
-    For example, <code>mod_rewrite.c</code>.</p>
-
-    <p><directive type="section">IfModule</directive> sections are
-    nest-able, which can be used to implement simple multiple-module
-    tests.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>Include</name>
-<description>Includes other configuration files from within
-the server configuration files</description>
-<syntax>Include <em>file-path</em>|<em>directory-path</em></syntax>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
-    <p>This directive allows inclusion of other configuration files
-    from within the server configuration files.</p>
-
-    <p>If <directive>Include</directive> points to a directory, rather than a
-    file, Apache will read all files in that directory, and any
-    subdirectory, and parse those as configuration files.</p>
-
-    <p>The file path specified may be a fully qualified path (i.e.
-    starting with a slash), or may be relative to the 
-    <directive module="core">ServerRoot</directive> directory.</p>
-
-    <p>Examples:</p>
-
-<example>
-     Include /usr/local/apache/conf/ssl.conf<br />
-     Include /usr/local/apache/conf/vhosts/
-</example>
-
-     <p>Or, providing paths relative to your <code>ServerRoot</code>
-     directory:</p>
-
-<example>
-     Include conf/ssl.conf<br />
-     Include conf/vhosts/
-</example>
-
-     <p>Make sure that an included directory does not contain any stray
-     files, such as editor temporary files, for example, as Apache will
-     attempt to read them in and use the contents as configuration
-     directives, which may cause the server to fail on start up.
-     Running <code>apachectl configtest</code> will give you a list of
-     the files that are being processed during the configuration
-     check:</p>
-
-<example><pre>
- root@host# apachectl configtest
-  Processing config directory: /usr/local/apache/conf/vhosts
-  Processing config file: /usr/local/apache/conf/vhosts/vhost1
-  Processing config file: /usr/local/apache/conf/vhosts/vhost2
- Syntax OK
-</pre></example>
-
-     <p>This will help in verifying that you are getting only the files
-     that you intended as part of your configuration.</p>
-</usage>
-
-<seealso><a href="../programs/apachectl.html">apachectl</a></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>KeepAlive</name>
-<description>Turns on or off HTTP persistent connections.</description>
-<syntax>KeepAlive on|off</syntax>
-<default>KeepAlive On</default>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
-    <p>The Keep-Alive extension to HTTP/1.0 and the persistent
-    connection feature of HTTP/1.1 provide long-lived HTTP sessions
-    which allow multiple requests to be sent over the same TCP
-    connection. In some cases this has been shown to result in an
-    almost 50% speedup in latency times for HTML documents with
-    many images. To enable Keep-Alive connections in Apache 1.2 and
-    later, set <code>KeepAlive On</code>.</p>
-
-    <p>For HTTP/1.0 clients, Keep-Alive connections will only be
-    used if they are specifically requested by a client. In
-    addition, a Keep-Alive connection with an HTTP/1.0 client can
-    only be used when the length of the content is known in
-    advance. This implies that dynamic content such as CGI output,
-    SSI pages, and server-generated directory listings will
-    generally not use Keep-Alive connections to HTTP/1.0 clients.
-    For HTTP/1.1 clients, persistent connections are the default
-    unless otherwise specified. If the client requests it, chunked
-    encoding will be used in order to send content of unknown
-    length over persistent connections.</p>
-</usage>
-
-<seealso><directive module="core">MaxKeepAliveRequests</directive></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>KeepAliveTimeout</name>
-<description>Sets the amount of time the server will wait for subsequent
-requests on a persistent connection</description>
-<syntax>KeepAliveTimeout <em>seconds</em></syntax>
-<default>KeepAliveTimeout 15</default>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
-    <p>The number of seconds Apache will wait for a subsequent
-    request before closing the connection. Once a request has been
-    received, the timeout value specified by the
-    <directive module="core">Timeout</directive> directive applies.</p>
-
-    <p>Setting <directive>KeepAliveTimeout</directive> to a high value
-    may cause performance problems in heavily loaded servers. The
-    higher the timeout, the more server processes will be kept
-    occupied waiting on connections with idle clients.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis type="section">
-<name>Limit</name>
-<description>Restrict access controls to only certain HTTP
-methods</description>    
-<syntax>&lt;Limit <em>method</em> [<em>method</em>] ... &gt; ...
-    &lt;/Limit&gt;</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-
-<usage>
-    <p>Access controls are normally effective for
-    <strong>all</strong> access methods, and this is the usual
-    desired behavior. <strong>In the general case, access control
-    directives should not be placed within a
-    <directive type="section">limit</directive> section.</strong></p>
-
-    <p>The purpose of the <directive type="section">Limit</directive>
-    directive is to restrict the effect of the access controls to the
-    nominated HTTP methods. For all other methods, the access
-    restrictions that are enclosed in the <code>&lt;Limit&gt;</code>
-    bracket <strong>will have no effect</strong>. The following
-    example applies the access control only to the methods POST, PUT,
-    and DELETE, leaving all other methods unprotected:</p>
-
-<example>
-      <code>&lt;Limit POST PUT DELETE&gt;<br />
-       &nbsp;&nbsp;Require valid-user<br />
-       &lt;/Limit&gt;</code>
-</example>
-    <p>The method names listed can be one or more of: GET, POST, PUT,
-    DELETE, CONNECT, OPTIONS, TRACE, PATCH, PROPFIND, PROPPATCH,
-    MKCOL, COPY, MOVE, LOCK, and UNLOCK. <strong>The method name is
-    case-sensitive.</strong> If GET is used it will also restrict
-    HEAD requests.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis type="section">
-<name>LimitExcept</name>
-<description>Restrict access controls to all HTTP methods
-except the named ones</description>    
-<syntax>&lt;LimitExcept <em>method</em> [<em>method</em>] ... &gt; ...
-    &lt;/LimitExcept&gt;</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-
-<usage>
-    <p><directive type="section">LimitExcept</directive> and
-    <code>&lt;/LimitExcept&gt;</code> are used to enclose a group of
-    access control directives which will then apply to any HTTP access
-    method <strong>not</strong> listed in the arguments; i.e., it is
-    the opposite of a <directive type="section"
-    module="core">Limit</directive> section and can be used to control
-    both standard and nonstandard/unrecognized methods. See the
-    documentation for <directive module="core"
-    type="section">Limit</directive> for more details.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>LimitRequestBody</name>
-<description>Restricts the total size of the HTTP request body sent
-from the client</description>
-<syntax>LimitRequestBody <em>bytes</em></syntax>
-<default>LimitRequestBody 0</default>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-
-<usage>
-    <p>This directive specifies the number of <em>bytes</em> from 0
-    (meaning unlimited) to 2147483647 (2GB) that are allowed in a
-    request body. The default value is defined by the compile-time
-    constant <code>DEFAULT_LIMIT_REQUEST_BODY</code> (0 as
-    distributed).</p>
-
-    <p>The <directive>LimitRequestBody</directive> directive allows
-    the user to set a limit on the allowed size of an HTTP request
-    message body within the context in which the directive is given
-    (server, per-directory, per-file or per-location). If the client
-    request exceeds that limit, the server will return an error
-    response instead of servicing the request. The size of a normal
-    request message body will vary greatly depending on the nature of
-    the resource and the methods allowed on that resource. CGI scripts
-    typically use the message body for passing form information to the
-    server. Implementations of the PUT method will require a value at
-    least as large as any representation that the server wishes to
-    accept for that resource.</p>
-
-    <p>This directive gives the server administrator greater
-    control over abnormal client request behavior, which may be
-    useful for avoiding some forms of denial-of-service
-    attacks.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>LimitRequestFields</name>
-<description>Limits the number of HTTP request header fields that 
-will be accepted from the client</description>
-<syntax>LimitRequestFields <em>number</em></syntax>
-<default>LimitRequestFields 100</default>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
-    <p><em>Number</em> is an integer from 0 (meaning unlimited) to
-    32767. The default value is defined by the compile-time
-    constant <code>DEFAULT_LIMIT_REQUEST_FIELDS</code> (100 as
-    distributed).</p>
-
-    <p>The <directive>LimitRequestFields</directive> directive allows
-    the server administrator to modify the limit on the number of
-    request header fields allowed in an HTTP request. A server needs
-    this value to be larger than the number of fields that a normal
-    client request might include. The number of request header fields
-    used by a client rarely exceeds 20, but this may vary among
-    different client implementations, often depending upon the extent
-    to which a user has configured their browser to support detailed
-    content negotiation. Optional HTTP extensions are often expressed
-    using request header fields.</p>
-
-    <p>This directive gives the server administrator greater
-    control over abnormal client request behavior, which may be
-    useful for avoiding some forms of denial-of-service attacks.
-    The value should be increased if normal clients see an error
-    response from the server that indicates too many fields were
-    sent in the request.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>LimitRequestFieldSize</name>
-<description>Limits the size of the HTTP request header allowed from the
-client</description>
-<syntax>LimitRequestFieldsize <em>bytes</em></syntax>
-<default>LimitRequestFieldsize 8190</default>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
-    <p>This directive specifies the number of <em>bytes</em> from 0
-    to the value of the compile-time constant
-    <code>DEFAULT_LIMIT_REQUEST_FIELDSIZE</code> (8190 as
-    distributed) that will be allowed in an HTTP request
-    header.</p>
-
-    <p>The <directive>LimitRequestFieldsize</directive> directive
-    allows the server administrator to reduce the limit on the allowed
-    size of an HTTP request header field below the normal input buffer
-    size compiled with the server. A server needs this value to be
-    large enough to hold any one header field from a normal client
-    request. The size of a normal request header field will vary
-    greatly among different client implementations, often depending
-    upon the extent to which a user has configured their browser to
-    support detailed content negotiation.</p>
-
-    <p>This directive gives the server administrator greater
-    control over abnormal client request behavior, which may be
-    useful for avoiding some forms of denial-of-service attacks.
-    Under normal conditions, the value should not be changed from
-    the default.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>LimitRequestLine</name>
-<description>Limit the size of the HTTP request line that will be accepted
-from the client</description>
-<syntax>LimitRequestLine <em>bytes</em></syntax>
-<default>LimitRequestLine 8190</default>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
-    <p>This directive sets the number of <em>bytes</em> from 0 to
-    the value of the compile-time constant
-    <code>DEFAULT_LIMIT_REQUEST_LINE</code> (8190 as distributed)
-    that will be allowed on the HTTP request-line.</p>
-
-    <p>The <directive>LimitRequestLine</directive> directive allows
-    the server administrator to reduce the limit on the allowed size
-    of a client's HTTP request-line below the normal input buffer size
-    compiled with the server. Since the request-line consists of the
-    HTTP method, URI, and protocol version, the
-    <directive>LimitRequestLine</directive> directive places a
-    restriction on the length of a request-URI allowed for a request
-    on the server. A server needs this value to be large enough to
-    hold any of its resource names, including any information that
-    might be passed in the query part of a GET request.</p>
-
-    <p>This directive gives the server administrator greater
-    control over abnormal client request behavior, which may be
-    useful for avoiding some forms of denial-of-service attacks.
-    Under normal conditions, the value should not be changed from
-    the default.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>LimitXMLRequestBody</name>
-<description>Limits the size of an XML-based request body</description>
-<syntax>LimitXMLRequestBody <em>number</em></syntax>
-<default>LimitXMLRequestBody 1000000</default>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
-    <p>Limit (in bytes) on maximum size of an XML-based request
-    body. A value of <code>0</code> will disable any checking.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis type="section">
-<name>Location</name>
-<description>Applies the enclosed directives only to matching
-URLs</description>
-<syntax>&lt;Location
-    <em>URL-path</em>|<em>URL</em>&gt; ... &lt;/Location&gt;</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
-    <p>The <directive type="section">Location</directive> directive
-    provides for access control by URL. It is similar to the
-    <directive type="section" module="core">Directory</directive>
-    directive, and starts a subsection which is terminated with a
-    <code>&lt;/Location&gt;</code> directive. <directive
-    type="section">Location</directive> sections are processed in the
-    order they appear in the configuration file, after the <directive
-    type="section" module="core">Directory</directive> sections and
-    <code>.htaccess</code> files are read, and after the <directive
-    type="section" module="core">Files</directive> sections.</p>
-
-    <p>Note that URLs do not have to line up with the filesystem at
-    all, it should be emphasized that &lt;Location&gt; operates
-    completely outside the filesystem.</p>
-
-    <p>For all origin (non-proxy) requests, the URL to be matched
-    is of the form <code>/path/</code>, and you should not include
-    any <code>http://servername</code> prefix. For proxy requests,
-    the URL to be matched is of the form
-    <code>scheme://servername/path</code>, and you must include the
-    prefix.</p>
-
-    <p>The URL may use wildcards In a wild-card string, `?' matches
-    any single character, and `*' matches any sequences of
-    characters.</p>
-
-    <p>Extended regular
-    expressions can also be used, with the addition of the
-    <code>~</code> character. For example:</p>
-<example>
-   &lt;Location ~ "/(extra|special)/data"&gt;
-</example>
-
-    <p>would match URLs that contained the substring "/extra/data" or
-    "/special/data". In Apache 1.3 and above, a new directive
-    <directive type="section" module="core">LocationMatch</directive>
-    exists which behaves identical to the regex version of
-    <directive type="section">Location</directive>.</p>
-
-    <p>The <directive type="section">Location</directive>
-    functionality is especially useful when combined with the
-    <directive module="core">SetHandler</directive>
-    directive. For example, to enable status requests, but allow them
-    only from browsers at foo.com, you might use:</p>
-<example>
-    &lt;Location /status&gt;<br />
-    SetHandler server-status<br />
-    Order Deny,Allow<br />
-    Deny from all<br />
-    Allow from .foo.com<br />
-    &lt;/Location&gt;
-</example>
-
-<note><title>Note about / (slash)</title> <p>The slash character has
-special meaning depending on where in a URL it appears. People may be
-used to its behavior in the filesystem where multiple adjacent slashes
-are frequently collapsed to a single slash (<em>i.e.</em>,
-<code>/home///foo</code> is the same as <code>/home/foo</code>). In
-URL-space this is not necessarily true. The <directive type="section"
-module="core">LocationMatch</directive> directive and the regex
-version of <directive type="section">Location</directive> require you
-to explicitly specify multiple slashes if that is your intention.  For
-example, <code>&lt;LocationMatch ^/abc&gt;</code> would match the
-request URL <code>/abc</code> but not the request URL
-<code>//abc</code>. The (non-regex) <directive
-type="section">Location</directive> directive behaves similarly when
-used for proxy requests. But when (non-regex) <directive
-type="section">Location</directive> is used for non-proxy requests it
-will implicitly match multiple slashes with a single slash. For
-example, if you specify <code>&lt;Location /abc/def&gt;</code> and the
-request is to <code>/abc//def</code> then it will match.</p>
-</note>
-</usage>
-<seealso><a href="../sections.html">How
-    Directory, Location and Files sections work</a> for an
-    explanation of how these different sections are combined when a
-    request is received</seealso>
-</directivesynopsis>
-
-<directivesynopsis type="section">
-<name>LocationMatch</name>
-<description>Applies the enclosed directives only to regular-expression 
-matching URLs</description>
-<syntax>&lt;LocationMatch
-    <em>regex</em>&gt; ... &lt;/Location&gt;</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
-    <p>The <directive type="section">LocationMatch</directive> directive
-    provides for access control by URL, in an identical manner to
-    <directive module="core"
-    type="section">Location</directive>. However, it takes a regular
-    expression as an argument instead of a simple string.  For
-    example:</p>
-<example>
-   &lt;LocationMatch "/(extra|special)/data"&gt;
-</example>
-
-    <p>would match URLs that contained the substring "/extra/data"
-    or "/special/data".</p>
-</usage>
-
-<seealso><a href="../sections.html">How
-    Directory, Location and Files sections work</a> for an
-    explanation of how these different sections are combined when a
-    request is received</seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>LogLevel</name>
-<description>Controls the verbosity of the ErrorLog</description>
-<syntax>LogLevel <em>level</em></syntax>
-<default>LogLevel warn</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
-    <p><directive>LogLevel</directive> adjusts the verbosity of the
-    messages recorded in the error logs (see <directive
-    module="core">ErrorLog</directive> directive). The following
-    <em>level</em>s are available, in order of decreasing
-    significance:</p>
-
-    <table>
-      <tr>
-        <th><strong>Level</strong> </th>
-
-        <th><strong>Description</strong> </th>
-      </tr>
-
-      <tr>
-        <th>
-        </th>
-
-        <th><strong>Example</strong> </th>
-      </tr>
-
-      <tr>
-        <td><code>emerg</code> </td>
-
-        <td>Emergencies - system is unusable.</td>
-      </tr>
-
-      <tr>
-        <td>
-        </td>
-
-        <td>"Child cannot open lock file. Exiting"</td>
-      </tr>
-
-      <tr>
-        <td><code>alert</code> </td>
-
-        <td>Action must be taken immediately.</td>
-      </tr>
-
-      <tr>
-        <td>
-        </td>
-
-        <td>"getpwuid: couldn't determine user name from uid"</td>
-      </tr>
-
-      <tr>
-        <td><code>crit</code> </td>
-
-        <td>Critical Conditions.</td>
-      </tr>
-
-      <tr>
-        <td>
-        </td>
-
-        <td>"socket: Failed to get a socket, exiting child"</td>
-      </tr>
-
-      <tr>
-        <td><code>error</code> </td>
-
-        <td>Error conditions.</td>
-      </tr>
-
-      <tr>
-        <td>
-        </td>
-
-        <td>"Premature end of script headers"</td>
-      </tr>
-
-      <tr>
-        <td><code>warn</code> </td>
-
-        <td>Warning conditions.</td>
-      </tr>
-
-      <tr>
-        <td>
-        </td>
-
-        <td>"child process 1234 did not exit, sending another
-        SIGHUP"</td>
-      </tr>
-
-      <tr>
-        <td><code>notice</code> </td>
-
-        <td>Normal but significant condition.</td>
-      </tr>
-
-      <tr>
-        <td>
-        </td>
-
-        <td>"httpd: caught SIGBUS, attempting to dump core in
-        ..."</td>
-      </tr>
-
-      <tr>
-        <td><code>info</code> </td>
-
-        <td>Informational.</td>
-      </tr>
-
-      <tr>
-        <td>
-        </td>
-
-        <td>"Server seems busy, (you may need to increase
-        StartServers, or Min/MaxSpareServers)..."</td>
-      </tr>
-
-      <tr>
-        <td><code>debug</code> </td>
-
-        <td>Debug-level messages</td>
-      </tr>
-
-      <tr>
-        <td>
-        </td>
-
-        <td>"Opening config file ..."</td>
-      </tr>
-    </table>
-
-    <p>When a particular level is specified, messages from all
-    other levels of higher significance will be reported as well.
-    <em>E.g.</em>, when <code>LogLevel info</code> is specified,
-    then messages with log levels of <code>notice</code> and
-    <code>warn</code> will also be posted.</p>
-
-    <p>Using a level of at least <code>crit</code> is
-    recommended.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>MaxKeepAliveRequests</name>
-<description>Sets the number of requests allowed on a persistent 
-connection</description>
-<syntax>MaxKeepAliveRequests <em>number</em></syntax>
-<default>MaxKeepAliveRequests 100</default>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
-    <p>The <directive>MaxKeepAliveRequests</directive> directive
-    limits the number of requests allowed per connection when
-    <directive module="core" >KeepAlive</directive> is on. If it is
-    set to "<code>0</code>", unlimited requests will be allowed. We
-    recommend that this setting be kept to a high value for maximum
-    server performance.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>NameVirtualHost</name>
-<description>Configures an IP address for name-virtual
-hosting</description>
-<syntax>NameVirtualHost <em>addr</em>[:<em>port</em>]</syntax>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
-    <p>The <directive>NameVirtualHost</directive> directive is a
-    required directive if you want to configure <a
-    href="../vhosts/">name-based virtual hosts</a>.</p>
-
-    <p>Although <em>addr</em> can be hostname it is recommended
-    that you always use an IP address, <em>e.g.</em></p>
-
-<example>NameVirtualHost 111.22.33.44</example>
-
-    <p>With the <directive>NameVirtualHost</directive> directive you
-    specify the IP address on which the server will receive requests
-    for the name-based virtual hosts. This will usually be the address
-    to which your name-based virtual host names resolve. In cases
-    where a firewall or other proxy receives the requests and forwards
-    them on a different IP address to the server, you must specify the
-    IP address of the physical interface on the machine which will be
-    servicing the requests. If you have multiple name-based hosts on
-    multiple addresses, repeat the directive for each address.</p>
-
-    <p>Note: the "main server" and any _default_ servers will
-    <strong>never</strong> be served for a request to a
-    <directive>NameVirtualHost</directive> IP Address (unless for some
-    reason you specify <directive>NameVirtualHost</directive> but then
-    don't define any VirtualHosts for that address).</p>
-
-    <p>Optionally you can specify a port number on which the
-    name-based virtual hosts should be used, <em>e.g.</em></p>
-
-<example>NameVirtualHost 111.22.33.44:8080</example>
-
-     <p>IPv6 addresses must be enclosed in square brackets, as shown
-     in the following example:</p>
- 
-<example>NameVirtualHost [fe80::a00:20ff:fea7:ccea]:8080</example>
-
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>Options</name>
-<description>Configures what features are available in a particular
-directory</description>
-<syntax>Options
-    [+|-]<em>option</em> [[+|-]<em>option</em>] ...</syntax>
-<default>Options All</default>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>Options</override>
-
-<usage>
-    <p>The <directive>Options</directive> directive controls which
-    server features are available in a particular directory.</p>
-
-    <p><em>option</em> can be set to <code>None</code>, in which
-    case none of the extra features are enabled, or one or more of
-    the following:</p>
-
-    <dl>
-      <dt>All</dt>
-
-      <dd>All options except for MultiViews. This is the default
-      setting.</dd>
-
-      <dt>ExecCGI</dt>
-
-      <dd>
-      Execution of CGI scripts is permitted.</dd>
-
-      <dt>FollowSymLinks</dt>
-
-      <dd>
-
-      The server will follow symbolic links in this directory.<br />
-      <strong>Note</strong>: even though the server follows the
-      symlink it does <em>not</em> change the pathname used to match
-      against <directive type="section"
-      module="core">Directory</directive> sections.<br />
-      <strong>Note</strong>: this option gets ignored if set inside a
-      <directive type="section" module="core">Location</directive>
-      section.</dd>
-
-      <dt>Includes</dt>
-
-      <dd>
-      Server-side includes are permitted.</dd>
-
-      <dt>IncludesNOEXEC</dt>
-
-      <dd>
-
-      Server-side includes are permitted, but the #exec command and
-      #exec CGI are disabled. It is still possible to #include
-      virtual CGI scripts from ScriptAliase'd directories.</dd>
-
-      <dt>Indexes</dt>
-
-      <dd>
-      If a URL which maps to a directory is requested, and the
-      there is no DirectoryIndex (<em>e.g.</em>, index.html) in
-      that directory, then the server will return a formatted
-      listing of the directory.</dd>
-
-      <dt>MultiViews</dt>
-
-      <dd>
-      <a href="../content-negotiation.html">Content negotiated</a>
-      MultiViews are allowed.</dd>
-
-      <dt>SymLinksIfOwnerMatch</dt>
-
-      <dd>
-
-      The server will only follow symbolic links for which the target
-      file or directory is owned by the same user id as the link.<br
-      /> <strong>Note</strong>: this option gets ignored if set inside
-      a <directive module="core" type="section">Location</directive>
-      section.</dd>
-    </dl>
-    <p>Normally, if multiple <directive>Options</directive> could apply to a
-    directory, then the most specific one is taken complete; the
-    options are not merged. However if <em>all</em> the options on
-    the <directive>Options</directive> directive are preceded by a + or -
-    symbol, the options are merged. Any options preceded by a + are
-    added to the options currently in force, and any options
-    preceded by a - are removed from the options currently in
-    force. </p>
-
-    <p>For example, without any + and - symbols:</p>
-
-
-<example>&lt;Directory /web/docs&gt;<br />
-       Options Indexes FollowSymLinks<br />
-       &lt;/Directory&gt;<br />
-       &lt;Directory /web/docs/spec&gt;<br />
-       Options Includes<br />
-       &lt;/Directory&gt;
-</example>
-    <p>then only <code>Includes</code> will be set for the
-    /web/docs/spec directory. However if the second
-    <directive>Options</directive> directive uses the + and - symbols:</p> 
-
-<example>
-      &lt;Directory /web/docs&gt;<br />
-       Options Indexes FollowSymLinks<br />
-       &lt;/Directory&gt;<br />
-       &lt;Directory /web/docs/spec&gt;<br />
-       Options +Includes -Indexes<br />
-       &lt;/Directory&gt;
-</example>
-    <p>then the options <code>FollowSymLinks</code> and
-    <code>Includes</code> are set for the /web/docs/spec directory.</p>
-    
-
-    <p><strong>Note:</strong> Using <code>-IncludesNOEXEC</code> or
-    <code>-Includes</code> disables server-side includes completely
-    regardless of the previous setting.</p>
-
-    <p>The default in the absence of any other settings is
-    <code>All</code>.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>Require</name>
-<description>Selects which authenticated users can access
-a resource</description>    
-<syntax>Require <em>entity-name</em> [<em>entity-name</em>] ...</syntax>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
-    <p>This directive selects which authenticated users can access
-    a directory. The allowed syntaxes are:</p>
-
-    <ul>
-      <li>
-        Require user <em>userid</em> [<em>userid</em>] ... 
-
-        <p>Only the named users can access the directory.</p>
-      </li>
-
-      <li>
-        Require group <em>group-name</em> [<em>group-name</em>] ...
-        
-
-        <p>Only users in the named groups can access the
-        directory.</p>
-      </li>
-
-      <li>
-        Require valid-user 
-
-        <p>All valid users can access the directory.</p>
-      </li>
-    </ul>
-
-    <p><directive>Require</directive> must be accompanied by
-    <directive module="core">AuthName</directive> and <directive
-    module="core">AuthType</directive> directives, and directives such
-    as <directive module="mod_auth">AuthUserFile</directive>
-    and <directive module="mod_auth">AuthGroupFile</directive> (to
-    define users and groups) in order to work correctly. Example:</p>
-
-<example>
-       AuthType Basic<br />
-       AuthName "Restricted Directory"<br />
-       AuthUserFile /web/users<br />
-       AuthGroupFile /web/groups<br />
-       Require group admin<br />
-</example>
-
-    <p>Access controls which are applied in this way are effective for
-    <strong>all</strong> methods. <strong>This is what is normally
-    desired.</strong> If you wish to apply access controls only to
-    specific methods, while leaving other methods unprotected, then
-    place the <directive>Require</directive> statement into a
-    <directive module="core" type="section">Limit</directive>
-    section.</p>
-</usage>
-<seealso><directive module="core">Satisfy</directive></seealso>
-<seealso><module>mod_access</module></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>RLimitCPU</name>
-<description>Limits the CPU consumption of processes launched
-by Apache children</description>
-<syntax>RLimitCPU <em>number</em>|max [<em>number</em>|max]</syntax>
-<default>Unset; uses operating system defaults</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-<compatibility>Moved in version 2.0 to
-    the <a href="../mpm.html">MPMs</a></compatibility>
-
-<usage>
-    <p>Takes 1 or 2 parameters. The first parameter sets the soft
-    resource limit for all processes and the second parameter sets
-    the maximum resource limit. Either parameter can be a number,
-    or <em>max</em> to indicate to the server that the limit should
-    be set to the maximum allowed by the operating system
-    configuration. Raising the maximum resource limit requires that
-    the server is running as root, or in the initial startup
-    phase.</p>
-
-    <p>This applies to processes forked off from Apache children
-    servicing requests, not the Apache children themselves. This
-    includes CGI scripts and SSI exec commands, but not any
-    processes forked off from the Apache parent such as piped
-    logs.</p>
-
-    <p>CPU resource limits are expressed in seconds per
-    process.</p>
-</usage>
-<seealso><directive module="core">RLimitMEM</directive></seealso>
-<seealso><directive module="core">RLimitNPROC</directive></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>RLimitMEM</name>
-<description>Limits the memory consumption of processes launched
-by Apache children</description>
-<syntax>RLimitMEM <em>number</em>|max [<em>number</em>|max]</syntax>
-<default>Unset; uses operating system defaults</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-<compatibility>Moved in version 2.0 to the <a
-href="../mpm.html">MPMs</a>.</compatibility>
-
-<usage>
-    <p>Takes 1 or 2 parameters. The first parameter sets the soft
-    resource limit for all processes and the second parameter sets
-    the maximum resource limit. Either parameter can be a number,
-    or <em>max</em> to indicate to the server that the limit should
-    be set to the maximum allowed by the operating system
-    configuration. Raising the maximum resource limit requires that
-    the server is running as root, or in the initial startup
-    phase.</p>
-
-    <p>This applies to processes forked off from Apache children
-    servicing requests, not the Apache children themselves. This
-    includes CGI scripts and SSI exec commands, but not any
-    processes forked off from the Apache parent such as piped
-    logs.</p>
-
-    <p>Memory resource limits are expressed in bytes per
-    process.</p>
-</usage>
-<seealso><directive module="core">RLimitCPU</directive></seealso>
-<seealso><directive module="core">RLimitNPROC</directive></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>RLimitNPROC</name>
-<description>Limits the number of processes that can be launched by 
-processes launched by Apache children</description>
-<syntax>RLimitNPROC <em>number</em>|max [<em>number</em>|max]</syntax>
-<default>Unset; uses operating system defaults</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-<compatibility>Moved in version 2.0 to the <a
-href="../mpm.html">MPMs</a>.</compatibility>
-
-<usage>
-    <p>Takes 1 or 2 parameters. The first parameter sets the soft
-    resource limit for all processes and the second parameter sets
-    the maximum resource limit. Either parameter can be a number,
-    or <code>max</code> to indicate to the server that the limit
-    should be set to the maximum allowed by the operating system
-    configuration. Raising the maximum resource limit requires that
-    the server is running as root, or in the initial startup
-    phase.</p>
-
-    <p>This applies to processes forked off from Apache children
-    servicing requests, not the Apache children themselves. This
-    includes CGI scripts and SSI exec commands, but not any
-    processes forked off from the Apache parent such as piped
-    logs.</p>
-
-    <p>Process limits control the number of processes per user.</p>
-
-    <p>Note: If CGI processes are <strong>not</strong> running
-    under userids other than the web server userid, this directive
-    will limit the number of processes that the server itself can
-    create. Evidence of this situation will be indicated by
-    <strong><em>cannot fork</em></strong> messages in the
-    error_log.</p>
-</usage>
-<seealso><directive module="core">RLimitMEM</directive></seealso>
-<seealso><directive module="core">RLimitCPU</directive></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>Satisfy</name>
-<description>Configures how host-level access control and user authentication
-interact</description>
-<syntax>Satisfy any|all</syntax>
-<default>Satisfy all</default>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-
-<usage>
-    <p>Access policy if both <directive
-    module="core">Allow</directive> and <directive
-    module="core">Require</directive> used. The parameter can be
-    either <em>'all'</em> or <em>'any'</em>. This directive is only
-    useful if access to a particular area is being restricted by both
-    username/password <em>and</em> client host address. In this case
-    the default behavior ("all") is to require that the client passes
-    the address access restriction <em>and</em> enters a valid
-    username and password. With the "any" option the client will be
-    granted access if they either pass the host restriction or enter a
-    valid username and password. This can be used to password restrict
-    an area, but to let clients from particular addresses in without
-    prompting for a password.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ScriptInterpreterSource</name>
-<description>Controls how the interpreter for CGI scripts is
-located</description>
-<syntax>ScriptInterpreterSource registry|script</syntax>
-<default>ScriptInterpreterSource script</default>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<compatibility>Win32 only</compatibility>
-
-<usage>
-    <p>This directive is used to control how Apache finds the
-    interpreter used to run CGI scripts. The default technique is to
-    use the interpreter pointed to by the #! line in the
-    script. Setting <code>ScriptInterpreterSource registry</code> will
-    cause the Windows Registry to be searched using the script file
-    extension (e.g., .pl) as a search key.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ServerAdmin</name>
-<description>Sets the email address that the server includes in error
-messages sent to the client</description>
-<syntax>ServerAdmin <em>email-address</em></syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
-    <p>The <directive>ServerAdmin</directive> sets the e-mail address
-    that the server includes in any error messages it returns to the
-    client.</p>
-
-    <p>It may be worth setting up a dedicated address for this,
-    <em>e.g.</em></p>
-<example>ServerAdmin www-admin@foo.bar.com</example>
-    <p>as users do not always mention that they are talking about the
-    server!</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ServerAlias</name>
-<description>Sets alternate names for a host used when matching requests
-to name-virtual hosts</description>
-<syntax>ServerAlias <em>hostname</em> [<em>hostname</em>] ...</syntax>
-<contextlist><context>virtual host</context></contextlist>
-
-<usage>
-    <p>The <directive>ServerAlias</directive> directive sets the
-    alternate names for a host, for use with <a
-    href="../vhosts/name-based.html">name-based virtual hosts</a>.</p>
-
-<example>
-    &lt;VirtualHost *&gt;<br />
-    ServerName server.domain.com<br />
-    ServerAlias server server2.domain.com server2<br />
-    ...<br />
-    &lt;/VirtualHost&gt;
-</example>
-</usage>
-<seealso><a href="../vhosts/">Apache Virtual Host documentation</a></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ServerName</name>
-<description>Sets the hostname and port that the server uses to identify
-itself</description>
-<syntax>ServerName <em>fully-qualified-domain-name[:port]</em></syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-<compatibility>In version 2.0, this
-     directive supersedes the functionality of the <directive>Port</directive>
-     directive from version 1.3.</compatibility>
-
-<usage>
-    <p>The <directive>ServerName</directive> directive sets the hostname and
-    port that the server uses to identify itself.  This is used when
-    creating redirection URLs.  For example, if the name of the
-    machine hosting the webserver is <code>simple.example.com</code>,
-    but the machine also has the DNS alias <code>www.example.com</code>
-    and you wish the webserver to be so identified, the following
-    directive should be used:</p>
-
-<example>ServerName www.example.com:80</example>
-
-    <p>If no <directive>ServerName</directive> is specified, then the
-    server attempts to deduce the hostname by performing a reverse
-    lookup on the IP address.  If no port is specified in the
-    servername, then the server will use the port from the incoming
-    request.  For optimal reliability and predictability, you should
-    specify an explicit hostname and port using the
-    <directive>ServerName</directive> directive.</p>
-
-    <p>If you are using <a
-    href="../vhosts/name-based.html">name-based virtual hosts</a>,
-    the <directive>ServerName</directive> inside a
-    <directive type="section" module="core">VirtualHost</directive>
-    section specifies what hostname must appear in the request's
-    <code>Host:</code> header to match this virtual host.</p>
-
-    <p>See the description of the
-    <directive module="core">UseCanonicalName</directive> directive for
-    settings which determine whether self-referential URL's (e.g., by the
-    <module>mod_dir</module> module) will refer to the
-    specified port, or to the port number given in the client's request.
-    </p>
-</usage>
-
-<seealso><a href="../dns-caveats.html">DNS Issues</a></seealso>
-<seealso><a href="../vhosts/">Apache virtual host
-    documentation</a></seealso>
-<seealso><directive module="core">UseCanonicalName</directive></seealso>
-<seealso><directive module="core">NameVirtualHost</directive></seealso>
-<seealso><directive module="core">ServerAlias</directive></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ServerPath</name>
-<description>Sets the legacy URL pathname for a name-virtual host that
-is accessed by an incompatible browser</description>
-<syntax>ServerPath <em>directory-path</em></syntax>
-<contextlist><context>virtual host</context></contextlist>
-
-<usage>
-    <p>The <directive>ServerPath</directive> directive sets the legacy
-    URL pathname for a host, for use with <a
-    href="../vhosts/">name-based virtual hosts</a>.</p>
-</usage>
-<seealso><a href="../vhosts/">Apache Virtual Host documentation</a></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ServerRoot</name>
-<description>Sets the base directory for the server installation</description>
-<syntax>ServerRoot <em>directory-path</em></syntax>
-<default>ServerRoot /usr/local/apache</default>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
-    <p>The <directive>ServerRoot</directive> directive sets the
-    directory in which the server lives. Typically it will contain the
-    subdirectories <code>conf/</code> and <code>logs/</code>. Relative
-    paths for other configuration files are taken as relative to this
-    directory.</p>
-</usage>
-<seealso><a href="../invoking.html">the <code>-d</code>
-    option to <code>httpd</code></a></seealso>
-<seealso><a href="../misc/security_tips.html#serverroot">the
-    security tips</a> for information on how to properly set
-    permissions on the ServerRoot</seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ServerSignature</name>
-<description>Configures the footer on server-generated documents</description>
-<syntax>ServerSignature On|Off|EMail</syntax>
-<default>ServerSignature Off</default>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-
-<usage>
-    <p>The <directive>ServerSignature</directive> directive allows the
-    configuration of a trailing footer line under server-generated
-    documents (error messages, mod_proxy ftp directory listings,
-    mod_info output, ...). The reason why you would want to enable
-    such a footer line is that in a chain of proxies, the user often
-    has no possibility to tell which of the chained servers actually
-    produced a returned error message.<br /> The <code>Off</code>
-    setting, which is the default, suppresses the error line (and is
-    therefore compatible with the behavior of Apache-1.2 and
-    below). The <code>On</code> setting simply adds a line with the
-    server version number and <directive
-    module="core">ServerName</directive> of the serving virtual host,
-    and the <code>EMail</code> setting additionally creates a
-    "mailto:" reference to the <directive
-    module="core">ServerAdmin</directive> of the referenced
-    document.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ServerTokens</name>
-<description>Configures the Server HTTP response header</description>
-<syntax>ServerTokens Minimal|ProductOnly|OS|Full</syntax>
-<default>ServerTokens Full</default>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
-    <p>This directive controls whether <code>Server</code> response
-    header field which is sent back to clients includes a
-    description of the generic OS-type of the server as well as
-    information about compiled-in modules.</p>
-
-    <dl>
-      <dt><code>ServerTokens Prod[uctOnly]</code></dt>
-
-      <dd>Server sends (<em>e.g.</em>): <code>Server:
-      Apache</code></dd>
-
-      <dt><code>ServerTokens Min[imal]</code></dt>
-
-      <dd>Server sends (<em>e.g.</em>): <code>Server:
-      Apache/1.3.0</code></dd>
-
-      <dt><code>ServerTokens OS</code></dt>
-
-      <dd>Server sends (<em>e.g.</em>): <code>Server: Apache/1.3.0
-      (Unix)</code></dd>
-
-      <dt><code>ServerTokens Full</code> (or not specified)</dt>
-
-      <dd>Server sends (<em>e.g.</em>): <code>Server: Apache/1.3.0
-      (Unix) PHP/3.0 MyMod/1.2</code></dd>
-    </dl>
-
-    <p>This setting applies to the entire server, and cannot be
-    enabled or disabled on a virtualhost-by-virtualhost basis.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>SetHandler</name>
-<description>Forces all matching files to be processed by a
-handler</description>
-<syntax>SetHandler <em>handler-name</em></syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<compatibility>Moved into the core in Apache 2.0</compatibility>
-
-<usage>
-    <p>When placed into an <code>.htaccess</code> file or a
-    <directive type="section" module="core">Directory</directive> or 
-    <directive type="section" module="core">Location</directive>
-    section, this directive forces all matching files to be parsed
-    through the <a href="../handler.html">handler</a> given by
-    <em>handler-name</em>. For example, if you had a directory you
-    wanted to be parsed entirely as imagemap rule files, regardless
-    of extension, you might put the following into an
-    <code>.htaccess</code> file in that directory:</p>
-<example>
-    SetHandler imap-file
-</example>
-
-    <p>Another example: if you wanted to have the server display a
-    status report whenever a URL of
-    <code>http://servername/status</code> was called, you might put
-    the following into httpd.conf:</p>
-<example>
-    &lt;Location /status&gt;<br />
-    SetHandler server-status<br />
-    &lt;/Location&gt;
-</example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>SetInputFilter</name>
-<description>Sets the filters that will process client requests and POST
-input</description>
-<syntax>SetInputFilter <em>filter</em>[<em>;filter</em>...]</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-
-<usage>
-    <p>The <directive>SetInputFilter</directive> directive sets the
-    filter or filters which will process client requests and POST
-    input when they are received by the server. This is in addition to
-    any filters defined elsewhere, including the
-    <directive module="mod_mime">AddInputFilter</directive>
-    directive.</p>
-
-    <p>If more than one filter is specified, they must be separated
-    by semicolons in the order in which they should process the
-    content.</p>
-</usage>
-<seealso><a href="../filter.html">Filters</a> documentation</seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>SetOutputFilter</name>
-<description>Sets the filters that will process responses from the
-server</description>
-<syntax>SetOutputFilter <em>filter</em> [<em>filter</em>] ...</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-
-<usage>
-    <p>The <directive>SetOutputFilter</directive> directive sets the filters
-    which will process responses from the server before they are
-    sent to the client. This is in addition to any filters defined
-    elsewhere, including the
-    <directive module="mod_mime">AddOutputFilter</directive>
-    directive.</p>
-
-    <p>For example, the following configuration will process all files
-    in the <code>/www/data/</code> directory for server-side
-    includes.</p>
-<example>
-&lt;Directory /www/data/&gt;<br />
-&nbsp;&nbsp;SetOutputFilter INCLUDES<br />
-&lt;/Directory&gt;
-</example>
-
-    <p>If more than one filter is specified, they must be separated
-    by semicolons in the order in which they should process the
-    content.</p>
-</usage>
-<seealso><a href="../filter.html">Filters</a> documentation</seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>TimeOut</name>
-<description>Defines the amount of time the server will wait for
-certain events before failing a request</description>
-<syntax>TimeOut <em>number</em></syntax>
-<default>TimeOut 300</default>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
-    <p>The <directive>TimeOut</directive> directive currently defines
-    the amount of time Apache will wait for three things:</p>
-
-    <ol>
-      <li>The total amount of time it takes to receive a GET
-      request.</li>
-
-      <li>The amount of time between receipt of TCP packets on a
-      POST or PUT request.</li>
-
-      <li>The amount of time between ACKs on transmissions of TCP
-      packets in responses.</li>
-    </ol>
-    
-    <p>We plan on making these separately configurable at some point
-    down the road. The timer used to default to 1200 before 1.2,
-    but has been lowered to 300 which is still far more than
-    necessary in most situations. It is not set any lower by
-    default because there may still be odd places in the code where
-    the timer is not reset when a packet is sent. </p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>UseCanonicalName</name>
-<description>Configures how the server determines its own name and
-port</description>
-<syntax>UseCanonicalName on|off|dns</syntax>
-<default>UseCanonicalName on</default>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>Options</override>
-
-<usage>
-    <p>In many situations Apache has to construct a
-    <em>self-referential</em> URL. That is, a URL which refers back to
-    the same server. With <code>UseCanonicalName on</code> Apache will
-    use the hostname and port specified in the <directive
-    module="core">ServerName</directive> directive to construct a canonical
-    name for the server. This name is used in all self-referential
-    URLs, and for the values of <code>SERVER_NAME</code> and
-    <code>SERVER_PORT</code> in CGIs.</p>
-
-    <p>With <code>UseCanonicalName off</code> Apache will form
-    self-referential URLs using the hostname and port supplied by
-    the client if any are supplied (otherwise it will use the
-    canonical name). These values are the same that are used to
-    implement <a href="../vhosts/name-based.html">name based
-    virtual hosts</a>, and are available with the same clients. The
-    CGI variables <code>SERVER_NAME</code> and
-    <code>SERVER_PORT</code> will be constructed from the client
-    supplied values as well.</p>
-
-    <p>An example where this may be useful is on an intranet server
-    where you have users connecting to the machine using short
-    names such as <code>www</code>. You'll notice that if the users
-    type a shortname, and a URL which is a directory, such as
-    <code>http://www/splat</code>, <em>without the trailing
-    slash</em> then Apache will redirect them to
-    <code>http://www.domain.com/splat/</code>. If you have
-    authentication enabled, this will cause the user to have to
-    reauthenticate twice (once for <code>www</code> and once again
-    for <code>www.domain.com</code>). But if
-    <directive>UseCanonicalName</directive> is set off, then Apache will
-    redirect to <code>http://www/splat/</code>.</p>
-
-    <p>There is a third option, <code>UseCanonicalName DNS</code>,
-    which is intended for use with mass IP-based virtual hosting to
-    support ancient clients that do not provide a
-    <code>Host:</code> header. With this option Apache does a
-    reverse DNS lookup on the server IP address that the client
-    connected to in order to work out self-referential URLs.</p>
-
-    <p><strong>Warning:</strong> if CGIs make assumptions about the
-    values of <code>SERVER_NAME</code> they may be broken by this
-    option. The client is essentially free to give whatever value
-    they want as a hostname. But if the CGI is only using
-    <code>SERVER_NAME</code> to construct self-referential URLs
-    then it should be just fine.</p>
-</usage>
-<seealso><directive module="core">ServerName</directive></seealso>
-<seealso><directive module="mpm_common">Listen</directive></seealso>
-</directivesynopsis>
-
-<directivesynopsis type="section">
-<name>VirtualHost</name>
-<description>Contains directives that apply only to a specific
-hostname or IP address</description>    
-<syntax>&lt;VirtualHost
-    <em>addr</em>[:<em>port</em>] [<em>addr</em>[:<em>port</em>]]
-    ...&gt; ... &lt;/VirtualHost&gt;</syntax>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
-    <p><directive type="section">VirtualHost</directive> and
-    <code>&lt;/VirtualHost&gt;</code> are used to enclose a group of
-    directives which will apply only to a particular virtual host. Any
-    directive which is allowed in a virtual host context may be
-    used. When the server receives a request for a document on a
-    particular virtual host, it uses the configuration directives
-    enclosed in the <directive type="section">VirtualHost</directive>
-    section. <em>Addr</em> can be</p>
-
-    <ul>
-      <li>The IP address of the virtual host</li>
-
-      <li>A fully qualified domain name for the IP address of the
-      virtual host.</li>
-    </ul>
-    
-
-<example><title>Example</title>
-       &lt;VirtualHost 10.1.2.3&gt;<br />
-       ServerAdmin webmaster@host.foo.com<br />
-       DocumentRoot /www/docs/host.foo.com<br />
-       ServerName host.foo.com<br />
-       ErrorLog logs/host.foo.com-error_log<br />
-       TransferLog logs/host.foo.com-access_log<br />
-       &lt;/VirtualHost&gt;
-</example>
-
- 
-     <p>IPv6 addresses must be specified in square brackets because
-     the optional port number could not be determined otherwise.  An
-     IPv6 example is shown below:</p>
-
-<example>     
-&lt;VirtualHost [fe80::a00:20ff:fea7:ccea]&gt;<br />
-        ServerAdmin webmaster@host.foo.com<br />
-        DocumentRoot /www/docs/host.foo.com<br />
-        ServerName host.foo.com<br />
-       ErrorLog logs/host.foo.com-error_log<br />
-        TransferLog logs/host.foo.com-access_log<br />
-        &lt;/VirtualHost&gt;
-</example>  
-
-    <p>Each Virtual Host must correspond to a different IP address,
-    different port number or a different host name for the server,
-    in the former case the server machine must be configured to
-    accept IP packets for multiple addresses. (If the machine does
-    not have multiple network interfaces, then this can be
-    accomplished with the <code>ifconfig alias</code> command (if
-    your OS supports it), or with kernel patches like <a
-    href="../misc/vif-info.html">VIF</a> (for SunOS(TM) 4.1.x)).</p>
-
-    <p>The special name <code>_default_</code> can be specified in
-    which case this virtual host will match any IP address that is
-    not explicitly listed in another virtual host. In the absence
-    of any _default_ virtual host the "main" server config,
-    consisting of all those definitions outside any VirtualHost
-    section, is used when no match occurs.</p>
-
-    <p>You can specify a <code>:port</code> to change the port that is
-    matched. If unspecified then it defaults to the same port as the
-    most recent <directive module="mpm_common">Listen</directive>
-    statement of the main server. You may also specify <code>:*</code>
-    to match all ports on that address. (This is recommended when used
-    with <code>_default_</code>.)</p>
-
-    <p><strong>SECURITY</strong>: See the <a
-    href="../misc/security_tips.html">security tips</a> document
-    for details on why your security could be compromised if the
-    directory where logfiles are stored is writable by anyone other
-    than the user that starts the server.</p>
-
-    <p><strong>NOTE</strong>: The use of <directive
-    type="section">VirtualHost</directive> does <strong>not</strong>
-    affect what addresses Apache listens on.  You may need to ensure
-    that Apache is listening on the correct addresses using <directive
-    module="mpm_common">Listen</directive>.</p>
-</usage>
-<seealso><a href="../vhosts/">Apache Virtual Host documentation</a></seealso>
-<seealso><a href="../dns-caveats.html">Warnings about DNS and
-    Apache</a></seealso>
-<seealso><a href="../bind.html">Setting
-    which addresses and ports Apache uses</a></seealso>
-<seealso><a href="../sections.html">How
-    Directory, Location and Files sections work</a> for an
-    explanation of how these different sections are combined when a
-    request is received</seealso>
-</directivesynopsis>
-
-</modulesynopsis>
\ No newline at end of file
diff --git a/docs/manual/mod/directive-dict.html b/docs/manual/mod/directive-dict.html
deleted file mode 100644
index deedf08..0000000
--- a/docs/manual/mod/directive-dict.html
+++ /dev/null
@@ -1,327 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta name="generator" content="HTML Tidy, see www.w3.org" />
-
-    <title>Definitions of terms used to describe Apache
-    directives</title>
-  </head>
-  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-
-  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-  vlink="#000080" alink="#FF0000">
-    <!--#include virtual="header.html" -->
-
-    <h1 align="CENTER">Terms Used to Describe Apache
-    Directives</h1>
-
-    <p>Each Apache configuration directive is described using a
-    common format that looks like this:</p>
-
-    <dl>
-      <dd><a href="#Syntax" rel="Help"><strong>Syntax:</strong></a>
-      <em>directive-name</em> <em>some args</em><br />
-       <a href="#Default" rel="Help"><strong>Default:</strong></a>
-      <samp><em>directive-name default-value</em></samp><br />
-       <a href="#Context" rel="Help"><strong>Context:</strong></a>
-      <em>context-list</em><br />
-       <a href="#Override"
-      rel="Help"><strong>Override:</strong></a>
-      <em>override</em><br />
-       <a href="#Status" rel="Help"><strong>Status:</strong></a>
-      <em>status</em><br />
-       <a href="#Module" rel="Help"><strong>Module:</strong></a>
-      <em>module-name</em><br />
-       <a href="#Compatibility"
-      rel="Help"><strong>Compatibility:</strong></a>
-      <em>compatibility notes</em><br />
-       <a href="#Deprecated"
-      rel="Help"><strong>Deprecated:</strong></a> <em>see
-      other</em></dd>
-    </dl>
-
-    <p>Each of the directive's attributes, complete with possible
-    values where possible, are described in this document.</p>
-
-    <h2>Directive Terms</h2>
-
-    <ul>
-      <li><a href="#Syntax">Syntax</a></li>
-
-      <li><a href="#Default">Default</a></li>
-
-      <li><a href="#Context">Context</a></li>
-
-      <li><a href="#Override">Override</a></li>
-
-      <li><a href="#Status">Status</a></li>
-
-      <li><a href="#Module">Module</a></li>
-
-      <li><a href="#Compatibility">Compatibility</a></li>
-
-      <li><a href="#Deprecated">Deprecated</a></li>
-    </ul>
-    <hr />
-
-    <h2><a id="Syntax" name="Syntax">Syntax</a></h2>
-
-    <p>This indicates the format of the directive as it would
-    appear in a configuration file. This syntax is extremely
-    directive-specific, and is described in detail in the
-    directive's definition. Generally, the directive name is
-    followed by a series of one or more space-separated arguments.
-    If an argument contains a space, the argument must be enclosed
-    in double quotes. Optional arguments are enclosed in square
-    brackets. Where an argument can take on more than one possible
-    value, the possible values are separated by vertical bars "|".
-    Literal text is presented in the default font, while
-    argument-types for which substitution is necessary are
-    <em>emphasized</em>. Directives which can take a variable
-    number of arguments will end in "..." indicating that the last
-    argument is repeated.</p>
-
-    <p>Directives use a great number of different argument types. A
-    few common ones are defined below.</p>
-
-    <dl>
-      <dt><em>URL</em></dt>
-
-      <dd>A complete Uniform Resource Locator including a scheme,
-      hostname, and optional pathname as in
-      <code>http://www.example.com/path/to/file.html</code></dd>
-
-      <dt><em>URL-path</em></dt>
-
-      <dd>The part of a <em>url</em> which follows the scheme and
-      hostname as in <code>/path/to/file.html</code>. The
-      <em>url-path</em> represents a web-view of a resource, as
-      opposed to a file-system view.</dd>
-
-      <dt><em>file-path</em></dt>
-
-      <dd>The path to a file in the local file-system beginning
-      with the root directory as in
-      <code>/usr/local/apache/htdocs/path/to/file.html</code>.
-      Unless otherwise specified, a <em>file-path</em> which does
-      not begin with a slash will be treated as relative to the <a
-      href="core.html#serverroot">ServerRoot</a>.</dd>
-
-      <dt><em>directory-path</em></dt>
-
-      <dd>The path to a directory in the local file-system
-      beginning with the root directory as in
-      <code>/usr/local/apache/htdocs/path/to/</code>.</dd>
-
-      <dt><em>filename</em></dt>
-
-      <dd>The name of a file with no accompanying path information
-      as in <code>file.html</code>.</dd>
-
-      <dt><em>regex</em></dt>
-
-      <dd>A regular expression, which is a way of describing a
-      pattern to match in text. The directive definition will
-      specify what the <em>regex</em> is matching against.</dd>
-
-      <dt><em>extension</em></dt>
-
-      <dd>In general, this is the part of the <em>filename</em>
-      which follows the last dot. However, Apache recognizes
-      multiple filename extensions, so if a <em>filename</em>
-      contains more than one dot, each dot-separated part of the
-      filename following the first dot is an <em>extension</em>.
-      For example, the <em>filename</em> <code>file.html.en</code>
-      contains two extensions: <code>.html</code> and
-      <code>.en</code>. For Apache directives, you may specify
-      <em>extension</em>s with or without the leading dot. In
-      addition, <em>extension</em>s are not case sensitive.</dd>
-
-      <dt><em>MIME-type</em></dt>
-
-      <dd>A method of describing the format of a file which
-      consists of a major format type and a minor format type,
-      separated by a slash as in <code>text/html</code>.</dd>
-
-      <dt><em>env-variable</em></dt>
-
-      <dd>The name of an <a href="../env.html">environment
-      variable</a> defined in the Apache configuration process.
-      Note this is not necessarily the same as an operating system
-      environment variable. See the <a
-      href="../env.html">environment variable documentation</a> for
-      more details.</dd>
-    </dl>
-    <hr />
-
-    <h2><a id="Default" name="Default">Default</a></h2>
-
-    <p>If the directive has a default value (<em>i.e.</em>, if you
-    omit it from your configuration entirely, the Apache Web server
-    will behave as though you set it to a particular value), it is
-    described here. If there is no default value, this section
-    should say "<em>None</em>". Note that the default listed here
-    is not necessarily the same as the value the directive takes in
-    the default httpd.conf distributed with the server.</p>
-    <hr />
-
-    <h2><a id="Context" name="Context">Context</a></h2>
-
-    <p>This indicates where in the server's configuration files the
-    directive is legal. It's a comma-separated list of one or more
-    of the following values:</p>
-
-    <dl>
-      <dt><strong>server config</strong></dt>
-
-      <dd>This means that the directive may be used in the server
-      configuration files (<em>e.g.</em>, <samp>httpd.conf</samp>,
-      <samp>srm.conf</samp>, and <samp>access.conf</samp>), but
-      <strong>not</strong> within any
-      <samp>&lt;VirtualHost&gt;</samp> or &lt;Directory&gt;
-      containers. It is not allowed in <samp>.htaccess</samp> files
-      at all.</dd>
-
-      <dt><strong>virtual host</strong></dt>
-
-      <dd>This context means that the directive may appear inside
-      <samp>&lt;VirtualHost&gt;</samp> containers in the server
-      configuration files.</dd>
-
-      <dt><strong>directory</strong></dt>
-
-      <dd>A directive marked as being valid in this context may be
-      used inside <samp>&lt;Directory&gt;</samp>,
-      <samp>&lt;Location&gt;</samp>, and <samp>&lt;Files&gt;</samp>
-      containers in the server configuration files, subject to the
-      restrictions outlined in <a href="../sections.html">How
-      Directory, Location and Files sections work</a>.</dd>
-
-      <dt><strong>.htaccess</strong></dt>
-
-      <dd>If a directive is valid in this context, it means that it
-      can appear inside <em>per</em>-directory
-      <samp>.htaccess</samp> files. It may not be processed, though
-      depending upon the <a href="#Override"
-      rel="Help">overrides</a> currently active.</dd>
-    </dl>
-
-    <p>The directive is <em>only</em> allowed within the designated
-    context; if you try to use it elsewhere, you'll get a
-    configuration error that will either prevent the server from
-    handling requests in that context correctly, or will keep the
-    server from operating at all -- <em>i.e.</em>, the server won't
-    even start.</p>
-
-    <p>The valid locations for the directive are actually the
-    result of a Boolean OR of all of the listed contexts. In other
-    words, a directive that is marked as being valid in
-    "<samp>server config, .htaccess</samp>" can be used in the
-    <samp>httpd.conf</samp> file and in <samp>.htaccess</samp>
-    files, but not within any &lt;Directory&gt; or
-    &lt;VirtualHost&gt; containers.</p>
-    <hr />
-
-    <h2><a id="Override" name="Override">Override</a></h2>
-
-    <p>This directive attribute indicates which configuration
-    override must be active in order for the directive to be
-    processed when it appears in a <samp>.htaccess</samp> file. If
-    the directive's <a href="#Context" rel="Help">context</a>
-    doesn't permit it to appear in <samp>.htaccess</samp> files,
-    this attribute should say "<em>Not applicable</em>".</p>
-
-    <p>Overrides are activated by the <a
-    href="core.html#allowoverride"
-    rel="Help"><samp>AllowOverride</samp></a> directive, and apply
-    to a particular scope (such as a directory) and all
-    descendants, unless further modified by other
-    <samp>AllowOverride</samp> directives at lower levels. The
-    documentation for that directive also lists the possible
-    override names available.</p>
-    <hr />
-
-    <h2><a id="Status" name="Status">Status</a></h2>
-
-    <p>This indicates how tightly bound into the Apache Web server
-    the directive is; in other words, you may need to recompile the
-    server with an enhanced set of modules in order to gain access
-    to the directive and its functionality. Possible values for
-    this attribute are:</p>
-
-    <dl>
-      <dt><strong>Core</strong></dt>
-
-      <dd>If a directive is listed as having "Core" status, that
-      means it is part of the innermost portions of the Apache Web
-      server, and is always available.</dd>
-
-      <dt><strong>MPM</strong></dt>
-
-      <dd>A directive labeled as having "MPM" status is provided by
-      a <a href="../mpm.html">Multi-Processing Module</a>. This
-      type of directive will be available if and only if you are
-      using one of the MPMs listed on the <a
-      href="#Module">Module</a> line of the directive
-      definition.</dd>
-
-      <dt><strong>Base</strong></dt>
-
-      <dd>A directive labeled as having "Base" status is supported
-      by one of the standard Apache modules which is compiled into
-      the server by default, and is therefore normally available
-      unless you've taken steps to remove the module from your
-      configuration.</dd>
-
-      <dt><strong>Extension</strong></dt>
-
-      <dd>A directive with "Extension" status is provided by one of
-      the modules included with the Apache server kit, but the
-      module isn't normally compiled into the server. To enable the
-      directive and its functionality, you will need to change the
-      server build configuration files and re-compile Apache.</dd>
-
-      <dt><strong>Experimental</strong></dt>
-
-      <dd>"Experimental" status indicates that the directive is
-      available as part of the Apache kit, but you're on your own
-      if you try to use it. The directive is being documented for
-      completeness, and is not necessarily supported. The module
-      which provides the directive may or may not be compiled in by
-      default; check the top of the page which describes the
-      directive and its module to see if it remarks on the
-      availability.</dd>
-    </dl>
-    <hr />
-
-    <h2><a id="Module" name="Module">Module</a></h2>
-
-    <p>This quite simply lists the name of the source module which
-    defines the directive.</p>
-    <hr />
-
-    <h2><a id="Compatibility"
-    name="Compatibility">Compatibility</a></h2>
-
-    <p>If the directive wasn't part of the original Apache version
-    1 distribution, the version in which it was introduced should
-    be listed here. If the directive has the same name as one from
-    the NCSA HTTPd server, any inconsistencies in behavior between
-    the two should also be mentioned. Otherwise, this attribute
-    should say "<em>No compatibility issues.</em>"</p>
-    <hr />
-
-    <h2><a id="Deprecated" name="Deprecated">Deprecated</a></h2>
-
-    <p>If this directive is eliminated since the Apache version 1
-    distribution, the directive or option that replaces the
-    behavior should be cited here. In general, directives,
-    features, and options are only deprecated to minimize debugging
-    of conflicting features, or if the feature can only continue to
-    be supported in an alternate manner.</p>
-    <!--#include virtual="footer.html" -->
-  </body>
-</html>
-
diff --git a/docs/manual/mod/directive-dict.html.en b/docs/manual/mod/directive-dict.html.en
deleted file mode 100644
index deedf08..0000000
--- a/docs/manual/mod/directive-dict.html.en
+++ /dev/null
@@ -1,327 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta name="generator" content="HTML Tidy, see www.w3.org" />
-
-    <title>Definitions of terms used to describe Apache
-    directives</title>
-  </head>
-  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-
-  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-  vlink="#000080" alink="#FF0000">
-    <!--#include virtual="header.html" -->
-
-    <h1 align="CENTER">Terms Used to Describe Apache
-    Directives</h1>
-
-    <p>Each Apache configuration directive is described using a
-    common format that looks like this:</p>
-
-    <dl>
-      <dd><a href="#Syntax" rel="Help"><strong>Syntax:</strong></a>
-      <em>directive-name</em> <em>some args</em><br />
-       <a href="#Default" rel="Help"><strong>Default:</strong></a>
-      <samp><em>directive-name default-value</em></samp><br />
-       <a href="#Context" rel="Help"><strong>Context:</strong></a>
-      <em>context-list</em><br />
-       <a href="#Override"
-      rel="Help"><strong>Override:</strong></a>
-      <em>override</em><br />
-       <a href="#Status" rel="Help"><strong>Status:</strong></a>
-      <em>status</em><br />
-       <a href="#Module" rel="Help"><strong>Module:</strong></a>
-      <em>module-name</em><br />
-       <a href="#Compatibility"
-      rel="Help"><strong>Compatibility:</strong></a>
-      <em>compatibility notes</em><br />
-       <a href="#Deprecated"
-      rel="Help"><strong>Deprecated:</strong></a> <em>see
-      other</em></dd>
-    </dl>
-
-    <p>Each of the directive's attributes, complete with possible
-    values where possible, are described in this document.</p>
-
-    <h2>Directive Terms</h2>
-
-    <ul>
-      <li><a href="#Syntax">Syntax</a></li>
-
-      <li><a href="#Default">Default</a></li>
-
-      <li><a href="#Context">Context</a></li>
-
-      <li><a href="#Override">Override</a></li>
-
-      <li><a href="#Status">Status</a></li>
-
-      <li><a href="#Module">Module</a></li>
-
-      <li><a href="#Compatibility">Compatibility</a></li>
-
-      <li><a href="#Deprecated">Deprecated</a></li>
-    </ul>
-    <hr />
-
-    <h2><a id="Syntax" name="Syntax">Syntax</a></h2>
-
-    <p>This indicates the format of the directive as it would
-    appear in a configuration file. This syntax is extremely
-    directive-specific, and is described in detail in the
-    directive's definition. Generally, the directive name is
-    followed by a series of one or more space-separated arguments.
-    If an argument contains a space, the argument must be enclosed
-    in double quotes. Optional arguments are enclosed in square
-    brackets. Where an argument can take on more than one possible
-    value, the possible values are separated by vertical bars "|".
-    Literal text is presented in the default font, while
-    argument-types for which substitution is necessary are
-    <em>emphasized</em>. Directives which can take a variable
-    number of arguments will end in "..." indicating that the last
-    argument is repeated.</p>
-
-    <p>Directives use a great number of different argument types. A
-    few common ones are defined below.</p>
-
-    <dl>
-      <dt><em>URL</em></dt>
-
-      <dd>A complete Uniform Resource Locator including a scheme,
-      hostname, and optional pathname as in
-      <code>http://www.example.com/path/to/file.html</code></dd>
-
-      <dt><em>URL-path</em></dt>
-
-      <dd>The part of a <em>url</em> which follows the scheme and
-      hostname as in <code>/path/to/file.html</code>. The
-      <em>url-path</em> represents a web-view of a resource, as
-      opposed to a file-system view.</dd>
-
-      <dt><em>file-path</em></dt>
-
-      <dd>The path to a file in the local file-system beginning
-      with the root directory as in
-      <code>/usr/local/apache/htdocs/path/to/file.html</code>.
-      Unless otherwise specified, a <em>file-path</em> which does
-      not begin with a slash will be treated as relative to the <a
-      href="core.html#serverroot">ServerRoot</a>.</dd>
-
-      <dt><em>directory-path</em></dt>
-
-      <dd>The path to a directory in the local file-system
-      beginning with the root directory as in
-      <code>/usr/local/apache/htdocs/path/to/</code>.</dd>
-
-      <dt><em>filename</em></dt>
-
-      <dd>The name of a file with no accompanying path information
-      as in <code>file.html</code>.</dd>
-
-      <dt><em>regex</em></dt>
-
-      <dd>A regular expression, which is a way of describing a
-      pattern to match in text. The directive definition will
-      specify what the <em>regex</em> is matching against.</dd>
-
-      <dt><em>extension</em></dt>
-
-      <dd>In general, this is the part of the <em>filename</em>
-      which follows the last dot. However, Apache recognizes
-      multiple filename extensions, so if a <em>filename</em>
-      contains more than one dot, each dot-separated part of the
-      filename following the first dot is an <em>extension</em>.
-      For example, the <em>filename</em> <code>file.html.en</code>
-      contains two extensions: <code>.html</code> and
-      <code>.en</code>. For Apache directives, you may specify
-      <em>extension</em>s with or without the leading dot. In
-      addition, <em>extension</em>s are not case sensitive.</dd>
-
-      <dt><em>MIME-type</em></dt>
-
-      <dd>A method of describing the format of a file which
-      consists of a major format type and a minor format type,
-      separated by a slash as in <code>text/html</code>.</dd>
-
-      <dt><em>env-variable</em></dt>
-
-      <dd>The name of an <a href="../env.html">environment
-      variable</a> defined in the Apache configuration process.
-      Note this is not necessarily the same as an operating system
-      environment variable. See the <a
-      href="../env.html">environment variable documentation</a> for
-      more details.</dd>
-    </dl>
-    <hr />
-
-    <h2><a id="Default" name="Default">Default</a></h2>
-
-    <p>If the directive has a default value (<em>i.e.</em>, if you
-    omit it from your configuration entirely, the Apache Web server
-    will behave as though you set it to a particular value), it is
-    described here. If there is no default value, this section
-    should say "<em>None</em>". Note that the default listed here
-    is not necessarily the same as the value the directive takes in
-    the default httpd.conf distributed with the server.</p>
-    <hr />
-
-    <h2><a id="Context" name="Context">Context</a></h2>
-
-    <p>This indicates where in the server's configuration files the
-    directive is legal. It's a comma-separated list of one or more
-    of the following values:</p>
-
-    <dl>
-      <dt><strong>server config</strong></dt>
-
-      <dd>This means that the directive may be used in the server
-      configuration files (<em>e.g.</em>, <samp>httpd.conf</samp>,
-      <samp>srm.conf</samp>, and <samp>access.conf</samp>), but
-      <strong>not</strong> within any
-      <samp>&lt;VirtualHost&gt;</samp> or &lt;Directory&gt;
-      containers. It is not allowed in <samp>.htaccess</samp> files
-      at all.</dd>
-
-      <dt><strong>virtual host</strong></dt>
-
-      <dd>This context means that the directive may appear inside
-      <samp>&lt;VirtualHost&gt;</samp> containers in the server
-      configuration files.</dd>
-
-      <dt><strong>directory</strong></dt>
-
-      <dd>A directive marked as being valid in this context may be
-      used inside <samp>&lt;Directory&gt;</samp>,
-      <samp>&lt;Location&gt;</samp>, and <samp>&lt;Files&gt;</samp>
-      containers in the server configuration files, subject to the
-      restrictions outlined in <a href="../sections.html">How
-      Directory, Location and Files sections work</a>.</dd>
-
-      <dt><strong>.htaccess</strong></dt>
-
-      <dd>If a directive is valid in this context, it means that it
-      can appear inside <em>per</em>-directory
-      <samp>.htaccess</samp> files. It may not be processed, though
-      depending upon the <a href="#Override"
-      rel="Help">overrides</a> currently active.</dd>
-    </dl>
-
-    <p>The directive is <em>only</em> allowed within the designated
-    context; if you try to use it elsewhere, you'll get a
-    configuration error that will either prevent the server from
-    handling requests in that context correctly, or will keep the
-    server from operating at all -- <em>i.e.</em>, the server won't
-    even start.</p>
-
-    <p>The valid locations for the directive are actually the
-    result of a Boolean OR of all of the listed contexts. In other
-    words, a directive that is marked as being valid in
-    "<samp>server config, .htaccess</samp>" can be used in the
-    <samp>httpd.conf</samp> file and in <samp>.htaccess</samp>
-    files, but not within any &lt;Directory&gt; or
-    &lt;VirtualHost&gt; containers.</p>
-    <hr />
-
-    <h2><a id="Override" name="Override">Override</a></h2>
-
-    <p>This directive attribute indicates which configuration
-    override must be active in order for the directive to be
-    processed when it appears in a <samp>.htaccess</samp> file. If
-    the directive's <a href="#Context" rel="Help">context</a>
-    doesn't permit it to appear in <samp>.htaccess</samp> files,
-    this attribute should say "<em>Not applicable</em>".</p>
-
-    <p>Overrides are activated by the <a
-    href="core.html#allowoverride"
-    rel="Help"><samp>AllowOverride</samp></a> directive, and apply
-    to a particular scope (such as a directory) and all
-    descendants, unless further modified by other
-    <samp>AllowOverride</samp> directives at lower levels. The
-    documentation for that directive also lists the possible
-    override names available.</p>
-    <hr />
-
-    <h2><a id="Status" name="Status">Status</a></h2>
-
-    <p>This indicates how tightly bound into the Apache Web server
-    the directive is; in other words, you may need to recompile the
-    server with an enhanced set of modules in order to gain access
-    to the directive and its functionality. Possible values for
-    this attribute are:</p>
-
-    <dl>
-      <dt><strong>Core</strong></dt>
-
-      <dd>If a directive is listed as having "Core" status, that
-      means it is part of the innermost portions of the Apache Web
-      server, and is always available.</dd>
-
-      <dt><strong>MPM</strong></dt>
-
-      <dd>A directive labeled as having "MPM" status is provided by
-      a <a href="../mpm.html">Multi-Processing Module</a>. This
-      type of directive will be available if and only if you are
-      using one of the MPMs listed on the <a
-      href="#Module">Module</a> line of the directive
-      definition.</dd>
-
-      <dt><strong>Base</strong></dt>
-
-      <dd>A directive labeled as having "Base" status is supported
-      by one of the standard Apache modules which is compiled into
-      the server by default, and is therefore normally available
-      unless you've taken steps to remove the module from your
-      configuration.</dd>
-
-      <dt><strong>Extension</strong></dt>
-
-      <dd>A directive with "Extension" status is provided by one of
-      the modules included with the Apache server kit, but the
-      module isn't normally compiled into the server. To enable the
-      directive and its functionality, you will need to change the
-      server build configuration files and re-compile Apache.</dd>
-
-      <dt><strong>Experimental</strong></dt>
-
-      <dd>"Experimental" status indicates that the directive is
-      available as part of the Apache kit, but you're on your own
-      if you try to use it. The directive is being documented for
-      completeness, and is not necessarily supported. The module
-      which provides the directive may or may not be compiled in by
-      default; check the top of the page which describes the
-      directive and its module to see if it remarks on the
-      availability.</dd>
-    </dl>
-    <hr />
-
-    <h2><a id="Module" name="Module">Module</a></h2>
-
-    <p>This quite simply lists the name of the source module which
-    defines the directive.</p>
-    <hr />
-
-    <h2><a id="Compatibility"
-    name="Compatibility">Compatibility</a></h2>
-
-    <p>If the directive wasn't part of the original Apache version
-    1 distribution, the version in which it was introduced should
-    be listed here. If the directive has the same name as one from
-    the NCSA HTTPd server, any inconsistencies in behavior between
-    the two should also be mentioned. Otherwise, this attribute
-    should say "<em>No compatibility issues.</em>"</p>
-    <hr />
-
-    <h2><a id="Deprecated" name="Deprecated">Deprecated</a></h2>
-
-    <p>If this directive is eliminated since the Apache version 1
-    distribution, the directive or option that replaces the
-    behavior should be cited here. In general, directives,
-    features, and options are only deprecated to minimize debugging
-    of conflicting features, or if the feature can only continue to
-    be supported in an alternate manner.</p>
-    <!--#include virtual="footer.html" -->
-  </body>
-</html>
-
diff --git a/docs/manual/mod/directives.html b/docs/manual/mod/directives.html
deleted file mode 100644
index b8b2888..0000000
--- a/docs/manual/mod/directives.html
+++ /dev/null
@@ -1,6 +0,0 @@
-<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><title>Directive Index - Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img alt="[APACHE DOCUMENTATION]" src="../images/sub.gif"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Directive Index</h1><summary>
-    <p>Each Apache directive available in the standard Apache
-    distribution is listed here. They are described using a
-    consistent format, and there is <a href="directive-dict.html" rel="Glossary">a dictionary</a> of the terms used in their
-    descriptions available.</p>
-</summary><ul><li><a href="core.html#acceptpathinfo">AcceptPathInfo</a></li><li><a href="core.html#accessfilename">AccessFileName</a></li><li><a href="mod_actions.html#action">Action</a></li><li><a href="mod_autoindex.html#addalt">AddAlt</a></li><li><a href="mod_autoindex.html#addaltbyencoding">AddAltByEncoding</a></li><li><a href="mod_autoindex.html#addaltbytype">AddAltByType</a></li><li><a href="mod_mime.html#addcharset">AddCharset</a></li><li><a href="core.html#adddefaultcharset">AddDefaultCharset</a></li><li><a href="mod_autoindex.html#adddescription">AddDescription</a></li><li><a href="mod_mime.html#addencoding">AddEncoding</a></li><li><a href="mod_mime.html#addhandler">AddHandler</a></li><li><a href="mod_autoindex.html#addicon">AddIcon</a></li><li><a href="mod_autoindex.html#addiconbyencoding">AddIconByEncoding</a></li><li><a href="mod_autoindex.html#addiconbytype">AddIconByType</a></li><li><a href="mod_mime.html#addinputfilter">AddInputFilter</a></li><li><a href="mod_mime.html#addlanguage">AddLanguage</a></li><li><a href="core.html#addmodule">AddModule</a></li><li><a href="mod_info.html#addmoduleinfo">AddModuleInfo</a></li><li><a href="mod_mime.html#addoutputfilter">AddOutputFilter</a></li><li><a href="mod_mime.html#addtype">AddType</a></li><li><a href="mod_alias.html#alias">Alias</a></li><li><a href="mod_alias.html#aliasmatch">AliasMatch</a></li><li><a href="mod_access.html#allow">Allow</a></li><li><a href="mod_proxy.html#allowconnect">AllowCONNECT</a></li><li><a href="core.html#allowoverride">AllowOverride</a></li><li><a href="mod_auth_anon.html#anonymous">Anonymous</a></li><li><a href="mod_auth_anon.html#anonymous_authoritative">Anonymous_Authoritative</a></li><li><a href="mod_auth_anon.html#anonymous_logemail">Anonymous_LogEmail</a></li><li><a href="mod_auth_anon.html#anonymous_mustgiveemail">Anonymous_MustGiveEmail</a></li><li><a href="mod_auth_anon.html#anonymous_nouserid">Anonymous_NoUserID</a></li><li><a href="mod_auth_anon.html#anonymous_verifyemail">Anonymous_VerifyEmail</a></li><li><a href="mod_auth.html#authauthoritative">AuthAuthoritative</a></li><li><a href="mod_auth_dbm.html#authdbmauthoritative">AuthDBMAuthoritative</a></li><li><a href="mod_auth_dbm.html#authdbmgroupfile">AuthDBMGroupFile</a></li><li><a href="mod_auth_dbm.html#authdbmtype">AuthDBMType</a></li><li><a href="mod_auth_dbm.html#authdbmuserfile">AuthDBMUserFile</a></li><li><a href="mod_auth_digest.html#authdigestalgorithm">AuthDigestAlgorithm</a></li><li><a href="mod_auth_digest.html#authdigestdomain">AuthDigestDomain</a></li><li><a href="mod_auth_digest.html#authdigestfile">AuthDigestFile</a></li><li><a href="mod_auth_digest.html#authdigestgroupfile">AuthDigestGroupFile</a></li><li><a href="mod_auth_digest.html#authdigestnccheck">AuthDigestNcCheck</a></li><li><a href="mod_auth_digest.html#authdigestnonceformat">AuthDigestNonceFormat</a></li><li><a href="mod_auth_digest.html#authdigestnoncelifetime">AuthDigestNonceLifetime</a></li><li><a href="mod_auth_digest.html#authdigestqop">AuthDigestQop</a></li><li><a href="mod_auth.html#authgroupfile">AuthGroupFile</a></li><li><a href="core.html#authname">AuthName</a></li><li><a href="core.html#authtype">AuthType</a></li><li><a href="mod_auth.html#authuserfile">AuthUserFile</a></li><li><a href="mod_setenvif.html#browsermatch">BrowserMatch</a></li><li><a href="mod_setenvif.html#browsermatchnocase">BrowserMatchNoCase</a></li><li><a href="mod_file_cache.html#cachefile">CacheFile</a></li><li><a href="mod_negotiation.html#cachenegotiateddocs">CacheNegotiatedDocs</a></li><li><a href="mod_charset_lite.html#charsetdefault">CharsetDefault</a></li><li><a href="mod_charset_lite.html#charsetoptions">CharsetOptions</a></li><li><a href="mod_charset_lite.html#charsetsourceenc">CharsetSourceEnc</a></li><li><a href="mod_speling.html#checkspelling">CheckSpelling</a></li><li><a href="core.html#contentdigest">ContentDigest</a></li><li><a href="mod_usertrack.html#cookiedomain">CookieDomain</a></li><li><a href="mod_usertrack.html#cookieexpires">CookieExpires</a></li><li><a href="mod_log_config.html#cookielog">CookieLog</a></li><li><a href="mod_usertrack.html#cookiename">CookieName</a></li><li><a href="mod_usertrack.html#cookiestyle">CookieStyle</a></li><li><a href="mod_usertrack.html#cookietracking">CookieTracking</a></li><li><a href="mpm_common.html#coredumpdirectory">CoreDumpDirectory</a></li><li><a href="mod_log_config.html#customlog">CustomLog</a></li><li><a href="mod_dav.html#dav">Dav</a></li><li><a href="mod_dav.html#davdepthinfinity">DavDepthInfinity</a></li><li><a href="mod_dav.html#davlockdb">DavLockDB</a></li><li><a href="mod_dav.html#davmintimeout">DavMinTimeout</a></li><li><a href="mod_autoindex.html#defaulticon">DefaultIcon</a></li><li><a href="mod_mime.html#defaultlanguage">DefaultLanguage</a></li><li><a href="core.html#defaulttype">DefaultType</a></li><li><a href="mod_deflate.html#deflatefilternote">DeflateFilterNote</a></li><li><a href="mod_deflate.html#deflatememlevel">DeflateMemLevel</a></li><li><a href="mod_deflate.html#deflatewindowsize">DeflateWindowSize</a></li><li><a href="mod_access.html#deny">Deny</a></li><li><a href="core.html#directory">Directory</a></li><li><a href="mod_dir.html#directoryindex">DirectoryIndex</a></li><li><a href="core.html#directorymatch">DirectoryMatch</a></li><li><a href="core.html#documentroot">DocumentRoot</a></li><li><a href="core.html#errordocument">ErrorDocument</a></li><li><a href="core.html#errorlog">ErrorLog</a></li><li><a href="mod_example.html#example">Example</a></li><li><a href="mod_expires.html#expiresactive">ExpiresActive</a></li><li><a href="mod_expires.html#expiresbytype">ExpiresByType</a></li><li><a href="mod_expires.html#expiresdefault">ExpiresDefault</a></li><li><a href="mod_status.html#extendedstatus">ExtendedStatus</a></li><li><a href="mod_ext_filter.html#extfilterdefine">ExtFilterDefine</a></li><li><a href="mod_ext_filter.html#extfilteroptions">ExtFilterOptions</a></li><li><a href="core.html#fileetag">FileETag</a></li><li><a href="core.html#files">Files</a></li><li><a href="core.html#filesmatch">FilesMatch</a></li><li><a href="mod_negotiation.html#forcelangaugepriority">ForceLangaugePriority</a></li><li><a href="core.html#forcetype">ForceType</a></li><li><a href="mpm_common.html#group">Group</a></li><li><a href="mod_headers.html#header">Header</a></li><li><a href="mod_autoindex.html#headername">HeaderName</a></li><li><a href="core.html#hostnamelookups">HostnameLookups</a></li><li><a href="core.html#identitycheck">IdentityCheck</a></li><li><a href="core.html#ifdefine">IfDefine</a></li><li><a href="core.html#ifmodule">IfModule</a></li><li><a href="mod_imap.html#imapbase">ImapBase</a></li><li><a href="mod_imap.html#imapdefault">ImapDefault</a></li><li><a href="mod_imap.html#imapmenu">ImapMenu</a></li><li><a href="core.html#include">Include</a></li><li><a href="mod_autoindex.html#indexignore">IndexIgnore</a></li><li><a href="mod_autoindex.html#indexoptions">IndexOptions</a></li><li><a href="mod_autoindex.html#indexorderdefault">IndexOrderDefault</a></li><li><a href="mod_isapi.html#isapiappendlogtoerrors">ISAPIAppendLogToErrors</a></li><li><a href="mod_isapi.html#isapiappendlogtoquery">ISAPIAppendLogToQuery</a></li><li><a href="mod_isapi.html#isapifilechache">ISAPIFileChache</a></li><li><a href="mod_isapi.html#isapilognotsupported">ISAPILogNotSupported</a></li><li><a href="mod_isapi.html#isapireadaheadbuffer">ISAPIReadAheadBuffer</a></li><li><a href="core.html#keepalive">KeepAlive</a></li><li><a href="core.html#keepalivetimeout">KeepAliveTimeout</a></li><li><a href="mod_negotiation.html#languagepriority">LanguagePriority</a></li><li><a href="core.html#limit">Limit</a></li><li><a href="core.html#limitexcept">LimitExcept</a></li><li><a href="core.html#limitrequestbody">LimitRequestBody</a></li><li><a href="core.html#limitrequestfields">LimitRequestFields</a></li><li><a href="core.html#limitrequestfieldsize">LimitRequestFieldSize</a></li><li><a href="core.html#limitrequestline">LimitRequestLine</a></li><li><a href="core.html#limitxmlrequestbody">LimitXMLRequestBody</a></li><li><a href="mpm_common.html#listen">Listen</a></li><li><a href="mpm_common.html#listenbacklog">ListenBackLog</a></li><li><a href="mod_so.html#loadfile">LoadFile</a></li><li><a href="mod_so.html#loadmodule">LoadModule</a></li><li><a href="core.html#location">Location</a></li><li><a href="core.html#locationmatch">LocationMatch</a></li><li><a href="mpm_common.html#lockfile">LockFile</a></li><li><a href="mod_log_config.html#logformat">LogFormat</a></li><li><a href="core.html#loglevel">LogLevel</a></li><li><a href="mpm_common.html#maxclients">MaxClients</a></li><li><a href="core.html#maxkeepaliverequests">MaxKeepAliveRequests</a></li><li><a href="mpm_common.html#maxrequestsperchild">MaxRequestsPerChild</a></li><li><a href="mpm_common.html#maxsparethreads">MaxSpareThreads</a></li><li><a href="mpm_common.html#maxthreadsperchild">MaxThreadsPerChild</a></li><li><a href="mod_cern_meta.html#metadir">MetaDir</a></li><li><a href="mod_cern_meta.html#metafiles">MetaFiles</a></li><li><a href="mod_cern_meta.html#metasuffix">MetaSuffix</a></li><li><a href="mod_mime_magic.html#mimemagicfile">MimeMagicFile</a></li><li><a href="mpm_common.html#minsparethreads">MinSpareThreads</a></li><li><a href="mod_file_cache.html#mmapfile">MMapFile</a></li><li><a href="mod_mime.html#multiviewsmatch">MultiviewsMatch</a></li><li><a href="core.html#namevirtualhost">NameVirtualHost</a></li><li><a href="mod_proxy.html#noproxy">NoProxy</a></li><li><a href="mpm_common.html#numservers">NumServers</a></li><li><a href="core.html#options">Options</a></li><li><a href="mod_access.html#order">Order</a></li><li><a href="mod_env.html#passenv">PassEnv</a></li><li><a href="mpm_common.html#pidfile">PidFile</a></li><li><a href="mod_proxy.html#proxyblock">ProxyBlock</a></li><li><a href="mod_proxy.html#proxydomain">ProxyDomain</a></li><li><a href="mod_proxy.html#proxyerroroverride">ProxyErrorOverride</a></li><li><a href="mod_proxy.html#proxymaxforwards">ProxyMaxForwards</a></li><li><a href="mod_proxy.html#proxypass">ProxyPass</a></li><li><a href="mod_proxy.html#proxypassreverse">ProxyPassReverse</a></li><li><a href="mod_proxy.html#proxypreservehost">ProxyPreserveHost</a></li><li><a href="mod_proxy.html#proxyreceivebuffersize">ProxyReceiveBufferSize</a></li><li><a href="mod_proxy.html#proxyremote">ProxyRemote</a></li><li><a href="mod_proxy.html#proxyrequests">ProxyRequests</a></li><li><a href="mod_proxy.html#proxytimeout">ProxyTimeout</a></li><li><a href="mod_proxy.html#proxyvia">ProxyVia</a></li><li><a href="mod_autoindex.html#readmename">ReadmeName</a></li><li><a href="mod_alias.html#redirect">Redirect</a></li><li><a href="mod_alias.html#redirectmatch">RedirectMatch</a></li><li><a href="mod_alias.html#redirectpermanent">RedirectPermanent</a></li><li><a href="mod_alias.html#redirecttemp">RedirectTemp</a></li><li><a href="mod_mime.html#removecharset">RemoveCharset</a></li><li><a href="mod_mime.html#removeencoding">RemoveEncoding</a></li><li><a href="mod_mime.html#removehandler">RemoveHandler</a></li><li><a href="mod_mime.html#removeinputfilter">RemoveInputFilter</a></li><li><a href="mod_mime.html#removelanguage">RemoveLanguage</a></li><li><a href="mod_mime.html#removeoutputfilter">RemoveOutputFilter</a></li><li><a href="mod_mime.html#removetype">RemoveType</a></li><li><a href="mod_headers.html#requestheader">RequestHeader</a></li><li><a href="core.html#require">Require</a></li><li><a href="mod_rewrite.html#rewritebase">RewriteBase</a></li><li><a href="mod_rewrite.html#rewritecond">RewriteCond</a></li><li><a href="mod_rewrite.html#rewriteengine">RewriteEngine</a></li><li><a href="mod_rewrite.html#rewritelock">RewriteLock</a></li><li><a href="mod_rewrite.html#rewritelog">RewriteLog</a></li><li><a href="mod_rewrite.html#rewriteloglevel">RewriteLogLevel</a></li><li><a href="mod_rewrite.html#rewritemap">RewriteMap</a></li><li><a href="mod_rewrite.html#rewriteoptions">RewriteOptions</a></li><li><a href="mod_rewrite.html#rewriterule">RewriteRule</a></li><li><a href="core.html#rlimitcpu">RLimitCPU</a></li><li><a href="core.html#rlimitmem">RLimitMEM</a></li><li><a href="core.html#rlimitnproc">RLimitNPROC</a></li><li><a href="core.html#satisfy">Satisfy</a></li><li><a href="mpm_common.html#scoreboardfile">ScoreBoardFile</a></li><li><a href="mod_actions.html#script">Script</a></li><li><a href="mod_alias.html#scriptalias">ScriptAlias</a></li><li><a href="mod_alias.html#scriptaliasmatch">ScriptAliasMatch</a></li><li><a href="core.html#scriptinterpretersource">ScriptInterpreterSource</a></li><li><a href="mod_cgi.html#scriptlog">ScriptLog</a></li><li><a href="mod_cgi.html#scriptlogbuffer">ScriptLogBuffer</a></li><li><a href="mod_cgi.html#scriptloglength">ScriptLogLength</a></li><li><a href="mpm_common.html#sendbuffersize">SendBufferSize</a></li><li><a href="core.html#serveradmin">ServerAdmin</a></li><li><a href="core.html#serveralias">ServerAlias</a></li><li><a href="mpm_common.html#serverlimit">ServerLimit</a></li><li><a href="core.html#servername">ServerName</a></li><li><a href="core.html#serverpath">ServerPath</a></li><li><a href="core.html#serverroot">ServerRoot</a></li><li><a href="core.html#serversignature">ServerSignature</a></li><li><a href="core.html#servertokens">ServerTokens</a></li><li><a href="mod_env.html#setenv">SetEnv</a></li><li><a href="mod_setenvif.html#setenvif">SetEnvIf</a></li><li><a href="mod_setenvif.html#setenvifnocase">SetEnvIfNoCase</a></li><li><a href="core.html#sethandler">SetHandler</a></li><li><a href="core.html#setinputfilter">SetInputFilter</a></li><li><a href="core.html#setoutputfilter">SetOutputFilter</a></li><li><a href="mod_include.html#ssiendtag">SSIEndTag</a></li><li><a href="mod_include.html#ssierrormsg">SSIErrorMsg</a></li><li><a href="mod_include.html#ssistarttag">SSIStartTag</a></li><li><a href="mod_include.html#ssitimeformat">SSITimeFormat</a></li><li><a href="mod_include.html#ssiundefinedecho">SSIUndefinedEcho</a></li><li><a href="mod_ssl.html#sslcacertificatefile">SSLCACertificateFile</a></li><li><a href="mod_ssl.html#sslcacertificatepath">SSLCACertificatePath</a></li><li><a href="mod_ssl.html#sslcarevocationfile">SSLCARevocationFile</a></li><li><a href="mod_ssl.html#sslcarevocationpath">SSLCARevocationPath</a></li><li><a href="mod_ssl.html#sslcertificatechainfile">SSLCertificateChainFile</a></li><li><a href="mod_ssl.html#sslcertificatefile">SSLCertificateFile</a></li><li><a href="mod_ssl.html#sslcertificatekeyfile">SSLCertificateKeyFile</a></li><li><a href="mod_ssl.html#sslciphersuite">SSLCipherSuite</a></li><li><a href="mod_ssl.html#sslengine">SSLEngine</a></li><li><a href="mod_ssl.html#ssllog">SSLLog</a></li><li><a href="mod_ssl.html#sslloglevel">SSLLogLevel</a></li><li><a href="mod_ssl.html#sslmutex">SSLMutex</a></li><li><a href="mod_ssl.html#ssloptions">SSLOptions</a></li><li><a href="mod_ssl.html#sslpassphrasedialog">SSLPassPhraseDialog</a></li><li><a href="mod_ssl.html#sslprotocol">SSLProtocol</a></li><li><a href="mod_ssl.html#sslrandomseed">SSLRandomSeed</a></li><li><a href="mod_ssl.html#sslrequire">SSLRequire</a></li><li><a href="mod_ssl.html#sslrequiressl">SSLRequireSSL</a></li><li><a href="mod_ssl.html#sslsessioncache">SSLSessionCache</a></li><li><a href="mod_ssl.html#sslsessioncachetimeout">SSLSessionCacheTimeout</a></li><li><a href="mod_ssl.html#sslverifyclient">SSLVerifyClient</a></li><li><a href="mod_ssl.html#sslverifydepth">SSLVerifyDepth</a></li><li><a href="mpm_common.html#startservers">StartServers</a></li><li><a href="mpm_common.html#startthreads">StartThreads</a></li><li><a href="mod_suexec.html#suexecusergroup">SuexecUserGroup</a></li><li><a href="mpm_common.html#threadlimit">ThreadLimit</a></li><li><a href="mpm_common.html#threadsperchild">ThreadsPerChild</a></li><li><a href="core.html#timeout">TimeOut</a></li><li><a href="mod_log_config.html#transferlog">TransferLog</a></li><li><a href="mod_mime.html#typesconfig">TypesConfig</a></li><li><a href="mod_env.html#unsetenv">UnsetEnv</a></li><li><a href="core.html#usecanonicalname">UseCanonicalName</a></li><li><a href="mpm_common.html#user">User</a></li><li><a href="mod_userdir.html#userdir">UserDir</a></li><li><a href="mod_vhost_alias.html#virtualdocumentroot">VirtualDocumentRoot</a></li><li><a href="mod_vhost_alias.html#virtualdocumentrootip">VirtualDocumentRootIP</a></li><li><a href="core.html#virtualhost">VirtualHost</a></li><li><a href="mod_vhost_alias.html#virtualscriptalias">VirtualScriptAlias</a></li><li><a href="mod_vhost_alias.html#virtualscriptaliasip">VirtualScriptAliasIP</a></li><li><a href="mod_include.html#xbithack">XBitHack</a></li></ul></blockquote><hr/><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img alt="Index" src="../images/index.gif"/></a><a href="../"><img alt="Home" src="../images/home.gif"/></a></body></html>
\ No newline at end of file
diff --git a/docs/manual/mod/directives.xml b/docs/manual/mod/directives.xml
deleted file mode 100644
index 6ef8220..0000000
--- a/docs/manual/mod/directives.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE directiveindex [
-    <!ENTITY allmodules SYSTEM "allmodules.xml">
-]>
-
-<?xml-stylesheet type="text/xsl" href="../style/manual.xsl"?>
-<directiveindex>
-<title>Directive Index</title>
-<summary>
-    <p>Each Apache directive available in the standard Apache
-    distribution is listed here. They are described using a
-    consistent format, and there is <a href="directive-dict.html"
-    rel="Glossary">a dictionary</a> of the terms used in their
-    descriptions available.</p>
-</summary>
-&allmodules;
-</directiveindex>
\ No newline at end of file
diff --git a/docs/manual/mod/footer.html b/docs/manual/mod/footer.html
deleted file mode 100644
index 54f6044..0000000
--- a/docs/manual/mod/footer.html
+++ /dev/null
@@ -1,6 +0,0 @@
-    <hr />
-
-    <h3 align="CENTER">Apache HTTP Server Version 2.0</h3>
-    <a href="./"><img src="../images/index.gif" alt="Index" /></a>
-    <a href="../"><img src="../images/home.gif" alt="Home" /></a>
-
diff --git a/docs/manual/mod/header.html b/docs/manual/mod/header.html
deleted file mode 100644
index 749461d..0000000
--- a/docs/manual/mod/header.html
+++ /dev/null
@@ -1,6 +0,0 @@
-    <div align="CENTER">
-      <img src="../images/sub.gif" alt="[APACHE DOCUMENTATION]" /> 
-
-      <h3>Apache HTTP Server Version 2.0</h3>
-    </div>
-
diff --git a/docs/manual/mod/index-bytype.html b/docs/manual/mod/index-bytype.html
deleted file mode 100644
index 906ae34..0000000
--- a/docs/manual/mod/index-bytype.html
+++ /dev/null
@@ -1,289 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta name="generator" content="HTML Tidy, see www.w3.org" />
-
-    <title>Apache modules</title>
-  </head>
-  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-
-  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-  vlink="#000080" alink="#FF0000">
-    <!--#include virtual="header.html" -->
-
-    <h1 align="CENTER">Apache modules</h1>
-
-    <p>Below is a list of all of the modules that come as part of
-    the Apache distribution. See also the list of modules <a
-    href="index.html">sorted alphabetically</a> and the complete
-    alphabetical list of <a href="directives.html">all Apache
-    directives</a>.</p>
-
-    <h2>Core and Mutli-Processing Modules</h2>
-
-    <dl>
-      <dt><a href="core.html">Core</a></dt>
-
-      <dd>Core Apache features.</dd>
-
-      <dt><a href="worker.html">worker</a></dt>
-
-      <dd>Multi-Processing Module with Threading via Pthreads;
-      Variable number of processes, constant number of
-      threads/child</dd>
-
-      <dt><a href="mpm_winnt.html">mpm_winnt</a></dt>
-
-      <dd>Multi-Processing Module with a single control process and
-      a single server process with multiple threads for Windows
-      NT</dd>
-
-      <dt><a href="perchild.html">perchild</a></dt>
-
-      <dd>Multi-Processing Module with the ability to server
-      different virtual hosts under different userids.</dd>
-
-      <dt><a href="prefork.html">prefork</a></dt>
-
-      <dd>Non-threaded preforking processes model similar to Apache
-      1.3</dd>
-
-      <dt><a href="mpm_netware.html">mpm_netware</a></dt>
-
-      <dd>Thread only model optimized for Novell NetWare</dd>
-    </dl>
-
-    <h2>Environment Creation</h2>
-
-    <dl>
-      <dt><a href="mod_env.html">mod_env</a></dt>
-
-      <dd>Passing of environments to CGI scripts</dd>
-
-      <dt><a href="mod_setenvif.html">mod_setenvif</a></dt>
-
-      <dd>Set environment variables based on client
-      information</dd>
-
-      <dt><a href="mod_unique_id.html">mod_unique_id</a></dt>
-
-      <dd>Generate unique request identifier for every request</dd>
-    </dl>
-
-    <h2>Content Type Decisions</h2>
-
-    <dl>
-      <dt><a href="mod_mime.html">mod_mime</a></dt>
-
-      <dd>Determining document types using file extensions.</dd>
-
-      <dt><a href="mod_mime_magic.html">mod_mime_magic</a></dt>
-
-      <dd>Determining document types using "magic numbers".</dd>
-
-      <dt><a href="mod_negotiation.html">mod_negotiation</a></dt>
-
-      <dd>Content negotiation.</dd>
-
-      <dt><a href="mod_charset_lite.html">mod_charset_lite</a></dt>
-
-      <dd>Configuring character set translation.</dd>
-    </dl>
-
-    <h2>URL Mapping</h2>
-
-    <dl>
-      <dt><a href="mod_alias.html">mod_alias</a></dt>
-
-      <dd>Mapping different parts of the host filesystem in the
-      document tree, and URL redirection.</dd>
-
-      <dt><a href="mod_rewrite.html">mod_rewrite</a></dt>
-
-      <dd>Powerful URI-to-filename mapping using regular
-      expressions</dd>
-
-      <dt><a href="mod_userdir.html">mod_userdir</a></dt>
-
-      <dd>User home directories.</dd>
-
-      <dt><a href="mod_speling.html">mod_speling</a></dt>
-
-      <dd>Automatically correct minor typos in URLs</dd>
-
-      <dt><a href="mod_vhost_alias.html">mod_vhost_alias</a></dt>
-
-      <dd>Support for dynamically configured mass virtual
-      hosting</dd>
-    </dl>
-
-    <h2>Directory Handling</h2>
-
-    <dl>
-      <dt><a href="mod_dir.html">mod_dir</a></dt>
-
-      <dd>Basic directory handling.</dd>
-
-      <dt><a href="mod_autoindex.html">mod_autoindex</a></dt>
-
-      <dd>Automatic directory listings.</dd>
-    </dl>
-
-    <h2>Access Control</h2>
-
-    <dl>
-      <dt><a href="mod_access.html">mod_access</a></dt>
-
-      <dd>Access control based on client hostname or IP
-      address.</dd>
-
-      <dt><a href="mod_auth.html">mod_auth</a></dt>
-
-      <dd>User authentication using text files.</dd>
-
-      <dt><a href="mod_auth_dbm.html">mod_auth_dbm</a></dt>
-
-      <dd>User authentication using DBM files.</dd>
-
-      <dt><a href="mod_auth_anon.html">mod_auth_anon</a></dt>
-
-      <dd>Anonymous user access to authenticated areas.</dd>
-
-      <dt><a href="mod_auth_digest.html">mod_auth_digest</a></dt>
-
-      <dd>MD5 authentication</dd>
-
-      <dt><a href="mod_auth_ldap.html">mod_auth_ldap</a></dt>
-
-      <dd>User authentication using LDAP.</dd>
-    </dl>
-
-    <h2>HTTP Response</h2>
-
-    <dl>
-      <dt><a href="mod_headers.html">mod_headers</a></dt>
-
-      <dd>Add arbitrary HTTP headers to resources</dd>
-
-      <dt><a href="mod_cern_meta.html">mod_cern_meta</a></dt>
-
-      <dd>Support for HTTP header metafiles.</dd>
-
-      <dt><a href="mod_expires.html">mod_expires</a></dt>
-
-      <dd>Apply Expires: headers to resources</dd>
-
-      <dt><a href="mod_asis.html">mod_asis</a></dt>
-
-      <dd>Sending files which contain their own HTTP headers.</dd>
-    </dl>
-
-    <h2>Dynamic Content</h2>
-
-    <dl>
-      <dt><a href="mod_include.html">mod_include</a></dt>
-
-      <dd>Server-parsed documents.</dd>
-
-      <dt><a href="mod_cgi.html">mod_cgi</a></dt>
-
-      <dd>Invoking CGI scripts.</dd>
-
-      <dt><a href="mod_cgid.html">mod_cgid</a></dt>
-
-      <dd>Invoking CGI scripts using an external daemon.</dd>
-
-      <dt><a href="mod_actions.html">mod_actions</a></dt>
-
-      <dd>Executing CGI scripts based on media type or request
-      method.</dd>
-
-      <dt><a href="mod_isapi.html">mod_isapi</a></dt>
-
-      <dd>Windows ISAPI Extension support</dd>
-
-      <dt><a href="mod_ext_filter.html">mod_ext_filter</a></dt>
-
-      <dd>Filtering content with external programs.</dd>
-
-      <dt><a href="mod_suexec.html">mod_suexec</a></dt>
-
-      <dd>Run CGI requests as a specified user and group.</dd>
-    </dl>
-
-    <h2>Internal Content Handlers</h2>
-
-    <dl>
-      <dt><a href="mod_status.html">mod_status</a></dt>
-
-      <dd>Server status display</dd>
-
-      <dt><a href="mod_info.html">mod_info</a></dt>
-
-      <dd>Server configuration information</dd>
-    </dl>
-
-    <h2>Logging</h2>
-
-    <dl>
-      <dt><a href="mod_log_config.html">mod_log_config</a></dt>
-
-      <dd>User-configurable logging replacement for
-      mod_log_common.</dd>
-
-      <dt><a href="mod_usertrack.html">mod_usertrack</a></dt>
-
-      <dd>User tracking using Cookies</dd>
-    </dl>
-
-    <h2>Miscellaneous</h2>
-
-    <dl>
-      <dt><a href="mod_imap.html">mod_imap</a></dt>
-
-      <dd>The imagemap file handler.</dd>
-
-      <dt><a href="mod_proxy.html">mod_proxy</a></dt>
-
-      <dd>Caching proxy abilities</dd>
-
-      <dt><a href="mod_so.html">mod_so</a></dt>
-
-      <dd>Support for loading modules at runtime</dd>
-
-      <dt><a href="mod_file_cache.html">mod_file_cache</a></dt>
-
-      <dd>Caching files in memory for faster serving.</dd>
-
-      <dt><a href="mod_dav.html">mod_dav</a></dt>
-
-      <dd>Class 1,2 <a href="http://www.webdav.org">WebDAV</a> HTTP
-      extensions</dd>
-
-      <dt><a href="mod_deflate.html">mod_deflate</a></dt>
-
-      <dd>Compression of content</dd>
-
-      <dt><a href="mod_ssl.html">mod_ssl</a></dt>
-
-      <dd>strong cryptography using the Secure Sockets Layer (SSL) and
-      Transport Layer Security (TLS) protocols</dt>
-
-      <dt><a href="mod_ldap.html">mod_ldap</a></dt>
-
-      <dd>LDAP connection pool and shared memory cache.</dd>
-    </dl>
-
-    <h2>Development</h2>
-
-    <dl>
-      <dt><a href="mod_example.html">mod_example</a></dt>
-
-      <dd>Demonstrates Apache API</dd>
-    </dl>
-    <!--#include virtual="footer.html" -->
-  </body>
-</html>
-
diff --git a/docs/manual/mod/index.html b/docs/manual/mod/index.html
deleted file mode 100644
index 5f917e8..0000000
--- a/docs/manual/mod/index.html
+++ /dev/null
@@ -1,54 +0,0 @@
-<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><title>Module Index - Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img alt="[APACHE DOCUMENTATION]" src="../images/sub.gif"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Module Index</h1><summary>
-
-    <p>Below is a list of all of the modules that come as part of
-    the Apache distribution.  See also the complete
-    alphabetical list of <a href="directives.html">all Apache
-    directives</a>.</p>
-
-</summary><h2>Core Features and Multi-Processing Modules</h2><dl><dt><a href="core.html">core</a></dt><dd><description>Core Apache HTTP Server features that are always
-available</description></dd><dt><a href="mpm_common.html">mpm_common</a></dt><dd><description>A collection of directives that are implemented by
-more than one multi-processing module (MPM)</description></dd><dt><a href="mpm_netware.html">mpm_netware</a></dt><dd><description>Multi-Processing Module implementing an exclusively threaded web
-    server optimized for Novell NetWare</description></dd><dt><a href="mpm_winnt.html">mpm_winnt</a></dt><dd><description>This Multi-Processing Module is optimized for Windows
-    NT.</description></dd><dt><a href="perchild.html">perchild</a></dt><dd><description>Multi-Processing Module allowing for daemon processes
-    serving requests to be assigned a variety of different
-    userids</description></dd><dt><a href="prefork.html">prefork</a></dt><dd><description>Implements a non-threaded, pre-forking web server</description></dd><dt><a href="worker.html">worker</a></dt><dd><description>Multi-Processing Module implementing a hybrid
-    multi-threaded multi-process web server</description></dd></dl><h2>Other Modules</h2><dl><dt><a href="mod_access.html">mod_access</a></dt><dd><description>Provides access control based on client hostname, IP
-address, or other characteristics of the client request.</description></dd><dt><a href="mod_actions.html">mod_actions</a></dt><dd><description>This module provides for executing CGI scripts based on
-media type or request method.</description></dd><dt><a href="mod_alias.html">mod_alias</a></dt><dd><description>Provides for mapping different parts of the host
-    filesystem in the document tree and for URL redirection</description></dd><dt><a href="mod_asis.html">mod_asis</a></dt><dd><description>Sends files that contain their own
-HTTP headers</description></dd><dt><a href="mod_auth.html">mod_auth</a></dt><dd><description>User authentication using text files</description></dd><dt><a href="mod_auth_anon.html">mod_auth_anon</a></dt><dd><description>Allows "anonymous" user access to authenticated
-    areas</description></dd><dt><a href="mod_auth_dbm.html">mod_auth_dbm</a></dt><dd><description>Provides for user authentication using DBM
-    files</description></dd><dt><a href="mod_auth_digest.html">mod_auth_digest</a></dt><dd><description>User authentication using MD5
-    Digest Authentication.</description></dd><dt><a href="mod_autoindex.html">mod_autoindex</a></dt><dd><description>Generates directory indexes,
-    automatically, similar to the Unix <em>ls</em> command or the
-    Win32 <em>dir</em> shell command</description></dd><dt><a href="mod_cern_meta.html">mod_cern_meta</a></dt><dd><description>CERN httpd metafile semantics</description></dd><dt><a href="mod_cgi.html">mod_cgi</a></dt><dd><description>Execution of CGI scripts</description></dd><dt><a href="mod_cgid.html">mod_cgid</a></dt><dd><description>Execution of CGI scripts using an
-    external CGI daemon</description></dd><dt><a href="mod_charset_lite.html">mod_charset_lite</a></dt><dd><description>Specify character set translation or recoding</description></dd><dt><a href="mod_dav.html">mod_dav</a></dt><dd><description>Distributed Authoring and Versioning
-(<a href="http://www.webdav.org/">WebDAV</a>) functionality</description></dd><dt><a href="mod_deflate.html">mod_deflate</a></dt><dd><description>Compress content before
-    it is delivered to the client</description></dd><dt><a href="mod_dir.html">mod_dir</a></dt><dd><description>Provides for "trailing slash" redirects and
-    serving directory index files</description></dd><dt><a href="mod_env.html">mod_env</a></dt><dd><description>Modifies the environment which is
-    passed to CGI scripts and SSI pages</description></dd><dt><a href="mod_example.html">mod_example</a></dt><dd><description>Illustrates the Apache module API</description></dd><dt><a href="mod_expires.html">mod_expires</a></dt><dd><description>Generation of
-    <code>Expires</code> HTTP headers according to user-specified
-    criteria</description></dd><dt><a href="mod_ext_filter.html">mod_ext_filter</a></dt><dd><description>Pass the response body
-    through an external program before delivery to the
-    client</description></dd><dt><a href="mod_file_cache.html">mod_file_cache</a></dt><dd><description>Caches a static list of files in memory</description></dd><dt><a href="mod_headers.html">mod_headers</a></dt><dd><description>Customization of HTTP request
-    and response headers</description></dd><dt><a href="mod_imap.html">mod_imap</a></dt><dd><description>Server-side imagemap processing</description></dd><dt><a href="mod_include.html">mod_include</a></dt><dd><description>Server-parsed html documents (Server Side Includes)</description></dd><dt><a href="mod_info.html">mod_info</a></dt><dd><description>Provides a comprehensive overview of the server
-configuration</description></dd><dt><a href="mod_isapi.html">mod_isapi</a></dt><dd><description>ISAPI Extensions within Apache for Windows</description></dd><dt><a href="mod_log_config.html">mod_log_config</a></dt><dd><description>Logging of the requests made to the server</description></dd><dt><a href="mod_mime.html">mod_mime</a></dt><dd><description>Associates the request filename's extensions
-    (e.g. .html) with the file's behavior (handlers and filters)
-    and content (mime-type, language, character set and
-    encoding)</description></dd><dt><a href="mod_mime_magic.html">mod_mime_magic</a></dt><dd><description>Determines the MIME type of a file
-    by looking at a few bytes of its contents</description></dd><dt><a href="mod_negotiation.html">mod_negotiation</a></dt><dd><description>Provides for <a href="../content-negotiation.html">content negotiation</a></description></dd><dt><a href="mod_proxy.html">mod_proxy</a></dt><dd><description>HTTP/1.1 proxy/gateway server</description></dd><dt><a href="mod_rewrite.html">mod_rewrite</a></dt><dd><description>Provides a rule-based rewriting engine to rewrite requested
-URLs on the fly</description></dd><dt><a href="mod_setenvif.html">mod_setenvif</a></dt><dd><description>Allows the setting of environment variables based
-on characteristics of the request</description></dd><dt><a href="mod_so.html">mod_so</a></dt><dd><description>
-This module provides for loading of executable code and
-modules into the server at start-up or restart time.</description></dd><dt><a href="mod_speling.html">mod_speling</a></dt><dd><description>Attempts to correct mistaken URLs that
-users might have entered by ignoring capitalization and by
-allowing up to one misspelling</description></dd><dt><a href="mod_ssl.html">mod_ssl</a></dt><dd><description>Strong cryptography using the Secure Sockets
-Layer (SSL) and Transport Layer Security (TLS) protocols</description></dd><dt><a href="mod_status.html">mod_status</a></dt><dd><description>Provides information on server activity and
-performance</description></dd><dt><a href="mod_suexec.html">mod_suexec</a></dt><dd><description>Allows CGI scripts to run as a specified user
-and Group</description></dd><dt><a href="mod_unique_id.html">mod_unique_id</a></dt><dd><description>Provides an environment variable with a unique
-identifier for each request</description></dd><dt><a href="mod_userdir.html">mod_userdir</a></dt><dd><description>Provides for user-specific
-directories</description></dd><dt><a href="mod_usertrack.html">mod_usertrack</a></dt><dd><description>
-    This module uses cookies to provide for a
-    <em>clickstream</em> log of user activity on a site.
-</description></dd><dt><a href="mod_vhost_alias.html">mod_vhost_alias</a></dt><dd><description>Provides for <a href="../vhosts/mass.html">dynamically configured mass virtual
-hosting</a></description></dd></dl></blockquote><hr/><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img alt="Index" src="../images/index.gif"/></a><a href="../"><img alt="Home" src="../images/home.gif"/></a></body></html>
\ No newline at end of file
diff --git a/docs/manual/mod/index.xml b/docs/manual/mod/index.xml
deleted file mode 100644
index a509c2e..0000000
--- a/docs/manual/mod/index.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE directiveindex [
-    <!ENTITY allmodules SYSTEM "allmodules.xml">
-]>
-
-<?xml-stylesheet type="text/xsl" href="../style/manual.xsl"?>
-<moduleindex>
-<title>Module Index</title>
-<summary>
-
-    <p>Below is a list of all of the modules that come as part of
-    the Apache distribution.  See also the complete
-    alphabetical list of <a href="directives.html">all Apache
-    directives</a>.</p>
-
-</summary>
-&allmodules;
-</moduleindex>
\ No newline at end of file
diff --git a/docs/manual/mod/mod_TEMPLATE.html b/docs/manual/mod/mod_TEMPLATE.html
deleted file mode 100644
index 675c207..0000000
--- a/docs/manual/mod/mod_TEMPLATE.html
+++ /dev/null
@@ -1,122 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta name="generator" content="HTML Tidy, see www.w3.org" />
-
-    <title>Apache module mod_foo</title>
-  </head>
-  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-
-  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-  vlink="#000080" alink="#FF0000">
-    <!--#include virtual="header.html" -->
-
-    <h1 align="center">Module mod_foo</h1>
-    The module mod_foo should be summarized in a sentence or two
-    here. A more complete summary is below, so keep it short. You
-    might say something about what is necessary to enable the
-    functionality, and link to the relevant doc. See <a
-    href="mod_autoindex.html"><code>mod_autoindex</code></a> as a
-    good example. 
-
-    <p><a href="module-dict.html#Status"
-    rel="Help"><strong>Status:</strong></a> Base<br />
-     <a href="module-dict.html#SourceFile"
-    rel="Help"><strong>Source File:</strong></a>
-    mod_autoindex.c<br />
-     <a href="module-dict.html#ModuleIdentifier"
-    rel="Help"><strong>Module Identifier:</strong></a>
-    foo_module</p>
-
-    <h2>Summary</h2>
-    A more detailed summary goes here, but it should still be kept
-    to a few short paragraphs. More detailed discussion of the
-    finer points of the module should be left for below. 
-
-    <h2>Directives</h2>
-
-    <ul>
-      <li><a href="#directive1">Directive1</a></li>
-
-      <li><a href="#directive2">Directive2</a></li>
-
-      <li><a href="#directive3">Directive3</a></li>
-    </ul>
-
-    <p>See also: <a href="core.html#options">Options</a> and <a
-    href="mod_dir.html#directoryindex">DirectoryIndex</a>.</p>
-
-    <h2>More detailed discussion one</h2>
-
-    <p>Here you can discuss in detail a particular point of
-    interest, or something which requires a detailed explanation.
-    This is a good place for examples and tutorial-style
-    discussion.</p>
-
-    <h2>Detailed discussion two</h2>
-
-    <p>You can have more than one such discussion, if
-    appropriate.</p>
-    <hr />
-
-    <h2><a id="directive1" name="directive1">Directive1</a>
-    directive</h2>
-    <a href="directive-dict.html#Syntax"
-    rel="Help"><strong>Syntax:</strong></a> Directive 1
-    <em>argument</em> [<em>optional_argument</em>] ...<br />
-     <a href="directive-dict.html#Context"
-    rel="Help"><strong>Context:</strong></a> server config, virtual
-    host, directory, .htaccess<br />
-     <a href="directive-dict.html#Override"
-    rel="Help"><strong>Override:</strong></a> Indexes<br />
-     <a href="directive-dict.html#Status"
-    rel="Help"><strong>Status:</strong></a> Base<br />
-     <a href="directive-dict.html#Module"
-    rel="Help"><strong>Module:</strong></a> mod_foo 
-
-    <p><em>Directive1</em> will be described in detail here. Each
-    argument should be explained, with example values.</p>
-    <hr />
-
-    <h2><a id="directive2" name="directive2">Directive2</a>
-    directive</h2>
-    <a href="directive-dict.html#Syntax"
-    rel="Help"><strong>Syntax:</strong></a> Directive2
-    <em>argument</em> [<em>optional_argument</em>] ...<br />
-     <a href="directive-dict.html#Context"
-    rel="Help"><strong>Context:</strong></a> server config, virtual
-    host, directory, .htaccess<br />
-     <a href="directive-dict.html#Override"
-    rel="Help"><strong>Override:</strong></a> Indexes<br />
-     <a href="directive-dict.html#Status"
-    rel="Help"><strong>Status:</strong></a> Base<br />
-     <a href="directive-dict.html#Module"
-    rel="Help"><strong>Module:</strong></a> mod_foo 
-
-    <p><em>Directive2</em> should then be described in the same
-    manner.</p>
-    <hr />
-
-    <h2><a id="directive3" name="directive3">Directive3</a>
-    directive</h2>
-    <a href="directive-dict.html#Syntax"
-    rel="Help"><strong>Syntax:</strong></a> Directive3
-    <em>argument</em> [<em>optional_argument</em>] ...<br />
-     <a href="directive-dict.html#Context"
-    rel="Help"><strong>Context:</strong></a> server config, virtual
-    host, directory, .htaccess<br />
-     <a href="directive-dict.html#Override"
-    rel="Help"><strong>Override:</strong></a> Indexes<br />
-     <a href="directive-dict.html#Status"
-    rel="Help"><strong>Status:</strong></a> Base<br />
-     <a href="directive-dict.html#Module"
-    rel="Help"><strong>Module:</strong></a> mod_foo 
-
-    <p><em>Directive3</em> is described here, and so on. 
-    <!--#include virtual="footer.html" -->
-    </p>
-  </body>
-</html>
-
diff --git a/docs/manual/mod/mod_access.html b/docs/manual/mod/mod_access.html
deleted file mode 100644
index 3d39bcd..0000000
--- a/docs/manual/mod/mod_access.html
+++ /dev/null
@@ -1,226 +0,0 @@
-<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-     This file is generated from xml source: DO NOT EDIT
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
---><title>mod_access - Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img alt="[APACHE DOCUMENTATION]" src="../images/sub.gif"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module mod_access</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td><description>Provides access control based on client hostname, IP
-address, or other characteristics of the client request.</description></td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="module-dict.html#ModuleIdentifier" class="help">Module&nbsp;Identifier:</a></td><td>access_module</td></tr></table></td></tr></table><h2>Summary</h2><summary>
-    <p>The directives provided by mod_access are used in <a href="core.html#directory" class="directive"><code class="directive">&lt;Directory&gt;</code></a>, <a href="core.html#files" class="directive"><code class="directive">&lt;Files&gt;</code></a>, and <a href="core.html#location" class="directive"><code class="directive">&lt;Location&gt;</code></a> sections as well as
-    <code><a href="core.html#accessfilename">.htaccess</a></code>
-    files to control access to particular parts of the server. Access
-    can be controlled based on the client hostname, IP address, or
-    other characteristics of the client request, as captured in <a href="../env.html">environment variables</a>. The <a href="#allow" class="directive"><code class="directive">Allow</code></a> and <a href="#deny" class="directive"><code class="directive">Deny</code></a> directives are used to
-    specify which clients are or are not allowed access to the server,
-    while the <a href="#order" class="directive"><code class="directive">Order</code></a>
-    directive sets the default access state, and configures how the
-    <a href="#allow" class="directive"><code class="directive">Allow</code></a> and <a href="#deny" class="directive"><code class="directive">Deny</code></a> directives interact with each
-    other.</p>
-
-    <p>Both host-based access restrictions and password-based
-    authentication may be implemented simultaneously. In that case,
-    the <a href="core.html#satisfy" class="directive"><code class="directive">Satisfy</code></a> directive is used
-    to determine how the two sets of restrictions interact.</p>
-
-    <p>In general, access restriction directives apply to all
-    access methods (<code>GET</code>, <code>PUT</code>,
-    <code>POST</code>, etc). This is the desired behavior in most
-    cases. However, it is possible to restrict some methods, while
-    leaving other methods unrestricted, by enclosing the directives
-    in a <a href="core.html#limit" class="directive"><code class="directive">&lt;Limit&gt;</code></a> section.</p>
-</summary><p><strong>See also </strong></p><ul><li><a href="core.html#satisfy" class="directive"><code class="directive">Satisfy</code></a></li><li><a href="core.html#require" class="directive"><code class="directive">Require</code></a></li></ul><h2>Directives</h2><ul><li><a href="#allow">Allow</a></li><li><a href="#deny">Deny</a></li><li><a href="#order">Order</a></li></ul><hr/><h2><a name="Allow">Allow</a> <a name="allow">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Controls which hosts can access an area of the
-server</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax> Allow from
-    all|<em>host</em>|env=<em>env-variable</em>
-    [<em>host</em>|env=<em>env-variable</em>] ...</syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>Limit</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_access</td></tr></table></td></tr></table><usage>
-
-    <p>The <code class="directive">Allow</code> directive affects which hosts can
-    access an area of the server. Access can be controlled by
-    hostname, IP Address, IP Address range, or by other
-    characteristics of the client request captured in environment
-    variables.</p>
-
-    <p>The first argument to this directive is always
-    <code>from</code>. The subsequent arguments can take three
-    different forms. If <code>Allow from all</code> is specified, then
-    all hosts are allowed access, subject to the configuration of the
-    <a href="#deny" class="directive"><code class="directive">Deny</code></a> and <a href="#order" class="directive"><code class="directive">Order</code></a> directives as discussed
-    below. To allow only particular hosts or groups of hosts to access
-    the server, the <em>host</em> can be specified in any of the
-    following formats:</p>
-
-    <dl>
-      <dt>A (partial) domain-name</dt>
-
-      <dd>Example: <code>Allow from apache.org</code><br>
-       Hosts whose names match, or end in, this string are allowed
-      access. Only complete components are matched, so the above
-      example will match <code>foo.apache.org</code> but it will
-      not match <code>fooapache.org</code>. This configuration will
-      cause the server to perform a reverse DNS lookup on the
-      client IP address, regardless of the setting of the <a href="core.html#hostnamelookups" class="directive"><code class="directive">HostnameLookups</code></a>
-      directive.</dd>
-
-      <dt>A full IP address</dt>
-
-      <dd>Example: <code>Allow from 10.1.2.3</code><br>
-       An IP address of a host allowed access</dd>
-
-      <dt>A partial IP address</dt>
-
-      <dd>Example: <code>Allow from 10.1</code><br>
-       The first 1 to 3 bytes of an IP address, for subnet
-      restriction.</dd>
-
-      <dt>A network/netmask pair</dt>
-
-      <dd>Example: <code>Allow from
-      10.1.0.0/255.255.0.0</code><br>
-       A network a.b.c.d, and a netmask w.x.y.z. For more
-      fine-grained subnet restriction.</dd>
-
-      <dt>A network/nnn CIDR specification</dt>
-
-      <dd>Example: <code>Allow from 10.1.0.0/16</code><br>
-       Similar to the previous case, except the netmask consists of
-      nnn high-order 1 bits.</dd>
-    </dl>
-
-    <p>Note that the last three examples above match exactly the
-    same set of hosts.</p>
-
-    <p>IPv6 addresses and IPv6 subnets can be specified as shown
-    below:</p>
-
-    <blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-       Allow from fe80::a00:20ff:fea7:ccea<br>
-       Allow from fe80::a00:20ff:fea7:ccea/10
-    </code></td></tr></table></blockquote>
-
-    <p>The third format of the arguments to the
-    <code class="directive">Allow</code> directive allows access to the server
-    to be controlled based on the existence of an <a href="../env.html">environment variable</a>. When <code>Allow from
-    env=</code><em>env-variable</em> is specified, then the request is
-    allowed access if the environment variable <em>env-variable</em>
-    exists. The server provides the ability to set environment
-    variables in a flexible way based on characteristics of the client
-    request using the directives provided by
-    <code><a href="mod_setenvif.html">mod_setenvif</a></code>.  Therefore, this directive can be
-    used to allow access based on such factors as the clients
-    <code>User-Agent</code> (browser type), <code>Referer</code>, or
-    other HTTP request header fields.</p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><p align="center"><strong>Example:</strong></p><code>
-
-SetEnvIf User-Agent ^KnockKnock/2.0 let_me_in<br>
-&lt;Directory /docroot&gt;<br>
-&nbsp;&nbsp;    Order Deny,Allow<br>
-&nbsp;&nbsp;    Deny from all<br>
-&nbsp;&nbsp;    Allow from env=let_me_in<br>
-&lt;/Directory&gt;
-</code></td></tr></table></blockquote>
-
-    <p>In this case, browsers with a user-agent string beginning
-    with <code>KnockKnock/2.0</code> will be allowed access, and all
-    others will be denied.</p>
-</usage><hr/><h2><a name="Deny">Deny</a> <a name="deny">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Controls which hosts are denied access to the
-server</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax> Deny from
-    all|<em>host</em>|env=<em>env-variable</em>
-    [<em>host</em>|env=<em>env-variable</em>] ...</syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>Limit</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_access</td></tr></table></td></tr></table><usage>
-    <p>This directive allows access to the server to be restricted
-    based on hostname, IP address, or environment variables. The
-    arguments for the <code class="directive">Deny</code> directive are
-    identical to the arguments for the <a href="#allow" class="directive"><code class="directive">Allow</code></a> directive.</p>
-</usage><hr/><h2><a name="Order">Order</a> <a name="order">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Controls the default access state and the order in which
-Allow and Deny are
-evaluated.</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax> Order <em>ordering</em></syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>Order Deny,Allow</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>Limit</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_access</td></tr></table></td></tr></table><usage>
-
-    <p>The <code class="directive">Order</code> directive controls the default
-    access state and the order in which <a href="#allow" class="directive"><code class="directive">Allow</code></a> and <a href="#deny" class="directive"><code class="directive">Deny</code></a> directives are evaluated.
-    <em>Ordering</em> is one of</p>
-
-    <dl>
-      <dt>Deny,Allow</dt>
-
-      <dd>The <a href="#deny" class="directive"><code class="directive">Deny</code></a> directives
-      are evaluated before the <a href="#allow" class="directive"><code class="directive">Allow</code></a> directives. Access is
-      allowed by default.  Any client which does not match a
-      <a href="#deny" class="directive"><code class="directive">Deny</code></a> directive or does
-      match an <a href="#allow" class="directive"><code class="directive">Allow</code></a>
-      directive will be allowed access to the server.</dd>
-
-      <dt>Allow,Deny</dt>
-
-      <dd>The <a href="#allow" class="directive"><code class="directive">Allow</code></a>
-      directives are evaluated before the <a href="#deny" class="directive"><code class="directive">Deny</code></a> directives. Access is denied
-      by default. Any client which does not match an <a href="#allow" class="directive"><code class="directive">Allow</code></a> directive or does match a
-      <a href="#deny" class="directive"><code class="directive">Deny</code></a> directive will be
-      denied access to the server.</dd>
-
-      <dt>Mutual-failure</dt>
-
-      <dd>Only those hosts which appear on the <a href="#allow" class="directive"><code class="directive">Allow</code></a> list and do not appear on
-      the <a href="#deny" class="directive"><code class="directive">Deny</code></a> list are
-      granted access. This ordering has the same effect as <code>Order
-      Allow,Deny</code> and is deprecated in favor of that
-      configuration.</dd>
-    </dl>
-
-    <p>Keywords may only be separated by a comma; no whitespace is
-    allowed between them. Note that in all cases every <a href="#allow" class="directive"><code class="directive">Allow</code></a> and <a href="#deny" class="directive"><code class="directive">Deny</code></a> statement is evaluated.</p>
-
-    <p>In the following example, all hosts in the apache.org domain
-    are allowed access; all other hosts are denied access.</p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-      Order Deny,Allow<br>
-      Deny from all<br>
-      Allow from apache.org<br>
-</code></td></tr></table></blockquote>
-
-    <p>In the next example, all hosts in the apache.org domain are
-    allowed access, except for the hosts which are in the
-    foo.apache.org subdomain, who are denied access. All hosts not
-    in the apache.org domain are denied access because the default
-    state is to deny access to the server.</p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-       Order Allow,Deny<br>
-       Allow from apache.org<br>
-       Deny from foo.apache.org<br>
-</code></td></tr></table></blockquote>
-
-    <p>On the other hand, if the <code>Order</code> in the last
-    example is changed to <code>Deny,Allow</code>, all hosts will
-    be allowed access. This happens because, regardless of the
-    actual ordering of the directives in the configuration file,
-    the <code>Allow from apache.org</code> will be evaluated last
-    and will override the <code>Deny from foo.apache.org</code>.
-    All hosts not in the <code>apache.org</code> domain will also
-    be allowed access because the default state will change to
-    <em>allow</em>.</p>
-
-    <p>The presence of an <code>Order</code> directive can affect
-    access to a part of the server even in the absence of accompanying
-    <a href="#allow" class="directive"><code class="directive">Allow</code></a> and <a href="#deny" class="directive"><code class="directive">Deny</code></a> directives because of its effect
-    on the default access state.  For example,</p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-      &lt;Directory /www&gt;<br>
-      &nbsp;&nbsp;Order Allow,Deny<br>
-      &lt;/Directory&gt;
-</code></td></tr></table></blockquote>
-
-    <p>will deny all access to the <code>/www</code> directory
-    because the default access state will be set to
-    <em>deny</em>.</p>
-
-    <p>The <code class="directive">Order</code> directive controls the order of access
-    directive processing only within each phase of the server's
-    configuration processing. This implies, for example, that an
-    <a href="#allow" class="directive"><code class="directive">Allow</code></a> or <a href="#deny" class="directive"><code class="directive">Deny</code></a> directive occurring in a
-    <a href="core.html#location" class="directive"><code class="directive">&lt;Location&gt;</code></a> section will
-    always be evaluated after an <a href="#allow" class="directive"><code class="directive">Allow</code></a> or <a href="#deny" class="directive"><code class="directive">Deny</code></a> directive occurring in a
-    <a href="core.html#directory" class="directive"><code class="directive">&lt;Directory&gt;</code></a> section or
-    <code>.htaccess</code> file, regardless of the setting of the
-    <code class="directive">Order</code> directive. For details on the merging
-    of configuration sections, see the documentation on <a href="../sections.html">How Directory, Location and Files sections
-    work</a>.</p>
-</usage><hr/><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img alt="Index" src="../images/index.gif"/></a><a href="../"><img alt="Home" src="../images/home.gif"/></a></blockquote></body></html>
\ No newline at end of file
diff --git a/docs/manual/mod/mod_access.xml b/docs/manual/mod/mod_access.xml
deleted file mode 100644
index 44cfb8e..0000000
--- a/docs/manual/mod/mod_access.xml
+++ /dev/null
@@ -1,308 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.xsl"?>
-<modulesynopsis>
-
-<name>mod_access</name> 
-
-<description>Provides access control based on client hostname, IP
-address, or other characteristics of the client request.</description>
-
-<status>Base</status>
-<sourcefile>mod_access.c</sourcefile>
-<identifier>access_module</identifier>
-
-<summary>
-    <p>The directives provided by mod_access are used in <directive
-    module="core" type="section">Directory</directive>, <directive
-    module="core" type="section">Files</directive>, and <directive
-    module="core" type="section">Location</directive> sections as well as
-    <code><a href="core.html#accessfilename">.htaccess</a></code>
-    files to control access to particular parts of the server. Access
-    can be controlled based on the client hostname, IP address, or
-    other characteristics of the client request, as captured in <a
-    href="../env.html">environment variables</a>. The <directive
-    module="mod_access">Allow</directive> and <directive
-    module="mod_access">Deny</directive> directives are used to
-    specify which clients are or are not allowed access to the server,
-    while the <directive module="mod_access">Order</directive>
-    directive sets the default access state, and configures how the
-    <directive module="mod_access">Allow</directive> and <directive
-    module="mod_access">Deny</directive> directives interact with each
-    other.</p>
-
-    <p>Both host-based access restrictions and password-based
-    authentication may be implemented simultaneously. In that case,
-    the <directive module="core">Satisfy</directive> directive is used
-    to determine how the two sets of restrictions interact.</p>
-
-    <p>In general, access restriction directives apply to all
-    access methods (<code>GET</code>, <code>PUT</code>,
-    <code>POST</code>, etc). This is the desired behavior in most
-    cases. However, it is possible to restrict some methods, while
-    leaving other methods unrestricted, by enclosing the directives
-    in a <directive module="core" type="section">Limit</directive> section.</p>
-</summary>
-
-<seealso><directive module="core">Satisfy</directive></seealso>
-<seealso><directive module="core">Require</directive></seealso>
-
-<directivesynopsis>
-<name>Allow</name>
-
-<description>Controls which hosts can access an area of the
-server</description>
-<syntax> Allow from
-    all|<em>host</em>|env=<em>env-variable</em>
-    [<em>host</em>|env=<em>env-variable</em>] ...</syntax>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>Limit</override>
-
-<usage>
-
-    <p>The <directive>Allow</directive> directive affects which hosts can
-    access an area of the server. Access can be controlled by
-    hostname, IP Address, IP Address range, or by other
-    characteristics of the client request captured in environment
-    variables.</p>
-
-    <p>The first argument to this directive is always
-    <code>from</code>. The subsequent arguments can take three
-    different forms. If <code>Allow from all</code> is specified, then
-    all hosts are allowed access, subject to the configuration of the
-    <directive module="mod_access">Deny</directive> and <directive
-    module="mod_access">Order</directive> directives as discussed
-    below. To allow only particular hosts or groups of hosts to access
-    the server, the <em>host</em> can be specified in any of the
-    following formats:</p>
-
-    <dl>
-      <dt>A (partial) domain-name</dt>
-
-      <dd>Example: <code>Allow from apache.org</code><br />
-       Hosts whose names match, or end in, this string are allowed
-      access. Only complete components are matched, so the above
-      example will match <code>foo.apache.org</code> but it will
-      not match <code>fooapache.org</code>. This configuration will
-      cause the server to perform a reverse DNS lookup on the
-      client IP address, regardless of the setting of the <directive
-      module="core">HostnameLookups</directive>
-      directive.</dd>
-
-      <dt>A full IP address</dt>
-
-      <dd>Example: <code>Allow from 10.1.2.3</code><br />
-       An IP address of a host allowed access</dd>
-
-      <dt>A partial IP address</dt>
-
-      <dd>Example: <code>Allow from 10.1</code><br />
-       The first 1 to 3 bytes of an IP address, for subnet
-      restriction.</dd>
-
-      <dt>A network/netmask pair</dt>
-
-      <dd>Example: <code>Allow from
-      10.1.0.0/255.255.0.0</code><br />
-       A network a.b.c.d, and a netmask w.x.y.z. For more
-      fine-grained subnet restriction.</dd>
-
-      <dt>A network/nnn CIDR specification</dt>
-
-      <dd>Example: <code>Allow from 10.1.0.0/16</code><br />
-       Similar to the previous case, except the netmask consists of
-      nnn high-order 1 bits.</dd>
-    </dl>
-
-    <p>Note that the last three examples above match exactly the
-    same set of hosts.</p>
-
-    <p>IPv6 addresses and IPv6 subnets can be specified as shown
-    below:</p>
-
-    <example>
-       Allow from fe80::a00:20ff:fea7:ccea<br />
-       Allow from fe80::a00:20ff:fea7:ccea/10
-    </example>
-
-    <p>The third format of the arguments to the
-    <directive>Allow</directive> directive allows access to the server
-    to be controlled based on the existence of an <a
-    href="../env.html">environment variable</a>. When <code>Allow from
-    env=</code><em>env-variable</em> is specified, then the request is
-    allowed access if the environment variable <em>env-variable</em>
-    exists. The server provides the ability to set environment
-    variables in a flexible way based on characteristics of the client
-    request using the directives provided by
-    <module>mod_setenvif</module>.  Therefore, this directive can be
-    used to allow access based on such factors as the clients
-    <code>User-Agent</code> (browser type), <code>Referer</code>, or
-    other HTTP request header fields.</p>
-
-<example>
-<title>Example:</title>
-SetEnvIf User-Agent ^KnockKnock/2.0 let_me_in<br />
-&lt;Directory /docroot&gt;<br />
-&nbsp;&nbsp;    Order Deny,Allow<br />
-&nbsp;&nbsp;    Deny from all<br />
-&nbsp;&nbsp;    Allow from env=let_me_in<br />
-&lt;/Directory&gt;
-</example>
-
-    <p>In this case, browsers with a user-agent string beginning
-    with <code>KnockKnock/2.0</code> will be allowed access, and all
-    others will be denied.</p>
-</usage>
-
-</directivesynopsis>
-
-<directivesynopsis>
-
-<name>Deny</name>
-
-<description>Controls which hosts are denied access to the
-server</description>
-
-<syntax> Deny from
-    all|<em>host</em>|env=<em>env-variable</em>
-    [<em>host</em>|env=<em>env-variable</em>] ...</syntax>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>Limit</override>
-
-<usage>
-    <p>This directive allows access to the server to be restricted
-    based on hostname, IP address, or environment variables. The
-    arguments for the <directive>Deny</directive> directive are
-    identical to the arguments for the <directive
-    module="mod_access">Allow</directive> directive.</p>
-</usage>
-
-</directivesynopsis>
-
-<directivesynopsis>
-
-<name>Order</name>
-
-<description>Controls the default access state and the order in which
-<directive>Allow</directive> and <directive>Deny</directive> are
-evaluated.</description>
-
-<syntax> Order <em>ordering</em></syntax>
-<default>Order Deny,Allow</default>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>Limit</override>
-
-<usage>
-
-    <p>The <directive>Order</directive> directive controls the default
-    access state and the order in which <directive
-    module="mod_access">Allow</directive> and <directive
-    module="mod_access">Deny</directive> directives are evaluated.
-    <em>Ordering</em> is one of</p>
-
-    <dl>
-      <dt>Deny,Allow</dt>
-
-      <dd>The <directive module="mod_access">Deny</directive> directives
-      are evaluated before the <directive
-      module="mod_access">Allow</directive> directives. Access is
-      allowed by default.  Any client which does not match a
-      <directive module="mod_access">Deny</directive> directive or does
-      match an <directive module="mod_access">Allow</directive>
-      directive will be allowed access to the server.</dd>
-
-      <dt>Allow,Deny</dt>
-
-      <dd>The <directive module="mod_access">Allow</directive>
-      directives are evaluated before the <directive
-      module="mod_access">Deny</directive> directives. Access is denied
-      by default. Any client which does not match an <directive
-      module="mod_access">Allow</directive> directive or does match a
-      <directive module="mod_access">Deny</directive> directive will be
-      denied access to the server.</dd>
-
-      <dt>Mutual-failure</dt>
-
-      <dd>Only those hosts which appear on the <directive
-      module="mod_access">Allow</directive> list and do not appear on
-      the <directive module="mod_access">Deny</directive> list are
-      granted access. This ordering has the same effect as <code>Order
-      Allow,Deny</code> and is deprecated in favor of that
-      configuration.</dd>
-    </dl>
-
-    <p>Keywords may only be separated by a comma; no whitespace is
-    allowed between them. Note that in all cases every <directive
-    module="mod_access">Allow</directive> and <directive
-    module="mod_access">Deny</directive> statement is evaluated.</p>
-
-    <p>In the following example, all hosts in the apache.org domain
-    are allowed access; all other hosts are denied access.</p>
-
-<example>
-      Order Deny,Allow<br />
-      Deny from all<br />
-      Allow from apache.org<br />
-</example>
-
-    <p>In the next example, all hosts in the apache.org domain are
-    allowed access, except for the hosts which are in the
-    foo.apache.org subdomain, who are denied access. All hosts not
-    in the apache.org domain are denied access because the default
-    state is to deny access to the server.</p>
-
-<example>
-       Order Allow,Deny<br />
-       Allow from apache.org<br />
-       Deny from foo.apache.org<br />
-</example>
-
-    <p>On the other hand, if the <code>Order</code> in the last
-    example is changed to <code>Deny,Allow</code>, all hosts will
-    be allowed access. This happens because, regardless of the
-    actual ordering of the directives in the configuration file,
-    the <code>Allow from apache.org</code> will be evaluated last
-    and will override the <code>Deny from foo.apache.org</code>.
-    All hosts not in the <code>apache.org</code> domain will also
-    be allowed access because the default state will change to
-    <em>allow</em>.</p>
-
-    <p>The presence of an <code>Order</code> directive can affect
-    access to a part of the server even in the absence of accompanying
-    <directive module="mod_access">Allow</directive> and <directive
-    module="mod_access">Deny</directive> directives because of its effect
-    on the default access state.  For example,</p>
-
-<example>
-      &lt;Directory /www&gt;<br />
-      &nbsp;&nbsp;Order Allow,Deny<br />
-      &lt;/Directory&gt;
-</example>
-
-    <p>will deny all access to the <code>/www</code> directory
-    because the default access state will be set to
-    <em>deny</em>.</p>
-
-    <p>The <directive>Order</directive> directive controls the order of access
-    directive processing only within each phase of the server's
-    configuration processing. This implies, for example, that an
-    <directive module="mod_access">Allow</directive> or <directive
-    module="mod_access">Deny</directive> directive occurring in a
-    <directive module="core" type="section">Location</directive> section will
-    always be evaluated after an <directive
-    module="mod_access">Allow</directive> or <directive
-    module="mod_access">Deny</directive> directive occurring in a
-    <directive module="core" type="section">Directory</directive> section or
-    <code>.htaccess</code> file, regardless of the setting of the
-    <directive>Order</directive> directive. For details on the merging
-    of configuration sections, see the documentation on <a
-    href="../sections.html">How Directory, Location and Files sections
-    work</a>.</p>
-</usage>
-
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_actions.html b/docs/manual/mod/mod_actions.html
deleted file mode 100644
index a813f3a..0000000
--- a/docs/manual/mod/mod_actions.html
+++ /dev/null
@@ -1,70 +0,0 @@
-<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-     This file is generated from xml source: DO NOT EDIT
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
---><title>mod_actions - Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img alt="[APACHE DOCUMENTATION]" src="../images/sub.gif"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module mod_actions</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td><description>This module provides for executing CGI scripts based on
-media type or request method.</description></td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="module-dict.html#ModuleIdentifier" class="help">Module&nbsp;Identifier:</a></td><td>actions_module</td></tr></table></td></tr></table><h2>Summary</h2><summary>
-    <p>This module has two directives. The <a href="#action" class="directive"><code class="directive">Action</code></a> directive lets you run CGI
-    scripts whenever a file of a certain type is requested. The
-    <a href="#script" class="directive"><code class="directive">Script</code></a> directive lets
-    you run CGI scripts whenever a particular method is used in a
-    request. This makes it much easier to execute scripts that process
-    files.</p>
-</summary><h2>Directives</h2><ul><li><a href="#action">Action</a></li><li><a href="#script">Script</a></li></ul><hr/><h2><a name="Action">Action</a> <a name="action">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Activates a CGI script for a particular handler or
-content-type</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>Action <em>action-type cgi-script</em></syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>FileInfo</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_actions</td></tr></table></td></tr></table><usage>
-    <p>This directive adds an action, which will activate
-    <em>cgi-script</em> when <em>action-type</em> is triggered by
-    the request. The <em>action-type</em> can be either a <a href="../handler.html">handler</a> or a MIME content type. It
-    sends the URL and file path of the requested document using the
-    standard CGI PATH_INFO and PATH_TRANSLATED environment
-    variables.</p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><p align="center"><strong>Examples</strong></p><code>
-
-
-    # Requests for files of a particular type:<br>
-    Action image/gif /cgi-bin/images.cgi<br>
-<br>
-    # Files of a particular file extension<br>
-    AddHandler my-file-type .xyz<br>
-    Action my-file-type /cgi-bin/program.cgi<br>
-</code></td></tr></table></blockquote>
-
-    <p>In the first example, requests for files with a MIME content
-    type of <code>image/gif</code> will instead be handled by the
-    specified cgi script <code>/cgi-bin/images.cgi</code>.</p>
-
-    <p>In the second example, requests for files with a file extension of
-    <code>.xyz</code> are handled instead by the specified cgi script 
-    <code>/cgi-bin/program.cgi</code>.</p>
-</usage><p><strong>See also </strong></p><ul><li><a href="mod_mime.html#addhandler" class="directive"><code class="directive">AddHandler</code></a></li></ul><hr/><h2><a name="Script">Script</a> <a name="script">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Activates a CGI script for a particular request
-method.</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax> Script <em>method cgi-script</em></syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_actions</td></tr></table></td></tr></table><usage>
-    <p>This directive adds an action, which will activate
-    <em>cgi-script</em> when a file is requested using the method of
-    <em>method</em>. It sends the URL and file path of the requested
-    document using the standard CGI PATH_INFO and PATH_TRANSLATED
-    environment variables.</p>
-
-<blockquote><table><tr><td bgcolor="#e0e5f5">
-      Any arbitrary method name may be used. <strong>Method names are
-      case-sensitive</strong>, so <code>Script&nbsp;PUT</code> and
-      <code>Script&nbsp;put</code> have two entirely different
-      effects.
-</td></tr></table></blockquote>
-
-    <p>Note that the Script command defines default actions only.
-    If a CGI script is called, or some other resource that is
-    capable of handling the requested method internally, it will do
-    so. Also note that Script with a method of <code>GET</code>
-    will only be called if there are query arguments present
-    (<em>e.g.</em>, foo.html?hi). Otherwise, the request will
-    proceed normally.</p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><p align="center"><strong>Examples</strong></p><code>
-
-    # For &lt;ISINDEX&gt;-style searching<br>
-    Script GET /cgi-bin/search<br>
-    # A CGI PUT handler<br>
-    Script PUT /~bob/put.cgi<br>
-</code></td></tr></table></blockquote>
-</usage><hr/><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img alt="Index" src="../images/index.gif"/></a><a href="../"><img alt="Home" src="../images/home.gif"/></a></blockquote></body></html>
\ No newline at end of file
diff --git a/docs/manual/mod/mod_actions.xml b/docs/manual/mod/mod_actions.xml
deleted file mode 100644
index 5cc21cf..0000000
--- a/docs/manual/mod/mod_actions.xml
+++ /dev/null
@@ -1,115 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.xsl"?>
-<modulesynopsis>
-
-<name>mod_actions</name> 
-
-<description>This module provides for executing CGI scripts based on
-media type or request method.</description>
-
-<status>Base</status>
-<sourcefile>mod_actions.c</sourcefile>
-<identifier>actions_module</identifier>
-
-<summary>
-    <p>This module has two directives. The <directive
-    module="mod_actions">Action</directive> directive lets you run CGI
-    scripts whenever a file of a certain type is requested. The
-    <directive module="mod_actions">Script</directive> directive lets
-    you run CGI scripts whenever a particular method is used in a
-    request. This makes it much easier to execute scripts that process
-    files.</p>
-</summary>
-
-<directivesynopsis>
-
-<name>Action</name>
-
-<description>Activates a CGI script for a particular handler or
-content-type</description>
-
-<syntax>Action <em>action-type cgi-script</em></syntax>
-<contextlist>
-<context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>FileInfo</override>
-
-<usage>
-    <p>This directive adds an action, which will activate
-    <em>cgi-script</em> when <em>action-type</em> is triggered by
-    the request. The <em>action-type</em> can be either a <a
-    href="../handler.html">handler</a> or a MIME content type. It
-    sends the URL and file path of the requested document using the
-    standard CGI PATH_INFO and PATH_TRANSLATED environment
-    variables.</p>
-
-<example>
-<title>Examples</title>
-
-    # Requests for files of a particular type:<br />
-    Action image/gif /cgi-bin/images.cgi<br />
-<br />
-    # Files of a particular file extension<br />
-    AddHandler my-file-type .xyz<br />
-    Action my-file-type /cgi-bin/program.cgi<br />
-</example>
-
-    <p>In the first example, requests for files with a MIME content
-    type of <code>image/gif</code> will instead be handled by the
-    specified cgi script <code>/cgi-bin/images.cgi</code>.</p>
-
-    <p>In the second example, requests for files with a file extension of
-    <code>.xyz</code> are handled instead by the specified cgi script 
-    <code>/cgi-bin/program.cgi</code>.</p>
-</usage>
-
-<seealso><directive module="mod_mime">AddHandler</directive></seealso>
-
-</directivesynopsis>
-
-<directivesynopsis>
-
-<name>Script</name>
-
-<description>Activates a CGI script for a particular request
-method.</description>
-<syntax> Script <em>method cgi-script</em></syntax>
-<contextlist>
-<context>server config</context><context>virtual host</context>
-<context>directory</context></contextlist>
-<usage>
-    <p>This directive adds an action, which will activate
-    <em>cgi-script</em> when a file is requested using the method of
-    <em>method</em>. It sends the URL and file path of the requested
-    document using the standard CGI PATH_INFO and PATH_TRANSLATED
-    environment variables.</p>
-
-<note>
-      Any arbitrary method name may be used. <strong>Method names are
-      case-sensitive</strong>, so <code>Script&nbsp;PUT</code> and
-      <code>Script&nbsp;put</code> have two entirely different
-      effects.
-</note>
-
-    <p>Note that the Script command defines default actions only.
-    If a CGI script is called, or some other resource that is
-    capable of handling the requested method internally, it will do
-    so. Also note that Script with a method of <code>GET</code>
-    will only be called if there are query arguments present
-    (<em>e.g.</em>, foo.html?hi). Otherwise, the request will
-    proceed normally.</p>
-
-<example>
-<title>Examples</title>
-    # For &lt;ISINDEX&gt;-style searching<br />
-    Script GET /cgi-bin/search<br />
-    # A CGI PUT handler<br />
-    Script PUT /~bob/put.cgi<br />
-</example>
-</usage>
-
-</directivesynopsis>
-
-</modulesynopsis>
\ No newline at end of file
diff --git a/docs/manual/mod/mod_alias.html b/docs/manual/mod/mod_alias.html
deleted file mode 100644
index f397259..0000000
--- a/docs/manual/mod/mod_alias.html
+++ /dev/null
@@ -1,178 +0,0 @@
-<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-     This file is generated from xml source: DO NOT EDIT
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
---><title>mod_alias - Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img alt="[APACHE DOCUMENTATION]" src="../images/sub.gif"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module mod_alias</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td><description>Provides for mapping different parts of the host
-    filesystem in the document tree and for URL redirection</description></td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="module-dict.html#ModuleIdentifier" class="help">Module&nbsp;Identifier:</a></td><td>alias_module</td></tr></table></td></tr></table><h2>Summary</h2><summary>
-    <p>The directives contained in this module allow for manipulation
-    and control of URLs as requests arrive at the server. The
-    <a href="#alias" class="directive"><code class="directive">Alias</code></a> and <a href="#scriptalias" class="directive"><code class="directive">ScriptAlias</code></a> directives are used to
-    map between URLs and filesystem paths.  This allows for content
-    which is not directly under the <a href="core.html#documentroot" class="directive"><code class="directive">DocumentRoot</code></a> served as part of the web
-    document tree. The <a href="#scriptalias" class="directive"><code class="directive">ScriptAlias</code></a> directive has the
-    additional effect of marking the target directory as containing
-    only CGI scripts.</p>
-
-    <p>The <a href="#redirect" class="directive"><code class="directive">Redirect</code></a>
-    directives are used to instruct clients to make a new request with
-    a different URL. They are often used when a resource has moved to
-    a new location.</p>
-
-    <p>A more powerful and flexible set of directives for
-    manipulating URLs is contained in the <code><a href="mod_rewrite.html">mod_rewrite</a></code>
-    module.</p>
-</summary><h2>Directives</h2><ul><li><a href="#alias">Alias</a></li><li><a href="#aliasmatch">AliasMatch</a></li><li><a href="#redirect">Redirect</a></li><li><a href="#redirectmatch">RedirectMatch</a></li><li><a href="#redirectpermanent">RedirectPermanent</a></li><li><a href="#redirecttemp">RedirectTemp</a></li><li><a href="#scriptalias">ScriptAlias</a></li><li><a href="#scriptaliasmatch">ScriptAliasMatch</a></li></ul><hr/><h2><a name="Alias">Alias</a> <a name="alias">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Maps URLs to filesystem locations</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax> Alias <em>URL-path
-    file-path</em>|<em>directory-path</em></syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_alias</td></tr></table></td></tr></table><usage>
-
-    <p>The <code class="directive">Alias</code> directive allows documents to
-    be stored in the local filesystem other than under the 
-    <a href="core.html#documentroot" class="directive"><code class="directive">DocumentRoot</code></a>. URLs with a
-    (%-decoded) path beginning with <em>url-path</em> will be mapped
-    to local files beginning with <em>directory-filename</em>.</p>
-
-    <p>Example:</p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>Alias /image /ftp/pub/image</code></td></tr></table></blockquote>
-
-    <p>A request for http://myserver/image/foo.gif would cause the
-    server to return the file /ftp/pub/image/foo.gif.</p>
-
-    <p>Note that if you include a trailing / on the
-    <em>url-path</em> then the server will require a trailing / in
-    order to expand the alias. That is, if you use <code>Alias
-    /icons/ /usr/local/apache/icons/</code> then the url
-    <code>/icons</code> will not be aliased.</p>
-
-    <p>Note that you may need to specify additional <a href="core.html#<directory>" class="directive"><code class="directive">&lt;Directory&gt;</code></a> sections which cover
-    the <em>destination</em> of aliases.  Aliasing occurs before
-    <a href="core.html#<directory>" class="directive"><code class="directive">&lt;Directory&gt;</code></a> sections
-    are checked, so only the destination of aliases are affected.
-    (Note however <a href="core.html#<location>" class="directive"><code class="directive">&lt;Location&gt;</code></a>
-    sections are run through once before aliases are performed, so
-    they will apply.)</p>
-
-</usage><hr/><h2><a name="AliasMatch">AliasMatch</a> <a name="aliasmatch">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Maps URLs to filesystem locations using regular 
-expressions</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>AliasMatch <em>regex
-    file-path</em>|<em>directory-path</em></syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_alias</td></tr></table></td></tr></table><usage>
-    <p>This directive is equivalent to <a href="#alias" class="directive"><code class="directive">Alias</code></a>, but makes use of standard
-    regular expressions, instead of simple prefix matching. The
-    supplied regular expression is matched against the URL-path, and
-    if it matches, the server will substitute any parenthesized
-    matches into the given string and use it as a filename. For
-    example, to activate the <code>/icons</code> directory, one might
-    use:</p>
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-    AliasMatch ^/icons(.*) /usr/local/apache/icons$1
-</code></td></tr></table></blockquote>
-</usage><hr/><h2><a name="Redirect">Redirect</a> <a name="redirect">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sends an external redirect asking the client to fetch
-a different URL</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>Redirect [<em>status</em>] <em>URL-path URL</em></syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>FileInfo</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_alias</td></tr></table></td></tr></table><usage>
-    <p>The Redirect directive maps an old URL into a new one. The
-    new URL is returned to the client which attempts to fetch it
-    again with the new address. <em>URL-path</em> a (%-decoded)
-    path; any requests for documents beginning with this path will
-    be returned a redirect error to a new (%-encoded) URL beginning
-    with <em>URL</em>.</p>
-
-    <p>Example:</p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>Redirect /service http://foo2.bar.com/service</code></td></tr></table></blockquote>
-
-    <p>If the client requests http://myserver/service/foo.txt, it
-    will be told to access http://foo2.bar.com/service/foo.txt
-    instead.</p>
-
-<blockquote><table><tr><td bgcolor="#e0e5f5"><p align="center"><strong>Note</strong></p> <p>Redirect directives take precedence over
-Alias and ScriptAlias directives, irrespective of their ordering in
-the configuration file. Also, <em>URL-path</em> must be an absolute
-path, not a relative path, even when used with .htaccess files or
-inside of <a href="core.html#<directory>" class="directive"><code class="directive">&lt;Directory&gt;</code></a>
-sections.</p></td></tr></table></blockquote>
-
-    <p>If no <em>status</em> argument is given, the redirect will
-    be "temporary" (HTTP status 302). This indicates to the client
-    that the resource has moved temporarily. The <em>status</em>
-    argument can be used to return other HTTP status codes:</p>
-
-    <dl>
-      <dt>permanent</dt>
-
-      <dd>Returns a permanent redirect status (301) indicating that
-      the resource has moved permanently.</dd>
-
-      <dt>temp</dt>
-
-      <dd>Returns a temporary redirect status (302). This is the
-      default.</dd>
-
-      <dt>seeother</dt>
-
-      <dd>Returns a "See Other" status (303) indicating that the
-      resource has been replaced.</dd>
-
-      <dt>gone</dt>
-
-      <dd>Returns a "Gone" status (410) indicating that the
-      resource has been permanently removed. When this status is
-      used the <em>url</em> argument should be omitted.</dd>
-    </dl>
-
-    <p>Other status codes can be returned by giving the numeric
-    status code as the value of <em>status</em>. If the status is
-    between 300 and 399, the <em>url</em> argument must be present,
-    otherwise it must be omitted. Note that the status must be
-    known to the Apache code (see the function
-    <code>send_error_response</code> in http_protocol.c).</p>
-</usage><hr/><h2><a name="RedirectMatch">RedirectMatch</a> <a name="redirectmatch">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sends an external redirect asking the client to fetch
-a different URL based on a regular expression match of the 
-current URL</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>RedirectMatch [<em>status</em>] <em>regex URL</em></syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>FileInfo</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_alias</td></tr></table></td></tr></table><usage>
-    <p>This directive is equivalent to <a href="#redirect" class="directive"><code class="directive">Redirect</code></a>, but makes use of standard
-    regular expressions, instead of simple prefix matching. The
-    supplied regular expression is matched against the URL-path, and
-    if it matches, the server will substitute any parenthesized
-    matches into the given string and use it as a filename. For
-    example, to redirect all GIF files to like-named JPEG files on
-    another server, one might use:</p>
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-    RedirectMatch (.*)\.gif$ http://www.anotherserver.com$1.jpg
-</code></td></tr></table></blockquote>
-</usage><hr/><h2><a name="RedirectPermanent">RedirectPermanent</a> <a name="redirectpermanent">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sends an external permanent redirect asking the client to fetch
-a different URL</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>RedirectPermanent <em>URL-path URL</em></syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>FileInfo</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_alias</td></tr></table></td></tr></table><usage>
-    <p>This directive makes the client know that the Redirect is
-    permanent (status 301). Exactly equivalent to <code>Redirect
-    permanent</code>.</p>
-</usage><hr/><h2><a name="RedirectTemp">RedirectTemp</a> <a name="redirecttemp">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sends an external temporary redirect asking the client to fetch
-a different URL</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>RedirectTemp <em>URL-path URL</em></syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>FileInfo</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_alias</td></tr></table></td></tr></table><usage>
-    <p>This directive makes the client know that the Redirect is
-    only temporary (status 302). Exactly equivalent to
-    <code>Redirect temp</code>.</p>
-</usage><hr/><h2><a name="ScriptAlias">ScriptAlias</a> <a name="scriptalias">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Maps a URL to a filesystem location and designates the
-target as a CGI script</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>ScriptAlias 
-<em>URL-path file-path</em>|<em>directory-path</em></syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_alias</td></tr></table></td></tr></table><usage>
-    <p>The <code class="directive">ScriptAlias</code> directive has the same
-    behavior as the <a href="#alias" class="directive"><code class="directive">Alias</code></a>
-    directive, except that in addition it marks the target directory
-    as containing CGI scripts that will be processed by <code><a href="mod_cgi.html">mod_cgi</a></code>'s cgi-script handler. URLs with a
-    (%-decoded) path beginning with <em>URL-path</em> will be mapped
-    to scripts beginning with the second argument which is a full
-    pathname in the local filesystem.</p>
-
-    <p>Example:</p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>ScriptAlias /cgi-bin/ /web/cgi-bin/</code></td></tr></table></blockquote>
-
-    <p>A request for <code>http://myserver/cgi-bin/foo</code> would cause the
-    server to run the script <code>/web/cgi-bin/foo</code>.</p>
-</usage><hr/><h2><a name="ScriptAliasMatch">ScriptAliasMatch</a> <a name="scriptaliasmatch">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Maps a URL to a filesystem location using a regular expression
-and designates the target as a CGI script</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>ScriptAliasMatch
-<em>regex file-path</em>|<em>directory-path</em></syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_alias</td></tr></table></td></tr></table><usage>
-    <p>This directive is equivalent to <a href="#scriptalias" class="directive"><code class="directive">ScriptAlias</code></a>, but makes use of standard
-    regular expressions, instead of simple prefix matching. The
-    supplied regular expression is matched against the URL-path,
-    and if it matches, the server will substitute any parenthesized
-    matches into the given string and use it as a filename. For
-    example, to activate the standard <code>/cgi-bin</code>, one
-    might use:</p>
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-    ScriptAliasMatch ^/cgi-bin(.*) /usr/local/apache/cgi-bin$1
-</code></td></tr></table></blockquote>
-</usage><hr/><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img alt="Index" src="../images/index.gif"/></a><a href="../"><img alt="Home" src="../images/home.gif"/></a></blockquote></body></html>
\ No newline at end of file
diff --git a/docs/manual/mod/mod_alias.xml b/docs/manual/mod/mod_alias.xml
deleted file mode 100644
index bd80377..0000000
--- a/docs/manual/mod/mod_alias.xml
+++ /dev/null
@@ -1,280 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.xsl"?>
-<modulesynopsis>
-
-<name>mod_alias</name>
-<description>Provides for mapping different parts of the host
-    filesystem in the document tree and for URL redirection</description>
-<status>Base</status>
-<sourcefile>mod_alias.c</sourcefile>
-<identifier>alias_module</identifier>
-
-<summary>
-    <p>The directives contained in this module allow for manipulation
-    and control of URLs as requests arrive at the server. The
-    <directive module="mod_alias">Alias</directive> and <directive
-    module="mod_alias">ScriptAlias</directive> directives are used to
-    map between URLs and filesystem paths.  This allows for content
-    which is not directly under the <directive
-    module="core">DocumentRoot</directive> served as part of the web
-    document tree. The <directive
-    module="mod_alias">ScriptAlias</directive> directive has the
-    additional effect of marking the target directory as containing
-    only CGI scripts.</p>
-
-    <p>The <directive module="mod_alias">Redirect</directive>
-    directives are used to instruct clients to make a new request with
-    a different URL. They are often used when a resource has moved to
-    a new location.</p>
-
-    <p>A more powerful and flexible set of directives for
-    manipulating URLs is contained in the <module>mod_rewrite</module>
-    module.</p>
-</summary>
-
-<directivesynopsis>
-<name>Alias</name>
-<description>Maps URLs to filesystem locations</description>
-<syntax> Alias <em>URL-path
-    file-path</em>|<em>directory-path</em></syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
-
-    <p>The <directive>Alias</directive> directive allows documents to
-    be stored in the local filesystem other than under the 
-    <directive module="core">DocumentRoot</directive>. URLs with a
-    (%-decoded) path beginning with <em>url-path</em> will be mapped
-    to local files beginning with <em>directory-filename</em>.</p>
-
-    <p>Example:</p>
-
-<example>Alias /image /ftp/pub/image</example>
-
-    <p>A request for http://myserver/image/foo.gif would cause the
-    server to return the file /ftp/pub/image/foo.gif.</p>
-
-    <p>Note that if you include a trailing / on the
-    <em>url-path</em> then the server will require a trailing / in
-    order to expand the alias. That is, if you use <code>Alias
-    /icons/ /usr/local/apache/icons/</code> then the url
-    <code>/icons</code> will not be aliased.</p>
-
-    <p>Note that you may need to specify additional <directive
-    module="core">&lt;Directory&gt;</directive> sections which cover
-    the <em>destination</em> of aliases.  Aliasing occurs before
-    <directive module="core">&lt;Directory&gt;</directive> sections
-    are checked, so only the destination of aliases are affected.
-    (Note however <directive module="core">&lt;Location&gt;</directive>
-    sections are run through once before aliases are performed, so
-    they will apply.)</p>
-
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AliasMatch</name>
-<description>Maps URLs to filesystem locations using regular 
-expressions</description>
-<syntax>AliasMatch <em>regex
-    file-path</em>|<em>directory-path</em></syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
-    <p>This directive is equivalent to <directive
-    module="mod_alias">Alias</directive>, but makes use of standard
-    regular expressions, instead of simple prefix matching. The
-    supplied regular expression is matched against the URL-path, and
-    if it matches, the server will substitute any parenthesized
-    matches into the given string and use it as a filename. For
-    example, to activate the <code>/icons</code> directory, one might
-    use:</p>
-<example>
-    AliasMatch ^/icons(.*) /usr/local/apache/icons$1
-</example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>Redirect</name>
-<description>Sends an external redirect asking the client to fetch
-a different URL</description>
-<syntax>Redirect [<em>status</em>] <em>URL-path URL</em></syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-
-<usage>
-    <p>The Redirect directive maps an old URL into a new one. The
-    new URL is returned to the client which attempts to fetch it
-    again with the new address. <em>URL-path</em> a (%-decoded)
-    path; any requests for documents beginning with this path will
-    be returned a redirect error to a new (%-encoded) URL beginning
-    with <em>URL</em>.</p>
-
-    <p>Example:</p>
-
-<example>Redirect /service http://foo2.bar.com/service</example>
-
-    <p>If the client requests http://myserver/service/foo.txt, it
-    will be told to access http://foo2.bar.com/service/foo.txt
-    instead.</p>
-
-<note><title>Note</title> <p>Redirect directives take precedence over
-Alias and ScriptAlias directives, irrespective of their ordering in
-the configuration file. Also, <em>URL-path</em> must be an absolute
-path, not a relative path, even when used with .htaccess files or
-inside of <directive module="core">&lt;Directory&gt;</directive>
-sections.</p></note>
-
-    <p>If no <em>status</em> argument is given, the redirect will
-    be "temporary" (HTTP status 302). This indicates to the client
-    that the resource has moved temporarily. The <em>status</em>
-    argument can be used to return other HTTP status codes:</p>
-
-    <dl>
-      <dt>permanent</dt>
-
-      <dd>Returns a permanent redirect status (301) indicating that
-      the resource has moved permanently.</dd>
-
-      <dt>temp</dt>
-
-      <dd>Returns a temporary redirect status (302). This is the
-      default.</dd>
-
-      <dt>seeother</dt>
-
-      <dd>Returns a "See Other" status (303) indicating that the
-      resource has been replaced.</dd>
-
-      <dt>gone</dt>
-
-      <dd>Returns a "Gone" status (410) indicating that the
-      resource has been permanently removed. When this status is
-      used the <em>url</em> argument should be omitted.</dd>
-    </dl>
-
-    <p>Other status codes can be returned by giving the numeric
-    status code as the value of <em>status</em>. If the status is
-    between 300 and 399, the <em>url</em> argument must be present,
-    otherwise it must be omitted. Note that the status must be
-    known to the Apache code (see the function
-    <code>send_error_response</code> in http_protocol.c).</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>RedirectMatch</name>
-<description>Sends an external redirect asking the client to fetch
-a different URL based on a regular expression match of the 
-current URL</description>
-<syntax>RedirectMatch [<em>status</em>] <em>regex URL</em></syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-
-<usage>
-    <p>This directive is equivalent to <directive
-    module="mod_alias">Redirect</directive>, but makes use of standard
-    regular expressions, instead of simple prefix matching. The
-    supplied regular expression is matched against the URL-path, and
-    if it matches, the server will substitute any parenthesized
-    matches into the given string and use it as a filename. For
-    example, to redirect all GIF files to like-named JPEG files on
-    another server, one might use:</p>
-<example>
-    RedirectMatch (.*)\.gif$ http://www.anotherserver.com$1.jpg
-</example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>RedirectTemp</name>
-<description>Sends an external temporary redirect asking the client to fetch
-a different URL</description>
-<syntax>RedirectTemp <em>URL-path URL</em></syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-
-<usage>
-    <p>This directive makes the client know that the Redirect is
-    only temporary (status 302). Exactly equivalent to
-    <code>Redirect temp</code>.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>RedirectPermanent</name>
-<description>Sends an external permanent redirect asking the client to fetch
-a different URL</description>
-<syntax>RedirectPermanent <em>URL-path URL</em></syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-
-<usage>
-    <p>This directive makes the client know that the Redirect is
-    permanent (status 301). Exactly equivalent to <code>Redirect
-    permanent</code>.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ScriptAlias</name>
-<description>Maps a URL to a filesystem location and designates the
-target as a CGI script</description>
-<syntax>ScriptAlias 
-<em>URL-path file-path</em>|<em>directory-path</em></syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
-    <p>The <directive>ScriptAlias</directive> directive has the same
-    behavior as the <directive module="mod_alias">Alias</directive>
-    directive, except that in addition it marks the target directory
-    as containing CGI scripts that will be processed by <module
-    >mod_cgi</module>'s cgi-script handler. URLs with a
-    (%-decoded) path beginning with <em>URL-path</em> will be mapped
-    to scripts beginning with the second argument which is a full
-    pathname in the local filesystem.</p>
-
-    <p>Example:</p>
-
-<example>ScriptAlias /cgi-bin/ /web/cgi-bin/</example>
-
-    <p>A request for <code>http://myserver/cgi-bin/foo</code> would cause the
-    server to run the script <code>/web/cgi-bin/foo</code>.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ScriptAliasMatch</name>
-<description>Maps a URL to a filesystem location using a regular expression
-and designates the target as a CGI script</description>
-<syntax>ScriptAliasMatch
-<em>regex file-path</em>|<em>directory-path</em></syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
-    <p>This directive is equivalent to <directive module="mod_alias"
-    >ScriptAlias</directive>, but makes use of standard
-    regular expressions, instead of simple prefix matching. The
-    supplied regular expression is matched against the URL-path,
-    and if it matches, the server will substitute any parenthesized
-    matches into the given string and use it as a filename. For
-    example, to activate the standard <code>/cgi-bin</code>, one
-    might use:</p>
-<example>
-    ScriptAliasMatch ^/cgi-bin(.*) /usr/local/apache/cgi-bin$1
-</example>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
-
diff --git a/docs/manual/mod/mod_asis.html b/docs/manual/mod/mod_asis.html
deleted file mode 100644
index 95b4390..0000000
--- a/docs/manual/mod/mod_asis.html
+++ /dev/null
@@ -1,59 +0,0 @@
-<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-     This file is generated from xml source: DO NOT EDIT
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
---><title>mod_asis - Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img alt="[APACHE DOCUMENTATION]" src="../images/sub.gif"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module mod_asis</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td><description>Sends files that contain their own
-HTTP headers</description></td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="module-dict.html#ModuleIdentifier" class="help">Module&nbsp;Identifier:</a></td><td>asis_module</td></tr></table></td></tr></table><h2>Summary</h2><summary>
-    <p>This module provides the handler <code>send-as-is</code>
-    which causes Apache to send the document without adding most of
-    the usual HTTP headers.</p>
-
-    <p>This can be used to send any kind of data from the server,
-    including redirects and other special HTTP responses, without
-    requiring a cgi-script or an nph script.</p>
-
-    <p>For historical reasons, this module will also process any
-    file with the mime type <code>httpd/send-as-is</code>.</p>
-</summary><h2>Directives</h2><p>This module provides no directives.</p><h2>Usage</h2>
-
-    <p>In the server configuration file, associate files with the
-    <code>send-as-is</code> handler <em>e.g.</em></p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>AddHandler send-as-is asis</code></td></tr></table></blockquote>
-
-    <p>The contents of any file with a <code>.asis</code> extension
-    will then be sent by Apache to the client with almost no
-    changes. Clients will need HTTP headers to be attached, so do
-    not forget them. A Status: header is also required; the data
-    should be the 3-digit HTTP response code, followed by a textual
-    message.</p>
-
-    <p>Here's an example of a file whose contents are sent <em>as
-    is</em> so as to tell the client that a file has
-    redirected.</p>
-
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>Status: 301 Now where did I leave that URL<br>
-       Location: http://xyz.abc.com/foo/bar.html<br>
-       Content-type: text/html<br>
-      <br>
-       &lt;HTML&gt;<br>
-       &lt;HEAD&gt;<br>
-       &lt;TITLE&gt;Lame excuses'R'us&lt;/TITLE&gt;<br>
-       &lt;/HEAD&gt;<br>
-       &lt;BODY&gt;<br>
-       &lt;H1&gt;Fred's exceptionally wonderful page has moved
-      to<br>
-       &lt;A
-      HREF="http://xyz.abc.com/foo/bar.html"&gt;Joe's&lt;/A&gt;
-      site.<br>
-       &lt;/H1&gt;<br>
-       &lt;/BODY&gt;<br>
-       &lt;/HTML&gt;
-</code></td></tr></table></blockquote>
-
-    <p>Notes: the server always adds a Date: and Server: header to
-    the data returned to the client, so these should not be
-    included in the file. The server does <em>not</em> add a
-    Last-Modified header; it probably should. </p>
-<hr/><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img alt="Index" src="../images/index.gif"/></a><a href="../"><img alt="Home" src="../images/home.gif"/></a></blockquote></body></html>
\ No newline at end of file
diff --git a/docs/manual/mod/mod_asis.xml b/docs/manual/mod/mod_asis.xml
deleted file mode 100644
index 7fe01a0..0000000
--- a/docs/manual/mod/mod_asis.xml
+++ /dev/null
@@ -1,70 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.xsl"?>
-<modulesynopsis>
-
-<name>mod_asis</name>
-<description>Sends files that contain their own
-HTTP headers</description>
-<status>Base</status>
-<sourcefile>mod_asis.c</sourcefile>
-<identifier>asis_module</identifier>
-
-<summary>
-    <p>This module provides the handler <code>send-as-is</code>
-    which causes Apache to send the document without adding most of
-    the usual HTTP headers.</p>
-
-    <p>This can be used to send any kind of data from the server,
-    including redirects and other special HTTP responses, without
-    requiring a cgi-script or an nph script.</p>
-
-    <p>For historical reasons, this module will also process any
-    file with the mime type <code>httpd/send-as-is</code>.</p>
-</summary>
-
-<section><title>Usage</title>
-
-    <p>In the server configuration file, associate files with the
-    <code>send-as-is</code> handler <em>e.g.</em></p>
-
-<example>AddHandler send-as-is asis</example>
-
-    <p>The contents of any file with a <code>.asis</code> extension
-    will then be sent by Apache to the client with almost no
-    changes. Clients will need HTTP headers to be attached, so do
-    not forget them. A Status: header is also required; the data
-    should be the 3-digit HTTP response code, followed by a textual
-    message.</p>
-
-    <p>Here's an example of a file whose contents are sent <em>as
-    is</em> so as to tell the client that a file has
-    redirected.</p>
-
-
-<example>Status: 301 Now where did I leave that URL<br />
-       Location: http://xyz.abc.com/foo/bar.html<br />
-       Content-type: text/html<br />
-      <br />
-       &lt;HTML&gt;<br />
-       &lt;HEAD&gt;<br />
-       &lt;TITLE&gt;Lame excuses'R'us&lt;/TITLE&gt;<br />
-       &lt;/HEAD&gt;<br />
-       &lt;BODY&gt;<br />
-       &lt;H1&gt;Fred's exceptionally wonderful page has moved
-      to<br />
-       &lt;A
-      HREF="http://xyz.abc.com/foo/bar.html"&gt;Joe's&lt;/A&gt;
-      site.<br />
-       &lt;/H1&gt;<br />
-       &lt;/BODY&gt;<br />
-       &lt;/HTML&gt;
-</example>
-
-    <p>Notes: the server always adds a Date: and Server: header to
-    the data returned to the client, so these should not be
-    included in the file. The server does <em>not</em> add a
-    Last-Modified header; it probably should. </p>
-</section>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_auth.html b/docs/manual/mod/mod_auth.html
deleted file mode 100644
index b694e01..0000000
--- a/docs/manual/mod/mod_auth.html
+++ /dev/null
@@ -1,116 +0,0 @@
-<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-     This file is generated from xml source: DO NOT EDIT
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
---><title>mod_auth - Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img alt="[APACHE DOCUMENTATION]" src="../images/sub.gif"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module mod_auth</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td><description>User authentication using text files</description></td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="module-dict.html#ModuleIdentifier" class="help">Module&nbsp;Identifier:</a></td><td>auth_module</td></tr></table></td></tr></table><h2>Summary</h2><summary>
-
-    <p>This module allows the use of HTTP Basic Authentication to
-    restrict access by looking up users in plain text password and
-    group files. Similar functionality and greater scalability is
-    provided by <code><a href="mod_auth_dbm.html">mod_auth_dbm</a></code>.  HTTP Digest
-    Authentication is provided by
-    <code><a href="mod_auth_digest.html">mod_auth_digest</a></code>.</p>
-
-</summary><p><strong>See also </strong></p><ul><li><a href="core.html#require" class="directive"><code class="directive">Require</code></a></li><li><a href="core.html#satisfy" class="directive"><code class="directive">Satisfy</code></a></li><li><a href="core.html#authname" class="directive"><code class="directive">AuthName</code></a></li><li><a href="core.html#authtype" class="directive"><code class="directive">AuthType</code></a></li></ul><h2>Directives</h2><ul><li><a href="#authauthoritative">AuthAuthoritative</a></li><li><a href="#authgroupfile">AuthGroupFile</a></li><li><a href="#authuserfile">AuthUserFile</a></li></ul><hr/><h2><a name="AuthAuthoritative">AuthAuthoritative</a> <a name="authauthoritative">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sets whether authorization and authentication are
-passed to lower level modules</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>AuthAuthoritative on|off</syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>AuthAuthoritative on</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>AuthConfig</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_auth</td></tr></table></td></tr></table><usage>
-
-<blockquote><table><tr><td bgcolor="#e0e5f5">This information has not been updated for Apache 2.0, which
-uses a different system for module ordering.</td></tr></table></blockquote>
-
-    <p>Setting the <code class="directive">AuthAuthoritative</code> directive
-    explicitly to <strong>'off'</strong> allows for both
-    authentication and authorization to be passed on to lower level
-    modules (as defined in the <code>Configuration</code> and
-    <code>modules.c</code> files) if there is <strong>no
-    userID</strong> or <strong>rule</strong> matching the supplied
-    userID. If there is a userID and/or rule specified; the usual
-    password and access checks will be applied and a failure will give
-    an Authorization Required reply.</p>
-
-    <p>So if a userID appears in the database of more than one module;
-    or if a valid <a href="core.html#require" class="directive"><code class="directive">Require</code></a>
-    directive applies to more than one module; then the first module
-    will verify the credentials; and no access is passed on;
-    regardless of the AuthAuthoritative setting.</p>
-
-    <p>A common use for this is in conjunction with one of the
-    database modules; such as <code><a href="auth_dbm.html">auth_dbm</a></code>,
-    <code>mod_auth_msql</code>, and <code><a href="mod_auth_anon.html">mod_auth_anon</a></code>.
-    These modules supply the bulk of the user credential checking; but
-    a few (administrator) related accesses fall through to a lower
-    level with a well protected <a href="#authuserfile" class="directive"><code class="directive">AuthUserFile</code></a>.</p>
-
-    <p>By default; control is not passed on; and an unknown userID or
-    rule will result in an Authorization Required reply. Not setting
-    it thus keeps the system secure; and forces an NCSA compliant
-    behaviour.</p>
-
-    <blockquote><table><tr><td bgcolor="#e0e5f5"><p align="center"><strong>Security</strong></p> Do consider the implications of
-    allowing a user to allow fall-through in his .htaccess file; and
-    verify that this is really what you want; Generally it is easier
-    to just secure a single .htpasswd file, than it is to secure a
-    database such as mSQL. Make sure that the <a href="#authuserfile" class="directive"><code class="directive">AuthUserFile</code></a> is stored outside the
-    document tree of the web-server; do <em>not</em> put it in the
-    directory that it protects. Otherwise, clients will be able to
-    download the <a href="#authuserfile" class="directive"><code class="directive">AuthUserFile</code></a>.
-    </td></tr></table></blockquote>
-</usage><hr/><h2><a name="AuthGroupFile">AuthGroupFile</a> <a name="authgroupfile">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sets the name of a text file containing the list
-of user groups for authentication</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>AuthGroupFile <em>file-path</em></syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>AuthConfig</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_auth</td></tr></table></td></tr></table><usage>
-    <p>The <code class="directive">AuthGroupFile</code> directive sets the
-    name of a textual file containing the list of user groups for user
-    authentication.  <em>File-path</em> is the path to the group
-    file. If it is not absolute (<em>i.e.</em>, if it doesn't begin
-    with a slash), it is treated as relative to the <a href="core.html#serverroot" class="directive"><code class="directive">ServerRoot</code></a>.</p>
-
-    <p>Each line of the group file contains a groupname followed by a
-    colon, followed by the member usernames separated by spaces.
-    Example:</p> 
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>mygroup: bob joe anne</code></td></tr></table></blockquote> 
-
-    <p>Note that searching large text files is <em>very</em>
-    inefficient; <a href="mod_auth_dbm.html#authdbmgroupfile" class="directive"><code class="directive">AuthDBMGroupFile</code></a> should be used
-    instead.</p>
-
-<blockquote><table><tr><td bgcolor="#e0e5f5"><p align="center"><strong>Security</strong></p>
-    <p>Make sure that the AuthGroupFile is stored outside
-    the document tree of the web-server; do <em>not</em> put it in
-    the directory that it protects. Otherwise, clients will be able
-    to download the AuthGroupFile.</p>
-</td></tr></table></blockquote>
-</usage><hr/><h2><a name="AuthUserFile">AuthUserFile</a> <a name="authuserfile">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sets the name of a text file containing the list of users and
-passwords for authentication</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>AuthUserFile <em>file-path</em></syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>AuthConfig</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_auth</td></tr></table></td></tr></table><usage>
-    <p>The <code class="directive">AuthUserFile</code> directive sets the name
-    of a textual file containing the list of users and passwords for
-    user authentication. <em>File-path</em> is the path to the user
-    file. If it is not absolute (<em>i.e.</em>, if it doesn't begin
-    with a slash), it is treated as relative to the <a href="core.html#serverroot" class="directive"><code class="directive">ServerRoot</code></a>.</p>
-
-    <p>Each line of the user file file contains a username followed by
-    a colon, followed by the <code>crypt()</code> encrypted
-    password. The behavior of multiple occurrences of the same user is
-    undefined.</p>
-
-    <p>The utility <a href="../programs/htpasswd.html">htpasswd</a>
-    which is installed as part of the binary distribution, or which
-    can be found in <code>src/support</code>, is used to maintain
-    this password file. See the <code>man</code> page for more
-    details. In short:</p>
-
-    <p>Create a password file 'Filename' with 'username' as the
-    initial ID. It will prompt for the password:</p>
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>htpasswd -c Filename username</code></td></tr></table></blockquote>
-
-<p>Adds or modifies in password file 'Filename' the 'username':</p>
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>htpasswd Filename username2</code></td></tr></table></blockquote>
-
-    <p>Note that searching large text files is <em>very</em>
-    inefficient; <a href="mod_auth_dbm.html#authdbmuserfile" class="directive"><code class="directive">AuthDBMUserFile</code></a> should be used
-    instead.</p>
-
-<blockquote><table><tr><td bgcolor="#e0e5f5"><p align="center"><strong>Security</strong></p><p>Make sure that the AuthUserFile is
-stored outside the document tree of the web-server; do <em>not</em>
-put it in the directory that it protects. Otherwise, clients will be
-able to download the AuthUserFile.</p></td></tr></table></blockquote>
-
-</usage><hr/><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img alt="Index" src="../images/index.gif"/></a><a href="../"><img alt="Home" src="../images/home.gif"/></a></blockquote></body></html>
\ No newline at end of file
diff --git a/docs/manual/mod/mod_auth.xml b/docs/manual/mod/mod_auth.xml
deleted file mode 100644
index 4ccd989..0000000
--- a/docs/manual/mod/mod_auth.xml
+++ /dev/null
@@ -1,169 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.xsl"?>
-<modulesynopsis>
-
-<name>mod_auth</name>
-<description>User authentication using text files</description>
-<status>Base</status>
-<sourcefile>mod_auth.c</sourcefile>
-<identifier>auth_module</identifier>
-
-<summary>
-
-    <p>This module allows the use of HTTP Basic Authentication to
-    restrict access by looking up users in plain text password and
-    group files. Similar functionality and greater scalability is
-    provided by <module>mod_auth_dbm</module>.  HTTP Digest
-    Authentication is provided by
-    <module>mod_auth_digest</module>.</p>
-
-</summary>
-<seealso><directive module="core">Require</directive></seealso>
-<seealso><directive module="core">Satisfy</directive></seealso>
-<seealso><directive module="core">AuthName</directive></seealso>
-<seealso><directive module="core">AuthType</directive></seealso>
-
-<directivesynopsis>
-<name>AuthGroupFile</name>
-<description>Sets the name of a text file containing the list
-of user groups for authentication</description>
-<syntax>AuthGroupFile <em>file-path</em></syntax>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
-    <p>The <directive>AuthGroupFile</directive> directive sets the
-    name of a textual file containing the list of user groups for user
-    authentication.  <em>File-path</em> is the path to the group
-    file. If it is not absolute (<em>i.e.</em>, if it doesn't begin
-    with a slash), it is treated as relative to the <directive
-    module="core">ServerRoot</directive>.</p>
-
-    <p>Each line of the group file contains a groupname followed by a
-    colon, followed by the member usernames separated by spaces.
-    Example:</p> 
-
-<example>mygroup: bob joe anne</example> 
-
-    <p>Note that searching large text files is <em>very</em>
-    inefficient; <directive
-    module="mod_auth_dbm">AuthDBMGroupFile</directive> should be used
-    instead.</p>
-
-<note><title>Security</title>
-    <p>Make sure that the AuthGroupFile is stored outside
-    the document tree of the web-server; do <em>not</em> put it in
-    the directory that it protects. Otherwise, clients will be able
-    to download the AuthGroupFile.</p>
-</note>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AuthUserFile</name>
-<description>Sets the name of a text file containing the list of users and
-passwords for authentication</description>
-<syntax>AuthUserFile <em>file-path</em></syntax>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
-    <p>The <directive>AuthUserFile</directive> directive sets the name
-    of a textual file containing the list of users and passwords for
-    user authentication. <em>File-path</em> is the path to the user
-    file. If it is not absolute (<em>i.e.</em>, if it doesn't begin
-    with a slash), it is treated as relative to the <directive
-    module="core">ServerRoot</directive>.</p>
-
-    <p>Each line of the user file file contains a username followed by
-    a colon, followed by the <code>crypt()</code> encrypted
-    password. The behavior of multiple occurrences of the same user is
-    undefined.</p>
-
-    <p>The utility <a href="../programs/htpasswd.html">htpasswd</a>
-    which is installed as part of the binary distribution, or which
-    can be found in <code>src/support</code>, is used to maintain
-    this password file. See the <code>man</code> page for more
-    details. In short:</p>
-
-    <p>Create a password file 'Filename' with 'username' as the
-    initial ID. It will prompt for the password:</p>
-<example>htpasswd -c Filename username</example>
-
-<p>Adds or modifies in password file 'Filename' the 'username':</p>
-<example>htpasswd Filename username2</example>
-
-    <p>Note that searching large text files is <em>very</em>
-    inefficient; <directive
-    module="mod_auth_dbm">AuthDBMUserFile</directive> should be used
-    instead.</p>
-
-<note><title>Security</title><p>Make sure that the AuthUserFile is
-stored outside the document tree of the web-server; do <em>not</em>
-put it in the directory that it protects. Otherwise, clients will be
-able to download the AuthUserFile.</p></note>
-
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AuthAuthoritative</name>
-<description>Sets whether authorization and authentication are
-passed to lower level modules</description>
-<syntax>AuthAuthoritative on|off</syntax>
-<default>AuthAuthoritative on</default>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
-
-<note>This information has not been updated for Apache 2.0, which
-uses a different system for module ordering.</note>
-
-    <p>Setting the <directive>AuthAuthoritative</directive> directive
-    explicitly to <strong>'off'</strong> allows for both
-    authentication and authorization to be passed on to lower level
-    modules (as defined in the <code>Configuration</code> and
-    <code>modules.c</code> files) if there is <strong>no
-    userID</strong> or <strong>rule</strong> matching the supplied
-    userID. If there is a userID and/or rule specified; the usual
-    password and access checks will be applied and a failure will give
-    an Authorization Required reply.</p>
-
-    <p>So if a userID appears in the database of more than one module;
-    or if a valid <directive module="core">Require</directive>
-    directive applies to more than one module; then the first module
-    will verify the credentials; and no access is passed on;
-    regardless of the AuthAuthoritative setting.</p>
-
-    <p>A common use for this is in conjunction with one of the
-    database modules; such as <module>auth_dbm</module>,
-    <code>mod_auth_msql</code>, and <module>mod_auth_anon</module>.
-    These modules supply the bulk of the user credential checking; but
-    a few (administrator) related accesses fall through to a lower
-    level with a well protected <directive
-    module="mod_auth">AuthUserFile</directive>.</p>
-
-    <p>By default; control is not passed on; and an unknown userID or
-    rule will result in an Authorization Required reply. Not setting
-    it thus keeps the system secure; and forces an NCSA compliant
-    behaviour.</p>
-
-    <note><title>Security</title> Do consider the implications of
-    allowing a user to allow fall-through in his .htaccess file; and
-    verify that this is really what you want; Generally it is easier
-    to just secure a single .htpasswd file, than it is to secure a
-    database such as mSQL. Make sure that the <directive
-    module="mod_auth">AuthUserFile</directive> is stored outside the
-    document tree of the web-server; do <em>not</em> put it in the
-    directory that it protects. Otherwise, clients will be able to
-    download the <directive module="mod_auth">AuthUserFile</directive>.
-    </note>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
\ No newline at end of file
diff --git a/docs/manual/mod/mod_auth_anon.html b/docs/manual/mod/mod_auth_anon.html
deleted file mode 100644
index 4371363..0000000
--- a/docs/manual/mod/mod_auth_anon.html
+++ /dev/null
@@ -1,119 +0,0 @@
-<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-     This file is generated from xml source: DO NOT EDIT
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
---><title>mod_auth_anon - Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img alt="[APACHE DOCUMENTATION]" src="../images/sub.gif"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module mod_auth_anon</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td><description>Allows "anonymous" user access to authenticated
-    areas</description></td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="module-dict.html#ModuleIdentifier" class="help">Module&nbsp;Identifier:</a></td><td>auth_anon_module</td></tr></table></td></tr></table><h2>Summary</h2><summary>
-    <p>This module does access control in a manner similar to
-    anonymous-ftp sites; <em>i.e.</em> have a 'magic' user id
-    'anonymous' and the email address as a password. These email
-    addresses can be logged.</p>
-
-    <p>Combined with other (database) access control methods, this
-    allows for effective user tracking and customization according
-    to a user profile while still keeping the site open for
-    'unregistered' users. One advantage of using Auth-based user
-    tracking is that, unlike magic-cookies and funny URL
-    pre/postfixes, it is completely browser independent and it
-    allows users to share URLs.</p>
-</summary><h2>Directives</h2><ul><li><a href="#anonymous">Anonymous</a></li><li><a href="#anonymous_authoritative">Anonymous_Authoritative</a></li><li><a href="#anonymous_logemail">Anonymous_LogEmail</a></li><li><a href="#anonymous_mustgiveemail">Anonymous_MustGiveEmail</a></li><li><a href="#anonymous_nouserid">Anonymous_NoUserID</a></li><li><a href="#anonymous_verifyemail">Anonymous_VerifyEmail</a></li></ul><h2>Example</h2>
-
-    <p>The example below (when combined with the Auth directives of a
-    htpasswd-file based (or GDM, mSQL <em>etc.</em>) base access
-    control system allows users in as 'guests' with the following
-    properties:</p>
-
-    <ul>
-      <li>It insists that the user enters a userId.
-      (<code>Anonymous_NoUserId</code>)</li>
-
-      <li>It insists that the user enters a password.
-      (<code>Anonymous_MustGiveEmail</code>)</li>
-
-      <li>The password entered must be a valid email address, ie.
-      contain at least one '@' and a '.'.
-      (<code>Anonymous_VerifyEmail</code>)</li>
-
-      <li>The userID must be one of <code>anonymous guest www test
-      welcome</code> and comparison is <strong>not</strong> case
-      sensitive.</li>
-
-      <li>And the Email addresses entered in the passwd field are
-      logged to the error log file
-      (<code>Anonymous_LogEmail</code>)</li>
-    </ul>
-
-    <p>Excerpt of httpd.conf:</p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-       Anonymous_NoUserId off<br>
-       Anonymous_MustGiveEmail on<br>
-       Anonymous_VerifyEmail on<br>
-       Anonymous_LogEmail on<br>
-       Anonymous anonymous guest www test welcome<br>
-<br>
-      AuthName "Use 'anonymous' &amp; Email address for
-      guest entry"<br>
-      AuthType basic<br>
-<br>
-       # An
-      AuthUserFile/AuthDBUserFile/AuthDBMUserFile<br>
-       # directive must be specified, or use<br>
-       # Anonymous_Authoritative for public access.<br>
-       # In the .htaccess for the public directory, add:<br>
-       &lt;Files *&gt;<br>
-       Order Deny,Allow<br>
-       Allow from all<br>
-<br>
-       Require valid-user<br>
-       &lt;/Files&gt;<br>
-</code></td></tr></table></blockquote>
-<hr/><h2><a name="Anonymous">Anonymous</a> <a name="anonymous">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Specifies userIDs that areallowed access without
-password verification</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>Anonymous <em>user</em> [<em>user</em>] ...</syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>AuthConfig</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_auth_anon</td></tr></table></td></tr></table><usage>
-    <p>A list of one or more 'magic' userIDs which are allowed
-    access without password verification. The userIDs are space
-    separated. It is possible to use the ' and " quotes to allow a
-    space in a userID as well as the \ escape character.</p>
-
-    <p>Please note that the comparison is
-    <strong>case-IN-sensitive</strong>.<br>
-     I strongly suggest that the magic username
-    '<code>anonymous</code>' is always one of the allowed
-    userIDs.</p>
-
-    <p>Example:</p>
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>Anonymous anonymous "Not Registered" 'I don\'t know'</code></td></tr></table></blockquote>
-
-    <p>This would allow the user to enter without password
-    verification by using the userId's 'anonymous',
-    'AnonyMous','Not Registered' and 'I Don't Know'.</p>
-</usage><hr/><h2><a name="Anonymous_Authoritative">Anonymous_Authoritative</a> <a name="anonymous_authoritative">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Configures if authorization will fall-through
-to other methods</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>Anonymous_Authoritative on|off</syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>Anonymous_Authoritative off</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>AuthConfig</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_auth_anon</td></tr></table></td></tr></table><usage>
-    <p>When set 'on', there is no fall-through to other authorization
-    methods. So if a userID does not match the values specified in the
-    <a href="#anonymous" class="directive"><code class="directive">Anonymous</code></a> directive,
-    access is denied.</p>
-
-    <p>Be sure you know what you are doing when you decide to
-    switch it on. And remember that it is the linking order of the
-    modules (in the Configuration / Make file) which details the
-    order in which the Authorization modules are queried.</p>
-</usage><hr/><h2><a name="Anonymous_LogEmail">Anonymous_LogEmail</a> <a name="anonymous_logemail">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sets whether the password entered will be logged in the
-error log</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>Anonymous_LogEmail on|off</syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>Anonymous_LogEmail on</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>AuthConfig</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_auth_anon</td></tr></table></td></tr></table><usage>
-    <p>When set <code>on</code>, the default, the 'password' entered
-    (which hopefully contains a sensible email address) is logged in
-    the error log.</p>
-</usage><hr/><h2><a name="Anonymous_MustGiveEmail">Anonymous_MustGiveEmail</a> <a name="anonymous_mustgiveemail">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Specifies whether blank passwords are allowed</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>Anonymous_MustGiveEmail on|off</syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>Anonymous_MustGiveEmail on</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>AuthConfig</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_auth_anon</td></tr></table></td></tr></table><usage>
-    <p>Specifies whether the user must specify an email address as
-    the password. This prohibits blank passwords.</p>
-</usage><hr/><h2><a name="Anonymous_NoUserID">Anonymous_NoUserID</a> <a name="anonymous_nouserid">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sets whether the userID field may be empty</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>Anonymous_NoUserID on|off</syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>Anonymous_NoUserID off</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>AuthConfig</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_auth_anon</td></tr></table></td></tr></table><usage>
-    <p>When set <code>on</code>, users can leave the userID (and
-    perhaps the password field) empty. This can be very convenient for
-    MS-Explorer users who can just hit return or click directly on the
-    OK button; which seems a natural reaction.</p>
-</usage><hr/><h2><a name="Anonymous_VerifyEmail">Anonymous_VerifyEmail</a> <a name="anonymous_verifyemail">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sets whether to check the password field for a correctly
-formatted email address</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>Anonymous_VerifyEmail on|off</syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>Anonymous_VerifyEmail off</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>AuthConfig</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_auth_anon</td></tr></table></td></tr></table><usage>
-    <p>When set <code>on</code> the 'password' entered is checked for
-    at least one '@' and a '.' to encourage users to enter valid email
-    addresses (see the above <a href="#auth_logemail" class="directive"><code class="directive">Auth_LogEmail</code></a>).</p>
-</usage><hr/><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img alt="Index" src="../images/index.gif"/></a><a href="../"><img alt="Home" src="../images/home.gif"/></a></blockquote></body></html>
\ No newline at end of file
diff --git a/docs/manual/mod/mod_auth_anon.xml b/docs/manual/mod/mod_auth_anon.xml
deleted file mode 100644
index 75dc933..0000000
--- a/docs/manual/mod/mod_auth_anon.xml
+++ /dev/null
@@ -1,202 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.xsl"?>
-<modulesynopsis>
-
-<name>mod_auth_anon</name>
-<description>Allows "anonymous" user access to authenticated
-    areas</description>
-<status>Extension</status>
-<sourcefile>mod_auth_anon.c</sourcefile>
-<identifier>auth_anon_module</identifier>
-
-<summary>
-    <p>This module does access control in a manner similar to
-    anonymous-ftp sites; <em>i.e.</em> have a 'magic' user id
-    'anonymous' and the email address as a password. These email
-    addresses can be logged.</p>
-
-    <p>Combined with other (database) access control methods, this
-    allows for effective user tracking and customization according
-    to a user profile while still keeping the site open for
-    'unregistered' users. One advantage of using Auth-based user
-    tracking is that, unlike magic-cookies and funny URL
-    pre/postfixes, it is completely browser independent and it
-    allows users to share URLs.</p>
-</summary>
-
-<section><title>Example</title>
-
-    <p>The example below (when combined with the Auth directives of a
-    htpasswd-file based (or GDM, mSQL <em>etc.</em>) base access
-    control system allows users in as 'guests' with the following
-    properties:</p>
-
-    <ul>
-      <li>It insists that the user enters a userId.
-      (<code>Anonymous_NoUserId</code>)</li>
-
-      <li>It insists that the user enters a password.
-      (<code>Anonymous_MustGiveEmail</code>)</li>
-
-      <li>The password entered must be a valid email address, ie.
-      contain at least one '@' and a '.'.
-      (<code>Anonymous_VerifyEmail</code>)</li>
-
-      <li>The userID must be one of <code>anonymous guest www test
-      welcome</code> and comparison is <strong>not</strong> case
-      sensitive.</li>
-
-      <li>And the Email addresses entered in the passwd field are
-      logged to the error log file
-      (<code>Anonymous_LogEmail</code>)</li>
-    </ul>
-
-    <p>Excerpt of httpd.conf:</p>
-
-<example>
-       Anonymous_NoUserId off<br />
-       Anonymous_MustGiveEmail on<br />
-       Anonymous_VerifyEmail on<br />
-       Anonymous_LogEmail on<br />
-       Anonymous anonymous guest www test welcome<br />
-<br />
-      AuthName "Use 'anonymous' &amp; Email address for
-      guest entry"<br />
-      AuthType basic<br />
-<br />
-       # An
-      AuthUserFile/AuthDBUserFile/AuthDBMUserFile<br />
-       # directive must be specified, or use<br />
-       # Anonymous_Authoritative for public access.<br />
-       # In the .htaccess for the public directory, add:<br />
-       &lt;Files *&gt;<br />
-       Order Deny,Allow<br />
-       Allow from all<br />
-<br />
-       Require valid-user<br />
-       &lt;/Files&gt;<br />
-</example>
-</section>
-
-<directivesynopsis>
-<name>Anonymous</name>
-<description>Specifies userIDs that areallowed access without
-password verification</description>
-<syntax>Anonymous <em>user</em> [<em>user</em>] ...</syntax>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
-    <p>A list of one or more 'magic' userIDs which are allowed
-    access without password verification. The userIDs are space
-    separated. It is possible to use the ' and " quotes to allow a
-    space in a userID as well as the \ escape character.</p>
-
-    <p>Please note that the comparison is
-    <strong>case-IN-sensitive</strong>.<br />
-     I strongly suggest that the magic username
-    '<code>anonymous</code>' is always one of the allowed
-    userIDs.</p>
-
-    <p>Example:</p>
-<example>Anonymous anonymous "Not Registered" 'I don\'t know'</example>
-
-    <p>This would allow the user to enter without password
-    verification by using the userId's 'anonymous',
-    'AnonyMous','Not Registered' and 'I Don't Know'.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>Anonymous_Authoritative</name>
-<description>Configures if authorization will fall-through
-to other methods</description>
-<syntax>Anonymous_Authoritative on|off</syntax>
-<default>Anonymous_Authoritative off</default>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
-    <p>When set 'on', there is no fall-through to other authorization
-    methods. So if a userID does not match the values specified in the
-    <directive module="mod_auth_anon">Anonymous</directive> directive,
-    access is denied.</p>
-
-    <p>Be sure you know what you are doing when you decide to
-    switch it on. And remember that it is the linking order of the
-    modules (in the Configuration / Make file) which details the
-    order in which the Authorization modules are queried.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>Anonymous_LogEmail</name>
-<description>Sets whether the password entered will be logged in the
-error log</description>
-<syntax>Anonymous_LogEmail on|off</syntax>
-<default>Anonymous_LogEmail on</default>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
-    <p>When set <code>on</code>, the default, the 'password' entered
-    (which hopefully contains a sensible email address) is logged in
-    the error log.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>Anonymous_MustGiveEmail</name>
-<description>Specifies whether blank passwords are allowed</description>
-<syntax>Anonymous_MustGiveEmail on|off</syntax>
-<default>Anonymous_MustGiveEmail on</default>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
-    <p>Specifies whether the user must specify an email address as
-    the password. This prohibits blank passwords.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>Anonymous_NoUserID</name>
-<description>Sets whether the userID field may be empty</description>
-<syntax>Anonymous_NoUserID on|off</syntax>
-<default>Anonymous_NoUserID off</default>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
-    <p>When set <code>on</code>, users can leave the userID (and
-    perhaps the password field) empty. This can be very convenient for
-    MS-Explorer users who can just hit return or click directly on the
-    OK button; which seems a natural reaction.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>Anonymous_VerifyEmail</name>
-<description>Sets whether to check the password field for a correctly
-formatted email address</description>
-<syntax>Anonymous_VerifyEmail on|off</syntax>
-<default>Anonymous_VerifyEmail off</default>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
-    <p>When set <code>on</code> the 'password' entered is checked for
-    at least one '@' and a '.' to encourage users to enter valid email
-    addresses (see the above <directive
-    module="mod_auth_anon">Auth_LogEmail</directive>).</p>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
\ No newline at end of file
diff --git a/docs/manual/mod/mod_auth_dbm.html b/docs/manual/mod/mod_auth_dbm.html
deleted file mode 100644
index 477f4aa..0000000
--- a/docs/manual/mod/mod_auth_dbm.html
+++ /dev/null
@@ -1,134 +0,0 @@
-<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-     This file is generated from xml source: DO NOT EDIT
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
---><title>mod_auth_dbm - Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img alt="[APACHE DOCUMENTATION]" src="../images/sub.gif"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module mod_auth_dbm</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td><description>Provides for user authentication using DBM
-    files</description></td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="module-dict.html#ModuleIdentifier" class="help">Module&nbsp;Identifier:</a></td><td>auth_dbm_module</td></tr></table></td></tr></table><h2>Summary</h2><summary>
-    <p>This module provides for HTTP Basic Authentication, where
-    the usernames and passwords are stored in DBM type database
-    files. It is an alternative to the plain text password files
-    provided by <code><a href="mod_auth.html">mod_auth</a></code>.</p>
-</summary><p><strong>See also </strong></p><ul><li><a href="core.html#authname" class="directive"><code class="directive">AuthName</code></a></li><li><a href="core.html#authtype" class="directive"><code class="directive">AuthType</code></a></li><li><a href="core.html#require" class="directive"><code class="directive">Require</code></a></li><li><a href="core.html#satisfy" class="directive"><code class="directive">Satisfy</code></a></li></ul><h2>Directives</h2><ul><li><a href="#authdbmauthoritative">AuthDBMAuthoritative</a></li><li><a href="#authdbmgroupfile">AuthDBMGroupFile</a></li><li><a href="#authdbmtype">AuthDBMType</a></li><li><a href="#authdbmuserfile">AuthDBMUserFile</a></li></ul><hr/><h2><a name="AuthDBMAuthoritative">AuthDBMAuthoritative</a> <a name="authdbmauthoritative">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sets whether authentication and authorization will be
-passwed on to lower level modules</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>AuthDBMAuthoritative on|off</syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>AuthDBMAuthoritative on</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>AuthConfig</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_auth_dbm</td></tr></table></td></tr></table><usage>
-
-<blockquote><table><tr><td bgcolor="#e0e5f5">This information has not been updated to take into account the
-new module ordering techniques in Apache 2.0</td></tr></table></blockquote>
-
-    <p>Setting the <code class="directive">AuthDBMAuthoritative</code>
-    directive explicitly to <strong>'off'</strong> allows for both
-    authentication and authorization to be passed on to lower level
-    modules (as defined in the <code>Configuration</code> and
-    <code>modules.c</code> file if there is <strong>no userID</strong>
-    or <strong>rule</strong> matching the supplied userID. If there is
-    a userID and/or rule specified; the usual password and access
-    checks will be applied and a failure will give an Authorization
-    Required reply.</p>
-
-    <p>So if a userID appears in the database of more than one module;
-    or if a valid <a href="core.html#require" class="directive"><code class="directive">Require</code></a>
-    directive applies to more than one module; then the first module
-    will verify the credentials; and no access is passed on;
-    regardless of the <code class="directive">AuthAuthoritative</code> setting.</p>
-
-    <p>A common use for this is in conjunction with one of the
-    basic auth modules; such as <code><a href="mod_auth.html">mod_auth</a></code>. Whereas this
-    DBM module supplies the bulk of the user credential checking; a
-    few (administrator) related accesses fall through to a lower
-    level with a well protected .htpasswd file.</p>
-
-    <p>By default, control is not passed on and an unknown userID
-    or rule will result in an Authorization Required reply. Not
-    setting it thus keeps the system secure and forces an NCSA
-    compliant behaviour.</p>
-
-    <p>Security: Do consider the implications of allowing a user to
-    allow fall-through in his .htaccess file; and verify that this
-    is really what you want; Generally it is easier to just secure
-    a single .htpasswd file, than it is to secure a database which
-    might have more access interfaces.</p>
-</usage><hr/><h2><a name="AuthDBMGroupFile">AuthDBMGroupFile</a> <a name="authdbmgroupfile">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sets the name of the database file containing the list
-of user groups for authentication</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>AuthDBMGroupFile <em>file-path</em></syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>AuthConfig</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_auth_dbm</td></tr></table></td></tr></table><usage>
-    <p>The <code class="directive">AuthDBMGroupFile</code> directive sets the
-    name of a DBM file containing the list of user groups for user
-    authentication.  <em>File-path</em> is the absolute path to the
-    group file.</p>
-
-    <p>The group file is keyed on the username. The value for a
-    user is a comma-separated list of the groups to which the users
-    belongs. There must be no whitespace within the value, and it
-    must never contain any colons.</p>
-
-    <p>Security: make sure that the
-    <code class="directive">AuthDBMGroupFile</code> is stored outside the
-    document tree of the web-server; do <em>not</em> put it in the
-    directory that it protects. Otherwise, clients will be able to
-    download the <code class="directive">AuthDBMGroupFile</code> unless
-    otherwise protected.</p>
-
-    <p>Combining Group and Password DBM files: In some cases it is
-    easier to manage a single database which contains both the
-    password and group details for each user. This simplifies any
-    support programs that need to be written: they now only have to
-    deal with writing to and locking a single DBM file. This can be
-    accomplished by first setting the group and password files to
-    point to the same DBM:</p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-AuthDBMGroupFile /www/userbase<br>
-AuthDBMUserFile /www/userbase
-</code></td></tr></table></blockquote>
-
-    <p>The key for the single DBM is the username. The value consists
-    of</p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>Unix Crypt-ed Password : List of Groups [ : (ignored)
-      ]</code></td></tr></table></blockquote>
-
-    <p>The password section contains the Unix <code>crypt()</code>
-    password as before. This is followed by a colon and the comma
-    separated list of groups. Other data may optionally be left in the
-    DBM file after another colon; it is ignored by the authentication
-    module. This is what www.telescope.org uses for its combined
-    password and group database.</p>
-</usage><hr/><h2><a name="AuthDBMType">AuthDBMType</a> <a name="authdbmtype">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sets the type of database file that is used to
-store passwords</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>AuthDBMType default|SDBM|GDBM|DB</syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>AuthDBMType default</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>AuthConfig</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_auth_dbm</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>Available in version 2.0.30 and later.</td></tr></table></td></tr></table><usage>
-
-<p>Sets the type of database file that is used to store the passwords.
-The default database type is determined at compile time.  The
-availability of other types of database files also depends on
-compile-time settings.</p>
-
-<p>It is crucial that whatever program you use to create your password
-files is configured to use the same type of database.</p>
-</usage><hr/><h2><a name="AuthDBMUserFile">AuthDBMUserFile</a> <a name="authdbmuserfile">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sets thename of a database file containing the list of users and
-passwords for authentication</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>AuthDBMUserFile <em>file-path</em></syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>AuthConfig</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_auth_dbm</td></tr></table></td></tr></table><usage>
-    <p>The <code class="directive">AuthDBMUserFile</code> directive sets the
-    name of a DBM file containing the list of users and passwords for
-    user authentication. <em>File-path</em> is the absolute path to
-    the user file.</p>
-
-    <p>The user file is keyed on the username. The value for a user is
-    the <code>crypt()</code> encrypted password, optionally followed
-    by a colon and arbitrary data. The colon and the data following it
-    will be ignored by the server.</p>
-
-    <p>Security: make sure that the
-    <code class="directive">AuthDBMUserFile</code> is stored outside the
-    document tree of the web-server; do <em>not</em> put it in the
-    directory that it protects. Otherwise, clients will be able to
-    download the <code class="directive">AuthDBMUserFile</code>.</p>
-
-    <p>Important compatibility note: The implementation of
-    "dbmopen" in the apache modules reads the string length of the
-    hashed values from the DBM data structures, rather than relying
-    upon the string being NULL-appended. Some applications, such as
-    the Netscape web server, rely upon the string being
-    NULL-appended, so if you are having trouble using DBM files
-    interchangeably between applications this may be a part of the
-    problem.</p>
-
-    <p>A perl script called
-    <a href="../programs/dbmmanage.html">dbmmanage</a> is included with
-    Apache. This program can be used to create and update DBM
-    format password files for use with this module.</p>
-</usage><hr/><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img alt="Index" src="../images/index.gif"/></a><a href="../"><img alt="Home" src="../images/home.gif"/></a></blockquote></body></html>
\ No newline at end of file
diff --git a/docs/manual/mod/mod_auth_dbm.xml b/docs/manual/mod/mod_auth_dbm.xml
deleted file mode 100644
index 04dad01..0000000
--- a/docs/manual/mod/mod_auth_dbm.xml
+++ /dev/null
@@ -1,195 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.xsl"?>
-<modulesynopsis>
-
-<name>mod_auth_dbm</name>
-<description>Provides for user authentication using DBM
-    files</description>
-<status>Extension</status>
-<sourcefile>mod_auth_dbm.c</sourcefile>
-<identifier>auth_dbm_module</identifier>
-
-<summary>
-    <p>This module provides for HTTP Basic Authentication, where
-    the usernames and passwords are stored in DBM type database
-    files. It is an alternative to the plain text password files
-    provided by <module>mod_auth</module>.</p>
-</summary>
-
-<seealso><directive module="core">AuthName</directive></seealso>
-<seealso><directive module="core">AuthType</directive></seealso>
-<seealso><directive module="core">Require</directive></seealso>
-<seealso><directive module="core">Satisfy</directive></seealso>
-
-<directivesynopsis>
-<name>AuthDBMGroupFile</name>
-<description>Sets the name of the database file containing the list
-of user groups for authentication</description>
-<syntax>AuthDBMGroupFile <em>file-path</em></syntax>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
-    <p>The <directive>AuthDBMGroupFile</directive> directive sets the
-    name of a DBM file containing the list of user groups for user
-    authentication.  <em>File-path</em> is the absolute path to the
-    group file.</p>
-
-    <p>The group file is keyed on the username. The value for a
-    user is a comma-separated list of the groups to which the users
-    belongs. There must be no whitespace within the value, and it
-    must never contain any colons.</p>
-
-    <p>Security: make sure that the
-    <directive>AuthDBMGroupFile</directive> is stored outside the
-    document tree of the web-server; do <em>not</em> put it in the
-    directory that it protects. Otherwise, clients will be able to
-    download the <directive>AuthDBMGroupFile</directive> unless
-    otherwise protected.</p>
-
-    <p>Combining Group and Password DBM files: In some cases it is
-    easier to manage a single database which contains both the
-    password and group details for each user. This simplifies any
-    support programs that need to be written: they now only have to
-    deal with writing to and locking a single DBM file. This can be
-    accomplished by first setting the group and password files to
-    point to the same DBM:</p>
-
-<example>
-AuthDBMGroupFile /www/userbase<br />
-AuthDBMUserFile /www/userbase
-</example>
-
-    <p>The key for the single DBM is the username. The value consists
-    of</p>
-
-<example>Unix Crypt-ed Password : List of Groups [ : (ignored)
-      ]</example>
-
-    <p>The password section contains the Unix <code>crypt()</code>
-    password as before. This is followed by a colon and the comma
-    separated list of groups. Other data may optionally be left in the
-    DBM file after another colon; it is ignored by the authentication
-    module. This is what www.telescope.org uses for its combined
-    password and group database.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AuthDBMUserFile</name>
-<description>Sets thename of a database file containing the list of users and
-passwords for authentication</description>
-<syntax>AuthDBMUserFile <em>file-path</em></syntax>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
-    <p>The <directive>AuthDBMUserFile</directive> directive sets the
-    name of a DBM file containing the list of users and passwords for
-    user authentication. <em>File-path</em> is the absolute path to
-    the user file.</p>
-
-    <p>The user file is keyed on the username. The value for a user is
-    the <code>crypt()</code> encrypted password, optionally followed
-    by a colon and arbitrary data. The colon and the data following it
-    will be ignored by the server.</p>
-
-    <p>Security: make sure that the
-    <directive>AuthDBMUserFile</directive> is stored outside the
-    document tree of the web-server; do <em>not</em> put it in the
-    directory that it protects. Otherwise, clients will be able to
-    download the <directive>AuthDBMUserFile</directive>.</p>
-
-    <p>Important compatibility note: The implementation of
-    "dbmopen" in the apache modules reads the string length of the
-    hashed values from the DBM data structures, rather than relying
-    upon the string being NULL-appended. Some applications, such as
-    the Netscape web server, rely upon the string being
-    NULL-appended, so if you are having trouble using DBM files
-    interchangeably between applications this may be a part of the
-    problem.</p>
-
-    <p>A perl script called
-    <a href="../programs/dbmmanage.html">dbmmanage</a> is included with
-    Apache. This program can be used to create and update DBM
-    format password files for use with this module.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AuthDBMType</name>
-<description>Sets the type of database file that is used to
-store passwords</description>
-<syntax>AuthDBMType default|SDBM|GDBM|DB</syntax>
-<default>AuthDBMType default</default>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-<compatibility>Available in version 2.0.30 and later.</compatibility>
-
-<usage>
-
-<p>Sets the type of database file that is used to store the passwords.
-The default database type is determined at compile time.  The
-availability of other types of database files also depends on
-compile-time settings.</p>
-
-<p>It is crucial that whatever program you use to create your password
-files is configured to use the same type of database.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AuthDBMAuthoritative</name>
-<description>Sets whether authentication and authorization will be
-passwed on to lower level modules</description>
-<syntax>AuthDBMAuthoritative on|off</syntax>
-<default>AuthDBMAuthoritative on</default>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
-
-<note>This information has not been updated to take into account the
-new module ordering techniques in Apache 2.0</note>
-
-    <p>Setting the <directive>AuthDBMAuthoritative</directive>
-    directive explicitly to <strong>'off'</strong> allows for both
-    authentication and authorization to be passed on to lower level
-    modules (as defined in the <code>Configuration</code> and
-    <code>modules.c</code> file if there is <strong>no userID</strong>
-    or <strong>rule</strong> matching the supplied userID. If there is
-    a userID and/or rule specified; the usual password and access
-    checks will be applied and a failure will give an Authorization
-    Required reply.</p>
-
-    <p>So if a userID appears in the database of more than one module;
-    or if a valid <directive module="core">Require</directive>
-    directive applies to more than one module; then the first module
-    will verify the credentials; and no access is passed on;
-    regardless of the <directive>AuthAuthoritative</directive> setting.</p>
-
-    <p>A common use for this is in conjunction with one of the
-    basic auth modules; such as <module>mod_auth</module>. Whereas this
-    DBM module supplies the bulk of the user credential checking; a
-    few (administrator) related accesses fall through to a lower
-    level with a well protected .htpasswd file.</p>
-
-    <p>By default, control is not passed on and an unknown userID
-    or rule will result in an Authorization Required reply. Not
-    setting it thus keeps the system secure and forces an NCSA
-    compliant behaviour.</p>
-
-    <p>Security: Do consider the implications of allowing a user to
-    allow fall-through in his .htaccess file; and verify that this
-    is really what you want; Generally it is easier to just secure
-    a single .htpasswd file, than it is to secure a database which
-    might have more access interfaces.</p>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
\ No newline at end of file
diff --git a/docs/manual/mod/mod_auth_digest.html b/docs/manual/mod/mod_auth_digest.html
deleted file mode 100644
index b43325a..0000000
--- a/docs/manual/mod/mod_auth_digest.html
+++ /dev/null
@@ -1,134 +0,0 @@
-<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-     This file is generated from xml source: DO NOT EDIT
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
---><title>mod_auth_digest - Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img alt="[APACHE DOCUMENTATION]" src="../images/sub.gif"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module mod_auth_digest</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td><description>User authentication using MD5
-    Digest Authentication.</description></td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>Experimental</td></tr><tr><td><a href="module-dict.html#ModuleIdentifier" class="help">Module&nbsp;Identifier:</a></td><td>auth_digest_module</td></tr></table></td></tr></table><h2>Summary</h2><summary>
-    <p>This module implements HTTP Digest Authentication.  However, it
-    has not been extensively tested and is therefore marked
-    experimental.</p>
-</summary><p><strong>See also </strong></p><ul><li><a href="core.html#authname" class="directive"><code class="directive">AuthName</code></a></li><li><a href="core.html#authtype" class="directive"><code class="directive">AuthType</code></a></li><li><a href="core.html#require" class="directive"><code class="directive">Require</code></a></li><li><a href="core.html#satisfy" class="directive"><code class="directive">Satisfy</code></a></li></ul><h2>Directives</h2><ul><li><a href="#authdigestalgorithm">AuthDigestAlgorithm</a></li><li><a href="#authdigestdomain">AuthDigestDomain</a></li><li><a href="#authdigestfile">AuthDigestFile</a></li><li><a href="#authdigestgroupfile">AuthDigestGroupFile</a></li><li><a href="#authdigestnccheck">AuthDigestNcCheck</a></li><li><a href="#authdigestnonceformat">AuthDigestNonceFormat</a></li><li><a href="#authdigestnoncelifetime">AuthDigestNonceLifetime</a></li><li><a href="#authdigestqop">AuthDigestQop</a></li></ul><h2>Using Digest Authentication</h2>
-
-    <p>Using MD5 Digest authentication is very simple. Simply set
-    up authentication normally, using "AuthType Digest" and
-    "AuthDigestFile" instead of the normal "AuthType Basic" and
-    "AuthUserFile"; also, replace any "AuthGroupFile" with
-    "AuthDigestGroupFile". Then add a "AuthDigestDomain" directive
-    containing at least the root URI(s) for this protection space.
-    Example:</p>
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-  &lt;Location /private/&gt;<br>
-  AuthType Digest<br>
-  AuthName "private area"<br>
-  AuthDigestDomain /private/ http://mirror.my.dom/private2/<br>
-  AuthDigestFile /web/auth/.digest_pw<br>
-  Require valid-user<br>
-  &lt;/Location&gt;
-</code></td></tr></table></blockquote>
-
-<blockquote><table><tr><td bgcolor="#e0e5f5"><p align="center"><strong>Note</strong></p>
-    <p>MD5 authentication provides a more
-    secure password system than Basic authentication, but only
-    works with supporting browsers. As of this writing (October 2001),
-    the only major browsers which support digest authentication are
-    <a href="http://www.opera.com/">Opera 4.0</a>,
-    <a href="http://www.microsoft.com/windows/ie/">MS Internet
-    Explorer 5.0</a> and <a href="http://www.w3.org/Amaya/">Amaya</a>.
-    Therefore, we do not yet recommend using this feature on a large
-    Internet site. However, for personal and intra-net use, where
-    browser users can be controlled, it is ideal.</p>
-</td></tr></table></blockquote>
-<hr/><h2><a name="AuthDigestAlgorithm">AuthDigestAlgorithm</a> <a name="authdigestalgorithm">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Selects the algorithm used to calculate the challenge and
-response hases in digest authentication</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>AuthDigestAlgorithm MD5|MD5-sess</syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>AuthDigestAlgorithm MD5</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>AuthConfig</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Experimental</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_auth_digest</td></tr></table></td></tr></table><usage>
-    <p>The <code class="directive">AuthDigestAlgorithm</code> directive
-    selects the algorithm used to calculate the challenge and response
-    hashes.</p>
-
-    <p><strong><em>MD5-sess</em> is not correctly implemented
-    yet</strong>. 
-    </p>
-</usage><hr/><h2><a name="AuthDigestDomain">AuthDigestDomain</a> <a name="authdigestdomain">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>URIs that are in the same protection space for digest
-authentication</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>AuthDigestDomain <em>URI</em> [<em>URI</em>] ...</syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>AuthConfig</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Experimental</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_auth_digest</td></tr></table></td></tr></table><usage>
-    <p>The <code class="directive">AuthDigestDomain</code> directive allows
-    you to specify one or more URIs which are in the same protection
-    space (i.e. use the same realm and username/password info). The
-    specified URIs are prefixes, i.e. the client will assume that all
-    URIs "below" these are also protected by the same
-    username/password. The URIs may be either absolute URIs
-    (i.e. inluding a scheme, host, port, etc) or relative URIs.</p>
-
-    <p>This directive <em>should</em> always be specified and
-    contain at least the (set of) root URI(s) for this space.
-    Omitting to do so will cause the client to send the
-    Authorization header for <em>every request</em> sent to this
-    server. Apart from increasing the size of the request, it may
-    also have a detrimental effect on performance if
-    "AuthDigestNcCheck" is on.</p>
-
-    <p>The URIs specified can also point to different servers, in
-    which case clients (which understand this) will then share
-    username/password info across multiple servers without
-    prompting the user each time. </p>
-</usage><hr/><h2><a name="AuthDigestFile">AuthDigestFile</a> <a name="authdigestfile">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Location of the text file containing the list
-of users and encoded passwords for digest authentication</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>AuthDigestFile <em>file-path</em></syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>AuthConfig</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Experimental</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_auth_digest</td></tr></table></td></tr></table><usage>
-    <p>The <code class="directive">AuthDigestFile</code> directive sets the
-    name of a textual file containing the list of users and encoded
-    passwords for digest authentication. <em>File-path</em> is the
-    absolute path to the user file.</p>
-
-    <p>The digest file uses a special format. Files in this format
-    can be created using the <a href="../programs/htdigest.html">htdigest</a> utility found in
-    the support/ subdirectory of the Apache distribution.</p>
-</usage><hr/><h2><a name="AuthDigestGroupFile">AuthDigestGroupFile</a> <a name="authdigestgroupfile">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Name of the text file containing the list of groups
-for digest authentication</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>AuthDigestGroupFile <em>file-path</em></syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>AuthConfig</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Experimental</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_auth_digest</td></tr></table></td></tr></table><usage>
-    <p>The <code class="directive">AuthDigestGroupFile</code> directive sets
-    the name of a textual file containing the list of groups and their
-    members (user names). <em>File-path</em> is the absolute path to
-    the group file.</p>
-
-    <p>Each line of the group file contains a groupname followed by
-    a colon, followed by the member usernames separated by spaces.
-    Example:</p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>mygroup: bob joe anne</code></td></tr></table></blockquote>
-
-    <p>Note that searching large text files is <em>very</em>
-    inefficient.</p>
-
-    <p>Security: make sure that the AuthGroupFile is stored outside
-    the document tree of the web-server; do <em>not</em> put it in
-    the directory that it protects. Otherwise, clients will be able
-    to download the AuthGroupFile.</p>
-</usage><hr/><h2><a name="AuthDigestNcCheck">AuthDigestNcCheck</a> <a name="authdigestnccheck">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Enables or disables checking of the nonce-count sent by the
-server</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>AuthDigestNcCheck On|Off</syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>AuthDigestNcCheck Off</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Experimental</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_auth_digest</td></tr></table></td></tr></table><usage>
-    <p><strong>Not implemented yet.</strong> 
-    </p>
-</usage><hr/><h2><a name="AuthDigestNonceFormat">AuthDigestNonceFormat</a> <a name="authdigestnonceformat">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Determines how the nonce is generated</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>???</syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>???</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>AuthConfig</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Experimental</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_auth_digest</td></tr></table></td></tr></table><usage>
-    <p><strong>Not implemented yet.</strong> 
-    </p>
-</usage><hr/><h2><a name="AuthDigestNonceLifetime">AuthDigestNonceLifetime</a> <a name="authdigestnoncelifetime">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>How long the server nonce is valid</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>AuthDigestNonceLifetime <em>seconds</em></syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>AuthDigestNonceLifetime 300</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>AuthConfig</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Experimental</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_auth_digest</td></tr></table></td></tr></table><usage>
-    <p>The <code class="directive">AuthDigestNonceLifetime</code> directive
-    controls how long the server nonce is valid. When the client
-    contacts the server using an expired nonce the server will send
-    back a 401 with <code>stale=true</code>. If <em>seconds</em> is
-    greater than 0 then it specifies the amount of time for which the
-    nonce is valid; this should probably never be set to less than 10
-    seconds. If <em>seconds</em> is less than 0 then the nonce never
-    expires. 
-    </p>
-</usage><hr/><h2><a name="AuthDigestQop">AuthDigestQop</a> <a name="authdigestqop">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Determines the quality-of-protection to use in digest
-authentication</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>AuthDigestQop none|auth|auth-int [auth|auth-int]</syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>AuthDigestQop auth</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>AuthConfig</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Experimental</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_auth_digest</td></tr></table></td></tr></table><usage>
-    <p>The <code class="directive">AuthDigestQop</code> directive determines
-    the quality-of-protection to use. <em>auth</em> will only do
-    authentication (username/password); <em>auth-int</em> is
-    authentication plus integrity checking (an MD5 hash of the entity
-    is also computed and checked); <em>none</em> will cause the module
-    to use the old RFC-2069 digest algorithm (which does not include
-    integrity checking). Both <em>auth</em> and <em>auth-int</em> may
-    be specified, in which the case the browser will choose which of
-    these to use. <em>none</em> should only be used if the browser for
-    some reason does not like the challenge it receives otherwise.</p>
-
-    <p><strong><em>auth-int</em> is not implemented
-    yet</strong>.</p>
-</usage><hr/><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img alt="Index" src="../images/index.gif"/></a><a href="../"><img alt="Home" src="../images/home.gif"/></a></blockquote></body></html>
\ No newline at end of file
diff --git a/docs/manual/mod/mod_auth_digest.xml b/docs/manual/mod/mod_auth_digest.xml
deleted file mode 100644
index ac1e936..0000000
--- a/docs/manual/mod/mod_auth_digest.xml
+++ /dev/null
@@ -1,271 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.xsl"?>
-<modulesynopsis>
-<name>mod_auth_digest</name>
-<description>User authentication using MD5
-    Digest Authentication.</description>
-<status>Experimental</status>
-<sourcefile>mod_auth_digest.c</sourcefile>
-<identifier>auth_digest_module</identifier>
-
-<summary>
-    <p>This module implements HTTP Digest Authentication.  However, it
-    has not been extensively tested and is therefore marked
-    experimental.</p>
-</summary>
-
-<seealso><directive module="core">AuthName</directive></seealso>
-<seealso><directive module="core">AuthType</directive></seealso>
-<seealso><directive module="core">Require</directive></seealso>
-<seealso><directive module="core">Satisfy</directive></seealso>
-
-<section><title>Using Digest Authentication</title>
-
-    <p>Using MD5 Digest authentication is very simple. Simply set
-    up authentication normally, using "AuthType Digest" and
-    "AuthDigestFile" instead of the normal "AuthType Basic" and
-    "AuthUserFile"; also, replace any "AuthGroupFile" with
-    "AuthDigestGroupFile". Then add a "AuthDigestDomain" directive
-    containing at least the root URI(s) for this protection space.
-    Example:</p>
-<example>
-  &lt;Location /private/&gt;<br />
-  AuthType Digest<br />
-  AuthName "private area"<br />
-  AuthDigestDomain /private/ http://mirror.my.dom/private2/<br />
-  AuthDigestFile /web/auth/.digest_pw<br />
-  Require valid-user<br />
-  &lt;/Location&gt;
-</example>
-
-<note><title>Note</title>
-    <p>MD5 authentication provides a more
-    secure password system than Basic authentication, but only
-    works with supporting browsers. As of this writing (October 2001),
-    the only major browsers which support digest authentication are
-    <a href="http://www.opera.com/">Opera 4.0</a>,
-    <a href="http://www.microsoft.com/windows/ie/">MS Internet
-    Explorer 5.0</a> and <a href="http://www.w3.org/Amaya/">Amaya</a>.
-    Therefore, we do not yet recommend using this feature on a large
-    Internet site. However, for personal and intra-net use, where
-    browser users can be controlled, it is ideal.</p>
-</note>
-</section>
-
-<directivesynopsis>
-<name>AuthDigestFile</name>
-<description>Location of the text file containing the list
-of users and encoded passwords for digest authentication</description>
-<syntax>AuthDigestFile <em>file-path</em></syntax>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
-    <p>The <directive>AuthDigestFile</directive> directive sets the
-    name of a textual file containing the list of users and encoded
-    passwords for digest authentication. <em>File-path</em> is the
-    absolute path to the user file.</p>
-
-    <p>The digest file uses a special format. Files in this format
-    can be created using the <a
-    href="../programs/htdigest.html">htdigest</a> utility found in
-    the support/ subdirectory of the Apache distribution.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AuthDigestGroupFile</name>
-<description>Name of the text file containing the list of groups
-for digest authentication</description>
-<syntax>AuthDigestGroupFile <em>file-path</em></syntax>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
-    <p>The <directive>AuthDigestGroupFile</directive> directive sets
-    the name of a textual file containing the list of groups and their
-    members (user names). <em>File-path</em> is the absolute path to
-    the group file.</p>
-
-    <p>Each line of the group file contains a groupname followed by
-    a colon, followed by the member usernames separated by spaces.
-    Example:</p>
-
-<example>mygroup: bob joe anne</example>
-
-    <p>Note that searching large text files is <em>very</em>
-    inefficient.</p>
-
-    <p>Security: make sure that the AuthGroupFile is stored outside
-    the document tree of the web-server; do <em>not</em> put it in
-    the directory that it protects. Otherwise, clients will be able
-    to download the AuthGroupFile.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AuthDigestQop</name>
-<description>Determines the quality-of-protection to use in digest
-authentication</description>
-<syntax>AuthDigestQop none|auth|auth-int [auth|auth-int]</syntax>
-<default>AuthDigestQop auth</default>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
-    <p>The <directive>AuthDigestQop</directive> directive determines
-    the quality-of-protection to use. <em>auth</em> will only do
-    authentication (username/password); <em>auth-int</em> is
-    authentication plus integrity checking (an MD5 hash of the entity
-    is also computed and checked); <em>none</em> will cause the module
-    to use the old RFC-2069 digest algorithm (which does not include
-    integrity checking). Both <em>auth</em> and <em>auth-int</em> may
-    be specified, in which the case the browser will choose which of
-    these to use. <em>none</em> should only be used if the browser for
-    some reason does not like the challenge it receives otherwise.</p>
-
-    <p><strong><em>auth-int</em> is not implemented
-    yet</strong>.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AuthDigestNonceLifetime</name>
-<description>How long the server nonce is valid</description>
-<syntax>AuthDigestNonceLifetime <em>seconds</em></syntax>
-<default>AuthDigestNonceLifetime 300</default>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
-    <p>The <directive>AuthDigestNonceLifetime</directive> directive
-    controls how long the server nonce is valid. When the client
-    contacts the server using an expired nonce the server will send
-    back a 401 with <code>stale=true</code>. If <em>seconds</em> is
-    greater than 0 then it specifies the amount of time for which the
-    nonce is valid; this should probably never be set to less than 10
-    seconds. If <em>seconds</em> is less than 0 then the nonce never
-    expires. <!-- Not implemented yet If <EM>seconds</EM> is 0 then
-    the nonce may be used exactly once by the client. Note that while
-    one-time-nonces provide higher security against replay attacks,
-    they also have significant performance implications, as the
-    browser cannot pipeline or multiple connections for the
-    requests. Because browsers cannot easily detect that
-    one-time-nonces are being used, this may lead to browsers trying
-    to pipeline requests and receiving 401 responses for all but the
-    first request, requiring the browser to resend the requests. Note
-    also that the protection against reply attacks only makes sense
-    for dynamically generated content and things like POST requests;
-    for static content the attacker may already have the complete
-    response, so one-time-nonces do not make sense here.  -->
-    </p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AuthDigestNonceFormat</name>
-<description>Determines how the nonce is generated</description>
-<syntax>???</syntax>
-<default>???</default>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
-    <p><strong>Not implemented yet.</strong> <!--
-            <P>The AuthDigestNonceFormat directive determines how the nonce is
-            generated.
-            -->
-    </p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AuthDigestNcCheck</name>
-<description>Enables or disables checking of the nonce-count sent by the
-server</description>
-<syntax>AuthDigestNcCheck On|Off</syntax>
-<default>AuthDigestNcCheck Off</default>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
-    <p><strong>Not implemented yet.</strong> <!--
-            <P>The AuthDigestNcCheck directive enables or disables the checking of the
-            nonce-count sent by the server.
-
-            <P>While recommended from a security standpoint, turning this directive
-            On has one important performance implication. To check the nonce-count
-            *all* requests (which have an Authorization header, irrespective of
-            whether they require digest authentication) must be serialized through
-            a critical section. If the server is handling a large number of
-            requests which contain the Authorization header then this may noticeably
-            impact performance.
-            -->
-    </p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AuthDigestAlgorithm</name>
-<description>Selects the algorithm used to calculate the challenge and
-response hases in digest authentication</description>
-<syntax>AuthDigestAlgorithm MD5|MD5-sess</syntax>
-<default>AuthDigestAlgorithm MD5</default>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
-    <p>The <directive>AuthDigestAlgorithm</directive> directive
-    selects the algorithm used to calculate the challenge and response
-    hashes.</p>
-
-    <p><strong><em>MD5-sess</em> is not correctly implemented
-    yet</strong>. <!--
-            <P>To use <EM>MD5-sess</EM> you must first code up the
-            <VAR>get_userpw_hash()</VAR> function in <VAR>mod_auth_digest.c</VAR> .
-            -->
-    </p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AuthDigestDomain</name>
-<description>URIs that are in the same protection space for digest
-authentication</description>
-<syntax>AuthDigestDomain <em>URI</em> [<em>URI</em>] ...</syntax>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>AuthConfig</override>
-
-<usage>
-    <p>The <directive>AuthDigestDomain</directive> directive allows
-    you to specify one or more URIs which are in the same protection
-    space (i.e. use the same realm and username/password info). The
-    specified URIs are prefixes, i.e. the client will assume that all
-    URIs "below" these are also protected by the same
-    username/password. The URIs may be either absolute URIs
-    (i.e. inluding a scheme, host, port, etc) or relative URIs.</p>
-
-    <p>This directive <em>should</em> always be specified and
-    contain at least the (set of) root URI(s) for this space.
-    Omitting to do so will cause the client to send the
-    Authorization header for <em>every request</em> sent to this
-    server. Apart from increasing the size of the request, it may
-    also have a detrimental effect on performance if
-    "AuthDigestNcCheck" is on.</p>
-
-    <p>The URIs specified can also point to different servers, in
-    which case clients (which understand this) will then share
-    username/password info across multiple servers without
-    prompting the user each time. </p>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
-
diff --git a/docs/manual/mod/mod_autoindex.html b/docs/manual/mod/mod_autoindex.html
deleted file mode 100644
index 79bc5ff..0000000
--- a/docs/manual/mod/mod_autoindex.html
+++ /dev/null
@@ -1,633 +0,0 @@
-<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-     This file is generated from xml source: DO NOT EDIT
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
---><title>mod_autoindex - Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img alt="[APACHE DOCUMENTATION]" src="../images/sub.gif"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module mod_autoindex</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td><description>Generates directory indexes,
-    automatically, similar to the Unix <em>ls</em> command or the
-    Win32 <em>dir</em> shell command</description></td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="module-dict.html#ModuleIdentifier" class="help">Module&nbsp;Identifier:</a></td><td>autoindex_module</td></tr></table></td></tr></table><h2>Summary</h2><summary> 
-      <p>The index of a directory can come from one of two
-      sources:</p>
-
-    <ul>
-      <li>A file written by the user, typically called
-      <code>index.html</code>. The <a href="mod_dir.html#directoryindex" class="directive"><code class="directive">DirectoryIndex</code></a> directive sets the
-      name of this file. This is controlled by
-      <code><a href="mod_dir.html">mod_dir</a></code>.</li>
-
-      <li>Otherwise, a listing generated by the server. The other
-      directives control the format of this listing. The <a href="#addicon" class="directive"><code class="directive">AddIcon</code></a>, <a href="#addiconbyencoding" class="directive"><code class="directive">AddIconByEncoding</code></a> and
-      <a href="#addiconbytype" class="directive"><code class="directive">AddIconByType</code></a> are
-      used to set a list of icons to display for various file types;
-      for each file listed, the first icon listed that matches the
-      file is displayed. These are controlled by
-      <code><a href="mod_autoindex.html">mod_autoindex</a></code>.</li>
-    </ul>
-    <p>The two functions are separated so that you can completely
-    remove (or replace) automatic index generation should you want
-    to.</p> 
-
-    <p>Automatic index generation is enabled with using
-    <code>Options +Indexes</code>. See the 
-    <a href="core.html#options" class="directive"><code class="directive">Options</code></a> directive for
-    more details.</p>
-
-    <p>If the <a href="autoindex.html#fancyindexing" class="directive"><code class="directive">FancyIndexing</code></a>
-    option is given with the <a href="autoindex.html#indexoptions" class="directive"><code class="directive">IndexOptions</code></a> directive,
-    the column headers are links that control the order of the
-    display. If you select a header link, the listing will be
-    regenerated, sorted by the values in that column. Selecting the
-    same header repeatedly toggles between ascending and descending
-    order. These column header links are suppressed with
-    <a href="autoindex.html#indexoptions" class="directive"><code class="directive">IndexOptions</code></a> directive's
-    <code>SuppressColumnSorting</code> option.</p>
-
-    <p>Note that when the display is sorted by "Size", it's the
-    <em>actual</em> size of the files that's used, not the
-    displayed value - so a 1010-byte file will always be displayed
-    before a 1011-byte file (if in ascending order) even though
-    they both are shown as "1K".</p>
-</summary><h2>Directives</h2><ul><li><a href="#addalt">AddAlt</a></li><li><a href="#addaltbyencoding">AddAltByEncoding</a></li><li><a href="#addaltbytype">AddAltByType</a></li><li><a href="#adddescription">AddDescription</a></li><li><a href="#addicon">AddIcon</a></li><li><a href="#addiconbyencoding">AddIconByEncoding</a></li><li><a href="#addiconbytype">AddIconByType</a></li><li><a href="#defaulticon">DefaultIcon</a></li><li><a href="#headername">HeaderName</a></li><li><a href="#indexignore">IndexIgnore</a></li><li><a href="#indexoptions">IndexOptions</a></li><li><a href="#indexorderdefault">IndexOrderDefault</a></li><li><a href="#readmename">ReadmeName</a></li></ul><h2>Autoindex Request Query Arguments</h2>
-
-    <p>Apache 2.0.23 reorganized the Query Arguments for Column
-    Sorting, and introduced an entire group of new query options.
-    To effectively eliminate all client control over the output,
-    the <code><a href="#indexoptions:ignoreclient">IndexOptions
-    IgnoreClient</a></code> option was introduced.</p>
-
-    <p>The column sorting headers themselves are self-referencing
-    hyperlinks that add the sort query options shown below. Any
-    option below may be added to any request for the directory
-    resource.</p>
-
-    <ul>
-      <li><code>C=N</code> sorts the directory by file name</li>
-
-      <li><code>C=M</code> sorts the directory by last-modified
-      date, then file name</li>
-
-      <li><code>C=S</code> sorts the directory by size, then file
-      name</li>
-
-      <li><code>C=D</code> sorts the directory by description, then
-      file name<br>
-       &nbsp;</li>
-
-      <li><code>O=A</code> sorts the listing in Ascending
-      Order</li>
-
-      <li><code>O=D</code> sorts the listing in Descending
-      Order<br>
-       &nbsp;</li>
-
-      <li><code>F=0</code> formats the listing as a simple list
-      (not FancyIndexed)</li>
-
-      <li><code>F=1</code> formats the listing as a FancyIndexed
-      list</li>
-
-      <li><code>F=2</code> formats the listing as an HTMLTable
-      FancyIndexed list<br>
-       &nbsp;</li>
-
-      <li><code>V=0</code> disables version sorting</li>
-
-      <li><code>V=1</code> enables version sorting<br>
-       &nbsp;</li>
-
-      <li><code>P=<em>pattern</em></code> lists only files matching
-      the given <em>pattern</em></li>
-    </ul>
-
-    <p>Note that the 'P'attern query argument is tested
-    <em>after</em> the usual IndexIgnore directives are processed,
-    and all file names are still subjected to the same criteria as
-    any other autoindex listing. The Query Arguments parser in
-    mod_autoindex will stop abruptly when an unrecognized option is
-    encountered. The Query Arguments must be well formed, according
-    to the table above.</p>
-
-    <p>The simple example below, which can be clipped and saved in
-    a header.html file, illustrates these query options. Note that
-    the unknown "X" argument, for the submit button, is listed last
-    to assure the arguments are all parsed before mod_autoindex
-    encounters the X=Go input.</p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-&lt;FORM METHOD="GET"&gt;<br>
-&nbsp;&nbsp;Show me a &lt;SELECT NAME="F"&gt;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&lt;OPTION VALUE="0"&gt; Plain list <br>
-&nbsp;&nbsp;&nbsp;&nbsp;&lt;OPTION VALUE="1" SELECTED&gt; Fancy list<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&lt;OPTION VALUE="2"&gt; Table list<br>
-&nbsp;&nbsp;&lt;/SELECT&gt;<br>
-&nbsp;&nbsp;Sorted by &lt;SELECT NAME="C"&gt;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&lt;OPTION VALUE="N" SELECTED&gt; Name<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&lt;OPTION VALUE="M"&gt; Date Modified<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&lt;OPTION VALUE="S"&gt; Size<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&lt;OPTION VALUE="D"&gt; Description<br>
-&nbsp;&nbsp;&lt;/SELECT&gt;<br>
-&nbsp;&nbsp;&lt;SELECT NAME="O"&gt;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&lt;OPTION VALUE="A" SELECTED&gt; Ascending<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&lt;OPTION VALUE="D"&gt; Descending<br>
-&nbsp;&nbsp;&lt;/SELECT&gt;<br>
-&nbsp;&nbsp;&lt;SELECT NAME="V"&gt;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&lt;OPTION VALUE="0" SELECTED&gt; in Normal order<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&lt;OPTION VALUE="1"&gt; in Version order<br>
-&nbsp;&nbsp;&lt;/SELECT&gt;<br>
-&nbsp;&nbsp;Matching &lt;INPUT TYPE="text" NAME="P" VALUE="*"&gt;<br>
-&nbsp;&nbsp;&lt;INPUT TYPE="submit" NAME="X" VALUE="Go"&gt;<br>
-&lt;/FORM&gt;
-</code></td></tr></table></blockquote>
-
-<hr/><h2><a name="AddAlt">AddAlt</a> <a name="addalt">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Alternate text to display for a file, instead of an
-icon selected by filename</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>AddAlt <em>string file</em> [<em>file</em>] ...</syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>Indexes</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_autoindex</td></tr></table></td></tr></table><usage>
-    <p><code class="directive">AddAlt</code> provides the alternate text to
-    display for a file, instead of an icon, for <code><a href="#indexoptions:fancyindexing">FancyIndexing</a></code>.
-    <em>File</em> is a file extension, partial filename, wild-card
-    expression or full filename for files to describe.
-    <em>String</em> is enclosed in double quotes (<code>"</code>).
-    This alternate text is displayed if the client is image-incapable,
-    has image loading disabled, or fails to retrieve the icon.</p>
-
-    <p>Examples:</p>
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-    AddAlt "PDF" *.pdf<br>
-    AddAlt "Compressed" *.gz *.zip *.Z
-</code></td></tr></table></blockquote>
-</usage><hr/><h2><a name="AddAltByEncoding">AddAltByEncoding</a> <a name="addaltbyencoding">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Alternate text to display for a file instead of an icon
-selected by MIME-encoding</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>AddAltByEncoding <em>string MIME-encoding</em>
-[<em>MIME-encoding</em>] ...</syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>Indexes</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_autoindex</td></tr></table></td></tr></table><usage>
-    <p><code class="directive">AddAltByEncoding</code> provides the alternate
-    text to display for a file, instead of an icon, for <code><a href="#indexoptions:fancyindexing">FancyIndexing</a></code>.
-    <em>MIME-encoding</em> is a valid content-encoding, such as
-    <code>x-compress</code>. <em>String</em> is enclosed in double
-    quotes (<code>"</code>). This alternate text is displayed if the
-    client is image-incapable, has image loading disabled, or fails to
-    retrieve the icon.</p>
-
-    <p>Example:</p>
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-    AddAltByEncoding "gzip" x-gzip
-</code></td></tr></table></blockquote>
-</usage><hr/><h2><a name="AddAltByType">AddAltByType</a> <a name="addaltbytype">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Alternate text to display for a file, instead of an
-icon selected by MIME content-type</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>AddAltByType <em>string
-    MIME-type</em> [<em>MIME-type</em>] ...</syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>Indexes</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_autoindex</td></tr></table></td></tr></table><usage>
-    <p><code class="directive">AddAltByType</code> sets the alternate text to
-    display for a file, instead of an icon, for <code><a href="#indexoptions:fancyindexing">FancyIndexing</a></code>.
-    <em>MIME-type</em> is a valid content-type, such as
-    <code>text/html</code>. <em>String</em> is enclosed in double
-    quotes (<code>"</code>). This alternate text is displayed if the
-    client is image-incapable, has image loading disabled, or fails to
-    retrieve the icon.</p>
-
-    <p>Example:</p>
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-    AddAltByType "TXT" text/plain
-</code></td></tr></table></blockquote>
-</usage><hr/><h2><a name="AddDescription">AddDescription</a> <a name="adddescription">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td/></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>AddDescription
-    <em>string file</em> [<em>file</em>] ...</syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>Indexes</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_autoindex</td></tr></table></td></tr></table><usage>
-    <p>This sets the description to display for a file, for
-    <code><a href="#indexoptions:fancyindexing">FancyIndexing</a></code>.
-    <em>File</em> is a file extension, partial filename, wild-card
-    expression or full filename for files to describe.
-    <em>String</em> is enclosed in double quotes (<code>"</code>).
-    Example:</p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>AddDescription "The planet Mars"
-      /web/pics/mars.gif</code></td></tr></table></blockquote>
-
-    <p>The typical, default description field is 23 bytes wide. 6
-    more bytes are added by the
-    <code>IndexOptions&nbsp;SuppressIcon</code> option, 7 bytes are
-    added by the <code>IndexOptions&nbsp;SuppressSize</code>
-    option, and 19 bytes are added by the
-    <code>IndexOptions&nbsp;SuppressLastModified</code> option.
-    Therefore, the widest default the description column is ever
-    assigned is 55 bytes.</p>
-
-    <p>See the <a href="#indexoptions:descriptionwidth">DescriptionWidth</a>
-    <a href="#indexoptions" class="directive"><code class="directive">IndexOptions</code></a> keyword
-    for details on overriding the size of this column, or allowing
-    descriptions of unlimited length.</p>
-
-<blockquote><table><tr><td bgcolor="#e0e5f5"><p align="center"><strong>Caution</strong></p> <p>Descriptive text defined with
-      <code class="directive">AddDescription</code> may contain HTML markup, such as
-      tags and character entities. If the width of the description
-      column should happen to truncate a tagged element (such as
-      cutting off the end of a bolded phrase), the results may
-      affect the rest of the directory listing.</p>
-</td></tr></table></blockquote>
-</usage><hr/><h2><a name="AddIcon">AddIcon</a> <a name="addicon">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Icon to display for a file selected by name</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>AddIcon <em>icon
-    name</em> [<em>name</em>] ...</syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>Indexes</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_autoindex</td></tr></table></td></tr></table><usage>
-    <p>This sets the icon to display next to a file ending in
-    <em>name</em> for <code><a href="#indexoptions:fancyindexing">FancyIndexing</a></code>.
-    <em>Icon</em> is either a (%-escaped) relative URL to the icon,
-    or of the format (<em>alttext</em>,<em>url</em>) where
-    <em>alttext</em> is the text tag given for an icon for
-    non-graphical browsers.</p>
-
-    <p><em>Name</em> is either ^^DIRECTORY^^ for directories,
-    ^^BLANKICON^^ for blank lines (to format the list correctly), a
-    file extension, a wildcard expression, a partial filename or a
-    complete filename. Examples:</p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-      AddIcon (IMG,/icons/image.xbm) .gif .jpg .xbm<br>
-       AddIcon /icons/dir.xbm ^^DIRECTORY^^<br>
-       AddIcon /icons/backup.xbm *~
-</code></td></tr></table></blockquote>
-    
-    <p><a href="#addiconbytype" class="directive"><code class="directive">AddIconByType</code></a>
-    should be used in preference to <code class="directive">AddIcon</code>,
-    when possible.</p>
-</usage><hr/><h2><a name="AddIconByEncoding">AddIconByEncoding</a> <a name="addiconbyencoding">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Icon to display next to files selected by MIME 
-content-encoding</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>AddIconByEncoding
-    <em>icon MIME-encoding</em> [<em>MIME-encoding</em>] ...</syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>Indexes</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_autoindex</td></tr></table></td></tr></table><usage>
-    <p>This sets the icon to display next to files with <code><a href="#indexoptions:fancyindexing">FancyIndexing</a></code>.
-    <em>Icon</em> is either a (%-escaped) relative URL to the icon,
-    or of the format (<em>alttext</em>,<em>url</em>) where
-    <em>alttext</em> is the text tag given for an icon for
-    non-graphical browsers.</p>
-
-    <p><em>Mime-encoding</em> is a wildcard expression matching
-    required the content-encoding. Examples:</p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>AddIconByEncoding /icons/compress.xbm x-compress</code></td></tr></table></blockquote>
-</usage><hr/><h2><a name="AddIconByType">AddIconByType</a> <a name="addiconbytype">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Icon to display next to files selected by MIME 
-content-type</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>AddIconByType
-    <em>icon MIME-type</em> [<em>MIME-type</em>] ...</syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>Indexes</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_autoindex</td></tr></table></td></tr></table><usage>
-    <p>This sets the icon to display next to files of type
-    <em>MIME-type</em> for <code><a href="#indexoptions:fancyindexing">FancyIndexing</a></code>.
-    <em>Icon</em> is either a (%-escaped) relative URL to the icon,
-    or of the format (<em>alttext</em>,<em>url</em>) where
-    <em>alttext</em> is the text tag given for an icon for
-    non-graphical browsers.</p>
-
-    <p><em>Mime-type</em> is a wildcard expression matching
-    required the mime types. Examples:</p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>AddIconByType (IMG,/icons/image.xbm) image/*</code></td></tr></table></blockquote>
-</usage><hr/><h2><a name="DefaultIcon">DefaultIcon</a> <a name="defaulticon">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Icon to display for files when no specific icon is
-configured</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>DefaultIcon <em>url-path</em></syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>Indexes</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_autoindex</td></tr></table></td></tr></table><usage>
-    <p>The <code class="directive">DefaultIcon</code> directive sets the icon
-    to display for files when no specific icon is known, for <code><a href="#indexoptions:fancyindexing">FancyIndexing</a></code>.
-    <em>Url</em> is a (%-escaped) relative URL to the icon.
-    Examples:</p>
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>DefaultIcon /icon/unknown.xbm</code></td></tr></table></blockquote>
-</usage><hr/><h2><a name="HeaderName">HeaderName</a> <a name="headername">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Name of the file that will be inserted at the top
-of the index listing</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>HeaderName <em>filename</em></syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>Indexes</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_autoindex</td></tr></table></td></tr></table><usage>
-    <p>The <code class="directive">HeaderName</code> directive sets the name
-    of the file that will be inserted at the top of the index
-    listing. <em>Filename</em> is the name of the file to include.</p>
-
-<blockquote><table><tr><td bgcolor="#e0e5f5">
-      <p>Both HeaderName and <a href="#readmename" class="directive"><code class="directive">ReadmeName</code></a> now treat
-      <em>Filename</em> as a URI path relative to the one used to
-      access the directory being indexed. <em>Filename</em> must
-      resolve to a document with a major content type of
-      "<code>text/*</code>" (<em>e.g.</em>, <code>text/html</code>,
-      <code>text/plain</code>, <em>etc.</em>). This means that
-      <em>filename</em> may refer to a CGI script if the script's
-      actual file type (as opposed to its output) is marked as
-      <code>text/html</code> such as with a directive like:</p>
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-    AddType text/html .cgi
-</code></td></tr></table></blockquote>
-      <p><a href="../content-negotiation.html">Content negotiation</a>
-      will be performed if the <code>MultiViews</code> <a href="core.html#option" class="directive"><code class="directive">Option</code></a> is enabled. If
-      <em>filename</em> resolves to a static <code>text/html</code>
-      document (not a CGI script) and the <code>Includes</code>
-      <a href="core.html#option" class="directive"><code class="directive">option</code></a> is enabled, the file
-      will be processed for server-side includes (see the
-      <code><a href="mod_include.html">mod_include</a></code> documentation).</p>
-</td></tr></table></blockquote>
-
-    <p>If the file specified by <code class="directive">HeaderName</code> contains
-    the beginnings of an HTML document (&lt;HTML&gt;, &lt;HEAD&gt;,
-    etc) then you will probably want to set <a href="#indexoptions:suppresshtmlpreamble"><code>IndexOptions
-    +SuppressHTMLPreamble</code></a>, so that these tags are not
-    repeated.</p>
-</usage><hr/><h2><a name="IndexIgnore">IndexIgnore</a> <a name="indexignore">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Adds to the list of files to hide when listing 
-a directory</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>IndexIgnore <em>file</em> [<em>file</em>] ...</syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>Indexes</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_autoindex</td></tr></table></td></tr></table><usage>
-    <p>The <code class="directive">IndexIgnore</code> directive adds to the
-    list of files to hide when listing a directory. <em>File</em> is a
-    file extension, partial filename, wildcard expression or full
-    filename for files to ignore. Multiple IndexIgnore directives add
-    to the list, rather than the replacing the list of ignored
-    files. By default, the list contains
-    `<code>.</code>'. Example:</p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>IndexIgnore README .htaccess *~</code></td></tr></table></blockquote>
-</usage><hr/><h2><a name="IndexOptions">IndexOptions</a> <a name="indexoptions">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Various configuration settings for directory 
-indexing</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>IndexOptions  [+|-]<em>option</em> [[+|-]<em>option</em>] ...</syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>Indexes</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_autoindex</td></tr></table></td></tr></table><usage>
-    <p>The <code class="directive">IndexOptions</code> directive specifies the
-    behavior of the directory indexing. <em>Option</em> can be one
-    of</p>
-
-    <dl>
-      <dt><a name="indexoptions:descriptionwidth">DescriptionWidth=[<em>n</em>
-      | *] (<em>Apache 1.3.10 or 2.0.23 and later</em>)</a></dt>
-
-      <dd>The <code>DescriptionWidth</code> keyword allows you to
-      specify the width of the description column in
-      characters.</dd>
-
-      <dd><code>-DescriptionWidth</code> (or unset) allows
-      mod_autoindex to calculate the best width.</dd>
-
-      <dd><code>DescriptionWidth=n</code> fixes the column width to
-      n bytes wide.</dd>
-
-      <dd><code>DescriptionWidth=*</code> grows the column to the
-      width necessary to accommodate the longest description
-      string.</dd>
-
-      <dd><strong>See the section on <a href="#adddescription" class="directive"><code class="directive">AddDescription</code></a> for dangers
-      inherent in truncating descriptions.</strong></dd>
-
-      <dt><a name="indexoptions:fancyindexing">FancyIndexing</a></dt>
-
-      <dd>
-      This turns on fancy indexing of directories.</dd>
-
-      <dt><a name="indexoptions:foldersfirst">FoldersFirst (<em>Apache
-      1.3.10 or 2.0.23 and later</em>)</a></dt>
-
-      <dd>If this option is enabled, subdirectory listings will
-      <em>always</em> appear first, followed by normal files in the
-      directory. The listing is basically broken into two
-      components, the files and the subdirectories, and each is
-      sorted separately and then displayed subdirectories-first.
-      For instance, if the sort order is descending by name, and
-      <code>FoldersFirst</code> is enabled, subdirectory
-      <code>Zed</code> will be listed before subdirectory
-      <code>Beta</code>, which will be listed before normal files
-      <code>Gamma</code> and <code>Alpha</code>. <strong>This option
-      only has an effect if <a href="#indexoptions:fancyindexing"><code>FancyIndexing</code></a>
-      is also enabled.</strong></dd>
-
-      <dt><a name="indexoptions:htmltable">HTMLTable</a> <em>(Experimental,
-      Apache 2.0.23 and later)</em></dt>
-
-      <dd>
-      This experimental option with FancyIndexing constructs a
-      simple table for the fancy directory listing. Note this will
-      confuse older browsers. It is particularly necessary if file
-      names or description text will alternate between
-      left-to-right and right-to-left reading order, as can happen
-      on WinNT or other utf-8 enabled platforms.</dd>
-
-      <dt><a name="indexoptions:iconsarelinks">IconsAreLinks</a></dt>
-
-      <dd>
-      This makes the icons part of the anchor for the filename, for
-      fancy indexing.</dd>
-
-      <dt><a name="indexoptions:iconheight">IconHeight[=pixels]
-      (<em>Apache 1.3 and later</em>)</a></dt>
-
-      <dd>
-      Presence of this option, when used with IconWidth, will cause
-      the server to include <code>HEIGHT</code> and
-      <code>WIDTH</code> attributes in the <code>IMG</code> tag for
-      the file icon. This allows browser to precalculate the page
-      layout without having to wait until all the images have been
-      loaded. If no value is given for the option, it defaults to
-      the standard height of the icons supplied with the Apache
-      software.</dd>
-
-      <dt><a name="indexoptions:iconwidth">IconWidth[=pixels] (<em>Apache
-      1.3 and later</em>)</a></dt>
-
-      <dd>
-      Presence of this option, when used with IconHeight, will
-      cause the server to include <code>HEIGHT</code> and
-      <code>WIDTH</code> attributes in the <code>IMG</code> tag for
-      the file icon. This allows browser to precalculate the page
-      layout without having to wait until all the images have been
-      loaded. If no value is given for the option, it defaults to
-      the standard width of the icons supplied with the Apache
-      software.</dd>
-
-      <dt><a name="indexoptions:ignoreclient">IgnoreClient</a></dt>
-
-      <dd>
-      This option causes mod_autoindex to ignore all query
-      variables from the client, including sort order (implies
-      <code><a href="#indexoptions:suppresscolumnsorting">SuppressColumnSorting</a></code>.)</dd>
-
-      <dt><a name="indexoptions:namewidth">NameWidth=[<em>n</em> | *]
-      (<em>Apache 1.3.2 and later</em>)</a></dt>
-
-      <dd>The NameWidth keyword allows you to specify the width of
-      the filename column in bytes.</dd>
-
-      <dd><code>-NameWidth</code> (or unset) allows mod_autoindex
-      to calculate the best width.</dd>
-
-      <dd><code>NameWidth=n</code> fixes the column width to n
-      bytes wide.</dd>
-
-      <dd><code>NameWidth=*</code> grows the column to the
-      necessary width.</dd>
-
-      <dt><a name="indexoptions:scanhtmltitles">ScanHTMLTitles</a></dt>
-
-      <dd>
-      This enables the extraction of the title from HTML documents
-      for fancy indexing. If the file does not have a description
-      given by <a href="#adddescription">AddDescription</a> then
-      httpd will read the document for the value of the TITLE tag.
-      This is CPU and disk intensive.</dd>
-
-      <dt><a name="indexoptions:suppresscolumnsorting">SuppressColumnSorting</a>
-      (<em>Apache 1.3 and later</em>)</dt>
-
-      <dd>
-      If specified, Apache will not make the column headings in a
-      FancyIndexed directory listing into links for sorting. The
-      default behavior is for them to be links; selecting the
-      column heading will sort the directory listing by the values
-      in that column. <strong>Prior to Apache 2.0.23, this also
-      disabled parsing the Query Arguments for the sort
-      string.</strong> That behavior is now controlled by <a href="#indexoptions:ignoreclient">IndexOptions
-      IgnoreClient</a> in Apache 2.0.23.</dd>
-
-      <dt><a name="indexoptions:suppressdescription">SuppressDescription</a></dt>
-
-      <dd>
-      This will suppress the file description in fancy indexing
-      listings. By default, no file descriptions are defined, and
-      so the use of this option will regain 23 characters of screen
-      space to use for something else. See <a href="#adddescription"><code>AddDescription</code></a> for
-      information about setting the file description. See also the
-      <a href="#indexoptions:descriptionwidth"><code>DescriptionWidth</code></a>
-      index option to limit the size of the description
-      column.</dd>
-
-      <dt><a name="indexoptions:suppresshtmlpreamble">SuppressHTMLPreamble</a>
-      (<em>Apache 1.3 and later</em>)</dt>
-
-      <dd>
-      If the directory actually contains a file specified by the
-      <a href="#headername" class="directive"><code class="directive">HeaderName</code></a>
-      directive, the module usually includes the contents of the file
-      after a standard HTML preamble (&lt;HTML&gt;, &lt;HEAD&gt;,
-      <em>et cetera</em>). The SuppressHTMLPreamble option disables
-      this behaviour, causing the module to start the display with the
-      header file contents. The header file must contain appropriate
-      HTML instructions in this case. If there is no header file, the
-      preamble is generated as usual.</dd>
-
-      <dt><a name="indexoptions:suppressicon">SuppressIcon</a> (<em>Apache
-      2.0.23 and later</em>)</dt>
-
-      <dd>
-      This will suppress the icon in fancy indexing listings.
-      Combining both <em>SuppressIcon</em> and
-      <em>SuppressRules</em> yields proper HTML 3.2 output, which
-      by the final specification prohibits IMG and HR tags from the
-      PRE block (used to format FancyIndexed listings.)</dd>
-
-      <dt><a name="indexoptions:suppresslastmodified">SuppressLastModified</a></dt>
-
-      <dd>
-      This will suppress the display of the last modification date,
-      in fancy indexing listings.</dd>
-
-      <dt><a name="indexoptions:suppressrules">SuppressRules</a>
-      (<em>Apache 2.0.23 and later</em>)</dt>
-
-      <dd>
-      This will suppress the horizontal rule lines (HR tags) in
-      directory listings. Combining both <em>SuppressIcon</em> and
-      <em>SuppressRules</em> yeilds proper HTML 3.2 output, which
-      by the final specification prohibits IMG and HR tags from the
-      PRE block (used to format FancyIndexed listings.)</dd>
-
-      <dt><a name="indexoptions:suppresssize">SuppressSize</a></dt>
-
-      <dd>
-      This will suppress the file size in fancy indexing
-      listings.</dd>
-
-      <dt><a name="indexoptions:trackmodified">TrackModified (<em>Apache
-      1.3.15 or 2.0.23 and later</em>)</a></dt>
-
-      <dd>
-      This returns the Last-Modified and ETag values for the listed
-      directory in the HTTP header. It is only valid if the
-      operating system and file system return appropriate stat()
-      results. Some Unix systems do so, as do OS2's JFS and Win32's
-      NTFS volumes. OS2 and Win32 FAT volumes, for example, do not.
-      Once this feature is enabled, the client or proxy can track
-      changes to the list of files when they perform a HEAD
-      request. Note some operating systems correctly track new and
-      removed files, but do not track changes for sizes or dates of
-      the files within the directory. <strong>Changes to the size
-      or date stamp of an existing file will not update the
-      Last-Modified header on all Unix platforms.</strong> If this
-      is a concern, leave this option disabled.</dd>
-
-      <dt><a name="indexoptions:versionsort">VersionSort (<em>Apache 2.0a3
-      and later</em>)</a></dt>
-
-      <dd>
-        The VersionSort keyword causes files containing version
-        numbers to sort in a natural way. Strings are sorted as
-        usual, except that substrings of digits in the name and
-        description are compared according to their numeric value.
-        For example: 
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-foo-1.7<br>
-foo-1.7.2<br>
-foo-1.7.12<br>
-foo-1.8.2<br>
-foo-1.8.2a<br>
-foo-1.12<br>
-</code></td></tr></table></blockquote>
-        If the number starts with a zero, then it is considered to
-        be a fraction: 
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-foo-1.001<br>
-foo-1.002<br>
-foo-1.030<br>
-foo-1.04
-</code></td></tr></table></blockquote>
-      </dd>
-
-      <dd>
-        <strong>Incremental IndexOptions</strong>
-      </dd>
-
-      <dd>
-        Apache 1.3.3 introduced some significant changes in the
-        handling of <code class="directive">IndexOptions</code> directives. In
-        particular,<br>
-        <br>
-         
-
-        <ul>
-          <li>Multiple <code class="directive">IndexOptions</code> directives for a
-          single directory are now merged together. The result of
-          the example above will now be the equivalent of
-          <code>IndexOptions&nbsp;FancyIndexing&nbsp;ScanHTMLTitles</code>.</li>
-
-          <li>The addition of the incremental syntax
-          (<em>i.e.</em>, prefixing keywords with '+' or '-').</li>
-        </ul>
-        <br>
-         Whenever a '+' or '-' prefixed keyword is encountered, it
-        is applied to the current <code class="directive">IndexOptions</code>
-        settings (which may have been inherited from an upper-level
-        directory). However, whenever an unprefixed keyword is
-        processed, it clears all inherited options and any
-        incremental settings encountered so far. Consider the
-        following example: 
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>IndexOptions +ScanHTMLTitles -IconsAreLinks
-          FancyIndexing<br>
-           IndexOptions +SuppressSize<br>
-</code></td></tr></table></blockquote>
-        The net effect is equivalent to
-        <code>IndexOptions&nbsp;FancyIndexing&nbsp;+SuppressSize</code>,
-        because the unprefixed <code>FancyIndexing</code> discarded
-        the incremental keywords before it, but allowed them to
-        start accumulating again afterward.<br>
-        <br>
-         To unconditionally set the <code class="directive">IndexOptions</code> for a
-        particular directory, clearing the inherited settings,
-        specify keywords without any '+' or '-' prefixes.
-      </dd>
-    </dl>
-</usage><hr/><h2><a name="IndexOrderDefault">IndexOrderDefault</a> <a name="indexorderdefault">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sets the default ordering of the directory index</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>IndexOrderDefault
-Ascending|Descending Name|Date|Size|Description</syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>Indexes</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_autoindex</td></tr></table></td></tr></table><usage>
-    <p>The <code class="directive">IndexOrderDefault</code> directive is used
-    in combination with the <a href="#indexoptions:fancyindexing"><code>FancyIndexing</code></a>
-    index option. By default, fancyindexed directory listings are
-    displayed in ascending order by filename; the
-    <code class="directive">IndexOrderDefault</code> allows you to change this initial
-    display order.</p>
-
-    <p><code class="directive">IndexOrderDefault</code> takes two
-    arguments. The first must be either <code>Ascending</code> or
-    <code>Descending</code>, indicating the direction of the sort.
-    The second argument must be one of the keywords <code>Name</code>,
-    <code>Date</code>, <code>Size</code>, or <code>Description</code>,
-    and identifies the primary key. The secondary key is
-    <em>always</em> the ascending filename.</p>
-
-    <p>You can force a directory listing to only be displayed in a
-    particular order by combining this directive with the <a href="#indexoptions:suppresscolumnsorting"><code>SuppressColumnSorting</code></a>
-    index option; this will prevent the client from requesting the
-    directory listing in a different order.</p>
-</usage><hr/><h2><a name="ReadmeName">ReadmeName</a> <a name="readmename">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td/></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>ReadmeName <em>filename</em></syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>Indexes</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_autoindex</td></tr></table></td></tr></table><usage>
-    <p>The <code class="directive">ReadmeName</code> directive sets the name
-    of the file that will be appended to the end of the index
-    listing. <em>Filename</em> is the name of the file to include, and
-    is taken to be relative to the location being indexed.</p>
-
-    <p>See also <a href="#headername" class="directive"><code class="directive">HeaderName</code></a>, where this behavior
-    is described in greater detail.</p>
-</usage><hr/><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img alt="Index" src="../images/index.gif"/></a><a href="../"><img alt="Home" src="../images/home.gif"/></a></blockquote></body></html>
\ No newline at end of file
diff --git a/docs/manual/mod/mod_autoindex.xml b/docs/manual/mod/mod_autoindex.xml
deleted file mode 100644
index 3b6e443..0000000
--- a/docs/manual/mod/mod_autoindex.xml
+++ /dev/null
@@ -1,841 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.xsl"?>
-<modulesynopsis>
-<name>mod_autoindex</name>
-
-<description>Generates directory indexes,
-    automatically, similar to the Unix <em>ls</em> command or the
-    Win32 <em>dir</em> shell command</description>
-<status>Base</status>
-<sourcefile>mod_autoindex.c</sourcefile>
-<identifier>autoindex_module</identifier>
-
-<summary> 
-      <p>The index of a directory can come from one of two
-      sources:</p>
-
-    <ul>
-      <li>A file written by the user, typically called
-      <code>index.html</code>. The <directive
-      module="mod_dir">DirectoryIndex</directive> directive sets the
-      name of this file. This is controlled by
-      <module>mod_dir</module>.</li>
-
-      <li>Otherwise, a listing generated by the server. The other
-      directives control the format of this listing. The <directive
-      module="mod_autoindex">AddIcon</directive>, <directive
-      module="mod_autoindex">AddIconByEncoding</directive> and
-      <directive module="mod_autoindex">AddIconByType</directive> are
-      used to set a list of icons to display for various file types;
-      for each file listed, the first icon listed that matches the
-      file is displayed. These are controlled by
-      <module>mod_autoindex</module>.</li>
-    </ul>
-    <p>The two functions are separated so that you can completely
-    remove (or replace) automatic index generation should you want
-    to.</p> 
-
-    <p>Automatic index generation is enabled with using
-    <code>Options +Indexes</code>. See the 
-    <directive module="core">Options</directive> directive for
-    more details.</p>
-
-    <p>If the <directive module="autoindex">FancyIndexing</directive>
-    option is given with the <directive module="autoindex"
-    >IndexOptions</directive> directive,
-    the column headers are links that control the order of the
-    display. If you select a header link, the listing will be
-    regenerated, sorted by the values in that column. Selecting the
-    same header repeatedly toggles between ascending and descending
-    order. These column header links are suppressed with
-    <directive module="autoindex">IndexOptions</directive> directive's
-    <code>SuppressColumnSorting</code> option.</p>
-
-    <p>Note that when the display is sorted by "Size", it's the
-    <em>actual</em> size of the files that's used, not the
-    displayed value - so a 1010-byte file will always be displayed
-    before a 1011-byte file (if in ascending order) even though
-    they both are shown as "1K".</p>
-</summary>
-
-<section><title>Autoindex Request Query Arguments</title>
-
-    <p>Apache 2.0.23 reorganized the Query Arguments for Column
-    Sorting, and introduced an entire group of new query options.
-    To effectively eliminate all client control over the output,
-    the <code><a href="#indexoptions:ignoreclient">IndexOptions
-    IgnoreClient</a></code> option was introduced.</p>
-
-    <p>The column sorting headers themselves are self-referencing
-    hyperlinks that add the sort query options shown below. Any
-    option below may be added to any request for the directory
-    resource.</p>
-
-    <ul>
-      <li><code>C=N</code> sorts the directory by file name</li>
-
-      <li><code>C=M</code> sorts the directory by last-modified
-      date, then file name</li>
-
-      <li><code>C=S</code> sorts the directory by size, then file
-      name</li>
-
-      <li><code>C=D</code> sorts the directory by description, then
-      file name<br />
-       &nbsp;</li>
-
-      <li><code>O=A</code> sorts the listing in Ascending
-      Order</li>
-
-      <li><code>O=D</code> sorts the listing in Descending
-      Order<br />
-       &nbsp;</li>
-
-      <li><code>F=0</code> formats the listing as a simple list
-      (not FancyIndexed)</li>
-
-      <li><code>F=1</code> formats the listing as a FancyIndexed
-      list</li>
-
-      <li><code>F=2</code> formats the listing as an HTMLTable
-      FancyIndexed list<br />
-       &nbsp;</li>
-
-      <li><code>V=0</code> disables version sorting</li>
-
-      <li><code>V=1</code> enables version sorting<br />
-       &nbsp;</li>
-
-      <li><code>P=<em>pattern</em></code> lists only files matching
-      the given <em>pattern</em></li>
-    </ul>
-
-    <p>Note that the 'P'attern query argument is tested
-    <em>after</em> the usual IndexIgnore directives are processed,
-    and all file names are still subjected to the same criteria as
-    any other autoindex listing. The Query Arguments parser in
-    mod_autoindex will stop abruptly when an unrecognized option is
-    encountered. The Query Arguments must be well formed, according
-    to the table above.</p>
-
-    <p>The simple example below, which can be clipped and saved in
-    a header.html file, illustrates these query options. Note that
-    the unknown "X" argument, for the submit button, is listed last
-    to assure the arguments are all parsed before mod_autoindex
-    encounters the X=Go input.</p>
-
-<example>
-&lt;FORM METHOD="GET"&gt;<br />
-&nbsp;&nbsp;Show me a &lt;SELECT NAME="F"&gt;<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&lt;OPTION VALUE="0"&gt; Plain list <br />
-&nbsp;&nbsp;&nbsp;&nbsp;&lt;OPTION VALUE="1" SELECTED&gt; Fancy list<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&lt;OPTION VALUE="2"&gt; Table list<br />
-&nbsp;&nbsp;&lt;/SELECT&gt;<br />
-&nbsp;&nbsp;Sorted by &lt;SELECT NAME="C"&gt;<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&lt;OPTION VALUE="N" SELECTED&gt; Name<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&lt;OPTION VALUE="M"&gt; Date Modified<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&lt;OPTION VALUE="S"&gt; Size<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&lt;OPTION VALUE="D"&gt; Description<br />
-&nbsp;&nbsp;&lt;/SELECT&gt;<br />
-&nbsp;&nbsp;&lt;SELECT NAME="O"&gt;<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&lt;OPTION VALUE="A" SELECTED&gt; Ascending<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&lt;OPTION VALUE="D"&gt; Descending<br />
-&nbsp;&nbsp;&lt;/SELECT&gt;<br />
-&nbsp;&nbsp;&lt;SELECT NAME="V"&gt;<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&lt;OPTION VALUE="0" SELECTED&gt; in Normal order<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&lt;OPTION VALUE="1"&gt; in Version order<br />
-&nbsp;&nbsp;&lt;/SELECT&gt;<br />
-&nbsp;&nbsp;Matching &lt;INPUT TYPE="text" NAME="P" VALUE="*"&gt;<br />
-&nbsp;&nbsp;&lt;INPUT TYPE="submit" NAME="X" VALUE="Go"&gt;<br />
-&lt;/FORM&gt;
-</example>
-
-</section>
-
-<directivesynopsis>
-<name>AddAlt</name>
-<description>Alternate text to display for a file, instead of an
-icon selected by filename</description>
-<syntax>AddAlt <em>string file</em> [<em>file</em>] ...</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>Indexes</override>
-
-<usage>
-    <p><directive>AddAlt</directive> provides the alternate text to
-    display for a file, instead of an icon, for <code><a
-    href="#indexoptions:fancyindexing">FancyIndexing</a></code>.
-    <em>File</em> is a file extension, partial filename, wild-card
-    expression or full filename for files to describe.
-    <em>String</em> is enclosed in double quotes (<code>"</code>).
-    This alternate text is displayed if the client is image-incapable,
-    has image loading disabled, or fails to retrieve the icon.</p>
-
-    <p>Examples:</p>
-<example>
-    AddAlt "PDF" *.pdf<br />
-    AddAlt "Compressed" *.gz *.zip *.Z
-</example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AddAltByEncoding</name>
-<description>Alternate text to display for a file instead of an icon
-selected by MIME-encoding</description>
-<syntax>AddAltByEncoding <em>string MIME-encoding</em>
-[<em>MIME-encoding</em>] ...</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>Indexes</override>
-
-<usage>
-    <p><directive>AddAltByEncoding</directive> provides the alternate
-    text to display for a file, instead of an icon, for <code><a
-    href="#indexoptions:fancyindexing">FancyIndexing</a></code>.
-    <em>MIME-encoding</em> is a valid content-encoding, such as
-    <code>x-compress</code>. <em>String</em> is enclosed in double
-    quotes (<code>"</code>). This alternate text is displayed if the
-    client is image-incapable, has image loading disabled, or fails to
-    retrieve the icon.</p>
-
-    <p>Example:</p>
-<example>
-    AddAltByEncoding "gzip" x-gzip
-</example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AddAltByType</name>
-<description>Alternate text to display for a file, instead of an
-icon selected by MIME content-type</description>
-<syntax>AddAltByType <em>string
-    MIME-type</em> [<em>MIME-type</em>] ...</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>Indexes</override>
-
-<usage>
-    <p><directive>AddAltByType</directive> sets the alternate text to
-    display for a file, instead of an icon, for <code><a
-    href="#indexoptions:fancyindexing">FancyIndexing</a></code>.
-    <em>MIME-type</em> is a valid content-type, such as
-    <code>text/html</code>. <em>String</em> is enclosed in double
-    quotes (<code>"</code>). This alternate text is displayed if the
-    client is image-incapable, has image loading disabled, or fails to
-    retrieve the icon.</p>
-
-    <p>Example:</p>
-<example>
-    AddAltByType "TXT" text/plain
-</example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AddDescription</name>
-<syntax>AddDescription
-    <em>string file</em> [<em>file</em>] ...</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>Indexes</override>
-
-<usage>
-    <p>This sets the description to display for a file, for
-    <code><a
-    href="#indexoptions:fancyindexing">FancyIndexing</a></code>.
-    <em>File</em> is a file extension, partial filename, wild-card
-    expression or full filename for files to describe.
-    <em>String</em> is enclosed in double quotes (<code>"</code>).
-    Example:</p>
-
-<example>AddDescription "The planet Mars"
-      /web/pics/mars.gif</example>
-
-    <p>The typical, default description field is 23 bytes wide. 6
-    more bytes are added by the
-    <code>IndexOptions&nbsp;SuppressIcon</code> option, 7 bytes are
-    added by the <code>IndexOptions&nbsp;SuppressSize</code>
-    option, and 19 bytes are added by the
-    <code>IndexOptions&nbsp;SuppressLastModified</code> option.
-    Therefore, the widest default the description column is ever
-    assigned is 55 bytes.</p>
-
-    <p>See the <a
-    href="#indexoptions:descriptionwidth">DescriptionWidth</a>
-    <directive module="mod_autoindex">IndexOptions</directive> keyword
-    for details on overriding the size of this column, or allowing
-    descriptions of unlimited length.</p>
-
-<note><title>Caution</title> <p>Descriptive text defined with
-      <directive>AddDescription</directive> may contain HTML markup, such as
-      tags and character entities. If the width of the description
-      column should happen to truncate a tagged element (such as
-      cutting off the end of a bolded phrase), the results may
-      affect the rest of the directory listing.</p>
-</note>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AddIcon</name>
-<description>Icon to display for a file selected by name</description>
-<syntax>AddIcon <em>icon
-    name</em> [<em>name</em>] ...</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>Indexes</override>
-
-<usage>
-    <p>This sets the icon to display next to a file ending in
-    <em>name</em> for <code><a
-    href="#indexoptions:fancyindexing">FancyIndexing</a></code>.
-    <em>Icon</em> is either a (%-escaped) relative URL to the icon,
-    or of the format (<em>alttext</em>,<em>url</em>) where
-    <em>alttext</em> is the text tag given for an icon for
-    non-graphical browsers.</p>
-
-    <p><em>Name</em> is either ^^DIRECTORY^^ for directories,
-    ^^BLANKICON^^ for blank lines (to format the list correctly), a
-    file extension, a wildcard expression, a partial filename or a
-    complete filename. Examples:</p>
-
-<example>
-      AddIcon (IMG,/icons/image.xbm) .gif .jpg .xbm<br />
-       AddIcon /icons/dir.xbm ^^DIRECTORY^^<br />
-       AddIcon /icons/backup.xbm *~
-</example>
-    
-    <p><directive module="mod_autoindex">AddIconByType</directive>
-    should be used in preference to <directive>AddIcon</directive>,
-    when possible.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AddIconByEncoding</name>
-<description>Icon to display next to files selected by MIME 
-content-encoding</description>
-<syntax>AddIconByEncoding
-    <em>icon MIME-encoding</em> [<em>MIME-encoding</em>] ...</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>Indexes</override>
-
-<usage>
-    <p>This sets the icon to display next to files with <code><a
-    href="#indexoptions:fancyindexing">FancyIndexing</a></code>.
-    <em>Icon</em> is either a (%-escaped) relative URL to the icon,
-    or of the format (<em>alttext</em>,<em>url</em>) where
-    <em>alttext</em> is the text tag given for an icon for
-    non-graphical browsers.</p>
-
-    <p><em>Mime-encoding</em> is a wildcard expression matching
-    required the content-encoding. Examples:</p>
-
-<example>AddIconByEncoding /icons/compress.xbm x-compress</example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AddIconByType</name>
-<description>Icon to display next to files selected by MIME 
-content-type</description>
-<syntax>AddIconByType
-    <em>icon MIME-type</em> [<em>MIME-type</em>] ...</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>Indexes</override>
-
-<usage>
-    <p>This sets the icon to display next to files of type
-    <em>MIME-type</em> for <code><a
-    href="#indexoptions:fancyindexing">FancyIndexing</a></code>.
-    <em>Icon</em> is either a (%-escaped) relative URL to the icon,
-    or of the format (<em>alttext</em>,<em>url</em>) where
-    <em>alttext</em> is the text tag given for an icon for
-    non-graphical browsers.</p>
-
-    <p><em>Mime-type</em> is a wildcard expression matching
-    required the mime types. Examples:</p>
-
-<example>AddIconByType (IMG,/icons/image.xbm) image/*</example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>DefaultIcon</name>
-<description>Icon to display for files when no specific icon is
-configured</description>
-<syntax>DefaultIcon <em>url-path</em></syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>Indexes</override>
-
-<usage>
-    <p>The <directive>DefaultIcon</directive> directive sets the icon
-    to display for files when no specific icon is known, for <code><a
-    href="#indexoptions:fancyindexing">FancyIndexing</a></code>.
-    <em>Url</em> is a (%-escaped) relative URL to the icon.
-    Examples:</p>
-<example>DefaultIcon /icon/unknown.xbm</example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>HeaderName</name>
-<description>Name of the file that will be inserted at the top
-of the index listing</description>
-<syntax>HeaderName <em>filename</em></syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>Indexes</override>
-
-<usage>
-    <p>The <directive>HeaderName</directive> directive sets the name
-    of the file that will be inserted at the top of the index
-    listing. <em>Filename</em> is the name of the file to include.</p>
-
-<note>
-      <p>Both HeaderName and <directive
-      module="mod_autoindex">ReadmeName</directive> now treat
-      <em>Filename</em> as a URI path relative to the one used to
-      access the directory being indexed. <em>Filename</em> must
-      resolve to a document with a major content type of
-      "<code>text/*</code>" (<em>e.g.</em>, <code>text/html</code>,
-      <code>text/plain</code>, <em>etc.</em>). This means that
-      <em>filename</em> may refer to a CGI script if the script's
-      actual file type (as opposed to its output) is marked as
-      <code>text/html</code> such as with a directive like:</p>
-<example>
-    AddType text/html .cgi
-</example>
-      <p><a href="../content-negotiation.html">Content negotiation</a>
-      will be performed if the <code>MultiViews</code> <directive
-      module="core">Option</directive> is enabled. If
-      <em>filename</em> resolves to a static <code>text/html</code>
-      document (not a CGI script) and the <code>Includes</code>
-      <directive module="core">option</directive> is enabled, the file
-      will be processed for server-side includes (see the
-      <module>mod_include</module> documentation).</p>
-</note>
-
-    <p>If the file specified by <directive>HeaderName</directive> contains
-    the beginnings of an HTML document (&lt;HTML&gt;, &lt;HEAD&gt;,
-    etc) then you will probably want to set <a
-    href="#indexoptions:suppresshtmlpreamble"><code>IndexOptions
-    +SuppressHTMLPreamble</code></a>, so that these tags are not
-    repeated.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>IndexIgnore</name>
-<description>Adds to the list of files to hide when listing 
-a directory</description>
-<syntax>IndexIgnore <em>file</em> [<em>file</em>] ...</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>Indexes</override>
-
-<usage>
-    <p>The <directive>IndexIgnore</directive> directive adds to the
-    list of files to hide when listing a directory. <em>File</em> is a
-    file extension, partial filename, wildcard expression or full
-    filename for files to ignore. Multiple IndexIgnore directives add
-    to the list, rather than the replacing the list of ignored
-    files. By default, the list contains
-    `<code>.</code>'. Example:</p>
-
-<example>IndexIgnore README .htaccess *~</example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>IndexOptions</name>
-<description>Various configuration settings for directory 
-indexing</description>
-<syntax>IndexOptions  [+|-]<em>option</em> [[+|-]<em>option</em>] ...</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>Indexes</override>
-
-<usage>
-    <p>The <directive>IndexOptions</directive> directive specifies the
-    behavior of the directory indexing. <em>Option</em> can be one
-    of</p>
-
-    <dl>
-      <dt><a
-      name="indexoptions:descriptionwidth">DescriptionWidth=[<em>n</em>
-      | *] (<em>Apache 1.3.10 or 2.0.23 and later</em>)</a></dt>
-
-      <dd>The <code>DescriptionWidth</code> keyword allows you to
-      specify the width of the description column in
-      characters.</dd>
-
-      <dd><code>-DescriptionWidth</code> (or unset) allows
-      mod_autoindex to calculate the best width.</dd>
-
-      <dd><code>DescriptionWidth=n</code> fixes the column width to
-      n bytes wide.</dd>
-
-      <dd><code>DescriptionWidth=*</code> grows the column to the
-      width necessary to accommodate the longest description
-      string.</dd>
-
-      <dd><strong>See the section on <directive
-      module="mod_autoindex">AddDescription</directive> for dangers
-      inherent in truncating descriptions.</strong></dd>
-
-      <dt><a 
-      name="indexoptions:fancyindexing">FancyIndexing</a></dt>
-
-      <dd>
-      This turns on fancy indexing of directories.</dd>
-
-      <dt><a 
-      name="indexoptions:foldersfirst">FoldersFirst (<em>Apache
-      1.3.10 or 2.0.23 and later</em>)</a></dt>
-
-      <dd>If this option is enabled, subdirectory listings will
-      <em>always</em> appear first, followed by normal files in the
-      directory. The listing is basically broken into two
-      components, the files and the subdirectories, and each is
-      sorted separately and then displayed subdirectories-first.
-      For instance, if the sort order is descending by name, and
-      <code>FoldersFirst</code> is enabled, subdirectory
-      <code>Zed</code> will be listed before subdirectory
-      <code>Beta</code>, which will be listed before normal files
-      <code>Gamma</code> and <code>Alpha</code>. <strong>This option
-      only has an effect if <a
-      href="#indexoptions:fancyindexing"><code>FancyIndexing</code></a>
-      is also enabled.</strong></dd>
-
-      <dt><a 
-      name="indexoptions:htmltable">HTMLTable</a> <em>(Experimental,
-      Apache 2.0.23 and later)</em></dt>
-
-      <dd>
-      This experimental option with FancyIndexing constructs a
-      simple table for the fancy directory listing. Note this will
-      confuse older browsers. It is particularly necessary if file
-      names or description text will alternate between
-      left-to-right and right-to-left reading order, as can happen
-      on WinNT or other utf-8 enabled platforms.</dd>
-
-      <dt><a 
-      name="indexoptions:iconsarelinks">IconsAreLinks</a></dt>
-
-      <dd>
-      This makes the icons part of the anchor for the filename, for
-      fancy indexing.</dd>
-
-      <dt><a 
-      name="indexoptions:iconheight">IconHeight[=pixels]
-      (<em>Apache 1.3 and later</em>)</a></dt>
-
-      <dd>
-      Presence of this option, when used with IconWidth, will cause
-      the server to include <code>HEIGHT</code> and
-      <code>WIDTH</code> attributes in the <code>IMG</code> tag for
-      the file icon. This allows browser to precalculate the page
-      layout without having to wait until all the images have been
-      loaded. If no value is given for the option, it defaults to
-      the standard height of the icons supplied with the Apache
-      software.</dd>
-
-      <dt><a 
-      name="indexoptions:iconwidth">IconWidth[=pixels] (<em>Apache
-      1.3 and later</em>)</a></dt>
-
-      <dd>
-      Presence of this option, when used with IconHeight, will
-      cause the server to include <code>HEIGHT</code> and
-      <code>WIDTH</code> attributes in the <code>IMG</code> tag for
-      the file icon. This allows browser to precalculate the page
-      layout without having to wait until all the images have been
-      loaded. If no value is given for the option, it defaults to
-      the standard width of the icons supplied with the Apache
-      software.</dd>
-
-      <dt><a 
-      name="indexoptions:ignoreclient">IgnoreClient</a></dt>
-
-      <dd>
-      This option causes mod_autoindex to ignore all query
-      variables from the client, including sort order (implies
-      <code><a
-      href="#indexoptions:suppresscolumnsorting">SuppressColumnSorting</a></code>.)</dd>
-
-      <dt><a 
-      name="indexoptions:namewidth">NameWidth=[<em>n</em> | *]
-      (<em>Apache 1.3.2 and later</em>)</a></dt>
-
-      <dd>The NameWidth keyword allows you to specify the width of
-      the filename column in bytes.</dd>
-
-      <dd><code>-NameWidth</code> (or unset) allows mod_autoindex
-      to calculate the best width.</dd>
-
-      <dd><code>NameWidth=n</code> fixes the column width to n
-      bytes wide.</dd>
-
-      <dd><code>NameWidth=*</code> grows the column to the
-      necessary width.</dd>
-
-      <dt><a       name="indexoptions:scanhtmltitles">ScanHTMLTitles</a></dt>
-
-      <dd>
-      This enables the extraction of the title from HTML documents
-      for fancy indexing. If the file does not have a description
-      given by <a href="#adddescription">AddDescription</a> then
-      httpd will read the document for the value of the TITLE tag.
-      This is CPU and disk intensive.</dd>
-
-      <dt><a 
-      name="indexoptions:suppresscolumnsorting">SuppressColumnSorting</a>
-      (<em>Apache 1.3 and later</em>)</dt>
-
-      <dd>
-      If specified, Apache will not make the column headings in a
-      FancyIndexed directory listing into links for sorting. The
-      default behavior is for them to be links; selecting the
-      column heading will sort the directory listing by the values
-      in that column. <strong>Prior to Apache 2.0.23, this also
-      disabled parsing the Query Arguments for the sort
-      string.</strong> That behavior is now controlled by <a
-      href="#indexoptions:ignoreclient">IndexOptions
-      IgnoreClient</a> in Apache 2.0.23.</dd>
-
-      <dt><a 
-      name="indexoptions:suppressdescription">SuppressDescription</a></dt>
-
-      <dd>
-      This will suppress the file description in fancy indexing
-      listings. By default, no file descriptions are defined, and
-      so the use of this option will regain 23 characters of screen
-      space to use for something else. See <a
-      href="#adddescription"><code>AddDescription</code></a> for
-      information about setting the file description. See also the
-      <a
-      href="#indexoptions:descriptionwidth"><code>DescriptionWidth</code></a>
-      index option to limit the size of the description
-      column.</dd>
-
-      <dt><a 
-      name="indexoptions:suppresshtmlpreamble">SuppressHTMLPreamble</a>
-      (<em>Apache 1.3 and later</em>)</dt>
-
-      <dd>
-      If the directory actually contains a file specified by the
-      <directive module="mod_autoindex">HeaderName</directive>
-      directive, the module usually includes the contents of the file
-      after a standard HTML preamble (&lt;HTML&gt;, &lt;HEAD&gt;,
-      <em>et cetera</em>). The SuppressHTMLPreamble option disables
-      this behaviour, causing the module to start the display with the
-      header file contents. The header file must contain appropriate
-      HTML instructions in this case. If there is no header file, the
-      preamble is generated as usual.</dd>
-
-      <dt><a 
-      name="indexoptions:suppressicon">SuppressIcon</a> (<em>Apache
-      2.0.23 and later</em>)</dt>
-
-      <dd>
-      This will suppress the icon in fancy indexing listings.
-      Combining both <em>SuppressIcon</em> and
-      <em>SuppressRules</em> yields proper HTML 3.2 output, which
-      by the final specification prohibits IMG and HR tags from the
-      PRE block (used to format FancyIndexed listings.)</dd>
-
-      <dt><a 
-      name="indexoptions:suppresslastmodified">SuppressLastModified</a></dt>
-
-      <dd>
-      This will suppress the display of the last modification date,
-      in fancy indexing listings.</dd>
-
-      <dt><a 
-      name="indexoptions:suppressrules">SuppressRules</a>
-      (<em>Apache 2.0.23 and later</em>)</dt>
-
-      <dd>
-      This will suppress the horizontal rule lines (HR tags) in
-      directory listings. Combining both <em>SuppressIcon</em> and
-      <em>SuppressRules</em> yeilds proper HTML 3.2 output, which
-      by the final specification prohibits IMG and HR tags from the
-      PRE block (used to format FancyIndexed listings.)</dd>
-
-      <dt><a 
-      name="indexoptions:suppresssize">SuppressSize</a></dt>
-
-      <dd>
-      This will suppress the file size in fancy indexing
-      listings.</dd>
-
-      <dt><a 
-      name="indexoptions:trackmodified">TrackModified (<em>Apache
-      1.3.15 or 2.0.23 and later</em>)</a></dt>
-
-      <dd>
-      This returns the Last-Modified and ETag values for the listed
-      directory in the HTTP header. It is only valid if the
-      operating system and file system return appropriate stat()
-      results. Some Unix systems do so, as do OS2's JFS and Win32's
-      NTFS volumes. OS2 and Win32 FAT volumes, for example, do not.
-      Once this feature is enabled, the client or proxy can track
-      changes to the list of files when they perform a HEAD
-      request. Note some operating systems correctly track new and
-      removed files, but do not track changes for sizes or dates of
-      the files within the directory. <strong>Changes to the size
-      or date stamp of an existing file will not update the
-      Last-Modified header on all Unix platforms.</strong> If this
-      is a concern, leave this option disabled.</dd>
-
-      <dt><a 
-      name="indexoptions:versionsort">VersionSort (<em>Apache 2.0a3
-      and later</em>)</a></dt>
-
-      <dd>
-        The VersionSort keyword causes files containing version
-        numbers to sort in a natural way. Strings are sorted as
-        usual, except that substrings of digits in the name and
-        description are compared according to their numeric value.
-        For example: 
-
-<example>
-foo-1.7<br />
-foo-1.7.2<br />
-foo-1.7.12<br />
-foo-1.8.2<br />
-foo-1.8.2a<br />
-foo-1.12<br />
-</example>
-        If the number starts with a zero, then it is considered to
-        be a fraction: 
-
-<example>
-foo-1.001<br />
-foo-1.002<br />
-foo-1.030<br />
-foo-1.04
-</example>
-      </dd>
-
-      <dd>
-        <strong>Incremental IndexOptions</strong>
-      </dd>
-
-      <dd>
-        Apache 1.3.3 introduced some significant changes in the
-        handling of <directive>IndexOptions</directive> directives. In
-        particular,<br />
-        <br />
-         
-
-        <ul>
-          <li>Multiple <directive>IndexOptions</directive> directives for a
-          single directory are now merged together. The result of
-          the example above will now be the equivalent of
-          <code>IndexOptions&nbsp;FancyIndexing&nbsp;ScanHTMLTitles</code>.</li>
-
-          <li>The addition of the incremental syntax
-          (<em>i.e.</em>, prefixing keywords with '+' or '-').</li>
-        </ul>
-        <br />
-         Whenever a '+' or '-' prefixed keyword is encountered, it
-        is applied to the current <directive>IndexOptions</directive>
-        settings (which may have been inherited from an upper-level
-        directory). However, whenever an unprefixed keyword is
-        processed, it clears all inherited options and any
-        incremental settings encountered so far. Consider the
-        following example: 
-
-<example>IndexOptions +ScanHTMLTitles -IconsAreLinks
-          FancyIndexing<br />
-           IndexOptions +SuppressSize<br />
-</example>
-        The net effect is equivalent to
-        <code>IndexOptions&nbsp;FancyIndexing&nbsp;+SuppressSize</code>,
-        because the unprefixed <code>FancyIndexing</code> discarded
-        the incremental keywords before it, but allowed them to
-        start accumulating again afterward.<br />
-        <br />
-         To unconditionally set the <directive>IndexOptions</directive> for a
-        particular directory, clearing the inherited settings,
-        specify keywords without any '+' or '-' prefixes.
-      </dd>
-    </dl>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>IndexOrderDefault</name>
-<description>Sets the default ordering of the directory index</description>
-<syntax>IndexOrderDefault
-Ascending|Descending Name|Date|Size|Description</syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>Indexes</override>
-
-<usage>
-    <p>The <directive>IndexOrderDefault</directive> directive is used
-    in combination with the <a
-    href="#indexoptions:fancyindexing"><code>FancyIndexing</code></a>
-    index option. By default, fancyindexed directory listings are
-    displayed in ascending order by filename; the
-    <directive>IndexOrderDefault</directive> allows you to change this initial
-    display order.</p>
-
-    <p><directive>IndexOrderDefault</directive> takes two
-    arguments. The first must be either <code>Ascending</code> or
-    <code>Descending</code>, indicating the direction of the sort.
-    The second argument must be one of the keywords <code>Name</code>,
-    <code>Date</code>, <code>Size</code>, or <code>Description</code>,
-    and identifies the primary key. The secondary key is
-    <em>always</em> the ascending filename.</p>
-
-    <p>You can force a directory listing to only be displayed in a
-    particular order by combining this directive with the <a
-    href="#indexoptions:suppresscolumnsorting"><code>SuppressColumnSorting</code></a>
-    index option; this will prevent the client from requesting the
-    directory listing in a different order.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ReadmeName</name>
-<syntax>ReadmeName <em>filename</em></syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>Indexes</override>
-
-<usage>
-    <p>The <directive>ReadmeName</directive> directive sets the name
-    of the file that will be appended to the end of the index
-    listing. <em>Filename</em> is the name of the file to include, and
-    is taken to be relative to the location being indexed.</p>
-
-    <p>See also <directive
-    module="mod_autoindex">HeaderName</directive>, where this behavior
-    is described in greater detail.</p>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
\ No newline at end of file
diff --git a/docs/manual/mod/mod_cern_meta.html b/docs/manual/mod/mod_cern_meta.html
deleted file mode 100644
index 9fef4c3..0000000
--- a/docs/manual/mod/mod_cern_meta.html
+++ /dev/null
@@ -1,36 +0,0 @@
-<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-     This file is generated from xml source: DO NOT EDIT
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
---><title>mod_cern_meta - Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img alt="[APACHE DOCUMENTATION]" src="../images/sub.gif"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module mod_cern_meta</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td><description>CERN httpd metafile semantics</description></td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="module-dict.html#ModuleIdentifier" class="help">Module&nbsp;Identifier:</a></td><td>cern_meta_module</td></tr></table></td></tr></table><h2>Summary</h2><summary>
-    
-    <p>Emulate the CERN HTTPD Meta file semantics. Meta files are HTTP
-    headers that can be output in addition to the normal range of
-    headers for each file accessed. They appear rather like the
-    Apache .asis files, and are able to provide a crude way of
-    influencing the Expires: header, as well as providing other
-    curiosities. There are many ways to manage meta information,
-    this one was chosen because there is already a large number of
-    CERN users who can exploit this module.</p>
-
-    <p>More information on the <a href="http://www.w3.org/pub/WWW/Daemon/User/Config/General.html#MetaDir">
-    CERN metafile semantics</a> is available.</p>
-</summary><h2>Directives</h2><ul><li><a href="#metadir">MetaDir</a></li><li><a href="#metafiles">MetaFiles</a></li><li><a href="#metasuffix">MetaSuffix</a></li></ul><hr/><h2><a name="MetaDir">MetaDir</a> <a name="metadir">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Name of the directory to find CERN-style meta information
-files</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>MetaDir <em>directory</em></syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>MetaDir .web</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>directory</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_cern_meta</td></tr></table></td></tr></table><usage>
-    <p>Specifies the name of the directory in which Apache can find
-    meta information files. The directory is usually a 'hidden'
-    subdirectory of the directory that contains the file being
-    accessed. Set to "<code>.</code>" to look in the same directory
-    as the file.</p>
-</usage><hr/><h2><a name="MetaFiles">MetaFiles</a> <a name="metafiles">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Activates CERN meta-file processing</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>MetaFiles on|off</syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>MetaFiles off</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>directory</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_cern_meta</td></tr></table></td></tr></table><usage>
-    <p>Turns on/off Meta file processing on a per-directory basis.</p>
-</usage><hr/><h2><a name="MetaSuffix">MetaSuffix</a> <a name="metasuffix">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>File name suffix for the file containg CERN-style
-meta information</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>MetaSuffix <em>suffix</em></syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>MetaSuffix .meta</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>directory</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_cern_meta</td></tr></table></td></tr></table><usage>
-    <p>Specifies the file name suffix for the file containing the
-    meta information. For example, the default values for the two
-    directives will cause a request to
-    <code>DOCUMENT_ROOT/somedir/index.html</code> to look in
-    <code>DOCUMENT_ROOT/somedir/.web/index.html.meta</code> and
-    will use its contents to generate additional MIME header
-    information.</p>
-</usage><hr/><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img alt="Index" src="../images/index.gif"/></a><a href="../"><img alt="Home" src="../images/home.gif"/></a></blockquote></body></html>
\ No newline at end of file
diff --git a/docs/manual/mod/mod_cern_meta.xml b/docs/manual/mod/mod_cern_meta.xml
deleted file mode 100644
index f99785b..0000000
--- a/docs/manual/mod/mod_cern_meta.xml
+++ /dev/null
@@ -1,76 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.xsl"?>
-<modulesynopsis>
-
-<name>mod_cern_meta</name>
-<description>CERN httpd metafile semantics</description>
-<status>Extension</status>
-<sourcefile>mod_cern_meta.c</sourcefile>
-<identifier>cern_meta_module</identifier>
-
-<summary>
-    <!-- XXX: Should mention other possibilities in Apache: mod_header -->
-    <p>Emulate the CERN HTTPD Meta file semantics. Meta files are HTTP
-    headers that can be output in addition to the normal range of
-    headers for each file accessed. They appear rather like the
-    Apache .asis files, and are able to provide a crude way of
-    influencing the Expires: header, as well as providing other
-    curiosities. There are many ways to manage meta information,
-    this one was chosen because there is already a large number of
-    CERN users who can exploit this module.</p>
-
-    <p>More information on the <a
-    href="http://www.w3.org/pub/WWW/Daemon/User/Config/General.html#MetaDir">
-    CERN metafile semantics</a> is available.</p>
-</summary>
-
-<directivesynopsis>
-<name>MetaFiles</name>
-<description>Activates CERN meta-file processing</description>
-<syntax>MetaFiles on|off</syntax>
-<default>MetaFiles off</default>
-<contextlist><context>directory</context></contextlist>
-
-<usage>
-    <p>Turns on/off Meta file processing on a per-directory basis.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>MetaDir</name>
-<description>Name of the directory to find CERN-style meta information
-files</description>
-<syntax>MetaDir <em>directory</em></syntax>
-<default>MetaDir .web</default>
-<contextlist><context>directory</context></contextlist>
-
-<usage>
-    <p>Specifies the name of the directory in which Apache can find
-    meta information files. The directory is usually a 'hidden'
-    subdirectory of the directory that contains the file being
-    accessed. Set to "<code>.</code>" to look in the same directory
-    as the file.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>MetaSuffix</name>
-<description>File name suffix for the file containg CERN-style
-meta information</description>
-<syntax>MetaSuffix <em>suffix</em></syntax>
-<default>MetaSuffix .meta</default>
-<contextlist><context>directory</context></contextlist>
-
-<usage>
-    <p>Specifies the file name suffix for the file containing the
-    meta information. For example, the default values for the two
-    directives will cause a request to
-    <code>DOCUMENT_ROOT/somedir/index.html</code> to look in
-    <code>DOCUMENT_ROOT/somedir/.web/index.html.meta</code> and
-    will use its contents to generate additional MIME header
-    information.</p>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_cgi.html b/docs/manual/mod/mod_cgi.html
deleted file mode 100644
index 8614578..0000000
--- a/docs/manual/mod/mod_cgi.html
+++ /dev/null
@@ -1,146 +0,0 @@
-<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-     This file is generated from xml source: DO NOT EDIT
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
---><title>mod_cgi - Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img alt="[APACHE DOCUMENTATION]" src="../images/sub.gif"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module mod_cgi</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td><description>Execution of CGI scripts</description></td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="module-dict.html#ModuleIdentifier" class="help">Module&nbsp;Identifier:</a></td><td>cgi_module</td></tr></table></td></tr></table><h2>Summary</h2><summary>
-    
-    
-    
-
-    <p>Any file that has the mime type
-    <code>application/x-httpd-cgi</code> or handler
-    <code>cgi-script</code> (Apache 1.1 or later) will be treated
-    as a CGI script, and run by the server, with its output being
-    returned to the client. Files acquire this type either by
-    having a name containing an extension defined by the 
-    <a href="mod_mime.html#addtype" class="directive"><code class="directive">AddType</code></a> directive, or by being
-    in a <a href="mod_alias.html#scriptalias" class="directive"><code class="directive">ScriptAlias</code></a>
-    directory.</p>
-
-    <p>When the server invokes a CGI script, it will add a variable
-    called <code>DOCUMENT_ROOT</code> to the environment. This
-    variable will contain the value of the
-    <a href="core.html.html#documentroot" class="directive"><code class="directive">DocumentRoot</code></a> configuration
-    variable.</p>
-
-    <p>For an introduction to using CGI scripts with Apache, see
-    our tutorial on <a href="../howto/cgi.html">Dynamic Content
-    With CGI</a>.</p>
-
-    <p>When using a multi-threaded MPM under unix, the module 
-    <code><a href="mod_cgid.html">mod_cgid</a></code> should be used in place of
-    this module. At the user level, the two modules are essentially
-    identical.</p>
-</summary><p><strong>See also </strong></p><ul><li><a href="core.html#options" class="directive"><code class="directive">Options</code></a></li><li><a href="mod_alias.html#scriptalias" class="directive"><code class="directive">ScriptAlias</code></a></li><li><a href="mod_mime.html#addhandler" class="directive"><code class="directive">AddHandler</code></a></li></ul><h2>Directives</h2><ul><li><a href="#scriptlog">ScriptLog</a></li><li><a href="#scriptlogbuffer">ScriptLogBuffer</a></li><li><a href="#scriptloglength">ScriptLogLength</a></li></ul><h2>CGI Environment variables</h2>
-    <p>The server will set the CGI environment variables as described
-    in the <a href="http://hoohoo.ncsa.uiuc.edu/cgi/">CGI
-    specification</a>, with the following provisions:</p>
-
-    <dl>
-      <dt>PATH_INFO</dt>
-
-      <dd>This will not be available if the <a href="core.html#acceptpathinfo" class="directive"><code class="directive">AcceptPathInfo</code></a> directive is explicitly set to
-      <code>off</code>.  The default behavior, if AcceptPathInfo is
-      not given, is that mod_cgi will accept path info (trailing
-      /more/path/info following the script filename in the URI), while
-      the core server will return a 404 NOT FOUND error for requests
-      with additional path info.  Omitting the AcceptPathInfo
-      directive has the same effect as setting it <code>on</code> for
-      mod_cgi requests.</dd>
-
-      <dt>REMOTE_HOST</dt>
-
-      <dd>This will only be set if <a href="core.html#hostnamelookups" class="directive"><code class="directive">HostnameLookups</code></a> is set to <code>on</code> (it
-      is off by default), and if a reverse DNS lookup of the accessing
-      host's address indeed finds a host name.</dd>
-
-      <dt>REMOTE_IDENT</dt>
-
-      <dd>This will only be set if <a href="core.html#identitycheck" class="directive"><code class="directive">IdentityCheck</code></a> is set to
-      <code>on</code> and the accessing host supports the ident
-      protocol. Note that the contents of this variable cannot be
-      relied upon because it can easily be faked, and if there is a
-      proxy between the client and the server, it is usually
-      totally useless.</dd>
-
-      <dt>REMOTE_USER</dt>
-
-      <dd>This will only be set if the CGI script is subject to
-      authentication.</dd>
-    </dl>
-<h2><a name="cgi_debug">CGI Debugging</a></h2>
-    <p>Debugging CGI scripts has traditionally been difficult, mainly
-    because it has not been possible to study the output (standard
-    output and error) for scripts which are failing to run
-    properly. These directives, included in Apache 1.2 and later,
-    provide more detailed logging of errors when they occur. </p>
-
-<h3>CGI Logfile Format</h3>
-    <p>When configured, the CGI error log logs any CGI which does not
-    execute properly. Each CGI script which fails to operate causes
-    several lines of information to be logged. The first two lines
-    are always of the format:</p>
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-  %% [<em>time</em>] <em>request-line</em><br>
-  %% <em>HTTP-status</em> <em>CGI-script-filename</em>
-</code></td></tr></table></blockquote>
-    <p>If the error is that CGI script cannot be run, the log file
-    will contain an extra two lines:</p>
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-  %%error<br>
-  <em>error-message</em>
-</code></td></tr></table></blockquote>
-    <p>Alternatively, if the error is the result of the script
-    returning incorrect header information (often due to a bug in
-    the script), the following information is logged: </p>
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-  %request<br>
-  <em>All HTTP request headers received</em><br>
-  <em>POST or PUT entity (if any)</em><br>
-  %response<br>
-  <em>All headers output by the CGI script</em><br>
-  %stdout<br>
-  <em>CGI standard output</em><br>
-  %stderr<br>
-  <em>CGI standard error</em><br>
-</code></td></tr></table></blockquote>
-    <p>(The %stdout and %stderr parts may be missing if the script did
-    not output anything on standard output or standard error). </p>
-
-<hr/><h2><a name="ScriptLog">ScriptLog</a> <a name="scriptlog">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Location of the CGI script error logfile</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>ScriptLog <em>file-path</em></syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td><code><a href="mod_cgi.html">mod_cgi</a></code>, <code><a href="mod_cgid.html">mod_cgid</a></code></td></tr></table></td></tr></table><usage>
-    <p>The <code class="directive">ScriptLog</code> directive sets the CGI
-    script error logfile. If no ScriptLog is given, no error log is
-    created. If given, any CGI errors are logged into the filename
-    given as argument. If this is a relative file or path it is taken
-    relative to the server root.</p>
-
-    <p>This log will be opened as the user the child processes run
-    as, ie. the user specified in the main <a href="mpm_common.html#user" class="directive"><code class="directive">User</code></a> directive. This means that
-    either the directory the script log is in needs to be writable
-    by that user or the file needs to be manually created and set
-    to be writable by that user. If you place the script log in
-    your main logs directory, do <strong>NOT</strong> change the
-    directory permissions to make it writable by the user the child
-    processes run as.</p>
-
-    <p>Note that script logging is meant to be a debugging feature
-    when writing CGI scripts, and is not meant to be activated
-    continuously on running servers. It is not optimized for speed
-    or efficiency, and may have security problems if used in a
-    manner other than that for which it was designed.</p>
-</usage><hr/><h2><a name="ScriptLogBuffer">ScriptLogBuffer</a> <a name="scriptlogbuffer">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Maximum amount of PUT or POST requests that will be recorded
-in the scriptlog</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>ScriptLogBuffer <em>bytes</em></syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>ScriptLogBuffer 1024</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td><code><a href="mod_cgi.html">mod_cgi</a></code>, <code><a href="mod_cgid.html">mod_cgid</a></code></td></tr></table></td></tr></table><usage>
-    <p>The size of any PUT or POST entity body that is logged to
-    the file is limited, to prevent the log file growing too big
-    too quickly if large bodies are being received. By default, up
-    to 1024 bytes are logged, but this can be changed with this
-    directive.</p>
-</usage><hr/><h2><a name="ScriptLogLength">ScriptLogLength</a> <a name="scriptloglength">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Size limit of the CGI script logfile</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>ScriptLogLength <em>bytes</em></syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>ScriptLogLength 10385760</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td><code><a href="mod_cgi.html">mod_cgi</a></code>, <code><a href="mod_cgid.html">mod_cgid</a></code></td></tr></table></td></tr></table><usage>
-    <p><code class="directive">ScriptLogLength</code> can be used to limit the
-    size of the CGI script logfile. Since the logfile logs a lot of
-    information per CGI error (all request headers, all script output)
-    it can grow to be a big file. To prevent problems due to unbounded
-    growth, this directive can be used to set an maximum file-size for
-    the CGI logfile. If the file exceeds this size, no more
-    information will be written to it.</p>
-</usage><hr/><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img alt="Index" src="../images/index.gif"/></a><a href="../"><img alt="Home" src="../images/home.gif"/></a></blockquote></body></html>
\ No newline at end of file
diff --git a/docs/manual/mod/mod_cgi.xml b/docs/manual/mod/mod_cgi.xml
deleted file mode 100644
index 9e1c4cf..0000000
--- a/docs/manual/mod/mod_cgi.xml
+++ /dev/null
@@ -1,202 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.xsl"?>
-<modulesynopsis>
-
-<name>mod_cgi</name>
-<description>Execution of CGI scripts</description>
-<status>Base</status>
-<sourcefile>mod_cgi.c</sourcefile>
-<identifier>cgi_module</identifier>
-
-<summary>
-    <!-- XXX: Should have references to CGI definition/RFC -->
-    <!-- XXX: Should mention Options ExecCGI  -->
-    <!-- XXX: Should mention AcceptPathInfo   -->
-
-    <p>Any file that has the mime type
-    <code>application/x-httpd-cgi</code> or handler
-    <code>cgi-script</code> (Apache 1.1 or later) will be treated
-    as a CGI script, and run by the server, with its output being
-    returned to the client. Files acquire this type either by
-    having a name containing an extension defined by the 
-    <directive module="mod_mime">AddType</directive> directive, or by being
-    in a <directive module="mod_alias">ScriptAlias</directive>
-    directory.</p>
-
-    <p>When the server invokes a CGI script, it will add a variable
-    called <code>DOCUMENT_ROOT</code> to the environment. This
-    variable will contain the value of the
-    <directive module="core.html">DocumentRoot</directive> configuration
-    variable.</p>
-
-    <p>For an introduction to using CGI scripts with Apache, see
-    our tutorial on <a href="../howto/cgi.html">Dynamic Content
-    With CGI</a>.</p>
-
-    <p>When using a multi-threaded MPM under unix, the module 
-    <module>mod_cgid</module> should be used in place of
-    this module. At the user level, the two modules are essentially
-    identical.</p>
-</summary>
-
-<seealso><directive module="core">Options</directive></seealso>
-<seealso><directive module="mod_alias">ScriptAlias</directive></seealso>
-<seealso><directive module="mod_mime">AddHandler</directive></seealso>
-
-<section><title>CGI Environment variables</title>
-    <p>The server will set the CGI environment variables as described
-    in the <a href="http://hoohoo.ncsa.uiuc.edu/cgi/">CGI
-    specification</a>, with the following provisions:</p>
-
-    <dl>
-      <dt>PATH_INFO</dt>
-
-      <dd>This will not be available if the <directive module="core"
-      >AcceptPathInfo</directive> directive is explicitly set to
-      <code>off</code>.  The default behavior, if AcceptPathInfo is
-      not given, is that mod_cgi will accept path info (trailing
-      /more/path/info following the script filename in the URI), while
-      the core server will return a 404 NOT FOUND error for requests
-      with additional path info.  Omitting the AcceptPathInfo
-      directive has the same effect as setting it <code>on</code> for
-      mod_cgi requests.</dd>
-
-      <dt>REMOTE_HOST</dt>
-
-      <dd>This will only be set if <directive module="core"
-      >HostnameLookups</directive> is set to <code>on</code> (it
-      is off by default), and if a reverse DNS lookup of the accessing
-      host's address indeed finds a host name.</dd>
-
-      <dt>REMOTE_IDENT</dt>
-
-      <dd>This will only be set if <directive module="core"
-      >IdentityCheck</directive> is set to
-      <code>on</code> and the accessing host supports the ident
-      protocol. Note that the contents of this variable cannot be
-      relied upon because it can easily be faked, and if there is a
-      proxy between the client and the server, it is usually
-      totally useless.</dd>
-
-      <dt>REMOTE_USER</dt>
-
-      <dd>This will only be set if the CGI script is subject to
-      authentication.</dd>
-    </dl>
-</section>
-
-<section id="cgi_debug"><title>CGI Debugging</title>
-    <p>Debugging CGI scripts has traditionally been difficult, mainly
-    because it has not been possible to study the output (standard
-    output and error) for scripts which are failing to run
-    properly. These directives, included in Apache 1.2 and later,
-    provide more detailed logging of errors when they occur. </p>
-
-<section><title>CGI Logfile Format</title>
-    <p>When configured, the CGI error log logs any CGI which does not
-    execute properly. Each CGI script which fails to operate causes
-    several lines of information to be logged. The first two lines
-    are always of the format:</p>
-<example>
-  %% [<em>time</em>] <em>request-line</em><br />
-  %% <em>HTTP-status</em> <em>CGI-script-filename</em>
-</example>
-    <p>If the error is that CGI script cannot be run, the log file
-    will contain an extra two lines:</p>
-<example>
-  %%error<br />
-  <em>error-message</em>
-</example>
-    <p>Alternatively, if the error is the result of the script
-    returning incorrect header information (often due to a bug in
-    the script), the following information is logged: </p>
-<example>
-  %request<br />
-  <em>All HTTP request headers received</em><br />
-  <em>POST or PUT entity (if any)</em><br />
-  %response<br />
-  <em>All headers output by the CGI script</em><br />
-  %stdout<br />
-  <em>CGI standard output</em><br />
-  %stderr<br />
-  <em>CGI standard error</em><br />
-</example>
-    <p>(The %stdout and %stderr parts may be missing if the script did
-    not output anything on standard output or standard error). </p>
-</section>
-</section>
-
-<directivesynopsis>
-<name>ScriptLog</name>
-<description>Location of the CGI script error logfile</description>
-<syntax>ScriptLog <em>file-path</em></syntax>
-<contextlist><context>server config</context></contextlist>
-<modulelist><module>mod_cgi</module><module>mod_cgid</module>
-</modulelist>
-
-<usage>
-    <p>The <directive>ScriptLog</directive> directive sets the CGI
-    script error logfile. If no ScriptLog is given, no error log is
-    created. If given, any CGI errors are logged into the filename
-    given as argument. If this is a relative file or path it is taken
-    relative to the server root.</p>
-
-    <p>This log will be opened as the user the child processes run
-    as, ie. the user specified in the main <directive module="mpm_common"
-    >User</directive> directive. This means that
-    either the directory the script log is in needs to be writable
-    by that user or the file needs to be manually created and set
-    to be writable by that user. If you place the script log in
-    your main logs directory, do <strong>NOT</strong> change the
-    directory permissions to make it writable by the user the child
-    processes run as.</p>
-
-    <p>Note that script logging is meant to be a debugging feature
-    when writing CGI scripts, and is not meant to be activated
-    continuously on running servers. It is not optimized for speed
-    or efficiency, and may have security problems if used in a
-    manner other than that for which it was designed.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ScriptLogLength</name>
-<description>Size limit of the CGI script logfile</description>
-<syntax>ScriptLogLength <em>bytes</em></syntax>
-<default>ScriptLogLength 10385760</default>
-<contextlist><context>server config</context></contextlist>
-<modulelist><module>mod_cgi</module><module>mod_cgid</module>
-</modulelist>
-
-<usage>
-    <p><directive>ScriptLogLength</directive> can be used to limit the
-    size of the CGI script logfile. Since the logfile logs a lot of
-    information per CGI error (all request headers, all script output)
-    it can grow to be a big file. To prevent problems due to unbounded
-    growth, this directive can be used to set an maximum file-size for
-    the CGI logfile. If the file exceeds this size, no more
-    information will be written to it.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ScriptLogBuffer</name>
-<description>Maximum amount of PUT or POST requests that will be recorded
-in the scriptlog</description>
-<syntax>ScriptLogBuffer <em>bytes</em></syntax>
-<default>ScriptLogBuffer 1024</default>
-<contextlist><context>server config</context></contextlist>
-<modulelist><module>mod_cgi</module><module>mod_cgid</module>
-</modulelist>
-
-<usage>
-    <p>The size of any PUT or POST entity body that is logged to
-    the file is limited, to prevent the log file growing too big
-    too quickly if large bodies are being received. By default, up
-    to 1024 bytes are logged, but this can be changed with this
-    directive.</p>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
\ No newline at end of file
diff --git a/docs/manual/mod/mod_cgid.html b/docs/manual/mod/mod_cgid.html
deleted file mode 100644
index 6fc8cfe..0000000
--- a/docs/manual/mod/mod_cgid.html
+++ /dev/null
@@ -1,35 +0,0 @@
-<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-     This file is generated from xml source: DO NOT EDIT
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
---><title>mod_cgid - Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img alt="[APACHE DOCUMENTATION]" src="../images/sub.gif"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module mod_cgid</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td><description>Execution of CGI scripts using an
-    external CGI daemon</description></td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="module-dict.html#ModuleIdentifier" class="help">Module&nbsp;Identifier:</a></td><td>cgid_module</td></tr><tr><td align="left" valign="top"><a href="module-dict.html#Compatibility" class="help">Compatibility:</a></td><td><compatibility>Unix threaded MPMs only</compatibility></td></tr></table></td></tr></table><h2>Summary</h2><summary>
-    <p>Except for the optimizations and the additional <a href="#scriptsock" class="directive"><code class="directive">ScriptSock</code></a> directive noted below,
-    mod_cgid behaves similarly to mod_cgi.  <strong>See the
-    <code><a href="mod_cgi.html">mod_cgi</a></code> Summary for additional details about
-    Apache and CGI.</strong></p>
-
-    <p>On certain unix operating systems, forking a process from a
-    multi-threaded server is a very expensive operation because the
-    new process will replicate all the threads of the parent
-    process. In order to avoid incurring this expense on each CGI
-    invocation, mod_cgid creates an external daemon that is
-    responsible for forking child processes to run CGI scripts. The
-    main server communicates with this daemon using a unix domain
-    socket.</p>
-
-    <p>This module is used by default whenever a multi-threaded MPM
-    is selected during the compilation process. At the user level,
-    this module is identical in configuration and operation to
-    <code><a href="mod_cgi.html">mod_cgi</a></code>. The only exception is the
-    additional directive <code>ScriptSock</code> which gives the
-    name of the socket to use for communication with the cgi
-    daemon.</p>
-</summary><h2>Directives</h2><ul><li><a href="mod_cgi.html#scriptlog">ScriptLog</a></li><li><a href="mod_cgi.html#scriptlogbuffer">ScriptLogBuffer</a></li><li><a href="mod_cgi.html#scriptloglength">ScriptLogLength</a></li><li><a href="#scriptsock">ScriptSock</a></li></ul><hr/><h2><a name="ScriptSock">ScriptSock</a> <a name="scriptsock">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td/></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>ScriptSock <em>file-path</em></syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>ScriptSock logs/cgisock</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_cgid</td></tr></table></td></tr></table><usage>
-    <p>This directive sets the name of the socket to use for
-    communication with the CGI daemon. The socket will be opened
-    using the permissions of the user who starts Apache (usually
-    root). To maintain the security of communications with CGI
-    scripts, it is important that no other user has permission to
-    write in the directory where the socket is located.</p>
-</usage><hr/><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img alt="Index" src="../images/index.gif"/></a><a href="../"><img alt="Home" src="../images/home.gif"/></a></blockquote></body></html>
\ No newline at end of file
diff --git a/docs/manual/mod/mod_cgid.xml b/docs/manual/mod/mod_cgid.xml
deleted file mode 100644
index 7766be6..0000000
--- a/docs/manual/mod/mod_cgid.xml
+++ /dev/null
@@ -1,68 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.xsl"?>
-<modulesynopsis>
-
-<name>mod_cgid</name>
-<description>Execution of CGI scripts using an
-    external CGI daemon</description>
-<status>Base</status>
-<sourcefile>mod_cgid.c</sourcefile>
-<identifier>cgid_module</identifier>
-<compatibility>Unix threaded MPMs only</compatibility>
-
-<summary>
-    <p>Except for the optimizations and the additional <directive
-    module="mod_cgid">ScriptSock</directive> directive noted below,
-    mod_cgid behaves similarly to mod_cgi.  <strong>See the
-    <module>mod_cgi</module> Summary for additional details about
-    Apache and CGI.</strong></p>
-
-    <p>On certain unix operating systems, forking a process from a
-    multi-threaded server is a very expensive operation because the
-    new process will replicate all the threads of the parent
-    process. In order to avoid incurring this expense on each CGI
-    invocation, mod_cgid creates an external daemon that is
-    responsible for forking child processes to run CGI scripts. The
-    main server communicates with this daemon using a unix domain
-    socket.</p>
-
-    <p>This module is used by default whenever a multi-threaded MPM
-    is selected during the compilation process. At the user level,
-    this module is identical in configuration and operation to
-    <module>mod_cgi</module>. The only exception is the
-    additional directive <code>ScriptSock</code> which gives the
-    name of the socket to use for communication with the cgi
-    daemon.</p>
-</summary>
-
-<directivesynopsis location="mod_cgi">
-<name>ScriptLog</name>
-</directivesynopsis>
-
-<directivesynopsis location="mod_cgi">
-<name>ScriptLogLength</name>
-</directivesynopsis>
-
-<directivesynopsis location="mod_cgi">
-<name>ScriptLogBuffer</name>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ScriptSock</name>
-<syntax>ScriptSock <em>file-path</em></syntax>
-<default>ScriptSock logs/cgisock</default>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
-    <p>This directive sets the name of the socket to use for
-    communication with the CGI daemon. The socket will be opened
-    using the permissions of the user who starts Apache (usually
-    root). To maintain the security of communications with CGI
-    scripts, it is important that no other user has permission to
-    write in the directory where the socket is located.</p>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
-
diff --git a/docs/manual/mod/mod_charset_lite.html b/docs/manual/mod/mod_charset_lite.html
deleted file mode 100644
index a816db9..0000000
--- a/docs/manual/mod/mod_charset_lite.html
+++ /dev/null
@@ -1,122 +0,0 @@
-<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-     This file is generated from xml source: DO NOT EDIT
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
---><title>mod_charset_lite - Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img alt="[APACHE DOCUMENTATION]" src="../images/sub.gif"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module mod_charset_lite</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td><description>Specify character set translation or recoding</description></td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>Experimental</td></tr><tr><td><a href="module-dict.html#ModuleIdentifier" class="help">Module&nbsp;Identifier:</a></td><td>charset_lite_module</td></tr></table></td></tr></table><h2>Summary</h2><summary>
-    <p>This is an <strong>experimental</strong> module and should
-    be used with care. Experiment with your
-    <code>mod_charset_lite</code> configuration to ensure that it
-    performs the desired function.</p>
-
-    <p><code><a href="mod_charset_lite.html">mod_charset_lite</a></code> allows the administrator to
-    specify the source character set of objects as well as the
-    character set they should be translated into before sending to the
-    client. <code><a href="mod_charset_lite.html">mod_charset_lite</a></code> does not translate the
-    data itself but instead tells Apache what translation to
-    perform. <code><a href="mod_charset_lite.html">mod_charset_lite</a></code> is applicable to EBCDIC
-    and ASCII host environments. In an EBCDIC environment, Apache
-    normally translates text content from the code page of the Apache
-    process locale to ISO-8859-1.  <code><a href="mod_charset_lite.html">mod_charset_lite</a></code>
-    can be used to specify that a different translation is to be
-    performed. In an ASCII environment, Apache normally performs no
-    translation, so <code><a href="mod_charset_lite.html">mod_charset_lite</a></code> is needed in
-    order for any translation to take place.</p>
-
-    <p>This module provides a small subset of configuration
-    mechanisms implemented by Russian Apache and its associated
-    <code>mod_charset</code>.</p>
-</summary><h2>Directives</h2><ul><li><a href="#charsetdefault">CharsetDefault</a></li><li><a href="#charsetoptions">CharsetOptions</a></li><li><a href="#charsetsourceenc">CharsetSourceEnc</a></li></ul><h2>Common Problems</h2>
-
-<h3>Invalid character set names</h3>
-
-    <p>The character set name parameters of <a href="#charsetsourceenc" class="directive"><code class="directive">CharsetSourceEnc</code></a> and
-    <a href="#charsetdefault" class="directive"><code class="directive">CharsetDefault</code></a>
-    must be acceptable to the translation mechanism used by APR on the
-    system where <code><a href="mod_charset_lite.html">mod_charset_lite</a></code> is deployed.  These
-    character set names are not standardized and are usually not the
-    same as the corresponding values used in http headers.  Currently,
-    APR can only use iconv(3), so you can easily test your character
-    set names using the iconv(1) program, as follows:</p>
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-  iconv -f charsetsourceenc-value -t charsetdefault-value
-</code></td></tr></table></blockquote>
-
-
-<h3>Mismatch between character set of content and translation
-    rules</h3>
-
-    <p>If the translation rules don't make sense for the content,
-    translation can fail in various ways, including:</p>
-
-    <ul>
-      <li>The translation mechanism may return a bad return code,
-      and the connection will be aborted.</li>
-
-      <li>The translation mechanism may silently place special
-      characters (e.g., question marks) in the output buffer when
-      it cannot translate the input buffer.</li>
-    </ul>
-
-<hr/><h2><a name="CharsetDefault">CharsetDefault</a> <a name="charsetdefault">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Charset to translate into</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>CharsetDefault <em>charset</em></syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>FileInfo</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Experimental</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_charset_lite</td></tr></table></td></tr></table><usage>
-    <p>The <code class="directive">CharsetDefault</code> directive specifies the
-    charset that content in the associated container should be
-    translated to.</p>
-
-    <p>The value of the <em>charset</em> argument must be accepted
-    as a valid character set name by the character set support in
-    APR. Generally, this means that it must be supported by
-    iconv.</p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><p align="center"><strong>Example</strong></p><code>
-    &lt;Directory "/export/home/trawick/apacheinst/htdocs/convert"&gt;<br>
-    CharsetSourceEnc  UTF-16BE<br>
-    CharsetDefault    ISO8859-1<br>
-    &lt;/Directory&gt;
-</code></td></tr></table></blockquote>
-</usage><hr/><h2><a name="CharsetOptions">CharsetOptions</a> <a name="charsetoptions">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Configures charset tranlation behavior</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>CharsetOptions <em>option</em> [<em>option</em>] ...</syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>CharsetOptions DebugLevel=0 
-NoImplicitAdd</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>FileInfo</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Experimental</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_charset_lite</td></tr></table></td></tr></table><usage>
-    <p>The <code class="directive">CharsetOptions</code> directive configures certain
-    behaviors of <code><a href="mod_charset_lite.html">mod_charset_lite</a></code>. <em>Option</em> can
-    be one of</p>
-
-    <dl>
-      <dt>DebugLevel=<em>n</em></dt>
-
-      <dd>The <code>DebugLevel</code> keyword allows you to specify
-      the level of debug messages generated by
-      <code><a href="mod_charset_lite.html">mod_charset_lite</a></code>. By default, no messages are
-      generated. This is equivalent to <code>DebugLevel=0</code>.
-      With higher numbers, more debug messages are generated, and
-      server performance will be degraded. The actual meanings of
-      the numeric values are described with the definitions of the
-      DBGLVL_ constants near the beginning of
-      <code>mod_charset_lite.c</code>.</dd>
-
-      <dt>ImplicitAdd | NoImplicitAdd</dt>
-
-      <dd>The <code>ImplicitAdd</code> keyword specifies that
-      <code><a href="mod_charset_lite.html">mod_charset_lite</a></code> should implicitly insert its
-      filter when the configuration specifies that the character
-      set of content should be translated. If the filter chain is
-      explicitly configured using the AddOutputFilter directive,
-      <code>NoImplicitAdd</code> should be specified so that
-      <code><a href="mod_charset_lite.html">mod_charset_lite</a></code> doesn't add its filter.</dd>
-    </dl>
-</usage><hr/><h2><a name="CharsetSourceEnc">CharsetSourceEnc</a> <a name="charsetsourceenc">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Source charset of files</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>CharsetSourceEnc <em>charset</em></syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>FileInfo</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Experimental</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_charset_lite</td></tr></table></td></tr></table><usage>
-    <p>The <code class="directive">CharsetSourceEnc</code> directive specifies the
-    source charset of files in the associated container.</p>
-
-    <p>The value of the <em>charset</em> argument must be accepted
-    as a valid character set name by the character set support in
-    APR. Generally, this means that it must be supported by
-    iconv.</p>
-    
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><p align="center"><strong>example</strong></p><code>
-    &lt;Directory "/export/home/trawick/apacheinst/htdocs/convert"&gt;<br>
-    CharsetSourceEnc  UTF-16BE<br>
-    CharsetDefault    ISO8859-1<br>
-    &lt;/Directory&gt;
-</code></td></tr></table></blockquote>
-    <p>The character set names in this example work with the iconv
-    translation support in Solaris 8.</p>
-</usage><hr/><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img alt="Index" src="../images/index.gif"/></a><a href="../"><img alt="Home" src="../images/home.gif"/></a></blockquote></body></html>
\ No newline at end of file
diff --git a/docs/manual/mod/mod_charset_lite.xml b/docs/manual/mod/mod_charset_lite.xml
deleted file mode 100644
index df9f847..0000000
--- a/docs/manual/mod/mod_charset_lite.xml
+++ /dev/null
@@ -1,174 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.xsl"?>
-<modulesynopsis>
-
-<name>mod_charset_lite</name>
-<description>Specify character set translation or recoding</description>
-<status>Experimental</status>
-<sourcefile>mod_charset_lite.c</sourcefile>
-<identifier>charset_lite_module</identifier>
-
-<summary>
-    <p>This is an <strong>experimental</strong> module and should
-    be used with care. Experiment with your
-    <code>mod_charset_lite</code> configuration to ensure that it
-    performs the desired function.</p>
-
-    <p><module>mod_charset_lite</module> allows the administrator to
-    specify the source character set of objects as well as the
-    character set they should be translated into before sending to the
-    client. <module>mod_charset_lite</module> does not translate the
-    data itself but instead tells Apache what translation to
-    perform. <module>mod_charset_lite</module> is applicable to EBCDIC
-    and ASCII host environments. In an EBCDIC environment, Apache
-    normally translates text content from the code page of the Apache
-    process locale to ISO-8859-1.  <module>mod_charset_lite</module>
-    can be used to specify that a different translation is to be
-    performed. In an ASCII environment, Apache normally performs no
-    translation, so <module>mod_charset_lite</module> is needed in
-    order for any translation to take place.</p>
-
-    <p>This module provides a small subset of configuration
-    mechanisms implemented by Russian Apache and its associated
-    <code>mod_charset</code>.</p>
-</summary>
-
-<section><title>Common Problems</title>
-
-<section><title>Invalid character set names</title>
-
-    <p>The character set name parameters of <directive
-    module="mod_charset_lite">CharsetSourceEnc</directive> and
-    <directive module="mod_charset_lite">CharsetDefault</directive>
-    must be acceptable to the translation mechanism used by APR on the
-    system where <module>mod_charset_lite</module> is deployed.  These
-    character set names are not standardized and are usually not the
-    same as the corresponding values used in http headers.  Currently,
-    APR can only use iconv(3), so you can easily test your character
-    set names using the iconv(1) program, as follows:</p>
-<example>
-  iconv -f charsetsourceenc-value -t charsetdefault-value
-</example>
-</section>
-
-<section><title>Mismatch between character set of content and translation
-    rules</title>
-
-    <p>If the translation rules don't make sense for the content,
-    translation can fail in various ways, including:</p>
-
-    <ul>
-      <li>The translation mechanism may return a bad return code,
-      and the connection will be aborted.</li>
-
-      <li>The translation mechanism may silently place special
-      characters (e.g., question marks) in the output buffer when
-      it cannot translate the input buffer.</li>
-    </ul>
-</section>
-</section>
-
-<directivesynopsis>
-<name>CharsetSourceEnc</name>
-<description>Source charset of files</description>
-<syntax>CharsetSourceEnc <em>charset</em></syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context><context>directory</context>
-<context>.htaccess</context>
-</contextlist>
-<override>FileInfo</override>
-
-<usage>
-    <p>The <directive>CharsetSourceEnc</directive> directive specifies the
-    source charset of files in the associated container.</p>
-
-    <p>The value of the <em>charset</em> argument must be accepted
-    as a valid character set name by the character set support in
-    APR. Generally, this means that it must be supported by
-    iconv.</p>
-    
-<example><title>example</title>
-    &lt;Directory "/export/home/trawick/apacheinst/htdocs/convert"&gt;<br />
-    CharsetSourceEnc  UTF-16BE<br />
-    CharsetDefault    ISO8859-1<br />
-    &lt;/Directory&gt;
-</example>
-    <p>The character set names in this example work with the iconv
-    translation support in Solaris 8.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>CharsetDefault</name>
-<description>Charset to translate into</description>
-<syntax>CharsetDefault <em>charset</em></syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context><context>directory</context>
-<context>.htaccess</context>
-</contextlist>
-<override>FileInfo</override>
-
-<usage>
-    <p>The <directive>CharsetDefault</directive> directive specifies the
-    charset that content in the associated container should be
-    translated to.</p>
-
-    <p>The value of the <em>charset</em> argument must be accepted
-    as a valid character set name by the character set support in
-    APR. Generally, this means that it must be supported by
-    iconv.</p>
-
-<example><title>Example</title>
-    &lt;Directory "/export/home/trawick/apacheinst/htdocs/convert"&gt;<br />
-    CharsetSourceEnc  UTF-16BE<br />
-    CharsetDefault    ISO8859-1<br />
-    &lt;/Directory&gt;
-</example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>CharsetOptions</name>
-<description>Configures charset tranlation behavior</description>
-<syntax>CharsetOptions <em>option</em> [<em>option</em>] ...</syntax>
-<default>CharsetOptions DebugLevel=0 
-NoImplicitAdd</default>
-<contextlist><context>server config</context>
-<context>virtual host</context><context>directory</context>
-<context>.htaccess</context>
-</contextlist>
-<override>FileInfo</override>
-
-<usage>
-    <p>The <directive>CharsetOptions</directive> directive configures certain
-    behaviors of <module>mod_charset_lite</module>. <em>Option</em> can
-    be one of</p>
-
-    <dl>
-      <dt>DebugLevel=<em>n</em></dt>
-
-      <dd>The <code>DebugLevel</code> keyword allows you to specify
-      the level of debug messages generated by
-      <module>mod_charset_lite</module>. By default, no messages are
-      generated. This is equivalent to <code>DebugLevel=0</code>.
-      With higher numbers, more debug messages are generated, and
-      server performance will be degraded. The actual meanings of
-      the numeric values are described with the definitions of the
-      DBGLVL_ constants near the beginning of
-      <code>mod_charset_lite.c</code>.</dd>
-
-      <dt>ImplicitAdd | NoImplicitAdd</dt>
-
-      <dd>The <code>ImplicitAdd</code> keyword specifies that
-      <module>mod_charset_lite</module> should implicitly insert its
-      filter when the configuration specifies that the character
-      set of content should be translated. If the filter chain is
-      explicitly configured using the AddOutputFilter directive,
-      <code>NoImplicitAdd</code> should be specified so that
-      <module>mod_charset_lite</module> doesn't add its filter.</dd>
-    </dl>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
\ No newline at end of file
diff --git a/docs/manual/mod/mod_dav.html b/docs/manual/mod/mod_dav.html
deleted file mode 100644
index 3a7aa9a..0000000
--- a/docs/manual/mod/mod_dav.html
+++ /dev/null
@@ -1,83 +0,0 @@
-<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-     This file is generated from xml source: DO NOT EDIT
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
---><title>mod_dav - Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img alt="[APACHE DOCUMENTATION]" src="../images/sub.gif"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module mod_dav</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td><description>Distributed Authoring and Versioning
-(<a href="http://www.webdav.org/">WebDAV</a>) functionality</description></td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="module-dict.html#ModuleIdentifier" class="help">Module&nbsp;Identifier:</a></td><td>dav_module</td></tr></table></td></tr></table><h2>Summary</h2><summary>
-    <p>This module provides class 1 and class 2 <a href="http://www.webdav.org">WebDAV</a> ('Web-based Distributed
-    Authoring and Versioning') functionality for Apache. This
-    extension to the HTTP protocol allows creating, moving,
-    copying, and deleting resources and collections on a remote web
-    server.</p>
-
-    <p>To enable mod_dav, add the following to a container in your
-    <code>httpd.conf</code> file:</p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>Dav On</code></td></tr></table></blockquote>
-
-    <p>Also, specify a valid filename for the DAV lock database by
-    adding the following to the global section in your
-    <code>httpd.conf</code> file:</p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>DavLockDB /tmp/DavLock&nbsp;&nbsp;&nbsp;&nbsp;
-      <em>(Any web-server writable filename, without an
-      extension)</em>
-</code></td></tr></table></blockquote>
-</summary><h2>Directives</h2><ul><li><a href="#dav">Dav</a></li><li><a href="#davdepthinfinity">DavDepthInfinity</a></li><li><a href="#davlockdb">DavLockDB</a></li><li><a href="#davmintimeout">DavMinTimeout</a></li></ul><hr/><h2><a name="Dav">Dav</a> <a name="dav">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Enable WebDAV HTTP methods</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>Dav on|off</syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>Dav off</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>directory</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_dav</td></tr></table></td></tr></table><usage>
-    <p>Use the <code class="directive">Dav</code> directive to enable the
-    WebDAV HTTP methods for the given container. You may wish to add a
-    <a href="core.html#limit" class="directive"><code class="directive">&lt;Limit&gt;</code></a> clause
-    inside the <a href="core.html#location" class="directive"><code class="directive">&lt;location&gt;</code></a> directive to limit access to
-    DAV-enabled locations.</p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><p align="center"><strong>Example</strong></p><code>
-        DavLockDB /tmp/DavLock<br>
-        <br>
-         &lt;Location /foo&gt;<br>
-         Dav On<br>
-        <br>
-         AuthType Basic<br>
-         AuthName DAV<br>
-         AuthUserFile user.passwd<br>
-        <br>
-         &nbsp;&nbsp;&lt;LimitExcept GET HEAD OPTIONS&gt;<br>
-         &nbsp;&nbsp;require user admin<br>
-         &nbsp;&nbsp;&lt;/LimitExcept&gt;<br>
-         &lt;/Location&gt;<br>
-</code></td></tr></table></blockquote>
-</usage><hr/><h2><a name="DavDepthInfinity">DavDepthInfinity</a> <a name="davdepthinfinity">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Allow PROPFIND, Depth: Infinity requests</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>DavDepthInfinity on|off</syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>DavDepthInfinity off</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>directory</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_dav</td></tr></table></td></tr></table><usage>
-    <p>Use the <code class="directive">DavDepthInfinity</code> directive to
-    allow the processing of PROPFIND requests containing the header
-    'Depth: Infinity'. Because this type of request could constitute a
-    denial-of-service attack, by default it is not allowed.</p>
-</usage><hr/><h2><a name="DavLockDB">DavLockDB</a> <a name="davlockdb">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Location of the DAV lock database</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>DavLockDB <em>file-path</em></syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_dav</td></tr></table></td></tr></table><usage>
-    <p>Use the <code class="directive">DavLockDB</code> directive to specify
-    the full path to the lock database, excluding an extension. The
-    default (file system) implementation of mod_dav uses a SDBM
-    database to track user locks. The utility
-    <code>modules/dav/util/lockview</code> can be used from the server
-    to display all locks in a lock database.</p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><p align="center"><strong>Example</strong></p><code>
-DavLockDB /tmp/DavLock
-</code></td></tr></table></blockquote>
-</usage><hr/><h2><a name="DavMinTimeout">DavMinTimeout</a> <a name="davmintimeout">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Minimum amount of time the server holds a lock on
-a DAV resource</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>DavMinTimeout <em>seconds</em></syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>DavMinTimeout 0</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>directory</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_dav</td></tr></table></td></tr></table><usage>
-    <p>When a client requests a DAV resource lock, it can also
-    specify a time when the lock will be automatically removed by
-    the server. This value is only a request, and the server can
-    ignore it or inform the client of an arbitrary value.</p>
-
-    <p>Use the <code class="directive">DavMinTimeout</code> directive to specify, in
-    seconds, the minimum lock timeout to return to a client.
-    Microsoft Web Folders defaults to a timeout of 120 seconds; the
-    <code class="directive">DavMinTimeout</code> can override this to a higher value
-    (like 600 seconds) to reduce the chance of the client losing
-    the lock due to network latency.</p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><p align="center"><strong>Example</strong></p><code>
-         &lt;Location /MSWord&gt;<br>
-         DavMinTimeout 600<br>
-         &lt;/Location&gt;<br>
-</code></td></tr></table></blockquote>
-</usage><hr/><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img alt="Index" src="../images/index.gif"/></a><a href="../"><img alt="Home" src="../images/home.gif"/></a></blockquote></body></html>
\ No newline at end of file
diff --git a/docs/manual/mod/mod_dav.xml b/docs/manual/mod/mod_dav.xml
deleted file mode 100644
index a8908f7..0000000
--- a/docs/manual/mod/mod_dav.xml
+++ /dev/null
@@ -1,136 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.xsl"?>
-<modulesynopsis>
-
-<name>mod_dav</name> 
-<description>Distributed Authoring and Versioning
-(<a href="http://www.webdav.org/">WebDAV</a>) functionality</description>
-<status>Extension</status>
-<sourcefile>mod_dav.c</sourcefile>
-<identifier>dav_module</identifier>
-
-<summary>
-    <p>This module provides class 1 and class 2 <a
-    href="http://www.webdav.org">WebDAV</a> ('Web-based Distributed
-    Authoring and Versioning') functionality for Apache. This
-    extension to the HTTP protocol allows creating, moving,
-    copying, and deleting resources and collections on a remote web
-    server.</p>
-
-    <p>To enable mod_dav, add the following to a container in your
-    <code>httpd.conf</code> file:</p>
-
-<example>Dav On</example>
-
-    <p>Also, specify a valid filename for the DAV lock database by
-    adding the following to the global section in your
-    <code>httpd.conf</code> file:</p>
-
-<example>DavLockDB /tmp/DavLock&nbsp;&nbsp;&nbsp;&nbsp;
-      <em>(Any web-server writable filename, without an
-      extension)</em>
-</example>
-</summary>
-
-<directivesynopsis>
-<name>Dav</name>
-<description>Enable WebDAV HTTP methods</description>
-<syntax>Dav on|off</syntax>
-<default>Dav off</default>
-<contextlist><context>directory</context></contextlist>
-
-<usage>
-    <p>Use the <directive>Dav</directive> directive to enable the
-    WebDAV HTTP methods for the given container. You may wish to add a
-    <directive module="core" type="section">Limit</directive> clause
-    inside the <directive module="core"
-    type="section">location</directive> directive to limit access to
-    DAV-enabled locations.</p>
-
-<example><title>Example</title>
-        DavLockDB /tmp/DavLock<br />
-        <br />
-         &lt;Location /foo&gt;<br />
-         Dav On<br />
-        <br />
-         AuthType Basic<br />
-         AuthName DAV<br />
-         AuthUserFile user.passwd<br />
-        <br />
-         &nbsp;&nbsp;&lt;LimitExcept GET HEAD OPTIONS&gt;<br />
-         &nbsp;&nbsp;require user admin<br />
-         &nbsp;&nbsp;&lt;/LimitExcept&gt;<br />
-         &lt;/Location&gt;<br />
-</example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>DavLockDB</name>
-<description>Location of the DAV lock database</description>
-<syntax>DavLockDB <em>file-path</em></syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
-    <p>Use the <directive>DavLockDB</directive> directive to specify
-    the full path to the lock database, excluding an extension. The
-    default (file system) implementation of mod_dav uses a SDBM
-    database to track user locks. The utility
-    <code>modules/dav/util/lockview</code> can be used from the server
-    to display all locks in a lock database.</p>
-
-<example><title>Example</title>
-DavLockDB /tmp/DavLock
-</example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>DavMinTimeout</name>
-<description>Minimum amount of time the server holds a lock on
-a DAV resource</description>
-<syntax>DavMinTimeout <em>seconds</em></syntax>
-<default>DavMinTimeout 0</default>
-<contextlist><context>directory</context></contextlist>
-
-<usage>
-    <p>When a client requests a DAV resource lock, it can also
-    specify a time when the lock will be automatically removed by
-    the server. This value is only a request, and the server can
-    ignore it or inform the client of an arbitrary value.</p>
-
-    <p>Use the <directive>DavMinTimeout</directive> directive to specify, in
-    seconds, the minimum lock timeout to return to a client.
-    Microsoft Web Folders defaults to a timeout of 120 seconds; the
-    <directive>DavMinTimeout</directive> can override this to a higher value
-    (like 600 seconds) to reduce the chance of the client losing
-    the lock due to network latency.</p>
-
-<example><title>Example</title>
-         &lt;Location /MSWord&gt;<br />
-         DavMinTimeout 600<br />
-         &lt;/Location&gt;<br />
-</example>
-</usage>     
-</directivesynopsis>
-
-<directivesynopsis>
-<name>DavDepthInfinity</name>
-<description>Allow PROPFIND, Depth: Infinity requests</description>
-<syntax>DavDepthInfinity on|off</syntax>
-<default>DavDepthInfinity off</default>
-<contextlist><context>directory</context></contextlist>
-
-<usage>
-    <p>Use the <directive>DavDepthInfinity</directive> directive to
-    allow the processing of PROPFIND requests containing the header
-    'Depth: Infinity'. Because this type of request could constitute a
-    denial-of-service attack, by default it is not allowed.</p>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
-
-
diff --git a/docs/manual/mod/mod_deflate.html b/docs/manual/mod/mod_deflate.html
deleted file mode 100755
index 3c91c1f..0000000
--- a/docs/manual/mod/mod_deflate.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-     This file is generated from xml source: DO NOT EDIT
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
---><title>mod_deflate - Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img alt="[APACHE DOCUMENTATION]" src="../images/sub.gif"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module mod_deflate</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td><description>Compress content before
-    it is delivered to the client</description></td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>experimental</td></tr><tr><td><a href="module-dict.html#ModuleIdentifier" class="help">Module&nbsp;Identifier:</a></td><td>deflate_module</td></tr></table></td></tr></table><h2>Summary</h2><summary>
-    <p>The experimental <code><a href="mod_deflate.html">mod_deflate</a></code> module provides
-    the <code>DEFLATE</code> output filter that allows output from
-    your server to be compressed before being sent to the client over
-    the network.</p>
-</summary><p><strong>See also </strong></p><ul><li><a href="mod_mime.html#addoutputfilter" class="directive"><code class="directive">AddOutputFilter</code></a></li><li><a href="core.html#setoutputfilter" class="directive"><code class="directive">SetOutputFilter</code></a></li></ul><h2>Directives</h2><ul><li><a href="#deflatefilternote">DeflateFilterNote</a></li><li><a href="#deflatememlevel">DeflateMemLevel</a></li><li><a href="#deflatewindowsize">DeflateWindowSize</a></li></ul><h2>Enabling Compression</h2>
-
-    <p>Compression is implemented by the <code>DEFLATE</code>
-    <a href="../filter.html">filter</a>.  The following directive
-    will enable compression for documents in the container where it
-    is placed:</p>
-    <p><strong>Most popular browsers can not handle compression of all content
-        so you may want to enable the 'gzip-only-text/html' note (see below)
-    </strong></p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>SetEnv gzip-only-text/html 1<br>
-SetOutputFilter DEFLATE
-</code></td></tr></table></blockquote>
-
-    <p>Here is an example of enabling compression for the Apache
-    documentation:</p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-&lt;Directory "/your-server-root/manual"&gt;<br>
-      SetEnv gzip-only-text/html 1<br>
-      SetOutputFilter DEFLATE<br>
-&lt;/Directory&gt;
-</code></td></tr></table></blockquote>
-<hr/><h2><a name="DeflateFilterNote">DeflateFilterNote</a> <a name="deflatefilternote">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Places the compression ratio in a note for logging</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>DeflateFilterNote <em>notename</em></syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>experimental</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_deflate</td></tr></table></td></tr></table><usage>
-    <p>The <code class="directive">DeflateFilterNote</code> directive
-    specifies that a note about compression ratios should be attached
-    to the request.  The name of the note is the value specified for
-    the directive.</p>
-</usage><hr/><h2><a name="DeflateMemLevel">DeflateMemLevel</a> <a name="deflatememlevel">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Amount of memory available to zlib for compression</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>DeflateMemLevel <em>value</em></syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>experimental</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_deflate</td></tr></table></td></tr></table><usage>
-    
-    <p>The <code class="directive">DeflateMemLevel</code> directive specifies
-    the amount of memory available to zlib for compression.</p>
-</usage><hr/><h2><a name="DeflateWindowSize">DeflateWindowSize</a> <a name="deflatewindowsize">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Zlib compression window size</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>DeflateWindowSize <em>value</em></syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>experimental</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_deflate</td></tr></table></td></tr></table><usage>
-    
-    <p>The <code class="directive">DeflateWindowSize</code> directive specifies the
-    zlib compression window size.</p>
-</usage><hr/><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img alt="Index" src="../images/index.gif"/></a><a href="../"><img alt="Home" src="../images/home.gif"/></a></blockquote></body></html>
\ No newline at end of file
diff --git a/docs/manual/mod/mod_deflate.xml b/docs/manual/mod/mod_deflate.xml
deleted file mode 100644
index cf5ff40..0000000
--- a/docs/manual/mod/mod_deflate.xml
+++ /dev/null
@@ -1,88 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.xsl"?>
-<modulesynopsis>
-
-<name>mod_deflate</name>
-<description>Compress content before
-    it is delivered to the client</description>
-<status>experimental</status>
-<sourcefile>mod_deflate.c</sourcefile>
-<identifier>deflate_module</identifier>
-
-<summary>
-    <p>The experimental <module>mod_deflate</module> module provides
-    the <code>DEFLATE</code> output filter that allows output from
-    your server to be compressed before being sent to the client over
-    the network.</p>
-</summary>
-<seealso><directive module="mod_mime">AddOutputFilter</directive></seealso>
-<seealso><directive module="core">SetOutputFilter</directive></seealso>
-
-<section><title>Enabling Compression</title>
-
-    <p>Compression is implemented by the <code>DEFLATE</code>
-    <a href="../filter.html">filter</a>.  The following directive
-    will enable compression for documents in the container where it
-    is placed:</p>
-    <p><strong>Most popular browsers can not handle compression of all content
-        so you may want to enable the 'gzip-only-text/html' note (see below)
-    </strong></p>
-
-<example>SetEnv gzip-only-text/html 1<br />
-SetOutputFilter DEFLATE
-</example>
-
-    <p>Here is an example of enabling compression for the Apache
-    documentation:</p>
-
-<example>
-&lt;Directory "/your-server-root/manual"&gt;<br />
-      SetEnv gzip-only-text/html 1<br />
-      SetOutputFilter DEFLATE<br />
-&lt;/Directory&gt;
-</example>
-</section>
-
-<directivesynopsis>
-<name>DeflateFilterNote</name>
-<description>Places the compression ratio in a note for logging</description>
-<syntax>DeflateFilterNote <em>notename</em></syntax>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
-    <p>The <directive>DeflateFilterNote</directive> directive
-    specifies that a note about compression ratios should be attached
-    to the request.  The name of the note is the value specified for
-    the directive.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>DeflateWindowSize</name>
-<description>Zlib compression window size</description>
-<syntax>DeflateWindowSize <em>value</em></syntax>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
-    <!-- XXX: Ummm... What unit??? -->
-    <p>The <directive>DeflateWindowSize</directive> directive specifies the
-    zlib compression window size.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>DeflateMemLevel</name>
-<description>Amount of memory available to zlib for compression</description>
-<syntax>DeflateMemLevel <em>value</em></syntax>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
-    <!-- XXX: Ummm... What unit??? -->
-    <p>The <directive>DeflateMemLevel</directive> directive specifies
-    the amount of memory available to zlib for compression.</p>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
-
diff --git a/docs/manual/mod/mod_dir.html b/docs/manual/mod/mod_dir.html
deleted file mode 100644
index 67220cd..0000000
--- a/docs/manual/mod/mod_dir.html
+++ /dev/null
@@ -1,57 +0,0 @@
-<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-     This file is generated from xml source: DO NOT EDIT
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
---><title>mod_dir - Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img alt="[APACHE DOCUMENTATION]" src="../images/sub.gif"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module mod_dir</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td><description>Provides for "trailing slash" redirects and
-    serving directory index files</description></td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="module-dict.html#ModuleIdentifier" class="help">Module&nbsp;Identifier:</a></td><td>dir_module</td></tr></table></td></tr></table><h2>Summary</h2><summary>
-    <p>The index of a directory can come from one of two sources:</p>
-
-    <ul>
-      <li>A file written by the user, typically called
-      <code>index.html</code>. The <a href="#directoryindex" class="directive"><code class="directive">DirectoryIndex</code></a> directive sets the
-      name of this file. This is controlled by
-      <code><a href="mod_dir.html">mod_dir</a></code>.</li>
-
-      <li>Otherwise, a listing generated by the server. This is
-      provided by <code><a href="mod_autoindex.html">mod_autoindex</a></code>.</li>
-    </ul>
-    <p>The two functions are separated so that you can completely
-    remove (or replace) automatic index generation should you want
-    to.</p> 
-
-    <p>A "trailing slash" redirect is issued when the server
-    receives a request for a URL
-    <code>http://servername/foo/dirname</code> where
-    <code>dirname</code> is a directory. Directories require a
-    trailing slash, so <code><a href="mod_dir.html">mod_dir</a></code> issues a redirect to
-    <code>http://servername/foo/dirname/</code>.</p>
-</summary><h2>Directives</h2><ul><li><a href="#directoryindex">DirectoryIndex</a></li></ul><hr/><h2><a name="DirectoryIndex">DirectoryIndex</a> <a name="directoryindex">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>List of resources to look for when the client requests
-a directory</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>DirectoryIndex
-    <em>local-url</em> [<em>local-url</em>] ...</syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>DirectoryIndex index.html</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>Indexes</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_dir</td></tr></table></td></tr></table><usage>
-    <p>The <code class="directive">DirectoryIndex</code> directive sets the
-    list of resources to look for, when the client requests an index
-    of the directory by specifying a / at the end of the a directory
-    name.  <em>Local-url</em> is the (%-encoded) URL of a document on
-    the server relative to the requested directory; it is usually the
-    name of a file in the directory. Several URLs may be given, in
-    which case the server will return the first one that it finds.  If
-    none of the resources exist and the <code>Indexes</code> option is
-    set, the server will generate its own listing of the
-    directory.</p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><p align="center"><strong>Example</strong></p><code>
-DirectoryIndex index.html
-</code></td></tr></table></blockquote>
-
-    <p>then a request for <code>http://myserver/docs/</code> would
-    return <code>http://myserver/docs/index.html</code> if it
-    exists, or would list the directory if it did not.</p>
-
-    <p>Note that the documents do not need to be relative to the
-    directory;</p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>DirectoryIndex index.html index.txt  /cgi-bin/index.pl</code></td></tr></table></blockquote>
-    <p>would cause the CGI script <code>/cgi-bin/index.pl</code> to be
-    executed if neither <code>index.html</code> or
-    <code>index.txt</code> existed in a directory.</p>
-</usage><hr/><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img alt="Index" src="../images/index.gif"/></a><a href="../"><img alt="Home" src="../images/home.gif"/></a></blockquote></body></html>
\ No newline at end of file
diff --git a/docs/manual/mod/mod_dir.xml b/docs/manual/mod/mod_dir.xml
deleted file mode 100644
index 0d7ed94..0000000
--- a/docs/manual/mod/mod_dir.xml
+++ /dev/null
@@ -1,81 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.xsl"?>
-<modulesynopsis>
-<name>mod_dir</name>
-<description>Provides for "trailing slash" redirects and
-    serving directory index files</description>
-<status>Base</status>
-<sourcefile>mod_dir.c</sourcefile>
-<identifier>dir_module</identifier>
-
-<summary>
-    <p>The index of a directory can come from one of two sources:</p>
-
-    <ul>
-      <li>A file written by the user, typically called
-      <code>index.html</code>. The <directive module="mod_dir"
-      >DirectoryIndex</directive> directive sets the
-      name of this file. This is controlled by
-      <module>mod_dir</module>.</li>
-
-      <li>Otherwise, a listing generated by the server. This is
-      provided by <module>mod_autoindex</module>.</li>
-    </ul>
-    <p>The two functions are separated so that you can completely
-    remove (or replace) automatic index generation should you want
-    to.</p> 
-
-    <p>A "trailing slash" redirect is issued when the server
-    receives a request for a URL
-    <code>http://servername/foo/dirname</code> where
-    <code>dirname</code> is a directory. Directories require a
-    trailing slash, so <module>mod_dir</module> issues a redirect to
-    <code>http://servername/foo/dirname/</code>.</p>
-</summary>
-
-<directivesynopsis>
-<name>DirectoryIndex</name>
-<description>List of resources to look for when the client requests
-a directory</description>
-<syntax>DirectoryIndex
-    <em>local-url</em> [<em>local-url</em>] ...</syntax>
-<default>DirectoryIndex index.html</default>
-<contextlist><context>server config</context>
-<context>virtual host</context>
-<context>directory</context>
-<context>.htaccess</context>
-</contextlist>
-<override>Indexes</override>
-
-<usage>
-    <p>The <directive>DirectoryIndex</directive> directive sets the
-    list of resources to look for, when the client requests an index
-    of the directory by specifying a / at the end of the a directory
-    name.  <em>Local-url</em> is the (%-encoded) URL of a document on
-    the server relative to the requested directory; it is usually the
-    name of a file in the directory. Several URLs may be given, in
-    which case the server will return the first one that it finds.  If
-    none of the resources exist and the <code>Indexes</code> option is
-    set, the server will generate its own listing of the
-    directory.</p>
-
-<example><title>Example</title>
-DirectoryIndex index.html
-</example>
-
-    <p>then a request for <code>http://myserver/docs/</code> would
-    return <code>http://myserver/docs/index.html</code> if it
-    exists, or would list the directory if it did not.</p>
-
-    <p>Note that the documents do not need to be relative to the
-    directory;</p>
-
-<example>DirectoryIndex index.html index.txt  /cgi-bin/index.pl</example>
-    <p>would cause the CGI script <code>/cgi-bin/index.pl</code> to be
-    executed if neither <code>index.html</code> or
-    <code>index.txt</code> existed in a directory.</p>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
\ No newline at end of file
diff --git a/docs/manual/mod/mod_env.html b/docs/manual/mod/mod_env.html
deleted file mode 100644
index 5bcecac..0000000
--- a/docs/manual/mod/mod_env.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-     This file is generated from xml source: DO NOT EDIT
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
---><title>mod_env - Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img alt="[APACHE DOCUMENTATION]" src="../images/sub.gif"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module mod_env</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td><description>Modifies the environment which is
-    passed to CGI scripts and SSI pages</description></td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="module-dict.html#ModuleIdentifier" class="help">Module&nbsp;Identifier:</a></td><td>env_module</td></tr></table></td></tr></table><h2>Summary</h2><summary>
-    <p>This module allows for control of the environment that will
-    be provided to CGI scripts and SSI pages. Environment variables
-    may be passed from the shell which invoked the httpd process.
-    Alternatively, environment variables may be set or unset within
-    the configuration process.</p>
-  </summary><p><strong>See also </strong></p><ul><li><a href="../env.html">Environment Variables</a></li></ul><h2>Directives</h2><ul><li><a href="#passenv">PassEnv</a></li><li><a href="#setenv">SetEnv</a></li><li><a href="#unsetenv">UnsetEnv</a></li></ul><hr/><h2><a name="PassEnv">PassEnv</a> <a name="passenv">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Passes environment variables from the shell</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>PassEnv
-    <em>env-variable</em> [<em>env-variable</em>] ...</syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>FileInfo</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_env</td></tr></table></td></tr></table><usage>
-    <p>Specifies one or more environment variables to pass to CGI
-    scripts and SSI pages from the environment of the shell which
-    invoked the httpd process. Example:</p>
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-    PassEnv LD_LIBRARY_PATH
-</code></td></tr></table></blockquote>
-</usage><hr/><h2><a name="SetEnv">SetEnv</a> <a name="setenv">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sets environment variables</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>SetEnv <em>env-variable value</em></syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>FileInfo</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_env</td></tr></table></td></tr></table><usage>
-    <p>Sets an environment variable, which is then passed on to CGI
-    scripts and SSI pages. Example:</p>
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-    SetEnv SPECIAL_PATH /foo/bin
-</code></td></tr></table></blockquote>
-</usage><hr/><h2><a name="UnsetEnv">UnsetEnv</a> <a name="unsetenv">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Removes variables from the environment</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>UnsetEnv <em>env-variable</em> [<em>env-variable</em>] ...</syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>FileInfo</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_env</td></tr></table></td></tr></table><usage>
-    <p>Removes one or more environment variables from those passed
-    on to CGI scripts and SSI pages. Example:</p>
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-    UnsetEnv LD_LIBRARY_PATH
-</code></td></tr></table></blockquote>
-</usage><hr/><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img alt="Index" src="../images/index.gif"/></a><a href="../"><img alt="Home" src="../images/home.gif"/></a></blockquote></body></html>
\ No newline at end of file
diff --git a/docs/manual/mod/mod_env.xml b/docs/manual/mod/mod_env.xml
deleted file mode 100644
index 933a23c..0000000
--- a/docs/manual/mod/mod_env.xml
+++ /dev/null
@@ -1,81 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.xsl"?>
-<modulesynopsis>
-
-<name>mod_env</name>
-  <description>Modifies the environment which is
-    passed to CGI scripts and SSI pages</description>
-  <status>Base</status>
-  <sourcefile>mod_env.c</sourcefile>
-  <identifier>env_module</identifier>
-  <summary>
-    <p>This module allows for control of the environment that will
-    be provided to CGI scripts and SSI pages. Environment variables
-    may be passed from the shell which invoked the httpd process.
-    Alternatively, environment variables may be set or unset within
-    the configuration process.</p>
-  </summary>
-  <seealso><a href="../env.html">Environment Variables</a></seealso>
-
-  <directivesynopsis>
-    <name>PassEnv</name>
-    <description>Passes environment variables from the shell</description>
-    <syntax>PassEnv
-    <em>env-variable</em> [<em>env-variable</em>] ...</syntax>
-    <contextlist>
-      <context>server config</context><context>virtual host</context>
-      <context>directory</context><context>.htaccess</context>
-    </contextlist>
-    <override>FileInfo</override>
-
-<usage>
-    <p>Specifies one or more environment variables to pass to CGI
-    scripts and SSI pages from the environment of the shell which
-    invoked the httpd process. Example:</p>
-<example>
-    PassEnv LD_LIBRARY_PATH
-</example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>SetEnv</name>
-<description>Sets environment variables</description>
-<syntax>SetEnv <em>env-variable value</em></syntax>
-<contextlist>
-<context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>FileInfo</override>
-
-<usage>
-    <p>Sets an environment variable, which is then passed on to CGI
-    scripts and SSI pages. Example:</p>
-<example>
-    SetEnv SPECIAL_PATH /foo/bin
-</example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>UnsetEnv</name>
-<description>Removes variables from the environment</description>
-<syntax>UnsetEnv <em>env-variable</em> [<em>env-variable</em>] ...</syntax>
-<contextlist>
-<context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>FileInfo</override>
-
-<usage>
-    <p>Removes one or more environment variables from those passed
-    on to CGI scripts and SSI pages. Example:</p>
-<example>
-    UnsetEnv LD_LIBRARY_PATH
-</example>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
-
diff --git a/docs/manual/mod/mod_example.html b/docs/manual/mod/mod_example.html
deleted file mode 100644
index fab7e67..0000000
--- a/docs/manual/mod/mod_example.html
+++ /dev/null
@@ -1,95 +0,0 @@
-<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-     This file is generated from xml source: DO NOT EDIT
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
---><title>mod_example - Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img alt="[APACHE DOCUMENTATION]" src="../images/sub.gif"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module mod_example</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td><description>Illustrates the Apache module API</description></td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>Experimental</td></tr><tr><td><a href="module-dict.html#ModuleIdentifier" class="help">Module&nbsp;Identifier:</a></td><td>example_module</td></tr></table></td></tr></table><h2>Summary</h2><summary>
-<blockquote><table><tr><td bgcolor="#ffe5f5">
-      This document has not been updated
-      to take into account changes made in the 2.0 version of the
-      Apache HTTP Server. Some of the information may still be
-      relevant, but please use it with care.
-</td></tr></table></blockquote>
-
-    <p>The files in the <code>src/modules/example directory</code>
-    under the Apache distribution directory tree are provided as an
-    example to those that wish to write modules that use the Apache
-    API.</p>
-
-    <p>The main file is <code>mod_example.c</code>, which
-    illustrates all the different callback mechanisms and call
-    syntaxes. By no means does an add-on module need to include
-    routines for all of the callbacks - quite the contrary!</p>
-
-    <p>The example module is an actual working module. If you link
-    it into your server, enable the "example-handler" handler for a
-    location, and then browse to that location, you will see a
-    display of some of the tracing the example module did as the
-    various callbacks were made.</p>
-</summary><h2>Directives</h2><ul><li><a href="#example">Example</a></li></ul><h2>Compiling the example module</h2>
-
-    <p>To include the example module in your server, follow the
-    steps below:</p>
-
-    <ol>
-      <li>
-        Uncomment the "AddModule modules/example/mod_example" line
-        near the bottom of the <code>src/Configuration</code> file.
-        If there isn't one, add it; it should look like this: 
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-     AddModule modules/example/mod_example.o
-</code></td></tr></table></blockquote>
-      </li>
-
-      <li>Run the <code>src/Configure</code> script
-      ("<code>cd&nbsp;src;&nbsp;./Configure</code>"). This will
-      build the Makefile for the server itself, and update the
-      <code>src/modules/Makefile</code> for any additional modules
-      you have requested from beneath that subdirectory.</li>
-
-      <li>Make the server (run "<code>make</code>" in the
-      <code>src</code> directory).</li>
-    </ol>
-
-    <p>To add another module of your own:</p>
-
-    <ol type="A">
-      <li><code>mkdir src/modules/<em>mymodule</em></code></li>
-
-      <li><code>cp src/modules/example/*
-      src/modules/<em>mymodule</em></code></li>
-
-      <li>Modify the files in the new directory.</li>
-
-      <li>Follow steps [1] through [3] above, with appropriate
-      changes.</li>
-    </ol>
-<h2>Using the <code>mod_example</code> Module</h2>
-
-    <p>To activate the example module, include a block similar to
-    the following in your <code>srm.conf</code> file:</p>
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-   &lt;Location /example-info&gt;<br>
-       SetHandler example-handler<br>
-   &lt;/Location&gt;
-</code></td></tr></table></blockquote>
-
-    <p>As an alternative, you can put the following into a <a href="core.html#accessfilename"><code>.htaccess</code></a> file
-    and then request the file "test.example" from that location:</p>
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-   AddHandler example-handler .example
-</code></td></tr></table></blockquote>
-
-    <p>After reloading/restarting your server, you should be able
-    to browse to this location and see the brief display mentioned
-    earlier.</p>
-<hr/><h2><a name="Example">Example</a> <a name="example">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Demonstration directive to illustrate the Apache module
-API</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>Example</syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Experimental</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_example</td></tr></table></td></tr></table><usage>
-    <p>The <code class="directive">Example</code> directive just sets a demonstration
-    flag which the example module's content handler displays. It
-    takes no arguments. If you browse to an URL to which the
-    example content-handler applies, you will get a display of the
-    routines within the module and how and in what order they were
-    called to service the document request. The effect of this
-    directive one can observe under the point "<code>Example
-    directive declared here: YES/NO</code>".</p>
-</usage><hr/><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img alt="Index" src="../images/index.gif"/></a><a href="../"><img alt="Home" src="../images/home.gif"/></a></blockquote></body></html>
\ No newline at end of file
diff --git a/docs/manual/mod/mod_example.xml b/docs/manual/mod/mod_example.xml
deleted file mode 100644
index 97bd72f..0000000
--- a/docs/manual/mod/mod_example.xml
+++ /dev/null
@@ -1,120 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.xsl"?>
-<modulesynopsis>
-
-<name>mod_example</name>
-<description>Illustrates the Apache module API</description>
-<status>Experimental</status>
-<sourcefile>mod_example.c</sourcefile>
-<identifier>example_module</identifier>
-
-<summary>
-<note type="warning">
-      This document has not been updated
-      to take into account changes made in the 2.0 version of the
-      Apache HTTP Server. Some of the information may still be
-      relevant, but please use it with care.
-</note>
-
-    <p>The files in the <code>src/modules/example directory</code>
-    under the Apache distribution directory tree are provided as an
-    example to those that wish to write modules that use the Apache
-    API.</p>
-
-    <p>The main file is <code>mod_example.c</code>, which
-    illustrates all the different callback mechanisms and call
-    syntaxes. By no means does an add-on module need to include
-    routines for all of the callbacks - quite the contrary!</p>
-
-    <p>The example module is an actual working module. If you link
-    it into your server, enable the "example-handler" handler for a
-    location, and then browse to that location, you will see a
-    display of some of the tracing the example module did as the
-    various callbacks were made.</p>
-</summary>
-
-<section><title>Compiling the example module</title>
-
-    <p>To include the example module in your server, follow the
-    steps below:</p>
-
-    <ol>
-      <li>
-        Uncomment the "AddModule modules/example/mod_example" line
-        near the bottom of the <code>src/Configuration</code> file.
-        If there isn't one, add it; it should look like this: 
-<example>
-     AddModule modules/example/mod_example.o
-</example>
-      </li>
-
-      <li>Run the <code>src/Configure</code> script
-      ("<code>cd&nbsp;src;&nbsp;./Configure</code>"). This will
-      build the Makefile for the server itself, and update the
-      <code>src/modules/Makefile</code> for any additional modules
-      you have requested from beneath that subdirectory.</li>
-
-      <li>Make the server (run "<code>make</code>" in the
-      <code>src</code> directory).</li>
-    </ol>
-
-    <p>To add another module of your own:</p>
-
-    <ol type="A">
-      <li><code>mkdir src/modules/<em>mymodule</em></code></li>
-
-      <li><code>cp src/modules/example/*
-      src/modules/<em>mymodule</em></code></li>
-
-      <li>Modify the files in the new directory.</li>
-
-      <li>Follow steps [1] through [3] above, with appropriate
-      changes.</li>
-    </ol>
-</section>
-
-<section><title>Using the <code>mod_example</code> Module</title>
-
-    <p>To activate the example module, include a block similar to
-    the following in your <code>srm.conf</code> file:</p>
-<example>
-   &lt;Location /example-info&gt;<br />
-       SetHandler example-handler<br />
-   &lt;/Location&gt;
-</example>
-
-    <p>As an alternative, you can put the following into a <a
-    href="core.html#accessfilename"><code>.htaccess</code></a> file
-    and then request the file "test.example" from that location:</p>
-<example>
-   AddHandler example-handler .example
-</example>
-
-    <p>After reloading/restarting your server, you should be able
-    to browse to this location and see the brief display mentioned
-    earlier.</p>
-</section>
-
-<directivesynopsis>
-<name>Example</name>
-<description>Demonstration directive to illustrate the Apache module
-API</description>
-<syntax>Example</syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context><context>directory</context>
-<context>.htaccess</context></contextlist>
-
-<usage>
-    <p>The <directive>Example</directive> directive just sets a demonstration
-    flag which the example module's content handler displays. It
-    takes no arguments. If you browse to an URL to which the
-    example content-handler applies, you will get a display of the
-    routines within the module and how and in what order they were
-    called to service the document request. The effect of this
-    directive one can observe under the point "<code>Example
-    directive declared here: YES/NO</code>".</p>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_expires.html b/docs/manual/mod/mod_expires.html
deleted file mode 100644
index d1f63c2..0000000
--- a/docs/manual/mod/mod_expires.html
+++ /dev/null
@@ -1,160 +0,0 @@
-<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-     This file is generated from xml source: DO NOT EDIT
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
---><title>mod_expires - Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img alt="[APACHE DOCUMENTATION]" src="../images/sub.gif"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module mod_expires</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td><description>Generation of
-    <code>Expires</code> HTTP headers according to user-specified
-    criteria</description></td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="module-dict.html#ModuleIdentifier" class="help">Module&nbsp;Identifier:</a></td><td>expires_module</td></tr></table></td></tr></table><h2>Summary</h2><summary>
-    <p>This module controls the setting of the <code>Expires</code>
-    HTTP header in server responses. The expiration date can set to
-    be relative to either the time the source file was last
-    modified, or to the time of the client access.</p>
-
-    <p>The <code>Expires</code> HTTP header is an instruction to
-    the client about the document's validity and persistence. If
-    cached, the document may be fetched from the cache rather than
-    from the source until this time has passed. After that, the
-    cache copy is considered "expired" and invalid, and a new copy
-    must be obtained from the source.</p>
-</summary><h2>Directives</h2><ul><li><a href="#expiresactive">ExpiresActive</a></li><li><a href="#expiresbytype">ExpiresByType</a></li><li><a href="#expiresdefault">ExpiresDefault</a></li></ul><h2><a name="AltSyn">Alternate Interval
-    Syntax</a></h2>
-
-    <p>The <a href="#expiresdefault" class="directive"><code class="directive">ExpiresDefault</code></a> and 
-    <a href="#expiresbytype" class="directive"><code class="directive">ExpiresByType</code></a> directives
-    can also be defined in a more readable syntax of the form:</p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-       ExpiresDefault "&lt;base&gt; [plus] {&lt;num&gt;
-      &lt;type&gt;}*"<br>
-       ExpiresByType type/encoding "&lt;base&gt; [plus]
-      {&lt;num&gt; &lt;type&gt;}*"
-</code></td></tr></table></blockquote>
-
-    <p>where &lt;base&gt; is one of:</p>
-
-    <ul>
-      <li><code>access</code></li>
-
-      <li><code>now</code> (equivalent to
-      '<code>access</code>')</li>
-
-      <li><code>modification</code></li>
-    </ul>
-
-    <p>The '<code>plus</code>' keyword is optional. &lt;num&gt;
-    should be an integer value [acceptable to <code>atoi()</code>],
-    and &lt;type&gt; is one of:</p>
-
-    <ul>
-      <li><code>years</code></li>
-
-      <li><code>months</code></li>
-
-      <li><code>weeks</code></li>
-
-      <li><code>days</code></li>
-
-      <li><code>hours</code></li>
-
-      <li><code>minutes</code></li>
-
-      <li><code>seconds</code></li>
-    </ul>
-
-    <p>For example, any of the following directives can be used to
-    make documents expire 1 month after being accessed, by
-    default:</p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-       ExpiresDefault "access plus 1 month"<br>
-       ExpiresDefault "access plus 4 weeks"<br>
-       ExpiresDefault "access plus 30 days"
-</code></td></tr></table></blockquote>
-
-    <p>The expiry time can be fine-tuned by adding several
-    '&lt;num&gt; &lt;type&gt;' clauses:</p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-ExpiresByType text/html "access plus 1 month 15
-      days 2 hours"<br>
-       ExpiresByType image/gif "modification plus 5 hours 3
-      minutes"
-</code></td></tr></table></blockquote>
-
-    <p>Note that if you use a modification date based setting, the
-    Expires header will <strong>not</strong> be added to content
-    that does not come from a file on disk. This is due to the fact
-    that there is no modification time for such content.</p>
-<hr/><h2><a name="ExpiresActive">ExpiresActive</a> <a name="expiresactive">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Enables generation of Expires headers</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>ExpiresActive On|Off</syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>Indexes</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_expires</td></tr></table></td></tr></table><usage>
-    <p>This directive enables or disables the generation of the
-    <code>Expires</code> header for the document realm in question.
-    (That is, if found in an <code>.htaccess</code> file, for
-    instance, it applies only to documents generated from that
-    directory.) If set to <em><code>Off</code></em>, no
-    <code>Expires</code> header will be generated for any document
-    in the realm (unless overridden at a lower level, such as an
-    <code>.htaccess</code> file overriding a server config file).
-    If set to <em><code>On</code></em>, the header will be added to
-    served documents according to the criteria defined by the 
-    <a href="#expiresbytype" class="directive"><code class="directive">ExpiresByType</code></a> and 
-    <a href="#expiresdefault" class="directive"><code class="directive">ExpiresDefault</code></a> directives
-    (<em>q.v.</em>).</p>
-
-    <p>Note that this directive does not guarantee that an
-    <code>Expires</code> header will be generated. If the criteria
-    aren't met, no header will be sent, and the effect will be as
-    though this directive wasn't even specified.</p>
-</usage><hr/><h2><a name="ExpiresByType">ExpiresByType</a> <a name="expiresbytype">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Value of the Expires header configured
-by MIME type</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>ExpiresByType
-    <em>MIME-type &lt;code&gt;seconds</em></syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>Indexes</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_expires</td></tr></table></td></tr></table><usage>
-    <p>This directive defines the value of the <code>Expires</code>
-    header generated for documents of the specified type
-    (<em>e.g.</em>, <code>text/html</code>). The second argument
-    sets the number of seconds that will be added to a base time to
-    construct the expiration date.</p>
-
-    <p>The base time is either the last modification time of the
-    file, or the time of the client's access to the document. Which
-    should be used is specified by the
-    <code><em>&lt;code&gt;</em></code> field; <strong>M</strong>
-    means that the file's last modification time should be used as
-    the base time, and <strong>A</strong> means the client's access
-    time should be used.</p>
-
-    <p>The difference in effect is subtle. If <em>M</em> is used,
-    all current copies of the document in all caches will expire at
-    the same time, which can be good for something like a weekly
-    notice that's always found at the same URL. If <em>A</em> is
-    used, the date of expiration is different for each client; this
-    can be good for image files that don't change very often,
-    particularly for a set of related documents that all refer to
-    the same images (<em>i.e.</em>, the images will be accessed
-    repeatedly within a relatively short timespan).</p>
-
-    <p><strong>Example:</strong></p>
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-# enable expirations<br>
-ExpiresActive On<br>
-# expire GIF images after a month in the client's cache<br>
-ExpiresByType image/gif A2592000<br>
-# HTML documents are good for a week from the time they were changed<br>
-ExpiresByType text/html M604800
-</code></td></tr></table></blockquote>
-
-    <p>Note that this directive only has effect if
-    <code>ExpiresActive On</code> has been specified. It overrides,
-    for the specified MIME type <em>only</em>, any expiration date
-    set by the <a href="#expiresdefault" class="directive"><code class="directive">ExpiresDefault</code></a>
-    directive.</p>
-
-    <p>You can also specify the expiration time calculation using
-    an <a href="#AltSyn">alternate syntax</a>, described earlier in
-    this document.</p>
-</usage><hr/><h2><a name="ExpiresDefault">ExpiresDefault</a> <a name="expiresdefault">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Default algorithm for calculating expiration time</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>ExpiresDefault <em>&lt;code&gt;seconds</em></syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>Indexes</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_expires</td></tr></table></td></tr></table><usage>
-    <p>This directive sets the default algorithm for calculating the
-    expiration time for all documents in the affected realm. It can be
-    overridden on a type-by-type basis by the <a href="#expiresbytype" class="directive"><code class="directive">ExpiresByType</code></a> directive. See the
-    description of that directive for details about the syntax of the
-    argument, and the <a href="#AltSyn">alternate syntax</a>
-    description as well.</p>
-</usage><hr/><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img alt="Index" src="../images/index.gif"/></a><a href="../"><img alt="Home" src="../images/home.gif"/></a></blockquote></body></html>
\ No newline at end of file
diff --git a/docs/manual/mod/mod_expires.xml b/docs/manual/mod/mod_expires.xml
deleted file mode 100644
index 90ddbe3..0000000
--- a/docs/manual/mod/mod_expires.xml
+++ /dev/null
@@ -1,208 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.xsl"?>
-<modulesynopsis>
-
-<name>mod_expires</name>
-<description>Generation of
-    <code>Expires</code> HTTP headers according to user-specified
-    criteria</description>
-<status>Extension</status>
-<sourcefile>mod_expires.c</sourcefile>
-<identifier>expires_module</identifier>
-
-<summary>
-    <p>This module controls the setting of the <code>Expires</code>
-    HTTP header in server responses. The expiration date can set to
-    be relative to either the time the source file was last
-    modified, or to the time of the client access.</p>
-
-    <p>The <code>Expires</code> HTTP header is an instruction to
-    the client about the document's validity and persistence. If
-    cached, the document may be fetched from the cache rather than
-    from the source until this time has passed. After that, the
-    cache copy is considered "expired" and invalid, and a new copy
-    must be obtained from the source.</p>
-</summary>
-
-<section id="AltSyn"><title>Alternate Interval
-    Syntax</title>
-
-    <p>The <directive module="mod_expires">ExpiresDefault</directive> and 
-    <directive module="mod_expires">ExpiresByType</directive> directives
-    can also be defined in a more readable syntax of the form:</p>
-
-<example>
-       ExpiresDefault "&lt;base&gt; [plus] {&lt;num&gt;
-      &lt;type&gt;}*"<br />
-       ExpiresByType type/encoding "&lt;base&gt; [plus]
-      {&lt;num&gt; &lt;type&gt;}*"
-</example>
-
-    <p>where &lt;base&gt; is one of:</p>
-
-    <ul>
-      <li><code>access</code></li>
-
-      <li><code>now</code> (equivalent to
-      '<code>access</code>')</li>
-
-      <li><code>modification</code></li>
-    </ul>
-
-    <p>The '<code>plus</code>' keyword is optional. &lt;num&gt;
-    should be an integer value [acceptable to <code>atoi()</code>],
-    and &lt;type&gt; is one of:</p>
-
-    <ul>
-      <li><code>years</code></li>
-
-      <li><code>months</code></li>
-
-      <li><code>weeks</code></li>
-
-      <li><code>days</code></li>
-
-      <li><code>hours</code></li>
-
-      <li><code>minutes</code></li>
-
-      <li><code>seconds</code></li>
-    </ul>
-
-    <p>For example, any of the following directives can be used to
-    make documents expire 1 month after being accessed, by
-    default:</p>
-
-<example>
-       ExpiresDefault "access plus 1 month"<br />
-       ExpiresDefault "access plus 4 weeks"<br />
-       ExpiresDefault "access plus 30 days"
-</example>
-
-    <p>The expiry time can be fine-tuned by adding several
-    '&lt;num&gt; &lt;type&gt;' clauses:</p>
-
-<example>
-ExpiresByType text/html "access plus 1 month 15
-      days 2 hours"<br />
-       ExpiresByType image/gif "modification plus 5 hours 3
-      minutes"
-</example>
-
-    <p>Note that if you use a modification date based setting, the
-    Expires header will <strong>not</strong> be added to content
-    that does not come from a file on disk. This is due to the fact
-    that there is no modification time for such content.</p>
-</section>
-
-<directivesynopsis>
-<name>ExpiresActive</name>
-<description>Enables generation of <code>Expires</code> headers</description>
-<syntax>ExpiresActive On|Off</syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context><context>directory</context>
-<context>.htaccess</context></contextlist>
-<override>Indexes</override>
-
-<usage>
-    <p>This directive enables or disables the generation of the
-    <code>Expires</code> header for the document realm in question.
-    (That is, if found in an <code>.htaccess</code> file, for
-    instance, it applies only to documents generated from that
-    directory.) If set to <em><code>Off</code></em>, no
-    <code>Expires</code> header will be generated for any document
-    in the realm (unless overridden at a lower level, such as an
-    <code>.htaccess</code> file overriding a server config file).
-    If set to <em><code>On</code></em>, the header will be added to
-    served documents according to the criteria defined by the 
-    <directive module="mod_expires">ExpiresByType</directive> and 
-    <directive module="mod_expires">ExpiresDefault</directive> directives
-    (<em>q.v.</em>).</p>
-
-    <p>Note that this directive does not guarantee that an
-    <code>Expires</code> header will be generated. If the criteria
-    aren't met, no header will be sent, and the effect will be as
-    though this directive wasn't even specified.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ExpiresByType</name>
-<description>Value of the <code>Expires</code> header configured
-by MIME type</description>
-<syntax>ExpiresByType
-    <em>MIME-type &lt;code&gt;seconds</em></syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context><context>directory</context>
-<context>.htaccess</context></contextlist>
-<override>Indexes</override>
-
-<usage>
-    <p>This directive defines the value of the <code>Expires</code>
-    header generated for documents of the specified type
-    (<em>e.g.</em>, <code>text/html</code>). The second argument
-    sets the number of seconds that will be added to a base time to
-    construct the expiration date.</p>
-
-    <p>The base time is either the last modification time of the
-    file, or the time of the client's access to the document. Which
-    should be used is specified by the
-    <code><em>&lt;code&gt;</em></code> field; <strong>M</strong>
-    means that the file's last modification time should be used as
-    the base time, and <strong>A</strong> means the client's access
-    time should be used.</p>
-
-    <p>The difference in effect is subtle. If <em>M</em> is used,
-    all current copies of the document in all caches will expire at
-    the same time, which can be good for something like a weekly
-    notice that's always found at the same URL. If <em>A</em> is
-    used, the date of expiration is different for each client; this
-    can be good for image files that don't change very often,
-    particularly for a set of related documents that all refer to
-    the same images (<em>i.e.</em>, the images will be accessed
-    repeatedly within a relatively short timespan).</p>
-
-    <p><strong>Example:</strong></p>
-<example>
-# enable expirations<br />
-ExpiresActive On<br />
-# expire GIF images after a month in the client's cache<br />
-ExpiresByType image/gif A2592000<br />
-# HTML documents are good for a week from the time they were changed<br />
-ExpiresByType text/html M604800
-</example>
-
-    <p>Note that this directive only has effect if
-    <code>ExpiresActive On</code> has been specified. It overrides,
-    for the specified MIME type <em>only</em>, any expiration date
-    set by the <directive module="mod_expires">ExpiresDefault</directive>
-    directive.</p>
-
-    <p>You can also specify the expiration time calculation using
-    an <a href="#AltSyn">alternate syntax</a>, described earlier in
-    this document.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ExpiresDefault</name>
-<description>Default algorithm for calculating expiration time</description>
-<syntax>ExpiresDefault <em>&lt;code&gt;seconds</em></syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context><context>directory</context>
-<context>.htaccess</context></contextlist>
-<override>Indexes</override>
-
-<usage>
-    <p>This directive sets the default algorithm for calculating the
-    expiration time for all documents in the affected realm. It can be
-    overridden on a type-by-type basis by the <directive
-    module="mod_expires">ExpiresByType</directive> directive. See the
-    description of that directive for details about the syntax of the
-    argument, and the <a href="#AltSyn">alternate syntax</a>
-    description as well.</p>
-</usage>
-</directivesynopsis>
-</modulesynopsis>
-
diff --git a/docs/manual/mod/mod_ext_filter.html b/docs/manual/mod/mod_ext_filter.html
deleted file mode 100644
index 2f8daed..0000000
--- a/docs/manual/mod/mod_ext_filter.html
+++ /dev/null
@@ -1,204 +0,0 @@
-<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-     This file is generated from xml source: DO NOT EDIT
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
---><title>mod_ext_filter - Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img alt="[APACHE DOCUMENTATION]" src="../images/sub.gif"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module mod_ext_filter</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td><description>Pass the response body
-    through an external program before delivery to the
-    client</description></td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>Experimental</td></tr><tr><td><a href="module-dict.html#ModuleIdentifier" class="help">Module&nbsp;Identifier:</a></td><td>ext_filter_module</td></tr></table></td></tr></table><h2>Summary</h2><summary>
-    <p>This is an <strong>experimental</strong> module and should
-    be used with care. Test your <code><a href="mod_ext_filter.html">mod_ext_filter</a></code>
-    configuration carefully to ensure that it performs the desired
-    function. You may wish to review <a href="../filter.html">
-    this information</a> for background on the Apache filtering 
-    model.</p>
-
-    <p><code><a href="mod_ext_filter.html">mod_ext_filter</a></code> presents a simple and familiar
-    programming model for filters. With this module, a program
-    which reads from stdin and writes to stdout (i.e., a Unix-style
-    filter command) can be a filter for Apache. This filtering
-    mechanism is much slower than using a filter which is specially
-    written for the Apache API and runs inside of the Apache server
-    process, but it does have the following benefits:</p>
-
-    <ul>
-      <li>the programming model is much simpler</li>
-
-      <li>any programming/scripting language can be used, provided
-      that it allows the program to read from standard input and
-      write to standard output</li>
-
-      <li>existing programs can be used unmodified as Apache
-      filters</li>
-    </ul>
-
-    <p>Even when the performance characteristics are not suitable
-    for production use, <code>mod_ext_filter</code> can be used as
-    a prototype environment for filters.</p>
-</summary><h2>Directives</h2><ul><li><a href="#extfilterdefine">ExtFilterDefine</a></li><li><a href="#extfilteroptions">ExtFilterOptions</a></li></ul><h2>Examples</h2>
-
-<h3>Generating HTML from some other type of response</h3>
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-<pre>
-    # mod_ext_filter directive to define a filter to HTML-ize text/c files 
-    # using the external program /usr/bin/enscript, with the type of the 
-    # result set to text/html
-    ExtFilterDefine c-to-html mode=output intype=text/c outtype=text/html \
-                    cmd="/usr/bin/enscript --color -W html -Ec -o - -"
-
-    &lt;Directory "/export/home/trawick/apacheinst/htdocs/c"&gt;
-
-    # core directive to cause the new filter to be run on output
-    SetOutputFilter c-to-html
-
-    # mod_mime directive to set the type of .c files to text/c
-    AddType text/c .c
-
-    # mod_ext_filter directive to set the debug level just high 
-    # enough to see a log message per request showing the configuration
-    # in force
-    ExtFilterOptions DebugLevel=1
-
-    &lt;/Directory&gt;
-</pre>
-</code></td></tr></table></blockquote>
-
-
-<h3>Implementing a content encoding filter</h3>
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-<pre>
-  # mod_ext_filter directive to define the external filter
-  ExtFilterDefine gzip mode=output cmd=/bin/gzip
-
-  &lt;Location /gzipped&gt;
-
-  # core directive to cause the gzip filter to be run on output
-  SetOutputFilter gzip
-
-  # mod_header directive to add "Content-Encoding: gzip" header field
-  Header set Content-Encoding gzip
-
-  &lt;/Location&gt;
-</pre>
-</code></td></tr></table></blockquote>
-
-  <p>Note: this gzip example is just for the purposes of illustration.
-  Please refer to <code><a href="mod_deflate.html">mod_deflate</a></code> for a practical
-  implementation.</p>
-
-
-<h3>Slowing down the server</h3>
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-<pre>
-  # mod_ext_filter directive to define a filter which runs everything 
-  # through cat; cat doesn't modify anything; it just introduces extra
-  # pathlength and consumes more resources
-  ExtFilterDefine slowdown mode=output cmd=/bin/cat preservescontentlength
-
-  &lt;Location /&gt;
-
-  # core directive to cause the slowdown filter to be run several times on 
-  # output
-  SetOutputFilter slowdown slowdown slowdown
-
-  &lt;/Location&gt;
-</pre>
-</code></td></tr></table></blockquote>
-
-
-<hr/><h2><a name="ExtFilterDefine">ExtFilterDefine</a> <a name="extfilterdefine">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td/></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>ExtFilterDefine <em>filtername</em> <em>parameters</em></syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Experimental</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_ext_filter</td></tr></table></td></tr></table><usage>
-    <p>The <code class="directive">ExtFilterDefine</code> directive defines the
-    characteristics of an external filter, including the program to
-    run and its arguments.</p>
-
-    <p><em>filtername</em> specifies the name of the filter being
-    defined. This name can then be used in SetOutputFilter
-    directives. It must be unique among all registered filters.
-    <em>At the present time, no error is reported by the
-    register-filter API, so a problem with duplicate names isn't
-    reported to the user.</em></p>
-
-    <p>Subsequent parameters can appear in any order and define the
-    external command to run and certain other characteristics. The
-    only required parameter is <em>cmd=</em>. These parameters
-    are:</p>
-
-    <dl>
-      <dt>cmd=<em>cmdline</em></dt>
-
-      <dd>The <code>cmd=</code> keyword allows you to specify the
-      external command to run. If there are arguments after the
-      program name, the command line should be surrounded in
-      quotation marks.</dd>
-
-      <dt>mode=<em>mode</em></dt>
-
-      <dd><em>mode</em> should be <em>output</em> for now (the
-      default). In the future, <em>mode=input</em> will be used to
-      specify a filter for request bodies.</dd>
-
-      <dt>intype=<em>imt</em></dt>
-
-      <dd>This parameter specifies the internet media type (i.e.,
-      MIME type) of documents which should be filtered. By default,
-      all documents are filtered. If <code>intype=</code> is
-      specified, the filter will be disabled for documents of other
-      types.</dd>
-
-      <dt>outtype=<em>imt</em></dt>
-
-      <dd>This parameter specifies the internet media type (i.e.,
-      MIME type) of filtered documents. It is useful when the
-      filter changes the internet media type as part of the
-      filtering operation. By default, the internet media type is
-      unchanged.</dd>
-
-      <dt>PreservesContentLength</dt>
-
-      <dd>The <code>PreservesContentLength</code> keyword specifies
-      that the filter preserves the content length. This is not the
-      default, as most filters change the content length. In the
-      event that the filter doesn't modify the length, this keyword
-      should be specified.</dd>
-    </dl>
-</usage><hr/><h2><a name="ExtFilterOptions">ExtFilterOptions</a> <a name="extfilteroptions">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td/></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>ExtFilterOptions
-    <em>option</em> [<em>option</em>] ...</syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>ExtFilterOptions DebugLevel=0 NoLogStderr</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>directory</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Experimental</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_ext_filter</td></tr></table></td></tr></table><usage>
-    <p>The <code class="directive">ExtFilterOptions</code> directive specifies
-    special processing options for <code>mod_ext_filter</code>.
-    <em>Option</em> can be one of</p>
-
-    <dl>
-      <dt>DebugLevel=<em>n</em></dt>
-
-      <dd>
-        The <code>DebugLevel</code> keyword allows you to specify
-        the level of debug messages generated by
-        <code>mod_ext_filter</code>. By default, no debug messages
-        are generated. This is equivalent to
-        <code>DebugLevel=0</code>. With higher numbers, more debug
-        messages are generated, and server performance will be
-        degraded. The actual meanings of the numeric values are
-        described with the definitions of the DBGLVL_ constants
-        near the beginning of <code>mod_ext_filter.c</code>. 
-
-        <p>Note: The core directive LogLevel should be used to
-        cause debug messages to be stored in the Apache error
-        log.</p>
-      </dd>
-
-      <dt>LogStderr | NoLogStderr</dt>
-
-      <dd>The <code>LogStderr</code> keyword specifies that
-      messages written to standard error by the external filter
-      program will be saved in the Apache error log.
-      <code>NoLogStderr</code> disables this feature.</dd>
-    </dl>
-
-     <p>Example:</p>
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-    ExtFilterOptions  LogStderr DebugLevel=0
-</code></td></tr></table></blockquote>
-
-    <p>Messages written to the filter's standard error will be stored
-    in the Apache error log. No debug messages will be generated by
-    <code><a href="mod_ext_filter.html">mod_ext_filter</a></code>. </p>
-</usage><hr/><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img alt="Index" src="../images/index.gif"/></a><a href="../"><img alt="Home" src="../images/home.gif"/></a></blockquote></body></html>
\ No newline at end of file
diff --git a/docs/manual/mod/mod_ext_filter.xml b/docs/manual/mod/mod_ext_filter.xml
deleted file mode 100644
index 20dd458..0000000
--- a/docs/manual/mod/mod_ext_filter.xml
+++ /dev/null
@@ -1,232 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.xsl"?>
-<modulesynopsis>
-
-<name>mod_ext_filter</name>
-<description>Pass the response body
-    through an external program before delivery to the
-    client</description>
-<status>Experimental</status>
-<sourcefile>mod_ext_filter.c</sourcefile>
-<identifier>ext_filter_module</identifier>
-
-<summary>
-    <p>This is an <strong>experimental</strong> module and should
-    be used with care. Test your <module>mod_ext_filter</module>
-    configuration carefully to ensure that it performs the desired
-    function. You may wish to review <a href="../filter.html">
-    this information</a> for background on the Apache filtering 
-    model.</p>
-
-    <p><module>mod_ext_filter</module> presents a simple and familiar
-    programming model for filters. With this module, a program
-    which reads from stdin and writes to stdout (i.e., a Unix-style
-    filter command) can be a filter for Apache. This filtering
-    mechanism is much slower than using a filter which is specially
-    written for the Apache API and runs inside of the Apache server
-    process, but it does have the following benefits:</p>
-
-    <ul>
-      <li>the programming model is much simpler</li>
-
-      <li>any programming/scripting language can be used, provided
-      that it allows the program to read from standard input and
-      write to standard output</li>
-
-      <li>existing programs can be used unmodified as Apache
-      filters</li>
-    </ul>
-
-    <p>Even when the performance characteristics are not suitable
-    for production use, <code>mod_ext_filter</code> can be used as
-    a prototype environment for filters.</p>
-</summary>
-
-<section><title>Examples</title>
-
-<section><title>Generating HTML from some other type of response</title>
-<example>
-<pre>
-    # mod_ext_filter directive to define a filter to HTML-ize text/c files 
-    # using the external program /usr/bin/enscript, with the type of the 
-    # result set to text/html
-    ExtFilterDefine c-to-html mode=output intype=text/c outtype=text/html \
-                    cmd="/usr/bin/enscript --color -W html -Ec -o - -"
-
-    &lt;Directory "/export/home/trawick/apacheinst/htdocs/c"&gt;
-
-    # core directive to cause the new filter to be run on output
-    SetOutputFilter c-to-html
-
-    # mod_mime directive to set the type of .c files to text/c
-    AddType text/c .c
-
-    # mod_ext_filter directive to set the debug level just high 
-    # enough to see a log message per request showing the configuration
-    # in force
-    ExtFilterOptions DebugLevel=1
-
-    &lt;/Directory&gt;
-</pre>
-</example>
-</section>
-
-<section><title>Implementing a content encoding filter</title>
-<example>
-<pre>
-  # mod_ext_filter directive to define the external filter
-  ExtFilterDefine gzip mode=output cmd=/bin/gzip
-
-  &lt;Location /gzipped&gt;
-
-  # core directive to cause the gzip filter to be run on output
-  SetOutputFilter gzip
-
-  # mod_header directive to add "Content-Encoding: gzip" header field
-  Header set Content-Encoding gzip
-
-  &lt;/Location&gt;
-</pre>
-</example>
-
-  <p>Note: this gzip example is just for the purposes of illustration.
-  Please refer to <module>mod_deflate</module> for a practical
-  implementation.</p>
-</section>
-
-<section><title>Slowing down the server</title>
-<example>
-<pre>
-  # mod_ext_filter directive to define a filter which runs everything 
-  # through cat; cat doesn't modify anything; it just introduces extra
-  # pathlength and consumes more resources
-  ExtFilterDefine slowdown mode=output cmd=/bin/cat preservescontentlength
-
-  &lt;Location /&gt;
-
-  # core directive to cause the slowdown filter to be run several times on 
-  # output
-  SetOutputFilter slowdown slowdown slowdown
-
-  &lt;/Location&gt;
-</pre>
-</example>
-</section>
-
-</section> <!-- Examples -->
-
-<directivesynopsis>
-<name>ExtFilterDefine</name>
-<syntax>ExtFilterDefine <em>filtername</em> <em>parameters</em></syntax>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
-    <p>The <directive>ExtFilterDefine</directive> directive defines the
-    characteristics of an external filter, including the program to
-    run and its arguments.</p>
-
-    <p><em>filtername</em> specifies the name of the filter being
-    defined. This name can then be used in SetOutputFilter
-    directives. It must be unique among all registered filters.
-    <em>At the present time, no error is reported by the
-    register-filter API, so a problem with duplicate names isn't
-    reported to the user.</em></p>
-
-    <p>Subsequent parameters can appear in any order and define the
-    external command to run and certain other characteristics. The
-    only required parameter is <em>cmd=</em>. These parameters
-    are:</p>
-
-    <dl>
-      <dt>cmd=<em>cmdline</em></dt>
-
-      <dd>The <code>cmd=</code> keyword allows you to specify the
-      external command to run. If there are arguments after the
-      program name, the command line should be surrounded in
-      quotation marks.</dd>
-
-      <dt>mode=<em>mode</em></dt>
-
-      <dd><em>mode</em> should be <em>output</em> for now (the
-      default). In the future, <em>mode=input</em> will be used to
-      specify a filter for request bodies.</dd>
-
-      <dt>intype=<em>imt</em></dt>
-
-      <dd>This parameter specifies the internet media type (i.e.,
-      MIME type) of documents which should be filtered. By default,
-      all documents are filtered. If <code>intype=</code> is
-      specified, the filter will be disabled for documents of other
-      types.</dd>
-
-      <dt>outtype=<em>imt</em></dt>
-
-      <dd>This parameter specifies the internet media type (i.e.,
-      MIME type) of filtered documents. It is useful when the
-      filter changes the internet media type as part of the
-      filtering operation. By default, the internet media type is
-      unchanged.</dd>
-
-      <dt>PreservesContentLength</dt>
-
-      <dd>The <code>PreservesContentLength</code> keyword specifies
-      that the filter preserves the content length. This is not the
-      default, as most filters change the content length. In the
-      event that the filter doesn't modify the length, this keyword
-      should be specified.</dd>
-    </dl>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ExtFilterOptions</name>
-<syntax>ExtFilterOptions
-    <em>option</em> [<em>option</em>] ...</syntax>
-<default>ExtFilterOptions DebugLevel=0 NoLogStderr</default>
-<contextlist><context>directory</context></contextlist>
-
-<usage>
-    <p>The <directive>ExtFilterOptions</directive> directive specifies
-    special processing options for <code>mod_ext_filter</code>.
-    <em>Option</em> can be one of</p>
-
-    <dl>
-      <dt>DebugLevel=<em>n</em></dt>
-
-      <dd>
-        The <code>DebugLevel</code> keyword allows you to specify
-        the level of debug messages generated by
-        <code>mod_ext_filter</code>. By default, no debug messages
-        are generated. This is equivalent to
-        <code>DebugLevel=0</code>. With higher numbers, more debug
-        messages are generated, and server performance will be
-        degraded. The actual meanings of the numeric values are
-        described with the definitions of the DBGLVL_ constants
-        near the beginning of <code>mod_ext_filter.c</code>. 
-
-        <p>Note: The core directive LogLevel should be used to
-        cause debug messages to be stored in the Apache error
-        log.</p>
-      </dd>
-
-      <dt>LogStderr | NoLogStderr</dt>
-
-      <dd>The <code>LogStderr</code> keyword specifies that
-      messages written to standard error by the external filter
-      program will be saved in the Apache error log.
-      <code>NoLogStderr</code> disables this feature.</dd>
-    </dl>
-
-     <p>Example:</p>
-<example>
-    ExtFilterOptions  LogStderr DebugLevel=0
-</example>
-
-    <p>Messages written to the filter's standard error will be stored
-    in the Apache error log. No debug messages will be generated by
-    <module>mod_ext_filter</module>. </p>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
\ No newline at end of file
diff --git a/docs/manual/mod/mod_file_cache.html b/docs/manual/mod/mod_file_cache.html
deleted file mode 100644
index 724f33a..0000000
--- a/docs/manual/mod/mod_file_cache.html
+++ /dev/null
@@ -1,147 +0,0 @@
-<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-     This file is generated from xml source: DO NOT EDIT
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
---><title>mod_file_cache - Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img alt="[APACHE DOCUMENTATION]" src="../images/sub.gif"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module mod_file_cache</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td><description>Caches a static list of files in memory</description></td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>Experimental</td></tr><tr><td><a href="module-dict.html#ModuleIdentifier" class="help">Module&nbsp;Identifier:</a></td><td>file_cache_module</td></tr></table></td></tr></table><h2>Summary</h2><summary>
-
-<blockquote><table><tr><td bgcolor="#ffe5f5">
-This module should be used with care. You can easily
-    create a broken site using mod_file_cache, so read this
-    document carefully.
-</td></tr></table></blockquote>
-
-    <p><em>Caching</em> frequently requested files that change very
-    infrequently is a technique for reducing server load.
-    mod_file_cache provides two techniques for caching frequently
-    requested <em>static</em> files. Through configuration
-    directives, you can direct mod_file_cache to either open then
-    mmap()a file, or to pre-open a file and save the file's open
-    <em>file handle</em>. Both techniques reduce server load when
-    processing requests for these files by doing part of the work
-    (specifically, the file I/O) for serving the file when the
-    server is started rather than during each request.</p>
-
-    <p>Notice: You cannot use this for speeding up CGI programs or
-    other files which are served by special content handlers. It
-    can only be used for regular files which are usually served by
-    the Apache core content handler.</p>
-
-    <p>This module is an extension of and borrows heavily from the
-    mod_mmap_static module in Apache 1.3.</p>
-</summary><h2>Directives</h2><ul><li><a href="#cachefile">CacheFile</a></li><li><a href="#mmapfile">MMapFile</a></li></ul><h2>Using mod_file_cache</h2>
-
-    <p><code><a href="mod_file_cache.html">mod_file_cache</a></code> caches a list of statically
-    configured files via <a href="#mmapfile" class="directive"><code class="directive">MMapFile</code></a> or <a href="#cachefile" class="directive"><code class="directive">CacheFile</code></a> directives in the
-    main server configuration.</p>
-
-    <p>Not all platforms support both directives. For example, Apache
-    on Windows does not currently support the <a href="#mmapstatic" class="directive"><code class="directive">MMapStatic</code></a> directive, while
-    other platforms, like AIX, support both. You will receive an error
-    message in the server error log if you attempt to use an
-    unsupported directive. If given an unsupported directive, the
-    server will start but the file will not be cached. On platforms
-    that support both directives, you should experiment with both to
-    see which works best for you.</p>
-
-<h3>MmapFile Directive</h3>
-
-    <p>The <a href="#mmapfile" class="directive"><code class="directive">MmapFile</code></a>
-    directive of <code><a href="mod_file_cache.html">mod_file_cache</a></code> maps a list of
-    statically configured files into memory through the system call
-    <code>mmap()</code>. This system call is available on most modern
-    Unix derivates, but not on all. There are sometimes
-    system-specific limits on the size and number of files that can be
-    mmap()d, experimentation is probably the easiest way to find
-    out.</p>
-
-    <p>This mmap()ing is done once at server start or restart,
-    only. So whenever one of the mapped files changes on the
-    filesystem you <em>have</em> to restart the server (see the <a href="../stopping.html">Stopping and Restarting</a>
-    documentation). To reiterate that point: if the files are
-    modified <em>in place</em> without restarting the server you
-    may end up serving requests that are completely bogus. You
-    should update files by unlinking the old copy and putting a new
-    copy in place. Most tools such as <code>rdist</code> and
-    <code>mv</code> do this. The reason why this modules doesn't
-    take care of changes to the files is that this check would need
-    an extra <code>stat()</code> every time which is a waste and
-    against the intent of I/O reduction.</p>
-
-
-<h3>CacheFile Directive</h3>
-
-    <p>The <a href="#cachefile" class="directive"><code class="directive">CacheFile</code></a>
-    directive of <code><a href="mod_file_cache.html">mod_file_cache</a></code> opens an active
-    <em>handle</em> or <em>file descriptor</em> to the file (or files)
-    listed in the configuration directive and places these open file
-    handles in the cache. When the file is requested, the server
-    retrieves the handle from the cache and passes it to the
-    sendfile() (or TransmitFile() on Windows), socket API.</p>
-
-    <p>Insert more details about sendfile API...</p>
-
-    <p>This file handle caching is done once at server start or
-    restart, only. So whenever one of the cached files changes on
-    the filesystem you <em>have</em> to restart the server (see the
-    <a href="../stopping.html">Stopping and Restarting</a>
-    documentation). To reiterate that point: if the files are
-    modified <em>in place</em> without restarting the server you
-    may end up serving requests that are completely bogus. You
-    should update files by unlinking the old copy and putting a new
-    copy in place. Most tools such as <code>rdist</code> and
-    <code>mv</code> do this.</p>
-
-
-<blockquote><table><tr><td bgcolor="#e0e5f5"><p align="center"><strong>Note</strong></p> Don't bother asking for a for a
-    directive which recursively caches all the files in a
-    directory. Try this instead... See the 
-    <a href="core.html#include" class="directive"><code class="directive">Include</code></a> directive, and consider
-    this command:
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-  find /www/htdocs -type f -print \ <br>
-  | sed -e 's/.*/mmapfile &amp;/' &gt; /www/conf/mmap.conf
-</code></td></tr></table></blockquote>
-</td></tr></table></blockquote>
-
-<hr/><h2><a name="CacheFile">CacheFile</a> <a name="cachefile">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td/></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>CacheFile
-    <em>file-path</em> [<em>file-path</em>] ...</syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Experimental</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_file_cache</td></tr></table></td></tr></table><usage>
-    <p>The <code class="directive">CacheFile</code> directive opens handles to
-    one or more files (given as whitespace separated arguments) and
-    places these handles into the cache at server startup
-    time. Handles to cached files are automatically closed on a server
-    shutdown.  When the files have changed on the filesystem, the
-    server should be restarted to to re-cache them.</p>
-
-    <p>Be careful with the <em>file-path</em> arguments: They have
-    to literally match the filesystem path Apache's URL-to-filename
-    translation handlers create. We cannot compare inodes or other
-    stuff to match paths through symbolic links <em>etc.</em>
-    because that again would cost extra <code>stat()</code> system
-    calls which is not acceptable. This module may or may not work
-    with filenames rewritten by <code><a href="mod_alias.html">mod_alias</a></code> or
-    <code><a href="mod_rewrite.html">mod_rewrite</a></code>.</p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><p align="center"><strong>Example</strong></p><code>
-  CacheFile /usr/local/apache/htdocs/index.html
-</code></td></tr></table></blockquote>
-</usage><hr/><h2><a name="MMapFile">MMapFile</a> <a name="mmapfile">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td/></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>MMapFile <em>file-path</em> [<em>file-path</em>] ...</syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Experimental</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_file_cache</td></tr></table></td></tr></table><usage>
-    <p>The <code class="directive">MMapFile</code> directive maps one or more files
-    (given as whitespace separated arguments) into memory at server
-    startup time. They are automatically unmapped on a server
-    shutdown. When the files have changed on the filesystem at
-    least a HUP or USR1 signal should be send to the server to
-    re-mmap them.</p>
-
-    <p>Be careful with the <em>file-path</em> arguments: They have
-    to literally match the filesystem path Apache's URL-to-filename
-    translation handlers create. We cannot compare inodes or other
-    stuff to match paths through symbolic links <em>etc.</em>
-    because that again would cost extra <code>stat()</code> system
-    calls which is not acceptable. This module may or may not work
-    with filenames rewritten by <code><a href="mod_alias.html">mod_alias</a></code> or
-    <code><a href="mod_rewrite.html">mod_rewrite</a></code>.</p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><p align="center"><strong>Example</strong></p><code>
-  MMapFile /usr/local/apache/htdocs/index.html
-</code></td></tr></table></blockquote>
-</usage><hr/><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img alt="Index" src="../images/index.gif"/></a><a href="../"><img alt="Home" src="../images/home.gif"/></a></blockquote></body></html>
\ No newline at end of file
diff --git a/docs/manual/mod/mod_file_cache.xml b/docs/manual/mod/mod_file_cache.xml
deleted file mode 100644
index 3e6f4a4..0000000
--- a/docs/manual/mod/mod_file_cache.xml
+++ /dev/null
@@ -1,178 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.xsl"?>
-<modulesynopsis>
-
-<name>mod_file_cache</name>
-<description>Caches a static list of files in memory</description>
-<status>Experimental</status>
-<sourcefile>mod_file_cache.c</sourcefile>
-<identifier>file_cache_module</identifier>
-
-<summary>
-
-<note type="warning">
-This module should be used with care. You can easily
-    create a broken site using mod_file_cache, so read this
-    document carefully.
-</note>
-
-    <p><em>Caching</em> frequently requested files that change very
-    infrequently is a technique for reducing server load.
-    mod_file_cache provides two techniques for caching frequently
-    requested <em>static</em> files. Through configuration
-    directives, you can direct mod_file_cache to either open then
-    mmap()a file, or to pre-open a file and save the file's open
-    <em>file handle</em>. Both techniques reduce server load when
-    processing requests for these files by doing part of the work
-    (specifically, the file I/O) for serving the file when the
-    server is started rather than during each request.</p>
-
-    <p>Notice: You cannot use this for speeding up CGI programs or
-    other files which are served by special content handlers. It
-    can only be used for regular files which are usually served by
-    the Apache core content handler.</p>
-
-    <p>This module is an extension of and borrows heavily from the
-    mod_mmap_static module in Apache 1.3.</p>
-</summary>
-
-<section><title>Using mod_file_cache</title>
-
-    <p><module>mod_file_cache</module> caches a list of statically
-    configured files via <directive
-    module="mod_file_cache">MMapFile</directive> or <directive
-    module="mod_file_cache">CacheFile</directive> directives in the
-    main server configuration.</p>
-
-    <p>Not all platforms support both directives. For example, Apache
-    on Windows does not currently support the <directive
-    module="mod_file_cache">MMapStatic</directive> directive, while
-    other platforms, like AIX, support both. You will receive an error
-    message in the server error log if you attempt to use an
-    unsupported directive. If given an unsupported directive, the
-    server will start but the file will not be cached. On platforms
-    that support both directives, you should experiment with both to
-    see which works best for you.</p>
-
-<section><title>MmapFile Directive</title>
-
-    <p>The <directive module="mod_file_cache">MmapFile</directive>
-    directive of <module>mod_file_cache</module> maps a list of
-    statically configured files into memory through the system call
-    <code>mmap()</code>. This system call is available on most modern
-    Unix derivates, but not on all. There are sometimes
-    system-specific limits on the size and number of files that can be
-    mmap()d, experimentation is probably the easiest way to find
-    out.</p>
-
-    <p>This mmap()ing is done once at server start or restart,
-    only. So whenever one of the mapped files changes on the
-    filesystem you <em>have</em> to restart the server (see the <a
-    href="../stopping.html">Stopping and Restarting</a>
-    documentation). To reiterate that point: if the files are
-    modified <em>in place</em> without restarting the server you
-    may end up serving requests that are completely bogus. You
-    should update files by unlinking the old copy and putting a new
-    copy in place. Most tools such as <code>rdist</code> and
-    <code>mv</code> do this. The reason why this modules doesn't
-    take care of changes to the files is that this check would need
-    an extra <code>stat()</code> every time which is a waste and
-    against the intent of I/O reduction.</p>
-</section>
-
-<section><title>CacheFile Directive</title>
-
-    <p>The <directive module="mod_file_cache">CacheFile</directive>
-    directive of <module>mod_file_cache</module> opens an active
-    <em>handle</em> or <em>file descriptor</em> to the file (or files)
-    listed in the configuration directive and places these open file
-    handles in the cache. When the file is requested, the server
-    retrieves the handle from the cache and passes it to the
-    sendfile() (or TransmitFile() on Windows), socket API.</p>
-
-    <p>Insert more details about sendfile API...</p>
-
-    <p>This file handle caching is done once at server start or
-    restart, only. So whenever one of the cached files changes on
-    the filesystem you <em>have</em> to restart the server (see the
-    <a href="../stopping.html">Stopping and Restarting</a>
-    documentation). To reiterate that point: if the files are
-    modified <em>in place</em> without restarting the server you
-    may end up serving requests that are completely bogus. You
-    should update files by unlinking the old copy and putting a new
-    copy in place. Most tools such as <code>rdist</code> and
-    <code>mv</code> do this.</p>
-</section>
-
-<note><title>Note</title> Don't bother asking for a for a
-    directive which recursively caches all the files in a
-    directory. Try this instead... See the 
-    <directive module="core">Include</directive> directive, and consider
-    this command:
-<example>
-  find /www/htdocs -type f -print \ <br />
-  | sed -e 's/.*/mmapfile &amp;/' &gt; /www/conf/mmap.conf
-</example>
-</note>
-
-</section>
-
-<directivesynopsis>
-<name>MMapFile</name>
-<syntax>MMapFile <em>file-path</em> [<em>file-path</em>] ...</syntax>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
-    <p>The <directive>MMapFile</directive> directive maps one or more files
-    (given as whitespace separated arguments) into memory at server
-    startup time. They are automatically unmapped on a server
-    shutdown. When the files have changed on the filesystem at
-    least a HUP or USR1 signal should be send to the server to
-    re-mmap them.</p>
-
-    <p>Be careful with the <em>file-path</em> arguments: They have
-    to literally match the filesystem path Apache's URL-to-filename
-    translation handlers create. We cannot compare inodes or other
-    stuff to match paths through symbolic links <em>etc.</em>
-    because that again would cost extra <code>stat()</code> system
-    calls which is not acceptable. This module may or may not work
-    with filenames rewritten by <module>mod_alias</module> or
-    <module>mod_rewrite</module>.</p>
-
-<example><title>Example</title>
-  MMapFile /usr/local/apache/htdocs/index.html
-</example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>CacheFile</name>
-<syntax>CacheFile
-    <em>file-path</em> [<em>file-path</em>] ...</syntax>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
-    <p>The <directive>CacheFile</directive> directive opens handles to
-    one or more files (given as whitespace separated arguments) and
-    places these handles into the cache at server startup
-    time. Handles to cached files are automatically closed on a server
-    shutdown.  When the files have changed on the filesystem, the
-    server should be restarted to to re-cache them.</p>
-
-    <p>Be careful with the <em>file-path</em> arguments: They have
-    to literally match the filesystem path Apache's URL-to-filename
-    translation handlers create. We cannot compare inodes or other
-    stuff to match paths through symbolic links <em>etc.</em>
-    because that again would cost extra <code>stat()</code> system
-    calls which is not acceptable. This module may or may not work
-    with filenames rewritten by <module>mod_alias</module> or
-    <module>mod_rewrite</module>.</p>
-
-<example><title>Example</title>
-  CacheFile /usr/local/apache/htdocs/index.html
-</example>
-</usage>
-
-</directivesynopsis>
-</modulesynopsis>
\ No newline at end of file
diff --git a/docs/manual/mod/mod_headers.html b/docs/manual/mod/mod_headers.html
deleted file mode 100644
index f391384..0000000
--- a/docs/manual/mod/mod_headers.html
+++ /dev/null
@@ -1,219 +0,0 @@
-<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-     This file is generated from xml source: DO NOT EDIT
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
---><title>mod_headers - Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img alt="[APACHE DOCUMENTATION]" src="../images/sub.gif"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module mod_headers</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td><description>Customization of HTTP request
-    and response headers</description></td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="module-dict.html#ModuleIdentifier" class="help">Module&nbsp;Identifier:</a></td><td>headers_module</td></tr><tr><td align="left" valign="top"><a href="module-dict.html#Compatibility" class="help">Compatibility:</a></td><td><compatibility>RequestHeader is available only in Apache 2.0</compatibility></td></tr></table></td></tr></table><h2>Summary</h2><summary>
-    <p>This module provides directives to control and modify HTTP
-    request and response headers. Headers can be merged, replaced
-    or removed.</p>
-</summary><h2>Directives</h2><ul><li><a href="#header">Header</a></li><li><a href="#requestheader">RequestHeader</a></li></ul><h2>Order of Processing</h2>
-
-    <p>The directives provided by mod_header can occur almost
-    anywhere within the server configuration. They are valid in the
-    main server config and virtual host sections, inside
-    &lt;Directory&gt;, &lt;Location&gt; and &lt;Files&gt; sections,
-    and within .htaccess files.</p>
-
-    <p>The directives are processed in the following order:</p>
-
-    <ol>
-      <li>main server</li>
-
-      <li>virtual host</li>
-
-      <li>&lt;Directory&gt; sections and .htaccess</li>
-
-      <li>&lt;Location&gt;</li>
-
-      <li>&lt;Files&gt;</li>
-    </ol>
-
-    <p>Order is important. These two headers have a different
-    effect if reversed:</p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-RequestHeader append MirrorID "mirror 12"<br>
-       RequestHeader unset MirrorID
-</code></td></tr></table></blockquote>
-
-    <p>This way round, the MirrorID header is not set. If reversed,
-    the MirrorID header is set to "mirror 12".</p>
-<h2>Example</h2>
-
-    <ol>
-      <li>Copy all request headers that begin with "TS" to the
-      response headers:
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-   Header echo ^TS*
-</code></td></tr></table></blockquote></li>
-
-      <li>Add a header, MyHeader, to the response including a
-      timestamp for when the request was received and how long it
-      took to begin serving the request. This header can be used by
-      the client to intuit load on the server or in isolating
-      bottlenecks between the client and the server.
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-   Header add MyHeader "%D %t"
-</code></td></tr></table></blockquote>
-        results in this header being added to the response:
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-   MyHeader: D=3775428 t=991424704447256
-</code></td></tr></table></blockquote>
-      </li>
-
-      <li>Say hello to Joe
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-   Header add MyHeader "Hello Joe. It took %D microseconds for Apache to serve this request."
-</code></td></tr></table></blockquote>
-        results in this header being added to the response: 
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-   MyHeader: Hello Joe. It took D=3775428 microseconds for Apache to serve this request.
-</code></td></tr></table></blockquote>
-      </li>
-
-      <li>Conditionally send MyHeader on the response if and only
-      if header "MyRequestHeader" is present on the request. This
-      is useful for constructing headers in response to some client
-      stimulus. Note that this example requires the services of the
-      mod_setenvif module.
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-   SetEnvIf MyRequestHeader value HAVE_MyRequestHeader<br>
-   Header add MyHeader "%D %t mytext" env=HAVE_MyRequestHeader
-</code></td></tr></table></blockquote>
-        If the header "MyRequestHeader: value" is present on the
-        HTTP request, the response will contain the following
-        header: 
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-   MyHeader: D=3775428 t=991424704447256 mytext
-</code></td></tr></table></blockquote>
-      </li>
-    </ol>
-<hr/><h2><a name="Header">Header</a> <a name="header">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Configure HTTP response headers</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>Header set|append|add|unset|echo  <em>header</em> 
-[<em>value</em>]</syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>FileInfo</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_headers</td></tr></table></td></tr></table><usage>
-    <p>This directive can replace, merge or remove HTTP response
-    headers. The header is modified just after the content handler
-    and output filters are run, allowing outgoing headers to be
-    modified. The action it performs is determined by the first
-    argument. This can be one of the following values:</p>
-
-    <ul>
-      <li><strong>set</strong><br>
-       The response header is set, replacing any previous header
-      with this name. The <em>value</em> may be a format
-      string.</li>
-
-      <li><strong>append</strong><br>
-       The response header is appended to any existing header of
-      the same name. When a new value is merged onto an existing
-      header it is separated from the existing header with a comma.
-      This is the HTTP standard way of giving a header multiple
-      values.</li>
-
-      <li><strong>add</strong><br>
-       The response header is added to the existing set of headers,
-      even if this header already exists. This can result in two
-      (or more) headers having the same name. This can lead to
-      unforeseen consequences, and in general "append" should be
-      used instead.</li>
-
-      <li><strong>unset</strong><br>
-       The response header of this name is removed, if it exists.
-      If there are multiple headers of the same name, all will be
-      removed.</li>
-
-      <li><strong>echo</strong><br>
-       Request headers with this name are echoed back in the
-      response headers. <em>header</em> may be a regular
-      expression.</li>
-    </ul>
-
-    <p>This argument is followed by a <em>header</em> name, which
-    can include the final colon, but it is not required. Case is
-    ignored for set, append, add and unset. The <em>header</em>
-    name for echo is case sensitive and may be a regular
-    expression.</p>
-
-    <p>For <code>add</code>, <code>append</code> and
-    <code>set</code> a <em>value</em> is specified as the third
-    argument. If <em>value</em> contains spaces, it should be
-    surrounded by doublequotes. <em>value</em> may be a character
-    string, a string containing format specifiers or a combination
-    of both. The following format specifiers are supported in
-    <em>value</em>:</p>
-<table>
-<tr><td>%t: </td> <td>The time the request was received in Universal
-Coordinated Time since the epoch (Jan. 1, 1970) measured in
-microseconds. The value is preceded by "t=".</td></tr>
-
-<tr><td>%D: </td> <td>The time from when the request was received to
-the time the headers are sent on the wire. This is a measure of the
-duration of the request. The value is preceded by "D=".</td></tr>
-
-<tr><td>%{FOOBAR}e:</td> <td>The contents of the <a href="../env.html">environment
-variable</a> FOOBAR.</td></tr>
-</table>
-
-    <p>When the <code class="directive">Header</code> directive is used with the
-    <code>add</code>, <code>append</code>, or <code>set</code>
-    argument, a fourth argument may be used to specify conditions
-    under which the action will be taken. If the <a href="../env.html">environment variable</a> specified in the
-    <code>env=...</code> argument exists (or if the environment
-    variable does not exist and <code>env=!...</code> is specified)
-    then the action specified by the <code class="directive">Header</code> directive
-    will take effect. Otherwise, the directive will have no effect
-    on the request.</p>
-
-    <p>The Header directives are processed just before the response
-    is sent to the network. These means that it is possible to set
-    and/or override most headers, except for those headers added by
-    the header filter.</p>
-</usage><hr/><h2><a name="RequestHeader">RequestHeader</a> <a name="requestheader">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Configure HTTP request headers</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>RequestHeader   set|append|add|unset <em>header</em> 
-[<em>value</em>]</syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>FileInfo</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_headers</td></tr></table></td></tr></table><usage>
-    <p>This directive can replace, merge or remove HTTP request
-    headers. The header is modified just before the content handler
-    is run, allowing incoming headers to be modified. The action it
-    performs is determined by the first argument. This can be one
-    of the following values:</p>
-
-    <ul>
-      <li><strong>set</strong><br>
-       The request header is set, replacing any previous header
-      with this name</li>
-
-      <li><strong>append</strong><br>
-       The request header is appended to any existing header of the
-      same name. When a new value is merged onto an existing header
-      it is separated from the existing header with a comma. This
-      is the HTTP standard way of giving a header multiple
-      values.</li>
-
-      <li><strong>add</strong><br>
-       The request header is added to the existing set of headers,
-      even if this header already exists. This can result in two
-      (or more) headers having the same name. This can lead to
-      unforeseen consequences, and in general "append" should be
-      used instead.</li>
-
-      <li><strong>unset</strong><br>
-       The request header of this name is removed, if it exists. If
-      there are multiple headers of the same name, all will be
-      removed.</li>
-    </ul>
-
-    <p>This argument is followed by a header name, which can
-    include the final colon, but it is not required. Case is
-    ignored. For <code>add</code>, <code>append</code> and
-    <code>set</code> a value is given as the third argument. If
-    this value contains spaces, it should be surrounded by double
-    quotes. For unset, no value should be given.</p>
-
-    <p>The <code class="directive">RequestHeader</code> directive is processed
-    just before the request is run by its handler in the fixup phase.
-    This should allow headers generated by the browser, or by Apache
-    input filters to be overridden or modified.</p>
-</usage><hr/><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img alt="Index" src="../images/index.gif"/></a><a href="../"><img alt="Home" src="../images/home.gif"/></a></blockquote></body></html>
\ No newline at end of file
diff --git a/docs/manual/mod/mod_headers.xml b/docs/manual/mod/mod_headers.xml
deleted file mode 100644
index b71885c..0000000
--- a/docs/manual/mod/mod_headers.xml
+++ /dev/null
@@ -1,261 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.xsl"?>
-<modulesynopsis>
-
-<name>mod_headers</name>
-<description>Customization of HTTP request
-    and response headers</description>
-<status>Extension</status>
-<sourcefile>mod_headers.c</sourcefile>
-<identifier>headers_module</identifier>
-<compatibility>RequestHeader is available only in Apache 2.0</compatibility>
-
-<summary>
-    <p>This module provides directives to control and modify HTTP
-    request and response headers. Headers can be merged, replaced
-    or removed.</p>
-</summary>
-
-<section><title>Order of Processing</title>
-
-    <p>The directives provided by mod_header can occur almost
-    anywhere within the server configuration. They are valid in the
-    main server config and virtual host sections, inside
-    &lt;Directory&gt;, &lt;Location&gt; and &lt;Files&gt; sections,
-    and within .htaccess files.</p>
-
-    <p>The directives are processed in the following order:</p>
-
-    <ol>
-      <li>main server</li>
-
-      <li>virtual host</li>
-
-      <li>&lt;Directory&gt; sections and .htaccess</li>
-
-      <li>&lt;Location&gt;</li>
-
-      <li>&lt;Files&gt;</li>
-    </ol>
-
-    <p>Order is important. These two headers have a different
-    effect if reversed:</p>
-
-<example>
-RequestHeader append MirrorID "mirror 12"<br />
-       RequestHeader unset MirrorID
-</example>
-
-    <p>This way round, the MirrorID header is not set. If reversed,
-    the MirrorID header is set to "mirror 12".</p>
-</section>
-
-<section><title>Example</title>
-
-    <ol>
-      <li>Copy all request headers that begin with "TS" to the
-      response headers:
-
-<example>
-   Header echo ^TS*
-</example></li>
-
-      <li>Add a header, MyHeader, to the response including a
-      timestamp for when the request was received and how long it
-      took to begin serving the request. This header can be used by
-      the client to intuit load on the server or in isolating
-      bottlenecks between the client and the server.
-
-<example>
-   Header add MyHeader "%D %t"
-</example>
-        results in this header being added to the response:
-<example>
-   MyHeader: D=3775428 t=991424704447256
-</example>
-      </li>
-
-      <li>Say hello to Joe
-
-<example>
-   Header add MyHeader "Hello Joe. It took %D microseconds for Apache to serve this request."
-</example>
-        results in this header being added to the response: 
-<example>
-   MyHeader: Hello Joe. It took D=3775428 microseconds for Apache to serve this request.
-</example>
-      </li>
-
-      <li>Conditionally send MyHeader on the response if and only
-      if header "MyRequestHeader" is present on the request. This
-      is useful for constructing headers in response to some client
-      stimulus. Note that this example requires the services of the
-      mod_setenvif module.
-
-<example>
-   SetEnvIf MyRequestHeader value HAVE_MyRequestHeader<br />
-   Header add MyHeader "%D %t mytext" env=HAVE_MyRequestHeader
-</example>
-        If the header "MyRequestHeader: value" is present on the
-        HTTP request, the response will contain the following
-        header: 
-<example>
-   MyHeader: D=3775428 t=991424704447256 mytext
-</example>
-      </li>
-    </ol>
-</section>
-
-<directivesynopsis>
-<name>RequestHeader</name>
-<description>Configure HTTP request headers</description>
-<syntax>RequestHeader   set|append|add|unset <em>header</em> 
-[<em>value</em>]</syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context>
-<context>directory</context>
-<context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-
-<usage>
-    <p>This directive can replace, merge or remove HTTP request
-    headers. The header is modified just before the content handler
-    is run, allowing incoming headers to be modified. The action it
-    performs is determined by the first argument. This can be one
-    of the following values:</p>
-
-    <ul>
-      <li><strong>set</strong><br />
-       The request header is set, replacing any previous header
-      with this name</li>
-
-      <li><strong>append</strong><br />
-       The request header is appended to any existing header of the
-      same name. When a new value is merged onto an existing header
-      it is separated from the existing header with a comma. This
-      is the HTTP standard way of giving a header multiple
-      values.</li>
-
-      <li><strong>add</strong><br />
-       The request header is added to the existing set of headers,
-      even if this header already exists. This can result in two
-      (or more) headers having the same name. This can lead to
-      unforeseen consequences, and in general "append" should be
-      used instead.</li>
-
-      <li><strong>unset</strong><br />
-       The request header of this name is removed, if it exists. If
-      there are multiple headers of the same name, all will be
-      removed.</li>
-    </ul>
-
-    <p>This argument is followed by a header name, which can
-    include the final colon, but it is not required. Case is
-    ignored. For <code>add</code>, <code>append</code> and
-    <code>set</code> a value is given as the third argument. If
-    this value contains spaces, it should be surrounded by double
-    quotes. For unset, no value should be given.</p>
-
-    <p>The <directive>RequestHeader</directive> directive is processed
-    just before the request is run by its handler in the fixup phase.
-    This should allow headers generated by the browser, or by Apache
-    input filters to be overridden or modified.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>Header</name>
-<description>Configure HTTP response headers</description>
-<syntax>Header set|append|add|unset|echo  <em>header</em> 
-[<em>value</em>]</syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context>
-<context>directory</context>
-<context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-
-<usage>
-    <p>This directive can replace, merge or remove HTTP response
-    headers. The header is modified just after the content handler
-    and output filters are run, allowing outgoing headers to be
-    modified. The action it performs is determined by the first
-    argument. This can be one of the following values:</p>
-
-    <ul>
-      <li><strong>set</strong><br />
-       The response header is set, replacing any previous header
-      with this name. The <em>value</em> may be a format
-      string.</li>
-
-      <li><strong>append</strong><br />
-       The response header is appended to any existing header of
-      the same name. When a new value is merged onto an existing
-      header it is separated from the existing header with a comma.
-      This is the HTTP standard way of giving a header multiple
-      values.</li>
-
-      <li><strong>add</strong><br />
-       The response header is added to the existing set of headers,
-      even if this header already exists. This can result in two
-      (or more) headers having the same name. This can lead to
-      unforeseen consequences, and in general "append" should be
-      used instead.</li>
-
-      <li><strong>unset</strong><br />
-       The response header of this name is removed, if it exists.
-      If there are multiple headers of the same name, all will be
-      removed.</li>
-
-      <li><strong>echo</strong><br />
-       Request headers with this name are echoed back in the
-      response headers. <em>header</em> may be a regular
-      expression.</li>
-    </ul>
-
-    <p>This argument is followed by a <em>header</em> name, which
-    can include the final colon, but it is not required. Case is
-    ignored for set, append, add and unset. The <em>header</em>
-    name for echo is case sensitive and may be a regular
-    expression.</p>
-
-    <p>For <code>add</code>, <code>append</code> and
-    <code>set</code> a <em>value</em> is specified as the third
-    argument. If <em>value</em> contains spaces, it should be
-    surrounded by doublequotes. <em>value</em> may be a character
-    string, a string containing format specifiers or a combination
-    of both. The following format specifiers are supported in
-    <em>value</em>:</p>
-<table>
-<tr><td>%t: </td> <td>The time the request was received in Universal
-Coordinated Time since the epoch (Jan. 1, 1970) measured in
-microseconds. The value is preceded by "t=".</td></tr>
-
-<tr><td>%D: </td> <td>The time from when the request was received to
-the time the headers are sent on the wire. This is a measure of the
-duration of the request. The value is preceded by "D=".</td></tr>
-
-<tr><td>%{FOOBAR}e:</td> <td>The contents of the <a href="../env.html">environment
-variable</a> FOOBAR.</td></tr>
-</table>
-
-    <p>When the <directive>Header</directive> directive is used with the
-    <code>add</code>, <code>append</code>, or <code>set</code>
-    argument, a fourth argument may be used to specify conditions
-    under which the action will be taken. If the <a
-    href="../env.html">environment variable</a> specified in the
-    <code>env=...</code> argument exists (or if the environment
-    variable does not exist and <code>env=!...</code> is specified)
-    then the action specified by the <directive>Header</directive> directive
-    will take effect. Otherwise, the directive will have no effect
-    on the request.</p>
-
-    <p>The Header directives are processed just before the response
-    is sent to the network. These means that it is possible to set
-    and/or override most headers, except for those headers added by
-    the header filter.</p>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
-
diff --git a/docs/manual/mod/mod_imap.html b/docs/manual/mod/mod_imap.html
deleted file mode 100644
index f84d7b9..0000000
--- a/docs/manual/mod/mod_imap.html
+++ /dev/null
@@ -1,276 +0,0 @@
-<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-     This file is generated from xml source: DO NOT EDIT
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
---><title>mod_imap - Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img alt="[APACHE DOCUMENTATION]" src="../images/sub.gif"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module mod_imap</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td><description>Server-side imagemap processing</description></td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="module-dict.html#ModuleIdentifier" class="help">Module&nbsp;Identifier:</a></td><td>imap_module</td></tr></table></td></tr></table><h2>Summary</h2><summary>
-    <p>This module processes <code>.map</code> files, thereby
-    replacing the functionality of the <code>imagemap</code> CGI
-    program. Any directory or document type configured to use the
-    handler <code>imap-file</code> (using either 
-    <a href="mod_mime.html#addhandler" class="directive"><code class="directive">AddHandler</code></a> or
-    <a href="core.html#sethandler" class="directive"><code class="directive">SetHandler</code></a>)
-    will be processed by this module.</p>
-
-    <p>The following directive will activate files ending with
-    <code>.map</code> as imagemap files:</p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>AddHandler imap-file map</code></td></tr></table></blockquote>
-
-    <p>Note that the following is still supported:</p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>AddType application/x-httpd-imap map</code></td></tr></table></blockquote>
-
-    <p>However, we are trying to phase out "magic MIME types" so we
-    are deprecating this method.</p>
-</summary><h2>Directives</h2><ul><li><a href="#imapbase">ImapBase</a></li><li><a href="#imapdefault">ImapDefault</a></li><li><a href="#imapmenu">ImapMenu</a></li></ul><h2>New Features</h2>
-
-    <p>The imagemap module adds some new features that were not
-    possible with previously distributed imagemap programs.</p>
-
-    <ul>
-      <li>URL references relative to the Referer: information.</li>
-
-      <li>Default &lt;BASE&gt; assignment through a new map
-      directive <code>base</code>.</li>
-
-      <li>No need for <code>imagemap.conf</code> file.</li>
-
-      <li>Point references.</li>
-
-      <li>Configurable generation of imagemap menus.</li>
-    </ul>
-<h2>Imagemap File</h2>
-
-    <p>The lines in the imagemap files can have one of several
-    formats:</p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-      directive value [x,y ...]<br>
-      directive value "Menu text" [x,y ...]<br>
-      directive value x,y ... "Menu text"
-</code></td></tr></table></blockquote>
-    <p>The directive is one of <code>base</code>,
-    <code>default</code>, <code>poly</code>, <code>circle</code>,
-    <code>rect</code>, or <code>point</code>. The value is an
-    absolute or relative URL, or one of the special values listed
-    below. The coordinates are <code>x,y</code> pairs separated by
-    whitespace. The quoted text is used as the text of the link if
-    a imagemap menu is generated. Lines beginning with '#' are
-    comments.</p>
-
-<h3>Imagemap File Directives</h3>
-    <p>There are six directives allowed in the imagemap file. The
-    directives can come in any order, but are processed in the
-    order they are found in the imagemap file.</p>
-
-    <dl>
-      <dt><code>base</code> Directive</dt>
-
-      <dd>Has the effect of <code>&lt;BASE HREF="value"&gt;</code>.
-      The non-absolute URLs of the map-file are taken relative to
-      this value. The <code>base</code> directive overrides
-      ImapBase as set in a .htaccess file or in the server
-      configuration files. In the absence of an ImapBase
-      configuration directive, <code>base</code> defaults to
-      <code>http://server_name/</code>.<br>
-       <code>base_uri</code> is synonymous with <code>base</code>.
-      Note that a trailing slash on the URL is significant.</dd>
-
-      <dt><code>default</code> Directive</dt>
-
-      <dd>The action taken if the coordinates given do not fit any
-      of the <code>poly</code>, <code>circle</code> or
-      <code>rect</code> directives, and there are no
-      <code>point</code> directives. Defaults to
-      <code>nocontent</code> in the absence of an ImapDefault
-      configuration setting, causing a status code of <code>204 No
-      Content</code> to be returned. The client should keep the
-      same page displayed.</dd>
-
-      <dt><code>poly</code> Directive</dt>
-
-      <dd>Takes three to one-hundred points, and is obeyed if the
-      user selected coordinates fall within the polygon defined by
-      these points.</dd>
-
-      <dt><code>circle</code></dt>
-
-      <dd>Takes the center coordinates of a circle and a point on
-      the circle. Is obeyed if the user selected point is with the
-      circle.</dd>
-
-      <dt><code>rect</code> Directive</dt>
-
-      <dd>Takes the coordinates of two opposing corners of a
-      rectangle. Obeyed if the point selected is within this
-      rectangle.</dd>
-
-      <dt><code>point</code> Directive</dt>
-
-      <dd>Takes a single point. The point directive closest to the
-      user selected point is obeyed if no other directives are
-      satisfied. Note that <code>default</code> will not be
-      followed if a <code>point</code> directive is present and
-      valid coordinates are given.</dd>
-    </dl>
-
-
-<h3>Values</h3>
-
-    <p>The values for each of the directives can any of the following:</p>
-    
-
-    <dl>
-      <dt>a URL</dt>
-
-      <dd>The URL can be relative or absolute URL. Relative URLs
-      can contain '..' syntax and will be resolved relative to the
-      <code>base</code> value.<br>
-       <code>base</code> itself will not resolved according to the
-      current value. A statement <code>base mailto:</code> will
-      work properly, though.</dd>
-
-      <dt><code>map</code></dt>
-
-      <dd>Equivalent to the URL of the imagemap file itself. No
-      coordinates are sent with this, so a menu will be generated
-      unless ImapMenu is set to 'none'.</dd>
-
-      <dt><code>menu</code></dt>
-
-      <dd>Synonymous with <code>map</code>.</dd>
-
-      <dt><code>referer</code></dt>
-
-      <dd>Equivalent to the URL of the referring document. Defaults
-      to <code>http://servername/</code> if no Referer: header was
-      present.</dd>
-
-      <dt><code>nocontent</code></dt>
-
-      <dd>Sends a status code of <code>204 No Content</code>,
-      telling the client to keep the same page displayed. Valid for
-      all but <code>base</code>.</dd>
-
-      <dt><code>error</code></dt>
-
-      <dd>Fails with a <code>500 Server Error</code>. Valid for all
-      but <code>base</code>, but sort of silly for anything but
-      <code>default</code>.</dd>
-    </dl>
-
-
-<h3>Coordinates</h3>
-
-    <dl>
-      <dt><code>0,0 200,200</code></dt>
-
-      <dd>A coordinate consists of an <code>x</code> and a <code>y</code>
-      value separated by a comma. The coordinates are separated
-      from each other by whitespace. To accommodate the way Lynx
-      handles imagemaps, should a user select the coordinate
-      <code>0,0</code>, it is as if no coordinate had been
-      selected.</dd>
-    </dl>
-
-
-
-<h3>Quoted Text</h3>
-
-    <dl>
-      <dt><code>"Menu Text"</code></dt>
-
-      <dd>After the value or after the coordinates, the line
-      optionally may contain text within double quotes. This string
-      is used as the text for the link if a menu is
-      generated:<br>
-       <code>&lt;a HREF="http://foo.com/"&gt;Menu
-      text&lt;/a&gt;</code><br>
-       If no quoted text is present, the name of the link will be
-      used as the text:<br>
-       <code>&lt;a
-      HREF="http://foo.com/"&gt;http://foo.com&lt;/a&gt;</code><br>
-       It is impossible to escape double quotes within this
-      text.</dd>
-    </dl>
-
-<h2>Example Mapfile</h2>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-      #Comments are printed in a 'formatted' or
-      'semiformatted' menu.<br>
-       #And can contain html tags. &lt;hr&gt;<br>
-       base referer<br>
-       poly map "Could I have a menu, please?" 0,0 0,10 10,10
-      10,0<br>
-       rect .. 0,0 77,27 "the directory of the referer"<br>
-       circle http://www.inetnebr.com/lincoln/feedback/ 195,0
-      305,27<br>
-       rect another_file "in same directory as referer" 306,0
-      419,27<br>
-       point http://www.zyzzyva.com/ 100,100<br>
-       point http://www.tripod.com/ 200,200<br>
-       rect mailto:nate@tripod.com 100,150 200,0 "Bugs?"<br>
-</code></td></tr></table></blockquote>
-
-<h2>Referencing your mapfile</h2>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-      &lt;A HREF="/maps/imagemap1.map"&gt;<br>
-       &lt;IMG ISMAP SRC="/images/imagemap1.gif"&gt;<br>
-       &lt;/A&gt;
-</code></td></tr></table></blockquote>
-<hr/><h2><a name="ImapBase">ImapBase</a> <a name="imapbase">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Default base for imagemap files</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>ImapBase map|referer|<em>URL</em></syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>ImapBase http://servername/</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>Indexes</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_imap</td></tr></table></td></tr></table><usage>
-    <p>The <code class="directive">ImapBase</code> directive sets the default
-    <code>base</code> used in the imagemap files. Its value is
-    overridden by a <code>base</code> directive within the imagemap
-    file. If not present, the <code>base</code> defaults to
-    <code>http://servername/</code>.</p>
-</usage><hr/><h2><a name="ImapDefault">ImapDefault</a> <a name="imapdefault">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Default action when an imagemap is called with coordinates
-that are not explicitly mapped</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>ImapDefault error|nocontent|map|referer|<em>URL</em></syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>ImapDefault nocontent</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>Indexes</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_imap</td></tr></table></td></tr></table><usage>
-    <p>The <code class="directive">ImapDefault</code> directive sets the default
-    <code>default</code> used in the imagemap files. Its value is
-    overridden by a <code>default</code> directive within the
-    imagemap file. If not present, the <code>default</code> action
-    is <code>nocontent</code>, which means that a <code>204 No
-    Content</code> is sent to the client. In this case, the client
-    should continue to display the original page.</p>
-</usage><hr/><h2><a name="ImapMenu">ImapMenu</a> <a name="imapmenu">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Action if no coordinates are given when calling
-an imagemap</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>ImapMenu
-    none|formatted|semiformatted|unformatted</syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>Indexes</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_imap</td></tr></table></td></tr></table><usage>
-    <p>The <code class="directive">ImapMenu</code> directive determines the
-    action taken if an imagemap file is called without valid
-    coordinates.</p>
-
-    <dl>
-      <dt><code>none</code></dt>
-
-      <dd>If ImapMenu is <code>none</code>, no menu is generated,
-      and the <code>default</code> action is performed.</dd>
-
-      <dt><code>formatted</code></dt>
-
-      <dd>A <code>formatted</code> menu is the simplest menu.
-      Comments in the imagemap file are ignored. A level one header
-      is printed, then an hrule, then the links each on a separate
-      line. The menu has a consistent, plain look close to that of
-      a directory listing.</dd>
-
-      <dt><code>semiformatted</code></dt>
-
-      <dd>In the <code>semiformatted</code> menu, comments are
-      printed where they occur in the imagemap file. Blank lines
-      are turned into HTML breaks. No header or hrule is printed,
-      but otherwise the menu is the same as a
-      <code>formatted</code> menu.</dd>
-
-      <dt><code>unformatted</code></dt>
-
-      <dd>Comments are printed, blank lines are ignored. Nothing is
-      printed that does not appear in the imagemap file. All breaks
-      and headers must be included as comments in the imagemap
-      file. This gives you the most flexibility over the appearance
-      of your menus, but requires you to treat your map files as
-      HTML instead of plaintext.</dd>
-    </dl>
-</usage><hr/><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img alt="Index" src="../images/index.gif"/></a><a href="../"><img alt="Home" src="../images/home.gif"/></a></blockquote></body></html>
\ No newline at end of file
diff --git a/docs/manual/mod/mod_imap.xml b/docs/manual/mod/mod_imap.xml
deleted file mode 100644
index 489a205..0000000
--- a/docs/manual/mod/mod_imap.xml
+++ /dev/null
@@ -1,334 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.xsl"?>
-<modulesynopsis>
-
-<name>mod_imap</name>
-<description>Server-side imagemap processing</description>
-<status>Base</status>
-<sourcefile>mod_imap.c</sourcefile>
-<identifier>imap_module</identifier>
-
-<summary>
-    <p>This module processes <code>.map</code> files, thereby
-    replacing the functionality of the <code>imagemap</code> CGI
-    program. Any directory or document type configured to use the
-    handler <code>imap-file</code> (using either 
-    <directive module="mod_mime">AddHandler</directive> or
-    <directive module="core">SetHandler</directive>)
-    will be processed by this module.</p>
-
-    <p>The following directive will activate files ending with
-    <code>.map</code> as imagemap files:</p>
-
-<example>AddHandler imap-file map</example>
-
-    <p>Note that the following is still supported:</p>
-
-<example>AddType application/x-httpd-imap map</example>
-
-    <p>However, we are trying to phase out "magic MIME types" so we
-    are deprecating this method.</p>
-</summary>
-
-<section><title>New Features</title>
-
-    <p>The imagemap module adds some new features that were not
-    possible with previously distributed imagemap programs.</p>
-
-    <ul>
-      <li>URL references relative to the Referer: information.</li>
-
-      <li>Default &lt;BASE&gt; assignment through a new map
-      directive <code>base</code>.</li>
-
-      <li>No need for <code>imagemap.conf</code> file.</li>
-
-      <li>Point references.</li>
-
-      <li>Configurable generation of imagemap menus.</li>
-    </ul>
-</section>
-
-<section><title>Imagemap File</title>
-
-    <p>The lines in the imagemap files can have one of several
-    formats:</p>
-
-<example>
-      directive value [x,y ...]<br />
-      directive value "Menu text" [x,y ...]<br />
-      directive value x,y ... "Menu text"
-</example>
-    <p>The directive is one of <code>base</code>,
-    <code>default</code>, <code>poly</code>, <code>circle</code>,
-    <code>rect</code>, or <code>point</code>. The value is an
-    absolute or relative URL, or one of the special values listed
-    below. The coordinates are <code>x,y</code> pairs separated by
-    whitespace. The quoted text is used as the text of the link if
-    a imagemap menu is generated. Lines beginning with '#' are
-    comments.</p>
-
-<section><title>Imagemap File Directives</title>
-    <p>There are six directives allowed in the imagemap file. The
-    directives can come in any order, but are processed in the
-    order they are found in the imagemap file.</p>
-
-    <dl>
-      <dt><code>base</code> Directive</dt>
-
-      <dd>Has the effect of <code>&lt;BASE HREF="value"&gt;</code>.
-      The non-absolute URLs of the map-file are taken relative to
-      this value. The <code>base</code> directive overrides
-      ImapBase as set in a .htaccess file or in the server
-      configuration files. In the absence of an ImapBase
-      configuration directive, <code>base</code> defaults to
-      <code>http://server_name/</code>.<br />
-       <code>base_uri</code> is synonymous with <code>base</code>.
-      Note that a trailing slash on the URL is significant.</dd>
-
-      <dt><code>default</code> Directive</dt>
-
-      <dd>The action taken if the coordinates given do not fit any
-      of the <code>poly</code>, <code>circle</code> or
-      <code>rect</code> directives, and there are no
-      <code>point</code> directives. Defaults to
-      <code>nocontent</code> in the absence of an ImapDefault
-      configuration setting, causing a status code of <code>204 No
-      Content</code> to be returned. The client should keep the
-      same page displayed.</dd>
-
-      <dt><code>poly</code> Directive</dt>
-
-      <dd>Takes three to one-hundred points, and is obeyed if the
-      user selected coordinates fall within the polygon defined by
-      these points.</dd>
-
-      <dt><code>circle</code></dt>
-
-      <dd>Takes the center coordinates of a circle and a point on
-      the circle. Is obeyed if the user selected point is with the
-      circle.</dd>
-
-      <dt><code>rect</code> Directive</dt>
-
-      <dd>Takes the coordinates of two opposing corners of a
-      rectangle. Obeyed if the point selected is within this
-      rectangle.</dd>
-
-      <dt><code>point</code> Directive</dt>
-
-      <dd>Takes a single point. The point directive closest to the
-      user selected point is obeyed if no other directives are
-      satisfied. Note that <code>default</code> will not be
-      followed if a <code>point</code> directive is present and
-      valid coordinates are given.</dd>
-    </dl>
-</section>
-
-<section><title>Values</title>
-
-    <p>The values for each of the directives can any of the following:</p>
-    
-
-    <dl>
-      <dt>a URL</dt>
-
-      <dd>The URL can be relative or absolute URL. Relative URLs
-      can contain '..' syntax and will be resolved relative to the
-      <code>base</code> value.<br />
-       <code>base</code> itself will not resolved according to the
-      current value. A statement <code>base mailto:</code> will
-      work properly, though.</dd>
-
-      <dt><code>map</code></dt>
-
-      <dd>Equivalent to the URL of the imagemap file itself. No
-      coordinates are sent with this, so a menu will be generated
-      unless ImapMenu is set to 'none'.</dd>
-
-      <dt><code>menu</code></dt>
-
-      <dd>Synonymous with <code>map</code>.</dd>
-
-      <dt><code>referer</code></dt>
-
-      <dd>Equivalent to the URL of the referring document. Defaults
-      to <code>http://servername/</code> if no Referer: header was
-      present.</dd>
-
-      <dt><code>nocontent</code></dt>
-
-      <dd>Sends a status code of <code>204 No Content</code>,
-      telling the client to keep the same page displayed. Valid for
-      all but <code>base</code>.</dd>
-
-      <dt><code>error</code></dt>
-
-      <dd>Fails with a <code>500 Server Error</code>. Valid for all
-      but <code>base</code>, but sort of silly for anything but
-      <code>default</code>.</dd>
-    </dl>
-</section>
-
-<section><title>Coordinates</title>
-
-    <dl>
-      <dt><code>0,0 200,200</code></dt>
-
-      <dd>A coordinate consists of an <code>x</code> and a <code>y</code>
-      value separated by a comma. The coordinates are separated
-      from each other by whitespace. To accommodate the way Lynx
-      handles imagemaps, should a user select the coordinate
-      <code>0,0</code>, it is as if no coordinate had been
-      selected.</dd>
-    </dl>
-
-</section>
-
-<section><title>Quoted Text</title>
-
-    <dl>
-      <dt><code>"Menu Text"</code></dt>
-
-      <dd>After the value or after the coordinates, the line
-      optionally may contain text within double quotes. This string
-      is used as the text for the link if a menu is
-      generated:<br />
-       <code>&lt;a HREF="http://foo.com/"&gt;Menu
-      text&lt;/a&gt;</code><br />
-       If no quoted text is present, the name of the link will be
-      used as the text:<br />
-       <code>&lt;a
-      HREF="http://foo.com/"&gt;http://foo.com&lt;/a&gt;</code><br />
-       It is impossible to escape double quotes within this
-      text.</dd>
-    </dl>
-</section>
-</section>
-
-<section><title>Example Mapfile</title>
-
-<example>
-      #Comments are printed in a 'formatted' or
-      'semiformatted' menu.<br />
-       #And can contain html tags. &lt;hr&gt;<br />
-       base referer<br />
-       poly map "Could I have a menu, please?" 0,0 0,10 10,10
-      10,0<br />
-       rect .. 0,0 77,27 "the directory of the referer"<br />
-       circle http://www.inetnebr.com/lincoln/feedback/ 195,0
-      305,27<br />
-       rect another_file "in same directory as referer" 306,0
-      419,27<br />
-       point http://www.zyzzyva.com/ 100,100<br />
-       point http://www.tripod.com/ 200,200<br />
-       rect mailto:nate@tripod.com 100,150 200,0 "Bugs?"<br />
-</example>
-
-</section>
-
-<section><title>Referencing your mapfile</title>
-
-<example>
-      &lt;A HREF="/maps/imagemap1.map"&gt;<br />
-       &lt;IMG ISMAP SRC="/images/imagemap1.gif"&gt;<br />
-       &lt;/A&gt;
-</example>
-</section>
-
-<directivesynopsis>
-<name>ImapMenu</name>
-<description>Action if no coordinates are given when calling
-an imagemap</description>
-<syntax>ImapMenu
-    none|formatted|semiformatted|unformatted</syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context>
-<context>directory</context>
-<context>.htaccess</context></contextlist>
-<override>Indexes</override>
-
-<usage>
-    <p>The <directive>ImapMenu</directive> directive determines the
-    action taken if an imagemap file is called without valid
-    coordinates.</p>
-
-    <dl>
-      <dt><code>none</code></dt>
-
-      <dd>If ImapMenu is <code>none</code>, no menu is generated,
-      and the <code>default</code> action is performed.</dd>
-
-      <dt><code>formatted</code></dt>
-
-      <dd>A <code>formatted</code> menu is the simplest menu.
-      Comments in the imagemap file are ignored. A level one header
-      is printed, then an hrule, then the links each on a separate
-      line. The menu has a consistent, plain look close to that of
-      a directory listing.</dd>
-
-      <dt><code>semiformatted</code></dt>
-
-      <dd>In the <code>semiformatted</code> menu, comments are
-      printed where they occur in the imagemap file. Blank lines
-      are turned into HTML breaks. No header or hrule is printed,
-      but otherwise the menu is the same as a
-      <code>formatted</code> menu.</dd>
-
-      <dt><code>unformatted</code></dt>
-
-      <dd>Comments are printed, blank lines are ignored. Nothing is
-      printed that does not appear in the imagemap file. All breaks
-      and headers must be included as comments in the imagemap
-      file. This gives you the most flexibility over the appearance
-      of your menus, but requires you to treat your map files as
-      HTML instead of plaintext.</dd>
-    </dl>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ImapDefault</name>
-<description>Default action when an imagemap is called with coordinates
-that are not explicitly mapped</description>
-<syntax>ImapDefault error|nocontent|map|referer|<em>URL</em></syntax>
-<default>ImapDefault nocontent</default>
-<contextlist><context>server config</context>
-<context>virtual host</context>
-<context>directory</context>
-<context>.htaccess</context></contextlist>
-<override>Indexes</override>
-
-<usage>
-    <p>The <directive>ImapDefault</directive> directive sets the default
-    <code>default</code> used in the imagemap files. Its value is
-    overridden by a <code>default</code> directive within the
-    imagemap file. If not present, the <code>default</code> action
-    is <code>nocontent</code>, which means that a <code>204 No
-    Content</code> is sent to the client. In this case, the client
-    should continue to display the original page.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ImapBase</name>
-<description>Default <code>base</code> for imagemap files</description>
-<syntax>ImapBase map|referer|<em>URL</em></syntax>
-<default>ImapBase http://servername/</default>
-<contextlist><context>server config</context>
-<context>virtual host</context>
-<context>directory</context>
-<context>.htaccess</context></contextlist>
-<override>Indexes</override>
-
-<usage>
-    <p>The <directive>ImapBase</directive> directive sets the default
-    <code>base</code> used in the imagemap files. Its value is
-    overridden by a <code>base</code> directive within the imagemap
-    file. If not present, the <code>base</code> defaults to
-    <code>http://servername/</code>.</p>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
\ No newline at end of file
diff --git a/docs/manual/mod/mod_include.html b/docs/manual/mod/mod_include.html
deleted file mode 100644
index 113a44f..0000000
--- a/docs/manual/mod/mod_include.html
+++ /dev/null
@@ -1,600 +0,0 @@
-<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-     This file is generated from xml source: DO NOT EDIT
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
---><title>mod_include - Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img alt="[APACHE DOCUMENTATION]" src="../images/sub.gif"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module mod_include</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td><description>Server-parsed html documents (Server Side Includes)</description></td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="module-dict.html#ModuleIdentifier" class="help">Module&nbsp;Identifier:</a></td><td>include_module</td></tr></table></td></tr></table><h2>Summary</h2><summary>
-
-    <p>This module provides a filter which will process files
-    before they are sent to the client. The processing is
-    controlled by specially formated SGML comments, referred to as
-    <em>elements</em>. These elements allow conditional text, the
-    inclusion other files or programs, as well as the setting and
-    printing of environment variables.</p>
-
-</summary><p><strong>See also </strong></p><ul><li><a href="core.html#options" class="directive"><code class="directive">Options</code></a></li><li><a href="core.html#setoutputfilter" class="directive"><code class="directive">SetOutputFilter</code></a></li><li><a href="core.html#acceptpathinfo" class="directive"><code class="directive">AcceptPathInfo</code></a></li></ul><h2>Directives</h2><ul><li><a href="#ssiendtag">SSIEndTag</a></li><li><a href="#ssierrormsg">SSIErrorMsg</a></li><li><a href="#ssistarttag">SSIStartTag</a></li><li><a href="#ssitimeformat">SSITimeFormat</a></li><li><a href="#ssiundefinedecho">SSIUndefinedEcho</a></li><li><a href="#xbithack">XBitHack</a></li></ul><h2><a name="enabling">Enabling Server-Side Includes</a></h2>
-    
-
-    <p>Server Side Includes are implemented by the
-    <code>INCLUDES</code> <a href="../filter.html">filter</a>. If
-    documents containing server-side include directives are given
-    the extension .shtml, the following directives will make Apache
-    parse them and assign the resulting document the mime type of
-    <code>text/html</code>:</p>
-
-    <blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-      AddType text/html .shtml<br>
-      AddOutputFilter INCLUDES .shtml
-    </code></td></tr></table></blockquote>
-
-    <p>The following directive must be given for the directories
-    containing the shtml files (typically in a
-    <code>&lt;Directory&gt;</code> section, but this directive is
-    also valid .htaccess files if <code>AllowOverride
-    Options</code> is set):</p>
-
-    <blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-      Options +Includes
-    </code></td></tr></table></blockquote>
-
-    <p>For backwards compatibility, the <code>server-parsed</code>
-    <a href="../handler.html">handler</a> also activates the
-    INCLUDES filter. As well, Apache will activate the INCLUDES
-    filter for any document with mime type
-    <code>text/x-server-parsed-html</code> or
-    <code>text/x-server-parsed-html3</code> (and the resulting
-    output will have the mime type <code>text/html</code>).</p>
-
-    <p>For more information, see our <a href="../howto/ssi.html">Tutorial on Server Side
-    Includes</a>.</p>
-<h2><a name="basic">Basic Elements</a></h2>
-    
-    <p>The document is parsed as an HTML document, with special
-    commands embedded as SGML comments. A command has the syntax: </p>
-
-    <blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-      <code>&lt;!--#</code><em>element attribute=value
-      attribute=value ...</em> <code>--&gt;</code>
-    </code></td></tr></table></blockquote>
-
-    <p>The value will often be enclosed in double quotes; many
-    commands only allow a single attribute-value pair. Note that
-    the comment terminator (<code>--&gt;</code>) should be preceded
-    by whitespace to ensure that it isn't considered part of an SSI
-    token. </p>
-
-    <p>The allowed elements are:</p>
-
-    <dl>
-      <dt><strong>config</strong></dt>
-
-      <dd>
-        This command controls various aspects of the parsing. The
-        valid attributes are: 
-
-        <dl>
-          <dt><strong>errmsg</strong></dt>
-
-          <dd>The value is a message that is sent back to the
-          client if an error occurs whilst parsing the
-          document.</dd>
-
-          <dt><strong>sizefmt</strong></dt>
-
-          <dd>The value sets the format to be used which displaying
-          the size of a file. Valid values are <code>bytes</code>
-          for a count in bytes, or <code>abbrev</code> for a count
-          in Kb or Mb as appropriate.</dd>
-
-          <dt><strong>timefmt</strong></dt>
-
-          <dd>The value is a string to be used by the
-          <code>strftime(3)</code> library routine when printing
-          dates.</dd>
-        </dl>
-      </dd>
-
-      <dt><strong><a name="echo">echo</a></strong></dt>
-
-      <dd>
-        <p>This command prints one of the <a href="#includevars">include
-        variables</a>, defined below. If the variable is unset, it
-        is printed as <code>(none)</code>. Any dates printed are
-        subject to the currently configured <code>timefmt</code>.</p>
-
-        <p>Attributes:</p> 
-
-        <dl>
-          <dt><strong>var</strong></dt>
-
-          <dd>The value is the name of the variable to print.</dd>
-
-          <dt><strong>encoding</strong></dt>
-
-          <dd>Specifies how Apache should encode special characters
-          contained in the variable before outputting them. If set
-          to "none", no encoding will be done. If set to "url",
-          then URL encoding (also known as %-encoding; this is
-          appropriate for use within URLs in links, etc.) will be
-          performed. At the start of an <code>echo</code> element,
-          the default is set to "entity", resulting in entity
-          encoding (which is appropriate in the context of a
-          block-level HTML element, eg. a paragraph of text). This
-          can be changed by adding an <code>encoding</code>
-          attribute, which will remain in effect until the next
-          <code>encoding</code> attribute is encountered or the
-          element ends, whichever comes first. Note that the
-          <code>encoding</code> attribute must <em>precede</em> the
-          corresponding <code>var</code> attribute to be effective,
-          and that only special characters as defined in the
-          ISO-8859-1 character encoding will be encoded. This
-          encoding process may not have the desired result if a
-          different character encoding is in use. Apache 1.3.12 and
-          above; previous versions do no encoding.</dd>
-        </dl>
-      </dd>
-
-      <dt><strong>exec</strong></dt>
-
-      <dd>
-        The exec command executes a given shell command or CGI
-        script. The IncludesNOEXEC <a href="core.html#option" class="directive"><code class="directive">Option</code></a> disables this command
-        completely. The valid attributes are: 
-
-        <dl>
-          <dt><strong>cgi</strong></dt>
-
-          <dd>
-            The value specifies a (%-encoded) URL relative path to
-            the CGI script. If the path does not begin with a (/),
-            then it is taken to be relative to the current
-            document. The document referenced by this path is
-            invoked as a CGI script, even if the server would not
-            normally recognize it as such. However, the directory
-            containing the script must be enabled for CGI scripts
-            (with <a href="mod_alias.html#scriptalias" class="directive"><code class="directive">ScriptAlias</code></a>
-            or the ExecCGI <a href="core.html#option" class="directive"><code class="directive">Option</code></a>). 
-
-            <p>The CGI script is given the PATH_INFO and query
-            string (QUERY_STRING) of the original request from the
-            client; these cannot be specified in the URL path. The
-            include variables will be available to the script in
-            addition to the standard <a href="mod_cgi.html">CGI</a>
-            environment.</p>
-
-            <p>For example:</p>
-
-  <blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>&lt;!--#exec cgi="/cgi-bin/example.cgi" --&gt;</code></td></tr></table></blockquote>
-
-            <p>If the script returns a Location: header instead of
-            output, then this will be translated into an HTML
-            anchor.</p>
-
-            <p>The <code><a href="#includevirtual">include
-            virtual</a></code> element should be
-            used in preference to <code>exec cgi</code>. In particular,
-            if you need to pass additional arguments to a CGI program,
-            using the query string, this cannot be done with <code>exec
-            cgi</code>, but can be done with <code>include
-            virtual</code>, as shown here:</p>
-
-  <blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-  &lt;!--#include virtual="/cgi-bin/example.cgi?argument=value" --&gt;
-  </code></td></tr></table></blockquote>
-
-          </dd>
-
-          <dt><strong>cmd</strong></dt>
-
-          <dd>
-          <p>The server will execute the given string using
-          <code>/bin/sh</code>. The <a href="#includevars">include variables</a> are available
-          to the command, in addition to the usual set of CGI 
-          variables.</p>
-
-        <p>The use of <code><a href="#includevirtual">#include 
-        virtual</a></code> is almost always
-        prefered to using either <code>#exec cgi</code> or <code>#exec
-        cmd</code>. The former (<code>#include virtual</code>) used the
-        standard Apache sub-request mechanism to include files or
-        scripts. It is much better tested and maintained.</p>
-
-          <p>In addition, on some platforms, like Win32, and on unix
-          when using suexec, you cannot pass arguments to a command in 
-          an <code>exec</code> directive, or otherwise include spaces in
-          the command. Thus, while the following will work under a
-          non-suexec configuration on unix, it will not produce the
-          desired result under Win32, or when running suexec:</p>
-
-   <blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-   &lt;!--#exec cmd="perl /path/to/perlscript arg1 arg2" --&gt;
-   </code></td></tr></table></blockquote>
-
-          </dd>
-        </dl>
-      </dd>
-
-      <dt><strong>fsize</strong></dt>
-
-      <dd>
-        This command prints the size of the specified file, subject
-        to the <code>sizefmt</code> format specification.
-        Attributes: 
-
-        <dl>
-          <dt><strong>file</strong></dt>
-
-          <dd>The value is a path relative to the directory
-          containing the current document being parsed.</dd>
-
-          <dt><strong>virtual</strong></dt>
-
-          <dd>The value is a (%-encoded) URL-path relative to the
-          current document being parsed. If it does not begin with
-          a slash (/) then it is taken to be relative to the
-          current document.</dd>
-        </dl>
-      </dd>
-
-      <dt><strong>flastmod</strong></dt>
-
-      <dd>This command prints the last modification date of the
-      specified file, subject to the <code>timefmt</code> format
-      specification. The attributes are the same as for the
-      <code>fsize</code> command.</dd>
-
-      <dt><strong>include</strong></dt>
-
-      <dd>
-        This command inserts the text of another document or file
-        into the parsed file. Any included file is subject to the
-        usual access control. If the directory containing the
-        parsed file has the <a href="core.html#options">Option</a>
-        IncludesNOEXEC set, and the including the document would
-        cause a program to be executed, then it will not be
-        included; this prevents the execution of CGI scripts.
-        Otherwise CGI scripts are invoked as normal using the
-        complete URL given in the command, including any query
-        string. 
-
-        <p>An attribute defines the location of the document; the
-        inclusion is done for each attribute given to the include
-        command. The valid attributes are:</p>
-
-        <dl>
-          <dt><strong>file</strong></dt>
-
-          <dd>The value is a path relative to the directory
-          containing the current document being parsed. It cannot
-          contain <code>../</code>, nor can it be an absolute path.
-          Therefore, you cannot include files that are outside of the
-          document root, or above the current document in the directory
-          structure.
-          The <code>virtual</code> attribute should always be used
-          in preference to this one.</dd>
-
-          <dt><strong><a name="includevirtual">virtual</a></strong></dt>
-
-         <dd>
-          <p>The value is a (%-encoded) URL relative to the
-          current document being parsed. The URL cannot contain a
-          scheme or hostname, only a path and an optional query
-          string. If it does not begin with a slash (/) then it is
-          taken to be relative to the current document.</p>
-
-          <p>A URL is constructed from the attribute, and the output the
-        server would return if the URL were accessed by the client
-        is included in the parsed output. Thus included files can
-           be nested.</p>
-
-           <p>If the specified URL is a CGI program, the program will
-           be executed and its output inserted in place of the directive
-           in the parsed file. You may include a query string in a CGI
-           url:</p>
-     
-     <blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-     &lt;!--#include virtual="/cgi-bin/example.cgi?argument=value" --&gt;
-     </code></td></tr></table></blockquote>
-           
-           <p><code>include virtual</code> should be used in preference
-           to <code>exec cgi</code> to include the output of CGI
-           programs into an HTML document.</p>
-          </dd>
-        </dl>
-      </dd>
-
-      <dt><strong>printenv</strong></dt>
-
-      <dd>
-      <p>This prints out a listing of all existing variables and
-      their values. Starting with Apache 1.3.12, special characters
-      are entity encoded (see the <a href="#echo"><code>echo</code></a> element for details)
-      before being output. There are no attributes.</p>
-
-      <p>For example:</p>
-
-      <blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-      &lt;!--#printenv --&gt;
-      </code></td></tr></table></blockquote>
-
-      <p>The <strong>printenv</strong> element is available only in
-      Apache 1.2 and above.</p>
-    </dd>
-      <dt><strong>set</strong></dt>
-
-      <dd>
-        This sets the value of a variable. Attributes: 
-
-        <dl>
-          <dt><strong>var</strong></dt>
-
-          <dd>The name of the variable to set.</dd>
-
-          <dt><strong>value</strong></dt>
-
-          <dd>The value to give a variable.</dd>
-        </dl>
-        <p>For example:</p>
-        
-        <blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-        &lt;!--#set var="category" value="help" --&gt;
-        </code></td></tr></table></blockquote>
-
-      <p>The <strong>set</strong> element is available only in
-      Apache 1.2 and above.</p>
-      </dd>
-    </dl>
-<h2><a name="includevars">Include Variables</a></h2>
-    
-
-    <p>In addition to the variables in the standard CGI environment,
-    these are available for the <code>echo</code> command, for
-    <code>if</code> and <code>elif</code>, and to any program
-    invoked by the document.</p>
-
-    <dl>
-      <dt>DATE_GMT</dt>
-
-      <dd>The current date in Greenwich Mean Time.</dd>
-
-      <dt>DATE_LOCAL</dt>
-
-      <dd>The current date in the local time zone.</dd>
-
-      <dt>DOCUMENT_NAME</dt>
-
-      <dd>The filename (excluding directories) of the document
-      requested by the user.</dd>
-
-      <dt>DOCUMENT_URI</dt>
-
-      <dd>The (%-decoded) URL path of the document requested by the
-      user. Note that in the case of nested include files, this is
-      <em>not</em> then URL for the current document.</dd>
-
-      <dt>LAST_MODIFIED</dt>
-
-      <dd>The last modification date of the document requested by
-      the user.</dd>
-    </dl>
-<h2>Variable Substitution</h2>
-    
-
-    <p>Variable substitution is done within quoted strings in most
-    cases where they may reasonably occur as an argument to an SSI
-    directive. This includes the <code>config</code>,
-    <code>exec</code>, <code>flastmod</code>, <code>fsize</code>,
-    <code>include</code>, and <code>set</code> directives, as well
-    as the arguments to conditional operators. You can insert a
-    literal dollar sign into the string using backslash
-    quoting:</p>
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-    &lt;!--#if expr="$a = \$test" --&gt;
-</code></td></tr></table></blockquote>
-
-    <p>If a variable reference needs to be substituted in the
-    middle of a character sequence that might otherwise be
-    considered a valid identifier in its own right, it can be
-    disambiguated by enclosing the reference in braces,
-    <em>a la</em> shell substitution:</p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-    &lt;!--#set var="Zed" value="${REMOTE_HOST}_${REQUEST_METHOD}" --&gt;
-</code></td></tr></table></blockquote>
-
-    <p>This will result in the <code>Zed</code> variable being set
-    to "<code>X_Y</code>" if <code>REMOTE_HOST</code> is
-    "<code>X</code>" and <code>REQUEST_METHOD</code> is
-    "<code>Y</code>".</p>
-
-    <p>EXAMPLE: the below example will print "in foo" if the
-    DOCUMENT_URI is /foo/file.html, "in bar" if it is
-    /bar/file.html and "in neither" otherwise:</p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-    &lt;!--#if expr="\"$DOCUMENT_URI\" = \"/foo/file.html\"" --&gt;<br>
-    in foo<br>
-    &lt;!--#elif expr="\"$DOCUMENT_URI\" = \"/bar/file.html\"" --&gt;<br>
-    in bar<br>
-    &lt;!--#else --&gt;<br>
-    in neither<br>
-    &lt;!--#endif --&gt;
-</code></td></tr></table></blockquote>
-<h2><a name="flowctrl">Flow Control Elements</a></h2>
-    
-
-    <p>These are available in Apache 1.2 and above. The basic flow
-    control elements are:</p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-    &lt;!--#if expr="<em>test_condition</em>" --&gt;<br>
-    &lt;!--#elif expr="<em>test_condition</em>" --&gt;<br>
-    &lt;!--#else --&gt;<br>
-    &lt;!--#endif --&gt;
-</code></td></tr></table></blockquote>
-
-    <p>The <strong><code>if</code></strong> element works like an
-    if statement in a programming language. The test condition is
-    evaluated and if the result is true, then the text until the
-    next <strong><code>elif</code></strong>,
-    <strong><code>else</code></strong>. or
-    <strong><code>endif</code></strong> element is included in the
-    output stream.</p>
-
-    <p>The <strong><code>elif</code></strong> or
-    <strong><code>else</code></strong> statements are be used the
-    put text into the output stream if the original test_condition
-    was false. These elements are optional.</p>
-
-    <p>The <strong><code>endif</code></strong> element ends the
-    <strong><code>if</code></strong> element and is required.</p>
-
-    <p><em>test_condition</em> is one of the following:</p>
-
-    <dl>
-      <dt><em>string</em></dt>
-
-      <dd>true if <em>string</em> is not empty</dd>
-
-      <dt><em>string1</em> = <em>string2</em><br>
-       <em>string1</em> != <em>string2</em><br>
-       <em>string1</em> &lt; <em>string2</em><br>
-       <em>string1</em> &lt;= <em>string2</em><br>
-       <em>string1</em> &gt; <em>string2</em><br>
-       <em>string1</em> &gt;= <em>string2</em></dt>
-
-      <dd>Compare string1 with string 2. If string2 has the form
-      <em>/string/</em> then it is compared as a regular
-      expression. Regular expressions have the same syntax as those
-      found in the Unix <code>egrep</code> command.</dd>
-
-      <dt>( <em>test_condition</em> )</dt>
-
-      <dd>true if <em>test_condition</em> is true</dd>
-
-      <dt>! <em>test_condition</em></dt>
-
-      <dd>true if <em>test_condition</em> is false</dd>
-
-      <dt><em>test_condition1</em> &amp;&amp;
-      <em>test_condition2</em></dt>
-
-      <dd>true if both <em>test_condition1</em> and
-      <em>test_condition2</em> are true</dd>
-
-      <dt><em>test_condition1</em> || <em>test_condition2</em></dt>
-
-      <dd>true if either <em>test_condition1</em> or
-      <em>test_condition2</em> is true</dd>
-    </dl>
-
-    <p>"<em>=</em>" and "<em>!=</em>" bind more tightly than
-    "<em>&amp;&amp;</em>" and "<em>||</em>". "<em>!</em>" binds
-    most tightly. Thus, the following are equivalent:</p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-    &lt;!--#if expr="$a = test1 &amp;&amp; $b = test2" --&gt;<br>
-    &lt;!--#if expr="($a = test1) &amp;&amp; ($b = test2)" --&gt;
-</code></td></tr></table></blockquote>
-
-    <p>Anything that's not recognized as a variable or an operator
-    is treated as a string. Strings can also be quoted:
-    <em>'string'</em>. Unquoted strings can't contain whitespace
-    (blanks and tabs) because it is used to separate tokens such as
-    variables. If multiple strings are found in a row, they are
-    concatenated using blanks. So,</p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-    <pre><em>string1    string2</em>  results in <em>string1 string2</em></pre>
-    <pre><em>'string1    string2'</em> results in <em>string1    string2</em></pre>
-</code></td></tr></table></blockquote>
-
-<h2>Using Server Side Includes for ErrorDocuments</h2>
-    
-
-    <p>There is <a href="../misc/custom_errordocs.html">a document</a>
-    which describes how to use the features of mod_include to offer
-    internationalized customized server error documents.</p>
-
-<h2>PATH_INFO with Server Side Includes</h2>
-
-    <p>Files processed for server-side includes no longer accept
-    requests with PATH_INFO (trailing pathname information) by
-    default.  You can use the <a href="code.html#acceptpathinfo" class="directive"><code class="directive">AcceptPathInfo</code></a> directive to
-    configure the server to accept requests with PATH_INFO.</p>
-
-<hr/><h2><a name="SSIEndTag">SSIEndTag</a> <a name="ssiendtag">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Changes the string that mod_include looks for to end an
-include command.</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>SSIEndTag <em>tag</em></syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>SSIEndTag "--&gt;"</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>FileInfo</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_include</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>Apache 1.2 and Available in version 2.0.30 and later.
-</td></tr></table></td></tr></table><usage>
-    <p>This directive changes the string that mod_include looks for 
-    to mark the end of a include command.</p>
-
-</usage><p><strong>See also </strong></p><ul><li><code class="directive">SSIStartTag</code></li></ul><hr/><h2><a name="SSIErrorMsg">SSIErrorMsg</a> <a name="ssierrormsg">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Changes the error message displayed when there is an error</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>SSIErrorMsg <em>message</em></syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>SSIErrorMsg 
-"[an error occurred while processing this directive]"</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td/></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_include</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>Available in version 2.0.30 and later.</td></tr></table></td></tr></table><usage>
-    <p>The SSIErrorMsg directive changes the error message displayed
-    when mod_include encounters an error. For production servers you
-    may consider changing the default error message to
-    <code>"&lt;-- Error --&gt;"</code> so that the message
-    is not presented to the user.
-    </p>
-    <p>This directive has the same effect as the <code>&lt;--#config
-    errmsg=<em>message</em> --&gt;</code> element.</p>
-
-</usage><hr/><h2><a name="SSIStartTag">SSIStartTag</a> <a name="ssistarttag">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td/></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>Changes the string that mod_include looks for to start an
-include element</syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>SSIStartTag "&lt;--!"</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td/></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_include</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>Available in version 2.0.30 and later.</td></tr></table></td></tr></table><usage>
-
-    <p>This directive changes the string that mod_include looks for 
-    to mark an include element to process.</p>
-
-    <p>You may want to use this option if have 2 servers parsing the
-    output of a file each processing different commands (possibly at
-    different times).</p> 
-
-</usage><p><strong>See also </strong></p><ul><li><code class="directive">SSIEndTag</code></li></ul><hr/><h2><a name="SSITimeFormat">SSITimeFormat</a> <a name="ssitimeformat">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Configures the format in which date strings are 
-displayed</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>SSITimeFormat <em>formatstring</em></syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>SSITimeFormat "%A, %d-%b-%Y %H:%M:%S %Z"</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td/></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_include</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>Available in version 2.0.30 and later.</td></tr></table></td></tr></table><usage>
-<p>This directive changes the format in which date strings are displayed 
-    when echoing DATE environment variables.  The <em>formatstring</em>
-    is as in strftime(3) from the C standard library.</p>
-
-    <p>This directive has the same effect as the <code>&lt;--#config
-    timefmt=<em>formatstring</em> --&gt;</code> element.</p>
-</usage><hr/><h2><a name="SSIUndefinedEcho">SSIUndefinedEcho</a> <a name="ssiundefinedecho">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Changes the string that mod_include displays when
-a variable isn't set.</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>SSIUndefinedEcho <em>tag</em></syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>SSIUndefinedEcho "&lt;-- undef --&gt;"</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>FileInfo</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_include</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>Available in version 2.0.34 and later.
-</td></tr></table></td></tr></table><usage>
-    <p>This directive changes the string that mod_include displays
-    when a variable is not set and "echoed".</p>
-</usage><hr/><h2><a name="XBitHack">XBitHack</a> <a name="xbithack">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Parse SSI directives in files with the execute 
-bit set</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>XBitHack on|off|full</syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>XBitHack off</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>Options</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_include</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td/></tr></table></td></tr></table><usage>
-    <p>The XBitHack directives controls the parsing of ordinary
-    html documents. This directive only affects files associated
-    with the MIME type <code>text/html</code>. XBitHack can take on
-    the following values:</p>
-
-    <dl>
-      <dt>off</dt>
-
-      <dd>No special treatment of executable files.</dd>
-
-      <dt>on</dt>
-
-      <dd>Any text/html file that has the user-execute bit set will 
-      be treated as a server-parsed html document.</dd>
-
-      <dt>full</dt>
-
-      <dd>
-        As for <code>on</code> but also test the group-execute bit.
-        If it is set, then set the Last-modified date of the
-        returned file to be the last modified time of the file. If
-        it is not set, then no last-modified date is sent. Setting
-        this bit allows clients and proxies to cache the result of
-        the request. 
-
-        <blockquote><table><tr><td bgcolor="#e0e5f5"><strong>Note:</strong> you would not want to use the full
-        option, unless you assure the group-execute bit is unset for
-        every SSI script which might <code>#include</code> a CGI 
-        or otherwise produces different output on each hit (or could 
-        potentially change on subsequent requests).</td></tr></table></blockquote>
-      </dd>
-    </dl>
-
-    </usage><hr/><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img alt="Index" src="../images/index.gif"/></a><a href="../"><img alt="Home" src="../images/home.gif"/></a></blockquote></body></html>
\ No newline at end of file
diff --git a/docs/manual/mod/mod_include.xml b/docs/manual/mod/mod_include.xml
deleted file mode 100644
index 282d4ce..0000000
--- a/docs/manual/mod/mod_include.xml
+++ /dev/null
@@ -1,726 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.xsl"?>
-<modulesynopsis>
-
-<name>mod_include</name>
-<description>Server-parsed html documents (Server Side Includes)</description>
-<status>Base</status>
-<sourcefile>mod_include.c</sourcefile>
-<identifier>include_module</identifier>
-
-<summary>
-
-    <p>This module provides a filter which will process files
-    before they are sent to the client. The processing is
-    controlled by specially formated SGML comments, referred to as
-    <em>elements</em>. These elements allow conditional text, the
-    inclusion other files or programs, as well as the setting and
-    printing of environment variables.</p>
-
-</summary>
-    <seealso><directive module="core">Options</directive></seealso>
-    <seealso><directive module="core">SetOutputFilter</directive></seealso>
-    <seealso><directive module="core">AcceptPathInfo</directive></seealso>
-
-<section id="enabling">
-    <title>Enabling Server-Side Includes</title>
-
-    <p>Server Side Includes are implemented by the
-    <code>INCLUDES</code> <a href="../filter.html">filter</a>. If
-    documents containing server-side include directives are given
-    the extension .shtml, the following directives will make Apache
-    parse them and assign the resulting document the mime type of
-    <code>text/html</code>:</p>
-
-    <example>
-      AddType text/html .shtml<br />
-      AddOutputFilter INCLUDES .shtml
-    </example>
-
-    <p>The following directive must be given for the directories
-    containing the shtml files (typically in a
-    <code>&lt;Directory&gt;</code> section, but this directive is
-    also valid .htaccess files if <code>AllowOverride
-    Options</code> is set):</p>
-
-    <example>
-      Options +Includes
-    </example>
-
-    <p>For backwards compatibility, the <code>server-parsed</code>
-    <a href="../handler.html">handler</a> also activates the
-    INCLUDES filter. As well, Apache will activate the INCLUDES
-    filter for any document with mime type
-    <code>text/x-server-parsed-html</code> or
-    <code>text/x-server-parsed-html3</code> (and the resulting
-    output will have the mime type <code>text/html</code>).</p>
-
-    <p>For more information, see our <a
-    href="../howto/ssi.html">Tutorial on Server Side
-    Includes</a>.</p>
-</section>
-
-<section id="basic">
-    <title>Basic Elements</title>
-    <p>The document is parsed as an HTML document, with special
-    commands embedded as SGML comments. A command has the syntax: </p>
-
-    <example>
-      <code>&lt;!--#</code><em>element attribute=value
-      attribute=value ...</em> <code>--&gt;</code>
-    </example>
-
-    <p>The value will often be enclosed in double quotes; many
-    commands only allow a single attribute-value pair. Note that
-    the comment terminator (<code>--&gt;</code>) should be preceded
-    by whitespace to ensure that it isn't considered part of an SSI
-    token. </p>
-
-    <p>The allowed elements are:</p>
-
-    <dl>
-      <dt><strong>config</strong></dt>
-
-      <dd>
-        This command controls various aspects of the parsing. The
-        valid attributes are: 
-
-        <dl>
-          <dt><strong>errmsg</strong></dt>
-
-          <dd>The value is a message that is sent back to the
-          client if an error occurs whilst parsing the
-          document.</dd>
-
-          <dt><strong>sizefmt</strong></dt>
-
-          <dd>The value sets the format to be used which displaying
-          the size of a file. Valid values are <code>bytes</code>
-          for a count in bytes, or <code>abbrev</code> for a count
-          in Kb or Mb as appropriate.</dd>
-
-          <dt><strong>timefmt</strong></dt>
-
-          <dd>The value is a string to be used by the
-          <code>strftime(3)</code> library routine when printing
-          dates.</dd>
-        </dl>
-      </dd>
-
-      <dt><strong><a name="echo">echo</a></strong></dt>
-
-      <dd>
-        <p>This command prints one of the <a href="#includevars">include
-        variables</a>, defined below. If the variable is unset, it
-        is printed as <code>(none)</code>. Any dates printed are
-        subject to the currently configured <code>timefmt</code>.</p>
-
-        <p>Attributes:</p> 
-
-        <dl>
-          <dt><strong>var</strong></dt>
-
-          <dd>The value is the name of the variable to print.</dd>
-
-          <dt><strong>encoding</strong></dt>
-
-          <dd>Specifies how Apache should encode special characters
-          contained in the variable before outputting them. If set
-          to "none", no encoding will be done. If set to "url",
-          then URL encoding (also known as %-encoding; this is
-          appropriate for use within URLs in links, etc.) will be
-          performed. At the start of an <code>echo</code> element,
-          the default is set to "entity", resulting in entity
-          encoding (which is appropriate in the context of a
-          block-level HTML element, eg. a paragraph of text). This
-          can be changed by adding an <code>encoding</code>
-          attribute, which will remain in effect until the next
-          <code>encoding</code> attribute is encountered or the
-          element ends, whichever comes first. Note that the
-          <code>encoding</code> attribute must <em>precede</em> the
-          corresponding <code>var</code> attribute to be effective,
-          and that only special characters as defined in the
-          ISO-8859-1 character encoding will be encoded. This
-          encoding process may not have the desired result if a
-          different character encoding is in use. Apache 1.3.12 and
-          above; previous versions do no encoding.</dd>
-        </dl>
-      </dd>
-
-      <dt><strong>exec</strong></dt>
-
-      <dd>
-        The exec command executes a given shell command or CGI
-        script. The IncludesNOEXEC <directive
-        module="core">Option</directive> disables this command
-        completely. The valid attributes are: 
-
-        <dl>
-          <dt><strong>cgi</strong></dt>
-
-          <dd>
-            The value specifies a (%-encoded) URL relative path to
-            the CGI script. If the path does not begin with a (/),
-            then it is taken to be relative to the current
-            document. The document referenced by this path is
-            invoked as a CGI script, even if the server would not
-            normally recognize it as such. However, the directory
-            containing the script must be enabled for CGI scripts
-            (with <directive module="mod_alias">ScriptAlias</directive>
-            or the ExecCGI <directive module="core">Option</directive>). 
-
-            <p>The CGI script is given the PATH_INFO and query
-            string (QUERY_STRING) of the original request from the
-            client; these cannot be specified in the URL path. The
-            include variables will be available to the script in
-            addition to the standard <a href="mod_cgi.html">CGI</a>
-            environment.</p>
-
-            <p>For example:</p>
-
-  <example>&lt;!--#exec cgi="/cgi-bin/example.cgi" --&gt;</example>
-
-            <p>If the script returns a Location: header instead of
-            output, then this will be translated into an HTML
-            anchor.</p>
-
-            <p>The <code><a href="#includevirtual">include
-            virtual</a></code> element should be
-            used in preference to <code>exec cgi</code>. In particular,
-            if you need to pass additional arguments to a CGI program,
-            using the query string, this cannot be done with <code>exec
-            cgi</code>, but can be done with <code>include
-            virtual</code>, as shown here:</p>
-
-  <example>
-  &lt;!--#include virtual="/cgi-bin/example.cgi?argument=value" --&gt;
-  </example>
-
-          </dd>
-
-          <dt><strong>cmd</strong></dt>
-
-          <dd>
-          <p>The server will execute the given string using
-          <code>/bin/sh</code>. The <a 
-          href="#includevars">include variables</a> are available
-          to the command, in addition to the usual set of CGI 
-          variables.</p>
-
-        <p>The use of <code><a href="#includevirtual">#include 
-        virtual</a></code> is almost always
-        prefered to using either <code>#exec cgi</code> or <code>#exec
-        cmd</code>. The former (<code>#include virtual</code>) used the
-        standard Apache sub-request mechanism to include files or
-        scripts. It is much better tested and maintained.</p>
-
-          <p>In addition, on some platforms, like Win32, and on unix
-          when using suexec, you cannot pass arguments to a command in 
-          an <code>exec</code> directive, or otherwise include spaces in
-          the command. Thus, while the following will work under a
-          non-suexec configuration on unix, it will not produce the
-          desired result under Win32, or when running suexec:</p>
-
-   <example>
-   &lt;!--#exec cmd="perl /path/to/perlscript arg1 arg2" --&gt;
-   </example>
-
-          </dd>
-        </dl>
-      </dd>
-
-      <dt><strong>fsize</strong></dt>
-
-      <dd>
-        This command prints the size of the specified file, subject
-        to the <code>sizefmt</code> format specification.
-        Attributes: 
-
-        <dl>
-          <dt><strong>file</strong></dt>
-
-          <dd>The value is a path relative to the directory
-          containing the current document being parsed.</dd>
-
-          <dt><strong>virtual</strong></dt>
-
-          <dd>The value is a (%-encoded) URL-path relative to the
-          current document being parsed. If it does not begin with
-          a slash (/) then it is taken to be relative to the
-          current document.</dd>
-        </dl>
-      </dd>
-
-      <dt><strong>flastmod</strong></dt>
-
-      <dd>This command prints the last modification date of the
-      specified file, subject to the <code>timefmt</code> format
-      specification. The attributes are the same as for the
-      <code>fsize</code> command.</dd>
-
-      <dt><strong>include</strong></dt>
-
-      <dd>
-        This command inserts the text of another document or file
-        into the parsed file. Any included file is subject to the
-        usual access control. If the directory containing the
-        parsed file has the <a href="core.html#options">Option</a>
-        IncludesNOEXEC set, and the including the document would
-        cause a program to be executed, then it will not be
-        included; this prevents the execution of CGI scripts.
-        Otherwise CGI scripts are invoked as normal using the
-        complete URL given in the command, including any query
-        string. 
-
-        <p>An attribute defines the location of the document; the
-        inclusion is done for each attribute given to the include
-        command. The valid attributes are:</p>
-
-        <dl>
-          <dt><strong>file</strong></dt>
-
-          <dd>The value is a path relative to the directory
-          containing the current document being parsed. It cannot
-          contain <code>../</code>, nor can it be an absolute path.
-          Therefore, you cannot include files that are outside of the
-          document root, or above the current document in the directory
-          structure.
-          The <code>virtual</code> attribute should always be used
-          in preference to this one.</dd>
-
-          <dt><strong><a name="includevirtual">virtual</a></strong></dt>
-
-         <dd>
-          <p>The value is a (%-encoded) URL relative to the
-          current document being parsed. The URL cannot contain a
-          scheme or hostname, only a path and an optional query
-          string. If it does not begin with a slash (/) then it is
-          taken to be relative to the current document.</p>
-
-          <p>A URL is constructed from the attribute, and the output the
-        server would return if the URL were accessed by the client
-        is included in the parsed output. Thus included files can
-           be nested.</p>
-
-           <p>If the specified URL is a CGI program, the program will
-           be executed and its output inserted in place of the directive
-           in the parsed file. You may include a query string in a CGI
-           url:</p>
-     
-     <example>
-     &lt;!--#include virtual="/cgi-bin/example.cgi?argument=value" --&gt;
-     </example>
-           
-           <p><code>include virtual</code> should be used in preference
-           to <code>exec cgi</code> to include the output of CGI
-           programs into an HTML document.</p>
-          </dd>
-        </dl>
-      </dd>
-
-      <dt><strong>printenv</strong></dt>
-
-      <dd>
-      <p>This prints out a listing of all existing variables and
-      their values. Starting with Apache 1.3.12, special characters
-      are entity encoded (see the <a
-      href="#echo"><code>echo</code></a> element for details)
-      before being output. There are no attributes.</p>
-
-      <p>For example:</p>
-
-      <example>
-      &lt;!--#printenv --&gt;
-      </example>
-
-      <p>The <strong>printenv</strong> element is available only in
-      Apache 1.2 and above.</p>
-    </dd>
-      <dt><strong>set</strong></dt>
-
-      <dd>
-        This sets the value of a variable. Attributes: 
-
-        <dl>
-          <dt><strong>var</strong></dt>
-
-          <dd>The name of the variable to set.</dd>
-
-          <dt><strong>value</strong></dt>
-
-          <dd>The value to give a variable.</dd>
-        </dl>
-        <p>For example:</p>
-        
-        <example>
-        &lt;!--#set var="category" value="help" --&gt;
-        </example>
-
-      <p>The <strong>set</strong> element is available only in
-      Apache 1.2 and above.</p>
-      </dd>
-    </dl>
-</section>
-
-<section id="includevars">
-    <title>Include Variables</title>
-
-    <p>In addition to the variables in the standard CGI environment,
-    these are available for the <code>echo</code> command, for
-    <code>if</code> and <code>elif</code>, and to any program
-    invoked by the document.</p>
-
-    <dl>
-      <dt>DATE_GMT</dt>
-
-      <dd>The current date in Greenwich Mean Time.</dd>
-
-      <dt>DATE_LOCAL</dt>
-
-      <dd>The current date in the local time zone.</dd>
-
-      <dt>DOCUMENT_NAME</dt>
-
-      <dd>The filename (excluding directories) of the document
-      requested by the user.</dd>
-
-      <dt>DOCUMENT_URI</dt>
-
-      <dd>The (%-decoded) URL path of the document requested by the
-      user. Note that in the case of nested include files, this is
-      <em>not</em> then URL for the current document.</dd>
-
-      <dt>LAST_MODIFIED</dt>
-
-      <dd>The last modification date of the document requested by
-      the user.</dd>
-    </dl>
-</section>
-
-<section>
-    <title>Variable Substitution</title>
-
-    <p>Variable substitution is done within quoted strings in most
-    cases where they may reasonably occur as an argument to an SSI
-    directive. This includes the <code>config</code>,
-    <code>exec</code>, <code>flastmod</code>, <code>fsize</code>,
-    <code>include</code>, and <code>set</code> directives, as well
-    as the arguments to conditional operators. You can insert a
-    literal dollar sign into the string using backslash
-    quoting:</p>
-<example>
-    &lt;!--#if expr="$a = \$test" --&gt;
-</example>
-
-    <p>If a variable reference needs to be substituted in the
-    middle of a character sequence that might otherwise be
-    considered a valid identifier in its own right, it can be
-    disambiguated by enclosing the reference in braces,
-    <em>a la</em> shell substitution:</p>
-
-<example>
-    &lt;!--#set var="Zed" value="${REMOTE_HOST}_${REQUEST_METHOD}" --&gt;
-</example>
-
-    <p>This will result in the <code>Zed</code> variable being set
-    to "<code>X_Y</code>" if <code>REMOTE_HOST</code> is
-    "<code>X</code>" and <code>REQUEST_METHOD</code> is
-    "<code>Y</code>".</p>
-
-    <p>EXAMPLE: the below example will print "in foo" if the
-    DOCUMENT_URI is /foo/file.html, "in bar" if it is
-    /bar/file.html and "in neither" otherwise:</p>
-
-<example>
-    &lt;!--#if expr="\"$DOCUMENT_URI\" = \"/foo/file.html\"" --&gt;<br />
-    in foo<br />
-    &lt;!--#elif expr="\"$DOCUMENT_URI\" = \"/bar/file.html\"" --&gt;<br />
-    in bar<br />
-    &lt;!--#else --&gt;<br />
-    in neither<br />
-    &lt;!--#endif --&gt;
-</example>
-</section>
-
-<section id="flowctrl">
-    <title>Flow Control Elements</title>
-
-    <p>These are available in Apache 1.2 and above. The basic flow
-    control elements are:</p>
-
-<example>
-    &lt;!--#if expr="<em>test_condition</em>" --&gt;<br />
-    &lt;!--#elif expr="<em>test_condition</em>" --&gt;<br />
-    &lt;!--#else --&gt;<br />
-    &lt;!--#endif --&gt;
-</example>
-
-    <p>The <strong><code>if</code></strong> element works like an
-    if statement in a programming language. The test condition is
-    evaluated and if the result is true, then the text until the
-    next <strong><code>elif</code></strong>,
-    <strong><code>else</code></strong>. or
-    <strong><code>endif</code></strong> element is included in the
-    output stream.</p>
-
-    <p>The <strong><code>elif</code></strong> or
-    <strong><code>else</code></strong> statements are be used the
-    put text into the output stream if the original test_condition
-    was false. These elements are optional.</p>
-
-    <p>The <strong><code>endif</code></strong> element ends the
-    <strong><code>if</code></strong> element and is required.</p>
-
-    <p><em>test_condition</em> is one of the following:</p>
-
-    <dl>
-      <dt><em>string</em></dt>
-
-      <dd>true if <em>string</em> is not empty</dd>
-
-      <dt><em>string1</em> = <em>string2</em><br />
-       <em>string1</em> != <em>string2</em><br />
-       <em>string1</em> &lt; <em>string2</em><br />
-       <em>string1</em> &lt;= <em>string2</em><br />
-       <em>string1</em> &gt; <em>string2</em><br />
-       <em>string1</em> &gt;= <em>string2</em></dt>
-
-      <dd>Compare string1 with string 2. If string2 has the form
-      <em>/string/</em> then it is compared as a regular
-      expression. Regular expressions have the same syntax as those
-      found in the Unix <code>egrep</code> command.</dd>
-
-      <dt>( <em>test_condition</em> )</dt>
-
-      <dd>true if <em>test_condition</em> is true</dd>
-
-      <dt>! <em>test_condition</em></dt>
-
-      <dd>true if <em>test_condition</em> is false</dd>
-
-      <dt><em>test_condition1</em> &amp;&amp;
-      <em>test_condition2</em></dt>
-
-      <dd>true if both <em>test_condition1</em> and
-      <em>test_condition2</em> are true</dd>
-
-      <dt><em>test_condition1</em> || <em>test_condition2</em></dt>
-
-      <dd>true if either <em>test_condition1</em> or
-      <em>test_condition2</em> is true</dd>
-    </dl>
-
-    <p>"<em>=</em>" and "<em>!=</em>" bind more tightly than
-    "<em>&amp;&amp;</em>" and "<em>||</em>". "<em>!</em>" binds
-    most tightly. Thus, the following are equivalent:</p>
-
-<example>
-    &lt;!--#if expr="$a = test1 &amp;&amp; $b = test2" --&gt;<br />
-    &lt;!--#if expr="($a = test1) &amp;&amp; ($b = test2)" --&gt;
-</example>
-
-    <p>Anything that's not recognized as a variable or an operator
-    is treated as a string. Strings can also be quoted:
-    <em>'string'</em>. Unquoted strings can't contain whitespace
-    (blanks and tabs) because it is used to separate tokens such as
-    variables. If multiple strings are found in a row, they are
-    concatenated using blanks. So,</p>
-
-<example>
-    <pre><em>string1    string2</em>  results in <em>string1 string2</em></pre>
-    <pre><em>'string1    string2'</em> results in <em>string1    string2</em></pre>
-</example>
-
-</section>
-
-<section>
-    <title>Using Server Side Includes for ErrorDocuments</title>
-
-    <p>There is <a href="../misc/custom_errordocs.html">a document</a>
-    which describes how to use the features of mod_include to offer
-    internationalized customized server error documents.</p>
-
-</section>
-
-<section><title>PATH_INFO with Server Side Includes</title>
-
-    <p>Files processed for server-side includes no longer accept
-    requests with PATH_INFO (trailing pathname information) by
-    default.  You can use the <directive
-    module="core">AcceptPathInfo</directive> directive to
-    configure the server to accept requests with PATH_INFO.</p>
-
-</section>
-
-<directivesynopsis>
-<name>SSIEndTag</name>
-<description>Changes the string that mod_include looks for to end an
-include command.</description>
-<syntax>SSIEndTag <em>tag</em></syntax>
-<default>SSIEndTag &quot;--&gt;&quot;</default>
-<contextlist><context>server config</context>
-<context>virtual host</context></contextlist>
-<override>FileInfo</override>
-<compatibility>Available in version 2.0.30 and later.
-</compatibility>
-
-<usage>
-    <p>This directive changes the string that mod_include looks for 
-    to mark the end of a include command.</p>
-
-</usage>
-<seealso><directive>SSIStartTag</directive></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>SSIUndefinedEcho</name>
-<description>Changes the string that mod_include displays when
-a variable isn't set.</description>
-<syntax>SSIUndefinedEcho <em>tag</em></syntax>
-<default>SSIUndefinedEcho &quot;&lt;-- undef --&gt;&quot;</default>
-<contextlist><context>server config</context>
-<context>virtual host</context></contextlist>
-<override>FileInfo</override>
-<compatibility>Available in version 2.0.34 and later.
-</compatibility>
-
-<usage>
-    <p>This directive changes the string that mod_include displays
-    when a variable is not set and &quot;echoed&quot;.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>SSIErrorMsg</name>
-<description>Changes the error message displayed when there is an error</description>
-<syntax>SSIErrorMsg <em>message</em></syntax>
-<default>SSIErrorMsg 
-&quot;[an error occurred while processing this directive]&quot;</default>
-<contextlist>
-<context>server config</context>
-<context>virtual host</context>
-<context>directory</context>
-<context>.htaccess</context>
-</contextlist>
-<override></override>
-<compatibility>Available in version 2.0.30 and later.</compatibility>
-
-<usage>
-    <p>The SSIErrorMsg directive changes the error message displayed
-    when mod_include encounters an error. For production servers you
-    may consider changing the default error message to
-    <code>&quot;&lt;-- Error --&gt;&quot;</code> so that the message
-    is not presented to the user.
-    </p>
-    <p>This directive has the same effect as the <code>&lt;--#config
-    errmsg=<em>message</em> --&gt;</code> element.</p>
-
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>SSIStartTag</name>
-<description></description>
-<syntax>Changes the string that mod_include looks for to start an
-include element</syntax>
-<default>SSIStartTag &quot;&lt;--!&quot;</default>
-<contextlist>
-<context>server config</context>
-<context>virtual host</context>
-</contextlist>
-<override></override>
-<compatibility>Available in version 2.0.30 and later.</compatibility>
-
-<usage>
-
-    <p>This directive changes the string that mod_include looks for 
-    to mark an include element to process.</p>
-
-    <p>You may want to use this option if have 2 servers parsing the
-    output of a file each processing different commands (possibly at
-    different times).</p> 
-
-</usage>
-<seealso><directive>SSIEndTag</directive></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>SSITimeFormat</name>
-<description>Configures the format in which date strings are 
-displayed</description>
-<syntax>SSITimeFormat <em>formatstring</em></syntax>
-<default>SSITimeFormat &quot;%A, %d-%b-%Y %H:%M:%S %Z&quot;</default>
-<contextlist>
-<context>server config</context>
-<context>virtual host</context>
-<context>directory</context>
-<context>.htaccess</context>
-</contextlist>
-<override></override>
-<compatibility>Available in version 2.0.30 and later.</compatibility>
-
-<usage>
-<p>This directive changes the format in which date strings are displayed 
-    when echoing DATE environment variables.  The <em>formatstring</em>
-    is as in strftime(3) from the C standard library.</p>
-
-    <p>This directive has the same effect as the <code>&lt;--#config
-    timefmt=<em>formatstring</em> --&gt;</code> element.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>XBitHack</name>
-<description>Parse SSI directives in files with the execute 
-bit set</description>
-<syntax>XBitHack on|off|full</syntax>
-<default>XBitHack off</default>
-<contextlist>
-<context>server config</context>
-<context>virtual host</context>
-<context>directory</context>
-<context>.htaccess</context>
-</contextlist>
-<override>Options</override>
-<compatibility></compatibility>
-
-<usage>
-    <p>The XBitHack directives controls the parsing of ordinary
-    html documents. This directive only affects files associated
-    with the MIME type <code>text/html</code>. XBitHack can take on
-    the following values:</p>
-
-    <dl>
-      <dt>off</dt>
-
-      <dd>No special treatment of executable files.</dd>
-
-      <dt>on</dt>
-
-      <dd>Any text/html file that has the user-execute bit set will 
-      be treated as a server-parsed html document.</dd>
-
-      <dt>full</dt>
-
-      <dd>
-        As for <code>on</code> but also test the group-execute bit.
-        If it is set, then set the Last-modified date of the
-        returned file to be the last modified time of the file. If
-        it is not set, then no last-modified date is sent. Setting
-        this bit allows clients and proxies to cache the result of
-        the request. 
-
-        <note><strong>Note:</strong> you would not want to use the full
-        option, unless you assure the group-execute bit is unset for
-        every SSI script which might <code>#include</code> a CGI 
-        or otherwise produces different output on each hit (or could 
-        potentially change on subsequent requests).</note>
-      </dd>
-    </dl>
-
-    </usage>
-</directivesynopsis>
-
-</modulesynopsis>
-
diff --git a/docs/manual/mod/mod_info.html b/docs/manual/mod/mod_info.html
deleted file mode 100644
index 0a350e0..0000000
--- a/docs/manual/mod/mod_info.html
+++ /dev/null
@@ -1,54 +0,0 @@
-<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-     This file is generated from xml source: DO NOT EDIT
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
---><title>mod_info - Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img alt="[APACHE DOCUMENTATION]" src="../images/sub.gif"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module mod_info</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td><description>Provides a comprehensive overview of the server
-configuration</description></td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="module-dict.html#ModuleIdentifier" class="help">Module&nbsp;Identifier:</a></td><td>info_module</td></tr></table></td></tr></table><h2>Summary</h2><summary>
-
-    <p>To configure <code><a href="mod_info.html">mod_info</a></code>, add the following to your
-    <code>httpd.conf</code> file.</p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-&lt;Location /server-info&gt;<br>
-SetHandler server-info<br>
-&lt;/Location&gt;<br>
-</code></td></tr></table></blockquote>
-
-    <p>You may wish to add a 
-    <a href="core.html#<limit>" class="directive"><code class="directive">&lt;Limit&gt;</code></a> 
-    clause inside the 
-    <a href="core.html#<location>" class="directive"><code class="directive">&lt;location&gt;</code></a>
-    directive to limit access to your server configuration 
-    information.</p>
-
-    <p>Once configured, the server information is obtained by
-    accessing <code>http://your.host.dom/server-info</code></p>
-
-    <blockquote><table><tr><td bgcolor="#e0e5f5">
-      Note that the configuration files are read by the
-      module at run-time, and therefore the display may
-      <em>not</em> reflect the running server's active
-      configuration if the files have been changed since the server
-      was last reloaded. Also, the configuration files must be
-      readable by the user as which the server is running (see the
-      <a href="mpm_common.html#user" class="directive"><code class="directive">User</code></a> directive), or
-      else the directive settings will not be listed.
-
-      <p>It should also be noted that if
-      <code><a href="mod_info.html">mod_info</a></code> is compiled into the server, its
-      handler capability is available in <em>all</em> configuration
-      files, including <em>per</em>-directory files (<em>e.g.</em>,
-      <code>.htaccess</code>). This may have security-related
-      ramifications for your site.</p>
-    </td></tr></table></blockquote>
-</summary><h2>Directives</h2><ul><li><a href="#addmoduleinfo">AddModuleInfo</a></li></ul><hr/><h2><a name="AddModuleInfo">AddModuleInfo</a> <a name="addmoduleinfo">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Allows additional information to be added to the module
-information displayed by the server-info handler</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>AddModuleInfo <em>module-name string</em></syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual
-host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_info</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>Apache 1.3 and above</td></tr></table></td></tr></table><usage>
-    <p>This allows the content of <em>string</em> to be shown as
-    HTML interpreted, <strong>Additional Information</strong> for
-    the module <em>module-name</em>. Example:</p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-AddModuleInfo mod_auth.c 'See &lt;A HREF="http://www.apache.org/docs/mod/mod_auth.html"&gt;http://www.apache.org/docs/mod/mod_auth.html&lt;/A&gt;'
-</code></td></tr></table></blockquote>
-</usage><hr/><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img alt="Index" src="../images/index.gif"/></a><a href="../"><img alt="Home" src="../images/home.gif"/></a></blockquote></body></html>
\ No newline at end of file
diff --git a/docs/manual/mod/mod_info.xml b/docs/manual/mod/mod_info.xml
deleted file mode 100644
index f565d48..0000000
--- a/docs/manual/mod/mod_info.xml
+++ /dev/null
@@ -1,75 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.xsl"?>
-<modulesynopsis>
-
-<name>mod_info</name>
-<description>Provides a comprehensive overview of the server
-configuration</description>
-<status>Extension</status>
-<sourcefile>mod_info.c</sourcefile>
-<identifier>info_module</identifier>
-
-
-<summary>
-
-    <p>To configure <module>mod_info</module>, add the following to your
-    <code>httpd.conf</code> file.</p>
-
-<example>
-&lt;Location /server-info&gt;<br />
-SetHandler server-info<br />
-&lt;/Location&gt;<br />
-</example>
-
-    <p>You may wish to add a 
-    <directive module="core">&lt;Limit&gt;</directive> 
-    clause inside the 
-    <directive module="core">&lt;location&gt;</directive>
-    directive to limit access to your server configuration 
-    information.</p>
-
-    <p>Once configured, the server information is obtained by
-    accessing <code>http://your.host.dom/server-info</code></p>
-
-    <note>
-      Note that the configuration files are read by the
-      module at run-time, and therefore the display may
-      <em>not</em> reflect the running server's active
-      configuration if the files have been changed since the server
-      was last reloaded. Also, the configuration files must be
-      readable by the user as which the server is running (see the
-      <directive module="mpm_common">User</directive> directive), or
-      else the directive settings will not be listed.
-
-      <p>It should also be noted that if
-      <module>mod_info</module> is compiled into the server, its
-      handler capability is available in <em>all</em> configuration
-      files, including <em>per</em>-directory files (<em>e.g.</em>,
-      <code>.htaccess</code>). This may have security-related
-      ramifications for your site.</p>
-    </note>
-</summary>
-
-<directivesynopsis>
-<name>AddModuleInfo</name>
-<description>Allows additional information to be added to the module
-information displayed by the server-info handler</description>
-<syntax>AddModuleInfo <em>module-name string</em></syntax>
-<contextlist><context>server config</context> <context>virtual
-host</context></contextlist>
-<compatibility>Apache 1.3 and above</compatibility>
-
-<usage>
-    <p>This allows the content of <em>string</em> to be shown as
-    HTML interpreted, <strong>Additional Information</strong> for
-    the module <em>module-name</em>. Example:</p>
-
-<example>
-AddModuleInfo mod_auth.c 'See &lt;A HREF="http://www.apache.org/docs/mod/mod_auth.html"&gt;http://www.apache.org/docs/mod/mod_auth.html&lt;/A&gt;'
-</example>
-</usage>
-
-</directivesynopsis>
-</modulesynopsis>
-
diff --git a/docs/manual/mod/mod_isapi.html b/docs/manual/mod/mod_isapi.html
deleted file mode 100644
index c861113..0000000
--- a/docs/manual/mod/mod_isapi.html
+++ /dev/null
@@ -1,205 +0,0 @@
-<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-     This file is generated from xml source: DO NOT EDIT
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
---><title>mod_isapi - Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img alt="[APACHE DOCUMENTATION]" src="../images/sub.gif"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module mod_isapi</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td><description>ISAPI Extensions within Apache for Windows</description></td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="module-dict.html#ModuleIdentifier" class="help">Module&nbsp;Identifier:</a></td><td>isapi_module</td></tr><tr><td align="left" valign="top"><a href="module-dict.html#Compatibility" class="help">Compatibility:</a></td><td><compatibility>Win32 only</compatibility></td></tr></table></td></tr></table><h2>Summary</h2><summary>
-    <p>This module implements the Internet Server extension API. It
-    allows Internet Server extensions (<em>e.g.</em> ISAPI .dll
-    modules) to be served by Apache for Windows, subject to the
-    noted restrictions.</p>
-
-    <p>ISAPI extension modules (.dll files) are written by third
-    parties. The Apache Group does not author these modules, so we
-    provide no support for them. Please contact the ISAPI's author
-    directly if you are experiencing problems running their ISAPI
-    extention. <strong>Please <em>do not</em> post such problems to
-    Apache's lists or bug reporting pages.</strong></p>
-</summary><h2>Directives</h2><ul><li><a href="#isapiappendlogtoerrors">ISAPIAppendLogToErrors</a></li><li><a href="#isapiappendlogtoquery">ISAPIAppendLogToQuery</a></li><li><a href="#isapifilechache">ISAPIFileChache</a></li><li><a href="#isapilognotsupported">ISAPILogNotSupported</a></li><li><a href="#isapireadaheadbuffer">ISAPIReadAheadBuffer</a></li></ul><h2>Usage</h2> <p>In the server configuration file, use
-the <a href="mod_mime.html#addhandler" class="directive"><code class="directive">AddHandler</code></a> directive to
-associate ISAPI files with the <code>isapi-isa</code> handler, and map
-it to the with their file extensions. To enable any .dll file to be
-processed as an ISAPI extention, edit the httpd.conf file and add the
-following line:</p>
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-    AddHandler isapi-isa .dll
-</code></td></tr></table></blockquote>
-
-    <p>There is no capability within the Apache server to leave a
-    requested module loaded. However, you may preload and keep a
-    specific module loaded by using the following syntax in your
-    httpd.conf:</p>
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-    ISAPICacheFile c:/WebWork/Scripts/ISAPI/mytest.dll
-</code></td></tr></table></blockquote>
-
-    <p>Whether or not you have preloaded an ISAPI extension, all
-    ISAPI extensions are governed by the same permissions and
-    restrictions as CGI scripts. That is, <code>Options
-    ExecCGI</code> must be set for the directory that contains the
-    ISAPI .dll file.</p>
-
-    <p>Review the <a href="#notes">Additional Notes</a> and the <a href="#journal">Programmer's Journal</a> for additional details
-    and clarification of the specific ISAPI support offered by
-    mod_isapi.</p>
-<h2><a name="notes">Additional Notes</a></h2>
-
-    <p>Apache's ISAPI implementation conforms to all of the ISAPI
-    2.0 specification, except for some "Microsoft-specific"
-    extensions dealing with asynchronous I/O. Apache's I/O model
-    does not allow asynchronous reading and writing in a manner
-    that the ISAPI could access. If an ISA tries to access
-    unsupported features, including async I/O, a message is placed
-    in the error log to help with debugging. Since these messages
-    can become a flood, the directive <code>ISAPILogNotSupported
-    Off</code> exists to quiet this noise.</p>
-
-    <p>Some servers, like Microsoft IIS, load the ISAPI extension
-    into the server and keep it loaded until memory usage is too
-    high, or unless configuration options are specified. Apache
-    currently loads and unloads the ISAPI extension each time it is
-    requested, unless the ISAPICacheFile directive is specified.
-    This is inefficient, but Apache's memory model makes this the
-    most effective method. Many ISAPI modules are subtly
-    incompatible with the Apache server, and unloading these
-    modules helps to ensure the stability of the server.</p>
-
-    <p>Also, remember that while Apache supports ISAPI Extensions,
-    it <strong>does not support ISAPI Filters.</strong> Support for
-    filters may be added at a later date, but no support is planned
-    at this time.</p>
-<h2><a name="journal">Programmer's Journal</a></h2>
-
-    <p>If you are programming Apache 2.0 <code><a href="mod_isapi.html">mod_isapi</a></code>
-    modules, you must limit your calls to ServerSupportFunction to the
-    following directives:</p>
-
-    <dl>
-      <dt>HSE_REQ_SEND_URL_REDIRECT_RESP</dt>
-
-      <dd>Redirect the user to another location.<br>
-       This must be a fully qualified URL (e.g.
-      http://server/location).</dd>
-
-      <dt>HSE_REQ_SEND_URL</dt>
-
-      <dd>Redirect the user to another location.<br>
-       This cannot be a fully qualified URL, you are not allowed to
-      pass the protocol or a server name (e.g. simply
-      /location).<br>
-       This redirection is handled by the server, not the
-      browser.<br>
-       <strong>Warning:</strong> in their recent documentation,
-      Microsoft appears to have abandoned the distinction between
-      the two HSE_REQ_SEND_URL functions. Apache continues to treat
-      them as two distinct functions with different requirements
-      and behaviors.</dd>
-
-      <dt>HSE_REQ_SEND_RESPONSE_HEADER</dt>
-
-      <dd>Apache accepts a response body following the header if it
-      follows the blank line (two consecutive newlines) in the
-      headers string argument. This body cannot contain NULLs,
-      since the headers argument is NULL terminated.</dd>
-
-      <dt>HSE_REQ_DONE_WITH_SESSION</dt>
-
-      <dd>Apache considers this a no-op, since the session will be
-      finished when the ISAPI returns from processing.</dd>
-
-      <dt>HSE_REQ_MAP_URL_TO_PATH</dt>
-
-      <dd>Apache will translate a virtual name to a physical
-      name.</dd>
-
-      <dt>HSE_APPEND_LOG_PARAMETER</dt>
-
-      <dd>
-        This logged message may be captured in any of the following
-        logs: 
-
-        <ul>
-          <li>in the \"%{isapi-parameter}n\" component in a
-          CustomLog directive</li>
-
-          <li>in the %q log component with the
-          ISAPIAppendLogToQuery On directive</li>
-
-          <li>in the error log with the ISAPIAppendLogToErrors On
-          directive</li>
-        </ul>
-        The first option, the %{isapi-parameter}n component, is
-        always available and prefered.
-      </dd>
-
-      <dt>HSE_REQ_IS_KEEP_CONN</dt>
-
-      <dd>Will return the negotiated Keep-Alive status.</dd>
-
-      <dt>HSE_REQ_SEND_RESPONSE_HEADER_EX</dt>
-
-      <dd>Will behave as documented, although the fKeepConn flag is
-      ignored.</dd>
-
-      <dt>HSE_REQ_IS_CONNECTED</dt>
-
-      <dd>Will report false if the request has been aborted.</dd>
-    </dl>
-
-    <p>Apache returns FALSE to any unsupported call to
-    ServerSupportFunction, and sets the GetLastError value to
-    ERROR_INVALID_PARAMETER.</p>
-
-    <p>ReadClient retrieves the request body exceeding the initial
-    buffer (defined by ISAPIReadAheadBuffer). Based on the
-    ISAPIReadAheadBuffer setting (number of bytes to buffer prior
-    to calling the ISAPI handler) shorter requests are sent
-    complete to the extension when it is invoked. If the request is
-    longer, the ISAPI extension must use ReadClient to retrieve the
-    remaining request body.</p>
-
-    <p>WriteClient is supported, but only with the HSE_IO_SYNC flag
-    or no option flag (value of 0). Any other WriteClient request
-    will be rejected with a return value of FALSE, and a
-    GetLastError value of ERROR_INVALID_PARAMETER.</p>
-
-    <p>GetServerVariable is supported, although extended server
-    variables do not exist (as defined by other servers.) All the
-    usual Apache CGI environment variables are available from
-    GetServerVariable, as well as the ALL_HTTP and ALL_RAW
-    values.</p>
-
-    <p>Apache 2.0 <code><a href="mod_isapi.html">mod_isapi</a></code> supports additional
-    features introduced in later versions of the ISAPI specification,
-    as well as limited emulation of async I/O and the TransmitFile
-    semantics.  Apache also supports preloading ISAPI .dlls for
-    performance, neither of which were not available under Apache 1.3
-    mod_isapi.</p>
-<hr/><h2><a name="ISAPIAppendLogToErrors">ISAPIAppendLogToErrors</a> <a name="isapiappendlogtoerrors">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Record HSE_APPEND_LOG_PARAMETER requests from ISAPI
-extensions to the error log</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>ISAPIAppendLogToErrors on|off</syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>ISAPIAppendLogToErrors off</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_isapi</td></tr></table></td></tr></table><usage>
-    <p>Record HSE_APPEND_LOG_PARAMETER requests from ISAPI
-    extensions to the server error log.</p>
-</usage><hr/><h2><a name="ISAPIAppendLogToQuery">ISAPIAppendLogToQuery</a> <a name="isapiappendlogtoquery">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Record HSE_APPEND_LOG_PARAMETER requests from ISAPI
-extensions to the query field</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>ISAPIAppendLogToQuery on|off</syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>ISAPIAppendLogToQuery off</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_isapi</td></tr></table></td></tr></table><usage>
-    <p>Record HSE_APPEND_LOG_PARAMETER requests from ISAPI
-    extensions to the query field (appended to the CustomLog %q
-    component).</p>
-</usage><hr/><h2><a name="ISAPIFileChache">ISAPIFileChache</a> <a name="isapifilechache">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>ISAPI .dll files to be loaded at startup</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>ISAPIFileCache <em>file-path</em> [<em>file-path</em>] ...</syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_isapi</td></tr></table></td></tr></table><usage>
-    <p>Specifies a space-separated list of file names to be loaded
-    when the Apache server is launched, and remain loaded until the
-    server is shut down. This directive may be repeated for every
-    ISAPI .dll file desired. The full path name of each file should
-    be specified.</p>
-</usage><hr/><h2><a name="ISAPILogNotSupported">ISAPILogNotSupported</a> <a name="isapilognotsupported">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Log unsupported feature requests from ISAPI
-extensions</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>ISAPILogNotSupported on|off</syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>ISAPILogNotSupported on</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_isapi</td></tr></table></td></tr></table><usage>
-    <p>Logs all requests for unsupported features from ISAPI
-    extensions in the server error log. While this should be turned
-    off once all desired ISAPI modules are functioning, it defaults
-    to on to help administrators track down problems.</p>
-</usage><hr/><h2><a name="ISAPIReadAheadBuffer">ISAPIReadAheadBuffer</a> <a name="isapireadaheadbuffer">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Size of the Read Ahead Buffer sent to ISAPI 
-extensions</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>ISAPIReadAheadBuffer <em>size</em></syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>ISAPIReadAheadBuffer 49152</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_isapi</td></tr></table></td></tr></table><usage>
-    <p>Defines the maximum size of the Read Ahead Buffer sent to
-    ISAPI extensions when they are initially invoked. All remaining
-    data must be retrieved using the ReadClient callback; some
-    ISAPI extensions may not support the ReadClient function. Refer
-    questions to the ISAPI extension's author.</p>
-</usage><hr/><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img alt="Index" src="../images/index.gif"/></a><a href="../"><img alt="Home" src="../images/home.gif"/></a></blockquote></body></html>
\ No newline at end of file
diff --git a/docs/manual/mod/mod_isapi.xml b/docs/manual/mod/mod_isapi.xml
deleted file mode 100644
index c64cbd0..0000000
--- a/docs/manual/mod/mod_isapi.xml
+++ /dev/null
@@ -1,271 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.xsl"?>
-<modulesynopsis>
-
-<name>mod_isapi</name>
-<description>ISAPI Extensions within Apache for Windows</description>
-<status>Base</status>
-<sourcefile>mod_isapi.c</sourcefile>
-<identifier>isapi_module</identifier>
-<compatibility>Win32 only</compatibility>
-
-<summary>
-    <p>This module implements the Internet Server extension API. It
-    allows Internet Server extensions (<em>e.g.</em> ISAPI .dll
-    modules) to be served by Apache for Windows, subject to the
-    noted restrictions.</p>
-
-    <p>ISAPI extension modules (.dll files) are written by third
-    parties. The Apache Group does not author these modules, so we
-    provide no support for them. Please contact the ISAPI's author
-    directly if you are experiencing problems running their ISAPI
-    extention. <strong>Please <em>do not</em> post such problems to
-    Apache's lists or bug reporting pages.</strong></p>
-</summary>
-
-<section><title>Usage</title> <p>In the server configuration file, use
-the <directive module="mod_mime">AddHandler</directive> directive to
-associate ISAPI files with the <code>isapi-isa</code> handler, and map
-it to the with their file extensions. To enable any .dll file to be
-processed as an ISAPI extention, edit the httpd.conf file and add the
-following line:</p>
-<example>
-    AddHandler isapi-isa .dll
-</example>
-
-    <p>There is no capability within the Apache server to leave a
-    requested module loaded. However, you may preload and keep a
-    specific module loaded by using the following syntax in your
-    httpd.conf:</p>
-<example>
-    ISAPICacheFile c:/WebWork/Scripts/ISAPI/mytest.dll
-</example>
-
-    <p>Whether or not you have preloaded an ISAPI extension, all
-    ISAPI extensions are governed by the same permissions and
-    restrictions as CGI scripts. That is, <code>Options
-    ExecCGI</code> must be set for the directory that contains the
-    ISAPI .dll file.</p>
-
-    <p>Review the <a href="#notes">Additional Notes</a> and the <a
-    href="#journal">Programmer's Journal</a> for additional details
-    and clarification of the specific ISAPI support offered by
-    mod_isapi.</p>
-</section>
-
-<section id="notes"><title>Additional Notes</title>
-
-    <p>Apache's ISAPI implementation conforms to all of the ISAPI
-    2.0 specification, except for some "Microsoft-specific"
-    extensions dealing with asynchronous I/O. Apache's I/O model
-    does not allow asynchronous reading and writing in a manner
-    that the ISAPI could access. If an ISA tries to access
-    unsupported features, including async I/O, a message is placed
-    in the error log to help with debugging. Since these messages
-    can become a flood, the directive <code>ISAPILogNotSupported
-    Off</code> exists to quiet this noise.</p>
-
-    <p>Some servers, like Microsoft IIS, load the ISAPI extension
-    into the server and keep it loaded until memory usage is too
-    high, or unless configuration options are specified. Apache
-    currently loads and unloads the ISAPI extension each time it is
-    requested, unless the ISAPICacheFile directive is specified.
-    This is inefficient, but Apache's memory model makes this the
-    most effective method. Many ISAPI modules are subtly
-    incompatible with the Apache server, and unloading these
-    modules helps to ensure the stability of the server.</p>
-
-    <p>Also, remember that while Apache supports ISAPI Extensions,
-    it <strong>does not support ISAPI Filters.</strong> Support for
-    filters may be added at a later date, but no support is planned
-    at this time.</p>
-</section>
-
-<section id="journal"><title>Programmer's Journal</title>
-
-    <p>If you are programming Apache 2.0 <module>mod_isapi</module>
-    modules, you must limit your calls to ServerSupportFunction to the
-    following directives:</p>
-
-    <dl>
-      <dt>HSE_REQ_SEND_URL_REDIRECT_RESP</dt>
-
-      <dd>Redirect the user to another location.<br />
-       This must be a fully qualified URL (e.g.
-      http://server/location).</dd>
-
-      <dt>HSE_REQ_SEND_URL</dt>
-
-      <dd>Redirect the user to another location.<br />
-       This cannot be a fully qualified URL, you are not allowed to
-      pass the protocol or a server name (e.g. simply
-      /location).<br />
-       This redirection is handled by the server, not the
-      browser.<br />
-       <strong>Warning:</strong> in their recent documentation,
-      Microsoft appears to have abandoned the distinction between
-      the two HSE_REQ_SEND_URL functions. Apache continues to treat
-      them as two distinct functions with different requirements
-      and behaviors.</dd>
-
-      <dt>HSE_REQ_SEND_RESPONSE_HEADER</dt>
-
-      <dd>Apache accepts a response body following the header if it
-      follows the blank line (two consecutive newlines) in the
-      headers string argument. This body cannot contain NULLs,
-      since the headers argument is NULL terminated.</dd>
-
-      <dt>HSE_REQ_DONE_WITH_SESSION</dt>
-
-      <dd>Apache considers this a no-op, since the session will be
-      finished when the ISAPI returns from processing.</dd>
-
-      <dt>HSE_REQ_MAP_URL_TO_PATH</dt>
-
-      <dd>Apache will translate a virtual name to a physical
-      name.</dd>
-
-      <dt>HSE_APPEND_LOG_PARAMETER</dt>
-
-      <dd>
-        This logged message may be captured in any of the following
-        logs: 
-
-        <ul>
-          <li>in the \"%{isapi-parameter}n\" component in a
-          CustomLog directive</li>
-
-          <li>in the %q log component with the
-          ISAPIAppendLogToQuery On directive</li>
-
-          <li>in the error log with the ISAPIAppendLogToErrors On
-          directive</li>
-        </ul>
-        The first option, the %{isapi-parameter}n component, is
-        always available and prefered.
-      </dd>
-
-      <dt>HSE_REQ_IS_KEEP_CONN</dt>
-
-      <dd>Will return the negotiated Keep-Alive status.</dd>
-
-      <dt>HSE_REQ_SEND_RESPONSE_HEADER_EX</dt>
-
-      <dd>Will behave as documented, although the fKeepConn flag is
-      ignored.</dd>
-
-      <dt>HSE_REQ_IS_CONNECTED</dt>
-
-      <dd>Will report false if the request has been aborted.</dd>
-    </dl>
-
-    <p>Apache returns FALSE to any unsupported call to
-    ServerSupportFunction, and sets the GetLastError value to
-    ERROR_INVALID_PARAMETER.</p>
-
-    <p>ReadClient retrieves the request body exceeding the initial
-    buffer (defined by ISAPIReadAheadBuffer). Based on the
-    ISAPIReadAheadBuffer setting (number of bytes to buffer prior
-    to calling the ISAPI handler) shorter requests are sent
-    complete to the extension when it is invoked. If the request is
-    longer, the ISAPI extension must use ReadClient to retrieve the
-    remaining request body.</p>
-
-    <p>WriteClient is supported, but only with the HSE_IO_SYNC flag
-    or no option flag (value of 0). Any other WriteClient request
-    will be rejected with a return value of FALSE, and a
-    GetLastError value of ERROR_INVALID_PARAMETER.</p>
-
-    <p>GetServerVariable is supported, although extended server
-    variables do not exist (as defined by other servers.) All the
-    usual Apache CGI environment variables are available from
-    GetServerVariable, as well as the ALL_HTTP and ALL_RAW
-    values.</p>
-
-    <p>Apache 2.0 <module>mod_isapi</module> supports additional
-    features introduced in later versions of the ISAPI specification,
-    as well as limited emulation of async I/O and the TransmitFile
-    semantics.  Apache also supports preloading ISAPI .dlls for
-    performance, neither of which were not available under Apache 1.3
-    mod_isapi.</p>
-</section>
-
-<directivesynopsis>
-<name>ISAPIFileChache</name>
-<description>ISAPI .dll files to be loaded at startup</description>
-<syntax>ISAPIFileCache <em>file-path</em> [<em>file-path</em>] ...</syntax>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
-    <p>Specifies a space-separated list of file names to be loaded
-    when the Apache server is launched, and remain loaded until the
-    server is shut down. This directive may be repeated for every
-    ISAPI .dll file desired. The full path name of each file should
-    be specified.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ISAPIReadAheadBuffer</name>
-<description>Size of the Read Ahead Buffer sent to ISAPI 
-extensions</description>
-<syntax>ISAPIReadAheadBuffer <em>size</em></syntax>
-<default>ISAPIReadAheadBuffer 49152</default>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
-    <p>Defines the maximum size of the Read Ahead Buffer sent to
-    ISAPI extensions when they are initially invoked. All remaining
-    data must be retrieved using the ReadClient callback; some
-    ISAPI extensions may not support the ReadClient function. Refer
-    questions to the ISAPI extension's author.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ISAPILogNotSupported</name>
-<description>Log unsupported feature requests from ISAPI
-extensions</description>
-<syntax>ISAPILogNotSupported on|off</syntax>
-<default>ISAPILogNotSupported on</default>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
-    <p>Logs all requests for unsupported features from ISAPI
-    extensions in the server error log. While this should be turned
-    off once all desired ISAPI modules are functioning, it defaults
-    to on to help administrators track down problems.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ISAPIAppendLogToErrors</name>
-<description>Record HSE_APPEND_LOG_PARAMETER requests from ISAPI
-extensions to the error log</description>
-<syntax>ISAPIAppendLogToErrors on|off</syntax>
-<default>ISAPIAppendLogToErrors off</default>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
-    <p>Record HSE_APPEND_LOG_PARAMETER requests from ISAPI
-    extensions to the server error log.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ISAPIAppendLogToQuery</name>
-<description>Record HSE_APPEND_LOG_PARAMETER requests from ISAPI
-extensions to the query field</description>
-<syntax>ISAPIAppendLogToQuery on|off</syntax>
-<default>ISAPIAppendLogToQuery off</default>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
-    <p>Record HSE_APPEND_LOG_PARAMETER requests from ISAPI
-    extensions to the query field (appended to the CustomLog %q
-    component).</p>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
\ No newline at end of file
diff --git a/docs/manual/mod/mod_log_config.html b/docs/manual/mod/mod_log_config.html
deleted file mode 100644
index 50e0ff8..0000000
--- a/docs/manual/mod/mod_log_config.html
+++ /dev/null
@@ -1,317 +0,0 @@
-<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-     This file is generated from xml source: DO NOT EDIT
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
---><title>mod_log_config - Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img alt="[APACHE DOCUMENTATION]" src="../images/sub.gif"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module mod_log_config</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td><description>Logging of the requests made to the server</description></td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="module-dict.html#ModuleIdentifier" class="help">Module&nbsp;Identifier:</a></td><td>log_config_module</td></tr></table></td></tr></table><h2>Summary</h2><summary>
-
-    <p>This module provides for flexible logging of client
-    requests. Logs are written in a customizable format, and may be
-    written directly to a file, or to an external program.
-    Conditional logging is provided so that individual requests may
-    be included or excluded from the logs based on characteristics
-    of the request.</p>
-
-    <p>Three directives are provided by this module:
-    <code>TransferLog</code> to create a log file,
-    <code>LogFormat</code> to set a custom format, and
-    <code>CustomLog</code> to define a log file and format in one
-    step. The <code>TransferLog</code> and <code>CustomLog</code>
-    directives can be used multiple times in each server to cause
-    each request to be logged to multiple files.</p>
-</summary><p><strong>See also </strong></p><ul><li><a href="../logs.html">Apache Log Files</a></li></ul><h2>Directives</h2><ul><li><a href="#cookielog">CookieLog</a></li><li><a href="#customlog">CustomLog</a></li><li><a href="#logformat">LogFormat</a></li><li><a href="#transferlog">TransferLog</a></li></ul><h2><a name="formats">Custom Log Formats</a></h2>
-
-
-    <p>The format argument to the <code>LogFormat</code> and
-    <code>CustomLog</code> directives is a string. This string is
-    logged to the log file for each request. It can contain literal
-    characters copied into the log files and the c-type control
-    characters "\n" and "\t" to represent new-lines and tabs.
-    Literal quotes and back-slashes should be escaped with
-    back-slashes.</p>
-
-    <p>The characteristics of the request itself are logged by
-    placing "%" directives in the format string, which are replaced
-    in the log file by the values as follows:</p>
-
-<table>
-
-<tr><td>%...a:</td>          
-<td>Remote IP-address</td></tr>
-
-<tr><td>%...A:</td>          
-<td>Local IP-address</td></tr>
-
-<tr><td>%...B:</td>          
-<td>Bytes sent, excluding HTTP headers.</td></tr>
-
-<tr><td>%...b:</td>          
-<td>Bytes sent, excluding HTTP headers. In CLF format
-i.e. a '-' rather than a 0 when no bytes are sent.</td></tr>
-
-<tr><td>%...{Foobar}C:</td>  
-<td>The contents of cookie "Foobar" in the request sent to the server.</td></tr>
-
-<tr><td>%...D:</td>          
-<td>The time taken to serve the request, in microseconds.</td></tr>
-
-<tr><td>%...{FOOBAR}e:</td>  
-<td>The contents of the environment variable FOOBAR</td></tr>
-
-<tr><td>%...f:</td>          
-<td>Filename</td></tr>
-
-<tr><td>%...h:</td>          
-<td>Remote host</td></tr>
-
-<tr><td>%...H</td>          
-<td>The request protocol</td></tr>
-
-<tr><td>%...{Foobar}i:</td>  
-<td>The contents of Foobar: header line(s) in the request
-sent to the server.</td></tr>
-
-<tr><td>%...l:</td>          
-<td>Remote logname (from identd, if supplied)</td></tr>
-
-<tr><td>%...m:</td>          
-<td>The request method</td></tr>
-
-<tr><td>%...{Foobar}n:</td>  
-<td>The contents of note "Foobar" from another module.</td></tr>
-
-<tr><td>%...{Foobar}o:</td>  
-<td>The contents of Foobar: header line(s) in the reply.</td></tr>
-
-<tr><td>%...p:</td>          
-<td>The canonical Port of the server serving the request</td></tr>
-
-<tr><td>%...P:</td>          
-<td>The process ID of the child that serviced the request.</td></tr>
-
-<tr><td>%...q:</td>          
-<td>The query string (prepended with a ? if a query string exists,
-otherwise an empty string)</td></tr>
-
-<tr><td>%...r:</td>          
-<td>First line of request</td></tr>
-
-<tr><td>%...s:</td>          
-<td>Status.  For requests that got internally redirected, this is
-the status of the *original* request --- %...&gt;s for the last.</td></tr>
-
-<tr><td>%...t:</td>          
-<td>Time, in common log format time format (standard english format)</td></tr>
-
-<tr><td>%...{format}t:</td>  
-<td>The time, in the form given by format, which should
-be in strftime(3) format. (potentially localized)</td></tr>
-
-<tr><td>%...T:</td>          
-<td>The time taken to serve the request, in seconds.</td></tr>
-
-<tr><td>%...u:</td>          
-<td>Remote user (from auth; may be bogus if return status (%s) is 401)</td></tr>
-
-<tr><td>%...U:</td>          
-<td>The URL path requested, not including any query string.</td></tr>
-
-<tr><td>%...v:</td>          
-<td>The canonical ServerName of the server serving the request.</td></tr>
-
-<tr><td>%...V:</td>          
-<td>The server name according to the UseCanonicalName setting.</td></tr>
-
-<tr><td>%...X:</td>          
-<td>Connection status when response is completed.
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-'X' = connection aborted before the response completed.<br>
-'+' = connection may be kept alive after the response is sent.<br>
-'-' = connection will be closed after the response is sent.
-</code></td></tr></table></blockquote>
-<blockquote><table><tr><td bgcolor="#e0e5f5">(This directive was %...c in late versions of Apache 1.3, but
-this conflicted with the historical ssl %...{var}c syntax.)</td></tr></table></blockquote>
-</td></tr>
-
-</table>
-
-    <p>The "..." can be nothing at all (<em>e.g.</em>, <code>"%h %u
-    %r %s %b"</code>), or it can indicate conditions for inclusion
-    of the item (which will cause it to be replaced with "-" if the
-    condition is not met). The forms of condition are a list of
-    HTTP status codes, which may or may not be preceded by "!".
-    Thus, "%400,501{User-agent}i" logs User-agent: on 400 errors
-    and 501 errors (Bad Request, Not Implemented) only;
-    "%!200,304,302{Referer}i" logs Referer: on all requests which
-    did <strong>not</strong> return some sort of normal status.</p>
-
-    <p>Note that there is no escaping performed on the strings from
-    %...r, %...i and %...o. This is mainly to comply with the
-    requirements of the Common Log Format. This implies that
-    clients can insert control characters into the log, so care
-    should be taken when dealing with raw log files.</p>
-
-    <p>Some commonly used log format strings are:</p>
-
-    <dl>
-      <dt>Common Log Format (CLF)</dt>
-
-      <dd><code>"%h %l %u %t \"%r\" %&gt;s %b"</code></dd>
-
-      <dt>Common Log Format with Virtual Host</dt>
-
-      <dd><code>"%v %h %l %u %t \"%r\" %&gt;s %b"</code></dd>
-
-      <dt>NCSA extended/combined log format</dt>
-
-      <dd><code>"%h %l %u %t \"%r\" %&gt;s %b \"%{Referer}i\"
-      \"%{User-agent}i\""</code></dd>
-
-      <dt>Referer log format</dt>
-
-      <dd><code>"%{Referer}i -&gt; %U"</code></dd>
-
-      <dt>Agent (Browser) log format</dt>
-
-      <dd><code>"%{User-agent}i"</code></dd>
-    </dl>
-
-    <p>Note that the canonical <a href="core.html#servername">ServerName</a> and <a href="mpm_common.html#listen">Listen</a> of the server serving the
-    request are used for <code>%v</code> and <code>%p</code>
-    respectively. This happens regardless of the <a href="core.html#usecanonicalname">UseCanonicalName</a> setting
-    because otherwise log analysis programs would have to duplicate
-    the entire vhost matching algorithm in order to decide what
-    host really served the request.</p>
-    <h2>Security Considerations</h2>
-
-    
-
-    <p>See the <a href="../misc/security_tips.html#serverroot">security tips</a>
-    document for details on why your security could be compromised
-    if the directory where logfiles are stored is writable by
-    anyone other than the user that starts the server.</p>
-
-    <hr/><h2><a name="CookieLog">CookieLog</a> <a name="cookielog">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sets filename for the logging of cookies</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>CookieLog <em>filename</em></syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual
-host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_log_config</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>Only available in Apache 1.2 and above</td></tr></table></td></tr></table><usage>
-
-    <p>The <code class="directive">CookieLog</code> directive sets the 
-    filename for logging of cookies. The filename is relative to the
-    <a href="core.html#serverroot" class="directive"><code class="directive">serverroot</code></a>. This directive is
-    included only for compatibility with <code><a href="mod_cookies.html">mod_cookies</a></code>,
-    and is deprecated.</p>
-</usage><hr/><h2><a name="CustomLog">CustomLog</a> <a name="customlog">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sets filename and format of log file</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>CustomLog 
-    <em>file</em>|<em>pipe</em> <em>format</em>|<em>nickname</em>
-    [env=[!]<em>environment-variable</em>]</syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual
-host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_log_config</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>Nickname only available in Apache 1.3 or later.
-Conditional logging available in 1.3.5 or later.</td></tr></table></td></tr></table><usage>
-    <p>The <code class="directive">CustomLog</code> directive is used to
-    log requests to the server. A log format is specified, and the
-    logging can optionally be made conditional on request
-    characteristics using environment variables.</p>
-
-    <p>The first argument, which specifies the location to which
-    the logs will be written, can take on one of the following two
-    types of values:</p>
-
-    <dl>
-      <dt><em>file</em></dt>
-
-      <dd>A filename, relative to the <a href="core.html#serverroot">ServerRoot</a>.</dd>
-
-      <dt><em>pipe</em></dt>
-
-      <dd>The pipe character "<code>|</code>", followed by the path
-      to a program to receive the log information on its standard
-      input. <strong>Security:</strong> if a program is used, then
-      it will be run under the user who started httpd. This will be
-      root if the server was started by root; be sure that the
-      program is secure.</dd>
-    </dl>
-
-    <p>The second argument specifies what will be written to the
-    log file. It can specify either a <em>nickname</em> defined by
-    a previous <a href="#logformat">LogFormat</a> directive, or it
-    can be an explicit <em>format</em> string as described in the
-    <a href="#formats">log formats</a> section.</p>
-
-    <p>For example, the following two sets of directives have
-    exactly the same effect:</p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-     # CustomLog with format nickname<br>
-     LogFormat "%h %l %u %t \"%r\" %&gt;s %b" common<br>
-     CustomLog logs/access_log common<br>
-<br>
-     # CustomLog with explicit format string<br>
-     CustomLog logs/access_log "%h %l %u %t \"%r\" %&gt;s %b"<br>
-</code></td></tr></table></blockquote>
-
-    <p>The third argument is optional and allows the decision on
-    whether or not to log a particular request to be based on the
-    presence or absence of a particular variable in the server
-    environment. If the specified <a href="../env.html">environment
-    variable</a> is set for the request (or is not set, in the case
-    of a '<code>env=!<em>name</em></code>' clause), then the
-    request will be logged.</p>
-
-    <p>Environment variables can be set on a <em>per</em>-request
-    basis using the <code><a href="mod_setenvif.html">mod_setenvif</a></code>
-    and/or <code><a href="mod_rewrite.html">mod_rewrite</a></code> modules. For
-    example, if you don't want to record requests for all GIF
-    images on your server in a separate logfile but not your main
-    log, you can use:</p>
-    
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-    SetEnvIf Request_URI \.gif$ gif-image<br>
-    CustomLog gif-requests.log common env=gif-image<br>
-    CustomLog nongif-requests.log common env=!gif-image
-</code></td></tr></table></blockquote>
-</usage><hr/><h2><a name="LogFormat">LogFormat</a> <a name="logformat">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Describes a format for use in a log file</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>LogFormat
-    <em>format</em>|<em>nickname</em> [<em>nickname</em>]</syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual
-host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_log_config</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>Nickname only available in Apache 1.3 or later.
-</td></tr></table></td></tr></table><usage>
-    <p>This directive specifies the format of the access log
-    file.</p>
-
-    <p>The <code class="directive">LogFormat</code> directive can take one of two
-    forms. In the first form, where only one argument is specified,
-    this directive sets the log format which will be used by logs
-    specified in subsequent <code class="directive">TransferLog</code>
-    directives. The single argument can specify an explicit
-    <em>format</em> as discussed in <a href="#formats">custom log
-    formats</a> section above. Alternatively, it can use a
-    <em>nickname</em> to refer to a log format defined in a
-    previous <code class="directive">LogFormat</code> directive as described
-    below.</p>
-
-    <p>The second form of the <code class="directive">LogFormat</code> 
-    directive associates an explicit <em>format</em> with a
-    <em>nickname</em>. This <em>nickname</em> can then be used in
-    subsequent <code class="directive">LogFormat</code> or
-    <code class="directive">CustomLog</code> directives rather than
-    repeating the entire format string. A
-    <code class="directive">LogFormat</code>
-    directive which defines a nickname <strong>does nothing
-    else</strong> -- that is, it <em>only</em> defines the
-    nickname, it doesn't actually apply the format and make it the
-    default. Therefore, it will not affect subsequent
-    <code class="directive">TransferLog</code> directives.</p>
-
-</usage><hr/><h2><a name="TransferLog">TransferLog</a> <a name="transferlog">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Specifly location of a log file</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>TransferLog <em>file</em>|<em>pipe</em></syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual
-host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_log_config</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td/></tr></table></td></tr></table><usage>
-
-    <p>This directive has exactly the same arguments and effect as
-    the <code class="directive">CustomLog</code> directive, with the
-    exception that it does not allow the log format to be specified
-    explicitly or for conditional logging of requests. Instead, the
-    log format is determined by the most recently specified
-    specified <code class="directive">LogFormat</code> directive (which
-    does not define a nickname). Common Log Format is used if no
-    other format has been specified.</p>
-
-    <p>Example:</p>
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-   LogFormat "%h %l %u %t \"%r\" %&gt;s %b \"%{Referer}i\" \"%{User-agent}i\""<br>
-   TransferLog logs/access_log
-</code></td></tr></table></blockquote>
-
-</usage><hr/><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img alt="Index" src="../images/index.gif"/></a><a href="../"><img alt="Home" src="../images/home.gif"/></a></blockquote></body></html>
\ No newline at end of file
diff --git a/docs/manual/mod/mod_log_config.xml b/docs/manual/mod/mod_log_config.xml
deleted file mode 100644
index 196000c..0000000
--- a/docs/manual/mod/mod_log_config.xml
+++ /dev/null
@@ -1,382 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.xsl"?>
-<modulesynopsis>
-
-<name>mod_log_config</name>
-<description>Logging of the requests made to the server</description>
-<status>Base</status>
-<sourcefile>mod_log_config.c</sourcefile>
-<identifier>log_config_module</identifier>
-
-<summary>
-
-    <p>This module provides for flexible logging of client
-    requests. Logs are written in a customizable format, and may be
-    written directly to a file, or to an external program.
-    Conditional logging is provided so that individual requests may
-    be included or excluded from the logs based on characteristics
-    of the request.</p>
-
-    <p>Three directives are provided by this module:
-    <code>TransferLog</code> to create a log file,
-    <code>LogFormat</code> to set a custom format, and
-    <code>CustomLog</code> to define a log file and format in one
-    step. The <code>TransferLog</code> and <code>CustomLog</code>
-    directives can be used multiple times in each server to cause
-    each request to be logged to multiple files.</p>
-</summary>
-
-<seealso><a href="../logs.html">Apache Log Files</a></seealso>
-
-<section id="formats">
-<title>Custom Log Formats</title>
-
-    <p>The format argument to the <code>LogFormat</code> and
-    <code>CustomLog</code> directives is a string. This string is
-    logged to the log file for each request. It can contain literal
-    characters copied into the log files and the c-type control
-    characters "\n" and "\t" to represent new-lines and tabs.
-    Literal quotes and back-slashes should be escaped with
-    back-slashes.</p>
-
-    <p>The characteristics of the request itself are logged by
-    placing "%" directives in the format string, which are replaced
-    in the log file by the values as follows:</p>
-
-<table>
-
-<tr><td>%...a:</td>          
-<td>Remote IP-address</td></tr>
-
-<tr><td>%...A:</td>          
-<td>Local IP-address</td></tr>
-
-<tr><td>%...B:</td>          
-<td>Bytes sent, excluding HTTP headers.</td></tr>
-
-<tr><td>%...b:</td>          
-<td>Bytes sent, excluding HTTP headers. In CLF format
-i.e. a '-' rather than a 0 when no bytes are sent.</td></tr>
-
-<tr><td>%...{Foobar}C:</td>  
-<td>The contents of cookie "Foobar" in the request sent to the server.</td></tr>
-
-<tr><td>%...D:</td>          
-<td>The time taken to serve the request, in microseconds.</td></tr>
-
-<tr><td>%...{FOOBAR}e:</td>  
-<td>The contents of the environment variable FOOBAR</td></tr>
-
-<tr><td>%...f:</td>          
-<td>Filename</td></tr>
-
-<tr><td>%...h:</td>          
-<td>Remote host</td></tr>
-
-<tr><td>%...H</td>          
-<td>The request protocol</td></tr>
-
-<tr><td>%...{Foobar}i:</td>  
-<td>The contents of Foobar: header line(s) in the request
-sent to the server.</td></tr>
-
-<tr><td>%...l:</td>          
-<td>Remote logname (from identd, if supplied)</td></tr>
-
-<tr><td>%...m:</td>          
-<td>The request method</td></tr>
-
-<tr><td>%...{Foobar}n:</td>  
-<td>The contents of note "Foobar" from another module.</td></tr>
-
-<tr><td>%...{Foobar}o:</td>  
-<td>The contents of Foobar: header line(s) in the reply.</td></tr>
-
-<tr><td>%...p:</td>          
-<td>The canonical Port of the server serving the request</td></tr>
-
-<tr><td>%...P:</td>          
-<td>The process ID of the child that serviced the request.</td></tr>
-
-<tr><td>%...q:</td>          
-<td>The query string (prepended with a ? if a query string exists,
-otherwise an empty string)</td></tr>
-
-<tr><td>%...r:</td>          
-<td>First line of request</td></tr>
-
-<tr><td>%...s:</td>          
-<td>Status.  For requests that got internally redirected, this is
-the status of the *original* request --- %...&gt;s for the last.</td></tr>
-
-<tr><td>%...t:</td>          
-<td>Time, in common log format time format (standard english format)</td></tr>
-
-<tr><td>%...{format}t:</td>  
-<td>The time, in the form given by format, which should
-be in strftime(3) format. (potentially localized)</td></tr>
-
-<tr><td>%...T:</td>          
-<td>The time taken to serve the request, in seconds.</td></tr>
-
-<tr><td>%...u:</td>          
-<td>Remote user (from auth; may be bogus if return status (%s) is 401)</td></tr>
-
-<tr><td>%...U:</td>          
-<td>The URL path requested, not including any query string.</td></tr>
-
-<tr><td>%...v:</td>          
-<td>The canonical ServerName of the server serving the request.</td></tr>
-
-<tr><td>%...V:</td>          
-<td>The server name according to the UseCanonicalName setting.</td></tr>
-
-<tr><td>%...X:</td>          
-<td>Connection status when response is completed.
-<example>
-'X' = connection aborted before the response completed.<br />
-'+' = connection may be kept alive after the response is sent.<br />
-'-' = connection will be closed after the response is sent.
-</example>
-<note>(This directive was %...c in late versions of Apache 1.3, but
-this conflicted with the historical ssl %...{var}c syntax.)</note>
-</td></tr>
-
-</table>
-
-    <p>The "..." can be nothing at all (<em>e.g.</em>, <code>"%h %u
-    %r %s %b"</code>), or it can indicate conditions for inclusion
-    of the item (which will cause it to be replaced with "-" if the
-    condition is not met). The forms of condition are a list of
-    HTTP status codes, which may or may not be preceded by "!".
-    Thus, "%400,501{User-agent}i" logs User-agent: on 400 errors
-    and 501 errors (Bad Request, Not Implemented) only;
-    "%!200,304,302{Referer}i" logs Referer: on all requests which
-    did <strong>not</strong> return some sort of normal status.</p>
-
-    <p>Note that there is no escaping performed on the strings from
-    %...r, %...i and %...o. This is mainly to comply with the
-    requirements of the Common Log Format. This implies that
-    clients can insert control characters into the log, so care
-    should be taken when dealing with raw log files.</p>
-
-    <p>Some commonly used log format strings are:</p>
-
-    <dl>
-      <dt>Common Log Format (CLF)</dt>
-
-      <dd><code>"%h %l %u %t \"%r\" %&gt;s %b"</code></dd>
-
-      <dt>Common Log Format with Virtual Host</dt>
-
-      <dd><code>"%v %h %l %u %t \"%r\" %&gt;s %b"</code></dd>
-
-      <dt>NCSA extended/combined log format</dt>
-
-      <dd><code>"%h %l %u %t \"%r\" %&gt;s %b \"%{Referer}i\"
-      \"%{User-agent}i\""</code></dd>
-
-      <dt>Referer log format</dt>
-
-      <dd><code>"%{Referer}i -&gt; %U"</code></dd>
-
-      <dt>Agent (Browser) log format</dt>
-
-      <dd><code>"%{User-agent}i"</code></dd>
-    </dl>
-
-    <p>Note that the canonical <a
-    href="core.html#servername">ServerName</a> and <a
-    href="mpm_common.html#listen">Listen</a> of the server serving the
-    request are used for <code>%v</code> and <code>%p</code>
-    respectively. This happens regardless of the <a
-    href="core.html#usecanonicalname">UseCanonicalName</a> setting
-    because otherwise log analysis programs would have to duplicate
-    the entire vhost matching algorithm in order to decide what
-    host really served the request.</p>
-    </section>
-
-    <section>
-
-    <title>Security Considerations</title>
-
-    <p>See the <a
-    href="../misc/security_tips.html#serverroot">security tips</a>
-    document for details on why your security could be compromised
-    if the directory where logfiles are stored is writable by
-    anyone other than the user that starts the server.</p>
-
-    </section>
-
-<directivesynopsis>
-<name>CookieLog</name>
-<description>Sets filename for the logging of cookies</description>
-<syntax>CookieLog <em>filename</em></syntax>
-<contextlist><context>server config</context><context>virtual
-host</context></contextlist>
-<compatibility>Only available in Apache 1.2 and above</compatibility>
-
-<usage>
-
-    <p>The <directive>CookieLog</directive> directive sets the 
-    filename for logging of cookies. The filename is relative to the
-    <directive module="core">serverroot</directive>. This directive is
-    included only for compatibility with <module>mod_cookies</module>,
-    and is deprecated.</p>
-</usage>
-
-</directivesynopsis>
-
-<directivesynopsis>
-<name>CustomLog</name>
-<description>Sets filename and format of log file</description>
-<syntax>CustomLog 
-    <em>file</em>|<em>pipe</em> <em>format</em>|<em>nickname</em>
-    [env=[!]<em>environment-variable</em>]</syntax>
-<contextlist><context>server config</context><context>virtual
-host</context></contextlist>
-<compatibility>Nickname only available in Apache 1.3 or later.
-Conditional logging available in 1.3.5 or later.</compatibility>
-
-
-<usage>
-    <p>The <directive>CustomLog</directive> directive is used to
-    log requests to the server. A log format is specified, and the
-    logging can optionally be made conditional on request
-    characteristics using environment variables.</p>
-
-    <p>The first argument, which specifies the location to which
-    the logs will be written, can take on one of the following two
-    types of values:</p>
-
-    <dl>
-      <dt><em>file</em></dt>
-
-      <dd>A filename, relative to the <a
-      href="core.html#serverroot">ServerRoot</a>.</dd>
-
-      <dt><em>pipe</em></dt>
-
-      <dd>The pipe character "<code>|</code>", followed by the path
-      to a program to receive the log information on its standard
-      input. <strong>Security:</strong> if a program is used, then
-      it will be run under the user who started httpd. This will be
-      root if the server was started by root; be sure that the
-      program is secure.</dd>
-    </dl>
-
-    <p>The second argument specifies what will be written to the
-    log file. It can specify either a <em>nickname</em> defined by
-    a previous <a href="#logformat">LogFormat</a> directive, or it
-    can be an explicit <em>format</em> string as described in the
-    <a href="#formats">log formats</a> section.</p>
-
-    <p>For example, the following two sets of directives have
-    exactly the same effect:</p>
-
-<example>
-     # CustomLog with format nickname<br />
-     LogFormat "%h %l %u %t \"%r\" %&gt;s %b" common<br />
-     CustomLog logs/access_log common<br />
-<br />
-     # CustomLog with explicit format string<br />
-     CustomLog logs/access_log "%h %l %u %t \"%r\" %&gt;s %b"<br />
-</example>
-
-    <p>The third argument is optional and allows the decision on
-    whether or not to log a particular request to be based on the
-    presence or absence of a particular variable in the server
-    environment. If the specified <a href="../env.html">environment
-    variable</a> is set for the request (or is not set, in the case
-    of a '<code>env=!<em>name</em></code>' clause), then the
-    request will be logged.</p>
-
-    <p>Environment variables can be set on a <em>per</em>-request
-    basis using the <module>mod_setenvif</module>
-    and/or <module>mod_rewrite</module> modules. For
-    example, if you don't want to record requests for all GIF
-    images on your server in a separate logfile but not your main
-    log, you can use:</p>
-    
-<example>
-    SetEnvIf Request_URI \.gif$ gif-image<br />
-    CustomLog gif-requests.log common env=gif-image<br />
-    CustomLog nongif-requests.log common env=!gif-image
-</example>
-</usage>
-
-</directivesynopsis>
-
-<directivesynopsis>
-<name>LogFormat</name>
-<description>Describes a format for use in a log file</description>
-<syntax>LogFormat
-    <em>format</em>|<em>nickname</em> [<em>nickname</em>]</syntax>
-<contextlist><context>server config</context><context>virtual
-host</context></contextlist>
-<compatibility>Nickname only available in Apache 1.3 or later.
-</compatibility>
-
-<usage>
-    <p>This directive specifies the format of the access log
-    file.</p>
-
-    <p>The <directive>LogFormat</directive> directive can take one of two
-    forms. In the first form, where only one argument is specified,
-    this directive sets the log format which will be used by logs
-    specified in subsequent <directive>TransferLog</directive>
-    directives. The single argument can specify an explicit
-    <em>format</em> as discussed in <a href="#formats">custom log
-    formats</a> section above. Alternatively, it can use a
-    <em>nickname</em> to refer to a log format defined in a
-    previous <directive>LogFormat</directive> directive as described
-    below.</p>
-
-    <p>The second form of the <directive>LogFormat</directive> 
-    directive associates an explicit <em>format</em> with a
-    <em>nickname</em>. This <em>nickname</em> can then be used in
-    subsequent <directive>LogFormat</directive> or
-    <directive>CustomLog</directive> directives rather than
-    repeating the entire format string. A
-    <directive>LogFormat</directive>
-    directive which defines a nickname <strong>does nothing
-    else</strong> -- that is, it <em>only</em> defines the
-    nickname, it doesn't actually apply the format and make it the
-    default. Therefore, it will not affect subsequent
-    <directive>TransferLog</directive> directives.</p>
-
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-
-<name>TransferLog</name>
-<description>Specifly location of a log file</description>
-<syntax>TransferLog <em>file</em>|<em>pipe</em></syntax>
-<contextlist><context>server config</context><context>virtual
-host</context></contextlist>
-<compatibility></compatibility>
-
-<usage>
-
-    <p>This directive has exactly the same arguments and effect as
-    the <directive>CustomLog</directive> directive, with the
-    exception that it does not allow the log format to be specified
-    explicitly or for conditional logging of requests. Instead, the
-    log format is determined by the most recently specified
-    specified <directive>LogFormat</directive> directive (which
-    does not define a nickname). Common Log Format is used if no
-    other format has been specified.</p>
-
-    <p>Example:</p>
-<example>
-   LogFormat "%h %l %u %t \"%r\" %&gt;s %b \"%{Referer}i\" \"%{User-agent}i\""<br />
-   TransferLog logs/access_log
-</example>
-
-</usage>
-
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_mime.html b/docs/manual/mod/mod_mime.html
deleted file mode 100644
index 59bb426..0000000
--- a/docs/manual/mod/mod_mime.html
+++ /dev/null
@@ -1,620 +0,0 @@
-<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-     This file is generated from xml source: DO NOT EDIT
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
---><title>mod_mime - Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img alt="[APACHE DOCUMENTATION]" src="../images/sub.gif"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module mod_mime</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td><description>Associates the request filename's extensions
-    (e.g. .html) with the file's behavior (handlers and filters)
-    and content (mime-type, language, character set and
-    encoding)</description></td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="module-dict.html#ModuleIdentifier" class="help">Module&nbsp;Identifier:</a></td><td>mime_module</td></tr></table></td></tr></table><h2>Summary</h2><summary>
-    <p>This module is used to associate various bits of "meta
-    information" with files by their filename extensions. This
-    information relates the filename of the document to it's
-    mime-type, language, character set and encoding. This
-    information is sent to the browser, and participates in content
-    negotiation, so the user's preferences are respected when
-    choosing one of several possible files to serve. See
-    <code><a href="mod_negotiation.html">mod_negotiation</a></code> for more information
-    about content negotiation. </p>
-
-    <p>The directives <code class="directive">AddCharset</code>,
-    <code class="directive">AddEncoding</code>,
-    <code class="directive">AddLanguage</code> and
-    <code class="directive">AddType</code> all used to map file extensions
-    onto the meta-information for that file. Respectively they set
-    the character set, content-encoding, content-language, and
-    MIME-type (content-type) of documents.</p>
-
-    <p>In addition, mod_mime may define the "handler" for a
-    document, which controls which module or script will serve the
-    document. With the introduction of "filters" in Apache 2.0,
-    mod_mime can also define the filters that the the content
-    should be processed through (e.g. the Includes output filter
-    for server side scripting) and what filters the client request
-    and POST content should be processed through (the input
-    filters.)</p>
-
-    <p>The directives <code class="directive">AddHandler</code>,
-    <code class="directive">AddOutputFilter</code>, and
-    <code class="directive">AddInputFilter</code> control the modules
-    or scripts that serve the document.  The 
-    <code class="directive">MultiviewsMatch</code> directive allows
-    <code class="directive">mod_negotiation</code> to consider these
-    file extensions to included when testing Multiviews matches.</p>
-
-    <p>The directive <code class="directive">TypesConfig</code> is used
-    to specify a file which also maps extensions onto MIME types.
-    Most administrators use the provided mime.types file which
-    associates common filename extensions with IANA registered
-    content types. The current list is maintained at
-    <code>http://www.isi.edu/in-notes/iana/assignments/media-types/media-types</code>
-    although it may be mirrored elsewhere). This simplifies the
-    httpd.conf file by providing the majority of media-type
-    definitions, and they may be overridden by 
-    <code class="directive">AddType</code> directives as needed.</p>
-
-    <blockquote><table><tr><td bgcolor="#e0e5f5">Please do not send requests to the Apache httpd Project
-    to add any new entries in the distributed mime.types file
-    unless (1) they are already registered with IANA, and (2) they
-    use widely accepted, non-conflicting filename extensions across
-    platforms. category/x-subtype requests will be automatically
-    rejected, as will any new two-letter extensions as they will
-    likely conflict later with the already crowded language and
-    character set namespace.</td></tr></table></blockquote>
-
-    <p>The core directives <a href="core.html#forcetype" class="directive"><code class="directive">ForceType</code></a> and
-    <code class="directive">SetHandler</code> are used to
-    associate all the files in a given container (<em>e.g.</em>,
-    &lt;location&gt;, &lt;directory&gt;, or &lt;Files&gt;) with a
-    particular MIME-type or handler. These settings override any
-    filename extension mappings defined in mod_mime.</p>
-
-    <p>Note that changing the type or encoding of a file does not
-    change the value of the <code>Last-Modified</code> header.
-    Thus, previously cached copies may still be used by a client or
-    proxy, with the previous headers. If you change the
-    meta-information (language, content type, character set or
-    encoding) you may need to 'touch' affected files (updating
-    their last modified date) to ensure that all visitors are
-    receive the corrected content headers.</p>
-</summary><p><strong>See also </strong></p><ul><li>See also: <a href="mod_mime_magic.html#mimemagicfile" class="directive"><code class="directive">MimeMagicFile</code></a></li></ul><h2>Directives</h2><ul><li><a href="#addcharset">AddCharset</a></li><li><a href="#addencoding">AddEncoding</a></li><li><a href="#addhandler">AddHandler</a></li><li><a href="#addinputfilter">AddInputFilter</a></li><li><a href="#addlanguage">AddLanguage</a></li><li><a href="#addoutputfilter">AddOutputFilter</a></li><li><a href="#addtype">AddType</a></li><li><a href="#defaultlanguage">DefaultLanguage</a></li><li><a href="#multiviewsmatch">MultiviewsMatch</a></li><li><a href="#removecharset">RemoveCharset</a></li><li><a href="#removeencoding">RemoveEncoding</a></li><li><a href="#removehandler">RemoveHandler</a></li><li><a href="#removeinputfilter">RemoveInputFilter</a></li><li><a href="#removelanguage">RemoveLanguage</a></li><li><a href="#removeoutputfilter">RemoveOutputFilter</a></li><li><a href="#removetype">RemoveType</a></li><li><a href="#typesconfig">TypesConfig</a></li></ul><h2><a name="multipleext">Files with Multiple Extensions</a></h2>
-
-
-    <p>Files can have more than one extension, and the order of the
-    extensions is <em>normally</em> irrelevant. For example, if the
-    file <code>welcome.html.fr</code> maps onto content type
-    text/html and language French then the file <code>welcome.fr.html</code> 
-    will map onto exactly the same information.  If more than one 
-    extension is given which maps onto the same
-    type of meta-information, then the one to the right will be
-    used. For example, if ".gif" maps to the MIME-type image/gif
-    and ".html" maps to the MIME-type text/html, then the file
-    <code>welcome.gif.html</code> will be associated with the
-    MIME-type "text/html".</p>
-
-    <p>Care should be taken when a file with multiple extensions
-    gets associated with both a MIME-type and a handler. This will
-    usually result in the request being by the module associated
-    with the handler. For example, if the <code>.imap</code>
-    extension is mapped to the handler "imap-file" (from mod_imap)
-    and the <code>.html</code> extension is mapped to the MIME-type
-    "text/html", then the file <code>world.imap.html</code> will be
-    associated with both the "imap-file" handler and "text/html"
-    MIME-type. When it is processed, the "imap-file" handler will
-    be used, and so it will be treated as a mod_imap imagemap
-    file.</p>
-<h2><a name="contentencoding">Content encoding</a></h2>
-
-    <p>A file of a particular MIME type can additionally be encoded a
-    particular way to simplify transmission over the Internet.
-    While this usually will refer to compression, such as
-    <code>gzip</code>, it can also refer to encryption, such a
-    <code>pgp</code> or to an encoding such as UUencoding, which is
-    designed for transmitting a binary file in an ASCII (text)
-    format.</p>
-
-    <p>The MIME RFC puts it this way:</p>
-
-    <blockquote><table><tr><td bgcolor="#e0e5f5">
-      The Content-Encoding entity-header field is used as a
-      modifier to the media-type. When present, its value indicates
-      what additional content coding has been applied to the
-      resource, and thus what decoding mechanism must be applied in
-      order to obtain the media-type referenced by the Content-Type
-      header field. The Content-Encoding is primarily used to allow
-      a document to be compressed without losing the identity of
-      its underlying media type.
-    </td></tr></table></blockquote>
-
-    <p>By using more than one file extension (see <a href="#multipleext">section above about multiple file
-    extensions</a>), you can indicate that a file is of a
-    particular <em>type</em>, and also has a particular
-    <em>encoding</em>. </p>
-
-    <p>For example, you may have a file which is a Microsoft Word
-    document, which is pkzipped to reduce its size. If the
-    <code>.doc</code> extension is associated with the Microsoft
-    Word file type, and the <code>.zip</code> extension is
-    associated with the pkzip file encoding, then the file
-    <code>Resume.doc.zip</code>would be known to be a pkzip'ed Word
-    document.</p>
-
-    <p>Apache send a <code>Content-encoding</code> header with the
-    resource, in order to tell the client browser about the
-    encoding method.</p>
-
-    <blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>Content-encoding: pkzip</code></td></tr></table></blockquote>
-
-<h2>Character sets and languages</h2>
-
-
-
-    <p>In addition to file type and the file encoding,
-    another important piece of information is what language a
-    particular document is in, and in what character set the file
-    should be displayed. For example, the document might be written
-    in the Vietnamese alphabet, or in Cyrillic, and should be
-    displayed as such. This information, also, is transmitted in
-    HTTP headers.</p>
-
-    <p>The character set, language encoding and mime type are all 
-    used in the process of content negotiation (See 
-    <code><a href="mod_negotiation.html">mod_negotiation</a></code>) to determine
-    which document to give to the client, when there are
-    alternative documents in more than one character set, language, 
-    encoding or mime type.  All filename extensions associations
-    created with <code><a href="AddCharset.html">AddCharset</a></code>, <code><a href="AddEncoding.html">AddEncoding</a></code>, 
-    <code><a href="AddLanguage.html">AddLanguage</a></code> and <code><a href="AddType.html">AddType</a></code> directives
-    (and extensions listed in the <code><a href="MimeMagicFile.html">MimeMagicFile</a></code>)
-    participate in this select process.  Filename extensions that
-    are only associated using the <code><a href="AddHandler.html">AddHandler</a></code>,
-    <code><a href="AddInputFilter.html">AddInputFilter</a></code> or <code><a href="AddOutputFilter.html">AddOutputFilter</a></code>
-    directives may be included or excluded from matching by using 
-    the <code class="directive">MultiviewsMatch</code> directive.</p>
-
-<h3>Charset</h3>
-
-
-    <p>To convey this further information, Apache optionally sends
-    a <code>Content-Language</code> header, to specify the language
-    that the document is in, and can append additional information
-    onto the <code>Content-Type</code> header to indicate the
-    particular character set that should be used to correctly
-    render the information.</p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-Content-Language: en, fr<br>
-Content-Type: text/plain; charset=ISO-8859-2
-</code></td></tr></table></blockquote>
-
-    <p>The language specification is the two-letter abbreviation
-    for the language. The <code>charset</code> is the name of the
-    particular character set which should be used.</p>
-
-<hr/><h2><a name="AddCharset">AddCharset</a> <a name="addcharset">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Maps the given filename extensions
-    to the specified content charset</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>AddCharset <em>charset extension</em> 
-[<em>extension</em>] ...</syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>None</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>FileInfo</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_mime</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>AddCharset is only available in Apache 
-1.3.10 and later</td></tr></table></td></tr></table><usage>
-    
-    <p>The AddCharset directive maps the given filename extensions
-    to the specified content charset. <em>charset</em> is the MIME
-    charset parameter of filenames containing <em>extension</em>.
-    This mapping is added to any already in force, overriding any
-    mappings that already exist for the same <em>extension</em>.</p>
-
-    <p>Example:</p>
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-    AddLanguage ja .ja<br>
-    AddCharset EUC-JP .euc<br>
-    AddCharset ISO-2022-JP .jis<br>
-    AddCharset SHIFT_JIS .sjis
-</code></td></tr></table></blockquote>
-
-    <p>Then the document <code>xxxx.ja.jis</code> will be treated
-    as being a Japanese document whose charset is ISO-2022-JP (as
-    will the document <code>xxxx.jis.ja</code>). The AddCharset
-    directive is useful for both to inform the client about the
-    character encoding of the document so that the document can be
-    interpreted and displayed appropriately, and for <a href="../content-negotiation.html">content negotiation</a>,
-    where the server returns one from several documents based on
-    the client's charset preference.</p>
-
-    <p>The <em>extension</em> argument is case-insensitive, and can
-    be specified with or without a leading dot.</p>
-
-</usage><p><strong>See also </strong></p><ul><li><code><a href="mod_negotiation.html">mod_negotiation</a></code></li></ul><hr/><h2><a name="AddEncoding">AddEncoding</a> <a name="addencoding">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Maps the given filename extensions
-    to the specified encoding type</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>AddEncoding
-    <em>MIME-enc extension</em> [<em>extension</em>] ...</syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>None</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>FileInfo</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_mime</td></tr></table></td></tr></table><usage>
-
-    <p>The AddEncoding directive maps the given filename extensions
-    to the specified encoding type. <em>MIME-enc</em> is the MIME
-    encoding to use for documents containing the
-    <em>extension</em>. This mapping is added to any already in
-    force, overriding any mappings that already exist for the same
-    <em>extension</em>. Example:</p>
-
-    <blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-      AddEncoding x-gzip .gz<br>
-      AddEncoding x-compress .Z
-    </code></td></tr></table></blockquote>
-
-    <p>This will cause filenames containing the .gz extension to be
-    marked as encoded using the x-gzip encoding, and filenames
-    containing the .Z extension to be marked as encoded with
-    x-compress. </p>
-
-    <p>Old clients expect <code>x-gzip</code> and
-    <code>x-compress</code>, however the standard dictates that
-    they're equivalent to <code>gzip</code> and
-    <code>compress</code> respectively. Apache does content
-    encoding comparisons by ignoring any leading <code>x-</code>.
-    When responding with an encoding Apache will use whatever form
-    (<em>i.e.</em>, <code>x-foo</code> or <code>foo</code>) the
-    client requested. If the client didn't specifically request a
-    particular form Apache will use the form given by the
-    <code>AddEncoding</code> directive. To make this long story
-    short, you should always use <code>x-gzip</code> and
-    <code>x-compress</code> for these two specific encodings. More
-    recent encodings, such as <code>deflate</code> should be
-    specified without the <code>x-</code>.</p>
-
-    <p>The <em>extension</em> argument is case-insensitive, and can
-    be specified with or without a leading dot.</p>
-
-</usage><p><strong>See also </strong></p><ul><li><a href="#multipleext">Files with
-    multiple extensions</a></li></ul><hr/><h2><a name="AddHandler">AddHandler</a> <a name="addhandler">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>AddHandler maps the filename extensions
-to the handler 
-handler-name</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>AddHandler
-    <em>handler-name extension</em> [<em>extension</em>] ...</syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>None</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>FileInfo</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_mime</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td/></tr></table></td></tr></table><usage>
-<p>This mapping is added to any already in
-    force, overriding any mappings that already exist for the same
-    <em>extension</em>. For example, to activate CGI scripts with
-    the file extension "<code>.cgi</code>", you might use:</p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-    AddHandler cgi-script .cgi
-</code></td></tr></table></blockquote>
-
-    <p>Once that has been put into your srm.conf or httpd.conf
-    file, any file containing the "<code>.cgi</code>" extension
-    will be treated as a CGI program.</p>
-
-    <p>The <em>extension</em> argument is case-insensitive, and can
-    be specified with or without a leading dot.</p>
-
-</usage><p><strong>See also </strong></p><ul><li><a href="#multipleext">Files with
-    multiple extensions</a></li></ul><hr/><h2><a name="AddInputFilter">AddInputFilter</a> <a name="addinputfilter">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Maps the filename extensions
-    to the filter or filters which will process
-    client requests</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>AddInputFilter
-    <em>filter</em>[<em>;filter</em>...] extension
-    [<em>extension</em> ...]</syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>None</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_mime</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>AddInputFilter
-    is only available in Apache 2.0.26 and later.</td></tr></table></td></tr></table><usage>
-
-    <p>AddInputFilter maps the filename extensions
-    <em>extension</em> to the filter or filters which will process
-    client requests and POST input when they are received by the
-    server. This is in addition to any filters defined elsewhere,
-    including the <a href="core.html#setinputfilter">SetInputFilter</a> directive.
-    This mapping is merged over any already in force, overriding
-    any mappings that already exist for the same
-    <em>extension</em>.</p>
-
-    <p>If more than one filter is specified, they must be separated
-    by semicolons in the order in which they should process the
-    content. Both the filter and <em>extension</em> arguments are
-    case-insensitive, and the extension may be specified with or
-    without a leading dot.</p>
-
-</usage><p><strong>See also </strong></p><ul><li><a href="../filter.html">Filters</a>
-    documentation.</li></ul><hr/><h2><a name="AddLanguage">AddLanguage</a> <a name="addlanguage">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Maps the given filename extension
-to the specified content language</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>AddLanguage
-    <em>MIME-lang extension</em> [<em>extension</em>] ...</syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>None</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>FileInfo</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_mime</td></tr></table></td></tr></table><usage>
-
-    <p>The AddLanguage directive maps the given filename extension
-    to the specified content language. <em>MIME-lang</em> is the
-    MIME language of filenames containing <em>extension</em>. This
-    mapping is added to any already in force, overriding any
-    mappings that already exist for the same
-    <em>extension</em>.</p>
-
-    <p>Example:</p>
-
-    <blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-      AddEncoding x-compress .Z<br>
-       AddLanguage en .en<br>
-       AddLanguage fr .fr
-    </code></td></tr></table></blockquote>
-
-    <p>Then the document <code>xxxx.en.Z</code> will be treated as
-    being a compressed English document (as will the document
-    <code>xxxx.Z.en</code>). Although the content language is
-    reported to the client, the browser is unlikely to use this
-    information. The AddLanguage directive is more useful for <a href="../content-negotiation.html">content negotiation</a>,
-    where the server returns one from several documents based on
-    the client's language preference.</p>
-
-    <p>If multiple language assignments are made for the same
-    extension, the last one encountered is the one that is used.
-    That is, for the case of:</p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-    AddLanguage en .en<br>
-    AddLanguage en-uk .en<br>
-    AddLanguage en-us .en
-</code></td></tr></table></blockquote>
-
-    <p>documents with the extension "<code>.en</code>" would be
-    treated as being "<code>en-us</code>".</p>
-
-    <p>The <em>extension</em> argument is case-insensitive, and can
-    be specified with or without a leading dot.</p>
-
-</usage><p><strong>See also </strong></p><ul><li><a href="#multipleext">Files with
-    multiple extensions</a></li><li><code><a href="mod_negotiation.html">mod_negotiation</a></code></li></ul><hr/><h2><a name="AddOutputFilter">AddOutputFilter</a> <a name="addoutputfilter">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>maps the filename
-extensions to the filters that will process
-responses from the server</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>AddOutputFilter
-    <em>filter</em>[<em>;filter</em>...] extension
-    [<em>extension</em> ...]</syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>None</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td/></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_mime</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>AddOutputFilter
-    is only available in Apache 2.0.26 and later.</td></tr></table></td></tr></table><usage>
-
-    <p>The <code class="directive">AddOutputFilter</code> directive maps the filename
-    extensions <em>extension</em> to the filters which will process
-    responses from the server before they are sent to the client.
-    This is in addition to any filters defined elsewhere, including
-    the <a href="core.html#setoutputfilter" class="directive"><code class="directive">SetOutputFilter</code></a>
-    directive. This mapping is merged over any already in force,
-    overriding any mappings that already exist for the same
-    <em>extension</em>.</p>
-
-    <p>For example, the following configuration will process all
-    .shtml files for server-side includes.</p>
-     
-
-    <blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-      &nbsp;&nbsp;AddOutputFilter INCLUDES shtml
-    </code></td></tr></table></blockquote>
-
-    <p>If more than one filter is specified, they must be separated
-    by semicolons in the order in which they should process the
-    content. Both the filter and <em>extension</em> arguments are
-    case-insensitive, and the extension may be specified with or
-    without a leading dot.</p>
-
-</usage><p><strong>See also </strong></p><ul><li><a href="../filter.html">Filters</a> documentation</li></ul><hr/><h2><a name="AddType">AddType</a> <a name="addtype">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Maps the given filename extensions
-onto the specified content type</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>AddType <em>MIME-type
-    extension</em> [<em>extension</em>] ...</syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>None</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>FileInfo</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_mime</td></tr></table></td></tr></table><usage>
-
-    <p>The AddType directive maps the given filename extensions
-    onto the specified content type. <em>MIME-type</em> is the MIME
-    type to use for filenames containing <em>extension</em>. This
-    mapping is added to any already in force, overriding any
-    mappings that already exist for the same <em>extension</em>.
-    This directive can be used to add mappings not listed in the
-    MIME types file (see the <code class="directive">TypesConfig</code>
-    directive).</p>
-    
-    <p>Example:</p>
-
-    <blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-      AddType image/gif .gif
-    </code></td></tr></table></blockquote>
-
-    <blockquote><table><tr><td bgcolor="#e0e5f5">It is recommended that new MIME types be added using the
-    AddType directive rather than changing the 
-    <code class="directive">TypesConfig</code> file. </td></tr></table></blockquote>
-
-    <blockquote><table><tr><td bgcolor="#e0e5f5">Note that, unlike the NCSA httpd, this directive cannot be
-    used to set the type of particular files.</td></tr></table></blockquote>
-
-    <p>The <em>extension</em> argument is case-insensitive, and can
-    be specified with or without a leading dot.</p>
-
-</usage><p><strong>See also </strong></p><ul><li><a href="#multipleext">Files with
-    multiple extensions</a></li></ul><hr/><h2><a name="DefaultLanguage">DefaultLanguage</a> <a name="defaultlanguage">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sets all files in the given scope to the 
-specified language</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>DefaultLanguage
-    <em>MIME-lang</em></syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>None</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>FileInfo</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_mime</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>DefaultLanguage
-    is only available in Apache 1.3.4 and later.</td></tr></table></td></tr></table><usage>
-
-    <p>The DefaultLanguage directive tells Apache that all files in
-    the directive's scope (<em>e.g.</em>, all files covered by the
-    current <code>&lt;Directory&gt;</code> container) that don't
-    have an explicit language extension (such as <code>.fr</code>
-    or <code>.de</code> as configured by <code>AddLanguage</code>)
-    should be considered to be in the specified <em>MIME-lang</em>
-    language. This allows entire directories to be marked as
-    containing Dutch content, for instance, without having to
-    rename each file. Note that unlike using extensions to specify
-    languages, <code>DefaultLanguage</code> can only specify a
-    single language.</p>
-
-    <p>If no <code>DefaultLanguage</code> directive is in force,
-    and a file does not have any language extensions as configured
-    by <code>AddLanguage</code>, then that file will be considered
-    to have no language attribute.</p>
-
-</usage><p><strong>See also </strong></p><ul><li><a href="#multipleext">Files with
-    multiple extensions</a></li><li><code><a href="mod_negotiation.html">mod_negotiation</a></code></li></ul><hr/><h2><a name="MultiviewsMatch">MultiviewsMatch</a> <a name="multiviewsmatch">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td/></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>MultiviewsMatch
-    <em>[NegotiatedOnly] [Handlers] [Filters] [Any]</em></syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>None</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>FileInfo</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_mime</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>only available 
-    in Apache 2.0.26 and later.</td></tr></table></td></tr></table><usage>
-
-    <p>MultiviewsMatch permits three different behaviors for
-    <a href="mod_negotiation.html">mod_negotiation</a>'s Multiviews 
-    feature.  Multiviews allows a request for a file, e.g. index.html,
-    to match any negotiated extensions following the base request,
-    e.g. index.html.en, index.html,fr, or index.html.gz.</p>
-
-    <p>The NegotiatedOnly option provides that every extension following
-    the base name must correlate to a recognized mod_mime extension for
-    content negotation, e.g. Charset, Content-Type, Language, or 
-    Encoding.  This is the strictest implementation with the fewest
-    unexpected side effects, and is the default behavior.</p>
-
-    <p>To include extensions associated with Handlers and/or Filters,
-    set the MultiviewsMatch directive to either Handlers, Filters, or
-    both option keywords.  If all other factors are equal, the smallest
-    file will be served, e.g. in deciding between index.html.cgi of 500
-    characters and index.html.pl of 1000 bytes, the .cgi file would win
-    in this example.  Users of .asis files might prefer to use the
-    Handler option, if .asis files are associated with the asis-handler.</p>
-
-    <p>You may finally allow Any extensions to match, even if mod_mime 
-    doesn't recognize the extension.  This was the behavior in Apache 1.3,
-    and can cause unpredicatable results, such as serving .old or .bak
-    files the webmaster never expected to be served.</p>
-</usage><hr/><h2><a name="RemoveCharset">RemoveCharset</a> <a name="removecharset">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td/></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>RemoveCharset
-    <em>extension</em> [<em>extension</em>] ...</syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>None</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_mime</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>RemoveCharset is
-    only available in Apache 2.0.24 and later.</td></tr></table></td></tr></table><usage>
-    <p>The <code>RemoveCharset</code> directive removes any
-    character set associations for files with the given extensions.
-    This allows <code>.htaccess</code> files in subdirectories to
-    undo any associations inherited from parent directories or the
-    server config files.</p>
-
-    <p>The <em>extension</em> argument is case-insensitive, and can
-    be specified with or without a leading dot.</p>
-</usage><hr/><h2><a name="RemoveEncoding">RemoveEncoding</a> <a name="removeencoding">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td/></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>RemoveEncoding
-    <em>extension</em> [<em>extension</em>] ...</syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>None</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_mime</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>RemoveEncoding
-    is only available in Apache 1.3.13 and later.</td></tr></table></td></tr></table><usage>
-
-    <p>The <code>RemoveEncoding</code> directive removes any
-    encoding associations for files with the given extensions. This
-    allows <code>.htaccess</code> files in subdirectories to undo
-    any associations inherited from parent directories or the
-    server config files. An example of its use might be:</p>
-
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-    <dl>
-      <dt><code>/foo/.htaccess:</code></dt>
-      <dd><code>AddEncoding x-gzip .gz</code><br>
-       <code>AddType text/plain .asc</code><br>
-       <code>&lt;Files *.gz.asc&gt;</code><br>
-       <code>&nbsp;&nbsp;&nbsp;&nbsp;RemoveEncoding
-      .gz</code><br>
-       <code>&lt;/Files&gt;</code></dd>
-    </dl>
-</code></td></tr></table></blockquote>
-
-    <p>This will cause <code>foo.gz</code> to be marked as being
-    encoded with the gzip method, but <code>foo.gz.asc</code> as an
-    unencoded plaintext file.</p>
-
-    <p><strong>Note:</strong>RemoveEncoding directives are processed
-    <em>after</em> any AddEncoding directives, so it is possible they
-    may undo the effects of the latter if both occur within the
-    same directory configuration.</p>
-
-    <p>The <em>extension</em> argument is case-insensitive, and can
-    be specified with or without a leading dot.</p>
-</usage><hr/><h2><a name="RemoveHandler">RemoveHandler</a> <a name="removehandler">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td/></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>RemoveHandler
-    <em>extension</em> [<em>extension</em>] ...</syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>None</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_mime</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>RemoveHandler is
-    only available in Apache 1.3.4 and later.</td></tr></table></td></tr></table><usage>
-
-    <p>The <code>RemoveHandler</code> directive removes any handler
-    associations for files with the given extensions. This allows
-    <code>.htaccess</code> files in subdirectories to undo any
-    associations inherited from parent directories or the server
-    config files. An example of its use might be:</p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-    <dl>
-      <dt><code>/foo/.htaccess:</code></dt>
-
-      <dd><code>AddHandler server-parsed .html</code></dd>
-
-      <dt><code>/foo/bar/.htaccess:</code></dt>
-
-      <dd><code>RemoveHandler .html</code></dd>
-    </dl>
-</code></td></tr></table></blockquote>
-
-    <p>This has the effect of returning <code>.html</code> files in
-    the <code>/foo/bar</code> directory to being treated as normal
-    files, rather than as candidates for parsing (see the <a href="mod_include.html"><code>mod_include</code></a>
-    module).</p>
-
-    <p>The <em>extension</em> argument is case-insensitive, and can
-    be specified with or without a leading dot.</p>
-</usage><hr/><h2><a name="RemoveInputFilter">RemoveInputFilter</a> <a name="removeinputfilter">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td/></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>RemoveInputFilter
-    <em>extension</em> [<em>extension</em>] ...</syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>None</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_mime</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>RemoveInputFilter is only available in Apache 
-2.0.26 and later.</td></tr></table></td></tr></table><usage>   
-
-    <p>The <code>RemoveInputFilter</code> directive removes any
-    input filter associations for files with the given extensions.
-    This allows <code>.htaccess</code> files in subdirectories to
-    undo any associations inherited from parent directories or the
-    server config files.</p>
-
-    <p>The <em>extension</em> argument is case-insensitive, and can
-    be specified with or without a leading dot.</p>
-</usage><hr/><h2><a name="RemoveLanguage">RemoveLanguage</a> <a name="removelanguage">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td/></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>RemoveLanguage
-    <em>extension</em> [<em>extension</em>] ...</syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>None</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_mime</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>RemoveLanguage
-    is only available in Apache 2.0.24 and later.</td></tr></table></td></tr></table><usage>
-
-    <p>The <code>RemoveLanguage</code> directive removes any
-    language associations for files with the given extensions. This
-    allows <code>.htaccess</code> files in subdirectories to undo
-    any associations inherited from parent directories or the
-    server config files.</p>
-
-    <p>The <em>extension</em> argument is case-insensitive, and can
-    be specified with or without a leading dot.</p>
-</usage><hr/><h2><a name="RemoveOutputFilter">RemoveOutputFilter</a> <a name="removeoutputfilter">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td/></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>RemoveOutputFilter
-    <em>extension</em> [<em>extension</em>] ...</syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code/></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td/></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_mime</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>RemoveOutputFilter is only available in Apache 
-2.0.26 and later.</td></tr></table></td></tr></table><usage>    
-
-    <p>The <code>RemoveOutputFilter</code> directive removes any
-    output filter associations for files with the given extensions.
-    This allows <code>.htaccess</code> files in subdirectories to
-    undo any associations inherited from parent directories or the
-    server config files.</p>
-
-    <p>The <em>extension</em> argument is case-insensitive, and can
-    be specified with or without a leading dot.</p>
-</usage><hr/><h2><a name="RemoveType">RemoveType</a> <a name="removetype">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td/></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>RemoveType
-    <em>extension</em> [<em>extension</em>] ...</syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code/></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td/></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_mime</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>RemoveType is
-    only available in Apache 1.3.13 and later.</td></tr></table></td></tr></table><usage>
-    <p>The <code class="directive">RemoveType</code> directive removes any MIME type
-    associations for files with the given extensions. This allows
-    <code>.htaccess</code> files in subdirectories to undo any
-    associations inherited from parent directories or the server
-    config files. An example of its use might be:</p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-    <dl>
-      <dt><code>/foo/.htaccess:</code></dt>
-
-      <dd><code>RemoveType .cgi</code></dd>
-    </dl>
-</code></td></tr></table></blockquote>
-
-    <p>This will remove any special handling of <code>.cgi</code>
-    files in the <code>/foo/</code> directory and any beneath it,
-    causing the files to be treated as being of the <a href="core.html#defaulttype">default type</a>.</p>
-
-    <blockquote><table><tr><td bgcolor="#e0e5f5"><strong>Note:</strong><code><a href="RemoveType.html">RemoveType</a></code> directives
-    are processed <em>after</em> any <code><a href="AddType.html">AddType</a></code>
-    directives, so it is possible they may undo the effects of the
-    latter if both occur within the same directory
-    configuration.</td></tr></table></blockquote>
-
-    <p>The <em>extension</em> argument is case-insensitive, and can
-    be specified with or without a leading dot.</p>
-</usage><hr/><h2><a name="TypesConfig">TypesConfig</a> <a name="typesconfig">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td/></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>TypesConfig <em>file-path</em></syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>TypesConfig conf/mime.types</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_mime</td></tr></table></td></tr></table><usage>
-
-    <p>The TypesConfig directive sets the location of the MIME
-    types configuration file. <em>Filename</em> is relative to the
-    <a href="core.html#serverroot">ServerRoot</a>. This file sets
-    the default list of mappings from filename extensions to
-    content types; changing this file is not recommended. Use the
-    <a href="#addtype">AddType</a> directive instead. The file
-    contains lines in the format of the arguments to an AddType
-    command:</p>
-
-    <blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-      MIME-type extension extension ...
-    </code></td></tr></table></blockquote>
-
-    <p>
-    The extensions are lower-cased. Blank lines, and lines
-    beginning with a hash character (`#') are ignored. </p>
-</usage><hr/><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img alt="Index" src="../images/index.gif"/></a><a href="../"><img alt="Home" src="../images/home.gif"/></a></blockquote></body></html>
\ No newline at end of file
diff --git a/docs/manual/mod/mod_mime.xml b/docs/manual/mod/mod_mime.xml
deleted file mode 100644
index 4b0738d..0000000
--- a/docs/manual/mod/mod_mime.xml
+++ /dev/null
@@ -1,920 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.xsl"?>
-<modulesynopsis>
-
-<name>mod_mime</name>
-<description>Associates the request filename's extensions
-    (e.g. .html) with the file's behavior (handlers and filters)
-    and content (mime-type, language, character set and
-    encoding)</description>
-<status>Base</status>
-<sourcefile>mod_mime.c</sourcefile>
-<identifier>mime_module</identifier>
-
-<summary>
-    <p>This module is used to associate various bits of "meta
-    information" with files by their filename extensions. This
-    information relates the filename of the document to it's
-    mime-type, language, character set and encoding. This
-    information is sent to the browser, and participates in content
-    negotiation, so the user's preferences are respected when
-    choosing one of several possible files to serve. See
-    <module>mod_negotiation</module> for more information
-    about content negotiation. </p>
-
-    <p>The directives <directive>AddCharset</directive>,
-    <directive>AddEncoding</directive>,
-    <directive>AddLanguage</directive> and
-    <directive>AddType</directive> all used to map file extensions
-    onto the meta-information for that file. Respectively they set
-    the character set, content-encoding, content-language, and
-    MIME-type (content-type) of documents.</p>
-
-    <p>In addition, mod_mime may define the "handler" for a
-    document, which controls which module or script will serve the
-    document. With the introduction of "filters" in Apache 2.0,
-    mod_mime can also define the filters that the the content
-    should be processed through (e.g. the Includes output filter
-    for server side scripting) and what filters the client request
-    and POST content should be processed through (the input
-    filters.)</p>
-
-    <p>The directives <directive>AddHandler</directive>,
-    <directive>AddOutputFilter</directive>, and
-    <directive>AddInputFilter</directive> control the modules
-    or scripts that serve the document.  The 
-    <directive>MultiviewsMatch</directive> directive allows
-    <directive>mod_negotiation</directive> to consider these
-    file extensions to included when testing Multiviews matches.</p>
-
-    <p>The directive <directive>TypesConfig</directive> is used
-    to specify a file which also maps extensions onto MIME types.
-    Most administrators use the provided mime.types file which
-    associates common filename extensions with IANA registered
-    content types. The current list is maintained at
-    <code>http://www.isi.edu/in-notes/iana/assignments/media-types/media-types</code>
-    although it may be mirrored elsewhere). This simplifies the
-    httpd.conf file by providing the majority of media-type
-    definitions, and they may be overridden by 
-    <directive>AddType</directive> directives as needed.</p>
-
-    <note>Please do not send requests to the Apache httpd Project
-    to add any new entries in the distributed mime.types file
-    unless (1) they are already registered with IANA, and (2) they
-    use widely accepted, non-conflicting filename extensions across
-    platforms. category/x-subtype requests will be automatically
-    rejected, as will any new two-letter extensions as they will
-    likely conflict later with the already crowded language and
-    character set namespace.</note>
-
-    <p>The core directives <directive
-    module="core">ForceType</directive> and
-    <directive>SetHandler</directive> are used to
-    associate all the files in a given container (<em>e.g.</em>,
-    &lt;location&gt;, &lt;directory&gt;, or &lt;Files&gt;) with a
-    particular MIME-type or handler. These settings override any
-    filename extension mappings defined in mod_mime.</p>
-
-    <p>Note that changing the type or encoding of a file does not
-    change the value of the <code>Last-Modified</code> header.
-    Thus, previously cached copies may still be used by a client or
-    proxy, with the previous headers. If you change the
-    meta-information (language, content type, character set or
-    encoding) you may need to 'touch' affected files (updating
-    their last modified date) to ensure that all visitors are
-    receive the corrected content headers.</p>
-</summary>
-
-    <seealso>See also: <directive
-    module="mod_mime_magic">MimeMagicFile</directive></seealso>
-
-<section id="multipleext">
-<title>Files with Multiple Extensions</title>
-
-    <p>Files can have more than one extension, and the order of the
-    extensions is <em>normally</em> irrelevant. For example, if the
-    file <code>welcome.html.fr</code> maps onto content type
-    text/html and language French then the file <code>welcome.fr.html</code> 
-    will map onto exactly the same information.  If more than one 
-    extension is given which maps onto the same
-    type of meta-information, then the one to the right will be
-    used. For example, if ".gif" maps to the MIME-type image/gif
-    and ".html" maps to the MIME-type text/html, then the file
-    <code>welcome.gif.html</code> will be associated with the
-    MIME-type "text/html".</p>
-
-    <p>Care should be taken when a file with multiple extensions
-    gets associated with both a MIME-type and a handler. This will
-    usually result in the request being by the module associated
-    with the handler. For example, if the <code>.imap</code>
-    extension is mapped to the handler "imap-file" (from mod_imap)
-    and the <code>.html</code> extension is mapped to the MIME-type
-    "text/html", then the file <code>world.imap.html</code> will be
-    associated with both the "imap-file" handler and "text/html"
-    MIME-type. When it is processed, the "imap-file" handler will
-    be used, and so it will be treated as a mod_imap imagemap
-    file.</p>
-</section>
-
-<section id="contentencoding"><title>Content encoding</title>
-
-    <p>A file of a particular MIME type can additionally be encoded a
-    particular way to simplify transmission over the Internet.
-    While this usually will refer to compression, such as
-    <code>gzip</code>, it can also refer to encryption, such a
-    <code>pgp</code> or to an encoding such as UUencoding, which is
-    designed for transmitting a binary file in an ASCII (text)
-    format.</p>
-
-    <p>The MIME RFC puts it this way:</p>
-
-    <note>
-      The Content-Encoding entity-header field is used as a
-      modifier to the media-type. When present, its value indicates
-      what additional content coding has been applied to the
-      resource, and thus what decoding mechanism must be applied in
-      order to obtain the media-type referenced by the Content-Type
-      header field. The Content-Encoding is primarily used to allow
-      a document to be compressed without losing the identity of
-      its underlying media type.
-    </note>
-
-    <p>By using more than one file extension (see <a
-    href="#multipleext">section above about multiple file
-    extensions</a>), you can indicate that a file is of a
-    particular <em>type</em>, and also has a particular
-    <em>encoding</em>. </p>
-
-    <p>For example, you may have a file which is a Microsoft Word
-    document, which is pkzipped to reduce its size. If the
-    <code>.doc</code> extension is associated with the Microsoft
-    Word file type, and the <code>.zip</code> extension is
-    associated with the pkzip file encoding, then the file
-    <code>Resume.doc.zip</code>would be known to be a pkzip'ed Word
-    document.</p>
-
-    <p>Apache send a <code>Content-encoding</code> header with the
-    resource, in order to tell the client browser about the
-    encoding method.</p>
-
-    <example>Content-encoding: pkzip</example>
-
-</section>
-
-<section>
-
-<title>Character sets and languages</title>
-
-    <p>In addition to file type and the file encoding,
-    another important piece of information is what language a
-    particular document is in, and in what character set the file
-    should be displayed. For example, the document might be written
-    in the Vietnamese alphabet, or in Cyrillic, and should be
-    displayed as such. This information, also, is transmitted in
-    HTTP headers.</p>
-
-    <p>The character set, language encoding and mime type are all 
-    used in the process of content negotiation (See 
-    <module>mod_negotiation</module>) to determine
-    which document to give to the client, when there are
-    alternative documents in more than one character set, language, 
-    encoding or mime type.  All filename extensions associations
-    created with <module>AddCharset</module>, <module>AddEncoding</module>, 
-    <module>AddLanguage</module> and <module>AddType</module> directives
-    (and extensions listed in the <module>MimeMagicFile</module>)
-    participate in this select process.  Filename extensions that
-    are only associated using the <module>AddHandler</module>,
-    <module>AddInputFilter</module> or <module>AddOutputFilter</module>
-    directives may be included or excluded from matching by using 
-    the <directive>MultiviewsMatch</directive> directive.</p>
-
-<section>
-<title>Charset</title>
-
-    <p>To convey this further information, Apache optionally sends
-    a <code>Content-Language</code> header, to specify the language
-    that the document is in, and can append additional information
-    onto the <code>Content-Type</code> header to indicate the
-    particular character set that should be used to correctly
-    render the information.</p>
-
-<example>
-Content-Language: en, fr<br />
-Content-Type: text/plain; charset=ISO-8859-2
-</example>
-
-    <p>The language specification is the two-letter abbreviation
-    for the language. The <code>charset</code> is the name of the
-    particular character set which should be used.</p>
-</section>
-</section>
-
-
-<directivesynopsis>
-<name>AddCharset</name>
-<description>Maps the given filename extensions
-    to the specified content charset</description>
-<syntax>AddCharset <em>charset extension</em> 
-[<em>extension</em>] ...</syntax>
-<default>None</default>
-<contextlist>
-<context>server config</context>
-<context>virtual host</context>
-<context>directory</context>
-<context>.htaccess</context>
-</contextlist>
-<override>FileInfo</override>
-<compatibility>AddCharset is only available in Apache 
-1.3.10 and later</compatibility>
-
-<usage>
-    
-    <p>The AddCharset directive maps the given filename extensions
-    to the specified content charset. <em>charset</em> is the MIME
-    charset parameter of filenames containing <em>extension</em>.
-    This mapping is added to any already in force, overriding any
-    mappings that already exist for the same <em>extension</em>.</p>
-
-    <p>Example:</p>
-<example>
-    AddLanguage ja .ja<br />
-    AddCharset EUC-JP .euc<br />
-    AddCharset ISO-2022-JP .jis<br />
-    AddCharset SHIFT_JIS .sjis
-</example>
-
-    <p>Then the document <code>xxxx.ja.jis</code> will be treated
-    as being a Japanese document whose charset is ISO-2022-JP (as
-    will the document <code>xxxx.jis.ja</code>). The AddCharset
-    directive is useful for both to inform the client about the
-    character encoding of the document so that the document can be
-    interpreted and displayed appropriately, and for <a
-    href="../content-negotiation.html">content negotiation</a>,
-    where the server returns one from several documents based on
-    the client's charset preference.</p>
-
-    <p>The <em>extension</em> argument is case-insensitive, and can
-    be specified with or without a leading dot.</p>
-
-</usage>
-<seealso><module>mod_negotiation</module></seealso>
-
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AddEncoding</name>
-<description>Maps the given filename extensions
-    to the specified encoding type</description>
-<syntax>AddEncoding
-    <em>MIME-enc extension</em> [<em>extension</em>] ...</syntax>
-<default>None</default>
-<contextlist>
-<context>server config</context>
-<context>virtual host</context>
-<context>directory</context>
-<context>.htaccess</context>
-</contextlist>
-<override>FileInfo</override>
-
-
-<usage>
-
-    <p>The AddEncoding directive maps the given filename extensions
-    to the specified encoding type. <em>MIME-enc</em> is the MIME
-    encoding to use for documents containing the
-    <em>extension</em>. This mapping is added to any already in
-    force, overriding any mappings that already exist for the same
-    <em>extension</em>. Example:</p>
-
-    <example>
-      AddEncoding x-gzip .gz<br />
-      AddEncoding x-compress .Z
-    </example>
-
-    <p>This will cause filenames containing the .gz extension to be
-    marked as encoded using the x-gzip encoding, and filenames
-    containing the .Z extension to be marked as encoded with
-    x-compress. </p>
-
-    <p>Old clients expect <code>x-gzip</code> and
-    <code>x-compress</code>, however the standard dictates that
-    they're equivalent to <code>gzip</code> and
-    <code>compress</code> respectively. Apache does content
-    encoding comparisons by ignoring any leading <code>x-</code>.
-    When responding with an encoding Apache will use whatever form
-    (<em>i.e.</em>, <code>x-foo</code> or <code>foo</code>) the
-    client requested. If the client didn't specifically request a
-    particular form Apache will use the form given by the
-    <code>AddEncoding</code> directive. To make this long story
-    short, you should always use <code>x-gzip</code> and
-    <code>x-compress</code> for these two specific encodings. More
-    recent encodings, such as <code>deflate</code> should be
-    specified without the <code>x-</code>.</p>
-
-    <p>The <em>extension</em> argument is case-insensitive, and can
-    be specified with or without a leading dot.</p>
-
-</usage>
-<seealso><a href="#multipleext">Files with
-    multiple extensions</a></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AddHandler</name>
-<description>AddHandler maps the filename extensions
-to the <a href="../handler.html">handler</a> 
-<em>handler-name</em></description>
-<syntax>AddHandler
-    <em>handler-name extension</em> [<em>extension</em>] ...</syntax>
-<default>None</default>
-<contextlist>
-<context>server config</context>
-<context>virtual host</context>
-<context>directory</context>
-<context>.htaccess</context>
-</contextlist>
-<override>FileInfo</override>
-<compatibility></compatibility>
-
-<usage>
-<p>This mapping is added to any already in
-    force, overriding any mappings that already exist for the same
-    <em>extension</em>. For example, to activate CGI scripts with
-    the file extension "<code>.cgi</code>", you might use:</p>
-
-<example>
-    AddHandler cgi-script .cgi
-</example>
-
-    <p>Once that has been put into your srm.conf or httpd.conf
-    file, any file containing the "<code>.cgi</code>" extension
-    will be treated as a CGI program.</p>
-
-    <p>The <em>extension</em> argument is case-insensitive, and can
-    be specified with or without a leading dot.</p>
-
-</usage>
- <seealso><a href="#multipleext">Files with
-    multiple extensions</a></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AddInputFilter</name>
-<description>Maps the filename extensions
-    to the filter or filters which will process
-    client requests</description>
-<syntax>AddInputFilter
-    <em>filter</em>[<em>;filter</em>...] extension
-    [<em>extension</em> ...]</syntax>
-<default>None</default>
-<contextlist>
-<context>server config</context>
-<context>virtual host</context>
-<context>directory</context>
-<context>.htaccess</context>
-</contextlist>
-<compatibility>AddInputFilter
-    is only available in Apache 2.0.26 and later.</compatibility>
-
-<usage>
-
-    <p>AddInputFilter maps the filename extensions
-    <em>extension</em> to the filter or filters which will process
-    client requests and POST input when they are received by the
-    server. This is in addition to any filters defined elsewhere,
-    including the <a
-    href="core.html#setinputfilter">SetInputFilter</a> directive.
-    This mapping is merged over any already in force, overriding
-    any mappings that already exist for the same
-    <em>extension</em>.</p>
-
-    <p>If more than one filter is specified, they must be separated
-    by semicolons in the order in which they should process the
-    content. Both the filter and <em>extension</em> arguments are
-    case-insensitive, and the extension may be specified with or
-    without a leading dot.</p>
-
-</usage>
-<seealso><a href="../filter.html">Filters</a>
-    documentation.</seealso>
-
-</directivesynopsis>
-
-
-<directivesynopsis>
-<name>AddLanguage</name>
-<description>Maps the given filename extension
-to the specified content language</description>
-<syntax>AddLanguage
-    <em>MIME-lang extension</em> [<em>extension</em>] ...</syntax>
-<default>None</default>
-<contextlist>
-<context>server config</context>
-<context>virtual host</context>
-<context>directory</context>
-<context>.htaccess</context>
-</contextlist>
-<override>FileInfo</override>
-
-<usage>
-
-    <p>The AddLanguage directive maps the given filename extension
-    to the specified content language. <em>MIME-lang</em> is the
-    MIME language of filenames containing <em>extension</em>. This
-    mapping is added to any already in force, overriding any
-    mappings that already exist for the same
-    <em>extension</em>.</p>
-
-    <p>Example:</p>
-
-    <example>
-      AddEncoding x-compress .Z<br />
-       AddLanguage en .en<br />
-       AddLanguage fr .fr
-    </example>
-
-    <p>Then the document <code>xxxx.en.Z</code> will be treated as
-    being a compressed English document (as will the document
-    <code>xxxx.Z.en</code>). Although the content language is
-    reported to the client, the browser is unlikely to use this
-    information. The AddLanguage directive is more useful for <a
-    href="../content-negotiation.html">content negotiation</a>,
-    where the server returns one from several documents based on
-    the client's language preference.</p>
-
-    <p>If multiple language assignments are made for the same
-    extension, the last one encountered is the one that is used.
-    That is, for the case of:</p>
-
-<example>
-    AddLanguage en .en<br />
-    AddLanguage en-uk .en<br />
-    AddLanguage en-us .en
-</example>
-
-    <p>documents with the extension "<code>.en</code>" would be
-    treated as being "<code>en-us</code>".</p>
-
-    <p>The <em>extension</em> argument is case-insensitive, and can
-    be specified with or without a leading dot.</p>
-
-</usage>
-<seealso><a href="#multipleext">Files with
-    multiple extensions</a></seealso>
-<seealso><module>mod_negotiation</module></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AddOutputFilter</name>
-<description>maps the filename
-extensions to the filters that will process
-responses from the server</description>
-<syntax>AddOutputFilter
-    <em>filter</em>[<em>;filter</em>...] extension
-    [<em>extension</em> ...]</syntax>
-<default>None</default>
-<contextlist>
-<context>server config</context>
-<context>virtual host</context>
-<context>directory</context>
-<context>.htaccess</context>
-</contextlist>
-<override></override>
-<compatibility>AddOutputFilter
-    is only available in Apache 2.0.26 and later.</compatibility>
-
-<usage>
-
-    <p>The <directive>AddOutputFilter</directive> directive maps the filename
-    extensions <em>extension</em> to the filters which will process
-    responses from the server before they are sent to the client.
-    This is in addition to any filters defined elsewhere, including
-    the <directive module="core">SetOutputFilter</directive>
-    directive. This mapping is merged over any already in force,
-    overriding any mappings that already exist for the same
-    <em>extension</em>.</p>
-
-    <p>For example, the following configuration will process all
-    .shtml files for server-side includes.</p>
-     
-
-    <example>
-      &nbsp;&nbsp;AddOutputFilter INCLUDES shtml
-    </example>
-
-    <p>If more than one filter is specified, they must be separated
-    by semicolons in the order in which they should process the
-    content. Both the filter and <em>extension</em> arguments are
-    case-insensitive, and the extension may be specified with or
-    without a leading dot.</p>
-
-</usage>
-<seealso><a href="../filter.html">Filters</a> documentation</seealso>
-
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AddType</name>
-<description>Maps the given filename extensions
-onto the specified content type</description>
-<syntax>AddType <em>MIME-type
-    extension</em> [<em>extension</em>] ...</syntax>
-<default>None</default>
-<contextlist>
-<context>server config</context>
-<context>virtual host</context>
-<context>directory</context>
-<context>.htaccess</context>
-</contextlist>
-<override>FileInfo</override>
-
-<usage>
-
-    <p>The AddType directive maps the given filename extensions
-    onto the specified content type. <em>MIME-type</em> is the MIME
-    type to use for filenames containing <em>extension</em>. This
-    mapping is added to any already in force, overriding any
-    mappings that already exist for the same <em>extension</em>.
-    This directive can be used to add mappings not listed in the
-    MIME types file (see the <directive>TypesConfig</directive>
-    directive).</p>
-    
-    <p>Example:</p>
-
-    <example>
-      AddType image/gif .gif
-    </example>
-
-    <note>It is recommended that new MIME types be added using the
-    AddType directive rather than changing the 
-    <directive>TypesConfig</directive> file. </note>
-
-    <note>Note that, unlike the NCSA httpd, this directive cannot be
-    used to set the type of particular files.</note>
-
-    <p>The <em>extension</em> argument is case-insensitive, and can
-    be specified with or without a leading dot.</p>
-
-</usage>
-<seealso><a href="#multipleext">Files with
-    multiple extensions</a></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>MultiviewsMatch</name>
-<syntax>MultiviewsMatch
-    <em>[NegotiatedOnly] [Handlers] [Filters] [Any]</em></syntax>
-<default>None</default>
-<contextlist>
-<context>server config</context>
-<context>virtual host</context>
-<context>directory</context>
-<context>.htaccess</context>
-</contextlist>
-<override>FileInfo</override>
-<compatibility>only available 
-    in Apache 2.0.26 and later.</compatibility>
-
-<usage>
-
-    <p>MultiviewsMatch permits three different behaviors for
-    <a href="mod_negotiation.html">mod_negotiation</a>'s Multiviews 
-    feature.  Multiviews allows a request for a file, e.g. index.html,
-    to match any negotiated extensions following the base request,
-    e.g. index.html.en, index.html,fr, or index.html.gz.</p>
-
-    <p>The NegotiatedOnly option provides that every extension following
-    the base name must correlate to a recognized mod_mime extension for
-    content negotation, e.g. Charset, Content-Type, Language, or 
-    Encoding.  This is the strictest implementation with the fewest
-    unexpected side effects, and is the default behavior.</p>
-
-    <p>To include extensions associated with Handlers and/or Filters,
-    set the MultiviewsMatch directive to either Handlers, Filters, or
-    both option keywords.  If all other factors are equal, the smallest
-    file will be served, e.g. in deciding between index.html.cgi of 500
-    characters and index.html.pl of 1000 bytes, the .cgi file would win
-    in this example.  Users of .asis files might prefer to use the
-    Handler option, if .asis files are associated with the asis-handler.</p>
-
-    <p>You may finally allow Any extensions to match, even if mod_mime 
-    doesn't recognize the extension.  This was the behavior in Apache 1.3,
-    and can cause unpredicatable results, such as serving .old or .bak
-    files the webmaster never expected to be served.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>DefaultLanguage</name>
-<description>Sets all files in the given scope to the 
-specified language</description>
-<syntax>DefaultLanguage
-    <em>MIME-lang</em></syntax>
-<default>None</default>
-<contextlist>
-<context>server config</context>
-<context>virtual host</context>
-<context>directory</context>
-<context>.htaccess</context>
-</contextlist>
-<override>FileInfo</override>
-<compatibility>DefaultLanguage
-    is only available in Apache 1.3.4 and later.</compatibility>
-
-<usage>
-
-    <p>The DefaultLanguage directive tells Apache that all files in
-    the directive's scope (<em>e.g.</em>, all files covered by the
-    current <code>&lt;Directory&gt;</code> container) that don't
-    have an explicit language extension (such as <code>.fr</code>
-    or <code>.de</code> as configured by <code>AddLanguage</code>)
-    should be considered to be in the specified <em>MIME-lang</em>
-    language. This allows entire directories to be marked as
-    containing Dutch content, for instance, without having to
-    rename each file. Note that unlike using extensions to specify
-    languages, <code>DefaultLanguage</code> can only specify a
-    single language.</p>
-
-    <p>If no <code>DefaultLanguage</code> directive is in force,
-    and a file does not have any language extensions as configured
-    by <code>AddLanguage</code>, then that file will be considered
-    to have no language attribute.</p>
-
-</usage>
-<seealso><a href="#multipleext">Files with
-    multiple extensions</a></seealso>
-<seealso><module>mod_negotiation</module></seealso>
-</directivesynopsis>
-
-
-<directivesynopsis>
-<name>RemoveCharset</name>
-<syntax>RemoveCharset
-    <em>extension</em> [<em>extension</em>] ...</syntax>
-<default>None</default>
-<contextlist>
-<context>directory</context>
-<context>.htaccess</context>
-</contextlist>
-<compatibility>RemoveCharset is
-    only available in Apache 2.0.24 and later.</compatibility>
-
-<usage>
-    <p>The <code>RemoveCharset</code> directive removes any
-    character set associations for files with the given extensions.
-    This allows <code>.htaccess</code> files in subdirectories to
-    undo any associations inherited from parent directories or the
-    server config files.</p>
-
-    <p>The <em>extension</em> argument is case-insensitive, and can
-    be specified with or without a leading dot.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>RemoveEncoding</name>
-<syntax>RemoveEncoding
-    <em>extension</em> [<em>extension</em>] ...</syntax>
-<default>None</default>
-<contextlist>
-<context>directory</context>
-<context>.htaccess</context>
-</contextlist>
-<compatibility>RemoveEncoding
-    is only available in Apache 1.3.13 and later.</compatibility>
-
-<usage>
-
-    <p>The <code>RemoveEncoding</code> directive removes any
-    encoding associations for files with the given extensions. This
-    allows <code>.htaccess</code> files in subdirectories to undo
-    any associations inherited from parent directories or the
-    server config files. An example of its use might be:</p>
-
-
-<example>
-    <dl>
-      <dt><code>/foo/.htaccess:</code></dt>
-      <dd><code>AddEncoding x-gzip .gz</code><br />
-       <code>AddType text/plain .asc</code><br />
-       <code>&lt;Files *.gz.asc&gt;</code><br />
-       <code>&nbsp;&nbsp;&nbsp;&nbsp;RemoveEncoding
-      .gz</code><br />
-       <code>&lt;/Files&gt;</code></dd>
-    </dl>
-</example>
-
-    <p>This will cause <code>foo.gz</code> to be marked as being
-    encoded with the gzip method, but <code>foo.gz.asc</code> as an
-    unencoded plaintext file.</p>
-
-    <p><strong>Note:</strong>RemoveEncoding directives are processed
-    <em>after</em> any AddEncoding directives, so it is possible they
-    may undo the effects of the latter if both occur within the
-    same directory configuration.</p>
-
-    <p>The <em>extension</em> argument is case-insensitive, and can
-    be specified with or without a leading dot.</p>
-</usage>
-</directivesynopsis>
-
-
-<directivesynopsis>
-<name>RemoveHandler</name>
-<syntax>RemoveHandler
-    <em>extension</em> [<em>extension</em>] ...</syntax>
-<default>None</default>
-<contextlist>
-<context>directory</context>
-<context>.htaccess</context>
-</contextlist>
-<compatibility>RemoveHandler is
-    only available in Apache 1.3.4 and later.</compatibility>
-
-<usage>
-
-    <p>The <code>RemoveHandler</code> directive removes any handler
-    associations for files with the given extensions. This allows
-    <code>.htaccess</code> files in subdirectories to undo any
-    associations inherited from parent directories or the server
-    config files. An example of its use might be:</p>
-
-<example>
-    <dl>
-      <dt><code>/foo/.htaccess:</code></dt>
-
-      <dd><code>AddHandler server-parsed .html</code></dd>
-
-      <dt><code>/foo/bar/.htaccess:</code></dt>
-
-      <dd><code>RemoveHandler .html</code></dd>
-    </dl>
-</example>
-
-    <p>This has the effect of returning <code>.html</code> files in
-    the <code>/foo/bar</code> directory to being treated as normal
-    files, rather than as candidates for parsing (see the <a
-    href="mod_include.html"><code>mod_include</code></a>
-    module).</p>
-
-    <p>The <em>extension</em> argument is case-insensitive, and can
-    be specified with or without a leading dot.</p>
-</usage>
-</directivesynopsis>
-
-
-<directivesynopsis>
-<name>RemoveInputFilter</name>
-<syntax>RemoveInputFilter
-    <em>extension</em> [<em>extension</em>] ...</syntax>
-<default>None</default>
-<contextlist>
-<context>directory</context>
-<context>.htaccess</context>
-</contextlist>
-<compatibility>RemoveInputFilter is only available in Apache 
-2.0.26 and later.</compatibility>
-
-<usage>   
-
-    <p>The <code>RemoveInputFilter</code> directive removes any
-    input filter associations for files with the given extensions.
-    This allows <code>.htaccess</code> files in subdirectories to
-    undo any associations inherited from parent directories or the
-    server config files.</p>
-
-    <p>The <em>extension</em> argument is case-insensitive, and can
-    be specified with or without a leading dot.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>RemoveLanguage</name>
-<syntax>RemoveLanguage
-    <em>extension</em> [<em>extension</em>] ...</syntax>
-<default>None</default>
-<contextlist>
-<context>directory</context>
-<context>.htaccess</context>
-</contextlist>
-<compatibility>RemoveLanguage
-    is only available in Apache 2.0.24 and later.</compatibility>
-
-
-<usage>
-
-    <p>The <code>RemoveLanguage</code> directive removes any
-    language associations for files with the given extensions. This
-    allows <code>.htaccess</code> files in subdirectories to undo
-    any associations inherited from parent directories or the
-    server config files.</p>
-
-    <p>The <em>extension</em> argument is case-insensitive, and can
-    be specified with or without a leading dot.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>RemoveOutputFilter</name>
-<syntax>RemoveOutputFilter
-    <em>extension</em> [<em>extension</em>] ...</syntax>
-<default></default>
-<contextlist>
-<context>directory</context>
-<context>.htaccess</context>
-</contextlist>
-<override></override>
-<compatibility>RemoveOutputFilter is only available in Apache 
-2.0.26 and later.</compatibility>
-
-<usage>    
-
-    <p>The <code>RemoveOutputFilter</code> directive removes any
-    output filter associations for files with the given extensions.
-    This allows <code>.htaccess</code> files in subdirectories to
-    undo any associations inherited from parent directories or the
-    server config files.</p>
-
-    <p>The <em>extension</em> argument is case-insensitive, and can
-    be specified with or without a leading dot.</p>
-</usage>
-</directivesynopsis>
-
-
-<directivesynopsis>
-<name>RemoveType</name>
-<syntax>RemoveType
-    <em>extension</em> [<em>extension</em>] ...</syntax>
-<default></default>
-<contextlist>
-<context>directory</context>
-<context>.htaccess</context>
-</contextlist>
-<override></override>
-<compatibility>RemoveType is
-    only available in Apache 1.3.13 and later.</compatibility>
-
-<usage>
-    <p>The <directive>RemoveType</directive> directive removes any MIME type
-    associations for files with the given extensions. This allows
-    <code>.htaccess</code> files in subdirectories to undo any
-    associations inherited from parent directories or the server
-    config files. An example of its use might be:</p>
-
-<example>
-    <dl>
-      <dt><code>/foo/.htaccess:</code></dt>
-
-      <dd><code>RemoveType .cgi</code></dd>
-    </dl>
-</example>
-
-    <p>This will remove any special handling of <code>.cgi</code>
-    files in the <code>/foo/</code> directory and any beneath it,
-    causing the files to be treated as being of the <a
-    href="core.html#defaulttype">default type</a>.</p>
-
-    <note><strong>Note:</strong><module>RemoveType</module> directives
-    are processed <em>after</em> any <module>AddType</module>
-    directives, so it is possible they may undo the effects of the
-    latter if both occur within the same directory
-    configuration.</note>
-
-    <p>The <em>extension</em> argument is case-insensitive, and can
-    be specified with or without a leading dot.</p>
-</usage>
-</directivesynopsis>
-
-
-
-<directivesynopsis>
-<name>TypesConfig</name>
-<syntax>TypesConfig <em>file-path</em></syntax>
-<default>TypesConfig conf/mime.types</default>
-<contextlist>
-<context>server config</context>
-</contextlist>
-
-<usage>
-
-    <p>The TypesConfig directive sets the location of the MIME
-    types configuration file. <em>Filename</em> is relative to the
-    <a href="core.html#serverroot">ServerRoot</a>. This file sets
-    the default list of mappings from filename extensions to
-    content types; changing this file is not recommended. Use the
-    <a href="#addtype">AddType</a> directive instead. The file
-    contains lines in the format of the arguments to an AddType
-    command:</p>
-
-    <example>
-      MIME-type extension extension ...
-    </example>
-
-    <p>
-    The extensions are lower-cased. Blank lines, and lines
-    beginning with a hash character (`#') are ignored. </p>
-</usage>
-</directivesynopsis>
-</modulesynopsis>
-
diff --git a/docs/manual/mod/mod_mime_magic.html b/docs/manual/mod/mod_mime_magic.html
deleted file mode 100644
index 01969e6..0000000
--- a/docs/manual/mod/mod_mime_magic.html
+++ /dev/null
@@ -1,278 +0,0 @@
-<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-     This file is generated from xml source: DO NOT EDIT
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
---><title>mod_mime_magic - Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img alt="[APACHE DOCUMENTATION]" src="../images/sub.gif"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module mod_mime_magic</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td><description>Determines the MIME type of a file
-    by looking at a few bytes of its contents</description></td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="module-dict.html#ModuleIdentifier" class="help">Module&nbsp;Identifier:</a></td><td>mime_magic_module</td></tr></table></td></tr></table><h2>Summary</h2><summary>
-    <p>This module determines the MIME type of files in the same
-    way the Unix file(1) command works: it looks at the first few
-    bytes of the file. It is intended as a "second line of defense"
-    for cases that <code><a href="mod_mime.html">mod_mime</a></code> can't
-    resolve. To assure that mod_mime gets first try at determining
-    a file's MIME type, be sure to list mod_mime_magic
-    <strong>before</strong> mod_mime in the configuration.</p>
-
-    <p>This module is derived from a free version of the
-    <code>file(1)</code> command for Unix, which uses "magic
-    numbers" and other hints from a file's contents to figure out
-    what the contents are. This module is active only if the magic
-    file is specified by the <a href="#mimemagicfile" class="directive"><code class="directive">MimeMagicFile</code></a> directive.</p>
-</summary><h2>Directives</h2><ul><li><a href="#mimemagicfile">MimeMagicFile</a></li></ul><h2>Format of the Magic File</h2>
-
-    <p>The contents of the file are plain ASCII text in 4-5
-    columns. Blank lines are allowed but ignored. Commented lines
-    use a hash mark "#". The remaining lines are parsed for the
-    following columns:</p>
-
-    <table border="1">
-      <tr valign="top">
-        <th>Column</th>
-
-        <th>Description</th>
-      </tr>
-
-      <tr valign="top">
-        <td>1</td>
-
-        <td>byte number to begin checking from<br>
-         "&gt;" indicates a dependency upon the previous non-"&gt;"
-        line</td>
-      </tr>
-
-      <tr valign="top">
-        <td>2</td>
-
-        <td>
-          type of data to match 
-
-          <table border="1">
-            <tr>
-              <td>byte</td>
-
-              <td>single character</td>
-            </tr>
-
-            <tr>
-              <td>short</td>
-
-              <td>machine-order 16-bit integer</td>
-            </tr>
-
-            <tr>
-              <td>long</td>
-
-              <td>machine-order 32-bit integer</td>
-            </tr>
-
-            <tr>
-              <td>string</td>
-
-              <td>arbitrary-length string</td>
-            </tr>
-
-            <tr>
-              <td>date</td>
-
-              <td>long integer date (seconds since Unix
-              epoch/1970)</td>
-            </tr>
-
-            <tr>
-              <td>beshort</td>
-
-              <td>big-endian 16-bit integer</td>
-            </tr>
-
-            <tr>
-              <td>belong</td>
-
-              <td>big-endian 32-bit integer</td>
-            </tr>
-
-            <tr>
-              <td>bedate</td>
-
-              <td>big-endian 32-bit integer date</td>
-            </tr>
-
-            <tr>
-              <td>leshort</td>
-
-              <td>little-endian 16-bit integer</td>
-            </tr>
-
-            <tr>
-              <td>lelong</td>
-
-              <td>little-endian 32-bit integer</td>
-            </tr>
-
-            <tr>
-              <td>ledate</td>
-
-              <td>little-endian 32-bit integer date</td>
-            </tr>
-          </table>
-        </td>
-      </tr>
-
-      <tr valign="top">
-        <td>3</td>
-
-        <td>contents of data to match</td>
-      </tr>
-
-      <tr valign="top">
-        <td>4</td>
-
-        <td>MIME type if matched</td>
-      </tr>
-
-      <tr valign="top">
-        <td>5</td>
-
-        <td>MIME encoding if matched (optional)</td>
-      </tr>
-    </table>
-
-    <p>For example, the following magic file lines would recognize
-    some audio formats.</p>
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-<pre>
-# Sun/NeXT audio data
-0       string          .snd
-&gt;12     belong          1               audio/basic
-&gt;12     belong          2               audio/basic
-&gt;12     belong          3               audio/basic
-&gt;12     belong          4               audio/basic
-&gt;12     belong          5               audio/basic
-&gt;12     belong          6               audio/basic
-&gt;12     belong          7               audio/basic
-&gt;12     belong          23              audio/x-adpcm
-</pre>
-</code></td></tr></table></blockquote>
-    <p>Or these would recognize the difference between "*.doc" files
-    containing Microsoft Word or FrameMaker documents. (These are
-    incompatible file formats which use the same file suffix.)</p>
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-<pre>
-# Frame
-0       string          \&lt;MakerFile     application/x-frame
-0       string          \&lt;MIFFile       application/x-frame
-0       string          \&lt;MakerDictionary       application/x-frame
-0       string          \&lt;MakerScreenFon        application/x-frame
-0       string          \&lt;MML           application/x-frame
-0       string          \&lt;Book          application/x-frame
-0       string          \&lt;Maker         application/x-frame
-
-# MS-Word
-0       string          \376\067\0\043                  application/msword
-0       string          \320\317\021\340\241\261        application/msword
-0       string          \333\245-\0\0\0                 application/msword
-</pre>
-</code></td></tr></table></blockquote>
-    <p>An optional MIME encoding can be included as a fifth column.
-    For example, this can recognize gzipped files and set the
-    encoding for them.</p>
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-<pre>
-# gzip (GNU zip, not to be confused with [Info-ZIP/PKWARE] zip archiver)
-0       string          \037\213        application/octet-stream        x-gzip
-</pre>
-</code></td></tr></table></blockquote>
-<h2>Performance Issues</h2>
-    <p>This module is not for every system. If your system is barely
-    keeping up with its load or if you're performing a web server
-    benchmark, you may not want to enable this because the
-    processing is not free.</p>
-
-    <p>However, an effort was made to improve the performance of
-    the original file(1) code to make it fit in a busy web server.
-    It was designed for a server where there are thousands of users
-    who publish their own documents. This is probably very common
-    on intranets. Many times, it's helpful if the server can make
-    more intelligent decisions about a file's contents than the
-    file name allows ...even if just to reduce the "why doesn't my
-    page work" calls when users improperly name their own files.
-    You have to decide if the extra work suits your
-    environment.</p>
-
-    <p>When compiling an Apache server, this module should be at or
-    near the top of the list of modules in the Configuration file.
-    The modules are listed in increasing priority so that will mean
-    this one is used only as a last resort, just like it was
-    designed to.</p>
-
-<h2><a name="notes">Notes</a></h2>
-
-    <p>The following notes apply to the mod_mime_magic module and are
-    included here for compliance with contributors' copyright
-    restrictions that require their acknowledgment. </p>
-<pre>
-/*
- * mod_mime_magic: MIME type lookup via file magic numbers
- * Copyright (c) 1996-1997 Cisco Systems, Inc.
- *
- * This software was submitted by Cisco Systems to the Apache Group in July
- * 1997.  Future revisions and derivatives of this source code must
- * acknowledge Cisco Systems as the original contributor of this module.
- * All other licensing and usage conditions are those of the Apache Group.
- *
- * Some of this code is derived from the free version of the file command
- * originally posted to comp.sources.unix.  Copyright info for that program
- * is included below as required.
- * ---------------------------------------------------------------------------
- * - Copyright (c) Ian F. Darwin, 1987. Written by Ian F. Darwin.
- *
- * This software is not subject to any license of the American Telephone and
- * Telegraph Company or of the Regents of the University of California.
- *
- * Permission is granted to anyone to use this software for any purpose on any
- * computer system, and to alter it and redistribute it freely, subject to
- * the following restrictions:
- *
- * 1. The author is not responsible for the consequences of use of this
- * software, no matter how awful, even if they arise from flaws in it.
- *
- * 2. The origin of this software must not be misrepresented, either by
- * explicit claim or by omission.  Since few users ever read sources, credits
- * must appear in the documentation.
- *
- * 3. Altered versions must be plainly marked as such, and must not be
- * misrepresented as being the original software.  Since few users ever read
- * sources, credits must appear in the documentation.
- *
- * 4. This notice may not be removed or altered.
- * -------------------------------------------------------------------------
- *
- * For compliance with Mr Darwin's terms: this has been very significantly
- * modified from the free "file" command.
- * - all-in-one file for compilation convenience when moving from one
- *   version of Apache to the next.
- * - Memory allocation is done through the Apache API's pool structure.
- * - All functions have had necessary Apache API request or server
- *   structures passed to them where necessary to call other Apache API
- *   routines.  (<em>i.e.</em>, usually for logging, files, or memory allocation in
- *   itself or a called function.)
- * - struct magic has been converted from an array to a single-ended linked
- *   list because it only grows one record at a time, it's only accessed
- *   sequentially, and the Apache API has no equivalent of realloc().
- * - Functions have been changed to get their parameters from the server
- *   configuration instead of globals.  (It should be reentrant now but has
- *   not been tested in a threaded environment.)
- * - Places where it used to print results to stdout now saves them in a
- *   list where they're used to set the MIME type in the Apache request
- *   record.
- * - Command-line flags have been removed since they will never be used here.
- *
- */
-</pre>
-<hr/><h2><a name="MimeMagicFile">MimeMagicFile</a> <a name="mimemagicfile">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Enable MIME-type determination based on file contents
-using the specified magic file</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>MimeMagicFile <em>file-path</em></syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_mime_magic</td></tr></table></td></tr></table><usage>
-    <p>The <code class="directive">MimeMagicFile</code> directive can be used to
-    enable this module, the default file is distributed at
-    <code>conf/magic</code>. Non-rooted paths are relative to the
-    ServerRoot. Virtual hosts will use the same file as the main
-    server unless a more specific setting is used, in which case
-    the more specific setting overrides the main server's file.</p>
-</usage><hr/><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img alt="Index" src="../images/index.gif"/></a><a href="../"><img alt="Home" src="../images/home.gif"/></a></blockquote></body></html>
\ No newline at end of file
diff --git a/docs/manual/mod/mod_mime_magic.xml b/docs/manual/mod/mod_mime_magic.xml
deleted file mode 100644
index 18f2215..0000000
--- a/docs/manual/mod/mod_mime_magic.xml
+++ /dev/null
@@ -1,304 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.xsl"?>
-<modulesynopsis>
-
-<name>mod_mime_magic</name>
-<description>Determines the MIME type of a file
-    by looking at a few bytes of its contents</description>
-<status>Extension</status>
-<sourcefile>mod_mime_magic.c</sourcefile>
-<identifier>mime_magic_module</identifier>
-
-<summary>
-    <p>This module determines the MIME type of files in the same
-    way the Unix file(1) command works: it looks at the first few
-    bytes of the file. It is intended as a "second line of defense"
-    for cases that <module>mod_mime</module> can't
-    resolve. To assure that mod_mime gets first try at determining
-    a file's MIME type, be sure to list mod_mime_magic
-    <strong>before</strong> mod_mime in the configuration.</p>
-
-    <p>This module is derived from a free version of the
-    <code>file(1)</code> command for Unix, which uses "magic
-    numbers" and other hints from a file's contents to figure out
-    what the contents are. This module is active only if the magic
-    file is specified by the <directive module="mod_mime_magic"
-    >MimeMagicFile</directive> directive.</p>
-</summary>
-
-<section><title>Format of the Magic File</title>
-
-    <p>The contents of the file are plain ASCII text in 4-5
-    columns. Blank lines are allowed but ignored. Commented lines
-    use a hash mark "#". The remaining lines are parsed for the
-    following columns:</p>
-
-    <table border="1">
-      <tr valign="top">
-        <th>Column</th>
-
-        <th>Description</th>
-      </tr>
-
-      <tr valign="top">
-        <td>1</td>
-
-        <td>byte number to begin checking from<br />
-         "&gt;" indicates a dependency upon the previous non-"&gt;"
-        line</td>
-      </tr>
-
-      <tr valign="top">
-        <td>2</td>
-
-        <td>
-          type of data to match 
-
-          <table border="1">
-            <tr>
-              <td>byte</td>
-
-              <td>single character</td>
-            </tr>
-
-            <tr>
-              <td>short</td>
-
-              <td>machine-order 16-bit integer</td>
-            </tr>
-
-            <tr>
-              <td>long</td>
-
-              <td>machine-order 32-bit integer</td>
-            </tr>
-
-            <tr>
-              <td>string</td>
-
-              <td>arbitrary-length string</td>
-            </tr>
-
-            <tr>
-              <td>date</td>
-
-              <td>long integer date (seconds since Unix
-              epoch/1970)</td>
-            </tr>
-
-            <tr>
-              <td>beshort</td>
-
-              <td>big-endian 16-bit integer</td>
-            </tr>
-
-            <tr>
-              <td>belong</td>
-
-              <td>big-endian 32-bit integer</td>
-            </tr>
-
-            <tr>
-              <td>bedate</td>
-
-              <td>big-endian 32-bit integer date</td>
-            </tr>
-
-            <tr>
-              <td>leshort</td>
-
-              <td>little-endian 16-bit integer</td>
-            </tr>
-
-            <tr>
-              <td>lelong</td>
-
-              <td>little-endian 32-bit integer</td>
-            </tr>
-
-            <tr>
-              <td>ledate</td>
-
-              <td>little-endian 32-bit integer date</td>
-            </tr>
-          </table>
-        </td>
-      </tr>
-
-      <tr valign="top">
-        <td>3</td>
-
-        <td>contents of data to match</td>
-      </tr>
-
-      <tr valign="top">
-        <td>4</td>
-
-        <td>MIME type if matched</td>
-      </tr>
-
-      <tr valign="top">
-        <td>5</td>
-
-        <td>MIME encoding if matched (optional)</td>
-      </tr>
-    </table>
-
-    <p>For example, the following magic file lines would recognize
-    some audio formats.</p>
-<example>
-<pre>
-# Sun/NeXT audio data
-0       string          .snd
-&gt;12     belong          1               audio/basic
-&gt;12     belong          2               audio/basic
-&gt;12     belong          3               audio/basic
-&gt;12     belong          4               audio/basic
-&gt;12     belong          5               audio/basic
-&gt;12     belong          6               audio/basic
-&gt;12     belong          7               audio/basic
-&gt;12     belong          23              audio/x-adpcm
-</pre>
-</example>
-    <p>Or these would recognize the difference between "*.doc" files
-    containing Microsoft Word or FrameMaker documents. (These are
-    incompatible file formats which use the same file suffix.)</p>
-<example>
-<pre>
-# Frame
-0       string          \&lt;MakerFile     application/x-frame
-0       string          \&lt;MIFFile       application/x-frame
-0       string          \&lt;MakerDictionary       application/x-frame
-0       string          \&lt;MakerScreenFon        application/x-frame
-0       string          \&lt;MML           application/x-frame
-0       string          \&lt;Book          application/x-frame
-0       string          \&lt;Maker         application/x-frame
-
-# MS-Word
-0       string          \376\067\0\043                  application/msword
-0       string          \320\317\021\340\241\261        application/msword
-0       string          \333\245-\0\0\0                 application/msword
-</pre>
-</example>
-    <p>An optional MIME encoding can be included as a fifth column.
-    For example, this can recognize gzipped files and set the
-    encoding for them.</p>
-<example>
-<pre>
-# gzip (GNU zip, not to be confused with [Info-ZIP/PKWARE] zip archiver)
-0       string          \037\213        application/octet-stream        x-gzip
-</pre>
-</example>
-</section>
-
-<section><title>Performance Issues</title>
-    <p>This module is not for every system. If your system is barely
-    keeping up with its load or if you're performing a web server
-    benchmark, you may not want to enable this because the
-    processing is not free.</p>
-
-    <p>However, an effort was made to improve the performance of
-    the original file(1) code to make it fit in a busy web server.
-    It was designed for a server where there are thousands of users
-    who publish their own documents. This is probably very common
-    on intranets. Many times, it's helpful if the server can make
-    more intelligent decisions about a file's contents than the
-    file name allows ...even if just to reduce the "why doesn't my
-    page work" calls when users improperly name their own files.
-    You have to decide if the extra work suits your
-    environment.</p>
-
-    <p>When compiling an Apache server, this module should be at or
-    near the top of the list of modules in the Configuration file.
-    The modules are listed in increasing priority so that will mean
-    this one is used only as a last resort, just like it was
-    designed to.</p>
-
-</section>
-
-<section id="notes"><title>Notes</title>
-
-    <p>The following notes apply to the mod_mime_magic module and are
-    included here for compliance with contributors' copyright
-    restrictions that require their acknowledgment. </p>
-<pre>
-/*
- * mod_mime_magic: MIME type lookup via file magic numbers
- * Copyright (c) 1996-1997 Cisco Systems, Inc.
- *
- * This software was submitted by Cisco Systems to the Apache Group in July
- * 1997.  Future revisions and derivatives of this source code must
- * acknowledge Cisco Systems as the original contributor of this module.
- * All other licensing and usage conditions are those of the Apache Group.
- *
- * Some of this code is derived from the free version of the file command
- * originally posted to comp.sources.unix.  Copyright info for that program
- * is included below as required.
- * ---------------------------------------------------------------------------
- * - Copyright (c) Ian F. Darwin, 1987. Written by Ian F. Darwin.
- *
- * This software is not subject to any license of the American Telephone and
- * Telegraph Company or of the Regents of the University of California.
- *
- * Permission is granted to anyone to use this software for any purpose on any
- * computer system, and to alter it and redistribute it freely, subject to
- * the following restrictions:
- *
- * 1. The author is not responsible for the consequences of use of this
- * software, no matter how awful, even if they arise from flaws in it.
- *
- * 2. The origin of this software must not be misrepresented, either by
- * explicit claim or by omission.  Since few users ever read sources, credits
- * must appear in the documentation.
- *
- * 3. Altered versions must be plainly marked as such, and must not be
- * misrepresented as being the original software.  Since few users ever read
- * sources, credits must appear in the documentation.
- *
- * 4. This notice may not be removed or altered.
- * -------------------------------------------------------------------------
- *
- * For compliance with Mr Darwin's terms: this has been very significantly
- * modified from the free "file" command.
- * - all-in-one file for compilation convenience when moving from one
- *   version of Apache to the next.
- * - Memory allocation is done through the Apache API's pool structure.
- * - All functions have had necessary Apache API request or server
- *   structures passed to them where necessary to call other Apache API
- *   routines.  (<em>i.e.</em>, usually for logging, files, or memory allocation in
- *   itself or a called function.)
- * - struct magic has been converted from an array to a single-ended linked
- *   list because it only grows one record at a time, it's only accessed
- *   sequentially, and the Apache API has no equivalent of realloc().
- * - Functions have been changed to get their parameters from the server
- *   configuration instead of globals.  (It should be reentrant now but has
- *   not been tested in a threaded environment.)
- * - Places where it used to print results to stdout now saves them in a
- *   list where they're used to set the MIME type in the Apache request
- *   record.
- * - Command-line flags have been removed since they will never be used here.
- *
- */
-</pre>
-</section>
-
-<directivesynopsis>
-<name>MimeMagicFile</name>
-<description>Enable MIME-type determination based on file contents
-using the specified magic file</description>
-<syntax>MimeMagicFile <em>file-path</em></syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context></contextlist>
-
-<usage>
-    <p>The <directive>MimeMagicFile</directive> directive can be used to
-    enable this module, the default file is distributed at
-    <code>conf/magic</code>. Non-rooted paths are relative to the
-    ServerRoot. Virtual hosts will use the same file as the main
-    server unless a more specific setting is used, in which case
-    the more specific setting overrides the main server's file.</p>
-</usage>
-</directivesynopsis>
-</modulesynopsis>
-
diff --git a/docs/manual/mod/mod_mmap_static.html b/docs/manual/mod/mod_mmap_static.html
deleted file mode 100644
index 2b2c9b3..0000000
--- a/docs/manual/mod/mod_mmap_static.html
+++ /dev/null
@@ -1,126 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta name="generator" content="HTML Tidy, see www.w3.org" />
-
-    <title>Apache module mod_mmap_static</title>
-  </head>
-  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-
-  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-  vlink="#000080" alink="#FF0000">
-    <!--#include virtual="header.html" -->
-
-    <h1 align="CENTER">Module mod_mmap_static</h1>
-
-    <p>This module provides mmap()ing of a statically configured
-    list of frequently requested but not changed files.</p>
-
-    <p><a href="module-dict.html#Status"
-    rel="Help"><strong>Status:</strong></a> Experimental<br />
-     <a href="module-dict.html#SourceFile"
-    rel="Help"><strong>Source File:</strong></a>
-    mod_mmap_static.c<br />
-     <a href="module-dict.html#ModuleIdentifier"
-    rel="Help"><strong>Module Identifier:</strong></a>
-    mmap_static_module</p>
-
-    <h2>Summary</h2>
-
-    <p>This is an <strong>experimental</strong> module and should
-    be used with care. You can easily create a broken site using
-    this module, read this document carefully.
-    <code>mod_mmap_static</code> maps a list of statically
-    configured files (via <code>MMapFile</code> directives in the
-    main server configuration) into memory through the system call
-    <code>mmap()</code>. This system call is available on most
-    modern Unix derivates, but not on all. There are sometimes
-    system-specific limits on the size and number of files that can
-    be mmap()d, experimentation is probably the easiest way to find
-    out.</p>
-
-    <p>This mmap()ing is done once at server start or restart,
-    only. So whenever one of the mapped files changes on the
-    filesystem you <em>have</em> to restart the server by at least
-    sending it a HUP or USR1 signal (see the <a
-    href="../stopping.html">Stopping and Restarting</a>
-    documentation). To reiterate that point: if the files are
-    modified <em>in place</em> without restarting the server you
-    may end up serving requests that are completely bogus. You
-    should update files by unlinking the old copy and putting a new
-    copy in place. Most tools such as <code>rdist</code> and
-    <code>mv</code> do this. The reason why this modules doesn't
-    take care of changes to the files is that this check would need
-    an extra <code>stat()</code> every time which is a waste and
-    against the intent of I/O reduction.</p>
-
-    <h2>Directives</h2>
-
-    <ul>
-      <li><a href="#mmapfile">MMapFile</a></li>
-    </ul>
-    <hr />
-
-    <h2><a id="mmapfile" name="mmapfile">MMapFile</a>
-    directive</h2>
-
-    <p><a href="directive-dict.html#Syntax"
-    rel="Help"><strong>Syntax:</strong></a> MMapFile
-    <em>filename</em> [<em>filename</em>] ...<br />
-     <a href="directive-dict.html#Default"
-    rel="Help"><strong>Default:</strong></a> <em>None</em><br />
-     <a href="directive-dict.html#Context"
-    rel="Help"><strong>Context:</strong></a> server-config<br />
-     <a href="directive-dict.html#Override"
-    rel="Help"><strong>Override:</strong></a> <em>Not
-    applicable</em><br />
-     <a href="directive-dict.html#Status"
-    rel="Help"><strong>Status:</strong></a> Experimental<br />
-     <a href="directive-dict.html#Module"
-    rel="Help"><strong>Module:</strong></a> mod_mmap_static<br />
-     <a href="directive-dict.html#Compatibility"
-    rel="Help"><strong>Compatibility:</strong></a> Only available
-    in Apache 1.3 or later</p>
-
-    <p>The <code>MMapFile</code> directive maps one or more files
-    (given as whitespace separated arguments) into memory at server
-    startup time. They are automatically unmapped on a server
-    shutdown. When the files have changed on the filesystem at
-    least a HUP or USR1 signal should be send to the server to
-    re-mmap them.</p>
-
-    <p>Be careful with the <em>filename</em> arguments: They have
-    to literally match the filesystem path Apache's URL-to-filename
-    translation handlers create. We cannot compare inodes or other
-    stuff to match paths through symbolic links <em>etc.</em>
-    because that again would cost extra <code>stat()</code> system
-    calls which is not acceptable. This module may or may not work
-    with filenames rewritten by <code>mod_alias</code> or
-    <code>mod_rewrite</code>... it is an experiment after all.</p>
-
-    <p>Notice: You cannot use this for speeding up CGI programs or
-    other files which are served by special content handlers. It
-    can only be used for regular files which are usually served by
-    the Apache core content handler.</p>
-    Example: 
-<pre>
-  MMapFile /usr/local/apache/htdocs/index.html
- 
-</pre>
-
-    <p><strong>Note</strong>: don't bother asking for a for a
-    <code>MMapDir</code> directive which recursively maps all the
-    files in a directory. Use Unix the way it was meant to be used.
-    For example, see the <a href="core.html#include">Include</a>
-    directive, and consider this command:</p>
-<pre>
-  find /www/htdocs -type f -print \
-  | sed -e 's/.*/mmapfile &amp;/' &gt; /www/conf/mmap.conf
- 
-</pre>
-    <!--#include virtual="footer.html" -->
-  </body>
-</html>
-
diff --git a/docs/manual/mod/mod_negotiation.html b/docs/manual/mod/mod_negotiation.html
deleted file mode 100644
index b7031ba..0000000
--- a/docs/manual/mod/mod_negotiation.html
+++ /dev/null
@@ -1,178 +0,0 @@
-<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-     This file is generated from xml source: DO NOT EDIT
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
---><title>mod_negotiation - Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img alt="[APACHE DOCUMENTATION]" src="../images/sub.gif"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module mod_negotiation</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td><description>Provides for <a href="../content-negotiation.html">content negotiation</a></description></td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="module-dict.html#ModuleIdentifier" class="help">Module&nbsp;Identifier:</a></td><td>negotiation_module</td></tr></table></td></tr></table><h2>Summary</h2><summary>
-    <p>Content negotiation, or more accurately content selection, is
-    the selection of the document that best matches the clients
-    capabilities, from one of several available documents. There
-    are two implementations of this.</p>
-
-    <ul>
-      <li>A type map (a file with the handler
-      <code>type-map</code>) which explicitly lists the files
-      containing the variants.</li>
-
-      <li>A MultiViews search (enabled by the MultiViews <a href="core.html.html#options" class="directive"><code class="directive">Options</code></a>, where the server does an
-      implicit filename pattern match, and choose from amongst the
-      results.</li>
-    </ul>
-</summary><p><strong>See also </strong></p><ul><li><a href="mod_mime.html#defaultlangauge" class="directive"><code class="directive">DefaultLangauge</code></a></li><li><a href="mod_mime.html#addencoding" class="directive"><code class="directive">AddEncoding</code></a></li><li><a href="mod_mime.html#addlanguage" class="directive"><code class="directive">AddLanguage</code></a></li><li><a href="mod_mime.html#addtype" class="directive"><code class="directive">AddType</code></a></li></ul><h2>Directives</h2><ul><li><a href="#cachenegotiateddocs">CacheNegotiatedDocs</a></li><li><a href="#forcelangaugepriority">ForceLangaugePriority</a></li><li><a href="#languagepriority">LanguagePriority</a></li></ul><h2>Type maps</h2>
-    <p>A type map has the same format as RFC822 mail headers. It
-    contains document descriptions separated by blank lines, with
-    lines beginning with a hash character ('#') treated as
-    comments. A document description consists of several header
-    records; records may be continued on multiple lines if the
-    continuation lines start with spaces. The leading space will be
-    deleted and the lines concatenated. A header record consists of
-    a keyword name, which always ends in a colon, followed by a
-    value. Whitespace is allowed between the header name and value,
-    and between the tokens of value. The headers allowed are: </p>
-
-    <dl>
-      <dt>Content-Encoding:</dt>
-
-      <dd>The encoding of the file. Apache only recognizes
-      encodings that are defined by an <a href="mod_mime.html#addencoding" class="directive"><code class="directive">AddEncoding</code></a> directive.
-      This normally includes the encodings <code>x-compress</code>
-      for compress'd files, and <code>x-gzip</code> for gzip'd
-      files. The <code>x-</code> prefix is ignored for encoding
-      comparisons.</dd>
-
-      <dt>Content-Language:</dt>
-
-      <dd>The language of the variant, as an Internet standard
-      language tag (RFC 1766). An example is <code>en</code>,
-      meaning English.</dd>
-
-      <dt>Content-Length:</dt>
-
-      <dd>The length of the file, in bytes. If this header is not
-      present, then the actual length of the file is used.</dd>
-
-      <dt>Content-Type:</dt>
-
-      <dd>
-        The MIME media type of the document, with optional
-        parameters. Parameters are separated from the media type
-        and from one another by a semi-colon, with a syntax of
-        <code>name=value</code>. Common parameters include: 
-
-        <dl>
-          <dt>level</dt>
-
-          <dd>an integer specifying the version of the media type.
-          For <code>text/html</code> this defaults to 2, otherwise
-          0.</dd>
-
-          <dt>qs</dt>
-
-          <dd>a floating-point number with a value in the range 0.0
-          to 1.0, indicating the relative 'quality' of this variant
-          compared to the other available variants, independent of
-          the client's capabilities. For example, a jpeg file is
-          usually of higher source quality than an ascii file if it
-          is attempting to represent a photograph. However, if the
-          resource being represented is ascii art, then an ascii
-          file would have a higher source quality than a jpeg file.
-          All qs values are therefore specific to a given
-          resource.</dd>
-        </dl>
-        Example: 
-
-        <blockquote>
-          <code>Content-Type: image/jpeg; qs=0.8</code>
-        </blockquote>
-      </dd>
-
-      <dt>URI:</dt>
-
-      <dd>The path to the file containing this variant, relative to
-      the map file.</dd>
-    </dl>
-<h2>MultiViews</h2>
-
-    <p>A MultiViews search is enabled by the MultiViews <a href="core.html#options" class="directive"><code class="directive">Options</code></a>. If the server receives a
-    request for <code>/some/dir/foo</code> and
-    <code>/some/dir/foo</code> does <em>not</em> exist, then the
-    server reads the directory looking for all files named
-    <code>foo.*</code>, and effectively fakes up a type map which
-    names all those files, assigning them the same media types and
-    content-encodings it would have if the client had asked for one
-    of them by name. It then chooses the best match to the client's
-    requirements, and returns that document.</p>
-<hr/><h2><a name="CacheNegotiatedDocs">CacheNegotiatedDocs</a> <a name="cachenegotiateddocs">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Allows content-negotiated documents to be 
-cached by proxy servers</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>CacheNegotiatedDocs on|off</syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>CacheNegotiatedDocs off</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_negotiation</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>The syntax changed in version 2.0.</td></tr></table></td></tr></table><usage>
-    <p>If set, this directive allows content-negotiated documents
-    to be cached by proxy servers. This could mean that clients
-    behind those proxys could retrieve versions of the documents
-    that are not the best match for their abilities, but it will
-    make caching more efficient.</p>
-
-    <p>This directive only applies to requests which come from
-    HTTP/1.0 browsers. HTTP/1.1 provides much better control over
-    the caching of negotiated documents, and this directive has no
-    effect in responses to HTTP/1.1 requests.</p>
-
-    <p>Prior to version 2.0,
-    <code class="directive">CacheNegotiatedDocs</code> did not take an
-    argument; it was turned on by the presence of the directive by
-    itself.</p>
-</usage><hr/><h2><a name="ForceLangaugePriority">ForceLangaugePriority</a> <a name="forcelangaugepriority">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Action to take if a single acceptable document is not 
-found</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>ForceLanguagePriority None|Prefer|Fallback [Prefer|Fallback]</syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>ForceLangaugePriority None</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>FileInfo</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_negotiation</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>Available in version 2.0.30 and later</td></tr></table></td></tr></table><usage>
-    <p>The <code class="directive">ForceLanguagePriority</code> directive uses
-    the given <a href="#languagepriority" class="directive"><code class="directive">LanguagePriority</code></a> to satisfy
-    negotation where the server could otherwise not return a single
-    matching document.</p>
-
-    <p><code>ForceLanguagePriority Prefer</code> uses
-    <code>LanguagePriority</code> to serve a one valid result, rather
-    than returning an HTTP result 300 (MULTIPLE CHOICES) when there
-    are several equally valid choices.  If the directives below were
-    given, and the user's Accept-Language header assigned en and de
-    each as quality .500 (equally acceptable) then then first matching
-    variant, en, will be served.</p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-      LanguagePriority en fr de<br>
-      ForceLanguagePriority Prefer
-</code></td></tr></table></blockquote>
-
-    <p><code>ForceLanguagePriority Fallback</code> uses
-    <code>LanguagePriority</code> to serve a valid result, rather than
-    returning an HTTP result 406 (NOT ACCEPTABLE).  If the directives
-    below were given, and the user's Accept-Language only permitted an
-    es langauge response, but such a variant isn't found, then the
-    first variant from the LanguagePriority list below will be
-    served.</p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-      LanguagePriority en fr de<br>
-      ForceLanguagePriority Fallback
-</code></td></tr></table></blockquote>
-
-    <p>Both options, Prefer and Fallback, may be specified, so either the
-    first matching variant from LanguagePriority will be served if more
-    that one variant is acceptable, or first available document will be
-    served if none of the variants matched the client's acceptable list of
-    languages.</p>
-</usage><hr/><h2><a name="LanguagePriority">LanguagePriority</a> <a name="languagepriority">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>The precendence of language variants for cases where
-the client does not express a preference</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>LanguagePriority <em>MIME-lang</em> [<em>MIME-lang</em>] ...</syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>FileInfo</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_negotiation</td></tr></table></td></tr></table><usage>
-    <p>The <code class="directive">LanguagePriority</code> sets the precedence
-    of language variants for the case where the client does not
-    express a preference, when handling a MultiViews request. The list
-    of <em>MIME-lang</em> are in order of decreasing preference.
-    Example:</p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>LanguagePriority en fr de</code></td></tr></table></blockquote>
-
-    <p>For a request for <code>foo.html</code>, where
-    <code>foo.html.fr</code> and <code>foo.html.de</code> both
-    existed, but the browser did not express a language preference,
-    then <code>foo.html.fr</code> would be returned.</p>
-
-    <p>Note that this directive only has an effect if a 'best'
-    language cannot be determined by any other means or the <a href="#forcelanguagepriority" class="directive"><code class="directive">ForceLanguagePriority</code></a> directive
-    is not <code>None</code>. Correctly implemented HTTP/1.1 requests
-    will mean this directive has no effect.</p>
-</usage><hr/><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img alt="Index" src="../images/index.gif"/></a><a href="../"><img alt="Home" src="../images/home.gif"/></a></blockquote></body></html>
\ No newline at end of file
diff --git a/docs/manual/mod/mod_negotiation.xml b/docs/manual/mod/mod_negotiation.xml
deleted file mode 100644
index 1290444..0000000
--- a/docs/manual/mod/mod_negotiation.xml
+++ /dev/null
@@ -1,243 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.xsl"?>
-<modulesynopsis>
-
-<name>mod_negotiation</name>
-<description>Provides for <a
-    href="../content-negotiation.html">content negotiation</a></description>
-<status>Base</status>
-<sourcefile>mod_negotiation.c</sourcefile>
-<identifier>negotiation_module</identifier>
-
-<summary>
-    <p>Content negotiation, or more accurately content selection, is
-    the selection of the document that best matches the clients
-    capabilities, from one of several available documents. There
-    are two implementations of this.</p>
-
-    <ul>
-      <li>A type map (a file with the handler
-      <code>type-map</code>) which explicitly lists the files
-      containing the variants.</li>
-
-      <li>A MultiViews search (enabled by the MultiViews <directive
-      module="core.html">Options</directive>, where the server does an
-      implicit filename pattern match, and choose from amongst the
-      results.</li>
-    </ul>
-</summary>
-
-<seealso><directive module="mod_mime">DefaultLangauge</directive></seealso>
-<seealso><directive module="mod_mime">AddEncoding</directive></seealso>
-<seealso><directive module="mod_mime">AddLanguage</directive></seealso>
-<seealso><directive module="mod_mime">AddType</directive></seealso>
-
-<section><title>Type maps</title>
-    <p>A type map has the same format as RFC822 mail headers. It
-    contains document descriptions separated by blank lines, with
-    lines beginning with a hash character ('#') treated as
-    comments. A document description consists of several header
-    records; records may be continued on multiple lines if the
-    continuation lines start with spaces. The leading space will be
-    deleted and the lines concatenated. A header record consists of
-    a keyword name, which always ends in a colon, followed by a
-    value. Whitespace is allowed between the header name and value,
-    and between the tokens of value. The headers allowed are: </p>
-
-    <dl>
-      <dt>Content-Encoding:</dt>
-
-      <dd>The encoding of the file. Apache only recognizes
-      encodings that are defined by an <directive
-      module="mod_mime">AddEncoding</directive> directive.
-      This normally includes the encodings <code>x-compress</code>
-      for compress'd files, and <code>x-gzip</code> for gzip'd
-      files. The <code>x-</code> prefix is ignored for encoding
-      comparisons.</dd>
-
-      <dt>Content-Language:</dt>
-
-      <dd>The language of the variant, as an Internet standard
-      language tag (RFC 1766). An example is <code>en</code>,
-      meaning English.</dd>
-
-      <dt>Content-Length:</dt>
-
-      <dd>The length of the file, in bytes. If this header is not
-      present, then the actual length of the file is used.</dd>
-
-      <dt>Content-Type:</dt>
-
-      <dd>
-        The MIME media type of the document, with optional
-        parameters. Parameters are separated from the media type
-        and from one another by a semi-colon, with a syntax of
-        <code>name=value</code>. Common parameters include: 
-
-        <dl>
-          <dt>level</dt>
-
-          <dd>an integer specifying the version of the media type.
-          For <code>text/html</code> this defaults to 2, otherwise
-          0.</dd>
-
-          <dt>qs</dt>
-
-          <dd>a floating-point number with a value in the range 0.0
-          to 1.0, indicating the relative 'quality' of this variant
-          compared to the other available variants, independent of
-          the client's capabilities. For example, a jpeg file is
-          usually of higher source quality than an ascii file if it
-          is attempting to represent a photograph. However, if the
-          resource being represented is ascii art, then an ascii
-          file would have a higher source quality than a jpeg file.
-          All qs values are therefore specific to a given
-          resource.</dd>
-        </dl>
-        Example: 
-
-        <blockquote>
-          <code>Content-Type: image/jpeg; qs=0.8</code>
-        </blockquote>
-      </dd>
-
-      <dt>URI:</dt>
-
-      <dd>The path to the file containing this variant, relative to
-      the map file.</dd>
-    </dl>
-</section>
-
-<section><title>MultiViews</title>
-
-    <p>A MultiViews search is enabled by the MultiViews <directive
-    module="core">Options</directive>. If the server receives a
-    request for <code>/some/dir/foo</code> and
-    <code>/some/dir/foo</code> does <em>not</em> exist, then the
-    server reads the directory looking for all files named
-    <code>foo.*</code>, and effectively fakes up a type map which
-    names all those files, assigning them the same media types and
-    content-encodings it would have if the client had asked for one
-    of them by name. It then chooses the best match to the client's
-    requirements, and returns that document.</p>
-</section>
-
-<directivesynopsis>
-<name>CacheNegotiatedDocs</name>
-<description>Allows content-negotiated documents to be 
-cached by proxy servers</description>
-<syntax>CacheNegotiatedDocs on|off</syntax>
-<default>CacheNegotiatedDocs off</default>
-<contextlist><context>server config</context></contextlist>
-<compatibility>The syntax changed in version 2.0.</compatibility>
-
-<usage>
-    <p>If set, this directive allows content-negotiated documents
-    to be cached by proxy servers. This could mean that clients
-    behind those proxys could retrieve versions of the documents
-    that are not the best match for their abilities, but it will
-    make caching more efficient.</p>
-
-    <p>This directive only applies to requests which come from
-    HTTP/1.0 browsers. HTTP/1.1 provides much better control over
-    the caching of negotiated documents, and this directive has no
-    effect in responses to HTTP/1.1 requests.</p>
-
-    <p>Prior to version 2.0,
-    <directive>CacheNegotiatedDocs</directive> did not take an
-    argument; it was turned on by the presence of the directive by
-    itself.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ForceLangaugePriority</name>
-<description>Action to take if a single acceptable document is not 
-found</description>
-<syntax>ForceLanguagePriority None|Prefer|Fallback [Prefer|Fallback]</syntax>
-<default>ForceLangaugePriority None</default>
-<contextlist><context>server config</context>
-<context>virtual host</context>
-<context>directory</context>
-<context>.htaccess</context>
-</contextlist>
-<override>FileInfo</override>
-<compatibility>Available in version 2.0.30 and later</compatibility>
-
-<usage>
-    <p>The <directive>ForceLanguagePriority</directive> directive uses
-    the given <directive
-    module="mod_negotiation">LanguagePriority</directive> to satisfy
-    negotation where the server could otherwise not return a single
-    matching document.</p>
-
-    <p><code>ForceLanguagePriority Prefer</code> uses
-    <code>LanguagePriority</code> to serve a one valid result, rather
-    than returning an HTTP result 300 (MULTIPLE CHOICES) when there
-    are several equally valid choices.  If the directives below were
-    given, and the user's Accept-Language header assigned en and de
-    each as quality .500 (equally acceptable) then then first matching
-    variant, en, will be served.</p>
-
-<example>
-      LanguagePriority en fr de<br />
-      ForceLanguagePriority Prefer
-</example>
-
-    <p><code>ForceLanguagePriority Fallback</code> uses
-    <code>LanguagePriority</code> to serve a valid result, rather than
-    returning an HTTP result 406 (NOT ACCEPTABLE).  If the directives
-    below were given, and the user's Accept-Language only permitted an
-    es langauge response, but such a variant isn't found, then the
-    first variant from the LanguagePriority list below will be
-    served.</p>
-
-<example>
-      LanguagePriority en fr de<br />
-      ForceLanguagePriority Fallback
-</example>
-
-    <p>Both options, Prefer and Fallback, may be specified, so either the
-    first matching variant from LanguagePriority will be served if more
-    that one variant is acceptable, or first available document will be
-    served if none of the variants matched the client's acceptable list of
-    languages.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>LanguagePriority</name>
-<description>The precendence of language variants for cases where
-the client does not express a preference</description>
-<syntax>LanguagePriority <em>MIME-lang</em> [<em>MIME-lang</em>] ...</syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context>
-<context>directory</context>
-<context>.htaccess</context>
-</contextlist>
-<override>FileInfo</override>
-
-<usage>
-    <p>The <directive>LanguagePriority</directive> sets the precedence
-    of language variants for the case where the client does not
-    express a preference, when handling a MultiViews request. The list
-    of <em>MIME-lang</em> are in order of decreasing preference.
-    Example:</p>
-
-<example>LanguagePriority en fr de</example>
-
-    <p>For a request for <code>foo.html</code>, where
-    <code>foo.html.fr</code> and <code>foo.html.de</code> both
-    existed, but the browser did not express a language preference,
-    then <code>foo.html.fr</code> would be returned.</p>
-
-    <p>Note that this directive only has an effect if a 'best'
-    language cannot be determined by any other means or the <directive
-    module="mod_negotiation">ForceLanguagePriority</directive> directive
-    is not <code>None</code>. Correctly implemented HTTP/1.1 requests
-    will mean this directive has no effect.</p>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
\ No newline at end of file
diff --git a/docs/manual/mod/mod_proxy.html b/docs/manual/mod/mod_proxy.html
deleted file mode 100644
index fd75bf0..0000000
--- a/docs/manual/mod/mod_proxy.html
+++ /dev/null
@@ -1,531 +0,0 @@
-<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-     This file is generated from xml source: DO NOT EDIT
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
---><title>mod_proxy - Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img alt="[APACHE DOCUMENTATION]" src="../images/sub.gif"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module mod_proxy</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td><description>HTTP/1.1 proxy/gateway server</description></td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="module-dict.html#ModuleIdentifier" class="help">Module&nbsp;Identifier:</a></td><td>proxy_module</td></tr></table></td></tr></table><h2>Summary</h2><summary>
-<blockquote><table><tr><td bgcolor="#ffe5f5"><p align="center"><strong>Warning</strong></p>
-This document has been updated to take into account changes
-made in the 2.0 version of the Apache HTTP Server.  Some of the
-information may still be inaccurate, please use it
-with care.
-</td></tr></table></blockquote>
-
-<p>This module implements a proxy/gateway for Apache. It implements
-proxying capability for
-<code>FTP</code>,
-<code>CONNECT</code> (for SSL),
-<code>HTTP/0.9</code>,
-<code>HTTP/1.0</code>, and
-<code>HTTP/1.1</code>.
-The module can be configured to connect to other proxy modules for these
-and other protocols.</p>
-
-<p>This module was experimental in Apache 1.1.x. Improvements and bugfixes
-were made in Apache v1.2.x and Apache v1.3.x, then the module underwent a major
-overhaul for Apache v2.0. The protocol support was upgraded to HTTP/1.1,
-and filter support was enabled.</p>
-
-<p>Please note that the <strong>caching</strong> function present in
-mod_proxy up to Apache v1.3.x has been <strong>removed</strong> from
-mod_proxy and will be incorporated into a new module, mod_cache.</p>
-</summary><h2>Directives</h2><ul><li><a href="#allowconnect">AllowCONNECT</a></li><li><a href="#noproxy">NoProxy</a></li><li><a href="#proxyblock">ProxyBlock</a></li><li><a href="#proxydomain">ProxyDomain</a></li><li><a href="#proxyerroroverride">ProxyErrorOverride</a></li><li><a href="#proxymaxforwards">ProxyMaxForwards</a></li><li><a href="#proxypass">ProxyPass</a></li><li><a href="#proxypassreverse">ProxyPassReverse</a></li><li><a href="#proxypreservehost">ProxyPreserveHost</a></li><li><a href="#proxyreceivebuffersize">ProxyReceiveBufferSize</a></li><li><a href="#proxyremote">ProxyRemote</a></li><li><a href="#proxyrequests">ProxyRequests</a></li><li><a href="#proxytimeout">ProxyTimeout</a></li><li><a href="#proxyvia">ProxyVia</a></li></ul><h2><a name="configs">Common configuration topics</a></h2>
-
-<ul>
-<li><a href="#forwardreverse">Forward and Reverse Proxies</a></li>
-<li><a href="#access">Controlling access to your proxy</a></li>
-<li><a href="#shortname">Using Netscape hostname shortcuts</a></li>
-<li><a href="#mimetypes">Why doesn't file type <em>xxx</em> download via FTP?</a></li>
-<li><a href="#type">How can I force an FTP ASCII download of File <em>xxx</em>?</a></li>
-<li><a href="#percent2fhack">How can I access FTP files outside of my home directory?</a></li>
-<li><a href="#ftppass">How can I hide the FTP cleartext password in my browser's URL line?</a></li>
-<li><a href="#startup">Why does Apache start more slowly when using the
-        proxy module?</a></li>
-
-<li><a href="#intranet">What other functions are useful for an intranet proxy server?</a></li>
-</ul>
-
-<h3><a name="forwardreverse">Forward and Reverse Proxies</a></h3>
-
-<p>Apache can be configured in both a <em>forward</em> and <em>reverse</em>
-proxy configuration.</p>
-
-<p>A <em>forward proxy</em> is an intermediate system that enables a browser to connect to a
-remote network to which it normally does not have access. A forward proxy
-can also be used to cache data, reducing load on the networks between the
-forward proxy and the remote webserver.</p>
-
-<p>Apache's mod_proxy can be figured to behave like a forward proxy
-using the <a href="#proxyremote" class="directive"><code class="directive">ProxyRemote</code></a>
-directive. In addition, caching of data can be achieved by configuring
-Apache <code><a href="mod_cache.html">mod_cache</a></code>. Other dedicated forward proxy
-packages include <a href="http://www.squid.org">Squid</a>.</p>
-
-<p>A <em>reverse proxy</em> is a webserver system that is capable of serving webpages
-sourced from other webservers - in addition to webpages on disk or generated
-dynamically by CGI - making these pages look like they originated at the
-reverse proxy.</p>
-
-<p>When configured with the mod_cache module the reverse
-proxy can act as a cache for slower backend webservers. The reverse proxy
-can also enable advanced URL strategies and management techniques, allowing
-webpages served using different webserver systems or architectures to
-coexist inside the same URL space. Reverse proxy systems are also ideal for
-implementing centralised logging websites with many or diverse website
-backends. Complex multi-tier webserver systems can be constructed using an
-Apache mod_proxy frontend and any number of backend webservers.</p>
-
-<p>The reverse proxy is configured using the
-<a href="#proxypass" class="directive"><code class="directive">ProxyPass</code></a> and <a href="#proxypassreverse" class="directive"><code class="directive">ProxyPassReverse</code></a> directives. Caching can be
-enabled using mod_cache as with the forward proxy.</p>
-
-
-
-<h3><a name="access">Controlling access to your proxy</a></h3>
-
-<p>You can control who can access your proxy via the normal <a href="core.html#directory" class="directive"><code class="directive">&lt;Directory&gt;</code></a>
-control block using the following example:</p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-&lt;Directory proxy:*&gt;<br>
-Order Deny,Allow<br>
-Deny from all<br>
-Allow from 192.168.0<br>
-&lt;/Directory&gt;
-</code></td></tr></table></blockquote>
-
-<p>A <a href="core.html#files" class="directive"><code class="directive">&lt;Files&gt;</code></a> block
-will also work, and is the only method known to work for all possible
-URLs in Apache versions earlier than 1.2b10.</p>
-
-<p>When configuring a reverse proxy, access control takes on the
-attributes of the normal server <a href="core.html#directory" class="directive"><code class="directive">&lt;directory&gt;</code></a> configuration.</p>
-
-
-
-
-
-
-<h3><a name="mimetypes">Why doesn't file type <em>xxx</em>
-download via FTP?</a></h3>
-
-<p>You probably don't have that particular file type defined as
-<em>application/octet-stream</em> in your proxy's mime.types configuration
-file. A useful line can be</p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-application/octet-stream        bin dms lha lzh exe class tgz taz
-</code></td></tr></table></blockquote>
-
-
-<h3><a name="type">How can I force an FTP ASCII download of
-File <em>xxx</em>?</a></h3>
-
-<p>In the rare situation where you must download a specific file using the FTP
-<strong>ASCII</strong> transfer method (while the default transfer is in
-<strong>binary</strong> mode), you can override mod_proxy's default by
-suffixing the request with <code>;type=a</code> to force an ASCII transfer.
-(FTP Directory listings are always executed in ASCII mode, however.)</p>
-
-
-<h3><a name="percent2fhck">How can I access FTP files outside
-of my home directory?</a></h3>
-
-<p>
-An FTP URI is interpreted relative to the home directory of the user
-who is logging in. Alas, to reach higher directory levels you cannot
-use /../, as the dots are interpreted by the browser and not actually
-sent to the FTP server. To address this problem, the so called "Squid
-%2f hack" was implemented in the Apache FTP proxy; it is is a solution
-which is also used by other popular proxy servers like the <a href="http://www.squid-cache.org/">Squid Proxy Cache</a>.  By
-prepending /%2f to the path of your request, you can make such a proxy
-change the FTP starting directory to / (instead of the home
-directory). </p> 
-
-<p><strong>Example:</strong> To retrieve the file
-<code>/etc/motd</code>, you would use the URL</p>
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>ftp://<em>user@host</em>/%2f/etc/motd</code></td></tr></table></blockquote>
-
-
-<h3><a name="ftppass">How can I hide the FTP cleartext password
-in my browser's URL line?</a></h3>
-
-<p>
-To log in to an FTP server by username and password, Apache
-uses different strategies.
-In absense of a user name and password in the URL altogether,
-Apache sends an anomymous login to the FTP server, i.e.,</p>
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-user: anonymous<br>
-password: apache_proxy@
-</code></td></tr></table></blockquote>
-<p>This works for all popular FTP servers which are configured for
-anonymous access.</p>
-
-<p>For a personal login with a specific username, you can embed
-the user name into the URL, like in:
-<code>ftp://<em>username@host</em>/myfile</code>. If the FTP server
-asks for a password when given this username (which it should),
-then Apache will reply with a [401 Authorization required] response,
-which causes the Browser to pop up the username/password dialog.
-Upon entering the password, the connection attempt is retried,
-and if successful, the requested resource is presented.
-The advantage of this procedure is that your browser does not
-display the password in cleartext (which it would if you had used
-<code>ftp://<em>username:password@host</em>/myfile</code> in
-the first place).</p>
-
-<blockquote><table><tr><td bgcolor="#e0e5f5"><p align="center"><strong>Note</strong></p>
-The password which is transmitted in such a way
-is not encrypted on its way. It travels between your browser and
-the Apache proxy server in a base64-encoded cleartext string, and
-between the Apache proxy and the FTP server as plaintext. You should
-therefore think twice before accessing your FTP server via HTTP
-(or before accessing your personal files via FTP at all!) When
-using unsecure channels, an eavesdropper might intercept your
-password on its way.
-</td></tr></table></blockquote>
-
-
-<h3><a name="startup">Why does Apache start more slowly when
-using the proxy module?</a></h3>
-
-<p>If you're using the <a href="#proxyblock" class="directive"><code class="directive">ProxyBlock</code></a>
-directive, hostnames' IP addresses are looked up and cached during
-startup for later match test. This may take a few seconds (or more)
-depending on the speed with which the hostname lookups occur.</p>
-
-
-
-
-<h3><a name="intranet">What other functions are useful for an
-intranet proxy server?</a></h3>
-
-<p>An Apache proxy server situated in an intranet needs to forward
-external requests through the company's firewall. However, when it has
-to access resources within the intranet, it can bypass the firewall
-when accessing hosts. The <a href="#noproxy" class="directive"><code class="directive">NoProxy</code></a> directive is useful for
-specifying which hosts belong to the intranet and should be accessed
-directly.</p>
-
-<p>Users within an intranet tend to omit the local domain name from their
-WWW requests, thus requesting "http://somehost/" instead of
-"http://somehost.my.dom.ain/". Some commercial proxy servers let them get
-away with this and simply serve the request, implying a configured
-local domain. When the <a href="#proxydomain" class="directive"><code class="directive">ProxyDomain</code></a> directive
-is used and the server is <a href="#proxyrequests">configured for
-proxy service</a>, Apache can return a redirect response and send the client
-to the correct, fully qualified, server address. This is the preferred method
-since the user's bookmark files will then contain fully qualified hosts.</p>
-
-
-<hr/><h2><a name="AllowCONNECT">AllowCONNECT</a> <a name="allowconnect">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td/></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>AllowCONNECT <em>port</em> [<em>port</em>] ...</syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>AllowCONNECT 443 563</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_proxy</td></tr></table></td></tr></table><usage>
-<p>The <code class="directive">AllowCONNECT</code> directive specifies a list
-of port numbers to which the proxy <code>CONNECT</code> method may
-connect.  Today's browsers use this method when a <em>https</em>
-connection is requested and proxy tunneling over <em>http</em> is in
-effect.<br> By default, only the default https port (443) and the
-default snews port (563) are enabled. Use the
-<code class="directive">AllowCONNECT</code> directive to overrride this default and
-allow connections to the listed ports only.</p>
-</usage><hr/><h2><a name="NoProxy">NoProxy</a> <a name="noproxy">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td/></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>NoProxy 
- <em>Domain</em>|
- <em>SubNet</em>|
- <em>IpAddr</em>| 
- <em>Hostname</em>
-[<em>Domain</em>| 
- <em>SubNet</em>|
- <em>IpAddr</em>| 
- <em>Hostname</em>] ...</syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_proxy</td></tr></table></td></tr></table><usage>
-<p>This directive is only useful for Apache proxy servers within
-intranets.  The <code class="directive">NoProxy</code> directive specifies a
-list of subnets, IP addresses, hosts and/or domains, separated by
-spaces. A request to a host which matches one or more of these is
-always served directly, without forwarding to the configured
-<a href="#proxyremote" class="directive"><code class="directive">ProxyRemote</code></a> proxy server(s).</p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><p align="center"><strong>Example</strong></p><code>
-  ProxyRemote  *  http://firewall.mycompany.com:81<br>
-  NoProxy         .mycompany.com 192.168.112.0/21 
-</code></td></tr></table></blockquote>
-
-<p>The arguments to the NoProxy directive are one of the following type list:</p>
-   <dl>
-    
-    <dt><a name="domain">
-    <em>Domain</em></a></dt>
-    <dd>A <em>Domain</em> is a partially qualified DNS domain name, preceded
-        by a period.
-        It represents a list of hosts which logically belong to the same DNS
-        domain or zone (<em>i.e.</em>, the suffixes of the hostnames are all ending in 
-        <em>Domain</em>).<br>
-		Examples: <code>.com</code>   <code>.apache.org.</code><br>
-        To distinguish <em>Domain</em>s from <a href="#hostname"><em>Hostname</em></a>s (both
-        syntactically and semantically; a DNS domain can have a DNS A record,
-        too!), <em>Domain</em>s are always written
-        with a leading period.<br>
-        Note: Domain name comparisons are done without regard to the case,
-        and <em>Domain</em>s are always assumed to be anchored in the root 
-        of the DNS tree, therefore two domains <code>.MyDomain.com</code> and
-        <code>.mydomain.com.</code> (note the trailing period) are
-        considered equal. Since a domain comparison does not involve a DNS
-	lookup, it is much more efficient than subnet comparison.</dd>
-
-    
-    <dt><a name="subnet">
-    <em>SubNet</em></a></dt>
-    <dd>A <em>SubNet</em> is a partially qualified internet address in
-        numeric (dotted quad) form, optionally followed by a slash and the
-        netmask, specified as the number of significant bits in the
-        <em>SubNet</em>. It is used to represent a subnet of hosts which can
-        be reached over a common network interface. In the absence of the
-        explicit net mask it is assumed that omitted (or zero valued)
-        trailing digits specify the mask. (In this case, the netmask can
-        only be multiples of 8 bits wide.)<br>
-        Examples:
-        <dl>
-         <dt><code>192.168</code> or <code>192.168.0.0</code></dt>
-         <dd>the subnet 192.168.0.0 with an implied netmask of 16 valid bits
-             (sometimes used in the netmask form <code>255.255.0.0</code>)</dd>
-         <dt><code>192.168.112.0/21</code></dt>
-         <dd>the subnet <code>192.168.112.0/21</code> with a netmask of 21
-             valid bits (also used in the form 255.255.248.0)</dd>
-        </dl>
-		As a degenerate case, a <em>SubNet</em> with 32 valid bits is the
-        equivalent to an <em>IPAddr</em>, while a <em>SubNet</em> with zero
-        valid bits (<em>e.g.</em>, 0.0.0.0/0) is the same as the constant
-        <em>_Default_</em>, matching any IP address. </dd>
-
-    
-    <dt><a name="ipaddr">
-    <em>IPAddr</em></a></dt>
-    <dd>A <em>IPAddr</em> represents a fully qualified internet address in
-        numeric (dotted quad) form. Usually, this address represents a
-        host, but there need not necessarily be a DNS domain name
-        connected with the address.<br>
-		Example: 192.168.123.7<br>
-        Note: An <em>IPAddr</em> does not need to be resolved by the DNS
-	system, so it can result in more effective apache performance.</dd>
-
-    
-    <dt><a name="hostname">
-    <em>Hostname</em></a></dt>
-    <dd>A <em>Hostname</em> is a fully qualified DNS domain name which can
-        be resolved to one or more <a href="#ipaddr"><em>IPAddrs</em></a> via the DNS domain name service. 
-        It represents a logical host (in contrast to
-	<a href="#domain"><em>Domain</em></a>s, see 
-        above) and must be resolvable to at least one <a href="#ipaddr"><em>IPAddr</em></a> (or often to a list of hosts
-	with different <a href="#ipaddr"><em>IPAddr</em></a>'s).<br> 
-		Examples: <code>prep.ai.mit.edu</code>
-                  <code>www.apache.org.</code><br>
-        Note: In many situations, it is more effective to specify an
-        <a href="#ipaddr"><em>IPAddr</em></a> in place of a
-	<em>Hostname</em> since a DNS lookup 
-        can be avoided. Name resolution in Apache can take a remarkable deal
-        of time when the connection to the name server uses a slow PPP
-        link.<br>
-        Note: <em>Hostname</em> comparisons are done without regard to the case,
-        and <em>Hostname</em>s are always assumed to be anchored in the root
-        of the DNS tree, therefore two hosts <code>WWW.MyDomain.com</code>
-        and <code>www.mydomain.com.</code> (note the trailing period) are
-        considered equal.</dd>
-</dl>
-</usage><p><strong>See also </strong></p><ul><li><a href="../dns-caveats.html">DNS Issues</a></li></ul><hr/><h2><a name="ProxyBlock">ProxyBlock</a> <a name="proxyblock">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td/></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>ProxyBlock *|<em>word|host|domain</em>
-[<em>word|host|domain</em>] ...</syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_proxy</td></tr></table></td></tr></table><usage>
-<p>The <code class="directive">ProxyBlock</code> directive specifies a list of
-words, hosts and/or domains, separated by spaces.  HTTP, HTTPS, and
-FTP document requests to sites whose names contain matched words,
-hosts or domains are <em>blocked</em> by the proxy server. The proxy
-module will also attempt to determine IP addresses of list items which
-may be hostnames during startup, and cache them for match test as
-well. Example:</p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-  ProxyBlock joes-garage.com some-host.co.uk rocky.wotsamattau.edu
-</code></td></tr></table></blockquote>
-
-<p>'rocky.wotsamattau.edu' would also be matched if referenced by IP
-address.</p>
-
-<p>Note that 'wotsamattau' would also be sufficient to match
-'wotsamattau.edu'.</p>
-
-<p>Note also that</p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-ProxyBlock *
-</code></td></tr></table></blockquote>
-
-<p>blocks connections to all sites.</p>
-
-</usage><hr/><h2><a name="ProxyDomain">ProxyDomain</a> <a name="proxydomain">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td/></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>ProxyDomain <em>Domain</em></syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_proxy</td></tr></table></td></tr></table><usage>
-<p>This directive is only useful for Apache proxy servers within
-intranets.  The <code class="directive">ProxyDomain</code> directive specifies
-the default domain which the apache proxy server will belong to. If a
-request to a host without a domain name is encountered, a redirection
-response to the same host with the configured <em>Domain</em> appended
-will be generated.</p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><p align="center"><strong>Example</strong></p><code>
-  ProxyRemote  *  http://firewall.mycompany.com:81<br>
-  NoProxy         .mycompany.com 192.168.112.0/21<br>
-  ProxyDomain     .mycompany.com
-</code></td></tr></table></blockquote>
-</usage><hr/><h2><a name="ProxyErrorOverride">ProxyErrorOverride</a> <a name="proxyerroroverride">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td/></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>ProxyErrorOverride On|Off</syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>ProxyErrorOverride Off</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_proxy</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>Available in version 2.0 and later</td></tr></table></td></tr></table><usage>
-<p>This directive is useful for reverse-proxy setups, where you want to 
-have a common look and feel on the error pages seen by the end user. 
-This also allows for included files (via mod_include's SSI) to get
-the error code and act accordingly (default behavior would display
-the error page of the proxied server, turning this on shows the SSI
-Error message).</p>
-</usage><hr/><h2><a name="ProxyMaxForwards">ProxyMaxForwards</a> <a name="proxymaxforwards">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td/></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>ProxyMaxForwards <em>number</em></syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>ProxyMaxForwards 10</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_proxy</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>Available in Apache 2.0 and later</td></tr></table></td></tr></table><usage>
-<p>The <code class="directive">ProxyMaxForwards</code> directive specifies the
-maximum number of proxies through which a request may pass. This is
-set to prevent infinite proxy loops, or a DoS attack.</p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><p align="center"><strong>Example</strong></p><code>
-  ProxyMaxForwards 10
-</code></td></tr></table></blockquote>
-</usage><hr/><h2><a name="ProxyPass">ProxyPass</a> <a name="proxypass">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td/></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>ProxyPass [<em>path</em>] !|<em>url</em></syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_proxy</td></tr></table></td></tr></table><usage>
-
-<p>This directive allows remote servers to be mapped into the space of
-the local server; the local server does not act as a proxy in the
-conventional sense, but appears to be a mirror of the remote
-server. <em>path</em> is the name of a local virtual path;
-<em>url</em> is a partial URL for the remote server.</p>
-
-<p>Suppose the local server has address <code>http://wibble.org/</code>; 
-then</p>
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-   ProxyPass /mirror/foo/ http://foo.com/
-</code></td></tr></table></blockquote>
-<p>will cause a local request for the
-&lt;<code>http://wibble.org/mirror/foo/bar</code>&gt; to be
-internally converted into a proxy request to
-&lt;<code>http://foo.com/bar</code>&gt;.</p>
-<p>
-The ! directive is useful in situations where you don't want to reverse-proxy
-a subdirectory. eg.</p>
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-        ProxyPass /mirror/foo/i !<br>
-        ProxyPass /mirror/foo http://foo.com
-</code></td></tr></table></blockquote>
-<p>will proxy all requests to /mirror/foo to foo.com EXCEPT requests made to /mirror/foo/i</p>
-
-<blockquote><table><tr><td bgcolor="#e0e5f5">NB: order is important. you need to put the exclusions BEFORE the general proxypass directive</td></tr></table></blockquote>
-</usage><hr/><h2><a name="ProxyPassReverse">ProxyPassReverse</a> <a name="proxypassreverse">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td/></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>ProxyPassReverse [<em>path</em>] <em>url</em></syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_proxy</td></tr></table></td></tr></table><usage>
-
-<p>This directive lets Apache adjust the URL in the <code>Location</code>,
-<code>Content-Location</code> and <code>URI</code> headers on
-HTTP redirect responses. This is essential when Apache is used as
-a reverse proxy to avoid by-passing the reverse proxy because of HTTP
-redirects on the backend servers which stay behind the reverse proxy.</p>
-
-<p><em>path</em> is the name of a local virtual path.<br>
-<em>url</em> is a partial URL for the remote server - the same way they are
-used for the <a href="#proxypass" class="directive"><code class="directive">ProxyPass</code></a> directive.</p>
-
-<p>
-Example:<br>
-Suppose the local server has address <code>http://wibble.org/</code>; then</p>
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-   ProxyPass         /mirror/foo/ http://foo.com/<br>
-   ProxyPassReverse  /mirror/foo/ http://foo.com/
-</code></td></tr></table></blockquote>
-<p>will not only cause a local request for the
-&lt;<code>http://wibble.org/mirror/foo/bar</code>&gt; to be internally
-converted into a proxy request to &lt;<code>http://foo.com/bar</code>&gt; (the
-functionality <code>ProxyPass</code> provides here). It also takes care of
-redirects the server foo.com sends: when <code>http://foo.com/bar</code> is
-redirected by him to <code>http://foo.com/quux</code> Apache adjusts this to
-<code>http://wibble.org/mirror/foo/quux</code> before forwarding the HTTP
-redirect response to the client. </p>
-<p>
-Note that this <code class="directive">ProxyPassReverse</code> directive can
-also be used in conjunction with the proxy pass-through feature
-("<code>RewriteRule ...  [P]</code>") from
-<code><a href="mod_rewrite.html">mod_rewrite</a></code> because its doesn't depend on a
-corresponding <a href="#proxypass" class="directive"><code class="directive">ProxyPass</code></a>
-directive.</p>
-</usage><hr/><h2><a name="ProxyPreserveHost">ProxyPreserveHost</a> <a name="proxypreservehost">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td/></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>ProxyPreserveHost on|off</syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>ProxyPreserveHost Off</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_proxy</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>Available in
-Apache 2.0.31 and later.</td></tr></table></td></tr></table><usage>
-<p>When enabled, this option will pass the Host: line from the
-incoming request to the proxied host, instead of the hostname
-specified in the proxypass line.
-</p>
-<p>This option should normally be turned 'off'.</p>
-</usage><hr/><h2><a name="ProxyReceiveBufferSize">ProxyReceiveBufferSize</a> <a name="proxyreceivebuffersize">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td/></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>ProxyReceiveBufferSize <em>bytes</em></syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_proxy</td></tr></table></td></tr></table><usage>
-<p>The <code class="directive">ProxyReceiveBufferSize</code> directive
-specifies an explicit network buffer size for outgoing HTTP and FTP
-connections, for increased throughput.  It has to be greater than 512
-or set to 0 to indicate that the system's default buffer size should
-be used.</p>
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><p align="center"><strong>Example</strong></p><code>
-  ProxyReceiveBufferSize 2048
-</code></td></tr></table></blockquote>
-</usage><hr/><h2><a name="ProxyRemote">ProxyRemote</a> <a name="proxyremote">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td/></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>ProxyRemote <em>match remote-server</em></syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_proxy</td></tr></table></td></tr></table><usage>
-<p>This defines remote proxies to this proxy. <em>match</em> is either the
-name of a URL-scheme that the remote server supports, or a partial URL
-for which the remote server should be used, or '*' to indicate the
-server should be contacted for all requests. <em>remote-server</em> is a
-partial URL for the remote server. Syntax:</p>
-
-<pre>
-  remote-server = protocol://hostname[:port]
-</pre>
-
-<p><em>protocol</em> is the protocol that should be used to communicate
-with the remote server; only "http" is supported by this module.</p>
-
-<p>
-Example:</p>
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-  ProxyRemote http://goodguys.com/ http://mirrorguys.com:8000<br>
-  ProxyRemote * http://cleversite.com<br>
-  ProxyRemote ftp http://ftpproxy.mydomain.com:8080
-</code></td></tr></table></blockquote>
-
-<p>In the last example, the proxy will forward FTP requests, encapsulated
-as yet another HTTP proxy request, to another proxy which can handle
-them.</p>
-
-<p>This option also supports reverse proxy configuration - a backend
-webserver can be embedded within a virtualhost URL space even if that
-server is hidden by another forward proxy.</p>
-</usage><hr/><h2><a name="ProxyRequests">ProxyRequests</a> <a name="proxyrequests">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td/></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>ProxyRequests on|off</syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>ProxyRequests Off</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_proxy</td></tr></table></td></tr></table><usage>
-<p>This allows or prevents Apache from functioning as a forward proxy
-server. (Setting ProxyRequests to 'off' does not disable use of the 
-<a href="#proxypass" class="directive"><code class="directive">ProxyPass</code></a> directive.)</p>
-
-<p>In a typical reverse proxy configuration, this option should be set to
-'off'.</p>
-</usage><hr/><h2><a name="ProxyTimeout">ProxyTimeout</a> <a name="proxytimeout">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td/></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>ProxyTimeout <em>seconds</em></syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>ProxyTimeout 300</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_proxy</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>Available in
-Apache 2.0.31 and later</td></tr></table></td></tr></table><usage>
-<p>This directive allows a user to specifiy a timeout on proxy requests.
-This is usefull when you have a slow/buggy appserver which hangs,
-and you would rather just return a timeout and fail gracefully instead
-of waiting however long it takes the server to return
-</p>
-</usage><hr/><h2><a name="ProxyVia">ProxyVia</a> <a name="proxyvia">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td/></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>ProxyVia on|off|full|block</syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>ProxyVia off</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_proxy</td></tr></table></td></tr></table><usage>
-<p>This directive controls the use of the <code>Via:</code> HTTP
-header by the proxy. Its intended use is to control the flow of of
-proxy requests along a chain of proxy servers.  See RFC2068 (HTTP/1.1)
-for an explanation of <code>Via:</code> header lines.</p>
-
-<ul> <li>If set
-to <em>off</em>, which is the default, no special processing is
-performed. If a request or reply contains a <code>Via:</code> header,
-it is passed through unchanged.</li>
-
-<li>If set to <em>on</em>, each
-request and reply will get a <code>Via:</code> header line added for
-the current host.</li>
-
-<li>If set to <em>full</em>, each generated <code>Via:</code> header
-line will additionally have the Apache server version shown as a
-<code>Via:</code> comment field.</li>
-
-<li>If set to <em>block</em>, every
-proxy request will have all its <code>Via:</code> header lines
-removed. No new <code>Via:</code> header will be generated.</li>
-</ul>
-</usage><hr/><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img alt="Index" src="../images/index.gif"/></a><a href="../"><img alt="Home" src="../images/home.gif"/></a></blockquote></body></html>
\ No newline at end of file
diff --git a/docs/manual/mod/mod_proxy.xml b/docs/manual/mod/mod_proxy.xml
deleted file mode 100644
index d4d7551..0000000
--- a/docs/manual/mod/mod_proxy.xml
+++ /dev/null
@@ -1,722 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.xsl"?>
-<modulesynopsis>
-
-<name>mod_proxy</name>
-<description>HTTP/1.1 proxy/gateway server</description>
-<status>Extension</status>
-<sourcefile>mod_proxy.c</sourcefile>
-<identifier>proxy_module</identifier>
-
-<summary>
-<note type="warning"><title>Warning</title>
-This document has been updated to take into account changes
-made in the 2.0 version of the Apache HTTP Server.  Some of the
-information may still be inaccurate, please use it
-with care.
-</note>
-
-<p>This module implements a proxy/gateway for Apache. It implements
-proxying capability for
-<code>FTP</code>,
-<code>CONNECT</code> (for SSL),
-<code>HTTP/0.9</code>,
-<code>HTTP/1.0</code>, and
-<code>HTTP/1.1</code>.
-The module can be configured to connect to other proxy modules for these
-and other protocols.</p>
-
-<p>This module was experimental in Apache 1.1.x. Improvements and bugfixes
-were made in Apache v1.2.x and Apache v1.3.x, then the module underwent a major
-overhaul for Apache v2.0. The protocol support was upgraded to HTTP/1.1,
-and filter support was enabled.</p>
-
-<p>Please note that the <strong>caching</strong> function present in
-mod_proxy up to Apache v1.3.x has been <strong>removed</strong> from
-mod_proxy and will be incorporated into a new module, mod_cache.</p>
-</summary>
-
-<section id="configs"><title>Common configuration topics</title>
-
-<ul>
-<li><a href="#forwardreverse">Forward and Reverse Proxies</a></li>
-<li><a href="#access">Controlling access to your proxy</a></li>
-<li><a href="#shortname">Using Netscape hostname shortcuts</a></li>
-<li><a href="#mimetypes">Why doesn't file type <em>xxx</em> download via FTP?</a></li>
-<li><a href="#type">How can I force an FTP ASCII download of File <em>xxx</em>?</a></li>
-<li><a href="#percent2fhack">How can I access FTP files outside of my home directory?</a></li>
-<li><a href="#ftppass">How can I hide the FTP cleartext password in my browser's URL line?</a></li>
-<li><a href="#startup">Why does Apache start more slowly when using the
-        proxy module?</a></li>
-<!--<li><a href="#socks">Can I use the Apache proxy module with my SOCKS proxy?</a>-->
-<li><a href="#intranet">What other functions are useful for an intranet proxy server?</a></li>
-</ul>
-
-<section id="forwardreverse"><title>Forward and Reverse Proxies</title>
-
-<p>Apache can be configured in both a <em>forward</em> and <em>reverse</em>
-proxy configuration.</p>
-
-<p>A <em>forward proxy</em> is an intermediate system that enables a browser to connect to a
-remote network to which it normally does not have access. A forward proxy
-can also be used to cache data, reducing load on the networks between the
-forward proxy and the remote webserver.</p>
-
-<p>Apache's mod_proxy can be figured to behave like a forward proxy
-using the <directive module="mod_proxy">ProxyRemote</directive>
-directive. In addition, caching of data can be achieved by configuring
-Apache <module>mod_cache</module>. Other dedicated forward proxy
-packages include <a href="http://www.squid.org">Squid</a>.</p>
-
-<p>A <em>reverse proxy</em> is a webserver system that is capable of serving webpages
-sourced from other webservers - in addition to webpages on disk or generated
-dynamically by CGI - making these pages look like they originated at the
-reverse proxy.</p>
-
-<p>When configured with the mod_cache module the reverse
-proxy can act as a cache for slower backend webservers. The reverse proxy
-can also enable advanced URL strategies and management techniques, allowing
-webpages served using different webserver systems or architectures to
-coexist inside the same URL space. Reverse proxy systems are also ideal for
-implementing centralised logging websites with many or diverse website
-backends. Complex multi-tier webserver systems can be constructed using an
-Apache mod_proxy frontend and any number of backend webservers.</p>
-
-<p>The reverse proxy is configured using the
-<directive module="mod_proxy">ProxyPass</directive> and <directive
-module="mod_proxy">ProxyPassReverse</directive> directives. Caching can be
-enabled using mod_cache as with the forward proxy.</p>
-
-</section>
-
-<section id="access"><title>Controlling access to your proxy</title>
-
-<p>You can control who can access your proxy via the normal <directive module="core" type="section">Directory</directive>
-control block using the following example:</p>
-
-<example>
-&lt;Directory proxy:*&gt;<br />
-Order Deny,Allow<br />
-Deny from all<br />
-Allow from 192.168.0<br />
-&lt;/Directory&gt;
-</example>
-
-<p>A <directive module="core" type="section">Files</directive> block
-will also work, and is the only method known to work for all possible
-URLs in Apache versions earlier than 1.2b10.</p>
-
-<p>When configuring a reverse proxy, access control takes on the
-attributes of the normal server <directive module="core"
-type="section">directory</directive> configuration.</p>
-
-
-<!--<h2><a name="shortname">Using Netscape hostname shortcuts</a></h2>
-
-There is an optional patch to the proxy module to allow Netscape-like
-hostname shortcuts to be used. It's available from the
-<a href="http://www.apache.org/dist/contrib/patches/1.2/netscapehost.patch"
-><code>contrib/patches/1.2</code></a> directory on the Apache Web
-site.<p>-->
-
-</section>
-
-<section id="mimetypes"><title>Why doesn't file type <em>xxx</em>
-download via FTP?</title>
-
-<p>You probably don't have that particular file type defined as
-<em>application/octet-stream</em> in your proxy's mime.types configuration
-file. A useful line can be</p>
-
-<example>
-application/octet-stream        bin dms lha lzh exe class tgz taz
-</example>
-</section>
-
-<section id="type"><title>How can I force an FTP ASCII download of
-File <em>xxx</em>?</title>
-
-<p>In the rare situation where you must download a specific file using the FTP
-<strong>ASCII</strong> transfer method (while the default transfer is in
-<strong>binary</strong> mode), you can override mod_proxy's default by
-suffixing the request with <code>;type=a</code> to force an ASCII transfer.
-(FTP Directory listings are always executed in ASCII mode, however.)</p>
-</section>
-
-<section id="percent2fhck"><title>How can I access FTP files outside
-of my home directory?</title>
-
-<p>
-An FTP URI is interpreted relative to the home directory of the user
-who is logging in. Alas, to reach higher directory levels you cannot
-use /../, as the dots are interpreted by the browser and not actually
-sent to the FTP server. To address this problem, the so called "Squid
-%2f hack" was implemented in the Apache FTP proxy; it is is a solution
-which is also used by other popular proxy servers like the <a
-href="http://www.squid-cache.org/">Squid Proxy Cache</a>.  By
-prepending /%2f to the path of your request, you can make such a proxy
-change the FTP starting directory to / (instead of the home
-directory). </p> 
-
-<p><strong>Example:</strong> To retrieve the file
-<code>/etc/motd</code>, you would use the URL</p>
-<example>ftp://<em>user@host</em>/%2f/etc/motd</example>
-</section>
-
-<section id="ftppass"><title>How can I hide the FTP cleartext password
-in my browser's URL line?</title>
-
-<p>
-To log in to an FTP server by username and password, Apache
-uses different strategies.
-In absense of a user name and password in the URL altogether,
-Apache sends an anomymous login to the FTP server, i.e.,</p>
-<example>
-user: anonymous<br />
-password: apache_proxy@
-</example>
-<p>This works for all popular FTP servers which are configured for
-anonymous access.</p>
-
-<p>For a personal login with a specific username, you can embed
-the user name into the URL, like in:
-<code>ftp://<em>username@host</em>/myfile</code>. If the FTP server
-asks for a password when given this username (which it should),
-then Apache will reply with a [401 Authorization required] response,
-which causes the Browser to pop up the username/password dialog.
-Upon entering the password, the connection attempt is retried,
-and if successful, the requested resource is presented.
-The advantage of this procedure is that your browser does not
-display the password in cleartext (which it would if you had used
-<code>ftp://<em>username:password@host</em>/myfile</code> in
-the first place).</p>
-
-<note><title>Note</title>
-The password which is transmitted in such a way
-is not encrypted on its way. It travels between your browser and
-the Apache proxy server in a base64-encoded cleartext string, and
-between the Apache proxy and the FTP server as plaintext. You should
-therefore think twice before accessing your FTP server via HTTP
-(or before accessing your personal files via FTP at all!) When
-using unsecure channels, an eavesdropper might intercept your
-password on its way.
-</note>
-</section>
-
-<section id="startup"><title>Why does Apache start more slowly when
-using the proxy module?</title>
-
-<p>If you're using the <directive module="mod_proxy">ProxyBlock</directive>
-directive, hostnames' IP addresses are looked up and cached during
-startup for later match test. This may take a few seconds (or more)
-depending on the speed with which the hostname lookups occur.</p>
-</section>
-
-<!--<h2><a name="socks">Can I use the Apache proxy module with my SOCKS proxy?</a></h2>
-
-Yes. Just build Apache with the rule <code>SOCKS4=yes</code> in your
-<em>Configuration</em> file, and follow the instructions there. SOCKS5
-capability can be added in a similar way (there's no <code>SOCKS5</code>
-rule yet), so use the <code>EXTRA_LDFLAGS</code> definition, or build Apache
-normally and run it with the <em>runsocks</em> wrapper provided with SOCKS5,
-if your OS supports dynamically linked libraries.<p>
-
-Some users have reported problems when using SOCKS version 4.2 on Solaris.
-The problem was solved by upgrading to SOCKS 4.3.<p>
-
-Remember that you'll also have to grant access to your Apache proxy machine by
-permitting connections on the appropriate ports in your SOCKS daemon's
-configuration.<p>
--->
-
-<section id="intranet"><title>What other functions are useful for an
-intranet proxy server?</title>
-
-<p>An Apache proxy server situated in an intranet needs to forward
-external requests through the company's firewall. However, when it has
-to access resources within the intranet, it can bypass the firewall
-when accessing hosts. The <directive
-module="mod_proxy">NoProxy</directive> directive is useful for
-specifying which hosts belong to the intranet and should be accessed
-directly.</p>
-
-<p>Users within an intranet tend to omit the local domain name from their
-WWW requests, thus requesting "http://somehost/" instead of
-"http://somehost.my.dom.ain/". Some commercial proxy servers let them get
-away with this and simply serve the request, implying a configured
-local domain. When the <directive module="mod_proxy">ProxyDomain</directive> directive
-is used and the server is <a href="#proxyrequests">configured for
-proxy service</a>, Apache can return a redirect response and send the client
-to the correct, fully qualified, server address. This is the preferred method
-since the user's bookmark files will then contain fully qualified hosts.</p>
-</section>
-
-</section>
-
-<directivesynopsis>
-<name>ProxyPreserveHost</name>
-<syntax>ProxyPreserveHost on|off</syntax>
-<default>ProxyPreserveHost Off</default>
-<contextlist><context>server config</context>
-<context>virtual host</context>
-</contextlist>
-<compatibility>Available in
-Apache 2.0.31 and later.</compatibility>
-
-<usage>
-<p>When enabled, this option will pass the Host: line from the
-incoming request to the proxied host, instead of the hostname
-specified in the proxypass line.
-</p>
-<p>This option should normally be turned 'off'.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ProxyRequests</name>
-<syntax>ProxyRequests on|off</syntax>
-<default>ProxyRequests Off</default>
-<contextlist><context>server config</context>
-<context>virtual host</context>
-</contextlist>
-
-<usage>
-<p>This allows or prevents Apache from functioning as a forward proxy
-server. (Setting ProxyRequests to 'off' does not disable use of the 
-<directive module="mod_proxy">ProxyPass</directive> directive.)</p>
-
-<p>In a typical reverse proxy configuration, this option should be set to
-'off'.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ProxyRemote</name>
-<syntax>ProxyRemote <em>match remote-server</em></syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context>
-</contextlist>
-
-<usage>
-<p>This defines remote proxies to this proxy. <em>match</em> is either the
-name of a URL-scheme that the remote server supports, or a partial URL
-for which the remote server should be used, or '*' to indicate the
-server should be contacted for all requests. <em>remote-server</em> is a
-partial URL for the remote server. Syntax:</p>
-
-<pre>
-  remote-server = protocol://hostname[:port]
-</pre>
-
-<p><em>protocol</em> is the protocol that should be used to communicate
-with the remote server; only "http" is supported by this module.</p>
-
-<p>
-Example:</p>
-<example>
-  ProxyRemote http://goodguys.com/ http://mirrorguys.com:8000<br />
-  ProxyRemote * http://cleversite.com<br />
-  ProxyRemote ftp http://ftpproxy.mydomain.com:8080
-</example>
-
-<p>In the last example, the proxy will forward FTP requests, encapsulated
-as yet another HTTP proxy request, to another proxy which can handle
-them.</p>
-
-<p>This option also supports reverse proxy configuration - a backend
-webserver can be embedded within a virtualhost URL space even if that
-server is hidden by another forward proxy.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ProxyPass</name>
-<syntax>ProxyPass [<em>path</em>] !|<em>url</em></syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context>
-</contextlist>
-
-<usage>
-<!-- XXX: Need to document that the path is not used when placed in
-a location section -->
-<p>This directive allows remote servers to be mapped into the space of
-the local server; the local server does not act as a proxy in the
-conventional sense, but appears to be a mirror of the remote
-server. <em>path</em> is the name of a local virtual path;
-<em>url</em> is a partial URL for the remote server.</p>
-
-<p>Suppose the local server has address <code>http://wibble.org/</code>; 
-then</p>
-<example>
-   ProxyPass /mirror/foo/ http://foo.com/
-</example>
-<p>will cause a local request for the
-&lt;<code>http://wibble.org/mirror/foo/bar</code>&gt; to be
-internally converted into a proxy request to
-&lt;<code>http://foo.com/bar</code>&gt;.</p>
-<p>
-The ! directive is useful in situations where you don't want to reverse-proxy
-a subdirectory. eg.</p>
-<example>
-        ProxyPass /mirror/foo/i !<br />
-        ProxyPass /mirror/foo http://foo.com
-</example>
-<p>will proxy all requests to /mirror/foo to foo.com EXCEPT requests made to /mirror/foo/i</p>
-
-<note>NB: order is important. you need to put the exclusions BEFORE the general proxypass directive</note>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ProxyPassReverse</name>
-<syntax>ProxyPassReverse [<em>path</em>] <em>url</em></syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context>
-</contextlist>
-
-<usage>
-<!-- XXX: Need to document that the path is not used when placed in
-a location section -->
-<p>This directive lets Apache adjust the URL in the <code>Location</code>,
-<code>Content-Location</code> and <code>URI</code> headers on
-HTTP redirect responses. This is essential when Apache is used as
-a reverse proxy to avoid by-passing the reverse proxy because of HTTP
-redirects on the backend servers which stay behind the reverse proxy.</p>
-
-<p><em>path</em> is the name of a local virtual path.<br />
-<em>url</em> is a partial URL for the remote server - the same way they are
-used for the <directive module="mod_proxy">ProxyPass</directive> directive.</p>
-
-<p>
-Example:<br />
-Suppose the local server has address <code>http://wibble.org/</code>; then</p>
-<example>
-   ProxyPass         /mirror/foo/ http://foo.com/<br />
-   ProxyPassReverse  /mirror/foo/ http://foo.com/
-</example>
-<p>will not only cause a local request for the
-&lt;<code>http://wibble.org/mirror/foo/bar</code>&gt; to be internally
-converted into a proxy request to &lt;<code>http://foo.com/bar</code>&gt; (the
-functionality <code>ProxyPass</code> provides here). It also takes care of
-redirects the server foo.com sends: when <code>http://foo.com/bar</code> is
-redirected by him to <code>http://foo.com/quux</code> Apache adjusts this to
-<code>http://wibble.org/mirror/foo/quux</code> before forwarding the HTTP
-redirect response to the client. </p>
-<p>
-Note that this <directive>ProxyPassReverse</directive> directive can
-also be used in conjunction with the proxy pass-through feature
-("<code>RewriteRule ...  [P]</code>") from
-<module>mod_rewrite</module> because its doesn't depend on a
-corresponding <directive module="mod_proxy">ProxyPass</directive>
-directive.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AllowCONNECT</name>
-<syntax>AllowCONNECT <em>port</em> [<em>port</em>] ...</syntax>
-<default>AllowCONNECT 443 563</default>
-<contextlist><context>server config</context>
-<context>virtual host</context>
-</contextlist>
-
-<usage>
-<p>The <directive>AllowCONNECT</directive> directive specifies a list
-of port numbers to which the proxy <code>CONNECT</code> method may
-connect.  Today's browsers use this method when a <em>https</em>
-connection is requested and proxy tunneling over <em>http</em> is in
-effect.<br /> By default, only the default https port (443) and the
-default snews port (563) are enabled. Use the
-<directive>AllowCONNECT</directive> directive to overrride this default and
-allow connections to the listed ports only.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ProxyBlock</name>
-<syntax>ProxyBlock *|<em>word|host|domain</em>
-[<em>word|host|domain</em>] ...</syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context>
-</contextlist>
-
-<usage>
-<p>The <directive>ProxyBlock</directive> directive specifies a list of
-words, hosts and/or domains, separated by spaces.  HTTP, HTTPS, and
-FTP document requests to sites whose names contain matched words,
-hosts or domains are <em>blocked</em> by the proxy server. The proxy
-module will also attempt to determine IP addresses of list items which
-may be hostnames during startup, and cache them for match test as
-well. Example:</p>
-
-<example>
-  ProxyBlock joes-garage.com some-host.co.uk rocky.wotsamattau.edu
-</example>
-
-<p>'rocky.wotsamattau.edu' would also be matched if referenced by IP
-address.</p>
-
-<p>Note that 'wotsamattau' would also be sufficient to match
-'wotsamattau.edu'.</p>
-
-<p>Note also that</p>
-
-<example>
-ProxyBlock *
-</example>
-
-<p>blocks connections to all sites.</p>
-
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ProxyReceiveBufferSize</name>
-<syntax>ProxyReceiveBufferSize <em>bytes</em></syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context>
-</contextlist>
-
-<usage>
-<p>The <directive>ProxyReceiveBufferSize</directive> directive
-specifies an explicit network buffer size for outgoing HTTP and FTP
-connections, for increased throughput.  It has to be greater than 512
-or set to 0 to indicate that the system's default buffer size should
-be used.</p>
-<example><title>Example</title>
-  ProxyReceiveBufferSize 2048
-</example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ProxyMaxForwards</name>
-<syntax>ProxyMaxForwards <em>number</em></syntax>
-<default>ProxyMaxForwards 10</default>
-<contextlist><context>server config</context>
-<context>virtual host</context>
-</contextlist>
-<compatibility>Available in Apache 2.0 and later</compatibility>
-
-<usage>
-<p>The <directive>ProxyMaxForwards</directive> directive specifies the
-maximum number of proxies through which a request may pass. This is
-set to prevent infinite proxy loops, or a DoS attack.</p>
-
-<example><title>Example</title>
-  ProxyMaxForwards 10
-</example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>NoProxy</name>
-<syntax>NoProxy 
- <em>Domain</em>|
- <em>SubNet</em>|
- <em>IpAddr</em>| 
- <em>Hostname</em>
-[<em>Domain</em>| 
- <em>SubNet</em>|
- <em>IpAddr</em>| 
- <em>Hostname</em>] ...</syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context>
-</contextlist>
-
-<usage>
-<p>This directive is only useful for Apache proxy servers within
-intranets.  The <directive>NoProxy</directive> directive specifies a
-list of subnets, IP addresses, hosts and/or domains, separated by
-spaces. A request to a host which matches one or more of these is
-always served directly, without forwarding to the configured
-<directive module="mod_proxy">ProxyRemote</directive> proxy server(s).</p>
-
-<example><title>Example</title>
-  ProxyRemote  *  http://firewall.mycompany.com:81<br />
-  NoProxy         .mycompany.com 192.168.112.0/21 
-</example>
-
-<p>The arguments to the NoProxy directive are one of the following type list:</p>
-   <dl>
-    <!-- ===================== Domain ======================= -->
-    <dt><a name="domain">
-    <em>Domain</em></a></dt>
-    <dd>A <em>Domain</em> is a partially qualified DNS domain name, preceded
-        by a period.
-        It represents a list of hosts which logically belong to the same DNS
-        domain or zone (<em>i.e.</em>, the suffixes of the hostnames are all ending in 
-        <em>Domain</em>).<br />
-		Examples: <code>.com</code>   <code>.apache.org.</code><br />
-        To distinguish <em>Domain</em>s from <a href="#hostname"><em>Hostname</em></a>s (both
-        syntactically and semantically; a DNS domain can have a DNS A record,
-        too!), <em>Domain</em>s are always written
-        with a leading period.<br />
-        Note: Domain name comparisons are done without regard to the case,
-        and <em>Domain</em>s are always assumed to be anchored in the root 
-        of the DNS tree, therefore two domains <code>.MyDomain.com</code> and
-        <code>.mydomain.com.</code> (note the trailing period) are
-        considered equal. Since a domain comparison does not involve a DNS
-	lookup, it is much more efficient than subnet comparison.</dd>
-
-    <!-- ===================== SubNet ======================= -->
-    <dt><a name="subnet">
-    <em>SubNet</em></a></dt>
-    <dd>A <em>SubNet</em> is a partially qualified internet address in
-        numeric (dotted quad) form, optionally followed by a slash and the
-        netmask, specified as the number of significant bits in the
-        <em>SubNet</em>. It is used to represent a subnet of hosts which can
-        be reached over a common network interface. In the absence of the
-        explicit net mask it is assumed that omitted (or zero valued)
-        trailing digits specify the mask. (In this case, the netmask can
-        only be multiples of 8 bits wide.)<br />
-        Examples:
-        <dl>
-         <dt><code>192.168</code> or <code>192.168.0.0</code></dt>
-         <dd>the subnet 192.168.0.0 with an implied netmask of 16 valid bits
-             (sometimes used in the netmask form <code>255.255.0.0</code>)</dd>
-         <dt><code>192.168.112.0/21</code></dt>
-         <dd>the subnet <code>192.168.112.0/21</code> with a netmask of 21
-             valid bits (also used in the form 255.255.248.0)</dd>
-        </dl>
-		As a degenerate case, a <em>SubNet</em> with 32 valid bits is the
-        equivalent to an <em>IPAddr</em>, while a <em>SubNet</em> with zero
-        valid bits (<em>e.g.</em>, 0.0.0.0/0) is the same as the constant
-        <em>_Default_</em>, matching any IP address. </dd>
-
-    <!-- ===================== IPAddr ======================= -->
-    <dt><a name="ipaddr">
-    <em>IPAddr</em></a></dt>
-    <dd>A <em>IPAddr</em> represents a fully qualified internet address in
-        numeric (dotted quad) form. Usually, this address represents a
-        host, but there need not necessarily be a DNS domain name
-        connected with the address.<br />
-		Example: 192.168.123.7<br />
-        Note: An <em>IPAddr</em> does not need to be resolved by the DNS
-	system, so it can result in more effective apache performance.</dd>
-
-    <!-- ===================== Hostname ======================= -->
-    <dt><a name="hostname">
-    <em>Hostname</em></a></dt>
-    <dd>A <em>Hostname</em> is a fully qualified DNS domain name which can
-        be resolved to one or more <a
-	href="#ipaddr"><em>IPAddrs</em></a> via the DNS domain name service. 
-        It represents a logical host (in contrast to
-	<a href="#domain"><em>Domain</em></a>s, see 
-        above) and must be resolvable to at least one <a
-	href="#ipaddr"><em>IPAddr</em></a> (or often to a list of hosts
-	with different <a href="#ipaddr"><em>IPAddr</em></a>'s).<br /> 
-		Examples: <code>prep.ai.mit.edu</code>
-                  <code>www.apache.org.</code><br />
-        Note: In many situations, it is more effective to specify an
-        <a href="#ipaddr"><em>IPAddr</em></a> in place of a
-	<em>Hostname</em> since a DNS lookup 
-        can be avoided. Name resolution in Apache can take a remarkable deal
-        of time when the connection to the name server uses a slow PPP
-        link.<br />
-        Note: <em>Hostname</em> comparisons are done without regard to the case,
-        and <em>Hostname</em>s are always assumed to be anchored in the root
-        of the DNS tree, therefore two hosts <code>WWW.MyDomain.com</code>
-        and <code>www.mydomain.com.</code> (note the trailing period) are
-        considered equal.</dd>
-</dl>
-</usage>
-<seealso><a href="../dns-caveats.html">DNS Issues</a></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ProxyTimeout</name>
-<syntax>ProxyTimeout <em>seconds</em></syntax>
-<default>ProxyTimeout 300</default>
-<contextlist><context>server config</context>
-<context>virtual host</context>
-</contextlist>
-<compatibility>Available in
-Apache 2.0.31 and later</compatibility>
-
-<usage>
-<p>This directive allows a user to specifiy a timeout on proxy requests.
-This is usefull when you have a slow/buggy appserver which hangs,
-and you would rather just return a timeout and fail gracefully instead
-of waiting however long it takes the server to return
-</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ProxyDomain</name>
-<syntax>ProxyDomain <em>Domain</em></syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context>
-</contextlist>
-
-<usage>
-<p>This directive is only useful for Apache proxy servers within
-intranets.  The <directive>ProxyDomain</directive> directive specifies
-the default domain which the apache proxy server will belong to. If a
-request to a host without a domain name is encountered, a redirection
-response to the same host with the configured <em>Domain</em> appended
-will be generated.</p>
-
-<example><title>Example</title>
-  ProxyRemote  *  http://firewall.mycompany.com:81<br />
-  NoProxy         .mycompany.com 192.168.112.0/21<br />
-  ProxyDomain     .mycompany.com
-</example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ProxyVia</name>
-<syntax>ProxyVia on|off|full|block</syntax>
-<default>ProxyVia off</default>
-<contextlist><context>server config</context>
-<context>virtual host</context>
-</contextlist>
-
-<usage>
-<p>This directive controls the use of the <code>Via:</code> HTTP
-header by the proxy. Its intended use is to control the flow of of
-proxy requests along a chain of proxy servers.  See RFC2068 (HTTP/1.1)
-for an explanation of <code>Via:</code> header lines.</p>
-
-<ul> <li>If set
-to <em>off</em>, which is the default, no special processing is
-performed. If a request or reply contains a <code>Via:</code> header,
-it is passed through unchanged.</li>
-
-<li>If set to <em>on</em>, each
-request and reply will get a <code>Via:</code> header line added for
-the current host.</li>
-
-<li>If set to <em>full</em>, each generated <code>Via:</code> header
-line will additionally have the Apache server version shown as a
-<code>Via:</code> comment field.</li>
-
-<li>If set to <em>block</em>, every
-proxy request will have all its <code>Via:</code> header lines
-removed. No new <code>Via:</code> header will be generated.</li>
-</ul>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ProxyErrorOverride</name>
-<syntax>ProxyErrorOverride On|Off</syntax>
-<default>ProxyErrorOverride Off</default>
-<contextlist><context>server config</context>
-<context>virtual host</context>
-</contextlist>
-<compatibility>Available in version 2.0 and later</compatibility>
-
-<usage>
-<p>This directive is useful for reverse-proxy setups, where you want to 
-have a common look and feel on the error pages seen by the end user. 
-This also allows for included files (via mod_include's SSI) to get
-the error code and act accordingly (default behavior would display
-the error page of the proxied server, turning this on shows the SSI
-Error message).</p>
-</usage>
-</directivesynopsis>
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_rewrite.html b/docs/manual/mod/mod_rewrite.html
deleted file mode 100644
index 15acb55..0000000
--- a/docs/manual/mod/mod_rewrite.html
+++ /dev/null
@@ -1,1649 +0,0 @@
-<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-     This file is generated from xml source: DO NOT EDIT
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
---><title>mod_rewrite - Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img alt="[APACHE DOCUMENTATION]" src="../images/sub.gif"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module mod_rewrite</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td><description>Provides a rule-based rewriting engine to rewrite requested
-URLs on the fly</description></td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="module-dict.html#ModuleIdentifier" class="help">Module&nbsp;Identifier:</a></td><td>rewrite_module</td></tr><tr><td align="left" valign="top"><a href="module-dict.html#Compatibility" class="help">Compatibility:</a></td><td><compatibility>Available in Apache 1.3 and later</compatibility></td></tr></table></td></tr></table><h2>Summary</h2><summary>
-      <blockquote>
-            <em>``The great thing about mod_rewrite is it gives you
-            all the configurability and flexibility of Sendmail.
-            The downside to mod_rewrite is that it gives you all
-            the configurability and flexibility of Sendmail.''</em>
-            
-
-            <div align="RIGHT">
-              -- Brian Behlendorf<br>
-               Apache Group
-            </div>
-      </blockquote>
-
-      <blockquote>
-            <em>`` Despite the tons of examples and docs,
-            mod_rewrite is voodoo. Damned cool voodoo, but still
-            voodoo. ''</em> 
-
-            <div align="RIGHT">
-              -- Brian Moore<br>
-               bem@news.cmc.net
-            </div>
-          </blockquote>
-
-
-      <p>Welcome to mod_rewrite, the Swiss Army Knife of URL
-      manipulation!</p>
-
-      <p>This module uses a rule-based rewriting engine (based on a
-      regular-expression parser) to rewrite requested URLs on the
-      fly. It supports an unlimited number of rules and an
-      unlimited number of attached rule conditions for each rule to
-      provide a really flexible and powerful URL manipulation
-      mechanism. The URL manipulations can depend on various tests,
-      for instance server variables, environment variables, HTTP
-      headers, time stamps and even external database lookups in
-      various formats can be used to achieve a really granular URL
-      matching.</p>
-
-      <p>This module operates on the full URLs (including the
-      path-info part) both in per-server context
-      (<code>httpd.conf</code>) and per-directory context
-      (<code>.htaccess</code>) and can even generate query-string
-      parts on result. The rewritten result can lead to internal
-      sub-processing, external request redirection or even to an
-      internal proxy throughput.</p>
-
-      <p>But all this functionality and flexibility has its
-      drawback: complexity. So don't expect to understand this
-      entire module in just one day.</p>
-
-      <p>This module was invented and originally written in April
-      1996 and gifted exclusively to the The Apache Group in July 1997
-      by</p>
-
-      <blockquote>
-        <a href="http://www.engelschall.com/"><code>Ralf S.
-        Engelschall</code></a><br>
-         <a href="mailto:rse@engelschall.com"><code>rse@engelschall.com</code></a><br>
-         <a href="http://www.engelschall.com/"><code>www.engelschall.com</code></a>
-      </blockquote>
-</summary><h2>Directives</h2><ul><li><a href="#rewritebase">RewriteBase</a></li><li><a href="#rewritecond">RewriteCond</a></li><li><a href="#rewriteengine">RewriteEngine</a></li><li><a href="#rewritelock">RewriteLock</a></li><li><a href="#rewritelog">RewriteLog</a></li><li><a href="#rewriteloglevel">RewriteLogLevel</a></li><li><a href="#rewritemap">RewriteMap</a></li><li><a href="#rewriteoptions">RewriteOptions</a></li><li><a href="#rewriterule">RewriteRule</a></li></ul><h2><a name="Internal">Interal Processing</a></h2>
-
-      <p>The internal processing of this module is very complex but
-      needs to be explained once even to the average user to avoid
-      common mistakes and to let you exploit its full
-      functionality.</p>
-
-<h3><a name="InternalAPI">API Phases</a></h3>
-
-      <p>First you have to understand that when Apache processes a
-      HTTP request it does this in phases. A hook for each of these
-      phases is provided by the Apache API. Mod_rewrite uses two of
-      these hooks: the URL-to-filename translation hook which is
-      used after the HTTP request has been read but before any
-      authorization starts and the Fixup hook which is triggered
-      after the authorization phases and after the per-directory
-      config files (<code>.htaccess</code>) have been read, but
-      before the content handler is activated.</p>
-
-      <p>So, after a request comes in and Apache has determined the
-      corresponding server (or virtual server) the rewriting engine
-      starts processing of all mod_rewrite directives from the
-      per-server configuration in the URL-to-filename phase. A few
-      steps later when the final data directories are found, the
-      per-directory configuration directives of mod_rewrite are
-      triggered in the Fixup phase. In both situations mod_rewrite
-      rewrites URLs either to new URLs or to filenames, although
-      there is no obvious distinction between them. This is a usage
-      of the API which was not intended to be this way when the API
-      was designed, but as of Apache 1.x this is the only way
-      mod_rewrite can operate. To make this point more clear
-      remember the following two points:</p>
-
-      <ol>
-        <li>Although mod_rewrite rewrites URLs to URLs, URLs to
-        filenames and even filenames to filenames, the API
-        currently provides only a URL-to-filename hook. In Apache
-        2.0 the two missing hooks will be added to make the
-        processing more clear. But this point has no drawbacks for
-        the user, it is just a fact which should be remembered:
-        Apache does more in the URL-to-filename hook than the API
-        intends for it.</li>
-
-        <li>
-          Unbelievably mod_rewrite provides URL manipulations in
-          per-directory context, <em>i.e.</em>, within
-          <code>.htaccess</code> files, although these are reached
-          a very long time after the URLs have been translated to
-          filenames. It has to be this way because
-          <code>.htaccess</code> files live in the filesystem, so
-          processing has already reached this stage. In other
-          words: According to the API phases at this time it is too
-          late for any URL manipulations. To overcome this chicken
-          and egg problem mod_rewrite uses a trick: When you
-          manipulate a URL/filename in per-directory context
-          mod_rewrite first rewrites the filename back to its
-          corresponding URL (which is usually impossible, but see
-          the <code>RewriteBase</code> directive below for the
-          trick to achieve this) and then initiates a new internal
-          sub-request with the new URL. This restarts processing of
-          the API phases. 
-
-          <p>Again mod_rewrite tries hard to make this complicated
-          step totally transparent to the user, but you should
-          remember here: While URL manipulations in per-server
-          context are really fast and efficient, per-directory
-          rewrites are slow and inefficient due to this chicken and
-          egg problem. But on the other hand this is the only way
-          mod_rewrite can provide (locally restricted) URL
-          manipulations to the average user.</p>
-        </li>
-      </ol>
-
-      <p>Don't forget these two points!</p>
-
-
-<h3><a name="InternalRuleset">Ruleset Processing</a></h3>
- 
-      <p>Now when mod_rewrite is triggered in these two API phases, it
-      reads the configured rulesets from its configuration
-      structure (which itself was either created on startup for
-      per-server context or during the directory walk of the Apache
-      kernel for per-directory context). Then the URL rewriting
-      engine is started with the contained ruleset (one or more
-      rules together with their conditions). The operation of the
-      URL rewriting engine itself is exactly the same for both
-      configuration contexts. Only the final result processing is
-      different. </p>
-
-      <p>The order of rules in the ruleset is important because the
-      rewriting engine processes them in a special (and not very
-      obvious) order. The rule is this: The rewriting engine loops
-      through the ruleset rule by rule (<a href="#rewriterule" class="directive"><code class="directive">RewriteRule</code></a> directives) and
-      when a particular rule matches it optionally loops through
-      existing corresponding conditions (<code>RewriteCond</code>
-      directives). For historical reasons the conditions are given
-      first, and so the control flow is a little bit long-winded. See
-      Figure 1 for more details.</p>
-
-      <div align="CENTER">
-        <table cellspacing="0" cellpadding="2" border="0">
-          <tr>
-            <td bgcolor="#CCCCCC"><img src="../images/mod_rewrite_fig1.gif" width="428" height="385" alt="[Needs graphics capability to display]"></td>
-          </tr>
-
-          <tr>
-            <td align="CENTER"><strong>Figure 1:</strong> The
-            control flow through the rewriting ruleset</td>
-          </tr>
-        </table>
-      </div>
-
-      <p>As you can see, first the URL is matched against the
-      <em>Pattern</em> of each rule. When it fails mod_rewrite
-      immediately stops processing this rule and continues with the
-      next rule. If the <em>Pattern</em> matches, mod_rewrite looks
-      for corresponding rule conditions. If none are present, it
-      just substitutes the URL with a new value which is
-      constructed from the string <em>Substitution</em> and goes on
-      with its rule-looping. But if conditions exist, it starts an
-      inner loop for processing them in the order that they are
-      listed. For conditions the logic is different: we don't match
-      a pattern against the current URL. Instead we first create a
-      string <em>TestString</em> by expanding variables,
-      back-references, map lookups, <em>etc.</em> and then we try
-      to match <em>CondPattern</em> against it. If the pattern
-      doesn't match, the complete set of conditions and the
-      corresponding rule fails. If the pattern matches, then the
-      next condition is processed until no more conditions are
-      available. If all conditions match, processing is continued
-      with the substitution of the URL with
-      <em>Substitution</em>.</p>
-
-
-
-<h3><a name="quoting">Quoting Special Characters</a></h3>
-
-      <p>As of Apache 1.3.20, special characters in
-      <i>TestString</i> and <i>Substitution</i> strings can be
-      escaped (that is, treated as normal characters without their
-      usual special meaning) by prefixing them with a slosh ('\')
-      character. In other words, you can include an actual
-      dollar-sign character in a <i>Substitution</i> string by
-      using '<code>\$</code>'; this keeps mod_rewrite from trying
-      to treat it as a backreference.</p>
-
-
-<h3><a name="InternalBackRefs">Regex Back-Reference Availability</a></h3>
-
-      <p>One important thing here has to be remembered: Whenever you
-      use parentheses in <em>Pattern</em> or in one of the
-      <em>CondPattern</em>, back-references are internally created
-      which can be used with the strings <code>$N</code> and
-      <code>%N</code> (see below). These are available for creating
-      the strings <em>Substitution</em> and <em>TestString</em>.
-      Figure 2 shows to which locations the back-references are
-      transfered for expansion.</p>
-
-      <div align="CENTER">
-        <table cellspacing="0" cellpadding="2" border="0">
-          <tr>
-            <td bgcolor="#CCCCCC"><img src="../images/mod_rewrite_fig2.gif" width="381" height="179" alt="[Needs graphics capability to display]"></td>
-          </tr>
-
-          <tr>
-            <td align="CENTER"><strong>Figure 2:</strong> The
-            back-reference flow through a rule</td>
-          </tr>
-        </table>
-      </div>
-
-      <p>We know this was a crash course on mod_rewrite's internal
-      processing. But you will benefit from this knowledge when
-      reading the following documentation of the available
-      directives.</p>
-
-
-<h2><a name="EnvVar">Environment Variables</a></h2>
-
-      <p>This module keeps track of two additional (non-standard)
-      CGI/SSI environment variables named <code>SCRIPT_URL</code>
-      and <code>SCRIPT_URI</code>. These contain the
-      <em>logical</em> Web-view to the current resource, while the
-      standard CGI/SSI variables <code>SCRIPT_NAME</code> and
-      <code>SCRIPT_FILENAME</code> contain the <em>physical</em>
-      System-view. </p>
-
-      <p>Notice: These variables hold the URI/URL <em>as they were
-      initially requested</em>, <em>i.e.</em>, <em>before</em> any
-      rewriting. This is important because the rewriting process is
-      primarily used to rewrite logical URLs to physical
-      pathnames.</p>
-
-      <p><strong>Example:</strong></p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-<pre>
-SCRIPT_NAME=/sw/lib/w3s/tree/global/u/rse/.www/index.html
-SCRIPT_FILENAME=/u/rse/.www/index.html
-SCRIPT_URL=/u/rse/
-SCRIPT_URI=http://en1.engelschall.com/u/rse/
-</pre>
-</code></td></tr></table></blockquote>
-
-<h2><a name="Solutions">Practical Solutions</a></h2>
-
-      <p>We also have an <a href="../misc/rewriteguide.html">URL
-      Rewriting Guide</a> available, which provides a collection of
-      practical solutions for URL-based problems. There you can
-      find real-life rulesets and additional information about
-      mod_rewrite.</p>
-<hr/><h2><a name="RewriteBase">RewriteBase</a> <a name="rewritebase">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sets the base URL for per-directory rewrites</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>RewriteBase <em>URL-path</em></syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>RewriteBase physical-directory-path</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>FileInfo</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_rewrite</td></tr></table></td></tr></table><usage>
-      <p>The <code class="directive">RewriteBase</code> directive explicitly
-      sets the base URL for per-directory rewrites. As you will see
-      below, <a href="#rewriterule" class="directive"><code class="directive">RewriteRule</code></a>
-      can be used in per-directory config files
-      (<code>.htaccess</code>). There it will act locally,
-      <em>i.e.</em>, the local directory prefix is stripped at this
-      stage of processing and your rewriting rules act only on the
-      remainder. At the end it is automatically added back to the
-      path.</p>
-
-      <p>When a substitution occurs for a new URL, this module has
-      to re-inject the URL into the server processing. To be able
-      to do this it needs to know what the corresponding URL-prefix
-      or URL-base is. By default this prefix is the corresponding
-      filepath itself. <strong>But at most websites URLs are NOT
-      directly related to physical filename paths, so this
-      assumption will usually be wrong!</strong> There you have to
-      use the <code>RewriteBase</code> directive to specify the
-      correct URL-prefix.</p>
-
-<blockquote><table><tr><td bgcolor="#e0e5f5"> If your webserver's URLs are <strong>not</strong> directly
-related to physical file paths, you have to use
-<code class="directive">RewriteBase</code> in every <code>.htaccess</code>
-files where you want to use <a href="#rewriterule" class="directive"><code class="directive">RewriteRule</code></a> directives.
-</td></tr></table></blockquote>
-
-        <p> For example, assume the following per-directory config file:</p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-<pre>
-#
-#  /abc/def/.htaccess -- per-dir config file for directory /abc/def
-#  Remember: /abc/def is the physical path of /xyz, <em>i.e.</em>, the server
-#            has a 'Alias /xyz /abc/def' directive <em>e.g.</em>
-#
-
-RewriteEngine On
-
-#  let the server know that we were reached via /xyz and not
-#  via the physical path prefix /abc/def
-RewriteBase   /xyz
-
-#  now the rewriting rules
-RewriteRule   ^oldstuff\.html$  newstuff.html
-</pre>
-</code></td></tr></table></blockquote>
-
-        <p>In the above example, a request to
-        <code>/xyz/oldstuff.html</code> gets correctly rewritten to
-        the physical file <code>/abc/def/newstuff.html</code>.</p>
-
-<blockquote><table><tr><td bgcolor="#e0e5f5"><p align="center"><strong>For Apache Hackers</strong></p>
-<p>The following list gives detailed information about
-              the internal processing steps:</p>
-<pre>
-<font size="-1">Request:
-  /xyz/oldstuff.html
-
-Internal Processing:
-  /xyz/oldstuff.html     -&gt; /abc/def/oldstuff.html  (per-server Alias)
-  /abc/def/oldstuff.html -&gt; /abc/def/newstuff.html  (per-dir    RewriteRule)
-  /abc/def/newstuff.html -&gt; /xyz/newstuff.html      (per-dir    RewriteBase)
-  /xyz/newstuff.html     -&gt; /abc/def/newstuff.html  (per-server Alias)
-
-Result:
-  /abc/def/newstuff.html
-</font>
-</pre>
-              <p><font size="-1">This seems very complicated but is
-              the correct Apache internal processing, because the
-              per-directory rewriting comes too late in the
-              process. So, when it occurs the (rewritten) request
-              has to be re-injected into the Apache kernel! BUT:
-              While this seems like a serious overhead, it really
-              isn't, because this re-injection happens fully
-              internally to the Apache server and the same
-              procedure is used by many other operations inside
-              Apache. So, you can be sure the design and
-              implementation is correct.</font></p>
-</td></tr></table></blockquote>
-
-</usage><hr/><h2><a name="RewriteCond">RewriteCond</a> <a name="rewritecond">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Defines a condition under which rewriting will take place
-</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax> RewriteCond
-      <em>TestString</em> <em>CondPattern</em></syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>None</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>FileInfo</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_rewrite</td></tr></table></td></tr></table><usage>
-      <p>The <code class="directive">RewriteCond</code> directive defines a
-      rule condition. Precede a <a href="#rewriterule" class="directive"><code class="directive">RewriteRule</code></a> directive with one
-      or more <code class="directive">RewriteCond</code> directives. The following
-      rewriting rule is only used if its pattern matches the current
-      state of the URI <strong>and</strong> if these additional
-      conditions apply too.</p>
-
-      <p><em>TestString</em> is a string which can contains the
-      following expanded constructs in addition to plain text:</p>
-
-      <ul>
-        <li>
-          <strong>RewriteRule backreferences</strong>: These are
-          backreferences of the form 
-
-          <blockquote>
-            <strong><code>$N</code></strong>
-          </blockquote>
-          (0 &lt;= N &lt;= 9) which provide access to the grouped
-          parts (parenthesis!) of the pattern from the
-          corresponding <code>RewriteRule</code> directive (the one
-          following the current bunch of <code>RewriteCond</code>
-          directives).
-        </li>
-
-        <li>
-          <strong>RewriteCond backreferences</strong>: These are
-          backreferences of the form 
-
-          <blockquote>
-            <strong><code>%N</code></strong>
-          </blockquote>
-          (1 &lt;= N &lt;= 9) which provide access to the grouped
-          parts (parentheses!) of the pattern from the last matched
-          <code>RewriteCond</code> directive in the current bunch
-          of conditions.
-        </li>
-
-        <li>
-          <strong>RewriteMap expansions</strong>: These are
-          expansions of the form 
-
-          <blockquote>
-            <strong><code>${mapname:key|default}</code></strong>
-          </blockquote>
-          See <a href="#mapfunc">the documentation for
-          RewriteMap</a> for more details.
-        </li>
-
-        <li>
-          <strong>Server-Variables</strong>: These are variables of
-          the form 
-
-          <blockquote>
-            <strong><code>%{</code> <em>NAME_OF_VARIABLE</em>
-            <code>}</code></strong>
-          </blockquote>
-          where <em>NAME_OF_VARIABLE</em> can be a string taken
-          from the following list: 
-
-          <table bgcolor="#F0F0F0" cellspacing="0" cellpadding="5">
-            <tr>
-              <td valign="TOP">
-                <strong>HTTP headers:</strong> 
-
-                <p><font size="-1">HTTP_USER_AGENT<br>
-                 HTTP_REFERER<br>
-                 HTTP_COOKIE<br>
-                 HTTP_FORWARDED<br>
-                 HTTP_HOST<br>
-                 HTTP_PROXY_CONNECTION<br>
-                 HTTP_ACCEPT<br>
-                </font></p>
-              </td>
-
-              <td valign="TOP">
-                <strong>connection &amp; request:</strong> 
-
-                <p><font size="-1">REMOTE_ADDR<br>
-                 REMOTE_HOST<br>
-                 REMOTE_USER<br>
-                 REMOTE_IDENT<br>
-                 REQUEST_METHOD<br>
-                 SCRIPT_FILENAME<br>
-                 PATH_INFO<br>
-                 QUERY_STRING<br>
-                 AUTH_TYPE<br>
-                </font></p>
-              </td>
-            </tr>
-
-            <tr>
-              <td valign="TOP">
-                <strong>server internals:</strong> 
-
-                <p><font size="-1">DOCUMENT_ROOT<br>
-                 SERVER_ADMIN<br>
-                 SERVER_NAME<br>
-                 SERVER_ADDR<br>
-                 SERVER_PORT<br>
-                 SERVER_PROTOCOL<br>
-                 SERVER_SOFTWARE<br>
-                </font></p>
-              </td>
-
-              <td valign="TOP">
-                <strong>system stuff:</strong> 
-
-                <p><font size="-1">TIME_YEAR<br>
-                 TIME_MON<br>
-                 TIME_DAY<br>
-                 TIME_HOUR<br>
-                 TIME_MIN<br>
-                 TIME_SEC<br>
-                 TIME_WDAY<br>
-                 TIME<br>
-                </font></p>
-              </td>
-
-              <td valign="TOP">
-                <strong>specials:</strong> 
-
-                <p><font size="-1">API_VERSION<br>
-                 THE_REQUEST<br>
-                 REQUEST_URI<br>
-                 REQUEST_FILENAME<br>
-                 IS_SUBREQ<br>
-                </font></p>
-              </td>
-            </tr>
-          </table>
-
-<blockquote><table><tr><td bgcolor="#e0e5f5">
-                <p>These variables all
-                correspond to the similarly named HTTP
-                MIME-headers, C variables of the Apache server or
-                <code>struct tm</code> fields of the Unix system.
-                Most are documented elsewhere in the Manual or in
-                the CGI specification. Those that are special to
-                mod_rewrite include:</p>
-
-                <dl>
-                  <dt><code>IS_SUBREQ</code></dt>
-
-                  <dd>Will contain the text "true" if the request
-                  currently being processed is a sub-request,
-                  "false" otherwise. Sub-requests may be generated
-                  by modules that need to resolve additional files
-                  or URIs in order to complete their tasks.</dd>
-
-                  <dt><code>API_VERSION</code></dt>
-
-                  <dd>This is the version of the Apache module API
-                  (the internal interface between server and
-                  module) in the current httpd build, as defined in
-                  include/ap_mmn.h. The module API version
-                  corresponds to the version of Apache in use (in
-                  the release version of Apache 1.3.14, for
-                  instance, it is 19990320:10), but is mainly of
-                  interest to module authors.</dd>
-
-                  <dt><code>THE_REQUEST</code></dt>
-
-                  <dd>The full HTTP request line sent by the
-                  browser to the server (e.g., "<code>GET
-                  /index.html HTTP/1.1</code>"). This does not
-                  include any additional headers sent by the
-                  browser.</dd>
-
-                  <dt><code>REQUEST_URI</code></dt>
-
-                  <dd>The resource requested in the HTTP request
-                  line. (In the example above, this would be
-                  "/index.html".)</dd>
-
-                  <dt><code>REQUEST_FILENAME</code></dt>
-
-                  <dd>The full local filesystem path to the file or
-                  script matching the request.</dd>
-                </dl>
-</td></tr></table></blockquote>
-        </li>
-      </ul>
-
-      <p>Special Notes:</p>
-
-      <ol>
-        <li>The variables SCRIPT_FILENAME and REQUEST_FILENAME
-        contain the same value, <em>i.e.</em>, the value of the
-        <code>filename</code> field of the internal
-        <code>request_rec</code> structure of the Apache server.
-        The first name is just the commonly known CGI variable name
-        while the second is the consistent counterpart to
-        REQUEST_URI (which contains the value of the
-        <code>uri</code> field of <code>request_rec</code>).</li>
-
-        <li>There is the special format:
-        <code>%{ENV:variable}</code> where <em>variable</em> can be
-        any environment variable. This is looked-up via internal
-        Apache structures and (if not found there) via
-        <code>getenv()</code> from the Apache server process.</li>
-
-        <li>There is the special format:
-        <code>%{HTTP:header}</code> where <em>header</em> can be
-        any HTTP MIME-header name. This is looked-up from the HTTP
-        request. Example: <code>%{HTTP:Proxy-Connection}</code> is
-        the value of the HTTP header
-        ``<code>Proxy-Connection:</code>''.</li>
-
-        <li>There is the special format
-        <code>%{LA-U:variable}</code> for look-aheads which perform
-        an internal (URL-based) sub-request to determine the final
-        value of <em>variable</em>. Use this when you want to use a
-        variable for rewriting which is actually set later in an
-        API phase and thus is not available at the current stage.
-        For instance when you want to rewrite according to the
-        <code>REMOTE_USER</code> variable from within the
-        per-server context (<code>httpd.conf</code> file) you have
-        to use <code>%{LA-U:REMOTE_USER}</code> because this
-        variable is set by the authorization phases which come
-        <em>after</em> the URL translation phase where mod_rewrite
-        operates. On the other hand, because mod_rewrite implements
-        its per-directory context (<code>.htaccess</code> file) via
-        the Fixup phase of the API and because the authorization
-        phases come <em>before</em> this phase, you just can use
-        <code>%{REMOTE_USER}</code> there.</li>
-
-        <li>There is the special format:
-        <code>%{LA-F:variable}</code> which performs an internal
-        (filename-based) sub-request to determine the final value
-        of <em>variable</em>. Most of the time this is the same as
-        LA-U above.</li>
-      </ol>
-
-      <p><em>CondPattern</em> is the condition pattern,
-      <em>i.e.</em>, a regular expression which is applied to the
-      current instance of the <em>TestString</em>, <em>i.e.</em>,
-      <em>TestString</em> is evaluated and then matched against
-      <em>CondPattern</em>.</p>
-
-      <p><strong>Remember:</strong> <em>CondPattern</em> is a
-      standard <em>Extended Regular Expression</em> with some
-      additions:</p>
-
-      <ol>
-        <li>You can prefix the pattern string with a
-        '<code>!</code>' character (exclamation mark) to specify a
-        <strong>non</strong>-matching pattern.</li>
-
-        <li>
-          There are some special variants of <em>CondPatterns</em>.
-          Instead of real regular expression strings you can also
-          use one of the following: 
-
-          <ul>
-            <li>'<strong>&lt;CondPattern</strong>' (is lexically
-            lower)<br>
-             Treats the <em>CondPattern</em> as a plain string and
-            compares it lexically to <em>TestString</em>. True if
-            <em>TestString</em> is lexically lower than
-            <em>CondPattern</em>.</li>
-
-            <li>'<strong>&gt;CondPattern</strong>' (is lexically
-            greater)<br>
-             Treats the <em>CondPattern</em> as a plain string and
-            compares it lexically to <em>TestString</em>. True if
-            <em>TestString</em> is lexically greater than
-            <em>CondPattern</em>.</li>
-
-            <li>'<strong>=CondPattern</strong>' (is lexically
-            equal)<br>
-             Treats the <em>CondPattern</em> as a plain string and
-            compares it lexically to <em>TestString</em>. True if
-            <em>TestString</em> is lexically equal to
-            <em>CondPattern</em>, i.e the two strings are exactly
-            equal (character by character). If <em>CondPattern</em>
-            is just <samp>""</samp> (two quotation marks) this
-            compares <em>TestString</em> to the empty string.</li>
-
-            <li>'<strong>-d</strong>' (is
-            <strong>d</strong>irectory)<br>
-             Treats the <em>TestString</em> as a pathname and tests
-            if it exists and is a directory.</li>
-
-            <li>'<strong>-f</strong>' (is regular
-            <strong>f</strong>ile)<br>
-             Treats the <em>TestString</em> as a pathname and tests
-            if it exists and is a regular file.</li>
-
-            <li>'<strong>-s</strong>' (is regular file with
-            <strong>s</strong>ize)<br>
-             Treats the <em>TestString</em> as a pathname and tests
-            if it exists and is a regular file with size greater
-            than zero.</li>
-
-            <li>'<strong>-l</strong>' (is symbolic
-            <strong>l</strong>ink)<br>
-             Treats the <em>TestString</em> as a pathname and tests
-            if it exists and is a symbolic link.</li>
-
-            <li>'<strong>-F</strong>' (is existing file via
-            subrequest)<br>
-             Checks if <em>TestString</em> is a valid file and
-            accessible via all the server's currently-configured
-            access controls for that path. This uses an internal
-            subrequest to determine the check, so use it with care
-            because it decreases your servers performance!</li>
-
-            <li>'<strong>-U</strong>' (is existing URL via
-            subrequest)<br>
-             Checks if <em>TestString</em> is a valid URL and
-            accessible via all the server's currently-configured
-            access controls for that path. This uses an internal
-            subrequest to determine the check, so use it with care
-            because it decreases your server's performance!</li>
-          </ul>
-
-<blockquote><table><tr><td bgcolor="#e0e5f5"><p align="center"><strong>Notice</strong></p>
-              All of these tests can
-              also be prefixed by an exclamation mark ('!') to
-              negate their meaning.
-</td></tr></table></blockquote>
-        </li>
-      </ol>
-
-      <p>Additionally you can set special flags for
-      <em>CondPattern</em> by appending</p>
-
-      <blockquote>
-        <strong><code>[</code><em>flags</em><code>]</code></strong>
-      </blockquote>
-      as the third argument to the <code>RewriteCond</code>
-      directive. <em>Flags</em> is a comma-separated list of the
-      following flags: 
-
-      <ul>
-        <li>'<strong><code>nocase|NC</code></strong>'
-        (<strong>n</strong>o <strong>c</strong>ase)<br>
-         This makes the test case-insensitive, <em>i.e.</em>, there
-        is no difference between 'A-Z' and 'a-z' both in the
-        expanded <em>TestString</em> and the <em>CondPattern</em>.
-        This flag is effective only for comparisons between
-        <em>TestString</em> and <em>CondPattern</em>. It has no
-        effect on filesystem and subrequest checks.</li>
-
-        <li>
-          '<strong><code>ornext|OR</code></strong>'
-          (<strong>or</strong> next condition)<br>
-           Use this to combine rule conditions with a local OR
-          instead of the implicit AND. Typical example: 
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-<pre>
-RewriteCond %{REMOTE_HOST}  ^host1.*  [OR]
-RewriteCond %{REMOTE_HOST}  ^host2.*  [OR]
-RewriteCond %{REMOTE_HOST}  ^host3.*
-RewriteRule ...some special stuff for any of these hosts...
-</pre>
-</code></td></tr></table></blockquote>
-
-          Without this flag you would have to write the cond/rule
-          three times.
-        </li>
-      </ul>
-
-      <p><strong>Example:</strong></p>
-
-       <p>To rewrite the Homepage of a site according to the
-        ``<code>User-Agent:</code>'' header of the request, you can
-        use the following: </p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-<pre>
-RewriteCond  %{HTTP_USER_AGENT}  ^Mozilla.*
-RewriteRule  ^/$                 /homepage.max.html  [L]
-
-RewriteCond  %{HTTP_USER_AGENT}  ^Lynx.*
-RewriteRule  ^/$                 /homepage.min.html  [L]
-
-RewriteRule  ^/$                 /homepage.std.html  [L]
-</pre>
-</code></td></tr></table></blockquote>
-
-        <p>Interpretation: If you use Netscape Navigator as your
-        browser (which identifies itself as 'Mozilla'), then you
-        get the max homepage, which includes Frames, <em>etc.</em>
-        If you use the Lynx browser (which is Terminal-based), then
-        you get the min homepage, which contains no images, no
-        tables, <em>etc.</em> If you use any other browser you get
-        the standard homepage.</p>
-
-</usage><hr/><h2><a name="RewriteEngine">RewriteEngine</a> <a name="rewriteengine">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td/></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>RewriteEngine on|off</syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>RewriteEngine off</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>FileInfo</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_rewrite</td></tr></table></td></tr></table><usage>       
-
-      <p>The <code class="directive">RewriteEngine</code> directive enables or
-      disables the runtime rewriting engine. If it is set to
-      <code>off</code> this module does no runtime processing at
-      all. It does not even update the <code>SCRIPT_URx</code>
-      environment variables.</p>
-
-      <p>Use this directive to disable the module instead of
-      commenting out all the <a href="#rewriterule" class="directive"><code class="directive">RewriteRule</code></a> directives!</p>
-
-      <p>Note that, by default, rewrite configurations are not
-      inherited. This means that you need to have a
-      <code>RewriteEngine on</code> directive for each virtual host
-      in which you wish to use it.</p>
-</usage><hr/><h2><a name="RewriteLock">RewriteLock</a> <a name="rewritelock">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sets the name of the lock file used for RewriteMap
-synchronization</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>RewriteLock <em>file-path</em></syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>None</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_rewrite</td></tr></table></td></tr></table><usage>
-      <p>This directive sets the filename for a synchronization
-      lockfile which mod_rewrite needs to communicate with <a href="#rewritemap" class="directive"><code class="directive">RewriteMap</code></a>
-      <em>programs</em>. Set this lockfile to a local path (not on a
-      NFS-mounted device) when you want to use a rewriting
-      map-program. It is not required for other types of rewriting
-      maps.</p>
-</usage><hr/><h2><a name="RewriteLog">RewriteLog</a> <a name="rewritelog">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sets the name of the file used for logging rewrite engine
-processing</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>RewriteLog <em>file-path</em></syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_rewrite</td></tr></table></td></tr></table><usage>
-      <p>The <code class="directive">RewriteLog</code> directive sets the name
-      of the file to which the server logs any rewriting actions it
-      performs. If the name does not begin with a slash
-      ('<code>/</code>') then it is assumed to be relative to the
-      <em>Server Root</em>. The directive should occur only once per
-      server config.</p>
-
-<blockquote><table><tr><td bgcolor="#e0e5f5">    To disable the logging of
-          rewriting actions it is not recommended to set
-          <em>Filename</em> to <code>/dev/null</code>, because
-          although the rewriting engine does not then output to a
-          logfile it still creates the logfile output internally.
-          <strong>This will slow down the server with no advantage
-          to the administrator!</strong> To disable logging either
-          remove or comment out the <code class="directive">RewriteLog</code>
-          directive or use <code>RewriteLogLevel 0</code>!
-</td></tr></table></blockquote>
-
-<blockquote><table><tr><td bgcolor="#e0e5f5"><p align="center"><strong>Security</strong></p>
-
-See the <a href="../misc/security_tips.html">Apache Security Tips</a>
-document for details on why your security could be compromised if the
-directory where logfiles are stored is writable by anyone other than
-the user that starts the server.
-</td></tr></table></blockquote>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><p align="center"><strong>Example</strong></p><code>
-RewriteLog "/usr/local/var/apache/logs/rewrite.log"
-</code></td></tr></table></blockquote>
-
-</usage><hr/><h2><a name="RewriteLogLevel">RewriteLogLevel</a> <a name="rewriteloglevel">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sets the verbosity of the log file used by the rewrite
-engine</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>RewriteLogLevel <em>Level</em></syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>RerwiteLogLevel 0</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_rewrite</td></tr></table></td></tr></table><usage>
-      <p>The <code class="directive">RewriteLogLevel</code> directive sets the
-      verbosity level of the rewriting logfile. The default level 0
-      means no logging, while 9 or more means that practically all
-      actions are logged.</p>
-
-      <p>To disable the logging of rewriting actions simply set
-      <em>Level</em> to 0. This disables all rewrite action
-      logs.</p>
-
-<blockquote><table><tr><td bgcolor="#e0e5f5"> Using a high value for
-          <em>Level</em> will slow down your Apache server
-          dramatically! Use the rewriting logfile at a
-          <em>Level</em> greater than 2 only for debugging!
-</td></tr></table></blockquote>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><p align="center"><strong>Example</strong></p><code>
-RewriteLogLevel 3
-</code></td></tr></table></blockquote>
-
-</usage><hr/><h2><a name="RewriteMap">RewriteMap</a> <a name="rewritemap">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Defines a mapping function for key-lookup</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>RewriteMap <em>MapName</em> <em>MapType</em>:<em>MapSource</em>
-</syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>None</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_rewrite</td></tr></table></td></tr></table><usage>
-      <p>The <code class="directive">RewriteMap</code> directive defines a
-      <em>Rewriting Map</em> which can be used inside rule
-      substitution strings by the mapping-functions to
-      insert/substitute fields through a key lookup. The source of
-      this lookup can be of various types.</p>
-
-      <p>The <a id="mapfunc" name="mapfunc"><em>MapName</em></a> is
-      the name of the map and will be used to specify a
-      mapping-function for the substitution strings of a rewriting
-      rule via one of the following constructs:</p>
-
-      <blockquote>
-        <strong><code>${</code> <em>MapName</em> <code>:</code>
-        <em>LookupKey</em> <code>}</code><br>
-         <code>${</code> <em>MapName</em> <code>:</code>
-        <em>LookupKey</em> <code>|</code> <em>DefaultValue</em>
-        <code>}</code></strong>
-      </blockquote>
-
-      <p>When such a construct occurs the map <em>MapName</em> is
-      consulted and the key <em>LookupKey</em> is looked-up. If the
-      key is found, the map-function construct is substituted by
-      <em>SubstValue</em>. If the key is not found then it is
-      substituted by <em>DefaultValue</em> or by the empty string
-      if no <em>DefaultValue</em> was specified.</p>
-
-      <p>The following combinations for <em>MapType</em> and
-      <em>MapSource</em> can be used:</p>
-
-      <ul>
-        <li>
-          <strong>Standard Plain Text</strong><br>
-           MapType: <code>txt</code>, MapSource: Unix filesystem
-          path to valid regular file 
-
-          <p>This is the standard rewriting map feature where the
-          <em>MapSource</em> is a plain ASCII file containing
-          either blank lines, comment lines (starting with a '#'
-          character) or pairs like the following - one per
-          line.</p>
-
-          <blockquote>
-            <strong><em>MatchingKey</em>
-            <em>SubstValue</em></strong>
-          </blockquote>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><p align="center"><strong>Example</strong></p><code>
-<pre>
-##
-##  map.txt -- rewriting map
-##
-
-Ralf.S.Engelschall    rse   # Bastard Operator From Hell
-Mr.Joe.Average        joe   # Mr. Average
-</pre>
-</code></td></tr></table></blockquote>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-RewriteMap real-to-user txt:/path/to/file/map.txt
-</code></td></tr></table></blockquote>
-        </li>
-
-        <li>
-          <strong>Randomized Plain Text</strong><br>
-           MapType: <code>rnd</code>, MapSource: Unix filesystem
-          path to valid regular file 
-
-          <p>This is identical to the Standard Plain Text variant
-          above but with a special post-processing feature: After
-          looking up a value it is parsed according to contained
-          ``<code>|</code>'' characters which have the meaning of
-          ``or''. In other words they indicate a set of
-          alternatives from which the actual returned value is
-          chosen randomly. Although this sounds crazy and useless,
-          it was actually designed for load balancing in a reverse
-          proxy situation where the looked up values are server
-          names. Example:</p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-<pre>
-##
-##  map.txt -- rewriting map
-##
-
-static   www1|www2|www3|www4
-dynamic  www5|www6
-</pre>
-</code></td></tr></table></blockquote>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-RewriteMap servers rnd:/path/to/file/map.txt
-</code></td></tr></table></blockquote>
-        </li>
-
-        <li>
-          <strong>Hash File</strong><br>
-           MapType: <code>dbm</code>, MapSource: Unix filesystem
-          path to valid regular file 
-
-          <p>Here the source is a binary NDBM format file
-          containing the same contents as a <em>Plain Text</em>
-          format file, but in a special representation which is
-          optimized for really fast lookups. You can create such a
-          file with any NDBM tool or with the following Perl
-          script:</p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-<pre>
-#!/path/to/bin/perl
-##
-##  txt2dbm -- convert txt map to dbm format
-##
-
-use NDBM_File;
-use Fcntl;
-
-($txtmap, $dbmmap) = @ARGV;
-
-open(TXT, "&lt;$txtmap") or die "Couldn't open $txtmap!\n";
-tie (%DB, 'NDBM_File', $dbmmap,O_RDWR|O_TRUNC|O_CREAT, 0644) or die "Couldn't create $dbmmap!\n";
-
-while (&lt;TXT&gt;) {
-  next if (/^\s*#/ or /^\s*$/);
-  $DB{$1} = $2 if (/^\s*(\S+)\s+(\S+)/);
-}
-
-untie %DB;
-close(TXT);
-</pre>
-</code></td></tr></table></blockquote>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-$ txt2dbm map.txt map.db
-</code></td></tr></table></blockquote>
-        </li>
-
-        <li>
-          <strong>Internal Function</strong><br>
-           MapType: <code>int</code>, MapSource: Internal Apache
-          function 
-
-          <p>Here the source is an internal Apache function.
-          Currently you cannot create your own, but the following
-          functions already exists:</p>
-
-          <ul>
-            <li><strong>toupper</strong>:<br>
-             Converts the looked up key to all upper case.</li>
-
-            <li><strong>tolower</strong>:<br>
-             Converts the looked up key to all lower case.</li>
-
-            <li><strong>escape</strong>:<br>
-             Translates special characters in the looked up key to
-            hex-encodings.</li>
-
-            <li><strong>unescape</strong>:<br>
-             Translates hex-encodings in the looked up key back to
-            special characters.</li>
-          </ul>
-        </li>
-
-        <li>
-          <strong>External Rewriting Program</strong><br>
-           MapType: <code>prg</code>, MapSource: Unix filesystem
-          path to valid regular file 
-
-          <p>Here the source is a program, not a map file. To
-          create it you can use the language of your choice, but
-          the result has to be a executable (<em>i.e.</em>, either
-          object-code or a script with the magic cookie trick
-          '<code>#!/path/to/interpreter</code>' as the first
-          line).</p>
-
-          <p>This program is started once at startup of the Apache
-          servers and then communicates with the rewriting engine
-          over its <code>stdin</code> and <code>stdout</code>
-          file-handles. For each map-function lookup it will
-          receive the key to lookup as a newline-terminated string
-          on <code>stdin</code>. It then has to give back the
-          looked-up value as a newline-terminated string on
-          <code>stdout</code> or the four-character string
-          ``<code>NULL</code>'' if it fails (<em>i.e.</em>, there
-          is no corresponding value for the given key). A trivial
-          program which will implement a 1:1 map (<em>i.e.</em>,
-          key == value) could be:</p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-<pre>
-#!/usr/bin/perl
-$| = 1;
-while (&lt;STDIN&gt;) {
-    # ...put here any transformations or lookups...
-    print $_;
-}
-</pre>
-</code></td></tr></table></blockquote>
-
-          <p>But be very careful:</p>
-
-          <ol>
-            <li>``<em>Keep it simple, stupid</em>'' (KISS), because
-            if this program hangs it will hang the Apache server
-            when the rule occurs.</li>
-
-            <li>Avoid one common mistake: never do buffered I/O on
-            <code>stdout</code>! This will cause a deadloop! Hence
-            the ``<code>$|=1</code>'' in the above example...</li>
-
-            <li>Use the <a href="#rewritelock" class="directive"><code class="directive">RewriteLock</code></a> directive to
-            define a lockfile mod_rewrite can use to synchronize the
-            communication to the program. By default no such
-            synchronization takes place.</li>
-          </ol>
-        </li>
-      </ul>
-      The <code class="directive">RewriteMap</code> directive can occur more than
-      once. For each mapping-function use one
-      <code class="directive">RewriteMap</code> directive to declare its rewriting
-      mapfile. While you cannot <strong>declare</strong> a map in
-      per-directory context it is of course possible to
-      <strong>use</strong> this map in per-directory context. 
-
-<blockquote><table><tr><td bgcolor="#e0e5f5"><p align="center"><strong>Note</strong></p> For plain text and DBM format files the
-looked-up keys are cached in-core until the <code>mtime</code> of the
-mapfile changes or the server does a restart. This way you can have
-map-functions in rules which are used for <strong>every</strong>
-request.  This is no problem, because the external lookup only happens
-once!
-</td></tr></table></blockquote>
-
-</usage><hr/><h2><a name="RewriteOptions">RewriteOptions</a> <a name="rewriteoptions">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sets some special options for the rewrite engine</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>RewriteOptions <em>Options</em></syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>None</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_rewrite</td></tr></table></td></tr></table><usage>
-
-      <p>The <code class="directive">RewriteOptions</code> directive sets some
-      special options for the current per-server or per-directory
-      configuration. The <em>Option</em> strings can be one of the
-      following:</p>
-
-      <ul>
-        <li>'<strong><code>inherit</code></strong>'<br>
-         This forces the current configuration to inherit the
-        configuration of the parent. In per-virtual-server context
-        this means that the maps, conditions and rules of the main
-        server are inherited. In per-directory context this means
-        that conditions and rules of the parent directory's
-        <code>.htaccess</code> configuration are inherited.</li>
-      </ul>
-</usage><hr/><h2><a name="RewriteRule">RewriteRule</a> <a name="rewriterule">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Defines rules for the rewriting engine</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>RewriteRule
-      <em>Pattern</em> <em>Substitution</em></syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>None</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>FileInfo</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_rewrite</td></tr></table></td></tr></table><usage>
-      <p>The <code class="directive">RewriteRule</code> directive is the real
-      rewriting workhorse. The directive can occur more than once.
-      Each directive then defines one single rewriting rule. The
-      <strong>definition order</strong> of these rules is
-      <strong>important</strong>, because this order is used when
-      applying the rules at run-time.</p>
-
-      <p><a id="patterns" name="patterns"><em>Pattern</em></a> can
-      be (for Apache 1.1.x a System V8 and for Apache 1.2.x and
-      later a POSIX) <a id="regexp" name="regexp">regular
-      expression</a> which gets applied to the current URL. Here
-      ``current'' means the value of the URL when this rule gets
-      applied. This may not be the originally requested URL,
-      because any number of rules may already have matched and made
-      alterations to it.</p>
-
-      <p>Some hints about the syntax of regular expressions:</p>
-
-      <table bgcolor="#F0F0F0" cellspacing="0" cellpadding="5">
-        <tr>
-          <td valign="TOP">
-<pre>
-<strong>Text:</strong>
-  <strong><code>.</code></strong>           Any single character
-  <strong><code>[</code></strong>chars<strong><code>]</code></strong>     Character class: One  of chars
-  <strong><code>[^</code></strong>chars<strong><code>]</code></strong>    Character class: None of chars
-  text1<strong><code>|</code></strong>text2 Alternative: text1 or text2
-
-<strong>Quantifiers:</strong>
-  <strong><code>?</code></strong>           0 or 1 of the preceding text
-  <strong><code>*</code></strong>           0 or N of the preceding text (N &gt; 0)
-  <strong><code>+</code></strong>           1 or N of the preceding text (N &gt; 1)
-
-<strong>Grouping:</strong>
-  <strong><code>(</code></strong>text<strong><code>)</code></strong>      Grouping of text
-              (either to set the borders of an alternative or
-              for making backreferences where the <strong>N</strong>th group can 
-              be used on the RHS of a RewriteRule with <code>$</code><strong>N</strong>)
-
-<strong>Anchors:</strong>
-  <strong><code>^</code></strong>           Start of line anchor
-  <strong><code>$</code></strong>           End   of line anchor
-
-<strong>Escaping:</strong>
-  <strong><code>\</code></strong>char       escape that particular char
-              (for instance to specify the chars "<code>.[]()</code>" <em>etc.</em>)
-</pre>
-          </td>
-        </tr>
-      </table>
-
-      <p>For more information about regular expressions either have
-      a look at your local regex(3) manpage or its
-      <code>src/regex/regex.3</code> copy in the Apache 1.3
-      distribution. If you are interested in more detailed
-      information about regular expressions and their variants
-      (POSIX regex, Perl regex, <em>etc.</em>) have a look at the
-      following dedicated book on this topic:</p>
-
-      <blockquote>
-        <em>Mastering Regular Expressions</em><br>
-         Jeffrey E.F. Friedl<br>
-         Nutshell Handbook Series<br>
-         O'Reilly &amp; Associates, Inc. 1997<br>
-         ISBN 1-56592-257-3<br>
-      </blockquote>
-
-      <p>Additionally in mod_rewrite the NOT character
-      ('<code>!</code>') is a possible pattern prefix. This gives
-      you the ability to negate a pattern; to say, for instance:
-      ``<em>if the current URL does <strong>NOT</strong> match this
-      pattern</em>''. This can be used for exceptional cases, where
-      it is easier to match the negative pattern, or as a last
-      default rule.</p>
-
-<blockquote><table><tr><td bgcolor="#e0e5f5"><p align="center"><strong>Notice</strong></p>
-When using the NOT character
-          to negate a pattern you cannot have grouped wildcard
-          parts in the pattern. This is impossible because when the
-          pattern does NOT match, there are no contents for the
-          groups. In consequence, if negated patterns are used, you
-          cannot use <code>$N</code> in the substitution
-          string!
-</td></tr></table></blockquote>
-
-      <p><a id="rhs" name="rhs"><em>Substitution</em></a> of a
-      rewriting rule is the string which is substituted for (or
-      replaces) the original URL for which <em>Pattern</em>
-      matched. Beside plain text you can use</p>
-
-      <ol>
-        <li>back-references <code>$N</code> to the RewriteRule
-        pattern</li>
-
-        <li>back-references <code>%N</code> to the last matched
-        RewriteCond pattern</li>
-
-        <li>server-variables as in rule condition test-strings
-        (<code>%{VARNAME}</code>)</li>
-
-        <li><a href="#mapfunc">mapping-function</a> calls
-        (<code>${mapname:key|default}</code>)</li>
-      </ol>
-      Back-references are <code>$</code><strong>N</strong>
-      (<strong>N</strong>=0..9) identifiers which will be replaced
-      by the contents of the <strong>N</strong>th group of the
-      matched <em>Pattern</em>. The server-variables are the same
-      as for the <em>TestString</em> of a <code>RewriteCond</code>
-      directive. The mapping-functions come from the
-      <code>RewriteMap</code> directive and are explained there.
-      These three types of variables are expanded in the order of
-      the above list. 
-
-      <p>As already mentioned above, all the rewriting rules are
-      applied to the <em>Substitution</em> (in the order of
-      definition in the config file). The URL is <strong>completely
-      replaced</strong> by the <em>Substitution</em> and the
-      rewriting process goes on until there are no more rules
-      unless explicitly terminated by a
-      <code><strong>L</strong></code> flag - see below.</p>
-
-      <p>There is a special substitution string named
-      '<code>-</code>' which means: <strong>NO
-      substitution</strong>! Sounds silly? No, it is useful to
-      provide rewriting rules which <strong>only</strong> match
-      some URLs but do no substitution, <em>e.g.</em>, in
-      conjunction with the <strong>C</strong> (chain) flag to be
-      able to have more than one pattern to be applied before a
-      substitution occurs.</p>
-
-      <p>One more note: You can even create URLs in the
-      substitution string containing a query string part. Just use
-      a question mark inside the substitution string to indicate
-      that the following stuff should be re-injected into the
-      QUERY_STRING. When you want to erase an existing query
-      string, end the substitution string with just the question
-      mark.</p>
-
-<blockquote><table><tr><td bgcolor="#e0e5f5"><p align="center"><strong>Note</strong></p>
-There is a special feature:
-          When you prefix a substitution field with
-          <code>http://</code><em>thishost</em>[<em>:thisport</em>]
-          then <strong>mod_rewrite</strong> automatically strips it
-          out. This auto-reduction on implicit external redirect
-          URLs is a useful and important feature when used in
-          combination with a mapping-function which generates the
-          hostname part. Have a look at the first example in the
-          example section below to understand this.
-</td></tr></table></blockquote>
-
-<blockquote><table><tr><td bgcolor="#e0e5f5"><p align="center"><strong>Remember</strong></p>
- An unconditional external
-          redirect to your own server will not work with the prefix
-          <code>http://thishost</code> because of this feature. To
-          achieve such a self-redirect, you have to use the
-          <strong>R</strong>-flag (see below).
-</td></tr></table></blockquote>
-
-      <p>Additionally you can set special flags for
-      <em>Substitution</em> by appending</p>
-
-      <blockquote>
-        <strong><code>[</code><em>flags</em><code>]</code></strong>
-      </blockquote>
-      as the third argument to the <code>RewriteRule</code>
-      directive. <em>Flags</em> is a comma-separated list of the
-      following flags: 
-
-      <ul>
-        <li>
-          '<strong><code>redirect|R</code>
-          [=<em>code</em>]</strong>' (force <a id="redirect" name="redirect"><strong>r</strong>edirect</a>)<br>
-           Prefix <em>Substitution</em> with
-          <code>http://thishost[:thisport]/</code> (which makes the
-          new URL a URI) to force a external redirection. If no
-          <em>code</em> is given a HTTP response of 302 (MOVED
-          TEMPORARILY) is used. If you want to use other response
-          codes in the range 300-400 just specify them as a number
-          or use one of the following symbolic names:
-          <code>temp</code> (default), <code>permanent</code>,
-          <code>seeother</code>. Use it for rules which should
-          canonicalize the URL and give it back to the client,
-          <em>e.g.</em>, translate ``<code>/~</code>'' into
-          ``<code>/u/</code>'' or always append a slash to
-          <code>/u/</code><em>user</em>, etc.<br>
-           
-
-          <p><strong>Note:</strong> When you use this flag, make
-          sure that the substitution field is a valid URL! If not,
-          you are redirecting to an invalid location! And remember
-          that this flag itself only prefixes the URL with
-          <code>http://thishost[:thisport]/</code>, rewriting
-          continues. Usually you also want to stop and do the
-          redirection immediately. To stop the rewriting you also
-          have to provide the 'L' flag.</p>
-        </li>
-
-        <li>'<strong><code>forbidden|F</code></strong>' (force URL
-        to be <strong>f</strong>orbidden)<br>
-         This forces the current URL to be forbidden,
-        <em>i.e.</em>, it immediately sends back a HTTP response of
-        403 (FORBIDDEN). Use this flag in conjunction with
-        appropriate RewriteConds to conditionally block some
-        URLs.</li>
-
-        <li>'<strong><code>gone|G</code></strong>' (force URL to be
-        <strong>g</strong>one)<br>
-         This forces the current URL to be gone, <em>i.e.</em>, it
-        immediately sends back a HTTP response of 410 (GONE). Use
-        this flag to mark pages which no longer exist as gone.</li>
-
-        <li>
-          '<strong><code>proxy|P</code></strong>' (force
-          <strong>p</strong>roxy)<br>
-           This flag forces the substitution part to be internally
-          forced as a proxy request and immediately (<em>i.e.</em>,
-          rewriting rule processing stops here) put through the <a href="mod_proxy.html">proxy module</a>. You have to make
-          sure that the substitution string is a valid URI
-          (<em>e.g.</em>, typically starting with
-          <code>http://</code><em>hostname</em>) which can be
-          handled by the Apache proxy module. If not you get an
-          error from the proxy module. Use this flag to achieve a
-          more powerful implementation of the <a href="mod_proxy.html#proxypass">ProxyPass</a> directive,
-          to map some remote stuff into the namespace of the local
-          server. 
-
-          <p>Notice: To use this functionality make sure you have
-          the proxy module compiled into your Apache server
-          program. If you don't know please check whether
-          <code>mod_proxy.c</code> is part of the ``<code>httpd
-          -l</code>'' output. If yes, this functionality is
-          available to mod_rewrite. If not, then you first have to
-          rebuild the ``<code>httpd</code>'' program with mod_proxy
-          enabled.</p>
-        </li>
-
-        <li>'<strong><code>last|L</code></strong>'
-        (<strong>l</strong>ast rule)<br>
-         Stop the rewriting process here and don't apply any more
-        rewriting rules. This corresponds to the Perl
-        <code>last</code> command or the <code>break</code> command
-        from the C language. Use this flag to prevent the currently
-        rewritten URL from being rewritten further by following
-        rules. For example, use it to rewrite the root-path URL
-        ('<code>/</code>') to a real one, <em>e.g.</em>,
-        '<code>/e/www/</code>'.</li>
-
-        <li>'<strong><code>next|N</code></strong>'
-        (<strong>n</strong>ext round)<br>
-         Re-run the rewriting process (starting again with the
-        first rewriting rule). Here the URL to match is again not
-        the original URL but the URL from the last rewriting rule.
-        This corresponds to the Perl <code>next</code> command or
-        the <code>continue</code> command from the C language. Use
-        this flag to restart the rewriting process, <em>i.e.</em>,
-        to immediately go to the top of the loop.<br>
-         <strong>But be careful not to create an infinite
-        loop!</strong></li>
-
-        <li>'<strong><code>chain|C</code></strong>'
-        (<strong>c</strong>hained with next rule)<br>
-         This flag chains the current rule with the next rule
-        (which itself can be chained with the following rule,
-        <em>etc.</em>). This has the following effect: if a rule
-        matches, then processing continues as usual, <em>i.e.</em>,
-        the flag has no effect. If the rule does
-        <strong>not</strong> match, then all following chained
-        rules are skipped. For instance, use it to remove the
-        ``<code>.www</code>'' part inside a per-directory rule set
-        when you let an external redirect happen (where the
-        ``<code>.www</code>'' part should not to occur!).</li>
-
-        <li>
-        '<strong><code>type|T</code></strong>=<em>MIME-type</em>'
-        (force MIME <strong>t</strong>ype)<br>
-         Force the MIME-type of the target file to be
-        <em>MIME-type</em>. For instance, this can be used to
-        simulate the <code>mod_alias</code> directive
-        <code>ScriptAlias</code> which internally forces all files
-        inside the mapped directory to have a MIME type of
-        ``<code>application/x-httpd-cgi</code>''.</li>
-
-        <li>
-          '<strong><code>nosubreq|NS</code></strong>' (used only if
-          <strong>n</strong>o internal
-          <strong>s</strong>ub-request)<br>
-           This flag forces the rewriting engine to skip a
-          rewriting rule if the current request is an internal
-          sub-request. For instance, sub-requests occur internally
-          in Apache when <code>mod_include</code> tries to find out
-          information about possible directory default files
-          (<code>index.xxx</code>). On sub-requests it is not
-          always useful and even sometimes causes a failure to if
-          the complete set of rules are applied. Use this flag to
-          exclude some rules.<br>
-           
-
-          <p>Use the following rule for your decision: whenever you
-          prefix some URLs with CGI-scripts to force them to be
-          processed by the CGI-script, the chance is high that you
-          will run into problems (or even overhead) on
-          sub-requests. In these cases, use this flag.</p>
-        </li>
-
-        <li>'<strong><code>nocase|NC</code></strong>'
-        (<strong>n</strong>o <strong>c</strong>ase)<br>
-         This makes the <em>Pattern</em> case-insensitive,
-        <em>i.e.</em>, there is no difference between 'A-Z' and
-        'a-z' when <em>Pattern</em> is matched against the current
-        URL.</li>
-
-        <li>'<strong><code>qsappend|QSA</code></strong>'
-        (<strong>q</strong>uery <strong>s</strong>tring
-        <strong>a</strong>ppend)<br>
-         This flag forces the rewriting engine to append a query
-        string part in the substitution string to the existing one
-        instead of replacing it. Use this when you want to add more
-        data to the query string via a rewrite rule.</li>
-
-        <li>
-          '<strong><code>noescape|NE</code></strong>'
-          (<strong>n</strong>o URI <strong>e</strong>scaping of
-          output)<br>
-           This flag keeps mod_rewrite from applying the usual URI
-          escaping rules to the result of a rewrite. Ordinarily,
-          special characters (such as '%', '$', ';', and so on)
-          will be escaped into their hexcode equivalents ('%25',
-          '%24', and '%3B', respectively); this flag prevents this
-          from being done. This allows percent symbols to appear in
-          the output, as in 
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-    RewriteRule /foo/(.*) /bar?arg=P1\%3d$1 [R,NE]
-</code></td></tr></table></blockquote>
-
-          which would turn '<code>/foo/zed</code>' into a safe
-          request for '<code>/bar?arg=P1=zed</code>'. 
-        </li>
-
-        <li>
-          '<strong><code>passthrough|PT</code></strong>'
-          (<strong>p</strong>ass <strong>t</strong>hrough to next
-          handler)<br>
-           This flag forces the rewriting engine to set the
-          <code>uri</code> field of the internal
-          <code>request_rec</code> structure to the value of the
-          <code>filename</code> field. This flag is just a hack to
-          be able to post-process the output of
-          <code>RewriteRule</code> directives by
-          <code>Alias</code>, <code>ScriptAlias</code>,
-          <code>Redirect</code>, <em>etc.</em> directives from
-          other URI-to-filename translators. A trivial example to
-          show the semantics: If you want to rewrite
-          <code>/abc</code> to <code>/def</code> via the rewriting
-          engine of <code>mod_rewrite</code> and then
-          <code>/def</code> to <code>/ghi</code> with
-          <code>mod_alias</code>: 
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-    RewriteRule ^/abc(.*)  /def$1 [PT]<br>
-    Alias       /def       /ghi
-</code></td></tr></table></blockquote>
-          If you omit the <code>PT</code> flag then
-          <code>mod_rewrite</code> will do its job fine,
-          <em>i.e.</em>, it rewrites <code>uri=/abc/...</code> to
-          <code>filename=/def/...</code> as a full API-compliant
-          URI-to-filename translator should do. Then
-          <code>mod_alias</code> comes and tries to do a
-          URI-to-filename transition which will not work. 
-
-          <p>Note: <strong>You have to use this flag if you want to
-          intermix directives of different modules which contain
-          URL-to-filename translators</strong>. The typical example
-          is the use of <code>mod_alias</code> and
-          <code>mod_rewrite</code>..</p>
-
-<blockquote><table><tr><td bgcolor="#e0e5f5"><p align="center"><strong>For Apache hackers</strong></p>
-               If the current Apache API had a filename-to-filename
-              hook additionally to the URI-to-filename hook then we
-              wouldn't need this flag! But without such a hook this
-              flag is the only solution. The Apache Group has
-              discussed this problem and will add such a hook in
-              Apache version 2.0.
-</td></tr></table></blockquote>
-        </li>
-
-        <li>'<strong><code>skip|S</code></strong>=<em>num</em>'
-        (<strong>s</strong>kip next rule(s))<br>
-         This flag forces the rewriting engine to skip the next
-        <em>num</em> rules in sequence when the current rule
-        matches. Use this to make pseudo if-then-else constructs:
-        The last rule of the then-clause becomes
-        <code>skip=N</code> where N is the number of rules in the
-        else-clause. (This is <strong>not</strong> the same as the
-        'chain|C' flag!)</li>
-
-        <li>
-        '<strong><code>env|E=</code></strong><em>VAR</em>:<em>VAL</em>'
-        (set <strong>e</strong>nvironment variable)<br>
-         This forces an environment variable named <em>VAR</em> to
-        be set to the value <em>VAL</em>, where <em>VAL</em> can
-        contain regexp backreferences <code>$N</code> and
-        <code>%N</code> which will be expanded. You can use this
-        flag more than once to set more than one variable. The
-        variables can be later dereferenced in many situations, but
-        usually from within XSSI (via <code>&lt;!--#echo
-        var="VAR"--&gt;</code>) or CGI (<em>e.g.</em>
-        <code>$ENV{'VAR'}</code>). Additionally you can dereference
-        it in a following RewriteCond pattern via
-        <code>%{ENV:VAR}</code>. Use this to strip but remember
-        information from URLs.</li>
-      </ul>
-
-<blockquote><table><tr><td bgcolor="#e0e5f5"><p align="center"><strong>Note</strong></p> Never forget that <em>Pattern</em> is
-applied to a complete URL in per-server configuration
-files. <strong>But in per-directory configuration files, the
-per-directory prefix (which always is the same for a specific
-directory!) is automatically <em>removed</em> for the pattern matching
-and automatically <em>added</em> after the substitution has been
-done.</strong> This feature is essential for many sorts of rewriting,
-because without this prefix stripping you have to match the parent
-directory which is not always possible.
-
-            <p>There is one exception: If a substitution string
-            starts with ``<code>http://</code>'' then the directory
-            prefix will <strong>not</strong> be added and an
-            external redirect or proxy throughput (if flag
-            <strong>P</strong> is used!) is forced!</p>
-</td></tr></table></blockquote>
-
-<blockquote><table><tr><td bgcolor="#e0e5f5"><p align="center"><strong>Note</strong></p>
- To enable the rewriting engine
-          for per-directory configuration files you need to set
-          ``<code>RewriteEngine On</code>'' in these files
-          <strong>and</strong> ``<code>Options
-          FollowSymLinks</code>'' must be enabled. If your
-          administrator has disabled override of
-          <code>FollowSymLinks</code> for a user's directory, then
-          you cannot use the rewriting engine. This restriction is
-          needed for security reasons.
-</td></tr></table></blockquote>
-
-      <p>Here are all possible substitution combinations and their
-      meanings:</p>
-
-      <p><strong>Inside per-server configuration
-      (<code>httpd.conf</code>)<br>
-       for request ``<code>GET
-      /somepath/pathinfo</code>'':</strong><br>
-      </p>
-
-      <table bgcolor="#F0F0F0" cellspacing="0" cellpadding="5">
-        <tr>
-          <td>
-<pre>
-<strong>Given Rule</strong>                                      <strong>Resulting Substitution</strong>
-----------------------------------------------  ----------------------------------
-^/somepath(.*) otherpath$1                      not supported, because invalid!
-
-^/somepath(.*) otherpath$1  [R]                 not supported, because invalid!
-
-^/somepath(.*) otherpath$1  [P]                 not supported, because invalid!
-----------------------------------------------  ----------------------------------
-^/somepath(.*) /otherpath$1                     /otherpath/pathinfo
-
-^/somepath(.*) /otherpath$1 [R]                 http://thishost/otherpath/pathinfo
-                                                via external redirection
-
-^/somepath(.*) /otherpath$1 [P]                 not supported, because silly!
-----------------------------------------------  ----------------------------------
-^/somepath(.*) http://thishost/otherpath$1      /otherpath/pathinfo
-
-^/somepath(.*) http://thishost/otherpath$1 [R]  http://thishost/otherpath/pathinfo
-                                                via external redirection
-
-^/somepath(.*) http://thishost/otherpath$1 [P]  not supported, because silly!
-----------------------------------------------  ----------------------------------
-^/somepath(.*) http://otherhost/otherpath$1     http://otherhost/otherpath/pathinfo
-                                                via external redirection
-
-^/somepath(.*) http://otherhost/otherpath$1 [R] http://otherhost/otherpath/pathinfo
-                                                via external redirection
-                                                (the [R] flag is redundant)
-
-^/somepath(.*) http://otherhost/otherpath$1 [P] http://otherhost/otherpath/pathinfo
-                                                via internal proxy
-</pre>
-          </td>
-        </tr>
-      </table>
-
-      <p><strong>Inside per-directory configuration for
-      <code>/somepath</code><br>
-       (<em>i.e.</em>, file <code>.htaccess</code> in dir
-      <code>/physical/path/to/somepath</code> containing
-      <code>RewriteBase /somepath</code>)<br>
-       for request ``<code>GET
-      /somepath/localpath/pathinfo</code>'':</strong><br> 
-     </p>
-
-      <table bgcolor="#F0F0F0" cellspacing="0" cellpadding="5">
-        <tr>
-          <td>
-<pre>
-<strong>Given Rule</strong>                                      <strong>Resulting Substitution</strong>
-----------------------------------------------  ----------------------------------
-^localpath(.*) otherpath$1                      /somepath/otherpath/pathinfo
-
-^localpath(.*) otherpath$1  [R]                 http://thishost/somepath/otherpath/pathinfo
-                                                via external redirection
-
-^localpath(.*) otherpath$1  [P]                 not supported, because silly!
-----------------------------------------------  ----------------------------------
-^localpath(.*) /otherpath$1                     /otherpath/pathinfo
-
-^localpath(.*) /otherpath$1 [R]                 http://thishost/otherpath/pathinfo
-                                                via external redirection
-
-^localpath(.*) /otherpath$1 [P]                 not supported, because silly!
-----------------------------------------------  ----------------------------------
-^localpath(.*) http://thishost/otherpath$1      /otherpath/pathinfo
-
-^localpath(.*) http://thishost/otherpath$1 [R]  http://thishost/otherpath/pathinfo
-                                                via external redirection
-
-^localpath(.*) http://thishost/otherpath$1 [P]  not supported, because silly!
-----------------------------------------------  ----------------------------------
-^localpath(.*) http://otherhost/otherpath$1     http://otherhost/otherpath/pathinfo
-                                                via external redirection
-
-^localpath(.*) http://otherhost/otherpath$1 [R] http://otherhost/otherpath/pathinfo
-                                                via external redirection
-                                                (the [R] flag is redundant)
-
-^localpath(.*) http://otherhost/otherpath$1 [P] http://otherhost/otherpath/pathinfo
-                                                via internal proxy
-</pre>
-          </td>
-        </tr>
-      </table>
-
-      <p><strong>Example:</strong></p>
-
-      <p>We want to rewrite URLs of the form </p>
-
-        <blockquote>
-          <code>/</code> <em>Language</em> <code>/~</code>
-          <em>Realname</em> <code>/.../</code> <em>File</em>
-        </blockquote>
-        into 
-
-        <blockquote>
-          <code>/u/</code> <em>Username</em> <code>/.../</code>
-          <em>File</em> <code>.</code> <em>Language</em>
-        </blockquote>
-
-        <p>We take the rewrite mapfile from above and save it under
-        <code>/path/to/file/map.txt</code>. Then we only have to
-        add the following lines to the Apache server configuration
-        file:</p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-<pre>
-RewriteLog   /path/to/file/rewrite.log
-RewriteMap   real-to-user               txt:/path/to/file/map.txt
-RewriteRule  ^/([^/]+)/~([^/]+)/(.*)$   /u/${real-to-user:$2|nobody}/$3.$1
-</pre>
-</code></td></tr></table></blockquote>
-
-</usage><hr/><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img alt="Index" src="../images/index.gif"/></a><a href="../"><img alt="Home" src="../images/home.gif"/></a></blockquote></body></html>
\ No newline at end of file
diff --git a/docs/manual/mod/mod_rewrite.xml b/docs/manual/mod/mod_rewrite.xml
deleted file mode 100644
index f2a2dc0..0000000
--- a/docs/manual/mod/mod_rewrite.xml
+++ /dev/null
@@ -1,1768 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.xsl"?>
-<modulesynopsis>
-
-<name>mod_rewrite</name> 
-
-<description>Provides a rule-based rewriting engine to rewrite requested
-URLs on the fly</description>
-
-<status>Extension</status>
-<sourcefile>mod_rewrite.c</sourcefile>
-<identifier>rewrite_module</identifier>
-<compatibility>Available in Apache 1.3 and later</compatibility>
-
-<summary>
-      <blockquote>
-            <em>``The great thing about mod_rewrite is it gives you
-            all the configurability and flexibility of Sendmail.
-            The downside to mod_rewrite is that it gives you all
-            the configurability and flexibility of Sendmail.''</em><br />
-
-            &nbsp;&nbsp;&nbsp;&nbsp;  -- Brian Behlendorf<br />
-            &nbsp;&nbsp;&nbsp;&nbsp;   Apache Group
-
-      </blockquote>
-
-      <blockquote>
-            <em>`` Despite the tons of examples and docs,
-            mod_rewrite is voodoo. Damned cool voodoo, but still
-            voodoo. ''</em> <br />
-
-              &nbsp;&nbsp;&nbsp;&nbsp;-- Brian Moore<br />
-              &nbsp;&nbsp;&nbsp;&nbsp; bem@news.cmc.net
-
-          </blockquote>
-
-
-      <p>Welcome to mod_rewrite, the Swiss Army Knife of URL
-      manipulation!</p>
-
-      <p>This module uses a rule-based rewriting engine (based on a
-      regular-expression parser) to rewrite requested URLs on the
-      fly. It supports an unlimited number of rules and an
-      unlimited number of attached rule conditions for each rule to
-      provide a really flexible and powerful URL manipulation
-      mechanism. The URL manipulations can depend on various tests,
-      for instance server variables, environment variables, HTTP
-      headers, time stamps and even external database lookups in
-      various formats can be used to achieve a really granular URL
-      matching.</p>
-
-      <p>This module operates on the full URLs (including the
-      path-info part) both in per-server context
-      (<code>httpd.conf</code>) and per-directory context
-      (<code>.htaccess</code>) and can even generate query-string
-      parts on result. The rewritten result can lead to internal
-      sub-processing, external request redirection or even to an
-      internal proxy throughput.</p>
-
-      <p>But all this functionality and flexibility has its
-      drawback: complexity. So don't expect to understand this
-      entire module in just one day.</p>
-
-      <p>This module was invented and originally written in April
-      1996 and gifted exclusively to the The Apache Group in July 1997
-      by</p>
-
-      <blockquote>
-        <a href="http://www.engelschall.com/"><code>Ralf S.
-        Engelschall</code></a><br />
-         <a
-        href="mailto:rse@engelschall.com"><code>rse@engelschall.com</code></a><br />
-         <a
-        href="http://www.engelschall.com/"><code>www.engelschall.com</code></a>
-      </blockquote>
-</summary>
-
-<section id="Internal"><title>Interal Processing</title>
-
-      <p>The internal processing of this module is very complex but
-      needs to be explained once even to the average user to avoid
-      common mistakes and to let you exploit its full
-      functionality.</p>
-
-<section id="InternalAPI"><title>API Phases</title>
-
-      <p>First you have to understand that when Apache processes a
-      HTTP request it does this in phases. A hook for each of these
-      phases is provided by the Apache API. Mod_rewrite uses two of
-      these hooks: the URL-to-filename translation hook which is
-      used after the HTTP request has been read but before any
-      authorization starts and the Fixup hook which is triggered
-      after the authorization phases and after the per-directory
-      config files (<code>.htaccess</code>) have been read, but
-      before the content handler is activated.</p>
-
-      <p>So, after a request comes in and Apache has determined the
-      corresponding server (or virtual server) the rewriting engine
-      starts processing of all mod_rewrite directives from the
-      per-server configuration in the URL-to-filename phase. A few
-      steps later when the final data directories are found, the
-      per-directory configuration directives of mod_rewrite are
-      triggered in the Fixup phase. In both situations mod_rewrite
-      rewrites URLs either to new URLs or to filenames, although
-      there is no obvious distinction between them. This is a usage
-      of the API which was not intended to be this way when the API
-      was designed, but as of Apache 1.x this is the only way
-      mod_rewrite can operate. To make this point more clear
-      remember the following two points:</p>
-
-      <ol>
-        <li>Although mod_rewrite rewrites URLs to URLs, URLs to
-        filenames and even filenames to filenames, the API
-        currently provides only a URL-to-filename hook. In Apache
-        2.0 the two missing hooks will be added to make the
-        processing more clear. But this point has no drawbacks for
-        the user, it is just a fact which should be remembered:
-        Apache does more in the URL-to-filename hook than the API
-        intends for it.</li>
-
-        <li>
-          Unbelievably mod_rewrite provides URL manipulations in
-          per-directory context, <em>i.e.</em>, within
-          <code>.htaccess</code> files, although these are reached
-          a very long time after the URLs have been translated to
-          filenames. It has to be this way because
-          <code>.htaccess</code> files live in the filesystem, so
-          processing has already reached this stage. In other
-          words: According to the API phases at this time it is too
-          late for any URL manipulations. To overcome this chicken
-          and egg problem mod_rewrite uses a trick: When you
-          manipulate a URL/filename in per-directory context
-          mod_rewrite first rewrites the filename back to its
-          corresponding URL (which is usually impossible, but see
-          the <code>RewriteBase</code> directive below for the
-          trick to achieve this) and then initiates a new internal
-          sub-request with the new URL. This restarts processing of
-          the API phases. 
-
-          <p>Again mod_rewrite tries hard to make this complicated
-          step totally transparent to the user, but you should
-          remember here: While URL manipulations in per-server
-          context are really fast and efficient, per-directory
-          rewrites are slow and inefficient due to this chicken and
-          egg problem. But on the other hand this is the only way
-          mod_rewrite can provide (locally restricted) URL
-          manipulations to the average user.</p>
-        </li>
-      </ol>
-
-      <p>Don't forget these two points!</p>
-</section>
-
-<section id="InternalRuleset"><title>Ruleset Processing</title>
- 
-      <p>Now when mod_rewrite is triggered in these two API phases, it
-      reads the configured rulesets from its configuration
-      structure (which itself was either created on startup for
-      per-server context or during the directory walk of the Apache
-      kernel for per-directory context). Then the URL rewriting
-      engine is started with the contained ruleset (one or more
-      rules together with their conditions). The operation of the
-      URL rewriting engine itself is exactly the same for both
-      configuration contexts. Only the final result processing is
-      different. </p>
-
-      <p>The order of rules in the ruleset is important because the
-      rewriting engine processes them in a special (and not very
-      obvious) order. The rule is this: The rewriting engine loops
-      through the ruleset rule by rule (<directive
-      module="mod_rewrite">RewriteRule</directive> directives) and
-      when a particular rule matches it optionally loops through
-      existing corresponding conditions (<code>RewriteCond</code>
-      directives). For historical reasons the conditions are given
-      first, and so the control flow is a little bit long-winded. See
-      Figure 1 for more details.</p>
-<section>
-      <img src="../images/mod_rewrite_fig1.gif" border="1" width="428"
-           height="385" alt="[Needs graphics capability to display]" />
-      <p><strong>Figure 1:</strong>The control flow through the rewriting ruleset</p>
-</section>
-      <p>As you can see, first the URL is matched against the
-      <em>Pattern</em> of each rule. When it fails mod_rewrite
-      immediately stops processing this rule and continues with the
-      next rule. If the <em>Pattern</em> matches, mod_rewrite looks
-      for corresponding rule conditions. If none are present, it
-      just substitutes the URL with a new value which is
-      constructed from the string <em>Substitution</em> and goes on
-      with its rule-looping. But if conditions exist, it starts an
-      inner loop for processing them in the order that they are
-      listed. For conditions the logic is different: we don't match
-      a pattern against the current URL. Instead we first create a
-      string <em>TestString</em> by expanding variables,
-      back-references, map lookups, <em>etc.</em> and then we try
-      to match <em>CondPattern</em> against it. If the pattern
-      doesn't match, the complete set of conditions and the
-      corresponding rule fails. If the pattern matches, then the
-      next condition is processed until no more conditions are
-      available. If all conditions match, processing is continued
-      with the substitution of the URL with
-      <em>Substitution</em>.</p>
-
-</section>
-
-<section id="quoting"><title>Quoting Special Characters</title>
-
-      <p>As of Apache 1.3.20, special characters in
-      <em>TestString</em> and <em>Substitution</em> strings can be
-      escaped (that is, treated as normal characters without their
-      usual special meaning) by prefixing them with a slosh ('\')
-      character. In other words, you can include an actual
-      dollar-sign character in a <em>Substitution</em> string by
-      using '<code>\$</code>'; this keeps mod_rewrite from trying
-      to treat it as a backreference.</p>
-</section>
-
-<section id="InternalBackRefs"><title>Regex Back-Reference Availability</title>
-
-      <p>One important thing here has to be remembered: Whenever you
-      use parentheses in <em>Pattern</em> or in one of the
-      <em>CondPattern</em>, back-references are internally created
-      which can be used with the strings <code>$N</code> and
-      <code>%N</code> (see below). These are available for creating
-      the strings <em>Substitution</em> and <em>TestString</em>.
-      Figure 2 shows to which locations the back-references are
-      transfered for expansion.</p>
-
-<section>
-      <img src="../images/mod_rewrite_fig2.gif" border="1" width="381"
-           height="179" alt="[Needs graphics capability to display]" />
-      <p><strong>Figure 2:</strong> The back-reference flow through a rule.</p>
-</section>
-      <p>We know this was a crash course on mod_rewrite's internal
-      processing. But you will benefit from this knowledge when
-      reading the following documentation of the available
-      directives.</p>
-
-</section>
-</section>
-
-<section id="EnvVar"><title>Environment Variables</title>
-
-      <p>This module keeps track of two additional (non-standard)
-      CGI/SSI environment variables named <code>SCRIPT_URL</code>
-      and <code>SCRIPT_URI</code>. These contain the
-      <em>logical</em> Web-view to the current resource, while the
-      standard CGI/SSI variables <code>SCRIPT_NAME</code> and
-      <code>SCRIPT_FILENAME</code> contain the <em>physical</em>
-      System-view. </p>
-
-      <p>Notice: These variables hold the URI/URL <em>as they were
-      initially requested</em>, <em>i.e.</em>, <em>before</em> any
-      rewriting. This is important because the rewriting process is
-      primarily used to rewrite logical URLs to physical
-      pathnames.</p>
-
-      <p><strong>Example:</strong></p>
-
-<example>
-<pre>
-SCRIPT_NAME=/sw/lib/w3s/tree/global/u/rse/.www/index.html
-SCRIPT_FILENAME=/u/rse/.www/index.html
-SCRIPT_URL=/u/rse/
-SCRIPT_URI=http://en1.engelschall.com/u/rse/
-</pre>
-</example>
-
-</section>
-
-<section id="Solutions"><title>Practical Solutions</title>
-
-      <p>We also have an <a href="../misc/rewriteguide.html">URL
-      Rewriting Guide</a> available, which provides a collection of
-      practical solutions for URL-based problems. There you can
-      find real-life rulesets and additional information about
-      mod_rewrite.</p>
-</section>
-
-
-<directivesynopsis>
-<name>RewriteEngine</name>
-<description>Enables or disables runtime rewriting engine</description>
-<syntax>RewriteEngine on|off</syntax>
-<default>RewriteEngine off</default>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-
-<usage>       
-
-      <p>The <directive>RewriteEngine</directive> directive enables or
-      disables the runtime rewriting engine. If it is set to
-      <code>off</code> this module does no runtime processing at
-      all. It does not even update the <code>SCRIPT_URx</code>
-      environment variables.</p>
-
-      <p>Use this directive to disable the module instead of
-      commenting out all the <directive
-      module="mod_rewrite">RewriteRule</directive> directives!</p>
-
-      <p>Note that, by default, rewrite configurations are not
-      inherited. This means that you need to have a
-      <code>RewriteEngine on</code> directive for each virtual host
-      in which you wish to use it.</p>
-</usage>
-
-</directivesynopsis>
-
-<directivesynopsis>
-<name>RewriteOptions</name>
-<description>Sets some special options for the rewrite engine</description>
-<syntax>RewriteOptions <em>Options</em></syntax>
-<default>None</default>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-
-<usage>
-
-      <p>The <directive>RewriteOptions</directive> directive sets some
-      special options for the current per-server or per-directory
-      configuration. The <em>Option</em> strings can be one of the
-      following:</p>
-
-      <ul>
-        <li>'<strong><code>inherit</code></strong>'<br />
-         This forces the current configuration to inherit the
-        configuration of the parent. In per-virtual-server context
-        this means that the maps, conditions and rules of the main
-        server are inherited. In per-directory context this means
-        that conditions and rules of the parent directory's
-        <code>.htaccess</code> configuration are inherited.</li>
-      </ul>
-</usage>
-
-</directivesynopsis>
-
-<directivesynopsis>
-<name>RewriteLog</name>
-<description>Sets the name of the file used for logging rewrite engine
-processing</description>
-<syntax>RewriteLog <em>file-path</em></syntax>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
-      <p>The <directive>RewriteLog</directive> directive sets the name
-      of the file to which the server logs any rewriting actions it
-      performs. If the name does not begin with a slash
-      ('<code>/</code>') then it is assumed to be relative to the
-      <em>Server Root</em>. The directive should occur only once per
-      server config.</p>
-
-<note>    To disable the logging of
-          rewriting actions it is not recommended to set
-          <em>Filename</em> to <code>/dev/null</code>, because
-          although the rewriting engine does not then output to a
-          logfile it still creates the logfile output internally.
-          <strong>This will slow down the server with no advantage
-          to the administrator!</strong> To disable logging either
-          remove or comment out the <directive>RewriteLog</directive>
-          directive or use <code>RewriteLogLevel 0</code>!
-</note>
-
-<note type="securitywarning"><title>Security</title>
-
-See the <a href="../misc/security_tips.html">Apache Security Tips</a>
-document for details on why your security could be compromised if the
-directory where logfiles are stored is writable by anyone other than
-the user that starts the server.
-</note>
-
-<example><title>Example</title>
-RewriteLog "/usr/local/var/apache/logs/rewrite.log"
-</example>
-
-</usage>
-
-</directivesynopsis>
-
-<directivesynopsis>
-<name>RewriteLogLevel</name>
-<description>Sets the verbosity of the log file used by the rewrite
-engine</description>
-<syntax>RewriteLogLevel <em>Level</em></syntax>
-<default>RerwiteLogLevel 0</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
-      <p>The <directive>RewriteLogLevel</directive> directive sets the
-      verbosity level of the rewriting logfile. The default level 0
-      means no logging, while 9 or more means that practically all
-      actions are logged.</p>
-
-      <p>To disable the logging of rewriting actions simply set
-      <em>Level</em> to 0. This disables all rewrite action
-      logs.</p>
-
-<note> Using a high value for
-          <em>Level</em> will slow down your Apache server
-          dramatically! Use the rewriting logfile at a
-          <em>Level</em> greater than 2 only for debugging!
-</note>
-
-<example><title>Example</title>
-RewriteLogLevel 3
-</example>
-
-</usage>
-
-</directivesynopsis>
-
-<directivesynopsis>
-<name>RewriteLock</name>
-<description>Sets the name of the lock file used for <directive
-module="mod_rewrite">RewriteMap</directive>
-synchronization</description>
-<syntax>RewriteLock <em>file-path</em></syntax>
-<default>None</default>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
-      <p>This directive sets the filename for a synchronization
-      lockfile which mod_rewrite needs to communicate with <directive
-      module="mod_rewrite">RewriteMap</directive>
-      <em>programs</em>. Set this lockfile to a local path (not on a
-      NFS-mounted device) when you want to use a rewriting
-      map-program. It is not required for other types of rewriting
-      maps.</p>
-</usage>
-
-</directivesynopsis>
-
-<directivesynopsis>
-<name>RewriteMap</name>
-<description>Defines a mapping function for key-lookup</description>
-<syntax>RewriteMap <em>MapName</em> <em>MapType</em>:<em>MapSource</em>
-</syntax>
-<default>None</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-
-<usage>
-      <p>The <directive>RewriteMap</directive> directive defines a
-      <em>Rewriting Map</em> which can be used inside rule
-      substitution strings by the mapping-functions to
-      insert/substitute fields through a key lookup. The source of
-      this lookup can be of various types.</p>
-
-      <p>The <a id="mapfunc" name="mapfunc"><em>MapName</em></a> is
-      the name of the map and will be used to specify a
-      mapping-function for the substitution strings of a rewriting
-      rule via one of the following constructs:</p>
-
-      <blockquote>
-        <strong><code>${</code> <em>MapName</em> <code>:</code>
-        <em>LookupKey</em> <code>}</code><br />
-         <code>${</code> <em>MapName</em> <code>:</code>
-        <em>LookupKey</em> <code>|</code> <em>DefaultValue</em>
-        <code>}</code></strong>
-      </blockquote>
-
-      <p>When such a construct occurs the map <em>MapName</em> is
-      consulted and the key <em>LookupKey</em> is looked-up. If the
-      key is found, the map-function construct is substituted by
-      <em>SubstValue</em>. If the key is not found then it is
-      substituted by <em>DefaultValue</em> or by the empty string
-      if no <em>DefaultValue</em> was specified.</p>
-
-      <p>The following combinations for <em>MapType</em> and
-      <em>MapSource</em> can be used:</p>
-
-      <ul>
-        <li>
-          <strong>Standard Plain Text</strong><br />
-           MapType: <code>txt</code>, MapSource: Unix filesystem
-          path to valid regular file 
-
-          <p>This is the standard rewriting map feature where the
-          <em>MapSource</em> is a plain ASCII file containing
-          either blank lines, comment lines (starting with a '#'
-          character) or pairs like the following - one per
-          line.</p>
-
-          <blockquote>
-            <strong><em>MatchingKey</em>
-            <em>SubstValue</em></strong>
-          </blockquote>
-
-<example><title>Example</title>
-<pre>
-##
-##  map.txt -- rewriting map
-##
-
-Ralf.S.Engelschall    rse   # Bastard Operator From Hell
-Mr.Joe.Average        joe   # Mr. Average
-</pre>
-</example>
-
-<example>
-RewriteMap real-to-user txt:/path/to/file/map.txt
-</example>
-        </li>
-
-        <li>
-          <strong>Randomized Plain Text</strong><br />
-           MapType: <code>rnd</code>, MapSource: Unix filesystem
-          path to valid regular file 
-
-          <p>This is identical to the Standard Plain Text variant
-          above but with a special post-processing feature: After
-          looking up a value it is parsed according to contained
-          ``<code>|</code>'' characters which have the meaning of
-          ``or''. In other words they indicate a set of
-          alternatives from which the actual returned value is
-          chosen randomly. Although this sounds crazy and useless,
-          it was actually designed for load balancing in a reverse
-          proxy situation where the looked up values are server
-          names. Example:</p>
-
-<example>
-<pre>
-##
-##  map.txt -- rewriting map
-##
-
-static   www1|www2|www3|www4
-dynamic  www5|www6
-</pre>
-</example>
-
-<example>
-RewriteMap servers rnd:/path/to/file/map.txt
-</example>
-        </li>
-
-        <li>
-          <strong>Hash File</strong><br />
-           MapType: <code>dbm</code>, MapSource: Unix filesystem
-          path to valid regular file 
-
-          <p>Here the source is a binary NDBM format file
-          containing the same contents as a <em>Plain Text</em>
-          format file, but in a special representation which is
-          optimized for really fast lookups. You can create such a
-          file with any NDBM tool or with the following Perl
-          script:</p>
-
-<example>
-<pre>
-#!/path/to/bin/perl
-##
-##  txt2dbm -- convert txt map to dbm format
-##
-
-use NDBM_File;
-use Fcntl;
-
-($txtmap, $dbmmap) = @ARGV;
-
-open(TXT, "&lt;$txtmap") or die "Couldn't open $txtmap!\n";
-tie (%DB, 'NDBM_File', $dbmmap,O_RDWR|O_TRUNC|O_CREAT, 0644) or die "Couldn't create $dbmmap!\n";
-
-while (&lt;TXT&gt;) {
-  next if (/^\s*#/ or /^\s*$/);
-  $DB{$1} = $2 if (/^\s*(\S+)\s+(\S+)/);
-}
-
-untie %DB;
-close(TXT);
-</pre>
-</example>
-
-<example>
-$ txt2dbm map.txt map.db
-</example>
-        </li>
-
-        <li>
-          <strong>Internal Function</strong><br />
-           MapType: <code>int</code>, MapSource: Internal Apache
-          function 
-
-          <p>Here the source is an internal Apache function.
-          Currently you cannot create your own, but the following
-          functions already exists:</p>
-
-          <ul>
-            <li><strong>toupper</strong>:<br />
-             Converts the looked up key to all upper case.</li>
-
-            <li><strong>tolower</strong>:<br />
-             Converts the looked up key to all lower case.</li>
-
-            <li><strong>escape</strong>:<br />
-             Translates special characters in the looked up key to
-            hex-encodings.</li>
-
-            <li><strong>unescape</strong>:<br />
-             Translates hex-encodings in the looked up key back to
-            special characters.</li>
-          </ul>
-        </li>
-
-        <li>
-          <strong>External Rewriting Program</strong><br />
-           MapType: <code>prg</code>, MapSource: Unix filesystem
-          path to valid regular file 
-
-          <p>Here the source is a program, not a map file. To
-          create it you can use the language of your choice, but
-          the result has to be a executable (<em>i.e.</em>, either
-          object-code or a script with the magic cookie trick
-          '<code>#!/path/to/interpreter</code>' as the first
-          line).</p>
-
-          <p>This program is started once at startup of the Apache
-          servers and then communicates with the rewriting engine
-          over its <code>stdin</code> and <code>stdout</code>
-          file-handles. For each map-function lookup it will
-          receive the key to lookup as a newline-terminated string
-          on <code>stdin</code>. It then has to give back the
-          looked-up value as a newline-terminated string on
-          <code>stdout</code> or the four-character string
-          ``<code>NULL</code>'' if it fails (<em>i.e.</em>, there
-          is no corresponding value for the given key). A trivial
-          program which will implement a 1:1 map (<em>i.e.</em>,
-          key == value) could be:</p>
-
-<example>
-<pre>
-#!/usr/bin/perl
-$| = 1;
-while (&lt;STDIN&gt;) {
-    # ...put here any transformations or lookups...
-    print $_;
-}
-</pre>
-</example>
-
-          <p>But be very careful:</p>
-
-          <ol>
-            <li>``<em>Keep it simple, stupid</em>'' (KISS), because
-            if this program hangs it will hang the Apache server
-            when the rule occurs.</li>
-
-            <li>Avoid one common mistake: never do buffered I/O on
-            <code>stdout</code>! This will cause a deadloop! Hence
-            the ``<code>$|=1</code>'' in the above example...</li>
-
-            <li>Use the <directive
-            module="mod_rewrite">RewriteLock</directive> directive to
-            define a lockfile mod_rewrite can use to synchronize the
-            communication to the program. By default no such
-            synchronization takes place.</li>
-          </ol>
-        </li>
-      </ul>
-      <p>The <directive>RewriteMap</directive> directive can occur more than
-      once. For each mapping-function use one
-      <directive>RewriteMap</directive> directive to declare its rewriting
-      mapfile. While you cannot <strong>declare</strong> a map in
-      per-directory context it is of course possible to
-      <strong>use</strong> this map in per-directory context. </p>
-
-<note><title>Note</title> For plain text and DBM format files the
-looked-up keys are cached in-core until the <code>mtime</code> of the
-mapfile changes or the server does a restart. This way you can have
-map-functions in rules which are used for <strong>every</strong>
-request.  This is no problem, because the external lookup only happens
-once!
-</note>
-
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>RewriteBase</name>
-<description>Sets the base URL for per-directory rewrites</description>
-<syntax>RewriteBase <em>URL-path</em></syntax>
-<default>See usage for information.</default>
-<contextlist><context>directory</context><context>.htaccess</context>
-</contextlist>
-<override>FileInfo</override>
-
-<usage>
-      <p>The <directive>RewriteBase</directive> directive explicitly
-      sets the base URL for per-directory rewrites. As you will see
-      below, <directive module="mod_rewrite">RewriteRule</directive>
-      can be used in per-directory config files
-      (<code>.htaccess</code>). There it will act locally,
-      <em>i.e.</em>, the local directory prefix is stripped at this
-      stage of processing and your rewriting rules act only on the
-      remainder. At the end it is automatically added back to the
-      path. The default setting is; <directive>RewriteBase</directive> <em>physical-directory-path</em></p>
-
-      <p>When a substitution occurs for a new URL, this module has
-      to re-inject the URL into the server processing. To be able
-      to do this it needs to know what the corresponding URL-prefix
-      or URL-base is. By default this prefix is the corresponding
-      filepath itself. <strong>But at most websites URLs are NOT
-      directly related to physical filename paths, so this
-      assumption will usually be wrong!</strong> There you have to
-      use the <code>RewriteBase</code> directive to specify the
-      correct URL-prefix.</p>
-
-<note> If your webserver's URLs are <strong>not</strong> directly
-related to physical file paths, you have to use
-<directive>RewriteBase</directive> in every <code>.htaccess</code>
-files where you want to use <directive
-module="mod_rewrite">RewriteRule</directive> directives.
-</note>
-
-        <p> For example, assume the following per-directory config file:</p>
-
-<example>
-<pre>
-#
-#  /abc/def/.htaccess -- per-dir config file for directory /abc/def
-#  Remember: /abc/def is the physical path of /xyz, <em>i.e.</em>, the server
-#            has a 'Alias /xyz /abc/def' directive <em>e.g.</em>
-#
-
-RewriteEngine On
-
-#  let the server know that we were reached via /xyz and not
-#  via the physical path prefix /abc/def
-RewriteBase   /xyz
-
-#  now the rewriting rules
-RewriteRule   ^oldstuff\.html$  newstuff.html
-</pre>
-</example>
-
-        <p>In the above example, a request to
-        <code>/xyz/oldstuff.html</code> gets correctly rewritten to
-        the physical file <code>/abc/def/newstuff.html</code>.</p>
-
-<note><title>For Apache Hackers</title>
-<p>The following list gives detailed information about
-              the internal processing steps:</p>
-<pre>
-Request:
-  /xyz/oldstuff.html
-
-Internal Processing:
-  /xyz/oldstuff.html     -&gt; /abc/def/oldstuff.html  (per-server Alias)
-  /abc/def/oldstuff.html -&gt; /abc/def/newstuff.html  (per-dir    RewriteRule)
-  /abc/def/newstuff.html -&gt; /xyz/newstuff.html      (per-dir    RewriteBase)
-  /xyz/newstuff.html     -&gt; /abc/def/newstuff.html  (per-server Alias)
-
-Result:
-  /abc/def/newstuff.html
-</pre>
-              <p>This seems very complicated but is
-              the correct Apache internal processing, because the
-              per-directory rewriting comes too late in the
-              process. So, when it occurs the (rewritten) request
-              has to be re-injected into the Apache kernel! BUT:
-              While this seems like a serious overhead, it really
-              isn't, because this re-injection happens fully
-              internally to the Apache server and the same
-              procedure is used by many other operations inside
-              Apache. So, you can be sure the design and
-              implementation is correct.</p>
-</note>
-
-</usage>
-
-</directivesynopsis>
-
-<directivesynopsis>
-<name>RewriteCond</name>
-<description>Defines a condition under which rewriting will take place
-</description>
-<syntax> RewriteCond
-      <em>TestString</em> <em>CondPattern</em></syntax>
-<default>None</default>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-
-<usage>
-      <p>The <directive>RewriteCond</directive> directive defines a
-      rule condition. Precede a <directive
-      module="mod_rewrite">RewriteRule</directive> directive with one
-      or more <directive>RewriteCond</directive> directives. The following
-      rewriting rule is only used if its pattern matches the current
-      state of the URI <strong>and</strong> if these additional
-      conditions apply too.</p>
-
-      <p><em>TestString</em> is a string which can contains the
-      following expanded constructs in addition to plain text:</p>
-
-      <ul>
-        <li>
-          <strong>RewriteRule backreferences</strong>: These are
-          backreferences of the form 
-
-          <blockquote>
-            <strong><code>$N</code></strong>
-          </blockquote>
-          (0 &lt;= N &lt;= 9) which provide access to the grouped
-          parts (parenthesis!) of the pattern from the
-          corresponding <code>RewriteRule</code> directive (the one
-          following the current bunch of <code>RewriteCond</code>
-          directives).
-        </li>
-
-        <li>
-          <strong>RewriteCond backreferences</strong>: These are
-          backreferences of the form 
-
-          <blockquote>
-            <strong><code>%N</code></strong>
-          </blockquote>
-          (1 &lt;= N &lt;= 9) which provide access to the grouped
-          parts (parentheses!) of the pattern from the last matched
-          <code>RewriteCond</code> directive in the current bunch
-          of conditions.
-        </li>
-
-        <li>
-          <strong>RewriteMap expansions</strong>: These are
-          expansions of the form 
-
-          <blockquote>
-            <strong><code>${mapname:key|default}</code></strong>
-          </blockquote>
-          See <a href="#mapfunc">the documentation for
-          RewriteMap</a> for more details.
-        </li>
-
-        <li>
-          <strong>Server-Variables</strong>: These are variables of
-          the form 
-
-          <blockquote>
-            <strong><code>%{</code> <em>NAME_OF_VARIABLE</em>
-            <code>}</code></strong>
-          </blockquote>
-          where <em>NAME_OF_VARIABLE</em> can be a string taken
-          from the following list: 
-
-          <table bgcolor="#F0F0F0" cellspacing="0" cellpadding="5">
-            <tr>
-              <td>
-                <strong>HTTP headers:</strong> 
-
-                <p>HTTP_USER_AGENT<br />
-                 HTTP_REFERER<br />
-                 HTTP_COOKIE<br />
-                 HTTP_FORWARDED<br />
-                 HTTP_HOST<br />
-                 HTTP_PROXY_CONNECTION<br />
-                 HTTP_ACCEPT<br />
-                </p>
-              </td>
-
-              <td>
-                <strong>connection &amp; request:</strong> 
-
-                <p>REMOTE_ADDR<br />
-                 REMOTE_HOST<br />
-                 REMOTE_USER<br />
-                 REMOTE_IDENT<br />
-                 REQUEST_METHOD<br />
-                 SCRIPT_FILENAME<br />
-                 PATH_INFO<br />
-                 QUERY_STRING<br />
-                 AUTH_TYPE<br />
-                </p>
-              </td>
-            </tr>
-
-            <tr>
-              <td>
-                <strong>server internals:</strong> 
-
-                <p>DOCUMENT_ROOT<br />
-                 SERVER_ADMIN<br />
-                 SERVER_NAME<br />
-                 SERVER_ADDR<br />
-                 SERVER_PORT<br />
-                 SERVER_PROTOCOL<br />
-                 SERVER_SOFTWARE<br />
-                </p>
-              </td>
-
-              <td>
-                <strong>system stuff:</strong> 
-
-                <p>TIME_YEAR<br />
-                 TIME_MON<br />
-                 TIME_DAY<br />
-                 TIME_HOUR<br />
-                 TIME_MIN<br />
-                 TIME_SEC<br />
-                 TIME_WDAY<br />
-                 TIME<br />
-                </p>
-              </td>
-
-              <td>
-                <strong>specials:</strong> 
-
-                <p>API_VERSION<br />
-                 THE_REQUEST<br />
-                 REQUEST_URI<br />
-                 REQUEST_FILENAME<br />
-                 IS_SUBREQ<br />
-                </p>
-              </td>
-            </tr>
-          </table>
-
-<note>
-                <p>These variables all
-                correspond to the similarly named HTTP
-                MIME-headers, C variables of the Apache server or
-                <code>struct tm</code> fields of the Unix system.
-                Most are documented elsewhere in the Manual or in
-                the CGI specification. Those that are special to
-                mod_rewrite include:</p>
-
-                <dl>
-                  <dt><code>IS_SUBREQ</code></dt>
-
-                  <dd>Will contain the text "true" if the request
-                  currently being processed is a sub-request,
-                  "false" otherwise. Sub-requests may be generated
-                  by modules that need to resolve additional files
-                  or URIs in order to complete their tasks.</dd>
-
-                  <dt><code>API_VERSION</code></dt>
-
-                  <dd>This is the version of the Apache module API
-                  (the internal interface between server and
-                  module) in the current httpd build, as defined in
-                  include/ap_mmn.h. The module API version
-                  corresponds to the version of Apache in use (in
-                  the release version of Apache 1.3.14, for
-                  instance, it is 19990320:10), but is mainly of
-                  interest to module authors.</dd>
-
-                  <dt><code>THE_REQUEST</code></dt>
-
-                  <dd>The full HTTP request line sent by the
-                  browser to the server (e.g., "<code>GET
-                  /index.html HTTP/1.1</code>"). This does not
-                  include any additional headers sent by the
-                  browser.</dd>
-
-                  <dt><code>REQUEST_URI</code></dt>
-
-                  <dd>The resource requested in the HTTP request
-                  line. (In the example above, this would be
-                  "/index.html".)</dd>
-
-                  <dt><code>REQUEST_FILENAME</code></dt>
-
-                  <dd>The full local filesystem path to the file or
-                  script matching the request.</dd>
-                </dl>
-</note>
-        </li>
-      </ul>
-
-      <p>Special Notes:</p>
-
-      <ol>
-        <li>The variables SCRIPT_FILENAME and REQUEST_FILENAME
-        contain the same value, <em>i.e.</em>, the value of the
-        <code>filename</code> field of the internal
-        <code>request_rec</code> structure of the Apache server.
-        The first name is just the commonly known CGI variable name
-        while the second is the consistent counterpart to
-        REQUEST_URI (which contains the value of the
-        <code>uri</code> field of <code>request_rec</code>).</li>
-
-        <li>There is the special format:
-        <code>%{ENV:variable}</code> where <em>variable</em> can be
-        any environment variable. This is looked-up via internal
-        Apache structures and (if not found there) via
-        <code>getenv()</code> from the Apache server process.</li>
-
-        <li>There is the special format:
-        <code>%{HTTP:header}</code> where <em>header</em> can be
-        any HTTP MIME-header name. This is looked-up from the HTTP
-        request. Example: <code>%{HTTP:Proxy-Connection}</code> is
-        the value of the HTTP header
-        ``<code>Proxy-Connection:</code>''.</li>
-
-        <li>There is the special format
-        <code>%{LA-U:variable}</code> for look-aheads which perform
-        an internal (URL-based) sub-request to determine the final
-        value of <em>variable</em>. Use this when you want to use a
-        variable for rewriting which is actually set later in an
-        API phase and thus is not available at the current stage.
-        For instance when you want to rewrite according to the
-        <code>REMOTE_USER</code> variable from within the
-        per-server context (<code>httpd.conf</code> file) you have
-        to use <code>%{LA-U:REMOTE_USER}</code> because this
-        variable is set by the authorization phases which come
-        <em>after</em> the URL translation phase where mod_rewrite
-        operates. On the other hand, because mod_rewrite implements
-        its per-directory context (<code>.htaccess</code> file) via
-        the Fixup phase of the API and because the authorization
-        phases come <em>before</em> this phase, you just can use
-        <code>%{REMOTE_USER}</code> there.</li>
-
-        <li>There is the special format:
-        <code>%{LA-F:variable}</code> which performs an internal
-        (filename-based) sub-request to determine the final value
-        of <em>variable</em>. Most of the time this is the same as
-        LA-U above.</li>
-      </ol>
-
-      <p><em>CondPattern</em> is the condition pattern,
-      <em>i.e.</em>, a regular expression which is applied to the
-      current instance of the <em>TestString</em>, <em>i.e.</em>,
-      <em>TestString</em> is evaluated and then matched against
-      <em>CondPattern</em>.</p>
-
-      <p><strong>Remember:</strong> <em>CondPattern</em> is a
-      standard <em>Extended Regular Expression</em> with some
-      additions:</p>
-
-      <ol>
-        <li>You can prefix the pattern string with a
-        '<code>!</code>' character (exclamation mark) to specify a
-        <strong>non</strong>-matching pattern.</li>
-
-        <li>
-          There are some special variants of <em>CondPatterns</em>.
-          Instead of real regular expression strings you can also
-          use one of the following: 
-
-          <ul>
-            <li>'<strong>&lt;CondPattern</strong>' (is lexically
-            lower)<br />
-             Treats the <em>CondPattern</em> as a plain string and
-            compares it lexically to <em>TestString</em>. True if
-            <em>TestString</em> is lexically lower than
-            <em>CondPattern</em>.</li>
-
-            <li>'<strong>&gt;CondPattern</strong>' (is lexically
-            greater)<br />
-             Treats the <em>CondPattern</em> as a plain string and
-            compares it lexically to <em>TestString</em>. True if
-            <em>TestString</em> is lexically greater than
-            <em>CondPattern</em>.</li>
-
-            <li>'<strong>=CondPattern</strong>' (is lexically
-            equal)<br />
-             Treats the <em>CondPattern</em> as a plain string and
-            compares it lexically to <em>TestString</em>. True if
-            <em>TestString</em> is lexically equal to
-            <em>CondPattern</em>, i.e the two strings are exactly
-            equal (character by character). If <em>CondPattern</em>
-            is just <code>""</code> (two quotation marks) this
-            compares <em>TestString</em> to the empty string.</li>
-
-            <li>'<strong>-d</strong>' (is
-            <strong>d</strong>irectory)<br />
-             Treats the <em>TestString</em> as a pathname and tests
-            if it exists and is a directory.</li>
-
-            <li>'<strong>-f</strong>' (is regular
-            <strong>f</strong>ile)<br />
-             Treats the <em>TestString</em> as a pathname and tests
-            if it exists and is a regular file.</li>
-
-            <li>'<strong>-s</strong>' (is regular file with
-            <strong>s</strong>ize)<br />
-             Treats the <em>TestString</em> as a pathname and tests
-            if it exists and is a regular file with size greater
-            than zero.</li>
-
-            <li>'<strong>-l</strong>' (is symbolic
-            <strong>l</strong>ink)<br />
-             Treats the <em>TestString</em> as a pathname and tests
-            if it exists and is a symbolic link.</li>
-
-            <li>'<strong>-F</strong>' (is existing file via
-            subrequest)<br />
-             Checks if <em>TestString</em> is a valid file and
-            accessible via all the server's currently-configured
-            access controls for that path. This uses an internal
-            subrequest to determine the check, so use it with care
-            because it decreases your servers performance!</li>
-
-            <li>'<strong>-U</strong>' (is existing URL via
-            subrequest)<br />
-             Checks if <em>TestString</em> is a valid URL and
-            accessible via all the server's currently-configured
-            access controls for that path. This uses an internal
-            subrequest to determine the check, so use it with care
-            because it decreases your server's performance!</li>
-          </ul>
-
-<note><title>Notice</title>
-              All of these tests can
-              also be prefixed by an exclamation mark ('!') to
-              negate their meaning.
-</note>
-        </li>
-      </ol>
-
-      <p>Additionally you can set special flags for
-      <em>CondPattern</em> by appending</p>
-
-      <blockquote>
-        <strong><code>[</code><em>flags</em><code>]</code></strong>
-      </blockquote>
-
-      <p>as the third argument to the <code>RewriteCond</code>
-      directive. <em>Flags</em> is a comma-separated list of the
-      following flags:</p>
-
-      <ul>
-        <li>'<strong><code>nocase|NC</code></strong>'
-        (<strong>n</strong>o <strong>c</strong>ase)<br />
-         This makes the test case-insensitive, <em>i.e.</em>, there
-        is no difference between 'A-Z' and 'a-z' both in the
-        expanded <em>TestString</em> and the <em>CondPattern</em>.
-        This flag is effective only for comparisons between
-        <em>TestString</em> and <em>CondPattern</em>. It has no
-        effect on filesystem and subrequest checks.</li>
-
-        <li>
-          '<strong><code>ornext|OR</code></strong>'
-          (<strong>or</strong> next condition)<br />
-           Use this to combine rule conditions with a local OR
-          instead of the implicit AND. Typical example: 
-
-<example>
-<pre>
-RewriteCond %{REMOTE_HOST}  ^host1.*  [OR]
-RewriteCond %{REMOTE_HOST}  ^host2.*  [OR]
-RewriteCond %{REMOTE_HOST}  ^host3.*
-RewriteRule ...some special stuff for any of these hosts...
-</pre>
-</example>
-
-          Without this flag you would have to write the cond/rule
-          three times.
-        </li>
-      </ul>
-
-      <p><strong>Example:</strong></p>
-
-       <p>To rewrite the Homepage of a site according to the
-        ``<code>User-Agent:</code>'' header of the request, you can
-        use the following: </p>
-
-<example>
-<pre>
-RewriteCond  %{HTTP_USER_AGENT}  ^Mozilla.*
-RewriteRule  ^/$                 /homepage.max.html  [L]
-
-RewriteCond  %{HTTP_USER_AGENT}  ^Lynx.*
-RewriteRule  ^/$                 /homepage.min.html  [L]
-
-RewriteRule  ^/$                 /homepage.std.html  [L]
-</pre>
-</example>
-
-        <p>Interpretation: If you use Netscape Navigator as your
-        browser (which identifies itself as 'Mozilla'), then you
-        get the max homepage, which includes Frames, <em>etc.</em>
-        If you use the Lynx browser (which is Terminal-based), then
-        you get the min homepage, which contains no images, no
-        tables, <em>etc.</em> If you use any other browser you get
-        the standard homepage.</p>
-
-</usage>
-
-</directivesynopsis>
-
-<directivesynopsis>
-<name>RewriteRule</name>
-<description>Defines rules for the rewriting engine</description>
-<syntax>RewriteRule
-      <em>Pattern</em> <em>Substitution</em></syntax>
-<default>None</default>
-<contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context><context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-
-<usage>
-      <p>The <directive>RewriteRule</directive> directive is the real
-      rewriting workhorse. The directive can occur more than once.
-      Each directive then defines one single rewriting rule. The
-      <strong>definition order</strong> of these rules is
-      <strong>important</strong>, because this order is used when
-      applying the rules at run-time.</p>
-
-      <p><a id="patterns" name="patterns"><em>Pattern</em></a> can
-      be (for Apache 1.1.x a System V8 and for Apache 1.2.x and
-      later a POSIX) <a id="regexp" name="regexp">regular
-      expression</a> which gets applied to the current URL. Here
-      ``current'' means the value of the URL when this rule gets
-      applied. This may not be the originally requested URL,
-      because any number of rules may already have matched and made
-      alterations to it.</p>
-
-      <p>Some hints about the syntax of regular expressions:</p>
-
-      <table bgcolor="#F0F0F0" cellspacing="0" cellpadding="5">
-        <tr>
-          <td>
-<pre>
-<strong>Text:</strong>
-  <strong><code>.</code></strong>           Any single character
-  <strong><code>[</code></strong>chars<strong><code>]</code></strong>     Character class: One  of chars
-  <strong><code>[^</code></strong>chars<strong><code>]</code></strong>    Character class: None of chars
-  text1<strong><code>|</code></strong>text2 Alternative: text1 or text2
-
-<strong>Quantifiers:</strong>
-  <strong><code>?</code></strong>           0 or 1 of the preceding text
-  <strong><code>*</code></strong>           0 or N of the preceding text (N &gt; 0)
-  <strong><code>+</code></strong>           1 or N of the preceding text (N &gt; 1)
-
-<strong>Grouping:</strong>
-  <strong><code>(</code></strong>text<strong><code>)</code></strong>      Grouping of text
-              (either to set the borders of an alternative or
-              for making backreferences where the <strong>N</strong>th group can 
-              be used on the RHS of a RewriteRule with <code>$</code><strong>N</strong>)
-
-<strong>Anchors:</strong>
-  <strong><code>^</code></strong>           Start of line anchor
-  <strong><code>$</code></strong>           End   of line anchor
-
-<strong>Escaping:</strong>
-  <strong><code>\</code></strong>char       escape that particular char
-              (for instance to specify the chars "<code>.[]()</code>" <em>etc.</em>)
-</pre>
-          </td>
-        </tr>
-      </table>
-
-      <p>For more information about regular expressions either have
-      a look at your local regex(3) manpage or its
-      <code>src/regex/regex.3</code> copy in the Apache 1.3
-      distribution. If you are interested in more detailed
-      information about regular expressions and their variants
-      (POSIX regex, Perl regex, <em>etc.</em>) have a look at the
-      following dedicated book on this topic:</p>
-
-      <blockquote>
-        <em>Mastering Regular Expressions</em><br />
-         Jeffrey E.F. Friedl<br />
-         Nutshell Handbook Series<br />
-         O'Reilly &amp; Associates, Inc. 1997<br />
-         ISBN 1-56592-257-3<br />
-      </blockquote>
-
-      <p>Additionally in mod_rewrite the NOT character
-      ('<code>!</code>') is a possible pattern prefix. This gives
-      you the ability to negate a pattern; to say, for instance:
-      ``<em>if the current URL does <strong>NOT</strong> match this
-      pattern</em>''. This can be used for exceptional cases, where
-      it is easier to match the negative pattern, or as a last
-      default rule.</p>
-
-<note><title>Notice</title>
-When using the NOT character
-          to negate a pattern you cannot have grouped wildcard
-          parts in the pattern. This is impossible because when the
-          pattern does NOT match, there are no contents for the
-          groups. In consequence, if negated patterns are used, you
-          cannot use <code>$N</code> in the substitution
-          string!
-</note>
-
-      <p><a id="rhs" name="rhs"><em>Substitution</em></a> of a
-      rewriting rule is the string which is substituted for (or
-      replaces) the original URL for which <em>Pattern</em>
-      matched. Beside plain text you can use</p>
-
-      <ol>
-        <li>back-references <code>$N</code> to the RewriteRule
-        pattern</li>
-
-        <li>back-references <code>%N</code> to the last matched
-        RewriteCond pattern</li>
-
-        <li>server-variables as in rule condition test-strings
-        (<code>%{VARNAME}</code>)</li>
-
-        <li><a href="#mapfunc">mapping-function</a> calls
-        (<code>${mapname:key|default}</code>)</li>
-      </ol>
-      <p>Back-references are <code>$</code><strong>N</strong>
-      (<strong>N</strong>=0..9) identifiers which will be replaced
-      by the contents of the <strong>N</strong>th group of the
-      matched <em>Pattern</em>. The server-variables are the same
-      as for the <em>TestString</em> of a <code>RewriteCond</code>
-      directive. The mapping-functions come from the
-      <code>RewriteMap</code> directive and are explained there.
-      These three types of variables are expanded in the order of
-      the above list. </p>
-
-      <p>As already mentioned above, all the rewriting rules are
-      applied to the <em>Substitution</em> (in the order of
-      definition in the config file). The URL is <strong>completely
-      replaced</strong> by the <em>Substitution</em> and the
-      rewriting process goes on until there are no more rules
-      unless explicitly terminated by a
-      <code><strong>L</strong></code> flag - see below.</p>
-
-      <p>There is a special substitution string named
-      '<code>-</code>' which means: <strong>NO
-      substitution</strong>! Sounds silly? No, it is useful to
-      provide rewriting rules which <strong>only</strong> match
-      some URLs but do no substitution, <em>e.g.</em>, in
-      conjunction with the <strong>C</strong> (chain) flag to be
-      able to have more than one pattern to be applied before a
-      substitution occurs.</p>
-
-      <p>One more note: You can even create URLs in the
-      substitution string containing a query string part. Just use
-      a question mark inside the substitution string to indicate
-      that the following stuff should be re-injected into the
-      QUERY_STRING. When you want to erase an existing query
-      string, end the substitution string with just the question
-      mark.</p>
-
-<note><title>Note</title>
-There is a special feature:
-          When you prefix a substitution field with
-          <code>http://</code><em>thishost</em>[<em>:thisport</em>]
-          then <strong>mod_rewrite</strong> automatically strips it
-          out. This auto-reduction on implicit external redirect
-          URLs is a useful and important feature when used in
-          combination with a mapping-function which generates the
-          hostname part. Have a look at the first example in the
-          example section below to understand this.
-</note>
-
-<note><title>Remember</title>
- An unconditional external
-          redirect to your own server will not work with the prefix
-          <code>http://thishost</code> because of this feature. To
-          achieve such a self-redirect, you have to use the
-          <strong>R</strong>-flag (see below).
-</note>
-
-      <p>Additionally you can set special flags for
-      <em>Substitution</em> by appending</p>
-
-      <blockquote>
-        <strong><code>[</code><em>flags</em><code>]</code></strong>
-      </blockquote>
-      <p>
-      as the third argument to the <code>RewriteRule</code>
-      directive. <em>Flags</em> is a comma-separated list of the
-      following flags: </p>
-
-      <ul>
-        <li>
-          '<strong><code>redirect|R</code>
-          [=<em>code</em>]</strong>' (force <a id="redirect"
-          name="redirect"><strong>r</strong>edirect</a>)<br />
-           Prefix <em>Substitution</em> with
-          <code>http://thishost[:thisport]/</code> (which makes the
-          new URL a URI) to force a external redirection. If no
-          <em>code</em> is given a HTTP response of 302 (MOVED
-          TEMPORARILY) is used. If you want to use other response
-          codes in the range 300-400 just specify them as a number
-          or use one of the following symbolic names:
-          <code>temp</code> (default), <code>permanent</code>,
-          <code>seeother</code>. Use it for rules which should
-          canonicalize the URL and give it back to the client,
-          <em>e.g.</em>, translate ``<code>/~</code>'' into
-          ``<code>/u/</code>'' or always append a slash to
-          <code>/u/</code><em>user</em>, etc.<br />
-           
-
-          <p><strong>Note:</strong> When you use this flag, make
-          sure that the substitution field is a valid URL! If not,
-          you are redirecting to an invalid location! And remember
-          that this flag itself only prefixes the URL with
-          <code>http://thishost[:thisport]/</code>, rewriting
-          continues. Usually you also want to stop and do the
-          redirection immediately. To stop the rewriting you also
-          have to provide the 'L' flag.</p>
-        </li>
-
-        <li>'<strong><code>forbidden|F</code></strong>' (force URL
-        to be <strong>f</strong>orbidden)<br />
-         This forces the current URL to be forbidden,
-        <em>i.e.</em>, it immediately sends back a HTTP response of
-        403 (FORBIDDEN). Use this flag in conjunction with
-        appropriate RewriteConds to conditionally block some
-        URLs.</li>
-
-        <li>'<strong><code>gone|G</code></strong>' (force URL to be
-        <strong>g</strong>one)<br />
-         This forces the current URL to be gone, <em>i.e.</em>, it
-        immediately sends back a HTTP response of 410 (GONE). Use
-        this flag to mark pages which no longer exist as gone.</li>
-
-        <li>
-          '<strong><code>proxy|P</code></strong>' (force
-          <strong>p</strong>roxy)<br />
-           This flag forces the substitution part to be internally
-          forced as a proxy request and immediately (<em>i.e.</em>,
-          rewriting rule processing stops here) put through the <a
-          href="mod_proxy.html">proxy module</a>. You have to make
-          sure that the substitution string is a valid URI
-          (<em>e.g.</em>, typically starting with
-          <code>http://</code><em>hostname</em>) which can be
-          handled by the Apache proxy module. If not you get an
-          error from the proxy module. Use this flag to achieve a
-          more powerful implementation of the <a
-          href="mod_proxy.html#proxypass">ProxyPass</a> directive,
-          to map some remote stuff into the namespace of the local
-          server. 
-
-          <p>Notice: To use this functionality make sure you have
-          the proxy module compiled into your Apache server
-          program. If you don't know please check whether
-          <code>mod_proxy.c</code> is part of the ``<code>httpd
-          -l</code>'' output. If yes, this functionality is
-          available to mod_rewrite. If not, then you first have to
-          rebuild the ``<code>httpd</code>'' program with mod_proxy
-          enabled.</p>
-        </li>
-
-        <li>'<strong><code>last|L</code></strong>'
-        (<strong>l</strong>ast rule)<br />
-         Stop the rewriting process here and don't apply any more
-        rewriting rules. This corresponds to the Perl
-        <code>last</code> command or the <code>break</code> command
-        from the C language. Use this flag to prevent the currently
-        rewritten URL from being rewritten further by following
-        rules. For example, use it to rewrite the root-path URL
-        ('<code>/</code>') to a real one, <em>e.g.</em>,
-        '<code>/e/www/</code>'.</li>
-
-        <li>'<strong><code>next|N</code></strong>'
-        (<strong>n</strong>ext round)<br />
-         Re-run the rewriting process (starting again with the
-        first rewriting rule). Here the URL to match is again not
-        the original URL but the URL from the last rewriting rule.
-        This corresponds to the Perl <code>next</code> command or
-        the <code>continue</code> command from the C language. Use
-        this flag to restart the rewriting process, <em>i.e.</em>,
-        to immediately go to the top of the loop.<br />
-         <strong>But be careful not to create an infinite
-        loop!</strong></li>
-
-        <li>'<strong><code>chain|C</code></strong>'
-        (<strong>c</strong>hained with next rule)<br />
-         This flag chains the current rule with the next rule
-        (which itself can be chained with the following rule,
-        <em>etc.</em>). This has the following effect: if a rule
-        matches, then processing continues as usual, <em>i.e.</em>,
-        the flag has no effect. If the rule does
-        <strong>not</strong> match, then all following chained
-        rules are skipped. For instance, use it to remove the
-        ``<code>.www</code>'' part inside a per-directory rule set
-        when you let an external redirect happen (where the
-        ``<code>.www</code>'' part should not to occur!).</li>
-
-        <li>
-        '<strong><code>type|T</code></strong>=<em>MIME-type</em>'
-        (force MIME <strong>t</strong>ype)<br />
-         Force the MIME-type of the target file to be
-        <em>MIME-type</em>. For instance, this can be used to
-        simulate the <code>mod_alias</code> directive
-        <code>ScriptAlias</code> which internally forces all files
-        inside the mapped directory to have a MIME type of
-        ``<code>application/x-httpd-cgi</code>''.</li>
-
-        <li>
-          '<strong><code>nosubreq|NS</code></strong>' (used only if
-          <strong>n</strong>o internal
-          <strong>s</strong>ub-request)<br />
-           This flag forces the rewriting engine to skip a
-          rewriting rule if the current request is an internal
-          sub-request. For instance, sub-requests occur internally
-          in Apache when <code>mod_include</code> tries to find out
-          information about possible directory default files
-          (<code>index.xxx</code>). On sub-requests it is not
-          always useful and even sometimes causes a failure to if
-          the complete set of rules are applied. Use this flag to
-          exclude some rules.<br />
-           
-
-          <p>Use the following rule for your decision: whenever you
-          prefix some URLs with CGI-scripts to force them to be
-          processed by the CGI-script, the chance is high that you
-          will run into problems (or even overhead) on
-          sub-requests. In these cases, use this flag.</p>
-        </li>
-
-        <li>'<strong><code>nocase|NC</code></strong>'
-        (<strong>n</strong>o <strong>c</strong>ase)<br />
-         This makes the <em>Pattern</em> case-insensitive,
-        <em>i.e.</em>, there is no difference between 'A-Z' and
-        'a-z' when <em>Pattern</em> is matched against the current
-        URL.</li>
-
-        <li>'<strong><code>qsappend|QSA</code></strong>'
-        (<strong>q</strong>uery <strong>s</strong>tring
-        <strong>a</strong>ppend)<br />
-         This flag forces the rewriting engine to append a query
-        string part in the substitution string to the existing one
-        instead of replacing it. Use this when you want to add more
-        data to the query string via a rewrite rule.</li>
-
-        <li>
-          '<strong><code>noescape|NE</code></strong>'
-          (<strong>n</strong>o URI <strong>e</strong>scaping of
-          output)<br />
-           This flag keeps mod_rewrite from applying the usual URI
-          escaping rules to the result of a rewrite. Ordinarily,
-          special characters (such as '%', '$', ';', and so on)
-          will be escaped into their hexcode equivalents ('%25',
-          '%24', and '%3B', respectively); this flag prevents this
-          from being done. This allows percent symbols to appear in
-          the output, as in 
-<example>
-    RewriteRule /foo/(.*) /bar?arg=P1\%3d$1 [R,NE]
-</example>
-
-          which would turn '<code>/foo/zed</code>' into a safe
-          request for '<code>/bar?arg=P1=zed</code>'. 
-        </li>
-
-        <li>
-          '<strong><code>passthrough|PT</code></strong>'
-          (<strong>p</strong>ass <strong>t</strong>hrough to next
-          handler)<br />
-           This flag forces the rewriting engine to set the
-          <code>uri</code> field of the internal
-          <code>request_rec</code> structure to the value of the
-          <code>filename</code> field. This flag is just a hack to
-          be able to post-process the output of
-          <code>RewriteRule</code> directives by
-          <code>Alias</code>, <code>ScriptAlias</code>,
-          <code>Redirect</code>, <em>etc.</em> directives from
-          other URI-to-filename translators. A trivial example to
-          show the semantics: If you want to rewrite
-          <code>/abc</code> to <code>/def</code> via the rewriting
-          engine of <code>mod_rewrite</code> and then
-          <code>/def</code> to <code>/ghi</code> with
-          <code>mod_alias</code>: 
-<example>
-    RewriteRule ^/abc(.*)  /def$1 [PT]<br />
-    Alias       /def       /ghi
-</example>
-          If you omit the <code>PT</code> flag then
-          <code>mod_rewrite</code> will do its job fine,
-          <em>i.e.</em>, it rewrites <code>uri=/abc/...</code> to
-          <code>filename=/def/...</code> as a full API-compliant
-          URI-to-filename translator should do. Then
-          <code>mod_alias</code> comes and tries to do a
-          URI-to-filename transition which will not work. 
-
-          <p>Note: <strong>You have to use this flag if you want to
-          intermix directives of different modules which contain
-          URL-to-filename translators</strong>. The typical example
-          is the use of <code>mod_alias</code> and
-          <code>mod_rewrite</code>..</p>
-
-<note><title>For Apache hackers</title>
-               If the current Apache API had a filename-to-filename
-              hook additionally to the URI-to-filename hook then we
-              wouldn't need this flag! But without such a hook this
-              flag is the only solution. The Apache Group has
-              discussed this problem and will add such a hook in
-              Apache version 2.0.
-</note>
-        </li>
-
-        <li>'<strong><code>skip|S</code></strong>=<em>num</em>'
-        (<strong>s</strong>kip next rule(s))<br />
-         This flag forces the rewriting engine to skip the next
-        <em>num</em> rules in sequence when the current rule
-        matches. Use this to make pseudo if-then-else constructs:
-        The last rule of the then-clause becomes
-        <code>skip=N</code> where N is the number of rules in the
-        else-clause. (This is <strong>not</strong> the same as the
-        'chain|C' flag!)</li>
-
-        <li>
-        '<strong><code>env|E=</code></strong><em>VAR</em>:<em>VAL</em>'
-        (set <strong>e</strong>nvironment variable)<br />
-         This forces an environment variable named <em>VAR</em> to
-        be set to the value <em>VAL</em>, where <em>VAL</em> can
-        contain regexp backreferences <code>$N</code> and
-        <code>%N</code> which will be expanded. You can use this
-        flag more than once to set more than one variable. The
-        variables can be later dereferenced in many situations, but
-        usually from within XSSI (via <code>&lt;!--#echo
-        var="VAR"--&gt;</code>) or CGI (<em>e.g.</em>
-        <code>$ENV{'VAR'}</code>). Additionally you can dereference
-        it in a following RewriteCond pattern via
-        <code>%{ENV:VAR}</code>. Use this to strip but remember
-        information from URLs.</li>
-      </ul>
-
-<note><title>Note</title> Never forget that <em>Pattern</em> is
-applied to a complete URL in per-server configuration
-files. <strong>But in per-directory configuration files, the
-per-directory prefix (which always is the same for a specific
-directory!) is automatically <em>removed</em> for the pattern matching
-and automatically <em>added</em> after the substitution has been
-done.</strong> This feature is essential for many sorts of rewriting,
-because without this prefix stripping you have to match the parent
-directory which is not always possible.
-
-            <p>There is one exception: If a substitution string
-            starts with ``<code>http://</code>'' then the directory
-            prefix will <strong>not</strong> be added and an
-            external redirect or proxy throughput (if flag
-            <strong>P</strong> is used!) is forced!</p>
-</note>
-
-<note><title>Note</title>
- To enable the rewriting engine
-          for per-directory configuration files you need to set
-          ``<code>RewriteEngine On</code>'' in these files
-          <strong>and</strong> ``<code>Options
-          FollowSymLinks</code>'' must be enabled. If your
-          administrator has disabled override of
-          <code>FollowSymLinks</code> for a user's directory, then
-          you cannot use the rewriting engine. This restriction is
-          needed for security reasons.
-</note>
-
-      <p>Here are all possible substitution combinations and their
-      meanings:</p>
-
-      <p><strong>Inside per-server configuration
-      (<code>httpd.conf</code>)<br />
-       for request ``<code>GET
-      /somepath/pathinfo</code>'':</strong><br />
-      </p>
-
-      <table bgcolor="#F0F0F0" cellspacing="0" cellpadding="5">
-        <tr>
-          <td>
-<pre>
-<strong>Given Rule</strong>                                      <strong>Resulting Substitution</strong>
-----------------------------------------------  ----------------------------------
-^/somepath(.*) otherpath$1                      not supported, because invalid!
-
-^/somepath(.*) otherpath$1  [R]                 not supported, because invalid!
-
-^/somepath(.*) otherpath$1  [P]                 not supported, because invalid!
-----------------------------------------------  ----------------------------------
-^/somepath(.*) /otherpath$1                     /otherpath/pathinfo
-
-^/somepath(.*) /otherpath$1 [R]                 http://thishost/otherpath/pathinfo
-                                                via external redirection
-
-^/somepath(.*) /otherpath$1 [P]                 not supported, because silly!
-----------------------------------------------  ----------------------------------
-^/somepath(.*) http://thishost/otherpath$1      /otherpath/pathinfo
-
-^/somepath(.*) http://thishost/otherpath$1 [R]  http://thishost/otherpath/pathinfo
-                                                via external redirection
-
-^/somepath(.*) http://thishost/otherpath$1 [P]  not supported, because silly!
-----------------------------------------------  ----------------------------------
-^/somepath(.*) http://otherhost/otherpath$1     http://otherhost/otherpath/pathinfo
-                                                via external redirection
-
-^/somepath(.*) http://otherhost/otherpath$1 [R] http://otherhost/otherpath/pathinfo
-                                                via external redirection
-                                                (the [R] flag is redundant)
-
-^/somepath(.*) http://otherhost/otherpath$1 [P] http://otherhost/otherpath/pathinfo
-                                                via internal proxy
-</pre>
-          </td>
-        </tr>
-      </table>
-
-      <p><strong>Inside per-directory configuration for
-      <code>/somepath</code><br />
-       (<em>i.e.</em>, file <code>.htaccess</code> in dir
-      <code>/physical/path/to/somepath</code> containing
-      <code>RewriteBase /somepath</code>)<br />
-       for request ``<code>GET
-      /somepath/localpath/pathinfo</code>'':</strong><br /> 
-     </p>
-
-      <table bgcolor="#F0F0F0" cellspacing="0" cellpadding="5">
-        <tr>
-          <td>
-<pre>
-<strong>Given Rule</strong>                                      <strong>Resulting Substitution</strong>
-----------------------------------------------  ----------------------------------
-^localpath(.*) otherpath$1                      /somepath/otherpath/pathinfo
-
-^localpath(.*) otherpath$1  [R]                 http://thishost/somepath/otherpath/pathinfo
-                                                via external redirection
-
-^localpath(.*) otherpath$1  [P]                 not supported, because silly!
-----------------------------------------------  ----------------------------------
-^localpath(.*) /otherpath$1                     /otherpath/pathinfo
-
-^localpath(.*) /otherpath$1 [R]                 http://thishost/otherpath/pathinfo
-                                                via external redirection
-
-^localpath(.*) /otherpath$1 [P]                 not supported, because silly!
-----------------------------------------------  ----------------------------------
-^localpath(.*) http://thishost/otherpath$1      /otherpath/pathinfo
-
-^localpath(.*) http://thishost/otherpath$1 [R]  http://thishost/otherpath/pathinfo
-                                                via external redirection
-
-^localpath(.*) http://thishost/otherpath$1 [P]  not supported, because silly!
-----------------------------------------------  ----------------------------------
-^localpath(.*) http://otherhost/otherpath$1     http://otherhost/otherpath/pathinfo
-                                                via external redirection
-
-^localpath(.*) http://otherhost/otherpath$1 [R] http://otherhost/otherpath/pathinfo
-                                                via external redirection
-                                                (the [R] flag is redundant)
-
-^localpath(.*) http://otherhost/otherpath$1 [P] http://otherhost/otherpath/pathinfo
-                                                via internal proxy
-</pre>
-          </td>
-        </tr>
-      </table>
-
-      <p><strong>Example:</strong></p>
-
-      <p>We want to rewrite URLs of the form </p>
-
-        <blockquote>
-          <code>/</code> <em>Language</em> <code>/~</code>
-          <em>Realname</em> <code>/.../</code> <em>File</em>
-        </blockquote>
-
-        <p>into </p>
-
-        <blockquote>
-          <code>/u/</code> <em>Username</em> <code>/.../</code>
-          <em>File</em> <code>.</code> <em>Language</em>
-        </blockquote>
-
-        <p>We take the rewrite mapfile from above and save it under
-        <code>/path/to/file/map.txt</code>. Then we only have to
-        add the following lines to the Apache server configuration
-        file:</p>
-
-<example>
-<pre>
-RewriteLog   /path/to/file/rewrite.log
-RewriteMap   real-to-user               txt:/path/to/file/map.txt
-RewriteRule  ^/([^/]+)/~([^/]+)/(.*)$   /u/${real-to-user:$2|nobody}/$3.$1
-</pre>
-   </example>
-  </usage>
- </directivesynopsis>
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_setenvif.html b/docs/manual/mod/mod_setenvif.html
deleted file mode 100644
index e27c58a..0000000
--- a/docs/manual/mod/mod_setenvif.html
+++ /dev/null
@@ -1,194 +0,0 @@
-<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-     This file is generated from xml source: DO NOT EDIT
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
---><title>mod_setenvif - Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img alt="[APACHE DOCUMENTATION]" src="../images/sub.gif"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module mod_setenvif</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td><description>Allows the setting of environment variables based
-on characteristics of the request</description></td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="module-dict.html#ModuleIdentifier" class="help">Module&nbsp;Identifier:</a></td><td>setenvif_module</td></tr><tr><td align="left" valign="top"><a href="module-dict.html#Compatibility" class="help">Compatibility:</a></td><td><compatibility>Available in Apache 1.3 and later</compatibility></td></tr></table></td></tr></table><h2>Summary</h2><summary>
-
-    <p>The <code><a href="mod_setenvif.html">mod_setenvif</a></code> module allows you to set
-    environment variables according to whether different aspects of
-    the request match regular expressions you specify. These
-    environment variables can be used by other parts of the server
-    to make decisions about actions to be taken.</p>
-
-    <p>The directives are considered in the order they appear in
-    the configuration files. So more complex sequences can be used,
-    such as this example, which sets <code>netscape</code> if the
-    browser is mozilla but not MSIE.</p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-  BrowserMatch ^Mozilla netscape<br>
-  BrowserMatch MSIE !netscape<br>
-</code></td></tr></table></blockquote>
-</summary><p><strong>See also </strong></p><ul><li><a href="../env.html">Environment Variables in Apache</a></li></ul><h2>Directives</h2><ul><li><a href="#browsermatch">BrowserMatch</a></li><li><a href="#browsermatchnocase">BrowserMatchNoCase</a></li><li><a href="#setenvif">SetEnvIf</a></li><li><a href="#setenvifnocase">SetEnvIfNoCase</a></li></ul><hr/><h2><a name="BrowserMatch">BrowserMatch</a> <a name="browsermatch">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sets environment variables conditional on HTTP User-Agent
-</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>BrowserMatch <em>regex env-variable</em>[=<em>value</em>]
-[<em>env-variable</em>[=<em>value</em>]] ...</syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>FileInfo</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_setenvif</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>Apache 1.2 and
-    above (in Apache 1.2 this directive was found in the
-    now-obsolete mod_browser module)</td></tr></table></td></tr></table><usage>
-    <p>The <code class="directive">BrowserMatch</code> directive defines
-    environment variables based on the <code>User-Agent</code> HTTP
-    request header field.  The first argument should be a POSIX.2
-    extended regular expression (similar to an
-    <code>egrep</code>-style regex). The rest of the arguments give
-    the names of variables to set, and optionally values to which they
-    should be set. These take the form of</p>
-
-    <ol>
-      <li><code><em>varname</em></code>, or</li>
-
-      <li><code>!<em>varname</em></code>, or</li>
-
-      <li><code><em>varname</em>=<em>value</em></code></li>
-    </ol>
-
-    <p>In the first form, the value will be set to "1". The second
-    will remove the given variable if already defined, and the
-    third will set the variable to the value given by
-    <code><em>value</em></code>. If a <code>User-Agent</code>
-    string matches more than one entry, they will be merged.
-    Entries are processed in the order in which they appear, and
-    later entries can override earlier ones.</p>
-
-    <p>For example:</p>
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-    BrowserMatch ^Mozilla forms jpeg=yes browser=netscape<br>
-    BrowserMatch "^Mozilla/[2-3]" tables agif frames javascript<br>
-    BrowserMatch MSIE !javascript<br>
-</code></td></tr></table></blockquote>
- 
-    <p>Note that the regular expression string is
-    <strong>case-sensitive</strong>. For case-INsensitive matching,
-    see the <a href="#browsermatchnocase" class="directive"><code class="directive">BrowserMatchNoCase</code></a>
-    directive.</p>
-
-    <p>The <code class="directive">BrowserMatch</code> and
-    <code class="directive">BrowserMatchNoCase</code> directives are special cases of
-    the <a href="#setenvif" class="directive"><code class="directive">SetEnvIf</code></a> and <a href="#setenvifnocase" class="directive"><code class="directive">SetEnvIfNoCase</code></a>
-    directives. The following two lines have the same effect:</p>
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-   BrowserMatchNoCase Robot is_a_robot<br>
-   SetEnvIfNoCase User-Agent Robot is_a_robot<br>
-</code></td></tr></table></blockquote>
-</usage><hr/><h2><a name="BrowserMatchNoCase">BrowserMatchNoCase</a> <a name="browsermatchnocase">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sets environment variables conditional on User-Agent without
-respect to case</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>BrowserMatchNoCase  <em>regex env-variable</em>[=<em>value</em>]
-    [<em>env-variable</em>[=<em>value</em>]] ...</syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>FileInfo</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_setenvif</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>Apache 1.2 and
-    above (in Apache 1.2 this directive was found in the
-    now-obsolete mod_browser module)</td></tr></table></td></tr></table><usage>
-
-    <p>The <code class="directive">BrowserMatchNoCase</code> directive is
-    semantically identical to the <a href="#browsermatch" class="directive"><code class="directive">BrowserMatch</code></a> directive.
-    However, it provides for case-insensitive matching. For
-    example:</p>
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-    BrowserMatchNoCase mac platform=macintosh<br>
-    BrowserMatchNoCase win platform=windows<br>
-</code></td></tr></table></blockquote>
-
-    <p>The <code class="directive">BrowserMatch</code> and
-    <code class="directive">BrowserMatchNoCase</code> directives are special cases of
-    the <a href="#setenvif" class="directive"><code class="directive">SetEnvIf</code></a> and <a href="#setenvifnocase" class="directive"><code class="directive">SetEnvIfNoCase</code></a>
-    directives. The following two lines have the same effect:</p>
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-   BrowserMatchNoCase Robot is_a_robot<br>
-   SetEnvIfNoCase User-Agent Robot is_a_robot<br>
-</code></td></tr></table></blockquote>
-</usage><hr/><h2><a name="SetEnvIf">SetEnvIf</a> <a name="setenvif">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sets environment variables based on attributes of the request
-</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>SetEnvIf <em>attribute
-    regex env-variable</em>[=<em>value</em>]
-    [<em>env-variable</em>[=<em>value</em>]] ...</syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>FileInfo</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_setenvif</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>Apache 1.3 and
-    above; the Request_Protocol keyword and environment-variable
-    matching are only available with 1.3.7 and later</td></tr></table></td></tr></table><usage>
-    <p>The <code class="directive">SetEnvIf</code> directive defines environment
-    variables based on attributes of the request. These attributes
-    can be the values of various HTTP request header fields (see <a href="http://www.rfc-editor.org/rfc/rfc2616.txt">RFC2616</a>
-    for more information about these), or of other aspects of the
-    request, including the following:</p>
-
-    <ul>
-      <li><code>Remote_Host</code> - the hostname (if available) of
-      the client making the request</li>
-
-      <li><code>Remote_Addr</code> - the IP address of the client
-      making the request</li>
-
-      <li><code>Remote_User</code> - the authenticated username (if
-      available)</li>
-
-      <li><code>Request_Method</code> - the name of the method
-      being used (<code>GET</code>, <code>POST</code>, <em>et
-      cetera</em>)</li>
-
-      <li><code>Request_Protocol</code> - the name and version of
-      the protocol with which the request was made (<em>e.g.</em>,
-      "HTTP/0.9", "HTTP/1.1", <em>etc.</em>)</li>
-
-      <li><code>Request_URI</code> - the portion of the URL
-      following the scheme and host portion</li>
-    </ul>
-
-    <p>Some of the more commonly used request header field names
-    include <code>Host</code>, <code>User-Agent</code>, and
-    <code>Referer</code>.</p>
-
-    <p>If the <em>attribute</em> name doesn't match any of the
-    special keywords, nor any of the request's header field names,
-    it is tested as the name of an environment variable in the list
-    of those associated with the request. This allows
-    <code class="directive">SetEnvIf</code> directives to test against the result of
-    prior matches.</p>
-
-<blockquote><table><tr><td bgcolor="#e0e5f5">
-      <strong>Only those environment variables defined by earlier
-      <code>SetEnvIf[NoCase]</code> directives are available for
-      testing in this manner. 'Earlier' means that they were
-      defined at a broader scope (such as server-wide) or
-      previously in the current directive's scope.</strong>
-</td></tr></table></blockquote>
-
-    <p><em>attribute</em> may be a regular expression when used to
-    match a request header. If <em>attribute</em> is a regular
-    expression and it doesn't match any of the request's header
-    names, then <em>attribute</em> is not tested against the
-    request's environment variable list.</p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><p align="center"><strong>Example:</strong></p><code>
-
-   SetEnvIf Request_URI "\.gif$" object_is_image=gif<br>
-   SetEnvIf Request_URI "\.jpg$" object_is_image=jpg<br>
-   SetEnvIf Request_URI "\.xbm$" object_is_image=xbm<br>
-        :<br>
-   SetEnvIf Referer www\.mydomain\.com intra_site_referral<br>
-        :<br>
-   SetEnvIf object_is_image xbm XBIT_PROCESSING=1<br>
-        :<br>
-   SetEnvIf ^TS*  ^[a-z].*  HAVE_TS<br>
-</code></td></tr></table></blockquote>
-
-    <p>The first three will set the environment variable
-    <code>object_is_image</code> if the request was for an image
-    file, and the fourth sets <code>intra_site_referral</code> if
-    the referring page was somewhere on the
-    <code>www.mydomain.com</code> Web site.</p>
-
-    <p>The last example will set environment variable
-    <code>HAVE_TS</code> if the request contains any headers that
-    begin with "TS" whose values begins with any character in the
-    set [a-z].</p>
-</usage><hr/><h2><a name="SetEnvIfNoCase">SetEnvIfNoCase</a> <a name="setenvifnocase">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sets environment variables based on attributes of the request
-without respect to case</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>SetEnvIfNoCase <em>attribute regex env-variable</em>[=<em>value</em>]
-    [<em>env-variable</em>[=<em>value</em>]] ...</syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>FileInfo</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_setenvif</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>Apache 1.3 and above</td></tr></table></td></tr></table><usage>
-
-    <p>The <code class="directive">SetEnvIfNoCase</code> is semantically identical to
-    the <a href="#setenvif" class="directive"><code class="directive">SetEnvIf</code></a> directive,
-    and differs only in that the regular expression matching is
-    performed in a case-insensitive manner. For example:</p>
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-   SetEnvIfNoCase Host Apache\.Org site=apache
-</code></td></tr></table></blockquote>
-
-    <p>This will cause the <code>site</code> environment variable
-    to be set to "<code>apache</code>" if the HTTP request header
-    field <code>Host:</code> was included and contained
-    <code>Apache.Org</code>, <code>apache.org</code>, or any other
-    combination.</p>
-</usage><hr/><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img alt="Index" src="../images/index.gif"/></a><a href="../"><img alt="Home" src="../images/home.gif"/></a></blockquote></body></html>
\ No newline at end of file
diff --git a/docs/manual/mod/mod_setenvif.xml b/docs/manual/mod/mod_setenvif.xml
deleted file mode 100644
index 865bae0..0000000
--- a/docs/manual/mod/mod_setenvif.xml
+++ /dev/null
@@ -1,263 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.xsl"?>
-<modulesynopsis>
-
-<name>mod_setenvif</name>
-<description>Allows the setting of environment variables based
-on characteristics of the request</description>
-<status>Base</status>
-<sourcefile>mod_setenvif.c</sourcefile>
-<identifier>setenvif_module</identifier>
-<compatibility>Available in Apache 1.3 and later</compatibility>
-
-
-<summary>
-
-    <p>The <module>mod_setenvif</module> module allows you to set
-    environment variables according to whether different aspects of
-    the request match regular expressions you specify. These
-    environment variables can be used by other parts of the server
-    to make decisions about actions to be taken.</p>
-
-    <p>The directives are considered in the order they appear in
-    the configuration files. So more complex sequences can be used,
-    such as this example, which sets <code>netscape</code> if the
-    browser is mozilla but not MSIE.</p>
-
-<example>
-  BrowserMatch ^Mozilla netscape<br />
-  BrowserMatch MSIE !netscape<br />
-</example>
-</summary>
-
-<seealso><a href="../env.html">Environment Variables in Apache</a></seealso>
-
-<directivesynopsis>
-<name>BrowserMatch</name>
-<description>Sets environment variables conditional on HTTP User-Agent
-</description>
-<syntax>BrowserMatch <em>regex env-variable</em>[=<em>value</em>]
-[<em>env-variable</em>[=<em>value</em>]] ...</syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context><context>directory</context>
-<context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-<compatibility>Apache 1.2 and
-    above (in Apache 1.2 this directive was found in the
-    now-obsolete mod_browser module)</compatibility>
-
-<usage>
-    <p>The <directive>BrowserMatch</directive> directive defines
-    environment variables based on the <code>User-Agent</code> HTTP
-    request header field.  The first argument should be a POSIX.2
-    extended regular expression (similar to an
-    <code>egrep</code>-style regex). The rest of the arguments give
-    the names of variables to set, and optionally values to which they
-    should be set. These take the form of</p>
-
-    <ol>
-      <li><code><em>varname</em></code>, or</li>
-
-      <li><code>!<em>varname</em></code>, or</li>
-
-      <li><code><em>varname</em>=<em>value</em></code></li>
-    </ol>
-
-    <p>In the first form, the value will be set to "1". The second
-    will remove the given variable if already defined, and the
-    third will set the variable to the value given by
-    <code><em>value</em></code>. If a <code>User-Agent</code>
-    string matches more than one entry, they will be merged.
-    Entries are processed in the order in which they appear, and
-    later entries can override earlier ones.</p>
-
-    <p>For example:</p>
-<example>
-    BrowserMatch ^Mozilla forms jpeg=yes browser=netscape<br />
-    BrowserMatch "^Mozilla/[2-3]" tables agif frames javascript<br />
-    BrowserMatch MSIE !javascript<br />
-</example>
- 
-    <p>Note that the regular expression string is
-    <strong>case-sensitive</strong>. For case-INsensitive matching,
-    see the <directive
-    module="mod_setenvif">BrowserMatchNoCase</directive>
-    directive.</p>
-
-    <p>The <directive>BrowserMatch</directive> and
-    <directive>BrowserMatchNoCase</directive> directives are special cases of
-    the <directive module="mod_setenvif">SetEnvIf</directive> and <directive
-    module="mod_setenvif">SetEnvIfNoCase</directive>
-    directives. The following two lines have the same effect:</p>
-<example>
-   BrowserMatchNoCase Robot is_a_robot<br />
-   SetEnvIfNoCase User-Agent Robot is_a_robot<br />
-</example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>BrowserMatchNoCase</name>
-<description>Sets environment variables conditional on User-Agent without
-respect to case</description>
-<syntax>BrowserMatchNoCase  <em>regex env-variable</em>[=<em>value</em>]
-    [<em>env-variable</em>[=<em>value</em>]] ...</syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context><context>directory</context>
-<context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-<compatibility>Apache 1.2 and
-    above (in Apache 1.2 this directive was found in the
-    now-obsolete mod_browser module)</compatibility>
-
-<usage>
-
-    <p>The <directive>BrowserMatchNoCase</directive> directive is
-    semantically identical to the <directive
-    module="mod_setenvif">BrowserMatch</directive> directive.
-    However, it provides for case-insensitive matching. For
-    example:</p>
-<example>
-    BrowserMatchNoCase mac platform=macintosh<br />
-    BrowserMatchNoCase win platform=windows<br />
-</example>
-
-    <p>The <directive>BrowserMatch</directive> and
-    <directive>BrowserMatchNoCase</directive> directives are special cases of
-    the <directive module="mod_setenvif">SetEnvIf</directive> and <directive
-    module="mod_setenvif">SetEnvIfNoCase</directive>
-    directives. The following two lines have the same effect:</p>
-<example>
-   BrowserMatchNoCase Robot is_a_robot<br />
-   SetEnvIfNoCase User-Agent Robot is_a_robot<br />
-</example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>SetEnvIf</name>
-<description>Sets environment variables based on attributes of the request
-</description>
-<syntax>SetEnvIf <em>attribute
-    regex env-variable</em>[=<em>value</em>]
-    [<em>env-variable</em>[=<em>value</em>]] ...</syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context><context>directory</context>
-<context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-<compatibility>Apache 1.3 and
-    above; the Request_Protocol keyword and environment-variable
-    matching are only available with 1.3.7 and later</compatibility>
-
-<usage>
-    <p>The <directive>SetEnvIf</directive> directive defines environment
-    variables based on attributes of the request. These attributes
-    can be the values of various HTTP request header fields (see <a
-    href="http://www.rfc-editor.org/rfc/rfc2616.txt">RFC2616</a>
-    for more information about these), or of other aspects of the
-    request, including the following:</p>
-
-    <ul>
-      <li><code>Remote_Host</code> - the hostname (if available) of
-      the client making the request</li>
-
-      <li><code>Remote_Addr</code> - the IP address of the client
-      making the request</li>
-
-      <li><code>Remote_User</code> - the authenticated username (if
-      available)</li>
-
-      <li><code>Request_Method</code> - the name of the method
-      being used (<code>GET</code>, <code>POST</code>, <em>et
-      cetera</em>)</li>
-
-      <li><code>Request_Protocol</code> - the name and version of
-      the protocol with which the request was made (<em>e.g.</em>,
-      "HTTP/0.9", "HTTP/1.1", <em>etc.</em>)</li>
-
-      <li><code>Request_URI</code> - the portion of the URL
-      following the scheme and host portion</li>
-    </ul>
-
-    <p>Some of the more commonly used request header field names
-    include <code>Host</code>, <code>User-Agent</code>, and
-    <code>Referer</code>.</p>
-
-    <p>If the <em>attribute</em> name doesn't match any of the
-    special keywords, nor any of the request's header field names,
-    it is tested as the name of an environment variable in the list
-    of those associated with the request. This allows
-    <directive>SetEnvIf</directive> directives to test against the result of
-    prior matches.</p>
-
-<note>
-      <strong>Only those environment variables defined by earlier
-      <code>SetEnvIf[NoCase]</code> directives are available for
-      testing in this manner. 'Earlier' means that they were
-      defined at a broader scope (such as server-wide) or
-      previously in the current directive's scope.</strong>
-</note>
-
-    <p><em>attribute</em> may be a regular expression when used to
-    match a request header. If <em>attribute</em> is a regular
-    expression and it doesn't match any of the request's header
-    names, then <em>attribute</em> is not tested against the
-    request's environment variable list.</p>
-
-<example>
-<title>Example:</title>
-   SetEnvIf Request_URI "\.gif$" object_is_image=gif<br />
-   SetEnvIf Request_URI "\.jpg$" object_is_image=jpg<br />
-   SetEnvIf Request_URI "\.xbm$" object_is_image=xbm<br />
-        :<br />
-   SetEnvIf Referer www\.mydomain\.com intra_site_referral<br />
-        :<br />
-   SetEnvIf object_is_image xbm XBIT_PROCESSING=1<br />
-        :<br />
-   SetEnvIf ^TS*  ^[a-z].*  HAVE_TS<br />
-</example>
-
-    <p>The first three will set the environment variable
-    <code>object_is_image</code> if the request was for an image
-    file, and the fourth sets <code>intra_site_referral</code> if
-    the referring page was somewhere on the
-    <code>www.mydomain.com</code> Web site.</p>
-
-    <p>The last example will set environment variable
-    <code>HAVE_TS</code> if the request contains any headers that
-    begin with "TS" whose values begins with any character in the
-    set [a-z].</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>SetEnvIfNoCase</name>
-<description>Sets environment variables based on attributes of the request
-without respect to case</description>
-<syntax>SetEnvIfNoCase <em>attribute regex env-variable</em>[=<em>value</em>]
-    [<em>env-variable</em>[=<em>value</em>]] ...</syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context><context>directory</context>
-<context>.htaccess</context></contextlist>
-<override>FileInfo</override>
-<compatibility>Apache 1.3 and above</compatibility>
-
-<usage>
-
-    <p>The <directive>SetEnvIfNoCase</directive> is semantically identical to
-    the <directive module="mod_setenvif">SetEnvIf</directive> directive,
-    and differs only in that the regular expression matching is
-    performed in a case-insensitive manner. For example:</p>
-<example>
-   SetEnvIfNoCase Host Apache\.Org site=apache
-</example>
-
-    <p>This will cause the <code>site</code> environment variable
-    to be set to "<code>apache</code>" if the HTTP request header
-    field <code>Host:</code> was included and contained
-    <code>Apache.Org</code>, <code>apache.org</code>, or any other
-    combination.</p>
-</usage>
-</directivesynopsis>
-</modulesynopsis>
\ No newline at end of file
diff --git a/docs/manual/mod/mod_so.html b/docs/manual/mod/mod_so.html
deleted file mode 100644
index 6b306b0..0000000
--- a/docs/manual/mod/mod_so.html
+++ /dev/null
@@ -1,118 +0,0 @@
-<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-     This file is generated from xml source: DO NOT EDIT
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
---><title>mod_so - Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img alt="[APACHE DOCUMENTATION]" src="../images/sub.gif"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module mod_so</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td><description>
-This module provides for loading of executable code and
-modules into the server at start-up or restart time.</description></td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>Base (Windows&gt;; Optional (Unix)</td></tr><tr><td><a href="module-dict.html#ModuleIdentifier" class="help">Module&nbsp;Identifier:</a></td><td>so_module</td></tr><tr><td align="left" valign="top"><a href="module-dict.html#Compatibility" class="help">Compatibility:</a></td><td><compatibility>Available in Apache 1.3 and later.</compatibility></td></tr></table></td></tr></table><h2>Summary</h2><summary>
-
-    <p>On selected operating systems this module can be used to
-    load modules into Apache at runtime via the <a href="../dso.html">Dynamic Shared Object</a> (DSO) mechanism,
-    rather than requiring a recompilation.</p>
-
-    <p>On Unix, the loaded code typically comes from shared object
-    files (usually with <samp>.so</samp> extension), on Windows
-    this may either the <samp>.so</samp> or <samp>.dll</samp>
-    extension. This module is only available in Apache 1.3 and
-    up.</p>
-
-    <p>In previous releases, the functionality of this module was
-    provided for Unix by mod_dld, and for Windows by mod_dll. On
-    Windows, mod_dll was used in beta release 1.3b1 through 1.3b5.
-    mod_so combines these two modules into a single module for all
-    operating systems.</p>
-
-    <p><strong>Warning: Apache 1.3 modules cannot be directly used
-    with Apache 2.0 - the module must be modified to dynamically
-    load or compile into Apache 2.0</strong>.</p>
-</summary><h2>Directives</h2><ul><li><a href="#loadfile">LoadFile</a></li><li><a href="#loadmodule">LoadModule</a></li></ul><h2>Creating Loadable Modules
-for Windows</h2>
-
-    <p><blockquote><table><tr><td bgcolor="#e0e5f5">Note: the module name format changed for Windows
-    with Apache 1.3.15 and 2.0 - the modules are now named as
-    mod_foo.so</td></tr></table></blockquote>. While mod_so still loads modules with
-    ApacheModuleFoo.dll names, the new naming convention is
-    preferred; if you are converting your loadable module for 2.0,
-    please fix the name to this 2.0 convention.</p>
-
-    <p>The Apache module API is unchanged between the Unix and
-    Windows versions. Many modules will run on Windows with no or
-    little change from Unix, although others rely on aspects of the
-    Unix architecture which are not present in Windows, and will
-    not work.</p>
-
-    <p>When a module does work, it can be added to the server in
-    one of two ways. As with Unix, it can be compiled into the
-    server. Because Apache for Windows does not have the
-    <code>Configure</code> program of Apache for Unix, the module's
-    source file must be added to the ApacheCore project file, and
-    its symbols must be added to the
-    <code>os\win32\modules.c</code> file.</p>
-
-    <p>The second way is to compile the module as a DLL, a shared
-    library that can be loaded into the server at runtime, using
-    the <code><code class="directive">LoadModule</code></code>
-    directive. These module DLLs can be distributed and run on any
-    Apache for Windows installation, without recompilation of the
-    server.</p>
-
-    <p>To create a module DLL, a small change is necessary to the
-    module's source file: The module record must be exported from
-    the DLL (which will be created later; see below). To do this,
-    add the <code>AP_MODULE_DECLARE_DATA</code> (defined in the
-    Apache header files) to your module's module record definition.
-    For example, if your module has:</p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-    module foo_module;
-</code></td></tr></table></blockquote>
-
-    <p>Replace the above with:</p>
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-    module AP_MODULE_DECLARE_DATA foo_module;
-</code></td></tr></table></blockquote>
-
-    <p>Note that this will only be activated on Windows, so the
-    module can continue to be used, unchanged, with Unix if needed.
-    Also, if you are familiar with <code>.DEF</code> files, you can
-    export the module record with that method instead.</p>
-
-    <p>Now, create a DLL containing your module. You will need to
-    link this against the libhttpd.lib export library that is
-    created when the libhttpd.dll shared library is compiled. You
-    may also have to change the compiler settings to ensure that
-    the Apache header files are correctly located. You can find
-    this library in your server root's modules directory. It is
-    best to grab an existing module .dsp file from the tree to
-    assure the build environment is configured correctly, or
-    alternately compare the compiler and link options to your
-    .dsp.</p>
-
-    <p>This should create a DLL version of your module. Now simply
-    place it in the <samp>modules</samp> directory of your server
-    root, and use the <code class="directive">LoadModule</code>
-    directive to load it.</p>
-
-<hr/><h2><a name="LoadFile">LoadFile</a> <a name="loadfile">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Link in the named object file or library</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>LoadFile <em>filename</em> [<em>filename</em>] ...</syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>none</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base (Windows&gt;; Optional (Unix)</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_so</td></tr></table></td></tr></table><usage>
-
-    <p>The LoadFile directive links in the named object files or
-    libraries when the server is started or restarted; this is used
-    to load additional code which may be required for some module
-    to work. <em>Filename</em> is either an absolute path or
-    relative to <a href="core.html#serverroot">ServerRoot</a>.</p>
-</usage><hr/><h2><a name="LoadModule">LoadModule</a> <a name="loadmodule">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Links in the object file or library, and adds to the list
-of active modules</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>LoadModule <em>module filename</em></syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>none</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base (Windows&gt;; Optional (Unix)</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_so</td></tr></table></td></tr></table><usage>
-    <p>The LoadModule directive links in the object file or library
-    <em>filename</em> and adds the module structure named
-    <em>module</em> to the list of active modules. <em>Module</em>
-    is the name of the external variable of type
-    <code>module</code> in the file, and is listed as the <a href="module-dict.html#ModuleIdentifier">Module Identifier</a>
-    in the module documentation. Example:</p>
-
-    <blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-      LoadModule status_module modules/mod_status.so
-    </code></td></tr></table></blockquote>
-
-    <p>loads the named module from the modules subdirectory of the
-    ServerRoot.</p>
-</usage><hr/><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img alt="Index" src="../images/index.gif"/></a><a href="../"><img alt="Home" src="../images/home.gif"/></a></blockquote></body></html>
\ No newline at end of file
diff --git a/docs/manual/mod/mod_so.xml b/docs/manual/mod/mod_so.xml
deleted file mode 100755
index df00229..0000000
--- a/docs/manual/mod/mod_so.xml
+++ /dev/null
@@ -1,160 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.xsl"?>
-<modulesynopsis>
-
-<name>mod_so</name>
-<description>
- This module provides for loading of executable code and
- modules into the server at start-up or restart time.
-</description>
-<status>Base (Windows>; Optional (Unix)</status>
-<sourcefile>mod_so.c</sourcefile>
-<identifier>so_module</identifier>
-<compatibility>Available in Apache 1.3 and later.</compatibility>
-
-<summary>
-
-    <p>On selected operating systems this module can be used to
-    load modules into Apache at runtime via the <a
-    href="../dso.html">Dynamic Shared Object</a> (DSO) mechanism,
-    rather than requiring a recompilation.</p>
-
-    <p>On Unix, the loaded code typically comes from shared object
-    files (usually with <code>.so</code> extension), on Windows
-    this may either the <code>.so</code> or <code>.dll</code>
-    extension. This module is only available in Apache 1.3 and
-    up.</p>
-
-    <p>In previous releases, the functionality of this module was
-    provided for Unix by mod_dld, and for Windows by mod_dll. On
-    Windows, mod_dll was used in beta release 1.3b1 through 1.3b5.
-    mod_so combines these two modules into a single module for all
-    operating systems.</p>
-    <note type="warning"><title>Warning</title>
-    <p>Apache 1.3 modules cannot be directly used
-    with Apache 2.0 - the module must be modified to dynamically
-    load or compile into Apache 2.0.</p>
-    </note>
-</summary>
-
-<section><title>Creating Loadable Modules for Windows</title>
-
-    <note><title>Note</title>
-    <p>The module name format changed for Windows
-    with Apache 1.3.15 and 2.0 - the modules are now named as
-    mod_foo.so</p>
-    <p>While mod_so still loads modules with
-    ApacheModuleFoo.dll names, the new naming convention is
-    preferred; if you are converting your loadable module for 2.0,
-    please fix the name to this 2.0 convention.</p></note>
-
-    <p>The Apache module API is unchanged between the Unix and
-    Windows versions. Many modules will run on Windows with no or
-    little change from Unix, although others rely on aspects of the
-    Unix architecture which are not present in Windows, and will
-    not work.</p>
-
-    <p>When a module does work, it can be added to the server in
-    one of two ways. As with Unix, it can be compiled into the
-    server. Because Apache for Windows does not have the
-    <code>Configure</code> program of Apache for Unix, the module's
-    source file must be added to the ApacheCore project file, and
-    its symbols must be added to the
-    <code>os\win32\modules.c</code> file.</p>
-
-    <p>The second way is to compile the module as a DLL, a shared
-    library that can be loaded into the server at runtime, using
-    the <code><directive>LoadModule</directive></code>
-    directive. These module DLLs can be distributed and run on any
-    Apache for Windows installation, without recompilation of the
-    server.</p>
-
-    <p>To create a module DLL, a small change is necessary to the
-    module's source file: The module record must be exported from
-    the DLL (which will be created later; see below). To do this,
-    add the <code>AP_MODULE_DECLARE_DATA</code> (defined in the
-    Apache header files) to your module's module record definition.
-    For example, if your module has:</p>
-
-<example>
-    module foo_module;
-</example>
-
-    <p>Replace the above with:</p>
-<example>
-    module AP_MODULE_DECLARE_DATA foo_module;
-</example>
-
-    <p>Note that this will only be activated on Windows, so the
-    module can continue to be used, unchanged, with Unix if needed.
-    Also, if you are familiar with <code>.DEF</code> files, you can
-    export the module record with that method instead.</p>
-
-    <p>Now, create a DLL containing your module. You will need to
-    link this against the libhttpd.lib export library that is
-    created when the libhttpd.dll shared library is compiled. You
-    may also have to change the compiler settings to ensure that
-    the Apache header files are correctly located. You can find
-    this library in your server root's modules directory. It is
-    best to grab an existing module .dsp file from the tree to
-    assure the build environment is configured correctly, or
-    alternately compare the compiler and link options to your
-    .dsp.</p>
-
-    <p>This should create a DLL version of your module. Now simply
-    place it in the <code>modules</code> directory of your server
-    root, and use the <directive>LoadModule</directive>
-    directive to load it.</p>
-
-</section>
-
-<directivesynopsis>
-<name>LoadFile</name>
-<description>Link in the named object file or library</description>
-<syntax>LoadFile <em>filename</em> [<em>filename</em>] ...</syntax>
-<default>none</default>
-<contextlist>
-<context>server config</context>
-</contextlist>
-
-<usage>
-
-    <p>The LoadFile directive links in the named object files or
-    libraries when the server is started or restarted; this is used
-    to load additional code which may be required for some module
-    to work. <em>Filename</em> is either an absolute path or
-    relative to <a href="core.html#serverroot">ServerRoot</a>.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>LoadModule</name>
-<description>Links in the object file or library, and adds to the list
-of active modules</description>
-<syntax>LoadModule <em>module filename</em></syntax>
-<default>none</default>
-<contextlist>
-<context>server config</context>
-</contextlist>
-
-<usage>
-    <p>The LoadModule directive links in the object file or library
-    <em>filename</em> and adds the module structure named
-    <em>module</em> to the list of active modules. <em>Module</em>
-    is the name of the external variable of type
-    <code>module</code> in the file, and is listed as the <a
-    href="module-dict.html#ModuleIdentifier">Module Identifier</a>
-    in the module documentation. Example:</p>
-
-    <example>
-      LoadModule status_module modules/mod_status.so
-    </example>
-
-    <p>loads the named module from the modules subdirectory of the
-    ServerRoot.</p>
-</usage>
-
-</directivesynopsis>
-</modulesynopsis>
-
diff --git a/docs/manual/mod/mod_speling.html b/docs/manual/mod/mod_speling.html
deleted file mode 100644
index 4e8f550..0000000
--- a/docs/manual/mod/mod_speling.html
+++ /dev/null
@@ -1,65 +0,0 @@
-<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-     This file is generated from xml source: DO NOT EDIT
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
---><title>mod_speling - Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img alt="[APACHE DOCUMENTATION]" src="../images/sub.gif"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module mod_speling</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td><description>Attempts to correct mistaken URLs that
-users might have entered by ignoring capitalization and by
-allowing up to one misspelling</description></td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="module-dict.html#ModuleIdentifier" class="help">Module&nbsp;Identifier:</a></td><td>speling_module</td></tr></table></td></tr></table><h2>Summary</h2><summary>
-
-    <p>Requests to documents sometimes cannot be served by the core
-    apache server because the request was misspelled or
-    miscapitalized. This module addresses this problem by trying to
-    find a matching document, even after all other modules gave up.
-    It does its work by comparing each document name in the
-    requested directory against the requested document name
-    <strong>without regard to case</strong>, and allowing
-    <strong>up to one misspelling</strong> (character insertion /
-    omission / transposition or wrong character). A list is built
-    with all document names which were matched using this
-    strategy.</p>
-
-    <p>If, after scanning the directory,</p>
-
-    <ul>
-      <li>no matching document was found, Apache will proceed as
-      usual and return a "document not found" error.</li>
-
-      <li>only one document is found that "almost" matches the
-      request, then it is returned in the form of a redirection
-      response.</li>
-
-      <li>more than one document with a close match was found, then
-      the list of the matches is returned to the client, and the
-      client can select the correct candidate.</li>
-    </ul>
-
-</summary><h2>Directives</h2><ul><li><a href="#checkspelling">CheckSpelling</a></li></ul><hr/><h2><a name="CheckSpelling">CheckSpelling</a> <a name="checkspelling">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Enables the spelling 
-module</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>CheckSpelling on|off</syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>CheckSpelling Off</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>Options</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_speling</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>CheckSpelling was available as a separately available
-module for Apache 1.1, but was limited to miscapitalizations. As
-of Apache 1.3, it is part of the Apache distribution. Prior to Apache
-1.3.2, the CheckSpelling directive was only available in the
-"server" and "virtual host" contexts.</td></tr></table></td></tr></table><usage>
-
-    <p>This directive enables or disables the spelling module. When
-    enabled, keep in mind that</p>
-
-    <ul>
-      <li>the directory scan which is necessary for the spelling
-      correction will have an impact on the server's performance
-      when many spelling corrections have to be performed at the
-      same time.</li>
-
-      <li>the document trees should not contain sensitive files
-      which could be matched inadvertently by a spelling
-      "correction".</li>
-
-      <li>the module is unable to correct misspelled user names (as
-      in <code>http://my.host/~apahce/</code>), just file names or
-      directory names.</li>
-
-      <li>spelling corrections apply strictly to existing files, so
-      a request for the <code>&lt;Location /status&gt;</code> may
-      get incorrectly treated as the negotiated file
-      "<code>/stats.html</code>".</li>
-    </ul>
-</usage><hr/><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img alt="Index" src="../images/index.gif"/></a><a href="../"><img alt="Home" src="../images/home.gif"/></a></blockquote></body></html>
\ No newline at end of file
diff --git a/docs/manual/mod/mod_speling.xml b/docs/manual/mod/mod_speling.xml
deleted file mode 100755
index cf4055e..0000000
--- a/docs/manual/mod/mod_speling.xml
+++ /dev/null
@@ -1,96 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.xsl"?>
-<modulesynopsis>
-
-<name>mod_speling</name>
-<description>Attempts to correct mistaken URLs that
-users might have entered by ignoring capitalization and by
-allowing up to one misspelling</description>
-<status>Extension</status>
-<sourcefile>mod_speling.c</sourcefile>
-<identifier>speling_module</identifier>
-
-
-
-<summary>
-
-    <p>Requests to documents sometimes cannot be served by the core
-    apache server because the request was misspelled or
-    miscapitalized. This module addresses this problem by trying to
-    find a matching document, even after all other modules gave up.
-    It does its work by comparing each document name in the
-    requested directory against the requested document name
-    <strong>without regard to case</strong>, and allowing
-    <strong>up to one misspelling</strong> (character insertion /
-    omission / transposition or wrong character). A list is built
-    with all document names which were matched using this
-    strategy.</p>
-
-    <p>If, after scanning the directory,</p>
-
-    <ul>
-      <li>no matching document was found, Apache will proceed as
-      usual and return a "document not found" error.</li>
-
-      <li>only one document is found that "almost" matches the
-      request, then it is returned in the form of a redirection
-      response.</li>
-
-      <li>more than one document with a close match was found, then
-      the list of the matches is returned to the client, and the
-      client can select the correct candidate.</li>
-    </ul>
-
-</summary>
-
-
-<directivesynopsis>
-<name>CheckSpelling</name>
-<description>Enables the spelling 
-module</description>
-<syntax>CheckSpelling on|off</syntax>
-<default>CheckSpelling Off</default>
-<contextlist>
-<context>server config</context>
-<context>virtual host</context>
-<context>directory</context>
-<context>.htaccess</context>
-</contextlist>
-<override>Options</override>
-<compatibility>CheckSpelling was available as a separately available
-module for Apache 1.1, but was limited to miscapitalizations. As
-of Apache 1.3, it is part of the Apache distribution. Prior to Apache
-1.3.2, the <code>CheckSpelling</code> directive was only available in the
-"server" and "virtual host" contexts.</compatibility>
-
-<usage>
-
-    <p>This directive enables or disables the spelling module. When
-    enabled, keep in mind that</p>
-
-    <ul>
-      <li>the directory scan which is necessary for the spelling
-      correction will have an impact on the server's performance
-      when many spelling corrections have to be performed at the
-      same time.</li>
-
-      <li>the document trees should not contain sensitive files
-      which could be matched inadvertently by a spelling
-      "correction".</li>
-
-      <li>the module is unable to correct misspelled user names (as
-      in <code>http://my.host/~apahce/</code>), just file names or
-      directory names.</li>
-
-      <li>spelling corrections apply strictly to existing files, so
-      a request for the <code>&lt;Location /status&gt;</code> may
-      get incorrectly treated as the negotiated file
-      "<code>/stats.html</code>".</li>
-    </ul>
-</usage>
-
-</directivesynopsis>
-
-</modulesynopsis>
-
diff --git a/docs/manual/mod/mod_ssl.html b/docs/manual/mod/mod_ssl.html
deleted file mode 100644
index 91d6b42..0000000
--- a/docs/manual/mod/mod_ssl.html
+++ /dev/null
@@ -1,991 +0,0 @@
-<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-     This file is generated from xml source: DO NOT EDIT
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
---><title>mod_ssl - Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img alt="[APACHE DOCUMENTATION]" src="../images/sub.gif"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module mod_ssl</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td><description>Strong cryptography using the Secure Sockets
-Layer (SSL) and Transport Layer Security (TLS) protocols</description></td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="module-dict.html#ModuleIdentifier" class="help">Module&nbsp;Identifier:</a></td><td>ssl_module</td></tr></table></td></tr></table><h2>Summary</h2><summary>
-<p>This module provides SSL v2/v3 and TLS v1 support for the Apache
-HTTP Server.  It was contributed by Ralf S. Engeschall based on his
-mod_ssl project and originally derived from work by Ben Laurie.</p>
-
-<p>This module relies on <a href="http://www.openssl.org/">OpenSSL</a>
-to provide the cryptography engine.</p>
-
-<p>Further details, discussion, and examples are provided in the
-<a href="../ssl/">SSL documentation</a>.</p>
-</summary><h2>Directives</h2><ul><li><a href="#sslcacertificatefile">SSLCACertificateFile</a></li><li><a href="#sslcacertificatepath">SSLCACertificatePath</a></li><li><a href="#sslcarevocationfile">SSLCARevocationFile</a></li><li><a href="#sslcarevocationpath">SSLCARevocationPath</a></li><li><a href="#sslcertificatechainfile">SSLCertificateChainFile</a></li><li><a href="#sslcertificatefile">SSLCertificateFile</a></li><li><a href="#sslcertificatekeyfile">SSLCertificateKeyFile</a></li><li><a href="#sslciphersuite">SSLCipherSuite</a></li><li><a href="#sslengine">SSLEngine</a></li><li><a href="#ssllog">SSLLog</a></li><li><a href="#sslloglevel">SSLLogLevel</a></li><li><a href="#sslmutex">SSLMutex</a></li><li><a href="#ssloptions">SSLOptions</a></li><li><a href="#sslpassphrasedialog">SSLPassPhraseDialog</a></li><li><a href="#sslprotocol">SSLProtocol</a></li><li><a href="#sslrandomseed">SSLRandomSeed</a></li><li><a href="#sslrequire">SSLRequire</a></li><li><a href="#sslrequiressl">SSLRequireSSL</a></li><li><a href="#sslsessioncache">SSLSessionCache</a></li><li><a href="#sslsessioncachetimeout">SSLSessionCacheTimeout</a></li><li><a href="#sslverifyclient">SSLVerifyClient</a></li><li><a href="#sslverifydepth">SSLVerifyDepth</a></li></ul><h2><a name="ToC25">Environment Variables</a></h2>
-
-<p>This module provides a lot of SSL information as additional environment
-variables to the SSI and CGI namespace. The generated variables are listed in
-the table below. For backward compatibility the information can
-be made available under different names, too. Look in the <a href="../ssl/ssl_compat.html">Compatibility</a> chapter for details on the
-compatibility variables.</p>
-
-<div align="center">
-<a name="table4"></a>
-<table width="600" cellspacing="0" cellpadding="1" border="0" summary="">
-<caption align="bottom" id="sf">SSI/CGI Environment Variables</caption>
-<tr><td bgcolor="#cccccc">
-<table width="598" cellpadding="5" cellspacing="0" border="0" summary="">
-<tr><td valign="top" align="center" bgcolor="#ffffff">
-<table border="0" cellspacing="0" cellpadding="2" width="598" summary="">
-<tr id="H">
- <td><strong>Variable Name:</strong></td>
- <td><strong>Value Type:</strong></td>
- <td><strong>Description:</strong></td>
-</tr>
-<tr id="D"><td><code>HTTPS</code></td>                         <td>flag</td>      <td>HTTPS is being used.</td></tr>
-<tr id="H"><td><code>SSL_PROTOCOL</code></td>                  <td>string</td>    <td>The SSL protocol version (SSLv2, SSLv3, TLSv1)</td></tr>
-<tr id="H"><td><code>SSL_SESSION_ID</code></td>                <td>string</td>    <td>The hex-encoded SSL session id</td></tr>
-<tr id="D"><td><code>SSL_CIPHER</code></td>                    <td>string</td>    <td>The cipher specification name</td></tr>
-<tr id="D"><td><code>SSL_CIPHER_EXPORT</code></td>             <td>string</td>    <td><code>true</code> if cipher is an export cipher</td></tr>
-<tr id="H"><td><code>SSL_CIPHER_USEKEYSIZE</code></td>         <td>number</td>    <td>Number of cipher bits (actually used)</td></tr>
-<tr id="D"><td><code>SSL_CIPHER_ALGKEYSIZE</code></td>         <td>number</td>    <td>Number of cipher bits (possible)</td></tr>
-<tr id="H"><td><code>SSL_VERSION_INTERFACE</code></td>         <td>string</td>    <td>The mod_ssl program version</td></tr>
-<tr id="D"><td><code>SSL_VERSION_LIBRARY</code></td>           <td>string</td>    <td>The OpenSSL program version</td></tr>
-<tr id="H"><td><code>SSL_CLIENT_M_VERSION</code></td>          <td>string</td>    <td>The version of the client certificate</td></tr>
-<tr id="D"><td><code>SSL_CLIENT_M_SERIAL</code></td>           <td>string</td>    <td>The serial of the client certificate</td></tr>
-<tr id="H"><td><code>SSL_CLIENT_S_DN</code></td>               <td>string</td>    <td>Subject DN in client's certificate</td></tr>
-<tr id="D"><td><code>SSL_CLIENT_S_DN_</code><em>x509</em></td> <td>string</td>    <td>Component of client's Subject DN</td></tr>
-<tr id="H"><td><code>SSL_CLIENT_I_DN</code></td>               <td>string</td>    <td>Issuer DN of client's certificate</td></tr>
-<tr id="D"><td><code>SSL_CLIENT_I_DN_</code><em>x509</em></td> <td>string</td>    <td>Component of client's Issuer DN</td></tr>
-<tr id="H"><td><code>SSL_CLIENT_V_START</code></td>            <td>string</td>    <td>Validity of client's certificate (start time)</td></tr>
-<tr id="D"><td><code>SSL_CLIENT_V_END</code></td>              <td>string</td>    <td>Validity of client's certificate (end time)</td></tr>
-<tr id="H"><td><code>SSL_CLIENT_A_SIG</code></td>              <td>string</td>    <td>Algorithm used for the signature of client's certificate</td></tr>
-<tr id="D"><td><code>SSL_CLIENT_A_KEY</code></td>              <td>string</td>    <td>Algorithm used for the public key of client's certificate</td></tr>
-<tr id="H"><td><code>SSL_CLIENT_CERT</code></td>               <td>string</td>    <td>PEM-encoded client certificate</td></tr>
-<tr id="D"><td><code>SSL_CLIENT_CERT_CHAIN</code><em>n</em></td> <td>string</td>    <td>PEM-encoded certificates in client certificate chain</td></tr>
-<tr id="H"><td><code>SSL_CLIENT_VERIFY</code></td>             <td>string</td>    <td><code>NONE</code>, <code>SUCCESS</code>, <code>GENEROUS</code> or <code>FAILED:</code><em>reason</em></td></tr>
-<tr id="D"><td><code>SSL_SERVER_M_VERSION</code></td>          <td>string</td>    <td>The version of the server certificate</td></tr>
-<tr id="H"><td><code>SSL_SERVER_M_SERIAL</code></td>           <td>string</td>    <td>The serial of the server certificate</td></tr>
-<tr id="D"><td><code>SSL_SERVER_S_DN</code></td>               <td>string</td>    <td>Subject DN in server's certificate</td></tr>
-<tr id="H"><td><code>SSL_SERVER_S_DN_</code><em>x509</em></td> <td>string</td>    <td>Component of server's Subject DN</td></tr>
-<tr id="D"><td><code>SSL_SERVER_I_DN</code></td>               <td>string</td>    <td>Issuer DN of server's certificate</td></tr>
-<tr id="H"><td><code>SSL_SERVER_I_DN_</code><em>x509</em></td> <td>string</td>    <td>Component of server's Issuer DN</td></tr>
-<tr id="D"><td><code>SSL_SERVER_V_START</code></td>            <td>string</td>    <td>Validity of server's certificate (start time)</td></tr>
-<tr id="H"><td><code>SSL_SERVER_V_END</code></td>              <td>string</td>    <td>Validity of server's certificate (end time)</td></tr>
-<tr id="D"><td><code>SSL_SERVER_A_SIG</code></td>              <td>string</td>    <td>Algorithm used for the signature of server's certificate</td></tr>
-<tr id="H"><td><code>SSL_SERVER_A_KEY</code></td>              <td>string</td>    <td>Algorithm used for the public key of server's certificate</td></tr>
-<tr id="D"><td><code>SSL_SERVER_CERT</code></td>               <td>string</td>    <td>PEM-encoded server certificate</td></tr>
-</table>
-[ where <em>x509</em> is a component of a X.509 DN:
-  <code>C,ST,L,O,OU,CN,T,I,G,S,D,UID,Email</code> ]
-</td>
-</tr></table>
-</td></tr></table>
-</div>
-<h2><a name="ToC26">Custom Log Formats</a></h2>
-
-<p>When <code><a href="mod_ssl.html">mod_ssl</a></code> is built into Apache or at least
-loaded (under DSO situation) additional functions exist for the <a href="../mod_log_config.html#formats">Custom Log Format</a> of 
-<code><a href="mod_log_config.html">mod_log_config</a></code>. First there is an
-additional ``<code>%{</code><em>varname</em><code>}x</code>''
-eXtension format function which can be used to expand any variables
-provided by any module, especially those provided by mod_ssl which can
-you find in the above table.</p>
-<p>
-For backward compatibility there is additionally a special
-``<code>%{</code><em>name</em><code>}c</code>'' cryptography format function
-provided. Information about this function is provided in the <a href="../ssl/ssl_compat.html">Compatibility</a> chapter.</p>
-<p>
-Example:</p>
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-CustomLog logs/ssl_request_log \
-          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
-</code></td></tr></table></blockquote>
-<hr/><h2><a name="SSLCACertificateFile">SSLCACertificateFile</a> <a name="sslcacertificatefile">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>File of concatenated PEM-encoded CA Certificates 
-for Client Auth</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>SSLCACertificateFile <em>file-path</em></syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_ssl</td></tr></table></td></tr></table><usage>
-<p>
-This directive sets the <em>all-in-one</em> file where you can assemble the
-Certificates of Certification Authorities (CA) whose <em>clients</em> you deal
-with. These are used for Client Authentication. Such a file is simply the
-concatenation of the various PEM-encoded Certificate files, in order of
-preference. This can be used alternatively and/or additionally to 
-<a href="#sslcacertificatepath" class="directive"><code class="directive">SSLCACertificatePath</code></a>.</p>
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><p align="center"><strong>Example</strong></p><code>
-SSLCACertificateFile /usr/local/apache/conf/ssl.crt/ca-bundle-client.crt
-</code></td></tr></table></blockquote>
-</usage><hr/><h2><a name="SSLCACertificatePath">SSLCACertificatePath</a> <a name="sslcacertificatepath">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Directory of PEM-encoded CA Certificates for 
-Client Auth</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>SSLCACertificatePath <em>directory-path</em></syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_ssl</td></tr></table></td></tr></table><usage>
-<p>
-This directive sets the directory where you keep the Certificates of
-Certification Authorities (CAs) whose clients you deal with. These are used to
-verify the client certificate on Client Authentication.</p>
-<p>
-The files in this directory have to be PEM-encoded and are accessed through
-hash filenames. So usually you can't just place the Certificate files
-there: you also have to create symbolic links named
-<em>hash-value</em><code>.N</code>. And you should always make sure this directory
-contains the appropriate symbolic links. Use the <code>Makefile</code> which
-comes with mod_ssl to accomplish this task.</p>
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><p align="center"><strong>Example</strong></p><code>
-SSLCACertificatePath /usr/local/apache/conf/ssl.crt/
-</code></td></tr></table></blockquote>
-</usage><hr/><h2><a name="SSLCARevocationFile">SSLCARevocationFile</a> <a name="sslcarevocationfile">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>File of concatenated PEM-encoded CA CRLs for 
-Client Auth</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>SSLCARevocationFile <em>file-path</em></syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_ssl</td></tr></table></td></tr></table><usage>
-<p>
-This directive sets the <em>all-in-one</em> file where you can
-assemble the Certificate Revocation Lists (CRL) of Certification
-Authorities (CA) whose <em>clients</em> you deal with. These are used
-for Client Authentication.  Such a file is simply the concatenation of
-the various PEM-encoded CRL files, in order of preference. This can be
-used alternatively and/or additionally to <a href="#sslcarevocationpath" class="directive"><code class="directive">SSLCARevocationPath</code></a>.</p>
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><p align="center"><strong>Example</strong></p><code>
-SSLCARevocationFile /usr/local/apache/conf/ssl.crl/ca-bundle-client.crl
-</code></td></tr></table></blockquote>
-</usage><hr/><h2><a name="SSLCARevocationPath">SSLCARevocationPath</a> <a name="sslcarevocationpath">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Directory of PEM-encoded CA CRLs for 
-Client Auth</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>SSLCARevocationPath <em>directory-path</em></syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_ssl</td></tr></table></td></tr></table><usage>
-<p>
-This directive sets the directory where you keep the Certificate Revocation
-Lists (CRL) of Certification Authorities (CAs) whose clients you deal with.
-These are used to revoke the client certificate on Client Authentication.</p>
-<p>
-The files in this directory have to be PEM-encoded and are accessed through
-hash filenames. So usually you have not only to place the CRL files there.
-Additionally you have to create symbolic links named
-<em>hash-value</em><code>.rN</code>. And you should always make sure this directory
-contains the appropriate symbolic links. Use the <code>Makefile</code> which
-comes with <code><a href="mod_ssl.html">mod_ssl</a></code> to accomplish this task.</p>
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><p align="center"><strong>Example</strong></p><code>
-SSLCARevocationPath /usr/local/apache/conf/ssl.crl/
-</code></td></tr></table></blockquote>
-</usage><hr/><h2><a name="SSLCertificateChainFile">SSLCertificateChainFile</a> <a name="sslcertificatechainfile">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>File of PEM-encoded Server CA Certificates</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>SSLCertificateChainFile <em>file-path</em></syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_ssl</td></tr></table></td></tr></table><usage>
-<p>
-This directive sets the optional <em>all-in-one</em> file where you can
-assemble the certificates of Certification Authorities (CA) which form the
-certificate chain of the server certificate. This starts with the issuing CA
-certificate of of the server certificate and can range up to the root CA
-certificate. Such a file is simply the concatenation of the various
-PEM-encoded CA Certificate files, usually in certificate chain order.</p>
-<p>
-This should be used alternatively and/or additionally to <a href="#sslcacertificatepath" class="directive"><code class="directive">SSLCACertificatePath</code></a> for explicitly
-constructing the server certificate chain which is sent to the browser
-in addition to the server certificate. It is especially useful to
-avoid conflicts with CA certificates when using client
-authentication. Because although placing a CA certificate of the
-server certificate chain into <a href="#sslcacertificatepath" class="directive"><code class="directive">SSLCACertificatePath</code></a> has the same effect
-for the certificate chain construction, it has the side-effect that
-client certificates issued by this same CA certificate are also
-accepted on client authentication. That's usually not one expect.</p>
-<p>
-But be careful: Providing the certificate chain works only if you are using a
-<em>single</em> (either RSA <em>or</em> DSA) based server certificate. If you are
-using a coupled RSA+DSA certificate pair, this will work only if actually both
-certificates use the <em>same</em> certificate chain. Else the browsers will be
-confused in this situation.</p>
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><p align="center"><strong>Example</strong></p><code>
-SSLCertificateChainFile /usr/local/apache/conf/ssl.crt/ca.crt
-</code></td></tr></table></blockquote>
-</usage><hr/><h2><a name="SSLCertificateFile">SSLCertificateFile</a> <a name="sslcertificatefile">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Server PEM-encoded X.509 Certificate file</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>SSLCertificateFile <em>file-path</em></syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_ssl</td></tr></table></td></tr></table><usage>
-<p>
-This directive points to the PEM-encoded Certificate file for the server and
-optionally also to the corresponding RSA or DSA Private Key file for it
-(contained in the same file). If the contained Private Key is encrypted the
-Pass Phrase dialog is forced at startup time. This directive can be used up to
-two times (referencing different filenames) when both a RSA and a DSA based
-server certificate is used in parallel.</p>
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><p align="center"><strong>Example</strong></p><code>
-SSLCertificateFile /usr/local/apache/conf/ssl.crt/server.crt
-</code></td></tr></table></blockquote>
-</usage><hr/><h2><a name="SSLCertificateKeyFile">SSLCertificateKeyFile</a> <a name="sslcertificatekeyfile">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Server PEM-encoded Private Key file</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>SSLCertificateKeyFile <em>file-path</em></syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_ssl</td></tr></table></td></tr></table><usage>
-<p>
-This directive points to the PEM-encoded Private Key file for the
-server. If the Private Key is not combined with the Certificate in the
-<code class="directive">SSLCertificateFile</code>, use this additional directive to
-point to the file with the stand-alone Private Key. When
-<code class="directive">SSLCertificateFile</code> is used and the file
-contains both the Certificate and the Private Key this directive need
-not be used. But we strongly discourage this practice.  Instead we
-recommend you to separate the Certificate and the Private Key. If the
-contained Private Key is encrypted, the Pass Phrase dialog is forced
-at startup time. This directive can be used up to two times
-(referencing different filenames) when both a RSA and a DSA based
-private key is used in parallel.</p>
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><p align="center"><strong>Example</strong></p><code>
-SSLCertificateKeyFile /usr/local/apache/conf/ssl.key/server.key
-</code></td></tr></table></blockquote>
-</usage><hr/><h2><a name="SSLCipherSuite">SSLCipherSuite</a> <a name="sslciphersuite">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Cipher Suite available for negotiation in SSL 
-handshake</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>SSLCipherSuite <em>cipher-spec</em></syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>SSLCipherSuite ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>AuthConfig</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_ssl</td></tr></table></td></tr></table><usage>
-<p>
-This complex directive uses a colon-separated <em>cipher-spec</em> string
-consisting of OpenSSL cipher specifications to configure the Cipher Suite the
-client is permitted to negotiate in the SSL handshake phase. Notice that this
-directive can be used both in per-server and per-directory context. In
-per-server context it applies to the standard SSL handshake when a connection
-is established. In per-directory context it forces a SSL renegotation with the
-reconfigured Cipher Suite after the HTTP request was read but before the HTTP
-response is sent.</p>
-<p>
-An SSL cipher specification in <em>cipher-spec</em> is composed of 4 major
-attributes plus a few extra minor ones:</p>
-<ul>
-<li><em>Key Exchange Algorithm</em>:<br>
-    RSA or Diffie-Hellman variants.
-</li>
-<li><em>Authentication Algorithm</em>:<br>
-    RSA, Diffie-Hellman, DSS or none.
-</li>
-<li><em>Cipher/Encryption Algorithm</em>:<br>
-    DES, Triple-DES, RC4, RC2, IDEA or none.
-</li>
-<li><em>MAC Digest Algorithm</em>:<br>
-    MD5, SHA or SHA1.
-</li>
-</ul>
-<p>An SSL cipher can also be an export cipher and is either a SSLv2 or SSLv3/TLSv1
-cipher (here TLSv1 is equivalent to SSLv3). To specify which ciphers to use,
-one can either specify all the Ciphers, one at a time, or use aliases to
-specify the preference and order for the ciphers (see <a href="#table1">Table
-1</a>).</p>
-
-<div align="center">
-<a name="table1"></a>
-<table width="600" cellspacing="0" cellpadding="1" border="0" summary="">
-<caption align="bottom" id="sf">Table 1: OpenSSL Cipher Specification Tags</caption>
-<tr><td bgcolor="#cccccc">
-<table width="598" cellpadding="5" cellspacing="0" border="0" summary="">
-<tr><td valign="top" align="center" bgcolor="#ffffff">
-<table border="0" cellspacing="0" cellpadding="2" width="598" summary="">
-<tr id="D"><td><strong>Tag</strong></td> <td><strong>Description</strong></td></tr>
-<tr id="H"><td colspan="2"><em>Key Exchange Algorithm:</em></td></tr>
-<tr id="D"><td><code>kRSA</code></td>   <td>RSA key exchange</td></tr>
-<tr id="H"><td><code>kDHr</code></td>   <td>Diffie-Hellman key exchange with RSA key</td></tr>
-<tr id="D"><td><code>kDHd</code></td>   <td>Diffie-Hellman key exchange with DSA key</td></tr>
-<tr id="H"><td><code>kEDH</code></td>   <td>Ephemeral (temp.key) Diffie-Hellman key exchange (no cert)</td>   </tr>
-<tr id="H"><td colspan="2"><em>Authentication Algorithm:</em></td></tr>
-<tr id="D"><td><code>aNULL</code></td>  <td>No authentication</td></tr>
-<tr id="H"><td><code>aRSA</code></td>   <td>RSA authentication</td></tr>
-<tr id="D"><td><code>aDSS</code></td>   <td>DSS authentication</td> </tr>
-<tr id="H"><td><code>aDH</code></td>    <td>Diffie-Hellman authentication</td></tr>
-<tr id="D"><td colspan="2"><em>Cipher Encoding Algorithm:</em></td></tr>
-<tr id="H"><td><code>eNULL</code></td>  <td>No encoding</td>         </tr>
-<tr id="D"><td><code>DES</code></td>    <td>DES encoding</td>        </tr>
-<tr id="H"><td><code>3DES</code></td>   <td>Triple-DES encoding</td> </tr>
-<tr id="D"><td><code>RC4</code></td>    <td>RC4 encoding</td>       </tr>
-<tr id="H"><td><code>RC2</code></td>    <td>RC2 encoding</td>       </tr>
-<tr id="D"><td><code>IDEA</code></td>   <td>IDEA encoding</td>       </tr>
-<tr id="H"><td colspan="2"><em>MAC Digest Algorithm</em>:</td></tr>
-<tr id="D"><td><code>MD5</code></td>    <td>MD5 hash function</td></tr>
-<tr id="H"><td><code>SHA1</code></td>   <td>SHA1 hash function</td></tr>
-<tr id="D"><td><code>SHA</code></td>    <td>SHA hash function</td> </tr>
-<tr id="H"><td colspan="2"><em>Aliases:</em></td></tr>
-<tr id="D"><td><code>SSLv2</code></td>  <td>all SSL version 2.0 ciphers</td></tr>
-<tr id="H"><td><code>SSLv3</code></td>  <td>all SSL version 3.0 ciphers</td> </tr>
-<tr id="D"><td><code>TLSv1</code></td>  <td>all TLS version 1.0 ciphers</td> </tr>
-<tr id="H"><td><code>EXP</code></td>    <td>all export ciphers</td>  </tr>
-<tr id="D"><td><code>EXPORT40</code></td> <td>all 40-bit export ciphers only</td>  </tr>
-<tr id="H"><td><code>EXPORT56</code></td> <td>all 56-bit export ciphers only</td>  </tr>
-<tr id="D"><td><code>LOW</code></td>    <td>all low strength ciphers (no export, single DES)</td></tr>
-<tr id="H"><td><code>MEDIUM</code></td> <td>all ciphers with 128 bit encryption</td> </tr>
-<tr id="D"><td><code>HIGH</code></td>   <td>all ciphers using Triple-DES</td>     </tr>
-<tr id="H"><td><code>RSA</code></td>    <td>all ciphers using RSA key exchange</td> </tr>
-<tr id="D"><td><code>DH</code></td>     <td>all ciphers using Diffie-Hellman key exchange</td> </tr>
-<tr id="H"><td><code>EDH</code></td>    <td>all ciphers using Ephemeral Diffie-Hellman key exchange</td> </tr>
-<tr id="D"><td><code>ADH</code></td>    <td>all ciphers using Anonymous Diffie-Hellman key exchange</td> </tr>
-<tr id="H"><td><code>DSS</code></td>    <td>all ciphers using DSS authentication</td> </tr>
-<tr id="D"><td><code>NULL</code></td>   <td>all ciphers using no encryption</td> </tr>
-</table>
-</td>
-</tr></table>
-</td></tr></table>
-</div>
-<p>
-Now where this becomes interesting is that these can be put together
-to specify the order and ciphers you wish to use. To speed this up
-there are also aliases (<code>SSLv2, SSLv3, TLSv1, EXP, LOW, MEDIUM,
-HIGH</code>) for certain groups of ciphers. These tags can be joined
-together with prefixes to form the <em>cipher-spec</em>. Available
-prefixes are:</p>
-<ul>
-<li>none: add cipher to list</li>
-<li><code>+</code>: add ciphers to list and pull them to current location in list</li>
-<li><code>-</code>: remove cipher from list (can be added later again)</li>
-<li><code>!</code>: kill cipher from list completely (can <strong>not</strong> be added later again)</li>
-</ul>
-<p>A simpler way to look at all of this is to use the ``<code>openssl ciphers
--v</code>'' command which provides a nice way to successively create the
-correct <em>cipher-spec</em> string. The default <em>cipher-spec</em> string
-is ``<code>ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP</code>'' which
-means the following: first, remove from consideration any ciphers that do not
-authenticate, i.e. for SSL only the Anonymous Diffie-Hellman ciphers. Next,
-use ciphers using RC4 and RSA. Next include the high, medium and then the low
-security ciphers. Finally <em>pull</em> all SSLv2 and export ciphers to the
-end of the list.</p>
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-<pre>
-$ openssl ciphers -v 'ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP'
-NULL-SHA                SSLv3 Kx=RSA      Au=RSA  Enc=None      Mac=SHA1
-NULL-MD5                SSLv3 Kx=RSA      Au=RSA  Enc=None      Mac=MD5
-EDH-RSA-DES-CBC3-SHA    SSLv3 Kx=DH       Au=RSA  Enc=3DES(168) Mac=SHA1
-...                     ...               ...     ...           ...
-EXP-RC4-MD5             SSLv3 Kx=RSA(512) Au=RSA  Enc=RC4(40)   Mac=MD5  export
-EXP-RC2-CBC-MD5         SSLv2 Kx=RSA(512) Au=RSA  Enc=RC2(40)   Mac=MD5  export
-EXP-RC4-MD5             SSLv2 Kx=RSA(512) Au=RSA  Enc=RC4(40)   Mac=MD5  export
-</pre>
-</code></td></tr></table></blockquote>
-<p>The complete list of particular RSA &amp; DH ciphers for SSL is given in <a href="#table2">Table 2</a>.</p>
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><p align="center"><strong>Example</strong></p><code>
-SSLCipherSuite RSA:!EXP:!NULL:+HIGH:+MEDIUM:-LOW
-</code></td></tr></table></blockquote>
-<div align="center">
-<a name="table2"></a>
-<table width="600" cellspacing="0" cellpadding="1" border="0" summary="">
-<caption align="bottom" id="sf">Table 2: Particular SSL Ciphers</caption>
-<tr><td bgcolor="#cccccc">
-<table width="598" cellpadding="5" cellspacing="0" border="0" summary="">
-<tr><td valign="top" align="center" bgcolor="#ffffff">
-<table border="0" cellspacing="0" cellpadding="2" width="598" summary="">
-<tr id="D"><td><strong>Cipher-Tag</strong></td> <td><strong>Protocol</strong></td> <td><strong>Key Ex.</strong></td> <td><strong>Auth.</strong></td> <td><strong>Enc.</strong></td> <td><strong>MAC</strong></td> <td><strong>Type</strong></td> </tr>
-<tr id="H"><td colspan="7"><em>RSA Ciphers:</em></td></tr>
-<tr id="D"><td><code>DES-CBC3-SHA</code></td> <td>SSLv3</td> <td>RSA</td> <td>RSA</td> <td>3DES(168)</td> <td>SHA1</td> <td>&nbsp;</td> </tr>
-<tr id="H"><td><code>DES-CBC3-MD5</code></td> <td>SSLv2</td> <td>RSA</td> <td>RSA</td> <td>3DES(168)</td> <td>MD5</td> <td>&nbsp; </td> </tr>
-<tr id="D"><td><code>IDEA-CBC-SHA</code></td> <td>SSLv3</td> <td>RSA</td> <td>RSA</td> <td>IDEA(128)</td> <td>SHA1</td> <td>&nbsp;</td> </tr>
-<tr id="H"><td><code>RC4-SHA</code></td> <td>SSLv3</td> <td>RSA</td> <td>RSA</td> <td>RC4(128)</td> <td>SHA1</td> <td>&nbsp;</td> </tr>
-<tr id="D"><td><code>RC4-MD5</code></td> <td>SSLv3</td> <td>RSA</td> <td>RSA</td> <td>RC4(128)</td> <td>MD5</td> <td>&nbsp; </td> </tr>
-<tr id="H"><td><code>IDEA-CBC-MD5</code></td> <td>SSLv2</td> <td>RSA</td> <td>RSA</td> <td>IDEA(128)</td> <td>MD5</td> <td>&nbsp; </td> </tr>
-<tr id="D"><td><code>RC2-CBC-MD5</code></td> <td>SSLv2</td> <td>RSA</td> <td>RSA</td> <td>RC2(128)</td> <td>MD5</td> <td>&nbsp; </td> </tr>
-<tr id="H"><td><code>RC4-MD5</code></td> <td>SSLv2</td> <td>RSA</td> <td>RSA</td> <td>RC4(128)</td> <td>MD5</td> <td>&nbsp; </td> </tr>
-<tr id="D"><td><code>DES-CBC-SHA</code></td> <td>SSLv3</td> <td>RSA</td> <td>RSA</td> <td>DES(56)</td> <td>SHA1</td> <td>&nbsp;</td> </tr>
-<tr id="H"><td><code>RC4-64-MD5</code></td> <td>SSLv2</td> <td>RSA</td> <td>RSA</td> <td>RC4(64)</td> <td>MD5</td> <td>&nbsp; </td> </tr>
-<tr id="D"><td><code>DES-CBC-MD5</code></td> <td>SSLv2</td> <td>RSA</td> <td>RSA</td> <td>DES(56)</td> <td>MD5</td> <td>&nbsp; </td> </tr>
-<tr id="H"><td><code>EXP-DES-CBC-SHA</code></td> <td>SSLv3</td> <td>RSA(512)</td> <td>RSA</td> <td>DES(40)</td> <td>SHA1</td> <td> export</td> </tr>
-<tr id="D"><td><code>EXP-RC2-CBC-MD5</code></td> <td>SSLv3</td> <td>RSA(512)</td> <td>RSA</td> <td>RC2(40)</td> <td>MD5</td> <td>  export</td> </tr>
-<tr id="H"><td><code>EXP-RC4-MD5</code></td> <td>SSLv3</td> <td>RSA(512)</td> <td>RSA</td> <td>RC4(40)</td> <td>MD5</td> <td>  export</td> </tr>
-<tr id="D"><td><code>EXP-RC2-CBC-MD5</code></td> <td>SSLv2</td> <td>RSA(512)</td> <td>RSA</td> <td>RC2(40)</td> <td>MD5</td> <td>  export</td> </tr>
-<tr id="H"><td><code>EXP-RC4-MD5</code></td> <td>SSLv2</td> <td>RSA(512)</td> <td>RSA</td> <td>RC4(40)</td> <td>MD5</td> <td>  export</td> </tr>
-<tr id="D"><td><code>NULL-SHA</code></td> <td>SSLv3</td> <td>RSA</td> <td>RSA</td> <td>None</td> <td>SHA1</td> <td>&nbsp;</td> </tr>
-<tr id="H"><td><code>NULL-MD5</code></td> <td>SSLv3</td> <td>RSA</td> <td>RSA</td> <td>None</td> <td>MD5</td> <td>&nbsp; </td> </tr>
-<tr id="D"><td colspan="7"><em>Diffie-Hellman Ciphers:</em></td></tr>
-<tr id="H"><td><code>ADH-DES-CBC3-SHA</code></td> <td>SSLv3</td> <td>DH</td> <td>None</td> <td>3DES(168)</td> <td>SHA1</td> <td>&nbsp;</td> </tr>
-<tr id="D"><td><code>ADH-DES-CBC-SHA</code></td> <td>SSLv3</td> <td>DH</td> <td>None</td> <td>DES(56)</td> <td>SHA1</td> <td>&nbsp;</td> </tr>
-<tr id="H"><td><code>ADH-RC4-MD5</code></td> <td>SSLv3</td> <td>DH</td> <td>None</td> <td>RC4(128)</td> <td>MD5</td> <td>&nbsp; </td> </tr>
-<tr id="D"><td><code>EDH-RSA-DES-CBC3-SHA</code></td> <td>SSLv3</td> <td>DH</td> <td>RSA</td> <td>3DES(168)</td> <td>SHA1</td> <td>&nbsp;</td> </tr>
-<tr id="H"><td><code>EDH-DSS-DES-CBC3-SHA</code></td> <td>SSLv3</td> <td>DH</td> <td>DSS</td> <td>3DES(168)</td> <td>SHA1</td> <td>&nbsp;</td> </tr>
-<tr id="D"><td><code>EDH-RSA-DES-CBC-SHA</code></td> <td>SSLv3</td> <td>DH</td> <td>RSA</td> <td>DES(56)</td> <td>SHA1</td> <td>&nbsp;</td> </tr>
-<tr id="H"><td><code>EDH-DSS-DES-CBC-SHA</code></td> <td>SSLv3</td> <td>DH</td> <td>DSS</td> <td>DES(56)</td> <td>SHA1</td> <td>&nbsp;</td> </tr>
-<tr id="D"><td><code>EXP-EDH-RSA-DES-CBC-SHA</code></td> <td>SSLv3</td> <td>DH(512)</td> <td>RSA</td> <td>DES(40)</td> <td>SHA1</td> <td> export</td> </tr>
-<tr id="H"><td><code>EXP-EDH-DSS-DES-CBC-SHA</code></td> <td>SSLv3</td> <td>DH(512)</td> <td>DSS</td> <td>DES(40)</td> <td>SHA1</td> <td> export</td> </tr>
-<tr id="D"><td><code>EXP-ADH-DES-CBC-SHA</code></td> <td>SSLv3</td> <td>DH(512)</td> <td>None</td> <td>DES(40)</td> <td>SHA1</td> <td> export</td> </tr>
-<tr id="H"><td><code>EXP-ADH-RC4-MD5</code></td> <td>SSLv3</td> <td>DH(512)</td> <td>None</td> <td>RC4(40)</td> <td>MD5</td> <td>  export</td> </tr>
-</table>
-</td>
-</tr></table>
-</td></tr></table>
-</div>
-</usage><hr/><h2><a name="SSLEngine">SSLEngine</a> <a name="sslengine">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>SSL Engine Operation Switch</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>SSLEngine on|off</syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>SSLEngine off</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_ssl</td></tr></table></td></tr></table><usage>
-<p>
-This directive toggles the usage of the SSL/TLS Protocol Engine. This
-is usually used inside a <a href="core.html#virtualhost" class="directive"><code class="directive">&lt;VirtualHost&gt;</code></a> section to enable SSL/TLS for a
-particular virtual host. By default the SSL/TLS Protocol Engine is
-disabled for both the main server and all configured virtual hosts.</p>
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><p align="center"><strong>Example</strong></p><code>
-&lt;VirtualHost _default_:443&gt;<br>
-SSLEngine on<br>
-...<br>
-&lt;/VirtualHost&gt;
-</code></td></tr></table></blockquote>
-</usage><hr/><h2><a name="SSLLog">SSLLog</a> <a name="ssllog">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Where to write the dedicated SSL engine logfile</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>SSLLog <em>file-path</em></syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_ssl</td></tr></table></td></tr></table><usage>
-<p>
-This directive sets the name of the dedicated SSL protocol engine logfile.
-Error type messages are additionally duplicated to the general Apache error
-log file (directive <code>ErrorLog</code>). Put this somewhere where it cannot
-be used for symlink attacks on a real server (i.e. somewhere where only root
-can write). If the <em>file-path</em> does not begin with a slash
-('<code>/</code>') then it is assumed to be relative to the <em>Server
-Root</em>. If <em>file-path</em> begins with a bar ('<code>|</code>') then the
-following string is assumed to be a path to an executable program to which a
-reliable pipe can be established. The directive should occur only once per
-virtual server config.</p>
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><p align="center"><strong>Example</strong></p><code>
-SSLLog /usr/local/apache/logs/ssl_engine_log
-</code></td></tr></table></blockquote>
-</usage><hr/><h2><a name="SSLLogLevel">SSLLogLevel</a> <a name="sslloglevel">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Logging level for the dedicated SSL engine 
-logfile</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>SSLLogLevel <em>level</em></syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>SSLLogLevel none</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_ssl</td></tr></table></td></tr></table><usage>
-<p>
-This directive sets the verbosity degree of the dedicated SSL protocol engine
-logfile. The <em>level</em> is one of the following (in ascending order where
-higher levels include lower levels):</p>
-<ul>
-<li><code>none</code><br>
-    no dedicated SSL logging is done, but messages of level
-    ``<code>error</code>'' are still written to the general Apache error
-    logfile.
-</li>
-<li><code>error</code><br>
-    log messages of error type only, i.e. messages which show fatal situations
-    (processing is stopped). Those messages are also duplicated to the
-    general Apache error logfile.
-</li>
-<li><code>warn</code><br>
-    log also warning messages, i.e. messages which show non-fatal problems
-    (processing is continued).
-</li>
-<li><code>info</code><br>
-    log also informational messages, i.e. messages which show major
-    processing steps.
-</li>
-<li><code>trace</code><br>
-    log also trace messages, i.e. messages which show minor processing steps.
-</li>
-<li><code>debug</code><br>
-    log also debugging messages, i.e. messages which show development and
-    low-level I/O information.
-</li>
-</ul>
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><p align="center"><strong>Example</strong></p><code>
-SSLLogLevel warn
-</code></td></tr></table></blockquote>
-</usage><hr/><h2><a name="SSLMutex">SSLMutex</a> <a name="sslmutex">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Semaphore for internal mutual exclusion of 
-operations</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>SSLMutex <em>type</em></syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>SSLMutex none</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_ssl</td></tr></table></td></tr></table><usage>
-<p>
-This configures the SSL engine's semaphore (aka. lock) which is used for mutual
-exclusion of operations which have to be done in a synchronized way between the
-pre-forked Apache server processes. This directive can only be used in the
-global server context because it's only useful to have one global mutex.</p>
-<p>
-The following Mutex <em>types</em> are available:</p>
-<ul>
-<li><code>none</code>
-    <p>
-    This is the default where no Mutex is used at all. Use it at your own
-    risk. But because currently the Mutex is mainly used for synchronizing
-    write access to the SSL Session Cache you can live without it as long
-    as you accept a sometimes garbled Session Cache. So it's not recommended
-    to leave this the default. Instead configure a real Mutex.</p></li>
-<li><code>file:/path/to/mutex</code>
-    <p>
-    This is the portable and (under Unix) always provided Mutex variant where
-    a physical (lock-)file is used as the Mutex. Always use a local disk
-    filesystem for <code>/path/to/mutex</code> and never a file residing on a
-    NFS- or AFS-filesystem. Note: Internally, the Process ID (PID) of the
-    Apache parent process is automatically appended to
-    <code>/path/to/mutex</code> to make it unique, so you don't have to worry
-    about conflicts yourself. Notice that this type of mutex is not available
-    under the Win32 environment. There you <em>have</em> to use the semaphore
-    mutex.</p></li>
-<li><code>sem</code>
-    <p>
-    This is the most elegant but also most non-portable Mutex variant where a
-    SysV IPC Semaphore (under Unix) and a Windows Mutex (under Win32) is used
-    when possible. It is only available when the underlying platform
-    supports it.</p></li>
-</ul>
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><p align="center"><strong>Example</strong></p><code>
-SSLMutex file:/usr/local/apache/logs/ssl_mutex
-</code></td></tr></table></blockquote>
-</usage><hr/><h2><a name="SSLOptions">SSLOptions</a> <a name="ssloptions">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Configure various SSL engine run-time options</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>SSLOptions [+|-]<em>option</em> ...</syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>Options</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_ssl</td></tr></table></td></tr></table><usage>
-<p>
-This directive can be used to control various run-time options on a
-per-directory basis. Normally, if multiple <code>SSLOptions</code>
-could apply to a directory, then the most specific one is taken
-completely; the options are not merged. However if <em>all</em> the
-options on the <code>SSLOptions</code> directive are preceded by a
-plus (<code>+</code>) or minus (<code>-</code>) symbol, the options
-are merged. Any options preceded by a <code>+</code> are added to the
-options currently in force, and any options preceded by a
-<code>-</code> are removed from the options currently in force.</p>
-<p>
-The available <em>option</em>s are:</p>
-<ul>
-<li><code>StdEnvVars</code>
-    <p>
-    When this option is enabled, the standard set of SSL related CGI/SSI
-    environment variables are created. This per default is disabled for
-    performance reasons, because the information extraction step is a
-    rather expensive operation. So one usually enables this option for
-    CGI and SSI requests only.</p>
-</li>
-<li><code>CompatEnvVars</code>
-    <p>
-    When this option is enabled, additional CGI/SSI environment variables are
-    created for backward compatibility to other Apache SSL solutions. Look in
-    the <a href="../ssl/ssl_compat.html">Compatibility</a> chapter for details
-    on the particular variables generated.</p>
-</li>
-<li><code>ExportCertData</code>
-    <p>
-    When this option is enabled, additional CGI/SSI environment variables are
-    created: <code>SSL_SERVER_CERT</code>, <code>SSL_CLIENT_CERT</code> and
-    <code>SSL_CLIENT_CERT_CHAIN</code><em>n</em> (with <em>n</em> = 0,1,2,..).
-    These contain the PEM-encoded X.509 Certificates of server and client for
-    the current HTTPS connection and can be used by CGI scripts for deeper
-    Certificate checking. Additionally all other certificates of the client
-    certificate chain are provided, too. This bloats up the environment a
-    little bit which is why you have to use this option to enable it on
-    demand.</p>
-</li>
-<li><code>FakeBasicAuth</code>
-    <p>
-    When this option is enabled, the Subject Distinguished Name (DN) of the
-    Client X509 Certificate is translated into a HTTP Basic Authorization
-    username. This means that the standard Apache authentication methods can
-    be used for access control. The user name is just the Subject of the
-    Client's X509 Certificate (can be determined by running OpenSSL's
-    <code>openssl x509</code> command: <code>openssl x509 -noout -subject -in
-    </code><em>certificate</em><code>.crt</code>). Note that no password is
-    obtained from the user. Every entry in the user file needs this password:
-    ``<code>xxj31ZMTZzkVA</code>'', which is the DES-encrypted version of the
-    word `<code>password</code>''. Those who live under MD5-based encryption
-    (for instance under FreeBSD or BSD/OS, etc.) should use the following MD5
-    hash of the same word: ``<code>$1$OXLyS...$Owx8s2/m9/gfkcRVXzgoE/</code>''.</p>
-</li>
-<li><code>StrictRequire</code>
-    <p>
-    This <em>forces</em> forbidden access when <code>SSLRequireSSL</code> or
-    <code>SSLRequire</code> successfully decided that access should be
-    forbidden. Usually the default is that in the case where a ``<code>Satisfy
-    any</code>'' directive is used, and other access restrictions are passed,
-    denial of access due to <code>SSLRequireSSL</code> or
-    <code>SSLRequire</code> is overridden (because that's how the Apache
-    <code>Satisfy</code> mechanism should work.) But for strict access restriction
-    you can use <code>SSLRequireSSL</code> and/or <code>SSLRequire</code> in
-    combination with an ``<code>SSLOptions +StrictRequire</code>''. Then an
-    additional ``<code>Satisfy Any</code>'' has no chance once mod_ssl has
-    decided to deny access.</p>
-</li>
-<li><code>OptRenegotiate</code>
-    <p>
-    This enables optimized SSL connection renegotiation handling when SSL
-    directives are used in per-directory context. By default a strict
-    scheme is enabled where <em>every</em> per-directory reconfiguration of
-    SSL parameters causes a <em>full</em> SSL renegotiation handshake. When this
-    option is used mod_ssl tries to avoid unnecessary handshakes by doing more
-    granular (but still safe) parameter checks. Nevertheless these granular
-    checks sometimes maybe not what the user expects, so enable this on a
-    per-directory basis only, please.</p>
-</li>
-</ul>
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><p align="center"><strong>Example</strong></p><code>
-SSLOptions +FakeBasicAuth -StrictRequire<br>
-&lt;Files ~ "\.(cgi|shtml)$"&gt;<br>
-    SSLOptions +StdEnvVars +CompatEnvVars -ExportCertData<br>
-&lt;Files&gt;
-</code></td></tr></table></blockquote>
-</usage><hr/><h2><a name="SSLPassPhraseDialog">SSLPassPhraseDialog</a> <a name="sslpassphrasedialog">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Type of pass phrase dialog for encrypted private 
-keys</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>SSLPassPhraseDialog <em>type</em></syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>SSLPassPhraseDialog builtin</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_ssl</td></tr></table></td></tr></table><usage>
-<p>
-When Apache starts up it has to read the various Certificate (see
-<a href="#sslcertificatefile" class="directive"><code class="directive">SSLCertificateFile</code></a>) and
-Private Key (see <a href="#sslcertificatekeyfile" class="directive"><code class="directive">SSLCertificateKeyFile</code></a>) files of the
-SSL-enabled virtual servers. Because for security reasons the Private
-Key files are usually encrypted, mod_ssl needs to query the
-administrator for a Pass Phrase in order to decrypt those files. This
-query can be done in two ways which can be configured by
-<em>type</em>:</p>
-<ul>
-<li><code>builtin</code>
-    <p>
-    This is the default where an interactive terminal dialog occurs at startup
-    time just before Apache detaches from the terminal. Here the administrator
-    has to manually enter the Pass Phrase for each encrypted Private Key file.
-    Because a lot of SSL-enabled virtual hosts can be configured, the
-    following reuse-scheme is used to minimize the dialog: When a Private Key
-    file is encrypted, all known Pass Phrases (at the beginning there are
-    none, of course) are tried. If one of those known Pass Phrases succeeds no
-    dialog pops up for this particular Private Key file. If none succeeded,
-    another Pass Phrase is queried on the terminal and remembered for the next
-    round (where it perhaps can be reused).</p>
-    <p>
-    This scheme allows mod_ssl to be maximally flexible (because for N encrypted
-    Private Key files you <em>can</em> use N different Pass Phrases - but then
-    you have to enter all of them, of course) while minimizing the terminal
-    dialog (i.e. when you use a single Pass Phrase for all N Private Key files
-    this Pass Phrase is queried only once).</p></li>
-
-<li><code>exec:/path/to/program</code>
-    <p>
-    Here an external program is configured which is called at startup for each
-    encrypted Private Key file. It is called with two arguments (the first is
-    of the form ``<code>servername:portnumber</code>'', the second is either
-    ``<code>RSA</code>'' or ``<code>DSA</code>''), which indicate for which
-    server and algorithm it has to print the corresponding Pass Phrase to
-    <code>stdout</code>. The intent is that this external program first runs
-    security checks to make sure that the system is not compromised by an
-    attacker, and only when these checks were passed successfully it provides
-    the Pass Phrase.</p>
-    <p>
-    Both these security checks, and the way the Pass Phrase is determined, can
-    be as complex as you like. Mod_ssl just defines the interface: an
-    executable program which provides the Pass Phrase on <code>stdout</code>.
-    Nothing more or less! So, if you're really paranoid about security, here
-    is your interface. Anything else has to be left as an exercise to the
-    administrator, because local security requirements are so different.</p>
-    <p>
-    The reuse-algorithm above is used here, too. In other words: The external
-    program is called only once per unique Pass Phrase.</p></li>
-</ul>
-<p>
-Example:</p>
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-SSLPassPhraseDialog exec:/usr/local/apache/sbin/pp-filter
-</code></td></tr></table></blockquote>
-</usage><hr/><h2><a name="SSLProtocol">SSLProtocol</a> <a name="sslprotocol">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Configure usable SSL protocol flavors</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>SSLProtocol [+|-]<em>protocol</em> ...</syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>SSLProtocol all</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>Options</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_ssl</td></tr></table></td></tr></table><usage>
-<p>
-This directive can be used to control the SSL protocol flavors mod_ssl should
-use when establishing its server environment. Clients then can only connect
-with one of the provided protocols.</p>
-<p>
-The available (case-insensitive) <em>protocol</em>s are:</p>
-<ul>
-<li><code>SSLv2</code>
-    <p>
-    This is the Secure Sockets Layer (SSL) protocol, version 2.0. It is the
-    original SSL protocol as designed by Netscape Corporation.</p></li>
-
-<li><code>SSLv3</code>
-    <p>
-    This is the Secure Sockets Layer (SSL) protocol, version 3.0. It is the
-    successor to SSLv2 and the currently (as of February 1999) de-facto
-    standardized SSL protocol from Netscape Corporation. It's supported by
-    almost all popular browsers.</p></li>
-
-<li><code>TLSv1</code>
-    <p>
-    This is the Transport Layer Security (TLS) protocol, version 1.0. It is the
-    successor to SSLv3 and currently (as of February 1999) still under
-    construction by the Internet Engineering Task Force (IETF). It's still
-    not supported by any popular browsers.</p></li>
-
-<li><code>All</code>
-    <p>
-    This is a shortcut for ``<code>+SSLv2 +SSLv3 +TLSv1</code>'' and a
-    convinient way for enabling all protocols except one when used in
-    combination with the minus sign on a protocol as the example above 
-    shows.</p></li>
-</ul>
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><p align="center"><strong>Example</strong></p><code>
-#   enable SSLv3 and TLSv1, but not SSLv2<br>
-SSLProtocol all -SSLv2
-</code></td></tr></table></blockquote>
-</usage><hr/><h2><a name="SSLRandomSeed">SSLRandomSeed</a> <a name="sslrandomseed">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Pseudo Random Number Generator (PRNG) seeding 
-source</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>SSLRandomSeed <em>context</em> <em>source</em> 
-[<em>bytes</em>]</syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_ssl</td></tr></table></td></tr></table><usage>
-<p>
-This configures one or more sources for seeding the Pseudo Random Number
-Generator (PRNG) in OpenSSL at startup time (<em>context</em> is
-<code>startup</code>) and/or just before a new SSL connection is established
-(<em>context</em> is <code>connect</code>). This directive can only be used
-in the global server context because the PRNG is a global facility.</p>
-<p>
-The following <em>source</em> variants are available:</p>
-<ul>
-<li><code>builtin</code>
-    <p> This is the always available builtin seeding source. It's usage
-    consumes minimum CPU cycles under runtime and hence can be always used
-    without drawbacks. The source used for seeding the PRNG contains of the
-    current time, the current process id and (when applicable) a randomly
-    choosen 1KB extract of the inter-process scoreboard structure of Apache.
-    The drawback is that this is not really a strong source and at startup
-    time (where the scoreboard is still not available) this source just
-    produces a few bytes of entropy. So you should always, at least for the
-    startup, use an additional seeding source.</p></li>
-<li><code>file:/path/to/source</code>
-    <p>
-    This variant uses an external file <code>/path/to/source</code> as the
-    source for seeding the PRNG. When <em>bytes</em> is specified, only the
-    first <em>bytes</em> number of bytes of the file form the entropy (and
-    <em>bytes</em> is given to <code>/path/to/source</code> as the first
-    argument). When <em>bytes</em> is not specified the whole file forms the
-    entropy (and <code>0</code> is given to <code>/path/to/source</code> as
-    the first argument). Use this especially at startup time, for instance
-    with an available <code>/dev/random</code> and/or
-    <code>/dev/urandom</code> devices (which usually exist on modern Unix
-    derivates like FreeBSD and Linux).</p>
-    <p>
-    <em>But be careful</em>: Usually <code>/dev/random</code> provides only as
-    much entropy data as it actually has, i.e. when you request 512 bytes of
-    entropy, but the device currently has only 100 bytes available two things
-    can happen: On some platforms you receive only the 100 bytes while on
-    other platforms the read blocks until enough bytes are available (which
-    can take a long time). Here using an existing <code>/dev/urandom</code> is
-    better, because it never blocks and actually gives the amount of requested
-    data. The drawback is just that the quality of the received data may not
-    be the best.</p>
-    <p>
-    On some platforms like FreeBSD one can even control how the entropy is
-    actually generated, i.e. by which system interrupts. More details one can
-    find under <em>rndcontrol(8)</em> on those platforms. Alternatively, when
-    your system lacks such a random device, you can use tool
-    like <a href="http://www.lothar.com/tech/crypto/">EGD</a>
-    (Entropy Gathering Daemon) and run it's client program with the
-    <code>exec:/path/to/program/</code> variant (see below) or use
-    <code>egd:/path/to/egd-socket</code> (see below).</p></li>
-
-<li><code>exec:/path/to/program</code>
-    <p>
-    This variant uses an external executable
-    <code>/path/to/program</code> as the source for seeding the
-    PRNG. When <em>bytes</em> is specified, only the first
-    <em>bytes</em> number of bytes of its <code>stdout</code> contents
-    form the entropy. When <em>bytes</em> is not specified, the
-    entirety of the data produced on <code>stdout</code> form the
-    entropy. Use this only at startup time when you need a very strong
-    seeding with the help of an external program (for instance as in
-    the example above with the <code>truerand</code> utility you can
-    find in the mod_ssl distribution which is based on the AT&amp;T
-    <em>truerand</em> library). Using this in the connection context
-    slows down the server too dramatically, of course.  So usually you
-    should avoid using external programs in that context.</p></li>
-<li><code>egd:/path/to/egd-socket</code> (Unix only)
-    <p>
-    This variant uses the Unix domain socket of the
-    external Entropy Gathering Daemon (EGD) (see <a href="http://www.lothar.com/tech/crypto/">http://www.lothar.com/tech
-    /crypto/</a>) to seed the PRNG. Use this if no random device exists
-    on your platform.</p></li>
-</ul>
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><p align="center"><strong>Example</strong></p><code>
-SSLRandomSeed startup builtin<br>
-SSLRandomSeed startup file:/dev/random<br>
-SSLRandomSeed startup file:/dev/urandom 1024<br>
-SSLRandomSeed startup exec:/usr/local/bin/truerand 16<br>
-SSLRandomSeed connect builtin<br>
-SSLRandomSeed connect file:/dev/random<br>
-SSLRandomSeed connect file:/dev/urandom 1024<br>
-</code></td></tr></table></blockquote>
-</usage><hr/><h2><a name="SSLRequire">SSLRequire</a> <a name="sslrequire">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Allow access only when an arbitrarily complex 
-boolean expression is true</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>SSLRequire <em>expression</em></syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>AuthConfig</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_ssl</td></tr></table></td></tr></table><usage>
-<p>
-This directive specifies a general access requirement which has to be
-fulfilled in order to allow access. It's a very powerful directive because the
-requirement specification is an arbitrarily complex boolean expression
-containing any number of access checks.</p>
-<p>
-The <em>expression</em> must match the following syntax (given as a BNF
-grammar notation):</p>
-<blockquote>
-<pre>
-expr     ::= "<strong>true</strong>" | "<strong>false</strong>"
-           | "<strong>!</strong>" expr
-           | expr "<strong>&amp;&amp;</strong>" expr
-           | expr "<strong>||</strong>" expr
-           | "<strong>(</strong>" expr "<strong>)</strong>"
-           | comp
-
-comp     ::= word "<strong>==</strong>" word | word "<strong>eq</strong>" word
-           | word "<strong>!=</strong>" word | word "<strong>ne</strong>" word
-           | word "<strong>&lt;</strong>"  word | word "<strong>lt</strong>" word
-           | word "<strong>&lt;=</strong>" word | word "<strong>le</strong>" word
-           | word "<strong>&gt;</strong>"  word | word "<strong>gt</strong>" word
-           | word "<strong>&gt;=</strong>" word | word "<strong>ge</strong>" word
-           | word "<strong>in</strong>" "<strong>{</strong>" wordlist "<strong>}</strong>"
-           | word "<strong>=~</strong>" regex
-           | word "<strong>!~</strong>" regex
-
-wordlist ::= word
-           | wordlist "<strong>,</strong>" word
-
-word     ::= digit
-           | cstring
-           | variable
-           | function
-
-digit    ::= [0-9]+
-cstring  ::= "..."
-variable ::= "<strong>%{</strong>" varname "<strong>}</strong>"
-function ::= funcname "<strong>(</strong>" funcargs "<strong>)</strong>"
-</pre>
-</blockquote>
-<p>while for <code>varname</code> any variable from <a href="#table3">Table 3</a> can be used. Finally for
-<code>funcname</code> the following functions are available:</p>
-<ul>
-<li><code>file(</code><em>filename</em><code>)</code>
-    <p>
-    This function takes one string argument and expands to the contents of the
-    file. This is especially useful for matching this contents against a
-    regular expression, etc.</p>
-</li>
-</ul>
-<p>Notice that <em>expression</em> is first parsed into an internal machine
-representation and then evaluated in a second step. Actually, in Global and
-Per-Server Class context <em>expression</em> is parsed at startup time and
-at runtime only the machine representation is executed. For Per-Directory
-context this is different: here <em>expression</em> has to be parsed and
-immediately executed for every request.</p>
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><p align="center"><strong>Example</strong></p><code>
-SSLRequire (    %{SSL_CIPHER} !~ m/^(EXP|NULL)-/ \<br>
-            and %{SSL_CLIENT_S_DN_O} eq "Snake Oil, Ltd." \<br>
-            and %{SSL_CLIENT_S_DN_OU} in {"Staff", "CA", "Dev"} \<br>
-            and %{TIME_WDAY} &gt;= 1 and %{TIME_WDAY} &lt;= 5 \<br>
-            and %{TIME_HOUR} &gt;= 8 and %{TIME_HOUR} &lt;= 20       ) \<br>
-           or %{REMOTE_ADDR} =~ m/^192\.76\.162\.[0-9]+$/
-</code></td></tr></table></blockquote>
-<div align="center">
-<a name="table3"></a>
-<table width="600" cellspacing="0" cellpadding="1" border="0" summary="">
-<caption align="bottom" id="sf">Table 3: Available Variables for SSLRequire</caption>
-<tr><td bgcolor="#cccccc">
-<table width="598" cellpadding="5" cellspacing="0" border="0" summary="">
-<tr><td valign="top" align="center" bgcolor="#ffffff">
-<table summary=""><tr><td>
-<em>Standard CGI/1.0 and Apache variables:</em>
-<pre>
-HTTP_USER_AGENT        PATH_INFO             AUTH_TYPE
-HTTP_REFERER           QUERY_STRING          SERVER_SOFTWARE
-HTTP_COOKIE            REMOTE_HOST           API_VERSION
-HTTP_FORWARDED         REMOTE_IDENT          TIME_YEAR
-HTTP_HOST              IS_SUBREQ             TIME_MON
-HTTP_PROXY_CONNECTION  DOCUMENT_ROOT         TIME_DAY
-HTTP_ACCEPT            SERVER_ADMIN          TIME_HOUR
-HTTP:headername        SERVER_NAME           TIME_MIN
-THE_REQUEST            SERVER_PORT           TIME_SEC
-REQUEST_METHOD         SERVER_PROTOCOL       TIME_WDAY
-REQUEST_SCHEME         REMOTE_ADDR           TIME
-REQUEST_URI            REMOTE_USER           ENV:<strong>variablename</strong>
-REQUEST_FILENAME
-</pre>
-<em>SSL-related variables:</em>
-<pre>
-HTTPS                  SSL_CLIENT_M_VERSION   SSL_SERVER_M_VERSION
-                       SSL_CLIENT_M_SERIAL    SSL_SERVER_M_SERIAL
-SSL_PROTOCOL           SSL_CLIENT_V_START     SSL_SERVER_V_START
-SSL_SESSION_ID         SSL_CLIENT_V_END       SSL_SERVER_V_END
-SSL_CIPHER             SSL_CLIENT_S_DN        SSL_SERVER_S_DN
-SSL_CIPHER_EXPORT      SSL_CLIENT_S_DN_C      SSL_SERVER_S_DN_C
-SSL_CIPHER_ALGKEYSIZE  SSL_CLIENT_S_DN_ST     SSL_SERVER_S_DN_ST
-SSL_CIPHER_USEKEYSIZE  SSL_CLIENT_S_DN_L      SSL_SERVER_S_DN_L
-SSL_VERSION_LIBRARY    SSL_CLIENT_S_DN_O      SSL_SERVER_S_DN_O
-SSL_VERSION_INTERFACE  SSL_CLIENT_S_DN_OU     SSL_SERVER_S_DN_OU
-                       SSL_CLIENT_S_DN_CN     SSL_SERVER_S_DN_CN
-                       SSL_CLIENT_S_DN_T      SSL_SERVER_S_DN_T
-                       SSL_CLIENT_S_DN_I      SSL_SERVER_S_DN_I
-                       SSL_CLIENT_S_DN_G      SSL_SERVER_S_DN_G
-                       SSL_CLIENT_S_DN_S      SSL_SERVER_S_DN_S
-                       SSL_CLIENT_S_DN_D      SSL_SERVER_S_DN_D
-                       SSL_CLIENT_S_DN_UID    SSL_SERVER_S_DN_UID
-                       SSL_CLIENT_S_DN_Email  SSL_SERVER_S_DN_Email
-                       SSL_CLIENT_I_DN        SSL_SERVER_I_DN
-                       SSL_CLIENT_I_DN_C      SSL_SERVER_I_DN_C
-                       SSL_CLIENT_I_DN_ST     SSL_SERVER_I_DN_ST
-                       SSL_CLIENT_I_DN_L      SSL_SERVER_I_DN_L
-                       SSL_CLIENT_I_DN_O      SSL_SERVER_I_DN_O
-                       SSL_CLIENT_I_DN_OU     SSL_SERVER_I_DN_OU
-                       SSL_CLIENT_I_DN_CN     SSL_SERVER_I_DN_CN
-                       SSL_CLIENT_I_DN_T      SSL_SERVER_I_DN_T
-                       SSL_CLIENT_I_DN_I      SSL_SERVER_I_DN_I
-                       SSL_CLIENT_I_DN_G      SSL_SERVER_I_DN_G
-                       SSL_CLIENT_I_DN_S      SSL_SERVER_I_DN_S
-                       SSL_CLIENT_I_DN_D      SSL_SERVER_I_DN_D
-                       SSL_CLIENT_I_DN_UID    SSL_SERVER_I_DN_UID
-                       SSL_CLIENT_I_DN_Email  SSL_SERVER_I_DN_Email
-                       SSL_CLIENT_A_SIG       SSL_SERVER_A_SIG
-                       SSL_CLIENT_A_KEY       SSL_SERVER_A_KEY
-                       SSL_CLIENT_CERT        SSL_SERVER_CERT
-                       SSL_CLIENT_CERT_CHAIN<strong>n</strong>
-                       SSL_CLIENT_VERIFY
-</pre>
-</td></tr></table>
-</td>
-</tr></table>
-</td></tr></table>
-</div>
-</usage><hr/><h2><a name="SSLRequireSSL">SSLRequireSSL</a> <a name="sslrequiressl">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Deny access when SSL is not used for the 
-HTTP request</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>SSLRequireSSL</syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>AuthConfig</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_ssl</td></tr></table></td></tr></table><usage>
-<p>
-This directive forbids access unless HTTP over SSL (i.e. HTTPS) is enabled for
-the current connection. This is very handy inside the SSL-enabled virtual
-host or directories for defending against configuration errors that expose
-stuff that should be protected. When this directive is present all requests
-are denied which are not using SSL.</p>
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><p align="center"><strong>Example</strong></p><code>
-SSLRequireSSL
-</code></td></tr></table></blockquote>
-</usage><hr/><h2><a name="SSLSessionCache">SSLSessionCache</a> <a name="sslsessioncache">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Type of the global/inter-process SSL Session 
-Cache</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>SSLSessionCache <em>type</em></syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>SSLSessionCache none</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_ssl</td></tr></table></td></tr></table><usage>
-<p>
-This configures the storage type of the global/inter-process SSL Session
-Cache. This cache is an optional facility which speeds up parallel request
-processing. For requests to the same server process (via HTTP keep-alive),
-OpenSSL already caches the SSL session information locally. But because modern
-clients request inlined images and other data via parallel requests (usually
-up to four parallel requests are common) those requests are served by
-<em>different</em> pre-forked server processes. Here an inter-process cache
-helps to avoid unneccessary session handshakes.</p>
-<p>
-The following two storage <em>type</em>s are currently supported:</p>
-<ul>
-<li><code>none</code>
-    <p>
-    This is the default and just disables the global/inter-process Session
-    Cache. There is no drawback in functionality, but a noticeable speed
-    penalty can be observed.</p></li>
-<li><code>dbm:/path/to/datafile</code>
-    <p>
-    This makes use of a DBM hashfile on the local disk to synchronize the
-    local OpenSSL memory caches of the server processes. The slight increase
-    in I/O on the server results in a visible request speedup for your
-    clients, so this type of storage is generally recommended.</p></li>
-<li><code>shm:/path/to/datafile</code>[<code>(</code><em>size</em><code>)</code>]
-    <p>
-    This makes use of a high-performance hash table (approx. <em>size</em> bytes
-    in size) inside a shared memory segment in RAM (established via
-    <code>/path/to/datafile</code>) to synchronize the local OpenSSL memory
-    caches of the server processes. This storage type is not available on all
-    platforms. See the mod_ssl <code>INSTALL</code> document for details on
-    how to build Apache+EAPI with shared memory support.</p></li>
-</ul>
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><p align="center"><strong>Examples</strong></p><code>
-SSLSessionCache dbm:/usr/local/apache/logs/ssl_gcache_data<br>
-SSLSessionCache shm:/usr/local/apache/logs/ssl_gcache_data(512000)
-</code></td></tr></table></blockquote>
-</usage><hr/><h2><a name="SSLSessionCacheTimeout">SSLSessionCacheTimeout</a> <a name="sslsessioncachetimeout">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Number of seconds before an SSL session expires
-in the Session Cache</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>SSLSessionCacheTimeout <em>seconds</em></syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>SSLSessionCacheTimeout 300</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_ssl</td></tr></table></td></tr></table><usage>
-<p>
-This directive sets the timeout in seconds for the information stored in the
-global/inter-process SSL Session Cache and the OpenSSL internal memory cache.
-It can be set as low as 15 for testing, but should be set to higher
-values like 300 in real life.</p>
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><p align="center"><strong>Example</strong></p><code>
-SSLSessionCacheTimeout 600
-</code></td></tr></table></blockquote>
-</usage><hr/><h2><a name="SSLVerifyClient">SSLVerifyClient</a> <a name="sslverifyclient">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Type of Client Certificate verification</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>SSLVerifyClient <em>level</em></syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>SSLVerifyClient none</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>AuthConfig</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_ssl</td></tr></table></td></tr></table><usage>
-<p>
-This directive sets the Certificate verification level for the Client
-Authentication. Notice that this directive can be used both in per-server and
-per-directory context. In per-server context it applies to the client
-authentication process used in the standard SSL handshake when a connection is
-established. In per-directory context it forces a SSL renegotation with the
-reconfigured client verification level after the HTTP request was read but
-before the HTTP response is sent.</p>
-<p>
-The following levels are available for <em>level</em>:</p>
-<ul>
-<li><strong>none</strong>:
-     no client Certificate is required at all</li>
-<li><strong>optional</strong>:
-     the client <em>may</em> present a valid Certificate</li>
-<li><strong>require</strong>:
-     the client <em>has to</em> present a valid Certificate</li>
-<li><strong>optional_no_ca</strong>:
-     the client may present a valid Certificate<br>
-     but it need not to be (successfully) verifiable.</li>
-</ul>
-<p>In practice only levels <strong>none</strong> and
-<strong>require</strong> are really interesting, because level
-<strong>optional</strong> doesn't work with all browsers and level
-<strong>optional_no_ca</strong> is actually against the idea of
-authentication (but can be used to establish SSL test pages, etc.)</p>
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><p align="center"><strong>Example</strong></p><code>
-SSLVerifyClient require
-</code></td></tr></table></blockquote>
-</usage><hr/><h2><a name="SSLVerifyDepth">SSLVerifyDepth</a> <a name="sslverifydepth">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Maximum depth of CA Certificates in Client 
-Certificate verification</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>SSLVerifyDepth <em>number</em></syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>SSLVerifyDepth 1</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>AuthConfig</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_ssl</td></tr></table></td></tr></table><usage>
-<p>
-This directive sets how deeply mod_ssl should verify before deciding that the
-clients don't have a valid certificate. Notice that this directive can be
-used both in per-server and per-directory context. In per-server context it
-applies to the client authentication process used in the standard SSL
-handshake when a connection is established. In per-directory context it forces
-a SSL renegotation with the reconfigured client verification depth after the
-HTTP request was read but before the HTTP response is sent.</p>
-<p>
-The depth actually is the maximum number of intermediate certificate issuers,
-i.e. the number of CA certificates which are max allowed to be followed while
-verifying the client certificate. A depth of 0 means that self-signed client
-certificates are accepted only, the default depth of 1 means the client
-certificate can be self-signed or has to be signed by a CA which is directly
-known to the server (i.e. the CA's certificate is under
-<a href="#sslcacertificatepath" class="directive"><code class="directive">SSLCACertificatePath</code></a>), etc.</p>
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><p align="center"><strong>Example</strong></p><code>
-SSLVerifyDepth 10
-</code></td></tr></table></blockquote>
-</usage><hr/><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img alt="Index" src="../images/index.gif"/></a><a href="../"><img alt="Home" src="../images/home.gif"/></a></blockquote></body></html>
\ No newline at end of file
diff --git a/docs/manual/mod/mod_ssl.xml b/docs/manual/mod/mod_ssl.xml
deleted file mode 100644
index 71f41d7..0000000
--- a/docs/manual/mod/mod_ssl.xml
+++ /dev/null
@@ -1,1256 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.xsl"?>
-<modulesynopsis>
-
-<name>mod_ssl</name>
-<description>Strong cryptography using the Secure Sockets
-Layer (SSL) and Transport Layer Security (TLS) protocols</description>
-<status>Extension</status>
-<sourcefile>mod_ssl.c</sourcefile>
-<identifier>ssl_module</identifier>
-
-<summary>
-<p>This module provides SSL v2/v3 and TLS v1 support for the Apache
-HTTP Server.  It was contributed by Ralf S. Engeschall based on his
-mod_ssl project and originally derived from work by Ben Laurie.</p>
-
-<p>This module relies on <a href="http://www.openssl.org/">OpenSSL</a>
-to provide the cryptography engine.</p>
-
-<p>Further details, discussion, and examples are provided in the
-<a href="../ssl/">SSL documentation</a>.</p>
-</summary>
-
-<section id="ToC25"><title>Environment Variables</title>
-
-<p>This module provides a lot of SSL information as additional environment
-variables to the SSI and CGI namespace. The generated variables are listed in
-the table below. For backward compatibility the information can
-be made available under different names, too. Look in the <a
-href="../ssl/ssl_compat.html">Compatibility</a> chapter for details on the
-compatibility variables.</p>
-
-<div align="center">
-<a name="table4"></a>
-<table width="600" cellspacing="0" cellpadding="1" border="0" summary="">
-<caption align="bottom" id="sf">SSI/CGI Environment Variables</caption>
-<tr><td bgcolor="#cccccc">
-<table width="598" cellpadding="5" cellspacing="0" border="0" summary="">
-<tr><td valign="top" align="center" bgcolor="#ffffff">
-<table border="0" cellspacing="0" cellpadding="2" width="598" summary="">
-<tr id="H">
- <td><strong>Variable Name:</strong></td>
- <td><strong>Value Type:</strong></td>
- <td><strong>Description:</strong></td>
-</tr>
-<tr id="D"><td><code>HTTPS</code></td>                         <td>flag</td>      <td>HTTPS is being used.</td></tr>
-<tr id="H"><td><code>SSL_PROTOCOL</code></td>                  <td>string</td>    <td>The SSL protocol version (SSLv2, SSLv3, TLSv1)</td></tr>
-<tr id="H"><td><code>SSL_SESSION_ID</code></td>                <td>string</td>    <td>The hex-encoded SSL session id</td></tr>
-<tr id="D"><td><code>SSL_CIPHER</code></td>                    <td>string</td>    <td>The cipher specification name</td></tr>
-<tr id="D"><td><code>SSL_CIPHER_EXPORT</code></td>             <td>string</td>    <td><code>true</code> if cipher is an export cipher</td></tr>
-<tr id="H"><td><code>SSL_CIPHER_USEKEYSIZE</code></td>         <td>number</td>    <td>Number of cipher bits (actually used)</td></tr>
-<tr id="D"><td><code>SSL_CIPHER_ALGKEYSIZE</code></td>         <td>number</td>    <td>Number of cipher bits (possible)</td></tr>
-<tr id="H"><td><code>SSL_VERSION_INTERFACE</code></td>         <td>string</td>    <td>The mod_ssl program version</td></tr>
-<tr id="D"><td><code>SSL_VERSION_LIBRARY</code></td>           <td>string</td>    <td>The OpenSSL program version</td></tr>
-<tr id="H"><td><code>SSL_CLIENT_M_VERSION</code></td>          <td>string</td>    <td>The version of the client certificate</td></tr>
-<tr id="D"><td><code>SSL_CLIENT_M_SERIAL</code></td>           <td>string</td>    <td>The serial of the client certificate</td></tr>
-<tr id="H"><td><code>SSL_CLIENT_S_DN</code></td>               <td>string</td>    <td>Subject DN in client's certificate</td></tr>
-<tr id="D"><td><code>SSL_CLIENT_S_DN_</code><em>x509</em></td> <td>string</td>    <td>Component of client's Subject DN</td></tr>
-<tr id="H"><td><code>SSL_CLIENT_I_DN</code></td>               <td>string</td>    <td>Issuer DN of client's certificate</td></tr>
-<tr id="D"><td><code>SSL_CLIENT_I_DN_</code><em>x509</em></td> <td>string</td>    <td>Component of client's Issuer DN</td></tr>
-<tr id="H"><td><code>SSL_CLIENT_V_START</code></td>            <td>string</td>    <td>Validity of client's certificate (start time)</td></tr>
-<tr id="D"><td><code>SSL_CLIENT_V_END</code></td>              <td>string</td>    <td>Validity of client's certificate (end time)</td></tr>
-<tr id="H"><td><code>SSL_CLIENT_A_SIG</code></td>              <td>string</td>    <td>Algorithm used for the signature of client's certificate</td></tr>
-<tr id="D"><td><code>SSL_CLIENT_A_KEY</code></td>              <td>string</td>    <td>Algorithm used for the public key of client's certificate</td></tr>
-<tr id="H"><td><code>SSL_CLIENT_CERT</code></td>               <td>string</td>    <td>PEM-encoded client certificate</td></tr>
-<tr id="D"><td><code>SSL_CLIENT_CERT_CHAIN</code><em>n</em></td> <td>string</td>    <td>PEM-encoded certificates in client certificate chain</td></tr>
-<tr id="H"><td><code>SSL_CLIENT_VERIFY</code></td>             <td>string</td>    <td><code>NONE</code>, <code>SUCCESS</code>, <code>GENEROUS</code> or <code>FAILED:</code><em>reason</em></td></tr>
-<tr id="D"><td><code>SSL_SERVER_M_VERSION</code></td>          <td>string</td>    <td>The version of the server certificate</td></tr>
-<tr id="H"><td><code>SSL_SERVER_M_SERIAL</code></td>           <td>string</td>    <td>The serial of the server certificate</td></tr>
-<tr id="D"><td><code>SSL_SERVER_S_DN</code></td>               <td>string</td>    <td>Subject DN in server's certificate</td></tr>
-<tr id="H"><td><code>SSL_SERVER_S_DN_</code><em>x509</em></td> <td>string</td>    <td>Component of server's Subject DN</td></tr>
-<tr id="D"><td><code>SSL_SERVER_I_DN</code></td>               <td>string</td>    <td>Issuer DN of server's certificate</td></tr>
-<tr id="H"><td><code>SSL_SERVER_I_DN_</code><em>x509</em></td> <td>string</td>    <td>Component of server's Issuer DN</td></tr>
-<tr id="D"><td><code>SSL_SERVER_V_START</code></td>            <td>string</td>    <td>Validity of server's certificate (start time)</td></tr>
-<tr id="H"><td><code>SSL_SERVER_V_END</code></td>              <td>string</td>    <td>Validity of server's certificate (end time)</td></tr>
-<tr id="D"><td><code>SSL_SERVER_A_SIG</code></td>              <td>string</td>    <td>Algorithm used for the signature of server's certificate</td></tr>
-<tr id="H"><td><code>SSL_SERVER_A_KEY</code></td>              <td>string</td>    <td>Algorithm used for the public key of server's certificate</td></tr>
-<tr id="D"><td><code>SSL_SERVER_CERT</code></td>               <td>string</td>    <td>PEM-encoded server certificate</td></tr>
-</table>
-[ where <em>x509</em> is a component of a X.509 DN:
-  <code>C,ST,L,O,OU,CN,T,I,G,S,D,UID,Email</code> ]
-</td>
-</tr></table>
-</td></tr></table>
-</div>
-</section>
-
-<section id="ToC26"><title>Custom Log Formats</title>
-
-<p>When <module>mod_ssl</module> is built into Apache or at least
-loaded (under DSO situation) additional functions exist for the <a
-href="../mod_log_config.html#formats">Custom Log Format</a> of 
-<module>mod_log_config</module>. First there is an
-additional ``<code>%{</code><em>varname</em><code>}x</code>''
-eXtension format function which can be used to expand any variables
-provided by any module, especially those provided by mod_ssl which can
-you find in the above table.</p>
-<p>
-For backward compatibility there is additionally a special
-``<code>%{</code><em>name</em><code>}c</code>'' cryptography format function
-provided. Information about this function is provided in the <a
-href="../ssl/ssl_compat.html">Compatibility</a> chapter.</p>
-<p>
-Example:</p>
-<example>
-CustomLog logs/ssl_request_log \
-          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
-</example>
-</section>
-
-<directivesynopsis>
-<name>SSLPassPhraseDialog</name>
-<description>Type of pass phrase dialog for encrypted private 
-keys</description>
-<syntax>SSLPassPhraseDialog <em>type</em></syntax>
-<default>SSLPassPhraseDialog builtin</default>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
-<p>
-When Apache starts up it has to read the various Certificate (see
-<directive module="mod_ssl">SSLCertificateFile</directive>) and
-Private Key (see <directive
-module="mod_ssl">SSLCertificateKeyFile</directive>) files of the
-SSL-enabled virtual servers. Because for security reasons the Private
-Key files are usually encrypted, mod_ssl needs to query the
-administrator for a Pass Phrase in order to decrypt those files. This
-query can be done in two ways which can be configured by
-<em>type</em>:</p>
-<ul>
-<li><code>builtin</code>
-    <p>
-    This is the default where an interactive terminal dialog occurs at startup
-    time just before Apache detaches from the terminal. Here the administrator
-    has to manually enter the Pass Phrase for each encrypted Private Key file.
-    Because a lot of SSL-enabled virtual hosts can be configured, the
-    following reuse-scheme is used to minimize the dialog: When a Private Key
-    file is encrypted, all known Pass Phrases (at the beginning there are
-    none, of course) are tried. If one of those known Pass Phrases succeeds no
-    dialog pops up for this particular Private Key file. If none succeeded,
-    another Pass Phrase is queried on the terminal and remembered for the next
-    round (where it perhaps can be reused).</p>
-    <p>
-    This scheme allows mod_ssl to be maximally flexible (because for N encrypted
-    Private Key files you <em>can</em> use N different Pass Phrases - but then
-    you have to enter all of them, of course) while minimizing the terminal
-    dialog (i.e. when you use a single Pass Phrase for all N Private Key files
-    this Pass Phrase is queried only once).</p></li>
-
-<li><code>exec:/path/to/program</code>
-    <p>
-    Here an external program is configured which is called at startup for each
-    encrypted Private Key file. It is called with two arguments (the first is
-    of the form ``<code>servername:portnumber</code>'', the second is either
-    ``<code>RSA</code>'' or ``<code>DSA</code>''), which indicate for which
-    server and algorithm it has to print the corresponding Pass Phrase to
-    <code>stdout</code>. The intent is that this external program first runs
-    security checks to make sure that the system is not compromised by an
-    attacker, and only when these checks were passed successfully it provides
-    the Pass Phrase.</p>
-    <p>
-    Both these security checks, and the way the Pass Phrase is determined, can
-    be as complex as you like. Mod_ssl just defines the interface: an
-    executable program which provides the Pass Phrase on <code>stdout</code>.
-    Nothing more or less! So, if you're really paranoid about security, here
-    is your interface. Anything else has to be left as an exercise to the
-    administrator, because local security requirements are so different.</p>
-    <p>
-    The reuse-algorithm above is used here, too. In other words: The external
-    program is called only once per unique Pass Phrase.</p></li>
-</ul>
-<p>
-Example:</p>
-<example>
-SSLPassPhraseDialog exec:/usr/local/apache/sbin/pp-filter
-</example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>SSLMutex</name>
-<description>Semaphore for internal mutual exclusion of 
-operations</description>
-<syntax>SSLMutex <em>type</em></syntax>
-<default>SSLMutex none</default>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
-<p>
-This configures the SSL engine's semaphore (aka. lock) which is used for mutual
-exclusion of operations which have to be done in a synchronized way between the
-pre-forked Apache server processes. This directive can only be used in the
-global server context because it's only useful to have one global mutex.</p>
-<p>
-The following Mutex <em>types</em> are available:</p>
-<ul>
-<li><code>none</code>
-    <p>
-    This is the default where no Mutex is used at all. Use it at your own
-    risk. But because currently the Mutex is mainly used for synchronizing
-    write access to the SSL Session Cache you can live without it as long
-    as you accept a sometimes garbled Session Cache. So it's not recommended
-    to leave this the default. Instead configure a real Mutex.</p></li>
-<li><code>file:/path/to/mutex</code>
-    <p>
-    This is the portable and (under Unix) always provided Mutex variant where
-    a physical (lock-)file is used as the Mutex. Always use a local disk
-    filesystem for <code>/path/to/mutex</code> and never a file residing on a
-    NFS- or AFS-filesystem. Note: Internally, the Process ID (PID) of the
-    Apache parent process is automatically appended to
-    <code>/path/to/mutex</code> to make it unique, so you don't have to worry
-    about conflicts yourself. Notice that this type of mutex is not available
-    under the Win32 environment. There you <em>have</em> to use the semaphore
-    mutex.</p></li>
-<li><code>sem</code>
-    <p>
-    This is the most elegant but also most non-portable Mutex variant where a
-    SysV IPC Semaphore (under Unix) and a Windows Mutex (under Win32) is used
-    when possible. It is only available when the underlying platform
-    supports it.</p></li>
-</ul>
-<example><title>Example</title>
-SSLMutex file:/usr/local/apache/logs/ssl_mutex
-</example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>SSLRandomSeed</name>
-<description>Pseudo Random Number Generator (PRNG) seeding 
-source</description>
-<syntax>SSLRandomSeed <em>context</em> <em>source</em> 
-[<em>bytes</em>]</syntax>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
-<p>
-This configures one or more sources for seeding the Pseudo Random Number
-Generator (PRNG) in OpenSSL at startup time (<em>context</em> is
-<code>startup</code>) and/or just before a new SSL connection is established
-(<em>context</em> is <code>connect</code>). This directive can only be used
-in the global server context because the PRNG is a global facility.</p>
-<p>
-The following <em>source</em> variants are available:</p>
-<ul>
-<li><code>builtin</code>
-    <p> This is the always available builtin seeding source. It's usage
-    consumes minimum CPU cycles under runtime and hence can be always used
-    without drawbacks. The source used for seeding the PRNG contains of the
-    current time, the current process id and (when applicable) a randomly
-    choosen 1KB extract of the inter-process scoreboard structure of Apache.
-    The drawback is that this is not really a strong source and at startup
-    time (where the scoreboard is still not available) this source just
-    produces a few bytes of entropy. So you should always, at least for the
-    startup, use an additional seeding source.</p></li>
-<li><code>file:/path/to/source</code>
-    <p>
-    This variant uses an external file <code>/path/to/source</code> as the
-    source for seeding the PRNG. When <em>bytes</em> is specified, only the
-    first <em>bytes</em> number of bytes of the file form the entropy (and
-    <em>bytes</em> is given to <code>/path/to/source</code> as the first
-    argument). When <em>bytes</em> is not specified the whole file forms the
-    entropy (and <code>0</code> is given to <code>/path/to/source</code> as
-    the first argument). Use this especially at startup time, for instance
-    with an available <code>/dev/random</code> and/or
-    <code>/dev/urandom</code> devices (which usually exist on modern Unix
-    derivates like FreeBSD and Linux).</p>
-    <p>
-    <em>But be careful</em>: Usually <code>/dev/random</code> provides only as
-    much entropy data as it actually has, i.e. when you request 512 bytes of
-    entropy, but the device currently has only 100 bytes available two things
-    can happen: On some platforms you receive only the 100 bytes while on
-    other platforms the read blocks until enough bytes are available (which
-    can take a long time). Here using an existing <code>/dev/urandom</code> is
-    better, because it never blocks and actually gives the amount of requested
-    data. The drawback is just that the quality of the received data may not
-    be the best.</p>
-    <p>
-    On some platforms like FreeBSD one can even control how the entropy is
-    actually generated, i.e. by which system interrupts. More details one can
-    find under <em>rndcontrol(8)</em> on those platforms. Alternatively, when
-    your system lacks such a random device, you can use tool
-    like <a href="http://www.lothar.com/tech/crypto/">EGD</a>
-    (Entropy Gathering Daemon) and run it's client program with the
-    <code>exec:/path/to/program/</code> variant (see below) or use
-    <code>egd:/path/to/egd-socket</code> (see below).</p></li>
-
-<li><code>exec:/path/to/program</code>
-    <p>
-    This variant uses an external executable
-    <code>/path/to/program</code> as the source for seeding the
-    PRNG. When <em>bytes</em> is specified, only the first
-    <em>bytes</em> number of bytes of its <code>stdout</code> contents
-    form the entropy. When <em>bytes</em> is not specified, the
-    entirety of the data produced on <code>stdout</code> form the
-    entropy. Use this only at startup time when you need a very strong
-    seeding with the help of an external program (for instance as in
-    the example above with the <code>truerand</code> utility you can
-    find in the mod_ssl distribution which is based on the AT&amp;T
-    <em>truerand</em> library). Using this in the connection context
-    slows down the server too dramatically, of course.  So usually you
-    should avoid using external programs in that context.</p></li>
-<li><code>egd:/path/to/egd-socket</code> (Unix only)
-    <p>
-    This variant uses the Unix domain socket of the
-    external Entropy Gathering Daemon (EGD) (see <a
-    href="http://www.lothar.com/tech/crypto/">http://www.lothar.com/tech
-    /crypto/</a>) to seed the PRNG. Use this if no random device exists
-    on your platform.</p></li>
-</ul>
-<example><title>Example</title>
-SSLRandomSeed startup builtin<br />
-SSLRandomSeed startup file:/dev/random<br />
-SSLRandomSeed startup file:/dev/urandom 1024<br />
-SSLRandomSeed startup exec:/usr/local/bin/truerand 16<br />
-SSLRandomSeed connect builtin<br />
-SSLRandomSeed connect file:/dev/random<br />
-SSLRandomSeed connect file:/dev/urandom 1024<br />
-</example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>SSLSessionCache</name>
-<description>Type of the global/inter-process SSL Session 
-Cache</description>
-<syntax>SSLSessionCache <em>type</em></syntax>
-<default>SSLSessionCache none</default>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
-<p>
-This configures the storage type of the global/inter-process SSL Session
-Cache. This cache is an optional facility which speeds up parallel request
-processing. For requests to the same server process (via HTTP keep-alive),
-OpenSSL already caches the SSL session information locally. But because modern
-clients request inlined images and other data via parallel requests (usually
-up to four parallel requests are common) those requests are served by
-<em>different</em> pre-forked server processes. Here an inter-process cache
-helps to avoid unneccessary session handshakes.</p>
-<p>
-The following two storage <em>type</em>s are currently supported:</p>
-<ul>
-<li><code>none</code>
-    <p>
-    This is the default and just disables the global/inter-process Session
-    Cache. There is no drawback in functionality, but a noticeable speed
-    penalty can be observed.</p></li>
-<li><code>dbm:/path/to/datafile</code>
-    <p>
-    This makes use of a DBM hashfile on the local disk to synchronize the
-    local OpenSSL memory caches of the server processes. The slight increase
-    in I/O on the server results in a visible request speedup for your
-    clients, so this type of storage is generally recommended.</p></li>
-<li><code>shm:/path/to/datafile</code>[<code>(</code><em>size</em><code>)</code>]
-    <p>
-    This makes use of a high-performance hash table (approx. <em>size</em> bytes
-    in size) inside a shared memory segment in RAM (established via
-    <code>/path/to/datafile</code>) to synchronize the local OpenSSL memory
-    caches of the server processes. This storage type is not available on all
-    platforms. See the mod_ssl <code>INSTALL</code> document for details on
-    how to build Apache+EAPI with shared memory support.</p></li>
-</ul>
-<example><title>Examples</title>
-SSLSessionCache dbm:/usr/local/apache/logs/ssl_gcache_data<br />
-SSLSessionCache shm:/usr/local/apache/logs/ssl_gcache_data(512000)
-</example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>SSLSessionCacheTimeout</name>
-<description>Number of seconds before an SSL session expires
-in the Session Cache</description>
-<syntax>SSLSessionCacheTimeout <em>seconds</em></syntax>
-<default>SSLSessionCacheTimeout 300</default>
-<contextlist><context>server config</context>
-<context>virtual host</context></contextlist>
-
-<usage>
-<p>
-This directive sets the timeout in seconds for the information stored in the
-global/inter-process SSL Session Cache and the OpenSSL internal memory cache.
-It can be set as low as 15 for testing, but should be set to higher
-values like 300 in real life.</p>
-<example><title>Example</title>
-SSLSessionCacheTimeout 600
-</example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>SSLEngine</name>
-<description>SSL Engine Operation Switch</description>
-<syntax>SSLEngine on|off</syntax>
-<default>SSLEngine off</default>
-<contextlist><context>server config</context>
-<context>virtual host</context></contextlist>
-
-<usage>
-<p>
-This directive toggles the usage of the SSL/TLS Protocol Engine. This
-is usually used inside a <directive module="core"
-type="section">VirtualHost</directive> section to enable SSL/TLS for a
-particular virtual host. By default the SSL/TLS Protocol Engine is
-disabled for both the main server and all configured virtual hosts.</p>
-<example><title>Example</title>
-&lt;VirtualHost _default_:443&gt;<br />
-SSLEngine on<br />
-...<br />
-&lt;/VirtualHost&gt;
-</example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>SSLProtocol</name>
-<description>Configure usable SSL protocol flavors</description>
-<syntax>SSLProtocol [+|-]<em>protocol</em> ...</syntax>
-<default>SSLProtocol all</default>
-<contextlist><context>server config</context>
-<context>virtual host</context></contextlist>
-<override>Options</override>
-
-<usage><!-- XXX Why does this have an override and not .htaccess context? -->
-<p>
-This directive can be used to control the SSL protocol flavors mod_ssl should
-use when establishing its server environment. Clients then can only connect
-with one of the provided protocols.</p>
-<p>
-The available (case-insensitive) <em>protocol</em>s are:</p>
-<ul>
-<li><code>SSLv2</code>
-    <p>
-    This is the Secure Sockets Layer (SSL) protocol, version 2.0. It is the
-    original SSL protocol as designed by Netscape Corporation.</p></li>
-
-<li><code>SSLv3</code>
-    <p>
-    This is the Secure Sockets Layer (SSL) protocol, version 3.0. It is the
-    successor to SSLv2 and the currently (as of February 1999) de-facto
-    standardized SSL protocol from Netscape Corporation. It's supported by
-    almost all popular browsers.</p></li>
-
-<li><code>TLSv1</code>
-    <p>
-    This is the Transport Layer Security (TLS) protocol, version 1.0. It is the
-    successor to SSLv3 and currently (as of February 1999) still under
-    construction by the Internet Engineering Task Force (IETF). It's still
-    not supported by any popular browsers.</p></li>
-
-<li><code>All</code>
-    <p>
-    This is a shortcut for ``<code>+SSLv2 +SSLv3 +TLSv1</code>'' and a
-    convinient way for enabling all protocols except one when used in
-    combination with the minus sign on a protocol as the example above 
-    shows.</p></li>
-</ul>
-<example><title>Example</title>
-#   enable SSLv3 and TLSv1, but not SSLv2<br />
-SSLProtocol all -SSLv2
-</example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>SSLCipherSuite</name>
-<description>Cipher Suite available for negotiation in SSL 
-handshake</description>
-<syntax>SSLCipherSuite <em>cipher-spec</em></syntax>
-<default>SSLCipherSuite ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP</default>
-<contextlist><context>server config</context>
-<context>virtual host</context>
-<context>directory</context>
-<context>.htaccess</context></contextlist>
-<override>AuthConfig</override>
-
-<usage>
-<p>
-This complex directive uses a colon-separated <em>cipher-spec</em> string
-consisting of OpenSSL cipher specifications to configure the Cipher Suite the
-client is permitted to negotiate in the SSL handshake phase. Notice that this
-directive can be used both in per-server and per-directory context. In
-per-server context it applies to the standard SSL handshake when a connection
-is established. In per-directory context it forces a SSL renegotation with the
-reconfigured Cipher Suite after the HTTP request was read but before the HTTP
-response is sent.</p>
-<p>
-An SSL cipher specification in <em>cipher-spec</em> is composed of 4 major
-attributes plus a few extra minor ones:</p>
-<ul>
-<li><em>Key Exchange Algorithm</em>:<br />
-    RSA or Diffie-Hellman variants.
-</li>
-<li><em>Authentication Algorithm</em>:<br />
-    RSA, Diffie-Hellman, DSS or none.
-</li>
-<li><em>Cipher/Encryption Algorithm</em>:<br />
-    DES, Triple-DES, RC4, RC2, IDEA or none.
-</li>
-<li><em>MAC Digest Algorithm</em>:<br />
-    MD5, SHA or SHA1.
-</li>
-</ul>
-<p>An SSL cipher can also be an export cipher and is either a SSLv2 or SSLv3/TLSv1
-cipher (here TLSv1 is equivalent to SSLv3). To specify which ciphers to use,
-one can either specify all the Ciphers, one at a time, or use aliases to
-specify the preference and order for the ciphers (see <a href="#table1">Table
-1</a>).</p>
-
-<div align="center">
-<a name="table1"></a>
-<table width="600" cellspacing="0" cellpadding="1" border="0" summary="">
-<caption align="bottom" id="sf">Table 1: OpenSSL Cipher Specification Tags</caption>
-<tr><td bgcolor="#cccccc">
-<table width="598" cellpadding="5" cellspacing="0" border="0" summary="">
-<tr><td valign="top" align="center" bgcolor="#ffffff">
-<table border="0" cellspacing="0" cellpadding="2" width="598" summary="">
-<tr id="D"><td><strong>Tag</strong></td> <td><strong>Description</strong></td></tr>
-<tr id="H"><td colspan="2"><em>Key Exchange Algorithm:</em></td></tr>
-<tr id="D"><td><code>kRSA</code></td>   <td>RSA key exchange</td></tr>
-<tr id="H"><td><code>kDHr</code></td>   <td>Diffie-Hellman key exchange with RSA key</td></tr>
-<tr id="D"><td><code>kDHd</code></td>   <td>Diffie-Hellman key exchange with DSA key</td></tr>
-<tr id="H"><td><code>kEDH</code></td>   <td>Ephemeral (temp.key) Diffie-Hellman key exchange (no cert)</td>   </tr>
-<tr id="H"><td colspan="2"><em>Authentication Algorithm:</em></td></tr>
-<tr id="D"><td><code>aNULL</code></td>  <td>No authentication</td></tr>
-<tr id="H"><td><code>aRSA</code></td>   <td>RSA authentication</td></tr>
-<tr id="D"><td><code>aDSS</code></td>   <td>DSS authentication</td> </tr>
-<tr id="H"><td><code>aDH</code></td>    <td>Diffie-Hellman authentication</td></tr>
-<tr id="D"><td colspan="2"><em>Cipher Encoding Algorithm:</em></td></tr>
-<tr id="H"><td><code>eNULL</code></td>  <td>No encoding</td>         </tr>
-<tr id="D"><td><code>DES</code></td>    <td>DES encoding</td>        </tr>
-<tr id="H"><td><code>3DES</code></td>   <td>Triple-DES encoding</td> </tr>
-<tr id="D"><td><code>RC4</code></td>    <td>RC4 encoding</td>       </tr>
-<tr id="H"><td><code>RC2</code></td>    <td>RC2 encoding</td>       </tr>
-<tr id="D"><td><code>IDEA</code></td>   <td>IDEA encoding</td>       </tr>
-<tr id="H"><td colspan="2"><em>MAC Digest Algorithm</em>:</td></tr>
-<tr id="D"><td><code>MD5</code></td>    <td>MD5 hash function</td></tr>
-<tr id="H"><td><code>SHA1</code></td>   <td>SHA1 hash function</td></tr>
-<tr id="D"><td><code>SHA</code></td>    <td>SHA hash function</td> </tr>
-<tr id="H"><td colspan="2"><em>Aliases:</em></td></tr>
-<tr id="D"><td><code>SSLv2</code></td>  <td>all SSL version 2.0 ciphers</td></tr>
-<tr id="H"><td><code>SSLv3</code></td>  <td>all SSL version 3.0 ciphers</td> </tr>
-<tr id="D"><td><code>TLSv1</code></td>  <td>all TLS version 1.0 ciphers</td> </tr>
-<tr id="H"><td><code>EXP</code></td>    <td>all export ciphers</td>  </tr>
-<tr id="D"><td><code>EXPORT40</code></td> <td>all 40-bit export ciphers only</td>  </tr>
-<tr id="H"><td><code>EXPORT56</code></td> <td>all 56-bit export ciphers only</td>  </tr>
-<tr id="D"><td><code>LOW</code></td>    <td>all low strength ciphers (no export, single DES)</td></tr>
-<tr id="H"><td><code>MEDIUM</code></td> <td>all ciphers with 128 bit encryption</td> </tr>
-<tr id="D"><td><code>HIGH</code></td>   <td>all ciphers using Triple-DES</td>     </tr>
-<tr id="H"><td><code>RSA</code></td>    <td>all ciphers using RSA key exchange</td> </tr>
-<tr id="D"><td><code>DH</code></td>     <td>all ciphers using Diffie-Hellman key exchange</td> </tr>
-<tr id="H"><td><code>EDH</code></td>    <td>all ciphers using Ephemeral Diffie-Hellman key exchange</td> </tr>
-<tr id="D"><td><code>ADH</code></td>    <td>all ciphers using Anonymous Diffie-Hellman key exchange</td> </tr>
-<tr id="H"><td><code>DSS</code></td>    <td>all ciphers using DSS authentication</td> </tr>
-<tr id="D"><td><code>NULL</code></td>   <td>all ciphers using no encryption</td> </tr>
-</table>
-</td>
-</tr></table>
-</td></tr></table>
-</div>
-<p>
-Now where this becomes interesting is that these can be put together
-to specify the order and ciphers you wish to use. To speed this up
-there are also aliases (<code>SSLv2, SSLv3, TLSv1, EXP, LOW, MEDIUM,
-HIGH</code>) for certain groups of ciphers. These tags can be joined
-together with prefixes to form the <em>cipher-spec</em>. Available
-prefixes are:</p>
-<ul>
-<li>none: add cipher to list</li>
-<li><code>+</code>: add ciphers to list and pull them to current location in list</li>
-<li><code>-</code>: remove cipher from list (can be added later again)</li>
-<li><code>!</code>: kill cipher from list completely (can <strong>not</strong> be added later again)</li>
-</ul>
-<p>A simpler way to look at all of this is to use the ``<code>openssl ciphers
--v</code>'' command which provides a nice way to successively create the
-correct <em>cipher-spec</em> string. The default <em>cipher-spec</em> string
-is ``<code>ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP</code>'' which
-means the following: first, remove from consideration any ciphers that do not
-authenticate, i.e. for SSL only the Anonymous Diffie-Hellman ciphers. Next,
-use ciphers using RC4 and RSA. Next include the high, medium and then the low
-security ciphers. Finally <em>pull</em> all SSLv2 and export ciphers to the
-end of the list.</p>
-<example>
-<pre>
-$ openssl ciphers -v 'ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP'
-NULL-SHA                SSLv3 Kx=RSA      Au=RSA  Enc=None      Mac=SHA1
-NULL-MD5                SSLv3 Kx=RSA      Au=RSA  Enc=None      Mac=MD5
-EDH-RSA-DES-CBC3-SHA    SSLv3 Kx=DH       Au=RSA  Enc=3DES(168) Mac=SHA1
-...                     ...               ...     ...           ...
-EXP-RC4-MD5             SSLv3 Kx=RSA(512) Au=RSA  Enc=RC4(40)   Mac=MD5  export
-EXP-RC2-CBC-MD5         SSLv2 Kx=RSA(512) Au=RSA  Enc=RC2(40)   Mac=MD5  export
-EXP-RC4-MD5             SSLv2 Kx=RSA(512) Au=RSA  Enc=RC4(40)   Mac=MD5  export
-</pre>
-</example>
-<p>The complete list of particular RSA &amp; DH ciphers for SSL is given in <a
-href="#table2">Table 2</a>.</p>
-<example><title>Example</title>
-SSLCipherSuite RSA:!EXP:!NULL:+HIGH:+MEDIUM:-LOW
-</example>
-<div align="center">
-<a name="table2"></a>
-<table width="600" cellspacing="0" cellpadding="1" border="0" summary="">
-<caption align="bottom" id="sf">Table 2: Particular SSL Ciphers</caption>
-<tr><td bgcolor="#cccccc">
-<table width="598" cellpadding="5" cellspacing="0" border="0" summary="">
-<tr><td valign="top" align="center" bgcolor="#ffffff">
-<table border="0" cellspacing="0" cellpadding="2" width="598" summary="">
-<tr id="D"><td><strong>Cipher-Tag</strong></td> <td><strong>Protocol</strong></td> <td><strong>Key Ex.</strong></td> <td><strong>Auth.</strong></td> <td><strong>Enc.</strong></td> <td><strong>MAC</strong></td> <td><strong>Type</strong></td> </tr>
-<tr id="H"><td colspan="7"><em>RSA Ciphers:</em></td></tr>
-<tr id="D"><td><code>DES-CBC3-SHA</code></td> <td>SSLv3</td> <td>RSA</td> <td>RSA</td> <td>3DES(168)</td> <td>SHA1</td> <td>&nbsp;</td> </tr>
-<tr id="H"><td><code>DES-CBC3-MD5</code></td> <td>SSLv2</td> <td>RSA</td> <td>RSA</td> <td>3DES(168)</td> <td>MD5</td> <td>&nbsp; </td> </tr>
-<tr id="D"><td><code>IDEA-CBC-SHA</code></td> <td>SSLv3</td> <td>RSA</td> <td>RSA</td> <td>IDEA(128)</td> <td>SHA1</td> <td>&nbsp;</td> </tr>
-<tr id="H"><td><code>RC4-SHA</code></td> <td>SSLv3</td> <td>RSA</td> <td>RSA</td> <td>RC4(128)</td> <td>SHA1</td> <td>&nbsp;</td> </tr>
-<tr id="D"><td><code>RC4-MD5</code></td> <td>SSLv3</td> <td>RSA</td> <td>RSA</td> <td>RC4(128)</td> <td>MD5</td> <td>&nbsp; </td> </tr>
-<tr id="H"><td><code>IDEA-CBC-MD5</code></td> <td>SSLv2</td> <td>RSA</td> <td>RSA</td> <td>IDEA(128)</td> <td>MD5</td> <td>&nbsp; </td> </tr>
-<tr id="D"><td><code>RC2-CBC-MD5</code></td> <td>SSLv2</td> <td>RSA</td> <td>RSA</td> <td>RC2(128)</td> <td>MD5</td> <td>&nbsp; </td> </tr>
-<tr id="H"><td><code>RC4-MD5</code></td> <td>SSLv2</td> <td>RSA</td> <td>RSA</td> <td>RC4(128)</td> <td>MD5</td> <td>&nbsp; </td> </tr>
-<tr id="D"><td><code>DES-CBC-SHA</code></td> <td>SSLv3</td> <td>RSA</td> <td>RSA</td> <td>DES(56)</td> <td>SHA1</td> <td>&nbsp;</td> </tr>
-<tr id="H"><td><code>RC4-64-MD5</code></td> <td>SSLv2</td> <td>RSA</td> <td>RSA</td> <td>RC4(64)</td> <td>MD5</td> <td>&nbsp; </td> </tr>
-<tr id="D"><td><code>DES-CBC-MD5</code></td> <td>SSLv2</td> <td>RSA</td> <td>RSA</td> <td>DES(56)</td> <td>MD5</td> <td>&nbsp; </td> </tr>
-<tr id="H"><td><code>EXP-DES-CBC-SHA</code></td> <td>SSLv3</td> <td>RSA(512)</td> <td>RSA</td> <td>DES(40)</td> <td>SHA1</td> <td> export</td> </tr>
-<tr id="D"><td><code>EXP-RC2-CBC-MD5</code></td> <td>SSLv3</td> <td>RSA(512)</td> <td>RSA</td> <td>RC2(40)</td> <td>MD5</td> <td>  export</td> </tr>
-<tr id="H"><td><code>EXP-RC4-MD5</code></td> <td>SSLv3</td> <td>RSA(512)</td> <td>RSA</td> <td>RC4(40)</td> <td>MD5</td> <td>  export</td> </tr>
-<tr id="D"><td><code>EXP-RC2-CBC-MD5</code></td> <td>SSLv2</td> <td>RSA(512)</td> <td>RSA</td> <td>RC2(40)</td> <td>MD5</td> <td>  export</td> </tr>
-<tr id="H"><td><code>EXP-RC4-MD5</code></td> <td>SSLv2</td> <td>RSA(512)</td> <td>RSA</td> <td>RC4(40)</td> <td>MD5</td> <td>  export</td> </tr>
-<tr id="D"><td><code>NULL-SHA</code></td> <td>SSLv3</td> <td>RSA</td> <td>RSA</td> <td>None</td> <td>SHA1</td> <td>&nbsp;</td> </tr>
-<tr id="H"><td><code>NULL-MD5</code></td> <td>SSLv3</td> <td>RSA</td> <td>RSA</td> <td>None</td> <td>MD5</td> <td>&nbsp; </td> </tr>
-<tr id="D"><td colspan="7"><em>Diffie-Hellman Ciphers:</em></td></tr>
-<tr id="H"><td><code>ADH-DES-CBC3-SHA</code></td> <td>SSLv3</td> <td>DH</td> <td>None</td> <td>3DES(168)</td> <td>SHA1</td> <td>&nbsp;</td> </tr>
-<tr id="D"><td><code>ADH-DES-CBC-SHA</code></td> <td>SSLv3</td> <td>DH</td> <td>None</td> <td>DES(56)</td> <td>SHA1</td> <td>&nbsp;</td> </tr>
-<tr id="H"><td><code>ADH-RC4-MD5</code></td> <td>SSLv3</td> <td>DH</td> <td>None</td> <td>RC4(128)</td> <td>MD5</td> <td>&nbsp; </td> </tr>
-<tr id="D"><td><code>EDH-RSA-DES-CBC3-SHA</code></td> <td>SSLv3</td> <td>DH</td> <td>RSA</td> <td>3DES(168)</td> <td>SHA1</td> <td>&nbsp;</td> </tr>
-<tr id="H"><td><code>EDH-DSS-DES-CBC3-SHA</code></td> <td>SSLv3</td> <td>DH</td> <td>DSS</td> <td>3DES(168)</td> <td>SHA1</td> <td>&nbsp;</td> </tr>
-<tr id="D"><td><code>EDH-RSA-DES-CBC-SHA</code></td> <td>SSLv3</td> <td>DH</td> <td>RSA</td> <td>DES(56)</td> <td>SHA1</td> <td>&nbsp;</td> </tr>
-<tr id="H"><td><code>EDH-DSS-DES-CBC-SHA</code></td> <td>SSLv3</td> <td>DH</td> <td>DSS</td> <td>DES(56)</td> <td>SHA1</td> <td>&nbsp;</td> </tr>
-<tr id="D"><td><code>EXP-EDH-RSA-DES-CBC-SHA</code></td> <td>SSLv3</td> <td>DH(512)</td> <td>RSA</td> <td>DES(40)</td> <td>SHA1</td> <td> export</td> </tr>
-<tr id="H"><td><code>EXP-EDH-DSS-DES-CBC-SHA</code></td> <td>SSLv3</td> <td>DH(512)</td> <td>DSS</td> <td>DES(40)</td> <td>SHA1</td> <td> export</td> </tr>
-<tr id="D"><td><code>EXP-ADH-DES-CBC-SHA</code></td> <td>SSLv3</td> <td>DH(512)</td> <td>None</td> <td>DES(40)</td> <td>SHA1</td> <td> export</td> </tr>
-<tr id="H"><td><code>EXP-ADH-RC4-MD5</code></td> <td>SSLv3</td> <td>DH(512)</td> <td>None</td> <td>RC4(40)</td> <td>MD5</td> <td>  export</td> </tr>
-</table>
-</td>
-</tr></table>
-</td></tr></table>
-</div>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>SSLCertificateFile</name>
-<description>Server PEM-encoded X.509 Certificate file</description>
-<syntax>SSLCertificateFile <em>file-path</em></syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context></contextlist>
-
-<usage>
-<p>
-This directive points to the PEM-encoded Certificate file for the server and
-optionally also to the corresponding RSA or DSA Private Key file for it
-(contained in the same file). If the contained Private Key is encrypted the
-Pass Phrase dialog is forced at startup time. This directive can be used up to
-two times (referencing different filenames) when both a RSA and a DSA based
-server certificate is used in parallel.</p>
-<example><title>Example</title>
-SSLCertificateFile /usr/local/apache/conf/ssl.crt/server.crt
-</example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>SSLCertificateKeyFile</name>
-<description>Server PEM-encoded Private Key file</description>
-<syntax>SSLCertificateKeyFile <em>file-path</em></syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context></contextlist>
-
-<usage>
-<p>
-This directive points to the PEM-encoded Private Key file for the
-server. If the Private Key is not combined with the Certificate in the
-<directive>SSLCertificateFile</directive>, use this additional directive to
-point to the file with the stand-alone Private Key. When
-<directive>SSLCertificateFile</directive> is used and the file
-contains both the Certificate and the Private Key this directive need
-not be used. But we strongly discourage this practice.  Instead we
-recommend you to separate the Certificate and the Private Key. If the
-contained Private Key is encrypted, the Pass Phrase dialog is forced
-at startup time. This directive can be used up to two times
-(referencing different filenames) when both a RSA and a DSA based
-private key is used in parallel.</p>
-<example><title>Example</title>
-SSLCertificateKeyFile /usr/local/apache/conf/ssl.key/server.key
-</example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>SSLCertificateChainFile</name>
-<description>File of PEM-encoded Server CA Certificates</description>
-<syntax>SSLCertificateChainFile <em>file-path</em></syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context></contextlist>
-
-<usage>
-<p>
-This directive sets the optional <em>all-in-one</em> file where you can
-assemble the certificates of Certification Authorities (CA) which form the
-certificate chain of the server certificate. This starts with the issuing CA
-certificate of of the server certificate and can range up to the root CA
-certificate. Such a file is simply the concatenation of the various
-PEM-encoded CA Certificate files, usually in certificate chain order.</p>
-<p>
-This should be used alternatively and/or additionally to <directive
-module="mod_ssl">SSLCACertificatePath</directive> for explicitly
-constructing the server certificate chain which is sent to the browser
-in addition to the server certificate. It is especially useful to
-avoid conflicts with CA certificates when using client
-authentication. Because although placing a CA certificate of the
-server certificate chain into <directive
-module="mod_ssl">SSLCACertificatePath</directive> has the same effect
-for the certificate chain construction, it has the side-effect that
-client certificates issued by this same CA certificate are also
-accepted on client authentication. That's usually not one expect.</p>
-<p>
-But be careful: Providing the certificate chain works only if you are using a
-<em>single</em> (either RSA <em>or</em> DSA) based server certificate. If you are
-using a coupled RSA+DSA certificate pair, this will work only if actually both
-certificates use the <em>same</em> certificate chain. Else the browsers will be
-confused in this situation.</p>
-<example><title>Example</title>
-SSLCertificateChainFile /usr/local/apache/conf/ssl.crt/ca.crt
-</example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>SSLCACertificatePath</name>
-<description>Directory of PEM-encoded CA Certificates for 
-Client Auth</description>
-<syntax>SSLCACertificatePath <em>directory-path</em></syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context></contextlist>
-
-<usage>
-<p>
-This directive sets the directory where you keep the Certificates of
-Certification Authorities (CAs) whose clients you deal with. These are used to
-verify the client certificate on Client Authentication.</p>
-<p>
-The files in this directory have to be PEM-encoded and are accessed through
-hash filenames. So usually you can't just place the Certificate files
-there: you also have to create symbolic links named
-<em>hash-value</em><code>.N</code>. And you should always make sure this directory
-contains the appropriate symbolic links. Use the <code>Makefile</code> which
-comes with mod_ssl to accomplish this task.</p>
-<example><title>Example</title>
-SSLCACertificatePath /usr/local/apache/conf/ssl.crt/
-</example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>SSLCACertificateFile</name>
-<description>File of concatenated PEM-encoded CA Certificates 
-for Client Auth</description>
-<syntax>SSLCACertificateFile <em>file-path</em></syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context></contextlist>
-
-<usage>
-<p>
-This directive sets the <em>all-in-one</em> file where you can assemble the
-Certificates of Certification Authorities (CA) whose <em>clients</em> you deal
-with. These are used for Client Authentication. Such a file is simply the
-concatenation of the various PEM-encoded Certificate files, in order of
-preference. This can be used alternatively and/or additionally to 
-<directive module="mod_ssl">SSLCACertificatePath</directive>.</p>
-<example><title>Example</title>
-SSLCACertificateFile /usr/local/apache/conf/ssl.crt/ca-bundle-client.crt
-</example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>SSLCARevocationPath</name>
-<description>Directory of PEM-encoded CA CRLs for 
-Client Auth</description>
-<syntax>SSLCARevocationPath <em>directory-path</em></syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context></contextlist>
-
-<usage>
-<p>
-This directive sets the directory where you keep the Certificate Revocation
-Lists (CRL) of Certification Authorities (CAs) whose clients you deal with.
-These are used to revoke the client certificate on Client Authentication.</p>
-<p>
-The files in this directory have to be PEM-encoded and are accessed through
-hash filenames. So usually you have not only to place the CRL files there.
-Additionally you have to create symbolic links named
-<em>hash-value</em><code>.rN</code>. And you should always make sure this directory
-contains the appropriate symbolic links. Use the <code>Makefile</code> which
-comes with <module>mod_ssl</module> to accomplish this task.</p>
-<example><title>Example</title>
-SSLCARevocationPath /usr/local/apache/conf/ssl.crl/
-</example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>SSLCARevocationFile</name>
-<description>File of concatenated PEM-encoded CA CRLs for 
-Client Auth</description>
-<syntax>SSLCARevocationFile <em>file-path</em></syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context></contextlist>
-
-<usage>
-<p>
-This directive sets the <em>all-in-one</em> file where you can
-assemble the Certificate Revocation Lists (CRL) of Certification
-Authorities (CA) whose <em>clients</em> you deal with. These are used
-for Client Authentication.  Such a file is simply the concatenation of
-the various PEM-encoded CRL files, in order of preference. This can be
-used alternatively and/or additionally to <directive
-module="mod_ssl">SSLCARevocationPath</directive>.</p>
-<example><title>Example</title>
-SSLCARevocationFile /usr/local/apache/conf/ssl.crl/ca-bundle-client.crl
-</example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>SSLVerifyClient</name>
-<description>Type of Client Certificate verification</description>
-<syntax>SSLVerifyClient <em>level</em></syntax>
-<default>SSLVerifyClient none</default>
-<contextlist><context>server config</context>
-<context>virtual host</context>
-<context>directory</context>
-<context>.htaccess</context></contextlist>
-<override>AuthConfig</override>
-
-<usage>
-<p>
-This directive sets the Certificate verification level for the Client
-Authentication. Notice that this directive can be used both in per-server and
-per-directory context. In per-server context it applies to the client
-authentication process used in the standard SSL handshake when a connection is
-established. In per-directory context it forces a SSL renegotation with the
-reconfigured client verification level after the HTTP request was read but
-before the HTTP response is sent.</p>
-<p>
-The following levels are available for <em>level</em>:</p>
-<ul>
-<li><strong>none</strong>:
-     no client Certificate is required at all</li>
-<li><strong>optional</strong>:
-     the client <em>may</em> present a valid Certificate</li>
-<li><strong>require</strong>:
-     the client <em>has to</em> present a valid Certificate</li>
-<li><strong>optional_no_ca</strong>:
-     the client may present a valid Certificate<br />
-     but it need not to be (successfully) verifiable.</li>
-</ul>
-<p>In practice only levels <strong>none</strong> and
-<strong>require</strong> are really interesting, because level
-<strong>optional</strong> doesn't work with all browsers and level
-<strong>optional_no_ca</strong> is actually against the idea of
-authentication (but can be used to establish SSL test pages, etc.)</p>
-<example><title>Example</title>
-SSLVerifyClient require
-</example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>SSLVerifyDepth</name>
-<description>Maximum depth of CA Certificates in Client 
-Certificate verification</description>
-<syntax>SSLVerifyDepth <em>number</em></syntax>
-<default>SSLVerifyDepth 1</default>
-<contextlist><context>server config</context>
-<context>virtual host</context>
-<context>directory</context>
-<context>.htaccess</context></contextlist>
-<override>AuthConfig</override>
-
-<usage>
-<p>
-This directive sets how deeply mod_ssl should verify before deciding that the
-clients don't have a valid certificate. Notice that this directive can be
-used both in per-server and per-directory context. In per-server context it
-applies to the client authentication process used in the standard SSL
-handshake when a connection is established. In per-directory context it forces
-a SSL renegotation with the reconfigured client verification depth after the
-HTTP request was read but before the HTTP response is sent.</p>
-<p>
-The depth actually is the maximum number of intermediate certificate issuers,
-i.e. the number of CA certificates which are max allowed to be followed while
-verifying the client certificate. A depth of 0 means that self-signed client
-certificates are accepted only, the default depth of 1 means the client
-certificate can be self-signed or has to be signed by a CA which is directly
-known to the server (i.e. the CA's certificate is under
-<directive module="mod_ssl">SSLCACertificatePath</directive>), etc.</p>
-<example><title>Example</title>
-SSLVerifyDepth 10
-</example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>SSLLog</name>
-<description>Where to write the dedicated SSL engine logfile</description>
-<syntax>SSLLog <em>file-path</em></syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context></contextlist>
-
-<usage>
-<p>
-This directive sets the name of the dedicated SSL protocol engine logfile.
-Error type messages are additionally duplicated to the general Apache error
-log file (directive <code>ErrorLog</code>). Put this somewhere where it cannot
-be used for symlink attacks on a real server (i.e. somewhere where only root
-can write). If the <em>file-path</em> does not begin with a slash
-('<code>/</code>') then it is assumed to be relative to the <em>Server
-Root</em>. If <em>file-path</em> begins with a bar ('<code>|</code>') then the
-following string is assumed to be a path to an executable program to which a
-reliable pipe can be established. The directive should occur only once per
-virtual server config.</p>
-<example><title>Example</title>
-SSLLog /usr/local/apache/logs/ssl_engine_log
-</example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>SSLLogLevel</name>
-<description>Logging level for the dedicated SSL engine 
-logfile</description>
-<syntax>SSLLogLevel <em>level</em></syntax>
-<default>SSLLogLevel none</default>
-<contextlist><context>server config</context>
-<context>virtual host</context></contextlist>
-
-<usage>
-<p>
-This directive sets the verbosity degree of the dedicated SSL protocol engine
-logfile. The <em>level</em> is one of the following (in ascending order where
-higher levels include lower levels):</p>
-<ul>
-<li><code>none</code><br />
-    no dedicated SSL logging is done, but messages of level
-    ``<code>error</code>'' are still written to the general Apache error
-    logfile.
-</li>
-<li><code>error</code><br />
-    log messages of error type only, i.e. messages which show fatal situations
-    (processing is stopped). Those messages are also duplicated to the
-    general Apache error logfile.
-</li>
-<li><code>warn</code><br />
-    log also warning messages, i.e. messages which show non-fatal problems
-    (processing is continued).
-</li>
-<li><code>info</code><br />
-    log also informational messages, i.e. messages which show major
-    processing steps.
-</li>
-<li><code>trace</code><br />
-    log also trace messages, i.e. messages which show minor processing steps.
-</li>
-<li><code>debug</code><br />
-    log also debugging messages, i.e. messages which show development and
-    low-level I/O information.
-</li>
-</ul>
-<example><title>Example</title>
-SSLLogLevel warn
-</example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>SSLOptions</name>
-<description>Configure various SSL engine run-time options</description>
-<syntax>SSLOptions [+|-]<em>option</em> ...</syntax>
-<contextlist><context>server config</context>
-<context>virtual host</context>
-<context>directory</context>
-<context>.htaccess</context></contextlist>
-<override>Options</override>
-
-<usage>
-<p>
-This directive can be used to control various run-time options on a
-per-directory basis. Normally, if multiple <code>SSLOptions</code>
-could apply to a directory, then the most specific one is taken
-completely; the options are not merged. However if <em>all</em> the
-options on the <code>SSLOptions</code> directive are preceded by a
-plus (<code>+</code>) or minus (<code>-</code>) symbol, the options
-are merged. Any options preceded by a <code>+</code> are added to the
-options currently in force, and any options preceded by a
-<code>-</code> are removed from the options currently in force.</p>
-<p>
-The available <em>option</em>s are:</p>
-<ul>
-<li><code>StdEnvVars</code>
-    <p>
-    When this option is enabled, the standard set of SSL related CGI/SSI
-    environment variables are created. This per default is disabled for
-    performance reasons, because the information extraction step is a
-    rather expensive operation. So one usually enables this option for
-    CGI and SSI requests only.</p>
-</li>
-<li><code>CompatEnvVars</code>
-    <p>
-    When this option is enabled, additional CGI/SSI environment variables are
-    created for backward compatibility to other Apache SSL solutions. Look in
-    the <a href="../ssl/ssl_compat.html">Compatibility</a> chapter for details
-    on the particular variables generated.</p>
-</li>
-<li><code>ExportCertData</code>
-    <p>
-    When this option is enabled, additional CGI/SSI environment variables are
-    created: <code>SSL_SERVER_CERT</code>, <code>SSL_CLIENT_CERT</code> and
-    <code>SSL_CLIENT_CERT_CHAIN</code><em>n</em> (with <em>n</em> = 0,1,2,..).
-    These contain the PEM-encoded X.509 Certificates of server and client for
-    the current HTTPS connection and can be used by CGI scripts for deeper
-    Certificate checking. Additionally all other certificates of the client
-    certificate chain are provided, too. This bloats up the environment a
-    little bit which is why you have to use this option to enable it on
-    demand.</p>
-</li>
-<li><code>FakeBasicAuth</code>
-    <p>
-    When this option is enabled, the Subject Distinguished Name (DN) of the
-    Client X509 Certificate is translated into a HTTP Basic Authorization
-    username. This means that the standard Apache authentication methods can
-    be used for access control. The user name is just the Subject of the
-    Client's X509 Certificate (can be determined by running OpenSSL's
-    <code>openssl x509</code> command: <code>openssl x509 -noout -subject -in
-    </code><em>certificate</em><code>.crt</code>). Note that no password is
-    obtained from the user. Every entry in the user file needs this password:
-    ``<code>xxj31ZMTZzkVA</code>'', which is the DES-encrypted version of the
-    word `<code>password</code>''. Those who live under MD5-based encryption
-    (for instance under FreeBSD or BSD/OS, etc.) should use the following MD5
-    hash of the same word: ``<code>$1$OXLyS...$Owx8s2/m9/gfkcRVXzgoE/</code>''.</p>
-</li>
-<li><code>StrictRequire</code>
-    <p>
-    This <em>forces</em> forbidden access when <code>SSLRequireSSL</code> or
-    <code>SSLRequire</code> successfully decided that access should be
-    forbidden. Usually the default is that in the case where a ``<code>Satisfy
-    any</code>'' directive is used, and other access restrictions are passed,
-    denial of access due to <code>SSLRequireSSL</code> or
-    <code>SSLRequire</code> is overridden (because that's how the Apache
-    <code>Satisfy</code> mechanism should work.) But for strict access restriction
-    you can use <code>SSLRequireSSL</code> and/or <code>SSLRequire</code> in
-    combination with an ``<code>SSLOptions +StrictRequire</code>''. Then an
-    additional ``<code>Satisfy Any</code>'' has no chance once mod_ssl has
-    decided to deny access.</p>
-</li>
-<li><code>OptRenegotiate</code>
-    <p>
-    This enables optimized SSL connection renegotiation handling when SSL
-    directives are used in per-directory context. By default a strict
-    scheme is enabled where <em>every</em> per-directory reconfiguration of
-    SSL parameters causes a <em>full</em> SSL renegotiation handshake. When this
-    option is used mod_ssl tries to avoid unnecessary handshakes by doing more
-    granular (but still safe) parameter checks. Nevertheless these granular
-    checks sometimes maybe not what the user expects, so enable this on a
-    per-directory basis only, please.</p>
-</li>
-</ul>
-<example><title>Example</title>
-SSLOptions +FakeBasicAuth -StrictRequire<br />
-&lt;Files ~ "\.(cgi|shtml)$"&gt;<br />
-    SSLOptions +StdEnvVars +CompatEnvVars -ExportCertData<br />
-&lt;Files&gt;
-</example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>SSLRequireSSL</name>
-<description>Deny access when SSL is not used for the 
-HTTP request</description>
-<syntax>SSLRequireSSL</syntax>
-<contextlist><context>directory</context>
-<context>.htaccess</context></contextlist>
-<override>AuthConfig</override>
-
-<usage>
-<p><!-- XXX: I think the syntax is wrong -->
-This directive forbids access unless HTTP over SSL (i.e. HTTPS) is enabled for
-the current connection. This is very handy inside the SSL-enabled virtual
-host or directories for defending against configuration errors that expose
-stuff that should be protected. When this directive is present all requests
-are denied which are not using SSL.</p>
-<example><title>Example</title>
-SSLRequireSSL
-</example>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>SSLRequire</name>
-<description>Allow access only when an arbitrarily complex 
-boolean expression is true</description>
-<syntax>SSLRequire <em>expression</em></syntax>
-<contextlist><context>directory</context>
-<context>.htaccess</context></contextlist>
-<override>AuthConfig</override>
-
-<usage>
-<p>
-This directive specifies a general access requirement which has to be
-fulfilled in order to allow access. It's a very powerful directive because the
-requirement specification is an arbitrarily complex boolean expression
-containing any number of access checks.</p>
-<p>
-The <em>expression</em> must match the following syntax (given as a BNF
-grammar notation):</p>
-<blockquote>
-<pre>
-expr     ::= "<strong>true</strong>" | "<strong>false</strong>"
-           | "<strong>!</strong>" expr
-           | expr "<strong>&amp;&amp;</strong>" expr
-           | expr "<strong>||</strong>" expr
-           | "<strong>(</strong>" expr "<strong>)</strong>"
-           | comp
-
-comp     ::= word "<strong>==</strong>" word | word "<strong>eq</strong>" word
-           | word "<strong>!=</strong>" word | word "<strong>ne</strong>" word
-           | word "<strong>&lt;</strong>"  word | word "<strong>lt</strong>" word
-           | word "<strong>&lt;=</strong>" word | word "<strong>le</strong>" word
-           | word "<strong>&gt;</strong>"  word | word "<strong>gt</strong>" word
-           | word "<strong>&gt;=</strong>" word | word "<strong>ge</strong>" word
-           | word "<strong>in</strong>" "<strong>{</strong>" wordlist "<strong>}</strong>"
-           | word "<strong>=~</strong>" regex
-           | word "<strong>!~</strong>" regex
-
-wordlist ::= word
-           | wordlist "<strong>,</strong>" word
-
-word     ::= digit
-           | cstring
-           | variable
-           | function
-
-digit    ::= [0-9]+
-cstring  ::= "..."
-variable ::= "<strong>%{</strong>" varname "<strong>}</strong>"
-function ::= funcname "<strong>(</strong>" funcargs "<strong>)</strong>"
-</pre>
-</blockquote>
-<p>while for <code>varname</code> any variable from <a
-href="#table3">Table 3</a> can be used. Finally for
-<code>funcname</code> the following functions are available:</p>
-<ul>
-<li><code>file(</code><em>filename</em><code>)</code>
-    <p>
-    This function takes one string argument and expands to the contents of the
-    file. This is especially useful for matching this contents against a
-    regular expression, etc.</p>
-</li>
-</ul>
-<p>Notice that <em>expression</em> is first parsed into an internal machine
-representation and then evaluated in a second step. Actually, in Global and
-Per-Server Class context <em>expression</em> is parsed at startup time and
-at runtime only the machine representation is executed. For Per-Directory
-context this is different: here <em>expression</em> has to be parsed and
-immediately executed for every request.</p>
-<example><title>Example</title>
-SSLRequire (    %{SSL_CIPHER} !~ m/^(EXP|NULL)-/ \<br />
-            and %{SSL_CLIENT_S_DN_O} eq "Snake Oil, Ltd." \<br />
-            and %{SSL_CLIENT_S_DN_OU} in {"Staff", "CA", "Dev"} \<br />
-            and %{TIME_WDAY} &gt;= 1 and %{TIME_WDAY} &lt;= 5 \<br />
-            and %{TIME_HOUR} &gt;= 8 and %{TIME_HOUR} &lt;= 20       ) \<br />
-           or %{REMOTE_ADDR} =~ m/^192\.76\.162\.[0-9]+$/
-</example>
-<div align="center">
-<a name="table3"></a>
-<table width="600" cellspacing="0" cellpadding="1" border="0" summary="">
-<caption align="bottom" id="sf">Table 3: Available Variables for SSLRequire</caption>
-<tr><td bgcolor="#cccccc">
-<table width="598" cellpadding="5" cellspacing="0" border="0" summary="">
-<tr><td valign="top" align="center" bgcolor="#ffffff">
-<table summary=""><tr><td>
-<em>Standard CGI/1.0 and Apache variables:</em>
-<pre>
-HTTP_USER_AGENT        PATH_INFO             AUTH_TYPE
-HTTP_REFERER           QUERY_STRING          SERVER_SOFTWARE
-HTTP_COOKIE            REMOTE_HOST           API_VERSION
-HTTP_FORWARDED         REMOTE_IDENT          TIME_YEAR
-HTTP_HOST              IS_SUBREQ             TIME_MON
-HTTP_PROXY_CONNECTION  DOCUMENT_ROOT         TIME_DAY
-HTTP_ACCEPT            SERVER_ADMIN          TIME_HOUR
-HTTP:headername        SERVER_NAME           TIME_MIN
-THE_REQUEST            SERVER_PORT           TIME_SEC
-REQUEST_METHOD         SERVER_PROTOCOL       TIME_WDAY
-REQUEST_SCHEME         REMOTE_ADDR           TIME
-REQUEST_URI            REMOTE_USER           ENV:<strong>variablename</strong>
-REQUEST_FILENAME
-</pre>
-<em>SSL-related variables:</em>
-<pre>
-HTTPS                  SSL_CLIENT_M_VERSION   SSL_SERVER_M_VERSION
-                       SSL_CLIENT_M_SERIAL    SSL_SERVER_M_SERIAL
-SSL_PROTOCOL           SSL_CLIENT_V_START     SSL_SERVER_V_START
-SSL_SESSION_ID         SSL_CLIENT_V_END       SSL_SERVER_V_END
-SSL_CIPHER             SSL_CLIENT_S_DN        SSL_SERVER_S_DN
-SSL_CIPHER_EXPORT      SSL_CLIENT_S_DN_C      SSL_SERVER_S_DN_C
-SSL_CIPHER_ALGKEYSIZE  SSL_CLIENT_S_DN_ST     SSL_SERVER_S_DN_ST
-SSL_CIPHER_USEKEYSIZE  SSL_CLIENT_S_DN_L      SSL_SERVER_S_DN_L
-SSL_VERSION_LIBRARY    SSL_CLIENT_S_DN_O      SSL_SERVER_S_DN_O
-SSL_VERSION_INTERFACE  SSL_CLIENT_S_DN_OU     SSL_SERVER_S_DN_OU
-                       SSL_CLIENT_S_DN_CN     SSL_SERVER_S_DN_CN
-                       SSL_CLIENT_S_DN_T      SSL_SERVER_S_DN_T
-                       SSL_CLIENT_S_DN_I      SSL_SERVER_S_DN_I
-                       SSL_CLIENT_S_DN_G      SSL_SERVER_S_DN_G
-                       SSL_CLIENT_S_DN_S      SSL_SERVER_S_DN_S
-                       SSL_CLIENT_S_DN_D      SSL_SERVER_S_DN_D
-                       SSL_CLIENT_S_DN_UID    SSL_SERVER_S_DN_UID
-                       SSL_CLIENT_S_DN_Email  SSL_SERVER_S_DN_Email
-                       SSL_CLIENT_I_DN        SSL_SERVER_I_DN
-                       SSL_CLIENT_I_DN_C      SSL_SERVER_I_DN_C
-                       SSL_CLIENT_I_DN_ST     SSL_SERVER_I_DN_ST
-                       SSL_CLIENT_I_DN_L      SSL_SERVER_I_DN_L
-                       SSL_CLIENT_I_DN_O      SSL_SERVER_I_DN_O
-                       SSL_CLIENT_I_DN_OU     SSL_SERVER_I_DN_OU
-                       SSL_CLIENT_I_DN_CN     SSL_SERVER_I_DN_CN
-                       SSL_CLIENT_I_DN_T      SSL_SERVER_I_DN_T
-                       SSL_CLIENT_I_DN_I      SSL_SERVER_I_DN_I
-                       SSL_CLIENT_I_DN_G      SSL_SERVER_I_DN_G
-                       SSL_CLIENT_I_DN_S      SSL_SERVER_I_DN_S
-                       SSL_CLIENT_I_DN_D      SSL_SERVER_I_DN_D
-                       SSL_CLIENT_I_DN_UID    SSL_SERVER_I_DN_UID
-                       SSL_CLIENT_I_DN_Email  SSL_SERVER_I_DN_Email
-                       SSL_CLIENT_A_SIG       SSL_SERVER_A_SIG
-                       SSL_CLIENT_A_KEY       SSL_SERVER_A_KEY
-                       SSL_CLIENT_CERT        SSL_SERVER_CERT
-                       SSL_CLIENT_CERT_CHAIN<strong>n</strong>
-                       SSL_CLIENT_VERIFY
-</pre>
-</td></tr></table>
-</td>
-</tr></table>
-</td></tr></table>
-</div>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_status.html b/docs/manual/mod/mod_status.html
deleted file mode 100644
index 630e804..0000000
--- a/docs/manual/mod/mod_status.html
+++ /dev/null
@@ -1,107 +0,0 @@
-<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-     This file is generated from xml source: DO NOT EDIT
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
---><title>mod_status - Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img alt="[APACHE DOCUMENTATION]" src="../images/sub.gif"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module mod_status</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td><description>Provides information on server activity and
-performance</description></td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="module-dict.html#ModuleIdentifier" class="help">Module&nbsp;Identifier:</a></td><td>status_module</td></tr></table></td></tr></table><h2>Summary</h2><summary>
-
-<blockquote><table><tr><td bgcolor="#e0e5f5">
-  <strong>Warning:</strong> This document has not been updated
-  to take into account changes made in the 2.0 version of the
-  Apache HTTP Server. Some of the information may still be
-  relevant, but please use it with care.
-</td></tr></table></blockquote>
-
-    <p>The Status module allows a server administrator to find out
-    how well their server is performing. A HTML page is presented
-    that gives the current server statistics in an easily readable
-    form. If required this page can be made to automatically
-    refresh (given a compatible browser). Another page gives a
-    simple machine-readable list of the current server state.</p>
-
-    <p>The details given are:</p>
-
-    <ul>
-      <li>The number of children serving requests</li>
-
-      <li>The number of idle children</li>
-
-      <li>The status of each child, the number of requests that
-      child has performed and the total number of bytes served by
-      the child (*)</li>
-
-      <li>A total number of accesses and byte count served (*)</li>
-
-      <li>The time the server was started/restarted and the time it
-      has been running for</li>
-
-      <li>Averages giving the number of requests per second, the
-      number of bytes served per second and the average number of
-      bytes per request (*)</li>
-
-      <li>The current percentage CPU used by each child and in
-      total by Apache (*)</li>
-
-      <li>The current hosts and requests being processed (*)</li>
-    </ul>
-
-    <p>A compile-time option must be used to display the details
-    marked "(*)" as the instrumentation required for obtaining
-    these statistics does not exist within standard Apache.</p>
-</summary><h2>Directives</h2><ul><li><a href="#extendedstatus">ExtendedStatus</a></li></ul><h2>Enabling Status Support</h2>
-    
-
-    <p>To enable status reports only for browsers from the foo.com
-    domain add this code to your <code>httpd.conf</code>
-    configuration file</p>
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-    &lt;Location /server-status&gt;<br>
-    SetHandler server-status<br>
-<br>
-    Order Deny,Allow<br>
-    Deny from all<br>
-    Allow from .foo.com<br>
-    &lt;/Location&gt;
-</code></td></tr></table></blockquote>
-
-    <p>You can now access server statistics by using a Web browser
-    to access the page
-    <code>http://your.server.name/server-status</code></p>
-
-    <blockquote><table><tr><td bgcolor="#e0e5f5"><p>Note that <code><a href="mod_status.html">mod_status</a></code> will only work
-    when you are running Apache in <a href="core.html#servertype">standalone</a> mode and not
-    <a href="core.html#servertype">inetd</a> mode.</p></td></tr></table></blockquote>
-<h2>Automatic Updates</h2>
-
-    
-    <p>You can get the status page to update itself automatically if
-    you have a browser that supports "refresh". Access the page
-    <code>http://your.server.name/server-status?refresh=N</code> to
-    refresh the page every N seconds.</p>
-
-<h2>Machine Readable Status File</h2>
-
-    
-    <p>A machine-readable version of the status file is available by
-    accessing the page
-    <code>http://your.server.name/server-status?auto</code>. This
-    is useful when automatically run, see the Perl program in the
-    <code>/support</code> directory of Apache,
-    <code>log_server_status</code>.</p>
-
-    <blockquote><table><tr><td bgcolor="#e0e5f5">
-      <strong>It should be noted that if <code><a href="mod_status.html">mod_status</a></code> is
-      compiled into the server, its handler capability is available
-      in <em>all</em> configuration files, including
-      <em>per</em>-directory files (<em>e.g.</em>,
-      <code>.htaccess</code>). This may have security-related
-      ramifications for your site.</strong>
-    </td></tr></table></blockquote>
-
-<hr/><h2><a name="ExtendedStatus">ExtendedStatus</a> <a name="extendedstatus">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>This directive controls whether the server keeps track of
-extended status information for each request. This is only
-useful if the status module is enabled on the server.</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>ExtendedStatus On|Off</syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>ExtendedStatus Off</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_status</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>ExtendedStatus is only available in Apache 1.3.2 and 
-later.</td></tr></table></td></tr></table><usage>
-    <p>This setting applies to the entire server, and cannot be
-    enabled or disabled on a virtualhost-by-virtualhost basis.</p>
-</usage><hr/><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img alt="Index" src="../images/index.gif"/></a><a href="../"><img alt="Home" src="../images/home.gif"/></a></blockquote></body></html>
\ No newline at end of file
diff --git a/docs/manual/mod/mod_status.xml b/docs/manual/mod/mod_status.xml
deleted file mode 100644
index 81dd0b3..0000000
--- a/docs/manual/mod/mod_status.xml
+++ /dev/null
@@ -1,137 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.xsl"?>
-<modulesynopsis>
-
-<name>mod_status</name>
-<description>Provides information on server activity and
-performance</description>
-<status>Base</status>
-<sourcefile>mod_status.c</sourcefile>
-<identifier>status_module</identifier>
-
-
-<summary>
-
-<note>
-  <strong>Warning:</strong> This document has not been updated
-  to take into account changes made in the 2.0 version of the
-  Apache HTTP Server. Some of the information may still be
-  relevant, but please use it with care.
-</note>
-
-    <p>The Status module allows a server administrator to find out
-    how well their server is performing. A HTML page is presented
-    that gives the current server statistics in an easily readable
-    form. If required this page can be made to automatically
-    refresh (given a compatible browser). Another page gives a
-    simple machine-readable list of the current server state.</p>
-
-    <p>The details given are:</p>
-
-    <ul>
-      <li>The number of children serving requests</li>
-
-      <li>The number of idle children</li>
-
-      <li>The status of each child, the number of requests that
-      child has performed and the total number of bytes served by
-      the child (*)</li>
-
-      <li>A total number of accesses and byte count served (*)</li>
-
-      <li>The time the server was started/restarted and the time it
-      has been running for</li>
-
-      <li>Averages giving the number of requests per second, the
-      number of bytes served per second and the average number of
-      bytes per request (*)</li>
-
-      <li>The current percentage CPU used by each child and in
-      total by Apache (*)</li>
-
-      <li>The current hosts and requests being processed (*)</li>
-    </ul>
-
-    <p>A compile-time option must be used to display the details
-    marked "(*)" as the instrumentation required for obtaining
-    these statistics does not exist within standard Apache.</p>
-</summary>
-
-<section>
-    <title>Enabling Status Support</title>
-
-    <p>To enable status reports only for browsers from the foo.com
-    domain add this code to your <code>httpd.conf</code>
-    configuration file</p>
-<example>
-    &lt;Location /server-status&gt;<br />
-    SetHandler server-status<br />
-<br />
-    Order Deny,Allow<br />
-    Deny from all<br />
-    Allow from .foo.com<br />
-    &lt;/Location&gt;
-</example>
-
-    <p>You can now access server statistics by using a Web browser
-    to access the page
-    <code>http://your.server.name/server-status</code></p>
-
-    <note><p>Note that <module>mod_status</module> will only work
-    when you are running Apache in <a 
-    href="core.html#servertype">standalone</a> mode and not
-    <a href="core.html#servertype">inetd</a> mode.</p></note>
-</section>
-
-<section>
-
-    <title>Automatic Updates</title>
-    <p>You can get the status page to update itself automatically if
-    you have a browser that supports "refresh". Access the page
-    <code>http://your.server.name/server-status?refresh=N</code> to
-    refresh the page every N seconds.</p>
-
-</section>
-
-<section>
-
-    <title>Machine Readable Status File</title>
-    <p>A machine-readable version of the status file is available by
-    accessing the page
-    <code>http://your.server.name/server-status?auto</code>. This
-    is useful when automatically run, see the Perl program in the
-    <code>/support</code> directory of Apache,
-    <code>log_server_status</code>.</p>
-
-    <note>
-      <strong>It should be noted that if <module>mod_status</module> is
-      compiled into the server, its handler capability is available
-      in <em>all</em> configuration files, including
-      <em>per</em>-directory files (<em>e.g.</em>,
-      <code>.htaccess</code>). This may have security-related
-      ramifications for your site.</strong>
-    </note>
-
-</section>
-
-<directivesynopsis>
-
-<name>ExtendedStatus</name>
-<description>This directive controls whether the server keeps track of
-extended status information for each request. This is only
-useful if the status module is enabled on the server.</description>
-<syntax>ExtendedStatus On|Off</syntax>
-<default>ExtendedStatus Off</default>
-<contextlist><context>server config</context></contextlist>
-<compatibility>ExtendedStatus is only available in Apache 1.3.2 and 
-later.</compatibility>
-
-<usage>
-    <p>This setting applies to the entire server, and cannot be
-    enabled or disabled on a virtualhost-by-virtualhost basis.</p>
-</usage>
-
-</directivesynopsis>
-</modulesynopsis>
-
diff --git a/docs/manual/mod/mod_suexec.html b/docs/manual/mod/mod_suexec.html
deleted file mode 100644
index e92aa19..0000000
--- a/docs/manual/mod/mod_suexec.html
+++ /dev/null
@@ -1,16 +0,0 @@
-<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-     This file is generated from xml source: DO NOT EDIT
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
---><title>mod_suexec - Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img alt="[APACHE DOCUMENTATION]" src="../images/sub.gif"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module mod_suexec</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td><description>Allows CGI scripts to run as a specified user
-and Group</description></td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="module-dict.html#ModuleIdentifier" class="help">Module&nbsp;Identifier:</a></td><td>suexec_module</td></tr><tr><td align="left" valign="top"><a href="module-dict.html#Compatibility" class="help">Compatibility:</a></td><td><compatibility>Available in Apache 2.0 and later</compatibility></td></tr></table></td></tr></table><h2>Summary</h2><summary>
-    <p>This module allows CGI scripts to run as a specified user
-    and Group.</p>
-</summary><h2>Directives</h2><ul><li><a href="#suexecusergroup">SuexecUserGroup</a></li></ul><hr/><h2><a name="SuexecUserGroup">SuexecUserGroup</a> <a name="suexecusergroup">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td/></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>SuexecUserGroup <em>User Group</em></syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>None</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_suexec</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>SuexecUserGroup is only available in 2.0 and
-later.</td></tr></table></td></tr></table><usage>
-    <p>The <code class="directive">SuexecUserGroup</code> directive allows you to
-    specify a user and group for CGI programs to run as. Non-CGI
-    requests are still processes with the user specified in the
-    User directive. This directive replaces using the User and
-    Group directives inside of VirtualHosts.</p>
-</usage><hr/><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img alt="Index" src="../images/index.gif"/></a><a href="../"><img alt="Home" src="../images/home.gif"/></a></blockquote></body></html>
\ No newline at end of file
diff --git a/docs/manual/mod/mod_suexec.xml b/docs/manual/mod/mod_suexec.xml
deleted file mode 100644
index 4702614..0000000
--- a/docs/manual/mod/mod_suexec.xml
+++ /dev/null
@@ -1,41 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.xsl"?>
-<modulesynopsis>
-
-<name>mod_suexec</name>
-<description>Allows CGI scripts to run as a specified user
-and Group</description>
-<status>Extension</status>
-<sourcefile>mod_suexec.c</sourcefile>
-<identifier>suexec_module</identifier>
-<compatibility>Available in Apache 2.0 and later</compatibility>
-
-
-<summary>
-    <p>This module allows CGI scripts to run as a specified user
-    and Group.</p>
-</summary>
-
-
-<directivesynopsis>
-
-<name>SuexecUserGroup</name>
-<syntax>SuexecUserGroup <em>User Group</em></syntax>
-<default>None</default>
-<contextlist><context>server config</context>
-<context>virtual host</context></contextlist>
-<compatibility>SuexecUserGroup is only available in 2.0 and
-later.</compatibility>
-
-<usage>
-    <p>The <directive>SuexecUserGroup</directive> directive allows you to
-    specify a user and group for CGI programs to run as. Non-CGI
-    requests are still processes with the user specified in the
-    User directive. This directive replaces using the User and
-    Group directives inside of VirtualHosts.</p>
-</usage>
-
-</directivesynopsis>
-</modulesynopsis>
-
diff --git a/docs/manual/mod/mod_unique_id.html b/docs/manual/mod/mod_unique_id.html
deleted file mode 100644
index a040c54..0000000
--- a/docs/manual/mod/mod_unique_id.html
+++ /dev/null
@@ -1,169 +0,0 @@
-<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-     This file is generated from xml source: DO NOT EDIT
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
---><title>mod_unique_id - Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img alt="[APACHE DOCUMENTATION]" src="../images/sub.gif"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module mod_unique_id</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td><description>Provides an environment variable with a unique
-identifier for each request</description></td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="module-dict.html#ModuleIdentifier" class="help">Module&nbsp;Identifier:</a></td><td>unique_id_module</td></tr></table></td></tr></table><h2>Summary</h2><summary>
-
-    <p>This module provides a magic token for each request which is
-    guaranteed to be unique across "all" requests under very
-    specific conditions. The unique identifier is even unique
-    across multiple machines in a properly configured cluster of
-    machines. The environment variable <code>UNIQUE_ID</code> is
-    set to the identifier for each request. Unique identifiers are
-    useful for various reasons which are beyond the scope of this
-    document.</p>
-</summary><h2>Directives</h2><p>This module provides no directives.</p><h2>Theory</h2>
-    
-
-    <p>First a brief recap of how the Apache server works on Unix
-    machines. This feature currently isn't supported on Windows NT.
-    On Unix machines, Apache creates several children, the children
-    process requests one at a time. Each child can serve multiple
-    requests in its lifetime. For the purpose of this discussion,
-    the children don't share any data with each other. We'll refer
-    to the children as httpd processes.</p>
-
-    <p>Your website has one or more machines under your
-    administrative control, together we'll call them a cluster of
-    machines. Each machine can possibly run multiple instances of
-    Apache. All of these collectively are considered "the
-    universe", and with certain assumptions we'll show that in this
-    universe we can generate unique identifiers for each request,
-    without extensive communication between machines in the
-    cluster.</p>
-
-    <p>The machines in your cluster should satisfy these
-    requirements. (Even if you have only one machine you should
-    synchronize its clock with NTP.)</p>
-
-    <ul>
-      <li>The machines' times are synchronized via NTP or other
-      network time protocol.</li>
-
-      <li>The machines' hostnames all differ, such that the module
-      can do a hostname lookup on the hostname and receive a
-      different IP address for each machine in the cluster.</li>
-    </ul>
-
-    <p>As far as operating system assumptions go, we assume that
-    pids (process ids) fit in 32-bits. If the operating system uses
-    more than 32-bits for a pid, the fix is trivial but must be
-    performed in the code.</p>
-
-    <p>Given those assumptions, at a single point in time we can
-    identify any httpd process on any machine in the cluster from
-    all other httpd processes. The machine's IP address and the pid
-    of the httpd process are sufficient to do this. So in order to
-    generate unique identifiers for requests we need only
-    distinguish between different points in time.</p>
-
-    <p>To distinguish time we will use a Unix timestamp (seconds
-    since January 1, 1970 UTC), and a 16-bit counter. The timestamp
-    has only one second granularity, so the counter is used to
-    represent up to 65536 values during a single second. The
-    quadruple <em>( ip_addr, pid, time_stamp, counter )</em> is
-    sufficient to enumerate 65536 requests per second per httpd
-    process. There are issues however with pid reuse over time, and
-    the counter is used to alleviate this issue.</p>
-
-    <p>When an httpd child is created, the counter is initialized
-    with ( current microseconds divided by 10 ) modulo 65536 (this
-    formula was chosen to eliminate some variance problems with the
-    low order bits of the microsecond timers on some systems). When
-    a unique identifier is generated, the time stamp used is the
-    time the request arrived at the web server. The counter is
-    incremented every time an identifier is generated (and allowed
-    to roll over).</p>
-
-    <p>The kernel generates a pid for each process as it forks the
-    process, and pids are allowed to roll over (they're 16-bits on
-    many Unixes, but newer systems have expanded to 32-bits). So
-    over time the same pid will be reused. However unless it is
-    reused within the same second, it does not destroy the
-    uniqueness of our quadruple. That is, we assume the system does
-    not spawn 65536 processes in a one second interval (it may even
-    be 32768 processes on some Unixes, but even this isn't likely
-    to happen).</p>
-
-    <p>Suppose that time repeats itself for some reason. That is,
-    suppose that the system's clock is screwed up and it revisits a
-    past time (or it is too far forward, is reset correctly, and
-    then revisits the future time). In this case we can easily show
-    that we can get pid and time stamp reuse. The choice of
-    initializer for the counter is intended to help defeat this.
-    Note that we really want a random number to initialize the
-    counter, but there aren't any readily available numbers on most
-    systems (<em>i.e.</em>, you can't use rand() because you need
-    to seed the generator, and can't seed it with the time because
-    time, at least at one second resolution, has repeated itself).
-    This is not a perfect defense.</p>
-
-    <p>How good a defense is it? Suppose that one of your machines
-    serves at most 500 requests per second (which is a very
-    reasonable upper bound at this writing, because systems
-    generally do more than just shovel out static files). To do
-    that it will require a number of children which depends on how
-    many concurrent clients you have. But we'll be pessimistic and
-    suppose that a single child is able to serve 500 requests per
-    second. There are 1000 possible starting counter values such
-    that two sequences of 500 requests overlap. So there is a 1.5%
-    chance that if time (at one second resolution) repeats itself
-    this child will repeat a counter value, and uniqueness will be
-    broken. This was a very pessimistic example, and with real
-    world values it's even less likely to occur. If your system is
-    such that it's still likely to occur, then perhaps you should
-    make the counter 32 bits (by editing the code).</p>
-
-    <p>You may be concerned about the clock being "set back" during
-    summer daylight savings. However this isn't an issue because
-    the times used here are UTC, which "always" go forward. Note
-    that x86 based Unixes may need proper configuration for this to
-    be true -- they should be configured to assume that the
-    motherboard clock is on UTC and compensate appropriately. But
-    even still, if you're running NTP then your UTC time will be
-    correct very shortly after reboot.</p>
-
-    <p>The <code>UNIQUE_ID</code> environment variable is
-    constructed by encoding the 112-bit (32-bit IP address, 32 bit
-    pid, 32 bit time stamp, 16 bit counter) quadruple using the
-    alphabet <code>[A-Za-z0-9@-]</code> in a manner similar to MIME
-    base64 encoding, producing 19 characters. The MIME base64
-    alphabet is actually <code>[A-Za-z0-9+/]</code> however
-    <code>+</code> and <code>/</code> need to be specially encoded
-    in URLs, which makes them less desirable. All values are
-    encoded in network byte ordering so that the encoding is
-    comparable across architectures of different byte ordering. The
-    actual ordering of the encoding is: time stamp, IP address,
-    pid, counter. This ordering has a purpose, but it should be
-    emphasized that applications should not dissect the encoding.
-    Applications should treat the entire encoded
-    <code>UNIQUE_ID</code> as an opaque token, which can be
-    compared against other <code>UNIQUE_ID</code>s for equality
-    only.</p>
-
-    <p>The ordering was chosen such that it's possible to change
-    the encoding in the future without worrying about collision
-    with an existing database of <code>UNIQUE_ID</code>s. The new
-    encodings should also keep the time stamp as the first element,
-    and can otherwise use the same alphabet and bit length. Since
-    the time stamps are essentially an increasing sequence, it's
-    sufficient to have a <em>flag second</em> in which all machines
-    in the cluster stop serving and request, and stop using the old
-    encoding format. Afterwards they can resume requests and begin
-    issuing the new encodings.</p>
-
-    <p>This we believe is a relatively portable solution to this
-    problem. It can be extended to multithreaded systems like
-    Windows NT, and can grow with future needs. The identifiers
-    generated have essentially an infinite life-time because future
-    identifiers can be made longer as required. Essentially no
-    communication is required between machines in the cluster (only
-    NTP synchronization is required, which is low overhead), and no
-    communication between httpd processes is required (the
-    communication is implicit in the pid value assigned by the
-    kernel). In very specific situations the identifier can be
-    shortened, but more information needs to be assumed (for
-    example the 32-bit IP address is overkill for any site, but
-    there is no portable shorter replacement for it). </p>
-<hr/><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img alt="Index" src="../images/index.gif"/></a><a href="../"><img alt="Home" src="../images/home.gif"/></a></blockquote></body></html>
\ No newline at end of file
diff --git a/docs/manual/mod/mod_unique_id.xml b/docs/manual/mod/mod_unique_id.xml
deleted file mode 100755
index c01f65d..0000000
--- a/docs/manual/mod/mod_unique_id.xml
+++ /dev/null
@@ -1,181 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.xsl"?>
-<modulesynopsis>
-
-<name>mod_unique_id</name>
-<description>Provides an environment variable with a unique
-identifier for each request</description>
-<status>Extension</status>
-<sourcefile>mod_unique_id.c</sourcefile>
-<identifier>unique_id_module</identifier>
-
-<summary>
-
-    <p>This module provides a magic token for each request which is
-    guaranteed to be unique across "all" requests under very
-    specific conditions. The unique identifier is even unique
-    across multiple machines in a properly configured cluster of
-    machines. The environment variable <code>UNIQUE_ID</code> is
-    set to the identifier for each request. Unique identifiers are
-    useful for various reasons which are beyond the scope of this
-    document.</p>
-</summary>
-
-<section>
-    <title>Theory</title>
-
-    <p>First a brief recap of how the Apache server works on Unix
-    machines. This feature currently isn't supported on Windows NT.
-    On Unix machines, Apache creates several children, the children
-    process requests one at a time. Each child can serve multiple
-    requests in its lifetime. For the purpose of this discussion,
-    the children don't share any data with each other. We'll refer
-    to the children as httpd processes.</p>
-
-    <p>Your website has one or more machines under your
-    administrative control, together we'll call them a cluster of
-    machines. Each machine can possibly run multiple instances of
-    Apache. All of these collectively are considered "the
-    universe", and with certain assumptions we'll show that in this
-    universe we can generate unique identifiers for each request,
-    without extensive communication between machines in the
-    cluster.</p>
-
-    <p>The machines in your cluster should satisfy these
-    requirements. (Even if you have only one machine you should
-    synchronize its clock with NTP.)</p>
-
-    <ul>
-      <li>The machines' times are synchronized via NTP or other
-      network time protocol.</li>
-
-      <li>The machines' hostnames all differ, such that the module
-      can do a hostname lookup on the hostname and receive a
-      different IP address for each machine in the cluster.</li>
-    </ul>
-
-    <p>As far as operating system assumptions go, we assume that
-    pids (process ids) fit in 32-bits. If the operating system uses
-    more than 32-bits for a pid, the fix is trivial but must be
-    performed in the code.</p>
-
-    <p>Given those assumptions, at a single point in time we can
-    identify any httpd process on any machine in the cluster from
-    all other httpd processes. The machine's IP address and the pid
-    of the httpd process are sufficient to do this. So in order to
-    generate unique identifiers for requests we need only
-    distinguish between different points in time.</p>
-
-    <p>To distinguish time we will use a Unix timestamp (seconds
-    since January 1, 1970 UTC), and a 16-bit counter. The timestamp
-    has only one second granularity, so the counter is used to
-    represent up to 65536 values during a single second. The
-    quadruple <em>( ip_addr, pid, time_stamp, counter )</em> is
-    sufficient to enumerate 65536 requests per second per httpd
-    process. There are issues however with pid reuse over time, and
-    the counter is used to alleviate this issue.</p>
-
-    <p>When an httpd child is created, the counter is initialized
-    with ( current microseconds divided by 10 ) modulo 65536 (this
-    formula was chosen to eliminate some variance problems with the
-    low order bits of the microsecond timers on some systems). When
-    a unique identifier is generated, the time stamp used is the
-    time the request arrived at the web server. The counter is
-    incremented every time an identifier is generated (and allowed
-    to roll over).</p>
-
-    <p>The kernel generates a pid for each process as it forks the
-    process, and pids are allowed to roll over (they're 16-bits on
-    many Unixes, but newer systems have expanded to 32-bits). So
-    over time the same pid will be reused. However unless it is
-    reused within the same second, it does not destroy the
-    uniqueness of our quadruple. That is, we assume the system does
-    not spawn 65536 processes in a one second interval (it may even
-    be 32768 processes on some Unixes, but even this isn't likely
-    to happen).</p>
-
-    <p>Suppose that time repeats itself for some reason. That is,
-    suppose that the system's clock is screwed up and it revisits a
-    past time (or it is too far forward, is reset correctly, and
-    then revisits the future time). In this case we can easily show
-    that we can get pid and time stamp reuse. The choice of
-    initializer for the counter is intended to help defeat this.
-    Note that we really want a random number to initialize the
-    counter, but there aren't any readily available numbers on most
-    systems (<em>i.e.</em>, you can't use rand() because you need
-    to seed the generator, and can't seed it with the time because
-    time, at least at one second resolution, has repeated itself).
-    This is not a perfect defense.</p>
-
-    <p>How good a defense is it? Suppose that one of your machines
-    serves at most 500 requests per second (which is a very
-    reasonable upper bound at this writing, because systems
-    generally do more than just shovel out static files). To do
-    that it will require a number of children which depends on how
-    many concurrent clients you have. But we'll be pessimistic and
-    suppose that a single child is able to serve 500 requests per
-    second. There are 1000 possible starting counter values such
-    that two sequences of 500 requests overlap. So there is a 1.5%
-    chance that if time (at one second resolution) repeats itself
-    this child will repeat a counter value, and uniqueness will be
-    broken. This was a very pessimistic example, and with real
-    world values it's even less likely to occur. If your system is
-    such that it's still likely to occur, then perhaps you should
-    make the counter 32 bits (by editing the code).</p>
-
-    <p>You may be concerned about the clock being "set back" during
-    summer daylight savings. However this isn't an issue because
-    the times used here are UTC, which "always" go forward. Note
-    that x86 based Unixes may need proper configuration for this to
-    be true -- they should be configured to assume that the
-    motherboard clock is on UTC and compensate appropriately. But
-    even still, if you're running NTP then your UTC time will be
-    correct very shortly after reboot.</p>
-
-    <p>The <code>UNIQUE_ID</code> environment variable is
-    constructed by encoding the 112-bit (32-bit IP address, 32 bit
-    pid, 32 bit time stamp, 16 bit counter) quadruple using the
-    alphabet <code>[A-Za-z0-9@-]</code> in a manner similar to MIME
-    base64 encoding, producing 19 characters. The MIME base64
-    alphabet is actually <code>[A-Za-z0-9+/]</code> however
-    <code>+</code> and <code>/</code> need to be specially encoded
-    in URLs, which makes them less desirable. All values are
-    encoded in network byte ordering so that the encoding is
-    comparable across architectures of different byte ordering. The
-    actual ordering of the encoding is: time stamp, IP address,
-    pid, counter. This ordering has a purpose, but it should be
-    emphasized that applications should not dissect the encoding.
-    Applications should treat the entire encoded
-    <code>UNIQUE_ID</code> as an opaque token, which can be
-    compared against other <code>UNIQUE_ID</code>s for equality
-    only.</p>
-
-    <p>The ordering was chosen such that it's possible to change
-    the encoding in the future without worrying about collision
-    with an existing database of <code>UNIQUE_ID</code>s. The new
-    encodings should also keep the time stamp as the first element,
-    and can otherwise use the same alphabet and bit length. Since
-    the time stamps are essentially an increasing sequence, it's
-    sufficient to have a <em>flag second</em> in which all machines
-    in the cluster stop serving and request, and stop using the old
-    encoding format. Afterwards they can resume requests and begin
-    issuing the new encodings.</p>
-
-    <p>This we believe is a relatively portable solution to this
-    problem. It can be extended to multithreaded systems like
-    Windows NT, and can grow with future needs. The identifiers
-    generated have essentially an infinite life-time because future
-    identifiers can be made longer as required. Essentially no
-    communication is required between machines in the cluster (only
-    NTP synchronization is required, which is low overhead), and no
-    communication between httpd processes is required (the
-    communication is implicit in the pid value assigned by the
-    kernel). In very specific situations the identifier can be
-    shortened, but more information needs to be assumed (for
-    example the 32-bit IP address is overkill for any site, but
-    there is no portable shorter replacement for it). </p>
-</section>
-
-
-</modulesynopsis>
diff --git a/docs/manual/mod/mod_userdir.html b/docs/manual/mod/mod_userdir.html
deleted file mode 100644
index fd0879b..0000000
--- a/docs/manual/mod/mod_userdir.html
+++ /dev/null
@@ -1,102 +0,0 @@
-<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-     This file is generated from xml source: DO NOT EDIT
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
---><title>mod_userdir - Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img alt="[APACHE DOCUMENTATION]" src="../images/sub.gif"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module mod_userdir</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td><description>Provides for user-specific
-directories</description></td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="module-dict.html#ModuleIdentifier" class="help">Module&nbsp;Identifier:</a></td><td>userdir_module</td></tr></table></td></tr></table><h2>Summary</h2><summary>
-</summary><h2>Directives</h2><ul><li><a href="#userdir">UserDir</a></li></ul><hr/><h2><a name="UserDir">UserDir</a> <a name="userdir">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sets the directory from which to serve files when requests
-for a particular user are received, denoted by requests containing
-~username, such as 
-http://server.example.com/~bob/</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>UserDir <em>directory-filename</em></syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>UserDir public_html</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual
-host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_userdir</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>All forms except the UserDir public_html
-form are only available in Apache 1.1 or above. Use of the 
-enabled keyword, or disabled with a
-list of usernames, is only available in Apache 1.3 and
-above.</td></tr></table></td></tr></table><usage>
-
-    <p>The <code class="directive">UserDir</code> directive sets the real
-    directory in a user's home directory to use when a request for a
-    document for a user is received. <em>Directory-filename</em> is
-    one of the following:</p>
-
-    <ul>
-      <li>The name of a directory or a pattern such as those shown
-      below.</li>
-
-      <li>The keyword <code>disabled</code>. This turns off
-      <em>all</em> username-to-directory translations except those
-      explicitly named with the <code>enabled</code> keyword (see
-      below).</li>
-
-      <li>The keyword <code>disabled</code> followed by a
-      space-delimited list of usernames. Usernames that appear in
-      such a list will <em>never</em> have directory translation
-      performed, even if they appear in an <code>enabled</code>
-      clause.</li>
-
-      <li>The keyword <code>enabled</code> followed by a
-      space-delimited list of usernames. These usernames will have
-      directory translation performed even if a global disable is
-      in effect, but not if they also appear in a
-      <code>disabled</code> clause.</li>
-    </ul>
-
-    <p>If neither the <code>enabled</code> nor the
-    <code>disabled</code> keywords appear in the
-    <code>Userdir</code> directive, the argument is treated as a
-    filename pattern, and is used to turn the name into a directory
-    specification. A request for
-    <code>http://www.foo.com/~bob/one/two.html</code> will be
-    translated to:</p>
-
-<table>
-<tr><th>UserDir directive used</th>
-<th>Translated path</th></tr>
-<tr><td>UserDir public_html</td><td>~bob/public_html/one/two.html</td></tr>
-<tr><td>UserDir /usr/web</td><td>/usr/web/bob/one/two.html</td></tr>
-<tr><td>UserDir /home/*/www</td><td>/home/bob/www/one/two.html</td></tr>
-</table>
-
-    <p>The following directives will send redirects to the client:</p> 
-
-<table>
-<tr><th>UserDir directive used</th>
-<th>Translated path</th></tr>
-<tr><td>UserDir http://www.foo.com/users</td><td>http://www.foo.com/users/bob/one/two.html</td></tr>
-<tr><td>UserDir
-http://www.foo.com/*/usr</td><td>http://www.foo.com/bob/usr/one/two.html</td></tr>
-<tr><td>UserDir
-http://www.foo.com/~*/</td><td>http://www.foo.com/~bob/one/two.html</td></tr>
-</table> 
-
-<blockquote><table><tr><td bgcolor="#e0e5f5">
-      <strong>Be careful when using this directive; for instance,
-      <code>"UserDir ./"</code> would map
-      <code>"/~root"</code> to <code>"/"</code> - which is probably
-      undesirable. If you are running Apache 1.3 or above, it is
-      strongly recommended that your configuration include a
-      "<code>UserDir disabled root</code>" declaration.
-      See also the <a href="core.html#directory" class="directive"><code class="directive">Directory</code></a>
-      directive and the <a href="../misc/security_tips.html">Security
-      Tips</a> page for more information.</strong>
-</td></tr></table></blockquote>
-
-<p>Additional examples:</p>
-
-<p>To allow a few users to have <code>UserDir</code> directories, but
-not anyone else, use the following:</p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-UserDir disabled<br>
-UserDir enabled user1 user2 user3
-</code></td></tr></table></blockquote>
-
-<p>To allow most users to have <code>UserDir</code> directories, but
-deny this to a few, use the following:</p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-UserDir enabled<br>
-UserDir disabled user4 user5 user6
-</code></td></tr></table></blockquote>
-
-</usage><hr/><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img alt="Index" src="../images/index.gif"/></a><a href="../"><img alt="Home" src="../images/home.gif"/></a></blockquote></body></html>
\ No newline at end of file
diff --git a/docs/manual/mod/mod_userdir.xml b/docs/manual/mod/mod_userdir.xml
deleted file mode 100755
index da87688..0000000
--- a/docs/manual/mod/mod_userdir.xml
+++ /dev/null
@@ -1,126 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.xsl"?>
-<modulesynopsis>
-
-<name>mod_userdir</name>
-<description>Provides for user-specific
-directories</description>
-<status>Base</status>
-<sourcefile>mod_userdir.c</sourcefile>
-<identifier>userdir_module</identifier>
-
-<summary>
-</summary>
-
-
-<directivesynopsis>
-
-<name>UserDir</name>
-<description>Sets the directory from which to serve files when requests
-for a particular user are received, denoted by requests containing
-<em>~username</em>, such as 
-<em>http://server.example.com/~bob/</em></description>
-<syntax>UserDir <em>directory-filename</em></syntax>
-<default>UserDir public_html</default>
-<contextlist><context>server config</context> <context>virtual
-host</context></contextlist>
-<compatibility>All forms except the <code>UserDir public_html</code>
-form are only available in Apache 1.1 or above. Use of the 
-<code>enabled</code> keyword, or <code>disabled</code> with a
-list of usernames, is only available in Apache 1.3 and
-above.</compatibility>
-
-<usage>
-
-    <p>The <directive>UserDir</directive> directive sets the real
-    directory in a user's home directory to use when a request for a
-    document for a user is received. <em>Directory-filename</em> is
-    one of the following:</p>
-
-    <ul>
-      <li>The name of a directory or a pattern such as those shown
-      below.</li>
-
-      <li>The keyword <code>disabled</code>. This turns off
-      <em>all</em> username-to-directory translations except those
-      explicitly named with the <code>enabled</code> keyword (see
-      below).</li>
-
-      <li>The keyword <code>disabled</code> followed by a
-      space-delimited list of usernames. Usernames that appear in
-      such a list will <em>never</em> have directory translation
-      performed, even if they appear in an <code>enabled</code>
-      clause.</li>
-
-      <li>The keyword <code>enabled</code> followed by a
-      space-delimited list of usernames. These usernames will have
-      directory translation performed even if a global disable is
-      in effect, but not if they also appear in a
-      <code>disabled</code> clause.</li>
-    </ul>
-
-    <p>If neither the <code>enabled</code> nor the
-    <code>disabled</code> keywords appear in the
-    <code>Userdir</code> directive, the argument is treated as a
-    filename pattern, and is used to turn the name into a directory
-    specification. A request for
-    <code>http://www.foo.com/~bob/one/two.html</code> will be
-    translated to:</p>
-
-<table>
-<tr><th>UserDir directive used</th>
-<th>Translated path</th></tr>
-<tr><td>UserDir public_html</td><td>~bob/public_html/one/two.html</td></tr>
-<tr><td>UserDir /usr/web</td><td>/usr/web/bob/one/two.html</td></tr>
-<tr><td>UserDir /home/*/www</td><td>/home/bob/www/one/two.html</td></tr>
-</table>
-
-    <p>The following directives will send redirects to the client:</p> 
-
-<table>
-<tr><th>UserDir directive used</th>
-<th>Translated path</th></tr>
-<tr><td>UserDir http://www.foo.com/users</td><td>http://www.foo.com/users/bob/one/two.html</td></tr>
-<tr><td>UserDir
-http://www.foo.com/*/usr</td><td>http://www.foo.com/bob/usr/one/two.html</td></tr>
-<tr><td>UserDir
-http://www.foo.com/~*/</td><td>http://www.foo.com/~bob/one/two.html</td></tr>
-</table> 
-
-<note>
-      <strong>Be careful when using this directive; for instance,
-      <code>"UserDir ./"</code> would map
-      <code>"/~root"</code> to <code>"/"</code> - which is probably
-      undesirable. If you are running Apache 1.3 or above, it is
-      strongly recommended that your configuration include a
-      "<code>UserDir disabled root</code>" declaration.
-      See also the <directive module="core">Directory</directive>
-      directive and the <a href="../misc/security_tips.html">Security
-      Tips</a> page for more information.</strong>
-</note>
-
-<p>Additional examples:</p>
-
-<p>To allow a few users to have <code>UserDir</code> directories, but
-not anyone else, use the following:</p>
-
-<example>
-UserDir disabled<br />
-UserDir enabled user1 user2 user3
-</example>
-
-<p>To allow most users to have <code>UserDir</code> directories, but
-deny this to a few, use the following:</p>
-
-<example>
-UserDir enabled<br />
-UserDir disabled user4 user5 user6
-</example>
-
-</usage>
-
-</directivesynopsis>
-</modulesynopsis>
-
-
diff --git a/docs/manual/mod/mod_usertrack.html b/docs/manual/mod/mod_usertrack.html
deleted file mode 100644
index 5e94c5c..0000000
--- a/docs/manual/mod/mod_usertrack.html
+++ /dev/null
@@ -1,134 +0,0 @@
-<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-     This file is generated from xml source: DO NOT EDIT
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
---><title>mod_usertrack - Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img alt="[APACHE DOCUMENTATION]" src="../images/sub.gif"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module mod_usertrack</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td><description>
-    This module uses cookies to provide for a
-    <em>clickstream</em> log of user activity on a site.
-</description></td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="module-dict.html#ModuleIdentifier" class="help">Module&nbsp;Identifier:</a></td><td>usertrack_module</td></tr><tr><td align="left" valign="top"><a href="module-dict.html#Compatibility" class="help">Compatibility:</a></td><td><compatibility>Known as mod_cookies prior to Apache 1.3.</compatibility></td></tr></table></td></tr></table><h2>Summary</h2><summary>
-
-    <h2>Summary</h2>
-
-    <p>Previous releases of Apache have included a module which
-    generates a 'clickstream' log of user activity on a site using
-    cookies. This was called the "cookies" module, mod_cookies. In
-    Apache 1.2 and later this module has been renamed the "user
-    tracking" module, mod_usertrack. This module has been
-    simplified and new directives added.</p>
-</summary><h2>Directives</h2><ul><li><a href="#cookiedomain">CookieDomain</a></li><li><a href="#cookieexpires">CookieExpires</a></li><li><a href="#cookiename">CookieName</a></li><li><a href="#cookiestyle">CookieStyle</a></li><li><a href="#cookietracking">CookieTracking</a></li></ul><h2>Logging</h2>
-
-
-    <p>Previously, the cookies module (now the user tracking
-    module) did its own logging, using the <tt>CookieLog</tt>
-    directive. In this release, this module does no logging at all.
-    Instead, a configurable log format file should be used to log
-    user click-streams. This is possible because the logging module
-    now allows multiple log files. The cookie itself is logged by
-    using the text <tt>%{cookie}n</tt> in the log file format. For
-    example:</p>
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-CustomLog logs/clickstream "%{cookie}n %r %t"
-</code></td></tr></table></blockquote>
-
-    <p>For backward compatibility the configurable log module
-    implements the old <tt>CookieLog</tt> directive, but this
-    should be upgraded to the above <tt>CustomLog</tt> directive. </p>
-<h2>2-digit or 4-digit dates for cookies?</h2>
-
-
-    <p>(the following is from message
-    &lt;022701bda43d$9d32bbb0$1201a8c0@christian.office.sane.com&gt;
-    in the new-httpd archives) 
-<pre>
-From: "Christian Allen" &lt;christian@sane.com&gt;
-Subject: Re: Apache Y2K bug in mod_usertrack.c
-Date: Tue, 30 Jun 1998 11:41:56 -0400
-
-Did some work with cookies and dug up some info that might be useful.
-
-True, Netscape claims that the correct format NOW is four digit dates, and
-four digit dates do in fact work... for Netscape 4.x (Communicator), that
-is.  However, 3.x and below do NOT accept them.  It seems that Netscape
-originally had a 2-digit standard, and then with all of the Y2K hype and
-probably a few complaints, changed to a four digit date for Communicator.
-Fortunately, 4.x also understands the 2-digit format, and so the best way to
-ensure that your expiration date is legible to the client's browser is to
-use 2-digit dates.
-
-However, this does not limit expiration dates to the year 2000; if you use
-an expiration year of "13", for example, it is interpreted as 2013, NOT
-1913!  In fact, you can use an expiration year of up to "37", and it will be
-understood as "2037" by both MSIE and Netscape versions 3.x and up (not sure
-about versions previous to those).  Not sure why Netscape used that
-particular year as its cut-off point, but my guess is that it was in respect
-to UNIX's 2038 problem.  Netscape/MSIE 4.x seem to be able to understand
-2-digit years beyond that, at least until "50" for sure (I think they
-understand up until about "70", but not for sure).
-
-Summary:  Mozilla 3.x and up understands two digit dates up until "37"
-(2037).  Mozilla 4.x understands up until at least "50" (2050) in 2-digit
-form, but also understands 4-digit years, which can probably reach up until
-9999.  Your best bet for sending a long-life cookie is to send it for some
-time late in the year "37".
-</pre>
-</p>
-<hr/><h2><a name="CookieDomain">CookieDomain</a> <a name="cookiedomain">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>controls the setting of the domain to which
-    the tracking cookie applies.</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>CookieDomain <i>domain</i></syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>None</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_usertrack</td></tr></table></td></tr></table><usage>
-
-    <p>This directive controls the setting of the domain to which
-    the tracking cookie applies. If not present, no domain is
-    included in the cookie header field.</p>
-
-    <p>The domain string <b>must</b> begin with a dot, and
-    <b>must</b> include at least one embedded dot. That is,
-    ".foo.com" is legal, but "foo.bar.com" and ".com" are not.</p>
-</usage><hr/><h2><a name="CookieExpires">CookieExpires</a> <a name="cookieexpires">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td/></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>CookieExpires <em>expiry-period</em></syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code/></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td/></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_usertrack</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>In 1.3.20 and earlier, not usable in directory and
-.htaccess</td></tr></table></td></tr></table><usage>
-    <p>When used, this directive sets an expiry time on the cookie
-    generated by the usertrack module. The <em>expiry-period</em>
-    can be given either as a number of seconds, or in the format
-    such as "2 weeks 3 days 7 hours". Valid denominations are:
-    years, months, weeks, hours, minutes and seconds. If the expiry
-    time is in any format other than one number indicating the
-    number of seconds, it must be enclosed by double quotes.</p>
-
-    <p>If this directive is not used, cookies last only for the
-    current browser session.</p>
-</usage><hr/><h2><a name="CookieName">CookieName</a> <a name="cookiename">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td/></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>CookieName <em>token</em></syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>Apache</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_usertrack</td></tr></table></td></tr></table><usage>
-    <p>This directive allows you to change the name of the cookie
-    this module uses for its tracking purposes. By default the
-    cookie is named "<code>Apache</code>".</p>
-
-    <p>You must specify a valid cookie name; results are
-    unpredictable if you use a name containing unusual characters.
-    Valid characters include A-Z, a-z, 0-9, "_", and "-".</p>
-</usage><hr/><h2><a name="CookieStyle">CookieStyle</a> <a name="cookiestyle">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Controls the format of the cookie header
-    field</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>CookieStyle
-    <i>Netscape|Cookie|Cookie2|RFC2109|RFC2965</i></syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code/></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_usertrack</td></tr></table></td></tr></table><usage>
-    <p>This directive controls the format of the cookie header
-    field. The three formats allowed are:</p>
-
-    <ul>
-      <li><b>Netscape</b>, which is the original but now deprecated
-      syntax. This is the default, and the syntax Apache has
-      historically used.</li>
-
-      <li><b>Cookie</b> or <b>RFC2109</b>, which is the syntax that
-      superseded the Netscape syntax.</li>
-
-      <li><b>Cookie2</b> or <b>RFC2965</b>, which is the most
-      current cookie syntax.</li>
-    </ul>
-
-    <p>Not all clients can understand all of these formats. but you
-    should use the newest one that is generally acceptable to your
-    users' browsers.</p>
-</usage><hr/><h2><a name="CookieTracking">CookieTracking</a> <a name="cookietracking">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td/></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>CookieTracking on|off</syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code/></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>FileInfo</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_usertrack</td></tr></table></td></tr></table><usage>
-    <p>When the user track module is compiled in, and
-    "CookieTracking on" is set, Apache will start sending a
-    user-tracking cookie for all new requests. This directive can
-    be used to turn this behavior on or off on a per-server or
-    per-directory basis. By default, compiling mod_usertrack will
-    not activate cookies. </p>
-
-</usage><hr/><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img alt="Index" src="../images/index.gif"/></a><a href="../"><img alt="Home" src="../images/home.gif"/></a></blockquote></body></html>
\ No newline at end of file
diff --git a/docs/manual/mod/mod_usertrack.xml b/docs/manual/mod/mod_usertrack.xml
deleted file mode 100755
index 078eb8f..0000000
--- a/docs/manual/mod/mod_usertrack.xml
+++ /dev/null
@@ -1,223 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.xsl"?>
-
-<modulesynopsis>
-<name>mod_usertrack</name> 
-<description>
-    This module uses cookies to provide for a
-    <em>clickstream</em> log of user activity on a site.
-</description>
-<status>Extension</status>
-<sourcefile>mod_usertrack.c</sourcefile>
-<identifier>usertrack_module</identifier>
-<compatibility>Known as mod_cookies prior to Apache 1.3.</compatibility>
-
-<summary>
-    <p>Previous releases of Apache have included a module which
-    generates a 'clickstream' log of user activity on a site using
-    cookies. This was called the "cookies" module, mod_cookies. In
-    Apache 1.2 and later this module has been renamed the "user
-    tracking" module, mod_usertrack. This module has been
-    simplified and new directives added.</p>
-</summary>
-
-
-<section>
-<title>Logging</title>
-
-    <p>Previously, the cookies module (now the user tracking
-    module) did its own logging, using the <directive>CookieLog</directive>
-    directive. In this release, this module does no logging at all.
-    Instead, a configurable log format file should be used to log
-    user click-streams. This is possible because the logging module
-    now allows multiple log files. The cookie itself is logged by
-    using the text <code>%{cookie}n</code> in the log file format. For
-    example:</p>
-<example>
-CustomLog logs/clickstream "%{cookie}n %r %t"
-</example>
-
-    <p>For backward compatibility the configurable log module
-    implements the old <directive>CookieLog</directive> directive, but this
-    should be upgraded to the above <directive>CustomLog</directive> directive. </p>
-</section>
-
-<section>
-<title>2-digit or 4-digit dates for cookies?</title>
-
-    <p>(the following is from message
-    &lt;022701bda43d$9d32bbb0$1201a8c0@christian.office.sane.com&gt;
-    in the new-httpd archives) </p>
-<pre>
-From: "Christian Allen" &lt;christian@sane.com&gt;
-Subject: Re: Apache Y2K bug in mod_usertrack.c
-Date: Tue, 30 Jun 1998 11:41:56 -0400
-
-Did some work with cookies and dug up some info that might be useful.
-
-True, Netscape claims that the correct format NOW is four digit dates, and
-four digit dates do in fact work... for Netscape 4.x (Communicator), that
-is.  However, 3.x and below do NOT accept them.  It seems that Netscape
-originally had a 2-digit standard, and then with all of the Y2K hype and
-probably a few complaints, changed to a four digit date for Communicator.
-Fortunately, 4.x also understands the 2-digit format, and so the best way to
-ensure that your expiration date is legible to the client's browser is to
-use 2-digit dates.
-
-However, this does not limit expiration dates to the year 2000; if you use
-an expiration year of "13", for example, it is interpreted as 2013, NOT
-1913!  In fact, you can use an expiration year of up to "37", and it will be
-understood as "2037" by both MSIE and Netscape versions 3.x and up (not sure
-about versions previous to those).  Not sure why Netscape used that
-particular year as its cut-off point, but my guess is that it was in respect
-to UNIX's 2038 problem.  Netscape/MSIE 4.x seem to be able to understand
-2-digit years beyond that, at least until "50" for sure (I think they
-understand up until about "70", but not for sure).
-
-Summary:  Mozilla 3.x and up understands two digit dates up until "37"
-(2037).  Mozilla 4.x understands up until at least "50" (2050) in 2-digit
-form, but also understands 4-digit years, which can probably reach up until
-9999.  Your best bet for sending a long-life cookie is to send it for some
-time late in the year "37".
-</pre>
-
-</section>
-
-<directivesynopsis>
-<name>CookieDomain</name>
-<description>controls the setting of the domain to which the tracking cookie applies.</description>
-<syntax>CookieDomain <em>domain</em></syntax>
-<default>None</default>
-<contextlist>
-<context>server config</context>
-<context>virtual host</context>
-<context>directory</context>
-<context>.htaccess</context>
-</contextlist>
-
-<usage>
-
-    <p>This directive controls the setting of the domain to which
-    the tracking cookie applies. If not present, no domain is
-    included in the cookie header field.</p>
-
-    <p>The domain string <strong>must</strong> begin with a dot, and
-    <strong>must</strong> include at least one embedded dot. That is,
-    ".foo.com" is legal, but "foo.bar.com" and ".com" are not.</p>
-</usage>
-</directivesynopsis>
-
-
-<directivesynopsis>
-<name>CookieExpires</name>
-<syntax>CookieExpires <em>expiry-period</em></syntax>
-<default></default>
-<contextlist>
-<context>server config</context>
-<context>virtual host</context>
-<context>directory</context>
-<context>.htaccess</context>
-</contextlist>
-<override></override>
-<compatibility>In 1.3.20 and earlier, not usable in directory and
-.htaccess</compatibility>
-
-<usage>
-    <p>When used, this directive sets an expiry time on the cookie
-    generated by the usertrack module. The <em>expiry-period</em>
-    can be given either as a number of seconds, or in the format
-    such as "2 weeks 3 days 7 hours". Valid denominations are:
-    years, months, weeks, hours, minutes and seconds. If the expiry
-    time is in any format other than one number indicating the
-    number of seconds, it must be enclosed by double quotes.</p>
-
-    <p>If this directive is not used, cookies last only for the
-    current browser session.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>CookieName</name>
-<syntax>CookieName <em>token</em></syntax>
-<default>Apache</default>
-<contextlist>
-<context>server config</context>
-<context>virtual host</context>
-<context>directory</context>
-<context>.htaccess</context>
-</contextlist>
-
-<usage>
-    <p>This directive allows you to change the name of the cookie
-    this module uses for its tracking purposes. By default the
-    cookie is named "<code>Apache</code>".</p>
-
-    <p>You must specify a valid cookie name; results are
-    unpredictable if you use a name containing unusual characters.
-    Valid characters include A-Z, a-z, 0-9, "_", and "-".</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>CookieStyle</name>
-<description>Controls the format of the cookie header field</description>
-<syntax>CookieStyle
-    <em>Netscape|Cookie|Cookie2|RFC2109|RFC2965</em></syntax>
-<default></default>
-<contextlist>
-<context>server config</context>
-<context>virtual host</context>
-<context>directory</context>
-<context>.htaccess</context>
-</contextlist>
-
-<usage>
-    <p>This directive controls the format of the cookie header
-    field. The three formats allowed are:</p>
-
-    <ul>
-      <li><strong>Netscape</strong>, which is the original but now deprecated
-      syntax. This is the default, and the syntax Apache has
-      historically used.</li>
-
-      <li><strong>Cookie</strong> or <strong>RFC2109</strong>, which is the syntax that
-      superseded the Netscape syntax.</li>
-
-      <li><strong>Cookie2</strong> or <strong>RFC2965</strong>, which is the most
-      current cookie syntax.</li>
-    </ul>
-
-    <p>Not all clients can understand all of these formats. but you
-    should use the newest one that is generally acceptable to your
-    users' browsers.</p>
-</usage>
-</directivesynopsis>
-
-
-
-<directivesynopsis>
-<name>CookieTracking</name>
-<syntax>CookieTracking on|off</syntax>
-<default></default>
-<contextlist>
-<context>server config</context>
-<context>virtual host</context>
-<context>directory</context>
-<context>.htaccess</context>
-</contextlist>
-<override>FileInfo</override>
-
-<usage>
-    <p>When the user track module is compiled in, and
-    "CookieTracking on" is set, Apache will start sending a
-    user-tracking cookie for all new requests. This directive can
-    be used to turn this behavior on or off on a per-server or
-    per-directory basis. By default, compiling mod_usertrack will
-    not activate cookies. </p>
-
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
-
diff --git a/docs/manual/mod/mod_vhost_alias.html b/docs/manual/mod/mod_vhost_alias.html
deleted file mode 100644
index dcdb473..0000000
--- a/docs/manual/mod/mod_vhost_alias.html
+++ /dev/null
@@ -1,205 +0,0 @@
-<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-     This file is generated from xml source: DO NOT EDIT
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
---><title>mod_vhost_alias - Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img alt="[APACHE DOCUMENTATION]" src="../images/sub.gif"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module mod_vhost_alias</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td><description>Provides for <a href="../vhosts/mass.html">dynamically configured mass virtual
-hosting</a></description></td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="module-dict.html#ModuleIdentifier" class="help">Module&nbsp;Identifier:</a></td><td>vhost_alias_module</td></tr></table></td></tr></table><h2>Summary</h2><summary>
-
-    <p>This module creates dynamically configured virtual hosts, by
-    allowing the IP address and/or the <code>Host:</code> header of
-    the HTTP request to be used as part of the pathname to
-    determine what files to serve. This allows for easy use of a
-    huge number of virtual hosts with similar configurations.</p>
-
-
-</summary><p><strong>See also </strong></p><ul><li><a href="core.html#usecanonicalname" class="directive"><code class="directive">UseCanonicalName</code></a>.</li></ul><h2>Directives</h2><ul><li><a href="#virtualdocumentroot">VirtualDocumentRoot</a></li><li><a href="#virtualdocumentrootip">VirtualDocumentRootIP</a></li><li><a href="#virtualscriptalias">VirtualScriptAlias</a></li><li><a href="#virtualscriptaliasip">VirtualScriptAliasIP</a></li></ul><h2>Directory Name Interpolation</h2>
-    
-
-    <p>All the directives in this module interpolate a string into
-    a pathname. The interpolated string (henceforth called the
-    "name") may be either the server name (see the <a href="core.html#usecanonicalname"><code>UseCanonicalName</code></a>
-    directive for details on how this is determined) or the IP
-    address of the virtual host on the server in dotted-quad
-    format. The interpolation is controlled by specifiers inspired
-    by <code>printf</code> which have a number of formats:</p>
-
-<table>
-
-<tr><td><code>%%</code></td>
-<td>insert a <code>%</code></td></tr>
-
-<tr><td><code>%p</code></td>
-<td>insert the port number of the virtual host</td></tr>
-
-<tr><td><code>%N.M</code></td>
-<td>insert (part of) the name</td></tr>
-     
-</table>
-
-    <p><code>N</code> and <code>M</code> are used to specify
-    substrings of the name. <code>N</code> selects from the
-    dot-separated components of the name, and <code>M</code>
-    selects characters within whatever <code>N</code> has selected.
-    <code>M</code> is optional and defaults to zero if it isn't
-    present; the dot must be present if and only if <code>M</code>
-    is present. The interpretation is as follows:</p>
-
-    <table>
-      <tr><td><code>0</code></td>
-      <td>the whole name</td></tr>
-
-      <tr><td><code>1</code></td>
-      <td>the first part</td></tr>
-
-      <tr><td><code>2</code></td>
-      <td>the second part</td></tr>
-
-      <tr><td><code>-1</code></td>
-      <td>the last part</td></tr>
-
-      <tr><td><code>-2</code></td>
-      <td>the penultimate part</td></tr>
-
-      <tr><td><code>2+</code></td>
-      <td>the second and all subsequent parts</td></tr>
-
-      <tr><td><code>-2+</code></td>
-      <td>the penultimate and all preceding parts</td></tr>
-
-      <tr><td><code>1+</code> and <code>-1+</code></td>
-      <td>the same as <code>0</code></td></tr>
-    </table>
-
-    <p>If <code>N</code> or <code>M</code> is greater than the number
-    of parts available a single underscore is interpolated. </p>
-
-<h2>Examples</h2>
-    
-
-    <p>For simple name-based virtual hosts you might use the
-    following directives in your server configuration file:</p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-    UseCanonicalName    Off<br>
-    VirtualDocumentRoot /usr/local/apache/vhosts/%0
-</code></td></tr></table></blockquote>
-
-    <p>A request for
-    <code>http://www.example.com/directory/file.html</code> will be
-    satisfied by the file
-    <code>/usr/local/apache/vhosts/www.example.com/directory/file.html</code>.
-    </p> 
-
-    <p>For a very large number of virtual hosts it is a good idea
-    to arrange the files to reduce the size of the
-    <code>vhosts</code> directory. To do this you might use the
-    following in your configuration file:</p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-    UseCanonicalName    Off<br>
-    VirtualDocumentRoot /usr/local/apache/vhosts/%3+/%2.1/%2.2/%2.3/%2
-</code></td></tr></table></blockquote>
-
-    <p>A request for
-    <code>http://www.example.isp.com/directory/file.html</code>
-    will be satisfied by the file
-    <code>/usr/local/apache/vhosts/isp.com/e/x/a/example/directory/file.html</code>.</p>
-
-    <p>A more even spread of files can be achieved by hashing from the
-    end of the name, for example: </p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-    VirtualDocumentRoot /usr/local/apache/vhosts/%3+/%2.-1/%2.-2/%2.-3/%2
-</code></td></tr></table></blockquote>
-
-    <p>The example request would come from
-    <code>/usr/local/apache/vhosts/isp.com/e/l/p/example/directory/file.html</code>.</p>
-
-    <p>Alternatively you might use: </p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-    VirtualDocumentRoot /usr/local/apache/vhosts/%3+/%2.1/%2.2/%2.3/%2.4+
-</code></td></tr></table></blockquote>
-
-    <p>The example request would come from
-    <code>/usr/local/apache/vhosts/isp.com/e/x/a/mple/directory/file.html</code>.</p>
-
-    <p>For IP-based virtual hosting you might use the following in
-    your configuration file:</p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-    UseCanonicalName DNS<br>
-    VirtualDocumentRootIP   /usr/local/apache/vhosts/%1/%2/%3/%4/docs<br>
-    VirtualScriptAliasIP    /usr/local/apache/vhosts/%1/%2/%3/%4/cgi-bin
-</code></td></tr></table></blockquote>
-
-    <p>A request for
-    <code>http://www.example.isp.com/directory/file.html</code>
-    would be satisfied by the file
-    <code>/usr/local/apache/vhosts/10/20/30/40/docs/directory/file.html</code>
-    if the IP address of <code>www.example.com</code> were
-    10.20.30.40. A request for
-    <code>http://www.example.isp.com/cgi-bin/script.pl</code> would
-    be satisfied by executing the program
-    <code>/usr/local/apache/vhosts/10/20/30/40/cgi-bin/script.pl</code>.</p>
-
-    <p>If you want to include the <code>.</code> character in a
-    <code>VirtualDocumentRoot</code> directive, but it clashes with
-    a <code>%</code> directive, you can work around the problem in
-    the following way:</p>
-
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-    VirtualDocumentRoot /usr/local/apache/vhosts/%2.0.%3.0
-</code></td></tr></table></blockquote>
-
-    <p>A request for
-    <code>http://www.example.isp.com/directory/file.html</code>
-    will be satisfied by the file
-    <code>/usr/local/apache/vhosts/example.isp/directory/file.html</code>.</p>
-     
-    <p>The <a href="mod_log_config.html#logformat" class="directive"><code class="directive">LogFormat</code></a>
-    directives <code>%V</code> and <code>%A</code> are useful
-    in conjunction with this module.</p>
-<hr/><h2><a name="VirtualDocumentRoot">VirtualDocumentRoot</a> <a name="virtualdocumentroot">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Dynamically configure the location of the document root
-for a given virtual host</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>VirtualDocumentRoot <em>interpolated-directory</em></syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>none</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td/></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_vhost_alias</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>VirtualDocumentRoot is only available in 1.3.7 and
-later.</td></tr></table></td></tr></table><usage>
-
-    <p>The <code>VirtualDocumentRoot</code> directive allows you to
-    determine where Apache will find your documents based on the
-    value of the server name. The result of expanding
-    <em>interpolated-directory</em> is used as the root of the
-    document tree in a similar manner to the <a href="core.html#documentroot" class="directive"><code class="directive">DocumentRoot</code></a> directive's argument. 
-    If <em>interpolated-directory</em> is <code>none</code> then
-    <code>VirtaulDocumentRoot</code> is turned off. This directive 
-    cannot be used in the same context as
-    <code class="directive">VirtualDocumentRootIP</code>.</p>
-
-</usage><hr/><h2><a name="VirtualDocumentRootIP">VirtualDocumentRootIP</a> <a name="virtualdocumentrootip">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Dynamically configure the location of the document root
-for a given virtual host</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>VirtualDocumentRootIP <em>interpolated-directory</em></syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>none</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td/></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_vhost_alias</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>VirtualDocumentRootIP is only available in 1.3.7 
-and later.</td></tr></table></td></tr></table><usage>
-
-<p>The <code>VirtualDocumentRootIP</code> directive is like the
-    <code class="directive">VirtualDocumentRoot</code>
-    directive, except that it uses the IP address of the server end
-    of the connection instead of the server name.</p>
-</usage><hr/><h2><a name="VirtualScriptAlias">VirtualScriptAlias</a> <a name="virtualscriptalias">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Dynamically configure the location of the CGI directory for
-a given virtual host</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>VirtualScriptAlias <em>interpolated-directory</em></syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>none</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td/></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_vhost_alias</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>VirtualScriptAlias is only available in 1.3.7
-and later.</td></tr></table></td></tr></table><usage>
-
-    <p>The <code>VirtualScriptAlias</code> directive allows you to
-    determine where Apache will find CGI scripts in a similar
-    manner to <code class="directive">VirtualDocumentRoot</code>
-    does for other documents. It matches requests for URIs starting
-    <code>/cgi-bin/</code>, much like <a href="mod_alias.html#scriptalias" class="directive"><code class="directive">ScriptAlias</code></a>
-    <code>/cgi-bin/</code> would.</p>
-
-</usage><hr/><h2><a name="VirtualScriptAliasIP">VirtualScriptAliasIP</a> <a name="virtualscriptaliasip">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Dynamically configure the location of the cgi directory for
-a given virtual host</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>VirtualScriptAliasIP <em>interpolated-directory</em></syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>none</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td/></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_vhost_alias</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>VirtualScriptAliasIP is only available in 1.3.7 
-and later.</td></tr></table></td></tr></table><usage>
-
-    <p>The <code>VirtualScriptAliasIP</code> directive is like the
-    <a href="#virtualscriptalias"><code>VirtualScriptAlias</code></a>
-    directive, except that it uses the IP address of the server end
-    of the connection instead of the server name.</p>
-
-    </usage><hr/><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img alt="Index" src="../images/index.gif"/></a><a href="../"><img alt="Home" src="../images/home.gif"/></a></blockquote></body></html>
\ No newline at end of file
diff --git a/docs/manual/mod/mod_vhost_alias.xml b/docs/manual/mod/mod_vhost_alias.xml
deleted file mode 100644
index fe766a3..0000000
--- a/docs/manual/mod/mod_vhost_alias.xml
+++ /dev/null
@@ -1,286 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.xsl"?>
-<modulesynopsis>
-
-<name>mod_vhost_alias</name>
-<description>Provides for <a
-href="../vhosts/mass.html">dynamically configured mass virtual
-hosting</a></description>
-<status>Extension</status>
-<sourcefile>mod_vhost_alias.c</sourcefile>
-<identifier>vhost_alias_module</identifier>
-
-<summary>
-
-    <p>This module creates dynamically configured virtual hosts, by
-    allowing the IP address and/or the <code>Host:</code> header of
-    the HTTP request to be used as part of the pathname to
-    determine what files to serve. This allows for easy use of a
-    huge number of virtual hosts with similar configurations.</p>
-
-
-</summary>
-    <seealso><directive
-    module="core">UseCanonicalName</directive>.</seealso>
-
-<section>
-    <title>Directory Name Interpolation</title>
-
-    <p>All the directives in this module interpolate a string into
-    a pathname. The interpolated string (henceforth called the
-    "name") may be either the server name (see the <a
-    href="core.html#usecanonicalname"><code>UseCanonicalName</code></a>
-    directive for details on how this is determined) or the IP
-    address of the virtual host on the server in dotted-quad
-    format. The interpolation is controlled by specifiers inspired
-    by <code>printf</code> which have a number of formats:</p>
-
-<table>
-
-<tr><td><code>%%</code></td>
-<td>insert a <code>%</code></td></tr>
-
-<tr><td><code>%p</code></td>
-<td>insert the port number of the virtual host</td></tr>
-
-<tr><td><code>%N.M</code></td>
-<td>insert (part of) the name</td></tr>
-     
-</table>
-
-    <p><code>N</code> and <code>M</code> are used to specify
-    substrings of the name. <code>N</code> selects from the
-    dot-separated components of the name, and <code>M</code>
-    selects characters within whatever <code>N</code> has selected.
-    <code>M</code> is optional and defaults to zero if it isn't
-    present; the dot must be present if and only if <code>M</code>
-    is present. The interpretation is as follows:</p>
-
-    <table>
-      <tr><td><code>0</code></td>
-      <td>the whole name</td></tr>
-
-      <tr><td><code>1</code></td>
-      <td>the first part</td></tr>
-
-      <tr><td><code>2</code></td>
-      <td>the second part</td></tr>
-
-      <tr><td><code>-1</code></td>
-      <td>the last part</td></tr>
-
-      <tr><td><code>-2</code></td>
-      <td>the penultimate part</td></tr>
-
-      <tr><td><code>2+</code></td>
-      <td>the second and all subsequent parts</td></tr>
-
-      <tr><td><code>-2+</code></td>
-      <td>the penultimate and all preceding parts</td></tr>
-
-      <tr><td><code>1+</code> and <code>-1+</code></td>
-      <td>the same as <code>0</code></td></tr>
-    </table>
-
-    <p>If <code>N</code> or <code>M</code> is greater than the number
-    of parts available a single underscore is interpolated. </p>
-
-</section>
-
-<section>
-    <title>Examples</title>
-
-    <p>For simple name-based virtual hosts you might use the
-    following directives in your server configuration file:</p>
-
-<example>
-    UseCanonicalName    Off<br />
-    VirtualDocumentRoot /usr/local/apache/vhosts/%0
-</example>
-
-    <p>A request for
-    <code>http://www.example.com/directory/file.html</code> will be
-    satisfied by the file
-    <code>/usr/local/apache/vhosts/www.example.com/directory/file.html</code>.
-    </p> 
-
-    <p>For a very large number of virtual hosts it is a good idea
-    to arrange the files to reduce the size of the
-    <code>vhosts</code> directory. To do this you might use the
-    following in your configuration file:</p>
-
-<example>
-    UseCanonicalName    Off<br />
-    VirtualDocumentRoot /usr/local/apache/vhosts/%3+/%2.1/%2.2/%2.3/%2
-</example>
-
-    <p>A request for
-    <code>http://www.example.isp.com/directory/file.html</code>
-    will be satisfied by the file
-    <code>/usr/local/apache/vhosts/isp.com/e/x/a/example/directory/file.html</code>.</p>
-
-    <p>A more even spread of files can be achieved by hashing from the
-    end of the name, for example: </p>
-
-<example>
-    VirtualDocumentRoot /usr/local/apache/vhosts/%3+/%2.-1/%2.-2/%2.-3/%2
-</example>
-
-    <p>The example request would come from
-    <code>/usr/local/apache/vhosts/isp.com/e/l/p/example/directory/file.html</code>.</p>
-
-    <p>Alternatively you might use: </p>
-
-<example>
-    VirtualDocumentRoot /usr/local/apache/vhosts/%3+/%2.1/%2.2/%2.3/%2.4+
-</example>
-
-    <p>The example request would come from
-    <code>/usr/local/apache/vhosts/isp.com/e/x/a/mple/directory/file.html</code>.</p>
-
-    <p>For IP-based virtual hosting you might use the following in
-    your configuration file:</p>
-
-<example>
-    UseCanonicalName DNS<br />
-    VirtualDocumentRootIP   /usr/local/apache/vhosts/%1/%2/%3/%4/docs<br />
-    VirtualScriptAliasIP    /usr/local/apache/vhosts/%1/%2/%3/%4/cgi-bin
-</example>
-
-    <p>A request for
-    <code>http://www.example.isp.com/directory/file.html</code>
-    would be satisfied by the file
-    <code>/usr/local/apache/vhosts/10/20/30/40/docs/directory/file.html</code>
-    if the IP address of <code>www.example.com</code> were
-    10.20.30.40. A request for
-    <code>http://www.example.isp.com/cgi-bin/script.pl</code> would
-    be satisfied by executing the program
-    <code>/usr/local/apache/vhosts/10/20/30/40/cgi-bin/script.pl</code>.</p>
-
-    <p>If you want to include the <code>.</code> character in a
-    <code>VirtualDocumentRoot</code> directive, but it clashes with
-    a <code>%</code> directive, you can work around the problem in
-    the following way:</p>
-
-<example>
-    VirtualDocumentRoot /usr/local/apache/vhosts/%2.0.%3.0
-</example>
-
-    <p>A request for
-    <code>http://www.example.isp.com/directory/file.html</code>
-    will be satisfied by the file
-    <code>/usr/local/apache/vhosts/example.isp/directory/file.html</code>.</p>
-     
-    <p>The <directive module="mod_log_config">LogFormat</directive>
-    directives <code>%V</code> and <code>%A</code> are useful
-    in conjunction with this module.</p>
-</section>
-
-<directivesynopsis>
-<name>VirtualDocumentRoot</name>
-<description>Dynamically configure the location of the document root
-for a given virtual host</description>
-<syntax>VirtualDocumentRoot <em>interpolated-directory</em></syntax>
-<default>none</default>
-<contextlist>
-<context>server config</context>
-<context>virtual host</context>
-</contextlist>
-<override></override>
-<compatibility>VirtualDocumentRoot is only available in 1.3.7 and
-later.</compatibility>
-
-<usage>
-
-    <p>The <code>VirtualDocumentRoot</code> directive allows you to
-    determine where Apache will find your documents based on the
-    value of the server name. The result of expanding
-    <em>interpolated-directory</em> is used as the root of the
-    document tree in a similar manner to the <directive
-    module="core">DocumentRoot</directive> directive's argument. 
-    If <em>interpolated-directory</em> is <code>none</code> then
-    <code>VirtaulDocumentRoot</code> is turned off. This directive 
-    cannot be used in the same context as
-    <directive>VirtualDocumentRootIP</directive>.</p>
-
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>VirtualDocumentRootIP</name>
-<description>Dynamically configure the location of the document root
-for a given virtual host</description>
-<syntax>VirtualDocumentRootIP <em>interpolated-directory</em></syntax>
-<default>none</default>
-<contextlist>
-<context>server config</context>
-<context>virtual host</context>
-</contextlist>
-<override></override>
-<compatibility>VirtualDocumentRootIP is only available in 1.3.7 
-and later.</compatibility>
-
-<usage>
-
-<p>The <code>VirtualDocumentRootIP</code> directive is like the
-    <directive>VirtualDocumentRoot</directive>
-    directive, except that it uses the IP address of the server end
-    of the connection instead of the server name.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>VirtualScriptAlias</name>
-<description>Dynamically configure the location of the CGI directory for
-a given virtual host</description>
-<syntax>VirtualScriptAlias <em>interpolated-directory</em></syntax>
-<default>none</default>
-<contextlist>
-<context>server config</context>
-<context>virtual host</context>
-</contextlist>
-<override></override>
-<compatibility>VirtualScriptAlias is only available in 1.3.7
-and later.</compatibility>
-
-<usage>
-
-    <p>The <code>VirtualScriptAlias</code> directive allows you to
-    determine where Apache will find CGI scripts in a similar
-    manner to <directive>VirtualDocumentRoot</directive>
-    does for other documents. It matches requests for URIs starting
-    <code>/cgi-bin/</code>, much like <directive
-    module="mod_alias">ScriptAlias</directive>
-    <code>/cgi-bin/</code> would.</p>
-
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>VirtualScriptAliasIP</name>
-<description>Dynamically configure the location of the cgi directory for
-a given virtual host</description>
-<syntax>VirtualScriptAliasIP <em>interpolated-directory</em></syntax>
-<default>none</default>
-<contextlist>
-<context>server config</context>
-<context>virtual host</context>
-</contextlist>
-<override></override>
-<compatibility>VirtualScriptAliasIP is only available in 1.3.7 
-and later.</compatibility>
-
-<usage>
-
-    <p>The <code>VirtualScriptAliasIP</code> directive is like the
-    <a
-    href="#virtualscriptalias"><code>VirtualScriptAlias</code></a>
-    directive, except that it uses the IP address of the server end
-    of the connection instead of the server name.</p>
-
-    </usage>
-
-</directivesynopsis>
-</modulesynopsis>
-
diff --git a/docs/manual/mod/module-dict.html b/docs/manual/mod/module-dict.html
deleted file mode 100644
index 5e7cadb..0000000
--- a/docs/manual/mod/module-dict.html
+++ /dev/null
@@ -1,123 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta name="generator" content="HTML Tidy, see www.w3.org" />
-
-    <title>Definitions of terms used to describe Apache
-    modules</title>
-  </head>
-  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-
-  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-  vlink="#000080" alink="#FF0000">
-    <!--#include virtual="header.html" -->
-
-    <h1 align="CENTER">Terms Used to Describe Apache Modules</h1>
-
-    <p>Each Apache module is described using a common format that
-    looks like this:</p>
-
-    <dl>
-      <dd><a href="#Status" rel="Help"><strong>Status:</strong></a>
-      <em>status</em><br />
-       <a href="#SourceFile" rel="Help"><strong>Source
-      File:</strong></a> <em>source-file</em><br />
-       <a href="#ModuleIdentifier" rel="Help"><strong>Module
-      Identifier:</strong></a> <em>module-identifier</em><br />
-       <a href="#Compatibility"
-      rel="Help"><strong>Compatibility:</strong></a>
-      <em>compatibility notes</em></dd>
-    </dl>
-
-    <p>Each of the attributes, complete with values where possible,
-    are described in this document.</p>
-
-    <h2>Module Terms</h2>
-
-    <ul>
-      <li><a href="#Status">Status</a></li>
-
-      <li><a href="#SourceFile">Source File</a></li>
-
-      <li><a href="#ModuleIdentifier">Module Identifier</a></li>
-
-      <li><a href="#Compatibility">Compatibility</a></li>
-    </ul>
-    <hr />
-
-    <h2><a id="Status" name="Status">Status</a></h2>
-
-    <p>This indicates how tightly bound into the Apache Web server
-    the module is; in other words, you may need to recompile the
-    server in order to gain access to the module and its
-    functionality. Possible values for this attribute are:</p>
-
-    <dl>
-      <dt><strong>MPM</strong></dt>
-
-      <dd>A module with status "MPM" is a <a
-      href="../mpm.html">Multi-Processing Module</a>. Unlike the
-      other types of modules, Apache must have one and only one MPM
-      in use at any time. This type of module is responsible for
-      basic request handling and dispatching.</dd>
-
-      <dt><strong>Base</strong></dt>
-
-      <dd>A module labeled as having "Base" status is compiled and
-      loaded into the server by default, and is therefore normally
-      available unless you have taken steps to remove the module
-      from your configuration.</dd>
-
-      <dt><strong>Extension</strong></dt>
-
-      <dd>A module with "Extension" status is not normally compiled
-      and loaded into the server. To enable the module and its
-      functionality, you may need to change the server build
-      configuration files and re-compile Apache.</dd>
-
-      <dt><strong>Experimental</strong></dt>
-
-      <dd>"Experimental" status indicates that the module is
-      available as part of the Apache kit, but you are on your own
-      if you try to use it. The module is being documented for
-      completeness, and is not necessarily supported.</dd>
-
-      <dt><strong>External</strong></dt>
-
-      <dd>Modules which are not included with the base Apache
-      distribution ("third-party modules") may use the "External"
-      status. We are not responsible for, nor do we support such
-      modules.</dd>
-    </dl>
-    <hr />
-
-    <h2><a id="SourceFile" name="SourceFile">Source File</a></h2>
-
-    <p>This quite simply lists the name of the source file which
-    contains the code for the module. This is also the name used by
-    the <a
-    href="core.html#ifmodule"><code>&lt;IfModule&gt;</code></a>
-    directive.</p>
-    <hr />
-
-    <h2><a id="ModuleIdentifier" name="ModuleIdentifier">Module
-    Identifier</a></h2>
-
-    <p>This is a string which identifies the module for use in the
-    <a href="mod_so.html#loadmodule">LoadModule</a> directive when
-    dynamically loading modules. In particular, it is the name of
-    the external variable of type module in the source file.</p>
-    <hr />
-
-    <h2><a id="Compatibility"
-    name="Compatibility">Compatibility</a></h2>
-
-    <p>If the module was not part of the original Apache version 2
-    distribution, the version in which it was introduced should be
-    listed here.</p>
-    <!--#include virtual="footer.html" -->
-  </body>
-</html>
-
diff --git a/docs/manual/mod/module-dict.html.en b/docs/manual/mod/module-dict.html.en
deleted file mode 100644
index 5e7cadb..0000000
--- a/docs/manual/mod/module-dict.html.en
+++ /dev/null
@@ -1,123 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta name="generator" content="HTML Tidy, see www.w3.org" />
-
-    <title>Definitions of terms used to describe Apache
-    modules</title>
-  </head>
-  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-
-  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-  vlink="#000080" alink="#FF0000">
-    <!--#include virtual="header.html" -->
-
-    <h1 align="CENTER">Terms Used to Describe Apache Modules</h1>
-
-    <p>Each Apache module is described using a common format that
-    looks like this:</p>
-
-    <dl>
-      <dd><a href="#Status" rel="Help"><strong>Status:</strong></a>
-      <em>status</em><br />
-       <a href="#SourceFile" rel="Help"><strong>Source
-      File:</strong></a> <em>source-file</em><br />
-       <a href="#ModuleIdentifier" rel="Help"><strong>Module
-      Identifier:</strong></a> <em>module-identifier</em><br />
-       <a href="#Compatibility"
-      rel="Help"><strong>Compatibility:</strong></a>
-      <em>compatibility notes</em></dd>
-    </dl>
-
-    <p>Each of the attributes, complete with values where possible,
-    are described in this document.</p>
-
-    <h2>Module Terms</h2>
-
-    <ul>
-      <li><a href="#Status">Status</a></li>
-
-      <li><a href="#SourceFile">Source File</a></li>
-
-      <li><a href="#ModuleIdentifier">Module Identifier</a></li>
-
-      <li><a href="#Compatibility">Compatibility</a></li>
-    </ul>
-    <hr />
-
-    <h2><a id="Status" name="Status">Status</a></h2>
-
-    <p>This indicates how tightly bound into the Apache Web server
-    the module is; in other words, you may need to recompile the
-    server in order to gain access to the module and its
-    functionality. Possible values for this attribute are:</p>
-
-    <dl>
-      <dt><strong>MPM</strong></dt>
-
-      <dd>A module with status "MPM" is a <a
-      href="../mpm.html">Multi-Processing Module</a>. Unlike the
-      other types of modules, Apache must have one and only one MPM
-      in use at any time. This type of module is responsible for
-      basic request handling and dispatching.</dd>
-
-      <dt><strong>Base</strong></dt>
-
-      <dd>A module labeled as having "Base" status is compiled and
-      loaded into the server by default, and is therefore normally
-      available unless you have taken steps to remove the module
-      from your configuration.</dd>
-
-      <dt><strong>Extension</strong></dt>
-
-      <dd>A module with "Extension" status is not normally compiled
-      and loaded into the server. To enable the module and its
-      functionality, you may need to change the server build
-      configuration files and re-compile Apache.</dd>
-
-      <dt><strong>Experimental</strong></dt>
-
-      <dd>"Experimental" status indicates that the module is
-      available as part of the Apache kit, but you are on your own
-      if you try to use it. The module is being documented for
-      completeness, and is not necessarily supported.</dd>
-
-      <dt><strong>External</strong></dt>
-
-      <dd>Modules which are not included with the base Apache
-      distribution ("third-party modules") may use the "External"
-      status. We are not responsible for, nor do we support such
-      modules.</dd>
-    </dl>
-    <hr />
-
-    <h2><a id="SourceFile" name="SourceFile">Source File</a></h2>
-
-    <p>This quite simply lists the name of the source file which
-    contains the code for the module. This is also the name used by
-    the <a
-    href="core.html#ifmodule"><code>&lt;IfModule&gt;</code></a>
-    directive.</p>
-    <hr />
-
-    <h2><a id="ModuleIdentifier" name="ModuleIdentifier">Module
-    Identifier</a></h2>
-
-    <p>This is a string which identifies the module for use in the
-    <a href="mod_so.html#loadmodule">LoadModule</a> directive when
-    dynamically loading modules. In particular, it is the name of
-    the external variable of type module in the source file.</p>
-    <hr />
-
-    <h2><a id="Compatibility"
-    name="Compatibility">Compatibility</a></h2>
-
-    <p>If the module was not part of the original Apache version 2
-    distribution, the version in which it was introduced should be
-    listed here.</p>
-    <!--#include virtual="footer.html" -->
-  </body>
-</html>
-
diff --git a/docs/manual/mod/mpm_common.html b/docs/manual/mod/mpm_common.html
deleted file mode 100644
index e439fbe..0000000
--- a/docs/manual/mod/mpm_common.html
+++ /dev/null
@@ -1,336 +0,0 @@
-<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-     This file is generated from xml source: DO NOT EDIT
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
---><title>mpm_common - Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img alt="[APACHE DOCUMENTATION]" src="../images/sub.gif"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module mpm_common</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td><description>A collection of directives that are implemented by
-more than one multi-processing module (MPM)</description></td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>MPM</td></tr></table></td></tr></table><h2>Directives</h2><ul><li><a href="#coredumpdirectory">CoreDumpDirectory</a></li><li><a href="#group">Group</a></li><li><a href="#listen">Listen</a></li><li><a href="#listenbacklog">ListenBackLog</a></li><li><a href="#lockfile">LockFile</a></li><li><a href="#maxclients">MaxClients</a></li><li><a href="#maxrequestsperchild">MaxRequestsPerChild</a></li><li><a href="#maxsparethreads">MaxSpareThreads</a></li><li><a href="#maxthreadsperchild">MaxThreadsPerChild</a></li><li><a href="#minsparethreads">MinSpareThreads</a></li><li><a href="#numservers">NumServers</a></li><li><a href="#pidfile">PidFile</a></li><li><a href="#scoreboardfile">ScoreBoardFile</a></li><li><a href="#sendbuffersize">SendBufferSize</a></li><li><a href="#serverlimit">ServerLimit</a></li><li><a href="#startservers">StartServers</a></li><li><a href="#startthreads">StartThreads</a></li><li><a href="#threadlimit">ThreadLimit</a></li><li><a href="#threadsperchild">ThreadsPerChild</a></li><li><a href="#user">User</a></li></ul><hr/><h2><a name="CoreDumpDirectory">CoreDumpDirectory</a> <a name="coredumpdirectory">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sets the directory where Apache attempts to
-switch before dumping core</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>CoreDumpDirectory <em>directory</em></syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>CoreDumpDirectory ServerRoot</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>MPM</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td><code><a href="worker.html">worker</a></code>, <code><a href="perchild.html">perchild</a></code>, <code><a href="prefork.html">prefork</a></code>, <code><a href="mpm_winnt.html">mpm_winnt</a></code></td></tr></table></td></tr></table><usage>
-
-    <p>This controls the directory to which Apache attempts to
-    switch before dumping core. The default is in the 
-    <a href="core.html#serverroot" class="directive"><code class="directive">ServerRoot</code></a> directory, however
-    since this should not be writable by the user the server runs
-    as, core dumps won't normally get written. If you want a core
-    dump for debugging, you can use this directive to place it in a
-    different location.</p>
-</usage><hr/><h2><a name="Group">Group</a> <a name="group">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sets the group under which the server will answer
-requests</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>Group <em>unix-group</em></syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>Group #-1</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>MPM</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td><code><a href="worker.html">worker</a></code>, <code><a href="perchild.html">perchild</a></code>, <code><a href="prefork.html">prefork</a></code></td></tr></table></td></tr></table><usage>
-    <p>The <code class="directive">Group</code> directive sets the group under
-    which the server will answer requests. In order to use this
-    directive, the stand-alone server must be run initially as root.
-    <em>Unix-group</em> is one of:</p>
-
-    <dl>
-      <dt>A group name</dt>
-
-      <dd>Refers to the given group by name.</dd>
-
-      <dt># followed by a group number.</dt>
-
-      <dd>Refers to a group by its number.</dd>
-    </dl>
-    <p>It is recommended that you set up a new group specifically for
-    running the server. Some admins use user <code>nobody</code>,
-    but this is not always possible or desirable.</p>
-
-    <p>Note: if you start the server as a non-root user, it will
-    fail to change to the specified group, and will instead
-    continue to run as the group of the original user.</p>
-
-    <p>Special note: Use of this directive in &lt;VirtualHost&lt; is
-    no longer supported. To implement the <a href="../suexec.html">suEXEC wrapper</a> with Apache 2.0, use the
-    <a href="mod_suexec.html#suexecusergroup" class="directive"><code class="directive">SuexecUserGroup</code></a>
-    directive. SECURITY: See <a href="#user" class="directive"><code class="directive">User</code></a> for a discussion of the
-    security considerations.</p>
-</usage><hr/><h2><a name="Listen">Listen</a> <a name="listen">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sets the IP addresses and ports that the server
-listens to</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>Listen [<em>IP-address</em>:]<em>portnumber</em></syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>MPM</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td><code><a href="worker.html">worker</a></code>, <code><a href="perchild.html">perchild</a></code>, <code><a href="prefork.html">prefork</a></code>, <code><a href="mpm_winnt.html">mpm_winnt</a></code></td></tr></table></td></tr></table><usage>
-    <p>The <code class="directive">Listen</code> directive instructs Apache to
-    listen to only specific IP addresses or ports; by default it
-    responds to requests on all IP interfaces. The Listen directive is
-    now a required directive. If it is not in the config file, the
-    server will fail to start. This is a change from previous versions
-    of Apache.</p>
-
-    <p>The Listen directive tells the server to accept incoming
-    requests on the specified port or address-and-port combination.
-    If only a port number is specified, the server listens to the
-    given port on all interfaces. If an IP address is given as well 
-    as a port, the server will listen on the given port and
-    interface.</p>
-
-    <p>Multiple Listen directives may be used to specify a number
-    of addresses and ports to listen to. The server will respond to
-    requests from any of the listed addresses and ports.</p>
-
-    <p>For example, to make the server accept connections on both
-    port 80 and port 8000, use:</p>
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-   Listen 80<br>
-   Listen 8000
-</code></td></tr></table></blockquote>
-    To make the server accept connections on two specified
-    interfaces and port numbers, use 
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-   Listen 192.170.2.1:80<br>
-   Listen 192.170.2.5:8000
-</code></td></tr></table></blockquote>
-    IPv6 addresses must be surrounded in square brackets, as in the
-    following example:
-<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
-   Listen [fe80::a00:20ff:fea7:ccea]:80
-</code></td></tr></table></blockquote>
-</usage><p><strong>See also </strong></p><ul><li><a href="../dns-caveats.html">DNS Issues</a></li><li><a href="../bind.html">Setting
-    which addresses and ports Apache uses</a></li></ul><hr/><h2><a name="ListenBackLog">ListenBackLog</a> <a name="listenbacklog">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Maximum length of the queue of pending connections</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>ListenBacklog <em>backlog</em></syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>ListenBacklog 511</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>MPM</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td><code><a href="worker.html">worker</a></code>, <code><a href="perchild.html">perchild</a></code>, <code><a href="prefork.html">prefork</a></code>, <code><a href="mpm_winnt.html">mpm_winnt</a></code></td></tr></table></td></tr></table><usage>
-    <p>The maximum length of the queue of pending connections.
-    Generally no tuning is needed or desired, however on some
-    systems it is desirable to increase this when under a TCP SYN
-    flood attack. See the backlog parameter to the
-    <code>listen(2)</code> system call.</p>
-
-    <p>This will often be limited to a smaller number by the
-    operating system. This varies from OS to OS. Also note that
-    many OSes do not use exactly what is specified as the backlog,
-    but use a number based on (but normally larger than) what is
-    set.</p>
-</usage><hr/><h2><a name="LockFile">LockFile</a> <a name="lockfile">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Location of the accept serialization lock file</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>LockFile <em>filename</em></syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>LockFile logs/accept.lock</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>MPM</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td><code><a href="worker.html">worker</a></code>, <code><a href="perchild.html">perchild</a></code>, <code><a href="prefork.html">prefork</a></code></td></tr></table></td></tr></table><usage>
-    <p>The <code class="directive">LockFile</code> directive sets the path to
-    the lockfile used when Apache is compiled with either
-    USE_FCNTL_SERIALIZED_ACCEPT or USE_FLOCK_SERIALIZED_ACCEPT. This
-    directive should normally be left at its default value. The main
-    reason for changing it is if the <code>logs</code> directory is
-    NFS mounted, since <strong>the lockfile must be stored on a local
-    disk</strong>.  The PID of the main server process is
-    automatically appended to the filename.</p>
-
-    <p><strong>SECURITY:</strong> It is best to avoid putting this
-    file in a world writable directory such as
-    <code>/var/tmp</code> because someone could create a denial of
-    service attack and prevent the server from starting by creating
-    a lockfile with the same name as the one the server will try to
-    create.</p>
-</usage><hr/><h2><a name="MaxClients">MaxClients</a> <a name="maxclients">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Maximum number of child processes that will be created
-to serve requests</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>MaxClients <em>number</em></syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>&gt;MaxClients
-    8 (with threads) MaxClients 256</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>MPM</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td><code><a href="worker.html">worker</a></code>, <code><a href="prefork.html">prefork</a></code></td></tr></table></td></tr></table><usage>
-    <p>The <code class="directive">MaxClients</code> directive sets the limit
-    on the number of child processes that will be created to serve
-    requests. When the server is built without threading, no more than
-    this number of clients can be served simultaneously. To configure
-    more than 256 clients with the prefork MPM, you must use the
-    <a href="#serverlimit" class="directive"><code class="directive">ServerLimit</code></a> directive.
-    To configure more than 1024 clients with the worker MPM, you must
-    use the <a href="#serverlimit" class="directive"><code class="directive">ServerLimit</code></a> and
-    <a href="#threadlimit" class="directive"><code class="directive">ThreadLimit</code></a> directives.</p>
-
-    <p>Any connection attempts over the
-    <code class="directive">MaxClients</code> limit will normally be queued,
-    up to a number based on the <a href="#listenbacklog" class="directive"><code class="directive">ListenBacklog</code></a> directive. Once a child
-    process is freed at the end of a different request, the connection
-    will then be serviced.</p>
-
-    <p>When the server is compiled with threading, then the maximum
-    number of simultaneous requests that can be served is obtained
-    from the value of this directive multiplied by
-    <a href="#threadsperchild" class="directive"><code class="directive">ThreadsPerChild</code></a>.</p>
-</usage><hr/><h2><a name="MaxRequestsPerChild">MaxRequestsPerChild</a> <a name="maxrequestsperchild">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Limit on the number of requests that an individual child server
-will handle during its life</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>MaxRequestsPerChild <em>number</em></syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>MaxRequestsPerChild 10000</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>MPM</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td><code><a href="worker.html">worker</a></code>, <code><a href="perchild.html">perchild</a></code>, <code><a href="prefork.html">prefork</a></code>, <code><a href="mpm_winnt.html">mpm_winnt</a></code></td></tr></table></td></tr></table><usage>
-    <p>The <code class="directive">MaxRequestsPerChild</code> directive sets
-    the limit on the number of requests that an individual child
-    server process will handle. After
-    <code class="directive">MaxRequestsPerChild</code> requests, the child
-    process will die. If <code class="directive">MaxRequestsPerChild</code> is
-    0, then the process will never expire.</p>
-
-    <p>Setting <code class="directive">MaxRequestsPerChild</code> to a
-    non-zero limit has two beneficial effects:</p>
-
-    <ul>
-      <li>it limits the amount of memory that process can consume
-      by (accidental) memory leakage;</li>
-
-      <li>by giving processes a finite lifetime, it helps reduce
-      the number of processes when the server load reduces.</li>
-    </ul>
-
-    <p><strong>NOTE:</strong> For <em>KeepAlive</em> requests, only
-    the first request is counted towards this limit. In effect, it
-    changes the behavior to limit the number of
-    <em>connections</em> per child.</p>
-</usage><hr/><h2><a name="MaxSpareThreads">MaxSpareThreads</a> <a name="maxsparethreads">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Maximum number of idle threads</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>MaxSpareThreads <em>number</em></syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>MaxSpareThreads 10 (Perchild) or 500 (worker)</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>MPM</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td><code><a href="worker.html">worker</a></code>, <code><a href="perchild.html">perchild</a></code></td></tr></table></td></tr></table><usage>
-    <p>Maximum number of idle threads. Different MPMs deal with this
-    directive differently. <code><a href="perchild.html">perchild</a></code> monitors the
-    number of idle threads on a per-child basis. If there are too many
-    idle threads in that child, the server will begin to kill threads
-    within that child.</p>
-
-    <p><code><a href="worker.html">worker</a></code> deals with idle threads on a
-    server-wide basis. If there are too many idle threads in the
-    server then child processes are killed until the number of idle
-    threads is less than this number.</p>
-
-</usage><p><strong>See also </strong></p><ul><li><a href="#minsparethreads" class="directive"><code class="directive">MinSpareThreads</code></a></li><li><a href="#startservers" class="directive"><code class="directive">StartServers</code></a></li></ul><hr/><h2><a name="MaxThreadsPerChild">MaxThreadsPerChild</a> <a name="maxthreadsperchild">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Maximum number of threads per child process</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>MaxThreadsPerChild <em>number</em></syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>MaxThreadsPerChild 64</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>MPM</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td><code><a href="worker.html">worker</a></code>, <code><a href="perchild.html">perchild</a></code></td></tr></table></td></tr></table><usage>
-    <p>Maximum number of threads per child. For MPMs with a
-    variable number of threads per child, this directive sets the
-    maximum number of threads that will be created in each child
-    process. To increase this value beyond its default, it is
-    necessary to change the value of the compile-time define
-    <code>HARD_THREAD_LIMIT</code> and recompile the server.</p>
-</usage><hr/><h2><a name="MinSpareThreads">MinSpareThreads</a> <a name="minsparethreads">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Minimum number of idle threads available to handle request
-spikes</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>MinSpareServers <em>number</em></syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>MinSpareThreads 5 (Perchild) or 250 (worker)</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>MPM</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td><code><a href="worker.html">worker</a></code>, <code><a href="perchild.html">perchild</a></code></td></tr></table></td></tr></table><usage>
-    <p>Minimum number of idle threads to handle request spikes.
-    Different MPMs deal with this directive
-    differently. <code><a href="perchild.html">perchild</a></code> monitors the number of idle
-    threads on a per-child basis. If there aren't enough idle threads
-    in that child, the server will begin to create new threads within
-    that child.</p>
-
-    <p><code><a href="worker.html">worker</a></code> deals with idle threads on a
-    server-wide basis. If there aren't enough idle threads in the
-    server then child processes are created until the number of idle
-    threads is greater than number.</p>
-</usage><p><strong>See also </strong></p><ul><li><a href="#maxsparethreads" class="directive"><code class="directive">MaxSpareThreads</code></a></li><li><a href="#startservers" class="directive"><code class="directive">StartServers</code></a></li></ul><hr/><h2><a name="NumServers">NumServers</a> <a name="numservers">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Total number of children alive at the same time</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>NumServers <em>number</em></syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>NumServers 2</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>MPM</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td><code><a href="perchild.html">perchild</a></code></td></tr></table></td></tr></table><usage>
-    <p>Number of children alive at the same time. MPMs that use
-    this directive do not dynamically create new child processes so
-    this number should be large enough to handle the requests for
-    the entire site.</p>
-</usage><hr/><h2><a name="PidFile">PidFile</a> <a name="pidfile">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sets the file where the server records the process ID
-of the daemon</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>PidFile <em>filename</em></syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>PidFile logs/httpd.pid</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>MPM</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td><code><a href="worker.html">worker</a></code>, <code><a href="perchilde.html">perchilde</a></code>, <code><a href="prefork.html">prefork</a></code>, <code><a href="mpm_winnt.html">mpm_winnt</a></code></td></tr></table></td></tr></table><usage>
-    <p>The <code class="directive">PidFile</code> directive sets the file to
-    which the server records the process id of the daemon. If the
-    filename does not begin with a slash (/) then it is assumed to be
-    relative to the <a href="core.html#serverroot" class="directive"><code class="directive">ServerRoot</code></a>.</p>
-
-    <p>It is often useful to be able to send the server a signal,
-    so that it closes and then reopens its <a href="core.html#errorlog" class="directive"><code class="directive">ErrorLog</code></a> and TransferLog, and
-    re-reads its configuration files. This is done by sending a
-    SIGHUP (kill -1) signal to the process id listed in the
-    PidFile.</p>
-
-    <p>The PidFile is subject to the same warnings about log file
-    placement and <a href="../misc/security_tips.html#serverroot">security</a>.</p>
-</usage><hr/><h2><a name="ScoreBoardFile">ScoreBoardFile</a> <a name="scoreboardfile">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Location of the file used to store coordination data for
-the child processes</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>ScoreBoardFile <em>file-path</em></syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>ScoreBoardFile logs/apache_status</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>MPM</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td><code><a href="worker.html">worker</a></code>, <code><a href="perchild.html">perchild</a></code>, <code><a href="prefork.html">prefork</a></code></td></tr></table></td></tr></table><usage>
-    <p>The <code class="directive">ScoreBoardFile</code> directive is required
-    on some architectures to place a file that the server will use to
-    communicate between its children and the parent. The easiest way
-    to find out if your architecture requires a scoreboard file is to
-    run Apache and see if it creates the file named by the
-    directive. If your architecture requires it then you must ensure
-    that this file is not used at the same time by more than one
-    invocation of Apache.</p>
-
-    <p>If you have to use a <code class="directive">ScoreBoardFile</code> then
-    you may see improved speed by placing it on a RAM disk. But be
-    careful that you heed the same warnings about log file placement
-    and <a href="../misc/security_tips.html">security</a>.</p>
-</usage><p><strong>See also </strong></p><ul><li><a href="../stopping.html">Stopping and Restarting Apache</a></li></ul><hr/><h2><a name="SendBufferSize">SendBufferSize</a> <a name="sendbuffersize">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>TCP buffer size</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>SendBufferSize <em>bytes</em></syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>MPM</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td><code><a href="worker.html">worker</a></code>, <code><a href="perchild.html">perchild</a></code>, <code><a href="prefork.html">prefork</a></code>, <code><a href="mpm_winnt.html">mpm_winnt</a></code></td></tr></table></td></tr></table><usage>
-    <p>The server will set the TCP buffer size to the number of bytes
-    specified. Very useful to increase past standard OS defaults on
-    high speed high latency (<em>i.e.</em>, 100ms or so, such as
-    transcontinental fast pipes).</p>
-</usage><hr/><h2><a name="ServerLimit">ServerLimit</a> <a name="serverlimit">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Upper limit on configurable number of processes</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>ServerLimit <em>number</em></syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>ServerLimit 256 (prefork), ServerLimit 16 (worker)</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>MPM</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td><code><a href="worker.html">worker</a></code>, <code><a href="prefork.html">prefork</a></code></td></tr></table></td></tr></table><usage>
-    <p>For the <code><a href="prefork.html">prefork</a></code> MPM, this directive sets the
-    maximum configured value for <a href="#maxclients" class="directive"><code class="directive">MaxClients</code></a> for the lifetime of the
-    Apache process.  For the worker MPM, this directive in combination
-    with <a href="#threadlimit" class="directive"><code class="directive">ThreadLimit</code></a> sets
-    the maximum configured value for <a href="#maxclients" class="directive"><code class="directive">MaxClients</code></a> for the lifetime of the
-    Apache process.  Any attempts to change this directive during a
-    restart will be ignored, but <a href="#maxclients" class="directive"><code class="directive">MaxClients</code></a> can be modified during
-    a restart.</p>
-
-    <p>Special care must be taken when using this directive.  If
-    <code class="directive">ServerLimit</code> is set to a value much higher
-    than necessary, extra, unused shared memory will be allocated.  If
-    both <code class="directive">ServerLimit</code> and <a href="#maxclients" class="directive"><code class="directive">MaxClients</code></a> are set to values
-    higher than the system can handle, Apache may not start or the
-    system may become unstable.</p>
-
-    <p>With the <code><a href="prefork.html">prefork</a></code> MPM, use this directive only
-    if you need to set <a href="#maxclients" class="directive"><code class="directive">MaxClients</code></a> higher higher than 256.
-    Do not set the value of this directive any higher than what you
-    might want to set <a href="#maxclients" class="directive"><code class="directive">MaxClients</code></a> to.</p>
-
-    <p>With the <code><a href="worker.html">worker</a></code> MPM, use this directive only
-    if your <a href="#maxclients" class="directive"><code class="directive">MaxClients</code></a> and
-    <a href="#threadsperchild" class="directive"><code class="directive">ThreadsPerChild</code></a>
-    settings require more than 16 server processes.  Do not set the
-    value of this directive any higher than the number of server
-    processes required by what you may want for <a href="#maxclients " class="directive"><code class="directive">MaxClients </code></a> and <a href="#threadsperchild" class="directive"><code class="directive">ThreadsPerChild</code></a>.</p>
-</usage><hr/><h2><a name="StartServers">StartServers</a> <a name="startservers">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Number of child server processes created at startup</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>StartServers <em>number</em></syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>StartServers 5</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>MPM</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td><code><a href="worker.html">worker</a></code></td></tr></table></td></tr></table><usage>
-    <p>The <code class="directive">StartServers</code> directive sets the
-    number of child server processes created on startup. As the number
-    of processes is dynamically controlled depending on the load,
-    there is usually little reason to adjust this parameter.</p>
-</usage><p><strong>See also </strong></p><ul><li><a href="#minsparethreads" class="directive"><code class="directive">MinSpareThreads</code></a></li><li><a href="#maxsparethreads" class="directive"><code class="directive">MaxSpareThreads</code></a></li></ul><hr/><h2><a name="StartThreads">StartThreads</a> <a name="startthreads">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Nubmer of threads each child creates on startup</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>StartThreads <em>number</em></syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>StartThreads 5</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>MPM</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td><code><a href="perchild.html">perchild</a></code></td></tr></table></td></tr></table><usage>
-    <p>Number of threads each child creates on startup. As the
-    number of threads is dynamically controlled depending on the
-    load, there is usually little reason to adjust this
-    parameter.</p>
-</usage><hr/><h2><a name="ThreadLimit">ThreadLimit</a> <a name="threadlimit">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sets the upper limit on the configurable number of threads
-per child process</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>ThreadLimit <em>number</em></syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>ThreadLimit 64</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>MPM</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td><code><a href="worker.html">worker</a></code></td></tr></table></td></tr></table><usage>
-    <p>This directive sets the maximum configured value for <a href="#threadsperchild" class="directive"><code class="directive">ThreadsPerChild</code></a> for the lifetime
-    of the Apache process.  Any attempts to change this directive
-    during a restart will be ignored, but <a href="#threadsperchild" class="directive"><code class="directive">ThreadsPerChild</code></a> can be modified
-    during a restart up to the value of this directive.</p>
-
-    <p>Special care must be taken when using this directive.  If
-    <code class="directive">ThreadLimit</code> is set to a value much higher
-    than <a href="#threadsperchild" class="directive"><code class="directive">ThreadsPerChild</code></a>,
-    extra unused shared memory will be allocated.  If both
-    <code class="directive">ThreadLimit</code> and <a href="#threadsperchild" class="directive"><code class="directive">ThreadsPerChild</code></a> are set to values
-    higher than the system can handle, Apache may not start or the
-    system may become unstable.</p>
-
-    <p>Use this directive only if you need to set <a href="#threadsperchild" class="directive"><code class="directive">ThreadsPerChild</code></a> higher than 64.  Do
-    not set the value of this directive any higher than what you might
-    want to set <a href="#threadsperchild" class="directive"><code class="directive">ThreadsPerChild</code></a> to.</p>
-</usage><hr/><h2><a name="ThreadsPerChild">ThreadsPerChild</a> <a name="threadsperchild">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Number of threads created by each child process</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>ThreadsPerChild <em>number</em></syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>ThreadsPerChild 50</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>MPM</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td><code><a href="worker.html">worker</a></code>, <code><a href="mpm_winnt.html">mpm_winnt</a></code></td></tr></table></td></tr></table><usage>
-    <p>This directive sets the number of threads created by each
-    child process. The child creates these threads at startup and
-    never creates more. if using an MPM like mpmt_winnt, where
-    there is only one child process, this number should be high
-    enough to handle the entire load of the server. If using an MPM
-    like worker, where there are multiple child processes, the
-    total number of threads should be high enough to handle the
-    common load on the server.</p>
-</usage><hr/><h2><a name="User">User</a> <a name="user">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>The userid under which the server will answer
-requests</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>User <em>unix-userid</em></syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>User #-1</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>MPM</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td><code><a href="worker.html">worker</a></code>, <code><a href="perchild.html">perchild</a></code>, <code><a href="prefork.html">prefork</a></code></td></tr></table></td></tr></table><usage>
-    <p>The <code class="directive">User</code> directive sets the userid as
-    which the server will answer requests. In order to use this
-    directive, the standalone server must be run initially as
-    root. <em>Unix-userid</em> is one of:</p>
-
-    <dl>
-      <dt>A username</dt>
-
-      <dd>Refers to the given user by name.</dd>
-
-      <dt># followed by a user number.</dt>
-
-      <dd>Refers to a user by their number.</dd>
-    </dl>
-
-    <p>The user should have no privileges which result in it being
-    able to access files which are not intended to be visible to the
-    outside world, and similarly, the user should not be able to
-    execute code which is not meant for httpd requests. It is
-    recommended that you set up a new user and group specifically for
-    running the server. Some admins use user <code>nobody</code>, but
-    this is not always possible or desirable. For example
-    <code><a href="mod_proxy.html">mod_proxy</a></code>'s cache, when enabled, must be
-    accessible to this user (see <a href="mod_proxy.html#cacheroot" class="directive"><code class="directive">CacheRoot</code></a>).</p>
-
-    <p>Notes: If you start the server as a non-root user, it will
-    fail to change to the lesser privileged user, and will instead
-    continue to run as that original user. If you do start the
-    server as root, then it is normal for the parent process to
-    remain running as root.</p>
-
-    <p>Special note: Use of this directive in <a href="core.html#virtualhost" class="directive"><code class="directive">&lt;VirtualHost&gt;</code></a> is no longer supported. To
-    configure your server for <a href="mod_suexec.html">suexec</a> use
-    <a href="mod_suexec.html#suexecusergroup" class="directive"><code class="directive">SuexecUserGroup</code></a>.</p>
-
-<blockquote><table><tr><td bgcolor="#e0e5f5"><p align="center"><strong>Security</strong></p> <p>Don't set <code class="directive">User</code>
-(or <a href="#group" class="directive"><code class="directive">Group</code></a>) to
-<code>root</code> unless you know exactly what you are doing, and what
-the dangers are.</p></td></tr></table></blockquote>
-</usage><hr/><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img alt="Index" src="../images/index.gif"/></a><a href="../"><img alt="Home" src="../images/home.gif"/></a></blockquote></body></html>
\ No newline at end of file
diff --git a/docs/manual/mod/mpm_common.xml b/docs/manual/mod/mpm_common.xml
deleted file mode 100644
index 3cce707..0000000
--- a/docs/manual/mod/mpm_common.xml
+++ /dev/null
@@ -1,614 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.xsl"?>
-<modulesynopsis>
-
-<name>mpm_common</name>
-<description>A collection of directives that are implemented by
-more than one multi-processing module (MPM)</description>
-<status>MPM</status>
-
-<directivesynopsis>
-<name>CoreDumpDirectory</name>
-<description>Sets the directory where Apache attempts to
-switch before dumping core</description>
-<syntax>CoreDumpDirectory <em>directory</em></syntax>
-<default>See usage for the default setting</default>
-<contextlist><context>server config</context></contextlist>
-<modulelist><module>worker</module><module>perchild</module>
-<module>prefork</module><module>mpm_winnt</module>
-</modulelist>
-
-<usage>
-
-    <p>This controls the directory to which Apache attempts to
-    switch before dumping core. The default is in the 
-    <directive module="core">ServerRoot</directive> directory, however
-    since this should not be writable by the user the server runs
-    as, core dumps won't normally get written. If you want a core
-    dump for debugging, you can use this directive to place it in a
-    different location.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>Group</name>
-<description>Sets the group under which the server will answer
-requests</description>
-<syntax>Group <em>unix-group</em></syntax>
-<default>Group #-1</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-<modulelist><module>worker</module><module>perchild</module>
-<module>prefork</module></modulelist>
-
-<usage>
-    <p>The <directive>Group</directive> directive sets the group under
-    which the server will answer requests. In order to use this
-    directive, the stand-alone server must be run initially as root.
-    <em>Unix-group</em> is one of:</p>
-
-    <dl>
-      <dt>A group name</dt>
-
-      <dd>Refers to the given group by name.</dd>
-
-      <dt># followed by a group number.</dt>
-
-      <dd>Refers to a group by its number.</dd>
-    </dl>
-    <p>It is recommended that you set up a new group specifically for
-    running the server. Some admins use user <code>nobody</code>,
-    but this is not always possible or desirable.</p>
-
-    <p>Note: if you start the server as a non-root user, it will
-    fail to change to the specified group, and will instead
-    continue to run as the group of the original user.</p>
-
-    <p>Special note: Use of this directive in &lt;VirtualHost&lt; is
-    no longer supported. To implement the <a
-    href="../suexec.html">suEXEC wrapper</a> with Apache 2.0, use the
-    <directive module="mod_suexec">SuexecUserGroup</directive>
-    directive. SECURITY: See <directive
-    module="mpm_common">User</directive> for a discussion of the
-    security considerations.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>PidFile</name>
-<description>Sets the file where the server records the process ID
-of the daemon</description>
-<syntax>PidFile <em>filename</em></syntax>
-<default>PidFile logs/httpd.pid</default>
-<contextlist><context>server config</context></contextlist>
-<modulelist><module>worker</module><module>perchilde</module>
-<module>prefork</module><module>mpm_winnt</module>
-</modulelist>
-
-<usage>
-    <p>The <directive>PidFile</directive> directive sets the file to
-    which the server records the process id of the daemon. If the
-    filename does not begin with a slash (/) then it is assumed to be
-    relative to the <directive module="core">ServerRoot</directive>.</p>
-
-    <p>It is often useful to be able to send the server a signal,
-    so that it closes and then reopens its <directive
-    module="core">ErrorLog</directive> and TransferLog, and
-    re-reads its configuration files. This is done by sending a
-    SIGHUP (kill -1) signal to the process id listed in the
-    PidFile.</p>
-
-    <p>The PidFile is subject to the same warnings about log file
-    placement and <a
-    href="../misc/security_tips.html#serverroot">security</a>.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>Listen</name>
-<description>Sets the IP addresses and ports that the server
-listens to</description>
-<syntax>Listen [<em>IP-address</em>:]<em>portnumber</em></syntax>
-<contextlist><context>server config</context></contextlist>
-<modulelist><module>worker</module><module>perchild</module>
-<module>prefork</module><module>mpm_winnt</module>
-</modulelist>
-
-<usage>
-    <p>The <directive>Listen</directive> directive instructs Apache to
-    listen to only specific IP addresses or ports; by default it
-    responds to requests on all IP interfaces. The Listen directive is
-    now a required directive. If it is not in the config file, the
-    server will fail to start. This is a change from previous versions
-    of Apache.</p>
-
-    <p>The Listen directive tells the server to accept incoming
-    requests on the specified port or address-and-port combination.
-    If only a port number is specified, the server listens to the
-    given port on all interfaces. If an IP address is given as well 
-    as a port, the server will listen on the given port and
-    interface.</p>
-
-    <p>Multiple Listen directives may be used to specify a number
-    of addresses and ports to listen to. The server will respond to
-    requests from any of the listed addresses and ports.</p>
-
-    <p>For example, to make the server accept connections on both
-    port 80 and port 8000, use:</p>
-<example>
-   Listen 80<br />
-   Listen 8000
-</example>
-    <p>To make the server accept connections on two specified
-    interfaces and port numbers, use </p>
-<example>
-   Listen 192.170.2.1:80<br />
-   Listen 192.170.2.5:8000
-</example>
-    <p>IPv6 addresses must be surrounded in square brackets, as in the
-    following example:</p>
-<example>
-   Listen [fe80::a00:20ff:fea7:ccea]:80
-</example>
-</usage>
-
-<seealso><a href="../dns-caveats.html">DNS Issues</a></seealso>
-<seealso><a href="../bind.html">Setting
-    which addresses and ports Apache uses</a></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ListenBackLog</name>
-<description>Maximum length of the queue of pending connections</description>
-<syntax>ListenBacklog <em>backlog</em></syntax>
-<default>ListenBacklog 511</default>
-<contextlist><context>server config</context></contextlist>
-<modulelist><module>worker</module><module>perchild</module>
-<module>prefork</module><module>mpm_winnt</module>
-</modulelist>
-
-<usage>
-    <p>The maximum length of the queue of pending connections.
-    Generally no tuning is needed or desired, however on some
-    systems it is desirable to increase this when under a TCP SYN
-    flood attack. See the backlog parameter to the
-    <code>listen(2)</code> system call.</p>
-
-    <p>This will often be limited to a smaller number by the
-    operating system. This varies from OS to OS. Also note that
-    many OSes do not use exactly what is specified as the backlog,
-    but use a number based on (but normally larger than) what is
-    set.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>LockFile</name>
-<description>Location of the accept serialization lock file</description>
-<syntax>LockFile <em>filename</em></syntax>
-<default>LockFile logs/accept.lock</default>
-<contextlist><context>server config</context></contextlist>
-<modulelist><module>worker</module><module>perchild</module>
-<module>prefork</module></modulelist>
-
-<usage>
-    <p>The <directive>LockFile</directive> directive sets the path to
-    the lockfile used when Apache is compiled with either
-    USE_FCNTL_SERIALIZED_ACCEPT or USE_FLOCK_SERIALIZED_ACCEPT. This
-    directive should normally be left at its default value. The main
-    reason for changing it is if the <code>logs</code> directory is
-    NFS mounted, since <strong>the lockfile must be stored on a local
-    disk</strong>.  The PID of the main server process is
-    automatically appended to the filename.</p>
-
-    <p><strong>SECURITY:</strong> It is best to avoid putting this
-    file in a world writable directory such as
-    <code>/var/tmp</code> because someone could create a denial of
-    service attack and prevent the server from starting by creating
-    a lockfile with the same name as the one the server will try to
-    create.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>MaxClients</name>
-<description>Maximum number of child processes that will be created
-to serve requests</description>
-<syntax>MaxClients <em>number</em></syntax>
-<default>>MaxClients
-    8 (with threads) MaxClients 256</default>
-<contextlist><context>server config</context></contextlist>
-<modulelist><module>worker</module><module>prefork</module>
-</modulelist>
-
-<usage>
-    <p>The <directive>MaxClients</directive> directive sets the limit
-    on the number of child processes that will be created to serve
-    requests. When the server is built without threading, no more than
-    this number of clients can be served simultaneously. To configure
-    more than 256 clients with the prefork MPM, you must use the
-    <directive module="mpm_common">ServerLimit</directive> directive.
-    To configure more than 1024 clients with the worker MPM, you must
-    use the <directive module="mpm_common">ServerLimit</directive> and
-    <directive module="mpm_common">ThreadLimit</directive> directives.</p>
-
-    <p>Any connection attempts over the
-    <directive>MaxClients</directive> limit will normally be queued,
-    up to a number based on the <directive module="mpm_common"
-    >ListenBacklog</directive> directive. Once a child
-    process is freed at the end of a different request, the connection
-    will then be serviced.</p>
-
-    <p>When the server is compiled with threading, then the maximum
-    number of simultaneous requests that can be served is obtained
-    from the value of this directive multiplied by
-    <directive module="mpm_common">ThreadsPerChild</directive>.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>MaxRequestsPerChild</name>
-<description>Limit on the number of requests that an individual child server
-will handle during its life</description>
-<syntax>MaxRequestsPerChild <em>number</em></syntax>
-<default>MaxRequestsPerChild 10000</default>
-<contextlist><context>server config</context></contextlist>
-<modulelist><module>worker</module><module>perchild</module>
-<module>prefork</module><module>mpm_winnt</module>
-</modulelist>
-
-<usage>
-    <p>The <directive>MaxRequestsPerChild</directive> directive sets
-    the limit on the number of requests that an individual child
-    server process will handle. After
-    <directive>MaxRequestsPerChild</directive> requests, the child
-    process will die. If <directive>MaxRequestsPerChild</directive> is
-    0, then the process will never expire.</p>
-
-    <p>Setting <directive>MaxRequestsPerChild</directive> to a
-    non-zero limit has two beneficial effects:</p>
-
-    <ul>
-      <li>it limits the amount of memory that process can consume
-      by (accidental) memory leakage;</li>
-
-      <li>by giving processes a finite lifetime, it helps reduce
-      the number of processes when the server load reduces.</li>
-    </ul>
-
-    <p><strong>NOTE:</strong> For <em>KeepAlive</em> requests, only
-    the first request is counted towards this limit. In effect, it
-    changes the behavior to limit the number of
-    <em>connections</em> per child.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>MaxSpareThreads</name>
-<description>Maximum number of idle threads</description>
-<syntax>MaxSpareThreads <em>number</em></syntax>
-<default>MaxSpareThreads 10 (Perchild) or 500 (worker)</default>
-<contextlist><context>server config</context></contextlist>
-<modulelist><module>worker</module><module>perchild</module>
-</modulelist>
-
-<usage>
-    <p>Maximum number of idle threads. Different MPMs deal with this
-    directive differently. <module>perchild</module> monitors the
-    number of idle threads on a per-child basis. If there are too many
-    idle threads in that child, the server will begin to kill threads
-    within that child.</p>
-
-    <p><module>worker</module> deals with idle threads on a
-    server-wide basis. If there are too many idle threads in the
-    server then child processes are killed until the number of idle
-    threads is less than this number.</p>
-
-</usage>
-<seealso><directive module="mpm_common">MinSpareThreads</directive></seealso>
-<seealso><directive module="mpm_common">StartServers</directive></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>MaxThreadsPerChild</name>
-<description>Maximum number of threads per child process</description>
-<syntax>MaxThreadsPerChild <em>number</em></syntax>
-<default>MaxThreadsPerChild 64</default>
-<contextlist><context>server config</context></contextlist>
-<modulelist><module>worker</module><module>perchild</module>
-</modulelist>
-
-<usage>
-    <p>Maximum number of threads per child. For MPMs with a
-    variable number of threads per child, this directive sets the
-    maximum number of threads that will be created in each child
-    process. To increase this value beyond its default, it is
-    necessary to change the value of the compile-time define
-    <code>HARD_THREAD_LIMIT</code> and recompile the server.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>MinSpareThreads</name>
-<description>Minimum number of idle threads available to handle request
-spikes</description>
-<syntax>MinSpareServers <em>number</em></syntax>
-<default>MinSpareThreads 5 (Perchild) or 250 (worker)</default>
-<contextlist><context>server config</context></contextlist>
-<modulelist><module>worker</module><module>perchild</module>
-</modulelist>
-
-<usage>
-    <p>Minimum number of idle threads to handle request spikes.
-    Different MPMs deal with this directive
-    differently. <module>perchild</module> monitors the number of idle
-    threads on a per-child basis. If there aren't enough idle threads
-    in that child, the server will begin to create new threads within
-    that child.</p>
-
-    <p><module>worker</module> deals with idle threads on a
-    server-wide basis. If there aren't enough idle threads in the
-    server then child processes are created until the number of idle
-    threads is greater than number.</p>
-</usage>
-<seealso><directive module="mpm_common">MaxSpareThreads</directive></seealso>
-<seealso><directive module="mpm_common">StartServers</directive></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>NumServers</name>
-<description>Total number of children alive at the same time</description>
-<syntax>NumServers <em>number</em></syntax>
-<default>NumServers 2</default>
-<contextlist><context>server config</context></contextlist>
-<modulelist><module>perchild</module></modulelist>
-
-<usage>
-    <p>Number of children alive at the same time. MPMs that use
-    this directive do not dynamically create new child processes so
-    this number should be large enough to handle the requests for
-    the entire site.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ScoreBoardFile</name>
-<description>Location of the file used to store coordination data for
-the child processes</description>
-<syntax>ScoreBoardFile <em>file-path</em></syntax>
-<default>ScoreBoardFile logs/apache_status</default>
-<contextlist><context>server config</context></contextlist>
-<modulelist><module>worker</module><module>perchild</module>
-<module>prefork</module></modulelist>
-
-<usage>
-    <p>The <directive>ScoreBoardFile</directive> directive is required
-    on some architectures to place a file that the server will use to
-    communicate between its children and the parent. The easiest way
-    to find out if your architecture requires a scoreboard file is to
-    run Apache and see if it creates the file named by the
-    directive. If your architecture requires it then you must ensure
-    that this file is not used at the same time by more than one
-    invocation of Apache.</p>
-
-    <p>If you have to use a <directive>ScoreBoardFile</directive> then
-    you may see improved speed by placing it on a RAM disk. But be
-    careful that you heed the same warnings about log file placement
-    and <a href="../misc/security_tips.html">security</a>.</p>
-</usage>
-<seealso><a
-    href="../stopping.html">Stopping and Restarting Apache</a></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>SendBufferSize</name>
-<description>TCP buffer size</description>
-<syntax>SendBufferSize <em>bytes</em></syntax>
-<contextlist><context>server config</context></contextlist>
-<modulelist><module>worker</module><module>perchild</module>
-<module>prefork</module><module>mpm_winnt</module>
-</modulelist>
-
-<usage>
-    <p>The server will set the TCP buffer size to the number of bytes
-    specified. Very useful to increase past standard OS defaults on
-    high speed high latency (<em>i.e.</em>, 100ms or so, such as
-    transcontinental fast pipes).</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ServerLimit</name>
-<description>Upper limit on configurable number of processes</description>
-<syntax>ServerLimit <em>number</em></syntax>
-<default>ServerLimit 256 (prefork), ServerLimit 16 (worker)</default>
-<contextlist><context>server config</context></contextlist>
-<modulelist><module>worker</module><module>prefork</module>
-</modulelist>
-
-<usage>
-    <p>For the <module>prefork</module> MPM, this directive sets the
-    maximum configured value for <directive
-    module="mpm_common">MaxClients</directive> for the lifetime of the
-    Apache process.  For the worker MPM, this directive in combination
-    with <directive module="mpm_common">ThreadLimit</directive> sets
-    the maximum configured value for <directive
-    module="mpm_common">MaxClients</directive> for the lifetime of the
-    Apache process.  Any attempts to change this directive during a
-    restart will be ignored, but <directive
-    module="mpm_common">MaxClients</directive> can be modified during
-    a restart.</p>
-
-    <p>Special care must be taken when using this directive.  If
-    <directive>ServerLimit</directive> is set to a value much higher
-    than necessary, extra, unused shared memory will be allocated.  If
-    both <directive>ServerLimit</directive> and <directive
-    module="mpm_common">MaxClients</directive> are set to values
-    higher than the system can handle, Apache may not start or the
-    system may become unstable.</p>
-
-    <p>With the <module>prefork</module> MPM, use this directive only
-    if you need to set <directive
-    module="mpm_common">MaxClients</directive> higher higher than 256.
-    Do not set the value of this directive any higher than what you
-    might want to set <directive
-    module="mpm_common">MaxClients</directive> to.</p>
-
-    <p>With the <module>worker</module> MPM, use this directive only
-    if your <directive module="mpm_common">MaxClients</directive> and
-    <directive module="mpm_common">ThreadsPerChild</directive>
-    settings require more than 16 server processes.  Do not set the
-    value of this directive any higher than the number of server
-    processes required by what you may want for <directive
-    module="mpm_common">MaxClients </directive> and <directive
-    module="mpm_common">ThreadsPerChild</directive>.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>StartServers</name>
-<description>Number of child server processes created at startup</description>
-<syntax>StartServers <em>number</em></syntax>
-<default>StartServers 5</default>
-<contextlist><context>server config</context></contextlist>
-<modulelist><module>worker</module></modulelist>
-
-<usage>
-    <p>The <directive>StartServers</directive> directive sets the
-    number of child server processes created on startup. As the number
-    of processes is dynamically controlled depending on the load,
-    there is usually little reason to adjust this parameter.</p>
-</usage>
-<seealso><directive module="mpm_common">MinSpareThreads</directive></seealso>
-<seealso><directive module="mpm_common">MaxSpareThreads</directive></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>StartThreads</name>
-<description>Nubmer of threads each child creates on startup</description>
-<syntax>StartThreads <em>number</em></syntax>
-<default>StartThreads 5</default>
-<contextlist><context>server config</context></contextlist>
-<modulelist><module>perchild</module></modulelist>
-
-<usage>
-    <p>Number of threads each child creates on startup. As the
-    number of threads is dynamically controlled depending on the
-    load, there is usually little reason to adjust this
-    parameter.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ThreadLimit</name>
-<description>Sets the upper limit on the configurable number of threads
-per child process</description>
-<syntax>ThreadLimit <em>number</em></syntax>
-<default>ThreadLimit 64</default>
-<contextlist><context>server config</context></contextlist>
-<modulelist><module>worker</module></modulelist>
-
-<usage>
-    <p>This directive sets the maximum configured value for <directive
-    module="mpm_common">ThreadsPerChild</directive> for the lifetime
-    of the Apache process.  Any attempts to change this directive
-    during a restart will be ignored, but <directive
-    module="mpm_common">ThreadsPerChild</directive> can be modified
-    during a restart up to the value of this directive.</p>
-
-    <p>Special care must be taken when using this directive.  If
-    <directive>ThreadLimit</directive> is set to a value much higher
-    than <directive module="mpm_common">ThreadsPerChild</directive>,
-    extra unused shared memory will be allocated.  If both
-    <directive>ThreadLimit</directive> and <directive
-    module="mpm_common">ThreadsPerChild</directive> are set to values
-    higher than the system can handle, Apache may not start or the
-    system may become unstable.</p>
-
-    <p>Use this directive only if you need to set <directive
-    module="mpm_common">ThreadsPerChild</directive> higher than 64.  Do
-    not set the value of this directive any higher than what you might
-    want to set <directive
-    module="mpm_common">ThreadsPerChild</directive> to.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ThreadsPerChild</name>
-<description>Number of threads created by each child process</description>
-<syntax>ThreadsPerChild <em>number</em></syntax>
-<default>ThreadsPerChild 50</default>
-<contextlist><context>server config</context></contextlist>
-<modulelist><module>worker</module><module>mpm_winnt</module>
-</modulelist>
-
-<usage>
-    <p>This directive sets the number of threads created by each
-    child process. The child creates these threads at startup and
-    never creates more. if using an MPM like mpmt_winnt, where
-    there is only one child process, this number should be high
-    enough to handle the entire load of the server. If using an MPM
-    like worker, where there are multiple child processes, the
-    total number of threads should be high enough to handle the
-    common load on the server.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>User</name>
-<description>The userid under which the server will answer
-requests</description>
-<syntax>User <em>unix-userid</em></syntax>
-<default>User #-1</default>
-<contextlist><context>server config</context><context>virtual host</context>
-</contextlist>
-<modulelist><module>worker</module><module>perchild</module>
-<module>prefork</module></modulelist>
-
-<usage>
-    <p>The <directive>User</directive> directive sets the userid as
-    which the server will answer requests. In order to use this
-    directive, the standalone server must be run initially as
-    root. <em>Unix-userid</em> is one of:</p>
-
-    <dl>
-      <dt>A username</dt>
-
-      <dd>Refers to the given user by name.</dd>
-
-      <dt># followed by a user number.</dt>
-
-      <dd>Refers to a user by their number.</dd>
-    </dl>
-
-    <p>The user should have no privileges which result in it being
-    able to access files which are not intended to be visible to the
-    outside world, and similarly, the user should not be able to
-    execute code which is not meant for httpd requests. It is
-    recommended that you set up a new user and group specifically for
-    running the server. Some admins use user <code>nobody</code>, but
-    this is not always possible or desirable. For example
-    <module>mod_proxy</module>'s cache, when enabled, must be
-    accessible to this user (see <directive
-    module="mod_proxy">CacheRoot</directive>).</p>
-
-    <p>Notes: If you start the server as a non-root user, it will
-    fail to change to the lesser privileged user, and will instead
-    continue to run as that original user. If you do start the
-    server as root, then it is normal for the parent process to
-    remain running as root.</p>
-
-    <p>Special note: Use of this directive in <directive module="core"
-    type="section">VirtualHost</directive> is no longer supported. To
-    configure your server for <a href="mod_suexec.html">suexec</a> use
-    <directive module="mod_suexec">SuexecUserGroup</directive>.</p>
-
-<note><title>Security</title> <p>Don't set <directive>User</directive>
-(or <directive module="mpm_common">Group</directive>) to
-<code>root</code> unless you know exactly what you are doing, and what
-the dangers are.</p></note>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
\ No newline at end of file
diff --git a/docs/manual/mod/mpm_netware.html b/docs/manual/mod/mpm_netware.html
deleted file mode 100644
index 4e1ad7a..0000000
--- a/docs/manual/mod/mpm_netware.html
+++ /dev/null
@@ -1,68 +0,0 @@
-<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-     This file is generated from xml source: DO NOT EDIT
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
---><title>mpm_netware - Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img alt="[APACHE DOCUMENTATION]" src="../images/sub.gif"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module mpm_netware</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td><description>Multi-Processing Module implementing an exclusively threaded web
-    server optimized for Novell NetWare</description></td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>MPM</td></tr><tr><td><a href="module-dict.html#ModuleIdentifier" class="help">Module&nbsp;Identifier:</a></td><td>mpm_netware_module</td></tr></table></td></tr></table><h2>Summary</h2><summary>
-    <p>This Multi-Processing Module (MPM) implements an exclusively threaded web server
-    that has been optimized for Novell NetWare.</p>
-
-    <p>The main thread is responsible for launching child
-    worker threads which listen for connections and serve them when they
-    arrive. Apache always tries to maintain several <em>spare</em>
-    or idle worker threads, which stand ready to serve incoming
-    requests. In this way, clients do not need to wait for a new
-    child threads to be spawned before their requests can be
-    served.</p>
-
-    <p>The <code>StartThreads</code>, <code>MinSpareThreads</code>,
-    <code>MaxSpareThreads</code>, and <code>MaxThreads</code>
-    regulate how the main thread creates worker threads to serve
-    requests. In general, Apache is very self-regulating, so most
-    sites do not need to adjust these directives from their default
-    values. Sites which need to serve more than 250 simultaneous
-    requests may need to increase <code>MaxThreads</code>, while
-    sites with limited memory may need to decrease
-    <code>MaxThreads</code> to keep the server from thrashing (spawning and
-    terminating idle threads). More information about
-    tuning process creation is provided in the <a href="../misc/perf-tuning.html">performance hints</a>
-    documentation.</p>
-
-    <p><code>MaxRequestsPerChild</code> controls how frequently the
-    server recycles processes by killing old ones and launching new
-    ones.&nbsp; On the NetWare OS it is highly recommended that this directive
-    remain set to 0.&nbsp; This allows worker threads to continue servicing
-    requests indefinitely.</p>
-
-    <p>See also: <a href="../bind.html">Setting which addresses and
-    ports Apache uses</a>.</p>
-</summary><h2>Directives</h2><ul><li><a href="mpm_common.html#listen">Listen</a></li><li><a href="mpm_common.html#listenbacklog">ListenBacklog</a></li><li><a href="mpm_common.html#maxrequestsperchild">MaxRequestsPerChild</a></li><li><a href="#maxsparethreads">MaxSpareThreads</a></li><li><a href="#maxthreads">MaxThreads</a></li><li><a href="#minsparethreads">MinSpareThreads</a></li><li><a href="mpm_common.html#sendbuffersize">SendBufferSize</a></li><li><a href="#startthreads">StartThreads</a></li><li><a href="#threadstacksize">ThreadStackSize</a></li></ul><hr/><h2><a name="MaxSpareThreads">MaxSpareThreads</a> <a name="maxsparethreads">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td/></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>MaxSpareThreads <em>number</em></syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>MaxSpareThreads 100</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>MPM</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mpm_netware</td></tr></table></td></tr></table><usage>
-    <p>The <code class="directive">MaxSpareThreads</code> directive sets the
-    desired maximum number of <em>idle</em> worker threads. An idle
-    worker thread is one which is not handling a request. If there are
-    more than MaxSpareThreads idle, then the main thread will kill off
-    the excess worker threads.</p>
-
-    <p>Tuning of this parameter should only be necessary on very
-    busy sites. Setting this parameter to a large number is almost
-    always a bad idea.</p>
-</usage><hr/><h2><a name="MaxThreads">MaxThreads</a> <a name="maxthreads">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td/></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>MaxThreads <em>number</em></syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>MaxThreads 250</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>MPM</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mpm_netware</td></tr></table></td></tr></table><usage>
-<p>The MaxThreads directive sets the desired maximum
-    number worker threads allowable.</p>
-</usage><hr/><h2><a name="MinSpareThreads">MinSpareThreads</a> <a name="minsparethreads">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td/></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>MinSpareThreads <em>number</em></syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>MinSpareThreads 10</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>MPM</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mpm_netware</td></tr></table></td></tr></table><usage>
-<p>The <code class="directive">MinSpareThreads</code> directive sets the
-desired minimum number of <em>idle</em> worker threads. An idle worker
-thread is one which is not handling a request. If there are fewer than
-MinSpareThreads idle, then the main thread spawns new worker.</p>
-
-    <p>Tuning of this parameter should only be necessary on very
-    busy sites. Setting this parameter to a large number is almost
-    always a bad idea.</p>
-</usage><hr/><h2><a name="StartThreads">StartThreads</a> <a name="startthreads">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td/></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>StartThreads <em>number</em></syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>StartThreads 50</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>MPM</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mpm_netware</td></tr></table></td></tr></table><usage>
-<p>The StartThreads directive sets the desired
-    number of worker threads to spawn and startup</p>
-</usage><hr/><h2><a name="ThreadStackSize">ThreadStackSize</a> <a name="threadstacksize">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td/></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>ThreadStackSize <em>number</em></syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>ThreadStackSize 65536</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>MPM</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mpm_netware</td></tr></table></td></tr></table><usage>
-    <p>This directive tells the server what stack size to use for
-    each of the running threads. If you ever get a stack overflow
-    you will need to bump this number to a higher setting.</p>
-</usage><hr/><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img alt="Index" src="../images/index.gif"/></a><a href="../"><img alt="Home" src="../images/home.gif"/></a></blockquote></body></html>
\ No newline at end of file
diff --git a/docs/manual/mod/mpm_netware.xml b/docs/manual/mod/mpm_netware.xml
deleted file mode 100644
index e10f259..0000000
--- a/docs/manual/mod/mpm_netware.xml
+++ /dev/null
@@ -1,131 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.xsl"?>
-<modulesynopsis>
-<name>mpm_netware</name>
-<description>Multi-Processing Module implementing an exclusively threaded web
-    server optimized for Novell NetWare</description>
-<status>MPM</status>
-<sourcefile>mpm_netware.c</sourcefile>
-<identifier>mpm_netware_module</identifier>
-
-<summary>
-    <p>This Multi-Processing Module (MPM) implements an exclusively threaded web server
-    that has been optimized for Novell NetWare.</p>
-
-    <p>The main thread is responsible for launching child
-    worker threads which listen for connections and serve them when they
-    arrive. Apache always tries to maintain several <em>spare</em>
-    or idle worker threads, which stand ready to serve incoming
-    requests. In this way, clients do not need to wait for a new
-    child threads to be spawned before their requests can be
-    served.</p>
-
-    <p>The <code>StartThreads</code>, <code>MinSpareThreads</code>,
-    <code>MaxSpareThreads</code>, and <code>MaxThreads</code>
-    regulate how the main thread creates worker threads to serve
-    requests. In general, Apache is very self-regulating, so most
-    sites do not need to adjust these directives from their default
-    values. Sites which need to serve more than 250 simultaneous
-    requests may need to increase <code>MaxThreads</code>, while
-    sites with limited memory may need to decrease
-    <code>MaxThreads</code> to keep the server from thrashing (spawning and
-    terminating idle threads). More information about
-    tuning process creation is provided in the <a
-    href="../misc/perf-tuning.html">performance hints</a>
-    documentation.</p>
-
-    <p><code>MaxRequestsPerChild</code> controls how frequently the
-    server recycles processes by killing old ones and launching new
-    ones.&nbsp; On the NetWare OS it is highly recommended that this directive
-    remain set to 0.&nbsp; This allows worker threads to continue servicing
-    requests indefinitely.</p>
-
-    <p>See also: <a href="../bind.html">Setting which addresses and
-    ports Apache uses</a>.</p>
-</summary>
-
-<directivesynopsis location="mpm_common"><name>Listen</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>ListenBacklog</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>MaxRequestsPerChild</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>SendBufferSize</name>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>MaxThreads</name>
-<syntax>MaxThreads <em>number</em></syntax>
-<default>MaxThreads 250</default>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
-<p>The MaxThreads directive sets the desired maximum
-    number worker threads allowable.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>MaxSpareThreads</name>
-<syntax>MaxSpareThreads <em>number</em></syntax>
-<default>MaxSpareThreads 100</default>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
-    <p>The <directive>MaxSpareThreads</directive> directive sets the
-    desired maximum number of <em>idle</em> worker threads. An idle
-    worker thread is one which is not handling a request. If there are
-    more than MaxSpareThreads idle, then the main thread will kill off
-    the excess worker threads.</p>
-
-    <p>Tuning of this parameter should only be necessary on very
-    busy sites. Setting this parameter to a large number is almost
-    always a bad idea.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>MinSpareThreads</name>
-<syntax>MinSpareThreads <em>number</em></syntax>
-<default>MinSpareThreads 10</default>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
-<p>The <directive>MinSpareThreads</directive> directive sets the
-desired minimum number of <em>idle</em> worker threads. An idle worker
-thread is one which is not handling a request. If there are fewer than
-MinSpareThreads idle, then the main thread spawns new worker.</p>
-
-    <p>Tuning of this parameter should only be necessary on very
-    busy sites. Setting this parameter to a large number is almost
-    always a bad idea.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>StartThreads</name>
-<syntax>StartThreads <em>number</em></syntax>
-<default>StartThreads 50</default>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
-<p>The StartThreads directive sets the desired
-    number of worker threads to spawn and startup</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ThreadStackSize</name>
-<syntax>ThreadStackSize <em>number</em></syntax>
-<default>ThreadStackSize 65536</default>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
-    <p>This directive tells the server what stack size to use for
-    each of the running threads. If you ever get a stack overflow
-    you will need to bump this number to a higher setting.</p>
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
\ No newline at end of file
diff --git a/docs/manual/mod/mpm_winnt.html b/docs/manual/mod/mpm_winnt.html
deleted file mode 100644
index 618d41a..0000000
--- a/docs/manual/mod/mpm_winnt.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-     This file is generated from xml source: DO NOT EDIT
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
---><title>mpm_winnt - Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img alt="[APACHE DOCUMENTATION]" src="../images/sub.gif"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module mpm_winnt</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td><description>This Multi-Processing Module is optimized for Windows
-    NT.</description></td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>MPM</td></tr><tr><td><a href="module-dict.html#ModuleIdentifier" class="help">Module&nbsp;Identifier:</a></td><td>mpm_winnt_module</td></tr></table></td></tr></table><h2>Summary</h2><summary>
-    <p>This Multi-Processing Module (MPM) is the default for the
-    Windows NT operating systems. It uses a single control process
-    which launches a single child process which in turn creates
-    threads to handle requests</p>
-</summary><h2>Directives</h2><ul><li><a href="mpm_common.html#coredumpdirectory">CoreDumpDirectory</a></li><li><a href="mpm_common.html#listen">Listen</a></li><li><a href="mpm_common.html#listenbacklog">ListenBacklog</a></li><li><a href="mpm_common.html#maxrequestsperchild">MaxRequestsPerChild</a></li><li><a href="mpm_common.html#pidfile">PidFile</a></li><li><a href="mpm_common.html#sendbuffersize">SendBufferSize</a></li><li><a href="mpm_common.html#threadsperchild">ThreadsPerChild</a></li></ul><hr/><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img alt="Index" src="../images/index.gif"/></a><a href="../"><img alt="Home" src="../images/home.gif"/></a></blockquote></body></html>
\ No newline at end of file
diff --git a/docs/manual/mod/mpm_winnt.xml b/docs/manual/mod/mpm_winnt.xml
deleted file mode 100644
index 4e5e9c1..0000000
--- a/docs/manual/mod/mpm_winnt.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.xsl"?>
-<modulesynopsis>
-
-<name>mpm_winnt</name>
-<description>This Multi-Processing Module is optimized for Windows
-    NT.</description>
-<status>MPM</status>
-<sourcefile>mpm_winnt.c</sourcefile>
-<identifier>mpm_winnt_module</identifier>
-
-<summary>
-    <p>This Multi-Processing Module (MPM) is the default for the
-    Windows NT operating systems. It uses a single control process
-    which launches a single child process which in turn creates
-    threads to handle requests</p>
-</summary>
-
-<directivesynopsis location="mpm_common"><name>CoreDumpDirectory</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>PidFile</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>Listen</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>ListenBacklog</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>MaxRequestsPerChild</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>SendBufferSize</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>ThreadsPerChild</name>
-</directivesynopsis>
-
-</modulesynopsis>
\ No newline at end of file
diff --git a/docs/manual/mod/perchild.html b/docs/manual/mod/perchild.html
deleted file mode 100644
index 8fbd0b1..0000000
--- a/docs/manual/mod/perchild.html
+++ /dev/null
@@ -1,73 +0,0 @@
-<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-     This file is generated from xml source: DO NOT EDIT
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
---><title>perchild - Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img alt="[APACHE DOCUMENTATION]" src="../images/sub.gif"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module perchild</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td><description>Multi-Processing Module allowing for daemon processes
-    serving requests to be assigned a variety of different
-    userids</description></td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>MPM</td></tr><tr><td><a href="module-dict.html#ModuleIdentifier" class="help">Module&nbsp;Identifier:</a></td><td>mpm_perchild_module</td></tr></table></td></tr></table><h2>Summary</h2><summary>
-<blockquote><table><tr><td bgcolor="#ffe5f5">
-This MPM does not currently work on most platforms.  Work is ongoing to
-make it functional.
-</td></tr></table></blockquote>
-
-    <p>This Multi-Processing Module (MPM) implements a hybrid
-    multi-process, multi-threaded web server. A fixed number of
-    processes create threads to handle requests. Fluctuations in
-    load are handled by increasing or decreasing the number of
-    threads in each process.</p>
-
-    <p>A single control process launches the number of child processes
-    indicated by the <a href="mpm_common.html#numservers" class="directive"><code class="directive">NumServers</code></a> directive at server
-    startup. Each child process creates threads as specified in the
-    <code>StartThreads</code> directive. The individual threads then
-    listen for connections and serve them when they arrive.</p>
-
-    <p>Apache always tries to maintain a pool of <em>spare</em> or
-    idle server threads, which stand ready to serve incoming
-    requests. In this way, clients do not need to wait for new
-    threads to be created. For each child process, Apache assesses
-    the number of idle threads and creates or destroys threads to
-    keep this number within the boundaries specified by
-    <code>MinSpareThreads</code> and <code>MaxSpareThreads</code>.
-    Since this process is very self-regulating, it is rarely
-    necessary to modify these directives from their default values.
-    The maximum number of clients that may be served simultaneously
-    is determined by multiplying the number of server processes
-    that will be created (<code>NumServers</code>) by the maximum
-    number of threads created in each process
-    (<code>MaxThreadsPerChild</code>).</p>
-
-    <p>While the parent process is usually started as root under
-    Unix in order to bind to port 80, the child processes and
-    threads are launched by Apache as a less-privileged user. The
-    <code>User</code> and <code>Group</code> directives are used to
-    set the privileges of the Apache child processes. The child
-    processes must be able to read all the content that will be
-    served, but should have as few privileges beyond that as
-    possible. In addition, unless <a href="../suexec.html">suexec</a> is used, these directives also
-    set the privileges which will be inherited by CGI scripts.</p>
-
-    <p><code>MaxRequestsPerChild</code> controls how frequently the
-    server recycles processes by killing old ones and launching new
-    ones.</p>
-
-    <p>See also: <a href="../bind.html">Setting which addresses and
-    ports Apache uses</a>.</p>
-
-    <p>In addition it adds the extra ability to specify that
-    specific processes should serve requests under different
-    userids. These processes can then be associated with specific
-    virtual hosts.</p>
-    
-</summary><h2>Directives</h2><ul><li><a href="#assignuserid">AssignUserId</a></li><li><a href="#childperuserid">ChildPerUserId</a></li><li><a href="mpm_common.html#coredumpdirectory">CoreDumpDirectory</a></li><li><a href="mpm_common.html#group">Group</a></li><li><a href="mpm_common.html#listen">Listen</a></li><li><a href="mpm_common.html#listenbacklog">ListenBacklog</a></li><li><a href="mpm_common.html#lockfile">LockFile</a></li><li><a href="mpm_common.html#maxrequestsperchild">MaxRequestsPerChild</a></li><li><a href="mpm_common.html#maxsparethreads">MaxSpareThreads</a></li><li><a href="mpm_common.html#maxthreadsperchild">MaxThreadsPerChild</a></li><li><a href="mpm_common.html#minsparethreads">MinSpareThreads</a></li><li><a href="mpm_common.html#numservers">NumServers</a></li><li><a href="mpm_common.html#pidfile">PidFile</a></li><li><a href="mpm_common.html#scoreboardfile">ScoreBoardFile</a></li><li><a href="mpm_common.html#sendbuffersize">SendBufferSize</a></li><li><a href="mpm_common.html#startthreads">StartThreads</a></li><li><a href="mpm_common.html#user">User</a></li></ul><hr/><h2><a name="AssignUserId">AssignUserId</a> <a name="assignuserid">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td/></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>AssignUserID <em>user_id</em> <em>group_id</em></syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>MPM</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>perchild</td></tr></table></td></tr></table><usage>
-    <p>Tie a virtual host to a specific child process. Requests addressed to
-the virtual host where this directive appears will be served by the process
-running with the specified user and group id.</p>
-</usage><hr/><h2><a name="ChildPerUserId">ChildPerUserId</a> <a name="childperuserid">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td/></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>ChildPerUserID <em>user_id</em>
-<em>group_id</em> <em>child_id</em></syntax></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>MPM</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>perchild</td></tr></table></td></tr></table><usage>
-    <p>Specify a user id and group id for a specific child process. The number of
-children if set by the <a href="mpm_common.html#numservers">NumServers</a>
-directive. For example, the default value for <a href="mpm_common.html#numservers">NumServers</a> is 5 and that means
-children ids 1,2,3,4 and 5 are available for assigment. If a child does not
-have an associated ChildPerUserID, it inherits the <a href="mpm_common.html#user">User</a> and <a href="mpm_common.html#group">Group</a> settings from the main server </p> 
-</usage><hr/><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img alt="Index" src="../images/index.gif"/></a><a href="../"><img alt="Home" src="../images/home.gif"/></a></blockquote></body></html>
\ No newline at end of file
diff --git a/docs/manual/mod/perchild.xml b/docs/manual/mod/perchild.xml
deleted file mode 100644
index 62a9245..0000000
--- a/docs/manual/mod/perchild.xml
+++ /dev/null
@@ -1,150 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.xsl"?>
-<modulesynopsis>
-
-<name>perchild</name>
-<description>Multi-Processing Module allowing for daemon processes
-    serving requests to be assigned a variety of different
-    userids</description>
-<status>MPM</status>
-<sourcefile>perchild.c</sourcefile>
-<identifier>mpm_perchild_module</identifier>
-
-<summary>
-<note type="warning">
-This MPM does not currently work on most platforms.  Work is ongoing to
-make it functional.
-</note>
-
-    <p>This Multi-Processing Module (MPM) implements a hybrid
-    multi-process, multi-threaded web server. A fixed number of
-    processes create threads to handle requests. Fluctuations in
-    load are handled by increasing or decreasing the number of
-    threads in each process.</p>
-
-    <p>A single control process launches the number of child processes
-    indicated by the <directive
-    module="mpm_common">NumServers</directive> directive at server
-    startup. Each child process creates threads as specified in the
-    <code>StartThreads</code> directive. The individual threads then
-    listen for connections and serve them when they arrive.</p>
-
-    <p>Apache always tries to maintain a pool of <em>spare</em> or
-    idle server threads, which stand ready to serve incoming
-    requests. In this way, clients do not need to wait for new
-    threads to be created. For each child process, Apache assesses
-    the number of idle threads and creates or destroys threads to
-    keep this number within the boundaries specified by
-    <code>MinSpareThreads</code> and <code>MaxSpareThreads</code>.
-    Since this process is very self-regulating, it is rarely
-    necessary to modify these directives from their default values.
-    The maximum number of clients that may be served simultaneously
-    is determined by multiplying the number of server processes
-    that will be created (<code>NumServers</code>) by the maximum
-    number of threads created in each process
-    (<code>MaxThreadsPerChild</code>).</p>
-
-    <p>While the parent process is usually started as root under
-    Unix in order to bind to port 80, the child processes and
-    threads are launched by Apache as a less-privileged user. The
-    <code>User</code> and <code>Group</code> directives are used to
-    set the privileges of the Apache child processes. The child
-    processes must be able to read all the content that will be
-    served, but should have as few privileges beyond that as
-    possible. In addition, unless <a
-    href="../suexec.html">suexec</a> is used, these directives also
-    set the privileges which will be inherited by CGI scripts.</p>
-
-    <p><code>MaxRequestsPerChild</code> controls how frequently the
-    server recycles processes by killing old ones and launching new
-    ones.</p>
-
-    <p>See also: <a href="../bind.html">Setting which addresses and
-    ports Apache uses</a>.</p>
-
-    <p>In addition it adds the extra ability to specify that
-    specific processes should serve requests under different
-    userids. These processes can then be associated with specific
-    virtual hosts.</p>
-    <!-- XXX: This desperately needs more explanation. -->
-</summary>
-
-<directivesynopsis location="mpm_common">
-<name>CoreDumpDirectory</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common">
-<name>Group</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common">
-<name>PidFile</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common">
-<name>Listen</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common">
-<name>ListenBacklog</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common">
-<name>LockFile</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common">
-<name>MaxRequestsPerChild</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common">
-<name>MaxSpareThreads</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common">
-<name>MaxThreadsPerChild</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common">
-<name>MinSpareThreads</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common">
-<name>NumServers</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common">
-<name>ScoreBoardFile</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common">
-<name>SendBufferSize</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common">
-<name>StartThreads</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common">
-<name>User</name>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AssignUserId</name>
-<syntax>AssignUserID <em>user_id</em> <em>group_id</em></syntax>
-<contextlist><context>virtual host</context></contextlist>
-
-<usage>
-    <p>Tie a virtual host to a specific child process. Requests addressed to
-the virtual host where this directive appears will be served by the process
-running with the specified user and group id.</p>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>ChildPerUserId</name>
-<syntax>ChildPerUserID <em>user_id</em>
-<em>group_id</em> <em>child_id</em></syntax>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
-    <p>Specify a user id and group id for a specific child process. The number of
-children if set by the <a href="mpm_common.html#numservers">NumServers</a>
-directive. For example, the default value for <a
-href="mpm_common.html#numservers">NumServers</a> is 5 and that means
-children ids 1,2,3,4 and 5 are available for assigment. If a child does not
-have an associated ChildPerUserID, it inherits the <a
-href="mpm_common.html#user">User</a> and <a
-href="mpm_common.html#group">Group</a> settings from the main server </p> 
-</usage>
-</directivesynopsis>
-
-</modulesynopsis>
-
diff --git a/docs/manual/mod/prefork.html b/docs/manual/mod/prefork.html
deleted file mode 100644
index 0db2c66..0000000
--- a/docs/manual/mod/prefork.html
+++ /dev/null
@@ -1,106 +0,0 @@
-<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-     This file is generated from xml source: DO NOT EDIT
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
---><title>prefork - Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img alt="[APACHE DOCUMENTATION]" src="../images/sub.gif"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module prefork</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td><description>Implements a non-threaded, pre-forking web server</description></td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>MPM</td></tr><tr><td><a href="module-dict.html#ModuleIdentifier" class="help">Module&nbsp;Identifier:</a></td><td>mpm_prefork_module</td></tr></table></td></tr></table><h2>Summary</h2><summary>
-    <p>This Multi-Processing Module (MPM) implements a
-    non-threaded, pre-forking web server which handles request in a
-    manner very similar to the default behavior of Apache 1.3 on
-    Unix.</p>
-
-    <p>A single control process is responsible for launching child
-    processes which listen for connections and serve them when they
-    arrive. Apache always tries to maintain several <em>spare</em>
-    or idle server processes, which stand ready to serve incoming
-    requests. In this way, clients do not need to wait for a new
-    child processes to be forked before their requests can be
-    served.</p>
-
-    <p>The <a href="mpm_common.html#startservers" class="directive"><code class="directive">StartServers</code></a>,
-    <a href="#minspareservers" class="directive"><code class="directive">MinSpareServers</code></a>,
-    <a href="#maxspareservers" class="directive"><code class="directive">MaxSpareServers</code></a>, and
-    <a href="mpm_common.html#maxclients" class="directive"><code class="directive">MaxClients</code></a> regulate how
-    the parent process creates children to serve requests. In general,
-    Apache is very self-regulating, so most sites do not need to
-    adjust these directives from their default values. Sites which
-    need to serve more than 256 simultaneous requests may need to
-    increase <a href="mpm_common.html#maxclients" class="directive"><code class="directive">MaxClients</code></a>,
-    while sites with limited memory may need to decrease <a href="mpm_common.html#maxclients" class="directive"><code class="directive">MaxClients</code></a> to keep the server from
-    thrashing (swapping memory to disk and back). More information
-    about tuning process creation is provided in the <a href="../misc/perf-tuning.html">performance hints</a>
-    documentation.</p>
-
-    <p>While the parent process is usually started as root under Unix
-    in order to bind to port 80, the child processes are launched by
-    Apache as a less-privileged user. The <a href="mpm_common.html#user" class="directive"><code class="directive">User</code></a> and <a href="mpm_common.html#group" class="directive"><code class="directive">Group</code></a> directives are used to set
-    the privileges of the Apache child processes. The child processes
-    must be able to read all the content that will be served, but
-    should have as few privileges beyond that as possible. In
-    addition, unless <a href="../suexec.html">suexec</a> is used,
-    these directives also set the privileges which will be inherited
-    by CGI scripts.</p>
-
-    <p><a href="mpm_common.html#maxrequestsperchild" class="directive"><code class="directive">MaxRequestsPerChild</code></a>
-    controls how frequently the server recycles processes by killing
-    old ones and launching new ones.</p>
-</summary><p><strong>See also </strong></p><ul><li><a href="../bind.html">Setting which addresses and
-    ports Apache uses</a></li></ul><h2>Directives</h2><ul><li><a href="#acceptmutex">AcceptMutex</a></li><li><a href="mpm_common.html#coredumpdirectory">CoreDumpDirectory</a></li><li><a href="mpm_common.html#listen">Listen</a></li><li><a href="mpm_common.html#listenbacklog">ListenBacklog</a></li><li><a href="mpm_common.html#lockfile">LockFile</a></li><li><a href="mpm_common.html#maxrequestsperchild">MaxRequestsPerChild</a></li><li><a href="mpm_common.html#maxspareservers">MaxSpareServers</a></li><li><a href="#maxspareservers">MaxSpareServers</a></li><li><a href="mpm_common.html#minspareservers">MinSpareServers</a></li><li><a href="#minspareservers">MinSpareServers</a></li><li><a href="mpm_common.html#pidfile">PidFile</a></li><li><a href="mpm_common.html#scoreboardfile">ScoreBoardFile</a></li><li><a href="mpm_common.html#sendbuffersize">SendBufferSize</a></li><li><a href="mpm_common.html#serverlimit">ServerLimit</a></li><li><a href="mpm_common.html#startservers">StartServers</a></li><li><a href="mpm_common.html#user">User</a></li></ul><hr/><h2><a name="AcceptMutex">AcceptMutex</a> <a name="acceptmutex">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Method that Apache uses to serialize multiple children
-accepting requests on network sockets</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>AcceptMutex default|<em>method</em></syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>AcceptMutex default</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>MPM</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>prefork</td></tr></table></td></tr></table><usage>
-    <p>The <code class="directive">AcceptMutex</code> directives sets the
-    method that Apache uses to serialize multiple children accepting
-    requests on network sockets. Prior to Apache 2.0, the method was
-    selectable only at compile time. The optimal method to use is
-    highly architecture and platform dependent. For further details,
-    see the <a href="../misc/perf-tuning.html">performance tuning</a>
-    documentation.</p>
-
-    <p>If this directive is set to <code>default</code>, then the
-    compile-time selected default will be used. Other possible
-    methods are listed below. Note that not all methods are
-    available on all platforms. If a method is specified which is
-    not available, a message will be written to the error log
-    listing the available methods.</p>
-
-    <dl>
-      <dt><code>flock</code></dt>
-
-      <dd>uses the <code>flock(2)</code> system call to lock the
-      file defined by the <a href="mpm_common.html#lockfile" class="directive"><code class="directive">LockFile</code></a> directive.</dd>
-
-      <dt><code>fcntl</code></dt>
-
-      <dd>uses the <code>fnctl(2)</code> system call to lock the
-      file defined by the <a href="mpm_common.html#lockfile" class="directive"><code class="directive">LockFile</code></a> directive.</dd>
-
-      <dt><code>sysvsem</code></dt>
-
-      <dd>uses SySV-style semaphores to implement the mutex.</dd>
-
-      <dt><code>pthread</code></dt>
-
-      <dd>uses POSIX mutexes as implemented by the POSIX Threads
-      (PThreads) specification.</dd>
-    </dl>
-</usage><hr/><h2><a name="MaxSpareServers">MaxSpareServers</a> <a name="maxspareservers">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Maximum number of idle child server processes</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>MaxSpareServers <em>number</em><br></syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>MaxSpareServers 10</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>MPM</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>prefork</td></tr></table></td></tr></table><usage>
-    <p>The <code class="directive">MaxSpareServers</code> directive sets the
-    desired maximum number of <em>idle</em> child server processes. An
-    idle process is one which is not handling a request. If there are
-    more than MaxSpareServers idle, then the parent process will kill
-    off the excess processes.</p>
-
-    <p>Tuning of this parameter should only be necessary on very
-    busy sites. Setting this parameter to a large number is almost
-    always a bad idea.</p>
-</usage><p><strong>See also </strong></p><ul><li><a href="#minspareservers" class="directive"><code class="directive">MinSpareServers</code></a></li><li><a href="mpm_common.html#startservers" class="directive"><code class="directive">StartServers</code></a></li></ul><hr/><h2><a name="MinSpareServers">MinSpareServers</a> <a name="minspareservers">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Minimum number of idle child server processes</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><syntax>MinSpareServers <em>number</em></syntax></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>MinSpareServers  5</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>MPM</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>prefork</td></tr></table></td></tr></table><usage>
-    <p>The <code class="directive">MinSpareServers</code> directive sets the
-    desired minimum number of <em>idle</em> child server processes. An
-    idle process is one which is not handling a request. If there are
-    fewer than MinSpareServers idle, then the parent process creates
-    new children at a maximum rate of 1 per second.</p>
-
-    <p>Tuning of this parameter should only be necessary on very
-    busy sites. Setting this parameter to a large number is almost
-    always a bad idea.</p>
-
-    <p>This directive has no effect on Microsoft Windows.</p>
-</usage><p><strong>See also </strong></p><ul><li><a href="#maxspareservers" class="directive"><code class="directive">MaxSpareServers</code></a></li><li><a href="mpm_common.html#startservers" class="directive"><code class="directive">StartServers</code></a></li></ul><hr/><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img alt="Index" src="../images/index.gif"/></a><a href="../"><img alt="Home" src="../images/home.gif"/></a></blockquote></body></html>
\ No newline at end of file
diff --git a/docs/manual/mod/prefork.xml b/docs/manual/mod/prefork.xml
deleted file mode 100644
index 6d3a392..0000000
--- a/docs/manual/mod/prefork.xml
+++ /dev/null
@@ -1,209 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.xsl"?>
-<modulesynopsis>
-
-<name>prefork</name>
-<description>Implements a non-threaded, pre-forking web server</description>
-<status>MPM</status>
-<sourcefile>prefork.c</sourcefile>
-<identifier>mpm_prefork_module</identifier>
-
-<summary>
-    <p>This Multi-Processing Module (MPM) implements a
-    non-threaded, pre-forking web server which handles request in a
-    manner very similar to the default behavior of Apache 1.3 on
-    Unix.</p>
-
-    <p>A single control process is responsible for launching child
-    processes which listen for connections and serve them when they
-    arrive. Apache always tries to maintain several <em>spare</em>
-    or idle server processes, which stand ready to serve incoming
-    requests. In this way, clients do not need to wait for a new
-    child processes to be forked before their requests can be
-    served.</p>
-
-    <p>The <directive module="mpm_common">StartServers</directive>,
-    <directive module="prefork">MinSpareServers</directive>,
-    <directive module="prefork">MaxSpareServers</directive>, and
-    <directive module="mpm_common">MaxClients</directive> regulate how
-    the parent process creates children to serve requests. In general,
-    Apache is very self-regulating, so most sites do not need to
-    adjust these directives from their default values. Sites which
-    need to serve more than 256 simultaneous requests may need to
-    increase <directive module="mpm_common">MaxClients</directive>,
-    while sites with limited memory may need to decrease <directive
-    module="mpm_common">MaxClients</directive> to keep the server from
-    thrashing (swapping memory to disk and back). More information
-    about tuning process creation is provided in the <a
-    href="../misc/perf-tuning.html">performance hints</a>
-    documentation.</p>
-
-    <p>While the parent process is usually started as root under Unix
-    in order to bind to port 80, the child processes are launched by
-    Apache as a less-privileged user. The <directive
-    module="mpm_common">User</directive> and <directive
-    module="mpm_common">Group</directive> directives are used to set
-    the privileges of the Apache child processes. The child processes
-    must be able to read all the content that will be served, but
-    should have as few privileges beyond that as possible. In
-    addition, unless <a href="../suexec.html">suexec</a> is used,
-    these directives also set the privileges which will be inherited
-    by CGI scripts.</p>
-
-    <p><directive module="mpm_common">MaxRequestsPerChild</directive>
-    controls how frequently the server recycles processes by killing
-    old ones and launching new ones.</p>
-</summary>
-<seealso><a href="../bind.html">Setting which addresses and
-    ports Apache uses</a></seealso>
-
-<directivesynopsis location="mpm_common">
-<name>CoreDumpDirectory</name>
-</directivesynopsis>
-
-<directivesynopsis location="mpm_common">
-<name>PidFile</name>
-</directivesynopsis>
-
-<directivesynopsis location="mpm_common">
-<name>Listen</name>
-</directivesynopsis>
-
-<directivesynopsis location="mpm_common">
-<name>ListenBacklog</name>
-</directivesynopsis>
-
-<directivesynopsis location="mpm_common">
-<name>LockFile</name>
-</directivesynopsis>
-
-<directivesynopsis location="mpm_common">
-<name>MaxRequestsPerChild</name>
-</directivesynopsis>
-
-<directivesynopsis location="mpm_common">
-<name>MaxSpareServers</name>
-</directivesynopsis>
-
-<directivesynopsis location="mpm_common">
-<name>MinSpareServers</name>
-</directivesynopsis>
-
-<directivesynopsis location="mpm_common">
-<name>ScoreBoardFile</name>
-</directivesynopsis>
-
-<directivesynopsis location="mpm_common">
-<name>SendBufferSize</name>
-</directivesynopsis>
-
-<directivesynopsis location="mpm_common">
-<name>ServerLimit</name>
-</directivesynopsis>
-
-<directivesynopsis location="mpm_common">
-<name>StartServers</name>
-</directivesynopsis>
-
-<directivesynopsis location="mpm_common">
-<name>User</name>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>AcceptMutex</name>
-<description>Method that Apache uses to serialize multiple children
-accepting requests on network sockets</description>
-<syntax>AcceptMutex default|<em>method</em></syntax>
-<default>AcceptMutex default</default>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
-    <p>The <directive>AcceptMutex</directive> directives sets the
-    method that Apache uses to serialize multiple children accepting
-    requests on network sockets. Prior to Apache 2.0, the method was
-    selectable only at compile time. The optimal method to use is
-    highly architecture and platform dependent. For further details,
-    see the <a href="../misc/perf-tuning.html">performance tuning</a>
-    documentation.</p>
-
-    <p>If this directive is set to <code>default</code>, then the
-    compile-time selected default will be used. Other possible
-    methods are listed below. Note that not all methods are
-    available on all platforms. If a method is specified which is
-    not available, a message will be written to the error log
-    listing the available methods.</p>
-
-    <dl>
-      <dt><code>flock</code></dt>
-
-      <dd>uses the <code>flock(2)</code> system call to lock the
-      file defined by the <directive module="mpm_common"
-      >LockFile</directive> directive.</dd>
-
-      <dt><code>fcntl</code></dt>
-
-      <dd>uses the <code>fnctl(2)</code> system call to lock the
-      file defined by the <directive module="mpm_common"
-      >LockFile</directive> directive.</dd>
-
-      <dt><code>sysvsem</code></dt>
-
-      <dd>uses SySV-style semaphores to implement the mutex.</dd>
-
-      <dt><code>pthread</code></dt>
-
-      <dd>uses POSIX mutexes as implemented by the POSIX Threads
-      (PThreads) specification.</dd>
-    </dl>
-</usage>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>MaxSpareServers</name>
-<description>Maximum number of idle child server processes</description>
-<syntax>MaxSpareServers <em>number</em><br /></syntax>
-<default>MaxSpareServers 10</default>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
-    <p>The <directive>MaxSpareServers</directive> directive sets the
-    desired maximum number of <em>idle</em> child server processes. An
-    idle process is one which is not handling a request. If there are
-    more than MaxSpareServers idle, then the parent process will kill
-    off the excess processes.</p>
-
-    <p>Tuning of this parameter should only be necessary on very
-    busy sites. Setting this parameter to a large number is almost
-    always a bad idea.</p>
-</usage>
-<seealso><directive module="prefork">MinSpareServers</directive></seealso>
-<seealso><directive module="mpm_common">StartServers</directive></seealso>
-</directivesynopsis>
-
-<directivesynopsis>
-<name>MinSpareServers</name>
-<description>Minimum number of idle child server processes</description>
-<syntax>MinSpareServers <em>number</em></syntax>
-<default>MinSpareServers  5</default>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
-    <p>The <directive>MinSpareServers</directive> directive sets the
-    desired minimum number of <em>idle</em> child server processes. An
-    idle process is one which is not handling a request. If there are
-    fewer than MinSpareServers idle, then the parent process creates
-    new children at a maximum rate of 1 per second.</p>
-
-    <p>Tuning of this parameter should only be necessary on very
-    busy sites. Setting this parameter to a large number is almost
-    always a bad idea.</p>
-
-    <p>This directive has no effect on Microsoft Windows.</p>
-</usage>
-<seealso><directive module="prefork">MaxSpareServers</directive></seealso>
-<seealso><directive module="mpm_common">StartServers</directive></seealso>
-</directivesynopsis>
-
-</modulesynopsis>
-
diff --git a/docs/manual/mod/worker.html b/docs/manual/mod/worker.html
deleted file mode 100644
index a0b1c46..0000000
--- a/docs/manual/mod/worker.html
+++ /dev/null
@@ -1,50 +0,0 @@
-<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-     This file is generated from xml source: DO NOT EDIT
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
---><title>worker - Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img alt="[APACHE DOCUMENTATION]" src="../images/sub.gif"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module worker</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td><description>Multi-Processing Module implementing a hybrid
-    multi-threaded multi-process web server</description></td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>MPM</td></tr><tr><td><a href="module-dict.html#ModuleIdentifier" class="help">Module&nbsp;Identifier:</a></td><td>mpm_worker_module</td></tr></table></td></tr></table><h2>Summary</h2><summary>
-    <p>This Multi-Processing Module (MPM) is the default for most
-    unix-like operating systems. It implements a hybrid
-    multi-process multi-threaded server. Each process has a fixed
-    number of threads. The server adjusts to handle load by
-    increasing or decreasing the number of processes.</p>
-
-    <p>A single control process is responsible for launching child
-    processes. Each child process creates a fixed number of threads
-    as specified in the <code>ThreadsPerChild</code> directive. The
-    individual threads then listen for connections and serve them
-    when they arrive.</p>
-
-    <p>Apache always tries to maintain a pool of <em>spare</em> or
-    idle server threads, which stand ready to serve incoming
-    requests. In this way, clients do not need to wait for a new
-    threads or processes to be created before their requests can be
-    served. Apache assesses the total number of idle threads in all
-    processes, and forks or kills processes to keep this number
-    within the boundaries specified by <code>MinSpareThreads</code>
-    and <code>MaxSpareThreads</code>. Since this process is very
-    self-regulating, it is rarely necessary to modify these
-    directives from their default values. The maximum number of
-    clients that may be served simultaneously is determined by
-    multiplying the maximum number of server processes that will be
-    created (<code>MaxClients</code>) by the number of threads
-    created in each process (<code>ThreadsPerChild</code>).</p>
-
-    <p>While the parent process is usually started as root under
-    Unix in order to bind to port 80, the child processes and
-    threads are launched by Apache as a less-privileged user. The
-    <code>User</code> and <code>Group</code> directives are used to
-    set the privileges of the Apache child processes. The child
-    processes must be able to read all the content that will be
-    served, but should have as few privileges beyond that as
-    possible. In addition, unless <a href="../suexec.html">suexec</a> is used, these directives also
-    set the privileges which will be inherited by CGI scripts.</p>
-
-    <p><code>MaxRequestsPerChild</code> controls how frequently the
-    server recycles processes by killing old ones and launching new
-    ones.</p>
-
-    <p>See also: <a href="../bind.html">Setting which addresses and
-    ports Apache uses</a>.</p>
-</summary><h2>Directives</h2><ul><li><a href="mpm_common.html#coredumpdirectory">CoreDumpDirectory</a></li><li><a href="mpm_common.html#group">Group</a></li><li><a href="mpm_common.html#listen">Listen</a></li><li><a href="mpm_common.html#listenbacklog">ListenBacklog</a></li><li><a href="mpm_common.html#lockfile">LockFile</a></li><li><a href="mpm_common.html#maxclients">MaxClients</a></li><li><a href="mpm_common.html#maxrequestsperchild">MaxRequestsPerChild</a></li><li><a href="mpm_common.html#maxsparethreads">MaxSpareThreads</a></li><li><a href="mpm_common.html#minsparethreads">MinSpareThreads</a></li><li><a href="mpm_common.html#pidfile">PidFile</a></li><li><a href="mpm_common.html#scoreboardfile">ScoreBoardFile</a></li><li><a href="mpm_common.html#sendbuffersize">SendBufferSize</a></li><li><a href="mpm_common.html#serverlimit">ServerLimit</a></li><li><a href="mpm_common.html#startservers">StartServers</a></li><li><a href="mpm_common.html#threadlimit">ThreadLimit</a></li><li><a href="mpm_common.html#threadsperchild">ThreadsPerChild</a></li><li><a href="mpm_common.html#user">User</a></li></ul><hr/><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img alt="Index" src="../images/index.gif"/></a><a href="../"><img alt="Home" src="../images/home.gif"/></a></blockquote></body></html>
\ No newline at end of file
diff --git a/docs/manual/mod/worker.xml b/docs/manual/mod/worker.xml
deleted file mode 100644
index c0d38ce..0000000
--- a/docs/manual/mod/worker.xml
+++ /dev/null
@@ -1,94 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
-<?xml-stylesheet type="text/xsl" href="../style/manual.xsl"?>
-<modulesynopsis>
-<name>worker</name>
-<description>Multi-Processing Module implementing a hybrid
-    multi-threaded multi-process web server</description>
-<status>MPM</status>
-<sourcefile>worker.c</sourcefile>
-<identifier>mpm_worker_module</identifier>
-
-<summary>
-    <p>This Multi-Processing Module (MPM) is the default for most
-    unix-like operating systems. It implements a hybrid
-    multi-process multi-threaded server. Each process has a fixed
-    number of threads. The server adjusts to handle load by
-    increasing or decreasing the number of processes.</p>
-
-    <p>A single control process is responsible for launching child
-    processes. Each child process creates a fixed number of threads
-    as specified in the <code>ThreadsPerChild</code> directive. The
-    individual threads then listen for connections and serve them
-    when they arrive.</p>
-
-    <p>Apache always tries to maintain a pool of <em>spare</em> or
-    idle server threads, which stand ready to serve incoming
-    requests. In this way, clients do not need to wait for a new
-    threads or processes to be created before their requests can be
-    served. Apache assesses the total number of idle threads in all
-    processes, and forks or kills processes to keep this number
-    within the boundaries specified by <code>MinSpareThreads</code>
-    and <code>MaxSpareThreads</code>. Since this process is very
-    self-regulating, it is rarely necessary to modify these
-    directives from their default values. The maximum number of
-    clients that may be served simultaneously is determined by
-    multiplying the maximum number of server processes that will be
-    created (<code>MaxClients</code>) by the number of threads
-    created in each process (<code>ThreadsPerChild</code>).</p>
-
-    <p>While the parent process is usually started as root under
-    Unix in order to bind to port 80, the child processes and
-    threads are launched by Apache as a less-privileged user. The
-    <code>User</code> and <code>Group</code> directives are used to
-    set the privileges of the Apache child processes. The child
-    processes must be able to read all the content that will be
-    served, but should have as few privileges beyond that as
-    possible. In addition, unless <a
-    href="../suexec.html">suexec</a> is used, these directives also
-    set the privileges which will be inherited by CGI scripts.</p>
-
-    <p><code>MaxRequestsPerChild</code> controls how frequently the
-    server recycles processes by killing old ones and launching new
-    ones.</p>
-
-    <p>See also: <a href="../bind.html">Setting which addresses and
-    ports Apache uses</a>.</p>
-</summary>
-
-<directivesynopsis location="mpm_common"><name>CoreDumpDirectory</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>Group</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>PidFile</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>Listen</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>ListenBacklog</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>LockFile</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>MaxClients</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>MaxRequestsPerChild</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>MaxSpareThreads</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>MinSpareThreads</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>ScoreBoardFile</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>SendBufferSize</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>ServerLimit</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>StartServers</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>ThreadLimit</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>ThreadsPerChild</name>
-</directivesynopsis>
-<directivesynopsis location="mpm_common"><name>User</name>
-</directivesynopsis>
-
-</modulesynopsis>
\ No newline at end of file
diff --git a/docs/manual/mpm.html b/docs/manual/mpm.html
deleted file mode 100644
index db67792..0000000
--- a/docs/manual/mpm.html
+++ /dev/null
@@ -1,95 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta name="generator" content="HTML Tidy, see www.w3.org" />
-
-    <title>Apache Multi-Processing Modules (MPMs)</title>
-  </head>
-  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-
-  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-  vlink="#000080" alink="#FF0000">
-    <!--#include virtual="header.html" -->
-
-    <h1 align="center">Apache Multi-Processing Modules</h1>
-
-    <p>The Apache HTTP Server is designed to be a powerful and
-    flexible web server that can work on a very wide variety of
-    platforms in a range of different environments. Different
-    platforms and different environments often require different
-    features, or may have different ways of implementing the same
-    feature most efficiently. Apache has always accommodated a wide
-    variety of environments through its modular design. This design
-    allows the webmaster to choose which features will be included
-    in the server by selecting which modules to load either at
-    compile-time or at run-time.</p>
-
-    <p>Apache 2.0 extends this modular design to the most basic
-    functions of a web server. The server ships with a selection of
-    Multi-Processing Modules (MPMs) which are responsible for
-    binding to network ports on the machine, accepting requests,
-    and dispatching children to handle the requests.</p>
-
-    <p>Extending the modular design to this level of the server
-    allows two important benefits:</p>
-
-    <ul>
-      <li>Apache can more cleanly and efficiently support a wide
-      variety of operating systems. In particular, the Windows
-      version of Apache is now much more efficient, since <a
-      href="mod/mpm_winnt.html">mpm_winnt</a> can use native
-      networking features in place of the POSIX layer used in
-      Apache 1.3. This benefit also extends to other operating
-      systems that implement specialized MPMs.</li>
-
-      <li>The server can be better customized for the needs of the
-      particular site. For example, sites that need a great deal of
-      scalability can choose to use a threaded MPM like <a
-      href="mod/worker.html">worker</a>, while sites requiring
-      stability or compatibility with older software can use a <a
-      href="mod/prefork.html">preforking MPM</a>. In addition,
-      special features like serving different hosts under different
-      userids (<a href="mod/perchild.html">perchild</a>) can be
-      provided.</li>
-    </ul>
-
-    <p>At the user level, MPMs appear much like other Apache
-    modules. The main difference is that one and only one MPM must
-    be loaded into the server at any time. The list of available
-    MPMs appears on the <a href="mod/">module index page</a>.</p>
-
-    <h2 align="center">Choosing an MPM</h2>
-
-    <p>MPMs must be chosen during configuration, and compiled into
-    the server. Compilers are capable of optimizing a lot of
-    functions if threads are used, but only if they know that
-    threads are being used. Because some MPMs use threads on Unix
-    and others don't, Apache will always perform better if the MPM
-    is chosen at configuration time and built into Apache.</p>
-
-    <p>To actually choose the desired MPM, use the argument
-    --with-mpm= <em>NAME</em> with the ./configure script.
-    <em>NAME</em> is the name of the desired MPM.</p>
-
-    <p>Once the server has been compiled, it is possible to
-    determine which MPM was chosen by using <code>./httpd
-    -l</code>. This command will list every module that is compiled
-    into the server, including the MPM.</p>
-
-    <h2 align="center">MPM Defaults</h2>
-
-    <ul>
-      <li>BeOS: beos</li>
-
-      <li>OS/2: mpmt_os2</li>
-
-      <li>Unix: prefork</li>
-
-      <li>Windows: winnt</li>
-    </ul>
-    <!--#include virtual="footer.html" -->
-  </body>
-</html>
-
diff --git a/docs/manual/mpm.html.en b/docs/manual/mpm.html.en
deleted file mode 100644
index db67792..0000000
--- a/docs/manual/mpm.html.en
+++ /dev/null
@@ -1,95 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta name="generator" content="HTML Tidy, see www.w3.org" />
-
-    <title>Apache Multi-Processing Modules (MPMs)</title>
-  </head>
-  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-
-  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-  vlink="#000080" alink="#FF0000">
-    <!--#include virtual="header.html" -->
-
-    <h1 align="center">Apache Multi-Processing Modules</h1>
-
-    <p>The Apache HTTP Server is designed to be a powerful and
-    flexible web server that can work on a very wide variety of
-    platforms in a range of different environments. Different
-    platforms and different environments often require different
-    features, or may have different ways of implementing the same
-    feature most efficiently. Apache has always accommodated a wide
-    variety of environments through its modular design. This design
-    allows the webmaster to choose which features will be included
-    in the server by selecting which modules to load either at
-    compile-time or at run-time.</p>
-
-    <p>Apache 2.0 extends this modular design to the most basic
-    functions of a web server. The server ships with a selection of
-    Multi-Processing Modules (MPMs) which are responsible for
-    binding to network ports on the machine, accepting requests,
-    and dispatching children to handle the requests.</p>
-
-    <p>Extending the modular design to this level of the server
-    allows two important benefits:</p>
-
-    <ul>
-      <li>Apache can more cleanly and efficiently support a wide
-      variety of operating systems. In particular, the Windows
-      version of Apache is now much more efficient, since <a
-      href="mod/mpm_winnt.html">mpm_winnt</a> can use native
-      networking features in place of the POSIX layer used in
-      Apache 1.3. This benefit also extends to other operating
-      systems that implement specialized MPMs.</li>
-
-      <li>The server can be better customized for the needs of the
-      particular site. For example, sites that need a great deal of
-      scalability can choose to use a threaded MPM like <a
-      href="mod/worker.html">worker</a>, while sites requiring
-      stability or compatibility with older software can use a <a
-      href="mod/prefork.html">preforking MPM</a>. In addition,
-      special features like serving different hosts under different
-      userids (<a href="mod/perchild.html">perchild</a>) can be
-      provided.</li>
-    </ul>
-
-    <p>At the user level, MPMs appear much like other Apache
-    modules. The main difference is that one and only one MPM must
-    be loaded into the server at any time. The list of available
-    MPMs appears on the <a href="mod/">module index page</a>.</p>
-
-    <h2 align="center">Choosing an MPM</h2>
-
-    <p>MPMs must be chosen during configuration, and compiled into
-    the server. Compilers are capable of optimizing a lot of
-    functions if threads are used, but only if they know that
-    threads are being used. Because some MPMs use threads on Unix
-    and others don't, Apache will always perform better if the MPM
-    is chosen at configuration time and built into Apache.</p>
-
-    <p>To actually choose the desired MPM, use the argument
-    --with-mpm= <em>NAME</em> with the ./configure script.
-    <em>NAME</em> is the name of the desired MPM.</p>
-
-    <p>Once the server has been compiled, it is possible to
-    determine which MPM was chosen by using <code>./httpd
-    -l</code>. This command will list every module that is compiled
-    into the server, including the MPM.</p>
-
-    <h2 align="center">MPM Defaults</h2>
-
-    <ul>
-      <li>BeOS: beos</li>
-
-      <li>OS/2: mpmt_os2</li>
-
-      <li>Unix: prefork</li>
-
-      <li>Windows: winnt</li>
-    </ul>
-    <!--#include virtual="footer.html" -->
-  </body>
-</html>
-
diff --git a/docs/manual/new_features_2_0.html.de b/docs/manual/new_features_2_0.html.de
deleted file mode 100644
index c833459..0000000
--- a/docs/manual/new_features_2_0.html.de
+++ /dev/null
@@ -1,199 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta name="generator" content="notepad" />
-
-    <title>New features with Apache 2.0</title>
-  </head>
-  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-
-  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-  vlink="#000080" alink="#FF0000">
-    <!--#include virtual="header.html" -->
-
-    <h1 align="CENTER">&Uuml;bersicht der neuen Funktionen in Apache 2.0</h1>
-    
-    <p>Erweiterungen: <a href="#core">Core</a> | <a href="#module">Module</a></p>
-    
-    <hr />
-
-    <h2><a id="core" name="core">Core-Erweiterungen:</a></h2>
-
-    <dl>
-      <dt><strong>Unix-Threading</strong></dt>
-
-      <dd>Auf Unix-Systemen mit Unterst&uuml;tzung f&uuml;r POSIX-Threads, kann Apache
-      jetzt in einem Multi-Process, Multi-Threaded Hybrid-Mode gestartet werden. Dies
-      verbessert die Skalierf&auml;higkeit f&uuml;r viele, jedoch unbedingt nicht alle
-      Konfigurationen.</dd>
-
-      <dt><strong>Neues Build-System</strong></dt>
-
-      <dd>Das Build-System wurde komplett auf der Basis von autoconf und libtool
-      neu geschrieben. Dadurch wird das Apache-Konfigurationssystem dem vieler
-      anderer Packages &auml;hnlicher.</dd>
-
-      <dt><strong>Multi-Protokoll-Unterst&uuml;tzung</strong></dt>
-
-      <dd>Apache stellt jetzt die notwendigen Grundfunktionalit&auml;ten bereit um mehrere
-      Protokolle unterst&uuml;tzen und verarbeiten zu k&ouml;nnen.
-      mod_echo wurde hierf&uuml;r als Beispiel geschrieben.</dd>
-
-      <dt><strong>Bessere Unterst&uuml;tzung von nicht-Unix-Plattformen</strong></dt>
-
-      <dd>Apache 2.0 ist schneller und stabiler auf nicht-Unix-Plattformen
-      wie BeOS, OS/2, und Windows. Mit der Einf&uuml;hrung von Plattform-spezifischen 
-      <a href="mpm.html">Multi-Processing Modulen</a> (MPMs) und der
-      Apache Portable Runtime (APR), sind diese Plattformen jetzt in ihrem nativen
-      API implementiert, wodurch die Verwendung der h&auml;ufig fehlerbehafteten und
-      schlecht funktionierenden POSIX-Emulation-Layer vermieden wird.</dd>
-
-      <dt><strong>Neues Apache API</strong></dt>
-
-      <dd>Das API f&uuml;r Module hat sich in 2.0 stark ver&auml;ndert.
-      Die meisten der Sortierungs-/Priorit&auml;tsprobleme von Modulen bei 1.3 sollten nun
-      verschwunden sein. In 2.0 wird hiervon vieles automatisch durchgef&uuml;hrt. Die
-      Modulsortierung wird jetzt &uuml;ber einen pre-hook vorgenommen, um mehr Flexibilit&auml;t
-      zu bieten. Au&szlig;erdem wurden neue API-Calls hinzugef&uuml;gt, die zus&auml;tzliche
-      Modulf&auml;higkeiten zur Verf&uuml;gung stellen, ohne den Apache-Kern anpassen
-      zu m&uuml;ssen.</dd>
-
-      <dt><strong>IPv6-Unterst&uuml;tzung</strong></dt>
-
-      <dd>Auf Systemen, bei denen die zugrundeliegende Apache Portable Runtime-Bibliothek
-      IPv6 unterst&uuml;tzt, bekommt Apache standarm&auml;&szlig;ig IPv6 Listening
-      Sockets. Zus&auml;tzlich unterst&uuml;tzen die Konfigurationsanweisungen Listen,
-      NameVirtualHost und &lt;VirtualHost&gt; numerische IPv6-Adressangaben (z.B.,
-      "Listen [fe80::1]:8080").</dd>
-
-      <dt><strong>Filterung</strong></dt>
-
-      <dd>Apache-Module k&ouml;nnen jetzt als Filter entwickelt und zur Filterung
-      des rein- und rausgehenden Datenstroms des Servers eingesetzt werden.
-      Hierdurch kann beispielsweise die Ausgabe von CGI-Skripten durch den INCLUDES-Filter
-      von mod_include bearbeitet werden und so Server-Side Include-Anweisungen ausgef&uuml;hrt
-      werden.</dd>
-
-      <dt><strong>Mehrsprachige Fehlermeldungen</strong></dt>
-
-      <dd>Fehlermeldungen die an Browser rausgehen, stehen jetzt als SSI-Dokumente in
-      verschiedenen Sprachen zur Verf&uuml;gung. Sie k&ouml;nnen bei Bedarf durch den
-      Administrator angepasst werden, um ein einheitliches Design zu erreichen.</dd>
-
-      <dt><strong>Vereinfachte Konfiguration</strong></dt>
-
-      <dd>Viele der verwirrenden Konfigurationsanweisungen wurden vereinfacht.
-      Die oft f&uuml;r Verwirrung sorgenden Port- und BindAddress-Anweisungen wurden
-      entfernt. Ausschlie&szlig;lich ie Listen-Anweisung wird nun zum Setzen von
-      IP-Addressen und Portnummern benutzt. Der Servername und Portnummer die
-      f&uuml;r Weiterleitungen und Erkennung virtueller Server verwendet werden, werden
-      &uuml;ber die ServerName-Anweisung konfiguriert.</dd>
-
-      <dt><strong>Native Windows NT Unicode-Unterst&uuml;tzung</strong></dt>
-
-      <dd>Apache 2.0 auf Windows NT benutzt jetzt utf-8 f&uuml;r alle
-      Dateinamen-Kodierungen. Diese werden direkt auf das zugrundeliegenden
-      Unicode-Dateisystem abgebildet, wodurch Mehrsprach-Unterst&uuml;tzung
-      f&uuml; alle Windows NT-basierte Installationen, inklusive Windows 2000 und
-      Windows XP, zur Verf&uuml;gung gestellt wird.
-      <em>Diese Unterst&uuml;tzung ist nicht auf Windows 95, 98 oder ME verf&uuml;gbar.
-      Hier wird weiterhin die jeweils lokale Codepage des Rechners f&uuml;r den
-      Zugriff auf das Dateisystem verwendet.</em></dd>
-
-    </dl>
-    <hr />
-
-    <h2><a id="module" name="module">Modul Erweiterungen:</a></h2>
-
-    <dl>
-      <dt><strong>mod_ssl</strong></dt>
-
-      <dd>Neues Modul in Apache 2.0.  Dieses Modul ist ein Interface
-      zu den von OpenSSL bereitgestellten SSL/TLS Verschl&uuml;sselungs-Protokollen.</dd>
-
-      <dt><strong>mod_dav</strong></dt>
-
-      <dd>Neues Modul in Apache 2.0. Dieses Modul implementiert die HTTP
-      Distributed Authoring and Versioning (DAV) Spezifikation, zur
-      Erzeugung und Pflege von Web-Inhalten..</dd>
-
-      <dt><strong>mod_auth_digest</strong></dt>
-
-      <dd>Zus&auml;tzliche Unterst&uuml;tzung f&uuml;r prozess&uuml;bergreifendes
-      Session-Caching mittels Shared-Memory.
-     </dd>
-
-      <dt><strong>mod_charset_lite</strong></dt>
-
-      <dd>Neues Modul in Apache 2.0.
-      Dieses experimentelle Modul erlaubt Zeichensatz-&Uuml;bersetzungen oder
-      -Umschl&uuml;sselung.</dd>
-
-      <dt><strong>mod_file_cache</strong></dt>
-
-      <dd>Neues Modul in Apache 2.0. Dieses Modul beinhaltet die Funktionalit&auml;t
-      von mod_mmap_static aus Apache 1.3, plus einige weitere Caching-Funktionen.</dd>
-
-      <dt><strong>mod_headers</strong></dt>
-
-      <dd>Dieses Modul ist in Apache 2.0 deutlich flexibler geworden. Es kann jetzt
-      die von mod_proxy genutzten Request-Header manipulieren und es ist m&ouml;glich
-      Response-Header auf Basis von definierten Bedingungen zu ver&auml;ndern.</dd>
-
-      <dt><strong>mod_proxy</strong></dt>
-
-      <dd>Das Proxy Modul wurde komplett neu geschrieben um die M&ouml;glichkeiten der
-      neuen Filter-Funktionalit&auml;t auszusch&ouml;pfen und um einen
-      zuverl&auml;ssigen Proxy zu haben, der den HTTP/1.1-Spezifikationen
-      entspricht.</dd>
-
-      <dt><strong>mod_negotiation</strong></dt>
-
-      <dd>Die neue Konfigurationsanweisung <a
-      href="mod/mod_negotiation.html#forcelanguagepriority">ForceLanguagePriority</a>
-      kann benutzt werden, um sicherzustellen, dass ein Client auf jeden Fall ein
-      einzelnes Dokument, anstatt einer NOT ACCEPTABLE- oder MULTIPLE CHOICES-Antwort,
-      bekommt. Zus&auml;tzlich wurden die Negotiation- und Multiview-Algorithmen
-      angepasst um einheitlichere Ergebnisse zu liefern. Au&szlig;erdem wird eine
-      neue Form von Type-Maps bereitgestellt, die direkt den Inhalt von Dokumenten
-      umfassen k&ouml;nnen.</dd>
-
-      <dt><strong>mod_autoindex</strong></dt>
-
-      <dd>Automatisch erzeugte Verzeichnisindizes k&ouml;nnen zur besseren
-      &Uuml;bersichtlichkeit durch ein HTML-Tabellen dargestellt werden.
-      Genauerere Sortierungen, wie Sortierung nach Versionsnummer und
-      Wildcard-Filterung des Verzeichnisindizes werden unterst&uuml;tzt.</dd>
-
-      <dt><strong>mod_include</strong></dt>
-
-      <dd>Neue Anweisungen erlauben es, die Standard Start- und Endtags von
-      SSI-Elementen zu &auml;ndern. Zudem k&ouml;nnen die Default-Formate f&uuml;r
-      Fehlermeldungen und Zeitangaben nun ebenfalls in der Serverkonfiguration
-      vorgenommen werden. Auf die Ergebnisse der Auswertung und Gruppierung von
-      regul&auml;ren Ausdr&uuml;cken (jetzt auf Basis der Perl's Regular Expression
-      Syntax) kann &uuml;ber die mod_include Variablen $0 bis $9 zugegriffen werden.</dd>
-
-      <dt><strong>mod_auth_dbm</strong></dt>
-
-      <dd>DBM-&auml;hnliche Datenbanken werden jetzt durch die Konfigurationsaweisung
-      <a href="mod/mod_auth_dbm.html#authdbmtype">AuthDBMType</a>
-      unterst&uuml;tzt.</dd>
-
-      <dt><strong>mod_proxy</strong></dt>
-
-      <dd>Neue &lt;Proxy&gt;-Konfigurationssektionen bringen eine besser
-      lesbarere (und intern schnellere) Kontrolle der genutzten Websites.
-      Die &uuml;berladene &lt;Directory "proxy:..."&gt;-Anweisung wird nicht mehr
-      unterst&uuml;tzt. Das Modul wurde in mehrere Module aufgeteilt, die jeweils
-      ein bestimmtes Übertragungsprotokoll implementieren. Diese sind proxy_connect,
-      proxy_ftp und proxy_http.</dd>
-
-    </dl>
-    <!--#include virtual="footer.html" -->
-  </body>
-</html>
-
-
diff --git a/docs/manual/new_features_2_0.html.en b/docs/manual/new_features_2_0.html.en
deleted file mode 100644
index f977e65..0000000
--- a/docs/manual/new_features_2_0.html.en
+++ /dev/null
@@ -1,201 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta name="generator" content="HTML Tidy, see www.w3.org" />
-
-    <title>New features with Apache 2.0</title>
-  </head>
-  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-
-  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-  vlink="#000080" alink="#FF0000">
-    <!--#include virtual="header.html" -->
-
-    <h1 align="CENTER">Overview of New Features in Apache 2.0</h1>
-
-    <p>Enhancements: <a href="#core">Core</a> | <a
-    href="#module">Module</a></p>
-    <hr />
-
-    <h2><a id="core" name="core">Core Enhancements:</a></h2>
-
-    <dl>
-      <dt><strong>Unix Threading</strong></dt>
-
-      <dd>On Unix systems with POSIX threads support, Apache can
-      now run in a hybrid multiprocess, multithreaded mode. This
-      improves scalability for many, but not all configurations.</dd>
-
-      <dt><strong>New Build System</strong></dt>
-
-      <dd>The build system has been rewritten from scratch to be
-      based on autoconf and libtool. This makes Apache's
-      configuration system more similar to that of other
-      packages.</dd>
-
-      <dt><strong>Multiprotocol Support</strong></dt>
-
-      <dd>Apache now has some of the infrastructure in place to
-      support serving multiple protocols. mod_echo has been written
-      as an example.</dd>
-
-      <dt><strong>Better support for non-Unix
-      platforms</strong></dt>
-
-      <dd>Apache 2.0 is faster and more stable on non-Unix
-      platforms such as BeOS, OS/2, and Windows. With the
-      introduction of platform-specific <a
-      href="mpm.html">multi-processing modules</a> (MPMs) and the
-      Apache Portable Runtime (APR), these platforms are now
-      implemented in their native API, avoiding the often buggy and
-      poorly performing POSIX-emulation layers.</dd>
-
-      <dt><strong>New Apache API</strong></dt>
-
-      <dd>The API for modules has changed significantly for 2.0.
-      Many of the module-ordering/-priority problems from 1.3 should
-      be gone. 2.0 does much of this automatically, and module ordering
-      is now done per-hook to allow more flexibility. Also, new calls
-      have been added that provide additional module capabilities
-      without patching the core Apache server.</dd>
-
-      <dt><strong>IPv6 Support</strong></dt>
-
-      <dd>On systems where IPv6 is supported by the underlying
-      Apache Portable Runtime library, Apache gets IPv6 listening
-      sockets by default. Additionally, the Listen,
-      NameVirtualHost, and &lt;VirtualHost&gt; directives support
-      IPv6 numeric address strings (e.g., "Listen
-      [fe80::1]:8080").</dd>
-
-      <dt><strong>Filtering</strong></dt>
-
-      <dd>Apache modules may now be written as filters which act on
-      the stream of content as it is delivered to or from the
-      server. This allows, for example, the output of CGI scripts
-      to be parsed for Server Side Include directives using the
-      INCLUDES filter in mod_include.</dd>
-
-      <dt><strong>Multilanguage Error Responses</strong></dt>
-
-      <dd>Error response messages to the browser are now provided in 
-      several languages, using SSI documents.  They may be customized 
-      by the administrator to achieve a consistent look and feel.</dd>
-
-      <dt><strong>Simplified configuration</strong></dt>
-
-      <dd>Many confusing directives have been simplified.  The often
-      confusing Port and BindAddress directives are gone; only the
-      Listen directive is used for IP address binding; the
-      ServerName directive specifies the server name and port number
-      only for redirection and vhost recognition.</dd>
-
-      <dt><strong>Native Windows NT Unicode Support</strong></dt>
-
-      <dd>Apache 2.0 on Windows NT now uses utf-8 for all filename
-      encodings.  These directly translate to the underlying Unicode
-      file system, providing multilanguage support for all Windows 
-      NT-based installations, including Windows 2000 and Windows XP.
-      <em>This support does not extend to Windows 95, 98 or ME, which 
-      continue to use the machine's local codepage for filesystem 
-      access.</em></dd>
-
-    </dl>
-    <hr />
-
-    <h2><a id="module" name="module">Module Enhancements:</a></h2>
-
-    <dl>
-      <dt><strong>mod_ssl</strong></dt>
-
-      <dd>New module in Apache 2.0.  This module is an interface
-      to the SSL/TLS encryption protocols provided by
-      OpenSSL.</dd>
-
-      <dt><strong>mod_dav</strong></dt>
-
-      <dd>New module in Apache 2.0. This module implements the HTTP
-      Distributed Authoring and Versioning (DAV) specification for
-      posting and maintaining web content.</dd>
-
-      <dt><strong>mod_auth_digest</strong></dt>
-
-      <dd>Includes additional support for session caching across
-      processes using shared memory.</dd>
-
-      <dt><strong>mod_charset_lite</strong></dt>
-
-      <dd>New module in Apache 2.0. This experimental module allows
-      for character set translation or recoding.</dd>
-
-      <dt><strong>mod_file_cache</strong></dt>
-
-      <dd>New module in Apache 2.0. This module includes the
-      functionality of mod_mmap_static in Apache 1.3, plus adds
-      further caching abilities.</dd>
-
-      <dt><strong>mod_headers</strong></dt>
-
-      <dd>This module is much more flexible in Apache 2.0. It can
-      now modify request headers used by mod_proxy, and it can
-      conditionally set response headers.</dd>
-
-      <dt><strong>mod_proxy</strong></dt>
-
-      <dd>The proxy module has been completely rewritten to take advantage
-      of the new filter infrastructure and to implement a more
-      reliable, HTTP/1.1 compliant proxy.  In addition, new
-      &lt;Proxy&gt; configuration sections provide more readable
-      (and internally faster) control of proxied sites; overloaded 
-      &lt;Directory "proxy:..."&gt; configuration are not supported.  The
-      module is now divided into specific protocol support modules 
-      including proxy_connect, proxy_ftp and proxy_http.</dd>
-
-      <dt><strong>mod_negotiation</strong></dt>
-
-      <dd>A new <a
-      href="mod/mod_negotiation.html#forcelanguagepriority"
-      >ForceLanguagePriority</a>
-      directive can be used to assure that the client receives a
-      single document in all cases, rather than NOT ACCEPTABLE or
-      MULTIPLE CHOICES responses.  In addition, the negotiation and MultiViews
-      algorithms have been cleaned up to provide more consistent
-      results and a new form of type map that can include document
-      content is provided.</dd>
-
-      <dt><strong>mod_autoindex</strong></dt>
-
-      <dd>Autoindex'ed directory listings can now be configured to 
-      use HTML tables for cleaner formatting, and allow finer-grained
-      control of sorting, including version-sorting, and wildcard
-      filtering of the directory listing.</dd>
-
-      <dt><strong>mod_include</strong></dt>
-
-      <dd>New directives allow the default start and end tags for SSI elements
-      to be changed and allow for error and time format configuration
-      to take place in the main configuration file rather than in the
-      SSI document.  Results from regular expression parsing and grouping
-      (now based on Perl's regular expression syntax) can be retrieved
-      using mod_include's variables $0 .. $9.</dd>
-
-      <dt><strong>mod_auth_dbm</strong></dt>
-
-      <dd>Now supports multiple types of DBM-like databases using the
-      <a
-      href="mod/mod_auth_dbm.html#authdbmtype">AuthDBMType</a>
-      directive.</dd>
-
-      <dt><strong>mod_auth_db</strong></dt>
-
-      <dd>Has been removed in favor of mod_auth_dbm with the AuthDBMType
-      directive.</dd>
-
-
-    </dl>
-    <!--#include virtual="footer.html" -->
-  </body>
-</html>
-
diff --git a/docs/manual/new_features_2_0.html.fr b/docs/manual/new_features_2_0.html.fr
deleted file mode 100644
index 9ae5f6d..0000000
--- a/docs/manual/new_features_2_0.html.fr
+++ /dev/null
@@ -1,111 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta name="generator" content="HTML Tidy, see www.w3.org" />
-    <meta http-equiv="Content-Type"
-    content="text/html; charset=iso-8859-1" />
-
-    <title>Nouvelles fonctionnalit&eacute;s d'Apache 2.0</title>
-  </head>
-  <!-- Background white, links blue (unvisited), navy (visited), 
-      red (active) -->
-
-  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-  vlink="#000080" alink="#FF0000">
-    <!--#include virtual="header.html" -->
-
-    <h1 align="CENTER">Aper&ccedil;u des nouvelles
-    fonctionnalit&eacute;s d'Apache 2.0</h1>
-
-    <p>Am&eacute;liorations&nbsp;: <a href="#core">Noyau</a> | <a
-    href="#module">Module</a></p>
-    <hr />
-
-    <h2><a id="core" name="core">Am&eacute;liorations du noyau
-    &nbsp;:</a></h2>
-
-    <dl>
-      <dt><strong>Threads sur Unix</strong></dt>
-
-      <dd>Sur les syst&egrave;mes Unix, Apache peut
-      s'ex&eacute;cuter selon un mod&egrave;le hybride
-      multi-processus et multi-threads, en employant les threads
-      selon la norme POSIX. Ceci devrait am&eacute;liorer les
-      performances.</dd>
-
-      <dt><strong>Nouveau syst&egrave;me de
-      construction</strong></dt>
-
-      <dd>Le syst&egrave;me de construction a &eacute;t&eacute;
-      enti&egrave;rement r&eacute;&eacute;crit et repose sur
-      autoconf et libtool. Cela rend le syst&egrave;me de
-      configuration plus semblable aux autres paquetages.</dd>
-
-      <dt><strong>Support multiprotocole</strong></dt>
-
-      <dd>Apache poss&egrave;de maintenant une infrastructure afin
-      de servir de multiples protocoles. mod_echo a
-      &eacute;t&eacute; &eacute;crit comme exemple de ces nouvelles
-      fonctions.</dd>
-
-      <dt><strong>Meilleur support des plates-formes autres
-      qu'Unix</strong></dt>
-
-      <dd>Apache 2.0 est plus rapide et plus stable sur les
-      plates-formes non Unix telles que BeOS, OS/2, et Windows.
-      Avec l'introduction des <a href="mpm.html">modules multi
-      traitements</a> (MPMs) sp&eacute;cifiques aux plates-formes
-      et l'ex&eacute;cuteur portable Apache (APR), le code pour ces
-      plates-formes est r&eacute;alis&eacute; en employant leurs
-      API natives, permettant ainsi d'&eacute;viter les couches
-      d'&eacute;mulation POSIX souvent bogu&eacute;es et peu
-      performantes.</dd>
-
-      <dt><strong>Nouvelle API Apache</strong></dt>
-
-      <dd>L'API pour les modules de la version 2.0 a chang&eacute;
-      de mani&egrave;re importante. Beaucoup de probl&egrave;mes
-      d'ordonnancement des modules existants dans la version 1.3
-      devraient dispara&icirc;tre. La version 2.0 g&egrave;re ceci
-      de mani&egrave;re automatique, et l'ordonnancement des
-      modules s'effectue selon une fonction d'accrochage afin de
-      permettre une plus grande flexibilit&eacute;.</dd>
-    </dl>
-    <hr />
-
-    <h2><a id="module" name="module">Am&eacute;liorations
-    concernant les modules&nbsp;:</a></h2>
-
-    <dl>
-      <dt><strong>mod_auth_digest</strong></dt>
-
-      <dd>Il inclut une nouvelle gestion des sessions en utilisant
-      un cache commun aux processus gr&acirc;ce &agrave; une
-      m&eacute;moire partag&eacute;e.</dd>
-
-      <dt><strong>mod_charset_lite</strong></dt>
-
-      <dd>Nouveau module dans Apache 2.0. Ce module
-      exp&eacute;rimental permet la traduction des pages de
-      caract&egrave;res ou leur recodage.</dd>
-
-      <dt><strong>mod_dav</strong></dt>
-
-      <dd>Nouveau module dans Apache 2.0. Ce module met en oeuvre
-      la sp&eacute;cification "HTTP Distributed Authoring and
-      Versioning (DAV)" permettant de distribuer et maintenir le
-      contenu d'un site web.</dd>
-
-      <dt><strong>mod_file_cache</strong></dt>
-
-      <dd>Nouveau module dans Apache 2.0. Ce module inclut les
-      fonctionnalit&eacute;s du module mod_mmap_static existant
-      dans la version d'Apache 1.3, en ajoutant davantage de
-      possibilit&eacute;s de cache.</dd>
-    </dl>
-    <!--#include virtual="footer.html" -->
-  </body>
-</html>
-
diff --git a/docs/manual/platform/footer.html b/docs/manual/platform/footer.html
deleted file mode 100644
index 54f6044..0000000
--- a/docs/manual/platform/footer.html
+++ /dev/null
@@ -1,6 +0,0 @@
-    <hr />
-
-    <h3 align="CENTER">Apache HTTP Server Version 2.0</h3>
-    <a href="./"><img src="../images/index.gif" alt="Index" /></a>
-    <a href="../"><img src="../images/home.gif" alt="Home" /></a>
-
diff --git a/docs/manual/platform/header.html b/docs/manual/platform/header.html
deleted file mode 100644
index 749461d..0000000
--- a/docs/manual/platform/header.html
+++ /dev/null
@@ -1,6 +0,0 @@
-    <div align="CENTER">
-      <img src="../images/sub.gif" alt="[APACHE DOCUMENTATION]" /> 
-
-      <h3>Apache HTTP Server Version 2.0</h3>
-    </div>
-
diff --git a/docs/manual/platform/netware.html b/docs/manual/platform/netware.html
deleted file mode 100644
index 0ab6a38..0000000
--- a/docs/manual/platform/netware.html
+++ /dev/null
@@ -1,504 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta name="generator" content="Microsoft FrontPage 4.0" />
-
-    <title>Using Apache with Novell NetWare</title>
-  </head>
-  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-
-  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-  vlink="#000080" alink="#FF0000">
-    <!--#include virtual="header.html" -->
-
-    <h1 align="CENTER">Using Apache With Novell NetWare</h1>
-
-	<p>This document explains how to install, configure and run
-	   Apache 2.0 under Novell NetWare 5.x and above. If you find any bugs, 
-	   or wish to contribute in other ways, please
-	   use our <a HREF="http://www.apache.org/bug_report.html">bug reporting
-	   page.</a></p>
-
-	<p>The bug reporting page and dev-httpd mailing list are <em>not</em> 
-	   provided to answer questions about configuration or running Apache.  
-	   Before you submit a bug report or request, first consult this document, the
-    <a HREF="faq/index.html">Frequently Asked Questions</a> page and the other 
-	   relevant documentation topics.  If you still have a question or problem, 
-	   post it to the <a HREF="news://developer-forums.novell.com/novell.devsup.webserver">
-	   novell.devsup.webserver</a> newsgroup, where many 
-	   Apache users are more than willing to answer new 
-	   and obscure questions about using Apache on NetWare.</p>
-   
-    Most of this document assumes that you are installing Apache
-    from a binary distribution. If you want to compile Apache
-    yourself (possibly to help with development, or to track down
-    bugs), see the section on <a href="#comp">Compiling Apache for
-    NetWare</a> below. 
-    <hr />
-
-    <ul>
-      <li><a href="#req">Requirements</a></li>
-
-      <li><a href="#down">Downloading Apache for NetWare</a></li>
-
-      <li><a href="#inst">Installing Apache for NetWare</a></li>
-
-      <li><a href="#run">Running Apache for NetWare</a></li>
-
-      <li><a href="#use">Configuring Apache for NetWare</a></li>
-
-      <li><a href="#comp">Compiling Apache for NetWare</a></li>
-    </ul>
-    <hr />
-
-    <h2><a id="req" name="req">Requirements</a></h2>
-    Apache 2.0 is designed to run on NetWare 5.x and above. 
-
-    <p><strong>If running on NetWare 5.0 you must install Service
-    Pack 7 or above.</strong></p>
-
-    <p><strong>If running on NetWare 5.1 you must install Service
-    Pack 4 or above.</strong></p>
-    
-    <p><strong>If running on NetWare 6 you must install Service
-    Pack 1 or above.</strong></p>
-
-    <p>NetWare service packs are available <a
-    href="http://support.novell.com/misc/patlst.htm#nw">here.</a></p>
-
-    <h2><a id="down" name="down">Downloading Apache for NetWare</a></h2>
-
-    <p>Information on the latest version of Apache can be found on
-    the Apache web server at <a
-    href="http://www.apache.org/">http://www.apache.org/</a>. This
-    will list the current release, any more recent alpha or
-    beta-test releases, together with details of mirror web and
-    anonymous ftp sites.</p>
-
-    <h2><a id="inst" name="inst">Installing Apache for
-    NetWare</a></h2>
-    There is no Apache install program for NetWare currently. You
-    will need to compile apache and copy the files over to the
-    server manually. An install program will be posted at a later
-    date.&nbsp;
-
-    <p>Follow these steps to install Apache on NetWare from the
-    binary download (assuming you will install to sys:/apache2):</p>
-
-    <ul>
-      <li>Unzip the binary download file to the root of the SYS:
-      volume (may be installed to any volume)</li>
-
-      <li>Edit the httpd.conf file setting ServerRoot and
-      ServerName to reflect your correct server settings</li>
-
-      <li>Add SYS:/APACHE2 to the search path. EXAMPLE: SEARCH ADD
-      SYS:\APACHE2</li>
-    </ul>
-
-    <p>Follow these steps to install Apache on NetWare manually
-    from your own build source (assuming you will install to
-    sys:/apache):</p>
-
-    <ul>
-      <li>Create a directory called <code>Apache2</code> on a
-      NetWare volume</li>
-
-      <li>Copy APACHE2.NLM, APRLIB.NLM, HTDIGEST.NLM, HTPASSWD.NLM to SYS:/APACHE2</li>
-
-      <li>Create a directory under SYS:/APACHE2 called CONF</li>
-
-      <li>Copy the HTTPD-STD.CONF file to the SYS:/APACHE2/CONF
-      directory and rename to HTTPD.CONF</li>
-
-      <li>Copy the MIME.TYPES and MAGIC files to SYS:/APACHE2/CONF
-      directory</li>
-
-      <li>Copy all files and subdirectories in \HTTPD-2.0\DOCS\ICONS to
-        SYS:/APACHE2/ICONS</li>
-
-      <li>Copy all files and subdirectories in \HTTPD-2.0\DOCS\MANUAL to
-        SYS:/APACHE2/MANUAL</li>
-
-      <li>Copy all files and subdirectories in \HTTPD-2.0\DOCS\ERROR to
-        SYS:/APACHE2/ERROR</li>
-
-      <li>Copy all files and subdirectories in \HTTPD-2.0\DOCS\DOCROOT to
-        SYS:/APACHE2/HTDOCS</li>
-
-      <li>Create the directory SYS:/APACHE2/LOGS on the server</li>
-
-      <li>Create the directory SYS:/APACHE2/CGI-BIN on the
-      server</li>
-
-      <li>Create the directory SYS:/APACHE2/MODULES and copy all nlm
-      modules into the modules directory</li>
-
-      <li>Edit the HTTPD.CONF file searching for all @@<i>Value</i>@@ markers
-        and replacing them with the appropriate setting</li>
-
-      <li>Add SYS:/APACHE2 to the search path. EXAMPLE: SEARCH ADD
-      SYS:\APACHE2</li>
-    </ul>
-
-    <p>Apache may be installed to other volumes besides the default <samp>SYS</samp> volume.</p>
-
-    <h2><a id="run" name="run">Running Apache for NetWare</a></h2>
-    To start Apache just type <strong>apache</strong> at the
-    console. This will load apache in the OS address space. If you
-    prefer to load Apache in a protected address space you may
-    specify the address space with the load statement as follows: 
-<pre>
-    load address space = apache2 apache2
-</pre>
-
-    <p>This will load Apache into an address space called apache.
-    Running multiple instances of Apache concurrently on NetWare is
-    possible by loading each instance into its own protected
-    address space.</p>
-
-    <p>After starting Apache, it will be listening to port 80
-    (unless you changed the <samp>Listen</samp> directive in the configuration
-    files). To connect to the server and access the default page,
-    launch a browser and enter the server's name or address. This
-    should respond with a welcome page, and a link to the Apache
-    manual. If nothing happens or you get an error, look in the
-    <samp>error_log</samp> file in the <samp>logs</samp>
-    directory.</p>
-
-    <p>Once your basic installation is working, you should
-    configure it properly by editing the files in the
-    <samp>conf</samp> directory.</p>
-
-    <p>To unload Apache running in the OS address space just type
-    the following at the console:</p>
-<pre>
-    unload apache2</pre>
-    <blockquote>
-<pre>or</pre>
-    </blockquote>
-<pre>    apache2 shutdown
-</pre>
-    If apache is running in a protected address space specify the
-    address space in the unload statement: 
-<pre>
-    unload address space = apache2 apache2
-</pre>
-
-    <p>When working with Apache it is important to know how it will
-    find the configuration files. You can specify a configuration
-    file on the command line in two ways:</p>
-
-    <ul>
-      <li>-f specifies a path to a particular configuration
-      file</li>
-    </ul>
-<pre>
-    apache2 -f &quot;vol:/my server/conf/my.conf&quot;
-</pre>
-<pre>
-    apache -f test/test.conf
-</pre>
-    In these cases, the proper ServerRoot should be set in the
-    configuration file. 
-
-    <p>If you don't specify a configuration file name with -f,
-    Apache will use the file name compiled into the server, usually
-    "conf/httpd.conf". Invoking Apache with the -V switch will
-    display this value labeled as SERVER_CONFIG_FILE. Apache will
-    then determine its ServerRoot by trying the following, in this
-    order:</p>
-
-    <ul>
-      <li>A ServerRoot directive via a -C switch.</li>
-
-      <li>The -d switch on the command line.</li>
-
-      <li>Current working directory</li>
-
-      <li>The server root compiled into the server.</li>
-    </ul>
-
-    <p>The server root compiled into the server is usually &quot;sys:/apache2&quot;. invoking apache with the -V switch will display
-    this value labeled as HTTPD_ROOT.</p>
-
-    <p>Apache 2.0 for NetWare includes a set of command line directives that can
-    be used to modify or display information about the running instance of the
-    web server.&nbsp; Each of these directives must be preceded by the keyword
-    APACHE2:</p>
-
-    <ul>
-      <li>RESTART - Instructs Apache to terminate all running worker threads as
-        they become idle, reread the configuration file and restart each worker
-        thread based on the new configuration.</li>
-      <li>VERSION - Displays version information about the currently running
-        instance of Apache.</li>
-      <li>MODULES - Displays a list of loaded modules both built-in and
-        external.</li>
-      <li>DIRECTIVES - Displays a list of all available directives.</li>
-      <li>SETTINGS - Enables or disables the thread status display on the
-        console.&nbsp; When enabled, a status of the number of running threads
-        is displayed along with their status.</li>
-      <li>SHUTDOWN - Terminates the running instance of the Apache web server.</li>
-    </ul>
-
-    <h2><a id="use" name="use">Configuring Apache for
-    NetWare</a></h2>
-    Apache is configured by files in the <samp>conf</samp>
-    directory. These are the same as files used to configure the
-    Unix version, but there are a few different directives for
-    Apache on NetWare. See the <a href="./">Apache
-    documentation</a> for all the available directives. 
-
-    <p>The main differences in Apache for NetWare are:</p>
-
-    <ul>
-      <li>
-        <p>Because Apache for NetWare is multithreaded, it does not
-        use a separate process for each request, as Apache does in some Unix
-        implementations. Instead there are only threads running: a parent
-        thread, and a multiple child threads which handle the requests.&nbsp; So the "process"-management directives are
-        different:</p>
-
-        <p><a
-        href="mod/mpm_netware.html#maxrequestsperchild">MaxRequestsPerChild</a>
-        - Like the Unix directive, this controls how many requests
-        a worker thread will serve before exiting. The recommended default, <code>MaxRequestsPerChild
-        0</code>, causes the thread to continue servicing request indefinitely.&nbsp;
-        It is recommended on NetWare, unless there is some specific reason, that
-        this directive always remain set to 0.&nbsp;&nbsp;</p>
-
-        <p><a
-        href="mod/mpm_netware.html#startthreads">StartThreads</a> -
-        This directive tells the server how many
-        threads it should start initially. The recommended default is <code>StartThreads
-        50</code>.</p>
-        
-        <p><a
-        href="mod/mpm_netware.html#minsparethreads">MinSpareThreads</a> -
-        This directive instructs the server to spawn additional worker threads
-        if the number of idle threads ever falls below this value. The recommended default is
-        <code>MinSpareThreads 10</code>.</p>
-        
-        <p><a
-        href="mod/mpm_netware.html#maxsparethreads">MaxSpareThreads</a> -
-        This directive instructs the server to begin terminating worker threads
-        if the number of idle threads ever exceeds this value. The recommended default is
-        <code>MaxSpareThreads 100</code>.</p>
-        
-        <p><a
-        href="mod/mpm_netware.html#maxthreads">MaxThreads</a> -
-        This directive limits the total number of work threads to a maximum
-        value. The recommended default is <code>ThreadsPerChild 250</code>.</p>
-        
-        <p><a 
-        href="mod/mpm_netware.html#threadstacksize">ThreadStackSize</a>
-        - This directive tells the server what size of stack to use
-        for the individual worker thread. The recommended default is
-        <code>ThreadStackSize 65536</code>.</p>
-      </li>
-
-      <li>
-        <p>The directives that accept filenames as arguments now
-        must use NetWare filenames instead of Unix ones. However,
-        because Apache uses Unix-style names internally, you must
-        use forward slashes, not backslashes. It is recommended that all rooted
-        file paths begin with a volume name.&nbsp; If omitted, Apache will
-        assume the SYS: volume.</p>
-      </li>
-
-      <li>
-        <p>Apache for NetWare has the ability to load modules at
-        runtime, without recompiling the server. If Apache is
-        compiled normally, it will install a number of optional
-        modules in the <code>\Apache2\modules</code> directory. To
-        activate these, or other modules, the <a
-        href="mod/mod_so.html#loadmodule">LoadModule</a> directive
-        must be used. For example, to active the status module, use
-        the following (in addition to the status-activating
-        directives in <code>access.conf</code>):</p>
-<pre>
-    LoadModule status_module modules/status.nlm
-</pre>
-
-        <p>Information on <a
-        href="mod/mod_so.html#creating">creating loadable
-        modules</a> is also available.</p>
-      </li>
-    </ul>
-
-    <h2><a id="comp" name="comp">Compiling Apache for
-    NetWare</a></h2>
-
-    <p>Compiling Apache requires MetroWerks CodeWarrior 6.x or
-    higher to be properly installed.&nbsp; Once Apache has been built, it needs to be installed on a NetWare
-    volume's root directory. The default is the
-    <code>sys:/Apache2</code> directory.</p>
-
-    <p>Before running the server you must fill out the conf
-    directory. Copy the file HTTPD-STD.CONF from the distribution conf
-    directory and rename it to HTTPD.CONF. Edit the HTTPD.CONF file searching for all @@<i>Value</i>@@ markers
-        and replacing them with the appropriate setting. Copy over
-    the conf/magic and conf/mime.types files as well.</p>
-
-    
-    <p><b><u>
-
-    
-	Requirements:&nbsp;</u></b></p>
-    <p>
-	The following development tools are required to build Apache 2.0
-	for NetWare:</p>
-    <ul>
-      <li>Metrowerks CodeWarrior 6.0 or higher with the <a href="http://developer.novell.com/ndk/cwpdk.htm"> NetWare PDK
-        3.0 </a>
-   or higher.&nbsp;</li>
-      <li><a href="http://developer.novell.com/ndk/libc.htm">NetWare Libraries
-        for C (LibC)</a></li>
-      <li><a href="http://developer.novell.com/ndk/ws2comp.htm">WinSock 2
-        Developer Components for NetWare</a></li>
-      <li>To build using either the project file or the make files, requires an AWK utility (awk, gawk or
-        similar).&nbsp; AWK can be downloaded from&nbsp;&nbsp; <a href="http://developer.novell.com/ndk/apache.htm">http://developer.novell.com/ndk/apache.htm</a>. The
-   utility must be found in your windows path and must be named awk.exe.&nbsp;</li>
-      <li>To build using the makefiles, you will need GNU make version 3.78.1 (GMake)
-        available at <a href="http://developer.novell.com/ndk/apache.htm">http://developer.novell.com/ndk/apache.htm</a>.&nbsp;</li>
-    </ul>
-    <p><b><u>Building Apache using the Metrowerks Project Files:&nbsp;</u></b></p>
-
-    <p>All major pieces of Apache and APR are built using the
-    ApacheNW.mcp and LibAprNW.mcp project files. This includes modules such as
-    status, info, proxy, etc.</p>
-
-    <ul>
-      <li>Set the environment variable &quot;NovellLibC&quot; to the
-        location of the NetWare Libraries for C SDK (ex. Set NovellLibC=c:\novell\ndk\libc).</li>
-      <li>Make sure that the path to the CodeWarrior command line tools (MWCCNLM.exe,
-        MWLDNLM.exe) has been included in the system's PATH environment
-        variable.</li>
-      <li>Make sure that the path to the AWK utility has been included in the
-        system's PATH environment variable.</li>
-      <li>Download the source code and unzip to an appropriate directory on
-     your workstation.&nbsp;</li>
-      <li>Change directory to \httpd\srclib\apr\build and run the batch file
-     prebuildnw.bat.  The batch file will setup the build environment
-     for building the APR libraries.  It will also run 2 AWK scripts
-     that will generate the export files for APR.</li>
-      <li>Change directory to \httpd\srclib\apr and extract the project file
-        LIBAPRNW.mcp from the LIBAPRNW.mcp.zip file.&nbsp;</li>
-      <li>Open the LIBAPRNW.mcp project file in the Metrowerks IDE.</li>
-      <li>Select the target "Build Util - Gen URL Delim" and build the target.
-     This target will produce the NLM &quot;GENURI.nlm&quot;&nbsp;</li>
-      <li>Copy the file GENURI.nlm to the SYS: volume of a NetWare server and 
-     run using the following command:&nbsp;
-        <ul>
-          <li>SYS:\genuri&nbsp; &gt; sys:\uri_delims.h&nbsp;</li>
-        </ul>
-      </li>
-      <li>Copy the file "uri_delims.h" to the directory \httpd\srclib\apr-util\uri
-     on the build machine.&nbsp;</li>
-      <li>Select the target "APR Debug NLM&quot; or &quot;APR Release NLM&quot; in the IDE and build.  This will 
-     produce the file APRLIB.nlm.&nbsp;
-        <ul>
-          <li><i>OPTIONAL</i>: Select any of the LIB targets to produce a
-            statically linkable libraries.&nbsp;</li>
-        </ul>
-      </li>
-      <li>Change directory to \httpd\build and run the batch file prebuildnw.bat.
-     This batch file will setup the build environment for building the
-     APACHE.nlm.  It will also run several AWK scripts that will 
-     generate the export files for APACHE.&nbsp;</li>
-      <li>Change directory to \http and extract the project file ApacheNW.mcp
-        from the ApacheNW.mcp.zip file.</li>
-      <li>Open the ApacheNW.mcp project file in the Metrowerks IDE.&nbsp;</li>
-      <li>Select the target "Build Utility - DFTables" and build the target.&nbsp;</li>
-      <li>Select the target "Build Util - Gen Test Chars" and build the target.&nbsp;</li>
-      <li>Copy the files "GENCHARS.nlm" and "DFTABLES.nlm" to the SYS:
-     volume of a NetWare server and run using the following commands:&nbsp;
-        <ul>
-          <li>SYS:\genchars &gt; sys:\test_char.h&nbsp;</li>
-          <li>SYS:\dftables&nbsp; &gt; sys:\chartables.c&nbsp;</li>
-        </ul>
-      </li>
-      <li>Copy the files "test_char.h" and "chartables.c" to the directory
-     \httpd\os\netware on the build machine.&nbsp;</li>
-      <li>Select the target "Apache Full Debug&quot; or &quot;Apache Full
-        Release&quot; in the IDE and build.  This will
-     produce the file APACHE2.nlm along with all of the external module NLMs. </li>
-    </ul>
-
-    <p><b><u>Building Apache using the NetWare makefiles:&nbsp;</u></b></p>
-    <ul>
-      <li>Set the environment variable &quot;NOVELLLIBC&quot; to the
-        location of the NetWare Libraries for C SDK (ex. Set NOVELLLIBC=c:\novell\ndk\libc).</li>
-      <li>Set the environment variable &quot;METROWERKS&quot; to the
-        location where you installed the Metrowerks CodeWarrior compiler (ex. Set
-        METROWERKS=C:\Program Files\Metrowerks\CodeWarrior).&nbsp; If you
-        installed to the default location C:\Program
-        Files\Metrowerks\CodeWarrior, you don't need to set this.</li>
-      <li>Set the environment variable &quot;AP_WORK&quot; to the full path of
-        the \httpd directory.</li>
-      <li>Set the environment variable &quot;APR_WORK&quot; to the full path of
-        the \httpd\srclib\apr directory.</li>
-      <li>Make sure that the path to the AWK utility and the GNU make utility (gmake.exe)
-        have been included in the
-        system's PATH environment variable.</li>
-      <li>Download the source code and unzip to an appropriate directory on
-     your workstation.</li>
-      <li>Change directory to \httpd\srclib\apr-util\uri and build GENURI.nlm by
-        running &quot;gmake -f nwgnumakefile&quot;</li>
-      <li>Copy the file GENURI.nlm to the SYS: volume of a NetWare server and 
-     run using the following command:&nbsp;
-        <ul>
-          <li>SYS:\genuri&nbsp; &gt; sys:\uri_delims.h&nbsp;</li>
-        </ul>
-      </li>
-      <li>Copy the file "uri_delims.h" to the directory \httpd\srclib\apr-util\uri
-     on the build machine.&nbsp;</li>
-      <li>Change directory to \httpd\srclib\apr and build APR by running &quot;gmake
-        -f nwgnumakefile&quot;</li>
-      <li>Change directory to \httpd\srclib\pcre and build DFTABLES.nlm by
-        running &quot;gmake -f nwgnumakefile&quot;&nbsp;</li>
-      <li>Change directory to \httpd\server and build GNECHARS.nlm by running
-        &quot;gmake -f nwgnumakefile&quot;</li>
-      <li>Copy the files "GENCHARS.nlm" and "DFTABLES.nlm" from their respective
-        directories to the SYS:
-     volume of a NetWare server and run them using the following commands:&nbsp;
-        <ul>
-          <li>SYS:\genchars &gt; sys:\test_char.h&nbsp;</li>
-          <li>SYS:\dftables&nbsp; &gt; sys:\chartables.c&nbsp;</li>
-        </ul>
-      </li>
-      <li>Copy the files "test_char.h" and "chartables.c" to the directory
-     \httpd\os\netware on the build machine.&nbsp;</li>
-      <li>Change directory to \httpd and build Apache by running &quot;gmake -f
-        nwgnumakefile.&quot;&nbsp; You can create a distribution directory by
-        adding an install parameter to the command (ex. gmake -f nwgnumakefile
-        install).</li>
-    </ul>
-
-    <p><u>Additional make options</u></p>
-    <ul>
-      <li>gmake -f nwgnumakefile - Builds release versions of all of the
-        binaries and copies them to a \release destination directory.</li>
-      <li>gmake -f nwgnumakefile DEBUG=1 - Builds debug versions of all of the
-        binaries and copies them to a \debug destination directory.</li>
-      <li>gmake -f nwgnumakefile install - Creates a complete Apache
-        distribution with binaries, docs and additional support files in a
-        \dist\Apache2 directory.</li>
-      <li>gmake -f nwgnumakefile installdev - Same as install but also creates a
-        \lib and \include directory in the destination directory and copies
-        headers and import files.</li>
-      <li>gmake -f nwgnumakefile clean - Cleans all object files and binaries
-        from the \release or \debug build areas depending on whether DEBUG has
-        been defined.</li>
-      <li>gmake -f nwgnumakefile clobber_all - Same as clean and also deletes
-        the distribution directory if it exists.</li>
-    </ul>
-
-    <hr />
-    <!--#include virtual="footer.html" -->
-  </body>
-</html>
-
diff --git a/docs/manual/platform/perf-hp.html b/docs/manual/platform/perf-hp.html
deleted file mode 100644
index 9a88c4b..0000000
--- a/docs/manual/platform/perf-hp.html
+++ /dev/null
@@ -1,100 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta name="generator" content="HTML Tidy, see www.w3.org" />
-
-    <title>Running a High-Performance Web Server on HPUX</title>
-  </head>
-  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-
-  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-  vlink="#000080" alink="#FF0000">
-    <a id="initial" name="initial">&nbsp;</a> 
-    <!--#include virtual="header.html" -->
-     
-
-    <h1 align="CENTER">Running a High-Performance Web Server for
-    HPUX</h1>
-<pre>
-Date: Wed, 05 Nov 1997 16:59:34 -0800
-From: Rick Jones &lt;<a
-href="mailto:raj@cup.hp.com">raj@cup.hp.com</a>&gt;
-Reply-To: raj@cup.hp.com
-Organization: Network Performance
-Subject: HP-UX tuning tips
-</pre>
-    Here are some tuning tips for HP-UX to add to the tuning page. 
-
-    <p>For HP-UX 9.X: Upgrade to 10.20<br />
-     For HP-UX 10.[00|01|10]: Upgrade to 10.20</p>
-
-    <p>For HP-UX 10.20:</p>
-
-    <p>Install the latest cumulative ARPA Transport Patch. This
-    will allow you to configure the size of the TCP connection
-    lookup hash table. The default is 256 buckets and must be set
-    to a power of two. This is accomplished with adb against the
-    *disc* image of the kernel. The variable name is tcp_hash_size.
-    Notice that it's critically important that you use "W" to write
-    a 32 bit quantity, not "w" to write a 16 bit value when
-    patching the disc image because the tcp_hash_size variable is a
-    32 bit quantity.</p>
-
-    <p>How to pick the value? Examine the output of <a
-    href="ftp://ftp.cup.hp.com/dist/networking/tools/connhist">ftp://ftp.cup.hp.com/dist/networking/tools/connhist</a>
-    and see how many total TCP connections exist on the system. You
-    probably want that number divided by the hash table size to be
-    reasonably small, say less than 10. Folks can look at HP's
-    SPECweb96 disclosures for some common settings. These can be
-    found at <a
-    href="http://www.specbench.org/">http://www.specbench.org/</a>.
-    If an HP-UX system was performing at 1000 SPECweb96 connections
-    per second, the TIME_WAIT time of 60 seconds would mean 60,000
-    TCP "connections" being tracked.</p>
-
-    <p>Folks can check their listen queue depths with <a
-    href="ftp://ftp.cup.hp.com/dist/networking/misc/listenq">ftp://ftp.cup.hp.com/dist/networking/misc/listenq</a>.</p>
-
-    <p>If folks are running Apache on a PA-8000 based system, they
-    should consider "chatr'ing" the Apache executable to have a
-    large page size. This would be "chatr +pi L &lt;BINARY&gt;."
-    The GID of the running executable must have MLOCK privileges.
-    Setprivgrp(1m) should be consulted for assigning MLOCK. The
-    change can be validated by running Glance and examining the
-    memory regions of the server(s) to make sure that they show a
-    non-trivial fraction of the text segment being locked.</p>
-
-    <p>If folks are running Apache on MP systems, they might
-    consider writing a small program that uses mpctl() to bind
-    processes to processors. A simple pid % numcpu algorithm is
-    probably sufficient. This might even go into the source
-    code.</p>
-
-    <p>If folks are concerned about the number of FIN_WAIT_2
-    connections, they can use nettune to shrink the value of
-    tcp_keepstart. However, they should be careful there -
-    certainly do not make it less than oh two to four minutes. If
-    tcp_hash_size has been set well, it is probably OK to let the
-    FIN_WAIT_2's take longer to timeout (perhaps even the default
-    two hours) - they will not on average have a big impact on
-    performance.</p>
-
-    <p>There are other things that could go into the code base, but
-    that might be left for another email. Feel free to drop me a
-    message if you or others are interested.</p>
-
-    <p>sincerely,</p>
-
-    <p>rick jones<br />
-     <a
-    href="http://www.cup.hp.com/netperf/NetperfPage.html">http://www.cup.hp.com/netperf/NetperfPage.html</a></p>
-    <hr />
-
-    <h3 align="CENTER">Apache HTTP Server Version 1.3</h3>
-    <a href="./"><img src="../images/index.gif" alt="Index" /></a>
-    <a href="../"><img src="../images/home.gif" alt="Home" /></a>
-  </body>
-</html>
-
diff --git a/docs/manual/platform/win_compiling.html b/docs/manual/platform/win_compiling.html
deleted file mode 100644
index 5a41454..0000000
--- a/docs/manual/platform/win_compiling.html
+++ /dev/null
@@ -1,321 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta name="generator" content="HTML Tidy, see www.w3.org" />
-
-    <title>Compiling Apache for Microsoft Windows</title>
-  </head>
-  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-
-  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-  vlink="#000080" alink="#FF0000">
-    <!--#include virtual="header.html" -->
-
-    <h1 align="center">Compiling Apache for Microsoft Windows</h1>
-
-    <p>There are many important points before you begin compiling
-    Apache. See <a href="windows.html">Using Apache with Microsoft
-    Windows</a> before you begin.</p>
-
-    <h3><a id="requirements"
-    name="requirements">Requirements</a></h3>
-
-    <p>Compiling Apache requires the following environment to be
-    properly installed;</p>
-
-    <ul>
-      <li>Disk Space<br />
-      <br />
-       Make sure you have at least 50 MB of free disk space
-      available. After installation Apache requires approximately
-      10 MB of disk space, plus space for log and cache files,
-      which can grow rapidly. The actual disk space requirements
-      will vary considerably based on your chosen configuration and
-      any third-party modules or libraries.<br />
-      <br />
-      </li>
-
-      <li>
-        Microsoft Visual C++ 5.0 or higher.<br />
-        <br />
-         Apache can be built using the command line tools, or from
-        within the Visual Studio IDE Workbench. the command line
-        tools are configured with the vcvars32 batch file: 
-<pre>
-  "c:\Program Files\DevStudio\VC\Bin\vcvars32.bat"
-</pre>
-      </li>
-
-      <li>
-        The Windows Platform SDK.<br />
-        <br />
-         Visual C++ 5.0 need the updated Microsoft Windows Platform
-        SDK to enable some Apache features. For command line
-        builds, the Platform SDK environment is prepared by the
-        setenv batch file: 
-<pre>
-  "c:\Program Files\Platform SDK\setenv.bat"
-</pre>
-        The Platform SDK files distributed with Visual C++ 6.0 and
-        later are sufficient, so those users may skip this
-        requirement.<br />
-        <br />
-         <strong>Note</strong> that the Windows Platform SDK update
-        is required to enable all supported mod_isapi features.
-        Without a recent update, Apache will issue warnings under
-        MSVC++ 5.0 that some mod_isapi features will be disabled.
-        Look for the update at <a
-        href="http://msdn.microsoft.com/downloads/sdks/platform/platform.asp">
-        http://msdn.microsoft.com/downloads/sdks/platform/platform.asp</a>.<br />
-        <br />
-      </li>
-
-      <li>The awk utility (awk, gawk or similar.)<br />
-      <br />
-       To install Apache within the build system, several files are
-      modified using the awk utility. awk was chosen since it is a
-      very small download (compared with Perl or WSH/VB) and
-      accomplishes the task. Brian Kernighan's <a
-      href="http://cm.bell-labs.com/cm/cs/who/bwk/">http://cm.bell-labs.com/cm/cs/who/bwk/</a>
-      site has a compiled native Win32 binary, <a
-      href="http://cm.bell-labs.com/cm/cs/who/bwk/awk95.exe">http://cm.bell-labs.com/cm/cs/who/bwk/awk95.exe</a>
-      which you should name awk.exe rather than awk95.exe.<br />
-       Note that Developer Studio IDE will only find awk.exe from
-      the <u>T</u>ools menu <u>O</u>ptions... Directories settings
-      for the Executable files. Add the path for awk.exe to this
-      list, as needed.<br />
-      <br />
-      </li>
-    </ul>
-
-    <h3><a id="commandbuild" name="commandbuild">Command-Line
-    Build</a></h3>
-
-    <p>First, unpack the Apache distribution into an appropriate
-    directory. Open a command-line prompt and cd to that
-    directory.</p>
-
-    <p>The master Apache makefile instructions are contained in the
-    <code>Makefile.win</code> file. To compile Apache on Windows
-    NT, simply use one of the following commands to compiled the
-    release or debug build, respectively:</p>
-<pre>
-    nmake /f Makefile.win _apacher
-
-    nmake /f Makefile.win _apached
-</pre>
-
-    <p>Either command will compile Apache. The latter will include
-    debugging information in the resulting files, making it easier
-    to find bugs and track down problems.</p>
-
-    <h3><a id="workspacebuild" name="workspacebuild">Developer
-    Studio Workspace IDE Build</a></h3>
-
-    <p>Apache can also be compiled using VC++'s VisualStudio
-    development environment. To simplify this process, a
-    VisualStudio workspace, Apache.dsw, is provided. This workspace
-    exposes the entire list of working .dsp projects that are
-    required for the complete Apache binary release. It includes
-    dependencies between the projects to assure that they are built
-    in the appropriate order.</p>
-
-    <p>Open the Apache.dsw workspace, and choose InstallBin
-    (Release or Debug build, as desired) as the Active Project.
-    InstallBin causes all related project to be build, and then
-    invokes Makefile.win to move the compiled executables and dlls.
-    You may personalize the INSTDIR= choice by changing
-    InstallBin's Settings, General tab, Build command line entry.
-    INSTDIR defaults to the /Apache2 directory.</p>
-
-    <p>The .dsp project files are distributed in Visual C++ 6.0
-    format. Visual C++ 5.0 (97) will recognize them with the single
-    exception of the /ZI flag (which corresponds to the VC 5.0 /Zi
-    flag for debugging symbols.) To quickly prepare the .dsp files
-    for the Visual Studio 5.0 (97), you can run this command from
-    the top-level httpd-2.0 directory:</p>
-<pre>
-     perl srclib\apr\build\cvtdsp.pl -5
-</pre>
-    You must type this command from the <em>top level</em>
-    directory of the httpd source tree. Every VC6 .dsp project file
-    within the current directory and below will be listed as it is
-    converted. If you contribute back a patch that revises project
-    files, please convert them back with the the -6 option instead
-    of -5, which returns the project files to Visual Studio 6.0
-    format.<br />
-     <br />
-     
-
-    <h3><a id="projectcomponents" name="projectcomponents">Project
-    Components</a></h3>
-
-    <p>The Apache.dsw workspace and makefile.win nmake script both
-    build the .dsp projects of the Apache server in the following
-    sequence:</p>
-
-    <ol>
-      <li><code>srclib\apr\apr.dsp</code></li>
-
-      <li><code>srclib\apr\libapr.dsp</code></li>
-
-      <li><code>srclib\apr-util\uri\gen_uri_delims.dsp</code></li>
-
-      <li><code>srclib\apr-util\aprutil.dsp</code></li>
-
-      <li><code>srclib\apr-util\libaprutil.dsp</code></li>
-
-      <li><code>srclib\pcre\dftables.dsp</code></li>
-
-      <li><code>srclib\pcre\pcre.dsp</code></li>
-
-      <li><code>srclib\pcre\pcreposix.dsp</code></li>
-
-      <li><code>srclib\expat-lite\libexpat.dsp</code></li>
-
-      <li><code>server\gen_test_char.dsp</code></li>
-
-      <li><code>libhttpd.dsp</code></li>
-
-      <li><code>Apache.dsp</code></li>
-    </ol>
-
-    <p>In addition, the <code>os\win32</code> subdirectory contains
-    project files for the optional modules.</p>
-
-    <ol>
-      <li><code>modules\aaa\mod_auth_dbm.dsp</code></li>
-
-      <li><code>modules\aaa\mod_auth_anon.dsp</code></li>
-
-      <li><code>modules\aaa\mod_auth_digest.dsp</code></li>
-
-      <li><code>modules\cache\mod_file_cache.dsp</code></li>
-
-      <li><code>modules\dav\fs\mod_dav_fs.dsp</code></li>
-
-      <li><code>modules\dav\main\mod_dav.dsp</code></li>
-
-      <li><code>modules\generators\mod_info.dsp</code></li>
-
-      <li><code>modules\generators\mod_status.dsp</code></li>
-
-      <li><code>modules\mappers\mod_rewrite.dsp</code></li>
-
-      <li><code>modules\mappers\mod_speling.dsp</code></li>
-
-      <li><code>modules\metadata\mod_usertrack.dsp</code></li>
-
-      <li><code>modules\metadata\mod_cern_meta.dsp</code></li>
-
-      <li><code>modules\metadata\mod_headers.dsp</code></li>
-
-      <li><code>modules\metadata\mod_expires.dsp</code></li>
-
-      <li><code>modules\ssl\mod_ssl.dsp</code></li>
-
-      <li><code>modules\tls\mod_tls.dsp</code></li>
-    </ol>
-
-    <p>The <code>support\</code> folder contains project files for
-    additional programs that are not part of the Apache runtime,
-    but are used by the administrator to test Apache and maintain
-    password and log files.</p>
-
-    <ol>
-      <li><code>support\ab.dsp</code></li>
-
-      <li><code>support\htdigest.dsp</code></li>
-
-      <li><code>support\htpasswd.dsp</code></li>
-
-      <li><code>support\logresolve.dsp</code></li>
-
-      <li><code>support\rotatelogs.dsp</code></li>
-
-      <li><code>support\win32\wintty.dsp</code></li>
-    </ol>
-
-    <p>Once Apache has been compiled, it needs to be installed in
-    its server root directory. The default is the
-    <code>\Apache2</code> directory, of the same drive.</p>
-
-    <p>To build and install all the files into the desired folder
-    <em>dir</em> automatically, use one the following nmake
-    commands:</p>
-<pre>
-    nmake /f Makefile.win installr INSTDIR=<em>dir</em>
-
-    nmake /f Makefile.win installd INSTDIR=<em>dir</em>
-</pre>
-    The <em>dir</em> argument to INSTDIR gives the installation
-    directory; it can be omitted if Apache is to be installed into
-    <samp>\Apache2</samp>.<br />
-     <br />
-     
-
-    <p>This will install the following:</p>
-
-    <ul>
-      <li><code><em>dir</em>\bin\Apache.exe</code> - Apache
-      executable</li>
-
-      <li><code><em>dir</em>\bin\htdigest.exe</code> - Digest auth
-      password file utility</li>
-
-      <li><code><em>dir</em>\bin\htpasswd.exe</code> - Basic auth
-      password file utility</li>
-
-      <li><code><em>dir</em>\bin\logresolve.exe</code> - Log file
-      dns name lookup utility</li>
-
-      <li><code><em>dir</em>\bin\rotatelogs.exe</code> - Log file
-      cycling utility</li>
-
-      <li><code><em>dir</em>\bin\wintty.exe</code> - Console window
-      utility</li>
-
-      <li><code><em>dir</em>\bin\libapr.dll</code> - Apache
-      Portable Runtime shared library</li>
-
-      <li><code><em>dir</em>\bin\libaprutil.dll</code> - Apache
-      Utility Runtime shared library</li>
-
-      <li><code><em>dir</em>\bin\libhttpd.dll</code> - Apache Core
-      library</li>
-
-      <li><code><em>dir</em>\modules\mod_*.so</code> - Loadable
-      Apache modules</li>
-
-      <li><code><em>dir</em>\conf</code> - Configuration
-      directory</li>
-
-      <li><code><em>dir</em>\logs</code> - Empty logging
-      directory</li>
-
-      <li><code><em>dir</em>\include</code> - C language header
-      files</li>
-
-      <li><code><em>dir</em>\lib</code> - Static Link library
-      files</li>
-
-      <li><code><em>dir</em>\libexec</code> - DLL link library
-      files</li>
-    </ul>
-
-    <p><strong>Warning about building Apache from the development
-    tree</strong></p>
-
-    <p>Only the .dsp files are maintained between release builds.
-    The .mak files are NOT regenerated, due to the tremendous waste
-    of reviewer's time. Therefore, you cannot rely on the NMAKE
-    commands above to build revised .dsp project files unless you
-    then export all .mak files yourself from the project. This is
-    unnecessary if you build from within the Microsoft
-    DeveloperStudio environment.</p>
-    <!--#include virtual="footer.html" -->
-  </body>
-</html>
-
diff --git a/docs/manual/platform/win_service.html b/docs/manual/platform/win_service.html
deleted file mode 100644
index 05aa7f3..0000000
--- a/docs/manual/platform/win_service.html
+++ /dev/null
@@ -1,369 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta name="generator" content="HTML Tidy, see www.w3.org" />
-
-    <title>Running Apache for Windows as a Service</title>
-  </head>
-  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-
-  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-  vlink="#000080" alink="#FF0000">
-    <!--#include virtual="header.html" -->
-
-    <h1 align="CENTER">Running Apache for Windows as a Service</h1>
-
-    <p>Apache can be run as a service on Windows NT/2000. (There is
-    also some HIGHLY EXPERIMENTAL support for similar behavior on
-    <a href="#win95svc">Windows 95/98</a>, introduced with Apache
-    1.3.13).</p>
-
-    <p>Installing Apache as a service should only be done once you
-    can successfully run it in a console window. See <a
-    href="windows.html">Using Apache with Microsoft Windows</a>
-    before you attempt to install or run Apache as a service.
-    Changes to the httpd.conf file should always be followed by
-    starting Apache as a console window. If this succeeds, the
-    service should succeed.</p>
-
-    <p><strong>NOTE: Prior to version 1.3.13, the configuration was
-    <em>not tested</em> prior to performing the
-    installation</strong>, and a lack of service dependencies often
-    caused the console window to succeed, but the service would
-    still fail. See <a href="#service">below</a> if you are having
-    problems running a version of Apache prior to 1.3.13 to resolve
-    the issue. If you have this problem with version 1.3.13 or
-    greater, first try uninstalling (-u) and re-installing (-i) the
-    Apache service.</p>
-    <hr />
-
-    <p>To start Apache as a service, you first need to install it
-    as a service. Multiple Apache services can be installed, each
-    with a different name and configuration. To install the default
-    Apache service named "Apache", run the "Install Apache as
-    Service (NT only)" option from the Start menu. Once this is
-    done you can start the "Apache" service by opening the Services
-    window (in the Control Panel), selecting Apache, then clicking
-    on Start. Apache will now be running, hidden in the background.
-    You can later stop Apache by clicking on Stop. As an
-    alternative to using the Services window, you can start and
-    stop the "Apache" service from the command line with</p>
-<pre>
-  NET START APACHE
-  NET STOP APACHE
-</pre>
-
-    <p>See <a href="#signal">Controlling Apache as a Service</a>
-    for more information on installing and controlling Apache
-    services.</p>
-
-    <p><strong>Apache, unlike many other Windows NT/2000 services,
-    logs any errors to it's own error.log file in the logs folder
-    within the Apache server root folder. You will <em>not</em>
-    find Apache error details in the Windows NT Event
-    Log.</strong></p>
-
-    <p>After starting Apache as a service (or if you have trouble
-    starting it) you can test it using the same <a
-    href="windows.html#cmdline">procedure</a> as for running in a
-    console window. Remember to use the command:</p>
-<pre>
-  apache -n "service name"
-</pre>
-
-    <p>to assure you are using the service's configuration.</p>
-
-    <h2><a id="service" name="service">Running Apache for Windows
-    as a Service</a></h2>
-
-    <p><strong>Note: The -n option to specify a service name is
-    only available with Apache 1.3.7 and later.</strong> Earlier
-    versions of Apache only support the default service name
-    'Apache'.</p>
-
-    <p>You can install Apache as a Windows NT service as
-    follows:</p>
-<pre>
-    apache -i -n "service name"
-</pre>
-
-    <p>To install a service to use a particular configuration,
-    specify the configuration file when the service is
-    installed:</p>
-<pre>
-    apache -i -n "service name" -f "\my server\conf\my.conf"
-</pre>
-
-    <p>To remove an Apache service, use:</p>
-<pre>
-    apache -u -n "service name"
-</pre>
-
-    <p>The default "service name", if one is not specified, is
-    "Apache".</p>
-
-    <p>Once a service is installed, you can use the <samp>-n</samp>
-    option, in conjunction with other options, to refer to a
-    service's configuration file. For example:</p>
-
-    <p>To test a service's configuration file:</p>
-<pre>
-    apache -n "service name" -t
-</pre>
-
-    <p>To start a console Apache using a service's configuration
-    file:</p>
-<pre>
-    apache -n "service name"
-</pre>
-
-    <h2><a id="depends" name="depends">Important Note on service
-    dependencies:</a></h2>
-
-    <p>Prior to Apache release 1.3.13, the dependencies required to
-    successfully start an installed service were not configured.
-    After installing a service using earlier versions of Apache,
-    you must follow these steps:</p>
-<pre>
-    Run regedt32
-    Select <u>W</u>indow - "HKEY_LOCAL_MACHINE on Local Machine" from the menu
-    Double-click to open the SYSTEM, then the CurrentControlSet keys
-    Scroll down and click on the Apache servicename
-    Select <u>E</u>dit - Add <u>V</u>alue... from the menu
-    Fill in the Add Value dialog with 
-        <u>V</u>alue Name: DependOnGroup 
-        <u>D</u>ata Type: REG_MULTI_SZ
-        and click OK
-    Leave the Multi-String Editor dialog empty and click OK
-    Select <u>E</u>dit - Add <u>V</u>alue... from the menu
-    Fill in the Add Value dialog with 
-        <u>V</u>alue Name: DependOnService
-        <u>D</u>ata Type: REG_MULTI_SZ
-        and click OK
-    Type the following list (one per line) in the Multi-String Editor dialog
-        Tcpip
-        Afd
-        and click OK
-</pre>
-
-    <p>If you are using COM or DCOM components from a third party
-    module, ISAPI, or other add-in scripting technologies such as
-    ActiveState Perl, you may also need to add the entry Rpcss to
-    the DependOnService list. To avoid exposing the TCP port 135
-    when it is unnecessary, Apache does not create that entry upon
-    installation. Follow the directions above to find or create the
-    DependOnService value, double click that value if it already
-    exists, and add the Rpcss entry to the list.</p>
-
-    <h2>User Account for Apache Service to Run As (NT/2000)</h2>
-
-    <p>When Apache is first installed as a service (e.g. with the
-    -i option) it will run as user "System" (the LocalSystem
-    account). There should be few issues if all resources for the
-    web server reside on the local system, but it has broad
-    security privilages to affect the local machine!</p>
-
-    <blockquote>
-      LocalSystem is a very privileged account locally, so you
-      shouldn't run any shareware applications there. However, it
-      has no network privileges and cannot leave the machine via
-      any NT-secured mechanism, including file system, named pipes,
-      DCOM, or secure RPC.
-    </blockquote>
-
-    <p><strong>NEVER grant network privilages to the SYSTEM
-    account!</strong> Create a new user account instead, grant the
-    appropriate privilages to that user, and use the the 'Log On
-    As:' option. Select the Start Menu -&gt; Settings -&gt; Control
-    Panel -&gt; Services -&gt; apache service ... and click the
-    "Startup" button to access this setting.</p>
-
-    <blockquote>
-      A service that runs in the context of the LocalSystem account
-      inherits the security context of the SCM. It is not
-      associated with any logged-on user account and does not have
-      credentials (domain name, user name, and password) to be used
-      for verification.
-    </blockquote>
-
-    <p>The SYSTEM account has no privilages to the network, so
-    shared pages or a shared installation of Apache is invisible to
-    the service. If you intend to use <em>any</em> network
-    resources, the following steps should help:</p>
-
-    <ul>
-      <li>Select Apache from the Control Panel's Service dialog and
-      click Startup.</li>
-
-      <li>Verify that the service account is correct. You may wish
-      to create an account for your Apache services.</li>
-
-      <li>Retype the password and password confirmation.</li>
-
-      <li>Go to User Manager for Domains.</li>
-
-      <li>Click on Policies from the title bar menu, and select
-      User Rights.</li>
-
-      <li>Select the option for Advanced User Rights.</li>
-
-      <li>
-        In the drop-down list, verify that the following rights
-        have been granted to the selected account: 
-
-        <ul>
-          <li>Act as part of the operating system</li>
-
-          <li>Back up files and directories</li>
-
-          <li>Log on as a service</li>
-
-          <li>Restore files and directories</li>
-        </ul>
-      </li>
-
-      <li>Confirm that the selected account is a member of the
-      Users group.</li>
-
-      <li>Confirm the selected account has access to all document
-      and script directories (minimally read and browse
-      access).</li>
-
-      <li>Confirm the selected account has read/write/delete access
-      to the Apache logs directory!</li>
-    </ul>
-
-    <p>If you allow the account to log in as a user, then you can
-    log in yourself and test that the account has the privilages to
-    execute the scripts, read the web pages, and that you can start
-    Apache in a console window. If this works, and you have
-    followed the steps above, Apache should execute as a service
-    with no problems.</p>
-
-    <p><strong>Note: error code 2186</strong> is a good indication
-    that you need to review the 'Log On As' configuration, since
-    the server can't access a required network resource.</p>
-
-    <h2><a id="trouble" name="trouble">Troubleshooting Apache for
-    Windows as a Service</a></h2>
-
-    <p>When starting Apache as a service you may encounter an error
-    message from Windows service manager. For example if you try to
-    start Apache using the Services applet in Windows Control Panel
-    you may get the following message;</p>
-<pre>
-  Could not start the apache service on \\COMPUTER
-  Error 1067; The process terminated unexpectedly.
-</pre>
-
-    <p>You will get this error if there is any problem starting
-    Apache. In order to see what is causing the problem you should
-    follow the instructions for <a
-    href="windows.html#cmdline">Running Apache for Windows from the
-    Command Line</a>.</p>
-
-    <p>Also, Apache 1.3.13 now records startup errors in the
-    Application Event Log under Windows NT/2000, if Apache is run
-    as a service. Run the Event Viewer and select <u>L</u>og ...
-    <u>A</u>pplication to see these events.</p>
-
-    <p><strong>Check the Application Event Log with the Event
-    Viewer in case of any problems, even if no error message pops
-    up to warn you that an error occured.</strong></p>
-
-    <h2><a id="cmdline" name="cmdline">Running Apache for Windows
-    from the Command Line</a></h2>
-    For details on controlling Apache service from the command
-    line, please refer to <a href="windows.html#cmdline">console
-    command line</a> section. 
-
-    <h2><a id="signal" name="signal">Controlling Apache as a
-    Service</a></h2>
-
-    <p>Multiple instances of Apache can be installed and run as
-    services. Signal an installed Apache service to start, restart,
-    or shutdown/stop as follows:</p>
-<pre>
-    apache -n "service name" -k start
-    apache -n "service name" -k restart
-    apache -n "service name" -k shutdown
-    apache -n "service name" -k stop
-</pre>
-
-    <p>For the default "Apache" service, the -n Apache option is
-    still required, since the -k commands without the -n option are
-    directed at Apache running in a console window. The quotes are
-    only required if the service name contains spaces.</p>
-
-    <p><strong>Note: the -k stop alias for the -k shutdown command
-    was introduced in Apache version 1.3.13.</strong> Earlier
-    versions of Apache will only recognize the -k shutdown option.
-    Prior to 1.3.3, Apache did not recognize <em>any</em> -k
-    options at all!</p>
-
-    <p>In addition, you can use the native NT NET command to start
-    and stop Apache services as follows:</p>
-<pre>
-    NET START "service name"
-    NET STOP "service name"
-</pre>
-
-    <p>Again, quotes are only required if the service name contains
-    spaces.</p>
-
-    <h2><a id="win95svc" name="win95svc">HIGHLY EXPERIMENTAL
-    Windows 95/98 Service</a></h2>
-
-    <p><strong>Note: The service options for Windows 95 and 98 are
-    only available with Apache 1.3.13 and later.</strong> Earlier
-    versions of Apache only supported Apache in a console window
-    for Windows 95/98.</p>
-
-    <p>There is some support for Apache on Windows 95/98 to behave
-    in a similar manner as a service on Windows NT/2000. It is
-    <em>highly experimental</em>, if it works (at all) the Apache
-    Sofware Foundation will not attest to it's reliability or
-    future support. Proceed at your own risk!</p>
-
-    <p>Once you have confirmed that Apache runs correctly at the <a
-    href="windows.html#cmdline">Command Prompt</a> you can install,
-    control and uninstall it with the same commands as the Windows
-    NT/2000 version.</p>
-
-    <p>There are, however, significant differences that you should
-    note:</p>
-
-    <p>Apache will attempt to start and if successful it will run
-    in the background. If you run the command</p>
-<pre>
-   Apache -n "service name" -k start
-</pre>
-
-    <p>via a shortcut on your desktop, for example, then if the
-    service starts successfully a console window will flash up but
-    immediately disappears. If Apache detects any errors on startup
-    such as a incorrect entries in the httpd.conf file, then the
-    console window will remain visible. This will display an error
-    message which will be useful in tracking down the cause of the
-    problem.</p>
-
-    <p>Windows 95/98 does not support NET START or NET STOP
-    commands so you must use Apache's Service Control options at a
-    command prompt. You may wish to set up a shortcut for each of
-    these commands so that you can just choose it from the start
-    menu or desktop to perform the required action.</p>
-
-    <p>Apache and Windows 95/98 offer no support for running the
-    Apache service as a specific user with network privilages. In
-    fact, Windows 95/98 offers no security on the local machine,
-    either. This is the simple reason that the Apache Software
-    Foundation never endorses the use of Windows 95/98 as a public
-    httpd server. These facilities exist only to assist the user in
-    developing web content and learning the Apache server, and
-    perhaps as a intranet server on a secured, private network.</p>
-    <!--#include virtual="footer.html" -->
-  </body>
-</html>
-
diff --git a/docs/manual/platform/windows.html b/docs/manual/platform/windows.html
deleted file mode 100644
index d4efa3d..0000000
--- a/docs/manual/platform/windows.html
+++ /dev/null
@@ -1,578 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta name="generator" content="HTML Tidy, see www.w3.org" />
-
-    <title>Using Apache with Microsoft Windows</title>
-  </head>
-  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-
-  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-  vlink="#000080" alink="#FF0000">
-    <!--#include virtual="header.html" -->
-
-    <h1 align="CENTER">Using Apache with Microsoft Windows</h1>
-
-    <p>This document explains how to install, configure and run
-    Apache 2.0 under Microsoft Windows. If you find any bugs, or
-    wish to contribute in other ways, please use our <a
-    href="http://httpd.apache.org/bug_report.html">bug reporting page.</a></p>
-
-    <p>Most of this document assumes that you are installing
-    Windows from a binary distribution. If you want to compile
-    Apache yourself (possibly to help with development, or to track
-    down bugs), see <a href="win_compiling.html">Compiling Apache
-    for Microsoft Windows</a>.</p>
-
-    <p><strong>At this time, support for Windows 95, 98 and ME is
-    incomplete. Apache 2.0 is not expected to work on those
-    platforms at this time.</strong> If you are interested in
-    helping with that effort, please see the developer's site for
-    information on <a href="http://dev.apache.org/">how to get
-    involved</a>. Support will likely be provided at some point in
-    the future, and patches to allow Apache to work on 95, 98 and
-    ME are welcome!</p>
-    <hr />
-
-    <ul>
-      <li><a href="#req">Requirements</a></li>
-
-      <li><a href="#down">Downloading Apache for Windows</a></li>
-
-      <li><a href="#inst">Installing Apache for Windows (binary
-      install)</a></li>
-
-      <li><a href="#run">Running Apache for Windows</a></li>
-
-      <li><a href="#use">Using Apache for Windows</a></li>
-
-      <li><a href="#cmdline">Running Apache for Windows from the
-      Command Line</a></li>
-
-      <li><a href="win_service.html">Running Apache for Windows as
-      a Service</a></li>
-
-      <li><a href="win_service.html#signal">Controlling Apache as a
-      Service</a></li>
-
-      <li><a href="win_compiling.html">Compiling Apache for
-      Microsoft Windows</a></li>
-    </ul>
-    <hr />
-
-    <h2><a id="req" name="req">Requirements</a></h2>
-
-    <p>Apache 2.0 is designed to run on Windows NT 4.0 and Windows
-    2000. The binary installer will only work with the x86 family
-    of processors, such as Intel's. Apache may also run on Windows
-    95, 98 and ME, but these are not tested, and are never
-    recommended for production servers. In all cases TCP/IP
-    networking must be installed.</p>
-
-    <p>If running on Windows 95, the "Winsock2" upgrade MUST BE
-    INSTALLED. "Winsock2" for Windows 95 is available <a
-    href="http://www.microsoft.com/windows95/downloads/">here</a>.</p>
-
-    <p>If running on NT 4.0, installing Service Pack 3 or 6 is
-    recommended, as Service Pack 4 created known issues with TCP/IP
-    and WinSock integrity that were resolved in later Service
-    Packs.</p>
-
-    <h2><a id="down" name="down">Downloading Apache for
-    Windows</a></h2>
-
-    <p>Information on the latest version of Apache can be found on
-    the Apache web server at <a
-    href="http://httpd.apache.org/">http://httpd.apache.org/</a>.
-    This will list the current release, any more recent alpha or
-    beta-test releases, together with details of mirror web and
-    anonymous ftp sites.</p>
-
-    <p>You should download the version of Apache for Windows with
-    the <code>.msi</code> extension. This is a single Microsoft
-    Installer file containing Apache, ready to install and run.
-    There is a seperate <code>.zip</code> file containing _only_
-    the source code, to compile Apache yourself with the Microsoft
-    Visual C++ (Visual Studio) tools.</p>
-
-    <h2><a id="inst" name="inst">Installing Apache for
-    Windows</a></h2>
-
-    <p>Run the Apache <samp>.msi</samp> file you downloaded above.
-    This will ask for:</p>
-
-    <ul>
-      <li>the directory to install Apache into (the default is
-      <code>\Program Files\Apache Group\Apache</code> although you
-      can change this to any other directory)</li>
-
-      <li>the start menu name (default is "Apache Web Server")</li>
-
-      <li>the installation type. The "Typical" option installs
-      everything except the source code. The "Minimum" option does
-      not install the manuals or source code. Choose the "Custom"
-      install if you want to install the source code.</li>
-    </ul>
-
-    <p>During the installation, Apache will configure the files in
-    the <samp>conf</samp> directory for your chosen installation
-    directory. However if any of the files in this directory
-    already exist they will <strong>not</strong> be overwritten.
-    Instead the new copy of the corresponding file will be left
-    with the extension <samp>.default</samp>. So, for example, if
-    <samp>conf\httpd.conf</samp> already exists it will not be
-    altered, but the version which would have been installed will
-    be left in <samp>conf\httpd.conf.default</samp>. After the
-    installation has finished you should manually check to see what is
-    in new in the <samp>.default</samp> file, and if necessary
-    update your existing configuration files.</p>
-
-    <p>Also, if you already have a file called
-    <samp>htdocs\index.html</samp> then it will not be overwritten
-    (no <samp>index.html.default</samp> file will be installed
-    either). This should mean it a safe to install Apache over an
-    existing installation (but you will have to stop the existing
-    server running before doing the installation, then start the
-    new one after the installation is finished).</p>
-
-    <p>After installing Apache, you should edit the configuration
-    files in the <samp>conf</samp> directory as required. These
-    files will be configured during the install ready for Apache to
-    be run from the directory where it was installed, with the
-    documents served from the subdirectory <samp>htdocs</samp>.
-    There are lots of other options which should be set before you
-    start really using Apache. However to get started quickly the
-    files should work as installed.</p>
-
-    <h2><a id="run" name="run">Running Apache for Windows</a></h2>
-    There are two ways you can run Apache: 
-
-    <ul>
-      <li>As a <a href="win_service.html#service">"service"</a>
-      (available on Windows NT/2000, or a pseudo-service on Windows
-      95, 98 or ME). This is the best option if you want Apache to
-      automatically start when you machine boots, and to keep
-      Apache running when you log-off.</li>
-
-      <li>From a <a href="#cmdline">console window</a>. This MUST
-      be used by any administrator to test before to attempting to
-      run as a service.</li>
-    </ul>
-
-    <p>To run Apache from a console window, select the "Start
-    Apache as console app" option from the Start menu (in Apache
-    1.3.4 and earlier, this option was called "Apache Server").
-    This will open a console window and start Apache running inside
-    it. The window will remain active until you stop Apache. To
-    stop Apache running, either select the "Shutdown Apache console
-    app" icon option from the Start menu (this is not available in
-    Apache 1.3.4 or earlier), or see <a href="#signal">Signalling
-    Console Apache when Running</a> for how to control Apache from
-    the command line.</p>
-
-    <p>If the Apache console window closes immediately (or
-    unexpectedly), run the "Command Prompt" from the Start Menu -
-    Programs list. Change to the folder to which you installed
-    Apache, type the command apache, and read the error message.
-    Then change to the logs folder, and review the error.log file
-    for configuration mistakes. If you accepted the defaults when
-    you installed Apache, the commands would be:</p>
-<pre>
-  c:
-  cd "\program files\apache group\apache"
-  apache
-  <samp>Wait for Apache to exit, or press Ctrl+C</samp>
-  cd logs
-  more &lt;error.log
-</pre>
-
-    <p><strong>Complete the steps above before you proceed to
-    attempt to start Apache as a Window NT/2000
-    service!</strong></p>
-
-    <p>To start Apache as a service, you first need to install it
-    as a service. Multiple Apache services can be installed, each
-    with a different name and configuration. To install the default
-    Apache service named "Apache", run the "Install Apache as
-    Service (NT only)" option from the Start menu. Once this is
-    done you can start the "Apache" service by opening the Services
-    window (in the Control Panel), selecting Apache, then clicking
-    on Start. Apache will now be running in the background. You can
-    later stop Apache by clicking on Stop. As an alternative to
-    using the Services window, you can start and stop the "Apache"
-    service from the control line with:</p>
-<pre>
-  NET START APACHE
-  NET STOP APACHE
-</pre>
-
-    <p>See <a href="#signalsrv">Signalling Service Apache when
-    Running</a> for more information on installing and controlling
-    Apache services.</p>
-
-    <p><strong>Apache, unlike many other Windows NT/2000 services,
-    logs any errors to it's own error.log file in the logs folder
-    within the Apache server root folder. You will <em>not</em>
-    find Apache error details in the Windows NT Event
-    Log.</strong></p>
-
-    <p>After starting Apache running (either in a console window or
-    as a service) if will be listening to port 80 (unless you
-    changed the <samp>Listen</samp> directive in the configuration
-    files). To connect to the server and access the default page,
-    launch a browser and enter this URL:</p>
-<pre>
-  http://localhost/
-</pre>
-
-    <p>This should respond with a welcome page, and a link to the
-    Apache manual. If nothing happens or you get an error, look in
-    the <samp>error_log</samp> file in the <samp>logs</samp>
-    directory. If your host isn't connected to the net, you may
-    have to use this URL:</p>
-<pre>
-  http://127.0.0.1/
-</pre>
-
-    <p>Once your basic installation is working, you should
-    configure it properly by editing the files in the
-    <samp>conf</samp> directory. Again, if you change the
-    configuration of the Windows NT/2000 service for Apache, first
-    attempt to start it from the command line to assure that the
-    service starts with no errors.</p>
-
-    <p>Because Apache <em>CANNOT</em> share the same port with
-    another TCPIP application, you may need to stop or uninstall
-    certain services first. These include (but are not limited to)
-    other web servers, and firewall products such as BlackIce. If
-    you can only start Apache with these services disabled,
-    reconfigure either Apache or the other product so that they do
-    not listen on the same TCPIP ports.</p>
-
-    <h2><a id="use" name="use">Configuring Apache for
-    Windows</a></h2>
-
-    <p>Apache is configured by files in the <samp>conf</samp>
-    directory. These are the same as files used to configure the
-    Unix version, but there are a few different directives for
-    Apache on Windows. See the <a href="../">Apache
-    documentation</a> for all the available directives.</p>
-
-    <p>The main differences in Apache for Windows are:</p>
-
-    <ul>
-      <li>
-        <p>Because Apache for Windows is multithreaded, it does not
-        use a separate process for each request, as Apache does
-        with Unix. Instead there are usually only two Apache
-        processes running: a parent process, and a child which
-        handles the requests. Within the child each request is
-        handled by a separate thread.</p>
-
-        <p>So the "process"-management directives are
-        different:</p>
-
-        <p><a
-        href="../mod/mpm_common.html#maxrequestsperchild">MaxRequestsPerChild</a>
-        - Like the Unix directive, this controls how many requests
-        a process will serve before exiting. However, unlike Unix,
-        a process serves all the requests at once, not just one, so
-        if this is set, it is recommended that a very high number
-        is used. The recommended default, <code>MaxRequestsPerChild
-        0</code>, does not cause the process to ever exit.
-        <strong>Warning: The server configuration file is reread
-        when the new child process is started. If you have modified
-        httpd.conf, the new child may not start or you may receive
-        unexpected results.</strong></p>
-
-        <p><a
-        href="../mod/mpm_common.html#threadsperchild">ThreadsPerChild</a>
-        - This directive is new, and tells the server how many
-        threads it should use. This is the maximum number of
-        connections the server can handle at once; be sure and set
-        this number high enough for your site if you get a lot of
-        hits. The recommended default is <code>ThreadsPerChild
-        50</code>.</p>
-      </li>
-
-      <li>
-        <p>The directives that accept filenames as arguments now
-        must use Windows filenames instead of Unix ones. However,
-        because Apache uses Unix-style names internally, you must
-        use forward slashes, not backslashes. Drive letters can be
-        used; if omitted, the drive with the Apache executable will
-        be assumed.</p>
-      </li>
-
-      <li>
-        <p>Apache for Windows contains the ability to load modules
-        at runtime, without recompiling the server. If Apache is
-        compiled normally, it will install a number of optional
-        modules in the <code>\Apache\modules</code> directory. To
-        activate these, or other modules, the new <a
-        href="../mod/mod_so.html#loadmodule">LoadModule</a>
-        directive must be used. For example, to active the status
-        module, use the following (in addition to the
-        status-activating directives in
-        <code>access.conf</code>):</p>
-<pre>
-    LoadModule status_module modules/mod_status.so
-</pre>
-
-        <p>Information on <a
-        href="../mod/mod_so.html#creating">creating loadable
-        modules</a> is also available.</p>
-      </li>
-
-      <li>
-        <p>Apache can also load ISAPI Extensions (<em>i.e.</em>,
-        Internet Server Applications), such as those used by
-        Microsoft's IIS, and other Windows servers. <a
-        href="../mod/mod_isapi.html">More information is
-        available.</a> Note that Apache <em>CANNOT</em> load ISAPI
-        Filters.</p>
-      </li>
-
-      <li>When running CGI scripts, the method Apache uses to find
-      the interpreter for the script is configurable using the <a
-      href="../mod/core.html#scriptinterpretersource">ScriptInterpreterSource</a>
-      directive.</li>
-
-      <li>Since it is often difficult to manage files with names
-      like <code>.htaccess</code> under windows, you may find it
-      useful to change the name of this configuration file using
-      the <a
-      href="../mod/core.html#accessfilename">AccessFilename</a>
-      directive.</li>
-    </ul>
-
-    <h2><a id="service" name="service">Running Apache for Windows
-    as a Service</a></h2>
-
-    <p><strong>Note: The -n option to specify a service name is
-    only available with Apache 1.3.7 and later. Earlier versions of
-    Apache only support the default service name
-    'Apache'.</strong></p>
-
-    <p>You can install Apache as a Windows NT service as
-    follows:</p>
-<pre>
-    apache -k install -n "service name"
-</pre>
-
-    <p>To install a service to use a particular configuration,
-    specify the configuration file when the service is
-    installed:</p>
-<pre>
-    apache -k install -n "service name" -f "\my server\conf\my.conf"
-</pre>
-
-    <p>To remove an Apache service, use</p>
-<pre>
-    apache -k uninstall -n "service name"
-</pre>
-
-    <p>The default "service name", if one is not specified, is
-    "Apache".</p>
-
-    <p>Once a service is installed, you can use the <samp>-n</samp>
-    option, in conjunction with other options, to refer to a
-    service's configuration file. For example:</p>
-
-    <p>To test a service's configuration file:</p>
-<pre>
-    apache -n "service name" -t
-</pre>
-
-    <p>To start a console Apache using a service's configuration
-    file:</p>
-<pre>
-    apache -n "service name"
-</pre>
-
-    <p><strong>Important Note on service dependencies:</strong></p>
-
-    <p>Prior to Apache release 1.3.13, the dependencies required to
-    successfully start an installed service were not configured.
-    After installing a service using earlier versions of Apache,
-    you must follow these steps:</p>
-<pre>
-    Run regedt32
-    Select <u>W</u>indow - "HKEY_LOCAL_MACHINE on Local Machine" from the menu
-    Double-click to open the SYSTEM, then the CurrentControlSet keys
-    Scroll down and click on the Apache servicename
-    Select <u>E</u>dit - Add <u>V</u>alue... from the menu
-    Fill in the Add Value dialog with 
-        <u>V</u>alue Name: DependOnGroup 
-        <u>D</u>ata Type: REG_MULTI_SZ
-        and click OK
-    Leave the Multi-String Editor dialog empty and click OK
-    Select <u>E</u>dit - Add <u>V</u>alue... from the menu
-    Fill in the Add Value dialog with 
-        <u>V</u>alue Name: DependOnService
-        <u>D</u>ata Type: REG_MULTI_SZ
-        and click OK
-    Type the following list (one per line) in the Multi-String Editor dialog
-        Tcpip
-        Afd
-        and click OK
-</pre>
-
-    <p>If you are using COM or DCOM components from a third party
-    module, ISAPI, or other add-in scripting technologies such as
-    ActiveState Perl, you may also need to add the entry Rpcss to
-    the DependOnService list. To avoid exposing the TCP port 135
-    when it is unnecessary, Apache does not create that entry upon
-    installation. Follow the directions above to find or create the
-    DependOnService value, double click that value if it already
-    exists, and add the Rpcss entry to the list.</p>
-
-    <h2><a id="cmdline" name="cmdline">Running Apache for Windows
-    from the Command Line</a></h2>
-
-    <p>The Start menu icons and the NT Service manager can provide
-    a simple interface for administering Apache. But in some cases
-    it is easier to work from the command line.</p>
-
-    <p>When working with Apache it is important to know how it will
-    find the configuration files. You can specify a configuration
-    file on the command line in two ways:</p>
-
-    <ul>
-      <li>-f specifies a path to a particular configuration
-      file</li>
-    </ul>
-<pre>
-    apache -f "c:\my server\conf\my.conf"
-    apache -f test\test.conf
-</pre>
-
-    <ul>
-      <li>-n specifies the configuration file of an installed
-      Apache service (Apache 1.3.7 and later)</li>
-    </ul>
-<pre>
-    apache -n "service name"
-</pre>
-
-    <p>In these cases, the proper ServerRoot should be set in the
-    configuration file.</p>
-
-    <p>If you don't specify a configuration file name with -f or
-    -n, Apache will use the file name compiled into the server,
-    usually "conf/httpd.conf". Invoking Apache with the -V switch
-    will display this value labeled as SERVER_CONFIG_FILE. Apache
-    will then determine its ServerRoot by trying the following, in
-    this order:</p>
-
-    <ul>
-      <li>A ServerRoot directive via a -C switch.</li>
-
-      <li>The -d switch on the command line.</li>
-
-      <li>Current working directory</li>
-
-      <li>A registry entry, created if you did a binary
-      install.</li>
-
-      <li>The server root compiled into the server.</li>
-    </ul>
-
-    <p>The server root compiled into the server is usually
-    "/apache". invoking apache with the -V switch will display this
-    value labeled as HTTPD_ROOT.</p>
-
-    <p>When invoked from the start menu, Apache is usually passed
-    no arguments, so using the registry entry is the preferred
-    technique for console Apache.</p>
-
-    <p>During a binary installation, a version-specific registry
-    key is created in the Windows registry:</p>
-<pre>
-  HKEY_LOCAL_MACHINE\Software\Apache Group\Apache\1.3.7
-
-  HKEY_LOCAL_MACHINE\Software\Apache Group\Apache\2.0a3
-</pre>
-
-    <p>This key is compiled into the server and can enable you to
-    test new versions without affecting the current version. Of
-    course you must take care not to install the new version on top
-    of the old version in the file system.</p>
-
-    <p>If you did not do a binary install then Apache will in some
-    scenarios complain that about the missing registry key. This
-    warning can be ignored if it otherwise was able to find its
-    configuration files.</p>
-
-    <p>The value of this key is the "ServerRoot" directory,
-    containing the <samp>conf</samp> directory. When Apache starts
-    it will read the <samp>httpd.conf</samp> file from this
-    directory. If this file contains a <samp>ServerRoot</samp>
-    directive which is different from the directory obtained from
-    the registry key above, Apache will forget the registry key and
-    use the directory from the configuration file. If you copy the
-    Apache directory or configuration files to a new location it is
-    vital that you update the <samp>ServerRoot</samp> directory in
-    the <samp>httpd.conf</samp> file to the new location.</p>
-
-    <p>To run Apache from the command line as a console
-    application, use the following command:</p>
-<pre>
-    apache 
-</pre>
-
-    <p>Apache will execute, and will remain running until it is
-    stopped by pressing control-C.</p>
-
-    <h2><a id="signalsrv" name="signalsrv">Signalling Service
-    Apache when running</a></h2>
-
-    <p>On Windows NT, multiple instances of Apache can be run as
-    services. Signal an Apache service to start, restart, or
-    shutdown as follows:</p>
-<pre>
-    apache -n "service name" -k start
-    apache -n "service name" -k restart
-    apache -n "service name" -k shutdown
-</pre>
-
-    <p>In addition, you can use the native NT NET command to start
-    and stop Apache services as follows:</p>
-<pre>
-    NET START "service name"
-    NET STOP "service name"
-</pre>
-
-    <h2><a id="signal" name="signal">Signalling Console Apache when
-    running</a></h2>
-
-    <p>On Windows 95, Apache runs as a console application. You can
-    tell a running Apache to stop by opening another console window
-    and typing:</p>
-<pre>
-    apache -k shutdown
-</pre>
-
-    <p>This should be used instead of pressing Control-C in the
-    running Apache console window, because it lets Apache end any
-    current transactions and cleanup gracefully.</p>
-
-    <p>You can also tell Apache to restart. This makes it re-read
-    the configuration files. Any transactions in progress are
-    allowed to complete without interruption. To restart Apache,
-    run</p>
-<pre>
-    apache -k restart
-</pre>
-
-    <p>Note for people familiar with the Unix version of Apache:
-    these commands provide a Windows equivalent to <code>kill -TERM
-    <em>pid</em></code> and <code>kill -USR1 <em>pid</em></code>.
-    The command line option used, <code>-k</code>, was chosen as a
-    reminder of the "kill" command used on Unix.</p>
-    <!--#include virtual="footer.html" -->
-  </body>
-</html>
-
diff --git a/docs/manual/programs/ab.html b/docs/manual/programs/ab.html
deleted file mode 100644
index 7229bbb..0000000
--- a/docs/manual/programs/ab.html
+++ /dev/null
@@ -1,134 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta name="generator" content="HTML Tidy, see www.w3.org" />
-
-    <title>Manual Page: ab - Apache HTTP Server</title>
-  </head>
-
-  <body bgcolor="#ffffff" text="#000000" link="#0000ff"
-  vlink="#000080" alink="#ff0000">
-    <!--#include virtual="header.html" -->
-
-    <h1 align="center">Manual Page: ab</h1>
-    <!-- This document was autogenerated from the man page -->
-<pre>
-<strong>NAME</strong>
-     ab - Apache HTTP server benchmarking tool
-
-<strong>SYNOPSIS</strong>
-     <strong>ab</strong> [ -<strong>k</strong> ] [ -<strong>n</strong> <em>requests</em> ] [ -<strong>t</strong> <em>timelimit</em> ] [ -<strong>c</strong>  <em>concurrency</em>
-     ] [ -<strong>p</strong> <em>POST file</em> ] [ -<strong>A</strong> <em>Authentication username</em>:<em>password</em> ] [
-     -<strong>P</strong> <em>Proxy Authentication  username</em>:<em>password</em>  ]  [  -<strong>H</strong>  <em>Custom</em>
-     <em>header</em>  ]  [ -<strong>C</strong> <em>Cookie name</em>=<em>value</em> ] [ -<strong>T</strong> <em>content</em>-<em>type</em> ] [ -<strong>v</strong>
-     <em>verbosity</em> ] ] [ -<strong>w</strong> <em>output HTML</em> ] ] [ -<strong>x</strong> &lt;<em>table</em>&gt; <em>attributes</em> ]
-     ]  [  -<strong>y</strong>  &lt;<em>tr</em>&gt;  <em>attributes</em>  ]  ]  [  -<strong>z</strong>  &lt;<em>td</em>&gt;  <em>attributes</em>  ]
-     [<em>http</em>://]<em>hostname</em>[:<em>port</em>]/<em>path</em>
-
-     <strong>ab</strong> [ -<strong>V</strong> ] [ -<strong>h</strong> ]
-
-<strong>DESCRIPTION</strong>
-     <strong>ab</strong> is a tool for benchmarking your Apache HyperText Transfer
-     Protocol  (HTTP)  server.  It  is  designed  to  give you an
-     impression of how your current Apache installation performs.
-     This  especially shows you how many requests per second your
-     Apache installation is capable of serving.
-
-<strong>OPTIONS</strong>
-     -<strong>k   </strong>       Enable the HTTP KeepAlive feature, i.e., perform
-                 multiple   requests  within  one  HTTP  session.
-                 Default is no KeepAlive.
-
-     -<strong>n</strong> <em>requests</em> Number of requests to perform for the benchmark-
-                 ing  session.   The default is to just perform a
-                 single  request  which  usually  leads  to  non-
-                 representative benchmarking results.
-
-     -<strong>t</strong> <em>timelimit</em>
-                 Maximum number of seconds to  spend  for  bench-
-                 marking. This implies a -<strong>n 50000</strong> internally. Use
-                 this to benchmark  the  server  within  a  fixed
-                 total  amount  of time.  Per default there is no
-                 timelimit.
-
-     -<strong>c</strong> <em>concurrency</em>
-                 Number of multiple  requests  to  perform  at  a
-                 time. Default is one request at a time.
-
-     -<strong>p</strong> <em>POST file</em>
-                 File containing data to POST.
-
-     -<strong>A</strong> <em>Authentication username</em>:<em>password</em>
-                 Supply BASIC Authentication credentials  to  the
-                 server.  The username and password are separated
-                 by a single ':' and sent on the wire  uuencoded.
-                 The  string  is  sent  regardless of whether the
-                 server needs it; (i.e., has sent an 401  authen-
-                 tication needed).
-
-     -<strong>p</strong> <em>Proxy</em>-<em>Authentication username</em>:<em>password</em>
-                 Supply BASIC  Authentication  credentials  to  a
-                 proxy  en-route.  The  username and password are
-                 separated by a single ':' and sent on  the  wire
-                 uuencoded.   The  string  is  sent regardless of
-                 whether the proxy needs it; (i.e., has  sent  an
-                 407 proxy authentication needed).
-
-     -<strong>C</strong> <em>Cookie name</em>=<em>value</em>
-                 Add a 'Cookie:' line to the request.  The  argu-
-                 ment  is typically in the form of a 'name=value'
-                 pair. This field is repeatable.
-
-     -<strong>p</strong> <em>Header string</em>
-                 Append extra headers to the request.  The  argu-
-                 ment  is typically in the form of a valid header
-                 line, containing a  colon-separated  field-value
-                 pair.  (i.e., 'Accept-Encoding: zip/zop;8bit').
-
-     -<strong>T</strong> <em>content</em>-<em>type</em>
-                 Content-type header to use for POST data.
-
-     -<strong>v   </strong>       Set verbosity level - 4 and above prints  infor-
-                 mation  on  headers, 3 and above prints response
-                 codes (404, 200, etc.), 2 and above prints warn-
-                 ings and info.
-
-     -<strong>w   </strong>       Print out results in HTML tables.  Default table
-                 is two columns wide, with a white background.
-
-     -<strong>x</strong> <em>attributes</em>
-                 String to use as attributes for &lt;table&gt;.  Attri-
-                 butes are inserted &lt;table <strong>here</strong> &gt;
-
-     -<strong>y</strong> <em>attributes</em>
-                 String to use as attributes for &lt;tr&gt;.
-
-     -<strong>z</strong> <em>attributes</em>
-                 String to use as attributes for &lt;td&gt;.
-
-     -<strong>V   </strong>       Display version number and exit.
-
-     -<strong>h   </strong>       Display usage information.
-
-<strong>BUGS</strong>
-     There are  various  statically  declared  buffers  of  fixed
-     length.  Combined  with the lazy parsing of the command line
-     arguments, the response headers from the  server  and  other
-     external inputs, this might bite you.
-
-     It does not implement  HTTP/1.x  fully;  only  accepts  some
-     'expected'  forms  of  responses.  The  rather  heavy use of
-     <strong>strstr(3)</strong> shows up top in profile, which  might  indicate  a
-     performance  problem; i.e., you would measure the <strong>ab</strong> perfor-
-     mance rather than the server's.
-
-<strong>SEE ALSO</strong>
-     <strong>httpd(8)</strong>
-
-</pre>
-    <!--#include virtual="footer.html" -->
-  </body>
-</html>
-
diff --git a/docs/manual/programs/apachectl.html b/docs/manual/programs/apachectl.html
deleted file mode 100644
index aa9807a..0000000
--- a/docs/manual/programs/apachectl.html
+++ /dev/null
@@ -1,99 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta name="generator" content="HTML Tidy, see www.w3.org" />
-
-    <title>Manual Page: apachectl - Apache HTTP Server</title>
-  </head>
-
-  <body bgcolor="#ffffff" text="#000000" link="#0000ff"
-  vlink="#000080" alink="#ff0000">
-    <!--#include virtual="header.html" -->
-
-    <h1 align="center">Manual Page: apachectl</h1>
-    <!-- This document was autogenerated from the man page -->
-<pre>
-<strong>NAME</strong>
-     apachectl - Apache HTTP server control interface
-
-<strong>SYNOPSIS</strong>
-     <strong>apachectl</strong> <em>command</em> [...]
-
-<strong>DESCRIPTION</strong>
-     <strong>apachectl</strong> is a front end to the  Apache  HyperText  Transfer
-     Protocol (HTTP) server.  It is designed to help the adminis-
-     trator control the functioning of the Apache <strong>httpd</strong> daemon.
-
-     <strong>NOTE:</strong> If your Apache installation uses  non-standard  paths,
-     you  will  need  to  edit  the  <strong>apachectl</strong>  script to set the
-     appropriate paths to your PID file and  your  <strong>httpd</strong>  binary.
-     See the comments in the script for details.
-
-     The <strong>apachectl</strong> script returns a 0 exit value on success,  and
-     &gt;0  if an error occurs.  For more details, view the comments
-     in the script.
-
-     Full   documentation   for   Apache    is    available    at
-     <strong>http://httpd.apache.org/</strong>
-
-<strong>OPTIONS</strong>
-     The <em>command</em> can be any one or more of the following options:
-
-     <strong>start   </strong>    Start the Apache daemon.  Gives an error  if  it
-                 is already running.
-
-     <strong>stop    </strong>    Stops the Apache daemon.
-
-     <strong>restart </strong>    Restarts the  Apache  daemon  by  sending  it  a
-                 SIGHUP.   If  the  daemon  is not running, it is
-                 started.  This command automatically checks  the
-                 configuration  files  via <strong>configtest</strong> before ini-
-                 tiating the restart to make sure Apache  doesn't
-                 die.
-
-     <strong>fullstatus</strong>  Displays a full status report  from  <strong>mod_status.</strong>
-                 For  this  to  work, you need to have mod_status
-                 enabled on your server and a text-based  browser
-                 such  as <em>lynx</em> available on your system.  The URL
-                 used to access the status report can be  set  by
-                 editing the <strong>STATUSURL</strong> variable in the script.
-
-     <strong>status  </strong>    Displays a brief status report.  Similar to  the
-                 fullstatus  option,  except  that  the  list  of
-                 requests currently being served is omitted.
-
-     <strong>graceful</strong>    Gracefully restarts the Apache daemon by sending
-                 it a SIGUSR1.  If the daemon is not running,  it
-                 is started.  This differs from a normal  restart
-                 in  that  currently  open  connections  are  not
-                 aborted.  A side effect is that  old  log  files
-                 will not be closed immediately.  This means that
-                 if used in a log rotation script, a  substantial
-                 delay  may  be  necessary to ensure that the old
-                 log files are  closed  before  processing  them.
-                 This command automatically checks the configura-
-                 tion files via <strong>configtest</strong> before initiating  the
-                 restart to make sure  Apache  doesn't  die.   <i>On 
-                 certain  platforms that  do not allow USR1 to be 
-                 used  for  a  graceful  restart,  an alternative 
-                 signal may be used  (such as WINCH).   apachectl 
-                 graceful will send  the right  signal  for  your 
-                 platform.</i>
-
-     <strong>configtest</strong>  Run a configuration file syntax test. It  parses
-                 the  configuration files and either reports <strong>Syn-</strong>
-                 <strong>tax Ok</strong> or detailed information about the partic-
-                 ular syntax error.
-
-     <strong>help    </strong>    Displays a short help message.
-
-<strong>SEE ALSO</strong>
-     <strong>httpd(8)</strong>
-
-</pre>
-    <!--#include virtual="footer.html" -->
-  </body>
-</html>
-
diff --git a/docs/manual/programs/apxs.html b/docs/manual/programs/apxs.html
deleted file mode 100644
index 04eeabe..0000000
--- a/docs/manual/programs/apxs.html
+++ /dev/null
@@ -1,281 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta name="generator" content="HTML Tidy, see www.w3.org" />
-
-    <title>Manual Page: apxs - Apache HTTP Server</title>
-  </head>
-
-  <body bgcolor="#ffffff" text="#000000" link="#0000ff"
-  vlink="#000080" alink="#ff0000">
-    <!--#include virtual="header.html" -->
-
-    <h1 align="center">Manual Page: apxs</h1>
-    <!-- This document was autogenerated from the man page -->
-<pre>
-<strong>NAME</strong>
-     apxs - APache eXtenSion tool
-
-<strong>SYNOPSIS</strong>
-     <strong>apxs</strong> -<strong>g</strong> [ -<strong>S</strong> <em>name</em>=<em>value</em> ] -<strong>n</strong> <em>modname</em>
-
-     <strong>apxs</strong> -<strong>q</strong> [ -<strong>S</strong> <em>name</em>=<em>value</em> ] <em>query</em> ...
-
-     <strong>apxs</strong> -<strong>c</strong> [ -<strong>S</strong> <em>name</em>=<em>value</em> ] [ -<strong>o</strong> <em>dsofile</em> ] [ -<strong>I</strong> <em>incdir</em> ] [  -<strong>D</strong>
-     <em>name</em>=<em>value</em>  ]  [  -<strong>L</strong> <em>libdir</em> ] [ -<strong>l</strong> <em>libname</em> ] [ -<strong>Wc,</strong><em>compiler</em>-
-     <em>flags</em> ] [ -<strong>Wl,</strong><em>linker</em>-<em>flags</em> ] <em>files</em> ...
-
-     <strong>apxs</strong> -<strong>i</strong> [ -<strong>S</strong> <em>name</em>=<em>value</em> ] [ -<strong>n</strong> <em>modname</em> ] [ -<strong>a</strong> ] [ -<strong>A</strong> ]  <em>dso-</em>
-     <em>file</em> ...
-
-     <strong>apxs</strong> -<strong>e</strong> [ -<strong>S</strong> <em>name</em>=<em>value</em> ] [ -<strong>n</strong> <em>modname</em> ] [ -<strong>a</strong> ] [ -<strong>A</strong> ]  <em>dso-</em>
-     <em>file</em> ...
-
-<strong>DESCRIPTION</strong>
-     <strong>apxs</strong> is a tool for building and installing extension modules
-     for  the  Apache  HyperText Transfer Protocol (HTTP) server.
-     This is achieved by building a dynamic shared  object  (DSO)
-     from  one  or  more source or object <em>files</em> which then can be
-     loaded into the Apache server under runtime via the  <strong>LoadMo-</strong>
-     <strong>dule</strong> directive from <strong>mod_so.</strong>
-
-     So to use this extension mechanism your platform has to sup-
-     port  the DSO feature and your Apache <strong>httpd</strong> binary has to be
-     built with the <strong>mod_so</strong> module.  The <strong>apxs</strong>  tool  automatically
-     complains if this is not the case.  You can check this your-
-     self by manually running the command
-
-       $ httpd -l
-
-     The module <strong>mod_so</strong> should be part of the displayed list.   If
-     these  requirements are fulfilled you can easily extend your
-     Apache server's functionality by installing your own modules
-     with the DSO mechanism by the help of this <strong>apxs</strong> tool:
-
-       $ apxs -i -a -c mod_foo.c
-       gcc -fpic -DSHARED_MODULE -I/path/to/apache/include -c mod_foo.c
-       ld -Bshareable -o mod_foo.so mod_foo.o
-       cp mod_foo.so /path/to/apache/modules/mod_foo.so
-       chmod 755 /path/to/apache/modules/mod_foo.so
-       [activating module `foo' in /path/to/apache/etc/httpd.conf]
-       $ apachectl restart
-       /path/to/apache/sbin/apachectl restart: httpd not running, trying to start
-       [Tue Mar 31 11:27:55 1998] [debug] mod_so.c(303): loaded module foo_module
-       /path/to/apache/sbin/apachectl restart: httpd started
-       $ _
-
-     The arguments <em>files</em> can be any C source file (.c), a  object
-     file  (.o)  or  even  a  library archive (.a). The <strong>apxs</strong> tool
-     automatically recognizes these extensions and  automatically
-     used the C source files for compilation while just using the
-     object and archive files for the  linking  phase.  But  when
-     using  such pre-compiled objects make sure they are compiled
-     for position independent code (PIC) to be able to  use  them
-     for  a  dynamically loaded shared object.  For instance with
-     GCC you always just have to use <strong>-fpic</strong>.   For  other  C  com-
-     pilers  consult  its  manual  page or at watch for the flags
-     <strong>apxs</strong> uses to compile the object files.
-
-     For more details about DSO support in Apache read the  docu-
-     mentation    of    <strong>mod_so</strong>   or   perhaps   even   read   the
-     <strong>src/modules/standard/mod_so.c</strong> source file.
-
-<strong>OPTIONS</strong>
-     Common options:
-
-     -<strong>n</strong> <em>modname</em>  This explicitly sets the module name for the  -<strong>i</strong>
-                 (install)  and  -<strong>g</strong> (template generation) option.
-                 Use this to explicitly specify the module  name.
-                 For  option  -<strong>g</strong>  this is required, for option -<strong>i</strong>
-                 the <strong>apxs</strong> tool tries to determine the  name  from
-                 the source or (as a fallback) at least by guess-
-                 ing it from the filename.
-
-     Query options:
-
-     -<strong>q      </strong>    Performs a query for <strong>apxs</strong>'s knowledge about cer-
-                 tain  settings.  The <em>query</em> parameters can be one
-                 or more of the following strings:
-                   CC              TARGET
-                   CFLAGS          SBINDIR
-                   CFLAGS_SHLIB    INCLUDEDIR
-                   LD_SHLIB        LIBEXECDIR
-                   LDFLAGS_SHLIB   SYSCONFDIR
-                   LIBS_SHLIB
-                 Use this for manually determining settings.  For
-                 instance use
-                   INC=-I`apxs -q INCLUDEDIR`
-                 inside your own Makefiles  if  you  need  manual
-                 access to Apache's C header files.
-
-     Configuration options:
-
-     -<strong>S</strong> <em>name</em>=<em>value</em>
-                 This option changes the apxs settings  described
-                 above.
-
-     Template Generation options:
-
-     -<strong>g      </strong>    This generates a subdirectory <em>name</em>  (see  option
-                 -<strong>n</strong>)  and there two files: A sample module source
-                 file named <strong>mod_</strong><em>name</em>.<em>c</em> which can  be  used  as  a
-                 template  for  creating your own modules or as a
-                 quick start for playing with the APXS mechanism.
-                 And  a  corresponding  <strong>Makefile</strong>  for even easier
-                 build and installing of this module.
-
-     DSO compilation options:
-
-     -<strong>c      </strong>    This indicates  the  compilation  operation.  It
-                 first  compiles the C source files (.c) of <em>files</em>
-                 into corresponding object files  (.o)  and  then
-                 builds a dynamically shared object in <em>dsofile</em> by
-                 linking these object files  plus  the  remaining
-                 object  files  (.o  and  .a)  of  <em>files</em> If no -<strong>o</strong>
-                 option is specified the output file  is  guessed
-                 from  the  first filename in <em>files</em> and thus usu-
-                 ally defaults to <strong>mod_</strong><em>name</em>.<em>so</em>
-
-     -<strong>o</strong> <em>dsofile</em>  Explicitly specifies the filename of the created
-                 dynamically  shared object. If not specified and
-                 the name cannot be guessed from the <em>files</em>  list,
-                 the fallback name <strong>mod_unknown.so</strong> is used.
-
-     -<strong>D</strong> <em>name</em>=<em>value</em>
-                 This option is directly passed  through  to  the
-                 compilation  command(s).   Use  this to add your
-                 own defines to the build process.
-
-     -<strong>I</strong> <em>incdir</em>   This option is directly passed  through  to  the
-                 compilation  command(s).   Use  this to add your
-                 own include directories to search to  the  build
-                 process.
-
-     -<strong>L</strong> <em>libdir</em>   This option is directly passed  through  to  the
-                 linker  command.   Use  this  to  add  your  own
-                 library directories to search to the build  pro-
-                 cess.
-
-     -<strong>l</strong> <em>libname</em>  This option is directly passed  through  to  the
-                 linker  command.   Use  this  to  add  your  own
-                 libraries to search to the build process.
-
-     -<strong>Wc,</strong><em>compiler</em>-<em>flags</em>
-                 This option passes <em>compiler</em>-<em>flags</em> as  additional
-                 flags  to the compiler command.  Use this to add
-                 local compiler-specific options.
-
-     -<strong>Wl,</strong><em>linker</em>-<em>flags</em>
-                 This option passes  <em>linker</em>-<em>flags</em>  as  additional
-                 flags  to  the  linker command.  Use this to add
-                 local linker-specific options.
-
-     DSO installation and configuration options:
-
-     -<strong>i      </strong>    This indicates the  installation  operation  and
-                 installs  one or more dynamically shared objects
-                 into the server's <em>modules</em> directory.
-
-     -<strong>a      </strong>    This  activates  the  module  by   automatically
-                 adding   a   corresponding  <strong>LoadModule</strong>  line  to
-                 Apache's <strong>httpd.conf</strong> configuration  file,  or  by
-                 enabling it if it already exists.
-
-     -<strong>A      </strong>    Same as option -<strong>a</strong>  but  the  created  <strong>LoadModule</strong>
-                 directive is prefixed with a hash sign (#), i.e.
-                 the module is just prepared for later activation
-                 but initially disabled.
-
-     -<strong>e      </strong>    This indicates the editing operation, which  can
-                 be  used with the -<strong>a</strong> and -<strong>A</strong> options similarly to
-                 the -<strong>i</strong> operation  to  edit  Apache's  <strong>httpd.conf</strong>
-                 configuration file without attempting to install
-                 the module.
-
-<strong>EXAMPLES</strong>
-     Assume you have an Apache module named  mod_foo.c  available
-     which should extend Apache's server functionality. To accom-
-     plish this you first have to compile the  C  source  into  a
-     shared  object  suitable  for loading into the Apache server
-     under runtime via the following command:
-
-       $ apxs -c mod_foo.c
-       gcc -fpic -DSHARED_MODULE -I/path/to/apache/include -c mod_foo.c
-       ld -Bshareable -o mod_foo.so mod_foo.o
-       $ _
-
-     Then you have to update the Apache configuration  by  making
-     sure  a  <strong>LoadModule</strong> directive is present to load this shared
-     object. To simplify this step <strong>apxs</strong> provides an automatic way
-     to  install the shared object in its "modules" directory and
-     updating  the  <strong>httpd.conf</strong>  file  accordingly.  This  can  be
-     achieved by running:
-
-       $ apxs -i -a mod_foo.c
-       cp mod_foo.so /path/to/apache/modules/mod_foo.so
-       chmod 755 /path/to/apache/modules/mod_foo.so
-       [activating module `foo' in /path/to/apache/etc/httpd.conf]
-       $ _
-
-     This way a line named
-
-       LoadModule foo_module modules/mod_foo.so
-
-     is added to the configuration file if still not present.  If
-     you  want  to  have  this  disabled  per  default use the -<strong>A</strong>
-     option, i.e.
-
-       $ apxs -i -A mod_foo.c
-
-     For a quick test of the APXS mechanism you can create a sam-
-     ple  Apache  module  template  plus a corresponding Makefile
-     via:
-
-       $ apxs -g -n foo
-       Creating [DIR]  foo
-       Creating [FILE] foo/Makefile
-       Creating [FILE] foo/mod_foo.c
-       $ _
-
-     Then you can immediately compile this sample module  into  a
-     shared object and load it into the Apache server:
-
-       $ cd foo
-       $ make all reload
-       apxs -c mod_foo.c
-       gcc -fpic -DSHARED_MODULE -I/path/to/apache/include -c mod_foo.c
-       ld -Bshareable -o mod_foo.so mod_foo.o
-       apxs -i -a -n "foo" mod_foo.so
-       cp mod_foo.so /path/to/apache/modules/mod_foo.so
-       chmod 755 /path/to/apache/modules/mod_foo.so
-       [activating module `foo' in /path/to/apache/etc/httpd.conf]
-       apachectl restart
-       /path/to/apache/sbin/apachectl restart: httpd not running, trying to start
-       [Tue Mar 31 11:27:55 1998] [debug] mod_so.c(303): loaded module foo_module
-       /path/to/apache/sbin/apachectl restart: httpd started
-       $ _
-
-     You can even use <strong>apxs</strong> to compile complex modules outside the
-     Apache source tree, like PHP3:
-
-       $ cd php3
-       $ ./configure --with-shared-apache=../apache-1.3
-       $ apxs -c -o libphp3.so mod_php3.c libmodphp3-so.a
-       gcc -fpic -DSHARED_MODULE -I/tmp/apache/include  -c mod_php3.c
-       ld -Bshareable -o libphp3.so mod_php3.o libmodphp3-so.a
-       $ _
-
-     because <strong>apxs</strong> automatically recognized  C  source  files  and
-     object  files.   Only  C  source  files  are  compiled while
-     remaining object files are used for the linking phase.
-
-<strong>SEE ALSO</strong>
-     <strong>apachectl(1), httpd(8).</strong>
-
-</pre>
-    <!--#include virtual="footer.html" -->
-  </body>
-</html>
-
diff --git a/docs/manual/programs/dbmmanage.html b/docs/manual/programs/dbmmanage.html
deleted file mode 100644
index f6adb19..0000000
--- a/docs/manual/programs/dbmmanage.html
+++ /dev/null
@@ -1,114 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta name="generator" content="HTML Tidy, see www.w3.org" />
-
-    <title>Manual Page: dbmmanage - Apache HTTP Server</title>
-  </head>
-
-  <body bgcolor="#ffffff" text="#000000" link="#0000ff"
-  vlink="#000080" alink="#ff0000">
-    <!--#include virtual="header.html" -->
-
-    <h1 align="center">Manual Page: dbmmanage</h1>
-    <!-- This document was autogenerated from the man page -->
-<pre>
-<strong>NAME</strong>
-     dbmmanage - Create and update user authentication  files  in
-     DBM format
-
-<strong>SYNOPSIS</strong>
-     <strong>dbmmanage</strong> <em>filename</em> [ <em>command</em> ] [ <em>username</em> [ <em>encpasswd</em> ] ]
-
-<strong>DESCRIPTION</strong>
-     <strong>dbmmanage</strong> is used to create and update the DBM format  files
-     used  to  store usernames and password for basic authentica-
-     tion of HTTP users.   Resources  available  from  the  <strong>httpd</strong>
-     Apache web server can be restricted to just the users listed
-     in the files created by <strong>dbmmanage.</strong> This program can only  be
-     used  when  the usernames are stored in a DBM file. To use a
-     flat-file database see <strong>htpasswd</strong>.
-
-     This manual page only lists the command line arguments.  For
-     details  of  the  directives  necessary  to  configure  user
-     authentication in <strong>httpd</strong> see the Apache manual, which is part
-     of   the   Apache   distribution   or   can   be   found  at
-     http://www.apache.org/.
-
-<strong>OPTIONS</strong>
-     <em>filename</em>
-          The filename of the DBM format  file.  Usually  without
-          the extension .db, .pag, or .dir.
-
-     <em>command</em>
-          This selects the operation to perform:
-
-     <strong>add     </strong>    Adds an entry for <em>username</em> to <em>filename</em> using the
-                 encrypted password <em>encpassword</em>.
-
-     <strong>adduser </strong>    Asks for a password and then adds an  entry  for
-                 <em>username</em> to <em>filename</em> .
-
-     <strong>check   </strong>    Asks for a password and then checks if  <em>username</em>
-                 is  in <em>filename</em> and if it's password matches the
-                 specified one.
-
-     <strong>delete  </strong>    Deletes the <em>username</em> entry from <em>filename</em>.
-
-     <strong>import  </strong>    Reads username:password entries (one  per  line)
-                 from  STDIN and adds them to <em>filename</em>. The pass-
-                 words already has to be crypted.
-
-     <strong>update  </strong>    Same as the "adduser" command,  except  that  it
-                 makes sure <em>username</em> already exists in <em>filename</em>.
-
-     <strong>view    </strong>    Just displays the complete contents of  the  DBM
-                 file.
-
-     <em>username</em>    The user for which the update operation is  per-
-                 formed.
-
-<strong>BUGS</strong>
-     One should be aware that there are a number of different DBM
-     file   formats   in  existence,  and  with  all  likelihood,
-     libraries for more than one format may exist on your system.
-     The three primary examples are NDBM, the GNU project's GDBM,
-     and Berkeley DB 2.  Unfortunately, all these  libraries  use
-     different file formats, and you must make sure that the file
-     format used by <em>filename</em> is the same  format  that  <strong>dbmmanage</strong>
-     expects  to see. <strong>dbmmanage</strong> currently has no way of determin-
-     ing what type of DBM file it is looking at.  If used against
-     the  wrong format, will simply return nothing, or may create
-     a different DBM file with a different name, or at worst,  it
-     may  corrupt the DBM file if you were attempting to write to
-     it.
-
-     <strong>dbmmanage</strong> has a list of DBM format preferences,  defined  by
-     the  <strong>@AnyDBM::ISA</strong>  array  near the beginning of the program.
-     Since we prefer the Berkeley DB 2 file format, the order  in
-     which  <strong>dbmmanage</strong>  will look for system libraries is Berkeley
-     DB 2, then NDBM, and then GDBM.   The  first  library  found
-     will  be  the  library <strong>dbmmanage</strong> will attempt to use for all
-     DBM file transactions.  This ordering is slightly  different
-     than  the standard <strong>@AnyDBM::ISA</strong> ordering in perl, as well as
-     the ordering used by the simple dbmopen() call in  Perl,  so
-     if  you  use  any  other utilities to manage your DBM files,
-     they must also follow  this  preference  ordering.   Similar
-     care  must  be  taken  if using programs in other languages,
-     like C, to access these files.
-
-     Apache's <strong>mod_auth_dbm.c</strong>  corresponds  to  the  NDBM
-     library.  Also, one can usually use the  <strong>file</strong>  program  sup-
-     plied  with  most Unix systems to see what format a DBM file
-     is in.
-
-<strong>SEE ALSO</strong>
-     <strong>httpd(8)</strong>
-
-</pre>
-    <!--#include virtual="footer.html" -->
-  </body>
-</html>
-
diff --git a/docs/manual/programs/footer.html b/docs/manual/programs/footer.html
deleted file mode 100644
index 54f6044..0000000
--- a/docs/manual/programs/footer.html
+++ /dev/null
@@ -1,6 +0,0 @@
-    <hr />
-
-    <h3 align="CENTER">Apache HTTP Server Version 2.0</h3>
-    <a href="./"><img src="../images/index.gif" alt="Index" /></a>
-    <a href="../"><img src="../images/home.gif" alt="Home" /></a>
-
diff --git a/docs/manual/programs/header.html b/docs/manual/programs/header.html
deleted file mode 100644
index 749461d..0000000
--- a/docs/manual/programs/header.html
+++ /dev/null
@@ -1,6 +0,0 @@
-    <div align="CENTER">
-      <img src="../images/sub.gif" alt="[APACHE DOCUMENTATION]" /> 
-
-      <h3>Apache HTTP Server Version 2.0</h3>
-    </div>
-
diff --git a/docs/manual/programs/htdigest.html b/docs/manual/programs/htdigest.html
deleted file mode 100644
index fe65df5..0000000
--- a/docs/manual/programs/htdigest.html
+++ /dev/null
@@ -1,62 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta name="generator" content="HTML Tidy, see www.w3.org" />
-
-    <title>Manual Page: htdigest - Apache HTTP Server</title>
-  </head>
-
-  <body bgcolor="#ffffff" text="#000000" link="#0000ff"
-  vlink="#000080" alink="#ff0000">
-    <!--#include virtual="header.html" -->
-
-    <h1 align="center">Manual Page: htdigest</h1>
-    <!-- This document was autogenerated from the man page -->
-<pre>
-<strong>NAME</strong>
-     htdigest - Create and update user authentication files
-
-<strong>SYNOPSIS</strong>
-     <strong>htdigest</strong> [ -<strong>c</strong> ] <em>passwdfile realm username</em>
-
-<strong>DESCRIPTION</strong>
-     <strong>htdigest</strong> is used to create and update the flat-files used to
-     store  usernames,  realm and password for digest authentica-
-     tion of HTTP users.   Resources  available  from  the  <strong>httpd</strong>
-     Apache web server can be restricted to just the users listed
-     in the files created by <strong>htdigest.</strong>
-
-     This manual page only lists the command line arguments.  For
-     details  of  the  directives  necessary  to configure digest
-     authentication in <strong>httpd</strong> see the Apache manual, which is part
-     of   the   Apache   distribution   or   can   be   found  at
-     http://www.apache.org/.
-
-<strong>OPTIONS</strong>
-     -c   Create the <em>passwdfile</em>. If <em>passwdfile</em> already exists, it
-          is deleted first.
-
-     <em>passwdfile</em>
-          Name of the file to contain  the  username,  realm  and
-          password.  If  -c  is given, this file is created if it
-          does not already exist, or deleted and recreated if  it
-          does exist.
-
-     <em>realm</em>
-          The realm name to which the user name belongs.
-
-     <em>username</em>
-          The user name to create or  update  in  <strong>passwdfile</strong>.  If
-          <em>username</em>  does  not  exist  is  this  file, an entry is
-          added. If it does exist, the password is changed.
-
-<strong>SEE ALSO</strong>
-     <strong>httpd(8)</strong>
-
-</pre>
-    <!--#include virtual="footer.html" -->
-  </body>
-</html>
-
diff --git a/docs/manual/programs/htpasswd.html b/docs/manual/programs/htpasswd.html
deleted file mode 100644
index ba5558d..0000000
--- a/docs/manual/programs/htpasswd.html
+++ /dev/null
@@ -1,170 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta name="generator" content="HTML Tidy, see www.w3.org" />
-
-    <title>Manual Page: htpasswd - Apache HTTP Server</title>
-  </head>
-
-  <body bgcolor="#ffffff" text="#000000" link="#0000ff"
-  vlink="#000080" alink="#ff0000">
-    <!--#include virtual="header.html" -->
-
-    <h1 align="center">Manual Page: htpasswd</h1>
-    <!-- This document was autogenerated from the man page -->
-<pre>
-<strong>NAME</strong>
-     htpasswd - Create and update user authentication files
-
-<strong>SYNOPSIS</strong>
-     <strong>htpasswd</strong> [ -<strong>c</strong> ] [ -<strong>m</strong> ] <em>passwdfile username</em>
-     <strong>htpasswd</strong> -<strong>b</strong> [ -<strong>c</strong> ] [ -<strong>m</strong> | -<strong>d</strong> | -<strong>p</strong> | -<strong>s</strong> ] <em>passwdfile username</em>
-     <em>password</em>
-     <strong>htpasswd</strong> -<strong>n</strong> [ -<strong>m</strong> | -<strong>d</strong> | -<strong>s</strong> | -<strong>p</strong> ] <em>username</em>
-     <strong>htpasswd</strong> -<strong>nb</strong> [ -<strong>m</strong> | -<strong>d</strong> | -<strong>s</strong> | -<strong>p</strong> ] <em>username password</em>
-
-<strong>DESCRIPTION</strong>
-     <strong>htpasswd</strong> is used to create and update the flat-files used to
-     store  usernames  and  password  for basic authentication of
-     HTTP users.  If <strong>htpasswd</strong> cannot access a file, such  as  not
-     being  able to write to the output file or not being able to
-     read the file in order to update it,  it  returns  an  error
-     status and makes no changes.
-
-     Resources available from the <strong>httpd</strong> Apache web server can  be
-     restricted  to just the users listed in the files created by
-     <strong>htpasswd.</strong> This program can only manage usernames  and  pass-
-     words  stored  in  a  flat-file.  It can encrypt and display
-     password information for use in other types of data  stores,
-     though.  To use a DBM database see <strong>dbmmanage</strong>.
-
-     <strong>htpasswd</strong> encrypts passwords using either a  version  of  MD5
-     modified for Apache, or the system's <em>crypt</em>() routine.  Files
-     managed by <strong>htpasswd</strong> may contain  both  types  of  passwords;
-     some  user  records  may  have MD5-encrypted passwords while
-     others in the same file may have  passwords  encrypted  with
-     <em>crypt</em>().
-
-     This manual page only lists the command line arguments.  For
-     details  of  the  directives  necessary  to  configure  user
-     authentication in <strong>httpd</strong> see the Apache manual, which is part
-     of   the   Apache   distribution   or   can   be   found  at
-     &lt;URL:http://www.apache.org/&gt;.
-
-<strong>OPTIONS</strong>
-     -b   Use batch mode; <em>i</em>.<em>e</em>., get the password from the command
-          line  rather  than prompting for it. <strong>This option should</strong>
-          <strong>be used  with  extreme  care,  since  the  password  is</strong>
-          <strong>clearly visible on the command line.</strong>
-
-     -c   Create the <em>passwdfile</em>. If <em>passwdfile</em> already exists, it
-          is rewritten and truncated.  This option cannot be com-
-          bined with the <strong>-n</strong> option.
-
-     -n   Display the results  on  standard  output  rather  than
-          updating  a  file.  This is useful for generating pass-
-          word records acceptable  to  Apache  for  inclusion  in
-          non-text  data  stores.  This option changes the syntax
-          of the command  line,  since  the  <em>passwdfile</em>  argument
-          (usually  the first one) is omitted.  It cannot be com-
-          bined with the <strong>-c</strong> option.
-
-     -m   Use MD5 encryption for passwords. On Windows  and  TPF,
-          this is the default.
-
-     -d   Use crypt() encryption for passwords.  The  default  on
-          all platforms but Windows and TPF. Though possibly sup-
-          ported by <strong>htpasswd</strong> on all platforms,  it  is  not  sup-
-          ported by the <strong>httpd</strong> server on Windows and TPF.
-
-     -s   Use SHA encryption for passwords. Facilitates migration
-          from/to  Netscape  servers  using  the  LDAP  Directory
-          Interchange Format (ldif).
-
-     -p   Use plaintext passwords. Though <strong>htpasswd</strong>  will  support
-          creation  on  all platforms, the <strong>httpd</strong> daemon will only
-          accept plain text passwords on Windows and TPF.
-
-     <em>passwdfile</em>
-          Name of the file to contain the user name and password.
-          If  -c  is  given,  this file is created if it does not
-          already exist, or rewritten and truncated  if  it  does
-          exist.
-
-     <em>username</em>
-          The username to create  or  update  in  <strong>passwdfile</strong>.  If
-          <em>username</em>  does  not  exist  in  this  file, an entry is
-          added. If it does exist, the password is changed.
-
-     <em>password</em>
-          The plaintext password to be encrypted  and  stored  in
-          the file.  Only used with the -<em>b</em> flag.
-
-<strong>EXIT STATUS</strong>
-     <strong>htpasswd</strong> returns a zero status ("true") if the username  and
-     password  have  been  successfully  added  or updated in the
-     <em>passwdfile</em>.  <strong>htpasswd</strong> returns 1 if it encounters some  prob-
-     lem  accessing  files,  2 if there was a syntax problem with
-     the command line, 3 if the  password  was  entered  interac-
-     tively  and  the  verification  entry didn't match, 4 if its
-     operation was interrupted, 5 if a value is too  long  (user-
-     name,  filename,  password, or final computed record), and 6
-     if the username contains illegal characters  (see  the  <strong>RES-</strong>
-     <strong>TRICTIONS</strong> section).
-
-<strong>EXAMPLES</strong>
-     <strong>htpasswd /usr/local/etc/apache/.htpasswd-users jsmith</strong>
-
-          Adds or modifies the password for user <em>jsmith</em>. The user
-          is prompted for the password.  If executed on a Windows
-          system, the password will be encrypted using the  modi-
-          fied  Apache  MD5  algorithm;  otherwise,  the system's
-          <em>crypt</em>() routine will be used.  If  the  file  does  not
-          exist, <strong>htpasswd</strong> will do nothing except return an error.
-
-     <strong>htpasswd -c /home/doe/public_html/.htpasswd jane</strong>
-
-          Creates a new file and stores a record in it  for  user
-          <em>jane</em>.   The  user is prompted for the password.  If the
-          file exists and cannot be read, or cannot  be  written,
-          it  is  not altered and <strong>htpasswd</strong> will display a message
-          and return an error status.
-
-     <strong>htpasswd -mb /usr/web/.htpasswd-all jones Pwd4Steve</strong>
-
-          Encrypts the password from the command line (<em>Pwd4Steve</em>)
-          using the MD5 algorithm, and stores it in the specified
-          file.
-
-<strong>SECURITY CONSIDERATIONS</strong>
-     Web password files such as those managed by <strong>htpasswd</strong>  should
-     <strong>not</strong>  be  within  the Web server's URI space -- that is, they
-     should not be fetchable with a browser.
-
-     The use of the -<em>b</em> option is discouraged, since  when  it  is
-     used the unencrypted password appears on the command line.
-
-<strong>RESTRICTIONS</strong>
-     On the Windows and MPE platforms, passwords  encrypted  with
-     <strong>htpasswd</strong>  are  limited  to  no  more  than 255 characters in
-     length.  Longer passwords will be truncated to  255  charac-
-     ters.
-
-     The MD5 algorithm used by <strong>htpasswd</strong> is specific to the Apache
-     software;  passwords  encrypted  using it will not be usable
-     with other Web servers.
-
-     Usernames are limited to 255 bytes and may not  include  the
-     character ':'.
-
-<strong>SEE ALSO</strong>
-     <strong>httpd(8)</strong> and the scripts in support/SHA1 which come with the
-     distribution.
-
-</pre>
-    <!--#include virtual="footer.html" -->
-  </body>
-</html>
-
diff --git a/docs/manual/programs/httpd.html b/docs/manual/programs/httpd.html
deleted file mode 100644
index 4e35613..0000000
--- a/docs/manual/programs/httpd.html
+++ /dev/null
@@ -1,102 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head><title>Manual Page: http  - Apache HTTP Server</title></head>
-<body bgcolor="#ffffff" text="#000000" link="#0000ff"
-vlink="#000080" alink="#ff0000">
-<!--#include virtual="header.html" -->
-<h1 align="center">Manual Page: http</h1>
-<!-- This document was autogenerated from the man page -->
-<pre>
-<strong>NAME</strong>
-     httpd - Apache hypertext transfer protocol server
-
-<strong>SYNOPSIS</strong>
-     <strong>httpd </strong>[ -<strong>d </strong><em>serverroot </em>] [ -<strong>f </strong><em>config </em>] [ -<strong>C </strong><em>directive </em>] [  -<strong>c</strong>
-     <em>directive </em>] [ -<strong>D </strong><em>parameter </em>]
-
-     <strong>httpd </strong>[ -<strong>h </strong>] [ -<strong>l </strong>] [ -<strong>L </strong>] [ -<strong>v </strong>] [ -<strong>V </strong>] [ -<strong>t </strong>] [ -<strong>X </strong>]
-
-<strong>DESCRIPTION</strong>
-     <strong>httpd </strong>is  the  Apache  HyperText  Transfer  Protocol  (HTTP)
-     server  program.  It  is  designed to be run as a standalone
-     daemon process. When used like this it will create a pool of
-     child  processes to handle requests. To stop it, send a TERM
-     signal to the initial (parent) process. The PID of this pro-
-     cess  is  written  to  a  file as given in the configuration
-     file.
-
-     This manual page only lists the command line arguments.  For
-     details  of  the directives necessary to configure <strong>httpd </strong>see
-     the Apache manual, which is part of the Apache  distribution
-     or  can  be found at http://httpd.apache.org/. Paths in this
-     manual may not reflect those compiled into <strong>httpd.</strong>
-
-<strong>OPTIONS</strong>
-     -<strong>d </strong><em>serverroot</em>
-                 Set the initial value for the ServerRoot  direc-
-                 tive  to  <em>serverroot</em>.  This can be overridden by
-                 the  ServerRoot  command  in  the  configuration
-                 file. The default is <strong>/usr/local/apache2</strong>.
-
-     -<strong>f </strong><em>config   </em>Execute the  commands  in  the  file  <em>config  </em>on
-                 startup. If <em>config </em>does not begin with a /, then
-                 it is taken to be a path relative to the Server-
-                 Root. The default is <strong>conf/httpd.conf</strong>.
-
-     -<strong>C </strong><em>directive</em>
-                 Process the configuration <em>directive </em>before read-
-                 ing config files.
-
-     -<strong>c </strong><em>directive</em>
-                 Process the configuration <em>directive </em>after  read-
-                 ing config files.
-
-     -<strong>D </strong><em>parameter</em>
-                 Sets a configuration <em>parameter </em>which can be used
-                 with  &lt;IfDefine&gt;...&lt;/IfDefine&gt;  sections  in the
-                 configuration files  to  conditionally  skip  or
-                 process commands.
-
-     -<strong>h          </strong>Output a short summary of available command line
-                 options.
-
-     -<strong>l          </strong>Output a  list  of  modules  compiled  into  the
-                 server.
-
-     -<strong>L          </strong>Output  a  list  of  directives  together   with
-                 expected  arguments  and places where the direc-
-                 tive is valid.
-
-     -<strong>S          </strong>Show the settings as parsed from the config file
-                 (currently only shows the virtualhost settings).
-
-     -<strong>t          </strong>Run syntax tests for configuration  files  only.
-                 The program immediately exits after these syntax
-                 parsing with either a return code of  0  (Syntax
-                 OK)  or  return  code  not  equal  to  0 (Syntax
-                 Error).  If -<strong>D </strong><em>DUMP</em>_<em>VHOSTS </em>is also set,  details
-                 of   the  virtual  host  configuration  will  be
-                 printed.
-
-     -<strong>v          </strong>Print the version of <strong>httpd </strong>, and then exit.
-
-     -<strong>V          </strong>Print the version and build parameters of  <strong>httpd</strong>
-                 , and then exit.
-
-     -<strong>X          </strong>Run <strong>httpd </strong>in debug mode.  Only one  worker  will
-                 be  started  and the server will not detach from
-                 the console.
-
-<strong>FILES</strong>
-     <strong>/usr/local/apache2/conf/httpd.conf</strong>
-     <strong>/usr/local/apache2/conf/mime.types</strong>
-     <strong>/usr/local/apache2/conf/magic</strong>
-     <strong>/usr/local/apache2/logs/error_log</strong>
-     <strong>/usr/local/apache2/logs/access_log</strong>
-     <strong>/usr/local/apache2/logs/httpd.pid</strong>
-
-</pre>
-<!--#include virtual="footer.html" -->
-</body></html>
diff --git a/docs/manual/programs/index.html b/docs/manual/programs/index.html
deleted file mode 100755
index 9964f1c..0000000
--- a/docs/manual/programs/index.html
+++ /dev/null
@@ -1,71 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta name="generator" content="HTML Tidy, see www.w3.org" />
-
-    <title>Apache HTTP Server and Supporting Programs</title>
-  </head>
-  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-
-  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-  vlink="#000080" alink="#FF0000">
-    <!--#include virtual="header.html" -->
-
-    <h1 align="CENTER">Server and Supporting Programs</h1>
-
-    <p>This page documents all the executable programs included
-    with the Apache HTTP Server.</p>
-
-    <dl>
-      <dt><a href="httpd.html">httpd</a></dt>
-
-      <dd>Apache hypertext transfer protocol server</dd>
-
-      <dt><a href="apachectl.html">apachectl</a></dt>
-
-      <dd>Apache HTTP server control interface</dd>
-
-      <dt><a href="ab.html">ab</a></dt>
-
-      <dd>Apache HTTP server benchmarking tool</dd>
-
-      <dt><a href="apxs.html">apxs</a></dt>
-
-      <dd>APache eXtenSion tool</dd>
-
-      <dt><a href="dbmmanage.html">dbmmanage</a></dt>
-
-      <dd>Create and update user authentication files in DBM format
-      for basic authentication</dd>
-
-      <dt><a href="htdigest.html">htdigest</a></dt>
-
-      <dd>Create and update user authentication files for digest
-      authentication</dd>
-
-      <dt><a href="htpasswd.html">htpasswd</a></dt>
-
-      <dd>Create and update user authentication files for basic
-      authentication</dd>
-
-      <dt><a href="logresolve.html">logresolve</a></dt>
-
-      <dd>Resolve hostnames for IP-addresses in Apache
-      logfiles</dd>
-
-      <dt><a href="rotatelogs.html">rotatelogs</a></dt>
-
-      <dd>Rotate Apache logs without having to kill the server</dd>
-
-      <dt><a href="suexec.html">suexec</a></dt>
-
-      <dd>Switch User For Exec</dd>
-
-      <dt><a href="other.html">Other Programs</a></dt>
-    </dl>
-    <!--#include virtual="footer.html" -->
-  </body>
-</html>
-
diff --git a/docs/manual/programs/logresolve.html b/docs/manual/programs/logresolve.html
deleted file mode 100644
index 4bd61f3..0000000
--- a/docs/manual/programs/logresolve.html
+++ /dev/null
@@ -1,49 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta name="generator" content="HTML Tidy, see www.w3.org" />
-
-    <title>Manual Page: logresolve - Apache HTTP Server</title>
-  </head>
-
-  <body bgcolor="#ffffff" text="#000000" link="#0000ff"
-  vlink="#000080" alink="#ff0000">
-    <!--#include virtual="header.html" -->
-
-    <h1 align="center">Manual Page: logresolve</h1>
-    <!-- This document was autogenerated from the man page -->
-<pre>
-<strong>NAME</strong>
-     logresolve - resolve hostnames for  IP-addresses  in  Apache
-     logfiles
-
-<strong>SYNOPSIS</strong>
-     <strong>logresolve</strong>  [  -<strong>s</strong>  <em>filename</em>  ]  [  -<strong>c</strong>  ]  &lt;   <em>access</em>_<em>log</em>   &gt;
-     <em>access</em>_<em>log</em>.<em>new</em>
-
-<strong>DESCRIPTION</strong>
-     <strong>logresolve</strong> is  a  post-processing  program  to  resolve  IP-
-     addresses  in  Apache's access logfiles.  To minimize impact
-     on your nameserver, logresolve has  its  very  own  internal
-     hash-table  cache.  This means that each IP number will only
-     be looked up the first time it is found in the log file.
-
-<strong>OPTIONS</strong>
-     -<strong>s</strong> <em>filename</em> Specifies a filename to record statistics.
-
-     -<strong>c      </strong>    This causes <strong>logresolve</strong> to apply some DNS checks:
-                 after  finding the hostname from the IP address,
-                 it looks up the IP addresses  for  the  hostname
-                 and  checks that one of these matches the origi-
-                 nal address.
-
-<strong>SEE ALSO</strong>
-     <strong>httpd(8)</strong>
-
-</pre>
-    <!--#include virtual="footer.html" -->
-  </body>
-</html>
-
diff --git a/docs/manual/programs/other.html b/docs/manual/programs/other.html
deleted file mode 100755
index 226674d..0000000
--- a/docs/manual/programs/other.html
+++ /dev/null
@@ -1,46 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta name="generator" content="HTML Tidy, see www.w3.org" />
-
-    <title>Other Programs - Apache HTTP Server</title>
-  </head>
-  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-
-  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-  vlink="#000080" alink="#FF0000">
-    <!--#include virtual="header.html" -->
-
-    <h1 align="CENTER">Other Programs</h1>
-
-    <p>The following programs are simple support programs included
-    with the Apache HTTP Server which do not have their own manual
-    pages.</p>
-
-    <h2><a id="log_server_status"
-    name="log_server_status">log_server_status</a></h2>
-
-    <p>This Perl script is designed to be run at a frequent
-    interval by something like cron. It connects to the server and
-    downloads the status information. It reformats the information
-    to a single line and logs it to a file. Adjust the variables at
-    the top of the script to specify the location of the resulting
-    logfile.</p>
-
-    <h2><a id="split-logfile"
-    name="split-logfile">split-logfile</a></h2>
-
-    <p>This Perl script will take a combined Web server access log
-    file and break its contents into separate files. It assumes
-    that the first field of each line is the virtual host identity
-    (put there by "%v"), and that the logfiles should be named
-    that+".log" in the current directory.</p>
-
-    <p>The combined log file is read from stdin. Records read will
-    be appended to any existing log files.</p>
-    <!--#include virtual="footer.html" -->
-  </body>
-</html>
-
diff --git a/docs/manual/programs/rotatelogs.html b/docs/manual/programs/rotatelogs.html
deleted file mode 100644
index 45f233b..0000000
--- a/docs/manual/programs/rotatelogs.html
+++ /dev/null
@@ -1,101 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head><title>Manual Page: rotatelogs  - Apache HTTP Server</title></head>
-<body bgcolor="#ffffff" text="#000000" link="#0000ff"
-vlink="#000080" alink="#ff0000">
-<!--#include virtual="header.html" -->
-<h1 align="center">Manual Page: rotatelogs</h1>
-<!-- This document was autogenerated from the man page -->
-<pre>
-<strong>NAME</strong>
-     rotatelogs - rotate Apache logs without having to  kill  the
-     server
-
-<strong>SYNOPSIS</strong>
-     <strong>rotatelogs </strong><em>logfile rotationtime </em>[<em>offset</em>]
-
-<strong>DESCRIPTION</strong>
-     <strong>rotatelogs </strong>is a simple program for use in  conjunction  with
-     Apache's piped logfile feature, which can be used like this:
-
-     CustomLog "|bin/rotatelogs /var/logs/logfile 86400" common
-
-     This creates the files /var/logs/logfile.nnnn where nnnn  is
-     the system time at which the log nominally starts (this time
-     will always be a multiple of the rotation time, so  you  can
-     synchronize cron scripts with it).  At the end of each rota-
-     tion time (here after 24 hours) a new log is started.
-
-<strong>OPTIONS</strong>
-     <em>logfile</em>
-          The path plus basename  of  the  logfile.   If  <strong>logfile</strong>
-          includes  any  Otherwise,  the  suffix  .nnnnnnnnnn  is
-          automatically added and is the time in  seconds.   Both
-          formats  compute  the  start time from the beginning of
-          the current period.
-
-     <em>rotationtime</em>
-          The rotation time in seconds.
-
-     <em>offset</em>
-          The number of minutes offset  from  UTC.   If  omitted,
-          zero  is  assumed and UTC is used.  For example, to use
-          local time in the zone UTC -5 hours, specify a value of
-          -<em>300 </em>for this argument.
-
-<strong>PORTABILITY</strong>
-     The following logfile format string substitutions should  be
-     supported   by  all  <em>strftime</em>(<em>3</em>)  implementations,  see  the
-     <em>strftime</em>(<em>3</em>) man page for library-specific extensions.
-
-     %A   full weekday name (localized)
-
-     %a   3-character weekday name (localized)
-
-     %B   full month name (localized)
-
-     %b   3-character month name (localized)
-
-     %c   date and time (localized)
-
-     %d   2-digit day of month
-
-     %H   2-digit hour (24 hour clock)
-
-     %I   2-digit hour (12 hour clock)
-
-     %j   3-digit day of year
-
-     %M   2-digit minute
-
-     %m   2-digit month
-
-     %p   am/pm of 12 hour clock (localized)
-
-     %S   2-digit second
-
-     %U   2-digit week of year (Sunday first day of week)
-
-     %W   2-digit week of year (Monday first day of week)
-
-     %w   1-digit weekday (Sunday first day of week)
-
-     %X   time (localized)
-
-     %x   date (localized)
-
-     %Y   4-digit year
-
-     %y   2-digit year
-
-     %Z   time zone name
-
-     %%   literal `%'
-
-<strong>SEE ALSO</strong>
-     <strong>httpd(8)</strong>
-
-</pre>
-<!--#include virtual="footer.html" -->
-</body></html>
diff --git a/docs/manual/programs/suexec.html b/docs/manual/programs/suexec.html
deleted file mode 100644
index 185e8dc..0000000
--- a/docs/manual/programs/suexec.html
+++ /dev/null
@@ -1,40 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta name="generator" content="HTML Tidy, see www.w3.org" />
-
-    <title>Manual Page: suexec - Apache HTTP Server</title>
-  </head>
-
-  <body bgcolor="#ffffff" text="#000000" link="#0000ff"
-  vlink="#000080" alink="#ff0000">
-    <!--#include virtual="header.html" -->
-
-    <h1 align="center">Manual Page: suexec</h1>
-    <!-- This document was autogenerated from the man page -->
-<pre>
-<strong>NAME</strong>
-     suexec - Switch User For Exec
-
-<strong>SYNOPSIS</strong>
-     No synopsis for usage, because this program is  used  inter-
-     nally by Apache only.
-
-<strong>DESCRIPTION</strong>
-     <strong>suexec</strong> is the  "wrapper"  support  program  for  the  suEXEC
-     behaviour for Apache.  It is run from within Apache automat-
-     ically to switch the user when an external program has to be
-     run  under  a  different  user.  For  more information about
-     suEXEC  see  the  document  `Apache  suEXEC  Support'  under
-     http://httpd.apache.org/docs-2.0/suexec.html .
-
-<strong>SEE ALSO</strong>
-     <strong>httpd(8)</strong>
-
-</pre>
-    <!--#include virtual="footer.html" -->
-  </body>
-</html>
-
diff --git a/docs/manual/search/manual-index.cgi b/docs/manual/search/manual-index.cgi
deleted file mode 100644
index 592fe12..0000000
--- a/docs/manual/search/manual-index.cgi
+++ /dev/null
@@ -1,256 +0,0 @@
-#!/usr/local/bin/perl5 -w
-# ====================================================================
-# The Apache Software License, Version 1.1
-#
-# Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
-# reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# 1. Redistributions of source code must retain the above copyright
-#    notice, this list of conditions and the following disclaimer.
-#
-# 2. Redistributions in binary form must reproduce the above copyright
-#    notice, this list of conditions and the following disclaimer in
-#    the documentation and/or other materials provided with the
-#    distribution.
-#
-# 3. The end-user documentation included with the redistribution,
-#    if any, must include the following acknowledgment:
-#       "This product includes software developed by the
-#        Apache Software Foundation (http://www.apache.org/)."
-#    Alternately, this acknowledgment may appear in the software itself,
-#    if and wherever such third-party acknowledgments normally appear.
-#
-# 4. The names "Apache" and "Apache Software Foundation" must
-#    not be used to endorse or promote products derived from this
-#    software without prior written permission. For written
-#    permission, please contact apache@apache.org.
-#
-# 5. Products derived from this software may not be called "Apache",
-#    nor may "Apache" appear in their name, without prior written
-#    permission of the Apache Software Foundation.
-#
-# THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
-# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-# DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
-# ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
-# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
-# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-# SUCH DAMAGE.
-# ====================================================================
-#
-# This software consists of voluntary contributions made by many
-# individuals on behalf of the Apache Software Foundation.  For more
-# information on the Apache Software Foundation, please see
-# <http://www.apache.org/>.
-#
-# manual-index.cgi script
-# originally written by Ken Coar <Coar@DECUS.Org> in May 1997
-#
-# This script either displays a form in order to find documents in which
-# a word appears, or displays the results of such a search.  It is
-# called as a CGI script.
-#
-# [FILE]PATH_INFO is the prefix to add to to the files names found in
-# the index (URL prefix, not filesystem prefix), and QUERY_STRING is the
-# word to be found.
-#
-#***
-#***
-# You may need to tweak the following line to point to the correct
-# location of the index file on your system (it's in the
-# apache/htdocs/manual directory of the Apache distribution tree).
-#***
-#***
-$INDEX = "/www/apache.org/manual-index-data";
-
-#***
-#***
-# You shouldn't have to modify anything else.
-#***
-#***
-
-$HTML = "";
-
-#
-# If we have a FILEPATH_INFO or PATH_INFO, it's there to remap the
-# documents to the manual root directory.  If this script is already in
-# that directory, this isn't needed.
-#
-$prefix = $ENV{'FILEPATH_INFO'} || $ENV{'PATH_INFO'};
-$prefix .= "/" if ($prefix && ($prefix !~ m:/$:));
-
-#
-# QUERY_STRING, if present, contains the word for which we are to
-# search.  We also  use its [non]presence to determine wha we display.
-#
-$word = $ENV{'QUERY_STRING'};
-
-#
-# Make sure our HTTP header makes it to the server by causing Perl to do
-# a fflush() after every write to STDOUT.
-#
-select (STDOUT);
-$| = 1;
-printf ("Content-type: text/html\n\n");
-
-#
-# Fine, now buffering can go back to normal.
-#
-$| = 0;
-
-#
-# Set up the HTML page title
-$title = "Apache Documentation Search";
-$title .= ": Results for \"$word\"" if ($word);
-
-#
-# We'll re-use the HTML scalar several times; we use it with here
-# documents for multi-line static HTML code.  Lets' do the standard page
-# header.
-#
-$HTML = <<EOHT;
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<HTML>
- <HEAD>
-  <TITLE>$title
-  </TITLE>
- </HEAD>
-<!-- Background white, links blue (unvisited), navy (visited), red (active) -->
- <BODY
-  BGCOLOR="#FFFFFF"
-  TEXT="#000000"
-  LINK="#0000FF"
-  VLINK="#000080"
-  ALINK="#FF0000"
- >
-  <DIV ALIGN="CENTER">
-   <IMG
-    SRC="${prefix}images/sub.gif"
-    ALT=""
-   >
-  </DIV>
-  <H1 ALIGN="CENTER">
-   Apache Documentation Search
-  </H1>
-  <P>
-  This script performs a very simple search across the Apache
-  documentation for any single case-insensitive word.  No combinations,
-  wildcards, regular expressions, word-stubbing, or other fancy options
-  are supported; this is just to help you find topics quickly.  Only
-  those pages which include the <EM>exact</EM> word you type will be
-  listed.
-  </P>
-  <P>
-  Documents containing the search word are <EM>not</EM> listed in any
-  sort of priority order.
-  </P>
-  <ISINDEX PROMPT="Enter word to find and press ENTER: ">
-EOHT
-
-printf ($HTML);
-
-#
-# Now set up the next section, which is only displayed if we've been
-# given a word to find.
-#
-$HTML = <<EOHT;
-  <HR>
-  <H2>
-   Results of Search for <SAMP>$word</SAMP>
-  </H2>
-EOHT
-
-#
-# We enblock the next section so problems can drop out to the common
-# closure code.
-#
-QUERY:
-    {
-	if ($word) {
-	    #
-	    # Try and open the index file; complain bitterly if we can't.
-	    #
-	    if (! open (INDEX, "<$INDEX")) {
-		printf ("Can't find documentation index!");
-		last QUERY;
-	    }
-	    #
-	    # Got it; display the search-results header.
-	    #
-	    printf ($HTML);
-	    #
-	    # Read the entire index in and turn it into an hash for the
-	    # lookup.
-	    #
-	    @index = <INDEX>;
-	    close (INDEX);
-	    chomp (@index);
-	    foreach (@index) {
-		($key, $files) = split (/:/, $_);
-		$Index{$key} = $files;
-	    }
-	    #
-	    # The dictionary is all lowercase words.  Smash our query value
-	    # and try to find it.
-	    #
-	    $word = lc ($word);
-	    if (! exists ($Index{$word})) {
-		printf ("  <P>\n  <EM>Sorry, no matches found.</EM>\n  </P>\n");
-		last QUERY;
-	    }
-	    #
-	    # Found an entry, so turn the hash value (a comma-separated list
-	    # of relative file names) into an array for display.
-	    # Incidentally, tell the user how many there are.
-	    #
-	    @files = split (/,/, $Index{$word});
-	    printf ("  <P>Total of %d match", scalar (@files));
-	    #
-	    # Be smart about plurals.
-	    #
-	    if (scalar (@files) != 1) {
-		printf ("es") ;
-	    }
-	    printf (" found.\n  </P>\n");
-	    #
-	    # Right.  Now display the files as they're listed.
-	    #
-	    printf ("  <OL>\n");
-	    foreach (@files) {
-		printf ("   <LI><A HREF=\"${prefix}$_\">");
-		printf ("<SAMP>$_</SAMP></A>\n");
-		printf ("   </LI>\n");
-	    }
-	    printf ("  </OL>\n");
-	    #
-	    # C'est tout!
-	    #
-	}
-    }
-
-#
-# Back to common code - the exit path.  Display the page trailer.
-#
-$HTML = <<EOHT;
-  <A
-   HREF="/"
-  ><IMG
-    SRC="/images/apache_home.gif"
-    ALT="Home"
-   ></A>
-  <HR>
- </BODY>
-</HTML>
-EOHT
-
-printf ($HTML);
-exit (0);
diff --git a/docs/manual/sections.html b/docs/manual/sections.html
deleted file mode 100644
index 9782a63..0000000
--- a/docs/manual/sections.html
+++ /dev/null
@@ -1,152 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta name="generator" content="HTML Tidy, see www.w3.org" />
-
-    <title>How Directory, Location and Files sections work</title>
-  </head>
-  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-
-  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-  vlink="#000080" alink="#FF0000">
-    <!--#include virtual="header.html" -->
-
-    <h1 align="CENTER">How Directory, Location and Files sections
-    work</h1>
-
-    <p>The sections <a
-    href="mod/core.html#directory"><code>&lt;Directory&gt;</code></a>,
-    <a
-    href="mod/core.html#location"><code>&lt;Location&gt;</code></a>
-    and <a
-    href="mod/core.html#files"><code>&lt;Files&gt;</code></a> can
-    contain directives which only apply to specified directories,
-    URLs or files respectively. Also htaccess files can be used
-    inside a directory to apply directives to that directory. This
-    document explains how these different sections differ and how
-    they relate to each other when Apache decides which directives
-    apply for a particular directory or request URL.</p>
-
-    <h2>Directives allowed in the sections</h2>
-
-    <p>Everything that is syntactically allowed in
-    <code>&lt;Directory&gt;</code> is also allowed in
-    <code>&lt;Location&gt;</code> (except a
-    sub-<code>&lt;Files&gt;</code> section). Semantically, however
-    some things, most notably <code>AllowOverride</code> and the
-    two options <code>FollowSymLinks</code> and
-    <code>SymLinksIfOwnerMatch</code>, make no sense in
-    <code>&lt;Location&gt;</code>,
-    <code>&lt;LocationMatch&gt;</code> or
-    <code>&lt;DirectoryMatch&gt;</code>. The same for
-    <code>&lt;Files&gt;</code> -- syntactically everything is fine,
-    but semantically some things are different.</p>
-
-    <h2>How the sections are merged</h2>
-
-    <p>The order of merging is:</p>
-
-    <ol>
-      <li><code>&lt;Directory&gt;</code> (except regular
-      expressions) and .htaccess done simultaneously (with
-      .htaccess, if allowed, overriding
-      <code>&lt;Directory&gt;</code>)</li>
-
-      <li><code>&lt;DirectoryMatch&gt;</code>, and
-      <code>&lt;Directory&gt;</code> with regular expressions</li>
-
-      <li><code>&lt;Files&gt;</code> and
-      <code>&lt;FilesMatch&gt;</code> done simultaneously</li>
-
-      <li><code>&lt;Location&gt;</code> and
-      <code>&lt;LocationMatch&gt;</code> done simultaneously</li>
-    </ol>
-
-    <p>Apart from <code>&lt;Directory&gt;</code>, each group is
-    processed in the order that they appear in the configuration
-    files. <code>&lt;Directory&gt;</code> (group 1 above) is
-    processed in the order shortest directory component to longest.
-    If multiple <code>&lt;Directory&gt;</code> sections apply to
-    the same directory they they are processed in the configuration
-    file order. The configuration files are read in the order
-    httpd.conf, srm.conf and access.conf. Configurations included
-    via the <code>Include</code> directive will be treated as if
-    they were inside the including file at the location of the
-    <code>Include</code> directive.</p>
-
-    <p>Sections inside <code>&lt;VirtualHost&gt;</code> sections
-    are applied <em>after</em> the corresponding sections outside
-    the virtual host definition. This allows virtual hosts to
-    override the main server configuration.</p>
-
-    <p>Later sections override earlier ones.</p>
-
-    <h2>Notes about using sections</h2>
-
-    <p>The general guidelines are:</p>
-
-    <ul>
-      <li>If you are attempting to match objects at the filesystem
-      level then you must use <code>&lt;Directory&gt;</code> and/or
-      <code>&lt;Files&gt;</code>.</li>
-
-      <li>If you are attempting to match objects at the URL level
-      then you must use <code>&lt;Location&gt;</code></li>
-    </ul>
-
-    <p>But a notable exception is:</p>
-
-    <ul>
-      <li>proxy control is done via <code>&lt;Directory&gt;</code>.
-      This is a legacy mistake because the proxy existed prior to
-      <code>&lt;Location&gt;</code>. A future version of the config
-      language should probably switch this to
-      <code>&lt;Location&gt;</code>.</li>
-    </ul>
-
-    <p>Note about .htaccess parsing:</p>
-
-    <ul>
-      <li>Modifying .htaccess parsing during Location doesn't do
-      anything because .htaccess parsing has already occurred.</li>
-    </ul>
-
-    <p><code>&lt;Location&gt;</code> and symbolic links:</p>
-
-    <ul>
-      <li>It is not possible to use "<code>Options
-      FollowSymLinks</code>" or "<code>Options
-      SymLinksIfOwnerMatch</code>" inside a
-      <code>&lt;Location&gt;</code>,
-      <code>&lt;LocationMatch&gt;</code> or
-      <code>&lt;DirectoryMatch&gt;</code> section (the options are
-      simply ignored). Using the options in question is only
-      possible inside a <code>&lt;Directory&gt;</code> section (or
-      a <code>.htaccess</code> file).</li>
-    </ul>
-
-    <p><code>&lt;Files&gt;</code> and <code>Options</code>:</p>
-
-    <ul>
-      <li>Apache won't check for it, but using an
-      <code>Options</code> directive inside a
-      <code>&lt;Files&gt;</code> section has no effect.</li>
-    </ul>
-
-    <p>Another note:</p>
-
-    <ul>
-      <li>There is actually a
-      <code>&lt;Location&gt;</code>/<code>&lt;LocationMatch&gt;</code>
-      sequence performed just before the name translation phase
-      (where <code>Aliases</code> and <code>DocumentRoots</code>
-      are used to map URLs to filenames). The results of this
-      sequence are completely thrown away after the translation has
-      completed.</li>
-    </ul>
-    <!--#include virtual="footer.html" -->
-  </body>
-</html>
-
diff --git a/docs/manual/sections.html.en b/docs/manual/sections.html.en
deleted file mode 100644
index 9782a63..0000000
--- a/docs/manual/sections.html.en
+++ /dev/null
@@ -1,152 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta name="generator" content="HTML Tidy, see www.w3.org" />
-
-    <title>How Directory, Location and Files sections work</title>
-  </head>
-  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-
-  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-  vlink="#000080" alink="#FF0000">
-    <!--#include virtual="header.html" -->
-
-    <h1 align="CENTER">How Directory, Location and Files sections
-    work</h1>
-
-    <p>The sections <a
-    href="mod/core.html#directory"><code>&lt;Directory&gt;</code></a>,
-    <a
-    href="mod/core.html#location"><code>&lt;Location&gt;</code></a>
-    and <a
-    href="mod/core.html#files"><code>&lt;Files&gt;</code></a> can
-    contain directives which only apply to specified directories,
-    URLs or files respectively. Also htaccess files can be used
-    inside a directory to apply directives to that directory. This
-    document explains how these different sections differ and how
-    they relate to each other when Apache decides which directives
-    apply for a particular directory or request URL.</p>
-
-    <h2>Directives allowed in the sections</h2>
-
-    <p>Everything that is syntactically allowed in
-    <code>&lt;Directory&gt;</code> is also allowed in
-    <code>&lt;Location&gt;</code> (except a
-    sub-<code>&lt;Files&gt;</code> section). Semantically, however
-    some things, most notably <code>AllowOverride</code> and the
-    two options <code>FollowSymLinks</code> and
-    <code>SymLinksIfOwnerMatch</code>, make no sense in
-    <code>&lt;Location&gt;</code>,
-    <code>&lt;LocationMatch&gt;</code> or
-    <code>&lt;DirectoryMatch&gt;</code>. The same for
-    <code>&lt;Files&gt;</code> -- syntactically everything is fine,
-    but semantically some things are different.</p>
-
-    <h2>How the sections are merged</h2>
-
-    <p>The order of merging is:</p>
-
-    <ol>
-      <li><code>&lt;Directory&gt;</code> (except regular
-      expressions) and .htaccess done simultaneously (with
-      .htaccess, if allowed, overriding
-      <code>&lt;Directory&gt;</code>)</li>
-
-      <li><code>&lt;DirectoryMatch&gt;</code>, and
-      <code>&lt;Directory&gt;</code> with regular expressions</li>
-
-      <li><code>&lt;Files&gt;</code> and
-      <code>&lt;FilesMatch&gt;</code> done simultaneously</li>
-
-      <li><code>&lt;Location&gt;</code> and
-      <code>&lt;LocationMatch&gt;</code> done simultaneously</li>
-    </ol>
-
-    <p>Apart from <code>&lt;Directory&gt;</code>, each group is
-    processed in the order that they appear in the configuration
-    files. <code>&lt;Directory&gt;</code> (group 1 above) is
-    processed in the order shortest directory component to longest.
-    If multiple <code>&lt;Directory&gt;</code> sections apply to
-    the same directory they they are processed in the configuration
-    file order. The configuration files are read in the order
-    httpd.conf, srm.conf and access.conf. Configurations included
-    via the <code>Include</code> directive will be treated as if
-    they were inside the including file at the location of the
-    <code>Include</code> directive.</p>
-
-    <p>Sections inside <code>&lt;VirtualHost&gt;</code> sections
-    are applied <em>after</em> the corresponding sections outside
-    the virtual host definition. This allows virtual hosts to
-    override the main server configuration.</p>
-
-    <p>Later sections override earlier ones.</p>
-
-    <h2>Notes about using sections</h2>
-
-    <p>The general guidelines are:</p>
-
-    <ul>
-      <li>If you are attempting to match objects at the filesystem
-      level then you must use <code>&lt;Directory&gt;</code> and/or
-      <code>&lt;Files&gt;</code>.</li>
-
-      <li>If you are attempting to match objects at the URL level
-      then you must use <code>&lt;Location&gt;</code></li>
-    </ul>
-
-    <p>But a notable exception is:</p>
-
-    <ul>
-      <li>proxy control is done via <code>&lt;Directory&gt;</code>.
-      This is a legacy mistake because the proxy existed prior to
-      <code>&lt;Location&gt;</code>. A future version of the config
-      language should probably switch this to
-      <code>&lt;Location&gt;</code>.</li>
-    </ul>
-
-    <p>Note about .htaccess parsing:</p>
-
-    <ul>
-      <li>Modifying .htaccess parsing during Location doesn't do
-      anything because .htaccess parsing has already occurred.</li>
-    </ul>
-
-    <p><code>&lt;Location&gt;</code> and symbolic links:</p>
-
-    <ul>
-      <li>It is not possible to use "<code>Options
-      FollowSymLinks</code>" or "<code>Options
-      SymLinksIfOwnerMatch</code>" inside a
-      <code>&lt;Location&gt;</code>,
-      <code>&lt;LocationMatch&gt;</code> or
-      <code>&lt;DirectoryMatch&gt;</code> section (the options are
-      simply ignored). Using the options in question is only
-      possible inside a <code>&lt;Directory&gt;</code> section (or
-      a <code>.htaccess</code> file).</li>
-    </ul>
-
-    <p><code>&lt;Files&gt;</code> and <code>Options</code>:</p>
-
-    <ul>
-      <li>Apache won't check for it, but using an
-      <code>Options</code> directive inside a
-      <code>&lt;Files&gt;</code> section has no effect.</li>
-    </ul>
-
-    <p>Another note:</p>
-
-    <ul>
-      <li>There is actually a
-      <code>&lt;Location&gt;</code>/<code>&lt;LocationMatch&gt;</code>
-      sequence performed just before the name translation phase
-      (where <code>Aliases</code> and <code>DocumentRoots</code>
-      are used to map URLs to filenames). The results of this
-      sequence are completely thrown away after the translation has
-      completed.</li>
-    </ul>
-    <!--#include virtual="footer.html" -->
-  </body>
-</html>
-
diff --git a/docs/manual/server-wide.html.en b/docs/manual/server-wide.html.en
deleted file mode 100644
index f2c932b..0000000
--- a/docs/manual/server-wide.html.en
+++ /dev/null
@@ -1,134 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta name="generator" content="HTML Tidy, see www.w3.org" />
-
-    <title>Server-Wide Configuration</title>
-  </head>
-  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-
-  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-  vlink="#000080" alink="#FF0000">
-    <!--#include virtual="header.html" -->
-
-    <h1 align="center">Server-Wide Configuration</h1>
-
-    <p>This document explains some of the directives provided by
-    the <a href="mod/core.html">core</a> server which are used to
-    configure the basic operations of the server.</p>
-
-    <ul>
-      <li><a href="#identification">Server Identification</a></li>
-
-      <li><a href="#locations">File Locations</a></li>
-
-      <li><a href="#resource">Limiting Resource Usage</a></li>
-    </ul>
-    <hr />
-
-    <h2><a id="identification" name="identification">Server
-    Identification</a></h2>
-
-    <table border="1">
-      <tr>
-        <td valign="top"><strong>Related Directives</strong><br />
-         <br />
-         <a href="mod/core.html#servername">ServerName</a><br />
-         <a href="mod/core.html#serveradmin">ServerAdmin</a><br />
-         <a
-        href="mod/core.html#serversignature">ServerSignature</a><br />
-         <a
-        href="mod/core.html#servertokens">ServerTokens</a><br />
-         <a
-        href="mod/core.html#usecanonicalname">UseCanonicalName</a><br />
-         </td>
-      </tr>
-    </table>
-
-    <p>The <code>ServerAdmin</code> and <code>ServerTokens</code>
-    directives control what information about the server will be
-    presented in server-generated documents such as error messages.
-    The <code>ServerTokens</code> directive sets the value of the
-    Server HTTP response header field.</p>
-
-    <p>The <code>ServerName</code> and
-    <code>UseCanonicalName</code> directives are used by the server
-    to determine how to construct self-referential URLs. For
-    example, when a client requests a directory, but does not
-    include the trailing slash in the directory name, Apache must
-    redirect the client to the full name including the trailing
-    slash so that the client will correctly resolve relative
-    references in the document.</p>
-    <hr />
-
-    <h2><a id="locations" name="locations">File Locations</a></h2>
-
-    <table border="1">
-      <tr>
-        <td valign="top"><strong>Related Directives</strong><br />
-         <br />
-         <a
-        href="mod/core.html#coredumpdirectory">CoreDumpDirectory</a><br />
-         <a
-        href="mod/core.html#documentroot">DocumentRoot</a><br />
-         <a href="mod/core.html#errorlog">ErrorLog</a><br />
-         <a href="mod/core.html#lockfile">Lockfile</a><br />
-         <a href="mod/core.html#pidfile">PidFile</a><br />
-         <a
-        href="mod/core.html#scoreboardfile">ScoreBoardFile</a><br />
-         <a href="mod/core.html#serverroot">ServerRoot</a><br />
-         </td>
-      </tr>
-    </table>
-
-    <p>These directives control the locations of the various files
-    that Apache needs for proper operation. When the pathname used
-    does not begin with a slash "/", the files are located relative
-    to the <code>ServerRoot</code>. Be careful about locating files
-    in paths which are writable by non-root users. See the <a
-    href="misc/security_tips.html">security tips</a> documentation
-    for more details.</p>
-    <hr />
-
-    <h2><a id="resource" name="resource">Limiting Resource
-    Usage</a></h2>
-
-    <table border="1">
-      <tr>
-        <td valign="top"><strong>Related Directives</strong><br />
-         <br />
-         <a
-        href="mod/core.html#limitrequestbody">LimitRequestBody</a><br />
-         <a
-        href="mod/core.html#limitrequestfields">LimitRequestFields</a><br />
-         <a
-        href="mod/core.html#limitrequestfieldsize">LimitRequestFieldsize</a><br />
-         <a
-        href="mod/core.html#limitrequestline">LimitRequestLine</a><br />
-         <a href="mod/core.html#rlimitcpu">RLimitCPU</a><br />
-         <a href="mod/core.html#rlimitmem">RLimitMEM</a><br />
-         <a href="mod/core.html#rlimitnproc">RLimitNPROC</a><br />
-         <a
-        href="mod/core.html#threadstacksize">ThreadStackSize</a><br />
-         </td>
-      </tr>
-    </table>
-
-    <p>The <code>LimitRequest</code>* directives are used to place
-    limits on the amount of resources Apache will use in reading
-    requests from clients. By limiting these values, some kinds of
-    denial of service attacks can be mitigated.</p>
-
-    <p>The <code>RLimit</code>* directives are used to limit the
-    amount of resources which can be used by processes forked off
-    from the Apache children. In particular, this will control
-    resources used by CGI scripts and SSI exec commands.</p>
-
-    <p>The <code>ThreadStackSize</code> directive is used only on
-    Netware to control the stack size.</p>
-    <!--#include virtual="footer.html" -->
-  </body>
-</html>
-
diff --git a/docs/manual/server-wide.html.ja.jis b/docs/manual/server-wide.html.ja.jis
deleted file mode 100644
index 1ed7d25..0000000
--- a/docs/manual/server-wide.html.ja.jis
+++ /dev/null
@@ -1,113 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<html>
-<head>
-<title>Server-Wide Configuration</title>
-</head>
-<!-- English revision: 1.6 -->
-
-<!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-<body
- bgcolor="#FFFFFF"
- text="#000000"
- link="#0000FF"
- vlink="#000080"
- alink="#FF0000"
->
-<!--#include virtual="header.html" -->
-<h1 align="center">$B%5!<%PA4BN$N@_Dj(B</h1>
-
-<p>$B$3$N%I%-%e%a%s%H$G$O(B<a href="mod/core.html">$B%3%"(B</a>$B%5!<%P$N(B
-$B%G%#%l%/%F%#%V$NCf$G!"4pK\F0:n$r@_Dj$9$k$?$a$N$b$N$r@bL@$7$^$9!#(B</p>
-
-<ul>
-<li><a href="#identification">$B%5!<%P(B ID</a></li>
-<li><a href="#locations">$B%U%!%$%k$N0LCV(B</a></li>
-<li><a href="#resource">$B%j%=!<%9$N@)8B(B</a></li>
-</ul>
-
-<hr>
-
-<h2><a name="identification">$B%5!<%P(B ID</a></h2>
-
-<table border="1">
-<tr><td valign="top">
-<strong>$B4XO"%G%#%l%/%F%#%V(B</strong><br><br>
-
-<a href="mod/core.html#servername">ServerName</a><br>
-<a href="mod/core.html#serveradmin">ServerAdmin</a><br>
-<a href="mod/core.html#serversignature">ServerSignature</a><br>
-<a href="mod/core.html#servertokens">ServerTokens</a><br>
-<a href="mod/core.html#usecanonicalname">UseCanonicalName</a><br>
-</td></tr></table>
-
-<p><code>ServerAdmin</code> $B%G%#%l%/%F%#%V$H(B <code>ServerTokens</code>
-$B%G%#%l%/%F%#%V$O!"%(%i!<%a%C%;!<%8$J$I$N%5!<%P$,:n$k%I%-%e%a%s%H$K!"(B
-$B$I$N$h$&$J%5!<%P$N>pJs$rI=<($9$k$+$r@)8f$7$^$9!#(B<code>ServerTokens</code>
-$B%G%#%l%/%F%#%V$O!"(BServer HTTP $B%l%9%]%s%9%X%C%@%U%#!<%k%I$NCM$r(B
-$B@_Dj$7$^$9!#(B</p>
-
-<p><code>ServerName</code> $B%G%#%l%/%F%#%V$H(B <code>UseCanonicalName</code>
-$B%G%#%l%/%F%#%V$O!"%5!<%P$,<+J,<+?H$r;2>H$9$k(B URL $B$r:n$k$H$-$K(B
-$B;H$o$l$^$9!#$?$H$($P!"%/%i%$%"%s%H$,%G%#%l%/%H%j$rMW5a$7$F!"(B
-$B$=$N%G%#%l%/%H%jL>$N:G8e$K%9%i%C%7%e$,IU$$$F$$$J$$$h$&$J>l9g$K$O!"(B
-$B%I%-%e%a%s%H$NAjBPE*$J;2>H$r@5$7$/2r7h$G$-$k$h$&$K$9$k$?$a$K!"(B
-Apache $B$O:G8e$N%9%i%C%7%e$r4^$s$@40A4$J%Q%9$K%/%i%$%"%s%H$r(B
-$B%j%@%$%l%/%H$5$;$kI,MW$,$"$j$^$9!#(B</p>
-
-<hr>
-
-<h2><a name="locations">$B%U%!%$%k$N0LCV(B</a></h2>
-
-<table border="1">
-<tr><td valign="top">
-<strong>$B4XO"%G%#%l%/%F%#%V(B</strong><br><br>
-
-<a href="mod/core.html#coredumpdirectory">CoreDumpDirectory</a><br>
-<a href="mod/core.html#documentroot">DocumentRoot</a><br>
-<a href="mod/core.html#errorlog">ErrorLog</a><br>
-<a href="mod/core.html#lockfile">Lockfile</a><br>
-<a href="mod/core.html#pidfile">PidFile</a><br>
-<a href="mod/core.html#scoreboardfile">ScoreBoardFile</a><br>
-<a href="mod/core.html#serverroot">ServerRoot</a><br>
-</td></tr></table>
-
-<p>$B$3$l$i$N%G%#%l%/%F%#%V$O(B Apache $B$,E,@Z$JF0:n$r$9$k$?$a$KI,MW$J(B
-$B3F<o%U%!%$%k$N0LCV$r@)8f$7$^$9!#%Q%9$,%9%i%C%7%e(B "/" $B$G;O$^$C$F$$$J$$(B
-$B$H$-$O!"%U%!%$%k$O(B <code>ServerRoot</code> $B$+$i$NAjBP%Q%9$H$7$F(B
-$BC5$5$l$^$9!#(Broot $B0J30$N%f!<%6$,=q$-9~$_2DG=$J%Q%9$K%U%!%$%k$r(B
-$BCV$/>l9g$OCm0U$,I,MW$G$9!#>\:Y$O(B<a
-href="misc/security_tips.html">$B!V%;%-%e%j%F%#>pJs!W(B</a>$B$r(B
-$B;2>H$7$F$/$@$5$$!#(B</p>
-
-<hr>
-<h2><a name="resource">$B%j%=!<%9$N@)8B(B</a></h2>
-<table border="1">
-<tr><td valign="top">
-<strong>$B4XO"%G%#%l%/%F%#%V(B</strong><br><br>
-
-<a href="mod/core.html#limitrequestbody">LimitRequestBody</a><br>
-<a href="mod/core.html#limitrequestfields">LimitRequestFields</a><br>
-<a href="mod/core.html#limitrequestfieldsize">LimitRequestFieldsize</a><br>
-<a href="mod/core.html#limitrequestline">LimitRequestLine</a><br>
-<a href="mod/core.html#rlimitcpu">RLimitCPU</a><br>
-<a href="mod/core.html#rlimitmem">RLimitMEM</a><br>
-<a href="mod/core.html#rlimitnproc">RLimitNPROC</a><br>
-<a href="mod/core.html#threadstacksize">ThreadStackSize</a><br>
-</td></tr></table>
-
-<p><code>LimitRequest</code>* $B%G%#%l%/%F%#%V$O(B Apache $B$,(B
-$B%/%i%$%"%s%H$+$i$N%j%/%(%9%HFI$_9~$_$G;H$&%j%=!<%9$r@)8B$9$k$?$a$K(B
-$B;H$o$l$^$9!#$3$l$i$NCM$r@)8B$9$k$3$H$G!"$$$/$D$+$N%5!<%S%95qH]967b$O(B
-$B1F6A$rOB$i$2$k$3$H$,$G$-$^$9!#(B</p>
-
-<p><code>RLimit</code>* $B%G%#%l%/%F%#%V$O!"(BApache $B$N;R%W%m%;%9$+$i(B
-fork $B$5$l$?%W%m%;%9$,;HMQ$9$k%j%=!<%9$r@)8B$9$k$?$a$K(B
-$B;H$o$l$^$9!#FC$K!"$3$l$O(B CGI $B%9%/%j%W%H$H(B SSI exec $B%3%^%s%I$G(B
-$B;H$o$l$k%j%=!<%9$r@)8f$7$^$9!#(B</p>
-
-<p><code>ThreadStackSize</code> $B$O(B Netware $B$G$N$_!"%9%?%C%/$NBg$-$5$r(B
-$B@)8f$9$k$?$a$K;H$o$l$^$9!#(B</p>
-
-<!--#include virtual="footer.html" -->
-</body>
-</html>
diff --git a/docs/manual/sitemap.html b/docs/manual/sitemap.html
deleted file mode 100644
index e735f5b..0000000
--- a/docs/manual/sitemap.html
+++ /dev/null
@@ -1,200 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <title>Site Map - Apache HTTP Server 2.0</title>
-  </head>
-  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-
-  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-  vlink="#000080" alink="#FF0000">
-    <!--#include virtual="header.html" -->
-
-    <h1 align="center">Site Map</h1>
-
-<ul>
-<li><a href="index.html">Apache HTTP Server Version 2.0 Documentation</a>
-
-<ul>
-<li>Release Notes
-<ul>
-<li><a href="upgrading.html">Upgrading to 2.0 from 1.3</a></li>
-<li><a href="new_features_2_0.html">New features with Apache 2.0</a></li>
-</ul></li>
-
-<li>Using the Apache HTTP Server
-<ul>
-<li><a href="install.html">Compiling and Installing Apache</a></li>
-<li><a href="invoking.html">Starting Apache</a></li>
-<li><a href="stopping.html">Stopping and Restarting the Server</a></li>
-<li><a href="configuring.html">Configuration Files</a></li>
-<li><a href="sections.html">How Directory, Location and Files sections work</a></li>
-<li><a href="server-wide.html">Server-Wide Configuration</a></li>
-<li><a href="logs.html">Log Files</a></li>
-<li><a href="urlmapping.html">Mapping URLs to Filesystem Locations</a></li>
-<li><a href="misc/security_tips.html">Security Tips</a></li>
-<li><a href="dso.html">Dynamic Shared Object (DSO) support</a></li>
-<li><a href="content-negotiation.html">Content Negotiation</a></li>
-<li><a href="custom-error.html">Custom error responses</a></li>
-<li><a href="bind.html">Setting which addresses and ports Apache uses</a></li>
-<li><a href="mpm.html">Multi-Processing Modules (MPMs)</a></li>
-<li><a href="env.html">Environment Variables in Apache</a></li>
-<li><a href="handler.html">Apache's Handler Use</a></li>
-<li><a href="filter.html">Filters</a></li>
-<li><a href="suexec.html">suEXEC Support</a></li>
-<li><a href="misc/perf-tuning.html">Performance Hintes</a></li>
-<li><a href="misc/rewriteguide.html">URL Rewriting Guide</a></li>
-</ul></li>
-
-<li><a href="vhosts/">Apache Virtual Host documentation</a>
-<ul>
-<li><a href="vhosts/name-based.html">Name-based Virtual Hosts</a></li>
-<li><a href="vhosts/ip-based.html">IP-based Virtual Host Support</a></li>
-<li><a href="vhosts/mass.html">Dynamically configured mass virtual hosting</a></li>
-<li><a href="vhosts/examples.html">VirtualHost Examples</a></li>
-<li><a href="vhosts/details.html">An In-Depth Discussion of Virtual Host Matching</a></li>
-<li><a href="vhosts/fd-limits.html">File descriptor limitations</a></li>
-<li><a href="dns-caveats.html">Issues Regarding DNS and Apache</a></li>
-</ul></li>
-
-<li><a href="faq/">Apache Server Frequently Asked Questions</a>
-<ul>
-<li><a href="faq/support.html">Support</a></li>
-</ul></li>
-
-<li><a href="ssl/">Apache SSL/TLS Encryption</a>
-<ul>
-<li><a href="ssl/ssl_intro.html">SSL/TLS Encryption: An Introduction</a></li>
-<li><a href="ssl/ssl_compat.html">SSL/TLS Encryption: Compatibility</a></li>
-<li><a href="ssl/ssl_howto.html">SSL/TLS Encryption: How-To</a></li>
-<li><a href="ssl/ssl_faq.html">SSL/TLS Encryption: FAQ</a></li>
-<li><a href="ssl/ssl_glossary.html">SSL/TLS Encryption: Glossary</a></li>
-</ul></li>
-
-
-<li>Guides, Tutorials, and HowTos
-<ul>
-<li><a href="howto/auth.html">Authentication</a></li>
-<li><a href="howto/cgi.html">Apache Tutorial: Dynamic Content with CGI</a></li>
-<li><a href="howto/ssi.html">Apache Tutorial: Introduction to Server
-Side Includes</a></li>
-<li><a href="misc/tutorials.html">Apache Tutorials</a></li>
-</ul></li>
-
-
-<li>Platfrom-specific Notes
-<ul>
-<li><a href="platform/windows.html">Using Apache with Microsoft
-Windows</a></li>
-<li><a href="platform/win_compiling.html">Compiling Apache for
-Microsoft Windows</a></li>
-<li><a href="platform/win_service.html">Running Apache for Windows as
-a Service</a></li>
-<li><a href="platform/netware.html">Using Apache with Novell NetWare</a></li>
-<li><a href="platform/perf-hp.html">Running a High-Performance Web
-Server on HPUX</a></li>
-<li><a href="ebcdic.html">The Apache EBCDIC Port</a></li>
-</ul></li>
-
-<li><a href="programs/">Apache HTTP Server and Supporting Programs</a>
-<ul>
-<li><a href="programs/httpd.html">Manual Page: httpd</a></li>
-<li><a href="programs/ab.html">Manual Page: ab</a></li>
-<li><a href="programs/apachectl.html">Manual Page: apachectl</a></li>
-<li><a href="programs/apxs.html">Manual Page: apxs</a></li>
-<li><a href="programs/dbmmanage.html">Manual Page: dbmmanage</a></li>
-<li><a href="programs/htdigest.html">Manual Page: htdigest</a></li>
-<li><a href="programs/htpasswd.html">Manual Page: htpasswd</a></li>
-<li><a href="programs/logresolve.html">Manual Page: logresolve</a></li>
-<li><a href="programs/rotatelogs.html">Manual Page: rotatelogs</a></li>
-<li><a href="programs/suexec.html">Manual Page: suexec</a></li>
-<li><a href="programs/other.html">Other Programs</a></li>
-</ul></li>
-
-<li><a href="misc/">Apache Miscellaneous Documentation</a>
-<ul>
-<li><a href="misc/custom_errordocs.html">International Customized Server Error Messages</a></li>
-<li><a href="misc/fin_wait_2.html">Connections in FIN_WAIT_2 and Apache</a></li>
-<li><a href="misc/known_client_problems.html">Known Client Problems</a></li>
-<li><a href="misc/descriptors.html">Descriptors and Apache</a></li>
-<li><a href="cgi_path.html">PATH_INFO Changes in the CGI Environment</a></li>
-</ul></li>
-
-<li><a href="mod/">Apache modules</a>
-<ul>
-<li><a href="mod/index-bytype.html">Apache modules - By Type</a></li>
-<li><a href="mod/directives.html">Apache directives</a></li>
-<li><a href="mod/module-dict.html">Definitions of terms used to describe Apache modules</a></li>
-<li><a href="mod/directive-dict.html">Definitions of terms used to describe Apache directives</a></li>
-<li><a href="mod/core.html">Apache Core Features</a></li>
-<li><a href="mod/mpm_common.html">Apache MPM Common Directives</a></li>
-<li><a href="mod/mpm_netware.html">Apache MPM netware</a></li>
-<li><a href="mod/mpm_winnt.html">Apache MPM winnt</a></li>
-<li><a href="mod/perchild.html">Apache MPM perchild</a></li>
-<li><a href="mod/prefork.html">Apache MPM prefork</a></li>
-<li><a href="mod/threaded.html">Apache MPM threaded</a></li>
-<li><a href="mod/mod_access.html">Apache module mod_access</a></li>
-<li><a href="mod/mod_actions.html">Apache module mod_actions</a></li>
-<li><a href="mod/mod_alias.html">Apache module mod_alias</a></li>
-<li><a href="mod/mod_asis.html">Apache module mod_asis</a></li>
-<li><a href="mod/mod_auth.html">Apache module mod_auth</a></li>
-<li><a href="mod/mod_auth_anon.html">Apache module mod_auth_anon.c</a></li>
-<li><a href="mod/mod_auth_dbm.html">Apache module mod_auth_dbm</a></li>
-<li><a href="mod/mod_auth_digest.html">Apache module mod_auth_digest</a></li>
-<li><a href="mod/mod_auth_ldap.html">Apache module mod_ldap</a></li>
-<li><a href="mod/mod_autoindex.html">Apache module mod_autoindex</a></li>
-<li><a href="mod/mod_cern_meta.html">Apache module mod_cern_meta</a></li>
-<li><a href="mod/mod_cgi.html">Apache module mod_cgi</a></li>
-<li><a href="mod/mod_cgid.html">Apache module mod_cgi</a></li>
-<li><a href="mod/mod_charset_lite.html">Apache module mod_charset_lite</a></li>
-<li><a href="mod/mod_dav.html">Apache module mod_dav</a></li>
-<li><a href="mod/mod_dir.html">Apache module mod_dir</a></li>
-<li><a href="mod/mod_env.html">Apache module mod_env</a></li>
-<li><a href="mod/mod_example.html">Apache module mod_example</a></li>
-<li><a href="mod/mod_expires.html">Apache module mod_expires</a></li>
-<li><a href="mod/mod_ext_filter.html">Apache module mod_ext_filter</a></li>
-<li><a href="mod/mod_file_cache.html">Apache module mod_file_cache</a></li>
-<li><a href="mod/mod_headers.html">Apache module mod_headers</a></li>
-<li><a href="mod/mod_imap.html">Apache module mod_imap</a></li>
-<li><a href="mod/mod_include.html">Apache module mod_include</a></li>
-<li><a href="mod/mod_info.html">Apache module mod_info</a></li>
-<li><a href="mod/mod_isapi.html">Apache module mod_isapi</a></li>
-<li><a href="mod/mod_ldap.html">Apache module mod_ldap</a></li>
-<li><a href="mod/mod_log_config.html">Apache module mod_log_config</a></li>
-<li><a href="mod/mod_mime.html">Apache module mod_mime</a></li>
-<li><a href="mod/mod_mime_magic.html">Apache module mod_mime_magic</a></li>
-<li><a href="mod/mod_mmap_static.html">Apache module mod_mmap_static</a></li>
-<li><a href="mod/mod_negotiation.html">Apache module mod_negotiation</a></li>
-<li><a href="mod/mod_proxy.html">Apache module mod_proxy</a></li>
-<li><a href="mod/mod_rewrite.html">Apache module mod_rewrite</a></li>
-<li><a href="mod/mod_setenvif.html">Apache module mod_setenvif</a></li>
-<li><a href="mod/mod_so.html">Apache module mod_so</a></li>
-<li><a href="mod/mod_speling.html">Apache module mod_speling</a></li>
-<li><a href="mod/mod_ssl.html">Apache module mod_ssl</a></li>
-<li><a href="mod/mod_status.html">Apache module mod_status</a></li>
-<li><a href="mod/mod_suexec.html">Apache module mod_suexec</a></li>
-<li><a href="mod/mod_unique_id.html">Apache module mod_unique_id</a></li>
-<li><a href="mod/mod_userdir.html">Apache module mod_userdir</a></li>
-<li><a href="mod/mod_usertrack.html">Apache module mod_usertrack</a></li>
-<li><a href="mod/mod_vhost_alias.html">Apache module mod_vhost_alias</a></li>
-</ul></li>
-
-<li><a href="developer/">Developer Documentation</a>
-<ul>
-<li><a href="developer/API.html">Apache API notes</a></li>
-<li><a href="developer/debugging.html">Debugging Memory Allocation in APR</a></li>
-<li><a href="developer/documenting.html">Documenting Apache 2.0</a></li>
-<li><a href="developer/hooks.html">Apache 2.0 Hook Functions</a></li>
-<li><a href="developer/layeredio.html">Apache 2.0 Layered I/O</a></li>
-<li><a href="developer/modules.html">Converting Modules from Apache 1.3 to Apache 2.0</a></li>
-<li><a href="developer/request.html">Request Processing in Apache 2.0</a></li>
-</ul></li>
-
-</ul></li>
-
-</ul>
-
-    <!--#include virtual="footer.html" -->
-  </body>
-</html>
diff --git a/docs/manual/sitemap.html.en b/docs/manual/sitemap.html.en
deleted file mode 100644
index e735f5b..0000000
--- a/docs/manual/sitemap.html.en
+++ /dev/null
@@ -1,200 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <title>Site Map - Apache HTTP Server 2.0</title>
-  </head>
-  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-
-  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-  vlink="#000080" alink="#FF0000">
-    <!--#include virtual="header.html" -->
-
-    <h1 align="center">Site Map</h1>
-
-<ul>
-<li><a href="index.html">Apache HTTP Server Version 2.0 Documentation</a>
-
-<ul>
-<li>Release Notes
-<ul>
-<li><a href="upgrading.html">Upgrading to 2.0 from 1.3</a></li>
-<li><a href="new_features_2_0.html">New features with Apache 2.0</a></li>
-</ul></li>
-
-<li>Using the Apache HTTP Server
-<ul>
-<li><a href="install.html">Compiling and Installing Apache</a></li>
-<li><a href="invoking.html">Starting Apache</a></li>
-<li><a href="stopping.html">Stopping and Restarting the Server</a></li>
-<li><a href="configuring.html">Configuration Files</a></li>
-<li><a href="sections.html">How Directory, Location and Files sections work</a></li>
-<li><a href="server-wide.html">Server-Wide Configuration</a></li>
-<li><a href="logs.html">Log Files</a></li>
-<li><a href="urlmapping.html">Mapping URLs to Filesystem Locations</a></li>
-<li><a href="misc/security_tips.html">Security Tips</a></li>
-<li><a href="dso.html">Dynamic Shared Object (DSO) support</a></li>
-<li><a href="content-negotiation.html">Content Negotiation</a></li>
-<li><a href="custom-error.html">Custom error responses</a></li>
-<li><a href="bind.html">Setting which addresses and ports Apache uses</a></li>
-<li><a href="mpm.html">Multi-Processing Modules (MPMs)</a></li>
-<li><a href="env.html">Environment Variables in Apache</a></li>
-<li><a href="handler.html">Apache's Handler Use</a></li>
-<li><a href="filter.html">Filters</a></li>
-<li><a href="suexec.html">suEXEC Support</a></li>
-<li><a href="misc/perf-tuning.html">Performance Hintes</a></li>
-<li><a href="misc/rewriteguide.html">URL Rewriting Guide</a></li>
-</ul></li>
-
-<li><a href="vhosts/">Apache Virtual Host documentation</a>
-<ul>
-<li><a href="vhosts/name-based.html">Name-based Virtual Hosts</a></li>
-<li><a href="vhosts/ip-based.html">IP-based Virtual Host Support</a></li>
-<li><a href="vhosts/mass.html">Dynamically configured mass virtual hosting</a></li>
-<li><a href="vhosts/examples.html">VirtualHost Examples</a></li>
-<li><a href="vhosts/details.html">An In-Depth Discussion of Virtual Host Matching</a></li>
-<li><a href="vhosts/fd-limits.html">File descriptor limitations</a></li>
-<li><a href="dns-caveats.html">Issues Regarding DNS and Apache</a></li>
-</ul></li>
-
-<li><a href="faq/">Apache Server Frequently Asked Questions</a>
-<ul>
-<li><a href="faq/support.html">Support</a></li>
-</ul></li>
-
-<li><a href="ssl/">Apache SSL/TLS Encryption</a>
-<ul>
-<li><a href="ssl/ssl_intro.html">SSL/TLS Encryption: An Introduction</a></li>
-<li><a href="ssl/ssl_compat.html">SSL/TLS Encryption: Compatibility</a></li>
-<li><a href="ssl/ssl_howto.html">SSL/TLS Encryption: How-To</a></li>
-<li><a href="ssl/ssl_faq.html">SSL/TLS Encryption: FAQ</a></li>
-<li><a href="ssl/ssl_glossary.html">SSL/TLS Encryption: Glossary</a></li>
-</ul></li>
-
-
-<li>Guides, Tutorials, and HowTos
-<ul>
-<li><a href="howto/auth.html">Authentication</a></li>
-<li><a href="howto/cgi.html">Apache Tutorial: Dynamic Content with CGI</a></li>
-<li><a href="howto/ssi.html">Apache Tutorial: Introduction to Server
-Side Includes</a></li>
-<li><a href="misc/tutorials.html">Apache Tutorials</a></li>
-</ul></li>
-
-
-<li>Platfrom-specific Notes
-<ul>
-<li><a href="platform/windows.html">Using Apache with Microsoft
-Windows</a></li>
-<li><a href="platform/win_compiling.html">Compiling Apache for
-Microsoft Windows</a></li>
-<li><a href="platform/win_service.html">Running Apache for Windows as
-a Service</a></li>
-<li><a href="platform/netware.html">Using Apache with Novell NetWare</a></li>
-<li><a href="platform/perf-hp.html">Running a High-Performance Web
-Server on HPUX</a></li>
-<li><a href="ebcdic.html">The Apache EBCDIC Port</a></li>
-</ul></li>
-
-<li><a href="programs/">Apache HTTP Server and Supporting Programs</a>
-<ul>
-<li><a href="programs/httpd.html">Manual Page: httpd</a></li>
-<li><a href="programs/ab.html">Manual Page: ab</a></li>
-<li><a href="programs/apachectl.html">Manual Page: apachectl</a></li>
-<li><a href="programs/apxs.html">Manual Page: apxs</a></li>
-<li><a href="programs/dbmmanage.html">Manual Page: dbmmanage</a></li>
-<li><a href="programs/htdigest.html">Manual Page: htdigest</a></li>
-<li><a href="programs/htpasswd.html">Manual Page: htpasswd</a></li>
-<li><a href="programs/logresolve.html">Manual Page: logresolve</a></li>
-<li><a href="programs/rotatelogs.html">Manual Page: rotatelogs</a></li>
-<li><a href="programs/suexec.html">Manual Page: suexec</a></li>
-<li><a href="programs/other.html">Other Programs</a></li>
-</ul></li>
-
-<li><a href="misc/">Apache Miscellaneous Documentation</a>
-<ul>
-<li><a href="misc/custom_errordocs.html">International Customized Server Error Messages</a></li>
-<li><a href="misc/fin_wait_2.html">Connections in FIN_WAIT_2 and Apache</a></li>
-<li><a href="misc/known_client_problems.html">Known Client Problems</a></li>
-<li><a href="misc/descriptors.html">Descriptors and Apache</a></li>
-<li><a href="cgi_path.html">PATH_INFO Changes in the CGI Environment</a></li>
-</ul></li>
-
-<li><a href="mod/">Apache modules</a>
-<ul>
-<li><a href="mod/index-bytype.html">Apache modules - By Type</a></li>
-<li><a href="mod/directives.html">Apache directives</a></li>
-<li><a href="mod/module-dict.html">Definitions of terms used to describe Apache modules</a></li>
-<li><a href="mod/directive-dict.html">Definitions of terms used to describe Apache directives</a></li>
-<li><a href="mod/core.html">Apache Core Features</a></li>
-<li><a href="mod/mpm_common.html">Apache MPM Common Directives</a></li>
-<li><a href="mod/mpm_netware.html">Apache MPM netware</a></li>
-<li><a href="mod/mpm_winnt.html">Apache MPM winnt</a></li>
-<li><a href="mod/perchild.html">Apache MPM perchild</a></li>
-<li><a href="mod/prefork.html">Apache MPM prefork</a></li>
-<li><a href="mod/threaded.html">Apache MPM threaded</a></li>
-<li><a href="mod/mod_access.html">Apache module mod_access</a></li>
-<li><a href="mod/mod_actions.html">Apache module mod_actions</a></li>
-<li><a href="mod/mod_alias.html">Apache module mod_alias</a></li>
-<li><a href="mod/mod_asis.html">Apache module mod_asis</a></li>
-<li><a href="mod/mod_auth.html">Apache module mod_auth</a></li>
-<li><a href="mod/mod_auth_anon.html">Apache module mod_auth_anon.c</a></li>
-<li><a href="mod/mod_auth_dbm.html">Apache module mod_auth_dbm</a></li>
-<li><a href="mod/mod_auth_digest.html">Apache module mod_auth_digest</a></li>
-<li><a href="mod/mod_auth_ldap.html">Apache module mod_ldap</a></li>
-<li><a href="mod/mod_autoindex.html">Apache module mod_autoindex</a></li>
-<li><a href="mod/mod_cern_meta.html">Apache module mod_cern_meta</a></li>
-<li><a href="mod/mod_cgi.html">Apache module mod_cgi</a></li>
-<li><a href="mod/mod_cgid.html">Apache module mod_cgi</a></li>
-<li><a href="mod/mod_charset_lite.html">Apache module mod_charset_lite</a></li>
-<li><a href="mod/mod_dav.html">Apache module mod_dav</a></li>
-<li><a href="mod/mod_dir.html">Apache module mod_dir</a></li>
-<li><a href="mod/mod_env.html">Apache module mod_env</a></li>
-<li><a href="mod/mod_example.html">Apache module mod_example</a></li>
-<li><a href="mod/mod_expires.html">Apache module mod_expires</a></li>
-<li><a href="mod/mod_ext_filter.html">Apache module mod_ext_filter</a></li>
-<li><a href="mod/mod_file_cache.html">Apache module mod_file_cache</a></li>
-<li><a href="mod/mod_headers.html">Apache module mod_headers</a></li>
-<li><a href="mod/mod_imap.html">Apache module mod_imap</a></li>
-<li><a href="mod/mod_include.html">Apache module mod_include</a></li>
-<li><a href="mod/mod_info.html">Apache module mod_info</a></li>
-<li><a href="mod/mod_isapi.html">Apache module mod_isapi</a></li>
-<li><a href="mod/mod_ldap.html">Apache module mod_ldap</a></li>
-<li><a href="mod/mod_log_config.html">Apache module mod_log_config</a></li>
-<li><a href="mod/mod_mime.html">Apache module mod_mime</a></li>
-<li><a href="mod/mod_mime_magic.html">Apache module mod_mime_magic</a></li>
-<li><a href="mod/mod_mmap_static.html">Apache module mod_mmap_static</a></li>
-<li><a href="mod/mod_negotiation.html">Apache module mod_negotiation</a></li>
-<li><a href="mod/mod_proxy.html">Apache module mod_proxy</a></li>
-<li><a href="mod/mod_rewrite.html">Apache module mod_rewrite</a></li>
-<li><a href="mod/mod_setenvif.html">Apache module mod_setenvif</a></li>
-<li><a href="mod/mod_so.html">Apache module mod_so</a></li>
-<li><a href="mod/mod_speling.html">Apache module mod_speling</a></li>
-<li><a href="mod/mod_ssl.html">Apache module mod_ssl</a></li>
-<li><a href="mod/mod_status.html">Apache module mod_status</a></li>
-<li><a href="mod/mod_suexec.html">Apache module mod_suexec</a></li>
-<li><a href="mod/mod_unique_id.html">Apache module mod_unique_id</a></li>
-<li><a href="mod/mod_userdir.html">Apache module mod_userdir</a></li>
-<li><a href="mod/mod_usertrack.html">Apache module mod_usertrack</a></li>
-<li><a href="mod/mod_vhost_alias.html">Apache module mod_vhost_alias</a></li>
-</ul></li>
-
-<li><a href="developer/">Developer Documentation</a>
-<ul>
-<li><a href="developer/API.html">Apache API notes</a></li>
-<li><a href="developer/debugging.html">Debugging Memory Allocation in APR</a></li>
-<li><a href="developer/documenting.html">Documenting Apache 2.0</a></li>
-<li><a href="developer/hooks.html">Apache 2.0 Hook Functions</a></li>
-<li><a href="developer/layeredio.html">Apache 2.0 Layered I/O</a></li>
-<li><a href="developer/modules.html">Converting Modules from Apache 1.3 to Apache 2.0</a></li>
-<li><a href="developer/request.html">Request Processing in Apache 2.0</a></li>
-</ul></li>
-
-</ul></li>
-
-</ul>
-
-    <!--#include virtual="footer.html" -->
-  </body>
-</html>
diff --git a/docs/manual/ssl/Makefile b/docs/manual/ssl/Makefile
deleted file mode 100644
index cb275b3..0000000
--- a/docs/manual/ssl/Makefile
+++ /dev/null
@@ -1,15 +0,0 @@
-##
-##  Makefile -- mod_ssl User Manual: Build Precedure
-##  Copyright (c) 1998-2001 Ralf S. Engelschall, All Rights Reserved. 
-##
-
-WMK = wmk
-
-#   it's trivial because we use Website META Language (WML)
-#   Make command to perform all building ;-)
-all:
-	$(WMK)
-
-clean:
-	-rm -f *.html
-
diff --git a/docs/manual/ssl/footer.html b/docs/manual/ssl/footer.html
deleted file mode 100644
index 965ff02..0000000
--- a/docs/manual/ssl/footer.html
+++ /dev/null
@@ -1,7 +0,0 @@
-    <hr />
-
-    <h3 align="CENTER">Apache HTTP Server Version 2.0</h3>
-    <a href="./"><img src="../images/index.gif" alt="Index" /></a>
-    <a href="../"><img src="../images/home.gif" alt="Home" /></a>
-
-
diff --git a/docs/manual/ssl/header.html b/docs/manual/ssl/header.html
deleted file mode 100644
index 749461d..0000000
--- a/docs/manual/ssl/header.html
+++ /dev/null
@@ -1,6 +0,0 @@
-    <div align="CENTER">
-      <img src="../images/sub.gif" alt="[APACHE DOCUMENTATION]" /> 
-
-      <h3>Apache HTTP Server Version 2.0</h3>
-    </div>
-
diff --git a/docs/manual/ssl/index.html b/docs/manual/ssl/index.html
deleted file mode 100644
index 971686a..0000000
--- a/docs/manual/ssl/index.html
+++ /dev/null
@@ -1,36 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-<title>Apache SSL/TLS Encryption</title>
-</head>
-
-<body bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#000080" alink="#FF0000"> 
-<!--#include virtual="header.html" -->
-
-<h1 align="CENTER">SSL/TLS Strong Encryption</h1>
-
-<p>The Apache HTTP Server module <a href="../mod/mod_ssl.html">mod_ssl</a>
-provides an interface to the <a
-href="http://www.openssl.org/">OpenSSL</a> library, which provides
-Strong Encryption using the Secure Sockets Layer and Transport Layer
-Security protocols.  The module and this documentation are based on
-Ralf S. Engelschall's mod_ssl project.</p>
-
-<ul>
-<li><a href="ssl_intro.html">Introduction</a></li>
-<li><a href="ssl_compat.html">Compatibility</a></li>
-<li><a href="ssl_howto.html">How-To</a></li>
-<li><a href="ssl_faq.html">Frequently Asked Questions</a></li>
-<li><a href="ssl_glossary.html">Glossary</a></li>
-</ul>
-
-<p>Extensive documentation on the directives and environment variables
-provided by this module is provided in the <a
-href="../mod/mod_ssl.html">mod_ssl reference documentation</a>.</p>
-
-
-<p><!--#include virtual="footer.html" --> </p>
-  </body>
-</html>
diff --git a/docs/manual/ssl/index.html.en b/docs/manual/ssl/index.html.en
deleted file mode 100644
index 971686a..0000000
--- a/docs/manual/ssl/index.html.en
+++ /dev/null
@@ -1,36 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-<title>Apache SSL/TLS Encryption</title>
-</head>
-
-<body bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#000080" alink="#FF0000"> 
-<!--#include virtual="header.html" -->
-
-<h1 align="CENTER">SSL/TLS Strong Encryption</h1>
-
-<p>The Apache HTTP Server module <a href="../mod/mod_ssl.html">mod_ssl</a>
-provides an interface to the <a
-href="http://www.openssl.org/">OpenSSL</a> library, which provides
-Strong Encryption using the Secure Sockets Layer and Transport Layer
-Security protocols.  The module and this documentation are based on
-Ralf S. Engelschall's mod_ssl project.</p>
-
-<ul>
-<li><a href="ssl_intro.html">Introduction</a></li>
-<li><a href="ssl_compat.html">Compatibility</a></li>
-<li><a href="ssl_howto.html">How-To</a></li>
-<li><a href="ssl_faq.html">Frequently Asked Questions</a></li>
-<li><a href="ssl_glossary.html">Glossary</a></li>
-</ul>
-
-<p>Extensive documentation on the directives and environment variables
-provided by this module is provided in the <a
-href="../mod/mod_ssl.html">mod_ssl reference documentation</a>.</p>
-
-
-<p><!--#include virtual="footer.html" --> </p>
-  </body>
-</html>
diff --git a/docs/manual/ssl/mod_ssl_sb.gif b/docs/manual/ssl/mod_ssl_sb.gif
deleted file mode 100644
index aecd3c1..0000000
--- a/docs/manual/ssl/mod_ssl_sb.gif
+++ /dev/null
Binary files differ
diff --git a/docs/manual/ssl/openssl_ics.gif b/docs/manual/ssl/openssl_ics.gif
deleted file mode 100644
index 3d3c90c..0000000
--- a/docs/manual/ssl/openssl_ics.gif
+++ /dev/null
Binary files differ
diff --git a/docs/manual/ssl/ssl_compat.gfont000.gif b/docs/manual/ssl/ssl_compat.gfont000.gif
deleted file mode 100644
index 3131a67..0000000
--- a/docs/manual/ssl/ssl_compat.gfont000.gif
+++ /dev/null
Binary files differ
diff --git a/docs/manual/ssl/ssl_compat.html b/docs/manual/ssl/ssl_compat.html
deleted file mode 100644
index 9b395c0..0000000
--- a/docs/manual/ssl/ssl_compat.html
+++ /dev/null
@@ -1,276 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-<title>Apache SSL/TLS Encryption: Compatibility</title>
-<style type="text/css"><!--
-#H {
-}
-#D {
-    background-color: #f0f0f0;
-}
---></style>
-</head>
-
-<body bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#000080" alink="#FF0000"> 
-<!--#include virtual="header.html" -->
-
-<h1 align="CENTER">SSL/TLS Strong Encryption: Compatibility</h1>
-
-<div align="right">
-<table cellspacing="0" cellpadding="0" width="200" summary="">
-<tr>
-<td>
-<em>
-All PCs are compatible. But some of
-them are more compatible than others.
-</em>
-</td>
-</tr>
-<tr>
-<td align="right">
-<font size="-1">
-Unknown
-</font>
-</td>
-</tr>
-</table>
-</div>
-<p>
-Here we talk about backward compatibility to other SSL solutions. As you
-perhaps know, mod_ssl is not the only existing SSL solution for Apache.
-Actually there are four additional major products available on the market: Ben
-Laurie's freely available <a href="http://www.apache-ssl.org/">Apache-SSL</a>
-(from where mod_ssl were originally derived in 1998), RedHat's commercial <a
-href="http://www.redhat.com/products/product-details.phtml?id=rhsa">Secure Web
-Server</a> (which is based on mod_ssl), Covalent's commercial <a
-href="http://raven.covalent.net/">Raven SSL Module</a> (also based on mod_ssl)
-and finally C2Net's commercial product <a
-href="http://www.c2.net/products/stronghold/">Stronghold</a> (based on a
-different evolution branch named Sioux up to Stronghold 2.x and based on
-mod_ssl since Stronghold 3.x).</p>
-
-<p>
-The idea in mod_ssl is mainly the following: because mod_ssl provides mostly a
-superset of the functionality of all other solutions we can easily provide
-backward compatibility for most of the cases. Actually there are three
-compatibility areas we currently address: configuration directives,
-environment variables and custom log functions.
-
-<ul>
-<li><a href="#ToC1">Configuration Directives</a></li>
-<li><a href="#ToC2">Environment Variables</a></li>
-<li><a href="#ToC3">Custom Log Functions</a></li>
-</ul>
-
-<h2><a name="ToC1">Configuration Directives</a></h2>
-For backward compatibility to the configuration directives of other SSL
-solutions we do an on-the-fly mapping: directives which have a direct
-counterpart in mod_ssl are mapped silently while other directives lead to a
-warning message in the logfiles. The currently implemented directive mapping
-is listed in <a href="#table1">Table 1</a>. Currently full backward
-compatibilty is provided only for Apache-SSL 1.x and mod_ssl 2.0.x.
-Compatibility to Sioux 1.x and Stronghold 2.x is only partial because of
-special functionality in these interfaces which mod_ssl (still) doesn't
-provide.</p>
-
-
-<p>
-<div align="center">
-<a name="table1"></a>
-<table width="600" cellspacing="0" cellpadding="1" border="0" summary="">
-<caption align="bottom" id="sf">Table 1: Configuration Directive Mapping</caption>
-<tr><td bgcolor="#cccccc">
-<table width="598" cellpadding="5" cellspacing="0" border="0" summary="">
-<tr><td valign="top" align="center" bgcolor="#ffffff">
-<table border="0" cellspacing="0" cellpadding="2" width="598" summary="">
-<tr id="D">
-<td><strong>Old Directive</strong></td>
-<td><strong>mod_ssl Directive</strong></td>
-<td><strong>Comment</strong></td>
-</tr>
-<tr id="H"><td colspan="3"><b>Apache-SSL 1.x &amp; mod_ssl 2.0.x compatibility:</b></td></tr>
-<tr id="D"><td><code>SSLEnable</code></td><td><code>SSLEngine on</code></td><td>compactified</td></tr>
-<tr id="H"><td><code>SSLDisable</code></td><td><code>SSLEngine off</code></td><td>compactified</td></tr>
-<tr id="D"><td><code>SSLLogFile</code> <em>file</em></td><td><code>SSLLog</code> <em>file</em></td><td>compactified</td></tr>
-<tr id="H"><td><code>SSLRequiredCiphers</code> <em>spec</em></td><td><code>SSLCipherSuite</code> <em>spec</em></td><td>renamed</td></tr>
-<tr id="D"><td><code>SSLRequireCipher</code> <em>c1</em> ...</td><td><code>SSLRequire %{SSL_CIPHER} in {"</code><em>c1</em><code>", ...}</code></td><td>generalized</td></tr>
-<tr id="H"><td><code>SSLBanCipher</code> <em>c1</em> ...</td><td><code>SSLRequire not (%{SSL_CIPHER} in {"</code><em>c1</em><code>", ...})</code></td><td>generalized</td></tr>
-<tr id="D"><td><code>SSLFakeBasicAuth</td><td><code>SSLOptions +FakeBasicAuth</code></td><td>merged</td></tr>
-<tr id="H"><td><code>SSLCacheServerPath</code> <em>dir</em></td><td>-</td><td>functionality removed</td></tr>
-<tr id="D"><td><code>SSLCacheServerPort</code> <em>integer</em></td><td>-</td><td>functionality removed</td></tr>
-<tr id="H"><td colspan="3"><b>Apache-SSL 1.x compatibility:</b></td></tr>
-<tr id="D"><td><code>SSLExportClientCertificates</td><td><code>SSLOptions +ExportCertData</code></td><td>merged</td></tr>
-<tr id="H"><td><code>SSLCacheServerRunDir</code> <em>dir</em></td><td>-</td><td>functionality not supported</td></tr>
-<tr id="D"><td colspan="3"><b>Sioux 1.x compatibility:</b></td></tr>
-<tr id="H"><td><code>SSL_CertFile</code> <em>file</em></td><td><code>SSLCertificateFile</code> <em>file</em></td><td>renamed</td></tr>
-<tr id="D"><td><code>SSL_KeyFile</code> <em>file</em></td><td><code>SSLCertificateKeyFile</code> <em>file</em></td><td>renamed</td></tr>
-<tr id="H"><td><code>SSL_CipherSuite</code> <em>arg</em></td><td><code>SSLCipherSuite</code> <em>arg</em></td><td>renamed</td></tr>
-<tr id="D"><td><code>SSL_X509VerifyDir</code> <em>arg</em></td><td><code>SSLCACertificatePath</code> <em>arg</em></td><td>renamed</td></tr>
-<tr id="H"><td><code>SSL_Log</code> <em>file</em></td><td><code>SSLLogFile</code> <em>file</em></td><td>renamed</td></tr>
-<tr id="D"><td><code>SSL_Connect</code> <em>flag</em></td><td><code>SSLEngine</code> <em>flag</em></td><td>renamed</td></tr>
-<tr id="H"><td><code>SSL_ClientAuth</code> <em>arg</em></td><td><code>SSLVerifyClient</code> <em>arg</em></td><td>renamed</td></tr>
-<tr id="D"><td><code>SSL_X509VerifyDepth</code> <em>arg</em></td><td><code>SSLVerifyDepth</code> <em>arg</em></td><td>renamed</td></tr>
-<tr id="H"><td><code>SSL_FetchKeyPhraseFrom</code> <em>arg</em></td><td>-</td><td>not directly mappable; use SSLPassPhraseDialog</td></tr>
-<tr id="D"><td><code>SSL_SessionDir</code> <em>dir</em></td><td>-</td><td>not directly mappable; use SSLSessionCache</td></tr>
-<tr id="H"><td><code>SSL_Require</code> <em>expr</em></td><td>-</td><td>not directly mappable; use SSLRequire</td></tr>
-<tr id="D"><td><code>SSL_CertFileType</code> <em>arg</em></td><td>-</td><td>functionality not supported</td></tr>
-<tr id="H"><td><code>SSL_KeyFileType</code> <em>arg</em></td><td>-</td><td>functionality not supported</td></tr>
-<tr id="D"><td><code>SSL_X509VerifyPolicy</code> <em>arg</em></td><td>-</td><td>functionality not supported</td></tr>
-<tr id="H"><td><code>SSL_LogX509Attributes</code> <em>arg</em></td><td>-</td><td>functionality not supported</td></tr>
-<tr id="D"><td colspan="3"><b>Stronghold 2.x compatibility:</b></td></tr>
-<tr id="H"><td><code>StrongholdAccelerator</code> <em>dir</em></td><td>-</td><td>functionality not supported</td></tr>
-<tr id="H"><td><code>StrongholdKey</code> <em>dir</em></td><td>-</td><td>functionality not supported</td></tr>
-<tr id="H"><td><code>StrongholdLicenseFile</code> <em>dir</em></td><td>-</td><td>functionality not supported</td></tr>
-<tr id="H"><td><code>SSLFlag</code> <em>flag</em></td><td><code>SSLEngine</code> <em>flag</em></td><td>renamed</td></tr>
-<tr id="D"><td><code>SSLSessionLockFile</code> <em>file</em></td><td><code>SSLMutex</code> <em>file</em></td><td>renamed</td></tr>
-<tr id="H"><td><code>SSLCipherList</code> <em>spec</em></td><td><code>SSLCipherSuite</code> <em>spec</em></td><td>renamed</td></tr>
-<tr id="D"><td><code>RequireSSL</code></td><td><code>SSLRequireSSL</code></td><td>renamed</td></tr>
-<tr id="H"><td><code>SSLErrorFile</code> <em>file</em></td><td>-</td><td>functionality not supported</td></tr>
-<tr id="H"><td><code>SSLRoot</code> <em>dir</em></td><td>-</td><td>functionality not supported</td></tr>
-<tr id="D"><td><code>SSL_CertificateLogDir</code> <em>dir</em></td><td>-</td><td>functionality not supported</td></tr>
-<tr id="H"><td><code>AuthCertDir</code> <em>dir</em></td><td>-</td><td>functionality not supported</td></tr>
-<tr id="D"><td><code>SSL_Group</code> <em>name</em></td><td>-</td><td>functionality not supported</td></tr>
-<tr id="H"><td><code>SSLProxyMachineCertPath</code> <em>dir</em></td><td>-</td><td>functionality not supported</td></tr>
-<tr id="D"><td><code>SSLProxyMachineCertFile</code> <em>file</em></td><td>-</td><td>functionality not supported</td></tr>
-<tr id="H"><td><code>SSLProxyCACertificatePath</code> <em>dir</em></td><td>-</td><td>functionality not supported</td></tr>
-<tr id="D"><td><code>SSLProxyCACertificateFile</code> <em>file</em></td><td>-</td><td>functionality not supported</td></tr>
-<tr id="H"><td><code>SSLProxyVerifyDepth</code> <em>number</em></td><td>-</td><td>functionality not supported</td></tr>
-<tr id="D"><td><code>SSLProxyCipherList</code> <em>spec</em></td><td>-</td><td>functionality not supported</td></tr>
-</table>
-</td>
-</tr></table>
-</td></tr></table>
-</div>
-<p>
-<br>
-<h2><a name="ToC2">Environment Variables</a></h2>
-When you use ``<code>SSLOptions +CompatEnvVars</code>'' additional environment
-variables are generated. They all correspond to existing official mod_ssl
-variables. The currently implemented variable derivation is listed in <a
-href="#table2">Table 2</a>.
-<p>
-<div align="center">
-<a name="table2"></a>
-<table width="600" cellspacing="0" cellpadding="1" border="0" summary="">
-<caption align="bottom" id="sf">Table 2: Environment Variable Derivation</caption>
-<tr><td bgcolor="#cccccc">
-<table width="598" cellpadding="5" cellspacing="0" border="0" summary="">
-<tr><td valign="top" align="center" bgcolor="#ffffff">
-<table border="0" cellspacing="0" cellpadding="2" width="598" summary="">
-<tr id="D">
-<td><strong>Old Variable</strong></td>
-<td><strong>mod_ssl Variable</strong></td>
-<td><strong>Comment</strong></td>
-</tr>
-<tr id="H"><td><code>SSL_PROTOCOL_VERSION</code></td><td><code>SSL_PROTOCOL</code></td><td>renamed</td></tr>
-<tr id="D"><td><code>SSLEAY_VERSION</code></td><td><code>SSL_VERSION_LIBRARY</code></td><td>renamed</td></tr>
-<tr id="H"><td><code>HTTPS_SECRETKEYSIZE</code></td><td><code>SSL_CIPHER_USEKEYSIZE</code></td><td>renamed</td></tr>
-<tr id="D"><td><code>HTTPS_KEYSIZE</code></td><td><code>SSL_CIPHER_ALGKEYSIZE</code></td><td>renamed</td></tr>
-<tr id="H"><td><code>HTTPS_CIPHER</code></td><td><code>SSL_CIPHER</code></td><td>renamed</td></tr>
-<tr id="D"><td><code>HTTPS_EXPORT</code></td><td><code>SSL_CIPHER_EXPORT</code></td><td>renamed</td></tr>
-<tr id="H"><td><code>SSL_SERVER_KEY_SIZE</code></td><td><code>SSL_CIPHER_ALGKEYSIZE</code></td><td>renamed</td></tr>
-<tr id="D"><td><code>SSL_SERVER_CERTIFICATE</code></td><td><code>SSL_SERVER_CERT</code></td><td>renamed</td></tr>
-<tr id="H"><td><code>SSL_SERVER_CERT_START</code></td><td><code>SSL_SERVER_V_START</code></td><td>renamed</td></tr>
-<tr id="D"><td><code>SSL_SERVER_CERT_END</code></td><td><code>SSL_SERVER_V_END</code></td><td>renamed</td></tr>
-<tr id="H"><td><code>SSL_SERVER_CERT_SERIAL</code></td><td><code>SSL_SERVER_M_SERIAL</code></td><td>renamed</td></tr>
-<tr id="H"><td><code>SSL_SERVER_SIGNATURE_ALGORITHM</code></td><td><code>SSL_SERVER_A_SIG</code></td><td>renamed</td></tr>
-<tr id="H"><td><code>SSL_SERVER_DN</code></td><td><code>SSL_SERVER_S_DN</code></td><td>renamed</td></tr>
-<tr id="H"><td><code>SSL_SERVER_CN</code></td><td><code>SSL_SERVER_S_DN_CN</code></td><td>renamed</td></tr>
-<tr id="D"><td><code>SSL_SERVER_EMAIL</code></td><td><code>SSL_SERVER_S_DN_Email</code></td><td>renamed</td></tr>
-<tr id="H"><td><code>SSL_SERVER_O</code></td><td><code>SSL_SERVER_S_DN_O</code></td><td>renamed</td></tr>
-<tr id="D"><td><code>SSL_SERVER_OU</code></td><td><code>SSL_SERVER_S_DN_OU</code></td><td>renamed</td></tr>
-<tr id="H"><td><code>SSL_SERVER_C</code></td><td><code>SSL_SERVER_S_DN_C</code></td><td>renamed</td></tr>
-<tr id="D"><td><code>SSL_SERVER_SP</code></td><td><code>SSL_SERVER_S_DN_SP</code></td><td>renamed</td></tr>
-<tr id="H"><td><code>SSL_SERVER_L</code></td><td><code>SSL_SERVER_S_DN_L</code></td><td>renamed</td></tr>
-<tr id="H"><td><code>SSL_SERVER_IDN</code></td><td><code>SSL_SERVER_I_DN</code></td><td>renamed</td></tr>
-<tr id="D"><td><code>SSL_SERVER_ICN</code></td><td><code>SSL_SERVER_I_DN_CN</code></td><td>renamed</td></tr>
-<tr id="H"><td><code>SSL_SERVER_IEMAIL</code></td><td><code>SSL_SERVER_I_DN_Email</code></td><td>renamed</td></tr>
-<tr id="D"><td><code>SSL_SERVER_IO</code></td><td><code>SSL_SERVER_I_DN_O</code></td><td>renamed</td></tr>
-<tr id="H"><td><code>SSL_SERVER_IOU</code></td><td><code>SSL_SERVER_I_DN_OU</code></td><td>renamed</td></tr>
-<tr id="D"><td><code>SSL_SERVER_IC</code></td><td><code>SSL_SERVER_I_DN_C</code></td><td>renamed</td></tr>
-<tr id="H"><td><code>SSL_SERVER_ISP</code></td><td><code>SSL_SERVER_I_DN_SP</code></td><td>renamed</td></tr>
-<tr id="D"><td><code>SSL_SERVER_IL</code></td><td><code>SSL_SERVER_I_DN_L</code></td><td>renamed</td></tr>
-<tr id="H"><td><code>SSL_CLIENT_CERTIFICATE</code></td><td><code>SSL_CLIENT_CERT</code></td><td>renamed</td></tr>
-<tr id="D"><td><code>SSL_CLIENT_CERT_START</code></td><td><code>SSL_CLIENT_V_START</code></td><td>renamed</td></tr>
-<tr id="H"><td><code>SSL_CLIENT_CERT_END</code></td><td><code>SSL_CLIENT_V_END</code></td><td>renamed</td></tr>
-<tr id="H"><td><code>SSL_CLIENT_CERT_SERIAL</code></td><td><code>SSL_CLIENT_M_SERIAL</code></td><td>renamed</td></tr>
-<tr id="H"><td><code>SSL_CLIENT_SIGNATURE_ALGORITHM</code></td><td><code>SSL_CLIENT_A_SIG</code></td><td>renamed</td></tr>
-<tr id="D"><td><code>SSL_CLIENT_DN</code></td><td><code>SSL_CLIENT_S_DN</code></td><td>renamed</td></tr>
-<tr id="D"><td><code>SSL_CLIENT_CN</code></td><td><code>SSL_CLIENT_S_DN_CN</code></td><td>renamed</td></tr>
-<tr id="H"><td><code>SSL_CLIENT_EMAIL</code></td><td><code>SSL_CLIENT_S_DN_Email</code></td><td>renamed</td></tr>
-<tr id="D"><td><code>SSL_CLIENT_O</code></td><td><code>SSL_CLIENT_S_DN_O</code></td><td>renamed</td></tr>
-<tr id="H"><td><code>SSL_CLIENT_OU</code></td><td><code>SSL_CLIENT_S_DN_OU</code></td><td>renamed</td></tr>
-<tr id="D"><td><code>SSL_CLIENT_C</code></td><td><code>SSL_CLIENT_S_DN_C</code></td><td>renamed</td></tr>
-<tr id="H"><td><code>SSL_CLIENT_SP</code></td><td><code>SSL_CLIENT_S_DN_SP</code></td><td>renamed</td></tr>
-<tr id="D"><td><code>SSL_CLIENT_L</code></td><td><code>SSL_CLIENT_S_DN_L</code></td><td>renamed</td></tr>
-<tr id="D"><td><code>SSL_CLIENT_IDN</code></td><td><code>SSL_CLIENT_I_DN</code></td><td>renamed</td></tr>
-<tr id="H"><td><code>SSL_CLIENT_ICN</code></td><td><code>SSL_CLIENT_I_DN_CN</code></td><td>renamed</td></tr>
-<tr id="D"><td><code>SSL_CLIENT_IEMAIL</code></td><td><code>SSL_CLIENT_I_DN_Email</code></td><td>renamed</td></tr>
-<tr id="H"><td><code>SSL_CLIENT_IO</code></td><td><code>SSL_CLIENT_I_DN_O</code></td><td>renamed</td></tr>
-<tr id="D"><td><code>SSL_CLIENT_IOU</code></td><td><code>SSL_CLIENT_I_DN_OU</code></td><td>renamed</td></tr>
-<tr id="H"><td><code>SSL_CLIENT_IC</code></td><td><code>SSL_CLIENT_I_DN_C</code></td><td>renamed</td></tr>
-<tr id="D"><td><code>SSL_CLIENT_ISP</code></td><td><code>SSL_CLIENT_I_DN_SP</code></td><td>renamed</td></tr>
-<tr id="H"><td><code>SSL_CLIENT_IL</code></td><td><code>SSL_CLIENT_I_DN_L</code></td><td>renamed</td></tr>
-<tr id="H"><td><code>SSL_EXPORT</code></td><td><code>SSL_CIPHER_EXPORT</code></td><td>renamed</td></tr>
-<tr id="H"><td><code>SSL_KEYSIZE</code></td><td><code>SSL_CIPHER_ALGKEYSIZE</code></td><td>renamed</td></tr>
-<tr id="H"><td><code>SSL_SECKEYSIZE</code></td><td><code>SSL_CIPHER_USEKEYSIZE</code></td><td>renamed</td></tr>
-<tr id="H"><td><code>SSL_SSLEAY_VERSION</code></td><td><code>SSL_VERSION_LIBRARY</code></td><td>renamed</td></tr>
-<tr id="D"><td><code>SSL_STRONG_CRYPTO</code></td><td><code>-</code></td><td>Not supported by mod_ssl</td></tr>
-<tr id="D"><td><code>SSL_SERVER_KEY_EXP</code></td><td><code>-</code></td><td>Not supported by mod_ssl</td></tr>
-<tr id="H"><td><code>SSL_SERVER_KEY_ALGORITHM</code></td><td><code>-</code></td><td>Not supported by mod_ssl</td></tr>
-<tr id="D"><td><code>SSL_SERVER_KEY_SIZE</code></td><td><code>-</code></td><td>Not supported by mod_ssl</td></tr>
-<tr id="H"><td><code>SSL_SERVER_SESSIONDIR</code></td><td><code>-</code></td><td>Not supported by mod_ssl</td></tr>
-<tr id="D"><td><code>SSL_SERVER_CERTIFICATELOGDIR</code></td><td><code>-</code></td><td>Not supported by mod_ssl</td></tr>
-<tr id="H"><td><code>SSL_SERVER_CERTFILE</code></td><td><code>-</code></td><td>Not supported by mod_ssl</td></tr>
-<tr id="D"><td><code>SSL_SERVER_KEYFILE</code></td><td><code>-</code></td><td>Not supported by mod_ssl</td></tr>
-<tr id="H"><td><code>SSL_SERVER_KEYFILETYPE</code></td><td><code>-</code></td><td>Not supported by mod_ssl</td></tr>
-<tr id="D"><td><code>SSL_CLIENT_KEY_EXP</code></td><td><code>-</code></td><td>Not supported by mod_ssl</td></tr>
-<tr id="H"><td><code>SSL_CLIENT_KEY_ALGORITHM</code></td><td><code>-</code></td><td>Not supported by mod_ssl</td></tr>
-<tr id="D"><td><code>SSL_CLIENT_KEY_SIZE</code></td><td><code>-</code></td><td>Not supported by mod_ssl</td></tr>
-</table>
-</td>
-</tr></table>
-</td></tr></table>
-</div>
-<p>
-<br>
-<h2><a name="ToC3">Custom Log Functions</a></h2>
-When mod_ssl is built into Apache or at least loaded (under DSO situation)
-additional functions exist for the <a
-href="../mod/mod_log_config.html#formats">Custom Log Format</a> of <a
-href="../mod/mod_log_config.html">mod_log_config</a> as documented in the Reference
-Chapter. Beside the ``<code>%{</code><em>varname</em><code>}x</code>''
-eXtension format function which can be used to expand any variables provided
-by any module, an additional Cryptography
-``<code>%{</code><em>name</em><code>}c</code>'' cryptography format function
-exists for backward compatibility. The currently implemented function calls
-are listed in <a href="#table3">Table 3</a>.
-<p>
-<div align="center">
-<a name="table3"></a>
-<table width="600" cellspacing="0" cellpadding="1" border="0" summary="">
-<caption align="bottom" id="sf">Table 3: Custom Log Cryptography Function</caption>
-<tr><td bgcolor="#cccccc">
-<table width="598" cellpadding="5" cellspacing="0" border="0" summary="">
-<tr><td valign="top" align="center" bgcolor="#ffffff">
-<table border="0" cellspacing="0" cellpadding="2" width="598" summary="">
-<tr id="H">
- <td><strong>Function Call</strong></td>
- <td><strong>Description</strong></td>
-</tr>
-<tr id="D"><td><code>%...{version}c</code></td>   <td>SSL protocol version</td></tr>
-<tr id="H"><td><code>%...{cipher}c</code></td>    <td>SSL cipher</td></tr>
-<tr id="D"><td><code>%...{subjectdn}c</code></td> <td>Client Certificate Subject Distinguished Name</td></tr>
-<tr id="H"><td><code>%...{issuerdn}c</code></td>  <td>Client Certificate Issuer Distinguished Name</td></tr>
-<tr id="D"><td><code>%...{errcode}c</code></td>   <td>Certificate Verification Error (numerical)</td></tr>
-<tr id="H"><td><code>%...{errstr}c</code></td>    <td>Certificate Verification Error (string)</td></tr>
-</table>
-</td>
-</tr></table>
-</td></tr></table>
-</div>
-<p><!--#include virtual="footer.html" --> </p>
-  </body>
-</html>
\ No newline at end of file
diff --git a/docs/manual/ssl/ssl_compat.wml b/docs/manual/ssl/ssl_compat.wml
deleted file mode 100644
index e73c61e..0000000
--- a/docs/manual/ssl/ssl_compat.wml
+++ /dev/null
@@ -1,257 +0,0 @@
-
-#use "ssl_template.inc" title="Compatibility" tag=compat num=4
-
-<page_prev name="Reference"   url="ssl_reference.html">
-<page_next name="HowTo"       url="ssl_howto.html">
-
-#use wml::std::toc style=nbsp
-
-<quotation width=200 author="Unknown">
-All PCs are compatible. But some of
-them are more compatible than others.
-</quotation>
-
-<p>
-<table cellspacing=0 cellpadding=0 border=0>
-<tr valign=bottom>
-<td>
-
-<big H>ere we talk about backward compatibility to other SSL solutions. As you
-perhaps know, mod_ssl is not the only existing SSL solution for Apache.
-Actually there are four additional major products available on the market: Ben
-Laurie's freely available <a href="http://www.apache-ssl.org/">Apache-SSL</a>
-(from where mod_ssl were originally derived in 1998), RedHat's commercial <a
-href="http://www.redhat.com/products/product-details.phtml?id=rhsa">Secure Web
-Server</a> (which is based on mod_ssl), Covalent's commercial <a
-href="http://raven.covalent.net/">Raven SSL Module</a> (also based on mod_ssl)
-and finally C2Net's commercial product <a
-href="http://www.c2.net/products/stronghold/">Stronghold</a> (based on a
-different evolution branch named Sioux up to Stronghold 2.x and based on
-mod_ssl since Stronghold 3.x).
-
-</td>
-<td>
-&nbsp;&nbsp;
-</td>
-<td>
-
-<div align=right>
-<table cellspacing=0 cellpadding=5 border=0 bgcolor="#ccccff">
-<tr>
-<td bgcolor="#333399">
-<font face="Arial,Helvetica" color="#ccccff">
-<b>Table Of Contents</b>
-</font>
-</td>
-</tr>
-<tr>
-<td>
-<font face="Arial,Helvetica" size=-1>
-<toc>
-</font>
-</td>
-</tr>
-</table>
-</div>
-
-</td>
-</tr>
-</table>
-
-<p>
-The idea in mod_ssl is mainly the following: because mod_ssl provides mostly a
-superset of the functionality of all other solutions we can easily provide
-backward compatibility for most of the cases. Actually there are three
-compatibility areas we currently address: configuration directives,
-environment variables and custom log functions.
-
-<h2>Configuration Directives</h2>
-
-For backward compatibility to the configuration directives of other SSL
-solutions we do an on-the-fly mapping: directives which have a direct
-counterpart in mod_ssl are mapped silently while other directives lead to a
-warning message in the logfiles.  The currently implemented directive mapping
-is listed in <a href="#table1">Table 1</a>.  Currently full backward
-compatibilty is provided only for Apache-SSL 1.x and mod_ssl 2.0.x.
-Compatibility to Sioux 1.x and Stronghold 2.x is only partial because of
-special functionality in these interfaces which mod_ssl (still) doesn't
-provide.
-
-<p>
-<float name="table1" caption="Table 1: Configuration Directive Mapping">
-<table border=0 cellspacing=0 cellpadding=2 width=598>
-<tr id=D>
-<td><strong>Old Directive</strong></td>
-<td><strong>mod_ssl Directive</strong></td>
-<td><strong>Comment</strong></td>
-</tr>
-<tr id=H><td colspan=3><b>Apache-SSL 1.x &amp; mod_ssl 2.0.x compatibility:</b></td></tr>
-<tr id=D><td><code>SSLEnable</code></td><td><code>SSLEngine on</code></td><td>compactified</td></tr>
-<tr id=H><td><code>SSLDisable</code></td><td><code>SSLEngine off</code></td><td>compactified</td></tr>
-<tr id=D><td><code>SSLLogFile</code> <em>file</em></td><td><code>SSLLog</code> <em>file</em></td><td>compactified</td></tr>
-<tr id=H><td><code>SSLRequiredCiphers</code> <em>spec</em></td><td><code>SSLCipherSuite</code> <em>spec</em></td><td>renamed</td></tr>
-<tr id=D><td><code>SSLRequireCipher</code> <em>c1</em> ...</td><td><code>SSLRequire %{SSL_CIPHER} in {"</code><em>c1</em><code>", ...}</code></td><td>generalized</td></tr>
-<tr id=H><td><code>SSLBanCipher</code> <em>c1</em> ...</td><td><code>SSLRequire not (%{SSL_CIPHER} in {"</code><em>c1</em><code>", ...})</code></td><td>generalized</td></tr>
-<tr id=D><td><code>SSLFakeBasicAuth</td><td><code>SSLOptions +FakeBasicAuth</code></td><td>merged</td></tr>
-<tr id=H><td><code>SSLCacheServerPath</code> <em>dir</em></td><td>-</td><td>functionality removed</td></tr>
-<tr id=D><td><code>SSLCacheServerPort</code> <em>integer</em></td><td>-</td><td>functionality removed</td></tr>
-
-<tr id=H><td colspan=3><b>Apache-SSL 1.x compatibility:</b></td></tr>
-<tr id=D><td><code>SSLExportClientCertificates</td><td><code>SSLOptions +ExportCertData</code></td><td>merged</td></tr>
-<tr id=H><td><code>SSLCacheServerRunDir</code> <em>dir</em></td><td>-</td><td>functionality not supported</td></tr>
-
-<tr id=D><td colspan=3><b>Sioux 1.x compatibility:</b></td></tr>
-<tr id=H><td><code>SSL_CertFile</code> <em>file</em></td><td><code>SSLCertificateFile</code> <em>file</em></td><td>renamed</td></tr>
-<tr id=D><td><code>SSL_KeyFile</code> <em>file</em></td><td><code>SSLCertificateKeyFile</code> <em>file</em></td><td>renamed</td></tr>
-<tr id=H><td><code>SSL_CipherSuite</code> <em>arg</em></td><td><code>SSLCipherSuite</code> <em>arg</em></td><td>renamed</td></tr>
-<tr id=D><td><code>SSL_X509VerifyDir</code> <em>arg</em></td><td><code>SSLCACertificatePath</code> <em>arg</em></td><td>renamed</td></tr>
-<tr id=H><td><code>SSL_Log</code> <em>file</em></td><td><code>SSLLogFile</code> <em>file</em></td><td>renamed</td></tr>
-<tr id=D><td><code>SSL_Connect</code> <em>flag</em></td><td><code>SSLEngine</code> <em>flag</em></td><td>renamed</td></tr>
-<tr id=H><td><code>SSL_ClientAuth</code> <em>arg</em></td><td><code>SSLVerifyClient</code> <em>arg</em></td><td>renamed</td></tr>
-<tr id=D><td><code>SSL_X509VerifyDepth</code> <em>arg</em></td><td><code>SSLVerifyDepth</code> <em>arg</em></td><td>renamed</td></tr>
-<tr id=H><td><code>SSL_FetchKeyPhraseFrom</code> <em>arg</em></td><td>-</td><td>not directly mappable; use SSLPassPhraseDialog</td></tr>
-<tr id=D><td><code>SSL_SessionDir</code> <em>dir</em></td><td>-</td><td>not directly mappable; use SSLSessionCache</td></tr>
-<tr id=H><td><code>SSL_Require</code> <em>expr</em></td><td>-</td><td>not directly mappable; use SSLRequire</td></tr>
-<tr id=D><td><code>SSL_CertFileType</code> <em>arg</em></td><td>-</td><td>functionality not supported</td></tr>
-<tr id=H><td><code>SSL_KeyFileType</code> <em>arg</em></td><td>-</td><td>functionality not supported</td></tr>
-<tr id=D><td><code>SSL_X509VerifyPolicy</code> <em>arg</em></td><td>-</td><td>functionality not supported</td></tr>
-<tr id=H><td><code>SSL_LogX509Attributes</code> <em>arg</em></td><td>-</td><td>functionality not supported</td></tr>
-
-<tr id=D><td colspan=3><b>Stronghold 2.x compatibility:</b></td></tr>
-<tr id=H><td><code>StrongholdAccelerator</code> <em>dir</em></td><td>-</td><td>functionality not supported</td></tr>
-<tr id=H><td><code>StrongholdKey</code> <em>dir</em></td><td>-</td><td>functionality not supported</td></tr>
-<tr id=H><td><code>StrongholdLicenseFile</code> <em>dir</em></td><td>-</td><td>functionality not supported</td></tr>
-<tr id=H><td><code>SSLFlag</code> <em>flag</em></td><td><code>SSLEngine</code> <em>flag</em></td><td>renamed</td></tr>
-<tr id=D><td><code>SSLSessionLockFile</code> <em>file</em></td><td><code>SSLMutex</code> <em>file</em></td><td>renamed</td></tr>
-<tr id=H><td><code>SSLCipherList</code> <em>spec</em></td><td><code>SSLCipherSuite</code> <em>spec</em></td><td>renamed</td></tr>
-<tr id=D><td><code>RequireSSL</code></td><td><code>SSLRequireSSL</code></td><td>renamed</td></tr>
-<tr id=H><td><code>SSLErrorFile</code> <em>file</em></td><td>-</td><td>functionality not supported</td></tr>
-<tr id=H><td><code>SSLRoot</code> <em>dir</em></td><td>-</td><td>functionality not supported</td></tr>
-<tr id=D><td><code>SSL_CertificateLogDir</code> <em>dir</em></td><td>-</td><td>functionality not supported</td></tr>
-<tr id=H><td><code>AuthCertDir</code> <em>dir</em></td><td>-</td><td>functionality not supported</td></tr>
-<tr id=D><td><code>SSL_Group</code> <em>name</em></td><td>-</td><td>functionality not supported</td></tr>
-<tr id=H><td><code>SSLProxyMachineCertPath</code> <em>dir</em></td><td>-</td><td>functionality not supported</td></tr>
-<tr id=D><td><code>SSLProxyMachineCertFile</code> <em>file</em></td><td>-</td><td>functionality not supported</td></tr>
-<tr id=H><td><code>SSLProxyCACertificatePath</code> <em>dir</em></td><td>-</td><td>functionality not supported</td></tr>
-<tr id=D><td><code>SSLProxyCACertificateFile</code> <em>file</em></td><td>-</td><td>functionality not supported</td></tr>
-<tr id=H><td><code>SSLProxyVerifyDepth</code> <em>number</em></td><td>-</td><td>functionality not supported</td></tr>
-<tr id=D><td><code>SSLProxyCipherList</code> <em>spec</em></td><td>-</td><td>functionality not supported</td></tr>
-</table>
-</float>
-
-<p>
-<br>
-<h2>Environment Variables</h2>
-
-When you use ``<code>SSLOptions +CompatEnvVars</code>'' additional environment
-variables are generated. They all correspond to existing official mod_ssl
-variables.  The currently implemented variable derivation is listed in <a
-href="#table2">Table 2</a>.
-
-<p>
-<float name="table2" caption="Table 2: Environment Variable Derivation">
-<table border=0 cellspacing=0 cellpadding=2 width=598>
-<tr id=D>
-<td><strong>Old Variable</strong></td>
-<td><strong>mod_ssl Variable</strong></td>
-<td><strong>Comment</strong></td>
-</tr>
-<tr id=H><td><code>SSL_PROTOCOL_VERSION</code></td><td><code>SSL_PROTOCOL</code></td><td>renamed</td></tr>
-<tr id=D><td><code>SSLEAY_VERSION</code></td><td><code>SSL_VERSION_LIBRARY</code></td><td>renamed</td></tr>
-<tr id=H><td><code>HTTPS_SECRETKEYSIZE</code></td><td><code>SSL_CIPHER_USEKEYSIZE</code></td><td>renamed</td></tr>
-<tr id=D><td><code>HTTPS_KEYSIZE</code></td><td><code>SSL_CIPHER_ALGKEYSIZE</code></td><td>renamed</td></tr>
-<tr id=H><td><code>HTTPS_CIPHER</code></td><td><code>SSL_CIPHER</code></td><td>renamed</td></tr>
-<tr id=D><td><code>HTTPS_EXPORT</code></td><td><code>SSL_CIPHER_EXPORT</code></td><td>renamed</td></tr>
-<tr id=H><td><code>SSL_SERVER_KEY_SIZE</code></td><td><code>SSL_CIPHER_ALGKEYSIZE</code></td><td>renamed</td></tr>
-<tr id=D><td><code>SSL_SERVER_CERTIFICATE</code></td><td><code>SSL_SERVER_CERT</code></td><td>renamed</td></tr>
-<tr id=H><td><code>SSL_SERVER_CERT_START</code></td><td><code>SSL_SERVER_V_START</code></td><td>renamed</td></tr>
-<tr id=D><td><code>SSL_SERVER_CERT_END</code></td><td><code>SSL_SERVER_V_END</code></td><td>renamed</td></tr>
-<tr id=H><td><code>SSL_SERVER_CERT_SERIAL</code></td><td><code>SSL_SERVER_M_SERIAL</code></td><td>renamed</td></tr>
-<tr id=H><td><code>SSL_SERVER_SIGNATURE_ALGORITHM</code></td><td><code>SSL_SERVER_A_SIG</code></td><td>renamed</td></tr>
-<tr id=H><td><code>SSL_SERVER_DN</code></td><td><code>SSL_SERVER_S_DN</code></td><td>renamed</td></tr>
-<tr id=H><td><code>SSL_SERVER_CN</code></td><td><code>SSL_SERVER_S_DN_CN</code></td><td>renamed</td></tr>
-<tr id=D><td><code>SSL_SERVER_EMAIL</code></td><td><code>SSL_SERVER_S_DN_Email</code></td><td>renamed</td></tr>
-<tr id=H><td><code>SSL_SERVER_O</code></td><td><code>SSL_SERVER_S_DN_O</code></td><td>renamed</td></tr>
-<tr id=D><td><code>SSL_SERVER_OU</code></td><td><code>SSL_SERVER_S_DN_OU</code></td><td>renamed</td></tr>
-<tr id=H><td><code>SSL_SERVER_C</code></td><td><code>SSL_SERVER_S_DN_C</code></td><td>renamed</td></tr>
-<tr id=D><td><code>SSL_SERVER_SP</code></td><td><code>SSL_SERVER_S_DN_SP</code></td><td>renamed</td></tr>
-<tr id=H><td><code>SSL_SERVER_L</code></td><td><code>SSL_SERVER_S_DN_L</code></td><td>renamed</td></tr>
-<tr id=H><td><code>SSL_SERVER_IDN</code></td><td><code>SSL_SERVER_I_DN</code></td><td>renamed</td></tr>
-<tr id=D><td><code>SSL_SERVER_ICN</code></td><td><code>SSL_SERVER_I_DN_CN</code></td><td>renamed</td></tr>
-<tr id=H><td><code>SSL_SERVER_IEMAIL</code></td><td><code>SSL_SERVER_I_DN_Email</code></td><td>renamed</td></tr>
-<tr id=D><td><code>SSL_SERVER_IO</code></td><td><code>SSL_SERVER_I_DN_O</code></td><td>renamed</td></tr>
-<tr id=H><td><code>SSL_SERVER_IOU</code></td><td><code>SSL_SERVER_I_DN_OU</code></td><td>renamed</td></tr>
-<tr id=D><td><code>SSL_SERVER_IC</code></td><td><code>SSL_SERVER_I_DN_C</code></td><td>renamed</td></tr>
-<tr id=H><td><code>SSL_SERVER_ISP</code></td><td><code>SSL_SERVER_I_DN_SP</code></td><td>renamed</td></tr>
-<tr id=D><td><code>SSL_SERVER_IL</code></td><td><code>SSL_SERVER_I_DN_L</code></td><td>renamed</td></tr>
-<tr id=H><td><code>SSL_CLIENT_CERTIFICATE</code></td><td><code>SSL_CLIENT_CERT</code></td><td>renamed</td></tr>
-<tr id=D><td><code>SSL_CLIENT_CERT_START</code></td><td><code>SSL_CLIENT_V_START</code></td><td>renamed</td></tr>
-<tr id=H><td><code>SSL_CLIENT_CERT_END</code></td><td><code>SSL_CLIENT_V_END</code></td><td>renamed</td></tr>
-<tr id=H><td><code>SSL_CLIENT_CERT_SERIAL</code></td><td><code>SSL_CLIENT_M_SERIAL</code></td><td>renamed</td></tr>
-<tr id=H><td><code>SSL_CLIENT_SIGNATURE_ALGORITHM</code></td><td><code>SSL_CLIENT_A_SIG</code></td><td>renamed</td></tr>
-<tr id=D><td><code>SSL_CLIENT_DN</code></td><td><code>SSL_CLIENT_S_DN</code></td><td>renamed</td></tr>
-<tr id=D><td><code>SSL_CLIENT_CN</code></td><td><code>SSL_CLIENT_S_DN_CN</code></td><td>renamed</td></tr>
-<tr id=H><td><code>SSL_CLIENT_EMAIL</code></td><td><code>SSL_CLIENT_S_DN_Email</code></td><td>renamed</td></tr>
-<tr id=D><td><code>SSL_CLIENT_O</code></td><td><code>SSL_CLIENT_S_DN_O</code></td><td>renamed</td></tr>
-<tr id=H><td><code>SSL_CLIENT_OU</code></td><td><code>SSL_CLIENT_S_DN_OU</code></td><td>renamed</td></tr>
-<tr id=D><td><code>SSL_CLIENT_C</code></td><td><code>SSL_CLIENT_S_DN_C</code></td><td>renamed</td></tr>
-<tr id=H><td><code>SSL_CLIENT_SP</code></td><td><code>SSL_CLIENT_S_DN_SP</code></td><td>renamed</td></tr>
-<tr id=D><td><code>SSL_CLIENT_L</code></td><td><code>SSL_CLIENT_S_DN_L</code></td><td>renamed</td></tr>
-<tr id=D><td><code>SSL_CLIENT_IDN</code></td><td><code>SSL_CLIENT_I_DN</code></td><td>renamed</td></tr>
-<tr id=H><td><code>SSL_CLIENT_ICN</code></td><td><code>SSL_CLIENT_I_DN_CN</code></td><td>renamed</td></tr>
-<tr id=D><td><code>SSL_CLIENT_IEMAIL</code></td><td><code>SSL_CLIENT_I_DN_Email</code></td><td>renamed</td></tr>
-<tr id=H><td><code>SSL_CLIENT_IO</code></td><td><code>SSL_CLIENT_I_DN_O</code></td><td>renamed</td></tr>
-<tr id=D><td><code>SSL_CLIENT_IOU</code></td><td><code>SSL_CLIENT_I_DN_OU</code></td><td>renamed</td></tr>
-<tr id=H><td><code>SSL_CLIENT_IC</code></td><td><code>SSL_CLIENT_I_DN_C</code></td><td>renamed</td></tr>
-<tr id=D><td><code>SSL_CLIENT_ISP</code></td><td><code>SSL_CLIENT_I_DN_SP</code></td><td>renamed</td></tr>
-<tr id=H><td><code>SSL_CLIENT_IL</code></td><td><code>SSL_CLIENT_I_DN_L</code></td><td>renamed</td></tr>
-<tr id=H><td><code>SSL_EXPORT</code></td><td><code>SSL_CIPHER_EXPORT</code></td><td>renamed</td></tr>
-<tr id=H><td><code>SSL_KEYSIZE</code></td><td><code>SSL_CIPHER_ALGKEYSIZE</code></td><td>renamed</td></tr>
-<tr id=H><td><code>SSL_SECKEYSIZE</code></td><td><code>SSL_CIPHER_USEKEYSIZE</code></td><td>renamed</td></tr>
-<tr id=H><td><code>SSL_SSLEAY_VERSION</code></td><td><code>SSL_VERSION_LIBRARY</code></td><td>renamed</td></tr>
-<tr id=D><td><code>SSL_STRONG_CRYPTO</code></td><td><code>-</code></td><td>Not supported by mod_ssl</td></tr>
-<tr id=D><td><code>SSL_SERVER_KEY_EXP</code></td><td><code>-</code></td><td>Not supported by mod_ssl</td></tr>
-<tr id=H><td><code>SSL_SERVER_KEY_ALGORITHM</code></td><td><code>-</code></td><td>Not supported by mod_ssl</td></tr>
-<tr id=D><td><code>SSL_SERVER_KEY_SIZE</code></td><td><code>-</code></td><td>Not supported by mod_ssl</td></tr>
-<tr id=H><td><code>SSL_SERVER_SESSIONDIR</code></td><td><code>-</code></td><td>Not supported by mod_ssl</td></tr>
-<tr id=D><td><code>SSL_SERVER_CERTIFICATELOGDIR</code></td><td><code>-</code></td><td>Not supported by mod_ssl</td></tr>
-<tr id=H><td><code>SSL_SERVER_CERTFILE</code></td><td><code>-</code></td><td>Not supported by mod_ssl</td></tr>
-<tr id=D><td><code>SSL_SERVER_KEYFILE</code></td><td><code>-</code></td><td>Not supported by mod_ssl</td></tr>
-<tr id=H><td><code>SSL_SERVER_KEYFILETYPE</code></td><td><code>-</code></td><td>Not supported by mod_ssl</td></tr>
-<tr id=D><td><code>SSL_CLIENT_KEY_EXP</code></td><td><code>-</code></td><td>Not supported by mod_ssl</td></tr>
-<tr id=H><td><code>SSL_CLIENT_KEY_ALGORITHM</code></td><td><code>-</code></td><td>Not supported by mod_ssl</td></tr>
-<tr id=D><td><code>SSL_CLIENT_KEY_SIZE</code></td><td><code>-</code></td><td>Not supported by mod_ssl</td></tr>
-</table>
-</float>
-
-<p>
-<br>
-<h2>Custom Log Functions</h2>
-
-When mod_ssl is built into Apache or at least loaded (under DSO situation)
-additional functions exist for the <a
-href="../mod_log_config.html#formats">Custom Log Format</a> of <a
-href="../mod_log_config.html">mod_log_config</a> as documented in the Reference
-Chapter. Beside the ``<code>%{</code><em>varname</em><code>}x</code>''
-eXtension format function which can be used to expand any variables provided
-by any module, an additional Cryptography
-``<code>%{</code><em>name</em><code>}c</code>'' cryptography format function
-exists for backward compatibility.  The currently implemented function calls
-are listed in <a href="#table3">Table 3</a>.
-
-<p>
-<float name="table3" caption="Table 3: Custom Log Cryptography Function">
-<table border=0 cellspacing=0 cellpadding=2 width=598>
-<tr id=H>
- <td><strong>Function Call</strong></td>
- <td><strong>Description</strong></td>
-</tr>
-<tr id=D><td><code>%...{version}c</code></td>   <td>SSL protocol version</td></tr>
-<tr id=H><td><code>%...{cipher}c</code></td>    <td>SSL cipher</td></tr>
-<tr id=D><td><code>%...{subjectdn}c</code></td> <td>Client Certificate Subject Distinguished Name</td></tr>
-<tr id=H><td><code>%...{issuerdn}c</code></td>  <td>Client Certificate Issuer  Distinguished Name</td></tr>
-<tr id=D><td><code>%...{errcode}c</code></td>   <td>Certificate Verification Error (numerical)</td></tr>
-<tr id=H><td><code>%...{errstr}c</code></td>    <td>Certificate Verification Error (string)</td></tr>
-</table>
-</float>
-
diff --git a/docs/manual/ssl/ssl_cover.wml b/docs/manual/ssl/ssl_cover.wml
deleted file mode 100644
index 812d582..0000000
--- a/docs/manual/ssl/ssl_cover.wml
+++ /dev/null
@@ -1,66 +0,0 @@
-#!wml -o index.html
-
-#use "ssl_template.inc" title="Title Page" tag=title num=0 
-
-<br>
-<table cellspacing=0 cellpadding=0 border=0>
-<tr>
-    <td>
-        <table cellspacing=0 cellpadding=0 border=0>
-        <tr>
-        <td>
-        <img 
-           src="ssl_cover_title.jpg"
-           alt="User Manual" 
-        >
-        </td>
-        </tr>
-        <tr>
-        <td align=right>
-        <font face="Arial,Helvetica">mod_ssl version 2.8</font> &nbsp;&nbsp;
-        </td>
-        </tr>
-        </table>
-        <br>
-    </td>
-</tr>
-<tr>
-    <td>
-        <a 
-           href="http://www.modssl.org/"
-        ><img 
-           src="ssl_cover_logo.jpg"
-           alt="mod_ssl - The Apache Interface to OpenSSL" 
-           border=0
-        ></a>
-    </td>
-</tr>
-<tr>
-    <td align=right>
-        <table>
-        <tr>
-            <td>
-                <tt>Ralf S. Engelschall</tt><br>
-                <tt>rse@engelschall.com</tt><br>
-                <tt>www.engelschall.com</tt><br>
-            </td>
-            <td>
-                &nbsp;&nbsp;&nbsp;&nbsp;
-            </td>
-            <td align=right valign=bottom>
-                <rollover
-                    href="ssl_overview.html" 
-                    src="ssl_template.navbut-next-n.gif"
-                    oversrc="ssl_template.navbut-next-s.gif" 
-                    alt="next page"
-                ><br>Overview
-            </td>
-            <td>
-            <space width=30>
-            </td>
-        </tr>
-        </table>
-    </td>
-</tr>
-</table>
-
diff --git a/docs/manual/ssl/ssl_cover_logo.jpg b/docs/manual/ssl/ssl_cover_logo.jpg
deleted file mode 100644
index 3fcfeb4..0000000
--- a/docs/manual/ssl/ssl_cover_logo.jpg
+++ /dev/null
Binary files differ
diff --git a/docs/manual/ssl/ssl_cover_title.jpg b/docs/manual/ssl/ssl_cover_title.jpg
deleted file mode 100644
index 1c26232..0000000
--- a/docs/manual/ssl/ssl_cover_title.jpg
+++ /dev/null
Binary files differ
diff --git a/docs/manual/ssl/ssl_faq.gfont000.gif b/docs/manual/ssl/ssl_faq.gfont000.gif
deleted file mode 100644
index 7fb5db9..0000000
--- a/docs/manual/ssl/ssl_faq.gfont000.gif
+++ /dev/null
Binary files differ
diff --git a/docs/manual/ssl/ssl_faq.html b/docs/manual/ssl/ssl_faq.html
deleted file mode 100644
index 36d03de..0000000
--- a/docs/manual/ssl/ssl_faq.html
+++ /dev/null
@@ -1,1385 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-<title>Apache SSL/TLS Encryption: FAQ</title>
-<style type="text/css"><!--
-#H {
-}
-#D {
-    background-color: #f0f0f0;
-}
---></style>
-</head>
-
-<body bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#000080" alink="#FF0000"> 
-<!--#include virtual="header.html" -->
-
-<h1 align="CENTER">SSL/TLS Strong Encryption: FAQ</h1>
-
-
-<div align="right">
-<table cellspacing="0" cellpadding="0" width="200" summary="">
-<tr>
-<td>
-<em>
-``The wise man doesn't give the right answers,
-he poses the right questions.''
-</em>
-</td>
-</tr>
-<tr>
-<td align="right">
-<font size="-1">
-Claude Levi-Strauss
-</font>
-</td>
-</tr>
-</table>
-</div>
-
-<p>
-This chapter is a collection of frequently asked questions (FAQ) and
-corresponding answers following the popular USENET tradition. Most of these
-questions occured on the Newsgroup <a
-href="news:comp.infosystems.www.servers.unix">
-<code>comp.infosystems.www.servers.unix</code></a> or the mod_ssl Support
-Mailing List <a href="mailto:modssl-users@modssl.org">
-<code>modssl-users@modssl.org</code></a>. They are collected at this place
-to avoid answering the same questions over and over.
-<p>
-Please read this chapter at least once when installing mod_ssl or at least
-search for your problem here before submitting a problem report to the
-author.
-
-<ul>
-<li><a href="#ToC1">About the module</a>
-<ul>
-<li><a href="#ToC2">What is the history of mod_ssl?</a></li>
-<li><a href="#ToC3">Apache-SSL vs. mod_ssl: differences?</a></li>
-<li><a href="#ToC4">mod_ssl vs. commercial alternatives?</a></li>
-<li><a href="#ToC5">mod_ssl/Apache versions?</a></li>
-<li><a href="#ToC6">mod_ssl and Year 2000?</a></li>
-<li><a href="#ToC7">mod_ssl and Wassenaar Arrangement?</a></li>
-</ul></li>
-<li><a href="#ToC8">About Installation</a></li>
-<ul>
-<li><a href="#ToC9">Core dumps for HTTPS requests?</a></li>
-<li><a href="#ToC10">Core dumps for Apache+mod_ssl+PHP3?</a></li>
-<li><a href="#ToC11">Undefined symbols on startup?</a></li>
-<li><a href="#ToC12">Permission problem on SSLMutex</a></li>
-<li><a href="#ToC13">Shared memory and process size?</a></li>
-<li><a href="#ToC14">Shared memory and pathname?</a></li>
-<li><a href="#ToC15">PRNG and not enough entropy?</a></li>
-</ul></li>
-<li><a href="#ToC16">About Configuration</a></li>
-<ul>
-<li><a href="#ToC17">HTTP and HTTPS with a single server?</a></li>
-<li><a href="#ToC18">Where is the HTTPS port?</a></li>
-<li><a href="#ToC19">How to test HTTPS manually?</a></li>
-<li><a href="#ToC20">Why does my connection hang?</a></li>
-<li><a href="#ToC21">Why do I get connection refused?</a></li>
-<li><a href="#ToC22">Why are the SSL_XXX variables missing?</a></li>
-<li><a href="#ToC23">How to switch with relative hyperlinks?</a></li>
-</ul></li>
-<li><a href="#ToC24">About Certificates</a></li>
-<ul>
-<li><a href="#ToC25">What are Keys, CSRs and Certs?</a></li>
-<li><a href="#ToC26">Difference on startup?</a></li>
-<li><a href="#ToC27">How to create a dummy cert?</a></li>
-<li><a href="#ToC28">How to create a real cert?</a></li>
-<li><a href="#ToC29">How to create my own CA?</a></li>
-<li><a href="#ToC30">How to change a pass phrase?</a></li>
-<li><a href="#ToC31">How to remove a pass phrase?</a></li>
-<li><a href="#ToC32">How to verify a key/cert pair?</a></li>
-<li><a href="#ToC33">Bad Certificate Error?</a></li>
-<li><a href="#ToC34">Why does a 2048-bit key not work?</a></li>
-<li><a href="#ToC35">Why is client auth broken?</a></li>
-<li><a href="#ToC36">How to convert from PEM to DER?</a></li>
-<li><a href="#ToC37">Verisign and the magic getca program?</a></li>
-<li><a href="#ToC38">Global IDs or SGC?</a></li>
-<li><a href="#ToC39">Global IDs and Cert Chain?</a></li>
-</ul></li>
-<li><a href="#ToC40">About SSL Protocol</a></li>
-<ul>
-<li><a href="#ToC41">Random SSL errors under heavy load?</a></li>
-<li><a href="#ToC42">Why has the server a higher load?</a></li>
-<li><a href="#ToC43">Why are connections horribly slow?</a></li>
-<li><a href="#ToC44">Which ciphers are supported?</a></li>
-<li><a href="#ToC45">How to use Anonymous-DH ciphers</a></li>
-<li><a href="#ToC46">Why do I get 'no shared ciphers'?</a></li>
-<li><a href="#ToC47">HTTPS and name-based vhosts</a></li>
-<li><a href="#ToC48">The lock icon in Netscape locks very late</a></li>
-<li><a href="#ToC49">Why do I get I/O errors with MSIE clients?</a></li>
-<li><a href="#ToC50">Why do I get I/O errors with NS clients?</a></li>
-</ul></li>
-<li><a href="#ToC51">About Support</a></li>
-<ul>
-<li><a href="#ToC52">Resources in case of problems?</a></li>
-<li><a href="#ToC53">Support in case of problems?</a></li>
-<li><a href="#ToC54">How to write a problem report?</a></li>
-<li><a href="#ToC55">I got a core dump, can you help me?</a></li>
-<li><a href="#ToC56">How to get a backtrace?</a></li>
-</ul></li>
-</ul>
-
-
-<h2><a name="ToC1">About the module</a></h2>
-<ul>
-<p>
-<li><a name="ToC2"></a>
-    <a name="history"></a>
-    <strong id="faq">
-What is the history of mod_ssl?
-</strong>&nbsp;&nbsp;
-    [<a href="#history"><b>L</b></a>]
-    <p>
-    The mod_ssl v1 package was initially created in April 1998 by <a
-    href="mailto:rse@engelschall.com">Ralf S. Engelschall</a> via porting <a
-    href="mailto:ben@algroup.co.uk">Ben Laurie</a>'s <a
-    href="http://www.apache-ssl.org/">Apache-SSL</a> 1.17 source patches for
-    Apache 1.2.6 to Apache 1.3b6. Because of conflicts with Ben
-    Laurie's development cycle it then was re-assembled from scratch for
-    Apache 1.3.0 by merging the old mod_ssl 1.x with the newer Apache-SSL
-    1.18. From this point on mod_ssl lived its own life as mod_ssl v2. The
-    first publically released version was mod_ssl 2.0.0 from August 10th,
-    1998. As of this writing (August 1999) the current mod_ssl version is 2.4.0.
-    <p>
-    After one year of very active development with over 1000 working hours and
-    over 40 releases mod_ssl reached its current state. The result is an
-    already very clean source base implementing a very rich functionality.
-    The code size increased by a factor of 4 to currently a total of over
-    10.000 lines of ANSI C consisting of approx. 70% code and 30% code
-    documentation. From the original Apache-SSL code currently approx. 5% is
-    remaining only.
-    <p>
-    After the US export restrictions for cryptographic software were
-    opened, mod_ssl was integrated into the code base of Apache V2 in 2001.
-<p>
-<li><a name="ToC3"></a>
-    <a name="apssl-diff"></a>
-    <strong id="faq">
-What are the functional differences between mod_ssl and Apache-SSL, from which
-it is originally derived?
-</strong>&nbsp;&nbsp;
-    [<a href="#apssl-diff"><b>L</b></a>]
-    <p>
-    This neither can be answered in short (there were too many code changes)
-    nor can be answered at all by the author (there would immediately be flame
-    wars with no reasonable results at the end). But as you easily can guess
-    from the 5% of remaining Apache-SSL code, a lot of differences exists,
-    although user-visible backward compatibility exists for most things.
-    <p>
-    When you really want a detailed comparison you have to read the entries in
-    the large <code>CHANGES</code> file that is in the mod_ssl
-    distribution. Usually this is much too hard-core. So I recommend you to
-    either believe in the opinion and recommendations of other users (the
-    simplest approach) or do a comparison yourself (the most reasonable
-    approach). For the latter, grab distributions of mod_ssl (from <a
-    href="http://www.modssl.org/">http://www.modssl.org</a>) and Apache-SSL
-    (from <a href="http://www.apache-ssl.org/">http://www.apache-ssl.org</a>),
-    install both packages, read their documentation and try them out yourself.
-    Then choose the one which pleases you most.
-    <p>
-    A few final hints to help direct your comparison: quality of documentation
-    ("can you easily find answers and are they sufficient?"), quality of
-    source code ("is the source code reviewable so you can make sure there
-    aren't any trapdoors or inherent security risks because of bad programming
-    style?"), easy and clean installation ("can the SSL functionality easily
-    added to an Apache source tree without manual editing or patching?"),
-    clean integration into Apache ("is the SSL functionality encapsulated and
-    cleanly separated from the remaining Apache functionality?"), support for
-    Dynamic Shared Object (DSO) facility ("can the SSL functionality built as
-    a separate DSO for maximum flexibility?"), Win32 port ("is the SSL
-    functionality available also under the Win32 platform?"), amount and
-    quality of functionality ("is the provided SSL functionality and control
-    possibilities sufficient for your situation?"), quality of problem tracing
-    ("is it possible for you to easily trace down the problems via logfiles,
-    etc?"), etc. pp.
-<p>
-<li><a name="ToC4"></a>
-    <a name="apssl-diff"></a>
-    <strong id="faq">
-What are the major differences between mod_ssl and
-the commercial alternatives like Raven or Stronghold?
-</strong>&nbsp;&nbsp;
-    [<a href="#apssl-diff"><b>L</b></a>]
-    <p>
-    In the past (until September 20th, 2000) the major difference was
-    the RSA license which one received (very cheaply in contrast to
-    a direct licensing from RSA DSI) with the commercial Apache SSL
-    products. On the other hand, one needed this license only in the US,
-    of course. So for non-US citizens this point was useless. But now
-    even for US citizens the situations changed because the RSA patent
-    expired on September 20th, 2000 and RSA DSI also placed the RSA
-    algorithm explicitly into the public domain.
-    <p>
-    Second, there is the point that one has guaranteed support from
-    the commercial vendors. On the other hand, if you monitored the
-    Open Source quality of mod_ssl and the support activities
-    found on <a href="mailto:modssl-users@modssl.org">
-    <code>modssl-users@modssl.org</code></a>, you could ask yourself
-    whether you are really convinced that you can get better support
-    from a commercial vendor.
-    <p>
-    Third, people often think they would receive perhaps at least a
-    better technical SSL solution than mod_ssl from the commercial
-    vendors. But this is not really true, because all commercial
-    alternatives (Raven 1.4.x, Stronghold 3.x, RedHat SWS 2.x, etc.)
-    <i>are</i> actually based on mod_ssl and OpenSSL. The reason for
-    this common misunderstanding is mainly because some vendors make no
-    attempt to make it reasonably clear that their product is actually
-    mod_ssl based. So, do not think, just because the commercial
-    alternatives are usually more expensive, that you are also receiving
-    an alternative <i>technical</i> SSL solution. This is usually not
-    the case. Actually the vendor versions of Apache, mod_ssl and OpenSSL
-    often stay behind the latest free versions and perhaps this way still do not
-    include important bug and security fixes. On the other hand,
-    it sometimes occurs that a vendor version includes useful changes
-    which are not available through the official freely available
-    packages. But most vendors play fair and contribute back those
-    changes to the free software world, of course.
-    <p>
-    So, in short: There are lots of commercial versions of the popular
-    Apache+mod_ssl+OpenSSL server combination available. Every user
-    should decide carefully whether they really need to buy a commercial
-    version or whether it would not be sufficient to directly use the
-    free and official versions of the Apache, mod_ssl and OpenSSL
-    packages.
-<p>
-<li><a name="ToC5"></a>
-    <a name="what-version"></a>
-    <strong id="faq">
-How do I know which mod_ssl version is for which Apache version?
-</strong>&nbsp;&nbsp;
-    [<a href="#what-version"><b>L</b></a>]
-    <p>
-    That's trivial: mod_ssl uses version strings of the syntax
-    <em>&lt;mod_ssl-version&gt;</em>-<em>&lt;apache-version&gt;</em>, for
-    instance <code>2.4.0-1.3.9</code>. This directly indicates that it's
-    mod_ssl version 2.4.0 for Apache version 1.3.9. And this also means you
-    <em>only</em> can apply this mod_ssl version to exactly this Apache
-    version (unless you use the <code>--force</code> option to mod_ssl's
-    <code>configure</code> command ;-).
-<p>
-<li><a name="ToC6"></a>
-    <a name="y2k"></a>
-    <strong id="faq">
-Is mod_ssl Year 2000 compliant?
-</strong>&nbsp;&nbsp;
-    [<a href="#y2k"><b>L</b></a>]
-    <p>
-    Yes, mod_ssl is Year 2000 compliant.
-    <p>
-    Because first mod_ssl internally never stores years as two digits.
-    Instead it always uses the ANSI C &amp; POSIX numerical data type
-    <code>time_t</code> type, which on almost all Unix platforms at the moment
-    is a <code>signed long</code> (usually 32-bits) representing seconds since
-    epoch of January 1st, 1970, 00:00 UTC. This signed value overflows in
-    early January 2038 and not in the year 2000. Second, date and time
-    presentations (for instance the variable ``<code>%{TIME_YEAR}</code>'')
-    are done with full year value instead of abbreviating to two digits.
-    <p>
-    Additionally according to a <a
-    href="http://www.apache.org/docs/misc/FAQ.html#year2000">Year 2000
-    statement</a> from the Apache Group, the Apache webserver is Year 2000
-    compliant, too. But whether OpenSSL or the underlaying Operating System
-    (either a Unix or Win32 platform) is Year 2000 compliant is a different
-    question which cannot be answered here.
-<p>
-<li><a name="ToC7"></a>
-    <a name="wassenaar"></a>
-    <strong id="faq">
-What about mod_ssl and the Wassenaar Arrangement?
-</strong>&nbsp;&nbsp;
-    [<a href="#wassenaar"><b>L</b></a>]
-    <p>
-    First, let us explain what <i>Wassenaar</i> and its <i>Arrangement on
-    Export Controls for Conventional Arms and Dual-Use Goods and
-    Technologies</i> is: This is a international regime, established 1995, to
-    control trade in conventional arms and dual-use goods and technology. It
-    replaced the previous <i>CoCom</i> regime. 33 countries are signatories:
-    Argentina, Australia, Austria, Belgium, Bulgaria, Canada, Czech Republic,
-    Denmark, Finland, France, Germany, Greece, Hungary, Ireland, Italy, Japan,
-    Luxembourg, Netherlands, New Zealand, Norway, Poland, Portugal, Republic
-    of Korea, Romania, Russian Federation, Slovak Republic, Spain, Sweden,
-    Switzerland, Turkey, Ukraine, United Kingdom and United States. For more
-    details look at <a
-    href="http://www.wassenaar.org/">http://www.wassenaar.org/</a>.
-    <p>
-    In short: The aim of the Wassenaar Arrangement is to prevent the build up
-    of military capabilities that threaten regional and international security
-    and stability. The Wassenaar Arrangement controls the export of
-    cryptography as a dual-use good, i.e., one that has both military and
-    civilian applications. However, the Wassenaar Arrangement also provides an
-    exemption from export controls for mass-market software and free software.
-    <p>
-    In the current Wassenaar ``<i>List of Dual Use Goods and Technologies And
-    Munitions</i>'', under ``<i>GENERAL SOFTWARE NOTE</i>'' (GSN) it says
-    ``<i>The Lists do not control "software" which is either: 1. [...] 2. "in
-    the public domain".</i>'' And under ``<i>DEFINITIONS OF TERMS USED IN
-    THESE LISTS</i>'' one can find the definition: ``<i>"In the public
-    domain": This means "technology" or "software" which has been made
-    available without restrictions upon its further dissemination. N.B.
-    Copyright restrictions do not remove "technology" or "software" from being
-    "in the public domain".</i>''
-    <p>
-    So, both mod_ssl and OpenSSL are ``in the public domain'' for the purposes
-    of the Wassenaar Agreement and its ``<i>List of Dual Use Goods and
-    Technologies And Munitions List</i>''.
-    <p>
-    Additionally the Wassenaar Agreement itself has no direct consequence for
-    exporting cryptography software. What is actually allowed or forbidden to
-    be exported from the countries has still to be defined in the local laws
-    of each country. And at least according to official press releases from
-    the German BMWi (see <a
-    href="http://www.bmwi.de/presse/1998/1208prm2.html">here</a>) and the
-    Switzerland Bawi (see <a href="http://jya.com/wass-ch.htm">here</a>) there
-    will be no forthcoming export restriction for free cryptography software
-    for their countries. Remember that mod_ssl is created in Germany and
-    distributed from Switzerland.
-    <p>
-    So, mod_ssl and OpenSSL are not affected by the Wassenaar Agreement.
-</ul>
-<p>
-<br>
-<h2><a name="ToC8">About Installation</a></h2>
-<ul>
-<p>
-<li><a name="ToC9"></a>
-    <a name="core-dbm"></a>
-    <strong id="faq">
-When I access my website the first time via HTTPS I get a core dump?
-</strong>&nbsp;&nbsp;
-    [<a href="#core-dbm"><b>L</b></a>]
-    <p>
-    There can be a lot of reasons why a core dump can occur, of course.
-    Ranging from buggy third-party modules, over buggy vendor libraries up to
-    a buggy mod_ssl version. But the above situation is often caused by old or
-    broken vendor DBM libraries. To solve it either build mod_ssl with the
-    built-in SDBM library (specify <tt>--enable-rule=SSL_SDBM</tt> at the
-    APACI command line) or switch from ``<tt>SSLSessionCache dbm:</tt>'' to the
-    newer ``<tt>SSLSessionCache shm:</tt>'' variant (after you have rebuilt
-    Apache with MM, of course).
-<p>
-<li><a name="ToC10"></a>
-    <a name="core-php3"></a>
-    <strong id="faq">
-My Apache dumps core when I add both mod_ssl and PHP3?
-</strong>&nbsp;&nbsp;
-    [<a href="#core-php3"><b>L</b></a>]
-    <p>
-    Make sure you add mod_ssl to the Apache source tree first and then do a
-    fresh configuration and installation of PHP3. For SSL support EAPI patches
-    are required which have to change internal Apache structures. PHP3 needs
-    to know about these in order to work correctly. Always make sure that
-    <tt>-DEAPI</tt> is contained in the compiler flags when PHP3 is built.
-<p>
-<li><a name="ToC11"></a>
-    <a name="dso-sym"></a>
-    <strong id="faq">
-When I startup Apache I get errors about undefined symbols like ap_global_ctx?
-</strong>&nbsp;&nbsp;
-    [<a href="#dso-sym"><b>L</b></a>]
-    <p>
-    This actually means you installed mod_ssl as a DSO, but without rebuilding
-    Apache with EAPI. Because EAPI is a requirement for mod_ssl, you need an
-    extra patched Apache (containing the EAPI patches) and you have to build
-    this Apache with EAPI enabled (explicitly specify
-    <tt>--enable-rule=EAPI</tt> at the APACI command line).
-<p>
-<li><a name="ToC12"></a>
-    <a name="mutex-perm"></a>
-    <strong id="faq">
-When I startup Apache I get permission errors related to SSLMutex?
-</strong>&nbsp;&nbsp;
-    [<a href="#mutex-perm"><b>L</b></a>]
-    <p>
-    When you receive entries like ``<code>mod_ssl: Child could not open
-    SSLMutex lockfile /opt/apache/logs/ssl_mutex.18332 (System error follows)
-    [...] System: Permission denied (errno: 13)</code>'' this is usually
-    caused by to restrictive permissions on the <i>parent</i> directories.
-    Make sure that all parent directories (here <code>/opt</code>,
-    <code>/opt/apache</code> and <code>/opt/apache/logs</code>) have the x-bit
-    set at least for the UID under which Apache's children are running (see
-    the <code>User</code> directive of Apache).
-<p>
-<li><a name="ToC13"></a>
-    <a name="mm"></a>
-    <strong id="faq">
-When I use the MM library and the shared memory cache each process grows
-1.5MB according to `top' although I specified 512000 as the cache size?
-</strong>&nbsp;&nbsp;
-    [<a href="#mm"><b>L</b></a>]
-    <p>
-    The additional 1MB are caused by the global shared memory pool EAPI
-    allocates for all modules and which is not used by mod_ssl for
-    various reasons. So the actually allocated shared memory is always
-    1MB more than what you specify on <code>SSLSessionCache</code>.
-    But don't be confused by the display of `top': although is
-    indicates that <i>each</i> process grow, this is not reality, of
-    course. Instead the additional memory consumption is shared by
-    all processes, i.e. the 1.5MB are allocated only once per Apache
-    instance and not once per Apache server process.
-<p>
-<li><a name="ToC14"></a>
-    <a name="mmpath"></a>
-    <strong id="faq">
-Apache creates files in a directory declared by the internal
-EAPI_MM_CORE_PATH define. Is there a way to override the path using a
-configuration directive?
-</strong>&nbsp;&nbsp;
-    [<a href="#mmpath"><b>L</b></a>]
-    <p>
-    No, there is not configuration directive, because for technical
-    bootstrapping reasons, a directive not possible at all. Instead
-    use ``<code>CFLAGS='-DEAPI_MM_CORE_PATH="/path/to/wherever/"'
-    ./configure ...</code>'' when building Apache or use option
-    <b>-d</b> when starting <code>httpd</code>.
-<p>
-<li><a name="ToC15"></a>
-    <a name="entropy"></a>
-    <strong id="faq">
-When I fire up the server, mod_ssl stops with the error
-"Failed to generate temporary 512 bit RSA private key", why?
-And a "PRNG not seeded" error occurs if I try "make certificate".
-</strong>&nbsp;&nbsp;
-    [<a href="#entropy"><b>L</b></a>]
-    <p>
-    Cryptographic software needs a source of unpredictable data
-    to work correctly. Many open source operating systems provide
-    a "randomness device" that serves this purpose (usually named
-    <code>/dev/random</code>). On other systems, applications have to
-    seed the OpenSSL Pseudo Random Number Generator (PRNG) manually with
-    appropriate data before generating keys or performing public key
-    encryption. As of version 0.9.5, the OpenSSL functions that need
-    randomness report an error if the PRNG has not been seeded with
-    at least 128 bits of randomness. So mod_ssl has to provide enough
-    entropy to the PRNG to work correctly. For this one has to use the
-    <code>SSLRandomSeed</code> directives (to solve the run-time problem)
-    and create a <code>$HOME/.rnd</code> file to make sure enough
-    entropy is available also for the "<code>make certificate</code>"
-    step (in case the "<code>make certificate</code>" procedure is not
-    able to gather enough entropy theirself by searching for system
-    files).
-</ul>
-<p>
-<br>
-<h2><a name="ToC16">About Configuration</a></h2>
-<ul>
-<p>
-<li><a name="ToC17"></a>
-    <a name="https-parallel"></a>
-    <strong id="faq">
-Is it possible to provide HTTP and HTTPS with a single server?</strong>
-</strong>&nbsp;&nbsp;
-    [<a href="#https-parallel"><b>L</b></a>]
-    <p>
-    Yes, HTTP and HTTPS use different server ports, so there is no direct
-    conflict between them. Either run two separate server instances (one binds
-    to port 80, the other to port 443) or even use Apache's elegant virtual
-    hosting facility where you can easily create two virtual servers which
-    Apache dispatches: one responding to port 80 and speaking HTTP and one
-    responding to port 443 speaking HTTPS.
-<p>
-<li><a name="ToC18"></a>
-    <a name="https-port"></a>
-    <strong id="faq">
-I know that HTTP is on port 80, but where is HTTPS?
-</strong>&nbsp;&nbsp;
-    [<a href="#https-port"><b>L</b></a>]
-    <p>
-    You can run HTTPS on any port, but the standards specify port 443, which
-    is where any HTTPS compliant browser will look by default. You can force
-    your browser to look on a different port by specifying it in the URL like
-    this (for port 666): <code>https://secure.server.dom:666/</code>
-<p>
-<li><a name="ToC19"></a>
-    <a name="https-test"></a>
-    <strong id="faq">
-How can I speak HTTPS manually for testing purposes?
-</strong>&nbsp;&nbsp;
-    [<a href="#https-test"><b>L</b></a>]
-    <p>
-    While you usually just use
-    <p>
-    <code><b>$ telnet localhost 80</b></code><br>
-    <code><b>GET / HTTP/1.0</b></code>
-    <p>
-    for simple testing the HTTP protocol of Apache, it's not so easy for
-    HTTPS because of the SSL protocol between TCP and HTTP. But with the
-    help of OpenSSL's <code>s_client</code> command you can do a similar
-    check even for HTTPS:
-    <p>
-    <code><b>$ openssl s_client -connect localhost:443 -state -debug</b></code><br>
-    <code><b>GET / HTTP/1.0</b></code>
-    <p>
-    Before the actual HTTP response you receive detailed information about the
-    SSL handshake. For a more general command line client which directly
-    understands both the HTTP and HTTPS scheme, can perform GET and POST
-    methods, can use a proxy, supports byte ranges, etc. you should have a
-    look at nifty <a href="http://curl.haxx.nu/">cURL</a>
-    tool. With it you can directly check if your Apache is running fine on
-    Port 80 and 443 as following:
-    <p>
-    <code><b>$ curl http://localhost/</b></code><br>
-    <code><b>$ curl https://localhost/</b></code><br>
-<p>
-<li><a name="ToC20"></a>
-    <a name="hang"></a>
-    <strong id="faq">
-Why does the connection hang when I connect to my SSL-aware Apache server?
-</strong>&nbsp;&nbsp;
-    [<a href="#hang"><b>L</b></a>]
-    <p>
-    Because you connected with HTTP to the HTTPS port, i.e. you used an URL of
-    the form ``<code>http://</code>'' instead of ``<code>https://</code>''.
-    This also happens the other way round when you connect via HTTPS to a HTTP
-    port, i.e. when you try to use ``<code>https://</code>'' on a server that
-    doesn't support SSL (on this port). Make sure you are connecting to a
-    virtual server that supports SSL, which is probably the IP associated with
-    your hostname, not localhost (127.0.0.1).
-<p>
-<li><a name="ToC21"></a>
-    <a name="hang"></a>
-    <strong id="faq">
-Why do I get ``Connection Refused'' messages when trying to access my freshly
-installed Apache+mod_ssl server via HTTPS?
-</strong>&nbsp;&nbsp;
-    [<a href="#hang"><b>L</b></a>]
-    <p>
-    There can be various reasons. Some of the common mistakes is that people
-    start Apache with just ``<tt>apachectl start</tt>'' (or
-    ``<tt>httpd</tt>'') instead of ``<tt>apachectl startssl</tt>'' (or
-    ``<tt>httpd -DSSL</tt>''. Or you're configuration is not correct. At
-    least make sure that your ``<tt>Listen</tt>'' directives match your
-    ``<tt>&lt;VirtualHost&gt;</tt>'' directives. And if all fails, please do
-    yourself a favor and start over with the default configuration mod_ssl
-    provides you.
-<p>
-<li><a name="ToC22"></a>
-    <a name="env-vars"></a>
-    <strong id="faq">
-In my CGI programs and SSI scripts the various documented
-<code>SSL_XXX</code> variables do not exist. Why?
-</strong>&nbsp;&nbsp;
-    [<a href="#env-vars"><b>L</b></a>]
-    <p>
-    Just make sure you have ``<code>SSLOptions +StdEnvVars</code>''
-    enabled for the context of your CGI/SSI requests.
-<p>
-<li><a name="ToC23"></a>
-    <a name="relative-links"></a>
-    <strong id="faq">
-How can I use relative hyperlinks to switch between HTTP and HTTPS?
-</strong>&nbsp;&nbsp;
-    [<a href="#relative-links"><b>L</b></a>]
-    <p>
-    Usually you have to use fully-qualified hyperlinks because
-    you have to change the URL scheme. But with the help of some URL
-    manipulations through mod_rewrite you can achieve the same effect while
-    you still can use relative URLs:
-    <pre>
-    RewriteEngine on
-    RewriteRule   ^/(.*):SSL$   https://%{SERVER_NAME}/$1 [R,L]
-    RewriteRule   ^/(.*):NOSSL$ http://%{SERVER_NAME}/$1  [R,L]
-    </pre>
-    This rewrite ruleset lets you use hyperlinks of the form
-    <pre>
-    &lt;a href="document.html:SSL"&gt
-    </pre>
-</ul>
-<p>
-<br>
-<h2><a name="ToC24">About Certificates</a></h2>
-<ul>
-<p>
-<li><a name="ToC25"></a>
-    <a name="what-is"></a>
-    <strong id="faq">
-What are RSA Private Keys, CSRs and Certificates?</strong>
-</strong>&nbsp;&nbsp;
-    [<a href="#what-is"><b>L</b></a>]
-    <p>
-    The RSA private key file is a digital file that you can use to decrypt
-    messages sent to you. It has a public component which you distribute (via
-    your Certificate file) which allows people to encrypt those messages to
-    you. A Certificate Signing Request (CSR) is a digital file which contains
-    your public key and your name. You send the CSR to a Certifying Authority
-    (CA) to be converted into a real Certificate. A Certificate contains your
-    RSA public key, your name, the name of the CA, and is digitally signed by
-    your CA. Browsers that know the CA can verify the signature on that
-    Certificate, thereby obtaining your RSA public key. That enables them to
-    send messages which only you can decrypt.
-    See the <a href="ssl_intro.html">Introduction</a> chapter for a general
-    description of the SSL protocol.
-<p>
-<li><a name="ToC26"></a>
-    <a name="startup"></a>
-    <strong id="faq">
-Seems like there is a difference on startup between the original Apache and an SSL-aware Apache?
-</strong>&nbsp;&nbsp;
-    [<a href="#startup"><b>L</b></a>]
-    <p>
-    Yes, in general, starting Apache with a built-in mod_ssl is just like
-    starting an unencumbered Apache, except for the fact that when you have a
-    pass phrase on your SSL private key file. Then a startup dialog pops up
-    asking you to enter the pass phrase.
-    <p>
-    To type in the pass phrase manually when starting the server can be
-    problematic, for instance when starting the server from the system boot
-    scripts. As an alternative to this situation you can follow the steps
-    below under ``How can I get rid of the pass-phrase dialog at Apache
-    startup time?''.
-<p>
-<li><a name="ToC27"></a>
-    <a name="cert-dummy"></a>
-    <strong id="faq">
-How can I create a dummy SSL server Certificate for testing purposes?
-</strong>&nbsp;&nbsp;
-    [<a href="#cert-dummy"><b>L</b></a>]
-    <p>
-    A Certificate does not have to be signed by a public CA. You can use your
-    private key to sign the Certificate which contains your public key. You
-    can install this Certificate into your server, and people using Netscape
-    Navigator (not MSIE) will be able to connect after clicking OK to a
-    warning dialogue. You can get MSIE to work, and your customers can
-    eliminate the dialogue, by installing that Certificate manually into their
-    browsers.
-    <p>
-    Just use the ``<code>make certificate</code>'' command at the top-level
-    directory of the Apache source tree right before installing Apache via
-    ``<code>make install</code>''. This creates a self-signed SSL Certificate
-    which expires after 30 days and isn't encrypted (which means you don't
-    need to enter a pass-phrase at Apache startup time).
-    <p>
-    BUT REMEMBER: YOU REALLY HAVE TO CREATE A REAL CERTIFICATE FOR THE LONG
-    RUN! HOW THIS IS DONE IS DESCRIBED IN THE NEXT ANSWER.
-<p>
-<li><a name="ToC28"></a>
-    <a name="cert-real"></a>
-    <strong id="faq">
-Ok, I've got my server installed and want to create a real SSL
-server Certificate for it. How do I do it?
-</strong>&nbsp;&nbsp;
-    [<a href="#cert-real"><b>L</b></a>]
-    <p>
-    Here is a step-by-step description:
-    <p>
-    <ol>
-    <li>Make sure OpenSSL is really installed and in your <code>PATH</code>.
-        But some commands even work ok when you just run the
-        ``<code>openssl</code>'' program from within the OpenSSL source tree as
-        ``<code>./apps/openssl</code>''.
-    <p>
-    <li>Create a RSA private key for your Apache server
-       (will be Triple-DES encrypted and PEM formatted):
-       <p>
-       <code><strong>$ openssl genrsa -des3 -out server.key 1024</strong></code>
-       <p>
-       Please backup this <code>server.key</code> file and remember the
-       pass-phrase you had to enter at a secure location.
-       You can see the details of this RSA private key via the command:
-       <p>
-       <code><strong>$ openssl rsa -noout -text -in server.key</strong></code>
-       <p>
-       And you could create a decrypted PEM version (not recommended)
-       of this RSA private key via:
-       <p>
-       <code><strong>$ openssl rsa -in server.key -out server.key.unsecure</strong></code>
-    <p>
-    <li>Create a Certificate Signing Request (CSR) with the server RSA private
-       key (output will be PEM formatted):
-       <p>
-       <code><strong>$ openssl req -new -key server.key -out server.csr</strong></code>
-       <p>
-       Make sure you enter the FQDN ("Fully Qualified Domain Name") of the
-       server when OpenSSL prompts you for the "CommonName", i.e. when you
-       generate a CSR for a website which will be later accessed via
-       <code>https://www.foo.dom/</code>, enter "www.foo.dom" here.
-       You can see the details of this CSR via the command
-       <p>
-       <code><strong>$ openssl req -noout -text -in server.csr</strong></code>
-    <p>
-    <li>You now have to send this Certificate Signing Request (CSR) to
-       a Certifying Authority (CA) for signing. The result is then a real
-       Certificate which can be used for Apache. Here you have two options:
-       First you can let the CSR sign by a commercial CA like Verisign or
-       Thawte. Then you usually have to post the CSR into a web form, pay for
-       the signing and await the signed Certificate you then can store into a
-       server.crt file. For more information about commercial CAs have a look
-       at the following locations:
-       <p>
-       <ul>
-       <li>  Verisign<br>
-             <a href="http://digitalid.verisign.com/server/apacheNotice.htm">
-             http://digitalid.verisign.com/server/apacheNotice.htm
-             </a>
-       <li>  Thawte Consulting<br>
-             <a href="http://www.thawte.com/certs/server/request.html">
-             http://www.thawte.com/certs/server/request.html
-             </a>
-       <li>  CertiSign Certificadora Digital Ltda.<br>
-             <a href="http://www.certisign.com.br">
-             http://www.certisign.com.br
-             </a>
-       <li>  IKS GmbH<br>
-             <a href="http://www.iks-jena.de/produkte/ca/">
-             http://www.iks-jena.de/produkte/ca/
-             </a>
-       <li>  Uptime Commerce Ltd.<br>
-             <a href="http://www.uptimecommerce.com">
-             http://www.uptimecommerce.com
-             </a>
-       <li>  BelSign NV/SA<br>
-             <a href="http://www.belsign.be">
-             http://www.belsign.be
-             </a>
-       </ul>
-       <p>
-       Second you can use your own CA and now have to sign the CSR yourself by
-       this CA. Read the next answer in this FAQ on how to sign a CSR with
-       your CA yourself.
-       You can see the details of the received Certificate via the command:
-       <p>
-       <code><strong>$ openssl x509 -noout -text -in server.crt</strong></code>
-    <p>
-    <li>Now you have two files: <code>server.key</code> and
-    <code>server.crt</code>. These now can be used as following inside your
-    Apache's <code>httpd.conf</code> file:
-       <pre>
-       SSLCertificateFile    /path/to/this/server.crt
-       SSLCertificateKeyFile /path/to/this/server.key
-       </pre>
-       The <code>server.csr</code> file is no longer needed.
-    </ol>
-<p>
-<li><a name="ToC29"></a>
-    <a name="cert-ownca"></a>
-    <strong id="faq">
-How can I create and use my own Certificate Authority (CA)?
-</strong>&nbsp;&nbsp;
-    [<a href="#cert-ownca"><b>L</b></a>]
-    <p>
-    The short answer is to use the <code>CA.sh</code> or <code>CA.pl</code>
-    script provided by OpenSSL. The long and manual answer is this:
-    <p>
-    <ol>
-    <li>Create a RSA private key for your CA
-       (will be Triple-DES encrypted and PEM formatted):
-       <p>
-       <code><strong>$ openssl genrsa -des3 -out ca.key 1024</strong></code>
-       <p>
-       Please backup this <code>ca.key</code> file and remember the
-       pass-phrase you currently entered at a secure location.
-       You can see the details of this RSA private key via the command
-       <p>
-       <code><strong>$ openssl rsa -noout -text -in ca.key</strong></code>
-       <p>
-       And you can create a decrypted PEM version (not recommended) of this
-       private key via:
-       <p>
-       <code><strong>$ openssl rsa -in ca.key -out ca.key.unsecure</strong></code>
-    <p>
-    <li>Create a self-signed CA Certificate (X509 structure)
-       with the RSA key of the CA (output will be PEM formatted):
-       <p>
-       <code><strong>$ openssl req -new -x509 -days 365 -key ca.key -out ca.crt</strong></code>
-       <p>
-       You can see the details of this Certificate via the command:
-       <p>
-       <code><strong>$ openssl x509 -noout -text -in ca.crt</strong></code>
-    <p>
-    <li>Prepare a script for signing which is needed because
-       the ``<code>openssl ca</code>'' command has some strange requirements
-       and the default OpenSSL config doesn't allow one easily to use
-       ``<code>openssl ca</code>'' directly. So a script named
-       <code>sign.sh</code> is distributed with the mod_ssl distribution
-       (subdir <code>pkg.contrib/</code>). Use this script for signing.
-    <p>
-    <li>Now you can use this CA to sign server CSR's in order to create real
-       SSL Certificates for use inside an Apache webserver (assuming
-       you already have a <code>server.csr</code> at hand):
-       <p>
-       <code><strong>$ ./sign.sh server.csr</strong></code>
-       <p>
-       This signs the server CSR and results in a <code>server.crt</code> file.
-    </ol>
-<p>
-<li><a name="ToC30"></a>
-    <a name="change-passphrase"></a>
-    <strong id="faq">
-How can I change the pass-phrase on my private key file?
-</strong>&nbsp;&nbsp;
-    [<a href="#change-passphrase"><b>L</b></a>]
-    <p>
-    You simply have to read it with the old pass-phrase and write it again
-    by specifying the new pass-phrase. You can accomplish this with the following
-    commands:
-    <p>
-    <code><strong>$ openssl rsa -des3 -in server.key -out server.key.new</strong></code><br>
-    <code><strong>$ mv server.key.new server.key</strong></code><br>
-    <p>
-    Here you're asked two times for a PEM pass-phrase. At the first
-    prompt enter the old pass-phrase and at the second prompt
-    enter the new pass-phrase.
-<p>
-<li><a name="ToC31"></a>
-    <a name="remove-passphrase"></a>
-    <strong id="faq">
-How can I get rid of the pass-phrase dialog at Apache startup time?
-</strong>&nbsp;&nbsp;
-    [<a href="#remove-passphrase"><b>L</b></a>]
-    <p>
-    The reason why this dialog pops up at startup and every re-start
-    is that the RSA private key inside your server.key file is stored in
-    encrypted format for security reasons. The pass-phrase is needed to be
-    able to read and parse this file. When you can be sure that your server is
-    secure enough you perform two steps:
-    <p>
-    <ol>
-    <li>Remove the encryption from the RSA private key (while
-       preserving the original file):
-       <p>
-       <code><strong>$ cp server.key server.key.org</strong></code><br>
-       <code><strong>$ openssl rsa -in server.key.org -out server.key</strong></code>
-    <p>
-    <li>Make sure the server.key file is now only readable by root:
-       <p>
-       <code><strong>$ chmod 400 server.key</strong></code>
-    </ol>
-    <p>
-    Now <code>server.key</code> will contain an unencrypted copy of the key.
-    If you point your server at this file it will not prompt you for a
-    pass-phrase. HOWEVER, if anyone gets this key they will be able to
-    impersonate you on the net. PLEASE make sure that the permissions on that
-    file are really such that only root or the web server user can read it
-    (preferably get your web server to start as root but run as another
-    server, and have the key readable only by root).
-    <p>
-    As an alternative approach you can use the ``<code>SSLPassPhraseDialog
-    exec:/path/to/program</code>'' facility. But keep in mind that this is
-    neither more nor less secure, of course.
-<p>
-<li><a name="ToC32"></a>
-    <a name="verify-key"></a>
-    <strong id="faq">
-How do I verify that a private key matches its Certificate?
-</strong>&nbsp;&nbsp;
-    [<a href="#verify-key"><b>L</b></a>]
-    <p>
-    The private key contains a series of numbers. Two of those numbers form
-    the "public key", the others are part of your "private key". The "public
-    key" bits are also embedded in your Certificate (we get them from your
-    CSR). To check that the public key in your cert matches the public
-    portion of your private key, you need to view the cert and the key and
-    compare the numbers. To view the Certificate and the key run the
-    commands:
-    <p>
-    <code><strong>$ openssl x509 -noout -text -in server.crt</strong></code><br>
-    <code><strong>$ openssl rsa -noout -text -in server.key</strong></code>
-    <p>
-    The `modulus' and the `public exponent' portions in the key and the
-    Certificate must match. But since the public exponent is usually 65537
-    and it's bothering comparing long modulus you can use the following
-    approach:
-    <p>
-    <code><strong>$ openssl x509 -noout -modulus -in server.crt | openssl md5</strong></code><br>
-    <code><strong>$ openssl rsa -noout -modulus -in server.key | openssl md5</strong></code>
-    <p>
-    And then compare these really shorter numbers. With overwhelming
-    probability they will differ if the keys are different. BTW, if I want to
-    check to which key or certificate a particular CSR belongs you can compute
-    <p>
-    <code><strong>$ openssl req -noout -modulus -in server.csr | openssl md5</strong></code>
-<p>
-<li><a name="ToC33"></a>
-    <a name="keysize1"></a>
-    <strong id="faq">
-What does it mean when my connections fail with an "alert bad certificate"
-error?
-</strong>&nbsp;&nbsp;
-    [<a href="#keysize1"><b>L</b></a>]
-    <p>
-    Usually when you see errors like ``<tt>OpenSSL: error:14094412: SSL
-    routines:SSL3_READ_BYTES:sslv3 alert bad certificate</tt>'' in the SSL
-    logfile, this means that the browser was unable to handle the server
-    certificate/private-key which perhaps contain a RSA-key not equal to 1024
-    bits. For instance Netscape Navigator 3.x is one of those browsers.
-<p>
-<li><a name="ToC34"></a>
-    <a name="keysize2"></a>
-    <strong id="faq">
-Why does my 2048-bit private key not work?
-</strong>&nbsp;&nbsp;
-    [<a href="#keysize2"><b>L</b></a>]
-    <p>
-    The private key sizes for SSL must be either 512 or 1024 for compatibility
-    with certain web browsers. A keysize of 1024 bits is recommended because
-    keys larger than 1024 bits are incompatible with some versions of Netscape
-    Navigator and Microsoft Internet Explorer, and with other browsers that
-    use RSA's BSAFE cryptography toolkit.
-<p>
-<li><a name="ToC35"></a>
-    <a name="hash-symlinks"></a>
-    <strong id="faq">
-Why is client authentication broken after upgrading from
-SSLeay version 0.8 to 0.9?
-</strong>&nbsp;&nbsp;
-    [<a href="#hash-symlinks"><b>L</b></a>]
-    <p>
-    The CA certificates under the path you configured with
-    <code>SSLCACertificatePath</code> are found by SSLeay through hash
-    symlinks. These hash values are generated by the `<code>openssl x509 -noout
-    -hash</code>' command. But the algorithm used to calculate the hash for a
-    certificate has changed between SSLeay 0.8 and 0.9. So you have to remove
-    all old hash symlinks and re-create new ones after upgrading. Use the
-    <code>Makefile</code> mod_ssl placed into this directory.
-<p>
-<li><a name="ToC36"></a>
-    <a name="pem-to-der"></a>
-    <strong id="faq">
-How can I convert a certificate from PEM to DER format?
-</strong>&nbsp;&nbsp;
-    [<a href="#pem-to-der"><b>L</b></a>]
-    <p>
-    The default certificate format for SSLeay/OpenSSL is PEM, which actually
-    is Base64 encoded DER with header and footer lines. For some applications
-    (e.g. Microsoft Internet Explorer) you need the certificate in plain DER
-    format. You can convert a PEM file <code>cert.pem</code> into the
-    corresponding DER file <code>cert.der</code> with the following command:
-    <code><strong>$ openssl x509 -in cert.pem -out cert.der -outform DER</strong></code>
-<p>
-<li><a name="ToC37"></a>
-    <a name="verisign-getca"></a>
-    <strong id="faq">
-I try to install a Verisign certificate. Why can't I find neither the
-<code>getca</code> nor <code>getverisign</code> programs Verisign mentions?
-</strong>&nbsp;&nbsp;
-    [<a href="#verisign-getca"><b>L</b></a>]
-    <p>
-    This is because Verisign has never provided specific instructions
-    for Apache+mod_ssl. Rather they tell you what you should do
-    if you were using C2Net's Stronghold (a commercial Apache
-    based server with SSL support). The only thing you have to do
-    is to save the certificate into a file and give the name of
-    that file to the <code>SSLCertificateFile</code> directive.
-    Remember that you need to give the key file in as well (see
-    <code>SSLCertificateKeyFile</code> directive). For a better
-    CA-related overview on SSL certificate fiddling you can look at <a
-    href="http://www.thawte.com/certs/server/keygen/mod_ssl.html">
-    Thawte's mod_ssl instructions</a>.
-<p>
-<li><a name="ToC38"></a>
-    <a name="gid"></a>
-    <strong id="faq">
-Can I use the Server Gated Cryptography (SGC) facility (aka Verisign Global
-ID) also with mod_ssl?
-</strong>&nbsp;&nbsp;
-    [<a href="#gid"><b>L</b></a>]
-    <p>
-    Yes, mod_ssl since version 2.1 supports the SGC facility. You don't have
-    to configure anything special for this, just use a Global ID as your
-    server certificate. The <i>step up</i> of the clients are then
-    automatically handled by mod_ssl under run-time. For details please read
-    the <tt>README.GlobalID</tt> document in the mod_ssl distribution.
-<p>
-<li><a name="ToC39"></a>
-    <a name="gid"></a>
-    <strong id="faq">
-After I have installed my new Verisign Global ID server certificate, the
-browsers complain that they cannot verify the server certificate?
-</strong>&nbsp;&nbsp;
-    [<a href="#gid"><b>L</b></a>]
-    <p>
-    That is because Verisign uses an intermediate CA certificate between
-    the root CA certificate (which is installed in the browsers) and
-    the server certificate (which you installed in the server). You
-    should have received this additional CA certificate from Verisign.
-    If not, complain to them. Then configure this certificate with the
-    <code>SSLCertificateChainFile</code> directive in the server. This
-    makes sure the intermediate CA certificate is send to the browser
-    and this way fills the gap in the certificate chain.
-</ul>
-<p>
-<br>
-<h2><a name="ToC40">About SSL Protocol</a></h2>
-<ul>
-<p>
-<li><a name="ToC41"></a>
-    <a name="random-errors"></a>
-    <strong id="faq">
-Why do I get lots of random SSL protocol errors under heavy server load?
-</strong>&nbsp;&nbsp;
-    [<a href="#random-errors"><b>L</b></a>]
-    <p>
-    There can be a number of reasons for this, but the main one
-    is problems with the SSL session Cache specified by the
-    <tt>SSLSessionCache</tt> directive. The DBM session cache is most
-    likely the source of the problem, so trying the SHM session cache or
-    no cache at all may help.
-<p>
-<li><a name="ToC42"></a>
-    <a name="load"></a>
-    <strong id="faq">
-Why has my webserver a higher load now that I run SSL there?
-</strong>&nbsp;&nbsp;
-    [<a href="#load"><b>L</b></a>]
-    <p>
-    Because SSL uses strong cryptographic encryption and this needs a lot of
-    number crunching. And because when you request a webpage via HTTPS even
-    the images are transfered encrypted. So, when you have a lot of HTTPS
-    traffic the load increases.
-<p>
-<li><a name="ToC43"></a>
-    <a name="random"></a>
-    <strong id="faq">
-Often HTTPS connections to my server require up to 30 seconds for establishing
-the connection, although sometimes it works faster?
-</strong>&nbsp;&nbsp;
-    [<a href="#random"><b>L</b></a>]
-    <p>
-    Usually this is caused by using a <code>/dev/random</code> device for
-    <code>SSLRandomSeed</code> which is blocking in read(2) calls if not
-    enough entropy is available. Read more about this problem in the refernce
-    chapter under <code>SSLRandomSeed</code>.
-<p>
-<li><a name="ToC44"></a>
-    <a name="ciphers"></a>
-    <strong id="faq">
-What SSL Ciphers are supported by mod_ssl?
-</strong>&nbsp;&nbsp;
-    [<a href="#ciphers"><b>L</b></a>]
-    <p>
-    Usually just all SSL ciphers which are supported by the
-    version of OpenSSL in use (can depend on the way you built
-    OpenSSL). Typically this at least includes the following:
-    <p>
-    <ul>
-    <li>RC4 with MD5
-    <li>RC4 with MD5 (export version restricted to 40-bit key)
-    <li>RC2 with MD5
-    <li>RC2 with MD5 (export version restricted to 40-bit key)
-    <li>IDEA with MD5
-    <li>DES with MD5
-    <li>Triple-DES with MD5
-    </ul>
-    <p>
-    To determine the actual list of supported ciphers you can
-    run the following command:
-    <p>
-    <code><strong>$ openssl ciphers -v</strong></code><br>
-<p>
-<li><a name="ToC45"></a>
-    <a name="cipher-adh"></a>
-    <strong id="faq">
-I want to use Anonymous Diffie-Hellman (ADH) ciphers, but I always get ``no
-shared cipher'' errors?
-</strong>&nbsp;&nbsp;
-    [<a href="#cipher-adh"><b>L</b></a>]
-    <p>
-    In order to use Anonymous Diffie-Hellman (ADH) ciphers, it is not enough
-    to just put ``<code>ADH</code>'' into your <code>SSLCipherSuite</code>.
-    Additionally you have to build OpenSSL with
-    ``<code>-DSSL_ALLOW_ADH</code>''. Because per default OpenSSL does not
-    allow ADH ciphers for security reasons. So if you are actually enabling
-    these ciphers make sure you are informed about the side-effects.
-<p>
-<li><a name="ToC46"></a>
-    <a name="cipher-shared"></a>
-    <strong id="faq">
-I always just get a 'no shared ciphers' error if
-I try to connect to my freshly installed server?
-</strong>&nbsp;&nbsp;
-    [<a href="#cipher-shared"><b>L</b></a>]
-    <p>
-    Either you have messed up your <code>SSLCipherSuite</code>
-    directive (compare it with the pre-configured example in
-    <code>httpd.conf-dist</code>) or you have choosen the DSA/DH
-    algorithms instead of RSA under "<code>make certificate</code>"
-    and ignored or overseen the warnings. Because if you have choosen
-    DSA/DH, then your server no longer speaks RSA-based SSL ciphers
-    (at least not until you also configure an additional RSA-based
-    certificate/key pair). But current browsers like NS or IE only speak
-    RSA ciphers. The result is the "no shared ciphers" error. To fix
-    this, regenerate your server certificate/key pair and this time
-    choose the RSA algorithm.
-<p>
-<li><a name="ToC47"></a>
-    <a name="vhosts"></a>
-    <strong id="faq">
-Why can't I use SSL with name-based/non-IP-based virtual hosts?
-</strong>&nbsp;&nbsp;
-    [<a href="#vhosts"><b>L</b></a>]
-    <p>
-    The reason is very technical. Actually it's some sort of a chicken and
-    egg problem: The SSL protocol layer stays below the HTTP protocol layer
-    and encapsulates HTTP. When an SSL connection (HTTPS) is established
-    Apache/mod_ssl has to negotiate the SSL protocol parameters with the
-    client. For this mod_ssl has to consult the configuration of the virtual
-    server (for instance it has to look for the cipher suite, the server
-    certificate, etc.). But in order to dispatch to the correct virtual server
-    Apache has to know the <code>Host</code> HTTP header field. For this the
-    HTTP request header has to be read. This cannot be done before the SSL
-    handshake is finished. But the information is already needed at the SSL
-    handshake phase. Bingo!
-<p>
-<li><a name="ToC48"></a>
-    <a name="lock-icon"></a>
-    <strong id="faq">
-When I use Basic Authentication over HTTPS the lock icon in Netscape browsers
-still shows the unlocked state when the dialog pops up. Does this mean the
-username/password is still transmitted unencrypted?
-</strong>&nbsp;&nbsp;
-    [<a href="#lock-icon"><b>L</b></a>]
-    <p>
-    No, the username/password is already transmitted encrypted. The icon in
-    Netscape browsers is just not really synchronized with the SSL/TLS layer
-    (it toggles to the locked state when the first part of the actual webpage
-    data is transferred which is not quite correct) and this way confuses
-    people. The Basic Authentication facility is part of the HTTP layer and
-    this layer is above the SSL/TLS layer in HTTPS. And before any HTTP data
-    communication takes place in HTTPS the SSL/TLS layer has already done the
-    handshake phase and switched to encrypted communication. So, don't get
-    confused by this icon.
-<p>
-<li><a name="ToC49"></a>
-    <a name="io-ie"></a>
-    <strong id="faq">
-When I connect via HTTPS to an Apache+mod_ssl+OpenSSL server with Microsoft Internet
-Explorer (MSIE) I get various I/O errors. What is the reason?
-</strong>&nbsp;&nbsp;
-    [<a href="#io-ie"><b>L</b></a>]
-    <p>
-    The first reason is that the SSL implementation in some MSIE versions has
-    some subtle bugs related to the HTTP keep-alive facility and the SSL close
-    notify alerts on socket connection close. Additionally the interaction
-    between SSL and HTTP/1.1 features are problematic with some MSIE versions,
-    too. You've to work-around these problems by forcing
-    Apache+mod_ssl+OpenSSL to not use HTTP/1.1, keep-alive connections or
-    sending the SSL close notify messages to MSIE clients. This can be done by
-    using the following directive in your SSL-aware virtual host section:
-    <pre>
-    SetEnvIf User-Agent ".*MSIE.*" \
-             <b>nokeepalive ssl-unclean-shutdown \
-             downgrade-1.0 force-response-1.0</b></pre>
-    Additionally it is known some MSIE versions have also problems
-    with particular ciphers. Unfortunately one cannot workaround these
-    bugs only for those MSIE particular clients, because the ciphers
-    are already used in the SSL handshake phase. So a MSIE-specific
-    <tt>SetEnvIf</tt> doesn't work to solve these problems. Instead one
-    has to do more drastic adjustments to the global parameters. But
-    before you decide to do this, make sure your clients really have
-    problems. If not, do not do this, because it affects all(!) your
-    clients, i.e., also your non-MSIE clients.
-    <p>
-    The next problem is that 56bit export versions of MSIE 5.x browsers have a
-    broken SSLv3 implementation which badly interacts with OpenSSL versions
-    greater than 0.9.4. You can either accept this and force your clients to
-    upgrade their browsers, or you downgrade to OpenSSL 0.9.4 (hmmm), or you
-    can decide to workaround it by accepting the drawback that your workaround
-    will horribly affect also other browsers:
-    <pre>
-    SSLProtocol all <b>-SSLv3</b></pre>
-    This completely disables the SSLv3 protocol and lets those browsers work.
-    But usually this is an even less acceptable workaround. A more reasonable
-    workaround is to address the problem more closely and disable only the
-    ciphers which cause trouble.
-    <pre>
-    SSLCipherSuite ALL:!ADH:<b>!EXPORT56</b>:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP</pre>
-    This also lets the broken MSIE versions work, but only removes the
-    newer 56bit TLS ciphers.
-    <p>
-    Another problem with MSIE 5.x clients is that they refuse to connect to
-    URLs of the form <tt>https://12.34.56.78/</tt> (IP-addresses are used
-    instead of the hostname), if the server is using the Server Gated
-    Cryptography (SGC) facility. This can only be avoided by using the fully
-    qualified domain name (FQDN) of the website in hyperlinks instead, because
-    MSIE 5.x has an error in the way it handles the SGC negotiation.
-    <p>
-    And finally there are versions of MSIE which seem to require that
-    an SSL session can be reused (a totally non standard-conforming
-    behaviour, of course). Connection with those MSIE versions only work
-    if a SSL session cache is used. So, as a work-around, make sure you
-    are using a session cache (see <tt>SSLSessionCache</tt> directive).
-<p>
-<li><a name="ToC50"></a>
-    <a name="io-ns"></a>
-    <strong id="faq">
-When I connect via HTTPS to an Apache+mod_ssl server with Netscape Navigator I
-get I/O errors and the message "Netscape has encountered bad data from the
-server" What's the reason?
-</strong>&nbsp;&nbsp;
-    [<a href="#io-ns"><b>L</b></a>]
-    <p>
-    The problem usually is that you had created a new server certificate with
-    the same DN, but you had told your browser to accept forever the old
-    server certificate. Once you clear the entry in your browser for the old
-    certificate, everything usually will work fine. Netscape's SSL
-    implementation is correct, so when you encounter I/O errors with Netscape
-    Navigator it is most of the time caused by the configured certificates.
-</ul>
-<p>
-<br>
-<h2><a name="ToC51">About Support</a></h2>
-<ul>
-<p>
-<li><a name="ToC52"></a>
-    <a name="resources"></a>
-    <strong id="faq">
-What information resources are available in case of mod_ssl problems?
-</strong>&nbsp;&nbsp;
-    [<a href="#resources"><b>L</b></a>]
-    <p>
-The following information resources are available.
-In case of problems you should search here first.
-<p>
-<ol>
-<li><em>Answers in the User Manual's F.A.Q. List (this)</em><br>
-    <a href="http://httpd.apache.org/docs-2.0/ssl/ssl_faq.html">
-    http://httpd.apache.org/docs-2.0/ssl/ssl_faq.html</a><br>
-    First look inside the F.A.Q. (this text), perhaps your problem is such
-    popular that it was already answered a lot of times in the past.
-<p>
-<li><em>Postings from the modssl-users Support Mailing List</em>
-    <a href="http://www.modssl.org/support/">
-    http://www.modssl.org/support/</a><br>
-    Second search for your problem in one of the existing archives of the
-    modssl-users mailing list. Perhaps your problem popped up at least once for
-    another user, too.
-<p>
-<li><em>Problem Reports in the Bug Database</em>
-    <a href="http://www.modssl.org/support/bugdb/">
-    http://www.modssl.org/support/bugdb/</a><br>
-    Third look inside the mod_ssl Bug Database. Perhaps
-    someone else already has reported the problem.
-</ol>
-<p>
-<li><a name="ToC53"></a>
-    <a name="contact"></a>
-    <strong id="faq">
-What support contacts are available in case of mod_ssl problems?
-</strong>&nbsp;&nbsp;
-    [<a href="#contact"><b>L</b></a>]
-    <p>
-The following lists all support possibilities for mod_ssl, in order of
-preference, i.e. start in this order and do not pick the support possibility
-you just like most, please.
-<p>
-<ol>
-<li><em>Write a Problem Report into the Bug Database</em><br>
-    <a href="http://www.modssl.org/support/bugdb/">
-    http://www.modssl.org/support/bugdb/</a><br>
-    This is the preferred way of submitting your problem report, because this
-    way it gets filed into the bug database (it cannot be lost) <em>and</em>
-    send to the modssl-users mailing list (others see the current problems and
-    learn from answers).
-<p>
-<li><em>Write a Problem Report to the modssl-users Support Mailing List</em><br>
-    <a href="mailto:modssl-users@modssl.org">
-    modssl-users&nbsp;@&nbsp;modssl.org</a><br>
-    This is the second way of submitting your problem report. You have to
-    subscribe to the list first, but then you can easily discuss your problem
-    with both the author and the whole mod_ssl user community.
-<p>
-<li><em>Write a Problem Report to the author</em><br>
-    <a href="mailto:rse@engelschall.com">
-    rse&nbsp;@&nbsp;engelschall.com</a><br>
-    This is the last way of submitting your problem report. Please avoid this
-    in your own interest because the author is really a very busy men. Your
-    mail will always be filed to one of his various mail-folders and is
-    usually not processed as fast as a posting on modssl-users.
-</ol>
-<p>
-<li><a name="ToC54"></a>
-    <a name="report-details"></a>
-    <strong id="faq">
-What information and details I've to provide to
-the author when writing a bug report?
-</strong>&nbsp;&nbsp;
-    [<a href="#report-details"><b>L</b></a>]
-    <p>
-You have to at least always provide the following information:
-<p>
-<ul>
-<li><em>Apache, mod_ssl and OpenSSL version information</em><br>
-    The mod_ssl version you should really know. For instance, it's the version
-    number in the distribution tarball. The Apache version can be determined
-    by running ``<code>httpd -v</code>''. The OpenSSL version can be
-    determined by running ``<code>openssl version</code>''. Alternatively when
-    you have Lynx installed you can run the command ``<code>lynx -mime_header
-    http://localhost/ | grep Server</code>'' to determine all information in a
-    single step.
-<p>
-<li><em>The details on how you built and installed Apache+mod_ssl+OpenSSL</em><br>
-    For this you can provide a logfile of your terminal session which shows
-    the configuration and install steps. Alternatively you can at least
-    provide the author with the APACI `<code>configure</code>'' command line
-    you used (assuming you used APACI, of course).
-<p>
-<li><em>In case of core dumps please include a Backtrace</em><br>
-    In case your Apache+mod_ssl+OpenSSL should really dumped core please attach
-    a stack-frame ``backtrace'' (see the next question on how to get it).
-    Without this information the reason for your core dump cannot be found.
-    So you have to provide the backtrace, please.
-<p>
-<li><em>A detailed description of your problem</em><br>
-    Don't laugh, I'm totally serious. I already got a lot of problem reports
-    where the people not really said what's the actual problem is. So, in your
-    own interest (you want the problem be solved, don't you?) include as much
-    details as possible, please. But start with the essentials first, of
-    course.
-</ul>
-<p>
-<li><a name="ToC55"></a>
-    <a name="core-dumped"></a>
-    <strong id="faq">
-I got a core dump, can you help me?
-</strong>&nbsp;&nbsp;
-    [<a href="#core-dumped"><b>L</b></a>]
-    <p>
-    In general no, at least not unless you provide more details about the code
-    location where Apache dumped core. What is usually always required in
-    order to help you is a backtrace (see next question). Without this
-    information it is mostly impossible to find the problem and help you in
-    fixing it.
-<p>
-<li><a name="ToC56"></a>
-    <a name="report-backtrace"></a>
-    <strong id="faq">
-Ok, I got a core dump but how do I get a backtrace to find out the reason for it?
-</strong>&nbsp;&nbsp;
-    [<a href="#report-backtrace"><b>L</b></a>]
-    <p>
-Follow the following steps:
-<p>
-<ol>
-<li>Make sure you have debugging symbols available in at least
-    Apache and mod_ssl. On platforms where you use GCC/GDB you have to build
-    Apache+mod_ssl with ``<code>OPTIM="-g -ggdb3"</code>'' to achieve this. On
-    other platforms at least ``<code>OPTIM="-g"</code>'' is needed.
-<p>
-<li>Startup the server and try to produce the core-dump. For this you perhaps
-    want to use a directive like ``<code>CoreDumpDirectory /tmp</code>'' to
-    make sure that the core-dump file can be written. You then should get a
-    <code>/tmp/core</code> or <code>/tmp/httpd.core</code> file. When you
-    don't get this, try to run your server under an UID != 0 (root), because
-    most "current" kernels do not allow a process to dump core after it has
-    done a <code>setuid()</code> (unless it does an <code>exec()</code>) for
-    security reasons (there can be privileged information left over in
-    memory). Additionally you can run ``<code>/path/to/httpd -X</code>''
-    manually to force Apache to not fork.
-<p>
-<li>Analyze the core-dump. For this run ``<code>gdb /path/to/httpd
-    /tmp/httpd.core</code>'' or a similar command has to run. In GDB you then
-    just have to enter the ``<code>bt</code>'' command and, voila, you get the
-    backtrace. For other debuggers consult your local debugger manual. Send
-    this backtrace to the author.
-</ol>
-</ul>
-
-
-<p><!--#include virtual="footer.html" --> </p>
-  </body>
-</html>
diff --git a/docs/manual/ssl/ssl_faq.wml b/docs/manual/ssl/ssl_faq.wml
deleted file mode 100644
index 0b0b2e3..0000000
--- a/docs/manual/ssl/ssl_faq.wml
+++ /dev/null
@@ -1,1272 +0,0 @@
-
-#use "ssl_template.inc" title="F.A.Q." tag=faq num=6
-
-<page_prev name="HowTo"         url="ssl_howto.html">
-<page_next name="Glossary"      url="ssl_glossary.html">
-
-#use wml::std::toc style=nbsp
-
-<quotation width=200 author="Claude Levi-Strauss">
-``The wise man doesn't give the right answers,
-he poses the right questions.''
-</quotation>
-
-<p>
-<table cellspacing=0 cellpadding=0 border=0>
-<tr valign=bottom>
-<td>
-
-<big T>his chapter is a collection of frequently asked questions (FAQ) and
-corresponding answers following the popular USENET tradition. Most of these
-questions occured on the Newsgroup <a
-href="news:comp.infosystems.www.servers.unix">
-<code>comp.infosystems.www.servers.unix</code></a> or the mod_ssl Support
-Mailing List <a href="mailto:modssl-users@modssl.org">
-<code>modssl-users@modssl.org</code></a>. They are collected at this place
-to avoid answering the same questions over and over.
-
-<p>
-Please read this chapter at least once when installing mod_ssl or at least
-search for your problem here before submitting a problem report to the
-author.
-
-</td>
-<td>
-&nbsp;&nbsp;
-</td>
-<td>
-
-<div align=right>
-<table cellspacing=0 cellpadding=5 border=0 bgcolor="#ccccff" width=350>
-<tr>
-<td bgcolor="#333399">
-<font face="Arial,Helvetica" color="#ccccff">
-<b>Table Of Contents</b>
-</font>
-</td>
-</tr>
-<tr>
-<td>
-<font face="Arial,Helvetica" size=-1>
-<toc>
-</font>
-</td>
-</tr>
-</table>
-</div>
-
-</td>
-</tr>
-</table>
-
-#   container tag for layouting a question
-<define-tag faq endtag=required>
-<preserve ref>
-<preserve toc>
-<set-var %attributes>
-<p>
-<li><toc_h3 alt="<get-var toc>"></toc_h3>
-    <a name="<get-var ref>"></a>
-    <strong id="faq">%body</strong>\
-    &nbsp;&nbsp;
-    [<a href="http://www.modssl.org/docs/2.8/ssl_faq.html#<get-var ref>"><b>L</b></a>]
-    <p>
-<restore toc>
-<restore ref>
-</define-tag>
-
-
-<h2>About the module</h2>
-
-<ul>
-
-<faq ref="history" toc="What is the history of mod_ssl?">
-What is the history of mod_ssl?
-</faq>
-
-    The mod_ssl v1 package was initially created in April 1998 by <a
-    href="mailto:rse@engelschall.com">Ralf S.  Engelschall</a> via porting <a
-    href="mailto:ben@algroup.co.uk">Ben Laurie</a>'s <a
-    href="http://www.apache-ssl.org/">Apache-SSL</a> 1.17 source patches for
-    Apache 1.2.6 to Apache 1.3b6. Because of conflicts with Ben
-    Laurie's development cycle it then was re-assembled from scratch for
-    Apache 1.3.0 by merging the old mod_ssl 1.x with the newer Apache-SSL
-    1.18. From this point on mod_ssl lived its own life as mod_ssl v2. The
-    first publically released version was mod_ssl 2.0.0 from August 10th,
-    1998. As of this writing (August 1999) the current mod_ssl version is 2.4.0.
-    <p>
-    After one year of very active development with over 1000 working hours and
-    over 40 releases mod_ssl reached its current state.  The result is an
-    already very clean source base implementing a very rich functionality.
-    The code size increased by a factor of 4 to currently a total of over
-    10.000 lines of ANSI C consisting of approx. 70% code and 30% code
-    documentation. From the original Apache-SSL code currently approx. 5% is
-    remaining only.
-
-<faq ref="apssl-diff" toc="Apache-SSL vs. mod_ssl: differences?">
-What are the functional differences between mod_ssl and Apache-SSL, from where
-it is originally derived?
-</faq>
-
-    This neither can be answered in short (there were too many code changes)
-    nor can be answered at all by the author (there would immediately be flame
-    wars with no reasonable results at the end). But as you easily can guess
-    from the 5% of remaining Apache-SSL code, a lot of differences exists,
-    although user-visible backward compatibility exists for most things.
-    <p>
-    When you really want a detailed comparison you have to read the entries in
-    the large <code>CHANGES</code> file that is in the mod_ssl
-    distribution. Usually this is much too hard-core. So I recommend you to
-    either believe in the opinion and recommendations of other users (the
-    simplest approach) or do a comparison yourself (the most reasonable
-    approach). For the latter, grab distributions of mod_ssl (from <a
-    href="http://www.modssl.org/">http://www.modssl.org</a>) and Apache-SSL
-    (from <a href="http://www.apache-ssl.org/">http://www.apache-ssl.org</a>),
-    install both packages, read their documentation and try them out yourself.
-    Then choose the one which pleases you most.
-    <p>
-    A few final hints to help direct your comparison: quality of documentation
-    ("can you easily find answers and are they sufficient?"), quality of
-    source code ("is the source code reviewable so you can make sure there
-    aren't any trapdoors or inherent security risks because of bad programming
-    style?"), easy and clean installation ("can the SSL functionality easily
-    added to an Apache source tree without manual editing or patching?"),
-    clean integration into Apache ("is the SSL functionality encapsulated and
-    cleanly separated from the remaining Apache functionality?"), support for
-    Dynamic Shared Object (DSO) facility ("can the SSL functionality built as
-    a separate DSO for maximum flexibility?"), Win32 port ("is the SSL
-    functionality available also under the Win32 platform?"), amount and
-    quality of functionality ("is the provided SSL functionality and control
-    possibilities sufficient for your situation?"), quality of problem tracing
-    ("is it possible for you to easily trace down the problems via logfiles,
-    etc?"), etc. pp.
-
-<faq ref="apssl-diff" toc="mod_ssl vs. commercial alternatives?">
-What are the major differences between mod_ssl and
-the commercial alternatives like Raven or Stronghold?
-</faq>
-
-    In the past (until September 20th, 2000) the major difference was
-    the RSA license which one received (very cheaply in contrast to
-    a direct licensing from RSA DSI) with the commercial Apache SSL
-    products. On the other hand, one needed this license only in the US,
-    of course. So for non-US citizens this point was useless. But now
-    even for US citizens the situations changed because the RSA patent
-    expired on September 20th, 2000 and RSA DSI also placed the RSA
-    algorithm explicitly into the public domain.
-
-    <p>
-    Second, there is the point that one has guaranteed support from
-    the commercial vendors. On the other hand, if you monitored the
-    Open Source quality of mod_ssl and the support activities
-    found on <a href="mailto:modssl-users@modssl.org">
-    <code>modssl-users@modssl.org</code></a>, you could ask yourself
-    whether you are really convinced that you can get better support
-    from a commercial vendor.
-    
-    <p>
-    Third, people often think they would receive perhaps at least a
-    better technical SSL solution than mod_ssl from the commercial
-    vendors. But this is not really true, because all commercial
-    alternatives (Raven 1.4.x, Stronghold 3.x, RedHat SWS 2.x, etc.)
-    <i>are</i> actually based on mod_ssl and OpenSSL. The reason for
-    this common misunderstanding is mainly because some vendors make no
-    attempt to make it reasonably clear that their product is actually
-    mod_ssl based. So, do not think, just because the commercial
-    alternatives are usually more expensive, that you are also receiving
-    an alternative <i>technical</i> SSL solution. This is usually not
-    the case. Actually the vendor versions of Apache, mod_ssl and OpenSSL
-    often stay behind the latest free versions and perhaps this way still do not
-    include important bug and security fixes. On the other hand,
-    it sometimes occurs that a vendor version includes useful changes
-    which are not available through the official freely available
-    packages. But most vendors play fair and contribute back those
-    changes to the free software world, of course.
-    
-    <p>
-    So, in short: There are lots of commercial versions of the popular
-    Apache+mod_ssl+OpenSSL server combination available. Every user
-    should decide carefully whether they really need to buy a commercial
-    version or whether it would not be sufficient to directly use the
-    free and official versions of the Apache, mod_ssl and OpenSSL
-    packages.
-
-<faq ref="what-version" toc="mod_ssl/Apache versions?">
-How do I know which mod_ssl version is for which Apache version?
-</faq>
-
-    That's trivial: mod_ssl uses version strings of the syntax
-    <em>&lt;mod_ssl-version&gt;</em>-<em>&lt;apache-version&gt;</em>, for
-    instance <code>2.4.0-1.3.9</code>. This directly indicates that it's
-    mod_ssl version 2.4.0 for Apache version 1.3.9. And this also means you
-    <em>only</em> can apply this mod_ssl version to exactly this Apache
-    version (unless you use the <code>--force</code> option to mod_ssl's
-    <code>configure</code> command ;-).
-
-<faq ref="y2k" toc="mod_ssl and Year 2000?">
-Is mod_ssl Year 2000 compliant?
-</faq>
-
-    Yes, mod_ssl is Year 2000 compliant. 
-
-    <p>
-    Because first mod_ssl internally never stores years as two digits.
-    Instead it always uses the ANSI C &amp; POSIX numerical data type
-    <code>time_t</code> type, which on almost all Unix platforms at the moment
-    is a <code>signed long</code> (usually 32-bits) representing seconds since
-    epoch of January 1st, 1970, 00:00 UTC. This signed value overflows in
-    early January 2038 and not in the year 2000.  Second, date and time
-    presentations (for instance the variable ``<code>%{TIME_YEAR}</code>'')
-    are done with full year value instead of abbreviating to two digits.
-
-    <p>
-    Additionally according to a <a
-    href="http://www.apache.org/docs/misc/FAQ.html#year2000">Year 2000
-    statement</a> from the Apache Group, the Apache webserver is Year 2000
-    compliant, too.  But whether OpenSSL or the underlaying Operating System
-    (either a Unix or Win32 platform) is Year 2000 compliant is a different
-    question which cannot be answered here.
-
-<faq ref="wassenaar" toc="mod_ssl and Wassenaar Arrangement?">
-What about mod_ssl and the Wassenaar Arrangement?
-</faq>
-
-    First, let us explain what <i>Wassenaar</i> and its <i>Arrangement on
-    Export Controls for Conventional Arms and Dual-Use Goods and
-    Technologies</i> is: This is a international regime, established 1995, to
-    control trade in conventional arms and dual-use goods and technology. It
-    replaced the previous <i>CoCom</i> regime. 33 countries are signatories:
-    Argentina, Australia, Austria, Belgium, Bulgaria, Canada, Czech Republic,
-    Denmark, Finland, France, Germany, Greece, Hungary, Ireland, Italy, Japan,
-    Luxembourg, Netherlands, New Zealand, Norway, Poland, Portugal, Republic
-    of Korea, Romania, Russian Federation, Slovak Republic, Spain, Sweden,
-    Switzerland, Turkey, Ukraine, United Kingdom and United States. For more
-    details look at <a
-    href="http://www.wassenaar.org/">http://www.wassenaar.org/</a>.
-
-    <p>
-    In short: The aim of the Wassenaar Arrangement is to prevent the build up
-    of military capabilities that threaten regional and international security
-    and stability.  The Wassenaar Arrangement controls the export of
-    cryptography as a dual-use good, i.e., one that has both military and
-    civilian applications. However, the Wassenaar Arrangement also provides an
-    exemption from export controls for mass-market software and free software.
-
-    <p>
-    In the current Wassenaar ``<i>List of Dual Use Goods and Technologies And
-    Munitions</i>'', under ``<i>GENERAL SOFTWARE NOTE</i>'' (GSN) it says
-    ``<i>The Lists do not control "software" which is either: 1. [...] 2. "in
-    the public domain".</i>'' And under ``<i>DEFINITIONS OF TERMS USED IN
-    THESE LISTS</i>'' one can find the definition: ``<i>"In the public
-    domain": This means "technology" or "software" which has been made
-    available without restrictions upon its further dissemination.  N.B.
-    Copyright restrictions do not remove "technology" or "software" from being
-    "in the public domain".</i>''
-
-    <p>
-    So, both mod_ssl and OpenSSL are ``in the public domain'' for the purposes
-    of the Wassenaar Agreement and its ``<i>List of Dual Use Goods and
-    Technologies And Munitions List</i>''.
-
-    <p>
-    Additionally the Wassenaar Agreement itself has no direct consequence for
-    exporting cryptography software. What is actually allowed or forbidden to
-    be exported from the countries has still to be defined in the local laws
-    of each country.  And at least according to official press releases from
-    the German BMWi (see <a
-    href="http://www.bmwi.de/presse/1998/1208prm2.html">here</a>) and the
-    Switzerland Bawi (see <a href="http://jya.com/wass-ch.htm">here</a>) there
-    will be no forthcoming export restriction for free cryptography software
-    for their countries. Remember that mod_ssl is created in Germany and
-    distributed from Switzerland.
-
-    <p>
-    So, mod_ssl and OpenSSL are not affected by the Wassenaar Agreement.
-
-</ul>
-
-<p>
-<br>
-<h2>About Installation</h2>
-
-<ul>
-
-<faq ref="core-dbm" toc="Core dumps for HTTPS requests?">
-When I access my website the first time via HTTPS I get a core dump?
-</faq>
-
-    There can be a lot of reasons why a core dump can occur, of course.
-    Ranging from buggy third-party modules, over buggy vendor libraries up to
-    a buggy mod_ssl version. But the above situation is often caused by old or
-    broken vendor DBM libraries. To solve it either build mod_ssl with the
-    built-in SDBM library (specify <tt>--enable-rule=SSL_SDBM</tt> at the
-    APACI command line) or switch from ``<tt>SSLSessionCache dbm:</tt>'' to the
-    newer ``<tt>SSLSessionCache shm:</tt>'' variant (after you have rebuilt
-    Apache with MM, of course).
-
-<faq ref="core-php3" toc="Core dumps for Apache+mod_ssl+PHP3?">
-My Apache dumps core when I add both mod_ssl and PHP3?
-</faq>
-
-    Make sure you add mod_ssl to the Apache source tree first and then do a
-    fresh configuration and installation of PHP3. For SSL support EAPI patches
-    are required which have to change internal Apache structures.  PHP3 needs
-    to know about these in order to work correctly. Always make sure that
-    <tt>-DEAPI</tt> is contained in the compiler flags when PHP3 is build.
-
-<faq ref="dso-sym" toc="Undefined symbols on startup?">
-When I startup Apache I get errors about undefined symbols like ap_global_ctx?
-</faq>
-
-    This actually means you installed mod_ssl as a DSO, but without rebuilding
-    Apache with EAPI. Because EAPI is a requirement for mod_ssl, you need an
-    extra patched Apache (containing the EAPI patches) and you have to build
-    this Apache with EAPI enabled (explicitly specify
-    <tt>--enable-rule=EAPI</tt> at the APACI command line).
-
-<faq ref="mutex-perm" toc="Permission problem on SSLMutex">
-When I startup Apache I get permission errors related to SSLMutex?
-</faq>
-
-    When you receive entries like ``<code>mod_ssl: Child could not open
-    SSLMutex lockfile /opt/apache/logs/ssl_mutex.18332 (System error follows)
-    [...] System: Permission denied (errno: 13)</code>'' this is usually
-    caused by to restrictive permissions on the <i>parent</i> directories.
-    Make sure that all parent directories (here <code>/opt</code>,
-    <code>/opt/apache</code> and <code>/opt/apache/logs</code>) have the x-bit
-    set at least for the UID under which Apache's children are running (see
-    the <code>User</code> directive of Apache).
-
-<faq ref="mm" toc="Shared memory and process size?">
-When I use the MM library and the shared memory cache each process grows
-1.5MB according to `top' although I specified 512000 as the cache size?
-</faq>
-
-    The additional 1MB are caused by the global shared memory pool EAPI
-    allocates for all modules and which is not used by mod_ssl for
-    various reasons. So the actually allocated shared memory is always
-    1MB more than what you specify on <code>SSLSessionCache</code>.
-    But don't be confused by the display of `top': although is
-    indicates that <i>each</i> process grow, this is not reality, of
-    course. Instead the additional memory consumption is shared by
-    all processes, i.e. the 1.5MB are allocated only once per Apache
-    instance and not once per Apache server process.
-
-<faq ref="mmpath" toc="Shared memory and pathname?">
-Apache creates files in a directory declared by the internal
-EAPI_MM_CORE_PATH define. Is there a way to override the path using a
-configuration directive?
-</faq>
-
-    No, there is not configuration directive, because for technical
-    bootstrapping reasons, a directive not possible at all. Instead
-    use ``<code>CFLAGS='-DEAPI_MM_CORE_PATH="/path/to/wherever/"'
-    ./configure ...</code>'' when building Apache or use option
-    <b>-d</b> when starting <code>httpd</code>.
-
-<faq ref="entropy" toc="PRNG and not enough entropy?">
-When I fire up the server, mod_ssl stops with the error
-"Failed to generate temporary 512 bit RSA private key", why?
-And a "PRNG not seeded" error occurs if I try "make certificate".
-</faq>
-
-    Cryptographic software needs a source of unpredictable data
-    to work correctly. Many open source operating systems provide
-    a "randomness device" that serves this purpose (usually named
-    <code>/dev/random</code>). On other systems, applications have to
-    seed the OpenSSL Pseudo Random Number Generator (PRNG) manually with
-    appropriate data before generating keys or performing public key
-    encryption. As of version 0.9.5, the OpenSSL functions that need
-    randomness report an error if the PRNG has not been seeded with
-    at least 128 bits of randomness. So mod_ssl has to provide enough
-    entropy to the PRNG to work correctly. For this one has to use the
-    <code>SSLRandomSeed</code> directives (to solve the run-time problem)
-    and create a <code>$HOME/.rnd</code> file to make sure enough
-    entropy is available also for the "<code>make certificate</code>"
-    step (in case the "<code>make certificate</code>" procedure is not
-    able to gather enough entropy theirself by searching for system
-    files).
- 
-</ul>
-
-<p>
-<br>
-<h2>About Configuration</h2>
-
-<ul>
-
-<faq ref="https-parallel" toc="HTTP and HTTPS with a single server?">
-Is it possible to provide HTTP and HTTPS with a single server?</strong>
-</faq>
-
-    Yes, HTTP and HTTPS use different server ports, so there is no direct
-    conflict between them. Either run two separate server instances (one binds
-    to port 80, the other to port 443) or even use Apache's elegant virtual
-    hosting facility where you can easily create two virtual servers which
-    Apache dispatches: one responding to port 80 and speaking HTTP and one
-    responding to port 443 speaking HTTPS.
-
-<faq ref="https-port" toc="Where is the HTTPS port?">
-I know that HTTP is on port 80, but where is HTTPS?
-</faq>
-
-    You can run HTTPS on any port, but the standards specify port 443, which
-    is where any HTTPS compliant browser will look by default. You can force
-    your browser to look on a different port by specifying it in the URL like
-    this (for port 666): <code>https://secure.server.dom:666/</code>
-
-<faq ref="https-test" toc="How to test HTTPS manually?">
-How can I speak HTTPS manually for testing purposes?
-</faq>
-
-    While you usually just use
-    <p>
-    <code><b>$ telnet localhost 80</b></code><br>
-    <code><b>GET / HTTP/1.0</b></code>
-    <p>
-    for simple testing the HTTP protocol of Apache, it's not so easy for
-    HTTPS because of the SSL protocol between TCP and HTTP. But with the
-    help of OpenSSL's <code>s_client</code> command you can do a similar
-    check even for HTTPS:
-    <p>
-    <code><b>$ openssl s_client -connect localhost:443 -state -debug</b></code><br>
-    <code><b>GET / HTTP/1.0</b></code>
-    <p>
-    Before the actual HTTP response you receive detailed information about the
-    SSL handshake.  For a more general command line client which directly
-    understands both the HTTP and HTTPS scheme, can perform GET and POST
-    methods, can use a proxy, supports byte ranges, etc. you should have a
-    look at nifty <a href="http://curl.haxx.nu/">cURL</a>
-    tool.  With it you can directly check if your Apache is running fine on
-    Port 80 and 443 as following:
-    <p>
-    <code><b>$ curl http://localhost/</b></code><br>
-    <code><b>$ curl https://localhost/</b></code><br>
-
-<faq ref="hang" toc="Why does my connection hang?">
-Why does the connection hang when I connect to my SSL-aware Apache server?
-</faq>
-
-    Because you connected with HTTP to the HTTPS port, i.e. you used an URL of
-    the form ``<code>http://</code>'' instead of ``<code>https://</code>''.
-    This also happens the other way round when you connect via HTTPS to a HTTP
-    port, i.e. when you try to use ``<code>https://</code>'' on a server that
-    doesn't support SSL (on this port).  Make sure you are connecting to a
-    virtual server that supports SSL, which is probably the IP associated with
-    your hostname, not localhost (127.0.0.1).
-
-<faq ref="hang" toc="Why do I get connection refused?">
-Why do I get ``Connection Refused'' messages when trying to access my freshly
-installed Apache+mod_ssl server via HTTPS?
-</faq>
-
-    There can be various reasons. Some of the common mistakes is that people
-    start Apache with just ``<tt>apachectl start</tt>'' (or
-    ``<tt>httpd</tt>'') instead of ``<tt>apachectl startssl</tt>'' (or
-    ``<tt>httpd -DSSL</tt>''. Or you're configuration is not correct.  At
-    least make sure that your ``<tt>Listen</tt>'' directives match your
-    ``<tt>&lt;VirtualHost&gt;</tt>'' directives.  And if all fails, please do
-    yourself a favor and start over with the default configuration mod_ssl
-    provides you. 
-
-<faq ref="env-vars" toc="Why are the SSL_XXX variables missing?">
-In my CGI programs and SSI scripts the various documented
-<code>SSL_XXX</code> variables do not exists. Why?
-</faq>
-
-    Just make sure you have ``<code>SSLOptions +StdEnvVars</code>''
-    enabled for the context of your CGI/SSI requests.
-
-<faq ref="relative-links" toc="How to switch with relative hyperlinks?">
-How can I use relative hyperlinks to switch between HTTP and HTTPS?
-</faq>
-
-    Usually you have to use fully-qualified hyperlinks because
-    you have to change the URL scheme. But with the help of some URL
-    manipulations through mod_rewrite you can achieve the same effect while
-    you still can use relative URLs:
-
-    <pre>
-    RewriteEngine on
-    RewriteRule   ^/(.*):SSL$   https://%{SERVER_NAME}/$1 [R,L]
-    RewriteRule   ^/(.*):NOSSL$ http://%{SERVER_NAME}/$1  [R,L]
-    </pre>
-
-    This rewrite ruleset lets you use hyperlinks of the form
-    
-    <pre>
-    &lt;a href="document.html:SSL"&gt
-    </pre>
-
-</ul>
-
-<p>
-<br>
-<h2>About Certificates</h2>
-
-<ul>
-
-<faq ref="what-is" toc="What are Keys, CSRs and Certs?">
-What are RSA Private Keys, CSRs and Certificates?</strong>
-</faq>
-
-    The RSA private key file is a digital file that you can use to decrypt
-    messages sent to you. It has a public component which you distribute (via
-    your Certificate file) which allows people to encrypt those messages to
-    you. A Certificate Signing Request (CSR) is a digital file which contains
-    your public key and your name. You send the CSR to a Certifying Authority
-    (CA) to be converted into a real Certificate. A Certificate contains your
-    RSA public key, your name, the name of the CA, and is digitally signed by
-    your CA.  Browsers that know the CA can verify the signature on that
-    Certificate, thereby obtaining your RSA public key. That enables them to
-    send messages which only you can decrypt.
-    See the <a href="ssl_intro.html">Introduction</a> chapter for a general
-    description of the SSL protocol.
-
-<faq ref="startup" toc="Difference on startup?">
-Seems like there is a difference on startup between the original Apache and an SSL-aware Apache?
-</faq>
-
-    Yes, in general, starting Apache with a built-in mod_ssl is just like
-    starting an unencumbered Apache, except for the fact that when you have a
-    pass phrase on your SSL private key file. Then a startup dialog pops up
-    asking you to enter the pass phrase. 
-    <p>
-    To type in the pass phrase manually when starting the server can be
-    problematic, for instance when starting the server from the system boot
-    scripts.  As an alternative to this situation you can follow the steps
-    below under ``How can I get rid of the pass-phrase dialog at Apache
-    startup time?''.
-
-<faq ref="cert-dummy" toc="How to create a dummy cert?">
-How can I create a dummy SSL server Certificate for testing purposes?
-</faq>
-
-    A Certificate does not have to be signed by a public CA. You can use your
-    private key to sign the Certificate which contains your public key. You
-    can install this Certificate into your server, and people using Netscape
-    Navigator (not MSIE) will be able to connect after clicking OK to a
-    warning dialogue. You can get MSIE to work, and your customers can
-    eliminate the dialogue, by installing that Certificate manually into their
-    browsers.
-    <p>
-    Just use the ``<code>make certificate</code>'' command at the top-level
-    directory of the Apache source tree right before installing Apache via
-    ``<code>make install</code>''. This creates a self-signed SSL Certificate
-    which expires after 30 days and isn't encrypted (which means you don't
-    need to enter a pass-phrase at Apache startup time).
-    <p>
-    BUT REMEMBER: YOU REALLY HAVE TO CREATE A REAL CERTIFICATE FOR THE LONG
-    RUN! HOW THIS IS DONE IS DESCRIBED IN THE NEXT ANSWER.
-
-<faq ref="cert-real" toc="How to create a real cert?">
-Ok, I've got my server installed and want to create a real SSL
-server Certificate for it. How do I do it?
-</faq>
-
-    Here is a step-by-step description:
-    <p>
-    <ol>
-    <li>Make sure OpenSSL is really installed and in your <code>PATH</code>.
-        But some commands even work ok when you just run the
-        ``<code>openssl</code>'' program from within the OpenSSL source tree as
-        ``<code>./apps/openssl</code>''.
-    <p>
-    <li>Create a RSA private key for your Apache server
-       (will be Triple-DES encrypted and PEM formatted):
-
-       <p>
-       <code><strong>$ openssl genrsa -des3 -out server.key 1024</strong></code>
-
-       <p>
-       Please backup this <code>server.key</code> file and remember the
-       pass-phrase you had to enter at a secure location.
-       You can see the details of this RSA private key via the command:
-
-       <p>
-       <code><strong>$ openssl rsa -noout -text -in server.key</strong></code>
-
-       <p>
-       And you could create a decrypted PEM version (not recommended) 
-       of this RSA private key via:
-
-       <p>
-       <code><strong>$ openssl rsa -in server.key -out server.key.unsecure</strong></code>
-
-    <p>
-    <li>Create a Certificate Signing Request (CSR) with the server RSA private
-       key (output will be PEM formatted):
-      
-       <p>
-       <code><strong>$ openssl req -new -key server.key -out server.csr</strong></code>
-
-       <p>
-       Make sure you enter the FQDN ("Fully Qualified Domain Name") of the
-       server when OpenSSL prompts you for the "CommonName", i.e.  when you
-       generate a CSR for a website which will be later accessed via
-       <code>https://www.foo.dom/</code>, enter "www.foo.dom" here.
-       You can see the details of this CSR via the command
-
-       <p>
-       <code><strong>$ openssl req -noout -text -in server.csr</strong></code>
-
-    <p>
-    <li>You now have to send this Certificate Signing Request (CSR) to
-       a Certifying Authority (CA) for signing. The result is then a real
-       Certificate which can be used for Apache. Here you have two options:
-
-       First you can let the CSR sign by a commercial CA like Verisign or
-       Thawte. Then you usually have to post the CSR into a web form, pay for
-       the signing and await the signed Certificate you then can store into a
-       server.crt file. For more information about commercial CAs have a look
-       at the following locations:
-
-       <p>
-       <ul>
-       <li>  Verisign<br>
-             <a href="http://digitalid.verisign.com/server/apacheNotice.htm">
-             http://digitalid.verisign.com/server/apacheNotice.htm
-             </a>
-       <li>  Thawte Consulting<br>
-             <a href="http://www.thawte.com/certs/server/request.html">
-             http://www.thawte.com/certs/server/request.html 
-             </a>
-       <li>  CertiSign Certificadora Digital Ltda.<br>
-             <a href="http://www.certisign.com.br">
-             http://www.certisign.com.br 
-             </a>
-       <li>  IKS GmbH<br>
-             <a href="http://www.iks-jena.de/produkte/ca/">
-             http://www.iks-jena.de/produkte/ca/ 
-             </a>
-       <li>  Uptime Commerce Ltd.<br>
-             <a href="http://www.uptimecommerce.com">
-             http://www.uptimecommerce.com 
-             </a>
-       <li>  BelSign NV/SA<br>
-             <a href="http://www.belsign.be">
-             http://www.belsign.be
-             </a>
-       </ul>
-
-       <p>
-       Second you can use your own CA and now have to sign the CSR yourself by
-       this CA. Read the next answer in this FAQ on how to sign a CSR with
-       your CA yourself.
-
-       You can see the details of the received Certificate via the command:
-
-       <p>
-       <code><strong>$ openssl x509 -noout -text -in server.crt</strong></code>
-
-    <p>
-    <li>Now you have two files: <code>server.key</code> and
-    <code>server.crt</code>. These now can be used as following inside your
-    Apache's <code>httpd.conf</code> file:
-
-       <pre>
-       SSLCertificateFile    /path/to/this/server.crt
-       SSLCertificateKeyFile /path/to/this/server.key
-       </pre>
-
-       The <code>server.csr</code> file is no longer needed.
-    </ol>
-
-<faq ref="cert-ownca" toc="How to create my own CA?">
-How can I create and use my own Certificate Authority (CA)?
-</faq>
-
-    The short answer is to use the <code>CA.sh</code> or <code>CA.pl</code>
-    script provided by OpenSSL. The long and manual answer is this:
-
-    <p>
-    <ol>
-    <li>Create a RSA private key for your CA 
-       (will be Triple-DES encrypted and PEM formatted):
-
-       <p>
-       <code><strong>$ openssl genrsa -des3 -out ca.key 1024</strong></code>
-
-       <p>
-       Please backup this <code>ca.key</code> file and remember the
-       pass-phrase you currently entered at a secure location.
-       You can see the details of this RSA private key via the command
-
-       <p>
-       <code><strong>$ openssl rsa -noout -text -in ca.key</strong></code>
-
-       <p>
-       And you can create a decrypted PEM version (not recommended) of this
-       private key via:
-
-       <p>
-       <code><strong>$ openssl rsa -in ca.key -out ca.key.unsecure</strong></code>
-
-    <p>
-    <li>Create a self-signed CA Certificate (X509 structure) 
-       with the RSA key of the CA (output will be PEM formatted):
-       
-       <p>
-       <code><strong>$ openssl req -new -x509 -days 365 -key ca.key -out ca.crt</strong></code>
-
-       <p>
-       You can see the details of this Certificate via the command:
-
-       <p>
-       <code><strong>$ openssl x509 -noout -text -in ca.crt</strong></code>
-
-    <p>
-    <li>Prepare a script for signing which is needed because
-       the ``<code>openssl ca</code>'' command has some strange requirements
-       and the default OpenSSL config doesn't allow one easily to use
-       ``<code>openssl ca</code>'' directly. So a script named
-       <code>sign.sh</code> is distributed with the mod_ssl distribution
-       (subdir <code>pkg.contrib/</code>). Use this script for signing.
-
-    <p>
-    <li>Now you can use this CA to sign server CSR's in order to create real
-       SSL Certificates for use inside an Apache webserver (assuming
-       you already have a <code>server.csr</code> at hand):
-
-       <p>
-       <code><strong>$ ./sign.sh server.csr</strong></code>
-
-       <p>
-       This signs the server CSR and results in a <code>server.crt</code> file.
-    </ol>
-
-<faq ref="change-passphrase" toc="How to change a pass phrase?">
-How can I change the pass-phrase on my private key file?
-</faq>
-
-    You simply have to read it with the old pass-phrase and write it again
-    by specifying the new pass-phrase. You can accomplish this with the following
-    commands:
-
-    <p>
-    <code><strong>$ openssl rsa -des3 -in server.key -out server.key.new</strong></code><br>
-    <code><strong>$ mv server.key.new server.key</strong></code><br>
-
-    <p>
-    Here you're asked two times for a PEM pass-phrase. At the first
-    prompt enter the old pass-phrase and at the second prompt
-    enter the new pass-phrase.
-
-<faq ref="remove-passphrase" toc="How to remove a pass phrase?">
-How can I get rid of the pass-phrase dialog at Apache startup time?
-</faq>
-
-    The reason why this dialog pops up at startup and every re-start
-    is that the RSA private key inside your server.key file is stored in
-    encrypted format for security reasons. The pass-phrase is needed to be
-    able to read and parse this file. When you can be sure that your server is
-    secure enough you perform two steps:
-
-    <p>
-    <ol>
-    <li>Remove the encryption from the RSA private key (while
-       preserving the original file):
-
-       <p>
-       <code><strong>$ cp server.key server.key.org</strong></code><br>
-       <code><strong>$ openssl rsa -in server.key.org -out server.key</strong></code>
-
-    <p>
-    <li>Make sure the server.key file is now only readable by root:
-
-       <p>
-       <code><strong>$ chmod 400 server.key</strong></code>
-    </ol>
-
-    <p>
-    Now <code>server.key</code> will contain an unencrypted copy of the key.
-    If you point your server at this file it will not prompt you for a
-    pass-phrase.  HOWEVER, if anyone gets this key they will be able to
-    impersonate you on the net.  PLEASE make sure that the permissions on that
-    file are really such that only root or the web server user can read it
-    (preferably get your web server to start as root but run as another
-    server, and have the key readable only by root).
-
-    <p>
-    As an alternative approach you can use the ``<code>SSLPassPhraseDialog
-    exec:/path/to/program</code>'' facility. But keep in mind that this is
-    neither more nor less secure, of course.
-
-<faq ref="verify-key" toc="How to verify a key/cert pair?">
-How do I verify that a private key matches its Certificate?
-</faq>
-
-    The private key contains a series of numbers. Two of those numbers form
-    the "public key", the others are part of your "private key".  The "public
-    key" bits are also embedded in your Certificate (we get them from your
-    CSR).  To check that the public key in your cert matches the public
-    portion of your private key, you need to view the cert and the key and
-    compare the numbers.  To view the Certificate and the key run the
-    commands: 
-
-    <p>
-    <code><strong>$ openssl x509 -noout -text -in server.crt</strong></code><br>
-    <code><strong>$ openssl rsa  -noout -text -in server.key</strong></code>
-     
-    <p>
-    The `modulus' and the `public exponent' portions in the key and the
-    Certificate must match.  But since the public exponent is usually 65537
-    and it's bothering comparing long modulus you can use the following
-    approach:
-
-    <p>
-    <code><strong>$ openssl x509 -noout -modulus -in server.crt | openssl md5</strong></code><br>
-    <code><strong>$ openssl rsa  -noout -modulus -in server.key | openssl md5</strong></code>
-
-    <p>
-    And then compare these really shorter numbers. With overwhelming
-    probability they will differ if the keys are different. BTW, if I want to
-    check to which key or certificate a particular CSR belongs you can compute
-
-    <p>
-    <code><strong>$ openssl req -noout -modulus -in server.csr | openssl md5</strong></code>
-
-<faq ref="keysize1" toc="Bad Certificate Error?">
-What does it mean when my connections fail with an "alert bad certificate"
-error?
-</faq>
-
-    Usually when you see errors like ``<tt>OpenSSL: error:14094412: SSL
-    routines:SSL3_READ_BYTES:sslv3 alert bad certificate</tt>'' in the SSL
-    logfile, this means that the browser was unable to handle the server
-    certificate/private-key which perhaps contain a RSA-key not equal to 1024
-    bits. For instance Netscape Navigator 3.x is one of those browsers.
-
-<faq ref="keysize2" toc="Why does a 2048-bit key not work?">
-Why does my 2048-bit private key not work?
-</faq>
-
-    The private key sizes for SSL must be either 512 or 1024 for compatibility
-    with certain web browsers. A keysize of 1024 bits is recommended because
-    keys larger than 1024 bits are incompatible with some versions of Netscape
-    Navigator and Microsoft Internet Explorer, and with other browsers that
-    use RSA's BSAFE cryptography toolkit. 
-
-<faq ref="hash-symlinks" toc="Why is client auth broken?">
-Why is client authentication broken after upgrading from
-SSLeay version 0.8 to 0.9?
-</faq>
-
-    The CA certificates under the path you configured with
-    <code>SSLCACertificatePath</code> are found by SSLeay through hash
-    symlinks. These hash values are generated by the `<code>openssl x509 -noout
-    -hash</code>' command. But the algorithm used to calculate the hash for a
-    certificate has changed between SSLeay 0.8 and 0.9. So you have to remove
-    all old hash symlinks and re-create new ones after upgrading. Use the
-    <code>Makefile</code> mod_ssl placed into this directory.
-
-<faq ref="pem-to-der" toc="How to convert from PEM to DER?">
-How can I convert a certificate from PEM to DER format?
-</faq>
-
-    The default certificate format for SSLeay/OpenSSL is PEM, which actually
-    is Base64 encoded DER with header and footer lines.  For some applications
-    (e.g. Microsoft Internet Explorer) you need the certificate in plain DER
-    format. You can convert a PEM file <code>cert.pem</code> into the
-    corresponding DER file <code>cert.der</code> with the following command:
-
-    <code><strong>$ openssl x509 -in cert.pem -out cert.der -outform DER</strong></code>
-
-<faq ref="verisign-getca" toc="Verisign and the magic getca program?">
-I try to install a Verisign certificate. Why can't I find neither the
-<code>getca</code> nor <code>getverisign</code> programs Verisign mentions?
-</faq>
-
-    This is because Verisign has never provided specific instructions
-    for Apache+mod_ssl. Rather they tell you what you should do
-    if you were using C2Net's Stronghold (a commercial Apache
-    based server with SSL support). The only thing you have to do
-    is to save the certificate into a file and give the name of
-    that file to the <code>SSLCertificateFile</code> directive.
-    Remember that you need to give the key file in as well (see
-    <code>SSLCertificateKeyFile</code> directive). For a better
-    CA-related overview on SSL certificate fiddling you can look at <a
-    href="http://www.thawte.com/certs/server/keygen/mod_ssl.html">
-    Thawte's mod_ssl instructions</a>.
-
-<faq ref="gid" toc="Global IDs or SGC?">
-Can I use the Server Gated Cryptography (SGC) facility (aka Verisign Global
-ID) also with mod_ssl?
-</faq>
-
-    Yes, mod_ssl since version 2.1 supports the SGC facility.  You don't have
-    to configure anything special for this, just use a Global ID as your
-    server certificate. The <i>step up</i> of the clients are then
-    automatically handled by mod_ssl under run-time. For details please read
-    the <tt>README.GlobalID</tt> document in the mod_ssl distribution.
-
-<faq ref="gid" toc="Global IDs and Cert Chain?">
-After I have installed my new Verisign Global ID server certificate, the
-browsers complain that they cannot verify the server certificate?
-</faq>
-
-    That is because Verisign uses an intermediate CA certificate between
-    the root CA certificate (which is installed in the browsers) and
-    the server certificate (which you installed in the server). You
-    should have received this additional CA certificate from Verisign.
-    If not, complain to them. Then configure this certificate with the
-    <code>SSLCertificateChainFile</code> directive in the server. This
-    makes sure the intermediate CA certificate is send to the browser
-    and this way fills the gap in the certificate chain.
-
-</ul>
-
-<p>
-<br>
-<h2>About SSL Protocol</h2>
-
-<ul>
-
-<faq ref="random-errors" toc="Random SSL errors under heavy load?">
-Why do I get lots of random SSL protocol errors under heavy server load?
-</faq>
-
-    There can be a number of reasons for this, but the main one
-    is problems with the SSL session Cache specified by the
-    <tt>SSLSessionCache</tt> directive. The DBM session cache is most
-    likely the source of the problem, so trying the SHM session cache or
-    no cache at all may help.
-
-<faq ref="load" toc="Why has the server a higher load?">
-Why has my webserver a higher load now that I run SSL there?
-</faq>
-
-    Because SSL uses strong cryptographic encryption and this needs a lot of
-    number crunching. And because when you request a webpage via HTTPS even
-    the images are transfered encrypted. So, when you have a lot of HTTPS
-    traffic the load increases.
-
-<faq ref="random" toc="Why are connections horribly slow?">
-Often HTTPS connections to my server require up to 30 seconds for establishing
-the connection, although sometimes it works faster?
-</faq>
-
-    Usually this is caused by using a <code>/dev/random</code> device for
-    <code>SSLRandomSeed</code> which is blocking in read(2) calls if not
-    enough entropy is available. Read more about this problem in the refernce
-    chapter under <code>SSLRandomSeed</code>.
-
-<faq ref="ciphers" toc="Which ciphers are supported?">
-What SSL Ciphers are supported by mod_ssl?
-</faq>
-
-    Usually just all SSL ciphers which are supported by the
-    version of OpenSSL in use (can depend on the way you built
-    OpenSSL). Typically this at least includes the following:
-    <p>
-    <ul>
-    <li>RC4 with MD5 
-    <li>RC4 with MD5 (export version restricted to 40-bit key) 
-    <li>RC2 with MD5 
-    <li>RC2 with MD5 (export version restricted to 40-bit key) 
-    <li>IDEA with MD5 
-    <li>DES with MD5 
-    <li>Triple-DES with MD5 
-    </ul>
-    <p>
-    To determine the actual list of supported ciphers you can
-    run the following command:
-    <p>
-    <code><strong>$ openssl ciphers -v</strong></code><br>
-
-<faq ref="cipher-adh" toc="How to use Anonymous-DH ciphers">
-I want to use Anonymous Diffie-Hellman (ADH) ciphers, but I always get ``no
-shared cipher'' errors?
-</faq>
-
-    In order to use Anonymous Diffie-Hellman (ADH) ciphers, it is not enough
-    to just put ``<code>ADH</code>'' into your <code>SSLCipherSuite</code>.
-    Additionally you have to build OpenSSL with
-    ``<code>-DSSL_ALLOW_ADH</code>''. Because per default OpenSSL does not
-    allow ADH ciphers for security reasons. So if you are actually enabling
-    these ciphers make sure you are informed about the side-effects.
-
-<faq ref="cipher-shared" toc="Why do I get 'no shared ciphers'?">
-I always just get a 'no shared ciphers' error if
-I try to connect to my freshly installed server?
-</faq>
-  
-    Either you have messed up your <code>SSLCipherSuite</code>
-    directive (compare it with the pre-configured example in
-    <code>httpd.conf-dist</code>) or you have choosen the DSA/DH
-    algorithms instead of RSA under "<code>make certificate</code>"
-    and ignored or overseen the warnings. Because if you have choosen
-    DSA/DH, then your server no longer speaks RSA-based SSL ciphers
-    (at least not until you also configure an additional RSA-based
-    certificate/key pair). But current browsers like NS or IE only speak
-    RSA ciphers. The result is the "no shared ciphers" error. To fix
-    this, regenerate your server certificate/key pair and this time
-    choose the RSA algorithm.
-
-<faq ref="vhosts" toc="HTTPS and name-based vhosts">
-Why can't I use SSL with name-based/non-IP-based virtual hosts?
-</faq>
-
-    The reason is very technical. Actually it's some sort of a chicken and
-    egg problem: The SSL protocol layer stays below the HTTP protocol layer
-    and encapsulates HTTP. When an SSL connection (HTTPS) is established
-    Apache/mod_ssl has to negotiate the SSL protocol parameters with the
-    client. For this mod_ssl has to consult the configuration of the virtual
-    server (for instance it has to look for the cipher suite, the server
-    certificate, etc.). But in order to dispatch to the correct virtual server
-    Apache has to know the <code>Host</code> HTTP header field.  For this the
-    HTTP request header has to be read. This cannot be done before the SSL
-    handshake is finished. But the information is already needed at the SSL
-    handshake phase. Bingo!
-
-<faq ref="lock-icon" toc="The lock icon in Netscape locks very late">
-When I use Basic Authentication over HTTPS the lock icon in Netscape browsers
-still show the unlocked state when the dialog pops up. Does this mean the
-username/password is still transmitted unencrypted?
-</faq>
-
-    No, the username/password is already transmitted encrypted.  The icon in
-    Netscape browsers is just not really synchronized with the SSL/TLS layer
-    (it toggles to the locked state when the first part of the actual webpage
-    data is transferred which is not quite correct) and this way confuses
-    people. The Basic Authentication facility is part of the HTTP layer and
-    this layer is above the SSL/TLS layer in HTTPS.  And before any HTTP data
-    communication takes place in HTTPS the SSL/TLS layer has already done the
-    handshake phase and switched to encrypted communication. So, don't get
-    confused by this icon.
-
-<faq ref="io-ie" toc="Why do I get I/O errors with MSIE clients?">
-When I connect via HTTPS to an Apache+mod_ssl+OpenSSL server with Microsoft Internet
-Explorer (MSIE) I get various I/O errors. What is the reason?
-</faq>
-
-    The first reason is that the SSL implementation in some MSIE versions has
-    some subtle bugs related to the HTTP keep-alive facility and the SSL close
-    notify alerts on socket connection close. Additionally the interaction
-    between SSL and HTTP/1.1 features are problematic with some MSIE versions,
-    too. You've to work-around these problems by forcing
-    Apache+mod_ssl+OpenSSL to not use HTTP/1.1, keep-alive connections or
-    sending the SSL close notify messages to MSIE clients. This can be done by
-    using the following directive in your SSL-aware virtual host section:
-
-    <pre>
-    SetEnvIf User-Agent ".*MSIE.*" \\
-             <b>nokeepalive ssl-unclean-shutdown \\
-             downgrade-1.0 force-response-1.0</b>\
-    </pre>
-
-    Additionally it is known some MSIE versions have also problems
-    with particular ciphers. Unfortunately one cannot workaround these
-    bugs only for those MSIE particular clients, because the ciphers
-    are already used in the SSL handshake phase. So a MSIE-specific
-    <tt>SetEnvIf</tt> doesn't work to solve these problems. Instead one
-    has to do more drastic adjustments to the global parameters. But
-    before you decide to do this, make sure your clients really have
-    problems. If not, do not do this, because it affects all(!) your
-    clients, i.e., also your non-MSIE clients.
-    
-    <p>
-    The next problem is that 56bit export versions of MSIE 5.x browsers have a
-    broken SSLv3 implementation which badly interacts with OpenSSL versions
-    greater than 0.9.4. You can either accept this and force your clients to
-    upgrade their browsers, or you downgrade to OpenSSL 0.9.4 (hmmm), or you
-    can decide to workaround it by accepting the drawback that your workaround
-    will horribly affect also other browsers:
-    
-    <pre>
-    SSLProtocol all <b>-SSLv3</b>\
-    </pre>
-
-    This completely disables the SSLv3 protocol and lets those browsers work.
-    But usually this is an even less acceptable workaround. A more reasonable
-    workaround is to address the problem more closely and disable only the
-    ciphers which cause trouble.
-    
-    <pre>
-    SSLCipherSuite ALL:!ADH:<b>!EXPORT56</b>:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP\
-    </pre>
-
-    This also lets the broken MSIE versions work, but only removes the
-    newer 56bit TLS ciphers.
-    
-    <p>
-    Another problem with MSIE 5.x clients is that they refuse to connect to
-    URLs of the form <tt>https://12.34.56.78/</tt> (IP-addresses are used
-    instead of the hostname), if the server is using the Server Gated
-    Cryptography (SGC) facility. This can only be avoided by using the fully
-    qualified domain name (FQDN) of the website in hyperlinks instead, because
-    MSIE 5.x has an error in the way it handles the SGC negotiation.
-
-    <p>
-    And finally there are versions of MSIE which seem to require that
-    an SSL session can be reused (a totally non standard-conforming
-    behaviour, of course). Connection with those MSIE versions only work
-    if a SSL session cache is used. So, as a work-around, make sure you
-    are using a session cache (see <tt>SSLSessionCache</tt> directive).
-
-<faq ref="io-ns" toc="Why do I get I/O errors with NS clients?">
-When I connect via HTTPS to an Apache+mod_ssl server with Netscape Navigator I
-get I/O errors and the message "Netscape has encountered bad data from the
-server" What's the reason?
-</faq>
-
-    The problem usually is that you had created a new server certificate with
-    the same DN, but you had told your browser to accept forever the old
-    server certificate. Once you clear the entry in your browser for the old
-    certificate, everything usually will work fine. Netscape's SSL
-    implementation is correct, so when you encounter I/O errors with Netscape
-    Navigator it is most of the time caused by the configured certificates.
-
-</ul>
-
-<p>
-<br>
-<h2>About Support</h2>
-
-<ul>
-
-<faq ref="resources" toc="Resources in case of problems?">
-What information resources are available in case of mod_ssl problems?
-</faq>
-
-The following information resources are available.
-In case of problems you should search here first.
-
-<p>
-<ol>
-<li><em>Answers in the User Manual's F.A.Q. List (this)</em><br>
-    <a href="http://www.modssl.org/docs/2.8/ssl_faq.html">
-    http://www.modssl.org/docs/2.8/ssl_faq.html</a><br>
-    First look inside the F.A.Q. (this text), perhaps your problem is such
-    popular that it was already answered a lot of times in the past.
-<p>
-<li><em>Postings from the modssl-users Support Mailing List</em>
-    <a href="http://www.modssl.org/support/">
-    http://www.modssl.org/support/</a><br>
-    Second search for your problem in one of the existing archives of the
-    modssl-users mailing list.  Perhaps your problem popped up at least once for
-    another user, too.
-<p>
-<li><em>Problem Reports in the Bug Database</em>
-    <a href="http://www.modssl.org/support/bugdb/">
-    http://www.modssl.org/support/bugdb/</a><br>
-    Third look inside the mod_ssl Bug Database. Perhaps
-    someone else already has reported the problem.
-</ol>
-
-<faq ref="contact" toc="Support in case of problems?">
-What support contacts are available in case of mod_ssl problems?
-</faq>
-
-The following lists all support possibilities for mod_ssl, in order of
-preference, i.e. start in this order and do not pick the support possibility
-you just like most, please. 
-
-<p>
-<ol>
-<li><em>Write a Problem Report into the Bug Database</em><br>
-    <a href="http://www.modssl.org/support/bugdb/">
-    http://www.modssl.org/support/bugdb/</a><br>
-    This is the preferred way of submitting your problem report, because this
-    way it gets filed into the bug database (it cannot be lost) <em>and</em>
-    send to the modssl-users mailing list (others see the current problems and
-    learn from answers).
-<p>
-<li><em>Write a Problem Report to the modssl-users Support Mailing List</em><br>
-    <a href="mailto:modssl-users@modssl.org">
-    modssl-users&nbsp;@&nbsp;modssl.org</a><br>
-    This is the second way of submitting your problem report. You have to
-    subscribe to the list first, but then you can easily discuss your problem
-    with both the author and the whole mod_ssl user community.
-<p>
-<li><em>Write a Problem Report to the author</em><br>
-    <a href="mailto:rse@engelschall.com">
-    rse&nbsp;@&nbsp;engelschall.com</a><br>
-    This is the last way of submitting your problem report.  Please avoid this
-    in your own interest because the author is really a very busy men. Your
-    mail will always be filed to one of his various mail-folders and is
-    usually not processed as fast as a posting on modssl-users.
-</ol>
-
-<faq ref="report-details" toc="How to write a problem report?">
-What information and details I've to provide to
-the author when writing a bug report?
-</faq>
-
-You have to at least always provide the following information:
-
-<p>
-<ul>
-<li><em>Apache, mod_ssl and OpenSSL version information</em><br>
-    The mod_ssl version you should really know. For instance, it's the version
-    number in the distribution tarball.  The Apache version can be determined
-    by running ``<code>httpd -v</code>''.  The OpenSSL version can be
-    determined by running ``<code>openssl version</code>''.  Alternatively when
-    you have Lynx installed you can run the command ``<code>lynx -mime_header
-    http://localhost/ | grep Server</code>'' to determine all information in a
-    single step.
-<p>
-<li><em>The details on how you built and installed Apache+mod_ssl+OpenSSL</em><br>
-    For this you can provide a logfile of your terminal session which shows
-    the configuration and install steps. Alternatively you can at least
-    provide the author with the APACI `<code>configure</code>'' command line
-    you used (assuming you used APACI, of course).
-
-<p>
-<li><em>In case of core dumps please include a Backtrace</em><br>
-    In case your Apache+mod_ssl+OpenSSL should really dumped core please attach
-    a stack-frame ``backtrace'' (see the next question on how to get it).
-    Without this information the reason for your core dump cannot be found.
-    So you have to provide the backtrace, please.
-<p>
-<li><em>A detailed description of your problem</em><br>
-    Don't laugh, I'm totally serious. I already got a lot of problem reports
-    where the people not really said what's the actual problem is. So, in your
-    own interest (you want the problem be solved, don't you?) include as much
-    details as possible, please. But start with the essentials first, of
-    course.
-</ul>
-
-<faq ref="core-dumped" toc="I got a core dump, can you help me?">
-I got a core dump, can you help me?
-</faq>
-
-    In general no, at least not unless you provide more details about the code
-    location where Apache dumped core. What is usually always required in
-    order to help you is a backtrace (see next question). Without this
-    information it is mostly impossible to find the problem and help you in
-    fixing it.
-
-<faq ref="report-backtrace" toc="How to get a backtrace?">
-Ok, I got a core dump but how do I get a backtrace to find out the reason for it?
-</faq>
-
-Follow the following steps:
-
-<p>
-<ol>
-<li>Make sure you have debugging symbols available in at least
-    Apache and mod_ssl. On platforms where you use GCC/GDB you have to build
-    Apache+mod_ssl with ``<code>OPTIM="-g -ggdb3"</code>'' to achieve this. On
-    other platforms at least ``<code>OPTIM="-g"</code>'' is needed.
-<p>
-<li>Startup the server and try to produce the core-dump. For this you perhaps
-    want to use a directive like ``<code>CoreDumpDirectory /tmp</code>'' to
-    make sure that the core-dump file can be written. You then should get a
-    <code>/tmp/core</code> or <code>/tmp/httpd.core</code> file. When you
-    don't get this, try to run your server under an UID != 0 (root), because
-    most "current" kernels do not allow a process to dump core after it has
-    done a <code>setuid()</code> (unless it does an <code>exec()</code>) for
-    security reasons (there can be privileged information left over in
-    memory).  Additionally you can run ``<code>/path/to/httpd -X</code>''
-    manually to force Apache to not fork.
-<p>
-<li>Analyze the core-dump. For this run ``<code>gdb /path/to/httpd
-    /tmp/httpd.core</code>'' or a similar command has to run. In GDB you then
-    just have to enter the ``<code>bt</code>'' command and, voila, you get the
-    backtrace. For other debuggers consult your local debugger manual.  Send
-    this backtrace to the author.
-</ol>
-
-</ul>
-
diff --git a/docs/manual/ssl/ssl_glossary.html b/docs/manual/ssl/ssl_glossary.html
deleted file mode 100644
index b55633b..0000000
--- a/docs/manual/ssl/ssl_glossary.html
+++ /dev/null
@@ -1,184 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-<title>Apache SSL/TLS Encryption: Glossary</title>
-<style type="text/css"><!--
-#H {
-}
-#D {
-    background-color: #f0f0f0;
-}
---></style>
-</head>
-
-<body bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#000080" alink="#FF0000"> 
-<!--#include virtual="header.html" -->
-
-<h1 align="CENTER">SSL/TLS Strong Encryption: Glossary</h1>
-
-<div align="right">
-<table cellspacing="0" cellpadding="0" width="300" summary="">
-<tr>
-<td>
-<em>
-``I know you believe you understand what you think I said, but I am not sure you
-realize that what you heard is not what I meant.''
-</em>
-</td>
-</tr>
-<tr>
-<td align="right">
-<font size="-1">
-Richard Nixon
-</font>
-</td>
-</tr>
-</table>
-</div>
-
-<dl>
-<dt><div id="term">Authentication</div>
-<dd>The positive identification of a network entity such as a server, a
-    client, or a user. In SSL context the server and client
-    <em>Certificate</em> verification process.
-<p>
-<dt><div id="term">Access Control</div>
-<dd>The restriction of access to network realms. In Apache context
-    usually the restriction of access to certain <em>URLs</em>.
-<p>
-<dt><div id="term">Algorithm</div>
-<dd>An unambiguous formula or set of rules for solving a problem in a finite
-    number of steps. Algorithms for encryption are usually called <em>Ciphers</em>.
-<p>
-<dt><div id="term">Certificate</div>
-<dd>A data record used for authenticating network entities such
-    as a server or a client. A certificate contains X.509 information pieces
-    about its owner (called the subject) and the signing <em>Certificate
-    Authority</em> (called the issuer), plus the owner's public key and the
-    signature made by the CA. Network entities verify these signatures using
-    CA certificates.
-<p>
-<dt><div id="term">Certification Authority (CA)</div>
-<dd>A trusted third party whose purpose is to sign certificates for network
-    entities it has authenticated using secure means. Other network entities
-    can check the signature to verify that a CA has authenticated the bearer
-    of a certificate.
-<p>
-<dt><div id="term">Certificate Signing Request (CSR)</div>
-<dd>An unsigned certificate for submission to a <em>Certification Authority</em>,
-    which signs it with the <em>Private Key</em> of their CA <em>Certificate</em>. Once
-    the CSR is signed, it becomes a real certificate.
-<p>
-<dt><div id="term">Cipher</div>
-<dd>An algorithm or system for data encryption. Examples are DES, IDEA, RC4, etc.
-<p>
-<dt><div id="term">Ciphertext</div>
-<dd>The result after a <em>Plaintext</em> passed a <em>Cipher</em>.
-<p>
-<dt><div id="term">Configuration Directive</div>
-<dd>A configuration command that controls one or more aspects of a program's
-    behavior. In Apache context these are all the command names in the first
-    column of the configuration files.
-<p>
-<dt><div id="term">CONNECT</div>
-<dd>A HTTP command for proxying raw data channels over HTTP. It can be used to
-    encapsulate other protocols, such as the SSL protocol.
-<p>
-<dt><div id="term">Digital Signature</div>
-<dd>An encrypted text block that validates a certificate or other file. A
-    <em>Certification Authority</em> creates a signature by generating a
-    hash of the <em>Public Key</em> embedded in a <em>Certificate</em>, then
-    encrypting the hash with its own <em>Private Key</em>. Only the CA's
-    public key can decrypt the signature, verifying that the CA has
-    authenticated the network entity that owns the <em>Certificate</em>.
-<p>
-<dt><div id="term">Export-Crippled</div>
-<dd>Diminished in cryptographic strength (and security) in order to comply
-    with the United States' Export Administration Regulations (EAR).
-    Export-crippled cryptographic software is limited to a small key size,
-    resulting in <em>Ciphertext</em> which usually can be decrypted by brute
-    force.
-<p>
-<dt><div id="term">Fully-Qualified Domain-Name (FQDN)</div>
-<dd>The unique name of a network entity, consisting of a hostname and a domain
-    name that can resolve to an IP address. For example, <code>www</code> is a
-    hostname, <code>whatever.com</code> is a domain name, and
-    <code>www.whatever.com</code> is a fully-qualified domain name.
-<p>
-<dt><div id="term">HyperText Transfer Protocol (HTTP)</div>
-<dd>The HyperText Transport Protocol is the standard transmission protocol used
-    on the World Wide Web.
-<p>
-<dt><div id="term">HTTPS</div>
-<dd>The HyperText Transport Protocol (Secure), the standard encrypted
-    communication mechanism on the World Wide Web. This is actually just HTTP
-    over SSL.
-<p>
-<dt><div id="term">Message Digest</div>
-<dd>A hash of a message, which can be used to verify that the contents of
-    the message have not been altered in transit.
-<p>
-<dt><div id="term">OpenSSL</div>
-<dd>The Open Source toolkit for SSL/TLS;
-    see <a href="http://www.openssl.org/">http://www.openssl.org/</a>
-<p>
-<dt><div id="term">Pass Phrase</div>
-<dd>The word or phrase that protects private key files.
-    It prevents unauthorized users from encrypting them. Usually it's just
-    the secret encryption/decryption key used for <em>Ciphers</em>.
-<p>
-<dt><div id="term">Plaintext</div>
-<dd>The unencrypted text.
-<p>
-<dt><div id="term">Private Key</div>
-<dd>The secret key in a <em>Public Key Cryptography</em> system, used to
-    decrypt incoming messages and sign outgoing ones.
-<p>
-<dt><div id="term">Public Key</div>
-<dd>The publically available key in a <em>Public Key Cryptography</em> system, used to
-    encrypt messages bound for its owner and to decrypt signatures made by its
-    owner.
-<p>
-<dt><div id="term">Public Key Cryptography</div>
-<dd>The study and application of asymmetric encryption systems, which use one
-    key for encryption and another for decryption. A corresponding pair of
-    such keys constitutes a key pair. Also called Asymmetric Crypography.
-<p>
-<dt><div id="term">Secure Sockets Layer (SSL)</div>
-<dd>A protocol created by Netscape Communications Corporation for
-    general communication authentication and encryption over TCP/IP networks.
-    The most popular usage is <em>HTTPS</em>, i.e. the HyperText Transfer
-    Protocol (HTTP) over SSL.
-<p>
-<dt><div id="term">Session</div>
-<dd>The context information of an SSL communication.
-<p>
-<dt><div id="term">SSLeay</div>
-<dd>The original SSL/TLS implementation library developed by
-    Eric A. Young &lt;eay@aus.rsa.com&gt;;
-    see <a href="http://www.ssleay.org/">http://www.ssleay.org/</a>
-<p>
-<dt><div id="term">Symmetric Cryptography</div>
-<dd>The study and application of <em>Ciphers</em> that use a single secret key
-    for both encryption and decryption operations.
-<p>
-<dt><div id="term">Transport Layer Security (TLS)</div>
-<dd>The successor protocol to SSL, created by the Internet Engineering Task
-    Force (IETF) for general communication authentication and encryption over
-    TCP/IP networks. TLS version 1 and is nearly identical with SSL version 3.
-<p>
-<dt><div id="term">Uniform Resource Locator (URL)</div>
-<dd>The formal identifier to locate various resources on the World Wide Web.
-    The most popular URL scheme is <code>http</code>. SSL uses the
-    scheme <code>https</code>
-<p>
-<dt><div id="term">X.509</div>
-<dd>An authentication certificate scheme recommended by the International
-    Telecommunication Union (ITU-T) which is used for SSL/TLS authentication.
-</dl>
-
-<p><!--#include virtual="footer.html" --> </p>
-  </body>
-</html>
\ No newline at end of file
diff --git a/docs/manual/ssl/ssl_glossary.wml b/docs/manual/ssl/ssl_glossary.wml
deleted file mode 100644
index d29b8d0..0000000
--- a/docs/manual/ssl/ssl_glossary.wml
+++ /dev/null
@@ -1,152 +0,0 @@
-
-#use "ssl_template.inc" title="Glossary" tag=gloss num=7
-
-<page_prev name="F.A.Q. List" url="ssl_faq.html">
-
-<quotation width=300 author="Richard Nixon">
-``I know you believe you understand what you think I said, but I am not sure you
-realize that what you heard is not what I meant.''
-</quotation>
-
-<dl>
-
-<dt><div id="term">Authentication</div>
-<dd>The positive identification of a network entity such as a server, a
-    client, or a user. In SSL context the server and client
-    <em>Certificate</em> verification process.
-<p>
-<dt><div id="term">Access Control</div>
-<dd>The restriction of access to network realms. In Apache context
-    usually the restriction of access to certain <em>URLs</em>.
-<p>
-<dt><div id="term">Algorithm</div>
-<dd>An unambiguous formula or set of rules for solving a problem in a finite
-    number of steps. Algorithms for encryption are usually called <em>Ciphers</em>. 
-<p>
-<dt><div id="term">Certificate</div>
-<dd>A data record used for authenticating network entities such 
-    as a server or a client. A certificate contains X.509 information pieces
-    about its owner (called the subject) and the signing <em>Certificate
-    Authority</em> (called the issuer), plus the owner's public key and the
-    signature made by the CA. Network entities verify these signatures using
-    CA certificates. 
-<p>
-<dt><div id="term">Certification Authority (CA)</div>
-<dd>A trusted third party whose purpose is to sign certificates for network
-    entities it has authenticated using secure means. Other network entities
-    can check the signature to verify that a CA has authenticated the bearer
-    of a certificate. 
-<p>
-<dt><div id="term">Certificate Signing Request (CSR)</div>
-<dd>An unsigned certificate for submission to a <em>Certification Authority</em>,
-    which signs it with the <em>Private Key</em> of their CA <em>Certificate</em>. Once
-    the CSR is signed, it becomes a real certificate. 
-<p>
-<dt><div id="term">Cipher</div>
-<dd>An algorithm or system for data encryption. Examples are DES, IDEA, RC4, etc.
-<p>
-<dt><div id="term">Ciphertext</div>
-<dd>The result after a <em>Plaintext</em> passed a <em>Cipher</em>.
-<p>
-<dt><div id="term">Configuration Directive</div>
-<dd>A configuration command that controls one or more aspects of a program's
-    behavior. In Apache context these are all the command names in the first
-    column of the configuration files.
-<p>
-<dt><div id="term">CONNECT</div>
-<dd>A HTTP command for proxying raw data channels over HTTP. It can be used to
-    encapsulate other protocols, such as the SSL protocol. 
-<p>
-<dt><div id="term">Digital Signature</div>
-<dd>An encrypted text block that validates a certificate or other file. A
-    <em>Certification Authority</em> creates a signature by generating a
-    hash of the <em>Public Key</em> embedded in a <em>Certificate</em>, then
-    encrypting the hash with its own <em>Private Key</em>.  Only the CA's
-    public key can decrypt the signature, verifying that the CA has
-    authenticated the network entity that owns the <em>Certificate</em>. 
-<p>
-<dt><div id="term">Export-Crippled</div>
-<dd>Diminished in cryptographic strength (and security) in order to comply
-    with the United States' Export Administration Regulations (EAR).
-    Export-crippled cryptographic software is limited to a small key size,
-    resulting in <em>Ciphertext</em> which usually can be decrypted by brute
-    force. 
-<p>
-<dt><div id="term">Fully-Qualified Domain-Name (FQDN)</div>
-<dd>The unique name of a network entity, consisting of a hostname and a domain
-    name that can resolve to an IP address. For example, <code>www</code> is a
-    hostname, <code>whatever.com</code> is a domain name, and
-    <code>www.whatever.com</code> is a fully-qualified domain name. 
-<p>
-<dt><div id="term">HyperText Transfer Protocol (HTTP)</div>
-<dd>The HyperText Transport Protocol is the standard transmission protocol used
-    on the World Wide Web. 
-<p>
-<dt><div id="term">HTTPS</div>
-<dd>The HyperText Transport Protocol (Secure), the standard encrypted
-    communication mechanism on the World Wide Web. This is actually just HTTP
-    over SSL.
-<p>
-<dt><div id="term">Message Digest</div>
-<dd>A hash of a message, which can be used to verify that the contents of
-    the message have not been altered in transit. 
-<p>
-<dt><div id="term">OpenSSL</div>
-<dd>The Open Source toolkit for SSL/TLS; 
-    see <a href="http://www.openssl.org/">http://www.openssl.org/</a>
-<p>
-<dt><div id="term">Pass Phrase</div>
-<dd>The word or phrase that protects private key files.
-    It prevents unauthorized users from encrypting them.  Usually it's just
-    the secret encryption/decryption key used for <em>Ciphers</em>.
-<p>
-<dt><div id="term">Plaintext</div>
-<dd>The unencrypted text.
-<p>
-<dt><div id="term">Private Key</div>
-<dd>The secret key in a <em>Public Key Cryptography</em> system, used to
-    decrypt incoming messages and sign outgoing ones. 
-<p>
-<dt><div id="term">Public Key</div>
-<dd>The publically available key in a <em>Public Key Cryptography</em> system, used to
-    encrypt messages bound for its owner and to decrypt signatures made by its
-    owner. 
-<p>
-<dt><div id="term">Public Key Cryptography</div>
-<dd>The study and application of asymmetric encryption systems, which use one
-    key for encryption and another for decryption. A corresponding pair of
-    such keys constitutes a key pair. Also called Asymmetric Crypography.
-<p>
-<dt><div id="term">Secure Sockets Layer (SSL)</div>
-<dd>A protocol created by Netscape Communications Corporation for
-    general communication authentication and encryption over TCP/IP networks.
-    The most popular usage is <em>HTTPS</em>, i.e. the HyperText Transfer
-    Protocol (HTTP) over SSL.
-<p>
-<dt><div id="term">Session</div>
-<dd>The context information of an SSL communication.
-<p>
-<dt><div id="term">SSLeay</div>
-<dd>The original SSL/TLS implementation library developed by 
-    Eric A. Young &lt;eay@aus.rsa.com&gt;;
-    see <a href="http://www.ssleay.org/">http://www.ssleay.org/</a>
-<p>
-<dt><div id="term">Symmetric Cryptography</div>
-<dd>The study and application of <em>Ciphers</em> that use a single secret key
-    for both encryption and decryption operations. 
-<p>
-<dt><div id="term">Transport Layer Security (TLS)</div>
-<dd>The successor protocol to SSL, created by the Internet Engineering Task
-    Force (IETF) for general communication authentication and encryption over
-    TCP/IP networks. TLS version 1 and is nearly identical with SSL version 3.
-<p>
-<dt><div id="term">Uniform Resource Locator (URL)</div>
-<dd>The formal identifier to locate various resources on the World Wide Web.
-    The most popular URL scheme is <code>http</code>. SSL uses the
-    scheme <code>https</code>
-<p>
-<dt><div id="term">X.509</div>
-<dd>An authentication certificate scheme recommended by the International
-    Telecommunication Union (ITU-T) which is used for SSL/TLS authentication. 
-</dl>
-
diff --git a/docs/manual/ssl/ssl_howto.gfont000.gif b/docs/manual/ssl/ssl_howto.gfont000.gif
deleted file mode 100644
index 3131a67..0000000
--- a/docs/manual/ssl/ssl_howto.gfont000.gif
+++ /dev/null
Binary files differ
diff --git a/docs/manual/ssl/ssl_howto.html b/docs/manual/ssl/ssl_howto.html
deleted file mode 100644
index ba42683..0000000
--- a/docs/manual/ssl/ssl_howto.html
+++ /dev/null
@@ -1,655 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-<title>Apache SSL/TLS Encryption: How-To</title>
-<style type="text/css"><!--
-#H {
-}
-#D {
-    background-color: #f0f0f0;
-}
---></style>
-</head>
-
-<body bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#000080" alink="#FF0000"> 
-<!--#include virtual="header.html" -->
-
-<h1 align="CENTER">SSL/TLS Strong Encryption: How-To</h1>
-
-
-<div align="right">
-<table cellspacing="0" cellpadding="0" width="200" summary="">
-<tr>
-<td>
-<em>
-``The solution of this problem is trivial
-  and is left as an exercise for the reader.''
-</em>
-</td>
-</tr>
-<tr>
-<td align="right">
-<font size="-1">
-Standard textbook cookie
-</font>
-</td>
-</tr>
-</table>
-</div>
-
-<p>
-How to solve particular security constraints for an SSL-aware webserver
-is not always obvious because of the coherences between SSL, HTTP and Apache's
-way of processing requests. This chapter gives instructions on how to solve
-such typical situations. Treat is as a first step to find out the final
-solution, but always try to understand the stuff before you use it. Nothing is
-worse than using a security solution without knowing its restrictions and
-coherences.
-
-<ul>
-<li><a href="#ToC1">Cipher Suites and Enforced Strong Security</a></li>
-<li><a href="#ToC2">SSLv2 only server</a></li>
-<li><a href="#ToC3">strong encryption only server</a></li>
-<li><a href="#ToC4">server gated cryptography</a></li>
-<li><a href="#ToC5">stronger per-directory requirements</a></li>
-<li><a href="#ToC6">Client Authentication and Access Control</a></li>
-<li><a href="#ToC7">simple certificate-based client authentication</a></li>
-<li><a href="#ToC8">selective certificate-based client authentication</a></li>
-<li><a href="#ToC9">particular certificate-based client authentication</a></li>
-<li><a href="#ToC10">intranet vs. internet authentication</a></li>
-</ul>
-
-<h2><a name="ToC1">Cipher Suites and Enforced Strong Security</a></h2>
-<ul>
-<p>
-<li><a name="ToC2"></a>
-    <a name="cipher-sslv2"></a>
-    <strong id="howto">
-How can I create a real SSLv2-only server?
-</strong>&nbsp;&nbsp;
-    [<a href="http://httpd.apache.org/docs-2.0/ssl/ssl_howto.html#cipher-sslv2"><b>L</b></a>]
-    <p>
-The following creates an SSL server which speaks only the SSLv2 protocol and
-its ciphers.
-<p>
-<table border="0" cellpadding="0" cellspacing="0" summary="">
-    <tr>
-        <td colspan="2"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="1" height="8" align="bottom" border="0"></td>
-        <td rowspan="3">&nbsp;&nbsp;<font face="Arial,Helvetica" color="#999999">httpd.conf</font>&nbsp;&nbsp;</td>
-        <td colspan="2"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="1" height="1" align="bottom" border="0"></td>
-    </tr>
-    <tr>
-        <td bgcolor="#cccccc" colspan="2"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="1" height="1" align="bottom" border="0"></td>
-        <td bgcolor="#cccccc" colspan="2"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="1" height="1" align="bottom" border="0"></td>
-    </tr>
-    <tr>
-         <td bgcolor="#cccccc"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="1" height="5" align="bottom" border="0"></td>
-         <td bgcolor="#ffffff"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="40" height="1" align="bottom" border="0"></td>
-         <td bgcolor="#ffffff"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="300" height="1" align="bottom" border="0"></td>
-         <td bgcolor="#cccccc"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="1" height="5" align="bottom" border="0"></td>
-    </tr>
-    <tr>
-         <td bgcolor="#cccccc"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="1" height="1" align="bottom" border="0"></td>
-         <td colspan="3" bgcolor="#ffffff">
-             <table border="0" cellspacing="4" summary="">
-                 <tr>
-                     <td>
-<pre>
-
-SSLProtocol -all +SSLv2
-SSLCipherSuite SSLv2:+HIGH:+MEDIUM:+LOW:+EXP
-
-</pre>
-</td>
-                 </tr>
-             </table>
-         </td>
-         <td bgcolor="#cccccc"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="1" height="1" align="bottom" border="0"></td>
-    </tr>
-    <tr>
-         <td colspan="5" bgcolor="#cccccc"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="1" height="1" align="bottom" border="0"></td>
-    </tr>
-</table>
-<p>
-<li><a name="ToC3"></a>
-    <a name="cipher-strong"></a>
-    <strong id="howto">
-How can I create an SSL server which accepts strong encryption only?
-</strong>&nbsp;&nbsp;
-    [<a href="http://httpd.apache.org/docs-2.0/ssl/ssl_howto.html#cipher-strong"><b>L</b></a>]
-    <p>
-The following enables only the seven strongest ciphers:
-<p>
-<table border="0" cellpadding="0" cellspacing="0" summary="">
-    <tr>
-        <td colspan="2"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="1" height="8" align="bottom" border="0"></td>
-        <td rowspan="3">&nbsp;&nbsp;<font face="Arial,Helvetica" color="#999999">httpd.conf</font>&nbsp;&nbsp;</td>
-        <td colspan="2"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="1" height="1" align="bottom" border="0"></td>
-    </tr>
-    <tr>
-        <td bgcolor="#cccccc" colspan="2"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="1" height="1" align="bottom" border="0"></td>
-        <td bgcolor="#cccccc" colspan="2"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="1" height="1" align="bottom" border="0"></td>
-    </tr>
-    <tr>
-         <td bgcolor="#cccccc"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="1" height="5" align="bottom" border="0"></td>
-         <td bgcolor="#ffffff"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="40" height="1" align="bottom" border="0"></td>
-         <td bgcolor="#ffffff"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="300" height="1" align="bottom" border="0"></td>
-         <td bgcolor="#cccccc"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="1" height="5" align="bottom" border="0"></td>
-    </tr>
-    <tr>
-         <td bgcolor="#cccccc"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="1" height="1" align="bottom" border="0"></td>
-         <td colspan="3" bgcolor="#ffffff">
-             <table border="0" cellspacing="4" summary="">
-                 <tr>
-                     <td>
-<pre>
-
-SSLProtocol all
-SSLCipherSuite HIGH:MEDIUM
-
-</pre>
-</td>
-                 </tr>
-             </table>
-         </td>
-         <td bgcolor="#cccccc"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="1" height="1" align="bottom" border="0"></td>
-    </tr>
-    <tr>
-         <td colspan="5" bgcolor="#cccccc"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="1" height="1" align="bottom" border="0"></td>
-    </tr>
-</table>
-<p>
-<li><a name="ToC4"></a>
-    <a name="cipher-sgc"></a>
-    <strong id="howto">
-How can I create an SSL server which accepts strong encryption only,
-but allows export browsers to upgrade to stronger encryption?
-</strong>&nbsp;&nbsp;
-    [<a href="http://httpd.apache.org/docs-2.0/ssl/ssl_howto.html#cipher-sgc"><b>L</b></a>]
-    <p>
-This facility is called Server Gated Cryptography (SGC) and details you can
-find in the <code>README.GlobalID</code> document in the mod_ssl distribution.
-In short: The server has a Global ID server certificate, signed by a special
-CA certificate from Verisign which enables strong encryption in export
-browsers. This works as following: The browser connects with an export cipher,
-the server sends its Global ID certificate, the browser verifies it and
-subsequently upgrades the cipher suite before any HTTP communication takes
-place. The question now is: How can we allow this upgrade, but enforce strong
-encryption. Or in other words: Browser either have to initially connect with
-strong encryption or have to upgrade to strong encryption, but are not allowed
-to keep the export ciphers. The following does the trick:
-<p>
-<table border="0" cellpadding="0" cellspacing="0" summary="">
-    <tr>
-        <td colspan="2"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="1" height="8" align="bottom" border="0"></td>
-        <td rowspan="3">&nbsp;&nbsp;<font face="Arial,Helvetica" color="#999999">httpd.conf</font>&nbsp;&nbsp;</td>
-        <td colspan="2"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="1" height="1" align="bottom" border="0"></td>
-    </tr>
-    <tr>
-        <td bgcolor="#cccccc" colspan="2"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="1" height="1" align="bottom" border="0"></td>
-        <td bgcolor="#cccccc" colspan="2"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="1" height="1" align="bottom" border="0"></td>
-    </tr>
-    <tr>
-         <td bgcolor="#cccccc"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="1" height="5" align="bottom" border="0"></td>
-         <td bgcolor="#ffffff"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="40" height="1" align="bottom" border="0"></td>
-         <td bgcolor="#ffffff"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="300" height="1" align="bottom" border="0"></td>
-         <td bgcolor="#cccccc"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="1" height="5" align="bottom" border="0"></td>
-    </tr>
-    <tr>
-         <td bgcolor="#cccccc"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="1" height="1" align="bottom" border="0"></td>
-         <td colspan="3" bgcolor="#ffffff">
-             <table border="0" cellspacing="4" summary="">
-                 <tr>
-                     <td>
-<pre>
-
-#   allow all ciphers for the inital handshake,
-#   so export browsers can upgrade via SGC facility
-SSLCipherSuite ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
-&lt;Directory /usr/local/apache/htdocs&gt;
-#   but finally deny all browsers which haven't upgraded
-SSLRequire %{SSL_CIPHER_USEKEYSIZE} &gt;= 128
-&lt;/Directory&gt;
-
-</pre>
-</td>
-                 </tr>
-             </table>
-         </td>
-         <td bgcolor="#cccccc"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="1" height="1" align="bottom" border="0"></td>
-    </tr>
-    <tr>
-         <td colspan="5" bgcolor="#cccccc"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="1" height="1" align="bottom" border="0"></td>
-    </tr>
-</table>
-<p>
-<li><a name="ToC5"></a>
-    <a name="cipher-perdir"></a>
-    <strong id="howto">
-How can I create an SSL server which accepts all types of ciphers in general,
-but requires a strong ciphers for access to a particular URL?
-</strong>&nbsp;&nbsp;
-    [<a href="http://httpd.apache.org/docs-2.0/ssl/ssl_howto.html#cipher-perdir"><b>L</b></a>]
-    <p>
-Obviously you cannot just use a server-wide <code>SSLCipherSuite</code> which
-restricts the ciphers to the strong variants. But mod_ssl allows you to
-reconfigure the cipher suite in per-directory context and automatically forces
-a renegotiation of the SSL parameters to meet the new configuration. So, the
-solution is:
-<p>
-<table border="0" cellpadding="0" cellspacing="0" summary="">
-    <tr>
-        <td colspan="2"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="1" height="8" align="bottom" border="0"></td>
-        <td rowspan="3">&nbsp;&nbsp;<font face="Arial,Helvetica" color="#999999">httpd.conf</font>&nbsp;&nbsp;</td>
-        <td colspan="2"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="1" height="1" align="bottom" border="0"></td>
-    </tr>
-    <tr>
-        <td bgcolor="#cccccc" colspan="2"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="1" height="1" align="bottom" border="0"></td>
-        <td bgcolor="#cccccc" colspan="2"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="1" height="1" align="bottom" border="0"></td>
-    </tr>
-    <tr>
-         <td bgcolor="#cccccc"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="1" height="5" align="bottom" border="0"></td>
-         <td bgcolor="#ffffff"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="40" height="1" align="bottom" border="0"></td>
-         <td bgcolor="#ffffff"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="300" height="1" align="bottom" border="0"></td>
-         <td bgcolor="#cccccc"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="1" height="5" align="bottom" border="0"></td>
-    </tr>
-    <tr>
-         <td bgcolor="#cccccc"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="1" height="1" align="bottom" border="0"></td>
-         <td colspan="3" bgcolor="#ffffff">
-             <table border="0" cellspacing="4" summary="">
-                 <tr>
-                     <td>
-<pre>
-
-#   be liberal in general
-SSLCipherSuite ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
-&lt;Location /strong/area&gt;
-#   but https://hostname/strong/area/ and below requires strong ciphers
-SSLCipherSuite HIGH:MEDIUM
-&lt;/Location&gt;
-
-</pre>
-</td>
-                 </tr>
-             </table>
-         </td>
-         <td bgcolor="#cccccc"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="1" height="1" align="bottom" border="0"></td>
-    </tr>
-    <tr>
-         <td colspan="5" bgcolor="#cccccc"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="1" height="1" align="bottom" border="0"></td>
-    </tr>
-</table>
-</ul>
-<h2><a name="ToC6">Client Authentication and Access Control</a></h2>
-<ul>
-<p>
-<li><a name="ToC7"></a>
-    <a name="auth-simple"></a>
-    <strong id="howto">
-How can I authenticate clients based on certificates when I know all my
-clients?
-</strong>&nbsp;&nbsp;
-    [<a href="http://httpd.apache.org/docs-2.0/ssl/ssl_howto.html#auth-simple"><b>L</b></a>]
-    <p>
-When you know your user community (i.e. a closed user group situation), as
-it's the case for instance in an Intranet, you can use plain certificate
-authentication. All you have to do is to create client certificates signed by
-your own CA certificate <code>ca.crt</code> and then verifiy the clients
-against this certificate.
-<p>
-<table border="0" cellpadding="0" cellspacing="0" summary="">
-    <tr>
-        <td colspan="2"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="1" height="8" align="bottom" border="0"></td>
-        <td rowspan="3">&nbsp;&nbsp;<font face="Arial,Helvetica" color="#999999">httpd.conf</font>&nbsp;&nbsp;</td>
-        <td colspan="2"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="1" height="1" align="bottom" border="0"></td>
-    </tr>
-    <tr>
-        <td bgcolor="#cccccc" colspan="2"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="1" height="1" align="bottom" border="0"></td>
-        <td bgcolor="#cccccc" colspan="2"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="1" height="1" align="bottom" border="0"></td>
-    </tr>
-    <tr>
-         <td bgcolor="#cccccc"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="1" height="5" align="bottom" border="0"></td>
-         <td bgcolor="#ffffff"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="40" height="1" align="bottom" border="0"></td>
-         <td bgcolor="#ffffff"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="300" height="1" align="bottom" border="0"></td>
-         <td bgcolor="#cccccc"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="1" height="5" align="bottom" border="0"></td>
-    </tr>
-    <tr>
-         <td bgcolor="#cccccc"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="1" height="1" align="bottom" border="0"></td>
-         <td colspan="3" bgcolor="#ffffff">
-             <table border="0" cellspacing="4" summary="">
-                 <tr>
-                     <td>
-<pre>
-
-#   require a client certificate which has to be directly
-#   signed by our CA certificate in ca.crt
-SSLVerifyClient require
-SSLVerifyDepth 1
-SSLCACertificateFile conf/ssl.crt/ca.crt
-
-</pre>
-</td>
-                 </tr>
-             </table>
-         </td>
-         <td bgcolor="#cccccc"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="1" height="1" align="bottom" border="0"></td>
-    </tr>
-    <tr>
-         <td colspan="5" bgcolor="#cccccc"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="1" height="1" align="bottom" border="0"></td>
-    </tr>
-</table>
-<p>
-<li><a name="ToC8"></a>
-    <a name="auth-selective"></a>
-    <strong id="howto">
-How can I authenticate my clients for a particular URL based on certificates
-but still allow arbitrary clients to access the remaining parts of the server?
-</strong>&nbsp;&nbsp;
-    [<a href="http://httpd.apache.org/docs-2.0/ssl/ssl_howto.html#auth-selective"><b>L</b></a>]
-    <p>
-For this we again use the per-directory reconfiguration feature of mod_ssl:
-<p>
-<table border="0" cellpadding="0" cellspacing="0" summary="">
-    <tr>
-        <td colspan="2"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="1" height="8" align="bottom" border="0"></td>
-        <td rowspan="3">&nbsp;&nbsp;<font face="Arial,Helvetica" color="#999999">httpd.conf</font>&nbsp;&nbsp;</td>
-        <td colspan="2"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="1" height="1" align="bottom" border="0"></td>
-    </tr>
-    <tr>
-        <td bgcolor="#cccccc" colspan="2"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="1" height="1" align="bottom" border="0"></td>
-        <td bgcolor="#cccccc" colspan="2"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="1" height="1" align="bottom" border="0"></td>
-    </tr>
-    <tr>
-         <td bgcolor="#cccccc"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="1" height="5" align="bottom" border="0"></td>
-         <td bgcolor="#ffffff"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="40" height="1" align="bottom" border="0"></td>
-         <td bgcolor="#ffffff"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="300" height="1" align="bottom" border="0"></td>
-         <td bgcolor="#cccccc"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="1" height="5" align="bottom" border="0"></td>
-    </tr>
-    <tr>
-         <td bgcolor="#cccccc"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="1" height="1" align="bottom" border="0"></td>
-         <td colspan="3" bgcolor="#ffffff">
-             <table border="0" cellspacing="4" summary="">
-                 <tr>
-                     <td>
-<pre>
-
-SSLVerifyClient none
-SSLCACertificateFile conf/ssl.crt/ca.crt
-&lt;Location /secure/area&gt;
-SSLVerifyClient require
-SSLVerifyDepth 1
-&lt;/Location&gt;
-
-</pre>
-</td>
-                 </tr>
-             </table>
-         </td>
-         <td bgcolor="#cccccc"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="1" height="1" align="bottom" border="0"></td>
-    </tr>
-    <tr>
-         <td colspan="5" bgcolor="#cccccc"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="1" height="1" align="bottom" border="0"></td>
-    </tr>
-</table>
-<p>
-<li><a name="ToC9"></a>
-    <a name="auth-particular"></a>
-    <strong id="howto">
-How can I authenticate only particular clients for a some URLs based
-on certificates but still allow arbitrary clients to access the remaining
-parts of the server?
-</strong>&nbsp;&nbsp;
-    [<a href="http://httpd.apache.org/docs-2.0/ssl/ssl_howto.html#auth-particular"><b>L</b></a>]
-    <p>
-The key is to check for various ingredients of the client certficate. Usually
-this means to check the whole or part of the Distinguished Name (DN) of the
-Subject. For this two methods exists: The <code>mod_auth</code> based variant
-and the <code>SSLRequire</code> variant. The first method is good when the
-clients are of totally different type, i.e. when their DNs have no common
-fields (usually the organisation, etc.). In this case you've to establish a
-password database containing <em>all</em> clients. The second method is better
-when your clients are all part of a common hierarchy which is encoded into the
-DN. Then you can match them more easily.
-<p>
-The first method:
-<p>
-<table border="0" cellpadding="0" cellspacing="0" summary="">
-    <tr>
-        <td colspan="2"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="1" height="8" align="bottom" border="0"></td>
-        <td rowspan="3">&nbsp;&nbsp;<font face="Arial,Helvetica" color="#999999">httpd.conf</font>&nbsp;&nbsp;</td>
-        <td colspan="2"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="1" height="1" align="bottom" border="0"></td>
-    </tr>
-    <tr>
-        <td bgcolor="#cccccc" colspan="2"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="1" height="1" align="bottom" border="0"></td>
-        <td bgcolor="#cccccc" colspan="2"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="1" height="1" align="bottom" border="0"></td>
-    </tr>
-    <tr>
-         <td bgcolor="#cccccc"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="1" height="5" align="bottom" border="0"></td>
-         <td bgcolor="#ffffff"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="40" height="1" align="bottom" border="0"></td>
-         <td bgcolor="#ffffff"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="300" height="1" align="bottom" border="0"></td>
-         <td bgcolor="#cccccc"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="1" height="5" align="bottom" border="0"></td>
-    </tr>
-    <tr>
-         <td bgcolor="#cccccc"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="1" height="1" align="bottom" border="0"></td>
-         <td colspan="3" bgcolor="#ffffff">
-             <table border="0" cellspacing="4" summary="">
-                 <tr>
-                     <td>
-<pre>
-
-SSLVerifyClient      none
-&lt;Directory /usr/local/apache/htdocs/secure/area&gt;
-SSLVerifyClient      require
-SSLVerifyDepth       5
-SSLCACertificateFile conf/ssl.crt/ca.crt
-SSLCACertificatePath conf/ssl.crt
-SSLOptions           +FakeBasicAuth
-SSLRequireSSL
-AuthName             "Snake Oil Authentication"
-AuthType             Basic
-AuthUserFile         /usr/local/apache/conf/httpd.passwd
-require              valid-user
-&lt;/Directory&gt;
-
-</pre>
-</td>
-                 </tr>
-             </table>
-         </td>
-         <td bgcolor="#cccccc"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="1" height="1" align="bottom" border="0"></td>
-    </tr>
-    <tr>
-         <td colspan="5" bgcolor="#cccccc"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="1" height="1" align="bottom" border="0"></td>
-    </tr>
-</table>
-<p>
-<table border="0" cellpadding="0" cellspacing="0" summary="">
-    <tr>
-        <td colspan="2"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="1" height="8" align="bottom" border="0"></td>
-        <td rowspan="3">&nbsp;&nbsp;<font face="Arial,Helvetica" color="#999999">httpd.passwd</font>&nbsp;&nbsp;</td>
-        <td colspan="2"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="1" height="1" align="bottom" border="0"></td>
-    </tr>
-    <tr>
-        <td bgcolor="#cccccc" colspan="2"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="1" height="1" align="bottom" border="0"></td>
-        <td bgcolor="#cccccc" colspan="2"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="1" height="1" align="bottom" border="0"></td>
-    </tr>
-    <tr>
-         <td bgcolor="#cccccc"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="1" height="5" align="bottom" border="0"></td>
-         <td bgcolor="#ffffff"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="40" height="1" align="bottom" border="0"></td>
-         <td bgcolor="#ffffff"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="300" height="1" align="bottom" border="0"></td>
-         <td bgcolor="#cccccc"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="1" height="5" align="bottom" border="0"></td>
-    </tr>
-    <tr>
-         <td bgcolor="#cccccc"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="1" height="1" align="bottom" border="0"></td>
-         <td colspan="3" bgcolor="#ffffff">
-             <table border="0" cellspacing="4" summary="">
-                 <tr>
-                     <td>
-<pre>
-
-/C=DE/L=Munich/O=Snake Oil, Ltd./OU=Staff/CN=Foo:xxj31ZMTZzkVA
-/C=US/L=S.F./O=Snake Oil, Ltd./OU=CA/CN=Bar:xxj31ZMTZzkVA
-/C=US/L=L.A./O=Snake Oil, Ltd./OU=Dev/CN=Quux:xxj31ZMTZzkVA
-
-</pre>
-</td>
-                 </tr>
-             </table>
-         </td>
-         <td bgcolor="#cccccc"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="1" height="1" align="bottom" border="0"></td>
-    </tr>
-    <tr>
-         <td colspan="5" bgcolor="#cccccc"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="1" height="1" align="bottom" border="0"></td>
-    </tr>
-</table>
-<p>
-The second method:
-<p>
-<table border="0" cellpadding="0" cellspacing="0" summary="">
-    <tr>
-        <td colspan="2"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="1" height="8" align="bottom" border="0"></td>
-        <td rowspan="3">&nbsp;&nbsp;<font face="Arial,Helvetica" color="#999999">httpd.conf</font>&nbsp;&nbsp;</td>
-        <td colspan="2"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="1" height="1" align="bottom" border="0"></td>
-    </tr>
-    <tr>
-        <td bgcolor="#cccccc" colspan="2"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="1" height="1" align="bottom" border="0"></td>
-        <td bgcolor="#cccccc" colspan="2"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="1" height="1" align="bottom" border="0"></td>
-    </tr>
-    <tr>
-         <td bgcolor="#cccccc"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="1" height="5" align="bottom" border="0"></td>
-         <td bgcolor="#ffffff"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="40" height="1" align="bottom" border="0"></td>
-         <td bgcolor="#ffffff"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="300" height="1" align="bottom" border="0"></td>
-         <td bgcolor="#cccccc"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="1" height="5" align="bottom" border="0"></td>
-    </tr>
-    <tr>
-         <td bgcolor="#cccccc"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="1" height="1" align="bottom" border="0"></td>
-         <td colspan="3" bgcolor="#ffffff">
-             <table border="0" cellspacing="4" summary="">
-                 <tr>
-                     <td>
-<pre>
-
-SSLVerifyClient      none
-&lt;Directory /usr/local/apache/htdocs/secure/area&gt;
-SSLVerifyClient      require
-SSLVerifyDepth       5
-SSLCACertificateFile conf/ssl.crt/ca.crt
-SSLCACertificatePath conf/ssl.crt
-SSLOptions           +FakeBasicAuth
-SSLRequireSSL
-SSLRequire           %{SSL_CLIENT_S_DN_O}  eq "Snake Oil, Ltd." and \
-                     %{SSL_CLIENT_S_DN_OU} in {"Staff", "CA", "Dev"}
-&lt;/Directory&gt;
-
-</pre>
-</td>
-                 </tr>
-             </table>
-         </td>
-         <td bgcolor="#cccccc"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="1" height="1" align="bottom" border="0"></td>
-    </tr>
-    <tr>
-         <td colspan="5" bgcolor="#cccccc"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="1" height="1" align="bottom" border="0"></td>
-    </tr>
-</table>
-<p>
-<li><a name="ToC10"></a>
-    <a name="auth-intranet"></a>
-    <strong id="howto"> How can
-I require HTTPS with strong ciphers and either basic authentication or client
-certificates for access to a subarea on the Intranet website for clients
-coming from the Internet but still allow plain HTTP access for clients on the
-Intranet?
-</strong>&nbsp;&nbsp;
-    [<a href="http://httpd.apache.org/docs-2.0/ssl/ssl_howto.html#auth-intranet"><b>L</b></a>]
-    <p>
-Let us assume the Intranet can be distinguished through the IP network
-192.160.1.0/24 and the subarea on the Intranet website has the URL
-<tt>/subarea</tt>. Then configure the following outside your HTTPS virtual
-host (so it applies to both HTTPS and HTTP):
-<p>
-<table border="0" cellpadding="0" cellspacing="0" summary="">
-    <tr>
-        <td colspan="2"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="1" height="8" align="bottom" border="0"></td>
-        <td rowspan="3">&nbsp;&nbsp;<font face="Arial,Helvetica" color="#999999">httpd.conf</font>&nbsp;&nbsp;</td>
-        <td colspan="2"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="1" height="1" align="bottom" border="0"></td>
-    </tr>
-    <tr>
-        <td bgcolor="#cccccc" colspan="2"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="1" height="1" align="bottom" border="0"></td>
-        <td bgcolor="#cccccc" colspan="2"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="1" height="1" align="bottom" border="0"></td>
-    </tr>
-    <tr>
-         <td bgcolor="#cccccc"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="1" height="5" align="bottom" border="0"></td>
-         <td bgcolor="#ffffff"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="40" height="1" align="bottom" border="0"></td>
-         <td bgcolor="#ffffff"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="300" height="1" align="bottom" border="0"></td>
-         <td bgcolor="#cccccc"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="1" height="5" align="bottom" border="0"></td>
-    </tr>
-    <tr>
-         <td bgcolor="#cccccc"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="1" height="1" align="bottom" border="0"></td>
-         <td colspan="3" bgcolor="#ffffff">
-             <table border="0" cellspacing="4" summary="">
-                 <tr>
-                     <td>
-<pre>
-
-SSLCACertificateFile conf/ssl.crt/company-ca.crt
-
-&lt;Directory /usr/local/apache/htdocs&gt;
-#   Outside the subarea only Intranet access is granted
-Order                deny,allow
-Deny                 from all
-Allow                from 192.168.1.0/24
-&lt;/Directory&gt;
-
-&lt;Directory /usr/local/apache/htdocs/subarea&gt;
-#   Inside the subarea any Intranet access is allowed
-#   but from the Internet only HTTPS + Strong-Cipher + Password
-#   or the alternative HTTPS + Strong-Cipher + Client-Certificate
-
-#   If HTTPS is used, make sure a strong cipher is used.
-#   Additionally allow client certs as alternative to basic auth.
-SSLVerifyClient      optional
-SSLVerifyDepth       1
-SSLOptions           +FakeBasicAuth +StrictRequire
-SSLRequire           %{SSL_CIPHER_USEKEYSIZE} &gt;= 128
-
-#   Force clients from the Internet to use HTTPS
-RewriteEngine        on
-RewriteCond          %{REMOTE_ADDR} !^192\.168\.1\.[0-9]+$
-RewriteCond          %{HTTPS} !=on
-RewriteRule          .* - [F]
-
-#   Allow Network Access and/or Basic Auth
-Satisfy              any
-
-#   Network Access Control
-Order                deny,allow
-Deny                 from all
-Allow                192.168.1.0/24
-
-#   HTTP Basic Authentication
-AuthType             basic
-AuthName             "Protected Intranet Area"
-AuthUserFile         conf/protected.passwd
-Require              valid-user
-&lt;/Directory&gt;
-
-</pre>
-</td>
-                 </tr>
-             </table>
-         </td>
-
-         <td bgcolor="#cccccc"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="1" height="1" align="bottom" border="0"></td>
-    </tr>
-    <tr>
-         <td colspan="5" bgcolor="#cccccc"><img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="1" height="1" align="bottom" border="0"></td>
-    </tr>
-</table>
-</ul>
-
-<p><!--#include virtual="footer.html" --> </p>
-  </body>
-</html>
diff --git a/docs/manual/ssl/ssl_howto.wml b/docs/manual/ssl/ssl_howto.wml
deleted file mode 100644
index 0ce6dfc..0000000
--- a/docs/manual/ssl/ssl_howto.wml
+++ /dev/null
@@ -1,325 +0,0 @@
-
-#use "ssl_template.inc" title="HowTo" tag=howto num=5
-
-<page_prev name="Compatibility" url="ssl_compat.html">
-<page_next name="F.A.Q. List"   url="ssl_faq.html">
-
-#use wml::std::toc style=nbsp
-
-<quotation width=200 author="Standard textbook cookie">
-``The solution of this problem is trivial 
-  and is left as an exercise for the reader.''
-</quotation>
-
-<p>
-<table cellspacing=0 cellpadding=0 border=0>
-<tr valign=bottom>
-<td>
-
-<big H>ow to solve particular security constraints for an SSL-aware webserver
-is not always obvious because of the coherences between SSL, HTTP and Apache's
-way of processing requests. This chapter gives instructions on how to solve
-such typical situations. Treat is as a first step to find out the final
-solution, but always try to understand the stuff before you use it. Nothing is
-worse than using a security solution without knowing its restrictions and
-coherences.
-
-</td>
-<td>
-&nbsp;&nbsp;
-</td>
-<td>
-
-<div align=right>
-<table cellspacing=0 cellpadding=5 border=0 bgcolor="#ccccff" width=300>
-<tr>
-<td bgcolor="#333399">
-<font face="Arial,Helvetica" color="#ccccff">
-<b>Table Of Contents</b>
-</font>
-</td>
-</tr>
-<tr>
-<td>
-<font face="Arial,Helvetica" size=-1>
-<toc>
-</font>
-</td>
-</tr>
-</table>
-</div>
-
-</td>
-</tr>
-</table>
-
-#   container tag for layouting a question
-<define-tag howto endtag=required>
-<preserve ref>
-<preserve toc>
-<set-var %attributes>
-<p>
-<li><toc_h3 alt="<get-var toc>"></toc_h3>
-    <a name="<get-var ref>"></a>
-    <strong id="howto">%body</strong>\
-    &nbsp;&nbsp;
-    [<a href="http://www.modssl.org/docs/2.8/ssl_howto.html#<get-var ref>"><b>L</b></a>]
-    <p>
-<restore toc>
-<restore ref>
-</define-tag>
-
-<define-tag config endtag=required>
-<preserve file>
-<set-var %attributes>
-<ifeq "<get-var file>" "" <set-var file="httpd.conf">>
-<box header="<font face="Arial,Helvetica" color="#999999"><get-var file></font>"
-     bdwidth=1 bdcolor="#cccccc" bgcolor="#ffffff" fgcolor="#000000">
-<pre>
-%body
-</pre>
-</box>\
-<restore file>
-</define-tag>
-
-<h2>Cipher Suites and Enforced Strong Security</h2>
-
-<ul>
-
-<howto ref="cipher-sslv2" toc="SSLv2 only server">
-How can I create a real SSLv2-only server?
-</howto>
-
-The following creates an SSL server which speaks only the SSLv2 protocol and
-its ciphers.
-
-<p>
-<config>
-SSLProtocol -all +SSLv2
-SSLCipherSuite SSLv2:+HIGH:+MEDIUM:+LOW:+EXP
-</config>
-
-<howto ref="cipher-strong" toc="strong encryption only server">
-How can I create an SSL server which accepts strong encryption only?
-</howto>
-
-The following enables only the seven strongest ciphers:
-
-<p>
-<config>
-SSLProtocol all
-SSLCipherSuite HIGH:MEDIUM
-</config>
-
-<howto ref="cipher-sgc" toc="server gated cryptography">
-How can I create an SSL server which accepts strong encryption only,
-but allows export browsers to upgrade to stronger encryption?
-</howto>
-
-This facility is called Server Gated Cryptography (SGC) and details you can
-find in the <code>README.GlobalID</code> document in the mod_ssl distribution.
-In short: The server has a Global ID server certificate, signed by a special
-CA certificate from Verisign which enables strong encryption in export
-browsers. This works as following: The browser connects with an export cipher,
-the server sends its Global ID certificate, the browser verifies it and
-subsequently upgrades the cipher suite before any HTTP communication takes
-place. The question now is: How can we allow this upgrade, but enforce strong
-encryption. Or in other words: Browser either have to initially connect with
-strong encryption or have to upgrade to strong encryption, but are not allowed
-to keep the export ciphers. The following does the trick:
-
-<p>
-<config>
-\#   allow all ciphers for the inital handshake,
-\#   so export browsers can upgrade via SGC facility
-SSLCipherSuite ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
-&lt;Directory /usr/local/apache/htdocs&gt;
-\#   but finally deny all browsers which haven't upgraded
-SSLRequire %{SSL_CIPHER_USEKEYSIZE} &gt;= 128
-&lt;/Directory&gt;
-</config>
-
-<howto ref="cipher-perdir" toc="stronger per-directory requirements">
-How can I create an SSL server which accepts all types of ciphers in general,
-but requires a strong ciphers for access to a particular URL?
-</howto>
-
-Obviously you cannot just use a server-wide <code>SSLCipherSuite</code> which
-restricts the ciphers to the strong variants. But mod_ssl allows you to
-reconfigure the cipher suite in per-directory context and automatically forces
-a renegotiation of the SSL parameters to meet the new configuration. So, the
-solution is:
-
-<p>
-<config>
-\#   be liberal in general
-SSLCipherSuite ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
-&lt;Location /strong/area&gt;
-\#   but https://hostname/strong/area/ and below requires strong ciphers
-SSLCipherSuite HIGH:MEDIUM
-&lt;/Location&gt;
-</config>
-
-</ul>
-
-<h2>Client Authentication and Access Control</h2>
-
-<ul>
-
-<howto ref="auth-simple" toc="simple certificate-based client authentication">
-How can I authenticate clients based on certificates when I know all my
-clients?
-</howto>
-
-When you know your user community (i.e. a closed user group situation), as
-it's the case for instance in an Intranet, you can use plain certificate
-authentication. All you have to do is to create client certificates signed by
-your own CA certificate <code>ca.crt</code> and then verifiy the clients
-against this certificate.
-
-<p>
-<config>
-\#   require a client certificate which has to be directly
-\#   signed by our CA certificate in ca.crt
-SSLVerifyClient require
-SSLVerifyDepth 1
-SSLCACertificateFile conf/ssl.crt/ca.crt
-</config>
-
-<howto ref="auth-selective" toc="selective certificate-based client authentication">
-How can I authenticate my clients for a particular URL based on certificates
-but still allow arbitrary clients to access the remaining parts of the server?
-</howto>
-
-For this we again use the per-directory reconfiguration feature of mod_ssl:
-
-<p>
-<config>
-SSLVerifyClient none
-SSLCACertificateFile conf/ssl.crt/ca.crt
-&lt;Location /secure/area&gt;
-SSLVerifyClient require
-SSLVerifyDepth 1
-&lt;/Location&gt;
-</config>
-
-<howto ref="auth-particular" toc="particular certificate-based client authentication">
-How can I authenticate only particular clients for a some URLs based
-on certificates but still allow arbitrary clients to access the remaining
-parts of the server?
-</howto>
-
-The key is to check for various ingredients of the client certficate.  Usually
-this means to check the whole or part of the Distinguished Name (DN) of the
-Subject.  For this two methods exists: The <code>mod_auth</code> based variant
-and the <code>SSLRequire</code> variant. The first method is good when the
-clients are of totally different type, i.e. when their DNs have no common
-fields (usually the organisation, etc.). In this case you've to establish a
-password database containing <em>all</em> clients. The second method is better
-when your clients are all part of a common hierarchy which is encoded into the
-DN. Then you can match them more easily.
-
-<p>
-The first method:
-
-<p>
-<config file="/usr/local/apache/conf/httpd.conf">
-SSLVerifyClient      none
-&lt;Directory /usr/local/apache/htdocs/secure/area&gt;
-SSLVerifyClient      require
-SSLVerifyDepth       5
-SSLCACertificateFile conf/ssl.crt/ca.crt
-SSLCACertificatePath conf/ssl.crt
-SSLOptions           +FakeBasicAuth
-SSLRequireSSL
-AuthName             "Snake Oil Authentication"
-AuthType             Basic
-AuthUserFile         /usr/local/apache/conf/httpd.passwd
-require              valid-user
-&lt;/Directory&gt;
-</config>
-
-<p>
-<config file="/usr/local/apache/conf/httpd.passwd">
-/C=DE/L=Munich/O=Snake Oil, Ltd./OU=Staff/CN=Foo:xxj31ZMTZzkVA
-/C=US/L=S.F./O=Snake Oil, Ltd./OU=CA/CN=Bar:xxj31ZMTZzkVA
-/C=US/L=L.A./O=Snake Oil, Ltd./OU=Dev/CN=Quux:xxj31ZMTZzkVA
-</config>
-
-<p>
-The second method:
-
-<p>
-<config>
-SSLVerifyClient      none
-&lt;Directory /usr/local/apache/htdocs/secure/area&gt;
-SSLVerifyClient      require
-SSLVerifyDepth       5
-SSLCACertificateFile conf/ssl.crt/ca.crt
-SSLCACertificatePath conf/ssl.crt
-SSLOptions           +FakeBasicAuth
-SSLRequireSSL
-SSLRequire           %{SSL_CLIENT_S_DN_O}  eq "Snake Oil, Ltd." and \\
-                     %{SSL_CLIENT_S_DN_OU} in {"Staff", "CA", "Dev"} 
-&lt;/Directory&gt;
-</config>
-
-<howto ref="auth-intranet" toc="intranet vs. internet authentication"> How can
-I require HTTPS with strong ciphers and either basic authentication or client
-certificates for access to a subarea on the Intranet website for clients
-coming from the Internet but still allow plain HTTP access for clients on the
-Intranet?
-</howto>
-
-Let us assume the Intranet can be distinguished through the IP network
-192.160.1.0/24 and the subarea on the Intranet website has the URL
-<tt>/subarea</tt>. Then configure the following outside your HTTPS virtual
-host (so it applies to both HTTPS and HTTP):
-
-<p>
-<config>
-SSLCACertificateFile conf/ssl.crt/company-ca.crt
-
-&lt;Directory /usr/local/apache/htdocs&gt;
-\#   Outside the subarea only Intranet access is granted
-Order                deny,allow
-Deny                 from all
-Allow                from 192.168.1.0/24
-&lt;/Directory&gt;
-
-&lt;Directory /usr/local/apache/htdocs/subarea&gt;
-\#   Inside the subarea any Intranet access is allowed
-\#   but from the Internet only HTTPS + Strong-Cipher + Password
-\#   or the alternative HTTPS + Strong-Cipher + Client-Certificate
-
-\#   If HTTPS is used, make sure a strong cipher is used.
-\#   Additionally allow client certs as alternative to basic auth.
-SSLVerifyClient      optional
-SSLVerifyDepth       1
-SSLOptions           +FakeBasicAuth +StrictRequire
-SSLRequire           %{SSL_CIPHER_USEKEYSIZE} &gt;= 128
-
-\#   Force clients from the Internet to use HTTPS
-RewriteEngine        on
-RewriteCond          %{REMOTE_ADDR} !^192\.168\.1\.[0-9]+$
-RewriteCond          %{HTTPS} !=on
-RewriteRule          .* - [F]
-
-\#   Allow Network Access and/or Basic Auth
-Satisfy              any
-
-\#   Network Access Control
-Order                deny,allow
-Deny                 from all
-Allow                192.168.1.0/24
-
-\#   HTTP Basic Authentication
-AuthType             basic
-AuthName             "Protected Intranet Area"
-AuthUserFile         conf/protected.passwd
-Require              valid-user
-&lt;/Directory&gt;
-</config>
-
-</ul>
-
diff --git a/docs/manual/ssl/ssl_intro.gfont000.gif b/docs/manual/ssl/ssl_intro.gfont000.gif
deleted file mode 100644
index c64553f..0000000
--- a/docs/manual/ssl/ssl_intro.gfont000.gif
+++ /dev/null
Binary files differ
diff --git a/docs/manual/ssl/ssl_intro.html b/docs/manual/ssl/ssl_intro.html
deleted file mode 100644
index 248e62c..0000000
--- a/docs/manual/ssl/ssl_intro.html
+++ /dev/null
@@ -1,646 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-<title>Apache SSL/TLS Encryption: An Introduction</title>
-<style type="text/css"><!--
-#H {
-}
-#D {
-    background-color: #f0f0f0;
-}
---></style>
-</head>
-
-<body bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#000080" alink="#FF0000"> 
-<!--#include virtual="header.html" -->
-
-<h1 align="CENTER">SSL/TLS Strong Encryption: An Introduction</h1>
-
-<div align="right">
-<table cellspacing="0" cellpadding="0" width="400" summary="">
-<tr>
-<td>
-<em>
-``The nice thing about standards is that there are so many to choose from.
-And if you really don't like all the standards you just have to wait another
-year until the one arises you are looking for.''
-</em>
-</td>
-</tr>
-<tr>
-<td align="right">
-<font size="-1">
-A. Tanenbaum, ``Introduction to Computer Networks''
-</font>
-</td>
-</tr>
-</table>
-</div>
-<p>
-As an introduction this chapter is aimed at readers who are familiar
-with the Web, HTTP, and Apache, but are not security experts. It is not
-intended to be a definitive guide to the SSL protocol, nor does it discuss
-specific techniques for managing certificates in an organization, or the
-important legal issues of patents and import and export restrictions. Rather,
-it is intended to provide a common background to mod_ssl users by pulling
-together various concepts, definitions, and examples as a starting point for
-further exploration.
-<p>
-The presented content is mainly derived, with permission by the author, from
-the article <a
-href="http://www.ultranet.com/~fhirsch/Papers/wwwj/index.html"><em>Introducing SSL
-and Certificates using SSLeay</em></a> from <a
-href="http://www.ultranet.com/~fhirsch/">Frederick J. Hirsch</a>, of The Open
-Group Research Institute, which was published in <a
-href="http://www.ora.com/catalog/wjsum97/"><em>Web Security: A Matter of
-Trust</em></a>, World Wide Web Journal, Volume 2, Issue 3, Summer 1997.
-Please send any postive feedback to <a
-href="mailto:fjh@alum.mit.edu">Frederick Hirsch</a> (the original
-article author) and all negative feedback to <a
-href="mailto:rse@engelschall.com">Ralf S. Engelschall</a> (the mod_ssl
-author).
-</td>
-<td>
-&nbsp;&nbsp;
-</td>
-<td>
-
-<ul>
-<li><a href="#ToC1">Cryptographic Techniques</a></li>
-<li><a href="#ToC2">Cryptographic Algorithms</a></li>
-<li><a href="#ToC3">Message Digests</a></li>
-<li><a href="#ToC4">Digital Signatures</a></li>
-<li><a href="#ToC5">Certificates</a></li>
-<li><a href="#ToC6">Certificate Contents</a></li>
-<li><a href="#ToC7">Certificate Authorities</a></li>
-<li><a href="#ToC8">Certificate Chains</a></li>
-<li><a href="#ToC9">Creating a Root-Level CA</a></li>
-<li><a href="#ToC10">Certificate Management</a></li>
-<li><a href="#ToC11">Secure Sockets Layer (SSL)</a></li>
-<li><a href="#ToC12">Session Establishment</a></li>
-<li><a href="#ToC13">Key Exchange Method</a></li>
-<li><a href="#ToC14">Cipher for Data Transfer</a></li>
-<li><a href="#ToC15">Digest Function</a></li>
-<li><a href="#ToC16">Handshake Sequence Protocol</a></li>
-<li><a href="#ToC17">Data Transfer</a></li>
-<li><a href="#ToC18">Securing HTTP Communication</a></li>
-<li><a href="#ToC19">References</a></li>
-</ul>
-
-<h2><a name="ToC1">Cryptographic Techniques</a></h2>
-Understanding SSL requires an understanding of cryptographic algorithms,
-message digest functions (aka. one-way or hash functions), and digital
-signatures. These techniques are the subject of entire books (see for instance
-[<a href="#AC96">AC96</a>]) and provide the basis for privacy, integrity, and
-authentication.
-<h3><a name="ToC2">Cryptographic Algorithms</a></h3>
-Suppose Alice wants to send a message to her bank to transfer some money.
-Alice would like the message to be private, since it will include information
-such as her account number and transfer amount. One solution is to use a
-cryptographic algorithm, a technique that would transform her message into an
-encrypted form, unreadable except by those it is intended for. Once in this
-form, the message may only be interpreted through the use of a secret key.
-Without the key the message is useless: good cryptographic algorithms make it
-so difficult for intruders to decode the original text that it isn't worth
-their effort.
-<p>
-There are two categories of cryptographic algorithms:
-conventional and public key.
-<ul>
-<li><em>Conventional cryptography</em>, also known as symmetric
-cryptography, requires the sender and receiver to share a key: a secret
-piece of information that may be used to encrypt or decrypt a message.
-If this key is secret, then nobody other than the sender or receiver may
-read the message. If Alice and the bank know a secret key, then they
-may send each other private messages. The task of privately choosing a key
-before communicating, however, can be problematic.
-<p>
-<li><em>Public key cryptography</em>, also known as asymmetric cryptography,
-solves the key exchange problem by defining an algorithm which uses two keys,
-each of which may be used to encrypt a message. If one key is used to encrypt
-a message then the other must be used to decrypt it. This makes it possible
-to receive secure messages by simply publishing one key (the public key) and
-keeping the other secret (the private key).
-<p>
-Anyone may encrypt a message using the public key, but only the owner of the
-private key will be able to read it. In this way, Alice may send private
-messages to the owner of a key-pair (the bank), by encrypting it using their
-public key. Only the bank will be able to decrypt it.
-</ul>
-<h3><a name="ToC3">Message Digests</a></h3>
-Although Alice may encrypt her message to make it private, there is still a
-concern that someone might modify her original message or substitute
-it with a different one, in order to transfer the money to themselves, for
-instance. One way of guaranteeing the integrity of Alice's message is to
-create a concise summary of her message and send this to the bank as well.
-Upon receipt of the message, the bank creates its own summary and compares it
-with the one Alice sent. If they agree then the message was received intact.
-<p>
-A summary such as this is called a <em>message digest</em>, <em>one-way
-function</em> or <em>hash function</em>. Message digests are used to create
-short, fixed-length representations of longer, variable-length messages.
-Digest algorithms are designed to produce unique digests for different
-messages. Message digests are designed to make it too difficult to determine
-the message from the digest, and also impossible to find two different
-messages which create the same digest -- thus eliminating the possibility of
-substituting one message for another while maintaining the same digest.
-<p>
-Another challenge that Alice faces is finding a way to send the digest to the
-bank securely; when this is achieved, the integrity of the associated message
-is assured. One way to to this is to include the digest in a digital
-signature.
-<h3><a name="ToC4">Digital Signatures</a></h3>
-When Alice sends a message to the bank, the bank needs to ensure that the
-message is really from her, so an intruder does not request a transaction
-involving her account. A <em>digital signature</em>, created by Alice and
-included with the message, serves this purpose.
-<p>
-Digital signatures are created by encrypting a digest of the message,
-and other information (such as a sequence number) with the sender's
-private key. Though anyone may <em>decrypt</em> the signature using the public
-key, only the signer knows the private key. This means that only they may
-have signed it. Including the digest in the signature means the signature is
-only good for that message; it also ensures the integrity of the message since
-no one can change the digest and still sign it.
-<p>
-To guard against interception and reuse of the signature by an intruder at a
-later date, the signature contains a unique sequence number. This protects
-the bank from a fraudulent claim from Alice that she did not send the message
--- only she could have signed it (non-repudiation).
-<h2><a name="ToC5">Certificates</a></h2>
-Although Alice could have sent a private message to the bank, signed it, and
-ensured the integrity of the message, she still needs to be sure that she is
-really communicating with the bank. This means that she needs to be sure that
-the public key she is using corresponds to the bank's private key. Similarly,
-the bank also needs to verify that the message signature really corresponds to
-Alice's signature.
-<p>
-If each party has a certificate which validates the other's identity, confirms
-the public key, and is signed by a trusted agency, then they both will be
-assured that they are communicating with whom they think they are. Such a
-trusted agency is called a <em>Certificate Authority</em>, and certificates are
-used for authentication.
-<h3><a name="ToC6">Certificate Contents</a></h3>
-A certificate associates a public key with the real identity of an individual,
-server, or other entity, known as the subject. As shown in <a
-href="#table1">Table 1</a>, information about the subject includes identifying
-information (the distinguished name), and the public key. It also includes
-the identification and signature of the Certificate Authority that issued the
-certificate, and the period of time during which the certificate is valid. It
-may have additional information (or extensions) as well as administrative
-information for the Certificate Authority's use, such as a serial number.
-<p>
-<div align="center">
-<a name="table1"></a>
-<table width="600" cellspacing="0" cellpadding="1" border="0" summary="">
-<caption align="bottom" id="sf">Table 1: Certificate Information</caption>
-<tr><td bgcolor="#cccccc">
-<table width="598" cellpadding="5" cellspacing="0" border="0" summary="">
-<tr><td valign="top" align="center" bgcolor="#ffffff">
-<table summary="">
-<tr valign="top"><td><b>Subject:</b></td>
-<td>Distinguished Name, Public Key</td></tr>
-<tr valign="top"><td><b>Issuer:</b></td>
-<td>Distinguished Name, Signature</td></tr>
-<tr><td><b>Period of Validity:</b></td>
-<td>Not Before Date, Not After Date</td></tr>
-<tr><td><b>Administrative Information:</b></td>
-<td>Version, Serial Number</td></TR>
-<tr><td><b>Extended Information:</b></td>
-<td>Basic Contraints, Netscape Flags, etc.</td></TR>
-</table>
-</td>
-</tr></table>
-</td></tr></table>
-</div>
-<p>
-A distinguished name is used to provide an identity in a specific context --
-for instance, an individual might have a personal certificate as well as one
-for their identity as an employee. Distinguished names are defined by the
-X.509 standard [<a href="#X509">X509</A>], which defines the fields, field
-names, and abbreviations used to refer to the fields
-(see <a href="#table2">Table 2</a>).
-<p>
-<div align="center">
-<a name="table2"></a>
-<table width="600" cellspacing="0" cellpadding="1" border="0" summary="">
-<caption align="bottom" id="sf">Table 2: Distinguished Name Information</caption>
-<tr><td bgcolor="#cccccc">
-<table width="598" cellpadding="5" cellspacing="0" border="0" summary="">
-<tr><td valign="top" align="center" bgcolor="#ffffff">
-<table summary="">
-<tr valign="top"><td><b>DN Field:</b></td><td><b>Abbrev.:</b></td><td><b>Description:</b></td>
-<td><b>Example:</b></td>
-</t>
-<tr valign="top"><td>Common Name</td><td>CN</td>
-<td>Name being certified</td><td>CN=Joe Average</td></tr>
-<tr valign="top"><td>Organization or Company</td><td>O</td>
-<td>Name is associated with this<br>organization</td><td>O=Snake Oil, Ltd.</td></tr>
-<tr valign="top"><td>Organizational Unit</td><td>OU</td>
-<td>Name is associated with this <br>organization unit, such as a department</td><td>OU=Research Institute</td></tr>
-<tr valign="top"><td>City/Locality</td><td>L</td>
-<td>Name is located in this City</td><td>L=Snake City</td></tr>
-<tr valign="top"><td>State/Province</td><td>ST</td>
-<td>Name is located in this State/Province</td><td>ST=Desert</td></tr>
-<tr valign="top"><td>Country</td><td>C</td>
-<td>Name is located in this Country (ISO code)</td><td>C=XZ</td></tr>
-</table>
-</td>
-</tr></table>
-</td></tr></table>
-</div>
-<p>
-A Certificate Authority may define a policy specifying which distinguished
-field names are optional, and which are required. It may also place
-requirements upon the field contents, as may users of certificates. As an
-example, a Netscape browser requires that the Common Name for a certificate
-representing a server has a name which matches a wildcard pattern for the
-domain name of that server, such as <code>*.snakeoil.com</code>.
-<p>
-The binary format of a certificate is defined using the ASN.1 notation [ <a
-href="#X208">X208</a>] [<a href="#PKCS">PKCS</a>]. This notation defines how to
-specify the contents, and encoding rules define how this information is
-translated into binary form. The binary encoding of the certificate is
-defined using Distinguished Encoding Rules (DER), which are based on the more
-general Basic Encoding Rules (BER). For those transmissions which cannot
-handle binary, the binary form may be translated into an ASCII form by using
-Base64 encoding [<a href="#MIME">MIME</a>]. This encoded version is called PEM
-encoded (the name comes from "Privacy Enhanced Mail"), when placed between
-begin and end delimiter lines as illustrated in <a href="#table3">Table 3</a>.
-<p>
-<div align="center">
-<a name="table3"></a>
-<table width="600" cellspacing="0" cellpadding="1" border="0" summary="">
-<caption align="bottom" id="sf">Table 3: Example of a PEM-encoded certificate (snakeoil.crt)</caption>
-<tr><td bgcolor="#cccccc">
-<table width="598" cellpadding="5" cellspacing="0" border="0" summary="">
-<tr><td valign="top" align="center" bgcolor="#ffffff">
-<table cellspacing="0" cellpadding="0" summary=""><tr><td>
-<div class="code"><pre>
------BEGIN CERTIFICATE-----
-MIIC7jCCAlegAwIBAgIBATANBgkqhkiG9w0BAQQFADCBqTELMAkGA1UEBhMCWFkx
-FTATBgNVBAgTDFNuYWtlIERlc2VydDETMBEGA1UEBxMKU25ha2UgVG93bjEXMBUG
-A1UEChMOU25ha2UgT2lsLCBMdGQxHjAcBgNVBAsTFUNlcnRpZmljYXRlIEF1dGhv
-cml0eTEVMBMGA1UEAxMMU25ha2UgT2lsIENBMR4wHAYJKoZIhvcNAQkBFg9jYUBz
-bmFrZW9pbC5kb20wHhcNOTgxMDIxMDg1ODM2WhcNOTkxMDIxMDg1ODM2WjCBpzEL
-MAkGA1UEBhMCWFkxFTATBgNVBAgTDFNuYWtlIERlc2VydDETMBEGA1UEBxMKU25h
-a2UgVG93bjEXMBUGA1UEChMOU25ha2UgT2lsLCBMdGQxFzAVBgNVBAsTDldlYnNl
-cnZlciBUZWFtMRkwFwYDVQQDExB3d3cuc25ha2VvaWwuZG9tMR8wHQYJKoZIhvcN
-AQkBFhB3d3dAc25ha2VvaWwuZG9tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKB
-gQDH9Ge/s2zcH+da+rPTx/DPRp3xGjHZ4GG6pCmvADIEtBtKBFAcZ64n+Dy7Np8b
-vKR+yy5DGQiijsH1D/j8HlGE+q4TZ8OFk7BNBFazHxFbYI4OKMiCxdKzdif1yfaa
-lWoANFlAzlSdbxeGVHoT0K+gT5w3UxwZKv2DLbCTzLZyPwIDAQABoyYwJDAPBgNV
-HRMECDAGAQH/AgEAMBEGCWCGSAGG+EIBAQQEAwIAQDANBgkqhkiG9w0BAQQFAAOB
-gQAZUIHAL4D09oE6Lv2k56Gp38OBDuILvwLg1v1KL8mQR+KFjghCrtpqaztZqcDt
-2q2QoyulCgSzHbEGmi0EsdkPfg6mp0penssIFePYNI+/8u9HT4LuKMJX15hxBam7
-dUHzICxBVC1lnHyYGjDuAMhe396lYAn8bCld1/L4NMGBCQ==
------END CERTIFICATE-----</pre></div>
-</td></tr></table>
-</td>
-</tr></table>
-</td></tr></table>
-</div>
-<h3><a name="ToC7">Certificate Authorities</a></h3>
-By first verifying the information in a certificate request before granting
-the certificate, the Certificate Authority assures the identity of the private
-key owner of a key-pair. For instance, if Alice requests a personal
-certificate, the Certificate Authority must first make sure that Alice really
-is the person the certificate request claims.
-<h4><a name="ToC8">Certificate Chains</a></h4>
-A Certificate Authority may also issue a certificate for another Certificate
-Authority. When examining a certificate, Alice may need to examine the
-certificate of the issuer, for each parent Certificate Authority, until
-reaching one which she has confidence in. She may decide to trust only
-certificates with a limited chain of issuers, to reduce her risk of a "bad"
-certificate in the chain.
-<h4><a name="ToC9">Creating a Root-Level CA</a></h4>
-As noted earlier, each certificate requires an issuer to assert the validity
-of the identity of the certificate subject, up to the top-level Certificate
-Authority (CA). This presents a problem: Since this is who vouches for the
-certificate of the top-level authority, which has no issuer?
-In this unique case, the certificate is "self-signed", so the issuer of the
-certificate is the same as the subject. As a result, one must exercise extra
-care in trusting a self-signed certificate. The wide publication of a public
-key by the root authority reduces the risk in trusting this key -- it would be
-obvious if someone else publicized a key claiming to be the authority.
-Browsers are preconfigured to trust well-known certificate authorities.
-<p>
-A number of companies, such as <a href="http://www.thawte.com/">Thawte</a> and
-<a href="http://www.verisign.com/">VeriSign</a> have established themselves as
-Certificate Authorities. These companies provide the following services:
-<ul>
-<li>Verifying certificate requests
-<li>Processing certificate requests
-<li>Issuing and managing certificates
-</ul>
-<p>
-It is also possible to create your own Certificate Authority. Although risky
-in the Internet environment, it may be useful within an Intranet where the
-organization can easily verify the identities of individuals and servers.
-<h4><a name="ToC10">Certificate Management</a></h4>
-Establishing a Certificate Authority is a responsibility which requires a
-solid administrative, technical, and management framework.
-Certificate Authorities not only issue certificates, they also manage them --
-that is, they determine how long certificates are valid, they renew them, and
-they keep lists of certificates that have already been issued but are no
-longer valid (Certificate Revocation Lists, or CRLs).
-Say Alice is entitled to a certificate as an employee of a company. Say too,
-that the certificate needs to be revoked when Alice leaves the company. Since
-certificates are objects that get passed around, it is impossible to tell from
-the certificate alone that it has been revoked.
-When examining certificates for validity, therefore, it is necessary to
-contact the issuing Certificate Authority to check CRLs -- this is not usually
-an automated part of the process.
-<p>
-<div align="center"><B>Note:</B></div>
-If you use a Certificate Authority that is not configured into browsers by
-default, it is necessary to load the Certificate Authority certificate into
-the browser, enabling the browser to validate server certificates signed by
-that Certificate Authority. Doing so may be dangerous, since once loaded, the
-browser will accept all certificates signed by that Certificate Authority.
-<h2><a name="ToC11">Secure Sockets Layer (SSL)</a></h2>
-The Secure Sockets Layer protocol is a protocol layer which may be placed
-between a reliable connection-oriented network layer protocol (e.g. TCP/IP)
-and the application protocol layer (e.g. HTTP). SSL provides for secure
-communication between client and server by allowing mutual authentication, the
-use of digital signatures for integrity, and encryption for privacy.
-<p>
-The protocol is designed to support a range of choices for specific algorithms
-used for cryptography, digests, and signatures. This allows algorithm
-selection for specific servers to be made based on legal, export or other
-concerns, and also enables the protocol to take advantage of new algorithms.
-Choices are negotiated between client and server at the start of establishing
-a protocol session.
-<p>
-<div align="center">
-<a name="table4"></a>
-<table width="600" cellspacing="0" cellpadding="1" border="0" summary="">
-<caption align="bottom" id="sf">Table 4: Versions of the SSL protocol</caption>
-<tr><td bgcolor="#cccccc">
-<table width="598" cellpadding="5" cellspacing="0" border="0" summary="">
-<tr><td valign="top" align="center" bgcolor="#ffffff">
-<table summary="">
-<tr valign="top">
-<td><b>Version:</b></td>
-<td><b>Source:</b></td>
-<td><b>Description:</b></td>
-<td><b>Browser Support:</b></td>
-</tr>
-<tr valign="top">
-<td>SSL v2.0</td>
-<td>Vendor Standard (from Netscape Corp.) [<a href="#SSL2">SSL2</a>]</td>
-<td>First SSL protocol for which implementations exists</td>
-<td>- NS Navigator 1.x/2.x<br>
-    - MS IE 3.x<br>
-    - Lynx/2.8+OpenSSL
-</td>
-</tr>
-<tr valign="top">
-<td>SSL v3.0</td>
-<td>Expired Internet Draft (from Netscape Corp.) [<a href="#SSL3">SSL3</a>]</td>
-<td>Revisions to prevent specific security attacks, add non-RSA ciphers, and support for certificate chains</td>
-<td>- NS Navigator 2.x/3.x/4.x<br>
-    - MS IE 3.x/4.x<br>
-    - Lynx/2.8+OpenSSL
-</td>
-</tr>
-<tr valign="top">
-<td>TLS v1.0</td>
-<td>Proposed Internet Standard (from IETF) [<a href="#TLS1">TLS1</a>]</td>
-<td>Revision of SSL 3.0 to update the MAC layer to HMAC, add block padding for
-    block ciphers, message order standardization and more alert messages.
-</td>
-<td>- Lynx/2.8+OpenSSL</td>
-</table>
-</td>
-</tr></table>
-</td></tr></table>
-</div>
-<p>
-There are a number of versions of the SSL protocol, as shown in <a
-href="#table4">Table 4</a>. As noted there, one of the benefits in SSL 3.0 is
-that it adds support of certificate chain loading. This feature allows a
-server to pass a server certificate along with issuer certificates to the
-browser. Chain loading also permits the browser to validate the server
-certificate, even if Certificate Authority certificates are not installed for
-the intermediate issuers, since they are included in the certificate chain.
-SSL 3.0 is the basis for the Transport Layer Security [<A
-HREF="#TLS1">TLS</A>] protocol standard, currently in development by the
-Internet Engineering Task Force (IETF).
-<h3><a name="ToC12">Session Establishment</a></h3>
-The SSL session is established by following a <I>handshake sequence</I>
-between client and server, as shown in <a href="#figure1">Figure 1</a>. This
-sequence may vary, depending on whether the server is configured to provide a
-server certificate or request a client certificate. Though cases exist where
-additional handshake steps are required for management of cipher information,
-this article summarizes one common scenario: see the SSL specification for the
-full range of possibilities.
-<p>
-<div align="center"><b>Note</b></div>
-Once an SSL session has been established it may be reused, thus avoiding the
-performance penalty of repeating the many steps needed to start a session.
-For this the server assigns each SSL session a unique session identifier which
-is cached in the server and which the client can use on forthcoming
-connections to reduce the handshake (until the session identifer expires in
-the cache of the server).
-<p>
-<div align="center">
-<a name="figure1"></a>
-<table width="600" cellspacing="0" cellpadding="1" border="0" summary="">
-<caption align="bottom" id="sf">Figure 1: Simplified SSL Handshake Sequence</caption>
-<tr><td bgcolor="#cccccc">
-<table width="598" cellpadding="5" cellspacing="0" border="0" summary="">
-<tr><td valign="top" align="center" bgcolor="#ffffff">
-<img src="ssl_intro_fig1.gif" alt="" width="423" height="327">
-</td>
-</tr></table>
-</td></tr></table>
-</div>
-<p>
-The elements of the handshake sequence, as used by the client and server, are
-listed below:
-<ol>
-<li>Negotiate the Cipher Suite to be used during data transfer
-<li>Establish and share a session key between client and server
-<li>Optionally authenticate the server to the client
-<li>Optionally authenticate the client to the server
-</ol>
-<p>
-The first step, Cipher Suite Negotiation, allows the client and server to
-choose a Cipher Suite supportable by both of them. The SSL3.0 protocol
-specification defines 31 Cipher Suites. A Cipher Suite is defined by the
-following components:
-<ul>
-<li>Key Exchange Method
-<li>Cipher for Data Transfer
-<li>Message Digest for creating the Message Authentication Code (MAC)
-</ul>
-These three elements are described in the sections that follow.
-<h3><a name="ToC13">Key Exchange Method</a></h3>
-The key exchange method defines how the shared secret symmetric cryptography
-key used for application data transfer will be agreed upon by client and
-server. SSL 2.0 uses RSA key exchange only, while SSL 3.0 supports a choice of
-key exchange algorithms including the RSA key exchange when certificates are
-used, and Diffie-Hellman key exchange for exchanging keys without certificates
-and without prior communication between client and server.
-<p>
-One variable in the choice of key exchange methods is digital signatures --
-whether or not to use them, and if so, what kind of signatures to use.
-Signing with a private key provides assurance against a
-man-in-the-middle-attack during the information exchange used in generating
-the shared key [<a href="#AC96">AC96</a>, p516].
-<h3><a name="ToC14">Cipher for Data Transfer</a></h3>
-SSL uses the conventional cryptography algorithm (symmetric cryptography)
-described earlier for encrypting messages in a session. There are nine
-choices, including the choice to perform no encryption:
-<ul>
-<li>No encryption
-<li>Stream Ciphers
-    <ul>
-    <li>RC4 with 40-bit keys
-    <li>RC4 with 128-bit keys
-    </ul>
-<li>CBC Block Ciphers
-    <ul>
-    <li>RC2 with 40 bit key
-    <li>DES with 40 bit key
-    <li>DES with 56 bit key
-    <li>Triple-DES with 168 bit key
-    <li>Idea (128 bit key)
-    <li>Fortezza (96 bit key)
-    </ul>
-</ul>
-Here "CBC" refers to Cipher Block Chaining, which means that a portion of the
-previously encrypted cipher text is used in the encryption of the current
-block. "DES" refers to the Data Encryption Standard [<a href="#AC96">AC96</a>,
-ch12], which has a number of variants (including DES40 and 3DES_EDE). "Idea"
-is one of the best and cryptographically strongest available algorithms, and
-"RC2" is a proprietary algorithm from RSA DSI [<a href="#AC96">AC96</a>,
-ch13].
-<h3><a name="ToC15">Digest Function</a></h3>
-The choice of digest function determines how a digest is created from a record
-unit. SSL supports the following:
-<ul>
-<li>No digest (Null choice)
-<li>MD5, a 128-bit hash
-<li>Secure Hash Algorithm (SHA-1), a 160-bit hash
-</ul>
-The message digest is used to create a Message Authentication Code (MAC) which
-is encrypted with the message to provide integrity and to prevent against
-replay attacks.
-<h3><a name="ToC16">Handshake Sequence Protocol</a></h3>
-The handshake sequence uses three protocols:
-<ul>
-<li>The <em>SSL Handshake Protocol</em>
-    for performing the client and server SSL session establishment.
-<li>The <em>SSL Change Cipher Spec Protocol</em> for actually establishing agreement
-    on the Cipher Suite for the session.
-<li>The <em>SSL Alert Protocol</em> for
-    conveying SSL error messages between client and server.
-</ul>
-These protocols, as well as application protocol data, are encapsulated in the
-<em>SSL Record Protocol</em>, as shown in <a href="#figure2">Figure 2</a>. An
-encapsulated protocol is transferred as data by the lower layer protocol,
-which does not examine the data. The encapsulated protocol has no knowledge of
-the underlying protocol.
-<p>
-<div align="center">
-<a name="figure2"></a>
-<table width="600" cellspacing="0" cellpadding="1" border="0" summary="">
-<caption align="bottom" id="sf">Figure 2: SSL Protocol Stack</caption>
-<tr><td bgcolor="#cccccc">
-<table width="598" cellpadding="5" cellspacing="0" border="0" summary="">
-<tr><td valign="top" align="center" bgcolor="#ffffff">
-<img src="ssl_intro_fig2.gif" alt="" width="428" height="217">
-</td>
-</tr></table>
-</td></tr></table>
-</div>
-<p>
-The encapsulation of SSL control protocols by the record protocol means that
-if an active session is renegotiated the control protocols will be transmitted
-securely. If there were no session before, then the Null cipher suite is
-used, which means there is no encryption and messages have no integrity
-digests until the session has been established.
-<h3><a name="ToC17">Data Transfer</a></h3>
-The SSL Record Protocol, shown in <a href="#figure3">Figure 3</a>, is used to
-transfer application and SSL Control data between the client and server,
-possibly fragmenting this data into smaller units, or combining multiple
-higher level protocol data messages into single units. It may compress, attach
-digest signatures, and encrypt these units before transmitting them using the
-underlying reliable transport protocol (Note: currently all major SSL
-implementations lack support for compression).
-<p>
-<div align="center">
-<a name="figure3"></a>
-<table width="600" cellspacing="0" cellpadding="1" border="0" summary="">
-<caption align="bottom" id="sf">Figure 3: SSL Record Protocol</caption>
-<tr><td bgcolor="#cccccc">
-<table width="598" cellpadding="5" cellspacing="0" border="0" summary="">
-<tr><td valign="top" align="center" bgcolor="#ffffff">
-<img src="ssl_intro_fig3.gif" alt="" width="423" height="323">
-</td>
-</tr></table>
-</td></tr></table>
-</div>
-<h3><a name="ToC18">Securing HTTP Communication</a></h3>
-One common use of SSL is to secure Web HTTP communication between a browser
-and a webserver. This case does not preclude the use of non-secured HTTP. The
-secure version is mainly plain HTTP over SSL (named HTTPS), but with one major
-difference: it uses the URL scheme <code>https</code> rather than
-<code>http</code> and a different server port (by default 443). This mainly
-is what mod_ssl provides to you for the Apache webserver...
-<h2><a name="ToC19">References</a></h2>
-<ul>
-<p>
-<li><a name="AC96"></a>
-[AC96] Bruce Schneier, <em>Applied Cryptography</em>, 2nd Edition, Wiley,
-       1996. See <a href="http://www.counterpane.com/">http://www.counterpane.com/</a> for
-       various other materials by Bruce Schneier.
-<p>
-<li><a name="X208"></a>
-[X208] ITU-T Recommendation X.208, <em>Specification of Abstract Syntax Notation
-       One (ASN.1)</em>, 1988. See for instance <a
-       href="ftp://ftp.neda.com/pub/itu/x.series/x208.ps">
-       ftp://ftp.neda.com/pub/itu/x.series/x208.ps</a>.
-<p>
-<li><a name="X509"></a>
-[X509] ITU-T Recommendation X.509, <em>The Directory - Authentication
-       Framework</em>, 1988. See for instance <a
-       href="ftp://ftp.bull.com/pub/OSIdirectory/ITUnov96/X.509/97x509final.doc">
-       ftp://ftp.bull.com/pub/OSIdirectory/ITUnov96/X.509/97x509final.doc</a>.
-<p>
-<li><a name="PKCS"></a>
-[PKCS] Kaliski, Burton S., Jr., <em>An Overview of the PKCS Standards</em>, An RSA
-     Laboratories Technical Note, revised November 1, 1993.
-     See <a href="http://www.rsa.com/rsalabs/pubs/PKCS/">
-     http://www.rsa.com/rsalabs/pubs/PKCS/</a>.
-<p>
-<li><a name="MIME"></a>
-[MIME] N. Freed, N. Borenstein, <em>Multipurpose Internet Mail Extensions
-       (MIME) Part One: Format of Internet Message Bodies</em>, RFC2045.
-       See for instance <a href="ftp://ftp.isi.edu/in-notes/rfc2045.txt">
-       ftp://ftp.isi.edu/in-notes/rfc2045.txt</a>.
-<p>
-<li><a name="SSL2"></a>
-[SSL2] Kipp E.B. Hickman, <em>The SSL Protocol</em>, 1995.
-       See <a href="http://www.netscape.com/eng/security/SSL_2.html">
-       http://www.netscape.com/eng/security/SSL_2.html</a>.
-<p>
-<li><a name="SSL3"></a>
-[SSL3] Alan O. Freier, Philip Karlton, Paul C. Kocher, <em>The SSL Protocol
-       Version 3.0</em>, 1996. See <a
-       href="http://www.netscape.com/eng/ssl3/draft302.txt">
-       http://www.netscape.com/eng/ssl3/draft302.txt</a>.
-<p>
-<li><a name="TLS1"></a>
-[TLS1] Tim Dierks, Christopher Allen, <em>The TLS Protocol Version 1.0</em>,
-       1997. See <a
-       href="ftp://ftp.ietf.org/internet-drafts/draft-ietf-tls-protocol-06.txt">
-       ftp://ftp.ietf.org/internet-drafts/draft-ietf-tls-protocol-06.txt</a>.
-</ul>
-<p><!--#include virtual="footer.html" --> </p>
-  </body>
-</html>
diff --git a/docs/manual/ssl/ssl_intro.wml b/docs/manual/ssl/ssl_intro.wml
deleted file mode 100644
index 2d94382..0000000
--- a/docs/manual/ssl/ssl_intro.wml
+++ /dev/null
@@ -1,644 +0,0 @@
-
-#use "ssl_template.inc" title="Introduction" tag=intro num=2 
-
-<page_prev name="Overview"  url="ssl_overview.html">
-<page_next name="Reference" url="ssl_reference.html">
-
-#use wml::std::toc style=nbsp
-
-<quotation width=400 
-           author="A. Tanenbaum, ``Introduction to Computer Networks''">
-``The nice thing about standards is that there are so many to choose from.
-And if you really don't like all the standards you just have to wait another
-year until the one arises you are looking for.''
-</quotation>
-
-<p>
-<table cellspacing=0 cellpadding=0 border=0>
-<tr valign=bottom>
-<td>
-
-<big A>s an introduction this chapter is aimed at readers who are familiar
-with the Web, HTTP, and Apache, but are not security experts. It is not
-intended to be a definitive guide to the SSL protocol, nor does it discuss
-specific techniques for managing certificates in an organization, or the
-important legal issues of patents and import and export restrictions. Rather,
-it is intended to provide a common background to mod_ssl users by pulling
-together various concepts, definitions, and examples as a starting point for
-further exploration.
-
-<p>
-The presented content is mainly derived, with permission by the author, from
-the article <a
-href="http://www.ultranet.com/~fhirsch/Papers/wwwj/index.html"><em>Introducing SSL
-and Certificates using SSLeay</em></a> from <a
-href="http://www.ultranet.com/~fhirsch/">Frederick J. Hirsch</a>, of The Open
-Group Research Institute, which was published in <a
-href="http://www.ora.com/catalog/wjsum97/"><em>Web Security: A Matter of
-Trust</em></a>, World Wide Web Journal, Volume 2, Issue 3, Summer 1997.
-Please send any postive feedback to <a
-href="mailto:fjh@alum.mit.edu">Frederick Hirsch</a> (the original
-article author) and all negative feedback to <a
-href="mailto:rse@engelschall.com">Ralf S. Engelschall</a> (the mod_ssl
-author).
-
-</td>
-<td>
-&nbsp;&nbsp;
-</td>
-<td>
-
-<div align=right>
-<table cellspacing=0 cellpadding=5 border=0 bgcolor="#ccccff">
-<tr>
-<td bgcolor="#333399">
-<font face="Arial,Helvetica" color="#ccccff">
-<b>Table Of Contents</b>
-</font>
-</td>
-</tr>
-<tr>
-<td>
-<font face="Arial,Helvetica" size=-1>
-<toc>
-</font>
-</td>
-</tr>
-</table>
-</div>
-
-</td>
-</tr>
-</table>
-
-<h2>Cryptographic Techniques</h2>
-
-Understanding SSL requires an understanding of cryptographic algorithms,
-message digest functions (aka. one-way or hash functions), and digital
-signatures. These techniques are the subject of entire books (see for instance
-[<a href="#AC96">AC96</a>]) and provide the basis for privacy, integrity, and
-authentication.
-
-<h3>Cryptographic Algorithms</h3>
-
-Suppose Alice wants to send a message to her bank to transfer some money.
-Alice would like the message to be private, since it will include information
-such as her account number and transfer amount.  One solution is to use a
-cryptographic algorithm, a technique that would transform her message into an
-encrypted form, unreadable except by those it is intended for.  Once in this
-form, the message may only be interpreted through the use of a secret key.
-Without the key the message is useless: good cryptographic algorithms make it
-so difficult for intruders to decode the original text that it isn't worth
-their effort.
-
-<p>
-There are two categories of cryptographic algorithms:
-conventional and public key.
-
-<ul>
-<li><em>Conventional cryptography</em>, also known as symmetric 
-cryptography, requires the sender and receiver to share a key: a secret
-piece of information that may be used to encrypt or decrypt a message.
-If this key is secret, then nobody other than the sender or receiver may
-read the message.  If Alice and the bank know a secret key, then they
-may send each other private messages. The task of privately choosing a key
-before communicating, however, can be problematic.
-
-<p>
-<li><em>Public key cryptography</em>, also known as asymmetric cryptography,
-solves the key exchange problem by defining an algorithm which uses two keys,
-each of which may be used to encrypt a message.  If one key is used to encrypt
-a message then the other must be used to decrypt it.  This makes it possible
-to receive secure messages by simply publishing one key (the public key) and
-keeping the other secret (the private key).  
-
-<p>
-Anyone may encrypt a message using the public key, but only the owner of the
-private key will be able to read it.  In this way,  Alice may send private
-messages to the  owner of a key-pair (the bank), by encrypting it using their
-public key.  Only the bank will be able to decrypt it. 
-</ul>
-
-<h3>Message Digests</h3>
-
-Although Alice may encrypt her message to make it private, there is still a
-concern that someone might modify her original message or substitute
-it with a different one, in order to transfer the money to themselves, for
-instance.  One way of guaranteeing the integrity of Alice's message is to
-create a concise summary of her message and send this to the bank as well.
-Upon receipt of the message, the bank creates its own summary and compares it
-with the one Alice sent. If they agree then the message was received intact.
-
-<p>
-A summary such as this is called a <em>message digest</em>, <em>one-way
-function</em> or <em>hash function</em>. Message digests are used to create
-short, fixed-length representations of longer, variable-length messages.
-Digest algorithms are designed to produce unique digests for different
-messages.  Message digests are designed to make it too difficult to determine
-the message from the digest, and also impossible to find two different
-messages which create the same digest -- thus eliminating the possibility of
-substituting one message for another while maintaining the same digest.
-
-<p>
-Another challenge that Alice faces is finding a way to send the digest to the
-bank securely; when this is achieved, the integrity of the associated message
-is assured. One way to to this is to include the digest in a digital
-signature.
-
-<h3>Digital Signatures</h3>
-
-When Alice sends a message to the bank, the bank needs to ensure that the
-message is really from her, so an intruder does not request a transaction
-involving her account.  A <em>digital signature</em>, created by Alice and
-included with the message, serves this purpose.
-
-<p>
-Digital signatures are created by encrypting a digest of the message,
-and other information (such as a sequence number) with the sender's
-private key. Though anyone may <em>decrypt</em> the signature using the public
-key, only the signer knows the private key.  This means that only they may
-have signed it.  Including the digest in the signature means the signature is
-only good for that message; it also ensures the integrity of the message since
-no one can change the digest and still sign it. 
-
-<p>
-To guard against interception and reuse of the signature by an intruder at a
-later date,  the signature contains a unique sequence number. This protects
-the bank  from a fraudulent claim from Alice that she did not send the message
---  only she could have signed it (non-repudiation).
-
-<h2>Certificates</h2>
-
-Although Alice could have sent a private message to the bank, signed it, and
-ensured the integrity of the message, she still needs to be sure that she is
-really communicating with the bank.  This means that she needs to be sure that
-the public key she is using corresponds to the bank's private key.  Similarly,
-the bank also needs to verify that the message signature really corresponds to
-Alice's signature.
-
-<p>
-If each party has a certificate which validates the other's identity, confirms
-the public key, and is signed by a trusted agency, then they both will be
-assured that they are communicating with whom they think they are. Such a
-trusted agency is called a <em>Certificate Authority</em>, and certificates are
-used for authentication. 
-
-<h3>Certificate Contents</h3>
-
-A certificate associates a public key with the real identity of an individual,
-server, or other entity, known as the subject.  As shown in <a
-href="#table1">Table 1</a>, information about the subject includes identifying
-information (the distinguished name), and the public key.  It also includes
-the identification and signature of the Certificate Authority that issued the
-certificate, and the period of time during which the certificate is valid.  It
-may have additional information (or extensions) as well as administrative
-information for the Certificate Authority's use, such as a serial number.
-
-<p>
-<float name="table1" caption="Table 1: Certificate Information">
-<table>
-<tr valign=top><td><b>Subject:</b></td>
-<td>Distinguished Name, Public Key</td></tr>
-<tr valign=top><td><b>Issuer:</b></td>
-<td>Distinguished Name, Signature</td></tr>
-<tr><td><b>Period of Validity:</b></td>
-<td>Not Before Date, Not After Date</td></tr>
-<tr><td><b>Administrative Information:</b></td>
-<td>Version, Serial Number</td></TR>
-<tr><td><b>Extended Information:</b></td>
-<td>Basic Contraints, Netscape Flags, etc.</td></TR>
-</table>
-</float>
-
-<p>
-A distinguished name is used to provide an identity in a specific context --
-for instance, an individual might have a personal certificate as well as one
-for their identity as an employee.  Distinguished names are defined by the
-X.509 standard [<a href="#X509">X509</A>], which defines the fields, field
-names, and abbreviations used to refer to the fields
-(see <a href="#table2">Table 2</a>). 
-
-<p>
-<float name="table2" caption="Table 2: Distinguished Name Information">
-<table>
-<tr valign=top><td><b>DN Field:</b></td><td><b>Abbrev.:</b></td><td><b>Description:</b></td>
-<td><b>Example:</b></td>
-</t>
-<tr valign=top><td>Common Name</td><td>CN</td>
-<td>Name being certified</td><td>CN=Joe Average</td></tr>
-<tr valign=top><td>Organization or Company</td><td>O</td>
-<td>Name is associated with this<br>organization</td><td>O=Snake Oil, Ltd.</td></tr>
-<tr valign=top><td>Organizational Unit</td><td>OU</td>
-<td>Name is associated with this <br>organization unit, such as a department</td><td>OU=Research Institute</td></tr>
-<tr valign=top><td>City/Locality</td><td>L</td>
-<td>Name is located in this City</td><td>L=Snake City</td></tr>
-<tr valign=top><td>State/Province</td><td>ST</td>
-<td>Name is located in this State/Province</td><td>ST=Desert</td></tr>
-<tr valign=top><td>Country</td><td>C</td>
-<td>Name is located in this Country (ISO code)</td><td>C=XZ</td></tr>
-</table>
-</float>
-
-<p>
-A Certificate Authority may define a policy specifying which distinguished
-field names are optional, and which are required. It may also place
-requirements upon the field contents, as may users of certificates. As an
-example, a Netscape browser requires that the Common Name for a certificate
-representing a server has a name which matches a wildcard pattern for the
-domain name of that server, such as <code>*.snakeoil.com</code>.
-
-<p>
-The binary format of a certificate is defined using the ASN.1 notation [ <a
-href="#X208">X208</a>] [<a href="#PKCS">PKCS</a>]. This notation defines how to
-specify the contents, and encoding rules define how this information is
-translated into binary form.  The binary encoding of the certificate is
-defined using Distinguished Encoding Rules (DER), which are based on the more
-general Basic Encoding Rules (BER).  For those transmissions which cannot
-handle binary, the binary form may be translated into an ASCII form by using
-Base64 encoding [<a href="#MIME">MIME</a>]. This encoded version is called PEM
-encoded (the name comes from "Privacy Enhanced Mail"), when placed between
-begin and end delimiter lines as illustrated in <a href="#table3">Table 3</a>. 
-
-<p>
-<float name="table3" caption="Table 3: Example of a PEM-encoded certificate (snakeoil.crt)">
-<table cellspacing=0 cellpadding=0><tr><td>
-<div class="code"><pre>
------BEGIN CERTIFICATE-----
-MIIC7jCCAlegAwIBAgIBATANBgkqhkiG9w0BAQQFADCBqTELMAkGA1UEBhMCWFkx
-FTATBgNVBAgTDFNuYWtlIERlc2VydDETMBEGA1UEBxMKU25ha2UgVG93bjEXMBUG
-A1UEChMOU25ha2UgT2lsLCBMdGQxHjAcBgNVBAsTFUNlcnRpZmljYXRlIEF1dGhv
-cml0eTEVMBMGA1UEAxMMU25ha2UgT2lsIENBMR4wHAYJKoZIhvcNAQkBFg9jYUBz
-bmFrZW9pbC5kb20wHhcNOTgxMDIxMDg1ODM2WhcNOTkxMDIxMDg1ODM2WjCBpzEL
-MAkGA1UEBhMCWFkxFTATBgNVBAgTDFNuYWtlIERlc2VydDETMBEGA1UEBxMKU25h
-a2UgVG93bjEXMBUGA1UEChMOU25ha2UgT2lsLCBMdGQxFzAVBgNVBAsTDldlYnNl
-cnZlciBUZWFtMRkwFwYDVQQDExB3d3cuc25ha2VvaWwuZG9tMR8wHQYJKoZIhvcN
-AQkBFhB3d3dAc25ha2VvaWwuZG9tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKB
-gQDH9Ge/s2zcH+da+rPTx/DPRp3xGjHZ4GG6pCmvADIEtBtKBFAcZ64n+Dy7Np8b
-vKR+yy5DGQiijsH1D/j8HlGE+q4TZ8OFk7BNBFazHxFbYI4OKMiCxdKzdif1yfaa
-lWoANFlAzlSdbxeGVHoT0K+gT5w3UxwZKv2DLbCTzLZyPwIDAQABoyYwJDAPBgNV
-HRMECDAGAQH/AgEAMBEGCWCGSAGG+EIBAQQEAwIAQDANBgkqhkiG9w0BAQQFAAOB
-gQAZUIHAL4D09oE6Lv2k56Gp38OBDuILvwLg1v1KL8mQR+KFjghCrtpqaztZqcDt
-2q2QoyulCgSzHbEGmi0EsdkPfg6mp0penssIFePYNI+/8u9HT4LuKMJX15hxBam7
-dUHzICxBVC1lnHyYGjDuAMhe396lYAn8bCld1/L4NMGBCQ==
------END CERTIFICATE-----</pre></div>
-</td></tr></table>
-</float>
-
-<h3>Certificate Authorities</h3>
-
-By first verifying the information in a certificate request before granting
-the certificate, the Certificate Authority assures the identity of the private
-key owner of a key-pair.  For instance, if Alice requests a personal
-certificate, the Certificate Authority must first make sure that Alice really
-is the person the certificate request claims.
-
-<h4>Certificate Chains</h4>
-
-A Certificate Authority may also issue a certificate for another Certificate
-Authority.  When examining a certificate, Alice may need to examine the
-certificate of the issuer, for each parent Certificate Authority, until
-reaching one which she has confidence in. She may decide to trust only
-certificates with a limited chain of issuers, to reduce her risk of a "bad"
-certificate in the chain.
-
-<h4>Creating a Root-Level CA</h4>
-
-As noted earlier, each certificate requires an issuer to assert the validity
-of the identity of the certificate subject, up to the top-level Certificate
-Authority (CA). This presents a problem: Since this is who vouches for the
-certificate of the top-level authority, which has no issuer? 
-
-In this unique case, the certificate is "self-signed", so the issuer of the
-certificate is the same as the subject.  As a result, one must exercise extra
-care in trusting a self-signed certificate. The wide publication of a public
-key by the root authority reduces the risk in trusting this key -- it would be
-obvious if someone else publicized a key claiming to be the authority.
-Browsers are preconfigured to trust well-known certificate authorities.
-
-<p>
-A number of companies, such as <a href="http://www.thawte.com/">Thawte</a> and
-<a href="http://www.verisign.com/">VeriSign</a> have established themselves as
-Certificate Authorities. These companies provide the following services:
-
-<ul>
-<li>Verifying certificate requests
-<li>Processing certificate requests
-<li>Issuing and managing certificates
-</ul>
-
-<p>
-It is also possible to create your own Certificate Authority.  Although risky
-in the Internet environment, it may be useful within an Intranet where the
-organization can easily verify the identities of individuals and servers.
-
-<h4>Certificate Management</h4>
-
-Establishing a Certificate Authority is a responsibility which requires a
-solid administrative, technical, and management framework. 
-
-Certificate Authorities not only issue certificates, they also manage them --
-that is, they determine how long certificates are valid, they renew them, and
-they keep lists of certificates that have already been issued but are no
-longer valid (Certificate Revocation Lists, or CRLs).  
-
-Say Alice is entitled to a certificate as an employee of a company. Say too,
-that the certificate needs to be revoked when Alice leaves the company.  Since
-certificates are objects that get passed around, it is impossible to tell from
-the certificate alone that it has been revoked. 
-
-When examining certificates for validity, therefore, it is necessary to
-contact the issuing Certificate Authority to check CRLs -- this is not usually
-an automated part of the process. 
-
-<p>
-<center><B>Note:</B></center>
-If you use a Certificate Authority that is not configured into browsers by
-default, it is necessary to load the Certificate Authority certificate into
-the browser, enabling the browser to validate server certificates signed by
-that Certificate Authority. Doing so may be dangerous, since once loaded, the
-browser will accept all certificates signed by that Certificate Authority.
-
-<h2>Secure Sockets Layer (SSL)</h2>
-
-The Secure Sockets Layer protocol is a protocol layer which may be placed
-between a reliable connection-oriented network layer protocol (e.g. TCP/IP)
-and the application protocol layer (e.g. HTTP). SSL provides for secure
-communication between client and server by allowing mutual authentication, the
-use of digital signatures for integrity, and encryption for privacy. 
-
-<p>
-The protocol is designed to support a range of choices for specific algorithms
-used for cryptography, digests, and signatures. This allows algorithm
-selection for specific servers to be made based on legal, export or other
-concerns, and also enables the protocol to take advantage of new algorithms.
-Choices are negotiated between client and server at the start of establishing
-a protocol session.
-
-<p>
-<float name="table4" caption="Table 4: Versions of the SSL protocol">
-<table>
-<tr valign=top>
-<td><b>Version:</b></td>
-<td><b>Source:</b></td>
-<td><b>Description:</b></td>
-<td><b>Browser Support:</b></td>
-</tr>
-<tr valign=top>
-<td>SSL v2.0</td>
-<td>Vendor Standard (from Netscape Corp.) [<a href="#SSL2">SSL2</a>]</td>
-<td>First SSL protocol for which implementations exists</td>
-<td>- NS Navigator 1.x/2.x<br> 
-    - MS IE 3.x<br>
-    - Lynx/2.8+OpenSSL 
-</td>
-</tr>
-<tr valign=top>
-<td>SSL v3.0</td>
-<td>Expired Internet Draft (from Netscape Corp.) [<a href="#SSL3">SSL3</a>]</td>
-<td>Revisions to prevent specific security attacks, add non-RSA ciphers, and support for certificate chains</td>
-<td>- NS Navigator 2.x/3.x/4.x<br> 
-    - MS IE 3.x/4.x<br>
-    - Lynx/2.8+OpenSSL 
-</td>
-</tr>
-<tr valign=top>
-<td>TLS v1.0</td>
-<td>Proposed Internet Standard (from IETF) [<a href="#TLS1">TLS1</a>]</td>
-<td>Revision of SSL 3.0 to update the MAC layer to HMAC, add block padding for
-    block ciphers, message order standardization and more alert messages.
-</td>
-<td>- Lynx/2.8+OpenSSL</td>
-</table>
-</float>
-
-<p>
-There are a number of versions of the SSL protocol, as shown in <a
-href="#table4">Table 4</a>.  As noted there, one of the benefits in SSL 3.0 is
-that it adds support of certificate chain loading. This feature allows a
-server to pass a server certificate along with issuer certificates to the
-browser. Chain loading also permits the browser to validate the server
-certificate, even if Certificate Authority certificates are not installed for
-the intermediate issuers, since they are included in the certificate chain.
-SSL 3.0 is the basis for the Transport Layer Security [<A
-HREF="#TLS1">TLS</A>] protocol standard, currently in development by the
-Internet Engineering Task Force (IETF).
-
-<h3>Session Establishment</h3>
-
-The SSL session is established by following a <I>handshake sequence</I>
-between client and server, as shown in <a href="#figure1">Figure 1</a>.  This
-sequence may vary, depending on whether the server is configured to provide a
-server certificate or request a client certificate.  Though cases exist where
-additional handshake steps are required for management of cipher information,
-this article summarizes one common scenario: see the SSL specification for the
-full range of possibilities.
-
-<p>
-<center><b>Note</b></center>
-Once an SSL session has been established it may be reused, thus avoiding the
-performance penalty of repeating the many steps needed to start a session.
-For this the server assigns each SSL session a unique session identifier which
-is cached in the server and which the client can use on forthcoming
-connections to reduce the handshake (until the session identifer expires in
-the cache of the server).
-
-<p>
-<float name="figure1" caption="Figure 1: Simplified SSL Handshake Sequence">
-<img src="ssl_intro_fig1.gif" alt="">
-</float>
-
-<p>
-The elements of the handshake sequence, as used by the client and server, are
-listed below:
-
-<ol>
-<li>Negotiate the Cipher Suite to be used during data transfer
-<li>Establish and share a session key between client and server
-<li>Optionally authenticate the server to the client
-<li>Optionally authenticate the client to the server
-</ol>
-
-<p>
-The first step, Cipher Suite Negotiation, allows the client and server to
-choose a Cipher Suite supportable by both of them. The SSL3.0 protocol
-specification defines 31 Cipher Suites. A Cipher Suite is defined by the
-following components:
-
-<ul>
-<li>Key Exchange Method
-<li>Cipher for Data Transfer
-<li>Message Digest for creating the Message Authentication Code (MAC)
-</ul>
-
-These three elements are described in the sections that follow.
-
-<h3>Key Exchange Method</h3>
-
-The key exchange method defines how the shared secret symmetric cryptography
-key used for application data transfer will be agreed upon by client and
-server. SSL 2.0 uses RSA key exchange only, while SSL 3.0 supports a choice of
-key exchange algorithms including the RSA key exchange when certificates are
-used, and Diffie-Hellman key exchange for exchanging keys without certificates
-and without prior communication between client and server.
-
-<p>
-One variable in the choice of key exchange methods is digital signatures --
-whether or not to use them, and if so, what kind of signatures to use.
-Signing with a private key provides assurance against a
-man-in-the-middle-attack during the information exchange used in generating
-the shared key [<a href="#AC96">AC96</a>, p516].
-
-<h3>Cipher for Data Transfer</h3>
-
-SSL uses the conventional cryptography algorithm (symmetric cryptography)
-described earlier for encrypting messages in a session.  There are nine
-choices, including the choice to perform no encryption:
-
-<ul>
-<li>No encryption
-<li>Stream Ciphers
-    <ul>
-    <li>RC4 with 40-bit keys
-    <li>RC4 with 128-bit keys
-    </ul>
-<li>CBC Block Ciphers
-    <ul>
-    <li>RC2 with 40 bit key
-    <li>DES with 40 bit key
-    <li>DES with 56 bit key
-    <li>Triple-DES with 168 bit key
-    <li>Idea (128 bit key)
-    <li>Fortezza (96 bit key)
-    </ul>
-</ul>
-
-Here "CBC" refers to Cipher Block Chaining, which means that a portion of the
-previously encrypted cipher text is used in the encryption of the current
-block. "DES" refers to the Data Encryption Standard [<a href="#AC96">AC96</a>,
-ch12], which has a number of variants (including DES40 and 3DES_EDE). "Idea"
-is one of the best and cryptographically strongest available algorithms, and
-"RC2" is a proprietary algorithm from RSA DSI [<a href="#AC96">AC96</a>,
-ch13].
-
-<h3>Digest Function</h3>
-
-The choice of digest function determines how a digest is created from a record
-unit. SSL supports the following:
-
-<ul>
-<li>No digest (Null choice)
-<li>MD5, a 128-bit hash
-<li>Secure Hash Algorithm (SHA-1), a 160-bit hash
-</ul>
-
-The message digest is used to create a Message Authentication Code (MAC) which
-is encrypted with the message to provide integrity and to prevent against
-replay attacks.
-
-<h3>Handshake Sequence Protocol</h3>
-
-The handshake sequence uses three protocols:
-
-<ul>
-<li>The <em>SSL Handshake Protocol</em>
-    for performing the client and server SSL session establishment.
-<li>The <em>SSL Change Cipher Spec Protocol</em> for actually establishing agreement
-    on the Cipher Suite for the session.
-<li>The <em>SSL Alert Protocol</em> for 
-    conveying SSL error messages between client and server.
-</ul>
-
-These protocols, as well as application protocol data, are encapsulated in the
-<em>SSL Record Protocol</em>, as shown in <a href="#figure2">Figure 2</a>.  An
-encapsulated protocol is transferred as data by the lower layer protocol,
-which does not examine the data. The encapsulated protocol has no knowledge of
-the underlying protocol.
-
-<p>
-<float name="figure2" caption="Figure 2: SSL Protocol Stack">
-<img src="ssl_intro_fig2.gif" alt="">
-</float>
-
-<p>
-The encapsulation of SSL control protocols by the record protocol means that
-if an active session is renegotiated the control protocols will be transmitted
-securely. If there were no session before, then the Null cipher suite is
-used, which means there is no encryption and messages have no integrity
-digests until the session has been established.
-
-<h3>Data Transfer</h3>
-
-The SSL Record Protocol, shown in <a href="#figure3">Figure 3</a>, is used to
-transfer application and SSL Control data between the client and server,
-possibly fragmenting this data into smaller units, or combining multiple
-higher level protocol data messages into single units. It may compress, attach
-digest signatures, and encrypt these units before transmitting them using the
-underlying reliable transport protocol (Note: currently all major SSL
-implementations lack support for compression).
- 
-<p>
-<float name="figure3" caption="Figure 3: SSL Record Protocol">
-<img src="ssl_intro_fig3.gif" alt="">
-</float>
-
-<h3>Securing HTTP Communication</h3>
-
-One common use of SSL is to secure Web HTTP communication between a browser
-and a webserver. This case does not preclude the use of non-secured HTTP. The
-secure version is mainly plain HTTP over SSL (named HTTPS), but with one major
-difference: it uses the URL scheme <code>https</code> rather than
-<code>http</code> and a different server port (by default 443).  This mainly
-is what mod_ssl provides to you for the Apache webserver...
-
-<h2>References</h2>
-
-<ul>
-
-<p>
-<li><a name="AC96"></a>
-[AC96] Bruce Schneier, <em>Applied Cryptography</em>, 2nd Edition, Wiley,
-       1996. See <a href="http://www.counterpane.com/">http://www.counterpane.com/</a> for
-       various other materials by Bruce Schneier. 
-<p>
-<li><a name="X208"></a>
-[X208] ITU-T Recommendation X.208, <em>Specification of Abstract Syntax Notation
-       One (ASN.1)</em>, 1988. See for instance <a
-       href="ftp://ftp.neda.com/pub/itu/x.series/x208.ps">
-       ftp://ftp.neda.com/pub/itu/x.series/x208.ps</a>.
-<p>
-<li><a name="X509"></a>
-[X509] ITU-T Recommendation X.509, <em>The Directory - Authentication
-       Framework</em>, 1988. See for instance <a
-       href="ftp://ftp.bull.com/pub/OSIdirectory/ITUnov96/X.509/97x509final.doc">
-       ftp://ftp.bull.com/pub/OSIdirectory/ITUnov96/X.509/97x509final.doc</a>.
-<p>
-<li><a name="PKCS"></a>
-[PKCS] Kaliski, Burton S., Jr., <em>An Overview of the PKCS Standards</em>, An RSA
-     Laboratories Technical Note, revised November 1, 1993.
-     See <a href="http://www.rsa.com/rsalabs/pubs/PKCS/">
-     http://www.rsa.com/rsalabs/pubs/PKCS/</a>.
-<p>
-<li><a name="MIME"></a>
-[MIME] N. Freed, N. Borenstein, <em>Multipurpose Internet Mail Extensions
-       (MIME) Part One: Format of Internet Message Bodies</em>, RFC2045.
-       See for instance <a href="ftp://ftp.isi.edu/in-notes/rfc2045.txt">
-       ftp://ftp.isi.edu/in-notes/rfc2045.txt</a>.
-<p>
-<li><a name="SSL2"></a>
-[SSL2] Kipp E.B. Hickman, <em>The SSL Protocol</em>, 1995.
-       See <a href="http://www.netscape.com/eng/security/SSL_2.html">
-       http://www.netscape.com/eng/security/SSL_2.html</a>.
-<p>
-<li><a name="SSL3"></a>
-[SSL3] Alan O. Freier, Philip Karlton, Paul C. Kocher, <em>The SSL Protocol
-       Version 3.0</em>, 1996.  See <a
-       href="http://www.netscape.com/eng/ssl3/draft302.txt">
-       http://www.netscape.com/eng/ssl3/draft302.txt</a>.
-<p>
-<li><a name="TLS1"></a>
-[TLS1] Tim Dierks, Christopher Allen, <em>The TLS Protocol Version 1.0</em>,
-       1997. See <a
-       href="ftp://ftp.ietf.org/internet-drafts/draft-ietf-tls-protocol-06.txt">
-       ftp://ftp.ietf.org/internet-drafts/draft-ietf-tls-protocol-06.txt</a>.
-</ul>
-
diff --git a/docs/manual/ssl/ssl_intro_fig1.gif b/docs/manual/ssl/ssl_intro_fig1.gif
deleted file mode 100644
index 3c20986..0000000
--- a/docs/manual/ssl/ssl_intro_fig1.gif
+++ /dev/null
Binary files differ
diff --git a/docs/manual/ssl/ssl_intro_fig2.gif b/docs/manual/ssl/ssl_intro_fig2.gif
deleted file mode 100644
index 26b295a..0000000
--- a/docs/manual/ssl/ssl_intro_fig2.gif
+++ /dev/null
Binary files differ
diff --git a/docs/manual/ssl/ssl_intro_fig3.gif b/docs/manual/ssl/ssl_intro_fig3.gif
deleted file mode 100644
index 00a975b..0000000
--- a/docs/manual/ssl/ssl_intro_fig3.gif
+++ /dev/null
Binary files differ
diff --git a/docs/manual/ssl/ssl_overview.gfont000.gif b/docs/manual/ssl/ssl_overview.gfont000.gif
deleted file mode 100644
index 7fb5db9..0000000
--- a/docs/manual/ssl/ssl_overview.gfont000.gif
+++ /dev/null
Binary files differ
diff --git a/docs/manual/ssl/ssl_overview.html b/docs/manual/ssl/ssl_overview.html
deleted file mode 100644
index be48d6c..0000000
--- a/docs/manual/ssl/ssl_overview.html
+++ /dev/null
@@ -1,476 +0,0 @@
-<html>
-<head>
-<title>mod_ssl: Preface</title>
-
-<!--
-  Copyright (c) 1998-2001 Ralf S. Engelschall. All rights reserved.
-
-  Redistribution and use in source and binary forms, with or without
-  modification, are permitted provided that the following conditions
-  are met:
-
-  1. Redistributions of source code must retain the above
-     copyright notice, this list of conditions and the following
-     disclaimer. 
- 
-  2. Redistributions in binary form must reproduce the above
-     copyright notice, this list of conditions and the following
-     disclaimer in the documentation and/or other materials
-     provided with the distribution.
- 
-  3. All advertising materials mentioning features or use of this
-     software must display the following acknowledgment: 
-     "This product includes software developed by 
-      Ralf S. Engelschall <rse@engelschall.com> for use in the
-      mod_ssl project (http://www.modssl.org/)."
- 
-  4. The name "mod_ssl" must not be used to endorse or promote
-     products derived from this software without prior written
-     permission.  
-
-  5. Redistributions of any form whatsoever must retain the
-     following acknowledgment:
-     "This product includes software developed by 
-      Ralf S. Engelschall <rse@engelschall.com> for use in the
-      mod_ssl project (http://www.modssl.org/)."
- 
-  THIS SOFTWARE IS PROVIDED BY RALF S. ENGELSCHALL ``AS IS'' AND ANY
-  EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-  PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL RALF S. ENGELSCHALL OR
-  HIS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
-  STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
-  OF THE POSSIBILITY OF SUCH DAMAGE.
--->
-<style type="text/css"><!--
-A:link {
-    text-decoration: none;
-    color: #6666cc;
-}
-A:active {
-    text-decoration: none;
-    color: #6666cc;
-}
-A:visited {
-    text-decoration: none;
-    color: #6666cc;
-}
-#sf {
-    font-family: arial,helvetica;
-    font-variant: normal;
-    font-style: normal;
-}
-H1 {
-    font-weight: bold;
-    font-size: 24pt;
-    line-height: 24pt;
-    font-family: arial,helvetica;
-    font-variant: normal;
-    font-style: normal;
-}
-H2 {
-    font-weight: bold;
-    font-size: 18pt;
-    line-height: 18pt;
-    font-family: arial,helvetica;
-    font-variant: normal;
-    font-style: normal;
-}
-H3 {
-    font-weight: bold;
-    font-size: 14pt;
-    line-height: 14pt;
-    font-family: arial,helvetica;
-    font-variant: normal;
-    font-style: normal;
-}
-H4 {
-    font-weight: bold;
-    font-size: 12pt;
-    line-height: 12pt;
-    font-family: arial,helvetica;
-    font-variant: normal;
-    font-style: normal;
-}
-#H {
-}
-#D {
-    background-color: #f0f0f0;
-}
-#faq {
-    font-weight: bold;
-    font-size: 16pt;
-    line-height: 16pt;
-    font-family: arial,helvetica;
-    font-variant: normal;
-    font-style: normal;
-}
-#howto {
-    font-weight: bold;
-    font-size: 16pt;
-    line-height: 16pt;
-    font-family: arial,helvetica;
-    font-variant: normal;
-    font-style: normal;
-}
-#term {
-    font-weight: bold;
-    font-size: 16pt;
-    line-height: 16pt;
-    font-family: arial,helvetica;
-    font-variant: normal;
-    font-style: normal;
-}
---></style>
-<script type="text/javascript" language="JavaScript">
-<!-- Hiding the code
-function ro_imgNormal(imgName) {
-    if (document.images) {
-        document[imgName].src = eval(imgName + '_n.src');
-        self.status = '';
-    }
-}
-function ro_imgOver(imgName, descript) {
-    if (document.images) {
-        document[imgName].src = eval(imgName + '_o.src');
-        self.status = descript;
-    }
-}
-// done hiding -->
-</script>
-<script type="text/javascript" language="JavaScript">
-<!-- Hiding the code
-if (document.images) {
-    ro_img_prev_top_n = new Image();
-    ro_img_prev_top_n.src = 'ssl_template.navbut-prev-n.gif';
-    ro_img_prev_top_o = new Image();
-    ro_img_prev_top_o.src = 'ssl_template.navbut-prev-s.gif';
-}
-// done hiding -->
-</script>
-<script type="text/javascript" language="JavaScript">
-<!-- Hiding the code
-if (document.images) {
-    ro_img_prev_bot_n = new Image();
-    ro_img_prev_bot_n.src = 'ssl_template.navbut-prev-n.gif';
-    ro_img_prev_bot_o = new Image();
-    ro_img_prev_bot_o.src = 'ssl_template.navbut-prev-s.gif';
-}
-// done hiding -->
-</script>
-<script type="text/javascript" language="JavaScript">
-<!-- Hiding the code
-if (document.images) {
-    ro_img_next_top_n = new Image();
-    ro_img_next_top_n.src = 'ssl_template.navbut-next-n.gif';
-    ro_img_next_top_o = new Image();
-    ro_img_next_top_o.src = 'ssl_template.navbut-next-s.gif';
-}
-// done hiding -->
-</script>
-<script type="text/javascript" language="JavaScript">
-<!-- Hiding the code
-if (document.images) {
-    ro_img_next_bot_n = new Image();
-    ro_img_next_bot_n.src = 'ssl_template.navbut-next-n.gif';
-    ro_img_next_bot_o = new Image();
-    ro_img_next_bot_o.src = 'ssl_template.navbut-next-s.gif';
-}
-// done hiding -->
-</script>
-</head>
-<body bgcolor="#ffffff" text="#000000" link="#333399" alink="#9999ff" vlink="#000066">
-<div align="center">
-<table width="600" cellspacing="0" cellpadding="0" border="0" summary="">
-<tr>
-  <td>
-      <img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="600" height="1" align="bottom" border="0"><br>
-      <table width="600" cellspacing="0" cellpadding="0" summary="">
-      <tr>
-        <td>
-        <table width="600" summary="">
-        <tr>
-            <td align="left" valign="bottom">
-            <font face="Arial,Helvetica" size="+2"><b>mod_ssl</b></font>
-            </td>
-            <td align="right">
-              <img src="ssl_template.head-chapter.gif" alt="Chapter" width="175" height="94"> <img src="ssl_template.head-num-1.gif" alt="1" width="74" height="89">
-            </td>
-        </tr>
-        </table>
-        </td>
-      </tr>
-      <tr>
-        <td><img src="ssl_template.imgdot-1x1-000000.gif" alt="" width="600" height="2" align="bottom" border="0"></td>
-      </tr>
-      <tr>
-        <td>
-           <table width="600" border="0" summary="">
-           <tr>
-            <td valign="top" align="left" width="250">
-<a href="index.html" onmouseover="ro_imgOver('ro_img_prev_top', 'previous page'); return true" onmouseout="ro_imgNormal('ro_img_prev_top'); return true" onfocus="ro_imgOver('ro_img_prev_top', 'previous page'); return true" onblur="ro_imgNormal('ro_img_prev_top'); return true"><img name="ro_img_prev_top" src="ssl_template.navbut-prev-n.gif" alt="previous page" width="70" height="18" border="0"></a><br><font color="#000000">Cover</font>
-            </td>
-            <td valign="top" align="right" width="250">
-<a href="ssl_intro.html" onmouseover="ro_imgOver('ro_img_next_top', 'next page'); return true" onmouseout="ro_imgNormal('ro_img_next_top'); return true" onfocus="ro_imgOver('ro_img_next_top', 'next page'); return true" onblur="ro_imgNormal('ro_img_next_top'); return true"><img name="ro_img_next_top" src="ssl_template.navbut-next-n.gif" alt="next page" width="70" height="18" border="0"></a><br><font color="#000000">Introduction</font>
-            </td>
-           </tr>
-           </table>
-         </td>
-      </tr>
-      <tr>
-        <td>
-          <br>
-          <img src="ssl_template.title-over.gif" alt="Preface" width="456" height="60">
-        </td>
-      </tr>
-      </table>
-<div align="right">
-<table cellspacing="0" cellpadding="0" width="300" summary="">
-<tr>
-<td>
-<em>
-``Ralf Engelschall has released an
-excellent module that integrates
-Apache and SSLeay.''
-</em>
-</td>
-</tr>
-<tr>
-<td align="right">
-<font size="-1">
-Tim J. Hudson, SSLeay F.A.Q.
-</font>
-</td>
-</tr>
-</table>
-</div>
-<p>
-<table cellspacing="0" cellpadding="0" border="0" summary="">
-<tr valign="bottom">
-<td>
-<img src="ssl_overview.gfont000.gif" alt="T" width="34" height="34" border="0" align="left">
-his module provides strong cryptography for the <A
-HREF="http://www.apache.org/">Apache</A> (v1.3) webserver via the <A
-HREF="http://www.netscape.com/newsref/std/SSL.html">Secure Socket Layer</A>
-(SSL v2/v3) and <A HREF="http://www.consensus.com/ietf-tls/">Transport Layer
-Security</A> (TLS v1) protocols by the help of the excellent SSL/TLS
-implementation library <A HREF="http://www.openssl.org/">OpenSSL</A> from <A
-HREF="mailto:eay@aus.rsa.com">Eric A. Young</A> and <A
-HREF="mailto:tjh@cryptsoft.com">Tim Hudson</A>.
-</td>
-<td>
-&nbsp;&nbsp;
-</td>
-<td>
-<div align="right">
-<table cellspacing="0" cellpadding="5" border="0" bgcolor="#ccccff" summary="">
-<tr>
-<td bgcolor="#333399">
-<font face="Arial,Helvetica" color="#ccccff">
-<b>Global Table Of Contents</b>
-</font>
-</td>
-</tr>
-<tr>
-<td>
-<font face="Arial,Helvetica" size="-1">
-<b>
-<a href="ssl_overview.html">Chapter 1: Preface</a><br>
-<a href="ssl_intro.html">Chapter 2: Introduction</a><br>
-<a href="ssl_reference.html">Chapter 3: Reference</a><br>
-<a href="ssl_compat.html">Chapter 4: Compatibility</a><br>
-<a href="ssl_howto.html">Chapter 5: HowTo</a><br>
-<a href="ssl_faq.html">Chapter 6: F.A.Q. List</a><br>
-<a href="ssl_glossary.html">Chapter 7: Glossary</a><br>
-</b>
-</font>
-</td>
-</tr>
-</table>
-</div>
-</td>
-</tr>
-</table>
-<p>
-The <A HREF="http://www.modssl.org/">mod_ssl</A> package was
-created in April 1998 by <A HREF="mailto:rse@engelschall.com">Ralf S.
-Engelschall</A> and was originally derived from the <A
-HREF="http://www.apache-ssl.org/">Apache-SSL</A> package developed by <A
-HREF="mailto:ben@algroup.co.uk">Ben Laurie</A>. It stays under a BSD-style
-license which is equivalent to the license used by <A
-HREF="http://www.apache.org/">The Apache Group</a> for the Apache webserver
-itself. This means, in short, that you are free to use it both for commercial
-and non-commercial purposes as long as you retain the authors' copyright
-notices and give the proper credit.
-<h2>Legalese</h2>
-Although the above conditions also apply to Apache and OpenSSL in general (both
-are freely available and useable software packages), you should be aware that
-especially the cryptographic algorithms used inside OpenSSL stay under
-certain patents and perhaps import/export/use restrictions in some countries
-of the world. So whether you can actually use the combination
-Apache+mod_ssl+OpenSSL in your country depends mainly on your local state laws.
-The authors of neither Apache nor mod_ssl nor OpenSSL are liable for any
-violations you make here.
-<p>
-If you're not sure what law details apply to your country you're strongly
-advised to first determine them by consulting an attorney before using this
-module. A lot of hints you can find in the <a
-href="http://cwis.kub.nl/~frw/people/koops/lawsurvy.htm">International Law
-Crypto Survey</a> which is a really comprehensive resource on this topic. At
-least two countries with heavy cryptography restrictions are well known:
-In the United States (USA) it's not allowed to (re-)export mod_ssl
-or OpenSSL And inside France it's not allowed to use any cryptography at all
-when keys with more than 40 bits are used.
-<p>
-<table cellspacing="0" cellpadding="1" bgcolor="#cccccc" border="0" summary="">
-<tr>
-<td>
-<table bgcolor="white" cellspacing="0" cellpadding="10" border="0" summary="">
-<tr>
-<td>
-<font face="Arial,Helvetica">
-This software package uses strong cryptography, so while it is created,
-maintained and distributed from Germany and Switzerland (where it is legal to
-do this), it falls under certain export/import and/or use restrictions in some
-other parts of the world.
-<p>
-PLEASE REMEMBER THAT EXPORT/IMPORT AND/OR USE OF STRONG CRYPTOGRAPHY
-SOFTWARE, PROVIDING CRYPTOGRAPHY HOOKS OR EVEN JUST COMMUNICATING TECHNICAL
-DETAILS ABOUT CRYPTOGRAPHY SOFTWARE IS ILLEGAL IN SOME PARTS OF THE WORLD.
-SO, WHEN YOU IMPORT THIS PACKAGE TO YOUR COUNTRY, RE-DISTRIBUTE IT FROM
-THERE OR EVEN JUST EMAIL TECHNICAL SUGGESTIONS OR EVEN SOURCE PATCHES TO THE
-AUTHOR OR OTHER PEOPLE YOU ARE STRONGLY ADVISED TO PAY CLOSE ATTENTION TO
-ANY EXPORT/IMPORT AND/OR USE LAWS WHICH APPLY TO YOU. THE AUTHOR OF MOD_SSL
-IS NOT LIABLE FOR ANY VIOLATIONS YOU MAKE HERE. SO BE CAREFULLY YOURSELF, IT
-IS YOUR RESPONSIBILITY.
-</font>
-<p>
-<font face="Arial,Helvetica">
-CREDIT INFORMATION:
-This product includes software developed by Ben Laurie for use in the
-Apache-SSL HTTP server project, software developed by Larry Wall and David
-MacKenzie for use in the GNU project of the FSF and software developed by Dr.
-Stephen N. Henson as a companion to OpenSSL.
-</font>
-</td>
-</tr>
-</table>
-</td>
-</tr>
-</table>
-<h2>Module Architecture</h2>
-The mod_ssl package consists of the SSL module (part 1 in <a
-href="#figure1">Figure 1</a>) and a set of source patches for Apache adding the
-Extended API (EAPI) (part 2 in <a href="#figure1">Figure 1</a>) which is an
-essential prerequisite in order to use mod_ssl. In other words: you can only
-use the mod_ssl module when Apache's core code contains the Extended API. But
-because when applying mod_ssl to the Apache source tree the Extended API is
-also automatically added you usually don't have to think about this. It's
-mainly important for package vendors who want to build separate packages for
-Apache and mod_ssl. For more details on how to apply mod_ssl to the Apache
-source tree please follow the <code>INSTALL</code> file in the mod_ssl
-distribution.
-<p>
-<div align="center">
-<a name="figure1"></a>
-<table width="600" cellspacing="0" cellpadding="1" border="0" summary="">
-<caption align="bottom" id="sf">Figure 1: Module Architecture</caption>
-<tr><td bgcolor="#cccccc">
-<table width="598" cellpadding="5" cellspacing="0" border="0" summary="">
-<tr><td valign="top" align="center" bgcolor="#ffffff">
-<img src="ssl_overview_fig1.gif" alt="" width="382" height="281">
-</td>
-</tr></table>
-</td></tr></table>
-</div>
-<h2>Module Building</h2>
-The SSL module (mod_ssl) resides under the <CODE>src/modules/ssl/</CODE>
-subdirectory inside the Apache source tree and is a regular Apache module. This
-means that you can configure, build and install it like any other Apache module.
-Usually this is done by using the APACI command
-<blockquote>
-<pre>
-$ cd apache_1.3.x/
-$ SSL_BASE=/path/to/openssl ./configure ... --enable-module=ssl
-</pre>
-</blockquote>
-or by manually editing the <code>SSL_BASE</code> variable,
-uncommenting the corresponding <code>AddModule</code> directive inside the
-<code>src/Configuration</code> file and using the command
-<blockquote>
-<pre>
-$ cd apache_1.3.x/src
-$ ./Configure
-</pre>
-</blockquote>
-for configuring. Additionally you can enable the <a
-href="http://www.apache.org/docs/dso.html">Dynamic Shared Object</a> (DSO)
-support for mod_ssl by either adding the <code>--enable-shared=ssl</code>
-option to the APACI configure command line or by replacing the
-<blockquote>
-<pre>
-AddModule ssl_module modules/ssl/libssl.a
-</pre>
-</blockquote>
-line in <code>src/Configuration</code> with
-<blockquote>
-<pre>
-SharedModule ssl_module modules/ssl/libssl.so
-</pre>
-</blockquote>
-Building mod_ssl as a DSO is especially interesting to achieve more run-time
-flexibility, i.e. you can decide whether to use SSL or not at run-time instead
-of build-time. But notice that building mod_ssl as a DSO requires that your
-OS/compiler supports building DSOs in the first place, and additionally that
-they support linking of a DSO against a static library (libssl.a, libcrypo.a).
-Not all platform support this.
-      <p>
-      <br>
-      <table summary="">
-      <tr>
-        <td>
-           <table width="600" border="0" summary="">
-           <tr>
-            <td valign="top" align="left" width="250">
-<a href="index.html" onmouseover="ro_imgOver('ro_img_prev_bot', 'previous page'); return true" onmouseout="ro_imgNormal('ro_img_prev_bot'); return true" onfocus="ro_imgOver('ro_img_prev_bot', 'previous page'); return true" onblur="ro_imgNormal('ro_img_prev_bot'); return true"><img name="ro_img_prev_bot" src="ssl_template.navbut-prev-n.gif" alt="previous page" width="70" height="18" border="0"></a><br><font color="#000000">Cover</font>
-            </td>
-            <td valign="top" align="right" width="250">
-<a href="ssl_intro.html" onmouseover="ro_imgOver('ro_img_next_bot', 'next page'); return true" onmouseout="ro_imgNormal('ro_img_next_bot'); return true" onfocus="ro_imgOver('ro_img_next_bot', 'next page'); return true" onblur="ro_imgNormal('ro_img_next_bot'); return true"><img name="ro_img_next_bot" src="ssl_template.navbut-next-n.gif" alt="next page" width="70" height="18" border="0"></a><br><font color="#000000">Introduction</font>
-            </td>
-           </tr>
-           </table>
-         </td>
-      </tr>
-      <tr>
-        <td><img src="ssl_template.imgdot-1x1-000000.gif" alt="" width="600" height="2" align="bottom" border="0"></td>
-      </tr>
-      <tr>
-        <td><table width="598" summary="">
-        <tr>
-        <td align="left"><font face="Arial,Helvetica">
-        <a href="http://www.modssl.org/">mod_ssl</a> 2.8, User Manual<br>
-        The Apache Interface to OpenSSL
-        </font>
-        </td>
-        <td align="right"><font face="Arial,Helvetica">
-        Copyright &copy; 1998-2001
-        <a href="http://www.engelschall.com/">Ralf S. Engelschall</a><br>
-        All Rights Reserved<br>
-        </font>
-        </td>
-        </tr>
-        </table>
-        </td>
-      </tr>
-      </table>
-  </td>
-</tr>
-</table>
-</div>
-</body>
-</html>
diff --git a/docs/manual/ssl/ssl_overview.wml b/docs/manual/ssl/ssl_overview.wml
deleted file mode 100644
index 4180ddb..0000000
--- a/docs/manual/ssl/ssl_overview.wml
+++ /dev/null
@@ -1,197 +0,0 @@
-
-#use "ssl_template.inc" title="Preface" tag=over num=1
-
-<page_prev name="Cover" url="index.html">
-<page_next name="Introduction" url="ssl_intro.html">
-
-<quotation width=300 author="Tim J. Hudson, SSLeay F.A.Q.">
-``Ralf Engelschall has released an
-excellent module that integrates
-Apache and SSLeay.''
-</quotation>
-
-<p>
-<table cellspacing=0 cellpadding=0 border=0>
-<tr valign=bottom>
-<td>
-
-<big T>his module provides strong cryptography for the <A
-HREF="http://www.apache.org/">Apache</A> (v1.3) webserver via the <A
-HREF="http://www.netscape.com/newsref/std/SSL.html">Secure Socket Layer</A>
-(SSL v2/v3) and <A HREF="http://www.consensus.com/ietf-tls/">Transport Layer
-Security</A> (TLS v1) protocols by the help of the excellent SSL/TLS
-implementation library <A HREF="http://www.openssl.org/">OpenSSL</A> from <A
-HREF="mailto:eay@aus.rsa.com">Eric A. Young</A> and <A
-HREF="mailto:tjh@cryptsoft.com">Tim Hudson</A>. 
-
-</td>
-<td>
-&nbsp;&nbsp;
-</td>
-<td>
-
-<div align=right>
-<table cellspacing=0 cellpadding=5 border=0 bgcolor="#ccccff">
-<tr>
-<td bgcolor="#333399">
-<font face="Arial,Helvetica" color="#ccccff">
-<b>Global Table Of Contents</b>
-</font>
-</td>
-</tr>
-<tr>
-<td>
-<font face="Arial,Helvetica" size=-1>
-<b>
-
-<a href="ssl_overview.html">Chapter 1: Preface</a><br>
-<a href="ssl_intro.html">Chapter 2: Introduction</a><br>
-<a href="ssl_reference.html">Chapter 3: Reference</a><br>
-<a href="ssl_compat.html">Chapter 4: Compatibility</a><br>
-<a href="ssl_howto.html">Chapter 5: HowTo</a><br>
-<a href="ssl_faq.html">Chapter 6: F.A.Q. List</a><br>
-<a href="ssl_glossary.html">Chapter 7: Glossary</a><br>
-
-</b>
-</font>
-</td>
-</tr>
-</table>
-</div>
-
-</td>
-</tr>
-</table>
-
-<p>
-The <A HREF="http://www.modssl.org/">mod_ssl</A> package was
-created in April 1998 by <A HREF="mailto:rse@engelschall.com">Ralf S.
-Engelschall</A> and was originally derived from the <A
-HREF="http://www.apache-ssl.org/">Apache-SSL</A> package developed by <A
-HREF="mailto:ben@algroup.co.uk">Ben Laurie</A>. It stays under a BSD-style
-license which is equivalent to the license used by <A
-HREF="http://www.apache.org/">The Apache Group</a> for the Apache webserver
-itself. This means, in short, that you are free to use it both for commercial
-and non-commercial purposes as long as you retain the authors' copyright
-notices and give the proper credit. 
-
-<h2>Legalese</h2>
-
-Although the above conditions also apply to Apache and OpenSSL in general (both
-are freely available and useable software packages), you should be aware that
-especially the cryptographic algorithms used inside OpenSSL stay under
-certain patents and perhaps import/export/use restrictions in some countries
-of the world. So whether you can actually use the combination
-Apache+mod_ssl+OpenSSL in your country depends mainly on your local state laws.
-The authors of neither Apache nor mod_ssl nor OpenSSL are liable for any
-violations you make here. 
-
-<p>
-If you're not sure what law details apply to your country you're strongly
-advised to first determine them by consulting an attorney before using this
-module. A lot of hints you can find in the <a
-href="http://cwis.kub.nl/~frw/people/koops/lawsurvy.htm">International Law
-Crypto Survey</a> which is a really comprehensive resource on this topic.  At
-least two countries with heavy cryptography restrictions are well known:
-In the United States (USA) it's not allowed to (re-)export mod_ssl
-or OpenSSL And inside France it's not allowed to use any cryptography at all
-when keys with more than 40 bits are used.
-
-<p>
-<box bdcolor="#cccccc" bdwidth=1 bdspace=10 bgcolor=white>
-<font face="Arial,Helvetica">
-This software package uses strong cryptography, so while it is created,
-maintained and distributed from Germany and Switzerland (where it is legal to
-do this), it falls under certain export/import and/or use restrictions in some
-other parts of the world.
-<p>
-PLEASE REMEMBER THAT EXPORT/IMPORT AND/OR USE OF STRONG CRYPTOGRAPHY
-SOFTWARE, PROVIDING CRYPTOGRAPHY HOOKS OR EVEN JUST COMMUNICATING TECHNICAL
-DETAILS ABOUT CRYPTOGRAPHY SOFTWARE IS ILLEGAL IN SOME PARTS OF THE WORLD.
-SO, WHEN YOU IMPORT THIS PACKAGE TO YOUR COUNTRY, RE-DISTRIBUTE IT FROM
-THERE OR EVEN JUST EMAIL TECHNICAL SUGGESTIONS OR EVEN SOURCE PATCHES TO THE
-AUTHOR OR OTHER PEOPLE YOU ARE STRONGLY ADVISED TO PAY CLOSE ATTENTION TO
-ANY EXPORT/IMPORT AND/OR USE LAWS WHICH APPLY TO YOU.  THE AUTHOR OF MOD_SSL
-IS NOT LIABLE FOR ANY VIOLATIONS YOU MAKE HERE. SO BE CAREFULLY YOURSELF, IT
-IS YOUR RESPONSIBILITY.
-</font>
-<p>
-<font face="Arial,Helvetica">
-CREDIT INFORMATION:
-This product includes software developed by Ben Laurie for use in the
-Apache-SSL HTTP server project, software developed by Larry Wall and David
-MacKenzie for use in the GNU project of the FSF and software developed by Dr.
-Stephen N. Henson as a companion to OpenSSL.
-</font>
-</box>
-
-<h2>Module Architecture</h2>
-
-The mod_ssl package consists of the SSL module (part 1 in <a
-href="#figure1">Figure 1</a>) and a set of source patches for Apache adding the
-Extended API (EAPI) (part 2 in <a href="#figure1">Figure 1</a>) which is an
-essential prerequisite in order to use mod_ssl. In other words: you can only
-use the mod_ssl module when Apache's core code contains the Extended API. But
-because when applying mod_ssl to the Apache source tree the Extended API is
-also automatically added you usually don't have to think about this. It's
-mainly important for package vendors who want to build separate packages for
-Apache and mod_ssl. For more details on how to apply mod_ssl to the Apache
-source tree please follow the <code>INSTALL</code> file in the mod_ssl
-distribution.
-
-<p>
-<float name="figure1" caption="Figure 1: Module Architecture">
-<img src="ssl_overview_fig1.gif" alt="">
-</float>
-
-<h2>Module Building</h2>
-
-The SSL module (mod_ssl) resides under the <CODE>src/modules/ssl/</CODE>
-subdirectory inside the Apache source tree and is a regular Apache module.  This
-means that you can configure, build and install it like any other Apache module.
-Usually this is done by using the APACI command
-
-<blockquote>
-<pre>
-$ cd apache_1.3.x/
-$ SSL_BASE=/path/to/openssl ./configure ... --enable-module=ssl
-</pre>
-</blockquote>
-
-or by manually editing the <code>SSL_BASE</code> variable,
-uncommenting the corresponding <code>AddModule</code> directive inside the
-<code>src/Configuration</code> file and using the command
-
-<blockquote>
-<pre>
-$ cd apache_1.3.x/src
-$ ./Configure
-</pre>
-</blockquote>
-
-for configuring. Additionally you can enable the <a
-href="http://www.apache.org/docs/dso.html">Dynamic Shared Object</a> (DSO)
-support for mod_ssl by either adding the <code>--enable-shared=ssl</code>
-option to the APACI configure command line or by replacing the
-
-<blockquote>
-<pre>
-AddModule ssl_module modules/ssl/libssl.a
-</pre>
-</blockquote>
-
-line in <code>src/Configuration</code> with 
-
-<blockquote>
-<pre>
-SharedModule ssl_module modules/ssl/libssl.so
-</pre>
-</blockquote>
-
-Building mod_ssl as a DSO is especially interesting to achieve more run-time
-flexibility, i.e. you can decide whether to use SSL or not at run-time instead
-of build-time.  But notice that building mod_ssl as a DSO requires that your
-OS/compiler supports building DSOs in the first place, and additionally that
-they support linking of a DSO against a static library (libssl.a, libcrypo.a).
-Not all platform support this.
-
diff --git a/docs/manual/ssl/ssl_overview_fig1.gif b/docs/manual/ssl/ssl_overview_fig1.gif
deleted file mode 100644
index 7d18de0..0000000
--- a/docs/manual/ssl/ssl_overview_fig1.gif
+++ /dev/null
Binary files differ
diff --git a/docs/manual/ssl/ssl_reference.gfont000.gif b/docs/manual/ssl/ssl_reference.gfont000.gif
deleted file mode 100644
index 7fb5db9..0000000
--- a/docs/manual/ssl/ssl_reference.gfont000.gif
+++ /dev/null
Binary files differ
diff --git a/docs/manual/ssl/ssl_reference.html b/docs/manual/ssl/ssl_reference.html
deleted file mode 100644
index 08e52ff..0000000
--- a/docs/manual/ssl/ssl_reference.html
+++ /dev/null
@@ -1,2539 +0,0 @@
-<html>
-<head>
-<title>mod_ssl: Reference</title>
-
-<!--
-  Copyright (c) 1998-2001 Ralf S. Engelschall. All rights reserved.
-
-  Redistribution and use in source and binary forms, with or without
-  modification, are permitted provided that the following conditions
-  are met:
-
-  1. Redistributions of source code must retain the above
-     copyright notice, this list of conditions and the following
-     disclaimer. 
- 
-  2. Redistributions in binary form must reproduce the above
-     copyright notice, this list of conditions and the following
-     disclaimer in the documentation and/or other materials
-     provided with the distribution.
- 
-  3. All advertising materials mentioning features or use of this
-     software must display the following acknowledgment: 
-     "This product includes software developed by 
-      Ralf S. Engelschall <rse@engelschall.com> for use in the
-      mod_ssl project (http://www.modssl.org/)."
- 
-  4. The name "mod_ssl" must not be used to endorse or promote
-     products derived from this software without prior written
-     permission.  
-
-  5. Redistributions of any form whatsoever must retain the
-     following acknowledgment:
-     "This product includes software developed by 
-      Ralf S. Engelschall <rse@engelschall.com> for use in the
-      mod_ssl project (http://www.modssl.org/)."
- 
-  THIS SOFTWARE IS PROVIDED BY RALF S. ENGELSCHALL ``AS IS'' AND ANY
-  EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-  PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL RALF S. ENGELSCHALL OR
-  HIS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
-  STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
-  OF THE POSSIBILITY OF SUCH DAMAGE.
--->
-<style type="text/css"><!--
-A:link {
-    text-decoration: none;
-    color: #6666cc;
-}
-A:active {
-    text-decoration: none;
-    color: #6666cc;
-}
-A:visited {
-    text-decoration: none;
-    color: #6666cc;
-}
-#sf {
-    font-family: arial,helvetica;
-    font-variant: normal;
-    font-style: normal;
-}
-H1 {
-    font-weight: bold;
-    font-size: 24pt;
-    line-height: 24pt;
-    font-family: arial,helvetica;
-    font-variant: normal;
-    font-style: normal;
-}
-H2 {
-    font-weight: bold;
-    font-size: 18pt;
-    line-height: 18pt;
-    font-family: arial,helvetica;
-    font-variant: normal;
-    font-style: normal;
-}
-H3 {
-    font-weight: bold;
-    font-size: 14pt;
-    line-height: 14pt;
-    font-family: arial,helvetica;
-    font-variant: normal;
-    font-style: normal;
-}
-H4 {
-    font-weight: bold;
-    font-size: 12pt;
-    line-height: 12pt;
-    font-family: arial,helvetica;
-    font-variant: normal;
-    font-style: normal;
-}
-#H {
-}
-#D {
-    background-color: #f0f0f0;
-}
-#faq {
-    font-weight: bold;
-    font-size: 16pt;
-    line-height: 16pt;
-    font-family: arial,helvetica;
-    font-variant: normal;
-    font-style: normal;
-}
-#howto {
-    font-weight: bold;
-    font-size: 16pt;
-    line-height: 16pt;
-    font-family: arial,helvetica;
-    font-variant: normal;
-    font-style: normal;
-}
-#term {
-    font-weight: bold;
-    font-size: 16pt;
-    line-height: 16pt;
-    font-family: arial,helvetica;
-    font-variant: normal;
-    font-style: normal;
-}
---></style>
-<script type="text/javascript" language="JavaScript">
-<!-- Hiding the code
-function ro_imgNormal(imgName) {
-    if (document.images) {
-        document[imgName].src = eval(imgName + '_n.src');
-        self.status = '';
-    }
-}
-function ro_imgOver(imgName, descript) {
-    if (document.images) {
-        document[imgName].src = eval(imgName + '_o.src');
-        self.status = descript;
-    }
-}
-// done hiding -->
-</script>
-<script type="text/javascript" language="JavaScript">
-<!-- Hiding the code
-if (document.images) {
-    ro_img_prev_top_n = new Image();
-    ro_img_prev_top_n.src = 'ssl_template.navbut-prev-n.gif';
-    ro_img_prev_top_o = new Image();
-    ro_img_prev_top_o.src = 'ssl_template.navbut-prev-s.gif';
-}
-// done hiding -->
-</script>
-<script type="text/javascript" language="JavaScript">
-<!-- Hiding the code
-if (document.images) {
-    ro_img_prev_bot_n = new Image();
-    ro_img_prev_bot_n.src = 'ssl_template.navbut-prev-n.gif';
-    ro_img_prev_bot_o = new Image();
-    ro_img_prev_bot_o.src = 'ssl_template.navbut-prev-s.gif';
-}
-// done hiding -->
-</script>
-<script type="text/javascript" language="JavaScript">
-<!-- Hiding the code
-if (document.images) {
-    ro_img_next_top_n = new Image();
-    ro_img_next_top_n.src = 'ssl_template.navbut-next-n.gif';
-    ro_img_next_top_o = new Image();
-    ro_img_next_top_o.src = 'ssl_template.navbut-next-s.gif';
-}
-// done hiding -->
-</script>
-<script type="text/javascript" language="JavaScript">
-<!-- Hiding the code
-if (document.images) {
-    ro_img_next_bot_n = new Image();
-    ro_img_next_bot_n.src = 'ssl_template.navbut-next-n.gif';
-    ro_img_next_bot_o = new Image();
-    ro_img_next_bot_o.src = 'ssl_template.navbut-next-s.gif';
-}
-// done hiding -->
-</script>
-</head>
-<body bgcolor="#ffffff" text="#000000" link="#333399" alink="#9999ff" vlink="#000066">
-<div align="center">
-<table width="600" cellspacing="0" cellpadding="0" border="0" summary="">
-<tr>
-  <td>
-      <img src="ssl_template.imgdot-1x1-transp.gif" alt="" width="600" height="1" align="bottom" border="0"><br>
-      <table width="600" cellspacing="0" cellpadding="0" summary="">
-      <tr>
-        <td>
-        <table width="600" summary="">
-        <tr>
-            <td align="left" valign="bottom">
-            <font face="Arial,Helvetica" size="+2"><b>mod_ssl</b></font>
-            </td>
-            <td align="right">
-              <img src="ssl_template.head-chapter.gif" alt="Chapter" width="175" height="94"> <img src="ssl_template.head-num-3.gif" alt="3" width="74" height="89">
-            </td>
-        </tr>
-        </table>
-        </td>
-      </tr>
-      <tr>
-        <td><img src="ssl_template.imgdot-1x1-000000.gif" alt="" width="600" height="2" align="bottom" border="0"></td>
-      </tr>
-      <tr>
-        <td>
-           <table width="600" border="0" summary="">
-           <tr>
-            <td valign="top" align="left" width="250">
-<a href="ssl_intro.html" onmouseover="ro_imgOver('ro_img_prev_top', 'previous page'); return true" onmouseout="ro_imgNormal('ro_img_prev_top'); return true" onfocus="ro_imgOver('ro_img_prev_top', 'previous page'); return true" onblur="ro_imgNormal('ro_img_prev_top'); return true"><img name="ro_img_prev_top" src="ssl_template.navbut-prev-n.gif" alt="previous page" width="70" height="18" border="0"></a><br><font color="#000000">Introduction</font>
-            </td>
-            <td valign="top" align="right" width="250">
-<a href="ssl_compat.html" onmouseover="ro_imgOver('ro_img_next_top', 'next page'); return true" onmouseout="ro_imgNormal('ro_img_next_top'); return true" onfocus="ro_imgOver('ro_img_next_top', 'next page'); return true" onblur="ro_imgNormal('ro_img_next_top'); return true"><img name="ro_img_next_top" src="ssl_template.navbut-next-n.gif" alt="next page" width="70" height="18" border="0"></a><br><font color="#000000">Compatibility</font>
-            </td>
-           </tr>
-           </table>
-         </td>
-      </tr>
-      <tr>
-        <td>
-          <br>
-          <img src="ssl_template.title-ref.gif" alt="Reference" width="456" height="60">
-        </td>
-      </tr>
-      </table>
-<div align="right">
-<table cellspacing="0" cellpadding="0" width="150" summary="">
-<tr>
-<td>
-<em>
-``Try to understand everything,
-but believe nothing!''
-</em>
-</td>
-</tr>
-<tr>
-<td align="right">
-<font size="-1">
-Unknown
-</font>
-</td>
-</tr>
-</table>
-</div>
-<p>
-<table cellspacing="0" cellpadding="0" border="0" summary="">
-<tr valign="bottom">
-<td>
-<img src="ssl_reference.gfont000.gif" alt="T" width="34" height="34" border="0" align="left">
-his chapter provides a reference to all configuration directives and
-additional user visible features mod_ssl provides. It's intended as the
-official resource when you want to know how a particilar mod_ssl functionality
-is actually configured or activated. Each directive is documented similar to
-the way standard Apache directives are documented in the official Apache
-documentation set, i.e. for each directive especially the syntax, default and
-context where applicable is given.
-<p>
-Notice that there are three major classes of directives which are used by
-mod_ssl: First <em>Global Directives</em> (i.e. directives with context
-``server config''), which can occur inside the server config files but only
-outside of any sectioning commands like &lt;VirtualHost&gt;. Second
-<em>Per-Server Directives</em> (i.e. those with context ``server config,
-virtual host''), which can occur inside the server config files both outside
-(for the main/default server) and inside &lt;VirtualHost&gt; sections.
-</td>
-<td>
-&nbsp;&nbsp;
-</td>
-<td>
-<div align="right">
-<table cellspacing="0" cellpadding="5" border="0" bgcolor="#ccccff" summary="">
-<tr>
-<td bgcolor="#333399">
-<font face="Arial,Helvetica" color="#ccccff">
-<b>Table Of Contents</b>
-</font>
-</td>
-</tr>
-<tr>
-<td>
-<font face="Arial,Helvetica" size="-1">
-<a href="#ToC1"><strong>Configuration Directives</strong></a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC2"><strong>SSLPassPhraseDialog</strong></a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC3"><strong>SSLMutex</strong></a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC4"><strong>SSLRandomSeed</strong></a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC5"><strong>SSLSessionCache</strong></a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC6"><strong>SSLSessionCacheTimeout</strong></a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC7"><strong>SSLEngine</strong></a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC8"><strong>SSLProtocol</strong></a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC9"><strong>SSLCipherSuite</strong></a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC10"><strong>SSLCertificateFile</strong></a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC11"><strong>SSLCertificateKeyFile</strong></a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC12"><strong>SSLCertificateChainFile</strong></a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC13"><strong>SSLCACertificatePath</strong></a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC14"><strong>SSLCACertificateFile</strong></a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC15"><strong>SSLCARevocationPath</strong></a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC16"><strong>SSLCARevocationFile</strong></a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC17"><strong>SSLVerifyClient</strong></a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC18"><strong>SSLVerifyDepth</strong></a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC19"><strong>SSLLog</strong></a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC20"><strong>SSLLogLevel</strong></a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC21"><strong>SSLOptions</strong></a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC22"><strong>SSLRequireSSL</strong></a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC23"><strong>SSLRequire</strong></a><br>
-<a href="#ToC24"><strong>Additional Features</strong></a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC25"><strong>Environment Variables</strong></a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC26"><strong>Custom Log Formats</strong></a><br>
-</font>
-</td>
-</tr>
-</table>
-</div>
-</td>
-</tr>
-</table>
-<p>
-And third <em>Per-Directory Directives</em> (i.e. those with context ``server
-config, virtual host, directory, .htaccess''), which can pretty much occur
-everywhere. Especially both inside the server config files and the
-per-directory <code>.htaccess</code> files. The three classes are subsets of
-each other, i.e. directives from the per-directory class can also be used in
-the per-server and global context, and directives from the per-server class
-can also be used the in the global context.
-<p>
-Additional directives and environment variables provided by mod_ssl (via
-on-the-fly mapping) for backward compatiblity to other Apache SSL solutions
-are documented in the <a href="ssl_compat.html">Compatibility</a> chapter.
-<h1><a name="ToC1">Configuration Directives</a></h1>
-The most visible and error-prone things of mod_ssl are its configuration
-directives. So we document them in great detail here to assist you in setting
-up the best possible configuration of your SSL-aware webserver.
-<!-- SSLPassPhraseDialog -------------------------------------------->
-<p>
-<br>
-<a name="SSLPassPhraseDialog"></a>
-<h2><a name="ToC2">SSLPassPhraseDialog</a></h2>
-<p>
-<table cellspacing="0" cellpadding="1" bgcolor="#cccccc" border="0" summary="">
-<tr>
-<td>
-<table bgcolor="white" width="600" cellspacing="0" cellpadding="5" border="0" summary="">
-<tr>
-<td>
-<table cellspacing="0" cellpadding="1" border="0" summary="">
-<tr><td>
-<font face="Arial,Helvetica"><b>Name:</b></font></a> </td><td> <b>SSLPassPhraseDialog</b></td></tr>
-<tr><td>
-<font face="Arial,Helvetica"><b>Description:</b></font></a> </td><td> Type of pass phrase dialog for encrypted private keys</td></tr>
-<tr><td><a
- href="../directive-dict.html#Syntax"
- rel="Help"
-><font face="Arial,Helvetica"><b>Syntax:</b></font></a> </td><td> <code>SSLPassPhraseDialog</code> <em>type</em></td></tr>
-<tr><td><a
- href="../directive-dict.html#Default"
- rel="Help"
-><font face="Arial,Helvetica"><b>Default:</b></font></a> </td><td> <code>SSLPassPhraseDialog builtin</code></td></tr>
-<tr><td><a
- href="../directive-dict.html#Context"
- rel="Help"
-><font face="Arial,Helvetica"><b>Context:</b></font></a> </td><td> server config</td></tr>
-<tr><td><a
- href="../directive-dict.html#Override"
- rel="Help"
-><font face="Arial,Helvetica"><b>Override:</b></font></a> </td><td> <em>Not applicable</em></td></tr>
-<tr><td><a
- href="../directive-dict.html#Status"
- rel="Help"
-><font face="Arial,Helvetica"><b>Status:</b></font></a> </td><td> Extension</td></tr>
-<tr><td><a
- href="../directive-dict.html#Module"
- rel="Help"
-><font face="Arial,Helvetica"><b>Module:</b></font></a> </td><td> mod_ssl</td></tr>
-<tr><td><a
- href="../directive-dict.html#Compatibility"
- rel="Help"
-><font face="Arial,Helvetica"><b>Compatibility:</b></font></a> </td><td> mod_ssl 2.1 </td></tr>
-</table>
-</td>
-</tr>
-</table>
-</td>
-</tr>
-</table>
-<p>
-When Apache starts up it has to read the various Certificate (see <a
-href="#SSLCertificateFile">SSLCertificateFile</a>) and Private Key (see <a
-href="#SSLCertificateKeyFile">SSLCertificateKeyFile</a>) files of the
-SSL-enabled virtual servers. Because for security reasons the Private Key
-files are usually encrypted, mod_ssl needs to query the administrator for a
-Pass Phrase in order to decrypt those files. This query can be done in two ways
-which can be configured by <em>type</em>:
-<ul>
-<li><code>builtin</code>
-    <p>
-    This is the default where an interactive terminal dialog occurs at startup
-    time just before Apache detaches from the terminal. Here the administrator
-    has to manually enter the Pass Phrase for each encrypted Private Key file.
-    Because a lot of SSL-enabled virtual hosts can be configured, the
-    following reuse-scheme is used to minimize the dialog: When a Private Key
-    file is encrypted, all known Pass Phrases (at the beginning there are
-    none, of course) are tried. If one of those known Pass Phrases succeeds no
-    dialog pops up for this particular Private Key file. If none succeeded,
-    another Pass Phrase is queried on the terminal and remembered for the next
-    round (where it perhaps can be reused).
-    <p>
-    This scheme allows mod_ssl to be maximally flexible (because for N encrypted
-    Private Key files you <em>can</em> use N different Pass Phrases - but then
-    you have to enter all of them, of course) while minimizing the terminal
-    dialog (i.e. when you use a single Pass Phrase for all N Private Key files
-    this Pass Phrase is queried only once).
-<p>
-<li><code>exec:/path/to/program</code>
-    <p>
-    Here an external program is configured which is called at startup for each
-    encrypted Private Key file. It is called with two arguments (the first is
-    of the form ``<code>servername:portnumber</code>'', the second is either
-    ``<code>RSA</code>'' or ``<code>DSA</code>''), which indicate for which
-    server and algorithm it has to print the corresponding Pass Phrase to
-    <code>stdout</code>. The intent is that this external program first runs
-    security checks to make sure that the system is not compromised by an
-    attacker, and only when these checks were passed successfully it provides
-    the Pass Phrase.
-    <p>
-    Both these security checks, and the way the Pass Phrase is determined, can
-    be as complex as you like. Mod_ssl just defines the interface: an
-    executable program which provides the Pass Phrase on <code>stdout</code>.
-    Nothing more or less! So, if you're really paranoid about security, here
-    is your interface. Anything else has to be left as an exercise to the
-    administrator, because local security requirements are so different.
-    <p>
-    The reuse-algorithm above is used here, too. In other words: The external
-    program is called only once per unique Pass Phrase.
-</ul>
-<p>
-Example:
-<blockquote>
-<pre>
-SSLPassPhraseDialog exec:/usr/local/apache/sbin/pp-filter
-</pre>
-</blockquote>
-<!-- SSLMutex ------------------------------------------------------->
-<p>
-<br>
-<a name="SSLMutex"></a>
-<h2><a name="ToC3">SSLMutex</a></h2>
-<p>
-<table cellspacing="0" cellpadding="1" bgcolor="#cccccc" border="0" summary="">
-<tr>
-<td>
-<table bgcolor="white" width="600" cellspacing="0" cellpadding="5" border="0" summary="">
-<tr>
-<td>
-<table cellspacing="0" cellpadding="1" border="0" summary="">
-<tr><td>
-<font face="Arial,Helvetica"><b>Name:</b></font></a> </td><td> <b>SSLMutex</b></td></tr>
-<tr><td>
-<font face="Arial,Helvetica"><b>Description:</b></font></a> </td><td> Semaphore for internal mutual exclusion of operations</td></tr>
-<tr><td><a
- href="../directive-dict.html#Syntax"
- rel="Help"
-><font face="Arial,Helvetica"><b>Syntax:</b></font></a> </td><td> <code>SSLMutex</code> <em>type</em></td></tr>
-<tr><td><a
- href="../directive-dict.html#Default"
- rel="Help"
-><font face="Arial,Helvetica"><b>Default:</b></font></a> </td><td> <code>SSLMutex none</code></td></tr>
-<tr><td><a
- href="../directive-dict.html#Context"
- rel="Help"
-><font face="Arial,Helvetica"><b>Context:</b></font></a> </td><td> server config</td></tr>
-<tr><td><a
- href="../directive-dict.html#Override"
- rel="Help"
-><font face="Arial,Helvetica"><b>Override:</b></font></a> </td><td> <em>Not applicable</em></td></tr>
-<tr><td><a
- href="../directive-dict.html#Status"
- rel="Help"
-><font face="Arial,Helvetica"><b>Status:</b></font></a> </td><td> Extension</td></tr>
-<tr><td><a
- href="../directive-dict.html#Module"
- rel="Help"
-><font face="Arial,Helvetica"><b>Module:</b></font></a> </td><td> mod_ssl</td></tr>
-<tr><td><a
- href="../directive-dict.html#Compatibility"
- rel="Help"
-><font face="Arial,Helvetica"><b>Compatibility:</b></font></a> </td><td> mod_ssl 2.1 </td></tr>
-</table>
-</td>
-</tr>
-</table>
-</td>
-</tr>
-</table>
-<p>
-This configures the SSL engine's semaphore (aka. lock) which is used for mutual
-exclusion of operations which have to be done in a synchronized way between the
-pre-forked Apache server processes. This directive can only be used in the
-global server context because it's only useful to have one global mutex.
-<p>
-The following Mutex <em>types</em> are available:
-<ul>
-<li><code>none</code>
-    <p>
-    This is the default where no Mutex is used at all. Use it at your own
-    risk. But because currently the Mutex is mainly used for synchronizing
-    write access to the SSL Session Cache you can live without it as long
-    as you accept a sometimes garbled Session Cache. So it's not recommended
-    to leave this the default. Instead configure a real Mutex.
-<p>
-<li><code>file:/path/to/mutex</code>
-    <p>
-    This is the portable and (under Unix) always provided Mutex variant where
-    a physical (lock-)file is used as the Mutex. Always use a local disk
-    filesystem for <code>/path/to/mutex</code> and never a file residing on a
-    NFS- or AFS-filesystem. Note: Internally, the Process ID (PID) of the
-    Apache parent process is automatically appended to
-    <code>/path/to/mutex</code> to make it unique, so you don't have to worry
-    about conflicts yourself. Notice that this type of mutex is not available
-    under the Win32 environment. There you <i>have</i> to use the semaphore
-    mutex.
-<p>
-<li><code>sem</code>
-    <p>
-    This is the most elegant but also most non-portable Mutex variant where a
-    SysV IPC Semaphore (under Unix) and a Windows Mutex (under Win32) is used
-    when possible. It is only available when the underlying platform
-    supports it.
-</ul>
-<p>
-Example:
-<blockquote>
-<pre>
-SSLMutex file:/usr/local/apache/logs/ssl_mutex
-</pre>
-</blockquote>
-<!-- SSLRandomSeed -------------------------------------------------->
-<p>
-<br>
-<a name="SSLRandomSeed"></a>
-<h2><a name="ToC4">SSLRandomSeed</a></h2>
-<p>
-<table cellspacing="0" cellpadding="1" bgcolor="#cccccc" border="0" summary="">
-<tr>
-<td>
-<table bgcolor="white" width="600" cellspacing="0" cellpadding="5" border="0" summary="">
-<tr>
-<td>
-<table cellspacing="0" cellpadding="1" border="0" summary="">
-<tr><td>
-<font face="Arial,Helvetica"><b>Name:</b></font></a> </td><td> <b>SSLRandomSeed</b></td></tr>
-<tr><td>
-<font face="Arial,Helvetica"><b>Description:</b></font></a> </td><td> Pseudo Random Number Generator (PRNG) seeding source</td></tr>
-<tr><td><a
- href="../directive-dict.html#Syntax"
- rel="Help"
-><font face="Arial,Helvetica"><b>Syntax:</b></font></a> </td><td> <code>SSLRandomSeed</code> <em>context</em> <em>source</em> [<em>bytes</em>]</td></tr>
-<tr><td><a
- href="../directive-dict.html#Default"
- rel="Help"
-><font face="Arial,Helvetica"><b>Default:</b></font></a> </td><td> <em>none</em></td></tr>
-<tr><td><a
- href="../directive-dict.html#Context"
- rel="Help"
-><font face="Arial,Helvetica"><b>Context:</b></font></a> </td><td> server config</td></tr>
-<tr><td><a
- href="../directive-dict.html#Override"
- rel="Help"
-><font face="Arial,Helvetica"><b>Override:</b></font></a> </td><td> <em>Not applicable</em></td></tr>
-<tr><td><a
- href="../directive-dict.html#Status"
- rel="Help"
-><font face="Arial,Helvetica"><b>Status:</b></font></a> </td><td> Extension</td></tr>
-<tr><td><a
- href="../directive-dict.html#Module"
- rel="Help"
-><font face="Arial,Helvetica"><b>Module:</b></font></a> </td><td> mod_ssl</td></tr>
-<tr><td><a
- href="../directive-dict.html#Compatibility"
- rel="Help"
-><font face="Arial,Helvetica"><b>Compatibility:</b></font></a> </td><td> mod_ssl 2.2 </td></tr>
-</table>
-</td>
-</tr>
-</table>
-</td>
-</tr>
-</table>
-<p>
-This configures one or more sources for seeding the Pseudo Random Number
-Generator (PRNG) in OpenSSL at startup time (<em>context</em> is
-<code>startup</code>) and/or just before a new SSL connection is established
-(<em>context</em> is <code>connect</code>). This directive can only be used
-in the global server context because the PRNG is a global facility.
-<p>
-The following <em>source</em> variants are available:
-<ul>
-<li><code>builtin</code>
-    <p> This is the always available builtin seeding source. Its usage
-    consumes minimum CPU cycles under runtime and hence can be always used
-    without drawbacks. The source used for seeding the PRNG contains of the
-    current time, the current process id and (when applicable) a randomly
-    choosen 1KB extract of the inter-process scoreboard structure of Apache.
-    The drawback is that this is not really a strong source and at startup
-    time (where the scoreboard is still not available) this source just
-    produces a few bytes of entropy. So you should always, at least for the
-    startup, use an additional seeding source.
-<p>
-<li><code>file:/path/to/source</code>
-    <p>
-    This variant uses an external file <code>/path/to/source</code> as the
-    source for seeding the PRNG. When <em>bytes</em> is specified, only the
-    first <em>bytes</em> number of bytes of the file form the entropy (and
-    <em>bytes</em> is given to <code>/path/to/source</code> as the first
-    argument). When <em>bytes</em> is not specified the whole file forms the
-    entropy (and <code>0</code> is given to <code>/path/to/source</code> as
-    the first argument). Use this especially at startup time, for instance
-    with an available <code>/dev/random</code> and/or
-    <code>/dev/urandom</code> devices (which usually exist on modern Unix
-    derivates like FreeBSD and Linux).
-    <p>
-    <em>But be careful</em>: Usually <code>/dev/random</code> provides only as
-    much entropy data as it actually has, i.e. when you request 512 bytes of
-    entropy, but the device currently has only 100 bytes available two things
-    can happen: On some platforms you receive only the 100 bytes while on
-    other platforms the read blocks until enough bytes are available (which
-    can take a long time). Here using an existing <code>/dev/urandom</code> is
-    better, because it never blocks and actually gives the amount of requested
-    data. The drawback is just that the quality of the received data may not
-    be the best.
-    <p>
-    On some platforms like FreeBSD one can even control how the entropy is
-    actually generated, i.e. by which system interrupts. More details one can
-    find under <i>rndcontrol(8)</i> on those platforms. Alternatively, when
-    your system lacks such a random device, you can use tool
-    like <a href="http://www.lothar.com/tech/crypto/">EGD</a>
-    (Entropy Gathering Daemon) and run its client program with the
-    <code>exec:/path/to/program/</code> variant (see below) or use
-    <code>egd:/path/to/egd-socket</code> (see below).
-<p>
-<li><code>exec:/path/to/program</code>
-    <p>
-    This variant uses an external executable <code>/path/to/program</code> as
-    the source for seeding the PRNG. When <em>bytes</em> is specified, only the
-    first <em>bytes</em> number of bytes of its <code>stdout</code> contents
-    form the entropy. When <em>bytes</em> is not specified, the entirety of
-    the data produced on <code>stdout</code> form the entropy. Use this only
-    at startup time when you need a very strong seeding with the help of an
-    external program (for instance as in the example above with the
-    <code>truerand</code> utility you can find in the mod_ssl distribution
-    which is based on the AT&amp;T <em>truerand</em> library). Using this in
-    the connection context slows down the server too dramatically, of course.
-    So usually you should avoid using external programs in that context.
-<p>
-<li><code>egd:/path/to/egd-socket</code> (Unix only)
-    <p>
-    This variant uses the Unix domain socket of the
-    external Entropy Gathering Daemon (EGD) (see <a
-    href="http://www.lothar.com/tech/crypto/">http://www.lothar.com/tech
-    /crypto/</a>) to seed the PRNG. Use this if no random device exists
-    on your platform.
-</ul>
-<p>
-Example:
-<blockquote>
-<pre>
-SSLRandomSeed startup builtin
-SSLRandomSeed startup file:/dev/random
-SSLRandomSeed startup file:/dev/urandom 1024
-SSLRandomSeed startup exec:/usr/local/bin/truerand 16
-SSLRandomSeed connect builtin
-SSLRandomSeed connect file:/dev/random
-SSLRandomSeed connect file:/dev/urandom 1024
-</pre>
-</blockquote>
-<!-- SSLSessionCache ------------------------------------------------>
-<p>
-<br>
-<a name="SSLSessionCache"></a>
-<h2><a name="ToC5">SSLSessionCache</a></h2>
-<table cellspacing="0" cellpadding="1" bgcolor="#cccccc" border="0" summary="">
-<tr>
-<td>
-<table bgcolor="white" width="600" cellspacing="0" cellpadding="5" border="0" summary="">
-<tr>
-<td>
-<table cellspacing="0" cellpadding="1" border="0" summary="">
-<tr><td>
-<font face="Arial,Helvetica"><b>Name:</b></font></a> </td><td> <b>SSLSessionCache</b></td></tr>
-<tr><td>
-<font face="Arial,Helvetica"><b>Description:</b></font></a> </td><td> Type of the global/inter-process SSL Session Cache</td></tr>
-<tr><td><a
- href="../directive-dict.html#Syntax"
- rel="Help"
-><font face="Arial,Helvetica"><b>Syntax:</b></font></a> </td><td> <code>SSLSessionCache</code> <em>type</em></td></tr>
-<tr><td><a
- href="../directive-dict.html#Default"
- rel="Help"
-><font face="Arial,Helvetica"><b>Default:</b></font></a> </td><td> <code>SSLSessionCache none</code></td></tr>
-<tr><td><a
- href="../directive-dict.html#Context"
- rel="Help"
-><font face="Arial,Helvetica"><b>Context:</b></font></a> </td><td> server config</td></tr>
-<tr><td><a
- href="../directive-dict.html#Override"
- rel="Help"
-><font face="Arial,Helvetica"><b>Override:</b></font></a> </td><td> <em>Not applicable</em></td></tr>
-<tr><td><a
- href="../directive-dict.html#Status"
- rel="Help"
-><font face="Arial,Helvetica"><b>Status:</b></font></a> </td><td> Extension</td></tr>
-<tr><td><a
- href="../directive-dict.html#Module"
- rel="Help"
-><font face="Arial,Helvetica"><b>Module:</b></font></a> </td><td> mod_ssl</td></tr>
-<tr><td><a
- href="../directive-dict.html#Compatibility"
- rel="Help"
-><font face="Arial,Helvetica"><b>Compatibility:</b></font></a> </td><td> mod_ssl 2.1 </td></tr>
-</table>
-</td>
-</tr>
-</table>
-</td>
-</tr>
-</table>
-<p>
-This configures the storage type of the global/inter-process SSL Session
-Cache. This cache is an optional facility which speeds up parallel request
-processing. For requests to the same server process (via HTTP keep-alive),
-OpenSSL already caches the SSL session information locally. But because modern
-clients request inlined images and other data via parallel requests (usually
-up to four parallel requests are common) those requests are served by
-<em>different</em> pre-forked server processes. Here an inter-process cache
-helps to avoid unneccessary session handshakes.
-<p>
-The following two storage <em>type</em>s are currently supported:
-<ul>
-<li><code>none</code>
-    <p>
-    This is the default and just disables the global/inter-process Session
-    Cache. There is no drawback in functionality, but a noticeable speed
-    penalty can be observed.
-<p>
-<li><code>dbm:/path/to/datafile</code>
-    <p>
-    This makes use of a DBM hashfile on the local disk to synchronize the
-    local OpenSSL memory caches of the server processes. The slight increase
-    in I/O on the server results in a visible request speedup for your
-    clients, so this type of storage is generally recommended.
-<p>
-<li><code>shm:/path/to/datafile</code>[<code>(</code><i>size</i><code>)</code>]
-    <p>
-    This makes use of a high-performance hash table (approx. <i>size</i> bytes
-    in size) inside a shared memory segment in RAM (established via
-    <code>/path/to/datafile</code>) to synchronize the local OpenSSL memory
-    caches of the server processes. This storage type is not available on all
-    platforms. See the mod_ssl <code>INSTALL</code> document for details on
-    how to build Apache+EAPI with shared memory support.
-</ul>
-<p>
-Examples:
-<blockquote>
-<pre>
-SSLSessionCache dbm:/usr/local/apache/logs/ssl_gcache_data
-SSLSessionCache shm:/usr/local/apache/logs/ssl_gcache_data(512000)
-</pre>
-</blockquote>
-<!-- SSLSessionCacheTimeout ----------------------------------------->
-<p>
-<br>
-<a name="SSLSessionCacheTimeout"></a>
-<h2><a name="ToC6">SSLSessionCacheTimeout</a></h2>
-<table cellspacing="0" cellpadding="1" bgcolor="#cccccc" border="0" summary="">
-<tr>
-<td>
-<table bgcolor="white" width="600" cellspacing="0" cellpadding="5" border="0" summary="">
-<tr>
-<td>
-<table cellspacing="0" cellpadding="1" border="0" summary="">
-<tr><td>
-<font face="Arial,Helvetica"><b>Name:</b></font></a> </td><td> <b>SSLSessionCacheTimeout</b></td></tr>
-<tr><td>
-<font face="Arial,Helvetica"><b>Description:</b></font></a> </td><td> Number of seconds before an SSL session expires in the Session Cache</td></tr>
-<tr><td><a
- href="../directive-dict.html#Syntax"
- rel="Help"
-><font face="Arial,Helvetica"><b>Syntax:</b></font></a> </td><td> <code>SSLSessionCacheTimeout</code> <em>seconds</em></td></tr>
-<tr><td><a
- href="../directive-dict.html#Default"
- rel="Help"
-><font face="Arial,Helvetica"><b>Default:</b></font></a> </td><td> <code>SSLSessionCacheTimeout 300</code></td></tr>
-<tr><td><a
- href="../directive-dict.html#Context"
- rel="Help"
-><font face="Arial,Helvetica"><b>Context:</b></font></a> </td><td> server config, virtual host</td></tr>
-<tr><td><a
- href="../directive-dict.html#Override"
- rel="Help"
-><font face="Arial,Helvetica"><b>Override:</b></font></a> </td><td> <em>Not applicable</em></td></tr>
-<tr><td><a
- href="../directive-dict.html#Status"
- rel="Help"
-><font face="Arial,Helvetica"><b>Status:</b></font></a> </td><td> Extension</td></tr>
-<tr><td><a
- href="../directive-dict.html#Module"
- rel="Help"
-><font face="Arial,Helvetica"><b>Module:</b></font></a> </td><td> mod_ssl</td></tr>
-<tr><td><a
- href="../directive-dict.html#Compatibility"
- rel="Help"
-><font face="Arial,Helvetica"><b>Compatibility:</b></font></a> </td><td> mod_ssl 2.0 </td></tr>
-</table>
-</td>
-</tr>
-</table>
-</td>
-</tr>
-</table>
-<p>
-This directive sets the timeout in seconds for the information stored in the
-global/inter-process SSL Session Cache and the OpenSSL internal memory cache.
-It can be set as low as 15 for testing, but should be set to higher
-values like 300 in real life.
-<p>
-Example:
-<blockquote>
-<pre>
-SSLSessionCacheTimeout 600
-</pre>
-</blockquote>
-<!-- SSLEngine ------------------------------------------------------>
-<p>
-<br>
-<a name="SSLEngine"></a>
-<h2><a name="ToC7">SSLEngine</a></h2>
-<table cellspacing="0" cellpadding="1" bgcolor="#cccccc" border="0" summary="">
-<tr>
-<td>
-<table bgcolor="white" width="600" cellspacing="0" cellpadding="5" border="0" summary="">
-<tr>
-<td>
-<table cellspacing="0" cellpadding="1" border="0" summary="">
-<tr><td>
-<font face="Arial,Helvetica"><b>Name:</b></font></a> </td><td> <b>SSLEngine</b></td></tr>
-<tr><td>
-<font face="Arial,Helvetica"><b>Description:</b></font></a> </td><td> SSL Engine Operation Switch</td></tr>
-<tr><td><a
- href="../directive-dict.html#Syntax"
- rel="Help"
-><font face="Arial,Helvetica"><b>Syntax:</b></font></a> </td><td> <code>SSLEngine</code> <em>on|off</em></td></tr>
-<tr><td><a
- href="../directive-dict.html#Default"
- rel="Help"
-><font face="Arial,Helvetica"><b>Default:</b></font></a> </td><td> <code>SSLEngine off</code></td></tr>
-<tr><td><a
- href="../directive-dict.html#Context"
- rel="Help"
-><font face="Arial,Helvetica"><b>Context:</b></font></a> </td><td> server config, virtual host</td></tr>
-<tr><td><a
- href="../directive-dict.html#Override"
- rel="Help"
-><font face="Arial,Helvetica"><b>Override:</b></font></a> </td><td> <em>Not applicable</em></td></tr>
-<tr><td><a
- href="../directive-dict.html#Status"
- rel="Help"
-><font face="Arial,Helvetica"><b>Status:</b></font></a> </td><td> Extension</td></tr>
-<tr><td><a
- href="../directive-dict.html#Module"
- rel="Help"
-><font face="Arial,Helvetica"><b>Module:</b></font></a> </td><td> mod_ssl</td></tr>
-<tr><td><a
- href="../directive-dict.html#Compatibility"
- rel="Help"
-><font face="Arial,Helvetica"><b>Compatibility:</b></font></a> </td><td> mod_ssl 2.1 </td></tr>
-</table>
-</td>
-</tr>
-</table>
-</td>
-</tr>
-</table>
-<p>
-This directive toggles the usage of the SSL/TLS Protocol Engine. This is
-usually used inside a &lt;VirtualHost&gt; section to enable SSL/TLS for a
-particular virtual host. By default the SSL/TLS Protocol Engine is disabled
-for both the main server and all configured virtual hosts.
-<p>
-Example:
-<blockquote>
-<pre>
-&lt;VirtualHost _default_:443&gt;
-SSLEngine on
-...
-&lt;/VirtualHost&gt;
-</pre>
-</blockquote>
-<!-- SSLProtocol ---------------------------------------------------->
-<p>
-<br>
-<a name="SSLProtocol"></a>
-<h2><a name="ToC8">SSLProtocol</a></h2>
-<table cellspacing="0" cellpadding="1" bgcolor="#cccccc" border="0" summary="">
-<tr>
-<td>
-<table bgcolor="white" width="600" cellspacing="0" cellpadding="5" border="0" summary="">
-<tr>
-<td>
-<table cellspacing="0" cellpadding="1" border="0" summary="">
-<tr><td>
-<font face="Arial,Helvetica"><b>Name:</b></font></a> </td><td> <b>SSLProtocol</b></td></tr>
-<tr><td>
-<font face="Arial,Helvetica"><b>Description:</b></font></a> </td><td> Configure usable SSL protocol flavors</td></tr>
-<tr><td><a
- href="../directive-dict.html#Syntax"
- rel="Help"
-><font face="Arial,Helvetica"><b>Syntax:</b></font></a> </td><td> <code>SSLProtocol</code> [+-]<em>protocol</em> ...</td></tr>
-<tr><td><a
- href="../directive-dict.html#Default"
- rel="Help"
-><font face="Arial,Helvetica"><b>Default:</b></font></a> </td><td> <code>SSLProtocol all</code></td></tr>
-<tr><td><a
- href="../directive-dict.html#Context"
- rel="Help"
-><font face="Arial,Helvetica"><b>Context:</b></font></a> </td><td> server config, virtual host</td></tr>
-<tr><td><a
- href="../directive-dict.html#Override"
- rel="Help"
-><font face="Arial,Helvetica"><b>Override:</b></font></a> </td><td> Options</td></tr>
-<tr><td><a
- href="../directive-dict.html#Status"
- rel="Help"
-><font face="Arial,Helvetica"><b>Status:</b></font></a> </td><td> Extension</td></tr>
-<tr><td><a
- href="../directive-dict.html#Module"
- rel="Help"
-><font face="Arial,Helvetica"><b>Module:</b></font></a> </td><td> mod_ssl</td></tr>
-<tr><td><a
- href="../directive-dict.html#Compatibility"
- rel="Help"
-><font face="Arial,Helvetica"><b>Compatibility:</b></font></a> </td><td> mod_ssl 2.2 </td></tr>
-</table>
-</td>
-</tr>
-</table>
-</td>
-</tr>
-</table>
-<p>
-This directive can be used to control the SSL protocol flavors mod_ssl should
-use when establishing its server environment. Clients then can only connect
-with one of the provided protocols.
-<p>
-The available (case-insensitive) <em>protocol</em>s are:
-<ul>
-<li><code>SSLv2</code>
-    <p>
-    This is the Secure Sockets Layer (SSL) protocol, version 2.0. It is the
-    original SSL protocol as designed by Netscape Corporation.
-<p>
-<li><code>SSLv3</code>
-    <p>
-    This is the Secure Sockets Layer (SSL) protocol, version 3.0. It is the
-    successor to SSLv2 and the currently (as of February 1999) de-facto
-    standardized SSL protocol from Netscape Corporation. It's supported by
-    almost all popular browsers.
-<p>
-<li><code>TLSv1</code>
-    <p>
-    This is the Transport Layer Security (TLS) protocol, version 1.0. It is the
-    successor to SSLv3 and currently (as of February 1999) still under
-    construction by the Internet Engineering Task Force (IETF). It's still
-    not supported by all popular browsers.
-<p>
-<li><code>All</code>
-    <p>
-    This is a shortcut for ``<code>+SSLv2 +SSLv3 +TLSv1</code>'' and a
-    convinient way for enabling all protocols except one when used in
-    combination with the minus sign on a protocol as the example above shows.
-</ul>
-<p>
-Example:
-<blockquote>
-<pre>
-#   enable SSLv3 and TLSv1, but not SSLv2
-SSLProtocol all -SSLv2
-</pre>
-</blockquote>
-<!-- SSLCipherSuite ------------------------------------------------->
-<p>
-<br>
-<a name="SSLCipherSuite"></a>
-<h2><a name="ToC9">SSLCipherSuite</a></h2>
-<table cellspacing="0" cellpadding="1" bgcolor="#cccccc" border="0" summary="">
-<tr>
-<td>
-<table bgcolor="white" width="600" cellspacing="0" cellpadding="5" border="0" summary="">
-<tr>
-<td>
-<table cellspacing="0" cellpadding="1" border="0" summary="">
-<tr><td>
-<font face="Arial,Helvetica"><b>Name:</b></font></a> </td><td> <b>SSLCipherSuite</b></td></tr>
-<tr><td>
-<font face="Arial,Helvetica"><b>Description:</b></font></a> </td><td> Cipher Suite available for negotiation in SSL handshake</td></tr>
-<tr><td><a
- href="../directive-dict.html#Syntax"
- rel="Help"
-><font face="Arial,Helvetica"><b>Syntax:</b></font></a> </td><td> <code>SSLCipherSuite</code> <em>cipher-spec</em></td></tr>
-<tr><td><a
- href="../directive-dict.html#Default"
- rel="Help"
-><font face="Arial,Helvetica"><b>Default:</b></font></a> </td><td> <code>SSLCipherSuite ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP</code></td></tr>
-<tr><td><a
- href="../directive-dict.html#Context"
- rel="Help"
-><font face="Arial,Helvetica"><b>Context:</b></font></a> </td><td> server config, virtual host, directory, .htaccess</td></tr>
-<tr><td><a
- href="../directive-dict.html#Override"
- rel="Help"
-><font face="Arial,Helvetica"><b>Override:</b></font></a> </td><td> AuthConfig</td></tr>
-<tr><td><a
- href="../directive-dict.html#Status"
- rel="Help"
-><font face="Arial,Helvetica"><b>Status:</b></font></a> </td><td> Extension</td></tr>
-<tr><td><a
- href="../directive-dict.html#Module"
- rel="Help"
-><font face="Arial,Helvetica"><b>Module:</b></font></a> </td><td> mod_ssl</td></tr>
-<tr><td><a
- href="../directive-dict.html#Compatibility"
- rel="Help"
-><font face="Arial,Helvetica"><b>Compatibility:</b></font></a> </td><td> mod_ssl 2.1 </td></tr>
-</table>
-</td>
-</tr>
-</table>
-</td>
-</tr>
-</table>
-<p>
-This complex directive uses a colon-separated <em>cipher-spec</em> string
-consisting of OpenSSL cipher specifications to configure the Cipher Suite the
-client is permitted to negotiate in the SSL handshake phase. Notice that this
-directive can be used both in per-server and per-directory context. In
-per-server context it applies to the standard SSL handshake when a connection
-is established. In per-directory context it forces a SSL renegotation with the
-reconfigured Cipher Suite after the HTTP request was read but before the HTTP
-response is sent.
-<p>
-An SSL cipher specification in <em>cipher-spec</em> is composed of 4 major
-attributes plus a few extra minor ones:
-<ul>
-<li><em>Key Exchange Algorithm</em>:<br>
-    RSA or Diffie-Hellman variants.
-<p>
-<li><em>Authentication Algorithm</em>:<br>
-    RSA, Diffie-Hellman, DSS or none.
-<p>
-<li><em>Cipher/Encryption Algorithm</em>:<br>
-    DES, Triple-DES, RC4, RC2, IDEA or none.
-<p>
-<li><em>MAC Digest Algorithm</em>:<br>
-    MD5, SHA or SHA1.
-</ul>
-An SSL cipher can also be an export cipher and is either a SSLv2 or SSLv3/TLSv1
-cipher (here TLSv1 is equivalent to SSLv3). To specify which ciphers to use,
-one can either specify all the Ciphers, one at a time, or use aliases to
-specify the preference and order for the ciphers (see <a href="#table1">Table
-1</a>).
-<p>
-<div align="center">
-<a name="table1"></a>
-<table width="600" cellspacing="0" cellpadding="1" border="0" summary="">
-<caption align="bottom" id="sf">Table 1: OpenSSL Cipher Specification Tags</caption>
-<tr><td bgcolor="#cccccc">
-<table width="598" cellpadding="5" cellspacing="0" border="0" summary="">
-<tr><td valign="top" align="center" bgcolor="#ffffff">
-<table border="0" cellspacing="0" cellpadding="2" width="598" summary="">
-<tr id="D"><td><b>Tag</b></td> <td><b>Description</b></td>
-<tr id="H"><td colspan="2"><em>Key Exchange Algorithm:</em></td></tr>
-<tr id="D"><td><code>kRSA</code></td>   <td>RSA key exchange</td></tr>
-<tr id="H"><td><code>kDHr</code></td>   <td>Diffie-Hellman key exchange with RSA key</td></tr>
-<tr id="D"><td><code>kDHd</code></td>   <td>Diffie-Hellman key exchange with DSA key</td></tr>
-<tr id="H"><td><code>kEDH</code></td>   <td>Ephemeral (temp.key) Diffie-Hellman key exchange (no cert)</td>   </tr>
-<tr id="H"><td colspan="2"><em>Authentication Algorithm:</em></td></tr>
-<tr id="D"><td><code>aNULL</code></td>  <td>No authentication</td></tr>
-<tr id="H"><td><code>aRSA</code></td>   <td>RSA authentication</td></tr>
-<tr id="D"><td><code>aDSS</code></td>   <td>DSS authentication</td> </tr>
-<tr id="H"><td><code>aDH</code></td>    <td>Diffie-Hellman authentication</td></tr>
-<tr id="D"><td colspan="2"><em>Cipher Encoding Algorithm:</em></td></tr></tr>
-<tr id="H"><td><code>eNULL</code></td>  <td>No encoding</td>         </tr>
-<tr id="D"><td><code>DES</code></td>    <td>DES encoding</td>        </tr>
-<tr id="H"><td><code>3DES</code></td>   <td>Triple-DES encoding</td> </tr>
-<tr id="D"><td><code>RC4</code></td>    <td>RC4 encoding</td>       </tr>
-<tr id="H"><td><code>RC2</code></td>    <td>RC2 encoding</td>       </tr>
-<tr id="D"><td><code>IDEA</code></td>   <td>IDEA encoding</td>       </tr>
-<tr id="H"><td colspan="2"><em>MAC Digest Algorithm</em>:</td></tr>
-<tr id="D"><td><code>MD5</code></td>    <td>MD5 hash function</td></tr>
-<tr id="H"><td><code>SHA1</code></td>   <td>SHA1 hash function</td></tr>
-<tr id="D"><td><code>SHA</code></td>    <td>SHA hash function</td> </tr>
-<tr id="H"><td colspan="2"><em>Aliases:</em></td></tr>
-<tr id="D"><td><code>SSLv2</code></td>  <td>all SSL version 2.0 ciphers</td></tr>
-<tr id="H"><td><code>SSLv3</code></td>  <td>all SSL version 3.0 ciphers</td> </tr>
-<tr id="D"><td><code>TLSv1</code></td>  <td>all TLS version 1.0 ciphers</td> </tr>
-<tr id="H"><td><code>EXP</code></td>    <td>all export ciphers</td>  </tr>
-<tr id="D"><td><code>EXPORT40</code></td> <td>all 40-bit export ciphers only</td>  </tr>
-<tr id="H"><td><code>EXPORT56</code></td> <td>all 56-bit export ciphers only</td>  </tr>
-<tr id="D"><td><code>LOW</code></td>    <td>all low strength ciphers (no export, single DES)</td></tr>
-<tr id="H"><td><code>MEDIUM</code></td> <td>all ciphers with 128 bit encryption</td> </tr>
-<tr id="D"><td><code>HIGH</code></td>   <td>all ciphers using Triple-DES</td>     </tr>
-<tr id="H"><td><code>RSA</code></td>    <td>all ciphers using RSA key exchange</td> </tr>
-<tr id="D"><td><code>DH</code></td>     <td>all ciphers using Diffie-Hellman key exchange</td> </tr>
-<tr id="H"><td><code>EDH</code></td>    <td>all ciphers using Ephemeral Diffie-Hellman key exchange</td> </tr>
-<tr id="D"><td><code>ADH</code></td>    <td>all ciphers using Anonymous Diffie-Hellman key exchange</td> </tr>
-<tr id="H"><td><code>DSS</code></td>    <td>all ciphers using DSS authentication</td> </tr>
-<tr id="D"><td><code>NULL</code></td>   <td>all ciphers using no encryption</td> </tr>
-</table>
-</td>
-</tr></table>
-</td></tr></table>
-</div>
-<p>
-Now where this becomes interesting is that these can be put together
-to specify the order and ciphers you wish to use. To speed this up
-there are also aliases (<code>SSLv2, SSLv3, TLSv1, EXP, LOW, MEDIUM,
-HIGH</code>) for certain groups of ciphers. These tags can be joined
-together with prefixes to form the <em>cipher-spec</em>. Available
-prefixes are:
-<ul>
-<li>none: add cipher to list
-<li><code>+</code>: add ciphers to list and pull them to current location in list
-<li><code>-</code>: remove cipher from list (can be added later again)
-<li><code>!</code>: kill cipher from list completely (can <b>not</b> be added later again)
-</ul>
-A simpler way to look at all of this is to use the ``<code>openssl ciphers
--v</code>'' command which provides a nice way to successively create the
-correct <em>cipher-spec</em> string. The default <em>cipher-spec</em> string
-is ``<code>ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP</code>'' which
-means the following: first, remove from consideration any ciphers that do not
-authenticate, i.e. for SSL only the Anonymous Diffie-Hellman ciphers. Next,
-use ciphers using RC4 and RSA. Next include the high, medium and then the low
-security ciphers. Finally <em>pull</em> all SSLv2 and export ciphers to the
-end of the list.
-<blockquote>
-<pre>
-$ openssl ciphers -v 'ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP'
-NULL-SHA                SSLv3 Kx=RSA      Au=RSA  Enc=None      Mac=SHA1
-NULL-MD5                SSLv3 Kx=RSA      Au=RSA  Enc=None      Mac=MD5
-EDH-RSA-DES-CBC3-SHA    SSLv3 Kx=DH       Au=RSA  Enc=3DES(168) Mac=SHA1
-...                     ...               ...     ...           ...
-EXP-RC4-MD5             SSLv3 Kx=RSA(512) Au=RSA  Enc=RC4(40)   Mac=MD5  export
-EXP-RC2-CBC-MD5         SSLv2 Kx=RSA(512) Au=RSA  Enc=RC2(40)   Mac=MD5  export
-EXP-RC4-MD5             SSLv2 Kx=RSA(512) Au=RSA  Enc=RC4(40)   Mac=MD5  export
-</pre>
-</blockquote>
-The complete list of particular RSA &amp; DH ciphers for SSL is given in <a
-href="#table2">Table 2</a>.
-<p>
-Example:
-<blockquote>
-<pre>
-SSLCipherSuite RSA:!EXP:!NULL:+HIGH:+MEDIUM:-LOW
-</pre>
-</blockquote>
-<p>
-<div align="center">
-<a name="table2"></a>
-<table width="600" cellspacing="0" cellpadding="1" border="0" summary="">
-<caption align="bottom" id="sf">Table 2: Particular SSL Ciphers</caption>
-<tr><td bgcolor="#cccccc">
-<table width="598" cellpadding="5" cellspacing="0" border="0" summary="">
-<tr><td valign="top" align="center" bgcolor="#ffffff">
-<table border="0" cellspacing="0" cellpadding="2" width="598" summary="">
-<tr id="D"><td><b>Cipher-Tag</b></td> <td><b>Protocol</b></td> <td><b>Key Ex.</b></td> <td><b>Auth.</b></td> <td><b>Enc.</b></td> <td><b>MAC</b></td> <td><b>Type</b></td> </tr>
-<tr id="H"><td colspan="7"><em>RSA Ciphers:</em></td></tr>
-<tr id="D"><td><code>DES-CBC3-SHA</code></td> <td>SSLv3</td> <td>RSA</td> <td>RSA</td> <td>3DES(168)</td> <td>SHA1</td> <td>&nbsp;</td> </tr>
-<tr id="H"><td><code>DES-CBC3-MD5</code></td> <td>SSLv2</td> <td>RSA</td> <td>RSA</td> <td>3DES(168)</td> <td>MD5</td> <td>&nbsp; </td> </tr>
-<tr id="D"><td><code>IDEA-CBC-SHA</code></td> <td>SSLv3</td> <td>RSA</td> <td>RSA</td> <td>IDEA(128)</td> <td>SHA1</td> <td>&nbsp;</td> </tr>
-<tr id="H"><td><code>RC4-SHA</code></td> <td>SSLv3</td> <td>RSA</td> <td>RSA</td> <td>RC4(128)</td> <td>SHA1</td> <td>&nbsp;</td> </tr>
-<tr id="D"><td><code>RC4-MD5</code></td> <td>SSLv3</td> <td>RSA</td> <td>RSA</td> <td>RC4(128)</td> <td>MD5</td> <td>&nbsp; </td> </tr>
-<tr id="H"><td><code>IDEA-CBC-MD5</code></td> <td>SSLv2</td> <td>RSA</td> <td>RSA</td> <td>IDEA(128)</td> <td>MD5</td> <td>&nbsp; </td> </tr>
-<tr id="D"><td><code>RC2-CBC-MD5</code></td> <td>SSLv2</td> <td>RSA</td> <td>RSA</td> <td>RC2(128)</td> <td>MD5</td> <td>&nbsp; </td> </tr>
-<tr id="H"><td><code>RC4-MD5</code></td> <td>SSLv2</td> <td>RSA</td> <td>RSA</td> <td>RC4(128)</td> <td>MD5</td> <td>&nbsp; </td> </tr>
-<tr id="D"><td><code>DES-CBC-SHA</code></td> <td>SSLv3</td> <td>RSA</td> <td>RSA</td> <td>DES(56)</td> <td>SHA1</td> <td>&nbsp;</td> </tr>
-<tr id="H"><td><code>RC4-64-MD5</code></td> <td>SSLv2</td> <td>RSA</td> <td>RSA</td> <td>RC4(64)</td> <td>MD5</td> <td>&nbsp; </td> </tr>
-<tr id="D"><td><code>DES-CBC-MD5</code></td> <td>SSLv2</td> <td>RSA</td> <td>RSA</td> <td>DES(56)</td> <td>MD5</td> <td>&nbsp; </td> </tr>
-<tr id="H"><td><code>EXP-DES-CBC-SHA</code></td> <td>SSLv3</td> <td>RSA(512)</td> <td>RSA</td> <td>DES(40)</td> <td>SHA1</td> <td> export</td> </tr>
-<tr id="D"><td><code>EXP-RC2-CBC-MD5</code></td> <td>SSLv3</td> <td>RSA(512)</td> <td>RSA</td> <td>RC2(40)</td> <td>MD5</td> <td>  export</td> </tr>
-<tr id="H"><td><code>EXP-RC4-MD5</code></td> <td>SSLv3</td> <td>RSA(512)</td> <td>RSA</td> <td>RC4(40)</td> <td>MD5</td> <td>  export</td> </tr>
-<tr id="D"><td><code>EXP-RC2-CBC-MD5</code></td> <td>SSLv2</td> <td>RSA(512)</td> <td>RSA</td> <td>RC2(40)</td> <td>MD5</td> <td>  export</td> </tr>
-<tr id="H"><td><code>EXP-RC4-MD5</code></td> <td>SSLv2</td> <td>RSA(512)</td> <td>RSA</td> <td>RC4(40)</td> <td>MD5</td> <td>  export</td> </tr>
-<tr id="D"><td><code>NULL-SHA</code></td> <td>SSLv3</td> <td>RSA</td> <td>RSA</td> <td>None</td> <td>SHA1</td> <td>&nbsp;</td> </tr>
-<tr id="H"><td><code>NULL-MD5</code></td> <td>SSLv3</td> <td>RSA</td> <td>RSA</td> <td>None</td> <td>MD5</td> <td>&nbsp; </td> </tr>
-<tr id="D"><td colspan="7"><em>Diffie-Hellman Ciphers:</em></td></tr>
-<tr id="H"><td><code>ADH-DES-CBC3-SHA</code></td> <td>SSLv3</td> <td>DH</td> <td>None</td> <td>3DES(168)</td> <td>SHA1</td> <td>&nbsp;</td> </tr>
-<tr id="D"><td><code>ADH-DES-CBC-SHA</code></td> <td>SSLv3</td> <td>DH</td> <td>None</td> <td>DES(56)</td> <td>SHA1</td> <td>&nbsp;</td> </tr>
-<tr id="H"><td><code>ADH-RC4-MD5</code></td> <td>SSLv3</td> <td>DH</td> <td>None</td> <td>RC4(128)</td> <td>MD5</td> <td>&nbsp; </td> </tr>
-<tr id="D"><td><code>EDH-RSA-DES-CBC3-SHA</code></td> <td>SSLv3</td> <td>DH</td> <td>RSA</td> <td>3DES(168)</td> <td>SHA1</td> <td>&nbsp;</td> </tr>
-<tr id="H"><td><code>EDH-DSS-DES-CBC3-SHA</code></td> <td>SSLv3</td> <td>DH</td> <td>DSS</td> <td>3DES(168)</td> <td>SHA1</td> <td>&nbsp;</td> </tr>
-<tr id="D"><td><code>EDH-RSA-DES-CBC-SHA</code></td> <td>SSLv3</td> <td>DH</td> <td>RSA</td> <td>DES(56)</td> <td>SHA1</td> <td>&nbsp;</td> </tr>
-<tr id="H"><td><code>EDH-DSS-DES-CBC-SHA</code></td> <td>SSLv3</td> <td>DH</td> <td>DSS</td> <td>DES(56)</td> <td>SHA1</td> <td>&nbsp;</td> </tr>
-<tr id="D"><td><code>EXP-EDH-RSA-DES-CBC-SHA</code></td> <td>SSLv3</td> <td>DH(512)</td> <td>RSA</td> <td>DES(40)</td> <td>SHA1</td> <td> export</td> </tr>
-<tr id="H"><td><code>EXP-EDH-DSS-DES-CBC-SHA</code></td> <td>SSLv3</td> <td>DH(512)</td> <td>DSS</td> <td>DES(40)</td> <td>SHA1</td> <td> export</td> </tr>
-<tr id="D"><td><code>EXP-ADH-DES-CBC-SHA</code></td> <td>SSLv3</td> <td>DH(512)</td> <td>None</td> <td>DES(40)</td> <td>SHA1</td> <td> export</td> </tr>
-<tr id="H"><td><code>EXP-ADH-RC4-MD5</code></td> <td>SSLv3</td> <td>DH(512)</td> <td>None</td> <td>RC4(40)</td> <td>MD5</td> <td>  export</td> </tr>
-</table>
-</td>
-</tr></table>
-</td></tr></table>
-</div>
-<!-- SSLCertificateFile --------------------------------------------->
-<p>
-<br>
-<a name="SSLCertificateFile"></a>
-<h2><a name="ToC10">SSLCertificateFile</a></h2>
-<table cellspacing="0" cellpadding="1" bgcolor="#cccccc" border="0" summary="">
-<tr>
-<td>
-<table bgcolor="white" width="600" cellspacing="0" cellpadding="5" border="0" summary="">
-<tr>
-<td>
-<table cellspacing="0" cellpadding="1" border="0" summary="">
-<tr><td>
-<font face="Arial,Helvetica"><b>Name:</b></font></a> </td><td> <b>SSLCertificateFile</b></td></tr>
-<tr><td>
-<font face="Arial,Helvetica"><b>Description:</b></font></a> </td><td> Server PEM-encoded X.509 Certificate file</td></tr>
-<tr><td><a
- href="../directive-dict.html#Syntax"
- rel="Help"
-><font face="Arial,Helvetica"><b>Syntax:</b></font></a> </td><td> <code>SSLCertificateFile</code> <em>filename</em></td></tr>
-<tr><td><a
- href="../directive-dict.html#Default"
- rel="Help"
-><font face="Arial,Helvetica"><b>Default:</b></font></a> </td><td> <em>None</em></td></tr>
-<tr><td><a
- href="../directive-dict.html#Context"
- rel="Help"
-><font face="Arial,Helvetica"><b>Context:</b></font></a> </td><td> server config, virtual host</td></tr>
-<tr><td><a
- href="../directive-dict.html#Override"
- rel="Help"
-><font face="Arial,Helvetica"><b>Override:</b></font></a> </td><td> <em>Not applicable</em></td></tr>
-<tr><td><a
- href="../directive-dict.html#Status"
- rel="Help"
-><font face="Arial,Helvetica"><b>Status:</b></font></a> </td><td> Extension</td></tr>
-<tr><td><a
- href="../directive-dict.html#Module"
- rel="Help"
-><font face="Arial,Helvetica"><b>Module:</b></font></a> </td><td> mod_ssl</td></tr>
-<tr><td><a
- href="../directive-dict.html#Compatibility"
- rel="Help"
-><font face="Arial,Helvetica"><b>Compatibility:</b></font></a> </td><td> mod_ssl 2.0 </td></tr>
-</table>
-</td>
-</tr>
-</table>
-</td>
-</tr>
-</table>
-<p>
-This directive points to the PEM-encoded Certificate file for the server and
-optionally also to the corresponding RSA or DSA Private Key file for it
-(contained in the same file). If the contained Private Key is encrypted the
-Pass Phrase dialog is forced at startup time. This directive can be used up to
-two times (referencing different filenames) when both a RSA and a DSA based
-server certificate is used in parallel.
-<p>
-Example:
-<blockquote>
-<pre>
-SSLCertificateFile /usr/local/apache/conf/ssl.crt/server.crt
-</pre>
-</blockquote>
-<!-- SSLCertificateKeyFile ------------------------------------------>
-<p>
-<br>
-<a name="SSLCertificateKeyFile"></a>
-<h2><a name="ToC11">SSLCertificateKeyFile</a></h2>
-<table cellspacing="0" cellpadding="1" bgcolor="#cccccc" border="0" summary="">
-<tr>
-<td>
-<table bgcolor="white" width="600" cellspacing="0" cellpadding="5" border="0" summary="">
-<tr>
-<td>
-<table cellspacing="0" cellpadding="1" border="0" summary="">
-<tr><td>
-<font face="Arial,Helvetica"><b>Name:</b></font></a> </td><td> <b>SSLCertificateKeyFile</b></td></tr>
-<tr><td>
-<font face="Arial,Helvetica"><b>Description:</b></font></a> </td><td> Server PEM-encoded Private Key file</td></tr>
-<tr><td><a
- href="../directive-dict.html#Syntax"
- rel="Help"
-><font face="Arial,Helvetica"><b>Syntax:</b></font></a> </td><td> <code>SSLCertificateKeyFile</code> <em>filename</em></td></tr>
-<tr><td><a
- href="../directive-dict.html#Default"
- rel="Help"
-><font face="Arial,Helvetica"><b>Default:</b></font></a> </td><td> <em>None</em></td></tr>
-<tr><td><a
- href="../directive-dict.html#Context"
- rel="Help"
-><font face="Arial,Helvetica"><b>Context:</b></font></a> </td><td> server config, virtual host</td></tr>
-<tr><td><a
- href="../directive-dict.html#Override"
- rel="Help"
-><font face="Arial,Helvetica"><b>Override:</b></font></a> </td><td> <em>Not applicable</em></td></tr>
-<tr><td><a
- href="../directive-dict.html#Status"
- rel="Help"
-><font face="Arial,Helvetica"><b>Status:</b></font></a> </td><td> Extension</td></tr>
-<tr><td><a
- href="../directive-dict.html#Module"
- rel="Help"
-><font face="Arial,Helvetica"><b>Module:</b></font></a> </td><td> mod_ssl</td></tr>
-<tr><td><a
- href="../directive-dict.html#Compatibility"
- rel="Help"
-><font face="Arial,Helvetica"><b>Compatibility:</b></font></a> </td><td> mod_ssl 2.0 </td></tr>
-</table>
-</td>
-</tr>
-</table>
-</td>
-</tr>
-</table>
-<p>
-This directive points to the PEM-encoded Private Key file for the server. If
-the Private Key is not combined with the Certificate in the
-<code>SSLCertificateFile</code>, use this additional directive to point to the
-file with the stand-alone Private Key. When <code>SSLCertificateFile</code>
-is used and the file contains both the Certificate and the Private Key this
-directive need not be used. But we strongly discourage this practice.
-Instead we recommend you to separate the Certificate and the Private Key. If
-the contained Private Key is encrypted, the Pass Phrase dialog is forced at
-startup time. This directive can be used up to two times (referencing
-different filenames) when both a RSA and a DSA based private key is used in
-parallel.
-<p>
-Example:
-<blockquote>
-<pre>
-SSLCertificateKeyFile /usr/local/apache/conf/ssl.key/server.key
-</pre>
-</blockquote>
-<!-- SSLCertificateChainFile ---------------------------------------->
-<p>
-<br>
-<a name="SSLCertificateChainFile"></a>
-<h2><a name="ToC12">SSLCertificateChainFile</a></h2>
-<table cellspacing="0" cellpadding="1" bgcolor="#cccccc" border="0" summary="">
-<tr>
-<td>
-<table bgcolor="white" width="600" cellspacing="0" cellpadding="5" border="0" summary="">
-<tr>
-<td>
-<table cellspacing="0" cellpadding="1" border="0" summary="">
-<tr><td>
-<font face="Arial,Helvetica"><b>Name:</b></font></a> </td><td> <b>SSLCertificateChainFile</b></td></tr>
-<tr><td>
-<font face="Arial,Helvetica"><b>Description:</b></font></a> </td><td> File of PEM-encoded Server CA Certificates</td></tr>
-<tr><td><a
- href="../directive-dict.html#Syntax"
- rel="Help"
-><font face="Arial,Helvetica"><b>Syntax:</b></font></a> </td><td> <code>SSLCertificateChainFile</code> <em>filename</em></td></tr>
-<tr><td><a
- href="../directive-dict.html#Default"
- rel="Help"
-><font face="Arial,Helvetica"><b>Default:</b></font></a> </td><td> <em>None</em></td></tr>
-<tr><td><a
- href="../directive-dict.html#Context"
- rel="Help"
-><font face="Arial,Helvetica"><b>Context:</b></font></a> </td><td> server config, virtual host</td></tr>
-<tr><td><a
- href="../directive-dict.html#Override"
- rel="Help"
-><font face="Arial,Helvetica"><b>Override:</b></font></a> </td><td> <em>Not applicable</em></td></tr>
-<tr><td><a
- href="../directive-dict.html#Status"
- rel="Help"
-><font face="Arial,Helvetica"><b>Status:</b></font></a> </td><td> Extension</td></tr>
-<tr><td><a
- href="../directive-dict.html#Module"
- rel="Help"
-><font face="Arial,Helvetica"><b>Module:</b></font></a> </td><td> mod_ssl</td></tr>
-<tr><td><a
- href="../directive-dict.html#Compatibility"
- rel="Help"
-><font face="Arial,Helvetica"><b>Compatibility:</b></font></a> </td><td> mod_ssl 2.3.6 </td></tr>
-</table>
-</td>
-</tr>
-</table>
-</td>
-</tr>
-</table>
-<p>
-This directive sets the optional <em>all-in-one</em> file where you can
-assemble the certificates of Certification Authorities (CA) which form the
-certificate chain of the server certificate. This starts with the issuing CA
-certificate of of the server certificate and can range up to the root CA
-certificate. Such a file is simply the concatenation of the various
-PEM-encoded CA Certificate files, usually in certificate chain order.
-<p>
-This should be used alternatively and/or additionally to <a
-href="#SSLCACertificatePath">SSLCACertificatePath</a> for explicitly
-constructing the server certificate chain which is sent to the browser in
-addition to the server certificate. It is especially useful to avoid conflicts
-with CA certificates when using client authentication. Because although
-placing a CA certificate of the server certificate chain into <a
-href="#SSLCACertificatePath">SSLCACertificatePath</a> has the same effect for
-the certificate chain construction, it has the side-effect that client
-certificates issued by this same CA certificate are also accepted on client
-authentication. That's usually not one expect.
-<p>
-But be careful: Providing the certificate chain works only if you are using a
-<i>single</i> (either RSA <i>or</i> DSA) based server certificate. If you are
-using a coupled RSA+DSA certificate pair, this will work only if actually both
-certificates use the <i>same</i> certificate chain. Else the browsers will be
-confused in this situation.
-<p>
-Example:
-<blockquote>
-<pre>
-SSLCertificateChainFile /usr/local/apache/conf/ssl.crt/ca.crt
-</pre>
-</blockquote>
-<!-- SSLCACertificatePath ------------------------------------------->
-<p>
-<br>
-<a name="SSLCACertificatePath"></a>
-<h2><a name="ToC13">SSLCACertificatePath</a></h2>
-<table cellspacing="0" cellpadding="1" bgcolor="#cccccc" border="0" summary="">
-<tr>
-<td>
-<table bgcolor="white" width="600" cellspacing="0" cellpadding="5" border="0" summary="">
-<tr>
-<td>
-<table cellspacing="0" cellpadding="1" border="0" summary="">
-<tr><td>
-<font face="Arial,Helvetica"><b>Name:</b></font></a> </td><td> <b>SSLCACertificatePath</b></td></tr>
-<tr><td>
-<font face="Arial,Helvetica"><b>Description:</b></font></a> </td><td> Directory of PEM-encoded CA Certificates for Client Auth.</td></tr>
-<tr><td><a
- href="../directive-dict.html#Syntax"
- rel="Help"
-><font face="Arial,Helvetica"><b>Syntax:</b></font></a> </td><td> <code>SSLCACertificatePath</code> <em>directory</em></td></tr>
-<tr><td><a
- href="../directive-dict.html#Default"
- rel="Help"
-><font face="Arial,Helvetica"><b>Default:</b></font></a> </td><td> <em>None</em></td></tr>
-<tr><td><a
- href="../directive-dict.html#Context"
- rel="Help"
-><font face="Arial,Helvetica"><b>Context:</b></font></a> </td><td> server config, virtual host</td></tr>
-<tr><td><a
- href="../directive-dict.html#Override"
- rel="Help"
-><font face="Arial,Helvetica"><b>Override:</b></font></a> </td><td> <em>Not applicable</em></td></tr>
-<tr><td><a
- href="../directive-dict.html#Status"
- rel="Help"
-><font face="Arial,Helvetica"><b>Status:</b></font></a> </td><td> Extension</td></tr>
-<tr><td><a
- href="../directive-dict.html#Module"
- rel="Help"
-><font face="Arial,Helvetica"><b>Module:</b></font></a> </td><td> mod_ssl</td></tr>
-<tr><td><a
- href="../directive-dict.html#Compatibility"
- rel="Help"
-><font face="Arial,Helvetica"><b>Compatibility:</b></font></a> </td><td> mod_ssl 2.0 </td></tr>
-</table>
-</td>
-</tr>
-</table>
-</td>
-</tr>
-</table>
-<p>
-This directive sets the directory where you keep the Certificates of
-Certification Authorities (CAs) whose clients you deal with. These are used to
-verify the client certificate on Client Authentication.
-<p>
-The files in this directory have to be PEM-encoded and are accessed through
-hash filenames. So usually you can't just place the Certificate files
-there: you also have to create symbolic links named
-<i>hash-value</i><tt>.N</tt>. And you should always make sure this directory
-contains the appropriate symbolic links. Use the <code>Makefile</code> which
-comes with mod_ssl to accomplish this task.
-<p>
-Example:
-<blockquote>
-<pre>
-SSLCACertificatePath /usr/local/apache/conf/ssl.crt/
-</pre>
-</blockquote>
-<!-- SSLCACertificateFile ------------------------------------------->
-<p>
-<br>
-<a name="SSLCACertificateFile"></a>
-<h2><a name="ToC14">SSLCACertificateFile</a></h2>
-<table cellspacing="0" cellpadding="1" bgcolor="#cccccc" border="0" summary="">
-<tr>
-<td>
-<table bgcolor="white" width="600" cellspacing="0" cellpadding="5" border="0" summary="">
-<tr>
-<td>
-<table cellspacing="0" cellpadding="1" border="0" summary="">
-<tr><td>
-<font face="Arial,Helvetica"><b>Name:</b></font></a> </td><td> <b>SSLCACertificateFile</b></td></tr>
-<tr><td>
-<font face="Arial,Helvetica"><b>Description:</b></font></a> </td><td> File of concatenated PEM-encoded CA Certificates for Client Auth.</td></tr>
-<tr><td><a
- href="../directive-dict.html#Syntax"
- rel="Help"
-><font face="Arial,Helvetica"><b>Syntax:</b></font></a> </td><td> <code>SSLCACertificateFile</code> <em>filename</em></td></tr>
-<tr><td><a
- href="../directive-dict.html#Default"
- rel="Help"
-><font face="Arial,Helvetica"><b>Default:</b></font></a> </td><td> <em>None</em></td></tr>
-<tr><td><a
- href="../directive-dict.html#Context"
- rel="Help"
-><font face="Arial,Helvetica"><b>Context:</b></font></a> </td><td> server config, virtual host</td></tr>
-<tr><td><a
- href="../directive-dict.html#Override"
- rel="Help"
-><font face="Arial,Helvetica"><b>Override:</b></font></a> </td><td> <em>Not applicable</em></td></tr>
-<tr><td><a
- href="../directive-dict.html#Status"
- rel="Help"
-><font face="Arial,Helvetica"><b>Status:</b></font></a> </td><td> Extension</td></tr>
-<tr><td><a
- href="../directive-dict.html#Module"
- rel="Help"
-><font face="Arial,Helvetica"><b>Module:</b></font></a> </td><td> mod_ssl</td></tr>
-<tr><td><a
- href="../directive-dict.html#Compatibility"
- rel="Help"
-><font face="Arial,Helvetica"><b>Compatibility:</b></font></a> </td><td> mod_ssl 2.0 </td></tr>
-</table>
-</td>
-</tr>
-</table>
-</td>
-</tr>
-</table>
-<p>
-This directive sets the <em>all-in-one</em> file where you can assemble the
-Certificates of Certification Authorities (CA) whose <em>clients</em> you deal
-with. These are used for Client Authentication. Such a file is simply the
-concatenation of the various PEM-encoded Certificate files, in order of
-preference. This can be used alternatively and/or additionally to <a
-href="#SSLCACertificatePath">SSLCACertificatePath</a>.
-<p>
-Example:
-<blockquote>
-<pre>
-SSLCACertificateFile /usr/local/apache/conf/ssl.crt/ca-bundle-client.crt
-</pre>
-</blockquote>
-<!-- SSLCARevocationPath -------------------------------------------->
-<p>
-<br>
-<a name="SSLCARevocationPath"></a>
-<h2><a name="ToC15">SSLCARevocationPath</a></h2>
-<table cellspacing="0" cellpadding="1" bgcolor="#cccccc" border="0" summary="">
-<tr>
-<td>
-<table bgcolor="white" width="600" cellspacing="0" cellpadding="5" border="0" summary="">
-<tr>
-<td>
-<table cellspacing="0" cellpadding="1" border="0" summary="">
-<tr><td>
-<font face="Arial,Helvetica"><b>Name:</b></font></a> </td><td> <b>SSLCARevocationPath</b></td></tr>
-<tr><td>
-<font face="Arial,Helvetica"><b>Description:</b></font></a> </td><td> Directory of PEM-encoded CA CRLs for Client Auth.</td></tr>
-<tr><td><a
- href="../directive-dict.html#Syntax"
- rel="Help"
-><font face="Arial,Helvetica"><b>Syntax:</b></font></a> </td><td> <code>SSLCARevocationPath</code> <em>directory</em></td></tr>
-<tr><td><a
- href="../directive-dict.html#Default"
- rel="Help"
-><font face="Arial,Helvetica"><b>Default:</b></font></a> </td><td> <em>None</em></td></tr>
-<tr><td><a
- href="../directive-dict.html#Context"
- rel="Help"
-><font face="Arial,Helvetica"><b>Context:</b></font></a> </td><td> server config, virtual host</td></tr>
-<tr><td><a
- href="../directive-dict.html#Override"
- rel="Help"
-><font face="Arial,Helvetica"><b>Override:</b></font></a> </td><td> <em>Not applicable</em></td></tr>
-<tr><td><a
- href="../directive-dict.html#Status"
- rel="Help"
-><font face="Arial,Helvetica"><b>Status:</b></font></a> </td><td> Extension</td></tr>
-<tr><td><a
- href="../directive-dict.html#Module"
- rel="Help"
-><font face="Arial,Helvetica"><b>Module:</b></font></a> </td><td> mod_ssl</td></tr>
-<tr><td><a
- href="../directive-dict.html#Compatibility"
- rel="Help"
-><font face="Arial,Helvetica"><b>Compatibility:</b></font></a> </td><td> mod_ssl 2.3 </td></tr>
-</table>
-</td>
-</tr>
-</table>
-</td>
-</tr>
-</table>
-<p>
-This directive sets the directory where you keep the Certificate Revocation
-Lists (CRL) of Certification Authorities (CAs) whose clients you deal with.
-These are used to revoke the client certificate on Client Authentication.
-<p>
-The files in this directory have to be PEM-encoded and are accessed through
-hash filenames. So usually you have not only to place the CRL files there.
-Additionally you have to create symbolic links named
-<i>hash-value</i><tt>.rN</tt>. And you should always make sure this directory
-contains the appropriate symbolic links. Use the <code>Makefile</code> which
-comes with mod_ssl to accomplish this task.
-<p>
-Example:
-<blockquote>
-<pre>
-SSLCARevocationPath /usr/local/apache/conf/ssl.crl/
-</pre>
-</blockquote>
-<!-- SSLCARevocationFile -------------------------------------------->
-<p>
-<br>
-<a name="SSLCARevocationFile"></a>
-<h2><a name="ToC16">SSLCARevocationFile</a></h2>
-<table cellspacing="0" cellpadding="1" bgcolor="#cccccc" border="0" summary="">
-<tr>
-<td>
-<table bgcolor="white" width="600" cellspacing="0" cellpadding="5" border="0" summary="">
-<tr>
-<td>
-<table cellspacing="0" cellpadding="1" border="0" summary="">
-<tr><td>
-<font face="Arial,Helvetica"><b>Name:</b></font></a> </td><td> <b>SSLCARevocationFile</b></td></tr>
-<tr><td>
-<font face="Arial,Helvetica"><b>Description:</b></font></a> </td><td> File of concatenated PEM-encoded CA CRLs for Client Auth.</td></tr>
-<tr><td><a
- href="../directive-dict.html#Syntax"
- rel="Help"
-><font face="Arial,Helvetica"><b>Syntax:</b></font></a> </td><td> <code>SSLCARevocationFile</code> <em>filename</em></td></tr>
-<tr><td><a
- href="../directive-dict.html#Default"
- rel="Help"
-><font face="Arial,Helvetica"><b>Default:</b></font></a> </td><td> <em>None</em></td></tr>
-<tr><td><a
- href="../directive-dict.html#Context"
- rel="Help"
-><font face="Arial,Helvetica"><b>Context:</b></font></a> </td><td> server config, virtual host</td></tr>
-<tr><td><a
- href="../directive-dict.html#Override"
- rel="Help"
-><font face="Arial,Helvetica"><b>Override:</b></font></a> </td><td> <em>Not applicable</em></td></tr>
-<tr><td><a
- href="../directive-dict.html#Status"
- rel="Help"
-><font face="Arial,Helvetica"><b>Status:</b></font></a> </td><td> Extension</td></tr>
-<tr><td><a
- href="../directive-dict.html#Module"
- rel="Help"
-><font face="Arial,Helvetica"><b>Module:</b></font></a> </td><td> mod_ssl</td></tr>
-<tr><td><a
- href="../directive-dict.html#Compatibility"
- rel="Help"
-><font face="Arial,Helvetica"><b>Compatibility:</b></font></a> </td><td> mod_ssl 2.3 </td></tr>
-</table>
-</td>
-</tr>
-</table>
-</td>
-</tr>
-</table>
-<p>
-This directive sets the <em>all-in-one</em> file where you can assemble the
-Certificate Revocation Lists (CRL) of Certification Authorities (CA) whose
-<em>clients</em> you deal with. These are used for Client Authentication.
-Such a file is simply the concatenation of the various PEM-encoded CRL
-files, in order of preference. This can be used alternatively and/or
-additionally to <a href="#SSLCARevocationPath">SSLCARevocationPath</a>.
-<p>
-Example:
-<blockquote>
-<pre>
-SSLCARevocationFile /usr/local/apache/conf/ssl.crl/ca-bundle-client.crl
-</pre>
-</blockquote>
-<!-- SSLVerifyClient ------------------------------------------------->
-<p>
-<br>
-<a name="SSLVerifyClient"></a>
-<h2><a name="ToC17">SSLVerifyClient</a></h2>
-<table cellspacing="0" cellpadding="1" bgcolor="#cccccc" border="0" summary="">
-<tr>
-<td>
-<table bgcolor="white" width="600" cellspacing="0" cellpadding="5" border="0" summary="">
-<tr>
-<td>
-<table cellspacing="0" cellpadding="1" border="0" summary="">
-<tr><td>
-<font face="Arial,Helvetica"><b>Name:</b></font></a> </td><td> <b>SSLVerifyClient</b></td></tr>
-<tr><td>
-<font face="Arial,Helvetica"><b>Description:</b></font></a> </td><td> Type of Client Certificate verification</td></tr>
-<tr><td><a
- href="../directive-dict.html#Syntax"
- rel="Help"
-><font face="Arial,Helvetica"><b>Syntax:</b></font></a> </td><td> <code>SSLVerifyClient</code> <em>level</em></td></tr>
-<tr><td><a
- href="../directive-dict.html#Default"
- rel="Help"
-><font face="Arial,Helvetica"><b>Default:</b></font></a> </td><td> <code>SSLVerifyClient none</code></td></tr>
-<tr><td><a
- href="../directive-dict.html#Context"
- rel="Help"
-><font face="Arial,Helvetica"><b>Context:</b></font></a> </td><td> server config, virtual host, directory, .htaccess</td></tr>
-<tr><td><a
- href="../directive-dict.html#Override"
- rel="Help"
-><font face="Arial,Helvetica"><b>Override:</b></font></a> </td><td> AuthConfig</td></tr>
-<tr><td><a
- href="../directive-dict.html#Status"
- rel="Help"
-><font face="Arial,Helvetica"><b>Status:</b></font></a> </td><td> Extension</td></tr>
-<tr><td><a
- href="../directive-dict.html#Module"
- rel="Help"
-><font face="Arial,Helvetica"><b>Module:</b></font></a> </td><td> mod_ssl</td></tr>
-<tr><td><a
- href="../directive-dict.html#Compatibility"
- rel="Help"
-><font face="Arial,Helvetica"><b>Compatibility:</b></font></a> </td><td> mod_ssl 2.0 </td></tr>
-</table>
-</td>
-</tr>
-</table>
-</td>
-</tr>
-</table>
-<p>
-This directive sets the Certificate verification level for the Client
-Authentication. Notice that this directive can be used both in per-server and
-per-directory context. In per-server context it applies to the client
-authentication process used in the standard SSL handshake when a connection is
-established. In per-directory context it forces a SSL renegotation with the
-reconfigured client verification level after the HTTP request was read but
-before the HTTP response is sent.
-<p>
-The following levels are available for <em>level</em>:
-<ul>
-<li><strong>none</strong>:
-     no client Certificate is required at all
-<li><strong>optional</strong>:
-     the client <em>may</em> present a valid Certificate
-<li><strong>require</strong>:
-     the client <em>has to</em> present a valid Certificate
-<li><strong>optional_no_ca</strong>:
-     the client may present a valid Certificate<br>
-     but it need not to be (successfully) verifiable.
-</ul>
-In practice only levels <strong>none</strong> and <strong>require</strong> are
-really interesting, because level <strong>optional</strong> doesn't work with
-all browsers and level <strong>optional_no_ca</strong> is actually against the
-idea of authentication (but can be used to establish SSL test pages, etc.)
-<p>
-Example:
-<blockquote>
-<pre>
-SSLVerifyClient require
-</pre>
-</blockquote>
-<!-- SSLVerifyDepth ------------------------------------------------->
-<p>
-<br>
-<a name="SSLVerifyDepth"></a>
-<h2><a name="ToC18">SSLVerifyDepth</a></h2>
-<table cellspacing="0" cellpadding="1" bgcolor="#cccccc" border="0" summary="">
-<tr>
-<td>
-<table bgcolor="white" width="600" cellspacing="0" cellpadding="5" border="0" summary="">
-<tr>
-<td>
-<table cellspacing="0" cellpadding="1" border="0" summary="">
-<tr><td>
-<font face="Arial,Helvetica"><b>Name:</b></font></a> </td><td> <b>SSLVerifyDepth</b></td></tr>
-<tr><td>
-<font face="Arial,Helvetica"><b>Description:</b></font></a> </td><td> Maximum depth of CA Certificates in Client Certificate verification</td></tr>
-<tr><td><a
- href="../directive-dict.html#Syntax"
- rel="Help"
-><font face="Arial,Helvetica"><b>Syntax:</b></font></a> </td><td> <code>SSLVerifyDepth</code> <em>number</em></td></tr>
-<tr><td><a
- href="../directive-dict.html#Default"
- rel="Help"
-><font face="Arial,Helvetica"><b>Default:</b></font></a> </td><td> <code>SSLVerifyDepth 1</code></td></tr>
-<tr><td><a
- href="../directive-dict.html#Context"
- rel="Help"
-><font face="Arial,Helvetica"><b>Context:</b></font></a> </td><td> server config, virtual host, directory, .htaccess</td></tr>
-<tr><td><a
- href="../directive-dict.html#Override"
- rel="Help"
-><font face="Arial,Helvetica"><b>Override:</b></font></a> </td><td> AuthConfig</td></tr>
-<tr><td><a
- href="../directive-dict.html#Status"
- rel="Help"
-><font face="Arial,Helvetica"><b>Status:</b></font></a> </td><td> Extension</td></tr>
-<tr><td><a
- href="../directive-dict.html#Module"
- rel="Help"
-><font face="Arial,Helvetica"><b>Module:</b></font></a> </td><td> mod_ssl</td></tr>
-<tr><td><a
- href="../directive-dict.html#Compatibility"
- rel="Help"
-><font face="Arial,Helvetica"><b>Compatibility:</b></font></a> </td><td> mod_ssl 2.0 </td></tr>
-</table>
-</td>
-</tr>
-</table>
-</td>
-</tr>
-</table>
-<p>
-This directive sets how deeply mod_ssl should verify before deciding that the
-clients don't have a valid certificate. Notice that this directive can be
-used both in per-server and per-directory context. In per-server context it
-applies to the client authentication process used in the standard SSL
-handshake when a connection is established. In per-directory context it forces
-a SSL renegotation with the reconfigured client verification depth after the
-HTTP request was read but before the HTTP response is sent.
-<p>
-The depth actually is the maximum number of intermediate certificate issuers,
-i.e. the number of CA certificates which are max allowed to be followed while
-verifying the client certificate. A depth of 0 means that self-signed client
-certificates are accepted only, the default depth of 1 means the client
-certificate can be self-signed or has to be signed by a CA which is directly
-known to the server (i.e. the CA's certificate is under
-<code>SSLCACertificatePath</code>), etc.
-<p>
-Example:
-<blockquote>
-<pre>
-SSLVerifyDepth 10
-</pre>
-</blockquote>
-<!-- SSLLog --------------------------------------------------------->
-<p>
-<br>
-<a name="SSLLog"></a>
-<h2><a name="ToC19">SSLLog</a></h2>
-<table cellspacing="0" cellpadding="1" bgcolor="#cccccc" border="0" summary="">
-<tr>
-<td>
-<table bgcolor="white" width="600" cellspacing="0" cellpadding="5" border="0" summary="">
-<tr>
-<td>
-<table cellspacing="0" cellpadding="1" border="0" summary="">
-<tr><td>
-<font face="Arial,Helvetica"><b>Name:</b></font></a> </td><td> <b>SSLLog</b></td></tr>
-<tr><td>
-<font face="Arial,Helvetica"><b>Description:</b></font></a> </td><td> Where to write the dedicated SSL engine logfile</td></tr>
-<tr><td><a
- href="../directive-dict.html#Syntax"
- rel="Help"
-><font face="Arial,Helvetica"><b>Syntax:</b></font></a> </td><td> <code>SSLLog</code> <em>filename</em></td></tr>
-<tr><td><a
- href="../directive-dict.html#Default"
- rel="Help"
-><font face="Arial,Helvetica"><b>Default:</b></font></a> </td><td> <em>None</em></td></tr>
-<tr><td><a
- href="../directive-dict.html#Context"
- rel="Help"
-><font face="Arial,Helvetica"><b>Context:</b></font></a> </td><td> server config, virtual host</td></tr>
-<tr><td><a
- href="../directive-dict.html#Override"
- rel="Help"
-><font face="Arial,Helvetica"><b>Override:</b></font></a> </td><td> <em>Not applicable</em></td></tr>
-<tr><td><a
- href="../directive-dict.html#Status"
- rel="Help"
-><font face="Arial,Helvetica"><b>Status:</b></font></a> </td><td> Extension</td></tr>
-<tr><td><a
- href="../directive-dict.html#Module"
- rel="Help"
-><font face="Arial,Helvetica"><b>Module:</b></font></a> </td><td> mod_ssl</td></tr>
-<tr><td><a
- href="../directive-dict.html#Compatibility"
- rel="Help"
-><font face="Arial,Helvetica"><b>Compatibility:</b></font></a> </td><td> mod_ssl 2.1 </td></tr>
-</table>
-</td>
-</tr>
-</table>
-</td>
-</tr>
-</table>
-<p>
-This directive sets the name of the dedicated SSL protocol engine logfile.
-Error type messages are additionally duplicated to the general Apache error
-log file (directive <code>ErrorLog</code>). Put this somewhere where it cannot
-be used for symlink attacks on a real server (i.e. somewhere where only root
-can write). If the <em>filename</em> does not begin with a slash
-('<code>/</code>') then it is assumed to be relative to the <em>Server
-Root</em>. If <em>filename</em> begins with a bar ('<code>|</code>') then the
-following string is assumed to be a path to an executable program to which a
-reliable pipe can be established. The directive should occur only once per
-virtual server config.
-<p>
-Example:
-<blockquote>
-<pre>
-SSLLog /usr/local/apache/logs/ssl_engine_log
-</pre>
-</blockquote>
-<!-- SSLLogLevel ---------------------------------------------------->
-<p>
-<br>
-<a name="SSLLogLevel"></a>
-<h2><a name="ToC20">SSLLogLevel</a></h2>
-<table cellspacing="0" cellpadding="1" bgcolor="#cccccc" border="0" summary="">
-<tr>
-<td>
-<table bgcolor="white" width="600" cellspacing="0" cellpadding="5" border="0" summary="">
-<tr>
-<td>
-<table cellspacing="0" cellpadding="1" border="0" summary="">
-<tr><td>
-<font face="Arial,Helvetica"><b>Name:</b></font></a> </td><td> <b>SSLLogLevel</b></td></tr>
-<tr><td>
-<font face="Arial,Helvetica"><b>Description:</b></font></a> </td><td> Logging level for the dedicated SSL engine logfile</td></tr>
-<tr><td><a
- href="../directive-dict.html#Syntax"
- rel="Help"
-><font face="Arial,Helvetica"><b>Syntax:</b></font></a> </td><td> <code>SSLLogLevel</code> <em>level</em></td></tr>
-<tr><td><a
- href="../directive-dict.html#Default"
- rel="Help"
-><font face="Arial,Helvetica"><b>Default:</b></font></a> </td><td> <code>SSLLogLevel none</code></td></tr>
-<tr><td><a
- href="../directive-dict.html#Context"
- rel="Help"
-><font face="Arial,Helvetica"><b>Context:</b></font></a> </td><td> server config, virtual host</td></tr>
-<tr><td><a
- href="../directive-dict.html#Override"
- rel="Help"
-><font face="Arial,Helvetica"><b>Override:</b></font></a> </td><td> <em>Not applicable</em></td></tr>
-<tr><td><a
- href="../directive-dict.html#Status"
- rel="Help"
-><font face="Arial,Helvetica"><b>Status:</b></font></a> </td><td> Extension</td></tr>
-<tr><td><a
- href="../directive-dict.html#Module"
- rel="Help"
-><font face="Arial,Helvetica"><b>Module:</b></font></a> </td><td> mod_ssl</td></tr>
-<tr><td><a
- href="../directive-dict.html#Compatibility"
- rel="Help"
-><font face="Arial,Helvetica"><b>Compatibility:</b></font></a> </td><td> mod_ssl 2.1 </td></tr>
-</table>
-</td>
-</tr>
-</table>
-</td>
-</tr>
-</table>
-<p>
-This directive sets the verbosity degree of the dedicated SSL protocol engine
-logfile. The <em>level</em> is one of the following (in ascending order where
-higher levels include lower levels):
-<ul>
-<li><code>none</code><br>
-    no dedicated SSL logging is done, but messages of level
-    ``<code>error</code>'' are still written to the general Apache error
-    logfile.
-<p>
-<li><code>error</code><br>
-    log messages of error type only, i.e. messages which show fatal situations
-    (processing is stopped). Those messages are also duplicated to the
-    general Apache error logfile.
-<p>
-<li><code>warn</code><br>
-    log also warning messages, i.e. messages which show non-fatal problems
-    (processing is continued).
-<p>
-<li><code>info</code><br>
-    log also informational messages, i.e. messages which show major
-    processing steps.
-<p>
-<li><code>trace</code><br>
-    log also trace messages, i.e. messages which show minor processing steps.
-<p>
-<li><code>debug</code><br>
-    log also debugging messages, i.e. messages which show development and
-    low-level I/O information.
-</ul>
-<p>
-Example:
-<blockquote>
-<pre>
-SSLLogLevel warn
-</pre>
-</blockquote>
-<!-- SSLOptions ----------------------------------------------------->
-<p>
-<br>
-<a name="SSLOptions"></a>
-<h2><a name="ToC21">SSLOptions</a></h2>
-<table cellspacing="0" cellpadding="1" bgcolor="#cccccc" border="0" summary="">
-<tr>
-<td>
-<table bgcolor="white" width="600" cellspacing="0" cellpadding="5" border="0" summary="">
-<tr>
-<td>
-<table cellspacing="0" cellpadding="1" border="0" summary="">
-<tr><td>
-<font face="Arial,Helvetica"><b>Name:</b></font></a> </td><td> <b>SSLOptions</b></td></tr>
-<tr><td>
-<font face="Arial,Helvetica"><b>Description:</b></font></a> </td><td> Configure various SSL engine run-time options</td></tr>
-<tr><td><a
- href="../directive-dict.html#Syntax"
- rel="Help"
-><font face="Arial,Helvetica"><b>Syntax:</b></font></a> </td><td> <code>SSLOptions</code> [+-]<em>option</em> ...</td></tr>
-<tr><td><a
- href="../directive-dict.html#Default"
- rel="Help"
-><font face="Arial,Helvetica"><b>Default:</b></font></a> </td><td> <em>None</em></td></tr>
-<tr><td><a
- href="../directive-dict.html#Context"
- rel="Help"
-><font face="Arial,Helvetica"><b>Context:</b></font></a> </td><td> server config, virtual host, directory, .htaccess</td></tr>
-<tr><td><a
- href="../directive-dict.html#Override"
- rel="Help"
-><font face="Arial,Helvetica"><b>Override:</b></font></a> </td><td> Options</td></tr>
-<tr><td><a
- href="../directive-dict.html#Status"
- rel="Help"
-><font face="Arial,Helvetica"><b>Status:</b></font></a> </td><td> Extension</td></tr>
-<tr><td><a
- href="../directive-dict.html#Module"
- rel="Help"
-><font face="Arial,Helvetica"><b>Module:</b></font></a> </td><td> mod_ssl</td></tr>
-<tr><td><a
- href="../directive-dict.html#Compatibility"
- rel="Help"
-><font face="Arial,Helvetica"><b>Compatibility:</b></font></a> </td><td> mod_ssl 2.1 </td></tr>
-</table>
-</td>
-</tr>
-</table>
-</td>
-</tr>
-</table>
-<p>
-This directive can be used to control various run-time options on a
-per-directory basis. Normally, if multiple <code>SSLOptions</code> could
-apply to a directory, then the most specific one is taken completely; the
-options are not merged. However if <em>all</em> the options on the
-<code>SSLOptions</code> directive are preceded by a plus (<code>+</code>) or
-minus (<code>-</code>) symbol, the options are merged. Any options preceded by
-a <code>+</code> are added to the options currently in force, and any options
-preceded by a <code>-</code> are removed from the options currently in force.
-<p>
-The available <em>option</em>s are:
-<ul>
-<li><code>StdEnvVars</code>
-    <p>
-    When this option is enabled, the standard set of SSL related CGI/SSI
-    environment variables are created. This per default is disabled for
-    performance reasons, because the information extraction step is a
-    rather expensive operation. So one usually enables this option for
-    CGI and SSI requests only.
-<p>
-<li><code>CompatEnvVars</code>
-    <p>
-    When this option is enabled, additional CGI/SSI environment variables are
-    created for backward compatibility to other Apache SSL solutions. Look in
-    the <a href="ssl_compat.html">Compatibility</a> chapter for details
-    on the particular variables generated.
-<p>
-<li><code>ExportCertData</code>
-    <p>
-    When this option is enabled, additional CGI/SSI environment variables are
-    created: <code>SSL_SERVER_CERT</code>, <code>SSL_CLIENT_CERT</code> and
-    <code>SSL_CLIENT_CERT_CHAIN</code><i>n</i> (with <i>n</i> = 0,1,2,..).
-    These contain the PEM-encoded X.509 Certificates of server and client for
-    the current HTTPS connection and can be used by CGI scripts for deeper
-    Certificate checking. Additionally all other certificates of the client
-    certificate chain are provided, too. This bloats up the environment a
-    little bit which is why you have to use this option to enable it on
-    demand.
-<p>
-<li><code>FakeBasicAuth</code>
-    <p>
-    When this option is enabled, the Subject Distinguished Name (DN) of the
-    Client X509 Certificate is translated into a HTTP Basic Authorization
-    username. This means that the standard Apache authentication methods can
-    be used for access control. The user name is just the Subject of the
-    Client's X509 Certificate (can be determined by running OpenSSL's
-    <code>openssl x509</code> command: <code>openssl x509 -noout -subject -in
-    </code><em>certificate</em><code>.crt</code>). Note that no password is
-    obtained from the user. Every entry in the user file needs this password:
-    ``<code>xxj31ZMTZzkVA</code>'', which is the DES-encrypted version of the
-    word `<code>password</code>''. Those who live under MD5-based encryption
-    (for instance under FreeBSD or BSD/OS, etc.) should use the following MD5
-    hash of the same word: ``<code>$1$OXLyS...$Owx8s2/m9/gfkcRVXzgoE/</code>''.
-<p>
-<li><code>StrictRequire</code>
-    <p>
-    This <i>forces</i> forbidden access when <code>SSLRequireSSL</code> or
-    <code>SSLRequire</code> successfully decided that access should be
-    forbidden. Usually the default is that in the case where a ``<code>Satisfy
-    any</code>'' directive is used, and other access restrictions are passed,
-    denial of access due to <code>SSLRequireSSL</code> or
-    <code>SSLRequire</code> is overridden (because that's how the Apache
-    <tt>Satisfy</tt> mechanism should work.) But for strict access restriction
-    you can use <code>SSLRequireSSL</code> and/or <code>SSLRequire</code> in
-    combination with an ``<code>SSLOptions +StrictRequire</code>''. Then an
-    additional ``<code>Satisfy Any</code>'' has no chance once mod_ssl has
-    decided to deny access.
-<p>
-<li><code>OptRenegotiate</code>
-    <p>
-    This enables optimized SSL connection renegotiation handling when SSL
-    directives are used in per-directory context. By default a strict
-    scheme is enabled where <i>every</i> per-directory reconfiguration of
-    SSL parameters causes a <i>full</i> SSL renegotiation handshake. When this
-    option is used mod_ssl tries to avoid unnecessary handshakes by doing more
-    granular (but still safe) parameter checks. Nevertheless these granular
-    checks sometimes maybe not what the user expects, so enable this on a
-    per-directory basis only, please.
-</ul>
-<p>
-Example:
-<blockquote>
-<pre>
-SSLOptions +FakeBasicAuth -StrictRequire
-&lt;Files ~ "\.(cgi|shtml)$"&gt;
-    SSLOptions +StdEnvVars +CompatEnvVars -ExportCertData
-&lt;Files&gt;
-</pre>
-</blockquote>
-<!-- SSLRequireSSL -------------------------------------------------->
-<p>
-<br>
-<a name="SSLRequireSSL"></a>
-<h2><a name="ToC22">SSLRequireSSL</a></h2>
-<table cellspacing="0" cellpadding="1" bgcolor="#cccccc" border="0" summary="">
-<tr>
-<td>
-<table bgcolor="white" width="600" cellspacing="0" cellpadding="5" border="0" summary="">
-<tr>
-<td>
-<table cellspacing="0" cellpadding="1" border="0" summary="">
-<tr><td>
-<font face="Arial,Helvetica"><b>Name:</b></font></a> </td><td> <b>SSLRequireSSL</b></td></tr>
-<tr><td>
-<font face="Arial,Helvetica"><b>Description:</b></font></a> </td><td> Deny access when SSL is not used for the HTTP request</td></tr>
-<tr><td><a
- href="../directive-dict.html#Syntax"
- rel="Help"
-><font face="Arial,Helvetica"><b>Syntax:</b></font></a> </td><td> <code>SSLRequireSSL</code></td></tr>
-<tr><td><a
- href="../directive-dict.html#Default"
- rel="Help"
-><font face="Arial,Helvetica"><b>Default:</b></font></a> </td><td> <em>None</em></td></tr>
-<tr><td><a
- href="../directive-dict.html#Context"
- rel="Help"
-><font face="Arial,Helvetica"><b>Context:</b></font></a> </td><td> directory, .htaccess</td></tr>
-<tr><td><a
- href="../directive-dict.html#Override"
- rel="Help"
-><font face="Arial,Helvetica"><b>Override:</b></font></a> </td><td> AuthConfig</td></tr>
-<tr><td><a
- href="../directive-dict.html#Status"
- rel="Help"
-><font face="Arial,Helvetica"><b>Status:</b></font></a> </td><td> Extension</td></tr>
-<tr><td><a
- href="../directive-dict.html#Module"
- rel="Help"
-><font face="Arial,Helvetica"><b>Module:</b></font></a> </td><td> mod_ssl</td></tr>
-<tr><td><a
- href="../directive-dict.html#Compatibility"
- rel="Help"
-><font face="Arial,Helvetica"><b>Compatibility:</b></font></a> </td><td> mod_ssl 2.0 </td></tr>
-</table>
-</td>
-</tr>
-</table>
-</td>
-</tr>
-</table>
-<p>
-This directive forbids access unless HTTP over SSL (i.e. HTTPS) is enabled for
-the current connection. This is very handy inside the SSL-enabled virtual
-host or directories for defending against configuration errors that expose
-stuff that should be protected. When this directive is present all requests
-are denied which are not using SSL.
-<p>
-Example:
-<blockquote>
-<pre>
-SSLRequireSSL
-</pre>
-</blockquote>
-<!-- SSLRequire ----------------------------------------------------->
-<p>
-<br>
-<a name="SSLRequire"></a>
-<h2><a name="ToC23">SSLRequire</a></h2>
-<table cellspacing="0" cellpadding="1" bgcolor="#cccccc" border="0" summary="">
-<tr>
-<td>
-<table bgcolor="white" width="600" cellspacing="0" cellpadding="5" border="0" summary="">
-<tr>
-<td>
-<table cellspacing="0" cellpadding="1" border="0" summary="">
-<tr><td>
-<font face="Arial,Helvetica"><b>Name:</b></font></a> </td><td> <b>SSLRequire</b></td></tr>
-<tr><td>
-<font face="Arial,Helvetica"><b>Description:</b></font></a> </td><td> Allow access only when an arbitrarily complex boolean expression is true</td></tr>
-<tr><td><a
- href="../directive-dict.html#Syntax"
- rel="Help"
-><font face="Arial,Helvetica"><b>Syntax:</b></font></a> </td><td> <code>SSLRequire</code> <em>expression</em></td></tr>
-<tr><td><a
- href="../directive-dict.html#Default"
- rel="Help"
-><font face="Arial,Helvetica"><b>Default:</b></font></a> </td><td> <em>None</em></td></tr>
-<tr><td><a
- href="../directive-dict.html#Context"
- rel="Help"
-><font face="Arial,Helvetica"><b>Context:</b></font></a> </td><td> directory, .htaccess</td></tr>
-<tr><td><a
- href="../directive-dict.html#Override"
- rel="Help"
-><font face="Arial,Helvetica"><b>Override:</b></font></a> </td><td> AuthConfig</td></tr>
-<tr><td><a
- href="../directive-dict.html#Status"
- rel="Help"
-><font face="Arial,Helvetica"><b>Status:</b></font></a> </td><td> Extension</td></tr>
-<tr><td><a
- href="../directive-dict.html#Module"
- rel="Help"
-><font face="Arial,Helvetica"><b>Module:</b></font></a> </td><td> mod_ssl</td></tr>
-<tr><td><a
- href="../directive-dict.html#Compatibility"
- rel="Help"
-><font face="Arial,Helvetica"><b>Compatibility:</b></font></a> </td><td> mod_ssl 2.1 </td></tr>
-</table>
-</td>
-</tr>
-</table>
-</td>
-</tr>
-</table>
-<p>
-This directive specifies a general access requirement which has to be
-fulfilled in order to allow access. It's a very powerful directive because the
-requirement specification is an arbitrarily complex boolean expression
-containing any number of access checks.
-<p>
-The <em>expression</em> must match the following syntax (given as a BNF
-grammar notation):
-<blockquote>
-<pre>
-expr     ::= "<b>true</b>" | "<b>false</b>"
-           | "<b>!</b>" expr
-           | expr "<b>&&</b>" expr
-           | expr "<b>||</b>" expr
-           | "<b>(</b>" expr "<b>)</b>"
-           | comp
-
-comp     ::= word "<b>==</b>" word | word "<b>eq</b>" word
-           | word "<b>!=</b>" word | word "<b>ne</b>" word
-           | word "<b>&lt;</b>"  word | word "<b>lt</b>" word
-           | word "<b>&lt;=</b>" word | word "<b>le</b>" word
-           | word "<b>&gt;</b>"  word | word "<b>gt</b>" word
-           | word "<b>&gt;=</b>" word | word "<b>ge</b>" word
-           | word "<b>in</b>" "<b>{</b>" wordlist "<b>}</b>"
-           | word "<b>=~</b>" regex
-           | word "<b>!~</b>" regex
-
-wordlist ::= word
-           | wordlist "<b>,</b>" word
-
-word     ::= digit
-           | cstring
-           | variable
-           | function
-
-digit    ::= [0-9]+
-cstring  ::= "..."
-variable ::= "<b>%{</b>" varname "<b>}</b>"
-function ::= funcname "<b>(</b>" funcargs "<b>)</b>"
-</pre>
-</blockquote>
-while for <code>varname</code> any variable from <a href="#table3">Table 3</a>
-can be used. Finally for <code>funcname</code> the following functions
-are available:
-<ul>
-<li><code>file(</code><em>filename</em><code>)</code>
-    <p>
-    This function takes one string argument and expands to the contents of the
-    file. This is especially useful for matching this contents against a
-    regular expression, etc.
-</ul>
-Notice that <em>expression</em> is first parsed into an internal machine
-representation and then evaluated in a second step. Actually, in Global and
-Per-Server Class context <em>expression</em> is parsed at startup time and
-at runtime only the machine representation is executed. For Per-Directory
-context this is different: here <em>expression</em> has to be parsed and
-immediately executed for every request.
-<p>
-Example:
-<blockquote>
-<pre>
-SSLRequire (    %{SSL_CIPHER} !~ m/^(EXP|NULL)-/ \
-            and %{SSL_CLIENT_S_DN_O} eq "Snake Oil, Ltd." \
-            and %{SSL_CLIENT_S_DN_OU} in {"Staff", "CA", "Dev"} \
-            and %{TIME_WDAY} >= 1 and %{TIME_WDAY} <= 5 \
-            and %{TIME_HOUR} >= 8 and %{TIME_HOUR} <= 20       ) \
-           or %{REMOTE_ADDR} =~ m/^192\.76\.162\.[0-9]+$/
-</pre>
-</blockquote>
-<div align="center">
-<a name="table3"></a>
-<table width="600" cellspacing="0" cellpadding="1" border="0" summary="">
-<caption align="bottom" id="sf">Table 3: Available Variables for SSLRequire</caption>
-<tr><td bgcolor="#cccccc">
-<table width="598" cellpadding="5" cellspacing="0" border="0" summary="">
-<tr><td valign="top" align="center" bgcolor="#ffffff">
-<table summary=""><tr><td>
-<em>Standard CGI/1.0 and Apache variables:</em>
-<pre>
-HTTP_USER_AGENT        PATH_INFO             AUTH_TYPE
-HTTP_REFERER           QUERY_STRING          SERVER_SOFTWARE
-HTTP_COOKIE            REMOTE_HOST           API_VERSION
-HTTP_FORWARDED         REMOTE_IDENT          TIME_YEAR
-HTTP_HOST              IS_SUBREQ             TIME_MON
-HTTP_PROXY_CONNECTION  DOCUMENT_ROOT         TIME_DAY
-HTTP_ACCEPT            SERVER_ADMIN          TIME_HOUR
-HTTP:headername        SERVER_NAME           TIME_MIN
-THE_REQUEST            SERVER_PORT           TIME_SEC
-REQUEST_METHOD         SERVER_PROTOCOL       TIME_WDAY
-REQUEST_SCHEME         REMOTE_ADDR           TIME
-REQUEST_URI            REMOTE_USER           ENV:<b>variablename</b>
-REQUEST_FILENAME
-</pre>
-<em>SSL-related variables:</em>
-<pre>
-HTTPS                  SSL_CLIENT_M_VERSION   SSL_SERVER_M_VERSION
-                       SSL_CLIENT_M_SERIAL    SSL_SERVER_M_SERIAL
-SSL_PROTOCOL           SSL_CLIENT_V_START     SSL_SERVER_V_START
-SSL_SESSION_ID         SSL_CLIENT_V_END       SSL_SERVER_V_END
-SSL_CIPHER             SSL_CLIENT_S_DN        SSL_SERVER_S_DN
-SSL_CIPHER_EXPORT      SSL_CLIENT_S_DN_C      SSL_SERVER_S_DN_C
-SSL_CIPHER_ALGKEYSIZE  SSL_CLIENT_S_DN_ST     SSL_SERVER_S_DN_ST
-SSL_CIPHER_USEKEYSIZE  SSL_CLIENT_S_DN_L      SSL_SERVER_S_DN_L
-SSL_VERSION_LIBRARY    SSL_CLIENT_S_DN_O      SSL_SERVER_S_DN_O
-SSL_VERSION_INTERFACE  SSL_CLIENT_S_DN_OU     SSL_SERVER_S_DN_OU
-                       SSL_CLIENT_S_DN_CN     SSL_SERVER_S_DN_CN
-                       SSL_CLIENT_S_DN_T      SSL_SERVER_S_DN_T
-                       SSL_CLIENT_S_DN_I      SSL_SERVER_S_DN_I
-                       SSL_CLIENT_S_DN_G      SSL_SERVER_S_DN_G
-                       SSL_CLIENT_S_DN_S      SSL_SERVER_S_DN_S
-                       SSL_CLIENT_S_DN_D      SSL_SERVER_S_DN_D
-                       SSL_CLIENT_S_DN_UID    SSL_SERVER_S_DN_UID
-                       SSL_CLIENT_S_DN_Email  SSL_SERVER_S_DN_Email
-                       SSL_CLIENT_I_DN        SSL_SERVER_I_DN
-                       SSL_CLIENT_I_DN_C      SSL_SERVER_I_DN_C
-                       SSL_CLIENT_I_DN_ST     SSL_SERVER_I_DN_ST
-                       SSL_CLIENT_I_DN_L      SSL_SERVER_I_DN_L
-                       SSL_CLIENT_I_DN_O      SSL_SERVER_I_DN_O
-                       SSL_CLIENT_I_DN_OU     SSL_SERVER_I_DN_OU
-                       SSL_CLIENT_I_DN_CN     SSL_SERVER_I_DN_CN
-                       SSL_CLIENT_I_DN_T      SSL_SERVER_I_DN_T
-                       SSL_CLIENT_I_DN_I      SSL_SERVER_I_DN_I
-                       SSL_CLIENT_I_DN_G      SSL_SERVER_I_DN_G
-                       SSL_CLIENT_I_DN_S      SSL_SERVER_I_DN_S
-                       SSL_CLIENT_I_DN_D      SSL_SERVER_I_DN_D
-                       SSL_CLIENT_I_DN_UID    SSL_SERVER_I_DN_UID
-                       SSL_CLIENT_I_DN_Email  SSL_SERVER_I_DN_Email
-                       SSL_CLIENT_A_SIG       SSL_SERVER_A_SIG
-                       SSL_CLIENT_A_KEY       SSL_SERVER_A_KEY
-                       SSL_CLIENT_CERT        SSL_SERVER_CERT
-                       SSL_CLIENT_CERT_CHAIN<b>n</b>
-                       SSL_CLIENT_VERIFY
-</pre>
-</td></tr></table>
-</td>
-</tr></table>
-</td></tr></table>
-</div>
-<br>
-<br>
-<p>
-<h1><a name="ToC24">Additional Features</a></h1>
-<h2><a name="ToC25">Environment Variables</a></h2>
-This module provides a lot of SSL information as additional environment
-variables to the SSI and CGI namespace. The generated variables are listed in
-<a href="#table4">Table 4</a>. For backward compatibility the information can
-be made available under different names, too. Look in the <a
-href="ssl_compat.html">Compatibility</a> chapter for details on the
-compatibility variables.
-<p>
-<div align="center">
-<a name="table4"></a>
-<table width="600" cellspacing="0" cellpadding="1" border="0" summary="">
-<caption align="bottom" id="sf">Table 4: SSI/CGI Environment Variables</caption>
-<tr><td bgcolor="#cccccc">
-<table width="598" cellpadding="5" cellspacing="0" border="0" summary="">
-<tr><td valign="top" align="center" bgcolor="#ffffff">
-<table border="0" cellspacing="0" cellpadding="2" width="598" summary="">
-<tr id="H">
- <td><b>Variable Name:</b></td>
- <td><b>Value Type:</b></td>
- <td><b>Description:</b></td>
-</tr>
-<tr id="D"><td><code>HTTPS</code></td>                         <td>flag</td>      <td>HTTPS is being used.</td></tr>
-<tr id="H"><td><code>SSL_PROTOCOL</code></td>                  <td>string</td>    <td>The SSL protocol version (SSLv2, SSLv3, TLSv1)</td></tr>
-<tr id="H"><td><code>SSL_SESSION_ID</code></td>                <td>string</td>    <td>The hex-encoded SSL session id</td></tr>
-<tr id="D"><td><code>SSL_CIPHER</code></td>                    <td>string</td>    <td>The cipher specification name</td></tr>
-<tr id="D"><td><code>SSL_CIPHER_EXPORT</code></td>             <td>string</td>    <td><code>true</code> if cipher is an export cipher</td></tr>
-<tr id="H"><td><code>SSL_CIPHER_USEKEYSIZE</code></td>         <td>number</td>    <td>Number of cipher bits (actually used)</td></tr>
-<tr id="D"><td><code>SSL_CIPHER_ALGKEYSIZE</code></td>         <td>number</td>    <td>Number of cipher bits (possible)</td></tr>
-<tr id="H"><td><code>SSL_VERSION_INTERFACE</code></td>         <td>string</td>    <td>The mod_ssl program version</td></tr>
-<tr id="D"><td><code>SSL_VERSION_LIBRARY</code></td>           <td>string</td>    <td>The OpenSSL program version</td></tr>
-<tr id="H"><td><code>SSL_CLIENT_M_VERSION</code></td>          <td>string</td>    <td>The version of the client certificate</td></tr>
-<tr id="D"><td><code>SSL_CLIENT_M_SERIAL</code></td>           <td>string</td>    <td>The serial of the client certificate</td></tr>
-<tr id="H"><td><code>SSL_CLIENT_S_DN</code></td>               <td>string</td>    <td>Subject DN in client's certificate</td></tr>
-<tr id="D"><td><code>SSL_CLIENT_S_DN_</code><em>x509</em></td> <td>string</td>    <td>Component of client's Subject DN</td></tr>
-<tr id="H"><td><code>SSL_CLIENT_I_DN</code></td>               <td>string</td>    <td>Issuer DN of client's certificate</td></tr>
-<tr id="D"><td><code>SSL_CLIENT_I_DN_</code><em>x509</em></td> <td>string</td>    <td>Component of client's Issuer DN</td></tr>
-<tr id="H"><td><code>SSL_CLIENT_V_START</code></td>            <td>string</td>    <td>Validity of client's certificate (start time)</td></tr>
-<tr id="D"><td><code>SSL_CLIENT_V_END</code></td>              <td>string</td>    <td>Validity of client's certificate (end time)</td></tr>
-<tr id="H"><td><code>SSL_CLIENT_A_SIG</code></td>              <td>string</td>    <td>Algorithm used for the signature of client's certificate</td></tr>
-<tr id="D"><td><code>SSL_CLIENT_A_KEY</code></td>              <td>string</td>    <td>Algorithm used for the public key of client's certificate</td></tr>
-<tr id="H"><td><code>SSL_CLIENT_CERT</code></td>               <td>string</td>    <td>PEM-encoded client certificate</td></tr>
-<tr id="D"><td><code>SSL_CLIENT_CERT_CHAIN</code><i>n</i></td> <td>string</td>    <td>PEM-encoded certificates in client certificate chain</td></tr>
-<tr id="H"><td><code>SSL_CLIENT_VERIFY</code></td>             <td>string</td>    <td><tt>NONE</tt>, <tt>SUCCESS</tt>, <tt>GENEROUS</tt> or <tt>FAILED:</tt><i>reason</i></td></tr>
-<tr id="D"><td><code>SSL_SERVER_M_VERSION</code></td>          <td>string</td>    <td>The version of the server certificate</td></tr>
-<tr id="H"><td><code>SSL_SERVER_M_SERIAL</code></td>           <td>string</td>    <td>The serial of the server certificate</td></tr>
-<tr id="D"><td><code>SSL_SERVER_S_DN</code></td>               <td>string</td>    <td>Subject DN in server's certificate</td></tr>
-<tr id="H"><td><code>SSL_SERVER_S_DN_</code><em>x509</em></td> <td>string</td>    <td>Component of server's Subject DN</td></tr>
-<tr id="D"><td><code>SSL_SERVER_I_DN</code></td>               <td>string</td>    <td>Issuer DN of server's certificate</td></tr>
-<tr id="H"><td><code>SSL_SERVER_I_DN_</code><em>x509</em></td> <td>string</td>    <td>Component of server's Issuer DN</td></tr>
-<tr id="D"><td><code>SSL_SERVER_V_START</code></td>            <td>string</td>    <td>Validity of server's certificate (start time)</td></tr>
-<tr id="H"><td><code>SSL_SERVER_V_END</code></td>              <td>string</td>    <td>Validity of server's certificate (end time)</td></tr>
-<tr id="D"><td><code>SSL_SERVER_A_SIG</code></td>              <td>string</td>    <td>Algorithm used for the signature of server's certificate</td></tr>
-<tr id="H"><td><code>SSL_SERVER_A_KEY</code></td>              <td>string</td>    <td>Algorithm used for the public key of server's certificate</td></tr>
-<tr id="D"><td><code>SSL_SERVER_CERT</code></td>               <td>string</td>    <td>PEM-encoded server certificate</td></tr>
-</table>
-[ where <em>x509</em> is a component of a X.509 DN:
-  <code>C,ST,L,O,OU,CN,T,I,G,S,D,UID,Email</code> ]
-</td>
-</tr></table>
-</td></tr></table>
-</div>
-<p>
-<br>
-<h2><a name="ToC26">Custom Log Formats</a></h2>
-When mod_ssl is built into Apache or at least loaded (under DSO situation)
-additional functions exist for the <a
-href="../mod_log_config.html#formats">Custom Log Format</a> of <a
-href="../mod_log_config.html">mod_log_config</a>. First there is an additional
-``<code>%{</code><em>varname</em><code>}x</code>'' eXtension format function
-which can be used to expand any variables provided by any module, especially
-those provided by mod_ssl which can you find in <a href="#table4">Table 4</a>.
-<p>
-For backward compatibility there is additionally a special
-``<code>%{</code><em>name</em><code>}c</code>'' cryptography format function
-provided. Information about this function is provided in the <a
-href="ssl_compat.html">Compatibility</a> chapter.
-<p>
-Example:
-<blockquote>
-<pre>
-CustomLog logs/ssl_request_log \
-          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
-</pre>
-</blockquote>
-      <p>
-      <br>
-      <table summary="">
-      <tr>
-        <td>
-           <table width="600" border="0" summary="">
-           <tr>
-            <td valign="top" align="left" width="250">
-<a href="ssl_intro.html" onmouseover="ro_imgOver('ro_img_prev_bot', 'previous page'); return true" onmouseout="ro_imgNormal('ro_img_prev_bot'); return true" onfocus="ro_imgOver('ro_img_prev_bot', 'previous page'); return true" onblur="ro_imgNormal('ro_img_prev_bot'); return true"><img name="ro_img_prev_bot" src="ssl_template.navbut-prev-n.gif" alt="previous page" width="70" height="18" border="0"></a><br><font color="#000000">Introduction</font>
-            </td>
-            <td valign="top" align="right" width="250">
-<a href="ssl_compat.html" onmouseover="ro_imgOver('ro_img_next_bot', 'next page'); return true" onmouseout="ro_imgNormal('ro_img_next_bot'); return true" onfocus="ro_imgOver('ro_img_next_bot', 'next page'); return true" onblur="ro_imgNormal('ro_img_next_bot'); return true"><img name="ro_img_next_bot" src="ssl_template.navbut-next-n.gif" alt="next page" width="70" height="18" border="0"></a><br><font color="#000000">Compatibility</font>
-            </td>
-           </tr>
-           </table>
-         </td>
-      </tr>
-      <tr>
-        <td><img src="ssl_template.imgdot-1x1-000000.gif" alt="" width="600" height="2" align="bottom" border="0"></td>
-      </tr>
-      <tr>
-        <td><table width="598" summary="">
-        <tr>
-        <td align="left"><font face="Arial,Helvetica">
-        <a href="http://www.modssl.org/">mod_ssl</a> 2.8, User Manual<br>
-        The Apache Interface to OpenSSL
-        </font>
-        </td>
-        <td align="right"><font face="Arial,Helvetica">
-        Copyright &copy; 1998-2001
-        <a href="http://www.engelschall.com/">Ralf S. Engelschall</a><br>
-        All Rights Reserved<br>
-        </font>
-        </td>
-        </tr>
-        </table>
-        </td>
-      </tr>
-      </table>
-  </td>
-</tr>
-</table>
-</div>
-</body>
-</html>
diff --git a/docs/manual/ssl/ssl_reference.wml b/docs/manual/ssl/ssl_reference.wml
deleted file mode 100644
index 1c49d17..0000000
--- a/docs/manual/ssl/ssl_reference.wml
+++ /dev/null
@@ -1,1580 +0,0 @@
-
-#use "ssl_template.inc" title="Reference" tag=ref num=3 
-
-<page_prev name="Introduction"  url="ssl_intro.html">
-<page_next name="Compatibility" url="ssl_compat.html">
-
-#use wml::std::toc style=nbsp
-#use wml::std::grid
-
-<quotation width=150 author="Unknown">
-``Try to understand everything,
-but believe nothing!''
-</quotation>
-
-<p>
-<table cellspacing="0" cellpadding="0" border="0">
-<tr valign="bottom">
-<td>
-
-<big T>his chapter provides a reference to all configuration directives and
-additional user visible features mod_ssl provides. It's intended as the
-official resource when you want to know how a particilar mod_ssl functionality
-is actually configured or activated.  Each directive is documented similar to
-the way standard Apache directives are documented in the official Apache
-documentation set, i.e. for each directive especially the syntax, default and
-context where applicable is given. 
-
-<p>
-Notice that there are three major classes of directives which are used by
-mod_ssl: First <em>Global Directives</em> (i.e. directives with context
-``server config''), which can occur inside the server config files but only
-outside of any sectioning commands like &lt;VirtualHost&gt;.  Second
-<em>Per-Server Directives</em> (i.e. those with context ``server config,
-virtual host''), which can occur inside the server config files both outside
-(for the main/default server) and inside &lt;VirtualHost&gt; sections.  
-
-</td>
-<td>
-&nbsp;&nbsp;
-</td>
-<td>
-
-<div align="right">
-<table cellspacing="0" cellpadding="5" border="0" bgcolor="#ccccff">
-<tr>
-<td bgcolor="#333399">
-<font face="Arial,Helvetica" color="#ccccff">
-<b>Table Of Contents</b>
-</font>
-</td>
-</tr>
-<tr>
-<td>
-<font face="Arial,Helvetica" size="-1">
-<toc>
-</font>
-</td>
-</tr>
-</table>
-</div>
-
-</td>
-</tr>
-</table>
-
-<p>
-And third <em>Per-Directory Directives</em> (i.e. those with context ``server
-config, virtual host, directory, .htaccess''), which can pretty much occur
-everywhere.  Especially both inside the server config files and the
-per-directory <code>.htaccess</code> files.  The three classes are subsets of
-each other, i.e. directives from the per-directory class can also be used in
-the per-server and global context, and directives from the per-server class
-can also be used the in the global context.
-
-<p>
-Additional directives and environment variables provided by mod_ssl (via
-on-the-fly mapping) for backward compatiblity to other Apache SSL solutions
-are documented in the <a href="ssl_compat.html">Compatibility</a> chapter.
-
-
-<h1>Configuration Directives</h1>
-
-The most visible and error-prone things of mod_ssl are its configuration
-directives. So we document them in great detail here to assist you in setting
-up the best possible configuration of your SSL-aware webserver.
-
-
-<!-- SSLPassPhraseDialog -------------------------------------------->
-
-<p>
-<br>
-<a name="SSLPassPhraseDialog"></a>
-<h2>SSLPassPhraseDialog</h2>
-
-<p>
-<directive
-    name="SSLPassPhraseDialog"
-    description="Type of pass phrase dialog for encrypted private keys"
-    syntax="<code>SSLPassPhraseDialog</code> <em>type</em>"
-    default="<code>SSLPassPhraseDialog builtin</code>"
-    context="server config"
-    override="<em>Not applicable</em>"
-    compat="mod_ssl 2.1"
->
-
-<p>
-When Apache starts up it has to read the various Certificate (see <a
-href="#SSLCertificateFile">SSLCertificateFile</a>) and Private Key (see <a
-href="#SSLCertificateKeyFile">SSLCertificateKeyFile</a>) files of the
-SSL-enabled virtual servers. Because for security reasons the Private Key
-files are usually encrypted, mod_ssl needs to query the administrator for a
-Pass Phrase in order to decrypt those files. This query can be done in two ways
-which can be configured by <em>type</em>:
-
-<ul>
-<li><code>builtin</code>
-    <p>
-    This is the default where an interactive terminal dialog occurs at startup
-    time just before Apache detaches from the terminal. Here the administrator
-    has to manually enter the Pass Phrase for each encrypted Private Key file.
-    Because a lot of SSL-enabled virtual hosts can be configured, the
-    following reuse-scheme is used to minimize the dialog: When a Private Key
-    file is encrypted, all known Pass Phrases (at the beginning there are
-    none, of course) are tried. If one of those known Pass Phrases succeeds no
-    dialog pops up for this particular Private Key file.  If none succeeded,
-    another Pass Phrase is queried on the terminal and remembered for the next
-    round (where it perhaps can be reused). 
-    <p> 
-    This scheme allows mod_ssl to be maximally flexible (because for N encrypted
-    Private Key files you <em>can</em> use N different Pass Phrases - but then
-    you have to enter all of them, of course) while minimizing the terminal
-    dialog (i.e. when you use a single Pass Phrase for all N Private Key files
-    this Pass Phrase is queried only once).
-<p>
-<li><code>exec:/path/to/program</code>
-    <p>
-    Here an external program is configured which is called at startup for each
-    encrypted Private Key file. It is called with two arguments (the first is
-    of the form ``<code>servername:portnumber</code>'', the second is either
-    ``<code>RSA</code>'' or ``<code>DSA</code>''), which indicate for which
-    server and algorithm it has to print the corresponding Pass Phrase to
-    <code>stdout</code>.  The intent is that this external program first runs
-    security checks to make sure that the system is not compromised by an
-    attacker, and only when these checks were passed successfully it provides
-    the Pass Phrase. 
-    <p>
-    Both these security checks, and the way the Pass Phrase is determined, can
-    be as complex as you like. Mod_ssl just defines the interface: an
-    executable program which provides the Pass Phrase on <code>stdout</code>.
-    Nothing more or less! So, if you're really paranoid about security, here
-    is your interface. Anything else has to be left as an exercise to the
-    administrator, because local security requirements are so different.
-    <p>
-    The reuse-algorithm above is used here, too. In other words: The external
-    program is called only once per unique Pass Phrase.
-</ul>
-
-<p>
-Example:
-<blockquote>
-<pre>
-SSLPassPhraseDialog exec:/usr/local/apache/sbin/pp-filter
-</pre>
-</blockquote>
-
-
-<!-- SSLMutex ------------------------------------------------------->
-
-<p>
-<br>
-<a name="SSLMutex"></a>
-<h2>SSLMutex</h2>
-
-<p>
-<directive
-    name="SSLMutex"
-    description="Semaphore for internal mutual exclusion of operations"
-    syntax="<code>SSLMutex</code> <em>type</em>"
-    default="<code>SSLMutex none</code>"
-    context="server config"
-    override="<em>Not applicable</em>"
-    compat="mod_ssl 2.1"
->
-
-<p>
-This configures the SSL engine's semaphore (aka. lock) which is used for mutual
-exclusion of operations which have to be done in a synchronized way between the
-pre-forked Apache server processes. This directive can only be used in the
-global server context because it's only useful to have one global mutex.
-
-<p>
-The following Mutex <em>types</em> are available:
-
-<ul>
-<li><code>none</code>
-    <p>
-    This is the default where no Mutex is used at all. Use it at your own
-    risk. But because currently the Mutex is mainly used for synchronizing
-    write access to the SSL Session Cache you can live without it as long
-    as you accept a sometimes garbled Session Cache. So it's not recommended
-    to leave this the default. Instead configure a real Mutex.
-<p>
-<li><code>file:/path/to/mutex</code>
-    <p>
-    This is the portable and (under Unix) always provided Mutex variant where
-    a physical (lock-)file is used as the Mutex. Always use a local disk
-    filesystem for <code>/path/to/mutex</code> and never a file residing on a
-    NFS- or AFS-filesystem. Note: Internally, the Process ID (PID) of the
-    Apache parent process is automatically appended to
-    <code>/path/to/mutex</code> to make it unique, so you don't have to worry
-    about conflicts yourself. Notice that this type of mutex is not available
-    under the Win32 environment. There you <i>have</i> to use the semaphore
-    mutex.
-<p>
-<li><code>sem</code>
-    <p>
-    This is the most elegant but also most non-portable Mutex variant where a
-    SysV IPC Semaphore (under Unix) and a Windows Mutex (under Win32) is used
-    when possible. It is only available when the underlying platform
-    supports it.
-</ul>
-
-<p>
-Example:
-<blockquote>
-<pre>
-SSLMutex file:/usr/local/apache/logs/ssl_mutex
-</pre>
-</blockquote>
-
-
-<!-- SSLRandomSeed -------------------------------------------------->
-
-<p>
-<br>
-<a name="SSLRandomSeed"></a>
-<h2>SSLRandomSeed</h2>
-
-<p>
-<directive
-    name="SSLRandomSeed"
-    description="Pseudo Random Number Generator (PRNG) seeding source"
-    syntax="<code>SSLRandomSeed</code> <em>context</em> <em>source</em> [<em>bytes</em>]"
-    default="<em>none</em>"
-    context="server config"
-    override="<em>Not applicable</em>"
-    compat="mod_ssl 2.2"
->
-
-<p>
-This configures one or more sources for seeding the Pseudo Random Number
-Generator (PRNG) in OpenSSL at startup time (<em>context</em> is
-<code>startup</code>) and/or just before a new SSL connection is established
-(<em>context</em> is <code>connect</code>).  This directive can only be used
-in the global server context because the PRNG is a global facility.
-
-<p>
-The following <em>source</em> variants are available:
-
-<ul>
-<li><code>builtin</code>
-    <p> This is the always available builtin seeding source.  Its usage
-    consumes minimum CPU cycles under runtime and hence can be always used
-    without drawbacks. The source used for seeding the PRNG contains of the
-    current time, the current process id and (when applicable) a randomly
-    choosen 1KB extract of the inter-process scoreboard structure of Apache.
-    The drawback is that this is not really a strong source and at startup
-    time (where the scoreboard is still not available) this source just
-    produces a few bytes of entropy. So you should always, at least for the
-    startup, use an additional seeding source.
-<p>
-<li><code>file:/path/to/source</code>
-    <p>
-    This variant uses an external file <code>/path/to/source</code> as the
-    source for seeding the PRNG. When <em>bytes</em> is specified, only the
-    first <em>bytes</em> number of bytes of the file form the entropy (and
-    <em>bytes</em> is given to <code>/path/to/source</code> as the first
-    argument). When <em>bytes</em> is not specified the whole file forms the
-    entropy (and <code>0</code> is given to <code>/path/to/source</code> as
-    the first argument). Use this especially at startup time, for instance
-    with an available <code>/dev/random</code> and/or
-    <code>/dev/urandom</code> devices (which usually exist on modern Unix
-    derivates like FreeBSD and Linux).
-    <p>
-    <em>But be careful</em>: Usually <code>/dev/random</code> provides only as
-    much entropy data as it actually has, i.e. when you request 512 bytes of
-    entropy, but the device currently has only 100 bytes available two things
-    can happen: On some platforms you receive only the 100 bytes while on
-    other platforms the read blocks until enough bytes are available (which
-    can take a long time). Here using an existing <code>/dev/urandom</code> is
-    better, because it never blocks and actually gives the amount of requested
-    data. The drawback is just that the quality of the received data may not
-    be the best. 
-    <p>
-    On some platforms like FreeBSD one can even control how the entropy is
-    actually generated, i.e. by which system interrupts. More details one can
-    find under <i>rndcontrol(8)</i> on those platforms.  Alternatively, when
-    your system lacks such a random device, you can use tool
-    like <a href="http://www.lothar.com/tech/crypto/">EGD</a>
-    (Entropy Gathering Daemon) and run its client program with the
-    <code>exec:/path/to/program/</code> variant (see below) or use
-    <code>egd:/path/to/egd-socket</code> (see below).
-<p>
-<li><code>exec:/path/to/program</code>
-    <p>
-    This variant uses an external executable <code>/path/to/program</code> as
-    the source for seeding the PRNG. When <em>bytes</em> is specified, only the
-    first <em>bytes</em> number of bytes of its <code>stdout</code> contents
-    form the entropy. When <em>bytes</em> is not specified, the entirety of
-    the data produced on <code>stdout</code> form the entropy. Use this only
-    at startup time when you need a very strong seeding with the help of an
-    external program (for instance as in the example above with the
-    <code>truerand</code> utility you can find in the mod_ssl distribution
-    which is based on the AT&amp;T <em>truerand</em> library). Using this in
-    the connection context slows down the server too dramatically, of course.
-    So usually you should avoid using external programs in that context.
-<p>
-<li><code>egd:/path/to/egd-socket</code> (Unix only)
-    <p>
-    This variant uses the Unix domain socket of the
-    external Entropy Gathering Daemon (EGD) (see <a
-    href="http://www.lothar.com/tech/crypto/">http://www.lothar.com/tech
-    /crypto/</a>) to seed the PRNG. Use this if no random device exists
-    on your platform.
-</ul>
-
-<p>
-Example:
-<blockquote>
-<pre>
-SSLRandomSeed startup builtin
-SSLRandomSeed startup file:/dev/random
-SSLRandomSeed startup file:/dev/urandom 1024
-SSLRandomSeed startup exec:/usr/local/bin/truerand 16
-SSLRandomSeed connect builtin
-SSLRandomSeed connect file:/dev/random
-SSLRandomSeed connect file:/dev/urandom 1024
-</pre>
-</blockquote>
-
-
-<!-- SSLSessionCache ------------------------------------------------>
-
-<p>
-<br>
-<a name="SSLSessionCache"></a>
-<h2>SSLSessionCache</h2>
-
-<directive
-    name="SSLSessionCache"
-    description="Type of the global/inter-process SSL Session Cache"
-    syntax="<code>SSLSessionCache</code> <em>type</em>"
-    default="<code>SSLSessionCache none</code>"
-    context="server config"
-    override="<em>Not applicable</em>"
-    compat="mod_ssl 2.1"
->
-
-<p>
-This configures the storage type of the global/inter-process SSL Session
-Cache. This cache is an optional facility which speeds up parallel request
-processing. For requests to the same server process (via HTTP keep-alive),
-OpenSSL already caches the SSL session information locally. But because modern
-clients request inlined images and other data via parallel requests (usually
-up to four parallel requests are common) those requests are served by
-<em>different</em> pre-forked server processes. Here an inter-process cache
-helps to avoid unneccessary session handshakes.
-
-<p>
-The following two storage <em>type</em>s are currently supported:
-
-<ul>
-<li><code>none</code>
-    <p>
-    This is the default and just disables the global/inter-process Session
-    Cache. There is no drawback in functionality, but a noticeable speed
-    penalty can be observed.
-<p>
-<li><code>dbm:/path/to/datafile</code>
-    <p>
-    This makes use of a DBM hashfile on the local disk to synchronize the
-    local OpenSSL memory caches of the server processes. The slight increase
-    in I/O on the server results in a visible request speedup for your
-    clients, so this type of storage is generally recommended.
-<p>
-<li><code>shm:/path/to/datafile</code>[<code>(</code><i>size</i><code>)</code>]
-    <p>
-    This makes use of a high-performance hash table (approx. <i>size</i> bytes
-    in size) inside a shared memory segment in RAM (established via
-    <code>/path/to/datafile</code>) to synchronize the local OpenSSL memory
-    caches of the server processes.  This storage type is not available on all
-    platforms. See the mod_ssl <code>INSTALL</code> document for details on
-    how to build Apache+EAPI with shared memory support.
-</ul>
-
-<p>
-Examples:
-<blockquote>
-<pre>
-SSLSessionCache dbm:/usr/local/apache/logs/ssl_gcache_data
-SSLSessionCache shm:/usr/local/apache/logs/ssl_gcache_data(512000)
-</pre>
-</blockquote>
-
-
-<!-- SSLSessionCacheTimeout ----------------------------------------->
-
-<p>
-<br>
-<a name="SSLSessionCacheTimeout"></a>
-<h2>SSLSessionCacheTimeout</h2>
-
-<directive
-    name="SSLSessionCacheTimeout"
-    description="Number of seconds before an SSL session expires in the Session Cache"
-    syntax="<code>SSLSessionCacheTimeout</code> <em>seconds</em>"
-    default="<code>SSLSessionCacheTimeout 300</code>"
-    context="server config, virtual host"
-    override="<em>Not applicable</em>"
-    compat="mod_ssl 2.0"
->
-
-<p>
-This directive sets the timeout in seconds for the information stored in the
-global/inter-process SSL Session Cache and the OpenSSL internal memory cache.
-It can be set as low as 15 for testing, but should be set to higher
-values like 300 in real life.
-
-<p>
-Example:
-<blockquote>
-<pre>
-SSLSessionCacheTimeout 600
-</pre>
-</blockquote>
-
-
-<!-- SSLEngine ------------------------------------------------------>
-
-<p>
-<br>
-<a name="SSLEngine"></a>
-<h2>SSLEngine</h2>
-
-<directive
-    name="SSLEngine"
-    description="SSL Engine Operation Switch"
-    syntax="<code>SSLEngine</code> <em>on|off</em>"
-    default="<code>SSLEngine off</code>"
-    context="server config, virtual host"
-    override="<em>Not applicable</em>"
-    compat="mod_ssl 2.1"
->
-
-<p>
-This directive toggles the usage of the SSL/TLS Protocol Engine. This is
-usually used inside a &lt;VirtualHost&gt; section to enable SSL/TLS for a
-particular virtual host. By default the SSL/TLS Protocol Engine is disabled
-for both the main server and all configured virtual hosts. 
-
-<p>
-Example:
-<blockquote>
-<pre>
-&lt;VirtualHost _default_:443&gt;
-SSLEngine on
-...
-&lt;/VirtualHost&gt;
-</pre>
-</blockquote>
-
-
-<!-- SSLProtocol ---------------------------------------------------->
-
-<p>
-<br>
-<a name="SSLProtocol"></a>
-<h2>SSLProtocol</h2>
-
-<directive
-    name="SSLProtocol"
-    description="Configure usable SSL protocol flavors"
-    syntax="<code>SSLProtocol</code> [+-]<em>protocol</em> ..."
-    default="<code>SSLProtocol all</code>"
-    context="server config, virtual host"
-    override="Options"
-    compat="mod_ssl 2.2"
->
-
-<p>
-This directive can be used to control the SSL protocol flavors mod_ssl should
-use when establishing its server environment.  Clients then can only connect
-with one of the provided protocols.
-
-<p>
-The available (case-insensitive) <em>protocol</em>s are:
-
-<ul>
-<li><code>SSLv2</code>
-    <p>
-    This is the Secure Sockets Layer (SSL) protocol, version 2.0. It is the
-    original SSL protocol as designed by Netscape Corporation.
-<p>
-<li><code>SSLv3</code>
-    <p>
-    This is the Secure Sockets Layer (SSL) protocol, version 3.0.  It is the
-    successor to SSLv2 and the currently (as of February 1999) de-facto
-    standardized SSL protocol from Netscape Corporation. It's supported by
-    almost all popular browsers.
-<p>
-<li><code>TLSv1</code>
-    <p>
-    This is the Transport Layer Security (TLS) protocol, version 1.0.  It is the
-    successor to SSLv3 and currently (as of February 1999) still under
-    construction by the Internet Engineering Task Force (IETF).  It's still
-    not supported by all popular browsers.
-<p>
-<li><code>All</code>
-    <p>
-    This is a shortcut for ``<code>+SSLv2 +SSLv3 +TLSv1</code>'' and a
-    convinient way for enabling all protocols except one when used in
-    combination with the minus sign on a protocol as the example above shows.
-</ul>
-
-<p>
-Example:
-<blockquote>
-<pre>
-\#   enable SSLv3 and TLSv1, but not SSLv2
-SSLProtocol all -SSLv2
-</pre>
-</blockquote>
-
-
-<!-- SSLCipherSuite ------------------------------------------------->
-
-<p>
-<br>
-<a name="SSLCipherSuite"></a>
-<h2>SSLCipherSuite</h2>
-
-<directive
-    name="SSLCipherSuite"
-    description="Cipher Suite available for negotiation in SSL handshake"
-    syntax="<code>SSLCipherSuite</code> <em>cipher-spec</em>"
-    default="<code>SSLCipherSuite ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP</code>"
-    context="server config, virtual host, directory, .htaccess"
-    override="AuthConfig"
-    compat="mod_ssl 2.1"
->
-
-<p>
-This complex directive uses a colon-separated <em>cipher-spec</em> string
-consisting of OpenSSL cipher specifications to configure the Cipher Suite the
-client is permitted to negotiate in the SSL handshake phase. Notice that this
-directive can be used both in per-server and per-directory context. In
-per-server context it applies to the standard SSL handshake when a connection
-is established. In per-directory context it forces a SSL renegotation with the
-reconfigured Cipher Suite after the HTTP request was read but before the HTTP
-response is sent.
-
-<p>
-An SSL cipher specification in <em>cipher-spec</em> is composed of 4 major
-attributes plus a few extra minor ones:
-
-<ul>
-<li><em>Key Exchange Algorithm</em>:<br>
-    RSA or Diffie-Hellman variants.
-<p>
-<li><em>Authentication Algorithm</em>:<br>
-    RSA, Diffie-Hellman, DSS or none.
-<p>
-<li><em>Cipher/Encryption Algorithm</em>:<br>
-    DES, Triple-DES, RC4, RC2, IDEA or none.
-<p>
-<li><em>MAC Digest Algorithm</em>:<br>
-    MD5, SHA or SHA1.
-</ul>
-
-An SSL cipher can also be an export cipher and is either a SSLv2 or SSLv3/TLSv1
-cipher (here TLSv1 is equivalent to SSLv3). To specify which ciphers to use,
-one can either specify all the Ciphers, one at a time, or use aliases to
-specify the preference and order for the ciphers (see <a href="#table1">Table
-1</a>).  
-
-<p>
-<float name="table1" caption="Table 1: OpenSSL Cipher Specification Tags">
-<table border="0" cellspacing="0" cellpadding="2" width=598>
-<tr id=D><td><b>Tag</b></td> <td><b>Description</b></td>
-
-<tr id=H><td colspan=2><em>Key Exchange Algorithm:</em></td></tr>
-<tr id=D><td><code>kRSA</code></td>   <td>RSA key exchange</td></tr>
-<tr id=H><td><code>kDHr</code></td>   <td>Diffie-Hellman key exchange with RSA key</td></tr>
-<tr id=D><td><code>kDHd</code></td>   <td>Diffie-Hellman key exchange with DSA key</td></tr>
-<tr id=H><td><code>kEDH</code></td>   <td>Ephemeral (temp.key) Diffie-Hellman key exchange (no cert)</td>   </tr>
-
-<tr id=H><td colspan=2><em>Authentication Algorithm:</em></td></tr>
-<tr id=D><td><code>aNULL</code></td>  <td>No authentication</td></tr>
-<tr id=H><td><code>aRSA</code></td>   <td>RSA authentication</td></tr>
-<tr id=D><td><code>aDSS</code></td>   <td>DSS authentication</td> </tr>
-<tr id=H><td><code>aDH</code></td>    <td>Diffie-Hellman authentication</td></tr>
-
-<tr id=D><td colspan=2><em>Cipher Encoding Algorithm:</em></td></tr></tr>
-<tr id=H><td><code>eNULL</code></td>  <td>No encoding</td>         </tr>
-<tr id=D><td><code>DES</code></td>    <td>DES encoding</td>        </tr>
-<tr id=H><td><code>3DES</code></td>   <td>Triple-DES encoding</td> </tr>
-<tr id=D><td><code>RC4</code></td>    <td>RC4 encoding</td>       </tr>
-<tr id=H><td><code>RC2</code></td>    <td>RC2 encoding</td>       </tr>
-<tr id=D><td><code>IDEA</code></td>   <td>IDEA encoding</td>       </tr>
-
-<tr id=H><td colspan=2><em>MAC Digest Algorithm</em>:</td></tr>
-<tr id=D><td><code>MD5</code></td>    <td>MD5 hash function</td></tr>
-<tr id=H><td><code>SHA1</code></td>   <td>SHA1 hash function</td></tr>
-<tr id=D><td><code>SHA</code></td>    <td>SHA hash function</td> </tr>
-
-<tr id=H><td colspan=2><em>Aliases:</em></td></tr>
-<tr id=D><td><code>SSLv2</code></td>  <td>all SSL version 2.0 ciphers</td></tr>
-<tr id=H><td><code>SSLv3</code></td>  <td>all SSL version 3.0 ciphers</td> </tr>
-<tr id=D><td><code>TLSv1</code></td>  <td>all TLS version 1.0 ciphers</td> </tr>
-<tr id=H><td><code>EXP</code></td>    <td>all export ciphers</td>  </tr>
-<tr id=D><td><code>EXPORT40</code></td> <td>all 40-bit export ciphers only</td>  </tr>
-<tr id=H><td><code>EXPORT56</code></td> <td>all 56-bit export ciphers only</td>  </tr>
-<tr id=D><td><code>LOW</code></td>    <td>all low strength ciphers (no export, single DES)</td></tr>
-<tr id=H><td><code>MEDIUM</code></td> <td>all ciphers with 128 bit encryption</td> </tr>
-<tr id=D><td><code>HIGH</code></td>   <td>all ciphers using Triple-DES</td>     </tr>
-<tr id=H><td><code>RSA</code></td>    <td>all ciphers using RSA key exchange</td> </tr>
-<tr id=D><td><code>DH</code></td>     <td>all ciphers using Diffie-Hellman key exchange</td> </tr>
-<tr id=H><td><code>EDH</code></td>    <td>all ciphers using Ephemeral Diffie-Hellman key exchange</td> </tr>
-<tr id=D><td><code>ADH</code></td>    <td>all ciphers using Anonymous Diffie-Hellman key exchange</td> </tr>
-<tr id=H><td><code>DSS</code></td>    <td>all ciphers using DSS authentication</td> </tr>
-<tr id=D><td><code>NULL</code></td>   <td>all ciphers using no encryption</td> </tr>
-
-</table>
-</float>
-
-<p>
-Now where this becomes interesting is that these can be put together
-to specify the order and ciphers you wish to use. To speed this up
-there are also aliases (<code>SSLv2, SSLv3, TLSv1, EXP, LOW, MEDIUM,
-HIGH</code>) for certain groups of ciphers. These tags can be joined
-together with prefixes to form the <em>cipher-spec</em>. Available
-prefixes are:
-
-<ul>
-<li>none: add cipher to list
-<li><code>+</code>: add ciphers to list and pull them to current location in list
-<li><code>-</code>: remove cipher from list (can be added later again)
-<li><code>!</code>: kill cipher from list completely (can <b>not</b> be added later again)
-</ul>
-
-A simpler way to look at all of this is to use the ``<code>openssl ciphers
--v</code>'' command which provides a nice way to successively create the
-correct <em>cipher-spec</em> string.  The default <em>cipher-spec</em> string
-is ``<code>ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP</code>'' which
-means the following: first, remove from consideration any ciphers that do not
-authenticate, i.e. for SSL only the Anonymous Diffie-Hellman ciphers. Next,
-use ciphers using RC4 and RSA. Next include the high, medium and then the low
-security ciphers. Finally <em>pull</em> all SSLv2 and export ciphers to the
-end of the list.
-
-<blockquote>
-<pre>
-$ openssl ciphers -v 'ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP'
-NULL-SHA                SSLv3 Kx=RSA      Au=RSA  Enc=None      Mac=SHA1
-NULL-MD5                SSLv3 Kx=RSA      Au=RSA  Enc=None      Mac=MD5 
-EDH-RSA-DES-CBC3-SHA    SSLv3 Kx=DH       Au=RSA  Enc=3DES(168) Mac=SHA1
-...                     ...               ...     ...           ...
-EXP-RC4-MD5             SSLv3 Kx=RSA(512) Au=RSA  Enc=RC4(40)   Mac=MD5  export
-EXP-RC2-CBC-MD5         SSLv2 Kx=RSA(512) Au=RSA  Enc=RC2(40)   Mac=MD5  export
-EXP-RC4-MD5             SSLv2 Kx=RSA(512) Au=RSA  Enc=RC4(40)   Mac=MD5  export
-</pre>
-</blockquote>
-
-The complete list of particular RSA &amp; DH ciphers for SSL is given in <a
-href="#table2">Table 2</a>.
-
-<p>
-Example:
-<blockquote>
-<pre>
-#   allow only strongest RSA ciphers
-SSLCipherSuite RSA:!EXP:!NULL:+HIGH:+MEDIUM:-LOW
-</pre>
-</blockquote>
-
-<p>
-<float name="table2" caption="Table 2: Particular SSL Ciphers">
-<table border="0" cellspacing="0" cellpadding="2" width=598>
-<tr id=D><td><b>Cipher-Tag</b></td> <td><b>Protocol</b></td> <td><b>Key Ex.</b></td> <td><b>Auth.</b></td> <td><b>Enc.</b></td> <td><b>MAC</b></td> <td><b>Type</b></td> </tr>
-
-<tr id=H><td colspan=7><em>RSA Ciphers:</em></td></tr>
-<tr id=D><td><code>DES-CBC3-SHA</code></td> <td>SSLv3</td> <td>RSA</td> <td>RSA</td> <td>3DES(168)</td> <td>SHA1</td> <td>&nbsp;</td> </tr>
-<tr id=H><td><code>DES-CBC3-MD5</code></td> <td>SSLv2</td> <td>RSA</td> <td>RSA</td> <td>3DES(168)</td> <td>MD5</td> <td>&nbsp; </td> </tr>
-<tr id=D><td><code>IDEA-CBC-SHA</code></td> <td>SSLv3</td> <td>RSA</td> <td>RSA</td> <td>IDEA(128)</td> <td>SHA1</td> <td>&nbsp;</td> </tr>
-<tr id=H><td><code>RC4-SHA</code></td> <td>SSLv3</td> <td>RSA</td> <td>RSA</td> <td>RC4(128)</td> <td>SHA1</td> <td>&nbsp;</td> </tr>
-<tr id=D><td><code>RC4-MD5</code></td> <td>SSLv3</td> <td>RSA</td> <td>RSA</td> <td>RC4(128)</td> <td>MD5</td> <td>&nbsp; </td> </tr>
-<tr id=H><td><code>IDEA-CBC-MD5</code></td> <td>SSLv2</td> <td>RSA</td> <td>RSA</td> <td>IDEA(128)</td> <td>MD5</td> <td>&nbsp; </td> </tr>
-<tr id=D><td><code>RC2-CBC-MD5</code></td> <td>SSLv2</td> <td>RSA</td> <td>RSA</td> <td>RC2(128)</td> <td>MD5</td> <td>&nbsp; </td> </tr>
-<tr id=H><td><code>RC4-MD5</code></td> <td>SSLv2</td> <td>RSA</td> <td>RSA</td> <td>RC4(128)</td> <td>MD5</td> <td>&nbsp; </td> </tr>
-<tr id=D><td><code>DES-CBC-SHA</code></td> <td>SSLv3</td> <td>RSA</td> <td>RSA</td> <td>DES(56)</td> <td>SHA1</td> <td>&nbsp;</td> </tr>
-<tr id=H><td><code>RC4-64-MD5</code></td> <td>SSLv2</td> <td>RSA</td> <td>RSA</td> <td>RC4(64)</td> <td>MD5</td> <td>&nbsp; </td> </tr>
-<tr id=D><td><code>DES-CBC-MD5</code></td> <td>SSLv2</td> <td>RSA</td> <td>RSA</td> <td>DES(56)</td> <td>MD5</td> <td>&nbsp; </td> </tr>
-<tr id=H><td><code>EXP-DES-CBC-SHA</code></td> <td>SSLv3</td> <td>RSA(512)</td> <td>RSA</td> <td>DES(40)</td> <td>SHA1</td> <td> export</td> </tr>
-<tr id=D><td><code>EXP-RC2-CBC-MD5</code></td> <td>SSLv3</td> <td>RSA(512)</td> <td>RSA</td> <td>RC2(40)</td> <td>MD5</td> <td>  export</td> </tr>
-<tr id=H><td><code>EXP-RC4-MD5</code></td> <td>SSLv3</td> <td>RSA(512)</td> <td>RSA</td> <td>RC4(40)</td> <td>MD5</td> <td>  export</td> </tr>
-<tr id=D><td><code>EXP-RC2-CBC-MD5</code></td> <td>SSLv2</td> <td>RSA(512)</td> <td>RSA</td> <td>RC2(40)</td> <td>MD5</td> <td>  export</td> </tr>
-<tr id=H><td><code>EXP-RC4-MD5</code></td> <td>SSLv2</td> <td>RSA(512)</td> <td>RSA</td> <td>RC4(40)</td> <td>MD5</td> <td>  export</td> </tr>
-<tr id=D><td><code>NULL-SHA</code></td> <td>SSLv3</td> <td>RSA</td> <td>RSA</td> <td>None</td> <td>SHA1</td> <td>&nbsp;</td> </tr>
-<tr id=H><td><code>NULL-MD5</code></td> <td>SSLv3</td> <td>RSA</td> <td>RSA</td> <td>None</td> <td>MD5</td> <td>&nbsp; </td> </tr>
-
-<tr id=D><td colspan=7><em>Diffie-Hellman Ciphers:</em></td></tr>
-<tr id=H><td><code>ADH-DES-CBC3-SHA</code></td> <td>SSLv3</td> <td>DH</td> <td>None</td> <td>3DES(168)</td> <td>SHA1</td> <td>&nbsp;</td> </tr>
-<tr id=D><td><code>ADH-DES-CBC-SHA</code></td> <td>SSLv3</td> <td>DH</td> <td>None</td> <td>DES(56)</td> <td>SHA1</td> <td>&nbsp;</td> </tr>
-<tr id=H><td><code>ADH-RC4-MD5</code></td> <td>SSLv3</td> <td>DH</td> <td>None</td> <td>RC4(128)</td> <td>MD5</td> <td>&nbsp; </td> </tr>
-<tr id=D><td><code>EDH-RSA-DES-CBC3-SHA</code></td> <td>SSLv3</td> <td>DH</td> <td>RSA</td> <td>3DES(168)</td> <td>SHA1</td> <td>&nbsp;</td> </tr>
-<tr id=H><td><code>EDH-DSS-DES-CBC3-SHA</code></td> <td>SSLv3</td> <td>DH</td> <td>DSS</td> <td>3DES(168)</td> <td>SHA1</td> <td>&nbsp;</td> </tr>
-<tr id=D><td><code>EDH-RSA-DES-CBC-SHA</code></td> <td>SSLv3</td> <td>DH</td> <td>RSA</td> <td>DES(56)</td> <td>SHA1</td> <td>&nbsp;</td> </tr>
-<tr id=H><td><code>EDH-DSS-DES-CBC-SHA</code></td> <td>SSLv3</td> <td>DH</td> <td>DSS</td> <td>DES(56)</td> <td>SHA1</td> <td>&nbsp;</td> </tr>
-<tr id=D><td><code>EXP-EDH-RSA-DES-CBC-SHA</code></td> <td>SSLv3</td> <td>DH(512)</td> <td>RSA</td> <td>DES(40)</td> <td>SHA1</td> <td> export</td> </tr>
-<tr id=H><td><code>EXP-EDH-DSS-DES-CBC-SHA</code></td> <td>SSLv3</td> <td>DH(512)</td> <td>DSS</td> <td>DES(40)</td> <td>SHA1</td> <td> export</td> </tr>
-<tr id=D><td><code>EXP-ADH-DES-CBC-SHA</code></td> <td>SSLv3</td> <td>DH(512)</td> <td>None</td> <td>DES(40)</td> <td>SHA1</td> <td> export</td> </tr>
-<tr id=H><td><code>EXP-ADH-RC4-MD5</code></td> <td>SSLv3</td> <td>DH(512)</td> <td>None</td> <td>RC4(40)</td> <td>MD5</td> <td>  export</td> </tr>
-</table>
-</float>
-
-
-<!-- SSLCertificateFile --------------------------------------------->
-
-<p>
-<br>
-<a name="SSLCertificateFile"></a>
-<h2>SSLCertificateFile</h2>
-
-<directive
-    name="SSLCertificateFile"
-    description="Server PEM-encoded X.509 Certificate file"
-    syntax="<code>SSLCertificateFile</code> <em>filename</em>"
-    default="<em>None</em>"
-    context="server config, virtual host"
-    override="<em>Not applicable</em>"
-    compat="mod_ssl 2.0"
->
-
-<p>
-This directive points to the PEM-encoded Certificate file for the server and
-optionally also to the corresponding RSA or DSA Private Key file for it
-(contained in the same file). If the contained Private Key is encrypted the
-Pass Phrase dialog is forced at startup time. This directive can be used up to
-two times (referencing different filenames) when both a RSA and a DSA based
-server certificate is used in parallel.
-
-<p>
-Example:
-<blockquote>
-<pre>
-SSLCertificateFile /usr/local/apache/conf/ssl.crt/server.crt
-</pre>
-</blockquote>
-
-
-<!-- SSLCertificateKeyFile ------------------------------------------>
-
-<p>
-<br>
-<a name="SSLCertificateKeyFile"></a>
-<h2>SSLCertificateKeyFile</h2>
-
-<directive
-    name="SSLCertificateKeyFile"
-    description="Server PEM-encoded Private Key file"
-    syntax="<code>SSLCertificateKeyFile</code> <em>filename</em>"
-    default="<em>None</em>"
-    context="server config, virtual host"
-    override="<em>Not applicable</em>"
-    compat="mod_ssl 2.0"
->
-
-<p>
-This directive points to the PEM-encoded Private Key file for the server. If
-the Private Key is not combined with the Certificate in the
-<code>SSLCertificateFile</code>, use this additional directive to point to the
-file with the stand-alone Private Key.  When <code>SSLCertificateFile</code>
-is used and the file contains both the Certificate and the Private Key this
-directive need not be used.  But we strongly discourage this practice.
-Instead we recommend you to separate the Certificate and the Private Key.  If
-the contained Private Key is encrypted, the Pass Phrase dialog is forced at
-startup time.  This directive can be used up to two times (referencing
-different filenames) when both a RSA and a DSA based private key is used in
-parallel.
-
-<p>
-Example:
-<blockquote>
-<pre>
-SSLCertificateKeyFile /usr/local/apache/conf/ssl.key/server.key
-</pre>
-</blockquote>
-
-
-<!-- SSLCertificateChainFile ---------------------------------------->
-
-<p>
-<br>
-<a name="SSLCertificateChainFile"></a>
-<h2>SSLCertificateChainFile</h2>
-
-<directive
-    name="SSLCertificateChainFile"
-    description="File of PEM-encoded Server CA Certificates"
-    syntax="<code>SSLCertificateChainFile</code> <em>filename</em>"
-    default="<em>None</em>"
-    context="server config, virtual host"
-    override="<em>Not applicable</em>"
-    compat="mod_ssl 2.3.6"
->
-
-<p>
-This directive sets the optional <em>all-in-one</em> file where you can
-assemble the certificates of Certification Authorities (CA) which form the
-certificate chain of the server certificate. This starts with the issuing CA
-certificate of of the server certificate and can range up to the root CA
-certificate. Such a file is simply the concatenation of the various
-PEM-encoded CA Certificate files, usually in certificate chain order. 
-
-<p>
-This should be used alternatively and/or additionally to <a
-href="#SSLCACertificatePath">SSLCACertificatePath</a> for explicitly
-constructing the server certificate chain which is sent to the browser in
-addition to the server certificate. It is especially useful to avoid conflicts
-with CA certificates when using client authentication. Because although
-placing a CA certificate of the server certificate chain into <a
-href="#SSLCACertificatePath">SSLCACertificatePath</a> has the same effect for
-the certificate chain construction, it has the side-effect that client
-certificates issued by this same CA certificate are also accepted on client
-authentication. That's usually not one expect.
-
-<p>
-But be careful: Providing the certificate chain works only if you are using a
-<i>single</i> (either RSA <i>or</i> DSA) based server certificate. If you are
-using a coupled RSA+DSA certificate pair, this will work only if actually both
-certificates use the <i>same</i> certificate chain.  Else the browsers will be
-confused in this situation.
-
-<p>
-Example:
-<blockquote>
-<pre>
-SSLCertificateChainFile /usr/local/apache/conf/ssl.crt/ca.crt
-</pre>
-</blockquote>
-
-
-<!-- SSLCACertificatePath ------------------------------------------->
-
-<p>
-<br>
-<a name="SSLCACertificatePath"></a>
-<h2>SSLCACertificatePath</h2>
-
-<directive
-    name="SSLCACertificatePath"
-    description="Directory of PEM-encoded CA Certificates for Client Auth."
-    syntax="<code>SSLCACertificatePath</code> <em>directory</em>"
-    default="<em>None</em>"
-    context="server config, virtual host"
-    override="<em>Not applicable</em>"
-    compat="mod_ssl 2.0"
->
-
-<p>
-This directive sets the directory where you keep the Certificates of
-Certification Authorities (CAs) whose clients you deal with. These are used to
-verify the client certificate on Client Authentication.
-
-<p>
-The files in this directory have to be PEM-encoded and are accessed through
-hash filenames. So usually you can't just place the Certificate files
-there: you also have to create symbolic links named
-<i>hash-value</i><tt>.N</tt>.  And you should always make sure this directory
-contains the appropriate symbolic links. Use the <code>Makefile</code> which
-comes with mod_ssl to accomplish this task.
-
-<p>
-Example:
-<blockquote>
-<pre>
-SSLCACertificatePath /usr/local/apache/conf/ssl.crt/
-</pre>
-</blockquote>
-
-
-<!-- SSLCACertificateFile ------------------------------------------->
-
-<p>
-<br>
-<a name="SSLCACertificateFile"></a>
-<h2>SSLCACertificateFile</h2>
-
-<directive
-    name="SSLCACertificateFile"
-    description="File of concatenated PEM-encoded CA Certificates for Client Auth."
-    syntax="<code>SSLCACertificateFile</code> <em>filename</em>"
-    default="<em>None</em>"
-    context="server config, virtual host"
-    override="<em>Not applicable</em>"
-    compat="mod_ssl 2.0"
->
-
-<p>
-This directive sets the <em>all-in-one</em> file where you can assemble the
-Certificates of Certification Authorities (CA) whose <em>clients</em> you deal
-with.  These are used for Client Authentication. Such a file is simply the
-concatenation of the various PEM-encoded Certificate files, in order of
-preference. This can be used alternatively and/or additionally to <a
-href="#SSLCACertificatePath">SSLCACertificatePath</a>.
-
-<p>
-Example:
-<blockquote>
-<pre>
-SSLCACertificateFile /usr/local/apache/conf/ssl.crt/ca-bundle-client.crt
-</pre>
-</blockquote>
-
-
-<!-- SSLCARevocationPath -------------------------------------------->
-
-<p>
-<br>
-<a name="SSLCARevocationPath"></a>
-<h2>SSLCARevocationPath</h2>
-
-<directive
-    name="SSLCARevocationPath"
-    description="Directory of PEM-encoded CA CRLs for Client Auth."
-    syntax="<code>SSLCARevocationPath</code> <em>directory</em>"
-    default="<em>None</em>"
-    context="server config, virtual host"
-    override="<em>Not applicable</em>"
-    compat="mod_ssl 2.3"
->
-
-<p>
-This directive sets the directory where you keep the Certificate Revocation
-Lists (CRL) of Certification Authorities (CAs) whose clients you deal with.
-These are used to revoke the client certificate on Client Authentication.
-
-<p>
-The files in this directory have to be PEM-encoded and are accessed through
-hash filenames. So usually you have not only to place the CRL files there.
-Additionally you have to create symbolic links named
-<i>hash-value</i><tt>.rN</tt>.  And you should always make sure this directory
-contains the appropriate symbolic links. Use the <code>Makefile</code> which
-comes with mod_ssl to accomplish this task.
-
-<p>
-Example:
-<blockquote>
-<pre>
-SSLCARevocationPath /usr/local/apache/conf/ssl.crl/
-</pre>
-</blockquote>
-
-
-<!-- SSLCARevocationFile -------------------------------------------->
-
-<p>
-<br>
-<a name="SSLCARevocationFile"></a>
-<h2>SSLCARevocationFile</h2>
-
-<directive
-    name="SSLCARevocationFile"
-    description="File of concatenated PEM-encoded CA CRLs for Client Auth."
-    syntax="<code>SSLCARevocationFile</code> <em>filename</em>"
-    default="<em>None</em>"
-    context="server config, virtual host"
-    override="<em>Not applicable</em>"
-    compat="mod_ssl 2.3"
->
-
-<p>
-This directive sets the <em>all-in-one</em> file where you can assemble the
-Certificate Revocation Lists (CRL) of Certification Authorities (CA) whose
-<em>clients</em> you deal with.  These are used for Client Authentication.
-Such a file is simply the concatenation of the various PEM-encoded CRL
-files, in order of preference. This can be used alternatively and/or
-additionally to <a href="#SSLCARevocationPath">SSLCARevocationPath</a>.
-
-<p>
-Example:
-<blockquote>
-<pre>
-SSLCARevocationFile /usr/local/apache/conf/ssl.crl/ca-bundle-client.crl
-</pre>
-</blockquote>
-
-
-<!-- SSLVerifyClient ------------------------------------------------->
-
-<p>
-<br>
-<a name="SSLVerifyClient"></a>
-<h2>SSLVerifyClient</h2>
-
-<directive
-    name="SSLVerifyClient"
-    description="Type of Client Certificate verification"
-    syntax="<code>SSLVerifyClient</code> <em>level</em>"
-    default="<code>SSLVerifyClient none</code>"
-    context="server config, virtual host, directory, .htaccess"
-    override="AuthConfig"
-    compat="mod_ssl 2.0"
->
-
-<p>
-This directive sets the Certificate verification level for the Client
-Authentication.  Notice that this directive can be used both in per-server and
-per-directory context. In per-server context it applies to the client
-authentication process used in the standard SSL handshake when a connection is
-established. In per-directory context it forces a SSL renegotation with the
-reconfigured client verification level after the HTTP request was read but
-before the HTTP response is sent.
-
-<p>
-The following levels are available for <em>level</em>:
-
-<ul>
-<li><strong>none</strong>:
-     no client Certificate is required at all
-<li><strong>optional</strong>:
-     the client <em>may</em> present a valid Certificate
-<li><strong>require</strong>:
-     the client <em>has to</em> present a valid Certificate
-<li><strong>optional_no_ca</strong>:
-     the client may present a valid Certificate<br> 
-     but it need not to be (successfully) verifiable.
-</ul>
-
-In practice only levels <strong>none</strong> and <strong>require</strong> are
-really interesting, because level <strong>optional</strong> doesn't work with
-all browsers and level <strong>optional_no_ca</strong> is actually against the
-idea of authentication (but can be used to establish SSL test pages, etc.)
-
-<p>
-Example:
-<blockquote>
-<pre>
-SSLVerifyClient require
-</pre>
-</blockquote>
-
-
-<!-- SSLVerifyDepth ------------------------------------------------->
-
-<p>
-<br>
-<a name="SSLVerifyDepth"></a>
-<h2>SSLVerifyDepth</h2>
-
-<directive
-    name="SSLVerifyDepth"
-    description="Maximum depth of CA Certificates in Client Certificate verification"
-    syntax="<code>SSLVerifyDepth</code> <em>number</em>"
-    default="<code>SSLVerifyDepth 1</code>"
-    context="server config, virtual host, directory, .htaccess"
-    override="AuthConfig"
-    compat="mod_ssl 2.0"
->
-
-<p> 
-This directive sets how deeply mod_ssl should verify before deciding that the
-clients don't have a valid certificate.  Notice that this directive can be
-used both in per-server and per-directory context. In per-server context it
-applies to the client authentication process used in the standard SSL
-handshake when a connection is established. In per-directory context it forces
-a SSL renegotation with the reconfigured client verification depth after the
-HTTP request was read but before the HTTP response is sent.
-
-<p>
-The depth actually is the maximum number of intermediate certificate issuers,
-i.e. the number of CA certificates which are max allowed to be followed while
-verifying the client certificate. A depth of 0 means that self-signed client
-certificates are accepted only, the default depth of 1 means the client
-certificate can be self-signed or has to be signed by a CA which is directly
-known to the server (i.e. the CA's certificate is under
-<code>SSLCACertificatePath</code>), etc.
-
-<p>
-Example:
-<blockquote>
-<pre>
-SSLVerifyDepth 10
-</pre>
-</blockquote>
-
-
-<!-- SSLLog --------------------------------------------------------->
-
-<p>
-<br>
-<a name="SSLLog"></a>
-<h2>SSLLog</h2>
-
-<directive
-    name="SSLLog"
-    description="Where to write the dedicated SSL engine logfile"
-    syntax="<code>SSLLog</code> <em>filename</em>"
-    default="<em>None</em>"
-    context="server config, virtual host"
-    override="<em>Not applicable</em>"
-    compat="mod_ssl 2.1"
->
-
-<p>
-This directive sets the name of the dedicated SSL protocol engine logfile.
-Error type messages are additionally duplicated to the general Apache error
-log file (directive <code>ErrorLog</code>). Put this somewhere where it cannot
-be used for symlink attacks on a real server (i.e. somewhere where only root
-can write). If the <em>filename</em> does not begin with a slash
-('<code>/</code>') then it is assumed to be relative to the <em>Server
-Root</em>.  If <em>filename</em> begins with a bar ('<code>|</code>') then the
-following string is assumed to be a path to an executable program to which a
-reliable pipe can be established. The directive should occur only once per
-virtual server config.  
-
-<p>
-Example:
-<blockquote>
-<pre>
-SSLLog /usr/local/apache/logs/ssl_engine_log
-</pre>
-</blockquote>
-
-
-<!-- SSLLogLevel ---------------------------------------------------->
-
-<p>
-<br>
-<a name="SSLLogLevel"></a>
-<h2>SSLLogLevel</h2>
-
-<directive
-    name="SSLLogLevel"
-    description="Logging level for the dedicated SSL engine logfile"
-    syntax="<code>SSLLogLevel</code> <em>level</em>"
-    default="<code>SSLLogLevel none</code>"
-    context="server config, virtual host"
-    override="<em>Not applicable</em>"
-    compat="mod_ssl 2.1"
->
-
-<p>
-This directive sets the verbosity degree of the dedicated SSL protocol engine
-logfile. The <em>level</em> is one of the following (in ascending order where
-higher levels include lower levels):
-
-<ul>
-<li><code>none</code><br>
-    no dedicated SSL logging is done, but messages of level
-    ``<code>error</code>'' are still written to the general Apache error
-    logfile.
-<p>
-<li><code>error</code><br>
-    log messages of error type only, i.e. messages which show fatal situations
-    (processing is stopped).  Those messages are also duplicated to the
-    general Apache error logfile.
-<p>
-<li><code>warn</code><br>
-    log also warning messages, i.e. messages which show non-fatal problems
-    (processing is continued).
-<p>
-<li><code>info</code><br>
-    log also informational messages, i.e.  messages which show major
-    processing steps.
-<p>
-<li><code>trace</code><br>
-    log also trace messages, i.e.  messages which show minor processing steps.
-<p>
-<li><code>debug</code><br>
-    log also debugging messages, i.e.  messages which show development and
-    low-level I/O information.
-</ul>
-
-<p>
-Example:
-<blockquote>
-<pre>
-SSLLogLevel warn
-</pre>
-</blockquote>
-
-
-<!-- SSLOptions ----------------------------------------------------->
-
-<p>
-<br>
-<a name="SSLOptions"></a>
-<h2>SSLOptions</h2>
-
-<directive
-    name="SSLOptions"
-    description="Configure various SSL engine run-time options"
-    syntax="<code>SSLOptions</code> [+-]<em>option</em> ..."
-    default="<em>None</em>"
-    context="server config, virtual host, directory, .htaccess"
-    override="Options"
-    compat="mod_ssl 2.1"
->
-
-<p>
-This directive can be used to control various run-time options on a
-per-directory basis.  Normally, if multiple <code>SSLOptions</code> could
-apply to a directory, then the most specific one is taken completely; the
-options are not merged. However if <em>all</em> the options on the
-<code>SSLOptions</code> directive are preceded by a plus (<code>+</code>) or
-minus (<code>-</code>) symbol, the options are merged. Any options preceded by
-a <code>+</code> are added to the options currently in force, and any options
-preceded by a <code>-</code> are removed from the options currently in force.
-
-<p>
-The available <em>option</em>s are:
-
-<ul>
-<li><code>StdEnvVars</code>
-    <p>
-    When this option is enabled, the standard set of SSL related CGI/SSI
-    environment variables are created. This per default is disabled for
-    performance reasons, because the information extraction step is a
-    rather expensive operation. So one usually enables this option for
-    CGI and SSI requests only.
-<p>
-<li><code>CompatEnvVars</code>
-    <p>
-    When this option is enabled, additional CGI/SSI environment variables are
-    created for backward compatibility to other Apache SSL solutions.  Look in
-    the <a href="ssl_compat.html">Compatibility</a> chapter for details 
-    on the particular variables generated.
-<p>
-<li><code>ExportCertData</code>
-    <p>
-    When this option is enabled, additional CGI/SSI environment variables are
-    created: <code>SSL_SERVER_CERT</code>, <code>SSL_CLIENT_CERT</code> and
-    <code>SSL_CLIENT_CERT_CHAIN</code><i>n</i> (with <i>n</i> = 0,1,2,..).
-    These contain the PEM-encoded X.509 Certificates of server and client for
-    the current HTTPS connection and can be used by CGI scripts for deeper
-    Certificate checking. Additionally all other certificates of the client
-    certificate chain are provided, too.  This bloats up the environment a
-    little bit which is why you have to use this option to enable it on
-    demand.
-<p>
-<li><code>FakeBasicAuth</code>
-    <p>
-    When this option is enabled, the Subject Distinguished Name (DN) of the
-    Client X509 Certificate is translated into a HTTP Basic Authorization
-    username.  This means that the standard Apache authentication methods can
-    be used for access control. The user name is just the Subject of the
-    Client's X509 Certificate (can be determined by running OpenSSL's
-    <code>openssl x509</code> command: <code>openssl x509 -noout -subject -in
-    </code><em>certificate</em><code>.crt</code>).  Note that no password is
-    obtained from the user. Every entry in the user file needs this password:
-    ``<code>xxj31ZMTZzkVA</code>'', which is the DES-encrypted version of the
-    word `<code>password</code>''. Those who live under MD5-based encryption
-    (for instance under FreeBSD or BSD/OS, etc.) should use the following MD5
-    hash of the same word: ``<code>$1$OXLyS...$Owx8s2/m9/gfkcRVXzgoE/</code>''.
-<p>
-<li><code>StrictRequire</code>
-    <p>
-    This <i>forces</i> forbidden access when <code>SSLRequireSSL</code> or
-    <code>SSLRequire</code> successfully decided that access should be
-    forbidden. Usually the default is that in the case where a ``<code>Satisfy
-    any</code>'' directive is used, and other access restrictions are passed,
-    denial of access due to <code>SSLRequireSSL</code> or
-    <code>SSLRequire</code> is overridden (because that's how the Apache
-    <tt>Satisfy</tt> mechanism should work.) But for strict access restriction
-    you can use <code>SSLRequireSSL</code> and/or <code>SSLRequire</code> in
-    combination with an ``<code>SSLOptions +StrictRequire</code>''. Then an
-    additional ``<code>Satisfy Any</code>'' has no chance once mod_ssl has
-    decided to deny access.
-<p>
-<li><code>OptRenegotiate</code>
-    <p>
-    This enables optimized SSL connection renegotiation handling when SSL
-    directives are used in per-directory context. By default a strict
-    scheme is enabled where <i>every</i> per-directory reconfiguration of
-    SSL parameters causes a <i>full</i> SSL renegotiation handshake. When this
-    option is used mod_ssl tries to avoid unnecessary handshakes by doing more
-    granular (but still safe) parameter checks. Nevertheless these granular
-    checks sometimes maybe not what the user expects, so enable this on a
-    per-directory basis only, please.
-</ul>
-
-<p>
-Example:
-<blockquote>
-<pre>
-SSLOptions +FakeBasicAuth -StrictRequire
-&lt;Files ~ "\.(cgi|shtml)$"&gt;
-    SSLOptions +StdEnvVars +CompatEnvVars -ExportCertData
-&lt;Files&gt;
-</pre>
-</blockquote>
-
-
-<!-- SSLRequireSSL -------------------------------------------------->
-
-<p>
-<br>
-<a name="SSLRequireSSL"></a>
-<h2>SSLRequireSSL</h2>
-
-<directive
-    name="SSLRequireSSL"
-    description="Deny access when SSL is not used for the HTTP request"
-    syntax="<code>SSLRequireSSL</code>"
-    default="<em>None</em>"
-    context="directory, .htaccess"
-    override="AuthConfig"
-    compat="mod_ssl 2.0"
->
-
-<p>
-This directive forbids access unless HTTP over SSL (i.e. HTTPS) is enabled for
-the current connection.  This is very handy inside the SSL-enabled virtual
-host or directories for defending against configuration errors that expose
-stuff that should be protected. When this directive is present all requests
-are denied which are not using SSL.
-
-<p>
-Example:
-<blockquote>
-<pre>
-SSLRequireSSL
-</pre>
-</blockquote>
-
-
-<!-- SSLRequire ----------------------------------------------------->
-
-<p>
-<br>
-<a name="SSLRequire"></a>
-<h2>SSLRequire</h2>
-
-<directive
-    name="SSLRequire"
-    description="Allow access only when an arbitrarily complex boolean expression is true"
-    syntax="<code>SSLRequire</code> <em>expression</em>"
-    default="<em>None</em>"
-    context="directory, .htaccess"
-    override="AuthConfig"
-    compat="mod_ssl 2.1"
->
-
-<p>
-This directive specifies a general access requirement which has to be
-fulfilled in order to allow access. It's a very powerful directive because the
-requirement specification is an arbitrarily complex boolean expression
-containing any number of access checks.
-
-<p>
-The <em>expression</em> must match the following syntax (given as a BNF
-grammar notation):
-
-<blockquote>
-<pre>
-expr     ::= "<b>true</b>" | "<b>false</b>" 
-           | "<b>!</b>" expr
-           | expr "<b>&&</b>" expr
-           | expr "<b>||</b>" expr
-           | "<b>(</b>" expr "<b>)</b>"
-           | comp
-
-comp     ::= word "<b>==</b>" word | word "<b>eq</b>" word
-           | word "<b>!=</b>" word | word "<b>ne</b>" word
-           | word "<b>&lt;</b>"  word | word "<b>lt</b>" word
-           | word "<b>&lt;=</b>" word | word "<b>le</b>" word
-           | word "<b>&gt;</b>"  word | word "<b>gt</b>" word
-           | word "<b>&gt;=</b>" word | word "<b>ge</b>" word
-           | word "<b>in</b>" "<b>{</b>" wordlist "<b>}</b>"
-           | word "<b>=~</b>" regex
-           | word "<b>!~</b>" regex
-
-wordlist ::= word 
-           | wordlist "<b>,</b>" word
-
-word     ::= digit
-           | cstring
-           | variable
-           | function
-
-digit    ::= [0-9]+
-cstring  ::= "..."
-variable ::= "<b>%{</b>" varname "<b>}</b>" 
-function ::= funcname "<b>(</b>" funcargs "<b>)</b>"
-</pre>
-</blockquote>
-
-while for <code>varname</code> any variable from <a href="#table3">Table 3</a>
-can be used.  Finally for <code>funcname</code> the following functions
-are available:
-
-<ul>
-<li><code>file(</code><em>filename</em><code>)</code>
-    <p>
-    This function takes one string argument and expands to the contents of the
-    file. This is especially useful for matching this contents against a
-    regular expression, etc.
-</ul>
-
-Notice that <em>expression</em> is first parsed into an internal machine
-representation and then evaluated in a second step. Actually, in Global and
-Per-Server Class context <em>expression</em> is parsed at startup time and
-at runtime only the machine representation is executed. For Per-Directory
-context this is different: here <em>expression</em> has to be parsed and
-immediately executed for every request.
-
-<p>
-Example:
-<blockquote>
-<pre>
-SSLRequire (    %{SSL_CIPHER} !~ m/^(EXP|NULL)-/ \\
-            and %{SSL_CLIENT_S_DN_O} eq "Snake Oil, Ltd." \\
-            and %{SSL_CLIENT_S_DN_OU} in {"Staff", "CA", "Dev"} \\
-            and %{TIME_WDAY} >= 1 and %{TIME_WDAY} <= 5 \\
-            and %{TIME_HOUR} >= 8 and %{TIME_HOUR} <= 20       ) \\
-           or %{REMOTE_ADDR} =~ m/^192\.76\.162\.[0-9]+$/
-</pre>
-</blockquote>
-
-<float name="table3" caption="Table 3: Available Variables for SSLRequire">
-<table><tr><td>
-<em>Standard CGI/1.0 and Apache variables:</em>
-<pre>
-HTTP_USER_AGENT        PATH_INFO             AUTH_TYPE       
-HTTP_REFERER           QUERY_STRING          SERVER_SOFTWARE  
-HTTP_COOKIE            REMOTE_HOST           API_VERSION      
-HTTP_FORWARDED         REMOTE_IDENT          TIME_YEAR       
-HTTP_HOST              IS_SUBREQ             TIME_MON        
-HTTP_PROXY_CONNECTION  DOCUMENT_ROOT         TIME_DAY        
-HTTP_ACCEPT            SERVER_ADMIN          TIME_HOUR       
-HTTP:headername        SERVER_NAME           TIME_MIN        
-THE_REQUEST            SERVER_PORT           TIME_SEC        
-REQUEST_METHOD         SERVER_PROTOCOL       TIME_WDAY       
-REQUEST_SCHEME         REMOTE_ADDR           TIME            
-REQUEST_URI            REMOTE_USER           ENV:<b>variablename</b>
-REQUEST_FILENAME
-</pre> 
-
-<em>SSL-related variables:</em>
-<pre>
-HTTPS                  SSL_CLIENT_M_VERSION   SSL_SERVER_M_VERSION
-                       SSL_CLIENT_M_SERIAL    SSL_SERVER_M_SERIAL 
-SSL_PROTOCOL           SSL_CLIENT_V_START     SSL_SERVER_V_START  
-SSL_SESSION_ID         SSL_CLIENT_V_END       SSL_SERVER_V_END    
-SSL_CIPHER             SSL_CLIENT_S_DN        SSL_SERVER_S_DN     
-SSL_CIPHER_EXPORT      SSL_CLIENT_S_DN_C      SSL_SERVER_S_DN_C   
-SSL_CIPHER_ALGKEYSIZE  SSL_CLIENT_S_DN_ST     SSL_SERVER_S_DN_ST  
-SSL_CIPHER_USEKEYSIZE  SSL_CLIENT_S_DN_L      SSL_SERVER_S_DN_L   
-SSL_VERSION_LIBRARY    SSL_CLIENT_S_DN_O      SSL_SERVER_S_DN_O   
-SSL_VERSION_INTERFACE  SSL_CLIENT_S_DN_OU     SSL_SERVER_S_DN_OU  
-                       SSL_CLIENT_S_DN_CN     SSL_SERVER_S_DN_CN  
-                       SSL_CLIENT_S_DN_T      SSL_SERVER_S_DN_T  
-                       SSL_CLIENT_S_DN_I      SSL_SERVER_S_DN_I  
-                       SSL_CLIENT_S_DN_G      SSL_SERVER_S_DN_G  
-                       SSL_CLIENT_S_DN_S      SSL_SERVER_S_DN_S  
-                       SSL_CLIENT_S_DN_D      SSL_SERVER_S_DN_D  
-                       SSL_CLIENT_S_DN_UID    SSL_SERVER_S_DN_UID  
-                       SSL_CLIENT_S_DN_Email  SSL_SERVER_S_DN_Email
-                       SSL_CLIENT_I_DN        SSL_SERVER_I_DN       
-                       SSL_CLIENT_I_DN_C      SSL_SERVER_I_DN_C    
-                       SSL_CLIENT_I_DN_ST     SSL_SERVER_I_DN_ST   
-                       SSL_CLIENT_I_DN_L      SSL_SERVER_I_DN_L    
-                       SSL_CLIENT_I_DN_O      SSL_SERVER_I_DN_O    
-                       SSL_CLIENT_I_DN_OU     SSL_SERVER_I_DN_OU   
-                       SSL_CLIENT_I_DN_CN     SSL_SERVER_I_DN_CN   
-                       SSL_CLIENT_I_DN_T      SSL_SERVER_I_DN_T  
-                       SSL_CLIENT_I_DN_I      SSL_SERVER_I_DN_I  
-                       SSL_CLIENT_I_DN_G      SSL_SERVER_I_DN_G  
-                       SSL_CLIENT_I_DN_S      SSL_SERVER_I_DN_S  
-                       SSL_CLIENT_I_DN_D      SSL_SERVER_I_DN_D  
-                       SSL_CLIENT_I_DN_UID    SSL_SERVER_I_DN_UID  
-                       SSL_CLIENT_I_DN_Email  SSL_SERVER_I_DN_Email
-                       SSL_CLIENT_A_SIG       SSL_SERVER_A_SIG    
-                       SSL_CLIENT_A_KEY       SSL_SERVER_A_KEY    
-                       SSL_CLIENT_CERT        SSL_SERVER_CERT    
-                       SSL_CLIENT_CERT_CHAIN<b>n</b>
-                       SSL_CLIENT_VERIFY
-</pre>
-</td></tr></table>
-</float>
-
-<br>
-<br>
-<p>
-<h1>Additional Features</h1>
-
-<h2>Environment Variables</h2>
-
-This module provides a lot of SSL information as additional environment
-variables to the SSI and CGI namespace. The generated variables are listed in
-<a href="#table4">Table 4</a>. For backward compatibility the information can
-be made available under different names, too.  Look in the <a
-href="ssl_compat.html">Compatibility</a> chapter for details on the
-compatibility variables.
-
-<p>
-<float name="table4" caption="Table 4: SSI/CGI Environment Variables">
-<table border="0" cellspacing="0" cellpadding="2" width=598>
-<tr id=H>
- <td><b>Variable Name:</b></td> 
- <td><b>Value Type:</b></td> 
- <td><b>Description:</b></td>
-</tr>
-<tr id=D><td><code>HTTPS</code></td>                         <td>flag</td>      <td>HTTPS is being used.</td></tr>
-<tr id=H><td><code>SSL_PROTOCOL</code></td>                  <td>string</td>    <td>The SSL protocol version (SSLv2, SSLv3, TLSv1)</td></tr>
-<tr id=H><td><code>SSL_SESSION_ID</code></td>                <td>string</td>    <td>The hex-encoded SSL session id</td></tr>
-<tr id=D><td><code>SSL_CIPHER</code></td>                    <td>string</td>    <td>The cipher specification name</td></tr>
-<tr id=D><td><code>SSL_CIPHER_EXPORT</code></td>             <td>string</td>    <td><code>true</code> if cipher is an export cipher</td></tr>
-<tr id=H><td><code>SSL_CIPHER_USEKEYSIZE</code></td>         <td>number</td>    <td>Number of cipher bits (actually used)</td></tr>
-<tr id=D><td><code>SSL_CIPHER_ALGKEYSIZE</code></td>         <td>number</td>    <td>Number of cipher bits (possible)</td></tr>
-<tr id=H><td><code>SSL_VERSION_INTERFACE</code></td>         <td>string</td>    <td>The mod_ssl program version</td></tr>
-<tr id=D><td><code>SSL_VERSION_LIBRARY</code></td>           <td>string</td>    <td>The OpenSSL program version</td></tr>
-<tr id=H><td><code>SSL_CLIENT_M_VERSION</code></td>          <td>string</td>    <td>The version of the client certificate</td></tr>
-<tr id=D><td><code>SSL_CLIENT_M_SERIAL</code></td>           <td>string</td>    <td>The serial of the client certificate</td></tr>
-<tr id=H><td><code>SSL_CLIENT_S_DN</code></td>               <td>string</td>    <td>Subject DN in client's certificate</td></tr>
-<tr id=D><td><code>SSL_CLIENT_S_DN_</code><em>x509</em></td> <td>string</td>    <td>Component of client's Subject DN</td></tr>
-<tr id=H><td><code>SSL_CLIENT_I_DN</code></td>               <td>string</td>    <td>Issuer DN of client's certificate</td></tr>
-<tr id=D><td><code>SSL_CLIENT_I_DN_</code><em>x509</em></td> <td>string</td>    <td>Component of client's Issuer DN</td></tr>
-<tr id=H><td><code>SSL_CLIENT_V_START</code></td>            <td>string</td>    <td>Validity of client's certificate (start time)</td></tr>
-<tr id=D><td><code>SSL_CLIENT_V_END</code></td>              <td>string</td>    <td>Validity of client's certificate (end time)</td></tr>
-<tr id=H><td><code>SSL_CLIENT_A_SIG</code></td>              <td>string</td>    <td>Algorithm used for the signature of client's certificate</td></tr>
-<tr id=D><td><code>SSL_CLIENT_A_KEY</code></td>              <td>string</td>    <td>Algorithm used for the public key of client's certificate</td></tr>
-<tr id=H><td><code>SSL_CLIENT_CERT</code></td>               <td>string</td>    <td>PEM-encoded client certificate</td></tr>
-<tr id=D><td><code>SSL_CLIENT_CERT_CHAIN</code><i>n</i></td> <td>string</td>    <td>PEM-encoded certificates in client certificate chain</td></tr>
-<tr id=H><td><code>SSL_CLIENT_VERIFY</code></td>             <td>string</td>    <td><tt>NONE</tt>, <tt>SUCCESS</tt>, <tt>GENEROUS</tt> or <tt>FAILED:</tt><i>reason</i></td></tr>
-<tr id=D><td><code>SSL_SERVER_M_VERSION</code></td>          <td>string</td>    <td>The version of the server certificate</td></tr>
-<tr id=H><td><code>SSL_SERVER_M_SERIAL</code></td>           <td>string</td>    <td>The serial of the server certificate</td></tr>
-<tr id=D><td><code>SSL_SERVER_S_DN</code></td>               <td>string</td>    <td>Subject DN in server's certificate</td></tr>
-<tr id=H><td><code>SSL_SERVER_S_DN_</code><em>x509</em></td> <td>string</td>    <td>Component of server's Subject DN</td></tr>
-<tr id=D><td><code>SSL_SERVER_I_DN</code></td>               <td>string</td>    <td>Issuer DN of server's certificate</td></tr>
-<tr id=H><td><code>SSL_SERVER_I_DN_</code><em>x509</em></td> <td>string</td>    <td>Component of server's Issuer DN</td></tr>
-<tr id=D><td><code>SSL_SERVER_V_START</code></td>            <td>string</td>    <td>Validity of server's certificate (start time)</td></tr>
-<tr id=H><td><code>SSL_SERVER_V_END</code></td>              <td>string</td>    <td>Validity of server's certificate (end time)</td></tr>
-<tr id=D><td><code>SSL_SERVER_A_SIG</code></td>              <td>string</td>    <td>Algorithm used for the signature of server's certificate</td></tr>
-<tr id=H><td><code>SSL_SERVER_A_KEY</code></td>              <td>string</td>    <td>Algorithm used for the public key of server's certificate</td></tr>
-<tr id=D><td><code>SSL_SERVER_CERT</code></td>               <td>string</td>    <td>PEM-encoded server certificate</td></tr>
-</table>
-[ where <em>x509</em> is a component of a X.509 DN:
-  <code>C,ST,L,O,OU,CN,T,I,G,S,D,UID,Email</code> ]
-</float>
-
-
-<p>
-<br>
-<h2>Custom Log Formats</h2>
-
-When mod_ssl is built into Apache or at least loaded (under DSO situation)
-additional functions exist for the <a
-href="../mod_log_config.html#formats">Custom Log Format</a> of <a
-href="../mod_log_config.html">mod_log_config</a>.  First there is an additional
-``<code>%{</code><em>varname</em><code>}x</code>'' eXtension format function
-which can be used to expand any variables provided by any module, especially
-those provided by mod_ssl which can you find in <a href="#table4">Table 4</a>.
-
-<p>
-For backward compatibility there is additionally a special
-``<code>%{</code><em>name</em><code>}c</code>'' cryptography format function
-provided.  Information about this function is provided in the <a
-href="ssl_compat.html">Compatibility</a> chapter.
-
-<p>
-Example:
-<blockquote>
-<pre>
-CustomLog logs/ssl_request_log \\
-          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
-</pre>
-</blockquote>
-
diff --git a/docs/manual/ssl/ssl_template.head-chapter.gif b/docs/manual/ssl/ssl_template.head-chapter.gif
deleted file mode 100644
index 7d69c96..0000000
--- a/docs/manual/ssl/ssl_template.head-chapter.gif
+++ /dev/null
Binary files differ
diff --git a/docs/manual/ssl/ssl_template.head-num-1.gif b/docs/manual/ssl/ssl_template.head-num-1.gif
deleted file mode 100644
index b70504e..0000000
--- a/docs/manual/ssl/ssl_template.head-num-1.gif
+++ /dev/null
Binary files differ
diff --git a/docs/manual/ssl/ssl_template.head-num-2.gif b/docs/manual/ssl/ssl_template.head-num-2.gif
deleted file mode 100644
index 14aa9f0..0000000
--- a/docs/manual/ssl/ssl_template.head-num-2.gif
+++ /dev/null
Binary files differ
diff --git a/docs/manual/ssl/ssl_template.head-num-3.gif b/docs/manual/ssl/ssl_template.head-num-3.gif
deleted file mode 100644
index c55def0..0000000
--- a/docs/manual/ssl/ssl_template.head-num-3.gif
+++ /dev/null
Binary files differ
diff --git a/docs/manual/ssl/ssl_template.head-num-4.gif b/docs/manual/ssl/ssl_template.head-num-4.gif
deleted file mode 100644
index 3a590f5..0000000
--- a/docs/manual/ssl/ssl_template.head-num-4.gif
+++ /dev/null
Binary files differ
diff --git a/docs/manual/ssl/ssl_template.head-num-5.gif b/docs/manual/ssl/ssl_template.head-num-5.gif
deleted file mode 100644
index 6c74e38..0000000
--- a/docs/manual/ssl/ssl_template.head-num-5.gif
+++ /dev/null
Binary files differ
diff --git a/docs/manual/ssl/ssl_template.head-num-6.gif b/docs/manual/ssl/ssl_template.head-num-6.gif
deleted file mode 100644
index 95c4540..0000000
--- a/docs/manual/ssl/ssl_template.head-num-6.gif
+++ /dev/null
Binary files differ
diff --git a/docs/manual/ssl/ssl_template.head-num-7.gif b/docs/manual/ssl/ssl_template.head-num-7.gif
deleted file mode 100644
index 3e658ae..0000000
--- a/docs/manual/ssl/ssl_template.head-num-7.gif
+++ /dev/null
Binary files differ
diff --git a/docs/manual/ssl/ssl_template.imgdot-1x1-000000.gif b/docs/manual/ssl/ssl_template.imgdot-1x1-000000.gif
deleted file mode 100644
index 8dd81a9..0000000
--- a/docs/manual/ssl/ssl_template.imgdot-1x1-000000.gif
+++ /dev/null
Binary files differ
diff --git a/docs/manual/ssl/ssl_template.imgdot-1x1-transp.gif b/docs/manual/ssl/ssl_template.imgdot-1x1-transp.gif
deleted file mode 100644
index 5bfd67a..0000000
--- a/docs/manual/ssl/ssl_template.imgdot-1x1-transp.gif
+++ /dev/null
Binary files differ
diff --git a/docs/manual/ssl/ssl_template.inc b/docs/manual/ssl/ssl_template.inc
deleted file mode 100644
index f799d40..0000000
--- a/docs/manual/ssl/ssl_template.inc
+++ /dev/null
@@ -1,405 +0,0 @@
-##
-## ssl_template.inc -- mod_ssl User Manual: The Heart
-## Copyright (c) 1998-2001 Ralf S. Engelschall, All Rights Reserved. 
-##
-
-#use wml::std::page
-#use wml::des::space
-#use wml::des::rollover
-#use wml::des::typography
-#use wml::std::box
-
-<page 
-   title="mod_ssl: $(title)"
-   bgcolor="#ffffff"
->
-<head>\
-<protect>
-<!--
-  Copyright (c) 1998-2001 Ralf S. Engelschall. All rights reserved.
-
-  Redistribution and use in source and binary forms, with or without
-  modification, are permitted provided that the following conditions
-  are met:
-
-  1. Redistributions of source code must retain the above
-     copyright notice, this list of conditions and the following
-     disclaimer. 
- 
-  2. Redistributions in binary form must reproduce the above
-     copyright notice, this list of conditions and the following
-     disclaimer in the documentation and/or other materials
-     provided with the distribution.
- 
-  3. All advertising materials mentioning features or use of this
-     software must display the following acknowledgment: 
-     "This product includes software developed by 
-      Ralf S. Engelschall <rse@engelschall.com> for use in the
-      mod_ssl project (http://www.modssl.org/)."
- 
-  4. The name "mod_ssl" must not be used to endorse or promote
-     products derived from this software without prior written
-     permission.  
-
-  5. Redistributions of any form whatsoever must retain the
-     following acknowledgment:
-     "This product includes software developed by 
-      Ralf S. Engelschall <rse@engelschall.com> for use in the
-      mod_ssl project (http://www.modssl.org/)."
- 
-  THIS SOFTWARE IS PROVIDED BY RALF S. ENGELSCHALL ``AS IS'' AND ANY
-  EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-  PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL RALF S. ENGELSCHALL OR
-  HIS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
-  STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
-  OF THE POSSIBILITY OF SUCH DAMAGE.
--->
-</protect>\
-<style type="text/css"><!--
-A:link { 
-    text-decoration: none; 
-    color: #6666cc;
-}
-A:active {
-    text-decoration: none; 
-    color: #6666cc;
-}
-A:visited {
-    text-decoration: none; 
-    color: #6666cc;
-}
-\#sf {
-    font-family: arial,helvetica;
-    font-variant: normal;
-    font-style: normal;
-}
-H1 {
-    font-weight: bold;
-    font-size: 24pt;
-    line-height: 24pt;
-    font-family: arial,helvetica;
-    font-variant: normal;
-    font-style: normal;
-}
-H2 {
-    font-weight: bold;
-    font-size: 18pt;
-    line-height: 18pt;
-    font-family: arial,helvetica;
-    font-variant: normal;
-    font-style: normal;
-}
-H3 {
-    font-weight: bold;
-    font-size: 14pt;
-    line-height: 14pt;
-    font-family: arial,helvetica;
-    font-variant: normal;
-    font-style: normal;
-}
-H4 {
-    font-weight: bold;
-    font-size: 12pt;
-    line-height: 12pt;
-    font-family: arial,helvetica;
-    font-variant: normal;
-    font-style: normal;
-}
-\#H {
-# background-color: #e0e0e0;
-}
-\#D {
-    background-color: #f0f0f0;
-}
-\#faq {
-    font-weight: bold;
-    font-size: 16pt;
-    line-height: 16pt;
-    font-family: arial,helvetica;
-    font-variant: normal;
-    font-style: normal;
-}
-\#howto {
-    font-weight: bold;
-    font-size: 16pt;
-    line-height: 16pt;
-    font-family: arial,helvetica;
-    font-variant: normal;
-    font-style: normal;
-}
-\#term {
-    font-weight: bold;
-    font-size: 16pt;
-    line-height: 16pt;
-    font-family: arial,helvetica;
-    font-variant: normal;
-    font-style: normal;
-}
---></style>
-</head>
-
-<center>
-<table width=600 cellspacing=0 cellpadding=0 border=0>
-<tr>
-  <td>
-    <ifeq "$(tag)" "title" "" "
-      <imgdot height=1 width=600><br>
-      <table width=600 cellspacing=0 cellpadding=0>
-      <tr>
-        <td>
-
-        <table width=600>
-        <tr>
-            <td align=left valign=bottom>
-            <font face="Arial,Helvetica" size=+2><b>mod_ssl</b></font>
-            </td>
-            <td <ifeq "$(num)" "0" "align=left" "align=right">>
-              <ifeq "$(num)" "0" "
-                  <br>
-                  <img src="ssl_template.title-$(tag).gif" alt="$(title)">
-              " "
-              <img src="ssl_template.head-chapter.gif"    alt="Chapter"> \
-              <img src="ssl_template.head-num-$(num).gif" alt="$(num)">
-              ">
-            </td>
-        </tr>
-        </table>
-
-        </td>
-      </tr>
-      <tr>
-        <td>\
-          <imgdot color="#000000" width=600 height=2>\
-        </td>
-      </tr>
-      <tr>
-        <td>
-           <table width=600 border=0>
-           <tr>
-            <td valign=top align=left width=250>\
-              {#NAVBUT_TOP_PREV#}
-            </td>
-            <td valign=top align=right width=250>\
-              {#NAVBUT_TOP_NEXT#}
-            </td>
-           </tr>
-           </table>
-         </td>
-      </tr>
-      <tr>
-        <td>
-          <ifeq "$(num)" "0" "" "
-          <br>
-          <img src="ssl_template.title-$(tag).gif" alt="$(title)">
-          ">
-        </td>
-      </tr>
-      </table>
-     ">
-     {#BODY#}
-    <ifeq "$(tag)" "title" "" "
-      <p>
-      <br>
-      <table>
-      <tr>
-        <td>
-           <table width=600 border=0>
-           <tr>
-            <td valign=top align=left width=250>\
-              {#NAVBUT_BOT_PREV#}
-            </td>
-            <td valign=top align=right width=250>\
-              {#NAVBUT_BOT_NEXT#}
-            </td>
-           </tr>
-           </table>
-         </td>
-      </tr>
-      <tr>
-        <td>\
-          <imgdot color="#000000" width=600 height=2>\
-        </td>
-      </tr>
-      <tr>
-        <td>\
-        <table width=598>
-        <tr>
-        <td align=left>\
-        <font face="Arial,Helvetica"> 
-        <a href="http://www.modssl.org/">mod_ssl</a> 2.8, User Manual<br>
-        The Apache Interface to OpenSSL
-        </font>
-        </td>
-        <td align=right>\
-        <font face="Arial,Helvetica"> 
-        Copyright &copy; 1998-2001
-        <a href="http://www.engelschall.com/">Ralf S. Engelschall</a><br>
-        All Rights Reserved<br>
-        </font>
-        </td>
-        </tr>
-        </table>
-        </td>
-      </tr>
-      </table>
-      ">
-  </td>
-</tr>
-</table>
-</center>
-{#BODY#:
-
-<define-tag page_prev>
-<preserve name>
-<preserve url>
-<set-var %attributes>
-{#NAVBUT_TOP_PREV#:
-<rollover
-name="prev_top"
-src="ssl_template.navbut-prev-n.gif"
-oversrc="ssl_template.navbut-prev-s.gif" 
-href="<get-var url>" alt="previous page"
-><br><font color="#000000"><get-var name></font>
-:##}
-{#NAVBUT_BOT_PREV#:
-<rollover
-name="prev_bot"
-src="ssl_template.navbut-prev-n.gif"
-oversrc="ssl_template.navbut-prev-s.gif" 
-href="<get-var url>" alt="previous page"
-><br><font color="#000000"><get-var name></font>
-:##}
-<restore url>
-<restore name>
-</define-tag>
-
-<define-tag page_next>
-<preserve name>
-<preserve url>
-<set-var %attributes>
-{#NAVBUT_TOP_NEXT#:
-<rollover
-name="next_top"
-src="ssl_template.navbut-next-n.gif"
-oversrc="ssl_template.navbut-next-s.gif" 
-href="<get-var url>" alt="next page"
-><br><font color="#000000"><get-var name></font>
-:##}
-{#NAVBUT_BOT_NEXT#:
-<rollover
-name="next_bot"
-src="ssl_template.navbut-next-n.gif"
-oversrc="ssl_template.navbut-next-s.gif" 
-href="<get-var url>" alt="next page"
-><br><font color="#000000"><get-var name></font>
-:##}
-<restore url>
-<restore name>
-</define-tag>
-
-<define-tag float endtag=required>
-<preserve name>
-<preserve caption>
-<set-var %attributes>
-<center>
-<a name="<get-var name>"></a>
-<table width=600 cellspacing=0 cellpadding=1 border=0>
-<caption align=bottom id="sf"><get-var caption></caption>
-<tr><td bgcolor="#cccccc">
-<table width=598 cellpadding=5 cellspacing=0 border=0>
-<tr>\
-<td valign=top align=center bgcolor="#ffffff">\
-%body\
-</td>
-</tr></table>
-</td></tr></table>
-</center>
-<restore caption>
-<restore name>
-</define-tag>
-
-<define-tag directive>
-<preserve name>
-<preserve description>
-<preserve syntax>
-<preserve default>
-<preserve context>
-<preserve override>
-<preserve compat>
-<set-var %attributes>
-<box bdcolor="#cccccc" bdwidth=1 bdspace=5 bgcolor=white width=600>
-<table cellspacing=0 cellpadding=1 border=0>
-<tr><td>
-<font face="Arial,Helvetica"><b>Name:</b></font></a> </td><td> <b><get-var name></b></td></tr>
-<tr><td>
-<font face="Arial,Helvetica"><b>Description:</b></font></a> </td><td> <get-var description></td></tr>
-<tr><td><a
- href="../directive-dict.html#Syntax"
- rel="Help"
-><font face="Arial,Helvetica"><b>Syntax:</b></font></a> </td><td> <get-var syntax></td></tr>
-<tr><td><a
- href="../directive-dict.html#Default"
- rel="Help"
-><font face="Arial,Helvetica"><b>Default:</b></font></a> </td><td> <get-var default></td></tr>
-<tr><td><a
- href="../directive-dict.html#Context"
- rel="Help"
-><font face="Arial,Helvetica"><b>Context:</b></font></a> </td><td> <get-var context></td></tr>
-<tr><td><a
- href="../directive-dict.html#Override"
- rel="Help"
-><font face="Arial,Helvetica"><b>Override:</b></font></a> </td><td> <get-var override></td></tr>
-<tr><td><a
- href="../directive-dict.html#Status"
- rel="Help"
-><font face="Arial,Helvetica"><b>Status:</b></font></a> </td><td> Extension</td></tr>
-<tr><td><a
- href="../directive-dict.html#Module"
- rel="Help"
-><font face="Arial,Helvetica"><b>Module:</b></font></a> </td><td> mod_ssl</td></tr>
-<tr><td><a
- href="../directive-dict.html#Compatibility"
- rel="Help"
-><font face="Arial,Helvetica"><b>Compatibility:</b></font></a> </td><td> <get-var compat> </td></tr>
-</table>
-</box>
-<restore compat>
-<restore override>
-<restore context>
-<restore default>
-<restore syntax>
-<restore description>
-<restore name>
-</define-tag>
-
-<define-tag quotation endtag=required>
-<preserve width>
-<preserve author>
-<set-var %attributes>
-<div align=right>
-<table cellspacing=0 cellpadding=0 width=<get-var width>>
-<tr>
-<td>
-<em>%body</em>
-</td>
-</tr>
-<ifeq "<get-var author>" "" "" "
-<tr>
-<td align=right>
-<font size=-1>
-<get-var author>
-</font>
-</td>
-</tr>
-">
-</table>
-</div>
-<restore author>
-<restore width>
-</define-tag>
diff --git a/docs/manual/ssl/ssl_template.navbut-next-n.gif b/docs/manual/ssl/ssl_template.navbut-next-n.gif
deleted file mode 100644
index ef0e723..0000000
--- a/docs/manual/ssl/ssl_template.navbut-next-n.gif
+++ /dev/null
Binary files differ
diff --git a/docs/manual/ssl/ssl_template.navbut-next-s.gif b/docs/manual/ssl/ssl_template.navbut-next-s.gif
deleted file mode 100644
index 8b61339..0000000
--- a/docs/manual/ssl/ssl_template.navbut-next-s.gif
+++ /dev/null
Binary files differ
diff --git a/docs/manual/ssl/ssl_template.navbut-prev-n.gif b/docs/manual/ssl/ssl_template.navbut-prev-n.gif
deleted file mode 100644
index 912076e..0000000
--- a/docs/manual/ssl/ssl_template.navbut-prev-n.gif
+++ /dev/null
Binary files differ
diff --git a/docs/manual/ssl/ssl_template.navbut-prev-s.gif b/docs/manual/ssl/ssl_template.navbut-prev-s.gif
deleted file mode 100644
index 47b3bb2..0000000
--- a/docs/manual/ssl/ssl_template.navbut-prev-s.gif
+++ /dev/null
Binary files differ
diff --git a/docs/manual/ssl/ssl_template.title-abstract.gif b/docs/manual/ssl/ssl_template.title-abstract.gif
deleted file mode 100644
index 126b584..0000000
--- a/docs/manual/ssl/ssl_template.title-abstract.gif
+++ /dev/null
Binary files differ
diff --git a/docs/manual/ssl/ssl_template.title-compat.gif b/docs/manual/ssl/ssl_template.title-compat.gif
deleted file mode 100644
index 930aa5f..0000000
--- a/docs/manual/ssl/ssl_template.title-compat.gif
+++ /dev/null
Binary files differ
diff --git a/docs/manual/ssl/ssl_template.title-faq.gif b/docs/manual/ssl/ssl_template.title-faq.gif
deleted file mode 100644
index d5bbc2e..0000000
--- a/docs/manual/ssl/ssl_template.title-faq.gif
+++ /dev/null
Binary files differ
diff --git a/docs/manual/ssl/ssl_template.title-gloss.gif b/docs/manual/ssl/ssl_template.title-gloss.gif
deleted file mode 100644
index 9c233b8..0000000
--- a/docs/manual/ssl/ssl_template.title-gloss.gif
+++ /dev/null
Binary files differ
diff --git a/docs/manual/ssl/ssl_template.title-howto.gif b/docs/manual/ssl/ssl_template.title-howto.gif
deleted file mode 100644
index c20402d..0000000
--- a/docs/manual/ssl/ssl_template.title-howto.gif
+++ /dev/null
Binary files differ
diff --git a/docs/manual/ssl/ssl_template.title-intro.gif b/docs/manual/ssl/ssl_template.title-intro.gif
deleted file mode 100644
index 9c0371a..0000000
--- a/docs/manual/ssl/ssl_template.title-intro.gif
+++ /dev/null
Binary files differ
diff --git a/docs/manual/ssl/ssl_template.title-over.gif b/docs/manual/ssl/ssl_template.title-over.gif
deleted file mode 100644
index 3e53659..0000000
--- a/docs/manual/ssl/ssl_template.title-over.gif
+++ /dev/null
Binary files differ
diff --git a/docs/manual/ssl/ssl_template.title-preface.gif b/docs/manual/ssl/ssl_template.title-preface.gif
deleted file mode 100644
index 3189868..0000000
--- a/docs/manual/ssl/ssl_template.title-preface.gif
+++ /dev/null
Binary files differ
diff --git a/docs/manual/ssl/ssl_template.title-ref.gif b/docs/manual/ssl/ssl_template.title-ref.gif
deleted file mode 100644
index 606a64a..0000000
--- a/docs/manual/ssl/ssl_template.title-ref.gif
+++ /dev/null
Binary files differ
diff --git a/docs/manual/ssl/ssl_template.title-toc.gif b/docs/manual/ssl/ssl_template.title-toc.gif
deleted file mode 100644
index 2b096bf..0000000
--- a/docs/manual/ssl/ssl_template.title-toc.gif
+++ /dev/null
Binary files differ
diff --git a/docs/manual/ssl/ssl_template.title-tutor.gif b/docs/manual/ssl/ssl_template.title-tutor.gif
deleted file mode 100644
index 67aba32..0000000
--- a/docs/manual/ssl/ssl_template.title-tutor.gif
+++ /dev/null
Binary files differ
diff --git a/docs/manual/stopping.html b/docs/manual/stopping.html
deleted file mode 100644
index 89c1a58..0000000
--- a/docs/manual/stopping.html
+++ /dev/null
@@ -1,209 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta name="generator" content="HTML Tidy, see www.w3.org" />
-
-    <title>Stopping and Restarting the Server</title>
-  </head>
-  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-
-  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-  vlink="#000080" alink="#FF0000">
-    <!--#include virtual="header.html" -->
-
-    <h1 align="CENTER">Stopping and Restarting the Server</h1>
-
-    <p>This document covers stopping and restarting Apache on
-    Unix-like systems. Windows users should see <a
-    href="platform/windows.html#signal">Signalling Apache when
-    running</a>.</p>
-
-    <p>You will notice many <code>httpd</code> executables running
-    on your system, but you should not send signals to any of them
-    except the parent, whose pid is in the <a
-    href="mod/core.html#pidfile">PidFile</a>. That is to say you
-    shouldn't ever need to send signals to any process except the
-    parent. There are three signals that you can send the parent:
-    <code>TERM</code>, <code>HUP</code>, and <code>USR1</code>,
-    which will be described in a moment.</p>
-
-    <p>To send a signal to the parent you should issue a command
-    such as:</p>
-
-    <blockquote>
-<pre>
-    kill -TERM `cat /usr/local/apache/logs/httpd.pid`
-</pre>
-    </blockquote>
-    You can read about its progress by issuing: 
-
-    <blockquote>
-<pre>
-    tail -f /usr/local/apache/logs/error_log
-</pre>
-    </blockquote>
-    Modify those examples to match your <a
-    href="mod/core.html#serverroot">ServerRoot</a> and <a
-    href="mod/core.html#pidfile">PidFile</a> settings. 
-
-    <p>A shell script called <a
-    href="programs/apachectl.html">apachectl</a> is provided which
-    automates the processing of signalling Apache. For details
-    about this script, see the documentation on <a
-    href="invoking.html">starting Apache</a>.</p>
-
-    <h3>Stop Now</h3>
-
-    <p><strong>Signal:</strong> TERM<br />
-     <code>apachectl stop</code></p>
-
-    <p>Sending the <code>TERM</code> signal to the parent causes it
-    to immediately attempt to kill off all of its children. It may
-    take it several seconds to complete killing off its children.
-    Then the parent itself exits. Any requests in progress are
-    terminated, and no further requests are served.</p>
-
-    <h3>Graceful Restart</h3>
-
-    <p><strong>Signal:</strong> USR1<br />
-     <code>apachectl graceful</code></p>
-
-    <p>The <code>USR1</code> signal causes the parent process to
-    <em>advise</em> the children to exit after their current
-    request (or to exit immediately if they're not serving
-    anything). The parent re-reads its configuration files and
-    re-opens its log files. As each child dies off the parent
-    replaces it with a child from the new <em>generation</em> of
-    the configuration, which begins serving new requests
-    immediately.</p>
-    <i>On certain platforms that do not allow USR1 to be used for a
-    graceful restart, an alternative signal may be used (such as
-    WINCH). apachectl graceful will send the right signal for your
-    platform.</i> 
-
-    <p>This code is designed to always respect the <a
-    href="mod/mpm_common.html#maxclients">MaxClients</a>, <a
-    href="mod/prefork.html#minspareservers">MinSpareServers</a>,
-    and <a
-    href="mod/prefork.html#maxspareservers">MaxSpareServers</a>
-    settings. Furthermore, it respects <a
-    href="mod/mpm_common.html#startservers">StartServers</a> in the
-    following manner: if after one second at least StartServers new
-    children have not been created, then create enough to pick up
-    the slack. This is to say that the code tries to maintain both
-    the number of children appropriate for the current load on the
-    server, and respect your wishes with the StartServers
-    parameter.</p>
-
-    <p>Users of the <a href="mod/mod_status.html">status module</a>
-    will notice that the server statistics are <strong>not</strong>
-    set to zero when a <code>USR1</code> is sent. The code was
-    written to both minimize the time in which the server is unable
-    to serve new requests (they will be queued up by the operating
-    system, so they're not lost in any event) and to respect your
-    tuning parameters. In order to do this it has to keep the
-    <em>scoreboard</em> used to keep track of all children across
-    generations.</p>
-
-    <p>The status module will also use a <code>G</code> to indicate
-    those children which are still serving requests started before
-    the graceful restart was given.</p>
-
-    <p>At present there is no way for a log rotation script using
-    <code>USR1</code> to know for certain that all children writing
-    the pre-restart log have finished. We suggest that you use a
-    suitable delay after sending the <code>USR1</code> signal
-    before you do anything with the old log. For example if most of
-    your hits take less than 10 minutes to complete for users on
-    low bandwidth links then you could wait 15 minutes before doing
-    anything with the old log.</p>
-
-    <p><strong>Note:</strong> If your configuration file has errors
-    in it when you issue a restart then your parent will not
-    restart, it will exit with an error. In the case of graceful
-    restarts it will also leave children running when it exits.
-    (These are the children which are "gracefully exiting" by
-    handling their last request.) This will cause problems if you
-    attempt to restart the server -- it will not be able to bind to
-    its listening ports. Before doing a restart, you can check the
-    syntax of the configuration files with the <code>-t</code>
-    command line argument (see <a
-    href="programs/httpd.html">httpd</a>). This still will not
-    guarantee that the server will restart correctly. To check the
-    semantics of the configuration files as well as the syntax, you
-    can try starting httpd as a non-root user. If there are no
-    errors it will attempt to open its sockets and logs and fail
-    because it's not root (or because the currently running httpd
-    already has those ports bound). If it fails for any other
-    reason then it's probably a config file error and the error
-    should be fixed before issuing the graceful restart.</p>
-
-    <h3>Restart Now</h3>
-
-    <p><strong>Signal:</strong> HUP<br />
-     <code>apachectl restart</code></p>
-
-    <p>Sending the <code>HUP</code> signal to the parent causes it
-    to kill off its children like in <code>TERM</code> but the
-    parent doesn't exit. It re-reads its configuration files, and
-    re-opens any log files. Then it spawns a new set of children
-    and continues serving hits.</p>
-
-    <p>Users of the <a href="mod/mod_status.html">status module</a>
-    will notice that the server statistics are set to zero when a
-    <code>HUP</code> is sent.</p>
-
-    <p><strong>Note:</strong> If your configuration file has errors
-    in it when you issue a restart then your parent will not
-    restart, it will exit with an error. See below for a method of
-    avoiding this.</p>
-
-    <h3>Appendix: signals and race conditions</h3>
-
-    <p>Prior to Apache 1.2b9 there were several <em>race
-    conditions</em> involving the restart and die signals (a simple
-    description of race condition is: a time-sensitive problem, as
-    in if something happens at just the wrong time it won't behave
-    as expected). For those architectures that have the "right"
-    feature set we have eliminated as many as we can. But it should
-    be noted that there still do exist race conditions on certain
-    architectures.</p>
-
-    <p>Architectures that use an on disk <a
-    href="mod/core.html#scoreboardfile">ScoreBoardFile</a> have the
-    potential to corrupt their scoreboards. This can result in the
-    "bind: Address already in use" (after <code>HUP</code>) or
-    "long lost child came home!" (after <code>USR1</code>). The
-    former is a fatal error, while the latter just causes the
-    server to lose a scoreboard slot. So it might be advisable to
-    use graceful restarts, with an occasional hard restart. These
-    problems are very difficult to work around, but fortunately
-    most architectures do not require a scoreboard file. See the <a
-    href="mod/core.html#scoreboardfile">ScoreBoardFile</a>
-    documentation for a architecture uses it.</p>
-
-    <p><code>NEXT</code> and <code>MACHTEN</code> (68k only) have
-    small race conditions which can cause a restart/die signal to
-    be lost, but should not cause the server to do anything
-    otherwise problematic. 
-    <!-- they don't have sigaction, or we're not using it -djg -->
-    </p>
-
-    <p>All architectures have a small race condition in each child
-    involving the second and subsequent requests on a persistent
-    HTTP connection (KeepAlive). It may exit after reading the
-    request line but before reading any of the request headers.
-    There is a fix that was discovered too late to make 1.2. In
-    theory this isn't an issue because the KeepAlive client has to
-    expect these events because of network latencies and server
-    timeouts. In practice it doesn't seem to affect anything either
-    -- in a test case the server was restarted twenty times per
-    second and clients successfully browsed the site without
-    getting broken images or empty documents. 
-    <!--#include virtual="footer.html" -->
-    </p>
-  </body>
-</html>
-
diff --git a/docs/manual/stopping.html.en b/docs/manual/stopping.html.en
deleted file mode 100644
index 89c1a58..0000000
--- a/docs/manual/stopping.html.en
+++ /dev/null
@@ -1,209 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta name="generator" content="HTML Tidy, see www.w3.org" />
-
-    <title>Stopping and Restarting the Server</title>
-  </head>
-  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-
-  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-  vlink="#000080" alink="#FF0000">
-    <!--#include virtual="header.html" -->
-
-    <h1 align="CENTER">Stopping and Restarting the Server</h1>
-
-    <p>This document covers stopping and restarting Apache on
-    Unix-like systems. Windows users should see <a
-    href="platform/windows.html#signal">Signalling Apache when
-    running</a>.</p>
-
-    <p>You will notice many <code>httpd</code> executables running
-    on your system, but you should not send signals to any of them
-    except the parent, whose pid is in the <a
-    href="mod/core.html#pidfile">PidFile</a>. That is to say you
-    shouldn't ever need to send signals to any process except the
-    parent. There are three signals that you can send the parent:
-    <code>TERM</code>, <code>HUP</code>, and <code>USR1</code>,
-    which will be described in a moment.</p>
-
-    <p>To send a signal to the parent you should issue a command
-    such as:</p>
-
-    <blockquote>
-<pre>
-    kill -TERM `cat /usr/local/apache/logs/httpd.pid`
-</pre>
-    </blockquote>
-    You can read about its progress by issuing: 
-
-    <blockquote>
-<pre>
-    tail -f /usr/local/apache/logs/error_log
-</pre>
-    </blockquote>
-    Modify those examples to match your <a
-    href="mod/core.html#serverroot">ServerRoot</a> and <a
-    href="mod/core.html#pidfile">PidFile</a> settings. 
-
-    <p>A shell script called <a
-    href="programs/apachectl.html">apachectl</a> is provided which
-    automates the processing of signalling Apache. For details
-    about this script, see the documentation on <a
-    href="invoking.html">starting Apache</a>.</p>
-
-    <h3>Stop Now</h3>
-
-    <p><strong>Signal:</strong> TERM<br />
-     <code>apachectl stop</code></p>
-
-    <p>Sending the <code>TERM</code> signal to the parent causes it
-    to immediately attempt to kill off all of its children. It may
-    take it several seconds to complete killing off its children.
-    Then the parent itself exits. Any requests in progress are
-    terminated, and no further requests are served.</p>
-
-    <h3>Graceful Restart</h3>
-
-    <p><strong>Signal:</strong> USR1<br />
-     <code>apachectl graceful</code></p>
-
-    <p>The <code>USR1</code> signal causes the parent process to
-    <em>advise</em> the children to exit after their current
-    request (or to exit immediately if they're not serving
-    anything). The parent re-reads its configuration files and
-    re-opens its log files. As each child dies off the parent
-    replaces it with a child from the new <em>generation</em> of
-    the configuration, which begins serving new requests
-    immediately.</p>
-    <i>On certain platforms that do not allow USR1 to be used for a
-    graceful restart, an alternative signal may be used (such as
-    WINCH). apachectl graceful will send the right signal for your
-    platform.</i> 
-
-    <p>This code is designed to always respect the <a
-    href="mod/mpm_common.html#maxclients">MaxClients</a>, <a
-    href="mod/prefork.html#minspareservers">MinSpareServers</a>,
-    and <a
-    href="mod/prefork.html#maxspareservers">MaxSpareServers</a>
-    settings. Furthermore, it respects <a
-    href="mod/mpm_common.html#startservers">StartServers</a> in the
-    following manner: if after one second at least StartServers new
-    children have not been created, then create enough to pick up
-    the slack. This is to say that the code tries to maintain both
-    the number of children appropriate for the current load on the
-    server, and respect your wishes with the StartServers
-    parameter.</p>
-
-    <p>Users of the <a href="mod/mod_status.html">status module</a>
-    will notice that the server statistics are <strong>not</strong>
-    set to zero when a <code>USR1</code> is sent. The code was
-    written to both minimize the time in which the server is unable
-    to serve new requests (they will be queued up by the operating
-    system, so they're not lost in any event) and to respect your
-    tuning parameters. In order to do this it has to keep the
-    <em>scoreboard</em> used to keep track of all children across
-    generations.</p>
-
-    <p>The status module will also use a <code>G</code> to indicate
-    those children which are still serving requests started before
-    the graceful restart was given.</p>
-
-    <p>At present there is no way for a log rotation script using
-    <code>USR1</code> to know for certain that all children writing
-    the pre-restart log have finished. We suggest that you use a
-    suitable delay after sending the <code>USR1</code> signal
-    before you do anything with the old log. For example if most of
-    your hits take less than 10 minutes to complete for users on
-    low bandwidth links then you could wait 15 minutes before doing
-    anything with the old log.</p>
-
-    <p><strong>Note:</strong> If your configuration file has errors
-    in it when you issue a restart then your parent will not
-    restart, it will exit with an error. In the case of graceful
-    restarts it will also leave children running when it exits.
-    (These are the children which are "gracefully exiting" by
-    handling their last request.) This will cause problems if you
-    attempt to restart the server -- it will not be able to bind to
-    its listening ports. Before doing a restart, you can check the
-    syntax of the configuration files with the <code>-t</code>
-    command line argument (see <a
-    href="programs/httpd.html">httpd</a>). This still will not
-    guarantee that the server will restart correctly. To check the
-    semantics of the configuration files as well as the syntax, you
-    can try starting httpd as a non-root user. If there are no
-    errors it will attempt to open its sockets and logs and fail
-    because it's not root (or because the currently running httpd
-    already has those ports bound). If it fails for any other
-    reason then it's probably a config file error and the error
-    should be fixed before issuing the graceful restart.</p>
-
-    <h3>Restart Now</h3>
-
-    <p><strong>Signal:</strong> HUP<br />
-     <code>apachectl restart</code></p>
-
-    <p>Sending the <code>HUP</code> signal to the parent causes it
-    to kill off its children like in <code>TERM</code> but the
-    parent doesn't exit. It re-reads its configuration files, and
-    re-opens any log files. Then it spawns a new set of children
-    and continues serving hits.</p>
-
-    <p>Users of the <a href="mod/mod_status.html">status module</a>
-    will notice that the server statistics are set to zero when a
-    <code>HUP</code> is sent.</p>
-
-    <p><strong>Note:</strong> If your configuration file has errors
-    in it when you issue a restart then your parent will not
-    restart, it will exit with an error. See below for a method of
-    avoiding this.</p>
-
-    <h3>Appendix: signals and race conditions</h3>
-
-    <p>Prior to Apache 1.2b9 there were several <em>race
-    conditions</em> involving the restart and die signals (a simple
-    description of race condition is: a time-sensitive problem, as
-    in if something happens at just the wrong time it won't behave
-    as expected). For those architectures that have the "right"
-    feature set we have eliminated as many as we can. But it should
-    be noted that there still do exist race conditions on certain
-    architectures.</p>
-
-    <p>Architectures that use an on disk <a
-    href="mod/core.html#scoreboardfile">ScoreBoardFile</a> have the
-    potential to corrupt their scoreboards. This can result in the
-    "bind: Address already in use" (after <code>HUP</code>) or
-    "long lost child came home!" (after <code>USR1</code>). The
-    former is a fatal error, while the latter just causes the
-    server to lose a scoreboard slot. So it might be advisable to
-    use graceful restarts, with an occasional hard restart. These
-    problems are very difficult to work around, but fortunately
-    most architectures do not require a scoreboard file. See the <a
-    href="mod/core.html#scoreboardfile">ScoreBoardFile</a>
-    documentation for a architecture uses it.</p>
-
-    <p><code>NEXT</code> and <code>MACHTEN</code> (68k only) have
-    small race conditions which can cause a restart/die signal to
-    be lost, but should not cause the server to do anything
-    otherwise problematic. 
-    <!-- they don't have sigaction, or we're not using it -djg -->
-    </p>
-
-    <p>All architectures have a small race condition in each child
-    involving the second and subsequent requests on a persistent
-    HTTP connection (KeepAlive). It may exit after reading the
-    request line but before reading any of the request headers.
-    There is a fix that was discovered too late to make 1.2. In
-    theory this isn't an issue because the KeepAlive client has to
-    expect these events because of network latencies and server
-    timeouts. In practice it doesn't seem to affect anything either
-    -- in a test case the server was restarted twenty times per
-    second and clients successfully browsed the site without
-    getting broken images or empty documents. 
-    <!--#include virtual="footer.html" -->
-    </p>
-  </body>
-</html>
-
diff --git a/docs/manual/style/build.sh b/docs/manual/style/build.sh
deleted file mode 100644
index f1b777c..0000000
--- a/docs/manual/style/build.sh
+++ /dev/null
@@ -1,30 +0,0 @@
-#!/bin/sh
-
-if [ "$JAVA_HOME" = "" ] ; then
-  echo You must set JAVA_HOME to point at your Java Development Kit directory
-  exit 1
-fi
-
-# convert the existing path to unix
-if [ "$OSTYPE" = "cygwin32" ] || [ "$OSTYPE" = "cygwin" ] ; then
-   CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
-fi
-
-# Add in your .jar files first
-for i in ./lib/*.jar
-do
-    CLASSPATH=$CLASSPATH:"$i"
-done
-
-# convert the unix path to windows
-if [ "$OSTYPE" = "cygwin32" ] || [ "$OSTYPE" = "cygwin" ] ; then
-   CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
-fi
-
-BUILDFILE=build.xml
-
-${JAVA_HOME}/bin/java $ANT_OPTS -classpath "$CLASSPATH" \
-                org.apache.tools.ant.Main \
-                -Dant.home=$ANT_HOME \
-                -buildfile ${BUILDFILE} \
-                 "$@"
diff --git a/docs/manual/style/build.xml b/docs/manual/style/build.xml
deleted file mode 100644
index 60d4106..0000000
--- a/docs/manual/style/build.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<project name="manual" default="xslt" basedir=".">
-
-    <!-- Initialization properties -->
-    <path id="classpath">
-        <fileset dir="./lib">
-            <include name="**/*.jar"/>
-        </fileset>
-    </path>
-
-
-<!-- This target is for output of HTML pages via XSLT -->
-  <!-- Requires JAXP/1.1 (all three JARs) or Xerces+Xalan -->
-  <target name="xslt"
-   description="Render HTML Pages via XSLT">
-
-    <!-- Transform the modules directory -->
-    <style   basedir="../mod/"
-             destdir="../mod/"
-           extension=".html"
-               style="./manual.xsl"
-            excludes="empty.xml"
-            includes="*.xml">
-      <param name="relative-path" expression="."/>
-    </style>
-  </target>
-
-
-
-</project>
diff --git a/docs/manual/style/en.xml b/docs/manual/style/en.xml
deleted file mode 100644
index 78c5e25..0000000
--- a/docs/manual/style/en.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE xsl:stylesheet [ <!ENTITY nbsp "&#160;"> ]>
-<!-- English -->
-<messages>
- <message name="seealso">See also </message>
- <message name="description">Description</message>
- <message name="apachemodule">Apache Module</message>
- <message name="status">Status</message>
- <message name="moduleidentifier">Module&nbsp;Identifier</message>
- <message name="compatibility">Compatibility</message>
- <message name="syntax">Syntax</message>
- <message name="default">Default</message>
- <message name="context">Context</message>
- <message name="override">Override</message>
- <message name="status">Status</message>
- <message name="module">Module</message>
- <message name="nodirective">This module provides no directives.</message>
- <message name="apachedocalt">[APACHE DOCUMENTATION]</message>
- <message name="apachehttpserver">Apache HTTP Server Version 2.0</message>
- <message name="index">Index</message>
- <message name="home">Home</message>
- <message name="directives">Directives</message>
- <message name="directive">Directive</message>
-</messages>
diff --git a/docs/manual/style/manual.css b/docs/manual/style/manual.css
deleted file mode 100644
index 4d0482f..0000000
--- a/docs/manual/style/manual.css
+++ /dev/null
@@ -1,12 +0,0 @@
-body {background: white;
-      text: black; }
-
-.help { font-weight: bold }
-
-.directive { color: green; }
-
-.module { color: green; }
-
-a:link { text-decoration: none }
-a:hover { text-decoration: underline }
-a:visited { text-decoration: none }
diff --git a/docs/manual/style/manual.xsl b/docs/manual/style/manual.xsl
deleted file mode 100644
index a8524e8..0000000
--- a/docs/manual/style/manual.xsl
+++ /dev/null
@@ -1,385 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE xsl:stylesheet [ <!ENTITY nbsp "&#160;"> ]>
-<xsl:stylesheet version="1.0"
-              xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-                  xmlns="http://www.w3.org/TR/xhtml1/strict">
-
-<!-- Include constants, variables, and macros -->
-<xsl:import href="settings.xsl" />
-
-<xsl:output method="html" encoding="iso-8859-1" indent="no"/>
-
-<xsl:template match="moduleindex">
-<html>
-<head><title><xsl:value-of select="title"/> - Apache HTTP Server</title>
-<link rel="stylesheet" type="text/css" href="../style/manual.css" />
-</head>
-<body>
-  <blockquote>
-   <div align="center">
-    <img src="../images/sub.gif" alt="[APACHE DOCUMENTATION]" /> 
-    <h3>Apache HTTP Server Version 2.0</h3>
-   </div>
-   <h1 align="center"><xsl:value-of select="title"/></h1>
-<xsl:apply-templates select="summary" />
-<h2>Core Features and Multi-Processing Modules</h2>
-<dl>
-<xsl:for-each select="document(modulelist/modulefile)/modulesynopsis">
-<xsl:sort select="name"/>
-<xsl:if test="status='MPM' or status='Core'">
-<dt><a href="{name}.html"><xsl:value-of select="name"/></a></dt>
-<dd><xsl:apply-templates select="description"/></dd>
-</xsl:if>
-</xsl:for-each>
-</dl>
-<h2>Other Modules</h2>
-<dl>
-<xsl:for-each select="document(modulelist/modulefile)/modulesynopsis">
-<xsl:sort select="name"/>
-<xsl:if test="status!='MPM' and status!='Core'">
-<dt><a href="{name}.html"><xsl:value-of select="name"/></a></dt>
-<dd><xsl:apply-templates select="description"/></dd>
-</xsl:if>
-</xsl:for-each>
-</dl>
-</blockquote>
-<!-- Page footer -->
-<hr />
-<h3 align="center">Apache HTTP Server Version 2.0</h3>
-<a href="./"><img src="../images/index.gif" alt="Index" /></a>
-<a href="../"><img src="../images/home.gif" alt="Home" /></a>
-</body>
-</html>
-</xsl:template>
-
-
-<xsl:template match="directiveindex">
-<html>
-<head><title><xsl:value-of select="title"/> - Apache HTTP Server</title>
-<link rel="stylesheet" type="text/css" href="../style/manual.css" />
-</head>
-<body>
-  <blockquote>
-   <div align="center">
-    <img src="../images/sub.gif" alt="[APACHE DOCUMENTATION]" /> 
-    <h3>Apache HTTP Server Version 2.0</h3>
-   </div>
-   <h1 align="center"><xsl:value-of select="title"/></h1>
-<xsl:apply-templates select="summary" />
-<ul>
-<xsl:for-each select="document(modulelist/modulefile)/modulesynopsis/directivesynopsis">
-<xsl:sort select="name"/>
-<xsl:if test="not(/modulesynopsis/directivesynopsis/@location)">
-<li><a href="{/modulesynopsis/name}.html#{translate(name,$uppercase,$lowercase)}"
-><xsl:value-of select="name"/></a></li>
-</xsl:if>
-</xsl:for-each>
-</ul>
-</blockquote>
-<!-- Page footer -->
-<hr />
-<h3 align="center">Apache HTTP Server Version 2.0</h3>
-<a href="./"><img src="../images/index.gif" alt="Index" /></a>
-<a href="../"><img src="../images/home.gif" alt="Home" /></a>
-</body>
-</html>
-</xsl:template>
-
- <!-- Process an entire document into an HTML page -->
- <xsl:template match="modulesynopsis">
-<html>
- <head>
-<xsl:comment>
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-     This file is generated from xml source: DO NOT EDIT
-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-</xsl:comment>
-  <xsl:apply-templates select="meta"/>
-  <title><xsl:value-of select="name"/> - Apache HTTP Server</title>
-  <link rel="stylesheet" type="text/css" href="../style/manual.css" />
- </head>
- <body>
-  <blockquote>
-   <div align="center">
-    <img src="../images/sub.gif" alt="[APACHE DOCUMENTATION]" /> 
-    <h3>Apache HTTP Server Version 2.0</h3>
-   </div>
-   <h1 align="center"><xsl:value-of select="$messages/message[@name='apachemodule']"/><xsl:text> </xsl:text> <xsl:value-of select="name"/></h1>
-   <!-- Description and module-headers -->
-   <table bgcolor="#cccccc" cellpadding="0" cellspacing="1"><tr><td>
-    <table bgcolor="#ffffff">
-     <tr><td valign="top"><span class="help"><xsl:value-of select="$messages/message[@name='description']"/>:</span> </td>
-         <td><xsl:apply-templates select="description"/></td></tr>
-     <tr><td><a class="help" href="module-dict.html#Status"><xsl:value-of select="$messages/message[@name='status']"/>:</a> </td>
-         <td><xsl:value-of select="status"/></td></tr>
-  <xsl:if test="identifier">
-     <tr><td><a class="help" href="module-dict.html#ModuleIdentifier"><xsl:value-of select="$messages/message[@name='moduleidentifier']"/>:</a> </td>
-         <td><xsl:value-of select="identifier"/></td></tr>
-  </xsl:if>
-  <xsl:if test="compatibility">
-     <tr><td valign="top" align="left"><a class="help" href="module-dict.html#Compatibility"
-       ><xsl:value-of select="$messages/message[@name='compatibility']"/>:</a> </td>
-         <td><xsl:apply-templates select="compatibility"/></td>
-     </tr>
-    </xsl:if>
-   </table>
- </td></tr></table>
-
-<!-- Summary of module features/usage (1 to 3 paragraphs, optional) -->
-
-<xsl:if test="summary">
-  <h2>Summary</h2>
-  <xsl:apply-templates select="summary"/>
-</xsl:if>
-
-<xsl:if test="seealso">
- <p><strong><xsl:value-of select="$messages/message[@name='seealso']"/></strong></p>
- <ul>
-  <xsl:for-each select="seealso">
-   <li><xsl:apply-templates/></li>
-  </xsl:for-each>
- </ul>
-</xsl:if>
-
-<!-- Index of directives, automatically generated from
-     directivesynopsis/name -->
-
-<h2>Directives</h2>
-
-<xsl:if test="directivesynopsis">
-  <ul>
-     <xsl:for-each select="directivesynopsis">
-       <xsl:sort select="name"/>
-       <xsl:variable name="name">
-         <xsl:value-of select="name"/>
-       </xsl:variable>
-       <xsl:variable name="lowername" 
-         select="translate($name, $uppercase, $lowercase)" />
-       <xsl:if test="not(@location)">
-         <li><a href="#{$lowername}"><xsl:value-of select="name"/></a></li>
-       </xsl:if>
-       <xsl:if test="./@location">
-         <xsl:variable name="location">
-           <xsl:value-of select="./@location"/>
-         </xsl:variable>
-         <xsl:variable name="lowerlocation" 
-           select="translate($location, $uppercase, $lowercase)" />
-         <li><a href="{$lowerlocation}.html#{$lowername}"><xsl:value-of select="name"/></a></li>
-       </xsl:if>
-     </xsl:for-each>
-  </ul>
-</xsl:if>
-<xsl:if test="not(directivesynopsis)">
-  <p>This module provides no directives.</p>
-</xsl:if>
-
-<!-- Sections of documentation about the module as a whole -->
-
-<xsl:apply-templates select="section"/>
-
-<hr />
-
-<!-- Directive documentation -->
-
-<xsl:apply-templates select="directivesynopsis">
-  <xsl:sort select="name"/>
-</xsl:apply-templates> 
-
-<!-- Page footer -->
-
-<h3 align="center">Apache HTTP Server Version 2.0</h3>
-<a href="./"><img src="../images/index.gif" alt="Index" /></a>
-<a href="../"><img src="../images/home.gif" alt="Home" /></a>
-
-</blockquote>
-</body>
-</html>
-</xsl:template> <!-- /modulesynopsis -->
-
-
-<!-- Subsections: get a lower level heading -->
-  <xsl:template match="section/section">
-   <xsl:variable name="href">
-      <xsl:value-of select="@id"/>
-    </xsl:variable>
-      <!-- Section heading -->
-    <xsl:if test="@id">
-      <h3><a name="{$href}"><xsl:apply-templates select="./title" mode="print"/></a></h3>
-    </xsl:if>
-    <xsl:if test="not(@id)">
-      <h3><xsl:apply-templates select="./title" mode="print"/></h3>
-    </xsl:if>
-      <!-- Section body -->
-        <xsl:apply-templates/>
-  </xsl:template>
-
-<!-- Process a documentation section -->
-  <xsl:template match="section">
-    <xsl:variable name="href">
-      <xsl:value-of select="@id"/>
-    </xsl:variable>
-      <!-- Section heading -->
-    <xsl:if test="@id">
-      <h2><a name="{$href}"><xsl:apply-templates select="./title" mode="print"/></a></h2>
-    </xsl:if>
-    <xsl:if test="not(@id)">
-      <h2><xsl:apply-templates select="./title" mode="print"/></h2>
-    </xsl:if>
-      <!-- Section body -->
-        <xsl:apply-templates/>
-  </xsl:template>
-
-  <xsl:template match="section/title" mode="print">
-    <xsl:apply-templates/>
-  </xsl:template>
-
-  <!-- Don't print the title twice -->
-  <xsl:template match="section/title"></xsl:template>
-
-  <xsl:template match="directivesynopsis">
-
-  <xsl:if test="not(@location)">
-  <xsl:variable name="name">
-    <xsl:value-of select="./name"/>
-  </xsl:variable>
-  <xsl:variable name="lowername" 
-     select="translate($name, $uppercase, $lowercase)" />
-  <!-- Directive heading gets both mixed case and lowercase anchors,
-       and includes lt/gt only for "section" directives -->
-  <h2><a name="{$name}"><xsl:if test="./@type='section'">&lt;</xsl:if
-      ><xsl:value-of select="./name"/><xsl:if test="./@type='section'"
-      >&gt;</xsl:if></a><xsl:text> </xsl:text><a 
-      name="{$lowername}">Directive</a></h2>
-
-<!-- Directive header -->
-<table bgcolor="#cccccc" border="0" cellspacing="0" cellpadding="1">
-<tr><td>
-<table bgcolor="#ffffff">
-  <tr><td><strong><xsl:value-of select="$messages/message[@name='description']"/>: </strong></td>
-    <td><xsl:value-of select="description"/></td></tr>
-  <tr><td><a class="help" href="directive-dict.html#Syntax"><xsl:value-of select="$messages/message[@name='syntax']"/>:</a> </td>
-    <td><xsl:apply-templates select="syntax"/></td></tr>
-  <xsl:if test="default">
-    <tr><td><a class="help" href="directive-dict.html#Default"
-      ><xsl:value-of select="$messages/message[@name='default']"/>:</a> </td>
-      <td><code><xsl:value-of select="default"/></code></td></tr>
-  </xsl:if>
-  <tr><td><a class="help" href="directive-dict.html#Context"><xsl:value-of select="$messages/message[@name='context']"/>:</a> </td>
-    <td><xsl:apply-templates select="contextlist"/></td></tr>
-  <xsl:if test="override">
-    <tr><td><a class="help" href="directive-dict.html#Override"
-    ><xsl:value-of select="$messages/message[@name='override']"/>:</a> </td>
-    <td><xsl:value-of select="override"/></td></tr>
-  </xsl:if>
-  <tr><td><a class="help" href="directive-dict.html#Status"><xsl:value-of select="$messages/message[@name='status']"/>:</a> </td>
-    <td><xsl:value-of select="/modulesynopsis/status"/></td></tr>
-  <tr><td><a class="help" href="directive-dict.html#Module"><xsl:value-of select="$messages/message[@name='module']"/>:</a> </td>
-    <td>
-    <xsl:if test="modulelist"><xsl:apply-templates select="modulelist"/>
-      </xsl:if>
-    <xsl:if test="not(modulelist)">
-      <xsl:value-of select="/modulesynopsis/name"/>
-    </xsl:if>
-    </td></tr>
-  <xsl:if test="compatibility">
-    <tr><td valign="top" align="left"><a class="help" href="directive-dict.html#Compatibility"
-      ><xsl:value-of select="$messages/message[@name='compatibility']"/>:</a> </td>
-      <td><xsl:value-of select="compatibility"/></td></tr>
-  </xsl:if>
-</table>
-</td></tr></table>
-
-<xsl:apply-templates select="usage"/>
-<xsl:if test="seealso">
-  <p><strong><xsl:value-of select="$messages/message[@name='seealso']"/></strong></p>
-  <ul>
-    <xsl:for-each select="seealso">
-      <li><xsl:apply-templates/></li>
-    </xsl:for-each>
-  </ul>
-</xsl:if>
-
-<hr />
-</xsl:if> <!-- not(@location) -->
-</xsl:template> <!-- /directivesynopsis -->
-
-  <xsl:template match="contextlist">
-    <xsl:apply-templates select="context"/>
-  </xsl:template>
-
-  <xsl:template match="context">
-    <xsl:value-of select="." />
-    <xsl:if test="not(position()=last())">, </xsl:if>
-  </xsl:template>
-
-  <xsl:template match="modulelist">
-    <xsl:apply-templates select="module"/>
-  </xsl:template>
-
-  <xsl:template match="example">
-  <blockquote>
-  <table cellpadding="10"><tr><td bgcolor="#eeeeee">
-     <xsl:apply-templates select="title" mode="print"/>
-     <code><xsl:apply-templates/></code>
-  </td></tr></table>
-  </blockquote>
-  </xsl:template>
-
-  <xsl:template match="example/title" mode="print">
-     <p align="center"><strong><xsl:apply-templates/></strong></p>
-  </xsl:template>
-  <xsl:template match="example/title"></xsl:template>
-
-  <xsl:template match="note">
-  <blockquote>
-  <table><tr><td>
-   <xsl:choose>
-    <xsl:when test="@type='warning'">
-     <xsl:attribute name="bgcolor">#ffe5f5</xsl:attribute>
-    </xsl:when>
-    <xsl:otherwise>
-     <xsl:attribute name="bgcolor">#e0e5f5</xsl:attribute>
-    </xsl:otherwise>
-   </xsl:choose>
-     <xsl:apply-templates/>
-  </td></tr></table>
-  </blockquote>
-  </xsl:template>
-  <xsl:template match="note/title">
-     <p align="center"><strong><xsl:apply-templates/></strong></p>
-  </xsl:template>
-
-  <xsl:template match="directive">
-    <xsl:if test="@module">
-      <xsl:variable name="module">
-        <xsl:value-of select="./@module"/>
-      </xsl:variable>
-      <xsl:variable name="directive">
-        <xsl:value-of select="."/>
-      </xsl:variable>
-      <xsl:variable name="lowerdirective" select="translate($directive, $uppercase, $lowercase)" />
-      <xsl:if test="@module=/modulesynopsis/name">
-        <a class="directive" href="#{$lowerdirective}"><code class="directive"><xsl:if test="./@type='section'">&lt;</xsl:if><xsl:value-of select="."/><xsl:if test="./@type='section'">&gt;</xsl:if></code></a>
-      </xsl:if>
-      <xsl:if test="@module!=/modulesynopsis/name">
-        <a class="directive" href="{$module}.html#{$lowerdirective}"><code class="directive"><xsl:if test="./@type='section'">&lt;</xsl:if><xsl:value-of select="."/><xsl:if test="./@type='section'">&gt;</xsl:if></code></a>
-      </xsl:if>
-    </xsl:if>
-    <xsl:if test="not(@module)">
-       <code class="directive"><xsl:if test="./@type='section'">&lt;</xsl:if><xsl:value-of select="."/><xsl:if test="./@type='section'">&gt;</xsl:if></code>
-    </xsl:if>
-  </xsl:template>
-
-  <xsl:template match="module">
-    <code><a href="{.}.html"><xsl:value-of select="."/></a></code><xsl:if test="parent::modulelist"><xsl:if test="not(position()=last())">, </xsl:if>
-    </xsl:if>
-  </xsl:template>
-
-  <!-- Process everything else by just passing it through -->
-  <xsl:template match="*|@*">
-    <xsl:copy>
-      <xsl:apply-templates select="@*|*|text()"/>
-    </xsl:copy>
-  </xsl:template>
-
-</xsl:stylesheet>
diff --git a/docs/manual/style/modulesynopsis.dtd b/docs/manual/style/modulesynopsis.dtd
deleted file mode 100644
index 555c21e..0000000
--- a/docs/manual/style/modulesynopsis.dtd
+++ /dev/null
@@ -1,133 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' ?>
-
-<!ENTITY nbsp "&#160;">
-
-<!ENTITY % inlinetags "em | strong | code | a | br | directive | module">
-
-<!ENTITY % blocktags "p | example | note | table | ul | ol | dl | pre | img
-| blockquote">
-
-<!ENTITY % Block "(%blocktags;)*">
-
-<!ENTITY % Inline "(#PCDATA | %inlinetags;)*">
-
-<!ENTITY % BlockOrInline "(#PCDATA | %inlinetags; | %blocktags;)*">
-
-<!ELEMENT modulesynopsis (name , description, status , sourcefile?,
-identifier? , compatibility? , summary? , seealso* , section*,
-directivesynopsis*)>
-
-<!ELEMENT directivesynopsis (name , description? , syntax? , default?
-, contextlist? , override? , modulelist?, status?, compatibility? ,
-usage?, seealso*)>
-
-<!ELEMENT name (#PCDATA)>
-
-<!ELEMENT status (#PCDATA)>
-
-<!ELEMENT identifier (#PCDATA)>
-
-<!ELEMENT sourcefile (#PCDATA)>
-
-<!ELEMENT compatibility %Inline;>
-
-<!ELEMENT description %Inline;>
-
-<!ELEMENT section (section | title | %blocktags;)*>
-
-<!ATTLIST section id CDATA #IMPLIED>
-
-<!ELEMENT module (#PCDATA)>
-
-<!ELEMENT example (#PCDATA | title | %inlinetags; | %blocktags;)*>
-
-<!ELEMENT seealso %Inline;>
-
-<!ELEMENT a %Inline;>
-
-<!ATTLIST a  href CDATA #IMPLIED 
-             name CDATA #IMPLIED
-             id   CDATA #IMPLIED >
-
-<!ELEMENT img EMPTY>
-<!ATTLIST img
-  src         CDATA   #REQUIRED
-  alt         CDATA   #REQUIRED
-  border      CDATA   #IMPLIED
-  height      CDATA   #IMPLIED
-  width       CDATA  #IMPLIED >
-
-<!ATTLIST directivesynopsis  type CDATA  #IMPLIED
-                             location CDATA  #IMPLIED >
-
-<!ELEMENT syntax %Inline;>
-
-<!ELEMENT default (#PCDATA)>
-
-<!ELEMENT contextlist (context+)+>
-
-<!ELEMENT modulelist (module)+>
-
-<!ELEMENT context (#PCDATA)>
-
-<!ELEMENT override (#PCDATA)>
-
-<!ELEMENT note (#PCDATA | title | %inlinetags; | %blocktags;)*>
-<!ATTLIST note type CDATA #IMPLIED>
-
-<!ELEMENT title %Inline;>
-
-<!ELEMENT p %Inline;>
-
-<!ELEMENT ul (li+)>
-
-<!ELEMENT ol (li+)>
-<!ATTLIST ol type CDATA  #IMPLIED>
-
-<!ELEMENT li %BlockOrInline;>
-
-<!ELEMENT strong %Inline;>
-
-<!ELEMENT br EMPTY>
-
-<!ELEMENT table (tr)+>
-<!ATTLIST table summary     CDATA  #IMPLIED
-                width       CDATA  #IMPLIED
-                bgcolor     CDATA  #IMPLIED
-                cellspacing CDATA  #IMPLIED
-                cellpadding CDATA  #IMPLIED
-                border      CDATA  #IMPLIED >
-
-<!ELEMENT tr (th | td)+>
-<!ATTLIST tr valign CDATA #IMPLIED >
-
-<!ELEMENT td %BlockOrInline;>
-
-<!ELEMENT th %BlockOrInline;>
-
-<!ATTLIST td  colspan  CDATA  #IMPLIED
-              rowspan  CDATA  #IMPLIED
-              bgcolor  CDATA  #IMPLIED
-              class    CDATA  #IMPLIED >
-<!ELEMENT directive (#PCDATA)>
-
-<!ATTLIST directive  module CDATA  #IMPLIED
-                     type   CDATA  #IMPLIED >
-
-<!ELEMENT code %Inline;>
-
-<!ELEMENT dl (dd | dt)+>
-
-<!ELEMENT dt %Inline;>
-
-<!ELEMENT dd %BlockOrInline;>
-
-<!ELEMENT em %Inline;>
-
-<!ELEMENT usage %Block;>
-
-<!ELEMENT summary %Block;>
-
-<!ELEMENT blockquote %BlockOrInline;>
-
-<!ELEMENT pre %Inline;>
\ No newline at end of file
diff --git a/docs/manual/style/settings.xsl b/docs/manual/style/settings.xsl
deleted file mode 100644
index f3d0572..0000000
--- a/docs/manual/style/settings.xsl
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE xsl:stylesheet [ <!ENTITY nbsp "&#160;"> ]>
-<xsl:stylesheet version="1.0"
-              xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-                  xmlns="http://www.w3.org/TR/xhtml1/strict">
-
- <!-- Constants used for case translation -->
- <xsl:variable name="lowercase" select="'abcdefghijklmnopqrstuvwxyz'" />
- <xsl:variable name="uppercase" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'" />
-
- <!-- Defined parameters (overrideable) -->
- <xsl:param name="relative-path" select="'.'"/>
-
- <!-- Macros, variables, and stuff for the localization -->
-
- <!-- English is the default language -->
- <xsl:variable name="language">
-  <xsl:if test="modulesynopsis/language">
-   <xsl:value-of select="modulesynopsis/language"/>
-  </xsl:if>
-  <xsl:if test="not(modulesynopsis/language)">en</xsl:if>
- </xsl:variable>
-
- <!-- Read the localized messages from the specified language file -->
- <xsl:variable name="messages" select="document(concat($language, '.xml'))/messages"/>
-
-</xsl:stylesheet>
-
diff --git a/docs/manual/style/sv.xml b/docs/manual/style/sv.xml
deleted file mode 100644
index 7ec487b..0000000
--- a/docs/manual/style/sv.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-
-<!-- Swedish -->
-<messages>
- <message name="seealso">Se även</message>
- <message name="description">Beskrivning</message>
- <message name="apachemodule">Apache Modul</message>
- <message name="status">Status</message>
- <message name="moduleidentifier">Module Identifier</message>
- <message name="compatibility">Compatibility</message>
- <message name="syntax">Syntax</message>
- <message name="default">Default</message>
- <message name="context">Context</message>
- <message name="override">Override</message>
- <message name="status">Status</message>
- <message name="module">Modul</message>
- <message name="nodirective">This module provides no directives.</message>
- <message name="apachedocalt">[APACHE DOKUMENTATION]</message>
- <message name="apachehttpserver">Apache HTTP Server Version 2.0</message>
- <message name="index">Index</message>
- <message name="home">Hem</message>
- <message name="directives">Directives</message>
- <message name="directive">Directive</message>
-</messages>
\ No newline at end of file
diff --git a/docs/manual/suexec.html b/docs/manual/suexec.html
deleted file mode 100644
index 42098e6..0000000
--- a/docs/manual/suexec.html
+++ /dev/null
@@ -1,620 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta name="generator" content="HTML Tidy, see www.w3.org" />
-
-    <title>Apache suEXEC Support</title>
-  </head>
-  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-
-  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-  vlink="#000080" alink="#FF0000">
-    <!--#include virtual="header.html" -->
-
-    <h1 align="CENTER">Apache suEXEC Support</h1>
-
-    <ol>
-      <li><big><strong>CONTENTS</strong></big></li>
-
-      <li><a href="#what">What is suEXEC?</a></li>
-
-      <li><a href="#before">Before we begin.</a></li>
-
-      <li><a href="#model">suEXEC Security Model.</a></li>
-
-      <li><a href="#install">Configuring &amp; Installing
-      suEXEC</a></li>
-
-      <li><a href="#enable">Enabling &amp; Disabling
-      suEXEC</a></li>
-
-      <li><a href="#usage">Using suEXEC</a></li>
-
-      <li><a href="#debug">Debugging suEXEC</a></li>
-
-      <li><a href="#jabberwock">Beware the Jabberwock: Warnings
-      &amp; Examples</a></li>
-    </ol>
-    <br />
-     <br />
-     
-
-    <h3><a id="what" name="what">What is suEXEC?</a></h3>
-
-    <p align="LEFT">The <strong>suEXEC</strong> feature --
-    introduced in Apache 1.2 -- provides Apache users the ability
-    to run <strong>CGI</strong> and <strong>SSI</strong> programs
-    under user IDs different from the user ID of the calling
-    web-server. Normally, when a CGI or SSI program executes, it
-    runs as the same user who is running the web server.</p>
-
-    <p align="LEFT">Used properly, this feature can reduce
-    considerably the security risks involved with allowing users to
-    develop and run private CGI or SSI programs. However, if suEXEC
-    is improperly configured, it can cause any number of problems
-    and possibly create new holes in your computer's security. If
-    you aren't familiar with managing setuid root programs and the
-    security issues they present, we highly recommend that you not
-    consider using suEXEC.</p>
-
-    <p align="CENTER"><strong><a href="suexec.html">BACK TO
-    CONTENTS</a></strong></p>
-
-    <h3><a id="before" name="before">Before we begin.</a></h3>
-
-    <p align="LEFT">Before jumping head-first into this document,
-    you should be aware of the assumptions made on the part of the
-    Apache Group and this document.</p>
-
-    <p align="LEFT">First, it is assumed that you are using a UNIX
-    derivate operating system that is capable of
-    <strong>setuid</strong> and <strong>setgid</strong> operations.
-    All command examples are given in this regard. Other platforms,
-    if they are capable of supporting suEXEC, may differ in their
-    configuration.</p>
-
-    <p align="LEFT">Second, it is assumed you are familiar with
-    some basic concepts of your computer's security and its
-    administration. This involves an understanding of
-    <strong>setuid/setgid</strong> operations and the various
-    effects they may have on your system and its level of
-    security.</p>
-
-    <p align="LEFT">Third, it is assumed that you are using an
-    <strong>unmodified</strong> version of suEXEC code. All code
-    for suEXEC has been carefully scrutinized and tested by the
-    developers as well as numerous beta testers. Every precaution
-    has been taken to ensure a simple yet solidly safe base of
-    code. Altering this code can cause unexpected problems and new
-    security risks. It is <strong>highly</strong> recommended you
-    not alter the suEXEC code unless you are well versed in the
-    particulars of security programming and are willing to share
-    your work with the Apache Group for consideration.</p>
-
-    <p align="LEFT">Fourth, and last, it has been the decision of
-    the Apache Group to <strong>NOT</strong> make suEXEC part of
-    the default installation of Apache. To this end, suEXEC
-    configuration requires of the administrator careful attention
-    to details. After due consideration has been given to the
-    various settings for suEXEC, the administrator may install
-    suEXEC through normal installation methods. The values for
-    these settings need to be carefully determined and specified by
-    the administrator to properly maintain system security during
-    the use of suEXEC functionality. It is through this detailed
-    process that the Apache Group hopes to limit suEXEC
-    installation only to those who are careful and determined
-    enough to use it.</p>
-
-    <p align="LEFT">Still with us? Yes? Good. Let's move on!</p>
-
-    <p align="CENTER"><strong><a href="suexec.html">BACK TO
-    CONTENTS</a></strong></p>
-
-    <h3><a id="model" name="model">suEXEC Security Model</a></h3>
-
-    <p align="LEFT">Before we begin configuring and installing
-    suEXEC, we will first discuss the security model you are about
-    to implement. By doing so, you may better understand what
-    exactly is going on inside suEXEC and what precautions are
-    taken to ensure your system's security.</p>
-
-    <p align="LEFT"><strong>suEXEC</strong> is based on a setuid
-    "wrapper" program that is called by the main Apache web server.
-    This wrapper is called when an HTTP request is made for a CGI
-    or SSI program that the administrator has designated to run as
-    a userid other than that of the main server. When such a
-    request is made, Apache provides the suEXEC wrapper with the
-    program's name and the user and group IDs under which the
-    program is to execute.</p>
-
-    <p align="LEFT">The wrapper then employs the following process
-    to determine success or failure -- if any one of these
-    conditions fail, the program logs the failure and exits with an
-    error, otherwise it will continue:</p>
-
-    <ol>
-      <li>
-        <strong>Was the wrapper called with the proper number of
-        arguments?</strong> 
-
-        <blockquote>
-          The wrapper will only execute if it is given the proper
-          number of arguments. The proper argument format is known
-          to the Apache web server. If the wrapper is not receiving
-          the proper number of arguments, it is either being
-          hacked, or there is something wrong with the suEXEC
-          portion of your Apache binary.
-        </blockquote>
-      </li>
-
-      <li>
-        <strong>Is the user executing this wrapper a valid user of
-        this system?</strong> 
-
-        <blockquote>
-          This is to ensure that the user executing the wrapper is
-          truly a user of the system.
-        </blockquote>
-      </li>
-
-      <li>
-        <strong>Is this valid user allowed to run the
-        wrapper?</strong> 
-
-        <blockquote>
-          Is this user the user allowed to run this wrapper? Only
-          one user (the Apache user) is allowed to execute this
-          program.
-        </blockquote>
-      </li>
-
-      <li>
-        <strong>Does the target program have an unsafe hierarchical
-        reference?</strong> 
-
-        <blockquote>
-          Does the target program contain a leading '/' or have a
-          '..' backreference? These are not allowed; the target
-          program must reside within the Apache webspace.
-        </blockquote>
-      </li>
-
-      <li>
-        <strong>Is the target user name valid?</strong> 
-
-        <blockquote>
-          Does the target user exist?
-        </blockquote>
-      </li>
-
-      <li>
-        <strong>Is the target group name valid?</strong> 
-
-        <blockquote>
-          Does the target group exist?
-        </blockquote>
-      </li>
-
-      <li>
-        <strong>Is the target user <em>NOT</em> superuser?</strong>
-        
-
-        <blockquote>
-          Presently, suEXEC does not allow 'root' to execute
-          CGI/SSI programs.
-        </blockquote>
-      </li>
-
-      <li>
-        <strong>Is the target userid <em>ABOVE</em> the minimum ID
-        number?</strong> 
-
-        <blockquote>
-          The minimum user ID number is specified during
-          configuration. This allows you to set the lowest possible
-          userid that will be allowed to execute CGI/SSI programs.
-          This is useful to block out "system" accounts.
-        </blockquote>
-      </li>
-
-      <li>
-        <strong>Is the target group <em>NOT</em> the superuser
-        group?</strong> 
-
-        <blockquote>
-          Presently, suEXEC does not allow the 'root' group to
-          execute CGI/SSI programs.
-        </blockquote>
-      </li>
-
-      <li>
-        <strong>Is the target groupid <em>ABOVE</em> the minimum ID
-        number?</strong> 
-
-        <blockquote>
-          The minimum group ID number is specified during
-          configuration. This allows you to set the lowest possible
-          groupid that will be allowed to execute CGI/SSI programs.
-          This is useful to block out "system" groups.
-        </blockquote>
-      </li>
-
-      <li>
-        <strong>Can the wrapper successfully become the target user
-        and group?</strong> 
-
-        <blockquote>
-          Here is where the program becomes the target user and
-          group via setuid and setgid calls. The group access list
-          is also initialized with all of the groups of which the
-          user is a member.
-        </blockquote>
-      </li>
-
-      <li>
-        <strong>Does the directory in which the program resides
-        exist?</strong> 
-
-        <blockquote>
-          If it doesn't exist, it can't very well contain files.
-        </blockquote>
-      </li>
-
-      <li>
-        <strong>Is the directory within the Apache
-        webspace?</strong> 
-
-        <blockquote>
-          If the request is for a regular portion of the server, is
-          the requested directory within the server's document
-          root? If the request is for a UserDir, is the requested
-          directory within the user's document root?
-        </blockquote>
-      </li>
-
-      <li>
-        <strong>Is the directory <em>NOT</em> writable by anyone
-        else?</strong> 
-
-        <blockquote>
-          We don't want to open up the directory to others; only
-          the owner user may be able to alter this directories
-          contents.
-        </blockquote>
-      </li>
-
-      <li>
-        <strong>Does the target program exist?</strong> 
-
-        <blockquote>
-          If it doesn't exists, it can't very well be executed.
-        </blockquote>
-      </li>
-
-      <li>
-        <strong>Is the target program <em>NOT</em> writable by
-        anyone else?</strong> 
-
-        <blockquote>
-          We don't want to give anyone other than the owner the
-          ability to change the program.
-        </blockquote>
-      </li>
-
-      <li>
-        <strong>Is the target program <em>NOT</em> setuid or
-        setgid?</strong> 
-
-        <blockquote>
-          We do not want to execute programs that will then change
-          our UID/GID again.
-        </blockquote>
-      </li>
-
-      <li>
-        <strong>Is the target user/group the same as the program's
-        user/group?</strong> 
-
-        <blockquote>
-          Is the user the owner of the file?
-        </blockquote>
-      </li>
-
-      <li>
-        <strong>Can we successfully clean the process environment
-        to ensure safe operations?</strong> 
-
-        <blockquote>
-          suEXEC cleans the process' environment by establishing a
-          safe execution PATH (defined during configuration), as
-          well as only passing through those variables whose names
-          are listed in the safe environment list (also created
-          during configuration).
-        </blockquote>
-      </li>
-
-      <li>
-        <strong>Can we successfully become the target program and
-        execute?</strong> 
-
-        <blockquote>
-          Here is where suEXEC ends and the target program begins.
-        </blockquote>
-      </li>
-    </ol>
-    <br />
-     <br />
-     
-
-    <p align="LEFT">This is the standard operation of the the
-    suEXEC wrapper's security model. It is somewhat stringent and
-    can impose new limitations and guidelines for CGI/SSI design,
-    but it was developed carefully step-by-step with security in
-    mind.</p>
-
-    <p align="LEFT">For more information as to how this security
-    model can limit your possibilities in regards to server
-    configuration, as well as what security risks can be avoided
-    with a proper suEXEC setup, see the <a
-    href="#jabberwock">"Beware the Jabberwock"</a> section of this
-    document.</p>
-
-    <p align="CENTER"><strong><a href="suexec.html">BACK TO
-    CONTENTS</a></strong></p>
-
-    <h3><a id="install" name="install">Configuring &amp; Installing
-    suEXEC</a></h3>
-
-    <p align="LEFT">Here's where we begin the fun. If you use
-    Apache 1.2 or prefer to configure Apache 1.3 with the
-    "<code>src/Configure</code>" script you have to edit the suEXEC
-    header file and install the binary in its proper location
-    manually. The following sections describe the configuration and
-    installation for Apache 1.3 with the AutoConf-style interface
-    (APACI).</p>
-
-    <p align="LEFT"><strong>APACI's suEXEC configuration
-    options</strong><br />
-    </p>
-
-    <dl>
-      <dt><code>--enable-suexec</code></dt>
-
-      <dd>This option enables the suEXEC feature which is never
-      installed or activated by default. At least one
-      --suexec-xxxxx option has to be provided together with the
-      --enable-suexec option to let APACI accept your request for
-      using the suEXEC feature.</dd>
-
-      <dt><code>--suexec-caller=<em>UID</em></code></dt>
-
-      <dd>The <a href="mod/mpm_common.html#user">username</a> under which
-      Apache normally runs. This is the only user allowed to
-      execute this program.</dd>
-
-      <dt><code>--suexec-docroot=<em>DIR</em></code></dt>
-
-      <dd>Define as the DocumentRoot set for Apache. This will be
-      the only hierarchy (aside from UserDirs) that can be used for
-      suEXEC behavior. The default directory is the --datadir value
-      with the suffix "/htdocs", <em>e.g.</em> if you configure
-      with "<code>--datadir=/home/apache</code>" the directory
-      "/home/apache/htdocs" is used as document root for the suEXEC
-      wrapper.</dd>
-
-      <dt><code>--suexec-logfile=<em>FILE</em></code></dt>
-
-      <dd>This defines the filename to which all suEXEC
-      transactions and errors are logged (useful for auditing and
-      debugging purposes). By default the logfile is named
-      "suexec_log" and located in your standard logfile directory
-      (--logfiledir).</dd>
-
-      <dt><code>--suexec-userdir=<em>DIR</em></code></dt>
-
-      <dd>Define to be the subdirectory under users' home
-      directories where suEXEC access should be allowed. All
-      executables under this directory will be executable by suEXEC
-      as the user so they should be "safe" programs. If you are
-      using a "simple" UserDir directive (ie. one without a "*" in
-      it) this should be set to the same value. suEXEC will not
-      work properly in cases where the UserDir directive points to
-      a location that is not the same as the user's home directory
-      as referenced in the passwd file. Default value is
-      "public_html".<br />
-       If you have virtual hosts with a different UserDir for each,
-      you will need to define them to all reside in one parent
-      directory; then name that parent directory here. <strong>If
-      this is not defined properly, "~userdir" cgi requests will
-      not work!</strong></dd>
-
-      <dt><code>--suexec-uidmin=<em>UID</em></code></dt>
-
-      <dd>Define this as the lowest UID allowed to be a target user
-      for suEXEC. For most systems, 500 or 100 is common. Default
-      value is 100.</dd>
-
-      <dt><code>--suexec-gidmin=<em>GID</em></code></dt>
-
-      <dd>Define this as the lowest GID allowed to be a target
-      group for suEXEC. For most systems, 100 is common and
-      therefore used as default value.</dd>
-
-      <dt><code>--suexec-safepath=<em>PATH</em></code></dt>
-
-      <dd>Define a safe PATH environment to pass to CGI
-      executables. Default value is
-      "/usr/local/bin:/usr/bin:/bin".</dd>
-    </dl>
-    <br />
-     <br />
-     
-
-    <p align="LEFT"><strong>Checking your suEXEC
-    setup</strong><br />
-     Before you compile and install the suEXEC wrapper you can
-    check the configuration with the --layout option.<br />
-     Example output:</p>
-<pre>
-    suEXEC setup:
-            suexec binary: /usr/local/apache/sbin/suexec
-            document root: /usr/local/apache/share/htdocs
-           userdir suffix: public_html
-                  logfile: /usr/local/apache/var/log/suexec_log
-                safe path: /usr/local/bin:/usr/bin:/bin
-                caller ID: www
-          minimum user ID: 100
-         minimum group ID: 100
-</pre>
-    <br />
-     <br />
-     
-
-    <p align="LEFT"><strong>Compiling and installing the suEXEC
-    wrapper</strong><br />
-     If you have enabled the suEXEC feature with the
-    --enable-suexec option the suexec binary (together with Apache
-    itself) is automatically built if you execute the command
-    "make".<br />
-     After all components have been built you can execute the
-    command "make install" to install them. The binary image
-    "suexec" is installed in the directory defined by the --sbindir
-    option. Default location is
-    "/usr/local/apache/sbin/suexec".<br />
-     Please note that you need <strong><em>root
-    privileges</em></strong> for the installation step. In order
-    for the wrapper to set the user ID, it must be installed as
-    owner <code><em>root</em></code> and must have the setuserid
-    execution bit set for file modes.</p>
-
-    <p align="CENTER"><strong><a href="suexec.html">BACK TO
-    CONTENTS</a></strong></p>
-
-    <h3><a id="enable" name="enable">Enabling &amp; Disabling
-    suEXEC</a></h3>
-
-    <p align="LEFT">Upon startup of Apache, it looks for the file
-    "suexec" in the "sbin" directory (default is
-    "/usr/local/apache/sbin/suexec"). If Apache finds a properly
-    configured suEXEC wrapper, it will print the following message
-    to the error log:</p>
-<pre>
-    [notice] suEXEC mechanism enabled (wrapper: <em>/path/to/suexec</em>)
-</pre>
-    If you don't see this message at server startup, the server is
-    most likely not finding the wrapper program where it expects
-    it, or the executable is not installed <em>setuid root</em>.
-    <br />
-     If you want to enable the suEXEC mechanism for the first time
-    and an Apache server is already running you must kill and
-    restart Apache. Restarting it with a simple HUP or USR1 signal
-    will not be enough. <br />
-     If you want to disable suEXEC you should kill and restart
-    Apache after you have removed the "suexec" file. <br />
-     <br />
-     
-
-    <p align="CENTER"><strong><a href="suexec.html">BACK TO
-    CONTENTS</a></strong></p>
-
-    <h3><a id="usage" name="usage">Using suEXEC</a></h3>
-
-    <p align="LEFT"><strong>Virtual Hosts:</strong><br />
-     One way to use the suEXEC wrapper is through the <a
-    href="mod/mpm_common.html#user">User</a> and <a
-    href="mod/mpm_common.html#group">Group</a> directives in <a
-    href="mod/core.html#virtualhost">VirtualHost</a> definitions.
-    By setting these directives to values different from the main
-    server user ID, all requests for CGI resources will be executed
-    as the <em>User</em> and <em>Group</em> defined for that
-    <code>&lt;VirtualHost&gt;</code>. If only one or neither of
-    these directives are specified for a
-    <code>&lt;VirtualHost&gt;</code> then the main server userid is
-    assumed.</p>
-
-    <p><strong>User directories:</strong><br />
-     The suEXEC wrapper can also be used to execute CGI programs as
-    the user to which the request is being directed. This is
-    accomplished by using the "<strong><code>~</code></strong>"
-    character prefixing the user ID for whom execution is desired.
-    The only requirement needed for this feature to work is for CGI
-    execution to be enabled for the user and that the script must
-    meet the scrutiny of the <a href="#model">security checks</a>
-    above.</p>
-
-    <p align="CENTER"><strong><a href="suexec.html">BACK TO
-    CONTENTS</a></strong></p>
-
-    <h3><a id="debug" name="debug">Debugging suEXEC</a></h3>
-
-    <p align="LEFT">The suEXEC wrapper will write log information
-    to the file defined with the --suexec-logfile option as
-    indicated above. If you feel you have configured and installed
-    the wrapper properly, have a look at this log and the error_log
-    for the server to see where you may have gone astray.</p>
-
-    <p align="CENTER"><strong><a href="suexec.html">BACK TO
-    CONTENTS</a></strong></p>
-
-    <h3><a id="jabberwock" name="jabberwock">Beware the Jabberwock:
-    Warnings &amp; Examples</a></h3>
-
-    <p align="LEFT"><strong>NOTE!</strong> This section may not be
-    complete. For the latest revision of this section of the
-    documentation, see the Apache Group's <a
-    href="http://www.apache.org/docs/suexec.html">Online
-    Documentation</a> version.</p>
-
-    <p align="LEFT">There are a few points of interest regarding
-    the wrapper that can cause limitations on server setup. Please
-    review these before submitting any "bugs" regarding suEXEC.</p>
-
-    <ul>
-      <li><strong>suEXEC Points Of Interest</strong></li>
-
-      <li>
-        Hierarchy limitations 
-
-        <blockquote>
-          For security and efficiency reasons, all suexec requests
-          must remain within either a top-level document root for
-          virtual host requests, or one top-level personal document
-          root for userdir requests. For example, if you have four
-          VirtualHosts configured, you would need to structure all
-          of your VHosts' document roots off of one main Apache
-          document hierarchy to take advantage of suEXEC for
-          VirtualHosts. (Example forthcoming.)
-        </blockquote>
-      </li>
-
-      <li>
-        suEXEC's PATH environment variable 
-
-        <blockquote>
-          This can be a dangerous thing to change. Make certain
-          every path you include in this define is a
-          <strong>trusted</strong> directory. You don't want to
-          open people up to having someone from across the world
-          running a trojan horse on them.
-        </blockquote>
-      </li>
-
-      <li>
-        Altering the suEXEC code 
-
-        <blockquote>
-          Again, this can cause <strong>Big Trouble</strong> if you
-          try this without knowing what you are doing. Stay away
-          from it if at all possible.
-        </blockquote>
-      </li>
-    </ul>
-
-    <p align="CENTER"><strong><a href="suexec.html">BACK TO
-    CONTENTS</a></strong></p>
-    <!--#include virtual="footer.html" -->
-  </body>
-</html>
-
diff --git a/docs/manual/suexec.html.en b/docs/manual/suexec.html.en
deleted file mode 100644
index 42098e6..0000000
--- a/docs/manual/suexec.html.en
+++ /dev/null
@@ -1,620 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta name="generator" content="HTML Tidy, see www.w3.org" />
-
-    <title>Apache suEXEC Support</title>
-  </head>
-  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-
-  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-  vlink="#000080" alink="#FF0000">
-    <!--#include virtual="header.html" -->
-
-    <h1 align="CENTER">Apache suEXEC Support</h1>
-
-    <ol>
-      <li><big><strong>CONTENTS</strong></big></li>
-
-      <li><a href="#what">What is suEXEC?</a></li>
-
-      <li><a href="#before">Before we begin.</a></li>
-
-      <li><a href="#model">suEXEC Security Model.</a></li>
-
-      <li><a href="#install">Configuring &amp; Installing
-      suEXEC</a></li>
-
-      <li><a href="#enable">Enabling &amp; Disabling
-      suEXEC</a></li>
-
-      <li><a href="#usage">Using suEXEC</a></li>
-
-      <li><a href="#debug">Debugging suEXEC</a></li>
-
-      <li><a href="#jabberwock">Beware the Jabberwock: Warnings
-      &amp; Examples</a></li>
-    </ol>
-    <br />
-     <br />
-     
-
-    <h3><a id="what" name="what">What is suEXEC?</a></h3>
-
-    <p align="LEFT">The <strong>suEXEC</strong> feature --
-    introduced in Apache 1.2 -- provides Apache users the ability
-    to run <strong>CGI</strong> and <strong>SSI</strong> programs
-    under user IDs different from the user ID of the calling
-    web-server. Normally, when a CGI or SSI program executes, it
-    runs as the same user who is running the web server.</p>
-
-    <p align="LEFT">Used properly, this feature can reduce
-    considerably the security risks involved with allowing users to
-    develop and run private CGI or SSI programs. However, if suEXEC
-    is improperly configured, it can cause any number of problems
-    and possibly create new holes in your computer's security. If
-    you aren't familiar with managing setuid root programs and the
-    security issues they present, we highly recommend that you not
-    consider using suEXEC.</p>
-
-    <p align="CENTER"><strong><a href="suexec.html">BACK TO
-    CONTENTS</a></strong></p>
-
-    <h3><a id="before" name="before">Before we begin.</a></h3>
-
-    <p align="LEFT">Before jumping head-first into this document,
-    you should be aware of the assumptions made on the part of the
-    Apache Group and this document.</p>
-
-    <p align="LEFT">First, it is assumed that you are using a UNIX
-    derivate operating system that is capable of
-    <strong>setuid</strong> and <strong>setgid</strong> operations.
-    All command examples are given in this regard. Other platforms,
-    if they are capable of supporting suEXEC, may differ in their
-    configuration.</p>
-
-    <p align="LEFT">Second, it is assumed you are familiar with
-    some basic concepts of your computer's security and its
-    administration. This involves an understanding of
-    <strong>setuid/setgid</strong> operations and the various
-    effects they may have on your system and its level of
-    security.</p>
-
-    <p align="LEFT">Third, it is assumed that you are using an
-    <strong>unmodified</strong> version of suEXEC code. All code
-    for suEXEC has been carefully scrutinized and tested by the
-    developers as well as numerous beta testers. Every precaution
-    has been taken to ensure a simple yet solidly safe base of
-    code. Altering this code can cause unexpected problems and new
-    security risks. It is <strong>highly</strong> recommended you
-    not alter the suEXEC code unless you are well versed in the
-    particulars of security programming and are willing to share
-    your work with the Apache Group for consideration.</p>
-
-    <p align="LEFT">Fourth, and last, it has been the decision of
-    the Apache Group to <strong>NOT</strong> make suEXEC part of
-    the default installation of Apache. To this end, suEXEC
-    configuration requires of the administrator careful attention
-    to details. After due consideration has been given to the
-    various settings for suEXEC, the administrator may install
-    suEXEC through normal installation methods. The values for
-    these settings need to be carefully determined and specified by
-    the administrator to properly maintain system security during
-    the use of suEXEC functionality. It is through this detailed
-    process that the Apache Group hopes to limit suEXEC
-    installation only to those who are careful and determined
-    enough to use it.</p>
-
-    <p align="LEFT">Still with us? Yes? Good. Let's move on!</p>
-
-    <p align="CENTER"><strong><a href="suexec.html">BACK TO
-    CONTENTS</a></strong></p>
-
-    <h3><a id="model" name="model">suEXEC Security Model</a></h3>
-
-    <p align="LEFT">Before we begin configuring and installing
-    suEXEC, we will first discuss the security model you are about
-    to implement. By doing so, you may better understand what
-    exactly is going on inside suEXEC and what precautions are
-    taken to ensure your system's security.</p>
-
-    <p align="LEFT"><strong>suEXEC</strong> is based on a setuid
-    "wrapper" program that is called by the main Apache web server.
-    This wrapper is called when an HTTP request is made for a CGI
-    or SSI program that the administrator has designated to run as
-    a userid other than that of the main server. When such a
-    request is made, Apache provides the suEXEC wrapper with the
-    program's name and the user and group IDs under which the
-    program is to execute.</p>
-
-    <p align="LEFT">The wrapper then employs the following process
-    to determine success or failure -- if any one of these
-    conditions fail, the program logs the failure and exits with an
-    error, otherwise it will continue:</p>
-
-    <ol>
-      <li>
-        <strong>Was the wrapper called with the proper number of
-        arguments?</strong> 
-
-        <blockquote>
-          The wrapper will only execute if it is given the proper
-          number of arguments. The proper argument format is known
-          to the Apache web server. If the wrapper is not receiving
-          the proper number of arguments, it is either being
-          hacked, or there is something wrong with the suEXEC
-          portion of your Apache binary.
-        </blockquote>
-      </li>
-
-      <li>
-        <strong>Is the user executing this wrapper a valid user of
-        this system?</strong> 
-
-        <blockquote>
-          This is to ensure that the user executing the wrapper is
-          truly a user of the system.
-        </blockquote>
-      </li>
-
-      <li>
-        <strong>Is this valid user allowed to run the
-        wrapper?</strong> 
-
-        <blockquote>
-          Is this user the user allowed to run this wrapper? Only
-          one user (the Apache user) is allowed to execute this
-          program.
-        </blockquote>
-      </li>
-
-      <li>
-        <strong>Does the target program have an unsafe hierarchical
-        reference?</strong> 
-
-        <blockquote>
-          Does the target program contain a leading '/' or have a
-          '..' backreference? These are not allowed; the target
-          program must reside within the Apache webspace.
-        </blockquote>
-      </li>
-
-      <li>
-        <strong>Is the target user name valid?</strong> 
-
-        <blockquote>
-          Does the target user exist?
-        </blockquote>
-      </li>
-
-      <li>
-        <strong>Is the target group name valid?</strong> 
-
-        <blockquote>
-          Does the target group exist?
-        </blockquote>
-      </li>
-
-      <li>
-        <strong>Is the target user <em>NOT</em> superuser?</strong>
-        
-
-        <blockquote>
-          Presently, suEXEC does not allow 'root' to execute
-          CGI/SSI programs.
-        </blockquote>
-      </li>
-
-      <li>
-        <strong>Is the target userid <em>ABOVE</em> the minimum ID
-        number?</strong> 
-
-        <blockquote>
-          The minimum user ID number is specified during
-          configuration. This allows you to set the lowest possible
-          userid that will be allowed to execute CGI/SSI programs.
-          This is useful to block out "system" accounts.
-        </blockquote>
-      </li>
-
-      <li>
-        <strong>Is the target group <em>NOT</em> the superuser
-        group?</strong> 
-
-        <blockquote>
-          Presently, suEXEC does not allow the 'root' group to
-          execute CGI/SSI programs.
-        </blockquote>
-      </li>
-
-      <li>
-        <strong>Is the target groupid <em>ABOVE</em> the minimum ID
-        number?</strong> 
-
-        <blockquote>
-          The minimum group ID number is specified during
-          configuration. This allows you to set the lowest possible
-          groupid that will be allowed to execute CGI/SSI programs.
-          This is useful to block out "system" groups.
-        </blockquote>
-      </li>
-
-      <li>
-        <strong>Can the wrapper successfully become the target user
-        and group?</strong> 
-
-        <blockquote>
-          Here is where the program becomes the target user and
-          group via setuid and setgid calls. The group access list
-          is also initialized with all of the groups of which the
-          user is a member.
-        </blockquote>
-      </li>
-
-      <li>
-        <strong>Does the directory in which the program resides
-        exist?</strong> 
-
-        <blockquote>
-          If it doesn't exist, it can't very well contain files.
-        </blockquote>
-      </li>
-
-      <li>
-        <strong>Is the directory within the Apache
-        webspace?</strong> 
-
-        <blockquote>
-          If the request is for a regular portion of the server, is
-          the requested directory within the server's document
-          root? If the request is for a UserDir, is the requested
-          directory within the user's document root?
-        </blockquote>
-      </li>
-
-      <li>
-        <strong>Is the directory <em>NOT</em> writable by anyone
-        else?</strong> 
-
-        <blockquote>
-          We don't want to open up the directory to others; only
-          the owner user may be able to alter this directories
-          contents.
-        </blockquote>
-      </li>
-
-      <li>
-        <strong>Does the target program exist?</strong> 
-
-        <blockquote>
-          If it doesn't exists, it can't very well be executed.
-        </blockquote>
-      </li>
-
-      <li>
-        <strong>Is the target program <em>NOT</em> writable by
-        anyone else?</strong> 
-
-        <blockquote>
-          We don't want to give anyone other than the owner the
-          ability to change the program.
-        </blockquote>
-      </li>
-
-      <li>
-        <strong>Is the target program <em>NOT</em> setuid or
-        setgid?</strong> 
-
-        <blockquote>
-          We do not want to execute programs that will then change
-          our UID/GID again.
-        </blockquote>
-      </li>
-
-      <li>
-        <strong>Is the target user/group the same as the program's
-        user/group?</strong> 
-
-        <blockquote>
-          Is the user the owner of the file?
-        </blockquote>
-      </li>
-
-      <li>
-        <strong>Can we successfully clean the process environment
-        to ensure safe operations?</strong> 
-
-        <blockquote>
-          suEXEC cleans the process' environment by establishing a
-          safe execution PATH (defined during configuration), as
-          well as only passing through those variables whose names
-          are listed in the safe environment list (also created
-          during configuration).
-        </blockquote>
-      </li>
-
-      <li>
-        <strong>Can we successfully become the target program and
-        execute?</strong> 
-
-        <blockquote>
-          Here is where suEXEC ends and the target program begins.
-        </blockquote>
-      </li>
-    </ol>
-    <br />
-     <br />
-     
-
-    <p align="LEFT">This is the standard operation of the the
-    suEXEC wrapper's security model. It is somewhat stringent and
-    can impose new limitations and guidelines for CGI/SSI design,
-    but it was developed carefully step-by-step with security in
-    mind.</p>
-
-    <p align="LEFT">For more information as to how this security
-    model can limit your possibilities in regards to server
-    configuration, as well as what security risks can be avoided
-    with a proper suEXEC setup, see the <a
-    href="#jabberwock">"Beware the Jabberwock"</a> section of this
-    document.</p>
-
-    <p align="CENTER"><strong><a href="suexec.html">BACK TO
-    CONTENTS</a></strong></p>
-
-    <h3><a id="install" name="install">Configuring &amp; Installing
-    suEXEC</a></h3>
-
-    <p align="LEFT">Here's where we begin the fun. If you use
-    Apache 1.2 or prefer to configure Apache 1.3 with the
-    "<code>src/Configure</code>" script you have to edit the suEXEC
-    header file and install the binary in its proper location
-    manually. The following sections describe the configuration and
-    installation for Apache 1.3 with the AutoConf-style interface
-    (APACI).</p>
-
-    <p align="LEFT"><strong>APACI's suEXEC configuration
-    options</strong><br />
-    </p>
-
-    <dl>
-      <dt><code>--enable-suexec</code></dt>
-
-      <dd>This option enables the suEXEC feature which is never
-      installed or activated by default. At least one
-      --suexec-xxxxx option has to be provided together with the
-      --enable-suexec option to let APACI accept your request for
-      using the suEXEC feature.</dd>
-
-      <dt><code>--suexec-caller=<em>UID</em></code></dt>
-
-      <dd>The <a href="mod/mpm_common.html#user">username</a> under which
-      Apache normally runs. This is the only user allowed to
-      execute this program.</dd>
-
-      <dt><code>--suexec-docroot=<em>DIR</em></code></dt>
-
-      <dd>Define as the DocumentRoot set for Apache. This will be
-      the only hierarchy (aside from UserDirs) that can be used for
-      suEXEC behavior. The default directory is the --datadir value
-      with the suffix "/htdocs", <em>e.g.</em> if you configure
-      with "<code>--datadir=/home/apache</code>" the directory
-      "/home/apache/htdocs" is used as document root for the suEXEC
-      wrapper.</dd>
-
-      <dt><code>--suexec-logfile=<em>FILE</em></code></dt>
-
-      <dd>This defines the filename to which all suEXEC
-      transactions and errors are logged (useful for auditing and
-      debugging purposes). By default the logfile is named
-      "suexec_log" and located in your standard logfile directory
-      (--logfiledir).</dd>
-
-      <dt><code>--suexec-userdir=<em>DIR</em></code></dt>
-
-      <dd>Define to be the subdirectory under users' home
-      directories where suEXEC access should be allowed. All
-      executables under this directory will be executable by suEXEC
-      as the user so they should be "safe" programs. If you are
-      using a "simple" UserDir directive (ie. one without a "*" in
-      it) this should be set to the same value. suEXEC will not
-      work properly in cases where the UserDir directive points to
-      a location that is not the same as the user's home directory
-      as referenced in the passwd file. Default value is
-      "public_html".<br />
-       If you have virtual hosts with a different UserDir for each,
-      you will need to define them to all reside in one parent
-      directory; then name that parent directory here. <strong>If
-      this is not defined properly, "~userdir" cgi requests will
-      not work!</strong></dd>
-
-      <dt><code>--suexec-uidmin=<em>UID</em></code></dt>
-
-      <dd>Define this as the lowest UID allowed to be a target user
-      for suEXEC. For most systems, 500 or 100 is common. Default
-      value is 100.</dd>
-
-      <dt><code>--suexec-gidmin=<em>GID</em></code></dt>
-
-      <dd>Define this as the lowest GID allowed to be a target
-      group for suEXEC. For most systems, 100 is common and
-      therefore used as default value.</dd>
-
-      <dt><code>--suexec-safepath=<em>PATH</em></code></dt>
-
-      <dd>Define a safe PATH environment to pass to CGI
-      executables. Default value is
-      "/usr/local/bin:/usr/bin:/bin".</dd>
-    </dl>
-    <br />
-     <br />
-     
-
-    <p align="LEFT"><strong>Checking your suEXEC
-    setup</strong><br />
-     Before you compile and install the suEXEC wrapper you can
-    check the configuration with the --layout option.<br />
-     Example output:</p>
-<pre>
-    suEXEC setup:
-            suexec binary: /usr/local/apache/sbin/suexec
-            document root: /usr/local/apache/share/htdocs
-           userdir suffix: public_html
-                  logfile: /usr/local/apache/var/log/suexec_log
-                safe path: /usr/local/bin:/usr/bin:/bin
-                caller ID: www
-          minimum user ID: 100
-         minimum group ID: 100
-</pre>
-    <br />
-     <br />
-     
-
-    <p align="LEFT"><strong>Compiling and installing the suEXEC
-    wrapper</strong><br />
-     If you have enabled the suEXEC feature with the
-    --enable-suexec option the suexec binary (together with Apache
-    itself) is automatically built if you execute the command
-    "make".<br />
-     After all components have been built you can execute the
-    command "make install" to install them. The binary image
-    "suexec" is installed in the directory defined by the --sbindir
-    option. Default location is
-    "/usr/local/apache/sbin/suexec".<br />
-     Please note that you need <strong><em>root
-    privileges</em></strong> for the installation step. In order
-    for the wrapper to set the user ID, it must be installed as
-    owner <code><em>root</em></code> and must have the setuserid
-    execution bit set for file modes.</p>
-
-    <p align="CENTER"><strong><a href="suexec.html">BACK TO
-    CONTENTS</a></strong></p>
-
-    <h3><a id="enable" name="enable">Enabling &amp; Disabling
-    suEXEC</a></h3>
-
-    <p align="LEFT">Upon startup of Apache, it looks for the file
-    "suexec" in the "sbin" directory (default is
-    "/usr/local/apache/sbin/suexec"). If Apache finds a properly
-    configured suEXEC wrapper, it will print the following message
-    to the error log:</p>
-<pre>
-    [notice] suEXEC mechanism enabled (wrapper: <em>/path/to/suexec</em>)
-</pre>
-    If you don't see this message at server startup, the server is
-    most likely not finding the wrapper program where it expects
-    it, or the executable is not installed <em>setuid root</em>.
-    <br />
-     If you want to enable the suEXEC mechanism for the first time
-    and an Apache server is already running you must kill and
-    restart Apache. Restarting it with a simple HUP or USR1 signal
-    will not be enough. <br />
-     If you want to disable suEXEC you should kill and restart
-    Apache after you have removed the "suexec" file. <br />
-     <br />
-     
-
-    <p align="CENTER"><strong><a href="suexec.html">BACK TO
-    CONTENTS</a></strong></p>
-
-    <h3><a id="usage" name="usage">Using suEXEC</a></h3>
-
-    <p align="LEFT"><strong>Virtual Hosts:</strong><br />
-     One way to use the suEXEC wrapper is through the <a
-    href="mod/mpm_common.html#user">User</a> and <a
-    href="mod/mpm_common.html#group">Group</a> directives in <a
-    href="mod/core.html#virtualhost">VirtualHost</a> definitions.
-    By setting these directives to values different from the main
-    server user ID, all requests for CGI resources will be executed
-    as the <em>User</em> and <em>Group</em> defined for that
-    <code>&lt;VirtualHost&gt;</code>. If only one or neither of
-    these directives are specified for a
-    <code>&lt;VirtualHost&gt;</code> then the main server userid is
-    assumed.</p>
-
-    <p><strong>User directories:</strong><br />
-     The suEXEC wrapper can also be used to execute CGI programs as
-    the user to which the request is being directed. This is
-    accomplished by using the "<strong><code>~</code></strong>"
-    character prefixing the user ID for whom execution is desired.
-    The only requirement needed for this feature to work is for CGI
-    execution to be enabled for the user and that the script must
-    meet the scrutiny of the <a href="#model">security checks</a>
-    above.</p>
-
-    <p align="CENTER"><strong><a href="suexec.html">BACK TO
-    CONTENTS</a></strong></p>
-
-    <h3><a id="debug" name="debug">Debugging suEXEC</a></h3>
-
-    <p align="LEFT">The suEXEC wrapper will write log information
-    to the file defined with the --suexec-logfile option as
-    indicated above. If you feel you have configured and installed
-    the wrapper properly, have a look at this log and the error_log
-    for the server to see where you may have gone astray.</p>
-
-    <p align="CENTER"><strong><a href="suexec.html">BACK TO
-    CONTENTS</a></strong></p>
-
-    <h3><a id="jabberwock" name="jabberwock">Beware the Jabberwock:
-    Warnings &amp; Examples</a></h3>
-
-    <p align="LEFT"><strong>NOTE!</strong> This section may not be
-    complete. For the latest revision of this section of the
-    documentation, see the Apache Group's <a
-    href="http://www.apache.org/docs/suexec.html">Online
-    Documentation</a> version.</p>
-
-    <p align="LEFT">There are a few points of interest regarding
-    the wrapper that can cause limitations on server setup. Please
-    review these before submitting any "bugs" regarding suEXEC.</p>
-
-    <ul>
-      <li><strong>suEXEC Points Of Interest</strong></li>
-
-      <li>
-        Hierarchy limitations 
-
-        <blockquote>
-          For security and efficiency reasons, all suexec requests
-          must remain within either a top-level document root for
-          virtual host requests, or one top-level personal document
-          root for userdir requests. For example, if you have four
-          VirtualHosts configured, you would need to structure all
-          of your VHosts' document roots off of one main Apache
-          document hierarchy to take advantage of suEXEC for
-          VirtualHosts. (Example forthcoming.)
-        </blockquote>
-      </li>
-
-      <li>
-        suEXEC's PATH environment variable 
-
-        <blockquote>
-          This can be a dangerous thing to change. Make certain
-          every path you include in this define is a
-          <strong>trusted</strong> directory. You don't want to
-          open people up to having someone from across the world
-          running a trojan horse on them.
-        </blockquote>
-      </li>
-
-      <li>
-        Altering the suEXEC code 
-
-        <blockquote>
-          Again, this can cause <strong>Big Trouble</strong> if you
-          try this without knowing what you are doing. Stay away
-          from it if at all possible.
-        </blockquote>
-      </li>
-    </ul>
-
-    <p align="CENTER"><strong><a href="suexec.html">BACK TO
-    CONTENTS</a></strong></p>
-    <!--#include virtual="footer.html" -->
-  </body>
-</html>
-
diff --git a/docs/manual/upgrading.html.en b/docs/manual/upgrading.html.en
deleted file mode 100644
index ef6ec97..0000000
--- a/docs/manual/upgrading.html.en
+++ /dev/null
@@ -1,180 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta name="generator" content="HTML Tidy, see www.w3.org" />
-
-    <title>Upgrading to 2.0 from 1.3</title>
-  </head>
-  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-
-  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-  vlink="#000080" alink="#FF0000">
-    <!--#include virtual="header.html" -->
-
-    <h1 align="CENTER">Upgrading to 2.0 from 1.3</h1>
-
-    <p>In order to assist folks upgrading, we maintain a document
-    describing information critical to existing Apache users. These
-    are intended to be brief notes, and you should be able to find
-    more information in either the <a
-    href="new_features_2_0.html">New Features</a> document, or in
-    the <code>src/CHANGES</code> file.</p>
-
-    <h3>Compile-Time Configuration Changes</h3>
-
-    <ul>
-      <li>Apache now uses an <code>autoconf</code> and
-      <code>libtool</code> system for <a
-      href="install.html">configuring the build processes</a>.
-      Using this system is similar to, but not the same as, using
-      the APACI system in Apache 1.3.</li>
-
-      <li>In addition to the usual selection of modules which you
-      can choose to compile, Apache 2.0 has moved the main part of
-      request processing into <a href="mpm.html">Multi-Processing
-      Modules</a> (MPMs).</li>
-    </ul>
-
-    <h3>Run-Time Configuration Changes</h3>
-
-    <ul>
-      <li>Many directives that were in the core server in Apache
-      1.3 are now in the MPMs. If you wish the behavior of the
-      server to be as similar as possible to the behavior of Apache
-      1.3, you should select the <a
-      href="mod/prefork.html">prefork</a> MPM. Other MPMs will have
-      different directives to control process creation and request
-      processing.</li>
-
-      <li>The <a href="mod/mod_proxy.html">proxy module</a> has been
-      revamped to bring it up to HTTP/1.1.  Among the important changes,
-      proxy access control is now placed inside a &lt;Proxy&gt; block
-      rather than a &lt;Directory proxy:&gt; block.</li>
-
-      <li>The handling of PATH_INFO (trailing path information after
-      the true filename) has changed for some modules.  Modules
-      that were previously implemented as a handler but are now
-      implemented as a filter may no longer accept requests with
-      PATH_INFO.  Filters such as <a
-      href="mod/mod_include.html">INCLUDES</a> are implemented on top
-      of the core handler, and therefore reject requests with
-      PATH_INFO.  You can use the <a
-      href="mod/core.html#acceptpathinfo">AcceptPathInfo</a> directive to
-      force the core handler to accept requests with PATH_INFO and
-      thereby restore the ability to use PATH_INFO in server-side 
-      includes.</li>
-
-      <li>The <code>CacheNegotiatedDocs</code> directive now takes
-      the argument <code>on</code> or <code>off</code>. Existing
-      instances of <code>CacheNegotiatedDocs</code> should be
-      replaced with <code>CacheNegotiatedDocs on</code>.</li>
-
-      <li>
-        The <code>ErrorDocument</code> directive no longer uses a
-        quote at the beginning of the argument to indicate a text
-        message. Instead, you should enclose the message in double
-        quotes. For example, existing instances of 
-
-        <blockquote>
-          <code>ErrorDocument 403 "Some Message</code>
-        </blockquote>
-        should be replaced with 
-
-        <blockquote>
-          <code>ErrorDocument 403 "Some Message"</code>
-        </blockquote>
-        As long as the second argument is not a valid URL or
-        pathname, it will be treated as a text message.
-      </li>
-
-      <li>The <code>AccessConfig</code> and
-      <code>ResourceConfig</code> directives no longer exist.
-      Existing instances of these directives can be replaced with
-      the <a href="mod/core.html#include"><code>Include</code></a>
-      directive which has equivalent functionality. If you were
-      making use of the default values of these directives without
-      including them in the configuration files, you may need to
-      add <code>Include conf/access.conf</code> and <code>Include
-      conf/srm.conf</code> to your httpd.conf. In order to assure
-      that Apache reads the configuration files in the same order
-      as was implied by the older directives, the
-      <code>Include</code> directives should be placed at the end
-      of httpd.conf, with the one for <code>srm.conf</code>
-      preceding the one for <code>access.conf</code>.</li>
-
-      <li>The <code>BindAddress</code> and <code>Port</code> 
-      directives no longer exist.  Equivalent functionality is 
-      provided with the more flexible 
-      <code><a href="mod/mpm_common.html#listen">Listen</a></code>
-      directive.</li>
-
-      <li>Another use of the <code>Port</code> 
-      directive in Apache-1.3 was setting the port number to be used
-      in self-referential URL's. The Apache-2.0 equivalent is
-      the new <a href="mod/core.html#servername"><code>ServerName</code></a>
-      syntax: it has been changed to allow specifying both the
-      hostname <em>and</em> the port number for self-referential URL's
-      in one directive.</li>
-
-      <li>The <code>ServerType</code> directive no longer exists.
-      The method used to serve requests is now determined by the
-      selection of MPM. There is currently no MPM designed to be
-      launched by inetd.</li>
-
-      <li>The mod_log_agent and mod_log_referer modules which
-      provided the <code>AgentLog</code>, <code>RefererLog</code>
-      and <code>RefererIgnore</code> directives have been removed.
-      Agent and referer logs are still available using the <a
-      href="mod/mod_log_config.html#customlog">CustomLog</a>
-      directive of mod_log_config.</li>
-
-      <li>The <code>AddModule</code> and
-      <code>ClearModuleList</code> directives no longer exist.
-      These directives where used to ensure that modules could be
-      enabled in the correct order. The new Apache 2.0 API allows
-      modules to explicitly specify their ordering, eliminating the
-      need for these directives.</li>
-
-      <li>The <code>FancyIndexing</code> directive has been removed.
-      The same functionality is available through the
-      <code>FancyIndexing</code> option to the <a
-      href="mod/mod_autoindex.html#indexoptions">IndexOptions</a>
-      directive.</li>
-
-    </ul>
-
-    <h3>Misc Changes</h3>
-
-    <ul>
-      <li>The <code>httpd</code> command line option
-      <code>-S</code> which was used for printing the virtual host
-      configuration has been replaced by <code>-t -D
-      DUMP_VHOSTS</code>.</li>
-
-      <li>The module mod_auth_digest, which was experimental in
-      Apache 1.3 is now a standard module.</li>
-
-      <li>The mod_mmap_static module, which was experimental in
-      Apache 1.3 has been replaced with mod_file_cache.</li>
-
-      <li>The distribution has been completely reorganized so that
-      it no longer contains an independent <code>src</code>
-      directory. Instead, the sources are logically organized under
-      the main distribution directory, and installations of the
-      compiled server should be directed to a separate
-      directory.</li>
-    </ul>
-
-    <h3>Third Party Modules</h3>
-
-    <p>Extensive changes were made to the server API in Apache 2.0.
-    Existing modules designed for the Apache 1.3 API will
-    <strong>not</strong> work in Apache 2.0 without modification.
-    Details are provided in the <a href="developer/">developer
-    documentation</a>.</p>
-    <!--#include virtual="footer.html" -->
-  </body>
-</html>
-
diff --git a/docs/manual/upgrading.html.fr b/docs/manual/upgrading.html.fr
deleted file mode 100644
index fb40365..0000000
--- a/docs/manual/upgrading.html.fr
+++ /dev/null
@@ -1,151 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta name="generator" content="HTML Tidy, see www.w3.org" />
-    <meta http-equiv="Content-Type"
-    content="text/html; charset=iso-8859-1" />
-
-    <title>Mise &agrave; jour de la version 1.3 &agrave; la version
-    2.0</title>
-  </head>
-  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-
-  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-  vlink="#000080" alink="#FF0000">
-    <!--#include virtual="header.html" -->
-
-    <h1 align="CENTER">Mise &agrave; de la version 1.3 &agrave; la
-    version 2.0</h1>
-
-    <p>Afin d'aider les personnes souhaitant se mettre &agrave;
-    jour, nous maintenons un document d&eacute;crivant les
-    informations critiques concernant les utilisateurs d'Apache.
-    Ces informations sont sous la forme de br&egrave;ves notes, et
-    vous pouvez trouver plus d'informations dans le document <a
-    href="new_features_2_0.html">Nouvelles
-    fonctionnalit&eacute;s</a> ou dans le fichier
-    <code>src/CHANGES</code>.</p>
-
-    <h3>Changement de la configuration &agrave; la compilation</h3>
-
-    <ul>
-      <li>Apache utilise maintenant <code>autoconf</code> et
-      <code>libtool</code> afin de configurer la compilation.
-      L'utilisation de ces outils est similaire, mais pas tout
-      &agrave; fait identique, au syst&egrave;me APACI de
-      configuration existant dans la version 1.3 d'Apache.</li>
-
-      <li>En plus de l'habituelle s&eacute;lection de modules que
-      vous pouvez choisir de compiler, Apache 2.0 a
-      d&eacute;plac&eacute; la majeure partie du traitement des
-      requ&ecirc;tes dans les <a href="mpm.html">modules
-      multi-traitements</a> (MPMs).</li>
-    </ul>
-
-    <h3>Changement de la configuration &agrave;
-    l'ex&eacute;cution</h3>
-
-    <ul>
-      <li>La directive <code>CacheNegotiatedDocs</code> prend
-      maintenant un param&egrave;tre qui est soit <code>on</code>
-      soit <code>off</code>. Les configurations existantes
-      utilisant la directive <code>CacheNegotiatedDocs</code>
-      doivent la remplacer par <code>CacheNegotiatedDocs
-      on</code>.</li>
-
-      <li>
-        La directive <code>ErrorDocument</code> n'utilise plus de
-        guillemets ou d'apostrophes au d&eacute;but du
-        param&egrave;tre indiquant le message. Dor&eacute;navant,
-        le message devra &ecirc;tre entre guillemets. Par exemple,
-        la directive 
-
-        <blockquote>
-          <code>ErrorDocument 403 "Some Message</code>
-        </blockquote>
-        devra &ecirc;tre remplac&eacute; par 
-
-        <blockquote>
-          <code>ErrorDocument 403 "Some Message"</code>
-        </blockquote>
-        Si le second argument n'est pas une URL ou un chemin
-        valide, il sera trait&eacute; comme un message.
-      </li>
-
-      <li>Les directives <code>AccessConfig</code> et
-      <code>ResourceConfig</code> n'existent plus. Ces directives
-      peuvent &ecirc;tre remplac&eacute;es de mani&egrave;re
-      &eacute;quivalente par la directive <a
-      href="mod/core.html#include"><code>Include</code></a>. Si
-      vous utilisiez ces directives en utilisant les valeurs par
-      d&eacute;faut sans les d&eacute;finir explicitement, vous
-      devez ajouter les lignes <code>Include
-      conf/access.conf</code> et <code>Include conf/srm.conf</code>
-      dans votre fichier httpd.conf. Afin de garantir qu'Apache lit
-      les diff&eacute;rents fichiers de configuration dans le
-      m&ecirc;me ordre que celui pour les anciennes directives, Les
-      directives <code>Include</code> doivent &ecirc;tre
-      situ&eacute;es &agrave; la fin du fichier httpd.conf, celle
-      repr&eacute;sentant <code>srm.conf</code> avant celle pour
-      <code>access.conf</code>.</li>
-
-      <li>La directive <code>BindAddress</code> n'existe plus. La
-      m&ecirc;me fonctionnalit&eacute; est fournie par la directive
-      <code><a href="mod/mpm_common.html">Listen</a></code>.</li>
-
-      <li>La directive <code>ExtendedStatus</code> n'existe plus.
-      Le suivi des statuts a &eacute;t&eacute; enti&egrave;rement
-      r&eacute;&eacute;crit afin de b&eacute;n&eacute;ficier du
-      nouveau syst&egrave;me MPM.</li>
-
-      <li>La directive <code>ServerType</code> n'existe plus. La
-      m&eacute;thode utilis&eacute;e pour servir les requ&ecirc;tes
-      est d&eacute;termin&eacute;e maintenant par la
-      s&eacute;lection d'un MPM. Il n'existe pas actuellement de
-      MPM con&ccedil;u pour &ecirc;tre lanc&eacute; par inetd.</li>
-
-      <li>Beaucoup de directives qui &eacute;taient situ&eacute;es
-      dans le noyau du serveur pour la version 1.3 se trouvent
-      maintenant dans les MPMs.</li>
-
-      <li>Les modules mod_log_agent et mod_log_referer qui
-      traitaient les directives <code>AgentLog</code>,
-      <code>RefererLog</code> et <code>RefererIgnore</code> ont
-      &eacute;t&eacute; supprim&eacute;s. Le tra&ccedil;age des
-      agents et r&eacute;f&eacute;rants et toujours disponible en
-      utilisant la directive <a
-      href="mod/mod_log_config.html#customlog">CustomLog</a> du
-      module mod_log_config.</li>
-    </ul>
-
-    <h3>Changements divers</h3>
-
-    <ul>
-      <li>L'option <code>-S</code> du programme <code>httpd</code>
-      qui servait &agrave; afficher la configuration des
-      h&ocirc;tes virtuels est remplac&eacute; par <code>-t -D
-      DUMP_VHOSTS</code>.</li>
-
-      <li>Le module mod_auth_digest, qui &eacute;tait
-      exp&eacute;rimental dans la version 1.3, est maintenant un
-      module standard.</li>
-
-      <li>Le module mod_mmap_static, qui &eacute;tait
-      exp&eacute;rimental dans la version 1.3 a &eacute;t&eacute;
-      remplac&eacute; par le module mod_file_cache.</li>
-    </ul>
-
-    <h3>Modules tiers</h3>
-
-    <p>D'&eacute;normes changements ont &eacute;t&eacute;
-    r&eacute;alis&eacute;s sur l'API du serveur Apache 2.0. Les
-    modules con&ccedil;us &agrave; l'aide de l'API Apache 1.3
-    <strong>ne fonctionneront pas</strong> sur Apache 2.0 sans
-    modifications. Plus de d&eacute;tails sont fournis dans la <a
-    href="developer/">documentation du d&eacute;veloppeur</a>.</p>
-    <!--#include virtual="footer.html" -->
-  </body>
-</html>
-
diff --git a/docs/manual/urlmapping.html b/docs/manual/urlmapping.html
deleted file mode 100755
index 627dcf0..0000000
--- a/docs/manual/urlmapping.html
+++ /dev/null
@@ -1,296 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta name="generator" content="HTML Tidy, see www.w3.org" />
-
-    <title>Mapping URLs to Filesystem Locations - Apache HTTP
-    Server</title>
-  </head>
-  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-
-  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-  vlink="#000080" alink="#FF0000">
-    <!--#include virtual="header.html" -->
-
-    <h1 align="center">Mapping URLs to Filesystem Locations</h1>
-
-    <p>This document explains how Apache uses the URL of a request
-    to determine the filesystem location from which to serve a
-    file.</p>
-
-    <ul>
-      <li><a href="#documentroot">DocumentRoot</a></li>
-
-      <li><a href="#outside">Files Outside the
-      DocumentRoot</a></li>
-
-      <li><a href="#user">User Directories</a></li>
-
-      <li><a href="#redirect">URL Redirection</a></li>
-
-      <li><a href="#rewrite">Rewrite Engine</a></li>
-
-      <li><a href="#notfound">File Not Found</a></li>
-    </ul>
-    <hr />
-
-    <table border="1">
-      <tr>
-        <td valign="top"><strong>Related Modules</strong><br />
-         <br />
-         <a href="mod/mod_alias.html">mod_alias</a><br />
-         <a href="mod/mod_rewrite.html">mod_rewrite</a><br />
-         <a href="mod/mod_userdir.html">mod_userdir</a><br />
-         <a href="mod/mod_speling.html">mod_speling</a><br />
-         <a
-        href="mod/mod_vhost_alias.html">mod_vhost_alias</a><br />
-         </td>
-
-        <td valign="top"><strong>Related Directives</strong><br />
-         <br />
-         <a href="mod/mod_alias.html#alias">Alias</a><br />
-         <a
-        href="mod/mod_alias.html#aliasmatch">AliasMatch</a><br />
-         <a
-        href="mod/mod_speling.html#checkspelling">CheckSpelling</a><br />
-         <a
-        href="mod/core.html#documentroot">DocumentRoot</a><br />
-         <a
-        href="mod/core.html#errordocument">ErrorDocument</a><br />
-         <a href="mod/core.html#options">Options</a><br />
-         <a href="mod/mod_alias.html#redirect">Redirect</a><br />
-         <a
-        href="mod/mod_alias.html#redirectmatch">RedirectMatch</a><br />
-         <a
-        href="mod/mod_rewrite.html#RewriteCond">RewriteCond</a><br />
-         <a
-        href="mod/mod_rewrite.html#RewriteRule">RewriteRule</a><br />
-         <a
-        href="mod/mod_alias.html#scriptalias">ScriptAlias</a><br />
-         <a
-        href="mod/mod_alias.html#scriptaliasmatch">ScriptAliasMatch</a><br />
-         <a href="mod/mod_userdir.html#userdir">UserDir</a><br />
-         </td>
-      </tr>
-    </table>
-
-    <h2><a id="documentroot"
-    name="documentroot">DocumentRoot</a></h2>
-
-    <p>In deciding what file to serve for a given request, Apache's
-    default behavior is to take the URL-Path for the request (the
-    part of the URL following the hostname and port) and add it to
-    the end of the <a
-    href="mod/core.html#documentroot">DocumentRoot</a> specified in
-    your configuration files. Therefore, the files and directories
-    underneath the <code>DocumentRoot</code> make up the basic
-    document tree which will be visible from the web.</p>
-
-    <p>Apache is also capable of <a href="vhosts/">Virtual
-    Hosting</a>, where the server receives requests for more than
-    one host. In this case, a different <code>DocumentRoot</code>
-    can be specified for each virtual host, or alternatively, the
-    directives provided by the module <a
-    href="mod/mod_vhost_alias.html">mod_vhost_alias</a> can be used
-    to dynamically determine the appropriate place from which to
-    serve content based on the requested IP address or
-    hostname.</p>
-
-    <h2><a id="outside" name="outside">Files Outside the
-    DocumentRoot</a></h2>
-
-    <p>There are frequently circumstances where it is necessary to
-    allow web access to parts of the filesystem that are not
-    strictly underneath the <a
-    href="mod/core.html#documentroot">DocumentRoot</a>. Apache
-    offers several different ways to accomplish this. On Unix
-    systems, symbolic links can bring other parts of the filesystem
-    under the <code>DocumentRoot</code>. For security reasons,
-    Apache will follow symbolic links only if the <a
-    href="mod/core.html#options">Options</a> setting for the
-    relevant directory includes <code>FollowSymLinks</code> or
-    <code>SymLinksIfOwnerMatch</code>.</p>
-
-    <p>Alternatively, the <a
-    href="mod/mod_alias.html#alias">Alias</a> directive will map
-    any part of the filesystem into the web space. For example,
-    with</p>
-
-    <blockquote>
-      <code>Alias /docs /var/web/</code>
-    </blockquote>
-
-    <p>the URL
-    <code>http://www.example.com/docs/dir/file.html</code> will be
-    served from <code>/var/web/dir/file.html</code>. The <a
-    href="mod/mod_alias.html#scriptalias">ScriptAlias</a> directive
-    works the same way, with the additional effect that all content
-    located at the target path is treated as CGI scripts.</p>
-
-    <p>For situations where you require additional flexibility, you
-    can use the <a
-    href="mod/mod_alias.html#aliasmatch">AliasMatch</a> and <a
-    href="mod/mod_alias.html#scriptaliasmatch">ScriptAliasMatch</a>
-    directives to do powerful regular-expression based matching and
-    substitution. For example,</p>
-
-    <blockquote>
-      <code>ScriptAliasMatch ^/~([^/]*)/cgi-bin/(.*)
-      /home/$1/cgi-bin/$2</code>
-    </blockquote>
-
-    <p>will map a request to
-    <code>http://example.com/~user/cgi-bin/script.cgi</code> to the
-    path <code>/home/user/cgi-bin/script.cgi</code> and will treat
-    the resulting file as a CGI script.</p>
-
-    <h2><a id="user" name="user">User Directories</a></h2>
-
-    <p>Traditionally on Unix systems, the home directory of a
-    particular <em>user</em> can be referred to as
-    <code>~user/</code>. The module <a
-    href="mod/mod_userdir.html">mod_userdir</a> extends this idea
-    to the web by allowing files under each user's home directory
-    to be accessed using URLs such as the following.</p>
-
-    <blockquote>
-      <code>http://www.example.com/~user/file.html</code>
-    </blockquote>
-
-    <p>For security reasons, it is inappropriate to give direct
-    access to a user's home directory from the web. Therefore, the
-    <a href="mod/mod_userdir.html#userdir">UserDir</a> directive
-    specifies a directory underneath the user's home directory
-    where web files are located. Using the default setting of
-    <code>Userdir public_html</code>, the above URL maps to a file
-    at a directory like
-    <code>/home/user/public_html/file.html</code> where
-    <code>/home/user/</code> is the user's home directory as
-    specified in <code>/etc/passwd</code>.</p>
-
-    <p>There are also several other forms of the
-    <code>Userdir</code> directive which you can use on systems
-    where <code>/etc/passwd</code> does not contain the location of
-    the home directory.</p>
-
-    <p>Some people find the "~" symbol (which is often encoded on
-    the web as <code>%7e</code>) to be awkward and prefer to use an
-    alternate string to represent user directories. This
-    functionality is not supported by mod_userdir. However, if
-    users' home directories are structured in a regular way, then
-    it is possible to use the <a
-    href="mod/mod_alias.html#aliasmatch">AliasMatch</a> directive
-    to achieve the desired effect. For example, to make
-    <code>http://www.example.com/upages/user/file.html</code> map
-    to <code>/home/user/public_html/file.html</code>, use the
-    following <code>AliasMatch</code> directive:</p>
-
-    <blockquote>
-      <code>AliasMatch ^/upages/([^/]*)/?(.*)
-      /home/$1/public_html/$2</code>
-    </blockquote>
-
-    <h2><a id="redirect" name="redirect">URL Redirection</a></h2>
-
-    <p>The configuration directives discussed in the above sections
-    tell Apache to get content from a specific place in the
-    filesystem and return it to the client. Sometimes, it is
-    desirable instead to inform the client that the requested
-    content is located at a different URL, and instruct the client
-    to make a new request with the new URL. This is called
-    <em>redirection</em> and is implemented by the <a
-    href="mod/mod_alias.html#redirect">Redirect</a> directive. For
-    example, if the contents of the directory <code>/foo/</code>
-    under the <code>DocumentRoot</code> are moved to the new
-    directory <code>/bar/</code>, you can instruct clients to
-    request the content at the new location as follows:</p>
-
-    <blockquote>
-      <code>Redirect permanent /foo/
-      http://www.example.com/bar/</code>
-    </blockquote>
-
-    <p>This will redirect any URL-Path starting in
-    <code>/foo/</code> to the same URL path on the
-    <code>www.example.com</code> server with <code>/bar/</code>
-    substituted for <code>/foo/</code>. You can redirect clients to
-    any server, not only the origin server.</p>
-
-    <p>Apache also provides a <a
-    href="mod/mod_alias.html#redirectmatch">RedirectMatch</a>
-    directive for more complicated rewriting problems. For example,
-    to redirect requests for the site home page to a different
-    site, but leave all other requests alone, use the following
-    configuration:</p>
-
-    <blockquote>
-      <code>RedirectMatch permanent ^/$
-      http://www.example.com/startpage.html</code>
-    </blockquote>
-
-    <p>Alternatively, to temporarily redirect all pages on a site
-    to one particular page, use the following:</p>
-
-    <blockquote>
-      <code>RedirectMatch temp .*
-      http://www.example.com/startpage.html</code>
-    </blockquote>
-
-    <h2><a id="rewrite" name="rewrite">Rewriting Engine</a></h2>
-
-    <p>When even more powerful substitution is required, the
-    rewriting engine provided by <a
-    href="mod/mod_rewrite.html">mod_rewrite</a> can be useful. The
-    directives provided by this module use characteristics of the
-    request such as browser type or source IP address in deciding
-    from where to serve content. In addition, mod_rewrite can use
-    external database files or programs to determine how to handle
-    a request. Many practical examples employing mod_rewrite are
-    discussed in the <a href="misc/rewriteguide.html">URL Rewriting
-    Guide</a>.</p>
-
-    <h2><a id="notfound" name="notfound">File Not Found</a></h2>
-
-    <p>Inevitably, URLs will be requested for which no matching
-    file can be found in the filesystem. This can happen for
-    several reasons. In some cases, it can be a result of moving
-    documents from one location to another. In this case, it is
-    best to use <a href="#redirect">URL redirection</a> to inform
-    clients of the new location of the resource. In this way, you
-    can assure that old bookmarks and links will continue to work,
-    even though the resource is at a new location.</p>
-
-    <p>Another common cause of "File Not Found" errors is
-    accidental mistyping of URLs, either directly in the browser,
-    or in HTML links. Apache provides the module <a
-    href="mod/mod_speling.html">mod_speling</a> (sic) to help with
-    this problem. When this module is activated, it will intercept
-    "File Not Found" errors and look for a resource with a similar
-    filename. If one such file is found, mod_speling will send an
-    HTTP redirect to the client informing it of the correct
-    location. If several "close" files are found, a list of
-    available alternatives will be presented to the client.</p>
-
-    <p>An especially useful feature of mod_speling, is that it will
-    compare filenames without respect to case. This can help
-    systems where users are unaware of the case-sensitive nature of
-    URLs and the unix filesystem. But using mod_speling for
-    anything more than the occasional URL correction can place
-    additional load on the server, since each "incorrect" request
-    is followed by a URL redirection and a new request from the
-    client.</p>
-
-    <p>If all attempts to locate the content fail, Apache returns
-    an error page with HTTP status code 404 (file not found). The
-    appearance of this page is controlled with the <a
-    href="mod/core.html#errordocument">ErrorDocument</a> directive
-    and can be customized in a flexible manner as discussed in the
-    <a href="custom-error.html">Custom error responses</a> and <a
-    href="misc/custom_errordocs.html">International Server Error
-    Responses</a> documents.</p>
-    <!--#include virtual="footer.html" -->
-  </body>
-</html>
-
diff --git a/docs/manual/urlmapping.html.en b/docs/manual/urlmapping.html.en
deleted file mode 100755
index 627dcf0..0000000
--- a/docs/manual/urlmapping.html.en
+++ /dev/null
@@ -1,296 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta name="generator" content="HTML Tidy, see www.w3.org" />
-
-    <title>Mapping URLs to Filesystem Locations - Apache HTTP
-    Server</title>
-  </head>
-  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-
-  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-  vlink="#000080" alink="#FF0000">
-    <!--#include virtual="header.html" -->
-
-    <h1 align="center">Mapping URLs to Filesystem Locations</h1>
-
-    <p>This document explains how Apache uses the URL of a request
-    to determine the filesystem location from which to serve a
-    file.</p>
-
-    <ul>
-      <li><a href="#documentroot">DocumentRoot</a></li>
-
-      <li><a href="#outside">Files Outside the
-      DocumentRoot</a></li>
-
-      <li><a href="#user">User Directories</a></li>
-
-      <li><a href="#redirect">URL Redirection</a></li>
-
-      <li><a href="#rewrite">Rewrite Engine</a></li>
-
-      <li><a href="#notfound">File Not Found</a></li>
-    </ul>
-    <hr />
-
-    <table border="1">
-      <tr>
-        <td valign="top"><strong>Related Modules</strong><br />
-         <br />
-         <a href="mod/mod_alias.html">mod_alias</a><br />
-         <a href="mod/mod_rewrite.html">mod_rewrite</a><br />
-         <a href="mod/mod_userdir.html">mod_userdir</a><br />
-         <a href="mod/mod_speling.html">mod_speling</a><br />
-         <a
-        href="mod/mod_vhost_alias.html">mod_vhost_alias</a><br />
-         </td>
-
-        <td valign="top"><strong>Related Directives</strong><br />
-         <br />
-         <a href="mod/mod_alias.html#alias">Alias</a><br />
-         <a
-        href="mod/mod_alias.html#aliasmatch">AliasMatch</a><br />
-         <a
-        href="mod/mod_speling.html#checkspelling">CheckSpelling</a><br />
-         <a
-        href="mod/core.html#documentroot">DocumentRoot</a><br />
-         <a
-        href="mod/core.html#errordocument">ErrorDocument</a><br />
-         <a href="mod/core.html#options">Options</a><br />
-         <a href="mod/mod_alias.html#redirect">Redirect</a><br />
-         <a
-        href="mod/mod_alias.html#redirectmatch">RedirectMatch</a><br />
-         <a
-        href="mod/mod_rewrite.html#RewriteCond">RewriteCond</a><br />
-         <a
-        href="mod/mod_rewrite.html#RewriteRule">RewriteRule</a><br />
-         <a
-        href="mod/mod_alias.html#scriptalias">ScriptAlias</a><br />
-         <a
-        href="mod/mod_alias.html#scriptaliasmatch">ScriptAliasMatch</a><br />
-         <a href="mod/mod_userdir.html#userdir">UserDir</a><br />
-         </td>
-      </tr>
-    </table>
-
-    <h2><a id="documentroot"
-    name="documentroot">DocumentRoot</a></h2>
-
-    <p>In deciding what file to serve for a given request, Apache's
-    default behavior is to take the URL-Path for the request (the
-    part of the URL following the hostname and port) and add it to
-    the end of the <a
-    href="mod/core.html#documentroot">DocumentRoot</a> specified in
-    your configuration files. Therefore, the files and directories
-    underneath the <code>DocumentRoot</code> make up the basic
-    document tree which will be visible from the web.</p>
-
-    <p>Apache is also capable of <a href="vhosts/">Virtual
-    Hosting</a>, where the server receives requests for more than
-    one host. In this case, a different <code>DocumentRoot</code>
-    can be specified for each virtual host, or alternatively, the
-    directives provided by the module <a
-    href="mod/mod_vhost_alias.html">mod_vhost_alias</a> can be used
-    to dynamically determine the appropriate place from which to
-    serve content based on the requested IP address or
-    hostname.</p>
-
-    <h2><a id="outside" name="outside">Files Outside the
-    DocumentRoot</a></h2>
-
-    <p>There are frequently circumstances where it is necessary to
-    allow web access to parts of the filesystem that are not
-    strictly underneath the <a
-    href="mod/core.html#documentroot">DocumentRoot</a>. Apache
-    offers several different ways to accomplish this. On Unix
-    systems, symbolic links can bring other parts of the filesystem
-    under the <code>DocumentRoot</code>. For security reasons,
-    Apache will follow symbolic links only if the <a
-    href="mod/core.html#options">Options</a> setting for the
-    relevant directory includes <code>FollowSymLinks</code> or
-    <code>SymLinksIfOwnerMatch</code>.</p>
-
-    <p>Alternatively, the <a
-    href="mod/mod_alias.html#alias">Alias</a> directive will map
-    any part of the filesystem into the web space. For example,
-    with</p>
-
-    <blockquote>
-      <code>Alias /docs /var/web/</code>
-    </blockquote>
-
-    <p>the URL
-    <code>http://www.example.com/docs/dir/file.html</code> will be
-    served from <code>/var/web/dir/file.html</code>. The <a
-    href="mod/mod_alias.html#scriptalias">ScriptAlias</a> directive
-    works the same way, with the additional effect that all content
-    located at the target path is treated as CGI scripts.</p>
-
-    <p>For situations where you require additional flexibility, you
-    can use the <a
-    href="mod/mod_alias.html#aliasmatch">AliasMatch</a> and <a
-    href="mod/mod_alias.html#scriptaliasmatch">ScriptAliasMatch</a>
-    directives to do powerful regular-expression based matching and
-    substitution. For example,</p>
-
-    <blockquote>
-      <code>ScriptAliasMatch ^/~([^/]*)/cgi-bin/(.*)
-      /home/$1/cgi-bin/$2</code>
-    </blockquote>
-
-    <p>will map a request to
-    <code>http://example.com/~user/cgi-bin/script.cgi</code> to the
-    path <code>/home/user/cgi-bin/script.cgi</code> and will treat
-    the resulting file as a CGI script.</p>
-
-    <h2><a id="user" name="user">User Directories</a></h2>
-
-    <p>Traditionally on Unix systems, the home directory of a
-    particular <em>user</em> can be referred to as
-    <code>~user/</code>. The module <a
-    href="mod/mod_userdir.html">mod_userdir</a> extends this idea
-    to the web by allowing files under each user's home directory
-    to be accessed using URLs such as the following.</p>
-
-    <blockquote>
-      <code>http://www.example.com/~user/file.html</code>
-    </blockquote>
-
-    <p>For security reasons, it is inappropriate to give direct
-    access to a user's home directory from the web. Therefore, the
-    <a href="mod/mod_userdir.html#userdir">UserDir</a> directive
-    specifies a directory underneath the user's home directory
-    where web files are located. Using the default setting of
-    <code>Userdir public_html</code>, the above URL maps to a file
-    at a directory like
-    <code>/home/user/public_html/file.html</code> where
-    <code>/home/user/</code> is the user's home directory as
-    specified in <code>/etc/passwd</code>.</p>
-
-    <p>There are also several other forms of the
-    <code>Userdir</code> directive which you can use on systems
-    where <code>/etc/passwd</code> does not contain the location of
-    the home directory.</p>
-
-    <p>Some people find the "~" symbol (which is often encoded on
-    the web as <code>%7e</code>) to be awkward and prefer to use an
-    alternate string to represent user directories. This
-    functionality is not supported by mod_userdir. However, if
-    users' home directories are structured in a regular way, then
-    it is possible to use the <a
-    href="mod/mod_alias.html#aliasmatch">AliasMatch</a> directive
-    to achieve the desired effect. For example, to make
-    <code>http://www.example.com/upages/user/file.html</code> map
-    to <code>/home/user/public_html/file.html</code>, use the
-    following <code>AliasMatch</code> directive:</p>
-
-    <blockquote>
-      <code>AliasMatch ^/upages/([^/]*)/?(.*)
-      /home/$1/public_html/$2</code>
-    </blockquote>
-
-    <h2><a id="redirect" name="redirect">URL Redirection</a></h2>
-
-    <p>The configuration directives discussed in the above sections
-    tell Apache to get content from a specific place in the
-    filesystem and return it to the client. Sometimes, it is
-    desirable instead to inform the client that the requested
-    content is located at a different URL, and instruct the client
-    to make a new request with the new URL. This is called
-    <em>redirection</em> and is implemented by the <a
-    href="mod/mod_alias.html#redirect">Redirect</a> directive. For
-    example, if the contents of the directory <code>/foo/</code>
-    under the <code>DocumentRoot</code> are moved to the new
-    directory <code>/bar/</code>, you can instruct clients to
-    request the content at the new location as follows:</p>
-
-    <blockquote>
-      <code>Redirect permanent /foo/
-      http://www.example.com/bar/</code>
-    </blockquote>
-
-    <p>This will redirect any URL-Path starting in
-    <code>/foo/</code> to the same URL path on the
-    <code>www.example.com</code> server with <code>/bar/</code>
-    substituted for <code>/foo/</code>. You can redirect clients to
-    any server, not only the origin server.</p>
-
-    <p>Apache also provides a <a
-    href="mod/mod_alias.html#redirectmatch">RedirectMatch</a>
-    directive for more complicated rewriting problems. For example,
-    to redirect requests for the site home page to a different
-    site, but leave all other requests alone, use the following
-    configuration:</p>
-
-    <blockquote>
-      <code>RedirectMatch permanent ^/$
-      http://www.example.com/startpage.html</code>
-    </blockquote>
-
-    <p>Alternatively, to temporarily redirect all pages on a site
-    to one particular page, use the following:</p>
-
-    <blockquote>
-      <code>RedirectMatch temp .*
-      http://www.example.com/startpage.html</code>
-    </blockquote>
-
-    <h2><a id="rewrite" name="rewrite">Rewriting Engine</a></h2>
-
-    <p>When even more powerful substitution is required, the
-    rewriting engine provided by <a
-    href="mod/mod_rewrite.html">mod_rewrite</a> can be useful. The
-    directives provided by this module use characteristics of the
-    request such as browser type or source IP address in deciding
-    from where to serve content. In addition, mod_rewrite can use
-    external database files or programs to determine how to handle
-    a request. Many practical examples employing mod_rewrite are
-    discussed in the <a href="misc/rewriteguide.html">URL Rewriting
-    Guide</a>.</p>
-
-    <h2><a id="notfound" name="notfound">File Not Found</a></h2>
-
-    <p>Inevitably, URLs will be requested for which no matching
-    file can be found in the filesystem. This can happen for
-    several reasons. In some cases, it can be a result of moving
-    documents from one location to another. In this case, it is
-    best to use <a href="#redirect">URL redirection</a> to inform
-    clients of the new location of the resource. In this way, you
-    can assure that old bookmarks and links will continue to work,
-    even though the resource is at a new location.</p>
-
-    <p>Another common cause of "File Not Found" errors is
-    accidental mistyping of URLs, either directly in the browser,
-    or in HTML links. Apache provides the module <a
-    href="mod/mod_speling.html">mod_speling</a> (sic) to help with
-    this problem. When this module is activated, it will intercept
-    "File Not Found" errors and look for a resource with a similar
-    filename. If one such file is found, mod_speling will send an
-    HTTP redirect to the client informing it of the correct
-    location. If several "close" files are found, a list of
-    available alternatives will be presented to the client.</p>
-
-    <p>An especially useful feature of mod_speling, is that it will
-    compare filenames without respect to case. This can help
-    systems where users are unaware of the case-sensitive nature of
-    URLs and the unix filesystem. But using mod_speling for
-    anything more than the occasional URL correction can place
-    additional load on the server, since each "incorrect" request
-    is followed by a URL redirection and a new request from the
-    client.</p>
-
-    <p>If all attempts to locate the content fail, Apache returns
-    an error page with HTTP status code 404 (file not found). The
-    appearance of this page is controlled with the <a
-    href="mod/core.html#errordocument">ErrorDocument</a> directive
-    and can be customized in a flexible manner as discussed in the
-    <a href="custom-error.html">Custom error responses</a> and <a
-    href="misc/custom_errordocs.html">International Server Error
-    Responses</a> documents.</p>
-    <!--#include virtual="footer.html" -->
-  </body>
-</html>
-
diff --git a/docs/manual/vhosts/details.html b/docs/manual/vhosts/details.html
deleted file mode 100644
index 24da6ad..0000000
--- a/docs/manual/vhosts/details.html
+++ /dev/null
@@ -1,392 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta name="generator" content="HTML Tidy, see www.w3.org" />
-
-    <title>An In-Depth Discussion of Virtual Host Matching</title>
-  </head>
-  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-
-  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-  vlink="#000080" alink="#FF0000">
-    <!--#include virtual="header.html" -->
-
-    <h1 align="CENTER">An In-Depth Discussion of Virtual Host
-    Matching</h1>
-
-    <p>The virtual host code was completely rewritten in
-    <strong>Apache 1.3</strong>. This document attempts to explain
-    exactly what Apache does when deciding what virtual host to
-    serve a hit from. With the help of the new <a
-    href="../mod/core.html#namevirtualhost"><samp>NameVirtualHost</samp></a>
-    directive virtual host configuration should be a lot easier and
-    safer than with versions prior to 1.3.</p>
-
-    <p>If you just want to <cite>make it work</cite> without
-    understanding how, here are <a href="examples.html">some
-    examples</a>.</p>
-
-    <h3>Config File Parsing</h3>
-
-    <p>There is a <em>main_server</em> which consists of all the
-    definitions appearing outside of
-    <code>&lt;VirtualHost&gt;</code> sections. There are virtual
-    servers, called <em>vhosts</em>, which are defined by <a
-    href="../mod/core.html#virtualhost"><samp>&lt;VirtualHost&gt;</samp></a>
-    sections.</p>
-
-    <p>The directives <a
-    href="../mod/mpm_common.html#listen"><samp>Listen</samp></a>, <a
-    href="../mod/core.html#servername"><samp>ServerName</samp></a>,
-    <a
-    href="../mod/core.html#serverpath"><samp>ServerPath</samp></a>,
-    and <a
-    href="../mod/core.html#serveralias"><samp>ServerAlias</samp></a>
-    can appear anywhere within the definition of a server. However,
-    each appearance overrides the previous appearance (within that
-    server).</p>
-
-    <p>The default value of the <code>Listen</code> field for
-    main_server is 80. The main_server has no default
-    <code>ServerPath</code>, or <code>ServerAlias</code>. The
-    default <code>ServerName</code> is deduced from the servers IP
-    address.</p>
-
-    <p>The main_server Listen directive has two functions.  One
-    function is to determine the default network port Apache will
-    bind to.  The second function is to specify the port number
-    which is used in absolute URIs during redirects.</p>
-
-    <p>Unlike the main_server, vhost ports <em>do not</em> affect
-    what ports Apache listens for connections on.</p>
-
-    <p>Each address appearing in the <code>VirtualHost</code>
-    directive can have an optional port. If the port is unspecified
-    it defaults to the value of the main_server's most recent
-    <code>Listen</code> statement. The special port <samp>*</samp>
-    indicates a wildcard that matches any port. Collectively the
-    entire set of addresses (including multiple <samp>A</samp>
-    record results from DNS lookups) are called the vhost's
-    <em>address set</em>.</p>
-
-    <p>Unless a <a
-    href="../mod/core.html#namevirtualhost">NameVirtualHost</a>
-    directive is used for a specific IP address the first vhost
-    with that address is treated as an IP-based vhost. The IP
-    address can also be the wildcard <code>*</code>.</p>
-
-    <p>If name-based vhosts should be used a
-    <code>NameVirtualHost</code> directive <em>must</em> appear
-    with the IP address set to be used for the name-based vhosts.
-    In other words, you must specify the IP address that holds the
-    hostname aliases (CNAMEs) for your name-based vhosts via a
-    <code>NameVirtualHost</code> directive in your configuration
-    file.</p>
-
-    <p>Multiple <code>NameVirtualHost</code> directives can be used
-    each with a set of <code>VirtualHost</code> directives but only
-    one <code>NameVirtualHost</code> directive should be used for
-    each specific IP:port pair.</p>
-
-    <p>The ordering of <code>NameVirtualHost</code> and
-    <code>VirtualHost</code> directives is not important which
-    makes the following two examples identical (only the order of
-    the <code>VirtualHost</code> directives for <em>one</em>
-    address set is important, see below):</p>
-<pre>
-                                |
-  NameVirtualHost 111.22.33.44  | &lt;VirtualHost 111.22.33.44&gt;
-  &lt;VirtualHost 111.22.33.44&gt;    | # server A
-  # server A                    | &lt;/VirtualHost&gt;
-  ...                           | &lt;VirtualHost 111.22.33.55&gt;
-  &lt;/VirtualHost&gt;                | # server C
-  &lt;VirtualHost 111.22.33.44&gt;    | ...
-  # server B                    | &lt;/VirtualHost&gt;
-  ...                           | &lt;VirtualHost 111.22.33.44&gt;
-  &lt;/VirtualHost&gt;                | # server B
-                                | ...
-  NameVirtualHost 111.22.33.55  | &lt;/VirtualHost&gt;
-  &lt;VirtualHost 111.22.33.55&gt;    | &lt;VirtualHost 111.22.33.55&gt;
-  # server C                    | # server D
-  ...                           | ...
-  &lt;/VirtualHost&gt;                | &lt;/VirtualHost&gt;
-  &lt;VirtualHost 111.22.33.55&gt;    |
-  # server D                    | NameVirtualHost 111.22.33.44
-  ...                           | NameVirtualHost 111.22.33.55
-  &lt;/VirtualHost&gt;                |
-                                |
-</pre>
-
-    <p>(To aid the readability of your configuration you should
-    prefer the left variant.)</p>
-
-    <p>After parsing the <code>VirtualHost</code> directive, the
-    vhost server is given a default <code>Listen</code> equal to the
-    port assigned to the first name in its <code>VirtualHost</code>
-    directive.</p>
-
-    <p>The complete list of names in the <code>VirtualHost</code>
-    directive are treated just like a <code>ServerAlias</code> (but
-    are not overridden by any <code>ServerAlias</code> statement)
-    if all names resolve to the same address set. Note that
-    subsequent <code>Listen</code> statements for this vhost will not
-    affect the ports assigned in the address set.</p>
-
-    <p>During initialization a list for each IP address is
-    generated and inserted into an hash table. If the IP address is
-    used in a <code>NameVirtualHost</code> directive the list
-    contains all name-based vhosts for the given IP address. If
-    there are no vhosts defined for that address the
-    <code>NameVirtualHost</code> directive is ignored and an error
-    is logged. For an IP-based vhost the list in the hash table is
-    empty.</p>
-
-    <p>Due to a fast hashing function the overhead of hashing an IP
-    address during a request is minimal and almost not existent.
-    Additionally the table is optimized for IP addresses which vary
-    in the last octet.</p>
-
-    <p>For every vhost various default values are set. In
-    particular:</p>
-
-    <ol>
-      <li>If a vhost has no <a
-      href="../mod/core.html#serveradmin"><code>ServerAdmin</code></a>,
-      <a
-      href="../mod/core.html#resourceconfig"><code>ResourceConfig</code></a>,
-      <a
-      href="../mod/core.html#accessconfig"><code>AccessConfig</code></a>,
-      <a href="../mod/core.html#timeout"><code>Timeout</code></a>,
-      <a
-      href="../mod/core.html#keepalivetimeout"><code>KeepAliveTimeout</code></a>,
-      <a
-      href="../mod/core.html#keepalive"><code>KeepAlive</code></a>,
-      <a
-      href="../mod/core.html#maxkeepaliverequests"><code>MaxKeepAliveRequests</code></a>,
-      or <a
-      href="../mod/core.html#sendbuffersize"><code>SendBufferSize</code></a>
-      directive then the respective value is inherited from the
-      main_server. (That is, inherited from whatever the final
-      setting of that value is in the main_server.)</li>
-
-      <li>The "lookup defaults" that define the default directory
-      permissions for a vhost are merged with those of the
-      main_server. This includes any per-directory configuration
-      information for any module.</li>
-
-      <li>The per-server configs for each module from the
-      main_server are merged into the vhost server.</li>
-    </ol>
-    Essentially, the main_server is treated as "defaults" or a
-    "base" on which to build each vhost. But the positioning of
-    these main_server definitions in the config file is largely
-    irrelevant -- the entire config of the main_server has been
-    parsed when this final merging occurs. So even if a main_server
-    definition appears after a vhost definition it might affect the
-    vhost definition. 
-
-    <p>If the main_server has no <code>ServerName</code> at this
-    point, then the hostname of the machine that httpd is running
-    on is used instead. We will call the <em>main_server address
-    set</em> those IP addresses returned by a DNS lookup on the
-    <code>ServerName</code> of the main_server.</p>
-
-    <p>For any undefined <code>ServerName</code> fields, a
-    name-based vhost defaults to the address given first in the
-    <code>VirtualHost</code> statement defining the vhost.</p>
-
-    <p>Any vhost that includes the magic <samp>_default_</samp>
-    wildcard is given the same <code>ServerName</code> as the
-    main_server.</p>
-
-    <h3>Virtual Host Matching</h3>
-
-    <p>The server determines which vhost to use for a request as
-    follows:</p>
-
-    <h4>Hash table lookup</h4>
-
-    <p>When the connection is first made by a client, the IP
-    address to which the client connected is looked up in the
-    internal IP hash table.</p>
-
-    <p>If the lookup fails (the IP address wasn't found) the
-    request is served from the <samp>_default_</samp> vhost if
-    there is such a vhost for the port to which the client sent the
-    request. If there is no matching <samp>_default_</samp> vhost
-    the request is served from the main_server.</p>
-
-    <p>If the IP address is not found in the hash table then the
-    match against the port number may also result in an entry
-    corresponding to a <code>NameVirtualHost *</code>, which is
-    subsequently handled like other name-based vhosts.</p>
-
-    <p>If the lookup succeeded (a corresponding list for the IP
-    address was found) the next step is to decide if we have to
-    deal with an IP-based or a name-base vhost.</p>
-
-    <h4>IP-based vhost</h4>
-
-    <p>If the entry we found has an empty name list then we have
-    found an IP-based vhost, no further actions are performed and
-    the request is served from that vhost.</p>
-
-    <h4>Name-based vhost</h4>
-
-    <p>If the entry corresponds to a name-based vhost the name list
-    contains one or more vhost structures. This list contains the
-    vhosts in the same order as the <code>VirtualHost</code>
-    directives appear in the config file.</p>
-
-    <p>The first vhost on this list (the first vhost in the config
-    file with the specified IP address) has the highest priority
-    and catches any request to an unknown server name or a request
-    without a <code>Host:</code> header field.</p>
-
-    <p>If the client provided a <code>Host:</code> header field the
-    list is searched for a matching vhost and the first hit on a
-    <code>ServerName</code> or <code>ServerAlias</code> is taken
-    and the request is served from that vhost. A <code>Host:</code>
-    header field can contain a port number, but Apache always
-    matches against the real port to which the client sent the
-    request.</p>
-
-    <p>If the client submitted a HTTP/1.0 request without
-    <code>Host:</code> header field we don't know to what server
-    the client tried to connect and any existing
-    <code>ServerPath</code> is matched against the URI from the
-    request. The first matching path on the list is used and the
-    request is served from that vhost.</p>
-
-    <p>If no matching vhost could be found the request is served
-    from the first vhost with a matching port number that is on the
-    list for the IP to which the client connected (as already
-    mentioned before).</p>
-
-    <h4>Persistent connections</h4>
-    The IP lookup described above is only done <em>once</em> for a
-    particular TCP/IP session while the name lookup is done on
-    <em>every</em> request during a KeepAlive/persistent
-    connection. In other words a client may request pages from
-    different name-based vhosts during a single persistent
-    connection. 
-
-    <h4>Absolute URI</h4>
-
-    <p>If the URI from the request is an absolute URI, and its
-    hostname and port match the main server or one of the
-    configured virtual hosts <em>and</em> match the address and
-    port to which the client sent the request, then the
-    scheme/hostname/port prefix is stripped off and the remaining
-    relative URI is served by the corresponding main server or
-    virtual host. If it does not match, then the URI remains
-    untouched and the request is taken to be a proxy request.</p>
-
-    <h3>Observations</h3>
-
-    <ul>
-      <li>A name-based vhost can never interfere with an IP-base
-      vhost and vice versa. IP-based vhosts can only be reached
-      through an IP address of its own address set and never
-      through any other address. The same applies to name-based
-      vhosts, they can only be reached through an IP address of the
-      corresponding address set which must be defined with a
-      <code>NameVirtualHost</code> directive.</li>
-
-      <li><code>ServerAlias</code> and <code>ServerPath</code>
-      checks are never performed for an IP-based vhost.</li>
-
-      <li>The order of name-/IP-based, the <samp>_default_</samp>
-      vhost and the <code>NameVirtualHost</code> directive within
-      the config file is not important. Only the ordering of
-      name-based vhosts for a specific address set is significant.
-      The one name-based vhosts that comes first in the
-      configuration file has the highest priority for its
-      corresponding address set.</li>
-
-      <li>For security reasons the port number given in a
-      <code>Host:</code> header field is never used during the
-      matching process. Apache always uses the real port to which
-      the client sent the request.</li>
-
-      <li>If a <code>ServerPath</code> directive exists which is a
-      prefix of another <code>ServerPath</code> directive that
-      appears later in the configuration file, then the former will
-      always be matched and the latter will never be matched. (That
-      is assuming that no <code>Host:</code> header field was
-      available to disambiguate the two.)</li>
-
-      <li>If two IP-based vhosts have an address in common, the
-      vhost appearing first in the config file is always matched.
-      Such a thing might happen inadvertently. The server will give
-      a warning in the error logfile when it detects this.</li>
-
-      <li>A <code>_default_</code> vhost catches a request only if
-      there is no other vhost with a matching IP address
-      <em>and</em> a matching port number for the request. The
-      request is only caught if the port number to which the client
-      sent the request matches the port number of your
-      <code>_default_</code> vhost which is your standard
-      <code>Listen</code> by default. A wildcard port can be
-      specified (<em>i.e.</em>, <code>_default_:*</code>) to catch
-      requests to any available port. This also applies to
-      <code>NameVirtualHost *</code> vhosts.</li>
-
-      <li>The main_server is only used to serve a request if the IP
-      address and port number to which the client connected is
-      unspecified and does not match any other vhost (including a
-      <code>_default_</code> vhost). In other words the main_server
-      only catches a request for an unspecified address/port
-      combination (unless there is a <code>_default_</code> vhost
-      which matches that port).</li>
-
-      <li>A <code>_default_</code> vhost or the main_server is
-      <em>never</em> matched for a request with an unknown or
-      missing <code>Host:</code> header field if the client
-      connected to an address (and port) which is used for
-      name-based vhosts, <em>e.g.</em>, in a
-      <code>NameVirtualHost</code> directive.</li>
-
-      <li>You should never specify DNS names in
-      <code>VirtualHost</code> directives because it will force
-      your server to rely on DNS to boot. Furthermore it poses a
-      security threat if you do not control the DNS for all the
-      domains listed. There's <a href="../dns-caveats.html">more
-      information</a> available on this and the next two
-      topics.</li>
-
-      <li><code>ServerName</code> should always be set for each
-      vhost. Otherwise A DNS lookup is required for each
-      vhost.</li>
-    </ul>
-
-    <h3>Tips</h3>
-
-    <p>In addition to the tips on the <a
-    href="../dns-caveats.html#tips">DNS Issues</a> page, here are
-    some further tips:</p>
-
-    <ul>
-      <li>Place all main_server definitions before any
-      <code>VirtualHost</code> definitions. (This is to aid the
-      readability of the configuration -- the post-config merging
-      process makes it non-obvious that definitions mixed in around
-      virtual hosts might affect all virtual hosts.)</li>
-
-      <li>Group corresponding <code>NameVirtualHost</code> and
-      <code>VirtualHost</code> definitions in your configuration to
-      ensure better readability.</li>
-
-      <li>Avoid <code>ServerPaths</code> which are prefixes of
-      other <code>ServerPaths</code>. If you cannot avoid this then
-      you have to ensure that the longer (more specific) prefix
-      vhost appears earlier in the configuration file than the
-      shorter (less specific) prefix (<em>i.e.</em>, "ServerPath
-      /abc" should appear after "ServerPath /abc/def").</li>
-    </ul>
-    <!--#include virtual="footer.html" -->
-  </body>
-</html>
-
diff --git a/docs/manual/vhosts/examples.html b/docs/manual/vhosts/examples.html
deleted file mode 100644
index 5de5bac..0000000
--- a/docs/manual/vhosts/examples.html
+++ /dev/null
@@ -1,627 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<HTML><HEAD>
-<TITLE>VirtualHost Examples</TITLE>
-</HEAD>
-
-<!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-<BODY
- BGCOLOR="#FFFFFF"
- TEXT="#000000"
- LINK="#0000FF"
- VLINK="#000080"
- ALINK="#FF0000"
->
-<!--#include virtual="header.html" -->
-<H1 ALIGN="CENTER">Virtual Host examples for common setups</H1>
-
-
-<H2>Base configuration</H2>
-
-<UL>
-<LI><A HREF="#purename">Simple name-based vhosting</A>
-<LI><A HREF="#name">More complicated name-based vhosts</A>
-<LI><A HREF="#ip">IP-based vhosts</A>
-<LI><A HREF="#mixed">Mixed name-/IP-based vhosts</A>
-<LI><A HREF="#port">Port-based vhosts</A>
-</UL>
-
-<H2>Additional features</H2>
-
-<UL>
-<LI><A HREF="#default">Using <CODE>_default_</CODE> vhosts</A>
-<LI><A HREF="#migrate">Migrating a named-based vhost to an IP-based vhost</A>
-<LI><A HREF="#serverpath">Using the <CODE>ServerPath</CODE> directive</A>
-</UL>
-
-<HR>
-
-<H3><A NAME="purename">Simple name-based vhosting</A></H3>
-
-<UL>
-
-<LI><STRONG>Setup:</STRONG>
-    The server machine has a primary name <SAMP>server.domain.tld</SAMP>.
-    There are two aliases (CNAMEs) <SAMP>www.domain.tld</SAMP> and
-    <SAMP>www.sub.domain.tld</SAMP> for the address <SAMP>server.domain.tld</SAMP>.
-    <P>
-    <STRONG>Server configuration:</STRONG>
-
-    <BLOCKQUOTE><PRE>
-    ...
-    Listen 80
-    ServerName server.domain.tld
-
-    NameVirtualHost *
-
-    &lt;VirtualHost *&gt;
-    DocumentRoot /www/domain
-    ServerName www.domain.tld
-    ...
-    &lt;/VirtualHost&gt;
-    
-    &lt;VirtualHost *&gt;
-    DocumentRoot /www/subdomain
-    ServerName www.sub.domain.tld
-    ...
-    &lt;/VirtualHost&gt; 
-    </PRE>
-    The asterisks match all addresses, so the main server serves no
-    requests. Due to the fact that <SAMP>www.domain.tld</SAMP> is first
-    in the configuration file, it has the highest priority and can be
-    seen as the <CITE>default</CITE> or <CITE>primary</CITE> server.
-    </BLOCKQUOTE>
-    <P>
-
-</UL>
-
-<HR>
-
-<H3><A NAME="name">More complicated name-based vhosts</A></H3>
-
-<UL>
-
-<LI><STRONG>Setup 1:</STRONG>
-    The server machine has one IP address (<SAMP>111.22.33.44</SAMP>)
-    which resolves to the name <SAMP>server.domain.tld</SAMP>.
-    There are two aliases (CNAMEs) <SAMP>www.domain.tld</SAMP> and
-    <SAMP>www.sub.domain.tld</SAMP> for the address <SAMP>111.22.33.44</SAMP>.
-    <P>
-    <STRONG>Server configuration:</STRONG>
-
-    <BLOCKQUOTE><PRE>
-    ...
-    Listen 80
-    ServerName server.domain.tld
-
-    NameVirtualHost 111.22.33.44 
-
-    &lt;VirtualHost 111.22.33.44&gt;
-    DocumentRoot /www/domain
-    ServerName www.domain.tld
-    ...
-    &lt;/VirtualHost&gt;
-    
-    &lt;VirtualHost 111.22.33.44&gt;
-    DocumentRoot /www/subdomain
-    ServerName www.sub.domain.tld
-    ...
-    &lt;/VirtualHost&gt; 
-    </PRE>
-    Apart from <SAMP>localhost</SAMP> there are no unspecified
-    addresses/ports, therefore the main server only serves
-    <SAMP>localhost</SAMP> requests. Due to the fact
-    that <SAMP>www.domain.tld</SAMP> has the highest priority
-    it can be seen as the <CITE>default</CITE> or
-    <CITE>primary</CITE> server.
-    </BLOCKQUOTE>
-    <P>
-   
-<LI><STRONG>Setup 2:</STRONG>
-    The server machine has two IP addresses (<SAMP>111.22.33.44</SAMP>
-    and <SAMP>111.22.33.55</SAMP>)
-    which resolve to the names <SAMP>server1.domain.tld</SAMP> and
-    <SAMP>server2.domain.tld</SAMP> respectively.
-    The alias <SAMP>www.domain.tld</SAMP> should be used for the
-    main server which should also catch any unspecified addresses. 
-    We want to use a virtual host for the alias
-    <SAMP>www.otherdomain.tld</SAMP> and another virtual host, 
-    with server name <SAMP>www.sub.domain.tld</SAMP>, should
-    catch any request to hostnames of the form
-    <SAMP>*.sub.domain.tld</SAMP>. 
-    The address <SAMP>111.22.33.55</SAMP> should be
-    used for the virtual hosts.
-    <P>
-    <STRONG>Server configuration:</STRONG>
-
-    <BLOCKQUOTE><PRE>
-    ...
-    Listen 80
-    ServerName www.domain.tld
-    DocumentRoot /www/domain
-
-    NameVirtualHost 111.22.33.55
-
-    &lt;VirtualHost 111.22.33.55&gt;
-    DocumentRoot /www/otherdomain
-    ServerName www.otherdomain.tld
-    ...
-    &lt;/VirtualHost&gt;
-   
-    &lt;VirtualHost 111.22.33.55&gt;
-    DocumentRoot /www/subdomain
-    ServerName www.sub.domain.tld
-    ServerAlias *.sub.domain.tld
-    ...
-    &lt;/VirtualHost&gt; 
-    </PRE>
-    Any request to an address other than <SAMP>111.22.33.55</SAMP>
-    will be served from the main server. A request to
-    <SAMP>111.22.33.55</SAMP> with an unknown or no <CODE>Host:</CODE>
-    header will be served from <SAMP>www.otherdomain.tld</SAMP>.
-    </BLOCKQUOTE>
-
-<LI><STRONG>Setup 3:</STRONG>
-       The server machine has two IP addresses (<SAMP>192.168.1.1</SAMP>
-       and <SAMP>111.22.33.55</SAMP>). The machine is sitting between
-       an internal (intranet) network and an external (internet) network.
-       Outside of the network, the name <SAMP>server1.domain.tld</SAMP>
-       resolves to the external address (<SAMP>111.22.33.55</SAMP>), but
-       inside the network, that same name resolves to the internal
-       address (<SAMP>192.168.1.1</SAMP>).<P>
-
-       The server can be made to respond to internal and external
-       requests with the same content, with just one <CODE>VirtualHost</CODE>
-       section.
-       <P>
-
-       <STRONG>Server configuration:</STRONG>
-
-       <BLOCKQUOTE><PRE>
-    ...
-    NameVirtualHost 192.168.1.1
-    NameVirtualHost 111.22.33.55
-
-    &lt;VirtualHost 192.168.1.1 111.22.33.55&gt;
-    DocumentRoot /www/server1
-    ServerName server1.domain.tld
-    ServerAlias server1
-    ...
-    &lt;/VirtualHost&gt;
-    </PRE></BLOCKQUOTE>
-
-       Now requests from both networks will be served from the same
-       <CODE>VirtualHost</CODE>
-
-<LI><STRONG>Setup 4:</STRONG>
-       You have multiple domains going to the same IP and also want
-       to serve multiple ports.  By defining the
-       ports in the "NameVirtualHost" tag, you can allow this to
-       work. If you try using <VirtualHost name:port> without the
-       NameVirtualHost name:port or you try to use the Listen
-       directive, your configuration will not work.
-       <P>
-
-       <STRONG>Server configuration:</STRONG>
-
-       <BLOCKQUOTE><PRE>
-    ...   
-    NameVirtualHost 111.22.33.44:80
-    NameVirtualHost 111.22.33.44:8080
-
-    &lt;VirtualHost 111.22.33.44:80&gt;
-    ServerName www.domain.tld
-    DocumentRoot /www/domain-80
-    &lt;/VirtualHost&gt;
-
-    &lt;VirtualHost 111.22.33.44:8080&gt;
-    ServerName www.domain.tld
-    DocumentRoot /www/domain-8080
-    &lt;/VirtualHost&gt;
-
-    &lt;VirtualHost 111.22.33.44:80&gt;
-    ServerName www.otherdomain.tld
-    DocumentRoot /www/otherdomain-80
-    &lt;/VirtualHost&gt;
-
-    &lt;VirtualHost 111.22.33.44:8080&gt;
-    ServerName www.otherdomain.tld
-    DocumentRoot /www/otherdomain-8080
-    &lt;/VirtualHost&gt;
-
-    </PRE></BLOCKQUOTE>
-
-</UL>
-
-<HR>
-
-<H3><A NAME="ip">IP-based vhosts</A></H3>
-
-<UL>
-
-<LI><STRONG>Setup 1:</STRONG>
-    The server machine has two IP addresses (<SAMP>111.22.33.44</SAMP>
-    and <SAMP>111.22.33.55</SAMP>)
-    which resolve to the names <SAMP>server.domain.tld</SAMP> and
-    <SAMP>www.otherdomain.tld</SAMP> respectively.
-    The hostname <SAMP>www.domain.tld</SAMP> is an alias (CNAME)
-    for <SAMP>server.domain.tld</SAMP> and will represent the
-    main server.
-    <P>
-    <STRONG>Server configuration:</STRONG>
-
-
-    <BLOCKQUOTE><PRE>
-    ...
-    Listen 80
-    DocumentRoot /www/domain
-    ServerName www.domain.tld
-
-    &lt;VirtualHost 111.22.33.55&gt;
-    DocumentRoot /www/otherdomain
-    ServerName www.otherdomain.tld
-    ...
-    &lt;/VirtualHost&gt;
-    </PRE>
-    <SAMP>www.otherdomain.tld</SAMP> can only be reached through the
-    address <SAMP>111.22.33.55</SAMP>, while <SAMP>www.domain.tld</SAMP>
-    can only be reached through <SAMP>111.22.33.44</SAMP>
-    (which represents our main server).
-    </BLOCKQUOTE>
-    <P>
-
-<LI><STRONG>Setup 2:</STRONG>
-    Same as setup 1, but we don't want to have a dedicated main server.
-    <P>
-    <STRONG>Server configuration:</STRONG>
-
-    <BLOCKQUOTE><PRE>
-    ...
-    Listen 80
-    ServerName server.domain.tld
-    
-    &lt;VirtualHost 111.22.33.44&gt;
-    DocumentRoot /www/domain
-    ServerName www.domain.tld
-    ...
-    &lt;/VirtualHost&gt;
-
-    &lt;VirtualHost 111.22.33.55&gt;
-    DocumentRoot /www/otherdomain
-    ServerName www.otherdomain.tld
-    ...
-    &lt;/VirtualHost&gt;
-    </PRE>
-    The main server can never catch a request, because all IP addresses
-    of our machine are in use for IP-based virtual hosts
-    (only <SAMP>localhost</SAMP> requests can hit the main server).
-    </BLOCKQUOTE>
-    <P>
-    
-<LI><STRONG>Setup 3:</STRONG>
-    The server machine has two IP addresses (<SAMP>111.22.33.44</SAMP>
-    and <SAMP>111.22.33.55</SAMP>)
-    which resolve to the names <SAMP>server.domain.tld</SAMP> and
-    <SAMP>www-cache.domain.tld</SAMP> respectively.
-    The hostname <SAMP>www.domain.tld</SAMP> is an alias (CNAME)
-    for <SAMP>server.domain.tld</SAMP> and will represent the
-    main server.
-    <SAMP>www-cache.domain.tld</SAMP> will become our proxy-cache 
-    listening on port 8080, while the web server itself uses the default
-    port 80.
-    <P>
-    <STRONG>Server configuration:</STRONG>
-
-    <BLOCKQUOTE><PRE>
-    ...
-    Listen 111.22.33.44:80
-    Listen 111.22.33.55:8080
-    ServerName server.domain.tld
-    
-    &lt;VirtualHost 111.22.33.44:80&gt;
-    DocumentRoot /www/domain
-    ServerName www.domain.tld
-    ...
-    &lt;/VirtualHost&gt;
-
-    &lt;VirtualHost 111.22.33.55:8080&gt;
-    ServerName www-cache.domain.tld
-    ...
-      &lt;Directory proxy:&gt;
-      Order Deny,Allow
-      Deny from all
-      Allow from 111.22.33
-      &lt;/Directory&gt;
-    &lt;/VirtualHost&gt;
-    </PRE>
-    The main server can never catch a request, because all IP addresses
-    (apart from <SAMP>localhost</SAMP>) of our machine are in use for IP-based
-    virtual hosts. The web server can only be reached on the first address
-    through port 80 and the proxy only on the second address through port 8080.
-    </BLOCKQUOTE>
-</UL>
-
-<HR>
-
-<H3><A NAME="mixed">Mixed name-/IP-based vhosts</A></H3>
-
-<UL>
-
-<LI><STRONG>Setup:</STRONG>
-    The server machine has three IP addresses (<SAMP>111.22.33.44</SAMP>,
-    <SAMP>111.22.33.55</SAMP> and <SAMP>111.22.33.66</SAMP>)
-    which resolve to the names <SAMP>server.domain.tld</SAMP>,
-    <SAMP>www.otherdomain1.tld</SAMP> and <SAMP>www.otherdomain2.tld</SAMP>
-    respectively.
-    The address <SAMP>111.22.33.44</SAMP> should we used for a couple
-    of name-based vhosts and the other addresses for IP-based vhosts. 
-    <P>
-    <STRONG>Server configuration:</STRONG>
-
-    <BLOCKQUOTE><PRE>
-    ...
-    Listen 80
-    ServerName server.domain.tld
-
-    NameVirtualHost 111.22.33.44
-
-    &lt;VirtualHost 111.22.33.44&gt;
-    DocumentRoot /www/domain
-    ServerName www.domain.tld
-    ...
-    &lt;/VirtualHost&gt;
-   
-    &lt;VirtualHost 111.22.33.44&gt;
-    DocumentRoot /www/subdomain1
-    ServerName www.sub1.domain.tld
-    ...
-    &lt;/VirtualHost&gt; 
-    
-    &lt;VirtualHost 111.22.33.44&gt;
-    DocumentRoot /www/subdomain2
-    ServerName www.sub2.domain.tld
-    ...
-    &lt;/VirtualHost&gt; 
- 
-    &lt;VirtualHost 111.22.33.55&gt;
-    DocumentRoot /www/otherdomain1
-    ServerName www.otherdomain1.tld
-    ...
-    &lt;/VirtualHost&gt; 
-    
-    &lt;VirtualHost 111.22.33.66&gt;
-    DocumentRoot /www/otherdomain2
-    ServerName www.otherdomain2.tld
-    ...
-    &lt;/VirtualHost&gt;     
-    </PRE></BLOCKQUOTE>
-
-</UL>
-
-<HR>
-
-<H3><A NAME="port">Port-based vhosts</A></H3>
-
-<UL>
-
-<LI><STRONG>Setup:</STRONG>
-    The server machine has one IP address (<SAMP>111.22.33.44</SAMP>)
-    which resolves to the name <SAMP>www.domain.tld</SAMP>.
-    If we don't have the option to get another address or alias
-    for our server we can use port-based vhosts if we need
-    a virtual host with a different configuration.
-    <P>
-    <STRONG>Server configuration:</STRONG>
-
-    <BLOCKQUOTE><PRE>
-    ...
-    Listen 80
-    Listen 8080
-    ServerName www.domain.tld
-    DocumentRoot /www/domain
-
-    &lt;VirtualHost 111.22.33.44:8080&gt;
-    DocumentRoot /www/domain2
-    ...
-    &lt;/VirtualHost&gt;
-    </PRE>
-    A request to <SAMP>www.domain.tld</SAMP> on port 80 is served
-    from the main server and a request to port 8080 is served from
-    the virtual host.
-    </BLOCKQUOTE>
-</UL> 
-   
-<HR>
-
-<H3><A NAME="default">Using <CODE>_default_</CODE> vhosts</A></H3>
-
-<UL>
-
-<LI><STRONG>Setup 1:</STRONG> 
-    Catching <EM>every</EM> request to any unspecified IP address and port,
-    <EM>i.e.</EM>, an address/port combination that is not used for any other
-    virtual host.
-    <P>
-    <STRONG>Server configuration:</STRONG>
-
-    <BLOCKQUOTE><PRE>
-    ...
-    &lt;VirtualHost _default_:*&gt;
-    DocumentRoot /www/default
-    ...
-    &lt;/VirtualHost&gt;
-    </PRE>
-    Using such a default vhost with a wildcard port effectively
-    prevents any request going to the main server.<BR>
-    A default vhost never serves a request that was sent to an
-    address/port that is used for name-based vhosts. If the request
-    contained an unknown or no <CODE>Host:</CODE> header it is
-    always served from the primary name-based vhost (the
-    vhost for that address/port appearing first in the configuration
-    file).<BR>
-    You can use
-    <A HREF="../mod/mod_alias.html#aliasmatch"><CODE>AliasMatch</CODE></A>
-    or
-    <A HREF="../mod/mod_rewrite.html#RewriteRule"><CODE>RewriteRule</CODE></A>
-    to rewrite any request to a single information page (or script).
-    </BLOCKQUOTE>
-    <P>
-    
-<LI><STRONG>Setup 2:</STRONG> 
-    Same as setup 1, but the server listens on several ports and
-    we want to use a second <CODE>_default_</CODE> vhost for port 80.
-    <P>
-    <STRONG>Server configuration:</STRONG>
-
-    <BLOCKQUOTE><PRE>
-    ...
-    &lt;VirtualHost _default_:80&gt;
-    DocumentRoot /www/default80
-    ...
-    &lt;/VirtualHost&gt;
-    
-    &lt;VirtualHost _default_:*&gt;
-    DocumentRoot /www/default
-    ...
-    &lt;/VirtualHost&gt;    
-    </PRE>
-    The default vhost for port 80 (which <EM>must</EM> appear before
-    any default vhost with a wildcard port) catches all requests that
-    were sent to an unspecified IP address. The main server is
-    never used to serve a request.
-    </BLOCKQUOTE>    
-    <P>
-    
-<LI><STRONG>Setup 3:</STRONG> 
-    We want to have a default vhost for port 80, but no other default vhosts.
-    <P>
-    <STRONG>Server configuration:</STRONG>
-
-    <BLOCKQUOTE><PRE>
-    ...
-    &lt;VirtualHost _default_:80&gt;
-    DocumentRoot /www/default
-    ...
-    &lt;/VirtualHost&gt;
-    </PRE>
-    A request to an unspecified address on port 80 is served from the
-    default vhost any other request to an unspecified address and port
-    is served from the main server.
-    </BLOCKQUOTE>
-
-</UL>
-
-<HR>
-
-<H3><A NAME="migrate">Migrating a name-based vhost to an IP-based vhost</A></H3>
-
-<UL>
-
-<LI><STRONG>Setup:</STRONG>
-    The name-based vhost with the hostname
-    <SAMP>www.otherdomain.tld</SAMP> (from our <A HREF="#name">name-based</A>
-    example, setup 2) should get its own IP address.
-    To avoid problems with name servers or proxies who cached the old
-    IP address for the name-based vhost we want to provide both variants
-    during a migration phase.<BR>
-    The solution is easy, because we can simply add the new IP address
-    (<SAMP>111.22.33.66</SAMP>) to the <CODE>VirtualHost</CODE> directive.
-    <P>
-    <STRONG>Server configuration:</STRONG>
-
-    <BLOCKQUOTE><PRE>
-    ...
-    Listen 80
-    ServerName www.domain.tld
-    DocumentRoot /www/domain
-
-    NameVirtualHost 111.22.33.55
-
-    &lt;VirtualHost 111.22.33.55 111.22.33.66&gt;
-    DocumentRoot /www/otherdomain
-    ServerName www.otherdomain.tld
-    ...
-    &lt;/VirtualHost&gt;
-   
-    &lt;VirtualHost 111.22.33.55&gt;
-    DocumentRoot /www/subdomain
-    ServerName www.sub.domain.tld
-    ServerAlias *.sub.domain.tld
-    ...
-    &lt;/VirtualHost&gt;
-    </PRE>
-    The vhost can now be accessed through the new address (as an IP-based
-    vhost) and through the old address (as a name-based vhost).
-    </BLOCKQUOTE>
-
-</UL>
-
-<HR>
-
-<H3><A NAME="serverpath">Using the <CODE>ServerPath</CODE> directive</A></H3>
-
-<UL>
-
-<LI><STRONG>Setup:</STRONG>
-    We have a server with two name-based vhosts. In order to match the correct
-    virtual host a client must send the correct <CODE>Host:</CODE> header.
-    Old HTTP/1.0 clients do not send such a header and Apache has no clue
-    what vhost the client tried to reach (and serves the request from
-    the primary vhost). To provide as much backward compatibility
-    as possible we create a primary vhost which returns a single page
-    containing links with an URL prefix to the name-based virtual hosts.
-    <P>
-    <STRONG>Server configuration:</STRONG>
-
-    <BLOCKQUOTE><PRE>
-    ...
-    NameVirtualHost 111.22.33.44
-
-    &lt;VirtualHost 111.22.33.44&gt;
-    # primary vhost
-    DocumentRoot /www/subdomain
-    RewriteEngine On
-    RewriteRule ^/.* /www/subdomain/index.html
-    ...
-    &lt;/VirtualHost&gt;
-
-    &lt;VirtualHost 111.22.33.44&gt;
-    DocumentRoot /www/subdomain/sub1
-    ServerName www.sub1.domain.tld
-    ServerPath /sub1/
-    RewriteEngine On
-    RewriteRule ^(/sub1/.*) /www/subdomain$1 
-    ...
-    &lt;/VirtualHost&gt;
-
-    &lt;VirtualHost 111.22.33.44&gt;
-    DocumentRoot /www/subdomain/sub2
-    ServerName www.sub2.domain.tld
-    ServerPath /sub2/
-    RewriteEngine On
-    RewriteRule ^(/sub2/.*) /www/subdomain$1 
-    ...
-    &lt;/VirtualHost&gt;
-    </PRE>
-    Due to the <A HREF="../mod/core.html#serverpath"><CODE>ServerPath</CODE></A>
-    directive a request to the
-    URL <SAMP>http://www.sub1.domain.tld/sub1/</SAMP> is <EM>always</EM>
-    served from the sub1-vhost. <BR>
-    A request to the URL <SAMP>http://www.sub1.domain.tld/</SAMP>
-    is only served from the sub1-vhost if the client sent a correct
-    <CODE>Host:</CODE> header.
-    If no <CODE>Host:</CODE> header is sent the client gets the
-    information page from the primary host.<BR>
-    Please note that there is one oddity: A request to
-    <SAMP>http://www.sub2.domain.tld/sub1/</SAMP> is also served from
-    the sub1-vhost if the client sent no <CODE>Host:</CODE> header. <BR>
-    The <CODE>RewriteRule</CODE> directives are used to make sure that
-    a client which sent a correct <CODE>Host:</CODE> header can use
-    both URL variants, <EM>i.e.</EM>, with or without URL prefix.
-    </BLOCKQUOTE>
-
-</UL> 
-
-<LI><STRONG>Setup:</STRONG>
-<!--#include virtual="footer.html" -->
-</BODY>
-</HTML>
diff --git a/docs/manual/vhosts/fd-limits.html b/docs/manual/vhosts/fd-limits.html
deleted file mode 100644
index dc09fb2..0000000
--- a/docs/manual/vhosts/fd-limits.html
+++ /dev/null
@@ -1,73 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta name="generator" content="HTML Tidy, see www.w3.org" />
-
-    <title>Apache Server Virtual Host Support</title>
-  </head>
-  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-
-  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-  vlink="#000080" alink="#FF0000">
-    <!--#include virtual="header.html" -->
-
-    <h1 align="CENTER">File Descriptor Limits</h1>
-
-    <p>When using a large number of Virtual Hosts, Apache may run
-    out of available file descriptors (sometimes called <cite>file
-    handles</cite> if each Virtual Host specifies different log
-    files. The total number of file descriptors used by Apache is
-    one for each distinct error log file, one for every other log
-    file directive, plus 10-20 for internal use. Unix operating
-    systems limit the number of file descriptors that may be used
-    by a process; the limit is typically 64, and may usually be
-    increased up to a large hard-limit.</p>
-
-    <p>Although Apache attempts to increase the limit as required,
-    this may not work if:</p>
-
-    <ol>
-      <li>Your system does not provide the setrlimit() system
-      call.</li>
-
-      <li>The setrlimit(RLIMIT_NOFILE) call does not function on
-      your system (such as Solaris 2.3)</li>
-
-      <li>The number of file descriptors required exceeds the hard
-      limit.</li>
-
-      <li>Your system imposes other limits on file descriptors,
-      such as a limit on stdio streams only using file descriptors
-      below 256. (Solaris 2)</li>
-    </ol>
-    In the event of problems you can: 
-
-    <ul>
-      <li>Reduce the number of log files; don't specify log files
-      in the VirtualHost sections, but only log to the main log
-      files.</li>
-
-      <li>
-        If you system falls into 1 or 2 (above), then increase the
-        file descriptor limit before starting Apache, using a
-        script like 
-
-        <blockquote>
-          <code>#!/bin/sh<br />
-           ulimit -S -n 100<br />
-           exec httpd</code>
-        </blockquote>
-      </li>
-    </ul>
-
-    <p>Please see the <a
-    href="../misc/descriptors.html">Descriptors and Apache</a>
-    document containing further details about file descriptor
-    problems and how they can be solved on your operating
-    system.</p>
-    <!--#include virtual="footer.html" -->
-  </body>
-</html>
-
diff --git a/docs/manual/vhosts/fd-limits.html.en b/docs/manual/vhosts/fd-limits.html.en
deleted file mode 100644
index dc09fb2..0000000
--- a/docs/manual/vhosts/fd-limits.html.en
+++ /dev/null
@@ -1,73 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta name="generator" content="HTML Tidy, see www.w3.org" />
-
-    <title>Apache Server Virtual Host Support</title>
-  </head>
-  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-
-  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-  vlink="#000080" alink="#FF0000">
-    <!--#include virtual="header.html" -->
-
-    <h1 align="CENTER">File Descriptor Limits</h1>
-
-    <p>When using a large number of Virtual Hosts, Apache may run
-    out of available file descriptors (sometimes called <cite>file
-    handles</cite> if each Virtual Host specifies different log
-    files. The total number of file descriptors used by Apache is
-    one for each distinct error log file, one for every other log
-    file directive, plus 10-20 for internal use. Unix operating
-    systems limit the number of file descriptors that may be used
-    by a process; the limit is typically 64, and may usually be
-    increased up to a large hard-limit.</p>
-
-    <p>Although Apache attempts to increase the limit as required,
-    this may not work if:</p>
-
-    <ol>
-      <li>Your system does not provide the setrlimit() system
-      call.</li>
-
-      <li>The setrlimit(RLIMIT_NOFILE) call does not function on
-      your system (such as Solaris 2.3)</li>
-
-      <li>The number of file descriptors required exceeds the hard
-      limit.</li>
-
-      <li>Your system imposes other limits on file descriptors,
-      such as a limit on stdio streams only using file descriptors
-      below 256. (Solaris 2)</li>
-    </ol>
-    In the event of problems you can: 
-
-    <ul>
-      <li>Reduce the number of log files; don't specify log files
-      in the VirtualHost sections, but only log to the main log
-      files.</li>
-
-      <li>
-        If you system falls into 1 or 2 (above), then increase the
-        file descriptor limit before starting Apache, using a
-        script like 
-
-        <blockquote>
-          <code>#!/bin/sh<br />
-           ulimit -S -n 100<br />
-           exec httpd</code>
-        </blockquote>
-      </li>
-    </ul>
-
-    <p>Please see the <a
-    href="../misc/descriptors.html">Descriptors and Apache</a>
-    document containing further details about file descriptor
-    problems and how they can be solved on your operating
-    system.</p>
-    <!--#include virtual="footer.html" -->
-  </body>
-</html>
-
diff --git a/docs/manual/vhosts/footer.html b/docs/manual/vhosts/footer.html
deleted file mode 100644
index 24e2703..0000000
--- a/docs/manual/vhosts/footer.html
+++ /dev/null
@@ -1,5 +0,0 @@
-    <hr />
-
-    <h3 align="CENTER">Apache HTTP Server Version 2.0</h3>
-    <a href="./"><img src="../images/index.gif" alt="Index" /></a>
-    <a href="../"><img src="../images/home.gif" alt="Home" /></a>
diff --git a/docs/manual/vhosts/header.html b/docs/manual/vhosts/header.html
deleted file mode 100644
index cbdcb99..0000000
--- a/docs/manual/vhosts/header.html
+++ /dev/null
@@ -1,7 +0,0 @@
-    <div align="CENTER">
-      <img src="../images/sub.gif" alt="[APACHE DOCUMENTATION]" /> 
-
-      <h3>Apache HTTP Server Version 2.0</h3>
-    </div>
-
-
diff --git a/docs/manual/vhosts/index.html b/docs/manual/vhosts/index.html
deleted file mode 100644
index 7cb19b8..0000000
--- a/docs/manual/vhosts/index.html
+++ /dev/null
@@ -1,84 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta name="generator" content="HTML Tidy, see www.w3.org" />
-
-    <title>Apache Virtual Host documentation</title>
-  </head>
-  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-
-  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-  vlink="#000080" alink="#FF0000">
-    <!--#include virtual="header.html" -->
-
-    <h1 align="CENTER">Apache Virtual Host documentation</h1>
-
-    <p>The term <cite>Virtual Host</cite> refers to the practice of
-    maintaining more than one server on one machine, as
-    differentiated by their apparent hostname. For example, it is
-    often desirable for companies sharing a web server to have
-    their own domains, with web servers accessible as
-    <samp>www.company1.com</samp> and
-    <samp>www.company2.com</samp>, without requiring the user to
-    know any extra path information.</p>
-
-    <p>Apache was one of the first servers to support IP-based
-    virtual hosts right out of the box. Versions 1.1 and later of
-    Apache support both, IP-based and name-based virtual hosts
-    (vhosts). The latter variant of virtual hosts is sometimes also
-    called host-based or non-IP virtual hosts.</p>
-
-    <p>Below is a list of documentation pages which explain all
-    details of virtual host support in Apache version 1.3 and
-    later.</p>
-    <hr />
-
-    <h2>Virtual Host Support</h2>
-
-    <ul>
-      <li><a href="name-based.html">Name-based Virtual
-      Hosts</a></li>
-
-      <li><a href="ip-based.html">IP-based Virtual Hosts</a></li>
-
-      <li><a href="examples.html">Virtual Host examples for common
-      setups</a></li>
-
-      <li><a href="details.html">In-Depth Discussion of Virtual
-      Host Matching</a></li>
-
-      <li><a href="fd-limits.html">File Descriptor Limits</a></li>
-
-      <li><a href="mass.html">Dynamically Configured Mass Virtual
-      Hosting</a></li>
-    </ul>
-
-    <h2>Configuration directives</h2>
-
-    <ul>
-      <li><a
-      href="../mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></li>
-
-      <li><a
-      href="../mod/core.html#namevirtualhost">NameVirtualHost</a></li>
-
-      <li><a href="../mod/core.html#servername">ServerName</a></li>
-
-      <li><a
-      href="../mod/core.html#serveralias">ServerAlias</a></li>
-
-      <li><a href="../mod/core.html#serverpath">ServerPath</a></li>
-    </ul>
-
-    <p>Folks trying to debug their virtual host configuration may
-    find the Apache <code>-t -D DUMP_VHOSTS</code> command line switch 
-    useful. It will dump out a description of how Apache parsed the
-    configuration file. Careful examination of the IP addresses and
-    server names may help uncover configuration mistakes. 
-    <!--#include virtual="footer.html" -->
-    </p>
-  </body>
-</html>
-
diff --git a/docs/manual/vhosts/index.html.en b/docs/manual/vhosts/index.html.en
deleted file mode 100644
index 7cb19b8..0000000
--- a/docs/manual/vhosts/index.html.en
+++ /dev/null
@@ -1,84 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta name="generator" content="HTML Tidy, see www.w3.org" />
-
-    <title>Apache Virtual Host documentation</title>
-  </head>
-  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-
-  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-  vlink="#000080" alink="#FF0000">
-    <!--#include virtual="header.html" -->
-
-    <h1 align="CENTER">Apache Virtual Host documentation</h1>
-
-    <p>The term <cite>Virtual Host</cite> refers to the practice of
-    maintaining more than one server on one machine, as
-    differentiated by their apparent hostname. For example, it is
-    often desirable for companies sharing a web server to have
-    their own domains, with web servers accessible as
-    <samp>www.company1.com</samp> and
-    <samp>www.company2.com</samp>, without requiring the user to
-    know any extra path information.</p>
-
-    <p>Apache was one of the first servers to support IP-based
-    virtual hosts right out of the box. Versions 1.1 and later of
-    Apache support both, IP-based and name-based virtual hosts
-    (vhosts). The latter variant of virtual hosts is sometimes also
-    called host-based or non-IP virtual hosts.</p>
-
-    <p>Below is a list of documentation pages which explain all
-    details of virtual host support in Apache version 1.3 and
-    later.</p>
-    <hr />
-
-    <h2>Virtual Host Support</h2>
-
-    <ul>
-      <li><a href="name-based.html">Name-based Virtual
-      Hosts</a></li>
-
-      <li><a href="ip-based.html">IP-based Virtual Hosts</a></li>
-
-      <li><a href="examples.html">Virtual Host examples for common
-      setups</a></li>
-
-      <li><a href="details.html">In-Depth Discussion of Virtual
-      Host Matching</a></li>
-
-      <li><a href="fd-limits.html">File Descriptor Limits</a></li>
-
-      <li><a href="mass.html">Dynamically Configured Mass Virtual
-      Hosting</a></li>
-    </ul>
-
-    <h2>Configuration directives</h2>
-
-    <ul>
-      <li><a
-      href="../mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></li>
-
-      <li><a
-      href="../mod/core.html#namevirtualhost">NameVirtualHost</a></li>
-
-      <li><a href="../mod/core.html#servername">ServerName</a></li>
-
-      <li><a
-      href="../mod/core.html#serveralias">ServerAlias</a></li>
-
-      <li><a href="../mod/core.html#serverpath">ServerPath</a></li>
-    </ul>
-
-    <p>Folks trying to debug their virtual host configuration may
-    find the Apache <code>-t -D DUMP_VHOSTS</code> command line switch 
-    useful. It will dump out a description of how Apache parsed the
-    configuration file. Careful examination of the IP addresses and
-    server names may help uncover configuration mistakes. 
-    <!--#include virtual="footer.html" -->
-    </p>
-  </body>
-</html>
-
diff --git a/docs/manual/vhosts/ip-based.html b/docs/manual/vhosts/ip-based.html
deleted file mode 100644
index aa833f3..0000000
--- a/docs/manual/vhosts/ip-based.html
+++ /dev/null
@@ -1,139 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta name="generator" content="HTML Tidy, see www.w3.org" />
-
-    <title>Apache IP-based Virtual Host Support</title>
-  </head>
-  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-
-  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-  vlink="#000080" alink="#FF0000">
-    <!--#include virtual="header.html" -->
-
-    <h1 align="CENTER">Apache IP-based Virtual Host Support</h1>
-    <strong>See also:</strong> <a href="name-based.html">Name-based
-    Virtual Hosts Support</a> 
-    <hr />
-
-    <h2>System requirements</h2>
-    As the term <cite>IP-based</cite> indicates, the server
-    <strong>must have a different IP address for each IP-based
-    virtual host</strong>. This can be achieved by the machine
-    having several physical network connections, or by use of
-    virtual interfaces which are supported by most modern operating
-    systems (see system documentation for details, these are
-    frequently called "ip aliases", and the "ifconfig" command is
-    most commonly used to set them up). 
-
-    <h2>How to set up Apache</h2>
-    There are two ways of configuring apache to support multiple
-    hosts. Either by running a separate httpd daemon for each
-    hostname, or by running a single daemon which supports all the
-    virtual hosts. 
-
-    <p>Use multiple daemons when:</p>
-
-    <ul>
-      <li>There are security partitioning issues, such as company1
-      does not want anyone at company2 to be able to read their
-      data except via the web. In this case you would need two
-      daemons, each running with different <a
-      href="../mod/mpm_common.html#user">User</a>, <a
-      href="../mod/mpm_common.html#group">Group</a>, <a
-      href="../mod/mpm_common.html#listen">Listen</a>, and <a
-      href="../mod/core.html#serverroot">ServerRoot</a>
-      settings.</li>
-
-      <li>You can afford the memory and <a
-      href="../misc/descriptors.html">file descriptor
-      requirements</a> of listening to every IP alias on the
-      machine. It's only possible to <a
-      href="../mod/mpm_common.html#listen">Listen</a> to the "wildcard"
-      address, or to specific addresses. So if you have a need to
-      listen to a specific address for whatever reason, then you
-      will need to listen to all specific addresses. (Although one
-      httpd could listen to N-1 of the addresses, and another could
-      listen to the remaining address.)</li>
-    </ul>
-    Use a single daemon when: 
-
-    <ul>
-      <li>Sharing of the httpd configuration between virtual hosts
-      is acceptable.</li>
-
-      <li>The machine services a large number of requests, and so
-      the performance loss in running separate daemons may be
-      significant.</li>
-    </ul>
-
-    <h2>Setting up multiple daemons</h2>
-    Create a separate httpd installation for each virtual host. For
-    each installation, use the <a
-    href="../mod/mpm_common.html#listen">Listen</a> directive in the
-    configuration file to select which IP address (or virtual host)
-    that daemon services. e.g. 
-<pre>
-    Listen www.smallco.com:80
-</pre>
-    It is recommended that you use an IP address instead of a
-    hostname (see <a href="../dns-caveats.html">DNS caveats</a>). 
-
-    <h2>Setting up a single daemon with virtual hosts</h2>
-    For this case, a single httpd will service requests for the
-    main server and all the virtual hosts. The <a
-    href="../mod/core.html#virtualhost">VirtualHost</a> directive
-    in the configuration file is used to set the values of <a
-    href="../mod/core.html#serveradmin">ServerAdmin</a>, <a
-    href="../mod/core.html#servername">ServerName</a>, <a
-    href="../mod/core.html#documentroot">DocumentRoot</a>, <a
-    href="../mod/core.html#errorlog">ErrorLog</a> and <a
-    href="../mod/mod_log_config.html#transferlog">TransferLog</a>
-    or <a href="../mod/mod_log_config.html#customlog">CustomLog</a>
-    configuration directives to different values for each virtual
-    host. e.g. 
-<pre>
-    &lt;VirtualHost www.smallco.com&gt;
-    ServerAdmin webmaster@mail.smallco.com
-    DocumentRoot /groups/smallco/www
-    ServerName www.smallco.com
-    ErrorLog /groups/smallco/logs/error_log
-    TransferLog /groups/smallco/logs/access_log
-    &lt;/VirtualHost&gt;
-
-    &lt;VirtualHost www.baygroup.org&gt;
-    ServerAdmin webmaster@mail.baygroup.org
-    DocumentRoot /groups/baygroup/www
-    ServerName www.baygroup.org
-    ErrorLog /groups/baygroup/logs/error_log
-    TransferLog /groups/baygroup/logs/access_log
-    &lt;/VirtualHost&gt;
-</pre>
-    It is recommended that you use an IP address instead of a
-    hostname (see <a href="../dns-caveats.html">DNS caveats</a>). 
-
-    <p>Almost <strong>any</strong> configuration directive can be
-    put in the VirtualHost directive, with the exception of
-    directives that control process creation and a few other
-    directives. To find out if a directive can be used in the
-    VirtualHost directive, check the <a
-    href="../mod/directive-dict.html#Context">Context</a> using the
-    <a href="../mod/directives.html">directive index</a>.</p>
-
-    <p><a href="../mod/mpm_common.html#user">User</a> and <a
-    href="../mod/mpm_common.html#group">Group</a> may be used inside a
-    VirtualHost directive if the <a href="../suexec.html">suEXEC
-    wrapper</a> is used.</p>
-
-    <p><em>SECURITY:</em> When specifying where to write log files,
-    be aware of some security risks which are present if anyone
-    other than the user that starts Apache has write access to the
-    directory where they are written. See the <a
-    href="../misc/security_tips.html">security tips</a> document
-    for details.</p>
-    <!--#include virtual="footer.html" -->
-  </body>
-</html>
-
diff --git a/docs/manual/vhosts/mass.html b/docs/manual/vhosts/mass.html
deleted file mode 100644
index eb46f3d..0000000
--- a/docs/manual/vhosts/mass.html
+++ /dev/null
@@ -1,442 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta name="generator" content="HTML Tidy, see www.w3.org" />
-
-    <title>Dynamically configured mass virtual hosting</title>
-  </head>
-  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-
-  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-  vlink="#000080" alink="#FF0000">
-    <!--#include virtual="header.html" -->
-
-    <h1 align="CENTER">Dynamically configured mass virtual
-    hosting</h1>
-
-    <p>This document describes how to efficiently serve an
-    arbitrary number of virtual hosts with Apache 1.3. <!--
-
-                Written by Tony Finch (fanf@demon.net) (dot@dotat.at).
-
-                Some examples were derived from Ralf S. Engleschall's document
-                    http://www.engelschall.com/pw/apache/rewriteguide/
-
-                Some suggestions were made by Brian Behlendorf.
-
-                -->
-    </p>
-
-    <h2><a id="contents" name="contents">Contents:</a></h2>
-
-    <ul>
-      <li><a href="#motivation">Motivation</a></li>
-
-      <li><a href="#overview">Overview</a></li>
-
-      <li><a href="#simple">Simple dynamic virtual hosts</a></li>
-
-      <li><a href="#homepages">A virtually hosted homepages
-      system</a></li>
-
-      <li><a href="#combinations">Using more than one virtual
-      hosting system on the same server</a></li>
-
-      <li><a href="#ipbased">More efficient IP-based virtual
-      hosting</a></li>
-
-      <li><a href="#oldversion">Using older versions of
-      Apache</a></li>
-
-      <li><a href="#simple.rewrite">Simple dynamic virtual hosts
-      using <code>mod_rewrite</code></a></li>
-
-      <li><a href="#homepages.rewrite">A homepages system using
-      <code>mod_rewrite</code></a></li>
-
-      <li><a href="#xtra-conf">Using a separate virtual host
-      configuration file</a></li>
-    </ul>
-    <hr />
-
-    <h2><a id="motivation" name="motivation">Motivation</a></h2>
-
-    <p>The techniques described here are of interest if your
-    <code>httpd.conf</code> contains many
-    <code>&lt;VirtualHost&gt;</code> sections that are
-    substantially the same, for example:</p>
-<pre>
-NameVirtualHost 111.22.33.44
-&lt;VirtualHost 111.22.33.44&gt;
-    ServerName                 www.customer-1.com
-    DocumentRoot        /www/hosts/www.customer-1.com/docs
-    ScriptAlias  /cgi-bin/  /www/hosts/www.customer-1.com/cgi-bin
-&lt;/VirtualHost&gt;
-&lt;VirtualHost 111.22.33.44&gt;
-    ServerName                 www.customer-2.com
-    DocumentRoot        /www/hosts/www.customer-2.com/docs
-    ScriptAlias  /cgi-bin/  /www/hosts/www.customer-2.com/cgi-bin
-&lt;/VirtualHost&gt;
-# blah blah blah
-&lt;VirtualHost 111.22.33.44&gt;
-    ServerName                 www.customer-N.com
-    DocumentRoot        /www/hosts/www.customer-N.com/docs
-    ScriptAlias  /cgi-bin/  /www/hosts/www.customer-N.com/cgi-bin
-&lt;/VirtualHost&gt;
-</pre>
-    <br />
-     <br />
-     
-
-    <p>The basic idea is to replace all of the static
-    <code>&lt;VirtualHost&gt;</code> configuration with a mechanism
-    that works it out dynamically. This has a number of
-    advantages:</p>
-
-    <ol>
-      <li>Your configuration file is smaller so Apache starts
-      faster and uses less memory.</li>
-
-      <li>Adding virtual hosts is simply a matter of creating the
-      appropriate directories in the filesystem and entries in the
-      DNS - you don't need to reconfigure or restart Apache.</li>
-    </ol>
-    <br />
-     <br />
-     
-
-    <p>The main disadvantage is that you cannot have a different
-    log file for each virtual host; however if you have very many
-    virtual hosts then doing this is dubious anyway because it eats
-    file descriptors. It is better to log to a pipe or a fifo and
-    arrange for the process at the other end to distribute the logs
-    to the customers (it can also accumulate statistics, etc.).</p>
-    <hr />
-
-    <h2><a id="overview" name="overview">Overview</a></h2>
-
-    <p>A virtual host is defined by two pieces of information: its
-    IP address, and the contents of the <code>Host:</code> header
-    in the HTTP request. The dynamic mass virtual hosting technique
-    is based on automatically inserting this information into the
-    pathname of the file that is used to satisfy the request. This
-    is done most easily using <a
-    href="../mod/mod_vhost_alias.html"><code>mod_vhost_alias</code></a>,
-    but if you are using a version of Apache up to 1.3.6 then you
-    must use <a
-    href="../mod/mod_rewrite.html"><code>mod_rewrite</code></a>.
-    Both of these modules are disabled by default; you must enable
-    one of them when configuring and building Apache if you want to
-    use this technique.</p>
-
-    <p>A couple of things need to be `faked' to make the dynamic
-    virtual host look like a normal one. The most important is the
-    server name which is used by Apache to generate
-    self-referential URLs, etc. It is configured with the
-    <code>ServerName</code> directive, and it is available to CGIs
-    via the <code>SERVER_NAME</code> environment variable. The
-    actual value used at run time is controlled by the <a
-    href="../mod/core.html#usecanonicalname"><code>UseCanonicalName</code></a>
-    setting. With <code>UseCanonicalName Off</code> the server name
-    comes from the contents of the <code>Host:</code> header in the
-    request. With <code>UseCanonicalName DNS</code> it comes from a
-    reverse DNS lookup of the virtual host's IP address. The former
-    setting is used for name-based dynamic virtual hosting, and the
-    latter is used for IP-based hosting. If Apache cannot work out
-    the server name because there is no <code>Host:</code> header
-    or the DNS lookup fails then the value configured with
-    <code>ServerName</code> is used instead.</p>
-
-    <p>The other thing to `fake' is the document root (configured
-    with <code>DocumentRoot</code> and available to CGIs via the
-    <code>DOCUMENT_ROOT</code> environment variable). In a normal
-    configuration this setting is used by the core module when
-    mapping URIs to filenames, but when the server is configured to
-    do dynamic virtual hosting that job is taken over by another
-    module (either <code>mod_vhost_alias</code> or
-    <code>mod_rewrite</code>) which has a different way of doing
-    the mapping. Neither of these modules is responsible for
-    setting the <code>DOCUMENT_ROOT</code> environment variable so
-    if any CGIs or SSI documents make use of it they will get a
-    misleading value.</p>
-    <hr />
-
-    <h2><a id="simple" name="simple">Simple dynamic virtual
-    hosts</a></h2>
-
-    <p>This extract from <code>httpd.conf</code> implements the
-    virtual host arrangement outlined in the <a
-    href="#motivation">Motivation</a> section above, but in a
-    generic fashion using <code>mod_vhost_alias</code>.</p>
-<pre>
-# get the server name from the Host: header
-UseCanonicalName Off
-
-# this log format can be split per-virtual-host based on the first field
-LogFormat "%V %h %l %u %t \"%r\" %s %b" vcommon
-CustomLog logs/access_log vcommon
-
-# include the server name in the filenames used to satisfy requests
-VirtualDocumentRoot /www/hosts/%0/docs
-VirtualScriptAlias  /www/hosts/%0/cgi-bin
-</pre>
-
-    <p>This configuration can be changed into an IP-based virtual
-    hosting solution by just turning <code>UseCanonicalName
-    Off</code> into <code>UseCanonicalName DNS</code>. The server
-    name that is inserted into the filename is then derived from
-    the IP address of the virtual host.</p>
-    <hr />
-
-    <h2><a id="homepages" name="homepages">A virtually hosted
-    homepages system</a></h2>
-
-    <p>This is an adjustment of the above system tailored for an
-    ISP's homepages server. Using a slightly more complicated
-    configuration we can select substrings of the server name to
-    use in the filename so that e.g. the documents for
-    <samp>www.user.isp.com</samp> are found in
-    <code>/home/user/</code>. It uses a single <code>cgi-bin</code>
-    directory instead of one per virtual host.</p>
-<pre>
-# all the preliminary stuff is the same as above, then
-
-# include part of the server name in the filenames
-VirtualDocumentRoot /www/hosts/%2/docs
-
-# single cgi-bin directory
-ScriptAlias  /cgi-bin/  /www/std-cgi/
-</pre>
-
-    <p>There are examples of more complicated
-    <code>VirtualDocumentRoot</code> settings in <a
-    href="../mod/mod_vhost_alias.html">the
-    <code>mod_vhost_alias</code> documentation</a>.</p>
-    <hr />
-
-    <h2><a id="combinations" name="combinations">Using more than
-    one virtual hosting system on the same server</a></h2>
-
-    <p>With more complicated setups you can use Apache's normal
-    <code>&lt;VirtualHost&gt;</code> directives to control the
-    scope of the various virtual hosting configurations. For
-    example, you could have one IP address for homepages customers
-    and another for commercial customers with the following setup.
-    This can of course be combined with conventional
-    <code>&lt;VirtualHost&gt;</code> configuration sections.</p>
-<pre>
-UseCanonicalName Off
-
-LogFormat "%V %h %l %u %t \"%r\" %s %b" vcommon
-
-&lt;Directory /www/commercial&gt;
-    Options FollowSymLinks
-    AllowOverride All
-&lt;/Directory&gt;
-
-&lt;Directory /www/homepages&gt;
-    Options FollowSymLinks
-    AllowOverride None
-&lt;/Directory&gt;
-
-&lt;VirtualHost 111.22.33.44&gt;
-    ServerName www.commercial.isp.com
-
-    CustomLog logs/access_log.commercial vcommon
-
-    VirtualDocumentRoot /www/commercial/%0/docs
-    VirtualScriptAlias  /www/commercial/%0/cgi-bin
-&lt;/VirtualHost&gt;
-
-&lt;VirtualHost 111.22.33.45&gt;
-    ServerName www.homepages.isp.com
-
-    CustomLog logs/access_log.homepages vcommon
-
-    VirtualDocumentRoot /www/homepages/%0/docs
-    ScriptAlias         /cgi-bin/ /www/std-cgi/
-&lt;/VirtualHost&gt;
-</pre>
-    <hr />
-
-    <h2><a id="ipbased" name="ipbased">More efficient IP-based
-    virtual hosting</a></h2>
-
-    <p>After <a href="#simple">the first example</a> I noted that
-    it is easy to turn it into an IP-based virtual hosting setup.
-    Unfortunately that configuration is not very efficient because
-    it requires a DNS lookup for every request. This can be avoided
-    by laying out the filesystem according to the IP addresses
-    themselves rather than the corresponding names and changing the
-    logging similarly. Apache will then usually not need to work
-    out the server name and so incur a DNS lookup.</p>
-<pre>
-# get the server name from the reverse DNS of the IP address
-UseCanonicalName DNS
-
-# include the IP address in the logs so they may be split
-LogFormat "%A %h %l %u %t \"%r\" %s %b" vcommon
-CustomLog logs/access_log vcommon
-
-# include the IP address in the filenames
-VirtualDocumentRootIP /www/hosts/%0/docs
-VirtualScriptAliasIP  /www/hosts/%0/cgi-bin
-</pre>
-    <hr />
-
-    <h2><a id="oldversion" name="oldversion">Using older versions
-    of Apache</a></h2>
-
-    <p>The examples above rely on <code>mod_vhost_alias</code>
-    which appeared after version 1.3.6. If you are using a version
-    of Apache without <code>mod_vhost_alias</code> then you can
-    implement this technique with <code>mod_rewrite</code> as
-    illustrated below, but only for Host:-header-based virtual
-    hosts.</p>
-
-    <p>In addition there are some things to beware of with logging.
-    Apache 1.3.6 is the first version to include the
-    <code>%V</code> log format directive; in versions 1.3.0 - 1.3.3
-    the <code>%v</code> option did what <code>%V</code> does;
-    version 1.3.4 has no equivalent. In all these versions of
-    Apache the <code>UseCanonicalName</code> directive can appear
-    in <code>.htaccess</code> files which means that customers can
-    cause the wrong thing to be logged. Therefore the best thing to
-    do is use the <code>%{Host}i</code> directive which logs the
-    <code>Host:</code> header directly; note that this may include
-    <code>:port</code> on the end which is not the case for
-    <code>%V</code>.</p>
-    <hr />
-
-    <h2><a id="simple.rewrite" name="simple.rewrite">Simple dynamic
-    virtual hosts using <code>mod_rewrite</code></a></h2>
-
-    <p>This extract from <code>httpd.conf</code> does the same
-    thing as <a href="#simple">the first example</a>. The first
-    half is very similar to the corresponding part above but with
-    some changes for backward compatibility and to make the
-    <code>mod_rewrite</code> part work properly; the second half
-    configures <code>mod_rewrite</code> to do the actual work.</p>
-
-    <p>There are a couple of especially tricky bits: By default,
-    <code>mod_rewrite</code> runs before the other URI translation
-    modules (<code>mod_alias</code> etc.) so if they are used then
-    <code>mod_rewrite</code> must be configured to accommodate
-    them. Also, mome magic must be performed to do a
-    per-dynamic-virtual-host equivalent of
-    <code>ScriptAlias</code>.</p>
-<pre>
-# get the server name from the Host: header
-UseCanonicalName Off
-
-# splittable logs
-LogFormat "%{Host}i %h %l %u %t \"%r\" %s %b" vcommon
-CustomLog logs/access_log vcommon
-
-&lt;Directory /www/hosts&gt;
-    # ExecCGI is needed here because we can't force
-    # CGI execution in the way that ScriptAlias does
-    Options FollowSymLinks ExecCGI
-&lt;/Directory&gt;
-
-# now for the hard bit
-
-RewriteEngine On
-
-# a ServerName derived from a Host: header may be any case at all
-RewriteMap  lowercase  int:tolower
-
-## deal with normal documents first:
-# allow Alias /icons/ to work - repeat for other aliases
-RewriteCond  %{REQUEST_URI}  !^/icons/
-# allow CGIs to work
-RewriteCond  %{REQUEST_URI}  !^/cgi-bin/
-# do the magic
-RewriteRule  ^/(.*)$  /www/hosts/${lowercase:%{SERVER_NAME}}/docs/$1
-
-## and now deal with CGIs - we have to force a MIME type
-RewriteCond  %{REQUEST_URI}  ^/cgi-bin/
-RewriteRule  ^/(.*)$  /www/hosts/${lowercase:%{SERVER_NAME}}/cgi-bin/$1  [T=application/x-httpd-cgi]
-
-# that's it!
-</pre>
-    <hr />
-
-    <h2><a id="homepages.rewrite" name="homepages.rewrite">A
-    homepages system using <code>mod_rewrite</code></a></h2>
-
-    <p>This does the same thing as <a href="#homepages">the second
-    example</a>.</p>
-<pre>
-RewriteEngine on
-
-RewriteMap   lowercase  int:tolower
-
-# allow CGIs to work
-RewriteCond  %{REQUEST_URI}  !^/cgi-bin/
-
-# check the hostname is right so that the RewriteRule works
-RewriteCond  ${lowercase:%{SERVER_NAME}}  ^www\.[a-z-]+\.isp\.com$
-
-# concatenate the virtual host name onto the start of the URI
-# the [C] means do the next rewrite on the result of this one
-RewriteRule  ^(.+)  ${lowercase:%{SERVER_NAME}}$1  [C]
-
-# now create the real file name
-RewriteRule  ^www\.([a-z-]+)\.isp\.com/(.*) /home/$1/$2
-
-# define the global CGI directory
-ScriptAlias  /cgi-bin/  /www/std-cgi/
-</pre>
-    <hr />
-
-    <h2><a id="xtra-conf" name="xtra-conf">Using a separate virtual
-    host configuration file</a></h2>
-
-    <p>This arrangement uses more advanced <code>mod_rewrite</code>
-    features to get the translation from virtual host to document
-    root from a separate configuration file. This provides more
-    flexibility but requires more complicated configuration.</p>
-
-    <p>The <code>vhost.map</code> file contains something like
-    this:</p>
-<pre>
-www.customer-1.com  /www/customers/1
-www.customer-2.com  /www/customers/2
-# ...
-www.customer-N.com  /www/customers/N
-</pre>
-    <br />
-     <br />
-     
-
-    <p>The <code>http.conf</code> contains this:</p>
-<pre>
-RewriteEngine on
-
-RewriteMap   lowercase  int:tolower
-
-# define the map file
-RewriteMap   vhost      txt:/www/conf/vhost.map
-
-# deal with aliases as above
-RewriteCond  %{REQUEST_URI}               !^/icons/
-RewriteCond  %{REQUEST_URI}               !^/cgi-bin/
-RewriteCond  ${lowercase:%{SERVER_NAME}}  ^(.+)$
-# this does the file-based remap
-RewriteCond  ${vhost:%1}                  ^(/.*)$
-RewriteRule  ^/(.*)$                      %1/docs/$1
-
-RewriteCond  %{REQUEST_URI}               ^/cgi-bin/
-RewriteCond  ${lowercase:%{SERVER_NAME}}  ^(.+)$
-RewriteCond  ${vhost:%1}                  ^(/.*)$
-RewriteRule  ^/(.*)$                      %1/cgi-bin/$1
-</pre>
-    <br />
-     <br />
-     <!--#include virtual="footer.html" -->
-  </body>
-</html>
-
diff --git a/docs/manual/vhosts/name-based.html b/docs/manual/vhosts/name-based.html
deleted file mode 100644
index 075140a..0000000
--- a/docs/manual/vhosts/name-based.html
+++ /dev/null
@@ -1,231 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <title>Name-based Virtual Hosts</title>
-  </head>
-  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-
-  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-  vlink="#000080" alink="#FF0000">
-    <!--#include virtual="header.html" -->
-
-    <h1 align="CENTER">Name-based Virtual Host Support</h1>
-
-<p>This document describes when and how to use name-based virtual hosts.</p>
-
-<ul>
-<li><a href="#namevip">Name-based vs. IP-based Virtual Hosts</a></li>
-<li><a href="#using">Using Name-based Virtual Hosts</a></li>
-<li><a href="#compat">Compatibility With Older Browsers</a></li>
-</ul>
-
-<p>See also: <a href="examples.html">Virtual Host examples for common
-setups</a>, <a href="ip-based.html">IP-based Virtual Host Support</a>,
-<a href="details.html">An In-Depth Discussion of Virtual Host
-Matching</a>, and <a href="mass.html">Dynamically configured mass
-virtual hosting</a>.</p>
-
-<hr />
-
-<h2><a name="namevip">Name-based vs. IP-based Virtual Hosts</a></h2>
-
-<p>IP-based virtual hosts use the IP address of the connection to
-determine the correct virtual host to serve.  Therefore you need to
-have a separate IP address for each host.  With name-based virtual
-hosting, the server relies on the client to report the hostname as
-part of the HTTP headers.  Using this technique, many different hosts
-can share the same IP address.</p>
-
-<p>Name-based virtual hosting is usually simpler, since you need
-only configure your DNS server to map each hostname to the correct
-IP address and then configure the Apache HTTP Server to recognize
-the different hostnames.  Name-based virtual hosting also eases
-the demand for scarce IP addresses.  Therefore you should use
-name-based virtual hosting unless there is a specific reason to
-choose IP-based virtual hosting.  Some reasons why you might consider
-using IP-based virtual hosting:</p>
-
-<ul> 
-
-<li>Some ancient clients are not compatible with name-based virtual
-hosting.  For name-based virtual hosting to work, the client must send
-the HTTP Host header.  This is required by HTTP/1.1, and is
-implemented by all modern HTTP/1.0 browsers as an extension.  If you
-need to support obsolete clients and still use name-based virtual
-hosting, a possible technique is discussed at the end of this
-document.</li>
-
-<li>Name-based virtual hosting cannot be used with SSL secure servers
-because of the nature of the SSL protocol.</li>
-
-<li>Some operating systems and network equipment implement bandwidth
-management techniques that cannot differentiate between hosts unless
-they are on separate IP addresses.</li>
-
-</ul>
-
-<h2><a name="using">Using Name-based Virtual Hosts</a></h2>
-
-<table border="1">
-<tr><td align="top">
-<strong>Related Directives</strong><br><br>
-
-<a href="../mod/core.html#documentroot">DocumentRoot</a><br />
-<a href="../mod/core.html#namevirtualhost">NameVirtualHost</a><br />
-<a href="../mod/core.html#serveralias">ServerAlias</a><br />
-<a href="../mod/core.html#servername">ServerName</a><br />
-<a href="../mod/core.html#serverpath">ServerPath</a><br />
-<a href="../mod/core.html#virtualhost">VirtualHost</a><br />
-</td></tr></table>
-
-<p>To use name-based virtual hosting, you must designate the IP
-address (and possibly port) on the server that will be accepting
-requests for the hosts.  This is configured using the <a
-href="../mod/core.html#namevirtualhost">NameVirtualHost</a> directive.
-In the normal case where any and all IP addresses on the server should
-be used, you can use <code>*</code> as the argument to
-<code>NameVirtualHost</code>.  Note that mentioning an IP address in a
-<code>NameVirtualHost</code> directive does not automatically make the
-server listen to that IP address.  See <a href="../bind.html">Setting
-which addresses and ports Apache uses</a> for more details.  In addition,
-any IP address specified here must be associated with a network interface
-on the server.</p>
-
-<p>The next step is to create a <a
-href="../mod/core.html#virtualhost">&lt;VirtualHost&gt;</a> block for
-each different host that you would like to serve.  The argument to the
-<code>&lt;VirtualHost&gt;</code> directive should be the same as the
-argument to the <code>NameVirtualHost</code> directive (ie, an IP
-address, or <code>*</code> for all addresses).  Inside each
-<code>&lt;VirtualHost&gt;</code> block, you will need at minimum a <a
-href="../mod/core.html#servername">ServerName</a> directive to
-designate which host is served and a <a
-href="../mod/core.html#documentroot">DocumentRoot</a> directive to
-show where in the filesystem the content for that host lives.</p>
-
-<p>For example, suppose that both <samp>www.domain.tld</samp> and
-<samp>www.otherdomain.tld</samp> point at an IP address
-that the server is listening to.  Then you simply add the following
-to <code>httpd.conf</code>:</p>
-
-<pre>
-    NameVirtualHost *
-
-    &lt;VirtualHost *&gt;
-    ServerName www.domain.tld
-    DocumentRoot /www/domain
-    &lt;/VirtualHost&gt;
-
-    &lt;VirtualHost *&gt;
-    ServerName www.otherdomain.tld
-    DocumentRoot /www/otherdomain
-    &lt;/VirtualHost&gt;
-</pre>
-
-<p>You can alternatively specify an explicit IP address in place of
-the * in both the <code>NameVirtualHost</code> and
-<code>&lt;VirtualHost&gt;</code> directives.</p>
-
-<p>Many servers want to be accessible by more than one name.  This is
-possible with the <a
-href="../mod/core.html#serveralias"><code>ServerAlias</code></a>
-directive, placed inside the &lt;VirtualHost&gt; section. For
-example if you add this to the first &lt;VirtualHost&gt; block
-above</p> 
-
-<blockquote><code> 
-ServerAlias domain.tld *.domain.tld
-</code></blockquote>
-
-<p>then requests for all hosts in the <code>domain.tld</code> domain
-will be served by the <code>www.domain.tld</code> virtual host.  The
-wildcard characters * and ? can be used to match names.  Of course,
-you can't just make up names and place them in <code>ServerName</code>
-or <code>ServerAlias</code>.  You must first have your DNS server
-properly configured to map those names to an IP address associated
-with your server.</p>
-
-<p>Finally, you can fine-tune the configuration of the virtual hosts
-by placing other directives inside the
-<code>&lt;VirtualHost&gt;</code> containers.  Most directives can be
-placed in these containers and will then change the configuration only
-of the relevant virtual host.  To find out if a particular directive
-is allowed, check the <a
-href="../mod/directive-dist.html#Context">Context</a> of the
-directive.  Configuration directives set in the <em>main server
-context</em> (outside any <code>&lt;VirtualHost&gt;</code> container)
-will be used only if they are not overriden by the virtual host
-settings.</p>
-
-<p>Now when a request arrives, the server will first check if it is
-using an IP address that matches the <code>NameVirtualHost</code>.  If
-it is, then it will look at each <code>&lt;VirtualHost&gt;</code>
-section with a matching IP address and try to find one where the
-<code>ServerName</code> or <code>ServerAlias</code> matches the
-requested hostname.  If it finds one, then it uses the configuration
-for that server.  If no matching virtual host is found, then
-<strong>the first listed virtual host</strong> that matches the IP
-address will be used.</p>
-
-<p>As a consequence, the first listed virtual host is the
-<em>default</em> virtual host.  The <code>DocumentRoot</code> from the
-<em>main server</em> will <strong>never</strong> be used when an IP
-address matches the <code>NameVirtualHost</code> directive.  If you
-would like to have a special configuration for requests that do not
-match any particular virtual host, simply put that configuration in a
-<code>&lt;VirtualHost&gt;</code> container and list it first in the
-configuration file.</p>
-
-<h2><a name="compat">Compatibility with Older Browsers</a></h2>
-
-    <p>As mentioned earlier, there are some clients 
-    who do not send the required data for the name-based virtual
-    hosts to work properly. These clients will always be sent the
-    pages from the first virtual host listed for that IP address
-    (the <cite>primary</cite> name-based virtual host).</p>
-
-    <p>There is a possible workaround with the <a
-    href="../mod/core.html#serverpath"><code>ServerPath</code></a>
-    directive, albeit a slightly cumbersome one:</p>
-
-    <p>Example configuration:</p>
-<pre>
-    NameVirtualHost 111.22.33.44
-
-    &lt;VirtualHost 111.22.33.44&gt;
-    ServerName www.domain.tld
-    ServerPath /domain
-    DocumentRoot /web/domain
-    &lt;/VirtualHost&gt;
-</pre>
-
-    <p>What does this mean? It means that a request for any URI
-    beginning with "<samp>/domain</samp>" will be served from the
-    virtual host <samp>www.domain.tld</samp> This means that the
-    pages can be accessed as
-    <code>http://www.domain.tld/domain/</code> for all clients,
-    although clients sending a <samp>Host:</samp> header can also
-    access it as <code>http://www.domain.tld/</code>.</p>
-
-    <p>In order to make this work, put a link on your primary
-    virtual host's page to
-    <samp>http://www.domain.tld/domain/</samp> Then, in the virtual
-    host's pages, be sure to use either purely relative links
-    (<em>e.g.</em>, "<samp>file.html</samp>" or
-    "<samp>../icons/image.gif</samp>" or links containing the
-    prefacing <samp>/domain/</samp> (<em>e.g.</em>,
-    "<samp>http://www.domain.tld/domain/misc/file.html</samp>" or
-    "<samp>/domain/misc/file.html</samp>").</p>
-
-    <p>This requires a bit of discipline, but adherence to these
-    guidelines will, for the most part, ensure that your pages will
-    work with all browsers, new and old.</p>
-
-    <p>See also: <a href="examples.html#serverpath">ServerPath
-    configuration example</a></p>
-    <!--#include virtual="footer.html" -->
-  </body>
-</html>
-
diff --git a/docs/manual/vhosts/name-based.html.en b/docs/manual/vhosts/name-based.html.en
deleted file mode 100644
index 075140a..0000000
--- a/docs/manual/vhosts/name-based.html.en
+++ /dev/null
@@ -1,231 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <title>Name-based Virtual Hosts</title>
-  </head>
-  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
-
-  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
-  vlink="#000080" alink="#FF0000">
-    <!--#include virtual="header.html" -->
-
-    <h1 align="CENTER">Name-based Virtual Host Support</h1>
-
-<p>This document describes when and how to use name-based virtual hosts.</p>
-
-<ul>
-<li><a href="#namevip">Name-based vs. IP-based Virtual Hosts</a></li>
-<li><a href="#using">Using Name-based Virtual Hosts</a></li>
-<li><a href="#compat">Compatibility With Older Browsers</a></li>
-</ul>
-
-<p>See also: <a href="examples.html">Virtual Host examples for common
-setups</a>, <a href="ip-based.html">IP-based Virtual Host Support</a>,
-<a href="details.html">An In-Depth Discussion of Virtual Host
-Matching</a>, and <a href="mass.html">Dynamically configured mass
-virtual hosting</a>.</p>
-
-<hr />
-
-<h2><a name="namevip">Name-based vs. IP-based Virtual Hosts</a></h2>
-
-<p>IP-based virtual hosts use the IP address of the connection to
-determine the correct virtual host to serve.  Therefore you need to
-have a separate IP address for each host.  With name-based virtual
-hosting, the server relies on the client to report the hostname as
-part of the HTTP headers.  Using this technique, many different hosts
-can share the same IP address.</p>
-
-<p>Name-based virtual hosting is usually simpler, since you need
-only configure your DNS server to map each hostname to the correct
-IP address and then configure the Apache HTTP Server to recognize
-the different hostnames.  Name-based virtual hosting also eases
-the demand for scarce IP addresses.  Therefore you should use
-name-based virtual hosting unless there is a specific reason to
-choose IP-based virtual hosting.  Some reasons why you might consider
-using IP-based virtual hosting:</p>
-
-<ul> 
-
-<li>Some ancient clients are not compatible with name-based virtual
-hosting.  For name-based virtual hosting to work, the client must send
-the HTTP Host header.  This is required by HTTP/1.1, and is
-implemented by all modern HTTP/1.0 browsers as an extension.  If you
-need to support obsolete clients and still use name-based virtual
-hosting, a possible technique is discussed at the end of this
-document.</li>
-
-<li>Name-based virtual hosting cannot be used with SSL secure servers
-because of the nature of the SSL protocol.</li>
-
-<li>Some operating systems and network equipment implement bandwidth
-management techniques that cannot differentiate between hosts unless
-they are on separate IP addresses.</li>
-
-</ul>
-
-<h2><a name="using">Using Name-based Virtual Hosts</a></h2>
-
-<table border="1">
-<tr><td align="top">
-<strong>Related Directives</strong><br><br>
-
-<a href="../mod/core.html#documentroot">DocumentRoot</a><br />
-<a href="../mod/core.html#namevirtualhost">NameVirtualHost</a><br />
-<a href="../mod/core.html#serveralias">ServerAlias</a><br />
-<a href="../mod/core.html#servername">ServerName</a><br />
-<a href="../mod/core.html#serverpath">ServerPath</a><br />
-<a href="../mod/core.html#virtualhost">VirtualHost</a><br />
-</td></tr></table>
-
-<p>To use name-based virtual hosting, you must designate the IP
-address (and possibly port) on the server that will be accepting
-requests for the hosts.  This is configured using the <a
-href="../mod/core.html#namevirtualhost">NameVirtualHost</a> directive.
-In the normal case where any and all IP addresses on the server should
-be used, you can use <code>*</code> as the argument to
-<code>NameVirtualHost</code>.  Note that mentioning an IP address in a
-<code>NameVirtualHost</code> directive does not automatically make the
-server listen to that IP address.  See <a href="../bind.html">Setting
-which addresses and ports Apache uses</a> for more details.  In addition,
-any IP address specified here must be associated with a network interface
-on the server.</p>
-
-<p>The next step is to create a <a
-href="../mod/core.html#virtualhost">&lt;VirtualHost&gt;</a> block for
-each different host that you would like to serve.  The argument to the
-<code>&lt;VirtualHost&gt;</code> directive should be the same as the
-argument to the <code>NameVirtualHost</code> directive (ie, an IP
-address, or <code>*</code> for all addresses).  Inside each
-<code>&lt;VirtualHost&gt;</code> block, you will need at minimum a <a
-href="../mod/core.html#servername">ServerName</a> directive to
-designate which host is served and a <a
-href="../mod/core.html#documentroot">DocumentRoot</a> directive to
-show where in the filesystem the content for that host lives.</p>
-
-<p>For example, suppose that both <samp>www.domain.tld</samp> and
-<samp>www.otherdomain.tld</samp> point at an IP address
-that the server is listening to.  Then you simply add the following
-to <code>httpd.conf</code>:</p>
-
-<pre>
-    NameVirtualHost *
-
-    &lt;VirtualHost *&gt;
-    ServerName www.domain.tld
-    DocumentRoot /www/domain
-    &lt;/VirtualHost&gt;
-
-    &lt;VirtualHost *&gt;
-    ServerName www.otherdomain.tld
-    DocumentRoot /www/otherdomain
-    &lt;/VirtualHost&gt;
-</pre>
-
-<p>You can alternatively specify an explicit IP address in place of
-the * in both the <code>NameVirtualHost</code> and
-<code>&lt;VirtualHost&gt;</code> directives.</p>
-
-<p>Many servers want to be accessible by more than one name.  This is
-possible with the <a
-href="../mod/core.html#serveralias"><code>ServerAlias</code></a>
-directive, placed inside the &lt;VirtualHost&gt; section. For
-example if you add this to the first &lt;VirtualHost&gt; block
-above</p> 
-
-<blockquote><code> 
-ServerAlias domain.tld *.domain.tld
-</code></blockquote>
-
-<p>then requests for all hosts in the <code>domain.tld</code> domain
-will be served by the <code>www.domain.tld</code> virtual host.  The
-wildcard characters * and ? can be used to match names.  Of course,
-you can't just make up names and place them in <code>ServerName</code>
-or <code>ServerAlias</code>.  You must first have your DNS server
-properly configured to map those names to an IP address associated
-with your server.</p>
-
-<p>Finally, you can fine-tune the configuration of the virtual hosts
-by placing other directives inside the
-<code>&lt;VirtualHost&gt;</code> containers.  Most directives can be
-placed in these containers and will then change the configuration only
-of the relevant virtual host.  To find out if a particular directive
-is allowed, check the <a
-href="../mod/directive-dist.html#Context">Context</a> of the
-directive.  Configuration directives set in the <em>main server
-context</em> (outside any <code>&lt;VirtualHost&gt;</code> container)
-will be used only if they are not overriden by the virtual host
-settings.</p>
-
-<p>Now when a request arrives, the server will first check if it is
-using an IP address that matches the <code>NameVirtualHost</code>.  If
-it is, then it will look at each <code>&lt;VirtualHost&gt;</code>
-section with a matching IP address and try to find one where the
-<code>ServerName</code> or <code>ServerAlias</code> matches the
-requested hostname.  If it finds one, then it uses the configuration
-for that server.  If no matching virtual host is found, then
-<strong>the first listed virtual host</strong> that matches the IP
-address will be used.</p>
-
-<p>As a consequence, the first listed virtual host is the
-<em>default</em> virtual host.  The <code>DocumentRoot</code> from the
-<em>main server</em> will <strong>never</strong> be used when an IP
-address matches the <code>NameVirtualHost</code> directive.  If you
-would like to have a special configuration for requests that do not
-match any particular virtual host, simply put that configuration in a
-<code>&lt;VirtualHost&gt;</code> container and list it first in the
-configuration file.</p>
-
-<h2><a name="compat">Compatibility with Older Browsers</a></h2>
-
-    <p>As mentioned earlier, there are some clients 
-    who do not send the required data for the name-based virtual
-    hosts to work properly. These clients will always be sent the
-    pages from the first virtual host listed for that IP address
-    (the <cite>primary</cite> name-based virtual host).</p>
-
-    <p>There is a possible workaround with the <a
-    href="../mod/core.html#serverpath"><code>ServerPath</code></a>
-    directive, albeit a slightly cumbersome one:</p>
-
-    <p>Example configuration:</p>
-<pre>
-    NameVirtualHost 111.22.33.44
-
-    &lt;VirtualHost 111.22.33.44&gt;
-    ServerName www.domain.tld
-    ServerPath /domain
-    DocumentRoot /web/domain
-    &lt;/VirtualHost&gt;
-</pre>
-
-    <p>What does this mean? It means that a request for any URI
-    beginning with "<samp>/domain</samp>" will be served from the
-    virtual host <samp>www.domain.tld</samp> This means that the
-    pages can be accessed as
-    <code>http://www.domain.tld/domain/</code> for all clients,
-    although clients sending a <samp>Host:</samp> header can also
-    access it as <code>http://www.domain.tld/</code>.</p>
-
-    <p>In order to make this work, put a link on your primary
-    virtual host's page to
-    <samp>http://www.domain.tld/domain/</samp> Then, in the virtual
-    host's pages, be sure to use either purely relative links
-    (<em>e.g.</em>, "<samp>file.html</samp>" or
-    "<samp>../icons/image.gif</samp>" or links containing the
-    prefacing <samp>/domain/</samp> (<em>e.g.</em>,
-    "<samp>http://www.domain.tld/domain/misc/file.html</samp>" or
-    "<samp>/domain/misc/file.html</samp>").</p>
-
-    <p>This requires a bit of discipline, but adherence to these
-    guidelines will, for the most part, ensure that your pages will
-    work with all browsers, new and old.</p>
-
-    <p>See also: <a href="examples.html#serverpath">ServerPath
-    configuration example</a></p>
-    <!--#include virtual="footer.html" -->
-  </body>
-</html>
-
diff --git a/emacs-style b/emacs-style
deleted file mode 100644
index d66f865..0000000
--- a/emacs-style
+++ /dev/null
@@ -1,11 +0,0 @@
-(add-hook 'c-mode-hook
-          (function (lambda ()
-			(c-set-offset 'inclass' ++)
-			(c-set-offset 'defun-block-intro' ++)
-			(c-set-offset 'statement-block-intro' ++)
-			(c-set-offset 'substatement' ++)
-			(c-set-offset 'brace-list-intro' ++)
-			(c-set-offset 'statement-case-intro' ++)
-			(c-set-offset 'inextern-lang' 0)
-			)))
-(setq c++-mode-hook c-mode-hook)
diff --git a/include/.cvsignore b/include/.cvsignore
deleted file mode 100644
index e46ebca..0000000
--- a/include/.cvsignore
+++ /dev/null
@@ -1,2 +0,0 @@
-ap_config_auto.h
-ap_config_auto.h.in
diff --git a/include/.indent.pro b/include/.indent.pro
deleted file mode 100644
index a9fbe9f..0000000
--- a/include/.indent.pro
+++ /dev/null
@@ -1,54 +0,0 @@
--i4 -npsl -di0 -br -nce -d0 -cli0 -npcs -nfc1
--TBUFF
--TFILE
--TTRANS
--TUINT4
--T_trans
--Tallow_options_t
--Tapache_sfio
--Tarray_header
--Tbool_int
--Tbuf_area
--Tbuff_struct
--Tbuffy
--Tcmd_how
--Tcmd_parms
--Tcommand_rec
--Tcommand_struct
--Tconn_rec
--Tcore_dir_config
--Tcore_server_config
--Tdir_maker_func
--Tevent
--Tglobals_s
--Thandler_func
--Thandler_rec
--Tjoblist_s
--Tlisten_rec
--Tmerger_func
--Tmode_t
--Tmodule
--Tmodule_struct
--Tmutex
--Tn_long
--Tother_child_rec
--Toverrides_t
--Tparent_score
--Tpid_t
--Tpiped_log
--Tpool
--Trequest_rec
--Trequire_line
--Trlim_t
--Tscoreboard
--Tsemaphore
--Tserver_addr_rec
--Tserver_rec
--Tserver_rec_chain
--Tshort_score
--Ttable
--Ttable_entry
--Tthread
--Tu_wide_int
--Tvtime_t
--Twide_int
diff --git a/include/ap_compat.h b/include/ap_compat.h
deleted file mode 100644
index f779367..0000000
--- a/include/ap_compat.h
+++ /dev/null
@@ -1,12 +0,0 @@
-#ifndef AP_COMPAT_H
-#define AP_COMPAT_H
-
-/* Drag in apu (and therefore apr) renamed symbols */
-#include "apu_compat.h"
-
-/* redefine 1.3.x symbols to the new symbol names */
-
-#define MODULE_VAR_EXPORT    AP_MODULE_DECLARE_DATA
-#define ap_send_http_header(r) ;
-
-#endif /* AP_COMPAT_H */
diff --git a/include/ap_config.h b/include/ap_config.h
deleted file mode 100644
index f72fa9f..0000000
--- a/include/ap_config.h
+++ /dev/null
@@ -1,292 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-#ifndef AP_CONFIG_H
-#define AP_CONFIG_H
-
-#include "apr.h"
-#include "apr_hooks.h"
-#include "apr_optional_hooks.h"
-
-/**
- * @file ap_config.h
- * @brief Symbol export macros and hook functions
- */
-
-/* Although this file doesn't declare any hooks, declare the hook group here */
-/** @defgroup hooks Apache Hooks */
-
-#ifdef DOXYGEN
-/* define these just so doxygen documents them */
-
-/**
- * AP_DECLARE_STATIC is defined when including Apache's Core headers,
- * to provide static linkage when the dynamic library may be unavailable.
- *
- * @see AP_DECLARE_EXPORT
- *
- * AP_DECLARE_STATIC and AP_DECLARE_EXPORT are left undefined when
- * including Apache's Core headers, to import and link the symbols from the 
- * dynamic Apache Core library and assure appropriate indirection and calling 
- * conventions at compile time.
- */
-# define AP_DECLARE_STATIC
-/**
- * AP_DECLARE_EXPORT is defined when building the Apache Core dynamic
- * library, so that all public symbols are exported.
- *
- * @see AP_DECLARE_STATIC
- */
-# define AP_DECLARE_EXPORT
-
-#endif /* def DOXYGEN */
-
-#if !defined(WIN32)
-/**
- * Apache Core dso functions are declared with AP_DECLARE(), so they may
- * use the most appropriate calling convention.  Hook functions and other
- * Core functions with variable arguments must use AP_DECLARE_NONSTD().
- * @code
- * AP_DECLARE(rettype) ap_func(args)
- * @endcode
- */
-#define AP_DECLARE(type)            type
-
-/**
- * Apache Core dso variable argument and hook functions are declared with 
- * AP_DECLARE_NONSTD(), as they must use the C language calling convention.
- * @see AP_DECLARE
- * @code
- * AP_DECLARE_NONSTD(rettype) ap_func(args [...])
- * @endcode
- */
-#define AP_DECLARE_NONSTD(type)     type
-
-/**
- * Apache Core dso variables are declared with AP_MODULE_DECLARE_DATA.
- * This assures the appropriate indirection is invoked at compile time.
- *
- * @note AP_DECLARE_DATA extern type apr_variable; syntax is required for
- * declarations within headers to properly import the variable.
- * @code
- * AP_DECLARE_DATA type apr_variable
- * @endcode
- */
-#define AP_DECLARE_DATA
-
-#elif defined(AP_DECLARE_STATIC)
-#define AP_DECLARE(type)            type __stdcall
-#define AP_DECLARE_NONSTD(type)     type
-#define AP_DECLARE_DATA
-#elif defined(AP_DECLARE_EXPORT)
-#define AP_DECLARE(type)            __declspec(dllexport) type __stdcall
-#define AP_DECLARE_NONSTD(type)     __declspec(dllexport) type
-#define AP_DECLARE_DATA             __declspec(dllexport)
-#else
-#define AP_DECLARE(type)            __declspec(dllimport) type __stdcall
-#define AP_DECLARE_NONSTD(type)     __declspec(dllimport) type
-#define AP_DECLARE_DATA             __declspec(dllimport)
-#endif
-
-#if !defined(WIN32) || defined(AP_MODULE_DECLARE_STATIC)
-/**
- * Declare a dso module's exported module structure as AP_MODULE_DECLARE_DATA.
- *
- * Unless AP_MODULE_DECLARE_STATIC is defined at compile time, symbols 
- * declared with AP_MODULE_DECLARE_DATA are always exported.
- * @code
- * module AP_MODULE_DECLARE_DATA mod_tag
- * @endcode
- */
-#if defined(WIN32)
-#define AP_MODULE_DECLARE(type)            type __stdcall
-#else
-#define AP_MODULE_DECLARE(type)            type
-#endif
-#define AP_MODULE_DECLARE_NONSTD(type)     type
-#define AP_MODULE_DECLARE_DATA
-#else
-/**
- * AP_MODULE_DECLARE_EXPORT is a no-op.  Unless contradicted by the
- * AP_MODULE_DECLARE_STATIC compile-time symbol, it is assumed and defined.
- *
- * The old SHARED_MODULE compile-time symbol is now the default behavior, 
- * so it is no longer referenced anywhere with Apache 2.0.
- */
-#define AP_MODULE_DECLARE_EXPORT
-#define AP_MODULE_DECLARE(type)          __declspec(dllexport) type __stdcall
-#define AP_MODULE_DECLARE_NONSTD(type)   __declspec(dllexport) type
-#define AP_MODULE_DECLARE_DATA           __declspec(dllexport)
-#endif
-
-/**
- * Declare a hook function
- * @param ret The return type of the hook
- * @param name The hook's name (as a literal)
- * @param args The arguments the hook function takes, in brackets.
- */
-#define AP_DECLARE_HOOK(ret,name,args) \
-	APR_DECLARE_EXTERNAL_HOOK(ap,AP,ret,name,args)
-
-/** @internal */
-#define AP_IMPLEMENT_HOOK_BASE(name) \
-	APR_IMPLEMENT_EXTERNAL_HOOK_BASE(ap,AP,name)
-
-/**
- * Implement an Apache core hook that has no return code, and
- * therefore runs all of the registered functions. The implementation
- * is called ap_run_<i>name</i>.
- *
- * @param name The name of the hook
- * @param args_decl The declaration of the arguments for the hook, for example
- * "(int x,void *y)"
- * @param args_use The arguments for the hook as used in a call, for example
- * "(x,y)"
- * @note If IMPLEMENTing a hook that is not linked into the Apache core,
- * (e.g. within a dso) see APR_IMPLEMENT_EXTERNAL_HOOK_VOID.
- */
-#define AP_IMPLEMENT_HOOK_VOID(name,args_decl,args_use) \
-	APR_IMPLEMENT_EXTERNAL_HOOK_VOID(ap,AP,name,args_decl,args_use)
-
-/**
- * Implement an Apache core hook that runs until one of the functions
- * returns something other than ok or decline. That return value is
- * then returned from the hook runner. If the hooks run to completion,
- * then ok is returned. Note that if no hook runs it would probably be
- * more correct to return decline, but this currently does not do
- * so. The implementation is called ap_run_<i>name</i>.
- *
- * @param ret The return type of the hook (and the hook runner)
- * @param name The name of the hook
- * @param args_decl The declaration of the arguments for the hook, for example
- * "(int x,void *y)"
- * @param args_use The arguments for the hook as used in a call, for example
- * "(x,y)"
- * @param ok The "ok" return value
- * @param decline The "decline" return value
- * @return ok, decline or an error.
- * @note If IMPLEMENTing a hook that is not linked into the Apache core,
- * (e.g. within a dso) see APR_IMPLEMENT_EXTERNAL_HOOK_RUN_ALL.
- */
-#define AP_IMPLEMENT_HOOK_RUN_ALL(ret,name,args_decl,args_use,ok,decline) \
-	APR_IMPLEMENT_EXTERNAL_HOOK_RUN_ALL(ap,AP,ret,name,args_decl, \
-                                            args_use,ok,decline)
-
-/**
- * Implement a hook that runs until the first function that returns
- * something other than decline. If all functions return decline, the
- * hook runner returns decline. The implementation is called
- * ap_run_<i>name</i>.
- *
- * @param ret The return type of the hook (and the hook runner)
- * @param name The name of the hook
- * @param args_decl The declaration of the arguments for the hook, for example
- * "(int x,void *y)"
- * @param args_use The arguments for the hook as used in a call, for example
- * "(x,y)"
- * @param decline The "decline" return value
- * @return decline or an error.
- * @note If IMPLEMENTing a hook that is not linked into the Apache core
- * (e.g. within a dso) see APR_IMPLEMENT_EXTERNAL_HOOK_RUN_FIRST.
- */
-#define AP_IMPLEMENT_HOOK_RUN_FIRST(ret,name,args_decl,args_use,decline) \
-	APR_IMPLEMENT_EXTERNAL_HOOK_RUN_FIRST(ap,AP,ret,name,args_decl, \
-                                              args_use,decline)
-
-/* Note that the other optional hook implementations are straightforward but
- * have not yet been needed
- */
-
-/**
- * Implement an optional hook. This is exactly the same as a standard hook
- * implementation, except the hook is optional.
- * @see AP_IMPLEMENT_HOOK_RUN_ALL
- */
-#define AP_IMPLEMENT_OPTIONAL_HOOK_RUN_ALL(ret,name,args_decl,args_use,ok, \
-					   decline) \
-	APR_IMPLEMENT_OPTIONAL_HOOK_RUN_ALL(ap,AP,ret,name,args_decl, \
-                                            args_use,ok,decline)
-
-/**
- * Hook an optional hook. Unlike static hooks, this uses a macro instead of a
- * function.
- */
-#define AP_OPTIONAL_HOOK(name,fn,pre,succ,order) \
-        APR_OPTIONAL_HOOK(ap,name,fn,pre,succ,order)
-
-#include "os.h"
-#if !defined(WIN32) && !defined(NETWARE)
-#include "ap_config_auto.h"
-#endif
-
-
-/* TODO - We need to put OS detection back to make all the following work */
-
-#if defined(SUNOS4) || defined(IRIX) || defined(NEXT) || defined(AUX3) \
-    || defined (UW) || defined(LYNXOS) || defined(TPF)
-/* These systems don't do well with any lingering close code; I don't know
- * why -- manoj */
-#define NO_LINGCLOSE
-#endif
-
-/* If APR has OTHER_CHILD logic, use reliable piped logs. */
-#if APR_HAS_OTHER_CHILD
-#define AP_HAVE_RELIABLE_PIPED_LOGS TRUE
-#endif
-
-#if APR_CHARSET_EBCDIC && !defined(APACHE_XLATE)
-#define APACHE_XLATE
-#endif
-
-#endif /* AP_CONFIG_H */
diff --git a/include/ap_listen.h b/include/ap_listen.h
deleted file mode 100644
index cbef8de..0000000
--- a/include/ap_listen.h
+++ /dev/null
@@ -1,152 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-#ifndef AP_LISTEN_H
-#define AP_LISTEN_H
-
-#include "apr_network_io.h"
-#include "httpd.h"
-#include "http_config.h"
-
-/**
- * @package Apache Listeners Library
- */
-
-typedef struct ap_listen_rec ap_listen_rec;
-typedef apr_status_t (*accept_function)(void **csd, ap_listen_rec *lr, apr_pool_t *ptrans);
-
-/**
- * Apache's listeners record.  These are used in the Multi-Processing Modules
- * to setup all of the sockets for the MPM to listen to and accept on.
- */
-struct ap_listen_rec {
-    /**
-     * The next listener in the list
-     */
-    ap_listen_rec *next;
-    /**
-     * The actual socket 
-     */
-    apr_socket_t *sd;
-    /**
-     * The sockaddr the socket should bind to
-     */
-    apr_sockaddr_t *bind_addr;
-    /**
-     * The accept function for this socket
-     */
-    accept_function accept_func;
-    /**
-     * Is this socket currently active 
-     */
-    int active;
-/* more stuff here, like which protocol is bound to the port */
-};
-
-/**
- * The global list of ap_listen_rec structures
- */
-AP_DECLARE_DATA extern ap_listen_rec *ap_listeners;
-
-/**
- * Setup all of the defaults for the listener list
- */
-void ap_listen_pre_config(void);
-#if !defined(SPMT_OS2_MPM)
-/**
- * Loop through the global ap_listen_rec list and create all of the required
- * sockets.  This executes the listen and bind on the sockets.
- * @param s The global server_rec
- * @return The number of open sockets.
- * @warning This function is not available to Windows platforms, or the
- * Prefork or SPMT_OS2 MPMs.
- */ 
-int ap_setup_listeners(server_rec *s);
-#endif
-/* Split into two #if's to make the exports scripts easier.
- */
-#if defined(SPMT_OS2_MPM)
-/**
- * Create and open a socket on the specified port.  This includes listening
- * and binding the socket.
- * @param process The process record for the currently running server
- * @param port The port to open a socket on.
- * @return The number of open sockets
- * @warning This function is only available to Windows platforms, or the
- * Prefork or SPMT_OS2 MPMs.
- */
-int ap_listen_open(process_rec *process, apr_port_t port);
-#endif
-
-/* Although these functions are exported from libmain, they are not really
- * public functions.  These functions are actually called while parsing the
- * config file, when one of the LISTEN_COMMANDS directives is read.  These
- * should not ever be called by external modules.  ALL MPMs should include
- * LISTEN_COMMANDS in their command_rec table so that these functions are
- * called.
- */ 
-const char *ap_set_listenbacklog(cmd_parms *cmd, void *dummy, const char *arg);
-const char *ap_set_listener(cmd_parms *cmd, void *dummy, const char *ips);
-const char *ap_set_send_buffer_size(cmd_parms *cmd, void *dummy,
-				    const char *arg);
-
-#define LISTEN_COMMANDS	\
-AP_INIT_TAKE1("ListenBacklog", ap_set_listenbacklog, NULL, RSRC_CONF, \
-  "Maximum length of the queue of pending connections, as used by listen(2)"), \
-AP_INIT_TAKE1("Listen", ap_set_listener, NULL, RSRC_CONF, \
-  "A port number or a numeric IP address and a port number"), \
-AP_INIT_TAKE1("SendBufferSize", ap_set_send_buffer_size, NULL, RSRC_CONF, \
-  "Send buffer size in bytes")
-
-#endif
diff --git a/include/ap_mmn.h b/include/ap_mmn.h
deleted file mode 100644
index 0db5f6e..0000000
--- a/include/ap_mmn.h
+++ /dev/null
@@ -1,135 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-#ifndef APACHE_AP_MMN_H
-#define APACHE_AP_MMN_H
-
-/**
- * @package Module Magic Number
- */
-
-/*
- * MODULE_MAGIC_NUMBER_MAJOR
- * Major API changes that could cause compatibility problems for older modules
- * such as structure size changes.  No binary compatibility is possible across
- * a change in the major version.
- *
- * MODULE_MAGIC_NUMBER_MINOR
- * Minor API changes that do not cause binary compatibility problems.
- * Should be reset to 0 when upgrading MODULE_MAGIC_NUMBER_MAJOR.
- *
- * See the MODULE_MAGIC_AT_LEAST macro below for an example.
- */
-
-/*
- * 20010224 (2.0.13-dev) MODULE_MAGIC_COOKIE reset to "AP20"
- * 20010523 (2.0.19-dev) bump for scoreboard structure reordering
- * 20010627 (2.0.19-dev) more API changes than I can count
- * 20010726 (2.0.22-dev) more big API changes
- * 20010808 (2.0.23-dev) dir d_is_absolute bit introduced, bucket changes, etc
- * 20010825 (2.0.25-dev) removed d_is_absolute, introduced map_to_storage hook
- * 20011002 (2.0.26-dev) removed 1.3-depreciated request_rec.content_language
- * 20011127 (2.0.29-dev) bump for postconfig hook change, and removal of socket
- *                       from connection record
- * 20011212 (2.0.30-dev) bump for new used_path_info member of request_rec
- * 20011218 (2.0.30-dev) bump for new sbh member of conn_rec, different 
- *                       declarations for scoreboard, new parameter to
- *                       create_connection hook
- * 20020102 (2.0.30-dev) bump for changed type of limit_req_body in 
- *                       core_dir_config
- * 20020109 (2.0.31-dev) bump for changed shm and scoreboard declarations
- * 20020111 (2.0.31-dev) bump for ETag fields added at end of cor_dir_config
- * 20020114 (2.0.31-dev) mod_dav changed how it asks its provider to fulfill
- *                       a GET request
- * 20020118 (2.0.31-dev) Input filtering split of blocking and mode
- * 20020127 (2.0.31-dev) bump for pre_mpm hook change
- * 20020128 (2.0.31-dev) bump for pre_config hook change
- * 20020218 (2.0.33-dev) bump for AddOutputFilterByType directive
- * 20020220 (2.0.33-dev) bump for scoreboard.h structure change
- * 20020302 (2.0.33-dev) bump for protocol_filter additions.
- * 20020306 (2.0.34-dev) bump for filter type renames.
- */
-
-#define MODULE_MAGIC_COOKIE 0x41503230UL /* "AP20" */
-
-#ifndef MODULE_MAGIC_NUMBER_MAJOR
-#define MODULE_MAGIC_NUMBER_MAJOR 20020306
-#endif
-#define MODULE_MAGIC_NUMBER_MINOR 0                     /* 0...n */
-#define MODULE_MAGIC_NUMBER MODULE_MAGIC_NUMBER_MAJOR	/* backward compat */
-
-/**
- * Determine if the server's current MODULE_MAGIC_NUMBER is at least a
- * specified value.
- * <pre>
- * Useful for testing for features.
- * For example, suppose you wish to use the apr_table_overlap
- *    function.  You can do this:
- * 
- * #if MODULE_MAGIC_AT_LEAST(19980812,2)
- *     ... use apr_table_overlap()
- * #else
- *     ... alternative code which doesn't use apr_table_overlap()
- * #endif
- * </pre>
- * @param major The major module magic number
- * @param minor The minor module magic number
- * @deffunc MODULE_MAGIC_AT_LEAST(int major, int minor)
- */
-#define MODULE_MAGIC_AT_LEAST(major,minor)		\
-    ((major) > MODULE_MAGIC_NUMBER_MAJOR 		\
-	|| ((major) == MODULE_MAGIC_NUMBER_MAJOR 	\
-	    && (minor) >= MODULE_MAGIC_NUMBER_MINOR))
-
-#endif /* !APACHE_AP_MMN_H */
diff --git a/include/ap_mpm.h b/include/ap_mpm.h
deleted file mode 100644
index 81744c2..0000000
--- a/include/ap_mpm.h
+++ /dev/null
@@ -1,200 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-#ifndef AP_MMN_H
-#define AP_MMN_H
-
-#include "apr_thread_proc.h"
-
-/**
- * @package Multi-Processing Module library
- */
-
-/*
-    The MPM, "multi-processing model" provides an abstraction of the
-    interface with the OS for distributing incoming connections to
-    threads/process for processing.  http_main invokes the MPM, and
-    the MPM runs until a shutdown/restart has been indicated.
-    The MPM calls out to the apache core via the ap_process_connection
-    function when a connection arrives.
-
-    The MPM may or may not be multithreaded.  In the event that it is
-    multithreaded, at any instant it guarantees a 1:1 mapping of threads
-    ap_process_connection invocations.  
-
-    Note: In the future it will be possible for ap_process_connection
-    to return to the MPM prior to finishing the entire connection; and
-    the MPM will proceed with asynchronous handling for the connection;
-    in the future the MPM may call ap_process_connection again -- but
-    does not guarantee it will occur on the same thread as the first call.
-
-    The MPM further guarantees that no asynchronous behaviour such as
-    longjmps and signals will interfere with the user code that is
-    invoked through ap_process_connection.  The MPM may reserve some
-    signals for its use (i.e. SIGUSR1), but guarantees that these signals
-    are ignored when executing outside the MPM code itself.  (This
-    allows broken user code that does not handle EINTR to function
-    properly.)
-
-    The suggested server restart and stop behaviour will be "graceful".
-    However the MPM may choose to terminate processes when the user
-    requests a non-graceful restart/stop.  When this occurs, the MPM kills
-    all threads with extreme prejudice, and destroys the pchild pool.
-    User cleanups registered in the pchild apr_pool_t will be invoked at
-    this point.  (This can pose some complications, the user cleanups
-    are asynchronous behaviour not unlike longjmp/signal... but if the
-    admin is asking for a non-graceful shutdown, how much effort should
-    we put into doing it in a nice way?)
-
-    unix/posix notes:
-    - The MPM does not set a SIGALRM handler, user code may use SIGALRM.
-	But the preferred method of handling timeouts is to use the
-	timeouts provided by the BUFF abstraction.
-    - The proper setting for SIGPIPE is SIG_IGN, if user code changes it
-        for any of their own processing, it must be restored to SIG_IGN
-	prior to executing or returning to any apache code.
-    TODO: add SIGPIPE debugging check somewhere to make sure it's SIG_IGN
-*/
-
-/**
- * This is the function that MPMs must create.  This function is responsible
- * for controlling the parent and child processes.  It will run until a 
- * restart/shutdown is indicated.
- * @param pconf the configuration pool, reset before the config file is read
- * @param plog the log pool, reset after the config file is read
- * @param server_conf the global server config.
- * @return 1 for shutdown 0 otherwise.
- * @deffunc int ap_mpm_run(apr_pool_t *pconf, apr_pool_t *plog, server_rec *server_conf)
- */
-AP_DECLARE(int) ap_mpm_run(apr_pool_t *pconf, apr_pool_t *plog, server_rec *server_conf);
-
-/**
- * predicate indicating if a graceful stop has been requested ...
- * used by the connection loop 
- * @return 1 if a graceful stop has been requested, 0 otherwise
- * @deffunc int ap_graceful_stop_signalled(*void)
- */
-AP_DECLARE(int) ap_graceful_stop_signalled(void);
-
-/**
- * Spawn a process with privileges that another module has requested
- * @param r The request_rec of the current request
- * @param newproc The resulting process handle.
- * @param progname The program to run 
- * @param const_args the arguments to pass to the new program.  The first 
- *                   one should be the program name.
- * @param env The new environment apr_table_t for the new process.  This 
- *            should be a list of NULL-terminated strings.
- * @param attr the procattr we should use to determine how to create the new
- *         process
- * @param p The pool to use. 
- */
-AP_DECLARE(apr_status_t) ap_os_create_privileged_process(
-    const request_rec *r,
-    apr_proc_t *newproc, 
-    const char *progname,
-    const char * const *args, 
-    const char * const *env,
-    apr_procattr_t *attr, 
-    apr_pool_t *p);
-
-/* Subtypes/Values for AP_MPMQ_IS_THREADED and AP_MPMQ_IS_FORKED        */
-#define AP_MPMQ_NOT_SUPPORTED      0  /* This value specifies whether */
-                                      /* an MPM is capable of         */
-                                      /* threading or forking.        */
-#define AP_MPMQ_STATIC             1  /* This value specifies whether */
-                                      /* an MPM is using a static #   */
-                                      /* threads or daemons.          */
-#define AP_MPMQ_DYNAMIC            2  /* This value specifies whether */
-                                      /* an MPM is using a dynamic #  */
-                                      /* threads or daemons.          */
-
-#define AP_MPMQ_MAX_DAEMON_USED       1  /* Max # of daemons used so far */
-#define AP_MPMQ_IS_THREADED           2  /* MPM can do threading         */
-#define AP_MPMQ_IS_FORKED             3  /* MPM can do forking           */
-#define AP_MPMQ_HARD_LIMIT_DAEMONS    4  /* The compiled max # daemons   */
-#define AP_MPMQ_HARD_LIMIT_THREADS    5  /* The compiled max # threads   */
-#define AP_MPMQ_MAX_THREADS           6  /* # of threads/child by config */
-#define AP_MPMQ_MIN_SPARE_DAEMONS     7  /* Min # of spare daemons       */
-#define AP_MPMQ_MIN_SPARE_THREADS     8  /* Min # of spare threads       */
-#define AP_MPMQ_MAX_SPARE_DAEMONS     9  /* Max # of spare daemons       */
-#define AP_MPMQ_MAX_SPARE_THREADS    10  /* Max # of spare threads       */
-#define AP_MPMQ_MAX_REQUESTS_DAEMON  11  /* Max # of requests per daemon */
-#define AP_MPMQ_MAX_DAEMONS          12  /* Max # of daemons by config   */
-
-
-/**
- * Query a property of the current MPM.  
- * @param query_code One of APM_MPMQ_*
- * @param result A location to place the result of the query
- * @return APR_SUCCESS or APR_ENOTIMPL
- * @deffunc int ap_mpm_query(int query_code, int *result)
- */
-AP_DECLARE(apr_status_t) ap_mpm_query(int query_code, int *result);
-
-/* Defining GPROF when compiling uses the moncontrol() function to
- * disable gprof profiling in the parent, and enable it only for
- * request processing in children (or in one_process mode).  It's
- * absolutely required to get useful gprof results under linux
- * because the profile itimers and such are disabled across a
- * fork().  It's probably useful elsewhere as well.
- */
-#ifdef GPROF
-extern void moncontrol(int);
-#define AP_MONCONTROL(x) moncontrol(x)
-#else
-#define AP_MONCONTROL(x)
-#endif
-
-#endif
diff --git a/include/ap_release.h b/include/ap_release.h
deleted file mode 100644
index 76b799a..0000000
--- a/include/ap_release.h
+++ /dev/null
@@ -1,80 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-#ifndef AP_RELEASE_H
-#define AP_RELEASE_H
-
-/*
- * The below defines the base string of the Server: header. Additional
- * tokens can be added via the ap_add_version_component() API call.
- *
- * The tokens are listed in order of their significance for identifying the
- * application.
- *
- * "Product tokens should be short and to the point -- use of them for 
- * advertizing or other non-essential information is explicitly forbidden."
- *
- * Example: "Apache/1.1.0 MrWidget/0.1-alpha" 
- */
-#define AP_SERVER_BASEVENDOR "Apache Software Foundation"
-#define AP_SERVER_BASEPRODUCT "Apache"
-#define AP_SERVER_BASEREVISION "2.0.34-dev"
-#define AP_SERVER_BASEVERSION AP_SERVER_BASEPRODUCT "/" AP_SERVER_BASEREVISION
-#define AP_SERVER_VERSION  AP_SERVER_BASEVERSION
-
-#endif
diff --git a/include/http_config.h b/include/http_config.h
deleted file mode 100644
index 65db484..0000000
--- a/include/http_config.h
+++ /dev/null
@@ -1,1031 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-#ifndef APACHE_HTTP_CONFIG_H
-#define APACHE_HTTP_CONFIG_H
-
-#include "apr_hooks.h"
-#include "util_cfgtree.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * @file http_config.h
- * @brief Apache Configuration
- */
-
-/*
- * The central data structures around here...
- */
-
-/* Command dispatch structures... */
-
-/**
- * How the directives arguments should be parsed.
- * @remark Note that for all of these except RAW_ARGS, the config routine is
- *      passed a freshly allocated string which can be modified or stored
- *      or whatever...
- */
-enum cmd_how {
-    RAW_ARGS,			/**< cmd_func parses command line itself */
-    TAKE1,			/**< one argument only */
-    TAKE2,			/**< two arguments only */
-    ITERATE,			/**< one argument, occuring multiple times
-				 * (e.g., IndexIgnore)
-				 */
-    ITERATE2,			/**< two arguments, 2nd occurs multiple times
-				 * (e.g., AddIcon)
-				 */
-    FLAG,			/**< One of 'On' or 'Off' */
-    NO_ARGS,			/**< No args at all, e.g. </Directory> */
-    TAKE12,			/**< one or two arguments */
-    TAKE3,			/**< three arguments only */
-    TAKE23,			/**< two or three arguments */
-    TAKE123,			/**< one, two or three arguments */
-    TAKE13			/**< one or three arguments */
-};
-/**
- * This structure is passed to a command which is being invoked,
- * to carry a large variety of miscellaneous data which is all of
- * use to *somebody*...
- */
-typedef struct cmd_parms_struct cmd_parms;
-
-#if defined(AP_HAVE_DESIGNATED_INITIALIZER) || defined(DOXYGEN)
-
-/** 
- * All the types of functions that can be used in directives
- * @internal
- */
-typedef union {
-    /** function to call for a no-args */
-    const char *(*no_args) (cmd_parms *parms, void *mconfig);
-    /** function to call for a raw-args */
-    const char *(*raw_args) (cmd_parms *parms, void *mconfig,
-			     const char *args);
-    /** function to call for a take1 */
-    const char *(*take1) (cmd_parms *parms, void *mconfig, const char *w);
-    /** function to call for a take2 */
-    const char *(*take2) (cmd_parms *parms, void *mconfig, const char *w,
-			  const char *w2);
-    /** function to call for a take3 */
-    const char *(*take3) (cmd_parms *parms, void *mconfig, const char *w,
-			  const char *w2, const char *w3);
-    /** function to call for a flag */
-    const char *(*flag) (cmd_parms *parms, void *mconfig, int on);
-} cmd_func;
-
-/** This configuration directive does not take any arguments */
-# define AP_NO_ARGS	func.no_args
-/** This configuration directive will handle it's own parsing of arguments*/
-# define AP_RAW_ARGS	func.raw_args
-/** This configuration directive takes 1 argument*/
-# define AP_TAKE1	func.take1
-/** This configuration directive takes 2 arguments */
-# define AP_TAKE2	func.take2
-/** This configuration directive takes 3 arguments */
-# define AP_TAKE3	func.take3
-/** This configuration directive takes a flag (on/off) as a argument*/
-# define AP_FLAG	func.flag
-
-/** method of declaring a directive with no arguments */
-# define AP_INIT_NO_ARGS(directive, func, mconfig, where, help) \
-    { directive, { .no_args=func }, mconfig, where, RAW_ARGS, help }
-/** method of declaring a directive with raw argument parsing */
-# define AP_INIT_RAW_ARGS(directive, func, mconfig, where, help) \
-    { directive, { .raw_args=func }, mconfig, where, RAW_ARGS, help }
-/** method of declaring a directive which takes 1 argument */
-# define AP_INIT_TAKE1(directive, func, mconfig, where, help) \
-    { directive, { .take1=func }, mconfig, where, TAKE1, help }
-/** method of declaring a directive which takes multiple arguments */
-# define AP_INIT_ITERATE(directive, func, mconfig, where, help) \
-    { directive, { .take1=func }, mconfig, where, ITERATE, help }
-/** method of declaring a directive which takes 2 arguments */
-# define AP_INIT_TAKE2(directive, func, mconfig, where, help) \
-    { directive, { .take2=func }, mconfig, where, TAKE2, help }
-/** method of declaring a directive which takes 1 or 2 arguments */
-# define AP_INIT_TAKE12(directive, func, mconfig, where, help) \
-    { directive, { .take2=func }, mconfig, where, TAKE12, help }
-/** method of declaring a directive which takes multiple 2 arguments */
-# define AP_INIT_ITERATE2(directive, func, mconfig, where, help) \
-    { directive, { .take2=func }, mconfig, where, ITERATE2, help }
-/** method of declaring a directive which takes 1 or 3 arguments */
-# define AP_INIT_TAKE13(directive, func, mconfig, where, help) \
-    { directive, { .take3=func }, mconfig, where, TAKE13, help }
-/** method of declaring a directive which takes 2 or 3 arguments */
-# define AP_INIT_TAKE23(directive, func, mconfig, where, help) \
-    { directive, { .take3=func }, mconfig, where, TAKE23, help }
-/** method of declaring a directive which takes 1 to 3 arguments */
-# define AP_INIT_TAKE123(directive, func, mconfig, where, help) \
-    { directive, { .take3=func }, mconfig, where, TAKE123, help }
-/** method of declaring a directive which takes 3 arguments */
-# define AP_INIT_TAKE3(directive, func, mconfig, where, help) \
-    { directive, { .take3=func }, mconfig, where, TAKE3, help }
-/** method of declaring a directive which takes a flag (on/off) as a argument*/
-# define AP_INIT_FLAG(directive, func, mconfig, where, help) \
-    { directive, { .flag=func }, mconfig, where, FLAG, help }
-
-#else /* AP_HAVE_DESIGNATED_INITIALIZER */
-
-typedef const char *(*cmd_func) ();
-
-# define AP_NO_ARGS  func
-# define AP_RAW_ARGS func
-# define AP_TAKE1    func
-# define AP_TAKE2    func
-# define AP_TAKE3    func
-# define AP_FLAG     func
-
-# define AP_INIT_NO_ARGS(directive, func, mconfig, where, help) \
-    { directive, func, mconfig, where, RAW_ARGS, help }
-# define AP_INIT_RAW_ARGS(directive, func, mconfig, where, help) \
-    { directive, func, mconfig, where, RAW_ARGS, help }
-# define AP_INIT_TAKE1(directive, func, mconfig, where, help) \
-    { directive, func, mconfig, where, TAKE1, help }
-# define AP_INIT_ITERATE(directive, func, mconfig, where, help) \
-    { directive, func, mconfig, where, ITERATE, help }
-# define AP_INIT_TAKE2(directive, func, mconfig, where, help) \
-    { directive, func, mconfig, where, TAKE2, help }
-# define AP_INIT_TAKE12(directive, func, mconfig, where, help) \
-    { directive, func, mconfig, where, TAKE12, help }
-# define AP_INIT_ITERATE2(directive, func, mconfig, where, help) \
-    { directive, func, mconfig, where, ITERATE2, help }
-# define AP_INIT_TAKE13(directive, func, mconfig, where, help) \
-    { directive, func, mconfig, where, TAKE13, help }
-# define AP_INIT_TAKE23(directive, func, mconfig, where, help) \
-    { directive, func, mconfig, where, TAKE23, help }
-# define AP_INIT_TAKE123(directive, func, mconfig, where, help) \
-    { directive, func, mconfig, where, TAKE123, help }
-# define AP_INIT_TAKE3(directive, func, mconfig, where, help) \
-    { directive, func, mconfig, where, TAKE3, help }
-# define AP_INIT_FLAG(directive, func, mconfig, where, help) \
-    { directive, func, mconfig, where, FLAG, help }
-
-#endif /* AP_HAVE_DESIGNATED_INITIALIZER */
-
-/**
- * The command record structure.  Each modules can define a table of these
- * to define the directives it will implement.
- */
-typedef struct command_struct command_rec; 
-struct command_struct {
-    /** Name of this command */
-    const char *name;
-    /** The function to be called when this directive is parsed */
-    cmd_func func;
-    /** Extra data, for functions which implement multiple commands... */
-    void *cmd_data;		
-    /** What overrides need to be allowed to enable this command. */
-    int req_override;
-    /** What the command expects as arguments 
-     *  @defvar cmd_how args_how*/
-    enum cmd_how args_how;
-
-    /** 'usage' message, in case of syntax errors */
-    const char *errmsg;
-};
-
-/**
- * @defgroup ConfigDirectives Allowed locations for configuration directives.
- *
- * The allowed locations for a configuration directive are the union of
- * those indicated by each set bit in the req_override mask.
- *
- * @{
- */
-#define OR_NONE 0             /**< *.conf is not available anywhere in this override */
-#define OR_LIMIT 1	     /**< *.conf inside <Directory> or <Location>
-				and .htaccess when AllowOverride Limit */
-#define OR_OPTIONS 2         /**< *.conf anywhere
-                                and .htaccess when AllowOverride Options */
-#define OR_FILEINFO 4        /**< *.conf anywhere
-				and .htaccess when AllowOverride FileInfo */
-#define OR_AUTHCFG 8         /**< *.conf inside <Directory> or <Location>
-				and .htaccess when AllowOverride AuthConfig */
-#define OR_INDEXES 16        /**< *.conf anywhere
-				and .htaccess when AllowOverride Indexes */
-#define OR_UNSET 32          /**< unset a directive (in Allow) */
-#define ACCESS_CONF 64       /**< *.conf inside <Directory> or <Location> */
-#define RSRC_CONF 128	     /**< *.conf outside <Directory> or <Location> */
-#define EXEC_ON_READ 256     /**< force directive to execute a command 
-                which would modify the configuration (like including another
-                file, or IFModule */
-/** this directive can be placed anywhere */
-#define OR_ALL (OR_LIMIT|OR_OPTIONS|OR_FILEINFO|OR_AUTHCFG|OR_INDEXES)
-
-/** @} */
-
-/**
- * This can be returned by a function if they don't wish to handle
- * a command. Make it something not likely someone will actually use
- * as an error code.
- */
-#define DECLINE_CMD "\a\b"
-
-/** Common structure for reading of config files / passwd files etc. */
-typedef struct ap_configfile_t ap_configfile_t;
-struct ap_configfile_t {
-    int (*getch) (void *param);	    /**< a getc()-like function */
-    void *(*getstr) (void *buf, size_t bufsiz, void *param);
-				    /**< a fgets()-like function */
-    int (*close) (void *param);	    /**< a close handler function */
-    void *param;                    /**< the argument passed to getch/getstr/close */
-    const char *name;               /**< the filename / description */
-    unsigned line_number;           /**< current line number, starting at 1 */
-};
-
-/**
- * This structure is passed to a command which is being invoked,
- * to carry a large variety of miscellaneous data which is all of
- * use to *somebody*...
- */
-struct cmd_parms_struct {
-    /** Argument to command from cmd_table */
-    void *info;
-    /** Which allow-override bits are set */
-    int override;
-    /** Which methods are <Limit>ed */
-    apr_int64_t limited;
-    /** methods which are limited */
-    apr_array_header_t *limited_xmethods;
-    /** methods which are xlimited */
-    ap_method_list_t *xlimited;
-
-    /** Config file structure. */
-    ap_configfile_t *config_file;
-    /** the directive specifying this command */
-    ap_directive_t *directive;
-
-    /** Pool to allocate new storage in */
-    apr_pool_t *pool;
-    /** Pool for scratch memory; persists during configuration, but 
-     *  wiped before the first request is served...  */
-    apr_pool_t *temp_pool;
-    /** Server_rec being configured for */
-    server_rec *server;
-    /** If configuring for a directory, pathname of that directory.  
-     *  NOPE!  That's what it meant previous to the existance of <Files>, 
-     * <Location> and regex matching.  Now the only usefulness that can be 
-     * derived from this field is whether a command is being called in a 
-     * server context (path == NULL) or being called in a dir context 
-     * (path != NULL).  */
-    char *path;
-    /** configuration command */
-    const command_rec *cmd;
-
-    /** per_dir_config vector passed to handle_command */
-    struct ap_conf_vector_t *context;
-    /** directive with syntax error */
-    const ap_directive_t *err_directive;
-};
-
-/**
- * Module structures.  Just about everything is dispatched through
- * these, directly or indirectly (through the command and handler
- * tables).
- */
-typedef struct module_struct module;
-struct module_struct {
-    /** API version, *not* module version; check that module is 
-     * compatible with this version of the server.
-     */
-    int version;
-    /** API minor version. Provides API feature milestones. Not checked 
-     *  during module init */
-    int minor_version;
-    /** Index to this modules structures in config vectors.  */
-    int module_index;
-
-    /** The name of the module's C file */
-    const char *name;
-    /** The handle for the DSO.  Internal use only */
-    void *dynamic_load_handle;
-
-    /** A pointer to the next module in the list
-     *  @defvar module_struct *next */
-    struct module_struct *next;
-
-    /** Magic Cookie to identify a module structure;  It's mainly 
-     *  important for the DSO facility (see also mod_so).  */
-    unsigned long magic;
-
-    /** Function to allow MPMs to re-write command line arguments.  This
-     *  hook is only available to MPMs.
-     *  @param The process that the server is running in.
-     */
-    void (*rewrite_args) (process_rec *process);
-    /** Function to allow all modules to create per directory configuration
-     *  structures.
-     *  @param p The pool to use for all allocations.
-     *  @param dir The directory currently being processed.
-     *  @return The per-directory structure created
-     */
-    void *(*create_dir_config) (apr_pool_t *p, char *dir);
-    /** Function to allow all modules to merge the per directory configuration
-     *  structures for two directories.
-     *  @param p The pool to use for all allocations.
-     *  @param base_conf The directory structure created for the parent directory.
-     *  @param new_conf The directory structure currently being processed.
-     *  @return The new per-directory structure created
-     */
-    void *(*merge_dir_config) (apr_pool_t *p, void *base_conf, void *new_conf);
-    /** Function to allow all modules to create per server configuration
-     *  structures.
-     *  @param p The pool to use for all allocations.
-     *  @param s The server currently being processed.
-     *  @return The per-server structure created
-     */
-    void *(*create_server_config) (apr_pool_t *p, server_rec *s);
-    /** Function to allow all modules to merge the per server configuration
-     *  structures for two servers.
-     *  @param p The pool to use for all allocations.
-     *  @param base_conf The directory structure created for the parent directory.
-     *  @param new_conf The directory structure currently being processed.
-     *  @return The new per-directory structure created
-     */
-    void *(*merge_server_config) (apr_pool_t *p, void *base_conf, void *new_conf);
-
-    /** A command_rec table that describes all of the directives this module
-     * defines. */
-    const command_rec *cmds;
-
-    /** A hook to allow modules to hook other points in the request processing.
-     *  In this function, modules should call the ap_hook_*() functions to
-     *  register an interest in a specific step in processing the current
-     *  request.
-     *  @param p the pool to use for all allocations
-     */
-    void (*register_hooks) (apr_pool_t *p);
-};
-
-/**
- * @defgroup ModuleInit Module structure initializers
- *
- * Initializer for the first few module slots, which are only
- * really set up once we start running.  Note that the first two slots
- * provide a version check; this should allow us to deal with changes to
- * the API. The major number should reflect changes to the API handler table
- * itself or removal of functionality. The minor number should reflect
- * additions of functionality to the existing API. (the server can detect
- * an old-format module, and either handle it back-compatibly, or at least
- * signal an error). See src/include/ap_mmn.h for MMN version history.
- * @{
- */
-
-/** The one used in Apache 1.3, which will deliberately cause an error */
-#define STANDARD_MODULE_STUFF	this_module_needs_to_be_ported_to_apache_2_0
-
-/** Use this in all standard modules */
-#define STANDARD20_MODULE_STUFF	MODULE_MAGIC_NUMBER_MAJOR, \
-				MODULE_MAGIC_NUMBER_MINOR, \
-				-1, \
-				__FILE__, \
-				NULL, \
-				NULL, \
-				MODULE_MAGIC_COOKIE, \
-                                NULL      /* rewrite args spot */
-
-/** Use this only in MPMs */
-#define MPM20_MODULE_STUFF	MODULE_MAGIC_NUMBER_MAJOR, \
-				MODULE_MAGIC_NUMBER_MINOR, \
-				-1, \
-				__FILE__, \
-				NULL, \
-				NULL, \
-				MODULE_MAGIC_COOKIE
-
-/** @} */
-
-/* CONFIGURATION VECTOR FUNCTIONS */
-
-/** configuration vector structure */
-typedef struct ap_conf_vector_t ap_conf_vector_t;
-
-#if defined(AP_DEBUG) || defined(DOXYGEN)
-/**
- * Generic accessors for other modules to get at their own module-specific
- * data
- * @param conf_vector The vector in which the modules configuration is stored.
- *        usually r->per_dir_config or s->module_config
- * @param m The module to get the data for.
- * @return The module-specific data
- */
-AP_DECLARE(void *) ap_get_module_config(const ap_conf_vector_t *cv,
-                                        const module *m);
-
-/**
- * Generic accessors for other modules to set at their own module-specific
- * data
- * @param conf_vector The vector in which the modules configuration is stored.
- *        usually r->per_dir_config or s->module_config
- * @param m The module to set the data for.
- * @param val The module-specific data to set
- */
-AP_DECLARE(void) ap_set_module_config(ap_conf_vector_t *cv, const module *m,
-                                      void *val);
-
-#else /* AP_DEBUG */
-
-#define ap_get_module_config(v,m)	\
-    (((void **)(v))[(m)->module_index])
-#define ap_set_module_config(v,m,val)	\
-    ((((void **)(v))[(m)->module_index]) = (val))
-
-#endif /* AP_DEBUG */
-
-
-/**
- * Generic command handling function for strings
- * @param cmd The command parameters for this directive
- * @param struct_ptr pointer into a given type
- * @param arg The argument to the directive
- * @return An error string or NULL on success
- */
-AP_DECLARE_NONSTD(const char *) ap_set_string_slot(cmd_parms *cmd, void *struct_ptr,
-						   const char *arg);
-
-/**
- * Generic command handling function for integers
- * @param cmd The command parameters for this directive
- * @param struct_ptr pointer into a given type
- * @param arg The argument to the directive
- * @return An error string or NULL on success
- */
-AP_DECLARE_NONSTD(const char *) ap_set_int_slot(cmd_parms *cmd, 
-                                                void *struct_ptr,
-                                                const char *arg);
-
-/**
- * Return true if the specified method is limited by being listed in
- * a <Limit> container, or by *not* being listed in a <LimiteExcept>
- * container.
- *
- * @param   method  Pointer to a string specifying the method to check.
- * @param   cmd     Pointer to the cmd_parms structure passed to the
- *                  directive handler.
- * @return  0 if the method is not limited in the current scope
- */
-AP_DECLARE(int) ap_method_is_limited(cmd_parms *cmd, const char *method);
-
-/**
- * Generic command handling function for strings, always sets the value
- * to a lowercase string
- * @param cmd The command parameters for this directive
- * @param struct_ptr pointer into a given type
- * @param arg The argument to the directive
- * @return An error string or NULL on success
- */
-AP_DECLARE_NONSTD(const char *) ap_set_string_slot_lower(cmd_parms *cmd, 
-							 void *struct_ptr, const char *arg);
-/**
- * Generic command handling function for flags
- * @param cmd The command parameters for this directive
- * @param struct_ptr pointer into a given type
- * @param arg The argument to the directive (either 1 or 0)
- * @return An error string or NULL on success
- */
-AP_DECLARE_NONSTD(const char *) ap_set_flag_slot(cmd_parms *cmd, void *struct_ptr, int arg);
-/**
- * Generic command handling function for files
- * @param cmd The command parameters for this directive
- * @param struct_ptr pointer into a given type
- * @param arg The argument to the directive
- * @return An error string or NULL on success
- */
-AP_DECLARE_NONSTD(const char *) ap_set_file_slot(cmd_parms *cmd, void *struct_ptr, const char *arg);
-/**
- * Generic command handling function to respond with cmd->help as an error
- * @param cmd The command parameters for this directive
- * @param struct_ptr pointer into a given type
- * @param arg The argument to the directive
- * @return The cmd->help value as the error string
- * @tip This allows simple declarations such as;
- * <pre>
- *     AP_INIT_RAW_ARGS("Foo", ap_set_deprecated, NULL, OR_ALL, 
- *         "The Foo directive is no longer supported, use Bar"),
- * </pre>
- */
-AP_DECLARE_NONSTD(const char *) ap_set_deprecated(cmd_parms *cmd, void *struct_ptr, const char *arg);
-/**
- * For modules which need to read config files, open logs, etc. this returns
- * the canonical form of fname made absolute to ap_server_root.
- * @param p pool to allocate data from
- * @param fname The file name
- */
-AP_DECLARE(char *) ap_server_root_relative(apr_pool_t *p, const char *fname);
-
-/* Finally, the hook for dynamically loading modules in... */
-
-/**
- * Add a module to the server
- * @param m The module structure of the module to add
- * @param p The pool of the same lifetime as the module
- */
-AP_DECLARE(void) ap_add_module(module *m, apr_pool_t *p);
-
-/**
- * Remove a module from the server.  There are some caveats:
- * when the module is removed, its slot is lost so all the current
- * per-dir and per-server configurations are invalid. So we should
- * only ever call this function when you are invalidating almost
- * all our current data. I.e. when doing a restart.
- * @param m the module structure of the module to remove
- */
-AP_DECLARE(void) ap_remove_module(module *m);
-/**
- * Add a module to the chained modules list and the list of loaded modules
- * @param m The module structure of the module to add
- * @param p The pool with the same lifetime as the module
- */
-AP_DECLARE(void) ap_add_loaded_module(module *mod, apr_pool_t *p);
-/**
- * Remove a module fromthe chained modules list and the list of loaded modules
- * @param m the module structure of the module to remove
- */
-AP_DECLARE(void) ap_remove_loaded_module(module *mod);
-/**
- * Add a module to the list of loaded module based on the name of the
- * module
- * @param name The name of the module
- * @param p The pool valid for the lifetime of the module
- * @return 1 on success, 0 on failure
- */
-AP_DECLARE(int) ap_add_named_module(const char *name, apr_pool_t *p);
-/**
- * Find the name of the specified module
- * @param m The module to get the name for
- * @return the name of the module
- */
-AP_DECLARE(const char *) ap_find_module_name(module *m);
-/**
- * Find a module based on the name of the module
- * @param name the name of the module
- * @return the module structure if found, NULL otherwise
- */
-AP_DECLARE(module *) ap_find_linked_module(const char *name);
-
-/**
- * Open a ap_configfile_t as apr_file_t
- * @param ret_cfg open ap_configfile_t struct pointer
- * @param p The pool to allocate the structure from
- * @param name the name of the file to open
- */
-AP_DECLARE(apr_status_t) ap_pcfg_openfile(ap_configfile_t **ret_cfg, apr_pool_t *p, const char *name);
-
-/**
- * Allocate a ap_configfile_t handle with user defined functions and params 
- * @param p The pool to allocate from
- * @param descr The name of the file
- * @param param The argument passed to getch/getstr/close
- * @param getc_func The getch function
- * @param gets_func The getstr function
- * @param close_func The close function
- */
-AP_DECLARE(ap_configfile_t *) ap_pcfg_open_custom(apr_pool_t *p, const char *descr,
-    void *param,
-    int(*getc_func)(void*),
-    void *(*gets_func) (void *buf, size_t bufsiz, void *param),
-    int(*close_func)(void *param));
-
-/**
- * Read one line from open ap_configfile_t, strip LF, increase line number
- * @param buf place to store the line read
- * @param bufsize size of the buffer
- * @param cfp File to read from
- * @return 1 on success, 0 on failure
- */
-AP_DECLARE(int) ap_cfg_getline(char *buf, size_t bufsize, ap_configfile_t *cfp);
-
-/**
- * Read one char from open configfile_t, increase line number upon LF 
- * @param cfp The file to read from
- * @return the character read
- */
-AP_DECLARE(int) ap_cfg_getc(ap_configfile_t *cfp);
-
-/**
- * Detach from open ap_configfile_t, calling the close handler
- * @param cfp The file to close
- * @return 1 on sucess, 0 on failure
- */
-AP_DECLARE(int) ap_cfg_closefile(ap_configfile_t *cfp);
-
-/**
- * Read all data between the current <foo> and the matching </foo>.  All
- * of this data is forgotten immediately.  
- * @param cmd The cmd_parms to pass to the directives inside the container
- * @param directive The directive name to read until
- * @return Error string on failure, NULL on success
- */
-AP_DECLARE(const char *) ap_soak_end_container(cmd_parms *cmd, char *directive);
-
-/**
- * Read all data between the current <foo> and the matching </foo> and build
- * a config tree from it
- * @param p pool to allocate from
- * @param temp_pool Temporary pool to allocate from
- * @param parms The cmd_parms to pass to all directives read
- * @param current The current node in the tree
- * @param curr_parent The current parent node
- * @param orig_directive The directive to read until hit.
- * @return Error string on failure, NULL on success
-*/
-AP_DECLARE(const char *) ap_build_cont_config(apr_pool_t *p, 
-                                  apr_pool_t *temp_pool,
-                                  cmd_parms *parms,
-                                  ap_directive_t **current,
-                                  ap_directive_t **curr_parent,
-                                  char *orig_directive);
-
-/**
- * Build a config tree from a config file
- * @param parms The cmd_parms to pass to all of the directives in the file
- * @param conf_pool The pconf pool
- * @param temp_pool The temporary pool
- * @param conftree Place to store the root node of the config tree
- * @return Error string on erro, NULL otherwise
- */
-AP_DECLARE(const char *) ap_build_config(cmd_parms *parms,
-					 apr_pool_t *conf_pool,
-					 apr_pool_t *temp_pool,
-					 ap_directive_t **conftree);
-
-/**
- * Walk a config tree and setup the server's internal structures
- * @param conftree The config tree to walk
- * @param parms The cmd_parms to pass to all functions
- * @param section_vector The per-section config vector.
- * @return Error string on error, NULL otherwise
- */
-AP_DECLARE(const char *) ap_walk_config(ap_directive_t *conftree,
-					cmd_parms *parms,
-                                        ap_conf_vector_t *section_vector);
-
-/**
- * @defgroup ap_check_cmd_context ap_check_cmd_context
- * @{
- */
-/**
- * Check the context a command is used in.
- * @param cmd The command to check
- * @param forbidden Where the command is forbidden.
- * @return Error string on error, NULL on success
- */
-AP_DECLARE(const char *) ap_check_cmd_context(cmd_parms *cmd, unsigned forbidden);
-
-#define  NOT_IN_VIRTUALHOST     0x01 /**< Forbidden in <Virtualhost> */
-#define  NOT_IN_LIMIT           0x02 /**< Forbidden in <Limit> */
-#define  NOT_IN_DIRECTORY       0x04 /**< Forbidden in <Directory> */
-#define  NOT_IN_LOCATION        0x08 /**< Forbidden in <Location> */
-#define  NOT_IN_FILES           0x10 /**< Forbidden in <Files> */
-/** Forbidden in <Directory>/<Location>/<Files>*/
-#define  NOT_IN_DIR_LOC_FILE    (NOT_IN_DIRECTORY|NOT_IN_LOCATION|NOT_IN_FILES) 
-/** Forbidden in <VirtualHost>/<Limit>/<Directory>/<Location>/<Files> */
-#define  GLOBAL_ONLY            (NOT_IN_VIRTUALHOST|NOT_IN_LIMIT|NOT_IN_DIR_LOC_FILE) 
-
-/** @} */
-
-#ifdef CORE_PRIVATE
-
-/**
- * The topmost module in the list
- * @defvar module *ap_top_module
- */
-AP_DECLARE_DATA extern module *ap_top_module;
-
-/**
- * Array of all statically linked modules
- * @defvar module *ap_prelinked_modules[]
- */
-AP_DECLARE_DATA extern module *ap_prelinked_modules[];
-/**
- * Array of all preloaded modules
- * @defvar module *ap_preloaded_modules[]
- */
-AP_DECLARE_DATA extern module *ap_preloaded_modules[];
-/**
- * Array of all loaded modules
- * @defvar module **ap_loaded_modules
- */
-AP_DECLARE_DATA extern module **ap_loaded_modules;
-
-/* For mod_so.c... */
-/** Run a single module's two create_config hooks
- *  @param p the pool to allocate from
- *  @param s The server to configure for.
- *  @param m The module to configure
- */
-AP_DECLARE(void) ap_single_module_configure(apr_pool_t *p, server_rec *s, 
-                                            module *m);
-
-/* For http_main.c... */
-/**
- * Add all of the prelinked modules into the loaded module list
- * @param process The process that is currently running the server
- */
-AP_DECLARE(void) ap_setup_prelinked_modules(process_rec *process);
-
-/**
- * Show the preloaded configuration directives, the help string explaining
- * the directive arguments, in what module they are handled, and in
- * what parts of the configuration they are allowed.  Used for httpd -h.
- */
-AP_DECLARE(void) ap_show_directives(void);
-
-/** 
- * Show the preloaded module names.  Used for httpd -l. 
- */
-AP_DECLARE(void) ap_show_modules(void);
-
-/** 
- * Show the MPM name.  Used in reporting modules such as mod_info to
- * provide extra information to the user
- */
-AP_DECLARE(const char *) ap_show_mpm(void);
-
-/**
- * Read all config files and setup the server
- * @param process The process running the server
- * @param temp_pool A pool to allocate temporary data from.
- * @param config_name The name of the config file
- * @param conftree Place to store the root of the config tree
- * @return The setup server_rec list.
- */
-AP_DECLARE(server_rec *) ap_read_config(process_rec *process, apr_pool_t *temp_pool, const char *config_name, ap_directive_t **conftree);
-
-/**
- * Run all rewrite args hooks for loaded modules
- * @param process The process currently running the server
- */
-AP_DECLARE(void) ap_run_rewrite_args(process_rec *process);
-
-/**
- * Run the register hooks function for a specified module
- * @param m The module to run the register hooks function fo
- * @param p The pool valid for the lifetime of the module
- */
-AP_DECLARE(void) ap_register_hooks(module *m, apr_pool_t *p);
-
-/**
- * Setup all virtual hosts
- * @param p The pool to allocate from
- * @param main_server The head of the server_rec list
- */
-AP_DECLARE(void) ap_fixup_virtual_hosts(apr_pool_t *p, server_rec *main_server);
-
-/* For http_request.c... */
-
-/**
- * Setup the config vector for a request_rec
- * @param p The pool to allocate the config vector from
- * @return The config vector
- */
-AP_CORE_DECLARE(ap_conf_vector_t*) ap_create_request_config(apr_pool_t *p);
-
-/**
- * Setup the config vector for per dir module configs
- * @param p The pool to allocate the config vector from
- * @return The config vector
- */
-AP_CORE_DECLARE(ap_conf_vector_t *) ap_create_per_dir_config(apr_pool_t *p);
-
-/**
- * Run all of the modules merge per dir config functions
- * @param p The pool to pass to the merge functions
- * @param base The base directory config structure
- * @param new_conf The new directory config structure
- */
-AP_CORE_DECLARE(ap_conf_vector_t*) ap_merge_per_dir_configs(apr_pool_t *p,
-                                           ap_conf_vector_t *base,
-                                           ap_conf_vector_t *new_conf);
-
-/* For http_connection.c... */
-/**
- * Setup the config vector for a connection_rec
- * @param p The pool to allocate the config vector from
- * @return The config vector
- */
-AP_CORE_DECLARE(ap_conf_vector_t*) ap_create_conn_config(apr_pool_t *p);
-
-/* For http_core.c... (<Directory> command and virtual hosts) */
-
-/**
- * parse an htaccess file
- * @param resulting htaccess_result
- * @param r The request currently being served
- * @param override Which overrides are active
- * @param path The path to the htaccess file
- * @param access_name The list of possible names for .htaccess files
- * int The status of the current request
- */
-AP_CORE_DECLARE(int) ap_parse_htaccess(ap_conf_vector_t **result, 
-                      request_rec *r, int override,
-                      const char *path, const char *access_name);
-
-/**
- * Setup a virtual host
- * @param p The pool to allocate all memory from
- * @param hostname The hostname of the virtual hsot
- * @param main_server The main server for this Apache configuration
- * @param ps Place to store the new server_rec
- * return Error string on error, NULL on success
- */
-AP_CORE_DECLARE(const char *) ap_init_virtual_host(apr_pool_t *p, const char *hostname,
-				server_rec *main_server, server_rec **);
-
-/**
- * Process the config file for Apache
- * @param s The server rec to use for the command parms
- * @param fname The name of the config file
- * @param conftree The root node of the created config tree
- * @param p Pool for general allocation
- * @param ptem Pool for temporary allocation
- */
-AP_DECLARE(void) ap_process_resource_config(server_rec *s, const char *fname, 
-                 ap_directive_t **conftree, apr_pool_t *p, apr_pool_t *ptemp);
-
-/**
- * Process all directives in the config tree
- * @param s The server rec to use in the command parms
- * @param conftree The config tree to process
- * @param p The pool for general allocation
- * @param ptemp The pool for temporary allocations
- */
-AP_DECLARE(void) ap_process_config_tree(server_rec *s, ap_directive_t *conftree,
-                                        apr_pool_t *p, apr_pool_t *ptemp);
-
-/* Module-method dispatchers, also for http_request.c */
-/**
- * Run the handler phase of each module until a module accepts the
- * responsibility of serving the request
- * @param r The current request
- * @return The status of the current request
- */
-AP_CORE_DECLARE(int) ap_invoke_handler(request_rec *r);
-
-/* for mod_perl */
-
-/**
- * Find a given directive in a command_rec table
- * @param name The directive to search for
- * @param cmds The table to search
- * @return The directive definition of the specified directive
- */
-AP_CORE_DECLARE(const command_rec *) ap_find_command(const char *name, const command_rec *cmds);
-
-/**
- * Find a given directive in a list module
- * @param cmd_name The directive to search for
- * @param mod The module list to search
- * @return The directive definition of the specified directive
- */
-AP_CORE_DECLARE(const command_rec *) ap_find_command_in_modules(const char *cmd_name, module **mod);
-
-/**
- * Ask a module to create per-server and per-section (dir/loc/file) configs
- * (if it hasn't happened already). The results are stored in the server's
- * config, and the specified per-section config vector.
- * @param server The server to operate upon.
- * @param section_vector The per-section config vector.
- * @param section Which section to create a config for.
- * @param mod The module which is defining the config data.
- * @param pconf A pool for all configuration allocations.
- * @return The (new) per-section config data.
- */
-AP_CORE_DECLARE(void *) ap_set_config_vectors(server_rec *server,
-                                              ap_conf_vector_t *section_vector,
-                                              const char *section,
-                                              module *mod, apr_pool_t *pconf);
-
-#endif
-
-  /* Hooks */
-
-/**
- * Run the header parser functions for each module
- * @param r The current request
- * @return OK or DECLINED
- */
-AP_DECLARE_HOOK(int,header_parser,(request_rec *r))
-
-/**
- * Run the pre_config function for each module
- * @param pconf The config pool
- * @param plog The logging streams pool
- * @param ptemp The temporary pool
- * @return OK or DECLINED on success anything else is a error
- */
-AP_DECLARE_HOOK(int,pre_config,(apr_pool_t *pconf,apr_pool_t *plog,apr_pool_t *ptemp))
-
-/**
- * Run the post_config function for each module
- * @param pconf The config pool
- * @param plog The logging streams pool
- * @param ptemp The temporary pool
- * @param s The list of server_recs
- * @return OK or DECLINED on success anything else is a error
- */
-AP_DECLARE_HOOK(int,post_config,(apr_pool_t *pconf,apr_pool_t *plog,apr_pool_t *ptemp,server_rec *s))
-
-/**
- * Run the open_logs functions for each module
- * @param pconf The config pool
- * @param plog The logging streams pool
- * @param ptemp The temporary pool
- * @param s The list of server_recs
- * @return OK or DECLINED on success anything else is a error
- */
-AP_DECLARE_HOOK(int,open_logs,(apr_pool_t *pconf,apr_pool_t *plog,apr_pool_t *ptemp,server_rec *s))
-
-/**
- * Run the child_init functions for each module
- * @param pchild The child pool
- * @param s The list of server_recs in this server 
- */
-AP_DECLARE_HOOK(void,child_init,(apr_pool_t *pchild, server_rec *s))
-
-/**
- * Run the handler functions for each module
- * @param r The request_rec
- * @remark non-wildcard handlers should HOOK_MIDDLE, wildcard HOOK_LAST
- */
-AP_DECLARE_HOOK(int,handler,(request_rec *r))
-
-/**
- * Run the quick handler functions for each module. The quick_handler
- * is run before any other requests hooks are called (location_walk,
- * directory_walk, access checking, et. al.). This hook was added
- * to provide a quick way to serve content from a URI keyed cache.
- * @param r The request_rec
- */
-AP_DECLARE_HOOK(int,quick_handler,(request_rec *r))
-
-/**
- * Retrieve the optional functions for each module.
- * This is run immediately before the server starts. Optional functions should
- * be registered during the hook registration phase.
- */
-AP_DECLARE_HOOK(void,optional_fn_retrieve,(void))
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif	/* !APACHE_HTTP_CONFIG_H */
diff --git a/include/http_connection.h b/include/http_connection.h
deleted file mode 100644
index a1b62f2..0000000
--- a/include/http_connection.h
+++ /dev/null
@@ -1,147 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-#ifndef APACHE_HTTP_CONNECTION_H
-#define APACHE_HTTP_CONNECTION_H
-
-#include "apr_hooks.h"
-#include "apr_network_io.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * @package Apache connection library
- */
-#ifdef CORE_PRIVATE
-/**
- * This is the protocol module driver.  This calls all of the
- * pre-connection and connection hooks for all protocol modules.
- * @param c The connection on which the request is read
- * @param csd The mechanism on which this connection is to be read.  
- *            Most times this will be a socket, but it is up to the module
- *            that accepts the request to determine the exact type.
- * @deffunc void ap_process_connection(conn_rec *c, void *csd)
- */
-AP_CORE_DECLARE(void) ap_process_connection(conn_rec *c, void *csd);
-
-AP_CORE_DECLARE(void) ap_flush_conn(conn_rec *c);
-
-/**
- * This function is responsible for the following cases:
- * <pre>
- * we now proceed to read from the client until we get EOF, or until
- * MAX_SECS_TO_LINGER has passed.  the reasons for doing this are
- * documented in a draft:
- *
- * http://www.ics.uci.edu/pub/ietf/http/draft-ietf-http-connection-00.txt
- *
- * in a nutshell -- if we don't make this effort we risk causing
- * TCP RST packets to be sent which can tear down a connection before
- * all the response data has been sent to the client.
- * </pre>
- * @param c The connection we are closing
- */
-AP_DECLARE(void) ap_lingering_close(conn_rec *c);
-#endif
-
-  /* Hooks */
-/**
- * create_connection is a RUN_FIRST hook which allows modules to create 
- * connections. In general, you should not install filters with the 
- * create_connection hook. If you require vhost configuration information 
- * to make filter installation decisions, you must use the pre_connection
- * or install_network_transport hook. This hook should close the connection
- * if it encounters a fatal error condition.
- *
- * @param p The pool from which to allocate the connection record
- * @param csd The socket that has been accepted
- * @param conn_id A unique identifier for this connection.  The ID only
- *                needs to be unique at that time, not forever.
- * @param sbh A handle to scoreboard information for this connection.
- * @return An allocated connection record or NULL.
- */
-AP_DECLARE_HOOK(conn_rec *, create_connection,
-                (apr_pool_t *p, server_rec *server, apr_socket_t *csd, long conn_id, void *sbh))
-   
-/**
- * This hook gives protocol modules an opportunity to set everything up
- * before calling the protocol handler.  All pre-connection hooks are
- * run until one returns something other than ok or decline
- * @param c The connection on which the request has been received.
- * @param csd The mechanism on which this connection is to be read.  
- *            Most times this will be a socket, but it is up to the module
- *            that accepts the request to determine the exact type.
- * @return OK or DECLINED
- * @deffunc int ap_run_pre_connection(conn_rec *c, void *csd)
- */
-AP_DECLARE_HOOK(int,pre_connection,(conn_rec *c, void *csd))
-
-/**
- * This hook implements different protocols.  After a connection has been
- * established, the protocol module must read and serve the request.  This
- * function does that for each protocol module.  The first protocol module
- * to handle the request is the last module run.
- * @param c The connection on which the request has been received.
- * @return OK or DECLINED
- * @deffunc int ap_run_process_connection(conn_rec *c)
- */
-AP_DECLARE_HOOK(int,process_connection,(conn_rec *c))
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif	/* !APACHE_HTTP_REQUEST_H */
diff --git a/include/http_core.h b/include/http_core.h
deleted file mode 100644
index 2437551..0000000
--- a/include/http_core.h
+++ /dev/null
@@ -1,610 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-#ifndef APACHE_HTTP_CORE_H
-#define APACHE_HTTP_CORE_H
-
-#include "apr.h"
-#include "apr_hash.h"
-#include "util_filter.h"
-
-#if APR_HAVE_STRUCT_RLIMIT
-#include <sys/time.h>
-#include <sys/resource.h>
-#endif
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * @package CORE HTTP Daemon
- */
-
-/* ****************************************************************
- *
- * The most basic server code is encapsulated in a single module
- * known as the core, which is just *barely* functional enough to
- * serve documents, though not terribly well.
- *
- * Largely for NCSA back-compatibility reasons, the core needs to
- * make pieces of its config structures available to other modules.
- * The accessors are declared here, along with the interpretation
- * of one of them (allow_options).
- */
-
-#define OPT_NONE 0
-#define OPT_INDEXES 1
-#define OPT_INCLUDES 2
-#define OPT_SYM_LINKS 4
-#define OPT_EXECCGI 8
-#define OPT_UNSET 16
-#define OPT_INCNOEXEC 32
-#define OPT_SYM_OWNER 64
-#define OPT_MULTI 128
-#define OPT_ALL (OPT_INDEXES|OPT_INCLUDES|OPT_SYM_LINKS|OPT_EXECCGI)
-
-/* options for get_remote_host() */
-/* REMOTE_HOST returns the hostname, or NULL if the hostname
- * lookup fails.  It will force a DNS lookup according to the
- * HostnameLookups setting.
- */
-#define REMOTE_HOST (0)
-
-/* REMOTE_NAME returns the hostname, or the dotted quad if the
- * hostname lookup fails.  It will force a DNS lookup according
- * to the HostnameLookups setting.
- */
-#define REMOTE_NAME (1)
-
-/* REMOTE_NOLOOKUP is like REMOTE_NAME except that a DNS lookup is
- * never forced.
- */
-#define REMOTE_NOLOOKUP (2)
-
-/* REMOTE_DOUBLE_REV will always force a DNS lookup, and also force
- * a double reverse lookup, regardless of the HostnameLookups
- * setting.  The result is the (double reverse checked) hostname,
- * or NULL if any of the lookups fail.
- */
-#define REMOTE_DOUBLE_REV (3)
-
-#define SATISFY_ALL 0
-#define SATISFY_ANY 1
-#define SATISFY_NOSPEC 2
-
-/* Make sure we don't write less than 8192 bytes at any one time.
- */
-#define AP_MIN_BYTES_TO_WRITE  8192
-
-/**
- * Retrieve the value of Options for this request
- * @param r The current request
- * @return the Options bitmask
- * @deffunc int ap_allow_options(request_rec *r)
- */
-AP_DECLARE(int) ap_allow_options(request_rec *r);
-
-/**
- * Retrieve the value of the AllowOverride for this request
- * @param r The current request
- * @return the overrides bitmask
- * @deffunc int ap_allow_overrides(request_rec *r)
- */
-AP_DECLARE(int) ap_allow_overrides(request_rec *r);
-
-/**
- * Retrieve the value of the DefaultType directive, or text/plain if not set
- * @param r The current request
- * @return The default type
- * @deffunc const char *ap_default_type(request_rec *r)
- */
-AP_DECLARE(const char *) ap_default_type(request_rec *r);     
-
-/**
- * Retrieve the document root for this server
- * @param r The current request
- * @warning Don't use this!  If your request went through a Userdir, or 
- * something like that, it'll screw you.  But it's back-compatible...
- * @return The document root
- * @deffunc const char *ap_document_root(request_rec *r)
- */
-AP_DECLARE(const char *) ap_document_root(request_rec *r);
-
-/**
- * Lookup the remote client's DNS name or IP address
- * @param conn The current connection
- * @param dir_config The directory config vector from the request
- * @param type The type of lookup to perform.  One of:
- * <pre>
- *     REMOTE_HOST returns the hostname, or NULL if the hostname
- *                 lookup fails.  It will force a DNS lookup according to the
- *                 HostnameLookups setting.
- *     REMOTE_NAME returns the hostname, or the dotted quad if the
- *                 hostname lookup fails.  It will force a DNS lookup according
- *                 to the HostnameLookups setting.
- *     REMOTE_NOLOOKUP is like REMOTE_NAME except that a DNS lookup is
- *                     never forced.
- *     REMOTE_DOUBLE_REV will always force a DNS lookup, and also force
- *                   a double reverse lookup, regardless of the HostnameLookups
- *                   setting.  The result is the (double reverse checked) 
- *                   hostname, or NULL if any of the lookups fail.
- * </pre>
- * @param str_is_ip unless NULL is passed, this will be set to non-zero on output when an IP address 
- *        string is returned
- * @return The remote hostname
- * @deffunc const char *ap_get_remote_host(conn_rec *conn, void *dir_config, int type, int *str_is_ip)
- */
-AP_DECLARE(const char *) ap_get_remote_host(conn_rec *conn, void *dir_config, int type, int *str_is_ip);
-
-/**
- * Retrieve the login name of the remote user.  Undef if it could not be
- * determined
- * @param r The current request
- * @return The user logged in to the client machine
- * @deffunc const char *ap_get_remote_logname(request_rec *r)
- */
-AP_DECLARE(const char *) ap_get_remote_logname(request_rec *r);
-
-/* Used for constructing self-referencing URLs, and things like SERVER_PORT,
- * and SERVER_NAME.
- */
-/**
- * build a fully qualified URL from the uri and information in the request rec
- * @param p The pool to allocate the URL from
- * @param uri The path to the requested file
- * @param r The current request
- * @return A fully qualified URL
- * @deffunc char *ap_construct_url(apr_pool_t *p, const char *uri, request_rec *r)
- */
-AP_DECLARE(char *) ap_construct_url(apr_pool_t *p, const char *uri, request_rec *r);
-
-/**
- * Get the current server name from the request
- * @param r The current request
- * @return the server name
- * @deffunc const char *ap_get_server_name(request_rec *r)
- */
-AP_DECLARE(const char *) ap_get_server_name(request_rec *r);
-
-/**
- * Get the current server port
- * @param The current request
- * @return The server's port
- * @deffunc apr_port_t ap_get_server_port(const request_rec *r)
- */
-AP_DECLARE(apr_port_t) ap_get_server_port(const request_rec *r);
-
-/**
- * Return the limit on bytes in request msg body 
- * @param r The current request
- * @return the maximum number of bytes in the request msg body
- * @deffunc apr_off_t ap_get_limit_req_body(const request_rec *r)
- */
-AP_DECLARE(apr_off_t) ap_get_limit_req_body(const request_rec *r);
-
-/**
- * Return the limit on bytes in XML request msg body
- * @param r The current request
- * @return the maximum number of bytes in XML request msg body
- * @deffunc size_t ap_get_limit_xml_body(const request_rec *r)
- */
-AP_DECLARE(size_t) ap_get_limit_xml_body(const request_rec *r);
-
-/**
- * Install a custom response handler for a given status
- * @param r The current request
- * @param status The status for which the custom response should be used
- * @param string The custom response.  This can be a static string, a file
- *               or a URL
- */
-AP_DECLARE(void) ap_custom_response(request_rec *r, int status, const char *string);
-
-/**
- * Check for a definition from the server command line
- * @param name The define to check for
- * @return 1 if defined, 0 otherwise
- * @deffunc int ap_exists_config_define(const char *name)
- */
-AP_DECLARE(int) ap_exists_config_define(const char *name);
-/* FIXME! See STATUS about how */
-AP_DECLARE_NONSTD(int) ap_core_translate(request_rec *r);
-
-/* Authentication stuff.  This is one of the places where compatibility
- * with the old config files *really* hurts; they don't discriminate at
- * all between different authentication schemes, meaning that we need
- * to maintain common state for all of them in the core, and make it
- * available to the other modules through interfaces.
- */
-typedef struct require_line require_line;
-
-/** A structure to keep track of authorization requirements */
-struct require_line {
-    /** Where the require line is in the config file. */
-    apr_int64_t method_mask;
-    /** The complete string from the command line */
-    char *requirement;
-};
-     
-/**
- * Return the type of authorization required for this request
- * @param r The current request
- * @return The authorization required
- * @deffunc const char *ap_auth_type(request_rec *r)
- */
-AP_DECLARE(const char *) ap_auth_type(request_rec *r);
-
-/**
- * Return the current Authorization realm
- * @param r The current request
- * @return The current authorization realm
- * @deffunc const char *ap_auth_name(request_rec *r)
- */
-AP_DECLARE(const char *) ap_auth_name(request_rec *r);     
-
-/**
- * How the requires lines must be met.
- * @param r The current request
- * @return How the requirements must be met.  One of:
- * <pre>
- *      SATISFY_ANY    -- any of the requirements must be met.
- *      SATISFY_ALL    -- all of the requirements must be met.
- *      SATISFY_NOSPEC -- There are no applicable satisfy lines
- * </pre>
- * @deffunc int ap_satisfies(request_rec *r)
- */
-AP_DECLARE(int) ap_satisfies(request_rec *r);
-
-/**
- * Retrieve information about all of the requires directives for this request
- * @param r The current request
- * @return An array of all requires directives for this request
- * @deffunc const apr_array_header_t *ap_requires(request_rec *r)
- */
-AP_DECLARE(const apr_array_header_t *) ap_requires(request_rec *r);    
-
-#ifdef CORE_PRIVATE
-
-/*
- * Core is also unlike other modules in being implemented in more than
- * one file... so, data structures are declared here, even though most of
- * the code that cares really is in http_core.c.  Also, another accessor.
- */
-
-AP_DECLARE_DATA extern module core_module;
-
-/* Per-request configuration */
-
-typedef struct {
-    /* bucket brigade used by getline for look-ahead and 
-     * ap_get_client_block for holding left-over request body */
-    struct apr_bucket_brigade *bb;
-
-    /* an array of per-request working data elements, accessed
-     * by ID using ap_get_request_note()
-     * (Use ap_register_request_note() during initialization
-     * to add elements)
-     */
-    void **notes;
-} core_request_config;
-
-/* Standard entries that are guaranteed to be accessible via
- * ap_get_request_note() for each request (additional entries
- * can be added with ap_register_request_note())
- */
-#define AP_NOTE_DIRECTORY_WALK 0
-#define AP_NOTE_LOCATION_WALK  1
-#define AP_NOTE_FILE_WALK      2
-#define AP_NUM_STD_NOTES       3
-
-/**
- * Reserve an element in the core_request_config->notes array
- * for some application-specific data
- * @return An integer key that can be passed to ap_get_request_note()
- *         during request processing to access this element for the
- *         current request.
- */
-AP_DECLARE(apr_size_t) ap_register_request_note(void);
-
-/**
- * Retrieve a pointer to an element in the core_request_config->notes array
- * @param r The request
- * @param note_num  A key for the element: either a value obtained from
- *        ap_register_request_note() or one of the predefined AP_NOTE_*
- *        values.
- * @return NULL if the note_num is invalid, otherwise a pointer to the
- *         requested note element.
- * @remark At the start of a request, each note element is NULL.  The
- *         handle provided by ap_get_request_note() is a pointer-to-pointer
- *         so that the caller can point the element to some app-specific
- *         data structure.  The caller should guarantee that any such
- *         structure will last as long as the request itself.
- */
-AP_DECLARE(void **) ap_get_request_note(request_rec *r, apr_size_t note_num);
-
-/* Per-directory configuration */
-
-typedef unsigned char allow_options_t;
-typedef unsigned char overrides_t;
-
-/*
- * Bits of info that go into making an ETag for a file
- * document.  Why a long?  Because char historically
- * proved too short for Options, and int can be different
- * sizes on different platforms.
- */
-typedef unsigned long etag_components_t;
-
-#define ETAG_UNSET 0
-#define ETAG_NONE  (1 << 0)
-#define ETAG_MTIME (1 << 1)
-#define ETAG_INODE (1 << 2)
-#define ETAG_SIZE  (1 << 3)
-#define ETAG_BACKWARD (ETAG_MTIME | ETAG_INODE | ETAG_SIZE)
-#define ETAG_ALL   (ETAG_MTIME | ETAG_INODE | ETAG_SIZE)
-
-typedef enum {
-    srv_sig_unset,
-    srv_sig_off,
-    srv_sig_on,
-    srv_sig_withmail
-} server_signature_e;
-
-typedef struct {
-    /* path of the directory/regex/etc. see also d_is_fnmatch/absolute below */
-    char *d;
-    /* the number of slashes in d */
-    unsigned d_components;
-
-    /* If (opts & OPT_UNSET) then no absolute assignment to options has
-     * been made.
-     * invariant: (opts_add & opts_remove) == 0
-     * Which said another way means that the last relative (options + or -)
-     * assignment made to each bit is recorded in exactly one of opts_add
-     * or opts_remove.
-     */
-    allow_options_t opts;
-    allow_options_t opts_add;
-    allow_options_t opts_remove;
-    overrides_t override;
-    
-    /* MIME typing --- the core doesn't do anything at all with this,
-     * but it does know what to slap on a request for a document which
-     * goes untyped by other mechanisms before it slips out the door...
-     */
-    
-    char *ap_default_type;
-  
-    /* Authentication stuff.  Groan... */
-    
-    int satisfy;
-    char *ap_auth_type;
-    char *ap_auth_name;
-    apr_array_header_t *ap_requires;
-
-    /* Custom response config. These can contain text or a URL to redirect to.
-     * if response_code_strings is NULL then there are none in the config,
-     * if it's not null then it's allocated to sizeof(char*)*RESPONSE_CODES.
-     * This lets us do quick merges in merge_core_dir_configs().
-     */
-  
-    char **response_code_strings;
-
-    /* Hostname resolution etc */
-#define HOSTNAME_LOOKUP_OFF	0
-#define HOSTNAME_LOOKUP_ON	1
-#define HOSTNAME_LOOKUP_DOUBLE	2
-#define HOSTNAME_LOOKUP_UNSET	3
-    unsigned int hostname_lookups : 4;
-
-    signed int do_rfc1413 : 2;   /* See if client is advertising a username? */
-
-    signed int content_md5 : 2;  /* calculate Content-MD5? */
-
-#define USE_CANONICAL_NAME_OFF   (0)
-#define USE_CANONICAL_NAME_ON    (1)
-#define USE_CANONICAL_NAME_DNS   (2)
-#define USE_CANONICAL_NAME_UNSET (3)
-    unsigned use_canonical_name : 2;
-
-    /* since is_fnmatch(conf->d) was being called so frequently in
-     * directory_walk() and its relatives, this field was created and
-     * is set to the result of that call.
-     */
-    unsigned d_is_fnmatch : 1;
-
-    /* should we force a charset on any outgoing parameterless content-type?
-     * if so, which charset?
-     */
-#define ADD_DEFAULT_CHARSET_OFF   (0)
-#define ADD_DEFAULT_CHARSET_ON    (1)
-#define ADD_DEFAULT_CHARSET_UNSET (2)
-    unsigned add_default_charset : 2;
-    const char *add_default_charset_name;
-
-    /* System Resource Control */
-#ifdef RLIMIT_CPU
-    struct rlimit *limit_cpu;
-#endif
-#if defined (RLIMIT_DATA) || defined (RLIMIT_VMEM) || defined(RLIMIT_AS)
-    struct rlimit *limit_mem;
-#endif
-#ifdef RLIMIT_NPROC
-    struct rlimit *limit_nproc;
-#endif
-    apr_off_t limit_req_body;      /* limit on bytes in request msg body */
-    long limit_xml_body;           /* limit on bytes in XML request msg body */
-
-    /* logging options */
-
-    server_signature_e server_signature;
-
-    int loglevel;
-    
-    /* Access control */
-    apr_array_header_t *sec_file;
-    regex_t *r;
-
-    const char *mime_type;       /* forced with ForceType  */
-    const char *handler;         /* forced with SetHandler */
-    const char *output_filters;  /* forced with SetOutputFilters */
-    const char *input_filters;   /* forced with SetInputFilters */
-    int accept_path_info;        /* forced with AcceptPathInfo */
-
-    apr_hash_t *ct_output_filters; /* added with AddOutputFilterByType */
-
-    /*
-     * What attributes/data should be included in ETag generation?
-     */
-    etag_components_t etag_bits;
-    etag_components_t etag_add;
-    etag_components_t etag_remove;
-} core_dir_config;
-
-/* Per-server core configuration */
-
-typedef struct {
-  
-#ifdef GPROF
-    char *gprof_dir;
-#endif
-
-    /* Name translations --- we want the core to be able to do *something*
-     * so it's at least a minimally functional web server on its own (and
-     * can be tested that way).  But let's keep it to the bare minimum:
-     */
-    const char *ap_document_root;
-  
-    /* Access control */
-
-    char *access_name;
-    apr_array_header_t *sec_dir;
-    apr_array_header_t *sec_url;
-} core_server_config;
-
-/* for http_config.c */
-void ap_core_reorder_directories(apr_pool_t *, server_rec *);
-
-/* for mod_perl */
-AP_CORE_DECLARE(void) ap_add_per_dir_conf(server_rec *s, void *dir_config);
-AP_CORE_DECLARE(void) ap_add_per_url_conf(server_rec *s, void *url_config);
-AP_CORE_DECLARE(void) ap_add_file_conf(core_dir_config *conf, void *url_config);
-AP_CORE_DECLARE_NONSTD(const char *) ap_limit_section(cmd_parms *cmd, void *dummy, const char *arg);
-
-#endif
-
-
-/* ----------------------------------------------------------------------
- *
- * Runtime status/management
- */
-
-typedef enum {
-    ap_mgmt_type_string,
-    ap_mgmt_type_long,
-    ap_mgmt_type_hash
-} ap_mgmt_type_e;
-
-typedef union {
-    const char *s_value;
-    long i_value;
-    apr_hash_t *h_value;
-} ap_mgmt_value;
-
-typedef struct {
-    const char *description;
-    const char *name;
-    ap_mgmt_type_e vtype;
-    ap_mgmt_value v;
-} ap_mgmt_item_t;
-
-/* Handles for core filters */
-extern ap_filter_rec_t *ap_subreq_core_filter_handle;
-extern ap_filter_rec_t *ap_core_output_filter_handle;
-extern ap_filter_rec_t *ap_content_length_filter_handle;
-extern ap_filter_rec_t *ap_net_time_filter_handle;
-extern ap_filter_rec_t *ap_core_input_filter_handle;
-extern ap_filter_rec_t *ap_http_input_filter_handle;
-extern ap_filter_rec_t *ap_http_header_filter_handle;
-extern ap_filter_rec_t *ap_chunk_filter_handle;
-extern ap_filter_rec_t *ap_byterange_filter_handle;
-
-/**
- * This hook provdes a way for modules to provide metrics/statistics about
- * their operational status.
- *
- * @param p A pool to use to create entries in the hash table
- * @param val The name of the parameter(s) that is wanted. This is
- *            tree-structured would be in the form ('*' is all the tree,
- *            'module.*' all of the module , 'module.foo.*', or
- *            'module.foo.bar' )
- * @param ht The hash table to store the results. Keys are item names, and
- *           the values point to ap_mgmt_item_t structures.
- * @ingroup hooks
- */
-AP_DECLARE_HOOK(int, get_mgmt_items,
-                (apr_pool_t *p, const char * val, apr_hash_t *ht))
-
-/* ---------------------------------------------------------------------- */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif	/* !APACHE_HTTP_CORE_H */
diff --git a/include/http_log.h b/include/http_log.h
deleted file mode 100644
index d6fbc71..0000000
--- a/include/http_log.h
+++ /dev/null
@@ -1,289 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-#ifndef APACHE_HTTP_LOG_H
-#define APACHE_HTTP_LOG_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include "apr_thread_proc.h"
-
-/**
- * @package Apache logging library
- */
-
-#ifdef HAVE_SYSLOG
-#include <syslog.h>
-
-#ifndef LOG_PRIMASK
-#define LOG_PRIMASK 7
-#endif
-
-#define APLOG_EMERG     LOG_EMERG     /* system is unusable */
-#define APLOG_ALERT     LOG_ALERT     /* action must be taken immediately */
-#define APLOG_CRIT      LOG_CRIT      /* critical conditions */
-#define APLOG_ERR       LOG_ERR       /* error conditions */
-#define APLOG_WARNING   LOG_WARNING   /* warning conditions */
-#define APLOG_NOTICE    LOG_NOTICE    /* normal but significant condition */
-#define APLOG_INFO      LOG_INFO      /* informational */
-#define APLOG_DEBUG     LOG_DEBUG     /* debug-level messages */
-
-#define APLOG_LEVELMASK LOG_PRIMASK   /* mask off the level value */
-
-#else
-
-#define	APLOG_EMERG	0	/* system is unusable */
-#define	APLOG_ALERT	1	/* action must be taken immediately */
-#define	APLOG_CRIT	2	/* critical conditions */
-#define	APLOG_ERR	3	/* error conditions */
-#define	APLOG_WARNING	4	/* warning conditions */
-#define	APLOG_NOTICE	5	/* normal but significant condition */
-#define	APLOG_INFO	6	/* informational */
-#define	APLOG_DEBUG	7	/* debug-level messages */
-
-#define	APLOG_LEVELMASK	7	/* mask off the level value */
-
-#endif
-
-#define APLOG_NOERRNO		(APLOG_LEVELMASK + 1)
-
-/* normal but significant condition on startup, usually printed to stderr */
-#define APLOG_STARTUP           ((APLOG_LEVELMASK + 1) * 4) 
-
-#ifndef DEFAULT_LOGLEVEL
-#define DEFAULT_LOGLEVEL	APLOG_WARNING
-#endif
-
-extern int AP_DECLARE_DATA ap_default_loglevel;
-
-#define APLOG_MARK	__FILE__,__LINE__
-
-/**
- * Set up for logging to stderr.
- * @param p The pool to allocate out of
- */
-AP_DECLARE(void) ap_open_stderr_log(apr_pool_t *p);
-
-/**
- * Open the error log and replace stderr with it.
- * @param s_main The main server
- * @param p The pool to allocate out of
- */
-void ap_open_logs (server_rec *s_main, apr_pool_t *p);
-
-/* 
- * The three primary logging functions, ap_log_error, ap_log_rerror, and 
- * ap_log_perror use a printf style format string to build the log message.  
- * It is VERY IMPORTANT that you not include any raw data from the network, 
- * such as the request-URI or request header fields, within the format 
- * string.  Doing so makes the server vulnerable to a denial-of-service 
- * attack and other messy behavior.  Instead, use a simple format string 
- * like "%s", followed by the string containing the untrusted data.
- */
-
-/**
- * One of the primary logging routines in Apache.  This uses a printf-like
- * format to log messages to the error_log.
- * @param file The file in which this function is called
- * @param line The line number on which this function is called
- * @param level The level of this error message
- * @param status The status code from the previous command
- * @param s The server on which we are logging
- * @param fmt The format string
- * @param ... The arguments to use to fill out fmt.
- * @tip Use APLOG_MARK to fill out file and line
- * @warning It is VERY IMPORTANT that you not include any raw data from 
- * the network, such as the request-URI or request header fields, within 
- * the format string.  Doing so makes the server vulnerable to a 
- * denial-of-service attack and other messy behavior.  Instead, use a 
- * simple format string like "%s", followed by the string containing the 
- * untrusted data.
- * @deffunc void ap_log_error(const char *file, int line, int level, apr_status_t status, const server_rec *s, const char *fmt, ...) 
- */
-AP_DECLARE(void) ap_log_error(const char *file, int line, int level, 
-                             apr_status_t status, const server_rec *s, 
-                             const char *fmt, ...)
-			    __attribute__((format(printf,6,7)));
-
-/**
- * The second of the primary logging routines in Apache.  This uses 
- * a printf-like format to log messages to the error_log.
- * @param file The file in which this function is called
- * @param line The line number on which this function is called
- * @param level The level of this error message
- * @param status The status code from the previous command
- * @param p The pool which we are logging for
- * @param fmt The format string
- * @param ... The arguments to use to fill out fmt.
- * @tip Use APLOG_MARK to fill out file and line
- * @warning It is VERY IMPORTANT that you not include any raw data from 
- * the network, such as the request-URI or request header fields, within 
- * the format string.  Doing so makes the server vulnerable to a 
- * denial-of-service attack and other messy behavior.  Instead, use a 
- * simple format string like "%s", followed by the string containing the 
- * untrusted data.
- * @deffunc void ap_log_perror(const char *file, int line, int level, apr_status_t status, apr_pool_t *p, const char *fmt, ...) 
- */
-AP_DECLARE(void) ap_log_perror(const char *file, int line, int level, 
-                             apr_status_t status, apr_pool_t *p, 
-                             const char *fmt, ...)
-			    __attribute__((format(printf,6,7)));
-
-/**
- * The last of the primary logging routines in Apache.  This uses 
- * a printf-like format to log messages to the error_log.
- * @param file The file in which this function is called
- * @param line The line number on which this function is called
- * @param level The level of this error message
- * @param status The status code from the previous command
- * @param s The request which we are logging for
- * @param fmt The format string
- * @param ... The arguments to use to fill out fmt.
- * @tip Use APLOG_MARK to fill out file and line
- * @warning It is VERY IMPORTANT that you not include any raw data from 
- * the network, such as the request-URI or request header fields, within 
- * the format string.  Doing so makes the server vulnerable to a 
- * denial-of-service attack and other messy behavior.  Instead, use a 
- * simple format string like "%s", followed by the string containing the 
- * untrusted data.
- * @deffunc void ap_log_rerror(const char *file, int line, int level, apr_status_t status, request_rec *r, const char *fmt, ...) 
- */
-AP_DECLARE(void) ap_log_rerror(const char *file, int line, int level, 
-                               apr_status_t status, const request_rec *r, 
-                               const char *fmt, ...)
-			    __attribute__((format(printf,6,7)));
-
-/**
- * Convert stderr to the error log
- * @param s The current server
- * @deffunc void ap_error_log2stderr(server_rec *s)
- */
-AP_DECLARE(void) ap_error_log2stderr(server_rec *s);
-
-/**
- * Log the current pid of the parent process
- * @param p The pool to use for logging
- * @param fname The name of the file to log to
- */
-AP_DECLARE(void) ap_log_pid(apr_pool_t *p, const char *fname);
-
-typedef struct piped_log piped_log;
-
-/**
- * The piped logging structure.  Piped logs are used to move functionality
- * out of the main server.  For example, log rotation is done with piped logs.
- */
-struct piped_log {
-    /** The pool to use for the piped log */
-    apr_pool_t *p;
-    /** The pipe between the server and the logging process */
-    apr_file_t *fds[2];
-    /* XXX - an #ifdef that needs to be eliminated from public view. Shouldn't
-     * be hard */
-#ifdef AP_HAVE_RELIABLE_PIPED_LOGS
-    /** The name of the program the logging process is running */
-    char *program;
-    /** The pid of the logging process */
-    apr_proc_t *pid;
-#endif
-};
-
-/**
- * Open the piped log process
- * @param p The pool to allocate out of
- * @param program The program to run in the logging process
- * @return The piped log structure
- * @deffunc piped_log *ap_open_piped_log(apr_pool_t *p, const char *program)
- */
-AP_DECLARE(piped_log *) ap_open_piped_log(apr_pool_t *p, const char *program);
-
-/**
- * Close the piped log and kill the logging process
- * @param pl The piped log structure
- * @deffunc void ap_close_piped_log(piped_log *pl)
- */
-AP_DECLARE(void) ap_close_piped_log(piped_log *pl);
-
-/**
- * A macro to access the read side of the piped log pipe
- * @param pl The piped log structure
- * @return The native file descriptor
- * @deffunc ap_piped_log_read_fd(pl)
- */
-#define ap_piped_log_read_fd(pl)	((pl)->fds[0])
-
-/**
- * A macro to access the write side of the piped log pipe
- * @param pl The piped log structure
- * @return The native file descriptor
- * @deffunc ap_piped_log_read_fd(pl)
- */
-#define ap_piped_log_write_fd(pl)	((pl)->fds[1])
-
-AP_DECLARE_HOOK(void, error_log, (const char *file, int line, int level,
-                       apr_status_t status, const server_rec *s,
-                       const request_rec *r, apr_pool_t *pool,
-                       const char *errstr))
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif	/* !APACHE_HTTP_LOG_H */
diff --git a/include/http_main.h b/include/http_main.h
deleted file mode 100644
index fdab745..0000000
--- a/include/http_main.h
+++ /dev/null
@@ -1,96 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-#ifndef APACHE_HTTP_MAIN_H
-#define APACHE_HTTP_MAIN_H
-
-/* AP_SERVER_BASEARGS is the command argument list parsed by http_main.c
- * in apr_getopt() format.  Use this for default'ing args that the MPM
- * can safely ignore and pass on from its rewrite_args() handler.
- */
-#define AP_SERVER_BASEARGS "C:c:D:d:e:f:vVlLth?X"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * @package Command line options
- */
-
-/** The name of the Apache executable */
-AP_DECLARE_DATA extern const char *ap_server_argv0;
-/** The global server's ServerRoot */
-AP_DECLARE_DATA extern const char *ap_server_root;
-
-/* for -C, -c and -D switches */
-/** An array of all -C directives.  These are processed before the server's
- *  config file */
-AP_DECLARE_DATA extern apr_array_header_t *ap_server_pre_read_config;
-/** An array of all -c directives.  These are processed after the server's
- *  config file */
-AP_DECLARE_DATA extern apr_array_header_t *ap_server_post_read_config;
-/** An array of all -D defines on the command line.  This allows people to
- *  effect the server based on command line options */
-AP_DECLARE_DATA extern apr_array_header_t *ap_server_config_defines;
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif	/* !APACHE_HTTP_MAIN_H */
diff --git a/include/http_protocol.h b/include/http_protocol.h
deleted file mode 100644
index fd04b43..0000000
--- a/include/http_protocol.h
+++ /dev/null
@@ -1,692 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-#ifndef APACHE_HTTP_PROTOCOL_H
-#define APACHE_HTTP_PROTOCOL_H
-
-#include "httpd.h"
-#include "apr_hooks.h"
-#include "apr_portable.h"
-#include "apr_mmap.h"
-#include "apr_buckets.h"
-#include "util_filter.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * @package HTTP protocol handling
- */
-
-/* This is an optimization.  We keep a record of the filter_rec that
- * stores the old_write filter, so that we can avoid strcmp's later.
- */
-AP_DECLARE_DATA extern ap_filter_rec_t *ap_old_write_func;
-
-/*
- * Prototypes for routines which either talk directly back to the user,
- * or control the ones that eventually do.
- */
-
-/**
- * Read a request and fill in the fields.
- * @param c The current connection
- * @return The new request_rec
- */ 
-request_rec *ap_read_request(conn_rec *c);
-
-/* Finish up stuff after a request */
-
-/**
- * Called at completion of sending the response.  It sends the terminating
- * protocol information.
- * @param r The current request
- * @deffunc void ap_finalize_request_protocol(request_rec *r)
- */
-AP_DECLARE(void) ap_finalize_request_protocol(request_rec *r);
-
-/**
- * Send error back to client.
- * @param r The current request
- * @param recursive_error last arg indicates error status in case we get 
- *      an error in the process of trying to deal with an ErrorDocument 
- *      to handle some other error.  In that case, we print the default 
- *      report for the first thing that went wrong, and more briefly report 
- *      on the problem with the ErrorDocument.
- * @deffunc void ap_send_error_response(request_rec *r, int recursive_error)
- */
-AP_DECLARE(void) ap_send_error_response(request_rec *r, int recursive_error);
-
-/* Set last modified header line from the lastmod date of the associated file.
- * Also, set content length.
- *
- * May return an error status, typically HTTP_NOT_MODIFIED (that when the
- * permit_cache argument is set to one).
- */
-
-/**
- * Set the content length for this request
- * @param r The current request
- * @param length The new content length
- * @deffunc void ap_set_content_length(request_rec *r, apr_off_t length)
- */
-AP_DECLARE(void) ap_set_content_length(request_rec *r, apr_off_t length);
-
-/**
- * Set the keepalive status for this request
- * @param r The current request
- * @return 1 if keepalive can be set, 0 otherwise
- * @deffunc int ap_set_keepalive(request_rec *r)
- */
-AP_DECLARE(int) ap_set_keepalive(request_rec *r);
-
-/**
- * Return the latest rational time from a request/mtime pair.  Mtime is 
- * returned unless it's in the future, in which case we return the current time.
- * @param r The current request
- * @param mtime The last modified time
- * @return the latest rational time.
- * @deffunc apr_time_t ap_rationalize_mtime(request_rec *r, apr_time_t mtime)
- */
-AP_DECLARE(apr_time_t) ap_rationalize_mtime(request_rec *r, apr_time_t mtime);
-
-/**
- * Build the content-type that should be sent to the client from the
- * content-type specified.  The following rules are followed:
- *    - if type is NULL, type is set to ap_default_type(r)
- *    - if charset adding is disabled, stop processing and return type.
- *    - then, if there are no parameters on type, add the default charset
- *    - return type
- * @param r The current request
- * @return The content-type
- * @deffunc const char *ap_make_content_type(request_rec *r, const char *type);
- */ 
-AP_DECLARE(const char *) ap_make_content_type(request_rec *r, const char *type);
-
-/**
- * Construct an entity tag from the resource information.  If it's a real
- * file, build in some of the file characteristics.
- * @param r The current request
- * @param force_weak Force the entity tag to be weak - it could be modified
- *                   again in as short an interval.
- * @return The entity tag
- * @deffunc char *ap_make_etag(request_rec *r, int force_weak)
- */ 
-AP_DECLARE(char *) ap_make_etag(request_rec *r, int force_weak);
-
-/**
- * Set the E-tag outgoing header
- * @param The current request
- * @deffunc void ap_set_etag(request_rec *r)
- */
-AP_DECLARE(void) ap_set_etag(request_rec *r);
-
-/**
- * Set the last modified time for the file being sent
- * @param r The current request
- * @deffunc void ap_set_last_modified(request_rec *r)
- */
-AP_DECLARE(void) ap_set_last_modified(request_rec *r);
-
-/**
- * Implements condition GET rules for HTTP/1.1 specification.  This function
- * inspects the client headers and determines if the response fulfills 
- * the requirements specified.
- * @param r The current request
- * @return 1 if the response fulfills the condition GET rules, 0 otherwise
- * @deffunc int ap_meets_conditions(request_rec *r)
- */
-AP_DECLARE(int) ap_meets_conditions(request_rec *r);
-
-/* Other ways to send stuff at the client.  All of these keep track
- * of bytes_sent automatically.  This indirection is intended to make
- * it a little more painless to slide things like HTTP-NG packetization
- * underneath the main body of the code later.  In the meantime, it lets
- * us centralize a bit of accounting (bytes_sent).
- *
- * These also return the number of bytes written by the call.
- * They should only be called with a timeout registered, for obvious reaasons.
- * (Ditto the send_header stuff).
- */
-
-/**
- * Send an entire file to the client, using sendfile if supported by the 
- * current platform
- * @param fd The file to send.
- * @param r The current request
- * @param offset Offset into the file to start sending.
- * @param length Amount of data to send
- * @param nbytes Amount of data actually sent
- * @deffunc apr_status_t ap_send_fd(apr_file_t *fd, request_rec *r, apr_off_t offset, apr_size_t length, apr_size_t *nbytes);
- */
-AP_DECLARE(apr_status_t) ap_send_fd(apr_file_t *fd, request_rec *r, apr_off_t offset, 
-                                   apr_size_t length, apr_size_t *nbytes);
-
-#if APR_HAS_MMAP
-/**
- * Send an MMAP'ed file to the client
- * @param mm The MMAP'ed file to send
- * @param r The current request
- * @param offset The offset into the MMAP to start sending
- * @param length The amount of data to send
- * @return The number of bytes sent
- * @deffunc size_t ap_send_mmap(apr_mmap_t *mm, request_rec *r, size_t offset, size_t length)
- */
-AP_DECLARE(size_t) ap_send_mmap(apr_mmap_t *mm, request_rec *r, size_t offset,
-                             size_t length);
-#endif
-
-/* The index of the first bit field that is used to index into a limit
- * bitmask. M_INVALID + 1 to METHOD_NUMBER_LAST.
- */
-#define METHOD_NUMBER_FIRST M_INVALID + 1
-
-/* The max method number. Method numbers are used to shift bitmasks,
- * so this cannot exceed 63, and all bits high is equal to -1, which is a
- * special flag, so the last bit used has index 62.
- */
-#define METHOD_NUMBER_LAST  62
-
-/**
- * Register a new request method, and return the offset that will be
- * associated with that method.
- *
- * @param p        The pool to create registered method numbers from.
- * @param methname The name of the new method to register.
- * @return         Ab int value representing an offset into a bitmask.
- */
-AP_DECLARE(int) ap_method_register(apr_pool_t *p, const char *methname);
-
-/**
- * Initialize the method_registry and allocate memory for it.
- *
- * @param p Pool to allocate memory for the registry from.
- */
-AP_DECLARE(void) ap_method_registry_init(apr_pool_t *p);
-
-/*
- * This is a convenience macro to ease with checking a mask
- * against a method name.
- */
-#define AP_METHOD_CHECK_ALLOWED(mask, methname) \
-    ((mask) & (AP_METHOD_BIT << ap_method_number_of((methname))))
-
-/**
- * Create a new method list with the specified number of preallocated
- * slots for extension methods.
- *
- * @param   p       Pointer to a pool in which the structure should be
- *                  allocated.
- * @param   nelts   Number of preallocated extension slots
- * @return  Pointer to the newly created structure.
- * @deffunc ap_method_list_t ap_make_method_list(apr_pool_t *p, int nelts)
- */
-AP_DECLARE(ap_method_list_t *) ap_make_method_list(apr_pool_t *p, int nelts);
-AP_DECLARE(void) ap_copy_method_list(ap_method_list_t *dest,
-				     ap_method_list_t *src);
-AP_DECLARE_NONSTD(void) ap_method_list_do(int (*comp) (void *urec, const char *mname,
-						       int mnum),
-				          void *rec,
-				          const ap_method_list_t *ml, ...);
-AP_DECLARE(void) ap_method_list_vdo(int (*comp) (void *urec, const char *mname,
-						 int mnum),
-				    void *rec, const ap_method_list_t *ml,
-				    va_list vp);
-/**
- * Search for an HTTP method name in an ap_method_list_t structure, and
- * return true if found.
- *
- * @param   method  String containing the name of the method to check.
- * @param   l       Pointer to a method list, such as cmd->methods_limited.
- * @return  1 if method is in the list, otherwise 0
- * @deffunc int ap_method_in_list(const char *method, ap_method_list_t *l)
- */
-AP_DECLARE(int) ap_method_in_list(ap_method_list_t *l, const char *method);
-
-/**
- * Add an HTTP method name to an ap_method_list_t structure if it isn't
- * already listed.
- *
- * @param   method  String containing the name of the method to check.
- * @param   l       Pointer to a method list, such as cmd->methods_limited.
- * @return  None.
- * @deffunc void ap_method_in_list(ap_method_list_t *l, const char *method)
- */
-AP_DECLARE(void) ap_method_list_add(ap_method_list_t *l, const char *method);
-    
-/**
- * Remove an HTTP method name from an ap_method_list_t structure.
- *
- * @param   l       Pointer to a method list, such as cmd->methods_limited.
- * @param   method  String containing the name of the method to remove.
- * @return  None.
- * @deffunc void ap_method_list_remove(ap_method_list_t *l, const char *method)
- */
-AP_DECLARE(void) ap_method_list_remove(ap_method_list_t *l,
-				       const char *method);
-
-/**
- * Reset a method list to be completely empty.
- *
- * @param   l       Pointer to a method list, such as cmd->methods_limited.
- * @return  None.
- * @deffunc void ap_clear_method_list(ap_method_list_t *l)
- */
-AP_DECLARE(void) ap_clear_method_list(ap_method_list_t *l);
-    
-/* Hmmm... could macrofy these for now, and maybe forever, though the
- * definitions of the macros would get a whole lot hairier.
- */
-
-/**
- * Output one character for this request
- * @param c the character to output
- * @param r the current request
- * @return The number of bytes sent
- * @deffunc int ap_rputc(int c, request_rec *r)
- */
-AP_DECLARE(int) ap_rputc(int c, request_rec *r);
-
-/**
- * Output a string for the current request
- * @param str The string to output
- * @param r The current request
- * @return The number of bytes sent
- * @deffunc int ap_rputs(const char *str, request_rec *r)
- */
-AP_DECLARE(int) ap_rputs(const char *str, request_rec *r);
-
-/**
- * Write a buffer for the current request
- * @param buf The buffer to write
- * @param nbyte The number of bytes to send from the buffer
- * @param r The current request
- * @return The number of bytes sent
- * @deffunc int ap_rwrite(const void *buf, int nbyte, request_rec *r)
- */
-AP_DECLARE(int) ap_rwrite(const void *buf, int nbyte, request_rec *r);
-
-/**
- * Write an unspecified number of strings to the request
- * @param r The current request
- * @param ... The strings to write
- * @return The number of bytes sent
- * @deffunc int ap_rvputs(request_rec *r, ...)
- */
-AP_DECLARE_NONSTD(int) ap_rvputs(request_rec *r,...);
-
-/**
- * Output data to the client in a printf format
- * @param r The current request
- * @param fmt The format string
- * @param vlist The arguments to use to fill out the format string
- * @return The number of bytes sent
- * @deffunc int ap_vrprintf(request_rec *r, const char *fmt, va_list vlist)
- */
-AP_DECLARE(int) ap_vrprintf(request_rec *r, const char *fmt, va_list vlist);
-
-/**
- * Output data to the client in a printf format
- * @param r The current request
- * @param fmt The format string
- * @param ... The arguments to use to fill out the format string
- * @return The number of bytes sent
- * @deffunc int ap_rprintf(request_rec *r, const char *fmt, ...)
- */
-AP_DECLARE_NONSTD(int) ap_rprintf(request_rec *r, const char *fmt,...)
-				__attribute__((format(printf,2,3)));
-/**
- * Flush all of the data for the current request to the client
- * @param r The current request
- * @return The number of bytes sent
- * @deffunc int ap_rflush(request_rec *r)
- */
-AP_DECLARE(int) ap_rflush(request_rec *r);
-
-/**
- * Index used in custom_responses array for a specific error code
- * (only use outside protocol.c is in getting them configured).
- * @param status HTTP status code
- * @return The index of the response
- * @deffunc int ap_index_of_response(int status)
- */
-AP_DECLARE(int) ap_index_of_response(int status);
-
-/** 
- * Return the Status-Line for a given status code (excluding the
- * HTTP-Version field). If an invalid or unknown status code is
- * passed, "500 Internal Server Error" will be returned. 
- * @param status The HTTP status code
- * @return The Status-Line
- * @deffunc const char *ap_get_status_line(int status)
- */
-AP_DECLARE(const char *) ap_get_status_line(int status);
-
-/* Reading a block of data from the client connection (e.g., POST arg) */
-
-/**
- * Setup the client to allow Apache to read the request body.
- * @param r The current request
- * @param read_policy How the server should interpret a chunked 
- *                    transfer-encoding.  One of: <pre>
- *    REQUEST_NO_BODY          Send 413 error if message has any body
- *    REQUEST_CHUNKED_ERROR    Send 411 error if body without Content-Length
- *    REQUEST_CHUNKED_DECHUNK  If chunked, remove the chunks for me.
- * </pre>
- * @return either OK or an error code
- * @deffunc int ap_setup_cleint_block(request_rec *r, int read_policy)
- */
-AP_DECLARE(int) ap_setup_client_block(request_rec *r, int read_policy);
-
-/**
- * Determine if the client has sent any data.  This also sends a 
- * 100 Continue resposne to HTTP/1.1 clients, so modules should not be called
- * until the module is ready to read content.
- * @warning Never call this function more than once.
- * @param r The current request
- * @return 0 if there is no message to read, 1 otherwise
- * @deffunc int ap_should_client_block(request_rec *r)
- */
-AP_DECLARE(int) ap_should_client_block(request_rec *r);
-
-/**
- * Call this in a loop.  It will put data into a buffer and return the length
- * of the input block
- * @param r The current request
- * @param buffer The buffer in which to store the data
- * @param bufsiz The size of the buffer
- * @return Number of bytes inserted into the buffer.  When done reading, 0
- *         if EOF, or -1 if there was an error
- * @deffunc long ap_get_client_block(request_rec *r, char *buffer, apr_size_t bufsiz)
- */
-AP_DECLARE(long) ap_get_client_block(request_rec *r, char *buffer, apr_size_t bufsiz);
-
-/**
- * In HTTP/1.1, any method can have a body.  However, most GET handlers
- * wouldn't know what to do with a request body if they received one.
- * This helper routine tests for and reads any message body in the request,
- * simply discarding whatever it receives.  We need to do this because
- * failing to read the request body would cause it to be interpreted
- * as the next request on a persistent connection.
- * @param r The current request
- * @return error status if request is malformed, OK otherwise 
- * @deffunc int ap_discard_request_body(request_rec *r)
- */
-AP_DECLARE(int) ap_discard_request_body(request_rec *r);
-
-
-/**
- * Setup the output headers so that the client knows how to authenticate
- * itself the next time, if an authentication request failed.  This function
- * works for both basic and digest authentication
- * @param r The current request
- * @deffunc void ap_note_auth_failure(request_rec *r)
- */ 
-AP_DECLARE(void) ap_note_auth_failure(request_rec *r);
-
-/**
- * Setup the output headers so that the client knows how to authenticate
- * itself the next time, if an authentication request failed.  This function
- * works only for basic authentication
- * @param r The current request
- * @deffunc void ap_note_basic_auth_failure(request_rec *r)
- */ 
-AP_DECLARE(void) ap_note_basic_auth_failure(request_rec *r);
-
-/**
- * Setup the output headers so that the client knows how to authenticate
- * itself the next time, if an authentication request failed.  This function
- * works only for digest authentication
- * @param r The current request
- * @deffunc void ap_note_digest_auth_failure(request_rec *r)
- */ 
-AP_DECLARE(void) ap_note_digest_auth_failure(request_rec *r);
-
-/**
- * Get the password from the request headers
- * @param r The current request
- * @param pw The password as set in the headers
- * @return 0 (OK) if it set the 'pw' argument (and assured
- *         a correct value in r->connection->user); otherwise it returns 
- *         an error code, either HTTP_INTERNAL_SERVER_ERROR if things are 
- *         really confused, HTTP_UNAUTHORIZED if no authentication at all 
- *         seemed to be in use, or DECLINED if there was authentication but 
- *         it wasn't Basic (in which case, the caller should presumably 
- *         decline as well).
- * @deffunc int ap_get_basic_auth_pw(request_rec *r, const char **pw)
- */
-AP_DECLARE(int) ap_get_basic_auth_pw(request_rec *r, const char **pw);
-
-/**
- * parse_uri: break apart the uri
- * @warning Side Effects: <pre>
- *    - sets r->args to rest after '?' (or NULL if no '?')
- *    - sets r->uri to request uri (without r->args part)
- *    - sets r->hostname (if not set already) from request (scheme://host:port)
- * </pre>
- * @param r The current request
- * @param uri The uri to break apart
- * @deffunc void ap_parse_uri(request_rec *r, const char *uri)
- */
-AP_CORE_DECLARE(void) ap_parse_uri(request_rec *r, const char *uri);
-
-/**
- * Get the next line of input for the request
- * @param s The buffer into which to read the line
- * @param n The size of the buffer
- * @param r The request
- * @param fold Whether to merge continuation lines
- * @return The length of the line, if successful
- *         n, if the line is too big to fit in the buffer
- *         -1 for miscellaneous errors
- * @deffunc int ap_method_number_of(const char *method)
- */
-AP_DECLARE(int) ap_getline(char *s, int n, request_rec *r, int fold);
-
-/**
- * Get the next line of input for the request
- *
- * Note: on ASCII boxes, ap_rgetline is a macro which simply calls 
- *       ap_rgetline_core to get the line of input.
- * 
- *       on EBCDIC boxes, ap_rgetline is a wrapper function which
- *       translates ASCII protocol lines to the local EBCDIC code page
- *       after getting the line of input.
- *       
- * @param s Pointer to the pointer to the buffer into which the line
- *          should be read; if *s==NULL, a buffer of the necessary size
- *          to hold the data will be allocated from the request pool
- * @param n The size of the buffer
- * @param read The length of the line.
- * @param r The request
- * @param fold Whether to merge continuation lines
- * @return APR_SUCCESS, if successful
- *         APR_ENOSPC, if the line is too big to fit in the buffer
- *         Other errors where appropriate
- */
-#if APR_CHARSET_EBCDIC
-AP_DECLARE(apr_status_t) ap_rgetline(char **s, apr_size_t n, 
-                                     apr_size_t *read,
-                                     request_rec *r, int fold);
-#else /* ASCII box */
-#define ap_rgetline(s, n, read, r, fold) \
-        ap_rgetline_core((s), (n), (read), (r), (fold))
-#endif
-AP_DECLARE(apr_status_t) ap_rgetline_core(char **s, apr_size_t n, 
-                                          apr_size_t *read,
-                                          request_rec *r, int fold);
-/**
- * Get the method number associated with the given string, assumed to
- * contain an HTTP method.  Returns M_INVALID if not recognized.
- * @param method A string containing a valid HTTP method
- * @return The method number
- * @deffunc int ap_method_number_of(const char *method)
- */
-AP_DECLARE(int) ap_method_number_of(const char *method);
-
-/**
- * Get the method name associated with the given internal method
- * number.  Returns NULL if not recognized.
- * @param methnum An integer value corresponding to an internal method number
- * @return The name corresponding to the method number
- * @deffunc const char *ap_method_name_of(int methnum)
- */
-AP_DECLARE(const char *) ap_method_name_of(int methnum);
-
-
-  /* Hooks */
-  /*
-   * post_read_request --- run right after read_request or internal_redirect,
-   *                  and not run during any subrequests.
-   */
-/**
- * This hook allows modules to affect the request immediately after the request
- * has been read, and before any other phases have been processes.  This allows
- * modules to make decisions based upon the input header fields
- * @param r The current request
- * @return OK or DECLINED
- * @deffunc ap_run_post_read_request(request_rec *r)
- */
-AP_DECLARE_HOOK(int,post_read_request,(request_rec *r))
-
-/**
- * This hook allows modules to perform any module-specific logging activities
- * over and above the normal server things.
- * @param r The current request
- * @return OK, DECLINED, or HTTP_...
- * @deffunc int ap_run_log_transaction(request_rec *r)
- */
-AP_DECLARE_HOOK(int,log_transaction,(request_rec *r))
-
-/**
- * This hook allows modules to retrieve the http method from a request.  This
- * allows Apache modules to easily extend the methods that Apache understands
- * @param r The current request
- * @return The http method from the request
- * @deffunc const char *ap_run_http_method(const request_rec *r)
- */
-AP_DECLARE_HOOK(const char *,http_method,(const request_rec *r))
-
-/**
- * Return the default port from the current request
- * @param r The current request
- * @return The current port
- * @deffunc apr_port_t ap_run_default_port(const request_rec *r)
- */
-AP_DECLARE_HOOK(apr_port_t,default_port,(const request_rec *r))
-
-typedef struct ap_bucket_error ap_bucket_error;
-
-/**
- * A bucket referring to an HTTP error
- * This bucket can be passed down the filter stack to indicate that an
- * HTTP error occurred while running a filter.  In order for this bucket
- * to be used successfully, it MUST be sent as the first bucket in the
- * first brigade to be sent from a given filter.
- */
-struct ap_bucket_error {
-    /** The error code */
-    int status;
-    /** The error string */
-    const char    *data;
-};
-
-AP_DECLARE_DATA extern const apr_bucket_type_t ap_bucket_type_error;
-
-/**
- * Make the bucket passed in an error bucket
- * @param b The bucket to make into an error bucket
- * @param error The HTTP error code to put in the bucket. 
- * @param buf An optional error string to put in the bucket.
- * @param p A pool to allocate out of.
- * @return The new bucket, or NULL if allocation failed
- * @deffunc apr_bucket *ap_bucket_error_make(apr_bucket *b, int error, const char *buf, apr_pool_t *p)
- */
-AP_DECLARE(apr_bucket *) ap_bucket_error_make(apr_bucket *b, int error,
-                const char *buf, apr_pool_t *p);
-
-/**
- * Create a bucket referring to an HTTP error.
- * @param error The HTTP error code to put in the bucket. 
- * @param buf An optional error string to put in the bucket.
- * @param p A pool to allocate out of.
- * @return The new bucket, or NULL if allocation failed
- * @deffunc apr_bucket *ap_bucket_error_create(int error, const char *buf, apr_pool_t *p)
- */
-AP_DECLARE(apr_bucket *) ap_bucket_error_create(int error,
-                const char *buf, apr_pool_t *p);
-
-AP_DECLARE_NONSTD(apr_status_t) ap_byterange_filter(ap_filter_t *f, apr_bucket_brigade *b);
-AP_DECLARE_NONSTD(apr_status_t) ap_http_header_filter(ap_filter_t *f, apr_bucket_brigade *b);
-AP_DECLARE_NONSTD(apr_status_t) ap_content_length_filter(ap_filter_t *,
-                                                              apr_bucket_brigade *);
-AP_DECLARE_NONSTD(apr_status_t) ap_old_write_filter(ap_filter_t *f, apr_bucket_brigade *b);
-
-/*
- * Setting up the protocol fields for subsidiary requests...
- * Also, a wrapup function to keep the internal accounting straight.
- */
-void ap_set_sub_req_protocol(request_rec *rnew, const request_rec *r);
-void ap_finalize_sub_req_protocol(request_rec *sub_r);
-                                                                                
-#ifdef __cplusplus
-}
-#endif
-
-#endif	/* !APACHE_HTTP_PROTOCOL_H */
diff --git a/include/http_request.h b/include/http_request.h
deleted file mode 100644
index 571362a..0000000
--- a/include/http_request.h
+++ /dev/null
@@ -1,403 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-#ifndef APACHE_HTTP_REQUEST_H
-#define APACHE_HTTP_REQUEST_H
-
-#include "apr_hooks.h"
-#include "util_filter.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define AP_SUBREQ_NO_ARGS 0
-#define AP_SUBREQ_MERGE_ARGS 1
-
-/**
- * @file http_request.h
- * @brief Apache Request library
- */
-
-/* http_request.c is the code which handles the main line of request
- * processing, once a request has been read in (finding the right per-
- * directory configuration, building it if necessary, and calling all
- * the module dispatch functions in the right order).
- *
- * The pieces here which are public to the modules, allow them to learn
- * how the server would handle some other file or URI, or perhaps even
- * direct the server to serve that other file instead of the one the
- * client requested directly.
- *
- * There are two ways to do that.  The first is the sub_request mechanism,
- * which handles looking up files and URIs as adjuncts to some other
- * request (e.g., directory entries for multiviews and directory listings);
- * the lookup functions stop short of actually running the request, but
- * (e.g., for includes), a module may call for the request to be run
- * by calling run_sub_req.  The space allocated to create sub_reqs can be
- * reclaimed by calling destroy_sub_req --- be sure to copy anything you care
- * about which was allocated in its apr_pool_t elsewhere before doing this.
- */
-
-/**
- * An internal handler used by the ap_process_request, all sub request mechanisms
- * and the redirect mechanism.
- * @param r The request, subrequest or internal redirect to pre-process
- * @return The return code for the request
- */
-AP_DECLARE(int) ap_process_request_internal(request_rec *r);
-
-/**
- * Create a sub request from the given URI.  This sub request can be
- * inspected to find information about the requested URI
- * @param new_file The URI to lookup
- * @param r The current request
- * @param next_filter The first filter the sub_request should use.  If this is
- *                    NULL, it defaults to the first filter for the main request
- * @return The new request record
- * @deffunc request_rec * ap_sub_req_lookup_uri(const char *new_file, const request_rec *r)
- */
-AP_DECLARE(request_rec *) ap_sub_req_lookup_uri(const char *new_file,
-                                                const request_rec *r,
-                                                ap_filter_t *next_filter);
-
-/**
- * Create a sub request for the given file.  This sub request can be
- * inspected to find information about the requested file
- * @param new_file The URI to lookup
- * @param r The current request
- * @param next_filter The first filter the sub_request should use.  If this is
- *                    NULL, it defaults to the first filter for the main request
- * @return The new request record
- * @deffunc request_rec * ap_sub_req_lookup_file(const char *new_file, const request_rec *r)
- */
-AP_DECLARE(request_rec *) ap_sub_req_lookup_file(const char *new_file,
-                                              const request_rec *r,
-                                              ap_filter_t *next_filter);
-/**
- * Create a sub request for the given apr_dir_read result.  This sub request 
- * can be inspected to find information about the requested file
- * @param finfo The apr_dir_read result to lookup
- * @param r The current request
- * @param subtype What type of subrequest to perform, one of;
- * <PRE>
- *      AP_SUBREQ_NO_ARGS     ignore r->args and r->path_info
- *      AP_SUBREQ_MERGE_ARGS  merge r->args and r->path_info
- * </PRE>
- * @param next_filter The first filter the sub_request should use.  If this is
- *                    NULL, it defaults to the first filter for the main request
- * @return The new request record
- * @deffunc request_rec * ap_sub_req_lookup_dirent(apr_finfo_t *finfo, int subtype, const request_rec *r)
- * @tip The apr_dir_read flags value APR_FINFO_MIN|APR_FINFO_NAME flag is the 
- * minimum recommended query if the results will be passed to apr_dir_read.
- * The file info passed must include the name, and must have the same relative
- * directory as the current request.
- */
-AP_DECLARE(request_rec *) ap_sub_req_lookup_dirent(const apr_finfo_t *finfo,
-                                                   const request_rec *r,
-                                                   int subtype,
-                                                   ap_filter_t *next_filter);
-/**
- * Create a sub request for the given URI using a specific method.  This
- * sub request can be inspected to find information about the requested URI
- * @param method The method to use in the new sub request
- * @param new_file The URI to lookup
- * @param r The current request
- * @param next_filter The first filter the sub_request should use.  If this is
- *                    NULL, it defaults to the first filter for the main request
- * @return The new request record
- * @deffunc request_rec * ap_sub_req_method_uri(const char *method, const char *new_file, const request_rec *r)
- */
-AP_DECLARE(request_rec *) ap_sub_req_method_uri(const char *method,
-                                                const char *new_file,
-                                                const request_rec *r,
-                                                ap_filter_t *next_filter);
-/**
- * An output filter to strip EOS buckets from sub-requests.  This always
- * has to be inserted at the end of a sub-requests filter stack.
- * @param f The current filter
- * @param bb The brigade to filter
- * @deffunc apr_status_t ap_sub_req_output_filter(ap_filter_t *f, apr_bucket_brigade *bb)
- */
-AP_CORE_DECLARE_NONSTD(apr_status_t) ap_sub_req_output_filter(ap_filter_t *f,
-                                                        apr_bucket_brigade *bb);
-
-/**
- * Run the handler for the sub request
- * @param r The sub request to run
- * @return The return code for the sub request
- * @deffunc int ap_run_sub_req(request_rec *r)
- */
-AP_DECLARE(int) ap_run_sub_req(request_rec *r);
-
-/**
- * Free the memory associated with a sub request
- * @param r The sub request to finish
- * @deffunc void ap_destroy_sub_req(request_rec *r)
- */
-AP_DECLARE(void) ap_destroy_sub_req(request_rec *r);
-
-/*
- * Then there's the case that you want some other request to be served
- * as the top-level request INSTEAD of what the client requested directly.
- * If so, call this from a handler, and then immediately return OK.
- */
-
-/**
- * Redirect the current request to some other uri
- * @param new_uri The URI to replace the current request with
- * @param r The current request
- * @deffunc void ap_internal_redirect(const char *new_uri, request_rec *r)
- */
-AP_DECLARE(void) ap_internal_redirect(const char *new_uri, request_rec *r);
-
-/**
- * This function is designed for things like actions or CGI scripts, when
- * using AddHandler, and you want to preserve the content type across
- * an internal redirect.
- * @param new_uri The URI to replace the current request with.
- * @param r The current request
- * @deffunc void ap_internal_redirect_handler(const char *new_uri, request_rec *r)
- */
-AP_DECLARE(void) ap_internal_redirect_handler(const char *new_uri, request_rec *r);
-
-/**
- * Redirect the current request to a sub_req, merging the pools
- * @param sub_req A subrequest created from this request
- * @param r The current request
- * @deffunc void ap_internal_fast_redirect(request_rec *sub_req, request_rec *r)
- * @tip the sub_req's pool will be merged into r's pool, be very careful
- * not to destroy this subrequest, it will be destroyed with the main request!
- */
-AP_DECLARE(void) ap_internal_fast_redirect(request_rec *sub_req, request_rec *r);
-
-/**
- * Can be used within any handler to determine if any authentication
- * is required for the current request
- * @param r The current request
- * @return 1 if authentication is required, 0 otherwise
- * @deffunc int ap_some_auth_required(request_rec *r)
- */
-AP_DECLARE(int) ap_some_auth_required(request_rec *r);
- 
-/**
- * Determine if the current request is the main request or a sub requests
- * @param r The current request
- * @retrn 1 if this is a main request, 0 otherwise
- * @deffunc int ap_is_initial_req(request_rec *r)
- */
-AP_DECLARE(int) ap_is_initial_req(request_rec *r);
-
-/**
- * Function to set the r->mtime field to the specified value if it's later
- * than what's already there.
- * @param r The current request
- * @param dependency_time Time to set the mtime to
- * @deffunc void ap_update_mtime(request_rec *r, apr_time_t dependency_mtime)
- */
-AP_DECLARE(void) ap_update_mtime(request_rec *r, apr_time_t dependency_mtime);
-
-/**
- * Add one or more methods to the list permitted to access the resource.
- * Usually executed by the content handler before the response header is
- * sent, but sometimes invoked at an earlier phase if a module knows it
- * can set the list authoritatively.  Note that the methods are ADDED
- * to any already permitted unless the reset flag is non-zero.  The
- * list is used to generate the Allow response header field when it
- * is needed.
- * @param   r     The pointer to the request identifying the resource.
- * @param   reset Boolean flag indicating whether this list should
- *                completely replace any current settings.
- * @param   ...   A NULL-terminated list of strings, each identifying a
- *                method name to add.
- * @return  None.
- * @deffunc void ap_allow_methods(request_rec *r, int reset, ...)
- */
-AP_DECLARE(void) ap_allow_methods(request_rec *r, int reset, ...);
-
-/**
- * Add one or more methods to the list permitted to access the resource.
- * Usually executed by the content handler before the response header is
- * sent, but sometimes invoked at an earlier phase if a module knows it
- * can set the list authoritatively.  Note that the methods are ADDED
- * to any already permitted unless the reset flag is non-zero.  The
- * list is used to generate the Allow response header field when it
- * is needed.
- * @param   r     The pointer to the request identifying the resource.
- * @param   reset Boolean flag indicating whether this list should
- *                completely replace any current settings.
- * @param   ...   A list of method identifiers, from the "M_" series
- *                defined in httpd.h, terminated with a value of -1
- *                (e.g., "M_GET, M_POST, M_OPTIONS, -1")
- * @return  None.
- * @deffunc void ap_allow_standard_methods(request_rec *r, int reset, ...)
- */
-AP_DECLARE(void) ap_allow_standard_methods(request_rec *r, int reset, ...);
-
-#define MERGE_ALLOW 0
-#define REPLACE_ALLOW 1
-
-#ifdef CORE_PRIVATE
-/* Function called by main.c to handle first-level request */
-void ap_process_request(request_rec *);
-/**
- * Kill the current request
- * @param type Why the request is dieing
- * @param r The current request
- * @deffunc void ap_die(int type, request_rec *r)
- */
-AP_DECLARE(void) ap_die(int type, request_rec *r);
-#endif
-
-/* Hooks */
-
-/**
- * Gives modules a chance to create their request_config entry when the
- * request is created.
- * @param r The current request
- * @ingroup hooks
- */
-AP_DECLARE_HOOK(int,create_request,(request_rec *r))
-
-/**
- * This hook allow modules an opportunity to translate the URI into an
- * actual filename.  If no modules do anything special, the server's default
- * rules will be followed.
- * @param r The current request
- * @return OK, DECLINED, or HTTP_...
- * @ingroup hooks
- */
-AP_DECLARE_HOOK(int,translate_name,(request_rec *r))
-
-/**
- * This hook allow modules to set the per_dir_config based on their own
- * context (such as <Proxy > sections) and responds to contextless requests 
- * such as TRACE that need no security or filesystem mapping.
- * based on the filesystem.
- * @param r The current request
- * @return DONE (or HTTP_) if this contextless request was just fulfilled 
- * (such as TRACE), OK if this is not a file, and DECLINED if this is a file.
- * The core map_to_storage (HOOK_RUN_LAST) will directory_walk and file_walk
- * the r->filename.
- * 
- * @ingroup hooks
- */
-AP_DECLARE_HOOK(int,map_to_storage,(request_rec *r))
-
-/**
- * This hook allows modules to check the authentication information sent with
- * the request.
- * @param r The current request
- * @return OK, DECLINED, or HTTP_...
- * @ingroup hooks
- */
-AP_DECLARE_HOOK(int,check_user_id,(request_rec *r))
-
-/**
- * Allows modules to perform module-specific fixing of header fields.  This
- * is invoked just before any content-handler
- * @param r The current request
- * @return OK, DECLINED, or HTTP_...
- * @ingroup hooks
- */
-AP_DECLARE_HOOK(int,fixups,(request_rec *r))
- 
-/**
- * This routine is called to determine and/or set the various document type
- * information bits, like Content-type (via r->content_type), language, et
- * cetera.
- * @param r the current request
- * @return OK, DECLINED, or HTTP_...
- * @ingroup hooks
- */
-AP_DECLARE_HOOK(int,type_checker,(request_rec *r))
-
-/**
- * This routine is called to check for any module-specific restrictions placed
- * upon the requested resource.
- * @param r the current request
- * @return OK, DECLINED, or HTTP_...
- * @ingroup hooks
- */
-AP_DECLARE_HOOK(int,access_checker,(request_rec *r))
-
-/**
- * This routine is called to check to see if the resource being requested
- * requires authorisation.
- * @param r the current request
- * @return OK, DECLINED, or HTTP_...
- * @ingroup hooks
- */
-AP_DECLARE_HOOK(int,auth_checker,(request_rec *r))
-
-/**
- * This hook allows modules to insert filters for the current request
- * @param r the current request
- * @ingroup hooks
- */
-AP_DECLARE_HOOK(void,insert_filter,(request_rec *r))
-
-AP_DECLARE(int) ap_location_walk(request_rec *r);
-AP_DECLARE(int) ap_directory_walk(request_rec *r);
-AP_DECLARE(int) ap_file_walk(request_rec *r);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif	/* !APACHE_HTTP_REQUEST_H */
diff --git a/include/http_vhost.h b/include/http_vhost.h
deleted file mode 100644
index eaa0bc0..0000000
--- a/include/http_vhost.h
+++ /dev/null
@@ -1,123 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-#ifndef APACHE_HTTP_VHOST_H
-#define APACHE_HTTP_VHOST_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * @package Virtual Host package
- */
-
-/**
- * called before any config is read
- * @param p Pool to allocate out of
- */
-AP_DECLARE(void) ap_init_vhost_config(apr_pool_t *p);
-
-/**
- * called after the config has been read to compile the tables needed to do 
- * the run-time vhost lookups
- * @param p The pool to allocate out of
- * @param main_server The start of the virtual host list
- * @deffunc ap_fini_vhost_config(apr_pool_t *p, server_rec *main_server)
- */
-AP_DECLARE(void) ap_fini_vhost_config(apr_pool_t *p, server_rec *main_server);
-
-/**
- * handle addresses in <VirtualHost> statement
- * @param p The pool to allocate out of
- * @param hostname The hostname in the VirtualHost statement
- * @param s The list of Virtual Hosts.
- */
-const char *ap_parse_vhost_addrs(apr_pool_t *p, const char *hostname, server_rec *s);
-
-/* handle NameVirtualHost directive */
-const char *ap_set_name_virtual_host (cmd_parms *cmd, void *dummy,
-				      const char *arg);
-
-/**
- * given an ip address only, give our best guess as to what vhost it is 
- * @param conn The current connection
- */
-AP_DECLARE(void) ap_update_vhost_given_ip(conn_rec *conn);
-
-/**
- * ap_update_vhost_given_ip is never enough, and this is always called after 
- * the headers have been read.  It may change r->server.
- * @param r The current request
- */
-AP_DECLARE(void) ap_update_vhost_from_headers(request_rec *r);
-
-/**
- * Match the host in the header with the hostname of the server for this
- * request.
- * @param r The current request
- * @param host The hostname in the headers
- * @param port The port from the headers
- * @return return 1 if the host:port matches any of the aliases of r->server,
- * return 0 otherwise
- * @deffunc int ap_matches_request_vhost(request_rec *r, const char *host, apr_port_t port)
- */
-AP_DECLARE(int) ap_matches_request_vhost(request_rec *r, const char *host,
-    apr_port_t port);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif	/* !APACHE_HTTP_VHOST_H */
diff --git a/include/httpd.h b/include/httpd.h
deleted file mode 100644
index a1b6962..0000000
--- a/include/httpd.h
+++ /dev/null
@@ -1,1717 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-#ifndef APACHE_HTTPD_H
-#define APACHE_HTTPD_H
-
-/**
- * @file httpd.h
- * @brief HTTP Daemon routines
- */
-
-/* XXX - We need to push more stuff to other .h files, or even .c files, to
- * make this file smaller
- */
-
-/* Headers in which EVERYONE has an interest... */
-#include "ap_config.h"
-#include "ap_mmn.h"
-
-#include "ap_release.h"
-#include "os.h"
-
-#include "apr_general.h"
-#include "apr_tables.h"
-#include "apr_pools.h"
-#include "apr_time.h"
-#include "apr_network_io.h"
-#include "apr_buckets.h"
-
-#include "pcreposix.h"
-
-/* Note: util_uri.h is also included, see below */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#ifdef CORE_PRIVATE
-
-/* ----------------------------- config dir ------------------------------ */
-
-/* Define this to be the default server home dir. Most things later in this
- * file with a relative pathname will have this added.
- */
-#ifndef HTTPD_ROOT
-#ifdef OS2
-/* Set default for OS/2 file system */
-#define HTTPD_ROOT "/os2httpd"
-#elif defined(WIN32)
-/* Set default for Windows file system */
-#define HTTPD_ROOT "/apache"
-#elif defined (BEOS)
-/* Set the default for BeOS */
-#define HTTPD_ROOT "/boot/home/apache"
-#elif defined (NETWARE)
-/* Set the default for NetWare */
-#define HTTPD_ROOT "/apache"
-#else
-#define HTTPD_ROOT "/usr/local/apache"
-#endif
-#endif /* HTTPD_ROOT */
-
-/* 
- * --------- You shouldn't have to edit anything below this line ----------
- *
- * Any modifications to any defaults not defined above should be done in the 
- * respective configuration file. 
- *
- */
-
-/* Default location of documents.  Can be overridden by the DocumentRoot
- * directive.
- */
-#ifndef DOCUMENT_LOCATION
-#ifdef OS2
-/* Set default for OS/2 file system */
-#define DOCUMENT_LOCATION  HTTPD_ROOT "/docs"
-#else
-#define DOCUMENT_LOCATION  HTTPD_ROOT "/htdocs"
-#endif
-#endif /* DOCUMENT_LOCATION */
-
-/* Maximum number of dynamically loaded modules */
-#ifndef DYNAMIC_MODULE_LIMIT
-#define DYNAMIC_MODULE_LIMIT 64
-#endif
-
-/* Default administrator's address */
-#define DEFAULT_ADMIN "[no address given]"
-
-/* The name of the log files */
-#ifndef DEFAULT_ERRORLOG
-#if defined(OS2) || defined(WIN32)
-#define DEFAULT_ERRORLOG "logs/error.log"
-#else
-#define DEFAULT_ERRORLOG "logs/error_log"
-#endif
-#endif /* DEFAULT_ERRORLOG */
-
-/* Define this to be what your per-directory security files are called */
-#ifndef DEFAULT_ACCESS_FNAME
-#ifdef OS2
-/* Set default for OS/2 file system */
-#define DEFAULT_ACCESS_FNAME "htaccess"
-#else
-#define DEFAULT_ACCESS_FNAME ".htaccess"
-#endif
-#endif /* DEFAULT_ACCESS_FNAME */
-
-/* The name of the server config file */
-#ifndef SERVER_CONFIG_FILE
-#define SERVER_CONFIG_FILE "conf/httpd.conf"
-#endif
-
-/* Whether we should enable rfc1413 identity checking */
-#ifndef DEFAULT_RFC1413
-#define DEFAULT_RFC1413 0
-#endif
-
-/* The default path for CGI scripts if none is currently set */
-#ifndef DEFAULT_PATH
-#define DEFAULT_PATH "/bin:/usr/bin:/usr/ucb:/usr/bsd:/usr/local/bin"
-#endif
-
-/* The path to the suExec wrapper, can be overridden in Configuration */
-#ifndef SUEXEC_BIN
-#define SUEXEC_BIN  HTTPD_ROOT "/bin/suexec"
-#endif
-
-/* The timeout for waiting for messages */
-#ifndef DEFAULT_TIMEOUT
-#define DEFAULT_TIMEOUT 300 
-#endif
-
-/* The timeout for waiting for keepalive timeout until next request */
-#ifndef DEFAULT_KEEPALIVE_TIMEOUT
-#define DEFAULT_KEEPALIVE_TIMEOUT 15
-#endif
-
-/* The number of requests to entertain per connection */
-#ifndef DEFAULT_KEEPALIVE
-#define DEFAULT_KEEPALIVE 100
-#endif
-
-/* Limits on the size of various request items.  These limits primarily
- * exist to prevent simple denial-of-service attacks on a server based
- * on misuse of the protocol.  The recommended values will depend on the
- * nature of the server resources -- CGI scripts and database backends
- * might require large values, but most servers could get by with much
- * smaller limits than we use below.  The request message body size can
- * be limited by the per-dir config directive LimitRequestBody.
- *
- * Internal buffer sizes are two bytes more than the DEFAULT_LIMIT_REQUEST_LINE
- * and DEFAULT_LIMIT_REQUEST_FIELDSIZE below, which explains the 8190.
- * These two limits can be lowered (but not raised) by the server config
- * directives LimitRequestLine and LimitRequestFieldsize, respectively.
- *
- * DEFAULT_LIMIT_REQUEST_FIELDS can be modified or disabled (set = 0) by
- * the server config directive LimitRequestFields.
- */
-#ifndef DEFAULT_LIMIT_REQUEST_LINE
-#define DEFAULT_LIMIT_REQUEST_LINE 8190
-#endif /* default limit on bytes in Request-Line (Method+URI+HTTP-version) */
-#ifndef DEFAULT_LIMIT_REQUEST_FIELDSIZE
-#define DEFAULT_LIMIT_REQUEST_FIELDSIZE 8190
-#endif /* default limit on bytes in any one header field  */
-#ifndef DEFAULT_LIMIT_REQUEST_FIELDS
-#define DEFAULT_LIMIT_REQUEST_FIELDS 100
-#endif /* default limit on number of request header fields */
-
-
-/**
- * The default default character set name to add if AddDefaultCharset is
- * enabled.  Overridden with AddDefaultCharsetName.
- */
-#define DEFAULT_ADD_DEFAULT_CHARSET_NAME "iso-8859-1"
-
-#endif /* CORE_PRIVATE */
-
-/** default HTTP Server protocol */
-#define AP_SERVER_PROTOCOL "HTTP/1.1"
-
-
-/* ------------------ stuff that modules are allowed to look at ----------- */
-
-/** Define this to be what your HTML directory content files are called */
-#ifndef AP_DEFAULT_INDEX
-#define AP_DEFAULT_INDEX "index.html"
-#endif
-
-
-/** 
- * Define this to be what type you'd like returned for files with unknown 
- * suffixes.  
- * @warning MUST be all lower case. 
- */
-#ifndef DEFAULT_CONTENT_TYPE
-#define DEFAULT_CONTENT_TYPE "text/plain"
-#endif
-
-/** The name of the MIME types file */
-#ifndef AP_TYPES_CONFIG_FILE
-#define AP_TYPES_CONFIG_FILE "conf/mime.types"
-#endif
-
-/*
- * Define the HTML doctype strings centrally.
- */
-/** HTML 2.0 Doctype */
-#define DOCTYPE_HTML_2_0  "<!DOCTYPE HTML PUBLIC \"-//IETF//" \
-                          "DTD HTML 2.0//EN\">\n"
-/** HTML 3.2 Doctype */
-#define DOCTYPE_HTML_3_2  "<!DOCTYPE HTML PUBLIC \"-//W3C//" \
-                          "DTD HTML 3.2 Final//EN\">\n"
-/** HTML 4.0 Strict Doctype */
-#define DOCTYPE_HTML_4_0S "<!DOCTYPE HTML PUBLIC \"-//W3C//" \
-                          "DTD HTML 4.0//EN\"\n" \
-                          "\"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"
-/** HTML 4.0 Transitional Doctype */
-#define DOCTYPE_HTML_4_0T "<!DOCTYPE HTML PUBLIC \"-//W3C//" \
-                          "DTD HTML 4.0 Transitional//EN\"\n" \
-                          "\"http://www.w3.org/TR/REC-html40/loose.dtd\">\n"
-/** HTML 4.0 Frameset Doctype */
-#define DOCTYPE_HTML_4_0F "<!DOCTYPE HTML PUBLIC \"-//W3C//" \
-                          "DTD HTML 4.0 Frameset//EN\"\n" \
-                          "\"http://www.w3.org/TR/REC-html40/frameset.dtd\">\n"
-
-/** Internal representation for a HTTP protocol number, e.g., HTTP/1.1 */
-
-#define HTTP_VERSION(major,minor) (1000*(major)+(minor))
-/** Major part of HTTP protocol */
-#define HTTP_VERSION_MAJOR(number) ((number)/1000)
-/** Minor part of HTTP protocol */
-#define HTTP_VERSION_MINOR(number) ((number)%1000)
-
-/* -------------- Port number for server running standalone --------------- */
-
-/** default HTTP Port */
-#define DEFAULT_HTTP_PORT	80
-/** default HTTPS Port */
-#define DEFAULT_HTTPS_PORT	443
-/**
- * Check whether @a port is the default port for the request @a r.
- * @param port The port number
- * @param r The request
- * @see #ap_default_port
- */
-#define ap_is_default_port(port,r)	((port) == ap_default_port(r))
-/**
- * Get the default port for a request (which depends on the scheme).
- * @param r The request
- */
-#define ap_default_port(r)	ap_run_default_port(r)
-/**
- * Get the scheme for a request.
- * @param r The request
- * @bug This should be called ap_http_scheme!
- */
-#define ap_http_method(r)	ap_run_http_method(r)
-
-/** The default string lengths */
-#define MAX_STRING_LEN HUGE_STRING_LEN
-#define HUGE_STRING_LEN 8192
-
-/** The size of the server's internal read-write buffers */
-#define AP_IOBUFSIZE 8192
-
-/**
- * APR_HAS_LARGE_FILES introduces the problem of spliting sendfile into 
- * mutiple buckets, no greater than MAX(apr_size_t), and more granular 
- * than that in case the brigade code/filters attempt to read it directly.
- * ### 16mb is an invention, no idea if it is reasonable.
- */
-#define AP_MAX_SENDFILE 16777216  /* 2^24 */
-
-/**
- * Special Apache error codes. These are basically used
- *  in http_main.c so we can keep track of various errors.
- *        
- */
-/** a normal exit */
-#define APEXIT_OK		0x0
-/** A fatal error arising during the server's init sequence */
-#define APEXIT_INIT		0x2
-/**  The child died during its init sequence */
-#define APEXIT_CHILDINIT	0x3
-/**  
- *   The child exited due to a resource shortage.
- *   The parent should limit the rate of forking until
- *   the situation is resolved.
- */
-#define APEXIT_CHILDSICK        0x7
-/** 
- *     A fatal error, resulting in the whole server aborting.
- *     If a child exits with this error, the parent process
- *     considers this a server-wide fatal error and aborts.
- */
-#define APEXIT_CHILDFATAL	0xf
-
-#ifndef AP_DECLARE
-/**
- * Stuff marked #AP_DECLARE is part of the API, and intended for use
- * by modules. Its purpose is to allow us to add attributes that
- * particular platforms or compilers require to every exported function.
- */
-# define AP_DECLARE(type)    type
-#endif
-
-#ifndef AP_DECLARE_NONSTD
-/**
- * Stuff marked #AP_DECLARE_NONSTD is part of the API, and intended for
- * use by modules.  The difference between #AP_DECLARE and
- * #AP_DECLARE_NONSTD is that the latter is required for any functions
- * which use varargs or are used via indirect function call.  This
- * is to accomodate the two calling conventions in windows dlls.
- */
-# define AP_DECLARE_NONSTD(type)    type
-#endif
-#ifndef AP_DECLARE_DATA
-# define AP_DECLARE_DATA
-#endif
-
-#ifndef AP_MODULE_DECLARE
-# define AP_MODULE_DECLARE(type)    type
-#endif
-#ifndef AP_MODULE_DECLARE_NONSTD
-# define AP_MODULE_DECLARE_NONSTD(type)  type
-#endif
-#ifndef AP_MODULE_DECLARE_DATA
-# define AP_MODULE_DECLARE_DATA
-#endif
-
-/**
- * @internal
- * modules should not used functions marked AP_CORE_DECLARE
- */
-#ifndef AP_CORE_DECLARE
-# define AP_CORE_DECLARE	AP_DECLARE
-#endif
-/**
- * @internal
- * modules should not used functions marked AP_CORE_DECLARE_NONSTD
- */
-
-#ifndef AP_CORE_DECLARE_NONSTD
-# define AP_CORE_DECLARE_NONSTD	AP_DECLARE_NONSTD
-#endif
-
-/**
- * Get the server version string
- * @return The server version string
- */
-AP_DECLARE(const char *) ap_get_server_version(void);
-
-/**
- * Add a component to the version string
- * @param pconf The pool to allocate the component from
- * @param component The string to add
- */
-AP_DECLARE(void) ap_add_version_component(apr_pool_t *pconf, const char *component);
-
-/**
- * Get the date a time that the server was built
- * @return The server build time string
- */
-AP_DECLARE(const char *) ap_get_server_built(void);
-
-#define DECLINED -1		/**< Module declines to handle */
-#define DONE -2			/**< Module has served the response completely 
-				 *  - it's safe to die() with no more output
-				 */
-#define OK 0			/**< Module has handled this stage. */
-
-
-/**
- * @defgroup HTTP_Status HTTP Status Codes
- * @{
- */
-/**
- * The size of the static array in http_protocol.c for storing
- * all of the potential response status-lines (a sparse table).
- * A future version should dynamically generate the apr_table_t at startup.
- */
-#define RESPONSE_CODES 55
-
-#define HTTP_CONTINUE                      100
-#define HTTP_SWITCHING_PROTOCOLS           101
-#define HTTP_PROCESSING                    102
-#define HTTP_OK                            200
-#define HTTP_CREATED                       201
-#define HTTP_ACCEPTED                      202
-#define HTTP_NON_AUTHORITATIVE             203
-#define HTTP_NO_CONTENT                    204
-#define HTTP_RESET_CONTENT                 205
-#define HTTP_PARTIAL_CONTENT               206
-#define HTTP_MULTI_STATUS                  207
-#define HTTP_MULTIPLE_CHOICES              300
-#define HTTP_MOVED_PERMANENTLY             301
-#define HTTP_MOVED_TEMPORARILY             302
-#define HTTP_SEE_OTHER                     303
-#define HTTP_NOT_MODIFIED                  304
-#define HTTP_USE_PROXY                     305
-#define HTTP_TEMPORARY_REDIRECT            307
-#define HTTP_BAD_REQUEST                   400
-#define HTTP_UNAUTHORIZED                  401
-#define HTTP_PAYMENT_REQUIRED              402
-#define HTTP_FORBIDDEN                     403
-#define HTTP_NOT_FOUND                     404
-#define HTTP_METHOD_NOT_ALLOWED            405
-#define HTTP_NOT_ACCEPTABLE                406
-#define HTTP_PROXY_AUTHENTICATION_REQUIRED 407
-#define HTTP_REQUEST_TIME_OUT              408
-#define HTTP_CONFLICT                      409
-#define HTTP_GONE                          410
-#define HTTP_LENGTH_REQUIRED               411
-#define HTTP_PRECONDITION_FAILED           412
-#define HTTP_REQUEST_ENTITY_TOO_LARGE      413
-#define HTTP_REQUEST_URI_TOO_LARGE         414
-#define HTTP_UNSUPPORTED_MEDIA_TYPE        415
-#define HTTP_RANGE_NOT_SATISFIABLE         416
-#define HTTP_EXPECTATION_FAILED            417
-#define HTTP_UNPROCESSABLE_ENTITY          422
-#define HTTP_LOCKED                        423
-#define HTTP_FAILED_DEPENDENCY             424
-#define HTTP_INTERNAL_SERVER_ERROR         500
-#define HTTP_NOT_IMPLEMENTED               501
-#define HTTP_BAD_GATEWAY                   502
-#define HTTP_SERVICE_UNAVAILABLE           503
-#define HTTP_GATEWAY_TIME_OUT              504
-#define HTTP_VERSION_NOT_SUPPORTED         505
-#define HTTP_VARIANT_ALSO_VARIES           506
-#define HTTP_INSUFFICIENT_STORAGE          507
-#define HTTP_NOT_EXTENDED                  510
-
-/** is the status code informational */
-#define ap_is_HTTP_INFO(x)         (((x) >= 100)&&((x) < 200))
-/** is the status code OK ?*/
-#define ap_is_HTTP_SUCCESS(x)      (((x) >= 200)&&((x) < 300))
-/** is the status code a redirect */
-#define ap_is_HTTP_REDIRECT(x)     (((x) >= 300)&&((x) < 400))
-/** is the status code a error (client or server) */
-#define ap_is_HTTP_ERROR(x)        (((x) >= 400)&&((x) < 600))
-/** is the status code a client error  */
-#define ap_is_HTTP_CLIENT_ERROR(x) (((x) >= 400)&&((x) < 500))
-/** is the status code a server error  */
-#define ap_is_HTTP_SERVER_ERROR(x) (((x) >= 500)&&((x) < 600))
-
-/** should the status code drop the connection */
-#define ap_status_drops_connection(x) \
-                                   (((x) == HTTP_BAD_REQUEST)           || \
-                                    ((x) == HTTP_REQUEST_TIME_OUT)      || \
-                                    ((x) == HTTP_LENGTH_REQUIRED)       || \
-                                    ((x) == HTTP_REQUEST_ENTITY_TOO_LARGE) || \
-                                    ((x) == HTTP_REQUEST_URI_TOO_LARGE) || \
-                                    ((x) == HTTP_INTERNAL_SERVER_ERROR) || \
-                                    ((x) == HTTP_SERVICE_UNAVAILABLE) || \
-				    ((x) == HTTP_NOT_IMPLEMENTED))
-/** @} */
-/**
- * @defgroup Methods List of Methods recognized by the server
- * @{
- */
-/**
- * Methods recognized (but not necessarily handled) by the server.
- * These constants are used in bit shifting masks of size int, so it is
- * unsafe to have more methods than bits in an int.  HEAD == M_GET.
- * This list must be tracked by the list in http_protocol.c in routine
- * ap_method_name_of().
- */
-#define M_GET        0
-#define M_PUT        1
-#define M_POST       2
-#define M_DELETE     3
-#define M_CONNECT    4
-#define M_OPTIONS    5
-#define M_TRACE      6
-#define M_PATCH      7
-#define M_PROPFIND   8
-#define M_PROPPATCH  9
-#define M_MKCOL     10
-#define M_COPY      11
-#define M_MOVE      12
-#define M_LOCK      13
-#define M_UNLOCK    14
-#define M_INVALID   15
-
-/**
- * METHODS needs to be equal to the number of bits
- * we are using for limit masks.
- */
-#define METHODS     64
-
-/**
- * The method mask bit to shift for anding with a bitmask.
- */
-#define AP_METHOD_BIT (apr_int64_t)1
-/** @} */
-
-
-/**
- * Structure for handling HTTP methods.  Methods known to the server are
- * accessed via a bitmask shortcut; extension methods are handled by
- * an array.
- */
-typedef struct ap_method_list_t ap_method_list_t;
-struct ap_method_list_t {
-    /* The bitmask used for known methods */
-    apr_int64_t method_mask;
-    /* the array used for extension methods */
-    apr_array_header_t *method_list;
-};
-/**
- * @defgroup module_magic Module Magic mime types
- * @{
- */
-/** Magic for mod_cgi[d] */
-#define CGI_MAGIC_TYPE "application/x-httpd-cgi"
-/** Magic for mod_include */
-#define INCLUDES_MAGIC_TYPE "text/x-server-parsed-html"
-/** Magic for mod_include */
-#define INCLUDES_MAGIC_TYPE3 "text/x-server-parsed-html3"
-/** Magic for mod_dir */
-#define DIR_MAGIC_TYPE "httpd/unix-directory"
-
-/** @} */
-/* Just in case your linefeed isn't the one the other end is expecting. */
-#if !APR_CHARSET_EBCDIC
-/** linefeed */
-#define LF 10
-/** carrige return */
-#define CR 13
-/** carrige return /Line Feed Combo */
-#define CRLF "\015\012"
-#else /* APR_CHARSET_EBCDIC */
-/* For platforms using the EBCDIC charset, the transition ASCII->EBCDIC is done
- * in the buff package (bread/bputs/bwrite).  Everywhere else, we use
- * "native EBCDIC" CR and NL characters. These are therefore
- * defined as
- * '\r' and '\n'.
- */
-#define CR '\r'
-#define LF '\n'
-#define CRLF "\r\n"
-#endif /* APR_CHARSET_EBCDIC */                                   
-
-/**
- * @defgroup values_request_rec_body Possible values for request_rec.read_body 
- * @{
- * Possible values for request_rec.read_body (set by handling module):
- */
-
-/** Send 413 error if message has any body */
-#define REQUEST_NO_BODY          0
-/** Send 411 error if body without Content-Length */
-#define REQUEST_CHUNKED_ERROR    1
-/** If chunked, remove the chunks for me. */
-#define REQUEST_CHUNKED_DECHUNK  2
-/** @} */
-
-/**
- * @defgroup values_request_rec_used_path_info Possible values for request_rec.used_path_info 
- * @{
- * Possible values for request_rec.used_path_info:
- */
-
-/** Accept request given path_info */
-#define AP_REQ_ACCEPT_PATH_INFO     0
-/** Send 404 error if path_info was given */
-#define AP_REQ_REJECT_PATH_INFO    1
-/** Module's choice for handling path_info */
-#define AP_REQ_DEFAULT_PATH_INFO   2
-/** @} */
-
-/*
- * Things which may vary per file-lookup WITHIN a request ---
- * e.g., state of MIME config.  Basically, the name of an object, info
- * about the object, and any other info we may ahve which may need to
- * change as we go poking around looking for it (e.g., overridden by
- * .htaccess files).
- *
- * Note how the default state of almost all these things is properly
- * zero, so that allocating it with pcalloc does the right thing without
- * a whole lot of hairy initialization... so long as we are willing to
- * make the (fairly) portable assumption that the bit pattern of a NULL
- * pointer is, in fact, zero.
- */
-
-/**
- * This represents the result of calling htaccess; these are cached for
- * each request.
- */
-struct htaccess_result {
-    /** the directory to which this applies */
-    const char *dir;
-    /** the overrides allowed for the .htaccess file */
-    int override;
-    /** the configuration directives */
-    struct ap_conf_vector_t *htaccess;
-    /** the next one, or NULL if no more; N.B. never change this */
-    const struct htaccess_result *next;
-};
-
-/* The following four types define a hierarchy of activities, so that
- * given a request_rec r you can write r->connection->server->process
- * to get to the process_rec.  While this reduces substantially the
- * number of arguments that various hooks require beware that in
- * threaded versions of the server you must consider multiplexing
- * issues.  */
-
-
-/** A structure that represents one process */
-typedef struct process_rec process_rec;
-/** A structure that represents a virtual server */
-typedef struct server_rec server_rec;
-/** A structure that represents one connection */
-typedef struct conn_rec conn_rec;
-/** A structure that represents the current request */
-typedef struct request_rec request_rec;
-
-/* ### would be nice to not include this from httpd.h ... */
-/* This comes after we have defined the request_rec type */
-#include "apr_uri.h"
-
-/** A structure that represents one process */
-struct process_rec {
-    /** Global pool. Please try to cleared on _all_ exits */
-    apr_pool_t *pool;
-    /** aka configuration pool, cleared on restarts */
-    apr_pool_t *pconf;
-    /** How many command line arguments were pass to the program */
-    int argc;
-    /** The command line arguments */
-    const char * const *argv;
-    /** The program name used to execute the program */
-    const char *short_name;
-};
-
-/** A structure that represents the current request */
-struct request_rec {
-    /** The pool associated with the request */
-    apr_pool_t *pool;
-    /** The connection over which this connection has been read */
-    conn_rec *connection;
-    /** The virtual host this request is for */
-    server_rec *server;
-
-    /** If we wind up getting redirected, pointer to the request we 
-     *  redirected to.  */
-    request_rec *next;
-    /** If this is an internal redirect, pointer to where we redirected 
-     *  *from*.  */
-    request_rec *prev;
-
-    /** If this is a sub_request (see request.h) pointer back to the 
-     *  main request.  */
-    request_rec *main;
-
-    /* Info about the request itself... we begin with stuff that only
-     * protocol.c should ever touch...
-     */
-    /** First line of request, so we can log it */
-    char *the_request;
-    /** HTTP/0.9, "simple" request (e.g. GET /foo\n w/no headers) */
-    int assbackwards;
-    /** A proxy request (calculated during post_read_request/translate_name)
-     *  possible values PROXYREQ_NONE, PROXYREQ_PROXY, PROXYREQ_REVERSE
-     */
-    int proxyreq;
-    /** HEAD request, as opposed to GET */
-    int header_only;
-    /** Protocol, as given to us, or HTTP/0.9 */
-    char *protocol;
-    /** Number version of protocol; 1.1 = 1001 */
-    int proto_num;
-    /** Host, as set by full URI or Host: */
-    const char *hostname;
-
-    /** When the request started */
-    apr_time_t request_time;
-
-    /** Status line, if set by script */
-    const char *status_line;
-    /** In any case */
-    int status;
-
-    /* Request method, two ways; also, protocol, etc..  Outside of protocol.c,
-     * look, but don't touch.
-     */
-
-    /** GET, HEAD, POST, etc. */
-    const char *method;
-    /** M_GET, M_POST, etc. */
-    int method_number;
-
-    /**
-     *  allowed is a bitvector of the allowed methods.
-     *
-     *  A handler must ensure that the request method is one that
-     *  it is capable of handling.  Generally modules should DECLINE
-     *  any request methods they do not handle.  Prior to aborting the
-     *  handler like this the handler should set r->allowed to the list
-     *  of methods that it is willing to handle.  This bitvector is used
-     *  to construct the "Allow:" header required for OPTIONS requests,
-     *  and HTTP_METHOD_NOT_ALLOWED and HTTP_NOT_IMPLEMENTED status codes.
-     *
-     *  Since the default_handler deals with OPTIONS, all modules can
-     *  usually decline to deal with OPTIONS.  TRACE is always allowed,
-     *  modules don't need to set it explicitly.
-     *
-     *  Since the default_handler will always handle a GET, a
-     *  module which does *not* implement GET should probably return
-     *  HTTP_METHOD_NOT_ALLOWED.  Unfortunately this means that a Script GET
-     *  handler can't be installed by mod_actions.
-     */
-    apr_int64_t allowed;
-    /** Array of extension methods */
-    apr_array_header_t *allowed_xmethods; 
-    /** List of allowed methods */
-    ap_method_list_t *allowed_methods; 
-
-    /** byte count in stream is for body */
-    apr_off_t sent_bodyct;
-    /** body byte count, for easy access */
-    apr_off_t bytes_sent;
-    /** Time the resource was last modified */
-    apr_time_t mtime;
-
-    /* HTTP/1.1 connection-level features */
-
-    /** sending chunked transfer-coding */
-    int chunked;
-    /** multipart/byteranges boundary */
-    const char *boundary;
-    /** The Range: header */
-    const char *range;
-    /** The "real" content length */
-    apr_off_t clength;
-
-    /** bytes left to read */
-    apr_off_t remaining;
-    /** bytes that have been read */
-    apr_off_t read_length;
-    /** how the request body should be read */
-    int read_body;
-    /** reading chunked transfer-coding */
-    int read_chunked;
-    /** is client waiting for a 100 response? */
-    unsigned expecting_100;
-
-    /* MIME header environments, in and out.  Also, an array containing
-     * environment variables to be passed to subprocesses, so people can
-     * write modules to add to that environment.
-     *
-     * The difference between headers_out and err_headers_out is that the
-     * latter are printed even on error, and persist across internal redirects
-     * (so the headers printed for ErrorDocument handlers will have them).
-     *
-     * The 'notes' apr_table_t is for notes from one module to another, with no
-     * other set purpose in mind...
-     */
-
-    /** MIME header environment from the request */
-    apr_table_t *headers_in;
-    /** MIME header environment for the response */
-    apr_table_t *headers_out;
-    /** MIME header environment for the response, printed even on errors and
-     * persist across internal redirects */
-    apr_table_t *err_headers_out;
-    /** Array of environment variables to be used for sub processes */
-    apr_table_t *subprocess_env;
-    /** Notes from one module to another */
-    apr_table_t *notes;
-
-    /* content_type, handler, content_encoding, and all content_languages 
-     * MUST be lowercased strings.  They may be pointers to static strings;
-     * they should not be modified in place.
-     */
-    /** The content-type for the current request */
-    const char *content_type;	/* Break these out --- we dispatch on 'em */
-    /** The handler string that we use to call a handler function */
-    const char *handler;	/* What we *really* dispatch on           */
-
-    /** How to encode the data */
-    const char *content_encoding;
-    /** array of (char*) representing the content languages */
-    apr_array_header_t *content_languages;
-
-    /** variant list validator (if negotiated) */
-    char *vlist_validator;
-    
-    /** If an authentication check was made, this gets set to the user name. */
-    char *user;	
-    /** If an authentication check was made, this gets set to the auth type. */
-    char *ap_auth_type;
-
-    /** This response is non-cache-able */
-    int no_cache;
-    /** There is no local copy of this response */
-    int no_local_copy;
-
-    /* What object is being requested (either directly, or via include
-     * or content-negotiation mapping).
-     */
-
-    /** the uri without any parsing performed */
-    char *unparsed_uri;	
-    /** the path portion of the URI */
-    char *uri;
-    /** The filename on disk that this response corresponds to */
-    char *filename;
-    /** The true filename, we canonicalize r->filename if these don't match */
-    char *canonical_filename;
-    /** The path_info for this request if there is any. */
-    char *path_info;
-    /** QUERY_ARGS, if any */
-    char *args;	
-    /** ST_MODE set to zero if no such file */
-    apr_finfo_t finfo;
-    /** components of uri, dismantled */
-    apr_uri_t parsed_uri;
-
-    /** Flag for the handler to accept or reject path_info on 
-     *  the current request.  All modules should respect the
-     *  AP_REQ_ACCEPT_PATH_INFO and AP_REQ_REJECT_PATH_INFO 
-     *  values, while AP_REQ_DEFAULT_PATH_INFO indicates they
-     *  may follow existing conventions.  This is set to the
-     *  user's preference upon HOOK_VERY_FIRST of the fixups.
-     */
-    int used_path_info;
-
-    /* Various other config info which may change with .htaccess files
-     * These are config vectors, with one void* pointer for each module
-     * (the thing pointed to being the module's business).
-     */
-
-    /** Options set in config files, etc. */
-    struct ap_conf_vector_t *per_dir_config;
-    /** Notes on *this* request */
-    struct ap_conf_vector_t *request_config;
-
-/**
- * a linked list of the configuration directives in the .htaccess files
- * accessed by this request.
- * N.B. always add to the head of the list, _never_ to the end.
- * that way, a sub request's list can (temporarily) point to a parent's list
- */
-    const struct htaccess_result *htaccess;
-
-    /** A list of output filters to be used for this request */
-    struct ap_filter_t *output_filters;
-    /** A list of input filters to be used for this request */
-    struct ap_filter_t *input_filters;
-
-    /** A list of protocol level output filters to be used for this
-     *  request */
-    struct ap_filter_t *proto_output_filters;
-    /** A list of protocol level input filters to be used for this
-     *  request */
-    struct ap_filter_t *proto_input_filters;
-
-    /** A flag to determine if the eos bucket has been sent yet */
-    int eos_sent;
-
-/* Things placed at the end of the record to avoid breaking binary
- * compatibility.  It would be nice to remember to reorder the entire
- * record to improve 64bit alignment the next time we need to break
- * binary compatibility for some other reason.
- */
-};
-
-/**
- * @defgroup ProxyReq Proxy request types
- *
- * Possible values of request_rec->proxyreq. A request could be normal,
- *  proxied or reverse proxied. Normally proxied and reverse proxied are
- *  grouped together as just "proxied", but sometimes it's necessary to
- *  tell the difference between the two, such as for authentication.
- * @{
- */
-
-#define PROXYREQ_NONE 0		/**< No proxy */
-#define PROXYREQ_PROXY 1	/**< Standard proxy */
-#define PROXYREQ_REVERSE 2	/**< Reverse proxy */
-
-/* @} */
-
-
-/** Structure to store things which are per connection */
-struct conn_rec {
-    /** Pool associated with this connection */
-    apr_pool_t *pool;
-    /** Physical vhost this conn came in on */
-    server_rec *base_server;
-    /** used by http_vhost.c */
-    void *vhost_lookup_data;
-
-    /* Information about the connection itself */
-    /** local address */
-    apr_sockaddr_t *local_addr;
-    /** remote address */
-    apr_sockaddr_t *remote_addr;
-
-    /** Client's IP address */
-    char *remote_ip;
-    /** Client's DNS name, if known.  NULL if DNS hasn't been checked,
-     *  "" if it has and no address was found.  N.B. Only access this though
-     * get_remote_host() */
-    char *remote_host;
-    /** Only ever set if doing rfc1413 lookups.  N.B. Only access this through
-     *  get_remote_logname() */
-    char *remote_logname;
-
-    /** Are we still talking? */
-    unsigned aborted:1;
-
-    /** Are we going to keep the connection alive for another request?
-     *  -1 fatal error, 0 undecided, 1 yes   */
-    signed int keepalive:2;
-
-    /** have we done double-reverse DNS? -1 yes/failure, 0 not yet, 
-     *  1 yes/success */
-    signed int double_reverse:2;
-
-    /** How many times have we used it? */
-    int keepalives;
-    /** server IP address */
-    char *local_ip;
-    /** used for ap_get_server_name when UseCanonicalName is set to DNS
-     *  (ignores setting of HostnameLookups) */
-    char *local_host;
-
-    /** ID of this connection; unique at any point in time */
-    long id; 
-    /** Notes on *this* connection */
-    struct ap_conf_vector_t *conn_config;
-    /** send note from one module to another, must remain valid for all
-     *  requests on this conn */
-    apr_table_t *notes;
-    /** A list of input filters to be used for this connection */
-    struct ap_filter_t *input_filters;
-    /** A list of output filters to be used for this connection */
-    struct ap_filter_t *output_filters;
-    /** handle to scoreboard information for this connection */
-    void *sbh;
-};
-
-/* Per-vhost config... */
-
-/**
- * The address 255.255.255.255, when used as a virtualhost address,
- * will become the "default" server when the ip doesn't match other vhosts.
- */
-#define DEFAULT_VHOST_ADDR 0xfffffffful
-
-
-/** A structure to be used for Per-vhost config */
-typedef struct server_addr_rec server_addr_rec;
-struct server_addr_rec {
-    /** The next server in the list */
-    server_addr_rec *next;
-    /** The bound address, for this server */
-    apr_sockaddr_t *host_addr;
-    /** The bound port, for this server */
-    apr_port_t host_port;
-    /** The name given in <VirtualHost> */
-    char *virthost;
-};
-
-/** A structure to store information for each virtual server */
-struct server_rec {
-    /** The process this server is running in */
-    process_rec *process;
-    /** The next server in the list */
-    server_rec *next;
-
-    /** The name of the server */
-    const char *defn_name;
-    /** The line of the config file that the server was defined on */
-    unsigned defn_line_number;
-
-    /* Contact information */
-
-    /** The admin's contact information */
-    char *server_admin;
-    /** The server hostname */
-    char *server_hostname;
-    /** for redirects, etc. */
-    apr_port_t port;
-
-    /* Log files --- note that transfer log is now in the modules... */
-
-    /** The name of the error log */
-    char *error_fname;
-    /** A file descriptor that references the error log */
-    apr_file_t *error_log;
-    /** The log level for this server */
-    int loglevel;
-
-    /* Module-specific configuration for server, and defaults... */
-
-    /** true if this is the virtual server */
-    int is_virtual;
-    /** Config vector containing pointers to modules' per-server config 
-     *  structures. */
-    struct ap_conf_vector_t *module_config; 
-    /** MIME type info, etc., before we start checking per-directory info */
-    struct ap_conf_vector_t *lookup_defaults;
-
-    /* Transaction handling */
-
-    /** I haven't got a clue */
-    server_addr_rec *addrs;
-    /** Timeout, in seconds, before we give up */
-    int timeout;
-    /** Seconds we'll wait for another request */
-    int keep_alive_timeout;
-    /** Maximum requests per connection */
-    int keep_alive_max;
-    /** Use persistent connections? */
-    int keep_alive;
-
-    /** Pathname for ServerPath */
-    const char *path;
-    /** Length of path */
-    int pathlen;
-
-    /** Normal names for ServerAlias servers */
-    apr_array_header_t *names;
-    /** Wildcarded names for ServerAlias servers */
-    apr_array_header_t *wild_names;
-
-    /** limit on size of the HTTP request line    */
-    int limit_req_line;
-    /** limit on size of any request header field */
-    int limit_req_fieldsize;
-    /** limit on number of request header fields  */
-    int limit_req_fields; 
-};
-
-typedef struct core_output_filter_ctx {
-    apr_bucket_brigade *b;
-    apr_pool_t *subpool; /* subpool of c->pool used for data saved after a
-                          * request is finished
-                          */
-    int subpool_has_stuff; /* anything in the subpool? */
-} core_output_filter_ctx_t;
- 
-typedef struct core_filter_ctx {
-    apr_bucket_brigade *b;
-} core_ctx_t;
- 
-typedef struct core_net_rec {
-    /** Connection to the client */
-    apr_socket_t *client_socket;
-
-    /** connection record */
-    conn_rec *c;
- 
-    core_output_filter_ctx_t *out_ctx;
-    core_ctx_t *in_ctx;
-} core_net_rec;
-
-/**
- * Examine a field value (such as a media-/content-type) string and return
- * it sans any parameters; e.g., strip off any ';charset=foo' and the like.
- * @param p Pool to allocate memory from
- * @param intype The field to examine
- * @return A copy of the field minus any parameters
- */
-AP_DECLARE(char *) ap_field_noparam(apr_pool_t *p, const char *intype);
-
-/**
- * Convert a time from an integer into a string in a specified format
- * @param p The pool to allocate memory from
- * @param t The time to convert
- * @param fmt The format to use for the conversion
- * @param gmt Convert the time for GMT?
- * @return The string that represents the specified time
- */
-AP_DECLARE(char *) ap_ht_time(apr_pool_t *p, apr_time_t t, const char *fmt, int gmt);
-
-/* String handling. The *_nc variants allow you to use non-const char **s as
-   arguments (unfortunately C won't automatically convert a char ** to a const
-   char **) */
-
-/**
- * Get the characters until the first occurance of a specified character
- * @param p The pool to allocate memory from
- * @param line The string to get the characters from
- * @param stop The character to stop at
- * @return A copy of the characters up to the first stop character
- */
-AP_DECLARE(char *) ap_getword(apr_pool_t *p, const char **line, char stop);
-/**
- * Get the characters until the first occurance of a specified character
- * @param p The pool to allocate memory from
- * @param line The string to get the characters from
- * @param stop The character to stop at
- * @return A copy of the characters up to the first stop character
- * @note This is the same as ap_getword(), except it doesn't use const char **.
- */
-AP_DECLARE(char *) ap_getword_nc(apr_pool_t *p, char **line, char stop);
-
-/**
- * Get the first word from a given string.  A word is defined as all characters
- * up to the first whitespace.
- * @param p The pool to allocate memory from
- * @param line The string to traverse
- * @return The first word in the line
- */
-AP_DECLARE(char *) ap_getword_white(apr_pool_t *p, const char **line);
-/**
- * Get the first word from a given string.  A word is defined as all characters
- * up to the first whitespace.
- * @param p The pool to allocate memory from
- * @param line The string to traverse
- * @return The first word in the line
- * @note The same as ap_getword_white(), except it doesn't use const char **.
- */
-AP_DECLARE(char *) ap_getword_white_nc(apr_pool_t *p, char **line);
-
-/**
- * Get all characters from the first occurance of @a stop to the first '\0'
- * @param p The pool to allocate memory from
- * @param line The line to traverse
- * @param stop The character to start at
- * @return A copy of all caracters after the first occurance of the specified
- *         character
- */
-AP_DECLARE(char *) ap_getword_nulls(apr_pool_t *p, const char **line,
-				    char stop);
-/**
- * Get all characters from the first occurance of @a stop to the first '\0'
- * @param p The pool to allocate memory from
- * @param line The line to traverse
- * @param stop The character to start at
- * @return A copy of all caracters after the first occurance of the specified
- *         character
- * @note The same as ap_getword_nulls(), except it doesn't use const char **.
- */
-AP_DECLARE(char *) ap_getword_nulls_nc(apr_pool_t *p, char **line, char stop);
-
-/**
- * Get the second word in the string paying attention to quoting
- * @param p The pool to allocate from
- * @param line The line to traverse
- * @return A copy of the string
- */
-AP_DECLARE(char *) ap_getword_conf(apr_pool_t *p, const char **line);
-/**
- * Get the second word in the string paying attention to quoting
- * @param p The pool to allocate from
- * @param line The line to traverse
- * @return A copy of the string
- * @note The same as ap_getword_conf(), except it doesn't use const char **.
- */
-AP_DECLARE(char *) ap_getword_conf_nc(apr_pool_t *p, char **line);
-
-/**
- * Check a string for any ${ENV} environment variable construct and replace 
- * each them by the value of that environment variable, if it exists. If the 
- * environment value does not exist, leave the ${ENV} construct alone; it 
- * means something else.
- * @param p The pool to allocate from
- * @param word The string to check
- * @return The string with the replaced environment variables
- */
-AP_DECLARE(const char *) ap_resolve_env(apr_pool_t *p, const char * word); 
-
-/**
- * Size an HTTP header field list item, as separated by a comma.
- * @param field The field to size
- * @param len The length of the field
- * @return The return value is a pointer to the beginning of the non-empty 
- * list item within the original string (or NULL if there is none) and the 
- * address of field is shifted to the next non-comma, non-whitespace 
- * character.  len is the length of the item excluding any beginning whitespace.
- */
-AP_DECLARE(const char *) ap_size_list_item(const char **field, int *len);
-
-/**
- * Retrieve an HTTP header field list item, as separated by a comma,
- * while stripping insignificant whitespace and lowercasing anything not in
- * a quoted string or comment.  
- * @param p The pool to allocate from
- * @param field The field to retrieve
- * @return The return value is a new string containing the converted list 
- *         item (or NULL if none) and the address pointed to by field is 
- *         shifted to the next non-comma, non-whitespace.
- */
-AP_DECLARE(char *) ap_get_list_item(apr_pool_t *p, const char **field);
-
-/**
- * Find an item in canonical form (lowercase, no extra spaces) within
- * an HTTP field value list.  
- * @param p The pool to allocate from
- * @param line The field value list to search
- * @param tok The token to search for
- * @return 1 if found, 0 if not found.
- */
-AP_DECLARE(int) ap_find_list_item(apr_pool_t *p, const char *line, const char *tok);
-
-/**
- * Retrieve a token, spacing over it and returning a pointer to
- * the first non-white byte afterwards.  Note that these tokens
- * are delimited by semis and commas and can also be delimited
- * by whitespace at the caller's option.
- * @param p The pool to allocate from
- * @param accept_line The line to retrieve the token from
- * @param accept_white Is it delimited by whitespace
- * @return the first non-white byte after the token
- */
-AP_DECLARE(char *) ap_get_token(apr_pool_t *p, const char **accept_line, int accept_white);
-
-/**
- * Find http tokens, see the definition of token from RFC2068 
- * @param p The pool to allocate from
- * @param line The line to find the token
- * @param tok The token to find
- * @return 1 if the token is found, 0 otherwise
- */
-AP_DECLARE(int) ap_find_token(apr_pool_t *p, const char *line, const char *tok);
-
-/**
- * find http tokens from the end of the line
- * @param p The pool to allocate from
- * @param line The line to find the token
- * @param tok The token to find
- * @return 1 if the token is found, 0 otherwise
- */
-AP_DECLARE(int) ap_find_last_token(apr_pool_t *p, const char *line, const char *tok);
-
-/**
- * Check for an Absolute URI syntax
- * @param u The string to check
- * @return 1 if URI, 0 otherwise
- */
-AP_DECLARE(int) ap_is_url(const char *u);
-
-/**
- * Unescape a URL
- * @param url The url to unescapte
- * @return 0 on success, non-zero otherwise
- */
-AP_DECLARE(int) ap_unescape_url(char *url);
-/**
- * Convert all double slashes to single slashes
- * @param name The string to convert
- */
-AP_DECLARE(void) ap_no2slash(char *name);
-
-/**
- * Remove all ./ and xx/../ substrings from a file name. Also remove
- * any leading ../ or /../ substrings.
- * @param name the file name to parse
- */
-AP_DECLARE(void) ap_getparents(char *name);
-
-/**
- * Escape a path segment, as defined in RFC 1808
- * @param p The pool to allocate from
- * @param s The path to convert
- * @return The converted URL
- */
-AP_DECLARE(char *) ap_escape_path_segment(apr_pool_t *p, const char *s);
-/**
- * convert an OS path to a URL in an OS dependant way.
- * @param p The pool to allocate from
- * @param path The path to convert
- * @param partial if set, assume that the path will be appended to something
- *        with a '/' in it (and thus does not prefix "./")
- * @return The converted URL
- */
-AP_DECLARE(char *) ap_os_escape_path(apr_pool_t *p, const char *path, int partial);
-/** @see ap_os_escape_path */
-#define ap_escape_uri(ppool,path) ap_os_escape_path(ppool,path,1)
-
-/**
- * Escape an html string
- * @param p The pool to allocate from
- * @param s The html to escape
- * @return The escaped string
- */
-AP_DECLARE(char *) ap_escape_html(apr_pool_t *p, const char *s);
-
-/**
- * Construct a full hostname
- * @param p The pool to allocate from
- * @param hostname The hostname of the server
- * @param port The port the server is running on
- * @param r The current request
- * @return The server's hostname
- */
-AP_DECLARE(char *) ap_construct_server(apr_pool_t *p, const char *hostname,
-				    apr_port_t port, const request_rec *r);
-/**
- * Escape a shell command
- * @param p The pool to allocate from
- * @param s The command to escape
- * @return The escaped shell command
- */
-AP_DECLARE(char *) ap_escape_shell_cmd(apr_pool_t *p, const char *s);
-
-/**
- * Count the number of directories in a path
- * @param path The path to count
- * @return The number of directories
- */
-AP_DECLARE(int) ap_count_dirs(const char *path);
-
-/**
- * Copy at most @a n leading directories of @a s into @a d. @a d
- * should be at least as large as @a s plus 1 extra byte
- *
- * @param d The location to copy to
- * @param s The location to copy from
- * @param n The number of directories to copy
- * @return value is the ever useful pointer to the trailing \0 of d
- * @note on platforms with drive letters, n = 0 returns the "/" root, 
- * whereas n = 1 returns the "d:/" root.  On all other platforms, n = 0
- * returns the empty string.  */
-AP_DECLARE(char *) ap_make_dirstr_prefix(char *d, const char *s, int n);
-
-/**
- * Return the parent directory name (including trailing /) of the file
- * @a s
- * @param p The pool to allocate from
- * @param s The file to get the parent of
- * @return A copy of the file's parent directory
- */
-AP_DECLARE(char *) ap_make_dirstr_parent(apr_pool_t *p, const char *s);
-
-/**
- * Given a directory and filename, create a single path from them.  This
- * function is smart enough to ensure that there is a sinlge '/' between the
- * directory and file names
- * @param a The pool to allocate from
- * @param dir The directory name
- * @param f The filename
- * @return A copy of the full path
- * @tip Never consider using this function if you are dealing with filesystem
- * names that need to remain canonical, unless you are merging an apr_dir_read
- * path and returned filename.  Otherwise, the result is not canonical.
- */
-AP_DECLARE(char *) ap_make_full_path(apr_pool_t *a, const char *dir, const char *f);
-
-/**
- * Test if the given path has an an absolute path.
- * @param p The pool to allocate from
- * @param dir The directory name
- * @tip The converse is not necessarily true, some OS's (Win32/OS2/Netware) have
- * multiple forms of absolute paths.  This only reports if the path is absolute
- * in a canonical sense.
- */
-AP_DECLARE(int) ap_os_is_path_absolute(apr_pool_t *p, const char *dir);
-
-/**
- * Does the provided string contain wildcard characters?  This is useful
- * for determining if the string should be passed to strcmp_match or to strcmp.
- * The only wildcard characters recognized are '?' and '*'
- * @param str The string to check
- * @return 1 if the string has wildcards, 0 otherwise
- */
-AP_DECLARE(int) ap_is_matchexp(const char *str);
-
-/**
- * Determine if a string matches a patterm containing the wildcards '?' or '*'
- * @param str The string to check
- * @param exp The pattern to match against
- * @return 1 if the two strings match, 0 otherwise
- */
-AP_DECLARE(int) ap_strcmp_match(const char *str, const char *exp);
-/**
- * Determine if a string matches a patterm containing the wildcards '?' or '*',
- * ignoring case
- * @param str The string to check
- * @param exp The pattern to match against
- * @return 1 if the two strings match, 0 otherwise
- */
-AP_DECLARE(int) ap_strcasecmp_match(const char *str, const char *exp);
-
-/**
- * Find the first occurrence of the substring s2 in s1, regardless of case
- * @param s1 The string to search
- * @param s2 The substring to search for
- * @return A pointer to the beginning of the substring
- */
-AP_DECLARE(char *) ap_strcasestr(const char *s1, const char *s2);
-
-/**
- * Return a pointer to the location inside of bigstring immediately after prefix
- * @param bigstring The input string
- * @param prefix The prefix to strip away
- * @return A pointer relative to bigstring after prefix
- */
-AP_DECLARE(const char *) ap_stripprefix(const char *bigstring,
-                                        const char *prefix);
-
-/**
- * Decode a base64 encoded string into memory allocated from a pool
- * @param p The pool to allocate from
- * @param bufcoded The encoded string
- * @return The decoded string
- */
-AP_DECLARE(char *) ap_pbase64decode(apr_pool_t *p, const char *bufcoded);
-
-/**
- * Encode a string into memory allocated from a pool in base 64 format
- * @param p The pool to allocate from
- * @param strin The plaintext string
- * @return The encoded string
- */
-AP_DECLARE(char *) ap_pbase64encode(apr_pool_t *p, char *string); 
-
-
-/**
- * Compile a regular expression to be used later
- * @param p The pool to allocate from
- * @param pattern the regular expression to compile
- * @param cflags The bitwise or of one or more of the following:
- *   @li #REG_EXTENDED - Use POSIX extended Regular Expressions
- *   @li #REG_ICASE    - Ignore case
- *   @li #REG_NOSUB    - Support for substring addressing of matches
- *       not required
- *   @li #REG_NEWLINE  - Match-any-character operators don't match new-line
- * @return The compiled regular expression
- */
-AP_DECLARE(regex_t *) ap_pregcomp(apr_pool_t *p, const char *pattern,
-				   int cflags);
-
-/**
- * Free the memory associated with a compiled regular expression
- * @param p The pool the regex was allocated from
- * @param reg The regular expression to free
- */
-AP_DECLARE(void) ap_pregfree(apr_pool_t *p, regex_t *reg);
-
-/**
- * Match a null-terminated string against a pre-compiled regex.
- * @param preg The pre-compiled regex
- * @param string The string to match
- * @param nmatch Provide information regarding the location of any matches
- * @param pmatch Provide information regarding the location of any matches
- * @param eflags Bitwise or of any of:
- *   @li #REG_NOTBOL - match-beginning-of-line operator always
- *     fails to match
- *   @li #REG_NOTEOL - match-end-of-line operator always fails to match
- * @return 0 for successful match, #REG_NOMATCH otherwise
- */ 
-AP_DECLARE(int)    ap_regexec(regex_t *preg, const char *string,
-                              size_t nmatch, regmatch_t pmatch[], int eflags);
-
-/**
- * Return the error code returned by regcomp or regexec into error messages
- * @param errcode the error code returned by regexec or regcomp
- * @param preg The precompiled regex
- * @param errbuf A buffer to store the error in
- * @param errbuf_size The size of the buffer
- */
-AP_DECLARE(size_t) ap_regerror(int errcode, const regex_t *preg, 
-                               char *errbuf, size_t errbuf_size);
-
-/**
- * After performing a successful regex match, you may use this function to 
- * perform a series of string substitutions based on subexpressions that were
- * matched during the call to ap_regexec
- * @param p The pool to allocate from
- * @param input An arbitrary string containing $1 through $9.  These are 
- *              replaced with the corresponding matched sub-expressions
- * @param source The string that was originally matched to the regex
- * @param nmatch the nmatch returned from ap_pregex
- * @param pmatch the pmatch array returned from ap_pregex
- */
-AP_DECLARE(char *) ap_pregsub(apr_pool_t *p, const char *input, const char *source,
-                              size_t nmatch, regmatch_t pmatch[]);
-
-/**
- * We want to downcase the type/subtype for comparison purposes
- * but nothing else because ;parameter=foo values are case sensitive.
- * @param s The content-type to convert to lowercase
- */
-AP_DECLARE(void) ap_content_type_tolower(char *s);
-
-/**
- * convert a string to all lowercase
- * @param s The string to convert to lowercase 
- */
-AP_DECLARE(void) ap_str_tolower(char *s);
-
-/**
- * Search a string from left to right for the first occurrence of a 
- * specific character
- * @param str The string to search
- * @param c The character to search for
- * @return The index of the first occurrence of c in str
- */
-AP_DECLARE(int) ap_ind(const char *str, char c);	/* Sigh... */
-
-/**
- * Search a string from right to left for the first occurrence of a 
- * specific character
- * @param str The string to search
- * @param c The character to search for
- * @return The index of the first occurrence of c in str
- */
-AP_DECLARE(int) ap_rind(const char *str, char c);
-
-/**
- * Given a string, replace any bare " with \" .
- * @param p The pool to allocate memory from
- * @param instring The string to search for "
- * @return A copy of the string with escaped quotes 
- */
-AP_DECLARE(char *) ap_escape_quotes(apr_pool_t *p, const char *instring);
-
-/* Misc system hackery */
-/**
- * Given the name of an object in the file system determine if it is a directory
- * @param p The pool to allocate from 
- * @param name The name of the object to check
- * @return 1 if it is a directory, 0 otherwise
- */
-AP_DECLARE(int) ap_is_rdirectory(apr_pool_t *p, const char *name);
-
-/**
- * Given the name of an object in the file system determine if it is a directory - this version is symlink aware
- * @param p The pool to allocate from 
- * @param name The name of the object to check
- * @return 1 if it is a directory, 0 otherwise
- */
-AP_DECLARE(int) ap_is_directory(apr_pool_t *p, const char *name);
-
-#ifdef _OSD_POSIX
-extern const char *os_set_account(apr_pool_t *p, const char *account);
-extern int os_init_job_environment(server_rec *s, const char *user_name, int one_process);
-#endif /* _OSD_POSIX */
-
-/**
- * Determine the local host name for the current machine
- * @param p The pool to allocate from
- * @return A copy of the local host name
- */
-char *ap_get_local_host(apr_pool_t *p);
-
-/**
- * Log an assertion to the error log
- * @param szExp The assertion that failed
- * @param szFile The file the assertion is in
- * @param nLine The line the assertion is defined on
- */
-AP_DECLARE(void) ap_log_assert(const char *szExp, const char *szFile, int nLine)
-			    __attribute__((noreturn));
-
-/** @internal */
-#define ap_assert(exp) ((exp) ? (void)0 : ap_log_assert(#exp,__FILE__,__LINE__))
-
-/**
- * Redefine assert() to something more useful for an Apache...
- *
- * Use ap_assert() if the condition should always be checked.
- * Use AP_DEBUG_ASSERT() if the condition should only be checked when AP_DEBUG
- * is defined.
- */
-
-#ifdef AP_DEBUG
-#define AP_DEBUG_ASSERT(exp) ap_assert(exp)
-#else
-#define AP_DEBUG_ASSERT(exp) ((void)0)
-#endif
-
-/**
- * @defgroup stopsignal flags which indicate places where the sever should stop for debugging.
- * @{
- * A set of flags which indicate places where the server should raise(SIGSTOP).
- * This is useful for debugging, because you can then attach to that process
- * with gdb and continue.  This is important in cases where one_process
- * debugging isn't possible.
- */
-/** stop on a Detach */
-#define SIGSTOP_DETACH			1
-/** stop making a child process */
-#define SIGSTOP_MAKE_CHILD		2
-/** stop spawning a child process */
-#define SIGSTOP_SPAWN_CHILD		4
-/** stop spawning a child process with a piped log */
-#define SIGSTOP_PIPED_LOG_SPAWN		8
-/** stop spawning a CGI child process */
-#define SIGSTOP_CGI_CHILD		16
-
-/** Macro to get GDB started */
-#ifdef DEBUG_SIGSTOP
-extern int raise_sigstop_flags;
-#define RAISE_SIGSTOP(x)	do { \
-	if (raise_sigstop_flags & SIGSTOP_##x) raise(SIGSTOP);\
-    } while (0)
-#else
-#define RAISE_SIGSTOP(x)
-#endif
-/** @} */
-/**
- * Get HTML describing the address and (optionally) admin of the server.
- * @param prefix Text which is prepended to the return value
- * @param r The request_rec
- * @return HTML describing the server, allocated in @a r's pool.
- */
-AP_DECLARE(const char *) ap_psignature(const char *prefix, request_rec *r);
-
-/** strtoul does not exist on sunos4. */
-#ifdef strtoul
-#undef strtoul
-#endif
-#define strtoul strtoul_is_not_a_portable_function_use_strtol_instead
-
-  /* The C library has functions that allow const to be silently dropped ...
-     these macros detect the drop in maintainer mode, but use the native
-     methods for normal builds
-
-     Note that on some platforms (e.g., AIX with gcc, Solaris with gcc), string.h needs 
-     to be included before the macros are defined or compilation will fail.
-  */
-#include <string.h>
-
-#ifdef AP_DEBUG
-
-#undef strchr
-# define strchr(s, c)	ap_strchr(s,c)
-#undef strrchr
-# define strrchr(s, c)  ap_strrchr(s,c)
-#undef strstr
-# define strstr(s, c)  ap_strstr(s,c)
-
-AP_DECLARE(char *) ap_strchr(char *s, int c);
-AP_DECLARE(const char *) ap_strchr_c(const char *s, int c);
-AP_DECLARE(char *) ap_strrchr(char *s, int c);
-AP_DECLARE(const char *) ap_strrchr_c(const char *s, int c);
-AP_DECLARE(char *) ap_strstr(char *s, const char *c);
-AP_DECLARE(const char *) ap_strstr_c(const char *s, const char *c);
-
-#else
-
-/** use this instead of strchr */
-# define ap_strchr(s, c)	strchr(s, c)
-/** use this instead of strchr */
-# define ap_strchr_c(s, c)	strchr(s, c)
-/** use this instead of strrchr */
-# define ap_strrchr(s, c)	strrchr(s, c)
-/** use this instead of strrchr */
-# define ap_strrchr_c(s, c)	strrchr(s, c)
-/** use this instead of strrstr*/
-# define ap_strstr(s, c)	strstr(s, c)
-/** use this instead of strrstr*/
-# define ap_strstr_c(s, c)	strstr(s, c)
-
-#endif
-
-#define AP_NORESTART		APR_OS_START_USEERR + 1
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif	/* !APACHE_HTTPD_H */
diff --git a/include/mpm_common.h b/include/mpm_common.h
deleted file mode 100644
index 733d541..0000000
--- a/include/mpm_common.h
+++ /dev/null
@@ -1,287 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-/* The purpose of this file is to store the code that MOST mpm's will need
- * this does not mean a function only goes into this file if every MPM needs
- * it.  It means that if a function is needed by more than one MPM, and
- * future maintenance would be served by making the code common, then the
- * function belongs here.
- *
- * This is going in src/main because it is not platform specific, it is
- * specific to multi-process servers, but NOT to Unix.  Which is why it
- * does not belong in src/os/unix
- */
-
-#ifndef APACHE_MPM_COMMON_H
-#define APACHE_MPM_COMMON_H
-
-#include "ap_config.h"
-
-#if APR_HAVE_NETINET_TCP_H
-#include <netinet/tcp.h>    /* for TCP_NODELAY */
-#endif
-
-#include "mpm.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * @package Multi-Processing Modules functions
- */
-
-/* The maximum length of the queue of pending connections, as defined
- * by listen(2).  Under some systems, it should be increased if you
- * are experiencing a heavy TCP SYN flood attack.
- *
- * It defaults to 511 instead of 512 because some systems store it 
- * as an 8-bit datatype; 512 truncated to 8-bits is 0, while 511 is 
- * 255 when truncated.
- */
-#ifndef DEFAULT_LISTENBACKLOG
-#define DEFAULT_LISTENBACKLOG 511
-#endif
-        
-/**
- * Make sure all child processes that have been spawned by the parent process
- * have died.  This includes process registered as "other_children".
- * @warning This is only defined if the MPM defines 
- *          MPM_NEEDS_RECLAIM_CHILD_PROCESS
- * @param terminate Either 1 or 0.  If 1, send the child processes SIGTERM
- *        each time through the loop.  If 0, give the process time to die
- *        on its own before signalling it.
- * @tip This function requires that some macros are defined by the MPM: <pre>
- *  MPM_SYNC_CHILD_TABLE -- sync the scoreboard image between child and parent
- *  MPM_CHILD_PID -- Get the pid from the specified spot in the scoreboard
- *  MPM_NOTE_CHILD_KILLED -- Note the child died in the scoreboard
- * </pre>
- */
-#ifdef AP_MPM_WANT_RECLAIM_CHILD_PROCESSES
-void ap_reclaim_child_processes(int terminate);
-#endif
-
-/**
- * Determine if any child process has died.  If no child process died, then
- * this process sleeps for the amount of time specified by the MPM defined
- * macro SCOREBOARD_MAINTENANCE_INTERVAL.
- * @param status The return code if a process has died
- * @param ret The process id of the process that died
- * @param p The pool to allocate out of
- */
-#ifdef AP_MPM_WANT_WAIT_OR_TIMEOUT
-void ap_wait_or_timeout(apr_exit_why_e *status, int *exitcode, apr_proc_t *ret, 
-                        apr_pool_t *p);
-#endif
-
-/**
- * Log why a child died to the error log, if the child died without the
- * parent signalling it.
- * @param pid The child that has died
- * @param status The status returned from ap_wait_or_timeout
- * @return 0 on success, APEXIT_CHILDFATAL if MPM should terminate
- */
-#ifdef AP_MPM_WANT_PROCESS_CHILD_STATUS
-int ap_process_child_status(apr_proc_t *pid, apr_exit_why_e why, int status);
-#endif
-
-#if defined(TCP_NODELAY) && !defined(MPE) && !defined(TPF)
-/**
- * Turn off the nagle algorithm for the specified socket.  The nagle algorithm
- * says that we should delay sending partial packets in the hopes of getting
- * more data.  There are bad interactions between persistent connections and
- * Nagle's algorithm that have severe performance penalties.
- * @param s The socket to disable nagle for.
- */
-void ap_sock_disable_nagle(apr_socket_t *s);
-#else
-#define ap_sock_disable_nagle(s)        /* NOOP */
-#endif
-
-#ifdef HAVE_GETPWNAM
-/**
- * Convert a username to a numeric ID
- * @param name The name to convert
- * @return The user id corresponding to a name
- * @deffunc uid_t ap_uname2id(const char *name)
- */
-AP_DECLARE(uid_t) ap_uname2id(const char *name);
-#endif
-
-#ifdef HAVE_GETGRNAM
-/**
- * Convert a group name to a numeric ID
- * @param name The name to convert
- * @return The group id corresponding to a name
- * @deffunc gid_t ap_gname2id(const char *name)
- */
-AP_DECLARE(gid_t) ap_gname2id(const char *name);
-#endif
-
-#define AP_MPM_HARD_LIMITS_FILE APACHE_MPM_DIR "/mpm_default.h"
-
-#ifdef AP_MPM_USES_POD
-
-typedef struct ap_pod_t ap_pod_t;
-
-struct ap_pod_t {
-    apr_file_t *pod_in;
-    apr_file_t *pod_out;
-    apr_pool_t *p;
-    apr_sockaddr_t *sa;
-};
-
-/**
- * Open the pipe-of-death.  The pipe of death is used to tell all child
- * processes that it is time to die gracefully.
- * @param p The pool to use for allocating the pipe
- */
-AP_DECLARE(apr_status_t) ap_mpm_pod_open(apr_pool_t *p, ap_pod_t **pod);
-
-/**
- * Check the pipe to determine if the process has been signalled to die.
- */
-AP_DECLARE(apr_status_t) ap_mpm_pod_check(ap_pod_t *pod);
-
-/**
- * Close the pipe-of-death
- */
-AP_DECLARE(apr_status_t) ap_mpm_pod_close(ap_pod_t *pod);
-
-/**
- * Write data to the pipe-of-death, signalling that one child process
- * should die.
- * @param p The pool to use when allocating any required structures.
- */
-AP_DECLARE(apr_status_t) ap_mpm_pod_signal(ap_pod_t *pod);
-
-/**
- * Write data to the pipe-of-death, signalling that all child process
- * should die.
- * @param p The pool to use when allocating any required structures.
- * @param num The number of child processes to kill
- */
-AP_DECLARE(void) ap_mpm_pod_killpg(ap_pod_t *pod, int num);
-#endif
-
-/*
- * These data members are common to all mpms. Each new mpm
- * should either use the appropriate ap_mpm_set_* function
- * in their command table or create their own for custom or
- * OS specific needs. These should work for most.
- */
-
-/**
- * The maximum number of requests each child thread or
- * process handles before dying off
- */
-#ifdef AP_MPM_WANT_SET_MAX_REQUESTS
-extern int ap_max_requests_per_child;
-const char *ap_mpm_set_max_requests(cmd_parms *cmd, void *dummy,
-                                    const char *arg);
-#endif
-
-/**
- * The filename used to store the process id.
- */
-#ifdef AP_MPM_WANT_SET_PIDFILE
-extern const char *ap_pid_fname;
-const char *ap_mpm_set_pidfile(cmd_parms *cmd, void *dummy,
-                               const char *arg);
-#endif
-
-/**
- * The name of lockfile used when Apache needs to lock the accept() call.
- */
-#ifdef AP_MPM_WANT_SET_LOCKFILE
-extern const char *ap_lock_fname;
-const char *ap_mpm_set_lockfile(cmd_parms *cmd, void *dummy,
-                                const char *arg);
-#endif
-
-/**
- * The system mutex implementation to use for the accept mutex.
- */
-#ifdef AP_MPM_WANT_SET_ACCEPT_LOCK_MECH
-extern apr_lockmech_e ap_accept_lock_mech;
-const char *ap_mpm_set_accept_lock_mech(cmd_parms *cmd, void *dummy,
-                                        const char *arg);
-#endif
-
-/*
- * Set the scorboard file.
- */
-#ifdef AP_MPM_WANT_SET_SCOREBOARD
-const char *ap_mpm_set_scoreboard(cmd_parms *cmd, void *dummy,
-                                  const char *arg);
-#endif
-
-/*
- * The directory that the server changes directory to dump core.
- */
-#ifdef AP_MPM_WANT_SET_COREDUMPDIR
-extern char ap_coredump_dir[MAX_STRING_LEN];
-const char *ap_mpm_set_coredumpdir(cmd_parms *cmd, void *dummy,
-                                   const char *arg);
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* !APACHE_MPM_COMMON_H */
diff --git a/include/pcreposix.h b/include/pcreposix.h
deleted file mode 100644
index a847421..0000000
--- a/include/pcreposix.h
+++ /dev/null
@@ -1,99 +0,0 @@
-/*************************************************
-*       Perl-Compatible Regular Expressions      *
-*************************************************/
-
-/* Copyright (c) 1997-2000 University of Cambridge */
-
-/**
- * @file include/pcreposix.h
- * @brief PCRE definitions
- */
-
-#ifndef _PCREPOSIX_H
-#define _PCREPOSIX_H
-
-/* This is the header for the POSIX wrapper interface to the PCRE Perl-
-Compatible Regular Expression library. It defines the things POSIX says should
-be there. I hope. */
-
-/* Have to include stdlib.h in order to ensure that size_t is defined. */
-
-#include <stdlib.h>
-
-/* Allow for C++ users */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Options defined by POSIX. */
-
-  /** Ignore case */
-#define REG_ICASE     0x01
-  /** Don't match newlines with wildcards */
-#define REG_NEWLINE   0x02
-  /** Don't match BOL */
-#define REG_NOTBOL    0x04
-  /** Don't match EOL */
-#define REG_NOTEOL    0x08
-
-/* These are not used by PCRE, but by defining them we make it easier
-to slot PCRE into existing programs that make POSIX calls. */
-
-  /** UNUSED! */
-#define REG_EXTENDED  0
-  /** UNUSED! */
-#define REG_NOSUB     0
-
-/* Error values. Not all these are relevant or used by the wrapper. */
-
-enum {
-  REG_ASSERT = 1,  /* internal error ? */
-  REG_BADBR,       /* invalid repeat counts in {} */
-  REG_BADPAT,      /* pattern error */
-  REG_BADRPT,      /* ? * + invalid */
-  REG_EBRACE,      /* unbalanced {} */
-  REG_EBRACK,      /* unbalanced [] */
-  REG_ECOLLATE,    /* collation error - not relevant */
-  REG_ECTYPE,      /* bad class */
-  REG_EESCAPE,     /* bad escape sequence */
-  REG_EMPTY,       /* empty expression */
-  REG_EPAREN,      /* unbalanced () */
-  REG_ERANGE,      /* bad range inside [] */
-  REG_ESIZE,       /* expression too big */
-  REG_ESPACE,      /* failed to get memory */
-  REG_ESUBREG,     /* bad back reference */
-  REG_INVARG,      /* bad argument */
-  REG_NOMATCH      /* match failed */
-};
-
-
-/* The structure representing a compiled regular expression. */
-
-typedef struct {
-  void *re_pcre;
-  size_t re_nsub;
-  size_t re_erroffset;
-} regex_t;
-
-/* The structure in which a captured offset is returned. */
-
-typedef int regoff_t;
-
-typedef struct {
-  regoff_t rm_so;
-  regoff_t rm_eo;
-} regmatch_t;
-
-/* The functions */
-
-extern int regcomp(regex_t *, const char *, int);
-extern int regexec(regex_t *, const char *, size_t, regmatch_t *, int);
-extern size_t regerror(int, const regex_t *, char *, size_t);
-extern void regfree(regex_t *);
-
-#ifdef __cplusplus
-}   /* extern "C" */
-#endif
-
-#endif /* End of pcreposix.h */
diff --git a/include/rfc1413.h b/include/rfc1413.h
deleted file mode 100644
index a03dd83..0000000
--- a/include/rfc1413.h
+++ /dev/null
@@ -1,84 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-#ifndef APACHE_RFC1413_H
-#define APACHE_RFC1413_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * @package RFC1413 package
- */
-
-/**
- * Retrieve the remote user name, given socket structures.  This implements
- * RFC1413, which involves querying the client's identd or auth daemon.
- * @param conn The current connection
- * @param srv The current server
- * @return The remote user name
- * @deffunc char *ap_rfc1413(conn_rec *conn, server_rec *srv)
- */
-extern char *ap_rfc1413(conn_rec *conn, server_rec *srv);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif	/* !APACHE_RFC1413_H */
diff --git a/include/scoreboard.h b/include/scoreboard.h
deleted file mode 100644
index f04bc21..0000000
--- a/include/scoreboard.h
+++ /dev/null
@@ -1,241 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-#ifndef APACHE_SCOREBOARD_H
-#define APACHE_SCOREBOARD_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#ifdef HAVE_SYS_TIMES_H
-#include <sys/time.h>
-#include <sys/times.h>
-#elif defined(TPF)
-#include <time.h>
-#endif
-
-#include "ap_config.h"
-#include "apr_hooks.h"
-#include "apr_thread_proc.h"
-#include "apr_portable.h"
-#include "apr_shm.h"
-
-/* Scoreboard file, if there is one */
-#ifndef DEFAULT_SCOREBOARD
-#define DEFAULT_SCOREBOARD "logs/apache_runtime_status"
-#endif
-
-/* Scoreboard info on a process is, for now, kept very brief --- 
- * just status value and pid (the latter so that the caretaker process
- * can properly update the scoreboard when a process dies).  We may want
- * to eventually add a separate set of long_score structures which would
- * give, for each process, the number of requests serviced, and info on
- * the current, or most recent, request.
- *
- * Status values:
- */
-
-#define SERVER_DEAD 0
-#define SERVER_STARTING 1	/* Server Starting up */
-#define SERVER_READY 2		/* Waiting for connection (or accept() lock) */
-#define SERVER_BUSY_READ 3	/* Reading a client request */
-#define SERVER_BUSY_WRITE 4	/* Processing a client request */
-#define SERVER_BUSY_KEEPALIVE 5	/* Waiting for more requests via keepalive */
-#define SERVER_BUSY_LOG 6	/* Logging the request */
-#define SERVER_BUSY_DNS 7	/* Looking up a hostname */
-#define SERVER_CLOSING 8	/* Closing the connection */
-#define SERVER_GRACEFUL 9	/* server is gracefully finishing request */
-#define SERVER_IDLE_KILL 10     /* Server is cleaning up idle children. */
-#define SERVER_NUM_STATUS 11	/* number of status settings */
-
-/* Type used for generation indicies.  Startup and every restart cause a
- * new generation of children to be spawned.  Children within the same
- * generation share the same configuration information -- pointers to stuff
- * created at config time in the parent are valid across children.  However,
- * this can't work effectively with non-forked architectures.  So while the
- * arrays in the scoreboard never change between the parent and forked
- * children, so they do not require shm storage, the contents of the shm
- * may contain no pointers.
- */
-typedef int ap_generation_t;
-
-/* Is the scoreboard shared between processes or not? 
- * Set by the MPM when the scoreboard is created.
- */
-typedef enum {
-    SB_NOT_SHARED = 1,
-    SB_SHARED = 2
-} ap_scoreboard_e;
-
-#define SB_WORKING  0  /* The server is busy and the child is useful. */
-#define SB_IDLE_DIE 1  /* The server is idle and the child is superfluous. */
-                       /*   The child should check for this and exit gracefully. */
-
-/* stuff which is worker specific */
-/***********************WARNING***************************************/
-/* These are things that are used by mod_status. Do not put anything */
-/*   in here that you cannot live without. This structure will not   */
-/*   be available if mod_status is not loaded.                       */
-/*********************************************************************/
-typedef struct worker_score worker_score;
-
-struct worker_score {
-    int thread_num;
-#if APR_HAS_THREADS
-    apr_os_thread_t tid;
-#endif
-    unsigned char status;
-    unsigned long access_count;
-    apr_off_t     bytes_served;
-    unsigned long my_access_count;
-    apr_off_t     my_bytes_served;
-    apr_off_t     conn_bytes;
-    unsigned short conn_count;
-    apr_time_t start_time;
-    apr_time_t stop_time;
-#ifdef HAVE_TIMES
-    struct tms times;
-#endif
-    apr_time_t last_used;
-    char client[32];		/* Keep 'em small... */
-    char request[64];		/* We just want an idea... */
-    char vhost[32];	        /* What virtual host is being accessed? */
-};
-
-typedef struct {
-    int             server_limit;
-    int             thread_limit;
-    ap_scoreboard_e sb_type;
-    ap_generation_t running_generation;	/* the generation of children which
-                                         * should still be serving requests. */
-    apr_time_t restart_time;
-} global_score;
-
-/* stuff which the parent generally writes and the children rarely read */
-typedef struct process_score process_score;
-struct process_score{
-    pid_t pid;
-    ap_generation_t generation;	/* generation of this child */
-    ap_scoreboard_e sb_type;
-    int quiescing;          /* the process whose pid is stored above is
-                             * going down gracefully
-                             */
-};
-
-/* Scoreboard is now in 'local' memory, since it isn't updated once created,
- * even in forked architectures.  Child created-processes (non-fork) will
- * set up these indicies into the (possibly relocated) shmem records.
- */
-typedef struct {
-    global_score *global;
-    process_score *parent;
-    worker_score **servers;
-} scoreboard;
-
-typedef struct ap_sb_handle_t ap_sb_handle_t;
-
-AP_DECLARE(int) ap_exists_scoreboard_image(void);
-AP_DECLARE(void) ap_increment_counts(ap_sb_handle_t *sbh, request_rec *r);
-
-int ap_create_scoreboard(apr_pool_t *p, ap_scoreboard_e t);
-apr_status_t ap_reopen_scoreboard(apr_pool_t *p, apr_shm_t **shm, int detached);
-void ap_init_scoreboard(void *shared_score);
-AP_DECLARE(int) ap_calc_scoreboard_size(void);
-apr_status_t ap_cleanup_scoreboard(void *d);
-void ap_sync_scoreboard_image(void);
-
-AP_DECLARE(void) ap_create_sb_handle(ap_sb_handle_t **new_sbh, apr_pool_t *p,
-                                     int child_num, int thread_num);
-    
-void update_scoreboard_global(void);
-AP_DECLARE(int) find_child_by_pid(apr_proc_t *pid);
-AP_DECLARE(int) ap_update_child_status(ap_sb_handle_t *sbh, int status, request_rec *r);
-AP_DECLARE(int) ap_update_child_status_from_indexes(int child_num, int thread_num,
-                                                    int status, request_rec *r);
-void ap_time_process_request(int child_num, int thread_num, int status);
-
-AP_DECLARE(worker_score *) ap_get_scoreboard_worker(int x, int y);
-AP_DECLARE(process_score *) ap_get_scoreboard_process(int x);
-AP_DECLARE(global_score *) ap_get_scoreboard_global(void);
-
-AP_DECLARE_DATA extern scoreboard *ap_scoreboard_image;
-AP_DECLARE_DATA extern const char *ap_scoreboard_fname;
-AP_DECLARE_DATA extern int ap_extended_status;
-
-AP_DECLARE_DATA extern ap_generation_t volatile ap_my_generation;
-
-/* Hooks */
-/**
-  * Hook for post scoreboard creation, pre mpm.
-  * @param p       Apache pool to allocate from.
-  * @param sb_type 
-  * @ingroup hooks
-  * @return OK or DECLINE on success; anything else is a error
-  */  
-AP_DECLARE_HOOK(int, pre_mpm, (apr_pool_t *p, ap_scoreboard_e sb_type))
-
-/* for time_process_request() in http_main.c */
-#define START_PREQUEST 1
-#define STOP_PREQUEST  2
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif	/* !APACHE_SCOREBOARD_H */
diff --git a/include/util_cfgtree.h b/include/util_cfgtree.h
deleted file mode 100644
index d63c748..0000000
--- a/include/util_cfgtree.h
+++ /dev/null
@@ -1,117 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-#ifndef AP_CONFTREE_H
-#define AP_CONFTREE_H
-
-#include "ap_config.h"
-
-/**
- * @package Config Tree Package
- */
-
-typedef struct ap_directive_t ap_directive_t;
-
-/**
- * Structure used to build the config tree.  The config tree only stores
- * the directives that will be active in the running server.  Directives
- * that contain other directions, such as <Directory ...> cause a sub-level
- * to be created, where the included directives are stored.  The closing
- * directive (</Directory>) is not stored in the tree.
- */
-struct ap_directive_t {
-    /** The current directive */
-    const char *directive;
-    /** The arguments for the current directive, stored as a space 
-     *  separated list */
-    const char *args;
-    /** The next directive node in the tree
-     *  @defvar ap_directive_t *next */
-    struct ap_directive_t *next;
-    /** The first child node of this directive 
-     *  @defvar ap_directive_t *first_child */
-    struct ap_directive_t *first_child;
-    /** The parent node of this directive 
-     *  @defvar ap_directive_t *parent */
-    struct ap_directive_t *parent;
-
-    /** directive's module can store add'l data here */
-    void *data;
-
-    /* ### these may go away in the future, but are needed for now */
-    /** The name of the file this directive was found in */
-    const char *filename;
-    /** The line number the directive was on */
-    int line_num;
-};
-
-/**
- * The root of the configuration tree
- * @defvar ap_directive_t *conftree
- */
-AP_DECLARE_DATA extern ap_directive_t *ap_conftree;
-
-/**
- * Add a node to the configuration tree.
- * @param parent The current parent node.  If the added node is a first_child,
-                 then this is changed to the current node
- * @param current The current node
- * @param toadd The node to add to the tree
- * @param child Is the node to add a child node
- * @return the added node
- */
-ap_directive_t *ap_add_node(ap_directive_t **parent, ap_directive_t *current, 
-                            ap_directive_t *toadd, int child);
-
-#endif
diff --git a/include/util_charset.h b/include/util_charset.h
deleted file mode 100644
index c858e35..0000000
--- a/include/util_charset.h
+++ /dev/null
@@ -1,96 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-#ifndef APACHE_UTIL_CHARSET_H
-#define APACHE_UTIL_CHARSET_H
-
-#ifdef APACHE_XLATE
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * @package charset conversion
- */
-#include "apr_xlate.h"
-
-/** On EBCDIC machine this is a translation handle used to translate the 
- *  headers from the local machine format to ASCII for network transmission.
- *  On an ASCII machine this is NULL */
-extern apr_xlate_t *ap_hdrs_to_ascii;
-/** On EBCDIC machine this is a translation handle used to translate the
- *  headers from ASCII to the local machine format after network transmission.
- *  On an ASCII machine this is NULL */
-extern apr_xlate_t *ap_hdrs_from_ascii;
-/** On EBCDIC machine this is a translation handle used to translate the 
- *  content from the local machine format to ASCII for network transmission.
- *  On an ASCII machine this is NULL */
-extern apr_xlate_t *ap_locale_to_ascii;
-/** On EBCDIC machine this is a translation handle used to translate the
- *  content from ASCII to the local machine format after network transmission.
- *  On an ASCII machine this is NULL */
-extern apr_xlate_t *ap_locale_from_ascii;
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif  /* APACHE_XLATE */
-    
-#endif  /* !APACHE_UTIL_CHARSET_H */
diff --git a/include/util_ebcdic.h b/include/util_ebcdic.h
deleted file mode 100644
index 8b04d5e..0000000
--- a/include/util_ebcdic.h
+++ /dev/null
@@ -1,120 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-#ifndef APACHE_UTIL_EBCDIC_H
-#define APACHE_UTIL_EBCDIC_H
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include "apr_xlate.h"
-#include "httpd.h"
-#include "util_charset.h"
-
-/**
- * @package Utilities for EBCDIC conversion
- */
-
-#if APR_CHARSET_EBCDIC
-
-/**
- * Setup all of the global translation handlers
- * @param pool pool to allocate out of
- */
-apr_status_t ap_init_ebcdic(apr_pool_t *pool);
-
-/**
- * Convert protocol data from the implementation character
- * set to ASCII.
- * @param buffer buffer to translate
- * @param len number of bytes to translate
- */
-void ap_xlate_proto_to_ascii(char *buffer, apr_size_t len);
-
-/**
- * Convert protocol data to the implementation character
- * set from ASCII.
- * @param buffer buffer to translate
- * @param len number of bytes to translate
- */
-void ap_xlate_proto_from_ascii(char *buffer, apr_size_t len);
-
-/**
- * Convert protocol data from the implementation charater
- * set to ASCII, then send it.
- * @param r   the current request
- * @param ... the strings to write, followed by a NULL pointer
- */
-int ap_rvputs_proto_in_ascii(request_rec *r, ...);
-
-#ifdef __cplusplus
-}
-#endif
-
-#else   /* APR_CHARSET_EBCDIC */
-
-#define ap_xlate_proto_to_ascii(x,y)          /* NOOP */
-#define ap_xlate_proto_from_ascii(x,y)        /* NOOP */
-
-#define ap_rvputs_proto_in_ascii  ap_rvputs
-
-#endif  /* APR_CHARSET_EBCDIC */
-    
-#endif  /* !APACHE_UTIL_EBCDIC_H */
diff --git a/include/util_filter.h b/include/util_filter.h
deleted file mode 100644
index b6ffc86..0000000
--- a/include/util_filter.h
+++ /dev/null
@@ -1,523 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-#ifndef AP_FILTER_H
-#define AP_FILTER_H
-
-#include "apr.h"
-#include "apr_buckets.h"
-
-#include "httpd.h"
-
-#if APR_HAVE_STDARG_H
-#include <stdarg.h>
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * @file util_filter.h
- * @brief Apache filter library
- */
-
-/** Returned by the bottom-most filter if no data was written.
- *  @see ap_pass_brigade(). */
-#define AP_NOBODY_WROTE         -1
-/** Returned by the bottom-most filter if no data was read.
- *  @see ap_get_brigade(). */
-#define AP_NOBODY_READ          -2
-/** Returned when?? @bug find out when! */
-#define AP_FILTER_ERROR         -3
-
-/**
- * input filtering modes
- */
-typedef enum {
-    /** The filter should return at most readbytes data. */
-    AP_MODE_READBYTES,
-    /** The filter should return at most one line of CRLF data.
-     *  (If a potential line is too long or no CRLF is found, the 
-     *   filter may return partial data).
-     */
-    AP_MODE_GETLINE,
-    /** The filter should implicitly eat any CRLF pairs that it sees. */
-    AP_MODE_EATCRLF,
-    /** The filter read should be treated as speculative and any returned
-     *  data should be stored for later retrieval in another mode. */
-    AP_MODE_SPECULATIVE,
-    /** The filter read should be exhaustive and read until it can not
-     *  read any more.
-     *  Use this mode with extreme caution.
-     */
-    AP_MODE_EXHAUSTIVE,
-    /** The filter should initialize the connection if needed,
-     *  NNTP or FTP over SSL for example.
-     */
-    AP_MODE_INIT
-} ap_input_mode_t;
-
-/**
- * @defgroup filter FILTER CHAIN
- *
- * Filters operate using a "chaining" mechanism. The filters are chained
- * together into a sequence. When output is generated, it is passed through
- * each of the filters on this chain, until it reaches the end (or "bottom")
- * and is placed onto the network.
- *
- * The top of the chain, the code generating the output, is typically called
- * a "content generator." The content generator's output is fed into the
- * filter chain using the standard Apache output mechanisms: ap_rputs(),
- * ap_rprintf(), ap_rwrite(), etc.
- *
- * Each filter is defined by a callback. This callback takes the output from
- * the previous filter (or the content generator if there is no previous
- * filter), operates on it, and passes the result to the next filter in the
- * chain. This pass-off is performed using the ap_fc_* functions, such as
- * ap_fc_puts(), ap_fc_printf(), ap_fc_write(), etc.
- *
- * When content generation is complete, the system will pass an "end of
- * stream" marker into the filter chain. The filters will use this to flush
- * out any internal state and to detect incomplete syntax (for example, an
- * unterminated SSI directive).
- */
-
-/* forward declare the filter type */
-typedef struct ap_filter_t ap_filter_t;
-
-/**
- * @name Filter callbacks
- *
- * This function type is used for filter callbacks. It will be passed a
- * pointer to "this" filter, and a "bucket" containing the content to be
- * filtered.
- *
- * In filter->ctx, the callback will find its context. This context is
- * provided here, so that a filter may be installed multiple times, each
- * receiving its own per-install context pointer.
- *
- * Callbacks are associated with a filter definition, which is specified
- * by name. See ap_register_input_filter() and ap_register_output_filter()
- * for setting the association between a name for a filter and its 
- * associated callback (and other information).
- *
- * The *bucket structure (and all those referenced by ->next and ->prev)
- * should be considered "const". The filter is allowed to modify the
- * next/prev to insert/remove/replace elements in the bucket list, but
- * the types and values of the individual buckets should not be altered.
- *
- * The return value of a filter should be an APR status value.
- * 
- * @ingroup filter
- * @{
- */
-typedef apr_status_t (*ap_out_filter_func)(ap_filter_t *f, apr_bucket_brigade *b);
-typedef apr_status_t (*ap_in_filter_func)(ap_filter_t *f, apr_bucket_brigade *b, 
-                                          ap_input_mode_t mode, apr_read_type_e block, apr_off_t readbytes);
-
-typedef union ap_filter_func {
-    ap_out_filter_func out_func;
-    ap_in_filter_func in_func;
-} ap_filter_func;
-
-/** @} */
-
-/**
- * Filters have different types/classifications. These are used to group
- * and sort the filters to properly sequence their operation.
- *
- * The types have a particular sort order, which allows us to insert them
- * into the filter chain in a determistic order. Within a particular grouping,
- * the ordering is equivalent to the order of calls to ap_add_*_filter().
- */
-typedef enum {
-    /** These filters are used to alter the content that is passed through
-     *  them. Examples are SSI or PHP. */
-    AP_FTYPE_RESOURCE     = 10,
-    /** These filters are used to alter the content as a whole, but after all
-     *  AP_FTYPE_RESOURCE filters are executed.  These filters should not
-     *  change the content-type.  An example is deflate.  */
-    AP_FTYPE_CONTENT_SET  = 20,
-    /** These filters are used to handle the protocol between server and
-     *  client.  Examples are HTTP and POP. */
-    AP_FTYPE_PROTOCOL     = 30,
-    /** These filters implement transport encodings (e.g., chunking). */
-    AP_FTYPE_TRANSCODE    = 40,
-    /** These filters will alter the content, but in ways that are
-     *  more strongly associated with the connection.  Examples are
-     *  splitting an HTTP connection into multiple requests and
-     *  buffering HTTP responses across multiple requests.
-     *
-     *  It is important to note that these types of filters are not
-     *  allowed in a sub-request. A sub-request's output can certainly
-     *  be filtered by ::AP_FTYPE_RESOURCE filters, but all of the "final
-     *  processing" is determined by the main request. */
-    AP_FTYPE_CONNECTION  = 50,
-    /** These filters don't alter the content.  They are responsible for
-     *  sending/receiving data to/from the client. */
-    AP_FTYPE_NETWORK     = 60
-} ap_filter_type;
-
-/**
- * This is the request-time context structure for an installed filter (in
- * the output filter chain). It provides the callback to use for filtering,
- * the request this filter is associated with (which is important when
- * an output chain also includes sub-request filters), the context for this
- * installed filter, and the filter ordering/chaining fields.
- *
- * Filter callbacks are free to use ->ctx as they please, to store context
- * during the filter process. Generally, this is superior over associating
- * the state directly with the request. A callback should not change any of
- * the other fields.
- */
-
-typedef struct ap_filter_rec_t ap_filter_rec_t;
-
-/**
- * This structure is used for recording information about the
- * registered filters. It associates a name with the filter's callback
- * and filter type.
- *
- * At the moment, these are simply linked in a chain, so a ->next pointer
- * is available.
- */
-struct ap_filter_rec_t {
-    /** The registered name for this filter */
-    const char *name;
-    /** The function to call when this filter is invoked. */
-    ap_filter_func filter_func;
-    /** The type of filter, either AP_FTYPE_CONTENT or AP_FTYPE_CONNECTION.  
-     * An AP_FTYPE_CONTENT filter modifies the data based on information 
-     * found in the content.  An AP_FTYPE_CONNECTION filter modifies the 
-     * data based on the type of connection.
-     */
-    ap_filter_type ftype;
-
-    /** The next filter_rec in the list */
-    struct ap_filter_rec_t *next;
-};
-
-/**
- * The representation of a filter chain.  Each request has a list
- * of these structures which are called in turn to filter the data.  Sub
- * requests get an exact copy of the main requests filter chain.
- */
-struct ap_filter_t {
-     /** The internal representation of this filter.  This includes
-      *  the filter's name, type, and the actual function pointer.
-     */
-    ap_filter_rec_t *frec;
-
-    /** A place to store any data associated with the current filter */
-    void *ctx;
-
-    /** The next filter in the chain */
-    ap_filter_t *next;
-
-    /** The request_rec associated with the current filter.  If a sub-request
-     *  adds filters, then the sub-request is the request associated with the
-     *  filter.
-     */
-    request_rec *r;
-
-    /** The conn_rec associated with the current filter.  This is analogous
-     *  to the request_rec, except that it is used for input filtering.
-     */
-    conn_rec *c;
-};
-
-/**
- * Get the current bucket brigade from the next filter on the filter
- * stack.  The filter returns an apr_status_t value.  If the bottom-most 
- * filter doesn't read from the network, then ::AP_NOBODY_READ is returned.
- * The bucket brigade will be empty when there is nothing left to get.
- * @param filter The next filter in the chain
- * @param bucket The current bucket brigade
- * @param mode   The way in which the data should be read
- * @param block  How the operations should be performed
- *               ::APR_BLOCK_READ, ::APR_NONBLOCK_READ
- * @param readbytes How many bytes to read from the next filter.
- */
-AP_DECLARE(apr_status_t) ap_get_brigade(ap_filter_t *filter, 
-                                        apr_bucket_brigade *bucket, 
-                                        ap_input_mode_t mode,
-                                        apr_read_type_e block, 
-                                        apr_off_t readbytes);
-
-/**
- * Pass the current bucket brigade down to the next filter on the filter
- * stack.  The filter returns an apr_status_t value.  If the bottom-most 
- * filter doesn't write to the network, then ::AP_NOBODY_WROTE is returned.
- * @param filter The next filter in the chain
- * @param bucket The current bucket brigade
- */
-AP_DECLARE(apr_status_t) ap_pass_brigade(ap_filter_t *filter, apr_bucket_brigade *bucket);
-
-/**
- * This function is used to register an input filter with the system. 
- * After this registration is performed, then a filter may be added 
- * into the filter chain by using ap_add_input_filter() and simply 
- * specifying the name.
- *
- * @param name The name to attach to the filter function
- * @param filter_func The filter function to name
- * @param ftype The type of filter function, either ::AP_FTYPE_CONTENT or ::
- *        AP_FTYPE_CONNECTION
- * @see add_input_filter()
- */
-AP_DECLARE(ap_filter_rec_t *) ap_register_input_filter(const char *name,
-					  ap_in_filter_func filter_func,
-					  ap_filter_type ftype);
-/**
- * This function is used to register an output filter with the system. 
- * After this registration is performed, then a filter may be added 
- * into the filter chain by using ap_add_output_filter() and simply 
- * specifying the name.
- *
- * @param name The name to attach to the filter function
- * @param filter_func The filter function to name
- * @param ftype The type of filter function, either ::AP_FTYPE_CONTENT or
- *              ::AP_FTYPE_CONNECTION
- * @see ap_add_output_filter()
- */
-AP_DECLARE(ap_filter_rec_t *) ap_register_output_filter(const char *name,
-					    ap_out_filter_func filter_func,
-					    ap_filter_type ftype);
-
-/**
- * Adds a named filter into the filter chain on the specified request record.
- * The filter will be installed with the specified context pointer.
- *
- * Filters added in this way will always be placed at the end of the filters
- * that have the same type (thus, the filters have the same order as the
- * calls to ap_add_filter). If the current filter chain contains filters
- * from another request, then this filter will be added before those other
- * filters.
- * 
- * To re-iterate that last comment.  This function is building a FIFO
- * list of filters.  Take note of that when adding your filter to the chain.
- *
- * @param name The name of the filter to add
- * @param ctx Context data to provide to the filter
- * @param r The request to add this filter for (or NULL if it isn't associated with a request)
- * @param c The connection to add the fillter for
- */
-AP_DECLARE(ap_filter_t *) ap_add_input_filter(const char *name, void *ctx,
-					      request_rec *r, conn_rec *c);
-
-/**
- * Variant of ap_add_input_filter() that accepts a registered filter handle
- * (as returned by ap_register_input_filter()) rather than a filter name
- *
- * @param name The filter to add
- * @param ctx Context data to provide to the filter
- * @param r The request to add this filter for (or NULL if it isn't associated with a request)
- * @param c The connection to add the fillter for
- */
-AP_DECLARE(ap_filter_t *) ap_add_input_filter_handle(ap_filter_rec_t *f,
-                                                     void *ctx,
-                                                     request_rec *r,
-                                                     conn_rec *c);
-
-/**
- * Returns the filter handle for use with ap_add_input_filter_handle.
- *
- * @param name The filter name to look up
- */
-AP_DECLARE(ap_filter_rec_t *) ap_get_input_filter_handle(const char *name);
-
-/**
- * Add a filter to the current request.  Filters are added in a FIFO manner.
- * The first filter added will be the first filter called.
- * @param name The name of the filter to add
- * @param ctx Context data to set in the filter
- * @param r The request to add this filter for (or NULL if it isn't associated with a request)
- * @param c The connection to add this filter for
- */
-AP_DECLARE(ap_filter_t *) ap_add_output_filter(const char *name, void *ctx, 
-					       request_rec *r, conn_rec *c);
-
-/**
- * Variant of ap_add_output_filter() that accepts a registered filter handle
- * (as returned by ap_register_output_filter()) rather than a filter name
- *
- * @param name The filter to add
- * @param r The request to add this filter for (or NULL if it isn't associated with a request)
- * @param c The connection to add the fillter for
- */
-AP_DECLARE(ap_filter_t *) ap_add_output_filter_handle(ap_filter_rec_t *f,
-                                                      void *ctx,
-                                                      request_rec *r,
-                                                      conn_rec *c);
-/**
- * Returns the filter handle for use with ap_add_output_filter_handle.
- *
- * @param name The filter name to look up
- */
-AP_DECLARE(ap_filter_rec_t *) ap_get_output_filter_handle(const char *name);
-
-/**
- * Remove an input filter from either the request or connection stack
- * it is associated with.
- * @param f The filter to remove
- */
-
-AP_DECLARE(void) ap_remove_input_filter(ap_filter_t *f);
-
-/**
- * Remove an output filter from either the request or connection stack
- * it is associated with.
- * @param f The filter to remove
- */
-
-AP_DECLARE(void) ap_remove_output_filter(ap_filter_t *f);
-
-/* The next two filters are for abstraction purposes only.  They could be
- * done away with, but that would require that we break modules if we ever
- * want to change our filter registration method.  The basic idea, is that
- * all filters have a place to store data, the ctx pointer.  These functions
- * fill out that pointer with a bucket brigade, and retrieve that data on
- * the next call.  The nice thing about these functions, is that they
- * automatically concatenate the bucket brigades together for you.  This means
- * that if you have already stored a brigade in the filters ctx pointer, then
- * when you add more it will be tacked onto the end of that brigade.  When
- * you retrieve data, if you pass in a bucket brigade to the get function,
- * it will append the current brigade onto the one that you are retrieving.
- */
-
-/**
- * prepare a bucket brigade to be setaside.  If a different brigade was 
- * set-aside earlier, then the two brigades are concatenated together.
- * @param f The current filter
- * @param save_to The brigade that was previously set-aside.  Regardless, the
- *             new bucket brigade is returned in this location.
- * @param b The bucket brigade to save aside.  This brigade is always empty
- *          on return
- * @param p Ensure that all data in the brigade lives as long as this pool
- */
-AP_DECLARE(apr_status_t) ap_save_brigade(ap_filter_t *f, apr_bucket_brigade **save_to,
-                                         apr_bucket_brigade **b, apr_pool_t *p);    
-
-/**
- * Flush function for apr_brigade_* calls.  This calls ap_pass_brigade
- * to flush the brigade if the brigade buffer overflows.
- * @param bb The brigade to flush
- * @param ctx The filter to pass the brigade to
- */
-AP_DECLARE_NONSTD(apr_status_t) ap_filter_flush(apr_bucket_brigade *bb, void *ctx);
-
-/**
- * Flush the current brigade down the filter stack.
- * @param f The current filter
- * @param bb The brigade to flush
- */
-AP_DECLARE(apr_status_t) ap_fflush(ap_filter_t *f, apr_bucket_brigade *bb);
-
-/**
- * Write a buffer for the current filter, buffering if possible.
- * @param f the filter doing the writing
- * @param bb The brigade to buffer into
- * @param data The data to write
- * @param nbyte The number of bytes in the data
- */
-#define ap_fwrite(f, bb, data, nbyte) \
-	apr_brigade_write(bb, ap_filter_flush, f, data, nbyte)
-
-/**
- * Write a buffer for the current filter, buffering if possible.
- * @param f the filter doing the writing
- * @param bb The brigade to buffer into
- * @param str The string to write
- */
-#define ap_fputs(f, bb, str) \
-	apr_brigade_puts(bb, ap_filter_flush, f, str)
-
-/**
- * Write a character for the current filter, buffering if possible.
- * @param f the filter doing the writing
- * @param bb The brigade to buffer into
- * @param c The character to write
- */
-#define ap_fputc(f, bb, c) \
-	apr_brigade_putc(bb, ap_filter_flush, f, c)
-
-/**
- * Write an unspecified number of strings to the current filter
- * @param f the filter doing the writing
- * @param bb The brigade to buffer into
- * @param ... The strings to write
- */
-AP_DECLARE_NONSTD(apr_status_t) ap_fputstrs(ap_filter_t *f,
-                                            apr_bucket_brigade *bb,
-                                            ...);
-
-/**
- * Output data to the filter in printf format
- * @param f the filter doing the writing
- * @param bb The brigade to buffer into
- * @param fmt The format string
- * @param ... The argumets to use to fill out the format string
- */
-AP_DECLARE_NONSTD(apr_status_t) ap_fprintf(ap_filter_t *f,
-                                           apr_bucket_brigade *bb,
-                                           const char *fmt,
-                                           ...)
-        __attribute__((format(printf,3,4)));                                    
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif	/* !AP_FILTER_H */
diff --git a/include/util_ldap.h b/include/util_ldap.h
deleted file mode 100644
index cb0c7f5..0000000
--- a/include/util_ldap.h
+++ /dev/null
@@ -1,289 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-#ifndef UTIL_LDAP_H
-#define UTIL_LDAP_H
-
-#include <apr_ldap.h>
-
-/* this whole thing disappears if LDAP is not enabled */
-#ifdef APU_HAS_LDAP
-
-/* APR header files */
-#include <apr_thread_mutex.h>
-#include <apr_thread_rwlock.h>
-#include <apr_tables.h>
-#include <apr_time.h>
-
-/* Apache header files */
-#include "ap_config.h"
-#include "httpd.h"
-#include "http_config.h"
-#include "http_core.h"
-#include "http_log.h"
-#include "http_protocol.h"
-#include "http_request.h"
-
-
-/*
- * LDAP Connections
- */
-
-/* Values that the deref member can have */
-typedef enum {
-    never=LDAP_DEREF_NEVER, 
-    searching=LDAP_DEREF_SEARCHING, 
-    finding=LDAP_DEREF_FINDING, 
-    always=LDAP_DEREF_ALWAYS
-} deref_options;
-
-/* Structure representing an LDAP connection */
-typedef struct util_ldap_connection_t {
-    LDAP *ldap;
-    apr_pool_t *pool;			/* Pool from which this connection is created */
-    apr_thread_mutex_t *lock;			/* Lock to indicate this connection is in use */
-    int bound;				/* Flag to indicate whether this connection is bound yet */
-
-    const char *host;				/* Name of the LDAP server (or space separated list) */
-    int port;				/* Port of the LDAP server */
-    deref_options deref;		/* how to handle alias dereferening */
-
-    const char *binddn;	                /* DN to bind to server (can be NULL) */
-    const char *bindpw;	                /* Password to bind to server (can be NULL) */
-
-    int netscapessl;			/* True if use Netscape SSL connection */
-    const char *certtdb;			/* Path to Netscape CA database */
-
-    int starttls;                 	/* True if StartTLS is enabled */
-    int withtls;			/* True if StartTLS on this connection */
-
-    const char *reason;			/* Reason for an error failure */
-
-    struct util_ldap_connection_t *next;
-} util_ldap_connection_t;
-
-/* LDAP cache state information */ 
-typedef struct util_ldap_state_t {
-    apr_pool_t *pool;		/* pool from which this state is allocated */
-    apr_thread_mutex_t *mutex;		/* mutex lock for the connection list */
-
-    apr_size_t cache_bytes;	/* Size (in bytes) of shared memory cache */
-    long search_cache_ttl;	/* TTL for search cache */
-    long search_cache_size;	/* Size (in entries) of search cache */
-    long compare_cache_ttl;	/* TTL for compare cache */
-    long compare_cache_size;	/* Size (in entries) of compare cache */
-
-    struct util_ldap_connection_t *connections;
-#ifdef APU_HAS_LDAP_NETSCAPE_SSL
-    int have_certdb;
-#endif
-} util_ldap_state_t;
-
-
-/**
- * Open a connection to an LDAP server
- * @param ldc A structure containing the expanded details of the server
- *            to connect to. The handle to the LDAP connection is returned
- *            as ldc->ldap.
- * @tip This function connects to the LDAP server and binds. It does not
- *      connect if already connected (ldc->ldap != NULL). Does not bind
- *      if already bound.
- * @return If successful LDAP_SUCCESS is returned.
- * @deffunc int util_ldap_connection_open(util_ldap_connection_t *ldc)
- */
-int util_ldap_connection_open(util_ldap_connection_t *ldc);
-
-/**
- * Close a connection to an LDAP server
- * @param ldc A structure containing the expanded details of the server
- *            that was connected.
- * @tip This function unbinds from the LDAP server, and clears ldc->ldap.
- *      It is possible to rebind to this server again using the same ldc
- *      structure, using apr_ldap_open_connection().
- * @deffunc util_ldap_close_connection(util_ldap_connection_t *ldc)
- */
-void util_ldap_connection_close(util_ldap_connection_t *ldc);
-
-/**
- * Destroy a connection to an LDAP server
- * @param ldc A structure containing the expanded details of the server
- *            that was connected.
- * @tip This function is registered with the pool cleanup to close down the
- *      LDAP connections when the server is finished with them.
- * @deffunc apr_status_t util_ldap_connection_destroy(util_ldap_connection_t *ldc)
- */
-apr_status_t util_ldap_connection_destroy(void *param);
-
-/**
- * Find a connection in a list of connections
- * @param r The request record
- * @param host The hostname to connect to (multiple hosts space separated)
- * @param port The port to connect to
- * @param binddn The DN to bind with
- * @param bindpw The password to bind with
- * @param deref The dereferencing behavior
- * @param netscapessl Start SSL on the connection using ldapssl_client_init() [0|1]
- * @param starttls Start TLS using STARTTLS parameter [0|1]
- * @tip Once a connection is found and returned, a lock will be acquired to
- *      lock that particular connection, so that another thread does not try and
- *      use this connection while it is busy. Once you are finished with a connection,
- *      apr_ldap_connection_close() must be called to release this connection.
- * @deffunc util_ldap_connection_t *util_ldap_connection_find(request_rec *r, const char *host, int port,
- *                                                           const char *binddn, const char *bindpw, deref_options deref,
- *                                                           int netscapessl, int starttls)
- */
-util_ldap_connection_t *util_ldap_connection_find(request_rec *r, const char *host, int port,
-                                                  const char *binddn, const char *bindpw, deref_options deref,
-                                                  int netscapessl, int starttls);
-
-
-/**
- * Compare two DNs for sameness
- * @param r The request record
- * @param ldc The LDAP connection being used.
- * @param url The URL of the LDAP connection - used for deciding which cache to use.
- * @param dn The first DN to compare.
- * @param reqdn The DN to compare the first DN to.
- * @param compare_dn_on_server Flag to determine whether the DNs should be checked using
- *                             LDAP calls or with a direct string comparision. A direct
- *                             string comparison is faster, but not as accurate - false
- *                             negative comparisons are possible.
- * @tip Two DNs can be equal and still fail a string comparison. Eg "dc=example,dc=com"
- *      and "dc=example, dc=com". Use the compare_dn_on_server unless there are serious
- *      performance issues.
- * @deffunc int util_ldap_cache_comparedn(request_rec *r, util_ldap_connection_t *ldc,
- *                                        const char *url, const char *dn, const char *reqdn,
- *                                        int compare_dn_on_server)
- */
-int util_ldap_cache_comparedn(request_rec *r, util_ldap_connection_t *ldc, 
-                              const char *url, const char *dn, const char *reqdn, 
-                              int compare_dn_on_server);
-
-/**
- * A generic LDAP compare function
- * @param r The request record
- * @param ldc The LDAP connection being used.
- * @param url The URL of the LDAP connection - used for deciding which cache to use.
- * @param dn The DN of the object in which we do the compare.
- * @param attrib The attribute within the object we are comparing for.
- * @param value The value of the attribute we are trying to compare for. 
- * @tip Use this function to determine whether an attribute/value pair exists within an
- *      object. Typically this would be used to determine LDAP group membership.
- * @deffunc int util_ldap_cache_compare(request_rec *r, util_ldap_connection_t *ldc,
- *                                      const char *url, const char *dn, const char *attrib, const char *value)
- */
-int util_ldap_cache_compare(request_rec *r, util_ldap_connection_t *ldc,
-                            const char *url, const char *dn, const char *attrib, const char *value);
-
-/**
- * Checks a username/password combination by binding to the LDAP server
- * @param r The request record
- * @param ldc The LDAP connection being used.
- * @param url The URL of the LDAP connection - used for deciding which cache to use.
- * @param basedn The Base DN to search for the user in.
- * @param scope LDAP scope of the search.
- * @param attrs LDAP attributes to return in search.
- * @param filter The user to search for in the form of an LDAP filter. This filter must return
- *               exactly one user for the check to be successful.
- * @param bindpw The user password to bind as.
- * @param binddn The DN of the user will be returned in this variable.
- * @param retvals The values corresponding to the attributes requested in the attrs array.
- * @tip The filter supplied will be searched for. If a single entry is returned, an attempt
- *      is made to bind as that user. If this bind succeeds, the user is not validated.
- * @deffunc int util_ldap_cache_checkuserid(request_rec *r, util_ldap_connection_t *ldc,
- *                                          char *url, const char *basedn, int scope, char **attrs,
- *                                          char *filter, char *bindpw, char **binddn, char ***retvals)
- */
-int util_ldap_cache_checkuserid(request_rec *r, util_ldap_connection_t *ldc,
-                              const char *url, const char *basedn, int scope, char **attrs,
-                              const char *filter, const char *bindpw, const char **binddn, const char ***retvals);
-
-/* from apr_ldap_cache.c */
-
-/**
- * Init the LDAP cache
- * @param pool The pool to use to initialise the cache
- * @param reqsize The size of the shared memory segement to request. A size
- *                of zero requests the max size possible from
- *                apr_shmem_init()
- * @deffunc void util_ldap_cache_init(apr_pool_t *p)
- * @return The status code returned is the status code of the
- *         apr_smmem_init() call. Regardless of the status, the cache
- *         will be set up at least for in-process or in-thread operation.
- */
-apr_status_t util_ldap_cache_init(apr_pool_t *pool, apr_size_t reqsize);
-
-/**
- * Display formatted stats for cache
- * @param The pool to allocate the returned string from
- * @tip This function returns a string allocated from the provided pool that describes
- *      various stats about the cache.
- * @deffunc char *util_ald_cache_display(apr_pool_t *pool)
- */
-char *util_ald_cache_display(apr_pool_t *pool);
-
-
-/* from apr_ldap_cache_mgr.c */
-
-/**
- * Display formatted stats for cache
- * @param The pool to allocate the returned string from
- * @tip This function returns a string allocated from the provided pool that describes
- *      various stats about the cache.
- * @deffunc char *util_ald_cache_display(apr_pool_t *pool)
- */
-char *util_ald_cache_display(apr_pool_t *pool);
-
-#endif /* APU_HAS_LDAP */
-#endif /* UTIL_LDAP_H */
diff --git a/include/util_md5.h b/include/util_md5.h
deleted file mode 100644
index 518e514..0000000
--- a/include/util_md5.h
+++ /dev/null
@@ -1,112 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-#ifndef APACHE_UTIL_MD5_H
-#define APACHE_UTIL_MD5_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * @package Apache MD5 library
- */
-
-#include "apr_md5.h"
-
-/**
- * Create an MD5 checksum of a given string
- * @param a Pool to allocate out of
- * @param string String to get the checksum of
- * @return The checksum
- * @deffunc char *ap_md5(apr_pool_t *a, const unsigned char *string)
- */
-AP_DECLARE(char *) ap_md5(apr_pool_t *a, const unsigned char *string);
-
-/**
- * Create an MD5 checksum of a string of binary data
- * @param a Pool to allocate out of
- * @param buf Buffer to generate checksum for
- * @param len The length of the buffer
- * @return The checksum
- * @deffunc char *ap_md5_binary(apr_pool_t *a, const unsigned char *buf, int len)
- */
-AP_DECLARE(char *) ap_md5_binary(apr_pool_t *a, const unsigned char *buf, int len);
-
-/**
- * Convert an MD5 checksum into a base64 encoding
- * @param p The pool to allocate out of
- * @param context The context to convert
- * @return The converted encoding
- * @deffunc char *ap_md5contextTo64(apr_pool_t *p, apr_md5_ctx_t *context)
- */
-AP_DECLARE(char *) ap_md5contextTo64(apr_pool_t *p, apr_md5_ctx_t *context);
-
-/**
- * Create an MD5 Digest for a given file
- * @param p The pool to allocate out of
- * @param infile The file to create the digest for
- * @deffunc char *ap_md5digest(apr_pool_t *p, apr_file_t *infile)
- */
-AP_DECLARE(char *) ap_md5digest(apr_pool_t *p, apr_file_t *infile);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif	/* !APACHE_UTIL_MD5_H */
diff --git a/include/util_script.h b/include/util_script.h
deleted file mode 100644
index b1620c9..0000000
--- a/include/util_script.h
+++ /dev/null
@@ -1,167 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-#ifndef APACHE_UTIL_SCRIPT_H
-#define APACHE_UTIL_SCRIPT_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * @package Apache script tools
- */
-
-#ifndef APACHE_ARG_MAX
-#ifdef _POSIX_ARG_MAX
-#define APACHE_ARG_MAX _POSIX_ARG_MAX
-#else
-#define APACHE_ARG_MAX 512
-#endif
-#endif
-
-/**
- * Create an environment variable out of an Apache table of key-value pairs
- * @param p pool to allocate out of
- * @param t Apache table of key-value pairs
- * @return An array containing the same key-value pairs suitable for
- *         use with an exec call.
- * @deffunc char **ap_create_environment(apr_pool_t *p, apr_table_t *t)
- */
-AP_DECLARE(char **) ap_create_environment(apr_pool_t *p, apr_table_t *t);
-
-/**
- * This "cute" little function comes about because the path info on
- * filenames and URLs aren't always the same. So we take the two,
- * and find as much of the two that match as possible.
- * @param uri The uri we are currently parsing
- * @param path_info The current path info
- * @return The length of the path info
- * @deffunc int ap_fine_path_info(const char *uri, const char *path_info)
- */
-AP_DECLARE(int) ap_find_path_info(const char *uri, const char *path_info);
-
-/**
- * Add CGI environment variables required by HTTP/1.1 to the request's 
- * environment table
- * @param r the current request
- * @deffunc void ap_add_cgi_vars(request_rec *r)
- */
-AP_DECLARE(void) ap_add_cgi_vars(request_rec *r);
-
-/**
- * Add common CGI environment variables to the requests environment table
- * @param r The current request
- * @deffunc void ap_add_common_vars(request_rec *r)
- */
-AP_DECLARE(void) ap_add_common_vars(request_rec *r);
-
-/**
- * Read headers output from a script, ensuring that the output is valid.  If
- * the output is valid, then the headers are added to the headers out of the
- * current request
- * @param r The current request
- * @param f The file to read from
- * @param buffer Empty when calling the function.  On output, if there was an
- *               error, the string that cause the error is stored here. 
- * @return HTTP_OK on success, HTTP_INTERNAL_SERVER_ERROR otherwise
- * @deffunc int ap_scan_script_header_err(request_rec *r, apr_file_t *f, char *buffer)
- */ 
-AP_DECLARE(int) ap_scan_script_header_err(request_rec *r, apr_file_t *f, char *buffer);
-
-/**
- * Read headers strings from a script, ensuring that the output is valid.  If
- * the output is valid, then the headers are added to the headers out of the
- * current request
- * @param r The current request
- * @param buffer Empty when calling the function.  On output, if there was an
- *               error, the string that cause the error is stored here. 
- * @param termch Pointer to the last character parsed.
- * @param termarg Pointer to an int to capture the last argument parsed.
- * @param args   String arguments to parse consecutively for headers, 
- *               a NULL argument terminates the list.
- * @return HTTP_OK on success, HTTP_INTERNAL_SERVER_ERROR otherwise
- * @deffunc int ap_scan_script_header_err_core(request_rec *r, char *buffer, int (*getsfunc)(char *, int, void *), void *getsfunc_data)
- */ 
-AP_DECLARE_NONSTD(int) ap_scan_script_header_err_strs(request_rec *r, 
-                                                      char *buffer, 
-                                                      const char **termch,
-                                                      int *termarg, ...);
-
-/**
- * Read headers output from a script, ensuring that the output is valid.  If
- * the output is valid, then the headers are added to the headers out of the
- * current request
- * @param r The current request
- * @param buffer Empty when calling the function.  On output, if there was an
- *               error, the string that cause the error is stored here. 
- * @param getsfunc Function to read the headers from.  This function should
-                   act like gets()
- * @param getsfunc_data The place to read from
- * @return HTTP_OK on success, HTTP_INTERNAL_SERVER_ERROR otherwise
- * @deffunc int ap_scan_script_header_err_core(request_rec *r, char *buffer, int (*getsfunc)(char *, int, void *), void *getsfunc_data)
- */ 
-AP_DECLARE(int) ap_scan_script_header_err_core(request_rec *r, char *buffer,
-				       int (*getsfunc) (char *, int, void *),
-				       void *getsfunc_data);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif	/* !APACHE_UTIL_SCRIPT_H */
diff --git a/include/util_time.h b/include/util_time.h
deleted file mode 100644
index 1852f89..0000000
--- a/include/util_time.h
+++ /dev/null
@@ -1,116 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- */
-
-#ifndef APACHE_UTIL_TIME_H
-#define APACHE_UTIL_TIME_H
-
-#include "apr.h"
-#include "apr_time.h"
-#include "httpd.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * @package Apache date/time handling functions
- */
-
-/* Maximum delta from the current time, in seconds, for a past time
- * to qualify as "recent" for use in the ap_explode_recent_*() functions:
- */
-#define AP_TIME_RECENT_THRESHOLD 15
-
-/**
- * convert a recent time to its human readable components in local timezone
- * @param tm the exploded time
- * @param t the time to explode: MUST be within the last
- *          AP_TIME_RECENT_THRESHOLD seconds
- * @note This is a faster alternative to apr_explode_localtime that uses
- *       a cache of pre-exploded time structures.  It is useful for things
- *       that need to explode the current time multiple times per second,
- *       like loggers.
- * @return APR_SUCCESS iff successful
- */
-AP_DECLARE(apr_status_t) ap_explode_recent_localtime(apr_time_exp_t *tm,
-                                                     apr_time_t t);
-
-/**
- * convert a recent time to its human readable components in GMT timezone
- * @param tm the exploded time
- * @param t the time to explode: MUST be within the last
- *          AP_TIME_RECENT_THRESHOLD seconds
- * @note This is a faster alternative to apr_explode_gmt that uses
- *       a cache of pre-exploded time structures.  It is useful for things
- *       that need to explode the current time multiple times per second,
- *       like loggers.
- * @return APR_SUCCESS iff successful
- */
-AP_DECLARE(apr_status_t) ap_explode_recent_gmt(apr_time_exp_t *tm,
-                                               apr_time_t t);
-
-
-/**
- * format a recent timestamp in the ctime() format.
- * @param date_str String to write to.
- * @param t the time to convert 
- */
-AP_DECLARE(apr_status_t) ap_recent_ctime(char *date_str, apr_time_t t);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif  /* !APACHE_UTIL_TIME_H */
diff --git a/include/util_xml.h b/include/util_xml.h
deleted file mode 100644
index 3fe61f6..0000000
--- a/include/util_xml.h
+++ /dev/null
@@ -1,85 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-#ifndef UTIL_XML_H
-#define UTIL_XML_H
-
-#include "apr_xml.h"
-#include "apu_compat.h"
-
-#include "httpd.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * @package Apache XML library
- */
-
-/**
- * Get XML post data and parse it
- * @param r The current request
- * @param pdoc The XML post data
- * @return HTTP status code
- * @deffunc int ap_xml_parse_input(request_rec *r, apr_xml_doc **pdoc)
- */
-AP_DECLARE(int) ap_xml_parse_input(request_rec *r, apr_xml_doc **pdoc);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* UTIL_XML_H */
diff --git a/libhttpd.dsp b/libhttpd.dsp
deleted file mode 100644
index aa15cce..0000000
--- a/libhttpd.dsp
+++ /dev/null
@@ -1,627 +0,0 @@
-# Microsoft Developer Studio Project File - Name="libhttpd" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=libhttpd - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "libhttpd.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "libhttpd.mak" CFG="libhttpd - Win32 Release"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "libhttpd - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "libhttpd - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "libhttpd - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "AP_DECLARE_EXPORT" /FD /c
-# ADD CPP /nologo /MD /W3 /O2 /I "./include" /I "./srclib/apr/include" /I "./srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "AP_DECLARE_EXPORT" /Fd"Release\libhttpd" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib advapi32.lib ws2_32.lib mswsock.lib /nologo /subsystem:windows /dll /map /machine:I386 /base:@"os\win32\BaseAddr.ref",libhttpd
-# ADD LINK32 kernel32.lib user32.lib advapi32.lib ws2_32.lib mswsock.lib /nologo /subsystem:windows /dll /map /machine:I386 /base:@"os\win32\BaseAddr.ref",libhttpd
-
-!ELSEIF  "$(CFG)" == "libhttpd - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "AP_DECLARE_EXPORT" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "./include" /I "./srclib/apr/include" /I "./srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "AP_DECLARE_EXPORT" /Fd"Debug\libhttpd" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib advapi32.lib ws2_32.lib mswsock.lib /nologo /subsystem:windows /dll /incremental:no /map /debug /machine:I386 /base:@"os\win32\BaseAddr.ref",libhttpd
-# ADD LINK32 kernel32.lib user32.lib advapi32.lib ws2_32.lib mswsock.lib /nologo /subsystem:windows /dll /incremental:no /map /debug /machine:I386 /base:@"os\win32\BaseAddr.ref",libhttpd
-
-!ENDIF 
-
-# Begin Target
-
-# Name "libhttpd - Win32 Release"
-# Name "libhttpd - Win32 Debug"
-# Begin Group "core"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90"
-# Begin Source File
-
-SOURCE=.\include\ap_config.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\include\ap_mmn.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\include\ap_release.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\server\buildmark.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\server\config.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\server\connection.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\server\core.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\include\http_config.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\include\http_connection.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\include\http_core.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\include\http_log.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\include\http_main.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\include\http_protocol.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\include\http_request.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\include\http_vhost.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\include\httpd.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\server\log.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\os\win32\modules.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\os\win32\os.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\server\protocol.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\server\request.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\server\scoreboard.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\include\scoreboard.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\server\vhost.c
-# End Source File
-# End Group
-# Begin Group "generated"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\server\gen_test_char.exe
-
-!IF  "$(CFG)" == "libhttpd - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-USERDEP__WIN32=".\include\os.h"	
-# Begin Custom Build - Generating test_char.h
-InputPath=.\server\gen_test_char.exe
-
-".\server\test_char.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	.\server\gen_test_char.exe >.\server\test_char.h 
-	echo Generated test_char.h from gen_test_char.exe 
-	
-# End Custom Build
-
-!ELSEIF  "$(CFG)" == "libhttpd - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-USERDEP__WIN32=".\include\os.h"	
-# Begin Custom Build - Generating test_char.h
-InputPath=.\server\gen_test_char.exe
-
-".\server\test_char.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	.\server\gen_test_char.exe >.\server\test_char.h 
-	echo Generated test_char.h from gen_test_char.exe 
-	
-# End Custom Build
-
-!ENDIF 
-
-# End Source File
-# Begin Source File
-
-SOURCE=.\modules\http\mod_core.h
-
-!IF  "$(CFG)" == "libhttpd - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Generating mod_core.h
-InputPath=.\modules\http\mod_core.h
-
-".\include\mod_core.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	del .\include\mod_core.h
-	copy .\modules\http\mod_core.h .\include\mod_core.h
-	echo Created mod_core.h
-	
-# End Custom Build
-
-!ELSEIF  "$(CFG)" == "libhttpd - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Generating mod_core.h
-InputPath=.\modules\http\mod_core.h
-
-".\include\mod_core.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	del .\include\mod_core.h
-	copy .\modules\http\mod_core.h .\include\mod_core.h
-	echo Created mod_core.h
-	
-# End Custom Build
-
-!ENDIF 
-
-# End Source File
-# Begin Source File
-
-SOURCE=.\modules\dav\main\mod_dav.h
-
-!IF  "$(CFG)" == "libhttpd - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Generating mod_dav.h
-InputPath=.\modules\dav\main\mod_dav.h
-
-".\include\mod_dav.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	del .\include\mod_dav.h
-	copy .\modules\dav\main\mod_dav.h .\include\mod_dav.h
-	echo Created mod_dav.h
-	
-# End Custom Build
-
-!ELSEIF  "$(CFG)" == "libhttpd - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Generating mod_dav.h
-InputPath=.\modules\dav\main\mod_dav.h
-
-".\include\mod_dav.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	del .\include\mod_dav.h
-	copy .\modules\dav\main\mod_dav.h .\include\mod_dav.h
-	echo Created mod_dav.h
-	
-# End Custom Build
-
-!ENDIF 
-
-# End Source File
-# Begin Source File
-
-SOURCE=.\modules\proxy\mod_proxy.h
-
-!IF  "$(CFG)" == "libhttpd - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Generating mod_proxy.h
-InputPath=.\modules\proxy\mod_proxy.h
-
-".\include\mod_proxy.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	del .\include\mod_proxy.h
-	copy .\modules\proxy\mod_proxy.h .\include\mod_proxy.h
-	echo Created mod_proxy.h
-	
-# End Custom Build
-
-!ELSEIF  "$(CFG)" == "libhttpd - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Generating mod_proxy.h
-InputPath=.\modules\proxy\mod_proxy.h
-
-".\include\mod_proxy.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	del .\include\mod_proxy.h
-	copy .\modules\proxy\mod_proxy.h .\include\mod_proxy.h
-	echo Created mod_proxy.h
-	
-# End Custom Build
-
-!ENDIF 
-
-# End Source File
-# Begin Source File
-
-SOURCE=.\server\mpm\winnt\mpm.h
-
-!IF  "$(CFG)" == "libhttpd - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Generating mpm.h
-InputPath=.\server\mpm\winnt\mpm.h
-
-".\include\mpm.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	del .\include\mpm.h
-	copy .\server\mpm\winnt\mpm.h .\include\mpm.h
-	echo Created mpm.h
-	
-# End Custom Build
-
-!ELSEIF  "$(CFG)" == "libhttpd - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Generating mpm.h
-InputPath=.\server\mpm\winnt\mpm.h
-
-".\include\mpm.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	del .\include\mpm.h
-	copy .\server\mpm\winnt\mpm.h .\include\mpm.h
-	echo Created mpm.h
-	
-# End Custom Build
-
-!ENDIF 
-
-# End Source File
-# Begin Source File
-
-SOURCE=.\server\mpm\winnt\mpm_default.h
-
-!IF  "$(CFG)" == "libhttpd - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Generating mpm_default.h
-InputPath=.\server\mpm\winnt\mpm_default.h
-
-".\include\mpm_default.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	del .\include\mpm_default.h
-	copy .\server\mpm\winnt\mpm_default.h .\include\mpm_default.h
-	echo Created mpm_default.h
-	
-# End Custom Build
-
-!ELSEIF  "$(CFG)" == "libhttpd - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Generating mpm_default.h
-InputPath=.\server\mpm\winnt\mpm_default.h
-
-".\include\mpm_default.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	del .\include\mpm_default.h
-	copy .\server\mpm\winnt\mpm_default.h .\include\mpm_default.h
-	echo Created mpm_default.h
-	
-# End Custom Build
-
-!ENDIF 
-
-# End Source File
-# Begin Source File
-
-SOURCE=.\os\win32\os.h
-
-!IF  "$(CFG)" == "libhttpd - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Generating os.h
-InputPath=.\os\win32\os.h
-
-".\include\os.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	del .\include\os.h
-	copy .\os\win32\os.h .\include\os.h
-	echo Created os.h
-	
-# End Custom Build
-
-!ELSEIF  "$(CFG)" == "libhttpd - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Generating os.h
-InputPath=.\os\win32\os.h
-
-".\include\os.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	del .\include\os.h
-	copy .\os\win32\os.h .\include\os.h
-	echo Created os.h
-	
-# End Custom Build
-
-!ENDIF 
-
-# End Source File
-# Begin Source File
-
-SOURCE=.\server\test_char.h
-# End Source File
-# End Group
-# Begin Group "httpd"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\modules\http\http_core.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\modules\http\http_protocol.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\modules\http\http_request.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\modules\http\mod_core.h
-# End Source File
-# End Group
-# Begin Group "modules"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\modules\mappers\mod_so.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\modules\arch\win32\mod_win32.c
-# End Source File
-# End Group
-# Begin Group "util"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\server\error_bucket.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\server\rfc1413.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\include\rfc1413.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\server\util.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\server\util_cfgtree.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\include\util_cfgtree.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\include\util_charset.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\include\util_ebcdic.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\server\util_filter.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\include\util_filter.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\server\util_md5.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\include\util_md5.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\server\util_script.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\include\util_script.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\server\util_time.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\os\win32\util_win32.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\server\util_xml.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\include\util_xml.h
-# End Source File
-# End Group
-# Begin Group "mpm_winnt"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\include\ap_listen.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\include\ap_mpm.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\server\listen.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\server\mpm\winnt\mpm.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\server\mpm_common.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\include\mpm_common.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\server\mpm\winnt\mpm_default.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\include\mpm_status.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\server\mpm\winnt\mpm_winnt.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\server\mpm\winnt\mpm_winnt.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\server\mpm\winnt\nt_eventlog.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\server\mpm\winnt\registry.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\server\mpm\winnt\service.c
-# End Source File
-# End Group
-# Begin Source File
-
-SOURCE=.\build\win32\libhttpd.rc
-# End Source File
-# Begin Source File
-
-SOURCE=.\build\win32\win32ver.awk
-
-!IF  "$(CFG)" == "libhttpd - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=.\build\win32\win32ver.awk
-
-".\build\win32\libhttpd.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ./build/win32/win32ver.awk libhttpd "Apache HTTP Server Core"  ./include/ap_release.h > .\build\win32\libhttpd.rc
-
-# End Custom Build
-
-!ELSEIF  "$(CFG)" == "libhttpd - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=.\build\win32\win32ver.awk
-
-".\build\win32\libhttpd.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ./build/win32/win32ver.awk libhttpd "Apache HTTP Server Core"  ./include/ap_release.h > .\build\win32\libhttpd.rc
-
-# End Custom Build
-
-!ENDIF 
-
-# End Source File
-# End Target
-# End Project
diff --git a/modules/.cvsignore b/modules/.cvsignore
deleted file mode 100644
index bd5fe06..0000000
--- a/modules/.cvsignore
+++ /dev/null
@@ -1,2 +0,0 @@
-Makefile
-.deps
diff --git a/modules/Makefile.in b/modules/Makefile.in
deleted file mode 100644
index 1320ec2..0000000
--- a/modules/Makefile.in
+++ /dev/null
@@ -1,6 +0,0 @@
-
-SUBDIRS = $(MODULE_DIRS)
-CLEAN_SUBDIRS = $(MODULE_CLEANDIRS)
-
-include $(top_builddir)/build/rules.mk
-
diff --git a/modules/NWGNUmakefile b/modules/NWGNUmakefile
deleted file mode 100644
index ca36291..0000000
--- a/modules/NWGNUmakefile
+++ /dev/null
@@ -1,35 +0,0 @@
-#
-# Declare the sub-directories to be built here
-#
-
-SUBDIRS = \
-	aaa \
-	dav\main \
-	dav\fs \
-	echo \
-	generators \
-	mappers \
-	metadata \
-	proxy \
-	$(EOLIST) 
-
-#
-# Get the 'head' of the build environment.  This includes default targets and
-# paths to tools
-#
-
-include $(AP_WORK)\build\NWGNUhead.inc
-
-#
-# build this level's files
-
-ifeq "$(wildcard NWGNUmakefile.mak)" "NWGNUmakefile.mak" 
-include NWGNUmakefile.mak
-endif
-
-#
-# You can use this target if all that is needed is to copy files to the
-# installation area
-#
-install :: nlms FORCE
-	
diff --git a/modules/README b/modules/README
deleted file mode 100644
index 51624a6..0000000
--- a/modules/README
+++ /dev/null
@@ -1,55 +0,0 @@
-The directory structure for this level is as follows:
-
-aaa/
-  This directory contains modules dealing with authorization and
-  authentication.
-
-arch/
-
-cache/
-  This directory houses modules that implement file and data caching
-  capability.
-
-dav/
-  This directory houses modules that implement WebDAV functionality.
-
-echo/
-
-experimental/
-  In this directory we've placed some modules which we think
-  provide some pretty interesting functionality, but which
-  are still in the early stages of development and could
-  evolve radically in the future.  This code isn't supported
-  officially.
-
-filters/
-  This directory houses modules that perform general inline data filtering.
-
-generators/
-  This directory houses modules that perform data generation functions.
-
-http/
-  This directory houses modules that basic HTTP protocol implementation.
-
-loggers/
-  This directory houses modules that handle logging functions.
-
-mappers/
-  This directory houses modules that handle URL mapping and
-  rewriting.
-
-metadata/
-  This directory houses modules that deal with Header metadata.
-
-proxy/
-  This houses the code for the proxy module for Apache.
-
-ssl/
-
-test/
-  This directory houses modules which test various components 
-  of Apache.  You should not compile these into a production
-  server.  
-
-tls/
-  This directory houses code for OpenSSL functionality.
diff --git a/modules/aaa/.cvsignore b/modules/aaa/.cvsignore
deleted file mode 100644
index aeabff3..0000000
--- a/modules/aaa/.cvsignore
+++ /dev/null
@@ -1,16 +0,0 @@
-.deps
-.libs
-*.la
-modules.mk
-Makefile
-*.lo
-*.slo
-*.so
-*.x
-Debug
-Release
-*.plg
-*.aps
-*.dep
-*.mak
-*.rc
diff --git a/modules/aaa/.indent.pro b/modules/aaa/.indent.pro
deleted file mode 100644
index a9fbe9f..0000000
--- a/modules/aaa/.indent.pro
+++ /dev/null
@@ -1,54 +0,0 @@
--i4 -npsl -di0 -br -nce -d0 -cli0 -npcs -nfc1
--TBUFF
--TFILE
--TTRANS
--TUINT4
--T_trans
--Tallow_options_t
--Tapache_sfio
--Tarray_header
--Tbool_int
--Tbuf_area
--Tbuff_struct
--Tbuffy
--Tcmd_how
--Tcmd_parms
--Tcommand_rec
--Tcommand_struct
--Tconn_rec
--Tcore_dir_config
--Tcore_server_config
--Tdir_maker_func
--Tevent
--Tglobals_s
--Thandler_func
--Thandler_rec
--Tjoblist_s
--Tlisten_rec
--Tmerger_func
--Tmode_t
--Tmodule
--Tmodule_struct
--Tmutex
--Tn_long
--Tother_child_rec
--Toverrides_t
--Tparent_score
--Tpid_t
--Tpiped_log
--Tpool
--Trequest_rec
--Trequire_line
--Trlim_t
--Tscoreboard
--Tsemaphore
--Tserver_addr_rec
--Tserver_rec
--Tserver_rec_chain
--Tshort_score
--Ttable
--Ttable_entry
--Tthread
--Tu_wide_int
--Tvtime_t
--Twide_int
diff --git a/modules/aaa/Makefile.in b/modules/aaa/Makefile.in
deleted file mode 100644
index 167b343..0000000
--- a/modules/aaa/Makefile.in
+++ /dev/null
@@ -1,3 +0,0 @@
-
-include $(top_srcdir)/build/special.mk
-
diff --git a/modules/aaa/NWGNUauthanon b/modules/aaa/NWGNUauthanon
deleted file mode 100644
index 1847e7d..0000000
--- a/modules/aaa/NWGNUauthanon
+++ /dev/null
@@ -1,250 +0,0 @@
-#
-# Make sure all needed macro's are defined
-#
-
-#
-# Get the 'head' of the build environment if necessary.  This includes default
-# targets and paths to tools
-#
-
-ifndef EnvironmentDefined
-include $(AP_WORK)\build\NWGNUhead.inc
-endif
-
-#
-# These directories will be at the beginning of the include list, followed by
-# INCDIRS
-#
-XINCDIRS	+= \
-			$(AP_WORK)/include \
-			$(NWOS) \
-			$(AP_WORK)/modules/arch/netware \
-			$(AP_WORK)/srclib/apr/include \
-			$(AP_WORK)/srclib/apr-util/include \
-			$(AP_WORK)/srclib/apr \
-			$(EOLIST)
-
-#
-# These flags will come after CFLAGS
-#
-XCFLAGS		+= \
-			-prefix pre_nw.h \
-			$(EOLIST)
-
-#
-# These defines will come after DEFINES
-#
-XDEFINES	+= \
-			$(EOLIST)
-
-#
-# These flags will be added to the link.opt file
-#
-XLFLAGS		+= \
-			$(EOLIST)
-
-#
-# These values will be appended to the correct variables based on the value of
-# RELEASE
-#
-ifeq "$(RELEASE)" "debug"
-XINCDIRS	+= \
-			$(EOLIST)
-
-XCFLAGS		+= \
-			$(EOLIST)
-
-XDEFINES	+= \
-			$(EOLIST)
-
-XLFLAGS		+= \
-		   	$(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "noopt"
-XINCDIRS	+= \
-			$(EOLIST)
-
-XCFLAGS		+= \
-			$(EOLIST)
-
-XDEFINES	+= \
-			$(EOLIST)
-
-XLFLAGS		+= \
-		   	$(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "release"
-XINCDIRS	+= \
-			$(EOLIST)
-
-XCFLAGS		+= \
-			$(EOLIST)
-
-XDEFINES	+= \
-			$(EOLIST)
-
-XLFLAGS		+= \
-			$(EOLIST)
-endif
-
-#
-# These are used by the link target if an NLM is being generated
-# This is used by the link 'name' directive to name the nlm.  If left blank
-# TARGET_nlm (see below) will be used.
-#
-NLM_NAME		= authanon
-
-#
-# This is used by the link '-desc ' directive. 
-# If left blank, NLM_NAME will be used.
-#
-NLM_DESCRIPTION	= Authentication Anonymous Module
-
-#
-# This is used by the '-threadname' directive.  If left blank,
-# NLM_NAME Thread will be used.
-#
-NLM_THREAD_NAME	= AuthAnon Module
-
-#
-# If this is specified, it will override VERSION value in 
-# $(AP_WORK)\build\NWGNUenvironment.inc
-#
-NLM_VERSION		=
-
-#
-# If this is specified, it will override the default of 64K
-#
-NLM_STACK_SIZE	= 8192
-
-
-#
-# If this is specified it will be used by the link '-entry' directive
-#
-NLM_ENTRY_SYM	= _LibCPrelude
-
-#
-# If this is specified it will be used by the link '-exit' directive
-#
-NLM_EXIT_SYM	= _LibCPostlude
-
-#
-# If this is specified it will be used by the link '-check' directive
-#
-NLM_CHECK_SYM	=
-
-#
-# If these are specified it will be used by the link '-flags' directive
-#
-NLM_FLAGS		=  AUTOUNLOAD, PSEUDOPREEMPTION
-
-#
-# If this is specified it will be linked in with the XDCData option in the def 
-# file instead of the default of $(NWOS)/apache.xdc.  XDCData can be disabled
-# by setting APACHE_UNIPROC in the environment
-#
-XDCDATA         = 
-
-#
-# If there is an NLM target, put it here
-#
-TARGET_nlm = \
-	$(OBJDIR)/authanon.nlm \
-	$(EOLIST)
-
-#
-# If there is an LIB target, put it here
-#
-TARGET_lib = \
-	$(EOLIST)
-
-#
-# These are the OBJ files needed to create the NLM target above.
-# Paths must all use the '/' character
-#
-FILES_nlm_objs = \
-	$(OBJDIR)/mod_auth_anon.o \
-	$(EOLIST)
-
-#
-# These are the LIB files needed to create the NLM target above.
-# These will be added as a library command in the link.opt file.
-#
-FILES_nlm_libs = \
-   	libcpre.o \
-	$(EOLIST)
-
-#
-# These are the modules that the above NLM target depends on to load.
-# These will be added as a module command in the link.opt file.
-#
-FILES_nlm_modules = \
-	aprlib \
-	libc \
-	$(EOLIST)
-
-#
-# If the nlm has a msg file, put it's path here
-#
-FILE_nlm_msg =
- 
-#
-# If the nlm has a hlp file put it's path here
-#
-FILE_nlm_hlp =
-
-#
-# If this is specified, it will override $(NWOS)\copyright.txt.
-#
-FILE_nlm_copyright =
-
-#
-# Any additional imports go here
-#
-FILES_nlm_Ximports = \
-	@$(APR)/aprlib.imp \
-	@$(NWOS)/httpd.imp \
-	@libc.imp \
-	$(EOLIST)
- 
-#   
-# Any symbols exported to here
-#
-FILES_nlm_exports = \
-	auth_anon_module \
-	$(EOLIST)
-	
-#   
-# These are the OBJ files needed to create the LIB target above.
-# Paths must all use the '/' character
-#
-FILES_lib_objs = \
-		$(EOLIST)
-
-#
-# implement targets and dependancies (leave this section alone)
-#
-
-libs :: $(OBJDIR) $(TARGET_lib)
-
-nlms :: libs $(TARGET_nlm)
-
-#
-# Updated this target to create necessary directories and copy files to the 
-# correct place.  (See $(AP_WORK)\build\NWGNUhead.inc for examples)
-#
-install :: nlms FORCE
-
-#
-# Any specialized rules here
-#
-
-#
-# Include the 'tail' makefile that has targets that depend on variables defined
-# in this makefile
-#
-
-include $(AP_WORK)\build\NWGNUtail.inc
-
diff --git a/modules/aaa/NWGNUauthdbm b/modules/aaa/NWGNUauthdbm
deleted file mode 100644
index a64e7ec..0000000
--- a/modules/aaa/NWGNUauthdbm
+++ /dev/null
@@ -1,249 +0,0 @@
-#
-# Make sure all needed macro's are defined
-#
-
-#
-# Get the 'head' of the build environment if necessary.  This includes default
-# targets and paths to tools
-#
-
-ifndef EnvironmentDefined
-include $(AP_WORK)\build\NWGNUhead.inc
-endif
-
-#
-# These directories will be at the beginning of the include list, followed by
-# INCDIRS
-#
-XINCDIRS	+= \
-			$(AP_WORK)/include \
-			$(NWOS) \
-			$(AP_WORK)/modules/arch/netware \
-			$(AP_WORK)/srclib/apr/include \
-			$(AP_WORK)/srclib/apr-util/include \
-			$(AP_WORK)/srclib/apr \
-			$(EOLIST)
-
-#
-# These flags will come after CFLAGS
-#
-XCFLAGS		+= \
-			$(EOLIST)
-
-#
-# These defines will come after DEFINES
-#
-XDEFINES	+= \
-			$(EOLIST)
-
-#
-# These flags will be added to the link.opt file
-#
-XLFLAGS		+= \
-			$(EOLIST)
-
-#
-# These values will be appended to the correct variables based on the value of
-# RELEASE
-#
-ifeq "$(RELEASE)" "debug"
-XINCDIRS	+= \
-			$(EOLIST)
-
-XCFLAGS		+= \
-			$(EOLIST)
-
-XDEFINES	+= \
-			$(EOLIST)
-
-XLFLAGS		+= \
-		   	$(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "noopt"
-XINCDIRS	+= \
-			$(EOLIST)
-
-XCFLAGS		+= \
-			$(EOLIST)
-
-XDEFINES	+= \
-			$(EOLIST)
-
-XLFLAGS		+= \
-		   	$(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "release"
-XINCDIRS	+= \
-			$(EOLIST)
-
-XCFLAGS		+= \
-			$(EOLIST)
-
-XDEFINES	+= \
-			$(EOLIST)
-
-XLFLAGS		+= \
-			$(EOLIST)
-endif
-
-#
-# These are used by the link target if an NLM is being generated
-# This is used by the link 'name' directive to name the nlm.  If left blank
-# TARGET_nlm (see below) will be used.
-#
-NLM_NAME		= authdbm
-
-#
-# This is used by the link '-desc ' directive. 
-# If left blank, NLM_NAME will be used.
-#
-NLM_DESCRIPTION	= Database Authentication Module
-
-#
-# This is used by the '-threadname' directive.  If left blank,
-# NLM_NAME Thread will be used.
-#
-NLM_THREAD_NAME	= AuthDBM Module
-
-#
-# If this is specified, it will override VERSION value in 
-# $(AP_WORK)\build\NWGNUenvironment.inc
-#
-NLM_VERSION		=
-
-#
-# If this is specified, it will override the default of 64K
-#
-NLM_STACK_SIZE	= 8192
-
-
-#
-# If this is specified it will be used by the link '-entry' directive
-#
-NLM_ENTRY_SYM	= _LibCPrelude
-
-#
-# If this is specified it will be used by the link '-exit' directive
-#
-NLM_EXIT_SYM	= _LibCPostlude
-
-#
-# If this is specified it will be used by the link '-check' directive
-#
-NLM_CHECK_SYM	=
-
-#
-# If these are specified it will be used by the link '-flags' directive
-#
-NLM_FLAGS		=  AUTOUNLOAD, PSEUDOPREEMPTION
-
-#
-# If this is specified it will be linked in with the XDCData option in the def 
-# file instead of the default of $(NWOS)/apache.xdc.  XDCData can be disabled
-# by setting APACHE_UNIPROC in the environment
-#
-XDCDATA         = 
-
-#
-# If there is an NLM target, put it here
-#
-TARGET_nlm = \
-	$(OBJDIR)/authdbm.nlm \
-	$(EOLIST)
-
-#
-# If there is an LIB target, put it here
-#
-TARGET_lib = \
-	$(EOLIST)
-
-#
-# These are the OBJ files needed to create the NLM target above.
-# Paths must all use the '/' character
-#
-FILES_nlm_objs = \
-	$(OBJDIR)/mod_auth_dbm.o \
-	$(EOLIST)
-
-#
-# These are the LIB files needed to create the NLM target above.
-# These will be added as a library command in the link.opt file.
-#
-FILES_nlm_libs = \
-   	libcpre.o \
-	$(EOLIST)
-
-#
-# These are the modules that the above NLM target depends on to load.
-# These will be added as a module command in the link.opt file.
-#
-FILES_nlm_modules = \
-	aprlib \
-	libc \
-	$(EOLIST)
-
-#
-# If the nlm has a msg file, put it's path here
-#
-FILE_nlm_msg =
- 
-#
-# If the nlm has a hlp file put it's path here
-#
-FILE_nlm_hlp =
-
-#
-# If this is specified, it will override $(NWOS)\copyright.txt.
-#
-FILE_nlm_copyright =
-
-#
-# Any additional imports go here
-#
-FILES_nlm_Ximports = \
-	@$(APR)/aprlib.imp \
-	@$(NWOS)/httpd.imp \
-	@libc.imp \
-	$(EOLIST)
- 
-#   
-# Any symbols exported to here
-#
-FILES_nlm_exports = \
-	auth_dbm_module \
-	$(EOLIST)
-	
-#   
-# These are the OBJ files needed to create the LIB target above.
-# Paths must all use the '/' character
-#
-FILES_lib_objs = \
-		$(EOLIST)
-
-#
-# implement targets and dependancies (leave this section alone)
-#
-
-libs :: $(OBJDIR) $(TARGET_lib)
-
-nlms :: libs $(TARGET_nlm)
-
-#
-# Updated this target to create necessary directories and copy files to the 
-# correct place.  (See $(AP_WORK)\build\NWGNUhead.inc for examples)
-#
-install :: nlms FORCE
-
-#
-# Any specialized rules here
-#
-
-#
-# Include the 'tail' makefile that has targets that depend on variables defined
-# in this makefile
-#
-
-include $(AP_WORK)\build\NWGNUtail.inc
-
diff --git a/modules/aaa/NWGNUdigest b/modules/aaa/NWGNUdigest
deleted file mode 100644
index 814db98..0000000
--- a/modules/aaa/NWGNUdigest
+++ /dev/null
@@ -1,248 +0,0 @@
-#
-# Make sure all needed macro's are defined
-#
-
-#
-# Get the 'head' of the build environment if necessary.  This includes default
-# targets and paths to tools
-#
-
-ifndef EnvironmentDefined
-include $(AP_WORK)\build\NWGNUhead.inc
-endif
-
-#
-# These directories will be at the beginning of the include list, followed by
-# INCDIRS
-#
-XINCDIRS	+= \
-			$(NWOS) \
-			$(AP_WORK)/modules/arch/netware \
-			$(AP_WORK)/srclib/apr/include \
-			$(AP_WORK)/srclib/apr-util/include \
-			$(AP_WORK)/srclib/apr \
-			$(EOLIST)
-
-#
-# These flags will come after CFLAGS
-#
-XCFLAGS		+= \
-			$(EOLIST)
-
-#
-# These defines will come after DEFINES
-#
-XDEFINES	+= \
-			$(EOLIST)
-
-#
-# These flags will be added to the link.opt file
-#
-XLFLAGS		+= \
-			$(EOLIST)
-
-#
-# These values will be appended to the correct variables based on the value of
-# RELEASE
-#
-ifeq "$(RELEASE)" "debug"
-XINCDIRS	+= \
-			$(EOLIST)
-
-XCFLAGS		+= \
-			$(EOLIST)
-
-XDEFINES	+= \
-			$(EOLIST)
-
-XLFLAGS		+= \
-		   	$(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "noopt"
-XINCDIRS	+= \
-			$(EOLIST)
-
-XCFLAGS		+= \
-			$(EOLIST)
-
-XDEFINES	+= \
-			$(EOLIST)
-
-XLFLAGS		+= \
-		   	$(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "release"
-XINCDIRS	+= \
-			$(EOLIST)
-
-XCFLAGS		+= \
-			$(EOLIST)
-
-XDEFINES	+= \
-			$(EOLIST)
-
-XLFLAGS		+= \
-			$(EOLIST)
-endif
-
-#
-# These are used by the link target if an NLM is being generated
-# This is used by the link 'name' directive to name the nlm.  If left blank
-# TARGET_nlm (see below) will be used.
-#
-NLM_NAME		= digest
-
-#
-# This is used by the link '-desc ' directive. 
-# If left blank, NLM_NAME will be used.
-#
-NLM_DESCRIPTION	= Digest Authentication Module
-
-#
-# This is used by the '-threadname' directive.  If left blank,
-# NLM_NAME Thread will be used.
-#
-NLM_THREAD_NAME	= Digest Module
-
-#
-# If this is specified, it will override VERSION value in 
-# $(AP_WORK)\build\NWGNUenvironment.inc
-#
-NLM_VERSION		=
-
-#
-# If this is specified, it will override the default of 64K
-#
-NLM_STACK_SIZE	= 8192
-
-
-#
-# If this is specified it will be used by the link '-entry' directive
-#
-NLM_ENTRY_SYM	= _LibCPrelude
-
-#
-# If this is specified it will be used by the link '-exit' directive
-#
-NLM_EXIT_SYM	= _LibCPostlude
-
-#
-# If this is specified it will be used by the link '-check' directive
-#
-NLM_CHECK_SYM	=
-
-#
-# If these are specified it will be used by the link '-flags' directive
-#
-NLM_FLAGS		=  AUTOUNLOAD, PSEUDOPREEMPTION
-
-#
-# If this is specified it will be linked in with the XDCData option in the def 
-# file instead of the default of $(NWOS)/apache.xdc.  XDCData can be disabled
-# by setting APACHE_UNIPROC in the environment
-#
-XDCDATA         = 
-
-#
-# If there is an NLM target, put it here
-#
-TARGET_nlm = \
-	$(OBJDIR)/digest.nlm \
-	$(EOLIST)
-
-#
-# If there is an LIB target, put it here
-#
-TARGET_lib = \
-	$(EOLIST)
-
-#
-# These are the OBJ files needed to create the NLM target above.
-# Paths must all use the '/' character
-#
-FILES_nlm_objs = \
-	$(OBJDIR)/mod_auth_digest.o \
-	$(EOLIST)
-
-#
-# These are the LIB files needed to create the NLM target above.
-# These will be added as a library command in the link.opt file.
-#
-FILES_nlm_libs = \
-   	libcpre.o \
-	$(EOLIST)
-
-#
-# These are the modules that the above NLM target depends on to load.
-# These will be added as a module command in the link.opt file.
-#
-FILES_nlm_modules = \
-	aprlib \
-	libc \
-	$(EOLIST)
-
-#
-# If the nlm has a msg file, put it's path here
-#
-FILE_nlm_msg =
- 
-#
-# If the nlm has a hlp file put it's path here
-#
-FILE_nlm_hlp =
-
-#
-# If this is specified, it will override $(NWOS)\copyright.txt.
-#
-FILE_nlm_copyright =
-
-#
-# Any additional imports go here
-#
-FILES_nlm_Ximports = \
-	@$(APR)/aprlib.imp \
-	@$(NWOS)/httpd.imp \
-	@libc.imp \
-	$(EOLIST)
- 
-#   
-# Any symbols exported to here
-#
-FILES_nlm_exports = \
-	auth_digest_module \
-	$(EOLIST)
-	
-#   
-# These are the OBJ files needed to create the LIB target above.
-# Paths must all use the '/' character
-#
-FILES_lib_objs = \
-		$(EOLIST)
-
-#
-# implement targets and dependancies (leave this section alone)
-#
-
-libs :: $(OBJDIR) $(TARGET_lib)
-
-nlms :: libs $(TARGET_nlm)
-
-#
-# Updated this target to create necessary directories and copy files to the 
-# correct place.  (See $(AP_WORK)\build\NWGNUhead.inc for examples)
-#
-install :: nlms FORCE
-
-#
-# Any specialized rules here
-#
-
-#
-# Include the 'tail' makefile that has targets that depend on variables defined
-# in this makefile
-#
-
-include $(AP_WORK)\build\NWGNUtail.inc
-
diff --git a/modules/aaa/NWGNUmakefile b/modules/aaa/NWGNUmakefile
deleted file mode 100644
index fc72c73..0000000
--- a/modules/aaa/NWGNUmakefile
+++ /dev/null
@@ -1,246 +0,0 @@
-#
-# Declare the sub-directories to be built here
-#
-
-SUBDIRS = \
-	$(EOLIST) 
-
-#
-# Get the 'head' of the build environment.  This includes default targets and
-# paths to tools
-#
-
-include $(AP_WORK)\build\NWGNUhead.inc
-
-#
-# build this level's files
-
-#
-# Make sure all needed macro's are defined
-#
-
-#
-# These directories will be at the beginning of the include list, followed by
-# INCDIRS
-#
-XINCDIRS	+= \
-			$(EOLIST)
-
-#
-# These flags will come after CFLAGS
-#
-XCFLAGS		+= \
-			$(EOLIST)
-
-#
-# These defines will come after DEFINES
-#
-XDEFINES	+= \
-			$(EOLIST)
-
-#
-# These flags will be added to the link.opt file
-#
-XLFLAGS		+= \
-			$(EOLIST)
-
-#
-# These values will be appended to the correct variables based on the value of
-# RELEASE
-#
-ifeq "$(RELEASE)" "debug"
-XINCDIRS	+= \
-			$(EOLIST)
-
-XCFLAGS		+= \
-			$(EOLIST)
-
-XDEFINES	+= \
-			$(EOLIST)
-
-XLFLAGS		+= \
-		   	$(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "noopt"
-XINCDIRS	+= \
-			$(EOLIST)
-
-XCFLAGS		+= \
-			$(EOLIST)
-
-XDEFINES	+= \
-			$(EOLIST)
-
-XLFLAGS		+= \
-		   	$(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "release"
-XINCDIRS	+= \
-			$(EOLIST)
-
-XCFLAGS		+= \
-			$(EOLIST)
-
-XDEFINES	+= \
-			$(EOLIST)
-
-XLFLAGS		+= \
-			$(EOLIST)
-endif
-
-#
-# These are used by the link target if an NLM is being generated
-# This is used by the link 'name' directive to name the nlm.  If left blank
-# TARGET_nlm (see below) will be used.
-#
-NLM_NAME		=
-
-#
-# This is used by the link '-desc ' directive. 
-# If left blank, NLM_NAME will be used.
-#
-NLM_DESCRIPTION	=
-
-#
-# This is used by the '-threadname' directive.  If left blank,
-# NLM_NAME Thread will be used.
-#
-NLM_THREAD_NAME	=
-
-#
-# If this is specified, it will override VERSION value in 
-# $(AP_WORK)\build\NWGNUenvironment.inc
-#
-NLM_VERSION		=
-
-#
-# If this is specified, it will override the default of 64K
-#
-NLM_STACK_SIZE	=
-
-
-#
-# If this is specified it will be used by the link '-entry' directive
-#
-NLM_ENTRY_SYM	=
-
-#
-# If this is specified it will be used by the link '-exit' directive
-#
-NLM_EXIT_SYM	=
-
-#
-# If this is specified it will be used by the link '-check' directive
-#
-NLM_CHECK_SYM	=
-
-#
-# If these are specified it will be used by the link '-flags' directive
-#
-NLM_FLAGS		=
-
-#
-# If this is specified it will be linked in with the XDCData option in the def 
-# file instead of the default of $(NWOS)/apache.xdc.  XDCData can be disabled
-# by setting APACHE_UNIPROC in the environment
-#
-XDCDATA         = 
-
-#
-# If there is an NLM target, put it here
-#
-TARGET_nlm = \
-	$(OBJDIR)/authanon.nlm \
-	$(OBJDIR)/authdbm.nlm \
-	$(OBJDIR)/digest.nlm \
-	$(EOLIST)
-
-#
-# If there is an LIB target, put it here
-#
-TARGET_lib = \
-	$(EOLIST)
-
-#
-# These are the OBJ files needed to create the NLM target above.
-# Paths must all use the '/' character
-#
-FILES_nlm_objs = \
-	$(EOLIST)
-
-#
-# These are the LIB files needed to create the NLM target above.
-# These will be added as a library command in the link.opt file.
-#
-FILES_nlm_libs = \
-	$(EOLIST)
-
-#
-# These are the modules that the above NLM target depends on to load.
-# These will be added as a module command in the link.opt file.
-#
-FILES_nlm_modules = \
-	$(EOLIST)
-
-#
-# If the nlm has a msg file, put it's path here
-#
-FILE_nlm_msg =
- 
-#
-# If the nlm has a hlp file put it's path here
-#
-FILE_nlm_hlp =
-
-#
-# If this is specified, it will override $(NWOS)\copyright.txt.
-#
-FILE_nlm_copyright =
-
-#
-# Any additional imports go here
-#
-FILES_nlm_Ximports = \
-	$(EOLIST)
- 
-#   
-# Any symbols exported to here
-#
-FILES_nlm_exports = \
-	$(EOLIST)
-	
-#   
-# These are the OBJ files needed to create the LIB target above.
-# Paths must all use the '/' character
-#
-FILES_lib_objs = \
-		$(EOLIST)
-
-#
-# implement targets and dependancies (leave this section alone)
-#
-
-libs :: $(OBJDIR) $(TARGET_lib)
-
-nlms :: libs $(TARGET_nlm)
-
-#
-# Updated this target to create necessary directories and copy files to the 
-# correct place.  (See $(AP_WORK)\build\NWGNUhead.inc for examples)
-#
-install :: nlms FORCE
-	copy $(OBJDIR)\*.nlm $(INSTALL)\Apache2\modules\*.*
-
-#
-# Any specialized rules here
-#
-
-#
-# Include the 'tail' makefile that has targets that depend on variables defined
-# in this makefile
-#
-
-include $(AP_WORK)\build\NWGNUtail.inc
-	
diff --git a/modules/aaa/config.m4 b/modules/aaa/config.m4
deleted file mode 100644
index 525e79d..0000000
--- a/modules/aaa/config.m4
+++ /dev/null
@@ -1,25 +0,0 @@
-dnl modules enabled in this directory by default
-
-dnl APACHE_MODULE(name, helptext[, objects[, structname[, default[, config]]]])
-
-APACHE_MODPATH_INIT(aaa)
-
-APACHE_MODULE(access, host-based access control, , , yes)
-APACHE_MODULE(auth, user-based access control, , , yes)
-APACHE_MODULE(auth_anon, anonymous user access, , , most)
-APACHE_MODULE(auth_dbm, DBM-based access databases, , , most)
-
-APACHE_MODULE(auth_digest, RFC2617 Digest authentication, , , most, [
-  ap_old_cppflags=$CPPFLAGS
-  CPPFLAGS="$CPPFLAGS -I$APR_SOURCE_DIR/include -I$abs_builddir/srclib/apr/include"
-  AC_TRY_COMPILE([#include <apr.h>], 
-                 [#if !APR_HAS_RANDOM 
-                  #error You need APR random support to use auth_digest. 
-                  #endif],,
-                 enable_auth_digest=no)
-  CPPFLAGS=$ap_old_cppflags
-])
-
-APR_ADDTO(LT_LDFLAGS,-export-dynamic)
-
-APACHE_MODPATH_FINISH
diff --git a/modules/aaa/mod_access.c b/modules/aaa/mod_access.c
deleted file mode 100644
index fb0be97..0000000
--- a/modules/aaa/mod_access.c
+++ /dev/null
@@ -1,346 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-/*
- * Security options etc.
- * 
- * Module derived from code originally written by Rob McCool
- * 
- */
-
-#include "apr_strings.h"
-#include "apr_network_io.h"
-#include "apr_lib.h"
-
-#define APR_WANT_STRFUNC
-#define APR_WANT_BYTEFUNC
-#include "apr_want.h"
-
-#include "ap_config.h"
-#include "httpd.h"
-#include "http_core.h"
-#include "http_config.h"
-#include "http_log.h"
-#include "http_request.h"
-
-#if APR_HAVE_NETINET_IN_H
-#include <netinet/in.h>
-#endif
-
-enum allowdeny_type {
-    T_ENV,
-    T_ALL,
-    T_IP,
-    T_HOST,
-    T_FAIL
-};
-
-typedef struct {
-    apr_int64_t limited;
-    union {
-        char *from;
-        apr_ipsubnet_t *ip;
-    } x;
-    enum allowdeny_type type;
-} allowdeny;
-
-/* things in the 'order' array */
-#define DENY_THEN_ALLOW 0
-#define ALLOW_THEN_DENY 1
-#define MUTUAL_FAILURE 2
-
-typedef struct {
-    int order[METHODS];
-    apr_array_header_t *allows;
-    apr_array_header_t *denys;
-} access_dir_conf;
-
-module AP_MODULE_DECLARE_DATA access_module;
-
-static void *create_access_dir_config(apr_pool_t *p, char *dummy)
-{
-    int i;
-    access_dir_conf *conf =
-        (access_dir_conf *)apr_pcalloc(p, sizeof(access_dir_conf));
-
-    for (i = 0; i < METHODS; ++i) {
-        conf->order[i] = DENY_THEN_ALLOW;
-    }
-    conf->allows = apr_array_make(p, 1, sizeof(allowdeny));
-    conf->denys = apr_array_make(p, 1, sizeof(allowdeny));
-
-    return (void *)conf;
-}
-
-static const char *order(cmd_parms *cmd, void *dv, const char *arg)
-{
-    access_dir_conf *d = (access_dir_conf *) dv;
-    int i, o;
-
-    if (!strcasecmp(arg, "allow,deny"))
-	o = ALLOW_THEN_DENY;
-    else if (!strcasecmp(arg, "deny,allow"))
-	o = DENY_THEN_ALLOW;
-    else if (!strcasecmp(arg, "mutual-failure"))
-	o = MUTUAL_FAILURE;
-    else
-	return "unknown order";
-
-    for (i = 0; i < METHODS; ++i)
-	if (cmd->limited & (AP_METHOD_BIT << i))
-	    d->order[i] = o;
-
-    return NULL;
-}
-
-static const char *allow_cmd(cmd_parms *cmd, void *dv, const char *from, 
-                             const char *where_c)
-{
-    access_dir_conf *d = (access_dir_conf *) dv;
-    allowdeny *a;
-    char *where = apr_pstrdup(cmd->pool, where_c);
-    char *s;
-    char msgbuf[120];
-    apr_status_t rv;
-
-    if (strcasecmp(from, "from"))
-	return "allow and deny must be followed by 'from'";
-
-    a = (allowdeny *) apr_array_push(cmd->info ? d->allows : d->denys);
-    a->x.from = where;
-    a->limited = cmd->limited;
-
-    if (!strncasecmp(where, "env=", 4)) {
-	a->type = T_ENV;
-	a->x.from += 4;
-
-    }
-    else if (!strcasecmp(where, "all")) {
-	a->type = T_ALL;
-    }
-    else if ((s = strchr(where, '/'))) {
-        *s++ = '\0';
-        rv = apr_ipsubnet_create(&a->x.ip, where, s, cmd->pool);
-        if(APR_STATUS_IS_EINVAL(rv)) {
-            /* looked nothing like an IP address */
-            return "An IP address was expected";
-        }
-        else if (rv != APR_SUCCESS) {
-            apr_strerror(rv, msgbuf, sizeof msgbuf);
-            return apr_pstrdup(cmd->pool, msgbuf);
-        }
-        a->type = T_IP;
-    }
-    else if (!APR_STATUS_IS_EINVAL(rv = apr_ipsubnet_create(&a->x.ip, where, NULL, cmd->pool))) {
-        if (rv != APR_SUCCESS) {
-            apr_strerror(rv, msgbuf, sizeof msgbuf);
-            return apr_pstrdup(cmd->pool, msgbuf);
-        }
-        a->type = T_IP;
-    }
-    else { /* no slash, didn't look like an IP address => must be a host */
-	a->type = T_HOST;
-    }
-
-    return NULL;
-}
-
-static char its_an_allow;
-
-static const command_rec access_cmds[] =
-{
-    AP_INIT_TAKE1("order", order, NULL, OR_LIMIT,
-                  "'allow,deny', 'deny,allow', or 'mutual-failure'"),
-    AP_INIT_ITERATE2("allow", allow_cmd, &its_an_allow, OR_LIMIT,
-                     "'from' followed by hostnames or IP-address wildcards"),
-    AP_INIT_ITERATE2("deny", allow_cmd, NULL, OR_LIMIT,
-                     "'from' followed by hostnames or IP-address wildcards"),
-    {NULL}
-};
-
-static int in_domain(const char *domain, const char *what)
-{
-    int dl = strlen(domain);
-    int wl = strlen(what);
-
-    if ((wl - dl) >= 0) {
-	if (strcasecmp(domain, &what[wl - dl]) != 0)
-	    return 0;
-
-	/* Make sure we matched an *entire* subdomain --- if the user
-	 * said 'allow from good.com', we don't want people from nogood.com
-	 * to be able to get in.
-	 */
-
-	if (wl == dl)
-	    return 1;		/* matched whole thing */
-	else
-	    return (domain[0] == '.' || what[wl - dl - 1] == '.');
-    }
-    else
-	return 0;
-}
-
-static int find_allowdeny(request_rec *r, apr_array_header_t *a, int method)
-{
-
-    allowdeny *ap = (allowdeny *) a->elts;
-    apr_int64_t mmask = (AP_METHOD_BIT << method);
-    int i;
-    int gothost = 0;
-    const char *remotehost = NULL;
-
-    for (i = 0; i < a->nelts; ++i) {
-	if (!(mmask & ap[i].limited))
-	    continue;
-
-	switch (ap[i].type) {
-	case T_ENV:
-	    if (apr_table_get(r->subprocess_env, ap[i].x.from)) {
-		return 1;
-	    }
-	    break;
-
-	case T_ALL:
-	    return 1;
-
-	case T_IP:
-            if (apr_ipsubnet_test(ap[i].x.ip, r->connection->remote_addr)) {
-                return 1;
-            }
-            break;
-
-	case T_HOST:
-	    if (!gothost) {
-                int remotehost_is_ip;
-
-		remotehost = ap_get_remote_host(r->connection, r->per_dir_config,
-                                                REMOTE_DOUBLE_REV, &remotehost_is_ip);
-
-		if ((remotehost == NULL) || remotehost_is_ip)
-		    gothost = 1;
-		else
-		    gothost = 2;
-	    }
-
-	    if ((gothost == 2) && in_domain(ap[i].x.from, remotehost))
-		return 1;
-	    break;
-
-	case T_FAIL:
-	    /* do nothing? */
-	    break;
-	}
-    }
-
-    return 0;
-}
-
-static int check_dir_access(request_rec *r)
-{
-    int method = r->method_number;
-    int ret = OK;
-    access_dir_conf *a = (access_dir_conf *)
-        ap_get_module_config(r->per_dir_config, &access_module);
-
-    if (a->order[method] == ALLOW_THEN_DENY) {
-        ret = HTTP_FORBIDDEN;
-        if (find_allowdeny(r, a->allows, method))
-            ret = OK;
-        if (find_allowdeny(r, a->denys, method))
-            ret = HTTP_FORBIDDEN;
-    }
-    else if (a->order[method] == DENY_THEN_ALLOW) {
-        if (find_allowdeny(r, a->denys, method))
-            ret = HTTP_FORBIDDEN;
-        if (find_allowdeny(r, a->allows, method))
-            ret = OK;
-    }
-    else {
-        if (find_allowdeny(r, a->allows, method)
-            && !find_allowdeny(r, a->denys, method))
-            ret = OK;
-        else
-            ret = HTTP_FORBIDDEN;
-    }
-
-    if (ret == HTTP_FORBIDDEN
-        && (ap_satisfies(r) != SATISFY_ANY || !ap_some_auth_required(r))) {
-        ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-            "client denied by server configuration: %s",
-            r->filename);
-    }
-
-    return ret;
-}
-
-static void register_hooks(apr_pool_t *p)
-{
-    ap_hook_access_checker(check_dir_access,NULL,NULL,APR_HOOK_MIDDLE);
-}
-
-module AP_MODULE_DECLARE_DATA access_module =
-{
-    STANDARD20_MODULE_STUFF,
-    create_access_dir_config,	/* dir config creater */
-    NULL,			/* dir merger --- default is to override */
-    NULL,			/* server config */
-    NULL,			/* merge server config */
-    access_cmds,
-    register_hooks		/* register hooks */
-};
diff --git a/modules/aaa/mod_access.dsp b/modules/aaa/mod_access.dsp
deleted file mode 100644
index ee1118b..0000000
--- a/modules/aaa/mod_access.dsp
+++ /dev/null
@@ -1,128 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mod_access" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mod_access - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "mod_access.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "mod_access.mak" CFG="mod_access - Win32 Release"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "mod_access - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mod_access - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "mod_access - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /O2 /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Release\mod_access" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /map /machine:I386 /out:"Release/mod_access.so" /base:@..\..\os\win32\BaseAddr.ref,mod_access
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /map /machine:I386 /out:"Release/mod_access.so" /base:@..\..\os\win32\BaseAddr.ref,mod_access
-
-!ELSEIF  "$(CFG)" == "mod_access - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Debug\mod_access" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /map /debug /machine:I386 /out:"Debug/mod_access.so" /base:@..\..\os\win32\BaseAddr.ref,mod_access
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /map /debug /machine:I386 /out:"Debug/mod_access.so" /base:@..\..\os\win32\BaseAddr.ref,mod_access
-
-!ENDIF 
-
-# Begin Target
-
-# Name "mod_access - Win32 Release"
-# Name "mod_access - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\mod_access.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mod_access.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\build\win32\win32ver.awk
-
-!IF  "$(CFG)" == "mod_access - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_access.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ../../build/win32/win32ver.awk mod_access  "access_module for Apache" ../../include/ap_release.h > .\mod_access.rc
-
-# End Custom Build
-
-!ELSEIF  "$(CFG)" == "mod_access - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_access.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ../../build/win32/win32ver.awk mod_access  "access_module for Apache" ../../include/ap_release.h > .\mod_access.rc
-
-# End Custom Build
-
-!ENDIF 
-
-# End Source File
-# End Target
-# End Project
diff --git a/modules/aaa/mod_access.exp b/modules/aaa/mod_access.exp
deleted file mode 100644
index f8aff33..0000000
--- a/modules/aaa/mod_access.exp
+++ /dev/null
@@ -1 +0,0 @@
-access_module
diff --git a/modules/aaa/mod_auth.c b/modules/aaa/mod_auth.c
deleted file mode 100644
index f3afc21..0000000
--- a/modules/aaa/mod_auth.c
+++ /dev/null
@@ -1,356 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-/*
- * http_auth: authentication
- * 
- * Rob McCool
- * 
- * Adapted to Apache by rst.
- *
- * dirkx - Added Authoritative control to allow passing on to lower
- *         modules if and only if the userid is not known to this
- *         module. A known user with a faulty or absent password still
- *         causes an AuthRequired. The default is 'Authoritative', i.e.
- *         no control is passed along.
- */
-
-#include "apr_strings.h"
-#include "apr_lib.h"            /* for apr_password_validate */
-
-#include "ap_config.h"
-#include "httpd.h"
-#include "http_config.h"
-#include "http_core.h"
-#include "http_log.h"
-#include "http_protocol.h"
-#include "http_request.h"
-
-
-typedef struct {
-    char *auth_pwfile;
-    char *auth_grpfile;
-    int auth_authoritative;
-} auth_config_rec;
-
-static void *create_auth_dir_config(apr_pool_t *p, char *d)
-{
-    auth_config_rec *conf = apr_palloc(p, sizeof(*conf));
-
-    conf->auth_pwfile = NULL;     /* just to illustrate the default really */
-    conf->auth_grpfile = NULL;    /* unless you have a broken HP cc */
-    conf->auth_authoritative = 1; /* keep the fortress secure by default */
-    return conf;
-}
-
-static const char *set_auth_slot(cmd_parms *cmd, void *offset, const char *f, 
-                                 const char *t)
-{
-    if (t && strcmp(t, "standard")) {
-        return apr_pstrcat(cmd->pool, "Invalid auth file type: ", t, NULL);
-    }
-
-    return ap_set_file_slot(cmd, offset, f);
-}
-
-static const command_rec auth_cmds[] =
-{
-    AP_INIT_TAKE12("AuthUserFile", set_auth_slot,
-                   (void *) APR_XtOffsetOf(auth_config_rec, auth_pwfile),
-                   OR_AUTHCFG, "text file containing user IDs and passwords"),
-    AP_INIT_TAKE12("AuthGroupFile", set_auth_slot,
-                   (void *) APR_XtOffsetOf(auth_config_rec, auth_grpfile),
-                   OR_AUTHCFG,
-                   "text file containing group names and member user IDs"),
-    AP_INIT_FLAG("AuthAuthoritative", ap_set_flag_slot,
-                 (void *) APR_XtOffsetOf(auth_config_rec, auth_authoritative),
-                 OR_AUTHCFG,
-                 "Set to 'no' to allow access control to be passed along to "
-                 "lower modules if the UserID is not known to this module"),
-    {NULL}
-};
-
-module AP_MODULE_DECLARE_DATA auth_module;
-
-static char *get_pw(request_rec *r, char *user, char *auth_pwfile)
-{
-    ap_configfile_t *f;
-    char l[MAX_STRING_LEN];
-    const char *rpw, *w;
-    apr_status_t status;
-
-    if ((status = ap_pcfg_openfile(&f, r->pool, auth_pwfile)) != APR_SUCCESS) {
-        ap_log_rerror(APLOG_MARK, APLOG_ERR, status, r,
-                      "Could not open password file: %s", auth_pwfile);
-        return NULL;
-    }
-    while (!(ap_cfg_getline(l, MAX_STRING_LEN, f))) {
-        if ((l[0] == '#') || (!l[0])) {
-            continue;
-        }
-        rpw = l;
-        w = ap_getword(r->pool, &rpw, ':');
-
-        if (!strcmp(user, w)) {
-            ap_cfg_closefile(f);
-            return ap_getword(r->pool, &rpw, ':');
-        }
-    }
-    ap_cfg_closefile(f);
-    return NULL;
-}
-
-static apr_table_t *groups_for_user(apr_pool_t *p, char *user, char *grpfile)
-{
-    ap_configfile_t *f;
-    apr_table_t *grps = apr_table_make(p, 15);
-    apr_pool_t *sp;
-    char l[MAX_STRING_LEN];
-    const char *group_name, *ll, *w;
-    apr_status_t status;
-
-    if ((status = ap_pcfg_openfile(&f, p, grpfile)) != APR_SUCCESS) {
-/*add?  aplog_error(APLOG_MARK, APLOG_ERR, NULL,
-                    "Could not open group file: %s", grpfile);*/
-        return NULL;
-    }
-
-    apr_pool_create(&sp, p);
-
-    while (!(ap_cfg_getline(l, MAX_STRING_LEN, f))) {
-        if ((l[0] == '#') || (!l[0])) {
-            continue;
-        }
-        ll = l;
-        apr_pool_clear(sp);
-
-        group_name = ap_getword(sp, &ll, ':');
-
-        while (ll[0]) {
-            w = ap_getword_conf(sp, &ll);
-            if (!strcmp(w, user)) {
-                apr_table_setn(grps, apr_pstrdup(p, group_name), "in");
-                break;
-            }
-        }
-    }
-    ap_cfg_closefile(f);
-    apr_pool_destroy(sp);
-    return grps;
-}
-
-/* These functions return 0 if client is OK, and proper error status
- * if not... either HTTP_UNAUTHORIZED, if we made a check, and it failed, or
- * HTTP_INTERNAL_SERVER_ERROR, if things are so totally confused that we
- * couldn't figure out how to tell if the client is authorized or not.
- *
- * If they return DECLINED, and all other modules also decline, that's
- * treated by the server core as a configuration error, logged and
- * reported as such.
- */
-
-/* Determine user ID, and check if it really is that user, for HTTP
- * basic authentication...
- */
-
-static int authenticate_basic_user(request_rec *r)
-{
-    auth_config_rec *conf = ap_get_module_config(r->per_dir_config,
-                                                 &auth_module);
-    const char *sent_pw;
-    char *real_pw;
-    apr_status_t invalid_pw;
-    int res;
-
-    if ((res = ap_get_basic_auth_pw(r, &sent_pw))) {
-        return res;
-    }
-
-    if (!conf->auth_pwfile) {
-        return DECLINED;
-    }
-
-    if (!(real_pw = get_pw(r, r->user, conf->auth_pwfile))) {
-        if (!(conf->auth_authoritative)) {
-            return DECLINED;
-        }
-        ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                      "user %s not found: %s", r->user, r->uri);
-        ap_note_basic_auth_failure(r);
-        return HTTP_UNAUTHORIZED;
-    }
-    invalid_pw = apr_password_validate(sent_pw, real_pw);
-    if (invalid_pw != APR_SUCCESS) {
-        ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                      "user %s: authentication failure for \"%s\": "
-                      "Password Mismatch",
-                      r->user, r->uri);
-        ap_note_basic_auth_failure(r);
-        return HTTP_UNAUTHORIZED;
-    }
-    return OK;
-}
-
-/* Checking ID */
-
-static int check_user_access(request_rec *r)
-{
-    auth_config_rec *conf = ap_get_module_config(r->per_dir_config,
-                                                 &auth_module);
-    char *user = r->user;
-    int m = r->method_number;
-    int method_restricted = 0;
-    register int x;
-    const char *t, *w;
-    apr_table_t *grpstatus;
-    const apr_array_header_t *reqs_arr = ap_requires(r);
-    require_line *reqs;
-
-    /* BUG FIX: tadc, 11-Nov-1995.  If there is no "requires" directive, 
-     * then any user will do.
-     */
-    if (!reqs_arr) {
-        return OK;
-    }
-    reqs = (require_line *)reqs_arr->elts;
-
-    if (conf->auth_grpfile) {
-        grpstatus = groups_for_user(r->pool, user, conf->auth_grpfile);
-    }
-    else {
-        grpstatus = NULL;
-    }
-
-    for (x = 0; x < reqs_arr->nelts; x++) {
-
-        if (!(reqs[x].method_mask & (AP_METHOD_BIT << m))) {
-            continue;
-        }
-
-        method_restricted = 1;
-
-        t = reqs[x].requirement;
-        w = ap_getword_white(r->pool, &t);
-        if (!strcmp(w, "valid-user")) {
-            return OK;
-        }
-        if (!strcmp(w, "user")) {
-            while (t[0]) {
-                w = ap_getword_conf(r->pool, &t);
-                if (!strcmp(user, w)) {
-                    return OK;
-                }
-            }
-        }
-        else if (!strcmp(w, "group")) {
-            if (!grpstatus) {
-                return DECLINED;        /* DBM group?  Something else? */
-            }
-
-            while (t[0]) {
-                w = ap_getword_conf(r->pool, &t);
-                if (apr_table_get(grpstatus, w)) {
-                    return OK;
-                }
-            }
-        }
-        else if (conf->auth_authoritative) {
-            /* if we aren't authoritative, any require directive could be
-             * valid even if we don't grok it.  However, if we are 
-             * authoritative, we can warn the user they did something wrong.
-             * That something could be a missing "AuthAuthoritative off", but
-             * more likely is a typo in the require directive.
-             */
-            ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                          "access to %s failed, reason: unknown require "
-                          "directive:\"%s\"", r->uri, reqs[x].requirement);
-        }
-    }
-
-    if (!method_restricted) {
-        return OK;
-    }
-
-    if (!(conf->auth_authoritative)) {
-        return DECLINED;
-    }
-
-    ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                  "access to %s failed, reason: user %s not allowed access",
-                  r->uri, user);
-        
-    ap_note_basic_auth_failure(r);
-    return HTTP_UNAUTHORIZED;
-}
-
-static void register_hooks(apr_pool_t *p)
-{
-    ap_hook_check_user_id(authenticate_basic_user,NULL,NULL,APR_HOOK_MIDDLE);
-    ap_hook_auth_checker(check_user_access,NULL,NULL,APR_HOOK_MIDDLE);
-}
-
-module AP_MODULE_DECLARE_DATA auth_module =
-{
-    STANDARD20_MODULE_STUFF,
-    create_auth_dir_config,     /* dir config creater */
-    NULL,                       /* dir merger --- default is to override */
-    NULL,                       /* server config */
-    NULL,                       /* merge server config */
-    auth_cmds,                  /* command apr_table_t */
-    register_hooks              /* register hooks */
-};
diff --git a/modules/aaa/mod_auth.dsp b/modules/aaa/mod_auth.dsp
deleted file mode 100644
index b2d6863..0000000
--- a/modules/aaa/mod_auth.dsp
+++ /dev/null
@@ -1,128 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mod_auth" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mod_auth - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "mod_auth.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "mod_auth.mak" CFG="mod_auth - Win32 Release"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "mod_auth - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mod_auth - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "mod_auth - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /O2 /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Release\mod_auth" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /map /machine:I386 /out:"Release/mod_auth.so" /base:@..\..\os\win32\BaseAddr.ref,mod_auth
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /map /machine:I386 /out:"Release/mod_auth.so" /base:@..\..\os\win32\BaseAddr.ref,mod_auth
-
-!ELSEIF  "$(CFG)" == "mod_auth - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Debug\mod_auth" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /map /debug /machine:I386 /out:"Debug/mod_auth.so" /base:@..\..\os\win32\BaseAddr.ref,mod_auth
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /map /debug /machine:I386 /out:"Debug/mod_auth.so" /base:@..\..\os\win32\BaseAddr.ref,mod_auth
-
-!ENDIF 
-
-# Begin Target
-
-# Name "mod_auth - Win32 Release"
-# Name "mod_auth - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\mod_auth.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mod_auth.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\build\win32\win32ver.awk
-
-!IF  "$(CFG)" == "mod_auth - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_auth.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ../../build/win32/win32ver.awk mod_auth  "auth_module for Apache" ../../include/ap_release.h > .\mod_auth.rc
-
-# End Custom Build
-
-!ELSEIF  "$(CFG)" == "mod_auth - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_auth.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ../../build/win32/win32ver.awk mod_auth  "auth_module for Apache" ../../include/ap_release.h > .\mod_auth.rc
-
-# End Custom Build
-
-!ENDIF 
-
-# End Source File
-# End Target
-# End Project
diff --git a/modules/aaa/mod_auth.exp b/modules/aaa/mod_auth.exp
deleted file mode 100644
index 76adad0..0000000
--- a/modules/aaa/mod_auth.exp
+++ /dev/null
@@ -1 +0,0 @@
-auth_module
diff --git a/modules/aaa/mod_auth_anon.c b/modules/aaa/mod_auth_anon.c
deleted file mode 100644
index 90fc0b4..0000000
--- a/modules/aaa/mod_auth_anon.c
+++ /dev/null
@@ -1,279 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-/*
- * http_auth: authentication
- * 
- * Rob McCool & Brian Behlendorf.
- * 
- * Adapted to Apache by rst.
- *
- * Version 0.5 May 1996
- *
- * Modified by Dirk.vanGulik@jrc.it to
- * 
- * Adapted to allow anonymous logins, just like with Anon-FTP, when
- * one gives the magic user name 'anonymous' and ones email address
- * as the password.
- *
- * Just add the following tokes to your <directory> setup:
- * 
- * Anonymous                    magic-userid [magic-userid]...
- *
- * Anonymous_MustGiveEmail      [ on | off ] default = on
- * Anonymous_LogEmail           [ on | off ] default = on
- * Anonymous_VerifyEmail        [ on | off ] default = off
- * Anonymous_NoUserId           [ on | off ] default = off
- * Anonymous_Authoritative      [ on | off ] default = off
- *
- * The magic user id is something like 'anonymous', it is NOT case sensitive. 
- * 
- * The MustGiveEmail flag can be used to force users to enter something
- * in the password field (like an email address). Default is on.
- *
- * Furthermore the 'NoUserID' flag can be set to allow completely empty
- * usernames in as well; this can be is convenient as a single return
- * in broken GUIs like W95 is often given by the user. The Default is off.
- *
- * Dirk.vanGulik@jrc.it; http://ewse.ceo.org; http://me-www.jrc.it/~dirkx
- * 
- */
-
-#include "apr_strings.h"
-
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-#include "httpd.h"
-#include "http_config.h"
-#include "http_core.h"
-#include "http_log.h"
-#include "http_request.h"
-#include "http_protocol.h"
-
-
-typedef struct anon_auth {
-    char *password;
-    struct anon_auth *next;
-} anon_auth;
-
-typedef struct {
-
-    anon_auth *anon_auth_passwords;
-    int anon_auth_nouserid;
-    int anon_auth_logemail;
-    int anon_auth_verifyemail;
-    int anon_auth_mustemail;
-    int anon_auth_authoritative;
-
-} anon_auth_config_rec;
-
-
-static void *create_anon_auth_dir_config(apr_pool_t *p, char *d)
-{
-    anon_auth_config_rec *conf = apr_palloc(p, sizeof(*conf));
-
-    /* just to illustrate the defaults really. */
-    conf->anon_auth_passwords = NULL;
-
-    conf->anon_auth_nouserid = 0;
-    conf->anon_auth_logemail = 1;
-    conf->anon_auth_verifyemail = 0;
-    conf->anon_auth_mustemail = 1;
-    conf->anon_auth_authoritative = 0;
-    return conf;
-}
-
-static const char *anon_set_string_slots(cmd_parms *cmd,
-                                         void *my_config, const char *arg)
-{
-    anon_auth_config_rec *conf = my_config;
-    anon_auth *first;
-
-    if (!(*arg))
-	return "Anonymous string cannot be empty, use Anonymous_NoUserId instead";
-
-    /* squeeze in a record */
-    first = conf->anon_auth_passwords;
-
-    if (!(conf->anon_auth_passwords = apr_palloc(cmd->pool, sizeof(anon_auth))) ||
-       !(conf->anon_auth_passwords->password = apr_pstrdup(cmd->pool, arg)))
-	     return "Failed to claim memory for an anonymous password...";
-
-    /* and repair the next */
-    conf->anon_auth_passwords->next = first;
-
-    return NULL;
-}
-
-static const command_rec anon_auth_cmds[] =
-{
-    AP_INIT_ITERATE("Anonymous", anon_set_string_slots, NULL, OR_AUTHCFG, 
-     "a space-separated list of user IDs"),
-    AP_INIT_FLAG("Anonymous_MustGiveEmail", ap_set_flag_slot,
-     (void *)APR_XtOffsetOf(anon_auth_config_rec, anon_auth_mustemail),
-     OR_AUTHCFG, "Limited to 'on' or 'off'"),
-    AP_INIT_FLAG("Anonymous_NoUserId", ap_set_flag_slot,
-     (void *)APR_XtOffsetOf(anon_auth_config_rec, anon_auth_nouserid),
-     OR_AUTHCFG, "Limited to 'on' or 'off'"),
-    AP_INIT_FLAG("Anonymous_VerifyEmail", ap_set_flag_slot,
-     (void *)APR_XtOffsetOf(anon_auth_config_rec, anon_auth_verifyemail),
-     OR_AUTHCFG, "Limited to 'on' or 'off'"),
-    AP_INIT_FLAG("Anonymous_LogEmail", ap_set_flag_slot,
-     (void *)APR_XtOffsetOf(anon_auth_config_rec, anon_auth_logemail),
-     OR_AUTHCFG, "Limited to 'on' or 'off'"),
-    AP_INIT_FLAG("Anonymous_Authoritative", ap_set_flag_slot,
-     (void *)APR_XtOffsetOf(anon_auth_config_rec, anon_auth_authoritative),
-     OR_AUTHCFG, "Limited to 'on' or 'off'"),
-    {NULL}
-};
-
-module AP_MODULE_DECLARE_DATA auth_anon_module;
-
-static int anon_authenticate_basic_user(request_rec *r)
-{
-    anon_auth_config_rec *conf = ap_get_module_config(r->per_dir_config,
-                                                      &auth_anon_module);
-    const char *sent_pw;
-    int res = DECLINED;
-
-    if ((res = ap_get_basic_auth_pw(r, &sent_pw)))
-	return res;
-
-    /* Ignore if we are not configured */
-    if (!conf->anon_auth_passwords)
-	return DECLINED;
-
-    /* Do we allow an empty userID and/or is it the magic one
-     */
-
-    if ((!(r->user[0])) && (conf->anon_auth_nouserid)) {
-	res = OK;
-    }
-    else {
-	anon_auth *p = conf->anon_auth_passwords;
-	res = DECLINED;
-	while ((res == DECLINED) && (p != NULL)) {
-	    if (!(strcasecmp(r->user, p->password)))
-		res = OK;
-	    p = p->next;
-	}
-    }
-    if (
-    /* username is OK */
-	   (res == OK)
-    /* password been filled out ? */
-	   && ((!conf->anon_auth_mustemail) || strlen(sent_pw))
-    /* does the password look like an email address ? */
-	   && ((!conf->anon_auth_verifyemail)
-	       || ((strpbrk("@", sent_pw) != NULL)
-		   && (strpbrk(".", sent_pw) != NULL)))) {
-	if (conf->anon_auth_logemail && ap_is_initial_req(r)) {
-	    ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_INFO, APR_SUCCESS, r,
-			"Anonymous: Passwd <%s> Accepted",
-			sent_pw ? sent_pw : "\'none\'");
-	}
-	return OK;
-    }
-    else {
-	if (conf->anon_auth_authoritative) {
-	    ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, APR_SUCCESS, r,
-			"Anonymous: Authoritative, Passwd <%s> not accepted",
-			sent_pw ? sent_pw : "\'none\'");
-	    return HTTP_UNAUTHORIZED;
-	}
-	/* Drop out the bottom to return DECLINED */
-    }
-
-    return DECLINED;
-}
-
-static int check_anon_access(request_rec *r)
-{
-#ifdef NOTYET
-    conn_rec *c = r->connection;
-    anon_auth_config_rec *conf = ap_get_module_config(r->per_dir_config,
-                                                      &auth_anon_module);
-
-    if (!conf->anon_auth)
-	return DECLINED;
-
-    if (strcasecmp(r->connection->user, conf->anon_auth))
-	return DECLINED;
-
-    return OK;
-#endif
-    return DECLINED;
-}
-
-static void register_hooks(apr_pool_t *p)
-{
-    ap_hook_check_user_id(anon_authenticate_basic_user,NULL,NULL,APR_HOOK_MIDDLE);
-    ap_hook_auth_checker(check_anon_access,NULL,NULL,APR_HOOK_MIDDLE);
-}
-
-module AP_MODULE_DECLARE_DATA auth_anon_module =
-{
-    STANDARD20_MODULE_STUFF,
-    create_anon_auth_dir_config,/* dir config creater */
-    NULL,			/* dir merger ensure strictness */
-    NULL,			/* server config */
-    NULL,			/* merge server config */
-    anon_auth_cmds,		/* command apr_table_t */
-    register_hooks		/* register hooks */
-};
diff --git a/modules/aaa/mod_auth_anon.dsp b/modules/aaa/mod_auth_anon.dsp
deleted file mode 100644
index 9f2cd2d..0000000
--- a/modules/aaa/mod_auth_anon.dsp
+++ /dev/null
@@ -1,128 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mod_auth_anon" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mod_auth_anon - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "mod_auth_anon.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "mod_auth_anon.mak" CFG="mod_auth_anon - Win32 Release"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "mod_auth_anon - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mod_auth_anon - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "mod_auth_anon - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /O2 /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Release\mod_auth_anon" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /map /machine:I386 /out:"Release/mod_auth_anon.so" /base:@..\..\os\win32\BaseAddr.ref,mod_auth_anon
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /map /machine:I386 /out:"Release/mod_auth_anon.so" /base:@..\..\os\win32\BaseAddr.ref,mod_auth_anon
-
-!ELSEIF  "$(CFG)" == "mod_auth_anon - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Debug\mod_auth_anon" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /map /debug /machine:I386 /out:"Debug/mod_auth_anon.so" /base:@..\..\os\win32\BaseAddr.ref,mod_auth_anon
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /map /debug /machine:I386 /out:"Debug/mod_auth_anon.so" /base:@..\..\os\win32\BaseAddr.ref,mod_auth_anon
-
-!ENDIF 
-
-# Begin Target
-
-# Name "mod_auth_anon - Win32 Release"
-# Name "mod_auth_anon - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\mod_auth_anon.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mod_auth_anon.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\build\win32\win32ver.awk
-
-!IF  "$(CFG)" == "mod_auth_anon - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_auth_anon.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ../../build/win32/win32ver.awk mod_auth_anon  "auth_anon_module for Apache" ../../include/ap_release.h > .\mod_auth_anon.rc
-
-# End Custom Build
-
-!ELSEIF  "$(CFG)" == "mod_auth_anon - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_auth_anon.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ../../build/win32/win32ver.awk mod_auth_anon  "auth_anon_module for Apache" ../../include/ap_release.h > .\mod_auth_anon.rc
-
-# End Custom Build
-
-!ENDIF 
-
-# End Source File
-# End Target
-# End Project
diff --git a/modules/aaa/mod_auth_anon.exp b/modules/aaa/mod_auth_anon.exp
deleted file mode 100644
index 6328253..0000000
--- a/modules/aaa/mod_auth_anon.exp
+++ /dev/null
@@ -1 +0,0 @@
-auth_anon_module
diff --git a/modules/aaa/mod_auth_dbm.c b/modules/aaa/mod_auth_dbm.c
deleted file mode 100644
index 782412d..0000000
--- a/modules/aaa/mod_auth_dbm.c
+++ /dev/null
@@ -1,336 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-/*
- * http_auth: authentication
- * 
- * Rob McCool & Brian Behlendorf.
- * 
- * Adapted to Apache by rst.
- *
- * dirkx - Added Authoritative control to allow passing on to lower  
- *         modules if and only if the userid is not known to this
- *         module. A known user with a faulty or absent password still
- *         causes an AuthRequired. The default is 'Authoritative', i.e.
- *         no control is passed along.
- */
-
-#include "apr_lib.h"
-
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-#include "apr_strings.h"
-#include "apr_dbm.h"
-
-#include "httpd.h"
-#include "http_config.h"
-#include "http_core.h"
-#include "http_log.h"
-#include "http_protocol.h"
-#include "http_request.h"   /* for ap_hook_(check_user_id | auth_checker)*/
-
-
-typedef struct {
-    char *auth_dbmpwfile;
-    char *auth_dbmgrpfile;
-    char *auth_dbmtype;
-    int auth_dbmauthoritative;
-} dbm_auth_config_rec;
-
-static void *create_dbm_auth_dir_config(apr_pool_t *p, char *d)
-{
-    dbm_auth_config_rec *conf = apr_palloc(p, sizeof(*conf));
-
-    conf->auth_dbmpwfile = NULL;
-    conf->auth_dbmgrpfile = NULL;
-    conf->auth_dbmtype = "default";
-    conf->auth_dbmauthoritative = 1;  /* fortress is secure by default */
-
-    return conf;
-}
-
-static const char *set_dbm_slot(cmd_parms *cmd, void *offset,
-                                const char *f, const char *t)
-{
-    if (!t || strcmp(t, "dbm"))
-        return DECLINE_CMD;
-
-    return ap_set_file_slot(cmd, offset, f);
-}
-
-static const char *set_dbm_type(cmd_parms *cmd, 
-                                void *dir_config, 
-                                const char *arg)
-{
-    dbm_auth_config_rec *conf = dir_config;
-   
-    conf->auth_dbmtype = apr_pstrdup(cmd->pool, arg);
-    return NULL;
-}
-
-static const command_rec dbm_auth_cmds[] =
-{
-    AP_INIT_TAKE1("AuthDBMUserFile", ap_set_file_slot,
-     (void *) APR_XtOffsetOf(dbm_auth_config_rec, auth_dbmpwfile),
-     OR_AUTHCFG, "dbm database file containing user IDs and passwords"),
-    AP_INIT_TAKE1("AuthDBMGroupFile", ap_set_file_slot,
-     (void *) APR_XtOffsetOf(dbm_auth_config_rec, auth_dbmgrpfile),
-     OR_AUTHCFG, "dbm database file containing group names and member user IDs"),
-    AP_INIT_TAKE12("AuthUserFile", set_dbm_slot,
-     (void *) APR_XtOffsetOf(dbm_auth_config_rec, auth_dbmpwfile),
-     OR_AUTHCFG, NULL),
-    AP_INIT_TAKE12("AuthGroupFile", set_dbm_slot,
-     (void *) APR_XtOffsetOf(dbm_auth_config_rec, auth_dbmgrpfile),
-     OR_AUTHCFG, NULL),
-    AP_INIT_TAKE1("AuthDBMType", set_dbm_type,
-     NULL,
-     OR_AUTHCFG, "what type of DBM file the user file is"),
-    AP_INIT_FLAG("AuthDBMAuthoritative", ap_set_flag_slot,
-     (void *) APR_XtOffsetOf(dbm_auth_config_rec, auth_dbmauthoritative),
-     OR_AUTHCFG, "Set to 'no' to allow access control to be passed along to lower modules, if the UserID is not known in this module"),
-    {NULL}
-};
-
-module AP_MODULE_DECLARE_DATA auth_dbm_module;
-
-static char *get_dbm_pw(request_rec *r, 
-                        char *user, 
-                        char *auth_dbmpwfile, 
-                        char *dbtype)
-{
-    apr_dbm_t *f;
-    apr_datum_t d, q;
-    char *pw = NULL;
-    apr_status_t retval;
-    q.dptr = user;
-#ifndef NETSCAPE_DBM_COMPAT
-    q.dsize = strlen(q.dptr);
-#else
-    q.dsize = strlen(q.dptr) + 1;
-#endif
-
-    retval = apr_dbm_open_ex(&f, dbtype, auth_dbmpwfile, APR_DBM_READONLY, 
-                             APR_OS_DEFAULT, r->pool);
-    if (retval != APR_SUCCESS) {
-        ap_log_rerror(APLOG_MARK, APLOG_ERR, retval, r,
-                      "could not open dbm (type %s) auth file: %s", dbtype, 
-                      auth_dbmpwfile);
-        return NULL;
-    }
-    if (apr_dbm_fetch(f, q, &d) == APR_SUCCESS && d.dptr) {
-        pw = apr_palloc(r->pool, d.dsize + 1);
-        strncpy(pw, d.dptr, d.dsize);
-        pw[d.dsize] = '\0'; /* Terminate the string */
-    }
-
-    apr_dbm_close(f);
-    return pw;
-}
-
-/* We do something strange with the group file.  If the group file
- * contains any : we assume the format is
- *      key=username value=":"groupname [":"anything here is ignored]
- * otherwise we now (0.8.14+) assume that the format is
- *      key=username value=groupname
- * The first allows the password and group files to be the same 
- * physical DBM file;   key=username value=password":"groupname[":"anything]
- *
- * mark@telescope.org, 22Sep95
- */
-
-static char *get_dbm_grp(request_rec *r, char *user, char *auth_dbmgrpfile, 
-                         char *dbtype)
-{
-    char *grp_data = get_dbm_pw(r, user, auth_dbmgrpfile,dbtype);
-    char *grp_colon;
-    char *grp_colon2;
-
-    if (grp_data == NULL)
-        return NULL;
-
-    if ((grp_colon = strchr(grp_data, ':')) != NULL) {
-        grp_colon2 = strchr(++grp_colon, ':');
-        if (grp_colon2)
-            *grp_colon2 = '\0';
-        return grp_colon;
-    }
-    return grp_data;
-}
-
-static int dbm_authenticate_basic_user(request_rec *r)
-{
-    dbm_auth_config_rec *conf = ap_get_module_config(r->per_dir_config,
-                                                     &auth_dbm_module);
-    const char *sent_pw;
-    char *real_pw, *colon_pw;
-    apr_status_t invalid_pw;
-    int res;
-
-    if ((res = ap_get_basic_auth_pw(r, &sent_pw)))
-        return res;
-
-    if (!conf->auth_dbmpwfile)
-        return DECLINED;
-
-    if (!(real_pw = get_dbm_pw(r, r->user, conf->auth_dbmpwfile,
-                               conf->auth_dbmtype))) {
-        if (!(conf->auth_dbmauthoritative))
-            return DECLINED;
-        ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                      "DBM user %s not found: %s", r->user, r->filename);
-        ap_note_basic_auth_failure(r);
-        return HTTP_UNAUTHORIZED;
-    }
-    /* Password is up to first : if exists */
-    colon_pw = strchr(real_pw, ':');
-    if (colon_pw) {
-        *colon_pw = '\0';
-    }
-    invalid_pw = apr_password_validate(sent_pw, real_pw);
-    if (invalid_pw != APR_SUCCESS) {
-        ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                      "DBM user %s: authentication failure for \"%s\": "
-                      "Password Mismatch",
-                      r->user, r->uri);
-        ap_note_basic_auth_failure(r);
-        return HTTP_UNAUTHORIZED;
-    }
-    return OK;
-}
-
-/* Checking ID */
-
-static int dbm_check_auth(request_rec *r)
-{
-    dbm_auth_config_rec *conf = ap_get_module_config(r->per_dir_config,
-                                                     &auth_dbm_module);
-    char *user = r->user;
-    int m = r->method_number;
-
-    const apr_array_header_t *reqs_arr = ap_requires(r);
-    require_line *reqs = reqs_arr ? (require_line *) reqs_arr->elts : NULL;
-
-    register int x;
-    const char *t;
-    char *w;
-
-    if (!conf->auth_dbmgrpfile)
-        return DECLINED;
-    if (!reqs_arr)
-        return DECLINED;
-
-    for (x = 0; x < reqs_arr->nelts; x++) {
-
-        if (!(reqs[x].method_mask & (AP_METHOD_BIT << m)))
-            continue;
-
-        t = reqs[x].requirement;
-        w = ap_getword_white(r->pool, &t);
-
-        if (!strcmp(w, "group") && conf->auth_dbmgrpfile) {
-            const char *orig_groups, *groups;
-            char *v;
-
-            if (!(groups = get_dbm_grp(r, user, conf->auth_dbmgrpfile,
-                                       conf->auth_dbmtype))) {
-                if (!(conf->auth_dbmauthoritative))
-                    return DECLINED;
-                ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                            "user %s not in DBM group file %s: %s",
-                            user, conf->auth_dbmgrpfile, r->filename);
-                ap_note_basic_auth_failure(r);
-                return HTTP_UNAUTHORIZED;
-            }
-            orig_groups = groups;
-            while (t[0]) {
-                w = ap_getword_white(r->pool, &t);
-                groups = orig_groups;
-                while (groups[0]) {
-                    v = ap_getword(r->pool, &groups, ',');
-                    if (!strcmp(v, w))
-                        return OK;
-                }
-            }
-            ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                          "user %s not in right group: %s",
-                          user, r->filename);
-            ap_note_basic_auth_failure(r);
-            return HTTP_UNAUTHORIZED;
-        }
-    }
-
-    return DECLINED;
-}
-
-static void register_hooks(apr_pool_t *p)
-{
-    ap_hook_check_user_id(dbm_authenticate_basic_user, NULL, NULL,
-                          APR_HOOK_MIDDLE);
-    ap_hook_auth_checker(dbm_check_auth, NULL, NULL, APR_HOOK_MIDDLE);
-}
-
-module AP_MODULE_DECLARE_DATA auth_dbm_module =
-{
-    STANDARD20_MODULE_STUFF,
-    create_dbm_auth_dir_config, /* dir config creater */
-    NULL,                       /* dir merger --- default is to override */
-    NULL,                       /* server config */
-    NULL,                       /* merge server config */
-    dbm_auth_cmds,              /* command apr_table_t */
-    register_hooks              /* register hooks */
-};
diff --git a/modules/aaa/mod_auth_dbm.dsp b/modules/aaa/mod_auth_dbm.dsp
deleted file mode 100644
index 59a2575..0000000
--- a/modules/aaa/mod_auth_dbm.dsp
+++ /dev/null
@@ -1,128 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mod_auth_dbm" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mod_auth_dbm - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "mod_auth_dbm.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "mod_auth_dbm.mak" CFG="mod_auth_dbm - Win32 Release"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "mod_auth_dbm - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mod_auth_dbm - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "mod_auth_dbm - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /O2 /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "AP_AUTH_DBM_USE_APR" /Fd"Release\mod_auth_dbm" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /map /machine:I386 /out:"Release/mod_auth_dbm.so" /base:@..\..\os\win32\BaseAddr.ref,mod_auth_dbm
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /map /machine:I386 /out:"Release/mod_auth_dbm.so" /base:@..\..\os\win32\BaseAddr.ref,mod_auth_dbm
-
-!ELSEIF  "$(CFG)" == "mod_auth_dbm - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "AP_AUTH_DBM_USE_APR" /Fd"Debug\mod_auth_dbm" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /map /debug /machine:I386 /out:"Debug/mod_auth_dbm.so" /base:@..\..\os\win32\BaseAddr.ref,mod_auth_dbm
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /map /debug /machine:I386 /out:"Debug/mod_auth_dbm.so" /base:@..\..\os\win32\BaseAddr.ref,mod_auth_dbm
-
-!ENDIF 
-
-# Begin Target
-
-# Name "mod_auth_dbm - Win32 Release"
-# Name "mod_auth_dbm - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\mod_auth_dbm.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mod_auth_dbm.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\build\win32\win32ver.awk
-
-!IF  "$(CFG)" == "mod_auth_dbm - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_auth_dbm.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ../../build/win32/win32ver.awk mod_auth_dbm  "auth_dbm_module for Apache" ../../include/ap_release.h > .\mod_auth_dbm.rc
-
-# End Custom Build
-
-!ELSEIF  "$(CFG)" == "mod_auth_dbm - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_auth_dbm.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ../../build/win32/win32ver.awk mod_auth_dbm  "auth_dbm_module for Apache" ../../include/ap_release.h > .\mod_auth_dbm.rc
-
-# End Custom Build
-
-!ENDIF 
-
-# End Source File
-# End Target
-# End Project
diff --git a/modules/aaa/mod_auth_dbm.exp b/modules/aaa/mod_auth_dbm.exp
deleted file mode 100644
index 7038e80..0000000
--- a/modules/aaa/mod_auth_dbm.exp
+++ /dev/null
@@ -1 +0,0 @@
-auth_dbm_module
diff --git a/modules/aaa/mod_auth_digest.c b/modules/aaa/mod_auth_digest.c
deleted file mode 100644
index f118ab3..0000000
--- a/modules/aaa/mod_auth_digest.c
+++ /dev/null
@@ -1,2222 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-/*
- * mod_auth_digest: MD5 digest authentication
- *
- * Originally by Alexei Kosut <akosut@nueva.pvt.k12.ca.us>
- * Updated to RFC-2617 by Ronald Tschalär <ronald@innovation.ch>
- * based on mod_auth, by Rob McCool and Robert S. Thau
- *
- * This module an updated version of modules/standard/mod_digest.c
- * It is still fairly new and problems may turn up - submit problem
- * reports to the Apache bug-database, or send them directly to me
- * at ronald@innovation.ch.
- *
- * Requires either /dev/random (or equivalent) or the truerand library,
- * available for instance from
- * ftp://research.att.com/dist/mab/librand.shar
- *
- * Open Issues:
- *   - qop=auth-int (when streams and trailer support available)
- *   - nonce-format configurability
- *   - Proxy-Authorization-Info header is set by this module, but is
- *     currently ignored by mod_proxy (needs patch to mod_proxy)
- *   - generating the secret takes a while (~ 8 seconds) if using the
- *     truerand library
- *   - The source of the secret should be run-time directive (with server
- *     scope: RSRC_CONF). However, that could be tricky when trying to
- *     choose truerand vs. file...
- *   - shared-mem not completely tested yet. Seems to work ok for me,
- *     but... (definitely won't work on Windoze)
- *   - Sharing a realm among multiple servers has following problems:
- *     o Server name and port can't be included in nonce-hash
- *       (we need two nonce formats, which must be configured explicitly)
- *     o Nonce-count check can't be for equal, or then nonce-count checking
- *       must be disabled. What we could do is the following:
- *       (expected < received) ? set expected = received : issue error
- *       The only problem is that it allows replay attacks when somebody
- *       captures a packet sent to one server and sends it to another
- *       one. Should we add "AuthDigestNcCheck Strict"?
- *   - expired nonces give amaya fits.  
- */
-
-#include "apr_sha1.h"
-#include "apr_base64.h"
-#include "apr_lib.h"
-#include "apr_time.h"
-#include "apr_errno.h"
-#include "apr_global_mutex.h"
-#include "apr_strings.h"
-
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-#include "ap_config.h"
-#include "httpd.h"
-#include "http_config.h"
-#include "http_core.h"
-#include "http_request.h"
-#include "http_log.h"
-#include "http_protocol.h"
-#include "apr_uri.h"
-#include "util_md5.h"
-#include "apr_shm.h"
-#include "apr_rmm.h"
-
-/* Disable shmem until pools/init gets sorted out 
- * remove following two lines when fixed 
- */
-#undef APR_HAS_SHARED_MEMORY
-#define APR_HAS_SHARED_MEMORY 0
-
-/* struct to hold the configuration info */
-
-typedef struct digest_config_struct {
-    const char  *dir_name;
-    const char  *pwfile;
-    const char  *grpfile;
-    const char  *realm;
-    char **qop_list;
-    apr_sha1_ctx_t  nonce_ctx;
-    apr_time_t    nonce_lifetime;
-    const char  *nonce_format;
-    int          check_nc;
-    const char  *algorithm;
-    char        *uri_list;
-    const char  *ha1;
-} digest_config_rec;
-
-
-#define DFLT_ALGORITHM  "MD5"
-
-#define DFLT_NONCE_LIFE (300*APR_USEC_PER_SEC)
-#define NEXTNONCE_DELTA (30*APR_USEC_PER_SEC)
-
-
-#define NONCE_TIME_LEN  (((sizeof(apr_time_t)+2)/3)*4)
-#define NONCE_HASH_LEN  (2*APR_SHA1_DIGESTSIZE)
-#define NONCE_LEN       (NONCE_TIME_LEN + NONCE_HASH_LEN)
-
-#define SECRET_LEN      20
-
-
-/* client list definitions */
-
-typedef struct hash_entry {
-    unsigned long      key;                     /* the key for this entry    */
-    struct hash_entry *next;                    /* next entry in the bucket  */
-    unsigned long      nonce_count;             /* for nonce-count checking  */
-    char               ha1[2*MD5_DIGESTSIZE+1]; /* for algorithm=MD5-sess    */
-    char               last_nonce[NONCE_LEN+1]; /* for one-time nonce's      */
-} client_entry;
-
-static struct hash_table {
-    client_entry  **table;
-    unsigned long   tbl_len;
-    unsigned long   num_entries;
-    unsigned long   num_created;
-    unsigned long   num_removed;
-    unsigned long   num_renewed;
-} *client_list;
-
-
-/* struct to hold a parsed Authorization header */
-
-enum hdr_sts { NO_HEADER, NOT_DIGEST, INVALID, VALID };
-
-typedef struct digest_header_struct {
-    const char           *scheme;
-    const char           *realm;
-    const char           *username;
-          char           *nonce;
-    const char           *uri;
-    const char           *digest;
-    const char           *algorithm;
-    const char           *cnonce;
-    const char           *opaque;
-    unsigned long         opaque_num;
-    const char           *message_qop;
-    const char           *nonce_count;
-    /* the following fields are not (directly) from the header */
-    apr_time_t            nonce_time;
-    enum hdr_sts          auth_hdr_sts;
-    const char           *raw_request_uri;
-    apr_uri_t            *psd_request_uri;
-    int                   needed_auth;
-    client_entry         *client;
-} digest_header_rec;
-
-
-/* (mostly) nonce stuff */
-
-typedef union time_union {
-    apr_time_t    time;
-    unsigned char arr[sizeof(apr_time_t)];
-} time_rec;
-
-static unsigned char secret[SECRET_LEN];
-
-/* client-list, opaque, and one-time-nonce stuff */
-
-static apr_shm_t      *client_shm =  NULL;
-static apr_rmm_t      *client_rmm = NULL;
-static unsigned long  *opaque_cntr;
-static apr_time_t     *otn_counter;     /* one-time-nonce counter */
-static apr_global_mutex_t *client_lock = NULL;
-static apr_global_mutex_t *opaque_lock = NULL;
-static char           client_lock_name[L_tmpnam];
-static char           opaque_lock_name[L_tmpnam];
-
-#define DEF_SHMEM_SIZE  1000L           /* ~ 12 entries */
-#define DEF_NUM_BUCKETS 15L
-#define HASH_DEPTH      5
-
-static long shmem_size  = DEF_SHMEM_SIZE;
-static long num_buckets = DEF_NUM_BUCKETS;
-
-
-module AP_MODULE_DECLARE_DATA auth_digest_module;
-
-/*
- * initialization code
- */
-
-static apr_status_t cleanup_tables(void *not_used)
-{
-    ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
-                  "Digest: cleaning up shared memory");
-    fflush(stderr);
-
-    if (client_shm) {
-        apr_shm_destroy(client_shm);
-        client_shm = NULL;
-    }
-
-    if (client_lock) {
-        apr_global_mutex_destroy(client_lock);
-        client_lock = NULL;
-    }
-
-    if (opaque_lock) {
-        apr_global_mutex_destroy(opaque_lock);
-        opaque_lock = NULL;
-    }
-
-    return APR_SUCCESS;
-}
-
-static apr_status_t initialize_secret(server_rec *s)
-{
-    apr_status_t status;
-
-    ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_NOTICE, 0, s,
-                 "Digest: generating secret for digest authentication ...");
-
-#if APR_HAS_RANDOM
-    status = apr_generate_random_bytes(secret, sizeof(secret));
-#else
-#error APR random number support is missing; you probably need to install the truerand library.
-#endif
-
-    if (status != APR_SUCCESS) {
-        char buf[120];
-        ap_log_error(APLOG_MARK, APLOG_CRIT, status, s,
-                     "Digest: error generating secret: %s", 
-                     apr_strerror(status, buf, sizeof(buf)));
-        return status;
-    }
-
-    ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_NOTICE, 0, s, "Digest: done");
-
-    return APR_SUCCESS;
-}
-
-static void log_error_and_cleanup(char *msg, apr_status_t sts, server_rec *s)
-{
-    ap_log_error(APLOG_MARK, APLOG_ERR, sts, s,
-                 "Digest: %s - all nonce-count checking, one-time nonces, and "
-                 "MD5-sess algorithm disabled", msg);
-
-    cleanup_tables(NULL);
-}
-
-#if APR_HAS_SHARED_MEMORY
-
-static void initialize_tables(server_rec *s, apr_pool_t *ctx)
-{
-    unsigned long idx;
-    apr_status_t   sts;
-
-    /* set up client list */
-
-    sts = apr_shm_create(&client_shm, shmem_size, tmpnam(NULL), ctx);
-    if (sts != APR_SUCCESS) {
-        log_error_and_cleanup("failed to create shared memory segments", sts, s);
-        return;
-    }
-
-    client_list = apr_rmm_malloc(client_rmm, sizeof(*client_list) +
-                                            sizeof(client_entry*)*num_buckets);
-    if (!client_list) {
-        log_error_and_cleanup("failed to allocate shared memory", -1, s);
-        return;
-    }
-    client_list->table = (client_entry**) (client_list + 1);
-    for (idx = 0; idx < num_buckets; idx++) {
-        client_list->table[idx] = NULL;
-    }
-    client_list->tbl_len     = num_buckets;
-    client_list->num_entries = 0;
-
-    tmpnam(client_lock_name);
-    /* FIXME: get the client_lock_name from a directive so we're portable
-     * to non-process-inheriting operating systems, like Win32. */
-    sts = apr_global_mutex_create(&client_lock, client_lock_name,
-                                  APR_LOCK_DEFAULT, ctx);
-    if (sts != APR_SUCCESS) {
-        log_error_and_cleanup("failed to create lock (client_lock)", sts, s);
-        return;
-    }
-
-
-    /* setup opaque */
-
-    opaque_cntr = apr_rmm_malloc(client_rmm, sizeof(*opaque_cntr));
-    if (opaque_cntr == NULL) {
-        log_error_and_cleanup("failed to allocate shared memory", -1, s);
-        return;
-    }
-    *opaque_cntr = 1UL;
-
-    tmpnam(opaque_lock_name);
-    /* FIXME: get the opaque_lock_name from a directive so we're portable
-     * to non-process-inheriting operating systems, like Win32. */
-    sts = apr_global_mutex_create(&opaque_lock, opaque_lock_name,
-                                  APR_LOCK_DEFAULT, ctx);
-    if (sts != APR_SUCCESS) {
-        log_error_and_cleanup("failed to create lock (opaque_lock)", sts, s);
-        return;
-    }
-
-
-    /* setup one-time-nonce counter */
-
-    otn_counter = apr_rmm_malloc(client_rmm, sizeof(*otn_counter));
-    if (otn_counter == NULL) {
-        log_error_and_cleanup("failed to allocate shared memory", -1, s);
-        return;
-    }
-    *otn_counter = 0;
-    /* no lock here */
-
-
-    /* success */
-    return;
-}
-
-#endif /* APR_HAS_SHARED_MEMORY */
-
-
-static int initialize_module(apr_pool_t *p, apr_pool_t *plog,
-                             apr_pool_t *ptemp, server_rec *s)
-{
-    void *data;
-    const char *userdata_key = "auth_digest_init";
-
-    /* initialize_module() will be called twice, and if it's a DSO
-     * then all static data from the first call will be lost. Only
-     * set up our static data on the second call. */
-    apr_pool_userdata_get(&data, userdata_key, s->process->pool);
-    if (!data) {
-        apr_pool_userdata_setn((const void *)1, userdata_key,
-                               apr_pool_cleanup_null, s->process->pool);
-        return OK;
-    }
-    if (initialize_secret(s) != APR_SUCCESS) {
-        return !OK;
-    }
-
-#if APR_HAS_SHARED_MEMORY
-    /* Note: this stuff is currently fixed for the lifetime of the server,
-     * i.e. even across restarts. This means that A) any shmem-size
-     * configuration changes are ignored, and B) certain optimizations,
-     * such as only allocating the smallest necessary entry for each
-     * client, can't be done. However, the alternative is a nightmare:
-     * we can't call apr_shm_destroy on a graceful restart because there
-     * will be children using the tables, and we also don't know when the
-     * last child dies. Therefore we can never clean up the old stuff,
-     * creating a creeping memory leak.
-     */
-    initialize_tables(s, p);
-    apr_pool_cleanup_register(p, NULL, cleanup_tables, apr_pool_cleanup_null);
-#endif  /* APR_HAS_SHARED_MEMORY */
-    return OK;
-}
-
-static void initialize_child(apr_pool_t *p, server_rec *s)
-{
-    apr_status_t sts;
-
-    if (!client_shm) {
-        return;
-    }
-
-    /* FIXME: get the client_lock_name from a directive so we're portable
-     * to non-process-inheriting operating systems, like Win32. */
-    sts = apr_global_mutex_child_init(&client_lock, client_lock_name, p);
-    if (sts != APR_SUCCESS) {
-        log_error_and_cleanup("failed to create lock (client_lock)", sts, s);
-        return;
-    }
-    /* FIXME: get the opaque_lock_name from a directive so we're portable
-     * to non-process-inheriting operating systems, like Win32. */
-    sts = apr_global_mutex_child_init(&opaque_lock, opaque_lock_name, p);
-    if (sts != APR_SUCCESS) {
-        log_error_and_cleanup("failed to create lock (opaque_lock)", sts, s);
-        return;
-    }
-}
-
-/*
- * configuration code
- */
-
-static void *create_digest_dir_config(apr_pool_t *p, char *dir)
-{
-    digest_config_rec *conf;
-
-    if (dir == NULL) {
-        return NULL;
-    }
-
-    conf = (digest_config_rec *) apr_pcalloc(p, sizeof(digest_config_rec));
-    if (conf) {
-        conf->qop_list       = apr_palloc(p, sizeof(char*));
-        conf->qop_list[0]    = NULL;
-        conf->nonce_lifetime = DFLT_NONCE_LIFE;
-        conf->dir_name       = apr_pstrdup(p, dir);
-        conf->algorithm      = DFLT_ALGORITHM;
-    }
-
-    return conf;
-}
-
-static const char *set_realm(cmd_parms *cmd, void *config, const char *realm)
-{
-    digest_config_rec *conf = (digest_config_rec *) config;
-
-    /* The core already handles the realm, but it's just too convenient to
-     * grab it ourselves too and cache some setups. However, we need to
-     * let the core get at it too, which is why we decline at the end -
-     * this relies on the fact that http_core is last in the list.
-     */
-    conf->realm = realm;
-
-    /* we precompute the part of the nonce hash that is constant (well,
-     * the host:port would be too, but that varies for .htaccess files
-     * and directives outside a virtual host section)
-     */
-    apr_sha1_init(&conf->nonce_ctx);
-    apr_sha1_update_binary(&conf->nonce_ctx, secret, sizeof(secret));
-    apr_sha1_update_binary(&conf->nonce_ctx, (const unsigned char *) realm,
-                           strlen(realm));
-
-    return DECLINE_CMD;
-}
-
-static const char *set_digest_file(cmd_parms *cmd, void *config,
-                                   const char *file)
-{
-    ((digest_config_rec *) config)->pwfile = file;
-    return NULL;
-}
-
-static const char *set_group_file(cmd_parms *cmd, void *config,
-                                  const char *file)
-{
-    ((digest_config_rec *) config)->grpfile = file;
-    return NULL;
-}
-
-static const char *set_qop(cmd_parms *cmd, void *config, const char *op)
-{
-    digest_config_rec *conf = (digest_config_rec *) config;
-    char **tmp;
-    int cnt;
-
-    if (!strcasecmp(op, "none")) {
-        if (conf->qop_list[0] == NULL) {
-            conf->qop_list = apr_palloc(cmd->pool, 2 * sizeof(char*));
-            conf->qop_list[1] = NULL;
-        }
-        conf->qop_list[0] = "none";
-        return NULL;
-    }
-
-    if (!strcasecmp(op, "auth-int")) {
-        ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_WARNING, 0, cmd->server,
-                     "Digest: WARNING: qop `auth-int' currently only works "
-                     "correctly for responses with no entity");
-    }
-    else if (strcasecmp(op, "auth")) {
-        return apr_pstrcat(cmd->pool, "Unrecognized qop: ", op, NULL);
-    }
-
-    for (cnt = 0; conf->qop_list[cnt] != NULL; cnt++)
-        ;
-
-    tmp = apr_palloc(cmd->pool, (cnt + 2) * sizeof(char*));
-    memcpy(tmp, conf->qop_list, cnt*sizeof(char*));
-    tmp[cnt]   = apr_pstrdup(cmd->pool, op);
-    tmp[cnt+1] = NULL;
-    conf->qop_list = tmp;
-
-    return NULL;
-}
-
-static const char *set_nonce_lifetime(cmd_parms *cmd, void *config,
-                                      const char *t)
-{
-    char *endptr;
-    long  lifetime;
-
-    lifetime = strtol(t, &endptr, 10); 
-    if (endptr < (t+strlen(t)) && !apr_isspace(*endptr)) {
-        return apr_pstrcat(cmd->pool,
-                           "Invalid time in AuthDigestNonceLifetime: ",
-                           t, NULL);
-    }
-
-    ((digest_config_rec *) config)->nonce_lifetime = lifetime * APR_USEC_PER_SEC;
-    return NULL;
-}
-
-static const char *set_nonce_format(cmd_parms *cmd, void *config,
-                                    const char *fmt)
-{
-    ((digest_config_rec *) config)->nonce_format = fmt;
-    return "AuthDigestNonceFormat is not implemented (yet)";
-}
-
-static const char *set_nc_check(cmd_parms *cmd, void *config, int flag)
-{
-    if (flag && !client_shm)
-        ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_WARNING, 0,
-                     cmd->server, "Digest: WARNING: nonce-count checking "
-                     "is not supported on platforms without shared-memory "
-                     "support - disabling check");
-
-    ((digest_config_rec *) config)->check_nc = flag;
-    return NULL;
-}
-
-static const char *set_algorithm(cmd_parms *cmd, void *config, const char *alg)
-{
-    if (!strcasecmp(alg, "MD5-sess")) {
-        if (!client_shm) {
-            ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_WARNING, 0,
-                         cmd->server, "Digest: WARNING: algorithm `MD5-sess' "
-                         "is not supported on platforms without shared-memory "
-                         "support - reverting to MD5");
-            alg = "MD5";
-        }
-    }
-    else if (strcasecmp(alg, "MD5")) {
-        return apr_pstrcat(cmd->pool, "Invalid algorithm in AuthDigestAlgorithm: ", alg, NULL);
-    }
-
-    ((digest_config_rec *) config)->algorithm = alg;
-    return NULL;
-}
-
-static const char *set_uri_list(cmd_parms *cmd, void *config, const char *uri)
-{
-    digest_config_rec *c = (digest_config_rec *) config;
-    if (c->uri_list) {
-        c->uri_list[strlen(c->uri_list)-1] = '\0';
-        c->uri_list = apr_pstrcat(cmd->pool, c->uri_list, " ", uri, "\"", NULL);
-    }
-    else {
-        c->uri_list = apr_pstrcat(cmd->pool, ", domain=\"", uri, "\"", NULL);
-    }
-    return NULL;
-}
-
-static const char *set_shmem_size(cmd_parms *cmd, void *config,
-                                  const char *size_str)
-{
-    char *endptr;
-    long  size, min;
-
-    size = strtol(size_str, &endptr, 10); 
-    while (apr_isspace(*endptr)) endptr++;
-    if (*endptr == '\0' || *endptr == 'b' || *endptr == 'B') {
-        ;
-    }
-    else if (*endptr == 'k' || *endptr == 'K') {
-        size *= 1024;
-    }
-    else if (*endptr == 'm' || *endptr == 'M') {
-        size *= 1048576;
-    }
-    else {
-        return apr_pstrcat(cmd->pool, "Invalid size in AuthDigestShmemSize: ",
-                          size_str, NULL);
-    }
-
-    min = sizeof(*client_list) + sizeof(client_entry*) + sizeof(client_entry);
-    if (size < min) {
-        return apr_psprintf(cmd->pool, "size in AuthDigestShmemSize too small: "
-                           "%ld < %ld", size, min);
-    }
-
-    shmem_size  = size;
-    num_buckets = (size - sizeof(*client_list)) /
-                  (sizeof(client_entry*) + HASH_DEPTH * sizeof(client_entry));
-    if (num_buckets == 0) {
-        num_buckets = 1;
-    }
-    ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_DEBUG, 0, cmd->server,
-                 "Digest: Set shmem-size: %ld, num-buckets: %ld", shmem_size,
-                 num_buckets);
-
-    return NULL;
-}
-
-static const command_rec digest_cmds[] =
-{
-    AP_INIT_TAKE1("AuthName", set_realm, NULL, OR_AUTHCFG, 
-     "The authentication realm (e.g. \"Members Only\")"),
-    AP_INIT_TAKE1("AuthDigestFile", set_digest_file, NULL, OR_AUTHCFG, 
-     "The name of the file containing the usernames and password hashes"),
-    AP_INIT_TAKE1("AuthDigestGroupFile", set_group_file, NULL, OR_AUTHCFG, 
-     "The name of the file containing the group names and members"),
-    AP_INIT_ITERATE("AuthDigestQop", set_qop, NULL, OR_AUTHCFG, 
-     "A list of quality-of-protection options"),
-    AP_INIT_TAKE1("AuthDigestNonceLifetime", set_nonce_lifetime, NULL, OR_AUTHCFG, 
-     "Maximum lifetime of the server nonce (seconds)"),
-    AP_INIT_TAKE1("AuthDigestNonceFormat", set_nonce_format, NULL, OR_AUTHCFG, 
-     "The format to use when generating the server nonce"),
-    AP_INIT_FLAG("AuthDigestNcCheck", set_nc_check, NULL, OR_AUTHCFG, 
-     "Whether or not to check the nonce-count sent by the client"),
-    AP_INIT_TAKE1("AuthDigestAlgorithm", set_algorithm, NULL, OR_AUTHCFG, 
-     "The algorithm used for the hash calculation"),
-    AP_INIT_ITERATE("AuthDigestDomain", set_uri_list, NULL, OR_AUTHCFG, 
-     "A list of URI's which belong to the same protection space as the current URI"),
-    AP_INIT_TAKE1("AuthDigestShmemSize", set_shmem_size, NULL, RSRC_CONF, 
-     "The amount of shared memory to allocate for keeping track of clients"),
-    {NULL}
-};
-
-
-/*
- * client list code
- *
- * Each client is assigned a number, which is transfered in the opaque
- * field of the WWW-Authenticate and Authorization headers. The number
- * is just a simple counter which is incremented for each new client.
- * Clients can't forge this number because it is hashed up into the
- * server nonce, and that is checked.
- *
- * The clients are kept in a simple hash table, which consists of an
- * array of client_entry's, each with a linked list of entries hanging
- * off it. The client's number modulo the size of the array gives the
- * bucket number.
- *
- * The clients are garbage collected whenever a new client is allocated
- * but there is not enough space left in the shared memory segment. A
- * simple semi-LRU is used for this: whenever a client entry is accessed
- * it is moved to the beginning of the linked list in its bucket (this
- * also makes for faster lookups for current clients). The garbage
- * collecter then just removes the oldest entry (i.e. the one at the
- * end of the list) in each bucket.
- *
- * The main advantages of the above scheme are that it's easy to implement
- * and it keeps the hash table evenly balanced (i.e. same number of entries
- * in each bucket). The major disadvantage is that you may be throwing
- * entries out which are in active use. This is not tragic, as these
- * clients will just be sent a new client id (opaque field) and nonce
- * with a stale=true (i.e. it will just look like the nonce expired,
- * thereby forcing an extra round trip). If the shared memory segment
- * has enough headroom over the current client set size then this should
- * not occur too often.
- *
- * To help tune the size of the shared memory segment (and see if the
- * above algorithm is really sufficient) a set of counters is kept
- * indicating the number of clients held, the number of garbage collected
- * clients, and the number of erroneously purged clients. These are printed
- * out at each garbage collection run. Note that access to the counters is
- * not synchronized because they are just indicaters, and whether they are
- * off by a few doesn't matter; and for the same reason no attempt is made
- * to guarantee the num_renewed is correct in the face of clients spoofing
- * the opaque field.
- */
-
-/*
- * Get the client given its client number (the key). Returns the entry,
- * or NULL if it's not found.
- *
- * Access to the list itself is synchronized via locks. However, access
- * to the entry returned by get_client() is NOT synchronized. This means
- * that there are potentially problems if a client uses multiple,
- * simultaneous connections to access url's within the same protection
- * space. However, these problems are not new: when using multiple
- * connections you have no guarantee of the order the requests are
- * processed anyway, so you have problems with the nonce-count and
- * one-time nonces anyway.
- */
-static client_entry *get_client(unsigned long key, const request_rec *r)
-{
-    int bucket;
-    client_entry *entry, *prev = NULL;
-
-
-    if (!key || !client_shm)  return NULL;
-
-    bucket = key % client_list->tbl_len;
-    entry  = client_list->table[bucket];
-
-    apr_global_mutex_lock(client_lock);
-
-    while (entry && key != entry->key) {
-        prev  = entry;
-        entry = entry->next;
-    }
-
-    if (entry && prev) {                /* move entry to front of list */
-        prev->next  = entry->next;
-        entry->next = client_list->table[bucket];
-        client_list->table[bucket] = entry;
-    }
-
-    apr_global_mutex_unlock(client_lock);
-
-    if (entry) {
-        ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_DEBUG, 0, r,
-                      "get_client(): client %lu found", key);
-    }
-    else {
-        ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_DEBUG, 0, r,
-                      "get_client(): client %lu not found", key);
-    }
-
-    return entry;
-}
-
-
-/* A simple garbage-collecter to remove unused clients. It removes the
- * last entry in each bucket and updates the counters. Returns the
- * number of removed entries.
- */
-static long gc(void)
-{
-    client_entry *entry, *prev;
-    unsigned long num_removed = 0, idx;
-
-    /* garbage collect all last entries */
-
-    for (idx = 0; idx < client_list->tbl_len; idx++) {
-        entry = client_list->table[idx];
-        prev  = NULL;
-        while (entry->next) {   /* find last entry */
-            prev  = entry;
-            entry = entry->next;
-        }
-        if (prev) {
-            prev->next = NULL;   /* cut list */
-        }
-        else {
-            client_list->table[idx] = NULL;
-        }
-        if (entry) {                    /* remove entry */
-            apr_rmm_free(client_rmm, (apr_rmm_off_t)entry);
-            num_removed++;
-        }
-    }
-
-    /* update counters and log */
-
-    client_list->num_entries -= num_removed;
-    client_list->num_removed += num_removed;
-
-    return num_removed;
-}
-
-
-/*
- * Add a new client to the list. Returns the entry if successful, NULL
- * otherwise. This triggers the garbage collection if memory is low.
- */
-static client_entry *add_client(unsigned long key, client_entry *info,
-                                server_rec *s)
-{
-    int bucket;
-    client_entry *entry;
-
-
-    if (!key || !client_shm) {
-        return NULL;
-    }
-
-    bucket = key % client_list->tbl_len;
-    entry  = client_list->table[bucket];
-
-    apr_global_mutex_lock(client_lock);
-
-    /* try to allocate a new entry */
-
-    entry = (client_entry *)apr_rmm_malloc(client_rmm, sizeof(client_entry));
-    if (!entry) {
-        long num_removed = gc();
-        ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_INFO, 0, s,
-                     "Digest: gc'd %ld client entries. Total new clients: "
-                     "%ld; Total removed clients: %ld; Total renewed clients: "
-                     "%ld", num_removed,
-                     client_list->num_created - client_list->num_renewed,
-                     client_list->num_removed, client_list->num_renewed);
-        entry = (client_entry *)apr_rmm_malloc(client_rmm, sizeof(client_entry));
-        if (!entry) {
-            return NULL;       /* give up */
-        }
-    }
-
-    /* now add the entry */
-
-    memcpy(entry, info, sizeof(client_entry));
-    entry->key  = key;
-    entry->next = client_list->table[bucket];
-    client_list->table[bucket] = entry;
-    client_list->num_created++;
-    client_list->num_entries++;
-
-    apr_global_mutex_unlock(client_lock);
-
-    ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_DEBUG, 0, s,
-                 "allocated new client %lu", key);
-
-    return entry;
-}
-
-
-/*
- * Authorization header parser code
- */
-
-/* Parse the Authorization header, if it exists */
-static int get_digest_rec(request_rec *r, digest_header_rec *resp)
-{
-    const char *auth_line;
-    size_t l;
-    int vk = 0, vv = 0;
-    char *key, *value;
-
-    auth_line = apr_table_get(r->headers_in,
-                             (PROXYREQ_PROXY == r->proxyreq)
-                                 ? "Proxy-Authorization"
-                                 : "Authorization");
-    if (!auth_line) {
-        resp->auth_hdr_sts = NO_HEADER;
-        return !OK;
-    }
-
-    resp->scheme = ap_getword_white(r->pool, &auth_line);
-    if (strcasecmp(resp->scheme, "Digest")) {
-        resp->auth_hdr_sts = NOT_DIGEST;
-        return !OK;
-    }
-
-    l = strlen(auth_line);
-
-    key   = apr_palloc(r->pool, l+1);
-    value = apr_palloc(r->pool, l+1);
-
-    while (auth_line[0] != '\0') {
-
-        /* find key */
-
-        while (apr_isspace(auth_line[0])) {
-            auth_line++;
-        }
-        vk = 0;
-        while (auth_line[0] != '=' && auth_line[0] != ','
-               && auth_line[0] != '\0' && !apr_isspace(auth_line[0])) {
-            key[vk++] = *auth_line++;
-        }
-        key[vk] = '\0';
-        while (apr_isspace(auth_line[0])) {
-            auth_line++;
-        }
-
-        /* find value */
-
-        if (auth_line[0] == '=') {
-            auth_line++;
-            while (apr_isspace(auth_line[0])) {
-                auth_line++;
-            }
-
-            vv = 0;
-            if (auth_line[0] == '\"') {         /* quoted string */
-                auth_line++;
-                while (auth_line[0] != '\"' && auth_line[0] != '\0') {
-                    if (auth_line[0] == '\\' && auth_line[1] != '\0') {
-                        auth_line++;            /* escaped char */
-                    }
-                    value[vv++] = *auth_line++;
-                }
-                if (auth_line[0] != '\0') {
-                    auth_line++;
-                }
-            }
-            else {                               /* token */
-                while (auth_line[0] != ',' && auth_line[0] != '\0'
-                       && !apr_isspace(auth_line[0])) {
-                    value[vv++] = *auth_line++;
-                }
-            }
-            value[vv] = '\0';
-        }
-
-        while (auth_line[0] != ',' && auth_line[0] != '\0') {
-            auth_line++;
-        }
-        if (auth_line[0] != '\0') {
-            auth_line++;
-        }
-
-        if (!strcasecmp(key, "username"))
-            resp->username = apr_pstrdup(r->pool, value);
-        else if (!strcasecmp(key, "realm"))
-            resp->realm = apr_pstrdup(r->pool, value);
-        else if (!strcasecmp(key, "nonce"))
-            resp->nonce = apr_pstrdup(r->pool, value);
-        else if (!strcasecmp(key, "uri"))
-            resp->uri = apr_pstrdup(r->pool, value);
-        else if (!strcasecmp(key, "response"))
-            resp->digest = apr_pstrdup(r->pool, value);
-        else if (!strcasecmp(key, "algorithm"))
-            resp->algorithm = apr_pstrdup(r->pool, value);
-        else if (!strcasecmp(key, "cnonce"))
-            resp->cnonce = apr_pstrdup(r->pool, value);
-        else if (!strcasecmp(key, "opaque"))
-            resp->opaque = apr_pstrdup(r->pool, value);
-        else if (!strcasecmp(key, "qop"))
-            resp->message_qop = apr_pstrdup(r->pool, value);
-        else if (!strcasecmp(key, "nc"))
-            resp->nonce_count = apr_pstrdup(r->pool, value);
-    }
-
-    if (!resp->username || !resp->realm || !resp->nonce || !resp->uri
-        || !resp->digest
-        || (resp->message_qop && (!resp->cnonce || !resp->nonce_count))) {
-        resp->auth_hdr_sts = INVALID;
-        return !OK;
-    }
-
-    if (resp->opaque) {
-        resp->opaque_num = (unsigned long) strtol(resp->opaque, NULL, 16);
-    }
-
-    resp->auth_hdr_sts = VALID;
-    return OK;
-}
-
-
-/* Because the browser may preemptively send auth info, incrementing the
- * nonce-count when it does, and because the client does not get notified
- * if the URI didn't need authentication after all, we need to be sure to
- * update the nonce-count each time we receive an Authorization header no
- * matter what the final outcome of the request. Furthermore this is a
- * convenient place to get the request-uri (before any subrequests etc
- * are initiated) and to initialize the request_config.
- *
- * Note that this must be called after mod_proxy had its go so that
- * r->proxyreq is set correctly.
- */
-static int parse_hdr_and_update_nc(request_rec *r)
-{
-    digest_header_rec *resp;
-    int res;
-
-    if (!ap_is_initial_req(r)) {
-        return DECLINED;
-    }
-
-    resp = apr_pcalloc(r->pool, sizeof(digest_header_rec));
-    resp->raw_request_uri = r->unparsed_uri;
-    resp->psd_request_uri = &r->parsed_uri;
-    resp->needed_auth = 0;
-    ap_set_module_config(r->request_config, &auth_digest_module, resp);
-
-    res = get_digest_rec(r, resp);
-    resp->client = get_client(resp->opaque_num, r);
-    if (res == OK && resp->client) {
-        resp->client->nonce_count++;
-    }
-
-    return DECLINED;
-}
-
-
-/*
- * Nonce generation code
- */
-
-/* The hash part of the nonce is a SHA-1 hash of the time, realm, server host
- * and port, opaque, and our secret.
- */
-static void gen_nonce_hash(char *hash, const char *timestr, const char *opaque,
-                           const server_rec *server,
-                           const digest_config_rec *conf)
-{
-    const char *hex = "0123456789abcdef";
-    unsigned char sha1[APR_SHA1_DIGESTSIZE];
-    apr_sha1_ctx_t ctx;
-    int idx;
-
-    memcpy(&ctx, &conf->nonce_ctx, sizeof(ctx));
-    /*
-    apr_sha1_update_binary(&ctx, (const unsigned char *) server->server_hostname,
-                         strlen(server->server_hostname));
-    apr_sha1_update_binary(&ctx, (const unsigned char *) &server->port,
-                         sizeof(server->port));
-     */
-    apr_sha1_update_binary(&ctx, (const unsigned char *) timestr, strlen(timestr));
-    if (opaque) {
-        apr_sha1_update_binary(&ctx, (const unsigned char *) opaque,
-                             strlen(opaque));
-    }
-    apr_sha1_final(sha1, &ctx);
-
-    for (idx=0; idx<APR_SHA1_DIGESTSIZE; idx++) {
-        *hash++ = hex[sha1[idx] >> 4];
-        *hash++ = hex[sha1[idx] & 0xF];
-    }
-
-    *hash++ = '\0';
-}
-
-
-/* The nonce has the format b64(time)+hash .
- */
-static const char *gen_nonce(apr_pool_t *p, apr_time_t now, const char *opaque,
-                             const server_rec *server,
-                             const digest_config_rec *conf)
-{
-    char *nonce = apr_palloc(p, NONCE_LEN+1);
-    int len;
-    time_rec t;
-
-    if (conf->nonce_lifetime != 0) {
-        t.time = now;
-    }
-    else if (otn_counter) {
-        /* this counter is not synch'd, because it doesn't really matter
-         * if it counts exactly.
-         */
-        t.time = (*otn_counter)++;
-    }
-    else {
-        t.time = 42;
-    }
-    len = apr_base64_encode_binary(nonce, t.arr, sizeof(t.arr));
-    gen_nonce_hash(nonce+NONCE_TIME_LEN, nonce, opaque, server, conf);
-
-    return nonce;
-}
-
-
-/*
- * Opaque and hash-table management
- */
-
-/*
- * Generate a new client entry, add it to the list, and return the
- * entry. Returns NULL if failed.
- */
-static client_entry *gen_client(const request_rec *r)
-{
-    unsigned long op;
-    client_entry new_entry = { 0, NULL, 0, "", "" }, *entry;
-
-    if (!opaque_cntr) {
-        return NULL;
-    }
-
-    apr_global_mutex_lock(opaque_lock);
-    op = (*opaque_cntr)++;
-    apr_global_mutex_lock(opaque_lock);
-
-    if (!(entry = add_client(op, &new_entry, r->server))) {
-        ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
-                      "Digest: failed to allocate client entry - ignoring "
-                      "client");
-        return NULL;
-    }
-
-    return entry;
-}
-
-
-/*
- * MD5-sess code.
- *
- * If you want to use algorithm=MD5-sess you must write get_userpw_hash()
- * yourself (see below). The dummy provided here just uses the hash from
- * the auth-file, i.e. it is only useful for testing client implementations
- * of MD5-sess .
- */
-
-/*
- * get_userpw_hash() will be called each time a new session needs to be
- * generated and is expected to return the equivalent of
- *
- * h_urp = ap_md5(r->pool,
- *         apr_pstrcat(r->pool, username, ":", ap_auth_name(r), ":", passwd))
- * ap_md5(r->pool,
- *         (unsigned char *) apr_pstrcat(r->pool, h_urp, ":", resp->nonce, ":",
- *                                      resp->cnonce, NULL));
- *
- * or put differently, it must return
- *
- *   MD5(MD5(username ":" realm ":" password) ":" nonce ":" cnonce)
- *
- * If something goes wrong, the failure must be logged and NULL returned.
- *
- * You must implement this yourself, which will probably consist of code
- * contacting the password server with the necessary information (typically
- * the username, realm, nonce, and cnonce) and receiving the hash from it.
- *
- * TBD: This function should probably be in a seperate source file so that
- * people need not modify mod_auth_digest.c each time they install a new
- * version of apache.
- */
-static const char *get_userpw_hash(const request_rec *r,
-                                   const digest_header_rec *resp,
-                                   const digest_config_rec *conf)
-{
-    return ap_md5(r->pool,
-             (unsigned char *) apr_pstrcat(r->pool, conf->ha1, ":", resp->nonce,
-                                           ":", resp->cnonce, NULL));
-}
-
-
-/* Retrieve current session H(A1). If there is none and "generate" is
- * true then a new session for MD5-sess is generated and stored in the
- * client struct; if generate is false, or a new session could not be
- * generated then NULL is returned (in case of failure to generate the
- * failure reason will have been logged already).
- */
-static const char *get_session_HA1(const request_rec *r,
-                                   digest_header_rec *resp,
-                                   const digest_config_rec *conf,
-                                   int generate)
-{
-    const char *ha1 = NULL;
-
-    /* return the current sessions if there is one */
-    if (resp->opaque && resp->client && resp->client->ha1[0]) {
-        return resp->client->ha1;
-    }
-    else if (!generate) {
-        return NULL;
-    }
-
-    /* generate a new session */
-    if (!resp->client) {
-        resp->client = gen_client(r);
-    }
-    if (resp->client) {
-        ha1 = get_userpw_hash(r, resp, conf);
-        if (ha1) {
-            memcpy(resp->client->ha1, ha1, sizeof(resp->client->ha1));
-        }
-    }
-
-    return ha1;
-}
-
-
-static void clear_session(const digest_header_rec *resp)
-{
-    if (resp->client) {
-        resp->client->ha1[0] = '\0';
-    }
-}
-
-
-/*
- * Authorization challenge generation code (for WWW-Authenticate)
- */
-
-static const char *guess_domain(apr_pool_t *p, const char *uri,
-                                const char *filename, const char *dir)
-{
-    size_t u_len = strlen(uri), f_len = strlen(filename), d_len = strlen(dir);
-    const char *u, *f;
-
-
-    /* Because of things like mod_alias and mod_rewrite and the fact that
-     * protection is often on a directory basis (not a location basis) it
-     * is hard to determine the uri to put in the domain attribute.
-     *
-     * What we do is the following: first we see if the directory is
-     * a prefix for the uri - if this is the case we assume that therefore
-     * a <Location> directive was protecting this uri and we can use it
-     * for the domain.
-     */
-    if (u_len >= d_len && !memcmp(uri, dir, d_len)) {
-        return dir;
-    }
-
-    /* Now we check for <Files ...>, and if we find one we send back a
-     * dummy uri - this is the only way to specify that the protection
-     * space only covers a single uri.
-     */
-    if (dir[0] != '/') {
-        /* This doesn't work for Amaya (ok, it's of arguable validity in
-         * the first place), so just return the file name instead
-        return "http://0.0.0.0/";
-         */
-        return dir;
-    }
-
-    /* Next we find the largest common common suffix of the request-uri
-     * and the final file name, ignoring any extensions; this gives us a
-     * hint as to where any rewriting could've occured (assuming that some
-     * prefix of the uri is rewritten, not a suffix).
-     */
-    u = uri + u_len - 1;        /* strip any extension */
-    while (u > uri && *u != '/') {
-        u--;
-    }
-    while (*u && *u != '.') {
-        u++;
-    }
-    if (*u == '.') {
-        u--;
-    }
-    if (*u == '/') {
-        u--;
-    }
-
-    f = filename + f_len - 1;   /* strip any extension */
-    while (f > filename && *f != '/') {
-        f--;
-    }
-    while (*f && *f != '.') {
-        f++;
-    }
-    if (*f == '.') {
-        f--;
-    }
-    if (*f == '/') {
-        f--;
-    }
-
-    while (*f == *u && f > filename && u > uri) {
-        u--;
-        f--;
-    }
-    f++;
-    u++;
-
-    while (*f && *f != '/') {
-        f++;
-        u++;  /* suffix must start with / */
-    }
-
-    /* Now, if the directory reaches into this common suffix then we can
-     * take the uri with the same reach.
-     */
-    if ((unsigned long) (f-filename) < d_len) {
-        char *tmp = apr_pstrdup(p, uri);
-        tmp[(u-uri)+(d_len-(f-filename))] = '\0';
-        return tmp;
-    }
-
-    return "";  /* give up */
-}
-
-
-static const char *ltox(apr_pool_t *p, unsigned long num)
-{
-    if (num != 0) {
-        return apr_psprintf(p, "%lx", num);
-    }
-    else {
-        return "";
-    }
-}
-
-static void note_digest_auth_failure(request_rec *r,
-                                     const digest_config_rec *conf,
-                                     digest_header_rec *resp, int stale)
-{
-    const char   *qop, *opaque, *opaque_param, *domain, *nonce;
-    int           cnt;
-
-    /* Setup qop */
-
-    if (conf->qop_list[0] == NULL) {
-        qop = ", qop=\"auth\"";
-    }
-    else if (!strcasecmp(conf->qop_list[0], "none")) {
-        qop = "";
-    }
-    else {
-        qop = apr_pstrcat(r->pool, ", qop=\"", conf->qop_list[0], NULL);
-        for (cnt = 1; conf->qop_list[cnt] != NULL; cnt++) {
-            qop = apr_pstrcat(r->pool, qop, ",", conf->qop_list[cnt], NULL);
-        }
-        qop = apr_pstrcat(r->pool, qop, "\"", NULL);
-    }
-
-    /* Setup opaque */
-
-    if (resp->opaque == NULL) {
-        /* new client */
-        if ((conf->check_nc || conf->nonce_lifetime == 0
-             || !strcasecmp(conf->algorithm, "MD5-sess"))
-            && (resp->client = gen_client(r)) != NULL) {
-            opaque = ltox(r->pool, resp->client->key);
-        }
-        else {
-            opaque = "";                /* opaque not needed */
-        }
-    }
-    else if (resp->client == NULL) {
-        /* client info was gc'd */
-        resp->client = gen_client(r);
-        if (resp->client != NULL) {
-            opaque = ltox(r->pool, resp->client->key);
-            stale = 1;
-            client_list->num_renewed++;
-        }
-        else {
-            opaque = "";                /* ??? */
-        }
-    }
-    else {
-        opaque = resp->opaque;
-        /* we're generating a new nonce, so reset the nonce-count */
-        resp->client->nonce_count = 0;
-    }
-
-    if (opaque[0]) {
-        opaque_param = apr_pstrcat(r->pool, ", opaque=\"", opaque, "\"", NULL);
-    }
-    else {
-        opaque_param = NULL;
-    }
-
-    /* Setup nonce */
-
-    nonce = gen_nonce(r->pool, r->request_time, opaque, r->server, conf);
-    if (resp->client && conf->nonce_lifetime == 0) {
-        memcpy(resp->client->last_nonce, nonce, NONCE_LEN+1);
-    }
-
-    /* Setup MD5-sess stuff. Note that we just clear out the session
-     * info here, since we can't generate a new session until the request
-     * from the client comes in with the cnonce.
-     */
-
-    if (!strcasecmp(conf->algorithm, "MD5-sess")) {
-        clear_session(resp);
-    }
-
-    /* setup domain attribute. We want to send this attribute wherever
-     * possible so that the client won't send the Authorization header
-     * unneccessarily (it's usually > 200 bytes!).
-     */
-
-    if (r->proxyreq) {
-        domain = NULL;  /* don't send domain for proxy requests */
-    }
-    else if (conf->uri_list) {
-        domain = conf->uri_list;
-    }
-    else {
-        /* They didn't specify any domain, so let's guess at it */
-        domain = guess_domain(r->pool, resp->psd_request_uri->path, r->filename,
-                              conf->dir_name);
-        if (domain[0] == '/' && domain[1] == '\0') {
-            domain = NULL;      /* "/" is the default, so no need to send it */
-        }
-        else {
-            domain = apr_pstrcat(r->pool, ", domain=\"", domain, "\"", NULL);
-        }
-    }
-
-    apr_table_mergen(r->err_headers_out,
-                     (PROXYREQ_PROXY == r->proxyreq)
-                         ? "Proxy-Authenticate" : "WWW-Authenticate",
-                     apr_psprintf(r->pool, "Digest realm=\"%s\", "
-                                  "nonce=\"%s\", algorithm=%s%s%s%s%s",
-                                  ap_auth_name(r), nonce, conf->algorithm,
-                                  opaque_param ? opaque_param : "",
-                                  domain ? domain : "",
-                                  stale ? ", stale=true" : "", qop));
-
-}
-
-
-/*
- * Authorization header verification code
- */
-
-static const char *get_hash(request_rec *r, const char *user,
-                            const char *realm, const char *auth_pwfile)
-{
-    ap_configfile_t *f;
-    char l[MAX_STRING_LEN];
-    const char *rpw;
-    char *w, *x;
-    apr_status_t sts;
-
-    if ((sts = ap_pcfg_openfile(&f, r->pool, auth_pwfile)) != APR_SUCCESS) {
-        ap_log_rerror(APLOG_MARK, APLOG_ERR, sts, r,
-                      "Digest: Could not open password file: %s", auth_pwfile);
-        return NULL;
-    }
-    while (!(ap_cfg_getline(l, MAX_STRING_LEN, f))) {
-        if ((l[0] == '#') || (!l[0])) {
-            continue;
-        }
-        rpw = l;
-        w = ap_getword(r->pool, &rpw, ':');
-        x = ap_getword(r->pool, &rpw, ':');
-
-        if (x && w && !strcmp(user, w) && !strcmp(realm, x)) {
-            ap_cfg_closefile(f);
-            return apr_pstrdup(r->pool, rpw);
-        }
-    }
-    ap_cfg_closefile(f);
-    return NULL;
-}
-
-static int check_nc(const request_rec *r, const digest_header_rec *resp,
-                    const digest_config_rec *conf)
-{
-    unsigned long nc;
-    const char *snc = resp->nonce_count;
-    char *endptr;
-
-    if (!conf->check_nc || !client_shm) {
-        return OK;
-    }
-
-    nc = strtol(snc, &endptr, 16);
-    if (endptr < (snc+strlen(snc)) && !apr_isspace(*endptr)) {
-        ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                      "Digest: invalid nc %s received - not a number", snc);
-        return !OK;
-    }
-
-    if (!resp->client) {
-        return !OK;
-    }
-
-    if (nc != resp->client->nonce_count) {
-        ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                      "Digest: Warning, possible replay attack: nonce-count "
-                      "check failed: %lu != %lu", nc,
-                      resp->client->nonce_count);
-        return !OK;
-    }
-
-    return OK;
-}
-
-static int check_nonce(request_rec *r, digest_header_rec *resp,
-                       const digest_config_rec *conf)
-{
-    apr_time_t dt;
-    int len;
-    time_rec nonce_time;
-    char tmp, hash[NONCE_HASH_LEN+1];
-
-    if (strlen(resp->nonce) != NONCE_LEN) {
-        ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                      "Digest: invalid nonce %s received - length is not %d",
-                      resp->nonce, NONCE_LEN);
-        note_digest_auth_failure(r, conf, resp, 1);
-        return HTTP_UNAUTHORIZED;
-    }
-
-    tmp = resp->nonce[NONCE_TIME_LEN];
-    resp->nonce[NONCE_TIME_LEN] = '\0';
-    len = apr_base64_decode_binary(nonce_time.arr, resp->nonce);
-    gen_nonce_hash(hash, resp->nonce, resp->opaque, r->server, conf);
-    resp->nonce[NONCE_TIME_LEN] = tmp;
-    resp->nonce_time = nonce_time.time;
-
-    if (strcmp(hash, resp->nonce+NONCE_TIME_LEN)) {
-        ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                      "Digest: invalid nonce %s received - hash is not %s",
-                      resp->nonce, hash);
-        note_digest_auth_failure(r, conf, resp, 1);
-        return HTTP_UNAUTHORIZED;
-    }
-
-    dt = r->request_time - nonce_time.time;
-    if (conf->nonce_lifetime > 0 && dt < 0) {
-        ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                      "Digest: invalid nonce %s received - user attempted "
-                      "time travel", resp->nonce);
-        note_digest_auth_failure(r, conf, resp, 1);
-        return HTTP_UNAUTHORIZED;
-    }
-
-    if (conf->nonce_lifetime > 0) {
-        if (dt > conf->nonce_lifetime) {
-            ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_INFO, 0,r,
-                          "Digest: user %s: nonce expired (%.2f seconds old "
-                          "- max lifetime %.2f) - sending new nonce", 
-                          r->user, ((double)dt)/APR_USEC_PER_SEC, 
-                          ((double)(conf->nonce_lifetime))/APR_USEC_PER_SEC);
-            note_digest_auth_failure(r, conf, resp, 1);
-            return HTTP_UNAUTHORIZED;
-        }
-    }
-    else if (conf->nonce_lifetime == 0 && resp->client) {
-        if (memcmp(resp->client->last_nonce, resp->nonce, NONCE_LEN)) {
-            ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_INFO, 0, r,
-                          "Digest: user %s: one-time-nonce mismatch - sending "
-                          "new nonce", r->user);
-            note_digest_auth_failure(r, conf, resp, 1);
-            return HTTP_UNAUTHORIZED;
-        }
-    }
-    /* else (lifetime < 0) => never expires */
-
-    return OK;
-}
-
-/* The actual MD5 code... whee */
-
-/* RFC-2069 */
-static const char *old_digest(const request_rec *r,
-                              const digest_header_rec *resp, const char *ha1)
-{
-    const char *ha2;
-
-    ha2 = ap_md5(r->pool, (unsigned char *)apr_pstrcat(r->pool, r->method, ":",
-                                                       resp->uri, NULL));
-    return ap_md5(r->pool,
-                  (unsigned char *)apr_pstrcat(r->pool, ha1, ":", resp->nonce,
-                                              ":", ha2, NULL));
-}
-
-/* RFC-2617 */
-static const char *new_digest(const request_rec *r,
-                              digest_header_rec *resp,
-                              const digest_config_rec *conf)
-{
-    const char *ha1, *ha2, *a2;
-
-    if (resp->algorithm && !strcasecmp(resp->algorithm, "MD5-sess")) {
-        ha1 = get_session_HA1(r, resp, conf, 1);
-        if (!ha1) {
-            return NULL;
-        }
-    }
-    else {
-        ha1 = conf->ha1;
-    }
-
-    if (resp->message_qop && !strcasecmp(resp->message_qop, "auth-int")) {
-        a2 = apr_pstrcat(r->pool, r->method, ":", resp->uri, ":",
-                         ap_md5(r->pool, (const unsigned char*) ""), NULL);
-                         /* TBD */
-    }
-    else {
-        a2 = apr_pstrcat(r->pool, r->method, ":", resp->uri, NULL);
-    }
-    ha2 = ap_md5(r->pool, (const unsigned char *)a2);
-
-    return ap_md5(r->pool,
-                  (unsigned char *)apr_pstrcat(r->pool, ha1, ":", resp->nonce,
-                                               ":", resp->nonce_count, ":",
-                                               resp->cnonce, ":",
-                                               resp->message_qop, ":", ha2,
-                                               NULL));
-}
-
-
-static void copy_uri_components(apr_uri_t *dst, 
-                                apr_uri_t *src, request_rec *r) {
-    if (src->scheme && src->scheme[0] != '\0') {
-        dst->scheme = src->scheme;
-    }
-    else {
-        dst->scheme = (char *) "http";
-    }
-
-    if (src->hostname && src->hostname[0] != '\0') {
-        dst->hostname = apr_pstrdup(r->pool, src->hostname);
-        ap_unescape_url(dst->hostname);
-    }
-    else {
-        dst->hostname = (char *) ap_get_server_name(r);
-    }
-
-    if (src->port_str && src->port_str[0] != '\0') {
-        dst->port = src->port;
-    }
-    else {
-        dst->port = ap_get_server_port(r);
-    }
-
-    if (src->path && src->path[0] != '\0') {
-        dst->path = apr_pstrdup(r->pool, src->path);
-        ap_unescape_url(dst->path);
-    }
-    else {
-        dst->path = src->path;
-    }
-
-    if (src->query && src->query[0] != '\0') {
-        dst->query = apr_pstrdup(r->pool, src->query);
-        ap_unescape_url(dst->query);
-    }
-    else {
-        dst->query = src->query;
-    }
-}
-
-/* These functions return 0 if client is OK, and proper error status
- * if not... either HTTP_UNAUTHORIZED, if we made a check, and it failed, or
- * HTTP_INTERNAL_SERVER_ERROR, if things are so totally confused that we
- * couldn't figure out how to tell if the client is authorized or not.
- *
- * If they return DECLINED, and all other modules also decline, that's
- * treated by the server core as a configuration error, logged and
- * reported as such.
- */
-
-/* Determine user ID, and check if the attributes are correct, if it
- * really is that user, if the nonce is correct, etc.
- */
-
-static int authenticate_digest_user(request_rec *r)
-{
-    digest_config_rec *conf;
-    digest_header_rec *resp;
-    request_rec       *mainreq;
-    const char        *t;
-    int                res;
-
-    /* do we require Digest auth for this URI? */
-
-    if (!(t = ap_auth_type(r)) || strcasecmp(t, "Digest")) {
-        return DECLINED;
-    }
-
-    if (!ap_auth_name(r)) {
-        ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                      "Digest: need AuthName: %s", r->uri);
-        return HTTP_INTERNAL_SERVER_ERROR;
-    }
-
-
-    /* get the client response and mark */
-
-    mainreq = r;
-    while (mainreq->main != NULL) {
-        mainreq = mainreq->main;
-    }
-    while (mainreq->prev != NULL) {
-        mainreq = mainreq->prev;
-    }
-    resp = (digest_header_rec *) ap_get_module_config(mainreq->request_config,
-                                                      &auth_digest_module);
-    resp->needed_auth = 1;
-
-
-    /* get our conf */
-
-    conf = (digest_config_rec *) ap_get_module_config(r->per_dir_config,
-                                                      &auth_digest_module);
-
-
-    /* check for existence and syntax of Auth header */
-
-    if (resp->auth_hdr_sts != VALID) {
-        if (resp->auth_hdr_sts == NOT_DIGEST) {
-            ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                          "Digest: client used wrong authentication scheme "
-                          "`%s': %s", resp->scheme, r->uri);
-        }
-        else if (resp->auth_hdr_sts == INVALID) {
-            ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                          "Digest: missing user, realm, nonce, uri, digest, "
-                          "cnonce, or nonce_count in authorization header: %s",
-                          r->uri);
-        }
-        /* else (resp->auth_hdr_sts == NO_HEADER) */
-        note_digest_auth_failure(r, conf, resp, 0);
-        return HTTP_UNAUTHORIZED;
-    }
-
-    r->user         = (char *) resp->username;
-    r->ap_auth_type = (char *) "Digest";
-
-    /* check the auth attributes */
-
-    if (strcmp(resp->uri, resp->raw_request_uri)) {
-        /* Hmm, the simple match didn't work (probably a proxy modified the
-         * request-uri), so lets do a more sophisticated match
-         */
-        apr_uri_t r_uri, d_uri;
-
-        copy_uri_components(&r_uri, resp->psd_request_uri, r);
-        if (apr_uri_parse(r->pool, resp->uri, &d_uri) != APR_SUCCESS) {
-            ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                          "Digest: invalid uri <%s> in Authorization header",
-                          resp->uri);
-            return HTTP_BAD_REQUEST;
-        }
-
-        if (d_uri.hostname) {
-            ap_unescape_url(d_uri.hostname);
-        }
-        if (d_uri.path) {
-            ap_unescape_url(d_uri.path);
-        }
-        if (d_uri.query) {
-            ap_unescape_url(d_uri.query);
-        }
-
-        if (r->method_number == M_CONNECT) {
-            if (strcmp(resp->uri, r_uri.hostinfo)) {
-                ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                              "Digest: uri mismatch - <%s> does not match "
-                              "request-uri <%s>", resp->uri, r_uri.hostinfo);
-                return HTTP_BAD_REQUEST;
-            }
-        }
-        else if (
-            /* check hostname matches, if present */
-            (d_uri.hostname && d_uri.hostname[0] != '\0'
-              && strcasecmp(d_uri.hostname, r_uri.hostname))
-            /* check port matches, if present */
-            || (d_uri.port_str && d_uri.port != r_uri.port)
-            /* check that server-port is default port if no port present */
-            || (d_uri.hostname && d_uri.hostname[0] != '\0'
-                && !d_uri.port_str && r_uri.port != ap_default_port(r))
-            /* check that path matches */
-            || (d_uri.path != r_uri.path
-                /* either exact match */
-                && (!d_uri.path || !r_uri.path
-                    || strcmp(d_uri.path, r_uri.path))
-                /* or '*' matches empty path in scheme://host */
-                && !(d_uri.path && !r_uri.path && resp->psd_request_uri->hostname
-                    && d_uri.path[0] == '*' && d_uri.path[1] == '\0'))
-            /* check that query matches */
-            || (d_uri.query != r_uri.query
-                && (!d_uri.query || !r_uri.query
-                    || strcmp(d_uri.query, r_uri.query)))
-            ) {
-            ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                          "Digest: uri mismatch - <%s> does not match "
-                          "request-uri <%s>", resp->uri, resp->raw_request_uri);
-            return HTTP_BAD_REQUEST;
-        }
-    }
-
-    if (resp->opaque && resp->opaque_num == 0) {
-        ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                      "Digest: received invalid opaque - got `%s'",
-                      resp->opaque);
-        note_digest_auth_failure(r, conf, resp, 0);
-        return HTTP_UNAUTHORIZED;
-    }
-
-    if (strcmp(resp->realm, conf->realm)) {
-        ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                      "Digest: realm mismatch - got `%s' but expected `%s'",
-                      resp->realm, conf->realm);
-        note_digest_auth_failure(r, conf, resp, 0);
-        return HTTP_UNAUTHORIZED;
-    }
-
-    if (resp->algorithm != NULL
-        && strcasecmp(resp->algorithm, "MD5")
-        && strcasecmp(resp->algorithm, "MD5-sess")) {
-        ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                      "Digest: unknown algorithm `%s' received: %s",
-                      resp->algorithm, r->uri);
-        note_digest_auth_failure(r, conf, resp, 0);
-        return HTTP_UNAUTHORIZED;
-    }
-
-    if (!conf->pwfile) {
-        return DECLINED;
-    }
-
-    if (!(conf->ha1 = get_hash(r, r->user, conf->realm, conf->pwfile))) {
-        ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                      "Digest: user `%s' in realm `%s' not found: %s",
-                      r->user, conf->realm, r->uri);
-        note_digest_auth_failure(r, conf, resp, 0);
-        return HTTP_UNAUTHORIZED;
-    }
-
-    
-    if (resp->message_qop == NULL) {
-        /* old (rfc-2069) style digest */
-        if (strcmp(resp->digest, old_digest(r, resp, conf->ha1))) {
-            ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                          "Digest: user %s: password mismatch: %s", r->user,
-                          r->uri);
-            note_digest_auth_failure(r, conf, resp, 0);
-            return HTTP_UNAUTHORIZED;
-        }
-    }
-    else {
-        const char *exp_digest;
-        int match = 0, idx;
-        for (idx = 0; conf->qop_list[idx] != NULL; idx++) {
-            if (!strcasecmp(conf->qop_list[idx], resp->message_qop)) {
-                match = 1;
-                break;
-            }
-        }
-
-        if (!match
-            && !(conf->qop_list[0] == NULL
-                 && !strcasecmp(resp->message_qop, "auth"))) {
-            ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                          "Digest: invalid qop `%s' received: %s",
-                          resp->message_qop, r->uri);
-            note_digest_auth_failure(r, conf, resp, 0);
-            return HTTP_UNAUTHORIZED;
-        }
-
-        exp_digest = new_digest(r, resp, conf);
-        if (!exp_digest) {
-            /* we failed to allocate a client struct */
-            return HTTP_INTERNAL_SERVER_ERROR;
-        }
-        if (strcmp(resp->digest, exp_digest)) {
-            ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                          "Digest: user %s: password mismatch: %s", r->user,
-                          r->uri);
-            note_digest_auth_failure(r, conf, resp, 0);
-            return HTTP_UNAUTHORIZED;
-        }
-    }
-
-    if (check_nc(r, resp, conf) != OK) {
-        note_digest_auth_failure(r, conf, resp, 0);
-        return HTTP_UNAUTHORIZED;
-    }
-
-    /* Note: this check is done last so that a "stale=true" can be
-       generated if the nonce is old */
-    if ((res = check_nonce(r, resp, conf))) {
-        return res;
-    }
-
-    return OK;
-}
-
-
-/*
- * Checking ID
- */
-
-static apr_table_t *groups_for_user(request_rec *r, const char *user,
-                                    const char *grpfile)
-{
-    ap_configfile_t *f;
-    apr_table_t *grps = apr_table_make(r->pool, 15);
-    apr_pool_t *sp;
-    char l[MAX_STRING_LEN];
-    const char *group_name, *ll, *w;
-    apr_status_t sts;
-
-    if ((sts = ap_pcfg_openfile(&f, r->pool, grpfile)) != APR_SUCCESS) {
-        ap_log_rerror(APLOG_MARK, APLOG_ERR, sts, r,
-                      "Digest: Could not open group file: %s", grpfile);
-        return NULL;
-    }
-
-    if (apr_pool_create(&sp, r->pool) != APR_SUCCESS) {
-        return NULL;
-    }
-
-    while (!(ap_cfg_getline(l, MAX_STRING_LEN, f))) {
-        if ((l[0] == '#') || (!l[0])) {
-            continue;
-        }
-        ll = l;
-        apr_pool_clear(sp);
-
-        group_name = ap_getword(sp, &ll, ':');
-
-        while (ll[0]) {
-            w = ap_getword_conf(sp, &ll);
-            if (!strcmp(w, user)) {
-                apr_table_setn(grps, apr_pstrdup(r->pool, group_name), "in");
-                break;
-            }
-        }
-    }
-
-    ap_cfg_closefile(f);
-    apr_pool_destroy(sp);
-    return grps;
-}
-
-
-static int digest_check_auth(request_rec *r)
-{
-    const digest_config_rec *conf =
-                (digest_config_rec *) ap_get_module_config(r->per_dir_config,
-                                                           &auth_digest_module);
-    const char *user = r->user;
-    int m = r->method_number;
-    int method_restricted = 0;
-    register int x;
-    const char *t, *w;
-    apr_table_t *grpstatus;
-    const apr_array_header_t *reqs_arr;
-    require_line *reqs;
-
-    if (!(t = ap_auth_type(r)) || strcasecmp(t, "Digest")) {
-        return DECLINED;
-    }
-
-    reqs_arr = ap_requires(r);
-    /* If there is no "requires" directive, then any user will do.
-     */
-    if (!reqs_arr) {
-        return OK;
-    }
-    reqs = (require_line *) reqs_arr->elts;
-
-    if (conf->grpfile) {
-        grpstatus = groups_for_user(r, user, conf->grpfile);
-    }
-    else {
-        grpstatus = NULL;
-    }
-
-    for (x = 0; x < reqs_arr->nelts; x++) {
-
-        if (!(reqs[x].method_mask & (AP_METHOD_BIT << m))) {
-            continue;
-        }
-
-        method_restricted = 1;
-
-        t = reqs[x].requirement;
-        w = ap_getword_white(r->pool, &t);
-        if (!strcasecmp(w, "valid-user")) {
-            return OK;
-        }
-        else if (!strcasecmp(w, "user")) {
-            while (t[0]) {
-                w = ap_getword_conf(r->pool, &t);
-                if (!strcmp(user, w)) {
-                    return OK;
-                }
-            }
-        }
-        else if (!strcasecmp(w, "group")) {
-            if (!grpstatus) {
-                return DECLINED;
-            }
-
-            while (t[0]) {
-                w = ap_getword_conf(r->pool, &t);
-                if (apr_table_get(grpstatus, w)) {
-                    return OK;
-                }
-            }
-        }
-        else {
-            ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                          "Digest: access to %s failed, reason: unknown "
-                          "require directive \"%s\"",
-                          r->uri, reqs[x].requirement);
-            return DECLINED;
-        }
-    }
-
-    if (!method_restricted) {
-        return OK;
-    }
-
-    ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                  "Digest: access to %s failed, reason: user %s not "
-                  "allowed access", r->uri, user);
-
-    note_digest_auth_failure(r, conf,
-        (digest_header_rec *) ap_get_module_config(r->request_config,
-                                                   &auth_digest_module),
-        0);
-    return HTTP_UNAUTHORIZED;
-}
-
-
-/*
- * Authorization-Info header code
- */
-
-#ifdef SEND_DIGEST
-static const char *hdr(const apr_table_t *tbl, const char *name)
-{
-    const char *val = apr_table_get(tbl, name);
-    if (val) {
-        return val;
-    }
-    else {
-        return "";
-    }
-}
-#endif
-
-static int add_auth_info(request_rec *r)
-{
-    const digest_config_rec *conf =
-                (digest_config_rec *) ap_get_module_config(r->per_dir_config,
-                                                           &auth_digest_module);
-    digest_header_rec *resp =
-                (digest_header_rec *) ap_get_module_config(r->request_config,
-                                                           &auth_digest_module);
-    const char *ai = NULL, *digest = NULL, *nextnonce = "";
-
-    if (resp == NULL || !resp->needed_auth || conf == NULL) {
-        return OK;
-    }
-
-
-    /* rfc-2069 digest
-     */
-    if (resp->message_qop == NULL) {
-        /* old client, so calc rfc-2069 digest */
-
-#ifdef SEND_DIGEST
-        /* most of this totally bogus because the handlers don't set the
-         * headers until the final handler phase (I wonder why this phase
-         * is called fixup when there's almost nothing you can fix up...)
-         *
-         * Because it's basically impossible to get this right (e.g. the
-         * Content-length is never set yet when we get here, and we can't
-         * calc the entity hash) it's best to just leave this #def'd out.
-         */
-        char date[APR_RFC822_DATE_LEN];
-        apr_rfc822_date(date, r->request_time);
-        char *entity_info =
-            ap_md5(r->pool,
-                   (unsigned char *) apr_pstrcat(r->pool, resp->raw_request_uri,
-                       ":",
-                       r->content_type ? r->content_type : ap_default_type(r), ":",
-                       hdr(r->headers_out, "Content-Length"), ":",
-                       r->content_encoding ? r->content_encoding : "", ":",
-                       hdr(r->headers_out, "Last-Modified"), ":",
-                       r->no_cache && !apr_table_get(r->headers_out, "Expires") ?
-                            date :
-                            hdr(r->headers_out, "Expires"),
-                       NULL));
-        digest =
-            ap_md5(r->pool,
-                   (unsigned char *)apr_pstrcat(r->pool, conf->ha1, ":",
-                                               resp->nonce, ":",
-                                               r->method, ":",
-                                               date, ":",
-                                               entity_info, ":",
-                                               ap_md5(r->pool, (unsigned char *) ""), /* H(entity) - TBD */
-                                               NULL));
-#endif
-    }
-
-
-    /* setup nextnonce
-     */
-    if (conf->nonce_lifetime > 0) {
-        /* send nextnonce if current nonce will expire in less than 30 secs */
-        if ((r->request_time - resp->nonce_time) > (conf->nonce_lifetime-NEXTNONCE_DELTA)) {
-            nextnonce = apr_pstrcat(r->pool, ", nextnonce=\"",
-                                   gen_nonce(r->pool, r->request_time,
-                                             resp->opaque, r->server, conf),
-                                   "\"", NULL);
-            if (resp->client)
-                resp->client->nonce_count = 0;
-        }
-    }
-    else if (conf->nonce_lifetime == 0 && resp->client) {
-        const char *nonce = gen_nonce(r->pool, 0, resp->opaque, r->server,
-                                      conf);
-        nextnonce = apr_pstrcat(r->pool, ", nextnonce=\"", nonce, "\"", NULL);
-        memcpy(resp->client->last_nonce, nonce, NONCE_LEN+1);
-    }
-    /* else nonce never expires, hence no nextnonce */
-
-
-    /* do rfc-2069 digest
-     */
-    if (conf->qop_list[0] && !strcasecmp(conf->qop_list[0], "none")
-        && resp->message_qop == NULL) {
-        /* use only RFC-2069 format */
-        if (digest) {
-            ai = apr_pstrcat(r->pool, "digest=\"", digest, "\"", nextnonce,NULL);
-        }
-        else {
-            ai = nextnonce;
-        }
-    }
-    else {
-        const char *resp_dig, *ha1, *a2, *ha2;
-
-        /* calculate rspauth attribute
-         */
-        if (resp->algorithm && !strcasecmp(resp->algorithm, "MD5-sess")) {
-            ha1 = get_session_HA1(r, resp, conf, 0);
-            if (!ha1) {
-                ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                              "Digest: internal error: couldn't find session "
-                              "info for user %s", resp->username);
-                return !OK;
-            }
-        }
-        else {
-            ha1 = conf->ha1;
-        }
-
-        if (resp->message_qop && !strcasecmp(resp->message_qop, "auth-int")) {
-            a2 = apr_pstrcat(r->pool, ":", resp->uri, ":",
-                             ap_md5(r->pool,(const unsigned char *) ""), NULL);
-                             /* TBD */
-        }
-        else {
-            a2 = apr_pstrcat(r->pool, ":", resp->uri, NULL);
-        }
-        ha2 = ap_md5(r->pool, (const unsigned char *)a2);
-
-        resp_dig = ap_md5(r->pool,
-                          (unsigned char *)apr_pstrcat(r->pool, ha1, ":",
-                                                       resp->nonce, ":",
-                                                       resp->nonce_count, ":",
-                                                       resp->cnonce, ":",
-                                                       resp->message_qop ?
-                                                         resp->message_qop : "",
-                                                       ":", ha2, NULL));
-
-        /* assemble Authentication-Info header
-         */
-        ai = apr_pstrcat(r->pool,
-                         "rspauth=\"", resp_dig, "\"",
-                         nextnonce,
-                         resp->cnonce ? ", cnonce=\"" : "",
-                         resp->cnonce
-                           ? ap_escape_quotes(r->pool, resp->cnonce)
-                           : "",
-                         resp->cnonce ? "\"" : "",
-                         resp->nonce_count ? ", nc=" : "",
-                         resp->nonce_count ? resp->nonce_count : "",
-                         resp->message_qop ? ", qop=" : "",
-                         resp->message_qop ? resp->message_qop : "",
-                         digest ? "digest=\"" : "",
-                         digest ? digest : "",
-                         digest ? "\"" : "",
-                         NULL);
-    }
-
-    if (ai && ai[0]) {
-        apr_table_mergen(r->headers_out,
-                         (PROXYREQ_PROXY == r->proxyreq)
-                             ? "Proxy-Authentication-Info"
-                             : "Authentication-Info",
-                         ai);
-    }
-
-    return OK;
-}
-
-
-static void register_hooks(apr_pool_t *p)
-{
-    static const char * const cfgPost[]={ "http_core.c", NULL };
-    static const char * const parsePre[]={ "mod_proxy.c", NULL };
-
-    ap_hook_post_config(initialize_module, NULL, cfgPost, APR_HOOK_MIDDLE);
-    ap_hook_child_init(initialize_child, NULL, NULL, APR_HOOK_MIDDLE);
-    ap_hook_post_read_request(parse_hdr_and_update_nc, parsePre, NULL, APR_HOOK_MIDDLE);
-    ap_hook_check_user_id(authenticate_digest_user, NULL, NULL, APR_HOOK_MIDDLE);
-    ap_hook_auth_checker(digest_check_auth, NULL, NULL, APR_HOOK_MIDDLE);
-    ap_hook_fixups(add_auth_info, NULL, NULL, APR_HOOK_MIDDLE);
-}
-
-module AP_MODULE_DECLARE_DATA auth_digest_module =
-{
-    STANDARD20_MODULE_STUFF,
-    create_digest_dir_config,   /* dir config creater */
-    NULL,                       /* dir merger --- default is to override */
-    NULL,                       /* server config */
-    NULL,                       /* merge server config */
-    digest_cmds,                /* command table */
-    register_hooks              /* register hooks */
-};
-
diff --git a/modules/aaa/mod_auth_digest.dsp b/modules/aaa/mod_auth_digest.dsp
deleted file mode 100644
index c673ce5..0000000
--- a/modules/aaa/mod_auth_digest.dsp
+++ /dev/null
@@ -1,128 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mod_auth_digest" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mod_auth_digest - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "mod_auth_digest.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "mod_auth_digest.mak" CFG="mod_auth_digest - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "mod_auth_digest - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mod_auth_digest - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "mod_auth_digest - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /O2 /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Release\mod_auth_digest" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o /win32 "NUL"
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o /win32 "NUL"
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /map /machine:I386 /out:"Release/mod_auth_digest.so" /base:@..\..\os\win32\BaseAddr.ref,mod_auth_digest
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /map /machine:I386 /out:"Release/mod_auth_digest.so" /base:@..\..\os\win32\BaseAddr.ref,mod_auth_digest
-
-!ELSEIF  "$(CFG)" == "mod_auth_digest - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Debug\mod_auth_digest" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o /win32 "NUL"
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o /win32 "NUL"
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /map /debug /machine:I386 /out:"Debug/mod_auth_digest.so" /base:@..\..\os\win32\BaseAddr.ref,mod_auth_digest
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /map /debug /machine:I386 /out:"Debug/mod_auth_digest.so" /base:@..\..\os\win32\BaseAddr.ref,mod_auth_digest
-
-!ENDIF 
-
-# Begin Target
-
-# Name "mod_auth_digest - Win32 Release"
-# Name "mod_auth_digest - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\mod_auth_digest.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mod_auth_digest.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\build\win32\win32ver.awk
-
-!IF  "$(CFG)" == "mod_auth_digest - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_auth_digest.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ../../build/win32/win32ver.awk mod_auth_digest  "auth_digest_module for Apache" ../../include/ap_release.h > .\mod_auth_digest.rc
-
-# End Custom Build
-
-!ELSEIF  "$(CFG)" == "mod_auth_digest - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_auth_digest.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ../../build/win32/win32ver.awk mod_auth_digest  "auth_digest_module for Apache" ../../include/ap_release.h > .\mod_auth_digest.rc
-
-# End Custom Build
-
-!ENDIF 
-
-# End Source File
-# End Target
-# End Project
diff --git a/modules/arch/netware/libprews.c b/modules/arch/netware/libprews.c
deleted file mode 100644
index 21b9a1f..0000000
--- a/modules/arch/netware/libprews.c
+++ /dev/null
@@ -1,54 +0,0 @@
-/*------------------------------------------------------------------
-  These functions are to be called when the shared NLM starts and
-  stops.  By using these functions instead of defining a main()
-  and calling ExitThread(TSR_THREAD, 0), the load time of the
-  shared NLM is faster and memory size reduced.
-   
-  You may also want to override these in your own Apache module
-  to do any cleanup other than the mechanism Apache modules
-  provide.
-------------------------------------------------------------------*/
-#include <netware.h>
-//#include "stddef.h"
-#include "novsock2.h"
-
-int _NonAppStart
-(
-    void        *NLMHandle,
-    void        *errorScreen,
-    const char  *cmdLine,
-    const char  *loadDirPath,
-    size_t      uninitializedDataLength,
-    void        *NLMFileHandle,
-    int         (*readRoutineP)( int conn, void *fileHandle, size_t offset,
-                    size_t nbytes, size_t *bytesRead, void *buffer ),
-    size_t      customDataOffset,
-    size_t      customDataSize,
-    int         messageCount,
-    const char  **messages
-)
-{
-#pragma unused(cmdLine)
-#pragma unused(loadDirPath)
-#pragma unused(uninitializedDataLength)
-#pragma unused(NLMFileHandle)
-#pragma unused(readRoutineP)
-#pragma unused(customDataOffset)
-#pragma unused(customDataSize)
-#pragma unused(messageCount)
-#pragma unused(messages)
-
-    WSADATA wsaData;
-    
-    return WSAStartup((WORD) MAKEWORD(2, 0), &wsaData);
-}
-
-void _NonAppStop( void )
-{
-    WSACleanup();
-}
-
-int  _NonAppCheckUnload( void )
-{
-	return 0;
-}
diff --git a/modules/arch/netware/mod_auth_anon.def b/modules/arch/netware/mod_auth_anon.def
deleted file mode 100644
index ab6b138..0000000
--- a/modules/arch/netware/mod_auth_anon.def
+++ /dev/null
@@ -1 +0,0 @@
-EXPORT  auth_anon_module
diff --git a/modules/arch/netware/mod_auth_dbm.def b/modules/arch/netware/mod_auth_dbm.def
deleted file mode 100644
index 830f194..0000000
--- a/modules/arch/netware/mod_auth_dbm.def
+++ /dev/null
@@ -1 +0,0 @@
-EXPORT  auth_dbm_module
diff --git a/modules/arch/netware/mod_auth_digest.def b/modules/arch/netware/mod_auth_digest.def
deleted file mode 100644
index 6a3aa08..0000000
--- a/modules/arch/netware/mod_auth_digest.def
+++ /dev/null
@@ -1 +0,0 @@
-EXPORT  auth_digest_module
diff --git a/modules/arch/netware/mod_cache.def b/modules/arch/netware/mod_cache.def
deleted file mode 100644
index c7ab6ca..0000000
--- a/modules/arch/netware/mod_cache.def
+++ /dev/null
@@ -1,6 +0,0 @@
-EXPORT  cache_module
-EXPORT  cache_hook_create_entity
-EXPORT  cache_hook_open_entity
-EXPORT  cache_hook_remove_url
-
-
diff --git a/modules/arch/netware/mod_cern_meta.def b/modules/arch/netware/mod_cern_meta.def
deleted file mode 100644
index 5638325..0000000
--- a/modules/arch/netware/mod_cern_meta.def
+++ /dev/null
@@ -1 +0,0 @@
-EXPORT  cern_meta_module
diff --git a/modules/arch/netware/mod_dav.def b/modules/arch/netware/mod_dav.def
deleted file mode 100644
index fb56c92..0000000
--- a/modules/arch/netware/mod_dav.def
+++ /dev/null
@@ -1,3 +0,0 @@
-EXPORT dav_module
-EXPORT @dav.imp
- 
diff --git a/modules/arch/netware/mod_echo.def b/modules/arch/netware/mod_echo.def
deleted file mode 100644
index 694135a..0000000
--- a/modules/arch/netware/mod_echo.def
+++ /dev/null
@@ -1,2 +0,0 @@
-EXPORT  echo_module
-
diff --git a/modules/arch/netware/mod_expires.def b/modules/arch/netware/mod_expires.def
deleted file mode 100644
index bc41663..0000000
--- a/modules/arch/netware/mod_expires.def
+++ /dev/null
@@ -1 +0,0 @@
-EXPORT  expires_module
diff --git a/modules/arch/netware/mod_file_cache.def b/modules/arch/netware/mod_file_cache.def
deleted file mode 100644
index 8ab98cf..0000000
--- a/modules/arch/netware/mod_file_cache.def
+++ /dev/null
@@ -1,2 +0,0 @@
-EXPORT  file_cache_module
-
diff --git a/modules/arch/netware/mod_headers.def b/modules/arch/netware/mod_headers.def
deleted file mode 100644
index 2fe35a8..0000000
--- a/modules/arch/netware/mod_headers.def
+++ /dev/null
@@ -1 +0,0 @@
-EXPORT  headers_module
diff --git a/modules/arch/netware/mod_info.def b/modules/arch/netware/mod_info.def
deleted file mode 100644
index ce71cb3..0000000
--- a/modules/arch/netware/mod_info.def
+++ /dev/null
@@ -1 +0,0 @@
-EXPORT  info_module
diff --git a/modules/arch/netware/mod_mem_cache.def b/modules/arch/netware/mod_mem_cache.def
deleted file mode 100644
index ce8b67a..0000000
--- a/modules/arch/netware/mod_mem_cache.def
+++ /dev/null
@@ -1,5 +0,0 @@
-IMPORT  cache_hook_create_entity
-IMPORT  cache_hook_open_entity
-IMPORT  cache_hook_remove_url
-EXPORT  mem_cache_module
-
diff --git a/modules/arch/netware/mod_mime_magic.def b/modules/arch/netware/mod_mime_magic.def
deleted file mode 100644
index 9530747..0000000
--- a/modules/arch/netware/mod_mime_magic.def
+++ /dev/null
@@ -1 +0,0 @@
-EXPORT  mime_magic_module
diff --git a/modules/arch/netware/mod_nw_ssl.c b/modules/arch/netware/mod_nw_ssl.c
deleted file mode 100644
index bbb0b56..0000000
--- a/modules/arch/netware/mod_nw_ssl.c
+++ /dev/null
@@ -1,466 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-/*
- * mod_tls.c - Apache SSL/TLS module for NetWare by Mike Gardiner.
- *
- * This module gives Apache the ability to do SSL/TLS with a minimum amount
- * of effort.  All of the SSL/TLS logic is already on NetWare versions 5 and
- * above and is interfaced through WinSock on NetWare.  As you can see in
- * the code below SSL/TLS sockets can be created with three WinSock calls.
- *
- * To load, simply place the module in the modules directory under the main
- * apache tree.  Then add a "SecureListen" with two arguments.  The first
- * argument is an address and/or port.  The second argument is the key pair
- * name as created in ConsoleOne.
- *
- *  Examples:
- *
- *          SecureListen 443 "SSL CertificateIP"  
- *          SecureListen 123.45.67.89:443 mycert
- */
-
-#define WS_SSL
-
-#define  MAX_ADDRESS  512
-#define  MAX_KEY       80
-
-
-#include "httpd.h"
-#include "http_config.h"
-#include "http_log.h"
-#include "ap_listen.h"
-#include "apr_strings.h"
-#include "apr_portable.h"
-
-module AP_MODULE_DECLARE_DATA nwssl_module;
-
-typedef struct NWSSLSrvConfigRec NWSSLSrvConfigRec;
-typedef struct seclisten_rec seclisten_rec;
-
-struct seclisten_rec {
-    seclisten_rec *next;
-    struct sockaddr_in local_addr;	/* local IP address and port */
-    int fd;
-    int used;			            /* Only used during restart */
-    char key[MAX_KEY];
-    int mutual;
-    char *addr;
-    int port;
-};
-
-struct NWSSLSrvConfigRec {
-    apr_table_t *sltable;
-};
-
-static seclisten_rec* ap_seclisteners = NULL;
-
-#define get_nwssl_cfg(srv) (NWSSLSrvConfigRec *) ap_get_module_config(srv->module_config, &nwssl_module)
-
-/*
- * Parses a host of the form <address>[:port]
- * :port is permitted if 'port' is not NULL
- */
-static unsigned long parse_addr(const char *w, unsigned short *ports)
-{
-    struct hostent *hep;
-    unsigned long my_addr;
-    char *p;
-
-    p = strchr(w, ':');
-    if (ports != NULL) {
-        *ports = 0;
-    if (p != NULL && strcmp(p + 1, "*") != 0)
-        *ports = atoi(p + 1);
-    }
-
-    if (p != NULL)
-        *p = '\0';
-    if (strcmp(w, "*") == 0) {
-        if (p != NULL)
-            *p = ':';
-        return htonl(INADDR_ANY);
-    }
-
-    my_addr = apr_inet_addr((char *)w);
-    if (my_addr != INADDR_NONE) {
-        if (p != NULL)
-            *p = ':';
-        return my_addr;
-    }
-
-    hep = gethostbyname(w);
-
-    if ((!hep) || (hep->h_addrtype != AF_INET || !hep->h_addr_list[0])) {
-        fprintf(stderr, "Cannot resolve host name %s --- exiting!\n", w);
-        exit(1);
-    }
-
-    if (hep->h_addr_list[1]) {
-        fprintf(stderr, "Host %s has multiple addresses ---\n", w);
-        fprintf(stderr, "you must choose one explicitly for use as\n");
-        fprintf(stderr, "a secure port.  Exiting!!!\n");
-        exit(1);
-    }
-
-    if (p != NULL)
-        *p = ':';
-
-    return ((struct in_addr *) (hep->h_addr))->s_addr;
-}
-
-static int find_secure_listener(seclisten_rec *lr)
-{
-    seclisten_rec *sl;
-
-    for (sl = ap_seclisteners; sl; sl = sl->next) {
-        if (!memcmp(&sl->local_addr, &lr->local_addr, sizeof(sl->local_addr))) {
-            sl->used = 1;
-            return sl->fd;
-        }
-    }    
-    return -1;
-}
-
-
-static int make_secure_socket(apr_pool_t *pconf, const struct sockaddr_in *server,
-                              char* key, int mutual, server_rec *server_conf)
-{
-    int s;
-    int one = 1;
-    char addr[MAX_ADDRESS];
-    struct sslserveropts opts;
-    unsigned int optParam;
-    WSAPROTOCOL_INFO SecureProtoInfo;
-    int no = 1;
-    
-    if (server->sin_addr.s_addr != htonl(INADDR_ANY))
-        apr_snprintf(addr, sizeof(addr), "address %s port %d",
-            inet_ntoa(server->sin_addr), ntohs(server->sin_port));
-    else
-        apr_snprintf(addr, sizeof(addr), "port %d", ntohs(server->sin_port));
-
-    /* note that because we're about to slack we don't use psocket */
-    memset(&SecureProtoInfo, 0, sizeof(WSAPROTOCOL_INFO));
-
-    SecureProtoInfo.iAddressFamily = AF_INET;
-    SecureProtoInfo.iSocketType = SOCK_STREAM;
-    SecureProtoInfo.iProtocol = IPPROTO_TCP;   
-    SecureProtoInfo.iSecurityScheme = SECURITY_PROTOCOL_SSL;
-
-    s = WSASocket(AF_INET, SOCK_STREAM, IPPROTO_TCP,
-            (LPWSAPROTOCOL_INFO)&SecureProtoInfo, 0, 0);
-            
-    if (s == INVALID_SOCKET) {
-        errno = WSAGetLastError();
-        ap_log_error(APLOG_MARK, APLOG_CRIT, errno, server_conf,
-            "make_secure_socket: failed to get a socket for %s", addr);
-        return -1;
-    }
-        
-    if (!mutual) {
-        optParam = SO_SSL_ENABLE | SO_SSL_SERVER;
-		    
-        if (WSAIoctl(s, SO_SSL_SET_FLAGS, (char *)&optParam,
-            sizeof(optParam), NULL, 0, NULL, NULL, NULL)) {
-            errno = WSAGetLastError();
-            ap_log_error(APLOG_MARK, APLOG_CRIT, errno, server_conf,
-                "make_secure_socket: for %s, WSAIoctl: (SO_SSL_SET_FLAGS)", addr);
-            return -1;
-        }
-    }
-
-    opts.cert = key;
-    opts.certlen = strlen(key);
-    opts.sidtimeout = 0;
-    opts.sidentries = 0;
-    opts.siddir = NULL;
-
-    if (WSAIoctl(s, SO_SSL_SET_SERVER, (char *)&opts, sizeof(opts),
-        NULL, 0, NULL, NULL, NULL) != 0) {
-        errno = WSAGetLastError();
-        ap_log_error(APLOG_MARK, APLOG_CRIT, errno, server_conf,
-            "make_secure_socket: for %s, WSAIoctl: (SO_SSL_SET_SERVER)", addr);
-        return -1;
-    }
-
-    if (mutual) {
-        optParam = 0x07;               // SO_SSL_AUTH_CLIENT
-
-        if(WSAIoctl(s, SO_SSL_SET_FLAGS, (char*)&optParam,
-            sizeof(optParam), NULL, 0, NULL, NULL, NULL)) {
-            errno = WSAGetLastError();
-            ap_log_error( APLOG_MARK, APLOG_CRIT, errno, server_conf,
-                "make_secure_socket: for %s, WSAIoctl: (SO_SSL_SET_FLAGS)", addr );
-            return -1;
-        }
-    }
-
-    return s;
-}
-
-static const char *set_secure_listener(cmd_parms *cmd, void *dummy, 
-                                       const char *ips, const char* key, 
-                                       const char* mutual)
-{
-    NWSSLSrvConfigRec* sc = get_nwssl_cfg(cmd->server);
-    const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
-    char *ports, *addr;
-    unsigned short port;
-    seclisten_rec *new;
-
-    
-    if (err != NULL) 
-        return err;
-
-    ports = strchr(ips, ':');
-    
-    if (ports != NULL) {    
-	    if (ports == ips)
-	        return "Missing IP address";
-	    else if (ports[1] == '\0')
-	        return "Address must end in :<port-number>";
-	        
-	    *(ports++) = '\0';
-    }
-    else {
-	    ports = (char*)ips;
-    }
-    
-    new = apr_pcalloc(cmd->pool, sizeof(seclisten_rec)); 
-    new->local_addr.sin_family = AF_INET;
-    
-    if (ports == ips) {
-	    new->local_addr.sin_addr.s_addr = htonl(INADDR_ANY);
-        addr = apr_pstrdup(cmd->pool, "0.0.0.0");
-    }
-    else {
-	    new->local_addr.sin_addr.s_addr = parse_addr(ips, NULL);
-        addr = apr_pstrdup(cmd->pool, ips);
-    }
-    
-    port = atoi(ports);
-    
-    if (!port) 
-	    return "Port must be numeric";
-	    
-    apr_table_set(sc->sltable, ports, "T");
-    
-    new->local_addr.sin_port = htons(port);
-    new->fd = -1;
-    new->used = 0;
-    new->next = ap_seclisteners;
-    strcpy(new->key, key);
-    new->mutual = (mutual) ? 1 : 0;
-    new->addr = addr;
-    new->port = port;
-    ap_seclisteners = new;
-    return NULL;
-}
-
-static apr_status_t nwssl_socket_cleanup(void *data)
-{
-    ap_listen_rec* slr = (ap_listen_rec*)data;
-    ap_listen_rec* lr;
-
-    /* Remove our secure listener from the listener list */
-    for (lr = ap_listeners; lr; lr = lr->next) {
-        /* slr is at the head of the list */
-        if (lr == slr) {
-            ap_listeners = slr->next;
-            break;
-        }
-        /* slr is somewhere in between or at the end*/
-        if (lr->next == slr) {
-            lr->next = slr->next;
-            break;
-        }
-    }
-    return APR_SUCCESS;
-}
-
-static int nwssl_pre_config(apr_pool_t *pconf, apr_pool_t *plog,
-                         apr_pool_t *ptemp)
-{
-    ap_seclisteners = NULL;
-
-    return OK;
-}
-
-static int nwssl_post_config(apr_pool_t *pconf, apr_pool_t *plog,
-                          apr_pool_t *ptemp, server_rec *s)
-{
-    seclisten_rec* sl;
-    ap_listen_rec* lr;
-    apr_socket_t*  sd;
-    apr_status_t status;
-    
-    for (sl = ap_seclisteners; sl != NULL; sl = sl->next) {
-        sl->fd = find_secure_listener(sl);
-
-        if (sl->fd < 0)
-            sl->fd = make_secure_socket(pconf, &sl->local_addr, sl->key, sl->mutual, s);            
-            
-        if (sl->fd >= 0) {
-            apr_os_sock_info_t sock_info;
-
-            sock_info.os_sock = &(sl->fd);
-            sock_info.local = (struct sockaddr*)&(sl->local_addr);
-            sock_info.remote = NULL;
-            sock_info.family = APR_INET;
-            sock_info.type = SOCK_STREAM;
-
-            apr_os_sock_make(&sd, &sock_info, pconf);
-
-            lr = apr_pcalloc(pconf, sizeof(ap_listen_rec));
-        
-            if (lr) {
-				lr->sd = sd;
-                if ((status = apr_sockaddr_info_get(&lr->bind_addr, sl->addr, APR_UNSPEC, sl->port, 0, 
-                                              pconf)) != APR_SUCCESS) {
-                    ap_log_perror(APLOG_MARK, APLOG_CRIT, status, pconf,
-                                 "alloc_listener: failed to set up sockaddr for %s:%d", sl->addr, sl->port);
-                    return HTTP_INTERNAL_SERVER_ERROR;
-                }
-                lr->next = ap_listeners;
-                ap_listeners = lr;
-                apr_pool_cleanup_register(pconf, lr, nwssl_socket_cleanup, apr_pool_cleanup_null);
-            }                        
-        } else {
-            return HTTP_INTERNAL_SERVER_ERROR;
-        }
-    } 
-    return OK;
-}
-
-static void *nwssl_config_server_create(apr_pool_t *p, server_rec *s)
-{
-    NWSSLSrvConfigRec *new = apr_palloc(p, sizeof(NWSSLSrvConfigRec));
-    new->sltable = apr_table_make(p, 5);
-    return new;
-}
-
-static void *nwssl_config_server_merge(apr_pool_t *p, void *basev, void *addv)
-{
-    NWSSLSrvConfigRec *base = (NWSSLSrvConfigRec *)basev;
-    NWSSLSrvConfigRec *add  = (NWSSLSrvConfigRec *)addv;
-    NWSSLSrvConfigRec *merged  = (NWSSLSrvConfigRec *)apr_palloc(p, sizeof(NWSSLSrvConfigRec));
-    return merged;
-}
-
-static int isSecure (const request_rec *r)
-{
-    NWSSLSrvConfigRec *sc = get_nwssl_cfg(r->server);
-    const char *s_secure = NULL;
-    char port[8];
-    int ret = 0;
-
-    itoa(((r->connection)->local_addr)->port, port, 10);
-    s_secure = apr_table_get(sc->sltable, port);    
-    if (s_secure)
-        ret = 1;
-
-    return ret;
-}
-
-static int nwssl_hook_Fixup(request_rec *r)
-{
-    apr_table_t *e = r->subprocess_env;    
-    if (!isSecure(r))
-        return DECLINED;
-
-    apr_table_set(e, "HTTPS", "on");
-    
-    return DECLINED;
-}
-
-static const char *nwssl_hook_http_method (const request_rec *r)
-{
-    if (isSecure(r))
-        return "https";
-
-    return NULL;
-}
-
-static const command_rec nwssl_module_cmds[] =
-{
-    AP_INIT_TAKE23("SecureListen", set_secure_listener, NULL, RSRC_CONF,
-      "specify an address and/or port with a key pair name.\n"
-      "Optional third parameter of MUTUAL configures the port for mutual authentication."),
-    {NULL}
-};
-
-static void register_hooks(apr_pool_t *p)
-{
-    ap_hook_pre_config(nwssl_pre_config, NULL, NULL, APR_HOOK_MIDDLE);
-    ap_hook_post_config(nwssl_post_config, NULL, NULL, APR_HOOK_MIDDLE);
-    ap_hook_fixups(nwssl_hook_Fixup, NULL, NULL, APR_HOOK_MIDDLE);
-    ap_hook_http_method(nwssl_hook_http_method,   NULL,NULL, APR_HOOK_MIDDLE);
-}
-
-module AP_MODULE_DECLARE_DATA nwssl_module =
-{
-    STANDARD20_MODULE_STUFF,
-    NULL,                       /* dir config creater */
-    NULL,                       /* dir merger --- default is to override */
-    nwssl_config_server_create, /* server config */
-    nwssl_config_server_merge,  /* merge server config */
-    nwssl_module_cmds,          /* command apr_table_t */
-    register_hooks
-};
-
diff --git a/modules/arch/netware/mod_proxy.def b/modules/arch/netware/mod_proxy.def
deleted file mode 100644
index 6e51eed..0000000
--- a/modules/arch/netware/mod_proxy.def
+++ /dev/null
@@ -1 +0,0 @@
-EXPORT  proxy_module
diff --git a/modules/arch/netware/mod_rewrite.def b/modules/arch/netware/mod_rewrite.def
deleted file mode 100644
index cfdcf6b..0000000
--- a/modules/arch/netware/mod_rewrite.def
+++ /dev/null
@@ -1 +0,0 @@
-EXPORT  rewrite_module
diff --git a/modules/arch/netware/mod_speling.def b/modules/arch/netware/mod_speling.def
deleted file mode 100644
index 3d45a6a..0000000
--- a/modules/arch/netware/mod_speling.def
+++ /dev/null
@@ -1 +0,0 @@
-EXPORT  speling_module
diff --git a/modules/arch/netware/mod_status.def b/modules/arch/netware/mod_status.def
deleted file mode 100644
index 9a5a32d..0000000
--- a/modules/arch/netware/mod_status.def
+++ /dev/null
@@ -1,2 +0,0 @@
-EXPORT  status_module
-
diff --git a/modules/arch/netware/mod_unique_id.def b/modules/arch/netware/mod_unique_id.def
deleted file mode 100644
index 0b72c1e..0000000
--- a/modules/arch/netware/mod_unique_id.def
+++ /dev/null
@@ -1 +0,0 @@
-EXPORT  unique_id_module
diff --git a/modules/arch/netware/mod_usertrack.def b/modules/arch/netware/mod_usertrack.def
deleted file mode 100644
index 7264c41..0000000
--- a/modules/arch/netware/mod_usertrack.def
+++ /dev/null
@@ -1 +0,0 @@
-EXPORT  usertrack_module
diff --git a/modules/arch/netware/mod_vhost_alias.def b/modules/arch/netware/mod_vhost_alias.def
deleted file mode 100644
index 574b85f..0000000
--- a/modules/arch/netware/mod_vhost_alias.def
+++ /dev/null
@@ -1,2 +0,0 @@
-EXPORT  vhost_alias_module
-
diff --git a/modules/arch/netware/moddavfs.def b/modules/arch/netware/moddavfs.def
deleted file mode 100644
index 67ec311..0000000
--- a/modules/arch/netware/moddavfs.def
+++ /dev/null
@@ -1 +0,0 @@
-EXPORT dav_fs_module 
diff --git a/modules/arch/win32/.cvsignore b/modules/arch/win32/.cvsignore
deleted file mode 100644
index 14ac456..0000000
--- a/modules/arch/win32/.cvsignore
+++ /dev/null
@@ -1,4 +0,0 @@
-Debug
-Release
-*.mak
-*.rc
diff --git a/modules/arch/win32/mod_isapi.c b/modules/arch/win32/mod_isapi.c
deleted file mode 100644
index 522082a..0000000
--- a/modules/arch/win32/mod_isapi.c
+++ /dev/null
@@ -1,1295 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-/*
- * mod_isapi.c - Internet Server Application (ISA) module for Apache
- * by Alexei Kosut <akosut@apache.org>
- *
- * This module implements Microsoft's ISAPI, allowing Apache (when running
- * under Windows) to load Internet Server Applications (ISAPI extensions).
- * It implements all of the ISAPI 2.0 specification, except for the 
- * "Microsoft-only" extensions dealing with asynchronous I/O. All ISAPI
- * extensions that use only synchronous I/O and are compatible with the
- * ISAPI 2.0 specification should work (most ISAPI 1.0 extensions should
- * function as well).
- *
- * To load, simply place the ISA in a location in the document tree.
- * Then add an "AddHandler isapi-isa dll" into your config file.
- * You should now be able to load ISAPI DLLs just be reffering to their
- * URLs. Make sure the ExecCGI option is active in the directory
- * the ISA is in.
- */
-
-#include "apr_strings.h"
-#include "apr_portable.h"
-#include "apr_buckets.h"
-#include "ap_config.h"
-#include "httpd.h"
-#include "http_config.h"
-#include "http_core.h"
-#include "http_protocol.h"
-#include "http_request.h"
-#include "http_log.h"
-#include "util_script.h"
-#include "mod_core.h"
-
-/* We use the exact same header file as the original */
-#include <HttpExt.h>
-
-#if !defined(HSE_REQ_MAP_URL_TO_PATH_EX) \
- || !defined(HSE_REQ_SEND_RESPONSE_HEADER_EX)
-#pragma message("WARNING: This build of Apache is missing the recent changes")
-#pragma message("in the Microsoft Win32 Platform SDK; some mod_isapi features")
-#pragma message("will be disabled.  To obtain the latest Platform SDK files,")
-#pragma message("please refer to:")
-#pragma message("http://msdn.microsoft.com/downloads/sdks/platform/platform.asp")
-#endif
-
-/* TODO: Unknown errors that must be researched for correct codes */
-
-#define TODO_ERROR 1
-
-/* Seems IIS does not enforce the requirement for \r\n termination on HSE_REQ_SEND_RESPONSE_HEADER,
-   define this to conform */
-#define RELAX_HEADER_RULE
-
-module AP_MODULE_DECLARE_DATA isapi_module;
-
-/* Declare the ISAPI functions */
-
-BOOL WINAPI GetServerVariable (HCONN hConn, LPSTR lpszVariableName,
-                               LPVOID lpvBuffer, LPDWORD lpdwSizeofBuffer);
-BOOL WINAPI WriteClient (HCONN ConnID, LPVOID Buffer, LPDWORD lpdwBytes,
-                         DWORD dwReserved);
-BOOL WINAPI ReadClient (HCONN ConnID, LPVOID lpvBuffer, LPDWORD lpdwSize);
-BOOL WINAPI ServerSupportFunction (HCONN hConn, DWORD dwHSERequest,
-                                   LPVOID lpvBuffer, LPDWORD lpdwSize,
-                                   LPDWORD lpdwDataType);
-
-/*
-    The optimiser blows it totally here. What happens is that autos are addressed relative to the
-    stack pointer, which, of course, moves around. The optimiser seems to lose track of it somewhere
-    between setting HttpExtensionProc's address and calling through it. We work around the problem by 
-    forcing it to use frame pointers.
-
-    The revisions below may eliminate this artifact.
-*/
-#pragma optimize("y",off)
-
-/* Our isapi server config structure */
-
-typedef struct {
-    apr_array_header_t *loaded;
-    DWORD ReadAheadBuffer;
-    int LogNotSupported;
-    int AppendLogToErrors;
-    int AppendLogToQuery;
-} isapi_server_conf;
-
-/* Our loaded isapi module description structure */
-
-typedef struct {
-    const char *filename;
-    apr_dso_handle_t *handle;
-    HSE_VERSION_INFO *pVer;
-    PFN_GETEXTENSIONVERSION GetExtensionVersion;
-    PFN_HTTPEXTENSIONPROC   HttpExtensionProc;
-    PFN_TERMINATEEXTENSION  TerminateExtension;
-    int   refcount;
-    DWORD timeout;
-    BOOL  fakeasync;
-    DWORD reportversion;
-} isapi_loaded;
-
-/* Our "Connection ID" structure */
-
-typedef struct {
-    LPEXTENSION_CONTROL_BLOCK ecb;
-    isapi_server_conf *sconf;
-    isapi_loaded *isa;
-    request_rec  *r;
-    PFN_HSE_IO_COMPLETION completion;
-    PVOID  completion_arg;
-    HANDLE complete;
-} isapi_cid;
-
-static void *create_isapi_server_config(apr_pool_t *p, server_rec *s)
-{
-    isapi_server_conf *sconf = apr_palloc(p, sizeof(isapi_server_conf));
-    sconf->loaded = apr_array_make(p, 20, sizeof(isapi_loaded*));
-    
-    sconf->ReadAheadBuffer = 49152;
-    sconf->LogNotSupported    = -1;
-    sconf->AppendLogToErrors   = 0;
-    sconf->AppendLogToQuery    = 0;
-
-    return sconf;
-}
-
-static int compare_loaded(const void *av, const void *bv)
-{
-    const isapi_loaded **a = av;
-    const isapi_loaded **b = bv;
-
-    return strcmp((*a)->filename, (*b)->filename);
-}
-
-static int isapi_post_config(apr_pool_t *p, apr_pool_t *plog,
-                             apr_pool_t *ptemp, server_rec *s)
-{
-    isapi_server_conf *sconf = ap_get_module_config(s->module_config, 
-                                                    &isapi_module);
-    isapi_loaded **elts = (isapi_loaded **)sconf->loaded->elts;
-    int nelts = sconf->loaded->nelts;
-
-    /* sort the elements of the main_server, by filename */
-    qsort(elts, nelts, sizeof(isapi_loaded*), compare_loaded);
-
-    /* and make all virtualhosts share the same */
-    for (s = s->next; s; s = s->next) {
-	ap_set_module_config(s->module_config, &isapi_module, sconf);
-    }
-    return OK;
-}
-
-static apr_status_t isapi_unload(isapi_loaded* isa, int force);
-
-static apr_status_t cleanup_isapi(void *isa)
-{
-    return isapi_unload((isapi_loaded*) isa, TRUE);
-}
-
-static apr_status_t isapi_load(apr_pool_t *p, isapi_server_conf *sconf, 
-                               request_rec *r, const char *fpath, 
-                               isapi_loaded** isa)
-{
-    isapi_loaded **found = (isapi_loaded **)sconf->loaded->elts;
-    apr_status_t rv;
-    int n;
-
-    for (n = 0; n < sconf->loaded->nelts; ++n) {
-        if (strcasecmp(fpath, (*found)->filename) == 0) {
-            break;
-        }
-        ++found;
-    }
-    
-    if (n < sconf->loaded->nelts) 
-    {
-        *isa = *found;
-        if ((*isa)->handle) 
-        {
-            ++(*isa)->refcount;
-            return APR_SUCCESS;
-        }
-        /* Otherwise we fall through and have to reload the resource
-         * into this existing mod_isapi cache bucket.
-         */
-    }
-    else
-    {
-        *isa = apr_pcalloc(p, sizeof(isapi_module));
-        (*isa)->filename = fpath;
-        (*isa)->pVer = apr_pcalloc(p, sizeof(HSE_VERSION_INFO));
-    
-        /* TODO: These need to become overrideable, so that we
-         * assure a given isapi can be fooled into behaving well.
-         */
-        (*isa)->timeout = INFINITE; /* microsecs */
-        (*isa)->fakeasync = TRUE;
-        (*isa)->reportversion = MAKELONG(0, 5); /* Revision 5.0 */
-    }
-    
-    rv = apr_dso_load(&(*isa)->handle, fpath, p);
-    if (rv)
-    {
-        ap_log_rerror(APLOG_MARK, APLOG_ALERT, rv, r,
-                      "ISAPI %s failed to load", fpath);
-        (*isa)->handle = NULL;
-        return rv;
-    }
-
-    rv = apr_dso_sym((void**)&(*isa)->GetExtensionVersion, (*isa)->handle,
-                     "GetExtensionVersion");
-    if (rv)
-    {
-        ap_log_rerror(APLOG_MARK, APLOG_ALERT, rv, r,
-                      "ISAPI %s is missing GetExtensionVersion()",
-                      fpath);
-        apr_dso_unload((*isa)->handle);
-        (*isa)->handle = NULL;
-        return rv;
-    }
-
-    rv = apr_dso_sym((void**)&(*isa)->HttpExtensionProc, (*isa)->handle,
-                     "HttpExtensionProc");
-    if (rv)
-    {
-        ap_log_rerror(APLOG_MARK, APLOG_ALERT, rv, r,
-                      "ISAPI %s is missing HttpExtensionProc()",
-                      fpath);
-        apr_dso_unload((*isa)->handle);
-        (*isa)->handle = NULL;
-        return rv;
-    }
-
-    /* TerminateExtension() is an optional interface */
-    rv = apr_dso_sym((void**)&(*isa)->TerminateExtension, (*isa)->handle,
-                     "TerminateExtension");
-    SetLastError(0);
-
-    /* Run GetExtensionVersion() */
-    if (!((*isa)->GetExtensionVersion)((*isa)->pVer)) {
-        apr_status_t rv = apr_get_os_error();
-        ap_log_rerror(APLOG_MARK, APLOG_ALERT, rv, r,
-                      "ISAPI %s call GetExtensionVersion() failed", 
-                      fpath);
-        apr_dso_unload((*isa)->handle);
-        (*isa)->handle = NULL;
-        return rv;
-    }
-
-    ++(*isa)->refcount;
-
-    apr_pool_cleanup_register(p, *isa, cleanup_isapi, 
-                                   apr_pool_cleanup_null);
-
-    return APR_SUCCESS;
-}
-
-static apr_status_t isapi_unload(isapi_loaded* isa, int force)
-{
-    /* All done with the DLL... get rid of it...
-     *
-     * If optionally cached, pass HSE_TERM_ADVISORY_UNLOAD,
-     * and if it returns TRUE, unload, otherwise, cache it.
-     */
-    if (((--isa->refcount > 0) && !force) || !isa->handle)
-        return APR_SUCCESS;
-    if (isa->TerminateExtension) {
-        if (force)
-            (*isa->TerminateExtension)(HSE_TERM_MUST_UNLOAD);
-        else if (!(*isa->TerminateExtension)(HSE_TERM_ADVISORY_UNLOAD))
-            return APR_EGENERAL;
-    }
-    apr_dso_unload(isa->handle);
-    isa->handle = NULL;
-    return APR_SUCCESS;
-}
-
-apr_status_t isapi_handler (request_rec *r)
-{
-    isapi_server_conf * sconf;
-    apr_table_t *e;
-    apr_status_t rv;
-    isapi_loaded *isa;
-    isapi_cid *cid;
-    const char *val;
-    DWORD read;
-    int res;
-    
-    if(strcmp(r->handler, "isapi-isa"))
-        return DECLINED;    
-
-    sconf = ap_get_module_config(r->server->module_config, &isapi_module);
-    e = r->subprocess_env;
-
-    /* Use similar restrictions as CGIs
-     *
-     * If this fails, it's pointless to load the isapi dll.
-     */
-    if (!(ap_allow_options(r) & OPT_EXECCGI))
-        return HTTP_FORBIDDEN;
-
-    if (r->finfo.filetype == APR_NOFILE)
-        return HTTP_NOT_FOUND;
-
-    if (r->finfo.filetype != APR_REG)
-        return HTTP_FORBIDDEN;
-
-    if (r->path_info && *r->path_info && !r->used_path_info)
-        return HTTP_NOT_FOUND;
-
-    /* Load the isapi extention without caching (sconf == NULL) 
-     * but note that we will recover an existing cached module.
-     */
-    if (isapi_load(r->pool, sconf, r, r->filename, &isa) != APR_SUCCESS)
-        return HTTP_INTERNAL_SERVER_ERROR;
-        
-    /* Set up variables */
-    ap_add_common_vars(r);
-    ap_add_cgi_vars(r);
-    apr_table_setn(e, "UNMAPPED_REMOTE_USER", "REMOTE_USER");
-    if ((val = apr_table_get(e, "HTTPS")) && strcmp(val, "on"))
-        apr_table_setn(e, "SERVER_PORT_SECURE", "1");
-    else
-        apr_table_setn(e, "SERVER_PORT_SECURE", "0");
-    apr_table_setn(e, "URL", r->uri);
-
-    /* Set up connection structure and ecb */
-    cid = apr_pcalloc(r->pool, sizeof(isapi_cid));
-    cid->sconf = ap_get_module_config(r->server->module_config, &isapi_module);
-
-    cid->ecb = apr_pcalloc(r->pool, sizeof(struct _EXTENSION_CONTROL_BLOCK));
-    cid->ecb->ConnID = (HCONN)cid;
-    cid->isa = isa;
-    cid->r = r;
-    cid->r->status = 0;
-    cid->complete = NULL;
-    cid->completion = NULL;
-    
-    cid->ecb->cbSize = sizeof(EXTENSION_CONTROL_BLOCK);
-    cid->ecb->dwVersion = isa->reportversion;
-    cid->ecb->dwHttpStatusCode = 0;
-    strcpy(cid->ecb->lpszLogData, "");
-    // TODO: are copies really needed here?
-    cid->ecb->lpszMethod = apr_pstrdup(r->pool, (char*) r->method);
-    cid->ecb->lpszQueryString = apr_pstrdup(r->pool, 
-                                (char*) apr_table_get(e, "QUERY_STRING"));
-    cid->ecb->lpszPathInfo = apr_pstrdup(r->pool, 
-                             (char*) apr_table_get(e, "PATH_INFO"));
-    cid->ecb->lpszPathTranslated = apr_pstrdup(r->pool, 
-                                   (char*) apr_table_get(e, "PATH_TRANSLATED"));
-    cid->ecb->lpszContentType = apr_pstrdup(r->pool, 
-                                (char*) apr_table_get(e, "CONTENT_TYPE"));
-    /* Set up the callbacks */
-    cid->ecb->GetServerVariable = GetServerVariable;
-    cid->ecb->WriteClient = WriteClient;
-    cid->ecb->ReadClient = ReadClient;
-    cid->ecb->ServerSupportFunction = ServerSupportFunction;
-
-    
-    /* Set up client input */
-    res = ap_setup_client_block(r, REQUEST_CHUNKED_ERROR);
-    if (res) {
-        isapi_unload(isa, FALSE);
-        return res;
-    }
-
-    if (ap_should_client_block(r)) {
-        /* Time to start reading the appropriate amount of data,
-         * and allow the administrator to tweak the number
-         * TODO: add the httpd.conf option for ReadAheadBuffer.
-         */
-        if (r->remaining) {
-            cid->ecb->cbTotalBytes = (apr_size_t)r->remaining;
-            if (cid->ecb->cbTotalBytes > cid->sconf->ReadAheadBuffer)
-                cid->ecb->cbAvailable = cid->sconf->ReadAheadBuffer;
-            else
-                cid->ecb->cbAvailable = cid->ecb->cbTotalBytes;
-        }
-        else
-        {
-            cid->ecb->cbTotalBytes = 0xffffffff;
-            cid->ecb->cbAvailable = cid->sconf->ReadAheadBuffer;
-        }
-
-        cid->ecb->lpbData = apr_pcalloc(r->pool, cid->ecb->cbAvailable + 1);
-
-        read = 0;
-        while (read < cid->ecb->cbAvailable &&
-               ((res = ap_get_client_block(r, cid->ecb->lpbData + read,
-                                        cid->ecb->cbAvailable - read)) > 0)) {
-            read += res;
-        }
-
-        if (res < 0) {
-            isapi_unload(isa, FALSE);
-            return HTTP_INTERNAL_SERVER_ERROR;
-        }
-
-        /* Although it's not to spec, IIS seems to null-terminate
-         * its lpdData string. So we will too.
-         */
-        if (res == 0)
-            cid->ecb->cbAvailable = cid->ecb->cbTotalBytes = read;
-        else
-            cid->ecb->cbAvailable = read;
-        cid->ecb->lpbData[read] = '\0';
-    }
-    else {
-        cid->ecb->cbTotalBytes = 0;
-        cid->ecb->cbAvailable = 0;
-        cid->ecb->lpbData = NULL;
-    }
-
-    /* All right... try and run the sucker */
-    rv = (*isa->HttpExtensionProc)(cid->ecb);
-
-    /* Check for a log message - and log it */
-    if (cid->ecb->lpszLogData && *cid->ecb->lpszLogData)
-        ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_INFO, 0, r,
-                      "ISAPI %s: %s", r->filename, cid->ecb->lpszLogData);
-
-    switch(rv) {
-        case 0:  /* Strange, but MS isapi accepts this as success */
-        case HSE_STATUS_SUCCESS:
-        case HSE_STATUS_SUCCESS_AND_KEEP_CONN:
-            /* Ignore the keepalive stuff; Apache handles it just fine without
-             * the ISA's "advice".
-             * Per Microsoft: "In IIS versions 4.0 and later, the return
-             * values HSE_STATUS_SUCCESS and HSE_STATUS_SUCCESS_AND_KEEP_CONN
-             * are functionally identical: Keep-Alive connections are
-             * maintained, if supported by the client."
-             * ... so we were pat all this time
-             */
-            break;
-
-        case HSE_STATUS_PENDING:    
-            /* emulating async behavior...
-             *
-             * Create a cid->completed event and wait on it for some timeout
-             * so that the app thinks is it running async.
-             *
-             * All async ServerSupportFunction calls will be handled through
-             * the registered IO_COMPLETION hook.
-             */
-            
-            if (!isa->fakeasync) {
-                if (cid->sconf->LogNotSupported)
-                {
-                     ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_WARNING, 0, r,
-                                   "ISAPI %s asynch I/O request refused", 
-                                   r->filename);
-                     cid->r->status = HTTP_INTERNAL_SERVER_ERROR;
-                }
-            }
-            else {
-                cid->complete = CreateEvent(NULL, FALSE, FALSE, NULL);
-                if (WaitForSingleObject(cid->complete, isa->timeout)
-                        == WAIT_TIMEOUT) {
-                    /* TODO: Now what... if this hung, then do we kill our own
-                     * thread to force its death?  For now leave timeout = -1
-                     */
-                }
-            }
-            break;
-
-        case HSE_STATUS_ERROR:    
-            /* end response if we have yet to do so.
-             */
-            cid->r->status = HTTP_INTERNAL_SERVER_ERROR;
-            break;
-
-        default:
-            /* TODO: log unrecognized retval for debugging 
-             */
-            cid->r->status = HTTP_INTERNAL_SERVER_ERROR;
-            break;
-    }
-
-    /* Set the status (for logging) */
-    if (cid->ecb->dwHttpStatusCode) {
-        cid->r->status = cid->ecb->dwHttpStatusCode;
-    }
-
-    /* All done with the DLL... get rid of it... */
-    isapi_unload(isa, FALSE);
-    
-    return OK;		/* NOT r->status, even if it has changed. */
-}
-#pragma optimize("",on)
-
-BOOL WINAPI GetServerVariable (HCONN hConn, LPSTR lpszVariableName,
-                               LPVOID lpvBuffer, LPDWORD lpdwSizeofBuffer)
-{
-    request_rec *r = ((isapi_cid *)hConn)->r;
-    const char *result;
-    DWORD len;
-
-    if (!strcmp(lpszVariableName, "ALL_HTTP")) 
-    {
-        /* lf delimited, colon split, comma seperated and 
-         * null terminated list of HTTP_ vars 
-         */
-        const apr_array_header_t *arr = apr_table_elts(r->subprocess_env);
-        const apr_table_entry_t *elts = (const apr_table_entry_t *)arr->elts;
-        int i;
-
-        for (len = 0, i = 0; i < arr->nelts; i++) {
-            if (!strncmp(elts[i].key, "HTTP_", 5)) {
-                len += strlen(elts[i].key) + strlen(elts[i].val) + 2;
-            }
-        }
-  
-        if (*lpdwSizeofBuffer < len + 1) {
-            *lpdwSizeofBuffer = len + 1;
-            SetLastError(ERROR_INSUFFICIENT_BUFFER);
-            return FALSE;
-        }
-    
-        for (i = 0; i < arr->nelts; i++) {
-            if (!strncmp(elts[i].key, "HTTP_", 5)) {
-                strcpy(lpvBuffer, elts[i].key);
-                ((char*)lpvBuffer) += strlen(elts[i].key);
-                *(((char*)lpvBuffer)++) = ':';
-                strcpy(lpvBuffer, elts[i].val);
-                ((char*)lpvBuffer) += strlen(elts[i].val);
-                *(((char*)lpvBuffer)++) = '\n';
-            }
-        }
-
-        *(((char*)lpvBuffer)++) = '\0';
-        *lpdwSizeofBuffer = len;
-        return TRUE;
-    }
-    
-    if (!strcmp(lpszVariableName, "ALL_RAW")) 
-    {
-        /* lf delimited, colon split, comma seperated and 
-         * null terminated list of the raw request header
-         */
-        const apr_array_header_t *arr = apr_table_elts(r->headers_in);
-        const apr_table_entry_t *elts = (const apr_table_entry_t *)arr->elts;
-        int i;
-
-        for (len = 0, i = 0; i < arr->nelts; i++) {
-            len += strlen(elts[i].key) + strlen(elts[i].val) + 2;
-        }
-  
-        if (*lpdwSizeofBuffer < len + 1) {
-            *lpdwSizeofBuffer = len + 1;
-            SetLastError(ERROR_INSUFFICIENT_BUFFER);
-            return FALSE;
-        }
-    
-        for (i = 0; i < arr->nelts; i++) {
-            strcpy(lpvBuffer, elts[i].key);
-            ((char*)lpvBuffer) += strlen(elts[i].key);
-            *(((char*)lpvBuffer)++) = ':';
-            *(((char*)lpvBuffer)++) = ' ';
-            strcpy(lpvBuffer, elts[i].val);
-            ((char*)lpvBuffer) += strlen(elts[i].val);
-            *(((char*)lpvBuffer)++) = '\n';
-        }
-        *(((char*)lpvBuffer)++) = '\0';
-        *lpdwSizeofBuffer = len;
-        return TRUE;
-    }
-    
-    /* Not a special case */
-    result = apr_table_get(r->subprocess_env, lpszVariableName);
-
-    if (result) {
-        len = strlen(result);
-        if (*lpdwSizeofBuffer < len + 1) {
-            *lpdwSizeofBuffer = len + 1;
-            SetLastError(ERROR_INSUFFICIENT_BUFFER);
-            return FALSE;
-        }
-        strcpy(lpvBuffer, result);
-        *lpdwSizeofBuffer = len;
-        return TRUE;
-    }
-
-    /* Not Found */
-    SetLastError(ERROR_INVALID_INDEX);
-    return FALSE;
-}
-
-BOOL WINAPI WriteClient (HCONN ConnID, LPVOID Buffer, LPDWORD lpdwBytes,
-                         DWORD dwReserved)
-{
-    request_rec *r = ((isapi_cid *)ConnID)->r;
-    apr_bucket_brigade *bb;
-    apr_bucket *b;
-
-    if (dwReserved == HSE_IO_SYNC)
-        ; /* XXX: Fake it */
-
-    bb = apr_brigade_create(r->pool);
-    b = apr_bucket_transient_create(Buffer, *lpdwBytes);
-    APR_BRIGADE_INSERT_TAIL(bb, b);
-    b = apr_bucket_flush_create();
-    APR_BRIGADE_INSERT_TAIL(bb, b);
-    ap_pass_brigade(r->output_filters, bb);
-
-    return TRUE;
-}
-
-BOOL WINAPI ReadClient (HCONN ConnID, LPVOID lpvBuffer, LPDWORD lpdwSize)
-{
-    request_rec *r = ((isapi_cid *)ConnID)->r;
-    DWORD read = 0;
-    int res;
-
-    if (r->remaining < *lpdwSize) {
-        *lpdwSize = (apr_size_t)r->remaining;
-    }
-
-    while (read < *lpdwSize &&
-           ((res = ap_get_client_block(r, (char*)lpvBuffer + read,
-                                       *lpdwSize - read)) > 0)) {
-        read += res;
-    }
-
-    *lpdwSize = read;
-    return TRUE;
-}
-
-static apr_ssize_t SendResponseHeaderEx(isapi_cid *cid, const char *stat,
-                                        const char *head, apr_size_t statlen,
-                                        apr_size_t headlen)
-{
-    int termarg;
-    char *termch;
-
-    if (!stat || statlen == 0 || !*stat) {
-        stat = "Status: 200 OK";
-    }
-    else {
-        char *newstat;
-        newstat = apr_palloc(cid->r->pool, statlen + 9);
-        strcpy(newstat, "Status: ");
-        apr_cpystrn(newstat + 8, stat, statlen + 1);
-        stat = newstat;
-    }
-
-    if (!head || headlen == 0 || !*head) {
-        head = "\r\n";
-    }
-    else
-    {
-        if (head[headlen]) {
-            /* Whoops... not NULL terminated */
-            head = apr_pstrndup(cid->r->pool, head, headlen);
-        }
-    }
- 
-    /* Parse them out, or die trying */
-    cid->r->status= ap_scan_script_header_err_strs(cid->r, NULL, &termch,
-                                                  &termarg, stat, head, NULL);
-    cid->ecb->dwHttpStatusCode = cid->r->status;
-    if (cid->r->status == HTTP_INTERNAL_SERVER_ERROR)
-        return -1;
-    
-    /* Headers will actually go when they are good and ready */
-
-    /* If all went well, tell the caller we consumed the headers complete */
-    if (!termch)
-        return(headlen);
-
-    /* Any data left is sent directly by the caller, all we
-     * give back is the size of the headers we consumed
-     */
-    if (termch && (termarg == 1) && head + headlen > termch) {
-        return termch - head;
-    }
-    return 0;
-}
-
-BOOL WINAPI ServerSupportFunction(HCONN hConn, DWORD dwHSERequest,
-                                  LPVOID lpvBuffer, LPDWORD lpdwSize,
-                                  LPDWORD lpdwDataType)
-{
-    isapi_cid *cid = (isapi_cid *)hConn;
-    request_rec *r = cid->r;
-    request_rec *subreq;
-
-    switch (dwHSERequest) {
-    case 1: /* HSE_REQ_SEND_URL_REDIRECT_RESP */
-        /* Set the status to be returned when the HttpExtensionProc()
-         * is done.
-         * WARNING: Microsoft now advertises HSE_REQ_SEND_URL_REDIRECT_RESP
-         *          and HSE_REQ_SEND_URL as equivalant per the Jan 2000 SDK.
-         *          They most definately are not, even in their own samples.
-         */
-        apr_table_set (r->headers_out, "Location", lpvBuffer);
-        cid->r->status = cid->ecb->dwHttpStatusCode 
-                                               = HTTP_MOVED_TEMPORARILY;
-        return TRUE;
-
-    case 2: /* HSE_REQ_SEND_URL */
-        /* Soak up remaining input */
-        if (r->remaining > 0) {
-            char argsbuffer[HUGE_STRING_LEN];
-            while (ap_get_client_block(r, argsbuffer, HUGE_STRING_LEN));
-        }
-
-        /* Reset the method to GET */
-        r->method = apr_pstrdup(r->pool, "GET");
-        r->method_number = M_GET;
-
-        /* Don't let anyone think there's still data */
-        apr_table_unset(r->headers_in, "Content-Length");
-
-        /* AV fault per PR3598 - redirected path is lost! */
-        (char*)lpvBuffer = apr_pstrdup(r->pool, (char*)lpvBuffer);
-        ap_internal_redirect((char*)lpvBuffer, r);
-        return TRUE;
-
-    case 3: /* HSE_REQ_SEND_RESPONSE_HEADER */
-    {
-        /* Parse them out, or die trying */
-        apr_size_t statlen = 0, headlen = 0;
-        apr_ssize_t ate;
-        if (lpvBuffer)
-            statlen = strlen((char*) lpvBuffer);
-        if (lpdwDataType)
-            headlen = strlen((char*) lpdwDataType);
-        ate = SendResponseHeaderEx(cid, (char*) lpvBuffer,
-                                   (char*) lpdwDataType,
-                                   statlen, headlen);
-        if (ate < 0) {
-            SetLastError(TODO_ERROR);
-            return FALSE;
-        }
-        else if ((apr_size_t)ate < headlen) {
-            apr_bucket_brigade *bb;
-            apr_bucket *b;
-            bb = apr_brigade_create(cid->r->pool);
-	    b = apr_bucket_transient_create((char*) lpdwDataType + ate, 
-                                           headlen - ate);
-	    APR_BRIGADE_INSERT_TAIL(bb, b);
-            b = apr_bucket_flush_create();
-	    APR_BRIGADE_INSERT_TAIL(bb, b);
-	    ap_pass_brigade(cid->r->output_filters, bb);
-        }
-        return TRUE;
-    }
-
-    case 4: /* HSE_REQ_DONE_WITH_SESSION */
-        /* Signal to resume the thread completing this request
-         */
-        if (cid->complete)
-            SetEvent(cid->complete);            
-        return TRUE;
-
-    case 1001: /* HSE_REQ_MAP_URL_TO_PATH */
-    {
-        /* Map a URL to a filename */
-        char *file = (char *)lpvBuffer;
-        DWORD len;
-        subreq = ap_sub_req_lookup_uri(apr_pstrndup(r->pool, file, *lpdwSize),
-                                       r, NULL);
-
-        len = apr_cpystrn(file, subreq->filename, *lpdwSize) - file;
-
-
-        /* IIS puts a trailing slash on directories, Apache doesn't */
-        if (subreq->finfo.filetype == APR_DIR) {
-            if (len < *lpdwSize - 1) {
-                file[len++] = '\\';
-                file[len] = '\0';
-            }
-        }
-        *lpdwSize = len;
-        return TRUE;
-    }
-
-    case 1002: /* HSE_REQ_GET_SSPI_INFO */
-        if (cid->sconf->LogNotSupported)
-            ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_WARNING, 0, r,
-                           "ISAPI ServerSupportFunction HSE_REQ_GET_SSPI_INFO "
-                           "is not supported: %s", r->filename);
-        SetLastError(ERROR_INVALID_PARAMETER);
-        return FALSE;
-        
-    case 1003: /* HSE_APPEND_LOG_PARAMETER */
-        /* Log lpvBuffer, of lpdwSize bytes, in the URI Query (cs-uri-query) field
-         */
-        apr_table_set(r->notes, "isapi-parameter", (char*) lpvBuffer);
-        if (cid->sconf->AppendLogToQuery) {
-            if (r->args)
-                r->args = apr_pstrcat(r->pool, r->args, (char*) lpvBuffer, NULL);
-            else
-                r->args = apr_pstrdup(r->pool, (char*) lpvBuffer);
-        }
-        if (cid->sconf->AppendLogToErrors)
-            ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_INFO, 0, r,
-                          "ISAPI %s: %s", cid->r->filename,
-                          (char*) lpvBuffer);
-        return TRUE;
-        
-    case 1005: /* HSE_REQ_IO_COMPLETION */
-        /* Emulates a completion port...  Record callback address and 
-         * user defined arg, we will call this after any async request 
-         * (e.g. transmitfile) as if the request executed async.
-         * Per MS docs... HSE_REQ_IO_COMPLETION replaces any prior call
-         * to HSE_REQ_IO_COMPLETION, and lpvBuffer may be set to NULL.
-         */
-        if (!cid->isa->fakeasync) {
-            if (cid->sconf->LogNotSupported)
-                ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_WARNING, 0, r,
-                          "ISAPI ServerSupportFunction HSE_REQ_IO_COMPLETION "
-                          "is not supported: %s", r->filename);
-            SetLastError(ERROR_INVALID_PARAMETER);
-            return FALSE;
-        }
-        cid->completion = (PFN_HSE_IO_COMPLETION) lpvBuffer;
-        cid->completion_arg = (PVOID) lpdwDataType;
-        return TRUE;
-
-    case 1006: /* HSE_REQ_TRANSMIT_FILE */
-    {
-        HSE_TF_INFO *tf = (HSE_TF_INFO*)lpvBuffer;
-        apr_status_t rv;
-        apr_bucket_brigade *bb;
-        apr_bucket *b;
-        apr_file_t *fd;
-
-        if (!cid->isa->fakeasync && (tf->dwFlags & HSE_IO_ASYNC)) {
-            if (cid->sconf->LogNotSupported)
-                ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_WARNING, 0, r,
-                         "ISAPI ServerSupportFunction HSE_REQ_TRANSMIT_FILE "
-                         "as HSE_IO_ASYNC is not supported: %s", r->filename);
-            SetLastError(ERROR_INVALID_PARAMETER);
-            return FALSE;
-        }
-        
-        if ((rv = apr_os_file_put(&fd, tf->hFile, 0, r->pool)) != APR_SUCCESS) {
-            return FALSE;
-        }
-        
-        /* apr_dupfile_oshandle (&fd, tf->hFile, r->pool); */
-        bb = apr_brigade_create(r->pool);
-
-        if (tf->dwFlags & HSE_IO_SEND_HEADERS) 
-        {
-            /* According to MS: if calling HSE_REQ_TRANSMIT_FILE with the
-             * HSE_IO_SEND_HEADERS flag, then you can't otherwise call any
-             * HSE_SEND_RESPONSE_HEADERS* fn, but if you don't use the flag,
-             * you must have done so.  They document that the pHead headers
-             * option is valid only for HSE_IO_SEND_HEADERS - we are a bit
-             * more flexible and assume with the flag, pHead are the
-             * response headers, and without, pHead simply contains text
-             * (handled after this case).
-             */
-            apr_ssize_t ate = SendResponseHeaderEx(cid, tf->pszStatusCode, 
-                                                   (char*)tf->pHead,
-                                                   strlen(tf->pszStatusCode), 
-                                                   tf->HeadLength);
-            if (ate < 0)
-            {
-                apr_brigade_destroy(bb);
-                SetLastError(TODO_ERROR);
-                return FALSE;
-            }
-            if ((apr_size_t)ate < tf->HeadLength)
-            {
-                b = apr_bucket_transient_create((char*)tf->pHead + ate, 
-                                                tf->HeadLength - ate);
-                APR_BRIGADE_INSERT_TAIL(bb, b);
-            }
-        }
-        else if (tf->pHead && tf->HeadLength) {
-            b = apr_bucket_transient_create((char*)tf->pHead, 
-                                            tf->HeadLength);
-            APR_BRIGADE_INSERT_TAIL(bb, b);
-        }
-
-        b = apr_bucket_file_create(fd, tf->Offset, 
-                                   tf->BytesToWrite, r->pool);
-        APR_BRIGADE_INSERT_TAIL(bb, b);
-        
-        if (tf->pTail && tf->TailLength) {
-            b = apr_bucket_transient_create((char*)tf->pTail, 
-                                            tf->TailLength);
-            APR_BRIGADE_INSERT_TAIL(bb, b);
-        }
-        
-        b = apr_bucket_flush_create();
-        APR_BRIGADE_INSERT_TAIL(bb, b);
-        ap_pass_brigade(r->output_filters, bb);
-
-        /* we do nothing with (tf->dwFlags & HSE_DISCONNECT_AFTER_SEND)
-         */
-
-        if (tf->dwFlags & HSE_IO_ASYNC) {
-            /* XXX: Fake async response,
-             * use tf->pfnHseIO, or if NULL, then use cid->fnIOComplete
-             * pass pContect to the HseIO callback.
-             */
-        }
-        return TRUE;
-    }
-
-    case 1007: /* HSE_REQ_REFRESH_ISAPI_ACL */
-        if (cid->sconf->LogNotSupported)
-            ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_WARNING, 0, r,
-                          "ISAPI ServerSupportFunction "
-                          "HSE_REQ_REFRESH_ISAPI_ACL "
-                          "is not supported: %s", r->filename);
-        SetLastError(ERROR_INVALID_PARAMETER);
-        return FALSE;
-
-    case 1008: /* HSE_REQ_IS_KEEP_CONN */
-        *((LPBOOL) lpvBuffer) = (r->connection->keepalive == 1);
-        return TRUE;
-
-    case 1010: /* XXX: Fake it : HSE_REQ_ASYNC_READ_CLIENT */
-        if (cid->sconf->LogNotSupported)
-            ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_WARNING, 0, r,
-                          "ISAPI asynchronous I/O not supported: %s", 
-                          r->filename);
-        SetLastError(ERROR_INVALID_PARAMETER);
-        return FALSE;
-
-    case 1011: /* HSE_REQ_GET_IMPERSONATION_TOKEN  Added in ISAPI 4.0 */
-        if (cid->sconf->LogNotSupported)
-            ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_WARNING, 0, r,
-                          "ISAPI ServerSupportFunction "
-                          "HSE_REQ_GET_IMPERSONATION_TOKEN "
-                          "is not supported: %s", r->filename);
-        SetLastError(ERROR_INVALID_PARAMETER);
-        return FALSE;
-
-#ifdef HSE_REQ_MAP_URL_TO_PATH_EX
-    case 1012: /* HSE_REQ_MAP_URL_TO_PATH_EX */
-    {
-        /* Map a URL to a filename */
-        LPHSE_URL_MAPEX_INFO info = (LPHSE_URL_MAPEX_INFO) lpdwDataType;
-        char* test_uri = apr_pstrndup(r->pool, (char *)lpvBuffer, *lpdwSize);
-
-        subreq = ap_sub_req_lookup_uri(test_uri, r, NULL);
-        info->cchMatchingURL = strlen(test_uri);        
-        info->cchMatchingPath = apr_cpystrn(info->lpszPath, subreq->filename, 
-                                            MAX_PATH) - info->lpszPath;
-
-        /* Mapping started with assuming both strings matched.
-         * Now roll on the path_info as a mismatch and handle
-         * terminating slashes for directory matches.
-         */
-        if (subreq->path_info && *subreq->path_info) {
-            apr_cpystrn(info->lpszPath + info->cchMatchingPath, 
-                        subreq->path_info, MAX_PATH - info->cchMatchingPath);
-            info->cchMatchingURL -= strlen(subreq->path_info);
-            if (subreq->finfo.filetype == APR_DIR
-                 && info->cchMatchingPath < MAX_PATH - 1) {
-                /* roll forward over path_info's first slash */
-                ++info->cchMatchingPath;
-                ++info->cchMatchingURL;
-            }
-        }
-        else if (subreq->finfo.filetype == APR_DIR
-                 && info->cchMatchingPath < MAX_PATH - 1) {
-            /* Add a trailing slash for directory */
-            info->lpszPath[info->cchMatchingPath++] = '/';
-            info->lpszPath[info->cchMatchingPath] = '\0';
-        }
-
-        /* If the matched isn't a file, roll match back to the prior slash */
-        if (subreq->finfo.filetype == APR_NOFILE) {
-            while (info->cchMatchingPath && info->cchMatchingURL) {
-                if (info->lpszPath[info->cchMatchingPath - 1] == '/') 
-                    break;
-                --info->cchMatchingPath;
-                --info->cchMatchingURL;
-            }
-        }
-        
-        /* Paths returned with back slashes */
-        for (test_uri = info->lpszPath; *test_uri; ++test_uri)
-            if (*test_uri == '/')
-                *test_uri = '\\';
-        
-        /* is a combination of:
-         * HSE_URL_FLAGS_READ         0x001 Allow read
-         * HSE_URL_FLAGS_WRITE        0x002 Allow write
-         * HSE_URL_FLAGS_EXECUTE      0x004 Allow execute
-         * HSE_URL_FLAGS_SSL          0x008 Require SSL
-         * HSE_URL_FLAGS_DONT_CACHE   0x010 Don't cache (VRoot only)
-         * HSE_URL_FLAGS_NEGO_CERT    0x020 Allow client SSL cert
-         * HSE_URL_FLAGS_REQUIRE_CERT 0x040 Require client SSL cert
-         * HSE_URL_FLAGS_MAP_CERT     0x080 Map client SSL cert to account
-         * HSE_URL_FLAGS_SSL128       0x100 Require 128-bit SSL cert
-         * HSE_URL_FLAGS_SCRIPT       0x200 Allow script execution
-         *
-         * XxX: As everywhere, EXEC flags could use some work...
-         *      and this could go further with more flags, as desired.
-         */ 
-        info->dwFlags = (subreq->finfo.protection & APR_UREAD    ? 0x001 : 0)
-                      | (subreq->finfo.protection & APR_UWRITE   ? 0x002 : 0)
-                      | (subreq->finfo.protection & APR_UEXECUTE ? 0x204 : 0);
-        return TRUE;
-    }
-#endif
-
-    case 1014: /* HSE_REQ_ABORTIVE_CLOSE */
-        if (cid->sconf->LogNotSupported)
-            ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_WARNING, 0, r,
-                          "ISAPI ServerSupportFunction HSE_REQ_ABORTIVE_CLOSE"
-                          " is not supported: %s", r->filename);
-        SetLastError(ERROR_INVALID_PARAMETER);
-        return FALSE;
-
-    case 1015: /* HSE_REQ_GET_CERT_INFO_EX  Added in ISAPI 4.0 */
-        if (cid->sconf->LogNotSupported)
-            ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_WARNING, 0, r,
-                          "ISAPI ServerSupportFunction "
-                          "HSE_REQ_GET_CERT_INFO_EX "
-                          "is not supported: %s", r->filename);        
-        SetLastError(ERROR_INVALID_PARAMETER);
-        return FALSE;
-
-#ifdef HSE_REQ_SEND_RESPONSE_HEADER_EX
-    case 1016: /* HSE_REQ_SEND_RESPONSE_HEADER_EX  Added in ISAPI 4.0 */
-    {
-        LPHSE_SEND_HEADER_EX_INFO shi
-                                  = (LPHSE_SEND_HEADER_EX_INFO) lpvBuffer;
-        /* XXX: ignore shi->fKeepConn?  We shouldn't need the advise */
-        /* r->connection->keepalive = shi->fKeepConn; */
-        apr_ssize_t ate = SendResponseHeaderEx(cid, shi->pszStatus, 
-                                               shi->pszHeader,
-                                               shi->cchStatus, 
-                                               shi->cchHeader);
-        if (ate < 0) {
-            SetLastError(TODO_ERROR);
-            return FALSE;
-        }
-        else if ((apr_size_t)ate < shi->cchHeader) {
-            apr_bucket_brigade *bb;
-            apr_bucket *b;
-            bb = apr_brigade_create(cid->r->pool);
-	    b = apr_bucket_transient_create(shi->pszHeader + ate, 
-                                            shi->cchHeader - ate);
-	    APR_BRIGADE_INSERT_TAIL(bb, b);
-            b = apr_bucket_flush_create();
-	    APR_BRIGADE_INSERT_TAIL(bb, b);
-	    ap_pass_brigade(cid->r->output_filters, bb);
-        }
-        return TRUE;
-
-    }
-#endif
-
-    case 1017: /* HSE_REQ_CLOSE_CONNECTION  Added after ISAPI 4.0 */
-        if (cid->sconf->LogNotSupported)
-            ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_WARNING, 0, r,
-                          "ISAPI ServerSupportFunction "
-                          "HSE_REQ_CLOSE_CONNECTION "
-                          "is not supported: %s", r->filename);
-        SetLastError(ERROR_INVALID_PARAMETER);
-        return FALSE;
-
-    case 1018: /* HSE_REQ_IS_CONNECTED  Added after ISAPI 4.0 */
-        /* Returns True if client is connected c.f. MSKB Q188346
-         * assuming the identical return mechanism as HSE_REQ_IS_KEEP_CONN
-         */
-        *((LPBOOL) lpvBuffer) = (r->connection->aborted == 0);
-        return TRUE;
-
-    case 1020: /* HSE_REQ_EXTENSION_TRIGGER  Added after ISAPI 4.0 */
-        /*  Undocumented - defined by the Microsoft Jan '00 Platform SDK
-         */
-        if (cid->sconf->LogNotSupported)
-            ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_WARNING, 0, r,
-                          "ISAPI ServerSupportFunction "
-                          "HSE_REQ_EXTENSION_TRIGGER "
-                          "is not supported: %s", r->filename);
-        SetLastError(ERROR_INVALID_PARAMETER);
-        return FALSE;
-
-    default:
-        if (cid->sconf->LogNotSupported)
-            ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_WARNING, 0, r,
-                          "ISAPI ServerSupportFunction (%d) not supported: "
-                          "%s", dwHSERequest, r->filename);
-        SetLastError(ERROR_INVALID_PARAMETER);
-        return FALSE;
-    }
-}
-
-/*
- * Command handler for the ISAPIReadAheadBuffer directive, which is TAKE1
- */
-static const char *isapi_cmd_readaheadbuffer(cmd_parms *cmd, void *config, 
-                                             char *arg)
-{
-    isapi_server_conf *sconf = ap_get_module_config(cmd->server->module_config,
-                                                   &isapi_module);
-    char *scan;
-    long val;
-
-    if (((val = strtol(arg, (char **) &scan, 10)) <= 0) || *scan)
-        return "ISAPIReadAheadBuffer must be a legitimate value.";
-    
-    sconf->ReadAheadBuffer = val;
-    return NULL;
-}
-
-/*
- * Command handler for the ISAPIReadAheadBuffer directive, which is TAKE1
- */
-static const char *isapi_cmd_lognotsupported(cmd_parms *cmd, void *config, 
-                                             char *arg)
-{
-    isapi_server_conf *sconf = ap_get_module_config(cmd->server->module_config,
-                                               &isapi_module);
-
-    if (strcasecmp(arg, "on") == 0) {
-        sconf->LogNotSupported = -1;
-    }
-    else if (strcasecmp(arg, "off") == 0) {
-        sconf->LogNotSupported = 0;
-    }
-    else {
-        return "ISAPILogNotSupported must be on or off";
-    }
-    return NULL;
-}
-
-static const char *isapi_cmd_appendlogtoerrors(cmd_parms *cmd, void *config, 
-                                               char *arg)
-{
-    isapi_server_conf *sconf = ap_get_module_config(cmd->server->module_config,
-                                                   &isapi_module);
-
-    if (strcasecmp(arg, "on") == 0) {
-        sconf->AppendLogToErrors = -1;
-    }
-    else if (strcasecmp(arg, "off") == 0) {
-        sconf->AppendLogToErrors = 0;
-    }
-    else {
-        return "ISAPIAppendLogToErrors must be on or off";
-    }
-    return NULL;
-}
-
-static const char *isapi_cmd_appendlogtoquery(cmd_parms *cmd, void *config, 
-                                              char *arg)
-{
-    isapi_server_conf *sconf = ap_get_module_config(cmd->server->module_config,
-                                                   &isapi_module);
-
-    if (strcasecmp(arg, "on") == 0) {
-        sconf->AppendLogToQuery = -1;
-    }
-    else if (strcasecmp(arg, "off") == 0) {
-        sconf->AppendLogToQuery = 0;
-    }
-    else {
-        return "ISAPIAppendLogToQuery must be on or off";
-    }
-    return NULL;
-}
-
-static const char *isapi_cmd_cachefile(cmd_parms *cmd, void *dummy, 
-                                       const char *filename)
-
-{
-    isapi_server_conf *sconf = ap_get_module_config(cmd->server->module_config, 
-                                                    &isapi_module);
-    isapi_loaded *isa, **newisa;
-    apr_finfo_t tmp;
-    apr_status_t rv;
-    char *fspec;
-    
-    fspec = ap_server_root_relative(cmd->pool, filename);
-    if (!fspec) {
-	ap_log_error(APLOG_MARK, APLOG_WARNING, APR_EBADPATH, cmd->server,
-	             "ISAPI: Invalid module path %s, skipping", filename);
-	return NULL;
-    }
-    if ((rv = apr_stat(&tmp, fspec, APR_FINFO_TYPE, 
-                      cmd->temp_pool)) != APR_SUCCESS) { 
-	ap_log_error(APLOG_MARK, APLOG_WARNING, rv, cmd->server,
-	    "ISAPI: unable to stat(%s), skipping", fspec);
-	return NULL;
-    }
-    if (tmp.filetype != APR_REG) {
-	ap_log_error(APLOG_MARK, APLOG_WARNING|APLOG_NOERRNO, 0, cmd->server,
-	    "ISAPI: %s isn't a regular file, skipping", fspec);
-	return NULL;
-    }
-
-    /* Load the extention as cached (passing sconf) */
-    rv = isapi_load(cmd->pool, sconf, NULL, fspec, &isa); 
-    if (rv != APR_SUCCESS) {
-        ap_log_error(APLOG_MARK, APLOG_WARNING, rv, cmd->server,
-                     "ISAPI: unable to cache %s, skipping", fspec);
-	return NULL;
-    }
-
-    /* Add to cached list of loaded modules */
-    newisa = apr_array_push(sconf->loaded);
-    *newisa = isa;
-    
-    return NULL;
-}
-
-static void isapi_hooks(apr_pool_t *cont)
-{
-    ap_hook_post_config(isapi_post_config, NULL, NULL, APR_HOOK_MIDDLE);
-    ap_hook_handler(isapi_handler, NULL, NULL, APR_HOOK_MIDDLE);
-}
-
-static const command_rec isapi_cmds[] = {
-AP_INIT_TAKE1("ISAPIReadAheadBuffer", isapi_cmd_readaheadbuffer, NULL, RSRC_CONF,
-  "Maximum bytes to initially pass to the ISAPI handler"),
-AP_INIT_TAKE1("ISAPILogNotSupported", isapi_cmd_lognotsupported, NULL, RSRC_CONF,
-  "Log requests not supported by the ISAPI server"),
-AP_INIT_TAKE1("ISAPIAppendLogToErrors", isapi_cmd_appendlogtoerrors, NULL, RSRC_CONF,
-  "Send all Append Log requests to the error log"),
-AP_INIT_TAKE1("ISAPIAppendLogToQuery", isapi_cmd_appendlogtoquery, NULL, RSRC_CONF,
-  "Append Log requests are concatinated to the query args"),
-AP_INIT_ITERATE("ISAPICacheFile", isapi_cmd_cachefile, NULL, RSRC_CONF,
-  "Cache the specified ISAPI extension in-process"),
-{ NULL }
-};
-
-module AP_MODULE_DECLARE_DATA isapi_module = {
-   STANDARD20_MODULE_STUFF,
-   NULL,                        /* create per-dir config */
-   NULL,                        /* merge per-dir config */
-   create_isapi_server_config,  /* server config */
-   NULL,                        /* merge server config */
-   isapi_cmds,                  /* command apr_table_t */
-   isapi_hooks                  /* register hooks */
-};
diff --git a/modules/arch/win32/mod_isapi.dsp b/modules/arch/win32/mod_isapi.dsp
deleted file mode 100644
index bf9fb80..0000000
--- a/modules/arch/win32/mod_isapi.dsp
+++ /dev/null
@@ -1,128 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mod_isapi" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mod_isapi - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "mod_isapi.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "mod_isapi.mak" CFG="mod_isapi - Win32 Release"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "mod_isapi - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mod_isapi - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "mod_isapi - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /O2 /I "../../../include" /I "../../../srclib/apr/include" /I "../../../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Release\mod_isapi" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib ws2_32.lib mswsock.lib /nologo /subsystem:windows /dll /map /machine:I386 /out:"Release/mod_isapi.so" /base:@..\..\..\os\win32\BaseAddr.ref,mod_isapi
-# ADD LINK32 kernel32.lib ws2_32.lib mswsock.lib /nologo /subsystem:windows /dll /map /machine:I386 /out:"Release/mod_isapi.so" /base:@..\..\..\os\win32\BaseAddr.ref,mod_isapi
-
-!ELSEIF  "$(CFG)" == "mod_isapi - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../../include" /I "../../../srclib/apr/include" /I "../../../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Debug\mod_isapi" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib ws2_32.lib mswsock.lib /nologo /subsystem:windows /dll /incremental:no /map /debug /machine:I386 /out:"Debug/mod_isapi.so" /base:@..\..\..\os\win32\BaseAddr.ref,mod_isapi
-# ADD LINK32 kernel32.lib ws2_32.lib mswsock.lib /nologo /subsystem:windows /dll /map /debug /machine:I386 /out:"Debug/mod_isapi.so" /base:@..\..\..\os\win32\BaseAddr.ref,mod_isapi
-
-!ENDIF 
-
-# Begin Target
-
-# Name "mod_isapi - Win32 Release"
-# Name "mod_isapi - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\mod_isapi.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mod_isapi.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\build\win32\win32ver.awk
-
-!IF  "$(CFG)" == "mod_isapi - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\..\build\win32\win32ver.awk
-
-".\mod_isapi.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ../../../build/win32/win32ver.awk mod_isapi  "isapi_module for Apache" ../../../include/ap_release.h > .\mod_isapi.rc
-
-# End Custom Build
-
-!ELSEIF  "$(CFG)" == "mod_isapi - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\..\build\win32\win32ver.awk
-
-".\mod_isapi.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ../../../build/win32/win32ver.awk mod_isapi  "isapi_module for Apache" ../../../include/ap_release.h > .\mod_isapi.rc
-
-# End Custom Build
-
-!ENDIF 
-
-# End Source File
-# End Target
-# End Project
diff --git a/modules/arch/win32/mod_win32.c b/modules/arch/win32/mod_win32.c
deleted file mode 100644
index f51ec06..0000000
--- a/modules/arch/win32/mod_win32.c
+++ /dev/null
@@ -1,552 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-
-#include "apr_strings.h"
-#include "apr_portable.h"
-#include "apr_buckets.h"
-#include "ap_config.h"
-#include "httpd.h"
-#include "http_config.h"
-#include "http_core.h"
-#include "http_protocol.h"
-#include "http_request.h"
-#include "http_log.h"
-#include "util_script.h"
-#include "mod_core.h"
-#include "apr_optional.h"
-#include "apr_lib.h"
-
-#ifdef WIN32
-
-/* 
- * CGI Script stuff for Win32...
- */
-typedef enum { eFileTypeUNKNOWN, eFileTypeBIN, eFileTypeEXE16, eFileTypeEXE32, 
-               eFileTypeSCRIPT } file_type_e;
-typedef enum { INTERPRETER_SOURCE_UNSET, INTERPRETER_SOURCE_REGISTRY_STRICT, 
-               INTERPRETER_SOURCE_REGISTRY, INTERPRETER_SOURCE_SHEBANG 
-             } interpreter_source_e;
-AP_DECLARE(file_type_e) ap_get_win32_interpreter(const request_rec *, 
-                                                 char **interpreter,
-                                                 char **arguments);
-
-module AP_MODULE_DECLARE_DATA win32_module;
-
-typedef struct {
-    /* Where to find interpreter to run scripts */
-    interpreter_source_e script_interpreter_source;
-} win32_dir_conf;
-
-static void *create_win32_dir_config(apr_pool_t *p, char *dir)
-{
-    win32_dir_conf *conf;
-    conf = (win32_dir_conf*)apr_palloc(p, sizeof(win32_dir_conf));
-    conf->script_interpreter_source = INTERPRETER_SOURCE_UNSET;
-    return conf;
-}
-
-static void *merge_win32_dir_configs(apr_pool_t *p, void *basev, void *addv)
-{
-    win32_dir_conf *new;
-    win32_dir_conf *base = (win32_dir_conf *) basev;
-    win32_dir_conf *add = (win32_dir_conf *) addv;
-
-    new = (win32_dir_conf *) apr_pcalloc(p, sizeof(win32_dir_conf));
-    new->script_interpreter_source = (add->script_interpreter_source 
-                                           != INTERPRETER_SOURCE_UNSET)
-                                   ? add->script_interpreter_source 
-                                   : base->script_interpreter_source;
-    return new;
-}
-
-static const char *set_interpreter_source(cmd_parms *cmd, void *dv,
-                                          char *arg)
-{
-    win32_dir_conf *d = (win32_dir_conf *)dv;
-    if (!strcasecmp(arg, "registry")) {
-        d->script_interpreter_source = INTERPRETER_SOURCE_REGISTRY;
-    }
-    else if (!strcasecmp(arg, "registry-strict")) {
-        d->script_interpreter_source = INTERPRETER_SOURCE_REGISTRY_STRICT;
-    }
-    else if (!strcasecmp(arg, "script")) {
-        d->script_interpreter_source = INTERPRETER_SOURCE_SHEBANG;
-    }
-    else {
-        return apr_pstrcat(cmd->temp_pool, "ScriptInterpreterSource \"", arg, 
-                           "\" must be \"registry\", \"registry-strict\" or "
-                           "\"script\"", NULL);
-    }
-    return NULL;
-}
-
-/* Pretty unexciting ... yank a registry value, and explode any envvars
- * that the system has configured (e.g. %SystemRoot%/someapp.exe)
- *
- * XXX: Need Unicode versions for i18n
- */
-static apr_status_t get_win32_registry_default_value(apr_pool_t *p, HKEY hkey,
-                                                     char* relativepath, 
-                                                     char **value)
-{
-    HKEY hkeyOpen;
-    DWORD type;
-    DWORD size = 0;
-    DWORD result = RegOpenKeyEx(hkey, relativepath, 0, 
-                                KEY_QUERY_VALUE, &hkeyOpen);
-    
-    if (result != ERROR_SUCCESS) {
-        return APR_FROM_OS_ERROR(result);
-    }
-
-    /* Read to NULL buffer to determine value size */
-    result = RegQueryValueEx(hkeyOpen, "", 0, &type, NULL, &size);
-    
-   if (result == ERROR_SUCCESS) {
-        if ((size < 2) || (type != REG_SZ && type != REG_EXPAND_SZ)) {
-            result = ERROR_INVALID_PARAMETER;
-        }
-        else {
-            *value = apr_palloc(p, size);
-            /* Read value based on size query above */
-            result = RegQueryValueEx(hkeyOpen, "", 0, &type, *value, &size);
-        }
-    }
-
-    /* TODO: This might look fine, but we need to provide some warning
-     * somewhere that some environment variables may -not- be translated,
-     * seeing as we may have chopped the environment table down somewhat.
-     */
-    if ((result == ERROR_SUCCESS) && (type == REG_EXPAND_SZ)) {
-        char *tmp = *value;
-        size = ExpandEnvironmentStrings(tmp, *value, 0);
-        if (size) {
-            *value = apr_palloc(p, size);
-            size = ExpandEnvironmentStrings(tmp, *value, size);
-        }
-    }
-
-    RegCloseKey(hkeyOpen);
-    return APR_FROM_OS_ERROR(result);
-}
-
-/* Somewhat more exciting ... figure out where the registry has stashed the
- * ExecCGI or Open command - it may be nested one level deep (or more???)
- */
-static char* get_interpreter_from_win32_registry(apr_pool_t *p, 
-                                                 const char* ext,
-                                                 int strict)
-{
-    char execcgi_path[] = "SHELL\\EXECCGI\\COMMAND";
-    char execopen_path[] = "SHELL\\OPEN\\COMMAND";
-    char typeName[MAX_PATH];
-    int cmdOfName = FALSE;
-    HKEY hkeyName;
-    HKEY hkeyType;
-    DWORD type;
-    int size;
-    int result;
-    char *buffer;
-    
-    if (!ext) {
-        return NULL;
-    }
-    /* 
-     * Future optimization:
-     * When the registry is successfully searched, store the strings for
-     * interpreter and arguments in an ext hash to speed up subsequent look-ups
-     */
-
-    /* Open the key associated with the script filetype extension */
-    result = RegOpenKeyEx(HKEY_CLASSES_ROOT, ext, 0, KEY_QUERY_VALUE, 
-                          &hkeyType);
-
-    if (result != ERROR_SUCCESS) {
-        return NULL;
-    }
-
-    /* Retrieve the name of the script filetype extension */
-    size = sizeof(typeName);
-    result = RegQueryValueEx(hkeyType, "", NULL, &type, typeName, &size);
-    
-    if (result == ERROR_SUCCESS && type == REG_SZ && typeName[0]) {
-        /* Open the key associated with the script filetype extension */
-        result = RegOpenKeyEx(HKEY_CLASSES_ROOT, typeName, 0, 
-                              KEY_QUERY_VALUE, &hkeyName);
-
-        if (result == ERROR_SUCCESS) {
-            cmdOfName = TRUE;
-        }
-    }
-
-    /* Open the key for the script command path by:
-     * 
-     *   1) the 'named' filetype key for ExecCGI/Command
-     *   2) the extension's type key for ExecCGI/Command
-     *
-     * and if the strict arg is false, then continue trying:
-     *
-     *   3) the 'named' filetype key for Open/Command
-     *   4) the extension's type key for Open/Command
-     */
-
-    if (cmdOfName) {
-        result = get_win32_registry_default_value(p, hkeyName, 
-                                                  execcgi_path, &buffer);
-    }
-
-    if (!cmdOfName || (result != ERROR_SUCCESS)) {
-        result = get_win32_registry_default_value(p, hkeyType, 
-                                                  execcgi_path, &buffer);
-    }
-
-    if (!strict && cmdOfName && (result != ERROR_SUCCESS)) {
-        result = get_win32_registry_default_value(p, hkeyName, 
-                                                  execopen_path, &buffer);
-    }
-
-    if (!strict && (result != ERROR_SUCCESS)) {
-        result = get_win32_registry_default_value(p, hkeyType, 
-                                                  execopen_path, &buffer);
-    }
-
-    if (cmdOfName) {
-        RegCloseKey(hkeyName);
-    }
-
-    RegCloseKey(hkeyType);
-
-    if (result != ERROR_SUCCESS  || !buffer[0]) {
-        return NULL;
-    }
-
-    return buffer;
-}
-
-
-static apr_array_header_t *split_argv(apr_pool_t *p, const char *interp,
-                                      const char *cgiprg, const char *cgiargs)
-{
-    apr_array_header_t *args = apr_array_make(p, 8, sizeof(char*));
-    char *d = apr_palloc(p, strlen(interp)+1);
-    const char *ch = interp; 
-    const char **arg;
-    int prgtaken = 0;
-    int argtaken = 0;
-    int inquo;
-    int sl;
-
-    while (*ch) {
-        /* Skip on through Deep Space */
-        if (isspace(*ch)) {
-            ++ch; continue;
-        }
-        /* One Arg */
-        if (((*ch == '$') || (*ch == '%')) && (*(ch + 1) == '*')) {
-            const char *cgiarg = cgiargs;
-            argtaken = 1;
-            for (;;) {
-                char *w = ap_getword_nulls(p, &cgiarg, '+');
-                if (!*w) {
-                    break;
-                }
-                ap_unescape_url(w);
-                arg = (const char**)apr_array_push(args);
-                *arg = ap_escape_shell_cmd(p, w);
-            }
-            ch += 2;
-            continue;
-        }
-        if (((*ch == '$') || (*ch == '%')) && (*(ch + 1) == '1')) {
-            /* Todo: Make short name!!! */
-            prgtaken = 1;
-            arg = (const char**)apr_array_push(args);
-            if (*ch == '%') {
-                char *repl = apr_pstrdup(p, cgiprg);
-                *arg = repl;
-                while ((repl = strchr(repl, '/'))) {
-                    *repl++ = '\\';
-                }
-            }
-            else {
-                *arg = cgiprg;
-            }
-            ch += 2;
-            continue;
-        }
-        if ((*ch == '\"') && ((*(ch + 1) == '$') 
-                              || (*(ch + 1) == '%')) && (*(ch + 2) == '1') 
-            && (*(ch + 3) == '\"')) {
-            prgtaken = 1;
-            arg = (const char**)apr_array_push(args);
-            if (*(ch + 1) == '%') {
-                char *repl = apr_pstrdup(p, cgiprg);
-                *arg = repl;
-                while ((repl = strchr(repl, '/'))) {
-                    *repl++ = '\\';
-                }
-            }
-            else {
-                *arg = cgiprg;
-            }
-            ch += 4;
-            continue;
-        }
-        arg = (const char**)apr_array_push(args);
-        *arg = d;
-        inquo = 0;
-        while (*ch) {
-            if (isspace(*ch) && !inquo) {
-                ++ch; break;
-            }
-            /* Get 'em backslashes */
-            for (sl = 0; *ch == '\\'; ++sl) {
-                *d++ = *ch++;
-            }
-            if (sl & 1) {
-                /* last unmatched '\' + '"' sequence is a '"' */
-                if (*ch == '\"') {
-                    *(d - 1) = *ch++;
-                }
-                continue;
-            }
-            if (*ch == '\"') {
-                /* '""' sequence within quotes is a '"' */
-                if (*++ch == '\"' && inquo) {
-                    *d++ = *ch++; continue;
-                }
-                /* Flip quote state */
-                inquo = !inquo;
-                if (isspace(*ch) && !inquo) {
-                    ++ch; break;
-                }
-                /* All other '"'s are Munched */
-                continue;
-            }
-            /* Anything else is, well, something else */
-            *d++ = *ch++;
-        }
-        /* Term that arg, already pushed on args */
-        *d++ = '\0';
-    }
-
-    if (!prgtaken) {
-        arg = (const char**)apr_array_push(args);
-        *arg = cgiprg;
-    }
-
-    if (!argtaken) {
-        const char *cgiarg = cgiargs;
-        for (;;) {
-            char *w = ap_getword_nulls(p, &cgiarg, '+');
-            if (!*w) {
-                break;
-            }
-            ap_unescape_url(w);
-            arg = (const char**)apr_array_push(args);
-            *arg = ap_escape_shell_cmd(p, w);
-        }
-    }
-
-    arg = (const char**)apr_array_push(args);
-    *arg = NULL;
-
-    return args;
-}
-
-
-static apr_status_t ap_cgi_build_command(const char **cmd, const char ***argv,
-                                         request_rec *r, apr_pool_t *p, int replace_cmd)
-{
-    const char *ext = NULL;
-    const char *interpreter = NULL;
-    win32_dir_conf *d;
-    apr_file_t *fh;
-    const char *args = r->args;
-
-    d = (win32_dir_conf *)ap_get_module_config(r->per_dir_config, 
-                                               &win32_module);
-
-    /* Handle the complete file name, we DON'T want to follow suexec, since
-     * an unrooted command is as predictable as shooting craps in Win32.
-     *
-     * Notice that unlike most mime extension parsing, we have to use the
-     * win32 parsing here, therefore the final extension is the only one
-     * we will consider
-     */
-    ext = strrchr(apr_filename_of_pathname(r->filename), '.');
-    
-    /* If the file has an extension and it is not .com and not .exe and
-     * we've been instructed to search the registry, then do so.
-     */
-    if (ext && (!strcasecmp(ext,".exe") || !strcasecmp(ext,".com")
-                || !strcasecmp(ext,".bat") || !strcasecmp(ext,".cmd"))) {
-        interpreter = "";
-    }
-    if (!interpreter) {
-        apr_status_t rv;
-        char buffer[1024];
-        apr_size_t bytes = sizeof(buffer);
-        int i;
-
-        /* Need to peek into the file figure out what it really is... 
-         * ### aught to go back and build a cache for this one of these days.
-         */
-        if (((rv = apr_file_open(&fh, r->filename, APR_READ | APR_BUFFERED,
-                                 APR_OS_DEFAULT, r->pool)) != APR_SUCCESS) 
-            || ((rv = apr_file_read(fh, buffer, &bytes)) != APR_SUCCESS)) {
-            ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
-                          "Failed to read cgi file %s for testing",
-                          r->filename);
-            return rv;
-        }
-        apr_file_close(fh);
-
-        /* Script or executable, that is the question... */
-        if ((buffer[0] == '#') && (buffer[1] == '!')) {
-            /* Assuming file is a script since it starts with a shebang */
-            for (i = 2; i < sizeof(buffer); i++) {
-                if ((buffer[i] == '\r') || (buffer[i] == '\n')) {
-                    buffer[i] = '\0';
-                    break;
-                }
-            }
-            if (i < sizeof(buffer)) {
-                interpreter = buffer + 2;
-                while (isspace(*interpreter)) {
-                    ++interpreter;
-                }
-            }
-        }
-        else {
-            /* Not a script, is it an executable? */
-            IMAGE_DOS_HEADER *hdr = (IMAGE_DOS_HEADER*)buffer;    
-            if ((bytes >= sizeof(IMAGE_DOS_HEADER))
-                && (hdr->e_magic == IMAGE_DOS_SIGNATURE)) {
-                if (hdr->e_lfarlc < 0x40) {
-                    /* Ought to invoke this 16 bit exe by a stub, (cmd /c?) */
-                    interpreter = "";
-                }
-                else {
-                    interpreter = "";
-                }
-            }
-        }
-    }
-    if (!interpreter && ext &&
-        (d->script_interpreter_source == INTERPRETER_SOURCE_REGISTRY
-         || d->script_interpreter_source == INTERPRETER_SOURCE_REGISTRY_STRICT)) {
-         /* Check the registry */
-        int strict = (d->script_interpreter_source 
-                      == INTERPRETER_SOURCE_REGISTRY_STRICT);
-        interpreter = get_interpreter_from_win32_registry(r->pool, ext,
-                                                          strict);
-        if (!interpreter) {
-            ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_INFO, 0, r->server,
-                 strict ? "No ExecCGI verb found for files of type '%s'."
-                        : "No ExecCGI or Open verb found for files of type '%s'.", 
-                 ext);
-        }
-    }
-    if (!interpreter) {
-        ap_log_rerror(APLOG_MARK, APLOG_ERR|APLOG_NOERRNO, 0, r,
-                      "%s is not executable; ensure interpreted scripts have "
-                      "\"#!\" first line", 
-                      r->filename);
-        return APR_EBADF;
-    }
-
-    if (!args || ap_strchr_c(args, '=')) {
-        args = "";
-    }
-
-    *argv = (const char **)(split_argv(p, interpreter, r->filename,
-                                       args)->elts);
-    *cmd = (*argv)[0];
-    return APR_SUCCESS;
-}
-
-APR_DECLARE_OPTIONAL_FN(apr_status_t, ap_cgi_build_command,
-                        (const char **cmd, 
-                         const char ***argv, request_rec *r, apr_pool_t *p, int replace_cmd));
-
-static void register_hooks(apr_pool_t *p)
-{
-    APR_REGISTER_OPTIONAL_FN(ap_cgi_build_command);
-}
-
-static const command_rec win32_cmds[] = {
-AP_INIT_TAKE1("ScriptInterpreterSource", set_interpreter_source, NULL,
-              OR_FILEINFO,
-              "Where to find interpreter to run Win32 scripts "
-              "(Registry or script shebang line)"),
-{ NULL }
-};
-
-module AP_MODULE_DECLARE_DATA win32_module = {
-   STANDARD20_MODULE_STUFF,
-   create_win32_dir_config,     /* create per-dir config */
-   merge_win32_dir_configs,     /* merge per-dir config */
-   NULL,                        /* server config */
-   NULL,                        /* merge server config */
-   win32_cmds,                  /* command apr_table_t */
-   register_hooks               /* register hooks */
-};
-
-#endif
diff --git a/modules/cache/.cvsignore b/modules/cache/.cvsignore
deleted file mode 100644
index aeabff3..0000000
--- a/modules/cache/.cvsignore
+++ /dev/null
@@ -1,16 +0,0 @@
-.deps
-.libs
-*.la
-modules.mk
-Makefile
-*.lo
-*.slo
-*.so
-*.x
-Debug
-Release
-*.plg
-*.aps
-*.dep
-*.mak
-*.rc
diff --git a/modules/cache/.indent.pro b/modules/cache/.indent.pro
deleted file mode 100644
index a9fbe9f..0000000
--- a/modules/cache/.indent.pro
+++ /dev/null
@@ -1,54 +0,0 @@
--i4 -npsl -di0 -br -nce -d0 -cli0 -npcs -nfc1
--TBUFF
--TFILE
--TTRANS
--TUINT4
--T_trans
--Tallow_options_t
--Tapache_sfio
--Tarray_header
--Tbool_int
--Tbuf_area
--Tbuff_struct
--Tbuffy
--Tcmd_how
--Tcmd_parms
--Tcommand_rec
--Tcommand_struct
--Tconn_rec
--Tcore_dir_config
--Tcore_server_config
--Tdir_maker_func
--Tevent
--Tglobals_s
--Thandler_func
--Thandler_rec
--Tjoblist_s
--Tlisten_rec
--Tmerger_func
--Tmode_t
--Tmodule
--Tmodule_struct
--Tmutex
--Tn_long
--Tother_child_rec
--Toverrides_t
--Tparent_score
--Tpid_t
--Tpiped_log
--Tpool
--Trequest_rec
--Trequire_line
--Trlim_t
--Tscoreboard
--Tsemaphore
--Tserver_addr_rec
--Tserver_rec
--Tserver_rec_chain
--Tshort_score
--Ttable
--Ttable_entry
--Tthread
--Tu_wide_int
--Tvtime_t
--Twide_int
diff --git a/modules/cache/Makefile.in b/modules/cache/Makefile.in
deleted file mode 100644
index 167b343..0000000
--- a/modules/cache/Makefile.in
+++ /dev/null
@@ -1,3 +0,0 @@
-
-include $(top_srcdir)/build/special.mk
-
diff --git a/modules/cache/config.m4 b/modules/cache/config.m4
deleted file mode 100644
index 9eabf54..0000000
--- a/modules/cache/config.m4
+++ /dev/null
@@ -1,11 +0,0 @@
-dnl modules enabled in this directory by default
-
-dnl APACHE_MODULE(name, helptext[, objects[, structname[, default[, config]]]])
-
-APACHE_MODPATH_INIT(cache)
-
-APACHE_MODULE(file_cache, File cache, , , no)
-
-APR_ADDTO(LT_LDFLAGS,-export-dynamic)
-
-APACHE_MODPATH_FINISH
diff --git a/modules/cache/mod_file_cache.c b/modules/cache/mod_file_cache.c
deleted file mode 100644
index c1682b5..0000000
--- a/modules/cache/mod_file_cache.c
+++ /dev/null
@@ -1,489 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-/*
- * Author: mod_file_cache by Bill Stoddard <stoddard@apache.org> 
- *         Based on mod_mmap_static by Dean Gaudet <dgaudet@arctic.org>
- *
- * v0.01: initial implementation
- */
-
-/*
-    Documentation:
-
-    Some sites have a set of static files that are really busy, and 
-    change infrequently (or even on a regular schedule). Save time 
-    by caching open handles to these files. This module, unlike 
-    mod_mmap_static, caches open file handles, not file content. 
-    On systems (like Windows) with heavy system call overhead and
-    that have an efficient sendfile implementation, caching file handles
-    offers several advantages over caching content. First, the file system
-    can manage the memory, allowing infrequently hit cached files to
-    be paged out. Second, since caching open handles does not consume
-    significant resources, it will be possible to enable an AutoLoadCache
-    feature where static files are dynamically loaded in the cache 
-    as the server runs. On systems that have file change notification,
-    this module can be enhanced to automatically garbage collect 
-    cached files that change on disk.
-
-    This module should work on Unix systems that have sendfile. Place 
-    cachefile directives into your configuration to direct files to
-    be cached.
-
-	cachefile /path/to/file1
-	cachefile /path/to/file2
-	...
-
-    These files are only cached when the server is restarted, so if you 
-    change the list, or if the files are changed, then you'll need to 
-    restart the server.
-
-    To reiterate that point:  if the files are modified *in place*
-    without restarting the server you may end up serving requests that
-    are completely bogus.  You should update files by unlinking the old
-    copy and putting a new copy in place. 
-
-    There's no such thing as inheriting these files across vhosts or
-    whatever... place the directives in the main server only.
-
-    Known problems:
-
-    Don't use Alias or RewriteRule to move these files around...  unless
-    you feel like paying for an extra stat() on each request.  This is
-    a deficiency in the Apache API that will hopefully be solved some day.
-    The file will be served out of the file handle cache, but there will be
-    an extra stat() that's a waste.
-*/
-
-#include "apr.h"
-
-#if !(APR_HAS_SENDFILE || APR_HAS_MMAP)
-#error mod_file_cache only works on systems with APR_HAS_SENDFILE or APR_HAS_MMAP
-#endif
-
-#include "apr_mmap.h"
-#include "apr_strings.h"
-#include "apr_hash.h"
-#include "apr_buckets.h"
-
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-#if APR_HAVE_SYS_TYPES_H
-#include <sys/types.h>
-#endif
-
-#define CORE_PRIVATE
-
-#include "httpd.h"
-#include "http_config.h"
-#include "http_log.h"
-#include "http_protocol.h"
-#include "http_request.h"
-#include "http_core.h"
-
-module AP_MODULE_DECLARE_DATA file_cache_module;
-
-typedef struct {
-#if APR_HAS_SENDFILE
-    apr_file_t *file;
-#endif
-    const char *filename;
-    apr_finfo_t finfo;
-    int is_mmapped;
-#if APR_HAS_MMAP
-    apr_mmap_t *mm;
-#endif
-    char mtimestr[APR_RFC822_DATE_LEN];
-    char sizestr[21];	/* big enough to hold any 64-bit file size + null */ 
-} a_file;
-
-typedef struct {
-    apr_hash_t *fileht;
-} a_server_config;
-
-
-static void *create_server_config(apr_pool_t *p, server_rec *s)
-{
-    a_server_config *sconf = apr_palloc(p, sizeof(*sconf));
-
-    sconf->fileht = apr_hash_make(p);
-    return sconf;
-}
-
-static apr_status_t cleanup_file_cache(void *sconfv)
-{
-    a_server_config *sconf = sconfv;
-    apr_pool_t *p = apr_hash_pool_get(sconf->fileht);
-    a_file *file;
-    apr_hash_index_t *hi;
-
-    /* Iterate over the file hash table and clean up each entry */
-    for (hi = apr_hash_first(p, sconf->fileht); hi; hi=apr_hash_next(hi)) {
-        apr_hash_this(hi, NULL, NULL, (void **)&file);
-#if APR_HAS_MMAP
-        if (file->is_mmapped) { 
-	    apr_mmap_delete(file->mm);
-        } 
-#endif 
-#if APR_HAS_SENDFILE
-        if (!file->is_mmapped) {
-            apr_file_close(file->file); 
-        }
-#endif
-    }
-    return APR_SUCCESS;
-}
-
-static void cache_the_file(cmd_parms *cmd, const char *filename, int mmap)
-{
-    a_server_config *sconf;
-    a_file *new_file;
-    a_file tmp;
-    apr_file_t *fd = NULL;
-    apr_status_t rc;
-    const char *fspec;
-
-    fspec = ap_server_root_relative(cmd->pool, filename);
-    if (!fspec) {
-        ap_log_error(APLOG_MARK, APLOG_WARNING, APR_EBADPATH, cmd->server,
-                     "mod_file_cache: invalid file path "
-                     "%s, skipping", filename);
-	return;
-    }
-    if ((rc = apr_stat(&tmp.finfo, fspec, APR_FINFO_MIN, 
-                                 cmd->temp_pool)) != APR_SUCCESS) {
-	ap_log_error(APLOG_MARK, APLOG_WARNING, rc, cmd->server,
-	    "mod_file_cache: unable to stat(%s), skipping", fspec);
-	return;
-    }
-    if (tmp.finfo.filetype != APR_REG) {
-	ap_log_error(APLOG_MARK, APLOG_WARNING|APLOG_NOERRNO, 0, cmd->server,
-	    "mod_file_cache: %s isn't a regular file, skipping", fspec);
-	return;
-    }
-    if (tmp.finfo.size > AP_MAX_SENDFILE) {
-	ap_log_error(APLOG_MARK, APLOG_WARNING|APLOG_NOERRNO, 0, cmd->server,
-	    "mod_file_cache: %s is too large to cache, skipping", fspec);
-	return;
-    }
-
-    rc = apr_file_open(&fd, fspec, APR_READ | APR_BINARY | APR_XTHREAD,
-                       APR_OS_DEFAULT, cmd->pool);
-    if (rc != APR_SUCCESS) {
-        ap_log_error(APLOG_MARK, APLOG_WARNING, rc, cmd->server,
-                     "mod_file_cache: unable to open(%s, O_RDONLY), skipping", fspec);
-	return;
-    }
-    apr_file_set_inherit(fd);
-
-    /* WooHoo, we have a file to put in the cache */
-    new_file = apr_pcalloc(cmd->pool, sizeof(a_file));
-    new_file->finfo = tmp.finfo;
-
-#if APR_HAS_MMAP
-    if (mmap) {
-        apr_mmap_t *mm;
-
-        /* MMAPFile directive. MMAP'ing the file
-         * XXX: APR_HAS_LARGE_FILES issue; need to reject this request if
-         * size is greater than MAX(apr_size_t) (perhaps greater than 1M?).
-         */
-        if ((rc = apr_mmap_create(&mm, fd, 0, 
-                                  (apr_size_t)new_file->finfo.size,
-                                  APR_MMAP_READ, cmd->pool)) != APR_SUCCESS) { 
-            apr_file_close(fd);
-            /* We want to cache an apr_mmap_t that's marked as "non-owner"
-             * to pass to each request so that mmap_setaside()'s call to
-             * apr_mmap_dup() will never try to move the apr_mmap_t to a
-             * different pool.  This apr_mmap_t is already going to live
-             * longer than any request, but mmap_setaside() has no way to
-             * know that because it's allocated out of cmd->pool,
-             * which is disjoint from r->pool.
-             */
-            apr_mmap_dup(&new_file->mm, mm, cmd->pool, 0);
-            ap_log_error(APLOG_MARK, APLOG_WARNING, rc, cmd->server,
-                         "mod_file_cache: unable to mmap %s, skipping", filename);
-            return;
-        }
-        apr_file_close(fd);
-        new_file->is_mmapped = TRUE;
-    }
-#endif
-#if APR_HAS_SENDFILE
-    if (!mmap) {
-        /* CacheFile directive. Caching the file handle */
-        new_file->is_mmapped = FALSE;
-        new_file->file = fd;
-    }
-#endif
-
-    new_file->filename = fspec;
-    apr_rfc822_date(new_file->mtimestr, new_file->finfo.mtime);
-    apr_snprintf(new_file->sizestr, sizeof new_file->sizestr, "%" APR_OFF_T_FMT, new_file->finfo.size);
-
-    sconf = ap_get_module_config(cmd->server->module_config, &file_cache_module);
-    apr_hash_set(sconf->fileht, new_file->filename, strlen(new_file->filename), new_file);
-
-    if (apr_hash_count(sconf->fileht) == 1) {
-	/* first one, register the cleanup */
-	apr_pool_cleanup_register(cmd->pool, sconf, cleanup_file_cache, apr_pool_cleanup_null);
-    }
-}
-
-static const char *cachefilehandle(cmd_parms *cmd, void *dummy, const char *filename)
-{
-#if APR_HAS_SENDFILE
-    cache_the_file(cmd, filename, 0);
-#else
-    /* Sendfile not supported by this OS */
-    ap_log_error(APLOG_MARK, APLOG_WARNING|APLOG_NOERRNO, 0, cmd->server,
-                 "mod_file_cache: unable to cache file: %s. Sendfile is not supported on this OS", filename);
-#endif
-    return NULL;
-}
-static const char *cachefilemmap(cmd_parms *cmd, void *dummy, const char *filename) 
-{
-#if APR_HAS_MMAP
-    cache_the_file(cmd, filename, 1);
-#else
-    /* MMAP not supported by this OS */
-    ap_log_error(APLOG_MARK, APLOG_WARNING|APLOG_NOERRNO, 0, cmd->server,
-                 "mod_file_cache: unable to cache file: %s. MMAP is not supported by this OS", filename);
-#endif
-    return NULL;
-}
-
-static int file_cache_post_config(apr_pool_t *p, apr_pool_t *plog,
-                                   apr_pool_t *ptemp, server_rec *s)
-{
-    /* Hummm, anything to do here? */
-    return OK;
-}
-
-/* If it's one of ours, fill in r->finfo now to avoid extra stat()... this is a
- * bit of a kludge, because we really want to run after core_translate runs.
- */
-static int file_cache_xlat(request_rec *r)
-{
-    a_server_config *sconf;
-    a_file *match;
-    int res;
-
-    sconf = ap_get_module_config(r->server->module_config, &file_cache_module);
-
-    /* we only operate when at least one cachefile directive was used */
-    if (!apr_hash_count(sconf->fileht)) {
-	return DECLINED;
-    }
-
-    res = ap_core_translate(r);
-    if (res != OK || !r->filename) {
-	return res;
-    }
-
-    /* search the cache */
-    match = (a_file *) apr_hash_get(sconf->fileht, r->filename, APR_HASH_KEY_STRING);
-    if (match == NULL)
-        return DECLINED;
-
-    /* pass search results to handler */
-    ap_set_module_config(r->request_config, &file_cache_module, match);
-
-    /* shortcircuit the get_path_info() stat() calls and stuff */
-    r->finfo = match->finfo;
-    return OK;
-}
-
-static int mmap_handler(request_rec *r, a_file *file)
-{
-#if APR_HAS_MMAP
-    apr_bucket *b;
-    apr_bucket_brigade *bb = apr_brigade_create(r->pool);
-
-    b = apr_bucket_mmap_create(file->mm, 0, (apr_size_t)file->finfo.size);
-    APR_BRIGADE_INSERT_TAIL(bb, b);
-    b = apr_bucket_eos_create();
-    APR_BRIGADE_INSERT_TAIL(bb, b);
-
-    if (ap_pass_brigade(r->output_filters, bb) != APR_SUCCESS)
-        return HTTP_INTERNAL_SERVER_ERROR;
-#endif
-    return OK;
-}
-
-static int sendfile_handler(request_rec *r, a_file *file)
-{
-#if APR_HAS_SENDFILE
-    apr_bucket *b;
-    apr_bucket_brigade *bb = apr_brigade_create(r->pool);
-
-    b = apr_bucket_file_create(file->file, 0, 
-                               (apr_size_t)file->finfo.size, r->pool);
-    APR_BRIGADE_INSERT_TAIL(bb, b);
-    b = apr_bucket_eos_create();
-    APR_BRIGADE_INSERT_TAIL(bb, b);
-
-    if (ap_pass_brigade(r->output_filters, bb) != APR_SUCCESS)
-        return HTTP_INTERNAL_SERVER_ERROR;
-#endif
-    return OK;
-}
-
-static int file_cache_handler(request_rec *r) 
-{
-    a_file *match;
-    int errstatus;
-    int rc = OK;
-
-    /* XXX: not sure if this is right yet
-     * see comment in http_core.c:default_handler
-     */
-    if (ap_strcmp_match(r->handler, "*/*")) {
-        return DECLINED;
-    }
-
-    /* we don't handle anything but GET */
-    if (r->method_number != M_GET) return DECLINED;
-
-    /* did xlat phase find the file? */
-    match = ap_get_module_config(r->request_config, &file_cache_module);
-
-    if (match == NULL) {
-	return DECLINED;
-    }
-
-    /* note that we would handle GET on this resource */
-    r->allowed |= (AP_METHOD_BIT << M_GET);
-
-    /* This handler has no use for a request body (yet), but we still
-     * need to read and discard it if the client sent one.
-     */
-    if ((errstatus = ap_discard_request_body(r)) != OK)
-        return errstatus;
-
-    ap_update_mtime(r, match->finfo.mtime);
-
-    /* ap_set_last_modified() always converts the file mtime to a string
-     * which is slow.  Accelerate the common case.
-     * ap_set_last_modified(r);
-     */
-    {
-        apr_time_t mod_time;
-        char *datestr;
-
-        mod_time = ap_rationalize_mtime(r, r->mtime);
-        if (mod_time == match->finfo.mtime)
-            datestr = match->mtimestr;
-        else {
-            datestr = apr_palloc(r->pool, APR_RFC822_DATE_LEN);
-            apr_rfc822_date(datestr, mod_time);
-        }
-        apr_table_setn(r->headers_out, "Last-Modified", datestr);
-    }
-
-    ap_set_etag(r);
-    if ((errstatus = ap_meets_conditions(r)) != OK) {
-       return errstatus;
-    }
-
-    /* ap_set_content_length() always converts the same number and never
-     * returns an error.  Accelerate it.
-     */
-    r->clength = match->finfo.size;
-    apr_table_setn(r->headers_out, "Content-Length", match->sizestr);
-
-    /* Call appropriate handler */
-    if (!r->header_only) {    
-        if (match->is_mmapped == TRUE)
-            rc = mmap_handler(r, match);
-        else
-            rc = sendfile_handler(r, match);
-    }
-
-    return rc;
-}
-
-static command_rec file_cache_cmds[] =
-{
-AP_INIT_ITERATE("cachefile", cachefilehandle, NULL, RSRC_CONF,
-     "A space separated list of files to add to the file handle cache at config time"),
-AP_INIT_ITERATE("mmapfile", cachefilemmap, NULL, RSRC_CONF,
-     "A space separated list of files to mmap at config time"),
-    {NULL}
-};
-
-static void register_hooks(apr_pool_t *p)
-{
-    ap_hook_handler(file_cache_handler, NULL, NULL, APR_HOOK_LAST);
-    ap_hook_post_config(file_cache_post_config, NULL, NULL, APR_HOOK_MIDDLE);
-    ap_hook_translate_name(file_cache_xlat, NULL, NULL, APR_HOOK_MIDDLE);
-    /* This trick doesn't work apparently because the translate hooks
-       are single shot. If the core_hook returns OK, then our hook is 
-       not called.
-    ap_hook_translate_name(file_cache_xlat, aszPre, NULL, APR_HOOK_MIDDLE); 
-    */
-
-}
-
-module AP_MODULE_DECLARE_DATA file_cache_module =
-{
-    STANDARD20_MODULE_STUFF,
-    NULL,                     /* create per-directory config structure */
-    NULL,                     /* merge per-directory config structures */
-    create_server_config,     /* create per-server config structure */
-    NULL,                     /* merge per-server config structures */
-    file_cache_cmds,          /* command handlers */
-    register_hooks            /* register hooks */
-};
diff --git a/modules/cache/mod_file_cache.dsp b/modules/cache/mod_file_cache.dsp
deleted file mode 100644
index 67f82da..0000000
--- a/modules/cache/mod_file_cache.dsp
+++ /dev/null
@@ -1,128 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mod_file_cache" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mod_file_cache - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "mod_file_cache.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "mod_file_cache.mak" CFG="mod_file_cache - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "mod_file_cache - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mod_file_cache - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "mod_file_cache - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /O2 /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Release\mod_file_cache" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o /win32 "NUL"
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o /win32 "NUL"
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 /nologo /subsystem:windows /dll /map /machine:I386 /out:"Release/mod_file_cache.so" /base:@..\..\os\win32\BaseAddr.ref,mod_file_cache
-# ADD LINK32 /nologo /subsystem:windows /dll /map /machine:I386 /out:"Release/mod_file_cache.so" /base:@..\..\os\win32\BaseAddr.ref,mod_file_cache
-
-!ELSEIF  "$(CFG)" == "mod_file_cache - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Debug\mod_file_cache" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o /win32 "NUL"
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o /win32 "NUL"
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 /nologo /subsystem:windows /dll /incremental:no /map /debug /machine:I386 /out:"Debug/mod_file_cache.so" /base:@..\..\os\win32\BaseAddr.ref,mod_file_cache
-# ADD LINK32 /nologo /subsystem:windows /dll /incremental:no /map /debug /machine:I386 /out:"Debug/mod_file_cache.so" /base:@..\..\os\win32\BaseAddr.ref,mod_file_cache
-
-!ENDIF 
-
-# Begin Target
-
-# Name "mod_file_cache - Win32 Release"
-# Name "mod_file_cache - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\mod_file_cache.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mod_file_cache.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\build\win32\win32ver.awk
-
-!IF  "$(CFG)" == "mod_file_cache - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_file_cache.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ../../build/win32/win32ver.awk mod_file_cache  "file_cache_module for Apache" ../../include/ap_release.h > .\mod_file_cache.rc
-
-# End Custom Build
-
-!ELSEIF  "$(CFG)" == "mod_file_cache - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_file_cache.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ../../build/win32/win32ver.awk mod_file_cache  "file_cache_module for Apache" ../../include/ap_release.h > .\mod_file_cache.rc
-
-# End Custom Build
-
-!ENDIF 
-
-# End Source File
-# End Target
-# End Project
diff --git a/modules/cache/mod_file_cache.exp b/modules/cache/mod_file_cache.exp
deleted file mode 100644
index 23b092a..0000000
--- a/modules/cache/mod_file_cache.exp
+++ /dev/null
@@ -1 +0,0 @@
-file_cache_module
diff --git a/modules/config5.m4 b/modules/config5.m4
deleted file mode 100644
index 2e08581..0000000
--- a/modules/config5.m4
+++ /dev/null
@@ -1,43 +0,0 @@
-AC_MSG_CHECKING(for extra modules)
-AC_ARG_WITH(module,
-  APACHE_HELP_STRING(--with-module=module-type:module-file,
-                     Enable module-file in the modules/<module-type> directory.),
-  [
-    modtype=`echo $withval | sed -e's/\(.*\):.*/\1/'`
-    pkg=`echo $withval | sed -e's/.*:\(.*\)/\1/'`
-    modfilec=`echo $pkg | sed -e 's;^.*/;;'`
-    modfileo=`echo $pkg | sed -e 's;^.*/;;' -e 's;\.c$;.o;'`
-
-    if test "x$withval" != "xmodules/$modtype/$modfilec"; then
-        cp $pkg modules/$modtype/$modfilec
-    fi
-    module=`echo $pkg | sed -e 's;.*/mod_\(.*\).c;\1;'`
-    objects="mod_$module.lo"
-    libname="mod_$module.la"
-    modpath_current="modules/$modtype"
-    BUILTIN_LIBS="$BUILTIN_LIBS $modpath_current/$libname"
-    if test ! -s "$modpath_current/modules.mk"; then
-      cat >>$modpath_current/modules.mk<<EOF
-$libname: $objects
-	\$(MOD_LINK) $objects
-DISTCLEAN_TARGETS = modules.mk
-static = $libname
-shared =
-EOF
-    else
-      cat >>$modpath_current/modules.mk.tmp<<EOF
-$libname: $objects
-	\$(MOD_LINK) $objects
-EOF
-      cat $modpath_current/modules.mk >> $modpath_current/modules.mk.tmp
-      rm $modpath_current/modules.mk
-      mv $modpath_current/modules.mk.tmp $modpath_current/modules.mk
-      sed -e "s/\(static =.*\)/\1 $libname/" $modpath_current/modules.mk > $modpath_current/modules.mk.tmp
-      rm $modpath_current/modules.mk
-      mv $modpath_current/modules.mk.tmp $modpath_current/modules.mk
-    fi
-    MODLIST="$MODLIST $module"
-  AC_MSG_RESULT(added $withval)
-  ],
-  [ AC_MSG_RESULT(no extra modules) 
-  ])
diff --git a/modules/dav/fs/.cvsignore b/modules/dav/fs/.cvsignore
deleted file mode 100644
index f877eb5..0000000
--- a/modules/dav/fs/.cvsignore
+++ /dev/null
@@ -1,15 +0,0 @@
-.deps
-.libs
-*.la
-modules.mk
-Makefile
-*.lo
-*.slo
-*.so
-Debug
-Release
-*.plg
-*.aps
-*.dep
-*.mak
-*.rc
diff --git a/modules/dav/fs/Makefile.in b/modules/dav/fs/Makefile.in
deleted file mode 100644
index 7c5c149..0000000
--- a/modules/dav/fs/Makefile.in
+++ /dev/null
@@ -1,3 +0,0 @@
-# a modules Makefile has no explicit targets -- they will be defined by
-# whatever modules are enabled. just grab special.mk to deal with this.
-include $(top_srcdir)/build/special.mk
diff --git a/modules/dav/fs/NWGNUmakefile b/modules/dav/fs/NWGNUmakefile
deleted file mode 100644
index eb3c0fc..0000000
--- a/modules/dav/fs/NWGNUmakefile
+++ /dev/null
@@ -1,270 +0,0 @@
-#
-# Declare the sub-directories to be built here
-#
-
-SUBDIRS = \
-	$(EOLIST) 
-
-#
-# Get the 'head' of the build environment.  This includes default targets and
-# paths to tools
-#
-
-include $(AP_WORK)\build\NWGNUhead.inc
-
-#
-# build this level's files
-
-#
-# Make sure all needed macro's are defined
-#
-
-#
-# These directories will be at the beginning of the include list, followed by
-# INCDIRS
-#
-XINCDIRS	+= \
-			$(AP_WORK)/srclib/apr/include \
-			$(AP_WORK)/srclib/include/arch/NetWare \
-			$(AP_WORK)/srclib/apr-util/include \
-			$(AP_WORK)/include \
-			$(AP_WORK)/os/NetWare \
-			$(AP_WORK)/server/mpm/NetWare \
-			$(AP_WORK)/srclib/pcre \
-			$(AP_WORK)/modules/dav/main \
-			$(NWOS) \
-			$(EOLIST)
-
-#
-# These flags will come after CFLAGS
-#
-XCFLAGS		+= \
-			$(EOLIST)
-
-#
-# These defines will come after DEFINES
-#
-XDEFINES	+= \
-			$(EOLIST)
-
-#
-# These flags will be added to the link.opt file
-#
-XLFLAGS		+= \
-			XDCData $(NWOS)\apache.xdc \
-			$(EOLIST)
-
-#
-# These values will be appended to the correct variables based on the value of
-# RELEASE
-#
-ifeq "$(RELEASE)" "debug"
-XINCDIRS	+= \
-			$(EOLIST)
-
-XCFLAGS		+= \
-			$(EOLIST)
-
-XDEFINES	+= \
-			$(EOLIST)
-
-XLFLAGS		+= \
-		   	$(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "noopt"
-XINCDIRS	+= \
-			$(EOLIST)
-
-XCFLAGS		+= \
-			$(EOLIST)
-
-XDEFINES	+= \
-			$(EOLIST)
-
-XLFLAGS		+= \
-		   	$(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "release"
-XINCDIRS	+= \
-			$(EOLIST)
-
-XCFLAGS		+= \
-			$(EOLIST)
-
-XDEFINES	+= \
-			$(EOLIST)
-
-XLFLAGS		+= \
-			$(EOLIST)
-endif
-
-#
-# These are used by the link target if an NLM is being generated
-# This is used by the link 'name' directive to name the nlm.  If left blank
-# TARGET_nlm (see below) will be used.
-#
-NLM_NAME		= modDAVFS
-
-#
-# This is used by the link '-desc ' directive. 
-# If left blank, NLM_NAME will be used.
-#
-NLM_DESCRIPTION	= Apache DAV_FS module
-
-#
-# This is used by the '-threadname' directive.  If left blank,
-# NLM_NAME Thread will be used.
-#
-NLM_THREAD_NAME	= modDAVFS Thread
-
-#
-# If this is specified, it will override VERSION value in 
-# $(AP_WORK)\build\NWGNUenvironment.inc
-#
-NLM_VERSION		= 
-
-#
-# If this is specified, it will override the default of 64K
-#
-NLM_STACK_SIZE	= 65536
- 
-
-#
-# If this is specified it will be used by the link '-entry' directive
-#
-NLM_ENTRY_SYM	= _LibCPrelude
-
-#
-# If this is specified it will be used by the link '-exit' directive
-#
-NLM_EXIT_SYM	= _LibCPostlude
-
-#
-# If this is specified it will be used by the link '-check' directive
-#
-NLM_CHECK_SYM	=
-
-#
-# If this is specified it will be used by the link '-flags' directive
-#
-NLM_FLAGS		=  AUTOUNLOAD, PSEUDOPREEMPTION
-
-#
-# Declare all target files (you must add your files here)
-#
-
-#
-# If there is an NLM target, put it here
-#
-TARGET_nlm = \
-	$(OBJDIR)/moddavfs.nlm \
-	$(EOLIST)
-
-#
-# If there is an LIB target, put it here
-#
-TARGET_lib = \
-	$(EOLIST)
-
-#
-# These are the OBJ files needed to create the NLM target above.
-# Paths must all use the '/' character
-#
-FILES_nlm_objs = \
-	$(OBJDIR)/mod_dav_fs.o \
-	$(OBJDIR)/dbm.o \
-	$(OBJDIR)/lock.o \
-	$(OBJDIR)/repos.o \
-	$(OBJDIR)/libprews.o \
-	$(EOLIST)
-
-#
-# These are the LIB files needed to create the NLM target above.
-# These will be added as a library command in the link.opt file.
-#
-FILES_nlm_libs = \
-   	libcpre.o \
-	$(EOLIST)
-
-#
-# These are the modules that the above NLM target depends on to load.
-# These will be added as a module command in the link.opt file.
-#
-FILES_nlm_modules = \
-	Apache2 \
-	Libc \
-	$(EOLIST)
-
-#
-# If the nlm has a msg file, put it's path here
-#
-FILE_nlm_msg =
- 
-#
-# If the nlm has a hlp file put it's path here
-#
-FILE_nlm_hlp =
-
-#
-# If this is specified, it will override $(NWOS)\copyright.txt.
-#
-FILE_nlm_copyright =
-
-#
-# Any additional imports go here
-#
-FILES_nlm_Ximports = \
-	@libc.imp \
-	@$(APR)/aprlib.imp \
-	@httpd.imp \
-	@ws2nlm.imp \
-	@../main/dav.imp \
-	$(EOLIST)
- 
-#   
-# Any symbols exported to here
-#
-FILES_nlm_exports = \
-	dav_fs_module \
-	$(EOLIST)
-	
-#   
-# These are the OBJ files needed to create the LIB target above.
-# Paths must all use the '/' character
-#
-FILES_lib_objs = \
-		$(EOLIST)
-
-#
-# implement targets and dependancies (leave this section alone)
-#
-
-libs :: $(OBJDIR) $(TARGET_lib)
-
-nlms :: libs $(TARGET_nlm)
-
-#
-# Updated this target to create necessary directories and copy files to the 
-# correct place.  (See $(AP_WORK)\build\NWGNUhead.inc for examples)
-#
-install :: nlms FORCE
-	copy $(OBJDIR)\moddavfs.nlm $(INSTALL)\Apache2\modules
-#
-# Any specialized rules here
-#
-
-$(OBJDIR)/%.o: ../../arch/netware/%.c $(OBJDIR)\cc.opt
-	@echo compiling $<
-	$(CC) $< -o=$(OBJDIR)\$(@F) @$(OBJDIR)\cc.opt
-
-#
-# Include the 'tail' makefile that has targets that depend on variables defined
-# in this makefile
-#
-
-include $(AP_WORK)\build\NWGNUtail.inc
-
-
-	
diff --git a/modules/dav/fs/config6.m4 b/modules/dav/fs/config6.m4
deleted file mode 100644
index 515111c..0000000
--- a/modules/dav/fs/config6.m4
+++ /dev/null
@@ -1,23 +0,0 @@
-dnl modules enabled in this directory by default
-
-APACHE_MODPATH_INIT(dav/fs)
-
-dav_fs_objects="mod_dav_fs.lo dbm.lo lock.lo repos.lo"
-
-if test "x$enable_dav" != "x"; then
-  dav_fs_enable=$enable_dav
-else
-  dav_fs_enable=$dav_enable
-fi
-
-case "$host" in
-  *os2*)
-    # OS/2 DLLs must resolve all symbols at build time
-    # and we need some from main DAV module
-    dav_fs_objects="$dav_fs_objects ../main/mod_dav.la"
-    ;;
-esac
-
-APACHE_MODULE(dav_fs, DAV provider for the filesystem, $dav_fs_objects, , $dav_fs_enable)
-
-APACHE_MODPATH_FINISH
diff --git a/modules/dav/fs/dbm.c b/modules/dav/fs/dbm.c
deleted file mode 100644
index 45cd710..0000000
--- a/modules/dav/fs/dbm.c
+++ /dev/null
@@ -1,786 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-/*
-** DAV extension module for Apache 2.0.*
-**  - Database support using DBM-style databases,
-**    part of the filesystem repository implementation
-*/
-
-/*
-** This implementation uses a SDBM database per file and directory to
-** record the properties. These databases are kept in a subdirectory (of
-** the directory in question or the directory that holds the file in
-** question) named by the macro DAV_FS_STATE_DIR (.DAV). The filename of the
-** database is equivalent to the target filename, and is
-** DAV_FS_STATE_FILE_FOR_DIR (.state_for_dir) for the directory itself.
-*/
-
-#include "apr_strings.h"
-#include "apr_file_io.h"
-
-#include "apr_dbm.h"
-
-#define APR_WANT_BYTEFUNC
-#include "apr_want.h"       /* for ntohs and htons */
-
-#include "mod_dav.h"
-#include "repos.h"
-
-
-struct dav_db {
-    apr_pool_t *pool;
-    apr_dbm_t *file;
-
-    /* when used as a property database: */
-
-    int version;		/* *minor* version of this db */
-
-    dav_buffer ns_table;	/* table of namespace URIs */
-    short ns_count;		/* number of entries in table */
-    int ns_table_dirty;		/* ns_table was modified */
-    apr_hash_t *uri_index;      /* map URIs to (1-based) table indices */
-
-    dav_buffer wb_key;		/* work buffer for dav_gdbm_key */
-
-    apr_datum_t iter;           /* iteration key */
-};
-
-/* -------------------------------------------------------------------------
- *
- * GENERIC DBM ACCESS
- *
- * For the most part, this just uses the APR DBM functions. They are wrapped
- * a bit with some error handling (using the mod_dav error functions).
- */
-
-void dav_dbm_get_statefiles(apr_pool_t *p, const char *fname,
-			    const char **state1, const char **state2)
-{
-    if (fname == NULL)
-	fname = DAV_FS_STATE_FILE_FOR_DIR;
-
-    apr_dbm_get_usednames(p, fname, state1, state2);
-}
-
-static dav_error * dav_fs_dbm_error(dav_db *db, apr_pool_t *p,
-                                    apr_status_t status)
-{
-    int save_errno = errno;
-    int errcode;
-    const char *errstr;
-    dav_error *err;
-    char errbuf[200];
-
-    if (status == APR_SUCCESS)
-        return NULL;
-
-    p = db ? db->pool : p;
-
-    /* There might not be a <db> if we had problems creating it. */
-    if (db == NULL) {
-        errcode = 1;
-        errstr = "Could not open property database.";
-    }
-    else {
-        (void) apr_dbm_geterror(db->file, &errcode, errbuf, sizeof(errbuf));
-        errstr = apr_pstrdup(p, errbuf);
-    }
-
-    err = dav_new_error(p, HTTP_INTERNAL_SERVER_ERROR, errcode, errstr);
-    err->save_errno = save_errno;
-    return err;
-}
-
-/* ensure that our state subdirectory is present */
-/* ### does this belong here or in dav_fs_repos.c ?? */
-void dav_fs_ensure_state_dir(apr_pool_t * p, const char *dirname)
-{
-    const char *pathname = apr_pstrcat(p, dirname, "/" DAV_FS_STATE_DIR, NULL);
-
-    /* ### do we need to deal with the umask? */
-
-    /* just try to make it, ignoring any resulting errors */
-    (void) apr_dir_make(pathname, APR_OS_DEFAULT, p);
-}
-
-/* dav_dbm_open_direct:  Opens a *dbm database specified by path.
- *    ro = boolean read-only flag.
- */
-dav_error * dav_dbm_open_direct(apr_pool_t *p, const char *pathname, int ro,
-				dav_db **pdb)
-{
-    apr_status_t status;
-    apr_dbm_t *file;
-
-    *pdb = NULL;
-
-    if ((status = apr_dbm_open(&file, pathname,
-                               ro ? APR_DBM_READONLY : APR_DBM_RWCREATE, 
-                               APR_OS_DEFAULT, p))
-                != APR_SUCCESS
-        && !ro) {
-        /* ### do something with 'status' */
-
-	/* we can't continue if we couldn't open the file 
-	   and we need to write */
-	return dav_fs_dbm_error(NULL, p, status);
-    }
-
-    /* may be NULL if we tried to open a non-existent db as read-only */
-    if (file != NULL) {
-	/* we have an open database... return it */
-	*pdb = apr_pcalloc(p, sizeof(**pdb));
-	(*pdb)->pool = p;
-	(*pdb)->file = file;
-    }
-
-    return NULL;
-}
-
-static dav_error * dav_dbm_open(apr_pool_t * p, const dav_resource *resource,
-                                int ro, dav_db **pdb)
-{
-    const char *dirpath;
-    const char *fname;
-    const char *pathname;
-
-    /* Get directory and filename for resource */
-    /* ### should test this result value... */
-    (void) dav_fs_dir_file_name(resource, &dirpath, &fname);
-
-    /* If not opening read-only, ensure the state dir exists */
-    if (!ro) {
-	/* ### what are the perf implications of always checking this? */
-        dav_fs_ensure_state_dir(p, dirpath);
-    }
-
-    pathname = apr_pstrcat(p,
-			  dirpath,
-			  "/" DAV_FS_STATE_DIR "/",
-			  fname ? fname : DAV_FS_STATE_FILE_FOR_DIR,
-			  NULL);
-
-    /* ### readers cannot open while a writer has this open; we should
-       ### perform a few retries with random pauses. */
-
-    /* ### do we need to deal with the umask? */
-
-    return dav_dbm_open_direct(p, pathname, ro, pdb);
-}
-
-void dav_dbm_close(dav_db *db)
-{
-    apr_dbm_close(db->file);
-}
-
-dav_error * dav_dbm_fetch(dav_db *db, apr_datum_t key, apr_datum_t *pvalue)
-{
-    apr_status_t status = apr_dbm_fetch(db->file, key, pvalue);
-
-    return dav_fs_dbm_error(db, NULL, status);
-}
-
-dav_error * dav_dbm_store(dav_db *db, apr_datum_t key, apr_datum_t value)
-{
-    apr_status_t status = apr_dbm_store(db->file, key, value);
-
-    return dav_fs_dbm_error(db, NULL, status);
-}
-
-dav_error * dav_dbm_delete(dav_db *db, apr_datum_t key)
-{
-    apr_status_t status = apr_dbm_delete(db->file, key);
-
-    return dav_fs_dbm_error(db, NULL, status);
-}
-
-int dav_dbm_exists(dav_db *db, apr_datum_t key)
-{
-    return apr_dbm_exists(db->file, key);
-}
-
-static dav_error * dav_dbm_firstkey(dav_db *db, apr_datum_t *pkey)
-{
-    apr_status_t status = apr_dbm_firstkey(db->file, pkey);
-
-    return dav_fs_dbm_error(db, NULL, status);
-}
-
-static dav_error * dav_dbm_nextkey(dav_db *db, apr_datum_t *pkey)
-{
-    apr_status_t status = apr_dbm_nextkey(db->file, pkey);
-
-    return dav_fs_dbm_error(db, NULL, status);
-}
-
-void dav_dbm_freedatum(dav_db *db, apr_datum_t data)
-{
-    apr_dbm_freedatum(db->file, data);
-}
-
-/* -------------------------------------------------------------------------
- *
- * PROPERTY DATABASE FUNCTIONS
- */
-
-
-#define DAV_GDBM_NS_KEY		"METADATA"
-#define DAV_GDBM_NS_KEY_LEN	8
-
-typedef struct {
-    unsigned char major;
-#define DAV_DBVSN_MAJOR		4
-    /*
-    ** V4 -- 0.9.9 ..
-    **       Prior versions could have keys or values with invalid
-    **       namespace prefixes as a result of the xmlns="" form not
-    **       resetting the default namespace to be "no namespace". The
-    **       namespace would be set to "" which is invalid; it should
-    **       be set to "no namespace".
-    **
-    ** V3 -- 0.9.8
-    **       Prior versions could have values with invalid namespace
-    **       prefixes due to an incorrect mapping of input to propdb
-    **       namespace indices. Version bumped to obsolete the old
-    **       values.
-    **
-    ** V2 -- 0.9.7
-    **       This introduced the xml:lang value into the property value's
-    **       record in the propdb.
-    **
-    ** V1 -- .. 0.9.6
-    **       Initial version.
-    */
-
-
-    unsigned char minor;
-#define DAV_DBVSN_MINOR		0
-
-    short ns_count;
-
-} dav_propdb_metadata;
-
-struct dav_deadprop_rollback {
-    apr_datum_t key;
-    apr_datum_t value;
-};
-
-struct dav_namespace_map {
-    int *ns_map;
-};
-
-/*
-** Internal function to build a key
-**
-** WARNING: returns a pointer to a "static" buffer holding the key. The
-**          value must be copied or no longer used if this function is
-**          called again.
-*/
-static apr_datum_t dav_build_key(dav_db *db, const dav_prop_name *name)
-{
-    char nsbuf[20];
-    size_t l_ns;
-    size_t l_name = strlen(name->name);
-    apr_datum_t key = { 0 };
-
-    /*
-     * Convert namespace ID to a string. "no namespace" is an empty string,
-     * so the keys will have the form ":name". Otherwise, the keys will
-     * have the form "#:name".
-     */
-    if (*name->ns == '\0') {
-	nsbuf[0] = '\0';
-	l_ns = 0;
-    }
-    else {
-        int ns_id = (int)apr_hash_get(db->uri_index, name->ns,
-                                      APR_HASH_KEY_STRING);
-
-
-        if (ns_id == 0) {
-            /* the namespace was not found(!) */
-            return key;         /* zeroed */
-        }
-
-        l_ns = sprintf(nsbuf, "%d", ns_id - 1);
-    }
-
-    /* assemble: #:name */
-    dav_set_bufsize(db->pool, &db->wb_key, l_ns + 1 + l_name + 1);
-    memcpy(db->wb_key.buf, nsbuf, l_ns);
-    db->wb_key.buf[l_ns] = ':';
-    memcpy(&db->wb_key.buf[l_ns + 1], name->name, l_name + 1);
-
-    /* build the database key */
-    key.dsize = l_ns + 1 + l_name + 1;
-    key.dptr = db->wb_key.buf;
-
-    return key;
-}
-
-static void dav_append_prop(apr_pool_t *pool,
-			    const char *name, const char *value,
-			    apr_text_header *phdr)
-{
-    const char *s;
-    const char *lang = value;
-
-    /* skip past the xml:lang value */
-    value += strlen(lang) + 1;
-
-    if (*value == '\0') {
-	/* the property is an empty value */
-	if (*name == ':') {
-	    /* "no namespace" case */
-	    s = apr_psprintf(pool, "<%s/>" DEBUG_CR, name+1);
-	}
-	else {
-	    s = apr_psprintf(pool, "<ns%s/>" DEBUG_CR, name);
-	}
-    }
-    else if (*lang != '\0') {
-	if (*name == ':') {
-	    /* "no namespace" case */
-	    s = apr_psprintf(pool, "<%s xml:lang=\"%s\">%s</%s>" DEBUG_CR,
-			    name+1, lang, value, name+1);
-	}
-	else {
-	    s = apr_psprintf(pool, "<ns%s xml:lang=\"%s\">%s</ns%s>" DEBUG_CR,
-			    name, lang, value, name);
-	}
-    }
-    else if (*name == ':') {
-	/* "no namespace" case */
-	s = apr_psprintf(pool, "<%s>%s</%s>" DEBUG_CR, name+1, value, name+1);
-    }
-    else {
-	s = apr_psprintf(pool, "<ns%s>%s</ns%s>" DEBUG_CR, name, value, name);
-    }
-
-    apr_text_append(pool, phdr, s);
-}
-
-static dav_error * dav_propdb_open(apr_pool_t *pool,
-                                   const dav_resource *resource, int ro,
-                                   dav_db **pdb)
-{
-    dav_db *db;
-    dav_error *err;
-    apr_datum_t key;
-    apr_datum_t value = { 0 };
-
-    *pdb = NULL;
-
-    /*
-    ** Return if an error occurred, or there is no database.
-    **
-    ** NOTE: db could be NULL if we attempted to open a readonly
-    **       database that doesn't exist. If we require read/write
-    **       access, then a database was created and opened.
-    */
-    if ((err = dav_dbm_open(pool, resource, ro, &db)) != NULL
-        || db == NULL)
-        return err;
-
-    db->uri_index = apr_hash_make(pool);
-
-    key.dptr = DAV_GDBM_NS_KEY;
-    key.dsize = DAV_GDBM_NS_KEY_LEN;
-    if ((err = dav_dbm_fetch(db, key, &value)) != NULL) {
-        /* ### push a higher-level description? */
-        return err;
-    }
-
-    if (value.dptr == NULL) {
-	dav_propdb_metadata m = {
-	    DAV_DBVSN_MAJOR, DAV_DBVSN_MINOR, 0
-	};
-
-        /*
-        ** If there is no METADATA key, then the database may be
-        ** from versions 0.9.0 .. 0.9.4 (which would be incompatible).
-        ** These can be identified by the presence of an NS_TABLE entry.
-        */
-        key.dptr = "NS_TABLE";
-        key.dsize = 8;
-        if (dav_dbm_exists(db, key)) {
-            dav_dbm_close(db);
-
-            /* call it a major version error */
-            return dav_new_error(pool, HTTP_INTERNAL_SERVER_ERROR,
-                                 DAV_ERR_PROP_BAD_MAJOR,
-                                 "Prop database has the wrong major "
-                                 "version number and cannot be used.");
-	}
-
-	/* initialize a new metadata structure */
-	dav_set_bufsize(pool, &db->ns_table, sizeof(m));
-	memcpy(db->ns_table.buf, &m, sizeof(m));
-    }
-    else {
-	dav_propdb_metadata m;
-        int ns;
-        const char *uri;
-
-	dav_set_bufsize(pool, &db->ns_table, value.dsize);
-	memcpy(db->ns_table.buf, value.dptr, value.dsize);
-
-	memcpy(&m, value.dptr, sizeof(m));
-	if (m.major != DAV_DBVSN_MAJOR) {
-	    dav_dbm_close(db);
-
-	    return dav_new_error(pool, HTTP_INTERNAL_SERVER_ERROR,
-				 DAV_ERR_PROP_BAD_MAJOR,
-				 "Prop database has the wrong major "
-				 "version number and cannot be used.");
-	}
-	db->version = m.minor;
-	db->ns_count = ntohs(m.ns_count);
-
-	dav_dbm_freedatum(db, value);
-
-        /* create db->uri_index */
-        for (ns = 0, uri = db->ns_table.buf + sizeof(dav_propdb_metadata);
-             ns++ < db->ns_count;
-             uri += strlen(uri) + 1) {
-
-            /* we must copy the key, in case ns_table.buf moves */
-            apr_hash_set(db->uri_index,
-                         apr_pstrdup(pool, uri), APR_HASH_KEY_STRING,
-                         (void *)ns);
-        }
-    }
-
-    *pdb = db;
-    return NULL;
-}
-
-static void dav_propdb_close(dav_db *db)
-{
-
-    if (db->ns_table_dirty) {
-	dav_propdb_metadata m;
-	apr_datum_t key;
-	apr_datum_t value;
-	dav_error *err;
-
-	key.dptr = DAV_GDBM_NS_KEY;
-	key.dsize = DAV_GDBM_NS_KEY_LEN;
-
-	value.dptr = db->ns_table.buf;
-	value.dsize = db->ns_table.cur_len;
-
-	/* fill in the metadata that we store into the prop db. */
-	m.major = DAV_DBVSN_MAJOR;
-	m.minor = db->version;          /* ### keep current minor version? */
-	m.ns_count = htons(db->ns_count);
-
-	memcpy(db->ns_table.buf, &m, sizeof(m));
-
-	err = dav_dbm_store(db, key, value);
-	/* ### what to do with the error? */
-    }
-
-    dav_dbm_close(db);
-}
-
-static dav_error * dav_propdb_define_namespaces(dav_db *db, dav_xmlns_info *xi)
-{
-    int ns;
-    const char *uri = db->ns_table.buf + sizeof(dav_propdb_metadata);
-
-    /* within the prop values, we use "ns%d" for prefixes... register them */
-    for (ns = 0; ns < db->ns_count; ++ns, uri += strlen(uri) + 1) {
-
-        /* ns_table.buf can move, so copy its value (we want the values to
-           last as long as the provided dav_xmlns_info). */
-        dav_xmlns_add(xi,
-                      apr_psprintf(xi->pool, "ns%d", ns),
-                      apr_pstrdup(xi->pool, uri));
-    }
-
-    return NULL;
-}
-
-static dav_error * dav_propdb_output_value(dav_db *db,
-                                           const dav_prop_name *name,
-                                           dav_xmlns_info *xi,
-                                           apr_text_header *phdr,
-                                           int *found)
-{
-    apr_datum_t key = dav_build_key(db, name);
-    apr_datum_t value;
-    dav_error *err;
-
-    if ((err = dav_dbm_fetch(db, key, &value)) != NULL)
-        return err;
-    if (value.dptr == NULL) {
-        *found = 0;
-        return NULL;
-    }
-    *found = 1;
-
-    dav_append_prop(db->pool, key.dptr, value.dptr, phdr);
-
-    dav_dbm_freedatum(db, value);
-
-    return NULL;
-}
-
-static dav_error * dav_propdb_map_namespaces(
-    dav_db *db,
-    const apr_array_header_t *namespaces,
-    dav_namespace_map **mapping)
-{
-    dav_namespace_map *m = apr_palloc(db->pool, sizeof(*m));
-    int i;
-    int *pmap;
-    const char **puri;
-
-    /*
-    ** Iterate over the provided namespaces. If a namespace already appears
-    ** in our internal map of URI -> ns_id, then store that in the map. If
-    ** we don't know the namespace yet, then add it to the map and to our
-    ** table of known namespaces.
-    */
-    pmap = apr_palloc(db->pool, namespaces->nelts * sizeof(*pmap));
-    for (i = namespaces->nelts, puri = (const char **)namespaces->elts;
-         i-- > 0;
-         ++puri, ++pmap) {
-
-        const char *uri = *puri;
-        apr_size_t uri_len = strlen(uri);
-        int ns_id = (int)apr_hash_get(db->uri_index, uri, uri_len);
-
-        if (ns_id == 0) {
-            dav_check_bufsize(db->pool, &db->ns_table, uri_len + 1);
-            memcpy(db->ns_table.buf + db->ns_table.cur_len, uri, uri_len + 1);
-            db->ns_table.cur_len += uri_len + 1;
-
-            /* copy the uri in case the passed-in namespaces changes in
-               some way. */
-            apr_hash_set(db->uri_index, apr_pstrdup(db->pool, uri), uri_len,
-                         (void *)(db->ns_count + 1));
-
-            db->ns_table_dirty = 1;
-
-            *pmap = db->ns_count++;
-        }
-        else {
-            *pmap = ns_id - 1;
-        }
-    }
-
-    m->ns_map = pmap;
-    *mapping = m;
-    return NULL;
-}
-
-static dav_error * dav_propdb_store(dav_db *db, const dav_prop_name *name,
-                                    const apr_xml_elem *elem,
-                                    dav_namespace_map *mapping)
-{
-    apr_datum_t key = dav_build_key(db, name);
-    apr_datum_t value;
-
-    /* Note: mapping->ns_map was set up in dav_propdb_map_namespaces() */
-
-    /* ### use a db- subpool for these values? clear on exit? */
-
-    /* quote all the values in the element */
-    /* ### be nice to do this without affecting the element itself */
-    /* ### of course, the cast indicates Badness is occurring here */
-    apr_xml_quote_elem(db->pool, (apr_xml_elem *)elem);
-
-    /* generate a text blob for the xml:lang plus the contents */
-    apr_xml_to_text(db->pool, elem, APR_XML_X2T_LANG_INNER, NULL,
-                    mapping->ns_map,
-                    (const char **)&value.dptr, &value.dsize);
-
-    return dav_dbm_store(db, key, value);
-}
-
-static dav_error * dav_propdb_remove(dav_db *db, const dav_prop_name *name)
-{
-    apr_datum_t key = dav_build_key(db, name);
-    return dav_dbm_delete(db, key);
-}
-
-static int dav_propdb_exists(dav_db *db, const dav_prop_name *name)
-{
-    apr_datum_t key = dav_build_key(db, name);
-    return dav_dbm_exists(db, key);
-}
-
-static const char *dav_get_ns_table_uri(dav_db *db, int ns_id)
-{
-    const char *p = db->ns_table.buf + sizeof(dav_propdb_metadata);
-
-    while (ns_id--)
-        p += strlen(p) + 1;
-
-    return p;
-}
-
-static void dav_set_name(dav_db *db, dav_prop_name *pname)
-{
-    const char *s = db->iter.dptr;
-
-    if (s == NULL) {
-        pname->ns = pname->name = NULL;
-    }
-    else if (*s == ':') {
-        pname->ns = "";
-        pname->name = s + 1;
-    }
-    else {
-        int id = atoi(s);
-
-        pname->ns = dav_get_ns_table_uri(db, id);
-        if (s[1] == ':') {
-            pname->name = s + 2;
-        }
-        else {
-            pname->name = ap_strchr_c(s + 2, ':') + 1;
-        }
-    }
-}
-
-static dav_error * dav_propdb_next_name(dav_db *db, dav_prop_name *pname)
-{
-    dav_error *err;
-
-    /* free the previous key. note: if the loop is aborted, then the DBM
-       will toss the key (via pool cleanup) */
-    if (db->iter.dptr != NULL)
-        dav_dbm_freedatum(db, db->iter);
-
-    if ((err = dav_dbm_nextkey(db, &db->iter)) != NULL)
-        return err;
-
-    /* skip past the METADATA key */
-    if (db->iter.dptr != NULL && *db->iter.dptr == 'M')
-        return dav_propdb_next_name(db, pname);
-
-    dav_set_name(db, pname);
-    return NULL;
-}
-
-static dav_error * dav_propdb_first_name(dav_db *db, dav_prop_name *pname)
-{
-    dav_error *err;
-
-    if ((err = dav_dbm_firstkey(db, &db->iter)) != NULL)
-        return err;
-
-    /* skip past the METADATA key */
-    if (db->iter.dptr != NULL && *db->iter.dptr == 'M')
-        return dav_propdb_next_name(db, pname);
-
-    dav_set_name(db, pname);
-    return NULL;
-}
-
-static dav_error * dav_propdb_get_rollback(dav_db *db,
-                                           const dav_prop_name *name,
-                                           dav_deadprop_rollback **prollback)
-{
-    dav_deadprop_rollback *rb = apr_pcalloc(db->pool, sizeof(*rb));
-    apr_datum_t key;
-    apr_datum_t value;
-    dav_error *err;
-
-    key = dav_build_key(db, name);
-    rb->key.dptr = apr_pstrdup(db->pool, key.dptr);
-    rb->key.dsize = key.dsize;
-
-    if ((err = dav_dbm_fetch(db, key, &value)) != NULL)
-        return err;
-    if (value.dptr != NULL) {
-        rb->value.dptr = apr_pmemdup(db->pool, value.dptr, value.dsize);
-        rb->value.dsize = value.dsize;
-    }
-
-    *prollback = rb;
-    return NULL;
-}
-
-static dav_error * dav_propdb_apply_rollback(dav_db *db,
-                                             dav_deadprop_rollback *rollback)
-{
-    if (rollback->value.dptr == NULL) {
-        /* don't fail if the thing isn't really there. */
-        (void) dav_dbm_delete(db, rollback->key);
-        return NULL;
-    }
-
-    return dav_dbm_store(db, rollback->key, rollback->value);
-}
-
-const dav_hooks_db dav_hooks_db_dbm =
-{
-    dav_propdb_open,
-    dav_propdb_close,
-    dav_propdb_define_namespaces,
-    dav_propdb_output_value,
-    dav_propdb_map_namespaces,
-    dav_propdb_store,
-    dav_propdb_remove,
-    dav_propdb_exists,
-    dav_propdb_first_name,
-    dav_propdb_next_name,
-    dav_propdb_get_rollback,
-    dav_propdb_apply_rollback,
-};
diff --git a/modules/dav/fs/lock.c b/modules/dav/fs/lock.c
deleted file mode 100644
index 1185af2..0000000
--- a/modules/dav/fs/lock.c
+++ /dev/null
@@ -1,1553 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-/*
-** DAV filesystem lock implementation
-*/
-
-#include "apr.h"
-#include "apr_strings.h"
-#include "apr_file_io.h"
-#include "apr_uuid.h"
-
-#define APR_WANT_MEMFUNC
-#include "apr_want.h"
-
-#include "httpd.h"
-#include "http_log.h"
-
-#include "mod_dav.h"
-#include "repos.h"
-
-
-/* ---------------------------------------------------------------
-**
-** Lock database primitives
-**
-*/
-
-/*
-** LOCK DATABASES
-** 
-** Lockdiscovery information is stored in the single lock database specified
-** by the DAVLockDB directive.  Information about this db is stored in the
-** global server configuration.
-**
-** KEY
-**
-** The database is keyed by a key_type unsigned char (DAV_TYPE_INODE or
-** DAV_TYPE_FNAME) followed by inode and device number if possible,
-** otherwise full path (in the case of Win32 or lock-null resources).
-**
-** VALUE
-**
-** The value consists of a list of elements.
-**    DIRECT LOCK:     [char      (DAV_LOCK_DIRECT),
-**			char      (dav_lock_scope),
-**			char      (dav_lock_type),
-**			int        depth,
-**			time_t     expires,
-**			apr_uuid_t locktoken,
-**			char[]     owner,
-**                      char[]     auth_user]
-**
-**    INDIRECT LOCK:   [char      (DAV_LOCK_INDIRECT),
-**			apr_uuid_t locktoken,
-**			time_t     expires,
-**			int        key_size,
-**			char[]     key]
-**       The key is to the collection lock that resulted in this indirect lock
-*/
-
-#define DAV_TRUE		1
-#define DAV_FALSE		0
-
-#define DAV_CREATE_LIST		23
-#define DAV_APPEND_LIST		24
-
-/* Stored lock_discovery prefix */
-#define DAV_LOCK_DIRECT		1
-#define DAV_LOCK_INDIRECT	2
-
-#define DAV_TYPE_INODE		10
-#define DAV_TYPE_FNAME		11
-
-
-/* ack. forward declare. */
-static dav_error * dav_fs_remove_locknull_member(apr_pool_t *p,
-						 const char *filename,
-						 dav_buffer *pbuf);
-
-/*
-** Use the opaquelock scheme for locktokens
-*/
-struct dav_locktoken {
-    apr_uuid_t uuid;
-};
-#define dav_compare_locktoken(plt1, plt2) \
-		memcmp(&(plt1)->uuid, &(plt2)->uuid, sizeof((plt1)->uuid))
-
-
-/* #################################################################
-** ### keep these structures (internal) or move fully to dav_lock?
-*/
-
-/*
-** We need to reliably size the fixed-length portion of
-** dav_lock_discovery; best to separate it into another 
-** struct for a convenient sizeof, unless we pack lock_discovery.
-*/
-typedef struct dav_lock_discovery_fixed
-{
-    char scope;
-    char type;
-    int depth;
-    time_t timeout;
-} dav_lock_discovery_fixed;
-
-typedef struct dav_lock_discovery
-{
-    struct dav_lock_discovery_fixed f;
-
-    dav_locktoken *locktoken;
-    const char *owner;		/* owner field from activelock */
-    const char *auth_user;	/* authenticated user who created the lock */
-    struct dav_lock_discovery *next;
-} dav_lock_discovery;
-
-/* Indirect locks represent locks inherited from containing collections.
- * They reference the lock token for the collection the lock is
- * inherited from. A lock provider may also define a key to the
- * inherited lock, for fast datbase lookup. The key is opaque outside
- * the lock provider.
- */
-typedef struct dav_lock_indirect
-{
-    dav_locktoken *locktoken;
-    apr_datum_t key;
-    struct dav_lock_indirect *next;
-    time_t timeout;
-} dav_lock_indirect;
-
-/* ################################################################# */
-
-
-/*
-** Stored direct lock info - full lock_discovery length:  
-** prefix + Fixed length + lock token + 2 strings + 2 nulls (one for each string)
-*/
-#define dav_size_direct(a)	(1 + sizeof(dav_lock_discovery_fixed) \
-				 + sizeof(apr_uuid_t) \
-				 + ((a)->owner ? strlen((a)->owner) : 0) \
-				 + ((a)->auth_user ? strlen((a)->auth_user) : 0) \
-				 + 2)
-
-/* Stored indirect lock info - lock token and apr_datum_t */
-#define dav_size_indirect(a)	(1 + sizeof(apr_uuid_t) \
-				 + sizeof(time_t) \
-				 + sizeof(int) + (a)->key.dsize)
-
-/*
-** The lockdb structure.
-**
-** The <db> field may be NULL, meaning one of two things:
-** 1) That we have not actually opened the underlying database (yet). The
-**    <opened> field should be false.
-** 2) We opened it readonly and it wasn't present.
-**
-** The delayed opening (determined by <opened>) makes creating a lockdb
-** quick, while deferring the underlying I/O until it is actually required.
-**
-** We export the notion of a lockdb, but hide the details of it. Most
-** implementations will use a database of some kind, but it is certainly
-** possible that alternatives could be used.
-*/
-struct dav_lockdb_private
-{
-    request_rec *r;			/* for accessing the uuid state */
-    apr_pool_t *pool;			/* a pool to use */
-    const char *lockdb_path;		/* where is the lock database? */
-
-    int opened;				/* we opened the database */
-    dav_db *db;				/* if non-NULL, the lock database */
-};
-typedef struct
-{
-    dav_lockdb pub;
-    dav_lockdb_private priv;
-} dav_lockdb_combined;
-
-/*
-** The private part of the lock structure.
-*/
-struct dav_lock_private
-{
-    apr_datum_t key;	/* key into the lock database */
-};
-typedef struct
-{
-    dav_lock pub;
-    dav_lock_private priv;
-    dav_locktoken token;
-} dav_lock_combined;
-
-/*
-** This must be forward-declared so the open_lockdb function can use it.
-*/
-extern const dav_hooks_locks dav_hooks_locks_fs;
-
-
-/* internal function for creating locks */
-static dav_lock *dav_fs_alloc_lock(dav_lockdb *lockdb, apr_datum_t key,
-				   const dav_locktoken *locktoken)
-{
-    dav_lock_combined *comb;
-
-    comb = apr_pcalloc(lockdb->info->pool, sizeof(*comb));
-    comb->pub.rectype = DAV_LOCKREC_DIRECT;
-    comb->pub.info = &comb->priv;
-    comb->priv.key = key;
-
-    if (locktoken == NULL) {
-	comb->pub.locktoken = &comb->token;
-        apr_uuid_get(&comb->token.uuid);
-    }
-    else {
-	comb->pub.locktoken = locktoken;
-    }
-
-    return &comb->pub;
-}
-
-/*
-** dav_fs_parse_locktoken
-**
-** Parse an opaquelocktoken URI into a locktoken.
-*/
-static dav_error * dav_fs_parse_locktoken(
-    apr_pool_t *p,
-    const char *char_token,
-    dav_locktoken **locktoken_p)
-{
-    dav_locktoken *locktoken;
-
-    if (ap_strstr_c(char_token, "opaquelocktoken:") != char_token) {
-	return dav_new_error(p,
-			     HTTP_BAD_REQUEST, DAV_ERR_LOCK_UNK_STATE_TOKEN,
-			     "The lock token uses an unknown State-token "
-			     "format and could not be parsed.");
-    }
-    char_token += 16;
-
-    locktoken = apr_pcalloc(p, sizeof(*locktoken));
-    if (apr_uuid_parse(&locktoken->uuid, char_token)) {
-	return dav_new_error(p, HTTP_BAD_REQUEST, DAV_ERR_LOCK_PARSE_TOKEN,
-			     "The opaquelocktoken has an incorrect format "
-			     "and could not be parsed.");
-    }
-    
-    *locktoken_p = locktoken;
-    return NULL;
-}
-
-/*
-** dav_fs_format_locktoken
-**
-** Generate the URI for a locktoken
-*/
-static const char *dav_fs_format_locktoken(
-    apr_pool_t *p,
-    const dav_locktoken *locktoken)
-{
-    char buf[APR_UUID_FORMATTED_LENGTH + 1];
-
-    apr_uuid_format(buf, &locktoken->uuid);
-    return apr_pstrcat(p, "opaquelocktoken:", buf, NULL);
-}
-
-/*
-** dav_fs_compare_locktoken
-**
-** Determine whether two locktokens are the same
-*/
-static int dav_fs_compare_locktoken(
-    const dav_locktoken *lt1,
-    const dav_locktoken *lt2)
-{
-    return dav_compare_locktoken(lt1, lt2);
-}
-
-/*
-** dav_fs_really_open_lockdb:
-**
-** If the database hasn't been opened yet, then open the thing.
-*/
-static dav_error * dav_fs_really_open_lockdb(dav_lockdb *lockdb)
-{
-    dav_error *err;
-
-    if (lockdb->info->opened)
-	return NULL;
-
-    err = dav_dbm_open_direct(lockdb->info->pool,
-			      lockdb->info->lockdb_path,
-			      lockdb->ro,
-			      &lockdb->info->db);
-    if (err != NULL) {
-	return dav_push_error(lockdb->info->pool,
-			      HTTP_INTERNAL_SERVER_ERROR,
-			      DAV_ERR_LOCK_OPENDB,
-			      "Could not open the lock database.",
-			      err);
-    }
-
-    /* all right. it is opened now. */
-    lockdb->info->opened = 1;
-
-    return NULL;
-}
-
-/*
-** dav_fs_open_lockdb:
-**
-** "open" the lock database, as specified in the global server configuration.
-** If force is TRUE, then the database is opened now, rather than lazily.
-**
-** Note that only one can be open read/write.
-*/
-static dav_error * dav_fs_open_lockdb(request_rec *r, int ro, int force,
-				      dav_lockdb **lockdb)
-{
-    dav_lockdb_combined *comb;
-
-    comb = apr_pcalloc(r->pool, sizeof(*comb));
-    comb->pub.hooks = &dav_hooks_locks_fs;
-    comb->pub.ro = ro;
-    comb->pub.info = &comb->priv;
-    comb->priv.r = r;
-    comb->priv.pool = r->pool;
-
-    comb->priv.lockdb_path = dav_get_lockdb_path(r);
-    if (comb->priv.lockdb_path == NULL) {
-	return dav_new_error(r->pool, HTTP_INTERNAL_SERVER_ERROR,
-			     DAV_ERR_LOCK_NO_DB,
-			     "A lock database was not specified with the "
-			     "DAVLockDB directive. One must be specified "
-			     "to use the locking functionality.");
-    }
-
-    /* done initializing. return it. */
-    *lockdb = &comb->pub;
-
-    if (force) {
-	/* ### add a higher-level comment? */
-	return dav_fs_really_open_lockdb(*lockdb);
-    }
-
-    return NULL;
-}
-
-/*
-** dav_fs_close_lockdb:
-**
-** Close it. Duh.
-*/
-static void dav_fs_close_lockdb(dav_lockdb *lockdb)
-{
-    if (lockdb->info->db != NULL)
-	dav_dbm_close(lockdb->info->db);
-}
-
-/*
-** dav_fs_build_fname_key
-**
-** Given a pathname, build a DAV_TYPE_FNAME lock database key.
-*/
-static apr_datum_t dav_fs_build_fname_key(apr_pool_t *p, const char *pathname)
-{
-    apr_datum_t key;
-
-    /* ### does this allocation have a proper lifetime? need to check */
-    /* ### can we use a buffer for this? */
-
-    /* size is TYPE + pathname + null */
-    key.dsize = strlen(pathname) + 2;
-    key.dptr = apr_palloc(p, key.dsize);
-    *key.dptr = DAV_TYPE_FNAME;
-    memcpy(key.dptr + 1, pathname, key.dsize - 1);
-    if (key.dptr[key.dsize - 2] == '/')
-	key.dptr[--key.dsize - 1] = '\0';
-    return key;
-}
-
-/*
-** dav_fs_build_key:  Given a resource, return a apr_datum_t key
-**    to look up lock information for this file.
-**
-**    (inode/dev not supported or file is lock-null):
-**       apr_datum_t->dvalue = full path
-**
-**    (inode/dev supported and file exists ):
-**       apr_datum_t->dvalue = inode, dev
-*/
-static apr_datum_t dav_fs_build_key(apr_pool_t *p,
-                                    const dav_resource *resource)
-{
-    const char *file = dav_fs_pathname(resource);
-    apr_datum_t key;
-    apr_finfo_t finfo;
-    apr_status_t rv;
-
-    /* ### use lstat() ?? */
-    /*
-     * XXX: What for platforms with no IDENT (dev/inode)?
-     */
-    rv = apr_stat(&finfo, file, APR_FINFO_IDENT, p);
-    if ((rv == APR_SUCCESS || rv == APR_INCOMPLETE)
-        && ((finfo.valid & APR_FINFO_IDENT) == APR_FINFO_IDENT))
-    {
-	/* ### can we use a buffer for this? */
-	key.dsize = 1 + sizeof(finfo.inode) + sizeof(finfo.device);
-	key.dptr = apr_palloc(p, key.dsize);
-	*key.dptr = DAV_TYPE_INODE;
-	memcpy(key.dptr + 1, &finfo.inode, sizeof(finfo.inode));
-	memcpy(key.dptr + 1 + sizeof(finfo.inode), &finfo.device,
-	       sizeof(finfo.device));
-
-	return key;
-    }
-
-    return dav_fs_build_fname_key(p, file);
-}
-
-/*
-** dav_fs_lock_expired:  return 1 (true) if the given timeout is in the past
-**    or present (the lock has expired), or 0 (false) if in the future
-**    (the lock has not yet expired).
-*/
-static int dav_fs_lock_expired(time_t expires)
-{
-    return expires != DAV_TIMEOUT_INFINITE && time(NULL) >= expires;
-}
-
-/*
-** dav_fs_save_lock_record:  Saves the lock information specified in the
-**    direct and indirect lock lists about path into the lock database.
-**    If direct and indirect == NULL, the key is removed.
-*/
-static dav_error * dav_fs_save_lock_record(dav_lockdb *lockdb, apr_datum_t key,
-					   dav_lock_discovery *direct,
-					   dav_lock_indirect *indirect)
-{
-    dav_error *err;
-    apr_datum_t val = { 0 };
-    char *ptr;
-    dav_lock_discovery *dp = direct;
-    dav_lock_indirect *ip = indirect;
-
-#if DAV_DEBUG
-    if (lockdb->ro) {
-	return dav_new_error(lockdb->info->pool,
-			     HTTP_INTERNAL_SERVER_ERROR, 0,
-			     "INTERNAL DESIGN ERROR: the lockdb was opened "
-			     "readonly, but an attempt to save locks was "
-			     "performed.");
-    }
-#endif
-
-    if ((err = dav_fs_really_open_lockdb(lockdb)) != NULL) {
-	/* ### add a higher-level error? */
-	return err;
-    }
-
-    /* If nothing to save, delete key */
-    if (dp == NULL && ip == NULL) {
-        /* don't fail if the key is not present */
-        /* ### but what about other errors? */
-	(void) dav_dbm_delete(lockdb->info->db, key);
-        return NULL;
-    }
-		
-    while(dp) {
-	val.dsize += dav_size_direct(dp);
-	dp = dp->next;
-    }
-    while(ip) {
-	val.dsize += dav_size_indirect(ip);
-	ip = ip->next;
-    }
-
-    /* ### can this be apr_palloc() ? */
-    /* ### hmmm.... investigate the use of a buffer here */
-    ptr = val.dptr = apr_pcalloc(lockdb->info->pool, val.dsize);
-    dp  = direct;
-    ip  = indirect;
-
-    while(dp) {
-	*ptr++ = DAV_LOCK_DIRECT;	/* Direct lock - lock_discovery struct follows */
-	memcpy(ptr, dp, sizeof(dp->f));	/* Fixed portion of struct */
-	ptr += sizeof(dp->f);
-        memcpy(ptr, dp->locktoken, sizeof(*dp->locktoken));
-        ptr += sizeof(*dp->locktoken);
-	if (dp->owner == NULL) {
-	    *ptr++ = '\0';
-	}
-	else {
-	    memcpy(ptr, dp->owner, strlen(dp->owner) + 1);	
-	    ptr += strlen(dp->owner) + 1;
-	}
-	if (dp->auth_user == NULL) {
-            *ptr++ = '\0';
-	}
-	else {
-	    memcpy(ptr, dp->auth_user, strlen(dp->auth_user) + 1);
-	    ptr += strlen(dp->auth_user) + 1;
-	}
-
-	dp = dp->next;
-    }
-
-    while(ip) {
-	*ptr++ = DAV_LOCK_INDIRECT;	/* Indirect lock prefix */
-	memcpy(ptr, ip->locktoken, sizeof(*ip->locktoken));	/* Locktoken */
-	ptr += sizeof(*ip->locktoken);
-	memcpy(ptr, &ip->timeout, sizeof(ip->timeout));		/* Expire time */
-	ptr += sizeof(ip->timeout);
-	memcpy(ptr, &ip->key.dsize, sizeof(ip->key.dsize));	/* Size of key */
-	ptr += sizeof(ip->key.dsize);
-	memcpy(ptr, ip->key.dptr, ip->key.dsize);	/* Key data */
-	ptr += ip->key.dsize;
-	ip = ip->next;
-    }
-
-    if ((err = dav_dbm_store(lockdb->info->db, key, val)) != NULL) {
-	/* ### more details? add an error_id? */
-	return dav_push_error(lockdb->info->pool,
-			      HTTP_INTERNAL_SERVER_ERROR,
-			      DAV_ERR_LOCK_SAVE_LOCK,
-			      "Could not save lock information.",
-			      err);
-    }
-
-    return NULL;
-}
-
-/*
-** dav_load_lock_record:  Reads lock information about key from lock db;
-**    creates linked lists of the direct and indirect locks.
-**
-**    If add_method = DAV_APPEND_LIST, the result will be appended to the
-**    head of the direct and indirect lists supplied.
-**
-**    Passive lock removal:  If lock has timed out, it will not be returned.
-**    ### How much "logging" does RFC 2518 require?
-*/
-static dav_error * dav_fs_load_lock_record(dav_lockdb *lockdb, apr_datum_t key,
-					   int add_method,
-					   dav_lock_discovery **direct,
-					   dav_lock_indirect **indirect)
-{
-    apr_pool_t *p = lockdb->info->pool;
-    dav_error *err;
-    apr_size_t offset = 0;
-    int need_save = DAV_FALSE;
-    apr_datum_t val = { 0 };
-    dav_lock_discovery *dp;
-    dav_lock_indirect *ip;
-    dav_buffer buf = { 0 };
-
-    if (add_method != DAV_APPEND_LIST) {
-	*direct = NULL;
-	*indirect = NULL;
-    }
-
-    if ((err = dav_fs_really_open_lockdb(lockdb)) != NULL) {
-	/* ### add a higher-level error? */
-	return err;
-    }
-
-    /*
-    ** If we opened readonly and the db wasn't there, then there are no
-    ** locks for this resource. Just exit.
-    */
-    if (lockdb->info->db == NULL)
-	return NULL;
-
-    if ((err = dav_dbm_fetch(lockdb->info->db, key, &val)) != NULL)
-        return err;
-	
-    if (!val.dsize)
-	return NULL;
-
-    while (offset < val.dsize) {
-	switch (*(val.dptr + offset++)) {
-	case DAV_LOCK_DIRECT:
-	    /* Create and fill a dav_lock_discovery structure */
-
-	    dp = apr_pcalloc(p, sizeof(*dp));
-	    memcpy(dp, val.dptr + offset, sizeof(dp->f));
-	    offset += sizeof(dp->f);
-            dp->locktoken = apr_palloc(p, sizeof(*dp->locktoken));
-            memcpy(dp->locktoken, val.dptr + offset, sizeof(*dp->locktoken));
-            offset += sizeof(*dp->locktoken);
-	    if (*(val.dptr + offset) == '\0') {
-		++offset;
-	    }
-	    else {
-		dp->owner = apr_pstrdup(p, val.dptr + offset);
-		offset += strlen(dp->owner) + 1;
-	    }
-
-            if (*(val.dptr + offset) == '\0') {
-                ++offset;
-            } 
-            else {
-                dp->auth_user = apr_pstrdup(p, val.dptr + offset);
-                offset += strlen(dp->auth_user) + 1;
-            }
-
-	    if (!dav_fs_lock_expired(dp->f.timeout)) {
-		dp->next = *direct;
-		*direct = dp;
-	    }
-	    else {
-		need_save = DAV_TRUE;
-
-		/* Remove timed-out locknull fm .locknull list */
-		if (*key.dptr == DAV_TYPE_FNAME) {
-		    const char *fname = key.dptr + 1;
-		    apr_finfo_t finfo;
-                    apr_status_t rv;
-
-		    /* if we don't see the file, then it's a locknull */
-                    rv = apr_lstat(&finfo, fname, APR_FINFO_MIN, p);
-		    if (rv != APR_SUCCESS && rv != APR_INCOMPLETE) {
-			if ((err = dav_fs_remove_locknull_member(p, fname, &buf)) != NULL) {
-                            /* ### push a higher-level description? */
-                            return err;
-                        }
-		    }
-		}
-	    }
-	    break;
-
-	case DAV_LOCK_INDIRECT:
-	    /* Create and fill a dav_lock_indirect structure */
-
-	    ip = apr_pcalloc(p, sizeof(*ip));
-            ip->locktoken = apr_palloc(p, sizeof(*ip->locktoken));
-	    memcpy(ip->locktoken, val.dptr + offset, sizeof(*ip->locktoken));
-	    offset += sizeof(*ip->locktoken);
-	    memcpy(&ip->timeout, val.dptr + offset, sizeof(ip->timeout));
-	    offset += sizeof(ip->timeout);
-	    ip->key.dsize = *((int *) (val.dptr + offset));	/* length of datum */
-	    offset += sizeof(ip->key.dsize);
-	    ip->key.dptr = apr_palloc(p, ip->key.dsize); 
-	    memcpy(ip->key.dptr, val.dptr + offset, ip->key.dsize);
-	    offset += ip->key.dsize;
-
-	    if (!dav_fs_lock_expired(ip->timeout)) {
-		ip->next = *indirect;
-		*indirect = ip;
-	    }
-	    else {
-		need_save = DAV_TRUE;
-		/* A locknull resource will never be locked indirectly */
-	    }
-
-	    break;
-
-	default:
-	    dav_dbm_freedatum(lockdb->info->db, val);
-
-	    /* ### should use a computed_desc and insert corrupt token data */
-	    --offset;
-	    return dav_new_error(p,
-				 HTTP_INTERNAL_SERVER_ERROR,
-				 DAV_ERR_LOCK_CORRUPT_DB,
-				 apr_psprintf(p,
-					     "The lock database was found to "
-					     "be corrupt. offset %"
-                                             APR_SIZE_T_FMT ", c=%02x",
-					     offset, val.dptr[offset]));
-	}
-    }
-
-    dav_dbm_freedatum(lockdb->info->db, val);
-
-    /* Clean up this record if we found expired locks */
-    /*
-    ** ### shouldn't do this if we've been opened READONLY. elide the
-    ** ### timed-out locks from the response, but don't save that info back
-    */
-    if (need_save == DAV_TRUE) {
-	return dav_fs_save_lock_record(lockdb, key, *direct, *indirect);
-    }
-
-    return NULL;
-}
-
-/* resolve <indirect>, returning <*direct> */
-static dav_error * dav_fs_resolve(dav_lockdb *lockdb,
-				  dav_lock_indirect *indirect,
-				  dav_lock_discovery **direct,
-				  dav_lock_discovery **ref_dp,
-				  dav_lock_indirect **ref_ip)
-{
-    dav_error *err;
-    dav_lock_discovery *dir;
-    dav_lock_indirect *ind;
-	
-    if ((err = dav_fs_load_lock_record(lockdb, indirect->key,
-				       DAV_CREATE_LIST,
-				       &dir, &ind)) != NULL) {
-	/* ### insert a higher-level description? */
-	return err;
-    }
-    if (ref_dp != NULL) {
-	*ref_dp = dir;
-	*ref_ip = ind;
-    }
-		
-    for (; dir != NULL; dir = dir->next) {
-	if (!dav_compare_locktoken(indirect->locktoken, dir->locktoken)) {
-	    *direct = dir;
-	    return NULL;
-	}
-    }
-
-    /* No match found (but we should have found one!) */
-
-    /* ### use a different description and/or error ID? */
-    return dav_new_error(lockdb->info->pool,
-			 HTTP_INTERNAL_SERVER_ERROR,
-			 DAV_ERR_LOCK_CORRUPT_DB,
-			 "The lock database was found to be corrupt. "
-			 "An indirect lock's direct lock could not "
-			 "be found.");
-}
-
-/* ---------------------------------------------------------------
-**
-** Property-related lock functions
-**
-*/
-
-/*
-** dav_fs_get_supportedlock:  Returns a static string for all supportedlock
-**    properties. I think we save more returning a static string than
-**    constructing it every time, though it might look cleaner.
-*/
-static const char *dav_fs_get_supportedlock(const dav_resource *resource)
-{
-    static const char supported[] = DEBUG_CR
-	"<D:lockentry>" DEBUG_CR
-	"<D:lockscope><D:exclusive/></D:lockscope>" DEBUG_CR
-	"<D:locktype><D:write/></D:locktype>" DEBUG_CR
-	"</D:lockentry>" DEBUG_CR
-	"<D:lockentry>" DEBUG_CR
-	"<D:lockscope><D:shared/></D:lockscope>" DEBUG_CR
-	"<D:locktype><D:write/></D:locktype>" DEBUG_CR
-	"</D:lockentry>" DEBUG_CR;
-
-    return supported;
-}
-
-/* ---------------------------------------------------------------
-**
-** General lock functions
-**
-*/
-
-/* ---------------------------------------------------------------
-**
-** Functions dealing with lock-null resources
-**
-*/
-
-/*
-** dav_fs_load_locknull_list:  Returns a dav_buffer dump of the locknull file
-**    for the given directory.
-*/
-static dav_error * dav_fs_load_locknull_list(apr_pool_t *p, const char *dirpath,
-					     dav_buffer *pbuf) 
-{
-    apr_finfo_t finfo;
-    apr_file_t *file = NULL;
-    dav_error *err = NULL;
-    apr_size_t amt;
-    apr_status_t rv;
-
-    dav_buffer_init(p, pbuf, dirpath);
-
-    if (pbuf->buf[pbuf->cur_len - 1] == '/')
-	pbuf->buf[--pbuf->cur_len] = '\0';
-
-    dav_buffer_place(p, pbuf, "/" DAV_FS_STATE_DIR "/" DAV_FS_LOCK_NULL_FILE);
-
-    /* reset this in case we leave w/o reading into the buffer */
-    pbuf->cur_len = 0;
-
-    if (apr_file_open(&file, pbuf->buf, APR_READ | APR_BINARY, APR_OS_DEFAULT,
-                p) != APR_SUCCESS) {
-	return NULL;
-    }
-
-    rv = apr_file_info_get(&finfo, APR_FINFO_SIZE, file);
-    if (rv != APR_SUCCESS) {
-	err = dav_new_error(p, HTTP_INTERNAL_SERVER_ERROR, 0,
-			    apr_psprintf(p,
-					"Opened but could not stat file %s",
-					pbuf->buf));
-	goto loaderror;
-    }
-
-    if (finfo.size != (apr_size_t)finfo.size) {
-	err = dav_new_error(p, HTTP_INTERNAL_SERVER_ERROR, 0,
-			    apr_psprintf(p,
-					"Opened but rejected huge file %s",
-					pbuf->buf));
-	goto loaderror;
-    }
-
-    amt = (apr_size_t)finfo.size;
-    dav_set_bufsize(p, pbuf, amt);
-    if (apr_file_read(file, pbuf->buf, &amt) != APR_SUCCESS
-        || amt != finfo.size) {
-	err = dav_new_error(p, HTTP_INTERNAL_SERVER_ERROR, 0,
-			    apr_psprintf(p,
-					"Failure reading locknull file "
-					"for %s", dirpath));
-
-	/* just in case the caller disregards the returned error */
-	pbuf->cur_len = 0;
-	goto loaderror;
-    }
-
-  loaderror:
-    apr_file_close(file);
-    return err;
-}
-
-/*
-** dav_fs_save_locknull_list:  Saves contents of pbuf into the
-**    locknull file for dirpath.
-*/
-static dav_error * dav_fs_save_locknull_list(apr_pool_t *p, const char *dirpath,
-					     dav_buffer *pbuf)
-{
-    const char *pathname;
-    apr_file_t *file = NULL;
-    dav_error *err = NULL;
-    apr_size_t amt;
-
-    if (pbuf->buf == NULL)
-	return NULL;
-
-    dav_fs_ensure_state_dir(p, dirpath);
-    pathname = apr_pstrcat(p,
-			  dirpath,
-			  dirpath[strlen(dirpath) - 1] == '/' ? "" : "/",
-			  DAV_FS_STATE_DIR "/" DAV_FS_LOCK_NULL_FILE,
-			  NULL);
-
-    if (pbuf->cur_len == 0) {
-	/* delete the file if cur_len == 0 */
-	if (apr_file_remove(pathname, p) != 0) {
-	    return dav_new_error(p, HTTP_INTERNAL_SERVER_ERROR, 0,
-				 apr_psprintf(p,
-					     "Error removing %s", pathname));
-	}
-	return NULL;
-    }
-
-    if (apr_file_open(&file, pathname,
-                APR_WRITE | APR_CREATE | APR_TRUNCATE | APR_BINARY,
-                APR_OS_DEFAULT, p) != APR_SUCCESS) {
-	return dav_new_error(p, HTTP_INTERNAL_SERVER_ERROR, 0,
-			     apr_psprintf(p,
-					 "Error opening %s for writing",
-					 pathname));
-    }
-
-    amt = pbuf->cur_len;
-    if (apr_file_write(file, pbuf->buf, &amt) != APR_SUCCESS
-        || amt != pbuf->cur_len) {
-	err = dav_new_error(p, HTTP_INTERNAL_SERVER_ERROR, 0,
-			    apr_psprintf(p,
-					"Error writing %" APR_SIZE_T_FMT 
-                                        " bytes to %s",
-					pbuf->cur_len, pathname));
-    }
-
-    apr_file_close(file);
-    return err;
-}
-
-/*
-** dav_fs_remove_locknull_member:  Removes filename from the locknull list
-**    for directory path.
-*/
-static dav_error * dav_fs_remove_locknull_member(apr_pool_t *p,
-                                                 const char *filename,
-						 dav_buffer *pbuf)
-{
-    dav_error *err;
-    apr_size_t len;
-    apr_size_t scanlen;
-    char *scan;
-    const char *scanend;
-    char *dirpath = apr_pstrdup(p, filename);
-    char *fname = strrchr(dirpath, '/');
-    int dirty = 0;
-
-    if (fname != NULL)
-	*fname++ = '\0';
-    else
-	fname = dirpath;
-    len = strlen(fname) + 1;
-
-    if ((err = dav_fs_load_locknull_list(p, dirpath, pbuf)) != NULL) {
-	/* ### add a higher level description? */
-	return err;
-    }
-
-    for (scan = pbuf->buf, scanend = scan + pbuf->cur_len;
-	 scan < scanend;
-	 scan += scanlen) {
-	scanlen = strlen(scan) + 1;
-	if (len == scanlen && memcmp(fname, scan, scanlen) == 0) {
-	    pbuf->cur_len -= scanlen;
-	    memmove(scan, scan + scanlen, scanend - (scan + scanlen));
-	    dirty = 1;
-	    break;
-	}
-    }
-
-    if (dirty) {
-	if ((err = dav_fs_save_locknull_list(p, dirpath, pbuf)) != NULL) {
-	    /* ### add a higher level description? */
-	    return err;
-	}
-    }
-
-    return NULL;
-}
-
-/* Note: used by dav_fs_repos.c */
-dav_error * dav_fs_get_locknull_members(
-    const dav_resource *resource,
-    dav_buffer *pbuf)
-{
-    const char *dirpath;
-
-    /* ### should test this result value... */
-    (void) dav_fs_dir_file_name(resource, &dirpath, NULL);
-    return dav_fs_load_locknull_list(dav_fs_pool(resource), dirpath, pbuf);
-}
-
-/* ### fold into append_lock? */
-/* ### take an optional buf parameter? */
-static dav_error * dav_fs_add_locknull_state(
-    dav_lockdb *lockdb,
-    const dav_resource *resource)
-{
-    dav_buffer buf = { 0 };
-    apr_pool_t *p = lockdb->info->pool;
-    const char *dirpath;
-    const char *fname;
-    dav_error *err;
-
-    /* ### should test this result value... */
-    (void) dav_fs_dir_file_name(resource, &dirpath, &fname);
-
-    if ((err = dav_fs_load_locknull_list(p, dirpath, &buf)) != NULL) {
-        return dav_push_error(p, HTTP_INTERNAL_SERVER_ERROR, 0,
-			      "Could not load .locknull file.", err);
-    }
-
-    dav_buffer_append(p, &buf, fname);
-    buf.cur_len++;	/* we want the null-term here */
-
-    if ((err = dav_fs_save_locknull_list(p, dirpath, &buf)) != NULL) {
-        return dav_push_error(p, HTTP_INTERNAL_SERVER_ERROR, 0,
-			      "Could not save .locknull file.", err);
-    }
-
-    return NULL;
-}
-
-/*
-** dav_fs_remove_locknull_state:  Given a request, check to see if r->filename
-**    is/was a lock-null resource.  If so, return it to an existant state.
-**
-**    ### this function is broken... it doesn't check!
-**
-**    In this implementation, this involves two things:
-**    (a) remove it from the list in the appropriate .DAV/locknull file
-**    (b) on *nix, convert the key from a filename to an inode.
-*/
-static dav_error * dav_fs_remove_locknull_state(
-    dav_lockdb *lockdb,
-    const dav_resource *resource)
-{
-    dav_buffer buf = { 0 };
-    dav_error *err;
-    apr_pool_t *p = lockdb->info->pool;
-    const char *pathname = dav_fs_pathname(resource);
-
-    if ((err = dav_fs_remove_locknull_member(p, pathname, &buf)) != NULL) {
-	/* ### add a higher-level description? */
-	return err;
-    }
-
-    {
-	dav_lock_discovery *ld;
-	dav_lock_indirect  *id;
-	apr_datum_t key;
-
-	/*
-	** Fetch the lock(s) that made the resource lock-null. Remove
-	** them under the filename key. Obtain the new inode key, and
-	** save the same lock information under it.
-	*/
-	key = dav_fs_build_fname_key(p, pathname);
-	if ((err = dav_fs_load_lock_record(lockdb, key, DAV_CREATE_LIST,
-					   &ld, &id)) != NULL) {
-	    /* ### insert a higher-level error description */
-	    return err;
-	}
-
-	if ((err = dav_fs_save_lock_record(lockdb, key, NULL, NULL)) != NULL) {
-	    /* ### insert a higher-level error description */
-	    return err;
-        }
-
-	key = dav_fs_build_key(p, resource);
-	if ((err = dav_fs_save_lock_record(lockdb, key, ld, id)) != NULL) {
-	    /* ### insert a higher-level error description */
-	    return err;
-        }
-    }
-
-    return NULL;
-}
-
-static dav_error * dav_fs_create_lock(dav_lockdb *lockdb,
-				      const dav_resource *resource,
-				      dav_lock **lock)
-{
-    apr_datum_t key;
-
-    key = dav_fs_build_key(lockdb->info->pool, resource);
-
-    *lock = dav_fs_alloc_lock(lockdb,
-			      key,
-			      NULL);
-
-    (*lock)->is_locknull = !resource->exists;
-
-    return NULL;
-}
-
-static dav_error * dav_fs_get_locks(dav_lockdb *lockdb,
-				    const dav_resource *resource,
-				    int calltype,
-				    dav_lock **locks)
-{
-    apr_pool_t *p = lockdb->info->pool;
-    apr_datum_t key;
-    dav_error *err;
-    dav_lock *lock = NULL;
-    dav_lock *newlock;
-    dav_lock_discovery *dp;
-    dav_lock_indirect *ip;
-
-#if DAV_DEBUG
-    if (calltype == DAV_GETLOCKS_COMPLETE) {
-	return dav_new_error(lockdb->info->pool,
-			     HTTP_INTERNAL_SERVER_ERROR, 0,
-			     "INTERNAL DESIGN ERROR: DAV_GETLOCKS_COMPLETE "
-			     "is not yet supported");
-    }
-#endif
-
-    key = dav_fs_build_key(p, resource);
-    if ((err = dav_fs_load_lock_record(lockdb, key, DAV_CREATE_LIST,
-				       &dp, &ip)) != NULL) {
-	/* ### push a higher-level desc? */
-	return err;
-    }
-
-    /* copy all direct locks to the result list */
-    for (; dp != NULL; dp = dp->next) {
-	newlock = dav_fs_alloc_lock(lockdb, key, dp->locktoken);
-	newlock->is_locknull = !resource->exists;
-	newlock->scope = dp->f.scope;
-	newlock->type = dp->f.type;
-	newlock->depth = dp->f.depth;
-	newlock->timeout = dp->f.timeout;
-	newlock->owner = dp->owner;
-        newlock->auth_user = dp->auth_user;
-
-	/* hook into the result list */
-	newlock->next = lock;
-	lock = newlock;
-    }
-
-    /* copy all the indirect locks to the result list. resolve as needed. */
-    for (; ip != NULL; ip = ip->next) {
-	newlock = dav_fs_alloc_lock(lockdb, ip->key, ip->locktoken);
-	newlock->is_locknull = !resource->exists;
-
-	if (calltype == DAV_GETLOCKS_RESOLVED) {
-	    if ((err = dav_fs_resolve(lockdb, ip, &dp, NULL, NULL)) != NULL) {
-		/* ### push a higher-level desc? */
-		return err;
-	    }
-
-	    newlock->scope = dp->f.scope;
-	    newlock->type = dp->f.type;
-	    newlock->depth = dp->f.depth;
-	    newlock->timeout = dp->f.timeout;
-	    newlock->owner = dp->owner;
-            newlock->auth_user = dp->auth_user;
-	}
-	else {
-	    /* DAV_GETLOCKS_PARTIAL */
-	    newlock->rectype = DAV_LOCKREC_INDIRECT_PARTIAL;
-	}
-
-	/* hook into the result list */
-	newlock->next = lock;
-	lock = newlock;
-    }
-
-    *locks = lock;
-    return NULL;
-}
-
-static dav_error * dav_fs_find_lock(dav_lockdb *lockdb,
-				    const dav_resource *resource,
-				    const dav_locktoken *locktoken,
-				    int partial_ok,
-				    dav_lock **lock)
-{
-    dav_error *err;
-    apr_datum_t key;
-    dav_lock_discovery *dp;
-    dav_lock_indirect *ip;
-
-    *lock = NULL;
-
-    key = dav_fs_build_key(lockdb->info->pool, resource);
-    if ((err = dav_fs_load_lock_record(lockdb, key, DAV_CREATE_LIST,
-				       &dp, &ip)) != NULL) {
-	/* ### push a higher-level desc? */
-	return err;
-    }
-
-    for (; dp != NULL; dp = dp->next) {
-	if (!dav_compare_locktoken(locktoken, dp->locktoken)) {
-	    *lock = dav_fs_alloc_lock(lockdb, key, locktoken);
-	    (*lock)->is_locknull = !resource->exists;
-	    (*lock)->scope = dp->f.scope;
-	    (*lock)->type = dp->f.type;
-	    (*lock)->depth = dp->f.depth;
-	    (*lock)->timeout = dp->f.timeout;
-	    (*lock)->owner = dp->owner;
-            (*lock)->auth_user = dp->auth_user;
-	    return NULL;
-	}
-    }
-
-    for (; ip != NULL; ip = ip->next) {
-	if (!dav_compare_locktoken(locktoken, ip->locktoken)) {
-	    *lock = dav_fs_alloc_lock(lockdb, ip->key, locktoken);
-	    (*lock)->is_locknull = !resource->exists;
-
-	    /* ### nobody uses the resolving right now! */
-	    if (partial_ok) {
-		(*lock)->rectype = DAV_LOCKREC_INDIRECT_PARTIAL;
-	    }
-	    else {
-		(*lock)->rectype = DAV_LOCKREC_INDIRECT;
-		if ((err = dav_fs_resolve(lockdb, ip, &dp,
-					  NULL, NULL)) != NULL) {
-		    /* ### push a higher-level desc? */
-		    return err;
-		}
-		(*lock)->scope = dp->f.scope;
-		(*lock)->type = dp->f.type;
-		(*lock)->depth = dp->f.depth;
-		(*lock)->timeout = dp->f.timeout;
-		(*lock)->owner = dp->owner;
-                (*lock)->auth_user = dp->auth_user;
-	    }
-	    return NULL;
-	}
-    }
-
-    return NULL;
-}
-
-static dav_error * dav_fs_has_locks(dav_lockdb *lockdb,
-				    const dav_resource *resource,
-				    int *locks_present)
-{
-    dav_error *err;
-    apr_datum_t key;
-
-    *locks_present = 0;
-
-    if ((err = dav_fs_really_open_lockdb(lockdb)) != NULL) {
-	/* ### insert a higher-level error description */
-	return err;
-    }
-
-    /*
-    ** If we opened readonly and the db wasn't there, then there are no
-    ** locks for this resource. Just exit.
-    */
-    if (lockdb->info->db == NULL)
-	return NULL;
-
-    key = dav_fs_build_key(lockdb->info->pool, resource);
-
-    *locks_present = dav_dbm_exists(lockdb->info->db, key);
-
-    return NULL;
-}
-
-static dav_error * dav_fs_append_locks(dav_lockdb *lockdb,
-				       const dav_resource *resource,
-				       int make_indirect,
-				       const dav_lock *lock)
-{
-    apr_pool_t *p = lockdb->info->pool;
-    dav_error *err;
-    dav_lock_indirect *ip;
-    dav_lock_discovery *dp;
-    apr_datum_t key;
-
-    key = dav_fs_build_key(lockdb->info->pool, resource);
-    if ((err = dav_fs_load_lock_record(lockdb, key, 0, &dp, &ip)) != NULL) {
-	/* ### maybe add in a higher-level description */
-	return err;
-    }
-
-    /*
-    ** ### when we store the lock more directly, we need to update
-    ** ### lock->rectype and lock->is_locknull
-    */
-
-    if (make_indirect) {
-	for (; lock != NULL; lock = lock->next) {
-
-	    /* ### this works for any <lock> rectype */
-	    dav_lock_indirect *newi = apr_pcalloc(p, sizeof(*newi));
-
-	    /* ### shut off the const warning for now */
-	    newi->locktoken = (dav_locktoken *)lock->locktoken;
-	    newi->timeout   = lock->timeout;
-	    newi->key       = lock->info->key;
-	    newi->next      = ip;
-	    ip              = newi;
-	}
-    }
-    else {
-	for (; lock != NULL; lock = lock->next) {
-	    /* create and link in the right kind of lock */
-
-	    if (lock->rectype == DAV_LOCKREC_DIRECT) {
-		dav_lock_discovery *newd = apr_pcalloc(p, sizeof(*newd));
-
-		newd->f.scope = lock->scope;
-		newd->f.type = lock->type;
-		newd->f.depth = lock->depth;
-		newd->f.timeout = lock->timeout;
-		/* ### shut off the const warning for now */
-		newd->locktoken = (dav_locktoken *)lock->locktoken;
-		newd->owner = lock->owner;
-                newd->auth_user = lock->auth_user;
-		newd->next = dp;
-		dp = newd;
-	    }
-	    else {
-		/* DAV_LOCKREC_INDIRECT(_PARTIAL) */
-
-		dav_lock_indirect *newi = apr_pcalloc(p, sizeof(*newi));
-
-		/* ### shut off the const warning for now */
-		newi->locktoken = (dav_locktoken *)lock->locktoken;
-		newi->key       = lock->info->key;
-		newi->next      = ip;
-		ip              = newi;
-	    }
-	}
-    }
-
-    if ((err = dav_fs_save_lock_record(lockdb, key, dp, ip)) != NULL) {
-	/* ### maybe add a higher-level description */
-	return err;
-    }
-
-    /* we have a special list for recording locknull resources */
-    /* ### ack! this can add two copies to the locknull list */
-    if (!resource->exists
-	&& (err = dav_fs_add_locknull_state(lockdb, resource)) != NULL) {
-	/* ### maybe add a higher-level description */
-	return err;
-    }
-
-    return NULL;
-}
-
-static dav_error * dav_fs_remove_lock(dav_lockdb *lockdb,
-				      const dav_resource *resource,
-				      const dav_locktoken *locktoken)
-{
-    dav_error *err;
-    dav_buffer buf = { 0 };
-    dav_lock_discovery *dh = NULL;
-    dav_lock_indirect *ih = NULL;
-    apr_datum_t key;
-
-    key = dav_fs_build_key(lockdb->info->pool, resource);
-
-    if (locktoken != NULL) {
-	dav_lock_discovery *dp;
-	dav_lock_discovery *dprev = NULL;
-	dav_lock_indirect *ip;
-	dav_lock_indirect *iprev = NULL;
-
-	if ((err = dav_fs_load_lock_record(lockdb, key, DAV_CREATE_LIST,
-					   &dh, &ih)) != NULL) {
-	    /* ### maybe add a higher-level description */
-	    return err;
-	}
-
-	for (dp = dh; dp != NULL; dp = dp->next) {
-	    if (dav_compare_locktoken(locktoken, dp->locktoken) == 0) {
-		if (dprev)
-		    dprev->next = dp->next;
-		else
-		    dh = dh->next;
-	    }
-	    dprev = dp;
-	}
-
-	for (ip = ih; ip != NULL; ip = ip->next) {
-	    if (dav_compare_locktoken(locktoken, ip->locktoken) == 0) {
-		if (iprev)
-		    iprev->next = ip->next;
-		else
-		    ih = ih->next;
-	    }
-	    iprev = ip;
-	}
-
-    }
-
-    /* save the modified locks, or remove all locks (dh=ih=NULL). */
-    if ((err = dav_fs_save_lock_record(lockdb, key, dh, ih)) != NULL) {
-        /* ### maybe add a higher-level description */
-        return err;
-    }
-
-    /*
-    ** If this resource is a locknull resource AND no more locks exist,
-    ** then remove the locknull member.
-    **
-    ** Note: remove_locknull_state() attempts to convert a locknull member
-    **       to a real member. In this case, all locks are gone, so the
-    **       locknull resource returns to the null state (ie. doesn't exist),
-    **       so there is no need to update the lockdb (and it won't find
-    **       any because a precondition is that none exist).
-    */
-    if (!resource->exists && dh == NULL && ih == NULL
-	&& (err = dav_fs_remove_locknull_member(lockdb->info->pool,
-						dav_fs_pathname(resource),
-						&buf)) != NULL) {
-	/* ### maybe add a higher-level description */
-	return err;
-    }
-
-    return NULL;
-}
-
-static int dav_fs_do_refresh(dav_lock_discovery *dp,
-			     const dav_locktoken_list *ltl,
-			     time_t new_time)
-{
-    int dirty = 0;
-
-    for (; ltl != NULL; ltl = ltl->next) {
-	if (dav_compare_locktoken(dp->locktoken, ltl->locktoken) == 0)
-	{
-	    dp->f.timeout = new_time;
-	    dirty = 1;
-	}
-    }
-
-    return dirty;
-}
-
-static dav_error * dav_fs_refresh_locks(dav_lockdb *lockdb,
-					const dav_resource *resource,
-					const dav_locktoken_list *ltl,
-					time_t new_time,
-					dav_lock **locks)
-{
-    dav_error *err;
-    apr_datum_t key;
-    dav_lock_discovery *dp;
-    dav_lock_discovery *dp_scan;
-    dav_lock_indirect *ip;
-    int dirty = 0;
-    dav_lock *newlock;
-
-    *locks = NULL;
-
-    key = dav_fs_build_key(lockdb->info->pool, resource);
-    if ((err = dav_fs_load_lock_record(lockdb, key, DAV_CREATE_LIST,
-				       &dp, &ip)) != NULL) {
-	/* ### maybe add in a higher-level description */
-	return err;
-    }
-
-    /* ### we should be refreshing direct AND (resolved) indirect locks! */
-
-    /* refresh all of the direct locks on this resource */
-    for (dp_scan = dp; dp_scan != NULL; dp_scan = dp_scan->next) {
-	if (dav_fs_do_refresh(dp_scan, ltl, new_time)) {
-	    /* the lock was refreshed. return the lock. */
-	    newlock = dav_fs_alloc_lock(lockdb, key, dp_scan->locktoken);
-	    newlock->is_locknull = !resource->exists;
-	    newlock->scope = dp_scan->f.scope;
-	    newlock->type = dp_scan->f.type;
-	    newlock->depth = dp_scan->f.depth;
-	    newlock->timeout = dp_scan->f.timeout;
-	    newlock->owner = dp_scan->owner;
-            newlock->auth_user = dp_scan->auth_user;
-
-	    newlock->next = *locks;
-	    *locks = newlock;
-
-	    dirty = 1;
-	}
-    }
-
-    /* if we refreshed any locks, then save them back. */
-    if (dirty
-	&& (err = dav_fs_save_lock_record(lockdb, key, dp, ip)) != NULL) {
-	/* ### maybe add in a higher-level description */
-	return err;
-    }
-
-    /* for each indirect lock, find its direct lock and refresh it. */
-    for (; ip != NULL; ip = ip->next) {
-	dav_lock_discovery *ref_dp;
-	dav_lock_indirect *ref_ip;
-
-	if ((err = dav_fs_resolve(lockdb, ip, &dp_scan,
-				  &ref_dp, &ref_ip)) != NULL) {
-	    /* ### push a higher-level desc? */
-	    return err;
-	}
-	if (dav_fs_do_refresh(dp_scan, ltl, new_time)) {
-	    /* the lock was refreshed. return the lock. */
-	    newlock = dav_fs_alloc_lock(lockdb, ip->key, dp->locktoken);
-	    newlock->is_locknull = !resource->exists;
-	    newlock->scope = dp->f.scope;
-	    newlock->type = dp->f.type;
-	    newlock->depth = dp->f.depth;
-	    newlock->timeout = dp->f.timeout;
-	    newlock->owner = dp->owner;
-            newlock->auth_user = dp_scan->auth_user;
-
-	    newlock->next = *locks;
-	    *locks = newlock;
-
-	    /* save the (resolved) direct lock back */
-	    if ((err = dav_fs_save_lock_record(lockdb, ip->key, ref_dp,
-					       ref_ip)) != NULL) {
-		/* ### push a higher-level desc? */
-		return err;
-	    }
-	}
-    }
-
-    return NULL;
-}
-
-
-const dav_hooks_locks dav_hooks_locks_fs =
-{
-    dav_fs_get_supportedlock,
-    dav_fs_parse_locktoken,
-    dav_fs_format_locktoken,
-    dav_fs_compare_locktoken,
-    dav_fs_open_lockdb,
-    dav_fs_close_lockdb,
-    dav_fs_remove_locknull_state,
-    dav_fs_create_lock,
-    dav_fs_get_locks,
-    dav_fs_find_lock,
-    dav_fs_has_locks,
-    dav_fs_append_locks,
-    dav_fs_remove_lock,
-    dav_fs_refresh_locks,
-    NULL, /* get_resource */
-};
diff --git a/modules/dav/fs/mod_dav_fs.c b/modules/dav/fs/mod_dav_fs.c
deleted file mode 100644
index 3f5c885..0000000
--- a/modules/dav/fs/mod_dav_fs.c
+++ /dev/null
@@ -1,146 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-#include "httpd.h"
-#include "http_config.h"
-#include "apr_strings.h"
-
-#include "mod_dav.h"
-#include "repos.h"
-
-/* per-server configuration */
-typedef struct {
-    const char *lockdb_path;
-
-} dav_fs_server_conf;
-
-extern module AP_MODULE_DECLARE_DATA dav_fs_module;
-
-const char *dav_get_lockdb_path(const request_rec *r)
-{
-    dav_fs_server_conf *conf;
-
-    conf = ap_get_module_config(r->server->module_config, &dav_fs_module);
-    return conf->lockdb_path;
-}
-
-static void *dav_fs_create_server_config(apr_pool_t *p, server_rec *s)
-{
-    return apr_pcalloc(p, sizeof(dav_fs_server_conf));
-}
-
-static void *dav_fs_merge_server_config(apr_pool_t *p,
-                                        void *base, void *overrides)
-{
-    dav_fs_server_conf *parent = base;
-    dav_fs_server_conf *child = overrides;
-    dav_fs_server_conf *newconf;
-
-    newconf = apr_pcalloc(p, sizeof(*newconf));
-
-    newconf->lockdb_path =
-        child->lockdb_path ? child->lockdb_path : parent->lockdb_path;
-
-    return newconf;
-}
-
-/*
- * Command handler for the DAVLockDB directive, which is TAKE1
- */
-static const char *dav_fs_cmd_davlockdb(cmd_parms *cmd, void *config,
-                                        const char *arg1)
-{
-    dav_fs_server_conf *conf;
-    conf = ap_get_module_config(cmd->server->module_config,
-                                &dav_fs_module);
-    conf->lockdb_path = ap_server_root_relative(cmd->pool, arg1);
-
-    if (!conf->lockdb_path) {
-        return apr_pstrcat(cmd->pool, "Invalid DAVLockDB path ",
-                           arg1, NULL);
-    }
-
-    return NULL;
-}
-
-static const command_rec dav_fs_cmds[] =
-{
-    /* per server */
-    AP_INIT_TAKE1("DAVLockDB", dav_fs_cmd_davlockdb, NULL, RSRC_CONF,
-                  "specify a lock database"),
-
-    { NULL }
-};
-
-static void register_hooks(apr_pool_t *p)
-{
-    dav_hook_gather_propsets(dav_fs_gather_propsets, NULL, NULL,
-                             APR_HOOK_MIDDLE);
-    dav_hook_find_liveprop(dav_fs_find_liveprop, NULL, NULL, APR_HOOK_MIDDLE);
-    dav_hook_insert_all_liveprops(dav_fs_insert_all_liveprops, NULL, NULL,
-                                  APR_HOOK_MIDDLE);
-
-    dav_fs_register(p);
-}
-
-module AP_MODULE_DECLARE_DATA dav_fs_module =
-{
-    STANDARD20_MODULE_STUFF,
-    NULL,			/* dir config creater */
-    NULL,			/* dir merger --- default is to override */
-    dav_fs_create_server_config,	/* server config */
-    dav_fs_merge_server_config,	/* merge server config */
-    dav_fs_cmds,		/* command table */
-    register_hooks,             /* register hooks */
-};
diff --git a/modules/dav/fs/mod_dav_fs.dsp b/modules/dav/fs/mod_dav_fs.dsp
deleted file mode 100644
index 6be786b..0000000
--- a/modules/dav/fs/mod_dav_fs.dsp
+++ /dev/null
@@ -1,152 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mod_dav_fs" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mod_dav_fs - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "mod_dav_fs.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "mod_dav_fs.mak" CFG="mod_dav_fs - Win32 Release"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "mod_dav_fs - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mod_dav_fs - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "mod_dav_fs - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /O2 /I "../../../include" /I "../../../srclib/apr/include" /I "../../../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Release\mod_dav_fs" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib ws2_32.lib mswsock.lib /nologo /subsystem:windows /dll /map /machine:I386 /out:"Release/mod_dav_fs.so" /base:@..\..\..\os\win32\BaseAddr.ref,mod_dav_fs
-# ADD LINK32 kernel32.lib ws2_32.lib mswsock.lib /nologo /subsystem:windows /dll /map /machine:I386 /out:"Release/mod_dav_fs.so" /base:@..\..\..\os\win32\BaseAddr.ref,mod_dav_fs
-
-!ELSEIF  "$(CFG)" == "mod_dav_fs - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../../include" /I "../../../srclib/apr/include" /I "../../../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Debug\mod_dav_fs" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib ws2_32.lib mswsock.lib /nologo /subsystem:windows /dll /incremental:no /map /debug /machine:I386 /out:"Debug/mod_dav_fs.so" /base:@..\..\..\os\win32\BaseAddr.ref,mod_dav_fs
-# ADD LINK32 kernel32.lib ws2_32.lib mswsock.lib /nologo /subsystem:windows /dll /incremental:no /map /debug /machine:I386 /out:"Debug/mod_dav_fs.so" /base:@..\..\..\os\win32\BaseAddr.ref,mod_dav_fs
-
-!ENDIF 
-
-# Begin Target
-
-# Name "mod_dav_fs - Win32 Release"
-# Name "mod_dav_fs - Win32 Debug"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90"
-# Begin Source File
-
-SOURCE=.\dbm.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\lock.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mod_dav_fs.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\repos.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd"
-# Begin Source File
-
-SOURCE=.\repos.h
-# End Source File
-# End Group
-# Begin Source File
-
-SOURCE=.\mod_dav_fs.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\build\win32\win32ver.awk
-
-!IF  "$(CFG)" == "mod_dav_fs - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\..\build\win32\win32ver.awk
-
-".\mod_dav_fs.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ../../../build/win32/win32ver.awk mod_dav_fs  "dav_fs_module for Apache" ../../../include/ap_release.h > .\mod_dav_fs.rc
-
-# End Custom Build
-
-!ELSEIF  "$(CFG)" == "mod_dav_fs - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\..\build\win32\win32ver.awk
-
-".\mod_dav_fs.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ../../../build/win32/win32ver.awk mod_dav_fs  "dav_fs_module for Apache" ../../../include/ap_release.h > .\mod_dav_fs.rc
-
-# End Custom Build
-
-!ENDIF 
-
-# End Source File
-# End Target
-# End Project
diff --git a/modules/dav/fs/repos.c b/modules/dav/fs/repos.c
deleted file mode 100644
index 4588911..0000000
--- a/modules/dav/fs/repos.c
+++ /dev/null
@@ -1,2162 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-/*
-** DAV filesystem-based repository provider
-*/
-
-#include "apr.h"
-#include "apr_file_io.h"
-#include "apr_strings.h"
-
-#if APR_HAVE_STDIO_H
-#include <stdio.h>              /* for sprintf() */
-#endif
-
-#include "httpd.h"
-#include "http_log.h"
-#include "http_protocol.h"	/* for ap_set_* (in dav_fs_set_headers) */
-#include "http_request.h"       /* for ap_update_mtime() */
-
-#include "mod_dav.h"
-#include "repos.h"
-
-
-/* to assist in debugging mod_dav's GET handling */
-#define DEBUG_GET_HANDLER       0
-
-#define DAV_FS_COPY_BLOCKSIZE	16384	/* copy 16k at a time */
-
-/* context needed to identify a resource */
-struct dav_resource_private {
-    apr_pool_t *pool;        /* memory storage pool associated with request */
-    const char *pathname;   /* full pathname to resource */
-    apr_finfo_t finfo;       /* filesystem info */
-};
-
-/* private context for doing a filesystem walk */
-typedef struct {
-    /* the input walk parameters */
-    const dav_walk_params *params;
-
-    /* reused as we walk */
-    dav_walk_resource wres;
-
-    dav_resource res1;
-    dav_resource_private info1;
-    dav_buffer path1;
-    dav_buffer uri_buf;
-
-    /* MOVE/COPY need a secondary path */
-    dav_resource res2;
-    dav_resource_private info2;
-    dav_buffer path2;
-
-    dav_buffer locknull_buf;
-
-} dav_fs_walker_context;
-
-typedef struct {
-    int is_move;                /* is this a MOVE? */
-    dav_buffer work_buf;        /* handy buffer for copymove_file() */
-
-    /* CALLBACK: this is a secondary resource managed specially for us */
-    const dav_resource *res_dst;
-
-    /* copied from dav_walk_params (they are invariant across the walk) */
-    const dav_resource *root;
-    apr_pool_t *pool;
-
-} dav_fs_copymove_walk_ctx;
-
-/* an internal WALKTYPE to walk hidden files (the .DAV directory) */
-#define DAV_WALKTYPE_HIDDEN	0x4000
-
-/* an internal WALKTYPE to call collections (again) after their contents */
-#define DAV_WALKTYPE_POSTFIX    0x8000
-
-#define DAV_CALLTYPE_POSTFIX    1000    /* a private call type */
-
-
-/* pull this in from the other source file */
-extern const dav_hooks_locks dav_hooks_locks_fs;
-
-/* forward-declare the hook structures */
-static const dav_hooks_repository dav_hooks_repository_fs;
-static const dav_hooks_liveprop dav_hooks_liveprop_fs;
-
-/*
-** The namespace URIs that we use. This list and the enumeration must
-** stay in sync.
-*/
-static const char * const dav_fs_namespace_uris[] =
-{
-    "DAV:",
-    "http://apache.org/dav/props/",
-
-    NULL	/* sentinel */
-};
-enum {
-    DAV_FS_URI_DAV,		/* the DAV: namespace URI */
-    DAV_FS_URI_MYPROPS		/* the namespace URI for our custom props */
-};
-
-/*
-** Does this platform support an executable flag?
-**
-** ### need a way to portably abstract this query
-*/
-#ifndef WIN32
-#define DAV_FS_HAS_EXECUTABLE
-#endif
-
-/*
-** The single property that we define (in the DAV_FS_URI_MYPROPS namespace)
-*/
-#define DAV_PROPID_FS_executable        1
-
-static const dav_liveprop_spec dav_fs_props[] =
-{
-    /* standard DAV properties */
-    {
-        DAV_FS_URI_DAV,
-        "creationdate",
-        DAV_PROPID_creationdate,
-        0
-    },
-    {
-        DAV_FS_URI_DAV,
-        "getcontentlength",
-        DAV_PROPID_getcontentlength,
-        0
-    },
-    {
-        DAV_FS_URI_DAV,
-        "getetag",
-        DAV_PROPID_getetag,
-        0
-    },
-    {
-        DAV_FS_URI_DAV,
-        "getlastmodified",
-        DAV_PROPID_getlastmodified,
-        0
-    },
-
-    /* our custom properties */
-    {
-        DAV_FS_URI_MYPROPS,
-        "executable",
-        DAV_PROPID_FS_executable,
-        0       /* handled special in dav_fs_is_writable */
-    },
-
-    { 0 }	/* sentinel */
-};
-
-static const dav_liveprop_group dav_fs_liveprop_group =
-{
-    dav_fs_props,
-    dav_fs_namespace_uris,
-    &dav_hooks_liveprop_fs
-};
-
-
-/* define the dav_stream structure for our use */
-struct dav_stream {
-    apr_pool_t *p;
-    apr_file_t *f;
-    const char *pathname;	/* we may need to remove it at close time */
-};
-
-/* forward declaration for internal treewalkers */
-static dav_error * dav_fs_walk(const dav_walk_params *params, int depth,
-                               dav_response **response);
-static dav_error * dav_fs_internal_walk(const dav_walk_params *params,
-                                        int depth, int is_move,
-                                        const dav_resource *root_dst,
-                                        dav_response **response);
-
-/* --------------------------------------------------------------------
-**
-** PRIVATE REPOSITORY FUNCTIONS
-*/
-apr_pool_t *dav_fs_pool(const dav_resource *resource)
-{
-    return resource->info->pool;
-}
-
-const char *dav_fs_pathname(const dav_resource *resource)
-{
-    return resource->info->pathname;
-}
-
-dav_error * dav_fs_dir_file_name(
-    const dav_resource *resource,
-    const char **dirpath_p,
-    const char **fname_p)
-{
-    dav_resource_private *ctx = resource->info;
-
-    if (resource->collection) {
-        *dirpath_p = ctx->pathname;
-        if (fname_p != NULL)
-            *fname_p = NULL;
-    }
-    else {
-        const char *testpath, *rootpath;
-        char *dirpath = ap_make_dirstr_parent(ctx->pool, ctx->pathname);
-        apr_size_t dirlen = strlen(dirpath);
-        apr_status_t rv = APR_SUCCESS;
-
-        testpath = dirpath;
-        if (dirlen > 0) {
-            rv = apr_filepath_root(&rootpath, &testpath, 0, ctx->pool);
-        }
-        
-        /* remove trailing slash from dirpath, unless it's a root path
-         */
-        if ((rv == APR_SUCCESS && testpath && *testpath)
-            || rv == APR_ERELATIVE) {
-            if (dirpath[dirlen - 1] == '/') {
-                dirpath[dirlen - 1] = '\0';
-            }
-        }
-        
-        /* ###: Looks like a response could be appropriate
-         *
-         * APR_SUCCESS     here tells us the dir is a root
-         * APR_ERELATIVE   told us we had no root (ok)
-         * APR_EINCOMPLETE an incomplete testpath told us
-         *                 there was no -file- name here!
-         * APR_EBADPATH    or other errors tell us this file
-         *                 path is undecipherable
-         */
-
-        if (rv == APR_SUCCESS || rv == APR_ERELATIVE) {
-            *dirpath_p = dirpath;
-            if (fname_p != NULL)
-                *fname_p = ctx->pathname + dirlen;
-        }
-        else {
-            return dav_new_error(ctx->pool, HTTP_INTERNAL_SERVER_ERROR, 0,
-                                 "An incomplete/bad path was found in "
-                                 "dav_fs_dir_file_name.");
-        }
-    }
-
-    return NULL;
-}
-
-/* Note: picked up from ap_gm_timestr_822() */
-/* NOTE: buf must be at least DAV_TIMEBUF_SIZE chars in size */
-static void dav_format_time(int style, apr_time_t sec, char *buf)
-{
-    apr_time_exp_t tms;
-    
-    /* ### what to do if fails? */
-    (void) apr_explode_gmt(&tms, sec);
-
-    if (style == DAV_STYLE_ISO8601) {
-	/* ### should we use "-00:00" instead of "Z" ?? */
-
-	/* 20 chars plus null term */
-	sprintf(buf, "%.4d-%.2d-%.2dT%.2d:%.2d:%.2dZ",
-               tms.tm_year + 1900, tms.tm_mon + 1, tms.tm_mday,
-               tms.tm_hour, tms.tm_min, tms.tm_sec);
-        return;
-    }
-
-    /* RFC 822 date format; as strftime '%a, %d %b %Y %T GMT' */
-
-    /* 29 chars plus null term */
-    sprintf(buf,
-	    "%s, %.2d %s %d %.2d:%.2d:%.2d GMT",
-           apr_day_snames[tms.tm_wday],
-           tms.tm_mday, apr_month_snames[tms.tm_mon],
-           tms.tm_year + 1900,
-           tms.tm_hour, tms.tm_min, tms.tm_sec);
-}
-
-static dav_error * dav_fs_copymove_file(
-    int is_move,
-    apr_pool_t * p,
-    const char *src,
-    const char *dst,
-    dav_buffer *pbuf)
-{
-    dav_buffer work_buf = { 0 };
-    apr_file_t *inf = NULL;
-    apr_file_t *outf = NULL;
-
-    if (pbuf == NULL)
-	pbuf = &work_buf;
-
-    dav_set_bufsize(p, pbuf, DAV_FS_COPY_BLOCKSIZE);
-
-    if ((apr_file_open(&inf, src, APR_READ | APR_BINARY, APR_OS_DEFAULT, p)) 
-	!= APR_SUCCESS) {
-	/* ### use something besides 500? */
-	return dav_new_error(p, HTTP_INTERNAL_SERVER_ERROR, 0,
-			     "Could not open file for reading");
-    }
-
-    /* ### do we need to deal with the umask? */
-    if ((apr_file_open(&outf, dst, APR_WRITE | APR_CREATE | APR_TRUNCATE | APR_BINARY,
-		 APR_OS_DEFAULT, p)) != APR_SUCCESS) {
-	apr_file_close(inf);
-
-	/* ### use something besides 500? */
-	return dav_new_error(p, HTTP_INTERNAL_SERVER_ERROR, 0,
-			     "Could not open file for writing");
-    }
-
-    while (1) {
-	apr_size_t len = DAV_FS_COPY_BLOCKSIZE;
-	apr_status_t status;
-
-	status = apr_file_read(inf, pbuf->buf, &len);
-	if (status != APR_SUCCESS && status != APR_EOF) {
-	    apr_file_close(inf);
-	    apr_file_close(outf);
-	    
-	    if (apr_file_remove(dst, p) != APR_SUCCESS) {
-		/* ### ACK! Inconsistent state... */
-
-		/* ### use something besides 500? */
-		return dav_new_error(p, HTTP_INTERNAL_SERVER_ERROR, 0,
-				     "Could not delete output after read "
-				     "failure. Server is now in an "
-				     "inconsistent state.");
-	    }
-
-	    /* ### use something besides 500? */
-	    return dav_new_error(p, HTTP_INTERNAL_SERVER_ERROR, 0,
-				 "Could not read input file");
-	}
-
-        /* write any bytes that were read (applies to APR_EOF, too) */
-        if (apr_file_write_full(outf, pbuf->buf, len, NULL) != APR_SUCCESS) {
-            int save_errno = errno;
-
-	    apr_file_close(inf);
-	    apr_file_close(outf);
-
-	    if (apr_file_remove(dst, p) != APR_SUCCESS) {
-		/* ### ACK! Inconsistent state... */
-
-		/* ### use something besides 500? */
-		return dav_new_error(p, HTTP_INTERNAL_SERVER_ERROR, 0,
-				     "Could not delete output after write "
-				     "failure. Server is now in an "
-				     "inconsistent state.");
-	    }
-
-	    if (save_errno == ENOSPC) {
-		return dav_new_error(p, HTTP_INSUFFICIENT_STORAGE, 0,
-				     "There is not enough storage to write to "
-				     "this resource.");
-	    }
-
-	    /* ### use something besides 500? */
-	    return dav_new_error(p, HTTP_INTERNAL_SERVER_ERROR, 0,
-				 "Could not write output file");
-	}
-
-        if (status == APR_EOF)
-            break;
-    }
-
-    apr_file_close(inf);
-    apr_file_close(outf);
-
-    if (is_move && apr_file_remove(src, p) != APR_SUCCESS) {
-	dav_error *err;
-	int save_errno = errno;	/* save the errno that got us here */
-
-	if (apr_file_remove(dst, p) != APR_SUCCESS) {
-	    /* ### ACK. this creates an inconsistency. do more!? */
-
-	    /* ### use something besides 500? */
-	    /* Note that we use the latest errno */
-	    return dav_new_error(p, HTTP_INTERNAL_SERVER_ERROR, 0,
-				 "Could not remove source or destination "
-				 "file. Server is now in an inconsistent "
-				 "state.");
-	}
-
-	/* ### use something besides 500? */
-	err = dav_new_error(p, HTTP_INTERNAL_SERVER_ERROR, 0,
-			    "Could not remove source file after move. "
-			    "Destination was removed to ensure consistency.");
-	err->save_errno = save_errno;
-	return err;
-    }
-
-    return NULL;
-}
-
-/* copy/move a file from within a state dir to another state dir */
-/* ### need more buffers to replace the pool argument */
-static dav_error * dav_fs_copymove_state(
-    int is_move,
-    apr_pool_t * p,
-    const char *src_dir, const char *src_file,
-    const char *dst_dir, const char *dst_file,
-    dav_buffer *pbuf)
-{
-    apr_finfo_t src_finfo;	/* finfo for source file */
-    apr_finfo_t dst_state_finfo;	/* finfo for STATE directory */
-    apr_status_t rv;
-    const char *src;
-    const char *dst;
-
-    /* build the propset pathname for the source file */
-    src = apr_pstrcat(p, src_dir, "/" DAV_FS_STATE_DIR "/", src_file, NULL);
-
-    /* the source file doesn't exist */
-    rv = apr_stat(&src_finfo, src, APR_FINFO_NORM, p);
-    if (rv != APR_SUCCESS && rv != APR_INCOMPLETE) {
-	return NULL;
-    }
-
-    /* build the pathname for the destination state dir */
-    dst = apr_pstrcat(p, dst_dir, "/" DAV_FS_STATE_DIR, NULL);
-
-    /* ### do we need to deal with the umask? */
-
-    /* ensure that it exists */
-    rv = apr_dir_make(dst, APR_OS_DEFAULT, p);
-    if (rv != APR_SUCCESS) {
-	if (!APR_STATUS_IS_EEXIST(rv)) {
-	    /* ### use something besides 500? */
-	    return dav_new_error(p, HTTP_INTERNAL_SERVER_ERROR, 0,
-				 "Could not create internal state directory");
-	}
-    }
-
-    /* get info about the state directory */
-    rv = apr_stat(&dst_state_finfo, dst, APR_FINFO_NORM, p);
-    if (rv != APR_SUCCESS && rv != APR_INCOMPLETE) {
-	/* Ack! Where'd it go? */
-	/* ### use something besides 500? */
-	return dav_new_error(p, HTTP_INTERNAL_SERVER_ERROR, 0,
-			     "State directory disappeared");
-    }
-
-    /* The mkdir() may have failed because a *file* exists there already */
-    if (dst_state_finfo.filetype != APR_DIR) {
-	/* ### try to recover by deleting this file? (and mkdir again) */
-	/* ### use something besides 500? */
-	return dav_new_error(p, HTTP_INTERNAL_SERVER_ERROR, 0,
-			     "State directory is actually a file");
-    }
-
-    /* append the target file to the state directory pathname */
-    dst = apr_pstrcat(p, dst, "/", dst_file, NULL);
-
-    /* copy/move the file now */
-    if (is_move && src_finfo.device == dst_state_finfo.device) {
-	/* simple rename is possible since it is on the same device */
-	if (apr_file_rename(src, dst, p) != APR_SUCCESS) {
-	    /* ### use something besides 500? */
-	    return dav_new_error(p, HTTP_INTERNAL_SERVER_ERROR, 0,
-				 "Could not move state file.");
-	}
-    }
-    else
-    {
-	/* gotta copy (and delete) */
-	return dav_fs_copymove_file(is_move, p, src, dst, pbuf);
-    }
-
-    return NULL;
-}
-
-static dav_error *dav_fs_copymoveset(int is_move, apr_pool_t *p,
-				     const dav_resource *src,
-				     const dav_resource *dst,
-				     dav_buffer *pbuf)
-{
-    const char *src_dir;
-    const char *src_file;
-    const char *src_state1;
-    const char *src_state2;
-    const char *dst_dir;
-    const char *dst_file;
-    const char *dst_state1;
-    const char *dst_state2;
-    dav_error *err;
-
-    /* Get directory and filename for resources */
-    /* ### should test these result values... */
-    (void) dav_fs_dir_file_name(src, &src_dir, &src_file);
-    (void) dav_fs_dir_file_name(dst, &dst_dir, &dst_file);
-
-    /* Get the corresponding state files for each resource */
-    dav_dbm_get_statefiles(p, src_file, &src_state1, &src_state2);
-    dav_dbm_get_statefiles(p, dst_file, &dst_state1, &dst_state2);
-#if DAV_DEBUG
-    if ((src_state2 != NULL && dst_state2 == NULL) ||
-	(src_state2 == NULL && dst_state2 != NULL)) {
-	return dav_new_error(p, HTTP_INTERNAL_SERVER_ERROR, 0,
-			     "DESIGN ERROR: dav_dbm_get_statefiles() "
-			     "returned inconsistent results.");
-    }
-#endif
-
-    err = dav_fs_copymove_state(is_move, p,
-				src_dir, src_state1,
-				dst_dir, dst_state1,
-				pbuf);
-
-    if (err == NULL && src_state2 != NULL) {
-	err = dav_fs_copymove_state(is_move, p,
-				    src_dir, src_state2,
-				    dst_dir, dst_state2,
-				    pbuf);
-
-	if (err != NULL) {
-	    /* ### CRAP. inconsistency. */
-	    /* ### should perform some cleanup at the target if we still
-	       ### have the original files */
-
-	    /* Change the error to reflect the bad server state. */
-	    err->status = HTTP_INTERNAL_SERVER_ERROR;
-	    err->desc =
-		"Could not fully copy/move the properties. "
-		"The server is now in an inconsistent state.";
-	}
-    }
-
-    return err;
-}
-
-static dav_error *dav_fs_deleteset(apr_pool_t *p, const dav_resource *resource)
-{
-    const char *dirpath;
-    const char *fname;
-    const char *state1;
-    const char *state2;
-    const char *pathname;
-    apr_status_t status;
-
-    /* Get directory, filename, and state-file names for the resource */
-    /* ### should test this result value... */
-    (void) dav_fs_dir_file_name(resource, &dirpath, &fname);
-    dav_dbm_get_statefiles(p, fname, &state1, &state2);
-
-    /* build the propset pathname for the file */
-    pathname = apr_pstrcat(p,
-			  dirpath,
-			  "/" DAV_FS_STATE_DIR "/",
-			  state1,
-			  NULL);
-
-    /* note: we may get ENOENT if the state dir is not present */
-    if ((status = apr_file_remove(pathname, p)) != APR_SUCCESS
-        && !APR_STATUS_IS_ENOENT(status)) {
-	return dav_new_error(p, HTTP_INTERNAL_SERVER_ERROR, 0,
-			     "Could not remove properties.");
-    }
-
-    if (state2 != NULL) {
-	/* build the propset pathname for the file */
-	pathname = apr_pstrcat(p,
-			      dirpath,
-			      "/" DAV_FS_STATE_DIR "/",
-			      state2,
-			      NULL);
-
-        if ((status = apr_file_remove(pathname, p)) != APR_SUCCESS
-            && !APR_STATUS_IS_ENOENT(status)) {
-	    /* ### CRAP. only removed half. */
-	    return dav_new_error(p, HTTP_INTERNAL_SERVER_ERROR, 0,
-				 "Could not fully remove properties. "
-				 "The server is now in an inconsistent "
-				 "state.");
-	}
-    }
-
-    return NULL;
-}
-
-/* --------------------------------------------------------------------
-**
-** REPOSITORY HOOK FUNCTIONS
-*/
-
-static dav_error * dav_fs_get_resource(
-    request_rec *r,
-    const char *root_dir,
-    const char *label,
-    int use_checked_in,
-    dav_resource **result_resource)
-{
-    dav_resource_private *ctx;
-    dav_resource *resource;
-    char *s;
-    char *filename;
-    apr_size_t len;
-
-    /* ### optimize this into a single allocation! */
-
-    /* Create private resource context descriptor */
-    ctx = apr_pcalloc(r->pool, sizeof(*ctx));
-    ctx->finfo = r->finfo;
-
-    /* ### this should go away */
-    ctx->pool = r->pool;
-
-    /* Preserve case on OSes which fold canonical filenames */
-#if 0
-    /* ### not available in Apache 2.0 yet */
-    filename = r->case_preserved_filename;
-#else
-    filename = r->filename;
-#endif
-
-    /*
-    ** If there is anything in the path_info, then this indicates that the
-    ** entire path was not used to specify the file/dir. We want to append
-    ** it onto the filename so that we get a "valid" pathname for null
-    ** resources.
-    */
-    s = apr_pstrcat(r->pool, filename, r->path_info, NULL);
-
-    /* make sure the pathname does not have a trailing "/" */
-    len = strlen(s);
-    if (len > 1 && s[len - 1] == '/') {
-	s[len - 1] = '\0';
-    }
-    ctx->pathname = s;
-
-    /* Create resource descriptor */
-    resource = apr_pcalloc(r->pool, sizeof(*resource));
-    resource->type = DAV_RESOURCE_TYPE_REGULAR;
-    resource->info = ctx;
-    resource->hooks = &dav_hooks_repository_fs;
-    resource->pool = r->pool;
-
-    /* make sure the URI does not have a trailing "/" */
-    len = strlen(r->uri);
-    if (len > 1 && r->uri[len - 1] == '/') {
-	s = apr_pstrdup(r->pool, r->uri);
-	s[len - 1] = '\0';
-	resource->uri = s;
-    }
-    else {
-	resource->uri = r->uri;
-    }
-
-    if (r->finfo.filetype != 0) {
-        resource->exists = 1;
-        resource->collection = r->finfo.filetype == APR_DIR;
-
-	/* unused info in the URL will indicate a null resource */
-
-	if (r->path_info != NULL && *r->path_info != '\0') {
-	    if (resource->collection) {
-		/* only a trailing "/" is allowed */
-		if (*r->path_info != '/' || r->path_info[1] != '\0') {
-
-		    /*
-		    ** This URL/filename represents a locknull resource or
-		    ** possibly a destination of a MOVE/COPY
-		    */
-		    resource->exists = 0;
-		    resource->collection = 0;
-		}
-	    }
-	    else
-	    {
-		/*
-		** The base of the path refers to a file -- nothing should
-		** be in path_info. The resource is simply an error: it
-		** can't be a null or a locknull resource.
-		*/
-                return dav_new_error(r->pool, HTTP_BAD_REQUEST, 0,
-                                     "The URL contains extraneous path "
-                                     "components. The resource could not "
-                                     "be identified.");
-	    }
-
-	    /* retain proper integrity across the structures */
-	    if (!resource->exists) {
-		ctx->finfo.filetype = 0;
-	    }
-	}
-    }
-
-    *result_resource = resource;
-    return NULL;
-}
-
-static dav_error * dav_fs_get_parent_resource(const dav_resource *resource,
-                                              dav_resource **result_parent)
-{
-    dav_resource_private *ctx = resource->info;
-    dav_resource_private *parent_ctx;
-    dav_resource *parent_resource;
-    apr_status_t rv;
-    char *dirpath;
-    const char *testroot;
-    const char *testpath;
-
-    /* If we're at the root of the URL space, then there is no parent. */
-    if (strcmp(resource->uri, "/") == 0) {
-        *result_parent = NULL;
-        return NULL;
-    }
-
-    /* If given resource is root, then there is no parent.
-     * Unless we can retrieve the filepath root, this is
-     * intendend to fail.  If we split the root and
-     * no path info remains, then we also fail.
-     */
-    testpath = ctx->pathname;
-    rv = apr_filepath_root(&testroot, &testpath, 0, ctx->pool);
-    if ((rv != APR_SUCCESS && rv != APR_ERELATIVE) 
-        || !testpath || !*testpath) {
-        *result_parent = NULL;
-        return NULL;
-    }
-
-    /* ### optimize this into a single allocation! */
-
-    /* Create private resource context descriptor */
-    parent_ctx = apr_pcalloc(ctx->pool, sizeof(*parent_ctx));
-
-    /* ### this should go away */
-    parent_ctx->pool = ctx->pool;
-
-    dirpath = ap_make_dirstr_parent(ctx->pool, ctx->pathname);
-    if (strlen(dirpath) > 1 && dirpath[strlen(dirpath) - 1] == '/') 
-        dirpath[strlen(dirpath) - 1] = '\0';
-    parent_ctx->pathname = dirpath;
-
-    parent_resource = apr_pcalloc(ctx->pool, sizeof(*parent_resource));
-    parent_resource->info = parent_ctx;
-    parent_resource->collection = 1;
-    parent_resource->hooks = &dav_hooks_repository_fs;
-    parent_resource->pool = resource->pool;
-
-    if (resource->uri != NULL) {
-        char *uri = ap_make_dirstr_parent(ctx->pool, resource->uri);
-        if (strlen(uri) > 1 && uri[strlen(uri) - 1] == '/')
-            uri[strlen(uri) - 1] = '\0';
-	parent_resource->uri = uri;
-    }
-
-    rv = apr_stat(&parent_ctx->finfo, parent_ctx->pathname, 
-                  APR_FINFO_NORM, ctx->pool);
-    if (rv == APR_SUCCESS || rv == APR_INCOMPLETE) {
-        parent_resource->exists = 1;
-    }
-
-    *result_parent = parent_resource;
-    return NULL;
-}
-
-static int dav_fs_is_same_resource(
-    const dav_resource *res1,
-    const dav_resource *res2)
-{
-    dav_resource_private *ctx1 = res1->info;
-    dav_resource_private *ctx2 = res2->info;
-
-    if (res1->hooks != res2->hooks)
-	return 0;
-
-    if ((ctx1->finfo.filetype != 0) && (ctx2->finfo.filetype != 0)
-        && (ctx1->finfo.valid & ctx2->finfo.valid & APR_FINFO_INODE)) {
-        return ctx1->finfo.inode == ctx2->finfo.inode;
-    }
-    else {
-        return strcmp(ctx1->pathname, ctx2->pathname) == 0;
-    }
-}
-
-static int dav_fs_is_parent_resource(
-    const dav_resource *res1,
-    const dav_resource *res2)
-{
-    dav_resource_private *ctx1 = res1->info;
-    dav_resource_private *ctx2 = res2->info;
-    apr_size_t len1 = strlen(ctx1->pathname);
-    apr_size_t len2;
-
-    if (res1->hooks != res2->hooks)
-	return 0;
-
-    /* it is safe to use ctx2 now */
-    len2 = strlen(ctx2->pathname);
-
-    return (len2 > len1
-            && memcmp(ctx1->pathname, ctx2->pathname, len1) == 0
-            && ctx2->pathname[len1] == '/');
-}
-
-static dav_error * dav_fs_open_stream(const dav_resource *resource,
-				      dav_stream_mode mode,
-				      dav_stream **stream)
-{
-    apr_pool_t *p = resource->info->pool;
-    dav_stream *ds = apr_pcalloc(p, sizeof(*ds));
-    apr_int32_t flags;
-
-    switch (mode) {
-    default:
-	flags = APR_READ | APR_BINARY;
-	break;
-
-    case DAV_MODE_WRITE_TRUNC:
-	flags = APR_WRITE | APR_CREATE | APR_TRUNCATE | APR_BINARY;
-	break;
-    case DAV_MODE_WRITE_SEEKABLE:
-	flags = APR_WRITE | APR_CREATE | APR_BINARY;
-	break;
-    }
-
-    ds->p = p;
-    ds->pathname = resource->info->pathname;
-    if (apr_file_open(&ds->f, ds->pathname, flags, APR_OS_DEFAULT, 
-		ds->p) != APR_SUCCESS) {
-	/* ### use something besides 500? */
-	return dav_new_error(p, HTTP_INTERNAL_SERVER_ERROR, 0,
-			     "An error occurred while opening a resource.");
-    }
-
-    /* (APR registers cleanups for the fd with the pool) */
-
-    *stream = ds;
-    return NULL;
-}
-
-static dav_error * dav_fs_close_stream(dav_stream *stream, int commit)
-{
-    apr_file_close(stream->f);
-
-    if (!commit) {
-	if (apr_file_remove(stream->pathname, stream->p) != APR_SUCCESS) {
-	    /* ### use a better description? */
-            return dav_new_error(stream->p, HTTP_INTERNAL_SERVER_ERROR, 0,
-				 "There was a problem removing (rolling "
-				 "back) the resource "
-				 "when it was being closed.");
-	}
-    }
-
-    return NULL;
-}
-
-static dav_error * dav_fs_write_stream(dav_stream *stream,
-				       const void *buf, apr_size_t bufsize)
-{
-    apr_status_t status;
-
-    status = apr_file_write_full(stream->f, buf, bufsize, NULL);
-    if (APR_STATUS_IS_ENOSPC(status)) {
-        return dav_new_error(stream->p, HTTP_INSUFFICIENT_STORAGE, 0,
-                             "There is not enough storage to write to "
-                             "this resource.");
-    }
-    else if (status != APR_SUCCESS) {
-	/* ### use something besides 500? */
-	return dav_new_error(stream->p, HTTP_INTERNAL_SERVER_ERROR, 0,
-			     "An error occurred while writing to a "
-			     "resource.");
-    }
-    return NULL;
-}
-
-static dav_error * dav_fs_seek_stream(dav_stream *stream, apr_off_t abs_pos)
-{
-    if (apr_file_seek(stream->f, APR_SET, &abs_pos) != APR_SUCCESS) {
-	/* ### should check whether apr_file_seek set abs_pos was set to the
-	 * correct position? */
-	/* ### use something besides 500? */
-	return dav_new_error(stream->p, HTTP_INTERNAL_SERVER_ERROR, 0,
-			     "Could not seek to specified position in the "
-			     "resource.");
-    }
-    return NULL;
-}
-
-
-#if DEBUG_GET_HANDLER
-
-/* only define set_headers() and deliver() for debug purposes */
-
-
-static dav_error * dav_fs_set_headers(request_rec *r,
-				      const dav_resource *resource)
-{
-    /* ### this function isn't really used since we have a get_pathname */
-    if (!resource->exists)
-	return NULL;
-
-    /* make sure the proper mtime is in the request record */
-    ap_update_mtime(r, resource->info->finfo.mtime);
-
-    /* ### note that these use r->filename rather than <resource> */
-    ap_set_last_modified(r);
-    ap_set_etag(r);
-
-    /* we accept byte-ranges */
-    apr_table_setn(r->headers_out, "Accept-Ranges", "bytes");
-
-    /* set up the Content-Length header */
-    ap_set_content_length(r, resource->info->finfo.size);
-
-    /* ### how to set the content type? */
-    /* ### until this is resolved, the Content-Type header is busted */
-
-    return NULL;
-}
-
-static dav_error * dav_fs_deliver(const dav_resource *resource,
-                                  ap_filter_t *output)
-{
-    apr_pool_t *pool = resource->pool;
-    apr_bucket_brigade *bb;
-    apr_file_t *fd;
-    apr_status_t status;
-    apr_bucket *bkt;
-
-    /* Check resource type */
-    if (resource->type != DAV_RESOURCE_TYPE_REGULAR
-        && resource->type != DAV_RESOURCE_TYPE_VERSION
-        && resource->type != DAV_RESOURCE_TYPE_WORKING) {
-        return dav_new_error(pool, HTTP_CONFLICT, 0,
-                             "Cannot GET this type of resource.");
-    }
-    if (resource->collection) {
-        return dav_new_error(pool, HTTP_CONFLICT, 0,
-                             "There is no default response to GET for a "
-                             "collection.");
-    }
-
-    if ((status = apr_file_open(&fd, resource->info->pathname,
-                                APR_READ | APR_BINARY, 0,
-                                pool)) != APR_SUCCESS) {
-        return dav_new_error(pool, HTTP_FORBIDDEN, 0,
-                             "File permissions deny server access.");
-    }
-
-    bb = apr_brigade_create(pool);
-
-    /* ### this does not handle large files. but this is test code anyway */
-    bkt = apr_bucket_file_create(fd, 0,
-                                 (apr_size_t)resource->info->finfo.size,
-                                 pool);
-    APR_BRIGADE_INSERT_TAIL(bb, bkt);
-
-    bkt = apr_bucket_eos_create();
-    APR_BRIGADE_INSERT_TAIL(bb, bkt);
-
-    if ((status = ap_pass_brigade(output, bb)) != APR_SUCCESS) {
-        return dav_new_error(pool, HTTP_FORBIDDEN, 0,
-                             "Could not write contents to filter.");
-    }
-
-    return NULL;
-}
-
-#endif /* DEBUG_GET_HANDLER */
-
-
-static dav_error * dav_fs_create_collection(dav_resource *resource)
-{
-    dav_resource_private *ctx = resource->info;
-    apr_status_t status;
-
-    status = apr_dir_make(ctx->pathname, APR_OS_DEFAULT, ctx->pool);
-    if (status == ENOSPC) {
-        return dav_new_error(ctx->pool, HTTP_INSUFFICIENT_STORAGE, 0,
-			     "There is not enough storage to create "
-			     "this collection.");
-    }
-    else if (status != APR_SUCCESS) {
-	/* ### refine this error message? */
-        return dav_new_error(ctx->pool, HTTP_FORBIDDEN, 0,
-                             "Unable to create collection.");
-    }
-
-    /* update resource state to show it exists as a collection */
-    resource->exists = 1;
-    resource->collection = 1;
-
-    return NULL;
-}
-
-static dav_error * dav_fs_copymove_walker(dav_walk_resource *wres,
-                                          int calltype)
-{
-    dav_fs_copymove_walk_ctx *ctx = wres->walk_ctx;
-    dav_resource_private *srcinfo = wres->resource->info;
-    dav_resource_private *dstinfo = ctx->res_dst->info;
-    dav_error *err = NULL;
-
-    if (wres->resource->collection) {
-	if (calltype == DAV_CALLTYPE_POSTFIX) {
-	    /* Postfix call for MOVE. delete the source dir.
-	     * Note: when copying, we do not enable the postfix-traversal.
-	     */
-	    /* ### we are ignoring any error here; what should we do? */
-	    (void) apr_dir_remove(srcinfo->pathname, ctx->pool);
-	}
-        else {
-	    /* copy/move of a collection. Create the new, target collection */
-            if (apr_dir_make(dstinfo->pathname, APR_OS_DEFAULT,
-                             ctx->pool) != APR_SUCCESS) {
-		/* ### assume it was a permissions problem */
-		/* ### need a description here */
-                err = dav_new_error(ctx->pool, HTTP_FORBIDDEN, 0, NULL);
-            }
-	}
-    }
-    else {
-	err = dav_fs_copymove_file(ctx->is_move, ctx->pool, 
-				   srcinfo->pathname, dstinfo->pathname, 
-				   &ctx->work_buf);
-	/* ### push a higher-level description? */
-    }
-
-    /*
-    ** If we have a "not so bad" error, then it might need to go into a
-    ** multistatus response.
-    **
-    ** For a MOVE, it will always go into the multistatus. It could be
-    ** that everything has been moved *except* for the root. Using a
-    ** multistatus (with no errors for the other resources) will signify
-    ** this condition.
-    **
-    ** For a COPY, we are traversing in a prefix fashion. If the root fails,
-    ** then we can just bail out now.
-    */
-    if (err != NULL
-        && !ap_is_HTTP_SERVER_ERROR(err->status)
-	&& (ctx->is_move
-            || !dav_fs_is_same_resource(wres->resource, ctx->root))) {
-	/* ### use errno to generate DAV:responsedescription? */
-	dav_add_response(wres, err->status, NULL);
-
-        /* the error is in the multistatus now. do not stop the traversal. */
-        return NULL;
-    }
-
-    return err;
-}
-
-static dav_error *dav_fs_copymove_resource(
-    int is_move,
-    const dav_resource *src,
-    const dav_resource *dst,
-    int depth,
-    dav_response **response)
-{
-    dav_error *err = NULL;
-    dav_buffer work_buf = { 0 };
-
-    *response = NULL;
-
-    /* if a collection, recursively copy/move it and its children,
-     * including the state dirs
-     */
-    if (src->collection) {
-        dav_walk_params params = { 0 };
-        dav_response *multi_status;
-
-	params.walk_type = DAV_WALKTYPE_NORMAL | DAV_WALKTYPE_HIDDEN;
-	params.func = dav_fs_copymove_walker;
-	params.pool = src->info->pool;
-	params.root = src;
-
-        /* params.walk_ctx is managed by dav_fs_internal_walk() */
-
-	/* postfix is needed for MOVE to delete source dirs */
-        if (is_move)
-            params.walk_type |= DAV_WALKTYPE_POSTFIX;
-
-        /* note that we return the error OR the multistatus. never both */
-
-	if ((err = dav_fs_internal_walk(&params, depth, is_move, dst,
-                                        &multi_status)) != NULL) {
-            /* on a "real" error, then just punt. nothing else to do. */
-            return err;
-        }
-
-        if ((*response = multi_status) != NULL) {
-            /* some multistatus responses exist. wrap them in a 207 */
-            return dav_new_error(src->info->pool, HTTP_MULTI_STATUS, 0,
-                                 "Error(s) occurred on some resources during "
-                                 "the COPY/MOVE process.");
-        }
-
-	return NULL;
-    }
-
-    /* not a collection */
-    if ((err = dav_fs_copymove_file(is_move, src->info->pool,
-				    src->info->pathname, dst->info->pathname,
-				    &work_buf)) != NULL) {
-	/* ### push a higher-level description? */
-	return err;
-    }
-	
-    /* copy/move properties as well */
-    return dav_fs_copymoveset(is_move, src->info->pool, src, dst, &work_buf);
-}
-
-static dav_error * dav_fs_copy_resource(
-    const dav_resource *src,
-    dav_resource *dst,
-    int depth,
-    dav_response **response)
-{
-    dav_error *err;
-
-#if DAV_DEBUG
-    if (src->hooks != dst->hooks) {
-	/*
-	** ### strictly speaking, this is a design error; we should not
-	** ### have reached this point.
-	*/
-	return dav_new_error(src->info->pool, HTTP_INTERNAL_SERVER_ERROR, 0,
-			     "DESIGN ERROR: a mix of repositories "
-			     "was passed to copy_resource.");
-    }
-#endif
-
-    if ((err = dav_fs_copymove_resource(0, src, dst, depth,
-					response)) == NULL) {
-
-        /* update state of destination resource to show it exists */
-        dst->exists = 1;
-        dst->collection = src->collection;
-    }
-
-    return err;
-}
-
-static dav_error * dav_fs_move_resource(
-    dav_resource *src,
-    dav_resource *dst,
-    dav_response **response)
-{
-    dav_resource_private *srcinfo = src->info;
-    dav_resource_private *dstinfo = dst->info;
-    dav_error *err;
-    int can_rename = 0;
-
-#if DAV_DEBUG
-    if (src->hooks != dst->hooks) {
-	/*
-	** ### strictly speaking, this is a design error; we should not
-	** ### have reached this point.
-	*/
-	return dav_new_error(src->info->pool, HTTP_INTERNAL_SERVER_ERROR, 0,
-			     "DESIGN ERROR: a mix of repositories "
-			     "was passed to move_resource.");
-    }
-#endif
-
-    /* determine whether a simple rename will work.
-     * Assume source exists, else we wouldn't get called.
-     */
-    if (dstinfo->finfo.filetype != 0) {
-	if (dstinfo->finfo.device == srcinfo->finfo.device) {
-	    /* target exists and is on the same device. */
-	    can_rename = 1;
-	}
-    }
-    else {
-	const char *dirpath;
-	apr_finfo_t finfo;
-        apr_status_t rv;
-
-	/* destination does not exist, but the parent directory should,
-	 * so try it
-	 */
-	dirpath = ap_make_dirstr_parent(dstinfo->pool, dstinfo->pathname);
-        /* 
-         * XXX: If missing dev ... then what test?
-         * Really need a try and failover for those platforms.
-         * 
-         */
-        rv = apr_stat(&finfo, dirpath, APR_FINFO_DEV, dstinfo->pool);
-	if ((rv == APR_SUCCESS || rv == APR_INCOMPLETE)
-            && (finfo.valid & srcinfo->finfo.valid & APR_FINFO_DEV)
-	    && (finfo.device == srcinfo->finfo.device)) {
-	    can_rename = 1;
-	}
-    }
-
-    /* if we can't simply rename, then do it the hard way... */
-    if (!can_rename) {
-        if ((err = dav_fs_copymove_resource(1, src, dst, DAV_INFINITY,
-                                            response)) == NULL) {
-            /* update resource states */
-            dst->exists = 1;
-            dst->collection = src->collection;
-            src->exists = 0;
-            src->collection = 0;
-        }
-
-        return err;
-    }
-
-    /* a rename should work. do it, and move properties as well */
-
-    /* no multistatus response */
-    *response = NULL;
-
-    /* ### APR has no rename? */
-    if (apr_file_rename(srcinfo->pathname, dstinfo->pathname,
-                       srcinfo->pool) != APR_SUCCESS) {
-	/* ### should have a better error than this. */
-	return dav_new_error(srcinfo->pool, HTTP_INTERNAL_SERVER_ERROR, 0,
-			     "Could not rename resource.");
-    }
-
-    /* update resource states */
-    dst->exists = 1;
-    dst->collection = src->collection;
-    src->exists = 0;
-    src->collection = 0;
-
-    if ((err = dav_fs_copymoveset(1, src->info->pool,
-				  src, dst, NULL)) == NULL) {
-	/* no error. we're done. go ahead and return now. */
-	return NULL;
-    }
-
-    /* error occurred during properties move; try to put resource back */
-    if (apr_file_rename(dstinfo->pathname, srcinfo->pathname,
-                       srcinfo->pool) != APR_SUCCESS) {
-	/* couldn't put it back! */
-	return dav_push_error(srcinfo->pool,
-			      HTTP_INTERNAL_SERVER_ERROR, 0,
-			      "The resource was moved, but a failure "
-			      "occurred during the move of its "
-			      "properties. The resource could not be "
-			      "restored to its original location. The "
-			      "server is now in an inconsistent state.",
-			      err);
-    }
-
-    /* update resource states again */
-    src->exists = 1;
-    src->collection = dst->collection;
-    dst->exists = 0;
-    dst->collection = 0;
-
-    /* resource moved back, but properties may be inconsistent */
-    return dav_push_error(srcinfo->pool,
-			  HTTP_INTERNAL_SERVER_ERROR, 0,
-			  "The resource was moved, but a failure "
-			  "occurred during the move of its properties. "
-			  "The resource was moved back to its original "
-			  "location, but its properties may have been "
-			  "partially moved. The server may be in an "
-			  "inconsistent state.",
-			  err);
-}
-
-static dav_error * dav_fs_delete_walker(dav_walk_resource *wres, int calltype)
-{
-    dav_resource_private *info = wres->resource->info;
-
-    /* do not attempt to remove a null resource,
-     * or a collection with children
-     */
-    if (wres->resource->exists &&
-        (!wres->resource->collection || calltype == DAV_CALLTYPE_POSTFIX)) {
-	/* try to remove the resource */
-	apr_status_t result;
-
-	result = wres->resource->collection
-	    ? apr_dir_remove(info->pathname, wres->pool)
-	    : apr_file_remove(info->pathname, wres->pool);
-
-	/*
-        ** If an error occurred, then add it to multistatus response.
-        ** Note that we add it for the root resource, too. It is quite
-        ** possible to delete the whole darn tree, yet fail on the root.
-        **
-        ** (also: remember we are deleting via a postfix traversal)
-        */
-	if (result != APR_SUCCESS) {
-            /* ### assume there is a permissions problem */
-
-            /* ### use errno to generate DAV:responsedescription? */
-            dav_add_response(wres, HTTP_FORBIDDEN, NULL);
-	}
-    }
-
-    return NULL;
-}
-
-static dav_error * dav_fs_remove_resource(dav_resource *resource,
-                                          dav_response **response)
-{
-    dav_resource_private *info = resource->info;
-
-    *response = NULL;
-
-    /* if a collection, recursively remove it and its children,
-     * including the state dirs
-     */
-    if (resource->collection) {
-        dav_walk_params params = { 0 };
-	dav_error *err = NULL;
-        dav_response *multi_status;
-
-	params.walk_type = (DAV_WALKTYPE_NORMAL
-                            | DAV_WALKTYPE_HIDDEN
-                            | DAV_WALKTYPE_POSTFIX);
-	params.func = dav_fs_delete_walker;
-	params.pool = info->pool;
-	params.root = resource;
-
-	if ((err = dav_fs_walk(&params, DAV_INFINITY,
-                               &multi_status)) != NULL) {
-            /* on a "real" error, then just punt. nothing else to do. */
-            return err;
-        }
-
-        if ((*response = multi_status) != NULL) {
-            /* some multistatus responses exist. wrap them in a 207 */
-            return dav_new_error(info->pool, HTTP_MULTI_STATUS, 0,
-                                 "Error(s) occurred on some resources during "
-                                 "the deletion process.");
-        }
-
-        /* no errors... update resource state */
-        resource->exists = 0;
-        resource->collection = 0;
-
-	return NULL;
-    }
-
-    /* not a collection; remove the file and its properties */
-    if (apr_file_remove(info->pathname, info->pool) != APR_SUCCESS) {
-	/* ### put a description in here */
-	return dav_new_error(info->pool, HTTP_FORBIDDEN, 0, NULL);
-    }
-
-    /* update resource state */
-    resource->exists = 0;
-    resource->collection = 0;
-
-    /* remove properties and return its result */
-    return dav_fs_deleteset(info->pool, resource);
-}
-
-/* ### move this to dav_util? */
-/* Walk recursively down through directories, *
- * including lock-null resources as we go.    */
-static dav_error * dav_fs_walker(dav_fs_walker_context *fsctx, int depth)
-{
-    const dav_walk_params *params = fsctx->params;
-    apr_pool_t *pool = params->pool;
-    dav_error *err = NULL;
-    int isdir = fsctx->res1.collection;
-    apr_finfo_t dirent;
-    apr_dir_t *dirp;
-
-    /* ensure the context is prepared properly, then call the func */
-    err = (*params->func)(&fsctx->wres,
-                          isdir
-                          ? DAV_CALLTYPE_COLLECTION
-                          : DAV_CALLTYPE_MEMBER);
-    if (err != NULL) {
-	return err;
-    }
-
-    if (depth == 0 || !isdir) {
-	return NULL;
-    }
-
-    /* put a trailing slash onto the directory, in preparation for appending
-     * files to it as we discovery them within the directory */
-    dav_check_bufsize(pool, &fsctx->path1, DAV_BUFFER_PAD);
-    fsctx->path1.buf[fsctx->path1.cur_len++] = '/';
-    fsctx->path1.buf[fsctx->path1.cur_len] = '\0';	/* in pad area */
-
-    /* if a secondary path is present, then do that, too */
-    if (fsctx->path2.buf != NULL) {
-	dav_check_bufsize(pool, &fsctx->path2, DAV_BUFFER_PAD);
-	fsctx->path2.buf[fsctx->path2.cur_len++] = '/';
-	fsctx->path2.buf[fsctx->path2.cur_len] = '\0';	/* in pad area */
-    }
-
-    /* Note: the URI should ALREADY have a trailing "/" */
-
-    /* for this first pass of files, all resources exist */
-    fsctx->res1.exists = 1;
-
-    /* a file is the default; we'll adjust if we hit a directory */
-    fsctx->res1.collection = 0;
-    fsctx->res2.collection = 0;
-
-    /* open and scan the directory */
-    if ((apr_dir_open(&dirp, fsctx->path1.buf, pool)) != APR_SUCCESS) {
-	/* ### need a better error */
-	return dav_new_error(pool, HTTP_NOT_FOUND, 0, NULL);
-    }
-    while ((apr_dir_read(&dirent, APR_FINFO_DIRENT, dirp)) == APR_SUCCESS) {
-	apr_size_t len;
-        apr_status_t status;
-
-	len = strlen(dirent.name);
-
-	/* avoid recursing into our current, parent, or state directories */
-	if (dirent.name[0] == '.' 
-              && (len == 1 || (dirent.name[1] == '.' && len == 2))) {
-	    continue;
-	}
-
-	if (params->walk_type & DAV_WALKTYPE_AUTH) {
-	    /* ### need to authorize each file */
-	    /* ### example: .htaccess is normally configured to fail auth */
-
-	    /* stuff in the state directory is never authorized! */
-	    if (!strcmp(dirent.name, DAV_FS_STATE_DIR)) {
-		continue;
-	    }
-	}
-	/* skip the state dir unless a HIDDEN is performed */
-	if (!(params->walk_type & DAV_WALKTYPE_HIDDEN)
-	    && !strcmp(dirent.name, DAV_FS_STATE_DIR)) {
-	    continue;
-	}
-
-	/* append this file onto the path buffer (copy null term) */
-	dav_buffer_place_mem(pool, &fsctx->path1, dirent.name, len + 1, 0);
-
-
-        /* ### Optimize me, dirent can give us what we need! */
-        status = apr_lstat(&fsctx->info1.finfo, fsctx->path1.buf, 
-                           APR_FINFO_NORM, pool);
-        if (status != APR_SUCCESS && status != APR_INCOMPLETE) {
-	    /* woah! where'd it go? */
-	    /* ### should have a better error here */
-	    err = dav_new_error(pool, HTTP_NOT_FOUND, 0, NULL);
-	    break;
-	}
-
-	/* copy the file to the URI, too. NOTE: we will pad an extra byte
-	   for the trailing slash later. */
-	dav_buffer_place_mem(pool, &fsctx->uri_buf, dirent.name, len + 1, 1);
-
-	/* if there is a secondary path, then do that, too */
-	if (fsctx->path2.buf != NULL) {
-	    dav_buffer_place_mem(pool, &fsctx->path2, dirent.name, len + 1, 0);
-	}
-
-	/* set up the (internal) pathnames for the two resources */
-	fsctx->info1.pathname = fsctx->path1.buf;
-	fsctx->info2.pathname = fsctx->path2.buf;
-
-	/* set up the URI for the current resource */
-	fsctx->res1.uri = fsctx->uri_buf.buf;
-
-	/* ### for now, only process regular files (e.g. skip symlinks) */
-	if (fsctx->info1.finfo.filetype == APR_REG) {
-	    /* call the function for the specified dir + file */
-	    if ((err = (*params->func)(&fsctx->wres,
-                                       DAV_CALLTYPE_MEMBER)) != NULL) {
-		/* ### maybe add a higher-level description? */
-		break;
-	    }
-	}
-	else if (fsctx->info1.finfo.filetype == APR_DIR) {
-	    apr_size_t save_path_len = fsctx->path1.cur_len;
-	    apr_size_t save_uri_len = fsctx->uri_buf.cur_len;
-	    apr_size_t save_path2_len = fsctx->path2.cur_len;
-
-	    /* adjust length to incorporate the subdir name */
-	    fsctx->path1.cur_len += len;
-	    fsctx->path2.cur_len += len;
-
-	    /* adjust URI length to incorporate subdir and a slash */
-	    fsctx->uri_buf.cur_len += len + 1;
-	    fsctx->uri_buf.buf[fsctx->uri_buf.cur_len - 1] = '/';
-	    fsctx->uri_buf.buf[fsctx->uri_buf.cur_len] = '\0';
-
-	    /* switch over to a collection */
-	    fsctx->res1.collection = 1;
-	    fsctx->res2.collection = 1;
-
-	    /* recurse on the subdir */
-	    /* ### don't always want to quit on error from single child */
-	    if ((err = dav_fs_walker(fsctx, depth - 1)) != NULL) {
-		/* ### maybe add a higher-level description? */
-		break;
-	    }
-
-	    /* put the various information back */
-	    fsctx->path1.cur_len = save_path_len;
-	    fsctx->path2.cur_len = save_path2_len;
-	    fsctx->uri_buf.cur_len = save_uri_len;
-
-	    fsctx->res1.collection = 0;
-	    fsctx->res2.collection = 0;
-
-	    /* assert: res1.exists == 1 */
-	}
-    }
-
-    /* ### check the return value of this? */
-    apr_dir_close(dirp);
-
-    if (err != NULL)
-	return err;
-
-    if (params->walk_type & DAV_WALKTYPE_LOCKNULL) {
-	apr_size_t offset = 0;
-
-	/* null terminate the directory name */
-	fsctx->path1.buf[fsctx->path1.cur_len - 1] = '\0';
-
-	/* Include any lock null resources found in this collection */
-	fsctx->res1.collection = 1;
-	if ((err = dav_fs_get_locknull_members(&fsctx->res1,
-                                               &fsctx->locknull_buf)) != NULL) {
-            /* ### maybe add a higher-level description? */
-            return err;
-	}
-
-	/* put a slash back on the end of the directory */
-	fsctx->path1.buf[fsctx->path1.cur_len - 1] = '/';
-
-	/* these are all non-existant (files) */
-	fsctx->res1.exists = 0;
-	fsctx->res1.collection = 0;
-	memset(&fsctx->info1.finfo, 0, sizeof(fsctx->info1.finfo));
-
-	while (offset < fsctx->locknull_buf.cur_len) {
-	    apr_size_t len = strlen(fsctx->locknull_buf.buf + offset);
-	    dav_lock *locks = NULL;
-
-	    /*
-	    ** Append the locknull file to the paths and the URI. Note that
-	    ** we don't have to pad the URI for a slash since a locknull
-	    ** resource is not a collection.
-	    */
-	    dav_buffer_place_mem(pool, &fsctx->path1,
-				 fsctx->locknull_buf.buf + offset, len + 1, 0);
-	    dav_buffer_place_mem(pool, &fsctx->uri_buf,
-				 fsctx->locknull_buf.buf + offset, len + 1, 0);
-	    if (fsctx->path2.buf != NULL) {
-		dav_buffer_place_mem(pool, &fsctx->path2,
-				     fsctx->locknull_buf.buf + offset,
-                                     len + 1, 0);
-	    }
-
-	    /* set up the (internal) pathnames for the two resources */
-	    fsctx->info1.pathname = fsctx->path1.buf;
-	    fsctx->info2.pathname = fsctx->path2.buf;
-
-	    /* set up the URI for the current resource */
-	    fsctx->res1.uri = fsctx->uri_buf.buf;
-
-	    /*
-	    ** To prevent a PROPFIND showing an expired locknull
-	    ** resource, query the lock database to force removal
-	    ** of both the lock entry and .locknull, if necessary..
-	    ** Sure, the query in PROPFIND would do this.. after
-	    ** the locknull resource was already included in the 
-	    ** return.
-	    **
-	    ** NOTE: we assume the caller has opened the lock database
-	    **       if they have provided DAV_WALKTYPE_LOCKNULL.
-	    */
-	    /* ### we should also look into opening it read-only and
-	       ### eliding timed-out items from the walk, yet leaving
-	       ### them in the locknull database until somebody opens
-	       ### the thing writable.
-	       */
-	    /* ### probably ought to use has_locks. note the problem
-	       ### mentioned above, though... we would traverse this as
-	       ### a locknull, but then a PROPFIND would load the lock
-	       ### info, causing a timeout and the locks would not be
-	       ### reported. Therefore, a null resource would be returned
-	       ### in the PROPFIND.
-	       ###
-	       ### alternative: just load unresolved locks. any direct
-	       ### locks will be timed out (correct). any indirect will
-	       ### not (correct; consider if a parent timed out -- the
-	       ### timeout routines do not walk and remove indirects;
-	       ### even the resolve func would probably fail when it
-	       ### tried to find a timed-out direct lock).
-	    */
-	    if ((err = dav_lock_query(params->lockdb, &fsctx->res1,
-                                      &locks)) != NULL) {
-		/* ### maybe add a higher-level description? */
-		return err;
-	    }
-
-	    /* call the function for the specified dir + file */
-	    if (locks != NULL &&
-		(err = (*params->func)(&fsctx->wres,
-                                       DAV_CALLTYPE_LOCKNULL)) != NULL) {
-		/* ### maybe add a higher-level description? */
-		return err;
-	    }
-
-	    offset += len + 1;
-	}
-
-	/* reset the exists flag */
-	fsctx->res1.exists = 1;
-    }
-
-    if (params->walk_type & DAV_WALKTYPE_POSTFIX) {
-	/* replace the dirs' trailing slashes with null terms */
-	fsctx->path1.buf[--fsctx->path1.cur_len] = '\0';
-	fsctx->uri_buf.buf[--fsctx->uri_buf.cur_len] = '\0';
-	if (fsctx->path2.buf != NULL) {
-	    fsctx->path2.buf[--fsctx->path2.cur_len] = '\0';
-	}
-
-	/* this is a collection which exists */
-	fsctx->res1.collection = 1;
-
-	return (*params->func)(&fsctx->wres, DAV_CALLTYPE_POSTFIX);
-    }
-
-    return NULL;
-}
-
-static dav_error * dav_fs_internal_walk(const dav_walk_params *params,
-                                        int depth, int is_move,
-                                        const dav_resource *root_dst,
-                                        dav_response **response)
-{
-    dav_fs_walker_context fsctx = { 0 };
-    dav_error *err;
-    dav_fs_copymove_walk_ctx cm_ctx = { 0 };
-
-#if DAV_DEBUG
-    if ((params->walk_type & DAV_WALKTYPE_LOCKNULL) != 0
-	&& params->lockdb == NULL) {
-	return dav_new_error(params->pool, HTTP_INTERNAL_SERVER_ERROR, 0,
-			     "DESIGN ERROR: walker called to walk locknull "
-			     "resources, but a lockdb was not provided.");
-    }
-#endif
-
-    fsctx.params = params;
-    fsctx.wres.walk_ctx = params->walk_ctx;
-    fsctx.wres.pool = params->pool;
-
-    /* ### zero out versioned, working, baselined? */
-
-    fsctx.res1 = *params->root;
-    fsctx.res1.pool = params->pool;
-
-    fsctx.res1.info = &fsctx.info1;
-    fsctx.info1 = *params->root->info;
-
-    /* the pathname is stored in the path1 buffer */
-    dav_buffer_init(params->pool, &fsctx.path1, fsctx.info1.pathname);
-    fsctx.info1.pathname = fsctx.path1.buf;
-
-    if (root_dst != NULL) {
-        /* internal call from the COPY/MOVE code. set it up. */
-
-        fsctx.wres.walk_ctx = &cm_ctx;
-        cm_ctx.is_move = is_move;
-        cm_ctx.res_dst = &fsctx.res2;
-        cm_ctx.root = params->root;
-        cm_ctx.pool = params->pool;
-
-	fsctx.res2 = *root_dst;
-	fsctx.res2.exists = 0;
-	fsctx.res2.collection = 0;
-        fsctx.res2.uri = NULL;          /* we don't track this */
-        fsctx.res2.pool = params->pool;
-
-	fsctx.res2.info = &fsctx.info2;
-	fsctx.info2 = *root_dst->info;
-
-	/* res2 does not exist -- clear its finfo structure */
-	memset(&fsctx.info2.finfo, 0, sizeof(fsctx.info2.finfo));
-
-        /* the pathname is stored in the path2 buffer */
-	dav_buffer_init(params->pool, &fsctx.path2, fsctx.info2.pathname);
-	fsctx.info2.pathname = fsctx.path2.buf;
-    }
-
-    /* prep the URI buffer */
-    dav_buffer_init(params->pool, &fsctx.uri_buf, params->root->uri);
-
-    /* if we have a directory, then ensure the URI has a trailing "/" */
-    if (fsctx.res1.collection
-	&& fsctx.uri_buf.buf[fsctx.uri_buf.cur_len - 1] != '/') {
-
-	/* this will fall into the pad area */
-	fsctx.uri_buf.buf[fsctx.uri_buf.cur_len++] = '/';
-	fsctx.uri_buf.buf[fsctx.uri_buf.cur_len] = '\0';
-    }
-
-    /* the current resource's URI is stored in the uri_buf buffer */
-    fsctx.res1.uri = fsctx.uri_buf.buf;
-
-    /* point the callback's resource at our structure */
-    fsctx.wres.resource = &fsctx.res1;
-
-    /* always return the error, and any/all multistatus responses */
-    err = dav_fs_walker(&fsctx, depth);
-    *response = fsctx.wres.response;
-    return err;
-}
-
-static dav_error * dav_fs_walk(const dav_walk_params *params, int depth,
-                               dav_response **response)
-{
-    /* always return the error, and any/all multistatus responses */
-    return dav_fs_internal_walk(params, depth, 0, NULL, response);
-}
-
-/* dav_fs_etag:  Stolen from ap_make_etag.  Creates a strong etag
- *    for file path.
- * ### do we need to return weak tags sometimes?
- */
-static const char *dav_fs_getetag(const dav_resource *resource)
-{
-    dav_resource_private *ctx = resource->info;
-
-    if (!resource->exists) 
-	return apr_pstrdup(ctx->pool, "");
-
-    if (ctx->finfo.filetype != 0) {
-        return apr_psprintf(ctx->pool, "\"%lx-%lx-%lx\"",
-			   (unsigned long) ctx->finfo.inode,
-			   (unsigned long) ctx->finfo.size,
-			   (unsigned long) ctx->finfo.mtime);
-    }
-
-    return apr_psprintf(ctx->pool, "\"%lx\"", (unsigned long) ctx->finfo.mtime);
-}
-
-static const dav_hooks_repository dav_hooks_repository_fs =
-{
-    DEBUG_GET_HANDLER,   /* normally: special GET handling not required */
-    dav_fs_get_resource,
-    dav_fs_get_parent_resource,
-    dav_fs_is_same_resource,
-    dav_fs_is_parent_resource,
-    dav_fs_open_stream,
-    dav_fs_close_stream,
-    dav_fs_write_stream,
-    dav_fs_seek_stream,
-#if DEBUG_GET_HANDLER
-    dav_fs_set_headers,
-    dav_fs_deliver,
-#else
-    NULL,
-    NULL,
-#endif
-    dav_fs_create_collection,
-    dav_fs_copy_resource,
-    dav_fs_move_resource,
-    dav_fs_remove_resource,
-    dav_fs_walk,
-    dav_fs_getetag,
-};
-
-static dav_prop_insert dav_fs_insert_prop(const dav_resource *resource,
-					  int propid, dav_prop_insert what,
-					  ap_text_header *phdr)
-{
-    const char *value;
-    const char *s;
-    apr_pool_t *p = resource->info->pool;
-    const dav_liveprop_spec *info;
-    int global_ns;
-
-    /* an HTTP-date can be 29 chars plus a null term */
-    /* a 64-bit size can be 20 chars plus a null term */
-    char buf[DAV_TIMEBUF_SIZE];
-
-    /*
-    ** None of FS provider properties are defined if the resource does not
-    ** exist. Just bail for this case.
-    **
-    ** Even though we state that the FS properties are not defined, the
-    ** client cannot store dead values -- we deny that thru the is_writable
-    ** hook function.
-    */
-    if (!resource->exists)
-	return DAV_PROP_INSERT_NOTDEF;
-
-    switch (propid) {
-    case DAV_PROPID_creationdate:
-	/*
-	** Closest thing to a creation date. since we don't actually
-	** perform the operations that would modify ctime (after we
-	** create the file), then we should be pretty safe here.
-	*/
-	dav_format_time(DAV_STYLE_ISO8601,
-                        resource->info->finfo.ctime,
-                        buf);
-	value = buf;
-	break;
-
-    case DAV_PROPID_getcontentlength:
-	/* our property, but not defined on collection resources */
-	if (resource->collection)
-	    return DAV_PROP_INSERT_NOTDEF;
-
-	(void) sprintf(buf, "%" APR_OFF_T_FMT, resource->info->finfo.size);
-	value = buf;
-	break;
-
-    case DAV_PROPID_getetag:
-	value = dav_fs_getetag(resource);
-	break;
-
-    case DAV_PROPID_getlastmodified:
-	dav_format_time(DAV_STYLE_RFC822,
-                        resource->info->finfo.mtime,
-                        buf);
-	value = buf;
-	break;
-
-    case DAV_PROPID_FS_executable:
-	/* our property, but not defined on collection resources */
-	if (resource->collection)
-	    return DAV_PROP_INSERT_NOTDEF;
-
-        /* our property, but not defined on this platform */
-        if (!(resource->info->finfo.valid & APR_FINFO_UPROT))
-            return DAV_PROP_INSERT_NOTDEF;
-
-        /* the files are "ours" so we only need to check owner exec privs */
-	if (resource->info->finfo.protection & APR_UEXECUTE)
-	    value = "T";
-	else
-	    value = "F";
-	break;
-
-    default:
-        /* ### what the heck was this property? */
-	return DAV_PROP_INSERT_NOTDEF;
-    }
-
-    /* assert: value != NULL */
-
-    /* get the information and global NS index for the property */
-    global_ns = dav_get_liveprop_info(propid, &dav_fs_liveprop_group, &info);
-
-    /* assert: info != NULL && info->name != NULL */
-
-    /* DBG3("FS: inserting lp%d:%s  (local %d)", ns, scan->name, scan->ns); */
-
-    if (what == DAV_PROP_INSERT_VALUE) {
-	s = apr_psprintf(p, "<lp%d:%s>%s</lp%d:%s>" DEBUG_CR,
-                         global_ns, info->name, value, global_ns, info->name);
-    }
-    else if (what == DAV_PROP_INSERT_NAME) {
-	s = apr_psprintf(p, "<lp%d:%s/>" DEBUG_CR, global_ns, info->name);
-    }
-    else {
-        /* assert: what == DAV_PROP_INSERT_SUPPORTED */
-        s = apr_psprintf(p,
-                         "<D:supported-live-property D:name=\"%s\" "
-                         "D:namespace=\"%s\"/>" DEBUG_CR,
-                         info->name, dav_fs_namespace_uris[info->ns]);
-    }
-    ap_text_append(p, phdr, s);
-
-    /* we inserted what was asked for */
-    return what;
-}
-
-static int dav_fs_is_writable(const dav_resource *resource, int propid)
-{
-    const dav_liveprop_spec *info;
-
-#ifdef DAV_FS_HAS_EXECUTABLE
-    /* if we have the executable property, and this isn't a collection,
-       then the property is writable. */
-    if (propid == DAV_PROPID_FS_executable && !resource->collection)
-	return 1;
-#endif
-
-    (void) dav_get_liveprop_info(propid, &dav_fs_liveprop_group, &info);
-    return info->is_writable;
-}
-
-static dav_error *dav_fs_patch_validate(const dav_resource *resource,
-					const ap_xml_elem *elem,
-					int operation,
-					void **context,
-					int *defer_to_dead)
-{
-    const ap_text *cdata;
-    const ap_text *f_cdata;
-    char value;
-    dav_elem_private *priv = elem->priv;
-
-    if (priv->propid != DAV_PROPID_FS_executable) {
-	*defer_to_dead = 1;
-	return NULL;
-    }
-
-    if (operation == DAV_PROP_OP_DELETE) {
-	return dav_new_error(resource->info->pool, HTTP_CONFLICT, 0,
-			     "The 'executable' property cannot be removed.");
-    }
-
-    cdata = elem->first_cdata.first;
-
-    /* ### hmm. this isn't actually looking at all the possible text items */
-    f_cdata = elem->first_child == NULL
-	? NULL
-	: elem->first_child->following_cdata.first;
-
-    /* DBG3("name=%s  cdata=%s  f_cdata=%s",elem->name,cdata ? cdata->text : "[null]",f_cdata ? f_cdata->text : "[null]"); */
-
-    if (cdata == NULL) {
-	if (f_cdata == NULL) {
-	    return dav_new_error(resource->info->pool, HTTP_CONFLICT, 0,
-				 "The 'executable' property expects a single "
-				 "character, valued 'T' or 'F'. There was no "
-				 "value submitted.");
-	}
-	cdata = f_cdata;
-    }
-    else if (f_cdata != NULL)
-	goto too_long;
-
-    if (cdata->next != NULL || strlen(cdata->text) != 1)
-	goto too_long;
-
-    value = cdata->text[0];
-    if (value != 'T' && value != 'F') {
-	return dav_new_error(resource->info->pool, HTTP_CONFLICT, 0,
-			     "The 'executable' property expects a single "
-			     "character, valued 'T' or 'F'. The value "
-			     "submitted is invalid.");
-    }
-
-    *context = (void *)(value == 'T');
-
-    return NULL;
-
-  too_long:
-    return dav_new_error(resource->info->pool, HTTP_CONFLICT, 0,
-			 "The 'executable' property expects a single "
-			 "character, valued 'T' or 'F'. The value submitted "
-			 "has too many characters.");
-
-}
-
-static dav_error *dav_fs_patch_exec(const dav_resource *resource,
-				    const ap_xml_elem *elem,
-				    int operation,
-				    void *context,
-				    dav_liveprop_rollback **rollback_ctx)
-{
-    int value = context != NULL;
-    apr_fileperms_t perms = resource->info->finfo.protection;
-    int old_value = (perms & APR_UEXECUTE) != 0;
-
-    /* assert: prop == executable. operation == SET. */
-
-    /* don't do anything if there is no change. no rollback info either. */
-    /* DBG2("new value=%d  (old=%d)", value, old_value); */
-    if (value == old_value)
-	return NULL;
-
-    perms &= ~APR_UEXECUTE;
-    if (value)
-	perms |= APR_UEXECUTE;
-
-    if (apr_file_perms_set(resource->info->pathname, perms) != APR_SUCCESS) {
-	return dav_new_error(resource->info->pool,
-			     HTTP_INTERNAL_SERVER_ERROR, 0,
-			     "Could not set the executable flag of the "
-			     "target resource.");
-    }
-
-    /* update the resource and set up the rollback context */
-    resource->info->finfo.protection = perms;
-    *rollback_ctx = (dav_liveprop_rollback *)old_value;
-
-    return NULL;
-}
-
-static void dav_fs_patch_commit(const dav_resource *resource,
-				int operation,
-				void *context,
-				dav_liveprop_rollback *rollback_ctx)
-{
-    /* nothing to do */
-}
-
-static dav_error *dav_fs_patch_rollback(const dav_resource *resource,
-					int operation,
-					void *context,
-					dav_liveprop_rollback *rollback_ctx)
-{
-    apr_fileperms_t perms = resource->info->finfo.protection & ~APR_UEXECUTE;
-    int value = rollback_ctx != NULL;
-
-    /* assert: prop == executable. operation == SET. */
-
-    /* restore the executable bit */
-    if (value)
-	perms |= APR_UEXECUTE;
-
-    if (apr_file_perms_set(resource->info->pathname, perms) != APR_SUCCESS) {
-	return dav_new_error(resource->info->pool,
-			     HTTP_INTERNAL_SERVER_ERROR, 0,
-			     "After a failure occurred, the resource's "
-			     "executable flag could not be restored.");
-    }
-
-    /* restore the resource's state */
-    resource->info->finfo.protection = perms;
-
-    return NULL;
-}
-
-
-static const dav_hooks_liveprop dav_hooks_liveprop_fs =
-{
-    dav_fs_insert_prop,
-    dav_fs_is_writable,
-    dav_fs_namespace_uris,
-    dav_fs_patch_validate,
-    dav_fs_patch_exec,
-    dav_fs_patch_commit,
-    dav_fs_patch_rollback
-};
-
-static const dav_provider dav_fs_provider =
-{
-    &dav_hooks_repository_fs,
-    &dav_hooks_db_dbm,
-    &dav_hooks_locks_fs,
-    NULL,               /* vsn */
-    NULL                /* binding */
-};
-
-void dav_fs_gather_propsets(apr_array_header_t *uris)
-{
-#ifdef DAV_FS_HAS_EXECUTABLE
-    *(const char **)apr_array_push(uris) =
-        "<http://apache.org/dav/propset/fs/1>";
-#endif
-}
-
-int dav_fs_find_liveprop(const dav_resource *resource,
-                         const char *ns_uri, const char *name,
-                         const dav_hooks_liveprop **hooks)
-{
-    /* don't try to find any liveprops if this isn't "our" resource */
-    if (resource->hooks != &dav_hooks_repository_fs)
-        return 0;
-    return dav_do_find_liveprop(ns_uri, name, &dav_fs_liveprop_group, hooks);
-}
-
-void dav_fs_insert_all_liveprops(request_rec *r, const dav_resource *resource,
-                                 dav_prop_insert what, ap_text_header *phdr)
-{
-    /* don't insert any liveprops if this isn't "our" resource */
-    if (resource->hooks != &dav_hooks_repository_fs)
-        return;
-
-    if (!resource->exists) {
-	/* a lock-null resource */
-	/*
-	** ### technically, we should insert empty properties. dunno offhand
-	** ### what part of the spec said this, but it was essentially thus:
-	** ### "the properties should be defined, but may have no value".
-	*/
-	return;
-    }
-
-    (void) dav_fs_insert_prop(resource, DAV_PROPID_creationdate,
-			      what, phdr);
-    (void) dav_fs_insert_prop(resource, DAV_PROPID_getcontentlength,
-			      what, phdr);
-    (void) dav_fs_insert_prop(resource, DAV_PROPID_getlastmodified,
-			      what, phdr);
-    (void) dav_fs_insert_prop(resource, DAV_PROPID_getetag,
-			      what, phdr);
-
-#ifdef DAV_FS_HAS_EXECUTABLE
-    /* Only insert this property if it is defined for this platform. */
-    (void) dav_fs_insert_prop(resource, DAV_PROPID_FS_executable,
-			      what, phdr);
-#endif
-
-    /* ### we know the others aren't defined as liveprops */
-}
-
-void dav_fs_register(apr_pool_t *p)
-{
-    /* register the namespace URIs */
-    dav_register_liveprop_group(p, &dav_fs_liveprop_group);
-
-    /* register the repository provider */
-    dav_register_provider(p, "filesystem", &dav_fs_provider);
-}
diff --git a/modules/dav/fs/repos.h b/modules/dav/fs/repos.h
deleted file mode 100644
index fbf2a05..0000000
--- a/modules/dav/fs/repos.h
+++ /dev/null
@@ -1,116 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-/*
-** Declarations for the filesystem repository implementation
-*/
-
-#ifndef _DAV_FS_REPOS_H_
-#define _DAV_FS_REPOS_H_
-
-/* the subdirectory to hold all DAV-related information for a directory */
-#define DAV_FS_STATE_DIR		".DAV"
-#define DAV_FS_STATE_FILE_FOR_DIR	".state_for_dir"
-#define DAV_FS_LOCK_NULL_FILE	        ".locknull"
-
-
-/* ensure that our state subdirectory is present */
-void dav_fs_ensure_state_dir(apr_pool_t *p, const char *dirname);
-
-/* return the storage pool associated with a resource */
-apr_pool_t *dav_fs_pool(const dav_resource *resource);
-
-/* return the full pathname for a resource */
-const char *dav_fs_pathname(const dav_resource *resource);
-
-/* return the directory and filename for a resource */
-dav_error * dav_fs_dir_file_name(const dav_resource *resource,
-                                 const char **dirpath,
-                                 const char **fname);
-
-/* return the list of locknull members in this resource's directory */
-dav_error * dav_fs_get_locknull_members(const dav_resource *resource,
-                                        dav_buffer *pbuf);
-
-
-/* DBM functions used by the repository and locking providers */
-extern const dav_hooks_db dav_hooks_db_dbm;
-
-dav_error * dav_dbm_open_direct(apr_pool_t *p, const char *pathname, int ro,
-				dav_db **pdb);
-void dav_dbm_get_statefiles(apr_pool_t *p, const char *fname,
-			    const char **state1, const char **state2);
-dav_error * dav_dbm_delete(dav_db *db, apr_datum_t key);
-dav_error * dav_dbm_store(dav_db *db, apr_datum_t key, apr_datum_t value);
-dav_error * dav_dbm_fetch(dav_db *db, apr_datum_t key, apr_datum_t *pvalue);
-void dav_dbm_freedatum(dav_db *db, apr_datum_t data);
-int dav_dbm_exists(dav_db *db, apr_datum_t key);
-void dav_dbm_close(dav_db *db);
-
-/* where is the lock database located? */
-const char *dav_get_lockdb_path(const request_rec *r);
-
-const dav_hooks_locks *dav_fs_get_lock_hooks(request_rec *r);
-const dav_hooks_propdb *dav_fs_get_propdb_hooks(request_rec *r);
-
-void dav_fs_gather_propsets(apr_array_header_t *uris);
-int dav_fs_find_liveprop(const dav_resource *resource,
-                         const char *ns_uri, const char *name,
-                         const dav_hooks_liveprop **hooks);
-void dav_fs_insert_all_liveprops(request_rec *r, const dav_resource *resource,
-                                 dav_prop_insert what, ap_text_header *phdr);
-
-void dav_fs_register(apr_pool_t *p);
-
-#endif /* _DAV_FS_REPOS_H_ */
diff --git a/modules/dav/main/.cvsignore b/modules/dav/main/.cvsignore
deleted file mode 100644
index f877eb5..0000000
--- a/modules/dav/main/.cvsignore
+++ /dev/null
@@ -1,15 +0,0 @@
-.deps
-.libs
-*.la
-modules.mk
-Makefile
-*.lo
-*.slo
-*.so
-Debug
-Release
-*.plg
-*.aps
-*.dep
-*.mak
-*.rc
diff --git a/modules/dav/main/Makefile.in b/modules/dav/main/Makefile.in
deleted file mode 100644
index 7c5c149..0000000
--- a/modules/dav/main/Makefile.in
+++ /dev/null
@@ -1,3 +0,0 @@
-# a modules Makefile has no explicit targets -- they will be defined by
-# whatever modules are enabled. just grab special.mk to deal with this.
-include $(top_srcdir)/build/special.mk
diff --git a/modules/dav/main/NWGNUmakefile b/modules/dav/main/NWGNUmakefile
deleted file mode 100644
index 5073842..0000000
--- a/modules/dav/main/NWGNUmakefile
+++ /dev/null
@@ -1,272 +0,0 @@
-#
-# Declare the sub-directories to be built here
-#
-
-SUBDIRS = \
-	$(EOLIST) 
-
-#
-# Get the 'head' of the build environment.  This includes default targets and
-# paths to tools
-#
-
-include $(AP_WORK)\build\NWGNUhead.inc
-
-#
-# build this level's files
-#
-# Make sure all needed macro's are defined
-#
-
-#
-# These directories will be at the beginning of the include list, followed by
-# INCDIRS
-#
-XINCDIRS	+= \
-			$(AP_WORK)/srclib/apr/include \
-			$(AP_WORK)/srclib/include/arch/NetWare \
-			$(AP_WORK)/srclib/apr-util/include \
-			$(AP_WORK)/include \
-			$(AP_WORK)/os/NetWare \
-			$(AP_WORK)/server/mpm/NetWare \
-			$(AP_WORK)/srclib/pcre \
-			$(NWOS) \
-			$(EOLIST)
-
-#
-# These flags will come after CFLAGS
-#
-XCFLAGS		+= \
-			$(EOLIST)
-
-#
-# These defines will come after DEFINES
-#
-XDEFINES	+= \
-			$(EOLIST)
-
-#
-# These flags will be added to the link.opt file
-#
-XLFLAGS		+= \
-			$(EOLIST)
-
-#
-# These values will be appended to the correct variables based on the value of
-# RELEASE
-#
-ifeq "$(RELEASE)" "debug"
-XINCDIRS	+= \
-			$(EOLIST)
-
-XCFLAGS		+= \
-			$(EOLIST)
-
-XDEFINES	+= \
-			$(EOLIST)
-
-XLFLAGS		+= \
-		   	$(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "noopt"
-XINCDIRS	+= \
-			$(EOLIST)
-
-XCFLAGS		+= \
-			$(EOLIST)
-
-XDEFINES	+= \
-			$(EOLIST)
-
-XLFLAGS		+= \
-		   	$(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "release"
-XINCDIRS	+= \
-			$(EOLIST)
-
-XCFLAGS		+= \
-			$(EOLIST)
-
-XDEFINES	+= \
-			$(EOLIST)
-
-XLFLAGS		+= \
-			$(EOLIST)
-endif
-
-#
-# These are used by the link target if an NLM is being generated
-# This is used by the link 'name' directive to name the nlm.  If left blank
-# TARGET_nlm (see below) will be used.
-#
-NLM_NAME		= mod_DAV
-
-#
-# This is used by the link '-desc ' directive. 
-# If left blank, NLM_NAME will be used.
-#
-NLM_DESCRIPTION	= Apache DAV module
-
-#
-# This is used by the '-threadname' directive.  If left blank,
-# NLM_NAME Thread will be used.
-#
-NLM_THREAD_NAME	= mod_DAV
-
-#
-# If this is specified, it will override VERSION value in 
-# $(AP_WORK)\build\NWGNUenvironment.inc
-#
-NLM_VERSION		= 
-
-#
-# If this is specified, it will override the default of 64K
-#
-NLM_STACK_SIZE	= 65536
- 
-
-#
-# If this is specified it will be used by the link '-entry' directive
-#
-NLM_ENTRY_SYM	= _LibCPrelude
-
-#
-# If this is specified it will be used by the link '-exit' directive
-#
-NLM_EXIT_SYM	= _LibCPostlude
-
-#
-# If this is specified it will be used by the link '-check' directive
-#
-NLM_CHECK_SYM	=
-
-#
-# If this is specified it will be used by the link '-flags' directive
-#
-NLM_FLAGS		= AUTOUNLOAD, PSEUDOPREEMPTION
- 
-#
-# If this is specified it will be linked in with the XDCData option in the def 
-# file instead of the default of $(NWOS)/apache.xdc.  XDCData can be disabled
-# by setting APACHE_UNIPROC in the environment
-#
-XDCDATA         = 
-
-#
-# Declare all target files (you must add your files here)
-#
-
-#
-# If there is an NLM target, put it here
-#
-TARGET_nlm = \
-	$(OBJDIR)/mod_dav.nlm \
-	$(EOLIST)
-
-#
-# If there is an LIB target, put it here
-#
-TARGET_lib = \
-	$(EOLIST)
-
-#
-# These are the OBJ files needed to create the NLM target above.
-# Paths must all use the '/' character
-#
-FILES_nlm_objs = \
-	$(OBJDIR)/mod_dav.o \
-	$(OBJDIR)/props.o \
-	$(OBJDIR)/util.o \
-	$(OBJDIR)/util_lock.o \
-	$(OBJDIR)/liveprop.o \
-	$(OBJDIR)/providers.o \
-	$(OBJDIR)/std_liveprop.o \
-	$(EOLIST)
-
-#
-# These are the LIB files needed to create the NLM target above.
-# These will be added as a library command in the link.opt file.
-#
-FILES_nlm_libs = \
-   	libcpre.o \
-	$(EOLIST)
-
-#
-# These are the modules that the above NLM target depends on to load.
-# These will be added as a module command in the link.opt file.
-#
-FILES_nlm_modules = \
-	Apache2 \
-	Libc \
-	$(EOLIST)
-
-#
-# If the nlm has a msg file, put it's path here
-#
-FILE_nlm_msg =
- 
-#
-# If the nlm has a hlp file put it's path here
-#
-FILE_nlm_hlp =
-
-#
-# If this is specified, it will override $(NWOS)\copyright.txt.
-#
-FILE_nlm_copyright =
-
-#
-# Any additional imports go here
-#
-FILES_nlm_Ximports = \
-	@libc.imp \
-	@$(APR)/aprlib.imp \
-	@httpd.imp \
-	$(EOLIST)
- 
-#   
-# Any symbols exported to here
-#
-FILES_nlm_exports = \
-	dav_module \
-	@dav.imp \
-	$(EOLIST)
-	
-#   
-# These are the OBJ files needed to create the LIB target above.
-# Paths must all use the '/' character
-#
-FILES_lib_objs = \
-		$(EOLIST)
-
-#
-# implement targets and dependancies (leave this section alone)
-#
-
-libs :: $(OBJDIR) $(TARGET_lib)
-
-nlms :: libs $(TARGET_nlm)
-
-#
-# Updated this target to create necessary directories and copy files to the 
-# correct place.  (See $(AP_WORK)\build\NWGNUhead.inc for examples)
-#
-install :: nlms FORCE
-	copy $(OBJDIR)\mod_dav.nlm $(INSTALL)\Apache2\modules\*.*
-    
-#
-# Any specialized rules here
-#
-
-#
-# Include the 'tail' makefile that has targets that depend on variables defined
-# in this makefile
-#
-
-include $(AP_WORK)\build\NWGNUtail.inc
-
-
-	
diff --git a/modules/dav/main/config5.m4 b/modules/dav/main/config5.m4
deleted file mode 100644
index fa2eee4..0000000
--- a/modules/dav/main/config5.m4
+++ /dev/null
@@ -1,22 +0,0 @@
-dnl modules enabled in this directory by default
-
-APACHE_MODPATH_INIT(dav/main)
-
-dav_objects="mod_dav.lo props.lo util.lo util_lock.lo liveprop.lo providers.lo std_liveprop.lo"
-
-if test "$enable_http" = "no"; then
-  dav_enable=no
-else
-  dav_enable=most
-fi
-
-APACHE_MODULE(dav, WebDAV protocol handling, $dav_objects, , $dav_enable)
-
-if test "$dav_enable" != "no" -o "$enable_dav" != "no"; then
-  apache_need_expat=yes
-
-  APR_ADDTO(INCLUDES, [-I\$(top_srcdir)/$modpath_current])
-fi
-
-
-APACHE_MODPATH_FINISH
diff --git a/modules/dav/main/dav.imp b/modules/dav/main/dav.imp
deleted file mode 100644
index 725bfb4..0000000
--- a/modules/dav/main/dav.imp
+++ /dev/null
@@ -1,19 +0,0 @@
-(mod_dav)
-dav_hook_gather_propsets,
-dav_hook_find_liveprop,
-dav_hook_insert_all_liveprops,
-dav_new_error,
-dav_set_bufsize,
-dav_xmlns_add,
-dav_check_bufsize,
-dav_push_error,
-dav_buffer_init,
-dav_buffer_place,
-dav_buffer_append,
-dav_add_response,
-dav_buffer_place_mem,
-dav_lock_query,
-dav_get_liveprop_info,
-dav_do_find_liveprop,
-dav_register_liveprop_group,
-dav_register_provider
\ No newline at end of file
diff --git a/modules/dav/main/liveprop.c b/modules/dav/main/liveprop.c
deleted file mode 100644
index e65f3f6..0000000
--- a/modules/dav/main/liveprop.c
+++ /dev/null
@@ -1,177 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-#include "apr_pools.h"
-#include "apr_hash.h"
-#include "apr_errno.h"
-#include "apr_strings.h"
-#include "util_xml.h"   /* for ap_text_header */
-#include "mod_dav.h"
-
-
-static apr_hash_t *dav_liveprop_uris = NULL;
-static int dav_liveprop_count = 0;
-
-
-static apr_status_t dav_cleanup_liveprops(void *ctx)
-{
-    dav_liveprop_uris = NULL;
-    dav_liveprop_count = 0;
-    return APR_SUCCESS;
-}
-
-static void dav_register_liveprop_namespace(apr_pool_t *p, const char *uri)
-{
-    int value;
-
-    if (dav_liveprop_uris == NULL) {
-        dav_liveprop_uris = apr_hash_make(p);
-        apr_pool_cleanup_register(p, NULL, dav_cleanup_liveprops, apr_pool_cleanup_null);
-    }
-
-    value = (int)apr_hash_get(dav_liveprop_uris, uri, APR_HASH_KEY_STRING);
-    if (value != 0) {
-        /* already registered */
-        return;
-    }
-
-    /* start at 1, and count up */
-    apr_hash_set(dav_liveprop_uris, uri, APR_HASH_KEY_STRING,
-                 (void *)++dav_liveprop_count);
-}
-
-DAV_DECLARE(int) dav_get_liveprop_ns_index(const char *uri)
-{
-    return (int)apr_hash_get(dav_liveprop_uris, uri, APR_HASH_KEY_STRING);
-}
-
-int dav_get_liveprop_ns_count(void)
-{
-    return dav_liveprop_count;
-}
-
-void dav_add_all_liveprop_xmlns(apr_pool_t *p, ap_text_header *phdr)
-{
-    apr_hash_index_t *idx = apr_hash_first(p, dav_liveprop_uris);
-
-    for ( ; idx != NULL; idx = apr_hash_next(idx) ) {
-        const void *key;
-        void *val;
-        const char *s;
-
-        apr_hash_this(idx, &key, NULL, &val);
-
-        s = apr_psprintf(p, " xmlns:lp%d=\"%s\"", (int)val, (const char *)key);
-        ap_text_append(p, phdr, s);
-    }
-}
-
-DAV_DECLARE(int) dav_do_find_liveprop(const char *ns_uri, const char *name,
-                                      const dav_liveprop_group *group,
-                                      const dav_hooks_liveprop **hooks)
-{
-    const char * const *uris = group->namespace_uris;
-    const dav_liveprop_spec *scan;
-    int ns;
-
-    /* first: locate the namespace in the namespace table */
-    for (ns = 0; uris[ns] != NULL; ++ns)
-        if (strcmp(ns_uri, uris[ns]) == 0)
-            break;
-    if (uris[ns] == NULL) {
-	/* not our property (the namespace matched none of ours) */
-	return 0;
-    }
-
-    /* second: look for the property in the liveprop specs */
-    for (scan = group->specs; scan->name != NULL; ++scan)
-	if (ns == scan->ns && strcmp(name, scan->name) == 0) {
-            *hooks = group->hooks;
-	    return scan->propid;
-        }
-
-    /* not our property (same namespace, but no matching prop name) */
-    return 0;
-}
-
-DAV_DECLARE(int) dav_get_liveprop_info(int propid,
-                                       const dav_liveprop_group *group,
-                                       const dav_liveprop_spec **info)
-{
-    const dav_liveprop_spec *scan;
-
-    for (scan = group->specs; scan->name != NULL; ++scan) {
-        if (scan->propid == propid) {
-            *info = scan;
-
-            /* map the provider-local NS into a global NS index */
-            return dav_get_liveprop_ns_index(group->namespace_uris[scan->ns]);
-        }
-    }
-
-    /* assert: should not reach this point */
-    *info = NULL;
-    return 0;
-}
-
-DAV_DECLARE(void) dav_register_liveprop_group(apr_pool_t *p, 
-                                              const dav_liveprop_group *group)
-{
-    /* register the namespace URIs */
-    const char * const * uris = group->namespace_uris;
-
-    for ( ; *uris != NULL; ++uris) {
-        dav_register_liveprop_namespace(p, *uris);
-    }
-}
diff --git a/modules/dav/main/mod_dav.c b/modules/dav/main/mod_dav.c
deleted file mode 100644
index 4c26c04..0000000
--- a/modules/dav/main/mod_dav.c
+++ /dev/null
@@ -1,4668 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-/*
- * DAV extension module for Apache 2.0.*
- *
- * This module is repository-independent. It depends on hooks provided by a
- * repository implementation.
- *
- * APACHE ISSUES:
- *   - within a DAV hierarchy, if an unknown method is used and we default
- *     to Apache's implementation, it sends back an OPTIONS with the wrong
- *     set of methods -- there is NO HOOK for us.
- *     therefore: we need to manually handle the HTTP_METHOD_NOT_ALLOWED
- *       and HTTP_NOT_IMPLEMENTED responses (not ap_send_error_response).
- *   - process_mkcol_body() had to dup code from ap_setup_client_block().
- *   - it would be nice to get status lines from Apache for arbitrary
- *     status codes
- *   - it would be nice to be able to extend Apache's set of response
- *     codes so that it doesn't return 500 when an unknown code is placed
- *     into r->status.
- *   - http_vhost functions should apply "const" to their params
- *
- * DESIGN NOTES:
- *   - For PROPFIND, we batch up the entire response in memory before
- *     sending it. We may want to reorganize around sending the information
- *     as we suck it in from the propdb. Alternatively, we should at least
- *     generate a total Content-Length if we're going to buffer in memory
- *     so that we can keep the connection open.
- */
-
-#include "apr_strings.h"
-#include "apr_lib.h"            /* for apr_is* */
-
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-#include "httpd.h"
-#include "http_config.h"
-#include "http_core.h"
-#include "http_log.h"
-#include "http_main.h"
-#include "http_protocol.h"
-#include "http_request.h"
-#include "util_script.h"
-
-#include "mod_dav.h"
-
-
-/* ### what is the best way to set this? */
-#define DAV_DEFAULT_PROVIDER    "filesystem"
-
-enum {
-    DAV_ENABLED_UNSET = 0,
-    DAV_ENABLED_OFF,
-    DAV_ENABLED_ON
-};
-
-/* per-dir configuration */
-typedef struct {
-    const char *provider_name;
-    const dav_provider *provider;
-    const char *dir;
-    int locktimeout;
-    int allow_depthinfinity;
-
-} dav_dir_conf;
-
-/* per-server configuration */
-typedef struct {
-    int unused;
-
-} dav_server_conf;
-
-#define DAV_INHERIT_VALUE(parent, child, field) \
-                ((child)->field ? (child)->field : (parent)->field)
-
-
-/* forward-declare for use in configuration lookup */
-extern module DAV_DECLARE_DATA dav_module;
-
-/* DAV methods */
-enum {
-    DAV_M_VERSION_CONTROL = 0,
-    DAV_M_CHECKOUT,
-    DAV_M_UNCHECKOUT,
-    DAV_M_CHECKIN,
-    DAV_M_UPDATE,
-    DAV_M_LABEL,
-    DAV_M_REPORT,
-    DAV_M_MKWORKSPACE,
-    DAV_M_MKACTIVITY,
-    DAV_M_BASELINE_CONTROL,
-    DAV_M_MERGE,
-    DAV_M_BIND,
-    DAV_M_LAST
-};
-
-static int dav_methods[DAV_M_LAST];
-
-static int dav_init_handler(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp,
-                             server_rec *s)
-{
-    /* DBG0("dav_init_handler"); */
-
-    /* Register DAV methods */
-    dav_methods[DAV_M_VERSION_CONTROL] = ap_method_register(p, "VERSION-CONTROL");
-    dav_methods[DAV_M_CHECKOUT] = ap_method_register(p, "CHECKOUT");
-    dav_methods[DAV_M_UNCHECKOUT] = ap_method_register(p, "UNCHECKOUT");
-    dav_methods[DAV_M_CHECKIN] = ap_method_register(p, "CHECKIN");
-    dav_methods[DAV_M_UPDATE] = ap_method_register(p, "UPDATE");
-    dav_methods[DAV_M_LABEL] = ap_method_register(p, "LABEL");
-    dav_methods[DAV_M_REPORT] = ap_method_register(p, "REPORT");
-    dav_methods[DAV_M_MKWORKSPACE] = ap_method_register(p, "MKWORKSPACE");
-    dav_methods[DAV_M_MKACTIVITY] = ap_method_register(p, "MKACTIVITY");
-    dav_methods[DAV_M_BASELINE_CONTROL] = ap_method_register(p, "BASELINE-CONTROL");
-    dav_methods[DAV_M_MERGE] = ap_method_register(p, "MERGE");
-    dav_methods[DAV_M_BIND] = ap_method_register(p, "BIND");
-
-    ap_add_version_component(p, "DAV/2");
-
-    return OK;
-}
-
-static void *dav_create_server_config(apr_pool_t *p, server_rec *s)
-{
-    dav_server_conf *newconf;
-
-    newconf = (dav_server_conf *)apr_pcalloc(p, sizeof(*newconf));
-
-    /* ### this isn't used at the moment... */
-
-    return newconf;
-}
-
-static void *dav_merge_server_config(apr_pool_t *p, void *base, void *overrides)
-{
-#if 0
-    dav_server_conf *child = overrides;
-#endif
-    dav_server_conf *newconf;
-
-    newconf = (dav_server_conf *)apr_pcalloc(p, sizeof(*newconf));
-
-    /* ### nothing to merge right now... */
-
-    return newconf;
-}
-
-static void *dav_create_dir_config(apr_pool_t *p, char *dir)
-{
-    /* NOTE: dir==NULL creates the default per-dir config */
-
-    dav_dir_conf *conf;
-
-    conf = (dav_dir_conf *)apr_pcalloc(p, sizeof(*conf));
-
-    /* clean up the directory to remove any trailing slash */
-    if (dir != NULL) {
-        char *d;
-        apr_size_t l;
-
-        d = apr_pstrdup(p, dir);
-        l = strlen(d);
-        if (l > 1 && d[l - 1] == '/')
-            d[l - 1] = '\0';
-        conf->dir = d;
-    }
-
-    return conf;
-}
-
-static void *dav_merge_dir_config(apr_pool_t *p, void *base, void *overrides)
-{
-    dav_dir_conf *parent = base;
-    dav_dir_conf *child = overrides;
-    dav_dir_conf *newconf = (dav_dir_conf *)apr_pcalloc(p, sizeof(*newconf));
-
-    /* DBG3("dav_merge_dir_config: new=%08lx  base=%08lx  overrides=%08lx",
-       (long)newconf, (long)base, (long)overrides); */
-
-    newconf->provider_name = DAV_INHERIT_VALUE(parent, child, provider_name);
-    newconf->provider = DAV_INHERIT_VALUE(parent, child, provider);
-    if (parent->provider_name != NULL) {
-        if (child->provider_name == NULL) {
-            ap_log_error(APLOG_MARK, APLOG_ERR | APLOG_NOERRNO, 0, NULL,
-                         "\"DAV Off\" cannot be used to turn off a subtree "
-                         "of a DAV-enabled location.");
-        }
-        else if (strcasecmp(child->provider_name,
-                            parent->provider_name) != 0) {
-            ap_log_error(APLOG_MARK, APLOG_ERR | APLOG_NOERRNO, 0, NULL,
-                         "A subtree cannot specify a different DAV provider "
-                         "than its parent.");
-        }
-    }
-
-    newconf->locktimeout = DAV_INHERIT_VALUE(parent, child, locktimeout);
-    newconf->dir = DAV_INHERIT_VALUE(parent, child, dir);
-    newconf->allow_depthinfinity = DAV_INHERIT_VALUE(parent, child,
-                                                     allow_depthinfinity);
-
-    return newconf;
-}
-
-static const dav_provider *dav_get_provider(request_rec *r)
-{
-    dav_dir_conf *conf;
-
-    conf = ap_get_module_config(r->per_dir_config, &dav_module);
-    /* assert: conf->provider_name != NULL
-       (otherwise, DAV is disabled, and we wouldn't be here) */
-
-    /* assert: conf->provider != NULL
-       (checked when conf->provider_name is set) */
-    return conf->provider;
-}
-
-const dav_hooks_locks *dav_get_lock_hooks(request_rec *r)
-{
-    return dav_get_provider(r)->locks;
-}
-
-const dav_hooks_propdb *dav_get_propdb_hooks(request_rec *r)
-{
-    return dav_get_provider(r)->propdb;
-}
-
-const dav_hooks_vsn *dav_get_vsn_hooks(request_rec *r)
-{
-    return dav_get_provider(r)->vsn;
-}
-
-const dav_hooks_binding *dav_get_binding_hooks(request_rec *r)
-{
-    return dav_get_provider(r)->binding;
-}
-
-/*
- * Command handler for the DAV directive, which is TAKE1.
- */
-static const char *dav_cmd_dav(cmd_parms *cmd, void *config, const char *arg1)
-{
-    dav_dir_conf *conf = (dav_dir_conf *)config;
-
-    if (strcasecmp(arg1, "on") == 0) {
-        conf->provider_name = DAV_DEFAULT_PROVIDER;
-    }
-    else if (strcasecmp(arg1, "off") == 0) {
-        conf->provider_name = NULL;
-        conf->provider = NULL;
-    }
-    else {
-        conf->provider_name = apr_pstrdup(cmd->pool, arg1);
-    }
-
-    if (conf->provider_name != NULL) {
-        /* lookup and cache the actual provider now */
-        conf->provider = dav_lookup_provider(conf->provider_name);
-
-        if (conf->provider == NULL) {
-            /* by the time they use it, the provider should be loaded and
-               registered with us. */
-            return apr_psprintf(cmd->pool,
-                                "Unknown DAV provider: %s",
-                                conf->provider_name);
-        }
-    }
-
-    return NULL;
-}
-
-/*
- * Command handler for the DAVDepthInfinity directive, which is FLAG.
- */
-static const char *dav_cmd_davdepthinfinity(cmd_parms *cmd, void *config,
-                                            int arg)
-{
-    dav_dir_conf *conf = (dav_dir_conf *)config;
-
-    if (arg)
-        conf->allow_depthinfinity = DAV_ENABLED_ON;
-    else
-        conf->allow_depthinfinity = DAV_ENABLED_OFF;
-    return NULL;
-}
-
-/*
- * Command handler for DAVMinTimeout directive, which is TAKE1
- */
-static const char *dav_cmd_davmintimeout(cmd_parms *cmd, void *config,
-                                         const char *arg1)
-{
-    dav_dir_conf *conf = (dav_dir_conf *)config;
-
-    conf->locktimeout = atoi(arg1);
-    if (conf->locktimeout < 0)
-        return "DAVMinTimeout requires a non-negative integer.";
-
-    return NULL;
-}
-
-/*
-** dav_error_response()
-**
-** Send a nice response back to the user. In most cases, Apache doesn't
-** allow us to provide details in the body about what happened. This
-** function allows us to completely specify the response body.
-**
-** ### this function is not logging any errors! (e.g. the body)
-*/
-static int dav_error_response(request_rec *r, int status, const char *body)
-{
-    r->status = status;
-
-    /* ### I really don't think this is needed; gotta test */
-    r->status_line = ap_get_status_line(status);
-
-    r->content_type = "text/html";
-
-    /* since we're returning DONE, ensure the request body is consumed. */
-    (void) ap_discard_request_body(r);
-
-    /* begin the response now... */
-    ap_rvputs(r,
-              DAV_RESPONSE_BODY_1,
-              r->status_line,
-              DAV_RESPONSE_BODY_2,
-              &r->status_line[4],
-              DAV_RESPONSE_BODY_3,
-              body,
-              DAV_RESPONSE_BODY_4,
-              ap_psignature("<hr />\n", r),
-              DAV_RESPONSE_BODY_5,
-              NULL);
-
-    /* the response has been sent. */
-    /*
-     * ### Use of DONE obviates logging..!
-     */
-    return DONE;
-}
-
-
-/*
- * Send a "standardized" error response based on the error's namespace & tag
- */
-static int dav_error_response_tag(request_rec *r,
-                                  dav_error *err)
-{
-    r->status = err->status;
-
-    /* ### I really don't think this is needed; gotta test */
-    r->status_line = ap_get_status_line(err->status);
-
-    r->content_type = DAV_XML_CONTENT_TYPE;
-
-    /* since we're returning DONE, ensure the request body is consumed. */
-    (void) ap_discard_request_body(r);
-
-    ap_rputs(DAV_XML_HEADER DEBUG_CR
-             "<D:error xmlns:D=\"DAV:\"", r);
-
-    if (err->desc != NULL) {
-        /* ### should move this namespace somewhere (with the others!) */
-        ap_rputs(" xmlns:m=\"http://apache.org/dav/xmlns\"", r);
-    }
-
-    if (err->namespace != NULL) {
-        ap_rprintf(r,
-                   " xmlns:C=\"%s\">" DEBUG_CR
-                   "<C:%s/>" DEBUG_CR,
-                   err->namespace, err->tagname);
-    }
-    else {
-        ap_rprintf(r,
-                   ">" DEBUG_CR
-                   "<D:%s/>" DEBUG_CR, err->tagname);
-    }
-
-    /* here's our mod_dav specific tag: */
-    if (err->desc != NULL) {
-        ap_rprintf(r,
-                   "<m:human-readable errcode=\"%d\">" DEBUG_CR
-                   "%s" DEBUG_CR
-                   "</m:human-readable>" DEBUG_CR,
-                   err->error_id,
-                   apr_xml_quote_string(r->pool, err->desc, 0));
-    }
-
-    ap_rputs("</D:error>" DEBUG_CR, r);
-
-    /* the response has been sent. */
-    /*
-     * ### Use of DONE obviates logging..!
-     */
-    return DONE;
-}
-
-
-/*
- * Apache's URI escaping does not replace '&' since that is a valid character
- * in a URI (to form a query section). We must explicitly handle it so that
- * we can embed the URI into an XML document.
- */
-static const char *dav_xml_escape_uri(apr_pool_t *p, const char *uri)
-{
-    const char *e_uri = ap_escape_uri(p, uri);
-
-    /* check the easy case... */
-    if (ap_strchr_c(e_uri, '&') == NULL)
-        return e_uri;
-
-    /* there was a '&', so more work is needed... sigh. */
-
-    /*
-     * Note: this is a teeny bit of overkill since we know there are no
-     * '<' or '>' characters, but who cares.
-     */
-    return ap_xml_quote_string(p, e_uri, 0);
-}
-
-static void dav_send_multistatus(request_rec *r, int status,
-                                 dav_response *first,
-                                 apr_array_header_t *namespaces)
-{
-    /* Set the correct status and Content-Type */
-    r->status = status;
-    r->content_type = DAV_XML_CONTENT_TYPE;
-
-    /* Send the headers and actual multistatus response now... */
-    ap_rputs(DAV_XML_HEADER DEBUG_CR
-             "<D:multistatus xmlns:D=\"DAV:\"", r);
-
-    if (namespaces != NULL) {
-       int i;
-
-       for (i = namespaces->nelts; i--; ) {
-           ap_rprintf(r, " xmlns:ns%d=\"%s\"", i,
-                      AP_XML_GET_URI_ITEM(namespaces, i));
-       }
-    }
-
-    /* ap_rputc('>', r); */
-    ap_rputs(">" DEBUG_CR, r);
-
-    for (; first != NULL; first = first->next) {
-        ap_text *t;
-
-        if (first->propresult.xmlns == NULL) {
-            ap_rputs("<D:response>", r);
-        }
-        else {
-            ap_rputs("<D:response", r);
-            for (t = first->propresult.xmlns; t; t = t->next) {
-                ap_rputs(t->text, r);
-            }
-            ap_rputc('>', r);
-        }
-
-        ap_rputs(DEBUG_CR "<D:href>", r);
-        ap_rputs(dav_xml_escape_uri(r->pool, first->href), r);
-        ap_rputs("</D:href>" DEBUG_CR, r);
-
-        if (first->propresult.propstats == NULL) {
-            /* use the Status-Line text from Apache.  Note, this will
-             * default to 500 Internal Server Error if first->status
-             * is not a known (or valid) status code.
-             */
-            ap_rprintf(r,
-                       "<D:status>HTTP/1.1 %s</D:status>" DEBUG_CR,
-                       ap_get_status_line(first->status));
-        }
-        else {
-            /* assume this includes <propstat> and is quoted properly */
-            for (t = first->propresult.propstats; t; t = t->next) {
-                ap_rputs(t->text, r);
-            }
-        }
-
-        if (first->desc != NULL) {
-            /*
-             * We supply the description, so we know it doesn't have to
-             * have any escaping/encoding applied to it.
-             */
-            ap_rputs("<D:responsedescription>", r);
-            ap_rputs(first->desc, r);
-            ap_rputs("</D:responsedescription>" DEBUG_CR, r);
-        }
-
-        ap_rputs("</D:response>" DEBUG_CR, r);
-    }
-
-    ap_rputs("</D:multistatus>" DEBUG_CR, r);
-}
-
-/*
- * dav_log_err()
- *
- * Write error information to the log.
- */
-static void dav_log_err(request_rec *r, dav_error *err, int level)
-{
-    dav_error *errscan;
-
-    /* Log the errors */
-    /* ### should have a directive to log the first or all */
-    for (errscan = err; errscan != NULL; errscan = errscan->prev) {
-        if (errscan->desc == NULL)
-            continue;
-
-        if (errscan->save_errno != 0) {
-            errno = errscan->save_errno;
-            ap_log_rerror(APLOG_MARK, level, errno, r, "%s  [%d, #%d]",
-                          errscan->desc, errscan->status, errscan->error_id);
-        }
-        else {
-            ap_log_rerror(APLOG_MARK, level | APLOG_NOERRNO, 0, r,
-                          "%s  [%d, #%d]",
-                          errscan->desc, errscan->status, errscan->error_id);
-        }
-    }
-}
-
-/*
- * dav_handle_err()
- *
- * Handle the standard error processing. <err> must be non-NULL.
- *
- * <response> is set by the following:
- *   - dav_validate_request()
- *   - dav_add_lock()
- *   - repos_hooks->remove_resource
- *   - repos_hooks->move_resource
- *   - repos_hooks->copy_resource
- *   - vsn_hooks->update
- */
-static int dav_handle_err(request_rec *r, dav_error *err,
-                          dav_response *response)
-{
-    /* log the errors */
-    dav_log_err(r, err, APLOG_ERR);
-
-    if (response == NULL) {
-        dav_error *stackerr = err;
-
-        /* our error messages are safe; tell Apache this */
-        apr_table_setn(r->notes, "verbose-error-to", "*");
-
-        /* Didn't get a multistatus response passed in, but we still
-           might be able to generate a standard <D:error> response.
-           Search the error stack for an errortag. */
-        while (stackerr != NULL && stackerr->tagname == NULL)
-            stackerr = stackerr->prev;
-
-        if (stackerr != NULL && stackerr->tagname != NULL)
-            return dav_error_response_tag(r, stackerr);
-
-        return err->status;
-    }
-
-    /* since we're returning DONE, ensure the request body is consumed. */
-    (void) ap_discard_request_body(r);
-
-    /* send the multistatus and tell Apache the request/response is DONE. */
-    dav_send_multistatus(r, err->status, response, NULL);
-    return DONE;
-}
-
-/* handy function for return values of methods that (may) create things */
-static int dav_created(request_rec *r, const char *locn, const char *what,
-                       int replaced)
-{
-    const char *body;
-
-    if (locn == NULL) {
-        locn = r->uri;
-    }
-
-    /* did the target resource already exist? */
-    if (replaced) {
-        /* Apache will supply a default message */
-        return HTTP_NO_CONTENT;
-    }
-
-    /* Per HTTP/1.1, S10.2.2: add a Location header to contain the
-     * URI that was created. */
-
-    /* Convert locn to an absolute URI, and return in Location header */
-    apr_table_setn(r->headers_out, "Location", ap_construct_url(r->pool, locn, r));
-
-    /* ### insert an ETag header? see HTTP/1.1 S10.2.2 */
-
-    /* Apache doesn't allow us to set a variable body for HTTP_CREATED, so
-     * we must manufacture the entire response. */
-    body = apr_psprintf(r->pool, "%s %s has been created.",
-                        what, ap_escape_html(r->pool, locn));
-    return dav_error_response(r, HTTP_CREATED, body);
-}
-
-/* ### move to dav_util? */
-int dav_get_depth(request_rec *r, int def_depth)
-{
-    const char *depth = apr_table_get(r->headers_in, "Depth");
-
-    if (depth == NULL) {
-        return def_depth;
-    }
-
-    if (strcasecmp(depth, "infinity") == 0) {
-        return DAV_INFINITY;
-    }
-    else if (strcmp(depth, "0") == 0) {
-        return 0;
-    }
-    else if (strcmp(depth, "1") == 0) {
-        return 1;
-    }
-
-    /* The caller will return an HTTP_BAD_REQUEST. This will augment the
-     * default message that Apache provides. */
-    ap_log_rerror(APLOG_MARK, APLOG_ERR | APLOG_NOERRNO, 0, r,
-                  "An invalid Depth header was specified.");
-    return -1;
-}
-
-static int dav_get_overwrite(request_rec *r)
-{
-    const char *overwrite = apr_table_get(r->headers_in, "Overwrite");
-
-    if (overwrite == NULL) {
-        return 1; /* default is "T" */
-    }
-
-    if ((*overwrite == 'F' || *overwrite == 'f') && overwrite[1] == '\0') {
-        return 0;
-    }
-
-    if ((*overwrite == 'T' || *overwrite == 't') && overwrite[1] == '\0') {
-        return 1;
-    }
-
-    /* The caller will return an HTTP_BAD_REQUEST. This will augment the
-     * default message that Apache provides. */
-    ap_log_rerror(APLOG_MARK, APLOG_ERR | APLOG_NOERRNO, 0, r,
-                  "An invalid Overwrite header was specified.");
-    return -1;
-}
-
-/* resolve a request URI to a resource descriptor.
- *
- * If label_allowed != 0, then allow the request target to be altered by
- * a Label: header.
- *
- * If use_checked_in is true, then the repository provider should return
- * the resource identified by the DAV:checked-in property of the resource
- * identified by the Request-URI.
- */
-static dav_error *dav_get_resource(request_rec *r, int label_allowed,
-                                   int use_checked_in, dav_resource **res_p)
-{
-    dav_dir_conf *conf;
-    const char *label = NULL;
-    dav_error *err;
-
-    /* if the request target can be overridden, get any target selector */
-    if (label_allowed) {
-        label = apr_table_get(r->headers_in, "label");
-    }
-
-    conf = ap_get_module_config(r->per_dir_config, &dav_module);
-    /* assert: conf->provider != NULL */
-
-    /* resolve the resource */
-    err = (*conf->provider->repos->get_resource)(r, conf->dir,
-                                                 label, use_checked_in,
-                                                 res_p);
-    if (err != NULL) {
-        err = dav_push_error(r->pool, err->status, 0,
-                             "Could not fetch resource information.", err);
-        return err;
-    }
-
-    /* Note: this shouldn't happen, but just be sure... */
-    if (*res_p == NULL) {
-        /* ### maybe use HTTP_INTERNAL_SERVER_ERROR */
-        return dav_new_error(r->pool, HTTP_NOT_FOUND, 0,
-                             apr_psprintf(r->pool,
-                                          "The provider did not define a "
-                                          "resource for %s.",
-                                          ap_escape_html(r->pool, r->uri)));
-    }
-
-    /* ### hmm. this doesn't feel like the right place or thing to do */
-    /* if there were any input headers requiring a Vary header in the response,
-     * add it now */
-    dav_add_vary_header(r, r, *res_p);
-
-    return NULL;
-}
-
-static dav_error * dav_open_lockdb(request_rec *r, int ro, dav_lockdb **lockdb)
-{
-    const dav_hooks_locks *hooks = DAV_GET_HOOKS_LOCKS(r);
-
-    if (hooks == NULL) {
-        *lockdb = NULL;
-        return NULL;
-    }
-
-    /* open the thing lazily */
-    return (*hooks->open_lockdb)(r, ro, 0, lockdb);
-}
-
-static int dav_parse_range(request_rec *r,
-                           apr_off_t *range_start, apr_off_t *range_end)
-{
-    const char *range_c;
-    char *range;
-    char *dash;
-    char *slash;
-
-    range_c = apr_table_get(r->headers_in, "content-range");
-    if (range_c == NULL)
-        return 0;
-
-    range = apr_pstrdup(r->pool, range_c);
-    if (strncasecmp(range, "bytes ", 6) != 0
-        || (dash = ap_strchr(range, '-')) == NULL
-        || (slash = ap_strchr(range, '/')) == NULL) {
-        /* malformed header. ignore it (per S14.16 of RFC2616) */
-        return 0;
-    }
-
-    *dash = *slash = '\0';
-
-    /* ### atol may not be large enough for the apr_off_t */
-    *range_start = atol(range + 6);
-    *range_end = atol(dash + 1);
-
-    if (*range_end < *range_start
-        || (slash[1] != '*' && atol(slash + 1) <= *range_end)) {
-        /* invalid range. ignore it (per S14.16 of RFC2616) */
-        return 0;
-    }
-
-    /* we now have a valid range */
-    return 1;
-}
-
-/* handle the GET method */
-static int dav_method_get(request_rec *r)
-{
-    dav_resource *resource;
-    dav_error *err;
-
-    /* This method should only be called when the resource is not
-     * visible to Apache. We will fetch the resource from the repository,
-     * then create a subrequest for Apache to handle.
-     */
-    err = dav_get_resource(r, 1 /* label_allowed */, 0 /* use_checked_in */,
-                           &resource);
-    if (err != NULL)
-        return dav_handle_err(r, err, NULL);
-
-    if (!resource->exists) {
-        /* Apache will supply a default error for this. */
-        return HTTP_NOT_FOUND;
-    }
-
-    /* set up the HTTP headers for the response */
-    if ((err = (*resource->hooks->set_headers)(r, resource)) != NULL) {
-        err = dav_push_error(r->pool, err->status, 0,
-                             "Unable to set up HTTP headers.",
-                             err);
-        return dav_handle_err(r, err, NULL);
-    }
-
-    if (r->header_only) {
-        return DONE;
-    }
-
-    /* okay... time to deliver the content */
-    if ((err = (*resource->hooks->deliver)(resource,
-                                           r->output_filters)) != NULL) {
-        err = dav_push_error(r->pool, err->status, 0,
-                             "Unable to deliver content.",
-                             err);
-        return dav_handle_err(r, err, NULL);
-    }
-
-    return DONE;
-}
-
-/* validate resource on POST, then pass it off to the default handler */
-static int dav_method_post(request_rec *r)
-{
-    dav_resource *resource;
-    dav_error *err;
-
-    /* Ask repository module to resolve the resource */
-    err = dav_get_resource(r, 0 /* label_allowed */, 0 /* use_checked_in */,
-                           &resource);
-    if (err != NULL)
-        return dav_handle_err(r, err, NULL);
-
-    /* Note: depth == 0. Implies no need for a multistatus response. */
-    if ((err = dav_validate_request(r, resource, 0, NULL, NULL,
-                                    DAV_VALIDATE_RESOURCE, NULL)) != NULL) {
-        /* ### add a higher-level description? */
-        return dav_handle_err(r, err, NULL);
-    }
-
-    return DECLINED;
-}
-
-/* handle the PUT method */
-static int dav_method_put(request_rec *r)
-{
-    dav_resource *resource;
-    int resource_state;
-    dav_auto_version_info av_info;
-    const dav_hooks_locks *locks_hooks = DAV_GET_HOOKS_LOCKS(r);
-    const char *body;
-    dav_error *err;
-    dav_error *err2;
-    int result;
-    dav_stream_mode mode;
-    dav_stream *stream;
-    dav_response *multi_response;
-    int has_range;
-    apr_off_t range_start;
-    apr_off_t range_end;
-
-    if ((result = ap_setup_client_block(r, REQUEST_CHUNKED_DECHUNK)) != OK) {
-        return result;
-    }
-
-    /* Ask repository module to resolve the resource */
-    err = dav_get_resource(r, 0 /* label_allowed */, 0 /* use_checked_in */,
-                           &resource);
-    if (err != NULL)
-        return dav_handle_err(r, err, NULL);
-
-    /* If not a file or collection resource, PUT not allowed */
-    if (resource->type != DAV_RESOURCE_TYPE_REGULAR
-        && resource->type != DAV_RESOURCE_TYPE_WORKING) {
-        body = apr_psprintf(r->pool,
-                            "Cannot create resource %s with PUT.",
-                            ap_escape_html(r->pool, r->uri));
-        return dav_error_response(r, HTTP_CONFLICT, body);
-    }
-
-    /* Cannot PUT a collection */
-    if (resource->collection) {
-        return dav_error_response(r, HTTP_CONFLICT,
-                                  "Cannot PUT to a collection.");
-
-    }
-
-    resource_state = dav_get_resource_state(r, resource);
-
-    /*
-     * Note: depth == 0 normally requires no multistatus response. However,
-     * if we pass DAV_VALIDATE_PARENT, then we could get an error on a URI
-     * other than the Request-URI, thereby requiring a multistatus.
-     *
-     * If the resource does not exist (DAV_RESOURCE_NULL), then we must
-     * check the resource *and* its parent. If the resource exists or is
-     * a locknull resource, then we check only the resource.
-     */
-    if ((err = dav_validate_request(r, resource, 0, NULL, &multi_response,
-                                    resource_state == DAV_RESOURCE_NULL ?
-                                    DAV_VALIDATE_PARENT :
-                                    DAV_VALIDATE_RESOURCE, NULL)) != NULL) {
-        /* ### add a higher-level description? */
-        return dav_handle_err(r, err, multi_response);
-    }
-
-    /* make sure the resource can be modified (if versioning repository) */
-    if ((err = dav_auto_checkout(r, resource,
-                                 0 /* not parent_only */,
-                                 &av_info)) != NULL) {
-        /* ### add a higher-level description? */
-        return dav_handle_err(r, err, NULL);
-    }
-
-    /* truncate and rewrite the file unless we see a Content-Range */
-    mode = DAV_MODE_WRITE_TRUNC;
-
-    has_range = dav_parse_range(r, &range_start, &range_end);
-    if (has_range) {
-        mode = DAV_MODE_WRITE_SEEKABLE;
-    }
-
-    /* Create the new file in the repository */
-    if ((err = (*resource->hooks->open_stream)(resource, mode,
-                                               &stream)) != NULL) {
-        /* ### assuming FORBIDDEN is probably not quite right... */
-        err = dav_push_error(r->pool, HTTP_FORBIDDEN, 0,
-                             apr_psprintf(r->pool,
-                                          "Unable to PUT new contents for %s.",
-                                          ap_escape_html(r->pool, r->uri)),
-                             err);
-    }
-
-    if (err == NULL && has_range) {
-        /* a range was provided. seek to the start */
-        err = (*resource->hooks->seek_stream)(stream, range_start);
-    }
-
-    if (err == NULL) {
-        if (ap_should_client_block(r)) {
-            char *buffer = apr_palloc(r->pool, DAV_READ_BLOCKSIZE);
-            long len;
-
-            /*
-             * Once we start reading the request, then we must read the
-             * whole darn thing. ap_discard_request_body() won't do anything
-             * for a partially-read request.
-             */
-
-            while ((len = ap_get_client_block(r, buffer,
-                                              DAV_READ_BLOCKSIZE)) > 0) {
-                   if (err == NULL) {
-                       /* write whatever we read, until we see an error */
-                       err = (*resource->hooks->write_stream)(stream,
-                                                              buffer, len);
-                   }
-            }
-
-            /*
-             * ### what happens if we read more/less than the amount
-             * ### specified in the Content-Range? eek...
-             */
-
-            if (len == -1) {
-                /*
-                 * Error reading request body. This has precedence over
-                 * prior errors.
-                 */
-                err = dav_new_error(r->pool, HTTP_BAD_REQUEST, 0,
-                                    "An error occurred while reading the "
-                                    "request body.");
-            }
-        }
-
-        err2 = (*resource->hooks->close_stream)(stream,
-                                                err == NULL /* commit */);
-        if (err2 != NULL && err == NULL) {
-            /* no error during the write, but we hit one at close. use it. */
-            err = err2;
-        }
-    }
-
-    /*
-     * Ensure that we think the resource exists now.
-     * ### eek. if an error occurred during the write and we did not commit,
-     * ### then the resource might NOT exist (e.g. dav_fs_repos.c)
-     */
-    if (err == NULL) {
-        resource->exists = 1;
-    }
-
-    /* restore modifiability of resources back to what they were */
-    err2 = dav_auto_checkin(r, resource, err != NULL /* undo if error */,
-                            0 /*unlock*/, &av_info);
-
-    /* check for errors now */
-    if (err != NULL) {
-        return dav_handle_err(r, err, NULL);
-    }
-
-    if (err2 != NULL) {
-        /* just log a warning */
-        err2 = dav_push_error(r->pool, err->status, 0,
-                              "The PUT was successful, but there "
-                              "was a problem automatically checking in "
-                              "the resource or its parent collection.",
-                              err2);
-        dav_log_err(r, err2, APLOG_WARNING);
-    }
-
-    /* ### place the Content-Type and Content-Language into the propdb */
-
-    if (locks_hooks != NULL) {
-        dav_lockdb *lockdb;
-
-        if ((err = (*locks_hooks->open_lockdb)(r, 0, 0, &lockdb)) != NULL) {
-            /* The file creation was successful, but the locking failed. */
-            err = dav_push_error(r->pool, err->status, 0,
-                                 "The file was PUT successfully, but there "
-                                 "was a problem opening the lock database "
-                                 "which prevents inheriting locks from the "
-                                 "parent resources.",
-                                 err);
-            return dav_handle_err(r, err, NULL);
-        }
-
-        /* notify lock system that we have created/replaced a resource */
-        err = dav_notify_created(r, lockdb, resource, resource_state, 0);
-
-        (*locks_hooks->close_lockdb)(lockdb);
-
-        if (err != NULL) {
-            /* The file creation was successful, but the locking failed. */
-            err = dav_push_error(r->pool, err->status, 0,
-                                 "The file was PUT successfully, but there "
-                                 "was a problem updating its lock "
-                                 "information.",
-                                 err);
-            return dav_handle_err(r, err, NULL);
-        }
-    }
-
-    /* NOTE: WebDAV spec, S8.7.1 states properties should be unaffected */
-
-    /* return an appropriate response (HTTP_CREATED or HTTP_NO_CONTENT) */
-    return dav_created(r, NULL, "Resource", resource_state == DAV_RESOURCE_EXISTS);
-}
-
-/* ### move this to dav_util? */
-DAV_DECLARE(void) dav_add_response(dav_walk_resource *wres,
-                                   int status, dav_get_props_result *propstats)
-{
-    dav_response *resp;
-
-    /* just drop some data into an dav_response */
-    resp = apr_pcalloc(wres->pool, sizeof(*resp));
-    resp->href = apr_pstrdup(wres->pool, wres->resource->uri);
-    resp->status = status;
-    if (propstats) {
-        resp->propresult = *propstats;
-    }
-
-    resp->next = wres->response;
-    wres->response = resp;
-}
-
-/* handle the DELETE method */
-static int dav_method_delete(request_rec *r)
-{
-    dav_resource *resource;
-    dav_auto_version_info av_info;
-    dav_error *err;
-    dav_error *err2;
-    dav_response *multi_response;
-    int result;
-    int depth;
-
-    /* We don't use the request body right now, so torch it. */
-    if ((result = ap_discard_request_body(r)) != OK) {
-        return result;
-    }
-
-    /* Ask repository module to resolve the resource */
-    err = dav_get_resource(r, 0 /* label_allowed */, 0 /* use_checked_in */,
-                           &resource);
-    if (err != NULL)
-        return dav_handle_err(r, err, NULL);
-    if (!resource->exists) {
-        /* Apache will supply a default error for this. */
-        return HTTP_NOT_FOUND;
-    }
-
-    /* 2518 says that depth must be infinity only for collections.
-     * For non-collections, depth is ignored, unless it is an illegal value (1).
-     */
-    depth = dav_get_depth(r, DAV_INFINITY);
-
-    if (resource->collection && depth != DAV_INFINITY) {
-        /* This supplies additional information for the default message. */
-        ap_log_rerror(APLOG_MARK, APLOG_ERR | APLOG_NOERRNO, 0, r,
-                      "Depth must be \"infinity\" for DELETE of a collection.");
-        return HTTP_BAD_REQUEST;
-    }
-
-    if (!resource->collection && depth == 1) {
-        /* This supplies additional information for the default message. */
-        ap_log_rerror(APLOG_MARK, APLOG_ERR | APLOG_NOERRNO, 0, r,
-                      "Depth of \"1\" is not allowed for DELETE.");
-        return HTTP_BAD_REQUEST;
-    }
-
-    /*
-    ** If any resources fail the lock/If: conditions, then we must fail
-    ** the delete. Each of the failing resources will be listed within
-    ** a DAV:multistatus body, wrapped into a 424 response.
-    **
-    ** Note that a failure on the resource itself does not generate a
-    ** multistatus response -- only internal members/collections.
-    */
-    if ((err = dav_validate_request(r, resource, depth, NULL,
-                                    &multi_response,
-                                    DAV_VALIDATE_PARENT
-                                    | DAV_VALIDATE_USE_424, NULL)) != NULL) {
-        err = dav_push_error(r->pool, err->status, 0,
-                             apr_psprintf(r->pool,
-                                          "Could not DELETE %s due to a failed "
-                                          "precondition (e.g. locks).",
-                                          ap_escape_html(r->pool, r->uri)),
-                             err);
-        return dav_handle_err(r, err, multi_response);
-    }
-
-    /* ### RFC 2518 s. 8.10.5 says to remove _all_ locks, not just those
-     *     locked by the token(s) in the if_header.
-     */
-    if ((result = dav_unlock(r, resource, NULL)) != OK) {
-        return result;
-    }
-
-    /* if versioned resource, make sure parent is checked out */
-    if ((err = dav_auto_checkout(r, resource, 1 /* parent_only */,
-                                 &av_info)) != NULL) {
-        /* ### add a higher-level description? */
-        return dav_handle_err(r, err, NULL);
-    }
-
-    /* try to remove the resource */
-    err = (*resource->hooks->remove_resource)(resource, &multi_response);
-
-    /* restore writability of parent back to what it was */
-    err2 = dav_auto_checkin(r, NULL, err != NULL /* undo if error */,
-                            0 /*unlock*/, &av_info);
-
-    /* check for errors now */
-    if (err != NULL) {
-        err = dav_push_error(r->pool, err->status, 0,
-                             apr_psprintf(r->pool,
-                                          "Could not DELETE %s.",
-                                          ap_escape_html(r->pool, r->uri)),
-                             err);
-        return dav_handle_err(r, err, multi_response);
-    }
-    if (err2 != NULL) {
-        /* just log a warning */
-        err = dav_push_error(r->pool, err2->status, 0,
-                             "The DELETE was successful, but there "
-                             "was a problem automatically checking in "
-                             "the parent collection.",
-                             err2);
-        dav_log_err(r, err, APLOG_WARNING);
-    }
-
-    /* ### HTTP_NO_CONTENT if no body, HTTP_OK if there is a body (some day) */
-
-    /* Apache will supply a default error for this. */
-    return HTTP_NO_CONTENT;
-}
-
-/* generate DAV:supported-method-set OPTIONS response */
-static dav_error *dav_gen_supported_methods(request_rec *r,
-                                            const ap_xml_elem *elem,
-                                            const apr_table_t *methods,
-                                            ap_text_header *body)
-{
-    const apr_array_header_t *arr;
-    const apr_table_entry_t *elts;
-    ap_xml_elem *child;
-    ap_xml_attr *attr;
-    char *s;
-    int i;
-
-    ap_text_append(r->pool, body, "<D:supported-method-set>" DEBUG_CR);
-
-    if (elem->first_child == NULL) {
-        /* show all supported methods */
-        arr = apr_table_elts(methods);
-        elts = (const apr_table_entry_t *)arr->elts;
-
-        for (i = 0; i < arr->nelts; ++i) {
-            if (elts[i].key == NULL)
-                continue;
-
-            s = apr_psprintf(r->pool,
-                             "<D:supported-method D:name=\"%s\"/>"
-                             DEBUG_CR,
-                             elts[i].key);
-            ap_text_append(r->pool, body, s);
-        }
-    }
-    else {
-        /* check for support of specific methods */
-        for (child = elem->first_child; child != NULL; child = child->next) {
-            if (child->ns == AP_XML_NS_DAV_ID
-                && strcmp(child->name, "supported-method") == 0) {
-                const char *name = NULL;
-
-                /* go through attributes to find method name */
-                for (attr = child->attr; attr != NULL; attr = attr->next) {
-                    if (attr->ns == AP_XML_NS_DAV_ID
-                        && strcmp(attr->name, "name") == 0)
-                            name = attr->value;
-                }
-
-                if (name == NULL) {
-                    return dav_new_error(r->pool, HTTP_BAD_REQUEST, 0,
-                                         "A DAV:supported-method element "
-                                         "does not have a \"name\" attribute");
-                }
-
-                /* see if method is supported */
-                if (apr_table_get(methods, name) != NULL) {
-                    s = apr_psprintf(r->pool,
-                                     "<D:supported-method D:name=\"%s\"/>"
-                                     DEBUG_CR,
-                                     name);
-                    ap_text_append(r->pool, body, s);
-                }
-            }
-        }
-    }
-
-    ap_text_append(r->pool, body, "</D:supported-method-set>" DEBUG_CR);
-    return NULL;
-}
-
-/* generate DAV:supported-live-property-set OPTIONS response */
-static dav_error *dav_gen_supported_live_props(request_rec *r,
-                                               const dav_resource *resource,
-                                               const ap_xml_elem *elem,
-                                               ap_text_header *body)
-{
-    dav_lockdb *lockdb;
-    dav_propdb *propdb;
-    ap_xml_elem *child;
-    ap_xml_attr *attr;
-    dav_error *err;
-
-    /* open lock database, to report on supported lock properties */
-    /* ### should open read-only */
-    if ((err = dav_open_lockdb(r, 0, &lockdb)) != NULL) {
-        return dav_push_error(r->pool, err->status, 0,
-                              "The lock database could not be opened, "
-                              "preventing the reporting of supported lock "
-                              "properties.",
-                              err);
-    }
-
-    /* open the property database (readonly) for the resource */
-    if ((err = dav_open_propdb(r, lockdb, resource, 1, NULL,
-                               &propdb)) != NULL) {
-        if (lockdb != NULL)
-            (*lockdb->hooks->close_lockdb)(lockdb);
-
-        return dav_push_error(r->pool, err->status, 0,
-                              "The property database could not be opened, "
-                              "preventing report of supported properties.",
-                              err);
-    }
-
-    ap_text_append(r->pool, body, "<D:supported-live-property-set>" DEBUG_CR);
-
-    if (elem->first_child == NULL) {
-        /* show all supported live properties */
-        dav_get_props_result props = dav_get_allprops(propdb, DAV_PROP_INSERT_SUPPORTED);
-        body->last->next = props.propstats;
-        while (body->last->next != NULL)
-            body->last = body->last->next;
-    }
-    else {
-        /* check for support of specific live property */
-        for (child = elem->first_child; child != NULL; child = child->next) {
-            if (child->ns == AP_XML_NS_DAV_ID
-                && strcmp(child->name, "supported-live-property") == 0) {
-                const char *name = NULL;
-                const char *nmspace = NULL;
-
-                /* go through attributes to find name and namespace */
-                for (attr = child->attr; attr != NULL; attr = attr->next) {
-                    if (attr->ns == AP_XML_NS_DAV_ID) {
-                        if (strcmp(attr->name, "name") == 0)
-                            name = attr->value;
-                        else if (strcmp(attr->name, "namespace") == 0)
-                            nmspace = attr->value;
-                    }
-                }
-
-                if (name == NULL) {
-                    err = dav_new_error(r->pool, HTTP_BAD_REQUEST, 0,
-                                        "A DAV:supported-live-property "
-                                        "element does not have a \"name\" "
-                                        "attribute");
-                    break;
-                }
-
-                /* default namespace to DAV: */
-                if (nmspace == NULL)
-                    nmspace = "DAV:";
-
-                /* check for support of property */
-                dav_get_liveprop_supported(propdb, nmspace, name, body);
-            }
-        }
-    }
-
-    ap_text_append(r->pool, body, "</D:supported-live-property-set>" DEBUG_CR);
-
-    dav_close_propdb(propdb);
-
-    if (lockdb != NULL)
-        (*lockdb->hooks->close_lockdb)(lockdb);
-
-    return err;
-}
-
-/* generate DAV:supported-report-set OPTIONS response */
-static dav_error *dav_gen_supported_reports(request_rec *r,
-                                            const dav_resource *resource,
-                                            const ap_xml_elem *elem,
-                                            const dav_hooks_vsn *vsn_hooks,
-                                            ap_text_header *body)
-{
-    ap_xml_elem *child;
-    ap_xml_attr *attr;
-    dav_error *err;
-    char *s;
-
-    ap_text_append(r->pool, body, "<D:supported-report-set>" DEBUG_CR);
-
-    if (vsn_hooks != NULL) {
-        const dav_report_elem *reports;
-        const dav_report_elem *rp;
-
-        if ((err = (*vsn_hooks->avail_reports)(resource, &reports)) != NULL) {
-            return dav_push_error(r->pool, err->status, 0,
-                                  "DAV:supported-report-set could not be "
-                                  "determined due to a problem fetching the "
-                                  "available reports for this resource.",
-                                  err);
-        }
-
-        if (reports != NULL) {
-            if (elem->first_child == NULL) {
-                /* show all supported reports */
-                for (rp = reports; rp->nmspace != NULL; ++rp) {
-                    /* Note: we presume reports->namespace is 
-                     * properly XML/URL quoted */
-                    s = apr_psprintf(r->pool,
-                                     "<D:supported-report D:name=\"%s\" "
-                                     "D:namespace=\"%s\"/>" DEBUG_CR,
-                                     rp->name, rp->nmspace);
-                    ap_text_append(r->pool, body, s);
-                }
-            }
-            else {
-                /* check for support of specific report */
-                for (child = elem->first_child; child != NULL; child = child->next) {
-                    if (child->ns == AP_XML_NS_DAV_ID
-                        && strcmp(child->name, "supported-report") == 0) {
-                        const char *name = NULL;
-                        const char *nmspace = NULL;
-
-                        /* go through attributes to find name and namespace */
-                        for (attr = child->attr; attr != NULL; attr = attr->next) {
-                            if (attr->ns == AP_XML_NS_DAV_ID) {
-                                if (strcmp(attr->name, "name") == 0)
-                                    name = attr->value;
-                                else if (strcmp(attr->name, "namespace") == 0)
-                                    nmspace = attr->value;
-                            }
-                        }
-
-                        if (name == NULL) {
-                            return dav_new_error(r->pool, HTTP_BAD_REQUEST, 0,
-                                                 "A DAV:supported-report element "
-                                                 "does not have a \"name\" attribute");
-                        }
-
-                        /* default namespace to DAV: */
-                        if (nmspace == NULL)
-                            nmspace = "DAV:";
-
-                        for (rp = reports; rp->nmspace != NULL; ++rp) {
-                            if (strcmp(name, rp->name) == 0
-                                && strcmp(nmspace, rp->nmspace) == 0) {
-                                /* Note: we presume reports->nmspace is
-                                 * properly XML/URL quoted 
-                                 */
-                                s = apr_psprintf(r->pool,
-                                                 "<D:supported-report "
-                                                 "D:name=\"%s\" "
-                                                 "D:namespace=\"%s\"/>"
-                                                 DEBUG_CR,
-                                                 rp->name, rp->nmspace);
-                                ap_text_append(r->pool, body, s);
-                                break;
-                            }
-                        }
-                    }
-                }
-            }
-        }
-    }
-
-    ap_text_append(r->pool, body, "</D:supported-report-set>" DEBUG_CR);
-    return NULL;
-}
-
-/* handle the OPTIONS method */
-static int dav_method_options(request_rec *r)
-{
-    const dav_hooks_locks *locks_hooks = DAV_GET_HOOKS_LOCKS(r);
-    const dav_hooks_vsn *vsn_hooks = DAV_GET_HOOKS_VSN(r);
-    const dav_hooks_binding *binding_hooks = DAV_GET_HOOKS_BINDING(r);
-    dav_resource *resource;
-    const char *dav_level;
-    char *allow;
-    char *s;
-    const apr_array_header_t *arr;
-    const apr_table_entry_t *elts;
-    apr_table_t *methods = apr_table_make(r->pool, 12);
-    ap_text_header vsn_options = { 0 };
-    ap_text_header body = { 0 };
-    ap_text *t;
-    int text_size;
-    int result;
-    int i;
-    apr_array_header_t *uri_ary;
-    ap_xml_doc *doc;
-    const ap_xml_elem *elem;
-    dav_error *err;
-
-    /* resolve the resource */
-    err = dav_get_resource(r, 0 /* label_allowed */, 0 /* use_checked_in */,
-                           &resource);
-    if (err != NULL)
-        return dav_handle_err(r, err, NULL);
-
-    /* parse any request body */
-    if ((result = ap_xml_parse_input(r, &doc)) != OK) {
-        return result;
-    }
-    /* note: doc == NULL if no request body */
-
-    if (doc && !dav_validate_root(doc, "options")) {
-        ap_log_rerror(APLOG_MARK, APLOG_ERR | APLOG_NOERRNO, 0, r,
-                      "The \"options\" element was not found.");
-        return HTTP_BAD_REQUEST;
-    }
-
-    /* determine which providers are available */
-    dav_level = "1";
-
-    if (locks_hooks != NULL) {
-        dav_level = "1,2";
-    }
-
-    if (binding_hooks != NULL)
-        dav_level = apr_pstrcat(r->pool, dav_level, ",bindings", NULL);
-
-    /* ###
-     * MSFT Web Folders chokes if length of DAV header value > 63 characters!
-     * To workaround that, we use separate DAV headers for versioning and
-     * live prop provider namespace URIs.
-     * ###
-     */
-    apr_table_setn(r->headers_out, "DAV", dav_level);
-
-    /*
-     * If there is a versioning provider, generate DAV headers
-     * for versioning options.
-     */
-    if (vsn_hooks != NULL) {
-        (*vsn_hooks->get_vsn_options)(r->pool, &vsn_options);
-
-        for (t = vsn_options.first; t != NULL; t = t->next)
-            apr_table_addn(r->headers_out, "DAV", t->text);
-    }
-
-    /*
-     * Gather property set URIs from all the liveprop providers,
-     * and generate a separate DAV header for each URI, to avoid
-     * problems with long header lengths.
-     */
-    uri_ary = apr_array_make(r->pool, 5, sizeof(const char *));
-    dav_run_gather_propsets(uri_ary);
-    for (i = 0; i < uri_ary->nelts; ++i) {
-        if (((char **)uri_ary->elts)[i] != NULL)
-            apr_table_addn(r->headers_out, "DAV", ((char **)uri_ary->elts)[i]);
-    }
-
-    /* this tells MSFT products to skip looking for FrontPage extensions */
-    apr_table_setn(r->headers_out, "MS-Author-Via", "DAV");
-
-    /*
-     * Determine which methods are allowed on the resource.
-     * Three cases:  resource is null (3), is lock-null (7.4), or exists.
-     *
-     * All cases support OPTIONS, and if there is a lock provider, LOCK.
-     * (Lock-) null resources also support MKCOL and PUT.
-     * Lock-null supports PROPFIND and UNLOCK.
-     * Existing resources support lots of stuff.
-     */
-
-    apr_table_addn(methods, "OPTIONS", "");
-
-    /* ### take into account resource type */
-    switch (dav_get_resource_state(r, resource))
-    {
-    case DAV_RESOURCE_EXISTS:
-        /* resource exists */
-        apr_table_addn(methods, "GET", "");
-        apr_table_addn(methods, "HEAD", "");
-        apr_table_addn(methods, "POST", "");
-        apr_table_addn(methods, "DELETE", "");
-        apr_table_addn(methods, "TRACE", "");
-        apr_table_addn(methods, "PROPFIND", "");
-        apr_table_addn(methods, "PROPPATCH", "");
-        apr_table_addn(methods, "COPY", "");
-        apr_table_addn(methods, "MOVE", "");
-
-        if (!resource->collection)
-            apr_table_addn(methods, "PUT", "");
-
-        if (locks_hooks != NULL) {
-            apr_table_addn(methods, "LOCK", "");
-            apr_table_addn(methods, "UNLOCK", "");
-        }
-
-        break;
-
-    case DAV_RESOURCE_LOCK_NULL:
-        /* resource is lock-null. */
-        apr_table_addn(methods, "MKCOL", "");
-        apr_table_addn(methods, "PROPFIND", "");
-        apr_table_addn(methods, "PUT", "");
-
-        if (locks_hooks != NULL) {
-            apr_table_addn(methods, "LOCK", "");
-            apr_table_addn(methods, "UNLOCK", "");
-        }
-
-        break;
-
-    case DAV_RESOURCE_NULL:
-        /* resource is null. */
-        apr_table_addn(methods, "MKCOL", "");
-        apr_table_addn(methods, "PUT", "");
-
-        if (locks_hooks != NULL)
-            apr_table_addn(methods, "LOCK", "");
-
-        break;
-
-    default:
-        /* ### internal error! */
-        break;
-    }
-
-    /* If there is a versioning provider, add versioning methods */
-    if (vsn_hooks != NULL) {
-        if (!resource->exists) {
-            if ((*vsn_hooks->versionable)(resource))
-                apr_table_addn(methods, "VERSION-CONTROL", "");
-
-            if (vsn_hooks->can_be_workspace != NULL
-                && (*vsn_hooks->can_be_workspace)(resource))
-                apr_table_addn(methods, "MKWORKSPACE", "");
-
-            if (vsn_hooks->can_be_activity != NULL
-                && (*vsn_hooks->can_be_activity)(resource))
-                apr_table_addn(methods, "MKACTIVITY", "");
-        }
-        else if (!resource->versioned) {
-            if ((*vsn_hooks->versionable)(resource))
-                apr_table_addn(methods, "VERSION-CONTROL", "");
-        }
-        else if (resource->working) {
-            apr_table_addn(methods, "CHECKIN", "");
-
-            /* ### we might not support this DeltaV option */
-            apr_table_addn(methods, "UNCHECKOUT", "");
-        }
-        else if (vsn_hooks->add_label != NULL) {
-            apr_table_addn(methods, "CHECKOUT", "");
-            apr_table_addn(methods, "LABEL", "");
-        }
-        else {
-            apr_table_addn(methods, "CHECKOUT", "");
-        }
-    }
-
-    /* If there is a bindings provider, see if resource is bindable */
-    if (binding_hooks != NULL
-        && (*binding_hooks->is_bindable)(resource)) {
-        apr_table_addn(methods, "BIND", "");
-    }
-
-    /* Generate the Allow header */
-    arr = apr_table_elts(methods);
-    elts = (const apr_table_entry_t *)arr->elts;
-    text_size = 0;
-
-    /* first, compute total length */
-    for (i = 0; i < arr->nelts; ++i) {
-        if (elts[i].key == NULL)
-            continue;
-
-        /* add 1 for comma or null */
-        text_size += strlen(elts[i].key) + 1;
-    }
-
-    s = allow = apr_palloc(r->pool, text_size);
-
-    for (i = 0; i < arr->nelts; ++i) {
-        if (elts[i].key == NULL)
-            continue;
-
-        if (s != allow)
-            *s++ = ',';
-
-        strcpy(s, elts[i].key);
-        s += strlen(s);
-    }
-
-    apr_table_setn(r->headers_out, "Allow", allow);
-
-    /* if there was no request body, then there is no response body */
-    if (doc == NULL) {
-        ap_set_content_length(r, 0);
-
-        /* ### this sends a Content-Type. the default OPTIONS does not. */
-
-        /* ### the default (ap_send_http_options) returns OK, but I believe
-         * ### that is because it is the default handler and nothing else
-         * ### will run after the thing. */
-        return DONE;
-    }
-
-    /* handle each options request */
-    for (elem = doc->root->first_child; elem != NULL; elem = elem->next) {
-        /* check for something we recognize first */
-        int core_option = 0;
-        dav_error *err = NULL;
-
-        if (elem->ns == AP_XML_NS_DAV_ID) {
-            if (strcmp(elem->name, "supported-method-set") == 0) {
-                err = dav_gen_supported_methods(r, elem, methods, &body);
-                core_option = 1;
-            }
-            else if (strcmp(elem->name, "supported-live-property-set") == 0) {
-                err = dav_gen_supported_live_props(r, resource, elem, &body);
-                core_option = 1;
-            }
-            else if (strcmp(elem->name, "supported-report-set") == 0) {
-                err = dav_gen_supported_reports(r, resource, elem, vsn_hooks, &body);
-                core_option = 1;
-            }
-        }
-
-        if (err != NULL)
-            return dav_handle_err(r, err, NULL);
-
-        /* if unrecognized option, pass to versioning provider */
-        if (!core_option) {
-            if ((err = (*vsn_hooks->get_option)(resource, elem, &body))
-                != NULL) {
-                return dav_handle_err(r, err, NULL);
-            }
-        }
-    }
-
-    /* send the options response */
-    r->status = HTTP_OK;
-    r->content_type = DAV_XML_CONTENT_TYPE;
-
-    /* send the headers and response body */
-    ap_rputs(DAV_XML_HEADER DEBUG_CR
-             "<D:options-response xmlns:D=\"DAV:\">" DEBUG_CR, r);
-
-    for (t = body.first; t != NULL; t = t->next)
-        ap_rputs(t->text, r);
-
-    ap_rputs("</D:options-response>" DEBUG_CR, r);
-
-    /* we've sent everything necessary to the client. */
-    return DONE;
-}
-
-static void dav_cache_badprops(dav_walker_ctx *ctx)
-{
-    const ap_xml_elem *elem;
-    ap_text_header hdr = { 0 };
-
-    /* just return if we built the thing already */
-    if (ctx->propstat_404 != NULL) {
-        return;
-    }
-
-    ap_text_append(ctx->w.pool, &hdr,
-                   "<D:propstat>" DEBUG_CR
-                   "<D:prop>" DEBUG_CR);
-
-    elem = dav_find_child(ctx->doc->root, "prop");
-    for (elem = elem->first_child; elem; elem = elem->next) {
-        ap_text_append(ctx->w.pool, &hdr,
-                       ap_xml_empty_elem(ctx->w.pool, elem));
-    }
-
-    ap_text_append(ctx->w.pool, &hdr,
-                   "</D:prop>" DEBUG_CR
-                   "<D:status>HTTP/1.1 404 Not Found</D:status>" DEBUG_CR
-                   "</D:propstat>" DEBUG_CR);
-
-    ctx->propstat_404 = hdr.first;
-}
-
-static dav_error * dav_propfind_walker(dav_walk_resource *wres, int calltype)
-{
-    dav_walker_ctx *ctx = wres->walk_ctx;
-    dav_error *err;
-    dav_propdb *propdb;
-    dav_get_props_result propstats = { 0 };
-
-    /*
-    ** Note: ctx->doc can only be NULL for DAV_PROPFIND_IS_ALLPROP. Since
-    ** dav_get_allprops() does not need to do namespace translation,
-    ** we're okay.
-    **
-    ** Note: we cast to lose the "const". The propdb won't try to change
-    ** the resource, however, since we are opening readonly.
-    */
-    err = dav_open_propdb(ctx->r, ctx->w.lockdb, wres->resource, 1,
-                          ctx->doc ? ctx->doc->namespaces : NULL, &propdb);
-    if (err != NULL) {
-        /* ### do something with err! */
-
-        if (ctx->propfind_type == DAV_PROPFIND_IS_PROP) {
-            dav_get_props_result badprops = { 0 };
-
-            /* some props were expected on this collection/resource */
-            dav_cache_badprops(ctx);
-            badprops.propstats = ctx->propstat_404;
-            dav_add_response(wres, 0, &badprops);
-        }
-        else {
-            /* no props on this collection/resource */
-            dav_add_response(wres, HTTP_OK, NULL);
-        }
-        return NULL;
-    }
-    /* ### what to do about closing the propdb on server failure? */
-
-    if (ctx->propfind_type == DAV_PROPFIND_IS_PROP) {
-        propstats = dav_get_props(propdb, ctx->doc);
-    }
-    else {
-        dav_prop_insert what = ctx->propfind_type == DAV_PROPFIND_IS_ALLPROP
-                                 ? DAV_PROP_INSERT_VALUE
-                                 : DAV_PROP_INSERT_NAME;
-        propstats = dav_get_allprops(propdb, what);
-    }
-    dav_close_propdb(propdb);
-
-    dav_add_response(wres, 0, &propstats);
-
-    return NULL;
-}
-
-/* handle the PROPFIND method */
-static int dav_method_propfind(request_rec *r)
-{
-    dav_resource *resource;
-    int depth;
-    dav_error *err;
-    int result;
-    ap_xml_doc *doc;
-    const ap_xml_elem *child;
-    dav_walker_ctx ctx = { { 0 } };
-    dav_response *multi_status;
-
-    /* Ask repository module to resolve the resource */
-    err = dav_get_resource(r, 1 /* label_allowed */, 0 /* use_checked_in */,
-                           &resource);
-    if (err != NULL)
-        return dav_handle_err(r, err, NULL);
-
-    if (dav_get_resource_state(r, resource) == DAV_RESOURCE_NULL) {
-        /* Apache will supply a default error for this. */
-        return HTTP_NOT_FOUND;
-    }
-
-    if ((depth = dav_get_depth(r, DAV_INFINITY)) < 0) {
-        /* dav_get_depth() supplies additional information for the
-         * default message. */
-        return HTTP_BAD_REQUEST;
-    }
-
-    if (depth == DAV_INFINITY && resource->collection) {
-        dav_dir_conf *conf;
-        conf = (dav_dir_conf *)ap_get_module_config(r->per_dir_config,
-                                                    &dav_module);
-        /* default is to DISALLOW these requests */
-        if (conf->allow_depthinfinity != DAV_ENABLED_ON) {
-            return dav_error_response(r, HTTP_FORBIDDEN,
-                                      apr_psprintf(r->pool,
-                                                   "PROPFIND requests with a "
-                                                   "Depth of \"infinity\" are "
-                                                   "not allowed for %s.",
-                                                   ap_escape_html(r->pool,
-                                                                  r->uri)));
-        }
-    }
-
-    if ((result = ap_xml_parse_input(r, &doc)) != OK) {
-        return result;
-    }
-    /* note: doc == NULL if no request body */
-
-    if (doc && !dav_validate_root(doc, "propfind")) {
-        /* This supplies additional information for the default message. */
-        ap_log_rerror(APLOG_MARK, APLOG_ERR | APLOG_NOERRNO, 0, r,
-                      "The \"propfind\" element was not found.");
-        return HTTP_BAD_REQUEST;
-    }
-
-    /* ### validate that only one of these three elements is present */
-
-    if (doc == NULL
-        || (child = dav_find_child(doc->root, "allprop")) != NULL) {
-        /* note: no request body implies allprop */
-        ctx.propfind_type = DAV_PROPFIND_IS_ALLPROP;
-    }
-    else if ((child = dav_find_child(doc->root, "propname")) != NULL) {
-        ctx.propfind_type = DAV_PROPFIND_IS_PROPNAME;
-    }
-    else if ((child = dav_find_child(doc->root, "prop")) != NULL) {
-        ctx.propfind_type = DAV_PROPFIND_IS_PROP;
-    }
-    else {
-        /* "propfind" element must have one of the above three children */
-
-        /* This supplies additional information for the default message. */
-        ap_log_rerror(APLOG_MARK, APLOG_ERR | APLOG_NOERRNO, 0, r,
-                      "The \"propfind\" element does not contain one of "
-                      "the required child elements (the specific command).");
-        return HTTP_BAD_REQUEST;
-    }
-
-    ctx.w.walk_type = DAV_WALKTYPE_NORMAL | DAV_WALKTYPE_AUTH;
-    ctx.w.func = dav_propfind_walker;
-    ctx.w.walk_ctx = &ctx;
-    ctx.w.pool = r->pool;
-    ctx.w.root = resource;
-
-    ctx.doc = doc;
-    ctx.r = r;
-
-    /* ### should open read-only */
-    if ((err = dav_open_lockdb(r, 0, &ctx.w.lockdb)) != NULL) {
-        err = dav_push_error(r->pool, err->status, 0,
-                             "The lock database could not be opened, "
-                             "preventing access to the various lock "
-                             "properties for the PROPFIND.",
-                             err);
-        return dav_handle_err(r, err, NULL);
-    }
-    if (ctx.w.lockdb != NULL) {
-        /* if we have a lock database, then we can walk locknull resources */
-        ctx.w.walk_type |= DAV_WALKTYPE_LOCKNULL;
-    }
-
-    err = (*resource->hooks->walk)(&ctx.w, depth, &multi_status);
-
-    if (ctx.w.lockdb != NULL) {
-        (*ctx.w.lockdb->hooks->close_lockdb)(ctx.w.lockdb);
-    }
-
-    if (err != NULL) {
-        /* ### add a higher-level description? */
-        return dav_handle_err(r, err, NULL);
-    }
-
-    /* return a 207 (Multi-Status) response now. */
-
-    /* if a 404 was generated for an HREF, then we need to spit out the
-     * doc's namespaces for use by the 404. Note that <response> elements
-     * will override these ns0, ns1, etc, but NOT within the <response>
-     * scope for the badprops. */
-    /* NOTE: propstat_404 != NULL implies doc != NULL */
-    if (ctx.propstat_404 != NULL) {
-        dav_send_multistatus(r, HTTP_MULTI_STATUS, multi_status,
-                             doc->namespaces);
-    }
-    else {
-        dav_send_multistatus(r, HTTP_MULTI_STATUS, multi_status, NULL);
-    }
-
-    /* the response has been sent. */
-    return DONE;
-}
-
-static ap_text * dav_failed_proppatch(apr_pool_t *p,
-                                      apr_array_header_t *prop_ctx)
-{
-    ap_text_header hdr = { 0 };
-    int i = prop_ctx->nelts;
-    dav_prop_ctx *ctx = (dav_prop_ctx *)prop_ctx->elts;
-    dav_error *err424_set = NULL;
-    dav_error *err424_delete = NULL;
-    const char *s;
-
-    /* ### might be nice to sort by status code and description */
-
-    for ( ; i-- > 0; ++ctx ) {
-        ap_text_append(p, &hdr,
-                       "<D:propstat>" DEBUG_CR
-                       "<D:prop>");
-        ap_text_append(p, &hdr, ap_xml_empty_elem(p, ctx->prop));
-        ap_text_append(p, &hdr, "</D:prop>" DEBUG_CR);
-
-        if (ctx->err == NULL) {
-            /* nothing was assigned here yet, so make it a 424 */
-
-            if (ctx->operation == DAV_PROP_OP_SET) {
-                if (err424_set == NULL)
-                    err424_set = dav_new_error(p, HTTP_FAILED_DEPENDENCY, 0,
-                                               "Attempted DAV:set operation "
-                                               "could not be completed due "
-                                               "to other errors.");
-                ctx->err = err424_set;
-            }
-            else if (ctx->operation == DAV_PROP_OP_DELETE) {
-                if (err424_delete == NULL)
-                    err424_delete = dav_new_error(p, HTTP_FAILED_DEPENDENCY, 0,
-                                                  "Attempted DAV:remove "
-                                                  "operation could not be "
-                                                  "completed due to other "
-                                                  "errors.");
-                ctx->err = err424_delete;
-            }
-        }
-
-        s = apr_psprintf(p,
-                         "<D:status>"
-                         "HTTP/1.1 %d (status)"
-                         "</D:status>" DEBUG_CR,
-                         ctx->err->status);
-        ap_text_append(p, &hdr, s);
-
-        /* ### we should use compute_desc if necessary... */
-        if (ctx->err->desc != NULL) {
-            ap_text_append(p, &hdr, "<D:responsedescription>" DEBUG_CR);
-            ap_text_append(p, &hdr, ctx->err->desc);
-            ap_text_append(p, &hdr, "</D:responsedescription>" DEBUG_CR);
-        }
-
-        ap_text_append(p, &hdr, "</D:propstat>" DEBUG_CR);
-    }
-
-    return hdr.first;
-}
-
-static ap_text * dav_success_proppatch(apr_pool_t *p, apr_array_header_t *prop_ctx)
-{
-    ap_text_header hdr = { 0 };
-    int i = prop_ctx->nelts;
-    dav_prop_ctx *ctx = (dav_prop_ctx *)prop_ctx->elts;
-
-    /*
-     * ### we probably need to revise the way we assemble the response...
-     * ### this code assumes everything will return status==200.
-     */
-
-    ap_text_append(p, &hdr,
-                   "<D:propstat>" DEBUG_CR
-                   "<D:prop>" DEBUG_CR);
-
-    for ( ; i-- > 0; ++ctx ) {
-        ap_text_append(p, &hdr, ap_xml_empty_elem(p, ctx->prop));
-    }
-
-    ap_text_append(p, &hdr,
-                   "</D:prop>" DEBUG_CR
-                   "<D:status>HTTP/1.1 200 OK</D:status>" DEBUG_CR
-                   "</D:propstat>" DEBUG_CR);
-
-    return hdr.first;
-}
-
-static void dav_prop_log_errors(dav_prop_ctx *ctx)
-{
-    dav_log_err(ctx->r, ctx->err, APLOG_ERR);
-}
-
-/*
- * Call <func> for each context. This can stop when an error occurs, or
- * simply iterate through the whole list.
- *
- * Returns 1 if an error occurs (and the iteration is aborted). Returns 0
- * if all elements are processed.
- *
- * If <reverse> is true (non-zero), then the list is traversed in
- * reverse order.
- */
-static int dav_process_ctx_list(void (*func)(dav_prop_ctx *ctx),
-                                apr_array_header_t *ctx_list, int stop_on_error,
-                                int reverse)
-{
-    int i = ctx_list->nelts;
-    dav_prop_ctx *ctx = (dav_prop_ctx *)ctx_list->elts;
-
-    if (reverse)
-        ctx += i;
-
-    while (i--) {
-        if (reverse)
-            --ctx;
-
-        (*func)(ctx);
-        if (stop_on_error && DAV_PROP_CTX_HAS_ERR(*ctx)) {
-            return 1;
-        }
-
-        if (!reverse)
-            ++ctx;
-    }
-
-    return 0;
-}
-
-/* handle the PROPPATCH method */
-static int dav_method_proppatch(request_rec *r)
-{
-    dav_error *err;
-    dav_resource *resource;
-    int result;
-    ap_xml_doc *doc;
-    ap_xml_elem *child;
-    dav_propdb *propdb;
-    int failure = 0;
-    dav_response resp = { 0 };
-    ap_text *propstat_text;
-    apr_array_header_t *ctx_list;
-    dav_prop_ctx *ctx;
-    dav_auto_version_info av_info;
-
-    /* Ask repository module to resolve the resource */
-    err = dav_get_resource(r, 0 /* label_allowed */, 0 /* use_checked_in */,
-                           &resource);
-    if (err != NULL)
-        return dav_handle_err(r, err, NULL);
-    if (!resource->exists) {
-        /* Apache will supply a default error for this. */
-        return HTTP_NOT_FOUND;
-    }
-
-    if ((result = ap_xml_parse_input(r, &doc)) != OK) {
-        return result;
-    }
-    /* note: doc == NULL if no request body */
-
-    if (doc == NULL || !dav_validate_root(doc, "propertyupdate")) {
-        /* This supplies additional information for the default message. */
-        ap_log_rerror(APLOG_MARK, APLOG_ERR | APLOG_NOERRNO, 0, r,
-                      "The request body does not contain "
-                      "a \"propertyupdate\" element.");
-        return HTTP_BAD_REQUEST;
-    }
-
-    /* Check If-Headers and existing locks */
-    /* Note: depth == 0. Implies no need for a multistatus response. */
-    if ((err = dav_validate_request(r, resource, 0, NULL, NULL,
-                                    DAV_VALIDATE_RESOURCE, NULL)) != NULL) {
-        /* ### add a higher-level description? */
-        return dav_handle_err(r, err, NULL);
-    }
-
-    /* make sure the resource can be modified (if versioning repository) */
-    if ((err = dav_auto_checkout(r, resource,
-                                 0 /* not parent_only */,
-                                 &av_info)) != NULL) {
-        /* ### add a higher-level description? */
-        return dav_handle_err(r, err, NULL);
-    }
-
-    if ((err = dav_open_propdb(r, NULL, resource, 0, doc->namespaces,
-                               &propdb)) != NULL) {
-        /* undo any auto-checkout */
-        dav_auto_checkin(r, resource, 1 /*undo*/, 0 /*unlock*/, &av_info);
-
-        err = dav_push_error(r->pool, HTTP_INTERNAL_SERVER_ERROR, 0,
-                             apr_psprintf(r->pool,
-                                          "Could not open the property "
-                                          "database for %s.",
-                                          ap_escape_html(r->pool, r->uri)),
-                             err);
-        return dav_handle_err(r, err, NULL);
-    }
-    /* ### what to do about closing the propdb on server failure? */
-
-    /* ### validate "live" properties */
-
-    /* set up an array to hold property operation contexts */
-    ctx_list = apr_array_make(r->pool, 10, sizeof(dav_prop_ctx));
-
-    /* do a first pass to ensure that all "remove" properties exist */
-    for (child = doc->root->first_child; child; child = child->next) {
-        int is_remove;
-        ap_xml_elem *prop_group;
-        ap_xml_elem *one_prop;
-
-        /* Ignore children that are not set/remove */
-        if (child->ns != AP_XML_NS_DAV_ID
-            || (!(is_remove = strcmp(child->name, "remove") == 0)
-                && strcmp(child->name, "set") != 0)) {
-            continue;
-        }
-
-        /* make sure that a "prop" child exists for set/remove */
-        if ((prop_group = dav_find_child(child, "prop")) == NULL) {
-            dav_close_propdb(propdb);
-
-            /* undo any auto-checkout */
-            dav_auto_checkin(r, resource, 1 /*undo*/, 0 /*unlock*/, &av_info);
-
-            /* This supplies additional information for the default message. */
-            ap_log_rerror(APLOG_MARK, APLOG_ERR | APLOG_NOERRNO, 0, r,
-                          "A \"prop\" element is missing inside "
-                          "the propertyupdate command.");
-            return HTTP_BAD_REQUEST;
-        }
-
-        for (one_prop = prop_group->first_child; one_prop;
-             one_prop = one_prop->next) {
-
-            ctx = (dav_prop_ctx *)apr_array_push(ctx_list);
-            ctx->propdb = propdb;
-            ctx->operation = is_remove ? DAV_PROP_OP_DELETE : DAV_PROP_OP_SET;
-            ctx->prop = one_prop;
-
-            ctx->r = r;         /* for later use by dav_prop_log_errors() */
-
-            dav_prop_validate(ctx);
-
-            if ( DAV_PROP_CTX_HAS_ERR(*ctx) ) {
-                failure = 1;
-            }
-        }
-    }
-
-    /* ### should test that we found at least one set/remove */
-
-    /* execute all of the operations */
-    if (!failure && dav_process_ctx_list(dav_prop_exec, ctx_list, 1, 0)) {
-        failure = 1;
-    }
-
-    /* generate a failure/success response */
-    if (failure) {
-        (void)dav_process_ctx_list(dav_prop_rollback, ctx_list, 0, 1);
-        propstat_text = dav_failed_proppatch(r->pool, ctx_list);
-    }
-    else {
-        (void)dav_process_ctx_list(dav_prop_commit, ctx_list, 0, 0);
-        propstat_text = dav_success_proppatch(r->pool, ctx_list);
-    }
-
-    /* make sure this gets closed! */
-    dav_close_propdb(propdb);
-
-    /* complete any auto-versioning */
-    dav_auto_checkin(r, resource, failure, 0 /*unlock*/, &av_info);
-
-    /* log any errors that occurred */
-    (void)dav_process_ctx_list(dav_prop_log_errors, ctx_list, 0, 0);
-
-    resp.href = resource->uri;
-
-    /* ### should probably use something new to pass along this text... */
-    resp.propresult.propstats = propstat_text;
-
-    dav_send_multistatus(r, HTTP_MULTI_STATUS, &resp, doc->namespaces);
-
-    /* the response has been sent. */
-    return DONE;
-}
-
-static int process_mkcol_body(request_rec *r)
-{
-    /* This is snarfed from ap_setup_client_block(). We could get pretty
-     * close to this behavior by passing REQUEST_NO_BODY, but we need to
-     * return HTTP_UNSUPPORTED_MEDIA_TYPE (while ap_setup_client_block
-     * returns HTTP_REQUEST_ENTITY_TOO_LARGE). */
-
-    const char *tenc = apr_table_get(r->headers_in, "Transfer-Encoding");
-    const char *lenp = apr_table_get(r->headers_in, "Content-Length");
-
-    /* make sure to set the Apache request fields properly. */
-    r->read_body = REQUEST_NO_BODY;
-    r->read_chunked = 0;
-    r->remaining = 0;
-
-    if (tenc) {
-        if (strcasecmp(tenc, "chunked")) {
-            /* Use this instead of Apache's default error string */
-            ap_log_rerror(APLOG_MARK, APLOG_ERR | APLOG_NOERRNO, 0, r,
-                          "Unknown Transfer-Encoding %s", tenc);
-            return HTTP_NOT_IMPLEMENTED;
-        }
-
-        r->read_chunked = 1;
-    }
-    else if (lenp) {
-        const char *pos = lenp;
-
-        while (apr_isdigit(*pos) || apr_isspace(*pos)) {
-            ++pos;
-        }
-
-        if (*pos != '\0') {
-            /* This supplies additional information for the default message. */
-            ap_log_rerror(APLOG_MARK, APLOG_ERR | APLOG_NOERRNO, 0, r,
-                          "Invalid Content-Length %s", lenp);
-            return HTTP_BAD_REQUEST;
-        }
-
-        r->remaining = atol(lenp);
-    }
-
-    if (r->read_chunked || r->remaining > 0) {
-        /* ### log something? */
-
-        /* Apache will supply a default error for this. */
-        return HTTP_UNSUPPORTED_MEDIA_TYPE;
-    }
-
-    /*
-     * Get rid of the body. this will call ap_setup_client_block(), but
-     * our copy above has already verified its work.
-     */
-    return ap_discard_request_body(r);
-}
-
-/* handle the MKCOL method */
-static int dav_method_mkcol(request_rec *r)
-{
-    dav_resource *resource;
-    int resource_state;
-    dav_auto_version_info av_info;
-    const dav_hooks_locks *locks_hooks = DAV_GET_HOOKS_LOCKS(r);
-    dav_error *err;
-    dav_error *err2;
-    int result;
-    dav_dir_conf *conf;
-    dav_response *multi_status;
-
-    /* handle the request body */
-    /* ### this may move lower once we start processing bodies */
-    if ((result = process_mkcol_body(r)) != OK) {
-        return result;
-    }
-
-    conf = (dav_dir_conf *)ap_get_module_config(r->per_dir_config,
-                                                &dav_module);
-
-    /* Ask repository module to resolve the resource */
-    err = dav_get_resource(r, 0 /* label_allowed */, 0 /* use_checked_in */,
-                           &resource);
-    if (err != NULL)
-        return dav_handle_err(r, err, NULL);
-
-    if (resource->exists) {
-        /* oops. something was already there! */
-
-        /* Apache will supply a default error for this. */
-        /* ### we should provide a specific error message! */
-        return HTTP_METHOD_NOT_ALLOWED;
-    }
-
-    resource_state = dav_get_resource_state(r, resource);
-
-    /*
-     * Check If-Headers and existing locks.
-     *
-     * Note: depth == 0 normally requires no multistatus response. However,
-     * if we pass DAV_VALIDATE_PARENT, then we could get an error on a URI
-     * other than the Request-URI, thereby requiring a multistatus.
-     *
-     * If the resource does not exist (DAV_RESOURCE_NULL), then we must
-     * check the resource *and* its parent. If the resource exists or is
-     * a locknull resource, then we check only the resource.
-     */
-    if ((err = dav_validate_request(r, resource, 0, NULL, &multi_status,
-                                    resource_state == DAV_RESOURCE_NULL ?
-                                    DAV_VALIDATE_PARENT :
-                                    DAV_VALIDATE_RESOURCE, NULL)) != NULL) {
-        /* ### add a higher-level description? */
-        return dav_handle_err(r, err, multi_status);
-    }
-
-    /* if versioned resource, make sure parent is checked out */
-    if ((err = dav_auto_checkout(r, resource, 1 /* parent_only */,
-                                 &av_info)) != NULL) {
-        /* ### add a higher-level description? */
-        return dav_handle_err(r, err, NULL);
-    }
-
-    /* try to create the collection */
-    resource->collection = 1;
-    err = (*resource->hooks->create_collection)(resource);
-
-    /* restore modifiability of parent back to what it was */
-    err2 = dav_auto_checkin(r, NULL, err != NULL /* undo if error */,
-                            0 /*unlock*/, &av_info);
-
-    /* check for errors now */
-    if (err != NULL) {
-        return dav_handle_err(r, err, NULL);
-    }
-    if (err2 != NULL) {
-        /* just log a warning */
-        err = dav_push_error(r->pool, err->status, 0,
-                             "The MKCOL was successful, but there "
-                             "was a problem automatically checking in "
-                             "the parent collection.",
-                             err2);
-        dav_log_err(r, err, APLOG_WARNING);
-    }
-
-    if (locks_hooks != NULL) {
-        dav_lockdb *lockdb;
-
-        if ((err = (*locks_hooks->open_lockdb)(r, 0, 0, &lockdb)) != NULL) {
-            /* The directory creation was successful, but the locking failed. */
-            err = dav_push_error(r->pool, err->status, 0,
-                                 "The MKCOL was successful, but there "
-                                 "was a problem opening the lock database "
-                                 "which prevents inheriting locks from the "
-                                 "parent resources.",
-                                 err);
-            return dav_handle_err(r, err, NULL);
-        }
-
-        /* notify lock system that we have created/replaced a resource */
-        err = dav_notify_created(r, lockdb, resource, resource_state, 0);
-
-        (*locks_hooks->close_lockdb)(lockdb);
-
-        if (err != NULL) {
-            /* The dir creation was successful, but the locking failed. */
-            err = dav_push_error(r->pool, err->status, 0,
-                                 "The MKCOL was successful, but there "
-                                 "was a problem updating its lock "
-                                 "information.",
-                                 err);
-            return dav_handle_err(r, err, NULL);
-        }
-    }
-
-    /* return an appropriate response (HTTP_CREATED) */
-    return dav_created(r, NULL, "Collection", 0);
-}
-
-/* handle the COPY and MOVE methods */
-static int dav_method_copymove(request_rec *r, int is_move)
-{
-    dav_resource *resource;
-    dav_resource *resnew;
-    dav_auto_version_info src_av_info = { 0 };
-    dav_auto_version_info dst_av_info = { 0 };
-    const char *body;
-    const char *dest;
-    dav_error *err;
-    dav_error *err2;
-    dav_error *err3;
-    dav_response *multi_response;
-    dav_lookup_result lookup;
-    int is_dir;
-    int overwrite;
-    int depth;
-    int result;
-    dav_lockdb *lockdb;
-    int replace_dest;
-    int resnew_state;
-
-    /* Ask repository module to resolve the resource */
-    err = dav_get_resource(r, !is_move /* label_allowed */,
-                           0 /* use_checked_in */, &resource);
-    if (err != NULL)
-        return dav_handle_err(r, err, NULL);
-
-    if (!resource->exists) {
-        /* Apache will supply a default error for this. */
-        return HTTP_NOT_FOUND;
-    }
-
-    /* If not a file or collection resource, COPY/MOVE not allowed */
-    /* ### allow COPY/MOVE of DeltaV resource types */
-    if (resource->type != DAV_RESOURCE_TYPE_REGULAR) {
-        body = apr_psprintf(r->pool,
-                            "Cannot COPY/MOVE resource %s.",
-                            ap_escape_html(r->pool, r->uri));
-        return dav_error_response(r, HTTP_METHOD_NOT_ALLOWED, body);
-    }
-
-    /* get the destination URI */
-    dest = apr_table_get(r->headers_in, "Destination");
-    if (dest == NULL) {
-        /* Look in headers provided by Netscape's Roaming Profiles */
-        const char *nscp_host = apr_table_get(r->headers_in, "Host");
-        const char *nscp_path = apr_table_get(r->headers_in, "New-uri");
-
-        if (nscp_host != NULL && nscp_path != NULL)
-            dest = apr_psprintf(r->pool, "http://%s%s", nscp_host, nscp_path);
-    }
-    if (dest == NULL) {
-        /* This supplies additional information for the default message. */
-        ap_log_rerror(APLOG_MARK, APLOG_ERR | APLOG_NOERRNO, 0, r,
-                      "The request is missing a Destination header.");
-        return HTTP_BAD_REQUEST;
-    }
-
-    lookup = dav_lookup_uri(dest, r, 1 /* must_be_absolute */);
-    if (lookup.rnew == NULL) {
-        if (lookup.err.status == HTTP_BAD_REQUEST) {
-            /* This supplies additional information for the default message. */
-            ap_log_rerror(APLOG_MARK, APLOG_ERR | APLOG_NOERRNO, 0, r,
-                          lookup.err.desc);
-            return HTTP_BAD_REQUEST;
-        }
-
-        /* ### this assumes that dav_lookup_uri() only generates a status
-         * ### that Apache can provide a status line for!! */
-
-        return dav_error_response(r, lookup.err.status, lookup.err.desc);
-    }
-    if (lookup.rnew->status != HTTP_OK) {
-        /* ### how best to report this... */
-        return dav_error_response(r, lookup.rnew->status,
-                                  "Destination URI had an error.");
-    }
-
-    /* Resolve destination resource */
-    err = dav_get_resource(lookup.rnew, 0 /* label_allowed */,
-                           0 /* use_checked_in */, &resnew);
-    if (err != NULL)
-        return dav_handle_err(r, err, NULL);
-
-    /* are the two resources handled by the same repository? */
-    if (resource->hooks != resnew->hooks) {
-        /* ### this message exposes some backend config, but screw it... */
-        return dav_error_response(r, HTTP_BAD_GATEWAY,
-                                  "Destination URI is handled by a "
-                                  "different repository than the source URI. "
-                                  "MOVE or COPY between repositories is "
-                                  "not possible.");
-    }
-
-    /* get and parse the overwrite header value */
-    if ((overwrite = dav_get_overwrite(r)) < 0) {
-        /* dav_get_overwrite() supplies additional information for the
-         * default message. */
-        return HTTP_BAD_REQUEST;
-    }
-
-    /* quick failure test: if dest exists and overwrite is false. */
-    if (resnew->exists && !overwrite) {
-        /* Supply some text for the error response body. */
-        return dav_error_response(r, HTTP_PRECONDITION_FAILED,
-                                  "Destination is not empty and "
-                                  "Overwrite is not \"T\"");
-    }
-
-    /* are the source and destination the same? */
-    if ((*resource->hooks->is_same_resource)(resource, resnew)) {
-        /* Supply some text for the error response body. */
-        return dav_error_response(r, HTTP_FORBIDDEN,
-                                  "Source and Destination URIs are the same.");
-
-    }
-
-    is_dir = resource->collection;
-
-    /* get and parse the Depth header value. "0" and "infinity" are legal. */
-    if ((depth = dav_get_depth(r, DAV_INFINITY)) < 0) {
-        /* dav_get_depth() supplies additional information for the
-         * default message. */
-        return HTTP_BAD_REQUEST;
-    }
-    if (depth == 1) {
-        /* This supplies additional information for the default message. */
-        ap_log_rerror(APLOG_MARK, APLOG_ERR | APLOG_NOERRNO, 0, r,
-                      "Depth must be \"0\" or \"infinity\" for COPY or MOVE.");
-        return HTTP_BAD_REQUEST;
-    }
-    if (is_move && is_dir && depth != DAV_INFINITY) {
-        /* This supplies additional information for the default message. */
-        ap_log_rerror(APLOG_MARK, APLOG_ERR | APLOG_NOERRNO, 0, r,
-                      "Depth must be \"infinity\" when moving a collection.");
-        return HTTP_BAD_REQUEST;
-    }
-
-    /*
-     * Check If-Headers and existing locks for each resource in the source
-     * if we are performing a MOVE. We will return a 424 response with a
-     * DAV:multistatus body. The multistatus responses will contain the
-     * information about any resource that fails the validation.
-     *
-     * We check the parent resource, too, since this is a MOVE. Moving the
-     * resource effectively removes it from the parent collection, so we
-     * must ensure that we have met the appropriate conditions.
-     *
-     * If a problem occurs with the Request-URI itself, then a plain error
-     * (rather than a multistatus) will be returned.
-     */
-    if (is_move
-        && (err = dav_validate_request(r, resource, depth, NULL,
-                                       &multi_response,
-                                       DAV_VALIDATE_PARENT
-                                       | DAV_VALIDATE_USE_424,
-                                       NULL)) != NULL) {
-        err = dav_push_error(r->pool, err->status, 0,
-                             apr_psprintf(r->pool,
-                                          "Could not MOVE %s due to a failed "
-                                          "precondition on the source "
-                                          "(e.g. locks).",
-                                          ap_escape_html(r->pool, r->uri)),
-                             err);
-        return dav_handle_err(r, err, multi_response);
-    }
-
-    /*
-     * Check If-Headers and existing locks for destination. Note that we
-     * use depth==infinity since the target (hierarchy) will be deleted
-     * before the move/copy is completed.
-     *
-     * Note that we are overwriting the target, which implies a DELETE, so
-     * we are subject to the error/response rules as a DELETE. Namely, we
-     * will return a 424 error if any of the validations fail.
-     * (see dav_method_delete() for more information)
-     */
-    if ((err = dav_validate_request(lookup.rnew, resnew, DAV_INFINITY, NULL,
-                                    &multi_response,
-                                    DAV_VALIDATE_PARENT
-                                    | DAV_VALIDATE_USE_424, NULL)) != NULL) {
-        err = dav_push_error(r->pool, err->status, 0,
-                             apr_psprintf(r->pool,
-                                          "Could not MOVE/COPY %s due to a "
-                                          "failed precondition on the "
-                                          "destination (e.g. locks).",
-                                          ap_escape_html(r->pool, r->uri)),
-                             err);
-        return dav_handle_err(r, err, multi_response);
-    }
-
-    if (is_dir
-        && depth == DAV_INFINITY
-        && (*resource->hooks->is_parent_resource)(resource, resnew)) {
-        /* Supply some text for the error response body. */
-        return dav_error_response(r, HTTP_FORBIDDEN,
-                                  "Source collection contains the "
-                                  "Destination.");
-
-    }
-    if (is_dir
-        && (*resnew->hooks->is_parent_resource)(resnew, resource)) {
-        /* The destination must exist (since it contains the source), and
-         * a condition above implies Overwrite==T. Obviously, we cannot
-         * delete the Destination before the MOVE/COPY, as that would
-         * delete the Source.
-         */
-
-        /* Supply some text for the error response body. */
-        return dav_error_response(r, HTTP_FORBIDDEN,
-                                  "Destination collection contains the Source "
-                                  "and Overwrite has been specified.");
-    }
-
-    /* ### for now, we don't need anything in the body */
-    if ((result = ap_discard_request_body(r)) != OK) {
-        return result;
-    }
-
-    if ((err = dav_open_lockdb(r, 0, &lockdb)) != NULL) {
-        /* ### add a higher-level description? */
-        return dav_handle_err(r, err, NULL);
-    }
-
-    /* remove any locks from the old resources */
-    /*
-     * ### this is Yet Another Traversal. if we do a rename(), then we
-     * ### really don't have to do this in some cases since the inode
-     * ### values will remain constant across the move. but we can't
-     * ### know that fact from outside the provider :-(
-     *
-     * ### note that we now have a problem atomicity in the move/copy
-     * ### since a failure after this would have removed locks (technically,
-     * ### this is okay to do, but really...)
-     */
-    if (is_move && lockdb != NULL) {
-        /* ### this is wrong! it blasts direct locks on parent resources */
-        /* ### pass lockdb! */
-        (void)dav_unlock(r, resource, NULL);
-    }
-
-    /* if this is a move, then the source parent collection will be modified */
-    if (is_move) {
-        if ((err = dav_auto_checkout(r, resource, 1 /* parent_only */,
-                                     &src_av_info)) != NULL) {
-            if (lockdb != NULL)
-                (*lockdb->hooks->close_lockdb)(lockdb);
-
-            /* ### add a higher-level description? */
-            return dav_handle_err(r, err, NULL);
-        }
-    }
-
-    /*
-     * Remember the initial state of the destination, so the lock system
-     * can be notified as to how it changed.
-     */
-    resnew_state = dav_get_resource_state(lookup.rnew, resnew);
-
-    /* In a MOVE operation, the destination is replaced by the source.
-     * In a COPY operation, if the destination exists, is under version
-     * control, and is the same resource type as the source,
-     * then it should not be replaced, but modified to be a copy of
-     * the source.
-     */
-    if (!resnew->exists)
-        replace_dest = 0;
-    else if (is_move || !resource->versioned)
-        replace_dest = 1;
-    else if (resource->type != resnew->type)
-        replace_dest = 1;
-    else if ((resource->collection == 0) != (resnew->collection == 0))
-        replace_dest = 1;
-    else
-        replace_dest = 0;
-
-    /* If the destination must be created or replaced,
-     * make sure the parent collection is writable
-     */
-    if (!resnew->exists || replace_dest) {
-        if ((err = dav_auto_checkout(r, resnew, 1 /*parent_only*/,
-                                     &dst_av_info)) != NULL) {
-            /* could not make destination writable:
-             * if move, restore state of source parent
-             */
-            if (is_move) {
-                (void)dav_auto_checkin(r, NULL, 1 /* undo */,
-                                       0 /*unlock*/, &src_av_info);
-            }
-
-            if (lockdb != NULL)
-                (*lockdb->hooks->close_lockdb)(lockdb);
-
-            /* ### add a higher-level description? */
-            return dav_handle_err(r, err, NULL);
-        }
-    }
-
-    /* If source and destination parents are the same, then
-     * use the same resource object, so status updates to one are reflected
-     * in the other, when doing auto-versioning. Otherwise,
-     * we may try to checkin the parent twice.
-     */
-    if (src_av_info.parent_resource != NULL
-        && dst_av_info.parent_resource != NULL
-        && (*src_av_info.parent_resource->hooks->is_same_resource)
-            (src_av_info.parent_resource, dst_av_info.parent_resource)) {
-
-        dst_av_info.parent_resource = src_av_info.parent_resource;
-    }
-
-    /* If destination is being replaced, remove it first
-     * (we know Ovewrite must be TRUE). Then try to copy/move the resource.
-     */
-    if (replace_dest)
-        err = (*resnew->hooks->remove_resource)(resnew, &multi_response);
-
-    if (err == NULL) {
-        if (is_move)
-            err = (*resource->hooks->move_resource)(resource, resnew,
-                                                    &multi_response);
-        else
-            err = (*resource->hooks->copy_resource)(resource, resnew, depth,
-                                                    &multi_response);
-    }
-
-    /* perform any auto-versioning cleanup */
-    err2 = dav_auto_checkin(r, NULL, err != NULL /* undo if error */,
-                            0 /*unlock*/, &dst_av_info);
-
-    if (is_move) {
-        err3 = dav_auto_checkin(r, NULL, err != NULL /* undo if error */,
-                                0 /*unlock*/, &src_av_info);
-    }
-    else
-        err3 = NULL;
-
-    /* check for error from remove/copy/move operations */
-    if (err != NULL) {
-        if (lockdb != NULL)
-            (*lockdb->hooks->close_lockdb)(lockdb);
-
-        err = dav_push_error(r->pool, err->status, 0,
-                             apr_psprintf(r->pool,
-                                          "Could not MOVE/COPY %s.",
-                                          ap_escape_html(r->pool, r->uri)),
-                             err);
-        return dav_handle_err(r, err, multi_response);
-    }
-
-    /* check for errors from auto-versioning */
-    if (err2 != NULL) {
-        /* just log a warning */
-        err = dav_push_error(r->pool, err2->status, 0,
-                             "The MOVE/COPY was successful, but there was a "
-                             "problem automatically checking in the "
-                             "source parent collection.",
-                             err2);
-        dav_log_err(r, err, APLOG_WARNING);
-    }
-    if (err3 != NULL) {
-        /* just log a warning */
-        err = dav_push_error(r->pool, err3->status, 0,
-                             "The MOVE/COPY was successful, but there was a "
-                             "problem automatically checking in the "
-                             "destination or its parent collection.",
-                             err3);
-        dav_log_err(r, err, APLOG_WARNING);
-    }
-
-    /* propagate any indirect locks at the target */
-    if (lockdb != NULL) {
-
-        /* notify lock system that we have created/replaced a resource */
-        err = dav_notify_created(r, lockdb, resnew, resnew_state, depth);
-
-        (*lockdb->hooks->close_lockdb)(lockdb);
-
-        if (err != NULL) {
-            /* The move/copy was successful, but the locking failed. */
-            err = dav_push_error(r->pool, err->status, 0,
-                                 "The MOVE/COPY was successful, but there "
-                                 "was a problem updating the lock "
-                                 "information.",
-                                 err);
-            return dav_handle_err(r, err, NULL);
-        }
-    }
-
-    /* return an appropriate response (HTTP_CREATED or HTTP_NO_CONTENT) */
-    return dav_created(r, lookup.rnew->uri, "Destination",
-                       resnew_state == DAV_RESOURCE_EXISTS);
-}
-
-/* dav_method_lock:  Handler to implement the DAV LOCK method
- *    Returns appropriate HTTP_* response.
- */
-static int dav_method_lock(request_rec *r)
-{
-    dav_error *err;
-    dav_resource *resource;
-    const dav_hooks_locks *locks_hooks;
-    int result;
-    int depth;
-    int new_lock_request = 0;
-    ap_xml_doc *doc;
-    dav_lock *lock;
-    dav_response *multi_response = NULL;
-    dav_lockdb *lockdb;
-    int resource_state;
-
-    /* If no locks provider, decline the request */
-    locks_hooks = DAV_GET_HOOKS_LOCKS(r);
-    if (locks_hooks == NULL)
-        return DECLINED;
-
-    if ((result = ap_xml_parse_input(r, &doc)) != OK)
-        return result;
-
-    depth = dav_get_depth(r, DAV_INFINITY);
-    if (depth != 0 && depth != DAV_INFINITY) {
-        ap_log_rerror(APLOG_MARK, APLOG_ERR | APLOG_NOERRNO, 0, r,
-                      "Depth must be 0 or \"infinity\" for LOCK.");
-        return HTTP_BAD_REQUEST;
-    }
-
-    /* Ask repository module to resolve the resource */
-    err = dav_get_resource(r, 0 /* label_allowed */, 0 /* use_checked_in */,
-                           &resource);
-    if (err != NULL)
-        return dav_handle_err(r, err, NULL);
-
-    /*
-     * Open writable. Unless an error occurs, we'll be
-     * writing into the database.
-     */
-    if ((err = (*locks_hooks->open_lockdb)(r, 0, 0, &lockdb)) != NULL) {
-        /* ### add a higher-level description? */
-        return dav_handle_err(r, err, NULL);
-    }
-
-    if (doc != NULL) {
-        if ((err = dav_lock_parse_lockinfo(r, resource, lockdb, doc,
-                                               &lock)) != NULL) {
-            /* ### add a higher-level description to err? */
-            goto error;
-        }
-        new_lock_request = 1;
-
-        lock->auth_user = apr_pstrdup(r->pool, r->user);
-    }
-
-    resource_state = dav_get_resource_state(r, resource);
-
-    /*
-     * Check If-Headers and existing locks.
-     *
-     * If this will create a locknull resource, then the LOCK will affect
-     * the parent collection (much like a PUT/MKCOL). For that case, we must
-     * validate the parent resource's conditions.
-     */
-    if ((err = dav_validate_request(r, resource, depth, NULL, &multi_response,
-                                    (resource_state == DAV_RESOURCE_NULL
-                                     ? DAV_VALIDATE_PARENT
-                                     : DAV_VALIDATE_RESOURCE)
-                                    | (new_lock_request ? lock->scope : 0)
-                                    | DAV_VALIDATE_ADD_LD,
-                                    lockdb)) != OK) {
-        err = dav_push_error(r->pool, err->status, 0,
-                             apr_psprintf(r->pool,
-                                          "Could not LOCK %s due to a failed "
-                                          "precondition (e.g. other locks).",
-                                          ap_escape_html(r->pool, r->uri)),
-                             err);
-        goto error;
-    }
-
-    if (new_lock_request == 0) {
-        dav_locktoken_list *ltl;
-
-        /*
-         * Refresh request
-         * ### Assumption:  We can renew multiple locks on the same resource
-         * ### at once. First harvest all the positive lock-tokens given in
-         * ### the If header. Then modify the lock entries for this resource
-         * ### with the new Timeout val.
-         */
-
-        if ((err = dav_get_locktoken_list(r, &ltl)) != NULL) {
-            err = dav_push_error(r->pool, err->status, 0,
-                                 apr_psprintf(r->pool,
-                                              "The lock refresh for %s failed "
-                                              "because no lock tokens were "
-                                              "specified in an \"If:\" "
-                                              "header.",
-                                              ap_escape_html(r->pool, r->uri)),
-                                 err);
-            goto error;
-        }
-
-        if ((err = (*locks_hooks->refresh_locks)(lockdb, resource, ltl,
-                                                 dav_get_timeout(r),
-                                                 &lock)) != NULL) {
-            /* ### add a higher-level description to err? */
-            goto error;
-        }
-    } else {
-        /* New lock request */
-        char *locktoken_txt;
-        dav_dir_conf *conf;
-
-        conf = (dav_dir_conf *)ap_get_module_config(r->per_dir_config,
-                                                    &dav_module);
-
-        /* apply lower bound (if any) from DAVMinTimeout directive */
-        if (lock->timeout != DAV_TIMEOUT_INFINITE
-            && lock->timeout < time(NULL) + conf->locktimeout)
-            lock->timeout = time(NULL) + conf->locktimeout;
-
-        err = dav_add_lock(r, resource, lockdb, lock, &multi_response);
-        if (err != NULL) {
-            /* ### add a higher-level description to err? */
-            goto error;
-        }
-
-        locktoken_txt = apr_pstrcat(r->pool, "<",
-                                    (*locks_hooks->format_locktoken)(r->pool,
-                                        lock->locktoken),
-                                    ">", NULL);
-
-        apr_table_set(r->headers_out, "Lock-Token", locktoken_txt);
-    }
-
-    (*locks_hooks->close_lockdb)(lockdb);
-
-    r->status = HTTP_OK;
-    r->content_type = DAV_XML_CONTENT_TYPE;
-
-    ap_rputs(DAV_XML_HEADER DEBUG_CR "<D:prop xmlns:D=\"DAV:\">" DEBUG_CR, r);
-    if (lock == NULL)
-        ap_rputs("<D:lockdiscovery/>" DEBUG_CR, r);
-    else {
-        ap_rprintf(r,
-                   "<D:lockdiscovery>" DEBUG_CR
-                   "%s" DEBUG_CR
-                   "</D:lockdiscovery>" DEBUG_CR,
-                   dav_lock_get_activelock(r, lock, NULL));
-    }
-    ap_rputs("</D:prop>", r);
-
-    /* the response has been sent. */
-    return DONE;
-
-  error:
-    (*locks_hooks->close_lockdb)(lockdb);
-    return dav_handle_err(r, err, multi_response);
-}
-
-/* dav_method_unlock:  Handler to implement the DAV UNLOCK method
- *    Returns appropriate HTTP_* response.
- */
-static int dav_method_unlock(request_rec *r)
-{
-    dav_error *err;
-    dav_resource *resource;
-    const dav_hooks_locks *locks_hooks;
-    int result;
-    const char *const_locktoken_txt;
-    char *locktoken_txt;
-    dav_locktoken *locktoken = NULL;
-    int resource_state;
-    dav_response *multi_response;
-
-    /* If no locks provider, decline the request */
-    locks_hooks = DAV_GET_HOOKS_LOCKS(r);
-    if (locks_hooks == NULL)
-        return DECLINED;
-
-    if ((const_locktoken_txt = apr_table_get(r->headers_in,
-                                             "Lock-Token")) == NULL) {
-        ap_log_rerror(APLOG_MARK, APLOG_ERR | APLOG_NOERRNO, 0, r,
-                      "Unlock failed (%s):  "
-                      "No Lock-Token specified in header", r->filename);
-        return HTTP_BAD_REQUEST;
-    }
-
-    locktoken_txt = apr_pstrdup(r->pool, const_locktoken_txt);
-    if (locktoken_txt[0] != '<') {
-        /* ### should provide more specifics... */
-        return HTTP_BAD_REQUEST;
-    }
-    locktoken_txt++;
-
-    if (locktoken_txt[strlen(locktoken_txt) - 1] != '>') {
-        /* ### should provide more specifics... */
-        return HTTP_BAD_REQUEST;
-    }
-    locktoken_txt[strlen(locktoken_txt) - 1] = '\0';
-
-    if ((err = (*locks_hooks->parse_locktoken)(r->pool, locktoken_txt,
-                                               &locktoken)) != NULL) {
-        err = dav_push_error(r->pool, HTTP_BAD_REQUEST, 0,
-                             apr_psprintf(r->pool,
-                                          "The UNLOCK on %s failed -- an "
-                                          "invalid lock token was specified "
-                                          "in the \"If:\" header.",
-                                          ap_escape_html(r->pool, r->uri)),
-                             err);
-        return dav_handle_err(r, err, NULL);
-    }
-
-    /* Ask repository module to resolve the resource */
-    err = dav_get_resource(r, 0 /* label_allowed */, 0 /* use_checked_in */,
-                           &resource);
-    if (err != NULL)
-        return dav_handle_err(r, err, NULL);
-
-    resource_state = dav_get_resource_state(r, resource);
-
-    /*
-     * Check If-Headers and existing locks.
-     *
-     * Note: depth == 0 normally requires no multistatus response. However,
-     * if we pass DAV_VALIDATE_PARENT, then we could get an error on a URI
-     * other than the Request-URI, thereby requiring a multistatus.
-     *
-     * If the resource is a locknull resource, then the UNLOCK will affect
-     * the parent collection (much like a delete). For that case, we must
-     * validate the parent resource's conditions.
-     */
-    if ((err = dav_validate_request(r, resource, 0, locktoken,
-                                    &multi_response,
-                                    resource_state == DAV_RESOURCE_LOCK_NULL
-                                    ? DAV_VALIDATE_PARENT
-                                    : DAV_VALIDATE_RESOURCE, NULL)) != NULL) {
-        /* ### add a higher-level description? */
-        return dav_handle_err(r, err, multi_response);
-    }
-
-    /* ### RFC 2518 s. 8.11: If this resource is locked by locktoken,
-     *     _all_ resources locked by locktoken are released.  It does not say
-     *     resource has to be the root of an infinte lock.  Thus, an UNLOCK
-     *     on any part of an infinte lock will remove the lock on all resources.
-     *
-     *     For us, if r->filename represents an indirect lock (part of an infinity lock),
-     *     we must actually perform an UNLOCK on the direct lock for this resource.
-     */
-    if ((result = dav_unlock(r, resource, locktoken)) != OK) {
-        return result;
-    }
-
-    return HTTP_NO_CONTENT;
-}
-
-static int dav_method_vsn_control(request_rec *r)
-{
-    dav_resource *resource;
-    int resource_state;
-    dav_auto_version_info av_info;
-    const dav_hooks_locks *locks_hooks = DAV_GET_HOOKS_LOCKS(r);
-    const dav_hooks_vsn *vsn_hooks = DAV_GET_HOOKS_VSN(r);
-    dav_error *err;
-    ap_xml_doc *doc;
-    const char *target = NULL;
-    int result;
-
-    /* if no versioning provider, decline the request */
-    if (vsn_hooks == NULL)
-        return DECLINED;
-
-    /* ask repository module to resolve the resource */
-    err = dav_get_resource(r, 0 /* label_allowed */, 0 /* use_checked_in */,
-                           &resource);
-    if (err != NULL)
-        return dav_handle_err(r, err, NULL);
-
-    /* remember the pre-creation resource state */
-    resource_state = dav_get_resource_state(r, resource);
-
-    /* parse the request body (may be a version-control element) */
-    if ((result = ap_xml_parse_input(r, &doc)) != OK) {
-        return result;
-    }
-    /* note: doc == NULL if no request body */
-
-    if (doc != NULL) {
-        const ap_xml_elem *child;
-        apr_size_t tsize;
-
-        if (!dav_validate_root(doc, "version-control")) {
-            ap_log_rerror(APLOG_MARK, APLOG_ERR | APLOG_NOERRNO, 0, r,
-                          "The request body does not contain "
-                          "a \"version-control\" element.");
-            return HTTP_BAD_REQUEST;
-        }
-
-        /* get the version URI */
-        if ((child = dav_find_child(doc->root, "version")) == NULL) {
-            ap_log_rerror(APLOG_MARK, APLOG_ERR | APLOG_NOERRNO, 0, r,
-                          "The \"version-control\" element does not contain "
-                          "a \"version\" element.");
-            return HTTP_BAD_REQUEST;
-        }
-
-        if ((child = dav_find_child(child, "href")) == NULL) {
-            ap_log_rerror(APLOG_MARK, APLOG_ERR | APLOG_NOERRNO, 0, r,
-                          "The \"version\" element does not contain "
-                          "an \"href\" element.");
-            return HTTP_BAD_REQUEST;
-        }
-
-        /* get version URI */
-        ap_xml_to_text(r->pool, child, AP_XML_X2T_INNER, NULL, NULL,
-                       &target, &tsize);
-        if (tsize == 0) {
-            ap_log_rerror(APLOG_MARK, APLOG_ERR | APLOG_NOERRNO, 0, r,
-                          "An \"href\" element does not contain a URI.");
-            return HTTP_BAD_REQUEST;
-        }
-    }
-
-    /* Check request preconditions */
-
-    /* ### need a general mechanism for reporting precondition violations
-     * ### (should be returning XML document for 403/409 responses)
-     */
-
-    /* if not versioning existing resource, must specify version to select */
-    if (!resource->exists && target == NULL) {
-        err = dav_new_error(r->pool, HTTP_CONFLICT, 0,
-                            "<DAV:initial-version-required/>");
-        return dav_handle_err(r, err, NULL);
-    }
-    else if (resource->exists) {
-        /* cannot add resource to existing version history */
-        if (target != NULL) {
-            err = dav_new_error(r->pool, HTTP_CONFLICT, 0,
-                                "<DAV:cannot-add-to-existing-history/>");
-            return dav_handle_err(r, err, NULL);
-        }
-
-        /* resource must be unversioned and versionable, or version selector */
-        if (resource->type != DAV_RESOURCE_TYPE_REGULAR
-            || (!resource->versioned && !(vsn_hooks->versionable)(resource))) {
-            err = dav_new_error(r->pool, HTTP_CONFLICT, 0,
-                                "<DAV:must-be-versionable/>");
-            return dav_handle_err(r, err, NULL);
-        }
-
-        /* the DeltaV spec says if resource is a version selector,
-         * then VERSION-CONTROL is a no-op
-         */
-        if (resource->versioned) {
-            /* set the Cache-Control header, per the spec */
-            apr_table_setn(r->headers_out, "Cache-Control", "no-cache");
-
-            /* no body */
-            ap_set_content_length(r, 0);
-
-            return DONE;
-        }
-    }
-
-    /* Check If-Headers and existing locks */
-    /* Note: depth == 0. Implies no need for a multistatus response. */
-    if ((err = dav_validate_request(r, resource, 0, NULL, NULL,
-                                    resource_state == DAV_RESOURCE_NULL ?
-                                    DAV_VALIDATE_PARENT :
-                                    DAV_VALIDATE_RESOURCE, NULL)) != NULL) {
-        return dav_handle_err(r, err, NULL);
-    }
-
-    /* if in versioned collection, make sure parent is checked out */
-    if ((err = dav_auto_checkout(r, resource, 1 /* parent_only */,
-                                 &av_info)) != NULL) {
-        return dav_handle_err(r, err, NULL);
-    }
-
-    /* attempt to version-control the resource */
-    if ((err = (*vsn_hooks->vsn_control)(resource, target)) != NULL) {
-        dav_auto_checkin(r, resource, 1 /*undo*/, 0 /*unlock*/, &av_info);
-        err = dav_push_error(r->pool, HTTP_CONFLICT, 0,
-                             apr_psprintf(r->pool,
-                                          "Could not VERSION-CONTROL resource %s.",
-                                          ap_escape_html(r->pool, r->uri)),
-                             err);
-        return dav_handle_err(r, err, NULL);
-    }
-
-    /* revert writability of parent directory */
-    err = dav_auto_checkin(r, resource, 0 /*undo*/, 0 /*unlock*/, &av_info);
-    if (err != NULL) {
-        /* just log a warning */
-        err = dav_push_error(r->pool, err->status, 0,
-                             "The VERSION-CONTROL was successful, but there "
-                             "was a problem automatically checking in "
-                             "the parent collection.",
-                             err);
-        dav_log_err(r, err, APLOG_WARNING);
-    }
-
-    /* if the resource is lockable, let lock system know of new resource */
-    if (locks_hooks != NULL
-        && (*locks_hooks->get_supportedlock)(resource) != NULL) {
-        dav_lockdb *lockdb;
-
-        if ((err = (*locks_hooks->open_lockdb)(r, 0, 0, &lockdb)) != NULL) {
-            /* The resource creation was successful, but the locking failed. */
-            err = dav_push_error(r->pool, err->status, 0,
-                                 "The VERSION-CONTROL was successful, but there "
-                                 "was a problem opening the lock database "
-                                 "which prevents inheriting locks from the "
-                                 "parent resources.",
-                                 err);
-            return dav_handle_err(r, err, NULL);
-        }
-
-        /* notify lock system that we have created/replaced a resource */
-        err = dav_notify_created(r, lockdb, resource, resource_state, 0);
-
-        (*locks_hooks->close_lockdb)(lockdb);
-
-        if (err != NULL) {
-            /* The dir creation was successful, but the locking failed. */
-            err = dav_push_error(r->pool, err->status, 0,
-                                 "The VERSION-CONTROL was successful, but there "
-                                 "was a problem updating its lock "
-                                 "information.",
-                                 err);
-            return dav_handle_err(r, err, NULL);
-        }
-    }
-
-    /* set the Cache-Control header, per the spec */
-    apr_table_setn(r->headers_out, "Cache-Control", "no-cache");
-
-    /* return an appropriate response (HTTP_CREATED) */
-    return dav_created(r, resource->uri, "Version selector", 0 /*replaced*/);
-}
-
-/* handle the CHECKOUT method */
-static int dav_method_checkout(request_rec *r)
-{
-    dav_resource *resource;
-    dav_resource *working_resource;
-    const dav_hooks_vsn *vsn_hooks = DAV_GET_HOOKS_VSN(r);
-    dav_error *err;
-    int result;
-    ap_xml_doc *doc;
-    int apply_to_vsn = 0;
-    int is_unreserved = 0;
-    int is_fork_ok = 0;
-    int create_activity = 0;
-    apr_array_header_t *activities = NULL;
-
-    /* If no versioning provider, decline the request */
-    if (vsn_hooks == NULL)
-        return DECLINED;
-
-    if ((result = ap_xml_parse_input(r, &doc)) != OK)
-        return result;
-
-    if (doc != NULL) {
-        const ap_xml_elem *aset;
-
-        if (!dav_validate_root(doc, "checkout")) {
-            /* This supplies additional information for the default msg. */
-            ap_log_rerror(APLOG_MARK, APLOG_ERR | APLOG_NOERRNO, 0, r,
-                          "The request body, if present, must be a "
-                          "DAV:checkout element.");
-            return HTTP_BAD_REQUEST;
-        }
-
-        if (dav_find_child(doc->root, "apply-to-version") != NULL) {
-            if (apr_table_get(r->headers_in, "label") != NULL) {
-                /* ### we want generic 403/409 XML reporting here */
-                /* ### DAV:must-not-have-label-and-apply-to-version */
-                return dav_error_response(r, HTTP_CONFLICT,
-                                          "DAV:apply-to-version cannot be "
-                                          "used in conjunction with a "
-                                          "Label header.");
-            }
-            apply_to_vsn = 1;
-        }
-
-        is_unreserved = dav_find_child(doc->root, "unreserved") != NULL;
-        is_fork_ok = dav_find_child(doc->root, "fork-ok") != NULL;
-
-        if ((aset = dav_find_child(doc->root, "activity-set")) != NULL) {
-            if (dav_find_child(aset, "new") != NULL) {
-                create_activity = 1;
-            }
-            else {
-                const ap_xml_elem *child = aset->first_child;
-
-                activities = apr_array_make(r->pool, 1, sizeof(const char *));
-
-                for (; child != NULL; child = child->next) {
-                    if (child->ns == AP_XML_NS_DAV_ID
-                        && strcmp(child->name, "href") == 0) {
-                        const char *href;
-
-                        href = dav_xml_get_cdata(child, r->pool,
-                                                 1 /* strip_white */);
-                        *(const char **)apr_array_push(activities) = href;
-                    }
-                }
-
-                if (activities->nelts == 0) {
-                    /* no href's is a DTD violation:
-                       <!ELEMENT activity-set (href+ | new)>
-                    */
-
-                    /* This supplies additional info for the default msg. */
-                    ap_log_rerror(APLOG_MARK, APLOG_ERR | APLOG_NOERRNO, 0, r,
-                                  "Within the DAV:activity-set element, the "
-                                  "DAV:new element must be used, or at least "
-                                  "one DAV:href must be specified.");
-                    return HTTP_BAD_REQUEST;
-                }
-            }
-        }
-    }
-
-    /* Ask repository module to resolve the resource */
-    err = dav_get_resource(r, 1 /*label_allowed*/, apply_to_vsn, &resource);
-    if (err != NULL)
-        return dav_handle_err(r, err, NULL);
-
-    if (!resource->exists) {
-        /* Apache will supply a default error for this. */
-        return HTTP_NOT_FOUND;
-    }
-
-    /* Check the state of the resource: must be a file or collection,
-     * must be versioned, and must not already be checked out.
-     */
-    if (resource->type != DAV_RESOURCE_TYPE_REGULAR
-        && resource->type != DAV_RESOURCE_TYPE_VERSION) {
-        return dav_error_response(r, HTTP_CONFLICT,
-                                  "Cannot checkout this type of resource.");
-    }
-
-    if (!resource->versioned) {
-        return dav_error_response(r, HTTP_CONFLICT,
-                                  "Cannot checkout unversioned resource.");
-    }
-
-    if (resource->working) {
-        return dav_error_response(r, HTTP_CONFLICT,
-                                  "The resource is already checked out to the workspace.");
-    }
-
-    /* ### do lock checks, once behavior is defined */
-
-    /* Do the checkout */
-    if ((err = (*vsn_hooks->checkout)(resource, 0 /*auto_checkout*/,
-                                      is_unreserved, is_fork_ok,
-                                      create_activity, activities,
-                                      &working_resource)) != NULL) {
-        err = dav_push_error(r->pool, HTTP_CONFLICT, 0,
-                             apr_psprintf(r->pool,
-                                          "Could not CHECKOUT resource %s.",
-                                          ap_escape_html(r->pool, r->uri)),
-                             err);
-        return dav_handle_err(r, err, NULL);
-    }
-
-    /* set the Cache-Control header, per the spec */
-    apr_table_setn(r->headers_out, "Cache-Control", "no-cache");
-
-    /* if no working resource created, return OK,
-     * else return CREATED with working resource URL in Location header
-     */
-    if (working_resource == NULL) {
-        /* no body */
-        ap_set_content_length(r, 0);
-        return DONE;
-    }
-
-    return dav_created(r, working_resource->uri, "Checked-out resource", 0);
-}
-
-/* handle the UNCHECKOUT method */
-static int dav_method_uncheckout(request_rec *r)
-{
-    dav_resource *resource;
-    const dav_hooks_vsn *vsn_hooks = DAV_GET_HOOKS_VSN(r);
-    dav_error *err;
-    int result;
-
-    /* If no versioning provider, decline the request */
-    if (vsn_hooks == NULL)
-        return DECLINED;
-
-    if ((result = ap_discard_request_body(r)) != OK) {
-        return result;
-    }
-
-    /* Ask repository module to resolve the resource */
-    err = dav_get_resource(r, 0 /* label_allowed */, 0 /* use_checked_in */,
-                           &resource);
-    if (err != NULL)
-        return dav_handle_err(r, err, NULL);
-
-    if (!resource->exists) {
-        /* Apache will supply a default error for this. */
-        return HTTP_NOT_FOUND;
-    }
-
-    /* Check the state of the resource: must be a file or collection,
-     * must be versioned, and must be checked out.
-     */
-    if (resource->type != DAV_RESOURCE_TYPE_REGULAR) {
-        return dav_error_response(r, HTTP_CONFLICT,
-                                  "Cannot uncheckout this type of resource.");
-    }
-
-    if (!resource->versioned) {
-        return dav_error_response(r, HTTP_CONFLICT,
-                                  "Cannot uncheckout unversioned resource.");
-    }
-
-    if (!resource->working) {
-        return dav_error_response(r, HTTP_CONFLICT,
-                                  "The resource is not checked out to the workspace.");
-    }
-
-    /* ### do lock checks, once behavior is defined */
-
-    /* Do the uncheckout */
-    if ((err = (*vsn_hooks->uncheckout)(resource)) != NULL) {
-        err = dav_push_error(r->pool, HTTP_CONFLICT, 0,
-                             apr_psprintf(r->pool,
-                                          "Could not UNCHECKOUT resource %s.",
-                                          ap_escape_html(r->pool, r->uri)),
-                             err);
-        return dav_handle_err(r, err, NULL);
-    }
-
-    /* no body */
-    ap_set_content_length(r, 0);
-
-    return DONE;
-}
-
-/* handle the CHECKIN method */
-static int dav_method_checkin(request_rec *r)
-{
-    dav_resource *resource;
-    dav_resource *new_version;
-    const dav_hooks_vsn *vsn_hooks = DAV_GET_HOOKS_VSN(r);
-    dav_error *err;
-    int result;
-    ap_xml_doc *doc;
-    int keep_checked_out = 0;
-
-    /* If no versioning provider, decline the request */
-    if (vsn_hooks == NULL)
-        return DECLINED;
-
-    if ((result = ap_xml_parse_input(r, &doc)) != OK)
-        return result;
-
-    if (doc != NULL) {
-        if (!dav_validate_root(doc, "checkin")) {
-            /* This supplies additional information for the default msg. */
-            ap_log_rerror(APLOG_MARK, APLOG_ERR | APLOG_NOERRNO, 0, r,
-                          "The request body, if present, must be a "
-                          "DAV:checkin element.");
-            return HTTP_BAD_REQUEST;
-        }
-
-        keep_checked_out = dav_find_child(doc->root, "keep-checked-out") != NULL;
-    }
-
-    /* Ask repository module to resolve the resource */
-    err = dav_get_resource(r, 0 /* label_allowed */, 0 /* use_checked_in */,
-                           &resource);
-    if (err != NULL)
-        return dav_handle_err(r, err, NULL);
-
-    if (!resource->exists) {
-        /* Apache will supply a default error for this. */
-        return HTTP_NOT_FOUND;
-    }
-
-    /* Check the state of the resource: must be a file or collection,
-     * must be versioned, and must be checked out.
-     */
-    if (resource->type != DAV_RESOURCE_TYPE_REGULAR) {
-        return dav_error_response(r, HTTP_CONFLICT,
-                                  "Cannot checkin this type of resource.");
-    }
-
-    if (!resource->versioned) {
-        return dav_error_response(r, HTTP_CONFLICT,
-                                  "Cannot checkin unversioned resource.");
-    }
-
-    if (!resource->working) {
-        return dav_error_response(r, HTTP_CONFLICT,
-                                  "The resource is not checked out.");
-    }
-
-    /* ### do lock checks, once behavior is defined */
-
-    /* Do the checkin */
-    if ((err = (*vsn_hooks->checkin)(resource, keep_checked_out, &new_version))
-        != NULL) {
-        err = dav_push_error(r->pool, HTTP_CONFLICT, 0,
-                             apr_psprintf(r->pool,
-                                          "Could not CHECKIN resource %s.",
-                                          ap_escape_html(r->pool, r->uri)),
-                             err);
-        return dav_handle_err(r, err, NULL);
-    }
-
-    return dav_created(r, new_version->uri, "Version", 0);
-}
-
-static int dav_method_update(request_rec *r)
-{
-    dav_resource *resource;
-    dav_resource *version = NULL;
-    const dav_hooks_vsn *vsn_hooks = DAV_GET_HOOKS_VSN(r);
-    ap_xml_doc *doc;
-    ap_xml_elem *child;
-    int is_label = 0;
-    int depth;
-    int result;
-    apr_size_t tsize;
-    const char *target;
-    dav_response *multi_response;
-    dav_error *err;
-    dav_lookup_result lookup;
-
-    /* If no versioning provider, or UPDATE not supported,
-     * decline the request */
-    if (vsn_hooks == NULL || vsn_hooks->update == NULL)
-        return DECLINED;
-
-    if ((depth = dav_get_depth(r, 0)) < 0) {
-        /* dav_get_depth() supplies additional information for the
-         * default message. */
-        return HTTP_BAD_REQUEST;
-    }
-
-    /* parse the request body */
-    if ((result = ap_xml_parse_input(r, &doc)) != OK) {
-        return result;
-    }
-
-    if (doc == NULL || !dav_validate_root(doc, "update")) {
-        /* This supplies additional information for the default message. */
-        ap_log_rerror(APLOG_MARK, APLOG_ERR | APLOG_NOERRNO, 0, r,
-                      "The request body does not contain "
-                      "an \"update\" element.");
-        return HTTP_BAD_REQUEST;
-    }
-
-    /* check for label-name or version element, but not both */
-    if ((child = dav_find_child(doc->root, "label-name")) != NULL)
-        is_label = 1;
-    else if ((child = dav_find_child(doc->root, "version")) != NULL) {
-        /* get the href element */
-        if ((child = dav_find_child(child, "href")) == NULL) {
-            ap_log_rerror(APLOG_MARK, APLOG_ERR | APLOG_NOERRNO, 0, r,
-                          "The version element does not contain "
-                          "an \"href\" element.");
-            return HTTP_BAD_REQUEST;
-        }
-    }
-    else {
-        ap_log_rerror(APLOG_MARK, APLOG_ERR | APLOG_NOERRNO, 0, r,
-                      "The \"update\" element does not contain "
-                      "a \"label-name\" or \"version\" element.");
-        return HTTP_BAD_REQUEST;
-    }
-
-    /* a depth greater than zero is only allowed for a label */
-    if (!is_label && depth != 0) {
-        ap_log_rerror(APLOG_MARK, APLOG_ERR | APLOG_NOERRNO, 0, r,
-                      "Depth must be zero for UPDATE with a version");
-        return HTTP_BAD_REQUEST;
-    }
-
-    /* get the target value (a label or a version URI) */
-    ap_xml_to_text(r->pool, child, AP_XML_X2T_INNER, NULL, NULL,
-                   &target, &tsize);
-    if (tsize == 0) {
-        ap_log_rerror(APLOG_MARK, APLOG_ERR | APLOG_NOERRNO, 0, r,
-                      "A \"label-name\" or \"href\" element does not contain "
-                      "any content.");
-        return HTTP_BAD_REQUEST;
-    }
-
-    /* Ask repository module to resolve the resource */
-    err = dav_get_resource(r, 0 /* label_allowed */, 0 /* use_checked_in */,
-                           &resource);
-    if (err != NULL)
-        return dav_handle_err(r, err, NULL);
-
-    if (!resource->exists) {
-        /* Apache will supply a default error for this. */
-        return HTTP_NOT_FOUND;
-    }
-
-    /* ### need a general mechanism for reporting precondition violations
-     * ### (should be returning XML document for 403/409 responses)
-     */
-    if (resource->type != DAV_RESOURCE_TYPE_REGULAR
-        || !resource->versioned || resource->working) {
-        return dav_error_response(r, HTTP_CONFLICT,
-                                  "<DAV:must-be-checked-in-version-controlled-resource>");
-    }
-
-    /* if target is a version, resolve the version resource */
-    /* ### dav_lookup_uri only allows absolute URIs; is that OK? */
-    if (!is_label) {
-        lookup = dav_lookup_uri(target, r, 0 /* must_be_absolute */);
-        if (lookup.rnew == NULL) {
-            if (lookup.err.status == HTTP_BAD_REQUEST) {
-                /* This supplies additional information for the default message. */
-                ap_log_rerror(APLOG_MARK, APLOG_ERR | APLOG_NOERRNO, 0, r,
-                              lookup.err.desc);
-                return HTTP_BAD_REQUEST;
-            }
-
-            /* ### this assumes that dav_lookup_uri() only generates a status
-             * ### that Apache can provide a status line for!! */
-
-            return dav_error_response(r, lookup.err.status, lookup.err.desc);
-        }
-        if (lookup.rnew->status != HTTP_OK) {
-            /* ### how best to report this... */
-            return dav_error_response(r, lookup.rnew->status,
-                                      "Version URI had an error.");
-        }
-
-        /* resolve version resource */
-        err = dav_get_resource(lookup.rnew, 0 /* label_allowed */,
-                               0 /* use_checked_in */, &version);
-        if (err != NULL)
-            return dav_handle_err(r, err, NULL);
-
-        /* NULL out target, since we're using a version resource */
-        target = NULL;
-    }
-
-    /* do the UPDATE operation */
-    err = (*vsn_hooks->update)(resource, version, target, depth, &multi_response);
-
-    if (err != NULL) {
-        err = dav_push_error(r->pool, err->status, 0,
-                             ap_psprintf(r->pool,
-                                         "Could not UPDATE %s.",
-                                         ap_escape_html(r->pool, r->uri)),
-                             err);
-        return dav_handle_err(r, err, multi_response);
-    }
-
-    /* set the Cache-Control header, per the spec */
-    apr_table_setn(r->headers_out, "Cache-Control", "no-cache");
-
-    /* no body */
-    ap_set_content_length(r, 0);
-
-    return DONE;
-}
-
-/* context maintained during LABEL treewalk */
-typedef struct dav_label_walker_ctx
-{
-    /* input: */
-    dav_walk_params w;
-
-    /* label being manipulated */
-    const char *label;
-
-    /* label operation */
-    int label_op;
-#define DAV_LABEL_ADD           1
-#define DAV_LABEL_SET           2
-#define DAV_LABEL_REMOVE        3
-
-    /* version provider hooks */
-    const dav_hooks_vsn *vsn_hooks;
-
-} dav_label_walker_ctx;
-
-static dav_error * dav_label_walker(dav_walk_resource *wres, int calltype)
-{
-    dav_label_walker_ctx *ctx = wres->walk_ctx;
-    dav_error *err = NULL;
-
-    /* Check the state of the resource: must be a version or
-     * non-checkedout version selector
-     */
-    /* ### need a general mechanism for reporting precondition violations
-     * ### (should be returning XML document for 403/409 responses)
-     */
-    if (wres->resource->type != DAV_RESOURCE_TYPE_VERSION &&
-        (wres->resource->type != DAV_RESOURCE_TYPE_REGULAR
-         || !wres->resource->versioned)) {
-        err = dav_new_error(ctx->w.pool, HTTP_CONFLICT, 0,
-                            "<DAV:must-be-version-or-version-selector/>");
-    }
-    else if (wres->resource->working) {
-        err = dav_new_error(ctx->w.pool, HTTP_CONFLICT, 0,
-                            "<DAV:must-not-be-checked-out/>");
-    }
-    else {
-        /* do the label operation */
-        if (ctx->label_op == DAV_LABEL_REMOVE)
-            err = (*ctx->vsn_hooks->remove_label)(wres->resource, ctx->label);
-        else
-            err = (*ctx->vsn_hooks->add_label)(wres->resource, ctx->label,
-                                               ctx->label_op == DAV_LABEL_SET);
-    }
-
-    if (err != NULL) {
-        /* ### need utility routine to add response with description? */
-        dav_add_response(wres, err->status, NULL);
-        wres->response->desc = err->desc;
-    }
-
-    return NULL;
-}
-
-static int dav_method_label(request_rec *r)
-{
-    dav_resource *resource;
-    const dav_hooks_vsn *vsn_hooks = DAV_GET_HOOKS_VSN(r);
-    ap_xml_doc *doc;
-    ap_xml_elem *child;
-    int depth;
-    int result;
-    apr_size_t tsize;
-    dav_error *err;
-    dav_label_walker_ctx ctx = { { 0 } };
-    dav_response *multi_status;
-
-    /* If no versioning provider, or the provider doesn't support
-     * labels, decline the request */
-    if (vsn_hooks == NULL || vsn_hooks->add_label == NULL)
-        return DECLINED;
-
-    /* Ask repository module to resolve the resource */
-    err = dav_get_resource(r, 1 /* label_allowed */, 0 /* use_checked_in */,
-                           &resource);
-    if (err != NULL)
-        return dav_handle_err(r, err, NULL);
-    if (!resource->exists) {
-        /* Apache will supply a default error for this. */
-        return HTTP_NOT_FOUND;
-    }
-
-    if ((depth = dav_get_depth(r, 0)) < 0) {
-        /* dav_get_depth() supplies additional information for the
-         * default message. */
-        return HTTP_BAD_REQUEST;
-    }
-
-    /* parse the request body */
-    if ((result = ap_xml_parse_input(r, &doc)) != OK) {
-        return result;
-    }
-
-    if (doc == NULL || !dav_validate_root(doc, "label")) {
-        /* This supplies additional information for the default message. */
-        ap_log_rerror(APLOG_MARK, APLOG_ERR | APLOG_NOERRNO, 0, r,
-                      "The request body does not contain "
-                      "a \"label\" element.");
-        return HTTP_BAD_REQUEST;
-    }
-
-    /* check for add, set, or remove element */
-    if ((child = dav_find_child(doc->root, "add")) != NULL) {
-        ctx.label_op = DAV_LABEL_ADD;
-    }
-    else if ((child = dav_find_child(doc->root, "set")) != NULL) {
-        ctx.label_op = DAV_LABEL_SET;
-    }
-    else if ((child = dav_find_child(doc->root, "remove")) != NULL) {
-        ctx.label_op = DAV_LABEL_REMOVE;
-    }
-    else {
-        ap_log_rerror(APLOG_MARK, APLOG_ERR | APLOG_NOERRNO, 0, r,
-                      "The \"label\" element does not contain "
-                      "an \"add\", \"set\", or \"remove\" element.");
-        return HTTP_BAD_REQUEST;
-    }
-
-    /* get the label string */
-    if ((child = dav_find_child(child, "label-name")) == NULL) {
-        ap_log_rerror(APLOG_MARK, APLOG_ERR | APLOG_NOERRNO, 0, r,
-                      "The label command element does not contain "
-                      "a \"label-name\" element.");
-        return HTTP_BAD_REQUEST;
-    }
-
-    ap_xml_to_text(r->pool, child, AP_XML_X2T_INNER, NULL, NULL,
-                   &ctx.label, &tsize);
-    if (tsize == 0) {
-        ap_log_rerror(APLOG_MARK, APLOG_ERR | APLOG_NOERRNO, 0, r,
-                      "A \"label-name\" element does not contain "
-                      "a label name.");
-        return HTTP_BAD_REQUEST;
-    }
-
-    /* do the label operation walk */
-    ctx.w.walk_type = DAV_WALKTYPE_NORMAL;
-    ctx.w.func = dav_label_walker;
-    ctx.w.walk_ctx = &ctx;
-    ctx.w.pool = r->pool;
-    ctx.w.root = resource;
-    ctx.vsn_hooks = vsn_hooks;
-
-    err = (*resource->hooks->walk)(&ctx.w, depth, &multi_status);
-
-    if (err != NULL) {
-        /* some sort of error occurred which terminated the walk */
-        err = dav_push_error(r->pool, err->status, 0,
-                             "The LABEL operation was terminated prematurely.",
-                             err);
-        return dav_handle_err(r, err, multi_status);
-    }
-
-    if (multi_status != NULL) {
-        /* One or more resources had errors. If depth was zero, convert
-         * response to simple error, else make sure there is an
-         * overall error to pass to dav_handle_err()
-         */
-        if (depth == 0) {
-            err = dav_new_error(r->pool, multi_status->status, 0, multi_status->desc);
-            multi_status = NULL;
-        }
-        else {
-            err = dav_new_error(r->pool, HTTP_MULTI_STATUS, 0,
-                                "Errors occurred during the LABEL operation.");
-        }
-
-        return dav_handle_err(r, err, multi_status);
-    }
-
-    /* set the Cache-Control header, per the spec */
-    apr_table_setn(r->headers_out, "Cache-Control", "no-cache");
-
-    /* no body */
-    ap_set_content_length(r, 0);
-
-    return DONE;
-}
-
-static int dav_method_report(request_rec *r)
-{
-    dav_resource *resource;
-    const dav_hooks_vsn *vsn_hooks = DAV_GET_HOOKS_VSN(r);
-    int result;
-    int label_allowed;
-    ap_xml_doc *doc;
-    ap_text_header hdr = { 0 };
-    ap_text *t;
-    dav_error *err;
-
-    /* If no versioning provider, decline the request */
-    if (vsn_hooks == NULL)
-        return DECLINED;
-
-    if ((result = ap_xml_parse_input(r, &doc)) != OK)
-        return result;
-    if (doc == NULL) {
-        /* This supplies additional information for the default msg. */
-        ap_log_rerror(APLOG_MARK, APLOG_ERR | APLOG_NOERRNO, 0, r,
-                      "The request body must specify a report.");
-        return HTTP_BAD_REQUEST;
-    }
-
-    /* Ask repository module to resolve the resource.
-     * First determine whether a Target-Selector header is allowed
-     * for this report.
-     */
-    label_allowed = (*vsn_hooks->report_label_header_allowed)(doc);
-    err = dav_get_resource(r, label_allowed, 0 /* use_checked_in */,
-                           &resource);
-    if (err != NULL)
-        return dav_handle_err(r, err, NULL);
-
-    if (!resource->exists) {
-        /* Apache will supply a default error for this. */
-        return HTTP_NOT_FOUND;
-    }
-
-    /* run report hook */
-    /* ### writing large reports to memory could be bad...
-     * ### but if provider generated output directly, it would
-     * ### have to handle error responses as well.
-     */
-    if ((err = (*vsn_hooks->get_report)(r, resource, doc, &hdr)) != NULL)
-        return dav_handle_err(r, err, NULL);
-
-    /* send the report response */
-    r->status = HTTP_OK;
-    r->content_type = DAV_XML_CONTENT_TYPE;
-
-    /* send the headers and response body */
-    ap_rputs(DAV_XML_HEADER DEBUG_CR, r);
-
-    for (t = hdr.first; t != NULL; t = t->next)
-        ap_rputs(t->text, r);
-
-    return DONE;
-}
-
-static int dav_method_make_workspace(request_rec *r)
-{
-    dav_resource *resource;
-    const dav_hooks_vsn *vsn_hooks = DAV_GET_HOOKS_VSN(r);
-    dav_error *err;
-    ap_xml_doc *doc;
-    int result;
-
-    /* if no versioning provider, or the provider does not support workspaces,
-     * decline the request
-     */
-    if (vsn_hooks == NULL || vsn_hooks->make_workspace == NULL)
-        return DECLINED;
-
-    /* ask repository module to resolve the resource */
-    err = dav_get_resource(r, 0 /* label_allowed */, 0 /* use_checked_in */,
-                           &resource);
-    if (err != NULL)
-        return dav_handle_err(r, err, NULL);
-
-    /* parse the request body (must be a mkworkspace element) */
-    if ((result = ap_xml_parse_input(r, &doc)) != OK) {
-        return result;
-    }
-
-    if (doc == NULL
-        || !dav_validate_root(doc, "mkworkspace")) {
-        ap_log_rerror(APLOG_MARK, APLOG_ERR | APLOG_NOERRNO, 0, r,
-                      "The request body does not contain "
-                      "a \"mkworkspace\" element.");
-        return HTTP_BAD_REQUEST;
-    }
-
-    /* Check request preconditions */
-
-    /* ### need a general mechanism for reporting precondition violations
-     * ### (should be returning XML document for 403/409 responses)
-     */
-
-    /* resource must not already exist */
-    if (resource->exists) {
-        err = dav_new_error(r->pool, HTTP_CONFLICT, 0,
-                            "<DAV:resource-must-be-null/>");
-        return dav_handle_err(r, err, NULL);
-    }
-
-    /* ### what about locking? */
-
-    /* attempt to create the workspace */
-    if ((err = (*vsn_hooks->make_workspace)(resource, doc)) != NULL) {
-        err = dav_push_error(r->pool, err->status, 0,
-                             apr_psprintf(r->pool,
-                                          "Could not create workspace %s.",
-                                          ap_escape_html(r->pool, r->uri)),
-                             err);
-        return dav_handle_err(r, err, NULL);
-    }
-
-    /* set the Cache-Control header, per the spec */
-    apr_table_setn(r->headers_out, "Cache-Control", "no-cache");
-
-    /* return an appropriate response (HTTP_CREATED) */
-    return dav_created(r, resource->uri, "Workspace", 0 /*replaced*/);
-}
-
-static int dav_method_make_activity(request_rec *r)
-{
-    dav_resource *resource;
-    const dav_hooks_vsn *vsn_hooks = DAV_GET_HOOKS_VSN(r);
-    dav_error *err;
-    int result;
-
-    /* if no versioning provider, or the provider does not support activities,
-     * decline the request
-     */
-    if (vsn_hooks == NULL || vsn_hooks->make_activity == NULL)
-        return DECLINED;
-
-    /* ask repository module to resolve the resource */
-    err = dav_get_resource(r, 0 /* label_allowed */, 0 /* use_checked_in */,
-                           &resource);
-    if (err != NULL)
-        return dav_handle_err(r, err, NULL);
-
-    /* MKACTIVITY does not have a defined request body. */
-    if ((result = ap_discard_request_body(r)) != OK) {
-        return result;
-    }
-
-    /* Check request preconditions */
-
-    /* ### need a general mechanism for reporting precondition violations
-     * ### (should be returning XML document for 403/409 responses)
-     */
-
-    /* resource must not already exist */
-    if (resource->exists) {
-        err = dav_new_error(r->pool, HTTP_CONFLICT, 0,
-                            "<DAV:resource-must-be-null/>");
-        return dav_handle_err(r, err, NULL);
-    }
-
-    /* ### what about locking? */
-
-    /* attempt to create the activity */
-    if ((err = (*vsn_hooks->make_activity)(resource)) != NULL) {
-        err = dav_push_error(r->pool, err->status, 0,
-                             apr_psprintf(r->pool,
-                                          "Could not create activity %s.",
-                                          ap_escape_html(r->pool, r->uri)),
-                             err);
-        return dav_handle_err(r, err, NULL);
-    }
-
-    /* set the Cache-Control header, per the spec */
-    apr_table_setn(r->headers_out, "Cache-Control", "no-cache");
-
-    /* return an appropriate response (HTTP_CREATED) */
-    return dav_created(r, resource->uri, "Activity", 0 /*replaced*/);
-}
-
-static int dav_method_baseline_control(request_rec *r)
-{
-    /* ### */
-    return HTTP_METHOD_NOT_ALLOWED;
-}
-
-static int dav_method_merge(request_rec *r)
-{
-    dav_resource *resource;
-    dav_resource *source_resource;
-    const dav_hooks_vsn *vsn_hooks = DAV_GET_HOOKS_VSN(r);
-    dav_error *err;
-    int result;
-    ap_xml_doc *doc;
-    ap_xml_elem *source_elem;
-    ap_xml_elem *href_elem;
-    ap_xml_elem *prop_elem;
-    const char *source;
-    int no_auto_merge;
-    int no_checkout;
-    dav_lookup_result lookup;
-
-    /* If no versioning provider, decline the request */
-    if (vsn_hooks == NULL)
-        return DECLINED;
-
-    if ((result = ap_xml_parse_input(r, &doc)) != OK)
-        return result;
-
-    if (doc == NULL || !dav_validate_root(doc, "merge")) {
-        /* This supplies additional information for the default msg. */
-        ap_log_rerror(APLOG_MARK, APLOG_ERR | APLOG_NOERRNO, 0, r,
-                      "The request body must be present and must be a "
-                      "DAV:merge element.");
-        return HTTP_BAD_REQUEST;
-    }
-
-    if ((source_elem = dav_find_child(doc->root, "source")) == NULL) {
-        /* This supplies additional information for the default msg. */
-        ap_log_rerror(APLOG_MARK, APLOG_ERR | APLOG_NOERRNO, 0, r,
-                      "The DAV:merge element must contain a DAV:source "
-                      "element.");
-        return HTTP_BAD_REQUEST;
-    }
-    if ((href_elem = dav_find_child(source_elem, "href")) == NULL) {
-        /* This supplies additional information for the default msg. */
-        ap_log_rerror(APLOG_MARK, APLOG_ERR | APLOG_NOERRNO, 0, r,
-                      "The DAV:source element must contain a DAV:href "
-                      "element.");
-        return HTTP_BAD_REQUEST;
-    }
-    source = dav_xml_get_cdata(href_elem, r->pool, 1 /* strip_white */);
-
-    /* get a subrequest for the source, so that we can get a dav_resource
-       for that source. */
-    lookup = dav_lookup_uri(source, r, 0 /* must_be_absolute */);
-    if (lookup.rnew == NULL) {
-        if (lookup.err.status == HTTP_BAD_REQUEST) {
-            /* This supplies additional information for the default message. */
-            ap_log_rerror(APLOG_MARK, APLOG_ERR | APLOG_NOERRNO, 0, r,
-                          lookup.err.desc);
-            return HTTP_BAD_REQUEST;
-        }
-
-        /* ### this assumes that dav_lookup_uri() only generates a status
-         * ### that Apache can provide a status line for!! */
-
-        return dav_error_response(r, lookup.err.status, lookup.err.desc);
-    }
-    if (lookup.rnew->status != HTTP_OK) {
-        /* ### how best to report this... */
-        return dav_error_response(r, lookup.rnew->status,
-                                  "Merge source URI had an error.");
-    }
-    err = dav_get_resource(lookup.rnew, 0 /* label_allowed */,
-                           0 /* use_checked_in */, &source_resource);
-    if (err != NULL)
-        return dav_handle_err(r, err, NULL);
-
-    no_auto_merge = dav_find_child(doc->root, "no-auto-merge") != NULL;
-    no_checkout = dav_find_child(doc->root, "no-checkout") != NULL;
-
-    prop_elem = dav_find_child(doc->root, "prop");
-
-    /* ### check RFC. I believe the DAV:merge element may contain any
-       ### element also allowed within DAV:checkout. need to extract them
-       ### here, and pass them along.
-       ### if so, then refactor the CHECKOUT method handling so we can reuse
-       ### the code. maybe create a structure to hold CHECKOUT parameters
-       ### which can be passed to the checkout() and merge() hooks. */
-
-    /* Ask repository module to resolve the resource */
-    err = dav_get_resource(r, 0 /* label_allowed */, 0 /* use_checked_in */,
-                           &resource);
-    if (err != NULL)
-        return dav_handle_err(r, err, NULL);
-    if (!resource->exists) {
-        /* Apache will supply a default error for this. */
-        return HTTP_NOT_FOUND;
-    }
-
-    /* ### check the source and target resources flags/types */
-
-    /* ### do lock checks, once behavior is defined */
-
-    /* set the Cache-Control header, per the spec */
-    /* ### correct? */
-    apr_table_setn(r->headers_out, "Cache-Control", "no-cache");
-
-    /* Initialize these values for a standard MERGE response. If the MERGE
-       is going to do something different (i.e. an error), then it must
-       return a dav_error, and we'll reset these values properly. */
-    r->status = HTTP_OK;
-    r->content_type = "text/xml";
-
-    /* ### should we do any preliminary response generation? probably not,
-       ### because we may have an error, thus demanding something else in
-       ### the response body. */
-
-    /* Do the merge, including any response generation. */
-    if ((err = (*vsn_hooks->merge)(resource, source_resource,
-                                   no_auto_merge, no_checkout,
-                                   prop_elem,
-                                   r->output_filters)) != NULL) {
-        /* ### is err->status the right error here? */
-        err = dav_push_error(r->pool, err->status, 0,
-                             apr_psprintf(r->pool,
-                                          "Could not MERGE resource \"%s\" "
-                                          "into \"%s\".",
-                                          ap_escape_html(r->pool, source),
-                                          ap_escape_html(r->pool, r->uri)),
-                             err);
-        return dav_handle_err(r, err, NULL);
-    }
-
-    /* the response was fully generated by the merge() hook. */
-    /* ### urk. does this prevent logging? need to check... */
-    return DONE;
-}
-
-static int dav_method_bind(request_rec *r)
-{
-    dav_resource *resource;
-    dav_resource *binding;
-    dav_auto_version_info av_info;
-    const dav_hooks_binding *binding_hooks = DAV_GET_HOOKS_BINDING(r);
-    const char *dest;
-    dav_error *err;
-    dav_error *err2;
-    dav_response *multi_response = NULL;
-    dav_lookup_result lookup;
-    int overwrite;
-
-    /* If no bindings provider, decline the request */
-    if (binding_hooks == NULL)
-        return DECLINED;
-
-    /* Ask repository module to resolve the resource */
-    err = dav_get_resource(r, 0 /* label_allowed */, 0 /* use_checked_in */,
-                           &resource);
-    if (err != NULL)
-        return dav_handle_err(r, err, NULL);
-
-    if (!resource->exists) {
-        /* Apache will supply a default error for this. */
-        return HTTP_NOT_FOUND;
-    }
-
-    /* get the destination URI */
-    dest = apr_table_get(r->headers_in, "Destination");
-    if (dest == NULL) {
-        /* This supplies additional information for the default message. */
-        ap_log_rerror(APLOG_MARK, APLOG_ERR | APLOG_NOERRNO, 0, r,
-                      "The request is missing a Destination header.");
-        return HTTP_BAD_REQUEST;
-    }
-
-    lookup = dav_lookup_uri(dest, r, 0 /* must_be_absolute */);
-    if (lookup.rnew == NULL) {
-        if (lookup.err.status == HTTP_BAD_REQUEST) {
-            /* This supplies additional information for the default message. */
-            ap_log_rerror(APLOG_MARK, APLOG_ERR | APLOG_NOERRNO, 0, r,
-                          lookup.err.desc);
-            return HTTP_BAD_REQUEST;
-        }
-        else if (lookup.err.status == HTTP_BAD_GATEWAY) {
-            /* ### Bindings protocol draft 02 says to return 507
-             * ### (Cross Server Binding Forbidden); Apache already defines 507
-             * ### as HTTP_INSUFFICIENT_STORAGE. So, for now, we'll return
-             * ### HTTP_FORBIDDEN
-             */
-             return dav_error_response(r, HTTP_FORBIDDEN,
-                                       "Cross server bindings are not "
-                                       "allowed by this server.");
-        }
-
-        /* ### this assumes that dav_lookup_uri() only generates a status
-         * ### that Apache can provide a status line for!! */
-
-        return dav_error_response(r, lookup.err.status, lookup.err.desc);
-    }
-    if (lookup.rnew->status != HTTP_OK) {
-        /* ### how best to report this... */
-        return dav_error_response(r, lookup.rnew->status,
-                                  "Destination URI had an error.");
-    }
-
-    /* resolve binding resource */
-    err = dav_get_resource(lookup.rnew, 0 /* label_allowed */,
-                           0 /* use_checked_in */, &binding);
-    if (err != NULL)
-        return dav_handle_err(r, err, NULL);
-
-    /* are the two resources handled by the same repository? */
-    if (resource->hooks != binding->hooks) {
-        /* ### this message exposes some backend config, but screw it... */
-        return dav_error_response(r, HTTP_BAD_GATEWAY,
-                                  "Destination URI is handled by a "
-                                  "different repository than the source URI. "
-                                  "BIND between repositories is not possible.");
-    }
-
-    /* get and parse the overwrite header value */
-    if ((overwrite = dav_get_overwrite(r)) < 0) {
-        /* dav_get_overwrite() supplies additional information for the
-         * default message. */
-        return HTTP_BAD_REQUEST;
-    }
-
-    /* quick failure test: if dest exists and overwrite is false. */
-    if (binding->exists && !overwrite) {
-        return dav_error_response(r, HTTP_PRECONDITION_FAILED,
-                                  "Destination is not empty and "
-                                  "Overwrite is not \"T\"");
-    }
-
-    /* are the source and destination the same? */
-    if ((*resource->hooks->is_same_resource)(resource, binding)) {
-        return dav_error_response(r, HTTP_FORBIDDEN,
-                                  "Source and Destination URIs are the same.");
-    }
-
-    /*
-     * Check If-Headers and existing locks for destination. Note that we
-     * use depth==infinity since the target (hierarchy) will be deleted
-     * before the move/copy is completed.
-     *
-     * Note that we are overwriting the target, which implies a DELETE, so
-     * we are subject to the error/response rules as a DELETE. Namely, we
-     * will return a 424 error if any of the validations fail.
-     * (see dav_method_delete() for more information)
-     */
-    if ((err = dav_validate_request(lookup.rnew, binding, DAV_INFINITY, NULL,
-                                    &multi_response,
-                                    DAV_VALIDATE_PARENT
-                                    | DAV_VALIDATE_USE_424, NULL)) != NULL) {
-        err = dav_push_error(r->pool, err->status, 0,
-                             apr_psprintf(r->pool,
-                                          "Could not BIND %s due to a "
-                                          "failed precondition on the "
-                                          "destination (e.g. locks).",
-                                          ap_escape_html(r->pool, r->uri)),
-                             err);
-        return dav_handle_err(r, err, multi_response);
-    }
-
-    /* guard against creating circular bindings */
-    if (resource->collection
-        && (*resource->hooks->is_parent_resource)(resource, binding)) {
-        return dav_error_response(r, HTTP_FORBIDDEN,
-                                  "Source collection contains the Destination.");
-    }
-    if (resource->collection
-        && (*resource->hooks->is_parent_resource)(binding, resource)) {
-        /* The destination must exist (since it contains the source), and
-         * a condition above implies Overwrite==T. Obviously, we cannot
-         * delete the Destination before the BIND, as that would
-         * delete the Source.
-         */
-
-        return dav_error_response(r, HTTP_FORBIDDEN,
-                                  "Destination collection contains the Source and "
-                                  "Overwrite has been specified.");
-    }
-
-    /* prepare the destination collection for modification */
-    if ((err = dav_auto_checkout(r, binding, 1 /* parent_only */,
-                                 &av_info)) != NULL) {
-        /* could not make destination writable */
-        return dav_handle_err(r, err, NULL);
-    }
-
-    /* If target exists, remove it first (we know Ovewrite must be TRUE).
-     * Then try to bind to the resource.
-     */
-    if (binding->exists)
-        err = (*resource->hooks->remove_resource)(binding, &multi_response);
-
-    if (err == NULL) {
-        err = (*binding_hooks->bind_resource)(resource, binding);
-    }
-
-    /* restore parent collection states */
-    err2 = dav_auto_checkin(r, NULL,
-                            err != NULL /* undo if error */,
-                            0 /* unlock */, &av_info);
-
-    /* check for error from remove/bind operations */
-    if (err != NULL) {
-        err = dav_push_error(r->pool, err->status, 0,
-                             apr_psprintf(r->pool,
-                                          "Could not BIND %s.",
-                                          ap_escape_html(r->pool, r->uri)),
-                             err);
-        return dav_handle_err(r, err, multi_response);
-    }
-
-    /* check for errors from reverting writability */
-    if (err2 != NULL) {
-        /* just log a warning */
-        err = dav_push_error(r->pool, err2->status, 0,
-                             "The BIND was successful, but there was a "
-                             "problem automatically checking in the "
-                             "source parent collection.",
-                             err2);
-        dav_log_err(r, err, APLOG_WARNING);
-    }
-
-    /* return an appropriate response (HTTP_CREATED) */
-    /* ### spec doesn't say what happens when destination was replaced */
-    return dav_created(r, lookup.rnew->uri, "Binding", 0);
-}
-
-
-/*
- * Response handler for DAV resources
- */
-static int dav_handler(request_rec *r)
-{
-    dav_dir_conf *conf;
-
-    if (strcmp(r->handler, "dav-handler")) {
-        return DECLINED;
-    }
-
-    /* quickly ignore any HTTP/0.9 requests */
-    if (r->assbackwards) {
-        return DECLINED;
-    }
-
-    /* ### do we need to do anything with r->proxyreq ?? */
-
-    conf = (dav_dir_conf *)ap_get_module_config(r->per_dir_config,
-                                                &dav_module);
-
-    /*
-     * Set up the methods mask, since that's one of the reasons this handler
-     * gets called, and lower-level things may need the info.
-     *
-     * First, set the mask to the methods we handle directly.  Since by
-     * definition we own our managed space, we unconditionally set
-     * the r->allowed field rather than ORing our values with anything
-     * any other module may have put in there.
-     *
-     * These are the HTTP-defined methods that we handle directly.
-     */
-    r->allowed = 0
-        | (AP_METHOD_BIT << M_GET)
-        | (AP_METHOD_BIT << M_PUT)
-        | (AP_METHOD_BIT << M_DELETE)
-        | (AP_METHOD_BIT << M_OPTIONS)
-        | (AP_METHOD_BIT << M_INVALID);
-
-    /*
-     * These are the DAV methods we handle.
-     */
-    r->allowed |= 0
-        | (AP_METHOD_BIT << M_COPY)
-        | (AP_METHOD_BIT << M_LOCK)
-        | (AP_METHOD_BIT << M_UNLOCK)
-        | (AP_METHOD_BIT << M_MKCOL)
-        | (AP_METHOD_BIT << M_MOVE)
-        | (AP_METHOD_BIT << M_PROPFIND)
-        | (AP_METHOD_BIT << M_PROPPATCH);
-
-    /*
-     * These are methods that we don't handle directly, but let the
-     * server's default handler do for us as our agent.
-     */
-    r->allowed |= 0
-        | (AP_METHOD_BIT << M_POST);
-
-    /* ### hrm. if we return HTTP_METHOD_NOT_ALLOWED, then an Allow header
-     * ### is sent; it will need the other allowed states; since the default
-     * ### handler is not called on error, then it doesn't add the other
-     * ### allowed states, so we must
-     */
-
-    /* ### we might need to refine this for just where we return the error.
-     * ### also, there is the issue with other methods (see ISSUES)
-     */
-
-    /* ### more work necessary, now that we have M_foo for DAV methods */
-
-    /* dispatch the appropriate method handler */
-    if (r->method_number == M_GET) {
-        return dav_method_get(r);
-    }
-
-    if (r->method_number == M_PUT) {
-        return dav_method_put(r);
-    }
-
-    if (r->method_number == M_POST) {
-        return dav_method_post(r);
-    }
-
-    if (r->method_number == M_DELETE) {
-        return dav_method_delete(r);
-    }
-
-    if (r->method_number == M_OPTIONS) {
-        return dav_method_options(r);
-    }
-
-    if (r->method_number == M_PROPFIND) {
-        return dav_method_propfind(r);
-    }
-
-    if (r->method_number == M_PROPPATCH) {
-        return dav_method_proppatch(r);
-    }
-
-    if (r->method_number == M_MKCOL) {
-        return dav_method_mkcol(r);
-    }
-
-    if (r->method_number == M_COPY) {
-        return dav_method_copymove(r, DAV_DO_COPY);
-    }
-
-    if (r->method_number == M_MOVE) {
-        return dav_method_copymove(r, DAV_DO_MOVE);
-    }
-
-    if (r->method_number == M_LOCK) {
-        return dav_method_lock(r);
-    }
-
-    if (r->method_number == M_UNLOCK) {
-        return dav_method_unlock(r);
-    }
-
-    if (r->method_number == dav_methods[DAV_M_VERSION_CONTROL]) {
-        return dav_method_vsn_control(r);
-    }
-
-    if (r->method_number == dav_methods[DAV_M_CHECKOUT]) {
-        return dav_method_checkout(r);
-    }
-
-    if (r->method_number == dav_methods[DAV_M_UNCHECKOUT]) {
-        return dav_method_uncheckout(r);
-    }
-
-    if (r->method_number == dav_methods[DAV_M_CHECKIN]) {
-        return dav_method_checkin(r);
-    }
-
-    if (r->method_number == dav_methods[DAV_M_UPDATE]) {
-        return dav_method_update(r);
-    }
-
-    if (r->method_number == dav_methods[DAV_M_LABEL]) {
-        return dav_method_label(r);
-    }
-
-    if (r->method_number == dav_methods[DAV_M_REPORT]) {
-        return dav_method_report(r);
-    }
-
-    if (r->method_number == dav_methods[DAV_M_MKWORKSPACE]) {
-        return dav_method_make_workspace(r);
-    }
-
-    if (r->method_number == dav_methods[DAV_M_MKACTIVITY]) {
-        return dav_method_make_activity(r);
-    }
-
-    if (r->method_number == dav_methods[DAV_M_BASELINE_CONTROL]) {
-        return dav_method_baseline_control(r);
-    }
-
-    if (r->method_number == dav_methods[DAV_M_MERGE]) {
-        return dav_method_merge(r);
-    }
-
-    if (r->method_number == dav_methods[DAV_M_BIND]) {
-        return dav_method_bind(r);
-    }
-
-    /* ### add'l methods for Advanced Collections, ACLs, DASL */
-
-    return DECLINED;
-}
-
-static int dav_type_checker(request_rec *r)
-{
-    dav_dir_conf *conf;
-
-    conf = (dav_dir_conf *)ap_get_module_config(r->per_dir_config,
-                                                &dav_module);
-
-    /* if DAV is not enabled, then we've got nothing to do */
-    if (conf->provider == NULL) {
-        return DECLINED;
-    }
-
-    if (r->method_number == M_GET) {
-        /*
-         * ### need some work to pull Content-Type and Content-Language
-         * ### from the property database.
-         */
-
-        /*
-         * If the repository hasn't indicated that it will handle the
-         * GET method, then just punt.
-         *
-         * ### this isn't quite right... taking over the response can break
-         * ### things like mod_negotiation. need to look into this some more.
-         */
-        if (!conf->provider->repos->handle_get) {
-            return DECLINED;
-        }
-    }
-
-    /* ### we should (instead) trap the ones that we DO understand */
-    /* ### the handler DOES handle POST, so we need to fix one of these */
-    if (r->method_number != M_POST) {
-
-        /*
-         * ### anything else to do here? could another module and/or
-         * ### config option "take over" the handler here? i.e. how do
-         * ### we lock down this hierarchy so that we are the ultimate
-         * ### arbiter? (or do we simply depend on the administrator
-         * ### to avoid conflicting configurations?)
-         *
-         * ### I think the OK stops running type-checkers. need to look.
-         */
-        r->handler = "dav-handler";
-        return OK;
-    }
-
-    return DECLINED;
-}
-
-static void register_hooks(apr_pool_t *p)
-{
-    ap_hook_handler(dav_handler, NULL, NULL, APR_HOOK_MIDDLE);
-    ap_hook_post_config(dav_init_handler, NULL, NULL, APR_HOOK_MIDDLE);
-    ap_hook_type_checker(dav_type_checker, NULL, NULL, APR_HOOK_FIRST);
-
-    dav_hook_find_liveprop(dav_core_find_liveprop, NULL, NULL, APR_HOOK_LAST);
-    dav_hook_insert_all_liveprops(dav_core_insert_all_liveprops,
-                                  NULL, NULL, APR_HOOK_MIDDLE);
-
-    dav_core_register_uris(p);
-}
-
-/*---------------------------------------------------------------------------
- *
- * Configuration info for the module
- */
-
-static const command_rec dav_cmds[] =
-{
-    /* per directory/location */
-    AP_INIT_TAKE1("DAV", dav_cmd_dav, NULL, ACCESS_CONF,
-                  "specify the DAV provider for a directory or location"),
-
-    /* per directory/location, or per server */
-    AP_INIT_TAKE1("DAVMinTimeout", dav_cmd_davmintimeout, NULL,
-                  ACCESS_CONF|RSRC_CONF,
-                  "specify minimum allowed timeout"),
-
-    /* per directory/location, or per server */
-    AP_INIT_FLAG("DAVDepthInfinity", dav_cmd_davdepthinfinity, NULL,
-                 ACCESS_CONF|RSRC_CONF,
-                 "allow Depth infinity PROPFIND requests"),
-
-    { NULL }
-};
-
-module DAV_DECLARE_DATA dav_module =
-{
-    STANDARD20_MODULE_STUFF,
-    dav_create_dir_config,      /* dir config creater */
-    dav_merge_dir_config,       /* dir merger --- default is to override */
-    dav_create_server_config,   /* server config */
-    dav_merge_server_config,    /* merge server config */
-    dav_cmds,                   /* command table */
-    register_hooks,             /* register hooks */
-};
-
-APR_HOOK_STRUCT(
-    APR_HOOK_LINK(gather_propsets)
-    APR_HOOK_LINK(find_liveprop)
-    APR_HOOK_LINK(insert_all_liveprops)
-    )
-
-APR_IMPLEMENT_EXTERNAL_HOOK_VOID(dav, DAV, gather_propsets,
-                                 (apr_array_header_t *uris),
-                                 (uris))
-
-APR_IMPLEMENT_EXTERNAL_HOOK_RUN_FIRST(dav, DAV, int, find_liveprop,
-                                      (const dav_resource *resource,
-                                       const char *ns_uri, const char *name,
-                                       const dav_hooks_liveprop **hooks),
-                                      (resource, ns_uri, name, hooks), 0)
-
-APR_IMPLEMENT_EXTERNAL_HOOK_VOID(dav, DAV, insert_all_liveprops,
-                                 (request_rec *r, const dav_resource *resource,
-                                  dav_prop_insert what, ap_text_header *phdr),
-                                 (r, resource, what, phdr))
diff --git a/modules/dav/main/mod_dav.dsp b/modules/dav/main/mod_dav.dsp
deleted file mode 100644
index 3589bb1..0000000
--- a/modules/dav/main/mod_dav.dsp
+++ /dev/null
@@ -1,164 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mod_dav" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mod_dav - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "mod_dav.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "mod_dav.mak" CFG="mod_dav - Win32 Release"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "mod_dav - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mod_dav - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "mod_dav - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /O2 /I "../../../include" /I "../../../srclib/apr/include" /I "../../../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "DAV_DECLARE_EXPORT" /Fd"Release\mod_dav" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib ws2_32.lib mswsock.lib /nologo /subsystem:windows /dll /map /machine:I386 /out:"Release/mod_dav.so" /base:@..\..\..\os\win32\BaseAddr.ref,mod_dav
-# ADD LINK32 kernel32.lib ws2_32.lib mswsock.lib /nologo /subsystem:windows /dll /map /machine:I386 /out:"Release/mod_dav.so" /base:@..\..\..\os\win32\BaseAddr.ref,mod_dav
-
-!ELSEIF  "$(CFG)" == "mod_dav - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../../include" /I "../../../srclib/apr/include" /I "../../../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "DAV_DECLARE_EXPORT" /Fd"Debug\mod_dav" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib ws2_32.lib mswsock.lib /nologo /subsystem:windows /dll /incremental:no /map /debug /machine:I386 /out:"Debug/mod_dav.so" /base:@..\..\..\os\win32\BaseAddr.ref,mod_dav
-# ADD LINK32 kernel32.lib ws2_32.lib mswsock.lib /nologo /subsystem:windows /dll /map /debug /machine:I386 /out:"Debug/mod_dav.so" /base:@..\..\..\os\win32\BaseAddr.ref,mod_dav
-
-!ENDIF 
-
-# Begin Target
-
-# Name "mod_dav - Win32 Release"
-# Name "mod_dav - Win32 Debug"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90"
-# Begin Source File
-
-SOURCE=.\liveprop.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mod_dav.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\props.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\providers.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\std_liveprop.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\util.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\util_lock.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd"
-# Begin Source File
-
-SOURCE=.\mod_dav.h
-# End Source File
-# End Group
-# Begin Source File
-
-SOURCE=.\mod_dav.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\build\win32\win32ver.awk
-
-!IF  "$(CFG)" == "mod_dav - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\..\build\win32\win32ver.awk
-
-".\mod_dav.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ../../../build/win32/win32ver.awk mod_dav  "dav_module for Apache" ../../../include/ap_release.h > .\mod_dav.rc
-
-# End Custom Build
-
-!ELSEIF  "$(CFG)" == "mod_dav - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\..\build\win32\win32ver.awk
-
-".\mod_dav.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ../../../build/win32/win32ver.awk mod_dav  "dav_module for Apache" ../../../include/ap_release.h > .\mod_dav.rc
-
-# End Custom Build
-
-!ENDIF 
-
-# End Source File
-# End Target
-# End Project
diff --git a/modules/dav/main/mod_dav.h b/modules/dav/main/mod_dav.h
deleted file mode 100644
index 466e909..0000000
--- a/modules/dav/main/mod_dav.h
+++ /dev/null
@@ -1,2346 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-/*
-** DAV extension module for Apache 2.0.*
-*/
-
-#ifndef _MOD_DAV_H_
-#define _MOD_DAV_H_
-
-#include "apr_hooks.h"
-#include "apr_hash.h"
-#include "apr_dbm.h"
-#include "apr_tables.h"
-
-#include "httpd.h"
-#include "util_filter.h"
-#include "util_xml.h"
-
-#include <limits.h>     /* for INT_MAX */
-#include <time.h>       /* for time_t */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-#define DAV_VERSION		AP_SERVER_BASEREVISION
-
-#define DAV_XML_HEADER		"<?xml version=\"1.0\" encoding=\"utf-8\"?>"
-#define DAV_XML_CONTENT_TYPE	"text/xml; charset=\"utf-8\""
-
-#define DAV_READ_BLOCKSIZE	2048	/* used for reading input blocks */
-
-#define DAV_RESPONSE_BODY_1	"<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\">\n<html><head>\n<title>"
-#define DAV_RESPONSE_BODY_2	"</title>\n</head><body>\n<h1>"
-#define DAV_RESPONSE_BODY_3	"</h1>\n<p>"
-#define DAV_RESPONSE_BODY_4	"</p>\n"
-#define DAV_RESPONSE_BODY_5	"</body></html>\n"
-
-#define DAV_DO_COPY		0
-#define DAV_DO_MOVE		1
-
-
-#if 1
-#define DAV_DEBUG 1
-#define DEBUG_CR	"\n"
-#define DBG0(f)		ap_log_error(APLOG_MARK, \
-				APLOG_ERR|APLOG_NOERRNO, 0, NULL, (f))
-#define DBG1(f,a1)	ap_log_error(APLOG_MARK, \
-				APLOG_ERR|APLOG_NOERRNO, 0, NULL, f, a1)
-#define DBG2(f,a1,a2)	ap_log_error(APLOG_MARK, \
-				APLOG_ERR|APLOG_NOERRNO, 0, NULL, f, a1, a2)
-#define DBG3(f,a1,a2,a3) ap_log_error(APLOG_MARK, \
-			       APLOG_ERR|APLOG_NOERRNO, 0, NULL, f, a1, a2, a3)
-#else
-#undef DAV_DEBUG
-#define DEBUG_CR	""
-#endif
-
-#define DAV_INFINITY	INT_MAX	/* for the Depth: header */
-
-/* Create a set of DAV_DECLARE(type), DAV_DECLARE_NONSTD(type) and 
- * DAV_DECLARE_DATA with appropriate export and import tags for the platform
- */
-#if !defined(WIN32)
-#define DAV_DECLARE(type)            type
-#define DAV_DECLARE_NONSTD(type)     type
-#define DAV_DECLARE_DATA
-#elif defined(DAV_DECLARE_STATIC)
-#define DAV_DECLARE(type)            type __stdcall
-#define DAV_DECLARE_NONSTD(type)     type
-#define DAV_DECLARE_DATA
-#elif defined(DAV_DECLARE_EXPORT)
-#define DAV_DECLARE(type)            __declspec(dllexport) type __stdcall
-#define DAV_DECLARE_NONSTD(type)     __declspec(dllexport) type
-#define DAV_DECLARE_DATA             __declspec(dllexport)
-#else
-#define DAV_DECLARE(type)            __declspec(dllimport) type __stdcall
-#define DAV_DECLARE_NONSTD(type)     __declspec(dllimport) type
-#define DAV_DECLARE_DATA             __declspec(dllimport)
-#endif
-
-/* --------------------------------------------------------------------
-**
-** ERROR MANAGEMENT
-*/
-
-/*
-** dav_error structure.
-**
-** In most cases, mod_dav uses a pointer to a dav_error structure. If the
-** pointer is NULL, then no error has occurred.
-**
-** In certain cases, a dav_error structure is directly used. In these cases,
-** a status value of 0 means that an error has not occurred.
-**
-** Note: this implies that status != 0 whenever an error occurs.
-**
-** The desc field is optional (it may be NULL). When NULL, it typically
-** implies that Apache has a proper description for the specified status.
-*/
-typedef struct dav_error {
-    int status;			/* suggested HTTP status (0 for no error) */
-    int error_id;		/* DAV-specific error ID */
-    const char *desc;		/* DAV:responsedescription and error log */
-
-    int save_errno;		/* copy of errno causing the error */
-
-    const char *namespace;      /* [optional] namespace of error */
-    const char *tagname;        /* name of error-tag */
-
-    struct dav_error *prev;	/* previous error (in stack) */
-
-} dav_error;
-
-/*
-** Create a new error structure. save_errno will be filled with the current
-** errno value.
-*/
-DAV_DECLARE(dav_error*) dav_new_error(apr_pool_t *p, int status, 
-                                      int error_id, const char *desc);
-
-
-/*
-** Create a new error structure with tagname and (optional) namespace;
-** namespace may be NULL, which means "DAV:". save_errno will be
-** filled with the current errno value.
-*/
-DAV_DECLARE(dav_error*) dav_new_error_tag(apr_pool_t *p, int status, 
-                                          int error_id, const char *desc,
-                                          const char *namespace,
-                                          const char *tagname);
-
-
-/*
-** Push a new error description onto the stack of errors.
-**
-** This function is used to provide an additional description to an existing
-** error.
-**
-** <status> should contain the caller's view of what the current status is,
-** given the underlying error. If it doesn't have a better idea, then the
-** caller should pass prev->status.
-**
-** <error_id> can specify a new error_id since the topmost description has
-** changed.
-*/
-DAV_DECLARE(dav_error*) dav_push_error(apr_pool_t *p, int status, int error_id,
-                                       const char *desc, dav_error *prev);
-
-
-/* error ID values... */
-
-/* IF: header errors */
-#define DAV_ERR_IF_PARSE		100	/* general parsing error */
-#define DAV_ERR_IF_MULTIPLE_NOT		101	/* multiple "Not" found */
-#define DAV_ERR_IF_UNK_CHAR		102	/* unknown char in header */
-#define DAV_ERR_IF_ABSENT		103	/* no locktokens given */
-#define DAV_ERR_IF_TAGGED		104	/* in parsing tagged-list */
-#define DAV_ERR_IF_UNCLOSED_PAREN	105	/* in no-tagged-list */
-
-/* Prop DB errors */
-#define DAV_ERR_PROP_BAD_MAJOR		200	/* major version was wrong */
-#define DAV_ERR_PROP_READONLY		201	/* prop is read-only */
-#define DAV_ERR_PROP_NO_DATABASE	202	/* writable db not avail */
-#define DAV_ERR_PROP_NOT_FOUND		203	/* prop not found */
-#define DAV_ERR_PROP_BAD_LOCKDB		204	/* could not open lockdb */
-#define DAV_ERR_PROP_OPENING		205	/* problem opening propdb */
-#define DAV_ERR_PROP_EXEC		206	/* problem exec'ing patch */
-
-/* Predefined DB errors */
-/* ### any to define?? */
-
-/* Predefined locking system errors */
-#define DAV_ERR_LOCK_OPENDB		400	/* could not open lockdb */
-#define DAV_ERR_LOCK_NO_DB		401	/* no database defined */
-#define DAV_ERR_LOCK_CORRUPT_DB		402	/* DB is corrupt */
-#define DAV_ERR_LOCK_UNK_STATE_TOKEN	403	/* unknown State-token */
-#define DAV_ERR_LOCK_PARSE_TOKEN	404	/* bad opaquelocktoken */
-#define DAV_ERR_LOCK_SAVE_LOCK		405	/* err saving locks */
-
-/*
-** Some comments on Error ID values:
-**
-** The numbers do not necessarily need to be unique. Uniqueness simply means
-** that two errors that have not been predefined above can be distinguished
-** from each other. At the moment, mod_dav does not use this distinguishing
-** feature, but it could be used in the future to collapse <response> elements
-** into groups based on the error ID (and associated responsedescription).
-**
-** If a compute_desc is provided, then the error ID should be unique within
-** the context of the compute_desc function (so the function can figure out
-** what to filled into the desc).
-**
-** Basically, subsystems can ignore defining new error ID values if they want
-** to. The subsystems *do* need to return the predefined errors when
-** appropriate, so that mod_dav can figure out what to do. Subsystems can
-** simply leave the error ID field unfilled (zero) if there isn't an error
-** that must be placed there.
-*/
-
-
-/* --------------------------------------------------------------------
-**
-** HOOK STRUCTURES
-**
-** These are here for forward-declaration purposes. For more info, see
-** the section title "HOOK HANDLING" for more information, plus each
-** structure definition.
-*/
-
-/* forward-declare this structure */
-typedef struct dav_hooks_propdb dav_hooks_propdb;
-typedef struct dav_hooks_locks dav_hooks_locks;
-typedef struct dav_hooks_vsn dav_hooks_vsn;
-typedef struct dav_hooks_repository dav_hooks_repository;
-typedef struct dav_hooks_liveprop dav_hooks_liveprop;
-typedef struct dav_hooks_binding dav_hooks_binding;
-
-/* ### deprecated name */
-typedef dav_hooks_propdb dav_hooks_db;
-
-
-/* --------------------------------------------------------------------
-**
-** RESOURCE HANDLING
-*/
-
-/*
-** Resource Types:
-** The base protocol defines only file and collection resources.
-** The versioning protocol defines several additional resource types
-** to represent artifacts of a version control system.
-**
-** This enumeration identifies the type of URL used to identify the
-** resource. Since the same resource may have more than one type of
-** URL which can identify it, dav_resource_type cannot be used
-** alone to determine the type of the resource; attributes of the
-** dav_resource object must also be consulted.
-*/
-typedef enum {
-    DAV_RESOURCE_TYPE_UNKNOWN,
-
-    DAV_RESOURCE_TYPE_REGULAR,          /* file or collection; could be
-                                         * unversioned, or version selector,
-                                         * or baseline selector */
-
-    DAV_RESOURCE_TYPE_VERSION,          /* version or baseline URL */
-
-    DAV_RESOURCE_TYPE_HISTORY,          /* version or baseline history URL */
-
-    DAV_RESOURCE_TYPE_WORKING,          /* working resource URL */
-
-    DAV_RESOURCE_TYPE_WORKSPACE,        /* workspace URL */
-
-    DAV_RESOURCE_TYPE_ACTIVITY,         /* activity URL */
-
-    DAV_RESOURCE_TYPE_PRIVATE           /* repository-private type */
-
-} dav_resource_type;
-
-/*
-** Opaque, repository-specific information for a resource.
-*/
-typedef struct dav_resource_private dav_resource_private;
-
-/*
-** Resource descriptor, generated by a repository provider.
-**
-** Note: the lock-null state is not explicitly represented here,
-** since it may be expensive to compute. Use dav_get_resource_state()
-** to determine whether a non-existent resource is a lock-null resource.
-**
-** A quick explanation of how the flags can apply to different resources:
-**
-** unversioned file or collection:
-**     type       = DAV_RESOURCE_TYPE_REGULAR
-**     exists     = ? (1 if exists)
-**     collection = ? (1 if collection)
-**     versioned  = 0
-**     baselined  = 0
-**     working    = 0
-**
-** version-controlled resource or configuration:
-**     type       = DAV_RESOURCE_TYPE_REGULAR
-**     exists     = 1
-**     collection = ? (1 if collection)
-**     versioned  = 1
-**     baselined  = ? (1 if configuration)
-**     working    = ? (1 if checked out)
-**
-** version/baseline history:
-**     type       = DAV_RESOURCE_TYPE_HISTORY
-**     exists     = 1
-**     collection = 0
-**     versioned  = 0
-**     baselined  = 0
-**     working    = 0
-**
-** version/baseline:
-**     type       = DAV_RESOURCE_TYPE_VERSION
-**     exists     = 1
-**     collection = ? (1 if collection)
-**     versioned  = 1
-**     baselined  = ? (1 if baseline)
-**     working    = 0
-**
-** working resource:
-**     type       = DAV_RESOURCE_TYPE_WORKING
-**     exists     = 1
-**     collection = ? (1 if collection)
-**     versioned  = 1
-**     baselined  = 0
-**     working    = 1
-**
-** workspace:
-**     type       = DAV_RESOURCE_TYPE_WORKSPACE
-**     exists     = ? (1 if exists)
-**     collection = 1
-**     versioned  = ? (1 if version-controlled)
-**     baselined  = ? (1 if baseline-controlled)
-**     working    = ? (1 if checked out)
-**
-** activity:
-**     type       = DAV_RESOURCE_TYPE_ACTIVITY
-**     exists     = ? (1 if exists)
-**     collection = 0
-**     versioned  = 0
-**     baselined  = 0
-**     working    = 0
-*/
-typedef struct dav_resource {
-    dav_resource_type type;
-
-    int exists;		/* 0 => null resource */
-
-    int collection;	/* 0 => file; can be 1 for
-                         * REGULAR, VERSION, and WORKING resources,
-                         * and is always 1 for WORKSPACE */
-
-    int versioned;	/* 0 => unversioned; can be 1 for
-                         * REGULAR and WORKSPACE resources,
-                         * and is always 1 for VERSION and WORKING */
-
-    int baselined;      /* 0 => not baselined; can be 1 for
-                         * REGULAR, VERSION, and WORKSPACE resources;
-                         * versioned == 1 when baselined == 1 */
-
-    int working;	/* 0 => not checked out; can be 1 for
-                         * REGULAR and WORKSPACE resources,
-                         * and is always 1 for WORKING */
-
-    const char *uri;	/* the URI for this resource */
-
-    dav_resource_private *info;         /* the provider's private info */
-
-    const dav_hooks_repository *hooks;	/* hooks used for this resource */
-
-    /* When allocating items related specifically to this resource, the
-       following pool should be used. Its lifetime will be at least as
-       long as the dav_resource structure. */
-    apr_pool_t *pool;
-
-} dav_resource;
-
-/*
-** Lock token type. Lock providers define the details of a lock token.
-** However, all providers are expected to at least be able to parse
-** the "opaquelocktoken" scheme, which is represented by a uuid_t.
-*/
-typedef struct dav_locktoken dav_locktoken;
-
-
-/* --------------------------------------------------------------------
-**
-** BUFFER HANDLING
-**
-** These buffers are used as a lightweight buffer reuse mechanism. Apache
-** provides sub-pool creation and destruction to much the same effect, but
-** the sub-pools are a bit more general and heavyweight than these buffers.
-*/
-
-/* buffer for reuse; can grow to accomodate needed size */
-typedef struct
-{
-    apr_size_t alloc_len;	/* how much has been allocated */
-    apr_size_t cur_len;		/* how much is currently being used */
-    char *buf;			/* buffer contents */
-} dav_buffer;
-#define DAV_BUFFER_MINSIZE	256	/* minimum size for buffer */
-#define DAV_BUFFER_PAD		64	/* amount of pad when growing */
-
-/* set the cur_len to the given size and ensure space is available */
-DAV_DECLARE(void) dav_set_bufsize(apr_pool_t *p, dav_buffer *pbuf, 
-                                  apr_size_t size);
-
-/* initialize a buffer and copy the specified (null-term'd) string into it */
-DAV_DECLARE(void) dav_buffer_init(apr_pool_t *p, dav_buffer *pbuf, 
-                                  const char *str);
-
-/* check that the buffer can accomodate <extra_needed> more bytes */
-DAV_DECLARE(void) dav_check_bufsize(apr_pool_t *p, dav_buffer *pbuf, 
-                                    apr_size_t extra_needed);
-
-/* append a string to the end of the buffer, adjust length */
-DAV_DECLARE(void) dav_buffer_append(apr_pool_t *p, dav_buffer *pbuf, 
-                                    const char *str);
-
-/* place a string on the end of the buffer, do NOT adjust length */
-DAV_DECLARE(void) dav_buffer_place(apr_pool_t *p, dav_buffer *pbuf, 
-                                   const char *str);
-
-/* place some memory on the end of a buffer; do NOT adjust length */
-DAV_DECLARE(void) dav_buffer_place_mem(apr_pool_t *p, dav_buffer *pbuf, 
-                                       const void *mem, apr_size_t amt, 
-                                       apr_size_t pad);
-
-
-/* --------------------------------------------------------------------
-**
-** HANDY UTILITIES
-*/
-
-/* contains results from one of the getprop functions */
-typedef struct
-{
-    ap_text * propstats;	/* <propstat> element text */
-    ap_text * xmlns;		/* namespace decls for <response> elem */
-} dav_get_props_result;
-
-/* holds the contents of a <response> element */
-typedef struct dav_response
-{
-    const char *href;		/* always */
-    const char *desc;		/* optional description at <response> level */
-
-    /* use status if propresult.propstats is NULL. */
-    dav_get_props_result propresult;
-
-    int status;
-
-    struct dav_response *next;
-} dav_response;
-
-typedef struct
-{
-    request_rec *rnew;		/* new subrequest */
-    dav_error err;		/* potential error response */
-} dav_lookup_result;
-
-
-dav_lookup_result dav_lookup_uri(const char *uri, request_rec *r,
-                                 int must_be_absolute);
-
-/* defines type of property info a provider is to return */
-typedef enum {
-    DAV_PROP_INSERT_NOTDEF,	/* property is defined by this provider,
-				   but nothing was inserted because the
-				   (live) property is not defined for this
-				   resource (it may be present as a dead
-				   property). */
-    DAV_PROP_INSERT_NOTSUPP,    /* property is recognized by this provider,
-                                   but it is not supported, and cannot be
-                                   treated as a dead property */
-    DAV_PROP_INSERT_NAME,	/* a property name (empty elem) was
-				   inserted into the text block */
-    DAV_PROP_INSERT_VALUE,	/* a property name/value pair was inserted
-				   into the text block */
-    DAV_PROP_INSERT_SUPPORTED   /* a supported live property was added to
-                                   the text block as a
-                                   <DAV:supported-live-property> element */
-} dav_prop_insert;
-
-/* ### this stuff is private to dav/fs/repos.c; move it... */
-/* format a time string (buf must be at least DAV_TIMEBUF_SIZE chars) */
-#define DAV_STYLE_ISO8601	1
-#define DAV_STYLE_RFC822	2
-#define DAV_TIMEBUF_SIZE	30
-
-int dav_get_depth(request_rec *r, int def_depth);
-
-int dav_validate_root(const ap_xml_doc *doc, const char *tagname);
-ap_xml_elem *dav_find_child(const ap_xml_elem *elem, const char *tagname);
-
-/* gather up all the CDATA into a single string */
-DAV_DECLARE(const char *) dav_xml_get_cdata(const ap_xml_elem *elem, apr_pool_t *pool,
-                              int strip_white);
-
-/*
-** XML namespace handling
-**
-** This structure tracks namespace declarations (xmlns:prefix="URI").
-** It maintains a one-to-many relationship of URIs-to-prefixes. In other
-** words, one URI may be defined by many prefixes, but any specific
-** prefix will specify only one URI.
-**
-** Prefixes using the "g###" pattern can be generated automatically if
-** the caller does not have specific prefix requirements.
-*/
-typedef struct {
-    apr_pool_t *pool;
-    apr_hash_t *uri_prefix;     /* map URIs to an available prefix */
-    apr_hash_t *prefix_uri;     /* map all prefixes to their URIs */
-    int count;                  /* counter for "g###" prefixes */
-} dav_xmlns_info;
-
-/* create an empty dav_xmlns_info structure */
-DAV_DECLARE(dav_xmlns_info *) dav_xmlns_create(apr_pool_t *pool);
-
-/* add a specific prefix/URI pair. the prefix/uri should have a lifetime
-   at least that of xmlns->pool */
-DAV_DECLARE(void) dav_xmlns_add(dav_xmlns_info *xi,
-                                const char *prefix, const char *uri);
-
-/* add a URI (if not present); any prefix is acceptable and is returned.
-   the uri should have a lifetime at least that xmlns->pool */
-DAV_DECLARE(const char *) dav_xmlns_add_uri(dav_xmlns_info *xi,
-                                            const char *uri);
-
-/* return the URI for a specified prefix (or NULL if the prefix is unknown) */
-DAV_DECLARE(const char *) dav_xmlns_get_uri(dav_xmlns_info *xi,
-                                            const char *prefix);
-
-/* return an available prefix for a specified URI (or NULL if the URI
-   is unknown) */
-DAV_DECLARE(const char *) dav_xmlns_get_prefix(dav_xmlns_info *xi,
-                                               const char *uri);
-
-/* generate xmlns declarations (appending into the given text) */
-DAV_DECLARE(void) dav_xmlns_generate(dav_xmlns_info *xi,
-                                     apr_text_header *phdr);
-
-/* --------------------------------------------------------------------
-**
-** DAV PLUGINS
-*/
-
-/* ### docco ... */
-
-/*
-** dav_provider
-**
-** This structure wraps up all of the hooks that a mod_dav provider can
-** supply. The provider MUST supply <repos> and <propdb>. The rest are
-** optional and should contain NULL if that feature is not supplied.
-**
-** Note that a provider cannot pick and choose portions from various
-** underlying implementations (which was theoretically possible in
-** mod_dav 1.0). There are too many dependencies between a dav_resource
-** (defined by <repos>) and the other functionality.
-**
-** Live properties are not part of the dav_provider structure because they
-** are handled through the APR_HOOK interface (to allow for multiple liveprop
-** providers). The core always provides some properties, and then a given
-** provider will add more properties.
-*/
-typedef struct {
-    const dav_hooks_repository *repos;
-    const dav_hooks_propdb *propdb;
-    const dav_hooks_locks *locks;
-    const dav_hooks_vsn *vsn;
-    const dav_hooks_binding *binding;
-
-} dav_provider;
-
-/*
-** gather_propsets: gather all live property propset-URIs
-**
-** The hook implementor should push one or more URIs into the specified
-** array. These URIs are returned in the DAV: header to let clients know
-** what sets of live properties are supported by the installation. mod_dav
-** will place open/close angle brackets around each value (much like
-** a Coded-URL); quotes and brackets should not be in the value.
-**
-** Example:    http://apache.org/dav/props/
-**
-** (of course, use your own domain to ensure a unique value)
-*/
-APR_DECLARE_EXTERNAL_HOOK(dav, DAV, void, gather_propsets, 
-                         (apr_array_header_t *uris))
-
-/*
-** find_liveprop: find a live property, returning a non-zero, unique,
-**                opaque identifier.
-**
-** If the hook implementor determines the specified URI/name refers to
-** one of its properties, then it should fill in HOOKS and return a
-** non-zero value. The returned value is the "property ID" and will
-** be passed to the various liveprop hook functions.
-**
-** Return 0 if the property is not defined by the hook implementor.
-*/
-APR_DECLARE_EXTERNAL_HOOK(dav, DAV, int, find_liveprop,
-                         (const dav_resource *resource,
-                          const char *ns_uri, const char *name,
-                          const dav_hooks_liveprop **hooks))
-
-/*
-** insert_all_liveprops: insert all (known) live property names/values.
-**
-** The hook implementor should append XML text to PHDR, containing liveprop
-** names. If INSVALUE is true, then the property values should also be
-** inserted into the output XML stream.
-**
-** The liveprop provider should insert *all* known and *defined* live
-** properties on the specified resource. If a particular liveprop is
-** not defined for this resource, then it should not be inserted.
-*/
-APR_DECLARE_EXTERNAL_HOOK(dav, DAV, void, insert_all_liveprops, 
-                         (request_rec *r, const dav_resource *resource,
-                          dav_prop_insert what, ap_text_header *phdr))
-
-const dav_hooks_locks *dav_get_lock_hooks(request_rec *r);
-const dav_hooks_propdb *dav_get_propdb_hooks(request_rec *r);
-const dav_hooks_vsn *dav_get_vsn_hooks(request_rec *r);
-const dav_hooks_binding *dav_get_binding_hooks(request_rec *r);
-
-DAV_DECLARE(void) dav_register_provider(apr_pool_t *p, const char *name,
-                                        const dav_provider *hooks);
-const dav_provider * dav_lookup_provider(const char *name);
-
-
-/* ### deprecated */
-#define DAV_GET_HOOKS_PROPDB(r)         dav_get_propdb_hooks(r)
-#define DAV_GET_HOOKS_LOCKS(r)          dav_get_lock_hooks(r)
-#define DAV_GET_HOOKS_VSN(r)            dav_get_vsn_hooks(r)
-#define DAV_GET_HOOKS_BINDING(r)        dav_get_binding_hooks(r)
-
-
-/* --------------------------------------------------------------------
-**
-** IF HEADER PROCESSING
-**
-** Here is the definition of the If: header from RFC 2518, S9.4:
-**
-**    If = "If" ":" (1*No-tag-list | 1*Tagged-list)
-**    No-tag-list = List
-**    Tagged-list = Resource 1*List
-**    Resource = Coded-URL
-**    List = "(" 1*(["Not"](State-token | "[" entity-tag "]")) ")"
-**    State-token = Coded-URL
-**    Coded-URL = "<" absoluteURI ">"        ; absoluteURI from RFC 2616
-**
-** List corresponds to dav_if_state_list. No-tag-list corresponds to
-** dav_if_header with uri==NULL. Tagged-list corresponds to a sequence of
-** dav_if_header structures with (duplicate) uri==Resource -- one
-** dav_if_header per state_list. A second Tagged-list will start a new
-** sequence of dav_if_header structures with the new URI.
-**
-** A summary of the semantics, mapped into our structures:
-**    - Chained dav_if_headers: OR
-**    - Chained dav_if_state_lists: AND
-**    - NULL uri matches all resources
-*/
-
-typedef enum
-{
-    dav_if_etag,
-    dav_if_opaquelock
-} dav_if_state_type;
-
-typedef struct dav_if_state_list
-{
-    dav_if_state_type type;
-
-    int condition;
-#define DAV_IF_COND_NORMAL	0
-#define DAV_IF_COND_NOT		1	/* "Not" was applied */
-
-    const char *etag;	/* etag */
-    dav_locktoken *locktoken;   /* locktoken */
-
-    struct dav_if_state_list *next;
-} dav_if_state_list;
-
-typedef struct dav_if_header
-{
-    const char *uri;
-    apr_size_t uri_len;
-    struct dav_if_state_list *state;
-    struct dav_if_header *next;
-
-    int dummy_header;	/* used internally by the lock/etag validation */
-} dav_if_header;
-
-typedef struct dav_locktoken_list 
-{
-    dav_locktoken *locktoken;
-    struct dav_locktoken_list *next;
-} dav_locktoken_list;
-
-dav_error * dav_get_locktoken_list(request_rec *r, dav_locktoken_list **ltl);
-
-
-/* --------------------------------------------------------------------
-**
-** LIVE PROPERTY HANDLING
-*/
-
-/* opaque type for PROPPATCH rollback information */
-typedef struct dav_liveprop_rollback dav_liveprop_rollback;
-
-struct dav_hooks_liveprop
-{
-    /*
-    ** Insert property information into a text block. The property to
-    ** insert is identified by the propid value. The information to insert
-    ** is identified by the "what" argument, as follows:
-    **   DAV_PROP_INSERT_NAME
-    **      property name, as an empty XML element
-    **   DAV_PROP_INSERT_VALUE
-    **      property name/value, as an XML element
-    **   DAV_PROP_INSERT_SUPPORTED
-    **      if the property is defined on the resource, then
-    **      a DAV:supported-live-property element, as defined
-    **      by the DeltaV extensions to RFC2518.
-    **                      
-    ** Providers should return DAV_PROP_INSERT_NOTDEF if the property is
-    ** known and not defined for this resource, so should be handled as a
-    ** dead property. If a provider recognizes, but does not support, a
-    ** property, and does not want it handled as a dead property, it should
-    ** return DAV_PROP_INSERT_NOTSUPP.
-    **
-    ** Returns one of DAV_PROP_INSERT_* based on what happened.
-    **
-    ** ### we may need more context... ie. the lock database
-    */
-    dav_prop_insert (*insert_prop)(const dav_resource *resource,
-				   int propid, dav_prop_insert what,
-				   ap_text_header *phdr);
-
-    /*
-    ** Determine whether a given property is writable.
-    **
-    ** ### we may want a different semantic. i.e. maybe it should be
-    ** ### "can we write <value> into this property?"
-    **
-    ** Returns 1 if the live property can be written, 0 if read-only.
-    */
-    int (*is_writable)(const dav_resource *resource, int propid);
-
-    /*
-    ** This member defines the set of namespace URIs that the provider
-    ** uses for its properties. When insert_all is called, it will be
-    ** passed a list of integers that map from indices into this list
-    ** to namespace IDs for output generation.
-    **
-    ** The last entry in this list should be a NULL value (sentinel).
-    */
-    const char * const * namespace_uris;
-
-    /*
-    ** ### this is not the final design. we want an open-ended way for
-    ** ### liveprop providers to attach *new* properties. To this end,
-    ** ### we'll have a "give me a list of the props you define", a way
-    ** ### to check for a prop's existence, a way to validate a set/remove
-    ** ### of a prop, and a way to execute/commit/rollback that change.
-    */
-
-    /*
-    ** Validate that the live property can be assigned a value, and that
-    ** the provided value is valid.
-    **
-    ** elem will point to the XML element that names the property. For
-    ** example:
-    **     <lp1:executable>T</lp1:executable>
-    **
-    ** The provider can access the cdata fields and the child elements
-    ** to extract the relevant pieces.
-    **
-    ** operation is one of DAV_PROP_OP_SET or _DELETE.
-    **
-    ** The provider may return a value in *context which will be passed
-    ** to each of the exec/commit/rollback functions. For example, this
-    ** may contain an internal value which has been processed from the
-    ** input element.
-    **
-    ** The provider must set defer_to_dead to true (non-zero) or false.
-    ** If true, then the set/remove is deferred to the dead property
-    ** database. Note: it will be set to zero on entry.
-    */
-    dav_error * (*patch_validate)(const dav_resource *resource,
-				  const ap_xml_elem *elem,
-				  int operation,
-				  void **context,
-				  int *defer_to_dead);
-
-    /* ### doc... */
-    dav_error * (*patch_exec)(const dav_resource *resource,
-			      const ap_xml_elem *elem,
-			      int operation,
-			      void *context,
-			      dav_liveprop_rollback **rollback_ctx);
-
-    /* ### doc... */
-    void (*patch_commit)(const dav_resource *resource,
-			 int operation,
-			 void *context,
-			 dav_liveprop_rollback *rollback_ctx);
-
-    /* ### doc... */
-    dav_error * (*patch_rollback)(const dav_resource *resource,
-				  int operation,
-				  void *context,
-				  dav_liveprop_rollback *rollback_ctx);
-};
-
-/*
-** dav_liveprop_spec: specify a live property
-**
-** This structure is used as a standard way to determine if a particular
-** property is a live property. Its use is not part of the mandated liveprop
-** interface, but can be used by liveprop providers in conjuction with the
-** utility routines below.
-**
-** spec->name == NULL is the defined end-sentinel for a list of specs.
-*/
-typedef struct {
-    int ns;             /* provider-local namespace index */
-    const char *name;   /* name of the property */
-
-    int propid;         /* provider-local property ID */
-
-    int is_writable;    /* is the property writable? */
-
-} dav_liveprop_spec;
-
-/*
-** dav_liveprop_group: specify a group of liveprops
-**
-** This structure specifies a group of live properties, their namespaces,
-** and how to handle them.
-*/
-typedef struct {
-    const dav_liveprop_spec *specs;
-    const char * const *namespace_uris;
-    const dav_hooks_liveprop *hooks;
-
-} dav_liveprop_group;
-
-/* ### docco */
-DAV_DECLARE(int) dav_do_find_liveprop(const char *ns_uri, const char *name,
-                                      const dav_liveprop_group *group,
-                                      const dav_hooks_liveprop **hooks);
-
-/* ### docco */
-DAV_DECLARE(int) dav_get_liveprop_info(int propid,
-                                       const dav_liveprop_group *group,
-                                       const dav_liveprop_spec **info);
-
-/* ### docco */
-DAV_DECLARE(void) dav_register_liveprop_group(apr_pool_t *pool, 
-                                              const dav_liveprop_group *group);
-
-/* ### docco */
-DAV_DECLARE(int) dav_get_liveprop_ns_index(const char *uri);
-
-/* ### docco */
-int dav_get_liveprop_ns_count(void);
-
-/* ### docco */
-void dav_add_all_liveprop_xmlns(apr_pool_t *p, ap_text_header *phdr);
-
-/*
-** The following three functions are part of mod_dav's internal handling
-** for the core WebDAV properties. They are not part of mod_dav's API.
-*/
-int dav_core_find_liveprop(const dav_resource *resource,
-                           const char *ns_uri, const char *name,
-                           const dav_hooks_liveprop **hooks);
-void dav_core_insert_all_liveprops(request_rec *r,
-                                   const dav_resource *resource,
-                                   dav_prop_insert what, ap_text_header *phdr);
-void dav_core_register_uris(apr_pool_t *p);
-
-
-/*
-** Standard WebDAV Property Identifiers
-**
-** A live property provider does not need to use these; they are simply
-** provided for convenience.
-**
-** Property identifiers need to be unique within a given provider, but not
-** *across* providers (note: this uniqueness constraint was different in
-** older versions of mod_dav).
-**
-** The identifiers start at 20000 to make it easier for providers to avoid
-** conflicts with the standard properties. The properties are arranged
-** alphabetically, and may be reordered from time to time (as properties
-** are introduced).
-**
-** NOTE: there is no problem with reordering (e.g. binary compat) since the
-** identifiers are only used within a given provider, which would pick up
-** the entire set of changes upon a recompile.
-*/
-enum {
-    DAV_PROPID_BEGIN = 20000,
-
-    /* Standard WebDAV properties (RFC 2518) */
-    DAV_PROPID_creationdate,
-    DAV_PROPID_displayname,
-    DAV_PROPID_getcontentlanguage,
-    DAV_PROPID_getcontentlength,
-    DAV_PROPID_getcontenttype,
-    DAV_PROPID_getetag,
-    DAV_PROPID_getlastmodified,
-    DAV_PROPID_lockdiscovery,
-    DAV_PROPID_resourcetype,
-    DAV_PROPID_source,
-    DAV_PROPID_supportedlock,
-
-    /* DeltaV properties (from the I-D (#14)) */
-    DAV_PROPID_activity_checkout_set,
-    DAV_PROPID_activity_set,
-    DAV_PROPID_activity_version_set,
-    DAV_PROPID_auto_merge_set,
-    DAV_PROPID_auto_version,
-    DAV_PROPID_baseline_collection,
-    DAV_PROPID_baseline_controlled_collection,
-    DAV_PROPID_baseline_controlled_collection_set,
-    DAV_PROPID_checked_in,
-    DAV_PROPID_checked_out,
-    DAV_PROPID_checkin_fork,
-    DAV_PROPID_checkout_fork,
-    DAV_PROPID_checkout_set,
-    DAV_PROPID_comment,
-    DAV_PROPID_creator_displayname,
-    DAV_PROPID_current_activity_set,
-    DAV_PROPID_current_workspace_set,
-    DAV_PROPID_default_variant,
-    DAV_PROPID_eclipsed_set,
-    DAV_PROPID_label_name_set,
-    DAV_PROPID_merge_set,
-    DAV_PROPID_precursor_set,
-    DAV_PROPID_predecessor_set,
-    DAV_PROPID_root_version,
-    DAV_PROPID_subactivity_set,
-    DAV_PROPID_subbaseline_set,
-    DAV_PROPID_successor_set,
-    DAV_PROPID_supported_method_set,
-    DAV_PROPID_supported_live_property_set,
-    DAV_PROPID_supported_report_set,
-    DAV_PROPID_unreserved,
-    DAV_PROPID_variant_set,
-    DAV_PROPID_version_controlled_binding_set,
-    DAV_PROPID_version_controlled_configuration,
-    DAV_PROPID_version_history,
-    DAV_PROPID_version_name,
-    DAV_PROPID_workspace,
-    DAV_PROPID_workspace_checkout_set,
-
-    DAV_PROPID_END
-};
-
-/*
-** Property Identifier Registration
-**
-** At the moment, mod_dav requires live property providers to ensure that
-** each property returned has a unique value. For now, this is done through
-** central registration (there are no known providers other than the default,
-** so this remains manageable).
-**
-** WARNING: the TEST ranges should never be "shipped".
-*/
-#define DAV_PROPID_CORE		10000	/* ..10099. defined by mod_dav */
-#define DAV_PROPID_FS		10100	/* ..10299.
-					   mod_dav filesystem provider. */
-#define DAV_PROPID_TEST1	10300	/* ..10399 */
-#define DAV_PROPID_TEST2	10400	/* ..10499 */
-#define DAV_PROPID_TEST3	10500	/* ..10599 */
-/* Next: 10600 */
-
-
-/* --------------------------------------------------------------------
-**
-** DATABASE FUNCTIONS
-*/
-
-typedef struct dav_db dav_db;
-typedef struct dav_namespace_map dav_namespace_map;
-typedef struct dav_deadprop_rollback dav_deadprop_rollback;
-
-typedef struct {
-    const char *ns;     /* "" signals "no namespace" */
-    const char *name;
-} dav_prop_name;
-
-/* hook functions to enable pluggable databases */
-struct dav_hooks_propdb
-{
-    dav_error * (*open)(apr_pool_t *p, const dav_resource *resource, int ro,
-			dav_db **pdb);
-    void (*close)(dav_db *db);
-
-    /*
-    ** In bulk, define any namespaces that the values and their name
-    ** elements may need.
-    **
-    ** Note: sometimes mod_dav will defer calling this until output_value
-    ** returns found==1. If the output process needs the dav_xmlns_info
-    ** filled for its work, then it will need to fill it on demand rather
-    ** than depending upon this hook to fill in the structure.
-    **
-    ** Note: this will *always* be called during an output sequence. Thus,
-    ** the provider may rely solely on using this to fill the xmlns info.
-    */
-    dav_error * (*define_namespaces)(dav_db *db, dav_xmlns_info *xi);
-
-    /*
-    ** Output the value from the database (i.e. add an element name and
-    ** the value into *phdr). Set *found based on whether the name/value
-    ** was found in the propdb.
-    **
-    ** Note: it is NOT an error for the key/value pair to not exist.
-    **
-    ** The dav_xmlns_info passed to define_namespaces() is also passed to
-    ** each output_value() call so that namespaces can be added on-demand.
-    ** It can also be used to look up prefixes or URIs during the output
-    ** process.
-    */
-    dav_error * (*output_value)(dav_db *db, const dav_prop_name *name,
-                                dav_xmlns_info *xi,
-                                apr_text_header *phdr, int *found);
-
-    /*
-    ** Build a mapping from "global" namespaces (stored in apr_xml_*)
-    ** into provider-local namespace identifiers.
-    **
-    ** This mapping should be done once per set of namespaces, and the
-    ** resulting mapping should be passed into the store() hook function.
-    **
-    ** Note: usually, there is just a single document/namespaces for all
-    ** elements passed. However, the generality of creating multiple
-    ** mappings and passing them to store() is provided here.
-    **
-    ** Note: this is only in preparation for a series of store() calls.
-    ** As a result, the propdb must be open for read/write access when
-    ** this function is called.
-    */
-    dav_error * (*map_namespaces)(dav_db *db,
-                                  const apr_array_header_t *namespaces,
-                                  dav_namespace_map **mapping);
-    
-    /*
-    ** Store a property value for a given name. The value->combined field
-    ** MUST be set for this call.
-    **
-    ** ### WARNING: current providers will quote the text within ELEM.
-    ** ### this implies you can call this function only once with a given
-    ** ### element structure (a second time will quote it again).
-    */
-    dav_error * (*store)(dav_db *db, const dav_prop_name *name,
-                         const apr_xml_elem *elem,
-                         dav_namespace_map *mapping);
-
-    /* remove a given property */
-    dav_error * (*remove)(dav_db *db, const dav_prop_name *name);
-
-    /* returns 1 if the record specified by "key" exists; 0 otherwise */
-    int (*exists)(dav_db *db, const dav_prop_name *name);
-
-    /*
-    ** Iterate over the property names in the database.
-    **
-    ** iter->name.ns == iter->name.name == NULL when there are no more names.
-    **
-    ** Note: only one iteration may occur over the propdb at a time.
-    */
-    dav_error * (*first_name)(dav_db *db, dav_prop_name *pname);
-    dav_error * (*next_name)(dav_db *db, dav_prop_name *pname);
-
-    /*
-    ** Rollback support: get rollback context, and apply it.
-    **
-    ** struct dav_deadprop_rollback is a provider-private structure; it
-    ** should remember the name, and the name's old value (or the fact that
-    ** the value was not present, and should be deleted if a rollback occurs).
-    */
-    dav_error * (*get_rollback)(dav_db *db, const dav_prop_name *name,
-                                dav_deadprop_rollback **prollback);
-    dav_error * (*apply_rollback)(dav_db *db,
-                                  dav_deadprop_rollback *rollback);
-};
-
-
-/* --------------------------------------------------------------------
-**
-** LOCK FUNCTIONS
-*/
-
-/* Used to represent a Timeout header of "Infinity" */
-#define DAV_TIMEOUT_INFINITE 0
-
-time_t dav_get_timeout(request_rec *r);
-
-/*
-** Opaque, provider-specific information for a lock database.
-*/
-typedef struct dav_lockdb_private dav_lockdb_private;
-
-/*
-** Opaque, provider-specific information for a lock record.
-*/
-typedef struct dav_lock_private dav_lock_private;
-
-/*
-** Lock database type. Lock providers are urged to implement a "lazy" open, so
-** doing an "open" is cheap until something is actually needed from the DB.
-*/
-typedef struct
-{
-    const dav_hooks_locks *hooks;	/* the hooks used for this lockdb */
-    int ro;				/* was it opened readonly? */
-
-    dav_lockdb_private *info;
-
-} dav_lockdb;
-
-typedef enum {
-    DAV_LOCKSCOPE_UNKNOWN,
-    DAV_LOCKSCOPE_EXCLUSIVE,
-    DAV_LOCKSCOPE_SHARED
-} dav_lock_scope;
-
-typedef enum {
-    DAV_LOCKTYPE_UNKNOWN,
-    DAV_LOCKTYPE_WRITE
-} dav_lock_type;
-
-typedef enum {
-    DAV_LOCKREC_DIRECT,			/* lock asserted on this resource */
-    DAV_LOCKREC_INDIRECT,		/* lock inherited from a parent */
-    DAV_LOCKREC_INDIRECT_PARTIAL	/* most info is not filled in */
-} dav_lock_rectype;
-
-/*
-** dav_lock: hold information about a lock on a resource.
-**
-** This structure is used for both direct and indirect locks. A direct lock
-** is a lock applied to a specific resource by the client. An indirect lock
-** is one that is inherited from a parent resource by virtue of a non-zero
-** Depth: header when the lock was applied.
-**
-** mod_dav records both types of locks in the lock database, managing their
-** addition/removal as resources are moved about the namespace.
-**
-** Note that the lockdb is free to marshal this structure in any form that
-** it likes.
-**
-** For a "partial" lock, the <rectype> and <locktoken> fields must be filled
-** in. All other (user) fields should be zeroed. The lock provider will
-** usually fill in the <info> field, and the <next> field may be used to
-** construct a list of partial locks.
-**
-** The lock provider MUST use the info field to store a value such that a
-** dav_lock structure can locate itself in the underlying lock database.
-** This requirement is needed for refreshing: when an indirect dav_lock is
-** refreshed, its reference to the direct lock does not specify the direct's
-** resource, so the only way to locate the (refreshed, direct) lock in the
-** database is to use the info field.
-**
-** Note that <is_locknull> only refers to the resource where this lock was
-** found.
-** ### hrm. that says the abstraction is wrong. is_locknull may disappear.
-*/
-typedef struct dav_lock
-{
-    dav_lock_rectype rectype;	/* type of lock record */
-    int is_locknull;		/* lock establishes a locknull resource */
-
-    /* ### put the resource in here? */
-
-    dav_lock_scope scope;	/* scope of the lock */
-    dav_lock_type type;		/* type of lock */
-    int depth;			/* depth of the lock */
-    time_t timeout;		/* when the lock will timeout */
-
-    const dav_locktoken *locktoken;	/* the token that was issued */
-
-    const char *owner;		/* (XML) owner of the lock */
-    const char *auth_user;	/* auth'd username owning lock */
-
-    dav_lock_private *info;	/* private to the lockdb */
-
-    struct dav_lock *next;	/* for managing a list of locks */
-} dav_lock;
-
-/* Property-related public lock functions */
-const char *dav_lock_get_activelock(request_rec *r, dav_lock *locks,
-				    dav_buffer *pbuf);
-
-/* LockDB-related public lock functions */
-dav_error * dav_lock_parse_lockinfo(request_rec *r,
-				    const dav_resource *resrouce,
-				    dav_lockdb *lockdb,
-				    const ap_xml_doc *doc,
-				    dav_lock **lock_request);
-int dav_unlock(request_rec *r, const dav_resource *resource,
-	       const dav_locktoken *locktoken);
-dav_error * dav_add_lock(request_rec *r, const dav_resource *resource,
-			 dav_lockdb *lockdb, dav_lock *request,
-			 dav_response **response);
-dav_error * dav_notify_created(request_rec *r,
-			       dav_lockdb *lockdb,
-			       const dav_resource *resource,
-			       int resource_state,
-			       int depth);
-
-DAV_DECLARE(dav_error*) dav_lock_query(dav_lockdb *lockdb, 
-                                       const dav_resource *resource,
-                                       dav_lock **locks);
-
-dav_error * dav_validate_request(request_rec *r, dav_resource *resource,
-				 int depth, dav_locktoken *locktoken,
-				 dav_response **response, int flags,
-                                 dav_lockdb *lockdb);
-/*
-** flags:
-**    0x0F -- reserved for <dav_lock_scope> values
-**
-**    other flags, detailed below
-*/
-#define DAV_VALIDATE_RESOURCE   0x0010  /* validate just the resource */
-#define DAV_VALIDATE_PARENT     0x0020  /* validate resource AND its parent */
-#define DAV_VALIDATE_ADD_LD     0x0040  /* add DAV:lockdiscovery into
-                                           the 424 DAV:response */
-#define DAV_VALIDATE_USE_424    0x0080  /* return 424 status, not 207 */
-#define DAV_VALIDATE_IS_PARENT  0x0100  /* for internal use */
-
-/* Lock-null related public lock functions */
-int dav_get_resource_state(request_rec *r, const dav_resource *resource);
-
-/* Lock provider hooks. Locking is optional, so there may be no
- * lock provider for a given repository.
- */
-struct dav_hooks_locks
-{
-    /* Return the supportedlock property for a resource */
-    const char * (*get_supportedlock)(
-        const dav_resource *resource
-    );
-
-    /* Parse a lock token URI, returning a lock token object allocated
-     * in the given pool.
-     */
-    dav_error * (*parse_locktoken)(
-        apr_pool_t *p,
-        const char *char_token,
-        dav_locktoken **locktoken_p
-    );
-
-    /* Format a lock token object into a URI string, allocated in
-     * the given pool.
-     *
-     * Always returns non-NULL.
-     */
-    const char * (*format_locktoken)(
-        apr_pool_t *p,
-        const dav_locktoken *locktoken
-    );
-
-    /* Compare two lock tokens.
-     *
-     * Result < 0  => lt1 < lt2
-     * Result == 0 => lt1 == lt2
-     * Result > 0  => lt1 > lt2
-     */
-    int (*compare_locktoken)(
-        const dav_locktoken *lt1,
-        const dav_locktoken *lt2
-    );
-
-    /* Open the provider's lock database.
-     *
-     * The provider may or may not use a "real" database for locks
-     * (a lock could be an attribute on a resource, for example).
-     *
-     * The provider may choose to use the value of the DAVLockDB directive
-     * (as returned by dav_get_lockdb_path()) to decide where to place
-     * any storage it may need.
-     *
-     * The request storage pool should be associated with the lockdb,
-     * so it can be used in subsequent operations.
-     *
-     * If ro != 0, only readonly operations will be performed.
-     * If force == 0, the open can be "lazy"; no subsequent locking operations
-     * may occur.
-     * If force != 0, locking operations will definitely occur.
-     */
-    dav_error * (*open_lockdb)(
-        request_rec *r,
-        int ro,
-        int force,
-        dav_lockdb **lockdb
-    );
-
-    /* Indicates completion of locking operations */
-    void (*close_lockdb)(
-        dav_lockdb *lockdb
-    );
-
-    /* Take a resource out of the lock-null state. */
-    dav_error * (*remove_locknull_state)(
-        dav_lockdb *lockdb,
-        const dav_resource *resource
-    );
-
-    /*
-    ** Create a (direct) lock structure for the given resource. A locktoken
-    ** will be created.
-    **
-    ** The lock provider may store private information into lock->info.
-    */
-    dav_error * (*create_lock)(dav_lockdb *lockdb,
-			       const dav_resource *resource,
-			       dav_lock **lock);
-
-    /*
-    ** Get the locks associated with the specified resource.
-    **
-    ** If resolve_locks is true (non-zero), then any indirect locks are
-    ** resolved to their actual, direct lock (i.e. the reference to followed
-    ** to the original lock).
-    **
-    ** The locks, if any, are returned as a linked list in no particular
-    ** order. If no locks are present, then *locks will be NULL.
-    */
-    dav_error * (*get_locks)(dav_lockdb *lockdb,
-			     const dav_resource *resource,
-			     int calltype,
-			     dav_lock **locks);
-
-#define DAV_GETLOCKS_RESOLVED	0	/* resolve indirects to directs */
-#define DAV_GETLOCKS_PARTIAL	1	/* leave indirects partially filled */
-#define DAV_GETLOCKS_COMPLETE	2	/* fill out indirect locks */
-
-    /*
-    ** Find a particular lock on a resource (specified by its locktoken).
-    **
-    ** *lock will be set to NULL if the lock is not found.
-    **
-    ** Note that the provider can optimize the unmarshalling -- only one
-    ** lock (or none) must be constructed and returned.
-    **
-    ** If partial_ok is true (non-zero), then an indirect lock can be
-    ** partially filled in. Otherwise, another lookup is done and the
-    ** lock structure will be filled out as a DAV_LOCKREC_INDIRECT.
-    */
-    dav_error * (*find_lock)(dav_lockdb *lockdb,
-			     const dav_resource *resource,
-			     const dav_locktoken *locktoken,
-			     int partial_ok,
-			     dav_lock **lock);
-
-    /*
-    ** Quick test to see if the resource has *any* locks on it.
-    **
-    ** This is typically used to determine if a non-existent resource
-    ** has a lock and is (therefore) a locknull resource.
-    **
-    ** WARNING: this function may return TRUE even when timed-out locks
-    **          exist (i.e. it may not perform timeout checks).
-    */
-    dav_error * (*has_locks)(dav_lockdb *lockdb,
-			     const dav_resource *resource,
-			     int *locks_present);
-
-    /*
-    ** Append the specified lock(s) to the set of locks on this resource.
-    **
-    ** If "make_indirect" is true (non-zero), then the specified lock(s)
-    ** should be converted to an indirect lock (if it is a direct lock)
-    ** before appending. Note that the conversion to an indirect lock does
-    ** not alter the passed-in lock -- the change is internal the
-    ** append_locks function.
-    **
-    ** Multiple locks are specified using the lock->next links.
-    */
-    dav_error * (*append_locks)(dav_lockdb *lockdb,
-				const dav_resource *resource,
-				int make_indirect,
-				const dav_lock *lock);
-
-    /*
-    ** Remove any lock that has the specified locktoken.
-    **
-    ** If locktoken == NULL, then ALL locks are removed.
-    */
-    dav_error * (*remove_lock)(dav_lockdb *lockdb,
-			       const dav_resource *resource,
-			       const dav_locktoken *locktoken);
-
-    /*
-    ** Refresh all locks, found on the specified resource, which has a
-    ** locktoken in the provided list.
-    **
-    ** If the lock is indirect, then the direct lock is referenced and
-    ** refreshed.
-    **
-    ** Each lock that is updated is returned in the <locks> argument.
-    ** Note that the locks will be fully resolved.
-    */
-    dav_error * (*refresh_locks)(dav_lockdb *lockdb,
-				 const dav_resource *resource,
-				 const dav_locktoken_list *ltl,
-				 time_t new_time,
-				 dav_lock **locks);
-
-    /*
-    ** Look up the resource associated with a particular locktoken.
-    **
-    ** The search begins at the specified <start_resource> and the lock
-    ** specified by <locktoken>.
-    **
-    ** If the resource/token specifies an indirect lock, then the direct
-    ** lock will be looked up, and THAT resource will be returned. In other
-    ** words, this function always returns the resource where a particular
-    ** lock (token) was asserted.
-    **
-    ** NOTE: this function pointer is allowed to be NULL, indicating that
-    **       the provider does not support this type of functionality. The
-    **       caller should then traverse up the repository hierarchy looking
-    **       for the resource defining a lock with this locktoken.
-    */
-    dav_error * (*lookup_resource)(dav_lockdb *lockdb,
-				   const dav_locktoken *locktoken,
-				   const dav_resource *start_resource,
-				   const dav_resource **resource);
-};
-
-/* what types of resources can be discovered by dav_get_resource_state() */
-#define DAV_RESOURCE_LOCK_NULL	10	/* resource lock-null */
-#define DAV_RESOURCE_NULL	11	/* resource null */
-#define DAV_RESOURCE_EXISTS	12	/* resource exists */
-#define DAV_RESOURCE_ERROR	13	/* an error occurred */
-
-
-/* --------------------------------------------------------------------
-**
-** PROPERTY HANDLING
-*/
-
-typedef struct dav_propdb dav_propdb;
-
-
-dav_error *dav_open_propdb(
-    request_rec *r,
-    dav_lockdb *lockdb,
-    const dav_resource *resource,
-    int ro,
-    apr_array_header_t *ns_xlate,
-    dav_propdb **propdb);
-
-void dav_close_propdb(dav_propdb *db);
-
-dav_get_props_result dav_get_props(
-    dav_propdb *db,
-    ap_xml_doc *doc);
-
-dav_get_props_result dav_get_allprops(
-    dav_propdb *db,
-    dav_prop_insert what);
-
-void dav_get_liveprop_supported(
-    dav_propdb *propdb,
-    const char *ns_uri,
-    const char *propname,
-    ap_text_header *body);
-
-/*
-** 3-phase property modification.
-**
-**   1) validate props. readable? unlocked? ACLs allow access?
-**   2) execute operation (set/delete)
-**   3) commit or rollback
-**
-** ### eventually, auth must be available. a ref to the request_rec (which
-** ### contains the auth info) should be in the shared context struct.
-**
-** Each function may alter the error values and information contained within
-** the context record. This should be done as an "increasing" level of
-** error, rather than overwriting any previous error.
-**
-** Note that commit() cannot generate errors. It should simply free the
-** rollback information.
-**
-** rollback() may generate additional errors because the rollback operation
-** can sometimes fail(!).
-**
-** The caller should allocate an array of these, one per operation. It should
-** be zero-initialized, then the db, operation, and prop fields should be
-** filled in before calling dav_prop_validate. Note that the set/delete
-** operations are order-dependent. For a given (logical) context, the same
-** pointer must be passed to each phase.
-**
-** error_type is an internal value, but will have the same numeric value
-** for each possible "desc" value. This allows the caller to group the
-** descriptions via the error_type variable, rather than through string
-** comparisons. Note that "status" does not provide enough granularity to
-** differentiate/group the "desc" values.
-**
-** Note that the propdb will maintain some (global) context across all
-** of the property change contexts. This implies that you can have only
-** one open transaction per propdb.
-*/
-typedef struct dav_prop_ctx
-{
-    dav_propdb *propdb;
-
-    int operation;
-#define DAV_PROP_OP_SET		1	/* set a property value */
-#define DAV_PROP_OP_DELETE	2	/* delete a prop value */
-/* ### add a GET? */
-
-    ap_xml_elem *prop;			/* property to affect */
-
-    dav_error *err;			/* error (if any) */
-
-    /* private items to the propdb */
-    int is_liveprop;
-    void *liveprop_ctx;
-    struct dav_rollback_item *rollback;	/* optional rollback info */
-
-    /* private to mod_dav.c */
-    request_rec *r;
-
-} dav_prop_ctx;
-
-void dav_prop_validate(dav_prop_ctx *ctx);
-void dav_prop_exec(dav_prop_ctx *ctx);
-void dav_prop_commit(dav_prop_ctx *ctx);
-void dav_prop_rollback(dav_prop_ctx *ctx);
-
-#define DAV_PROP_CTX_HAS_ERR(dpc)	((dpc).err && (dpc).err->status >= 300)
-
-
-/* --------------------------------------------------------------------
-**
-** WALKER STRUCTURE
-*/
-
-enum {
-    DAV_CALLTYPE_MEMBER = 1,	/* called for a member resource */
-    DAV_CALLTYPE_COLLECTION,	/* called for a collection */
-    DAV_CALLTYPE_LOCKNULL 	/* called for a locknull resource */
-};
-
-typedef struct
-{
-    /* the client-provided context */
-    void *walk_ctx;
-
-    /* pool to use for allocations in the callback */
-    apr_pool_t *pool;
-
-    /* the current resource */
-    const dav_resource *resource;
-
-    /* OUTPUT: add responses to this */
-    dav_response *response;
-
-} dav_walk_resource;
-
-typedef struct
-{
-    int walk_type;
-#define DAV_WALKTYPE_AUTH	0x0001	/* limit to authorized files */
-#define DAV_WALKTYPE_NORMAL	0x0002	/* walk normal files */
-#define DAV_WALKTYPE_LOCKNULL	0x0004	/* walk locknull resources */
-
-    /* callback function and a client context for the walk */
-    dav_error * (*func)(dav_walk_resource *wres, int calltype);
-    void *walk_ctx;
-
-    /* what pool to use for allocations needed by walk logic */
-    apr_pool_t *pool;
-
-    /* beginning root of the walk */
-    const dav_resource *root;
-
-    /* lock database to enable walking LOCKNULL resources */
-    dav_lockdb *lockdb;
-
-} dav_walk_params;
-
-/* directory tree walking context */
-typedef struct dav_walker_ctx
-{
-    /* input: */
-    dav_walk_params w;
-
-
-    /* ### client data... phasing out this big glom */
-
-    request_rec *r;			/* original request */
-
-    /* for PROPFIND operations */
-    ap_xml_doc *doc;
-    int propfind_type;
-#define DAV_PROPFIND_IS_ALLPROP		1
-#define DAV_PROPFIND_IS_PROPNAME	2
-#define DAV_PROPFIND_IS_PROP		3
-
-    ap_text *propstat_404;	/* (cached) propstat giving a 404 error */
-
-    const dav_if_header *if_header;	/* for validation */
-    const dav_locktoken *locktoken;	/* for UNLOCK */
-    const dav_lock *lock;		/* for LOCK */
-    int skip_root;			/* for dav_inherit_locks() */
-
-    int flags;
-
-    dav_buffer work_buf;                /* for dav_validate_request() */
-
-} dav_walker_ctx;
-
-DAV_DECLARE(void) dav_add_response(dav_walk_resource *wres,
-                                   int status,
-                                   dav_get_props_result *propstats);
-
-
-/* --------------------------------------------------------------------
-**
-** "STREAM" STRUCTURE
-**
-** mod_dav uses this abstraction for interacting with the repository
-** while fetching/storing resources. mod_dav views resources as a stream
-** of bytes.
-**
-** Note that the structure is opaque -- it is private to the repository
-** that created the stream in the repository's "open" function.
-**
-** ### THIS STUFF IS GOING AWAY ... GET/read requests are handled by
-** ### having the provider jam stuff straight into the filter stack.
-** ### this is only left for handling PUT/write requests.
-*/
-
-typedef struct dav_stream dav_stream;
-
-typedef enum {
-    DAV_MODE_WRITE_TRUNC,	/* truncate and open for writing */
-    DAV_MODE_WRITE_SEEKABLE	/* open for writing; random access */
-} dav_stream_mode;
-
-
-/* --------------------------------------------------------------------
-**
-** REPOSITORY FUNCTIONS
-*/
-
-/* Repository provider hooks */
-struct dav_hooks_repository
-{
-    /* Flag for whether repository requires special GET handling.
-     * If resources in the repository are not visible in the
-     * filesystem location which URLs map to, then special handling
-     * is required to first fetch a resource from the repository,
-     * respond to the GET request, then free the resource copy.
-     */
-    int handle_get;
-
-    /* Get a resource descriptor for the URI in a request. A descriptor
-     * should always be returned even if the resource does not exist. This
-     * repository has been identified as handling the resource given by
-     * the URI, so an answer must be given. If there is a problem with the
-     * URI or accessing the resource or whatever, then an error should be
-     * returned.
-     *
-     * root_dir:
-     *   the root of the directory for which this repository is configured.
-     *
-     * label:
-     *   if a Label: header is present (and allowed), this is the label
-     *   to use to identify a version resource from the resource's
-     *   corresponding version history. Otherwise, it will be NULL.
-     *
-     * use_checked_in:
-     *   use the DAV:checked-in property of the resource identified by the
-     *   Request-URI to identify and return a version resource
-     *
-     * The provider may associate the request storage pool with the resource
-     * (in the resource->pool field), to use in other operations on that
-     * resource. 
-     */
-    dav_error * (*get_resource)(
-        request_rec *r,
-        const char *root_dir,
-	const char *label,
-        int use_checked_in,
-        dav_resource **resource
-    );
-
-    /* Get a resource descriptor for the parent of the given resource.
-     * The resources need not exist.  NULL is returned if the resource 
-     * is the root collection.
-     *
-     * An error should be returned only if there is a fatal error in
-     * fetching information about the parent resource.
-     */
-    dav_error * (*get_parent_resource)(
-        const dav_resource *resource,
-        dav_resource **parent_resource
-    );
-
-    /* Determine whether two resource descriptors refer to the same resource.
-    *
-     * Result != 0 => the resources are the same.
-     */
-    int (*is_same_resource)(
-        const dav_resource *res1,
-        const dav_resource *res2
-    );
-
-    /* Determine whether one resource is a parent (immediate or otherwise)
-     * of another.
-     *
-     * Result != 0 => res1 is a parent of res2.
-     */
-    int (*is_parent_resource)(
-        const dav_resource *res1,
-        const dav_resource *res2
-    );
-
-    /*
-    ** Open a stream for this resource, using the specified mode. The
-    ** stream will be returned in *stream.
-    */
-    dav_error * (*open_stream)(const dav_resource *resource,
-			       dav_stream_mode mode,
-			       dav_stream **stream);
-
-    /*
-    ** Close the specified stream.
-    **
-    ** mod_dav will (ideally) make sure to call this. For safety purposes,
-    ** a provider should (ideally) register a cleanup function with the
-    ** request pool to get this closed and cleaned up.
-    **
-    ** Note the possibility of an error from the close -- it is entirely
-    ** feasible that the close does a "commit" of some kind, which can
-    ** produce an error.
-    **
-    ** commit should be TRUE (non-zero) or FALSE (0) if the stream was
-    ** opened for writing. This flag states whether to retain the file
-    ** or not.
-    ** Note: the commit flag is ignored for streams opened for reading.
-    */
-    dav_error * (*close_stream)(dav_stream *stream, int commit);
-
-    /*
-    ** Write data to the stream.
-    **
-    ** All of the bytes must be written, or an error should be returned.
-    */
-    dav_error * (*write_stream)(dav_stream *stream,
-				const void *buf, apr_size_t bufsize);
-
-    /*
-    ** Seek to an absolute position in the stream. This is used to support
-    ** Content-Range in a GET/PUT.
-    **
-    ** NOTE: if this function is NULL (which is allowed), then any
-    **       operations using Content-Range will be refused.
-    */
-    dav_error * (*seek_stream)(dav_stream *stream, apr_off_t abs_position);
-
-    /*
-    ** If a GET is processed using a stream (open_stream, read_stream)
-    ** rather than via a sub-request (on get_pathname), then this function
-    ** is used to provide the repository with a way to set the headers
-    ** in the response.
-    **
-    ** This function may be called without a following deliver(), to
-    ** handle a HEAD request.
-    **
-    ** This may be NULL if handle_get is FALSE.
-    */
-    dav_error * (*set_headers)(request_rec *r,
-			       const dav_resource *resource);
-
-    /*
-    ** The provider should deliver the resource into the specified filter.
-    ** Basically, this is the response to the GET method.
-    **
-    ** Note that this is called for all resources, including collections.
-    ** The provider should determine what has content to deliver or not.
-    **
-    ** set_headers will be called prior to this function, allowing the
-    ** provider to set the appropriate response headers.
-    **
-    ** This may be NULL if handle_get is FALSE.
-    ** ### maybe toss handle_get and just use this function as the marker
-    */
-    dav_error * (*deliver)(const dav_resource *resource,
-                           ap_filter_t *output);
-
-    /* Create a collection resource. The resource must not already exist.
-     *
-     * Result == NULL if the collection was created successfully. Also, the
-     * resource object is updated to reflect that the resource exists, and
-     * is a collection.
-     */
-    dav_error * (*create_collection)(
-        dav_resource *resource
-    );
-
-    /* Copy one resource to another. The destination may exist, if it is
-     * versioned.
-     * Handles both files and collections. Properties are copied as well.
-     * If the destination exists and is versioned, the provider must update
-     * the destination to have identical content to the source,
-     * recursively for collections.
-     * The depth argument is ignored for a file, and can be either 0 or
-     * DAV_INFINITY for a collection.
-     * If an error occurs in a child resource, then the return value is
-     * non-NULL, and *response is set to a multistatus response.
-     * If the copy is successful, the dst resource object is
-     * updated to reflect that the resource exists.
-     */
-    dav_error * (*copy_resource)(
-        const dav_resource *src,
-        dav_resource *dst,
-	int depth,
-        dav_response **response
-    );
-
-    /* Move one resource to another. The destination must not exist.
-     * Handles both files and collections. Properties are moved as well.
-     * If an error occurs in a child resource, then the return value is
-     * non-NULL, and *response is set to a multistatus response.
-     * If the move is successful, the src and dst resource objects are
-     * updated to reflect that the source no longer exists, and the
-     * destination does.
-     */
-    dav_error * (*move_resource)(
-        dav_resource *src,
-        dav_resource *dst,
-        dav_response **response
-    );
-
-    /* Remove a resource. Handles both files and collections.
-     * Removes any associated properties as well.
-     * If an error occurs in a child resource, then the return value is
-     * non-NULL, and *response is set to a multistatus response.
-     * If the delete is successful, the resource object is updated to
-     * reflect that the resource no longer exists.
-     */
-    dav_error * (*remove_resource)(
-        dav_resource *resource,
-        dav_response **response
-    );
-
-    /* Walk a resource hierarchy.
-     *
-     * Iterates over the resource hierarchy specified by params->root.
-     * Control of the walk and the callback are specified by 'params'.
-     *
-     * An error may be returned. *response will contain multistatus
-     * responses (if any) suitable for the body of the error. It is also
-     * possible to return NULL, yet still have multistatus responses.
-     * In this case, typically the caller should return a 207 (Multistatus)
-     * and the responses (in the body) as the HTTP response.
-     */
-    dav_error * (*walk)(const dav_walk_params *params, int depth,
-                        dav_response **response);
-
-    /* Get the entity tag for a resource */
-    const char * (*getetag)(const dav_resource *resource);
-};
-
-
-/* --------------------------------------------------------------------
-**
-** VERSIONING FUNCTIONS
-*/
-
-
-/* dav_add_vary_header
- *
- * If there were any headers in the request which require a Vary header
- * in the response, add it.
- */
-void dav_add_vary_header(request_rec *in_req,
-			 request_rec *out_req,
-			 const dav_resource *resource);
-
-/*
-** Flags specifying auto-versioning behavior, returned by
-** the auto_versionable hook. The value returned depends
-** on both the state of the resource and the value of the
-** DAV:auto-versioning property for the resource.
-**
-** If the resource does not exist (null or lock-null),
-** DAV_AUTO_VERSION_ALWAYS causes creation of a new version-controlled resource
-**
-** If the resource is checked in,
-** DAV_AUTO_VERSION_ALWAYS causes it to be checked out always,
-** DAV_AUTO_VERSION_LOCKED causes it to be checked out only when locked
-**
-** If the resource is checked out,
-** DAV_AUTO_VERSION_ALWAYS causes it to be checked in always,
-** DAV_AUTO_VERSION_LOCKED causes it to be checked in when unlocked
-** (note: a provider should allow auto-checkin only for resources which
-** were automatically checked out)
-**
-** In all cases, DAV_AUTO_VERSION_NEVER results in no auto-versioning behavior.
-*/
-typedef enum {
-    DAV_AUTO_VERSION_NEVER,
-    DAV_AUTO_VERSION_ALWAYS,
-    DAV_AUTO_VERSION_LOCKED
-} dav_auto_version;
-
-/*
-** This structure is used to record what auto-versioning operations
-** were done to make a resource writable, so that they can be undone
-** at the end of a request.
-*/
-typedef struct {
-    int resource_versioned;             /* 1 => resource was auto-version-controlled */
-    int resource_checkedout;            /* 1 => resource was auto-checked-out */
-    int parent_checkedout;              /* 1 => parent was auto-checked-out */
-    dav_resource *parent_resource;      /* parent resource, if it was needed */
-} dav_auto_version_info;
-
-/* Ensure that a resource is writable. If there is no versioning
- * provider, then this is essentially a no-op. Versioning repositories
- * require explicit resource creation and checkout before they can
- * be written to. If a new resource is to be created, or an existing
- * resource deleted, the parent collection must be checked out as well.
- *
- * Set the parent_only flag to only make the parent collection writable.
- * Otherwise, both parent and child are made writable as needed. If the
- * child does not exist, then a new versioned resource is created and
- * checked out.
- *
- * If auto-versioning is not enabled for a versioned resource, then an error is
- * returned, since the resource cannot be modified.
- *
- * The dav_auto_version_info structure is filled in with enough information
- * to restore both parent and child resources to the state they were in
- * before the auto-versioning operations occurred.
- */
-dav_error *dav_auto_checkout(
-    request_rec *r,
-    dav_resource *resource,
-    int parent_only,
-    dav_auto_version_info *av_info);
-
-/* Revert the writability of resources back to what they were
- * before they were modified. If undo == 0, then the resource
- * modifications are maintained (i.e. they are checked in).
- * If undo != 0, then resource modifications are discarded
- * (i.e. they are unchecked out).
- *
- * Set the unlock flag to indicate that the resource is about
- * to be unlocked; it will be checked in if the resource
- * auto-versioning property indicates it should be. In this case,
- * av_info is ignored, so it can be NULL.
- *
- * The resource argument may be NULL if only the parent resource
- * was checked out (i.e. the parent_only was != 0 in the
- * dav_auto_checkout call).
- */
-dav_error *dav_auto_checkin(
-    request_rec *r,
-    dav_resource *resource,
-    int undo,
-    int unlock,
-    dav_auto_version_info *av_info);
-
-/*
-** This structure is used to describe available reports
-**
-** "nmspace" should be valid XML and URL-quoted. mod_dav will place
-** double-quotes around it and use it in an xmlns declaration.
-*/
-typedef struct {
-    const char *nmspace;        /* namespace of the XML report element */
-    const char *name;           /* element name for the XML report */
-} dav_report_elem;
-
-
-/* Versioning provider hooks */
-struct dav_hooks_vsn
-{
-    /*
-    ** MANDATORY HOOKS
-    ** The following hooks are mandatory for all versioning providers;
-    ** they define the functionality needed to implement "core" versioning.
-    */
-
-    /* Return supported versioning options.
-     * Each dav_text item in the list will be returned as a separate
-     * DAV header. Providers are advised to limit the length of an
-     * individual text item to 63 characters, to conform to the limit
-     * used by MS Web Folders.
-     */
-    void (*get_vsn_options)(apr_pool_t *p, ap_text_header *phdr);
-
-    /* Get the value of a specific option for an OPTIONS request.
-     * The option being requested is given by the parsed XML
-     * element object "elem". The value of the option should be
-     * appended to the "option" text object.
-     */
-    dav_error * (*get_option)(const dav_resource *resource,
-                              const ap_xml_elem *elem,
-                              ap_text_header *option);
-
-    /* Determine whether a non-versioned (or non-existent) resource
-     * is versionable. Returns != 0 if resource can be versioned.
-     */
-    int (*versionable)(const dav_resource *resource);
-
-    /* Determine whether auto-versioning is enabled for a resource
-     * (which may not exist, or may not be versioned). If the resource
-     * is a checked-out resource, the provider must only enable
-     * auto-checkin if the resource was automatically checked out.
-     *
-     * The value returned depends on both the state of the resource
-     * and the value of its DAV:auto-version property. See the description
-     * of the dav_auto_version enumeration above for the details.
-     */
-    dav_auto_version (*auto_versionable)(const dav_resource *resource);
-
-    /* Put a resource under version control. If the resource already
-     * exists unversioned, then it becomes the initial version of the
-     * new version history, and it is replaced by a version selector
-     * which targets the new version.
-     *
-     * If the resource does not exist, then a new version-controlled
-     * resource is created which either targets an existing version (if the
-     * "target" argument is not NULL), or the initial, empty version
-     * in a new history resource (if the "target" argument is NULL).
-     *
-     * If successful, the resource object state is updated appropriately
-     * (that is, changed to refer to the new version-controlled resource).
-     */
-    dav_error * (*vsn_control)(dav_resource *resource,
-                               const char *target);
-
-    /* Checkout a resource. If successful, the resource
-     * object state is updated appropriately.
-     *
-     * The auto_checkout flag will be set if this checkout is being
-     * done automatically, as part of some method which modifies
-     * the resource. The provider must remember that the resource
-     * was automatically checked out, so it can determine whether it
-     * can be automatically checked in. (Auto-checkin should only be
-     * enabled for resources which were automatically checked out.)
-     *
-     * If the working resource has a different URL from the
-     * target resource, a dav_resource descriptor is returned
-     * for the new working resource. Otherwise, the original
-     * resource descriptor will refer to the working resource.
-     * The working_resource argument can be NULL if the caller
-     * is not interested in the working resource.
-     *
-     * If the client has specified DAV:unreserved or DAV:fork-ok in the
-     * checkout request, then the corresponding flags are set. If
-     * DAV:activity-set has been specified, then create_activity is set
-     * if DAV:new was specified; otherwise, the DAV:href elements' CDATA
-     * (the actual href text) is passed in the "activities" array (each
-     * element of the array is a const char *). activities will be NULL
-     * no DAV:activity-set was provided or when create_activity is set.
-     */
-    dav_error * (*checkout)(dav_resource *resource,
-                            int auto_checkout,
-                            int is_unreserved, int is_fork_ok,
-                            int create_activity,
-                            apr_array_header_t *activities,
-                            dav_resource **working_resource);
-
-    /* Uncheckout a checked-out resource. If successful, the resource
-     * object state is updated appropriately.
-     */
-    dav_error * (*uncheckout)(dav_resource *resource);
-
-    /* Checkin a checked-out resource. If successful, the resource
-     * object state is updated appropriately, and the
-     * version_resource descriptor will refer to the new version.
-     * The version_resource argument can be NULL if the caller
-     * is not interested in the new version resource.
-     *
-     * If the client has specified DAV:keep-checked-out in the checkin
-     * request, then the keep_checked_out flag is set. The provider
-     * should create a new version, but keep the resource in the
-     * checked-out state.
-     */
-    dav_error * (*checkin)(dav_resource *resource,
-                           int keep_checked_out,
-                           dav_resource **version_resource);
-
-    /*
-    ** Return the set of reports available at this resource.
-    **
-    ** An array of report elements should be returned, with an end-marker
-    ** element containing namespace==NULL. The value of the
-    ** DAV:supported-report-set property will be constructed and
-    ** returned.
-    */
-    dav_error * (*avail_reports)(const dav_resource *resource,
-                                 const dav_report_elem **reports);
-
-    /*
-    ** Determine whether a Label header can be used
-    ** with a particular report. The dav_xml_doc structure
-    ** contains the parsed report request body.
-    ** Returns 0 if the Label header is not allowed.
-    */
-    int (*report_label_header_allowed)(const ap_xml_doc *doc);
-
-    /*
-    ** Generate a report on a resource. Since a provider is free
-    ** to define its own reports, and the value of request headers
-    ** may affect the interpretation of a report, the request record
-    ** must be passed to this routine.
-    **
-    ** The dav_xml_doc structure contains the parsed report request
-    ** body. The report response is generated into the ap_text_header
-    ** structure.
-    **
-    ** ### shouldn't generate large responses to memory ###
-    */
-    dav_error * (*get_report)(request_rec *r,
-                              const dav_resource *resource,
-                              const ap_xml_doc *doc,
-                              ap_text_header *report);
-
-    /*
-    ** OPTIONAL HOOKS
-    ** The following hooks are optional; if not defined, then the
-    ** corresponding protocol methods will be unsupported.
-    */
-
-    /*
-    ** Set the state of a checked-in version-controlled resource.
-    **
-    ** If the request specified a version, the version resource
-    ** represents that version. If the request specified a label,
-    ** then "version" is NULL, and "label" is the label.
-    **
-    ** The depth argument is ignored for a file, and can be 0, 1, or
-    ** DAV_INFINITY for a collection. The depth argument only applies
-    ** with a label, not a version.
-    **
-    ** If an error occurs in a child resource, then the return value is
-    ** non-NULL, and *response is set to a multistatus response.
-    **
-    ** This hook is optional; if not defined, then the UPDATE method
-    ** will not be supported.
-    */
-    dav_error * (*update)(const dav_resource *resource,
-                          const dav_resource *version,
-                          const char *label,
-                          int depth,
-                          dav_response **response);
-
-    /*
-    ** Add a label to a version. The resource is either a specific
-    ** version, or a version selector, in which case the label should
-    ** be added to the current target of the version selector. The
-    ** version selector cannot be checked out.
-    **
-    ** If replace != 0, any existing label by the same name is
-    ** effectively deleted first. Otherwise, it is an error to
-    ** attempt to add a label which already exists on some version
-    ** of the same history resource.
-    **
-    ** This hook is optional; if not defined, then the LABEL method
-    ** will not be supported. If it is defined, then the remove_label
-    ** hook must be defined also.
-    */
-    dav_error * (*add_label)(const dav_resource *resource,
-                             const char *label,
-                             int replace);
-
-    /*
-    ** Remove a label from a version. The resource is either a specific
-    ** version, or a version selector, in which case the label should
-    ** be added to the current target of the version selector. The
-    ** version selector cannot be checked out.
-    **
-    ** It is an error if no such label exists on the specified version.
-    **
-    ** This hook is optional, but if defined, the add_label hook
-    ** must be defined also.
-    */
-    dav_error * (*remove_label)(const dav_resource *resource,
-                                const char *label);
-
-    /*
-    ** Determine whether a null resource can be created as a workspace.
-    ** The provider may restrict workspaces to certain locations.
-    ** Returns 0 if the resource cannot be a workspace.
-    **
-    ** This hook is optional; if the provider does not support workspaces,
-    ** it should be set to NULL.
-    */
-    int (*can_be_workspace)(const dav_resource *resource);
-
-    /*
-    ** Create a workspace resource. The resource must not already
-    ** exist. Any <DAV:mkworkspace> element is passed to the provider
-    ** in the "doc" structure; it may be empty.
-    **
-    ** If workspace creation is succesful, the state of the resource
-    ** object is updated appropriately.
-    **
-    ** This hook is optional; if the provider does not support workspaces,
-    ** it should be set to NULL.
-    */
-    dav_error * (*make_workspace)(dav_resource *resource,
-                                  ap_xml_doc *doc);
-
-    /*
-    ** Determine whether a null resource can be created as an activity.
-    ** The provider may restrict activities to certain locations.
-    ** Returns 0 if the resource cannot be an activity.
-    **
-    ** This hook is optional; if the provider does not support activities,
-    ** it should be set to NULL.
-    */
-    int (*can_be_activity)(const dav_resource *resource);
-
-    /*
-    ** Create an activity resource. The resource must not already
-    ** exist.
-    **
-    ** If activity creation is succesful, the state of the resource
-    ** object is updated appropriately.
-    **
-    ** This hook is optional; if the provider does not support activities,
-    ** it should be set to NULL.
-    */
-    dav_error * (*make_activity)(dav_resource *resource);
-
-    /*
-    ** Merge a resource (tree) into target resource (tree).
-    **
-    ** ### more doc...
-    **
-    ** This hook is optional; if the provider does not support merging,
-    ** then this should be set to NULL.
-    */
-    dav_error * (*merge)(dav_resource *target, dav_resource *source,
-			 int no_auto_merge, int no_checkout,
-			 ap_xml_elem *prop_elem,
-			 ap_filter_t *output);
-};
-
-
-/* --------------------------------------------------------------------
-**
-** BINDING FUNCTIONS
-*/
-
-/* binding provider hooks */
-struct dav_hooks_binding {
-
-    /* Determine whether a resource can be the target of a binding.
-     * Returns 0 if the resource cannot be a binding target.
-     */
-    int (*is_bindable)(const dav_resource *resource);
-
-    /* Create a binding to a resource.
-     * The resource argument is the target of the binding;
-     * the binding argument must be a resource which does not already
-     * exist.
-     */
-    dav_error * (*bind_resource)(const dav_resource *resource,
-				 dav_resource *binding);
-
-};
-
-
-/* --------------------------------------------------------------------
-**
-** MISCELLANEOUS STUFF
-*/
-
-/* fetch the "LimitXMLRequestBody" in force for this resource */
-apr_size_t dav_get_limit_xml_body(const request_rec *r);
-
-typedef struct {
-    int propid;				/* live property ID */
-    const dav_hooks_liveprop *provider;	/* the provider defining this prop */
-} dav_elem_private;    
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _MOD_DAV_H_ */
diff --git a/modules/dav/main/props.c b/modules/dav/main/props.c
deleted file mode 100644
index 44c3398..0000000
--- a/modules/dav/main/props.c
+++ /dev/null
@@ -1,1155 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-/*
-** DAV extension module for Apache 2.0.*
-**  - Property database handling (repository-independent)
-**
-** NOTES:
-**
-**   PROPERTY DATABASE
-**
-**   This version assumes that there is a per-resource database provider
-**   to record properties. The database provider decides how and where to
-**   store these databases.
-**
-**   The DBM keys for the properties have the following form:
-**
-**     namespace ":" propname
-**
-**   For example: 5:author
-**
-**   The namespace provides an integer index into the namespace table
-**   (see below). propname is simply the property name, without a namespace
-**   prefix.
-**
-**   A special case exists for properties that had a prefix starting with
-**   "xml". The XML Specification reserves these for future use. mod_dav
-**   stores and retrieves them unchanged. The keys for these properties
-**   have the form:
-**
-**     ":" propname
-**
-**   The propname will contain the prefix and the property name. For
-**   example, a key might be ":xmlfoo:name"
-**
-**   The ":name" style will also be used for properties that do not
-**   exist within a namespace.
-**
-**   The DBM values consist of two null-terminated strings, appended
-**   together (the null-terms are retained and stored in the database).
-**   The first string is the xml:lang value for the property. An empty
-**   string signifies that a lang value was not in context for the value.
-**   The second string is the property value itself.
-**
-**
-**   NAMESPACE TABLE
-**
-**   The namespace table is an array that lists each of the namespaces
-**   that are in use by the properties in the given propdb. Each entry
-**   in the array is a simple URI.
-**
-**   For example: http://www.foo.bar/standards/props/
-**
-**   The prefix used for the property is stripped and the URI for it
-**   is entered into the namespace table. Also, any namespaces used
-**   within the property value will be entered into the table (and
-**   stripped from the child elements).
-**
-**   The namespaces are stored in the DBM database under the "METADATA" key.
-**
-**
-**   STRIPPING NAMESPACES
-**
-**   Within the property values, the namespace declarations (xmlns...)
-**   are stripped. Each element and attribute will have its prefix removed
-**   and a new prefix inserted.
-**
-**   This must be done so that we can return multiple properties in a
-**   PROPFIND which may have (originally) used conflicting prefixes. For
-**   that case, we must bind all property value elements to new namespace
-**   values.
-**
-**   This implies that clients must NOT be sensitive to the namespace
-**   prefix used for their properties. It WILL change when the properties
-**   are returned (we return them as "ns<index>", e.g. "ns5"). Also, the
-**   property value can contain ONLY XML elements and CDATA. PI and comment
-**   elements will be stripped. CDATA whitespace will be preserved, but
-**   whitespace within element tags will be altered. Attribute ordering
-**   may be altered. Element and CDATA ordering will be preserved.
-**
-**
-**   ATTRIBUTES ON PROPERTY NAME ELEMENTS
-**
-**   When getting/setting properties, the XML used looks like:
-**
-**     <prop>
-**       <propname1>value</propname1>
-**       <propname2>value</propname1>
-**     </prop>
-**
-**   This implementation (mod_dav) DOES NOT save any attributes that are
-**   associated with the <propname1> element. The property value is deemed
-**   to be only the contents ("value" in the above example).
-**
-**   We do store the xml:lang value (if any) that applies to the context
-**   of the <propname1> element. Whether the xml:lang attribute is on
-**   <propname1> itself, or from a higher level element, we will store it
-**   with the property value.
-**
-**
-**   VERSIONING
-**
-**   The DBM db contains a key named "METADATA" that holds database-level
-**   information, such as the namespace table. The record also contains the
-**   db's version number as the very first 16-bit value. This first number
-**   is actually stored as two single bytes: the first byte is a "major"
-**   version number. The second byte is a "minor" number.
-**
-**   If the major number is not what mod_dav expects, then the db is closed
-**   immediately and an error is returned. A minor number change is
-**   acceptable -- it is presumed that old/new dav_props.c can deal with
-**   the database format. For example, a newer dav_props might update the
-**   minor value and append information to the end of the metadata record
-**   (which would be ignored by previous versions).
-**
-**
-** ISSUES:
-**
-**   At the moment, for the dav_get_allprops() and dav_get_props() functions,
-**   we must return a set of xmlns: declarations for ALL known namespaces
-**   in the file. There isn't a way to filter this because we don't know
-**   which are going to be used or not. Examining property names is not
-**   sufficient because the property values could use entirely different
-**   namespaces.
-**
-**   ==> we must devise a scheme where we can "garbage collect" the namespace
-**       entries from the property database.
-*/
-
-#include "apr.h"
-#include "apr_strings.h"
-
-#define APR_WANT_STDIO
-#define APR_WANT_BYTEFUNC
-#include "apr_want.h"
-
-#include "mod_dav.h"
-
-#include "http_log.h"
-#include "http_request.h"
-
-/*
-** There is some rough support for writable DAV:getcontenttype and
-** DAV:getcontentlanguage properties. If this #define is (1), then
-** this support is disabled.
-**
-** We are disabling it because of a lack of support in GET and PUT
-** operations. For GET, it would be "expensive" to look for a propdb,
-** open it, and attempt to extract the Content-Type and Content-Language
-** values for the response.
-** (Handling the PUT would not be difficult, though)
-*/
-#define DAV_DISABLE_WRITABLE_PROPS	1
-
-#define DAV_EMPTY_VALUE		"\0"	/* TWO null terms */
-
-/* the namespace URI was not found; no ID is available */
-#define AP_XML_NS_ERROR_NOT_FOUND	(AP_XML_NS_ERROR_BASE)
-
-struct dav_propdb {
-    apr_pool_t *p;		/* the pool we should use */
-    request_rec *r;		/* the request record */
-
-    const dav_resource *resource;	/* the target resource */
-
-    int deferred;		/* open of db has been deferred */
-    dav_db *db;			/* underlying database containing props */
-
-    apr_array_header_t *ns_xlate;	/* translation of an elem->ns to URI */
-    dav_namespace_map *mapping;         /* namespace mapping */
-
-    dav_lockdb *lockdb;		/* the lock database */
-
-    dav_buffer wb_lock;		/* work buffer for lockdiscovery property */
-
-    /* if we ever run a GET subreq, it will be stored here */
-    request_rec *subreq;
-
-    /* hooks we should use for processing (based on the target resource) */
-    const dav_hooks_db *db_hooks;
-};
-
-/* NOTE: dav_core_props[] and the following enum must stay in sync. */
-/* ### move these into a "core" liveprop provider? */
-static const char * const dav_core_props[] =
-{
-    "getcontenttype",
-    "getcontentlanguage",
-    "lockdiscovery",
-    "supportedlock",
-
-    NULL	/* sentinel */
-};
-enum {
-    DAV_PROPID_CORE_getcontenttype = DAV_PROPID_CORE,
-    DAV_PROPID_CORE_getcontentlanguage,
-    DAV_PROPID_CORE_lockdiscovery,
-    DAV_PROPID_CORE_supportedlock,
-
-    DAV_PROPID_CORE_UNKNOWN
-};
-
-/*
-** This structure is used to track information needed for a rollback.
-*/
-typedef struct dav_rollback_item {
-    /* select one of the two rollback context structures based on the
-       value of dav_prop_ctx.is_liveprop */
-    dav_deadprop_rollback *deadprop;
-    dav_liveprop_rollback *liveprop;
-
-} dav_rollback_item;
-
-
-static int dav_find_liveprop_provider(dav_propdb *propdb,
-                                      const char *ns_uri,
-                                      const char *propname,
-                                      const dav_hooks_liveprop **provider)
-{
-    int propid;
-
-    *provider = NULL;
-
-    if (ns_uri == NULL) {
-	/* policy: liveprop providers cannot define no-namespace properties */
-	return DAV_PROPID_CORE_UNKNOWN;
-    }
-
-    /* check liveprop providers first, so they can define core properties */
-    propid = dav_run_find_liveprop(propdb->resource, ns_uri, propname,
-                                   provider);
-    if (propid != 0) {
-        return propid;
-    }
-
-    /* check for core property */
-    if (strcmp(ns_uri, "DAV:") == 0) {
-	const char * const *p = dav_core_props;
-
-	for (propid = DAV_PROPID_CORE; *p != NULL; ++p, ++propid)
-	    if (strcmp(propname, *p) == 0) {
-		return propid;
-	    }
-    }
-
-    /* no provider for this property */
-    return DAV_PROPID_CORE_UNKNOWN;
-}
-
-static void dav_find_liveprop(dav_propdb *propdb, ap_xml_elem *elem)
-{
-    const char *ns_uri;
-    dav_elem_private *priv = elem->priv;
-    const dav_hooks_liveprop *hooks;
-
-
-    if (elem->ns == AP_XML_NS_NONE)
-        ns_uri = NULL;
-    else if (elem->ns == AP_XML_NS_DAV_ID)
-        ns_uri = "DAV:";
-    else
-        ns_uri = AP_XML_GET_URI_ITEM(propdb->ns_xlate, elem->ns);
-
-    priv->propid = dav_find_liveprop_provider(propdb, ns_uri, elem->name,
-                                              &hooks);
-
-    /* ### this test seems redundant... */
-    if (priv->propid != DAV_PROPID_CORE_UNKNOWN) {
-        priv->provider = hooks;
-    }
-}
-
-/* is the live property read/write? */
-static int dav_rw_liveprop(dav_propdb *propdb, dav_elem_private *priv)
-{
-    int propid = priv->propid;
-
-    /*
-    ** Check the liveprop provider (if this is a provider-defined prop)
-    */
-    if (priv->provider != NULL) {
-        return (*priv->provider->is_writable)(propdb->resource, propid);
-    }
-
-    /* these are defined as read-only */
-    if (propid == DAV_PROPID_CORE_lockdiscovery
-#if DAV_DISABLE_WRITABLE_PROPS
-	|| propid == DAV_PROPID_CORE_getcontenttype
-	|| propid == DAV_PROPID_CORE_getcontentlanguage
-#endif
-	|| propid == DAV_PROPID_CORE_supportedlock
-        ) {
-
-	return 0;
-    }
-
-    /* these are defined as read/write */
-    if (propid == DAV_PROPID_CORE_getcontenttype
-	|| propid == DAV_PROPID_CORE_getcontentlanguage
-	|| propid == DAV_PROPID_CORE_UNKNOWN) {
-
-	return 1;
-    }
-
-    /*
-    ** We don't recognize the property, so it must be dead (and writable)
-    */
-    return 1;
-}
-
-/* do a sub-request to fetch properties for the target resource's URI. */
-static void dav_do_prop_subreq(dav_propdb *propdb)
-{
-    /* perform a "GET" on the resource's URI (note that the resource
-       may not correspond to the current request!). */
-    propdb->subreq = ap_sub_req_lookup_uri(propdb->resource->uri, propdb->r,
-                                           NULL);
-}
-
-static dav_error * dav_insert_coreprop(dav_propdb *propdb,
-				       int propid, const char *name,
-				       dav_prop_insert what,
-				       ap_text_header *phdr,
-				       dav_prop_insert *inserted)
-{
-    const char *value = NULL;
-    dav_error *err;
-
-    *inserted = DAV_PROP_INSERT_NOTDEF;
-
-    /* fast-path the common case */
-    if (propid == DAV_PROPID_CORE_UNKNOWN)
-	return NULL;
-
-    switch (propid) {
-
-    case DAV_PROPID_CORE_lockdiscovery:
-        if (propdb->lockdb != NULL) {
-	    dav_lock *locks;
-
-	    if ((err = dav_lock_query(propdb->lockdb, propdb->resource,
-				      &locks)) != NULL) {
-		return dav_push_error(propdb->p, err->status, 0,
-				      "DAV:lockdiscovery could not be "
-				      "determined due to a problem fetching "
-				      "the locks for this resource.",
-				      err);
-	    }
-
-	    /* fast-path the no-locks case */
-	    if (locks == NULL) {
-		value = "";
-	    }
-	    else {
-		/*
-		** This may modify the buffer. value may point to
-		** wb_lock.pbuf or a string constant.
-		*/
-		value = dav_lock_get_activelock(propdb->r, locks,
-						&propdb->wb_lock);
-
-		/* make a copy to isolate it from changes to wb_lock */
-		value = apr_pstrdup(propdb->p, propdb->wb_lock.buf);
-	    }
-        }
-	break;
-
-    case DAV_PROPID_CORE_supportedlock:
-        if (propdb->lockdb != NULL) {
-	    value = (*propdb->lockdb->hooks->get_supportedlock)(propdb->resource);
-        }
-	break;
-
-    case DAV_PROPID_CORE_getcontenttype:
-	if (propdb->subreq == NULL) {
-	    dav_do_prop_subreq(propdb);
-	}
-	if (propdb->subreq->content_type != NULL) {
-	    value = propdb->subreq->content_type;
-	}
-	break;
-
-    case DAV_PROPID_CORE_getcontentlanguage:
-    {
-	const char *lang;
-
-	if (propdb->subreq == NULL) {
-	    dav_do_prop_subreq(propdb);
-	}
-	if ((lang = apr_table_get(propdb->subreq->headers_out,
-				 "Content-Language")) != NULL) {
-	    value = lang;
-	}
-	break;
-    }
-
-    default:
-	/* fall through to interpret as a dead property */
-	break;
-    }
-
-    /* if something was supplied, then insert it */
-    if (value != NULL) {
-	const char *s;
-
-        if (what == DAV_PROP_INSERT_SUPPORTED) {
-	    /* use D: prefix to refer to the DAV: namespace URI,
-             * and let the namespace attribute default to "DAV:"
-             */
-            s = apr_psprintf(propdb->p,
-                            "<D:supported-live-property D:name=\"%s\"/>" DEBUG_CR,
-                            name);
-        }
-	else if (what == DAV_PROP_INSERT_VALUE && *value != '\0') {
-	    /* use D: prefix to refer to the DAV: namespace URI */
-	    s = apr_psprintf(propdb->p, "<D:%s>%s</D:%s>" DEBUG_CR,
-			    name, value, name);
-	}
-	else {
-	    /* use D: prefix to refer to the DAV: namespace URI */
-	    s = apr_psprintf(propdb->p, "<D:%s/>" DEBUG_CR, name);
-	}
-	ap_text_append(propdb->p, phdr, s);
-
-	*inserted = what;
-    }
-
-    return NULL;
-}
-
-static dav_error * dav_insert_liveprop(dav_propdb *propdb,
-				       const ap_xml_elem *elem,
-				       dav_prop_insert what,
-				       ap_text_header *phdr,
-				       dav_prop_insert *inserted)
-{
-    dav_elem_private *priv = elem->priv;
-
-    *inserted = DAV_PROP_INSERT_NOTDEF;
-
-    if (priv->provider == NULL) {
-        /* this is a "core" property that we define */
-	return dav_insert_coreprop(propdb, priv->propid, elem->name,
-				   what, phdr, inserted);
-    }
-
-    /* ask the provider (that defined this prop) to insert the prop */
-    *inserted = (*priv->provider->insert_prop)(propdb->resource, priv->propid,
-					       what, phdr);
-
-    return NULL;
-}
-
-static void dav_output_prop_name(apr_pool_t *pool,
-                                 const dav_prop_name *name,
-                                 dav_xmlns_info *xi,
-                                 apr_text_header *phdr)
-{
-    const char *s;
-
-    if (*name->ns == '\0')
-        s = apr_psprintf(pool, "<%s/>" DEBUG_CR, name->name);
-    else {
-        const char *prefix = dav_xmlns_add_uri(xi, name->ns);
-
-        s = apr_psprintf(pool, "<%s:%s/>" DEBUG_CR, prefix, name->name);
-    }
-
-    apr_text_append(pool, phdr, s);
-}
-
-static void dav_insert_xmlns(apr_pool_t *p, const char *pre_prefix, int ns,
-			     const char *ns_uri, ap_text_header *phdr)
-{
-    const char *s;
-
-    s = apr_psprintf(p, " xmlns:%s%d=\"%s\"", pre_prefix, ns, ns_uri);
-    ap_text_append(p, phdr, s);
-}
-
-static dav_error *dav_really_open_db(dav_propdb *propdb, int ro)
-{
-    dav_error *err;
-
-    /* we're trying to open the db; turn off the 'deferred' flag */
-    propdb->deferred = 0;
-
-    /* ask the DB provider to open the thing */
-    err = (*propdb->db_hooks->open)(propdb->p, propdb->resource, ro,
-				    &propdb->db);
-    if (err != NULL) {
-	return dav_push_error(propdb->p, HTTP_INTERNAL_SERVER_ERROR,
-			      DAV_ERR_PROP_OPENING,
-			      "Could not open the property database.",
-			      err);
-    }
-
-    /*
-    ** NOTE: propdb->db could be NULL if we attempted to open a readonly
-    **       database that doesn't exist. If we require read/write
-    **       access, then a database was created and opened.
-    */
-
-    return NULL;
-}
-
-dav_error *dav_open_propdb(request_rec *r, dav_lockdb *lockdb,
-			   const dav_resource *resource,
-			   int ro,
-			   apr_array_header_t * ns_xlate,
-			   dav_propdb **p_propdb)
-{
-    dav_propdb *propdb = apr_pcalloc(r->pool, sizeof(*propdb));
-
-    *p_propdb = NULL;
-
-#if DAV_DEBUG
-    if (resource->uri == NULL) {
-	return dav_new_error(r->pool, HTTP_INTERNAL_SERVER_ERROR, 0,
-			     "INTERNAL DESIGN ERROR: resource must define "
-			     "its URI.");
-    }
-#endif
-
-    propdb->r = r;
-    propdb->p = r->pool; /* ### get rid of this */
-    propdb->resource = resource;
-    propdb->ns_xlate = ns_xlate;
-
-    propdb->db_hooks = DAV_GET_HOOKS_PROPDB(r);
-
-    propdb->lockdb = lockdb;
-
-    /* always defer actual open, to avoid expense of accessing db
-     * when only live properties are involved
-     */
-    propdb->deferred = 1;
-
-    /* ### what to do about closing the propdb on server failure? */
-
-    *p_propdb = propdb;
-    return NULL;
-}
-
-void dav_close_propdb(dav_propdb *propdb)
-{
-    if (propdb->db == NULL)
-	return;
-
-    (*propdb->db_hooks->close)(propdb->db);
-}
-
-dav_get_props_result dav_get_allprops(dav_propdb *propdb, dav_prop_insert what)
-{
-    const dav_hooks_db *db_hooks = propdb->db_hooks;
-    ap_text_header hdr = { 0 };
-    ap_text_header hdr_ns = { 0 };
-    dav_get_props_result result = { 0 };
-    int found_contenttype = 0;
-    int found_contentlang = 0;
-    dav_prop_insert unused_inserted;
-
-    /* if not just getting supported live properties,
-     * scan all properties in the dead prop database
-     */
-    if (what != DAV_PROP_INSERT_SUPPORTED) {
-        if (propdb->deferred) {
-            /* ### what to do with db open error? */
-            (void) dav_really_open_db(propdb, 1 /*ro*/);
-        }
-
-        /* initialize the result with some start tags... */
-        ap_text_append(propdb->p, &hdr,
-		       "<D:propstat>" DEBUG_CR
-		       "<D:prop>" DEBUG_CR);
-
-        /* if there ARE properties, then scan them */
-        if (propdb->db != NULL) {
-            dav_xmlns_info *xi = dav_xmlns_create(propdb->p);
-            dav_prop_name name;
-
-            /* define (up front) any namespaces the db might need */
-            (void) (*db_hooks->define_namespaces)(propdb->db, xi);
-
-            /* get the first property name, beginning the scan */
-	    (void) (*db_hooks->first_name)(propdb->db, &name);
-	    while (name.ns != NULL) {
-
-	        /*
-	        ** We also look for <DAV:getcontenttype> and
-	        ** <DAV:getcontentlanguage>. If they are not stored as dead
-	        ** properties, then we need to perform a subrequest to get
-	        ** their values (if any).
-	        */
-                if (*name.ns == 'D' && strcmp(name.ns, "DAV:") == 0
-                    && *name.name == 'g') {
-                    if (strcmp(name.name, "getcontenttype") == 0) {
-                        found_contenttype = 1;
-                    }
-                    else if (strcmp(name.name, "getcontentlanguage") == 0) {
-                        found_contentlang = 1;
-                    }
-	        }
-
-	        if (what == DAV_PROP_INSERT_VALUE) {
-                    dav_error *err;
-                    int found;
-
-                    if ((err = (*db_hooks->output_value)(propdb->db, &name,
-                                                         xi, &hdr,
-                                                         &found)) != NULL) {
-		        /* ### anything better to do? */
-		        /* ### probably should enter a 500 error */
-		        goto next_key;
-                    }
-                    /* assert: found == 1 */
-	        }
-	        else {
-                    /* the value was not requested, so just add an empty
-                       tag specifying the property name. */
-                    dav_output_prop_name(propdb->p, &name, xi, &hdr);
-	        }
-
-	      next_key:
-	        (void) (*db_hooks->next_name)(propdb->db, &name);
-	    }
-
-            /* all namespaces have been entered into xi. generate them into
-               the output now. */
-            dav_xmlns_generate(xi, &hdr_ns);
-
-        } /* propdb->db != NULL */
-
-        /* add namespaces for all the liveprop providers */
-        dav_add_all_liveprop_xmlns(propdb->p, &hdr_ns);
-    }
-
-    /* ask the liveprop providers to insert their properties */
-    dav_run_insert_all_liveprops(propdb->r, propdb->resource, what, &hdr);
-
-    /* insert the standard properties */
-    /* ### should be handling the return errors here */
-    (void)dav_insert_coreprop(propdb,
-			      DAV_PROPID_CORE_supportedlock, "supportedlock",
-			      what, &hdr, &unused_inserted);
-    (void)dav_insert_coreprop(propdb,
-			      DAV_PROPID_CORE_lockdiscovery, "lockdiscovery",
-			      what, &hdr, &unused_inserted);
-
-    /* if we didn't find these, then do the whole subreq thing. */
-    if (!found_contenttype) {
-	/* ### should be handling the return error here */
-	(void)dav_insert_coreprop(propdb,
-				  DAV_PROPID_CORE_getcontenttype,
-				  "getcontenttype",
-				  what, &hdr, &unused_inserted);
-    }
-    if (!found_contentlang) {
-	/* ### should be handling the return error here */
-	(void)dav_insert_coreprop(propdb,
-				  DAV_PROPID_CORE_getcontentlanguage,
-				  "getcontentlanguage",
-				  what, &hdr, &unused_inserted);
-    }
-
-    /* if not just reporting on supported live props,
-     * terminate the result */
-    if (what != DAV_PROP_INSERT_SUPPORTED) {
-        ap_text_append(propdb->p, &hdr,
-		       "</D:prop>" DEBUG_CR
-		       "<D:status>HTTP/1.1 200 OK</D:status>" DEBUG_CR
-		       "</D:propstat>" DEBUG_CR);
-    }
-
-    result.propstats = hdr.first;
-    result.xmlns = hdr_ns.first;
-    return result;
-}
-
-dav_get_props_result dav_get_props(dav_propdb *propdb, ap_xml_doc *doc)
-{
-    const dav_hooks_db *db_hooks = propdb->db_hooks;
-    ap_xml_elem *elem = dav_find_child(doc->root, "prop");
-    ap_text_header hdr_good = { 0 };
-    ap_text_header hdr_bad = { 0 };
-    ap_text_header hdr_ns = { 0 };
-    int have_good = 0;
-    dav_get_props_result result = { 0 };
-    char *marks_liveprop;
-    dav_xmlns_info *xi;
-    int xi_filled = 0;
-
-    /* ### NOTE: we should pass in TWO buffers -- one for keys, one for
-       the marks */
-
-    /* we will ALWAYS provide a "good" result, even if it is EMPTY */
-    ap_text_append(propdb->p, &hdr_good,
-		   "<D:propstat>" DEBUG_CR
-		   "<D:prop>" DEBUG_CR);
-
-    /* ### the marks should be in a buffer! */
-    /* allocate zeroed-memory for the marks. These marks indicate which
-       liveprop namespaces we've generated into the output xmlns buffer */
-
-    /* same for the liveprops */
-    marks_liveprop = apr_pcalloc(propdb->p, dav_get_liveprop_ns_count() + 1);
-
-    xi = dav_xmlns_create(propdb->p);
-
-    for (elem = elem->first_child; elem; elem = elem->next) {
-	dav_elem_private *priv;
-	dav_error *err;
-	dav_prop_insert inserted;
-        dav_prop_name name;
-
-        /*
-        ** First try live property providers; if they don't handle
-        ** the property, then try looking it up in the propdb.
-        */
-
-	if (elem->priv == NULL) {
-	    elem->priv = apr_pcalloc(propdb->p, sizeof(*priv));
-	}
-	priv = elem->priv;
-
-	/* cache the propid; dav_get_props() could be called many times */
-	if (priv->propid == 0)
-	    dav_find_liveprop(propdb, elem);
-
-        if (priv->propid != DAV_PROPID_CORE_UNKNOWN) {
-
-	    /* insert the property. returns 1 if an insertion was done. */
-	    if ((err = dav_insert_liveprop(propdb, elem, DAV_PROP_INSERT_VALUE,
-                                           &hdr_good, &inserted)) != NULL) {
-		/* ### need to propagate the error to the caller... */
-		/* ### skip it for now, as if nothing was inserted */
-	    }
-	    if (inserted == DAV_PROP_INSERT_VALUE) {
-		have_good = 1;
-
-		/*
-		** Add the liveprop's namespace URIs. Note that provider==NULL
-		** for core properties.
-		*/
-		if (priv->provider != NULL) {
-		    const char * const * scan_ns_uri;
-
-		    for (scan_ns_uri = priv->provider->namespace_uris;
-			 *scan_ns_uri != NULL;
-			 ++scan_ns_uri) {
-                        int ns;
-
-                        ns = dav_get_liveprop_ns_index(*scan_ns_uri);
-                        if (marks_liveprop[ns])
-                            continue;
-                        marks_liveprop[ns] = 1;
-
-                        dav_insert_xmlns(propdb->p, "lp", ns, *scan_ns_uri,
-                                         &hdr_ns);
-		    }
-		}
-
-                /* property added. move on to the next property. */
-		continue;
-	    }
-            else if (inserted == DAV_PROP_INSERT_NOTDEF) {
-                /* nothing to do. fall thru to allow property to be handled
-                   as a dead property */
-            }
-#if DAV_DEBUG
-            else {
-#if 0
-                /* ### need to change signature to return an error */
-                return dav_new_error(propdb->p, HTTP_INTERNAL_SERVER_ERROR, 0,
-                                     "INTERNAL DESIGN ERROR: insert_liveprop "
-                                     "did not insert what was asked for.");
-#endif
-            }
-#endif
-        }
-
-	/* The property wasn't a live property, so look in the dead property
-           database. */
-
-        /* make sure propdb is really open */
-        if (propdb->deferred) {
-            /* ### what to do with db open error? */
-            (void) dav_really_open_db(propdb, 1 /*ro*/);
-        }
-
-        if (elem->ns == APR_XML_NS_NONE)
-            name.ns = "";
-        else
-            name.ns = APR_XML_GET_URI_ITEM(propdb->ns_xlate, elem->ns);
-        name.name = elem->name;
-
-        /* only bother to look if a database exists */
-        if (propdb->db != NULL) {
-            int found;
-
-            if ((err = (*db_hooks->output_value)(propdb->db, &name,
-                                                 xi, &hdr_good,
-                                                 &found)) != NULL) {
-                /* ### what to do? continue doesn't seem right... */
-                continue;
-            }
-
-            if (found) {
-                have_good = 1;
-
-                /* if we haven't added the db's namespaces, then do so... */
-                if (!xi_filled) {
-                    (void) (*db_hooks->define_namespaces)(propdb->db, xi);
-                    xi_filled = 1;
-                }
-                continue;
-            }
-        }
-
-        /* not found as a live OR dead property. add a record to the "bad"
-           propstats */
-
-        /* make sure we've started our "bad" propstat */
-        if (hdr_bad.first == NULL) {
-            ap_text_append(propdb->p, &hdr_bad,
-                           "<D:propstat>" DEBUG_CR
-                           "<D:prop>" DEBUG_CR);
-        }
-
-        /* output this property's name (into the bad propstats) */
-        dav_output_prop_name(propdb->p, &name, xi, &hdr_bad);
-    }
-
-    ap_text_append(propdb->p, &hdr_good,
-		    "</D:prop>" DEBUG_CR
-		    "<D:status>HTTP/1.1 200 OK</D:status>" DEBUG_CR
-		    "</D:propstat>" DEBUG_CR);
-
-    /* default to start with the good */
-    result.propstats = hdr_good.first;
-
-    /* we may not have any "bad" results */
-    if (hdr_bad.first != NULL) {
-        /* "close" the bad propstat */
-	ap_text_append(propdb->p, &hdr_bad,
-		       "</D:prop>" DEBUG_CR
-		       "<D:status>HTTP/1.1 404 Not Found</D:status>" DEBUG_CR
-		       "</D:propstat>" DEBUG_CR);
-
-	/* if there are no good props, then just return the bad */
-	if (!have_good) {
-	    result.propstats = hdr_bad.first;
-	}
-	else {
-	    /* hook the bad propstat to the end of the good one */
-	    hdr_good.last->next = hdr_bad.first;
-	}
-    }
-
-    /* add in all the various namespaces, and return them */
-    dav_xmlns_generate(xi, &hdr_ns);
-    result.xmlns = hdr_ns.first;
-
-    return result;
-}
-
-void dav_get_liveprop_supported(dav_propdb *propdb,
-                                const char *ns_uri,
-                                const char *propname,
-                                ap_text_header *body)
-{
-    int propid;
-    const dav_hooks_liveprop *hooks;
-
-    propid = dav_find_liveprop_provider(propdb, ns_uri, propname, &hooks);
-
-    if (propid != DAV_PROPID_CORE_UNKNOWN) {
-        if (hooks == NULL) {
-            /* this is a "core" property that we define */
-            dav_prop_insert unused_inserted;
-            dav_insert_coreprop(propdb, propid, propname,
-                                DAV_PROP_INSERT_SUPPORTED, body, &unused_inserted);
-        }
-        else {
-	    (*hooks->insert_prop)(propdb->resource, propid,
-                                  DAV_PROP_INSERT_SUPPORTED, body);
-        }
-    }
-}
-
-void dav_prop_validate(dav_prop_ctx *ctx)
-{
-    dav_propdb *propdb = ctx->propdb;
-    ap_xml_elem *prop = ctx->prop;
-    dav_elem_private *priv;
-
-    priv = ctx->prop->priv = apr_pcalloc(propdb->p, sizeof(*priv));
-
-    /*
-    ** Check to see if this is a live property, and fill the fields
-    ** in the XML elem, as appropriate.
-    **
-    ** Verify that the property is read/write. If not, then it cannot
-    ** be SET or DELETEd.
-    */
-    if (priv->propid == 0) {
-	dav_find_liveprop(propdb, prop);
-
-	/* it's a liveprop if a provider was found */
-	/* ### actually the "core" props should really be liveprops, but
-	   ### there is no "provider" for those and the r/w props are
-	   ### treated as dead props anyhow */
-	ctx->is_liveprop = priv->provider != NULL;
-    }
-
-    if (!dav_rw_liveprop(propdb, priv)) {
-	ctx->err = dav_new_error(propdb->p, HTTP_CONFLICT,
-				 DAV_ERR_PROP_READONLY,
-				 "Property is read-only.");
-	return;
-    }
-
-    if (ctx->is_liveprop) {
-	int defer_to_dead = 0;
-
-	ctx->err = (*priv->provider->patch_validate)(propdb->resource,
-						     prop, ctx->operation,
-						     &ctx->liveprop_ctx,
-						     &defer_to_dead);
-	if (ctx->err != NULL || !defer_to_dead)
-	    return;
-
-	/* clear is_liveprop -- act as a dead prop now */
-	ctx->is_liveprop = 0;
-    }
-
-    /*
-    ** The property is supposed to be stored into the dead-property
-    ** database. Make sure the thing is truly open (and writable).
-    */
-    if (propdb->deferred
-	&& (ctx->err = dav_really_open_db(propdb, 0 /* ro */)) != NULL) {
-	return;
-    }
-
-    /*
-    ** There should be an open, writable database in here!
-    **
-    ** Note: the database would be NULL if it was opened readonly and it
-    **       did not exist.
-    */
-    if (propdb->db == NULL) {
-	ctx->err = dav_new_error(propdb->p, HTTP_INTERNAL_SERVER_ERROR,
-				 DAV_ERR_PROP_NO_DATABASE,
-				 "Attempted to set/remove a property "
-				 "without a valid, open, read/write "
-				 "property database.");
-	return;
-    }
-
-    if (ctx->operation == DAV_PROP_OP_SET) {
-	/*
-	** Prep the element => propdb namespace index mapping, inserting
-	** namespace URIs into the propdb that don't exist.
-	*/
-        (void) (*propdb->db_hooks->map_namespaces)(propdb->db,
-                                                   propdb->ns_xlate,
-                                                   &propdb->mapping);
-    }
-    else if (ctx->operation == DAV_PROP_OP_DELETE) {
-	/*
-	** There are no checks to perform here. If a property exists, then
-	** we will delete it. If it does not exist, then it does not matter
-	** (see S12.13.1).
-	**
-	** Note that if a property does not exist, that does not rule out
-	** that a SET will occur during this PROPPATCH (thusly creating it).
-	*/
-    }
-}
-
-void dav_prop_exec(dav_prop_ctx *ctx)
-{
-    dav_propdb *propdb = ctx->propdb;
-    dav_error *err = NULL;
-    dav_elem_private *priv = ctx->prop->priv;
-
-    ctx->rollback = apr_pcalloc(propdb->p, sizeof(*ctx->rollback));
-
-    if (ctx->is_liveprop) {
-	err = (*priv->provider->patch_exec)(propdb->resource,
-					    ctx->prop, ctx->operation,
-					    ctx->liveprop_ctx,
-					    &ctx->rollback->liveprop);
-    }
-    else {
-        dav_prop_name name;
-
-        if (ctx->prop->ns == APR_XML_NS_NONE)
-            name.ns = "";
-        else
-            name.ns = APR_XML_GET_URI_ITEM(propdb->ns_xlate, ctx->prop->ns);
-        name.name = ctx->prop->name;
-
-	/* save the old value so that we can do a rollback. */
-	if ((err = (*propdb->db_hooks
-                    ->get_rollback)(propdb->db, &name,
-                                    &ctx->rollback->deadprop)) != NULL)
-	    goto error;
-
-	if (ctx->operation == DAV_PROP_OP_SET) {
-
-	    /* Note: propdb->mapping was set in dav_prop_validate() */
-            err = (*propdb->db_hooks->store)(propdb->db, &name, ctx->prop,
-                                             propdb->mapping);
-
-	    /*
-	    ** If an error occurred, then assume that we didn't change the
-	    ** value. Remove the rollback item so that we don't try to set
-	    ** its value during the rollback.
-	    */
-            /* ### euh... where is the removal? */
-	}
-	else if (ctx->operation == DAV_PROP_OP_DELETE) {
-
-	    /*
-	    ** Delete the property. Ignore errors -- the property is there, or
-	    ** we are deleting it for a second time.
-	    */
-	    /* ### but what about other errors? */
-	    (void) (*propdb->db_hooks->remove)(propdb->db, &name);
-	}
-    }
-
-  error:
-    /* push a more specific error here */
-    if (err != NULL) {
-	/*
-	** Use HTTP_INTERNAL_SERVER_ERROR because we shouldn't have seen
-	** any errors at this point.
-	*/
-	ctx->err = dav_push_error(propdb->p, HTTP_INTERNAL_SERVER_ERROR,
-				  DAV_ERR_PROP_EXEC,
-				  "Could not execute PROPPATCH.", err);
-    }
-}
-
-void dav_prop_commit(dav_prop_ctx *ctx)
-{
-    dav_elem_private *priv = ctx->prop->priv;
-
-    /*
-    ** Note that a commit implies ctx->err is NULL. The caller should assume
-    ** a status of HTTP_OK for this case.
-    */
-
-    if (ctx->is_liveprop) {
-	(*priv->provider->patch_commit)(ctx->propdb->resource,
-					ctx->operation,
-					ctx->liveprop_ctx,
-					ctx->rollback->liveprop);
-    }
-}
-
-void dav_prop_rollback(dav_prop_ctx *ctx)
-{
-    dav_error *err = NULL;
-    dav_elem_private *priv = ctx->prop->priv;
-
-    /* do nothing if there is no rollback information. */
-    if (ctx->rollback == NULL)
-	return;
-
-    /*
-    ** ### if we have an error, and a rollback occurs, then the namespace
-    ** ### mods should not happen at all. Basically, the namespace management
-    ** ### is simply a bitch.
-    */
-
-    if (ctx->is_liveprop) {
-	err = (*priv->provider->patch_rollback)(ctx->propdb->resource,
-						ctx->operation,
-						ctx->liveprop_ctx,
-						ctx->rollback->liveprop);
-    }
-    else {
-        err = (*ctx->propdb->db_hooks
-               ->apply_rollback)(ctx->propdb->db, ctx->rollback->deadprop);
-    }
-
-    if (err != NULL) {
-	if (ctx->err == NULL)
-	    ctx->err = err;
-	else {
-	    dav_error *scan = err;
-
-	    /* hook previous errors at the end of the rollback error */
-	    while (scan->prev != NULL)
-		scan = scan->prev;
-	    scan->prev = ctx->err;
-	    ctx->err = err;
-	}
-    }
-}
diff --git a/modules/dav/main/providers.c b/modules/dav/main/providers.c
deleted file mode 100644
index ab7019c..0000000
--- a/modules/dav/main/providers.c
+++ /dev/null
@@ -1,84 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-#include "apr_pools.h"
-#include "apr_hash.h"
-#include "mod_dav.h"
-
-
-static apr_hash_t *dav_repos_providers = NULL;
-
-
-static apr_status_t dav_cleanup_providers(void *ctx)
-{
-    dav_repos_providers = NULL;
-    return APR_SUCCESS;
-}
-
-DAV_DECLARE(void) dav_register_provider(apr_pool_t *p, const char *name,
-                                        const dav_provider *provider)
-{
-    if (dav_repos_providers == NULL) {
-        dav_repos_providers = apr_hash_make(p);
-        apr_pool_cleanup_register(p, NULL, dav_cleanup_providers, apr_pool_cleanup_null);
-    }
-
-    /* just set it. no biggy if it was there before. */
-    apr_hash_set(dav_repos_providers, name, APR_HASH_KEY_STRING, provider);
-}
-
-const dav_provider * dav_lookup_provider(const char *name)
-{
-    return apr_hash_get(dav_repos_providers, name, APR_HASH_KEY_STRING);
-}
diff --git a/modules/dav/main/std_liveprop.c b/modules/dav/main/std_liveprop.c
deleted file mode 100644
index d44d54b..0000000
--- a/modules/dav/main/std_liveprop.c
+++ /dev/null
@@ -1,229 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-#include "httpd.h"
-#include "util_xml.h"
-#include "apr_strings.h"
-
-#include "mod_dav.h"
-
-/* forward-declare */
-static const dav_hooks_liveprop dav_core_hooks_liveprop;
-
-/*
-** The namespace URIs that we use. There will only ever be "DAV:".
-*/
-static const char * const dav_core_namespace_uris[] =
-{
-    "DAV:",
-    NULL	/* sentinel */
-};
-
-/*
-** Define each of the core properties that this provider will handle.
-** Note that all of them are in the DAV: namespace, which has a
-** provider-local index of 0.
-*/
-static const dav_liveprop_spec dav_core_props[] =
-{
-    { 0, "comment",              DAV_PROPID_comment,              1 },
-    { 0, "creator-displayname",  DAV_PROPID_creator_displayname,  1 },
-    { 0, "displayname",          DAV_PROPID_displayname,          1 },
-    { 0, "resourcetype",         DAV_PROPID_resourcetype,         0 },
-    { 0, "source",               DAV_PROPID_source,               1 },
-
-    { 0 }	/* sentinel */
-};
-
-static const dav_liveprop_group dav_core_liveprop_group =
-{
-    dav_core_props,
-    dav_core_namespace_uris,
-    &dav_core_hooks_liveprop
-};
-
-static dav_prop_insert dav_core_insert_prop(const dav_resource *resource,
-                                            int propid, dav_prop_insert what,
-                                            ap_text_header *phdr)
-{
-    const char *value;
-    const char *s;
-    apr_pool_t *p = resource->pool;
-    const dav_liveprop_spec *info;
-    int global_ns;
-
-    switch (propid)
-    {
-    case DAV_PROPID_resourcetype:
-        switch (resource->type) {
-        case DAV_RESOURCE_TYPE_VERSION:
-            if (resource->baselined) {
-	        value = "<D:baseline/>";
-                break;
-            }
-            /* fall through */
-        case DAV_RESOURCE_TYPE_REGULAR:
-        case DAV_RESOURCE_TYPE_WORKING:
-            if (resource->collection) {
-	        value = "<D:collection/>";
-            }
-	    else {
-		/* ### should we denote lock-null resources? */
-
-		value = "";	/* becomes: <D:resourcetype/> */
-	    }
-            break;
-        case DAV_RESOURCE_TYPE_HISTORY:
-	    value = "<D:version-history/>";
-            break;
-        case DAV_RESOURCE_TYPE_WORKSPACE:
-	    value = "<D:collection/>";
-            break;
-        case DAV_RESOURCE_TYPE_ACTIVITY:
-	    value = "<D:activity/>";
-            break;
-
-        default:
-	    /* ### bad juju */
-            return DAV_PROP_INSERT_NOTDEF;
-        }
-        break;
-
-    case DAV_PROPID_comment:
-    case DAV_PROPID_creator_displayname:
-    case DAV_PROPID_displayname:
-    case DAV_PROPID_source:
-    default:
-        /*
-        ** This property is known, but not defined as a liveprop. However,
-        ** it may be a dead property.
-        */
-        return DAV_PROP_INSERT_NOTDEF;
-    }
-
-    /* assert: value != NULL */
-
-    /* get the information and global NS index for the property */
-    global_ns = dav_get_liveprop_info(propid, &dav_core_liveprop_group, &info);
-
-    /* assert: info != NULL && info->name != NULL */
-
-    if (what == DAV_PROP_INSERT_SUPPORTED) {
-        s = apr_psprintf(p,
-                         "<D:supported-live-property D:name=\"%s\" "
-                         "D:namespace=\"%s\"/>" DEBUG_CR,
-                         info->name, dav_core_namespace_uris[info->ns]);
-    }
-    else if (what == DAV_PROP_INSERT_VALUE && *value != '\0') {
-        s = apr_psprintf(p, "<lp%d:%s>%s</lp%d:%s>" DEBUG_CR,
-                         global_ns, info->name, value, global_ns, info->name);
-    }
-    else {
-        s = apr_psprintf(p, "<lp%d:%s/>" DEBUG_CR, global_ns, info->name);
-    }
-    ap_text_append(p, phdr, s);
-
-    /* we inserted what was asked for */
-    return what;
-}
-
-static int dav_core_is_writable(const dav_resource *resource, int propid)
-{
-    const dav_liveprop_spec *info;
-
-    (void) dav_get_liveprop_info(propid, &dav_core_liveprop_group, &info);
-    return info->is_writable;
-}
-
-static dav_error * dav_core_patch_validate(const dav_resource *resource,
-                                           const ap_xml_elem *elem,
-                                           int operation, void **context,
-                                           int *defer_to_dead)
-{
-    /* all of our writable props go in the dead prop database */
-    *defer_to_dead = 1;
-
-    return NULL;
-}
-
-static const dav_hooks_liveprop dav_core_hooks_liveprop = {
-    dav_core_insert_prop,
-    dav_core_is_writable,
-    dav_core_namespace_uris,
-    dav_core_patch_validate,
-    NULL,       /* patch_exec */
-    NULL,       /* patch_commit */
-    NULL,       /* patch_rollback */
-};
-
-int dav_core_find_liveprop(const dav_resource *resource,
-                           const char *ns_uri, const char *name,
-                           const dav_hooks_liveprop **hooks)
-{
-    return dav_do_find_liveprop(ns_uri, name, &dav_core_liveprop_group, hooks);
-}
-
-void dav_core_insert_all_liveprops(request_rec *r,
-                                   const dav_resource *resource,
-                                   dav_prop_insert what, ap_text_header *phdr)
-{
-    (void) dav_core_insert_prop(resource, DAV_PROPID_resourcetype,
-                                what, phdr);
-}
-
-void dav_core_register_uris(apr_pool_t *p)
-{
-    /* register the namespace URIs */
-    dav_register_liveprop_group(p, &dav_core_liveprop_group);
-}
diff --git a/modules/dav/main/util.c b/modules/dav/main/util.c
deleted file mode 100644
index 9a4bc24..0000000
--- a/modules/dav/main/util.c
+++ /dev/null
@@ -1,2043 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-/*
-** DAV extension module for Apache 2.0.*
-**  - various utilities, repository-independent
-*/
-
-#include "apr_strings.h"
-#include "apr_lib.h"
-
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-#include "mod_dav.h"
-
-#include "http_request.h"
-#include "http_config.h"
-#include "http_vhost.h"
-#include "http_log.h"
-#include "http_protocol.h"
-
-DAV_DECLARE(dav_error*) dav_new_error(apr_pool_t *p, int status, 
-                                      int error_id, const char *desc)
-{
-    int save_errno = errno;
-    dav_error *err = apr_pcalloc(p, sizeof(*err));
-
-    /* DBG3("dav_new_error: %d %d %s", status, error_id, desc ? desc : "(no desc)"); */
-
-    err->status = status;
-    err->error_id = error_id;
-    err->desc = desc;
-    err->save_errno = save_errno;
-
-    return err;
-}
-
-DAV_DECLARE(dav_error*) dav_new_error_tag(apr_pool_t *p, int status, 
-                                          int error_id, const char *desc,
-                                          const char *namespace,
-                                          const char *tagname)
-{
-    dav_error *err = dav_new_error(p, status, error_id, desc);
-
-    err->tagname = tagname;
-    err->namespace = namespace;
-
-    return err;
-}
-
-
-DAV_DECLARE(dav_error*) dav_push_error(apr_pool_t *p, int status, 
-                                       int error_id, const char *desc, 
-                                       dav_error *prev)
-{
-    dav_error *err = apr_pcalloc(p, sizeof(*err));
-
-    err->status = status;
-    err->error_id = error_id;
-    err->desc = desc;
-    err->prev = prev;
-
-    return err;
-}
-
-DAV_DECLARE(void) dav_check_bufsize(apr_pool_t * p, dav_buffer *pbuf, 
-                                    apr_size_t extra_needed)
-{
-    /* grow the buffer if necessary */
-    if (pbuf->cur_len + extra_needed > pbuf->alloc_len) {
-	char *newbuf;
-
-	pbuf->alloc_len += extra_needed + DAV_BUFFER_PAD;
-	newbuf = apr_palloc(p, pbuf->alloc_len);
-	memcpy(newbuf, pbuf->buf, pbuf->cur_len);
-	pbuf->buf = newbuf;
-    }
-}
-
-DAV_DECLARE(void) dav_set_bufsize(apr_pool_t * p, dav_buffer *pbuf, 
-                                  apr_size_t size)
-{
-    /* NOTE: this does not retain prior contents */
-
-    /* NOTE: this function is used to init the first pointer, too, since
-       the PAD will be larger than alloc_len (0) for zeroed structures */
-
-    /* grow if we don't have enough for the requested size plus padding */
-    if (size + DAV_BUFFER_PAD > pbuf->alloc_len) {
-	/* set the new length; min of MINSIZE */
-	pbuf->alloc_len = size + DAV_BUFFER_PAD;
-	if (pbuf->alloc_len < DAV_BUFFER_MINSIZE)
-	    pbuf->alloc_len = DAV_BUFFER_MINSIZE;
-
-	pbuf->buf = apr_palloc(p, pbuf->alloc_len);
-    }
-    pbuf->cur_len = size;
-}
-
-
-/* initialize a buffer and copy the specified (null-term'd) string into it */
-DAV_DECLARE(void) dav_buffer_init(apr_pool_t *p, dav_buffer *pbuf, 
-                                  const char *str)
-{
-    dav_set_bufsize(p, pbuf, strlen(str));
-    memcpy(pbuf->buf, str, pbuf->cur_len + 1);
-}
-
-/* append a string to the end of the buffer, adjust length */
-DAV_DECLARE(void) dav_buffer_append(apr_pool_t *p, dav_buffer *pbuf, 
-                                    const char *str)
-{
-    size_t len = strlen(str);
-
-    dav_check_bufsize(p, pbuf, len + 1);
-    memcpy(pbuf->buf + pbuf->cur_len, str, len + 1);
-    pbuf->cur_len += len;
-}
-
-/* place a string on the end of the buffer, do NOT adjust length */
-DAV_DECLARE(void) dav_buffer_place(apr_pool_t *p, dav_buffer *pbuf, 
-                                   const char *str)
-{
-    size_t len = strlen(str);
-
-    dav_check_bufsize(p, pbuf, len + 1);
-    memcpy(pbuf->buf + pbuf->cur_len, str, len + 1);
-}
-
-/* place some memory on the end of a buffer; do NOT adjust length */
-DAV_DECLARE(void) dav_buffer_place_mem(apr_pool_t *p, dav_buffer *pbuf, 
-                                       const void *mem, apr_size_t amt, 
-                                       apr_size_t pad)
-{
-    dav_check_bufsize(p, pbuf, amt + pad);
-    memcpy(pbuf->buf + pbuf->cur_len, mem, amt);
-}
-
-/*
-** dav_lookup_uri()
-**
-** Extension for ap_sub_req_lookup_uri() which can't handle absolute
-** URIs properly.
-**
-** If NULL is returned, then an error occurred with parsing the URI or
-** the URI does not match the current server.
-*/
-dav_lookup_result dav_lookup_uri(const char *uri, request_rec * r,
-                                 int must_be_absolute)
-{
-    dav_lookup_result result = { 0 };
-    const char *scheme;
-    apr_port_t port;
-    apr_uri_t comp;
-    char *new_file;
-    const char *domain;
-
-    /* first thing to do is parse the URI into various components */
-    if (apr_uri_parse(r->pool, uri, &comp) != APR_SUCCESS) {
-	result.err.status = HTTP_BAD_REQUEST;
-	result.err.desc = "Invalid syntax in Destination URI.";
-	return result;
-    }
-
-    /* the URI must be an absoluteURI (WEBDAV S9.3) */
-    if (comp.scheme == NULL && must_be_absolute) {
-	result.err.status = HTTP_BAD_REQUEST;
-	result.err.desc = "Destination URI must be an absolute URI.";
-	return result;
-    }
-
-    /* the URI must not have a query (args) or a fragment */
-    if (comp.query != NULL || comp.fragment != NULL) {
-	result.err.status = HTTP_BAD_REQUEST;
-	result.err.desc =
-	    "Destination URI contains invalid components "
-	    "(a query or a fragment).";
-	return result;
-    }
-
-    /* If the scheme or port was provided, then make sure that it matches
-       the scheme/port of this request. If the request must be absolute,
-       then require the (explicit/implicit) scheme/port be matching.
-
-       ### hmm. if a port wasn't provided (does the parse return port==0?),
-       ### but we're on a non-standard port, then we won't detect that the
-       ### URI's port implies the wrong one.
-    */
-    if (comp.scheme != NULL || comp.port != 0 || must_be_absolute)
-    {
-        /* ### not sure this works if the current request came in via https: */
-        scheme = r->parsed_uri.scheme;
-        if (scheme == NULL)
-            scheme = ap_http_method(r);
-
-        /* insert a port if the URI did not contain one */
-        if (comp.port == 0)
-            comp.port = apr_uri_default_port_for_scheme(comp.scheme);
-
-        /* now, verify that the URI uses the same scheme as the current.
-           request. the port must match our port.
-        */
-        apr_sockaddr_port_get(&port, r->connection->local_addr);
-        if (strcasecmp(comp.scheme, scheme) != 0
-#ifdef APACHE_PORT_HANDLING_IS_BUSTED
-            || comp.port != port
-#endif
-            ) {
-            result.err.status = HTTP_BAD_GATEWAY;
-            result.err.desc = apr_psprintf(r->pool,
-                                           "Destination URI refers to "
-                                           "different scheme or port "
-                                           "(%s://hostname:%d)" APR_EOL_STR
-                                           "(want: %s://hostname:%d)",
-                                           comp.scheme ? comp.scheme : scheme,
-                                           comp.port ? comp.port : port,
-                                           scheme, port);
-            return result;
-        }
-    }
-
-    /* we have verified the scheme, port, and general structure */
-
-    /*
-    ** Hrm.  IE5 will pass unqualified hostnames for both the 
-    ** Host: and Destination: headers.  This breaks the
-    ** http_vhost.c::matches_aliases function.
-    **
-    ** For now, qualify unqualified comp.hostnames with
-    ** r->server->server_hostname.
-    **
-    ** ### this is a big hack. Apache should provide a better way.
-    ** ### maybe the admin should list the unqualified hosts in a
-    ** ### <ServerAlias> block?
-    */
-    if (comp.hostname != NULL
-        && strrchr(comp.hostname, '.') == NULL
-	&& (domain = strchr(r->server->server_hostname, '.')) != NULL) {
-	comp.hostname = apr_pstrcat(r->pool, comp.hostname, domain, NULL);
-    }
-
-    /* now, if a hostname was provided, then verify that it represents the
-       same server as the current connection. note that we just use our
-       port, since we've verified the URI matches ours */
-#ifdef APACHE_PORT_HANDLING_IS_BUSTED
-    if (comp.hostname != NULL &&
-	!ap_matches_request_vhost(r, comp.hostname, port)) {
-	result.err.status = HTTP_BAD_GATEWAY;
-	result.err.desc = "Destination URI refers to a different server.";
-	return result;
-    }
-#endif
-
-    /* we have verified that the requested URI denotes the same server as
-       the current request. Therefore, we can use ap_sub_req_lookup_uri() */
-
-    /* reconstruct a URI as just the path */
-    new_file = apr_uri_unparse(r->pool, &comp, APR_URI_UNP_OMITSITEPART);
-
-    /*
-     * Lookup the URI and return the sub-request. Note that we use the
-     * same HTTP method on the destination. This allows the destination
-     * to apply appropriate restrictions (e.g. readonly).
-     */
-    result.rnew = ap_sub_req_method_uri(r->method, new_file, r, NULL);
-
-    return result;
-}
-
-/* ---------------------------------------------------------------
-**
-** XML UTILITY FUNCTIONS
-*/
-
-/* validate that the root element uses a given DAV: tagname (TRUE==valid) */
-int dav_validate_root(const ap_xml_doc *doc, const char *tagname)
-{
-    return doc->root &&
-	doc->root->ns == AP_XML_NS_DAV_ID &&
-	strcmp(doc->root->name, tagname) == 0;
-}
-
-/* find and return the (unique) child with a given DAV: tagname */
-ap_xml_elem *dav_find_child(const ap_xml_elem *elem, const char *tagname)
-{
-    ap_xml_elem *child = elem->first_child;
-
-    for (; child; child = child->next)
-	if (child->ns == AP_XML_NS_DAV_ID && !strcmp(child->name, tagname))
-	    return child;
-    return NULL;
-}
-
-/* gather up all the CDATA into a single string */
-DAV_DECLARE(const char *) dav_xml_get_cdata(const ap_xml_elem *elem, apr_pool_t *pool,
-                              int strip_white)
-{
-    apr_size_t len = 0;
-    ap_text *scan;
-    const ap_xml_elem *child;
-    char *cdata;
-    char *s;
-    apr_size_t tlen;
-    const char *found_text = NULL; /* initialize to avoid gcc warning */
-    int found_count = 0;
-
-    for (scan = elem->first_cdata.first; scan != NULL; scan = scan->next) {
-        found_text = scan->text;
-        ++found_count;
-        len += strlen(found_text);
-    }
-
-    for (child = elem->first_child; child != NULL; child = child->next) {
-        for (scan = child->following_cdata.first;
-             scan != NULL;
-             scan = scan->next) {
-            found_text = scan->text;
-            ++found_count;
-            len += strlen(found_text);
-        }
-    }
-
-    /* some fast-path cases:
-     * 1) zero-length cdata
-     * 2) a single piece of cdata with no whitespace to strip
-     */
-    if (len == 0)
-        return "";
-    if (found_count == 1) {
-        if (!strip_white
-            || (!apr_isspace(*found_text)
-                && !apr_isspace(found_text[len - 1])))
-            return found_text;
-    }
-
-    cdata = s = apr_palloc(pool, len + 1);
-
-    for (scan = elem->first_cdata.first; scan != NULL; scan = scan->next) {
-        tlen = strlen(scan->text);
-        memcpy(s, scan->text, tlen);
-        s += tlen;
-    }
-
-    for (child = elem->first_child; child != NULL; child = child->next) {
-        for (scan = child->following_cdata.first;
-             scan != NULL;
-             scan = scan->next) {
-            tlen = strlen(scan->text);
-            memcpy(s, scan->text, tlen);
-            s += tlen;
-        }
-    }
-
-    *s = '\0';
-
-    if (strip_white) {
-        /* trim leading whitespace */
-        while (apr_isspace(*cdata))     /* assume: return false for '\0' */
-            ++cdata;
-
-        /* trim trailing whitespace */
-        while (len-- > 0 && apr_isspace(cdata[len]))
-            continue;
-        cdata[len + 1] = '\0';
-    }
-
-    return cdata;
-}
-
-DAV_DECLARE(dav_xmlns_info *) dav_xmlns_create(apr_pool_t *pool)
-{
-    dav_xmlns_info *xi = apr_pcalloc(pool, sizeof(*xi));
-
-    xi->pool = pool;
-    xi->uri_prefix = apr_hash_make(pool);
-    xi->prefix_uri = apr_hash_make(pool);
-
-    return xi;
-}
-
-DAV_DECLARE(void) dav_xmlns_add(dav_xmlns_info *xi,
-                                const char *prefix, const char *uri)
-{
-    /* this "should" not overwrite a prefix mapping */
-    apr_hash_set(xi->prefix_uri, prefix, APR_HASH_KEY_STRING, uri);
-
-    /* note: this may overwrite an existing URI->prefix mapping, but it
-       doesn't matter -- any prefix is usuable to specify the URI. */
-    apr_hash_set(xi->uri_prefix, uri, APR_HASH_KEY_STRING, prefix);
-}
-
-DAV_DECLARE(const char *) dav_xmlns_add_uri(dav_xmlns_info *xi,
-                                            const char *uri)
-{
-    const char *prefix;
-
-    if ((prefix = apr_hash_get(xi->uri_prefix, uri,
-                               APR_HASH_KEY_STRING)) != NULL)
-        return prefix;
-
-    prefix = apr_psprintf(xi->pool, "g%d", xi->count++);
-    dav_xmlns_add(xi, prefix, uri);
-    return prefix;
-}
-
-DAV_DECLARE(const char *) dav_xmlns_get_uri(dav_xmlns_info *xi,
-                                            const char *prefix)
-{
-    return apr_hash_get(xi->prefix_uri, prefix, APR_HASH_KEY_STRING);
-}
-
-DAV_DECLARE(const char *) dav_xmlns_get_prefix(dav_xmlns_info *xi,
-                                               const char *uri)
-{
-    return apr_hash_get(xi->uri_prefix, uri, APR_HASH_KEY_STRING);
-}
-
-DAV_DECLARE(void) dav_xmlns_generate(dav_xmlns_info *xi,
-                                     apr_text_header *phdr)
-{
-    apr_hash_index_t *hi = apr_hash_first(xi->pool, xi->prefix_uri);
-
-    for (; hi != NULL; hi = apr_hash_next(hi)) {
-        const void *prefix;
-        void *uri;
-        const char *s;
-
-        apr_hash_this(hi, &prefix, NULL, &uri);
-
-        s = apr_psprintf(xi->pool, " xmlns:%s=\"%s\"",
-                         (const char *)prefix, (const char *)uri);
-        ap_text_append(xi->pool, phdr, s);
-    }
-}
-
-/* ---------------------------------------------------------------
-**
-** Timeout header processing
-**
-*/
-
-/* dav_get_timeout:  If the Timeout: header exists, return a time_t
- *    when this lock is expected to expire.  Otherwise, return
- *    a time_t of DAV_TIMEOUT_INFINITE.
- *
- *    It's unclear if DAV clients are required to understand
- *    Seconds-xxx and Infinity time values.  We assume that they do.
- *    In addition, for now, that's all we understand, too.
- */
-time_t dav_get_timeout(request_rec *r)
-{
-    time_t now, expires = DAV_TIMEOUT_INFINITE;
-
-    const char *timeout_const = apr_table_get(r->headers_in, "Timeout");
-    const char *timeout = apr_pstrdup(r->pool, timeout_const), *val;
-
-    if (timeout == NULL)
-	return DAV_TIMEOUT_INFINITE;
-
-    /* Use the first thing we understand, or infinity if
-     * we don't understand anything.
-     */
-
-    while ((val = ap_getword_white(r->pool, &timeout)) && strlen(val)) {
-	if (!strncmp(val, "Infinite", 8)) {
-	    return DAV_TIMEOUT_INFINITE;
-	}
-
-	if (!strncmp(val, "Second-", 7)) {
-	    val += 7;
-	    /* ### We need to handle overflow better:
-	     * ### timeout will be <= 2^32 - 1
-	     */
-	    expires = atol(val);
-	    now     = time(NULL);
-	    return now + expires;
-	}
-    }
-
-    return DAV_TIMEOUT_INFINITE;
-}
-
-/* ---------------------------------------------------------------
-**
-** If Header processing
-**
-*/
-
-/* add_if_resource returns a new if_header, linking it to next_ih.
- */
-static dav_if_header *dav_add_if_resource(apr_pool_t *p, dav_if_header *next_ih,
-					  const char *uri, size_t uri_len)
-{
-    dav_if_header *ih;
-
-    if ((ih = apr_pcalloc(p, sizeof(*ih))) == NULL)
-	return NULL;
-
-    ih->uri = uri;
-    ih->uri_len = uri_len;
-    ih->next = next_ih;
-
-    return ih;
-}
-
-/* add_if_state adds a condition to an if_header.
- */
-static dav_error * dav_add_if_state(apr_pool_t *p, dav_if_header *ih,
-				    const char *state_token,
-				    dav_if_state_type t, int condition,
-				    const dav_hooks_locks *locks_hooks)
-{
-    dav_if_state_list *new_sl;
-
-    new_sl = apr_pcalloc(p, sizeof(*new_sl));
-
-    new_sl->condition = condition;
-    new_sl->type      = t;
-    
-    if (t == dav_if_opaquelock) {
-	dav_error *err;
-
-	if ((err = (*locks_hooks->parse_locktoken)(p, state_token,
-						   &new_sl->locktoken)) != NULL) {
-	    /* ### maybe add a higher-level description */
-	    return err;
-	}
-    }
-    else
-	new_sl->etag = state_token;
-
-    new_sl->next = ih->state;
-    ih->state = new_sl;
-
-    return NULL;
-}
-
-/* fetch_next_token returns the substring from str+1
- * to the next occurence of char term, or \0, whichever
- * occurs first.  Leading whitespace is ignored.
- */
-static char *dav_fetch_next_token(char **str, char term)
-{
-    char *sp;
-    char *token;
-	
-    token = *str + 1;
-
-    while (*token && (*token == ' ' || *token == '\t'))
-	token++;
-
-    if ((sp = strchr(token, term)) == NULL)
-	return NULL;
-
-    *sp = '\0';
-    *str = sp;
-    return token;
-}
-
-/* dav_process_if_header:
- *
- *   If NULL (no error) is returned, then **if_header points to the
- *   "If" productions structure (or NULL if "If" is not present).
- *
- *   ### this part is bogus:
- *   If an error is encountered, the error is logged.  Parent should
- *   return err->status.
- */
-static dav_error * dav_process_if_header(request_rec *r, dav_if_header **p_ih)
-{
-    dav_error *err;
-    char *str;
-    char *list;
-    const char *state_token;
-    const char *uri = NULL;	/* scope of current production; NULL=no-tag */
-    size_t uri_len = 0;
-    dav_if_header *ih = NULL;
-    apr_uri_t parsed_uri;
-    const dav_hooks_locks *locks_hooks = DAV_GET_HOOKS_LOCKS(r);
-    enum {no_tagged, tagged, unknown} list_type = unknown;
-    int condition;
-	
-    *p_ih = NULL;
-
-    if ((str = apr_pstrdup(r->pool, apr_table_get(r->headers_in, "If"))) == NULL)
-	return NULL;
-
-    while (*str) {
-	switch(*str) {
-	case '<':
-	    /* Tagged-list production - following states apply to this uri */
-	    if (list_type == no_tagged
-		|| ((uri = dav_fetch_next_token(&str, '>')) == NULL)) {
-		return dav_new_error(r->pool, HTTP_BAD_REQUEST,
-				     DAV_ERR_IF_TAGGED,
-				     "Invalid If-header: unclosed \"<\" or "
-				     "unexpected tagged-list production.");
-	    }
-            
-            /* 2518 specifies this must be an absolute URI; just take the
-             * relative part for later comparison against r->uri */
-            if (apr_uri_parse(r->pool, uri, &parsed_uri) != APR_SUCCESS) {
-                return dav_new_error(r->pool, HTTP_BAD_REQUEST,
-                                     DAV_ERR_IF_TAGGED,
-                                     "Invalid URI in tagged If-header.");
-            }
-	    /* note that parsed_uri.path is allocated; we can trash it */
-
-	    /* clean up the URI a bit */
-	    ap_getparents(parsed_uri.path);
-	    uri_len = strlen(parsed_uri.path);
-	    if (uri_len > 1 && parsed_uri.path[uri_len - 1] == '/')
-		parsed_uri.path[--uri_len] = '\0';
-
-	    uri = parsed_uri.path;
-	    list_type = tagged;
-	    break;
-
-	case '(':
-	    /* List production */
-
-	    /* If a uri has not been encountered, this is a No-Tagged-List */
-	    if (list_type == unknown)
-		list_type = no_tagged;
-
-	    if ((list = dav_fetch_next_token(&str, ')')) == NULL) {
-		return dav_new_error(r->pool, HTTP_BAD_REQUEST,
-				     DAV_ERR_IF_UNCLOSED_PAREN,
-				     "Invalid If-header: unclosed \"(\".");
-	    }
-
-	    if ((ih = dav_add_if_resource(r->pool, ih, uri, uri_len)) == NULL) {
-		/* ### dav_add_if_resource() should return an error for us! */
-		return dav_new_error(r->pool, HTTP_BAD_REQUEST,
-				     DAV_ERR_IF_PARSE,
-				     "Internal server error parsing \"If:\" "
-				     "header.");
-	    }
-
-	    condition = DAV_IF_COND_NORMAL;
-
-	    while (*list) {
-		/* List is the entire production (in a uri scope) */
-
-		switch (*list) {
-		case '<':
-		    if ((state_token = dav_fetch_next_token(&list, '>')) == NULL) {
-			/* ### add a description to this error */
-			return dav_new_error(r->pool, HTTP_BAD_REQUEST,
-					     DAV_ERR_IF_PARSE, NULL);
-		    }
-
-		    if ((err = dav_add_if_state(r->pool, ih, state_token, dav_if_opaquelock,
-						condition, locks_hooks)) != NULL) {
-			/* ### maybe add a higher level description */
-			return err;
-		    }
-		    condition = DAV_IF_COND_NORMAL;
-		    break;
-
-		case '[':
-		    if ((state_token = dav_fetch_next_token(&list, ']')) == NULL) {
-			/* ### add a description to this error */
-			return dav_new_error(r->pool, HTTP_BAD_REQUEST,
-					     DAV_ERR_IF_PARSE, NULL);
-		    }
-
-		    if ((err = dav_add_if_state(r->pool, ih, state_token, dav_if_etag,
-						condition, locks_hooks)) != NULL) {
-			/* ### maybe add a higher level description */
-			return err;
-		    }
-		    condition = DAV_IF_COND_NORMAL;
-		    break;
-
-		case 'N':
-		    if (list[1] == 'o' && list[2] == 't') {
-			if (condition != DAV_IF_COND_NORMAL) {
-			    return dav_new_error(r->pool, HTTP_BAD_REQUEST,
-						 DAV_ERR_IF_MULTIPLE_NOT,
-						 "Invalid \"If:\" header: "
-						 "Multiple \"not\" entries "
-						 "for the same state.");
-			}
-			condition = DAV_IF_COND_NOT;
-		    }
-		    list += 2;
-		    break;
-
-		case ' ':
-		case '\t':
-		    break;
-
-		default:
-		    return dav_new_error(r->pool, HTTP_BAD_REQUEST,
-					 DAV_ERR_IF_UNK_CHAR,
-                                         apr_psprintf(r->pool,
-                                                     "Invalid \"If:\" "
-                                                     "header: Unexpected "
-                                                     "character encountered "
-                                                     "(0x%02x, '%c').",
-                                                     *list, *list));
-		}
-
-		list++;
-	    }
-	    break;
-
-	case ' ':
-	case '\t':
-	    break;
-
-	default:
-	    return dav_new_error(r->pool, HTTP_BAD_REQUEST,
-				 DAV_ERR_IF_UNK_CHAR,
-                                 apr_psprintf(r->pool,
-                                             "Invalid \"If:\" header: "
-                                             "Unexpected character "
-                                             "encountered (0x%02x, '%c').",
-                                             *str, *str));
-	}
-
-	str++;
-    }
-
-    *p_ih = ih;
-    return NULL;
-}
-
-static int dav_find_submitted_locktoken(const dav_if_header *if_header,
-					const dav_lock *lock_list,
-					const dav_hooks_locks *locks_hooks)
-{
-    for (; if_header != NULL; if_header = if_header->next) {
-	const dav_if_state_list *state_list;
-
-	for (state_list = if_header->state;
-	     state_list != NULL;
-	     state_list = state_list->next) {
-
-	    if (state_list->type == dav_if_opaquelock) {
-		const dav_lock *lock;
-
-		/* given state_list->locktoken, match it */
-
-		/*
-		** The resource will have one or more lock tokens. We only
-		** need to match one of them against any token in the
-		** If: header.
-		**
-		** One token case: It is an exclusive or shared lock. Either
-		**                 way, we must find it.
-		**
-		** N token case: They are shared locks. By policy, we need
-		**               to match only one. The resource's other
-		**               tokens may belong to somebody else (so we
-		**               shouldn't see them in the If: header anyway)
-		*/
-		for (lock = lock_list; lock != NULL; lock = lock->next) {
-
-		    if (!(*locks_hooks->compare_locktoken)(state_list->locktoken, lock->locktoken)) {
-			return 1;
-		    }
-		}
-	    }
-	}
-    }
-
-    return 0;
-}
-
-/* dav_validate_resource_state:
- *    Returns NULL if path/uri meets if-header and lock requirements
- */
-static dav_error * dav_validate_resource_state(apr_pool_t *p,
-					       const dav_resource *resource,
-					       dav_lockdb *lockdb,
-					       const dav_if_header *if_header,
-                                               int flags,
-					       dav_buffer *pbuf,
-                                               request_rec *r)
-{
-    dav_error *err;
-    const char *uri;
-    const char *etag;
-    const dav_hooks_locks *locks_hooks = (lockdb ? lockdb->hooks : NULL);
-    const dav_if_header *ifhdr_scan;
-    dav_if_state_list *state_list;
-    dav_lock *lock_list;
-    dav_lock *lock;
-    int num_matched;
-    int num_that_apply;
-    int seen_locktoken;
-    apr_size_t uri_len;
-    const char *reason = NULL;
-
-    /* DBG1("validate: <%s>", resource->uri); */
-
-    /*
-    ** The resource will have one of three states:
-    **
-    ** 1) No locks. We have no special requirements that the user supply
-    **    specific locktokens. One of the state lists must match, and
-    **    we're done.
-    **
-    ** 2) One exclusive lock. The locktoken must appear *anywhere* in the
-    **    If: header. Of course, asserting the token in a "Not" term will
-    **    quickly fail that state list :-). If the locktoken appears in
-    **    one of the state lists *and* one state list matches, then we're
-    **    done.
-    **
-    ** 3) One or more shared locks. One of the locktokens must appear
-    **    *anywhere* in the If: header. If one of the locktokens appears,
-    **    and we match one state list, then we are done.
-    **
-    ** The <seen_locktoken> variable determines whether we have seen one
-    ** of this resource's locktokens in the If: header.
-    */
-
-    /*
-    ** If this is a new lock request, <flags> will contain the requested
-    ** lock scope.  Three rules apply:
-    **
-    ** 1) Do not require a (shared) locktoken to be seen (when we are
-    **    applying another shared lock)
-    ** 2) If the scope is exclusive and we see any locks, fail.
-    ** 3) If the scope is shared and we see an exclusive lock, fail.
-    */
-
-    if (lockdb == NULL) {
-	/* we're in State 1. no locks. */
-	lock_list = NULL;
-    }
-    else {
-	/*
-	** ### hrm... we don't need to have these fully
-	** ### resolved since we're only looking at the
-	** ### locktokens...
-	**
-	** ### use get_locks w/ calltype=PARTIAL
-	*/
-	if ((err = dav_lock_query(lockdb, resource, &lock_list)) != NULL) {
-	    return dav_push_error(p,
-				  HTTP_INTERNAL_SERVER_ERROR, 0,
-				  "The locks could not be queried for "
-				  "verification against a possible \"If:\" "
-				  "header.",
-				  err);
-	}
-
-	/* lock_list now determines whether we're in State 1, 2, or 3. */
-    }
-
-    /* 
-    ** For a new, exclusive lock: if any locks exist, fail.
-    ** For a new, shared lock:    if an exclusive lock exists, fail.
-    **                            else, do not require a token to be seen.
-    */
-    if (flags & DAV_LOCKSCOPE_EXCLUSIVE) {
-	if (lock_list != NULL) {
-	    return dav_new_error(p, HTTP_LOCKED, 0, 
-				 "Existing lock(s) on the requested resource "
-				 "prevent an exclusive lock.");
-	}
-
-	/*
-	** There are no locks, so we can pretend that we've already met
-	** any requirement to find the resource's locks in an If: header.
-	*/
-	seen_locktoken = 1;
-    }
-    else if (flags & DAV_LOCKSCOPE_SHARED) {
-	/*
-	** Strictly speaking, we don't need this loop. Either the first
-	** (and only) lock will be EXCLUSIVE, or none of them will be.
-	*/
-        for (lock = lock_list; lock != NULL; lock = lock->next) {
-            if (lock->scope == DAV_LOCKSCOPE_EXCLUSIVE) {
-		return dav_new_error(p, HTTP_LOCKED, 0,
-				     "The requested resource is already "
-				     "locked exclusively.");
-            }
-        }
-
-	/*
-	** The locks on the resource (if any) are all shared. Set the
-	** <seen_locktoken> flag to indicate that we do not need to find
-	** the locks in an If: header.
-	*/
-        seen_locktoken = 1;
-    }
-    else {
-	/*
-	** For methods other than LOCK:
-	**
-	** If we have no locks, then <seen_locktoken> can be set to true --
-	** pretending that we've already met the requirement of seeing one
-	** of the resource's locks in the If: header.
-	**
-	** Otherwise, it must be cleared and we'll look for one.
-	*/
-        seen_locktoken = (lock_list == NULL);
-    }
-
-    /*
-    ** If there is no If: header, then we can shortcut some logic:
-    **
-    ** 1) if we do not need to find a locktoken in the (non-existent) If:
-    **    header, then we are successful.
-    **
-    ** 2) if we must find a locktoken in the (non-existent) If: header, then
-    **    we fail.
-    */
-    if (if_header == NULL) {
-	if (seen_locktoken)
-	    return NULL;
-
-	return dav_new_error(p, HTTP_LOCKED, 0,
-			     "This resource is locked and an \"If:\" header "
-			     "was not supplied to allow access to the "
-			     "resource.");
-    }
-    /* the If: header is present */
-
-    /*
-    ** If a dummy header is present (because of a Lock-Token: header), then
-    ** we are required to find that token in this resource's set of locks.
-    ** If we have no locks, then we immediately fail.
-    **
-    ** This is a 400 (Bad Request) since they should only submit a locktoken
-    ** that actually exists.
-    **
-    ** Don't issue this response if we're talking about the parent resource.
-    ** It is okay for that resource to NOT have this locktoken.
-    ** (in fact, it certainly will not: a dummy_header only occurs for the
-    **  UNLOCK method, the parent is checked only for locknull resources,
-    **  and the parent certainly does not have the (locknull's) locktoken)
-    */
-    if (lock_list == NULL && if_header->dummy_header) {
-        if (flags & DAV_VALIDATE_IS_PARENT)
-            return NULL;
-	return dav_new_error(p, HTTP_BAD_REQUEST, 0,
-			     "The locktoken specified in the \"Lock-Token:\" "
-			     "header is invalid because this resource has no "
-			     "outstanding locks.");
-    }
-
-    /*
-    ** Prepare the input URI. We want the URI to never have a trailing slash.
-    **
-    ** When URIs are placed into the dav_if_header structure, they are
-    ** guaranteed to never have a trailing slash. If the URIs are equivalent,
-    ** then it doesn't matter if they both lack a trailing slash -- they're
-    ** still equivalent.
-    **
-    ** Note: we could also ensure that a trailing slash is present on both
-    ** URIs, but the majority of URIs provided to us via a resource walk
-    ** will not contain that trailing slash.
-    */
-    uri = resource->uri;
-    uri_len = strlen(uri);
-    if (uri[uri_len - 1] == '/') {
-	dav_set_bufsize(p, pbuf, uri_len);
-	memcpy(pbuf->buf, uri, uri_len);
-	pbuf->buf[--uri_len] = '\0';
-	uri = pbuf->buf;
-    }
-
-    /* get the resource's etag; we may need it during the checks */
-    etag = (*resource->hooks->getetag)(resource);
-
-    /* how many state_lists apply to this URI? */
-    num_that_apply = 0;
-
-    /* If there are if-headers, fail if this resource
-     * does not match at least one state_list.
-     */
-    for (ifhdr_scan = if_header;
-	 ifhdr_scan != NULL;
-	 ifhdr_scan = ifhdr_scan->next) {
-
-	/* DBG2("uri=<%s>  if_uri=<%s>", uri, ifhdr_scan->uri ? ifhdr_scan->uri : "(no uri)"); */
-
-	if (ifhdr_scan->uri != NULL
-	    && (uri_len != ifhdr_scan->uri_len
-		|| memcmp(uri, ifhdr_scan->uri, uri_len) != 0)) {
-	    /*
-	    ** A tagged-list's URI doesn't match this resource's URI.
-	    ** Skip to the next state_list to see if it will match.
-	    */
-	    continue;
-	}
-
-	/* this state_list applies to this resource */
-
-	/*
-	** ### only one state_list should ever apply! a no-tag, or a tagged
-	** ### where S9.4.2 states only one can match.
-	**
-	** ### revamp this code to loop thru ifhdr_scan until we find the
-	** ### matching state_list. process it. stop.
-	*/
-	++num_that_apply;
-
-	/* To succeed, resource must match *all* of the states
-	 * specified in the state_list.
-	 */
-	for (state_list = ifhdr_scan->state;
-	     state_list != NULL;
-	     state_list = state_list->next) {
-
-	    switch(state_list->type) {
-	    case dav_if_etag:
-	    {
-		int mismatch = strcmp(state_list->etag, etag);
-
-		if (state_list->condition == DAV_IF_COND_NORMAL && mismatch) {
-		    /*
-		    ** The specified entity-tag does not match the
-		    ** entity-tag on the resource. This state_list is
-		    ** not going to match. Bust outta here.
-		    */
-		    reason =
-			"an entity-tag was specified, but the resource's "
-			"actual ETag does not match.";
-		    goto state_list_failed;
-		}
-		else if (state_list->condition == DAV_IF_COND_NOT
-			 && !mismatch) {
-		    /*
-		    ** The specified entity-tag DOES match the
-		    ** entity-tag on the resource. This state_list is
-		    ** not going to match. Bust outta here.
-		    */
-		    reason =
-			"an entity-tag was specified using the \"Not\" form, "
-			"but the resource's actual ETag matches the provided "
-			"entity-tag.";
-		    goto state_list_failed;
-		}
-		break;
-	    }
-
-	    case dav_if_opaquelock:
-		if (lockdb == NULL) {
-		    if (state_list->condition == DAV_IF_COND_NOT) {
-			/* the locktoken is definitely not there! (success) */
-			continue;
-		    }
-
-		    /* condition == DAV_IF_COND_NORMAL */
-
-		    /*
-		    ** If no lockdb is provided, then validation fails for
-		    ** this state_list (NORMAL means we were supposed to
-		    ** find the token, which we obviously cannot do without
-		    ** a lock database).
-		    **
-		    ** Go and try the next state list.
-		    */
-		    reason =
-			"a State-token was supplied, but a lock database "
-			"is not available for to provide the required lock.";
-		    goto state_list_failed;
-		}
-
-		/* Resource validation 'fails' if:
-		 *    ANY  of the lock->locktokens match
-		 *         a NOT state_list->locktoken,
-		 * OR
-		 *    NONE of the lock->locktokens match
-		 *         a NORMAL state_list->locktoken.
-		 */
-		num_matched = 0;
-		for (lock = lock_list; lock != NULL; lock = lock->next) {
-
-		    /*
-		    DBG2("compare: rsrc=%s  ifhdr=%s",
-			 (*locks_hooks->format_locktoken)(p, lock->locktoken),
-			 (*locks_hooks->format_locktoken)(p, state_list->locktoken));
-		    */
-
-		    /* nothing to do if the locktokens do not match. */
-		    if ((*locks_hooks->compare_locktoken)(state_list->locktoken, lock->locktoken)) {
-			continue;
-		    }
-
-		    /*
-		    ** We have now matched up one of the resource's locktokens
-		    ** to a locktoken in a State-token in the If: header.
-		    ** Note this fact, so that we can pass the overall
-		    ** requirement of seeing at least one of the resource's
-		    ** locktokens.
-		    */
-		    seen_locktoken = 1;
-
-		    if (state_list->condition == DAV_IF_COND_NOT) {
-			/*
-			** This state requires that the specified locktoken
-			** is NOT present on the resource. But we just found
-			** it. There is no way this state-list can now
-			** succeed, so go try another one.
-			*/
-			reason =
-			    "a State-token was supplied, which used a "
-			    "\"Not\" condition. The State-token was found "
-			    "in the locks on this resource";
-			goto state_list_failed;
-		    }
-
-		    /* condition == DAV_IF_COND_NORMAL */
-
-                    /* Validate auth_user:  If an authenticated user created
-                    ** the lock, only the same user may submit that locktoken
-                    ** to manipulate a resource.
-                    */
-                    if (lock->auth_user && 
-                        (!r->user ||
-                         strcmp(lock->auth_user, r->user))) {
-                        const char *errmsg;
-
-                        errmsg = apr_pstrcat(p, "User \"",
-                                            r->user, 
-                                            "\" submitted a locktoken created "
-                                            "by user \"",
-                                            lock->auth_user, "\".", NULL);
-                        return dav_new_error(p, HTTP_UNAUTHORIZED, 0, errmsg);
-                    }
-
-		    /*
-		    ** We just matched a specified State-Token to one of the
-		    ** resource's locktokens.
-		    **
-		    ** Break out of the lock scan -- we only needed to find
-		    ** one match (actually, there shouldn't be any other
-		    ** matches in the lock list).
-		    */
-		    num_matched = 1;
-		    break;
-		}
-
-		if (num_matched == 0
-		    && state_list->condition == DAV_IF_COND_NORMAL) {
-		    /*
-		    ** We had a NORMAL state, meaning that we should have
-		    ** found the State-Token within the locks on this
-		    ** resource. We didn't, so this state_list must fail.
-		    */
-		    reason =
-			"a State-token was supplied, but it was not found "
-			"in the locks on this resource.";
-		    goto state_list_failed;
-		}
-
-		break;
-
-	    } /* switch */
-	} /* foreach ( state_list ) */
-
-	/*
-	** We've checked every state in this state_list and none of them
-	** have failed. Since all of them succeeded, then we have a matching
-	** state list and we may be done.
-	**
-	** The next requirement is that we have seen one of the resource's
-	** locktokens (if any). If we have, then we can just exit. If we
-	** haven't, then we need to keep looking.
-	*/
-	if (seen_locktoken) {
-	    /* woo hoo! */
-	    return NULL;
-	}
-
-	/*
-	** Haven't seen one. Let's break out of the search and just look
-	** for a matching locktoken.
-	*/
-	break;
-
-	/*
-	** This label is used when we detect that a state_list is not
-	** going to match this resource. We bust out and try the next
-	** state_list.
-	*/
-      state_list_failed:
-	;
-
-    } /* foreach ( ifhdr_scan ) */
-
-    /*
-    ** The above loop exits for one of two reasons:
-    **   1) a state_list matched and seen_locktoken is false.
-    **   2) all if_header structures were scanned, without (1) occurring
-    */
-
-    if (ifhdr_scan == NULL) {
-	/*
-	** We finished the loop without finding any matching state lists.
-	*/
-
-	/*
-	** If none of the state_lists apply to this resource, then we
-	** may have succeeded. Note that this scenario implies a
-	** tagged-list with no matching state_lists. If the If: header
-	** was a no-tag-list, then it would have applied to this resource.
-	**
-	** S9.4.2 states that when no state_lists apply, then the header
-	** should be ignored.
-	**
-	** If we saw one of the resource's locktokens, then we're done.
-	** If we did not see a locktoken, then we fail.
-	*/
-	if (num_that_apply == 0) {
-	    if (seen_locktoken)
-		return NULL;
-
-	    /*
-	    ** We may have aborted the scan before seeing the locktoken.
-	    ** Rescan the If: header to see if we can find the locktoken
-	    ** somewhere.
-            **
-            ** Note that seen_locktoken == 0 implies lock_list != NULL
-            ** which implies locks_hooks != NULL.
-	    */
-	    if (dav_find_submitted_locktoken(if_header, lock_list,
-					     locks_hooks)) {
-		/*
-		** We found a match! We're set... none of the If: header
-		** assertions apply (implicit success), and the If: header
-		** specified the locktoken somewhere. We're done.
-		*/
-		return NULL;
-	    }
-
-	    return dav_new_error(p, HTTP_LOCKED, 0 /* error_id */,
-				 "This resource is locked and the \"If:\" "
-				 "header did not specify one of the "
-				 "locktokens for this resource's lock(s).");
-	}
-	/* else: one or more state_lists were applicable, but failed. */
-
-	/*
-	** If the dummy_header did not match, then they specified an
-	** incorrect token in the Lock-Token header. Forget whether the
-	** If: statement matched or not... we'll tell them about the
-	** bad Lock-Token first. That is considered a 400 (Bad Request).
-	*/
-	if (if_header->dummy_header) {
-	    return dav_new_error(p, HTTP_BAD_REQUEST, 0,
-				 "The locktoken specified in the "
-				 "\"Lock-Token:\" header did not specify one "
-				 "of this resource's locktoken(s).");
-	}
-
-	if (reason == NULL) {
-	    return dav_new_error(p, HTTP_PRECONDITION_FAILED, 0,
-				 "The preconditions specified by the \"If:\" "
-				 "header did not match this resource.");
-	}
-
-	return dav_new_error(p, HTTP_PRECONDITION_FAILED, 0,
-			     apr_psprintf(p,
-					 "The precondition(s) specified by "
-					 "the \"If:\" header did not match "
-					 "this resource. At least one "
-					 "failure is because: %s", reason));
-    }
-
-    /* assert seen_locktoken == 0 */
-
-    /*
-    ** ifhdr_scan != NULL implies we found a matching state_list.
-    **
-    ** Since we're still here, it also means that we have not yet found
-    ** one the resource's locktokens in the If: header.
-    **
-    ** Scan all the if_headers and states looking for one of this
-    ** resource's locktokens. Note that we need to go back and scan them
-    ** all -- we may have aborted a scan with a failure before we saw a
-    ** matching token.
-    **
-    ** Note that seen_locktoken == 0 implies lock_list != NULL which implies
-    ** locks_hooks != NULL.
-    */
-    if (dav_find_submitted_locktoken(if_header, lock_list, locks_hooks)) {
-	/*
-	** We found a match! We're set... we have a matching state list,
-	** and the If: header specified the locktoken somewhere. We're done.
-	*/
-	return NULL;
-    }
-
-    /*
-    ** We had a matching state list, but the user agent did not specify one
-    ** of this resource's locktokens. Tell them so.
-    **
-    ** Note that we need to special-case the message on whether a "dummy"
-    ** header exists. If it exists, yet we didn't see a needed locktoken,
-    ** then that implies the dummy header (Lock-Token header) did NOT
-    ** specify one of this resource's locktokens. (this implies something
-    ** in the real If: header matched)
-    **
-    ** We want to note the 400 (Bad Request) in favor of a 423 (Locked).
-    */
-    if (if_header->dummy_header) {
-	return dav_new_error(p, HTTP_BAD_REQUEST, 0,
-			     "The locktoken specified in the "
-			     "\"Lock-Token:\" header did not specify one "
-			     "of this resource's locktoken(s).");
-    }
-
-    return dav_new_error(p, HTTP_LOCKED, 1 /* error_id */,
-			 "This resource is locked and the \"If:\" header "
-			 "did not specify one of the "
-			 "locktokens for this resource's lock(s).");
-}
-
-/* dav_validate_walker:  Walker callback function to validate resource state */
-static dav_error * dav_validate_walker(dav_walk_resource *wres, int calltype)
-{
-    dav_walker_ctx *ctx = wres->walk_ctx;
-    dav_error *err;
-
-    if ((err = dav_validate_resource_state(ctx->w.pool, wres->resource,
-					   ctx->w.lockdb,
-					   ctx->if_header, ctx->flags,
-					   &ctx->work_buf, ctx->r)) == NULL) {
-	/* There was no error, so just bug out. */
-	return NULL;
-    }
-
-    /*
-    ** If we have a serious server error, or if the request itself failed,
-    ** then just return error (not a multistatus).
-    */
-    if (ap_is_HTTP_SERVER_ERROR(err->status)
-        || (*wres->resource->hooks->is_same_resource)(wres->resource,
-                                                      ctx->w.root)) {
-	/* ### maybe push a higher-level description? */
-	return err;
-    }
-
-    /* associate the error with the current URI */
-    dav_add_response(wres, err->status, NULL);
-
-    return NULL;
-}
-
-/*
-** dav_validate_request:  Validate if-headers (and check for locks) on:
-**    (1) r->filename @ depth;
-**    (2) Parent of r->filename if check_parent == 1
-**
-** The check of parent should be done when it is necessary to verify that
-** the parent collection will accept a new member (ie current resource
-** state is null).
-**
-** Return OK on successful validation.
-** On error, return appropriate HTTP_* code, and log error. If a multi-stat
-** error is necessary, response will point to it, else NULL.
-*/
-dav_error * dav_validate_request(request_rec *r, dav_resource *resource,
-				 int depth, dav_locktoken *locktoken,
-				 dav_response **response, int flags,
-                                 dav_lockdb *lockdb)
-{
-    dav_error *err;
-    int result;
-    dav_if_header *if_header;
-    int lock_db_opened_locally = 0;
-    const dav_hooks_locks *locks_hooks = DAV_GET_HOOKS_LOCKS(r);
-    const dav_hooks_repository *repos_hooks = resource->hooks;
-    dav_buffer work_buf = { 0 };
-    dav_response *new_response;
-
-#if DAV_DEBUG
-    if (depth && response == NULL) {
-	/*
-	** ### bleck. we can't return errors for other URIs unless we have
-        ** ### a "response" ptr.
-	*/
-	return dav_new_error(r->pool, HTTP_INTERNAL_SERVER_ERROR, 0,
-			     "DESIGN ERROR: dav_validate_request called "
-                             "with depth>0, but no response ptr.");
-    }
-#endif
-
-    if (response != NULL)
-	*response = NULL;
-
-    /* Do the standard checks for conditional requests using 
-     * If-..-Since, If-Match etc */
-    if ((result = ap_meets_conditions(r)) != OK) {
-	/* ### fix this up... how? */
-	return dav_new_error(r->pool, result, 0, NULL);
-    }
-
-    /* always parse (and later process) the If: header */
-    if ((err = dav_process_if_header(r, &if_header)) != NULL) {
-	/* ### maybe add higher-level description */
-	return err;
-    }
-
-    /* If a locktoken was specified, create a dummy if_header with which
-     * to validate resources.  In the interim, figure out why DAV uses
-     * locktokens in an if-header without a Lock-Token header to refresh
-     * locks, but a Lock-Token header without an if-header to remove them.
-     */
-    if (locktoken != NULL) {
-	dav_if_header *ifhdr_new;
-
-	ifhdr_new = apr_pcalloc(r->pool, sizeof(*ifhdr_new));
-	ifhdr_new->uri = resource->uri;
-	ifhdr_new->uri_len = strlen(resource->uri);
-	ifhdr_new->dummy_header = 1;
-
-	ifhdr_new->state = apr_pcalloc(r->pool, sizeof(*ifhdr_new->state));
-	ifhdr_new->state->type = dav_if_opaquelock;
-	ifhdr_new->state->condition = DAV_IF_COND_NORMAL;
-	ifhdr_new->state->locktoken = locktoken;
-
-	ifhdr_new->next = if_header;
-	if_header = ifhdr_new;
-    }
-
-    /*
-    ** If necessary, open the lock database (read-only, lazily);
-    ** the validation process may need to retrieve or update lock info.
-    ** Otherwise, assume provided lockdb is valid and opened rw.
-    */
-    if (lockdb == NULL) {
-        if (locks_hooks != NULL) {
-            if ((err = (*locks_hooks->open_lockdb)(r, 0, 0, &lockdb)) != NULL) {
-	        /* ### maybe insert higher-level comment */
-	        return err;
-            }
-            lock_db_opened_locally = 1;
-        }
-    }
-
-    /* (1) Validate the specified resource, at the specified depth */
-    if (resource->exists && depth > 0) {
-        dav_walker_ctx ctx = { { 0 } };
-        dav_response *multi_status;
-
-	ctx.w.walk_type = DAV_WALKTYPE_NORMAL;
-	ctx.w.func = dav_validate_walker;
-        ctx.w.walk_ctx = &ctx;
-	ctx.w.pool = r->pool;
-        ctx.w.root = resource;
-
-	ctx.if_header = if_header;
-	ctx.r = r;
-        ctx.flags = flags;
-
-	if (lockdb != NULL) {
-	    ctx.w.lockdb = lockdb;
-	    ctx.w.walk_type |= DAV_WALKTYPE_LOCKNULL;
-	}
-
-	err = (*repos_hooks->walk)(&ctx.w, DAV_INFINITY, &multi_status);
-	if (err == NULL) {
-            *response = multi_status;;
-	}
-        /* else: implies a 5xx status code occurred. */
-    }
-    else {
-	err = dav_validate_resource_state(r->pool, resource, lockdb,
-					  if_header, flags, &work_buf, r);
-    }
-
-    /* (2) Validate the parent resource if requested */
-    if (err == NULL && (flags & DAV_VALIDATE_PARENT)) {
-        dav_resource *parent_resource;
-
-        err = (*repos_hooks->get_parent_resource)(resource, &parent_resource);
-
-	if (err == NULL && parent_resource == NULL) {
-	    err = dav_new_error(r->pool, HTTP_FORBIDDEN, 0,
-				"Cannot access parent of repository root.");
-	}
-	else if (err == NULL) {
-	    err = dav_validate_resource_state(r->pool, parent_resource, lockdb,
-					      if_header,
-                                              flags | DAV_VALIDATE_IS_PARENT,
-                                              &work_buf, r);
-	    
-	    /*
-	    ** This error occurred on the parent resource. This implies that
-	    ** we have to create a multistatus response (to report the error
-	    ** against a URI other than the Request-URI). "Convert" this error
-	    ** into a multistatus response.
-	    */
-	    if (err != NULL) {
-		new_response = apr_pcalloc(r->pool, sizeof(*new_response));
-		
-		new_response->href = parent_resource->uri;
-		new_response->status = err->status;
-		new_response->desc =
-		    "A validation error has occurred on the parent resource, "
-		    "preventing the operation on the resource specified by "
-		    "the Request-URI.";
-                if (err->desc != NULL) {
-                    new_response->desc = apr_pstrcat(r->pool,
-                                                    new_response->desc,
-                                                    " The error was: ",
-                                                    err->desc, NULL);
-                }
-		
-		/* assert: DAV_VALIDATE_PARENT implies response != NULL */
-		new_response->next = *response;
-		*response = new_response;
-		
-		err = NULL;
-	    }
-	}
-    }
-
-    if (lock_db_opened_locally)
-        (*locks_hooks->close_lockdb)(lockdb);
-
-    /*
-    ** If we don't have a (serious) error, and we have multistatus responses,
-    ** then we need to construct an "error". This error will be the overall
-    ** status returned, and the multistatus responses will go into its body.
-    **
-    ** For certain methods, the overall error will be a 424. The default is
-    ** to construct a standard 207 response.
-    */
-    if (err == NULL && response != NULL && *response != NULL) {
-        ap_text *propstat = NULL;
-
-        if ((flags & DAV_VALIDATE_USE_424) != 0) {
-            /* manufacture a 424 error to hold the multistatus response(s) */
-            return dav_new_error(r->pool, HTTP_FAILED_DEPENDENCY, 0,
-                                 "An error occurred on another resource, "
-                                 "preventing the requested operation on "
-                                 "this resource.");
-        }
-
-        /*
-        ** Whatever caused the error, the Request-URI should have a 424
-        ** associated with it since we cannot complete the method.
-        **
-        ** For a LOCK operation, insert an empty DAV:lockdiscovery property.
-        ** For other methods, return a simple 424.
-        */
-        if ((flags & DAV_VALIDATE_ADD_LD) != 0) {
-            propstat = apr_pcalloc(r->pool, sizeof(*propstat));
-            propstat->text =
-                "<D:propstat>" DEBUG_CR
-                "<D:prop><D:lockdiscovery/></D:prop>" DEBUG_CR
-                "<D:status>HTTP/1.1 424 Failed Dependency</D:status>" DEBUG_CR
-                "</D:propstat>" DEBUG_CR;
-        }
-
-        /* create the 424 response */
-        new_response = apr_pcalloc(r->pool, sizeof(*new_response));
-        new_response->href = resource->uri;
-        new_response->status = HTTP_FAILED_DEPENDENCY;
-        new_response->propresult.propstats = propstat;
-        new_response->desc =
-            "An error occurred on another resource, preventing the "
-            "requested operation on this resource.";
-
-        new_response->next = *response;
-        *response = new_response;
-
-        /* manufacture a 207 error for the multistatus response(s) */
-        return dav_new_error(r->pool, HTTP_MULTI_STATUS, 0,
-                             "Error(s) occurred on resources during the "
-                             "validation process.");
-    }
-
-    return err;
-}
-
-/* dav_get_locktoken_list:
- *
- * Sets ltl to a locktoken_list of all positive locktokens in header,
- * else NULL if no If-header, or no positive locktokens.
- */
-dav_error * dav_get_locktoken_list(request_rec *r, dav_locktoken_list **ltl) 
-{
-    dav_error *err;
-    dav_if_header *if_header;
-    dav_if_state_list *if_state;
-    dav_locktoken_list *lock_token = NULL;		
-	
-    *ltl = NULL;
-
-    if ((err = dav_process_if_header(r, &if_header)) != NULL) {
-	/* ### add a higher-level description? */
-	return err;
-    }
- 			
-    while (if_header != NULL) {
-	if_state = if_header->state;	/* Begining of the if_state linked list */
-	while (if_state != NULL)	{
-	    if (if_state->condition == DAV_IF_COND_NORMAL
-	        && if_state->type == dav_if_opaquelock) {
-		lock_token = apr_pcalloc(r->pool, sizeof(dav_locktoken_list));
-		lock_token->locktoken = if_state->locktoken;
-		lock_token->next = *ltl;
-		*ltl = lock_token;
-	    }
-	    if_state = if_state->next; 
-	}
-	if_header = if_header->next;
-    }
-    if (*ltl == NULL) {
-	/* No nodes added */
-	return dav_new_error(r->pool, HTTP_BAD_REQUEST, DAV_ERR_IF_ABSENT,
-			     "No locktokens were specified in the \"If:\" "
-			     "header, so the refresh could not be performed.");
-    }
-
-    return NULL;
-}
-
-#if 0 /* not needed right now... */
-
-static const char *strip_white(const char *s, apr_pool_t *pool)
-{
-    apr_size_t idx;
-
-    /* trim leading whitespace */
-    while (apr_isspace(*s))     /* assume: return false for '\0' */
-        ++s;
-
-    /* trim trailing whitespace */
-    idx = strlen(s) - 1;
-    if (apr_isspace(s[idx])) {
-        char *s2 = apr_pstrdup(pool, s);
-
-        while (apr_isspace(s2[idx]) && idx > 0)
-            --idx;
-        s2[idx + 1] = '\0';
-        return s2;
-    }
-
-    return s;
-}
-#endif
-
-#define DAV_LABEL_HDR "Label"
-
-/* dav_add_vary_header
- *
- * If there were any headers in the request which require a Vary header
- * in the response, add it.
- */
-void dav_add_vary_header(request_rec *in_req,
-			 request_rec *out_req,
-			 const dav_resource *resource)
-{
-    const dav_hooks_vsn *vsn_hooks = DAV_GET_HOOKS_VSN(in_req);
-
-    /* ### this is probably all wrong... I think there is a function in
-       ### the Apache API to add things to the Vary header. need to check */
-
-    /* Only versioning headers require a Vary response header,
-     * so only do this check if there is a versioning provider */
-    if (vsn_hooks != NULL) {
-	const char *target = apr_table_get(in_req->headers_in, DAV_LABEL_HDR);
-	const char *vary = apr_table_get(out_req->headers_out, "Vary");
-
-        /* If Target-Selector specified, add it to the Vary header */
-	if (target != NULL) {
-	    if (vary == NULL)
-		vary = DAV_LABEL_HDR;
-	    else
-		vary = apr_pstrcat(out_req->pool, vary, "," DAV_LABEL_HDR,
-                                   NULL);
-
-	    apr_table_setn(out_req->headers_out, "Vary", vary);
-	}
-    }
-}
-
-/* dav_can_auto_checkout
- *
- * Determine whether auto-checkout is enabled for a resource.
- * r - the request_rec
- * resource - the resource
- * auto_version - the value of the auto_versionable hook for the resource
- * lockdb - pointer to lock database (opened if necessary)
- * auto_checkout - set to 1 if auto-checkout enabled
- */
-static dav_error * dav_can_auto_checkout(
-    request_rec *r,                                         
-    dav_resource *resource,
-    dav_auto_version auto_version,
-    dav_lockdb **lockdb,
-    int *auto_checkout)
-{
-    dav_error *err;
-    dav_lock *lock_list;
-
-    *auto_checkout = 0;
-
-    if (auto_version == DAV_AUTO_VERSION_ALWAYS) {
-        *auto_checkout = 1;
-    }
-    else if (auto_version == DAV_AUTO_VERSION_LOCKED) {
-        if (*lockdb == NULL) {
-            const dav_hooks_locks *locks_hooks = DAV_GET_HOOKS_LOCKS(r);
-
-            if (locks_hooks == NULL) {
-                return dav_new_error(r->pool, HTTP_INTERNAL_SERVER_ERROR, 0,
-                                     "Auto-checkout is only enabled for locked resources, "
-                                     "but there is no lock provider.");
-            }
-
-            if ((err = (*locks_hooks->open_lockdb)(r, 0, 0, lockdb)) != NULL) {
-                return dav_push_error(r->pool, HTTP_INTERNAL_SERVER_ERROR, 0,
-                                      "Cannot open lock database to determine "
-                                      "auto-versioning behavior.",
-                                      err);
-            }
-        }
-
-        if ((err = dav_lock_query(*lockdb, resource, &lock_list)) != NULL) {
-	    return dav_push_error(r->pool,
-				  HTTP_INTERNAL_SERVER_ERROR, 0,
-				  "The locks could not be queried for "
-				  "determining auto-versioning behavior.",
-				  err);
-        }
-
-        if (lock_list != NULL)
-            *auto_checkout = 1;
-    }
-
-    return NULL;
-}
-
-/* see mod_dav.h for docco */
-dav_error *dav_auto_checkout(
-    request_rec *r,
-    dav_resource *resource,
-    int parent_only,
-    dav_auto_version_info *av_info)
-{
-    const dav_hooks_vsn *vsn_hooks = DAV_GET_HOOKS_VSN(r);
-    dav_lockdb *lockdb = NULL;
-    dav_error *err = NULL;
-
-    /* Initialize results */
-    memset(av_info, 0, sizeof(*av_info));
-
-    /* if no versioning provider, just return */
-    if (vsn_hooks == NULL)
-        return NULL;
-
-    /* check parent resource if requested or if resource must be created */
-    if (!resource->exists || parent_only) {
-	dav_resource *parent;
-
-        if ((err = (*resource->hooks->get_parent_resource)(resource,
-                                                           &parent)) != NULL)
-            goto done;
-
-        if (parent == NULL || !parent->exists) {
-	    err = dav_new_error(r->pool, HTTP_CONFLICT, 0,
-	                        apr_psprintf(r->pool,
-		                            "Missing one or more intermediate "
-                                            "collections. Cannot create resource %s.",
-			                    ap_escape_html(r->pool, resource->uri)));
-            goto done;
-        }
-
-        av_info->parent_resource = parent;
-
-        /* if parent versioned and not checked out, see if it can be */
-	if (parent->versioned && !parent->working) {
-            int checkout_parent;
-
-            if ((err = dav_can_auto_checkout(r, parent,
-                                             (*vsn_hooks->auto_versionable)(parent),
-                                             &lockdb, &checkout_parent))
-                != NULL) {
-                goto done;
-            }
-
-            if (!checkout_parent) {
-		err = dav_new_error(r->pool, HTTP_CONFLICT, 0,
-		                    "<DAV:cannot-modify-checked-in-parent>");
-                goto done;
-            }
-
-            /* Try to checkout the parent collection.
-             * Note that auto-versioning can only be applied to a version selector,
-             * so no separate working resource will be created.
-             */
-	    if ((err = (*vsn_hooks->checkout)(parent, 1 /*auto_checkout*/,
-                                              0, 0, 0, NULL, NULL))
-                != NULL)
-            {
-		err = dav_push_error(r->pool, HTTP_CONFLICT, 0,
-		                     apr_psprintf(r->pool,
-				                 "Unable to auto-checkout parent collection. "
-				                 "Cannot create resource %s.",
-				                 ap_escape_html(r->pool, resource->uri)),
-                                     err);
-                goto done;
-	    }
-
-            /* remember that parent was checked out */
-            av_info->parent_checkedout = 1;
-	}
-    }
-
-    /* if only checking parent, we're done */
-    if (parent_only)
-        goto done;
-
-    /* if creating a new resource, see if it should be version-controlled */
-    if (!resource->exists
-        && (*vsn_hooks->auto_versionable)(resource) == DAV_AUTO_VERSION_ALWAYS) {
-
-	if ((err = (*vsn_hooks->vsn_control)(resource, NULL)) != NULL) {
-	    err = dav_push_error(r->pool, HTTP_CONFLICT, 0,
-	                         apr_psprintf(r->pool,
-		                             "Unable to create versioned resource %s.",
-			                     ap_escape_html(r->pool, resource->uri)),
-                                 err);
-            goto done;
-	}
-
-        /* remember that resource was created */
-        av_info->resource_versioned = 1;
-    }
-
-    /* if resource is versioned, make sure it is checked out */
-    if (resource->versioned && !resource->working) {
-        int checkout_resource;
-
-        if ((err = dav_can_auto_checkout(r, resource,
-                                         (*vsn_hooks->auto_versionable)(resource),
-                                         &lockdb, &checkout_resource)) != NULL) {
-            goto done;
-        }
-
-        if (!checkout_resource) {
-	    err = dav_new_error(r->pool, HTTP_CONFLICT, 0,
-		                "<DAV:cannot-modify-version-controlled-content>");
-            goto done;
-        }
-
-        /* Auto-versioning can only be applied to version selectors, so
-         * no separate working resource will be created. */
-	if ((err = (*vsn_hooks->checkout)(resource, 1 /*auto_checkout*/,
-                                          0, 0, 0, NULL, NULL))
-            != NULL)
-        {
-            err = dav_push_error(r->pool, HTTP_CONFLICT, 0,
-	                         apr_psprintf(r->pool,
-		                             "Unable to checkout resource %s.",
-			                     ap_escape_html(r->pool, resource->uri)),
-                                 err);
-            goto done;
-	}
-
-        /* remember that resource was checked out */
-        av_info->resource_checkedout = 1;
-    }
-
-done:
-
-    /* make sure lock database is closed */
-    if (lockdb != NULL)
-        (*lockdb->hooks->close_lockdb)(lockdb);
-
-    /* if an error occurred, undo any auto-versioning operations already done */
-    if (err != NULL) {
-        dav_auto_checkin(r, resource, 1 /*undo*/, 0 /*unlock*/, av_info);
-        return err;
-    }
-
-    return NULL;
-}
-
-/* see mod_dav.h for docco */
-dav_error *dav_auto_checkin(
-    request_rec *r,
-    dav_resource *resource,
-    int undo,
-    int unlock,
-    dav_auto_version_info *av_info)
-{
-    const dav_hooks_vsn *vsn_hooks = DAV_GET_HOOKS_VSN(r);
-    dav_error *err = NULL;
-    dav_auto_version auto_version;
-
-    /* If no versioning provider, this is a no-op */
-    if (vsn_hooks == NULL)
-        return NULL;
-
-    /* If undoing auto-checkouts, then do uncheckouts */
-    if (undo) {
-        if (resource != NULL) {
-            if (av_info->resource_checkedout) {
-                if ((err = (*vsn_hooks->uncheckout)(resource)) != NULL) {
-                    return dav_push_error(r->pool, HTTP_INTERNAL_SERVER_ERROR, 0,
-	                                  apr_psprintf(r->pool,
-		                                      "Unable to undo auto-checkout "
-                                                      "of resource %s.",
-			                              ap_escape_html(r->pool, resource->uri)),
-                                          err);
-                }
-            }
-
-            if (av_info->resource_versioned) {
-	        dav_response *response;
-
-	        /* ### should we do anything with the response? */
-                if ((err = (*resource->hooks->remove_resource)(resource,
-							       &response)) != NULL) {
-                    return dav_push_error(r->pool, HTTP_INTERNAL_SERVER_ERROR, 0,
-	                                  apr_psprintf(r->pool,
-			                              "Unable to undo auto-version-control "
-                                                      "of resource %s.",
-			                              ap_escape_html(r->pool, resource->uri)),
-                                          err);
-                }
-            }
-        }
-
-        if (av_info->parent_resource != NULL && av_info->parent_checkedout) {
-            if ((err = (*vsn_hooks->uncheckout)(av_info->parent_resource)) != NULL) {
-	        return dav_push_error(r->pool, HTTP_INTERNAL_SERVER_ERROR, 0,
-	                              apr_psprintf(r->pool,
-		                                  "Unable to undo auto-checkout "
-                                                  "of parent collection %s.",
-			                          ap_escape_html(r->pool, av_info->parent_resource->uri)),
-				      err);
-	    }
-        }
-
-        return NULL;
-    }
-
-    /* If the resource was checked out, and auto-checkin is enabled,
-     * then check it in.
-     */
-    if (resource != NULL && resource->working
-        && (unlock || av_info->resource_checkedout)) {
-
-        auto_version = (*vsn_hooks->auto_versionable)(resource);
-
-        if (auto_version == DAV_AUTO_VERSION_ALWAYS ||
-            (unlock && (auto_version == DAV_AUTO_VERSION_LOCKED))) {
-
-            if ((err = (*vsn_hooks->checkin)(resource,
-                                             0 /*keep_checked_out*/, NULL))
-                != NULL) {
-                return dav_push_error(r->pool, HTTP_INTERNAL_SERVER_ERROR, 0,
-	                              apr_psprintf(r->pool,
-			                          "Unable to auto-checkin resource %s.",
-			                          ap_escape_html(r->pool, resource->uri)),
-				      err);
-            }
-        }
-    }
-
-    /* If parent resource was checked out, and auto-checkin is enabled,
-     * then check it in.
-     */
-    if (av_info->parent_resource != NULL && av_info->parent_resource->working
-        && (unlock || av_info->parent_checkedout)) {
-
-        auto_version = (*vsn_hooks->auto_versionable)(av_info->parent_resource);
-
-        if (auto_version == DAV_AUTO_VERSION_ALWAYS ||
-            (unlock && (auto_version == DAV_AUTO_VERSION_LOCKED))) {
-
-	    if ((err = (*vsn_hooks->checkin)(av_info->parent_resource,
-                                             0 /*keep_checked_out*/, NULL))
-                != NULL) {
-	        return dav_push_error(r->pool, HTTP_INTERNAL_SERVER_ERROR, 0,
-	                              apr_psprintf(r->pool,
-			                          "Unable to auto-checkin parent collection %s.",
-			                          ap_escape_html(r->pool, av_info->parent_resource->uri)),
-				                  err);
-	    }
-        }
-    }
-
-    return NULL;
-}
diff --git a/modules/dav/main/util_lock.c b/modules/dav/main/util_lock.c
deleted file mode 100644
index 052d39b..0000000
--- a/modules/dav/main/util_lock.c
+++ /dev/null
@@ -1,826 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-/*
-** DAV repository-independent lock functions
-*/
-
-#include "apr.h"
-#include "apr_strings.h"
-
-#if APR_HAVE_STDIO_H
-#include <stdio.h>              /* for sprintf() */
-#endif
-
-#include "mod_dav.h"
-#include "http_log.h"
-#include "http_config.h"
-#include "http_protocol.h"
-#include "http_core.h"
-
-
-/* ---------------------------------------------------------------
-**
-** Property-related lock functions
-**
-*/
-
-/*
-** dav_lock_get_activelock:  Returns a <lockdiscovery> containing
-**    an activelock element for every item in the lock_discovery tree
-*/
-const char *dav_lock_get_activelock(request_rec *r, dav_lock *lock,
-				    dav_buffer *pbuf)
-{
-    dav_lock *lock_scan;
-    const dav_hooks_locks *hooks = DAV_GET_HOOKS_LOCKS(r);
-    int count = 0;
-    dav_buffer work_buf = { 0 };
-    apr_pool_t *p = r->pool;
-
-    /* If no locks or no lock provider, there are no locks */
-    if (lock == NULL || hooks == NULL) {
-	/*
-	** Since resourcediscovery is defined with (activelock)*, 
-	** <D:activelock/> shouldn't be necessary for an empty lock.
-	*/
-	return "";
-    }
-
-    /*
-    ** Note: it could be interesting to sum the lengths of the owners
-    **       and locktokens during this loop. However, the buffer
-    **       mechanism provides some rough padding so that we don't
-    **       really need to have an exact size. Further, constructing
-    **       locktoken strings could be relatively expensive.
-    */
-    for (lock_scan = lock; lock_scan != NULL; lock_scan = lock_scan->next)
-	count++;
-
-    /* if a buffer was not provided, then use an internal buffer */
-    if (pbuf == NULL)
-	pbuf = &work_buf;
-
-    /* reset the length before we start appending stuff */
-    pbuf->cur_len = 0;
-
-    /* prep the buffer with a "good" size */
-    dav_check_bufsize(p, pbuf, count * 300);
-
-    for (; lock != NULL; lock = lock->next) {
-	char tmp[100];
-
-#if DAV_DEBUG
-	if (lock->rectype == DAV_LOCKREC_INDIRECT_PARTIAL) {
-	    /* ### crap. design error */
-	    dav_buffer_append(p, pbuf,
-			      "DESIGN ERROR: attempted to product an "
-			      "activelock element from a partial, indirect "
-			      "lock record. Creating an XML parsing error "
-			      "to ease detection of this situation: <");
-	}
-#endif
-
-	dav_buffer_append(p, pbuf, "<D:activelock>" DEBUG_CR "<D:locktype>");
-	switch (lock->type) {
-	case DAV_LOCKTYPE_WRITE:
-	    dav_buffer_append(p, pbuf, "<D:write/>");
-	    break;
-	default:
-	    /* ### internal error. log something? */
-	    break;
-	}
-	dav_buffer_append(p, pbuf, "</D:locktype>" DEBUG_CR "<D:lockscope>");
-	switch (lock->scope) {
-	case DAV_LOCKSCOPE_EXCLUSIVE:
-	    dav_buffer_append(p, pbuf, "<D:exclusive/>");
-	    break;
-	case DAV_LOCKSCOPE_SHARED:
-	    dav_buffer_append(p, pbuf, "<D:shared/>");
-	    break;
-	default:
-	    /* ### internal error. log something? */
-	    break;
-	}
-	dav_buffer_append(p, pbuf, "</D:lockscope>" DEBUG_CR);
-	sprintf(tmp, "<D:depth>%s</D:depth>" DEBUG_CR,
-		lock->depth == DAV_INFINITY ? "infinity" : "0");
-	dav_buffer_append(p, pbuf, tmp);
-
-	if (lock->owner) {
-	    /*
-	    ** This contains a complete, self-contained <DAV:owner> element,
-	    ** with namespace declarations and xml:lang handling. Just drop
-	    ** it in.
-	    */
-	    dav_buffer_append(p, pbuf, lock->owner);
-	}
-		
-	dav_buffer_append(p, pbuf, "<D:timeout>");
-	if (lock->timeout == DAV_TIMEOUT_INFINITE) {
-	    dav_buffer_append(p, pbuf, "Infinite");
-	}
-	else {
-	    time_t now = time(NULL);
-	    sprintf(tmp, "Second-%lu", (long unsigned int)(lock->timeout - now));
-	    dav_buffer_append(p, pbuf, tmp);
-	}
-
-	dav_buffer_append(p, pbuf,
-			  "</D:timeout>" DEBUG_CR
-			  "<D:locktoken>" DEBUG_CR
-			  "<D:href>");
-	dav_buffer_append(p, pbuf,
-			  (*hooks->format_locktoken)(p, lock->locktoken));
-	dav_buffer_append(p, pbuf,
-			  "</D:href>" DEBUG_CR
-			  "</D:locktoken>" DEBUG_CR
-			  "</D:activelock>" DEBUG_CR);
-    }
-
-    return pbuf->buf;
-}
-
-/*
-** dav_lock_parse_lockinfo:  Validates the given xml_doc to contain a
-**    lockinfo XML element, then populates a dav_lock structure
-**    with its contents.
-*/
-dav_error * dav_lock_parse_lockinfo(request_rec *r,
-				    const dav_resource *resource,
-				    dav_lockdb *lockdb,
-				    const ap_xml_doc *doc,
-				    dav_lock **lock_request)
-{
-    apr_pool_t *p = r->pool;
-    dav_error *err;
-    ap_xml_elem *child;
-    dav_lock *lock;
-
-    if (!dav_validate_root(doc, "lockinfo")) {
-	return dav_new_error(p, HTTP_BAD_REQUEST, 0,
-			     "The request body contains an unexpected "
-			     "XML root element.");
-    }
-
-    if ((err = (*lockdb->hooks->create_lock)(lockdb, resource,
-                                             &lock)) != NULL) {
-	return dav_push_error(p, err->status, 0,
-			      "Could not parse the lockinfo due to an "
-			      "internal problem creating a lock structure.",
-			      err);
-    }
-
-    lock->depth = dav_get_depth(r, DAV_INFINITY);
-    if (lock->depth == -1) {
-	return dav_new_error(p, HTTP_BAD_REQUEST, 0,
-			     "An invalid Depth header was specified.");
-    }
-    lock->timeout = dav_get_timeout(r);
-
-    /* Parse elements in the XML body */
-    for (child = doc->root->first_child; child; child = child->next) {
-	if (strcmp(child->name, "locktype") == 0
-	    && child->first_child
-	    && lock->type == DAV_LOCKTYPE_UNKNOWN) {
-	    if (strcmp(child->first_child->name, "write") == 0) {
-		lock->type = DAV_LOCKTYPE_WRITE;
-		continue;
-	    }
-	}
-	if (strcmp(child->name, "lockscope") == 0
-	    && child->first_child
-	    && lock->scope == DAV_LOCKSCOPE_UNKNOWN) {
-	    if (strcmp(child->first_child->name, "exclusive") == 0)
-		lock->scope = DAV_LOCKSCOPE_EXCLUSIVE;
-	    else if (strcmp(child->first_child->name, "shared") == 0)
-		lock->scope = DAV_LOCKSCOPE_SHARED;
-	    if (lock->scope != DAV_LOCKSCOPE_UNKNOWN)
-		continue;
-	}
-
-	if (strcmp(child->name, "owner") == 0 && lock->owner == NULL) {
-	    const char *text;
-
-	    /* quote all the values in the <DAV:owner> element */
-	    ap_xml_quote_elem(p, child);
-
-	    /*
-	    ** Store a full <DAV:owner> element with namespace definitions
-	    ** and an xml:lang definition, if applicable.
-	    */
-	    ap_xml_to_text(p, child, AP_XML_X2T_FULL_NS_LANG, doc->namespaces, 
-			   NULL, &text, NULL);
-	    lock->owner = text;
-
-	    continue;
-	}
-
-	return dav_new_error(p, HTTP_PRECONDITION_FAILED, 0,
-			     apr_psprintf(p,
-					 "The server cannot satisfy the "
-					 "LOCK request due to an unknown XML "
-					 "element (\"%s\") within the "
-					 "DAV:lockinfo element.",
-					 child->name));
-    }
-
-    *lock_request = lock;
-    return NULL;
-}
-
-/* ---------------------------------------------------------------
-**
-** General lock functions
-**
-*/
-
-/* dav_lock_walker:  Walker callback function to record indirect locks */
-static dav_error * dav_lock_walker(dav_walk_resource *wres, int calltype)
-{
-    dav_walker_ctx *ctx = wres->walk_ctx;
-    dav_error *err;
-
-    /* We don't want to set indirects on the target */
-    if ((*wres->resource->hooks->is_same_resource)(wres->resource,
-                                                   ctx->w.root))
-	return NULL;
-
-    if ((err = (*ctx->w.lockdb->hooks->append_locks)(ctx->w.lockdb,
-                                                     wres->resource, 1,
-                                                     ctx->lock)) != NULL) {
-	if (ap_is_HTTP_SERVER_ERROR(err->status)) {
-	    /* ### add a higher-level description? */
-	    return err;
-	}
-
-	/* add to the multistatus response */
-	dav_add_response(wres, err->status, NULL);
-
-	/*
-	** ### actually, this is probably wrong: we want to fail the whole
-	** ### LOCK process if something goes bad. maybe the caller should
-	** ### do a dav_unlock() (e.g. a rollback) if any errors occurred.
-	*/
-    }
-
-    return NULL;
-}
-
-/*
-** dav_add_lock:  Add a direct lock for resource, and indirect locks for
-**    all children, bounded by depth.
-**    ### assume request only contains one lock
-*/
-dav_error * dav_add_lock(request_rec *r, const dav_resource *resource,
-			 dav_lockdb *lockdb, dav_lock *lock,
-			 dav_response **response)
-{
-    dav_error *err;
-    int depth = lock->depth;
-
-    *response = NULL;
-
-    /* Requested lock can be:
-     *   Depth: 0   for null resource, existing resource, or existing collection
-     *   Depth: Inf for existing collection
-     */
-
-    /*
-    ** 2518 9.2 says to ignore depth if target is not a collection (it has
-    **   no internal children); pretend the client gave the correct depth.
-    */
-    if (!resource->collection) {
-	depth = 0;
-    }
-
-    /* In all cases, first add direct entry in lockdb */
-
-    /*
-    ** Append the new (direct) lock to the resource's existing locks.
-    **
-    ** Note: this also handles locknull resources
-    */
-    if ((err = (*lockdb->hooks->append_locks)(lockdb, resource, 0,
-                                              lock)) != NULL) {
-	/* ### maybe add a higher-level description */
-	return err;
-    }
-
-    if (depth > 0) {
-	/* Walk existing collection and set indirect locks */
-        dav_walker_ctx ctx = { { 0 } };
-        dav_response *multi_status;
-
-	ctx.w.walk_type = DAV_WALKTYPE_NORMAL | DAV_WALKTYPE_AUTH;
-	ctx.w.func = dav_lock_walker;
-        ctx.w.walk_ctx = &ctx;
-	ctx.w.pool = r->pool;
-        ctx.w.root = resource;
-	ctx.w.lockdb = lockdb;
-
-	ctx.r = r;
-	ctx.lock = lock;
-
-	err = (*resource->hooks->walk)(&ctx.w, DAV_INFINITY, &multi_status);
-	if (err != NULL) {
-	    /* implies a 5xx status code occurred. screw the multistatus */
-	    return err;
-	}
-
-	if (multi_status != NULL) {
-	    /* manufacture a 207 error for the multistatus response */
-	    *response = multi_status;
-	    return dav_new_error(r->pool, HTTP_MULTI_STATUS, 0,
-				 "Error(s) occurred on resources during the "
-				 "addition of a depth lock.");
-	}
-    }
-
-    return NULL;
-}
-
-/*
-** dav_lock_query:  Opens the lock database. Returns a linked list of
-**    dav_lock structures for all direct locks on path.
-*/
-DAV_DECLARE(dav_error*) dav_lock_query(dav_lockdb *lockdb, 
-                                       const dav_resource *resource,
-                                       dav_lock **locks)
-{
-    /* If no lock database, return empty result */
-    if (lockdb == NULL) {
-        *locks = NULL;
-        return NULL;
-    }
-
-    /* ### insert a higher-level description? */
-    return (*lockdb->hooks->get_locks)(lockdb, resource,
-				       DAV_GETLOCKS_RESOLVED,
-				       locks);
-}
-
-/* dav_unlock_walker:  Walker callback function to remove indirect locks */
-static dav_error * dav_unlock_walker(dav_walk_resource *wres, int calltype)
-{
-    dav_walker_ctx *ctx = wres->walk_ctx;
-    dav_error *err;
-
-    /* Before removing the lock, do any auto-checkin required */
-    if (wres->resource->working) {
-        /* ### get rid of this typecast */
-        if ((err = dav_auto_checkin(ctx->r, (dav_resource *) wres->resource,
-                                    0 /*undo*/, 1 /*unlock*/, NULL))
-            != NULL) {
-            return err;
-        }
-    }
-
-    if ((err = (*ctx->w.lockdb->hooks->remove_lock)(ctx->w.lockdb,
-                                                    wres->resource,
-                                                    ctx->locktoken)) != NULL) {
-	/* ### should we stop or return a multistatus? looks like STOP */
-	/* ### add a higher-level description? */
-	return err;
-    }
-
-    return NULL;
-}
-
-/*
-** dav_get_direct_resource:
-**
-** Find a lock on the specified resource, then return the resource the
-** lock was applied to (in other words, given a (possibly) indirect lock,
-** return the direct lock's corresponding resource).
-**
-** If the lock is an indirect lock, this usually means traversing up the
-** namespace [repository] hierarchy. Note that some lock providers may be
-** able to return this information with a traversal.
-*/
-static dav_error * dav_get_direct_resource(apr_pool_t *p,
-					   dav_lockdb *lockdb,
-					   const dav_locktoken *locktoken,
-					   const dav_resource *resource,
-					   const dav_resource **direct_resource)
-{
-    if (lockdb->hooks->lookup_resource != NULL) {
-	return (*lockdb->hooks->lookup_resource)(lockdb, locktoken,
-						 resource, direct_resource);
-    }
-
-    *direct_resource = NULL;
-
-    /* Find the top of this lock-
-     * If r->filename's direct   locks include locktoken, use r->filename.
-     * If r->filename's indirect locks include locktoken, retry r->filename/..
-     * Else fail.
-     */
-    while (resource != NULL) {
-	dav_error *err;
-	dav_lock *lock;
-        dav_resource *parent;
-
-	/*
-	** Find the lock specified by <locktoken> on <resource>. If it is
-	** an indirect lock, then partial results are okay. We're just
-	** trying to find the thing and know whether it is a direct or
-	** an indirect lock.
-	*/
-	if ((err = (*lockdb->hooks->find_lock)(lockdb, resource, locktoken,
-					       1, &lock)) != NULL) {
-	    /* ### add a higher-level desc? */
-	    return err;
-	}
-
-	/* not found! that's an error. */
-	if (lock == NULL) {
-	    return dav_new_error(p, HTTP_BAD_REQUEST, 0,
-				 "The specified locktoken does not correspond "
-				 "to an existing lock on this resource.");
-	}
-
-	if (lock->rectype == DAV_LOCKREC_DIRECT) {
-	    /* we found the direct lock. return this resource. */
-
-	    *direct_resource = resource;
-	    return NULL;
-	}
-
-	/* the lock was indirect. move up a level in the URL namespace */
-	if ((err = (*resource->hooks->get_parent_resource)(resource,
-                                                           &parent)) != NULL) {
-            /* ### add a higher-level desc? */
-            return err;
-        }
-        resource = parent;
-    }
-
-    return dav_new_error(p, HTTP_INTERNAL_SERVER_ERROR, 0,
-			 "The lock database is corrupt. A direct lock could "
-			 "not be found for the corresponding indirect lock "
-			 "on this resource.");
-}
-
-/*
-** dav_unlock:  Removes all direct and indirect locks for r->filename,
-**    with given locktoken.  If locktoken == null_locktoken, all locks
-**    are removed.  If r->filename represents an indirect lock,
-**    we must unlock the appropriate direct lock.
-**    Returns OK or appropriate HTTP_* response and logs any errors.
-**
-** ### We've already crawled the tree to ensure everything was locked
-**     by us; there should be no need to incorporate a rollback.
-*/
-int dav_unlock(request_rec *r, const dav_resource *resource,
-	       const dav_locktoken *locktoken)
-{
-    int result;
-    dav_lockdb *lockdb;
-    const dav_resource *lock_resource = resource;
-    const dav_hooks_locks *hooks = DAV_GET_HOOKS_LOCKS(r);
-    const dav_hooks_repository *repos_hooks = resource->hooks;
-    dav_walker_ctx ctx = { { 0 } };
-    dav_response *multi_status;
-    dav_error *err;
-
-    /* If no locks provider, then there is nothing to unlock. */
-    if (hooks == NULL) {
-        return OK;
-    }
-
-    /* 2518 requires the entire lock to be removed if resource/locktoken
-     * point to an indirect lock.  We need resource of the _direct_
-     * lock in order to walk down the tree and remove the locks.  So,
-     * If locktoken != null_locktoken, 
-     *    Walk up the resource hierarchy until we see a direct lock.
-     *    Or, we could get the direct lock's db/key, pick out the URL
-     *    and do a subrequest.  I think walking up is faster and will work
-     *    all the time.
-     * Else
-     *    Just start removing all locks at and below resource.
-     */
-
-    if ((err = (*hooks->open_lockdb)(r, 0, 1, &lockdb)) != NULL) {
-	/* ### return err! maybe add a higher-level desc */
-	/* ### map result to something nice; log an error */
-	return HTTP_INTERNAL_SERVER_ERROR;
-    }
-
-    if (locktoken != NULL
-	&& (err = dav_get_direct_resource(r->pool, lockdb,
-					  locktoken, resource,
-					  &lock_resource)) != NULL) {
-	/* ### add a higher-level desc? */
-	/* ### should return err! */
-	return err->status;
-    }
-
-    /* At this point, lock_resource/locktoken refers to a direct lock (key), ie
-     * the root of a depth > 0 lock, or locktoken is null.
-     */
-    ctx.w.walk_type = DAV_WALKTYPE_NORMAL | DAV_WALKTYPE_LOCKNULL;
-    ctx.w.func = dav_unlock_walker;
-    ctx.w.walk_ctx = &ctx;
-    ctx.w.pool = r->pool;
-    ctx.w.root = lock_resource;
-    ctx.w.lockdb = lockdb;
-
-    ctx.r = r;
-    ctx.locktoken = locktoken;
-
-    err = (*repos_hooks->walk)(&ctx.w, DAV_INFINITY, &multi_status);
-
-    /* ### fix this! */
-    /* ### do something with multi_status */
-    result = err == NULL ? OK : err->status;
-
-    (*hooks->close_lockdb)(lockdb);
-
-    return result;
-}
-
-/* dav_inherit_walker:  Walker callback function to inherit locks */
-static dav_error * dav_inherit_walker(dav_walk_resource *wres, int calltype)
-{
-    dav_walker_ctx *ctx = wres->walk_ctx;
-
-    if (ctx->skip_root
-	&& (*wres->resource->hooks->is_same_resource)(wres->resource,
-                                                      ctx->w.root)) {
-	return NULL;
-    }
-
-    /* ### maybe add a higher-level desc */
-    return (*ctx->w.lockdb->hooks->append_locks)(ctx->w.lockdb,
-                                                 wres->resource, 1,
-                                                 ctx->lock);
-}
-
-/*
-** dav_inherit_locks:  When a resource or collection is added to a collection,
-**    locks on the collection should be inherited to the resource/collection.
-**    (MOVE, MKCOL, etc) Here we propagate any direct or indirect locks from
-**    parent of resource to resource and below.
-*/
-static dav_error * dav_inherit_locks(request_rec *r, dav_lockdb *lockdb,
-				     const dav_resource *resource,
-				     int use_parent)
-{
-    dav_error *err;
-    const dav_resource *which_resource;
-    dav_lock *locks;
-    dav_lock *scan;
-    dav_lock *prev;
-    dav_walker_ctx ctx = { { 0 } };
-    const dav_hooks_repository *repos_hooks = resource->hooks;
-    dav_response *multi_status;
-
-    if (use_parent) {
-        dav_resource *parent;
-	if ((err = (*repos_hooks->get_parent_resource)(resource,
-                                                       &parent)) != NULL) {
-            /* ### add a higher-level desc? */
-            return err;
-        }
-	if (parent == NULL) {
-	    /* ### map result to something nice; log an error */
-	    return dav_new_error(r->pool, HTTP_INTERNAL_SERVER_ERROR, 0,
-				 "Could not fetch parent resource. Unable to "
-				 "inherit locks from the parent and apply "
-				 "them to this resource.");
-	}
-        which_resource = parent;
-    }
-    else {
-	which_resource = resource;
-    }
-
-    if ((err = (*lockdb->hooks->get_locks)(lockdb, which_resource,
-					   DAV_GETLOCKS_PARTIAL,
-					   &locks)) != NULL) {
-	/* ### maybe add a higher-level desc */
-	return err;
-    }
-
-    if (locks == NULL) {
-	/* No locks to propagate, just return */
-	return NULL;
-    }
-
-    /*
-    ** (1) Copy all indirect locks from our parent;
-    ** (2) Create indirect locks for the depth infinity, direct locks
-    **     in our parent.
-    **
-    ** The append_locks call in the walker callback will do the indirect
-    ** conversion, but we need to remove any direct locks that are NOT
-    ** depth "infinity".
-    */
-    for (scan = locks, prev = NULL;
-	 scan != NULL;
-	 prev = scan, scan = scan->next) {
-
-	if (scan->rectype == DAV_LOCKREC_DIRECT
-	    && scan->depth != DAV_INFINITY) {
-
-	    if (prev == NULL)
-		locks = scan->next;
-	    else
-		prev->next = scan->next;
-	}
-    }
-
-    /* <locks> has all our new locks.  Walk down and propagate them. */
-
-    ctx.w.walk_type = DAV_WALKTYPE_NORMAL | DAV_WALKTYPE_LOCKNULL;
-    ctx.w.func = dav_inherit_walker;
-    ctx.w.walk_ctx = &ctx;
-    ctx.w.pool = r->pool;
-    ctx.w.root = resource;
-    ctx.w.lockdb = lockdb;
-
-    ctx.r = r;
-    ctx.lock = locks;
-    ctx.skip_root = !use_parent;
-
-    /* ### do something with multi_status */
-    return (*repos_hooks->walk)(&ctx.w, DAV_INFINITY, &multi_status);
-}
-
-/* ---------------------------------------------------------------
-**
-** Functions dealing with lock-null resources
-**
-*/
-
-/*
-** dav_get_resource_state:  Returns the state of the resource
-**    r->filename:  DAV_RESOURCE_NULL, DAV_RESOURCE_LOCK_NULL,
-**    or DAV_RESOURCE_EXIST.
-**
-**    Returns DAV_RESOURCE_ERROR if an error occurs.
-*/
-int dav_get_resource_state(request_rec *r, const dav_resource *resource)
-{
-    const dav_hooks_locks *hooks = DAV_GET_HOOKS_LOCKS(r);
-
-    if (resource->exists)
-	return DAV_RESOURCE_EXISTS;
-
-    if (hooks != NULL) {
-	dav_error *err;
-	dav_lockdb *lockdb;
-	int locks_present;
-
-	/*
-	** A locknull resource has the form:
-	**
-	**   known-dir "/" locknull-file
-	**
-	** It would be nice to look into <resource> to verify this form,
-	** but it does not have enough information for us. Instead, we
-	** can look at the path_info. If the form does not match, then
-	** there is no way we could have a locknull resource -- it must
-	** be a plain, null resource.
-	**
-	** Apache sets r->filename to known-dir/unknown-file and r->path_info
-	** to "" for the "proper" case. If anything is in path_info, then
-	** it can't be a locknull resource.
-	**
-	** ### I bet this path_info hack doesn't work for repositories.
-	** ### Need input from repository implementors! What kind of
-	** ### restructure do we need? New provider APIs?
-	*/
-	if (r->path_info != NULL && *r->path_info != '\0') {
-	    return DAV_RESOURCE_NULL;
-	}
-	
-        if ((err = (*hooks->open_lockdb)(r, 1, 1, &lockdb)) == NULL) {
-	    /* note that we might see some expired locks... *shrug* */
-	    err = (*hooks->has_locks)(lockdb, resource, &locks_present);
-	    (*hooks->close_lockdb)(lockdb);
-        }
-
-        if (err != NULL) {
-	    /* ### don't log an error. return err. add higher-level desc. */
-
-	    ap_log_rerror(APLOG_MARK, APLOG_ERR | APLOG_NOERRNO, 0, r,
-		          "Failed to query lock-null status for %s",
-			  r->filename);
-
-	    return DAV_RESOURCE_ERROR;
-        }
-
-	if (locks_present)
-	    return DAV_RESOURCE_LOCK_NULL;
-    }
-
-    return DAV_RESOURCE_NULL;
-}
-
-dav_error * dav_notify_created(request_rec *r,
-			       dav_lockdb *lockdb,
-			       const dav_resource *resource,
-			       int resource_state,
-			       int depth)
-{
-    dav_error *err;
-
-    if (resource_state == DAV_RESOURCE_LOCK_NULL) {
-
-	/*
-	** The resource is no longer a locknull resource. This will remove
-	** the special marker.
-	**
-	** Note that a locknull resource has already inherited all of the
-	** locks from the parent. We do not need to call dav_inherit_locks.
-	**
-	** NOTE: some lock providers record locks for locknull resources using
-	**       a different key than for regular resources. this will shift
-	**       the lock information between the two key types.
-	*/
-	(void)(*lockdb->hooks->remove_locknull_state)(lockdb, resource);
-
-	/*
-	** There are resources under this one, which are new. We must
-	** propagate the locks down to the new resources.
-	*/
-	if (depth > 0 &&
-	    (err = dav_inherit_locks(r, lockdb, resource, 0)) != NULL) {
-	    /* ### add a higher level desc? */
-	    return err;
-	}
-    }
-    else if (resource_state == DAV_RESOURCE_NULL) {
-
-	/* ### should pass depth to dav_inherit_locks so that it can
-	** ### optimize for the depth==0 case.
-	*/
-
-	/* this resource should inherit locks from its parent */
-	if ((err = dav_inherit_locks(r, lockdb, resource, 1)) != NULL) {
-
-	    err = dav_push_error(r->pool, err->status, 0,
-				 "The resource was created successfully, but "
-				 "there was a problem inheriting locks from "
-				 "the parent resource.",
-				 err);
-	    return err;
-	}
-    }
-    /* else the resource already exists and its locks are correct. */
-
-    return NULL;
-}
diff --git a/modules/echo/.cvsignore b/modules/echo/.cvsignore
deleted file mode 100644
index f877eb5..0000000
--- a/modules/echo/.cvsignore
+++ /dev/null
@@ -1,15 +0,0 @@
-.deps
-.libs
-*.la
-modules.mk
-Makefile
-*.lo
-*.slo
-*.so
-Debug
-Release
-*.plg
-*.aps
-*.dep
-*.mak
-*.rc
diff --git a/modules/echo/.indent.pro b/modules/echo/.indent.pro
deleted file mode 100644
index a9fbe9f..0000000
--- a/modules/echo/.indent.pro
+++ /dev/null
@@ -1,54 +0,0 @@
--i4 -npsl -di0 -br -nce -d0 -cli0 -npcs -nfc1
--TBUFF
--TFILE
--TTRANS
--TUINT4
--T_trans
--Tallow_options_t
--Tapache_sfio
--Tarray_header
--Tbool_int
--Tbuf_area
--Tbuff_struct
--Tbuffy
--Tcmd_how
--Tcmd_parms
--Tcommand_rec
--Tcommand_struct
--Tconn_rec
--Tcore_dir_config
--Tcore_server_config
--Tdir_maker_func
--Tevent
--Tglobals_s
--Thandler_func
--Thandler_rec
--Tjoblist_s
--Tlisten_rec
--Tmerger_func
--Tmode_t
--Tmodule
--Tmodule_struct
--Tmutex
--Tn_long
--Tother_child_rec
--Toverrides_t
--Tparent_score
--Tpid_t
--Tpiped_log
--Tpool
--Trequest_rec
--Trequire_line
--Trlim_t
--Tscoreboard
--Tsemaphore
--Tserver_addr_rec
--Tserver_rec
--Tserver_rec_chain
--Tshort_score
--Ttable
--Ttable_entry
--Tthread
--Tu_wide_int
--Tvtime_t
--Twide_int
diff --git a/modules/echo/Makefile.in b/modules/echo/Makefile.in
deleted file mode 100644
index 167b343..0000000
--- a/modules/echo/Makefile.in
+++ /dev/null
@@ -1,3 +0,0 @@
-
-include $(top_srcdir)/build/special.mk
-
diff --git a/modules/echo/NWGNUmakefile b/modules/echo/NWGNUmakefile
deleted file mode 100644
index afc3734..0000000
--- a/modules/echo/NWGNUmakefile
+++ /dev/null
@@ -1,261 +0,0 @@
-#
-# Declare the sub-directories to be built here
-#
-
-SUBDIRS = \
-	$(EOLIST) 
-
-#
-# Get the 'head' of the build environment.  This includes default targets and
-# paths to tools
-#
-
-include $(AP_WORK)\build\NWGNUhead.inc
-
-#
-# build this level's files
-
-#
-# Make sure all needed macro's are defined
-#
-
-#
-# These directories will be at the beginning of the include list, followed by
-# INCDIRS
-#
-XINCDIRS	+= \
-			$(AP_WORK)/include \
-			$(NWOS) \
-			$(AP_WORK)/modules/arch/netware \
-			$(AP_WORK)/srclib/apr/include \
-			$(AP_WORK)/srclib/apr-util/include \
-			$(AP_WORK)/srclib/apr \
-			$(EOLIST)
-
-#
-# These flags will come after CFLAGS
-#
-XCFLAGS		+= \
-			-prefix pre_nw.h \
-			$(EOLIST)
-
-#
-# These defines will come after DEFINES
-#
-XDEFINES	+= \
-			$(EOLIST)
-
-#
-# These flags will be added to the link.opt file
-#
-XLFLAGS		+= \
-			$(EOLIST)
-
-#
-# These values will be appended to the correct variables based on the value of
-# RELEASE
-#
-ifeq "$(RELEASE)" "debug"
-XINCDIRS	+= \
-			$(EOLIST)
-
-XCFLAGS		+= \
-			$(EOLIST)
-
-XDEFINES	+= \
-			$(EOLIST)
-
-XLFLAGS		+= \
-		   	$(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "noopt"
-XINCDIRS	+= \
-			$(EOLIST)
-
-XCFLAGS		+= \
-			$(EOLIST)
-
-XDEFINES	+= \
-			$(EOLIST)
-
-XLFLAGS		+= \
-		   	$(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "release"
-XINCDIRS	+= \
-			$(EOLIST)
-
-XCFLAGS		+= \
-			$(EOLIST)
-
-XDEFINES	+= \
-			$(EOLIST)
-
-XLFLAGS		+= \
-			$(EOLIST)
-endif
-
-#
-# These are used by the link target if an NLM is being generated
-# This is used by the link 'name' directive to name the nlm.  If left blank
-# TARGET_nlm (see below) will be used.
-#
-NLM_NAME		= echo
-
-#
-# This is used by the link '-desc ' directive. 
-# If left blank, NLM_NAME will be used.
-#
-NLM_DESCRIPTION	= Echo Module
-
-#
-# This is used by the '-threadname' directive.  If left blank,
-# NLM_NAME Thread will be used.
-#
-NLM_THREAD_NAME	= Echo Module
-
-#
-# If this is specified, it will override VERSION value in 
-# $(AP_WORK)\build\NWGNUenvironment.inc
-#
-NLM_VERSION		=
-
-#
-# If this is specified, it will override the default of 64K
-#
-NLM_STACK_SIZE	= 8192
-
-
-#
-# If this is specified it will be used by the link '-entry' directive
-#
-NLM_ENTRY_SYM	= _LibCPrelude
-
-#
-# If this is specified it will be used by the link '-exit' directive
-#
-NLM_EXIT_SYM	= _LibCPostlude
-
-#
-# If this is specified it will be used by the link '-check' directive
-#
-NLM_CHECK_SYM	=
-
-#
-# If these are specified it will be used by the link '-flags' directive
-#
-NLM_FLAGS		=  AUTOUNLOAD, PSEUDOPREEMPTION
-
-#
-# If this is specified it will be linked in with the XDCData option in the def 
-# file instead of the default of $(NWOS)/apache.xdc.  XDCData can be disabled
-# by setting APACHE_UNIPROC in the environment
-#
-XDCDATA         = 
-
-#
-# If there is an NLM target, put it here
-#
-TARGET_nlm = \
-	$(OBJDIR)/echo.nlm \
-	$(EOLIST)
-
-#
-# If there is an LIB target, put it here
-#
-TARGET_lib = \
-	$(EOLIST)
-
-#
-# These are the OBJ files needed to create the NLM target above.
-# Paths must all use the '/' character
-#
-FILES_nlm_objs = \
-	$(OBJDIR)/mod_echo.o \
-	$(EOLIST)
-
-#
-# These are the LIB files needed to create the NLM target above.
-# These will be added as a library command in the link.opt file.
-#
-FILES_nlm_libs = \
-   	libcpre.o \
-	$(EOLIST)
-
-#
-# These are the modules that the above NLM target depends on to load.
-# These will be added as a module command in the link.opt file.
-#
-FILES_nlm_modules = \
-	aprlib \
-	libc \
-	$(EOLIST)
-
-#
-# If the nlm has a msg file, put it's path here
-#
-FILE_nlm_msg =
- 
-#
-# If the nlm has a hlp file put it's path here
-#
-FILE_nlm_hlp =
-
-#
-# If this is specified, it will override $(NWOS)\copyright.txt.
-#
-FILE_nlm_copyright =
-
-#
-# Any additional imports go here
-#
-FILES_nlm_Ximports = \
-	@$(APR)/aprlib.imp \
-	@$(NWOS)/httpd.imp \
-	@libc.imp \
-	$(EOLIST)
- 
-#   
-# Any symbols exported to here
-#
-FILES_nlm_exports = \
-	echo_module \
-	$(EOLIST)
-	
-#   
-# These are the OBJ files needed to create the LIB target above.
-# Paths must all use the '/' character
-#
-FILES_lib_objs = \
-		$(EOLIST)
-
-#
-# implement targets and dependancies (leave this section alone)
-#
-
-libs :: $(OBJDIR) $(TARGET_lib)
-
-nlms :: libs $(TARGET_nlm)
-
-#
-# Updated this target to create necessary directories and copy files to the 
-# correct place.  (See $(AP_WORK)\build\NWGNUhead.inc for examples)
-#
-install :: nlms FORCE
-	copy $(OBJDIR)\*.nlm $(INSTALL)\Apache2\modules\*.*
-
-#
-# Any specialized rules here
-#
-
-#
-# Include the 'tail' makefile that has targets that depend on variables defined
-# in this makefile
-#
-
-include $(AP_WORK)\build\NWGNUtail.inc
-
-
-	
diff --git a/modules/echo/config.m4 b/modules/echo/config.m4
deleted file mode 100644
index 234a7d5..0000000
--- a/modules/echo/config.m4
+++ /dev/null
@@ -1,11 +0,0 @@
-dnl modules enabled in this directory by default
-
-dnl APACHE_MODULE(name, helptext[, objects[, structname[, default[, config]]]])
-
-APACHE_MODPATH_INIT(echo)
-
-APACHE_MODULE(echo, ECHO server, , , no)
-
-APR_ADDTO(LT_LDFLAGS,-export-dynamic)
-
-APACHE_MODPATH_FINISH
diff --git a/modules/echo/mod_echo.c b/modules/echo/mod_echo.c
deleted file mode 100644
index 4229012..0000000
--- a/modules/echo/mod_echo.c
+++ /dev/null
@@ -1,144 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-#include "ap_config.h"
-#include "ap_mmn.h"
-#include "httpd.h"
-#include "http_config.h"
-#include "http_connection.h"
-
-#include "apr_buckets.h"
-#include "util_filter.h"
-
-module AP_MODULE_DECLARE_DATA echo_module;
-
-typedef struct {
-    int bEnabled;
-} EchoConfig;
-
-static void *create_echo_server_config(apr_pool_t *p, server_rec *s)
-{
-    EchoConfig *pConfig = apr_pcalloc(p, sizeof *pConfig);
-
-    pConfig->bEnabled = 0;
-
-    return pConfig;
-}
-
-static const char *echo_on(cmd_parms *cmd, void *dummy, int arg)
-{
-    EchoConfig *pConfig = ap_get_module_config(cmd->server->module_config,
-                                               &echo_module);
-    pConfig->bEnabled = arg;
-
-    return NULL;
-}
-
-static int process_echo_connection(conn_rec *c)
-{
-    apr_bucket_brigade *bb;
-    apr_bucket *b;
-    apr_status_t rv;
-    EchoConfig *pConfig = ap_get_module_config(c->base_server->module_config,
-                                               &echo_module);
-
-    if (!pConfig->bEnabled) {
-        return DECLINED;
-    }
-    
-    bb = apr_brigade_create(c->pool);
-
-    for ( ; ; ) {
-        /* Get a single line of input from the client */
-        if ((rv = ap_get_brigade(c->input_filters, bb, AP_MODE_GETLINE,
-                                 APR_BLOCK_READ, 0) != APR_SUCCESS || 
-             APR_BRIGADE_EMPTY(bb))) {
-            apr_brigade_destroy(bb);
-            break;
-        }
-
-        /* Make sure the data is flushed to the client */
-        b = apr_bucket_flush_create();
-        APR_BRIGADE_INSERT_TAIL(bb, b);
-        ap_pass_brigade(c->output_filters, bb);    
-    }
-    return OK;
-}
-
-static const command_rec echo_cmds[] = 
-{
-    AP_INIT_FLAG("ProtocolEcho", echo_on, NULL, RSRC_CONF,
-                 "Run an echo server on this host"),
-    { NULL }
-};
-
-static void register_hooks(apr_pool_t *p)
-{
-    ap_hook_process_connection(process_echo_connection, NULL, NULL,
-                               APR_HOOK_MIDDLE);
-}
-
-module AP_MODULE_DECLARE_DATA echo_module = {
-    STANDARD20_MODULE_STUFF,
-    NULL,			/* create per-directory config structure */
-    NULL,			/* merge per-directory config structures */
-    create_echo_server_config,	/* create per-server config structure */
-    NULL,			/* merge per-server config structures */
-    echo_cmds,			/* command apr_table_t */
-    register_hooks		/* register hooks */
-};
diff --git a/modules/experimental/.cvsignore b/modules/experimental/.cvsignore
deleted file mode 100644
index aeabff3..0000000
--- a/modules/experimental/.cvsignore
+++ /dev/null
@@ -1,16 +0,0 @@
-.deps
-.libs
-*.la
-modules.mk
-Makefile
-*.lo
-*.slo
-*.so
-*.x
-Debug
-Release
-*.plg
-*.aps
-*.dep
-*.mak
-*.rc
diff --git a/modules/experimental/.indent.pro b/modules/experimental/.indent.pro
deleted file mode 100644
index a9fbe9f..0000000
--- a/modules/experimental/.indent.pro
+++ /dev/null
@@ -1,54 +0,0 @@
--i4 -npsl -di0 -br -nce -d0 -cli0 -npcs -nfc1
--TBUFF
--TFILE
--TTRANS
--TUINT4
--T_trans
--Tallow_options_t
--Tapache_sfio
--Tarray_header
--Tbool_int
--Tbuf_area
--Tbuff_struct
--Tbuffy
--Tcmd_how
--Tcmd_parms
--Tcommand_rec
--Tcommand_struct
--Tconn_rec
--Tcore_dir_config
--Tcore_server_config
--Tdir_maker_func
--Tevent
--Tglobals_s
--Thandler_func
--Thandler_rec
--Tjoblist_s
--Tlisten_rec
--Tmerger_func
--Tmode_t
--Tmodule
--Tmodule_struct
--Tmutex
--Tn_long
--Tother_child_rec
--Toverrides_t
--Tparent_score
--Tpid_t
--Tpiped_log
--Tpool
--Trequest_rec
--Trequire_line
--Trlim_t
--Tscoreboard
--Tsemaphore
--Tserver_addr_rec
--Tserver_rec
--Tserver_rec_chain
--Tshort_score
--Ttable
--Ttable_entry
--Tthread
--Tu_wide_int
--Tvtime_t
--Twide_int
diff --git a/modules/experimental/Makefile.in b/modules/experimental/Makefile.in
deleted file mode 100644
index 7c5c149..0000000
--- a/modules/experimental/Makefile.in
+++ /dev/null
@@ -1,3 +0,0 @@
-# a modules Makefile has no explicit targets -- they will be defined by
-# whatever modules are enabled. just grab special.mk to deal with this.
-include $(top_srcdir)/build/special.mk
diff --git a/modules/experimental/README b/modules/experimental/README
deleted file mode 100644
index 1d80fa5..0000000
--- a/modules/experimental/README
+++ /dev/null
@@ -1,41 +0,0 @@
-README for Apache 2.0 Example Module
-[April, 1997, updated May 2000]
-
-The files in the src/modules/example directory under the Apache
-distribution directory tree are provided as an example to those that
-wish to write modules that use the Apache API.
-
-The main file is mod_example.c, which illustrates all the different
-callback mechanisms and call syntaces.  By no means does an add-on
-module need to include routines for all of the callbacks - quite the
-contrary!
-
-The example module is an actual working module.  If you link it into
-your server, enable the "example-handler" handler for a location, and then
-browse to that location, you will see a display of some of the tracing
-the example module did as the various callbacks were made.
-
-To include the example module in your server run `./configure
---enable-example` in the src directory before running `make`.
-
-To add another module of your own:
-
-    A. mkdir src/modules/mymodule
-    B. cp src/modules/example/* src/modules/mymodule
-    C. Modify the files in the new directory
-    D. Build the server as above, with appropriate changes.
-
-To activate the example module, include a block similar to the
-following in your httpd.conf file:
-
-    <Location /example-info>
-	SetHandler example-handler
-    </Location>
-
-As an alternative, you can put the following into a .htaccess file and
-then request the file "test.example" from that location:
-
-    AddHandler example-handler .example
-
-After reloading/restarting your server, you should be able to browse
-to this location and see the brief display mentioned earlier.
diff --git a/modules/experimental/cache_storage.c b/modules/experimental/cache_storage.c
deleted file mode 100644
index d3cb540..0000000
--- a/modules/experimental/cache_storage.c
+++ /dev/null
@@ -1,268 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-#define CORE_PRIVATE
-
-#include "mod_cache.h"
-
-APR_HOOK_STRUCT(
-	APR_HOOK_LINK(remove_url)
-	APR_HOOK_LINK(create_entity)
-	APR_HOOK_LINK(open_entity)
-)
-
-extern APR_OPTIONAL_FN_TYPE(ap_cache_generate_key) *cache_generate_key;
-
-extern module AP_MODULE_DECLARE_DATA cache_module;
-
-/* -------------------------------------------------------------- */
-
-/*
- * delete all URL entities from the cache
- *
- */
-int cache_remove_url(request_rec *r, const char *types, char *url)
-{
-    const char *next = types;
-    const char *type;
-    apr_status_t rv;
-    char *key;
-
-    rv = cache_generate_key(r,r->pool,&key);
-    if (rv != APR_SUCCESS) {
-        return rv;
-    }
-
-    /* for each specified cache type, delete the URL */
-    while(next) {
-        type = ap_cache_tokstr(r->pool, next, &next);
-        cache_run_remove_url(type, key);
-    }
-    return OK;
-}
-
-
-/*
- * create a new URL entity in the cache
- *
- * It is possible to store more than once entity per URL. This
- * function will always create a new entity, regardless of whether
- * other entities already exist for the same URL.
- *
- * The size of the entity is provided so that a cache module can
- * decide whether or not it wants to cache this particular entity.
- * If the size is unknown, a size of -1 should be set.
- */
-int cache_create_entity(request_rec *r, const char *types, char *url, apr_size_t size)
-{
-    cache_handle_t *h = apr_pcalloc(r->pool, sizeof(cache_handle_t));
-    const char *next = types;
-    const char *type;
-    char *key;
-    apr_status_t rv;
-    cache_request_rec *cache = (cache_request_rec *) 
-                         ap_get_module_config(r->request_config, &cache_module);
-
-    rv =  cache_generate_key(r,r->pool,&key);
-    if (rv != APR_SUCCESS) {
-        return rv;
-    }
-    /* for each specified cache type, delete the URL */
-    while (next) {
-        type = ap_cache_tokstr(r->pool, next, &next);
-        switch (rv = cache_run_create_entity(h, r, type, key, size)) {
-        case OK: {
-            cache->handle = h;
-            return OK;
-        }
-        case DECLINED: {
-            continue;
-        }
-        default: {
-            return rv;
-        }
-        }
-    }
-    return DECLINED;
-}
-
-/*
- * remove a specific URL entity from the cache
- *
- * The specific entity referenced by the cache_handle is removed
- * from the cache, and the cache_handle is closed.
- */
-/* XXX Don't think we need to pass in request_rec or types ... */
-int cache_remove_entity(request_rec *r, const char *types, cache_handle_t *h)
-{
-    h->remove_entity(h);
-    return 1;
-}
-
-/*
- * select a specific URL entity in the cache
- *
- * It is possible to store more than one entity per URL. Content
- * negotiation is used to select an entity. Once an entity is
- * selected, details of it are stored in the per request
- * config to save time when serving the request later.
- *
- * This function returns OK if successful, DECLINED if no
- * cached entity fits the bill.
- */
-int cache_select_url(request_rec *r, const char *types, char *url)
-{
-    const char *next = types;
-    const char *type;
-    apr_status_t rv;
-    cache_info *info;
-    char *key;
-    cache_request_rec *cache = (cache_request_rec *) 
-                         ap_get_module_config(r->request_config, &cache_module);
-
-    rv =  cache_generate_key(r,r->pool,&key);
-    if (rv != APR_SUCCESS) {
-        return rv;
-    }
-    /* go through the cache types till we get a match */
-    cache->handle = apr_palloc(r->pool, sizeof(cache_handle_t));
-
-    while (next) {
-        type = ap_cache_tokstr(r->pool, next, &next);
-        switch ((rv = cache_run_open_entity(cache->handle, r, type, key))) {
-        case OK: {
-            info = &(cache->handle->cache_obj->info);
-            /* XXX:
-             * Handle being returned a collection of entities.
-             */
-
-            /* Has the cache entry expired? */
-            if (r->request_time > info->expire)
-                cache->fresh = 0;
-            else
-                cache->fresh = 1;
-
-            /*** do content negotiation here */
-            return OK;
-        }
-        case DECLINED: {
-            /* try again with next cache type */
-            continue;
-        }
-        default: {
-            /* oo-er! an error */
-            cache->handle = NULL;
-            return rv;
-        }
-        }
-    }
-    cache->handle = NULL;
-    return DECLINED;
-}
-
-apr_status_t cache_write_entity_headers(cache_handle_t *h, 
-                                        request_rec *r, 
-                                        cache_info *info)
-{
-    return (h->write_headers(h, r, info));
-}
-apr_status_t cache_write_entity_body(cache_handle_t *h, request_rec *r, apr_bucket_brigade *b) 
-{
-    return (h->write_body(h, r, b));
-}
-
-apr_status_t cache_read_entity_headers(cache_handle_t *h, request_rec *r)
-{
-    apr_status_t rv;
-    cache_info *info = &(h->cache_obj->info);
-
-    /* Build the header table from info in the info struct */
-    rv = h->read_headers(h, r);
-    if (rv != APR_SUCCESS) {
-        return rv;
-    }
-
-    r->content_type = apr_pstrdup(r->pool, info->content_type);
-    r->filename = apr_pstrdup(r->pool, info->filename );
-
-    return APR_SUCCESS;
-}
-apr_status_t cache_read_entity_body(cache_handle_t *h, apr_pool_t *p, apr_bucket_brigade *b) 
-{
-    return (h->read_body(h, p, b));
-}
-
-apr_status_t cache_generate_key_default( request_rec *r, apr_pool_t*p, char**key ) 
-{
-   *key = apr_pstrdup(p,r->uri);
-   return APR_SUCCESS;
-}
-
-APR_IMPLEMENT_EXTERNAL_HOOK_RUN_FIRST(cache, CACHE, int, create_entity, 
-                                      (cache_handle_t *h, request_rec *r, const char *type, 
-                                      const char *urlkey, apr_size_t len),
-                                      (h, r, type,urlkey,len),DECLINED)
-APR_IMPLEMENT_EXTERNAL_HOOK_RUN_FIRST(cache, CACHE, int, open_entity,  
-                                      (cache_handle_t *h, request_rec *r, const char *type, 
-                                      const char *urlkey),(h,r,type,urlkey),
-                                      DECLINED)
-APR_IMPLEMENT_EXTERNAL_HOOK_RUN_ALL(cache, CACHE, int, remove_url, 
-                                    (const char *type, const char *urlkey),
-                                    (type,urlkey),OK,DECLINED)
-
-
diff --git a/modules/experimental/cache_util.c b/modules/experimental/cache_util.c
deleted file mode 100644
index 1835455..0000000
--- a/modules/experimental/cache_util.c
+++ /dev/null
@@ -1,303 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-#define CORE_PRIVATE
-
-#include "mod_cache.h"
-
-
-
-/* -------------------------------------------------------------- */
-
-/* return true if the request is conditional */
-CACHE_DECLARE(int) ap_cache_request_is_conditional(request_rec *r)
-{
-    if (apr_table_get(r->headers_in, "If-Match") ||
-        apr_table_get(r->headers_in, "If-None-Match") ||
-        apr_table_get(r->headers_in, "If-Modified-Since") ||
-        apr_table_get(r->headers_in, "If-Unmodified-Since")) {
-
-        return 1;
-    }
-    return 0;
-}
-
-
-/* remove other filters from filter stack */
-CACHE_DECLARE(void) ap_cache_reset_output_filters(request_rec *r)
-{
-    ap_filter_t *f = r->output_filters;
-
-    while (f) {
-        if (!strcasecmp(f->frec->name, "CORE") ||
-            !strcasecmp(f->frec->name, "CONTENT_LENGTH") ||
-            !strcasecmp(f->frec->name, "HTTP_HEADER")) {
-            f = f->next;
-            continue;
-        }
-        else {
-            ap_remove_output_filter(f);
-            f = f->next;
-        }
-    }
-}
-
-CACHE_DECLARE(const char *)ap_cache_get_cachetype(request_rec *r, 
-                                                  cache_server_conf *conf, 
-                                                  const char *url)
-{
-    const char *type = NULL;
-    int i;
-
-    /* loop through all the cacheenable entries */
-    for (i = 0; i < conf->cacheenable->nelts; i++) {
-        struct cache_enable *ent = 
-                                (struct cache_enable *)conf->cacheenable->elts;
-        const char *thisurl = ent[i].url;
-        const char *thistype = ent[i].type;
-        if ((thisurl) && !strncasecmp(thisurl, url, strlen(thisurl))) {
-            if (!type) {
-                type = thistype;
-            }
-            else {
-                type = apr_pstrcat(r->pool, type, ",", thistype, NULL);
-            }
-        }
-    }
-
-    /* then loop through all the cachedisable entries */
-    for (i = 0; i < conf->cachedisable->nelts; i++) {
-        struct cache_disable *ent = 
-                               (struct cache_disable *)conf->cachedisable->elts;
-        const char *thisurl = ent[i].url;
-        if ((thisurl) && !strncasecmp(thisurl, url, strlen(thisurl))) {
-            type = NULL;
-        }
-    }
-
-    return type;
-}
-
-/*
- * list is a comma-separated list of case-insensitive tokens, with
- * optional whitespace around the tokens.
- * The return returns 1 if the token val is found in the list, or 0
- * otherwise.
- */
-CACHE_DECLARE(int) ap_cache_liststr(const char *list, const char *key, char **val)
-{
-    int len, i;
-    char *p;
-    char valbuf[HUGE_STRING_LEN];
-    valbuf[sizeof(valbuf)-1] = 0; /* safety terminating zero */
-
-    len = strlen(key);
-
-    while (list != NULL) {
-        p = strchr((char *) list, ',');
-        if (p != NULL) {
-            i = p - list;
-            do
-            p++;
-            while (ap_isspace(*p));
-        }
-        else
-            i = strlen(list);
-
-        while (i > 0 && ap_isspace(list[i - 1]))
-            i--;
-        if (i == len && strncasecmp(list, key, len) == 0) {
-            if (val) {
-                p = strchr((char *) list, ',');
-                while (ap_isspace(*list)) {
-                    list++;
-                }
-                if ('=' == list[0])
-                    list++;
-                while (ap_isspace(*list)) {
-                    list++;
-                }
-                strncpy(valbuf, list, MIN(p-list, sizeof(valbuf)-1));
-                *val = valbuf;
-            }
-            return 1;
-        }
-        list = p;
-    }
-    return 0;
-}
-
-/* return each comma separated token, one at a time */
-CACHE_DECLARE(const char *)ap_cache_tokstr(apr_pool_t *p, const char *list, const char **str)
-{
-    apr_size_t i;
-    const char *s;
-
-    s = ap_strchr_c(list, ',');
-    if (s != NULL) {
-        i = s - list;
-        do
-            s++;
-        while (apr_isspace(*s))
-            ; /* noop */
-    }
-    else
-        i = strlen(list);
-
-    while (i > 0 && apr_isspace(list[i - 1]))
-        i--;
-
-    *str = s;
-    if (i)
-        return apr_pstrndup(p, list, i);
-    else
-        return NULL;
-}
-
-/*
- * XXX TODO:
- * These functions were lifted from mod_proxy
- * Consider putting them in APR or some other common accessable
- * location.
- */
-/*
- * Converts apr_time_t hex digits to a time integer
- */
-CACHE_DECLARE(apr_time_t) ap_cache_hex2msec(const char *x)
-{
-    int i, ch;
-    apr_time_t j;
-    for (i = 0, j = 0; i < sizeof(j) * 2; i++) {
-        ch = x[i];
-        j <<= 4;
-        if (apr_isdigit(ch))
-            j |= ch - '0';
-        else if (apr_isupper(ch))
-            j |= ch - ('A' - 10);
-        else
-            j |= ch - ('a' - 10);
-    }
-    return j;
-}
-
-/*
- * Converts a time integer to apr_time_t hex digits
- */
-CACHE_DECLARE(void) ap_cache_msec2hex(apr_time_t j, char *y)
-{
-    int i, ch;
-
-    for (i = (sizeof(j) * 2)-1; i >= 0; i--) {
-        ch = j & 0xF;
-        j >>= 4;
-        if (ch >= 10)
-            y[i] = ch + ('A' - 10);
-        else
-            y[i] = ch + '0';
-    }
-    y[sizeof(j) * 2] = '\0';
-}
-
-static void cache_hash(const char *it, char *val, int ndepth, int nlength)
-{
-    apr_md5_ctx_t context;
-    unsigned char digest[16];
-    char tmp[22];
-    int i, k, d;
-    unsigned int x;
-    static const char enc_table[64] =
-    "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_@";
-
-    apr_md5_init(&context);
-    apr_md5_update(&context, (const unsigned char *) it, strlen(it));
-    apr_md5_final(digest, &context);
-
-    /* encode 128 bits as 22 characters, using a modified uuencoding 
-     * the encoding is 3 bytes -> 4 characters* i.e. 128 bits is 
-     * 5 x 3 bytes + 1 byte -> 5 * 4 characters + 2 characters
-     */
-    for (i = 0, k = 0; i < 15; i += 3) {
-        x = (digest[i] << 16) | (digest[i + 1] << 8) | digest[i + 2];
-        tmp[k++] = enc_table[x >> 18];
-        tmp[k++] = enc_table[(x >> 12) & 0x3f];
-        tmp[k++] = enc_table[(x >> 6) & 0x3f];
-        tmp[k++] = enc_table[x & 0x3f];
-    }
-
-    /* one byte left */
-    x = digest[15];
-    tmp[k++] = enc_table[x >> 2];    /* use up 6 bits */
-    tmp[k++] = enc_table[(x << 4) & 0x3f];
-
-    /* now split into directory levels */
-    for (i = k = d = 0; d < ndepth; ++d) {
-        memcpy(&val[i], &tmp[k], nlength);
-        k += nlength;
-        val[i + nlength] = '/';
-        i += nlength + 1;
-    }
-    memcpy(&val[i], &tmp[k], 22 - k);
-    val[i + 22 - k] = '\0';
-}
-
-CACHE_DECLARE(char *)generate_name(apr_pool_t *p, int dirlevels, int dirlength, const char *name)
-{
-    char hashfile[66];
-    cache_hash(name, hashfile, dirlevels, dirlength);
-    return apr_pstrdup(p, hashfile);
-}
diff --git a/modules/experimental/config.m4 b/modules/experimental/config.m4
deleted file mode 100644
index 9194444..0000000
--- a/modules/experimental/config.m4
+++ /dev/null
@@ -1,79 +0,0 @@
-
-APACHE_MODPATH_INIT(experimental)
-
-if test "$ac_cv_ebcdic" = "yes"; then
-# mod_charset_lite can be very useful on an ebcdic system, 
-#   so include it by default
-    APACHE_MODULE(charset_lite, character set translation, , , yes)
-else
-    APACHE_MODULE(charset_lite, character set translation, , , no)
-fi
-
-dnl #  list of object files for mod_cache
-cache_objs="dnl
-mod_cache.lo dnl
-cache_storage.lo dnl
-cache_util.lo dnl
-" 
-APACHE_MODULE(cache, dynamic file caching, $cache_objs, , no)
-APACHE_MODULE(disk_cache, disk caching module, , , no)
-APACHE_MODULE(mem_cache, memory caching module, , , no)
-APACHE_MODULE(example, example and demo module, , , no)
-APACHE_MODULE(ext_filter, external filter module, , , no)
-APACHE_MODULE(case_filter, example uppercase conversion filter, , , no)
-APACHE_MODULE(case_filter_in, example uppercase conversion input filter, , , no)
-
-APACHE_MODULE(deflate, Deflate transfer encoding support, , , no, [
-  AC_ARG_WITH(z, APACHE_HELP_STRING(--with-z=DIR,use a specific zlib library),
-  [
-    if test "x$withval" != "xyes" && test "x$withval" != "x"; then
-      ap_zlib_base="$withval"
-    fi
-  ])
-  if test "x$ap_zlib_base" = "x"; then
-    AC_MSG_CHECKING([for zlib location])
-    AC_CACHE_VAL(ap_cv_zlib,[
-      for dir in /usr/local /usr ; do
-        if test -d $dir && test -f $dir/include/zlib.h; then
-          ap_cv_zlib=$dir
-          break
-        fi
-      done
-    ])
-    ap_zlib_base=$ap_cv_zlib
-    if test "x$ap_zlib_base" = "x"; then
-      enable_deflate=no
-      AC_MSG_RESULT([not found])
-    else
-      AC_MSG_RESULT([$ap_zlib_base])
-    fi
-  fi
-  if test "$enable_deflate" != "no"; then
-    ap_save_includes=$INCLUDE
-    ap_save_ldflags=$LDFLAGS
-    ap_save_libs=$LIBS
-    ap_save_cppflags=$CPPFLAGS
-    if test "$ap_zlib_base" != "/usr"; then
-      APR_ADDTO(INCLUDES, [-I${ap_zlib_base}/include])
-      dnl put in CPPFLAGS temporarily so that AC_TRY_LINK below will work
-      CPPFLAGS="$CPPFLAGS -I${ap_zlib_base}/include"
-      APR_ADDTO(LDFLAGS, [-L${ap_zlib_base}/lib])
-      if test "x$ap_platform_runtime_link_flag" != "x"; then
-         APR_ADDTO(LDFLAGS, [$ap_platform_runtime_link_flag${ap_zlib_base}/lib])
-      fi
-    fi
-    APR_ADDTO(LIBS, [-lz])
-    AC_MSG_CHECKING([for zlib library])
-    AC_TRY_LINK([#include <zlib.h>], [return Z_OK;], 
-    [AC_MSG_RESULT(found) 
-     AC_CHECK_HEADERS(zutil.h)],
-    [AC_MSG_RESULT(not found)
-     enable_deflate=no
-     INCLUDES=$ap_save_includes
-     LDFLAGS=$ap_save_ldflags
-     LIBS=$ap_save_libs])
-    CPPFLAGS=$ap_save_cppflags
-  fi
-])
-
-APACHE_MODPATH_FINISH
diff --git a/modules/experimental/mod_auth_ldap.c b/modules/experimental/mod_auth_ldap.c
deleted file mode 100644
index 54bc07a..0000000
--- a/modules/experimental/mod_auth_ldap.c
+++ /dev/null
@@ -1,862 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-/*
- * mod_auth_ldap.c: LDAP authentication module
- * 
- * Original code from auth_ldap module for Apache v1.3:
- * Copyright 1998, 1999 Enbridge Pipelines Inc. 
- * Copyright 1999-2001 Dave Carrigan
- */
-
-#include <apr_ldap.h>
-#include <apr_strings.h>
-
-#include "ap_config.h"
-#if APR_HAVE_UNISTD_H
-/* for getpid() */
-#include <unistd.h>
-#endif
-#include <ctype.h>
-
-#include "httpd.h"
-#include "http_config.h"
-#include "http_core.h"
-#include "http_log.h"
-#include "http_protocol.h"
-#include "http_request.h"
-#include "util_ldap.h"
-
-/* per directory configuration */
-typedef struct {
-    apr_pool_t *pool;			/* Pool that this config is allocated from */
-    apr_thread_mutex_t *lock;			/* Lock for this config */
-    int auth_authoritative;		/* Is this auth method the one and only? */
-    int enabled;			/* Is auth_ldap enabled in this directory? */
-
-    /* These parameters are all derived from the AuthLDAPURL directive */
-    char *url;				/* String representation of the URL */
-
-    char *host;				/* Name of the LDAP server (or space separated list) */
-    int port;				/* Port of the LDAP server */
-    char *basedn;			/* Base DN to do all searches from */
-    char *attribute;			/* Attribute to search for */
-    char **attributes;			/* Array of all the attributes to return */
-    int scope;				/* Scope of the search */
-    char *filter;			/* Filter to further limit the search  */
-    deref_options deref;		/* how to handle alias dereferening */
-    char *binddn;			/* DN to bind to server (can be NULL) */
-    char *bindpw;			/* Password to bind to server (can be NULL) */
-
-    int frontpage_hack;			/* Hack for frontpage support */
-    int user_is_dn;			/* If true, connection->user is DN instead of userid */
-    int compare_dn_on_server;		/* If true, will use server to do DN compare */
-
-    int have_ldap_url;			/* Set if we have found an LDAP url */
- 
-    apr_array_header_t *groupattr;	/* List of Group attributes */
-    int group_attrib_is_dn;		/* If true, the group attribute is the DN, otherwise, 
-					   it's the exact string passed by the HTTP client */
-
-    int netscapessl;			/* True if Netscape SSL is enabled */
-    int starttls;                       /* True if StartTLS is enabled */
-} mod_auth_ldap_config_t;
-
-typedef struct mod_auth_ldap_request_t {
-    char *dn;				/* The saved dn from a successful search */
-    char *user;				/* The username provided by the client */
-} mod_auth_ldap_request_t;
-
-/* maximum group elements supported */
-#define GROUPATTR_MAX_ELTS 10
-
-struct mod_auth_ldap_groupattr_entry_t {
-    char *name;
-};
-
-module AP_MODULE_DECLARE_DATA auth_ldap_module;
-
-/* function prototypes */
-void mod_auth_ldap_build_filter(char *filtbuf, 
-                                request_rec *r, 
-                                mod_auth_ldap_config_t *sec);
-int mod_auth_ldap_check_user_id(request_rec *r);
-int mod_auth_ldap_auth_checker(request_rec *r);
-void *mod_auth_ldap_create_dir_config(apr_pool_t *p, char *d);
-
-/* ---------------------------------------- */
-
-
-/*
- * Build the search filter, or at least as much of the search filter that
- * will fit in the buffer. We don't worry about the buffer not being able
- * to hold the entire filter. If the buffer wasn't big enough to hold the
- * filter, ldap_search_s will complain, but the only situation where this
- * is likely to happen is if the client sent a really, really long
- * username, most likely as part of an attack.
- *
- * The search filter consists of the filter provided with the URL,
- * combined with a filter made up of the attribute provided with the URL,
- * and the actual username passed by the HTTP client. For example, assume
- * that the LDAP URL is
- * 
- *   ldap://ldap.airius.com/ou=People, o=Airius?uid??(posixid=*)
- *
- * Further, assume that the userid passed by the client was `userj'.  The
- * search filter will be (&(posixid=*)(uid=userj)).
- */
-#define FILTER_LENGTH MAX_STRING_LEN
-void mod_auth_ldap_build_filter(char *filtbuf, 
-                                request_rec *r, 
-                                mod_auth_ldap_config_t *sec)
-{
-    char *p, *q, *filtbuf_end;
-    /* 
-     * Create the first part of the filter, which consists of the 
-     * config-supplied portions.
-     */
-    apr_snprintf(filtbuf, FILTER_LENGTH, "(&(%s)(%s=", sec->filter, sec->attribute);
-
-    /* 
-     * Now add the client-supplied username to the filter, ensuring that any
-     * LDAP filter metachars are escaped.
-     */
-    filtbuf_end = filtbuf + FILTER_LENGTH - 1;
-    for (p = r->user, q=filtbuf + strlen(filtbuf);
-         *p && q < filtbuf_end; *q++ = *p++) {
-        if (strchr("*()\\", *p) != NULL) {
-            *q++ = '\\';
-            if (q >= filtbuf_end) {
-	        break;
-	    }
-        }
-    }
-    *q = '\0';
-
-    /* 
-     * Append the closing parens of the filter, unless doing so would 
-     * overrun the buffer.
-     */
-    if (q + 2 <= filtbuf_end)
-        strcat(filtbuf, "))");
-}
-
-
-/*
- * Authentication Phase
- * --------------------
- *
- * This phase authenticates the credentials the user has sent with
- * the request (ie the username and password are checked). This is done
- * by making an attempt to bind to the LDAP server using this user's
- * DN and the supplied password.
- *
- */
-int mod_auth_ldap_check_user_id(request_rec *r)
-{
-    const char **vals = NULL;
-    char filtbuf[FILTER_LENGTH];
-    mod_auth_ldap_config_t *sec =
-        (mod_auth_ldap_config_t *)ap_get_module_config(r->per_dir_config, &auth_ldap_module);
-
-    util_ldap_connection_t *ldc = NULL;
-    const char *sent_pw;
-    int result = 0;
-    const char *dn = NULL;
-
-    mod_auth_ldap_request_t *req =
-        (mod_auth_ldap_request_t *)apr_pcalloc(r->pool, sizeof(mod_auth_ldap_request_t));
-    ap_set_module_config(r->request_config, &auth_ldap_module, req);
-
-    if (!sec->enabled) {
-        return DECLINED;
-    }
-
-    /* 
-     * Basic sanity checks before any LDAP operations even happen.
-     */
-    if (!sec->have_ldap_url) {
-        return DECLINED;
-    }
-
-    /* There is a good AuthLDAPURL, right? */
-    if (sec->host) {
-        ldc = util_ldap_connection_find(r, sec->host, sec->port,
-                                       sec->binddn, sec->bindpw, sec->deref,
-                                       sec->netscapessl, sec->starttls);
-    }
-    else {
-        ap_log_rerror(APLOG_MARK, APLOG_WARNING|APLOG_NOERRNO, 0, r, 
-                      "[%d] auth_ldap authenticate: no sec->host - weird...?", getpid());
-        return sec->auth_authoritative? HTTP_UNAUTHORIZED : DECLINED;
-    }
-
-    ap_log_rerror(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r,
-		  "[%d] auth_ldap authenticate: using URL %s", getpid(), sec->url);
-
-    /* Get the password that the client sent */
-    if ((result = ap_get_basic_auth_pw(r, &sent_pw))) {
-        ap_log_rerror(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r,
-		      "[%d] auth_ldap authenticate: "
-		      "ap_get_basic_auth_pw() returns %d", getpid(), result);
-        util_ldap_connection_close(ldc);
-        return result;
-    }
-
-    /* build the username filter */
-    mod_auth_ldap_build_filter(filtbuf, r, sec);
-
-    /* do the user search */
-    result = util_ldap_cache_checkuserid(r, ldc, sec->url, sec->basedn, sec->scope,
-                                         sec->attributes, filtbuf, sent_pw, &dn, &vals);
-    util_ldap_connection_close(ldc);
-
-    if (result != LDAP_SUCCESS) {
-        ap_log_rerror(APLOG_MARK, APLOG_WARNING|APLOG_NOERRNO, 0, r, 
-                      "[%d] auth_ldap authenticate: "
-                      "user %s authentication failed; URI %s [%s][%s]",
-		      getpid(), r->user, r->uri, ldc->reason, ldap_err2string(result));
-        if (LDAP_INVALID_CREDENTIALS == result) {
-            ap_note_basic_auth_failure(r);
-            return HTTP_UNAUTHORIZED;
-        }
-        else {
-            return sec->auth_authoritative? HTTP_UNAUTHORIZED: DECLINED;
-        }
-    }
-
-    /* mark the user and DN */
-    req->dn = apr_pstrdup(r->pool, dn);
-    req->user = r->user;
-    if (sec->user_is_dn) {
-        r->user = req->dn;
-    }
-
-    /* add environment variables */
-    if (sec->attributes && vals) {
-        apr_table_t *e = r->subprocess_env;
-        int i = 0;
-        while (sec->attributes[i]) {
-            char *str = apr_pstrcat(r->pool, "AUTHENTICATE_", sec->attributes[i], NULL);
-            int j = 13;
-            while (str[j]) {
-                if (str[j] >= 'a' && str[j] <= 'z') {
-                    str[j] = str[j] - ('a' - 'A');
-                }
-                j++;
-            }
-            apr_table_setn(e, str, vals[i]);
-            i++;
-        }
-    }
-
-    ap_log_rerror(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r, 
-		  "[%d] auth_ldap authenticate: accepting %s", getpid(), r->user);
-
-    return OK;
-}
-
-
-/*
- * Authorisation Phase
- * -------------------
- *
- * After checking whether the username and password are correct, we need
- * to check whether that user is authorised to view this resource. The
- * require directive is used to do this:
- *
- *  require valid-user		Any authenticated is allowed in.
- *  require user <username>	This particular user is allowed in.
- *  require group <groupname>	The user must be a member of this group
- *                              in order to be allowed in.
- *  require dn <dn>             The user must have the following DN in the
- *                              LDAP tree to be let in.
- *
- */
-int mod_auth_ldap_auth_checker(request_rec *r)
-{
-    int result = 0;
-    mod_auth_ldap_request_t *req =
-        (mod_auth_ldap_request_t *)ap_get_module_config(r->request_config,
-        &auth_ldap_module);
-    mod_auth_ldap_config_t *sec =
-        (mod_auth_ldap_config_t *)ap_get_module_config(r->per_dir_config, 
-        &auth_ldap_module);
-
-    util_ldap_connection_t *ldc = NULL;
-    int m = r->method_number;
-
-    const apr_array_header_t *reqs_arr = ap_requires(r);
-    require_line *reqs = reqs_arr ? (require_line *)reqs_arr->elts : NULL;
-
-    register int x;
-    const char *t;
-    char *w;
-    int method_restricted = 0;
-
-    if (!sec->enabled) {
-        return DECLINED;
-    }
-
-    if (!sec->have_ldap_url) {
-        return DECLINED;
-    }
-
-    if (sec->host) {
-        ldc = util_ldap_connection_find(r, sec->host, sec->port,
-                                       sec->binddn, sec->bindpw, sec->deref,
-                                       sec->netscapessl, sec->starttls);
-    }
-    else {
-        ap_log_rerror(APLOG_MARK, APLOG_WARNING|APLOG_NOERRNO, 0, r, 
-                      "[%d] auth_ldap authorise: no sec->host - weird...?", getpid());
-        return sec->auth_authoritative? HTTP_UNAUTHORIZED : DECLINED;
-    }
-
-    /* 
-     * If there are no elements in the group attribute array, the default should be
-     * member and uniquemember; populate the array now.
-     */
-    if (sec->groupattr->nelts == 0) {
-        struct mod_auth_ldap_groupattr_entry_t *grp;
-        apr_thread_mutex_lock(sec->lock);
-        grp = apr_array_push(sec->groupattr);
-        grp->name = "member";
-        grp = apr_array_push(sec->groupattr);
-        grp->name = "uniquemember";
-        apr_thread_mutex_unlock(sec->lock);
-    }
-
-    if (!reqs_arr) {
-        ap_log_rerror(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r,
-		      "[%d] auth_ldap authorise: no requirements array", getpid());
-        return sec->auth_authoritative? HTTP_UNAUTHORIZED : DECLINED;
-    }
-
-    /* Loop through the requirements array until there's no elements
-     * left, or something causes a return from inside the loop */
-    for(x=0; x < reqs_arr->nelts; x++) {
-        if (! (reqs[x].method_mask & (1 << m))) {
-            continue;
-        }
-        method_restricted = 1;
-	
-        t = reqs[x].requirement;
-        w = ap_getword(r->pool, &t, ' ');
-    
-        if (strcmp(w, "valid-user") == 0) {
-            /*
-             * Valid user will always be true if we authenticated with ldap,
-             * but when using front page, valid user should only be true if
-             * he exists in the frontpage password file. This hack will get
-             * auth_ldap to look up the user in the the pw file to really be
-             * sure that he's valid. Naturally, it requires mod_auth to be
-             * compiled in, but if mod_auth wasn't in there, then the need
-             * for this hack wouldn't exist anyway.
-             */
-            if (sec->frontpage_hack) {
-	        ap_log_rerror(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r, 
-			      "[%d] auth_ldap authorise: "
-			      "deferring authorisation to mod_auth (FP Hack)", 
-			      getpid());
-                return OK;
-            }
-            else {
-                ap_log_rerror(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r, 
-                              "[%d] auth_ldap authorise: "
-                              "successful authorisation because user "
-                              "is valid-user", getpid());
-                return OK;
-            }
-        }
-        else if (strcmp(w, "user") == 0) {
-            if (req->dn == NULL || strlen(req->dn) == 0) {
-	        ap_log_rerror(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r,
-                              "[%d] auth_ldap authorise: "
-                              "require user: user's DN has not been defined; failing authorisation", 
-                              getpid());
-                return sec->auth_authoritative? HTTP_UNAUTHORIZED : DECLINED;
-            }
-            /* 
-             * First do a whole-line compare, in case it's something like
-             *   require user Babs Jensen
-             */
-            result = util_ldap_cache_compare(r, ldc, sec->url, req->dn, sec->attribute, t);
-            switch(result) {
-                case LDAP_COMPARE_TRUE: {
-                    ap_log_rerror(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r, 
-                                  "[%d] auth_ldap authorise: "
-                                  "require user: authorisation successful", getpid());
-                    return OK;
-                }
-                default: {
-                    ap_log_rerror(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r, 
-                                  "[%d] auth_ldap authorise: require user: "
-                                  "authorisation failed [%s][%s]", getpid(),
-                                  ldc->reason, ldap_err2string(result));
-                }
-            }
-            /* 
-             * Now break apart the line and compare each word on it 
-             */
-            while (t[0]) {
-	        w = ap_getword_conf(r->pool, &t);
-                result = util_ldap_cache_compare(r, ldc, sec->url, req->dn, sec->attribute, w);
-                switch(result) {
-                    case LDAP_COMPARE_TRUE: {
-                        ap_log_rerror(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r, 
-                                      "[%d] auth_ldap authorise: "
-                                      "require user: authorisation successful", getpid());
-                        return OK;
-                    }
-                    default: {
-                        ap_log_rerror(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r, 
-                                      "[%d] auth_ldap authorise: "
-                                      "require user: authorisation failed [%s][%s]",
-                                      getpid(), ldc->reason, ldap_err2string(result));
-                    }
-                }
-            }
-        }
-        else if (strcmp(w, "dn") == 0) {
-            if (req->dn == NULL || strlen(req->dn) == 0) {
-                ap_log_rerror(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r,
-                              "[%d] auth_ldap authorise: "
-                              "require dn: user's DN has not been defined; failing authorisation", 
-                              getpid());
-                return sec->auth_authoritative? HTTP_UNAUTHORIZED : DECLINED;
-            }
-
-            result = util_ldap_cache_comparedn(r, ldc, sec->url, req->dn, t, sec->compare_dn_on_server);
-            switch(result) {
-                case LDAP_COMPARE_TRUE: {
-                    ap_log_rerror(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r, 
-                                  "[%d] auth_ldap authorise: "
-                                  "require dn: authorisation successful", getpid());
-                    return OK;
-                }
-                default: {
-                    ap_log_rerror(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r, 
-                                  "[%d] auth_ldap authorise: "
-                                  "require dn: LDAP error [%s][%s]",
-                                  getpid(), ldc->reason, ldap_err2string(result));
-                }
-            }
-        }
-        else if (strcmp(w, "group") == 0) {
-            struct mod_auth_ldap_groupattr_entry_t *ent = (struct mod_auth_ldap_groupattr_entry_t *) sec->groupattr->elts;
-            int i;
-
-            if (sec->group_attrib_is_dn) {
-                if (req->dn == NULL || strlen(req->dn) == 0) {
-                    ap_log_rerror(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r,
-                                  "[%d] auth_ldap authorise: require group: user's DN has not been defined; failing authorisation", 
-                                  getpid());
-                    return sec->auth_authoritative? HTTP_UNAUTHORIZED : DECLINED;
-                }
-            }
-            else {
-                if (req->user == NULL || strlen(req->user) == 0) {
-	            /* We weren't called in the authentication phase, so we didn't have a 
-                     * chance to set the user field. Do so now. */
-                    req->user = r->user;
-                }
-            }
-
-            ap_log_rerror(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r, 
-                          "[%d] auth_ldap authorise: require group: testing for group membership in `%s'", 
-		          getpid(), t);
-
-            for (i = 0; i < sec->groupattr->nelts; i++) {
-	        ap_log_rerror(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r, 
-                              "[%d] auth_ldap authorise: require group: testing for %s: %s (%s)", getpid(),
-                              ent[i].name, sec->group_attrib_is_dn ? req->dn : req->user, t);
-
-                result = util_ldap_cache_compare(r, ldc, sec->url, t, ent[i].name, 
-                                     sec->group_attrib_is_dn ? req->dn : req->user);
-                switch(result) {
-                    case LDAP_COMPARE_TRUE: {
-                        ap_log_rerror(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r, 
-                                      "[%d] auth_ldap authorise: require group: "
-                                      "authorisation successful (attribute %s) [%s][%s]",
-                                      getpid(), ent[i].name, ldc->reason, ldap_err2string(result));
-                        return OK;
-                    }
-                    default: {
-                        ap_log_rerror(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r, 
-                                      "[%d] auth_ldap authorise: require group: "
-                                      "authorisation failed [%s][%s]",
-                                      getpid(), ldc->reason, ldap_err2string(result));
-                    }
-                }
-            }
-        }
-    }
-
-    if (!method_restricted) {
-        ap_log_rerror(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r, 
-                      "[%d] auth_ldap authorise: agreeing because non-restricted", 
-                      getpid());
-        return OK;
-    }
-
-    if (!sec->auth_authoritative) {
-        ap_log_rerror(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r, 
-                      "[%d] auth_ldap authorise: declining to authorise", getpid());
-        return DECLINED;
-    }
-
-    ap_log_rerror(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r, 
-                  "[%d] auth_ldap authorise: authorisation denied", getpid());
-    ap_note_basic_auth_failure (r);
-
-    return HTTP_UNAUTHORIZED;
-}
-
-
-/* ---------------------------------------- */
-/* config directives */
-
-
-void *mod_auth_ldap_create_dir_config(apr_pool_t *p, char *d)
-{
-    mod_auth_ldap_config_t *sec = 
-        (mod_auth_ldap_config_t *)apr_pcalloc(p, sizeof(mod_auth_ldap_config_t));
-
-    sec->pool = p;
-    apr_thread_mutex_create(&sec->lock, APR_THREAD_MUTEX_DEFAULT, p);
-    sec->auth_authoritative = 1;
-    sec->enabled = 1;
-    sec->groupattr = apr_array_make(p, GROUPATTR_MAX_ELTS, 
-				   sizeof(struct mod_auth_ldap_groupattr_entry_t));
-
-    sec->have_ldap_url = 0;
-    sec->url = "";
-    sec->host = NULL;
-    sec->binddn = NULL;
-    sec->bindpw = NULL;
-    sec->deref = always;
-    sec->group_attrib_is_dn = 1;
-
-    sec->frontpage_hack = 0;
-    sec->netscapessl = 0;
-    sec->starttls = 0;
-
-    sec->user_is_dn = 0;
-    sec->compare_dn_on_server = 0;
-
-    return sec;
-}
-
-/* 
- * Use the ldap url parsing routines to break up the ldap url into
- * host and port.
- */
-static const char *mod_auth_ldap_parse_url(cmd_parms *cmd, 
-                                    void *config,
-                                    const char *url)
-{
-    int result;
-    LDAPURLDesc *urld;
-
-    mod_auth_ldap_config_t *sec = config;
-
-    ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0,
-	         cmd->server, "[%d] auth_ldap url parse: `%s'", 
-	         getpid(), url);
-
-    result = ldap_url_parse(url, &(urld));
-    if (result != LDAP_SUCCESS) {
-        switch (result) {
-        case LDAP_URL_ERR_NOTLDAP:
-            return "LDAP URL does not begin with ldap://";
-        case LDAP_URL_ERR_NODN:
-            return "LDAP URL does not have a DN";
-        case LDAP_URL_ERR_BADSCOPE:
-            return "LDAP URL has an invalid scope";
-        case LDAP_URL_ERR_MEM:
-            return "Out of memory parsing LDAP URL";
-        default:
-            return "Could not parse LDAP URL";
-        }
-    }
-    sec->url = apr_pstrdup(cmd->pool, url);
-
-    ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0,
-	         cmd->server, "[%d] auth_ldap url parse: Host: %s", getpid(), urld->lud_host);
-    ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0,
-	         cmd->server, "[%d] auth_ldap url parse: Port: %d", getpid(), urld->lud_port);
-    ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0,
-	         cmd->server, "[%d] auth_ldap url parse: DN: %s", getpid(), urld->lud_dn);
-    ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0,
-	         cmd->server, "[%d] auth_ldap url parse: attrib: %s", getpid(), urld->lud_attrs? urld->lud_attrs[0] : "(null)");
-    ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0,
-	         cmd->server, "[%d] auth_ldap url parse: scope: %s", getpid(), 
-	         (urld->lud_scope == LDAP_SCOPE_SUBTREE? "subtree" : 
-		 urld->lud_scope == LDAP_SCOPE_BASE? "base" : 
-		 urld->lud_scope == LDAP_SCOPE_ONELEVEL? "onelevel" : "unknown"));
-    ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0,
-	         cmd->server, "[%d] auth_ldap url parse: filter: %s", getpid(), urld->lud_filter);
-
-    /* Set all the values, or at least some sane defaults */
-    if (sec->host) {
-        char *p = apr_palloc(cmd->pool, strlen(sec->host) + strlen(urld->lud_host) + 2);
-        strcpy(p, urld->lud_host);
-        strcat(p, " ");
-        strcat(p, sec->host);
-        sec->host = p;
-    }
-    else {
-        sec->host = urld->lud_host? apr_pstrdup(cmd->pool, urld->lud_host) : "localhost";
-    }
-    sec->basedn = urld->lud_dn? apr_pstrdup(cmd->pool, urld->lud_dn) : "";
-    if (urld->lud_attrs && urld->lud_attrs[0]) {
-        int i = 1;
-        while (urld->lud_attrs[i]) {
-            i++;
-        }
-        sec->attributes = apr_pcalloc(cmd->pool, sizeof(char *) * (i+1));
-        i = 0;
-        while (urld->lud_attrs[i]) {
-            sec->attributes[i] = apr_pstrdup(cmd->pool, urld->lud_attrs[i]);
-            i++;
-        }
-        sec->attribute = sec->attributes[0];
-    }
-    else {
-        sec->attribute = "uid";
-    }
-
-    sec->scope = urld->lud_scope == LDAP_SCOPE_ONELEVEL ?
-        LDAP_SCOPE_ONELEVEL : LDAP_SCOPE_SUBTREE;
-
-    if (urld->lud_filter) {
-        if (urld->lud_filter[0] == '(') {
-            /* 
-	     * Get rid of the surrounding parens; later on when generating the
-	     * filter, they'll be put back.
-             */
-            sec->filter = apr_pstrdup(cmd->pool, urld->lud_filter+1);
-            sec->filter[strlen(sec->filter)-1] = '\0';
-        }
-        else {
-            sec->filter = apr_pstrdup(cmd->pool, urld->lud_filter);
-        }
-    }
-    else {
-        sec->filter = "objectclass=*";
-    }
-    if (strncmp(url, "ldaps", 5) == 0) {
-        ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0,
-		     cmd->server, "[%d] auth_ldap parse url: requesting secure LDAP", getpid());
-#ifdef APU_HAS_LDAP_STARTTLS
-        sec->port = urld->lud_port? urld->lud_port : LDAPS_PORT;
-        sec->starttls = 1;
-#else
-#ifdef APU_HAS_LDAP_NETSCAPE_SSL
-        sec->port = urld->lud_port? urld->lud_port : LDAPS_PORT;
-        sec->netscapessl = 1;
-#else
-        return "Secure LDAP (ldaps://) not supported. Rebuild APR-Util";
-#endif
-#endif
-    }
-    else {
-        ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0,
-		     cmd->server, "[%d] auth_ldap parse url: not requesting secure LDAP", getpid());
-        sec->netscapessl = 0;
-        sec->starttls = 0;
-        sec->port = urld->lud_port? urld->lud_port : LDAP_PORT;
-    }
-
-    sec->have_ldap_url = 1;
-    ldap_free_urldesc(urld);
-    return NULL;
-}
-
-static const char *mod_auth_ldap_set_deref(cmd_parms *cmd, void *config, const char *arg)
-{
-    mod_auth_ldap_config_t *sec = config;
-
-    if (strcmp(arg, "never") == 0 || strcasecmp(arg, "off") == 0) {
-        sec->deref = never;
-    }
-    else if (strcmp(arg, "searching") == 0) {
-        sec->deref = searching;
-    }
-    else if (strcmp(arg, "finding") == 0) {
-        sec->deref = finding;
-    }
-    else if (strcmp(arg, "always") == 0 || strcasecmp(arg, "on") == 0) {
-        sec->deref = always;
-    }
-    else {
-        return "Unrecognized value for AuthLDAPAliasDereference directive";
-    }
-    return NULL;
-}
-
-static const char *mod_auth_ldap_add_group_attribute(cmd_parms *cmd, void *config, const char *arg)
-{
-    struct mod_auth_ldap_groupattr_entry_t *new;
-
-    mod_auth_ldap_config_t *sec = config;
-
-    if (sec->groupattr->nelts > GROUPATTR_MAX_ELTS)
-        return "Too many AuthLDAPGroupAttribute directives";
-
-    new = apr_array_push(sec->groupattr);
-    new->name = apr_pstrdup(cmd->pool, arg);
-  
-    return NULL;
-}
-
-command_rec mod_auth_ldap_cmds[] = {
-    AP_INIT_TAKE1("AuthLDAPURL", mod_auth_ldap_parse_url, NULL, OR_AUTHCFG, 
-                  "URL to define LDAP connection. This should be an RFC 2255 complaint\n"
-                  "URL of the form ldap://host[:port]/basedn[?attrib[?scope[?filter]]].\n"
-                  "<ul>\n"
-                  "<li>Host is the name of the LDAP server. Use a space separated list of hosts \n"
-                  "to specify redundant servers.\n"
-                  "<li>Port is optional, and specifies the port to connect to.\n"
-                  "<li>basedn specifies the base DN to start searches from\n"
-                  "<li>Attrib specifies what attribute to search for in the directory. If not "
-                  "provided, it defaults to <b>uid</b>.\n"
-                  "<li>Scope is the scope of the search, and can be either <b>sub</b> or "
-                  "<b>one</b>. If not provided, the default is <b>sub</b>.\n"
-                  "<li>Filter is a filter to use in the search. If not provided, "
-                  "defaults to <b>(objectClass=*)</b>.\n"
-                  "</ul>\n"
-                  "Searches are performed using the attribute and the filter combined. "
-                  "For example, assume that the\n"
-                  "LDAP URL is <b>ldap://ldap.airius.com/ou=People, o=Airius?uid?sub?(posixid=*)</b>. "
-                  "Searches will\n"
-                  "be done using the filter <b>(&((posixid=*))(uid=<i>username</i>))</b>, "
-                  "where <i>username</i>\n"
-                  "is the user name passed by the HTTP client. The search will be a subtree "
-                  "search on the branch <b>ou=People, o=Airius</b>."),
-
-    AP_INIT_TAKE1("AuthLDAPBindDN", ap_set_string_slot,
-                  (void *)APR_XtOffsetOf(mod_auth_ldap_config_t, binddn), OR_AUTHCFG,
-                  "DN to use to bind to LDAP server. If not provided, will do an anonymous bind."),
-
-    AP_INIT_TAKE1("AuthLDAPBindPassword", ap_set_string_slot,
-                  (void *)APR_XtOffsetOf(mod_auth_ldap_config_t, bindpw), OR_AUTHCFG,
-                  "Password to use to bind to LDAP server. If not provided, will do an anonymous bind."),
-
-    AP_INIT_FLAG("AuthLDAPRemoteUserIsDN", ap_set_flag_slot,
-                 (void *)APR_XtOffsetOf(mod_auth_ldap_config_t, user_is_dn), OR_AUTHCFG,
-                 "Set to 'on' to set the REMOTE_USER environment variable to be the full "
-                 "DN of the remote user. By default, this is set to off, meaning that "
-                 "the REMOTE_USER variable will contain whatever value the remote user sent."),
-
-    AP_INIT_FLAG("AuthLDAPAuthoritative", ap_set_flag_slot,
-                 (void *)APR_XtOffsetOf(mod_auth_ldap_config_t, auth_authoritative), OR_AUTHCFG,
-                 "Set to 'off' to allow access control to be passed along to lower modules if "
-                 "the UserID and/or group is not known to this module"),
-
-    AP_INIT_FLAG("AuthLDAPCompareDNOnServer", ap_set_flag_slot,
-                 (void *)APR_XtOffsetOf(mod_auth_ldap_config_t, compare_dn_on_server), OR_AUTHCFG,
-                 "Set to 'on' to force auth_ldap to do DN compares (for the \"require dn\" "
-                 "directive) using the server, and set it 'off' to do the compares locally "
-                 "(at the expense of possible false matches). See the documentation for "
-                 "a complete description of this option."),
-
-    AP_INIT_ITERATE("AuthLDAPGroupAttribute", mod_auth_ldap_add_group_attribute, NULL, OR_AUTHCFG,
-                    "A list of attributes used to define group membership - defaults to "
-                    "member and uniquemember"),
-
-    AP_INIT_FLAG("AuthLDAPGroupAttributeIsDN", ap_set_flag_slot,
-                 (void *)APR_XtOffsetOf(mod_auth_ldap_config_t, group_attrib_is_dn), OR_AUTHCFG,
-                 "If set to 'on', auth_ldap uses the DN that is retrieved from the server for"
-                 "subsequent group comparisons. If set to 'off', auth_ldap uses the string"
-                 "provided by the client directly. Defaults to 'on'."),
-
-    AP_INIT_TAKE1("AuthLDAPDereferenceAliases", mod_auth_ldap_set_deref, NULL, OR_AUTHCFG,
-                  "Determines how aliases are handled during a search. Can bo one of the"
-                  "values \"never\", \"searching\", \"finding\", or \"always\". "
-                  "Defaults to always."),
-
-    AP_INIT_FLAG("AuthLDAPEnabled", ap_set_flag_slot,
-                 (void *)APR_XtOffsetOf(mod_auth_ldap_config_t, enabled), OR_AUTHCFG,
-                 "Set to off to disable auth_ldap, even if it's been enabled in a higher tree"),
- 
-    AP_INIT_FLAG("AuthLDAPFrontPageHack", ap_set_flag_slot,
-                 (void *)APR_XtOffsetOf(mod_auth_ldap_config_t, frontpage_hack), OR_AUTHCFG,
-                 "Set to 'on' to support Microsoft FrontPage"),
-
-#ifdef APU_HAS_LDAP_STARTTLS
-    AP_INIT_FLAG("AuthLDAPStartTLS", ap_set_flag_slot,
-                 (void *)APR_XtOffsetOf(mod_auth_ldap_config_t, starttls), OR_AUTHCFG,
-                 "Set to 'on' to start TLS after connecting to the LDAP server."),
-#endif /* APU_HAS_LDAP_STARTTLS */
-
-    {NULL}
-};
-
-static void mod_auth_ldap_register_hooks(apr_pool_t *p)
-{
-    ap_hook_check_user_id(mod_auth_ldap_check_user_id, NULL, NULL, APR_HOOK_MIDDLE);
-    ap_hook_auth_checker(mod_auth_ldap_auth_checker, NULL, NULL, APR_HOOK_MIDDLE);
-}
-
-module auth_ldap_module = {
-   STANDARD20_MODULE_STUFF,
-   mod_auth_ldap_create_dir_config,	/* dir config creater */
-   NULL,				/* dir merger --- default is to override */
-   NULL,				/* server config */
-   NULL,				/* merge server config */
-   mod_auth_ldap_cmds,			/* command table */
-   mod_auth_ldap_register_hooks,	/* set up request processing hooks */
-};
diff --git a/modules/experimental/mod_auth_ldap.def b/modules/experimental/mod_auth_ldap.def
deleted file mode 100644
index 599636f..0000000
--- a/modules/experimental/mod_auth_ldap.def
+++ /dev/null
@@ -1,6 +0,0 @@
-IMPORT  util_ldap_connection_find
-IMPORT  util_ldap_connection_close
-IMPORT  util_ldap_cache_checkuserid
-IMPORT  util_ldap_cache_compare
-IMPORT  util_ldap_cache_comparedn
-EXPORT  auth_ldap_module
diff --git a/modules/experimental/mod_cache.c b/modules/experimental/mod_cache.c
deleted file mode 100644
index 964950f..0000000
--- a/modules/experimental/mod_cache.c
+++ /dev/null
@@ -1,995 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-#define CORE_PRIVATE
-
-#include "mod_cache.h"
-
-module AP_MODULE_DECLARE_DATA cache_module;
-APR_OPTIONAL_FN_TYPE(ap_cache_generate_key) *cache_generate_key;
-
-/* -------------------------------------------------------------- */
-
-
-
-/*
- * CACHE handler
- * -------------
- *
- * Can we deliver this request from the cache?
- * If yes:
- *   deliver the content by installing the CACHE_OUT filter.
- * If no:
- *   check whether we're allowed to try cache it
- *   If yes:
- *     add CACHE_IN filter
- *   If No:
- *     oh well.
- */
-
-static int cache_url_handler(request_rec *r)
-{
-    apr_status_t rv;
-    const char *cc_in, *pragma, *auth;
-    apr_uri_t uri = r->parsed_uri;
-    char *url = r->unparsed_uri;
-    apr_size_t urllen;
-    char *path = uri.path;
-    const char *types;
-    cache_info *info = NULL;
-    cache_request_rec *cache;
-    cache_server_conf *conf = 
-        (cache_server_conf *) ap_get_module_config(r->server->module_config, 
-                                                   &cache_module);
-
-    /* we don't handle anything but GET */
-    if (r->method_number != M_GET) return DECLINED;
-
-    /*
-     * Which cache module (if any) should handle this request?
-     */
-    if (!(types = ap_cache_get_cachetype(r, conf, path))) {
-        return DECLINED;
-    }
-    ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, 0, r->server,
-                 "cache: URL %s is being handled by %s", path, types);
-
-    urllen = strlen(url);
-    if (urllen > MAX_URL_LENGTH) {
-        ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, 0, r->server,
-                     "cache: URL exceeds length threshold: %s", url);
-        return DECLINED;
-    }
-    /* DECLINE urls ending in / */
-    if (url[urllen-1] == '/') {
-        return DECLINED;
-    }
-
-    /* make space for the per request config */
-    cache = (cache_request_rec *) ap_get_module_config(r->request_config, 
-                                                       &cache_module);
-    if (!cache) {
-        cache = ap_pcalloc(r->pool, sizeof(cache_request_rec));
-        ap_set_module_config(r->request_config, &cache_module, cache);
-    }
-
-    /* save away the type */
-    cache->types = types;
-
-    /*
-     * Are we allowed to serve cached info at all?
-     */
-
-    /* find certain cache controlling headers */
-    cc_in = apr_table_get(r->headers_in, "Cache-Control");
-    pragma = apr_table_get(r->headers_in, "Pragma");
-    auth = apr_table_get(r->headers_in, "Authorization");
-
-    /* first things first - does the request allow us to return
-     * cached information at all? If not, just decline the request.
-     *
-     * Note that there is a big difference between not being allowed
-     * to cache a request (no-store) and not being allowed to return
-     * a cached request without revalidation (max-age=0).
-     *
-     * Caching is forbidden under the following circumstances:
-     *
-     * - RFC2616 14.9.2 Cache-Control: no-store
-     * - Pragma: no-cache
-     * - Any requests requiring authorization.
-     * - Any URLs whose length exceeds MAX_URL_LENGTH
-     * - TODO: Make MAX_URL_LENGTH a config directive?
-     */
-    if (conf->ignorecachecontrol_set == 1 && conf->ignorecachecontrol == 1 && auth == NULL) {
-        ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, 0, r->server,
-            "incoming request is asking for a uncached version of %s, but we know better and are ignoring it", url);
-    }
-    else {
-        if (ap_cache_liststr(cc_in, "no-store", NULL) ||
-            ap_cache_liststr(pragma, "no-cache", NULL) || (auth != NULL)) {
-            /* delete the previously cached file */
-            cache_remove_url(r, cache->types, url);
-
-            ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, 0, r->server,
-                        "cache: no-store forbids caching of %s", url);
-            return DECLINED;
-        }
-    }
-
-    /*
-     * Try serve this request from the cache.
-     *
-     * If no existing cache file
-     *   add cache_in filter
-     * If stale cache file
-     *   If conditional request
-     *     add cache_in filter
-     *   If non-conditional request
-     *     fudge response into a conditional
-     *     add cache_conditional filter
-     * If fresh cache file
-     *   clear filter stack
-     *   add cache_out filter
-     */
-
-    rv = cache_select_url(r, cache->types, url);
-    if (DECLINED == rv) {
-        /* no existing cache file */
-        ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, 0, r->server,
-                     "cache: no cache - add cache_in filter and DECLINE");
-        /* add cache_in filter to cache this request */
-        ap_add_output_filter("CACHE_IN", NULL, r, r->connection);
-        /* return DECLINED */
-        return DECLINED;
-    }
-    else if (OK == rv) {
-        /* cache file exists */
-        if (cache->fresh) {
-            apr_bucket_brigade *out;
-
-            /* fresh data available */
-            ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, 0, r->server,
-                         "cache: fresh cache - add cache_out filter and "
-                         "handle request");
-
-            /* We are in the quick handler hook, which means that no output
-             * filters have been set. So lets run the insert_filter hook.
-             * XXX - Should we be inserting filters in the output stream
-             * for proxy requests? Certainly we need the core filters
-             * (byterange, chunking, etc.).  I can also see the need to
-             * conditionally insert tag processing filters (e.g. INCLUDES).
-             */
-            ap_run_insert_filter(r);
-
-            /* Now add the cache_out filter. cache_out is a FTYPE_CONTENT
-             * which means it will be inserted first in the stream, which
-             * is exactly what we need.
-             */
-            ap_add_output_filter("CACHE_OUT", NULL, r, r->connection);
-
-            /* kick off the filter stack */
-            out = apr_brigade_create(r->pool);
-            if (APR_SUCCESS != (rv = ap_pass_brigade(r->output_filters, out))) {
-                ap_log_error(APLOG_MARK, APLOG_ERR, rv, r->server,
-                             "cache: error returned while trying to return %s "
-                             "cached data", 
-                             cache->type);
-                return rv;
-            }
-            return OK;
-        }
-        else {
-            /* stale data available */
-            ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, 0, r->server,
-                         "cache: stale cache - test conditional");
-            /* if conditional request */
-            if (ap_cache_request_is_conditional(r)) {
-                ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, 0, 
-                             r->server,
-                             "cache: conditional - add cache_in filter and "
-                             "DECLINE");
-                /* add cache_in filter */
-                ap_add_output_filter("CACHE_IN", NULL, r, r->connection);
-                /* return DECLINED */
-                return DECLINED;
-            }
-            /* else if non-conditional request */
-            else {
-                /* fudge response into a conditional */
-                if (info && info->etag) {
-                    ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, 0, 
-                                 r->server,
-                                 "cache: nonconditional - fudge conditional "
-                                 "by etag");
-                    /* if we have a cached etag */
-                    apr_table_set(r->headers_in, "If-None-Match", info->etag);
-                }
-                else if (info && info->lastmods) {
-                    ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, 0, 
-                                 r->server,
-                                 "cache: nonconditional - fudge conditional "
-                                 "by lastmod");
-                    /* if we have a cached IMS */
-                    apr_table_set(r->headers_in, 
-                                  "If-Modified-Since", 
-                                  info->lastmods);
-                }
-                else {
-                    /* something else - pretend there was no cache */
-                    ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, 0, 
-                                 r->server,
-                                 "cache: nonconditional - no cached "
-                                 "etag/lastmods - add cache_in and DECLINE");
-                    /* add cache_in filter to cache this request */
-                    ap_add_output_filter("CACHE_IN", NULL, r, r->connection);
-                    /* return DECLINED */
-                    return DECLINED;
-                }
-                /* add cache_conditional filter */
-                ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, 0, 
-                             r->server,
-                             "cache: nonconditional - add cache_conditional and"
-                             " DECLINE");
-                ap_add_output_filter("CACHE_CONDITIONAL", 
-                                     NULL, 
-                                     r, 
-                                     r->connection);
-                /* return DECLINED */
-                return DECLINED;
-            }
-        }
-    }
-    else {
-        /* error */
-        ap_log_error(APLOG_MARK, APLOG_ERR, rv, 
-                     r->server,
-                     "cache: error returned while checking for cached file by "
-                     "%s cache", 
-                     cache->type);
-        return DECLINED;
-    }
-}
-
-/*
- * CACHE_OUT filter
- * ----------------
- *
- * Deliver cached content (headers and body) up the stack.
- */
-static int cache_out_filter(ap_filter_t *f, apr_bucket_brigade *bb)
-{
-    request_rec *r = f->r;
-    cache_request_rec *cache = 
-        (cache_request_rec *) ap_get_module_config(r->request_config, 
-                                                   &cache_module);
-
-    if (!cache) {
-        /* user likely configured CACHE_OUT manually; they should use mod_cache
-         * configuration to do that */
-        ap_log_error(APLOG_MARK, APLOG_ERR, 0, r->server,
-                     "CACHE_OUT enabled unexpectedly");
-        ap_remove_output_filter(f);
-        return ap_pass_brigade(f->next, bb);
-    }
-
-    ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, 0, r->server,
-            "cache: running CACHE_OUT filter");
-
-    /* TODO: Handle getting errors on either of these calls */
-    cache_read_entity_headers(cache->handle, r);    
-    cache_read_entity_body(cache->handle, r->pool, bb);
-
-    /* This filter is done once it has served up its content */
-    ap_remove_output_filter(f);
-
-    ap_log_error(APLOG_MARK, APLOG_INFO | APLOG_NOERRNO, 0, r->server,
-            "cached version of %s being served", r->uri);
-    return ap_pass_brigade(f->next, bb);
-}
-
-
-/*
- * CACHE_CONDITIONAL filter
- * ------------------------
- *
- * Decide whether or not cached content should be delivered
- * based on our fudged conditional request.
- * If response HTTP_NOT_MODIFIED
- *   replace ourselves with cache_out filter
- * Otherwise
- *   replace ourselves with cache_in filter
- */
-
-static int cache_conditional_filter(ap_filter_t *f, apr_bucket_brigade *in)
-{
-    ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, 0, f->r->server,
-                 "cache: running CACHE_CONDITIONAL filter");
-
-    if (f->r->status == HTTP_NOT_MODIFIED) {
-        /* replace ourselves with CACHE_OUT filter */
-        ap_add_output_filter("CACHE_OUT", NULL, f->r, f->r->connection);
-    }
-    else {
-        /* replace ourselves with CACHE_IN filter */
-        ap_add_output_filter("CACHE_IN", NULL, f->r, f->r->connection);
-    }
-    ap_remove_output_filter(f);
-
-    return ap_pass_brigade(f->next, in);
-}
-
-
-/*
- * CACHE_IN filter
- * ---------------
- *
- * Decide whether or not this content should be cached.
- * If we decide no it should:
- *   remove the filter from the chain
- * If we decide yes it should:
- *   pass the data to the storage manager
- *   pass the data to the next filter (the network)
- *
- */
-
-static int cache_in_filter(ap_filter_t *f, apr_bucket_brigade *in)
-{
-    int rv;
-    request_rec *r = f->r;
-    char *url = r->unparsed_uri;
-    const char *cc_out = ap_table_get(r->headers_out, "Cache-Control");
-    const char *exps, *lastmods, *dates, *etag;
-    apr_time_t exp, date, lastmod, now;
-    apr_size_t size;
-    cache_info *info;
-    void *sconf = r->server->module_config;
-    cache_server_conf *conf =
-    (cache_server_conf *) ap_get_module_config(sconf, &cache_module);
-    void *scache = r->request_config;
-    cache_request_rec *cache =
-    (cache_request_rec *) ap_get_module_config(scache, &cache_module);
-
-
-    ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, 0, f->r->server,
-                 "cache: running CACHE_IN filter");
-
-    /* check first whether running this filter has any point or not */
-    if(r->no_cache) {
-        ap_remove_output_filter(f);
-        return ap_pass_brigade(f->next, in);
-    }
-
-    /* make space for the per request config 
-     * We hit this code path when CACHE_IN has been installed by someone
-     * other than the cache handler
-     */
-    if (!cache) {
-        cache = ap_pcalloc(r->pool, sizeof(cache_request_rec));
-        ap_set_module_config(r->request_config, &cache_module, cache);
-    }
-
-    /*
-     * Pass Data to Cache
-     * ------------------
-     * This section passes the brigades into the cache modules, but only
-     * if the setup section (see below) is complete.
-     */
-
-    /* have we already run the cachability check and set up the cached file 
-     * handle? 
-     */
-    if (cache->in_checked) {
-        /* pass the brigades into the cache, then pass them
-         * up the filter stack
-         */
-        rv = cache_write_entity_body(cache->handle, r, in);
-        if (rv != APR_SUCCESS) {
-            ap_remove_output_filter(f);
-        }
-        return ap_pass_brigade(f->next, in);
-    }
-
-    /*
-     * Setup Data in Cache
-     * -------------------
-     * This section opens the cache entity and sets various caching parameters,
-     * and decides whether this URL should be cached at all. This section is
-     * run before the above section.
-     */
-    info = ap_pcalloc(r->pool, sizeof(cache_info));
-
-    /* read expiry date; if a bad date, then leave it so the client can
-     * read it 
-     */
-    exps = ap_table_get(r->headers_out, "Expires");
-    if (exps != NULL) {
-        if (APR_DATE_BAD == (exp = apr_date_parse_http(exps))) {
-            exps = NULL;
-        }
-    }
-    else {
-        exp = APR_DATE_BAD;
-    }
-
-    /* read the last-modified date; if the date is bad, then delete it */
-    lastmods = ap_table_get(r->headers_out, "Last-Modified");
-    if (lastmods != NULL) {
-        if (APR_DATE_BAD == (lastmod = apr_date_parse_http(lastmods))) {
-            lastmods = NULL;
-        }
-    }
-    else {
-        lastmod = APR_DATE_BAD;
-    }
-
-    /* read the etag from the entity */
-    etag = ap_table_get(r->headers_out, "Etag");
-
-    /*
-     * what responses should we not cache?
-     *
-     * At this point we decide based on the response headers whether it
-     * is appropriate _NOT_ to cache the data from the server. There are
-     * a whole lot of conditions that prevent us from caching this data.
-     * They are tested here one by one to be clear and unambiguous. 
-     */
-
-    /* RFC2616 13.4 we are allowed to cache 200, 203, 206, 300, 301 or 410
-     * We don't cache 206, because we don't (yet) cache partial responses.
-     * We include 304 Not Modified here too as this is the origin server
-     * telling us to serve the cached copy. */
-    if ((r->status != HTTP_OK && r->status != HTTP_NON_AUTHORITATIVE && 
-         r->status != HTTP_MULTIPLE_CHOICES && 
-         r->status != HTTP_MOVED_PERMANENTLY && 
-         r->status != HTTP_NOT_MODIFIED) ||
-
-    /* if a broken Expires header is present, don't cache it */
-        (exps != NULL && exp == APR_DATE_BAD) ||
-
-    /* if the server said 304 Not Modified but we have no cache file - pass
-     * this untouched to the user agent, it's not for us. */
-        (r->status == HTTP_NOT_MODIFIED && (NULL == cache->handle)) ||
-
-    /* 200 OK response from HTTP/1.0 and up without a Last-Modified header/Etag 
-     */
-    /* XXX mod-include clears last_modified/expires/etags - this is why we have
-     * a optional function for a key-gen ;-) 
-     */
-        (r->status == HTTP_OK && lastmods == NULL && etag == NULL 
-            && (conf->no_last_mod_ignore ==0)) ||
-
-    /* HEAD requests */
-        r->header_only ||
-
-    /* RFC2616 14.9.2 Cache-Control: no-store response indicating do not
-     * cache, or stop now if you are trying to cache it */
-        ap_cache_liststr(cc_out, "no-store", NULL) ||
-
-    /* RFC2616 14.9.1 Cache-Control: private
-     * this object is marked for this user's eyes only. Behave as a tunnel. */
-        ap_cache_liststr(cc_out, "private", NULL) ||
-
-    /* RFC2616 14.8 Authorisation:
-     * if authorisation is included in the request, we don't cache, but we
-     * can cache if the following exceptions are true:
-     * 1) If Cache-Control: s-maxage is included
-     * 2) If Cache-Control: must-revalidate is included
-     * 3) If Cache-Control: public is included
-     */
-        (ap_table_get(r->headers_in, "Authorization") != NULL &&
-         !(ap_cache_liststr(cc_out, "s-maxage", NULL) || 
-           ap_cache_liststr(cc_out, "must-revalidate", NULL) || 
-           ap_cache_liststr(cc_out, "public", NULL))
-        ) ||
-
-    /* or we've been asked not to cache it above */
-        r->no_cache) {
-
-        ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, 0, r->server,
-                 "cache: response is not cachable");
-
-        /* remove this object from the cache 
-         * BillS Asks.. Why do we need to make this call to remove_url?
-         * leave it in for now..
-         */
-        cache_remove_url(r, cache->types, url);
-
-        /* remove this filter from the chain */
-        ap_remove_output_filter(f);
-
-        /* ship the data up the stack */
-        return ap_pass_brigade(f->next, in);
-    }
-    cache->in_checked = 1;
-
-    /* Set the content length if known.  We almost certainly do NOT want to
-     * cache streams with unknown content lengths in the in-memory cache.
-     * Streams with unknown content length should be first cached in the
-     * file system. If they are withing acceptable limits, then they can be 
-     * moved to the in-memory cache.
-     */
-    {
-        const char* cl;
-        cl = apr_table_get(r->headers_out, "Content-Length");
-        if (cl) {
-            size = atol(cl);
-        }
-        else {
-
-            /* if we don't get the content-length, see if we have all the 
-             * buckets and use their length to calculate the size 
-             */
-            apr_bucket *e;
-            int all_buckets_here=0;
-            size=0;
-            APR_BRIGADE_FOREACH(e, in) {
-                if (APR_BUCKET_IS_EOS(e)) {
-                    all_buckets_here=1;
-                    break;
-                }
-                if (APR_BUCKET_IS_FLUSH(e)) {
-                    continue;
-                }
-                if (e->length < 0) {
-                    break;
-                }
-                size += e->length;
-            }
-
-            if (!all_buckets_here) {
-                size = -1;
-            }
-        }
-    }
-
-    /* It's safe to cache the response.
-     *
-     * There are two possiblities at this point:
-     * - cache->handle == NULL. In this case there is no previously
-     * cached entity anywhere on the system. We must create a brand
-     * new entity and store the response in it.
-     * - cache->handle != NULL. In this case there is a stale
-     * entity in the system which needs to be replaced by new
-     * content (unless the result was 304 Not Modified, which means
-     * the cached entity is actually fresh, and we should update
-     * the headers).
-     */
-    /* no cache handle, create a new entity */
-    if (!cache->handle) {
-        rv = cache_create_entity(r, cache->types, url, size);
-    }
-    /* pre-existing cache handle and 304, make entity fresh */
-    else if (r->status == HTTP_NOT_MODIFIED) {
-        /* update headers */
-
-        /* remove this filter ??? */
-
-        /* XXX is this right?  we must set rv to something other than OK 
-         * in this path
-         */
-        rv = HTTP_NOT_MODIFIED;
-    }
-    /* pre-existing cache handle and new entity, replace entity with this one */
-    else {
-        cache_remove_entity(r, cache->types, cache->handle);
-        rv = cache_create_entity(r, cache->types, url, size);
-    }
-    
-    if (rv != OK) {
-        /* Caching layer declined the opportunity to cache the response */
-        ap_remove_output_filter(f);
-        return ap_pass_brigade(f->next, in);
-    }
-
-    ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, 0, r->server,
-                 "cache: Caching url: %s", url);
-
-    /*
-     * We now want to update the cache file header information with
-     * the new date, last modified, expire and content length and write
-     * it away to our cache file. First, we determine these values from
-     * the response, using heuristics if appropriate.
-     *
-     * In addition, we make HTTP/1.1 age calculations and write them away
-     * too.
-     */
-
-    /* Read the date. Generate one if one is not supplied */
-    dates = ap_table_get(r->headers_out, "Date");
-    if (dates != NULL)
-        info->date = apr_date_parse_http(dates);
-    else
-        info->date = APR_DATE_BAD;
-
-    now = apr_time_now();
-    if (info->date == APR_DATE_BAD) {  /* No, or bad date */
-        char *dates;
-        /* no date header! */
-        /* add one; N.B. use the time _now_ rather than when we were checking
-         * the cache 
-         */
-        date = now;
-        dates = apr_pcalloc(r->pool, MAX_STRING_LEN);
-        apr_rfc822_date(dates, now);
-        ap_table_set(r->headers_out, "Date", dates);
-        ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, 0, r->server,
-                     "cache: Added date header");
-        info->date = date;
-    }
-    else {
-        date = info->date;
-    }
-
-    /* set response_time for HTTP/1.1 age calculations */
-    info->response_time = now;
-
-    /* get the request time */
-    info->request_time = r->request_time;
-
-    /* check last-modified date */
-    /* XXX FIXME we're referencing date on a path where we didn't set it */
-    if (lastmod != APR_DATE_BAD && lastmod > date)
-    {
-        /* if its in the future, then replace by date */
-        lastmod = date;
-        lastmods = dates;
-        ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, 0, 
-                     r->server,
-                     "cache: Last modified is in the future, "
-                     "replacing with now");
-    }
-    info->lastmod = lastmod;
-
-    /* if no expiry date then
-     *   if lastmod
-     *      expiry date = now + min((date - lastmod) * factor, maxexpire)
-     *   else
-     *      expire date = now + defaultexpire
-     */
-    if (exp == APR_DATE_BAD) {
-        if (lastmod != APR_DATE_BAD) {
-            apr_time_t x = (apr_time_t) ((date - lastmod) * conf->factor);
-            if (x > conf->maxex)
-                x = conf->maxex;
-            exp = now + x;
-        }
-        else {
-            exp = now + conf->defex;
-        }
-    }
-    info->expire = exp;
-
-    info->content_type = apr_pstrdup(r->pool, r->content_type);
-    info->filename = apr_pstrdup(r->pool, r->filename );
-
-    /*
-     * Write away header information to cache.
-     */
-    rv = cache_write_entity_headers(cache->handle, r, info);
-    if (rv == APR_SUCCESS) {
-        rv = cache_write_entity_body(cache->handle, r, in);
-    }
-    if (rv != APR_SUCCESS) {
-        ap_remove_output_filter(f);
-    }
-    return ap_pass_brigade(f->next, in);
-}
-
-/* -------------------------------------------------------------- */
-/* Setup configurable data */
-
-static void * create_cache_config(apr_pool_t *p, server_rec *s)
-{
-    cache_server_conf *ps = ap_pcalloc(p, sizeof(cache_server_conf));
-
-    /* 1 if the cache is enabled, 0 otherwise */
-    ps->cacheon = 0;
-    ps->cacheon_set = 0;
-    /* array of URL prefixes for which caching is enabled */
-    ps->cacheenable = ap_make_array(p, 10, sizeof(struct cache_enable));
-    /* array of URL prefixes for which caching is disabled */
-    ps->cachedisable = ap_make_array(p, 10, sizeof(struct cache_disable));
-    /* maximum time to cache a document */
-    ps->maxex = DEFAULT_CACHE_MAXEXPIRE;
-    ps->maxex_set = 0;
-    /* default time to cache a document */
-    ps->defex = DEFAULT_CACHE_EXPIRE;
-    ps->defex_set = 0;
-    /* factor used to estimate Expires date from LastModified date */
-    ps->factor = DEFAULT_CACHE_LMFACTOR;
-    ps->factor_set = 0;
-    /* default percentage to force cache completion */
-    ps->complete = DEFAULT_CACHE_COMPLETION;
-    ps->complete_set = 0;
-    ps->no_last_mod_ignore_set = 0;
-    ps->no_last_mod_ignore = 0;
-    ps->ignorecachecontrol = 0;
-    ps->ignorecachecontrol_set = 0 ;
-    return ps;
-}
-
-static void * merge_cache_config(apr_pool_t *p, void *basev, void *overridesv)
-{
-    cache_server_conf *ps = ap_pcalloc(p, sizeof(cache_server_conf));
-    cache_server_conf *base = (cache_server_conf *) basev;
-    cache_server_conf *overrides = (cache_server_conf *) overridesv;
-
-    /* 1 if the cache is enabled, 0 otherwise */
-    ps->cacheon = 
-        (overrides->cacheon_set == 0) ? base->cacheon : overrides->cacheon;
-    /* array of URL prefixes for which caching is disabled */
-    ps->cachedisable = ap_append_arrays(p, 
-                                        base->cachedisable, 
-                                        overrides->cachedisable);
-    /* array of URL prefixes for which caching is enabled */
-    ps->cacheenable = ap_append_arrays(p, 
-                                       base->cacheenable, 
-                                       overrides->cacheenable);
-    /* maximum time to cache a document */
-    ps->maxex = (overrides->maxex_set == 0) ? base->maxex : overrides->maxex;
-    /* default time to cache a document */
-    ps->defex = (overrides->defex_set == 0) ? base->defex : overrides->defex;
-    /* factor used to estimate Expires date from LastModified date */
-    ps->factor = (overrides->factor_set == 0) ? base->factor : overrides->factor;
-    /* default percentage to force cache completion */
-    ps->complete =
-        (overrides->complete_set == 0) ? base->complete : overrides->complete;
-
-    ps->no_last_mod_ignore =
-        (overrides->no_last_mod_ignore_set) ? 
-                    base->no_last_mod_ignore : 
-                    overrides->no_last_mod_ignore;
-    ps->ignorecachecontrol  =
-        (overrides->ignorecachecontrol_set) ? 
-                    base->ignorecachecontrol : 
-                    overrides->ignorecachecontrol;
-
-    return ps;
-}
-static const char
-*set_cache_ignore_no_last_mod( cmd_parms *parms, void *dummy, int flag)
-{
-    cache_server_conf *conf = ap_get_module_config(parms->server->module_config, 
-                                                   &cache_module);
-
-    conf->no_last_mod_ignore = 1;
-    conf->no_last_mod_ignore_set = 1;
-    return NULL;
-
-}
-
-static const char
-*set_cache_on(cmd_parms *parms, void *dummy, int flag)
-{
-    cache_server_conf *conf = ap_get_module_config(parms->server->module_config,
-                                                   &cache_module);
-
-    conf->cacheon = 1;
-    conf->cacheon_set = 1;
-    return NULL;
-}
-static const char
-*set_cache_ignore_cachecontrol( cmd_parms *parms, void *dummy, int flag)
-{
-    cache_server_conf *conf = ap_get_module_config(parms->server->module_config, 
-                                                   &cache_module);
-
-    conf->ignorecachecontrol = 1;
-    conf->ignorecachecontrol_set = 1;
-    return NULL;
-
-}
-
-static const char
-*add_cache_enable(cmd_parms *parms, 
-                  void *dummy, 
-                  const char *type, 
-                  const char *url)
-{
-    cache_server_conf *conf = ap_get_module_config(parms->server->module_config,
-                                                   &cache_module);
-    struct cache_enable *new;
-
-    new = apr_array_push(conf->cacheenable);
-    new->type = type;
-    new->url = url;
-    return NULL;
-}
-
-static const char
-*add_cache_disable(cmd_parms *parms, void *dummy, const char *url)
-{
-    cache_server_conf *conf = ap_get_module_config(parms->server->module_config, 
-                                                   &cache_module);
-    struct cache_enable *new;
-
-    new = apr_array_push(conf->cachedisable);
-    new->url = url;
-    return NULL;
-}
-
-static const char
-*set_cache_maxex(cmd_parms *parms, void *dummy, const char *arg)
-{
-    cache_server_conf *conf = ap_get_module_config(parms->server->module_config,
-                                                   &cache_module);
-
-    conf->maxex = (apr_time_t) (atol(arg) * MSEC_ONE_SEC);
-    conf->maxex_set = 1;
-    return NULL;
-}
-
-static const char
-*set_cache_defex(cmd_parms *parms, void *dummy, const char *arg)
-{
-    cache_server_conf *conf = ap_get_module_config(parms->server->module_config, 
-                                                   &cache_module);
-
-    conf->defex = (apr_time_t) (atol(arg) * MSEC_ONE_SEC);
-    conf->defex_set = 1;
-    return NULL;
-}
-
-static const char
-*set_cache_factor(cmd_parms *parms, void *dummy, const char *arg)
-{
-    cache_server_conf *conf = ap_get_module_config(parms->server->module_config, 
-                                                   &cache_module);
-    double val;
-
-    if (sscanf(arg, "%lg", &val) != 1)
-        return "CacheLastModifiedFactor value must be a float";
-    conf->factor = val;
-    conf->factor_set = 1;
-    return NULL;
-}
-
-static const char
-*set_cache_complete(cmd_parms *parms, void *dummy, const char *arg)
-{
-    cache_server_conf *conf = ap_get_module_config(parms->server->module_config, 
-                                                   &cache_module);
-    int val;
-
-    if (sscanf(arg, "%u", &val) != 1)
-        return "CacheForceCompletion value must be a percentage";
-    conf->complete = val;
-    conf->complete_set = 1;
-    return NULL;
-}
-static int 
-cache_post_config(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *s)
-{
-     /* This is the means by which unusual (non-unix) os's may find alternate
-     * means to run a given command (e.g. shebang/registry parsing on Win32)
-     */
-    cache_generate_key    = APR_RETRIEVE_OPTIONAL_FN(ap_cache_generate_key);
-    if (!cache_generate_key) {
-        cache_generate_key = cache_generate_key_default;
-    }
-    return OK;
-}
-
-static const command_rec cache_cmds[] =
-{
-    /* XXX
-     * Consider a new config directive that enables loading specific cache
-     * implememtations (like mod_cache_mem, mod_cache_file, etc.).
-     * Rather than using a LoadModule directive, admin would use something
-     * like CacheModule  mem_cache_module | file_cache_module, etc,
-     * which would cause the approprpriate cache module to be loaded.
-     * This is more intuitive that requiring a LoadModule directive.
-     */
-
-    AP_INIT_FLAG("CacheOn", set_cache_on, NULL, RSRC_CONF,
-     "On if the transparent cache should be enabled"),
-    AP_INIT_TAKE2("CacheEnable", add_cache_enable, NULL, RSRC_CONF,
-     "A cache type and partial URL prefix below which caching is enabled"),
-    AP_INIT_TAKE1("CacheDisable", add_cache_disable, NULL, RSRC_CONF,
-     "A partial URL prefix below which caching is disabled"),
-    AP_INIT_TAKE1("CacheMaxExpire", set_cache_maxex, NULL, RSRC_CONF,
-     "The maximum time in seconds to cache a document"),
-     AP_INIT_TAKE1("CacheDefaultExpire", set_cache_defex, NULL, RSRC_CONF,
-     "The default time in seconds to cache a document"),
-     AP_INIT_FLAG("CacheIgnoreNoLastMod", set_cache_ignore_no_last_mod, NULL, 
-             RSRC_CONF, 
-             "Ignore Responses where there is no Last Modified Header"),
-     AP_INIT_FLAG("CacheIgnoreCacheControl", set_cache_ignore_cachecontrol, NULL, 
-            RSRC_CONF, 
-            "Ignore requests from the client for uncached content"),
-    AP_INIT_TAKE1("CacheLastModifiedFactor", set_cache_factor, NULL, RSRC_CONF,
-     "The factor used to estimate Expires date from LastModified date"),
-    AP_INIT_TAKE1("CacheForceCompletion", set_cache_complete, NULL, RSRC_CONF,
-     "Percentage of download to arrive for the cache to force complete transfer"),
-    {NULL}
-};
-
-static void
-register_hooks(apr_pool_t *p)
-{
-    /* cache initializer */
-    /* cache handler */
-    ap_hook_quick_handler(cache_url_handler, NULL, NULL, APR_HOOK_FIRST);
-    /* cache filters 
-     * XXX The cache filters need to run right after the handlers and before
-     * any other filters. Consider creating AP_FTYPE_CACHE for this purpose.
-     * Make them AP_FTYPE_CONTENT for now.
-     * XXX ianhH:they should run AFTER all the other content filters.
-     */
-    ap_register_output_filter("CACHE_IN", 
-                              cache_in_filter, 
-                              AP_FTYPE_CONTENT_SET);
-    ap_register_output_filter("CACHE_OUT", 
-                              cache_out_filter, 
-                              AP_FTYPE_CONTENT_SET);
-    ap_register_output_filter("CACHE_CONDITIONAL", 
-                              cache_conditional_filter, 
-                              AP_FTYPE_CONTENT_SET);
-    ap_hook_post_config(cache_post_config, NULL, NULL, APR_HOOK_REALLY_FIRST);
-}
-
-module AP_MODULE_DECLARE_DATA cache_module =
-{
-    STANDARD20_MODULE_STUFF,
-    NULL,                   /* create per-directory config structure */
-    NULL,                   /* merge per-directory config structures */
-    create_cache_config,    /* create per-server config structure */
-    merge_cache_config,     /* merge per-server config structures */
-    cache_cmds,             /* command apr_table_t */
-    register_hooks
-};
diff --git a/modules/experimental/mod_cache.dsp b/modules/experimental/mod_cache.dsp
deleted file mode 100644
index c2bec01..0000000
--- a/modules/experimental/mod_cache.dsp
+++ /dev/null
@@ -1,119 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mod_cache" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mod_cache - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "mod_cache.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "mod_cache.mak" CFG="mod_cache - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "mod_cache - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mod_cache - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "mod_cache - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MOD_CACHE_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /I "../../srclib/apr-util/include" /I "../../srclib/apr/include" /I "../../include" /I "../../os/win32" /I "C:\src\db-4.0.14\build_win32" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "CACHE_DECLARE_EXPORT" /D "MOD_CACHE_EXPORTS" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"Release/mod_cache.so"
-
-!ELSEIF  "$(CFG)" == "mod_cache - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MOD_CACHE_EXPORTS" /YX /FD /GZ /c
-# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "../../srclib/apr-util/include" /I "../../srclib/apr/include" /I "../../include" /I "../../os/win32" /I "C:\src\db-4.0.14\build_win32" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "CACHE_DECLARE_EXPORT" /D "MOD_CACHE_EXPORTS" /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"Debug/mod_cache.so" /pdbtype:sept
-
-!ENDIF 
-
-# Begin Target
-
-# Name "mod_cache - Win32 Release"
-# Name "mod_cache - Win32 Debug"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\cache_storage.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\cache_util.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mod_cache.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\mod_cache.h
-# End Source File
-# End Group
-# Begin Group "Resource Files"
-
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-# End Group
-# End Target
-# End Project
diff --git a/modules/experimental/mod_cache.h b/modules/experimental/mod_cache.h
deleted file mode 100644
index 2a8106c..0000000
--- a/modules/experimental/mod_cache.h
+++ /dev/null
@@ -1,305 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-#ifndef MOD_CACHE_H
-#define MOD_CACHE_H 
-
-/*
- * Main include file for the Apache Transparent Cache
- */
-
-#define CORE_PRIVATE
-
-#include "apr_hooks.h"
-#include "apr.h"
-#include "apr_compat.h"
-#include "apr_lib.h"
-#include "apr_strings.h"
-#include "apr_buckets.h"
-#include "apr_md5.h"
-#include "apr_pools.h"
-#include "apr_strings.h"
-#include "apr_optional.h"
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-#include "httpd.h"
-#include "http_config.h"
-#include "ap_config.h"
-#include "http_core.h"
-#include "http_protocol.h"
-#include "http_request.h"
-#include "http_vhost.h"
-#include "http_main.h"
-#include "http_log.h"
-#include "http_connection.h"
-#include "util_filter.h"
-#include "apr_date.h"
-#include "apr_uri.h"
-
-#ifdef HAVE_NETDB_H
-#include <netdb.h>
-#endif
-
-#ifdef HAVE_SYS_SOCKET_H
-#include <sys/socket.h>
-#endif
-
-#ifdef HAVE_NETINET_IN_H
-#include <netinet/in.h>
-#endif
-
-#ifdef HAVE_ARPA_INET_H
-#include <arpa/inet.h>
-#endif
-
-#ifndef MAX
-#define MAX(a,b)                ((a) > (b) ? (a) : (b))
-#endif
-#ifndef MIN
-#define MIN(a,b)                ((a) < (b) ? (a) : (b))
-#endif
-
-/* default completion is 60% */
-#define DEFAULT_CACHE_COMPLETION (60)
-#define MAX_URL_LENGTH 1024
-#define MSEC_ONE_DAY    ((apr_time_t)(86400*APR_USEC_PER_SEC)) /* one day, in microseconds */
-#define MSEC_ONE_HR     ((apr_time_t)(3600*APR_USEC_PER_SEC))  /* one hour, in microseconds */
-#define MSEC_ONE_MIN    ((apr_time_t)(60*APR_USEC_PER_SEC))    /* one minute, in microseconds */
-#define MSEC_ONE_SEC    ((apr_time_t)(APR_USEC_PER_SEC))       /* one second, in microseconds */
-#define DEFAULT_CACHE_MAXEXPIRE MSEC_ONE_DAY
-#define DEFAULT_CACHE_EXPIRE    MSEC_ONE_HR
-#define DEFAULT_CACHE_LMFACTOR  (0.1)
-
-/* Create a set of PROXY_DECLARE(type), PROXY_DECLARE_NONSTD(type) and 
- * PROXY_DECLARE_DATA with appropriate export and import tags for the platform
- */
-#if !defined(WIN32)
-#define CACHE_DECLARE(type)            type
-#define CACHE_DECLARE_NONSTD(type)     type
-#define CACHE_DECLARE_DATA
-#elif defined(CACHE_DECLARE_STATIC)
-#define CACHE_DECLARE(type)            type __stdcall
-#define CACHE_DECLARE_NONSTD(type)     type
-#define CACHE_DECLARE_DATA
-#elif defined(CACHE_DECLARE_EXPORT)
-#define CACHE_DECLARE(type)            __declspec(dllexport) type __stdcall
-#define CACHE_DECLARE_NONSTD(type)     __declspec(dllexport) type
-#define CACHE_DECLARE_DATA             __declspec(dllexport)
-#else
-#define CACHE_DECLARE(type)            __declspec(dllimport) type __stdcall
-#define CACHE_DECLARE_NONSTD(type)     __declspec(dllimport) type
-#define CACHE_DECLARE_DATA             __declspec(dllimport)
-#endif
-
-struct cache_enable {
-    const char *url;
-    const char *type;
-};
-
-struct cache_disable {
-    const char *url;
-};
-
-/* static information about the local cache */
-typedef struct {
-    int cacheon;			/* Cache enabled? */
-    int cacheon_set;
-    apr_array_header_t *cacheenable;	/* URLs to cache */
-    apr_array_header_t *cachedisable;	/* URLs not to cache */
-    apr_time_t maxex;			/* Maximum time to keep cached files in msecs */
-    int maxex_set;
-    apr_time_t defex;           /* default time to keep cached file in msecs */
-    int defex_set;
-    double factor;              /* factor for estimating expires date */
-    int factor_set;
-    int complete;               /* Force cache completion after this point */
-    int complete_set;
-    /** ignore the last-modified header when deciding to cache this request */
-    int no_last_mod_ignore_set;
-    int no_last_mod_ignore; 
-    /** ignore client's requests for uncached responses */
-    int ignorecachecontrol;
-    int ignorecachecontrol_set;
-} cache_server_conf;
-
-/* cache info information */
-typedef struct cache_info cache_info;
-struct cache_info {
-    char *content_type;
-    char *etag;
-    char *lastmods;         /* last modified of cache entity */
-    char *filename;   
-    apr_time_t date;
-    apr_time_t lastmod;
-    char lastmod_str[APR_RFC822_DATE_LEN];
-    apr_time_t expire;
-    apr_time_t request_time;
-    apr_time_t response_time;
-    apr_size_t len;
-};
-
-/* cache handle information */
-typedef struct cache_object cache_object_t;
-struct cache_object {
-    char *key;
-    cache_object_t *next;
-    cache_info info;
-    void *vobj;         /* Opaque portion (specific to the cache implementation) of the cache object */
-    apr_size_t count;   /* Number of body bytes written to the cache so far */
-    int complete;
-    apr_size_t refcount;
-    apr_size_t cleanup;
-};
-
-typedef struct cache_handle cache_handle_t;
-struct cache_handle {
-    cache_object_t *cache_obj;
-    int (*remove_entity) (cache_handle_t *h);
-    apr_status_t (*write_headers)(cache_handle_t *h, request_rec *r, cache_info *i);
-    apr_status_t (*write_body)(cache_handle_t *h, request_rec *r, apr_bucket_brigade *b);
-    apr_status_t (*read_headers) (cache_handle_t *h, request_rec *r);
-    apr_status_t (*read_body) (cache_handle_t *h, apr_pool_t *p, apr_bucket_brigade *bb); 
-};
-
-/* per request cache information */
-typedef struct {
-    const char *types;			/* the types of caches allowed */
-    const char *type;			/* the type of cache selected */
-    int fresh;				/* is the entitey fresh? */
-    cache_handle_t *handle;		/* current cache handle */
-    int in_checked;			/* CACHE_IN must cache the entity */
-} cache_request_rec;
-
-
-/* cache_util.c */
-/**
- *
- */
-CACHE_DECLARE(apr_time_t) ap_cache_hex2msec(const char *x);
-CACHE_DECLARE(void) ap_cache_msec2hex(apr_time_t j, char *y);
-CACHE_DECLARE(char *) generate_name(apr_pool_t *p, int dirlevels, 
-                                    int dirlength, 
-                                    const char *name);
-CACHE_DECLARE(int) ap_cache_request_is_conditional(request_rec *r);
-CACHE_DECLARE(void) ap_cache_reset_output_filters(request_rec *r);
-CACHE_DECLARE(const char *)ap_cache_get_cachetype(request_rec *r, cache_server_conf *conf, const char *url);
-CACHE_DECLARE(int) ap_cache_liststr(const char *list, const char *key, char **val);
-CACHE_DECLARE(const char *)ap_cache_tokstr(apr_pool_t *p, const char *list, const char **str);
-
-/**
- * cache_storage.c
- */
-int cache_remove_url(request_rec *r, const char *types, char *url);
-int cache_create_entity(request_rec *r, const char *types, char *url, apr_size_t size);
-int cache_remove_entity(request_rec *r, const char *types, cache_handle_t *h);
-int cache_select_url(request_rec *r, const char *types, char *url);
-apr_status_t cache_generate_key_default( request_rec *r, apr_pool_t*p, char**key );
-/**
- * create a key for the cache based on the request record
- * this is the 'default' version, which can be overridden by a default function
- */
-const char* cache_create_key( request_rec*r );
-
-apr_status_t cache_write_entity_headers(cache_handle_t *h, request_rec *r, cache_info *info);
-apr_status_t cache_write_entity_body(cache_handle_t *h, request_rec *r, apr_bucket_brigade *bb);
-
-apr_status_t cache_read_entity_headers(cache_handle_t *h, request_rec *r);
-apr_status_t cache_read_entity_body(cache_handle_t *h, apr_pool_t *p, apr_bucket_brigade *bb);
-
-
-/* hooks */
-
-/* Create a set of CACHE_DECLARE(type), CACHE_DECLARE_NONSTD(type) and 
- * CACHE_DECLARE_DATA with appropriate export and import tags for the platform
- */
-#if !defined(WIN32)
-#define CACHE_DECLARE(type)            type
-#define CACHE_DECLARE_NONSTD(type)     type
-#define CACHE_DECLARE_DATA
-#elif defined(CACHE_DECLARE_STATIC)
-#define CACHE_DECLARE(type)            type __stdcall
-#define CACHE_DECLARE_NONSTD(type)     type
-#define CACHE_DECLARE_DATA
-#elif defined(CACHE_DECLARE_EXPORT)
-#define CACHE_DECLARE(type)            __declspec(dllexport) type __stdcall
-#define CACHE_DECLARE_NONSTD(type)     __declspec(dllexport) type
-#define CACHE_DECLARE_DATA             __declspec(dllexport)
-#else
-#define CACHE_DECLARE(type)            __declspec(dllimport) type __stdcall
-#define CACHE_DECLARE_NONSTD(type)     __declspec(dllimport) type
-#define CACHE_DECLARE_DATA             __declspec(dllimport)
-#endif
-
-APR_DECLARE_EXTERNAL_HOOK(cache, CACHE, int, create_entity, 
-                          (cache_handle_t *h, request_rec *r, const char *type,
-                           const char *urlkey, apr_size_t len))
-APR_DECLARE_EXTERNAL_HOOK(cache, CACHE, int, open_entity,  
-                          (cache_handle_t *h, request_rec *r, const char *type,
-                           const char *urlkey))
-APR_DECLARE_EXTERNAL_HOOK(cache, CACHE, int, remove_url, 
-                          (const char *type, const char *urlkey))
-
-
-
-APR_DECLARE_OPTIONAL_FN(apr_status_t, 
-                        ap_cache_generate_key, 
-                        (request_rec *r, apr_pool_t*p, char**key ));
-
-
-#endif /*MOD_CACHE_H*/
diff --git a/modules/experimental/mod_case_filter.c b/modules/experimental/mod_case_filter.c
deleted file mode 100644
index c19fa92..0000000
--- a/modules/experimental/mod_case_filter.c
+++ /dev/null
@@ -1,112 +0,0 @@
-/* Ben messing around... */
-
-#include "httpd.h"
-#include "http_config.h"
-#include "apr_general.h"
-#include "util_filter.h"
-#include "apr_buckets.h"
-#include "http_request.h"
-
-#include <ctype.h>
-
-static const char s_szCaseFilterName[]="CaseFilter";
-module AP_MODULE_DECLARE_DATA case_filter_module;
-
-typedef struct
-    {
-    int bEnabled;
-    } CaseFilterConfig;
-
-static void *CaseFilterCreateServerConfig(apr_pool_t *p,server_rec *s)
-    {
-    CaseFilterConfig *pConfig=apr_pcalloc(p,sizeof *pConfig);
-
-    pConfig->bEnabled=0;
-
-    return pConfig;
-    }
-
-static void CaseFilterInsertFilter(request_rec *r)
-    {
-    CaseFilterConfig *pConfig=ap_get_module_config(r->server->module_config,
-						   &case_filter_module);
-
-    if(!pConfig->bEnabled)
-	return;
-
-    ap_add_output_filter(s_szCaseFilterName,NULL,r,r->connection);
-    }
-
-static apr_status_t CaseFilterOutFilter(ap_filter_t *f,
-					apr_bucket_brigade *pbbIn)
-    {
-    apr_bucket *pbktIn;
-    apr_bucket_brigade *pbbOut;
-
-    /* XXX: is this the most appropriate pool? */
-    pbbOut=apr_brigade_create(f->r->pool);
-    APR_BRIGADE_FOREACH(pbktIn,pbbIn)
-	{
-	const char *data;
-	apr_size_t len;
-	char *buf;
-	apr_size_t n;
-	apr_bucket *pbktOut;
-
-	if(APR_BUCKET_IS_EOS(pbktIn))
-	    {
-            /* XXX: why can't I reuse pbktIn??? */
-	    apr_bucket *pbktEOS=apr_bucket_eos_create();
-	    APR_BRIGADE_INSERT_TAIL(pbbOut,pbktEOS);
-	    continue;
-	    }
-
-	/* read */
-	apr_bucket_read(pbktIn,&data,&len,APR_BLOCK_READ);
-
-	/* write */
-	buf=malloc(len);
-	for(n=0 ; n < len ; ++n)
-	    buf[n]=toupper(data[n]);
-
-	pbktOut=apr_bucket_heap_create(buf,len,0);
-	APR_BRIGADE_INSERT_TAIL(pbbOut,pbktOut);
-	}
-
-    /* XXX: is there any advantage to passing a brigade for each bucket? */
-    return ap_pass_brigade(f->next,pbbOut);
-    }
-
-static const char *CaseFilterEnable(cmd_parms *cmd, void *dummy, int arg)
-    {
-    CaseFilterConfig *pConfig=ap_get_module_config(cmd->server->module_config,
-						   &case_filter_module);
-    pConfig->bEnabled=arg;
-
-    return NULL;
-    }
-
-static const command_rec CaseFilterCmds[] = 
-    {
-    AP_INIT_FLAG("CaseFilter", CaseFilterEnable, NULL, RSRC_CONF,
-                 "Run a case filter on this host"),
-    { NULL }
-    };
-
-static void CaseFilterRegisterHooks(apr_pool_t *p)
-    {
-    ap_hook_insert_filter(CaseFilterInsertFilter,NULL,NULL,APR_HOOK_MIDDLE);
-    ap_register_output_filter(s_szCaseFilterName,CaseFilterOutFilter,
-			      AP_FTYPE_RESOURCE);
-    }
-
-module AP_MODULE_DECLARE_DATA case_filter_module =
-{
-    STANDARD20_MODULE_STUFF,
-    NULL,
-    NULL,
-    CaseFilterCreateServerConfig,
-    NULL,
-    CaseFilterCmds,
-    CaseFilterRegisterHooks
-};
diff --git a/modules/experimental/mod_case_filter_in.c b/modules/experimental/mod_case_filter_in.c
deleted file mode 100644
index 1bff66d..0000000
--- a/modules/experimental/mod_case_filter_in.c
+++ /dev/null
@@ -1,196 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-/*
- * An example input filter - this converts input to upper case. Note that
- * because of the moment it gets inserted it does NOT convert request headers.
- */
-
-#include "httpd.h"
-#include "http_config.h"
-#include "apr_general.h"
-#include "util_filter.h"
-#include "apr_buckets.h"
-#include "http_request.h"
-
-#include <ctype.h>
-
-static const char s_szCaseFilterName[] = "CaseFilterIn";
-module AP_MODULE_DECLARE_DATA case_filter_in_module;
-
-typedef struct
-{
-    int bEnabled;
-} CaseFilterInConfig;
-
-typedef struct
-{
-    apr_bucket_brigade *pbbTmp;
-} CaseFilterInContext;
-
-static void *CaseFilterInCreateServerConfig(apr_pool_t *p, server_rec *s)
-{
-    CaseFilterInConfig *pConfig = apr_pcalloc(p, sizeof *pConfig);
-
-    pConfig->bEnabled = 0;
-
-    return pConfig;
-}
-
-static void CaseFilterInInsertFilter(request_rec *r)
-{
-    CaseFilterInConfig *pConfig=ap_get_module_config(r->server->module_config,
-                                                     &case_filter_in_module);
-    if(!pConfig->bEnabled)
-        return;
-
-    ap_add_input_filter(s_szCaseFilterName,NULL,r,r->connection);
-}
-
-static apr_status_t CaseFilterInFilter(ap_filter_t *f,
-                                       apr_bucket_brigade *pbbOut,
-                                       ap_input_mode_t eMode,
-                                       apr_read_type_e eBlock,
-                                       apr_off_t nBytes)
-{
-    request_rec *r = f->r;
-    CaseFilterInContext *pCtx;
-    apr_status_t ret;
-
-    if (!(pCtx = f->ctx)) {
-        f->ctx = pCtx = apr_palloc(r->pool, sizeof *pCtx);
-        pCtx->pbbTmp = apr_brigade_create(r->pool);
-    }
-
-    if (APR_BRIGADE_EMPTY(pCtx->pbbTmp)) {
-        ret = ap_get_brigade(f->next, pCtx->pbbTmp, eMode, eBlock, nBytes);
-
-        if (eMode == AP_MODE_EATCRLF || ret != APR_SUCCESS)
-            return ret;
-    }
-
-    while(!APR_BRIGADE_EMPTY(pCtx->pbbTmp)) {
-        apr_bucket *pbktIn = APR_BRIGADE_FIRST(pCtx->pbbTmp);
-        apr_bucket *pbktOut;
-        const char *data;
-        apr_size_t len;
-        char *buf;
-        int n;
-
-        /* It is tempting to do this...
-         * APR_BUCKET_REMOVE(pB);
-         * APR_BRIGADE_INSERT_TAIL(pbbOut,pB);
-         * and change the case of the bucket data, but that would be wrong
-         * for a file or socket buffer, for example...
-         */
-
-        if(APR_BUCKET_IS_EOS(pbktIn)) {
-            APR_BUCKET_REMOVE(pbktIn);
-            APR_BRIGADE_INSERT_TAIL(pbbOut, pbktIn);
-            break;
-        }
-
-        ret=apr_bucket_read(pbktIn, &data, &len, eBlock);
-        if(ret != APR_SUCCESS)
-            return ret;
-
-        buf = malloc(len);
-        for(n=0 ; n < len ; ++n)
-            buf[n] = toupper(data[n]);
-
-        pbktOut = apr_bucket_heap_create(buf, len, 0);
-        APR_BRIGADE_INSERT_TAIL(pbbOut, pbktOut);
-        apr_bucket_delete(pbktIn);
-    }
-
-    return APR_SUCCESS;
-}
-            
-        
-static const char *CaseFilterInEnable(cmd_parms *cmd, void *dummy, int arg)
-{
-    CaseFilterInConfig *pConfig
-      = ap_get_module_config(cmd->server->module_config,
-                             &case_filter_in_module);
-    pConfig->bEnabled=arg;
-
-    return NULL;
-}
-
-static const command_rec CaseFilterInCmds[] = 
-{
-    AP_INIT_FLAG("CaseFilterIn", CaseFilterInEnable, NULL, RSRC_CONF,
-                 "Run an input case filter on this host"),
-    { NULL }
-};
-
-
-static void CaseFilterInRegisterHooks(apr_pool_t *p)
-{
-    ap_hook_insert_filter(CaseFilterInInsertFilter, NULL, NULL, 
-                          APR_HOOK_MIDDLE);
-    ap_register_input_filter(s_szCaseFilterName, CaseFilterInFilter,
-                             AP_FTYPE_RESOURCE);
-}
-
-module AP_MODULE_DECLARE_DATA case_filter_in_module =
-{
-    STANDARD20_MODULE_STUFF,
-    NULL,
-    NULL,
-    CaseFilterInCreateServerConfig,
-    NULL,
-    CaseFilterInCmds,
-    CaseFilterInRegisterHooks
-};
diff --git a/modules/experimental/mod_charset_lite.c b/modules/experimental/mod_charset_lite.c
deleted file mode 100644
index 7b99ddc..0000000
--- a/modules/experimental/mod_charset_lite.c
+++ /dev/null
@@ -1,1118 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-/*
- * simple hokey charset recoding configuration module
- *
- * See mod_ebcdic and mod_charset for more thought-out examples.  This
- * one is just so Jeff can learn how a module works and experiment with
- * basic character set recoding configuration.
- *
- * !!!This is an extremely cheap ripoff of mod_charset.c from Russian Apache!!!
- */
-
-#include "httpd.h"
-#include "http_config.h"
-#define CORE_PRIVATE
-#include "http_core.h"
-#include "http_log.h"
-#include "http_main.h"
-#include "http_protocol.h"
-#include "http_request.h"
-#include "util_charset.h"
-#include "apr_buckets.h"
-#include "util_filter.h"
-#include "apr_strings.h"
-#include "apr_lib.h"
-#include "apr_xlate.h"
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-#define OUTPUT_XLATE_BUF_SIZE (16*1024) /* size of translation buffer used on output */
-#define INPUT_XLATE_BUF_SIZE  (8*1024)  /* size of translation buffer used on input */
-
-#define XLATE_MIN_BUFF_LEFT 128  /* flush once there is no more than this much
-                                  * space left in the translation buffer 
-                                  */
-
-#define FATTEST_CHAR  8          /* we don't handle chars wider than this that straddle 
-                                  * two buckets
-                                  */
-
-/* extended error status codes; this is used in addition to an apr_status_t to
- * track errors in the translation filter
- */
-typedef enum {
-    EES_INIT = 0,   /* no error info yet; value must be 0 for easy init */
-    EES_LIMIT,      /* built-in restriction encountered */
-    EES_INCOMPLETE_CHAR, /* incomplete multi-byte char at end of content */
-    EES_BUCKET_READ,
-    EES_DOWNSTREAM, /* something bad happened in a filter below xlate */
-    EES_BAD_INPUT   /* input data invalid */
-} ees_t;
-
-/* registered name of the output translation filter */
-#define XLATEOUT_FILTER_NAME "XLATEOUT"
-/* registered name of input translation filter */
-#define XLATEIN_FILTER_NAME  "XLATEIN" 
-
-typedef struct charset_dir_t {
-    /** debug level; -1 means uninitialized, 0 means no debug */
-    int debug;
-    const char *charset_source; /* source encoding */
-    const char *charset_default; /* how to ship on wire */
-    /** module does ap_add_*_filter()? */    
-    enum {IA_INIT, IA_IMPADD, IA_NOIMPADD} implicit_add; 
-} charset_dir_t;
-
-/* charset_filter_ctx_t is created for each filter instance; because the same
- * filter code is used for translating in both directions, we need this context
- * data to tell the filter which translation handle to use; it also can hold a
- * character which was split between buckets
- */
-typedef struct charset_filter_ctx_t {
-    apr_xlate_t *xlate;
-    charset_dir_t *dc;
-    ees_t ees;              /* extended error status */
-    apr_size_t saved;
-    char buf[FATTEST_CHAR]; /* we want to be able to build a complete char here */
-    int ran;                /* has filter instance run before? */
-    int noop;               /* should we pass brigades through unchanged? */
-    char *tmp;              /* buffer for input filtering */
-    apr_bucket_brigade *bb; /* input buckets we couldn't finish translating */
-} charset_filter_ctx_t;
-
-/* charset_req_t is available via r->request_config if any translation is
- * being performed
- */
-typedef struct charset_req_t {
-    charset_dir_t *dc;
-    charset_filter_ctx_t *output_ctx, *input_ctx;
-} charset_req_t;
-
-/* debug level definitions */
-#define DBGLVL_GORY           9 /* gory details */
-#define DBGLVL_FLOW           4 /* enough messages to see what happens on
-                                 * each request */
-#define DBGLVL_PMC            2 /* messages about possible misconfiguration */
-
-module AP_MODULE_DECLARE_DATA charset_lite_module;
-
-static void *create_charset_dir_conf(apr_pool_t *p,char *dummy)
-{
-    charset_dir_t *dc = (charset_dir_t *)apr_pcalloc(p,sizeof(charset_dir_t));
-
-    dc->debug = -1;
-    return dc;
-}
-
-static void *merge_charset_dir_conf(apr_pool_t *p, void *basev, void *overridesv)
-{
-    charset_dir_t *a = (charset_dir_t *)apr_pcalloc (p, sizeof(charset_dir_t));
-    charset_dir_t *base = (charset_dir_t *)basev,
-        *over = (charset_dir_t *)overridesv;
-
-    /* If it is defined in the current container, use it.  Otherwise, use the one
-     * from the enclosing container. 
-     */
-
-    a->debug = 
-        over->debug != -1 ? over->debug : base->debug;
-    a->charset_default = 
-        over->charset_default ? over->charset_default : base->charset_default;
-    a->charset_source = 
-        over->charset_source ? over->charset_source : base->charset_source;
-    a->implicit_add =
-        over->implicit_add != IA_INIT ? over->implicit_add : base->implicit_add;
-    return a;
-}
-
-/* CharsetSourceEnc charset
- */
-static const char *add_charset_source(cmd_parms *cmd, void *in_dc,
-                                      const char *name)
-{
-    charset_dir_t *dc = in_dc;
-
-    dc->charset_source = name;
-    return NULL;
-}
-
-/* CharsetDefault charset
- */
-static const char *add_charset_default(cmd_parms *cmd, void *in_dc, 
-                                       const char *name)
-{
-    charset_dir_t *dc = in_dc;
-
-    dc->charset_default = name;
-    return NULL;
-}
-
-/* CharsetOptions optionflag...
- */
-static const char *add_charset_options(cmd_parms *cmd, void *in_dc, 
-                                       const char *flag)
-{
-    charset_dir_t *dc = in_dc;
-
-    if (!strcasecmp(flag, "ImplicitAdd")) {
-        dc->implicit_add = IA_IMPADD;
-    }
-    else if (!strcasecmp(flag, "NoImplicitAdd")) {
-        dc->implicit_add = IA_NOIMPADD;
-    }
-    else if (!strncasecmp(flag, "DebugLevel=", 11)) {
-        dc->debug = atoi(flag + 11);
-    }
-    else {
-        return apr_pstrcat(cmd->temp_pool, 
-                           "Invalid CharsetOptions option: ",
-                           flag,
-                           NULL);
-    }
-
-    return NULL;
-}
-
-/* find_code_page() is a fixup hook that decides if translation should be
- * enabled; if so, it sets up request data for use by the filter registration
- * hook so that it knows what to do
- */
-static int find_code_page(request_rec *r)
-{
-    charset_dir_t *dc = ap_get_module_config(r->per_dir_config, 
-                                             &charset_lite_module);
-    charset_req_t *reqinfo;
-    charset_filter_ctx_t *input_ctx, *output_ctx;
-    apr_status_t rv;
-    const char *mime_type;
-
-    if (dc->debug >= DBGLVL_FLOW) {
-        ap_log_rerror(APLOG_MARK,APLOG_DEBUG|APLOG_NOERRNO, 0, r,
-                      "uri: %s file: %s method: %d "
-                      "imt: %s flags: %s%s%s %s->%s",
-                      r->uri, r->filename, r->method_number,
-                      r->content_type ? r->content_type : "(unknown)",
-                      r->main     ? "S" : "",    /* S if subrequest */
-                      r->prev     ? "R" : "",    /* R if redirect */
-                      r->proxyreq ? "P" : "",    /* P if proxy */
-                      dc->charset_source, dc->charset_default);
-    }
-
-    /* If we don't have a full directory configuration, bail out.
-     */
-    if (!dc->charset_source || !dc->charset_default) {
-        if (dc->debug >= DBGLVL_PMC) {
-            ap_log_rerror(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r,
-                          "incomplete configuration: src %s, dst %s",
-                          dc->charset_source ? dc->charset_source : "unspecified",
-                          dc->charset_default ? dc->charset_default : "unspecified");
-        }
-        return DECLINED;
-    }
-
-    /* catch proxy requests */
-    if (r->proxyreq) return DECLINED;
-    /* mod_rewrite indicators */
-    if (!strncmp(r->filename, "redirect:", 9)) return DECLINED; 
-    if (!strncmp(r->filename, "gone:", 5)) return DECLINED; 
-    if (!strncmp(r->filename, "passthrough:", 12)) return DECLINED; 
-    if (!strncmp(r->filename, "forbidden:", 10)) return DECLINED; 
-    
-    mime_type = r->content_type ? r->content_type : ap_default_type(r);
-
-    /* If mime type isn't text or message, bail out.
-     */
-
-/* XXX When we handle translation of the request body, watch out here as
- *     1.3 allowed additional mime types: multipart and 
- *     application/x-www-form-urlencoded
- */
-             
-    if (strncasecmp(mime_type, "text/", 5) &&
-#if APR_CHARSET_EBCDIC
-        /* On an EBCDIC machine, be willing to translate mod_autoindex-
-         * generated output.  Otherwise, it doesn't look too cool.
-         *
-         * XXX This isn't a perfect fix because this doesn't trigger us
-         * to convert from the charset of the source code to ASCII.  The
-         * general solution seems to be to allow a generator to set an
-         * indicator in the r specifying that the body is coded in the
-         * implementation character set (i.e., the charset of the source
-         * code).  This would get several different types of documents
-         * translated properly: mod_autoindex output, mod_status output,
-         * mod_info output, hard-coded error documents, etc.
-         */
-        strcmp(mime_type, DIR_MAGIC_TYPE) &&
-#endif
-        strncasecmp(mime_type, "message/", 8)) {
-        if (dc->debug >= DBGLVL_GORY) {
-            ap_log_rerror(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r,
-                          "mime type is %s; no translation selected",
-                          mime_type);
-        }
-        return DECLINED;
-    }
-
-    if (dc->debug >= DBGLVL_GORY) {
-        ap_log_rerror(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r,
-                      "charset_source: %s charset_default: %s",
-                      dc && dc->charset_source ? dc->charset_source : "(none)",
-                      dc && dc->charset_default ? dc->charset_default : "(none)");
-    }
-
-    /* Get storage for the request data and the output filter context.
-     * We rarely need the input filter context, so allocate that separately.
-     */
-    reqinfo = (charset_req_t *)apr_pcalloc(r->pool, 
-                                           sizeof(charset_req_t) + 
-                                           sizeof(charset_filter_ctx_t));
-    output_ctx = (charset_filter_ctx_t *)(reqinfo + 1);
-
-    reqinfo->dc = dc;
-    output_ctx->dc = dc;
-    ap_set_module_config(r->request_config, &charset_lite_module, reqinfo);
-
-    reqinfo->output_ctx = output_ctx;
-    rv = apr_xlate_open(&output_ctx->xlate, 
-                        dc->charset_default, dc->charset_source, r->pool);
-    if (rv != APR_SUCCESS) {
-        ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
-                      "can't open translation %s->%s",
-                      dc->charset_source, dc->charset_default);
-        return HTTP_INTERNAL_SERVER_ERROR;
-    }
-
-    switch (r->method_number) {
-    case M_PUT:
-    case M_POST:
-        /* Set up input translation.  Note: A request body can be included 
-         * with the OPTIONS method, but for now we don't set up translation 
-         * of it.
-         */
-        input_ctx = apr_pcalloc(r->pool, sizeof(charset_filter_ctx_t));
-        input_ctx->bb = apr_brigade_create(r->pool);
-        input_ctx->tmp = apr_palloc(r->pool, INPUT_XLATE_BUF_SIZE);
-        input_ctx->dc = dc;
-        reqinfo->input_ctx = input_ctx;
-        rv = apr_xlate_open(&input_ctx->xlate, dc->charset_source, 
-                            dc->charset_default, r->pool);
-        if (rv != APR_SUCCESS) {
-            ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
-                          "can't open translation %s->%s",
-                          dc->charset_default, dc->charset_source);
-            return HTTP_INTERNAL_SERVER_ERROR;
-        }
-    }
-
-    return DECLINED;
-}
-
-static int configured_in_list(request_rec *r, const char *filter_name,
-                              struct ap_filter_t *filter_list)
-{
-    struct ap_filter_t *filter = filter_list;
-
-    while (filter) {
-        if (!strcasecmp(filter_name, filter->frec->name)) {
-            return 1;
-        }
-        filter = filter->next;
-    }
-    return 0;
-}
-
-static int configured_on_input(request_rec *r, const char *filter_name)
-{
-    return configured_in_list(r, filter_name, r->input_filters);
-}
-
-static int configured_on_output(request_rec *r, const char *filter_name)
-{
-    return configured_in_list(r, filter_name, r->output_filters);
-}
-
-/* xlate_insert_filter() is a filter hook which decides whether or not
- * to insert a translation filter for the current request.
- */
-static void xlate_insert_filter(request_rec *r)
-{
-    /* Hey... don't be so quick to use reqinfo->dc here; reqinfo may be NULL */
-    charset_req_t *reqinfo = ap_get_module_config(r->request_config, 
-                                                  &charset_lite_module);
-    charset_dir_t *dc = ap_get_module_config(r->per_dir_config, 
-                                             &charset_lite_module);
-
-    if (reqinfo) {
-        if (reqinfo->output_ctx && !configured_on_output(r, XLATEOUT_FILTER_NAME)) {
-            ap_add_output_filter(XLATEOUT_FILTER_NAME, reqinfo->output_ctx, r, 
-                                 r->connection);
-        }
-        else if (dc->debug >= DBGLVL_FLOW) {
-            ap_log_rerror(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r,
-                          "xlate output filter not added implicitly because %s",
-                          !reqinfo->output_ctx ? 
-                          "no output configuration available" :
-                          "another module added the filter");
-        }
-
-        if (reqinfo->input_ctx && !configured_on_input(r, XLATEIN_FILTER_NAME)) {
-            ap_add_input_filter(XLATEIN_FILTER_NAME, reqinfo->input_ctx, r,
-                                r->connection);
-        }
-        else if (dc->debug >= DBGLVL_FLOW) {
-            ap_log_rerror(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r,
-                          "xlate input filter not added implicitly because %s",
-                          !reqinfo->input_ctx ?
-                          "no input configuration available" :
-                          "another module added the filter");
-        }
-    }
-}
-
-/* stuff that sucks that I know of:
- *
- * bucket handling:
- *  why create an eos bucket when we see it come down the stream?  just send the one
- *  passed as input...  news flash: this will be fixed when xlate_out_filter() starts
- *  using the more generic xlate_brigade()
- *
- * translation mechanics:
- *   we don't handle characters that straddle more than two buckets; an error
- *   will be generated
- */
-
-/* send_downstream() is passed the translated data; it puts it in a single-
- * bucket brigade and passes the brigade to the next filter
- */
-static apr_status_t send_downstream(ap_filter_t *f, const char *tmp, apr_size_t len)
-{
-    apr_bucket_brigade *bb;
-    apr_bucket *b;
-    charset_filter_ctx_t *ctx = f->ctx;
-    apr_status_t rv;
-
-    bb = apr_brigade_create(f->r->pool);
-    b = apr_bucket_transient_create(tmp, len);
-    APR_BRIGADE_INSERT_TAIL(bb, b);
-    rv = ap_pass_brigade(f->next, bb);
-    if (rv != APR_SUCCESS) {
-        ctx->ees = EES_DOWNSTREAM;
-    }
-    return rv;
-}
-
-static apr_status_t send_eos(ap_filter_t *f)
-{
-    apr_bucket_brigade *bb;
-    apr_bucket *b;
-    charset_filter_ctx_t *ctx = f->ctx;
-    apr_status_t rv;
-
-    bb = apr_brigade_create(f->r->pool);
-    b = apr_bucket_eos_create();
-    APR_BRIGADE_INSERT_TAIL(bb, b);
-    rv = ap_pass_brigade(f->next, bb);
-    if (rv != APR_SUCCESS) {
-        ctx->ees = EES_DOWNSTREAM;
-    }
-    return rv;
-}
-
-static apr_status_t set_aside_partial_char(charset_filter_ctx_t *ctx, 
-                                           const char *partial,
-                                           apr_size_t partial_len)
-{
-    apr_status_t rv;
-
-    if (sizeof(ctx->buf) > partial_len) {
-        ctx->saved = partial_len;
-        memcpy(ctx->buf, partial, partial_len);
-        rv = APR_SUCCESS;
-    }
-    else {
-        rv = APR_INCOMPLETE;
-        ctx->ees = EES_LIMIT; /* we don't handle chars this wide which straddle 
-                               * buckets 
-                               */
-    }
-    return rv;
-}
-
-static apr_status_t finish_partial_char(charset_filter_ctx_t *ctx,
-                                        /* input buffer: */
-                                        const char **cur_str, 
-                                        apr_size_t *cur_len,
-                                        /* output buffer: */
-                                        char **out_str,
-                                        apr_size_t *out_len)
-{
-    apr_status_t rv;
-    apr_size_t tmp_input_len;
-
-    /* Keep adding bytes from the input string to the saved string until we
-     *    1) finish the input char
-     *    2) get an error
-     * or 3) run out of bytes to add
-     */
-
-    do {
-        ctx->buf[ctx->saved] = **cur_str;
-        ++ctx->saved;
-        ++*cur_str;
-        --*cur_len;
-        tmp_input_len = ctx->saved;
-        rv = apr_xlate_conv_buffer(ctx->xlate,
-                                   ctx->buf,
-                                   &tmp_input_len,
-                                   *out_str,
-                                   out_len);
-    } while (rv == APR_INCOMPLETE && *cur_len);
-
-    if (rv == APR_SUCCESS) {
-        ctx->saved = 0;
-    }
-    else {
-        ctx->ees = EES_LIMIT; /* code isn't smart enough to handle chars
-                               * straddling more than two buckets
-                               */
-    }
-
-    return rv;
-}
-
-static void log_xlate_error(ap_filter_t *f, apr_status_t rv)
-{
-    charset_filter_ctx_t *ctx = f->ctx;
-    const char *msg;
-    char msgbuf[100];
-    int cur;
-    int flags = APLOG_ERR;
-
-    switch(ctx->ees) {
-    case EES_LIMIT:
-        flags |= APLOG_NOERRNO;
-        msg = "xlate filter - a built-in restriction was encountered";
-        break;
-    case EES_BAD_INPUT:
-        flags |= APLOG_NOERRNO;
-        msg = "xlate filter - an input character was invalid";
-        break;
-    case EES_BUCKET_READ:
-        msg = "xlate filter - bucket read routine failed";
-        break;
-    case EES_INCOMPLETE_CHAR:
-        flags |= APLOG_NOERRNO;
-        strcpy(msgbuf, "xlate filter - incomplete char at end of input - ");
-        cur = 0;
-        while (cur < ctx->saved) {
-            apr_snprintf(msgbuf + strlen(msgbuf), sizeof(msgbuf) - strlen(msgbuf), 
-                         "%02X", (unsigned)ctx->buf[cur]);
-            ++cur;
-        }
-        msg = msgbuf;
-        break;
-    case EES_DOWNSTREAM:
-        msg = "xlate filter - an error occurred in a lower filter";
-        break;
-    default:
-        msg = "xlate filter - returning error";
-    }
-    ap_log_rerror(APLOG_MARK, flags, rv, f->r,
-                  "%s", msg);
-}
-
-/* chk_filter_chain() is called once per filter instance; it tries to
- * determine if the current filter instance should be disabled because
- * its translation is incompatible with the translation of an existing
- * instance of the translate filter
- *
- * Example bad scenario:
- *
- *   configured filter chain for the request:
- *     INCLUDES XLATEOUT(8859-1->UTS-16)
- *   configured filter chain for the subrequest:
- *     XLATEOUT(8859-1->UTS-16)
- *
- *   When the subrequest is processed, the filter chain will be
- *     XLATEOUT(8859-1->UTS-16) XLATEOUT(8859-1->UTS-16)
- *   This makes no sense, so the instance of XLATEOUT added for the
- *   subrequest will be noop-ed.
- *
- * Example good scenario:
- *
- *   configured filter chain for the request:
- *     INCLUDES XLATEOUT(8859-1->UTS-16)
- *   configured filter chain for the subrequest:
- *     XLATEOUT(IBM-1047->8859-1)
- *
- *   When the subrequest is processed, the filter chain will be
- *     XLATEOUT(IBM-1047->8859-1) XLATEOUT(8859-1->UTS-16)
- *   This makes sense, so the instance of XLATEOUT added for the
- *   subrequest will be left alone and it will translate from
- *   IBM-1047->8859-1.
- */
-static void chk_filter_chain(ap_filter_t *f)
-{
-    ap_filter_t *curf;
-    charset_filter_ctx_t *curctx, *last_xlate_ctx = NULL,
-        *ctx = f->ctx;
-    int debug = ctx->dc->debug;
-    int output = !strcasecmp(f->frec->name, XLATEOUT_FILTER_NAME);
-
-    if (ctx->noop) {
-        return;
-    }
-
-    /* walk the filter chain; see if it makes sense for our filter to
-     * do any translation
-     */
-    curf = output ? f->r->output_filters : f->r->input_filters;
-    while (curf) {
-        if (!strcasecmp(curf->frec->name, f->frec->name) &&
-            curf->ctx) {
-            curctx = (charset_filter_ctx_t *)curf->ctx;
-            if (!last_xlate_ctx) {
-                last_xlate_ctx = curctx;
-            }
-            else {
-                if (strcmp(last_xlate_ctx->dc->charset_default,
-                           curctx->dc->charset_source)) {
-                    /* incompatible translation 
-                     * if our filter instance is incompatible with an instance
-                     * already in place, noop our instance
-                     * Notes: 
-                     * . We are only willing to noop our own instance.
-                     * . It is possible to noop another instance which has not
-                     *   yet run, but this is not currently implemented.
-                     *   Hopefully it will not be needed.
-                     * . It is not possible to noop an instance which has 
-                     *   already run.
-                     */
-                    if (last_xlate_ctx == f->ctx) {
-                        last_xlate_ctx->noop = 1;
-                        if (debug >= DBGLVL_PMC) {
-                            const char *symbol = output ? "->" : "<-";
-
-                            ap_log_rerror(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO,
-                                          0, f->r,
-                                          "%s %s - disabling "
-                                          "translation %s%s%s; existing "
-                                          "translation %s%s%s",
-                                          f->r->uri ? "uri" : "file",
-                                          f->r->uri ? f->r->uri : f->r->filename,
-                                          last_xlate_ctx->dc->charset_source,
-                                          symbol,
-                                          last_xlate_ctx->dc->charset_default,
-                                          curctx->dc->charset_source,
-                                          symbol,
-                                          curctx->dc->charset_default);
-                        }
-                    }
-                    else {
-                        const char *symbol = output ? "->" : "<-";
-
-                        ap_log_rerror(APLOG_MARK, APLOG_ERR|APLOG_NOERRNO,
-                                      0, f->r,
-                                      "chk_filter_chain() - can't disable "
-                                      "translation %s%s%s; existing "
-                                      "translation %s%s%s",
-                                      last_xlate_ctx->dc->charset_source,
-                                      symbol,
-                                      last_xlate_ctx->dc->charset_default,
-                                      curctx->dc->charset_source,
-                                      symbol,
-                                      curctx->dc->charset_default);
-                    }
-                    break;
-                }
-            }
-        }
-        curf = curf->next;
-    }
-}
-
-/* xlate_brigade() is used to filter request and response bodies
- *
- * we'll stop when one of the following occurs:
- * . we run out of buckets
- * . we run out of space in the output buffer
- * . we hit an error
- *
- * inputs:
- *   bb:               brigade to process
- *   buffer:           storage to hold the translated characters
- *   buffer_size:      size of buffer
- *   (and a few more uninteresting parms)
- *
- * outputs:
- *   return value:     APR_SUCCESS or some error code
- *   bb:               we've removed any buckets representing the
- *                     translated characters; the eos bucket, if
- *                     present, will be left in the brigade
- *   buffer:           filled in with translated characters
- *   buffer_size:      updated with the bytes remaining
- *   hit_eos:          did we hit an EOS bucket?
- */
-static apr_status_t xlate_brigade(charset_filter_ctx_t *ctx,
-                                  apr_bucket_brigade *bb,
-                                  char *buffer, 
-                                  apr_size_t *buffer_avail,
-                                  int *hit_eos)
-{
-    apr_bucket *b = NULL; /* set to NULL only to quiet some gcc */
-    apr_bucket *consumed_bucket;
-    const char *bucket;
-    apr_size_t bytes_in_bucket; /* total bytes read from current bucket */
-    apr_size_t bucket_avail;    /* bytes left in current bucket */
-    apr_status_t rv = APR_SUCCESS;
-
-    *hit_eos = 0;
-    bucket_avail = 0;
-    consumed_bucket = NULL;
-    while (1) {
-        if (!bucket_avail) { /* no bytes left to process in the current bucket... */
-            if (consumed_bucket) {
-                apr_bucket_delete(consumed_bucket);
-                consumed_bucket = NULL;
-            }
-            b = APR_BRIGADE_FIRST(bb);
-            if (b == APR_BRIGADE_SENTINEL(bb) ||
-                APR_BUCKET_IS_EOS(b)) {
-                break;
-            }
-            rv = apr_bucket_read(b, &bucket, &bytes_in_bucket, APR_BLOCK_READ);
-            if (rv != APR_SUCCESS) {
-                ctx->ees = EES_BUCKET_READ;
-                break;
-            }
-            bucket_avail = bytes_in_bucket;
-            consumed_bucket = b;   /* for axing when we're done reading it */
-        }
-        if (bucket_avail) {
-            /* We've got data, so translate it. */
-            if (ctx->saved) {
-                /* Rats... we need to finish a partial character from the previous
-                 * bucket.
-                 *
-                 * Strangely, finish_partial_char() increments the input buffer
-                 * pointer but does not increment the output buffer pointer.
-                 */
-                apr_size_t old_buffer_avail = *buffer_avail;
-                rv = finish_partial_char(ctx,
-                                         &bucket, &bucket_avail,
-                                         &buffer, buffer_avail);
-                buffer += old_buffer_avail - *buffer_avail;
-            }
-            else {
-                apr_size_t old_buffer_avail = *buffer_avail;
-                apr_size_t old_bucket_avail = bucket_avail;
-                rv = apr_xlate_conv_buffer(ctx->xlate,
-                                           bucket, &bucket_avail,
-                                           buffer,
-                                           buffer_avail);
-                buffer  += old_buffer_avail - *buffer_avail;
-                bucket  += old_bucket_avail - bucket_avail;
-                
-                if (rv == APR_INCOMPLETE) { /* partial character at end of input */
-                    /* We need to save the final byte(s) for next time; we can't
-                     * convert it until we look at the next bucket.
-                     */
-                    rv = set_aside_partial_char(ctx, bucket, bucket_avail);
-                    bucket_avail = 0;
-                }
-            }
-            if (rv != APR_SUCCESS) {
-                /* bad input byte or partial char too big to store */
-                break;
-            }
-            if (*buffer_avail < XLATE_MIN_BUFF_LEFT) {
-                /* if any data remains in the current bucket, split there */
-                if (bucket_avail) {
-                    apr_bucket_split(b, bytes_in_bucket - bucket_avail);
-                }
-                apr_bucket_delete(b);
-                break;
-            }
-        }
-    }
-
-    if (!APR_BRIGADE_EMPTY(bb)) {
-        b = APR_BRIGADE_FIRST(bb);
-        if (APR_BUCKET_IS_EOS(b)) {
-            /* Leave the eos bucket in the brigade for reporting to
-             * subsequent filters.
-             */
-            *hit_eos = 1;
-            if (ctx->saved) {
-                /* Oops... we have a partial char from the previous bucket
-                 * that won't be completed because there's no more data.
-                 */
-                rv = APR_INCOMPLETE;
-                ctx->ees = EES_INCOMPLETE_CHAR;
-            }
-        }
-    }
-
-    return rv;
-}
-
-/* xlate_out_filter() handles (almost) arbitrary conversions from one charset 
- * to another...
- * translation is determined in the fixup hook (find_code_page), which is
- * where the filter's context data is set up... the context data gives us
- * the translation handle
- */
-static apr_status_t xlate_out_filter(ap_filter_t *f, apr_bucket_brigade *bb)
-{
-    charset_req_t *reqinfo = ap_get_module_config(f->r->request_config,
-                                                  &charset_lite_module);
-    charset_dir_t *dc = ap_get_module_config(f->r->per_dir_config,
-                                             &charset_lite_module);
-    charset_filter_ctx_t *ctx = f->ctx;
-    apr_bucket *dptr, *consumed_bucket;
-    const char *cur_str;
-    apr_size_t cur_len, cur_avail;
-    char tmp[OUTPUT_XLATE_BUF_SIZE];
-    apr_size_t space_avail;
-    int done;
-    apr_status_t rv = APR_SUCCESS;
-
-    if (!ctx) { 
-        /* this is SetOutputFilter path; grab the preallocated context,
-         * if any; note that if we decided not to do anything in an earlier
-         * handler, we won't even have a reqinfo
-         */
-        if (reqinfo) {
-            ctx = f->ctx = reqinfo->output_ctx;
-            reqinfo->output_ctx = NULL; /* prevent SNAFU if user coded us twice
-                                         * in the filter chain; we can't have two
-                                         * instances using the same context
-                                         */
-        }
-        if (!ctx) {                   /* no idea how to translate; don't do anything */
-            ctx = f->ctx = apr_pcalloc(f->r->pool, sizeof(charset_filter_ctx_t));
-            ctx->dc = dc;
-            ctx->noop = 1;
-        }
-    }
-
-    if (dc->debug >= DBGLVL_GORY) {
-        ap_log_rerror(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, f->r,
-                     "xlate_out_filter() - "
-                     "charset_source: %s charset_default: %s",
-                     dc && dc->charset_source ? dc->charset_source : "(none)",
-                     dc && dc->charset_default ? dc->charset_default : "(none)");
-    }
-
-    if (!ctx->ran) {  /* filter never ran before */
-        chk_filter_chain(f);
-        ctx->ran = 1;
-    }
-
-    if (ctx->noop) {
-        return ap_pass_brigade(f->next, bb);
-    }
-
-    dptr = APR_BRIGADE_FIRST(bb);
-    done = 0;
-    cur_len = 0;
-    space_avail = sizeof(tmp);
-    consumed_bucket = NULL;
-    while (!done) {
-        if (!cur_len) { /* no bytes left to process in the current bucket... */
-            if (consumed_bucket) {
-                apr_bucket_delete(consumed_bucket);
-                consumed_bucket = NULL;
-            }
-            if (dptr == APR_BRIGADE_SENTINEL(bb)) {
-                done = 1;
-                break;
-            }
-            if (APR_BUCKET_IS_EOS(dptr)) {
-                done = 1;
-                cur_len = -1; /* XXX yuck, but that tells us to send
-                                 * eos down; when we minimize our bb construction
-                                 * we'll fix this crap */
-                if (ctx->saved) {
-                    /* Oops... we have a partial char from the previous bucket
-                     * that won't be completed because there's no more data.
-                     */
-                    rv = APR_INCOMPLETE;
-                    ctx->ees = EES_INCOMPLETE_CHAR;
-                }
-                break;
-            }
-            rv = apr_bucket_read(dptr, &cur_str, &cur_len, APR_BLOCK_READ);
-            if (rv != APR_SUCCESS) {
-                done = 1;
-                ctx->ees = EES_BUCKET_READ;
-                break;
-            }
-            consumed_bucket = dptr; /* for axing when we're done reading it */
-            dptr = APR_BUCKET_NEXT(dptr); /* get ready for when we access the 
-                                          * next bucket */
-        }
-        /* Try to fill up our tmp buffer with translated data. */
-        cur_avail = cur_len;
-
-        if (cur_len) { /* maybe we just hit the end of a pipe (len = 0) ? */
-            if (ctx->saved) {
-                /* Rats... we need to finish a partial character from the previous
-                 * bucket.
-                 */
-                char *tmp_tmp;
-                
-                tmp_tmp = tmp + sizeof(tmp) - space_avail;
-                rv = finish_partial_char(ctx,
-                                         &cur_str, &cur_len,
-                                         &tmp_tmp, &space_avail);
-            }
-            else {
-                rv = apr_xlate_conv_buffer(ctx->xlate,
-                                           cur_str, &cur_avail,
-                                           tmp + sizeof(tmp) - space_avail, &space_avail);
-                
-                /* Update input ptr and len after consuming some bytes */
-                cur_str += cur_len - cur_avail;
-                cur_len = cur_avail;
-                
-                if (rv == APR_INCOMPLETE) { /* partial character at end of input */
-                    /* We need to save the final byte(s) for next time; we can't
-                     * convert it until we look at the next bucket.
-                     */
-                    rv = set_aside_partial_char(ctx, cur_str, cur_len);
-                    cur_len = 0;
-                }
-            }
-        }
-
-        if (rv != APR_SUCCESS) {
-            /* bad input byte or partial char too big to store */
-            done = 1;
-        }
-
-        if (space_avail < XLATE_MIN_BUFF_LEFT) {
-            /* It is time to flush, as there is not enough space left in the
-             * current output buffer to bother with converting more data.
-             */
-            rv = send_downstream(f, tmp, sizeof(tmp) - space_avail);
-            if (rv != APR_SUCCESS) {
-                done = 1;
-            }
-            
-            /* tmp is now empty */
-            space_avail = sizeof(tmp);
-        }
-    }
-
-    if (rv == APR_SUCCESS) {
-        if (space_avail < sizeof(tmp)) { /* gotta write out what we converted */
-            rv = send_downstream(f, tmp, sizeof(tmp) - space_avail);
-        }
-    }
-    if (rv == APR_SUCCESS) {
-        if (cur_len == -1) {
-            rv = send_eos(f);
-        }
-    }
-    else {
-        log_xlate_error(f, rv);
-    }
-
-    return rv;
-}
-
-static int xlate_in_filter(ap_filter_t *f, apr_bucket_brigade *bb, 
-                           ap_input_mode_t mode, apr_read_type_e block,
-                           apr_off_t readbytes)
-{
-    apr_status_t rv;
-    charset_req_t *reqinfo = ap_get_module_config(f->r->request_config,
-                                                  &charset_lite_module);
-    charset_dir_t *dc = ap_get_module_config(f->r->per_dir_config,
-                                             &charset_lite_module);
-    charset_filter_ctx_t *ctx = f->ctx;
-    apr_size_t buffer_size;
-    int hit_eos;
-
-    if (!ctx) { 
-        /* this is SetInputFilter path; grab the preallocated context,
-         * if any; note that if we decided not to do anything in an earlier
-         * handler, we won't even have a reqinfo
-         */
-        if (reqinfo) {
-            ctx = f->ctx = reqinfo->input_ctx;
-            reqinfo->input_ctx = NULL; /* prevent SNAFU if user coded us twice
-                                        * in the filter chain; we can't have two
-                                        * instances using the same context
-                                        */
-        }
-        if (!ctx) {                   /* no idea how to translate; don't do anything */
-            ctx = f->ctx = apr_pcalloc(f->r->pool, sizeof(charset_filter_ctx_t));
-            ctx->dc = dc;
-            ctx->noop = 1;
-        }
-    }
-
-    if (dc->debug >= DBGLVL_GORY) {
-        ap_log_rerror(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, f->r,
-                     "xlate_in_filter() - "
-                     "charset_source: %s charset_default: %s",
-                     dc && dc->charset_source ? dc->charset_source : "(none)",
-                     dc && dc->charset_default ? dc->charset_default : "(none)");
-    }
-
-    if (!ctx->ran) {  /* filter never ran before */
-        chk_filter_chain(f);
-        ctx->ran = 1;
-    }
-
-    if (ctx->noop) {
-        return ap_get_brigade(f->next, bb, mode, block, readbytes);
-    }
-
-    if (APR_BRIGADE_EMPTY(ctx->bb)) {
-        if ((rv = ap_get_brigade(f->next, bb, mode, block, 
-                                 readbytes)) != APR_SUCCESS) {
-            return rv;
-        }
-    }
-    else {
-        APR_BRIGADE_PREPEND(bb, ctx->bb); /* first use the leftovers */
-    }
-
-    buffer_size = INPUT_XLATE_BUF_SIZE;
-    rv = xlate_brigade(ctx, bb, ctx->tmp, &buffer_size, &hit_eos);
-    if (rv == APR_SUCCESS) {
-        if (!hit_eos) {
-            /* move anything leftover into our context for next time;
-             * we don't currently "set aside" since the data came from
-             * down below, but I suspect that for long-term we need to
-             * do that
-             */
-            APR_BRIGADE_CONCAT(ctx->bb, bb);
-        }
-        if (buffer_size < INPUT_XLATE_BUF_SIZE) { /* do we have output? */
-            apr_bucket *e;
-
-            e = apr_bucket_heap_create(ctx->tmp, 
-                                      INPUT_XLATE_BUF_SIZE - buffer_size, 1);
-            /* make sure we insert at the head, because there may be
-             * an eos bucket already there, and the eos bucket should 
-             * come after the data
-             */
-            APR_BRIGADE_INSERT_HEAD(bb, e);
-        }
-        else {
-            /* XXX need to get some more data... what if the last brigade
-             * we got had only the first byte of a multibyte char?  we need
-             * to grab more data from the network instead of returning an
-             * empty brigade
-             */
-        }
-    }
-    else {
-        log_xlate_error(f, rv);
-    }
-
-    return rv;
-}
-
-static const command_rec cmds[] =
-{
-    AP_INIT_TAKE1("CharsetSourceEnc",
-                  add_charset_source,
-                  NULL,
-                  OR_FILEINFO,
-                  "source (html,cgi,ssi) file charset"),
-    AP_INIT_TAKE1("CharsetDefault", 
-                  add_charset_default,
-                  NULL,
-                  OR_FILEINFO, 
-                  "name of default charset"),
-    AP_INIT_ITERATE("CharsetOptions",
-                    add_charset_options,
-                    NULL,
-                    OR_FILEINFO,
-                    "valid options: ImplicitAdd, NoImplicitAdd, DebugLevel=n"),
-    {NULL}
-};
-
-static void charset_register_hooks(apr_pool_t *p)
-{
-    ap_hook_fixups(find_code_page, NULL, NULL, APR_HOOK_MIDDLE);
-    ap_hook_insert_filter(xlate_insert_filter, NULL, NULL, APR_HOOK_REALLY_LAST);
-    ap_register_output_filter(XLATEOUT_FILTER_NAME, xlate_out_filter, 
-                              AP_FTYPE_RESOURCE);
-    ap_register_input_filter(XLATEIN_FILTER_NAME, xlate_in_filter, 
-                             AP_FTYPE_RESOURCE);
-}
-
-module AP_MODULE_DECLARE_DATA charset_lite_module =
-{
-    STANDARD20_MODULE_STUFF,
-    create_charset_dir_conf,
-    merge_charset_dir_conf,
-    NULL, 
-    NULL,
-    cmds,
-    charset_register_hooks
-};
-
diff --git a/modules/experimental/mod_charset_lite.exp b/modules/experimental/mod_charset_lite.exp
deleted file mode 100644
index 3f0bf14..0000000
--- a/modules/experimental/mod_charset_lite.exp
+++ /dev/null
@@ -1 +0,0 @@
-charset_lite_module
diff --git a/modules/experimental/mod_deflate.c b/modules/experimental/mod_deflate.c
deleted file mode 100644
index 7744aee..0000000
--- a/modules/experimental/mod_deflate.c
+++ /dev/null
@@ -1,464 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * (zlib functions gz_open and gzwrite)
- */
-
-/*
- * mod_deflate.c: Perform deflate transfer-encoding on the fly
- *
- * Written by Ian Holsman (IanH@apache.org)
- *
- */
-
-#include "httpd.h"
-#include "http_config.h"
-#include "http_log.h"
-#include "apr_strings.h"
-#include "apr_general.h"
-#include "util_filter.h"
-#include "apr_buckets.h"
-#include "http_request.h"
-
-#include "zlib.h"
-
-#ifdef HAVE_ZUTIL_H
-#include "zutil.h"
-#else
-/* As part of the encoding process, we must send what our OS_CODE is
- * (or so it seems based on what I can tell of how gzip encoding works).
- *
- * zutil.h is not always included with zlib distributions (it is a private
- * header), so this is straight from zlib 1.1.3's zutil.h.
- */
-#ifdef OS2
-#define OS_CODE  0x06
-#endif
-
-#ifdef WIN32 /* Window 95 & Windows NT */
-#define OS_CODE  0x0b
-#endif
-
-#if defined(VAXC) || defined(VMS)
-#define OS_CODE  0x02
-#endif
-
-#ifdef AMIGA
-#define OS_CODE  0x01
-#endif
-
-#if defined(ATARI) || defined(atarist)
-#define OS_CODE  0x05
-#endif
-
-#if defined(MACOS) || defined(TARGET_OS_MAC)
-#define OS_CODE  0x07
-#endif
-
-#ifdef __50SERIES /* Prime/PRIMOS */
-#define OS_CODE  0x0F
-#endif
-
-#ifdef TOPS20
-#define OS_CODE  0x0a
-#endif
-
-#ifndef OS_CODE
-#define OS_CODE  0x03  /* assume Unix */
-#endif
-#endif
-
-static const char deflateFilterName[] = "DEFLATE";
-module AP_MODULE_DECLARE_DATA deflate_module;
-
-typedef struct deflate_filter_config_t
-{
-    int windowSize;
-    int memlevel;
-    char *noteName;
-} deflate_filter_config;
-
-/* windowsize is negative to suppress Zlib header */
-#define DEFAULT_WINDOWSIZE -15
-#define DEFAULT_MEMLEVEL 9
-#define FILTER_BUFSIZE 8096
-
-/* Outputs a long in LSB order to the given file
- * only the bottom 4 bits are required for the deflate file format.
- */
-static void putLong(char *string, unsigned long x)
-{
-    int n;
-    for (n = 0; n < 4; n++) {
-        string[n] = (int) (x & 0xff);
-        x >>= 8;
-    }
-}
-
-static void *create_deflate_server_config(apr_pool_t *p, server_rec *s)
-{
-    deflate_filter_config *c = apr_pcalloc(p, sizeof *c);
-
-    c->memlevel   = DEFAULT_MEMLEVEL;
-    c->windowSize = DEFAULT_WINDOWSIZE;
-
-    return c;
-}
-
-static const char *deflate_set_window_size(cmd_parms *cmd, void *dummy,
-                                           const char *arg)
-{
-    deflate_filter_config *c = ap_get_module_config(cmd->server->module_config,
-                                                    &deflate_module);
-    int i;
-
-    i = atoi(arg);
-
-    if (i < 1 || i > 15)
-        return "DeflateWindowSize must be between 1 and 15";
-
-    c->windowSize = i * -1;
-
-    return NULL;
-}
-
-static const char *deflate_set_note(cmd_parms *cmd, void *dummy,
-                                    const char *arg)
-{
-    deflate_filter_config *c = ap_get_module_config(cmd->server->module_config,
-                                                    &deflate_module);
-    c->noteName = apr_pstrdup(cmd->pool, arg);
-
-    return NULL;
-}
-
-static const char *deflate_set_memlevel(cmd_parms *cmd, void *dummy,
-                                        const char *arg)
-{
-    deflate_filter_config *c = ap_get_module_config(cmd->server->module_config,
-                                                    &deflate_module);
-    int i;
-
-    i = atoi(arg);
-
-    if (i < 1 || i > 9)
-        return "DeflateMemLevel must be between 1 and 9";
-
-    c->memlevel = i;
-
-    return NULL;
-}
-
-/* magic header */
-static int deflate_magic[2] = { 0x1f, 0x8b };
-
-typedef struct deflate_ctx_t
-{
-    z_stream stream;
-    unsigned char buffer[FILTER_BUFSIZE];
-    unsigned long crc;
-    apr_bucket_brigade *bb;
-} deflate_ctx;
-
-static apr_status_t deflate_out_filter(ap_filter_t *f,
-                                       apr_bucket_brigade *bb)
-{
-    apr_bucket *e;
-    const char *accepts;
-    request_rec *r = f->r;
-    deflate_ctx *ctx = f->ctx;
-    char *token = NULL;
-    int zRC;
-    deflate_filter_config *c = ap_get_module_config(r->server->module_config,
-                                                    &deflate_module);
-
-    /* If we don't have a context, we need to ensure that it is okay to send
-     * the deflated content.  If we have a context, that means we've done
-     * this before and we liked it.
-     * This could be not so nice if we always fail.  But, if we succeed,
-     * we're in better shape.
-     */
-    if (!ctx) {
-        char *buf;
-
-        /* only work on main request/no subrequests */
-        if (r->main) {
-            return ap_pass_brigade(f->next, bb);
-        }
-
-        /* some browsers might have problems, so set no-gzip
-         * (with browsermatch) for them
-         */
-        if (apr_table_get(r->subprocess_env, "no-gzip")) {
-            return ap_pass_brigade(f->next, bb);
-        }
-
-        /* Some browsers might have problems with content types
-         * other than text/html, so set gzip-only-text/html
-         * (with browsermatch) for them
-         */
-        if ((r->content_type == NULL
-             || strncmp(r->content_type, "text/html", 9))
-            && apr_table_get(r->subprocess_env, "gzip-only-text/html")) {
-            return ap_pass_brigade(f->next, bb);
-        }
-
-        /* if they don't have the line, then they can't play */
-        accepts = apr_table_get(r->headers_in, "Accept-Encoding");
-        if (accepts == NULL) {
-            return ap_pass_brigade(f->next, bb);
-        }
-
-        token = ap_get_token(r->pool, &accepts, 0);
-        while (token && token[0] && strcmp(token, "gzip")) {
-            /* skip token */
-            accepts++;
-            token = ap_get_token(r->pool, &accepts, 0);
-        }
-
-        /* No acceptable token found. */
-        if (token == NULL || token[0] == '\0') {
-            return ap_pass_brigade(f->next, bb);
-        }
-
-        /* We're cool with filtering this. */
-        ctx = f->ctx = apr_pcalloc(f->r->pool, sizeof(*ctx));
-        ctx->bb = apr_brigade_create(f->r->pool);
-/*
-        ctx->stream.zalloc = (alloc_func) 0;
-        ctx->stream.zfree = (free_func) 0;
-        ctx->stream.opaque = (voidpf) 0;
-        ctx->crc = 0L;
-*/
-        zRC = deflateInit2(&ctx->stream, Z_BEST_SPEED, Z_DEFLATED,
-                           c->windowSize, c->memlevel,
-                           Z_DEFAULT_STRATEGY);
-
-        if (zRC != Z_OK) {
-            f->ctx = NULL;
-            ap_log_rerror(APLOG_MARK, APLOG_ERR | APLOG_NOERRNO, 0, r,
-                          "unable to init Zlib: "
-                          "deflateInit2 returned %d: URL %s",
-                          zRC, r->uri);
-            return ap_pass_brigade(f->next, bb);
-        }
-
-        buf = apr_psprintf(r->pool, "%c%c%c%c%c%c%c%c%c%c", deflate_magic[0],
-                           deflate_magic[1], Z_DEFLATED, 0 /* flags */ , 0, 0,
-                           0, 0 /* time */ , 0 /* xflags */ , OS_CODE);
-        e = apr_bucket_pool_create(buf, 10, r->pool);
-        APR_BRIGADE_INSERT_TAIL(ctx->bb, e);
-
-        apr_table_setn(r->headers_out, "Content-Encoding", "gzip");
-        apr_table_setn(r->headers_out, "Vary", "Accept-Encoding");
-        apr_table_unset(r->headers_out, "Content-Length");
-    }
-
-    APR_BRIGADE_FOREACH(e, bb) {
-        const char *data;
-        apr_bucket *b;
-        apr_size_t len;
-
-        int done = 0;
-
-        if (APR_BUCKET_IS_EOS(e)) {
-            char *buf, *p;
-            char crc_array[4], len_array[4];
-            unsigned int deflate_len;
-
-            ctx->stream.avail_in = 0; /* should be zero already anyway */
-            for (;;) {
-                deflate_len = FILTER_BUFSIZE - ctx->stream.avail_out;
-
-                if (deflate_len != 0) {
-                    b = apr_bucket_heap_create((char *)ctx->buffer,
-                                               deflate_len, 1);
-                    APR_BRIGADE_INSERT_TAIL(ctx->bb, b);
-                    ctx->stream.next_out = ctx->buffer;
-                    ctx->stream.avail_out = FILTER_BUFSIZE;
-                }
-
-                if (done) {
-                    break;
-                }
-
-                zRC = deflate(&ctx->stream, Z_FINISH);
-
-                if (deflate_len == 0 && zRC == Z_BUF_ERROR) {
-                    zRC = Z_OK;
-                }
-
-                done = (ctx->stream.avail_out != 0 || zRC == Z_STREAM_END);
-
-                if (zRC != Z_OK && zRC != Z_STREAM_END) {
-                    break;
-                }
-            }
-
-            putLong(crc_array, ctx->crc);
-            putLong(len_array, ctx->stream.total_in);
-
-            p = buf = apr_palloc(r->pool, 8);
-            *p++ = crc_array[0];
-            *p++ = crc_array[1];
-            *p++ = crc_array[2];
-            *p++ = crc_array[3];
-            *p++ = len_array[0];
-            *p++ = len_array[1];
-            *p++ = len_array[2];
-            *p++ = len_array[3];
-
-            b = apr_bucket_pool_create(buf, 8, r->pool);
-            APR_BRIGADE_INSERT_TAIL(ctx->bb, b);
-            ap_log_rerror(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, 0, r,
-                          "Zlib: Compressed %ld to %ld : URL %s",
-                          ctx->stream.total_in, ctx->stream.total_out, r->uri);
-
-            if (c->noteName) {
-                if (ctx->stream.total_in > 0) {
-                    int total;
-
-                    total = ctx->stream.total_out * 100 / ctx->stream.total_in;
-
-                    apr_table_setn(r->notes, c->noteName,
-                                   apr_itoa(r->pool, total));
-                }
-                else {
-                    apr_table_setn(r->notes, c->noteName, "-");
-                }
-            }
-
-            deflateEnd(&ctx->stream);
-
-            /* Remove EOS from the old list, and insert into the new. */
-            APR_BUCKET_REMOVE(e);
-            APR_BRIGADE_INSERT_TAIL(ctx->bb, e);
-
-            /* Okay, we've seen the EOS.
-             * Time to pass it along down the chain.
-             */
-            return ap_pass_brigade(f->next, ctx->bb);
-        }
-
-        if (APR_BUCKET_IS_FLUSH(e)) {
-            /* XXX FIX: do we need the Content-Size set, or can we stream?
-             * we should be able to stream
-             */
-
-            /* Ignore flush buckets for the moment.. we can't stream as we
-             * need the size ;(
-             */
-            continue;
-        }
-
-        /* read */
-        apr_bucket_read(e, &data, &len, APR_BLOCK_READ);
-
-        /* This crc32 function is from zlib. */
-        ctx->crc = crc32(ctx->crc, (const Bytef *)data, len);
-
-        /* write */
-        ctx->stream.next_in = (unsigned char *)data; /* We just lost const-ness,
-                                                      * but we'll just have to
-                                                      * trust zlib */
-        ctx->stream.avail_in = len;
-        ctx->stream.next_out = ctx->buffer;
-        ctx->stream.avail_out = FILTER_BUFSIZE;
-
-        while (ctx->stream.avail_in != 0) {
-            if (ctx->stream.avail_out == 0) {
-                ctx->stream.next_out = ctx->buffer;
-                len = FILTER_BUFSIZE - ctx->stream.avail_out;
-
-                b = apr_bucket_heap_create((char *)ctx->buffer, len, 1);
-                APR_BRIGADE_INSERT_TAIL(ctx->bb, b);
-                ctx->stream.avail_out = FILTER_BUFSIZE;
-            }
-
-            zRC = deflate(&(ctx->stream), Z_NO_FLUSH);
-
-            if (zRC != Z_OK)
-                return APR_EGENERAL;
-        }
-    }
-
-    apr_brigade_destroy(bb);
-    return APR_SUCCESS;
-}
-
-static void register_hooks(apr_pool_t *p)
-{
-    ap_register_output_filter(deflateFilterName, deflate_out_filter,
-                              AP_FTYPE_CONTENT_SET);
-}
-
-static const command_rec deflate_filter_cmds[] = {
-    AP_INIT_TAKE1("DeflateFilterNote", deflate_set_note, NULL, RSRC_CONF,
-                  "Set a note to report on compression ratio"),
-    AP_INIT_TAKE1("DeflateWindowSize", deflate_set_window_size, NULL,
-                  RSRC_CONF, "Set the Deflate window size (1-15)"),
-    AP_INIT_TAKE1("DeflateMemLevel", deflate_set_memlevel, NULL, RSRC_CONF,
-                  "Set the Deflate Memory Level (1-9)"),
-    {NULL}
-};
-
-module AP_MODULE_DECLARE_DATA deflate_module = {
-    STANDARD20_MODULE_STUFF,
-    NULL,                         /* dir config creater */
-    NULL,                         /* dir merger --- default is to override */
-    create_deflate_server_config, /* server config */
-    NULL,                         /* merge server config */
-    deflate_filter_cmds,          /* command table */
-    register_hooks                /* register hooks */
-};
diff --git a/modules/experimental/mod_deflate.exp b/modules/experimental/mod_deflate.exp
deleted file mode 100644
index 9ec7688..0000000
--- a/modules/experimental/mod_deflate.exp
+++ /dev/null
@@ -1 +0,0 @@
-deflate_module
diff --git a/modules/experimental/mod_disk_cache.c b/modules/experimental/mod_disk_cache.c
deleted file mode 100644
index a06f84d..0000000
--- a/modules/experimental/mod_disk_cache.c
+++ /dev/null
@@ -1,814 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-#include "mod_cache.h"
-#include "apr_file_io.h"
-#include "apr_strings.h"
-#include "util_filter.h"
-#include "util_script.h"
-
-#if APR_HAVE_UNISTD_H
-#include <unistd.h> /* needed for unlink/link */
-#endif
-
-/*
- * disk_cache_object_t
- * Pointed to by cache_object_t::vobj
- */
-typedef struct disk_cache_object {
-    const char *root;        /* the location of the cache directory */
-    char *tempfile;          /* temp file tohold the content */
-#if 0
-    int dirlevels;              /* Number of levels of subdirectories */
-    int dirlength;            /* Length of subdirectory names */   
-#endif
-    char *datafile;          /* name of file where the data will go */
-    char *hdrsfile;          /* name of file where the hdrs will go */
-    char *name;
-    int version;             /* update count of the file */
-    apr_file_t *fd;          /* data file */
-    apr_file_t *hfd;         /* headers file */
-    apr_off_t file_size;    /*  File size of the cached data file  */    
-} disk_cache_object_t;
-
-/*
- * mod_disk_cache configuration
- */
-/* TODO: Make defaults OS specific */
-#define CACHEFILE_LEN 20        /* must be less than HASH_LEN/2 */
-#define DEFAULT_DIRLEVELS 3
-#define DEFAULT_DIRLENGTH 2
-#define DEFAULT_MIN_FILE_SIZE 1
-#define DEFAULT_MAX_FILE_SIZE 1000000
-#define DEFAULT_CACHE_SIZE 1000000
- 
-typedef struct {
-    const char* cache_root;
-    apr_size_t cache_root_len;
-    off_t space;                 /* Maximum cache size (in 1024 bytes) */
-    apr_time_t maxexpire;        /* Maximum time to keep cached files in msecs */
-    apr_time_t defaultexpire;    /* default time to keep cached file in msecs */
-    double lmfactor;             /* factor for estimating expires date */
-    apr_time_t gcinterval;       /* garbage collection interval, in msec */
-    int dirlevels;               /* Number of levels of subdirectories */
-    int dirlength;               /* Length of subdirectory names */
-    int	expirychk;               /* true if expiry time is observed for cached files */
-    apr_size_t minfs;            /* minumum file size for cached files */
-    apr_size_t maxfs;            /* maximum file size for cached files */
-    apr_time_t mintm;            /* minimum time margin for caching files */
-    /* dgc_time_t gcdt;            time of day for daily garbage collection */
-    apr_array_header_t *gcclnun; /* gc_retain_t entries for unused files */
-    apr_array_header_t *gcclean; /* gc_retain_t entries for all files */
-    int maxgcmem;                /* maximum memory used by garbage collection */
-} disk_cache_conf;
-
-module AP_MODULE_DECLARE_DATA disk_cache_module;
-
-/* Forward declarations */
-static int remove_entity(cache_handle_t *h);
-static apr_status_t write_headers(cache_handle_t *h, request_rec *r, cache_info *i);
-static apr_status_t write_body(cache_handle_t *h, request_rec *r, apr_bucket_brigade *b);
-static apr_status_t read_headers(cache_handle_t *h, request_rec *r);
-static apr_status_t read_body(cache_handle_t *h, apr_pool_t *p, apr_bucket_brigade *bb);
-
-/*
- * Local static functions
- */
-#define CACHE_HEADER_SUFFIX ".header"
-#define CACHE_DATA_SUFFIX   ".data"
-static char *header_file(apr_pool_t *p, int dirlevels, int dirlength, 
-                         const char *root, const char *name)
-{
-    char *hashfile;
-    hashfile = generate_name(p, dirlevels, dirlength, name);
-    return apr_pstrcat(p, root, "/", hashfile, CACHE_HEADER_SUFFIX, NULL);
-}
-
-static char *data_file(apr_pool_t *p, int dirlevels, int dirlength, 
-                       const char *root, const char *name)
-{
-    char *hashfile;
-    hashfile = generate_name(p, dirlevels, dirlength, name);
-    return apr_pstrcat(p, root, "/", hashfile, CACHE_DATA_SUFFIX, NULL);
-}
-
-static void mkdir_structure(disk_cache_conf *conf, char *file, apr_pool_t *pool)
-{
-    apr_status_t rv;
-    char *p;
-
-    for (p = file + conf->cache_root_len + 1;;) {
-        p = strchr(p, '/');
-        if (!p)
-            break;
-        *p = '\0';
-
-        rv = apr_dir_make(file, 
-                          APR_UREAD|APR_UWRITE|APR_UEXECUTE, pool);
-        if (rv != APR_SUCCESS && !APR_STATUS_IS_EEXIST(rv)) {
-            /* XXX */
-        }
-        *p = '/';
-        ++p;
-    }
-}
-
-static apr_status_t file_cache_el_final(cache_handle_t *h, request_rec *r)
-{
-    apr_status_t rv;
-    disk_cache_conf *conf = ap_get_module_config(r->server->module_config,
-                                                 &disk_cache_module);
-    disk_cache_object_t *dobj = (disk_cache_object_t *) h->cache_obj->vobj;
-
-    /* move the data over */
-    if (dobj->fd) {
-        apr_file_flush(dobj->fd);
-        if (!dobj->datafile) {
-            dobj->datafile = data_file(r->pool, conf->dirlevels, conf->dirlength,
-                                       conf->cache_root, h->cache_obj->key);
-        }
-        /* Remove old file with the same name. If remove fails, then
-         * perhaps we need to create the directory tree where we are
-         * about to write the new file.
-         */
-        rv = apr_file_remove(dobj->datafile, r->pool);
-        if (rv != APR_SUCCESS) {
-            mkdir_structure(conf, dobj->datafile, r->pool);
-        }
-
-        /*
-         * This assumes that the tempfile is on the same file system
-         * as the cache_root. If not, then we need a file copy/move
-         * rather than a rename.
-         */
-        rv = apr_file_rename(dobj->tempfile, dobj->datafile, r->pool);
-        if (rv != APR_SUCCESS) {
-            /* XXX log */
-        }
-
-        apr_file_close(dobj->fd);
-        dobj->fd = NULL;
-       /* XXX log */
-   }
-
-   return APR_SUCCESS;
-}
-
-
-/* These two functions get and put state information into the data 
- * file for an ap_cache_el, this state information will be read 
- * and written transparent to clients of this module 
- */
-static int file_cache_read_mydata(apr_file_t *fd, cache_info *info, 
-                                  disk_cache_object_t *dobj)
-{
-    apr_status_t rv;
-    char urlbuff[1034]; /* XXX FIXME... THIS IS A POTENTIAL SECURITY HOLE */
-    int urllen = sizeof(urlbuff);
-    int offset=0;
-    char * temp;
-
-    /* read the data from the cache file */
-    /* format
-     * date SP expire SP count CRLF
-     * dates are stored as hex seconds since 1970
-     */
-    rv = apr_file_gets(&urlbuff[0], urllen, fd);
-    if (rv != APR_SUCCESS) {
-        return rv;
-    }
-
-    if ((temp = strchr(&urlbuff[0], '\n')) != NULL) /* trim off new line character */
-        *temp = '\0';      /* overlay it with the null terminator */
-
-    if (!apr_date_checkmask(urlbuff, "&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&")) {
-        return APR_EGENERAL;
-    }
-
-    info->date = ap_cache_hex2msec(urlbuff + offset);
-    offset += (sizeof(info->date)*2) + 1;
-    info->expire = ap_cache_hex2msec(urlbuff + offset);
-    offset += (sizeof(info->expire)*2) + 1;
-    dobj->version = ap_cache_hex2msec(urlbuff + offset);
-    
-    /* check that we have the same URL */
-    rv = apr_file_gets(&urlbuff[0], urllen, fd);
-    if (rv != APR_SUCCESS) {
-        return rv;
-    }
-
-    if ((temp = strchr(&urlbuff[0], '\n')) != NULL) { /* trim off new line character */
-        *temp = '\0';      /* overlay it with the null terminator */
-    }
-
-    if (strncmp(urlbuff, "X-NAME: ", 7) != 0) {
-        return APR_EGENERAL;
-    }
-    if (strcmp(urlbuff + 8, dobj->name) != 0) {
-        return APR_EGENERAL;
-    }
-    
-    return APR_SUCCESS;
-}
-
-static int file_cache_write_mydata(apr_file_t *fd , cache_handle_t *h, request_rec *r)
-{
-    apr_status_t rc;
-    char *buf;
-    apr_size_t amt;
-
-    char	dateHexS[sizeof(apr_time_t) * 2 + 1];
-    char	expireHexS[sizeof(apr_time_t) * 2 + 1];
-    char	verHexS[sizeof(apr_time_t) * 2 + 1];
-    cache_info *info = &(h->cache_obj->info);
-    disk_cache_object_t *dobj = (disk_cache_object_t *) h->cache_obj->vobj;
-    
-    if (!r->headers_out) {
-        /* XXX log message */
-        return 0;
-    }
-
-    ap_cache_msec2hex(info->date, dateHexS);
-    ap_cache_msec2hex(info->expire, expireHexS);
-    ap_cache_msec2hex(dobj->version++, verHexS);
-    buf = apr_pstrcat(r->pool, dateHexS, " ", expireHexS, " ", verHexS, "\n", NULL);
-    amt = strlen(buf);
-    rc = apr_file_write(fd, buf, &amt);
-    if (rc != APR_SUCCESS) {
-        /* XXX log message */
-        return 0;
-    }
-
-    buf = apr_pstrcat(r->pool, "X-NAME: ", dobj->name, "\n", NULL);
-    amt = strlen(buf);
-    rc = apr_file_write(fd, buf, &amt);
-    if (rc != APR_SUCCESS) {
-        /* XXX log message */
-        return 0;
-    }
-    return 1;
-}
-
-/*
- * Hook and mod_cache callback functions
- */
-#define AP_TEMPFILE "/aptmpXXXXXX"
-static int create_entity(cache_handle_t *h, request_rec *r,
-                         const char *type, 
-                         const char *key, 
-                         apr_size_t len)
-{ 
-    disk_cache_conf *conf = ap_get_module_config(r->server->module_config, 
-                                                 &disk_cache_module);
-    apr_status_t rv;
-    cache_object_t *obj;
-    disk_cache_object_t *dobj;
-    apr_file_t *tmpfile;
-
-    if (strcasecmp(type, "disk")) {
-	return DECLINED;
-    }
-
-    /* Allocate and initialize cache_object_t and disk_cache_object_t */
-    obj = apr_pcalloc(r->pool, sizeof(*obj));
-    obj->vobj = dobj = apr_pcalloc(r->pool, sizeof(*dobj));
-
-    obj->key = apr_pstrdup(r->pool, key);
-    obj->info.len = len;
-    obj->complete = 0;   /* Cache object is not complete */
-
-    dobj->name = obj->key;
-
-    /* open temporary file */
-    dobj->tempfile = apr_pstrcat(r->pool, conf->cache_root, AP_TEMPFILE, NULL);
-    rv = apr_file_mktemp(&tmpfile, dobj->tempfile,  
-                         APR_CREATE | APR_READ | APR_WRITE | APR_EXCL, r->pool);
-
-    /* Populate the cache handle */
-    h->cache_obj = obj;
-    h->read_body = &read_body;
-    h->read_headers = &read_headers;
-    h->write_body = &write_body;
-    h->write_headers = &write_headers;
-    h->remove_entity = &remove_entity;
-
-    ap_log_error(APLOG_MARK, APLOG_INFO|APLOG_NOERRNO, 0, r->server,
-                 "disk_cache: Caching URL %s",  key);
-
-    return OK;
-}
-
-static int open_entity(cache_handle_t *h, request_rec *r, const char *type, const char *key)
-{
-    apr_status_t rc;
-    disk_cache_conf *conf = ap_get_module_config(r->server->module_config, 
-                                                 &disk_cache_module);
-    char *data = data_file(r->pool, conf->dirlevels, conf->dirlength, 
-                           conf->cache_root, key);
-    char *headers = header_file(r->pool, conf->dirlevels, conf->dirlength, 
-                                conf->cache_root, key);
-    apr_file_t *fd;
-    apr_file_t *hfd;
-    apr_finfo_t finfo;
-    cache_object_t *obj;
-    cache_info *info;
-    disk_cache_object_t *dobj;
-
-    h->cache_obj = NULL;
-
-    /* Look up entity keyed to 'url' */
-    if (strcasecmp(type, "disk")) {
-	return DECLINED;
-    }
-
-    /* Open the data file */
-    rc = apr_file_open(&fd, data, APR_READ|APR_BINARY, 0, r->pool);
-    if (rc != APR_SUCCESS) {
-        /* XXX: Log message */
-        return DECLINED;
-    }
-
-    /* Open the headers file */
-    rc = apr_file_open(&hfd, headers, APR_READ|APR_BINARY, 0, r->pool);
-    if (rc != APR_SUCCESS) {
-        /* XXX: Log message */
-        return DECLINED;
-    }
-
-    /* Create and init the cache object */
-    h->cache_obj = obj = apr_pcalloc(r->pool, sizeof(cache_object_t));
-    obj->vobj = dobj = apr_pcalloc(r->pool, sizeof(disk_cache_object_t));
-
-    info = &(obj->info);
-    obj->key = (char *) key;
-    dobj->name = (char *) key;
-    dobj->fd = fd;
-    dobj->hfd = hfd;
-    dobj->datafile = data;
-    dobj->hdrsfile = headers;
-
-    rc = apr_file_info_get(&finfo, APR_FINFO_SIZE, fd);
-    if (rc == APR_SUCCESS) {
-        dobj->file_size = finfo.size;
-    }
-    
-    /* Read the bytes to setup the cache_info fields */
-    rc = file_cache_read_mydata(hfd, info, dobj);
-    if (rc != APR_SUCCESS) {
-        /* XXX log message */
-        return DECLINED;
-    }
-
-    /* Initialize the cache_handle callback functions */
-    h->read_body = &read_body;
-    h->read_headers = &read_headers;
-    h->write_body = &write_body;
-    h->write_headers = &write_headers;
-    h->remove_entity = &remove_entity;
-
-    ap_log_error(APLOG_MARK, APLOG_INFO|APLOG_NOERRNO, 0, r->server,
-                 "disk_cache: Serving Cached URL %s",  dobj->name);
-    return OK;
-}
-
-static int remove_url(const char *type, char *key) 
-{
-  return OK;
-}
-
-static int remove_entity(cache_handle_t *h) 
-{
-    cache_object_t *obj = h->cache_obj;
-
-    /* Null out the cache object pointer so next time we start from scratch  */
-    h->cache_obj = NULL;
-    return OK;
-}
-
-/*
- * Reads headers from a buffer and returns an array of headers.
- * Returns NULL on file error
- * This routine tries to deal with too long lines and continuation lines.
- * @@@: XXX: FIXME: currently the headers are passed thru un-merged. 
- * Is that okay, or should they be collapsed where possible?
- */
-static apr_status_t read_headers(cache_handle_t *h, request_rec *r) 
-{
-    apr_status_t rv;
-    char *temp;
-    char urlbuff[1034];
-    int urllen = sizeof(urlbuff);
-    disk_cache_object_t *dobj = (disk_cache_object_t *) h->cache_obj->vobj;
-
-    /* This case should not happen... */
-    if (!dobj->fd || !dobj->hfd) {
-        /* XXX log message */
-        return APR_NOTFOUND; 
-    }
-
-    if(!r->headers_out) {
-        r->headers_out = apr_table_make(r->pool, 20);
-    }
-    
-    /*
-     * Call routine to read the header lines/status line 
-     */
-    ap_scan_script_header_err(r, dobj->hfd, NULL);
- 
-    apr_table_setn(r->headers_out, "Content-Type", 
-                   ap_make_content_type(r, r->content_type));
-
-    rv = apr_file_gets(&urlbuff[0], urllen, dobj->hfd);           /* Read status  */
-    if (rv != APR_SUCCESS) {
-        /* XXX log message */
-	return rv;
-    }
-
-    r->status = atoi(urlbuff);                           /* Save status line into request rec  */
-
-    rv = apr_file_gets(&urlbuff[0], urllen, dobj->hfd);               /* Read status line */
-    if (rv != APR_SUCCESS) {
-        /* XXX log message */
-	return rv;
-    }
-
-    if ((temp = strchr(&urlbuff[0], '\n')) != NULL)       /* trim off new line character */
-	*temp = '\0';              /* overlay it with the null terminator */
-
-    r->status_line = apr_pstrdup(r->pool, urlbuff);            /* Save status line into request rec  */
-
-    apr_file_close(dobj->hfd);
-
-    ap_log_error(APLOG_MARK, APLOG_INFO|APLOG_NOERRNO, 0, r->server,
-                 "disk_cache: Served headers for URL %s",  dobj->name);
-    return APR_SUCCESS;
-}
-
-static apr_status_t read_body(cache_handle_t *h, apr_pool_t *p, apr_bucket_brigade *bb) 
-{
-    apr_bucket *e;
-    disk_cache_object_t *dobj = (disk_cache_object_t*) h->cache_obj->vobj;
-
-    e = apr_bucket_file_create(dobj->fd, 0, dobj->file_size, p);
-
-    APR_BRIGADE_INSERT_HEAD(bb, e);
-    e = apr_bucket_eos_create();
-    APR_BRIGADE_INSERT_TAIL(bb, e);
-
-    return APR_SUCCESS;
-}
-
-static apr_status_t write_headers(cache_handle_t *h, request_rec *r, cache_info *info)
-{
-    disk_cache_conf *conf = ap_get_module_config(r->server->module_config, 
-                                                 &disk_cache_module);
-    apr_status_t rv;
-    char *buf;
-    char statusbuf[8];
-    apr_size_t amt;
-    disk_cache_object_t *dobj = (disk_cache_object_t*) h->cache_obj->vobj;
-    apr_file_t *hfd = dobj->hfd;
-
-    if (!hfd)  {
-        if (!dobj->hdrsfile) {
-            dobj->hdrsfile = header_file(r->pool, 
-                                         conf->dirlevels, 
-                                         conf->dirlength, 
-                                         conf->cache_root,
-                                         h->cache_obj->key);
-        }
-        
-        /* This is flaky... we need to manage the cache_info differently */
-        h->cache_obj->info = *info;
-        
-        /* Remove old file with the same name. If remove fails, then
-         * perhaps we need to create the directory tree where we are
-         * about to write the new headers file.
-         */
-        rv = apr_file_remove(dobj->hdrsfile, r->pool);
-        if (rv != APR_SUCCESS) {
-            mkdir_structure(conf, dobj->hdrsfile, r->pool);
-        }
-
-        rv = apr_file_open(&dobj->hfd, dobj->hdrsfile,
-                           APR_WRITE | APR_CREATE | APR_EXCL,
-                           0, r->pool);
-        if (rv != APR_SUCCESS) {
-            return rv;
-        }
-        hfd = dobj->hfd;
-        dobj->name = h->cache_obj->key;
-
-        file_cache_write_mydata(dobj->hfd, h, r);
-
-        if (r->headers_out) {
-            int i;
-            apr_table_entry_t *elts = (apr_table_entry_t *) apr_table_elts(r->headers_out)->elts;
-            for (i = 0; i < apr_table_elts(r->headers_out)->nelts; ++i) {
-                if (elts[i].key != NULL) {
-                    buf = apr_pstrcat(r->pool, elts[i].key, ": ",  elts[i].val, CRLF, NULL);
-                    amt = strlen(buf);
-                    apr_file_write(hfd, buf, &amt);
-                }
-            }
-            buf = apr_pstrcat(r->pool, CRLF, NULL);
-            amt = strlen(buf);
-            apr_file_write(hfd, buf, &amt);
-        }
-        sprintf(statusbuf,"%d", r->status);
-        buf = apr_pstrcat(r->pool, statusbuf, CRLF, NULL);
-        amt = strlen(buf);
-        apr_file_write(hfd, buf, &amt);
-        buf = apr_pstrcat(r->pool, r->status_line, "\n", NULL);
-        amt = strlen(buf);
-        apr_file_write(hfd, buf, &amt);
-        buf = apr_pstrcat(r->pool, CRLF, NULL);
-        amt = strlen(buf);
-        apr_file_write(hfd, buf, &amt);
-        apr_file_close(hfd); /* flush and close */
-    }
-    else {
-        /* XXX log message */
-    }
-
-    ap_log_error(APLOG_MARK, APLOG_INFO|APLOG_NOERRNO, 0, r->server,
-                 "disk_cache: Caching headers for URL %s",  dobj->name);
-    return APR_SUCCESS;
-}
-static apr_status_t write_body(cache_handle_t *h, request_rec *r, apr_bucket_brigade *b) 
-{
-    apr_bucket *e;
-    apr_status_t rv;
-    disk_cache_object_t *dobj = (disk_cache_object_t *) h->cache_obj->vobj;
-    cache_info *info = &(h->cache_obj->info);
-
-    if (!dobj->fd) {
-        rv = apr_file_open(&dobj->fd, dobj->tempfile, 
-                           APR_WRITE | APR_CREATE | APR_BINARY| APR_TRUNCATE | APR_BUFFERED,
-                           APR_UREAD | APR_UWRITE, r->pool);
-        if (rv != APR_SUCCESS) {
-            return rv;
-        }
-    }
-    APR_BRIGADE_FOREACH(e, b) {
-        const char *str;
-        apr_size_t length;
-        apr_bucket_read(e, &str, &length, APR_BLOCK_READ);
-        apr_file_write(dobj->fd, str, &length);
-    }
-    if (APR_BUCKET_IS_EOS(APR_BRIGADE_LAST(b))) {
-        file_cache_el_final(h, r);    /* Link to the perm file, and close the descriptor  */
-        ap_log_error(APLOG_MARK, APLOG_INFO|APLOG_NOERRNO, 0, r->server,
-                     "disk_cache: Cached body for URL %s",  dobj->name);
-    }
-
-    return APR_SUCCESS;	
-}
-
-static void *create_config(apr_pool_t *p, server_rec *s)
-{
-    disk_cache_conf *conf = apr_pcalloc(p, sizeof(disk_cache_conf));
-
-    /* XXX: Set default values */
-    conf->dirlevels = DEFAULT_DIRLEVELS;
-    conf->dirlength = DEFAULT_DIRLENGTH;
-    conf->space = DEFAULT_CACHE_SIZE;
-    conf->maxfs = DEFAULT_MAX_FILE_SIZE;
-    conf->minfs = DEFAULT_MIN_FILE_SIZE;
-
-    conf->cache_root = NULL;
-    conf->cache_root_len = 0;
-
-    return conf;
-}
-
-/*
- * mod_disk_cache configuration directives handlers.
- */
-static const char
-*set_cache_root(cmd_parms *parms, void *in_struct_ptr, const char *arg)
-{
-    disk_cache_conf *conf = ap_get_module_config(parms->server->module_config, 
-                                                 &disk_cache_module);
-    conf->cache_root = arg;
-    conf->cache_root_len = strlen(arg);
-    /* TODO: canonicalize cache_root and strip off any trailing slashes */
-
-    return NULL;
-}
-static const char
-*set_cache_size(cmd_parms *parms, void *in_struct_ptr, const char *arg)
-{
-    disk_cache_conf *conf = ap_get_module_config(parms->server->module_config, 
-                                                 &disk_cache_module);
-    conf->space = atoi(arg);
-    return NULL;
-}
-static const char
-*set_cache_gcint(cmd_parms *parms, void *in_struct_ptr, const char *arg)
-{
-    disk_cache_conf *conf = ap_get_module_config(parms->server->module_config, 
-                                                 &disk_cache_module);
-    /* XXX */
-    return NULL;
-}
-/*
- * Consider eliminating the next two directives in favor of
- * Ian's prime number hash...
- * key = hash_fn( r->uri) 
- * filename = "/key % prime1 /key %prime2/key %prime3" 
- */
-static const char
-*set_cache_dirlevels(cmd_parms *parms, void *in_struct_ptr, const char *arg)
-{
-    disk_cache_conf *conf = ap_get_module_config(parms->server->module_config, 
-                                                 &disk_cache_module);
-    int val = atoi(arg);
-    if (val < 1)
-        return "CacheDirLevels value must be an integer greater than 0";
-    if (val * conf->dirlength > CACHEFILE_LEN)
-        return "CacheDirLevels*CacheDirLength value must not be higher than 20";
-    conf->dirlevels = val;
-    return NULL;
-}
-static const char
-*set_cache_dirlength(cmd_parms *parms, void *in_struct_ptr, const char *arg)
-{
-    disk_cache_conf *conf = ap_get_module_config(parms->server->module_config, 
-                                                 &disk_cache_module);
-    int val = atoi(arg);
-    if (val < 1)
-        return "CacheDirLength value must be an integer greater than 0";
-    if (val * conf->dirlevels > CACHEFILE_LEN)
-        return "CacheDirLevels*CacheDirLength value must not be higher than 20";
-
-    conf->dirlength = val;
-    return NULL;
-}
-static const char
-*set_cache_exchk(cmd_parms *parms, void *in_struct_ptr, int flag)
-{
-    disk_cache_conf *conf = ap_get_module_config(parms->server->module_config, 
-                                                 &disk_cache_module);
-    /* XXX */
-    return NULL;
-}
-static const char
-*set_cache_minfs(cmd_parms *parms, void *in_struct_ptr, const char *arg)
-{
-    disk_cache_conf *conf = ap_get_module_config(parms->server->module_config, 
-                                                 &disk_cache_module);
-    conf->minfs = atoi(arg);
-    return NULL;
-}
-static const char
-*set_cache_maxfs(cmd_parms *parms, void *in_struct_ptr, const char *arg)
-{
-    disk_cache_conf *conf = ap_get_module_config(parms->server->module_config, 
-                                                 &disk_cache_module);
-    conf->maxfs = atoi(arg);
-    return NULL;
-}
-static const char
-*set_cache_minetm(cmd_parms *parms, void *in_struct_ptr, const char *arg)
-{
-    disk_cache_conf *conf = ap_get_module_config(parms->server->module_config, 
-                                                 &disk_cache_module);
-    /* XXX */
-    return NULL;
-}
-static const char
-*set_cache_gctime(cmd_parms *parms, void *in_struct_ptr, const char *arg)
-{
-    disk_cache_conf *conf = ap_get_module_config(parms->server->module_config, 
-                                                 &disk_cache_module);
-    /* XXX */
-    return NULL;
-}
-static const char
-*add_cache_gcclean(cmd_parms *parms, void *in_struct_ptr, const char *arg, const char *arg1)
-{
-    disk_cache_conf *conf = ap_get_module_config(parms->server->module_config, 
-                                                 &disk_cache_module);
-    /* XXX */
-    return NULL;
-}
-static const char
-*add_cache_gcclnun(cmd_parms *parms, void *in_struct_ptr, const char *arg, const char *arg1)
-{
-    disk_cache_conf *conf = ap_get_module_config(parms->server->module_config, 
-                                                 &disk_cache_module);
-    /* XXX */
-    return NULL;
-}
-static const char
-*set_cache_maxgcmem(cmd_parms *parms, void *in_struct_ptr, const char *arg)
-{
-    disk_cache_conf *conf = ap_get_module_config(parms->server->module_config, 
-                                                 &disk_cache_module);
-    /* XXX */
-    return NULL;
-}
-static const command_rec disk_cache_cmds[] =
-{
-    AP_INIT_TAKE1("CacheRoot", set_cache_root, NULL, RSRC_CONF,
-                 "The directory to store cache files"),
-    AP_INIT_TAKE1("CacheSize", set_cache_size, NULL, RSRC_CONF,
-                  "The maximum disk space used by the cache in Kb"),
-    AP_INIT_TAKE1("CacheGcInterval", set_cache_gcint, NULL, RSRC_CONF,
-                  "The interval between garbage collections, in hours"),
-    AP_INIT_TAKE1("CacheDirLevels", set_cache_dirlevels, NULL, RSRC_CONF,
-                  "The number of levels of subdirectories in the cache"),
-    AP_INIT_TAKE1("CacheDirLength", set_cache_dirlength, NULL, RSRC_CONF,
-                  "The number of characters in subdirectory names"),
-    AP_INIT_FLAG("CacheExpiryCheck", set_cache_exchk, NULL, RSRC_CONF,
-                 "on if cache observes Expires date when seeking files"),
-    AP_INIT_TAKE1("CacheMinFileSize", set_cache_minfs, NULL, RSRC_CONF,
-                  "The minimum file size to cache a document"),
-    AP_INIT_TAKE1("CacheMaxFileSize", set_cache_maxfs, NULL, RSRC_CONF,
-                  "The maximum file size to cache a document"),
-    AP_INIT_TAKE1("CacheTimeMargin", set_cache_minetm, NULL, RSRC_CONF,
-                  "The minimum time margin to cache a document"),
-    AP_INIT_TAKE1("CacheGcDaily", set_cache_gctime, NULL, RSRC_CONF,
-                  "The time of day for garbage collection (24 hour clock)"),
-    AP_INIT_TAKE2("CacheGcUnused", add_cache_gcclnun, NULL, RSRC_CONF,
-                  "The time in hours to retain unused file that match a url"),
-    AP_INIT_TAKE2("CacheGcClean", add_cache_gcclean, NULL, RSRC_CONF,
-                  "The time in hours to retain unchanged files that match a url"),
-    AP_INIT_TAKE1("CacheGcMemUsage", set_cache_maxgcmem, NULL, RSRC_CONF,
-                  "The maximum kilobytes of memory used for garbage collection"),
-    {NULL}
-};
-
-static void disk_cache_register_hook(apr_pool_t *p)
-{
-    /* cache initializer */
-    cache_hook_create_entity(create_entity, NULL, NULL, APR_HOOK_MIDDLE);
-    cache_hook_open_entity(open_entity,  NULL, NULL, APR_HOOK_MIDDLE);
-/*    cache_hook_remove_entity(remove_entity, NULL, NULL, APR_HOOK_MIDDLE); */
-}
-
-module AP_MODULE_DECLARE_DATA disk_cache_module = {
-    STANDARD20_MODULE_STUFF,
-    NULL,                       /* create per-directory config structure */
-    NULL,                       /* merge per-directory config structures */
-    create_config,              /* create per-server config structure */
-    NULL,                       /* merge per-server config structures */
-    disk_cache_cmds,	        /* command apr_table_t */
-    disk_cache_register_hook	/* register hooks */
-};
diff --git a/modules/experimental/mod_disk_cache.dsp b/modules/experimental/mod_disk_cache.dsp
deleted file mode 100644
index e7f97ca..0000000
--- a/modules/experimental/mod_disk_cache.dsp
+++ /dev/null
@@ -1,111 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mod_disk_cache" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mod_disk_cache - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "mod_disk_cache.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "mod_disk_cache.mak" CFG="mod_disk_cache - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "mod_disk_cache - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mod_disk_cache - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "mod_disk_cache - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MOD_DISK_CACHE_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /I "../../srclib/apr-util/include" /I "../../srclib/apr/include" /I "../../include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MOD_DISK_CACHE_EXPORTS" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"Release/mod_disk_cache.so"
-
-!ELSEIF  "$(CFG)" == "mod_disk_cache - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MOD_DISK_CACHE_EXPORTS" /YX /FD /GZ /c
-# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../../srclib/apr-util/include" /I "../../srclib/apr/include" /I "../../include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MOD_DISK_CACHE_EXPORTS" /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"Debug/mod_disk_cache.so" /pdbtype:sept
-
-!ENDIF 
-
-# Begin Target
-
-# Name "mod_disk_cache - Win32 Release"
-# Name "mod_disk_cache - Win32 Debug"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\mod_disk_cache.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\mod_cache.h
-# End Source File
-# End Group
-# Begin Group "Resource Files"
-
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-# End Group
-# End Target
-# End Project
diff --git a/modules/experimental/mod_example.c b/modules/experimental/mod_example.c
deleted file mode 100644
index 027cadd..0000000
--- a/modules/experimental/mod_example.c
+++ /dev/null
@@ -1,1343 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- */
-
-/* 
- * Apache example module.  Provide demonstrations of how modules do things.
- * It is not meant to be used in a production server.  Since it participates
- * in all of the processing phases, it could conceivable interfere with
- * the proper operation of other modules -- particularly the ones related
- * to security.
- *
- * In the interest of brevity, all functions and structures internal to
- * this module, but which may have counterparts in *real* modules, are
- * prefixed with 'x_' instead of 'example_'.
- */
-
-#include "httpd.h"
-#include "http_config.h"
-#include "http_core.h"
-#include "http_log.h"
-#include "http_main.h"
-#include "http_protocol.h"
-#include "http_request.h"
-#include "util_script.h"
-#include "http_connection.h"
-
-#include "apr_strings.h"
-
-#include <stdio.h>
-
-/*--------------------------------------------------------------------------*/
-/*                                                                          */
-/* Data declarations.                                                       */
-/*                                                                          */
-/* Here are the static cells and structure declarations private to our      */
-/* module.                                                                  */
-/*                                                                          */
-/*--------------------------------------------------------------------------*/
-
-/*
- * Sample configuration record.  Used for both per-directory and per-server
- * configuration data.
- *
- * It's perfectly reasonable to have two different structures for the two
- * different environments.  The same command handlers will be called for
- * both, though, so the handlers need to be able to tell them apart.  One
- * possibility is for both structures to start with an int which is 0 for
- * one and 1 for the other.
- *
- * Note that while the per-directory and per-server configuration records are
- * available to most of the module handlers, they should be treated as
- * READ-ONLY by all except the command and merge handlers.  Sometimes handlers
- * are handed a record that applies to the current location by implication or
- * inheritance, and modifying it will change the rules for other locations.
- */
-typedef struct x_cfg {
-    int cmode;                  /* Environment to which record applies
-                                 * (directory, server, or combination).
-                                 */
-#define CONFIG_MODE_SERVER 1
-#define CONFIG_MODE_DIRECTORY 2
-#define CONFIG_MODE_COMBO 3     /* Shouldn't ever happen. */
-    int local;                  /* Boolean: "Example" directive declared
-                                 * here?
-                                 */
-    int congenital;             /* Boolean: did we inherit an "Example"? */
-    char *trace;                /* Pointer to trace string. */
-    char *loc;                  /* Location to which this record applies. */
-} x_cfg;
-
-/*
- * Let's set up a module-local static cell to point to the accreting callback
- * trace.  As each API callback is made to us, we'll tack on the particulars
- * to whatever we've already recorded.  To avoid massive memory bloat as
- * directories are walked again and again, we record the routine/environment
- * the first time (non-request context only), and ignore subsequent calls for
- * the same routine/environment.
- */
-static const char *trace = NULL;
-static apr_table_t *static_calls_made = NULL;
-
-/*
- * To avoid leaking memory from pools other than the per-request one, we
- * allocate a module-private pool, and then use a sub-pool of that which gets
- * freed each time we modify the trace.  That way previous layers of trace
- * data don't get lost.
- */
-static apr_pool_t *x_pool = NULL;
-static apr_pool_t *x_subpool = NULL;
-
-/*
- * Declare ourselves so the configuration routines can find and know us.
- * We'll fill it in at the end of the module.
- */
-module AP_MODULE_DECLARE_DATA example_module;
-
-/*--------------------------------------------------------------------------*/
-/*                                                                          */
-/* The following pseudo-prototype declarations illustrate the parameters    */
-/* passed to command handlers for the different types of directive          */
-/* syntax.  If an argument was specified in the directive definition        */
-/* (look for "command_rec" below), it's available to the command handler    */
-/* via the (void *) info field in the cmd_parms argument passed to the      */
-/* handler (cmd->info for the examples below).                              */
-/*                                                                          */
-/*--------------------------------------------------------------------------*/
-
-/*
- * Command handler for a NO_ARGS directive.  Declared in the command_rec
- * list with
- *   AP_INIT_NO_ARGS("directive", function, mconfig, where, help)
- *
- * static const char *handle_NO_ARGS(cmd_parms *cmd, void *mconfig);
- */
-
-/*
- * Command handler for a RAW_ARGS directive.  The "args" argument is the text
- * of the commandline following the directive itself.  Declared in the
- * command_rec list with
- *   AP_INIT_RAW_ARGS("directive", function, mconfig, where, help)
- *
- * static const char *handle_RAW_ARGS(cmd_parms *cmd, void *mconfig,
- *                                    const char *args);
- */
-
-/*
- * Command handler for a FLAG directive.  The single parameter is passed in
- * "bool", which is either zero or not for Off or On respectively.
- * Declared in the command_rec list with
- *   AP_INIT_FLAG("directive", function, mconfig, where, help)
- *
- * static const char *handle_FLAG(cmd_parms *cmd, void *mconfig, int bool);
- */
-
-/*
- * Command handler for a TAKE1 directive.  The single parameter is passed in
- * "word1".  Declared in the command_rec list with
- *   AP_INIT_TAKE1("directive", function, mconfig, where, help)
- *
- * static const char *handle_TAKE1(cmd_parms *cmd, void *mconfig,
- *                                 char *word1);
- */
-
-/*
- * Command handler for a TAKE2 directive.  TAKE2 commands must always have
- * exactly two arguments.  Declared in the command_rec list with
- *   AP_INIT_TAKE2("directive", function, mconfig, where, help)
- *
- * static const char *handle_TAKE2(cmd_parms *cmd, void *mconfig,
- *                                 char *word1, char *word2);
- */
-
-/*
- * Command handler for a TAKE3 directive.  Like TAKE2, these must have exactly
- * three arguments, or the parser complains and doesn't bother calling us.
- * Declared in the command_rec list with
- *   AP_INIT_TAKE3("directive", function, mconfig, where, help)
- *
- * static const char *handle_TAKE3(cmd_parms *cmd, void *mconfig,
- *                                 char *word1, char *word2, char *word3);
- */
-
-/*
- * Command handler for a TAKE12 directive.  These can take either one or two
- * arguments.
- * - word2 is a NULL pointer if no second argument was specified.
- * Declared in the command_rec list with
- *   AP_INIT_TAKE12("directive", function, mconfig, where, help)
- *
- * static const char *handle_TAKE12(cmd_parms *cmd, void *mconfig,
- *                                  char *word1, char *word2);
- */
-
-/*
- * Command handler for a TAKE123 directive.  A TAKE123 directive can be given,
- * as might be expected, one, two, or three arguments.
- * - word2 is a NULL pointer if no second argument was specified.
- * - word3 is a NULL pointer if no third argument was specified.
- * Declared in the command_rec list with
- *   AP_INIT_TAKE123("directive", function, mconfig, where, help)
- *
- * static const char *handle_TAKE123(cmd_parms *cmd, void *mconfig,
- *                                   char *word1, char *word2, char *word3);
- */
-
-/*
- * Command handler for a TAKE13 directive.  Either one or three arguments are
- * permitted - no two-parameters-only syntax is allowed.
- * - word2 and word3 are NULL pointers if only one argument was specified.
- * Declared in the command_rec list with
- *   AP_INIT_TAKE13("directive", function, mconfig, where, help)
- *
- * static const char *handle_TAKE13(cmd_parms *cmd, void *mconfig,
- *                                  char *word1, char *word2, char *word3);
- */
-
-/*
- * Command handler for a TAKE23 directive.  At least two and as many as three
- * arguments must be specified.
- * - word3 is a NULL pointer if no third argument was specified.
- * Declared in the command_rec list with
- *   AP_INIT_TAKE23("directive", function, mconfig, where, help)
- *
- * static const char *handle_TAKE23(cmd_parms *cmd, void *mconfig,
- *                                  char *word1, char *word2, char *word3);
- */
-
-/*
- * Command handler for a ITERATE directive.
- * - Handler is called once for each of n arguments given to the directive.
- * - word1 points to each argument in turn.
- * Declared in the command_rec list with
- *   AP_INIT_ITERATE("directive", function, mconfig, where, help)
- *
- * static const char *handle_ITERATE(cmd_parms *cmd, void *mconfig,
- *                                   char *word1);
- */
-
-/*
- * Command handler for a ITERATE2 directive.
- * - Handler is called once for each of the second and subsequent arguments
- *   given to the directive.
- * - word1 is the same for each call for a particular directive instance (the
- *   first argument).
- * - word2 points to each of the second and subsequent arguments in turn.
- * Declared in the command_rec list with
- *   AP_INIT_ITERATE2("directive", function, mconfig, where, help)
- *
- * static const char *handle_ITERATE2(cmd_parms *cmd, void *mconfig,
- *                                    char *word1, char *word2);
- */
-
-/*--------------------------------------------------------------------------*/
-/*                                                                          */
-/* These routines are strictly internal to this module, and support its     */
-/* operation.  They are not referenced by any external portion of the       */
-/* server.                                                                  */
-/*                                                                          */
-/*--------------------------------------------------------------------------*/
-
-/*
- * Locate our directory configuration record for the current request.
- */
-static x_cfg *our_dconfig(const request_rec *r)
-{
-    return (x_cfg *) ap_get_module_config(r->per_dir_config, &example_module);
-}
-
-#if 0
-/*
- * Locate our server configuration record for the specified server.
- */
-static x_cfg *our_sconfig(const server_rec *s)
-{
-    return (x_cfg *) ap_get_module_config(s->module_config, &example_module);
-}
-
-/*
- * Likewise for our configuration record for the specified request.
- */
-static x_cfg *our_rconfig(const request_rec *r)
-{
-    return (x_cfg *) ap_get_module_config(r->request_config, &example_module);
-}
-#endif
-
-/*
- * Likewise for our configuration record for a connection.
- */
-static x_cfg *our_cconfig(const conn_rec *c)
-{
-    return (x_cfg *) ap_get_module_config(c->conn_config, &example_module);
-}
-
-/*
- * This routine sets up some module-wide cells if they haven't been already.
- */
-static void setup_module_cells(void)
-{
-    /*
-     * If we haven't already allocated our module-private pool, do so now.
-     */
-    if (x_pool == NULL) {
-        apr_pool_create(&x_pool, NULL);
-    };
-    /*
-     * Likewise for the table of routine/environment pairs we visit outside of
-     * request context.
-     */
-    if (static_calls_made == NULL) {
-        static_calls_made = apr_table_make(x_pool, 16);
-    };
-}
-
-/*
- * This routine is used to add a trace of a callback to the list.  We're
- * passed the server record (if available), the request record (if available),
- * a pointer to our private configuration record (if available) for the
- * environment to which the callback is supposed to apply, and some text.  We
- * turn this into a textual representation and add it to the tail of the list.
- * The list can be displayed by the x_handler() routine.
- *
- * If the call occurs within a request context (i.e., we're passed a request
- * record), we put the trace into the request apr_pool_t and attach it to the
- * request via the notes mechanism.  Otherwise, the trace gets added
- * to the static (non-request-specific) list.
- *
- * Note that the r->notes table is only for storing strings; if you need to
- * maintain per-request data of any other type, you need to use another
- * mechanism.
- */
-
-#define TRACE_NOTE "example-trace"
-
-static void trace_add(server_rec *s, request_rec *r, x_cfg *mconfig,
-                      const char *note)
-{
-    const char *sofar;
-    char *addon;
-    char *where;
-    apr_pool_t *p;
-    const char *trace_copy;
-
-    /*
-     * Make sure our pools and tables are set up - we need 'em.
-     */
-    setup_module_cells();
-    /*
-     * Now, if we're in request-context, we use the request pool.
-     */
-    if (r != NULL) {
-        p = r->pool;
-        if ((trace_copy = apr_table_get(r->notes, TRACE_NOTE)) == NULL) {
-            trace_copy = "";
-        }
-    }
-    else {
-        /*
-         * We're not in request context, so the trace gets attached to our
-         * module-wide pool.  We do the create/destroy every time we're called
-         * in non-request context; this avoids leaking memory in some of
-         * the subsequent calls that allocate memory only once (such as the
-         * key formation below).
-         *
-         * Make a new sub-pool and copy any existing trace to it.  Point the
-         * trace cell at the copied value.
-         */
-        apr_pool_create(&p, x_pool);
-        if (trace != NULL) {
-            trace = apr_pstrdup(p, trace);
-        }
-        /*
-         * Now, if we have a sub-pool from before, nuke it and replace with
-         * the one we just allocated.
-         */
-        if (x_subpool != NULL) {
-            apr_pool_destroy(x_subpool);
-        }
-        x_subpool = p;
-        trace_copy = trace;
-    }
-    /*
-     * If we weren't passed a configuration record, we can't figure out to
-     * what location this call applies.  This only happens for co-routines
-     * that don't operate in a particular directory or server context.  If we
-     * got a valid record, extract the location (directory or server) to which
-     * it applies.
-     */
-    where = (mconfig != NULL) ? mconfig->loc : "nowhere";
-    where = (where != NULL) ? where : "";
-    /*
-     * Now, if we're not in request context, see if we've been called with
-     * this particular combination before.  The apr_table_t is allocated in the
-     * module's private pool, which doesn't get destroyed.
-     */
-    if (r == NULL) {
-        char *key;
-
-        key = apr_pstrcat(p, note, ":", where, NULL);
-        if (apr_table_get(static_calls_made, key) != NULL) {
-            /*
-             * Been here, done this.
-             */
-            return;
-        }
-        else {
-            /*
-             * First time for this combination of routine and environment -
-             * log it so we don't do it again.
-             */
-            apr_table_set(static_calls_made, key, "been here");
-        }
-    }
-    addon = apr_pstrcat(p,
-                        "   <li>\n"
-                        "    <dl>\n"
-                        "     <dt><samp>", note, "</samp></dt>\n"
-                        "     <dd><samp>[", where, "]</samp></dd>\n"
-                        "    </dl>\n"
-                        "   </li>\n",
-                        NULL);
-    sofar = (trace_copy == NULL) ? "" : trace_copy;
-    trace_copy = apr_pstrcat(p, sofar, addon, NULL);
-    if (r != NULL) {
-        apr_table_set(r->notes, TRACE_NOTE, trace_copy);
-    }
-    else {
-        trace = trace_copy;
-    }
-    /*
-     * You *could* change the following if you wanted to see the calling
-     * sequence reported in the server's error_log, but beware - almost all of
-     * these co-routines are called for every single request, and the impact
-     * on the size (and readability) of the error_log is considerable.
-     */
-#define EXAMPLE_LOG_EACH 0
-    if (EXAMPLE_LOG_EACH && (s != NULL)) {
-        ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s, "mod_example: %s", note);
-    }
-}
-
-/*--------------------------------------------------------------------------*/
-/* We prototyped the various syntax for command handlers (routines that     */
-/* are called when the configuration parser detects a directive declared    */
-/* by our module) earlier.  Now we actually declare a "real" routine that   */
-/* will be invoked by the parser when our "real" directive is               */
-/* encountered.                                                             */
-/*                                                                          */
-/* If a command handler encounters a problem processing the directive, it   */
-/* signals this fact by returning a non-NULL pointer to a string            */
-/* describing the problem.                                                  */
-/*                                                                          */
-/* The magic return value DECLINE_CMD is used to deal with directives       */
-/* that might be declared by multiple modules.  If the command handler      */
-/* returns NULL, the directive was processed; if it returns DECLINE_CMD,    */
-/* the next module (if any) that declares the directive is given a chance   */
-/* at it.  If it returns any other value, it's treated as the text of an    */
-/* error message.                                                           */
-/*--------------------------------------------------------------------------*/
-/* 
- * Command handler for the NO_ARGS "Example" directive.  All we do is mark the
- * call in the trace log, and flag the applicability of the directive to the
- * current location in that location's configuration record.
- */
-static const char *cmd_example(cmd_parms *cmd, void *mconfig)
-{
-    x_cfg *cfg = (x_cfg *) mconfig;
-
-    /*
-     * "Example Wuz Here"
-     */
-    cfg->local = 1;
-    trace_add(cmd->server, NULL, cfg, "cmd_example()");
-    return NULL;
-}
-
-/*--------------------------------------------------------------------------*/
-/*                                                                          */
-/* Now we declare our content handlers, which are invoked when the server   */
-/* encounters a document which our module is supposed to have a chance to   */
-/* see.  (See mod_mime's SetHandler and AddHandler directives, and the      */
-/* mod_info and mod_status examples, for more details.)                     */
-/*                                                                          */
-/* Since content handlers are dumping data directly into the connexion      */
-/* (using the r*() routines, such as rputs() and rprintf()) without         */
-/* intervention by other parts of the server, they need to make             */
-/* sure any accumulated HTTP headers are sent first.  This is done by       */
-/* calling send_http_header().  Otherwise, no header will be sent at all,   */
-/* and the output sent to the client will actually be HTTP-uncompliant.     */
-/*--------------------------------------------------------------------------*/
-/* 
- * Sample content handler.  All this does is display the call list that has
- * been built up so far.
- *
- * The return value instructs the caller concerning what happened and what to
- * do next:
- *  OK ("we did our thing")
- *  DECLINED ("this isn't something with which we want to get involved")
- *  HTTP_mumble ("an error status should be reported")
- */
-static int x_handler(request_rec *r)
-{
-    x_cfg *dcfg;
-
-    if (strcmp(r->handler, "example-handler")) {
-        return DECLINED;
-    }
-
-    dcfg = our_dconfig(r);
-    trace_add(r->server, r, dcfg, "x_handler()");
-    /*
-     * We're about to start sending content, so we need to force the HTTP
-     * headers to be sent at this point.  Otherwise, no headers will be sent
-     * at all.  We can set any we like first, of course.  **NOTE** Here's
-     * where you set the "Content-type" header, and you do so by putting it in
-     * r->content_type, *not* r->headers_out("Content-type").  If you don't
-     * set it, it will be filled in with the server's default type (typically
-     * "text/plain").  You *must* also ensure that r->content_type is lower
-     * case.
-     *
-     * We also need to start a timer so the server can know if the connexion
-     * is broken.
-     */
-    r->content_type = "text/html";
-    /*
-     * If we're only supposed to send header information (HEAD request), we're
-     * already there.
-     */
-    if (r->header_only) {
-        return OK;
-    }
-
-    /*
-     * Now send our actual output.  Since we tagged this as being
-     * "text/html", we need to embed any HTML.
-     */
-    ap_rputs(DOCTYPE_HTML_3_2, r);
-    ap_rputs("<HTML>\n", r);
-    ap_rputs(" <HEAD>\n", r);
-    ap_rputs("  <TITLE>mod_example Module Content-Handler Output\n", r);
-    ap_rputs("  </TITLE>\n", r);
-    ap_rputs(" </HEAD>\n", r);
-    ap_rputs(" <BODY>\n", r);
-    ap_rputs("  <H1><SAMP>mod_example</SAMP> Module Content-Handler Output\n", r);
-    ap_rputs("  </H1>\n", r);
-    ap_rputs("  <P>\n", r);
-    ap_rprintf(r, "  Apache HTTP Server version: \"%s\"\n",
-	    ap_get_server_version());
-    ap_rputs("  <BR>\n", r);
-    ap_rprintf(r, "  Server built: \"%s\"\n", ap_get_server_built());
-    ap_rputs("  </P>\n", r);;
-    ap_rputs("  <P>\n", r);
-    ap_rputs("  The format for the callback trace is:\n", r);
-    ap_rputs("  </P>\n", r);
-    ap_rputs("  <DL>\n", r);
-    ap_rputs("   <DT><EM>n</EM>.<SAMP>&lt;routine-name&gt;", r);
-    ap_rputs("(&lt;routine-data&gt;)</SAMP>\n", r);
-    ap_rputs("   </DT>\n", r);
-    ap_rputs("   <DD><SAMP>[&lt;applies-to&gt;]</SAMP>\n", r);
-    ap_rputs("   </DD>\n", r);
-    ap_rputs("  </DL>\n", r);
-    ap_rputs("  <P>\n", r);
-    ap_rputs("  The <SAMP>&lt;routine-data&gt;</SAMP> is supplied by\n", r);
-    ap_rputs("  the routine when it requests the trace,\n", r);
-    ap_rputs("  and the <SAMP>&lt;applies-to&gt;</SAMP> is extracted\n", r);
-    ap_rputs("  from the configuration record at the time of the trace.\n", r);
-    ap_rputs("  <STRONG>SVR()</STRONG> indicates a server environment\n", r);
-    ap_rputs("  (blank means the main or default server, otherwise it's\n", r);
-    ap_rputs("  the name of the VirtualHost); <STRONG>DIR()</STRONG>\n", r);
-    ap_rputs("  indicates a location in the URL or filesystem\n", r);
-    ap_rputs("  namespace.\n", r);
-    ap_rputs("  </P>\n", r);
-    ap_rprintf(r, "  <H2>Static callbacks so far:</H2>\n  <OL>\n%s  </OL>\n",
-            trace);
-    ap_rputs("  <H2>Request-specific callbacks so far:</H2>\n", r);
-    ap_rprintf(r, "  <OL>\n%s  </OL>\n", apr_table_get(r->notes, TRACE_NOTE));
-    ap_rputs("  <H2>Environment for <EM>this</EM> call:</H2>\n", r);
-    ap_rputs("  <UL>\n", r);
-    ap_rprintf(r, "   <LI>Applies-to: <SAMP>%s</SAMP>\n   </LI>\n", dcfg->loc);
-    ap_rprintf(r, "   <LI>\"Example\" directive declared here: %s\n   </LI>\n",
-            (dcfg->local ? "YES" : "NO"));
-    ap_rprintf(r, "   <LI>\"Example\" inherited: %s\n   </LI>\n",
-            (dcfg->congenital ? "YES" : "NO"));
-    ap_rputs("  </UL>\n", r);
-    ap_rputs(" </BODY>\n", r);
-    ap_rputs("</HTML>\n", r);
-    /*
-     * We're all done, so cancel the timeout we set.  Since this is probably
-     * the end of the request we *could* assume this would be done during
-     * post-processing - but it's possible that another handler might be
-     * called and inherit our outstanding timer.  Not good; to each its own.
-     */
-    /*
-     * We did what we wanted to do, so tell the rest of the server we
-     * succeeded.
-     */
-    return OK;
-}
-
-/*--------------------------------------------------------------------------*/
-/*                                                                          */
-/* Now let's declare routines for each of the callback phase in order.      */
-/* (That's the order in which they're listed in the callback list, *not     */
-/* the order in which the server calls them!  See the command_rec           */
-/* declaration near the bottom of this file.)  Note that these may be       */
-/* called for situations that don't relate primarily to our function - in   */
-/* other words, the fixup handler shouldn't assume that the request has     */
-/* to do with "example" stuff.                                              */
-/*                                                                          */
-/* With the exception of the content handler, all of our routines will be   */
-/* called for each request, unless an earlier handler from another module   */
-/* aborted the sequence.                                                    */
-/*                                                                          */
-/* Handlers that are declared as "int" can return the following:            */
-/*                                                                          */
-/*  OK          Handler accepted the request and did its thing with it.     */
-/*  DECLINED    Handler took no action.                                     */
-/*  HTTP_mumble Handler looked at request and found it wanting.             */
-/*                                                                          */
-/* What the server does after calling a module handler depends upon the     */
-/* handler's return value.  In all cases, if the handler returns            */
-/* DECLINED, the server will continue to the next module with an handler    */
-/* for the current phase.  However, if the handler return a non-OK,         */
-/* non-DECLINED status, the server aborts the request right there.  If      */
-/* the handler returns OK, the server's next action is phase-specific;      */
-/* see the individual handler comments below for details.                   */
-/*                                                                          */
-/*--------------------------------------------------------------------------*/
-/* 
- * This function is called during server initialisation.  Any information
- * that needs to be recorded must be in static cells, since there's no
- * configuration record.
- *
- * There is no return value.
- */
-
-/* 
- * This function is called when an heavy-weight process (such as a child) is
- * being run down or destroyed.  As with the child initialisation function,
- * any information that needs to be recorded must be in static cells, since
- * there's no configuration record.
- *
- * There is no return value.
- */
-
-/* 
- * This function is called during server initialisation when an heavy-weight
- * process (such as a child) is being initialised.  As with the
- * module initialisation function, any information that needs to be recorded
- * must be in static cells, since there's no configuration record.
- *
- * There is no return value.
- */
-
-/*
- * This function gets called to create a per-directory configuration
- * record.  This will be called for the "default" server environment, and for
- * each directory for which the parser finds any of our directives applicable.
- * If a directory doesn't have any of our directives involved (i.e., they
- * aren't in the .htaccess file, or a <Location>, <Directory>, or related
- * block), this routine will *not* be called - the configuration for the
- * closest ancestor is used.
- *
- * The return value is a pointer to the created module-specific
- * structure.
- */
-static void *x_create_dir_config(apr_pool_t *p, char *dirspec)
-{
-    x_cfg *cfg;
-    char *dname = dirspec;
-
-    /*
-     * Allocate the space for our record from the pool supplied.
-     */
-    cfg = (x_cfg *) apr_pcalloc(p, sizeof(x_cfg));
-    /*
-     * Now fill in the defaults.  If there are any `parent' configuration
-     * records, they'll get merged as part of a separate callback.
-     */
-    cfg->local = 0;
-    cfg->congenital = 0;
-    cfg->cmode = CONFIG_MODE_DIRECTORY;
-    /*
-     * Finally, add our trace to the callback list.
-     */
-    dname = (dname != NULL) ? dname : "";
-    cfg->loc = apr_pstrcat(p, "DIR(", dname, ")", NULL);
-    trace_add(NULL, NULL, cfg, "x_create_dir_config()");
-    return (void *) cfg;
-}
-
-/*
- * This function gets called to merge two per-directory configuration
- * records.  This is typically done to cope with things like .htaccess files
- * or <Location> directives for directories that are beneath one for which a
- * configuration record was already created.  The routine has the
- * responsibility of creating a new record and merging the contents of the
- * other two into it appropriately.  If the module doesn't declare a merge
- * routine, the record for the closest ancestor location (that has one) is
- * used exclusively.
- *
- * The routine MUST NOT modify any of its arguments!
- *
- * The return value is a pointer to the created module-specific structure
- * containing the merged values.
- */
-static void *x_merge_dir_config(apr_pool_t *p, void *parent_conf,
-                                      void *newloc_conf)
-{
-
-    x_cfg *merged_config = (x_cfg *) apr_pcalloc(p, sizeof(x_cfg));
-    x_cfg *pconf = (x_cfg *) parent_conf;
-    x_cfg *nconf = (x_cfg *) newloc_conf;
-    char *note;
-
-    /*
-     * Some things get copied directly from the more-specific record, rather
-     * than getting merged.
-     */
-    merged_config->local = nconf->local;
-    merged_config->loc = apr_pstrdup(p, nconf->loc);
-    /*
-     * Others, like the setting of the `congenital' flag, get ORed in.  The
-     * setting of that particular flag, for instance, is TRUE if it was ever
-     * true anywhere in the upstream configuration.
-     */
-    merged_config->congenital = (pconf->congenital | pconf->local);
-    /*
-     * If we're merging records for two different types of environment (server
-     * and directory), mark the new record appropriately.  Otherwise, inherit
-     * the current value.
-     */
-    merged_config->cmode =
-        (pconf->cmode == nconf->cmode) ? pconf->cmode : CONFIG_MODE_COMBO;
-    /*
-     * Now just record our being called in the trace list.  Include the
-     * locations we were asked to merge.
-     */
-    note = apr_pstrcat(p, "x_merge_dir_config(\"", pconf->loc, "\",\"",
-                   nconf->loc, "\")", NULL);
-    trace_add(NULL, NULL, merged_config, note);
-    return (void *) merged_config;
-}
-
-/*
- * This function gets called to create a per-server configuration
- * record.  It will always be called for the "default" server.
- *
- * The return value is a pointer to the created module-specific
- * structure.
- */
-static void *x_create_server_config(apr_pool_t *p, server_rec *s)
-{
-
-    x_cfg *cfg;
-    char *sname = s->server_hostname;
-
-    /*
-     * As with the x_create_dir_config() reoutine, we allocate and fill
-     * in an empty record.
-     */
-    cfg = (x_cfg *) apr_pcalloc(p, sizeof(x_cfg));
-    cfg->local = 0;
-    cfg->congenital = 0;
-    cfg->cmode = CONFIG_MODE_SERVER;
-    /*
-     * Note that we were called in the trace list.
-     */
-    sname = (sname != NULL) ? sname : "";
-    cfg->loc = apr_pstrcat(p, "SVR(", sname, ")", NULL);
-    trace_add(s, NULL, cfg, "x_create_server_config()");
-    return (void *) cfg;
-}
-
-/*
- * This function gets called to merge two per-server configuration
- * records.  This is typically done to cope with things like virtual hosts and
- * the default server configuration  The routine has the responsibility of
- * creating a new record and merging the contents of the other two into it
- * appropriately.  If the module doesn't declare a merge routine, the more
- * specific existing record is used exclusively.
- *
- * The routine MUST NOT modify any of its arguments!
- *
- * The return value is a pointer to the created module-specific structure
- * containing the merged values.
- */
-static void *x_merge_server_config(apr_pool_t *p, void *server1_conf,
-                                         void *server2_conf)
-{
-
-    x_cfg *merged_config = (x_cfg *) apr_pcalloc(p, sizeof(x_cfg));
-    x_cfg *s1conf = (x_cfg *) server1_conf;
-    x_cfg *s2conf = (x_cfg *) server2_conf;
-    char *note;
-
-    /*
-     * Our inheritance rules are our own, and part of our module's semantics.
-     * Basically, just note whence we came.
-     */
-    merged_config->cmode =
-        (s1conf->cmode == s2conf->cmode) ? s1conf->cmode : CONFIG_MODE_COMBO;
-    merged_config->local = s2conf->local;
-    merged_config->congenital = (s1conf->congenital | s1conf->local);
-    merged_config->loc = apr_pstrdup(p, s2conf->loc);
-    /*
-     * Trace our call, including what we were asked to merge.
-     */
-    note = apr_pstrcat(p, "x_merge_server_config(\"", s1conf->loc, "\",\"",
-                   s2conf->loc, "\")", NULL);
-    trace_add(NULL, NULL, merged_config, note);
-    return (void *) merged_config;
-}
-
-/*
- * This routine is called before the server processes the configuration
- * files.  There is no return value.
- */
-static int x_pre_config(apr_pool_t *pconf, apr_pool_t *plog,
-                        apr_pool_t *ptemp)
-{
-    /*
-     * Log the call and exit.
-     */
-    trace_add(NULL, NULL, NULL, "x_pre_config()");
-
-    return OK;
-}
-
-/*
- * This routine is called to perform any module-specific fixing of header
- * fields, et cetera.  It is invoked just before any content-handler.
- *
- * The return value is OK, DECLINED, or HTTP_mumble.  If we return OK, the
- * server will still call any remaining modules with an handler for this
- * phase.
- */
-static int x_post_config(apr_pool_t *pconf, apr_pool_t *plog,
-                          apr_pool_t *ptemp, server_rec *s)
-{
-    /*
-     * Log the call and exit.
-     */
-    trace_add(NULL, NULL, NULL, "x_post_config()");
-    return OK;
-}
-
-/*
- * This routine is called to perform any module-specific fixing of header
- * fields, et cetera.  It is invoked just before any content-handler.
- *
- * The return value is OK, DECLINED, or HTTP_mumble.  If we return OK, the
- * server will still call any remaining modules with an handler for this
- * phase.
- */
-static int x_open_logs(apr_pool_t *pconf, apr_pool_t *plog,
-                        apr_pool_t *ptemp, server_rec *s)
-{
-    /*
-     * Log the call and exit.
-     */
-    trace_add(s, NULL, NULL, "x_open_logs()");
-    return OK;
-}
-
-/*
- * All our process-death routine does is add its trace to the log.
- */
-static apr_status_t x_child_exit(void *data)
-{
-    char *note;
-    server_rec *s = data;
-    char *sname = s->server_hostname;
-
-    /*
-     * The arbitrary text we add to our trace entry indicates for which server
-     * we're being called.
-     */
-    sname = (sname != NULL) ? sname : "";
-    note = apr_pstrcat(s->process->pool, "x_child_exit(", sname, ")", NULL);
-    trace_add(s, NULL, NULL, note);
-    return APR_SUCCESS;
-}
-
-/*
- * All our process initialiser does is add its trace to the log.
- */
-static void x_child_init(apr_pool_t *p, server_rec *s)
-{
-    char *note;
-    char *sname = s->server_hostname;
-
-    /*
-     * Set up any module cells that ought to be initialised.
-     */
-    setup_module_cells();
-    /*
-     * The arbitrary text we add to our trace entry indicates for which server
-     * we're being called.
-     */
-    sname = (sname != NULL) ? sname : "";
-    note = apr_pstrcat(p, "x_child_init(", sname, ")", NULL);
-    trace_add(s, NULL, NULL, note);
-
-    apr_pool_cleanup_register(p, s, x_child_exit, x_child_exit);
-}
-
-/*
- * This routine is called to perform any module-specific fixing of header
- * fields, et cetera.  It is invoked just before any content-handler.
- *
- * The return value is OK, DECLINED, or HTTP_mumble.  If we return OK, the
- * server will still call any remaining modules with an handler for this
- * phase.
- */
-#if 0
-static const char *x_http_method(const request_rec *r)
-{
-    x_cfg *cfg;
-
-    cfg = our_dconfig(r);
-    /*
-     * Log the call and exit.
-     */
-    trace_add(r->server, NULL, cfg, "x_post_config()");
-    return "foo";
-}
-
-/*
- * This routine is called to perform any module-specific fixing of header
- * fields, et cetera.  It is invoked just before any content-handler.
- *
- * The return value is OK, DECLINED, or HTTP_mumble.  If we return OK, the
- * server will still call any remaining modules with an handler for this
- * phase.
- */
-static apr_port_t x_default_port(const request_rec *r)
-{
-    x_cfg *cfg;
-
-    cfg = our_dconfig(r);
-    /*
-     * Log the call and exit.
-     */
-    trace_add(r->server, NULL, cfg, "x_post_config()");
-    return 80;
-}
-#endif /*0*/
-
-/*
- * This routine is called to perform any module-specific fixing of header
- * fields, et cetera.  It is invoked just before any content-handler.
- *
- * The return value is OK, DECLINED, or HTTP_mumble.  If we return OK, the
- * server will still call any remaining modules with an handler for this
- * phase.
- */
-static void x_insert_filter(request_rec *r)
-{
-    x_cfg *cfg;
-
-    cfg = our_dconfig(r);
-    /*
-     * Log the call and exit.
-     */
-    trace_add(r->server, NULL, cfg, "x_post_config()");
-}
-
-/*
- * XXX fix my comment!!!!!!  this sounds like the comment for a fixup
- *     handler
- *
- * This routine is called to perform any module-specific fixing of header
- * fields, et cetera.  It is invoked just before any content-handler.
- *
- * The return value is OK, DECLINED, or HTTP_mumble.  If we return OK, the
- * server will still call any remaining modules with an handler for this
- * phase.
- */
-static int x_quick_handler(request_rec *r)
-{
-    x_cfg *cfg;
-
-    cfg = our_dconfig(r);
-    /*
-     * Log the call and exit.
-     */
-    trace_add(r->server, NULL, cfg, "x_post_config()");
-    return DECLINED;
-}
-
-/*
- * This routine is called to perform any module-specific fixing of header
- * fields, et cetera.  It is invoked just before any content-handler.
- *
- * The return value is OK, DECLINED, or HTTP_mumble.  If we return OK, the
- * server will still call any remaining modules with an handler for this
- * phase.
- */
-static int x_pre_connection(conn_rec *c, void *csd)
-{
-    x_cfg *cfg;
-
-    cfg = our_cconfig(c);
-#if 0
-    /*
-     * Log the call and exit.
-     */
-    trace_add(r->server, NULL, cfg, "x_post_config()");
-#endif
-    return OK;
-}
-
-/*
- * This routine is called after the request has been read but before any other
- * phases have been processed.  This allows us to make decisions based upon
- * the input header fields.
- *
- * The return value is OK, DECLINED, or HTTP_mumble.  If we return OK, no
- * further modules are called for this phase.
- */
-static int x_post_read_request(request_rec *r)
-{
-    x_cfg *cfg;
-
-    cfg = our_dconfig(r);
-    /*
-     * We don't actually *do* anything here, except note the fact that we were
-     * called.
-     */
-    trace_add(r->server, r, cfg, "x_post_read_request()");
-    return DECLINED;
-}
-
-/*
- * This routine gives our module an opportunity to translate the URI into an
- * actual filename.  If we don't do anything special, the server's default
- * rules (Alias directives and the like) will continue to be followed.
- *
- * The return value is OK, DECLINED, or HTTP_mumble.  If we return OK, no
- * further modules are called for this phase.
- */
-static int x_translate_handler(request_rec *r)
-{
-
-    x_cfg *cfg;
-
-    cfg = our_dconfig(r);
-    /*
-     * We don't actually *do* anything here, except note the fact that we were
-     * called.
-     */
-    trace_add(r->server, r, cfg, "x_translate_handler()");
-    return DECLINED;
-}
-
-/*
- * This routine is called to check the authentication information sent with
- * the request (such as looking up the user in a database and verifying that
- * the [encrypted] password sent matches the one in the database).
- *
- * The return value is OK, DECLINED, or some HTTP_mumble error (typically
- * HTTP_UNAUTHORIZED).  If we return OK, no other modules are given a chance
- * at the request during this phase.
- */
-static int x_check_user_id(request_rec *r)
-{
-
-    x_cfg *cfg;
-
-    cfg = our_dconfig(r);
-    /*
-     * Don't do anything except log the call.
-     */
-    trace_add(r->server, r, cfg, "x_check_user_id()");
-    return DECLINED;
-}
-
-/*
- * This routine is called to check to see if the resource being requested
- * requires authorisation.
- *
- * The return value is OK, DECLINED, or HTTP_mumble.  If we return OK, no
- * other modules are called during this phase.
- *
- * If *all* modules return DECLINED, the request is aborted with a server
- * error.
- */
-static int x_auth_checker(request_rec *r)
-{
-
-    x_cfg *cfg;
-
-    cfg = our_dconfig(r);
-    /*
-     * Log the call and return OK, or access will be denied (even though we
-     * didn't actually do anything).
-     */
-    trace_add(r->server, r, cfg, "x_auth_checker()");
-    return DECLINED;
-}
-
-/*
- * This routine is called to check for any module-specific restrictions placed
- * upon the requested resource.  (See the mod_access module for an example.)
- *
- * The return value is OK, DECLINED, or HTTP_mumble.  All modules with an
- * handler for this phase are called regardless of whether their predecessors
- * return OK or DECLINED.  The first one to return any other status, however,
- * will abort the sequence (and the request) as usual.
- */
-static int x_access_checker(request_rec *r)
-{
-
-    x_cfg *cfg;
-
-    cfg = our_dconfig(r);
-    trace_add(r->server, r, cfg, "x_access_checker()");
-    return DECLINED;
-}
-
-/*
- * This routine is called to determine and/or set the various document type
- * information bits, like Content-type (via r->content_type), language, et
- * cetera.
- *
- * The return value is OK, DECLINED, or HTTP_mumble.  If we return OK, no
- * further modules are given a chance at the request for this phase.
- */
-static int x_type_checker(request_rec *r)
-{
-
-    x_cfg *cfg;
-
-    cfg = our_dconfig(r);
-    /*
-     * Log the call, but don't do anything else - and report truthfully that
-     * we didn't do anything.
-     */
-    trace_add(r->server, r, cfg, "x_type_checker()");
-    return DECLINED;
-}
-
-/*
- * This routine is called to perform any module-specific fixing of header
- * fields, et cetera.  It is invoked just before any content-handler.
- *
- * The return value is OK, DECLINED, or HTTP_mumble.  If we return OK, the
- * server will still call any remaining modules with an handler for this
- * phase.
- */
-static int x_fixer_upper(request_rec *r)
-{
-
-    x_cfg *cfg;
-
-    cfg = our_dconfig(r);
-    /*
-     * Log the call and exit.
-     */
-    trace_add(r->server, r, cfg, "x_fixer_upper()");
-    return OK;
-}
-
-/*
- * This routine is called to perform any module-specific logging activities
- * over and above the normal server things.
- *
- * The return value is OK, DECLINED, or HTTP_mumble.  If we return OK, any
- * remaining modules with an handler for this phase will still be called.
- */
-static int x_logger(request_rec *r)
-{
-
-    x_cfg *cfg;
-
-    cfg = our_dconfig(r);
-    trace_add(r->server, r, cfg, "x_logger()");
-    return DECLINED;
-}
-
-/*--------------------------------------------------------------------------*/
-/*                                                                          */
-/* Which functions are responsible for which hooks in the server.           */
-/*                                                                          */
-/*--------------------------------------------------------------------------*/
-/* 
- * Each function our module provides to handle a particular hook is
- * specified here.  The functions are registered using 
- * ap_hook_foo(name, predecessors, successors, position)
- * where foo is the name of the hook.
- *
- * The args are as follows:
- * name         -> the name of the function to call.
- * predecessors -> a list of modules whose calls to this hook must be
- *                 invoked before this module.
- * successors   -> a list of modules whose calls to this hook must be
- *                 invoked after this module.
- * position     -> The relative position of this module.  One of
- *                 APR_HOOK_FIRST, APR_HOOK_MIDDLE, or APR_HOOK_LAST.
- *                 Most modules will use APR_HOOK_MIDDLE.  If multiple
- *                 modules use the same relative position, Apache will
- *                 determine which to call first.
- *                 If your module relies on another module to run first,
- *                 or another module running after yours, use the 
- *                 predecessors and/or successors.
- *
- * The number in brackets indicates the order in which the routine is called
- * during request processing.  Note that not all routines are necessarily
- * called (such as if a resource doesn't have access restrictions).
- * The actual delivery of content to the browser [9] is not handled by
- * a hook; see the handler declarations below.
- */
-static void x_register_hooks(apr_pool_t *p)
-{
-    ap_hook_pre_config(x_pre_config, NULL, NULL, APR_HOOK_MIDDLE);
-    ap_hook_post_config(x_post_config, NULL, NULL, APR_HOOK_MIDDLE);
-    ap_hook_open_logs(x_open_logs, NULL, NULL, APR_HOOK_MIDDLE);
-    ap_hook_child_init(x_child_init, NULL, NULL, APR_HOOK_MIDDLE);
-    ap_hook_handler(x_handler, NULL, NULL, APR_HOOK_MIDDLE);
-    ap_hook_quick_handler(x_quick_handler, NULL, NULL, APR_HOOK_MIDDLE);
-    ap_hook_pre_connection(x_pre_connection, NULL, NULL, APR_HOOK_MIDDLE);
-/* This module doesn't have a process connection phase, but I am leaving
- * the code in, in-case somebody wants to add one.
- */
-/*    ap_hook_process_connection(x_fixer_upper, NULL, NULL, APR_HOOK_MIDDLE); */
-    /* [1] post read_request handling */
-    ap_hook_post_read_request(x_post_read_request, NULL, NULL,
-                              APR_HOOK_MIDDLE);
-    ap_hook_log_transaction(x_logger, NULL, NULL, APR_HOOK_MIDDLE);
-#if 0
-    ap_hook_http_method(x_http_method, NULL, NULL, APR_HOOK_MIDDLE);
-    ap_hook_default_port(x_default_port, NULL, NULL, APR_HOOK_MIDDLE);
-#endif
-    ap_hook_translate_name(x_translate_handler, NULL, NULL, APR_HOOK_MIDDLE);
-    ap_hook_check_user_id(x_check_user_id, NULL, NULL, APR_HOOK_MIDDLE);
-    ap_hook_fixups(x_fixer_upper, NULL, NULL, APR_HOOK_MIDDLE);
-    ap_hook_type_checker(x_type_checker, NULL, NULL, APR_HOOK_MIDDLE);
-    ap_hook_access_checker(x_access_checker, NULL, NULL, APR_HOOK_MIDDLE);
-    ap_hook_auth_checker(x_auth_checker, NULL, NULL, APR_HOOK_MIDDLE);
-    ap_hook_insert_filter(x_insert_filter, NULL, NULL, APR_HOOK_MIDDLE);
-}
-
-/*--------------------------------------------------------------------------*/
-/*                                                                          */
-/* All of the routines have been declared now.  Here's the list of          */
-/* directives specific to our module, and information about where they      */
-/* may appear and how the command parser should pass them to us for         */
-/* processing.  Note that care must be taken to ensure that there are NO    */
-/* collisions of directive names between modules.                           */
-/*                                                                          */
-/*--------------------------------------------------------------------------*/
-/* 
- * List of directives specific to our module.
- */
-static const command_rec x_cmds[] =
-{
-    AP_INIT_NO_ARGS(
-        "Example",                          /* directive name */
-        cmd_example,                        /* config action routine */
-        NULL,                               /* argument to include in call */
-        OR_OPTIONS,                         /* where available */
-        "Example directive - no arguments"  /* directive description */
-    ),
-    {NULL}
-};
-
-/*--------------------------------------------------------------------------*/
-/*                                                                          */
-/* Now the list of content handlers available from this module.             */
-/*                                                                          */
-/*--------------------------------------------------------------------------*/
-/* 
- * List of content handlers our module supplies.  Each handler is defined by
- * two parts: a name by which it can be referenced (such as by
- * {Add,Set}Handler), and the actual routine name.  The list is terminated by
- * a NULL block, since it can be of variable length.
- *
- * Note that content-handlers are invoked on a most-specific to least-specific
- * basis; that is, a handler that is declared for "text/plain" will be
- * invoked before one that was declared for "text / *".  Note also that
- * if a content-handler returns anything except DECLINED, no other
- * content-handlers will be called.
- */
-#if 0
-static const handler_rec x_handlers[] =
-{
-    {"example-handler", x_handler},
-    {NULL}
-};
-#endif
-
-/*--------------------------------------------------------------------------*/
-/*                                                                          */
-/* Finally, the list of callback routines and data structures that provide  */
-/* the static hooks into our module from the other parts of the server.     */
-/*                                                                          */
-/*--------------------------------------------------------------------------*/
-/* 
- * Module definition for configuration.  If a particular callback is not
- * needed, replace its routine name below with the word NULL.
- */
-module AP_MODULE_DECLARE_DATA example_module =
-{
-    STANDARD20_MODULE_STUFF,
-    x_create_dir_config,    /* per-directory config creator */
-    x_merge_dir_config,     /* dir config merger */
-    x_create_server_config, /* server config creator */
-    x_merge_server_config,  /* server config merger */
-    x_cmds,                 /* command table */
-    x_register_hooks,       /* set up other request processing hooks */
-};
diff --git a/modules/experimental/mod_ext_filter.c b/modules/experimental/mod_ext_filter.c
deleted file mode 100644
index f425b5b..0000000
--- a/modules/experimental/mod_ext_filter.c
+++ /dev/null
@@ -1,794 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-/*
- * mod_ext_filter allows Unix-style filters to filter http content.
- */
-
-#include "httpd.h"
-#include "http_config.h"
-#include "http_log.h"
-#define CORE_PRIVATE
-#include "http_core.h"
-#include "apr_buckets.h"
-#include "util_filter.h"
-#include "apr_strings.h"
-#include "apr_hash.h"
-#include "apr_lib.h"
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-typedef struct ef_server_t {
-    apr_pool_t *p;
-    apr_hash_t *h;
-} ef_server_t;
-
-typedef struct ef_filter_t {
-    const char *name;
-    enum {INPUT_FILTER=1, OUTPUT_FILTER} mode;
-    const char *command;
-    int numArgs;
-    char *args[30];
-    const char *intype;             /* list of IMTs we process (well, just one for now) */
-#define INTYPE_ALL (char *)1
-    const char *outtype;            /* IMT of filtered output */
-#define OUTTYPE_UNCHANGED (char *)1
-    int preserves_content_length;
-} ef_filter_t;
-
-typedef struct ef_dir_t {
-    int debug;
-    int log_stderr;
-} ef_dir_t;
-
-typedef struct ef_ctx_t {
-    apr_pool_t *p;
-    apr_proc_t *proc;
-    apr_procattr_t *procattr;
-    ef_dir_t *dc;
-    ef_filter_t *filter;
-    int noop;
-#if APR_FILES_AS_SOCKETS
-    apr_pollfd_t *pollset;
-#endif
-} ef_ctx_t;
-
-module AP_MODULE_DECLARE_DATA ext_filter_module;
-
-static apr_status_t ef_output_filter(ap_filter_t *, apr_bucket_brigade *);
-
-#define DBGLVL_SHOWOPTIONS         1
-#define DBGLVL_GORY                9
-
-static void *create_ef_dir_conf(apr_pool_t *p, char *dummy)
-{
-    ef_dir_t *dc = (ef_dir_t *)apr_pcalloc(p, sizeof(ef_dir_t));
-
-    dc->debug = -1;
-    dc->log_stderr = -1;
-
-    return dc;
-}
-
-static void *create_ef_server_conf(apr_pool_t *p, server_rec *s)
-{
-    ef_server_t *conf;
-
-    conf = (ef_server_t *)apr_pcalloc(p, sizeof(ef_server_t));
-    conf->p = p;
-    conf->h = apr_hash_make(conf->p);
-    return conf;
-}
-
-static void *merge_ef_dir_conf(apr_pool_t *p, void *basev, void *overridesv)
-{
-    ef_dir_t *a = (ef_dir_t *)apr_pcalloc (p, sizeof(ef_dir_t));
-    ef_dir_t *base = (ef_dir_t *)basev, *over = (ef_dir_t *)overridesv;
-
-    if (over->debug != -1) {        /* if admin coded something... */
-        a->debug = over->debug;
-    }
-    else {
-        a->debug = base->debug;
-    }
-
-    if (over->log_stderr != -1) {   /* if admin coded something... */
-        a->log_stderr = over->log_stderr;
-    }
-    else {
-        a->log_stderr = base->log_stderr;
-    }
-
-    return a;
-}
-
-static const char *add_options(cmd_parms *cmd, void *in_dc,
-                               const char *arg)
-{
-    ef_dir_t *dc = in_dc;
-
-    if (!strncasecmp(arg, "DebugLevel=", 11)) {
-        dc->debug = atoi(arg + 11);
-    }
-    else if (!strcasecmp(arg, "LogStderr")) {
-        dc->log_stderr = 1;
-    }
-    else if (!strcasecmp(arg, "NoLogStderr")) {
-        dc->log_stderr = 0;
-    }
-    else {
-        return apr_pstrcat(cmd->temp_pool, 
-                           "Invalid ExtFilterOptions option: ",
-                           arg,
-                           NULL);
-    }
-
-    return NULL;
-}
-
-static const char *parse_cmd(apr_pool_t *p, const char **args, ef_filter_t *filter)
-{
-    if (**args == '"') {
-        const char *start = *args + 1;
-        char *parms;
-
-        ++*args; /* move past leading " */
-        while (**args && **args != '"') {
-            ++*args;
-        }
-        if (**args != '"') {
-            return "Expected cmd= delimiter";
-        }
-        parms = apr_pstrndup(p, start, *args - start);
-        ++*args; /* move past trailing " */
-
-        /* parms now has the command-line to parse */
-        while (filter->numArgs < 30 &&
-               strlen(filter->args[filter->numArgs] = ap_getword_white_nc(p, &parms))) {
-            ++filter->numArgs;
-        }
-        if (filter->numArgs < 1) {
-            return "cmd= parse error";
-        }
-        filter->args[filter->numArgs] = NULL; /* we stored "" in the while() loop */
-        filter->command = filter->args[0];
-    }
-    else
-    {
-        /* simple path */
-        filter->args[0] = ap_getword_white(p, args);
-        if (!filter->args[0]) {
-            return "Invalid cmd= parameter";
-        }
-        filter->numArgs = 1;
-        filter->command = filter->args[0];
-    }
-    return NULL;
-}
-
-static const char *define_filter(cmd_parms *cmd, void *dummy, const char *args)
-{
-    ef_server_t *conf = ap_get_module_config(cmd->server->module_config,
-                                             &ext_filter_module);
-    const char *token;
-    const char *name;
-    ef_filter_t *filter;
-
-    name = ap_getword_white(cmd->pool, &args);
-    if (!name) {
-        return "Filter name not found";
-    }
-
-    if (apr_hash_get(conf->h, name, APR_HASH_KEY_STRING)) {
-        return apr_psprintf(cmd->pool, "ExtFilter %s is already defined",
-                            name);
-    }
-
-    filter = (ef_filter_t *)apr_pcalloc(conf->p, sizeof(ef_filter_t));
-    filter->name = name;
-    filter->mode = OUTPUT_FILTER;
-    apr_hash_set(conf->h, name, APR_HASH_KEY_STRING, filter);
-
-    while (*args) {
-        while (apr_isspace(*args)) {
-            ++args;
-        }
-
-        /* Nasty parsing...  I wish I could simply use ap_getword_white()
-         * here and then look at the token, but ap_getword_white() doesn't
-         * do the right thing when we have cmd="word word word"
-         */
-        if (!strncasecmp(args, "preservescontentlength", 22)) {
-            token = ap_getword_white(cmd->pool, &args);
-            if (!strcasecmp(token, "preservescontentlength")) {
-                filter->preserves_content_length = 1;
-            }
-            else {
-                return apr_psprintf(cmd->pool, 
-                                    "mangled argument `%s'",
-                                    token);
-            }
-            continue;
-        }
-
-        if (!strncasecmp(args, "mode=", 5)) {
-            args += 5;
-            token = ap_getword_white(cmd->pool, &args);
-            if (!strcasecmp(token, "output")) {
-                filter->mode = OUTPUT_FILTER;
-            }
-            else if (!strcasecmp(token, "input")) {
-                filter->mode = INPUT_FILTER;
-            }
-            else {
-                return apr_psprintf(cmd->pool, "Invalid mode: `%s'",
-                                    token);
-            }
-            continue;
-        }
-
-        if (!strncasecmp(args, "intype=", 7)) {
-            args += 7;
-            filter->intype = ap_getword_white(cmd->pool, &args);
-            continue;
-        }
-
-        if (!strncasecmp(args, "outtype=", 8)) {
-            args += 8;
-            filter->outtype = ap_getword_white(cmd->pool, &args);
-            continue;
-        }
-
-        if (!strncasecmp(args, "cmd=", 4)) {
-            args += 4;
-            if ((token = parse_cmd(cmd->pool, &args, filter))) {
-                return token;
-            }
-            continue;
-        }
-
-        return apr_psprintf(cmd->pool, "Unexpected parameter: `%s'",
-                            args);
-    }
-
-    /* parsing is done...  register the filter 
-     */
-    if (filter->mode == OUTPUT_FILTER) {
-        /* XXX need a way to ensure uniqueness among all filters */
-        ap_register_output_filter(filter->name, ef_output_filter, AP_FTYPE_RESOURCE);
-    }
-#if 0              /* no input filters yet */
-    else if (filter->mode == INPUT_FILTER) {
-        /* XXX need a way to ensure uniqueness among all filters */
-        ap_register_input_filter(filter->name, ef_input_filter, AP_FTYPE_RESOURCE);
-    }
-#endif
-    else {
-        ap_assert(1 != 1); /* we set the field wrong somehow */
-    }
-
-    return NULL;
-}
-
-static const command_rec cmds[] =
-{
-    AP_INIT_ITERATE("ExtFilterOptions",
-                    add_options,
-                    NULL,
-                    ACCESS_CONF, /* same as SetInputFilter/SetOutputFilter */
-                    "valid options: DebugLevel=n, LogStderr, NoLogStderr"),
-    AP_INIT_RAW_ARGS("ExtFilterDefine",
-                     define_filter,
-                     NULL,
-                     RSRC_CONF,
-                     "Define an external filter"),
-    {NULL}
-};
-
-static apr_status_t set_resource_limits(request_rec *r, 
-                                        apr_procattr_t *procattr)
-{
-#if defined(RLIMIT_CPU)  || defined(RLIMIT_NPROC) || \
-    defined(RLIMIT_DATA) || defined(RLIMIT_VMEM) || defined (RLIMIT_AS)
-    core_dir_config *conf = 
-        (core_dir_config *)ap_get_module_config(r->per_dir_config,
-                                                &core_module);
-    apr_status_t rv;
-
-#ifdef RLIMIT_CPU
-    rv = apr_procattr_limit_set(procattr, APR_LIMIT_CPU, conf->limit_cpu);
-    ap_assert(rv == APR_SUCCESS); /* otherwise, we're out of sync with APR */
-#endif
-#if defined(RLIMIT_DATA) || defined(RLIMIT_VMEM) || defined(RLIMIT_AS)
-    rv = apr_procattr_limit_set(procattr, APR_LIMIT_MEM, conf->limit_mem);
-    ap_assert(rv == APR_SUCCESS); /* otherwise, we're out of sync with APR */
-#endif
-#ifdef RLIMIT_NPROC
-    rv = apr_procattr_limit_set(procattr, APR_LIMIT_NPROC, conf->limit_nproc);
-    ap_assert(rv == APR_SUCCESS); /* otherwise, we're out of sync with APR */
-#endif
-
-#endif /* if at least one limit defined */
-
-    return APR_SUCCESS;
-}
-
-static apr_status_t ef_close_file(void *vfile)
-{
-    return apr_file_close(vfile);
-}
-
-/* init_ext_filter_process: get the external filter process going
- * This is per-filter-instance (i.e., per-request) initialization.
- */
-static apr_status_t init_ext_filter_process(ap_filter_t *f)
-{
-    ef_ctx_t *ctx = f->ctx;
-    apr_status_t rc;
-    ef_dir_t *dc = ctx->dc;
-
-    ctx->proc = apr_pcalloc(ctx->p, sizeof(*ctx->proc));
-
-    rc = apr_procattr_create(&ctx->procattr, ctx->p);
-    ap_assert(rc == APR_SUCCESS);
-
-    rc = apr_procattr_io_set(ctx->procattr,
-                            APR_CHILD_BLOCK,
-                            APR_CHILD_BLOCK,
-                            APR_CHILD_BLOCK);
-    ap_assert(rc == APR_SUCCESS);
-
-    rc = set_resource_limits(f->r, ctx->procattr);
-    ap_assert(rc == APR_SUCCESS);
-
-    if (dc->log_stderr > 0) {
-        rc = apr_procattr_child_err_set(ctx->procattr,
-                                      f->r->server->error_log, /* stderr in child */
-                                      NULL);
-        ap_assert(rc == APR_SUCCESS);
-    }
-                                  
-    rc = apr_proc_create(ctx->proc, 
-                            ctx->filter->command, 
-                            (const char * const *)ctx->filter->args, 
-                            NULL, /* environment */
-                            ctx->procattr, 
-                            ctx->p);
-    if (rc != APR_SUCCESS) {
-        ap_log_rerror(APLOG_MARK, APLOG_ERR, rc, f->r,
-                      "couldn't create child process to run `%s'",
-                      ctx->filter->command);
-        return rc;
-    }
-
-    apr_pool_note_subprocess(ctx->p, ctx->proc, APR_KILL_AFTER_TIMEOUT);
-
-    /* We don't want the handle to the child's stdin inherited by any
-     * other processes created by httpd.  Otherwise, when we close our
-     * handle, the child won't see EOF because another handle will still
-     * be open.
-     */
-
-    apr_pool_cleanup_register(ctx->p, ctx->proc->in, 
-                         apr_pool_cleanup_null, /* other mechanism */
-                         ef_close_file);
-
-#if APR_FILES_AS_SOCKETS
-    {
-        apr_socket_t *newsock;
-
-        rc = apr_poll_setup(&ctx->pollset, 2, ctx->p);
-        ap_assert(rc == APR_SUCCESS);
-        rc = apr_socket_from_file(&newsock, ctx->proc->in);
-        ap_assert(rc == APR_SUCCESS);
-        rc = apr_poll_socket_add(ctx->pollset, newsock, APR_POLLOUT);
-        ap_assert(rc == APR_SUCCESS);
-        rc = apr_socket_from_file(&newsock, ctx->proc->out);
-        ap_assert(rc == APR_SUCCESS);
-        rc = apr_poll_socket_add(ctx->pollset, newsock, APR_POLLIN);
-        ap_assert(rc == APR_SUCCESS);
-    }
-#endif
-
-    return APR_SUCCESS;
-}
-
-static const char *get_cfg_string(ef_dir_t *dc, ef_filter_t *filter, apr_pool_t *p)
-{
-    const char *debug_str = dc->debug == -1 ? 
-        "DebugLevel=0" : apr_psprintf(p, "DebugLevel=%d", dc->debug);
-    const char *log_stderr_str = dc->log_stderr < 1 ?
-        "NoLogStderr" : "LogStderr";
-    const char *preserve_content_length_str = filter->preserves_content_length ?
-        "PreservesContentLength" : "!PreserveContentLength";
-    const char *intype_str = !filter->intype ?
-        "*/*" : filter->intype;
-    const char *outtype_str = !filter->outtype ?
-        "(unchanged)" : filter->outtype;
-    
-    return apr_psprintf(p,
-                        "ExtFilterOptions %s %s %s ExtFilterInType %s "
-                        "ExtFilterOuttype %s",
-                        debug_str, log_stderr_str, preserve_content_length_str,
-                        intype_str, outtype_str);
-}
-
-static apr_status_t init_filter_instance(ap_filter_t *f)
-{
-    ef_ctx_t *ctx;
-    ef_dir_t *dc;
-    ef_server_t *sc;
-    apr_status_t rv;
-
-    f->ctx = ctx = apr_pcalloc(f->r->pool, sizeof(ef_ctx_t));
-    dc = ap_get_module_config(f->r->per_dir_config,
-                              &ext_filter_module);
-    sc = ap_get_module_config(f->r->server->module_config,
-                              &ext_filter_module);
-    ctx->dc = dc;
-    /* look for the user-defined filter */
-    ctx->filter = apr_hash_get(sc->h, f->frec->name, APR_HASH_KEY_STRING);
-    if (!ctx->filter) {
-        ap_log_rerror(APLOG_MARK, APLOG_ERR | APLOG_NOERRNO, 0, f->r,
-                      "couldn't find definition of filter '%s'",
-                      f->frec->name);
-        return APR_EINVAL;
-    }
-    ctx->p = f->r->pool;
-    if (ctx->filter->intype &&
-        ctx->filter->intype != INTYPE_ALL &&
-        strcasecmp(ctx->filter->intype, f->r->content_type)) {
-        /* wrong IMT for us; don't mess with the output */
-        ctx->noop = 1;
-    }
-    else {
-        rv = init_ext_filter_process(f);
-        if (rv != APR_SUCCESS) {
-            return rv;
-        }
-        if (ctx->filter->outtype &&
-            ctx->filter->outtype != OUTTYPE_UNCHANGED) {
-            f->r->content_type = ctx->filter->outtype;
-        }
-        if (ctx->filter->preserves_content_length != 1) {
-            /* nasty, but needed to avoid confusing the browser 
-             */
-            apr_table_unset(f->r->headers_out, "Content-Length");
-        }
-    }
-
-    if (dc->debug >= DBGLVL_SHOWOPTIONS) {
-        ap_log_rerror(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, f->r,
-                      "%sfiltering `%s' through `%s', cfg %s",
-                      ctx->noop ? "skipping: " : "",
-                      f->r->uri ? f->r->uri : f->r->filename,
-                      ctx->filter->command,
-                      get_cfg_string(dc, ctx->filter, f->r->pool));
-    }
-
-    return APR_SUCCESS;
-}
-
-/* drain_available_output(): 
- *
- * if any data is available from the filter, read it and pass it
- * to the next filter
- */
-static apr_status_t drain_available_output(ap_filter_t *f)
-{
-    ef_ctx_t *ctx = f->ctx;
-    ef_dir_t *dc = ctx->dc;
-    apr_size_t len;
-    char buf[4096];
-    apr_status_t rv;
-    apr_bucket_brigade *bb;
-    apr_bucket *b;
-
-    while (1) {
-        len = sizeof(buf);
-        rv = apr_file_read(ctx->proc->out,
-                      buf,
-                      &len);
-        if ((rv && !APR_STATUS_IS_EAGAIN(rv)) ||
-            dc->debug >= DBGLVL_GORY) {
-            ap_log_rerror(APLOG_MARK, APLOG_DEBUG, rv, f->r,
-                          "apr_file_read(child output), len %" APR_SIZE_T_FMT,
-                          !rv ? len : -1);
-        }
-        if (rv != APR_SUCCESS) {
-            return rv;
-        }
-        bb = apr_brigade_create(f->r->pool);
-        b = apr_bucket_transient_create(buf, len);
-        APR_BRIGADE_INSERT_TAIL(bb, b);
-        if ((rv = ap_pass_brigade(f->next, bb)) != APR_SUCCESS) {
-            ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, f->r,
-                          "ap_pass_brigade()");
-            return rv;
-        }
-    }
-    /* we should never get here; if we do, a bogus error message would be
-     * the least of our problems 
-     */
-    return APR_ANONYMOUS;
-}
-
-static apr_status_t pass_data_to_filter(ap_filter_t *f, const char *data, 
-                                        apr_ssize_t len)
-{
-    ef_ctx_t *ctx = f->ctx;
-    ef_dir_t *dc = ctx->dc;
-    apr_status_t rv;
-    apr_size_t bytes_written = 0;
-    apr_size_t tmplen;
-    
-    do {
-        tmplen = len - bytes_written;
-        rv = apr_file_write(ctx->proc->in,
-                       (const char *)data + bytes_written,
-                       &tmplen);
-        bytes_written += tmplen;
-        if (rv != APR_SUCCESS && !APR_STATUS_IS_EAGAIN(rv)) {
-            ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, f->r,
-                          "apr_file_write(child input), len %" APR_SIZE_T_FMT,
-                          tmplen);
-            return rv;
-        }
-        if (APR_STATUS_IS_EAGAIN(rv)) {
-            /* XXX handle blocking conditions here...  if we block, we need 
-             * to read data from the child process and pass it down to the
-             * next filter!
-             */
-            rv = drain_available_output(f);
-            if (APR_STATUS_IS_EAGAIN(rv)) {
-#if APR_FILES_AS_SOCKETS
-                int num_events;
-                
-                rv = apr_poll(ctx->pollset,
-                              &num_events,
-                              f->r->server->timeout * APR_USEC_PER_SEC);
-                if (rv || dc->debug >= DBGLVL_GORY) {
-                    ap_log_rerror(APLOG_MARK, APLOG_DEBUG,
-                                  rv, f->r, "apr_poll()");
-                }
-                if (rv != APR_SUCCESS && !APR_STATUS_IS_EINTR(rv)) { 
-                    /* some error such as APR_TIMEUP */
-                    return rv;
-                }
-#else /* APR_FILES_AS_SOCKETS */
-                /* Yuck... I'd really like to wait until I can read
-                 * or write, but instead I have to sleep and try again 
-                 */
-                apr_sleep(100000); /* 100 milliseconds */
-                if (dc->debug >= DBGLVL_GORY) {
-                    ap_log_rerror(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 
-                                  0, f->r, "apr_sleep()");
-                }
-#endif /* APR_FILES_AS_SOCKETS */
-            }
-            else if (rv != APR_SUCCESS) {
-                return rv;
-            }
-        }
-    } while (bytes_written < len);
-    return rv;
-}
-
-static apr_status_t ef_output_filter(ap_filter_t *f, apr_bucket_brigade *bb)
-{
-    ef_ctx_t *ctx = f->ctx;
-    apr_bucket *b;
-    ef_dir_t *dc;
-    apr_size_t len;
-    const char *data;
-    apr_status_t rv;
-    char buf[4096];
-    apr_bucket *eos = NULL;
-
-    if (!ctx) {
-        if ((rv = init_filter_instance(f)) != APR_SUCCESS) {
-            return rv;
-        }
-        ctx = f->ctx;
-    }
-    if (ctx->noop) {
-        ap_remove_output_filter(f);
-        return ap_pass_brigade(f->next, bb);
-    }
-    dc = ctx->dc;
-
-    APR_BRIGADE_FOREACH(b, bb) {
-
-        if (APR_BUCKET_IS_EOS(b)) {
-            eos = b;
-            break;
-        }
-
-        rv = apr_bucket_read(b, &data, &len, APR_BLOCK_READ);
-        if (rv != APR_SUCCESS) {
-            ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, f->r, "apr_bucket_read()");
-            return rv;
-        }
-
-        if (len > 0 &&
-            (rv = pass_data_to_filter(f, data, len)) != APR_SUCCESS) {
-            return rv;
-        }
-    }
-
-    apr_brigade_destroy(bb);
-
-    /* XXX What we *really* need to do once we've hit eos is create a pipe bucket
-     * from the child output pipe and pass down the pipe bucket + eos.
-     */
-    if (eos) {
-        /* close the child's stdin to signal that no more data is coming;
-         * that will cause the child to finish generating output
-         */
-        if ((rv = apr_file_close(ctx->proc->in)) != APR_SUCCESS) {
-            ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, f->r,
-                          "apr_file_close(child input)");
-            return rv;
-        }
-        /* since we've seen eos and closed the child's stdin, set the proper pipe 
-         * timeout; we don't care if we don't return from apr_file_read() for a while... 
-         */
-        rv = apr_file_pipe_timeout_set(ctx->proc->out, 
-                                  f->r->server->timeout * APR_USEC_PER_SEC);
-        if (rv) {
-            ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, f->r,
-                          "apr_file_pipe_timeout_set(child output)");
-            return rv;
-        }
-    }
-
-    do {
-        len = sizeof(buf);
-        rv = apr_file_read(ctx->proc->out,
-                      buf,
-                      &len);
-        if ((rv && !APR_STATUS_IS_EOF(rv) && !APR_STATUS_IS_EAGAIN(rv)) ||
-            dc->debug >= DBGLVL_GORY) {
-            ap_log_rerror(APLOG_MARK, APLOG_DEBUG, rv, f->r,
-                          "apr_file_read(child output), len %" APR_SIZE_T_FMT,
-                          !rv ? len : -1);
-        }
-        if (APR_STATUS_IS_EAGAIN(rv)) {
-            if (eos) {
-                /* should not occur, because we have an APR timeout in place */
-                AP_DEBUG_ASSERT(1 != 1);
-            }
-            return APR_SUCCESS;
-        }
-        
-        if (rv == APR_SUCCESS) {
-            bb = apr_brigade_create(f->r->pool);
-            b = apr_bucket_transient_create(buf, len);
-            APR_BRIGADE_INSERT_TAIL(bb, b);
-            if ((rv = ap_pass_brigade(f->next, bb)) != APR_SUCCESS) {
-                ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, f->r,
-                              "ap_pass_brigade(filtered buffer) failed");
-                return rv;
-            }
-        }
-    } while (rv == APR_SUCCESS);
-
-    if (!APR_STATUS_IS_EOF(rv)) {
-        return rv;
-    }
-
-    if (eos) {
-        /* pass down eos */
-        bb = apr_brigade_create(f->r->pool);
-        b = apr_bucket_eos_create();
-        APR_BRIGADE_INSERT_TAIL(bb, b);
-        if ((rv = ap_pass_brigade(f->next, bb)) != APR_SUCCESS) {
-            ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, f->r,
-                          "ap_pass_brigade(eos) failed");
-            return rv;
-        }
-    }
-
-    return APR_SUCCESS;
-}
-
-#if 0
-static int ef_input_filter(ap_filter_t *f, apr_bucket_brigade *bb, 
-                           ap_input_mode_t mode, apr_read_type_e block,
-                           apr_off_t readbytes)
-{
-    apr_status_t rv;
-    apr_bucket *b;
-    char *buf;
-    apr_ssize_t len;
-    char *zero;
-
-    rv = ap_get_brigade(f->next, bb, mode, block, readbytes);
-    if (rv != APR_SUCCESS) {
-        return rv;
-    }
-
-    APR_BRIGADE_FOREACH(b, bb) {
-        if (!APR_BUCKET_IS_EOS(b)) {
-            if ((rv = apr_bucket_read(b, (const char **)&buf, &len, APR_BLOCK_READ)) != APR_SUCCESS) {
-                ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, f->r, "apr_bucket_read() failed");
-                return rv;
-            }
-            ap_log_error(APLOG_MARK, APLOG_ERR, 0, NULL, "apr_bucket_read -> %d bytes",
-                         len);
-            while ((zero = memchr(buf, '0', len))) {
-                *zero = 'a';
-            }
-        }
-        else
-            ap_log_error(APLOG_MARK, APLOG_ERR, 0, NULL, "got eos bucket");
-    }
-
-    return rv;
-}
-#endif
-
-module AP_MODULE_DECLARE_DATA ext_filter_module =
-{
-    STANDARD20_MODULE_STUFF,
-    create_ef_dir_conf,
-    merge_ef_dir_conf,
-    create_ef_server_conf,
-    NULL,
-    cmds,
-};
diff --git a/modules/experimental/mod_ext_filter.exp b/modules/experimental/mod_ext_filter.exp
deleted file mode 100644
index ed3b8fc..0000000
--- a/modules/experimental/mod_ext_filter.exp
+++ /dev/null
@@ -1 +0,0 @@
-ext_filter_module
diff --git a/modules/experimental/mod_mem_cache.c b/modules/experimental/mod_mem_cache.c
deleted file mode 100644
index 00eb45e..0000000
--- a/modules/experimental/mod_mem_cache.c
+++ /dev/null
@@ -1,890 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-#define CORE_PRIVATE
-/* CACHE_FD will eventually be exposed as a configuration directive */
-#define CACHE_FD 0
-#include "mod_cache.h"
-#include "ap_mpm.h"
-#include "apr_thread_mutex.h"
-
-/* USE_ATOMICS should be replaced with the appropriate APR feature macro */
-#define USE_ATOMICS
-#ifdef USE_ATOMICS
-#include "apr_atomic.h"
-#endif
-
-#if !APR_HAS_THREADS
-#error This module does not currently compile unless you have a thread-capable APR. Sorry!
-#endif
-
-module AP_MODULE_DECLARE_DATA mem_cache_module;
-
-/* 
- * XXX
- * This cache uses apr_hash functions which leak storage when something is removed
- * from the cache. This can be fixed in the apr_hash functions by making them use
- * malloc/free rather than pools to manage their storage requirements.
- */
-
-typedef enum {
-    CACHE_TYPE_FILE = 1,
-    CACHE_TYPE_HEAP,
-    CACHE_TYPE_MMAP
-} cache_type_e;
-
-typedef struct {
-    char* hdr;
-    char* val;
-} cache_header_tbl_t;
-
-typedef struct mem_cache_object {
-    cache_type_e type;
-    apr_ssize_t num_header_out;
-    apr_ssize_t num_subprocess_env;
-    apr_ssize_t num_notes;
-    cache_header_tbl_t *header_out;
-    cache_header_tbl_t *subprocess_env;
-    cache_header_tbl_t *notes;
-    apr_size_t m_len;
-    void *m;
-    apr_os_file_t fd;
-} mem_cache_object_t;
-
-typedef struct {
-    apr_thread_mutex_t *lock;
-    apr_hash_t *cacheht;
-    apr_size_t cache_size;
-    apr_size_t object_cnt;
-
-    /* Fields set by config directives */
-    apr_size_t min_cache_object_size;
-    apr_size_t max_cache_object_size;
-    apr_size_t max_cache_size;
-    apr_size_t max_object_cnt;
-
-} mem_cache_conf;
-static mem_cache_conf *sconf;
-
-#define DEFAULT_MAX_CACHE_SIZE 100*1024
-#define DEFAULT_MIN_CACHE_OBJECT_SIZE 0
-#define DEFAULT_MAX_CACHE_OBJECT_SIZE 10000
-#define DEFAULT_MAX_OBJECT_CNT 1000
-#define CACHEFILE_LEN 20
-
-/* Forward declarations */
-static int remove_entity(cache_handle_t *h);
-static apr_status_t write_headers(cache_handle_t *h, request_rec *r, cache_info *i);
-static apr_status_t write_body(cache_handle_t *h, request_rec *r, apr_bucket_brigade *b);
-static apr_status_t read_headers(cache_handle_t *h, request_rec *r);
-static apr_status_t read_body(cache_handle_t *h, apr_pool_t *p, apr_bucket_brigade *bb);
-
-static void cleanup_cache_object(cache_object_t *obj)
-{
-    mem_cache_object_t *mobj = obj->vobj;
-
-    /* TODO:
-     * We desperately need a more efficient way of allocating objects. We're
-     * making way too many malloc calls to create a fully populated 
-     * cache object...
-     */
-
-    /* Cleanup the cache_object_t */
-    if (obj->key) {
-        free(obj->key);
-    }
-    if (obj->info.content_type) {
-        free(obj->info.content_type);
-    }
-    if (obj->info.etag) {
-        free(obj->info.etag);
-    }
-    if (obj->info.lastmods) {
-        free(obj->info.lastmods);
-    }
-    if (obj->info.filename) {
-        free(obj->info.filename);
-    }
-
-    free(obj);
-    
-    /* Cleanup the mem_cache_object_t */
-    if (mobj) {
-        if (mobj->type == CACHE_TYPE_HEAP && mobj->m) {
-            free(mobj->m);
-        }
-        if (mobj->type == CACHE_TYPE_FILE && mobj->fd) {
-#ifdef WIN32
-            CloseHandle(mobj->fd);
-#else
-            close(mobj->fd);
-#endif
-        }
-        if (mobj->header_out) {
-            if (mobj->header_out[0].hdr) 
-                free(mobj->header_out[0].hdr);
-            free(mobj->header_out);
-        }
-        if (mobj->subprocess_env) {
-            if (mobj->subprocess_env[0].hdr) 
-                free(mobj->subprocess_env[0].hdr);
-            free(mobj->subprocess_env);
-        }
-        if (mobj->notes) {
-            if (mobj->notes[0].hdr) 
-                free(mobj->notes[0].hdr);
-            free(mobj->notes);
-        }
-        free(mobj);
-    }
-    return;
-}
-static apr_status_t decrement_refcount(void *arg) 
-{
-    cache_object_t *obj = (cache_object_t *) arg;
-
-    /* If obj->complete is not set, the cache update failed and the
-     * object needs to be removed from the cache.
-     */
-    if (!obj->complete) {
-        mem_cache_object_t *mobj = (mem_cache_object_t *) obj->vobj;
-        if (sconf->lock) {
-            apr_thread_mutex_lock(sconf->lock);
-        }
-        apr_hash_set(sconf->cacheht, obj->key, strlen(obj->key), NULL);
-        sconf->object_cnt--;
-        sconf->cache_size -= mobj->m_len;
-        if (sconf->lock) {
-            apr_thread_mutex_unlock(sconf->lock);
-        }
-    }
-
-    /* Cleanup the cache object */
-#ifdef USE_ATOMICS
-    if (!apr_atomic_dec(&obj->refcount)) {
-        if (obj->cleanup) {
-            cleanup_cache_object(obj);
-        }
-    }
-#else
-    if (sconf->lock) {
-        apr_thread_mutex_lock(sconf->lock);
-    }
-    obj->refcount--;
-    /* If the object is marked for cleanup and the refcount
-     * has dropped to zero, cleanup the object
-     */
-    if ((obj->cleanup) && (!obj->refcount)) {
-        cleanup_cache_object(obj);
-    }
-    if (sconf->lock) {
-        apr_thread_mutex_unlock(sconf->lock);
-    }
-#endif
-    return APR_SUCCESS;
-}
-static apr_status_t cleanup_cache_mem(void *sconfv)
-{
-    cache_object_t *obj;
-    apr_hash_index_t *hi;
-    mem_cache_conf *co = (mem_cache_conf*) sconfv;
-
-    if (!co) {
-        return APR_SUCCESS;
-    }
-
-    /* Iterate over the cache and clean up each entry */
-    if (sconf->lock) {
-        apr_thread_mutex_lock(sconf->lock);
-    }
-    for (hi = apr_hash_first(NULL, co->cacheht); hi; hi=apr_hash_next(hi)) {
-        apr_hash_this(hi, NULL, NULL, (void **)&obj);
-        if (obj) {
-#ifdef USE_ATOMICS
-            apr_atomic_inc(&obj->refcount);
-            obj->cleanup = 1;
-            if (!apr_atomic_dec(&obj->refcount)) {
-#else
-            obj->cleanup = 1;
-            if (!obj->refcount) {
-#endif
-                cleanup_cache_object(obj);
-            }
-        }
-    }
-    if (sconf->lock) {
-        apr_thread_mutex_unlock(sconf->lock);
-    }
-    return APR_SUCCESS;
-}
-/*
- * TODO: enable directives to be overridden in various containers
- */
-static void *create_cache_config(apr_pool_t *p, server_rec *s)
-{
-    int threaded_mpm;
-
-    sconf = apr_pcalloc(p, sizeof(mem_cache_conf));
-
-
-    ap_mpm_query(AP_MPMQ_IS_THREADED, &threaded_mpm);
-    if (threaded_mpm) {
-        apr_thread_mutex_create(&sconf->lock, APR_THREAD_MUTEX_DEFAULT, p);
-    }
-    sconf->cacheht = apr_hash_make(p);
-
-    sconf->min_cache_object_size = DEFAULT_MIN_CACHE_OBJECT_SIZE;
-    sconf->max_cache_object_size = DEFAULT_MAX_CACHE_OBJECT_SIZE;
-    /* Number of objects in the cache */
-    sconf->max_object_cnt = DEFAULT_MAX_OBJECT_CNT;
-    sconf->object_cnt = 0;
-    /* Size of the cache in KB */
-    sconf->max_cache_size = DEFAULT_MAX_CACHE_SIZE;
-    sconf->cache_size = 0;
-
-    apr_pool_cleanup_register(p, NULL, cleanup_cache_mem, apr_pool_cleanup_null);
-
-    return sconf;
-}
-
-static int create_entity(cache_handle_t *h, request_rec *r,
-                         const char *type, 
-                         const char *key, 
-                         apr_size_t len) 
-{
-    cache_object_t *obj, *tmp_obj;
-    mem_cache_object_t *mobj;
-
-    if (strcasecmp(type, "mem")) {
-        return DECLINED;
-    }
-
-    if (len < sconf->min_cache_object_size || 
-        len > sconf->max_cache_object_size) {
-        return DECLINED;
-    }
-
-    /*
-     * TODO: Get smarter about managing the cache size.
-     * If the cache is full, we need to do garbage collection
-     * to weed out old/stale entries
-     */
-    if ((sconf->cache_size + len) > sconf->max_cache_size) {
-        return DECLINED;
-    }
-
-    if (sconf->object_cnt >= sconf->max_object_cnt) {
-        return DECLINED;
-    }
-
-    /* Allocate and initialize cache_object_t */
-    obj = calloc(1, sizeof(*obj));
-    if (!obj) {
-        return DECLINED;
-    }
-    obj->key = calloc(1, strlen(key) + 1);
-    if (!obj->key) {
-        cleanup_cache_object(obj);
-        return DECLINED;
-    }
-    strncpy(obj->key, key, strlen(key) + 1);
-    obj->info.len = len;
-
-
-    /* Allocate and init mem_cache_object_t */
-    mobj = calloc(1, sizeof(*mobj));
-    if (!mobj) {
-        cleanup_cache_object(obj);
-        return DECLINED;
-    }
-
-    /* Reference mem_cache_object_t out of cache_object_t */
-    obj->vobj = mobj;
-    mobj->m_len = len;
-    obj->complete = 0;
-    obj->refcount = 1;
-
-    /* Place the cache_object_t into the hash table.
-     * Note: Perhaps we should wait to put the object in the
-     * hash table when the object is complete?  I add the object here to
-     * avoid multiple threads attempting to cache the same content only
-     * to discover at the very end that only one of them will suceed.
-     * Furthermore, adding the cache object to the table at the end could
-     * open up a subtle but easy to exploit DoS hole: someone could request 
-     * a very large file with multiple requests. Better to detect this here
-     * rather than after the cache object has been completely built and
-     * initialized...
-     * XXX Need a way to insert into the cache w/o such coarse grained locking 
-     */
-    if (sconf->lock) {
-        apr_thread_mutex_lock(sconf->lock);
-    }
-    tmp_obj = (cache_object_t *) apr_hash_get(sconf->cacheht, 
-                                              key, 
-                                              APR_HASH_KEY_STRING);
-    if (!tmp_obj) {
-        apr_hash_set(sconf->cacheht, obj->key, strlen(obj->key), obj);
-        sconf->object_cnt++;
-        sconf->cache_size += len;
-    }
-    if (sconf->lock) {
-        apr_thread_mutex_unlock(sconf->lock);
-    }
-
-    if (tmp_obj) {
-        /* This thread collided with another thread loading the same object
-         * into the cache at the same time. Defer to the other thread which 
-         * is further along.
-         */
-        cleanup_cache_object(obj);
-        return DECLINED;
-    }
-
-    /* Set the cleanup flag and register the cleanup to cleanup
-     * the cache_object_t if the cache load is aborted.
-     */
-    obj->cleanup = 1;
-    apr_pool_cleanup_register(r->pool, obj, decrement_refcount, 
-                              apr_pool_cleanup_null);
-
-    /* Populate the cache handle */
-    h->cache_obj = obj;
-    h->read_body = &read_body;
-    h->read_headers = &read_headers;
-    h->write_body = &write_body;
-    h->write_headers = &write_headers;
-    h->remove_entity = &remove_entity;
-
-    return OK;
-}
-
-static int open_entity(cache_handle_t *h, request_rec *r, const char *type, const char *key) 
-{
-    cache_object_t *obj;
-
-    /* Look up entity keyed to 'url' */
-    if (strcasecmp(type, "mem")) {
-        return DECLINED;
-    }
-    if (sconf->lock) {
-        apr_thread_mutex_lock(sconf->lock);
-    }
-    obj = (cache_object_t *) apr_hash_get(sconf->cacheht, key, 
-                                          APR_HASH_KEY_STRING);
-    if (obj) {
-        if (obj->complete) {
-            obj->refcount++;
-            apr_pool_cleanup_register(r->pool, obj, decrement_refcount,
-                                      apr_pool_cleanup_null);
-        }
-        else {
-            obj = NULL;
-        }
-    }
-
-    if (sconf->lock) {
-        apr_thread_mutex_unlock(sconf->lock);
-    }
-
-    if (!obj) {
-        return DECLINED;
-    }
-
-    /* Initialize the cache_handle */
-    h->read_body = &read_body;
-    h->read_headers = &read_headers;
-    h->write_body = &write_body;
-    h->write_headers = &write_headers;
-    h->remove_entity = &remove_entity;
-    h->cache_obj = obj;
-
-    return OK;
-}
-
-static int remove_entity(cache_handle_t *h) 
-{
-    cache_object_t *obj = h->cache_obj;
-
-    /* Remove the cache object from the cache */
-    if (sconf->lock) {
-        apr_thread_mutex_lock(sconf->lock);
-    }
-    obj = (cache_object_t *) apr_hash_get(sconf->cacheht, obj->key,
-                                          APR_HASH_KEY_STRING);
-    if (obj) {
-        mem_cache_object_t *mobj = (mem_cache_object_t *) obj->vobj;
-        apr_hash_set(sconf->cacheht, obj->key, strlen(obj->key), NULL);
-        sconf->object_cnt--;
-        sconf->cache_size -= mobj->m_len;
-    }
-    else {
-        /* If the object was removed from the cache prior to this function being
-         * called, then obj == NULL. Reinit obj with the object being cleaned up.
-         * Note: This code assumes that there is at most only one object in the
-         * cache per key.
-         */
-        obj = h->cache_obj;
-    }
-
-    /* Cleanup the cache object 
-     * Set obj->cleanup to ensure decrement_refcount cleans up the obj if it 
-     * is still being referenced by another thread
-     */
-    obj->cleanup = 1;
-#ifndef USE_ATOMICS
-    obj->refcount--;
-    if (!obj->refcount) {
-        cleanup_cache_object(obj);
-    }
-#endif
-    if (sconf->lock) {
-        apr_thread_mutex_unlock(sconf->lock);
-    }    
-#ifdef USE_ATOMICS
-    if (!apr_atomic_dec(&obj->refcount)) {
-        cleanup_cache_object(obj);
-    }
-#endif
-    h->cache_obj = NULL;   
-    return OK;
-}
-static apr_status_t serialize_table(cache_header_tbl_t **obj, 
-                                    apr_ssize_t *nelts, 
-                                    apr_table_t *table)
-{
-    apr_table_entry_t *elts = (apr_table_entry_t *) table->a.elts;
-    apr_ssize_t i;
-    apr_size_t len = 0;
-    apr_size_t idx = 0;
-    char *buf;
-   
-    *nelts = table->a.nelts;
-    if (*nelts == 0 ) {
-        *obj=NULL;
-        return APR_SUCCESS;
-    }
-    *obj = calloc(1, sizeof(cache_header_tbl_t) * table->a.nelts);
-    if (NULL == *obj) {
-        return APR_ENOMEM;
-    }
-    for (i = 0; i < table->a.nelts; ++i) {
-        len += strlen(elts[i].key);
-        len += strlen(elts[i].val);
-        len += 2;  /* Extra space for NULL string terminator for key and val */
-    }
-
-    /* Transfer the headers into a contiguous memory block */
-    buf = calloc(1, len);
-    if (!buf) {
-        *obj = NULL;
-        return APR_ENOMEM;
-    }
-
-    for (i = 0; i < *nelts; ++i) {
-        (*obj)[i].hdr = &buf[idx];
-        len = strlen(elts[i].key) + 1;              /* Include NULL terminator */
-        strncpy(&buf[idx], elts[i].key, len);
-        idx+=len;
-
-        (*obj)[i].val = &buf[idx];
-        len = strlen(elts[i].val) + 1;
-        strncpy(&buf[idx], elts[i].val, len);
-        idx+=len;
-    }
-    return APR_SUCCESS;
-}
-static int unserialize_table( cache_header_tbl_t *ctbl, 
-                              int num_headers, 
-                              apr_table_t *t )
-{
-    int i;
-
-    for (i = 0; i < num_headers; ++i) {
-        apr_table_setn(t, ctbl[i].hdr, ctbl[i].val);
-    } 
-
-    return APR_SUCCESS;
-}
-/* Define request processing hook handlers */
-static int remove_url(const char *type, const char *key) 
-{
-    cache_object_t *obj;
-
-    if (strcasecmp(type, "mem")) {
-        return DECLINED;
-    }
-
-    /* WIBNIF
-     * apr_hash_set(..,..,..,NULL) returned pointer to the object just removed.
-     * That way, we could free the object w/o doing another call to an
-     * apr_hash function.
-     */
-
-    /* First, find the object in the cache */
-    if (sconf->lock) {
-        apr_thread_mutex_lock(sconf->lock);
-    }
-    obj = (cache_object_t *) apr_hash_get(sconf->cacheht, key, 
-                                          APR_HASH_KEY_STRING);
-    if (obj) {
-        mem_cache_object_t *mobj = (mem_cache_object_t *) obj->vobj;
-        apr_hash_set(sconf->cacheht, key, APR_HASH_KEY_STRING, NULL);
-        sconf->object_cnt--;
-        sconf->cache_size -= mobj->m_len;
-        /* Set cleanup to ensure decrement_refcount cleans up the obj if it 
-         * is still being referenced by another thread
-         */
-        obj->cleanup = 1;
-#ifdef USE_ATOMICS
-        /* Refcount increment MUST be made under protection of the lock */
-        obj->refcount++;
-#else
-        if (!obj->refcount) {
-            cleanup_cache_object(obj);
-        }
-#endif
-    }
-    if (sconf->lock) {
-        apr_thread_mutex_unlock(sconf->lock);
-    }
-#ifdef USE_ATOMICS
-    if (obj) {
-        if (!apr_atomic_dec(&obj->refcount)) {
-            cleanup_cache_object(obj);
-        }
-    }
-#endif
-    return OK;
-}
-
-static apr_status_t read_headers(cache_handle_t *h, request_rec *r) 
-{
-    int rc;
-    mem_cache_object_t *mobj = (mem_cache_object_t*) h->cache_obj->vobj;
-
-    r->headers_out = apr_table_make(r->pool,mobj->num_header_out);
-    r->subprocess_env = apr_table_make(r->pool, mobj->num_subprocess_env);
-    r->notes = apr_table_make(r->pool, mobj->num_notes);
-    rc = unserialize_table( mobj->header_out,
-                            mobj->num_header_out, 
-                            r->headers_out);
-    rc = unserialize_table( mobj->subprocess_env, 
-                            mobj->num_subprocess_env, 
-                            r->subprocess_env);
-    rc = unserialize_table( mobj->notes,
-                            mobj->num_notes,
-                            r->notes);
-    return rc;
-}
-
-static apr_status_t read_body(cache_handle_t *h, apr_pool_t *p, apr_bucket_brigade *bb) 
-{
-    apr_bucket *b;
-    mem_cache_object_t *mobj = (mem_cache_object_t*) h->cache_obj->vobj;
-
-    if (mobj->type == CACHE_TYPE_FILE) {
-        /* CACHE_TYPE_FILE */
-        apr_file_t *file;
-        apr_os_file_put(&file, &mobj->fd, APR_READ|APR_XTHREAD, p);
-        b = apr_bucket_file_create(file, 0, mobj->m_len, p);
-    }
-    else {
-        /* CACHE_TYPE_HEAP */
-        b = apr_bucket_immortal_create(mobj->m, mobj->m_len);
-    }
-    APR_BRIGADE_INSERT_TAIL(bb, b);
-    b = apr_bucket_eos_create();
-    APR_BRIGADE_INSERT_TAIL(bb, b);
-
-    return APR_SUCCESS;
-}
-
-
-static apr_status_t write_headers(cache_handle_t *h, request_rec *r, cache_info *info)
-{
-    cache_object_t *obj = h->cache_obj;
-    mem_cache_object_t *mobj = (mem_cache_object_t*) obj->vobj;
-    int rc;
-
-    /* Precompute how much storage we need to hold the headers */
-    rc = serialize_table(&mobj->header_out, 
-                         &mobj->num_header_out, 
-                         r->headers_out);   
-    if (rc != APR_SUCCESS) {
-        return rc;
-    }
-    rc = serialize_table(&mobj->subprocess_env,
-                         &mobj->num_subprocess_env, 
-                         r->subprocess_env );
-    if (rc != APR_SUCCESS) {
-        return rc;
-    }
-
-    rc = serialize_table(&mobj->notes, &mobj->num_notes, r->notes);
-    if (rc != APR_SUCCESS) {
-        return rc;
-    }
- 
-    /* Init the info struct */
-    if (info->date) {
-        obj->info.date = info->date;
-    }
-    if (info->lastmod) {
-        obj->info.lastmod = info->lastmod;
-    }
-    if (info->expire) {
-        obj->info.expire = info->expire;
-    }
-    if (info->content_type) {
-        obj->info.content_type = (char*) calloc(1, strlen(info->content_type) + 1);
-        if (!obj->info.content_type) {
-            return APR_ENOMEM;
-        }
-        strcpy(obj->info.content_type, info->content_type);
-    }
-    if ( info->filename) {
-        obj->info.filename = (char*) calloc(1, strlen(info->filename) + 1);
-        if (!obj->info.filename ) {
-            return APR_ENOMEM;
-        }
-        strcpy(obj->info.filename, info->filename );
-    }
-
-    return APR_SUCCESS;
-}
-
-static apr_status_t write_body(cache_handle_t *h, request_rec *r, apr_bucket_brigade *b) 
-{
-    apr_status_t rv;
-    cache_object_t *obj = h->cache_obj;
-    mem_cache_object_t *mobj = (mem_cache_object_t*) obj->vobj;
-    apr_read_type_e eblock = APR_BLOCK_READ;
-    apr_bucket *e;
-    char *cur;
-
-    if (CACHE_FD) {
-        apr_file_t *file = NULL;
-        int fd = 0;
-        int other = 0;
-
-        /* We can cache an open file descriptor if:
-         * - the brigade contains one and only one file_bucket &&
-	 * - the brigade is complete &&
-	 * - the file_bucket is the last data bucket in the brigade
-         */
-        APR_BRIGADE_FOREACH(e, b) {
-            if (APR_BUCKET_IS_EOS(e)) {
-                obj->complete = 1;
-            }
-            else if (APR_BUCKET_IS_FILE(e)) {
-                apr_bucket_file *a = e->data;
-                fd++;
-                file = a->fd;
-            }
-            else {
-                other++;
-            }
-        }
-        if (fd == 1 && !other && obj->complete) {
-            apr_file_t *tmpfile;
-
-            mobj->type = CACHE_TYPE_FILE;
-            /* Open a new XTHREAD handle to the file */
-            rv = apr_file_open(&tmpfile, r->filename, 
-                               APR_READ | APR_BINARY | APR_XTHREAD | APR_FILE_NOCLEANUP,
-                               APR_OS_DEFAULT, r->pool);
-            if (rv != APR_SUCCESS) {
-                return rv;
-            }
-            apr_file_unset_inherit(tmpfile);
-            apr_os_file_get(&(mobj->fd), tmpfile);
-
-            obj->cleanup = 0;
-            obj->refcount--;    /* Count should be 0 now */
-            apr_pool_cleanup_kill(r->pool, obj, decrement_refcount);
-
-            /* Open for business */
-            obj->complete = 1;
-            return APR_SUCCESS;
-        }
-    }
-
-    /* 
-     * FD cacheing is not enabled or the content was not
-     * suitable for fd caching.
-     */  
-    if (mobj->m == NULL) {
-        mobj->m = malloc(mobj->m_len);
-        if (mobj->m == NULL) {
-            return APR_ENOMEM;
-        }
-        mobj->type = CACHE_TYPE_HEAP;
-        obj->count = 0;
-    }
-    cur = (char*) mobj->m + obj->count;
-
-    /* Iterate accross the brigade and populate the cache storage */
-    APR_BRIGADE_FOREACH(e, b) {
-        const char *s;
-        apr_size_t len;
-
-        if (APR_BUCKET_IS_EOS(e)) {
-            obj->cleanup = 0;
-            obj->refcount--;    /* Count should be 0 now */
-            apr_pool_cleanup_kill(r->pool, obj, decrement_refcount);
-
-            /* Open for business */
-            obj->complete = 1;
-            break;
-        }
-        rv = apr_bucket_read(e, &s, &len, eblock);
-        if (rv != APR_SUCCESS) {
-            return rv;
-        }
-        /* XXX Check for overflow */
-        if (len ) {
-            memcpy(cur, s, len);
-            cur+=len;
-            obj->count+=len;
-        }
-        /* This should not happen, but if it does, we are in BIG trouble
-         * cause we just stomped all over the heap.
-         */
-        AP_DEBUG_ASSERT(obj->count > mobj->m_len);
-    }
-    return APR_SUCCESS;
-}
-
-static const char 
-*set_max_cache_size(cmd_parms *parms, void *in_struct_ptr, const char *arg)
-{
-    int val;
-
-    if (sscanf(arg, "%d", &val) != 1) {
-        return "CacheSize value must be an integer (kBytes)";
-    }
-    sconf->max_cache_size = val;
-    return NULL;
-}
-static const char 
-*set_min_cache_object_size(cmd_parms *parms, void *in_struct_ptr, const char *arg)
-{
-    apr_size_t val;
-
-    if (sscanf(arg, "%d", &val) != 1) {
-        return "CacheMinObjectSize value must be an integer (bytes)";
-    }
-    sconf->min_cache_object_size = val;
-    return NULL;
-}
-static const char 
-*set_max_cache_object_size(cmd_parms *parms, void *in_struct_ptr, const char *arg)
-{
-    apr_size_t val;
-
-    if (sscanf(arg, "%d", &val) != 1) {
-        return "CacheMaxObjectSize value must be an integer (KB)";
-    }
-    sconf->max_cache_object_size = val;
-    return NULL;
-}
-static const char 
-*set_max_object_count(cmd_parms *parms, void *in_struct_ptr, const char *arg)
-{
-    apr_size_t val;
-
-    if (sscanf(arg, "%d", &val) != 1) {
-        return "CacheMaxObjectCount value must be an integer";
-    }
-    sconf->max_object_cnt = val;
-    return NULL;
-}
-
-static const command_rec cache_cmds[] =
-{
-    AP_INIT_TAKE1("CacheSize", set_max_cache_size, NULL, RSRC_CONF,
-     "The maximum space used by the cache in KB"),
-    AP_INIT_TAKE1("CacheMaxObjectCount", set_max_object_count, NULL, RSRC_CONF,
-     "The maximum number of objects allowed to be placed in the cache"),
-    AP_INIT_TAKE1("CacheMinObjectSize", set_min_cache_object_size, NULL, RSRC_CONF,
-     "The minimum size (in bytes) of an object to be placed in the cache"),
-    AP_INIT_TAKE1("CacheMaxObjectSize", set_max_cache_object_size, NULL, RSRC_CONF,
-     "The maximum size (in KB) of an object to be placed in the cache"),
-    {NULL}
-};
-
-static void register_hooks(apr_pool_t *p)
-{
-    /* cache initializer */
-/*    cache_hook_cache_init(cache_init, NULL, NULL, AP_HOOK_FIRST); */
-    cache_hook_create_entity(create_entity, NULL, NULL, APR_HOOK_MIDDLE);
-    cache_hook_open_entity(open_entity,  NULL, NULL, APR_HOOK_MIDDLE);
-    cache_hook_remove_url(remove_url, NULL, NULL, APR_HOOK_MIDDLE);
-}
-
-module AP_MODULE_DECLARE_DATA mem_cache_module =
-{
-    STANDARD20_MODULE_STUFF,
-    NULL,                    /* create per-directory config structure */
-    NULL,                    /* merge per-directory config structures */
-    create_cache_config,     /* create per-server config structure */
-    NULL,                    /* merge per-server config structures */
-    cache_cmds,              /* command apr_table_t */
-    register_hooks
-};
-
diff --git a/modules/experimental/mod_mem_cache.dsp b/modules/experimental/mod_mem_cache.dsp
deleted file mode 100644
index ca8999b..0000000
--- a/modules/experimental/mod_mem_cache.dsp
+++ /dev/null
@@ -1,111 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mod_mem_cache" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mod_mem_cache - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "mod_mem_cache.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "mod_mem_cache.mak" CFG="mod_mem_cache - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "mod_mem_cache - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mod_mem_cache - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "mod_mem_cache - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "mod_mem_cache_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /I "../../srclib/apr-util/include" /I "../../srclib/apr/include" /I "../../include" /I "../../os/win32" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"Release/mod_mem_cache.so"
-
-!ELSEIF  "$(CFG)" == "mod_mem_cache - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "mod_mem_cache_EXPORTS" /YX /FD /GZ /c
-# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "../../srclib/apr-util/include" /I "../../srclib/apr/include" /I "../../include" /I "../../os/win32" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /FR /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"Debug/mod_mem_cache.so" /pdbtype:sept
-
-!ENDIF 
-
-# Begin Target
-
-# Name "mod_mem_cache - Win32 Release"
-# Name "mod_mem_cache - Win32 Debug"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\mod_mem_cache.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\mod_cache.h
-# End Source File
-# End Group
-# Begin Group "Resource Files"
-
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-# End Group
-# End Target
-# End Project
diff --git a/modules/experimental/util_ldap.c b/modules/experimental/util_ldap.c
deleted file mode 100644
index 5ff3dd1..0000000
--- a/modules/experimental/util_ldap.c
+++ /dev/null
@@ -1,1104 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-/*
- * util_ldap.c: LDAP things
- * 
- * Original code from auth_ldap module for Apache v1.3:
- * Copyright 1998, 1999 Enbridge Pipelines Inc. 
- * Copyright 1999-2001 Dave Carrigan
- */
-
-#include <apr_ldap.h>
-
-#ifdef APU_HAS_LDAP
-
-#include <apr_strings.h>
-
-#include "ap_config.h"
-#include "httpd.h"
-#include "http_config.h"
-#include "http_core.h"
-#include "http_log.h"
-#include "http_protocol.h"
-#include "http_request.h"
-#include "util_ldap.h"
-#include "util_ldap_cache.h"
-
-#if APR_HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-module AP_MODULE_DECLARE_DATA ldap_module;
-
-int util_ldap_handler(request_rec *r);
-void *util_ldap_create_config(apr_pool_t *p, server_rec *s);
-
-
-/*
- * Some definitions to help between various versions of apache.
- */
-
-#ifndef DOCTYPE_HTML_2_0
-#define DOCTYPE_HTML_2_0  "<!DOCTYPE HTML PUBLIC \"-//IETF//" \
-                          "DTD HTML 2.0//EN\">\n"
-#endif
-
-#ifndef DOCTYPE_HTML_3_2
-#define DOCTYPE_HTML_3_2  "<!DOCTYPE HTML PUBLIC \"-//W3C//" \
-                          "DTD HTML 3.2 Final//EN\">\n"
-#endif
-
-#ifndef DOCTYPE_HTML_4_0S
-#define DOCTYPE_HTML_4_0S "<!DOCTYPE HTML PUBLIC \"-//W3C//" \
-                          "DTD HTML 4.0//EN\"\n" \
-                          "\"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"
-#endif
-
-#ifndef DOCTYPE_HTML_4_0T
-#define DOCTYPE_HTML_4_0T "<!DOCTYPE HTML PUBLIC \"-//W3C//" \
-                          "DTD HTML 4.0 Transitional//EN\"\n" \
-                          "\"http://www.w3.org/TR/REC-html40/loose.dtd\">\n"
-#endif
-
-#ifndef DOCTYPE_HTML_4_0F
-#define DOCTYPE_HTML_4_0F "<!DOCTYPE HTML PUBLIC \"-//W3C//" \
-                          "DTD HTML 4.0 Frameset//EN\"\n" \
-                          "\"http://www.w3.org/TR/REC-html40/frameset.dtd\">\n"
-#endif
-
-/*
- * Status Handler
- * --------------
- *
- * This handler generates a status page about the current performance of
- * the LDAP cache. It is enabled as follows:
- *
- * <Location /ldap-status>
- *   SetHandler ldap-status
- * </Location>
- *
- */
-int util_ldap_handler(request_rec *r)
-{
-
-    r->allowed |= (1 << M_GET);
-    if (r->method_number != M_GET)
-        return DECLINED;
-
-    if (strcmp(r->handler, "ldap-status")) {
-        return DECLINED;
-    }
-
-    r->content_type = "text/html";
-    if (r->header_only)
-        return OK;
-
-    ap_rputs(DOCTYPE_HTML_3_2
-             "<html><head><title>LDAP Cache Information</title></head>\n", r);
-    ap_rputs("<body bgcolor='#ffffff'><h1 align=center>LDAP Cache Information</h1>\n", r);
-
-    ap_rputs("<p>\n"
-             "<table border='0'>\n"
-             "<tr bgcolor='#000000'>\n"
-             "<td><font size='-1' face='Arial,Helvetica' color='#ffffff'><b>Cache Name</b></font></td>"
-             "<td><font size='-1' face='Arial,Helvetica' color='#ffffff'><b>Entries</b></font></td>"
-             "<td><font size='-1' face='Arial,Helvetica' color='#ffffff'><b>Avg. Chain Len.</b></font></td>"
-             "<td colspan='2'><font size='-1' face='Arial,Helvetica' color='#ffffff'><b>Hits</b></font></td>"
-             "<td><font size='-1' face='Arial,Helvetica' color='#ffffff'><b>Ins/Rem</b></font></td>"
-             "<td colspan='2'><font size='-1' face='Arial,Helvetica' color='#ffffff'><b>Purges</b></font></td>"
-             "<td><font size='-1' face='Arial,Helvetica' color='#ffffff'><b>Avg Purge Time</b></font></td>"
-             "</tr>\n", r
-            );
-
-    ap_rputs(util_ald_cache_display(r->pool), r);
-
-    ap_rputs("</table>\n</p>\n", r);
-
-    return OK;
-}
-
-/* ------------------------------------------------------------------ */
-
-
-/*
- * Closes an LDAP connection by unlocking it. The next time
- * util_ldap_connection_find() is called this connection will be
- * available for reuse.
- */
-void util_ldap_connection_close(util_ldap_connection_t *ldc)
-{
-
-    /*
-     * QUESTION:
-     *
-     * Is it safe leaving bound connections floating around between the
-     * different modules? Keeping the user bound is a performance boost,
-     * but it is also a potential security problem - maybe.
-     *
-     * For now we unbind the user when we finish with a connection, but
-     * we don't have to...
-     */
-
-    /* mark our connection as available for reuse */
-    apr_thread_mutex_unlock(ldc->lock);
-
-}
-
-
-/*
- * Destroys an LDAP connection by unbinding. This function is registered
- * with the pool cleanup function - causing the LDAP connections to be
- * shut down cleanly on graceful restart.
- */
-apr_status_t util_ldap_connection_destroy(void *param)
-{
-    util_ldap_connection_t *ldc = param;
-
-    /* unbinding from the LDAP server */
-    if (ldc->ldap) {
-        ldap_unbind_s(ldc->ldap);
-        ldc->bound = 0;
-        ldc->ldap = NULL;
-    }
-
-    /* release the lock we were using */
-    apr_thread_mutex_unlock(ldc->lock);
-
-    return APR_SUCCESS;
-}
-
-
-/*
- * Connect to the LDAP server and binds. Does not connect if already
- * connected (i.e. ldc->ldap is non-NULL.) Does not bind if already bound.
- *
- * Returns LDAP_SUCCESS on success; and an error code on failure
- */
-int util_ldap_connection_open(util_ldap_connection_t *ldc)
-{
-    int result = 0;
-    int failures = 0;
-
-
-start_over:
-    if (failures++ > 10) {
-	/* too many failures - leave */
-        return result;
-    }
-
-    if (!ldc->ldap) {
-        ldc->bound = 0;
-
-	/* opening connection to LDAP server */
-        if ((ldc->ldap = ldap_init(ldc->host, ldc->port)) == NULL) {
-	    /* couldn't connect */
-            ldc->reason = "ldap_init() failed";
-            return -1;
-        }
-
-	/* add the cleanup to the pool */
-        apr_pool_cleanup_register(ldc->pool, ldc,
-                                  util_ldap_connection_destroy,
-                                  apr_pool_cleanup_null);
-
-        /* Set the alias dereferencing option */
-#if LDAP_VERSION_MAX == 2
-        ldc->ldap->ld_deref = ldc->deref;
-#else
-        result = ldap_set_option(ldc->ldap, LDAP_OPT_DEREF, &(ldc->deref));
-        if (result != LDAP_SUCCESS) {
-	    /* setting LDAP dereference option failed */
-	    /* we ignore this error */
-        }
-#endif /* LDAP_VERSION_MAX */
-
-#ifdef APU_HAS_LDAP_NETSCAPE_SSL
-        if (ldc->netscapessl) {
-            if (!ldc->certdb) {
-		/* secure LDAP requested, but no CA cert defined */
-                ldc->reason = "secure LDAP requested, but no CA cert defined";
-                return -1;
-            } else {
-                result = ldapssl_install_routines(ldc->ldap);
-                if (result != LDAP_SUCCESS) {
-		    /* SSL initialisation failed */
-                    ldc->reason = "ldapssl_install_routines() failed";
-                    return result;
-                }
-                result = ldap_set_option(ldc->ldap, LDAP_OPT_SSL, LDAP_OPT_ON);
-                if (result != LDAP_SUCCESS) {
-		    /* SSL option failed */
-                    ldc->reason = "ldap_set_option() failed trying to set LDAP_OPT_SSL";
-                    return result;
-                }
-            }
-        }
-#endif /* APU_HAS_LDAP_NETSCAPE_SSL */
-
-#ifdef APU_HAS_LDAP_STARTTLS
-        if (ldc->starttls) {
-            int version = LDAP_VERSION3;
-
-            /* Also we have to set the connection to use protocol version 3,
-             * since we're using TLS. */
-            if ((result = ldap_set_option(ldc->ldap, LDAP_OPT_PROTOCOL_VERSION,
-                                         &version)) != LDAP_SUCCESS) {
-		/* setting LDAP version failed - ignore error */
-            }
-
-            /* 
-             * In util_ldap_connection_find, we compare ldc->withtls to
-             * sec->starttls to see if we have a cache match. On the off
-             * chance that apache's config processing rotines set starttls to
-             * some other true value besides 1, we set it to 1 here to ensure
-             * that the comparison succeeds.
-             */
-            ldc->starttls = 1;
-
-            result = ldap_start_tls_s(ldc->ldap, NULL, NULL);
-            if (result != LDAP_SUCCESS) {
-		/* start TLS failed */
-		ldc->withtls = 0;
-                ldc->reason = "ldap_start_tls_s() failed";
-	        return result;
-            }
-            ldc->withtls = 1;
-        } else {
-            ldc->withtls = 0;
-        }
-#endif /* APU_HAS_LDAP_STARTTLS */
-    }
-
-    /* 
-     * At this point the LDAP connection is guaranteed alive. If bound says
-     * that we're bound already, we can just return.
-     */
-    if (ldc->bound) {
-        ldc->reason = "LDAP connection open successful (already bound)";
-        return LDAP_SUCCESS;
-    }
-
-    /* 
-     * Now bind with the username/password provided by the
-     * configuration. It will be an anonymous bind if no u/p was
-     * provided. 
-     */
-    if ((result = ldap_simple_bind_s(ldc->ldap, ldc->binddn, ldc->bindpw))
-        == LDAP_SERVER_DOWN) {
-	/* couldn't connect - try again */
-        ldc->reason = "ldap_simple_bind_s() failed with server down";
-        goto start_over;
-    }
-
-    if (result != LDAP_SUCCESS) {
-	/* LDAP fatal error occured */
-        ldc->reason = "ldap_simple_bind_s() failed";
-        return result;
-    }
-
-    /* note how we are bound */
-    ldc->bound = 1;
-
-    ldc->reason = "LDAP connection open successful";
-    return LDAP_SUCCESS;
-}
-
-
-/*
- * Find an existing ldap connection struct that matches the
- * provided ldap connection parameters.
- *
- * If not found in the cache, a new ldc structure will be allocated from st->pool
- * and returned to the caller. If found in the cache, a pointer to the existing
- * ldc structure will be returned.
- */
-util_ldap_connection_t *util_ldap_connection_find(request_rec *r, const char *host, int port,
-                                              const char *binddn, const char *bindpw, deref_options deref,
-                                              int netscapessl, int starttls)
-{
-    struct util_ldap_connection_t *l, *p;	/* To traverse the linked list */
-
-    util_ldap_state_t *st = 
-        (util_ldap_state_t *)ap_get_module_config(r->server->module_config,
-        &ldap_module);
-
-
-    /* mutex lock this function */
-    if (!st->mutex) {
-        apr_thread_mutex_create(&st->mutex, APR_THREAD_MUTEX_DEFAULT, st->pool);
-    }
-    apr_thread_mutex_lock(st->mutex);
-
-    /* Search for an exact connection match in the list that is not
-     * being used.
-     */
-    for (l=st->connections,p=NULL; l; l=l->next) {
-        if ( (APR_SUCCESS == apr_thread_mutex_trylock(l->lock))
-            && l->port == port
-	    && strcmp(l->host, host) == 0
-	    && ( (!l->binddn && !binddn) || (l->binddn && binddn && !strcmp(l->binddn, binddn)) )
-	    && ( (!l->bindpw && !bindpw) || (l->bindpw && bindpw && !strcmp(l->bindpw, bindpw)) )
-            && l->deref == deref
-#ifdef APU_HAS_LDAP_NETSCAPE_SSL
-            && l->netscapessl == netscapessl
-#endif
-#ifdef APU_HAS_LDAP_STARTTLS
-	    && l->withtls == starttls
-#endif
-            )
-            break;
-        p = l;
-    }
-
-    /* If nothing found, search again, but we don't care about the
-     * binddn and bindpw this time.
-     */
-    if (!l) {
-        for (l=st->connections,p=NULL; l; l=l->next) {
-            if ( (APR_SUCCESS == apr_thread_mutex_trylock(l->lock))
-                && l->port == port
-	        && strcmp(l->host, host) == 0
-                && l->deref == deref
-#ifdef APU_HAS_LDAP_NETSCAPE_SSL
-                && l->netscapessl == netscapessl
-#endif
-#ifdef APU_HAS_LDAP_STARTTLS
-                && l->withtls == starttls
-#endif
-                ) {
-                /* the bind credentials have changed */
-                l->bound = 0;
-                l->binddn = apr_pstrdup(st->pool, binddn);
-                l->bindpw = apr_pstrdup(st->pool, bindpw);
-                break;
-            }
-            p = l;
-        }
-    }
-
-/* artificially disable cache */
-//l = NULL;
-
-    /* If no connection what found after the second search, we
-     * must create one.
-     */
-    if (!l) {
-
-        /* 
-         * Add the new connection entry to the linked list. Note that we
-         * don't actually establish an LDAP connection yet; that happens
-         * the first time authentication is requested.
-         */
-        /* create the details to the pool in st */
-        l = apr_pcalloc(st->pool, sizeof(util_ldap_connection_t));
-        apr_thread_mutex_create(&l->lock, APR_THREAD_MUTEX_DEFAULT, st->pool);
-        apr_thread_mutex_lock(l->lock);
-        l->pool = st->pool;
-        l->bound = 0;
-        l->host = apr_pstrdup(st->pool, host);
-        l->port = port;
-        l->deref = deref;
-        l->binddn = apr_pstrdup(st->pool, binddn);
-        l->bindpw = apr_pstrdup(st->pool, bindpw);
-        l->netscapessl = netscapessl;
-        l->starttls = starttls;
-        l->withtls = 0;
-
-        if (p) {
-            p->next = l;
-        }
-        else {
-            st->connections = l;
-        }
-    }
-
-    apr_thread_mutex_unlock(st->mutex);
-    return l;
-}
-
-/* ------------------------------------------------------------------ */
-
-/*
- * Compares two DNs to see if they're equal. The only way to do this correctly is to 
- * search for the dn and then do ldap_get_dn() on the result. This should match the 
- * initial dn, since it would have been also retrieved with ldap_get_dn(). This is
- * expensive, so if the configuration value compare_dn_on_server is
- * false, just does an ordinary strcmp.
- *
- * The lock for the ldap cache should already be acquired.
- */
-int util_ldap_cache_comparedn(request_rec *r, util_ldap_connection_t *ldc, 
-                            const char *url, const char *dn, const char *reqdn, 
-                            int compare_dn_on_server)
-{
-    int result = 0;
-    util_url_node_t *curl; 
-    util_url_node_t curnode;
-    util_dn_compare_node_t *node;
-    util_dn_compare_node_t newnode;
-    int failures = 0;
-    LDAPMessage *res, *entry;
-    char *searchdn;
-
-    util_ldap_state_t *st = 
-        (util_ldap_state_t *)ap_get_module_config(r->server->module_config,
-        &ldap_module);
-
-
-    /* read lock this function */
-    if (!util_ldap_cache_lock) {
-        apr_thread_rwlock_create(&util_ldap_cache_lock, st->pool);
-    }
-
-    /* get cache entry (or create one) */
-    apr_thread_rwlock_wrlock(util_ldap_cache_lock);
-    curnode.url = url;
-    curl = util_ald_cache_fetch(util_ldap_cache, &curnode);
-    if (curl == NULL) {
-        curl = util_ald_create_caches(st, url);
-    }
-    apr_thread_rwlock_unlock(util_ldap_cache_lock);
-
-    /* a simple compare? */
-    if (!compare_dn_on_server) {
-        /* unlock this read lock */
-        if (strcmp(dn, reqdn)) {
-            ldc->reason = "DN Comparison FALSE (direct strcmp())";
-            return LDAP_COMPARE_FALSE;
-        }
-        else {
-            ldc->reason = "DN Comparison TRUE (direct strcmp())";
-            return LDAP_COMPARE_TRUE;
-        }
-    }
-
-    /* no - it's a server side compare */
-    apr_thread_rwlock_rdlock(util_ldap_cache_lock);
-
-    /* is it in the compare cache? */
-    newnode.reqdn = (char *)reqdn;
-    node = util_ald_cache_fetch(curl->dn_compare_cache, &newnode);
-    if (node != NULL) {
-        /* If it's in the cache, it's good */
-        /* unlock this read lock */
-        apr_thread_rwlock_unlock(util_ldap_cache_lock);
-        ldc->reason = "DN Comparison TRUE (cached)";
-        return LDAP_COMPARE_TRUE;
-    }
-
-    /* unlock this read lock */
-    apr_thread_rwlock_unlock(util_ldap_cache_lock);
-
-start_over:
-    if (failures++ > 10) {
-	/* too many failures */
-        return result;
-    }
-
-    /* make a server connection */
-    if (LDAP_SUCCESS != (result = util_ldap_connection_open(ldc))) {
-	/* connect to server failed */
-        return result;
-    }
-
-    /* search for reqdn */
-    if ((result = ldap_search_ext_s(ldc->ldap, const_cast(reqdn), LDAP_SCOPE_BASE, 
-				    "(objectclass=*)", NULL, 1, 
-				    NULL, NULL, NULL, -1, &res)) == LDAP_SERVER_DOWN) {
-        util_ldap_connection_close(ldc);
-        ldc->reason = "DN Comparison ldap_search_ext_s() failed with server down";
-        goto start_over;
-    }
-    if (result != LDAP_SUCCESS) {
-        /* search for reqdn failed - no match */
-        ldc->reason = "DN Comparison ldap_search_ext_s() failed";
-        return result;
-    }
-
-    entry = ldap_first_entry(ldc->ldap, res);
-    searchdn = ldap_get_dn(ldc->ldap, entry);
-
-    ldap_msgfree(res);
-    if (strcmp(dn, searchdn) != 0) {
-        /* compare unsuccessful */
-        ldc->reason = "DN Comparison FALSE (checked on server)";
-        result = LDAP_COMPARE_FALSE;
-    }
-    else {
-        /* compare successful - add to the compare cache */
-        apr_thread_rwlock_rdlock(util_ldap_cache_lock);
-        newnode.reqdn = (char *)reqdn;
-        newnode.dn = (char *)dn;
-        util_ald_cache_insert(curl->dn_compare_cache, &newnode);
-        apr_thread_rwlock_unlock(util_ldap_cache_lock);
-        ldc->reason = "DN Comparison TRUE (checked on server)";
-        result = LDAP_COMPARE_TRUE;
-    }
-    ldap_memfree(searchdn);
-    return result;
-
-}
-
-/*
- * Does an generic ldap_compare operation. It accepts a cache that it will use
- * to lookup the compare in the cache. We cache two kinds of compares 
- * (require group compares) and (require user compares). Each compare has a different
- * cache node: require group includes the DN; require user does not because the
- * require user cache is owned by the 
- *
- */
-int util_ldap_cache_compare(request_rec *r, util_ldap_connection_t *ldc,
-                          const char *url, const char *dn,
-                          const char *attrib, const char *value)
-{
-    int result = 0;
-    util_url_node_t *curl; 
-    util_url_node_t curnode;
-    util_compare_node_t *compare_nodep;
-    util_compare_node_t the_compare_node;
-    apr_time_t curtime;
-    int failures = 0;
-
-    util_ldap_state_t *st = 
-        (util_ldap_state_t *)ap_get_module_config(r->server->module_config,
-        &ldap_module);
-
-
-    /* read lock this function */
-    if (!util_ldap_cache_lock) {
-        apr_thread_rwlock_create(&util_ldap_cache_lock, st->pool);
-    }
-
-    /* get cache entry (or create one) */
-    apr_thread_rwlock_wrlock(util_ldap_cache_lock);
-    curnode.url = url;
-    curl = util_ald_cache_fetch(util_ldap_cache, &curnode);
-    if (curl == NULL) {
-        curl = util_ald_create_caches(st, url);
-    }
-    apr_thread_rwlock_unlock(util_ldap_cache_lock);
-
-    /* make a comparison to the cache */
-    apr_thread_rwlock_rdlock(util_ldap_cache_lock);
-    curtime = apr_time_now();
-
-    the_compare_node.dn = (char *)dn;
-    the_compare_node.attrib = (char *)attrib;
-    the_compare_node.value = (char *)value;
-    the_compare_node.result = 0;
-
-    compare_nodep = util_ald_cache_fetch(curl->compare_cache, &the_compare_node);
-
-    if (compare_nodep != NULL) {
-        /* found it... */
-        if (curtime - compare_nodep->lastcompare > st->compare_cache_ttl) {
-            /* ...but it is too old */
-            util_ald_cache_remove(curl->compare_cache, compare_nodep);
-        }
-        else {
-            /* ...and it is good */
-            /* unlock this read lock */
-            apr_thread_rwlock_unlock(util_ldap_cache_lock);
-            if (LDAP_COMPARE_TRUE == compare_nodep->result) {
-                ldc->reason = "Comparison true (cached)";
-                return compare_nodep->result;
-            }
-            else if (LDAP_COMPARE_FALSE == compare_nodep->result) {
-                ldc->reason = "Comparison false (cached)";
-                return compare_nodep->result;
-            }
-            else if (LDAP_NO_SUCH_ATTRIBUTE == compare_nodep->result) {
-                ldc->reason = "Comparison no such attribute (cached)";
-                return compare_nodep->result;
-            }
-            else {
-                ldc->reason = "Comparison undefined (cached)";
-                return compare_nodep->result;
-            }
-        }
-    }
-    /* unlock this read lock */
-    apr_thread_rwlock_unlock(util_ldap_cache_lock);
-    
-
-start_over:
-    if (failures++ > 10) {
-        /* too many failures */
-        return result;
-    }
-    if (LDAP_SUCCESS != (result = util_ldap_connection_open(ldc))) {
-        /* connect failed */
-        return result;
-    }
-
-    if ((result = ldap_compare_s(ldc->ldap, const_cast(dn), 
-			         const_cast(attrib), const_cast(value)))
-        == LDAP_SERVER_DOWN) { 
-        /* connection failed - try again */
-        util_ldap_connection_close(ldc);
-        ldc->reason = "ldap_compare_s() failed with server down";
-        goto start_over;
-    }
-
-    ldc->reason = "Comparison complete";
-    if ((LDAP_COMPARE_TRUE == result) || 
-        (LDAP_COMPARE_FALSE == result) ||
-        (LDAP_NO_SUCH_ATTRIBUTE == result)) {
-        /* compare completed; caching result */
-        apr_thread_rwlock_wrlock(util_ldap_cache_lock);
-        the_compare_node.lastcompare = curtime;
-        the_compare_node.result = result;
-        util_ald_cache_insert(curl->compare_cache, &the_compare_node);
-        apr_thread_rwlock_unlock(util_ldap_cache_lock);
-        if (LDAP_COMPARE_TRUE == result) {
-            ldc->reason = "Comparison true (adding to cache)";
-            return LDAP_COMPARE_TRUE;
-        }
-        else if (LDAP_COMPARE_FALSE == result) {
-            ldc->reason = "Comparison false (adding to cache)";
-            return LDAP_COMPARE_FALSE;
-        }
-        else {
-            ldc->reason = "Comparison no such attribute (adding to cache)";
-            return LDAP_NO_SUCH_ATTRIBUTE;
-        }
-    }
-    return result;
-}
-
-int util_ldap_cache_checkuserid(request_rec *r, util_ldap_connection_t *ldc,
-                              const char *url, const char *basedn, int scope, char **attrs,
-                              const char *filter, const char *bindpw, const char **binddn,
-                              const char ***retvals)
-{
-    const char **vals = NULL;
-    int result = 0;
-    LDAPMessage *res, *entry;
-    char *dn;
-    int count;
-    int failures = 0;
-    util_url_node_t *curl;		/* Cached URL node */
-    util_url_node_t curnode;
-    util_search_node_t *search_nodep;	/* Cached search node */
-    util_search_node_t the_search_node;
-    apr_time_t curtime;
-
-    util_ldap_state_t *st = 
-        (util_ldap_state_t *)ap_get_module_config(r->server->module_config,
-        &ldap_module);
-
-    /* read lock this function */
-    if (!util_ldap_cache_lock) {
-        apr_thread_rwlock_create(&util_ldap_cache_lock, st->pool);
-    }
-
-    /* Get the cache node for this url */
-    apr_thread_rwlock_wrlock(util_ldap_cache_lock);
-    curnode.url = url;
-    curl = (util_url_node_t *)util_ald_cache_fetch(util_ldap_cache, &curnode);
-    if (curl == NULL) {
-        curl = util_ald_create_caches(st, url);
-    }
-    apr_thread_rwlock_unlock(util_ldap_cache_lock);
-
-    apr_thread_rwlock_rdlock(util_ldap_cache_lock);
-    the_search_node.username = filter;
-    search_nodep = util_ald_cache_fetch(curl->search_cache, &the_search_node);
-    if (search_nodep != NULL && search_nodep->bindpw) {
-
-        /* found entry in search cache... */
-        curtime = apr_time_now();
-
-        /*
-         * Remove this item from the cache if its expired, or if the 
-         * sent password doesn't match the storepassword.
-         */
-        if ((curtime - search_nodep->lastbind) > st->search_cache_ttl) {
-            /* ...but entry is too old */
-            util_ald_cache_remove(curl->search_cache, search_nodep);
-        }
-        else if (strcmp(search_nodep->bindpw, bindpw) != 0) {
-	    /* ...but cached password doesn't match sent password */
-            util_ald_cache_remove(curl->search_cache, search_nodep);
-        }
-        else {
-            /* ...and entry is valid */
-            *binddn = search_nodep->dn;
-            *retvals = search_nodep->vals;
-            apr_thread_rwlock_unlock(util_ldap_cache_lock);
-            ldc->reason = "Authentication successful (cached)";
-            return LDAP_SUCCESS;
-        }
-    }
-    /* unlock this read lock */
-    apr_thread_rwlock_unlock(util_ldap_cache_lock);
-
-
-    /*	
-     * At this point, there is no valid cached search, so lets do the search.
-     */
-
-    /*
-     * If any LDAP operation fails due to LDAP_SERVER_DOWN, control returns here.
-     */
-start_over:
-    if (failures++ > 10) {
-        return result;
-    }
-    if (LDAP_SUCCESS != (result = util_ldap_connection_open(ldc))) {
-        return result;
-    }
-
-    /* try do the search */
-    if ((result = ldap_search_ext_s(ldc->ldap,
-				    basedn, scope, 
-				    filter, attrs, 0, 
-				    NULL, NULL, NULL, -1, &res)) == LDAP_SERVER_DOWN) {
-        ldc->reason = "ldap_search_ext_s() for user failed with server down";
-        goto start_over;
-    }
-
-    /* if there is an error (including LDAP_NO_SUCH_OBJECT) return now */
-    if (result != LDAP_SUCCESS) {
-        ldc->reason = "ldap_search_ext_s() for user failed";
-        return result;
-    }
-
-    /* 
-     * We should have found exactly one entry; to find a different
-     * number is an error.
-     */
-    count = ldap_count_entries(ldc->ldap, res);
-    if (count != 1) {
-        ldap_msgfree(res);
-        ldc->reason = "User is not unique (search found two or more matches)";
-        return LDAP_NO_SUCH_OBJECT;
-    }
-
-    entry = ldap_first_entry(ldc->ldap, res);
-
-    /* Grab the dn, copy it into the pool, and free it again */
-    dn = ldap_get_dn(ldc->ldap, entry);
-    *binddn = apr_pstrdup(st->pool, dn);
-    ldap_memfree(dn);
-
-    /* 
-     * A bind to the server with an empty password always succeeds, so
-     * we check to ensure that the password is not empty. This implies
-     * that users who actually do have empty passwords will never be
-     * able to authenticate with this module. I don't see this as a big
-     * problem.
-     */
-    if (strlen(bindpw) <= 0) {
-        ldap_msgfree(res);
-        ldc->reason = "Empty password not allowed";
-        return LDAP_INVALID_CREDENTIALS;
-    }
-
-    /* 
-     * Attempt to bind with the retrieved dn and the password. If the bind
-     * fails, it means that the password is wrong (the dn obviously
-     * exists, since we just retrieved it)
-     */
-    if ((result = 
-         ldap_simple_bind_s(ldc->ldap, *binddn, bindpw)) == 
-         LDAP_SERVER_DOWN) {
-        ldc->reason = "ldap_simple_bind_s() to check user credentials failed with server down";
-        goto start_over;
-    }
-
-    /* failure? if so - return */
-    if (result != LDAP_SUCCESS) {
-        ldc->reason = "ldap_simple_bind_s() to check user credentials failed";
-        return result;
-    }
-
-    /*
-     * Get values for the provided attributes.
-     */
-    if (attrs) {
-        int k = 0;
-        int i = 0;
-        while (attrs[k++]);
-        vals = apr_pcalloc(r->pool, sizeof(char *) * (k+1));
-        while (attrs[i]) {
-            char **values;
-            int j = 0;
-            char *str = NULL;
-            /* get values */
-            values = ldap_get_values(ldc->ldap, entry, attrs[i]);
-            while (values && values[j]) {
-                str = str ? apr_pstrcat(r->pool, str, "; ", values[j], NULL) : apr_pstrdup(r->pool, values[j]);
-                j++;
-            }
-            vals[i] = str;
-            i++;
-        }
-        *retvals = vals;
-    }
-
-    /* 		
-     * Add the new username to the search cache.
-     */
-    apr_thread_rwlock_wrlock(util_ldap_cache_lock);
-    the_search_node.username = filter;
-    the_search_node.dn = *binddn;
-    the_search_node.bindpw = bindpw;
-    the_search_node.lastbind = apr_time_now();
-    the_search_node.vals = vals;
-    util_ald_cache_insert(curl->search_cache, &the_search_node);
-    ldap_msgfree(res);
-    apr_thread_rwlock_unlock(util_ldap_cache_lock);
-
-    ldc->reason = "Authentication successful";
-    return LDAP_SUCCESS;
-}
-
-#endif /* APU_HAS_LDAP */
-
-
-
-/* ---------------------------------------- */
-/* config directives */
-
-
-static const char *util_ldap_set_cache_bytes(cmd_parms *cmd, void *dummy, const char *bytes)
-{
-    util_ldap_state_t *st = 
-        (util_ldap_state_t *)ap_get_module_config(cmd->server->module_config, 
-						  &ldap_module);
-
-    st->cache_bytes = atol(bytes);
-
-    ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, cmd->server, 
-                      "[%d] ldap cache: Setting shared memory cache size to %d bytes.", 
-                      getpid(), st->cache_bytes);
-
-    return NULL;
-}
-
-static const char *util_ldap_set_cache_ttl(cmd_parms *cmd, void *dummy, const char *ttl)
-{
-    util_ldap_state_t *st = 
-        (util_ldap_state_t *)ap_get_module_config(cmd->server->module_config, 
-						  &ldap_module);
-
-    st->search_cache_ttl = atol(ttl) * 1000000;
-
-    ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, cmd->server, 
-                      "[%d] ldap cache: Setting cache TTL to %ld microseconds.", 
-                      getpid(), st->search_cache_ttl);
-
-    return NULL;
-}
-
-static const char *util_ldap_set_cache_entries(cmd_parms *cmd, void *dummy, const char *size)
-{
-    util_ldap_state_t *st = 
-        (util_ldap_state_t *)ap_get_module_config(cmd->server->module_config, 
-						  &ldap_module);
-
-
-    st->search_cache_size = atol(size);
-    if (st->search_cache_size < 0) {
-        st->search_cache_size = 0;
-    }
-
-    ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, cmd->server, 
-                      "[%d] ldap cache: Setting search cache size to %ld entries.", 
-                      getpid(), st->search_cache_size);
-
-    return NULL;
-}
-
-static const char *util_ldap_set_opcache_ttl(cmd_parms *cmd, void *dummy, const char *ttl)
-{
-    util_ldap_state_t *st = 
-        (util_ldap_state_t *)ap_get_module_config(cmd->server->module_config, 
-						  &ldap_module);
-
-    st->compare_cache_ttl = atol(ttl) * 1000000;
-
-    ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, cmd->server, 
-                      "[%d] ldap cache: Setting operation cache TTL to %ld microseconds.", 
-                      getpid(), st->compare_cache_ttl);
-
-    return NULL;
-}
-
-static const char *util_ldap_set_opcache_entries(cmd_parms *cmd, void *dummy, const char *size)
-{
-    util_ldap_state_t *st = 
-        (util_ldap_state_t *)ap_get_module_config(cmd->server->module_config, 
-						  &ldap_module);
-
-    st->compare_cache_size = atol(size);
-    if (st->compare_cache_size < 0) {
-        st->compare_cache_size = 0;
-    }
-
-    ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, cmd->server, 
-                      "[%d] ldap cache: Setting operation cache size to %ld entries.", 
-                      getpid(), st->compare_cache_size);
-
-    return NULL;
-}
-
-#ifdef APU_HAS_LDAPSSL_CLIENT_INIT
-static const char *util_ldap_set_certdbpath(cmd_parms *cmd, void *dummy, const char *path)
-{
-    util_ldap_state_t *st = 
-        (util_ldap_state_t *)ap_get_module_config(cmd->server->module_config, 
-						  &ldap_module);
-
-    ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, cmd->server, 
-                      "[%d] ldap cache: Setting LDAP SSL client certificate dbpath to %s.", 
-                      getpid(), path);
-
-    st->have_certdb = 1;
-    if (ldapssl_client_init(path, NULL) != 0) {
-        return "Could not initialize SSL client";
-    }
-    else {
-        return NULL;
-    }
-}
-#endif
-
-void *util_ldap_create_config(apr_pool_t *p, server_rec *s)
-{
-    util_ldap_state_t *st = 
-        (util_ldap_state_t *)apr_pcalloc(p, sizeof(util_ldap_state_t));
-
-    st->pool = p;
-
-    st->cache_bytes = 100000;
-    st->search_cache_ttl = 600000000;
-    st->search_cache_size = 1024;
-    st->compare_cache_ttl = 600000000;
-    st->compare_cache_size = 1024;
-
-    st->connections = NULL;
-#ifdef APU_HAS_LDAP_NETSCAPE_SSL
-    st->have_certdb = 0;
-#endif
-
-    return st;
-}
-
-static void util_ldap_init_module(apr_pool_t *pool, server_rec *s)
-{
-    util_ldap_state_t *st = 
-        (util_ldap_state_t *)ap_get_module_config(s->module_config, 
-						  &ldap_module);
-
-    apr_status_t result = util_ldap_cache_init(pool, st->cache_bytes);
-    char buf[MAX_STRING_LEN];
-
-    apr_strerror(result, buf, sizeof(buf));
-    ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, result, s, 
-                      "[%d] ldap cache init: %s", 
-                      getpid(), buf);
-}
-
-
-command_rec util_ldap_cmds[] = {
-    AP_INIT_TAKE1("LDAPSharedCacheSize", util_ldap_set_cache_bytes, NULL, RSRC_CONF,
-                  "Sets the size of the shared memory cache in bytes. "
-                  "Zero means disable the shared memory cache. Defaults to 100KB."),
-
-    AP_INIT_TAKE1("LDAPCacheEntries", util_ldap_set_cache_entries, NULL, RSRC_CONF,
-                  "Sets the maximum number of entries that are possible in the LDAP "
-                  "search cache. "
-                  "Zero means no limit; -1 disables the cache. Defaults to 1024 entries."),
-
-    AP_INIT_TAKE1("LDAPCacheTTL", util_ldap_set_cache_ttl, NULL, RSRC_CONF,
-                  "Sets the maximum time (in seconds) that an item can be cached in the LDAP "
-                  "search cache. Zero means no limit. Defaults to 600 seconds (10 minutes)."),
-
-    AP_INIT_TAKE1("LDAPOpCacheEntries", util_ldap_set_opcache_entries, NULL, RSRC_CONF,
-                  "Sets the maximum number of entries that are possible in the LDAP "
-                  "compare cache. "
-                  "Zero means no limit; -1 disables the cache. Defaults to 1024 entries."),
-
-    AP_INIT_TAKE1("LDAPOpCacheTTL", util_ldap_set_opcache_ttl, NULL, RSRC_CONF,
-                  "Sets the maximum time (in seconds) that an item is cached in the LDAP "
-                  "operation cache. Zero means no limit. Defaults to 600 seconds (10 minutes)."),
-
-#ifdef APU_HAS_LDAPSSL_CLIENT_INIT
-    AP_INIT_TAKE1("LDAPCertDBPath", util_ldap_set_certdbpath, NULL, RSRC_CONF,
-                  "Specifies the file containing Certificate Authority certificates "
-                  "for validating secure LDAP server certificates. This file must be the "
-                  "cert7.db database used by Netscape Communicator"),
-#endif
-
-    {NULL}
-};
-
-static void util_ldap_register_hooks(apr_pool_t *p)
-{
-    ap_hook_child_init(util_ldap_init_module, NULL, NULL, APR_HOOK_MIDDLE);
-    ap_hook_handler(util_ldap_handler, NULL, NULL, APR_HOOK_MIDDLE);
-}
-
-module ldap_module = {
-   STANDARD20_MODULE_STUFF,
-   NULL,				/* dir config creater */
-   NULL,				/* dir merger --- default is to override */
-   util_ldap_create_config,		/* server config */
-   NULL,				/* merge server config */
-   util_ldap_cmds,			/* command table */
-   util_ldap_register_hooks,		/* set up request processing hooks */
-};
diff --git a/modules/experimental/util_ldap.def b/modules/experimental/util_ldap.def
deleted file mode 100644
index d1fac89..0000000
--- a/modules/experimental/util_ldap.def
+++ /dev/null
@@ -1,6 +0,0 @@
-EXPORT  ldap_module
-EXPORT  util_ldap_connection_find
-EXPORT  util_ldap_connection_close
-EXPORT  util_ldap_cache_checkuserid
-EXPORT  util_ldap_cache_compare
-EXPORT  util_ldap_cache_comparedn
diff --git a/modules/experimental/util_ldap_cache.c b/modules/experimental/util_ldap_cache.c
deleted file mode 100644
index 9d9844d..0000000
--- a/modules/experimental/util_ldap_cache.c
+++ /dev/null
@@ -1,309 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-/*
- * util_ldap_cache.c: LDAP cache things
- * 
- * Original code from auth_ldap module for Apache v1.3:
- * Copyright 1998, 1999 Enbridge Pipelines Inc. 
- * Copyright 1999-2001 Dave Carrigan
- */
-
-#include <apr_ldap.h>
-#include "util_ldap.h"
-#include "util_ldap_cache.h"
-
-#ifdef APU_HAS_LDAP
-
-
-
-
-/* ------------------------------------------------------------------ */
-
-unsigned long util_ldap_url_node_hash(void *n)
-{
-    util_url_node_t *node = (util_url_node_t *)n;
-    return util_ald_hash_string(1, node->url);
-}
-
-int util_ldap_url_node_compare(void *a, void *b)
-{
-    util_url_node_t *na = (util_url_node_t *)a;
-    util_url_node_t *nb = (util_url_node_t *)b;
-
-    return(strcmp(na->url, nb->url) == 0);
-}
-
-void *util_ldap_url_node_copy(void *c)
-{
-    util_url_node_t *n = (util_url_node_t *)c;
-    util_url_node_t *node = (util_url_node_t *)util_ald_alloc(sizeof(util_url_node_t));
-
-    if (node) {
-        if (!(node->url = util_ald_strdup(n->url))) {
-            util_ald_free(node->url);
-            return NULL;
-        }
-        node->search_cache = n->search_cache;
-        node->compare_cache = n->compare_cache;
-        node->dn_compare_cache = n->dn_compare_cache;
-        return node;
-    }
-    else {
-        return NULL;
-    }
-}
-
-void util_ldap_url_node_free(void *n)
-{
-    util_url_node_t *node = (util_url_node_t *)n;
-
-    util_ald_free(node->url);
-    util_ald_destroy_cache(node->search_cache);
-    util_ald_destroy_cache(node->compare_cache);
-    util_ald_destroy_cache(node->dn_compare_cache);
-    util_ald_free(node);
-}
-
-/* ------------------------------------------------------------------ */
-
-/* Cache functions for search nodes */
-unsigned long util_ldap_search_node_hash(void *n)
-{
-    util_search_node_t *node = (util_search_node_t *)n;
-    return util_ald_hash_string(1, ((util_search_node_t *)(node))->username);
-}
-
-int util_ldap_search_node_compare(void *a, void *b)
-{
-    return(strcmp(((util_search_node_t *)a)->username,
-		  ((util_search_node_t *)b)->username) == 0);
-}
-
-void *util_ldap_search_node_copy(void *c)
-{
-    util_search_node_t *node = (util_search_node_t *)c;
-    util_search_node_t *newnode = util_ald_alloc(sizeof(util_search_node_t));
-
-    /* safety check */
-    if (newnode) {
-
-        /* copy vals */
-        if (node->vals) {
-            int k = 0;
-            int i = 0;
-            while (node->vals[k++]);
-            if (!(newnode->vals = util_ald_alloc(sizeof(char *) * (k+1)))) {
-                util_ldap_search_node_free(newnode);
-                return NULL;
-            }
-            while (node->vals[i]) {
-                if (!(newnode->vals[i] = util_ald_strdup(node->vals[i]))) {
-                    util_ldap_search_node_free(newnode);
-                    return NULL;
-                }
-                i++;
-            }
-        }
-        else {
-            newnode->vals = NULL;
-        }
-        if (!(newnode->username = util_ald_strdup(node->username)) ||
-            !(newnode->dn = util_ald_strdup(node->dn)) ||
-            !(newnode->bindpw = util_ald_strdup(node->bindpw)) ) {
-            util_ldap_search_node_free(newnode);
-            return NULL;
-        }
-        newnode->lastbind = node->lastbind;
-
-    }
-    return (void *)newnode;
-}
-
-void util_ldap_search_node_free(void *n)
-{
-    int i = 0;
-    util_search_node_t *node = (util_search_node_t *)n;
-    if (node->vals) {
-        while (node->vals[i]) {
-            util_ald_free(node->vals[i++]);
-        }
-        util_ald_free(node->vals);
-    }
-    util_ald_free(node->username);
-    util_ald_free(node->dn);
-    util_ald_free(node->bindpw);
-    util_ald_free(node);
-}
-
-/* ------------------------------------------------------------------ */
-
-unsigned long util_ldap_compare_node_hash(void *n)
-{
-    util_compare_node_t *node = (util_compare_node_t *)n;
-    return util_ald_hash_string(3, node->dn, node->attrib, node->value);
-}
-
-int util_ldap_compare_node_compare(void *a, void *b)
-{
-    util_compare_node_t *na = (util_compare_node_t *)a;
-    util_compare_node_t *nb = (util_compare_node_t *)b;
-    return (strcmp(na->dn, nb->dn) == 0 &&
-	    strcmp(na->attrib, nb->attrib) == 0 &&
-	    strcmp(na->value, nb->value) == 0);
-}
-
-void *util_ldap_compare_node_copy(void *c)
-{
-    util_compare_node_t *n = (util_compare_node_t *)c;
-    util_compare_node_t *node = (util_compare_node_t *)util_ald_alloc(sizeof(util_compare_node_t));
-
-    if (node) {
-        if (!(node->dn = util_ald_strdup(n->dn)) ||
-            !(node->attrib = util_ald_strdup(n->attrib)) ||
-            !(node->value = util_ald_strdup(n->value))) {
-            util_ldap_compare_node_free(node);
-            return NULL;
-        }
-        node->lastcompare = n->lastcompare;
-        node->result = n->result;
-        return node;
-    }
-    else {
-        return NULL;
-    }
-}
-
-void util_ldap_compare_node_free(void *n)
-{
-    util_compare_node_t *node = (util_compare_node_t *)n;
-    util_ald_free(node->dn);
-    util_ald_free(node->attrib);
-    util_ald_free(node->value);
-    util_ald_free(node);
-}
-
-/* ------------------------------------------------------------------ */
-
-unsigned long util_ldap_dn_compare_node_hash(void *n)
-{
-    return util_ald_hash_string(1, ((util_dn_compare_node_t *)n)->reqdn);
-}
-
-int util_ldap_dn_compare_node_compare(void *a, void *b)
-{
-    return (strcmp(((util_dn_compare_node_t *)a)->reqdn,
-		   ((util_dn_compare_node_t *)b)->reqdn) == 0);
-}
-
-void *util_ldap_dn_compare_node_copy(void *c)
-{
-    util_dn_compare_node_t *n = (util_dn_compare_node_t *)c;
-    util_dn_compare_node_t *node = (util_dn_compare_node_t *)util_ald_alloc(sizeof(util_dn_compare_node_t));
-    if (node) {
-        if (!(node->reqdn = util_ald_strdup(n->reqdn)) ||
-            !(node->dn = util_ald_strdup(n->dn))) {
-            util_ldap_dn_compare_node_free(node);
-            return NULL;
-        }
-        return node;
-    }
-    else {
-        return NULL;
-    }
-}
-
-void util_ldap_dn_compare_node_free(void *n)
-{
-    util_dn_compare_node_t *node = (util_dn_compare_node_t *)n;
-    util_ald_free(node->reqdn);
-    util_ald_free(node->dn);
-    util_ald_free(node);
-}
-
-
-/* ------------------------------------------------------------------ */
-apr_status_t util_ldap_cache_child_kill(void *data);
-apr_status_t util_ldap_cache_module_kill(void *data);
-
-apr_status_t util_ldap_cache_module_kill(void *data)
-{
-#if APR_HAS_SHARED_MEMORY
-    if (util_ldap_shm != NULL) {
-        apr_status_t result = apr_shm_destroy(util_ldap_shm);
-        util_ldap_shm = NULL;
-        return result;
-    }
-#endif
-    return APR_SUCCESS;
-}
-
-apr_status_t util_ldap_cache_init(apr_pool_t *pool, apr_size_t reqsize)
-{
-    apr_status_t result = APR_SUCCESS;
-    apr_pool_cleanup_register(pool, NULL, util_ldap_cache_module_kill, apr_pool_cleanup_null);
-
-#if APR_HAS_SHARED_MEMORY
-    result = apr_shm_init(&util_ldap_shm, reqsize, "/tmp/ldap_cache", pool);
-#endif
-    util_ldap_cache = util_ald_create_cache(50,
-				     util_ldap_url_node_hash,
-				     util_ldap_url_node_compare,
-				     util_ldap_url_node_copy,
-				     util_ldap_url_node_free);
-    return result;
-}
-
-
-#endif /* APU_HAS_LDAP */
diff --git a/modules/experimental/util_ldap_cache.h b/modules/experimental/util_ldap_cache.h
deleted file mode 100644
index 8e71799..0000000
--- a/modules/experimental/util_ldap_cache.h
+++ /dev/null
@@ -1,214 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-
-#ifndef APU_LDAP_CACHE_H
-#define APU_LDAP_CACHE_H
-
-/*
- * This switches LDAP support on or off.
- */
-
-/* this whole thing disappears if LDAP is not enabled */
-#ifdef APU_HAS_LDAP
-
-
-/*
- * LDAP Cache Manager
- */
-
-#include <apr_shm.h>
-
-typedef struct util_cache_node_t {
-    void *payload;		/* Pointer to the payload */
-    time_t add_time;		/* Time node was added to cache */
-    struct util_cache_node_t *next;
-} util_cache_node_t;
-
-typedef struct util_ald_cache_t {
-    unsigned long size;		/* Size of cache array */
-    unsigned long maxentries;	/* Maximum number of cache entries */
-    unsigned long numentries;	/* Current number of cache entries */
-    unsigned long fullmark;	/* Used to keep track of when cache becomes 3/4 full */
-    time_t marktime;		/* Time that the cache became 3/4 full */
-    unsigned long (*hash)(void *);  /* Func to hash the payload */
-    int (*compare)(void *, void *); /* Func to compare two payloads */
-    void * (*copy)(void *);	/* Func to alloc mem and copy payload to new mem */
-    void (*free)(void *);		/* Func to free mem used by the payload */
-    util_cache_node_t **nodes;
-
-    unsigned long numpurges;	/* No. of times the cache has been purged */
-    double avg_purgetime;		/* Average time to purge the cache */
-    time_t last_purge;		/* Time of the last purge */
-    unsigned long npurged;	/* Number of elements purged in last purge. This is not
-				   obvious: it won't be 3/4 the size of the cache if 
-				   there were a lot of expired entries. */
-
-    unsigned long fetches;	/* Number of fetches */
-    unsigned long hits;		/* Number of cache hits */
-    unsigned long inserts;	/* Number of inserts */
-    unsigned long removes;	/* Number of removes */
-} util_ald_cache_t;
-
-#if APR_HAS_SHARED_MEMORY
-apr_shmem_t *util_ldap_shm;
-#endif
-util_ald_cache_t *util_ldap_cache;
-apr_thread_rwlock_t *util_ldap_cache_lock;
-
-#ifndef WIN32
-#define ALD_MM_FILE_MODE ( S_IRUSR|S_IWUSR )
-#else
-#define ALD_MM_FILE_MODE ( _S_IREAD|_S_IWRITE )
-#endif
-
-
-/*
- * LDAP Cache
- */
-
-/*
- * Maintain a cache of LDAP URLs that the server handles. Each node in
- * the cache contains the search cache for that URL, and a compare cache
- * for the URL. The compare cash is populated when doing require group
- * compares.
- */
-typedef struct util_url_node_t {
-    const char *url;
-    util_ald_cache_t *search_cache;
-    util_ald_cache_t *compare_cache;
-    util_ald_cache_t *dn_compare_cache;
-} util_url_node_t;
-
-/*
- * We cache every successful search and bind operation, using the username 
- * as the key. Each node in the cache contains the returned DN, plus the 
- * password used to bind.
- */
-typedef struct util_search_node_t {
-    const char *username;		/* Cache key */
-    const char *dn;			/* DN returned from search */
-    const char *bindpw;			/* The most recently used bind password; 
-					   NULL if the bind failed */
-    apr_time_t lastbind;		/* Time of last successful bind */
-    const char **vals;			/* Values of queried attributes */
-} util_search_node_t;
-
-/*
- * We cache every successful compare operation, using the DN, attrib, and
- * value as the key. 
- */
-typedef struct util_compare_node_t {
-    const char *dn;			/* DN, attrib and value combine to be the key */
-    const char *attrib;			
-    const char *value;
-    apr_time_t lastcompare;
-    int result;
-} util_compare_node_t;
-
-/*
- * We cache every successful compare dn operation, using the dn in the require
- * statement and the dn fetched based on the client-provided username.
- */
-typedef struct util_dn_compare_node_t {
-    const char *reqdn;		/* The DN in the require dn statement */
-    const char *dn;			/* The DN found in the search */
-} util_dn_compare_node_t;
-
-
-/*
- * Function prototypes for LDAP cache
- */
-
-/* util_ldap_cache.c */
-unsigned long util_ldap_url_node_hash(void *n);
-int util_ldap_url_node_compare(void *a, void *b);
-void *util_ldap_url_node_copy(void *c);
-void util_ldap_url_node_free(void *n);
-unsigned long util_ldap_search_node_hash(void *n);
-int util_ldap_search_node_compare(void *a, void *b);
-void *util_ldap_search_node_copy(void *c);
-void util_ldap_search_node_free(void *n);
-unsigned long util_ldap_compare_node_hash(void *n);
-int util_ldap_compare_node_compare(void *a, void *b);
-void *util_ldap_compare_node_copy(void *c);
-void util_ldap_compare_node_free(void *n);
-unsigned long util_ldap_dn_compare_node_hash(void *n);
-int util_ldap_dn_compare_node_compare(void *a, void *b);
-void *util_ldap_dn_compare_node_copy(void *c);
-void util_ldap_dn_compare_node_free(void *n);
-
-
-/* util_ldap_cache_mgr.c */
-
-void util_ald_free(const void *ptr);
-void *util_ald_alloc(unsigned long size);
-const char *util_ald_strdup(const char *s);
-unsigned long util_ald_hash_string(int nstr, ...);
-void util_ald_cache_purge(util_ald_cache_t *cache);
-util_url_node_t *util_ald_create_caches(util_ldap_state_t *s, const char *url);
-util_ald_cache_t *util_ald_create_cache(unsigned long maxentries,
-                                unsigned long (*hashfunc)(void *), 
-                                int (*comparefunc)(void *, void *),
-                                void * (*copyfunc)(void *),
-                                void (*freefunc)(void *));
-void util_ald_destroy_cache(util_ald_cache_t *cache);
-void *util_ald_cache_fetch(util_ald_cache_t *cache, void *payload);
-void util_ald_cache_insert(util_ald_cache_t *cache, void *payload);
-void util_ald_cache_remove(util_ald_cache_t *cache, void *payload);
-char *util_ald_cache_display_stats(apr_pool_t *p, util_ald_cache_t *cache,
-                                 char *name);
-
-#endif /* APU_HAS_LDAP */
-#endif /* APU_LDAP_CACHE_H */
diff --git a/modules/experimental/util_ldap_cache_mgr.c b/modules/experimental/util_ldap_cache_mgr.c
deleted file mode 100644
index 49eece89..0000000
--- a/modules/experimental/util_ldap_cache_mgr.c
+++ /dev/null
@@ -1,537 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-/*
- * util_ldap_cache_mgr.c: LDAP cache manager things
- * 
- * Original code from auth_ldap module for Apache v1.3:
- * Copyright 1998, 1999 Enbridge Pipelines Inc. 
- * Copyright 1999-2001 Dave Carrigan
- */
-
-#include <apr_ldap.h>
-#include "util_ldap.h"
-#include "util_ldap_cache.h"
-#include <apr_strings.h>
-
-#ifdef APU_HAS_LDAP
-
-/* only here until strdup is gone */
-#include <string.h>
-
-/* here till malloc is gone */
-#include <stdlib.h>
-
-static const int primes[] =
-{
-  11,
-  19,
-  37,
-  73,
-  109,
-  163,
-  251,
-  367,
-  557,
-  823,
-  1237,
-  1861,
-  2777,
-  4177,
-  6247,
-  9371,
-  14057,
-  21089,
-  31627,
-  47431,
-  71143,
-  106721,
-  160073,
-  240101,
-  360163,
-  540217,
-  810343,
-  1215497,
-  1823231,
-  2734867,
-  4102283,
-  6153409,
-  9230113,
-  13845163,
-  0
-};
-
-void util_ald_free(const void *ptr)
-{
-#if APR_HAS_SHARED_MEMORY
-    if (util_ldap_shm) {
-        if (ptr)
-            apr_shm_free(util_ldap_shm, (void *)ptr);
-    } else {
-        if (ptr)
-            free((void *)ptr);
-    }
-#else
-    if (ptr)
-        free((void *)ptr);
-#endif
-}
-
-void *util_ald_alloc(unsigned long size)
-{
-    if (0 == size)
-        return NULL;
-#if APR_HAS_SHARED_MEMORY
-    if (util_ldap_shm) {
-        return (void *)apr_shm_calloc(util_ldap_shm, size);
-    } else {
-        return (void *)calloc(sizeof(char), size);
-    }
-#else
-    return (void *)calloc(sizeof(char), size);
-#endif
-}
-
-const char *util_ald_strdup(const char *s)
-{
-#if APR_HAS_SHARED_MEMORY
-    if (util_ldap_shm) {
-        char *buf = apr_shm_malloc(util_ldap_shm, strlen(s)+1);
-        if (buf) {
-            strcpy(buf, s);
-            return buf;
-        }
-        else {
-            return NULL;
-        }
-    } else {
-        return strdup(s);
-    }
-#else
-    return strdup(s);
-#endif
-}
-
-
-/*
- * Computes the hash on a set of strings. The first argument is the number
- * of strings to hash, the rest of the args are strings. 
- * Algorithm taken from glibc.
- */
-unsigned long util_ald_hash_string(int nstr, ...)
-{
-    int i;
-    va_list args;
-    unsigned long h=0, g;
-    char *str, *p;
-  
-    va_start(args, nstr);
-    for (i=0; i < nstr; ++i) {
-        str = va_arg(args, char *);
-        for (p = str; *p; ++p) {
-            h = ( h << 4 ) + *p;
-            if ( ( g = h & 0xf0000000 ) ) {
-	        h = h ^ (g >> 24);
-	        h = h ^ g;
-            }
-        }
-    }
-    va_end(args);
-
-    return h;
-}
-
-
-/*
-  Purges a cache that has gotten full. We keep track of the time that we
-  added the entry that made the cache 3/4 full, then delete all entries
-  that were added before that time. It's pretty simplistic, but time to
-  purge is only O(n), which is more important.
-*/
-void util_ald_cache_purge(util_ald_cache_t *cache)
-{
-    int i;
-    util_cache_node_t *p, *q;
-    apr_time_t t;
-
-    if (!cache)
-        return;
-  
-    cache->last_purge = apr_time_now();
-    cache->npurged = 0;
-    cache->numpurges++;
-
-    for (i=0; i < cache->size; ++i) {
-        p = cache->nodes[i];
-        while (p != NULL) {
-            if (p->add_time < cache->marktime) {
-	        q = p->next;
-	        (*cache->free)(p->payload);
-	        util_ald_free(p);
-	        cache->numentries--;
-	        cache->npurged++;
-	        p = q;
-            }
-            else {
-	        p = p->next;
-            }
-        }
-    }
-
-    t = apr_time_now();
-    cache->avg_purgetime = 
-         ((t - cache->last_purge) + (cache->avg_purgetime * (cache->numpurges-1))) / 
-         cache->numpurges;
-}
-
-
-/*
- * create caches
- */
-util_url_node_t *util_ald_create_caches(util_ldap_state_t *st, const char *url)
-{
-    util_url_node_t *curl = NULL;
-    util_ald_cache_t *search_cache;
-    util_ald_cache_t *compare_cache;
-    util_ald_cache_t *dn_compare_cache;
-
-    /* create the three caches */
-    search_cache = util_ald_create_cache(st->search_cache_size,
-					  util_ldap_search_node_hash,
-					  util_ldap_search_node_compare,
-					  util_ldap_search_node_copy,
-					  util_ldap_search_node_free);
-    compare_cache = util_ald_create_cache(st->compare_cache_size,
-					   util_ldap_compare_node_hash,
-					   util_ldap_compare_node_compare,
-					   util_ldap_compare_node_copy,
-					   util_ldap_compare_node_free);
-    dn_compare_cache = util_ald_create_cache(st->compare_cache_size,
-					      util_ldap_dn_compare_node_hash,
-					      util_ldap_dn_compare_node_compare,
-					      util_ldap_dn_compare_node_copy,
-					      util_ldap_dn_compare_node_free);
-
-    /* check that all the caches initialised successfully */
-    if (search_cache && compare_cache && dn_compare_cache) {
-
-        curl = (util_url_node_t *)apr_pcalloc(st->pool, sizeof(util_url_node_t));
-        curl->url = url;
-        curl->search_cache = search_cache;
-        curl->compare_cache = compare_cache;
-        curl->dn_compare_cache = dn_compare_cache;
-
-        util_ald_cache_insert(util_ldap_cache, curl);
-
-    }
-
-    return curl;
-}
-
-
-util_ald_cache_t *util_ald_create_cache(unsigned long maxentries,
-                                unsigned long (*hashfunc)(void *), 
-                                int (*comparefunc)(void *, void *),
-                                void * (*copyfunc)(void *),
-                                void (*freefunc)(void *))
-{
-    util_ald_cache_t *cache;
-    int i;
-
-    if (maxentries <= 0)
-        return NULL;
-
-    cache = (util_ald_cache_t *)util_ald_alloc(sizeof(util_ald_cache_t));
-    if (!cache)
-        return NULL;
-
-    cache->maxentries = maxentries;
-    cache->numentries = 0;
-    cache->size = maxentries / 3;
-    if (cache->size < 64) cache->size = 64;
-        for (i = 0; primes[i] && primes[i] < cache->size; ++i) ;
-            cache->size = primes[i]? primes[i] : primes[i-1];
-
-    cache->nodes = (util_cache_node_t **)util_ald_alloc(cache->size * sizeof(util_cache_node_t *));
-    if (!cache->nodes) {
-        util_ald_free(cache);
-        return NULL;
-    }
-
-    for (i=0; i < cache->size; ++i)
-        cache->nodes[i] = NULL;
-
-    cache->hash = hashfunc;
-    cache->compare = comparefunc;
-    cache->copy = copyfunc;
-    cache->free = freefunc;
-
-    cache->fullmark = cache->maxentries / 4 * 3;
-    cache->marktime = 0;
-    cache->avg_purgetime = 0.0;
-    cache->numpurges = 0;
-    cache->last_purge = 0;
-    cache->npurged = 0;
-
-    cache->fetches = 0;
-    cache->hits = 0;
-    cache->inserts = 0;
-    cache->removes = 0;
-
-    return cache;
-}
-
-void util_ald_destroy_cache(util_ald_cache_t *cache)
-{
-    int i;
-    util_cache_node_t *p, *q;
-
-    if (cache == NULL)
-        return;
-
-    for (i = 0; i < cache->size; ++i) {
-        p = cache->nodes[i];
-        q = NULL;
-        while (p != NULL) {
-            q = p->next;
-           (*cache->free)(p->payload);
-           util_ald_free(p);
-           p = q;
-        }
-    }
-    util_ald_free(cache->nodes);
-}
-
-void *util_ald_cache_fetch(util_ald_cache_t *cache, void *payload)
-{
-    int hashval;
-    util_cache_node_t *p;
-
-    if (cache == NULL)
-        return NULL;
-
-    cache->fetches++;
-
-    hashval = (*cache->hash)(payload) % cache->size;
-    for (p = cache->nodes[hashval]; 
-         p && !(*cache->compare)(p->payload, payload);
-    p = p->next) ;
-
-    if (p != NULL) {
-        cache->hits++;
-        return p->payload;
-    }
-    else {
-        return NULL;
-    }
-}
-
-/*
- * Insert an item into the cache. 
- * *** Does not catch duplicates!!! ***
- */
-void util_ald_cache_insert(util_ald_cache_t *cache, void *payload)
-{
-    int hashval;
-    util_cache_node_t *node;
-
-    if (cache == NULL || payload == NULL)
-        return;
-
-    cache->inserts++;
-    hashval = (*cache->hash)(payload) % cache->size;
-    node = (util_cache_node_t *)util_ald_alloc(sizeof(util_cache_node_t));
-    node->add_time = apr_time_now();
-    node->payload = (*cache->copy)(payload);
-    node->next = cache->nodes[hashval];
-    cache->nodes[hashval] = node;
-    if (++cache->numentries == cache->fullmark) 
-        cache->marktime=apr_time_now();
-    if (cache->numentries >= cache->maxentries)
-        util_ald_cache_purge(cache);
-}
-
-void util_ald_cache_remove(util_ald_cache_t *cache, void *payload)
-{
-    int hashval;
-    util_cache_node_t *p, *q;
-  
-    if (cache == NULL)
-        return;
-
-    cache->removes++;
-    hashval = (*cache->hash)(payload) % cache->size;
-    for (p = cache->nodes[hashval], q=NULL;
-         p && !(*cache->compare)(p->payload, payload);
-         p = p->next) {
-         q = p;
-    }
-
-    /* If p is null, it means that we couldn't find the node, so just return */
-    if (p == NULL)
-        return;
-
-    if (q == NULL) {
-        /* We found the node, and it's the first in the list */
-        cache->nodes[hashval] = p->next;
-    }
-    else {
-        /* We found the node and it's not the first in the list */
-        q->next = p->next;
-    }
-    (*cache->free)(p->payload);
-    util_ald_free(p);
-    cache->numentries--;
-}
-
-char *util_ald_cache_display_stats(apr_pool_t *p, util_ald_cache_t *cache, char *name)
-{
-    int i;
-    int totchainlen = 0;
-    int nchains = 0;
-    double chainlen;
-    util_cache_node_t *n;
-    char *buf;
-
-    if (cache == NULL) {
-        return "";
-    }
-
-    for (i=0; i < cache->size; ++i) {
-        if (cache->nodes[i] != NULL) {
-            nchains++;
-            for (n = cache->nodes[i]; n != NULL; n = n->next)
-	        totchainlen++;
-        }
-    }
-    chainlen = nchains? (double)totchainlen / (double)nchains : 0;
-
-    buf = apr_psprintf(p, 
-             "<tr valign='top'>"
-             "<td nowrap>%s</td>"
-             "<td align='right' nowrap>%lu (%.0f%% full)</td>"
-             "<td align='right'>%.1f</td>"
-	     "<td align='right'>%lu/%lu</td>"
-	     "<td align='right'>%.0f%%</td>"
-             "<td align='right'>%lu/%lu</td>",
-             name,
-	     cache->numentries, 
-	     (double)cache->numentries / (double)cache->maxentries * 100.0,
-             chainlen,
-	     cache->hits, 	     
-	     cache->fetches,
-	     (cache->fetches > 0 ? (double)(cache->hits) / (double)(cache->fetches) * 100.0 : 100.0),
-	     cache->inserts,
-	     cache->removes);
-
-    if (cache->numpurges) {
-        char str_ctime[APR_CTIME_LEN];
-
-        apr_ctime(str_ctime, cache->last_purge);
-        buf = apr_psprintf(p,
-                           "%s"
-	                   "<td align='right'>%lu</td>\n"
-                           "<td align='right' nowrap>%s</td>\n", 
-                           buf,
-	                   cache->numpurges,
-	                   str_ctime);
-    }
-    else {
-        buf = apr_psprintf(p, 
-                           "%s<td colspan='2' align='center'>(none)</td>\n",
-                           buf);
-    }
-
-    buf = apr_psprintf(p, "%s<td align='right'>%.2g</td>\n</tr>", buf, cache->avg_purgetime);
-
-    return buf;
-}
-
-char *util_ald_cache_display(apr_pool_t *pool)
-{
-    int i;
-    char *buf, *t1, *t2, *t3;
-
-    if (!util_ldap_cache) {
-        return "<tr valign='top'><td nowrap colspan=7>Cache has not been enabled/initialised.</td></tr>";
-    }
-
-    buf = util_ald_cache_display_stats(pool, util_ldap_cache, "LDAP URL Cache");
-
-    for (i=0; i < util_ldap_cache->size; ++i) {
-        util_cache_node_t *p;
-        for (p = util_ldap_cache->nodes[i]; p != NULL; p = p->next) {
-            util_url_node_t *n;
-
-            n = (util_url_node_t *)p->payload;
-
-            t1 = apr_psprintf(pool, "%s (Searches)", n->url);
-            t2 = apr_psprintf(pool, "%s (Compares)", n->url);
-            t3 = apr_psprintf(pool, "%s (DNCompares)", n->url);
-
-            buf = apr_psprintf(pool, "%s\n\n"
-                                     "%s\n\n"
-                                     "%s\n\n"
-                                     "%s\n\n",
-                                     buf,
-                                     util_ald_cache_display_stats(pool, n->search_cache, t1),
-                                     util_ald_cache_display_stats(pool, n->compare_cache, t2),
-                                     util_ald_cache_display_stats(pool, n->dn_compare_cache, t3)
-                              );
-        }
-    }
-    return buf;
-}
-
-#endif /* APU_HAS_LDAP */
diff --git a/modules/filters/.cvsignore b/modules/filters/.cvsignore
deleted file mode 100644
index aeabff3..0000000
--- a/modules/filters/.cvsignore
+++ /dev/null
@@ -1,16 +0,0 @@
-.deps
-.libs
-*.la
-modules.mk
-Makefile
-*.lo
-*.slo
-*.so
-*.x
-Debug
-Release
-*.plg
-*.aps
-*.dep
-*.mak
-*.rc
diff --git a/modules/filters/.indent.pro b/modules/filters/.indent.pro
deleted file mode 100644
index a9fbe9f..0000000
--- a/modules/filters/.indent.pro
+++ /dev/null
@@ -1,54 +0,0 @@
--i4 -npsl -di0 -br -nce -d0 -cli0 -npcs -nfc1
--TBUFF
--TFILE
--TTRANS
--TUINT4
--T_trans
--Tallow_options_t
--Tapache_sfio
--Tarray_header
--Tbool_int
--Tbuf_area
--Tbuff_struct
--Tbuffy
--Tcmd_how
--Tcmd_parms
--Tcommand_rec
--Tcommand_struct
--Tconn_rec
--Tcore_dir_config
--Tcore_server_config
--Tdir_maker_func
--Tevent
--Tglobals_s
--Thandler_func
--Thandler_rec
--Tjoblist_s
--Tlisten_rec
--Tmerger_func
--Tmode_t
--Tmodule
--Tmodule_struct
--Tmutex
--Tn_long
--Tother_child_rec
--Toverrides_t
--Tparent_score
--Tpid_t
--Tpiped_log
--Tpool
--Trequest_rec
--Trequire_line
--Trlim_t
--Tscoreboard
--Tsemaphore
--Tserver_addr_rec
--Tserver_rec
--Tserver_rec_chain
--Tshort_score
--Ttable
--Ttable_entry
--Tthread
--Tu_wide_int
--Tvtime_t
--Twide_int
diff --git a/modules/filters/Makefile.in b/modules/filters/Makefile.in
deleted file mode 100644
index 167b343..0000000
--- a/modules/filters/Makefile.in
+++ /dev/null
@@ -1,3 +0,0 @@
-
-include $(top_srcdir)/build/special.mk
-
diff --git a/modules/filters/config.m4 b/modules/filters/config.m4
deleted file mode 100644
index 4fa901d..0000000
--- a/modules/filters/config.m4
+++ /dev/null
@@ -1,11 +0,0 @@
-dnl modules enabled in this directory by default
-
-dnl APACHE_MODULE(name, helptext[, objects[, structname[, default[, config]]]])
-
-APACHE_MODPATH_INIT(filters)
-
-APACHE_MODULE(include, Server Side Includes, , , yes)
-
-APR_ADDTO(LT_LDFLAGS,-export-dynamic)
-
-APACHE_MODPATH_FINISH
diff --git a/modules/filters/mod_include.c b/modules/filters/mod_include.c
deleted file mode 100644
index 0b9d1c9..0000000
--- a/modules/filters/mod_include.c
+++ /dev/null
@@ -1,3508 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-/*
- * http_include.c: Handles the server-parsed HTML documents
- * 
- * Original by Rob McCool; substantial fixups by David Robinson;
- * incorporated into the Apache module framework by rst.
- * 
- */
-
-#include "apr.h"
-#include "apr_strings.h"
-#include "apr_thread_proc.h"
-#include "apr_hash.h"
-#include "apr_user.h"
-#include "apr_lib.h"
-#include "apr_optional.h"
-
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-#define CORE_PRIVATE
-
-#include "ap_config.h"
-#include "util_filter.h"
-#include "httpd.h"
-#include "http_config.h"
-#include "http_core.h"
-#include "http_request.h"
-#include "http_core.h"
-#include "http_protocol.h"
-#include "http_log.h"
-#include "http_main.h"
-#include "util_script.h"
-#include "http_core.h"
-#include "mod_include.h"
-#include "util_ebcdic.h"
-
-module AP_MODULE_DECLARE_DATA include_module;
-static apr_hash_t *include_hash;
-static APR_OPTIONAL_FN_TYPE(ap_register_include_handler) *ssi_pfn_register;
-
-/*****************************************************************
- *
- * XBITHACK.  Sigh...  NB it's configurable per-directory; the compile-time
- * option only changes the default.
- */
-
-enum xbithack {
-    xbithack_off, xbithack_on, xbithack_full
-};
-
-struct bndm_t {
-    unsigned int T[256];
-    unsigned int x;
-} ;
-
-typedef struct {
-    char *default_error_msg;
-    char *default_time_fmt;
-    enum xbithack *xbithack;
-} include_dir_config;
-
-typedef struct {
-    char *default_start_tag;
-    char *default_end_tag;
-    int  start_tag_len;
-    bndm_t start_seq_pat;
-    char *undefinedEcho;
-    int  undefinedEchoLen;
-} include_server_config;
-
-#ifdef XBITHACK
-#define DEFAULT_XBITHACK xbithack_full
-#else
-#define DEFAULT_XBITHACK xbithack_off
-#endif
-
-#define BYTE_COUNT_THRESHOLD AP_MIN_BYTES_TO_WRITE
-
-/* ------------------------ Environment function -------------------------- */
-
-/* Sentinel value to store in subprocess_env for items that
- * shouldn't be evaluated until/unless they're actually used
- */
-static const char lazy_eval_sentinel;
-#define LAZY_VALUE (&lazy_eval_sentinel)
-
-static void add_include_vars(request_rec *r, char *timefmt)
-{
-    apr_table_t *e = r->subprocess_env;
-    char *t;
-
-    apr_table_setn(e, "DATE_LOCAL", LAZY_VALUE);
-    apr_table_setn(e, "DATE_GMT", LAZY_VALUE);
-    apr_table_setn(e, "LAST_MODIFIED", LAZY_VALUE);
-    apr_table_setn(e, "DOCUMENT_URI", r->uri);
-    if (r->path_info && *r->path_info) {
-        apr_table_setn(e, "DOCUMENT_PATH_INFO", r->path_info);
-    }
-    apr_table_setn(e, "USER_NAME", LAZY_VALUE);
-    if ((t = strrchr(r->filename, '/'))) {
-        apr_table_setn(e, "DOCUMENT_NAME", ++t);
-    }
-    else {
-        apr_table_setn(e, "DOCUMENT_NAME", r->uri);
-    }
-    if (r->args) {
-        char *arg_copy = apr_pstrdup(r->pool, r->args);
-
-        ap_unescape_url(arg_copy);
-        apr_table_setn(e, "QUERY_STRING_UNESCAPED",
-                  ap_escape_shell_cmd(r->pool, arg_copy));
-    }
-}
-
-static const char *add_include_vars_lazy(request_rec *r, const char *var)
-{
-    char *val;
-    if (!strcasecmp(var, "DATE_LOCAL")) {
-        include_dir_config *conf =
-            (include_dir_config *)ap_get_module_config(r->per_dir_config,
-                                                       &include_module);
-        val = ap_ht_time(r->pool, r->request_time, conf->default_time_fmt, 0);
-    }
-    else if (!strcasecmp(var, "DATE_GMT")) {
-        include_dir_config *conf =
-            (include_dir_config *)ap_get_module_config(r->per_dir_config,
-                                                       &include_module);
-        val = ap_ht_time(r->pool, r->request_time, conf->default_time_fmt, 1);
-    }
-    else if (!strcasecmp(var, "LAST_MODIFIED")) {
-        include_dir_config *conf =
-            (include_dir_config *)ap_get_module_config(r->per_dir_config,
-                                                       &include_module);
-        val = ap_ht_time(r->pool, r->finfo.mtime, conf->default_time_fmt, 0);
-    }
-    else if (!strcasecmp(var, "USER_NAME")) {
-        if (apr_get_username(&val, r->finfo.user, r->pool) != APR_SUCCESS) {
-            val = "<unknown>";
-        }
-    }
-    else {
-        val = NULL;
-    }
-
-    if (val) {
-        apr_table_setn(r->subprocess_env, var, val);
-    }
-    return val;
-}
-
-static const char *get_include_var(request_rec *r, include_ctx_t *ctx, 
-                                   const char *var)
-{
-    const char *val;
-    if (apr_isdigit(*var) && !var[1]) {
-        /* Handle $0 .. $9 from the last regex evaluated.
-         * The choice of returning NULL strings on not-found,
-         * v.s. empty strings on an empty match is deliberate.
-         */
-        if (!ctx->re_result || !ctx->re_string) {
-            return NULL;
-        }
-        else {
-            int idx = atoi(var);
-            apr_size_t len = (*ctx->re_result)[idx].rm_eo
-                           - (*ctx->re_result)[idx].rm_so;
-            if (    (*ctx->re_result)[idx].rm_so < 0
-                 || (*ctx->re_result)[idx].rm_eo < 0) {
-                return NULL;
-            }
-            val = apr_pstrmemdup(r->pool, ctx->re_string 
-                                        + (*ctx->re_result)[idx].rm_so, len);
-        }
-    }
-    else {
-        val = apr_table_get(r->subprocess_env, var);
-
-        if (val == LAZY_VALUE)
-            val = add_include_vars_lazy(r, var);
-    }
-    return val;
-}
-
-/* --------------------------- Parser functions --------------------------- */
-
-/* This is an implementation of the BNDM search algorithm.
- *
- * Fast and Flexible String Matching by Combining Bit-parallelism and 
- * Suffix Automata (2001) 
- * Gonzalo Navarro, Mathieu Raffinot
- *
- * http://www-igm.univ-mlv.fr/~raffinot/ftp/jea2001.ps.gz
- *
- * Initial code submitted by Sascha Schumann.
- */
-   
-/* Precompile the bndm_t data structure. */
-static void bndm_compile(bndm_t *t, const char *n, apr_size_t nl)
-{
-    unsigned int x;
-    const char *ne = n + nl;
-
-    memset(t->T, 0, sizeof(unsigned int) * 256);
-    
-    for (x = 1; n < ne; x <<= 1)
-        t->T[(unsigned char) *n++] |= x;
-
-    t->x = x - 1;
-}
-
-/* Implements the BNDM search algorithm (as described above).
- *
- * n  - the pattern to search for
- * nl - length of the pattern to search for
- * h  - the string to look in
- * hl - length of the string to look for
- * t  - precompiled bndm structure against the pattern 
- *
- * Returns the count of character that is the first match or hl if no
- * match is found.
- */
-static apr_size_t bndm(const char *n, apr_size_t nl, const char *h, 
-                       apr_size_t hl, bndm_t *t)
-{
-    const char *skip;
-    const char *he, *p, *pi;
-    unsigned int *T, x, d;
-
-    he = h + hl;
-
-    T = t->T;
-    x = t->x;
-
-    pi = h - 1; /* pi: p initial */
-    p = pi + nl; /* compare window right to left. point to the first char */
-
-    while (p < he) {
-        skip = p;
-        d = x;
-        do {
-            d &= T[(unsigned char) *p--];
-            if (!d) {
-                break;
-            }
-            if ((d & 1)) {
-                if (p != pi)
-                    skip = p;
-                else
-                    return p - h + 1;
-            }
-            d >>= 1;
-        } while (d);
-
-        pi = skip;
-        p = pi + nl;
-    }
-
-    return hl;
-}
-
-/* We've now found a start sequence tag... */
-static apr_bucket* found_start_sequence(apr_bucket *dptr,
-                                        include_ctx_t *ctx, 
-                                        int tagStart)
-{
-    /* We want to split the bucket at the '<'. */
-    ctx->state = PARSE_DIRECTIVE;
-    ctx->tag_length = 0;
-    ctx->parse_pos = 0;
-    ctx->tag_start_bucket = dptr;
-    ctx->tag_start_index = tagStart;
-    if (ctx->head_start_index > 0) {
-        apr_bucket *tmp_bkt;
-
-        /* Split the bucket with the start of the tag in it */
-        apr_bucket_split(ctx->head_start_bucket, ctx->head_start_index);
-        tmp_bkt = APR_BUCKET_NEXT(ctx->head_start_bucket);
-        /* If it was a one bucket match */
-        if (dptr == ctx->head_start_bucket) {
-            ctx->tag_start_bucket = tmp_bkt;
-            ctx->tag_start_index = tagStart - ctx->head_start_index;
-        }
-        ctx->head_start_bucket = tmp_bkt;
-        ctx->head_start_index = 0;
-    }
-    return ctx->head_start_bucket;
-}
-
-/* This function returns either a pointer to the split bucket containing the
- * first byte of the BEGINNING_SEQUENCE (after finding a complete match) or it
- * returns NULL if no match found.
- */
-static apr_bucket *find_start_sequence(apr_bucket *dptr, include_ctx_t *ctx,
-                                       apr_bucket_brigade *bb, int *do_cleanup)
-{
-    apr_size_t len;
-    const char *c;
-    const char *buf;
-    const char *str = ctx->start_seq ;
-    apr_size_t slen = ctx->start_seq_len;
-    apr_size_t pos;
-
-    *do_cleanup = 0;
-
-    do {
-        apr_status_t rv = 0;
-        int read_done = 0;
-
-        if (APR_BUCKET_IS_EOS(dptr)) {
-            break;
-        }
-
-#if 0
-        /* XXX the bucket flush support is commented out for now
-         * because it was causing a segfault */
-        if (APR_BUCKET_IS_FLUSH(dptr)) {
-            apr_bucket *old = dptr; 
-            dptr = APR_BUCKET_NEXT(old);
-            APR_BUCKET_REMOVE(old);
-            ctx->output_now = 1;
-            ctx->output_flush = 1;
-        }
-        else
-#endif /* 0 */
-        if (ctx->bytes_parsed >= BYTE_COUNT_THRESHOLD) {
-            ctx->output_now = 1;
-        }
-        else if (ctx->bytes_parsed > 0) {
-            rv = apr_bucket_read(dptr, &buf, &len, APR_NONBLOCK_READ);
-            read_done = 1;
-            if (APR_STATUS_IS_EAGAIN(rv)) {
-                ctx->output_now = 1;
-            }
-        }
-
-        if (ctx->output_now) {
-            apr_bucket *start_bucket;
-            if (ctx->head_start_index > 0) {
-                start_bucket = ctx->head_start_bucket;
-                apr_bucket_split(start_bucket, ctx->head_start_index);
-                start_bucket = APR_BUCKET_NEXT(start_bucket);
-                ctx->head_start_index = 0;
-                ctx->head_start_bucket = start_bucket;
-                ctx->parse_pos = 0;
-                ctx->state = PRE_HEAD;
-            }
-            else {
-                start_bucket = dptr;
-            }
-            return start_bucket;
-        }
-
-        if (!read_done) {
-            rv = apr_bucket_read(dptr, &buf, &len, APR_BLOCK_READ);
-        }
-        if (!APR_STATUS_IS_SUCCESS(rv)) {
-            ctx->status = rv;
-            return NULL;
-        }
-
-        if (len == 0) { /* end of pipe? */
-            break;
-        }
-
-        /* Set our buffer to use. */
-        c = buf;
-
-        /* The last bucket had a left over partial match that we need to
-         * complete. 
-         */
-        if (ctx->state == PARSE_HEAD)
-        {
-            apr_size_t tmpLen;
-            tmpLen = (len < (slen - 1)) ? len : (slen - 1);
-
-            while (c < buf + tmpLen && *c == str[ctx->parse_pos])
-            {
-                c++; 
-                ctx->parse_pos++;
-            }
-
-            if (str[ctx->parse_pos] == '\0')
-            {
-                ctx->bytes_parsed += c - buf;
-                return found_start_sequence(dptr, ctx, c - buf);
-            }
-            else if (c == buf + tmpLen) {
-                dptr = APR_BUCKET_NEXT(dptr);
-                continue;
-            }
-
-            /* False alarm... 
-             */
-            APR_BRIGADE_PREPEND(bb, ctx->ssi_tag_brigade);
-
-            ctx->state = PRE_HEAD;
-        }
-
-        if (len)
-        {
-            pos = bndm(str, slen, c, len, ctx->start_seq_pat);
-            if (pos != len)
-            {
-                ctx->head_start_bucket = dptr;
-                ctx->head_start_index = pos;
-                ctx->bytes_parsed += pos + slen;
-                return found_start_sequence(dptr, ctx, pos + slen);
-            }
-        }
-        
-        /* Consider the case where we have <!-- at the end of the bucket. */
-        if (len > slen) {
-            ctx->bytes_parsed += (len - slen);
-            c = buf + len - slen;
-        }
-        else {
-            c = buf;
-        }
-        ctx->parse_pos = 0;
-
-        while (c < buf + len)
-        {
-            if (*c == str[ctx->parse_pos]) {
-                if (ctx->state == PRE_HEAD) {
-                    ctx->state = PARSE_HEAD;
-                    ctx->head_start_bucket = dptr;
-                    ctx->head_start_index = c - buf;
-                }
-                ctx->parse_pos++;
-            }
-            else if (ctx->parse_pos != 0) 
-            {
-                /* The reason for this, is that we need to make sure 
-                 * that we catch cases like <<!--#.  This makes the 
-                 * second check after the original check fails.
-                 * If parse_pos was already 0 then we already checked this.
-                 */
-                /* FIXME: Why? */
-                *do_cleanup = 1;
-                if (*c == str[0]) {
-                    ctx->parse_pos = 1;
-                    ctx->head_start_index = c - buf;
-                }
-                else {
-                    ctx->parse_pos = 0;
-                    ctx->state = PRE_HEAD;
-                    ctx->head_start_bucket = NULL;
-                    ctx->head_start_index = 0;
-                }
-            }
-            c++;
-            ctx->bytes_parsed++;
-        }
-        dptr = APR_BUCKET_NEXT(dptr);
-    } while (dptr != APR_BRIGADE_SENTINEL(bb));
-          
-  
-    return NULL;
-}
-
-static apr_bucket *find_end_sequence(apr_bucket *dptr, include_ctx_t *ctx, 
-                                     apr_bucket_brigade *bb)
-{
-    apr_size_t len;
-    const char *c;
-    const char *buf;
-    const char *str = ctx->end_seq;
-    const char *start;
-
-    do {
-        apr_status_t rv = 0;
-        int read_done = 0;
-
-        if (APR_BUCKET_IS_EOS(dptr)) {
-            break;
-        }
-#if 0
-        /* XXX the bucket flush support is commented out for now
-         * because it was causing a segfault */
-        if (APR_BUCKET_IS_FLUSH(dptr)) {
-            apr_bucket *old = dptr; 
-            dptr = APR_BUCKET_NEXT(old);
-            APR_BUCKET_REMOVE(old);
-            ctx->output_now = 1;
-            ctx->output_flush = 1;
-        }
-        else
-#endif /* 0 */
-        if (ctx->bytes_parsed >= BYTE_COUNT_THRESHOLD) {
-            ctx->output_now = 1;
-        }
-        else if (ctx->bytes_parsed > 0) {
-            rv = apr_bucket_read(dptr, &buf, &len, APR_NONBLOCK_READ);
-            read_done = 1;
-            if (APR_STATUS_IS_EAGAIN(rv)) {
-                ctx->output_now = 1;
-            }
-        }
-
-        if (ctx->output_now) {
-            if (ctx->state == PARSE_DIRECTIVE) {
-                /* gonna start over parsing the directive next time through */
-                ctx->directive_length = 0;
-                ctx->tag_length       = 0;
-            }
-            return dptr;
-        }
-
-        if (!read_done) {
-            rv = apr_bucket_read(dptr, &buf, &len, APR_BLOCK_READ);
-        }
-        if (!APR_STATUS_IS_SUCCESS(rv)) {
-            ctx->status = rv;
-            return NULL;
-        }
-
-        if (len == 0) { /* end of pipe? */
-            break;
-        }
-        if (dptr == ctx->tag_start_bucket) {
-            c = buf + ctx->tag_start_index;
-        }
-        else {
-            c = buf;
-        }
-        start = c;
-        while (c < buf + len) {
-            if (*c == str[ctx->parse_pos]) {
-                if (ctx->state != PARSE_TAIL) {
-                    ctx->state             = PARSE_TAIL;
-                    ctx->tail_start_bucket = dptr;
-                    ctx->tail_start_index  = c - buf;
-                }
-                ctx->parse_pos++;
-                if (str[ctx->parse_pos] == '\0') {
-                        apr_bucket *tmp_buck = dptr;
-
-                        /* We want to split the bucket at the '>'. The
-                         * end of the END_SEQUENCE is in the current bucket.
-                         * The beginning might be in a previous bucket.
-                         */
-                        c++;
-                        ctx->bytes_parsed += (c - start);
-                        ctx->state = PARSED;
-                        apr_bucket_split(dptr, c - buf);
-                        tmp_buck = APR_BUCKET_NEXT(dptr);
-                        return (tmp_buck);
-                    }           
-            }
-            else {
-                if (ctx->state == PARSE_DIRECTIVE) {
-                    if (ctx->tag_length == 0) {
-                        if (!apr_isspace(*c)) {
-                            ctx->tag_start_bucket = dptr;
-                            ctx->tag_start_index  = c - buf;
-                            ctx->tag_length       = 1;
-                            ctx->directive_length = 1;
-                        }
-                    }
-                    else {
-                        if (!apr_isspace(*c)) {
-                            ctx->directive_length++;
-                        }
-                        else {
-                            ctx->state = PARSE_TAG;
-                        }
-                        ctx->tag_length++;
-                    }
-                }
-                else if (ctx->state == PARSE_TAG) {
-                    const char *tmp = c;
-                    do {
-                        c++;
-                    } while ((c < buf + len) && (*c != *str));
-                    ctx->tag_length += (c - tmp);
-                    continue;
-                }
-                else {
-                    if (ctx->parse_pos != 0) {
-                        /* The reason for this, is that we need to make sure 
-                         * that we catch cases like --->.  This makes the 
-                         * second check after the original check fails.
-                         * If parse_pos was already 0 then we already checked 
-                         * this.
-                         */
-                         ctx->tag_length += ctx->parse_pos;
-
-                         if (*c == str[0]) {
-                             ctx->state = PARSE_TAIL;
-                             ctx->tail_start_bucket = dptr;
-                             ctx->tail_start_index = c - buf;
-                             ctx->tag_length += ctx->parse_pos;
-                             ctx->parse_pos = 1;
-                         }
-                         else {
-                             if (ctx->tag_length > ctx->directive_length) {
-                                 ctx->state = PARSE_TAG;
-                             }
-                             else {
-                                 ctx->state = PARSE_DIRECTIVE;
-                                 ctx->directive_length += ctx->parse_pos;
-                             }
-                             ctx->tail_start_bucket = NULL;
-                             ctx->tail_start_index = 0;
-                             ctx->tag_length += ctx->parse_pos;
-                             ctx->parse_pos = 0;
-                         }
-                    }
-                }
-            }
-            c++;
-        }
-        ctx->bytes_parsed += (c - start);
-        dptr = APR_BUCKET_NEXT(dptr);
-    } while (dptr != APR_BRIGADE_SENTINEL(bb));
-    return NULL;
-}
-
-/* This function culls through the buckets that have been set aside in the 
- * ssi_tag_brigade and copies just the directive part of the SSI tag (none
- * of the start and end delimiter bytes are copied).
- */
-static apr_status_t get_combined_directive (include_ctx_t *ctx,
-                                            request_rec *r,
-                                            apr_bucket_brigade *bb,
-                                            char *tmp_buf, 
-                                            apr_size_t tmp_buf_size)
-{
-    int        done = 0;
-    apr_bucket *dptr;
-    const char *tmp_from;
-    apr_size_t tmp_from_len;
-
-    /* If the tag length is longer than the tmp buffer, allocate space. */
-    if (ctx->tag_length > tmp_buf_size-1) {
-        if ((ctx->combined_tag = apr_pcalloc(r->pool, 
-             ctx->tag_length + 1)) == NULL) {
-            return (APR_ENOMEM);
-        }
-    }     /* Else, just use the temp buffer. */
-    else {
-        ctx->combined_tag = tmp_buf;
-    }
-
-    /* Prime the pump. Start at the beginning of the tag... */
-    dptr = ctx->tag_start_bucket;
-    /* Read the bucket... */
-    apr_bucket_read (dptr, &tmp_from, &tmp_from_len, 0);
-
-    /* Adjust the pointer to start at the tag within the bucket... */
-    if (dptr == ctx->tail_start_bucket) {
-        tmp_from_len -= (tmp_from_len - ctx->tail_start_index);
-    }
-    tmp_from          = &tmp_from[ctx->tag_start_index];
-    tmp_from_len     -= ctx->tag_start_index;
-    ctx->curr_tag_pos = ctx->combined_tag;
-
-    /* Loop through the buckets from the tag_start_bucket until before
-     * the tail_start_bucket copying the contents into the buffer.
-     */
-    do {
-        memcpy (ctx->curr_tag_pos, tmp_from, tmp_from_len);
-        ctx->curr_tag_pos += tmp_from_len;
-
-        if (dptr == ctx->tail_start_bucket) {
-            done = 1;
-        }
-        else {
-            dptr = APR_BUCKET_NEXT (dptr);
-            apr_bucket_read (dptr, &tmp_from, &tmp_from_len, 0);
-            /* Adjust the count to stop at the beginning of the tail. */
-            if (dptr == ctx->tail_start_bucket) {
-                tmp_from_len -= (tmp_from_len - ctx->tail_start_index);
-            }
-        }
-    } while ((!done) &&
-             (ctx->curr_tag_pos < ctx->combined_tag + ctx->tag_length));
-
-    ctx->combined_tag[ctx->tag_length] = '\0';
-    ctx->curr_tag_pos = ctx->combined_tag;
-
-    return (APR_SUCCESS);
-}
-
-/*
- * decodes a string containing html entities or numeric character references.
- * 's' is overwritten with the decoded string.
- * If 's' is syntatically incorrect, then the followed fixups will be made:
- *   unknown entities will be left undecoded;
- *   references to unused numeric characters will be deleted.
- *   In particular, &#00; will not be decoded, but will be deleted.
- *
- * drtr
- */
-
-/* maximum length of any ISO-LATIN-1 HTML entity name. */
-#define MAXENTLEN (6)
-
-/* The following is a shrinking transformation, therefore safe. */
-
-static void decodehtml(char *s)
-{
-    int val, i, j;
-    char *p;
-    const char *ents;
-    static const char * const entlist[MAXENTLEN + 1] =
-    {
-        NULL,                   /* 0 */
-        NULL,                   /* 1 */
-        "lt\074gt\076",         /* 2 */
-        "amp\046ETH\320eth\360",        /* 3 */
-        "quot\042Auml\304Euml\313Iuml\317Ouml\326Uuml\334auml\344euml\353\
-iuml\357ouml\366uuml\374yuml\377",      /* 4 */
-        "Acirc\302Aring\305AElig\306Ecirc\312Icirc\316Ocirc\324Ucirc\333\
-THORN\336szlig\337acirc\342aring\345aelig\346ecirc\352icirc\356ocirc\364\
-ucirc\373thorn\376",            /* 5 */
-        "Agrave\300Aacute\301Atilde\303Ccedil\307Egrave\310Eacute\311\
-Igrave\314Iacute\315Ntilde\321Ograve\322Oacute\323Otilde\325Oslash\330\
-Ugrave\331Uacute\332Yacute\335agrave\340aacute\341atilde\343ccedil\347\
-egrave\350eacute\351igrave\354iacute\355ntilde\361ograve\362oacute\363\
-otilde\365oslash\370ugrave\371uacute\372yacute\375"     /* 6 */
-    };
-
-    /* Do a fast scan through the string until we find anything
-     * that needs more complicated handling
-     */
-    for (; *s != '&'; s++) {
-        if (*s == '\0') {
-            return;
-        }
-    }
-
-    for (p = s; *s != '\0'; s++, p++) {
-        if (*s != '&') {
-            *p = *s;
-            continue;
-        }
-        /* find end of entity */
-        for (i = 1; s[i] != ';' && s[i] != '\0'; i++) {
-            continue;
-        }
-
-        if (s[i] == '\0') {     /* treat as normal data */
-            *p = *s;
-            continue;
-        }
-
-        /* is it numeric ? */
-        if (s[1] == '#') {
-            for (j = 2, val = 0; j < i && apr_isdigit(s[j]); j++) {
-                val = val * 10 + s[j] - '0';
-            }
-            s += i;
-            if (j < i || val <= 8 || (val >= 11 && val <= 31) ||
-                (val >= 127 && val <= 160) || val >= 256) {
-                p--;            /* no data to output */
-            }
-            else {
-                *p = RAW_ASCII_CHAR(val);
-            }
-        }
-        else {
-            j = i - 1;
-            if (j > MAXENTLEN || entlist[j] == NULL) {
-                /* wrong length */
-                *p = '&';
-                continue;       /* skip it */
-            }
-            for (ents = entlist[j]; *ents != '\0'; ents += i) {
-                if (strncmp(s + 1, ents, j) == 0) {
-                    break;
-                }
-            }
-
-            if (*ents == '\0') {
-                *p = '&';       /* unknown */
-            }
-            else {
-                *p = RAW_ASCII_CHAR(((const unsigned char *) ents)[j]);
-                s += i;
-            }
-        }
-    }
-
-    *p = '\0';
-}
-
-/*
- * Extract the next tag name and value.
- * If there are no more tags, set the tag name to NULL.
- * The tag value is html decoded if dodecode is non-zero.
- * The tag value may be NULL if there is no tag value..
- *    format:
- *        [WS]<Tag>[WS]=[WS]['|"|`]<Value>[['|"|`|]|WS]
- */
-
-#define SKIP_TAG_WHITESPACE(ptr) while ((*ptr != '\0') && (apr_isspace (*ptr))) ptr++
-
-static void ap_ssi_get_tag_and_value(include_ctx_t *ctx, char **tag,
-                                     char **tag_val, int dodecode)
-{
-    char *c = ctx->curr_tag_pos;
-    int   shift_val = 0; 
-    char  term = '\0';
-
-    *tag_val = NULL;
-    SKIP_TAG_WHITESPACE(c);
-    *tag = c;             /* First non-whitespace character (could be NULL). */
-
-    while (apr_islower(*c)) {
-        c++;  /* Optimization for the common case where the tag */
-    }         /* is already lowercase */
-
-    while ((*c != '=') && (!apr_isspace(*c)) && (*c != '\0')) {
-        *c = apr_tolower(*c);    /* find end of tag, lowercasing as we go... */
-        c++;
-    }
-
-    if ((*c == '\0') || (**tag == '=')) {
-        if ((**tag == '\0') || (**tag == '=')) {
-            *tag = NULL;
-        }
-        ctx->curr_tag_pos = c;
-        return;                      /* We have found the end of the buffer. */
-    }                       /* We might have a tag, but definitely no value. */
-
-    if (*c == '=') {
-        *c++ = '\0'; /* Overwrite the '=' with a terminating byte after tag. */
-    }
-    else {                               /* Try skipping WS to find the '='. */
-        *c++ = '\0';                                 /* Terminate the tag... */
-        SKIP_TAG_WHITESPACE(c);
-        
-        /* There needs to be an equal sign if there's a value. */
-        if (*c != '=') {
-            ctx->curr_tag_pos = c;
-            return; /* There apparently was no value. */
-        }
-        else {
-            c++; /* Skip the equals sign. */
-        }
-    }
-
-    SKIP_TAG_WHITESPACE(c);
-    if (*c == '"' || *c == '\'' || *c == '`') { 
-        /* Allow quoted values for space inclusion. 
-         * NOTE: This does not pass the quotes on return.
-         */
-        term = *c++;
-    }
-    
-    *tag_val = c;
-    if (!term) {
-        while (!apr_isspace(*c) && (*c != '\0')) {
-            c++;
-        }
-    }
-    else {
-        while ((*c != term) && (*c != '\0') && (*c != '\\')) {
-            /* Quickly scan past the string until we reach
-             * either the end of the tag or a backslash.  If
-             * we find a backslash, we have to switch to the
-             * more complicated parser loop that follows.
-             */
-            c++;
-        }
-        if (*c == '\\') {
-            do {
-                /* Accept \" (or ' or `) as valid quotation of string. 
-                 */
-                if (*c == '\\') {  
-                    /* Overwrite the "\" during the embedded 
-                     * escape sequence of '"'. "\'" or '`'. 
-                     * Shift bytes from here to next delimiter.     
-                     */
-                    c++;
-                    if (*c == term) {
-                        shift_val++;
-                    }
-                    if (shift_val > 0) {
-                        *(c-shift_val) = *c;
-                    }
-                    if (*c == '\0') {
-                        break;
-                    }
-                }
-
-                c++;
-                if (shift_val > 0) {
-                    *(c-shift_val) = *c;
-                }
-            } while ((*c != term) && (*c != '\0'));
-        }
-    }
-    
-    *(c-shift_val) = '\0'; /* Overwrites delimiter (term or WS) with NULL. */
-    ctx->curr_tag_pos = ++c;
-    if (dodecode) {
-        decodehtml(*tag_val);
-    }
-
-    return;
-}
-
-/* initial buffer size for power-of-two allocator in ap_ssi_parse_string */
-#define PARSE_STRING_INITIAL_SIZE 64
-
-/*
- * Do variable substitution on strings
- * (Note: If out==NULL, this function allocs a buffer for the resulting
- * string from r->pool.  The return value is the parsed string)
- */
-static char *ap_ssi_parse_string(request_rec *r, include_ctx_t *ctx, 
-                                 const char *in, char *out,
-                                 apr_size_t length, int leave_name)
-{
-    char ch;
-    char *next;
-    char *end_out;
-    apr_size_t out_size;
-
-    /* allocate an output buffer if needed */
-    if (!out) {
-        out_size = PARSE_STRING_INITIAL_SIZE;
-        if (out_size > length) {
-            out_size = length;
-        }
-        out = apr_palloc(r->pool, out_size);
-    }
-    else {
-        out_size = length;
-    }
-
-    /* leave room for nul terminator */
-    end_out = out + out_size - 1;
-
-    next = out;
-    while ((ch = *in++) != '\0') {
-        switch (ch) {
-        case '\\':
-            if (next == end_out) {
-                if (out_size < length) {
-                    /* double the buffer size */
-                    apr_size_t new_out_size = out_size * 2;
-                    apr_size_t current_length = next - out;
-                    char *new_out;
-                    if (new_out_size > length) {
-                        new_out_size = length;
-                    }
-                    new_out = apr_palloc(r->pool, new_out_size);
-                    memcpy(new_out, out, current_length);
-                    out = new_out;
-                    out_size = new_out_size;
-                    end_out = out + out_size - 1;
-                    next = out + current_length;
-                }
-                else {
-                    /* truncated */
-                    *next = '\0';
-                    return out;
-                }
-            }
-            if (*in == '$') {
-                *next++ = *in++;
-            }
-            else {
-                *next++ = ch;
-            }
-            break;
-        case '$':
-            {
-                const char *start_of_var_name;
-                char *end_of_var_name;        /* end of var name + 1 */
-                const char *expansion, *temp_end, *val;
-                char        tmp_store;
-                size_t l;
-
-                /* guess that the expansion won't happen */
-                expansion = in - 1;
-                if (*in == '{') {
-                    ++in;
-                    start_of_var_name = in;
-                    in = ap_strchr_c(in, '}');
-                    if (in == NULL) {
-                        ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR,
-                                      0, r, "Missing '}' on variable \"%s\"",
-                                      expansion);
-                        *next = '\0';
-                        return out;
-                    }
-                    temp_end = in;
-                    end_of_var_name = (char *)temp_end;
-                    ++in;
-                }
-                else {
-                    start_of_var_name = in;
-                    while (apr_isalnum(*in) || *in == '_') {
-                        ++in;
-                    }
-                    temp_end = in;
-                    end_of_var_name = (char *)temp_end;
-                }
-                /* what a pain, too bad there's no table_getn where you can
-                 * pass a non-nul terminated string */
-                l = end_of_var_name - start_of_var_name;
-                if (l != 0) {
-                    tmp_store        = *end_of_var_name;
-                    *end_of_var_name = '\0';
-                    val = get_include_var(r, ctx, start_of_var_name);
-                    *end_of_var_name = tmp_store;
-
-                    if (val) {
-                        expansion = val;
-                        l = strlen(expansion);
-                    }
-                    else if (leave_name) {
-                        l = in - expansion;
-                    }
-                    else {
-                        /* no expansion to be done */
-                        break;
-                    }
-                }
-                else {
-                    /* zero-length variable name causes just the $ to be 
-                     * copied */
-                    l = 1;
-                }
-                if ((next + l > end_out) && (out_size < length)) {
-                    /* increase the buffer size to accommodate l more chars */
-                    apr_size_t new_out_size = out_size;
-                    apr_size_t current_length = next - out;
-                    char *new_out;
-                    do {
-                        new_out_size *= 2;
-                    } while (new_out_size < current_length + l);
-                    if (new_out_size > length) {
-                        new_out_size = length;
-                    }
-                    new_out = apr_palloc(r->pool, new_out_size);
-                    memcpy(new_out, out, current_length);
-                    out = new_out;
-                    out_size = new_out_size;
-                    end_out = out + out_size - 1;
-                    next = out + current_length;
-                }
-                l = ((int)l > end_out - next) ? (end_out - next) : l;
-                memcpy(next, expansion, l);
-                next += l;
-                break;
-            }
-        default:
-            if (next == end_out) {
-                if (out_size < length) {
-                    /* double the buffer size */
-                    apr_size_t new_out_size = out_size * 2;
-                    apr_size_t current_length = next - out;
-                    char *new_out;
-                    if (new_out_size > length) {
-                        new_out_size = length;
-                    }
-                    new_out = apr_palloc(r->pool, new_out_size);
-                    memcpy(new_out, out, current_length);
-                    out = new_out;
-                    out_size = new_out_size;
-                    end_out = out + out_size - 1;
-                    next = out + current_length;
-                }
-                else {
-                    /* truncated */
-                    *next = '\0';
-                    return out;
-                }
-            }
-            *next++ = ch;
-            break;
-        }
-    }
-    *next = '\0';
-    return out;
-}
-
-/* --------------------------- Action handlers ---------------------------- */
-
-/* ensure that path is relative, and does not contain ".." elements
- * ensentially ensure that it does not match the regex:
- * (^/|(^|/)\.\.(/|$))
- * XXX: Simply replace with apr_filepath_merge                    
- */
-static int is_only_below(const char *path)
-{
-#ifdef HAVE_DRIVE_LETTERS
-    if (path[1] == ':') 
-        return 0;
-#endif
-#ifdef NETWARE
-    if (strchr(path, ':'))
-        return 0;
-#endif
-    if (path[0] == '/') {
-        return 0;
-    }
-    while (*path) {
-        int dots = 0;
-        while (path[dots] == '.')
-            ++dots;
-#if defined(WIN32) 
-        /* If the name is canonical this is redundant
-         * but in security, redundancy is worthwhile.
-         * Does OS2 belong here (accepts ... for ..)?
-         */
-        if (dots > 1 && (!path[dots] || path[dots] == '/'))
-            return 0;
-#else
-        if (dots == 2 && (!path[dots] || path[dots] == '/'))
-            return 0;
-#endif
-        path += dots;
-        while (*path && *(path++) != '/')
-            ++path;
-    }
-    return 1;
-}
-
-static int handle_include(include_ctx_t *ctx, apr_bucket_brigade **bb, 
-                         request_rec *r, ap_filter_t *f, apr_bucket *head_ptr, 
-                         apr_bucket **inserted_head)
-{
-    char *tag     = NULL;
-    char *tag_val = NULL;
-    apr_bucket  *tmp_buck;
-    char *parsed_string;
-    int loglevel = APLOG_ERR;
-    int quick_handler = 0;
-
-    *inserted_head = NULL;
-    if (ctx->flags & FLAG_PRINTING) {
-        while (1) {
-            ap_ssi_get_tag_and_value(ctx, &tag, &tag_val, 1);
-            if (tag_val == NULL) {
-                if (tag == NULL) {
-                    return (0);
-                }
-                else {
-                    return (1);
-                }
-            }
-            if (!strcmp(tag, "virtual") || !strcmp(tag, "file")) {
-                request_rec *rr = NULL;
-                char *error_fmt = NULL;
-                apr_status_t rc = APR_SUCCESS;
-
-                SPLIT_AND_PASS_PRETAG_BUCKETS(*bb, ctx, f->next, rc);
-                if (rc != APR_SUCCESS) {
-                    return rc;
-                }
- 
-                parsed_string = ap_ssi_parse_string(r, ctx, tag_val, NULL, 
-                                                    MAX_STRING_LEN, 0);
-                if (tag[0] == 'f') {
-                    /* XXX: Port to apr_filepath_merge
-                     * be safe; only files in this directory or below allowed 
-                     */
-                    if (!is_only_below(parsed_string)) {
-                        error_fmt = "unable to include file \"%s\" "
-                                    "in parsed file %s";
-                    }
-                    else {
-                        rr = ap_sub_req_lookup_file(parsed_string, r, f->next);
-                    }
-                }
-                else {
-                    rr = ap_sub_req_lookup_uri(parsed_string, r, f->next);
-                }
-                if (rr && rr->status == DONE) {
-                    rr->status = HTTP_OK;
-                    quick_handler = 1;
-                }
-
-                if (!error_fmt && rr->status != HTTP_OK) {
-                    error_fmt = "unable to include \"%s\" in parsed file %s";
-                }
-
-                if (!error_fmt && (ctx->flags & FLAG_NO_EXEC) && 
-                    rr->content_type && 
-                    (strncmp(rr->content_type, "text/", 5))) {
-                    error_fmt = "unable to include potential exec \"%s\" "
-                        "in parsed file %s";
-                }
-                if (error_fmt == NULL) {
-                    /* try to avoid recursive includes.  We do this by walking
-                     * up the r->main list of subrequests, and at each level
-                     * walking back through any internal redirects.  At each
-                     * step, we compare the filenames and the URIs.  
-                     *
-                     * The filename comparison catches a recursive include
-                     * with an ever-changing URL, eg.
-                     * <!--#include virtual=
-                     *      "$REQUEST_URI/$QUERY_STRING?$QUERY_STRING/x" -->
-                     * which, although they would eventually be caught because
-                     * we have a limit on the length of files, etc., can 
-                     * recurse for a while.
-                     *
-                     * The URI comparison catches the case where the filename
-                     * is changed while processing the request, so the 
-                     * current name is never the same as any previous one.
-                     * This can happen with "DocumentRoot /foo" when you
-                     * request "/" on the server and it includes "/".
-                     * This only applies to modules such as mod_dir that 
-                     * (somewhat improperly) mess with r->filename outside 
-                     * of a filename translation phase.
-                     */
-                    int founddupe = 0;
-                    request_rec *p;
-                    for (p = r; p != NULL && !founddupe; p = p->main) {
-                        request_rec *q;
-                        for (q = p; q != NULL; q = q->prev) {
-                            if ((q->filename && rr->filename && 
-                                (strcmp(q->filename, rr->filename) == 0)) ||
-                                ((*q->uri == '/') && 
-                                 (strcmp(q->uri, rr->uri) == 0)))
-                            {
-                                founddupe = 1;
-                                break;
-                            }
-                        }
-                    }
-
-                    if (p != NULL) {
-                        error_fmt = "Recursive include of \"%s\" "
-                            "in parsed file %s";
-                    }
-                }
-
-                /* See the Kludge in send_parsed_file for why */
-                /* Basically, it puts a bread crumb in here, then looks */
-                /*   for the crumb later to see if its been here.       */
-                if (rr) 
-                    ap_set_module_config(rr->request_config, 
-                                         &include_module, r);
-
-                if (!error_fmt) {
-                    int rv;
-                   
-                    if ((quick_handler==0)&&(rv = ap_run_sub_req(rr))) {
-                        if (APR_STATUS_IS_EPIPE(rv)) {
-                            /* let's not clutter the log on a busy server */
-                            loglevel = APLOG_INFO; 
-                        }
-                        error_fmt = 
-                                  "unable to include \"%s\" in parsed file %s"; 
-                    }
-                }
-                if (error_fmt) {
-                    ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|loglevel,
-                                  0, r, error_fmt, tag_val, r->filename);
-                    CREATE_ERROR_BUCKET(ctx, tmp_buck, head_ptr, 
-                                        *inserted_head);
-                }
-
-                /* destroy the sub request */
-                if (rr != NULL) {
-                    ap_destroy_sub_req(rr);
-                }
-            }
-            else {
-                ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                            "unknown parameter \"%s\" to tag include in %s",
-                            tag, r->filename);
-                CREATE_ERROR_BUCKET(ctx, tmp_buck, head_ptr, *inserted_head);
-            }
-        }
-    }
-    return 0;
-}
-
-
-static int handle_echo(include_ctx_t *ctx, apr_bucket_brigade **bb, 
-                       request_rec *r, ap_filter_t *f, apr_bucket *head_ptr, 
-                       apr_bucket **inserted_head)
-{
-    char       *tag       = NULL;
-    char       *tag_val   = NULL;
-    const char *echo_text = NULL;
-    apr_bucket  *tmp_buck;
-    apr_size_t e_len;
-    enum {E_NONE, E_URL, E_ENTITY} encode;
-
-    encode = E_ENTITY;
-
-    *inserted_head = NULL;
-    if (ctx->flags & FLAG_PRINTING) {
-        while (1) {
-            ap_ssi_get_tag_and_value(ctx, &tag, &tag_val, 1);
-            if (tag_val == NULL) {
-                if (tag != NULL) {
-                    return 1;
-                }
-                else {
-                    return 0;
-                }
-            }
-            if (!strcmp(tag, "var")) {
-                const char *val = get_include_var(r, ctx, tag_val);
-                if (val) {
-                    switch(encode) {
-                    case E_NONE:   
-                        echo_text = val;
-                        break;
-                    case E_URL:
-                        echo_text = ap_escape_uri(r->pool, val);  
-                        break;
-                    case E_ENTITY: 
-                        echo_text = ap_escape_html(r->pool, val); 
-                        break;
-                    }
-
-                    e_len = strlen(echo_text);
-                    tmp_buck = apr_bucket_pool_create(echo_text, e_len,
-                                                      r->pool);
-                }
-                else {
-                    include_server_config *sconf= 
-                        ap_get_module_config(r->server->module_config,
-                                             &include_module);
-                    tmp_buck = apr_bucket_pool_create(sconf->undefinedEcho, 
-                                                      sconf->undefinedEchoLen,
-                                                      r->pool);
-                }
-                APR_BUCKET_INSERT_BEFORE(head_ptr, tmp_buck);
-                if (*inserted_head == NULL) {
-                    *inserted_head = tmp_buck;
-                }
-            }
-            else if (!strcmp(tag, "encoding")) {
-                if (!strcasecmp(tag_val, "none")) encode = E_NONE;
-                else if (!strcasecmp(tag_val, "url")) encode = E_URL;
-                else if (!strcasecmp(tag_val, "entity")) encode = E_ENTITY;
-                else {
-                    ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                           "unknown value \"%s\" to parameter \"encoding\" of "
-                           "tag echo in %s", tag_val, r->filename);
-                    CREATE_ERROR_BUCKET(ctx, tmp_buck, head_ptr, 
-                                        *inserted_head);
-                }
-            }
-            else {
-                ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                            "unknown parameter \"%s\" in tag echo of %s",
-                            tag, r->filename);
-                CREATE_ERROR_BUCKET(ctx, tmp_buck, head_ptr, *inserted_head);
-            }
-
-        }
-    }
-    return 0;
-}
-
-/* error and tf must point to a string with room for at 
- * least MAX_STRING_LEN characters 
- */
-static int handle_config(include_ctx_t *ctx, apr_bucket_brigade **bb, 
-                         request_rec *r, ap_filter_t *f, apr_bucket *head_ptr, 
-                         apr_bucket **inserted_head)
-{
-    char *tag     = NULL;
-    char *tag_val = NULL;
-    char *parsed_string;
-    apr_table_t *env = r->subprocess_env;
-
-    *inserted_head = NULL;
-    if (ctx->flags & FLAG_PRINTING) {
-        while (1) {
-            ap_ssi_get_tag_and_value(ctx, &tag, &tag_val, 0);
-            if (tag_val == NULL) {
-                if (tag == NULL) {
-                    return 0;  /* Reached the end of the string. */
-                }
-                else {
-                    return 1;  /* tags must have values. */
-                }
-            }
-            if (!strcmp(tag, "errmsg")) {
-                if (ctx->error_str_override == NULL) {
-                    ctx->error_str_override = (char *)apr_palloc(ctx->pool,
-                                                              MAX_STRING_LEN);
-                    ctx->error_str = ctx->error_str_override;
-                }
-                ap_ssi_parse_string(r, ctx, tag_val, ctx->error_str_override,
-                                    MAX_STRING_LEN, 0);
-            }
-            else if (!strcmp(tag, "timefmt")) {
-                apr_time_t date = r->request_time;
-                if (ctx->time_str_override == NULL) {
-                    ctx->time_str_override = (char *)apr_palloc(ctx->pool,
-                                                              MAX_STRING_LEN);
-                    ctx->time_str = ctx->time_str_override;
-                }
-                ap_ssi_parse_string(r, ctx, tag_val, ctx->time_str_override,
-                                    MAX_STRING_LEN, 0);
-                apr_table_setn(env, "DATE_LOCAL", ap_ht_time(r->pool, date, 
-                               ctx->time_str, 0));
-                apr_table_setn(env, "DATE_GMT", ap_ht_time(r->pool, date, 
-                               ctx->time_str, 1));
-                apr_table_setn(env, "LAST_MODIFIED",
-                               ap_ht_time(r->pool, r->finfo.mtime, 
-                               ctx->time_str, 0));
-            }
-            else if (!strcmp(tag, "sizefmt")) {
-                parsed_string = ap_ssi_parse_string(r, ctx, tag_val, NULL, 
-                                                    MAX_STRING_LEN, 0);
-                decodehtml(parsed_string);
-                if (!strcmp(parsed_string, "bytes")) {
-                    ctx->flags |= FLAG_SIZE_IN_BYTES;
-                }
-                else if (!strcmp(parsed_string, "abbrev")) {
-                    ctx->flags &= FLAG_SIZE_ABBREV;
-                }
-            }
-            else {
-                apr_bucket *tmp_buck;
-
-                ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                              "unknown parameter \"%s\" to tag config in %s",
-                              tag, r->filename);
-                CREATE_ERROR_BUCKET(ctx, tmp_buck, head_ptr, *inserted_head);
-            }
-        }
-    }
-    return 0;
-}
-
-
-static int find_file(request_rec *r, const char *directive, const char *tag,
-                     char *tag_val, apr_finfo_t *finfo)
-{
-    char *to_send = tag_val;
-    request_rec *rr = NULL;
-    int ret=0;
-    char *error_fmt = NULL;
-    apr_status_t rv = APR_SUCCESS;
-
-    if (!strcmp(tag, "file")) {
-        /* XXX: Port to apr_filepath_merge
-         * be safe; only files in this directory or below allowed 
-         */
-        if (!is_only_below(tag_val)) {
-            error_fmt = "unable to access file \"%s\" "
-                        "in parsed file %s";
-        }
-        else {
-            ap_getparents(tag_val);    /* get rid of any nasties */
-
-            /* note: it is okay to pass NULL for the "next filter" since
-               we never attempt to "run" this sub request. */
-            rr = ap_sub_req_lookup_file(tag_val, r, NULL);
-
-            if (rr->status == HTTP_OK && rr->finfo.filetype != 0) {
-                to_send = rr->filename;
-                if ((rv = apr_stat(finfo, to_send, 
-                    APR_FINFO_GPROT | APR_FINFO_MIN, rr->pool)) != APR_SUCCESS
-                    && rv != APR_INCOMPLETE) {
-                    error_fmt = "unable to get information about \"%s\" "
-                        "in parsed file %s";
-                }
-            }
-            else {
-                error_fmt = "unable to lookup information about \"%s\" "
-                            "in parsed file %s";
-            }
-        }
-
-        if (error_fmt) {
-            ret = -1;
-            ap_log_rerror(APLOG_MARK, APLOG_ERR | (rv ? 0 : APLOG_NOERRNO),
-                          rv, r, error_fmt, to_send, r->filename);
-        }
-
-        if (rr) ap_destroy_sub_req(rr);
-        
-        return ret;
-    }
-    else if (!strcmp(tag, "virtual")) {
-        /* note: it is okay to pass NULL for the "next filter" since
-           we never attempt to "run" this sub request. */
-        rr = ap_sub_req_lookup_uri(tag_val, r, NULL);
-
-        if (rr->status == HTTP_OK && rr->finfo.filetype != 0) {
-            memcpy((char *) finfo, (const char *) &rr->finfo,
-                   sizeof(rr->finfo));
-            ap_destroy_sub_req(rr);
-            return 0;
-        }
-        else {
-            ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                        "unable to get information about \"%s\" "
-                        "in parsed file %s",
-                        tag_val, r->filename);
-            ap_destroy_sub_req(rr);
-            return -1;
-        }
-    }
-    else {
-        ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                    "unknown parameter \"%s\" to tag %s in %s",
-                    tag, directive, r->filename);
-        return -1;
-    }
-}
-
-static int handle_fsize(include_ctx_t *ctx, apr_bucket_brigade **bb, 
-                        request_rec *r, ap_filter_t *f, apr_bucket *head_ptr, 
-                        apr_bucket **inserted_head)
-{
-    char *tag     = NULL;
-    char *tag_val = NULL;
-    apr_finfo_t  finfo;
-    apr_size_t  s_len;
-    apr_bucket   *tmp_buck;
-    char *parsed_string;
-
-    *inserted_head = NULL;
-    if (ctx->flags & FLAG_PRINTING) {
-        while (1) {
-            ap_ssi_get_tag_and_value(ctx, &tag, &tag_val, 1);
-            if (tag_val == NULL) {
-                if (tag == NULL) {
-                    return 0;
-                }
-                else {
-                    return 1;
-                }
-            }
-            else {
-                parsed_string = ap_ssi_parse_string(r, ctx, tag_val, NULL, 
-                                                    MAX_STRING_LEN, 0);
-                if (!find_file(r, "fsize", tag, parsed_string, &finfo)) {
-                    /* XXX: if we *know* we're going to have to copy the
-                     * thing off of the stack anyway, why not palloc buff
-                     * instead of sticking it on the stack; then we can just
-                     * use a pool bucket and skip the copy
-                     */
-                    char buff[50];
-
-                    if (!(ctx->flags & FLAG_SIZE_IN_BYTES)) {
-                        apr_strfsize(finfo.size, buff);
-                        s_len = strlen (buff);
-                    }
-                    else {
-                        int l, x, pos = 0;
-                        char tmp_buff[50];
-
-                        apr_snprintf(tmp_buff, sizeof(tmp_buff), 
-                                     "%" APR_OFF_T_FMT, finfo.size);
-                        l = strlen(tmp_buff);    /* grrr */
-                        for (x = 0; x < l; x++) {
-                            if (x && (!((l - x) % 3))) {
-                                buff[pos++] = ',';
-                            }
-                            buff[pos++] = tmp_buff[x];
-                        }
-                        buff[pos] = '\0';
-                        s_len = pos;
-                    }
-
-                    tmp_buck = apr_bucket_heap_create(buff, s_len, 1);
-                    APR_BUCKET_INSERT_BEFORE(head_ptr, tmp_buck);
-                    if (*inserted_head == NULL) {
-                        *inserted_head = tmp_buck;
-                    }
-                }
-                else {
-                    CREATE_ERROR_BUCKET(ctx, tmp_buck, head_ptr, 
-                                        *inserted_head);
-                }
-            }
-        }
-    }
-    return 0;
-}
-
-static int handle_flastmod(include_ctx_t *ctx, apr_bucket_brigade **bb, 
-                           request_rec *r, ap_filter_t *f, 
-                           apr_bucket *head_ptr, apr_bucket **inserted_head)
-{
-    char *tag     = NULL;
-    char *tag_val = NULL;
-    apr_finfo_t  finfo;
-    apr_size_t  t_len;
-    apr_bucket   *tmp_buck;
-    char *parsed_string;
-
-    *inserted_head = NULL;
-    if (ctx->flags & FLAG_PRINTING) {
-        while (1) {
-            ap_ssi_get_tag_and_value(ctx, &tag, &tag_val, 1);
-            if (tag_val == NULL) {
-                if (tag == NULL) {
-                    return 0;
-                }
-                else {
-                    return 1;
-                }
-            }
-            else {
-                parsed_string = ap_ssi_parse_string(r, ctx, tag_val, NULL, 
-                                                    MAX_STRING_LEN, 0);
-                if (!find_file(r, "flastmod", tag, parsed_string, &finfo)) {
-                    char *t_val;
-
-                    t_val = ap_ht_time(r->pool, finfo.mtime, ctx->time_str, 0);
-                    t_len = strlen(t_val);
-
-                    tmp_buck = apr_bucket_pool_create(t_val, t_len, r->pool);
-                    APR_BUCKET_INSERT_BEFORE(head_ptr, tmp_buck);
-                    if (*inserted_head == NULL) {
-                        *inserted_head = tmp_buck;
-                    }
-                }
-                else {
-                    CREATE_ERROR_BUCKET(ctx, tmp_buck, head_ptr, 
-                                        *inserted_head);
-                }
-            }
-        }
-    }
-    return 0;
-}
-
-static int re_check(request_rec *r, include_ctx_t *ctx, 
-                    char *string, char *rexp)
-{
-    regex_t *compiled;
-    const apr_size_t nres = sizeof(*ctx->re_result) / sizeof(regmatch_t);
-    int regex_error;
-
-    compiled = ap_pregcomp(r->pool, rexp, REG_EXTENDED | REG_NOSUB);
-    if (compiled == NULL) {
-        ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                      "unable to compile pattern \"%s\"", rexp);
-        return -1;
-    }
-    if (!ctx->re_result) {
-        ctx->re_result = apr_pcalloc(r->pool, sizeof(*ctx->re_result));
-    }
-    ctx->re_string = string;
-    regex_error = ap_regexec(compiled, string, nres, *ctx->re_result, 0);
-    ap_pregfree(r->pool, compiled);
-    return (!regex_error);
-}
-
-enum token_type {
-    token_string, token_re,
-    token_and, token_or, token_not, token_eq, token_ne,
-    token_rbrace, token_lbrace, token_group,
-    token_ge, token_le, token_gt, token_lt
-};
-struct token {
-    enum token_type type;
-    char* value;
-};
-
-static const char *get_ptoken(request_rec *r, const char *string, 
-                              struct token *token, int *unmatched)
-{
-    char ch;
-    int next = 0;
-    char qs = 0;
-    int tkn_fnd = 0;
-
-    token->value = NULL;
-
-    /* Skip leading white space */
-    if (string == (char *) NULL) {
-        return (char *) NULL;
-    }
-    while ((ch = *string++)) {
-        if (!apr_isspace(ch)) {
-            break;
-        }
-    }
-    if (ch == '\0') {
-        return (char *) NULL;
-    }
-
-    token->type = token_string; /* the default type */
-    switch (ch) {
-    case '(':
-        token->type = token_lbrace;
-        return (string);
-    case ')':
-        token->type = token_rbrace;
-        return (string);
-    case '=':
-        token->type = token_eq;
-        return (string);
-    case '!':
-        if (*string == '=') {
-            token->type = token_ne;
-            return (string + 1);
-        }
-        else {
-            token->type = token_not;
-            return (string);
-        }
-    case '\'':
-        /* already token->type == token_string */
-        qs = '\'';
-        break;
-    case '/':
-        token->type = token_re;
-        qs = '/';
-        break;
-    case '|':
-        if (*string == '|') {
-            token->type = token_or;
-            return (string + 1);
-        }
-        break;
-    case '&':
-        if (*string == '&') {
-            token->type = token_and;
-            return (string + 1);
-        }
-        break;
-    case '>':
-        if (*string == '=') {
-            token->type = token_ge;
-            return (string + 1);
-        }
-        else {
-            token->type = token_gt;
-            return (string);
-        }
-    case '<':
-        if (*string == '=') {
-            token->type = token_le;
-            return (string + 1);
-        }
-        else {
-            token->type = token_lt;
-            return (string);
-        }
-    default:
-        /* already token->type == token_string */
-        break;
-    }
-    /* We should only be here if we are in a string */
-    token->value = apr_palloc(r->pool, strlen(string) + 2); /* 2 for ch plus
-                                                               trailing null */
-    if (!qs) {
-        token->value[next++] = ch;
-    }
-
-    /* 
-     * I used the ++string throughout this section so that string
-     * ends up pointing to the next token and I can just return it
-     */
-    for (ch = *string; ((ch != '\0') && (!tkn_fnd)); ch = *++string) {
-        if (ch == '\\') {
-            if ((ch = *++string) == '\0') {
-                tkn_fnd = 1;
-            }
-            else {
-                token->value[next++] = ch;
-            }
-        }
-        else {
-            if (!qs) {
-                if (apr_isspace(ch)) {
-                    tkn_fnd = 1;
-                }
-                else {
-                    switch (ch) {
-                    case '(':
-                    case ')':
-                    case '=':
-                    case '!':
-                    case '<':
-                    case '>':
-                        tkn_fnd = 1;
-                        break;
-                    case '|':
-                        if (*(string + 1) == '|') {
-                            tkn_fnd = 1;
-                        }
-                        break;
-                    case '&':
-                        if (*(string + 1) == '&') {
-                            tkn_fnd = 1;
-                        }
-                        break;
-                    }
-                    if (!tkn_fnd) {
-                        token->value[next++] = ch;
-                    }
-                }
-            }
-            else {
-                if (ch == qs) {
-                    qs = 0;
-                    tkn_fnd = 1;
-                }
-                else {
-                    token->value[next++] = ch;
-                }
-            }
-        }
-    }
-
-    /* If qs is still set, we have an unmatched quote */
-    if (qs) {
-        *unmatched = 1;
-        next = 0;
-    }
-    token->value[next] = '\0';
-
-    return (string);
-}
-
-
-/* there is an implicit assumption here that expr is at most MAX_STRING_LEN-1
- * characters long...
- */
-static int parse_expr(request_rec *r, include_ctx_t *ctx, const char *expr,
-                      int *was_error, int *was_unmatched, char *debug)
-{
-    struct parse_node {
-        struct parse_node *left, *right, *parent;
-        struct token token;
-        int value, done;
-    } *root, *current, *new;
-    const char *parse;
-    char* buffer;
-    int retval = 0;
-    apr_size_t debug_pos = 0;
-
-    debug[debug_pos] = '\0';
-    *was_error       = 0;
-    *was_unmatched   = 0;
-    if ((parse = expr) == (char *) NULL) {
-        return (0);
-    }
-    root = current = (struct parse_node *) NULL;
-
-    /* Create Parse Tree */
-    while (1) {
-        new = (struct parse_node *) apr_palloc(r->pool,
-                                           sizeof(struct parse_node));
-        new->parent = new->left = new->right = (struct parse_node *) NULL;
-        new->done = 0;
-        if ((parse = get_ptoken(r, parse, &new->token, was_unmatched)) == 
-            (char *) NULL) {
-            break;
-        }
-        switch (new->token.type) {
-
-        case token_string:
-#ifdef DEBUG_INCLUDE
-            debug_pos += sprintf (&debug[debug_pos], 
-                                  "     Token: string (%s)\n", 
-                                  new->token.value);
-#endif
-            if (current == (struct parse_node *) NULL) {
-                root = current = new;
-                break;
-            }
-            switch (current->token.type) {
-            case token_string:
-                current->token.value = apr_pstrcat(r->pool,
-                                                   current->token.value,
-                                                   current->token.value[0] ? " " : "",
-                                                   new->token.value,
-                                                   NULL);
-                                                   
-                break;
-            case token_eq:
-            case token_ne:
-            case token_and:
-            case token_or:
-            case token_lbrace:
-            case token_not:
-            case token_ge:
-            case token_gt:
-            case token_le:
-            case token_lt:
-                new->parent = current;
-                current = current->right = new;
-                break;
-            default:
-                ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                            "Invalid expression \"%s\" in file %s",
-                            expr, r->filename);
-                *was_error = 1;
-                return retval;
-            }
-            break;
-
-        case token_re:
-#ifdef DEBUG_INCLUDE
-            debug_pos += sprintf (&debug[debug_pos], 
-                                  "     Token: regex (%s)\n", 
-                                  new->token.value);
-#endif
-            if (current == (struct parse_node *) NULL) {
-                root = current = new;
-                break;
-            }
-            switch (current->token.type) {
-            case token_eq:
-            case token_ne:
-            case token_and:
-            case token_or:
-            case token_lbrace:
-            case token_not:
-                new->parent = current;
-                current = current->right = new;
-                break;
-            default:
-                ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                            "Invalid expression \"%s\" in file %s",
-                            expr, r->filename);
-                *was_error = 1;
-                return retval;
-            }
-            break;
-
-        case token_and:
-        case token_or:
-#ifdef DEBUG_INCLUDE
-            memcpy (&debug[debug_pos], "     Token: and/or\n",
-                    sizeof ("     Token: and/or\n"));
-            debug_pos += sizeof ("     Token: and/or\n");
-#endif
-            if (current == (struct parse_node *) NULL) {
-                ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                            "Invalid expression \"%s\" in file %s",
-                            expr, r->filename);
-                *was_error = 1;
-                return retval;
-            }
-            /* Percolate upwards */
-            while (current != (struct parse_node *) NULL) {
-                switch (current->token.type) {
-                case token_string:
-                case token_re:
-                case token_group:
-                case token_not:
-                case token_eq:
-                case token_ne:
-                case token_and:
-                case token_or:
-                case token_ge:
-                case token_gt:
-                case token_le:
-                case token_lt:
-                    current = current->parent;
-                    continue;
-                case token_lbrace:
-                    break;
-                default:
-                    ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                                "Invalid expression \"%s\" in file %s",
-                                expr, r->filename);
-                    *was_error = 1;
-                    return retval;
-                }
-                break;
-            }
-            if (current == (struct parse_node *) NULL) {
-                new->left = root;
-                new->left->parent = new;
-                new->parent = (struct parse_node *) NULL;
-                root = new;
-            }
-            else {
-                new->left = current->right;
-                current->right = new;
-                new->parent = current;
-            }
-            current = new;
-            break;
-
-        case token_not:
-#ifdef DEBUG_INCLUDE
-            memcpy(&debug[debug_pos], "     Token: not\n",
-                    sizeof("     Token: not\n"));
-            debug_pos += sizeof("     Token: not\n");
-#endif
-            if (current == (struct parse_node *) NULL) {
-                root = current = new;
-                break;
-            }
-            /* Percolate upwards */
-            while (current != (struct parse_node *) NULL) {
-                switch (current->token.type) {
-                case token_not:
-                case token_eq:
-                case token_ne:
-                case token_and:
-                case token_or:
-                case token_lbrace:
-                case token_ge:
-                case token_gt:
-                case token_le:
-                case token_lt:
-                    break;
-                default:
-                    ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                                  "Invalid expression \"%s\" in file %s",
-                                  expr, r->filename);
-                    *was_error = 1;
-                    return retval;
-                }
-                break;
-            }
-            if (current == (struct parse_node *) NULL) {
-                new->left = root;
-                new->left->parent = new;
-                new->parent = (struct parse_node *) NULL;
-                root = new;
-            }
-            else {
-                new->left = current->right;
-                current->right = new;
-                new->parent = current;
-            }
-            current = new;
-            break;
-
-        case token_eq:
-        case token_ne:
-        case token_ge:
-        case token_gt:
-        case token_le:
-        case token_lt:
-#ifdef DEBUG_INCLUDE
-            memcpy(&debug[debug_pos], "     Token: eq/ne/ge/gt/le/lt\n",
-                    sizeof("     Token: eq/ne/ge/gt/le/lt\n"));
-            debug_pos += sizeof("     Token: eq/ne/ge/gt/le/lt\n");
-#endif
-            if (current == (struct parse_node *) NULL) {
-                ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                              "Invalid expression \"%s\" in file %s",
-                              expr, r->filename);
-                *was_error = 1;
-                return retval;
-            }
-            /* Percolate upwards */
-            while (current != (struct parse_node *) NULL) {
-                switch (current->token.type) {
-                case token_string:
-                case token_re:
-                case token_group:
-                    current = current->parent;
-                    continue;
-                case token_lbrace:
-                case token_and:
-                case token_or:
-                    break;
-                case token_not:
-                case token_eq:
-                case token_ne:
-                case token_ge:
-                case token_gt:
-                case token_le:
-                case token_lt:
-                default:
-                    ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                                "Invalid expression \"%s\" in file %s",
-                                expr, r->filename);
-                    *was_error = 1;
-                    return retval;
-                }
-                break;
-            }
-            if (current == (struct parse_node *) NULL) {
-                new->left = root;
-                new->left->parent = new;
-                new->parent = (struct parse_node *) NULL;
-                root = new;
-            }
-            else {
-                new->left = current->right;
-                current->right = new;
-                new->parent = current;
-            }
-            current = new;
-            break;
-
-        case token_rbrace:
-#ifdef DEBUG_INCLUDE
-            memcpy (&debug[debug_pos], "     Token: rbrace\n",
-                    sizeof ("     Token: rbrace\n"));
-            debug_pos += sizeof ("     Token: rbrace\n");
-#endif
-            while (current != (struct parse_node *) NULL) {
-                if (current->token.type == token_lbrace) {
-                    current->token.type = token_group;
-                    break;
-                }
-                current = current->parent;
-            }
-            if (current == (struct parse_node *) NULL) {
-                ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                            "Unmatched ')' in \"%s\" in file %s",
-                            expr, r->filename);
-                *was_error = 1;
-                return retval;
-            }
-            break;
-
-        case token_lbrace:
-#ifdef DEBUG_INCLUDE
-            memcpy (&debug[debug_pos], "     Token: lbrace\n",
-                    sizeof ("     Token: lbrace\n"));
-            debug_pos += sizeof ("     Token: lbrace\n");
-#endif
-            if (current == (struct parse_node *) NULL) {
-                root = current = new;
-                break;
-            }
-            /* Percolate upwards */
-            while (current != (struct parse_node *) NULL) {
-                switch (current->token.type) {
-                case token_not:
-                case token_eq:
-                case token_ne:
-                case token_and:
-                case token_or:
-                case token_lbrace:
-                case token_ge:
-                case token_gt:
-                case token_le:
-                case token_lt:
-                    break;
-                case token_string:
-                case token_re:
-                case token_group:
-                default:
-                    ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                                "Invalid expression \"%s\" in file %s",
-                                expr, r->filename);
-                    *was_error = 1;
-                    return retval;
-                }
-                break;
-            }
-            if (current == (struct parse_node *) NULL) {
-                new->left = root;
-                new->left->parent = new;
-                new->parent = (struct parse_node *) NULL;
-                root = new;
-            }
-            else {
-                new->left = current->right;
-                current->right = new;
-                new->parent = current;
-            }
-            current = new;
-            break;
-        default:
-            break;
-        }
-    }
-
-    /* Evaluate Parse Tree */
-    current = root;
-    while (current != (struct parse_node *) NULL) {
-        switch (current->token.type) {
-        case token_string:
-#ifdef DEBUG_INCLUDE
-            memcpy (&debug[debug_pos], "     Evaluate string\n",
-                    sizeof ("     Evaluate string\n"));
-            debug_pos += sizeof ("     Evaluate string\n");
-#endif
-            buffer = ap_ssi_parse_string(r, ctx, current->token.value, NULL, 
-                                         MAX_STRING_LEN, 0);
-            current->token.value = buffer;
-            current->value = (current->token.value[0] != '\0');
-            current->done = 1;
-            current = current->parent;
-            break;
-
-        case token_re:
-            ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                          "No operator before regex of expr \"%s\" in file %s",
-                          expr, r->filename);
-            *was_error = 1;
-            return retval;
-
-        case token_and:
-        case token_or:
-#ifdef DEBUG_INCLUDE
-            memcpy(&debug[debug_pos], "     Evaluate and/or\n",
-                    sizeof("     Evaluate and/or\n"));
-            debug_pos += sizeof("     Evaluate and/or\n");
-#endif
-            if (current->left  == (struct parse_node *) NULL ||
-                current->right == (struct parse_node *) NULL) {
-                ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                              "Invalid expression \"%s\" in file %s",
-                              expr, r->filename);
-                *was_error = 1;
-                return retval;
-            }
-            if (!current->left->done) {
-                switch (current->left->token.type) {
-                case token_string:
-                    buffer = ap_ssi_parse_string(r, ctx, current->left->token.value,
-                                                 NULL, MAX_STRING_LEN, 0);
-                    current->left->token.value = buffer;
-                    current->left->value = 
-                                       (current->left->token.value[0] != '\0');
-                    current->left->done = 1;
-                    break;
-                default:
-                    current = current->left;
-                    continue;
-                }
-            }
-            if (!current->right->done) {
-                switch (current->right->token.type) {
-                case token_string:
-                    buffer = ap_ssi_parse_string(r, ctx, current->right->token.value,
-                                                 NULL, MAX_STRING_LEN, 0);
-                    current->right->token.value = buffer;
-                    current->right->value = 
-                                      (current->right->token.value[0] != '\0');
-                    current->right->done = 1;
-                    break;
-                default:
-                    current = current->right;
-                    continue;
-                }
-            }
-#ifdef DEBUG_INCLUDE
-            debug_pos += sprintf (&debug[debug_pos], "     Left: %c\n",
-                                  current->left->value ? '1' : '0');
-            debug_pos += sprintf (&debug[debug_pos], "     Right: %c\n",
-                                  current->right->value ? '1' : '0');
-#endif
-            if (current->token.type == token_and) {
-                current->value = current->left->value && current->right->value;
-            }
-            else {
-                current->value = current->left->value || current->right->value;
-            }
-#ifdef DEBUG_INCLUDE
-            debug_pos += sprintf (&debug[debug_pos], "     Returning %c\n",
-                                  current->value ? '1' : '0');
-#endif
-            current->done = 1;
-            current = current->parent;
-            break;
-
-        case token_eq:
-        case token_ne:
-#ifdef DEBUG_INCLUDE
-            memcpy (&debug[debug_pos], "     Evaluate eq/ne\n",
-                    sizeof ("     Evaluate eq/ne\n"));
-            debug_pos += sizeof ("     Evaluate eq/ne\n");
-#endif
-            if ((current->left == (struct parse_node *) NULL) ||
-                (current->right == (struct parse_node *) NULL) ||
-                (current->left->token.type != token_string) ||
-                ((current->right->token.type != token_string) &&
-                 (current->right->token.type != token_re))) {
-                ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                            "Invalid expression \"%s\" in file %s",
-                            expr, r->filename);
-                *was_error = 1;
-                return retval;
-            }
-            buffer = ap_ssi_parse_string(r, ctx, current->left->token.value,
-                                         NULL, MAX_STRING_LEN, 0);
-            current->left->token.value = buffer;
-            buffer = ap_ssi_parse_string(r, ctx, current->right->token.value,
-                                         NULL, MAX_STRING_LEN, 0);
-            current->right->token.value = buffer;
-            if (current->right->token.type == token_re) {
-#ifdef DEBUG_INCLUDE
-                debug_pos += sprintf (&debug[debug_pos],
-                                      "     Re Compare (%s) with /%s/\n",
-                                      current->left->token.value,
-                                      current->right->token.value);
-#endif
-                current->value =
-                    re_check(r, ctx, current->left->token.value,
-                             current->right->token.value);
-            }
-            else {
-#ifdef DEBUG_INCLUDE
-                debug_pos += sprintf (&debug[debug_pos],
-                                      "     Compare (%s) with (%s)\n",
-                                      current->left->token.value,
-                                      current->right->token.value);
-#endif
-                current->value =
-                    (strcmp(current->left->token.value,
-                            current->right->token.value) == 0);
-            }
-            if (current->token.type == token_ne) {
-                current->value = !current->value;
-            }
-#ifdef DEBUG_INCLUDE
-            debug_pos += sprintf (&debug[debug_pos], "     Returning %c\n",
-                                  current->value ? '1' : '0');
-#endif
-            current->done = 1;
-            current = current->parent;
-            break;
-        case token_ge:
-        case token_gt:
-        case token_le:
-        case token_lt:
-#ifdef DEBUG_INCLUDE
-            memcpy (&debug[debug_pos], "     Evaluate ge/gt/le/lt\n",
-                    sizeof ("     Evaluate ge/gt/le/lt\n"));
-            debug_pos += sizeof ("     Evaluate ge/gt/le/lt\n");
-#endif
-            if ((current->left == (struct parse_node *) NULL) ||
-                (current->right == (struct parse_node *) NULL) ||
-                (current->left->token.type != token_string) ||
-                (current->right->token.type != token_string)) {
-                ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                            "Invalid expression \"%s\" in file %s",
-                            expr, r->filename);
-                *was_error = 1;
-                return retval;
-            }
-            buffer = ap_ssi_parse_string(r, ctx, current->left->token.value,
-                                         NULL, MAX_STRING_LEN, 0);
-            current->left->token.value = buffer;
-            buffer = ap_ssi_parse_string(r, ctx, current->right->token.value,
-                                         NULL, MAX_STRING_LEN, 0);
-            current->right->token.value = buffer;
-#ifdef DEBUG_INCLUDE
-            debug_pos += sprintf (&debug[debug_pos],
-                                  "     Compare (%s) with (%s)\n",
-                                  current->left->token.value,
-                                  current->right->token.value);
-#endif
-            current->value =
-                strcmp(current->left->token.value,
-                       current->right->token.value);
-            if (current->token.type == token_ge) {
-                current->value = current->value >= 0;
-            }
-            else if (current->token.type == token_gt) {
-                current->value = current->value > 0;
-            }
-            else if (current->token.type == token_le) {
-                current->value = current->value <= 0;
-            }
-            else if (current->token.type == token_lt) {
-                current->value = current->value < 0;
-            }
-            else {
-                current->value = 0;     /* Don't return -1 if unknown token */
-            }
-#ifdef DEBUG_INCLUDE
-            debug_pos += sprintf (&debug[debug_pos], "     Returning %c\n",
-                                  current->value ? '1' : '0');
-#endif
-            current->done = 1;
-            current = current->parent;
-            break;
-
-        case token_not:
-            if (current->right != (struct parse_node *) NULL) {
-                if (!current->right->done) {
-                    current = current->right;
-                    continue;
-                }
-                current->value = !current->right->value;
-            }
-            else {
-                current->value = 0;
-            }
-#ifdef DEBUG_INCLUDE
-            debug_pos += sprintf (&debug[debug_pos], "     Evaluate !: %c\n",
-                                  current->value ? '1' : '0');
-#endif
-            current->done = 1;
-            current = current->parent;
-            break;
-
-        case token_group:
-            if (current->right != (struct parse_node *) NULL) {
-                if (!current->right->done) {
-                    current = current->right;
-                    continue;
-                }
-                current->value = current->right->value;
-            }
-            else {
-                current->value = 1;
-            }
-#ifdef DEBUG_INCLUDE
-            debug_pos += sprintf (&debug[debug_pos], "     Evaluate (): %c\n",
-                                  current->value ? '1' : '0');
-#endif
-            current->done = 1;
-            current = current->parent;
-            break;
-
-        case token_lbrace:
-            ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                        "Unmatched '(' in \"%s\" in file %s",
-                        expr, r->filename);
-            *was_error = 1;
-            return retval;
-
-        case token_rbrace:
-            ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                        "Unmatched ')' in \"%s\" in file %s",
-                        expr, r->filename);
-            *was_error = 1;
-            return retval;
-
-        default:
-            ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                          "bad token type");
-            *was_error = 1;
-            return retval;
-        }
-    }
-
-    retval = (root == (struct parse_node *) NULL) ? 0 : root->value;
-    return (retval);
-}
-
-/*-------------------------------------------------------------------------*/
-#ifdef DEBUG_INCLUDE
-
-/* XXX overlaying the static string pointed to by cond_txt isn't cool */
-
-#define MAX_DEBUG_SIZE MAX_STRING_LEN
-#define LOG_COND_STATUS(cntx, t_buck, h_ptr, ins_head, tag_text)           \
-{                                                                          \
-    char *cond_txt = "**** X     conditional_status=\"0\"\n";              \
-                                                                           \
-    if (cntx->flags & FLAG_COND_TRUE) {                                    \
-        cond_txt[31] = '1';                                                \
-    }                                                                      \
-    memcpy(&cond_txt[5], tag_text, sizeof(tag_text));                      \
-    t_buck = apr_bucket_heap_create(cond_txt, sizeof(cond_txt), 1);        \
-    APR_BUCKET_INSERT_BEFORE(h_ptr, t_buck);                               \
-                                                                           \
-    if (ins_head == NULL) {                                                \
-        ins_head = t_buck;                                                 \
-    }                                                                      \
-}
-#define DUMP_PARSE_EXPR_DEBUG(t_buck, h_ptr, d_buf, ins_head)            \
-{                                                                        \
-    if (d_buf[0] != '\0') {                                              \
-        t_buck = apr_bucket_heap_create(d_buf, strlen(d_buf), 1);        \
-        APR_BUCKET_INSERT_BEFORE(h_ptr, t_buck);                         \
-                                                                         \
-        if (ins_head == NULL) {                                          \
-            ins_head = t_buck;                                           \
-        }                                                                \
-    }                                                                    \
-}
-#else
-
-#define MAX_DEBUG_SIZE 10
-#define LOG_COND_STATUS(cntx, t_buck, h_ptr, ins_head, tag_text)
-#define DUMP_PARSE_EXPR_DEBUG(t_buck, h_ptr, d_buf, ins_head)
-
-#endif
-/*-------------------------------------------------------------------------*/
-
-/* pjr - These seem to allow expr="fred" expr="joe" where joe overwrites fred. */
-static int handle_if(include_ctx_t *ctx, apr_bucket_brigade **bb, 
-                     request_rec *r, ap_filter_t *f, apr_bucket *head_ptr, 
-                     apr_bucket **inserted_head)
-{
-    char *tag     = NULL;
-    char *tag_val = NULL;
-    char *expr    = NULL;
-    int   expr_ret, was_error, was_unmatched;
-    apr_bucket *tmp_buck;
-    char debug_buf[MAX_DEBUG_SIZE];
-
-    *inserted_head = NULL;
-    if (!ctx->flags & FLAG_PRINTING) {
-        ctx->if_nesting_level++;
-    }
-    else {
-        while (1) {
-            ap_ssi_get_tag_and_value(ctx, &tag, &tag_val, 0);
-            if (tag == NULL) {
-                if (expr == NULL) {
-                    ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                                  "missing expr in if statement: %s", 
-                                  r->filename);
-                    CREATE_ERROR_BUCKET(ctx, tmp_buck, head_ptr, 
-                                        *inserted_head);
-                    return 1;
-                }
-                expr_ret = parse_expr(r, ctx, expr, &was_error, 
-                                      &was_unmatched, debug_buf);
-                if (was_error) {
-                    CREATE_ERROR_BUCKET(ctx, tmp_buck, head_ptr, 
-                                        *inserted_head);
-                    return 1;
-                }
-                if (was_unmatched) {
-                    DUMP_PARSE_EXPR_DEBUG(tmp_buck, head_ptr, 
-                                          "\nUnmatched '\n", *inserted_head);
-                }
-                DUMP_PARSE_EXPR_DEBUG(tmp_buck, head_ptr, debug_buf, 
-                                      *inserted_head);
-                
-                if (expr_ret) {
-                    ctx->flags |= (FLAG_PRINTING | FLAG_COND_TRUE);
-                }
-                else {
-                    ctx->flags &= FLAG_CLEAR_PRINT_COND;
-                }
-                LOG_COND_STATUS(ctx, tmp_buck, head_ptr, *inserted_head, 
-                                "   if");
-                ctx->if_nesting_level = 0;
-                return 0;
-            }
-            else if (!strcmp(tag, "expr")) {
-                expr = tag_val;
-#ifdef DEBUG_INCLUDE
-                if (1) {
-                    apr_size_t d_len = 0;
-                    d_len = sprintf(debug_buf, "**** if expr=\"%s\"\n", expr);
-                    tmp_buck = apr_bucket_heap_create(debug_buf, d_len, 1);
-                    APR_BUCKET_INSERT_BEFORE(head_ptr, tmp_buck);
-
-                    if (*inserted_head == NULL) {
-                        *inserted_head = tmp_buck;
-                    }
-                }
-#endif
-            }
-            else {
-                ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                            "unknown parameter \"%s\" to tag if in %s", tag, 
-                            r->filename);
-                CREATE_ERROR_BUCKET(ctx, tmp_buck, head_ptr, *inserted_head);
-            }
-
-        }
-    }
-    return 0;
-}
-
-static int handle_elif(include_ctx_t *ctx, apr_bucket_brigade **bb, 
-                       request_rec *r, ap_filter_t *f, apr_bucket *head_ptr, 
-                       apr_bucket **inserted_head)
-{
-    char *tag     = NULL;
-    char *tag_val = NULL;
-    char *expr    = NULL;
-    int   expr_ret, was_error, was_unmatched;
-    apr_bucket *tmp_buck;
-    char debug_buf[MAX_DEBUG_SIZE];
-
-    *inserted_head = NULL;
-    if (!ctx->if_nesting_level) {
-        while (1) {
-            ap_ssi_get_tag_and_value(ctx, &tag, &tag_val, 0);
-            if (tag == '\0') {
-                LOG_COND_STATUS(ctx, tmp_buck, head_ptr, *inserted_head, 
-                                " elif");
-                
-                if (ctx->flags & FLAG_COND_TRUE) {
-                    ctx->flags &= FLAG_CLEAR_PRINTING;
-                    return (0);
-                }
-                if (expr == NULL) {
-                    ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                                  "missing expr in elif statement: %s", 
-                                  r->filename);
-                    CREATE_ERROR_BUCKET(ctx, tmp_buck, head_ptr, 
-                                        *inserted_head);
-                    return (1);
-                }
-                expr_ret = parse_expr(r, ctx, expr, &was_error, 
-                                      &was_unmatched, debug_buf);
-                if (was_error) {
-                    CREATE_ERROR_BUCKET(ctx, tmp_buck, head_ptr, 
-                                        *inserted_head);
-                    return 1;
-                }
-                if (was_unmatched) {
-                    DUMP_PARSE_EXPR_DEBUG(tmp_buck, head_ptr, 
-                                          "\nUnmatched '\n", *inserted_head);
-                }
-                DUMP_PARSE_EXPR_DEBUG(tmp_buck, head_ptr, debug_buf, 
-                                      *inserted_head);
-                
-                if (expr_ret) {
-                    ctx->flags |= (FLAG_PRINTING | FLAG_COND_TRUE);
-                }
-                else {
-                    ctx->flags &= FLAG_CLEAR_PRINT_COND;
-                }
-                LOG_COND_STATUS(ctx, tmp_buck, head_ptr, *inserted_head, 
-                                " elif");
-                return (0);
-            }
-            else if (!strcmp(tag, "expr")) {
-                expr = tag_val;
-#ifdef DEBUG_INCLUDE
-                if (1) {
-                    apr_size_t d_len = 0;
-                    d_len = sprintf(debug_buf, "**** elif expr=\"%s\"\n", expr);
-                    tmp_buck = apr_bucket_heap_create(debug_buf, d_len, 1);
-                    APR_BUCKET_INSERT_BEFORE(head_ptr, tmp_buck);
-
-                    if (*inserted_head == NULL) {
-                        *inserted_head = tmp_buck;
-                    }
-                }
-#endif
-            }
-            else {
-                ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                               "unknown parameter \"%s\" to tag if in %s", tag, 
-                               r->filename);
-                CREATE_ERROR_BUCKET(ctx, tmp_buck, head_ptr, *inserted_head);
-            }
-        }
-    }
-    return 0;
-}
-
-static int handle_else(include_ctx_t *ctx, apr_bucket_brigade **bb, 
-                       request_rec *r, ap_filter_t *f, apr_bucket *head_ptr, 
-                       apr_bucket **inserted_head)
-{
-    char *tag = NULL;
-    char *tag_val = NULL;
-    apr_bucket *tmp_buck;
-
-    *inserted_head = NULL;
-    if (!ctx->if_nesting_level) {
-        ap_ssi_get_tag_and_value(ctx, &tag, &tag_val, 1);
-        if ((tag != NULL) || (tag_val != NULL)) {
-            ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                        "else directive does not take tags in %s", r->filename);
-            if (ctx->flags & FLAG_PRINTING) {
-                CREATE_ERROR_BUCKET(ctx, tmp_buck, head_ptr, *inserted_head);
-            }
-            return -1;
-        }
-        else {
-            LOG_COND_STATUS(ctx, tmp_buck, head_ptr, *inserted_head, " else");
-            
-            if (ctx->flags & FLAG_COND_TRUE) {
-                ctx->flags &= FLAG_CLEAR_PRINTING;
-            }
-            else {
-                ctx->flags |= (FLAG_PRINTING | FLAG_COND_TRUE);
-            }
-            return 0;
-        }
-    }
-    return 0;
-}
-
-static int handle_endif(include_ctx_t *ctx, apr_bucket_brigade **bb, 
-                        request_rec *r, ap_filter_t *f, apr_bucket *head_ptr, 
-                        apr_bucket **inserted_head)
-{
-    char *tag     = NULL;
-    char *tag_val = NULL;
-    apr_bucket *tmp_buck;
-
-    *inserted_head = NULL;
-    if (!ctx->if_nesting_level) {
-        ap_ssi_get_tag_and_value(ctx, &tag, &tag_val, 1);
-        if ((tag != NULL) || (tag_val != NULL)) {
-            ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                       "endif directive does not take tags in %s", r->filename);
-            CREATE_ERROR_BUCKET(ctx, tmp_buck, head_ptr, *inserted_head);
-            return -1;
-        }
-        else {
-            LOG_COND_STATUS(ctx, tmp_buck, head_ptr, *inserted_head, "endif");
-            ctx->flags |= (FLAG_PRINTING | FLAG_COND_TRUE);
-            return 0;
-        }
-    }
-    else {
-        ctx->if_nesting_level--;
-        return 0;
-    }
-}
-
-static int handle_set(include_ctx_t *ctx, apr_bucket_brigade **bb, 
-                      request_rec *r, ap_filter_t *f, apr_bucket *head_ptr, 
-                      apr_bucket **inserted_head)
-{
-    char *tag     = NULL;
-    char *tag_val = NULL;
-    char *var     = NULL;
-    apr_bucket *tmp_buck;
-    char *parsed_string;
-    request_rec *sub = r->main;
-    apr_pool_t *p = r->pool;
-
-    /* we need to use the 'main' request pool to set notes as that is 
-     * a notes lifetime
-     */
-    while (sub) {
-        p = sub->pool;
-        sub = sub->main;
-    }
-
-    *inserted_head = NULL;
-    if (ctx->flags & FLAG_PRINTING) {
-        while (1) {
-            ap_ssi_get_tag_and_value(ctx, &tag, &tag_val, 1);
-            if ((tag == NULL) && (tag_val == NULL)) {
-                return 0;
-            }
-            else if (tag_val == NULL) {
-                return 1;
-            }
-            else if (!strcmp(tag, "var")) {
-                var = tag_val;
-            }
-            else if (!strcmp(tag, "value")) {
-                if (var == (char *) NULL) {
-                    ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                           "variable must precede value in set directive in %s",
-                           r->filename);
-                    CREATE_ERROR_BUCKET(ctx, tmp_buck, head_ptr, 
-                                        *inserted_head);
-                    return (-1);
-                }
-                parsed_string = ap_ssi_parse_string(r, ctx, tag_val, NULL, 
-                                                    MAX_STRING_LEN, 0);
-                apr_table_setn(r->subprocess_env, apr_pstrdup(p, var),
-                               apr_pstrdup(p, parsed_string));
-            }
-            else {
-                ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                            "Invalid tag for set directive in %s", r->filename);
-                CREATE_ERROR_BUCKET(ctx, tmp_buck, head_ptr, *inserted_head);
-                return -1;
-            }
-        }
-    }
-    return 0;
-}
-
-static int handle_printenv(include_ctx_t *ctx, apr_bucket_brigade **bb, 
-                           request_rec *r, ap_filter_t *f, 
-                           apr_bucket *head_ptr, apr_bucket **inserted_head)
-{
-    char *tag     = NULL;
-    char *tag_val = NULL;
-    apr_bucket *tmp_buck;
-
-    if (ctx->flags & FLAG_PRINTING) {
-        ap_ssi_get_tag_and_value(ctx, &tag, &tag_val, 1);
-        if ((tag == NULL) && (tag_val == NULL)) {
-            const apr_array_header_t *arr = apr_table_elts(r->subprocess_env);
-            const apr_table_entry_t *elts = (const apr_table_entry_t *)arr->elts;
-            int i;
-            const char *key_text, *val_text;
-            char *key_val, *next;
-            apr_size_t   k_len, v_len, kv_length;
-
-            *inserted_head = NULL;
-            for (i = 0; i < arr->nelts; ++i) {
-                key_text = ap_escape_html(r->pool, elts[i].key);
-                val_text = elts[i].val;
-                if (val_text == LAZY_VALUE) {
-                    val_text = add_include_vars_lazy(r, elts[i].key);
-                }
-                val_text = ap_escape_html(r->pool, elts[i].val);
-                k_len = strlen(key_text);
-                v_len = strlen(val_text);
-                kv_length = k_len + v_len + sizeof("=\n");
-                key_val = apr_palloc(r->pool, kv_length);
-                next = key_val;
-                memcpy(next, key_text, k_len);
-                next += k_len;
-                *next++ = '=';
-                memcpy(next, val_text, v_len);
-                next += v_len;
-                *next++ = '\n';
-                *next = 0;
-                tmp_buck = apr_bucket_pool_create(key_val, kv_length - 1,
-                                                  r->pool);
-                APR_BUCKET_INSERT_BEFORE(head_ptr, tmp_buck);
-                if (*inserted_head == NULL) {
-                    *inserted_head = tmp_buck;
-                }
-            }
-            return 0;
-        }
-        else {
-            ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                        "printenv directive does not take tags in %s", 
-                        r->filename);
-            CREATE_ERROR_BUCKET(ctx, tmp_buck, head_ptr, *inserted_head);
-            return -1;
-        }
-    }
-    return 0;
-}
-
-/* -------------------------- The main function --------------------------- */
-
-static apr_status_t send_parsed_content(apr_bucket_brigade **bb, 
-                                        request_rec *r, ap_filter_t *f)
-{
-    include_ctx_t *ctx = f->ctx;
-    apr_bucket *dptr = APR_BRIGADE_FIRST(*bb);
-    apr_bucket *tmp_dptr;
-    apr_bucket_brigade *tag_and_after;
-    apr_status_t rv = APR_SUCCESS;
-
-    if (r->args) {               /* add QUERY stuff to env cause it ain't yet */
-        char *arg_copy = apr_pstrdup(r->pool, r->args);
-
-        apr_table_setn(r->subprocess_env, "QUERY_STRING", r->args);
-        ap_unescape_url(arg_copy);
-        apr_table_setn(r->subprocess_env, "QUERY_STRING_UNESCAPED",
-                  ap_escape_shell_cmd(r->pool, arg_copy));
-    }
-
-    while (dptr != APR_BRIGADE_SENTINEL(*bb) && !APR_BUCKET_IS_EOS(dptr)) {
-        /* State to check for the STARTING_SEQUENCE. */
-        if ((ctx->state == PRE_HEAD) || (ctx->state == PARSE_HEAD)) {
-            int do_cleanup = 0;
-            apr_size_t cleanup_bytes = ctx->parse_pos;
-
-            tmp_dptr = find_start_sequence(dptr, ctx, *bb, &do_cleanup);
-            if (!APR_STATUS_IS_SUCCESS(ctx->status)) {
-                return ctx->status;
-            }
-
-            /* The few bytes stored in the ssi_tag_brigade turned out not to
-             * be a tag after all. This can only happen if the starting
-             * tag actually spans brigades. This should be very rare.
-             */
-            if ((do_cleanup) && (!APR_BRIGADE_EMPTY(ctx->ssi_tag_brigade))) {
-                apr_bucket *tmp_bkt;
-
-                tmp_bkt = apr_bucket_immortal_create(ctx->start_seq,
-                                                     cleanup_bytes);
-                APR_BRIGADE_INSERT_HEAD(*bb, tmp_bkt);
-                apr_brigade_cleanup(ctx->ssi_tag_brigade);
-            }
-
-            /* If I am inside a conditional (if, elif, else) that is false
-             *   then I need to throw away anything contained in it.
-             */
-            if ((!(ctx->flags & FLAG_PRINTING)) && (tmp_dptr != NULL) &&
-                (dptr != APR_BRIGADE_SENTINEL(*bb))) {
-                while ((dptr != APR_BRIGADE_SENTINEL(*bb)) &&
-                       (dptr != tmp_dptr)) {
-                    apr_bucket *free_bucket = dptr;
-
-                    dptr = APR_BUCKET_NEXT (dptr);
-                    apr_bucket_delete(free_bucket);
-                }
-            }
-
-            /* Adjust the current bucket position based on what was found... */
-            if ((tmp_dptr != NULL) && (ctx->state == PARSE_DIRECTIVE)) {
-                if (ctx->tag_start_bucket != NULL) {
-                    dptr = ctx->tag_start_bucket;
-                }
-                else {
-                    dptr = APR_BRIGADE_SENTINEL(*bb);
-                }
-            }
-            else if ((tmp_dptr != NULL) &&
-                     (ctx->output_now ||
-                      (ctx->bytes_parsed >= BYTE_COUNT_THRESHOLD))) {
-                /* Send the large chunk of pre-tag bytes...  */
-                tag_and_after = apr_brigade_split(*bb, tmp_dptr);
-                if (ctx->output_flush) {
-                    APR_BRIGADE_INSERT_TAIL(*bb, apr_bucket_flush_create());
-                }
-
-                rv = ap_pass_brigade(f->next, *bb);
-                if (rv != APR_SUCCESS) {
-                    return rv;
-                }
-                *bb  = tag_and_after;
-                dptr = tmp_dptr;
-                ctx->output_flush = 0;
-                ctx->bytes_parsed = 0;
-                ctx->output_now = 0;
-            }
-            else if (tmp_dptr == NULL) { 
-                /* There was no possible SSI tag in the
-                 * remainder of this brigade... */
-                dptr = APR_BRIGADE_SENTINEL(*bb);  
-            }
-        }
-
-        /* State to check for the ENDING_SEQUENCE. */
-        if (((ctx->state == PARSE_DIRECTIVE) ||
-             (ctx->state == PARSE_TAG)       ||
-             (ctx->state == PARSE_TAIL))       &&
-            (dptr != APR_BRIGADE_SENTINEL(*bb))) {
-            tmp_dptr = find_end_sequence(dptr, ctx, *bb);
-            if (!APR_STATUS_IS_SUCCESS(ctx->status)) {
-                return ctx->status;
-            }
-
-            if (tmp_dptr != NULL) {
-                dptr = tmp_dptr;  /* Adjust bucket pos... */
-                
-                /* If some of the tag has already been set aside then set
-                 * aside remainder of tag. Now the full tag is in 
-                 * ssi_tag_brigade.
-                 * If none has yet been set aside, then leave it all where it 
-                 * is.
-                 * In any event after this the entire set of tag buckets will 
-                 * be in one place or another.
-                 */
-                if (!APR_BRIGADE_EMPTY(ctx->ssi_tag_brigade)) {
-                    tag_and_after = apr_brigade_split(*bb, dptr);
-                    APR_BRIGADE_CONCAT(ctx->ssi_tag_brigade, *bb);
-                    *bb = tag_and_after;
-                }
-                else if (ctx->output_now ||
-                         (ctx->bytes_parsed >= BYTE_COUNT_THRESHOLD)) {
-                    SPLIT_AND_PASS_PRETAG_BUCKETS(*bb, ctx, f->next, rv);
-                    if (rv != APR_SUCCESS) {
-                        return rv;
-                    }
-                    ctx->output_flush = 0;
-                    ctx->output_now = 0;
-                }
-            }
-            else {
-                /* remainder of this brigade...    */
-                dptr = APR_BRIGADE_SENTINEL(*bb);  
-            }
-        }
-
-        /* State to processed the directive... */
-        if (ctx->state == PARSED) {
-            apr_bucket    *content_head = NULL, *tmp_bkt;
-            apr_size_t    tmp_i;
-            char          tmp_buf[TMP_BUF_SIZE];
-            int (*handle_func)(include_ctx_t *, apr_bucket_brigade **,
-                               request_rec *, ap_filter_t *, apr_bucket *,
-                               apr_bucket **);
-
-            /* By now the full tag (all buckets) should either be set aside into
-             *  ssi_tag_brigade or contained within the current bb. All tag
-             *  processing from here on can assume that.
-             */
-
-            /* At this point, everything between ctx->head_start_bucket and
-             * ctx->tail_start_bucket is an SSI
-             * directive, we just have to deal with it now.
-             */
-            if (get_combined_directive(ctx, r, *bb, tmp_buf,
-                                        TMP_BUF_SIZE) != APR_SUCCESS) {
-                ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                            "mod_include: error copying directive in %s",
-                            r->filename);
-                CREATE_ERROR_BUCKET(ctx, tmp_bkt, dptr, content_head);
-
-                /* DO CLEANUP HERE!!!!! */
-                tmp_dptr = ctx->head_start_bucket;
-                if (!APR_BRIGADE_EMPTY(ctx->ssi_tag_brigade)) {
-                    apr_brigade_cleanup(ctx->ssi_tag_brigade);
-                }
-                else {
-                    do {
-                        tmp_bkt  = tmp_dptr;
-                        tmp_dptr = APR_BUCKET_NEXT (tmp_dptr);
-                        apr_bucket_delete(tmp_bkt);
-                    } while ((tmp_dptr != dptr) &&
-                             (tmp_dptr != APR_BRIGADE_SENTINEL(*bb)));
-                }
-
-                return APR_SUCCESS;
-            }
-
-            /* Can't destroy the tag buckets until I'm done processing
-             * because the combined_tag might just be pointing to
-             * the contents of a single bucket!
-             */
-
-            /* Retrieve the handler function to be called for this directive 
-             * from the functions registered in the hash table.
-             * Need to lower case the directive for proper matching. Also need 
-             * to have it NULL terminated for proper hash matching.
-             */
-            for (tmp_i = 0; tmp_i < ctx->directive_length; tmp_i++) {
-                ctx->combined_tag[tmp_i] = 
-                                          apr_tolower(ctx->combined_tag[tmp_i]);
-            }
-            ctx->combined_tag[ctx->directive_length] = '\0';
-            ctx->curr_tag_pos = &ctx->combined_tag[ctx->directive_length+1];
-
-            handle_func = 
-                (include_handler_fn_t *)apr_hash_get(include_hash, 
-                                                     ctx->combined_tag, 
-                                                     ctx->directive_length);
-            if (handle_func != NULL) {
-                rv = (*handle_func)(ctx, bb, r, f, dptr, &content_head);
-                if ((rv != 0) && (rv != 1)) {
-                    return (rv);
-                }
-            }
-            else {
-                ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                              "unknown directive \"%s\" in parsed doc %s",
-                              ctx->combined_tag, r->filename);
-                CREATE_ERROR_BUCKET(ctx, tmp_bkt, dptr, content_head);
-            }
-
-            /* This chunk of code starts at the first bucket in the chain
-             * of tag buckets (assuming that by this point the bucket for
-             * the STARTING_SEQUENCE has been split) and loops through to
-             * the end of the tag buckets freeing them all.
-             *
-             * Remember that some part of this may have been set aside
-             * into the ssi_tag_brigade and the remainder (possibly as
-             * little as one byte) will be in the current brigade.
-             *
-             * The value of dptr should have been set during the
-             * PARSE_TAIL state to the first bucket after the
-             * ENDING_SEQUENCE.
-             *
-             * The value of content_head may have been set during processing
-             * of the directive. If so, the content was inserted in front
-             * of the dptr bucket. The inserted buckets should not be thrown
-             * away here, but they should also not be parsed later.
-             */
-            if (content_head == NULL) {
-                content_head = dptr;
-            }
-            tmp_dptr = ctx->head_start_bucket;
-            if (!APR_BRIGADE_EMPTY(ctx->ssi_tag_brigade)) {
-                apr_brigade_cleanup(ctx->ssi_tag_brigade);
-            }
-            else {
-                do {
-                    tmp_bkt  = tmp_dptr;
-                    tmp_dptr = APR_BUCKET_NEXT (tmp_dptr);
-                    apr_bucket_delete(tmp_bkt);
-                } while ((tmp_dptr != content_head) &&
-                         (tmp_dptr != APR_BRIGADE_SENTINEL(*bb)));
-            }
-            if (ctx->combined_tag == tmp_buf) {
-                ctx->combined_tag = NULL;
-            }
-
-            /* Don't reset the flags or the nesting level!!! */
-            ctx->parse_pos         = 0;
-            ctx->head_start_bucket = NULL;
-            ctx->head_start_index  = 0;
-            ctx->tag_start_bucket  = NULL;
-            ctx->tag_start_index   = 0;
-            ctx->tail_start_bucket = NULL;
-            ctx->tail_start_index  = 0;
-            ctx->curr_tag_pos      = NULL;
-            ctx->tag_length        = 0;
-            ctx->directive_length  = 0;
-
-            if (!APR_BRIGADE_EMPTY(ctx->ssi_tag_brigade)) {
-                apr_brigade_cleanup(ctx->ssi_tag_brigade);
-            }
-
-            ctx->state     = PRE_HEAD;
-        }
-    }
-
-    /* We have nothing more to send, stop now. */
-    if (dptr != APR_BRIGADE_SENTINEL(*bb) &&
-        APR_BUCKET_IS_EOS(dptr)) {
-        /* We might have something saved that we never completed, but send
-         * down unparsed.  This allows for <!-- at the end of files to be
-         * sent correctly. */
-        if (!APR_BRIGADE_EMPTY(ctx->ssi_tag_brigade)) {
-            APR_BRIGADE_CONCAT(ctx->ssi_tag_brigade, *bb);
-            return ap_pass_brigade(f->next, ctx->ssi_tag_brigade);
-        }
-        return ap_pass_brigade(f->next, *bb);
-    }
-
-    /* If I am in the middle of parsing an SSI tag then I need to set aside
-     *   the pertinent trailing buckets and pass on the initial part of the
-     *   brigade. The pertinent parts of the next brigades will be added to
-     *   these set aside buckets to form the whole tag and will be processed
-     *   once the whole tag has been found.
-     */
-    if (ctx->state == PRE_HEAD) {
-        /* Inside a false conditional (if, elif, else), so toss it all... */
-        if ((dptr != APR_BRIGADE_SENTINEL(*bb)) &&
-            (!(ctx->flags & FLAG_PRINTING))) {
-            apr_bucket *free_bucket;
-            do {
-                free_bucket = dptr;
-                dptr = APR_BUCKET_NEXT (dptr);
-                apr_bucket_delete(free_bucket);
-            } while (dptr != APR_BRIGADE_SENTINEL(*bb));
-        }
-        else { 
-            /* Otherwise pass it along...
-             * No SSI tags in this brigade... */
-            rv = ap_pass_brigade(f->next, *bb);  
-            if (rv != APR_SUCCESS) {
-                return rv;
-            }
-            ctx->bytes_parsed = 0;
-        }
-    }
-    else if (ctx->state == PARSED) {         /* Invalid internal condition... */
-        apr_bucket *content_head = NULL, *tmp_bkt;
-        ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                      "Invalid mod_include state during file %s", r->filename);
-        CREATE_ERROR_BUCKET(ctx, tmp_bkt, APR_BRIGADE_FIRST(*bb), content_head);
-    }
-    else {                    /* Entire brigade is middle chunk of SSI tag... */
-        if (!APR_BRIGADE_EMPTY(ctx->ssi_tag_brigade)) {
-            APR_BRIGADE_CONCAT(ctx->ssi_tag_brigade, *bb);
-        }
-        else {                  /* End of brigade contains part of SSI tag... */
-            if (ctx->head_start_index > 0) {
-                apr_bucket_split(ctx->head_start_bucket, ctx->head_start_index);
-                ctx->head_start_bucket = 
-                                        APR_BUCKET_NEXT(ctx->head_start_bucket);
-                ctx->head_start_index = 0;
-            }
-                           /* Set aside tag, pass pre-tag... */
-            tag_and_after = apr_brigade_split(*bb, ctx->head_start_bucket);
-            ap_save_brigade(f, &ctx->ssi_tag_brigade, &tag_and_after, r->pool);
-            rv = ap_pass_brigade(f->next, *bb);
-            if (rv != APR_SUCCESS) {
-                return rv;
-            }
-            ctx->bytes_parsed = 0;
-        }
-    }
-    return APR_SUCCESS;
-}
-
-static void *create_includes_dir_config(apr_pool_t *p, char *dummy)
-{
-    include_dir_config *result =
-        (include_dir_config *)apr_palloc(p, sizeof(include_dir_config));
-    enum xbithack *xbh = (enum xbithack *) apr_palloc(p, sizeof(enum xbithack));
-    *xbh = DEFAULT_XBITHACK;
-    result->default_error_msg = DEFAULT_ERROR_MSG;
-    result->default_time_fmt = DEFAULT_TIME_FORMAT;
-    result->xbithack = xbh;
-    return result;
-}
-
-static void *create_includes_server_config(apr_pool_t*p, server_rec *server)
-{
-    include_server_config *result =
-        (include_server_config *)apr_palloc(p, sizeof(include_server_config));
-    result->default_end_tag = ENDING_SEQUENCE;
-    result->default_start_tag =STARTING_SEQUENCE;
-    result->start_tag_len = sizeof(STARTING_SEQUENCE)-1;
-    /* compile the pattern used by find_start_sequence */
-    bndm_compile(&result->start_seq_pat, result->default_start_tag, 
-                 result->start_tag_len); 
-
-    result->undefinedEcho = apr_pstrdup(p,"(none)");
-    result->undefinedEchoLen = strlen( result->undefinedEcho);
-    return result; 
-}
-static const char *set_xbithack(cmd_parms *cmd, void *xbp, const char *arg)
-{
-    include_dir_config *conf = (include_dir_config *)xbp;
-
-    if (!strcasecmp(arg, "off")) {
-        *conf->xbithack = xbithack_off;
-    }
-    else if (!strcasecmp(arg, "on")) {
-        *conf->xbithack = xbithack_on;
-    }
-    else if (!strcasecmp(arg, "full")) {
-        *conf->xbithack = xbithack_full;
-    }
-    else {
-        return "XBitHack must be set to Off, On, or Full";
-    }
-
-    return NULL;
-}
-
-static apr_status_t includes_filter(ap_filter_t *f, apr_bucket_brigade *b)
-{
-    request_rec *r = f->r;
-    include_ctx_t *ctx = f->ctx;
-    request_rec *parent;
-    include_dir_config *conf = 
-                   (include_dir_config *)ap_get_module_config(r->per_dir_config,
-                                                              &include_module);
-
-    include_server_config *sconf= ap_get_module_config(r->server->module_config,
-                                                              &include_module);
-
-    if (!(ap_allow_options(r) & OPT_INCLUDES)) {
-        return ap_pass_brigade(f->next, b);
-    }
-
-    if (!f->ctx) {
-        f->ctx = ctx = apr_pcalloc(f->c->pool, sizeof(*ctx));
-        ctx->state = PRE_HEAD;
-        ctx->flags = (FLAG_PRINTING | FLAG_COND_TRUE);
-        if (ap_allow_options(r) & OPT_INCNOEXEC) {
-            ctx->flags |= FLAG_NO_EXEC;
-        }
-        ctx->ssi_tag_brigade = apr_brigade_create(f->c->pool);
-        ctx->status = APR_SUCCESS;
-
-        ctx->error_str = conf->default_error_msg;
-        ctx->time_str = conf->default_time_fmt;
-        ctx->pool = f->c->pool;
-        ctx->start_seq_pat = &sconf->start_seq_pat;
-        ctx->start_seq  = sconf->default_start_tag;
-        ctx->start_seq_len = sconf->start_tag_len;
-        ctx->end_seq = sconf->default_end_tag;
-    }
-    else {
-        ctx->bytes_parsed = 0;
-    }
-
-    if ((parent = ap_get_module_config(r->request_config, &include_module))) {
-        /* Kludge --- for nested includes, we want to keep the subprocess
-         * environment of the base document (for compatibility); that means
-         * torquing our own last_modified date as well so that the
-         * LAST_MODIFIED variable gets reset to the proper value if the
-         * nested document resets <!--#config timefmt -->.
-         */
-        r->subprocess_env = r->main->subprocess_env;
-        apr_pool_join(r->main->pool, r->pool);
-        r->finfo.mtime = r->main->finfo.mtime;
-    }
-    else {
-        /* we're not a nested include, so we create an initial
-         * environment */
-        ap_add_common_vars(r);
-        ap_add_cgi_vars(r);
-        add_include_vars(r, conf->default_time_fmt);
-    }
-    /* XXX: this is bogus, at some point we're going to do a subrequest,
-     * and when we do it we're going to be subjecting code that doesn't
-     * expect to be signal-ready to SIGALRM.  There is no clean way to
-     * fix this, except to put alarm support into BUFF. -djg
-     */
-
-    /* Always unset the content-length.  There is no way to know if
-     * the content will be modified at some point by send_parsed_content.
-     * It is very possible for us to not find any content in the first
-     * 9k of the file, but still have to modify the content of the file.
-     * If we are going to pass the file through send_parsed_content, then
-     * the content-length should just be unset.
-     */
-    apr_table_unset(f->r->headers_out, "Content-Length");
-
-    /* Always unset the ETag/Last-Modified fields - see RFC2616 - 13.3.4.
-     * We don't know if we are going to be including a file or executing
-     * a program which may change the Last-Modified header or make the 
-     * content completely dynamic.  Therefore, we can't support these
-     * headers.
-     * Exception: XBitHack full means we *should* set the Last-Modified field.
-     */
-    apr_table_unset(f->r->headers_out, "ETag");
-
-    /* Assure the platform supports Group protections */
-    if ((*conf->xbithack == xbithack_full)
-        && (r->finfo.valid & APR_FINFO_GPROT)
-        && (r->finfo.protection & APR_GEXECUTE)) {
-        ap_update_mtime(r, r->finfo.mtime);
-        ap_set_last_modified(r);
-    }
-    else {
-        apr_table_unset(f->r->headers_out, "Last-Modified");
-    }
-
-    return send_parsed_content(&b, r, f);
-}
-
-static void ap_register_include_handler(char *tag, include_handler_fn_t *func)
-{
-    apr_hash_set(include_hash, tag, strlen(tag), (const void *)func);
-}
-
-static int include_post_config(apr_pool_t *p, apr_pool_t *plog,
-                                apr_pool_t *ptemp, server_rec *s)
-{
-    include_hash = apr_hash_make(p);
-    
-    ssi_pfn_register = APR_RETRIEVE_OPTIONAL_FN(ap_register_include_handler);
-
-    if(ssi_pfn_register) {
-        ssi_pfn_register("if", handle_if);
-        ssi_pfn_register("set", handle_set);
-        ssi_pfn_register("else", handle_else);
-        ssi_pfn_register("elif", handle_elif);
-        ssi_pfn_register("echo", handle_echo);
-        ssi_pfn_register("endif", handle_endif);
-        ssi_pfn_register("fsize", handle_fsize);
-        ssi_pfn_register("config", handle_config);
-        ssi_pfn_register("include", handle_include);
-        ssi_pfn_register("flastmod", handle_flastmod);
-        ssi_pfn_register("printenv", handle_printenv);
-    }
-    return OK;
-}
-
-static const char *set_default_error_msg(cmd_parms *cmd, void *mconfig, const char *msg)
-{
-    include_dir_config *conf = (include_dir_config *)mconfig;
-    conf->default_error_msg = apr_pstrdup(cmd->pool, msg);
-    return NULL;
-}
-
-static const char *set_default_start_tag(cmd_parms *cmd, void *mconfig, const char *msg)
-{
-    include_server_config *conf;
-    conf= ap_get_module_config(cmd->server->module_config , &include_module);
-    conf->default_start_tag = apr_pstrdup(cmd->pool, msg);
-    conf->start_tag_len = strlen(conf->default_start_tag );
-    bndm_compile(&conf->start_seq_pat, conf->default_start_tag, 
-                 conf->start_tag_len); 
-
-    return NULL;
-}
-static const char *set_undefined_echo(cmd_parms *cmd, void *mconfig, const char *msg)
-{
-    include_server_config *conf;
-    conf = ap_get_module_config(cmd->server->module_config, &include_module);
-    conf->undefinedEcho = apr_pstrdup(cmd->pool, msg);
-    conf->undefinedEchoLen = strlen(msg);
-
-    return NULL;
-}
-
-
-static const char *set_default_end_tag(cmd_parms *cmd, void *mconfig, const char *msg)
-{
-    include_server_config *conf;
-    conf= ap_get_module_config(cmd->server->module_config , &include_module);
-    conf->default_end_tag = apr_pstrdup(cmd->pool, msg);
-
-    return NULL;
-}
-
-static const char *set_default_time_fmt(cmd_parms *cmd, void *mconfig, const char *fmt)
-{
-    include_dir_config *conf = (include_dir_config *)mconfig;
-    conf->default_time_fmt = apr_pstrdup(cmd->pool, fmt);
-    return NULL;
-}
-
-/*
- * Module definition and configuration data structs...
- */
-static const command_rec includes_cmds[] =
-{
-    AP_INIT_TAKE1("XBitHack", set_xbithack, NULL, OR_OPTIONS, 
-                  "Off, On, or Full"),
-    AP_INIT_TAKE1("SSIErrorMsg", set_default_error_msg, NULL, OR_ALL, 
-                  "a string"),
-    AP_INIT_TAKE1("SSITimeFormat", set_default_time_fmt, NULL, OR_ALL,
-                  "a strftime(3) formatted string"),
-    AP_INIT_TAKE1("SSIStartTag", set_default_start_tag, NULL, RSRC_CONF,
-                  "SSI Start String Tag"),
-    AP_INIT_TAKE1("SSIEndTag", set_default_end_tag, NULL, RSRC_CONF,
-                  "SSI End String Tag"),
-    AP_INIT_TAKE1("SSIUndefinedEcho", set_undefined_echo, NULL, RSRC_CONF,
-                  "SSI Start String Tag"),
-
-    {NULL}
-};
-
-static int include_fixup(request_rec *r)
-{
-    include_dir_config *conf;
- 
-    conf = (include_dir_config *) ap_get_module_config(r->per_dir_config,
-                                                &include_module);
- 
-    if (r->handler && (strcmp(r->handler, "server-parsed") == 0)) 
-    {
-        if (!r->content_type || !*r->content_type) {
-            r->content_type = "text/html";
-        }
-        r->handler = "default-handler";
-    }
-    else 
-#if defined(OS2) || defined(WIN32) || defined(NETWARE)
-    /* These OS's don't support xbithack. This is being worked on. */
-    {
-        return DECLINED;
-    }
-#else
-    {
-        if (*conf->xbithack == xbithack_off) {
-            return DECLINED;
-        }
-
-        if (!(r->finfo.protection & APR_UEXECUTE)) {
-            return DECLINED;
-        }
-
-        if (!r->content_type || strcmp(r->content_type, "text/html")) {
-            return DECLINED;
-        }
-    }
-#endif
-
-    /* We always return declined, because the default handler actually
-     * serves the file.  All we have to do is add the filter.
-     */
-    ap_add_output_filter("INCLUDES", NULL, r, r->connection);
-    return DECLINED;
-}
-
-static void register_hooks(apr_pool_t *p)
-{
-    APR_REGISTER_OPTIONAL_FN(ap_ssi_get_tag_and_value);
-    APR_REGISTER_OPTIONAL_FN(ap_ssi_parse_string);
-    APR_REGISTER_OPTIONAL_FN(ap_register_include_handler);
-    ap_hook_post_config(include_post_config, NULL, NULL, APR_HOOK_REALLY_FIRST);
-    ap_hook_fixups(include_fixup, NULL, NULL, APR_HOOK_LAST);
-    ap_register_output_filter("INCLUDES", includes_filter, AP_FTYPE_RESOURCE);
-}
-
-module AP_MODULE_DECLARE_DATA include_module =
-{
-    STANDARD20_MODULE_STUFF,
-    create_includes_dir_config,   /* dir config creater */
-    NULL,                         /* dir merger --- default is to override */
-    create_includes_server_config,/* server config */
-    NULL,                         /* merge server config */
-    includes_cmds,                /* command apr_table_t */
-    register_hooks                /* register hooks */
-};
diff --git a/modules/filters/mod_include.dsp b/modules/filters/mod_include.dsp
deleted file mode 100644
index 94b6dfb..0000000
--- a/modules/filters/mod_include.dsp
+++ /dev/null
@@ -1,132 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mod_include" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mod_include - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "mod_include.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "mod_include.mak" CFG="mod_include - Win32 Release"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "mod_include - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mod_include - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "mod_include - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /O2 /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Release\mod_include" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /map /machine:I386 /out:"Release/mod_include.so" /base:@..\..\os\win32\BaseAddr.ref,mod_include
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /map /machine:I386 /out:"Release/mod_include.so" /base:@..\..\os\win32\BaseAddr.ref,mod_include
-
-!ELSEIF  "$(CFG)" == "mod_include - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Debug\mod_include" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /map /debug /machine:I386 /out:"Debug/mod_include.so" /base:@..\..\os\win32\BaseAddr.ref,mod_include
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /map /debug /machine:I386 /out:"Debug/mod_include.so" /base:@..\..\os\win32\BaseAddr.ref,mod_include
-
-!ENDIF 
-
-# Begin Target
-
-# Name "mod_include - Win32 Release"
-# Name "mod_include - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\mod_include.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mod_include.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\mod_include.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\build\win32\win32ver.awk
-
-!IF  "$(CFG)" == "mod_include - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_include.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ../../build/win32/win32ver.awk mod_include  "include_module for Apache" ../../include/ap_release.h > .\mod_include.rc
-
-# End Custom Build
-
-!ELSEIF  "$(CFG)" == "mod_include - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_include.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ../../build/win32/win32ver.awk mod_include  "include_module for Apache" ../../include/ap_release.h > .\mod_include.rc
-
-# End Custom Build
-
-!ENDIF 
-
-# End Source File
-# End Target
-# End Project
diff --git a/modules/filters/mod_include.exp b/modules/filters/mod_include.exp
deleted file mode 100644
index 112e1c4..0000000
--- a/modules/filters/mod_include.exp
+++ /dev/null
@@ -1 +0,0 @@
-include_module
diff --git a/modules/filters/mod_include.h b/modules/filters/mod_include.h
deleted file mode 100644
index bebf7f3..0000000
--- a/modules/filters/mod_include.h
+++ /dev/null
@@ -1,236 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-#ifndef _MOD_INCLUDE_H
-#define _MOD_INCLUDE_H 1
-
-#include "apr_pools.h"
-
-#define STARTING_SEQUENCE "<!--#"
-#define ENDING_SEQUENCE "-->"
-
-#define DEFAULT_ERROR_MSG "[an error occurred while processing this directive]"
-#define DEFAULT_TIME_FORMAT "%A, %d-%b-%Y %H:%M:%S %Z"
-#define SIZEFMT_BYTES 0
-#define SIZEFMT_KMG 1
-#define TMP_BUF_SIZE 1024
-#if APR_CHARSET_EBCDIC
-#define RAW_ASCII_CHAR(ch)  apr_xlate_conv_byte(ap_hdrs_from_ascii, (unsigned char)ch)
-#else /*APR_CHARSET_EBCDIC*/
-#define RAW_ASCII_CHAR(ch)  (ch)
-#endif /*APR_CHARSET_EBCDIC*/
-
-/****************************************************************************
- * Used to keep context information during parsing of a request for SSI tags.
- * This is especially useful if the tag stretches across multiple buckets or
- * brigades. This keeps track of which buckets need to be replaced with the
- * content generated by the SSI tag.
- *
- * state: PRE_HEAD - State prior to finding the first character of the 
- *                   STARTING_SEQUENCE. Next state is PARSE_HEAD.
- *        PARSE_HEAD - State entered once the first character of the
- *                     STARTING_SEQUENCE is found and exited when the
- *                     the full STARTING_SEQUENCE has been matched or
- *                     a match failure occurs. Next state is PRE_HEAD
- *                     or PARSE_TAG.
- *        PARSE_TAG - State entered once the STARTING sequence has been
- *                    matched. It is exited when the first character in
- *                    ENDING_SEQUENCE is found. Next state is PARSE_TAIL.
- *        PARSE_TAIL - State entered from PARSE_TAG state when the first
- *                     character in ENDING_SEQUENCE is encountered. This
- *                     state is exited when the ENDING_SEQUENCE has been
- *                     completely matched, or when a match failure occurs.
- *                     Next state is PARSE_TAG or PARSED.
- *        PARSED - State entered from PARSE_TAIL once the complete 
- *                 ENDING_SEQUENCE has been matched. The SSI tag is
- *                 processed and the SSI buckets are replaced with the
- *                 SSI content during this state.
- * parse_pos: Current matched position within the STARTING_SEQUENCE or
- *            ENDING_SEQUENCE during the PARSE_HEAD and PARSE_TAIL states.
- *            This is especially useful when the sequence spans brigades.
- * X_start_bucket: These point to the buckets containing the first character
- *                 of the STARTING_SEQUENCE, the first non-whitespace
- *                 character of the tag, and the first character in the
- *                 ENDING_SEQUENCE (head_, tag_, and tail_ respectively).
- *                 The buckets are kept intact until the PARSED state is
- *                 reached, at which time the tag is consolidated and the
- *                 buckets are released. The buckets that these point to
- *                 have all been set aside in the ssi_tag_brigade (along
- *                 with all of the intervening buckets).
- * X_start_index: The index points within the specified bucket contents
- *                where the first character of the STARTING_SEQUENCE,
- *                the first non-whitespace character of the tag, and the
- *                first character in the ENDING_SEQUENCE can be found
- *                (head_, tag_, and tail_ respectively).
- * combined_tag: Once the PARSED state is reached the tag is collected from
- *               the bucket(s) in the ssi_tag_brigade into this contiguous
- *               buffer. The buckets in the ssi_tag_brigade are released
- *               and the tag is processed.
- * curr_tag_pos: Ptr to the combined_tag buffer indicating the current
- *               parse position.
- * tag_length: The number of bytes in the actual tag (excluding the
- *             STARTING_SEQUENCE, leading and trailing whitespace,
- *             and ENDING_SEQUENCE). This length is computed as the
- *             buckets are parsed and set aside during the PARSE_TAG state.
- * ssi_tag_brigade: The temporary brigade used by this filter to set aside
- *                  the buckets containing parts of the ssi tag and headers.
- */
-typedef enum {PRE_HEAD, PARSE_HEAD, PARSE_DIRECTIVE, PARSE_TAG, PARSE_TAIL, PARSED} states;
-
-/** forward referenced as it needs to be held on the context */
-typedef struct bndm_t bndm_t;
-
-typedef struct include_filter_ctx {
-    states       state;
-    long         flags;    /* See the FLAG_XXXXX definitions. */
-    int          if_nesting_level;
-    apr_size_t   parse_pos;
-    int          bytes_parsed;
-    apr_status_t status;
-    int          output_now;
-    int          output_flush;
-    
-    apr_bucket   *head_start_bucket;
-    apr_size_t   head_start_index;
-
-    apr_bucket   *tag_start_bucket;
-    apr_size_t   tag_start_index;
-
-    apr_bucket   *tail_start_bucket;
-    apr_size_t   tail_start_index;
-
-    char        *combined_tag;
-    char        *curr_tag_pos;
-    apr_size_t   directive_length;
-    apr_size_t   tag_length;
-
-    char         *error_str;
-    char         *error_str_override;
-    char         *time_str;
-    char         *time_str_override;
-    apr_pool_t   *pool;
-
-    apr_bucket_brigade *ssi_tag_brigade;
-    bndm_t       *start_seq_pat;
-    char         *start_seq;
-    int          start_seq_len;
-    char         *end_seq;
-    char         *re_string;
-    regmatch_t   (*re_result)[10];
-} include_ctx_t;
-
-/* These flags are used to set flag bits. */
-#define FLAG_PRINTING         0x00000001  /* Printing conditional lines. */
-#define FLAG_COND_TRUE        0x00000002  /* Conditional eval'd to true. */
-#define FLAG_SIZE_IN_BYTES    0x00000004  /* Sizes displayed in bytes.   */
-#define FLAG_NO_EXEC          0x00000008  /* No Exec in current context. */
-
-/* These flags are used to clear flag bits. */
-#define FLAG_SIZE_ABBREV      0xFFFFFFFB  /* Reset SIZE_IN_BYTES bit.    */
-#define FLAG_CLEAR_PRINT_COND 0xFFFFFFFC  /* Reset PRINTING and COND_TRUE*/
-#define FLAG_CLEAR_PRINTING   0xFFFFFFFE  /* Reset just PRINTING bit.    */
-
-#define CREATE_ERROR_BUCKET(cntx, t_buck, h_ptr, ins_head)        \
-{                                                                 \
-    /* XXX: it'd probably be nice to use a pool bucket here */    \
-    t_buck = apr_bucket_heap_create(cntx->error_str,              \
-                             strlen(cntx->error_str), 1);         \
-    APR_BUCKET_INSERT_BEFORE(h_ptr, t_buck);                      \
-                                                                  \
-    if (ins_head == NULL) {                                       \
-        ins_head = t_buck;                                        \
-    }                                                             \
-}
-
-/* Make sure to check the return code rc. If it is anything other
- *   than APR_SUCCESS, then you should return this value up the
- *   call chain.
- */
-#define SPLIT_AND_PASS_PRETAG_BUCKETS(brgd, cntxt, next, rc)          \
-if ((APR_BRIGADE_EMPTY((cntxt)->ssi_tag_brigade)) &&                  \
-    ((cntxt)->head_start_bucket != NULL)) {                           \
-    apr_bucket_brigade *tag_plus;                                     \
-                                                                      \
-    tag_plus = apr_brigade_split((brgd), (cntxt)->head_start_bucket); \
-    if ((cntxt)->output_flush) {                                      \
-        APR_BRIGADE_INSERT_TAIL((brgd), apr_bucket_flush_create());   \
-    }                                                                 \
-    (rc) = ap_pass_brigade((next), (brgd));                           \
-    (cntxt)->bytes_parsed = 0;                                        \
-    (brgd) = tag_plus;                                                \
-}
-
-
-typedef int (include_handler_fn_t)(include_ctx_t *ctx, apr_bucket_brigade **bb,
-                       request_rec *r, ap_filter_t *f, apr_bucket *head_ptr, 
-                       apr_bucket **inserted_head);
-
-APR_DECLARE_OPTIONAL_FN(void, ap_ssi_get_tag_and_value, (include_ctx_t *ctx,
-                                                         char **tag,
-                                                         char **tag_val,
-                                                         int dodecode));
-APR_DECLARE_OPTIONAL_FN(char*, ap_ssi_parse_string, (request_rec *r,
-                                                    include_ctx_t *ctx,
-                                                    const char *in,
-                                                    char *out,
-                                                    apr_size_t length,
-                                                    int leave_name));
-APR_DECLARE_OPTIONAL_FN(void, ap_register_include_handler, 
-                        (char *tag, include_handler_fn_t *func));
-
-#endif /* MOD_INCLUDE */
diff --git a/modules/generators/.cvsignore b/modules/generators/.cvsignore
deleted file mode 100644
index aeabff3..0000000
--- a/modules/generators/.cvsignore
+++ /dev/null
@@ -1,16 +0,0 @@
-.deps
-.libs
-*.la
-modules.mk
-Makefile
-*.lo
-*.slo
-*.so
-*.x
-Debug
-Release
-*.plg
-*.aps
-*.dep
-*.mak
-*.rc
diff --git a/modules/generators/.indent.pro b/modules/generators/.indent.pro
deleted file mode 100644
index a9fbe9f..0000000
--- a/modules/generators/.indent.pro
+++ /dev/null
@@ -1,54 +0,0 @@
--i4 -npsl -di0 -br -nce -d0 -cli0 -npcs -nfc1
--TBUFF
--TFILE
--TTRANS
--TUINT4
--T_trans
--Tallow_options_t
--Tapache_sfio
--Tarray_header
--Tbool_int
--Tbuf_area
--Tbuff_struct
--Tbuffy
--Tcmd_how
--Tcmd_parms
--Tcommand_rec
--Tcommand_struct
--Tconn_rec
--Tcore_dir_config
--Tcore_server_config
--Tdir_maker_func
--Tevent
--Tglobals_s
--Thandler_func
--Thandler_rec
--Tjoblist_s
--Tlisten_rec
--Tmerger_func
--Tmode_t
--Tmodule
--Tmodule_struct
--Tmutex
--Tn_long
--Tother_child_rec
--Toverrides_t
--Tparent_score
--Tpid_t
--Tpiped_log
--Tpool
--Trequest_rec
--Trequire_line
--Trlim_t
--Tscoreboard
--Tsemaphore
--Tserver_addr_rec
--Tserver_rec
--Tserver_rec_chain
--Tshort_score
--Ttable
--Ttable_entry
--Tthread
--Tu_wide_int
--Tvtime_t
--Twide_int
diff --git a/modules/generators/Makefile.in b/modules/generators/Makefile.in
deleted file mode 100644
index 167b343..0000000
--- a/modules/generators/Makefile.in
+++ /dev/null
@@ -1,3 +0,0 @@
-
-include $(top_srcdir)/build/special.mk
-
diff --git a/modules/generators/NWGNUinfo b/modules/generators/NWGNUinfo
deleted file mode 100644
index 4cad068..0000000
--- a/modules/generators/NWGNUinfo
+++ /dev/null
@@ -1,250 +0,0 @@
-#
-# Make sure all needed macro's are defined
-#
-
-#
-# Get the 'head' of the build environment if necessary.  This includes default
-# targets and paths to tools
-#
-
-ifndef EnvironmentDefined
-include $(AP_WORK)\build\NWGNUhead.inc
-endif
-
-#
-# These directories will be at the beginning of the include list, followed by
-# INCDIRS
-#
-XINCDIRS	+= \
-			$(AP_WORK)/include \
-			$(NWOS) \
-			$(AP_WORK)/modules/arch/netware \
-			$(AP_WORK)/srclib/apr/include \
-			$(AP_WORK)/srclib/apr-util/include \
-			$(AP_WORK)/srclib/apr \
-			$(EOLIST)
-
-#
-# These flags will come after CFLAGS
-#
-XCFLAGS		+= \
-			-prefix pre_nw.h \
-			$(EOLIST)
-
-#
-# These defines will come after DEFINES
-#
-XDEFINES	+= \
-			$(EOLIST)
-
-#
-# These flags will be added to the link.opt file
-#
-XLFLAGS		+= \
-			$(EOLIST)
-
-#
-# These values will be appended to the correct variables based on the value of
-# RELEASE
-#
-ifeq "$(RELEASE)" "debug"
-XINCDIRS	+= \
-			$(EOLIST)
-
-XCFLAGS		+= \
-			$(EOLIST)
-
-XDEFINES	+= \
-			$(EOLIST)
-
-XLFLAGS		+= \
-		   	$(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "noopt"
-XINCDIRS	+= \
-			$(EOLIST)
-
-XCFLAGS		+= \
-			$(EOLIST)
-
-XDEFINES	+= \
-			$(EOLIST)
-
-XLFLAGS		+= \
-		   	$(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "release"
-XINCDIRS	+= \
-			$(EOLIST)
-
-XCFLAGS		+= \
-			$(EOLIST)
-
-XDEFINES	+= \
-			$(EOLIST)
-
-XLFLAGS		+= \
-			$(EOLIST)
-endif
-
-#
-# These are used by the link target if an NLM is being generated
-# This is used by the link 'name' directive to name the nlm.  If left blank
-# TARGET_nlm (see below) will be used.
-#
-NLM_NAME		= info
-
-#
-# This is used by the link '-desc ' directive. 
-# If left blank, NLM_NAME will be used.
-#
-NLM_DESCRIPTION	= Info Module
-
-#
-# This is used by the '-threadname' directive.  If left blank,
-# NLM_NAME Thread will be used.
-#
-NLM_THREAD_NAME	= Info Module
-
-#
-# If this is specified, it will override VERSION value in 
-# $(AP_WORK)\build\NWGNUenvironment.inc
-#
-NLM_VERSION		=
-
-#
-# If this is specified, it will override the default of 64K
-#
-NLM_STACK_SIZE	= 8192
-
-
-#
-# If this is specified it will be used by the link '-entry' directive
-#
-NLM_ENTRY_SYM	= _LibCPrelude
-
-#
-# If this is specified it will be used by the link '-exit' directive
-#
-NLM_EXIT_SYM	= _LibCPostlude
-
-#
-# If this is specified it will be used by the link '-check' directive
-#
-NLM_CHECK_SYM	=
-
-#
-# If these are specified it will be used by the link '-flags' directive
-#
-NLM_FLAGS		=  AUTOUNLOAD, PSEUDOPREEMPTION
-
-#
-# If this is specified it will be linked in with the XDCData option in the def 
-# file instead of the default of $(NWOS)/apache.xdc.  XDCData can be disabled
-# by setting APACHE_UNIPROC in the environment
-#
-XDCDATA         = 
-
-#
-# If there is an NLM target, put it here
-#
-TARGET_nlm = \
-	$(OBJDIR)/info.nlm \
-	$(EOLIST)
-
-#
-# If there is an LIB target, put it here
-#
-TARGET_lib = \
-	$(EOLIST)
-
-#
-# These are the OBJ files needed to create the NLM target above.
-# Paths must all use the '/' character
-#
-FILES_nlm_objs = \
-	$(OBJDIR)/mod_info.o \
-	$(EOLIST)
-
-#
-# These are the LIB files needed to create the NLM target above.
-# These will be added as a library command in the link.opt file.
-#
-FILES_nlm_libs = \
-   	libcpre.o \
-	$(EOLIST)
-
-#
-# These are the modules that the above NLM target depends on to load.
-# These will be added as a module command in the link.opt file.
-#
-FILES_nlm_modules = \
-	aprlib \
-	libc \
-	$(EOLIST)
-
-#
-# If the nlm has a msg file, put it's path here
-#
-FILE_nlm_msg =
- 
-#
-# If the nlm has a hlp file put it's path here
-#
-FILE_nlm_hlp =
-
-#
-# If this is specified, it will override $(NWOS)\copyright.txt.
-#
-FILE_nlm_copyright =
-
-#
-# Any additional imports go here
-#
-FILES_nlm_Ximports = \
-	@$(APR)/aprlib.imp \
-	@$(NWOS)/httpd.imp \
-	@libc.imp \
-	$(EOLIST)
- 
-#   
-# Any symbols exported to here
-#
-FILES_nlm_exports = \
-	info_module \
-	$(EOLIST)
-	
-#   
-# These are the OBJ files needed to create the LIB target above.
-# Paths must all use the '/' character
-#
-FILES_lib_objs = \
-		$(EOLIST)
-
-#
-# implement targets and dependancies (leave this section alone)
-#
-
-libs :: $(OBJDIR) $(TARGET_lib)
-
-nlms :: libs $(TARGET_nlm)
-
-#
-# Updated this target to create necessary directories and copy files to the 
-# correct place.  (See $(AP_WORK)\build\NWGNUhead.inc for examples)
-#
-install :: nlms FORCE
-
-#
-# Any specialized rules here
-#
-
-#
-# Include the 'tail' makefile that has targets that depend on variables defined
-# in this makefile
-#
-
-include $(AP_WORK)\build\NWGNUtail.inc
-
diff --git a/modules/generators/NWGNUmakefile b/modules/generators/NWGNUmakefile
deleted file mode 100644
index 7f7d343..0000000
--- a/modules/generators/NWGNUmakefile
+++ /dev/null
@@ -1,247 +0,0 @@
-#
-# Declare the sub-directories to be built here
-#
-
-SUBDIRS = \
-	$(EOLIST) 
-
-#
-# Get the 'head' of the build environment.  This includes default targets and
-# paths to tools
-#
-
-include $(AP_WORK)\build\NWGNUhead.inc
-
-#
-# build this level's files
-
-#
-# Make sure all needed macro's are defined
-#
-
-#
-# These directories will be at the beginning of the include list, followed by
-# INCDIRS
-#
-XINCDIRS	+= \
-			$(EOLIST)
-
-#
-# These flags will come after CFLAGS
-#
-XCFLAGS		+= \
-			$(EOLIST)
-
-#
-# These defines will come after DEFINES
-#
-XDEFINES	+= \
-			$(EOLIST)
-
-#
-# These flags will be added to the link.opt file
-#
-XLFLAGS		+= \
-			$(EOLIST)
-
-#
-# These values will be appended to the correct variables based on the value of
-# RELEASE
-#
-ifeq "$(RELEASE)" "debug"
-XINCDIRS	+= \
-			$(EOLIST)
-
-XCFLAGS		+= \
-			$(EOLIST)
-
-XDEFINES	+= \
-			$(EOLIST)
-
-XLFLAGS		+= \
-		   	$(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "noopt"
-XINCDIRS	+= \
-			$(EOLIST)
-
-XCFLAGS		+= \
-			$(EOLIST)
-
-XDEFINES	+= \
-			$(EOLIST)
-
-XLFLAGS		+= \
-		   	$(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "release"
-XINCDIRS	+= \
-			$(EOLIST)
-
-XCFLAGS		+= \
-			$(EOLIST)
-
-XDEFINES	+= \
-			$(EOLIST)
-
-XLFLAGS		+= \
-			$(EOLIST)
-endif
-
-#
-# These are used by the link target if an NLM is being generated
-# This is used by the link 'name' directive to name the nlm.  If left blank
-# TARGET_nlm (see below) will be used.
-#
-NLM_NAME		=
-
-#
-# This is used by the link '-desc ' directive. 
-# If left blank, NLM_NAME will be used.
-#
-NLM_DESCRIPTION	=
-
-#
-# This is used by the '-threadname' directive.  If left blank,
-# NLM_NAME Thread will be used.
-#
-NLM_THREAD_NAME	=
-
-#
-# If this is specified, it will override VERSION value in 
-# $(AP_WORK)\build\NWGNUenvironment.inc
-#
-NLM_VERSION		=
-
-#
-# If this is specified, it will override the default of 64K
-#
-NLM_STACK_SIZE	=
-
-
-#
-# If this is specified it will be used by the link '-entry' directive
-#
-NLM_ENTRY_SYM	=
-
-#
-# If this is specified it will be used by the link '-exit' directive
-#
-NLM_EXIT_SYM	=
-
-#
-# If this is specified it will be used by the link '-check' directive
-#
-NLM_CHECK_SYM	=
-
-#
-# If these are specified it will be used by the link '-flags' directive
-#
-NLM_FLAGS		=
-
-#
-# If this is specified it will be linked in with the XDCData option in the def 
-# file instead of the default of $(NWOS)/apache.xdc.  XDCData can be disabled
-# by setting APACHE_UNIPROC in the environment
-#
-XDCDATA         = 
-
-#
-# If there is an NLM target, put it here
-#
-TARGET_nlm = \
-	$(OBJDIR)/info.nlm \
-	$(OBJDIR)/status.nlm \
-	$(EOLIST)
-
-#
-# If there is an LIB target, put it here
-#
-TARGET_lib = \
-	$(EOLIST)
-
-#
-# These are the OBJ files needed to create the NLM target above.
-# Paths must all use the '/' character
-#
-FILES_nlm_objs = \
-	$(EOLIST)
-
-#
-# These are the LIB files needed to create the NLM target above.
-# These will be added as a library command in the link.opt file.
-#
-FILES_nlm_libs = \
-	$(EOLIST)
-
-#
-# These are the modules that the above NLM target depends on to load.
-# These will be added as a module command in the link.opt file.
-#
-FILES_nlm_modules = \
-	$(EOLIST)
-
-#
-# If the nlm has a msg file, put it's path here
-#
-FILE_nlm_msg =
- 
-#
-# If the nlm has a hlp file put it's path here
-#
-FILE_nlm_hlp =
-
-#
-# If this is specified, it will override $(NWOS)\copyright.txt.
-#
-FILE_nlm_copyright =
-
-#
-# Any additional imports go here
-#
-FILES_nlm_Ximports = \
-	$(EOLIST)
- 
-#   
-# Any symbols exported to here
-#
-FILES_nlm_exports = \
-	$(EOLIST)
-	
-#   
-# These are the OBJ files needed to create the LIB target above.
-# Paths must all use the '/' character
-#
-FILES_lib_objs = \
-		$(EOLIST)
-
-#
-# implement targets and dependancies (leave this section alone)
-#
-
-libs :: $(OBJDIR) $(TARGET_lib)
-
-nlms :: libs $(TARGET_nlm)
-
-#
-# Updated this target to create necessary directories and copy files to the 
-# correct place.  (See $(AP_WORK)\build\NWGNUhead.inc for examples)
-#
-install :: nlms FORCE
-	copy $(OBJDIR)\*.nlm $(INSTALL)\Apache2\modules\*.*
-
-#
-# Any specialized rules here
-#
-
-#
-# Include the 'tail' makefile that has targets that depend on variables defined
-# in this makefile
-#
-
-include $(AP_WORK)\build\NWGNUtail.inc
-
-
-	
diff --git a/modules/generators/NWGNUstatus b/modules/generators/NWGNUstatus
deleted file mode 100644
index 9a91236..0000000
--- a/modules/generators/NWGNUstatus
+++ /dev/null
@@ -1,250 +0,0 @@
-#
-# Make sure all needed macro's are defined
-#
-
-#
-# Get the 'head' of the build environment if necessary.  This includes default
-# targets and paths to tools
-#
-
-ifndef EnvironmentDefined
-include $(AP_WORK)\build\NWGNUhead.inc
-endif
-
-#
-# These directories will be at the beginning of the include list, followed by
-# INCDIRS
-#
-XINCDIRS	+= \
-			$(AP_WORK)/include \
-			$(NWOS) \
-			$(AP_WORK)/modules/arch/netware \
-			$(AP_WORK)/srclib/apr/include \
-			$(AP_WORK)/srclib/apr-util/include \
-			$(AP_WORK)/srclib/apr \
-			$(EOLIST)
-
-#
-# These flags will come after CFLAGS
-#
-XCFLAGS		+= \
-			-prefix pre_nw.h \
-			$(EOLIST)
-
-#
-# These defines will come after DEFINES
-#
-XDEFINES	+= \
-			$(EOLIST)
-
-#
-# These flags will be added to the link.opt file
-#
-XLFLAGS		+= \
-			$(EOLIST)
-
-#
-# These values will be appended to the correct variables based on the value of
-# RELEASE
-#
-ifeq "$(RELEASE)" "debug"
-XINCDIRS	+= \
-			$(EOLIST)
-
-XCFLAGS		+= \
-			$(EOLIST)
-
-XDEFINES	+= \
-			$(EOLIST)
-
-XLFLAGS		+= \
-		   	$(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "noopt"
-XINCDIRS	+= \
-			$(EOLIST)
-
-XCFLAGS		+= \
-			$(EOLIST)
-
-XDEFINES	+= \
-			$(EOLIST)
-
-XLFLAGS		+= \
-		   	$(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "release"
-XINCDIRS	+= \
-			$(EOLIST)
-
-XCFLAGS		+= \
-			$(EOLIST)
-
-XDEFINES	+= \
-			$(EOLIST)
-
-XLFLAGS		+= \
-			$(EOLIST)
-endif
-
-#
-# These are used by the link target if an NLM is being generated
-# This is used by the link 'name' directive to name the nlm.  If left blank
-# TARGET_nlm (see below) will be used.
-#
-NLM_NAME		= status
-
-#
-# This is used by the link '-desc ' directive. 
-# If left blank, NLM_NAME will be used.
-#
-NLM_DESCRIPTION	= Status Module
-
-#
-# This is used by the '-threadname' directive.  If left blank,
-# NLM_NAME Thread will be used.
-#
-NLM_THREAD_NAME	= Status Module
-
-#
-# If this is specified, it will override VERSION value in 
-# $(AP_WORK)\build\NWGNUenvironment.inc
-#
-NLM_VERSION		=
-
-#
-# If this is specified, it will override the default of 64K
-#
-NLM_STACK_SIZE	= 8192
-
-
-#
-# If this is specified it will be used by the link '-entry' directive
-#
-NLM_ENTRY_SYM	= _LibCPrelude
-
-#
-# If this is specified it will be used by the link '-exit' directive
-#
-NLM_EXIT_SYM	= _LibCPostlude
-
-#
-# If this is specified it will be used by the link '-check' directive
-#
-NLM_CHECK_SYM	=
-
-#
-# If these are specified it will be used by the link '-flags' directive
-#
-NLM_FLAGS		=  AUTOUNLOAD, PSEUDOPREEMPTION
-
-#
-# If this is specified it will be linked in with the XDCData option in the def 
-# file instead of the default of $(NWOS)/apache.xdc.  XDCData can be disabled
-# by setting APACHE_UNIPROC in the environment
-#
-XDCDATA         = 
-
-#
-# If there is an NLM target, put it here
-#
-TARGET_nlm = \
-	$(OBJDIR)/status.nlm \
-	$(EOLIST)
-
-#
-# If there is an LIB target, put it here
-#
-TARGET_lib = \
-	$(EOLIST)
-
-#
-# These are the OBJ files needed to create the NLM target above.
-# Paths must all use the '/' character
-#
-FILES_nlm_objs = \
-	$(OBJDIR)/mod_status.o \
-	$(EOLIST)
-
-#
-# These are the LIB files needed to create the NLM target above.
-# These will be added as a library command in the link.opt file.
-#
-FILES_nlm_libs = \
-   	libcpre.o \
-	$(EOLIST)
-
-#
-# These are the modules that the above NLM target depends on to load.
-# These will be added as a module command in the link.opt file.
-#
-FILES_nlm_modules = \
-	aprlib \
-	libc \
-	$(EOLIST)
-
-#
-# If the nlm has a msg file, put it's path here
-#
-FILE_nlm_msg =
- 
-#
-# If the nlm has a hlp file put it's path here
-#
-FILE_nlm_hlp =
-
-#
-# If this is specified, it will override $(NWOS)\copyright.txt.
-#
-FILE_nlm_copyright =
-
-#
-# Any additional imports go here
-#
-FILES_nlm_Ximports = \
-	@$(APR)/aprlib.imp \
-	@$(NWOS)/httpd.imp \
-	@libc.imp \
-	$(EOLIST)
- 
-#   
-# Any symbols exported to here
-#
-FILES_nlm_exports = \
-	status_module \
-	$(EOLIST)
-	
-#   
-# These are the OBJ files needed to create the LIB target above.
-# Paths must all use the '/' character
-#
-FILES_lib_objs = \
-		$(EOLIST)
-
-#
-# implement targets and dependancies (leave this section alone)
-#
-
-libs :: $(OBJDIR) $(TARGET_lib)
-
-nlms :: libs $(TARGET_nlm)
-
-#
-# Updated this target to create necessary directories and copy files to the 
-# correct place.  (See $(AP_WORK)\build\NWGNUhead.inc for examples)
-#
-install :: nlms FORCE
-
-#
-# Any specialized rules here
-#
-
-#
-# Include the 'tail' makefile that has targets that depend on variables defined
-# in this makefile
-#
-
-include $(AP_WORK)\build\NWGNUtail.inc
-
diff --git a/modules/generators/config5.m4 b/modules/generators/config5.m4
deleted file mode 100644
index 7113018..0000000
--- a/modules/generators/config5.m4
+++ /dev/null
@@ -1,29 +0,0 @@
-dnl modules enabled in this directory by default
-
-dnl APACHE_MODULE(name, helptext[, objects[, structname[, default[, config]]]])
-
-APACHE_MODPATH_INIT(generators)
-
-APACHE_MODULE(status, process/thread monitoring, , , yes)
-APACHE_MODULE(autoindex, directory listing, , , yes)
-APACHE_MODULE(asis, as-is filetypes, , , yes)
-APACHE_MODULE(info, server information, , , most)
-APACHE_MODULE(suexec, set uid and gid for spawned processes, , , no, [
-              other_targets=suexec ] )
-
-APR_ADDTO(LT_LDFLAGS,-export-dynamic)
-
-if test "$apache_cv_mpm" = "worker" -o "$apache_cv_mpm" = "perchild"; then
-# if we are using a threaded MPM, we will get better performance with
-# mod_cgid, so make it the default.
-    APACHE_MODULE(cgid, CGI scripts, , , yes)
-    APACHE_MODULE(cgi, CGI scripts, , , no)
-else
-# if we are using a non-threaded MPM, it makes little sense to use
-# mod_cgid, and it just opens up holes we don't need.  Make mod_cgi the
-# default
-    APACHE_MODULE(cgi, CGI scripts, , , yes)
-    APACHE_MODULE(cgid, CGI scripts, , , no)
-fi
-
-APACHE_MODPATH_FINISH
diff --git a/modules/generators/mod_asis.c b/modules/generators/mod_asis.c
deleted file mode 100644
index fff8e5c..0000000
--- a/modules/generators/mod_asis.c
+++ /dev/null
@@ -1,184 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-#include "apr_strings.h"
-#include "ap_config.h"
-#include "httpd.h"
-#include "http_config.h"
-#include "http_protocol.h"
-#include "http_log.h"
-#include "util_script.h"
-#include "http_main.h"
-#include "http_request.h"
-
-#include "mod_core.h"
-
-#define ASIS_MAGIC_TYPE "httpd/send-as-is"
-
-static int asis_handler(request_rec *r)
-{
-    apr_file_t *f = NULL;
-    apr_status_t rv;
-    const char *location;
-
-    if(strcmp(r->handler,ASIS_MAGIC_TYPE) && strcmp(r->handler,"send-as-is"))
-	return DECLINED;
-
-    r->allowed |= (AP_METHOD_BIT << M_GET);
-    if (r->method_number != M_GET)
-	return DECLINED;
-    if (r->finfo.filetype == 0) {
-	ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-		    "File does not exist: %s", r->filename);
-	return HTTP_NOT_FOUND;
-    }
-
-    if ((rv = apr_file_open(&f, r->filename, APR_READ, 
-                APR_OS_DEFAULT, r->pool)) != APR_SUCCESS) {
-	ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
-		    "file permissions deny server access: %s", r->filename);
-	return HTTP_FORBIDDEN;
-    }
-
-    ap_scan_script_header_err(r, f, NULL);
-    location = apr_table_get(r->headers_out, "Location");
-
-    if (location && location[0] == '/' &&
-	((r->status == HTTP_OK) || ap_is_HTTP_REDIRECT(r->status))) {
-
-	apr_file_close(f);
-
-	/* Internal redirect -- fake-up a pseudo-request */
-	r->status = HTTP_OK;
-
-	/* This redirect needs to be a GET no matter what the original
-	 * method was.
-	 */
-	r->method = apr_pstrdup(r->pool, "GET");
-	r->method_number = M_GET;
-
-	ap_internal_redirect_handler(location, r);
-	return OK;
-    }
-
-    if (!r->header_only) {
-        apr_bucket_brigade *bb;
-        apr_bucket *b;
-        apr_off_t pos = 0;
-
-        rv = apr_file_seek(f, APR_CUR, &pos);
-        if (rv != APR_SUCCESS) {
-            ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
-                          "mod_asis: failed to find end-of-headers position "
-                          "for %s", r->filename);
-            apr_file_close(f);
-            return HTTP_INTERNAL_SERVER_ERROR;
-        }
-
-        bb = apr_brigade_create(r->pool);
-#if APR_HAS_LARGE_FILES
-        if (r->finfo.size - pos > AP_MAX_SENDFILE) {
-            /* APR_HAS_LARGE_FILES issue; must split into mutiple buckets, 
-             * no greater than MAX(apr_size_t), and more granular than that
-             * in case the brigade code/filters attempt to read it directly.
-             */
-            apr_off_t fsize = r->finfo.size - pos;
-            b = apr_bucket_file_create(f, pos, AP_MAX_SENDFILE, r->pool);
-            while (fsize > AP_MAX_SENDFILE) {
-                APR_BRIGADE_INSERT_TAIL(bb, b);
-                apr_bucket_copy(b, &b);
-                b->start += AP_MAX_SENDFILE;
-                fsize -= AP_MAX_SENDFILE;
-            }
-            b->length = (apr_size_t)fsize; /* Resize just the last bucket */
-        }
-        else
-#endif
-        b = apr_bucket_file_create(f, pos, (apr_size_t) (r->finfo.size - pos), r->pool);
-        APR_BRIGADE_INSERT_TAIL(bb, b);
-        b = apr_bucket_eos_create();
-        APR_BRIGADE_INSERT_TAIL(bb, b);
-        rv = ap_pass_brigade(r->output_filters, bb);
-        if (rv != APR_SUCCESS) {
-            ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
-                          "mod_asis: ap_pass_brigade failed for file %s", r->filename);
-            return HTTP_INTERNAL_SERVER_ERROR;
-        }
-    }
-    else {
-        apr_file_close(f);
-    }
-
-    return OK;
-}
-
-static void register_hooks(apr_pool_t *p)
-{
-    ap_hook_handler(asis_handler,NULL,NULL,APR_HOOK_MIDDLE);
-}
-
-module AP_MODULE_DECLARE_DATA asis_module =
-{
-    STANDARD20_MODULE_STUFF,
-    NULL,			/* create per-directory config structure */
-    NULL,			/* merge per-directory config structures */
-    NULL,			/* create per-server config structure */
-    NULL,			/* merge per-server config structures */
-    NULL,			/* command apr_table_t */
-    register_hooks		/* register hooks */
-};
diff --git a/modules/generators/mod_asis.dsp b/modules/generators/mod_asis.dsp
deleted file mode 100644
index b4d2a47..0000000
--- a/modules/generators/mod_asis.dsp
+++ /dev/null
@@ -1,128 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mod_asis" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mod_asis - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "mod_asis.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "mod_asis.mak" CFG="mod_asis - Win32 Release"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "mod_asis - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mod_asis - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "mod_asis - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /O2 /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Release\mod_asis" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /map /machine:I386 /out:"Release/mod_asis.so" /base:@..\..\os\win32\BaseAddr.ref,mod_asis
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /map /machine:I386 /out:"Release/mod_asis.so" /base:@..\..\os\win32\BaseAddr.ref,mod_asis
-
-!ELSEIF  "$(CFG)" == "mod_asis - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Debug\mod_asis" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /map /debug /machine:I386 /out:"Debug/mod_asis.so" /base:@..\..\os\win32\BaseAddr.ref,mod_asis
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /map /debug /machine:I386 /out:"Debug/mod_asis.so" /base:@..\..\os\win32\BaseAddr.ref,mod_asis
-
-!ENDIF 
-
-# Begin Target
-
-# Name "mod_asis - Win32 Release"
-# Name "mod_asis - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\mod_asis.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mod_asis.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\build\win32\win32ver.awk
-
-!IF  "$(CFG)" == "mod_asis - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_asis.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ../../build/win32/win32ver.awk mod_asis  "asis_module for Apache" ../../include/ap_release.h > .\mod_asis.rc
-
-# End Custom Build
-
-!ELSEIF  "$(CFG)" == "mod_asis - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_asis.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ../../build/win32/win32ver.awk mod_asis  "asis_module for Apache" ../../include/ap_release.h > .\mod_asis.rc
-
-# End Custom Build
-
-!ENDIF 
-
-# End Source File
-# End Target
-# End Project
diff --git a/modules/generators/mod_asis.exp b/modules/generators/mod_asis.exp
deleted file mode 100644
index 4f347d9..0000000
--- a/modules/generators/mod_asis.exp
+++ /dev/null
@@ -1 +0,0 @@
-asis_module
diff --git a/modules/generators/mod_autoindex.c b/modules/generators/mod_autoindex.c
deleted file mode 100644
index 9e3741a..0000000
--- a/modules/generators/mod_autoindex.c
+++ /dev/null
@@ -1,2136 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-/*
- * mod_autoindex.c: Handles the on-the-fly html index generation
- * 
- * Rob McCool
- * 3/23/93
- * 
- * Adapted to Apache by rst.
- *
- * Version sort added by Martin Pool <mbp@humbug.org.au>.
- */
-
-#include "apr_strings.h"
-#include "apr_fnmatch.h"
-#include "apr_strings.h"
-#include "apr_lib.h"
-
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-#include "ap_config.h"
-#include "httpd.h"
-#include "http_config.h"
-#include "http_core.h"
-#include "http_request.h"
-#include "http_protocol.h"
-#include "http_log.h"
-#include "http_main.h"
-#include "util_script.h"
-
-#include "mod_core.h"
-
-module AP_MODULE_DECLARE_DATA autoindex_module;
-
-/****************************************************************
- *
- * Handling configuration directives...
- */
-
-#define NO_OPTIONS          0x0001  /* Indexing options */
-#define ICONS_ARE_LINKS     0x0002
-#define SCAN_HTML_TITLES    0x0004
-#define SUPPRESS_ICON       0x0008
-#define SUPPRESS_LAST_MOD   0x0010
-#define SUPPRESS_SIZE       0x0020
-#define SUPPRESS_DESC       0x0040
-#define SUPPRESS_PREAMBLE   0x0080
-#define SUPPRESS_COLSORT    0x0100
-#define SUPPRESS_RULES      0x0200
-#define FOLDERS_FIRST       0x0400
-#define VERSION_SORT        0x0800
-#define TRACK_MODIFIED      0x1000
-#define FANCY_INDEXING      0x2000
-#define TABLE_INDEXING      0x4000
-#define IGNORE_CLIENT       0x8000
-
-#define K_NOADJUST 0
-#define K_ADJUST 1
-#define K_UNSET 2
-
-/*
- * Define keys for sorting.
- */
-#define K_NAME 'N'              /* Sort by file name (default) */
-#define K_LAST_MOD 'M'          /* Last modification date */
-#define K_SIZE 'S'              /* Size (absolute, not as displayed) */
-#define K_DESC 'D'              /* Description */
-#define K_VALID "NMSD"          /* String containing _all_ valid K_ opts */
-
-#define D_ASCENDING 'A'
-#define D_DESCENDING 'D'
-#define D_VALID "AD"            /* String containing _all_ valid D_ opts */
-
-/*
- * These are the dimensions of the default icons supplied with Apache.
- */
-#define DEFAULT_ICON_WIDTH 20
-#define DEFAULT_ICON_HEIGHT 22
-
-/*
- * Other default dimensions.
- */
-#define DEFAULT_NAME_WIDTH 23
-#define DEFAULT_DESC_WIDTH 23
-
-struct item {
-    char *type;
-    char *apply_to;
-    char *apply_path;
-    char *data;
-};
-
-typedef struct ai_desc_t {
-    char *pattern;
-    char *description;
-    int full_path;
-    int wildcards;
-} ai_desc_t;
-
-typedef struct autoindex_config_struct {
-
-    char *default_icon;
-    apr_int32_t opts;
-    apr_int32_t incremented_opts;
-    apr_int32_t decremented_opts;
-    int name_width;
-    int name_adjust;
-    int desc_width;
-    int desc_adjust;
-    int icon_width;
-    int icon_height;
-    char default_keyid;
-    char default_direction;
-
-    apr_array_header_t *icon_list;
-    apr_array_header_t *alt_list;
-    apr_array_header_t *desc_list;
-    apr_array_header_t *ign_list;
-    apr_array_header_t *hdr_list;
-    apr_array_header_t *rdme_list;
-
-} autoindex_config_rec;
-
-static char c_by_encoding, c_by_type, c_by_path;
-
-#define BY_ENCODING &c_by_encoding
-#define BY_TYPE &c_by_type
-#define BY_PATH &c_by_path
-
-/*
- * This routine puts the standard HTML header at the top of the index page.
- * We include the DOCTYPE because we may be using features therefrom (i.e.,
- * HEIGHT and WIDTH attributes on the icons if we're FancyIndexing).
- */
-static void emit_preamble(request_rec *r, char *title)
-{
-    ap_rvputs(r, DOCTYPE_HTML_3_2,
-              "<html>\n <head>\n  <title>Index of ", title,
-              "</title>\n </head>\n <body>\n", NULL);
-}
-
-static void push_item(apr_array_header_t *arr, char *type, const char *to,
-                      const char *path, const char *data)
-{
-    struct item *p = (struct item *) apr_array_push(arr);
-
-    if (!to) {
-        to = "";
-    }
-    if (!path) {
-        path = "";
-    }
-
-    p->type = type;
-    p->data = data ? apr_pstrdup(arr->pool, data) : NULL;
-    p->apply_path = apr_pstrcat(arr->pool, path, "*", NULL);
-
-    if ((type == BY_PATH) && (!ap_is_matchexp(to))) {
-        p->apply_to = apr_pstrcat(arr->pool, "*", to, NULL);
-    }
-    else if (to) {
-        p->apply_to = apr_pstrdup(arr->pool, to);
-    }
-    else {
-        p->apply_to = NULL;
-    }
-}
-
-static const char *add_alt(cmd_parms *cmd, void *d, const char *alt,
-                           const char *to)
-{
-    if (cmd->info == BY_PATH) {
-        if (!strcmp(to, "**DIRECTORY**")) {
-            to = "^^DIRECTORY^^";
-        }
-    }
-    if (cmd->info == BY_ENCODING) {
-        char *tmp = apr_pstrdup(cmd->pool, to);
-        ap_str_tolower(tmp);
-        to = tmp;
-    }
-
-    push_item(((autoindex_config_rec *) d)->alt_list, cmd->info, to,
-              cmd->path, alt);
-    return NULL;
-}
-
-static const char *add_icon(cmd_parms *cmd, void *d, const char *icon,
-                            const char *to)
-{
-    char *iconbak = apr_pstrdup(cmd->pool, icon);
-
-    if (icon[0] == '(') {
-        char *alt;
-        char *cl = strchr(iconbak, ')');
-
-        if (cl == NULL) {
-            return "missing closing paren";
-        }
-        alt = ap_getword_nc(cmd->pool, &iconbak, ',');
-        *cl = '\0';                             /* Lose closing paren */
-        add_alt(cmd, d, &alt[1], to);
-    }
-    if (cmd->info == BY_PATH) {
-        if (!strcmp(to, "**DIRECTORY**")) {
-            to = "^^DIRECTORY^^";
-        }
-    }
-    if (cmd->info == BY_ENCODING) {
-        char *tmp = apr_pstrdup(cmd->pool, to);
-        ap_str_tolower(tmp);
-        to = tmp;
-    }
-
-    push_item(((autoindex_config_rec *) d)->icon_list, cmd->info, to,
-              cmd->path, iconbak);
-    return NULL;
-}
-
-/*
- * Add description text for a filename pattern.  If the pattern has
- * wildcards already (or we need to add them), add leading and
- * trailing wildcards to it to ensure substring processing.  If the
- * pattern contains a '/' anywhere, force wildcard matching mode,
- * add a slash to the prefix so that "bar/bletch" won't be matched
- * by "foobar/bletch", and make a note that there's a delimiter;
- * the matching routine simplifies to just the actual filename
- * whenever it can.  This allows definitions in parent directories
- * to be made for files in subordinate ones using relative paths.
- */
-
-/*
- * Absent a strcasestr() function, we have to force wildcards on
- * systems for which "AAA" and "aaa" mean the same file.
- */
-#ifdef CASE_BLIND_FILESYSTEM
-#define WILDCARDS_REQUIRED 1
-#else
-#define WILDCARDS_REQUIRED 0
-#endif
-
-static const char *add_desc(cmd_parms *cmd, void *d, const char *desc,
-                            const char *to)
-{
-    autoindex_config_rec *dcfg = (autoindex_config_rec *) d;
-    ai_desc_t *desc_entry;
-    char *prefix = "";
-
-    desc_entry = (ai_desc_t *) apr_array_push(dcfg->desc_list);
-    desc_entry->full_path = (ap_strchr_c(to, '/') == NULL) ? 0 : 1;
-    desc_entry->wildcards = (WILDCARDS_REQUIRED
-                             || desc_entry->full_path
-                             || apr_is_fnmatch(to));
-    if (desc_entry->wildcards) {
-        prefix = desc_entry->full_path ? "*/" : "*";
-        desc_entry->pattern = apr_pstrcat(dcfg->desc_list->pool,
-                                          prefix, to, "*", NULL);
-    }
-    else {
-        desc_entry->pattern = apr_pstrdup(dcfg->desc_list->pool, to);
-    }
-    desc_entry->description = apr_pstrdup(dcfg->desc_list->pool, desc);
-    return NULL;
-}
-
-static const char *add_ignore(cmd_parms *cmd, void *d, const char *ext)
-{
-    push_item(((autoindex_config_rec *) d)->ign_list, 0, ext, cmd->path, NULL);
-    return NULL;
-}
-
-static const char *add_header(cmd_parms *cmd, void *d, const char *name)
-{
-    push_item(((autoindex_config_rec *) d)->hdr_list, 0, NULL, cmd->path,
-              name);
-    return NULL;
-}
-
-static const char *add_readme(cmd_parms *cmd, void *d, const char *name)
-{
-    push_item(((autoindex_config_rec *) d)->rdme_list, 0, NULL, cmd->path,
-              name);
-    return NULL;
-}
-
-static const char *add_opts(cmd_parms *cmd, void *d, const char *optstr)
-{
-    char *w;
-    apr_int32_t opts;
-    apr_int32_t opts_add;
-    apr_int32_t opts_remove;
-    char action;
-    autoindex_config_rec *d_cfg = (autoindex_config_rec *) d;
-
-    opts = d_cfg->opts;
-    opts_add = d_cfg->incremented_opts;
-    opts_remove = d_cfg->decremented_opts;
-    while (optstr[0]) {
-        int option = 0;
-
-        w = ap_getword_conf(cmd->pool, &optstr);
-        if ((*w == '+') || (*w == '-')) {
-            action = *(w++);
-        }
-        else {
-            action = '\0';
-        }
-        if (!strcasecmp(w, "FancyIndexing")) {
-            option = FANCY_INDEXING;
-        }
-        else if (!strcasecmp(w, "FoldersFirst")) {
-            option = FOLDERS_FIRST; 
-        } 
-        else if (!strcasecmp(w, "HTMLTable")) {
-            option = TABLE_INDEXING;
-        }
-        else if (!strcasecmp(w, "IconsAreLinks")) {
-            option = ICONS_ARE_LINKS;
-        }
-        else if (!strcasecmp(w, "IgnoreClient")) {
-            option = IGNORE_CLIENT;
-        }
-        else if (!strcasecmp(w, "ScanHTMLTitles")) {
-            option = SCAN_HTML_TITLES;
-        }
-        else if (!strcasecmp(w, "SuppressColumnSorting")) {
-            option = SUPPRESS_COLSORT;
-        }
-        else if (!strcasecmp(w, "SuppressDescription")) {
-            option = SUPPRESS_DESC;
-        }
-        else if (!strcasecmp(w, "SuppressHTMLPreamble")) {
-            option = SUPPRESS_PREAMBLE;
-        }
-        else if (!strcasecmp(w, "SuppressIcon")) {
-            option = SUPPRESS_ICON;
-        }
-        else if (!strcasecmp(w, "SuppressLastModified")) {
-            option = SUPPRESS_LAST_MOD;
-        }
-        else if (!strcasecmp(w, "SuppressSize")) {
-            option = SUPPRESS_SIZE;
-        }
-        else if (!strcasecmp(w, "SuppressRules")) {
-            option = SUPPRESS_RULES;
-        }
-        else if (!strcasecmp(w, "TrackModified")) {
-            option = TRACK_MODIFIED; 
-        } 
-        else if (!strcasecmp(w, "VersionSort")) {
-            option = VERSION_SORT;
-        }
-        else if (!strcasecmp(w, "None")) {
-            if (action != '\0') {
-                return "Cannot combine '+' or '-' with 'None' keyword";
-            }
-            opts = NO_OPTIONS;
-            opts_add = 0;
-            opts_remove = 0;
-        }
-        else if (!strcasecmp(w, "IconWidth")) {
-            if (action != '-') {
-                d_cfg->icon_width = DEFAULT_ICON_WIDTH;
-            }
-            else {
-                d_cfg->icon_width = 0;
-            }
-        }
-        else if (!strncasecmp(w, "IconWidth=", 10)) {
-            if (action == '-') {
-                return "Cannot combine '-' with IconWidth=n";
-            }
-            d_cfg->icon_width = atoi(&w[10]);
-        }
-        else if (!strcasecmp(w, "IconHeight")) {
-            if (action != '-') {
-                d_cfg->icon_height = DEFAULT_ICON_HEIGHT;
-            }
-            else {
-                d_cfg->icon_height = 0;
-            }
-        }
-        else if (!strncasecmp(w, "IconHeight=", 11)) {
-            if (action == '-') {
-                return "Cannot combine '-' with IconHeight=n";
-            }
-            d_cfg->icon_height = atoi(&w[11]);
-        }
-        else if (!strcasecmp(w, "NameWidth")) {
-            if (action != '-') {
-                return "NameWidth with no value may only appear as "
-                       "'-NameWidth'";
-            }
-            d_cfg->name_width = DEFAULT_NAME_WIDTH;
-            d_cfg->name_adjust = K_NOADJUST;
-        }
-        else if (!strncasecmp(w, "NameWidth=", 10)) {
-            if (action == '-') {
-                return "Cannot combine '-' with NameWidth=n";
-            }
-            if (w[10] == '*') {
-                d_cfg->name_adjust = K_ADJUST;
-            }
-            else {
-                int width = atoi(&w[10]);
-
-                if (width && (width < 5)) {
-                    return "NameWidth value must be greater than 5";
-                }
-                d_cfg->name_width = width;
-                d_cfg->name_adjust = K_NOADJUST;
-            }
-        }
-        else if (!strcasecmp(w, "DescriptionWidth")) {
-            if (action != '-') { 
-                return "DescriptionWidth with no value may only appear as " 
-                       "'-DescriptionWidth'"; 
-            } 
-            d_cfg->desc_width = DEFAULT_DESC_WIDTH; 
-            d_cfg->desc_adjust = K_NOADJUST; 
-        } 
-        else if (!strncasecmp(w, "DescriptionWidth=", 17)) {
-            if (action == '-') { 
-                return "Cannot combine '-' with DescriptionWidth=n"; 
-            } 
-            if (w[17] == '*') { 
-                d_cfg->desc_adjust = K_ADJUST; 
-            } 
-            else {
-                int width = atoi(&w[17]); 
-
-                if (width && (width < 12)) { 
-                    return "DescriptionWidth value must be greater than 12"; 
-                } 
-                d_cfg->desc_width = width; 
-                d_cfg->desc_adjust = K_NOADJUST; 
-            } 
-        } 
-        else {
-            return "Invalid directory indexing option";
-        }
-        if (action == '\0') {
-            opts |= option;
-            opts_add = 0;
-            opts_remove = 0;
-        }
-        else if (action == '+') {
-            opts_add |= option;
-            opts_remove &= ~option;
-        }
-        else {
-            opts_remove |= option;
-            opts_add &= ~option;
-        }
-    }
-    if ((opts & NO_OPTIONS) && (opts & ~NO_OPTIONS)) {
-        return "Cannot combine other IndexOptions keywords with 'None'";
-    }
-    d_cfg->incremented_opts = opts_add;
-    d_cfg->decremented_opts = opts_remove;
-    d_cfg->opts = opts;
-    return NULL;
-}
-
-static const char *set_default_order(cmd_parms *cmd, void *m,
-                                     const char *direction, const char *key)
-{
-    autoindex_config_rec *d_cfg = (autoindex_config_rec *) m;
-
-    if (!strcasecmp(direction, "Ascending")) {
-        d_cfg->default_direction = D_ASCENDING;
-    }
-    else if (!strcasecmp(direction, "Descending")) {
-        d_cfg->default_direction = D_DESCENDING;
-    }
-    else {
-        return "First keyword must be 'Ascending' or 'Descending'";
-    }
-
-    if (!strcasecmp(key, "Name")) {
-        d_cfg->default_keyid = K_NAME;
-    }
-    else if (!strcasecmp(key, "Date")) {
-        d_cfg->default_keyid = K_LAST_MOD;
-    }
-    else if (!strcasecmp(key, "Size")) {
-        d_cfg->default_keyid = K_SIZE;
-    }
-    else if (!strcasecmp(key, "Description")) {
-        d_cfg->default_keyid = K_DESC;
-    }
-    else {
-        return "Second keyword must be 'Name', 'Date', 'Size', or "
-               "'Description'";
-    }
-
-    return NULL;
-}
-
-#define DIR_CMD_PERMS OR_INDEXES
-
-static const command_rec autoindex_cmds[] =
-{
-    AP_INIT_ITERATE2("AddIcon", add_icon, BY_PATH, DIR_CMD_PERMS, 
-                     "an icon URL followed by one or more filenames"),
-    AP_INIT_ITERATE2("AddIconByType", add_icon, BY_TYPE, DIR_CMD_PERMS,
-                     "an icon URL followed by one or more MIME types"),
-    AP_INIT_ITERATE2("AddIconByEncoding", add_icon, BY_ENCODING, DIR_CMD_PERMS,
-                     "an icon URL followed by one or more content encodings"),
-    AP_INIT_ITERATE2("AddAlt", add_alt, BY_PATH, DIR_CMD_PERMS,
-                     "alternate descriptive text followed by one or more filenames"),
-    AP_INIT_ITERATE2("AddAltByType", add_alt, BY_TYPE, DIR_CMD_PERMS,
-                     "alternate descriptive text followed by one or more MIME types"),
-    AP_INIT_ITERATE2("AddAltByEncoding", add_alt, BY_ENCODING, DIR_CMD_PERMS,
-                     "alternate descriptive text followed by one or more content encodings"),
-    AP_INIT_RAW_ARGS("IndexOptions", add_opts, NULL, DIR_CMD_PERMS,
-                     "one or more index options [+|-][]"),
-    AP_INIT_TAKE2("IndexOrderDefault", set_default_order, NULL, DIR_CMD_PERMS,
-                  "{Ascending,Descending} {Name,Size,Description,Date}"),
-    AP_INIT_ITERATE("IndexIgnore", add_ignore, NULL, DIR_CMD_PERMS,
-                    "one or more file extensions"),
-    AP_INIT_ITERATE2("AddDescription", add_desc, BY_PATH, DIR_CMD_PERMS,
-                     "Descriptive text followed by one or more filenames"),
-    AP_INIT_TAKE1("HeaderName", add_header, NULL, DIR_CMD_PERMS,
-                  "a filename"),
-    AP_INIT_TAKE1("ReadmeName", add_readme, NULL, DIR_CMD_PERMS,
-                  "a filename"),
-    AP_INIT_RAW_ARGS("FancyIndexing", ap_set_deprecated, NULL, OR_ALL,
-                 "The FancyIndexing directive is no longer supported.  Use IndexOptions FancyIndexing."),
-    AP_INIT_TAKE1("DefaultIcon", ap_set_string_slot,
-                  (void *) APR_XtOffsetOf(autoindex_config_rec, default_icon),
-                  DIR_CMD_PERMS, "an icon URL"),
-    {NULL}
-};
-
-static void *create_autoindex_config(apr_pool_t *p, char *dummy)
-{
-    autoindex_config_rec *new =
-    (autoindex_config_rec *) apr_pcalloc(p, sizeof(autoindex_config_rec));
-
-    new->icon_width = 0;
-    new->icon_height = 0;
-    new->name_width = DEFAULT_NAME_WIDTH;
-    new->name_adjust = K_UNSET;
-    new->desc_width = DEFAULT_DESC_WIDTH; 
-    new->desc_adjust = K_UNSET; 
-    new->icon_list = apr_array_make(p, 4, sizeof(struct item));
-    new->alt_list = apr_array_make(p, 4, sizeof(struct item));
-    new->desc_list = apr_array_make(p, 4, sizeof(ai_desc_t));
-    new->ign_list = apr_array_make(p, 4, sizeof(struct item));
-    new->hdr_list = apr_array_make(p, 4, sizeof(struct item));
-    new->rdme_list = apr_array_make(p, 4, sizeof(struct item));
-    new->opts = 0;
-    new->incremented_opts = 0;
-    new->decremented_opts = 0;
-    new->default_keyid = '\0';
-    new->default_direction = '\0';
-
-    return (void *) new;
-}
-
-static void *merge_autoindex_configs(apr_pool_t *p, void *basev, void *addv)
-{
-    autoindex_config_rec *new;
-    autoindex_config_rec *base = (autoindex_config_rec *) basev;
-    autoindex_config_rec *add = (autoindex_config_rec *) addv;
-
-    new = (autoindex_config_rec *) apr_pcalloc(p, sizeof(autoindex_config_rec));
-    new->default_icon = add->default_icon ? add->default_icon
-                                          : base->default_icon;
-    new->icon_height = add->icon_height ? add->icon_height : base->icon_height;
-    new->icon_width = add->icon_width ? add->icon_width : base->icon_width;
-
-    new->alt_list = apr_array_append(p, add->alt_list, base->alt_list);
-    new->ign_list = apr_array_append(p, add->ign_list, base->ign_list);
-    new->hdr_list = apr_array_append(p, add->hdr_list, base->hdr_list);
-    new->desc_list = apr_array_append(p, add->desc_list, base->desc_list);
-    new->icon_list = apr_array_append(p, add->icon_list, base->icon_list);
-    new->rdme_list = apr_array_append(p, add->rdme_list, base->rdme_list);
-    if (add->opts & NO_OPTIONS) {
-        /*
-         * If the current directory says 'no options' then we also
-         * clear any incremental mods from being inheritable further down.
-         */
-        new->opts = NO_OPTIONS;
-        new->incremented_opts = 0;
-        new->decremented_opts = 0;
-    }
-    else {
-        /*
-         * If there were any nonincremental options selected for
-         * this directory, they dominate and we don't inherit *anything.*
-         * Contrariwise, we *do* inherit if the only settings here are
-         * incremental ones.
-         */
-        if (add->opts == 0) {
-            new->incremented_opts = (base->incremented_opts 
-                                     | add->incremented_opts)
-                                    & ~add->decremented_opts;
-            new->decremented_opts = (base->decremented_opts
-                                     | add->decremented_opts);
-            /*
-             * We may have incremental settings, so make sure we don't
-             * inadvertently inherit an IndexOptions None from above.
-             */
-            new->opts = (base->opts & ~NO_OPTIONS);
-        }
-        else {
-            /*
-             * There are local nonincremental settings, which clear
-             * all inheritance from above.  They *are* the new base settings.
-             */
-            new->opts = add->opts;;
-        }
-        /*
-         * We're guaranteed that there'll be no overlap between
-         * the add-options and the remove-options.
-         */
-        new->opts |= new->incremented_opts;
-        new->opts &= ~new->decremented_opts;
-    }
-    /*
-     * Inherit the NameWidth settings if there aren't any specific to
-     * the new location; otherwise we'll end up using the defaults set in the
-     * config-rec creation routine.
-     */
-    if (add->name_adjust == K_UNSET) {
-        new->name_width = base->name_width;
-        new->name_adjust = base->name_adjust;
-    }
-    else {
-        new->name_width = add->name_width;
-        new->name_adjust = add->name_adjust;
-    }
-
-    /* 
-     * Likewise for DescriptionWidth. 
-     */ 
-    if (add->desc_adjust == K_UNSET) { 
-        new->desc_width = base->desc_width; 
-        new->desc_adjust = base->desc_adjust; 
-    } 
-    else {
-        new->desc_width = add->desc_width; 
-        new->desc_adjust = add->desc_adjust; 
-    } 
-
-    new->default_keyid = add->default_keyid ? add->default_keyid 
-                                            : base->default_keyid;
-    new->default_direction = add->default_direction ? add->default_direction 
-                                                    : base->default_direction;
-    return new;
-}
-
-/****************************************************************
- *
- * Looking things up in config entries...
- */
-
-/* Structure used to hold entries when we're actually building an index */
-
-struct ent {
-    char *name;
-    char *icon;
-    char *alt;
-    char *desc;
-    apr_off_t size;
-    apr_time_t lm;
-    struct ent *next;
-    int ascending, version_sort;
-    char key;
-    int isdir;
-};
-
-static char *find_item(request_rec *r, apr_array_header_t *list, int path_only)
-{
-    const char *content_type = ap_field_noparam(r->pool, r->content_type);
-    const char *content_encoding = r->content_encoding;
-    char *path = r->filename;
-
-    struct item *items = (struct item *) list->elts;
-    int i;
-
-    for (i = 0; i < list->nelts; ++i) {
-        struct item *p = &items[i];
-
-        /* Special cased for ^^DIRECTORY^^ and ^^BLANKICON^^ */
-        if ((path[0] == '^') || (!ap_strcmp_match(path, p->apply_path))) {
-            if (!*(p->apply_to)) {
-                return p->data;
-            }
-            else if (p->type == BY_PATH || path[0] == '^') {
-                if (!ap_strcmp_match(path, p->apply_to)) {
-                    return p->data;
-                }
-            }
-            else if (!path_only) {
-                if (!content_encoding) {
-                    if (p->type == BY_TYPE) {
-                        if (content_type
-                            && !ap_strcasecmp_match(content_type,
-                                                    p->apply_to)) {
-                            return p->data;
-                        }
-                    }
-                }
-                else {
-                    if (p->type == BY_ENCODING) {
-                        if (!ap_strcasecmp_match(content_encoding,
-                                                 p->apply_to)) {
-                            return p->data;
-                        }
-                    }
-                }
-            }
-        }
-    }
-    return NULL;
-}
-
-#define find_icon(d,p,t) find_item(p,d->icon_list,t)
-#define find_alt(d,p,t) find_item(p,d->alt_list,t)
-#define find_header(d,p) find_item(p,d->hdr_list,0)
-#define find_readme(d,p) find_item(p,d->rdme_list,0)
-
-static char *find_default_item(char *bogus_name, apr_array_header_t *list)
-{
-    request_rec r;
-    /* Bleah.  I tried to clean up find_item, and it lead to this bit
-     * of ugliness.   Note that the fields initialized are precisely
-     * those that find_item looks at...
-     */
-    r.filename = bogus_name;
-    r.content_type = r.content_encoding = NULL;
-    return find_item(&r, list, 1);
-}
-
-#define find_default_icon(d,n) find_default_item(n, d->icon_list)
-#define find_default_alt(d,n) find_default_item(n, d->alt_list)
-
-/*
- * Look through the list of pattern/description pairs and return the first one
- * if any) that matches the filename in the request.  If multiple patterns
- * match, only the first one is used; since the order in the array is the
- * same as the order in which directives were processed, earlier matching
- * directives will dominate.
- */
-
-#ifdef CASE_BLIND_FILESYSTEM
-#define MATCH_FLAGS FNM_CASE_BLIND
-#else
-#define MATCH_FLAGS 0
-#endif
-
-static char *find_desc(autoindex_config_rec *dcfg, const char *filename_full)
-{
-    int i;
-    ai_desc_t *list = (ai_desc_t *) dcfg->desc_list->elts;
-    const char *filename_only;
-    const char *filename;
-
-    /*
-     * If the filename includes a path, extract just the name itself
-     * for the simple matches.
-     */
-    if ((filename_only = ap_strrchr_c(filename_full, '/')) == NULL) {
-        filename_only = filename_full;
-    }
-    else {
-        filename_only++;
-    }
-    for (i = 0; i < dcfg->desc_list->nelts; ++i) {
-        ai_desc_t *tuple = &list[i];
-        int found;
-
-        /*
-         * Only use the full-path filename if the pattern contains '/'s.
-         */
-        filename = (tuple->full_path) ? filename_full : filename_only;
-        /*
-         * Make the comparison using the cheapest method; only do
-         * wildcard checking if we must.
-         */
-        if (tuple->wildcards) {
-            found = (apr_fnmatch(tuple->pattern, filename, MATCH_FLAGS) == 0);
-        }
-        else {
-            found = (ap_strstr_c(filename, tuple->pattern) != NULL);
-        }
-        if (found) {
-            return tuple->description;
-        }
-    }
-    return NULL;
-}
-
-static int ignore_entry(autoindex_config_rec *d, char *path)
-{
-    apr_array_header_t *list = d->ign_list;
-    struct item *items = (struct item *) list->elts;
-    char *tt;
-    int i;
-
-    if ((tt = strrchr(path, '/')) == NULL) {
-        tt = path;
-    }
-    else {
-        tt++;
-    }
-
-    for (i = 0; i < list->nelts; ++i) {
-        struct item *p = &items[i];
-        char *ap;
-
-        if ((ap = strrchr(p->apply_to, '/')) == NULL) {
-            ap = p->apply_to;
-        }
-        else {
-            ap++;
-        }
-
-#ifndef CASE_BLIND_FILESYSTEM
-        if (!ap_strcmp_match(path, p->apply_path)
-            && !ap_strcmp_match(tt, ap)) {
-            return 1;
-        }
-#else  /* !CASE_BLIND_FILESYSTEM */
-        /*
-         * On some platforms, the match must be case-blind.  This is really
-         * a factor of the filesystem involved, but we can't detect that
-         * reliably - so we have to granularise at the OS level.
-         */
-        if (!ap_strcasecmp_match(path, p->apply_path)
-            && !ap_strcasecmp_match(tt, ap)) {
-            return 1;
-        }
-#endif /* !CASE_BLIND_FILESYSTEM */
-    }
-    return 0;
-}
-
-/*****************************************************************
- *
- * Actually generating output
- */
-
-/*
- * Elements of the emitted document:
- *      Preamble
- *              Emitted unless SUPPRESS_PREAMBLE is set AND ap_run_sub_req
- *              succeeds for the (content_type == text/html) header file.
- *      Header file
- *              Emitted if found (and able).
- *      H1 tag line
- *              Emitted if a header file is NOT emitted.
- *      Directory stuff
- *              Always emitted.
- *      HR
- *              Emitted if FANCY_INDEXING is set.
- *      Readme file
- *              Emitted if found (and able).
- *      ServerSig
- *              Emitted if ServerSignature is not Off AND a readme file
- *              is NOT emitted.
- *      Postamble
- *              Emitted unless SUPPRESS_PREAMBLE is set AND ap_run_sub_req
- *              succeeds for the (content_type == text/html) readme file.
- */
-
-
-/*
- * emit a plain text file
- */
-static void do_emit_plain(request_rec *r, apr_file_t *f)
-{
-    char buf[AP_IOBUFSIZE + 1];
-    int ch;
-    apr_size_t i, c, n;
-    apr_status_t rv;
-
-    ap_rputs("<pre>\n", r);
-    while (!apr_file_eof(f)) {
-        do {
-            n = sizeof(char) * AP_IOBUFSIZE;
-            rv = apr_file_read(f, buf, &n);
-        } while (APR_STATUS_IS_EINTR(rv));
-        if (n == 0 || rv != APR_SUCCESS) {
-            /* ###: better error here? */
-            break;
-        }
-        buf[n] = '\0';
-        c = 0;
-        while (c < n) {
-            for (i = c; i < n; i++) {
-                if (buf[i] == '<' || buf[i] == '>' || buf[i] == '&') {
-                    break;
-                }
-            }
-            ch = buf[i];
-            buf[i] = '\0';
-            ap_rputs(&buf[c], r);
-            if (ch == '<') {
-                ap_rputs("&lt;", r);
-            }
-            else if (ch == '>') {
-                ap_rputs("&gt;", r);
-            }
-            else if (ch == '&') {
-                ap_rputs("&amp;", r);
-            }
-            c = i + 1;
-        }
-    }
-    ap_rputs("</pre>\n", r);
-}
-
-/*
- * Handle the preamble through the H1 tag line, inclusive.  Locate
- * the file with a subrequests.  Process text/html documents by actually
- * running the subrequest; text/xxx documents get copied verbatim,
- * and any other content type is ignored.  This means that a non-text
- * document (such as HEADER.gif) might get multiviewed as the result
- * instead of a text document, meaning nothing will be displayed, but
- * oh well.
- */
-static void emit_head(request_rec *r, char *header_fname, int suppress_amble,
-                      char *title)
-{
-    apr_table_t *hdrs = r->headers_in;
-    apr_file_t *f = NULL;
-    request_rec *rr = NULL;
-    int emit_amble = 1;
-    int emit_H1 = 1;
-    const char *r_accept;
-    const char *r_accept_enc;
-
-    /*
-     * If there's a header file, send a subrequest to look for it.  If it's
-     * found and html do the subrequest, otherwise handle it
-     */
-    r_accept = apr_table_get(hdrs, "Accept");
-    r_accept_enc = apr_table_get(hdrs, "Accept-Encoding");
-    apr_table_setn(hdrs, "Accept", "text/html, text/plain");
-    apr_table_unset(hdrs, "Accept-Encoding");
-
-    if ((header_fname != NULL) && r->args) {
-        header_fname = apr_pstrcat(r->pool, header_fname, "?", r->args, NULL);
-    }
-
-    if ((header_fname != NULL)
-        && (rr = ap_sub_req_lookup_uri(header_fname, r, r->output_filters))
-        && (rr->status == HTTP_OK)
-        && (rr->filename != NULL)
-        && (rr->finfo.filetype == APR_REG)) {
-        /*
-         * Check for the two specific cases we allow: text/html and
-         * text/anything-else.  The former is allowed to be processed for
-         * SSIs.
-         */
-        if (rr->content_type != NULL) {
-            if (!strcasecmp(ap_field_noparam(r->pool, rr->content_type),
-                            "text/html")) {
-                /* Hope everything will work... */
-                emit_amble = 0;
-                emit_H1 = 0;
-
-                if (! suppress_amble) {
-                    emit_preamble(r, title);
-                }
-                /*
-                 * If there's a problem running the subrequest, display the
-                 * preamble if we didn't do it before -- the header file
-                 * didn't get displayed.
-                 */
-                if (ap_run_sub_req(rr) != OK) {
-                    /* It didn't work */
-                    emit_amble = suppress_amble;
-                    emit_H1 = 1;
-                }
-            }
-            else if (!strncasecmp("text/", rr->content_type, 5)) {
-                /*
-                 * If we can open the file, prefix it with the preamble
-                 * regardless; since we'll be sending a <pre> block around
-                 * the file's contents, any HTML header it had won't end up
-                 * where it belongs.
-                 */
-                if (apr_file_open(&f, rr->filename, APR_READ,
-                                  APR_OS_DEFAULT, r->pool) == APR_SUCCESS) {
-                    emit_preamble(r, title);
-                    emit_amble = 0;
-                    do_emit_plain(r, f);
-                    apr_file_close(f);
-                    emit_H1 = 0;
-                }
-            }
-        }
-    }
-
-    if (r_accept) {
-        apr_table_setn(hdrs, "Accept", r_accept);
-    }
-    else {
-        apr_table_unset(hdrs, "Accept");
-    }
-
-    if (r_accept_enc) {
-        apr_table_setn(hdrs, "Accept-Encoding", r_accept_enc);
-    }
-
-    if (emit_amble) {
-        emit_preamble(r, title);
-    }
-    if (emit_H1) {
-        ap_rvputs(r, "<h1>Index of ", title, "</h1>\n", NULL);
-    }
-    if (rr != NULL) {
-        ap_destroy_sub_req(rr);
-    }
-}
-
-
-/*
- * Handle the Readme file through the postamble, inclusive.  Locate
- * the file with a subrequests.  Process text/html documents by actually
- * running the subrequest; text/xxx documents get copied verbatim,
- * and any other content type is ignored.  This means that a non-text
- * document (such as FOOTER.gif) might get multiviewed as the result
- * instead of a text document, meaning nothing will be displayed, but
- * oh well.
- */
-static void emit_tail(request_rec *r, char *readme_fname, int suppress_amble)
-{
-    apr_file_t *f = NULL;
-    request_rec *rr = NULL;
-    int suppress_post = 0;
-    int suppress_sig = 0;
-
-    /*
-     * If there's a readme file, send a subrequest to look for it.  If it's
-     * found and a text file, handle it -- otherwise fall through and
-     * pretend there's nothing there.
-     */
-    if ((readme_fname != NULL)
-        && (rr = ap_sub_req_lookup_uri(readme_fname, r, r->output_filters))
-        && (rr->status == HTTP_OK)
-        && (rr->filename != NULL)
-        && rr->finfo.filetype == APR_REG) {
-        /*
-         * Check for the two specific cases we allow: text/html and
-         * text/anything-else.  The former is allowed to be processed for
-         * SSIs.
-         */
-        if (rr->content_type != NULL) {
-            if (!strcasecmp(ap_field_noparam(r->pool, rr->content_type),
-                            "text/html")) {
-                if (ap_run_sub_req(rr) == OK) {
-                    /* worked... */
-                    suppress_sig = 1;
-                    suppress_post = suppress_amble;
-                }
-            }
-            else if (!strncasecmp("text/", rr->content_type, 5)) {
-                /*
-                 * If we can open the file, suppress the signature.
-                 */
-                if (apr_file_open(&f, rr->filename, APR_READ,
-                                  APR_OS_DEFAULT, r->pool) == APR_SUCCESS) {
-                    do_emit_plain(r, f);
-                    apr_file_close(f);
-                    suppress_sig = 1;
-                }
-            }
-        }
-    }
-    
-    if (!suppress_sig) {
-        ap_rputs(ap_psignature("", r), r);
-    }
-    if (!suppress_post) {
-        ap_rputs("</body></html>\n", r);
-    }
-    if (rr != NULL) {
-        ap_destroy_sub_req(rr);
-    }
-}
-
-
-static char *find_title(request_rec *r)
-{
-    char titlebuf[MAX_STRING_LEN], *find = "<title>";
-    apr_file_t *thefile = NULL;
-    int x, y, p;
-    apr_size_t n;
-
-    if (r->status != HTTP_OK) {
-        return NULL;
-    }
-    if ((r->content_type != NULL)
-        && (!strcasecmp(ap_field_noparam(r->pool, r->content_type),
-                        "text/html")
-            || !strcmp(r->content_type, INCLUDES_MAGIC_TYPE))
-        && !r->content_encoding) {
-        if (apr_file_open(&thefile, r->filename, APR_READ,
-                          APR_OS_DEFAULT, r->pool) != APR_SUCCESS) {
-            return NULL;
-        }
-        n = sizeof(char) * (MAX_STRING_LEN - 1);
-        apr_file_read(thefile, titlebuf, &n);
-        if (n <= 0) {
-            apr_file_close(thefile);
-            return NULL;
-        }
-        titlebuf[n] = '\0';
-        for (x = 0, p = 0; titlebuf[x]; x++) {
-            if (apr_tolower(titlebuf[x]) == find[p]) {
-                if (!find[++p]) {
-                    if ((p = ap_ind(&titlebuf[++x], '<')) != -1) {
-                        titlebuf[x + p] = '\0';
-                    }
-                    /* Scan for line breaks for Tanmoy's secretary */
-                    for (y = x; titlebuf[y]; y++) {
-                        if ((titlebuf[y] == CR) || (titlebuf[y] == LF)) {
-                            if (y == x) {
-                                x++;
-                            }
-                            else {
-                                titlebuf[y] = ' ';
-                            }
-                        }
-                    }
-                    apr_file_close(thefile);
-                    return apr_pstrdup(r->pool, &titlebuf[x]);
-                }
-            }
-            else {
-                p = 0;
-            }
-        }
-        apr_file_close(thefile);
-    }
-    return NULL;
-}
-
-static struct ent *make_parent_entry(apr_int32_t autoindex_opts,
-                                     autoindex_config_rec *d,
-                                     request_rec *r, char keyid, 
-                                     char direction)
-{
-    struct ent *p = (struct ent *) apr_pcalloc(r->pool, sizeof(struct ent));
-    char *testpath;
-    /*
-     * p->name is now the true parent URI.
-     * testpath is a crafted lie, so that the syntax '/some/..'
-     * (or simply '..')be used to describe 'up' from '/some/'
-     * when processeing IndexIgnore, and Icon|Alt|Desc configs.
-     */
-
-    /* The output has always been to the parent.  Don't make ourself
-     * our own parent (worthless cyclical reference).
-     */
-    if (!(p->name = ap_make_full_path(r->pool, r->uri, "../"))) {
-        return (NULL);
-    }
-    ap_getparents(p->name);
-    if (!*p->name) {
-        return (NULL);
-    }
-
-    /* IndexIgnore has always compared "/thispath/.." */
-    testpath = ap_make_full_path(r->pool, r->filename, "..");
-    if (ignore_entry(d, testpath)) {
-        return (NULL);
-    }
-
-    p->size = -1;
-    p->lm = -1;
-    p->key = apr_toupper(keyid);
-    p->ascending = (apr_toupper(direction) == D_ASCENDING);
-    p->version_sort = autoindex_opts & VERSION_SORT;
-    if (autoindex_opts & FANCY_INDEXING) {
-        if (!(p->icon = find_default_icon(d, testpath))) {
-            p->icon = find_default_icon(d, "^^DIRECTORY^^");
-        }
-        if (!(p->alt = find_default_alt(d, testpath))) {
-            if (!(p->alt = find_default_alt(d, "^^DIRECTORY^^"))) {
-                p->alt = "DIR";
-            }
-        }
-        p->desc = find_desc(d, testpath);
-    }
-    return p;
-}
-
-static struct ent *make_autoindex_entry(const apr_finfo_t *dirent, 
-                                        int autoindex_opts,
-                                        autoindex_config_rec *d,
-                                        request_rec *r, char keyid,
-                                        char direction,
-                                        const char *pattern)
-{
-    request_rec *rr;
-    struct ent *p;
-
-    /* Dot is ignored, Parent is handled by make_parent_entry() */
-    if ((dirent->name[0] == '.') && (!dirent->name[1]
-        || ((dirent->name[1] == '.') && !dirent->name[2])))
-        return (NULL);
-
-#ifndef CASE_BLIND_FILESYSTEM
-    if (pattern && (apr_fnmatch(pattern, dirent->name, 
-                                FNM_NOESCAPE | FNM_PERIOD)
-                        != APR_SUCCESS))
-        return (NULL);
-#else  /* !CASE_BLIND_FILESYSTEM */
-        /*
-         * On some platforms, the match must be case-blind.  This is really
-         * a factor of the filesystem involved, but we can't detect that
-         * reliably - so we have to granularise at the OS level.
-         */
-    if (pattern && (apr_fnmatch(pattern, dirent->name, 
-                                FNM_NOESCAPE | FNM_PERIOD | FNM_CASE_BLIND) 
-                        != APR_SUCCESS))
-        return (NULL);
-#endif /* !CASE_BLIND_FILESYSTEM */
-
-    if (ignore_entry(d, ap_make_full_path(r->pool,
-                                          r->filename, dirent->name))) {
-        return (NULL);
-    }
-
-    if (!(rr = ap_sub_req_lookup_dirent(dirent, r, AP_SUBREQ_NO_ARGS, NULL))) {
-        return (NULL);
-    }
-
-    if ((rr->finfo.filetype != APR_DIR && rr->finfo.filetype != APR_REG)
-        || !(rr->status == OK || ap_is_HTTP_SUCCESS(rr->status)
-                              || ap_is_HTTP_REDIRECT(rr->status))) {
-        ap_destroy_sub_req(rr);
-        return (NULL);
-    }
-
-    p = (struct ent *) apr_pcalloc(r->pool, sizeof(struct ent));
-    if (dirent->filetype == APR_DIR) {
-        p->name = apr_pstrcat(r->pool, dirent->name, "/", NULL);
-    }
-    else {
-        p->name = apr_pstrdup(r->pool, dirent->name);
-    }
-    p->size = -1;
-    p->icon = NULL;
-    p->alt = NULL;
-    p->desc = NULL;
-    p->lm = -1;
-    p->isdir = 0;
-    p->key = apr_toupper(keyid);
-    p->ascending = (apr_toupper(direction) == D_ASCENDING);
-    p->version_sort = !!(autoindex_opts & VERSION_SORT);
-
-    if (autoindex_opts & (FANCY_INDEXING | TABLE_INDEXING)) {
-        p->lm = rr->finfo.mtime;
-        if (dirent->filetype == APR_DIR) {
-            if (autoindex_opts & FOLDERS_FIRST) {
-                p->isdir = 1;
-            }
-            if (!(p->icon = find_icon(d, rr, 1))) {
-                p->icon = find_default_icon(d, "^^DIRECTORY^^");
-            }
-            if (!(p->alt = find_alt(d, rr, 1))) {
-                if (!(p->alt = find_default_alt(d, "^^DIRECTORY^^"))) {
-                    p->alt = "DIR";
-                }
-            }
-        }
-        else {
-            p->icon = find_icon(d, rr, 0);
-            p->alt = find_alt(d, rr, 0);
-            p->size = rr->finfo.size;
-        }
-
-        p->desc = find_desc(d, rr->filename);
-
-        if ((!p->desc) && (autoindex_opts & SCAN_HTML_TITLES)) {
-            p->desc = apr_pstrdup(r->pool, find_title(rr));
-        }
-    }
-    ap_destroy_sub_req(rr);
-    /*
-     * We don't need to take any special action for the file size key.
-     * If we did, it would go here.
-     */
-    if (keyid == K_LAST_MOD) {
-        if (p->lm < 0) {
-            p->lm = 0;
-        }
-    }
-    return (p);
-}
-
-static char *terminate_description(autoindex_config_rec *d, char *desc,
-                                   apr_int32_t autoindex_opts, int desc_width)
-{
-    int maxsize = desc_width;
-    register int x;
-
-    /* 
-     * If there's no DescriptionWidth in effect, default to the old
-     * behaviour of adjusting the description size depending upon 
-     * what else is being displayed.  Otherwise, stick with the 
-     * setting. 
-     */ 
-    if (d->desc_adjust == K_UNSET) { 
-        if (autoindex_opts & SUPPRESS_ICON) {
-            maxsize += 6;
-        }
-        if (autoindex_opts & SUPPRESS_LAST_MOD) {
-            maxsize += 19;
-        }
-        if (autoindex_opts & SUPPRESS_SIZE) {
-            maxsize += 7;
-        }
-    }
-    for (x = 0; desc[x] && ((maxsize > 0) || (desc[x] == '<')); x++) {
-        if (desc[x] == '<') {
-            while (desc[x] != '>') {
-                if (!desc[x]) {
-                    maxsize = 0;
-                    break;
-                }
-                ++x;
-            }
-        }
-        else if (desc[x] == '&') {
-            /* entities like &auml; count as one character */
-            --maxsize;
-            for ( ; desc[x] != ';'; ++x) {
-                if (desc[x] == '\0') {
-                     maxsize = 0;
-                     break;
-                }
-            }
-        }
-        else {
-            --maxsize;
-        }
-    }
-    if (!maxsize && desc[x] != '\0') {
-        desc[x - 1] = '>';      /* Grump. */
-        desc[x] = '\0';         /* Double Grump! */
-    }
-    return desc;
-}
-
-/*
- * Emit the anchor for the specified field.  If a field is the key for the
- * current request, the link changes its meaning to reverse the order when
- * selected again.  Non-active fields always start in ascending order.
- */
-static void emit_link(request_rec *r, const char *anchor, char column, 
-                      char curkey, char curdirection, 
-                      const char *colargs, int nosort)
-{
-    char qvalue[9];
-    int reverse;
-
-    if (!nosort) {
-        reverse = ((curkey == column) && (curdirection == D_ASCENDING));
-        qvalue[0] = '?';
-        qvalue[1] = 'C';
-        qvalue[2] = '=';
-        qvalue[3] = column;
-        qvalue[4] = '&';
-        qvalue[5] = 'O';
-        qvalue[6] = '=';
-        qvalue[7] = reverse ? D_DESCENDING : D_ASCENDING;
-        qvalue[8] = '\0';
-        ap_rvputs(r, "<a href=\"", qvalue, colargs ? colargs : "", 
-                     "\">", anchor, "</a>", NULL);
-    }
-    else {
-        ap_rputs(anchor, r);
-    }
-}
-
-static void output_directories(struct ent **ar, int n,
-                               autoindex_config_rec *d, request_rec *r,
-                               apr_int32_t autoindex_opts, char keyid, 
-                               char direction, const char *colargs)
-{
-    int x;
-    apr_size_t rv;
-    char *name = r->uri;
-    char *tp;
-    int static_columns = !!(autoindex_opts & SUPPRESS_COLSORT);
-    apr_pool_t *scratch;
-    int name_width;
-    int desc_width;
-    char *name_scratch;
-    char *pad_scratch;
-    char *breakrow = "";
-
-    apr_pool_create(&scratch, r->pool);
-    if (name[0] == '\0') {
-        name = "/";
-    }
-
-    name_width = d->name_width;
-    desc_width = d->desc_width; 
-
-    if ((autoindex_opts & (FANCY_INDEXING | TABLE_INDEXING)) 
-                        == FANCY_INDEXING) {
-        if (d->name_adjust == K_ADJUST) {
-            for (x = 0; x < n; x++) {
-                int t = strlen(ar[x]->name);
-                if (t > name_width) {
-                    name_width = t;
-                }
-            }
-        }
-
-        if (d->desc_adjust == K_ADJUST) { 
-            for (x = 0; x < n; x++) {
-                if (ar[x]->desc != NULL) { 
-                    int t = strlen(ar[x]->desc); 
-                    if (t > desc_width) { 
-                        desc_width = t; 
-                    } 
-                } 
-            } 
-        } 
-    }
-    name_scratch = apr_palloc(r->pool, name_width + 1);
-    pad_scratch = apr_palloc(r->pool, name_width + 1);
-    memset(pad_scratch, ' ', name_width);
-    pad_scratch[name_width] = '\0';
-
-    if (autoindex_opts & TABLE_INDEXING) {
-        int cols = 1;
-        ap_rputs("<table><tr>", r);
-        if (!(autoindex_opts & SUPPRESS_ICON)) {
-            ap_rputs("<th title=\"Icon\">", r);
-            if ((tp = find_default_icon(d, "^^BLANKICON^^"))) {
-                ap_rvputs(r, "<img src=\"", ap_escape_html(scratch, tp),
-                             "\" alt=\"[ICO]\"", NULL);
-                if (d->icon_width) {
-                    ap_rprintf(r, " width=\"%d\"", d->icon_width);
-                }
-                if (d->icon_height) {
-                    ap_rprintf(r, " height=\"%d\"", d->icon_height);
-                }
-                ap_rputs(" /></th>", r);
-            }
-            else {
-                ap_rputs("&nbsp;</th>", r);
-            }
-            
-            ++cols;
-        }
-        ap_rputs("<th>", r);
-        emit_link(r, "Name", K_NAME, keyid, direction, 
-                  colargs, static_columns);
-        if (!(autoindex_opts & SUPPRESS_LAST_MOD)) {
-            ap_rputs("</th><th>", r);
-            emit_link(r, "Last modified", K_LAST_MOD, keyid, direction, 
-                      colargs, static_columns);
-            ++cols;
-        }
-        if (!(autoindex_opts & SUPPRESS_SIZE)) {
-            ap_rputs("</th><th>", r);
-            emit_link(r, "Size", K_SIZE, keyid, direction, 
-                      colargs, static_columns);
-            ++cols;
-        }
-        if (!(autoindex_opts & SUPPRESS_DESC)) {
-            ap_rputs("</th><th>", r);
-            emit_link(r, "Description", K_DESC, keyid, direction, 
-                      colargs, static_columns);
-            ++cols;
-        }
-        if (!(autoindex_opts & SUPPRESS_RULES)) {
-            breakrow = apr_psprintf(r->pool,
-                                    "<tr><th colspan=\"%d\">"
-                                    "<hr /></th></tr>\n", cols);
-        }
-        ap_rvputs(r, "</th></tr>", breakrow, NULL);
-    }
-    else if (autoindex_opts & FANCY_INDEXING) {
-        ap_rputs("<pre>", r);
-        if (!(autoindex_opts & SUPPRESS_ICON)) {
-            if ((tp = find_default_icon(d, "^^BLANKICON^^"))) {
-                ap_rvputs(r, "<img src=\"", ap_escape_html(scratch, tp),
-                             "\" alt=\"Icon \"", NULL);
-                if (d->icon_width) {
-                    ap_rprintf(r, " width=\"%d\"", d->icon_width);
-                }
-                if (d->icon_height) {
-                    ap_rprintf(r, " height=\"%d\"", d->icon_height);
-                }
-                ap_rputs(" /> ", r);
-            }
-            else {
-                ap_rputs("      ", r);
-            }
-        }
-        emit_link(r, "Name", K_NAME, keyid, direction, 
-                  colargs, static_columns);
-        ap_rputs(pad_scratch + 4, r);
-        /*
-         * Emit the guaranteed-at-least-one-space-between-columns byte.
-         */
-        ap_rputs(" ", r);
-        if (!(autoindex_opts & SUPPRESS_LAST_MOD)) {
-            emit_link(r, "Last modified", K_LAST_MOD, keyid, direction,
-                      colargs, static_columns);
-            ap_rputs("      ", r);
-        }
-        if (!(autoindex_opts & SUPPRESS_SIZE)) {
-            emit_link(r, "Size", K_SIZE, keyid, direction, 
-                      colargs, static_columns);
-            ap_rputs("  ", r);
-        }
-        if (!(autoindex_opts & SUPPRESS_DESC)) {
-            emit_link(r, "Description", K_DESC, keyid, direction,
-                      colargs, static_columns);
-        }
-        if (!(autoindex_opts & SUPPRESS_RULES)) {
-            ap_rputs("<hr />", r);
-        }
-    }
-    else {
-        ap_rputs("<ul>", r);
-    }
-
-    for (x = 0; x < n; x++) {
-        char *anchor, *t, *t2;
-        int nwidth;
-
-        apr_pool_clear(scratch);
-
-        t = ar[x]->name;
-        anchor = ap_escape_html(scratch, ap_os_escape_path(scratch, t, 0));
-
-        if (!x && t[0] == '/') {
-            t2 = "Parent Directory";
-        }
-        else {
-            t2 = t;
-        }
-
-        if (autoindex_opts & TABLE_INDEXING) {
-            if (!(autoindex_opts & SUPPRESS_ICON)) {
-                ap_rputs("<tr><td valign=\"top\">", r);
-                if (autoindex_opts & ICONS_ARE_LINKS) {
-                    ap_rvputs(r, "<a href=\"", anchor, "\">", NULL);
-                }
-                if ((ar[x]->icon) || d->default_icon) {
-                    ap_rvputs(r, "<img src=\"",
-                              ap_escape_html(scratch,
-                                             ar[x]->icon ? ar[x]->icon
-                                                         : d->default_icon),
-                              "\" alt=\"[", (ar[x]->alt ? ar[x]->alt : "   "),
-                              "]\"", NULL);
-                    if (d->icon_width) {
-                        ap_rprintf(r, " width=\"%d\"", d->icon_width);
-                    }
-                    if (d->icon_height) {
-                        ap_rprintf(r, " height=\"%d\"", d->icon_height);
-                    }
-                    ap_rputs(" />", r);
-                }
-                else {
-                    ap_rputs("&nbsp;", r);            
-                }
-                if (autoindex_opts & ICONS_ARE_LINKS) {
-                    ap_rputs("</a></td>", r);
-                }
-                else {
-                    ap_rputs("</td>", r);
-                }
-            }
-            if (d->name_adjust == K_ADJUST) {
-                ap_rvputs(r, "<td><a href=\"", anchor, "\">",
-                          ap_escape_html(scratch, t2), "</a>", NULL);
-            }
-            else {
-                nwidth = strlen(t2);
-                if (nwidth > name_width) {
-                  memcpy(name_scratch, t2, name_width - 3);
-                  name_scratch[name_width - 3] = '.';
-                  name_scratch[name_width - 2] = '.';
-                  name_scratch[name_width - 1] = '>';
-                  name_scratch[name_width] = 0;
-                  t2 = name_scratch;
-                  nwidth = name_width;
-                }
-                ap_rvputs(r, "<td><a href=\"", anchor, "\">",
-                          ap_escape_html(scratch, t2),
-                          "</a>", pad_scratch + nwidth, NULL);
-            }
-            if (!(autoindex_opts & SUPPRESS_LAST_MOD)) {
-                if (ar[x]->lm != -1) {
-                    char time_str[MAX_STRING_LEN];
-                    apr_time_exp_t ts;
-                    apr_explode_localtime(&ts, ar[x]->lm);
-                    apr_strftime(time_str, &rv, MAX_STRING_LEN, 
-                                 "</td><td align=\"right\">%d-%b-%Y %H:%M  ", &ts);
-                    ap_rputs(time_str, r);
-                }
-                else {
-                    ap_rputs("</td><td>&nbsp;", r);
-                }
-            }
-            if (!(autoindex_opts & SUPPRESS_SIZE)) {
-                char buf[5];
-                ap_rvputs(r, "</td><td align=\"right\">",
-                          apr_strfsize(ar[x]->size, buf), NULL);
-            }
-            if (!(autoindex_opts & SUPPRESS_DESC)) {
-                if (ar[x]->desc) {
-                    if (d->desc_adjust == K_ADJUST) {
-                        ap_rvputs(r, "</td><td>", ar[x]->desc, NULL);
-                    }
-                    else {
-                        ap_rvputs(r, "</td><td>", 
-                                  terminate_description(d, ar[x]->desc,
-                                                        autoindex_opts, 
-                                                        desc_width), NULL);
-                    }
-                }
-            }
-            else {
-                ap_rputs("</td><td>&nbsp;", r);
-            }
-            ap_rputs("</td></tr>\n", r);
-        }
-        else if (autoindex_opts & FANCY_INDEXING) {
-            if (!(autoindex_opts & SUPPRESS_ICON)) {
-                if (autoindex_opts & ICONS_ARE_LINKS) {
-                    ap_rvputs(r, "<a href=\"", anchor, "\">", NULL);
-                }
-                if ((ar[x]->icon) || d->default_icon) {
-                    ap_rvputs(r, "<img src=\"",
-                              ap_escape_html(scratch,
-                                             ar[x]->icon ? ar[x]->icon
-                                                         : d->default_icon),
-                              "\" alt=\"[", (ar[x]->alt ? ar[x]->alt : "   "),
-                              "]\"", NULL);
-                    if (d->icon_width) {
-                        ap_rprintf(r, " width=\"%d\"", d->icon_width);
-                    }
-                    if (d->icon_height) {
-                        ap_rprintf(r, " height=\"%d\"", d->icon_height);
-                    }
-                    ap_rputs(" />", r);
-                }
-                else {
-                    ap_rputs("     ", r);
-                }
-                if (autoindex_opts & ICONS_ARE_LINKS) {
-                    ap_rputs("</a> ", r);
-                }
-                else {
-                    ap_rputc(' ', r);
-                }
-            }
-            nwidth = strlen(t2);
-            if (nwidth > name_width) {
-                memcpy(name_scratch, t2, name_width - 3);
-                name_scratch[name_width - 3] = '.';
-                name_scratch[name_width - 2] = '.';
-                name_scratch[name_width - 1] = '>';
-                name_scratch[name_width] = 0;
-                t2 = name_scratch;
-                nwidth = name_width;
-            }
-            ap_rvputs(r, "<a href=\"", anchor, "\">",
-                      ap_escape_html(scratch, t2),
-                      "</a>", pad_scratch + nwidth, NULL);
-            /*
-             * The blank before the storm.. er, before the next field.
-             */
-            ap_rputs(" ", r);
-            if (!(autoindex_opts & SUPPRESS_LAST_MOD)) {
-                if (ar[x]->lm != -1) {
-                    char time_str[MAX_STRING_LEN];
-                    apr_time_exp_t ts;
-                    apr_explode_localtime(&ts, ar[x]->lm);
-                    apr_strftime(time_str, &rv, MAX_STRING_LEN, 
-                                "%d-%b-%Y %H:%M  ", &ts);
-                    ap_rputs(time_str, r);
-                }
-                else {
-                    /*Length="22-Feb-1998 23:42  " (see 4 lines above) */
-                    ap_rputs("                   ", r);
-                }
-            }
-            if (!(autoindex_opts & SUPPRESS_SIZE)) {
-                char buf[5];
-                ap_rputs(apr_strfsize(ar[x]->size, buf), r);
-                ap_rputs("  ", r);
-            }
-            if (!(autoindex_opts & SUPPRESS_DESC)) {
-                if (ar[x]->desc) {
-                    ap_rputs(terminate_description(d, ar[x]->desc,
-                                                   autoindex_opts,
-                                                   desc_width), r);
-                }
-            }
-            ap_rputc('\n', r);
-        }
-        else {
-            ap_rvputs(r, "<li><a href=\"", anchor, "\"> ", t2,
-                         "</a></li>\n", NULL);
-        }
-    }
-    if (autoindex_opts & TABLE_INDEXING) {
-        ap_rvputs(r, breakrow, "</table>\n", NULL);
-    }
-    else if (autoindex_opts & FANCY_INDEXING) {
-        if (!(autoindex_opts & SUPPRESS_RULES)) {
-            ap_rputs("<hr /></pre>\n", r);
-        }
-        else {
-            ap_rputs("</pre>\n", r);
-        }
-    }
-    else {
-        ap_rputs("</ul>\n", r);
-    }
-}
-
-/*
- * Compare two file entries according to the sort criteria.  The return
- * is essentially a signum function value.
- */
-
-static int dsortf(struct ent **e1, struct ent **e2)
-{
-    struct ent *c1;
-    struct ent *c2;
-    int result = 0;
-
-    /*
-     * First, see if either of the entries is for the parent directory.
-     * If so, that *always* sorts lower than anything else.
-     */
-    if ((*e1)->name[0] == '/') {
-        return -1;
-    }
-    if ((*e2)->name[0] == '/') {
-        return 1;
-    }
-    /* 
-     * Now see if one's a directory and one isn't, if we're set
-     * isdir for FOLDERS_FIRST. 
-     */ 
-    if ((*e1)->isdir != (*e2)->isdir) {
-        return (*e1)->isdir ? -1 : 1; 
-    }
-    /*
-     * All of our comparisons will be of the c1 entry against the c2 one,
-     * so assign them appropriately to take care of the ordering.
-     */
-    if ((*e1)->ascending) {
-        c1 = *e1;
-        c2 = *e2;
-    }
-    else {
-        c1 = *e2;
-        c2 = *e1;
-    }
-
-    switch (c1->key) {
-    case K_LAST_MOD:
-        if (c1->lm > c2->lm) {
-            return 1;
-        }
-        else if (c1->lm < c2->lm) {
-            return -1;
-        }
-        break;
-    case K_SIZE:
-        if (c1->size > c2->size) {
-            return 1;
-        }
-        else if (c1->size < c2->size) {
-            return -1;
-        }
-        break;
-    case K_DESC:
-        if (c1->version_sort) {
-            result = apr_strnatcmp(c1->desc ? c1->desc : "",
-                                   c2->desc ? c2->desc : "");
-        }
-        else {
-            result = strcmp(c1->desc ? c1->desc : "",
-                            c2->desc ? c2->desc : "");
-        }
-        if (result) {
-            return result;
-        }
-        break;
-    }
-    if (c1->version_sort) {
-        return apr_strnatcmp(c1->name, c2->name);
-    }
-    else {
-        return strcmp(c1->name, c2->name);
-    }
-}
-
-
-static int index_directory(request_rec *r,
-                           autoindex_config_rec *autoindex_conf)
-{
-    char *title_name = ap_escape_html(r->pool, r->uri);
-    char *title_endp;
-    char *name = r->filename;
-    char *pstring = NULL;
-    apr_finfo_t dirent;
-    apr_dir_t *thedir;
-    apr_status_t status;
-    int num_ent = 0, x;
-    struct ent *head, *p;
-    struct ent **ar = NULL;
-    const char *qstring;
-    apr_int32_t autoindex_opts = autoindex_conf->opts;
-    char keyid;
-    char direction;
-    char *colargs;
-    char *fullpath;
-    apr_size_t dirpathlen;
-
-    if ((status = apr_dir_open(&thedir, name, r->pool)) != APR_SUCCESS) {
-        ap_log_rerror(APLOG_MARK, APLOG_ERR, status, r,
-                      "Can't open directory for index: %s", r->filename);
-        return HTTP_FORBIDDEN;
-    }
-
-#if APR_HAS_UNICODE_FS 
-    r->content_type = "text/html;charset=utf-8";
-#else
-    r->content_type = "text/html";
-#endif
-    if (autoindex_opts & TRACK_MODIFIED) {
-        ap_update_mtime(r, r->finfo.mtime);
-        ap_set_last_modified(r);
-        ap_set_etag(r);
-    }
-    if (r->header_only) {
-        apr_dir_close(thedir);
-        return 0;
-    }
-
-    /*
-     * If there is no specific ordering defined for this directory,
-     * default to ascending by filename.
-     */
-    keyid = autoindex_conf->default_keyid 
-                ? autoindex_conf->default_keyid : K_NAME;
-    direction = autoindex_conf->default_direction 
-                ? autoindex_conf->default_direction : D_ASCENDING;
-
-    /*
-     * Figure out what sort of indexing (if any) we're supposed to use.
-     *
-     * If no QUERY_STRING was specified or client query strings have been
-     * explicitly disabled.  
-     * If we are ignoring the client, suppress column sorting as well.
-     */
-    if (autoindex_opts & IGNORE_CLIENT) {
-        qstring = NULL;
-        autoindex_opts |= SUPPRESS_COLSORT;
-        colargs = "";
-    }
-    else {
-        char fval[5], vval[5], *ppre = "";
-        fval[0] = '\0'; vval[0] = '\0';
-        qstring = r->args;
-
-        while (qstring && *qstring) {
-            if (qstring[0] == 'C' && qstring[1] == '='
-                    && qstring[2] && strchr(K_VALID, qstring[2])
-                    && (qstring[3] == '&' || !qstring[3])) {
-                keyid = qstring[2];
-                qstring += qstring[3] ? 4 : 3;
-            }
-            else if (qstring[0] == 'O' && qstring[1] == '='
-                     && ((qstring[2] == D_ASCENDING)
-                         || (qstring[2] == D_DESCENDING)) 
-                     && (qstring[3] == '&' || !qstring[3])) {
-                direction = qstring[2];
-                qstring += qstring[3] ? 4 : 3;
-            }
-            else if (qstring[0] == 'F' && qstring[1] == '='
-                     && qstring[2] && strchr("012", qstring[2])
-                     && (qstring[3] == '&' || !qstring[3])) {
-                if (qstring[2] == '0') {
-                    autoindex_opts &= ~(FANCY_INDEXING | TABLE_INDEXING);
-                }
-                else if (qstring[2] == '1') {
-                    autoindex_opts = (autoindex_opts | FANCY_INDEXING)
-                        & ~TABLE_INDEXING;
-                }
-                else if (qstring[2] == '2') {
-                    autoindex_opts |= FANCY_INDEXING | TABLE_INDEXING;
-                }
-                strcpy(fval, "&F= "); 
-                fval[3] = qstring[2];
-                qstring += qstring[3] ? 4 : 3;
-            }
-            else if (qstring[0] == 'V' && qstring[1] == '='
-                     && (qstring[2] == '0' || qstring[2] == '1')
-                     && (qstring[3] == '&' || !qstring[3])) {
-                if (qstring[2] == '0') {
-                    autoindex_opts &= ~VERSION_SORT;
-                }
-                else if (qstring[2] == '1') {
-                    autoindex_opts |= VERSION_SORT;
-                }
-                strcpy(fval, "&V= "); 
-                vval[3] = qstring[2];
-                qstring += qstring[3] ? 4 : 3;
-            }
-            else if (qstring[0] == 'P' && qstring[1] == '=') {
-                const char *eos = ap_strchr_c(qstring, '&');
-                if (eos) {
-                    pstring = apr_pstrndup(r->pool, qstring + 2, 
-                                           eos - qstring - 2);
-                    qstring = eos + 1;
-                }
-                else {
-                    pstring = apr_pstrdup(r->pool, qstring + 2);
-                    qstring = NULL;
-                }
-                if (*pstring) {
-                    ppre = "&P="; 
-                }
-                else {
-                    pstring = NULL;
-                }
-            }
-            else {              /* Syntax error?  Ignore the remainder! */
-                qstring = NULL;
-            }
-        }
-        colargs = apr_pstrcat(r->pool, fval, vval, ppre, pstring, NULL);
-    }
-
-    /* Spew HTML preamble */
-    title_endp = title_name + strlen(title_name) - 1;
-
-    while (title_endp > title_name && *title_endp == '/') {
-        *title_endp-- = '\0';
-    }
-
-    emit_head(r, find_header(autoindex_conf, r),
-              autoindex_opts & SUPPRESS_PREAMBLE, title_name);
-
-    /* 
-     * Since we don't know how many dir. entries there are, put them into a 
-     * linked list and then arrayificate them so qsort can use them. 
-     */
-    head = NULL;
-    p = make_parent_entry(autoindex_opts, autoindex_conf, r, keyid, direction);
-    if (p != NULL) {
-        p->next = head;
-        head = p;
-        num_ent++;
-    }
-    fullpath = apr_palloc(r->pool, APR_PATH_MAX);
-    dirpathlen = strlen(name);
-    memcpy(fullpath, name, dirpathlen);
-    while (apr_dir_read(&dirent, APR_FINFO_MIN | APR_FINFO_NAME, thedir) == APR_SUCCESS) {
-        /* We want to explode symlinks here. */
-        if (dirent.filetype == APR_LNK) {
-            const char *savename;
-            apr_finfo_t fi;
-            /* We *must* have FNAME. */
-            savename = dirent.name;
-            apr_cpystrn(fullpath + dirpathlen, dirent.name,
-                        APR_PATH_MAX - dirpathlen);
-            status = apr_stat(&fi, fullpath, 
-                              dirent.valid & ~(APR_FINFO_NAME), r->pool);
-            if (status != APR_SUCCESS) {
-                /* Something bad happened, skip this file. */
-                continue;
-            }
-            memcpy(&dirent, &fi, sizeof(fi));
-            dirent.name = savename;
-            dirent.valid |= APR_FINFO_NAME;
-        }
-        p = make_autoindex_entry(&dirent, autoindex_opts, autoindex_conf, r, 
-                                 keyid, direction, pstring);
-        if (p != NULL) {
-            p->next = head;
-            head = p;
-            num_ent++;
-        }
-    }
-    if (num_ent > 0) {
-        ar = (struct ent **) apr_palloc(r->pool,
-                                        num_ent * sizeof(struct ent *));
-        p = head;
-        x = 0;
-        while (p) {
-            ar[x++] = p;
-            p = p->next;
-        }
-
-        qsort((void *) ar, num_ent, sizeof(struct ent *),
-              (int (*)(const void *, const void *)) dsortf);
-    }
-    output_directories(ar, num_ent, autoindex_conf, r, autoindex_opts, 
-                       keyid, direction, colargs);
-    apr_dir_close(thedir);
-
-    emit_tail(r, find_readme(autoindex_conf, r),
-              autoindex_opts & SUPPRESS_PREAMBLE);
-
-    return 0;
-}
-
-/* The formal handler... */
-
-static int handle_autoindex(request_rec *r)
-{
-    autoindex_config_rec *d;
-    int allow_opts;
-
-    if(strcmp(r->handler,DIR_MAGIC_TYPE)) {
-        return DECLINED;
-    }
-
-    allow_opts = ap_allow_options(r);
-
-    d = (autoindex_config_rec *) ap_get_module_config(r->per_dir_config,
-                                                      &autoindex_module);
-
-    r->allowed |= (AP_METHOD_BIT << M_GET);
-    if (r->method_number != M_GET) {
-        return DECLINED;
-    }
-
-    /* OK, nothing easy.  Trot out the heavy artillery... */
-
-    if (allow_opts & OPT_INDEXES) {
-        /* KLUDGE --- make the sub_req lookups happen in the right directory.
-         * Fixing this in the sub_req_lookup functions themselves is difficult,
-         * and would probably break virtual includes...
-         */
-
-        if (r->filename[strlen(r->filename) - 1] != '/') {
-            r->filename = apr_pstrcat(r->pool, r->filename, "/", NULL);
-        }
-        return index_directory(r, d);
-    }
-    else {
-        ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                      "Directory index forbidden by rule: %s", r->filename);
-        return HTTP_FORBIDDEN;
-    }
-}
-
-static void register_hooks(apr_pool_t *p)
-{
-    ap_hook_handler(handle_autoindex,NULL,NULL,APR_HOOK_MIDDLE);
-}
-
-module AP_MODULE_DECLARE_DATA autoindex_module =
-{
-    STANDARD20_MODULE_STUFF,
-    create_autoindex_config,    /* dir config creater */
-    merge_autoindex_configs,    /* dir merger --- default is to override */
-    NULL,                       /* server config */
-    NULL,                       /* merge server config */
-    autoindex_cmds,             /* command apr_table_t */
-    register_hooks              /* register hooks */
-};
diff --git a/modules/generators/mod_autoindex.dsp b/modules/generators/mod_autoindex.dsp
deleted file mode 100644
index 4030391..0000000
--- a/modules/generators/mod_autoindex.dsp
+++ /dev/null
@@ -1,128 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mod_autoindex" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mod_autoindex - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "mod_autoindex.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "mod_autoindex.mak" CFG="mod_autoindex - Win32 Release"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "mod_autoindex - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mod_autoindex - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "mod_autoindex - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /O2 /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Release\mod_autoindex" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /map /machine:I386 /out:"Release/mod_autoindex.so" /base:@..\..\os\win32\BaseAddr.ref,mod_autoindex
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /map /machine:I386 /out:"Release/mod_autoindex.so" /base:@..\..\os\win32\BaseAddr.ref,mod_autoindex
-
-!ELSEIF  "$(CFG)" == "mod_autoindex - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Debug\mod_autoindex" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /map /debug /machine:I386 /out:"Debug/mod_autoindex.so" /base:@..\..\os\win32\BaseAddr.ref,mod_autoindex
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /map /debug /machine:I386 /out:"Debug/mod_autoindex.so" /base:@..\..\os\win32\BaseAddr.ref,mod_autoindex
-
-!ENDIF 
-
-# Begin Target
-
-# Name "mod_autoindex - Win32 Release"
-# Name "mod_autoindex - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\mod_autoindex.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mod_autoindex.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\build\win32\win32ver.awk
-
-!IF  "$(CFG)" == "mod_autoindex - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_autoindex.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ../../build/win32/win32ver.awk mod_autoindex  "autoindex_module for Apache" ../../include/ap_release.h > .\mod_autoindex.rc
-
-# End Custom Build
-
-!ELSEIF  "$(CFG)" == "mod_autoindex - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_autoindex.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ../../build/win32/win32ver.awk mod_autoindex  "autoindex_module for Apache" ../../include/ap_release.h > .\mod_autoindex.rc
-
-# End Custom Build
-
-!ENDIF 
-
-# End Source File
-# End Target
-# End Project
diff --git a/modules/generators/mod_autoindex.exp b/modules/generators/mod_autoindex.exp
deleted file mode 100644
index 90f4057..0000000
--- a/modules/generators/mod_autoindex.exp
+++ /dev/null
@@ -1 +0,0 @@
-autoindex_module
diff --git a/modules/generators/mod_cgi.c b/modules/generators/mod_cgi.c
deleted file mode 100644
index 69226a8..0000000
--- a/modules/generators/mod_cgi.c
+++ /dev/null
@@ -1,987 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-/*
- * http_script: keeps all script-related ramblings together.
- * 
- * Compliant to CGI/1.1 spec
- * 
- * Adapted by rst from original NCSA code by Rob McCool
- *
- * Apache adds some new env vars; REDIRECT_URL and REDIRECT_QUERY_STRING for
- * custom error responses, and DOCUMENT_ROOT because we found it useful.
- * It also adds SERVER_ADMIN - useful for scripts to know who to mail when 
- * they fail.
- */
-
-#include "apr.h"
-#include "apr_strings.h"
-#include "apr_thread_proc.h"    /* for RLIMIT stuff */
-#include "apr_optional.h"
-#include "apr_buckets.h"
-#include "apr_lib.h"
-
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-#define CORE_PRIVATE
-
-#include "util_filter.h"
-#include "ap_config.h"
-#include "httpd.h"
-#include "http_config.h"
-#include "http_request.h"
-#include "http_core.h"
-#include "http_protocol.h"
-#include "http_main.h"
-#include "http_log.h"
-#include "util_script.h"
-#include "ap_mpm.h"
-#include "mod_core.h"
-#include "../filters/mod_include.h"
-#include "mod_cgi.h"
-
-module AP_MODULE_DECLARE_DATA cgi_module;
-
-static APR_OPTIONAL_FN_TYPE(ap_register_include_handler) *cgi_pfn_reg_with_ssi;
-static APR_OPTIONAL_FN_TYPE(ap_ssi_get_tag_and_value) *cgi_pfn_gtv;
-static APR_OPTIONAL_FN_TYPE(ap_ssi_parse_string) *cgi_pfn_ps;
-static APR_OPTIONAL_FN_TYPE(ap_cgi_build_command) *cgi_build_command;
-
-typedef enum {RUN_AS_SSI, RUN_AS_CGI} prog_types;
-
-typedef struct {
-    apr_int32_t          in_pipe;
-    apr_int32_t          out_pipe;
-    apr_int32_t          err_pipe;
-    apr_cmdtype_e        cmd_type;
-    prog_types           prog_type;
-    apr_bucket_brigade **bb;
-    include_ctx_t       *ctx;
-    ap_filter_t         *next;
-} exec_info;
-
-/* KLUDGE --- for back-combatibility, we don't have to check ExecCGI
- * in ScriptAliased directories, which means we need to know if this
- * request came through ScriptAlias or not... so the Alias module
- * leaves a note for us.
- */
-
-static int is_scriptaliased(request_rec *r)
-{
-    const char *t = apr_table_get(r->notes, "alias-forced-type");
-    return t && (!strcasecmp(t, "cgi-script"));
-}
-
-/* Configuration stuff */
-
-#define DEFAULT_LOGBYTES 10385760
-#define DEFAULT_BUFBYTES 1024
-
-typedef struct {
-    const char *logname;
-    long logbytes;
-    int bufbytes;
-} cgi_server_conf;
-
-static void *create_cgi_config(apr_pool_t *p, server_rec *s)
-{
-    cgi_server_conf *c =
-    (cgi_server_conf *) apr_pcalloc(p, sizeof(cgi_server_conf));
-
-    c->logname = NULL;
-    c->logbytes = DEFAULT_LOGBYTES;
-    c->bufbytes = DEFAULT_BUFBYTES;
-
-    return c;
-}
-
-static void *merge_cgi_config(apr_pool_t *p, void *basev, void *overridesv)
-{
-    cgi_server_conf *base = (cgi_server_conf *) basev, *overrides = (cgi_server_conf *) overridesv;
-
-    return overrides->logname ? overrides : base;
-}
-
-static const char *set_scriptlog(cmd_parms *cmd, void *dummy, const char *arg)
-{
-    server_rec *s = cmd->server;
-    cgi_server_conf *conf = ap_get_module_config(s->module_config,
-                                                 &cgi_module);
-
-    conf->logname = ap_server_root_relative(cmd->pool, arg);
-
-    if (!conf->logname) {
-        return apr_pstrcat(cmd->pool, "Invalid ScriptLog path ",
-                           arg, NULL);
-    }
-
-    return NULL;
-}
-
-static const char *set_scriptlog_length(cmd_parms *cmd, void *dummy,
-					const char *arg)
-{
-    server_rec *s = cmd->server;
-    cgi_server_conf *conf = ap_get_module_config(s->module_config,
-                                                 &cgi_module);
-
-    conf->logbytes = atol(arg);
-    return NULL;
-}
-
-static const char *set_scriptlog_buffer(cmd_parms *cmd, void *dummy,
-					const char *arg)
-{
-    server_rec *s = cmd->server;
-    cgi_server_conf *conf = ap_get_module_config(s->module_config,
-                                                 &cgi_module);
-
-    conf->bufbytes = atoi(arg);
-    return NULL;
-}
-
-static const command_rec cgi_cmds[] =
-{
-AP_INIT_TAKE1("ScriptLog", set_scriptlog, NULL, RSRC_CONF,
-     "the name of a log for script debugging info"),
-AP_INIT_TAKE1("ScriptLogLength", set_scriptlog_length, NULL, RSRC_CONF,
-     "the maximum length (in bytes) of the script debug log"),
-AP_INIT_TAKE1("ScriptLogBuffer", set_scriptlog_buffer, NULL, RSRC_CONF,
-     "the maximum size (in bytes) to record of a POST request"),
-    {NULL}
-};
-
-static int log_scripterror(request_rec *r, cgi_server_conf * conf, int ret,
-			   apr_status_t rv, char *error)
-{
-    apr_file_t *f = NULL;
-    apr_finfo_t finfo;
-    char time_str[APR_CTIME_LEN];
-    int log_flags = rv ? APLOG_ERR : APLOG_NOERRNO | APLOG_ERR;
-
-    ap_log_rerror(APLOG_MARK, log_flags, rv, r, 
-                  "%s: %s", error, r->filename);
-
-    /* XXX Very expensive mainline case! Open, then getfileinfo! */
-    if (!conf->logname ||
-        ((apr_stat(&finfo, conf->logname,
-                   APR_FINFO_SIZE, r->pool) == APR_SUCCESS)
-         &&  (finfo.size > conf->logbytes)) ||
-          (apr_file_open(&f, conf->logname,
-                   APR_APPEND|APR_WRITE|APR_CREATE, APR_OS_DEFAULT, r->pool)
-              != APR_SUCCESS)) {
-	return ret;
-    }
-
-    /* "%% [Wed Jun 19 10:53:21 1996] GET /cgi-bin/printenv HTTP/1.0" */
-    apr_ctime(time_str, apr_time_now());
-    apr_file_printf(f, "%%%% [%s] %s %s%s%s %s\n", time_str, r->method, r->uri,
-	    r->args ? "?" : "", r->args ? r->args : "", r->protocol);
-    /* "%% 500 /usr/local/apache/cgi-bin */
-    apr_file_printf(f, "%%%% %d %s\n", ret, r->filename);
-
-    apr_file_printf(f, "%%error\n%s\n", error);
-
-    apr_file_close(f);
-    return ret;
-}
-
-/* Soak up stderr from a script and redirect it to the error log. 
- */
-static void log_script_err(request_rec *r, apr_file_t *script_err)
-{
-    char argsbuffer[HUGE_STRING_LEN];
-    char *newline;
-
-    while (apr_file_gets(argsbuffer, HUGE_STRING_LEN,
-                         script_err) == APR_SUCCESS) {
-        newline = strchr(argsbuffer, '\n');
-        if (newline) {
-            *newline = '\0';
-        }
-        ap_log_rerror(APLOG_MARK, APLOG_ERR | APLOG_NOERRNO, 0, r, 
-                      "%s", argsbuffer);            
-    }
-}
-
-static int log_script(request_rec *r, cgi_server_conf * conf, int ret,
-		  char *dbuf, const char *sbuf, apr_file_t *script_in, 
-                  apr_file_t *script_err)
-{
-    const apr_array_header_t *hdrs_arr = apr_table_elts(r->headers_in);
-    const apr_table_entry_t *hdrs = (const apr_table_entry_t *) hdrs_arr->elts;
-    char argsbuffer[HUGE_STRING_LEN];
-    apr_file_t *f = NULL;
-    int i;
-    apr_finfo_t finfo;
-    char time_str[APR_CTIME_LEN];
-
-    /* XXX Very expensive mainline case! Open, then getfileinfo! */
-    if (!conf->logname ||
-        ((apr_stat(&finfo, conf->logname,
-                   APR_FINFO_SIZE, r->pool) == APR_SUCCESS)
-         &&  (finfo.size > conf->logbytes)) ||
-         (apr_file_open(&f, conf->logname,
-                  APR_APPEND|APR_WRITE|APR_CREATE, APR_OS_DEFAULT, r->pool) != APR_SUCCESS)) {
-	/* Soak up script output */
-	while (apr_file_gets(argsbuffer, HUGE_STRING_LEN,
-	                     script_in) == APR_SUCCESS)
-	    continue;
-
-        log_script_err(r, script_err);
-	return ret;
-    }
-
-    /* "%% [Wed Jun 19 10:53:21 1996] GET /cgi-bin/printenv HTTP/1.0" */
-    apr_ctime(time_str, apr_time_now());
-    apr_file_printf(f, "%%%% [%s] %s %s%s%s %s\n", time_str, r->method, r->uri,
-	    r->args ? "?" : "", r->args ? r->args : "", r->protocol);
-    /* "%% 500 /usr/local/apache/cgi-bin" */
-    apr_file_printf(f, "%%%% %d %s\n", ret, r->filename);
-
-    apr_file_puts("%request\n", f);
-    for (i = 0; i < hdrs_arr->nelts; ++i) {
-	if (!hdrs[i].key)
-	    continue;
-	apr_file_printf(f, "%s: %s\n", hdrs[i].key, hdrs[i].val);
-    }
-    if ((r->method_number == M_POST || r->method_number == M_PUT)
-	&& *dbuf) {
-	apr_file_printf(f, "\n%s\n", dbuf);
-    }
-
-    apr_file_puts("%response\n", f);
-    hdrs_arr = apr_table_elts(r->err_headers_out);
-    hdrs = (const apr_table_entry_t *) hdrs_arr->elts;
-
-    for (i = 0; i < hdrs_arr->nelts; ++i) {
-	if (!hdrs[i].key)
-	    continue;
-	apr_file_printf(f, "%s: %s\n", hdrs[i].key, hdrs[i].val);
-    }
-
-    if (sbuf && *sbuf)
-	apr_file_printf(f, "%s\n", sbuf);
-
-    if (apr_file_gets(argsbuffer, HUGE_STRING_LEN, script_in) == APR_SUCCESS) {
-	apr_file_puts("%stdout\n", f);
-	apr_file_puts(argsbuffer, f);
-	while (apr_file_gets(argsbuffer, HUGE_STRING_LEN,
-	                     script_in) == APR_SUCCESS)
-	    apr_file_puts(argsbuffer, f);
-	apr_file_puts("\n", f);
-    }
-
-    if (apr_file_gets(argsbuffer, HUGE_STRING_LEN, script_err) == APR_SUCCESS) {
-	apr_file_puts("%stderr\n", f);
-	apr_file_puts(argsbuffer, f);
-	while (apr_file_gets(argsbuffer, HUGE_STRING_LEN,
-	                     script_err) == APR_SUCCESS)
-	    apr_file_puts(argsbuffer, f);
-	apr_file_puts("\n", f);
-    }
-
-    apr_file_close(script_in);
-    apr_file_close(script_err);
-
-    apr_file_close(f);
-    return ret;
-}
-
-
-/* This is the special environment used for running the "exec cmd="
- *   variety of SSI directives.
- */
-static void add_ssi_vars(request_rec *r, ap_filter_t *next)
-{
-    apr_table_t *e = r->subprocess_env;
-
-    if (r->path_info && r->path_info[0] != '\0') {
-        request_rec *pa_req;
-
-        apr_table_setn(e, "PATH_INFO", ap_escape_shell_cmd(r->pool, r->path_info));
-
-        pa_req = ap_sub_req_lookup_uri(ap_escape_uri(r->pool, r->path_info), r, next);
-        if (pa_req->filename) {
-            apr_table_setn(e, "PATH_TRANSLATED",
-                           apr_pstrcat(r->pool, pa_req->filename, pa_req->path_info, NULL));
-        }
-        ap_destroy_sub_req(pa_req);
-    }
-
-    if (r->args) {
-        char *arg_copy = apr_pstrdup(r->pool, r->args);
-
-        apr_table_setn(e, "QUERY_STRING", r->args);
-        ap_unescape_url(arg_copy);
-        apr_table_setn(e, "QUERY_STRING_UNESCAPED", ap_escape_shell_cmd(r->pool, arg_copy));
-    }
-}
-
-static apr_status_t run_cgi_child(apr_file_t **script_out,
-                                  apr_file_t **script_in,
-                                  apr_file_t **script_err, 
-                                  const char *command,
-                                  const char * const argv[],
-                                  request_rec *r,
-                                  apr_pool_t *p,
-                                  exec_info *e_info)
-{
-    const char * const *env;
-    apr_procattr_t *procattr;
-    apr_proc_t *procnew;
-    apr_status_t rc = APR_SUCCESS;
-
-#if defined(RLIMIT_CPU)  || defined(RLIMIT_NPROC) || \
-    defined(RLIMIT_DATA) || defined(RLIMIT_VMEM) || defined (RLIMIT_AS)
-
-    core_dir_config *conf = ap_get_module_config(r->per_dir_config,
-                                                 &core_module);
-#endif
-
-
-#ifdef DEBUG_CGI
-#ifdef OS2
-    /* Under OS/2 need to use device con. */
-    FILE *dbg = fopen("con", "w");
-#else
-    FILE *dbg = fopen("/dev/tty", "w");
-#endif
-    int i;
-#endif
-
-    RAISE_SIGSTOP(CGI_CHILD);
-#ifdef DEBUG_CGI
-    fprintf(dbg, "Attempting to exec %s as CGI child (argv0 = %s)\n",
-	    r->filename, argv[0]);
-#endif
-
-    if (e_info->prog_type == RUN_AS_CGI) {
-        ap_add_cgi_vars(r);
-    }
-    else /* SSIs want a controlled environment and a special path. */
-    {
-        add_ssi_vars(r, e_info->next);
-    }
-    env = (const char * const *)ap_create_environment(p, r->subprocess_env);
-
-#ifdef DEBUG_CGI
-    fprintf(dbg, "Environment: \n");
-    for (i = 0; env[i]; ++i)
-	fprintf(dbg, "'%s'\n", env[i]);
-#endif
-
-    /* Transmute ourselves into the script.
-     * NB only ISINDEX scripts get decoded arguments.
-     */
-    if (((rc = apr_procattr_create(&procattr, p)) != APR_SUCCESS) ||
-        ((rc = apr_procattr_io_set(procattr,
-                                  e_info->in_pipe,
-                                  e_info->out_pipe,
-                                  e_info->err_pipe)) != APR_SUCCESS) ||
-        ((rc = apr_procattr_dir_set(procattr, 
-                                  ap_make_dirstr_parent(r->pool, r->filename))) != APR_SUCCESS) ||
-#ifdef RLIMIT_CPU
-        ((rc = apr_procattr_limit_set(procattr, APR_LIMIT_CPU, conf->limit_cpu)) != APR_SUCCESS) ||
-#endif
-#if defined(RLIMIT_DATA) || defined(RLIMIT_VMEM) || defined(RLIMIT_AS)
-        ((rc = apr_procattr_limit_set(procattr, APR_LIMIT_MEM, conf->limit_mem)) != APR_SUCCESS) ||
-#endif
-#ifdef RLIMIT_NPROC
-        ((rc = apr_procattr_limit_set(procattr, APR_LIMIT_NPROC, conf->limit_nproc)) != APR_SUCCESS) ||
-#endif
-        ((rc = apr_procattr_cmdtype_set(procattr, e_info->cmd_type)) != APR_SUCCESS)) {
-        /* Something bad happened, tell the world. */
-	ap_log_rerror(APLOG_MARK, APLOG_ERR, rc, r,
-		      "couldn't set child process attributes: %s", r->filename);
-    }
-    else {
-        procnew = apr_pcalloc(p, sizeof(*procnew));
-        if (e_info->prog_type == RUN_AS_SSI) {
-            SPLIT_AND_PASS_PRETAG_BUCKETS(*(e_info->bb), e_info->ctx, e_info->next, rc);
-            if (rc != APR_SUCCESS) {
-                return rc;
-            }
-        }
-
-        rc = ap_os_create_privileged_process(r, procnew, command, argv, env, procattr, p);
-    
-        if (rc != APR_SUCCESS) {
-            /* Bad things happened. Everyone should have cleaned up. */
-            ap_log_rerror(APLOG_MARK, APLOG_ERR, rc, r,
-                        "couldn't create child process: %d: %s", rc, r->filename);
-        }
-        else {
-            apr_pool_note_subprocess(p, procnew, APR_KILL_AFTER_TIMEOUT);
-
-            *script_in = procnew->out;
-            if (!*script_in)
-                return APR_EBADF;
-            apr_file_pipe_timeout_set(*script_in, (int)(r->server->timeout * APR_USEC_PER_SEC));
-
-            if (e_info->prog_type == RUN_AS_CGI) {
-                *script_out = procnew->in;
-                if (!*script_out)
-                    return APR_EBADF;
-                apr_file_pipe_timeout_set(*script_out, (int)(r->server->timeout * APR_USEC_PER_SEC));
-
-                *script_err = procnew->err;
-                if (!*script_err)
-                    return APR_EBADF;
-                apr_file_pipe_timeout_set(*script_err, (int)(r->server->timeout * APR_USEC_PER_SEC));
-            }
-        }
-    }
-#ifdef DEBUG_CGI
-    fclose(dbg);
-#endif
-    return (rc);
-}
-
-
-static apr_status_t default_build_command(const char **cmd, const char ***argv,
-                                          request_rec *r, apr_pool_t *p,
-                                          int replace_cmd)
-{
-    int numwords, x, idx;
-    char *w;
-    const char *args = r->args;
-    const char *argv0;
-
-    if (replace_cmd) {
-        /* Allow suexec's "/" check to succeed */
-        if ((argv0 = strrchr(r->filename, '/')) != NULL)
-            argv0++;
-        else
-            argv0 = r->filename;
-        *cmd = argv0;
-    }
-
-    if (!args || !args[0] || ap_strchr_c(args, '=')) {
-        numwords = 1;
-    }
-    else {
-        /* count the number of keywords */
-        for (x = 0, numwords = 2; args[x]; x++) {
-            if (args[x] == '+') {
-                ++numwords;
-            }
-        }
-    }
-    /* Everything is - 1 to account for the first parameter 
-     * which is the program name.
-     */ 
-    if (numwords > APACHE_ARG_MAX - 1) {
-        numwords = APACHE_ARG_MAX - 1;	/* Truncate args to prevent overrun */
-    }
-    *argv = apr_palloc(p, (numwords + 2) * sizeof(char *));
-    (*argv)[0] = *cmd;
-    for (x = 1, idx = 1; x < numwords; x++) {
-        w = ap_getword_nulls(p, &args, '+');
-        ap_unescape_url(w);
-        (*argv)[idx++] = ap_escape_shell_cmd(p, w);
-    }
-    (*argv)[idx] = NULL;
-
-    return APR_SUCCESS;
-}
-
-
-static int cgi_handler(request_rec *r)
-{
-    int retval, nph, dbpos = 0;
-    const char *argv0;
-    const char *command;
-    const char **argv;
-    char *dbuf = NULL;
-    apr_file_t *script_out = NULL, *script_in = NULL, *script_err = NULL;
-    apr_bucket_brigade *bb;
-    apr_bucket *b;
-    char argsbuffer[HUGE_STRING_LEN];
-    int is_included;
-    apr_pool_t *p;
-    cgi_server_conf *conf;
-    apr_status_t rv;
-    exec_info e_info;
-
-    if(strcmp(r->handler,CGI_MAGIC_TYPE) && strcmp(r->handler,"cgi-script"))
-	return DECLINED;
-
-    is_included = !strcmp(r->protocol, "INCLUDED");
-
-    p = r->main ? r->main->pool : r->pool;
-
-    if (r->method_number == M_OPTIONS) {
-	/* 99 out of 100 CGI scripts, this is all they support */
-	r->allowed |= (AP_METHOD_BIT << M_GET);
-	r->allowed |= (AP_METHOD_BIT << M_POST);
-	return DECLINED;
-    }
-
-    argv0 = apr_filename_of_pathname(r->filename);
-    nph = !(strncmp(argv0, "nph-", 4));
-    conf = ap_get_module_config(r->server->module_config, &cgi_module);
-
-    if (!(ap_allow_options(r) & OPT_EXECCGI) && !is_scriptaliased(r))
-        return log_scripterror(r, conf, HTTP_FORBIDDEN, 0,
-                               "Options ExecCGI is off in this directory");
-    if (nph && is_included)
-        return log_scripterror(r, conf, HTTP_FORBIDDEN, 0,
-                               "attempt to include NPH CGI script");
-
-    if (r->finfo.filetype == 0)
-	return log_scripterror(r, conf, HTTP_NOT_FOUND, 0,
-			       "script not found or unable to stat");
-    if (r->finfo.filetype == APR_DIR)
-	return log_scripterror(r, conf, HTTP_FORBIDDEN, 0,
-			       "attempt to invoke directory as script");
-
-    if (r->path_info && *r->path_info && !r->used_path_info) {
-        return log_scripterror(r, conf, HTTP_NOT_FOUND, 0,
-                               "AcceptPathInfo off disallows user's path");
-    }
-/*
-    if (!ap_suexec_enabled) {
-	if (!ap_can_exec(&r->finfo))
-	    return log_scripterror(r, conf, HTTP_FORBIDDEN, 0,
-				   "file permissions deny server execution");
-    }
-
-*/
-    if ((retval = ap_setup_client_block(r, REQUEST_CHUNKED_ERROR)))
-	return retval;
-
-    ap_add_common_vars(r);
-
-    /* build the command line */
-    if ((rv = cgi_build_command(&command, &argv, r, p, 1)) != APR_SUCCESS) {
-	ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
-		      "don't know how to spawn child process: %s", 
-                      r->filename);
-	return HTTP_INTERNAL_SERVER_ERROR;
-    }
-
-    e_info.cmd_type  = APR_PROGRAM;
-    e_info.in_pipe   = APR_CHILD_BLOCK;
-    e_info.out_pipe  = APR_CHILD_BLOCK;
-    e_info.err_pipe  = APR_CHILD_BLOCK;
-    e_info.prog_type = RUN_AS_CGI;
-    e_info.bb        = NULL;
-    e_info.ctx       = NULL;
-    e_info.next      = NULL;
-
-    /* run the script in its own process */
-    if ((rv = run_cgi_child(&script_out, &script_in, &script_err,
-                            command, argv, r, p, &e_info)) != APR_SUCCESS) {
-        ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
-                      "couldn't spawn child process: %s", r->filename);
-        return HTTP_INTERNAL_SERVER_ERROR;
-    }
-
-    /* Transfer any put/post args, CERN style...
-     * Note that we already ignore SIGPIPE in the core server.
-     */
-    if (ap_should_client_block(r)) {
-	int len_read, dbsize;
-        apr_size_t bytes_written, bytes_to_write;
-        apr_status_t rv;
-
-	if (conf->logname) {
-	    dbuf = apr_pcalloc(r->pool, conf->bufbytes + 1);
-	    dbpos = 0;
-	}
-
-	while ((len_read =
-		ap_get_client_block(r, argsbuffer, HUGE_STRING_LEN)) > 0) {
-	    if (conf->logname) {
-		if ((dbpos + len_read) > conf->bufbytes) {
-		    dbsize = conf->bufbytes - dbpos;
-		}
-		else {
-		    dbsize = len_read;
-		}
-		memcpy(dbuf + dbpos, argsbuffer, dbsize);
-		dbpos += dbsize;
-	    }
-            /* Keep writing data to the child until done or too much time
-             * elapses with no progress or an error occurs.
-             */
-            bytes_written = 0;
-            do {
-                bytes_to_write = len_read - bytes_written;
-                rv = apr_file_write(script_out, argsbuffer + bytes_written, 
-                               &bytes_to_write);
-                bytes_written += bytes_to_write;
-            } while (rv == APR_SUCCESS 
-                  && bytes_written < (apr_size_t)len_read);
-	    if (rv != APR_SUCCESS || bytes_written < (apr_size_t)len_read) {
-		/* silly script stopped reading, soak up remaining message */
-		while (ap_get_client_block(r, argsbuffer, HUGE_STRING_LEN) > 0) {
-		    /* dump it */
-		}
-		break;
-	    }
-	}
-	apr_file_flush(script_out);
-    }
-
-    apr_file_close(script_out);
-
-    /* Handle script return... */
-    if (script_in && !nph) {
-	const char *location;
-	char sbuf[MAX_STRING_LEN];
-	int ret;
-
-	if ((ret = ap_scan_script_header_err(r, script_in, sbuf))) {
-	    return log_script(r, conf, ret, dbuf, sbuf, script_in, script_err);
-	}
-
-	location = apr_table_get(r->headers_out, "Location");
-
-	if (location && location[0] == '/' && r->status == 200) {
-
-	    /* Soak up all the script output */
-	    while (apr_file_gets(argsbuffer, HUGE_STRING_LEN,
-	                         script_in) == APR_SUCCESS) {
-		continue;
-	    }
-            log_script_err(r, script_err);
-	    /* This redirect needs to be a GET no matter what the original
-	     * method was.
-	     */
-	    r->method = apr_pstrdup(r->pool, "GET");
-	    r->method_number = M_GET;
-
-	    /* We already read the message body (if any), so don't allow
-	     * the redirected request to think it has one.  We can ignore 
-	     * Transfer-Encoding, since we used REQUEST_CHUNKED_ERROR.
-	     */
-	    apr_table_unset(r->headers_in, "Content-Length");
-
-	    ap_internal_redirect_handler(location, r);
-	    return OK;
-	}
-	else if (location && r->status == 200) {
-	    /* XX Note that if a script wants to produce its own Redirect
-	     * body, it now has to explicitly *say* "Status: 302"
-	     */
-	    return HTTP_MOVED_TEMPORARILY;
-	}
-
-	if (!r->header_only) {
-            bb = apr_brigade_create(r->pool);
-	    b = apr_bucket_pipe_create(script_in);
-	    APR_BRIGADE_INSERT_TAIL(bb, b);
-            b = apr_bucket_eos_create();
-	    APR_BRIGADE_INSERT_TAIL(bb, b);
-	    ap_pass_brigade(r->output_filters, bb);
-	}
-
-        log_script_err(r, script_err);
-	apr_file_close(script_err);
-    }
-
-    if (script_in && nph) {
-        bb = apr_brigade_create(r->pool);
-	b = apr_bucket_pipe_create(script_in);
-	APR_BRIGADE_INSERT_TAIL(bb, b);
-	b = apr_bucket_eos_create();
-	APR_BRIGADE_INSERT_TAIL(bb, b);
-        ap_pass_brigade(r->output_filters, bb);
-    }
-
-    return OK;			/* NOT r->status, even if it has changed. */
-}
-
-/*============================================================================
- *============================================================================
- * This is the beginning of the cgi filter code moved from mod_include. This
- *   is the code required to handle the "exec" SSI directive.
- *============================================================================
- *============================================================================*/
-static int include_cgi(char *s, request_rec *r, ap_filter_t *next,
-                       apr_bucket *head_ptr, apr_bucket **inserted_head)
-{
-    request_rec *rr = ap_sub_req_lookup_uri(s, r, next);
-    int rr_status;
-    apr_bucket  *tmp_buck, *tmp2_buck;
-
-    if (rr->status != HTTP_OK) {
-        ap_destroy_sub_req(rr);
-        return -1;
-    }
-
-    /* No hardwired path info or query allowed */
-
-    if ((rr->path_info && rr->path_info[0]) || rr->args) {
-        ap_destroy_sub_req(rr);
-        return -1;
-    }
-    if (rr->finfo.filetype != APR_REG) {
-        ap_destroy_sub_req(rr);
-        return -1;
-    }
-
-    /* Script gets parameters of the *document*, for back compatibility */
-
-    rr->path_info = r->path_info;       /* hard to get right; see mod_cgi.c */
-    rr->args = r->args;
-
-    /* Force sub_req to be treated as a CGI request, even if ordinary
-     * typing rules would have called it something else.
-     */
-
-    rr->content_type = CGI_MAGIC_TYPE;
-
-    /* Run it. */
-
-    rr_status = ap_run_sub_req(rr);
-    if (ap_is_HTTP_REDIRECT(rr_status)) {
-        apr_size_t len_loc;
-        const char *location = apr_table_get(rr->headers_out, "Location");
-
-        location = ap_escape_html(rr->pool, location);
-        len_loc = strlen(location);
-
-        /* XXX: if most of this stuff is going to get copied anyway,
-         * it'd be more efficient to pstrcat it into a single pool buffer
-         * and a single pool bucket */
-
-        tmp_buck = apr_bucket_immortal_create("<A HREF=\"",
-                                              sizeof("<A HREF=\"") - 1);
-        APR_BUCKET_INSERT_BEFORE(head_ptr, tmp_buck);
-        tmp2_buck = apr_bucket_heap_create(location, len_loc, 1);
-        APR_BUCKET_INSERT_BEFORE(head_ptr, tmp2_buck);
-        tmp2_buck = apr_bucket_immortal_create("\">", sizeof("\">") - 1);
-        APR_BUCKET_INSERT_BEFORE(head_ptr, tmp2_buck);
-        tmp2_buck = apr_bucket_heap_create(location, len_loc, 1);
-        APR_BUCKET_INSERT_BEFORE(head_ptr, tmp2_buck);
-        tmp2_buck = apr_bucket_immortal_create("</A>", sizeof("</A>") - 1);
-        APR_BUCKET_INSERT_BEFORE(head_ptr, tmp2_buck);
-
-        if (*inserted_head == NULL) {
-            *inserted_head = tmp_buck;
-        }
-    }
-
-    ap_destroy_sub_req(rr);
-
-    return 0;
-}
-
-
-static int include_cmd(include_ctx_t *ctx, apr_bucket_brigade **bb,
-                       const char *command, request_rec *r, ap_filter_t *f)
-{
-    exec_info      e_info;
-    const char   **argv;
-    apr_file_t    *script_out = NULL, *script_in = NULL, *script_err = NULL;
-    apr_bucket_brigade *bcgi;
-    apr_bucket *b;
-    apr_status_t rv;
-
-    if ((rv = cgi_build_command(&command, &argv, r, r->pool, 0)) != APR_SUCCESS) {
-        ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
-                      "don't know how to spawn cmd child process: %s", 
-                      r->filename);
-        return HTTP_INTERNAL_SERVER_ERROR;
-    }
-
-    e_info.cmd_type  = APR_SHELLCMD;
-    e_info.in_pipe   = APR_NO_PIPE;
-    e_info.out_pipe  = APR_FULL_BLOCK;
-    e_info.err_pipe  = APR_NO_PIPE;
-    e_info.prog_type = RUN_AS_SSI;
-    e_info.bb        = bb;
-    e_info.ctx       = ctx;
-    e_info.next      = f->next;
-
-    /* run the script in its own process */
-    if ((rv = run_cgi_child(&script_out, &script_in, &script_err,
-                      command, argv, r, r->pool, &e_info)) != APR_SUCCESS) {
-        ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
-                      "couldn't spawn child process: %s", r->filename);
-        return HTTP_INTERNAL_SERVER_ERROR;
-    }
-
-    bcgi = apr_brigade_create(r->pool);
-    b = apr_bucket_pipe_create(script_in);
-    APR_BRIGADE_INSERT_TAIL(bcgi, b);
-    ap_pass_brigade(f->next, bcgi);
-
-    /* We can't close the pipe here, because we may return before the
-     * full CGI has been sent to the network.  That's okay though,
-     * because we can rely on the pool to close the pipe for us.
-     */
-
-    return 0;
-}
-
-static int handle_exec(include_ctx_t *ctx, apr_bucket_brigade **bb, request_rec *r,
-                       ap_filter_t *f, apr_bucket *head_ptr, apr_bucket **inserted_head)
-{
-    char *tag     = NULL;
-    char *tag_val = NULL;
-    char *file = r->filename;
-    apr_bucket  *tmp_buck;
-    char parsed_string[MAX_STRING_LEN];
-
-    *inserted_head = NULL;
-    if (ctx->flags & FLAG_PRINTING) {
-        if (ctx->flags & FLAG_NO_EXEC) {
-            ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                      "exec used but not allowed in %s", r->filename);
-            CREATE_ERROR_BUCKET(ctx, tmp_buck, head_ptr, *inserted_head);
-        }
-        else {
-            while (1) {
-                cgi_pfn_gtv(ctx, &tag, &tag_val, 1);
-                if (tag_val == NULL) {
-                    if (tag == NULL) {
-                        return (0);
-                    }
-                    else {
-                        return 1;
-                    }
-                }
-                if (!strcmp(tag, "cmd")) {
-                    cgi_pfn_ps(r, ctx, tag_val, parsed_string, sizeof(parsed_string), 1);
-                    if (include_cmd(ctx, bb, parsed_string, r, f) == -1) {
-                        ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                                    "execution failure for parameter \"%s\" "
-                                    "to tag exec in file %s", tag, r->filename);
-                        CREATE_ERROR_BUCKET(ctx, tmp_buck, head_ptr, *inserted_head);
-                    }
-                }
-                else if (!strcmp(tag, "cgi")) {
-                    apr_status_t retval = APR_SUCCESS;
-
-                    cgi_pfn_ps(r, ctx, tag_val, parsed_string, sizeof(parsed_string), 0);
-                    SPLIT_AND_PASS_PRETAG_BUCKETS(*bb, ctx, f->next, retval);
-                    if (retval != APR_SUCCESS) {
-                        return retval;
-                    }
-
-                    if (include_cgi(parsed_string, r, f->next, head_ptr, inserted_head) == -1) {
-                        ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                                    "invalid CGI ref \"%s\" in %s", tag_val, file);
-                        CREATE_ERROR_BUCKET(ctx, tmp_buck, head_ptr, *inserted_head);
-                    }
-                }
-                else {
-                    ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                                "unknown parameter \"%s\" to tag exec in %s", tag, file);
-                    CREATE_ERROR_BUCKET(ctx, tmp_buck, head_ptr, *inserted_head);
-                }
-            }
-        }
-    }
-    return 0;
-}
-
-
-/*============================================================================
- *============================================================================
- * This is the end of the cgi filter code moved from mod_include.
- *============================================================================
- *============================================================================*/
-
-
-static int cgi_post_config(apr_pool_t *p, apr_pool_t *plog,
-                                apr_pool_t *ptemp, server_rec *s)
-{
-    cgi_pfn_reg_with_ssi = APR_RETRIEVE_OPTIONAL_FN(ap_register_include_handler);
-    cgi_pfn_gtv          = APR_RETRIEVE_OPTIONAL_FN(ap_ssi_get_tag_and_value);
-    cgi_pfn_ps           = APR_RETRIEVE_OPTIONAL_FN(ap_ssi_parse_string);
-
-    if ((cgi_pfn_reg_with_ssi) && (cgi_pfn_gtv) && (cgi_pfn_ps)) {
-        /* Required by mod_include filter. This is how mod_cgi registers
-         *   with mod_include to provide processing of the exec directive.
-         */
-        cgi_pfn_reg_with_ssi("exec", handle_exec);
-    }
-
-    /* This is the means by which unusual (non-unix) os's may find alternate
-     * means to run a given command (e.g. shebang/registry parsing on Win32)
-     */
-    cgi_build_command    = APR_RETRIEVE_OPTIONAL_FN(ap_cgi_build_command);
-    if (!cgi_build_command) {
-        cgi_build_command = default_build_command;
-    }
-    return OK;
-}
-
-static void register_hooks(apr_pool_t *p)
-{
-    static const char * const aszPre[] = { "mod_include.c", NULL };
-    ap_hook_handler(cgi_handler, NULL, NULL, APR_HOOK_MIDDLE);
-    ap_hook_post_config(cgi_post_config, aszPre, NULL, APR_HOOK_REALLY_FIRST);
-}
-
-module AP_MODULE_DECLARE_DATA cgi_module =
-{
-    STANDARD20_MODULE_STUFF,
-    NULL,			/* dir config creater */
-    NULL,			/* dir merger --- default is to override */
-    create_cgi_config,		/* server config */
-    merge_cgi_config,		/* merge server config */
-    cgi_cmds,			/* command apr_table_t */
-    register_hooks		/* register hooks */
-};
diff --git a/modules/generators/mod_cgi.dsp b/modules/generators/mod_cgi.dsp
deleted file mode 100644
index be4d4a9..0000000
--- a/modules/generators/mod_cgi.dsp
+++ /dev/null
@@ -1,132 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mod_cgi" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mod_cgi - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "mod_cgi.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "mod_cgi.mak" CFG="mod_cgi - Win32 Release"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "mod_cgi - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mod_cgi - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "mod_cgi - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /O2 /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Release\mod_cgi" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /map /machine:I386 /out:"Release/mod_cgi.so" /base:@..\..\os\win32\BaseAddr.ref,mod_cgi
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /map /machine:I386 /out:"Release/mod_cgi.so" /base:@..\..\os\win32\BaseAddr.ref,mod_cgi
-
-!ELSEIF  "$(CFG)" == "mod_cgi - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Debug\mod_cgi" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /map /debug /machine:I386 /out:"Debug/mod_cgi.so" /base:@..\..\os\win32\BaseAddr.ref,mod_cgi
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /map /debug /machine:I386 /out:"Debug/mod_cgi.so" /base:@..\..\os\win32\BaseAddr.ref,mod_cgi
-
-!ENDIF 
-
-# Begin Target
-
-# Name "mod_cgi - Win32 Release"
-# Name "mod_cgi - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\mod_cgi.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mod_cgi.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\mod_cgi.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\build\win32\win32ver.awk
-
-!IF  "$(CFG)" == "mod_cgi - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_cgi.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ../../build/win32/win32ver.awk mod_cgi  "cgi_module for Apache" ../../include/ap_release.h > .\mod_cgi.rc
-
-# End Custom Build
-
-!ELSEIF  "$(CFG)" == "mod_cgi - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_cgi.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ../../build/win32/win32ver.awk mod_cgi  "cgi_module for Apache" ../../include/ap_release.h > .\mod_cgi.rc
-
-# End Custom Build
-
-!ENDIF 
-
-# End Source File
-# End Target
-# End Project
diff --git a/modules/generators/mod_cgi.exp b/modules/generators/mod_cgi.exp
deleted file mode 100644
index 96ea0c2..0000000
--- a/modules/generators/mod_cgi.exp
+++ /dev/null
@@ -1 +0,0 @@
-cgi_module
diff --git a/modules/generators/mod_cgi.h b/modules/generators/mod_cgi.h
deleted file mode 100644
index eeb9e05..0000000
--- a/modules/generators/mod_cgi.h
+++ /dev/null
@@ -1,78 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-#ifndef _MOD_CGI_H
-#define _MOD_CGI_H 1
-
-
-/**
- * Registerable optional function to override CGI behavior;
- * Reprocess the command and arguments to execute the given CGI script.
- * @param cmd Pointer to the command to execute (may be overridden)
- * @param argv Pointer to the arguments to pass (may be overridden)
- * @param r The current request
- * @param p The pool to allocate correct cmd/argv elements within.
- * @remark This callback may be registered by the os-specific module 
- * to correct the command and arguments for apr_proc_create invocation
- * on a given os.  mod_cgi will call the function if registered.
- */
-APR_DECLARE_OPTIONAL_FN(apr_status_t, ap_cgi_build_command, 
-                        (const char **cmd, const char ***argv,
-                         request_rec *r, apr_pool_t *p, int replace_cmd));
-
-#endif /* _MOD_CGI_H */
diff --git a/modules/generators/mod_cgid.c b/modules/generators/mod_cgid.c
deleted file mode 100644
index 17f1c6f..0000000
--- a/modules/generators/mod_cgid.c
+++ /dev/null
@@ -1,1460 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-/* 
- * http_script: keeps all script-related ramblings together. 
- * 
- * Compliant to cgi/1.1 spec 
- * 
- * Adapted by rst from original NCSA code by Rob McCool 
- * 
- * Apache adds some new env vars; REDIRECT_URL and REDIRECT_QUERY_STRING for 
- * custom error responses, and DOCUMENT_ROOT because we found it useful. 
- * It also adds SERVER_ADMIN - useful for scripts to know who to mail when 
- * they fail. 
- */ 
-
-#include "apr_lib.h"
-#include "apr_strings.h"
-#include "apr_general.h"
-#include "apr_file_io.h"
-#include "apr_portable.h"
-#include "apr_buckets.h"
-#include "apr_optional.h"
-#include "apr_signal.h"
-
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-#if APR_HAVE_SYS_SOCKET_H
-#include <sys/socket.h>
-#endif
-#if APR_HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#if APR_HAVE_SYS_TYPES_H
-#include <sys/types.h>
-#endif
-
-#define CORE_PRIVATE 
-
-#include "util_filter.h"
-#include "httpd.h" 
-#include "http_config.h" 
-#include "http_request.h" 
-#include "http_core.h" 
-#include "http_protocol.h" 
-#include "http_main.h" 
-#include "http_log.h" 
-#include "util_script.h" 
-#include "ap_mpm.h"
-#include "unixd.h"
-#include "mod_suexec.h"
-#include "../filters/mod_include.h"
-
-#include "mod_core.h"
-
-
-/* ### should be tossed in favor of APR */
-#include <sys/stat.h>
-#include <sys/un.h> /* for sockaddr_un */
-
-
-module AP_MODULE_DECLARE_DATA cgid_module; 
-
-static int cgid_init(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *main_server); 
-static int handle_exec(include_ctx_t *ctx, apr_bucket_brigade **bb, request_rec *r,
-                       ap_filter_t *f, apr_bucket *head_ptr, apr_bucket **inserted_head);
-
-static APR_OPTIONAL_FN_TYPE(ap_register_include_handler) *cgid_pfn_reg_with_ssi;
-static APR_OPTIONAL_FN_TYPE(ap_ssi_get_tag_and_value) *cgid_pfn_gtv;
-static APR_OPTIONAL_FN_TYPE(ap_ssi_parse_string) *cgid_pfn_ps;
-
-static apr_pool_t *pcgi; 
-static int total_modules = 0;
-static pid_t daemon_pid;
-
-/* KLUDGE --- for back-combatibility, we don't have to check Execcgid 
- * in ScriptAliased directories, which means we need to know if this 
- * request came through ScriptAlias or not... so the Alias module 
- * leaves a note for us. 
- */ 
-
-static int is_scriptaliased(request_rec *r) 
-{ 
-    const char *t = apr_table_get(r->notes, "alias-forced-type"); 
-    return t && (!strcasecmp(t, "cgi-script")); 
-} 
-
-/* Configuration stuff */ 
-
-#define DEFAULT_LOGBYTES 10385760 
-#define DEFAULT_BUFBYTES 1024 
-#define DEFAULT_SOCKET "logs/cgisock"
-
-#define CGI_REQ 1
-#define SSI_REQ 2
-
-/* DEFAULT_CGID_LISTENBACKLOG controls the max depth on the unix socket's
- * pending connection queue.  If a bunch of cgi requests arrive at about
- * the same time, connections from httpd threads/processes will back up
- * in the queue while the cgid process slowly forks off a child to process
- * each connection on the unix socket.  If the queue is too short, the
- * httpd process will get ECONNREFUSED when trying to connect.
- */
-#ifndef DEFAULT_CGID_LISTENBACKLOG
-#define DEFAULT_CGID_LISTENBACKLOG 100
-#endif
-
-/* DEFAULT_CONNECT_ATTEMPTS controls how many times we'll try to connect
- * to the cgi daemon from the thread/process handling the cgi request.
- * Generally we want to retry when we get ECONNREFUSED since it is
- * probably because the listen queue is full.  We need to try harder so
- * the client doesn't see it as a 503 error.
- *
- * Set this to 0 to continually retry until the connect works or Apache
- * terminates.
- */
-#ifndef DEFAULT_CONNECT_ATTEMPTS
-#define DEFAULT_CONNECT_ATTEMPTS  15
-#endif
-
-typedef struct { 
-    const char *sockname;
-    const char *logname; 
-    long logbytes; 
-    int bufbytes; 
-} cgid_server_conf; 
-
-/* If a request includes query info in the URL (stuff after "?"), and
- * the query info does not contain "=" (indicative of a FORM submission),
- * then this routine is called to create the argument list to be passed
- * to the CGI script.  When suexec is enabled, the suexec path, user, and
- * group are the first three arguments to be passed; if not, all three
- * must be NULL.  The query info is split into separate arguments, where
- * "+" is the separator between keyword arguments.
- *
- * XXXX: note that the WIN32 code uses one of the suexec strings
- * to pass an interpreter name.  Remember this if changing the way they
- * are handled in create_argv.
- *
- */
-static char **create_argv(apr_pool_t *p, char *path, char *user, char *group,
-                          char *av0, const char *args)
-{
-    int x, numwords;
-    char **av;
-    char *w;
-    int idx = 0;
-
-    /* count the number of keywords */
-
-    for (x = 0, numwords = 1; args[x]; x++) {
-        if (args[x] == '+') {
-            ++numwords;
-        }
-    }
-
-    if (numwords > APACHE_ARG_MAX - 5) {
-        numwords = APACHE_ARG_MAX - 5;  /* Truncate args to prevent overrun */
-    }
-    av = (char **) apr_pcalloc(p, (numwords + 5) * sizeof(char *));
-
-    if (path) {
-        av[idx++] = path;
-    }
-    if (user) {
-        av[idx++] = user;
-    }
-    if (group) {
-        av[idx++] = group;
-    }
-
-    av[idx++] = apr_pstrdup(p, av0);
-
-    for (x = 1; x <= numwords; x++) {
-        w = ap_getword_nulls(p, &args, '+');
-        if (strcmp(w, "")) {
-            ap_unescape_url(w);
-            av[idx++] = ap_escape_shell_cmd(p, w);
-        }
-    }
-    av[idx] = NULL;
-    return av;
-}
-
-#if APR_HAS_OTHER_CHILD
-static void cgid_maint(int reason, void *data, apr_wait_t status)
-{
-    pid_t *sd = data;
-
-    switch (reason) {
-        case APR_OC_REASON_DEATH:
-        case APR_OC_REASON_RESTART:
-            /* don't do anything; server is stopping or restarting */
-            apr_proc_other_child_unregister(data);
-            break;
-        case APR_OC_REASON_LOST:
-            /* it would be better to restart just the cgid child
-             * process but for now we'll gracefully restart the entire 
-             * server by sending AP_SIG_GRACEFUL to ourself, the httpd 
-             * parent process
-             */
-            kill(getpid(), AP_SIG_GRACEFUL);
-            break;
-        case APR_OC_REASON_UNREGISTER:
-            /* we get here when pcgi is cleaned up; pcgi gets cleaned
-             * up when pconf gets cleaned up
-             */
-            kill(*sd, SIGHUP);
-            break;
-    }
-}
-#endif
-
-static int get_req(int fd, request_rec *r, char **argv0, char ***env, int *req_type) 
-{ 
-    int i, len, j, rc; 
-    unsigned char *data; 
-    char **environ; 
-    core_dir_config *temp_core; 
-    void **dconf; 
-    module *suexec_mod = ap_find_linked_module("mod_suexec.c");
-
-    r->server = apr_pcalloc(r->pool, sizeof(server_rec)); 
-
-    rc = read(fd, req_type, sizeof(int));
-    if (rc != sizeof(int)) {
-        return 1;
-    }
-    rc = read(fd, &j, sizeof(int));
-    if (rc != sizeof(int)) {
-        return 1;
-    }
-    rc = read(fd, &len, sizeof(int));
-    if (rc != sizeof(int)) {
-        return 1;
-    }
-
-    data = apr_pcalloc(r->pool, len + 1); /* get a cleared byte for final '\0' */
-    rc = read(fd, data, len); 
-    if (rc != len) {
-        return 1;
-    }
-
-    r->filename = ap_getword(r->pool, (const char **)&data, '\n'); 
-    *argv0 = ap_getword(r->pool, (const char **)&data, '\n'); 
-
-    r->uri = ap_getword(r->pool, (const char **)&data, '\n'); 
-    
-    environ = apr_pcalloc(r->pool, (j + 2) *sizeof(char *)); 
-    i = 0; 
-    for (i = 0; i < j; i++) { 
-        environ[i] = ap_getword(r->pool, (const char **)&data, '\n'); 
-    } 
-    *env = environ; 
-    r->args = ap_getword(r->pool, (const char **)&data, '\n'); 
-  
-    rc = read(fd, &i, sizeof(int)); 
-    if (rc != sizeof(int)) {
-        return 1;
-    }
-     
-    /* add 1, so that if i == 0, we still malloc something. */ 
-
-    dconf = (void **) apr_pcalloc(r->pool, sizeof(void *) * (total_modules + DYNAMIC_MODULE_LIMIT));
-
-    temp_core = (core_dir_config *)apr_palloc(r->pool, sizeof(core_module)); 
-
-    dconf[i] = (void *)temp_core; 
-
-    if (suexec_mod) {
-        suexec_config_t *suexec_cfg = apr_pcalloc(r->pool, sizeof(*suexec_cfg));
-
-        rc = read(fd, &i, sizeof(int));
-        if (rc != sizeof(int)) {
-            return 1;
-        }
-        rc = read(fd, &suexec_cfg->ugid.uid, sizeof(uid_t));
-        if (rc != sizeof(uid_t)) {
-            return 1;
-        }
-        rc = read(fd, &suexec_cfg->ugid.gid, sizeof(gid_t));
-        if (rc != sizeof(gid_t)) {
-            return 1;
-        }
-        rc = read(fd, &suexec_cfg->active, sizeof(int));
-        if (rc != sizeof(int)) {
-            return 1;
-        }
-        dconf[i] = (void *)suexec_cfg;
-    }
-
-    r->per_dir_config = (ap_conf_vector_t *)dconf; 
-#if 0
-#ifdef RLIMIT_CPU 
-    read(fd, &j, sizeof(int)); 
-    if (j) { 
-        temp_core->limit_cpu = (struct rlimit *)apr_palloc (sizeof(struct rlimit)); 
-        read(fd, temp_core->limit_cpu, sizeof(struct rlimit)); 
-    } 
-    else { 
-        temp_core->limit_cpu = NULL; 
-    } 
-#endif 
-
-#if defined (RLIMIT_DATA) || defined(RLIMIT_VMEM) || defined(RLIMIT_AS) 
-    read(fd, &j, sizeof(int)); 
-    if (j) { 
-        temp_core->limit_mem = (struct rlimit *)apr_palloc(r->pool, sizeof(struct rlimit)); 
-        read(fd, temp_core->limit_mem, sizeof(struct rlimit)); 
-    } 
-    else { 
-        temp_core->limit_mem = NULL; 
-    } 
-#endif 
-
-#ifdef RLIMIT_NPROC 
-    read(fd, &j, sizeof(int)); 
-    if (j) { 
-        temp_core->limit_nproc = (struct rlimit *)apr_palloc(r->pool, sizeof(struct rlimit)); 
-        read(fd, temp_core->limit_nproc, sizeof(struct rlimit)); 
-    } 
-    else { 
-        temp_core->limit_nproc = NULL; 
-    } 
-#endif 
-#endif
-    /* For right now, just make the notes table.  At some point we will need
-     * to actually fill this out, but for now we just don't want suexec to
-     * seg fault.
-     */
-    r->notes = apr_table_make(r->pool, 1);
-
-    return 0;
-} 
-
-
-
-static void send_req(int fd, request_rec *r, char *argv0, char **env, int req_type) 
-{ 
-    int len, r_type = req_type; 
-    int i = 0; 
-    char *data; 
-    module *suexec_mod = ap_find_linked_module("mod_suexec.c");
-
-    data = apr_pstrcat(r->pool, r->filename, "\n", argv0, "\n", r->uri, "\n", 
-                     NULL); 
-
-    for (i =0; env[i]; i++) { 
-        continue; 
-    } 
-
-    /* Write the request type (SSI "exec cmd" or cgi). */
-    if (write(fd, &r_type, sizeof(int)) < 0) {
-        ap_log_rerror(APLOG_MARK, APLOG_ERR, errno, r,
-                     "write to cgi daemon process");
-    }
-
-    /* Write the number of entries in the environment. */
-    if (write(fd, &i, sizeof(int)) < 0) {
-        ap_log_rerror(APLOG_MARK, APLOG_ERR, errno, r, 
-                     "write to cgi daemon process"); 
-        }     
-
-    for (i = 0; env[i]; i++) { 
-        data = apr_pstrcat(r->pool, data, env[i], "\n", NULL); 
-    } 
-    data = apr_pstrcat(r->pool, data, r->args, NULL); 
-    len = strlen(data); 
-    /* Write the length of the concatenated env string. */
-    if (write(fd, &len, sizeof(int)) < 0) { 
-        ap_log_rerror(APLOG_MARK, APLOG_ERR, errno, r, 
-                     "write to cgi daemon process"); 
-    }
-    /* Write the concatted env string. */     
-    if (write(fd, data, len) < 0) {
-        ap_log_rerror(APLOG_MARK, APLOG_ERR, errno, r, 
-                     "write to cgi daemon process"); 
-    }
-    /* Write module_index id value. */     
-    if (write(fd, &core_module.module_index, sizeof(int)) < 0) { 
-        ap_log_rerror(APLOG_MARK, APLOG_ERR, errno, r, 
-                     "write to cgi daemon process"); 
-    }     
-    if (suexec_mod) {
-        suexec_config_t *suexec_cfg = ap_get_module_config(r->per_dir_config,
-                                                           suexec_mod);
-
-        write(fd, &suexec_mod->module_index, sizeof(int));
-        write(fd, &suexec_cfg->ugid.uid, sizeof(uid_t));
-        write(fd, &suexec_cfg->ugid.gid, sizeof(gid_t));
-        write(fd, &suexec_cfg->active, sizeof(int));
-    }
-
-#if 0
-#ifdef RLIMIT_CPU 
-    if (conf->limit_cpu) { 
-        len = 1; 
-        write(fd, &len, sizeof(int)); 
-        write(fd, conf->limit_cpu, sizeof(struct rlimit)); 
-    } 
-    else { 
-        len = 0; 
-        write(fd, &len, sizeof(int)); 
-    } 
-#endif 
-
-#if defined(RLIMIT_DATA) || defined(RLIMIT_VMEM) || defined(RLIMIT_AS) 
-    if (conf->limit_mem) { 
-        len = 1; 
-        write(fd, &len, sizeof(int)); 
-        write(fd, conf->limit_mem, sizeof(struct rlimit)); 
-    } 
-    else { 
-        len = 0; 
-        write(fd, &len, sizeof(int)); 
-    } 
-#endif 
-  
-#ifdef RLIMIT_NPROC 
-    if (conf->limit_nproc) { 
-        len = 1; 
-        write(fd, &len, sizeof(int)); 
-        write(fd, conf->limit_nproc, sizeof(struct rlimit)); 
-    } 
-    else { 
-        len = 0; 
-        write(fd, &len, sizeof(int)); 
-    } 
-#endif
-#endif 
-} 
-
-static int cgid_server(void *data) 
-{ 
-    struct sockaddr_un unix_addr;
-    int sd, sd2, rc, req_type;
-    mode_t omask;
-    apr_socklen_t len;
-    apr_pool_t *ptrans;
-    server_rec *main_server = data;
-    cgid_server_conf *sconf = ap_get_module_config(main_server->module_config,
-                                                   &cgid_module); 
-
-    apr_pool_create(&ptrans, pcgi); 
-
-    apr_signal(SIGCHLD, SIG_IGN); 
-    if (unlink(sconf->sockname) < 0 && errno != ENOENT) {
-        ap_log_error(APLOG_MARK, APLOG_ERR, errno, main_server,
-                     "Couldn't unlink unix domain socket %s",
-                     sconf->sockname);
-        /* just a warning; don't bail out */
-    }
-
-    if ((sd = socket(AF_UNIX, SOCK_STREAM, 0)) < 0) {
-        ap_log_error(APLOG_MARK, APLOG_ERR, errno, main_server, 
-                     "Couldn't create unix domain socket");
-        return errno;
-    } 
-
-    memset(&unix_addr, 0, sizeof(unix_addr));
-    unix_addr.sun_family = AF_UNIX;
-    strcpy(unix_addr.sun_path, sconf->sockname);
-
-    omask = umask(0077); /* so that only Apache can use socket */
-    rc = bind(sd, (struct sockaddr *)&unix_addr, sizeof(unix_addr));
-    umask(omask); /* can't fail, so can't clobber errno */
-    if (rc < 0) {
-        ap_log_error(APLOG_MARK, APLOG_ERR, errno, main_server, 
-                     "Couldn't bind unix domain socket %s",
-                     sconf->sockname); 
-        return errno;
-    } 
-
-    if (listen(sd, DEFAULT_CGID_LISTENBACKLOG) < 0) {
-        ap_log_error(APLOG_MARK, APLOG_ERR, errno, main_server, 
-                     "Couldn't listen on unix domain socket"); 
-        return errno;
-    } 
-
-    if (!geteuid()) {
-        if (chown(sconf->sockname, unixd_config.user_id, -1) < 0) {
-            ap_log_error(APLOG_MARK, APLOG_ERR, errno, main_server, 
-                         "Couldn't change owner of unix domain socket %s",
-                         sconf->sockname); 
-            return errno;
-        }
-    }
-    
-    unixd_setup_child(); /* if running as root, switch to configured user/group */
-    while (1) {
-        int errfileno = STDERR_FILENO;
-        char *argv0; 
-        char **env; 
-        const char * const *argv; 
-        apr_int32_t in_pipe;
-        apr_int32_t out_pipe;
-        apr_int32_t err_pipe;
-        apr_cmdtype_e cmd_type;
-        request_rec *r;
-        apr_procattr_t *procattr = NULL;
-        apr_proc_t *procnew = NULL;
-        apr_file_t *inout;
-
-        apr_pool_clear(ptrans);
-
-        len = sizeof(unix_addr);
-        sd2 = accept(sd, (struct sockaddr *)&unix_addr, &len);
-        if (sd2 < 0) {
-            if (errno != EINTR) {
-                ap_log_error(APLOG_MARK, APLOG_ERR, errno, 
-                             (server_rec *)data,
-                             "Error accepting on cgid socket");
-            }
-            continue;
-        }
-       
-        r = apr_pcalloc(ptrans, sizeof(request_rec)); 
-        procnew = apr_pcalloc(ptrans, sizeof(*procnew));
-        r->pool = ptrans; 
-        rc = get_req(sd2, r, &argv0, &env, &req_type); 
-        if (rc) {
-            ap_log_error(APLOG_MARK, APLOG_ERR|APLOG_NOERRNO, 0,
-                         main_server,
-                         "Error reading request on cgid socket");
-            close(sd2);
-            continue;
-        }
-        apr_os_file_put(&r->server->error_log, &errfileno, 0, r->pool);
-        apr_os_file_put(&inout, &sd2, 0, r->pool);
-
-        if (req_type == SSI_REQ) {
-            in_pipe  = APR_NO_PIPE;
-            out_pipe = APR_FULL_BLOCK;
-            err_pipe = APR_NO_PIPE;
-            cmd_type = APR_SHELLCMD;
-        }
-        else {
-            in_pipe  = APR_CHILD_BLOCK;
-            out_pipe = APR_CHILD_BLOCK;
-            err_pipe = APR_CHILD_BLOCK;
-            cmd_type = APR_PROGRAM;
-        }
-
-        if (((rc = apr_procattr_create(&procattr, ptrans)) != APR_SUCCESS) ||
-            ((req_type == CGI_REQ) && 
-             (((rc = apr_procattr_io_set(procattr,
-                                        in_pipe,
-                                        out_pipe,
-                                        err_pipe)) != APR_SUCCESS) ||
-              /* XXX apr_procattr_child_*_set() is creating an unnecessary 
-               * pipe between this process and the child being created...
-               * It is cleaned up with the temporary pool for this request.
-               */
-              ((rc = apr_procattr_child_err_set(procattr, r->server->error_log, NULL)) != APR_SUCCESS) ||
-              ((rc = apr_procattr_child_in_set(procattr, inout, NULL)) != APR_SUCCESS))) ||
-            ((rc = apr_procattr_child_out_set(procattr, inout, NULL)) != APR_SUCCESS) ||
-            ((rc = apr_procattr_dir_set(procattr,
-                                  ap_make_dirstr_parent(r->pool, r->filename))) != APR_SUCCESS) ||
-            ((rc = apr_procattr_cmdtype_set(procattr, cmd_type)) != APR_SUCCESS)) {
-            /* Something bad happened, tell the world. */
-            ap_log_rerror(APLOG_MARK, APLOG_ERR, rc, r,
-                      "couldn't set child process attributes: %s", r->filename);
-        }
-        else {
-            argv = (const char * const *)create_argv(r->pool, NULL, NULL, NULL, argv0, r->args);
-
-           /* We want to close sd2 for the new CGI process too.
-            * If it is left open it'll make ap_pass_brigade() block
-            * waiting for EOF if CGI forked something running long.
-            * close(sd2) here should be okay, as CGI channel
-            * is already dup()ed by apr_procattr_child_{in,out}_set()
-            * above.
-            */
-            close(sd2);
-
-            rc = ap_os_create_privileged_process(r, procnew, argv0, argv, 
-                                                 (const char * const *)env, 
-                                                 procattr, ptrans);
-
-            if (rc != APR_SUCCESS) {
-                /* Bad things happened. Everyone should have cleaned up. */
-                ap_log_rerror(APLOG_MARK, APLOG_ERR, rc, r,
-                        "couldn't create child process: %d: %s", rc, r->filename);
-            }
-        }
-    } 
-    return -1; 
-} 
-
-static int cgid_init(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp, 
-                      server_rec *main_server) 
-{ 
-    apr_proc_t *procnew;
-    void *data;
-    int first_time = 0;
-    const char *userdata_key = "cgid_init";
-    module **m;
-
-    apr_pool_userdata_get(&data, userdata_key, main_server->process->pool);
-    if (!data) {
-        first_time = 1;
-        apr_pool_userdata_set((const void *)1, userdata_key,
-                         apr_pool_cleanup_null, main_server->process->pool);
-    }
-
-    if (!first_time) {
-        total_modules = 0;
-        for (m = ap_preloaded_modules; *m != NULL; m++)
-            total_modules++;
-
-        if ((daemon_pid = fork()) < 0) {
-            ap_log_error(APLOG_MARK, APLOG_ERR, errno, main_server, 
-                         "Couldn't spawn cgid daemon process"); 
-            /* XXX should we return a failure here ? */
-        }
-        else if (daemon_pid == 0) {
-            apr_pool_create(&pcgi, p); 
-            cgid_server(main_server);
-            exit(-1);
-        } 
-        procnew = apr_pcalloc(p, sizeof(*procnew));
-        procnew->pid = daemon_pid;
-        procnew->err = procnew->in = procnew->out = NULL;
-        apr_pool_note_subprocess(p, procnew, APR_KILL_AFTER_TIMEOUT);
-#if APR_HAS_OTHER_CHILD
-        apr_proc_other_child_register(procnew, cgid_maint, &procnew->pid, NULL, p);
-#endif
-
-        cgid_pfn_reg_with_ssi = APR_RETRIEVE_OPTIONAL_FN(ap_register_include_handler);
-        cgid_pfn_gtv          = APR_RETRIEVE_OPTIONAL_FN(ap_ssi_get_tag_and_value);
-        cgid_pfn_ps           = APR_RETRIEVE_OPTIONAL_FN(ap_ssi_parse_string);
-
-        if ((cgid_pfn_reg_with_ssi) && (cgid_pfn_gtv) && (cgid_pfn_ps)) {
-            /* Required by mod_include filter. This is how mod_cgid registers
-             *   with mod_include to provide processing of the exec directive.
-             */
-            cgid_pfn_reg_with_ssi("exec", handle_exec);
-        }
-    }
-    return OK;
-} 
-
-static void *create_cgid_config(apr_pool_t *p, server_rec *s) 
-{ 
-    cgid_server_conf *c = 
-    (cgid_server_conf *) apr_pcalloc(p, sizeof(cgid_server_conf)); 
-
-    c->logname = NULL; 
-    c->logbytes = DEFAULT_LOGBYTES; 
-    c->bufbytes = DEFAULT_BUFBYTES; 
-    c->sockname = ap_server_root_relative(p, DEFAULT_SOCKET); 
-    return c; 
-} 
-
-static void *merge_cgid_config(apr_pool_t *p, void *basev, void *overridesv) 
-{ 
-    cgid_server_conf *base = (cgid_server_conf *) basev, *overrides = (cgid_server_conf *) overridesv; 
-
-    return overrides->logname ? overrides : base; 
-} 
-
-static const char *set_scriptlog(cmd_parms *cmd, void *dummy, const char *arg) 
-{ 
-    server_rec *s = cmd->server; 
-    cgid_server_conf *conf = ap_get_module_config(s->module_config,
-                                                  &cgid_module); 
-
-    conf->logname = ap_server_root_relative(cmd->pool, arg);
-
-    if (!conf->logname) {
-        return apr_pstrcat(cmd->pool, "Invalid ScriptLog path ",
-                           arg, NULL);
-    }
-    return NULL; 
-} 
-
-static const char *set_scriptlog_length(cmd_parms *cmd, void *dummy, const char *arg) 
-{ 
-    server_rec *s = cmd->server; 
-    cgid_server_conf *conf = ap_get_module_config(s->module_config,
-                                                  &cgid_module); 
-
-    conf->logbytes = atol(arg); 
-    return NULL; 
-} 
-
-static const char *set_scriptlog_buffer(cmd_parms *cmd, void *dummy, const char *arg) 
-{ 
-    server_rec *s = cmd->server; 
-    cgid_server_conf *conf = ap_get_module_config(s->module_config,
-                                                  &cgid_module); 
-
-    conf->bufbytes = atoi(arg); 
-    return NULL; 
-} 
-
-static const char *set_script_socket(cmd_parms *cmd, void *dummy, const char *arg) 
-{ 
-    server_rec *s = cmd->server; 
-    cgid_server_conf *conf = ap_get_module_config(s->module_config,
-                                                  &cgid_module); 
-
-    conf->sockname = ap_server_root_relative(cmd->pool, arg); 
-
-    if (!conf->sockname) {
-        return apr_pstrcat(cmd->pool, "Invalid Scriptsock path ",
-                           arg, NULL);
-    }
-
-    return NULL; 
-} 
-
-static const command_rec cgid_cmds[] = 
-{ 
-    AP_INIT_TAKE1("ScriptLog", set_scriptlog, NULL, RSRC_CONF,
-                  "the name of a log for script debugging info"), 
-    AP_INIT_TAKE1("ScriptLogLength", set_scriptlog_length, NULL, RSRC_CONF,
-                  "the maximum length (in bytes) of the script debug log"), 
-    AP_INIT_TAKE1("ScriptLogBuffer", set_scriptlog_buffer, NULL, RSRC_CONF,
-                  "the maximum size (in bytes) to record of a POST request"), 
-    AP_INIT_TAKE1("Scriptsock", set_script_socket, NULL, RSRC_CONF,
-                  "the name of the socket to use for communication with "
-                  "the cgi daemon."), 
-    {NULL} 
-}; 
-
-static int log_scripterror(request_rec *r, cgid_server_conf * conf, int ret, 
-                           apr_status_t rv, char *error) 
-{ 
-    apr_file_t *f = NULL; 
-    struct stat finfo; 
-    char time_str[APR_CTIME_LEN];
-    int log_flags = rv ? APLOG_ERR : APLOG_NOERRNO | APLOG_ERR;
-
-    ap_log_rerror(APLOG_MARK, log_flags, rv, r, 
-                "%s: %s", error, r->filename); 
-
-    /* XXX Very expensive mainline case! Open, then getfileinfo! */
-    if (!conf->logname || 
-        ((stat(conf->logname, &finfo) == 0) 
-         && (finfo.st_size > conf->logbytes)) || 
-         (apr_file_open(&f, conf->logname,
-                  APR_APPEND|APR_WRITE|APR_CREATE, APR_OS_DEFAULT, r->pool) != APR_SUCCESS)) { 
-        return ret; 
-    } 
-
-    /* "%% [Wed Jun 19 10:53:21 1996] GET /cgid-bin/printenv HTTP/1.0" */ 
-    apr_ctime(time_str, apr_time_now());
-    apr_file_printf(f, "%%%% [%s] %s %s%s%s %s\n", time_str, r->method, r->uri, 
-            r->args ? "?" : "", r->args ? r->args : "", r->protocol); 
-    /* "%% 500 /usr/local/apache/cgid-bin */ 
-    apr_file_printf(f, "%%%% %d %s\n", ret, r->filename); 
-
-    apr_file_printf(f, "%%error\n%s\n", error); 
-
-    apr_file_close(f); 
-    return ret; 
-} 
-
-static int log_script(request_rec *r, cgid_server_conf * conf, int ret, 
-                  char *dbuf, const char *sbuf, apr_file_t *script_in, apr_file_t *script_err) 
-{ 
-    const apr_array_header_t *hdrs_arr = apr_table_elts(r->headers_in); 
-    const apr_table_entry_t *hdrs = (apr_table_entry_t *) hdrs_arr->elts; 
-    char argsbuffer[HUGE_STRING_LEN]; 
-    apr_file_t *f = NULL; 
-    int i; 
-    struct stat finfo; 
-    char time_str[APR_CTIME_LEN];
-
-    /* XXX Very expensive mainline case! Open, then getfileinfo! */
-    if (!conf->logname || 
-        ((stat(conf->logname, &finfo) == 0) 
-         && (finfo.st_size > conf->logbytes)) || 
-         (apr_file_open(&f, conf->logname, 
-                  APR_APPEND|APR_WRITE|APR_CREATE, APR_OS_DEFAULT, r->pool) != APR_SUCCESS)) { 
-        /* Soak up script output */ 
-        while (apr_file_gets(argsbuffer, HUGE_STRING_LEN, 
-                             script_in) == APR_SUCCESS) 
-            continue; 
-        if (script_err) {
-            while (apr_file_gets(argsbuffer, HUGE_STRING_LEN, 
-                                 script_err) == APR_SUCCESS) 
-                continue; 
-        }
-        return ret; 
-    } 
-
-    /* "%% [Wed Jun 19 10:53:21 1996] GET /cgid-bin/printenv HTTP/1.0" */ 
-    apr_ctime(time_str, apr_time_now());
-    apr_file_printf(f, "%%%% [%s] %s %s%s%s %s\n", time_str, r->method, r->uri, 
-            r->args ? "?" : "", r->args ? r->args : "", r->protocol); 
-    /* "%% 500 /usr/local/apache/cgid-bin" */ 
-    apr_file_printf(f, "%%%% %d %s\n", ret, r->filename); 
-
-    apr_file_puts("%request\n", f); 
-    for (i = 0; i < hdrs_arr->nelts; ++i) { 
-        if (!hdrs[i].key) 
-            continue; 
-        apr_file_printf(f, "%s: %s\n", hdrs[i].key, hdrs[i].val); 
-    } 
-    if ((r->method_number == M_POST || r->method_number == M_PUT) 
-        && *dbuf) { 
-        apr_file_printf(f, "\n%s\n", dbuf); 
-    } 
-
-    apr_file_puts("%response\n", f); 
-    hdrs_arr = apr_table_elts(r->err_headers_out); 
-    hdrs = (const apr_table_entry_t *) hdrs_arr->elts; 
-
-    for (i = 0; i < hdrs_arr->nelts; ++i) { 
-        if (!hdrs[i].key) 
-            continue; 
-        apr_file_printf(f, "%s: %s\n", hdrs[i].key, hdrs[i].val); 
-    } 
-
-    if (sbuf && *sbuf) 
-        apr_file_printf(f, "%s\n", sbuf); 
-
-    if (apr_file_gets(argsbuffer, HUGE_STRING_LEN, script_in) == APR_SUCCESS) { 
-        apr_file_puts("%stdout\n", f); 
-        apr_file_puts(argsbuffer, f); 
-        while (apr_file_gets(argsbuffer, HUGE_STRING_LEN, 
-                             script_in) == APR_SUCCESS) 
-            apr_file_puts(argsbuffer, f); 
-        apr_file_puts("\n", f); 
-    } 
-
-    if (script_err) {
-        if (apr_file_gets(argsbuffer, HUGE_STRING_LEN, 
-                          script_err) == APR_SUCCESS) { 
-            apr_file_puts("%stderr\n", f); 
-            apr_file_puts(argsbuffer, f); 
-            while (apr_file_gets(argsbuffer, HUGE_STRING_LEN, 
-                                 script_err) == APR_SUCCESS) 
-                apr_file_puts(argsbuffer, f); 
-            apr_file_puts("\n", f); 
-        } 
-    }
-
-    apr_file_close(script_in); 
-    if (script_err) {
-        apr_file_close(script_err); 
-    }
-
-    apr_file_close(f); 
-    return ret; 
-} 
-
-static apr_status_t close_unix_socket(void *thefd)
-{
-    int fd = (int)thefd;
-    
-    return close(fd);
-}
-
-static int connect_to_daemon(int *sdptr, request_rec *r,
-                             cgid_server_conf *conf)
-{
-    struct sockaddr_un unix_addr;
-    int sd;
-    int connect_tries;
-    apr_interval_time_t sliding_timer;
-
-    memset(&unix_addr, 0, sizeof(unix_addr));
-    unix_addr.sun_family = AF_UNIX;
-    strcpy(unix_addr.sun_path, conf->sockname);
-
-    connect_tries = 0;
-    sliding_timer = 100000; /* 100 milliseconds */
-    while (1) {
-        ++connect_tries;
-        if ((sd = socket(AF_UNIX, SOCK_STREAM, 0)) < 0) {
-            return log_scripterror(r, conf, HTTP_INTERNAL_SERVER_ERROR, errno, 
-                                   "unable to create socket to cgi daemon");
-        }
-        if (connect(sd, (struct sockaddr *)&unix_addr, sizeof(unix_addr)) < 0) {
-            if (errno == ECONNREFUSED && connect_tries < DEFAULT_CONNECT_ATTEMPTS) {
-                ap_log_rerror(APLOG_MARK, APLOG_DEBUG, errno, r,
-                              "connect #%d to cgi daemon failed, sleeping before retry",
-                              connect_tries);
-                close(sd);
-                apr_sleep(sliding_timer);
-                if (sliding_timer < 2 * APR_USEC_PER_SEC) {
-                    sliding_timer *= 2;
-                }
-            }
-            else {
-                close(sd);
-                return log_scripterror(r, conf, HTTP_SERVICE_UNAVAILABLE, errno, 
-                                       "unable to connect to cgi daemon after multiple tries");
-            }
-        }
-        else {
-            apr_pool_cleanup_register(r->pool, (void *)sd, close_unix_socket,
-                                      apr_pool_cleanup_null);
-            break; /* we got connected! */
-        }
-        /* gotta try again, but make sure the cgid daemon is still around */
-        if (kill(daemon_pid, 0) != 0) {
-            return log_scripterror(r, conf, HTTP_SERVICE_UNAVAILABLE, errno,
-                                   "cgid daemon is gone; is Apache terminating?");
-        }
-    }
-    *sdptr = sd;
-    return OK;
-}
-
-/**************************************************************** 
- * 
- * Actual cgid handling... 
- */ 
-static int cgid_handler(request_rec *r) 
-{ 
-    int retval, nph, dbpos = 0; 
-    char *argv0, *dbuf = NULL; 
-    apr_bucket_brigade *bb;
-    apr_bucket *b;
-    char argsbuffer[HUGE_STRING_LEN]; 
-    cgid_server_conf *conf;
-    int is_included;
-    int sd;
-    char **env; 
-    apr_file_t *tempsock;
-    apr_size_t nbytes;
-
-    if(strcmp(r->handler,CGI_MAGIC_TYPE) && strcmp(r->handler,"cgi-script"))
-	return DECLINED;
-
-    if (r->method_number == M_OPTIONS) { 
-        /* 99 out of 100 cgid scripts, this is all they support */ 
-        r->allowed |= (AP_METHOD_BIT << M_GET); 
-        r->allowed |= (AP_METHOD_BIT << M_POST); 
-        return DECLINED; 
-    } 
-
-    conf = ap_get_module_config(r->server->module_config, &cgid_module); 
-    is_included = !strcmp(r->protocol, "INCLUDED"); 
-
-    if ((argv0 = strrchr(r->filename, '/')) != NULL)
-        argv0++;
-    else
-        argv0 = r->filename;
- 
-    nph = !(strncmp(argv0, "nph-", 4)); 
-
-    if ((argv0 = strrchr(r->filename, '/')) != NULL) 
-        argv0++; 
-    else 
-        argv0 = r->filename; 
-
-    if (!(ap_allow_options(r) & OPT_EXECCGI) && !is_scriptaliased(r)) 
-        return log_scripterror(r, conf, HTTP_FORBIDDEN, 0, 
-                               "Options ExecCGI is off in this directory"); 
-    if (nph && is_included) 
-        return log_scripterror(r, conf, HTTP_FORBIDDEN, 0, 
-                               "attempt to include NPH CGI script"); 
-
-#if defined(OS2) || defined(WIN32)
-#error mod_cgid does not work on this platform.  If you teach it to, look 
-#error at mod_cgi.c for required code in this path.
-#else 
-    if (r->finfo.filetype == 0) 
-        return log_scripterror(r, conf, HTTP_NOT_FOUND, 0, 
-                               "script not found or unable to stat"); 
-#endif 
-    if (r->finfo.filetype == APR_DIR) 
-        return log_scripterror(r, conf, HTTP_FORBIDDEN, 0, 
-                               "attempt to invoke directory as script"); 
-
-    if (r->path_info && *r->path_info && !r->used_path_info) {
-        return log_scripterror(r, conf, HTTP_NOT_FOUND, 0,
-                               "AcceptPathInfo off disallows user's path");
-    }
-/*
-    if (!ap_suexec_enabled) { 
-        if (!ap_can_exec(&r->finfo)) 
-            return log_scripterror(r, conf, HTTP_FORBIDDEN, 0, 
-                                   "file permissions deny server execution"); 
-    } 
-*/
-    ap_add_common_vars(r); 
-    ap_add_cgi_vars(r); 
-    env = ap_create_environment(r->pool, r->subprocess_env); 
-
-    if ((retval = connect_to_daemon(&sd, r, conf)) != OK) {
-        return retval;
-    }
-
-    send_req(sd, r, argv0, env, CGI_REQ); 
-
-    /* We are putting the socket discriptor into an apr_file_t so that we can
-     * use a pipe bucket to send the data to the client.
-     * Note that this does not register a cleanup for the socket.  We did
-     * that explicitly right after we created the socket.
-     */
-    apr_os_file_put(&tempsock, &sd, 0, r->pool);
-
-    if ((retval = ap_setup_client_block(r, REQUEST_CHUNKED_ERROR))) 
-        return retval; 
-     
-    if ((argv0 = strrchr(r->filename, '/')) != NULL) 
-        argv0++; 
-    else 
-        argv0 = r->filename; 
-
-    /* Transfer any put/post args, CERN style... 
-     * Note that we already ignore SIGPIPE in the core server. 
-     */ 
-
-    if (ap_should_client_block(r)) { 
-        int dbsize, len_read; 
-
-        if (conf->logname) { 
-            dbuf = apr_pcalloc(r->pool, conf->bufbytes + 1); 
-            dbpos = 0; 
-        } 
-
-        while ((len_read = 
-                ap_get_client_block(r, argsbuffer, HUGE_STRING_LEN)) > 0) { 
-            if (conf->logname) { 
-                if ((dbpos + len_read) > conf->bufbytes) { 
-                    dbsize = conf->bufbytes - dbpos; 
-                } 
-                else { 
-                    dbsize = len_read; 
-                } 
-                memcpy(dbuf + dbpos, argsbuffer, dbsize); 
-                dbpos += dbsize; 
-            } 
-            nbytes = len_read;
-            apr_file_write(tempsock, argsbuffer, &nbytes);
-            if (nbytes < len_read) { 
-                /* silly script stopped reading, soak up remaining message */ 
-                while (ap_get_client_block(r, argsbuffer, HUGE_STRING_LEN) > 0) { 
-                    /* dump it */ 
-                } 
-                break; 
-            } 
-        } 
-    } 
-    /* we're done writing, or maybe we didn't write at all;
-     * force EOF on child's stdin so that the cgi detects end (or
-     * absence) of data
-     */
-    shutdown(sd, 1);
-
-    /* Handle script return... */ 
-    if (!nph) { 
-        const char *location; 
-        char sbuf[MAX_STRING_LEN]; 
-        int ret; 
-
-        if ((ret = ap_scan_script_header_err(r, tempsock, sbuf))) { 
-            return log_script(r, conf, ret, dbuf, sbuf, tempsock, NULL); 
-        } 
-
-        location = apr_table_get(r->headers_out, "Location"); 
-
-        if (location && location[0] == '/' && r->status == 200) { 
-
-            /* Soak up all the script output */ 
-            while (apr_file_gets(argsbuffer, HUGE_STRING_LEN, 
-                                 tempsock) == APR_SUCCESS) { 
-                continue; 
-            } 
-            /* This redirect needs to be a GET no matter what the original 
-             * method was. 
-             */ 
-            r->method = apr_pstrdup(r->pool, "GET"); 
-            r->method_number = M_GET; 
-
-            /* We already read the message body (if any), so don't allow 
-             * the redirected request to think it has one. We can ignore 
-             * Transfer-Encoding, since we used REQUEST_CHUNKED_ERROR. 
-             */ 
-            apr_table_unset(r->headers_in, "Content-Length"); 
-
-            ap_internal_redirect_handler(location, r); 
-            return OK; 
-        } 
-        else if (location && r->status == 200) { 
-            /* XX Note that if a script wants to produce its own Redirect 
-             * body, it now has to explicitly *say* "Status: 302" 
-             */ 
-            return HTTP_MOVED_TEMPORARILY; 
-        } 
-
-        if (!r->header_only) {
-            /* Passing our socket down the filter chain in a pipe bucket
-             * gives up the responsibility of closing the socket, so
-             * get rid of the cleanup.
-             */
-            apr_pool_cleanup_kill(r->pool, (void *)sd, close_unix_socket);
-
-            bb = apr_brigade_create(r->pool);
-            b = apr_bucket_pipe_create(tempsock);
-            APR_BRIGADE_INSERT_TAIL(bb, b);
-            b = apr_bucket_eos_create();
-            APR_BRIGADE_INSERT_TAIL(bb, b);
-            ap_pass_brigade(r->output_filters, bb);
-        } 
-    } 
-
-    if (nph) {
-        /* Passing our socket down the filter chain in a pipe bucket
-         * gives up the responsibility of closing the socket, so
-         * get rid of the cleanup.
-         */
-        apr_pool_cleanup_kill(r->pool, (void *)sd, close_unix_socket);
-
-        bb = apr_brigade_create(r->pool);
-        b = apr_bucket_pipe_create(tempsock);
-        APR_BRIGADE_INSERT_TAIL(bb, b);
-        b = apr_bucket_eos_create();
-        APR_BRIGADE_INSERT_TAIL(bb, b);
-        ap_pass_brigade(r->output_filters, bb);
-    } 
-
-    return OK; /* NOT r->status, even if it has changed. */ 
-} 
-
-
-
-
-/*============================================================================
- *============================================================================
- * This is the beginning of the cgi filter code moved from mod_include. This
- *   is the code required to handle the "exec" SSI directive.
- *============================================================================
- *============================================================================*/
-static int include_cgi(char *s, request_rec *r, ap_filter_t *next,
-                       apr_bucket *head_ptr, apr_bucket **inserted_head)
-{
-    request_rec *rr = ap_sub_req_lookup_uri(s, r, next);
-    int rr_status;
-    apr_bucket  *tmp_buck, *tmp2_buck;
-
-    if (rr->status != HTTP_OK) {
-        ap_destroy_sub_req(rr);
-        return -1;
-    }
-
-    /* No hardwired path info or query allowed */
-
-    if ((rr->path_info && rr->path_info[0]) || rr->args) {
-        ap_destroy_sub_req(rr);
-        return -1;
-    }
-    if (rr->finfo.filetype != APR_REG) {
-        ap_destroy_sub_req(rr);
-        return -1;
-    }
-
-    /* Script gets parameters of the *document*, for back compatibility */
-
-    rr->path_info = r->path_info;       /* hard to get right; see mod_cgi.c */
-    rr->args = r->args;
-
-    /* Force sub_req to be treated as a CGI request, even if ordinary
-     * typing rules would have called it something else.
-     */
-
-    rr->content_type = CGI_MAGIC_TYPE;
-
-    /* Run it. */
-
-    rr_status = ap_run_sub_req(rr);
-    if (ap_is_HTTP_REDIRECT(rr_status)) {
-        apr_size_t len_loc;
-        const char *location = apr_table_get(rr->headers_out, "Location");
-
-        location = ap_escape_html(rr->pool, location);
-        len_loc = strlen(location);
-
-        /* XXX: if most of this stuff is going to get copied anyway,
-         * it'd be more efficient to pstrcat it into a single pool buffer
-         * and a single pool bucket */
-
-        tmp_buck = apr_bucket_immortal_create("<A HREF=\"",
-                                              sizeof("<A HREF=\"") - 1);
-        APR_BUCKET_INSERT_BEFORE(head_ptr, tmp_buck);
-        tmp2_buck = apr_bucket_heap_create(location, len_loc, 1);
-        APR_BUCKET_INSERT_BEFORE(head_ptr, tmp2_buck);
-        tmp2_buck = apr_bucket_immortal_create("\">", sizeof("\">") - 1);
-        APR_BUCKET_INSERT_BEFORE(head_ptr, tmp2_buck);
-        tmp2_buck = apr_bucket_heap_create(location, len_loc, 1);
-        APR_BUCKET_INSERT_BEFORE(head_ptr, tmp2_buck);
-        tmp2_buck = apr_bucket_immortal_create("</A>", sizeof("</A>") - 1);
-        APR_BUCKET_INSERT_BEFORE(head_ptr, tmp2_buck);
-
-        if (*inserted_head == NULL) {
-            *inserted_head = tmp_buck;
-        }
-    }
-
-    ap_destroy_sub_req(rr);
-
-    return 0;
-}
-
-
-/* This is the special environment used for running the "exec cmd="
- *   variety of SSI directives.
- */
-static void add_ssi_vars(request_rec *r, ap_filter_t *next)
-{
-    apr_table_t *e = r->subprocess_env;
-
-    if (r->path_info && r->path_info[0] != '\0') {
-        request_rec *pa_req;
-
-        apr_table_setn(e, "PATH_INFO", ap_escape_shell_cmd(r->pool, r->path_info));
-
-        pa_req = ap_sub_req_lookup_uri(ap_escape_uri(r->pool, r->path_info), r, next);
-        if (pa_req->filename) {
-            apr_table_setn(e, "PATH_TRANSLATED",
-                           apr_pstrcat(r->pool, pa_req->filename, pa_req->path_info, NULL));
-        }
-        ap_destroy_sub_req(pa_req);
-    }
-
-    if (r->args) {
-        char *arg_copy = apr_pstrdup(r->pool, r->args);
-
-        apr_table_setn(e, "QUERY_STRING", r->args);
-        ap_unescape_url(arg_copy);
-        apr_table_setn(e, "QUERY_STRING_UNESCAPED", ap_escape_shell_cmd(r->pool, arg_copy));
-    }
-}
-
-static int include_cmd(include_ctx_t *ctx, apr_bucket_brigade **bb, char *command,
-                       request_rec *r, ap_filter_t *f)
-{
-    char **env; 
-    const char *location; 
-    int sd;
-    apr_status_t rc = APR_SUCCESS; 
-    int retval;
-    apr_bucket_brigade *bcgi;
-    apr_bucket *b;
-    apr_file_t *tempsock = NULL;
-    cgid_server_conf *conf = ap_get_module_config(r->server->module_config,
-                                                  &cgid_module); 
-
-    add_ssi_vars(r, f->next);
-    env = ap_create_environment(r->pool, r->subprocess_env);
-
-    if ((retval = connect_to_daemon(&sd, r, conf)) != OK) {
-        return retval;
-    }
-
-    SPLIT_AND_PASS_PRETAG_BUCKETS(*bb, ctx, f->next, rc);
-    if (rc != APR_SUCCESS) {
-        return rc;
-    }
-
-    send_req(sd, r, command, env, SSI_REQ); 
-
-    /* We are putting the socket discriptor into an apr_file_t so that we can
-     * use a pipe bucket to send the data to the client.
-     * Note that this does not register a cleanup for the socket.  We did
-     * that explicitly right after we created the socket.
-     */
-    apr_os_file_put(&tempsock, &sd, 0, r->pool);
-
-    if ((retval = ap_setup_client_block(r, REQUEST_CHUNKED_ERROR))) 
-        return retval; 
-    
-    location = apr_table_get(r->headers_out, "Location"); 
-
-    if (location && location[0] == '/' && r->status == 200) { 
-        char argsbuffer[HUGE_STRING_LEN]; 
-
-        /* Soak up all the script output */ 
-        while (apr_file_gets(argsbuffer, HUGE_STRING_LEN, 
-                             tempsock) == APR_SUCCESS) { 
-            continue; 
-        } 
-        /* This redirect needs to be a GET no matter what the original 
-         * method was. 
-         */ 
-        r->method = apr_pstrdup(r->pool, "GET"); 
-        r->method_number = M_GET; 
-
-        /* We already read the message body (if any), so don't allow 
-         * the redirected request to think it has one. We can ignore 
-         * Transfer-Encoding, since we used REQUEST_CHUNKED_ERROR. 
-         */ 
-        apr_table_unset(r->headers_in, "Content-Length"); 
-
-        ap_internal_redirect_handler(location, r); 
-        return OK; 
-    } 
-    else if (location && r->status == 200) { 
-        /* XX Note that if a script wants to produce its own Redirect 
-         * body, it now has to explicitly *say* "Status: 302" 
-         */ 
-        return HTTP_MOVED_TEMPORARILY; 
-    } 
-
-    if (!r->header_only) { 
-        /* Passing our socket down the filter chain in a pipe bucket
-         * gives up the responsibility of closing the socket, so
-         * get rid of the cleanup.
-         */
-        apr_pool_cleanup_kill(r->pool, (void *)sd, close_unix_socket);
-
-        bcgi = apr_brigade_create(r->pool);
-        b    = apr_bucket_pipe_create(tempsock);
-        APR_BRIGADE_INSERT_TAIL(bcgi, b);
-        ap_pass_brigade(f->next, bcgi);
-    } 
-
-    return 0;
-}
-
-static int handle_exec(include_ctx_t *ctx, apr_bucket_brigade **bb, request_rec *r,
-                       ap_filter_t *f, apr_bucket *head_ptr, apr_bucket **inserted_head)
-{
-    char *tag     = NULL;
-    char *tag_val = NULL;
-    char *file = r->filename;
-    apr_bucket  *tmp_buck;
-    char parsed_string[MAX_STRING_LEN];
-
-    *inserted_head = NULL;
-    if (ctx->flags & FLAG_PRINTING) {
-        if (ctx->flags & FLAG_NO_EXEC) {
-            ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                      "exec used but not allowed in %s", r->filename);
-            CREATE_ERROR_BUCKET(ctx, tmp_buck, head_ptr, *inserted_head);
-        }
-        else {
-            while (1) {
-                cgid_pfn_gtv(ctx, &tag, &tag_val, 1);
-                if (tag_val == NULL) {
-                    if (tag == NULL) {
-                        return (0);
-                    }
-                    else {
-                        return 1;
-                    }
-                }
-                if (!strcmp(tag, "cmd")) {
-                    cgid_pfn_ps(r, ctx, tag_val, parsed_string, sizeof(parsed_string), 1);
-                    if (include_cmd(ctx, bb, parsed_string, r, f) == -1) {
-                        ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                                    "execution failure for parameter \"%s\" "
-                                    "to tag exec in file %s", tag, r->filename);
-                        CREATE_ERROR_BUCKET(ctx, tmp_buck, head_ptr, *inserted_head);
-                    }
-                    /* just in case some stooge changed directories */
-                }
-                else if (!strcmp(tag, "cgi")) {
-                    apr_status_t retval = APR_SUCCESS;
-
-                    cgid_pfn_ps(r, ctx, tag_val, parsed_string, sizeof(parsed_string), 0);
-                    SPLIT_AND_PASS_PRETAG_BUCKETS(*bb, ctx, f->next, retval);
-                    if (retval != APR_SUCCESS) {
-                        return retval;
-                    }
-
-                    if (include_cgi(parsed_string, r, f->next, head_ptr, inserted_head) == -1) {
-                        ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                                    "invalid CGI ref \"%s\" in %s", tag_val, file);
-                        CREATE_ERROR_BUCKET(ctx, tmp_buck, head_ptr, *inserted_head);
-                    }
-                }
-                else {
-                    ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                                "unknown parameter \"%s\" to tag exec in %s", tag, file);
-                    CREATE_ERROR_BUCKET(ctx, tmp_buck, head_ptr, *inserted_head);
-                }
-            }
-        }
-    }
-    return 0;
-}
-/*============================================================================
- *============================================================================
- * This is the end of the cgi filter code moved from mod_include.
- *============================================================================
- *============================================================================*/
-
-
-static void register_hook(apr_pool_t *p)
-{
-    static const char * const aszPre[] = { "mod_include.c", NULL };
-
-    ap_hook_post_config(cgid_init, aszPre, NULL, APR_HOOK_MIDDLE);
-    ap_hook_handler(cgid_handler, NULL, NULL, APR_HOOK_MIDDLE);
-}
-
-module AP_MODULE_DECLARE_DATA cgid_module = { 
-    STANDARD20_MODULE_STUFF, 
-    NULL, /* dir config creater */ 
-    NULL, /* dir merger --- default is to override */ 
-    create_cgid_config, /* server config */ 
-    merge_cgid_config, /* merge server config */ 
-    cgid_cmds, /* command table */ 
-    register_hook /* register_handlers */ 
-}; 
-
diff --git a/modules/generators/mod_cgid.exp b/modules/generators/mod_cgid.exp
deleted file mode 100644
index 5f10d48..0000000
--- a/modules/generators/mod_cgid.exp
+++ /dev/null
@@ -1 +0,0 @@
-cgid_module
diff --git a/modules/generators/mod_info.c b/modules/generators/mod_info.c
deleted file mode 100644
index 8f9553c..0000000
--- a/modules/generators/mod_info.c
+++ /dev/null
@@ -1,594 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-/* 
- * Info Module.  Display configuration information for the server and
- * all included modules.
- *
- * <Location /server-info>
- * SetHandler server-info
- * </Location>
- *
- * GET /server-info - Returns full configuration page for server and all modules
- * GET /server-info?server - Returns server configuration only
- * GET /server-info?module_name - Returns configuration for a single module
- * GET /server-info?list - Returns quick list of included modules
- *
- * Rasmus Lerdorf <rasmus@vex.net>, May 1996
- *
- * 05.01.96 Initial Version
- *
- * Lou Langholtz <ldl@usi.utah.edu>, July 1997
- *
- * 07.11.97 Addition of the AddModuleInfo directive
- *
- * Ryan Morgan <rmorgan@covalent.net>
- * 
- * 8.11.00 Port to Apache 2.0.  Read configuation from the configuration
- * tree rather than reparse the entire configuation file.
- * 
- */
-
-#define CORE_PRIVATE
-
-#include "httpd.h"
-#include "http_config.h"
-#include "http_core.h"
-#include "http_log.h"
-#include "http_main.h"
-#include "http_protocol.h"
-#include "http_request.h"
-#include "util_script.h"
-#include "apr_strings.h"
-#include "apr_lib.h"
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-#include "ap_mpm.h"
-
-typedef struct {
-    const char *name;                 /* matching module name */
-    const char *info;                 /* additional info */
-} info_entry;
-
-typedef struct {
-    apr_array_header_t *more_info;
-} info_svr_conf;
-
-module AP_MODULE_DECLARE_DATA info_module;
-
-static void *create_info_config(apr_pool_t *p, server_rec *s)
-{
-    info_svr_conf *conf = (info_svr_conf *) apr_pcalloc(p, sizeof(info_svr_conf));
-
-    conf->more_info = apr_array_make(p, 20, sizeof(info_entry));
-    return conf;
-}
-
-static void *merge_info_config(apr_pool_t *p, void *basev, void *overridesv)
-{
-    info_svr_conf *new = (info_svr_conf *) apr_pcalloc(p, sizeof(info_svr_conf));
-    info_svr_conf *base = (info_svr_conf *) basev;
-    info_svr_conf *overrides = (info_svr_conf *) overridesv;
-
-    new->more_info = apr_array_append(p, overrides->more_info, base->more_info);
-    return new;
-}
-
-static char *mod_info_html_cmd_string(const char *string, char *buf, size_t buf_len, int close)
-{
-    const char *s;
-    char *t;
-    char *end_buf;
-
-    s = string;
-    t = buf;
-    /* keep space for \0 byte */
-    end_buf = buf + buf_len - 1;
-    while ((*s) && (t < end_buf)) {
-        if (*s == '<') {
-	    if (close) {
-	        strncpy(t, "&lt;/,", end_buf -t);
-	        t += 5;
-	    } else {
-                strncpy(t, "&lt;", end_buf - t);
-                t += 4;
-	    }
-        }
-        else if (*s == '>') {
-            strncpy(t, "&gt;", end_buf - t);
-            t += 4;
-        }
-        else if (*s == '&') {
-            strncpy(t, "&amp;", end_buf - t);
-            t += 5;
-        }
-	else if (*s == ' ') {
-	    if (close) {
-	        strncpy(t, "&gt;", end_buf -t);
-	        t += 4;
-	        break;
-	    } else {
-	      *t++ = *s;
-            }
-	} else {
-            *t++ = *s;
-        }
-        s++;
-    }
-    /* oops, overflowed... don't overwrite */
-    if (t > end_buf) {
-	*end_buf = '\0';
-    }
-    else {
-	*t = '\0';
-    }
-    return (buf);
-}
-
-static void mod_info_module_cmds(request_rec * r, const command_rec * cmds,
-				 ap_directive_t * conftree)
-{
-    const command_rec *cmd;
-    ap_directive_t *tmptree = conftree;
-
-    char buf[MAX_STRING_LEN];
-    char htmlstring[MAX_STRING_LEN];
-    int block_start = 0;
-    int nest = 0;
-
-    while (tmptree != NULL) {
-	cmd = cmds;
-	while (cmd->name) {
-	    if ((cmd->name[0] != '<') && 
-                (strcasecmp(cmd->name, tmptree->directive) == 0)) {
-		if (nest > block_start) {
-		    block_start++;
-		    apr_snprintf(htmlstring, sizeof(htmlstring), "%s %s",
-				tmptree->parent->directive,
-				tmptree->parent->args);
-		    ap_rprintf(r, "<dd><tt>%s</tt></dd>\n",
-			       mod_info_html_cmd_string(htmlstring, buf,
-							sizeof(buf), 0));
-		}
-		if (nest == 2) {
-		    ap_rprintf(r, "<dd><tt>&nbsp;&nbsp;&nbsp;&nbsp;%s "
-			       "<i>%s</i></tt></dd>\n",
-			       tmptree->directive, tmptree->args);
-		} else if (nest == 1) {
-		    ap_rprintf(r,
-			       "<dd><tt>&nbsp;&nbsp;%s <i>%s</i></tt></dd>\n",
-			       tmptree->directive, tmptree->args);
-		} else {
-		    ap_rprintf(r, "<dd><tt>%s <i>%s</i></tt></dd>\n",
-			       mod_info_html_cmd_string(tmptree->directive,
-							buf, sizeof(buf),
-							0), tmptree->args);
-		}
-	    }
-	    ++cmd;
-	}
-	if (tmptree->first_child != NULL) {
-	    tmptree = tmptree->first_child;
-	    nest++;
-	} else if (tmptree->next != NULL) {
-	    tmptree = tmptree->next;
-	} else {
-	    if (block_start) {
-		apr_snprintf(htmlstring, sizeof(htmlstring), "%s %s",
-			    tmptree->parent->directive,
-			    tmptree->parent->args);
-		ap_rprintf(r, "<dd><tt>%s</tt></dd>\n",
-			   mod_info_html_cmd_string(htmlstring, buf,
-						    sizeof(buf), 1));
-		block_start--;
-	    }
-            if (tmptree->parent) {
-                tmptree = tmptree->parent->next;
-            }
-            else {
-                tmptree = NULL;
-            }
-	    nest--;
-	}
-
-    }
-}
-
-typedef struct { /*XXX: should get something from apr_hooks.h instead */
-    void (*pFunc)(void); /* just to get the right size */
-    const char *szName;
-    const char * const *aszPredecessors;
-    const char * const *aszSuccessors;
-    int nOrder;
-} hook_struct_t;
-
-/*
- * hook_get_t is a pointer to a function that takes void as an argument and
- * returns a pointer to an apr_array_header_t.  The nasty WIN32 ifdef
- * is required to account for the fact that the ap_hook* calls all use
- * STDCALL calling convention. 
- */
-typedef apr_array_header_t * ( 
-#ifdef WIN32
-__stdcall 
-#endif
-* hook_get_t)(void);
-
-typedef struct {
-    const char *name;
-    hook_get_t get;
-} hook_lookup_t;
-
-static hook_lookup_t request_hooks[] = {
-    {"Post-Read Request", ap_hook_get_post_read_request},
-    {"Header Parse", ap_hook_get_header_parser},
-    {"Translate Path", ap_hook_get_translate_name},
-    {"Check Access", ap_hook_get_access_checker},
-    {"Verify User ID", ap_hook_get_check_user_id},
-    {"Verify User Access", ap_hook_get_auth_checker},
-    {"Check Type", ap_hook_get_type_checker},
-    {"Fixups", ap_hook_get_fixups},
-    {"Logging", ap_hook_get_log_transaction},
-    {NULL},
-};
-
-static int module_find_hook(module *modp,
-                            hook_get_t hook_get)
-{
-    int i;
-    apr_array_header_t *hooks = hook_get();
-    hook_struct_t *elts;
-
-    if (!hooks) {
-        return 0;
-    }
-
-    elts = (hook_struct_t *)hooks->elts;
-
-    for (i=0; i< hooks->nelts; i++) {
-        if (strcmp(elts[i].szName, modp->name) == 0) {
-            return 1;
-        }
-    }
-
-    return 0;
-}
-
-static void module_participate(request_rec *r,
-                               module *modp,
-                               hook_lookup_t *lookup,
-                               int *comma)
-{
-    if (module_find_hook(modp, lookup->get)) {
-        if (*comma) {
-            ap_rputs(", ", r);
-        }
-        ap_rvputs(r, "<tt>", lookup->name, "</tt>", NULL);
-        *comma = 1;
-    }
-}
-
-static void module_request_hook_participate(request_rec *r, module *modp)
-{
-    int i, comma=0;
-
-    ap_rputs("<dt><strong>Request Phase Participation:</strong>\n", r);
-
-    for (i=0; request_hooks[i].name; i++) {
-        module_participate(r, modp, &request_hooks[i], &comma);
-    }
-
-    if (!comma) {
-        ap_rputs("<tt> <em>none</em></tt>", r);
-    }
-    ap_rputs("</dt>\n", r);
-}
-
-static const char *find_more_info(server_rec *s, const char *module_name)
-{
-    int i;
-    info_svr_conf *conf = (info_svr_conf *) ap_get_module_config(s->module_config,
-                                                              &info_module);
-    info_entry *entry = (info_entry *) conf->more_info->elts;
-
-    if (!module_name) {
-        return 0;
-    }
-    for (i = 0; i < conf->more_info->nelts; i++) {
-        if (!strcmp(module_name, entry->name)) {
-            return entry->info;
-        }
-        entry++;
-    }
-    return 0;
-}
-
-static int display_info(request_rec *r)
-{
-    module *modp = NULL;
-    char buf[MAX_STRING_LEN];
-    const char *more_info;
-    const command_rec *cmd = NULL;
-#ifdef NEVERMORE
-    const handler_rec *hand = NULL;
-#endif
-    server_rec *serv = r->server;
-    int comma = 0;
-
-    if (strcmp(r->handler, "server-info"))
-        return DECLINED;
-
-    r->allowed |= (AP_METHOD_BIT << M_GET);
-    if (r->method_number != M_GET)
-	return DECLINED;
-
-    r->content_type = "text/html";
-    if (r->header_only) {
-        return 0;
-    }
-
-    ap_rputs(DOCTYPE_HTML_3_2
-	     "<html><head><title>Server Information</title></head>\n", r);
-    ap_rputs("<body><h1 align=\"center\">Apache Server Information</h1>\n", r);
-    if (!r->args || strcasecmp(r->args, "list")) {
-        if (!r->args) {
-            ap_rputs("<dl><dt><tt><a href=\"#server\">Server Settings</a>, ", r);
-            for (modp = ap_top_module; modp; modp = modp->next) {
-                ap_rprintf(r, "<a href=\"#%s\">%s</a>", modp->name, modp->name);
-                if (modp->next) {
-                    ap_rputs(", ", r);
-                }
-            }
-            ap_rputs("</tt></dt></dl><hr />", r);
-
-        }
-        if (!r->args || !strcasecmp(r->args, "server")) {
-            int max_daemons, forked, threaded;
-
-            ap_rprintf(r, "<dl><dt><a name=\"server\"><strong>Server Version:</strong> "
-                        "<font size=\"+1\"><tt>%s</tt></font></a></dt>\n",
-                        ap_get_server_version());
-            ap_rprintf(r, "<dt><strong>Server Built:</strong> "
-                        "<font size=\"+1\"><tt>%s</tt></font></dt>\n",
-                        ap_get_server_built());
-            ap_rprintf(r, "<dt><strong>API Version:</strong> "
-                        "<tt>%d:%d</tt></dt>\n",
-                        MODULE_MAGIC_NUMBER_MAJOR, MODULE_MAGIC_NUMBER_MINOR);
-            ap_rprintf(r, "<dt><strong>Hostname/port:</strong> "
-                        "<tt>%s:%u</tt></dt>\n",
-                        serv->server_hostname, serv->port);
-            ap_rprintf(r, "<dt><strong>Timeouts:</strong> "
-                        "<tt>connection: %d &nbsp;&nbsp; "
-                        "keep-alive: %d</tt></dt>",
-                        serv->timeout, serv->keep_alive_timeout);
-            ap_mpm_query(AP_MPMQ_MAX_DAEMON_USED, &max_daemons);
-            ap_mpm_query(AP_MPMQ_IS_THREADED, &threaded);
-            ap_mpm_query(AP_MPMQ_IS_FORKED, &forked);
-            ap_rprintf(r, "<dt><strong>MPM Name:</strong> <tt>%s</tt></dt>\n", ap_show_mpm());
-            ap_rprintf(r, "<dt><strong>MPM Information:</strong> "
-		       "<tt>Max Daemons: %d Threaded: %s Forked: %s</tt></dt>\n",
-                       max_daemons, threaded ? "yes" : "no",
-                       forked ? "yes" : "no");
-            ap_rprintf(r, "<dt><strong>Server Root:</strong> "
-                        "<tt>%s</tt></dt>\n", ap_server_root);
-            ap_rprintf(r, "<dt><strong>Config File:</strong> "
-		       "<tt>%s</tt></dt>\n", SERVER_CONFIG_FILE);
-            ap_rputs("</dl><hr />", r);
-        }
-        for (modp = ap_top_module; modp; modp = modp->next) {
-            if (!r->args || !strcasecmp(modp->name, r->args)) {
-                ap_rprintf(r, "<dl><dt><a name=\"%s\"><strong>Module Name:</strong> "
-                            "<font size=\"+1\"><tt>%s</tt></font></a></dt>\n",
-                            modp->name, modp->name);
-                ap_rputs("<dt><strong>Content handlers:</strong> ", r);
-#ifdef NEVERMORE
-                hand = modp->handlers;
-                if (hand) {
-                    while (hand) {
-                        if (hand->content_type) {
-                            ap_rprintf(r, " <tt>%s</tt>\n", hand->content_type);
-                        }
-                        else {
-                            break;
-                        }
-                        hand++;
-                        if (hand && hand->content_type) {
-                            ap_rputs(",", r);
-                        }
-                    }
-                }
-                else {
-                    ap_rputs("<tt> <em>none</em></tt>", r);
-                }
-#else
-                if (module_find_hook(modp, ap_hook_get_handler)) {
-                    ap_rputs("<tt> <em>yes</em></tt>", r);
-                }
-                else {
-                    ap_rputs("<tt> <em>none</em></tt>", r);
-                }
-#endif
-                ap_rputs("</dt>", r);
-                ap_rputs("<dt><strong>Configuration Phase Participation:</strong>\n",
-                      r);
-                if (modp->create_dir_config) {
-                    if (comma) {
-                        ap_rputs(", ", r);
-                    }
-                    ap_rputs("<tt>Create Directory Config</tt>", r);
-                    comma = 1;
-                }
-                if (modp->merge_dir_config) {
-                    if (comma) {
-                        ap_rputs(", ", r);
-                    }
-                    ap_rputs("<tt>Merge Directory Configs</tt>", r);
-                    comma = 1;
-                }
-                if (modp->create_server_config) {
-                    if (comma) {
-                        ap_rputs(", ", r);
-                    }
-                    ap_rputs("<tt>Create Server Config</tt>", r);
-                    comma = 1;
-                }
-                if (modp->merge_server_config) {
-                    if (comma) {
-                        ap_rputs(", ", r);
-                    }
-                    ap_rputs("<tt>Merge Server Configs</tt>", r);
-                    comma = 1;
-                }
-                if (!comma)
-                    ap_rputs("<tt> <em>none</em></tt>", r);
-                comma = 0;
-                ap_rputs("</dt>", r);
-
-                module_request_hook_participate(r, modp);
-
-                cmd = modp->cmds;
-                if (cmd) {
-                    ap_rputs("<dt><strong>Module Directives:</strong></dt>", r);
-                    while (cmd) {
-                        if (cmd->name) {
-                            ap_rprintf(r, "<dd><tt>%s - <i>",
-				    mod_info_html_cmd_string(cmd->name,
-					buf, sizeof(buf), 0));
-                            if (cmd->errmsg) {
-                                ap_rputs(cmd->errmsg, r);
-                            }
-                            ap_rputs("</i></tt></dd>\n", r);
-                        }
-                        else {
-                            break;
-                        }
-                        cmd++;
-                    }
-                    ap_rputs("<dt><strong>Current Configuration:</strong></dt>\n", r);
-                    mod_info_module_cmds(r, modp->cmds, ap_conftree);
-                }
-                else {
-                    ap_rputs("<dt><strong>Module Directives:</strong> <tt>none</tt></dt>", r);
-                }
-                more_info = find_more_info(serv, modp->name);
-                if (more_info) {
-                    ap_rputs("<dt><strong>Additional Information:</strong>\n</dt><dd>",
-                          r);
-                    ap_rputs(more_info, r);
-                    ap_rputs("</dd>", r);
-                }
-                ap_rputs("</dl><hr />\n", r);
-                if (r->args) {
-                    break;
-                }
-            }
-        }
-        if (!modp && r->args && strcasecmp(r->args, "server")) {
-            ap_rputs("<p><b>No such module</b></p>\n", r);
-        }
-    }
-    else {
-        ap_rputs("<dl><dt>Server Module List</dt>", r);
-        for (modp = ap_top_module; modp; modp = modp->next) {
-            ap_rputs("<dd>", r);
-            ap_rputs(modp->name, r);
-            ap_rputs("</dd>", r);
-        }
-        ap_rputs("</dl><hr />", r);
-    }
-    ap_rputs(ap_psignature("",r), r);
-    ap_rputs("</body></html>\n", r);
-    /* Done, turn off timeout, close file and return */
-    return 0;
-}
-
-static const char *add_module_info(cmd_parms *cmd, void *dummy, 
-                                   const char *name, const char *info)
-{
-    server_rec *s = cmd->server;
-    info_svr_conf *conf = (info_svr_conf *) ap_get_module_config(s->module_config,
-                                                              &info_module);
-    info_entry *new = apr_array_push(conf->more_info);
-
-    new->name = name;
-    new->info = info;
-    return NULL;
-}
-
-static const command_rec info_cmds[] =
-{
-    AP_INIT_TAKE2("AddModuleInfo", add_module_info, NULL, RSRC_CONF,
-                  "a module name and additional information on that module"),
-    {NULL}
-};
-
-static void register_hooks(apr_pool_t *p)
-{
-    ap_hook_handler(display_info, NULL, NULL, APR_HOOK_MIDDLE);
-}
-
-module AP_MODULE_DECLARE_DATA info_module =
-{
-    STANDARD20_MODULE_STUFF,
-    NULL,                       /* dir config creater */
-    NULL,                       /* dir merger --- default is to override */
-    create_info_config,         /* server config */
-    merge_info_config,          /* merge server config */
-    info_cmds,                  /* command apr_table_t */
-    register_hooks
-};
diff --git a/modules/generators/mod_info.dsp b/modules/generators/mod_info.dsp
deleted file mode 100644
index bf7a61a..0000000
--- a/modules/generators/mod_info.dsp
+++ /dev/null
@@ -1,128 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mod_info" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mod_info - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "mod_info.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "mod_info.mak" CFG="mod_info - Win32 Release"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "mod_info - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mod_info - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "mod_info - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /O2 /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Release\mod_info" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /map /machine:I386 /out:"Release/mod_info.so" /base:@..\..\os\win32\BaseAddr.ref,mod_info
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /map /machine:I386 /out:"Release/mod_info.so" /base:@..\..\os\win32\BaseAddr.ref,mod_info
-
-!ELSEIF  "$(CFG)" == "mod_info - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Debug\mod_info" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /map /debug /machine:I386 /out:"Debug/mod_info.so" /base:@..\..\os\win32\BaseAddr.ref,mod_info
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /map /debug /machine:I386 /out:"Debug/mod_info.so" /base:@..\..\os\win32\BaseAddr.ref,mod_info
-
-!ENDIF 
-
-# Begin Target
-
-# Name "mod_info - Win32 Release"
-# Name "mod_info - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\mod_info.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mod_info.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\build\win32\win32ver.awk
-
-!IF  "$(CFG)" == "mod_info - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_info.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ../../build/win32/win32ver.awk mod_info  "info_module for Apache" ../../include/ap_release.h > .\mod_info.rc
-
-# End Custom Build
-
-!ELSEIF  "$(CFG)" == "mod_info - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_info.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ../../build/win32/win32ver.awk mod_info  "info_module for Apache" ../../include/ap_release.h > .\mod_info.rc
-
-# End Custom Build
-
-!ENDIF 
-
-# End Source File
-# End Target
-# End Project
diff --git a/modules/generators/mod_info.exp b/modules/generators/mod_info.exp
deleted file mode 100644
index c304fa7..0000000
--- a/modules/generators/mod_info.exp
+++ /dev/null
@@ -1 +0,0 @@
-info_module
diff --git a/modules/generators/mod_status.c b/modules/generators/mod_status.c
deleted file mode 100644
index d859a74..0000000
--- a/modules/generators/mod_status.c
+++ /dev/null
@@ -1,822 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-/* Status Module.  Display lots of internal data about how Apache is
- * performing and the state of all children processes.
- *
- * To enable this, add the following lines into any config file:
- *
- * <Location /server-status>
- * SetHandler server-status
- * </Location>
- *
- * You may want to protect this location by password or domain so no one
- * else can look at it.  Then you can access the statistics with a URL like:
- *
- * http://your_server_name/server-status
- *
- * /server-status - Returns page using tables
- * /server-status?notable - Returns page for browsers without table support
- * /server-status?refresh - Returns page with 1 second refresh
- * /server-status?refresh=6 - Returns page with refresh every 6 seconds
- * /server-status?auto - Returns page with data for automatic parsing
- *
- * Mark Cox, mark@ukweb.com, November 1995
- *
- * 12.11.95 Initial version for www.telescope.org
- * 13.3.96  Updated to remove rprintf's [Mark]
- * 18.3.96  Added CPU usage, process information, and tidied [Ben Laurie]
- * 18.3.96  Make extra Scoreboard variables #definable
- * 25.3.96  Make short report have full precision [Ben Laurie suggested]
- * 25.3.96  Show uptime better [Mark/Ben Laurie]
- * 29.3.96  Better HTML and explanation [Mark/Rob Hartill suggested]
- * 09.4.96  Added message for non-STATUS compiled version
- * 18.4.96  Added per child and per slot counters [Jim Jagielski]
- * 01.5.96  Table format, cleanup, even more spiffy data [Chuck Murcko/Jim J.]
- * 18.5.96  Adapted to use new rprintf() routine, incidentally fixing a missing
- *          piece in short reports [Ben Laurie]
- * 21.5.96  Additional Status codes (DNS and LOGGING only enabled if
- *          extended STATUS is enabled) [George Burgyan/Jim J.]
- * 10.8.98  Allow for extended status info at runtime (no more STATUS)
- *          [Jim J.]
- */
-
-#define CORE_PRIVATE
-#include "httpd.h"
-#include "http_config.h"
-#include "http_core.h"
-#include "http_protocol.h"
-#include "http_main.h"
-#include "ap_mpm.h"
-#include "util_script.h"
-#include <time.h>
-#include "scoreboard.h"
-#include "http_log.h"
-#if APR_HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-#ifdef NEXT
-#if (NX_CURRENT_COMPILER_RELEASE == 410)
-#ifdef m68k
-#define HZ 64
-#else
-#define HZ 100
-#endif
-#else
-#include <machine/param.h>
-#endif
-#endif /* NEXT */
-
-#define STATUS_MAXLINE 64
-
-#define KBYTE 1024
-#define MBYTE 1048576L
-#define GBYTE 1073741824L
-
-#ifndef DEFAULT_TIME_FORMAT
-#define DEFAULT_TIME_FORMAT "%A, %d-%b-%Y %H:%M:%S %Z"
-#endif
-
-#define STATUS_MAGIC_TYPE "application/x-httpd-status"
-
-module AP_MODULE_DECLARE_DATA status_module;
-
-int server_limit, thread_limit;
-
-/*
- * command-related code. This is here to prevent use of ExtendedStatus
- * without status_module included.
- */
-static const char *set_extended_status(cmd_parms *cmd, void *dummy, int arg)
-{
-    const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
-    if (err != NULL) {
-        return err;
-    }
-    ap_extended_status = arg;
-    return NULL;
-}
-
-static const command_rec status_module_cmds[] =
-{
-    AP_INIT_FLAG("ExtendedStatus", set_extended_status, NULL, RSRC_CONF,
-      "\"On\" to enable extended status information, \"Off\" to disable"),
-    {NULL}
-};
-
-/* Format the number of bytes nicely */
-static void format_byte_out(request_rec *r, apr_off_t bytes)
-{
-    if (bytes < (5 * KBYTE))
-        ap_rprintf(r, "%d B", (int) bytes);
-    else if (bytes < (MBYTE / 2))
-        ap_rprintf(r, "%.1f kB", (float) bytes / KBYTE);
-    else if (bytes < (GBYTE / 2))
-        ap_rprintf(r, "%.1f MB", (float) bytes / MBYTE);
-    else
-        ap_rprintf(r, "%.1f GB", (float) bytes / GBYTE);
-}
-
-static void format_kbyte_out(request_rec *r, apr_off_t kbytes)
-{
-    if (kbytes < KBYTE)
-        ap_rprintf(r, "%d kB", (int) kbytes);
-    else if (kbytes < MBYTE)
-        ap_rprintf(r, "%.1f MB", (float) kbytes / KBYTE);
-    else
-        ap_rprintf(r, "%.1f GB", (float) kbytes / MBYTE);
-}
-
-static void show_time(request_rec *r, apr_interval_time_t tsecs)
-{
-    int days, hrs, mins, secs;
-
-    secs = (int)(tsecs % 60);
-    tsecs /= 60;
-    mins = (int)(tsecs % 60);
-    tsecs /= 60;
-    hrs = (int)(tsecs % 24);
-    days = (int)(tsecs / 24);
-
-    if (days)
-        ap_rprintf(r, " %d day%s", days, days == 1 ? "" : "s");
-
-    if (hrs)
-        ap_rprintf(r, " %d hour%s", hrs, hrs == 1 ? "" : "s");
-
-    if (mins)
-        ap_rprintf(r, " %d minute%s", mins, mins == 1 ? "" : "s");
-
-    if (secs)
-        ap_rprintf(r, " %d second%s", secs, secs == 1 ? "" : "s");
-}
-
-/* Main handler for x-httpd-status requests */
-
-/* ID values for command table */
-
-#define STAT_OPT_END     -1
-#define STAT_OPT_REFRESH  0
-#define STAT_OPT_NOTABLE  1
-#define STAT_OPT_AUTO     2
-
-struct stat_opt {
-    int id;
-    const char *form_data_str;
-    const char *hdr_out_str;
-};
-
-static const struct stat_opt status_options[] = /* see #defines above */
-{
-    {STAT_OPT_REFRESH, "refresh", "Refresh"},
-    {STAT_OPT_NOTABLE, "notable", NULL},
-    {STAT_OPT_AUTO, "auto", NULL},
-    {STAT_OPT_END, NULL, NULL}
-};
-
-static char status_flags[SERVER_NUM_STATUS];
-
-static int status_handler(request_rec *r)
-{
-    const char *loc;
-    apr_time_t nowtime;
-    apr_interval_time_t up_time;
-    int j, i, res;
-    int ready = 0;
-    int busy = 0;
-    unsigned long count = 0;
-    unsigned long lres, my_lres, conn_lres;
-    apr_off_t bytes, my_bytes, conn_bytes;
-    apr_off_t bcount = 0, kbcount = 0;
-    long req_time;
-#ifdef HAVE_TIMES
-#ifdef _SC_CLK_TCK
-    float tick = sysconf(_SC_CLK_TCK);
-#else
-    float tick = HZ;
-#endif
-#endif
-    int short_report = 0;
-    int no_table_report = 0;
-    worker_score ws_record;
-    process_score ps_record;
-    char *stat_buffer;
-    pid_t *pid_buffer;
-    clock_t tu, ts, tcu, tcs;
-
-    if (strcmp(r->handler, STATUS_MAGIC_TYPE) && 
-        strcmp(r->handler, "server-status")) {
-        return DECLINED;
-    }
-
-    pid_buffer = apr_palloc(r->pool, server_limit * sizeof(pid_t));
-    stat_buffer = apr_palloc(r->pool, server_limit * thread_limit * sizeof(char));
-
-    nowtime = apr_time_now();
-    tu = ts = tcu = tcs = 0;
-
-    if (!ap_exists_scoreboard_image()) {
-        ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                      "Server status unavailable in inetd mode");
-        return HTTP_INTERNAL_SERVER_ERROR;
-    }
-
-    r->allowed = (AP_METHOD_BIT << M_GET);
-    if (r->method_number != M_GET)
-        return DECLINED;
-
-    r->content_type = "text/html";
-
-    /*
-     * Simple table-driven form data set parser that lets you alter the header
-     */
-
-    if (r->args) {
-        i = 0;
-        while (status_options[i].id != STAT_OPT_END) {
-            if ((loc = ap_strstr_c(r->args,
-                                   status_options[i].form_data_str)) != NULL) {
-                switch (status_options[i].id) {
-                case STAT_OPT_REFRESH:
-                    if (*(loc + strlen(status_options[i].form_data_str)) == '='
-                        && atol(loc + strlen(status_options[i].form_data_str)
-                                + 1) > 0)
-                        apr_table_set(r->headers_out,
-                                      status_options[i].hdr_out_str,
-                                      loc + 
-                                      strlen(status_options[i].hdr_out_str) +
-                                      1);
-                    else
-                        apr_table_set(r->headers_out,
-                                      status_options[i].hdr_out_str, "1");
-                    break;
-                case STAT_OPT_NOTABLE:
-                    no_table_report = 1;
-                    break;
-                case STAT_OPT_AUTO:
-                    r->content_type = "text/plain";
-                    short_report = 1;
-                    break;
-                }
-            }
-
-            i++;
-        }
-    }
-
-    if (r->header_only)
-        return 0;
-
-    for (i = 0; i < server_limit; ++i) {
-        for (j = 0; j < thread_limit; ++j) {
-            int indx = (i * thread_limit) + j;
-
-            ws_record = ap_scoreboard_image->servers[i][j];
-            ps_record = ap_scoreboard_image->parent[i];
-            res = ws_record.status;
-            stat_buffer[indx] = status_flags[res];
-
-            if (!ps_record.quiescing
-                && ps_record.generation == ap_my_generation
-                && ps_record.pid) {
-                if (res == SERVER_READY)
-                    ready++;
-                else if (res != SERVER_DEAD && res != SERVER_IDLE_KILL)
-                    busy++;
-            }
-
-            /* XXX what about the counters for quiescing/seg faulted
-             * processes?  should they be counted or not?  GLA
-             */
-            if (ap_extended_status) {
-                lres = ws_record.access_count;
-                bytes = ws_record.bytes_served;
-
-                if (lres != 0 || (res != SERVER_READY && res != SERVER_DEAD)) {
-#ifdef HAVE_TIMES
-                    tu += ws_record.times.tms_utime;
-                    ts += ws_record.times.tms_stime;
-                    tcu += ws_record.times.tms_cutime;
-                    tcs += ws_record.times.tms_cstime;
-#endif /* HAVE_TIMES */
-
-                    count += lres;
-                    bcount += bytes;
-
-                    if (bcount >= KBYTE) {
-                        kbcount += (bcount >> 10);
-                        bcount = bcount & 0x3ff;
-                    }
-                }
-            }
-        }
-
-        pid_buffer[i] = ps_record.pid;
-    }
-
-    /* up_time in seconds */
-    up_time = (apr_uint32_t) ((nowtime -
-                               ap_scoreboard_image->global->restart_time)
-                              / APR_USEC_PER_SEC);
-
-    if (!short_report) {
-        ap_rputs(DOCTYPE_HTML_3_2
-                 "<html><head>\n<title>Apache Status</title>\n</head><body>\n",
-                 r);
-        ap_rputs("<h1>Apache Server Status for ", r);
-        ap_rvputs(r, ap_get_server_name(r), "</h1>\n\n", NULL);
-        ap_rvputs(r, "<dl><dt>Server Version: ",
-                  ap_get_server_version(), "</dt>\n", NULL);
-        ap_rvputs(r, "<dt>Server Built: ",
-                  ap_get_server_built(), "\n</dt></dl><hr /><dl>\n", NULL);
-        ap_rvputs(r, "<dt>Current Time: ",
-                  ap_ht_time(r->pool, nowtime, DEFAULT_TIME_FORMAT, 0),
-                             "</dt>\n", NULL);
-        ap_rvputs(r, "<dt>Restart Time: ",
-                  ap_ht_time(r->pool,
-                             ap_scoreboard_image->global->restart_time,
-                             DEFAULT_TIME_FORMAT, 0),
-                  "</dt>\n", NULL);
-        ap_rprintf(r, "<dt>Parent Server Generation: %d</dt>\n",
-                   (int)ap_my_generation);
-        ap_rputs("<dt>Server uptime: ", r);
-        show_time(r, up_time);
-        ap_rputs("</dt>\n", r);
-    }
-
-    if (ap_extended_status) {
-        if (short_report) {
-            ap_rprintf(r, "Total Accesses: %lu\nTotal kBytes: %"
-                       APR_OFF_T_FMT "\n",
-                       count, kbcount);
-
-#ifdef HAVE_TIMES
-            /* Allow for OS/2 not having CPU stats */
-            if (ts || tu || tcu || tcs)
-                ap_rprintf(r, "CPULoad: %g\n",
-                           (tu + ts + tcu + tcs) / tick / up_time * 100.);
-#endif
-
-            ap_rprintf(r, "Uptime: %ld\n", (long) (up_time));
-            if (up_time > 0)
-                ap_rprintf(r, "ReqPerSec: %g\n",
-                           (float) count / (float) up_time);
-
-            if (up_time > 0)
-                ap_rprintf(r, "BytesPerSec: %g\n",
-                           KBYTE * (float) kbcount / (float) up_time);
-
-            if (count > 0)
-                ap_rprintf(r, "BytesPerReq: %g\n",
-                           KBYTE * (float) kbcount / (float) count);
-        }
-        else { /* !short_report */
-            ap_rprintf(r, "<dt>Total accesses: %lu - Total Traffic: ", count);
-            format_kbyte_out(r, kbcount);
-            ap_rputs("</dt>\n", r);
-
-#ifdef HAVE_TIMES
-            /* Allow for OS/2 not having CPU stats */
-            ap_rprintf(r, "<dt>CPU Usage: u%g s%g cu%g cs%g",
-                       tu / tick, ts / tick, tcu / tick, tcs / tick);
-
-            if (ts || tu || tcu || tcs)
-                ap_rprintf(r, " - %.3g%% CPU load</dt>\n",
-                           (tu + ts + tcu + tcs) / tick / up_time * 100.);
-#endif
-
-            if (up_time > 0)
-                ap_rprintf(r, "<dt>%.3g requests/sec - ",
-                           (float) count / (float) up_time);
-
-            if (up_time > 0) {
-                format_byte_out(r, (unsigned long)(KBYTE * (float) kbcount
-                                                   / (float) up_time));
-                ap_rputs("/second - ", r);
-            }
-
-            if (count > 0) {
-                format_byte_out(r, (unsigned long)(KBYTE * (float) kbcount
-                                                   / (float) count));
-                ap_rputs("/request", r);
-            }
-
-            ap_rputs("</dt>\n", r);
-        } /* short_report */
-    } /* ap_extended_status */
-
-    if (!short_report)
-        ap_rprintf(r, "<dt>%d requests currently being processed, "
-                      "%d idle workers</dt>\n", busy, ready);
-    else
-        ap_rprintf(r, "BusyWorkers: %d\nIdleWorkers: %d\n", busy, ready);
-
-    /* send the scoreboard 'table' out */
-    if (!short_report)
-        ap_rputs("</dl><pre>", r);
-    else
-        ap_rputs("Scoreboard: ", r);
-
-    for (i = 0; i < server_limit; ++i) {
-        for (j = 0; j < thread_limit; ++j) {
-            int indx = (i * thread_limit) + j;
-            ap_rputc(stat_buffer[indx], r);
-            if ((indx % STATUS_MAXLINE == (STATUS_MAXLINE - 1))
-                && !short_report)
-                ap_rputs("\n", r);
-        }
-    }
-
-    if (short_report)
-        ap_rputs("\n", r);
-    else {
-        ap_rputs("</pre>\n", r);
-        ap_rputs("<p>Scoreboard Key:<br />\n", r);
-        ap_rputs("\"<b><code>_</code></b>\" Waiting for Connection, \n", r);
-        ap_rputs("\"<b><code>S</code></b>\" Starting up, \n", r);
-        ap_rputs("\"<b><code>R</code></b>\" Reading Request,<br />\n", r);
-        ap_rputs("\"<b><code>W</code></b>\" Sending Reply, \n", r);
-        ap_rputs("\"<b><code>K</code></b>\" Keepalive (read), \n", r);
-        ap_rputs("\"<b><code>D</code></b>\" DNS Lookup,<br />\n", r);
-        ap_rputs("\"<b><code>C</code></b>\" Closing connection, \n", r);
-        ap_rputs("\"<b><code>L</code></b>\" Logging, \n", r);
-        ap_rputs("\"<b><code>G</code></b>\" Gracefully finishing,<br /> \n", r);
-        ap_rputs("\"<b><code>I</code></b>\" Idle cleanup of worker, \n", r);
-        ap_rputs("\"<b><code>.</code></b>\" Open slot with no current process</p>\n", r);
-        ap_rputs("<p />\n", r);
-        if (!ap_extended_status) {
-            int j;
-            int k = 0;
-            ap_rputs("PID Key: <br />\n", r);
-            ap_rputs("<pre>\n", r);
-            for (i = 0; i < server_limit; ++i) {
-                for (j = 0; j < thread_limit; ++j) {
-                    int indx = (i * thread_limit) + j;
-
-                    if (stat_buffer[indx] != '.') {
-                        ap_rprintf(r, "   %" APR_PID_T_FMT
-                                   " in state: %c ", pid_buffer[i],
-                                   stat_buffer[indx]);
-
-                        if (++k >= 3) {
-                            ap_rputs("\n", r);
-                            k = 0;
-                        } else
-                            ap_rputs(",", r);
-                    }
-                }
-            }
-
-            ap_rputs("\n", r);
-            ap_rputs("</pre>\n", r);
-        }
-    }
-
-    if (ap_extended_status && !short_report) {
-        if (no_table_report)
-            ap_rputs("<hr /><h2>Server Details</h2>\n\n", r);
-        else
-            ap_rputs("\n\n<table border=\"0\"><tr>"
-                     "<th>Srv</th><th>PID</th><th>Acc</th>"
-                     "<th>M</th>"
-#ifdef HAVE_TIMES
-                     "<th>CPU\n</th>"
-#endif
-                     "<th>SS</th><th>Req</th>"
-                     "<th>Conn</th><th>Child</th><th>Slot</th>"
-                     "<th>Client</th><th>VHost</th>"
-                     "<th>Request</th></tr>\n\n", r);
-
-        for (i = 0; i < server_limit; ++i) {
-            for (j = 0; j < thread_limit; ++j) {
-                ws_record = ap_scoreboard_image->servers[i][j];
-
-                if (ws_record.access_count == 0 &&
-                    (ws_record.status == SERVER_READY ||
-                     ws_record.status == SERVER_DEAD)) {
-                    continue;
-                }
-
-                ps_record = ap_scoreboard_image->parent[i];
-
-                if (ws_record.start_time == 0L)
-                    req_time = 0L;
-                else
-                    req_time = (long)
-                        ((ws_record.stop_time - ws_record.start_time) / 1000);
-                if (req_time < 0L)
-                    req_time = 0L;
-
-                lres = ws_record.access_count;
-                my_lres = ws_record.my_access_count;
-                conn_lres = ws_record.conn_count;
-                bytes = ws_record.bytes_served;
-                my_bytes = ws_record.my_bytes_served;
-                conn_bytes = ws_record.conn_bytes;
-
-                if (no_table_report) {
-                    if (ws_record.status == SERVER_DEAD)
-                        ap_rprintf(r,
-                                   "<b>Server %d-%d</b> (-): %d|%lu|%lu [",
-                                   i, (int)ps_record.generation,
-                                   (int)conn_lres, my_lres, lres);
-                    else
-                        ap_rprintf(r,
-                                   "<b>Server %d-%d</b> (%"
-                                   APR_PID_T_FMT "): %d|%lu|%lu [",
-                                   i, (int) ps_record.generation,
-                                   ps_record.pid,
-                                   (int)conn_lres, my_lres, lres);
-                    
-                    switch (ws_record.status) {
-                    case SERVER_READY:
-                        ap_rputs("Ready", r);
-                        break;
-                    case SERVER_STARTING:
-                        ap_rputs("Starting", r);
-                        break;
-                    case SERVER_BUSY_READ:
-                        ap_rputs("<b>Read</b>", r);
-                        break;
-                    case SERVER_BUSY_WRITE:
-                        ap_rputs("<b>Write</b>", r);
-                        break;
-                    case SERVER_BUSY_KEEPALIVE:
-                        ap_rputs("<b>Keepalive</b>", r);
-                        break;
-                    case SERVER_BUSY_LOG:
-                        ap_rputs("<b>Logging</b>", r);
-                        break;
-                    case SERVER_BUSY_DNS:
-                        ap_rputs("<b>DNS lookup</b>", r);
-                        break;
-                    case SERVER_CLOSING:
-                        ap_rputs("<b>Closing</b>", r);
-                        break;
-                    case SERVER_DEAD:
-                        ap_rputs("Dead", r);
-                        break;
-                    case SERVER_GRACEFUL:
-                        ap_rputs("Graceful", r);
-                        break;
-                    case SERVER_IDLE_KILL:
-                        ap_rputs("Dying", r);
-                        break;
-                    default:
-                        ap_rputs("?STATE?", r);
-                        break;
-                    }
-                    
-                    ap_rprintf(r, "] "
-#ifdef HAVE_TIMES
-                               "u%g s%g cu%g cs%g"
-#endif
-                               "\n %ld %ld (",
-#ifdef HAVE_TIMES
-                               ws_record.times.tms_utime / tick,
-                               ws_record.times.tms_stime / tick,
-                               ws_record.times.tms_cutime / tick,
-                               ws_record.times.tms_cstime / tick,
-#endif
-                               (long)((nowtime - ws_record.last_used) /
-                                      APR_USEC_PER_SEC),
-                               (long) req_time);
-
-                    format_byte_out(r, conn_bytes);
-                    ap_rputs("|", r);
-                    format_byte_out(r, my_bytes);
-                    ap_rputs("|", r);
-                    format_byte_out(r, bytes);
-                    ap_rputs(")\n", r);
-                    ap_rprintf(r,
-                               " <i>%s {%s}</i> <b>[%s]</b><br />\n\n",
-                               ap_escape_html(r->pool,
-                                              ws_record.client),
-                               ap_escape_html(r->pool,
-                                              ws_record.request),
-                               ap_escape_html(r->pool,
-                                              ws_record.vhost));
-                }
-                else { /* !no_table_report */
-                    if (ws_record.status == SERVER_DEAD)
-                        ap_rprintf(r,
-                                   "<tr><td><b>%d-%d</b></td><td>-</td><td>%d/%lu/%lu",
-                                   i, (int)ps_record.generation,
-                                   (int)conn_lres, my_lres, lres);
-                    else
-                        ap_rprintf(r,
-                                   "<tr><td><b>%d-%d</b></td><td>%"
-                                   APR_PID_T_FMT
-                                   "</td><td>%d/%lu/%lu",
-                                   i, (int)ps_record.generation,
-                                   ps_record.pid, (int)conn_lres,
-                                   my_lres, lres);
-                    
-                    switch (ws_record.status) {
-                    case SERVER_READY:
-                        ap_rputs("</td><td>_", r);
-                        break;
-                    case SERVER_STARTING:
-                        ap_rputs("</td><td><b>S</b>", r);
-                        break;
-                    case SERVER_BUSY_READ:
-                        ap_rputs("</td><td><b>R</b>", r);
-                        break;
-                    case SERVER_BUSY_WRITE:
-                        ap_rputs("</td><td><b>W</b>", r);
-                        break;
-                    case SERVER_BUSY_KEEPALIVE:
-                        ap_rputs("</td><td><b>K</b>", r);
-                        break;
-                    case SERVER_BUSY_LOG:
-                        ap_rputs("</td><td><b>L</b>", r);
-                        break;
-                    case SERVER_BUSY_DNS:
-                        ap_rputs("</td><td><b>D</b>", r);
-                        break;
-                    case SERVER_CLOSING:
-                        ap_rputs("</td><td><b>C</b>", r);
-                        break;
-                    case SERVER_DEAD:
-                        ap_rputs("</td><td>.", r);
-                        break;
-                    case SERVER_GRACEFUL:
-                        ap_rputs("</td><td>G", r);
-                        break;
-                    case SERVER_IDLE_KILL:
-                        ap_rputs("</td><td>I", r);
-                        break;
-                    default:
-                        ap_rputs("</td><td>?", r);
-                        break;
-                    }
-                    
-                    ap_rprintf(r,
-                               "\n</td>"
-#ifdef HAVE_TIMES
-                               "<td>%.2f</td>"
-#endif
-                               "<td>%ld</td><td>%ld",
-#ifdef HAVE_TIMES
-                               (ws_record.times.tms_utime +
-                                ws_record.times.tms_stime +
-                                ws_record.times.tms_cutime +
-                                ws_record.times.tms_cstime) / tick,
-#endif
-                               (long)((nowtime - ws_record.last_used) /
-                                      APR_USEC_PER_SEC),
-                               (long)req_time);
-                    
-                    ap_rprintf(r, "</td><td>%-1.1f</td><td>%-2.2f</td><td>%-2.2f\n",
-                               (float)conn_bytes / KBYTE, (float) my_bytes / MBYTE,
-                               (float)bytes / MBYTE);
-                    
-                    if (ws_record.status == SERVER_BUSY_READ)
-                        ap_rprintf(r,
-                                   "</td><td>?</td><td nowrap>?</td><td nowrap>..reading.. </td></tr>\n\n");
-                    else
-                        ap_rprintf(r,
-                                   "</td><td>%s</td><td nowrap>%s</td><td nowrap>%s</td></tr>\n\n",
-                                   ap_escape_html(r->pool,
-                                                  ws_record.client),
-                                   ap_escape_html(r->pool,
-                                                  ws_record.vhost),
-                                   ap_escape_html(r->pool,
-                                                  ws_record.request));
-                } /* no_table_report */
-            } /* for (j...) */
-        } /* for (i...) */
-
-        if (!no_table_report) {
-            ap_rputs("</table>\n \
-<hr /> \
-<table>\n \
-<tr><th>Srv</th><td>Child Server number - generation</td></tr>\n \
-<tr><th>PID</th><td>OS process ID</td></tr>\n \
-<tr><th>Acc</th><td>Number of accesses this connection / this child / this slot</td></tr>\n \
-<tr><th>M</th><td>Mode of operation</td></tr>\n"
-
-#ifdef HAVE_TIMES
-"<tr><th>CPU</th><td>CPU usage, number of seconds</td></tr>\n"
-#endif
-
-"<tr><th>SS</th><td>Seconds since beginning of most recent request</td></tr>\n \
-<tr><th>Req</th><td>Milliseconds required to process most recent request</td></tr>\n \
-<tr><th>Conn</th><td>Kilobytes transferred this connection</td></tr>\n \
-<tr><th>Child</th><td>Megabytes transferred this child</td></tr>\n \
-<tr><th>Slot</th><td>Total megabytes transferred this slot</td></tr>\n \
-</table>\n", r);
-        }
-    } /* if (ap_extended_status && !short_report) */
-    else {
-
-        if (!short_report) {
-            ap_rputs("<hr />To obtain a full report with current status "
-                     "information you need to use the "
-                     "<code>ExtendedStatus On</code> directive.\n", r);
-        }
-    }
-
-    if (!short_report) {
-        ap_rputs(ap_psignature("<hr />\n",r), r);
-        ap_rputs("</body></html>\n", r);
-    }
-
-    return 0;
-}
-
-
-static int status_init(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp,
-                       server_rec *s)
-{
-    status_flags[SERVER_DEAD] = '.';  /* We don't want to assume these are in */
-    status_flags[SERVER_READY] = '_'; /* any particular order in scoreboard.h */
-    status_flags[SERVER_STARTING] = 'S';
-    status_flags[SERVER_BUSY_READ] = 'R';
-    status_flags[SERVER_BUSY_WRITE] = 'W';
-    status_flags[SERVER_BUSY_KEEPALIVE] = 'K';
-    status_flags[SERVER_BUSY_LOG] = 'L';
-    status_flags[SERVER_BUSY_DNS] = 'D';
-    status_flags[SERVER_CLOSING] = 'C';
-    status_flags[SERVER_GRACEFUL] = 'G';
-    status_flags[SERVER_IDLE_KILL] = 'I';
-    ap_mpm_query(AP_MPMQ_HARD_LIMIT_THREADS, &thread_limit);
-    ap_mpm_query(AP_MPMQ_HARD_LIMIT_DAEMONS, &server_limit);
-    return OK;
-}
-
-static void register_hooks(apr_pool_t *p)
-{
-    ap_hook_handler(status_handler, NULL, NULL, APR_HOOK_MIDDLE);
-    ap_hook_post_config(status_init, NULL, NULL, APR_HOOK_MIDDLE);
-}
-
-module AP_MODULE_DECLARE_DATA status_module =
-{
-    STANDARD20_MODULE_STUFF,
-    NULL,                       /* dir config creater */
-    NULL,                       /* dir merger --- default is to override */
-    NULL,                       /* server config */
-    NULL,                       /* merge server config */
-    status_module_cmds,         /* command table */
-    register_hooks              /* register_hooks */
-};
-
diff --git a/modules/generators/mod_status.dsp b/modules/generators/mod_status.dsp
deleted file mode 100644
index 8c9ded5..0000000
--- a/modules/generators/mod_status.dsp
+++ /dev/null
@@ -1,128 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mod_status" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mod_status - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "mod_status.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "mod_status.mak" CFG="mod_status - Win32 Release"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "mod_status - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mod_status - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "mod_status - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /O2 /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Release\mod_status" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /map /machine:I386 /out:"Release/mod_status.so" /base:@..\..\os\win32\BaseAddr.ref,mod_status
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /map /machine:I386 /out:"Release/mod_status.so" /base:@..\..\os\win32\BaseAddr.ref,mod_status
-
-!ELSEIF  "$(CFG)" == "mod_status - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Debug\mod_status" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /map /debug /machine:I386 /out:"Debug/mod_status.so" /base:@..\..\os\win32\BaseAddr.ref,mod_status
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /map /debug /machine:I386 /out:"Debug/mod_status.so" /base:@..\..\os\win32\BaseAddr.ref,mod_status
-
-!ENDIF 
-
-# Begin Target
-
-# Name "mod_status - Win32 Release"
-# Name "mod_status - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\mod_status.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mod_status.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\build\win32\win32ver.awk
-
-!IF  "$(CFG)" == "mod_status - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_status.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ../../build/win32/win32ver.awk mod_status  "status_module for Apache" ../../include/ap_release.h > .\mod_status.rc
-
-# End Custom Build
-
-!ELSEIF  "$(CFG)" == "mod_status - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_status.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ../../build/win32/win32ver.awk mod_status  "status_module for Apache" ../../include/ap_release.h > .\mod_status.rc
-
-# End Custom Build
-
-!ENDIF 
-
-# End Source File
-# End Target
-# End Project
diff --git a/modules/generators/mod_status.exp b/modules/generators/mod_status.exp
deleted file mode 100644
index 5438093..0000000
--- a/modules/generators/mod_status.exp
+++ /dev/null
@@ -1 +0,0 @@
-status_module
diff --git a/modules/generators/mod_suexec.c b/modules/generators/mod_suexec.c
deleted file mode 100644
index 14d87ae..0000000
--- a/modules/generators/mod_suexec.c
+++ /dev/null
@@ -1,179 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-#define CORE_PRIVATE
-#include "httpd.h"
-#include "http_config.h"
-#include "http_core.h"
-#include "http_log.h"
-#include "http_request.h"
-#include "apr_strings.h"
-#include "unixd.h"
-#include "mpm_common.h"
-#include "mod_suexec.h"
-
-module AP_MODULE_DECLARE_DATA suexec_module;
-
-/*
- * Create a configuration specific to this module for a server or directory
- * location, and fill it with the default settings.
- */
-static void *mkconfig(apr_pool_t *p)
-{
-    suexec_config_t *cfg = apr_palloc(p, sizeof(suexec_config_t));
-
-    cfg->active = 0;
-    return cfg;
-}
-
-/*
- * Respond to a callback to create configuration record for a server or
- * vhost environment.
- */
-static void *create_mconfig_for_server(apr_pool_t *p, server_rec *s)
-{
-    return mkconfig(p);
-}
-
-/*
- * Respond to a callback to create a config record for a specific directory.
- */
-static void *create_mconfig_for_directory(apr_pool_t *p, char *dir)
-{
-    return mkconfig(p);
-}
-
-static const char *set_suexec_ugid(cmd_parms *cmd, void *mconfig,
-                                   const char *uid, const char *gid)
-{
-    suexec_config_t *cfg = (suexec_config_t *) mconfig;
-    const char *err = ap_check_cmd_context(cmd, NOT_IN_DIR_LOC_FILE|NOT_IN_LIMIT);
-
-    if (err != NULL) {
-        return err;
-    }
-    if (unixd_config.suexec_enabled) {
-        cfg->ugid.uid = ap_uname2id(uid);
-        cfg->ugid.gid = ap_gname2id(gid);
-        cfg->active = 1;
-    }
-    else {
-        fprintf(stderr,
-                "Warning: SuexecUserGroup directive requires SUEXEC wrapper.\n");
-    }
-    return NULL;
-}
-
-static ap_unix_identity_t *get_suexec_id_doer(const request_rec *r)
-{
-    suexec_config_t *cfg =
-    (suexec_config_t *) ap_get_module_config(r->per_dir_config, &suexec_module);
-
-    return cfg->active ? &cfg->ugid : NULL;
-}
-
-#define SUEXEC_POST_CONFIG_USERDATA "suexec_post_config_userdata"
-static int suexec_post_config(apr_pool_t *p, apr_pool_t *plog,
-                              apr_pool_t *ptemp, server_rec *s)
-{
-    void *reported;
-
-    apr_pool_userdata_get(&reported, SUEXEC_POST_CONFIG_USERDATA,
-                          s->process->pool);
-
-    if ((reported == NULL) && unixd_config.suexec_enabled) {
-        ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_NOTICE, 0, s,
-                     "suEXEC mechanism enabled (wrapper: %s)", SUEXEC_BIN);
-
-        apr_pool_userdata_setn((void *)1, SUEXEC_POST_CONFIG_USERDATA,
-                               apr_pool_cleanup_null, s->process->pool);
-    }
-
-    return OK;
-}
-#undef SUEXEC_POST_CONFIG_USERDATA
-
-/*
- * Define the directives specific to this module.  This structure is referenced
- * later by the 'module' structure.
- */
-static const command_rec suexec_cmds[] =
-{
-    /* XXX - Another important reason not to allow this in .htaccess is that
-     * the ap_[ug]name2id() is not thread-safe */
-    AP_INIT_TAKE2("SuexecUserGroup", set_suexec_ugid, NULL, RSRC_CONF,
-      "User and group for spawned processes"),
-    { NULL }
-};
-
-static void suexec_hooks(apr_pool_t *p)
-{
-    ap_hook_get_suexec_identity(get_suexec_id_doer,NULL,NULL,APR_HOOK_MIDDLE);
-    ap_hook_post_config(suexec_post_config,NULL,NULL,APR_HOOK_MIDDLE);
-}
-
-module AP_MODULE_DECLARE_DATA suexec_module =
-{
-    STANDARD20_MODULE_STUFF,
-    create_mconfig_for_directory,   /* create per-dir config */
-    NULL,                       /* merge per-dir config */
-    create_mconfig_for_server,  /* server config */
-    NULL,                       /* merge server config */
-    suexec_cmds,                /* command table */
-    suexec_hooks		/* register hooks */
-};
diff --git a/modules/generators/mod_suexec.h b/modules/generators/mod_suexec.h
deleted file mode 100644
index 9024c27..0000000
--- a/modules/generators/mod_suexec.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-#include "unixd.h"
-
-typedef struct {
-    ap_unix_identity_t ugid;
-    int active;
-} suexec_config_t;
-
diff --git a/modules/http/.cvsignore b/modules/http/.cvsignore
deleted file mode 100644
index f877eb5..0000000
--- a/modules/http/.cvsignore
+++ /dev/null
@@ -1,15 +0,0 @@
-.deps
-.libs
-*.la
-modules.mk
-Makefile
-*.lo
-*.slo
-*.so
-Debug
-Release
-*.plg
-*.aps
-*.dep
-*.mak
-*.rc
diff --git a/modules/http/.indent.pro b/modules/http/.indent.pro
deleted file mode 100644
index a9fbe9f..0000000
--- a/modules/http/.indent.pro
+++ /dev/null
@@ -1,54 +0,0 @@
--i4 -npsl -di0 -br -nce -d0 -cli0 -npcs -nfc1
--TBUFF
--TFILE
--TTRANS
--TUINT4
--T_trans
--Tallow_options_t
--Tapache_sfio
--Tarray_header
--Tbool_int
--Tbuf_area
--Tbuff_struct
--Tbuffy
--Tcmd_how
--Tcmd_parms
--Tcommand_rec
--Tcommand_struct
--Tconn_rec
--Tcore_dir_config
--Tcore_server_config
--Tdir_maker_func
--Tevent
--Tglobals_s
--Thandler_func
--Thandler_rec
--Tjoblist_s
--Tlisten_rec
--Tmerger_func
--Tmode_t
--Tmodule
--Tmodule_struct
--Tmutex
--Tn_long
--Tother_child_rec
--Toverrides_t
--Tparent_score
--Tpid_t
--Tpiped_log
--Tpool
--Trequest_rec
--Trequire_line
--Trlim_t
--Tscoreboard
--Tsemaphore
--Tserver_addr_rec
--Tserver_rec
--Tserver_rec_chain
--Tshort_score
--Ttable
--Ttable_entry
--Tthread
--Tu_wide_int
--Tvtime_t
--Twide_int
diff --git a/modules/http/Makefile.in b/modules/http/Makefile.in
deleted file mode 100644
index 167b343..0000000
--- a/modules/http/Makefile.in
+++ /dev/null
@@ -1,3 +0,0 @@
-
-include $(top_srcdir)/build/special.mk
-
diff --git a/modules/http/config2.m4 b/modules/http/config2.m4
deleted file mode 100644
index fce61e7..0000000
--- a/modules/http/config2.m4
+++ /dev/null
@@ -1,11 +0,0 @@
-dnl modules enabled in this directory by default
-
-APACHE_MODPATH_INIT(http)
-
-http_objects="http_core.lo http_protocol.lo http_request.lo"
-
-dnl mod_http freaks out when built as a DSO
-APACHE_MODULE(http, HTTP protocol handling, $http_objects, , static)
-APACHE_MODULE(mime, mapping of file-extension to MIME, , , yes)
-
-APACHE_MODPATH_FINISH
diff --git a/modules/http/http_core.c b/modules/http/http_core.c
deleted file mode 100644
index 87a9a79..0000000
--- a/modules/http/http_core.c
+++ /dev/null
@@ -1,348 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-#include "apr_strings.h"
-#include "apr_thread_proc.h"    /* for RLIMIT stuff */
-
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-#define CORE_PRIVATE
-#include "httpd.h"
-#include "http_config.h"
-#include "http_connection.h"
-#include "http_core.h"
-#include "http_protocol.h"	/* For index_of_response().  Grump. */
-#include "http_request.h"
-
-#include "util_filter.h"
-#include "util_ebcdic.h"
-#include "ap_mpm.h"
-#include "scoreboard.h"
-
-#include "mod_core.h"
-
-/* Handles for core filters */
-ap_filter_rec_t *ap_http_input_filter_handle;
-ap_filter_rec_t *ap_http_header_filter_handle;
-ap_filter_rec_t *ap_chunk_filter_handle;
-ap_filter_rec_t *ap_byterange_filter_handle;
-
-static const char *set_keep_alive_timeout(cmd_parms *cmd, void *dummy,
-					  const char *arg)
-{
-    const char *err = ap_check_cmd_context(cmd, NOT_IN_DIR_LOC_FILE|NOT_IN_LIMIT);
-    if (err != NULL) {
-        return err;
-    }
-
-    cmd->server->keep_alive_timeout = atoi(arg);
-    return NULL;
-}
-
-static const char *set_keep_alive(cmd_parms *cmd, void *dummy,
-				  const char *arg) 
-{
-    const char *err = ap_check_cmd_context(cmd, NOT_IN_DIR_LOC_FILE|NOT_IN_LIMIT);
-    if (err != NULL) {
-        return err;
-    }
-
-    /* We've changed it to On/Off, but used to use numbers
-     * so we accept anything but "Off" or "0" as "On"
-     */
-    if (!strcasecmp(arg, "off") || !strcmp(arg, "0")) {
-	cmd->server->keep_alive = 0;
-    }
-    else {
-	cmd->server->keep_alive = 1;
-    }
-    return NULL;
-}
-
-static const char *set_keep_alive_max(cmd_parms *cmd, void *dummy,
-				      const char *arg)
-{
-    const char *err = ap_check_cmd_context(cmd, NOT_IN_DIR_LOC_FILE|NOT_IN_LIMIT);
-    if (err != NULL) {
-        return err;
-    }
-
-    cmd->server->keep_alive_max = atoi(arg);
-    return NULL;
-}
-
-static const command_rec http_cmds[] = {
-    AP_INIT_TAKE1("KeepAliveTimeout", set_keep_alive_timeout, NULL, RSRC_CONF,
-                  "Keep-Alive timeout duration (sec)"),
-    AP_INIT_TAKE1("MaxKeepAliveRequests", set_keep_alive_max, NULL, RSRC_CONF,
-     "Maximum number of Keep-Alive requests per connection, or 0 for infinite"),
-    AP_INIT_TAKE1("KeepAlive", set_keep_alive, NULL, RSRC_CONF,
-                  "Whether persistent connections should be On or Off"),
-    { NULL }
-};
-
-/*
- * HTTP/1.1 chunked transfer encoding filter.
- */
-static apr_status_t chunk_filter(ap_filter_t *f, apr_bucket_brigade *b)
-{
-#define ASCII_CRLF  "\015\012"
-#define ASCII_ZERO  "\060"
-    apr_bucket_brigade *more;
-    apr_bucket *e;
-    apr_status_t rv;
-
-    for (more = NULL; b; b = more, more = NULL) {
-        apr_off_t bytes = 0;
-        apr_bucket *eos = NULL;
-        apr_bucket *flush = NULL;
-        /* XXX: chunk_hdr must remain at this scope since it is used in a 
-         *      transient bucket.
-         */
-        char chunk_hdr[20]; /* enough space for the snprintf below */
-
-        APR_BRIGADE_FOREACH(e, b) {
-            if (APR_BUCKET_IS_EOS(e)) {
-                /* there shouldn't be anything after the eos */
-                eos = e;
-                break;
-            }
-            if (APR_BUCKET_IS_FLUSH(e)) {
-                flush = e;
-            }
-            else if (e->length == -1) {
-                /* unknown amount of data (e.g. a pipe) */
-                const char *data;
-                apr_size_t len;
-
-                rv = apr_bucket_read(e, &data, &len, APR_BLOCK_READ);
-                if (rv != APR_SUCCESS) {
-                    return rv;
-                }
-                if (len > 0) {
-                    /*
-                     * There may be a new next bucket representing the
-                     * rest of the data stream on which a read() may
-                     * block so we pass down what we have so far.
-                     */
-                    bytes += len;
-                    more = apr_brigade_split(b, APR_BUCKET_NEXT(e));
-                    break;
-                }
-                else {
-                    /* If there was nothing in this bucket then we can
-                     * safely move on to the next one without pausing
-                     * to pass down what we have counted up so far.
-                     */
-                    continue;
-                }
-            }
-            else {
-                bytes += e->length;
-            }
-        }
-
-        /*
-         * XXX: if there aren't very many bytes at this point it may
-         * be a good idea to set them aside and return for more,
-         * unless we haven't finished counting this brigade yet.
-         */
-        /* if there are content bytes, then wrap them in a chunk */
-        if (bytes > 0) {
-            apr_size_t hdr_len;
-            /*
-             * Insert the chunk header, specifying the number of bytes in
-             * the chunk.
-             */
-            /* XXX might be nice to have APR_OFF_T_FMT_HEX */
-            hdr_len = apr_snprintf(chunk_hdr, sizeof(chunk_hdr),
-                                   "%qx" CRLF, (apr_uint64_t)bytes);
-            ap_xlate_proto_to_ascii(chunk_hdr, hdr_len);
-            e = apr_bucket_transient_create(chunk_hdr, hdr_len);
-            APR_BRIGADE_INSERT_HEAD(b, e);
-
-            /*
-             * Insert the end-of-chunk CRLF before an EOS or
-             * FLUSH bucket, or appended to the brigade
-             */
-            e = apr_bucket_immortal_create(ASCII_CRLF, 2);
-            if (eos != NULL) {
-                APR_BUCKET_INSERT_BEFORE(eos, e);
-            }
-            else if (flush != NULL) {
-                APR_BUCKET_INSERT_BEFORE(flush, e);
-            }
-            else {
-                APR_BRIGADE_INSERT_TAIL(b, e);
-            }
-        }
-
-        /* RFC 2616, Section 3.6.1
-         *
-         * If there is an EOS bucket, then prefix it with:
-         *   1) the last-chunk marker ("0" CRLF)
-         *   2) the trailer
-         *   3) the end-of-chunked body CRLF
-         *
-         * If there is no EOS bucket, then do nothing.
-         *
-         * XXX: it would be nice to combine this with the end-of-chunk
-         * marker above, but this is a bit more straight-forward for
-         * now.
-         */
-        if (eos != NULL) {
-            /* XXX: (2) trailers ... does not yet exist */
-            e = apr_bucket_immortal_create(ASCII_ZERO ASCII_CRLF /* <trailers> */ ASCII_CRLF, 5);
-            APR_BUCKET_INSERT_BEFORE(eos, e);
-        }
-
-        /* pass the brigade to the next filter. */
-        rv = ap_pass_brigade(f->next, b);
-        if (rv != APR_SUCCESS || eos != NULL) {
-            return rv;
-        }
-    }
-    return APR_SUCCESS;
-}
-
-static const char *http_method(const request_rec *r)
-    { return "http"; }
-
-static apr_port_t http_port(const request_rec *r)
-    { return DEFAULT_HTTP_PORT; }
-
-static int ap_process_http_connection(conn_rec *c)
-{
-    request_rec *r;
- 
-    /*
-     * Read and process each request found on our connection
-     * until no requests are left or we decide to close.
-     */
- 
-    ap_update_child_status(c->sbh, SERVER_BUSY_READ, NULL);
-    while ((r = ap_read_request(c)) != NULL) {
- 
-        c->keepalive = 0;
-        /* process the request if it was read without error */
- 
-        ap_update_child_status(c->sbh, SERVER_BUSY_WRITE, r);
-        if (r->status == HTTP_OK)
-            ap_process_request(r);
- 
-        if (ap_extended_status)
-            ap_increment_counts(c->sbh, r);
- 
-        if (!c->keepalive || c->aborted)
-            break;
- 
-        ap_update_child_status(c->sbh, SERVER_BUSY_KEEPALIVE, r);
-        apr_pool_destroy(r->pool);
- 
-        if (ap_graceful_stop_signalled())
-            break;
-    }
- 
-    return OK;
-}
-
-static int http_create_request(request_rec *r)
-{
-    if (!r->main && !r->prev) {
-        ap_add_output_filter_handle(ap_byterange_filter_handle,
-                                    NULL, r, r->connection);
-        ap_add_output_filter_handle(ap_content_length_filter_handle,
-                                    NULL, r, r->connection);
-        ap_add_output_filter_handle(ap_http_header_filter_handle,
-                                    NULL, r, r->connection);
-    }
-
-    return OK;
-}
-
-static void register_hooks(apr_pool_t *p)
-{
-    ap_hook_process_connection(ap_process_http_connection,NULL,NULL,
-			       APR_HOOK_REALLY_LAST);
-    ap_hook_map_to_storage(ap_send_http_trace,NULL,NULL,APR_HOOK_MIDDLE);
-    ap_hook_http_method(http_method,NULL,NULL,APR_HOOK_REALLY_LAST);
-    ap_hook_default_port(http_port,NULL,NULL,APR_HOOK_REALLY_LAST);
-    ap_hook_create_request(http_create_request, NULL, NULL, APR_HOOK_REALLY_LAST);
-    ap_http_input_filter_handle =
-        ap_register_input_filter("HTTP_IN", ap_http_filter,
-                                 AP_FTYPE_PROTOCOL);
-    ap_http_header_filter_handle =
-        ap_register_output_filter("HTTP_HEADER", ap_http_header_filter, 
-                                  AP_FTYPE_PROTOCOL);
-    ap_chunk_filter_handle =
-        ap_register_output_filter("CHUNK", chunk_filter, AP_FTYPE_TRANSCODE);
-    ap_byterange_filter_handle =
-        ap_register_output_filter("BYTERANGE", ap_byterange_filter,
-                                  AP_FTYPE_PROTOCOL);
-}
-
-module AP_MODULE_DECLARE_DATA http_module = {
-    STANDARD20_MODULE_STUFF,
-    NULL,			/* create per-directory config structure */
-    NULL,			/* merge per-directory config structures */
-    NULL,			/* create per-server config structure */
-    NULL,			/* merge per-server config structures */
-    http_cmds,			/* command apr_table_t */
-    register_hooks		/* register hooks */
-};
diff --git a/modules/http/http_protocol.c b/modules/http/http_protocol.c
deleted file mode 100644
index 205c873..0000000
--- a/modules/http/http_protocol.c
+++ /dev/null
@@ -1,2697 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-/*
- * http_protocol.c --- routines which directly communicate with the client.
- *
- * Code originally by Rob McCool; much redone by Robert S. Thau
- * and the Apache Software Foundation.
- */
-
-#include "apr.h"
-#include "apr_strings.h"
-#include "apr_buckets.h"
-#include "apr_lib.h"
-#include "apr_signal.h"
-
-#define APR_WANT_STDIO          /* for sscanf */
-#define APR_WANT_STRFUNC
-#define APR_WANT_MEMFUNC
-#include "apr_want.h"
-
-#define CORE_PRIVATE
-#include "util_filter.h"
-#include "ap_config.h"
-#include "httpd.h"
-#include "http_config.h"
-#include "http_core.h"
-#include "http_protocol.h"
-#include "http_main.h"
-#include "http_request.h"
-#include "http_vhost.h"
-#include "http_log.h"           /* For errors detected in basic auth common
-                                 * support code... */
-#include "apr_date.h"           /* For apr_date_parse_http and APR_DATE_BAD */
-#include "util_charset.h"
-#include "util_ebcdic.h"
-
-#include "mod_core.h"
-
-#if APR_HAVE_STDARG_H
-#include <stdarg.h>
-#endif
-#if APR_HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-
-AP_DECLARE(int) ap_set_keepalive(request_rec *r)
-{
-    int ka_sent = 0;
-    int wimpy = ap_find_token(r->pool,
-                              apr_table_get(r->headers_out, "Connection"),
-                              "close");
-    const char *conn = apr_table_get(r->headers_in, "Connection");
-
-    /* The following convoluted conditional determines whether or not
-     * the current connection should remain persistent after this response
-     * (a.k.a. HTTP Keep-Alive) and whether or not the output message
-     * body should use the HTTP/1.1 chunked transfer-coding.  In English,
-     *
-     *   IF  we have not marked this connection as errored;
-     *   and the response body has a defined length due to the status code
-     *       being 304 or 204, the request method being HEAD, already
-     *       having defined Content-Length or Transfer-Encoding: chunked, or
-     *       the request version being HTTP/1.1 and thus capable of being set
-     *       as chunked [we know the (r->chunked = 1) side-effect is ugly];
-     *   and the server configuration enables keep-alive;
-     *   and the server configuration has a reasonable inter-request timeout;
-     *   and there is no maximum # requests or the max hasn't been reached;
-     *   and the response status does not require a close;
-     *   and the response generator has not already indicated close;
-     *   and the client did not request non-persistence (Connection: close);
-     *   and    we haven't been configured to ignore the buggy twit
-     *       or they're a buggy twit coming through a HTTP/1.1 proxy
-     *   and    the client is requesting an HTTP/1.0-style keep-alive
-     *       or the client claims to be HTTP/1.1 compliant (perhaps a proxy);
-     *   THEN we can be persistent, which requires more headers be output.
-     *
-     * Note that the condition evaluation order is extremely important.
-     */
-    if ((r->connection->keepalive != -1)
-        && ((r->status == HTTP_NOT_MODIFIED)
-            || (r->status == HTTP_NO_CONTENT)
-            || r->header_only
-            || apr_table_get(r->headers_out, "Content-Length")
-            || ap_find_last_token(r->pool,
-                                  apr_table_get(r->headers_out,
-                                                "Transfer-Encoding"),
-                                  "chunked")
-            || ((r->proto_num >= HTTP_VERSION(1,1))
-                && (r->chunked = 1))) /* THIS CODE IS CORRECT, see above. */
-        && r->server->keep_alive
-        && (r->server->keep_alive_timeout > 0)
-        && ((r->server->keep_alive_max == 0)
-            || (r->server->keep_alive_max > r->connection->keepalives))
-        && !ap_status_drops_connection(r->status)
-        && !wimpy
-        && !ap_find_token(r->pool, conn, "close")
-        && (!apr_table_get(r->subprocess_env, "nokeepalive")
-            || apr_table_get(r->headers_in, "Via"))
-        && ((ka_sent = ap_find_token(r->pool, conn, "keep-alive"))
-            || (r->proto_num >= HTTP_VERSION(1,1)))) {
-        int left = r->server->keep_alive_max - r->connection->keepalives;
-
-        r->connection->keepalive = 1;
-        r->connection->keepalives++;
-
-        /* If they sent a Keep-Alive token, send one back */
-        if (ka_sent) {
-            if (r->server->keep_alive_max) {
-                apr_table_setn(r->headers_out, "Keep-Alive",
-                               apr_psprintf(r->pool, "timeout=%d, max=%d",
-                                            r->server->keep_alive_timeout,
-                                            left));
-            }
-            else {
-                apr_table_setn(r->headers_out, "Keep-Alive",
-                               apr_psprintf(r->pool, "timeout=%d",
-                                            r->server->keep_alive_timeout));
-            }
-            apr_table_mergen(r->headers_out, "Connection", "Keep-Alive");
-        }
-
-        return 1;
-    }
-
-    /* Otherwise, we need to indicate that we will be closing this
-     * connection immediately after the current response.
-     *
-     * We only really need to send "close" to HTTP/1.1 clients, but we
-     * always send it anyway, because a broken proxy may identify itself
-     * as HTTP/1.0, but pass our request along with our HTTP/1.1 tag
-     * to a HTTP/1.1 client. Better safe than sorry.
-     */
-    if (!wimpy) {
-        apr_table_mergen(r->headers_out, "Connection", "close");
-    }
-
-    r->connection->keepalive = 0;
-
-    return 0;
-}
-
-AP_DECLARE(int) ap_meets_conditions(request_rec *r)
-{
-    const char *etag;
-    const char *if_match, *if_modified_since, *if_unmodified, *if_nonematch;
-    apr_time_t mtime;
-
-    /* Check for conditional requests --- note that we only want to do
-     * this if we are successful so far and we are not processing a
-     * subrequest or an ErrorDocument.
-     *
-     * The order of the checks is important, since ETag checks are supposed
-     * to be more accurate than checks relative to the modification time.
-     * However, not all documents are guaranteed to *have* ETags, and some
-     * might have Last-Modified values w/o ETags, so this gets a little
-     * complicated.
-     */
-
-    if (!ap_is_HTTP_SUCCESS(r->status) || r->no_local_copy) {
-        return OK;
-    }
-
-    etag = apr_table_get(r->headers_out, "ETag");
-
-    /* XXX: we should define a "time unset" constant */
-    mtime = (r->mtime != 0) ? r->mtime : apr_time_now();
-
-    /* If an If-Match request-header field was given
-     * AND the field value is not "*" (meaning match anything)
-     * AND if our strong ETag does not match any entity tag in that field,
-     *     respond with a status of 412 (Precondition Failed).
-     */
-    if ((if_match = apr_table_get(r->headers_in, "If-Match")) != NULL) {
-        if (if_match[0] != '*'
-            && (etag == NULL || etag[0] == 'W'
-                || !ap_find_list_item(r->pool, if_match, etag))) {
-            return HTTP_PRECONDITION_FAILED;
-        }
-    }
-    else {
-        /* Else if a valid If-Unmodified-Since request-header field was given
-         * AND the requested resource has been modified since the time
-         * specified in this field, then the server MUST
-         *     respond with a status of 412 (Precondition Failed).
-         */
-        if_unmodified = apr_table_get(r->headers_in, "If-Unmodified-Since");
-        if (if_unmodified != NULL) {
-            apr_time_t ius = apr_date_parse_http(if_unmodified);
-
-            if ((ius != APR_DATE_BAD) && (mtime > ius)) {
-                return HTTP_PRECONDITION_FAILED;
-            }
-        }
-    }
-
-    /* If an If-None-Match request-header field was given
-     * AND the field value is "*" (meaning match anything)
-     *     OR our ETag matches any of the entity tags in that field, fail.
-     *
-     * If the request method was GET or HEAD, failure means the server
-     *    SHOULD respond with a 304 (Not Modified) response.
-     * For all other request methods, failure means the server MUST
-     *    respond with a status of 412 (Precondition Failed).
-     *
-     * GET or HEAD allow weak etag comparison, all other methods require
-     * strong comparison.  We can only use weak if it's not a range request.
-     */
-    if_nonematch = apr_table_get(r->headers_in, "If-None-Match");
-    if (if_nonematch != NULL) {
-        if (r->method_number == M_GET) {
-            if (if_nonematch[0] == '*') {
-                return HTTP_NOT_MODIFIED;
-            }
-            if (etag != NULL) {
-                if (apr_table_get(r->headers_in, "Range")) {
-                    if (etag[0] != 'W'
-                        && ap_find_list_item(r->pool, if_nonematch, etag)) {
-                        return HTTP_NOT_MODIFIED;
-                    }
-                }
-                else if (ap_strstr_c(if_nonematch, etag)) {
-                    return HTTP_NOT_MODIFIED;
-                }
-            }
-        }
-        else if (if_nonematch[0] == '*'
-                 || (etag != NULL
-                     && ap_find_list_item(r->pool, if_nonematch, etag))) {
-            return HTTP_PRECONDITION_FAILED;
-        }
-    }
-    /* Else if a valid If-Modified-Since request-header field was given
-     * AND it is a GET or HEAD request
-     * AND the requested resource has not been modified since the time
-     * specified in this field, then the server MUST
-     *    respond with a status of 304 (Not Modified).
-     * A date later than the server's current request time is invalid.
-     */
-    else if ((r->method_number == M_GET)
-             && ((if_modified_since =
-                  apr_table_get(r->headers_in,
-                                "If-Modified-Since")) != NULL)) {
-        apr_time_t ims = apr_date_parse_http(if_modified_since);
-
-        if ((ims >= mtime) && (ims <= r->request_time)) {
-            return HTTP_NOT_MODIFIED;
-        }
-    }
-    return OK;
-}
-
-/**
- * Singleton registry of additional methods. This maps new method names
- * such as "MYGET" to methnums, which are int offsets into bitmasks.
- *
- * This follows the same technique as standard M_GET, M_POST, etc. These
- * are dynamically assigned when modules are loaded and <Limit GET MYGET>
- * directives are processed.
- */
-static apr_hash_t *methods_registry = NULL;
-static int cur_method_number = METHOD_NUMBER_FIRST;
-
-/* This internal function is used to clear the method registry
- * and reset the cur_method_number counter.
- */
-static apr_status_t ap_method_registry_destroy(void *notused)
-{
-    methods_registry = NULL;
-    cur_method_number = METHOD_NUMBER_FIRST;
-    return APR_SUCCESS;
-}
-
-AP_DECLARE(void) ap_method_registry_init(apr_pool_t *p)
-{
-    methods_registry = apr_hash_make(p);
-    apr_pool_cleanup_register(p, NULL,
-                              ap_method_registry_destroy,
-                              apr_pool_cleanup_null);
-}
-
-AP_DECLARE(int) ap_method_register(apr_pool_t *p, const char *methname)
-{
-    int *methnum;
-
-    if (methods_registry == NULL) {
-        ap_method_registry_init(p);
-    }
-
-    if (methname == NULL) {
-        return M_INVALID;
-    }
-    
-    /* Check if the method was previously registered.  If it was
-     * return the associated method number.
-     */
-    methnum = (int *)apr_hash_get(methods_registry, methname,
-                                  APR_HASH_KEY_STRING);
-    if (methnum != NULL)
-        return *methnum;
-        
-    if (cur_method_number > METHOD_NUMBER_LAST) {
-        /* The method registry  has run out of dynamically
-         * assignable method numbers. Log this and return M_INVALID.
-         */
-        ap_log_perror(APLOG_MARK, APLOG_ERR|APLOG_NOERRNO, 0, p,
-                      "Maximum new request methods %d reached while "
-                      "registering method %s.",
-                      METHOD_NUMBER_LAST, methname);
-        return M_INVALID;
-    }
-
-    methnum = (int *)apr_palloc(p, sizeof(int));
-    *methnum = cur_method_number++;
-    apr_hash_set(methods_registry, methname, APR_HASH_KEY_STRING, methnum);
-
-    return *methnum;
-}
-
-/* Get the method number associated with the given string, assumed to
- * contain an HTTP method.  Returns M_INVALID if not recognized.
- *
- * This is the first step toward placing method names in a configurable
- * list.  Hopefully it (and other routines) can eventually be moved to
- * something like a mod_http_methods.c, complete with config stuff.
- */
-AP_DECLARE(int) ap_method_number_of(const char *method)
-{
-    int *methnum = NULL;
-
-    switch (*method) {
-    case 'H':
-        if (strcmp(method, "HEAD") == 0) {
-            return M_GET;   /* see header_only in request_rec */
-        }
-        break;
-    case 'G':
-        if (strcmp(method, "GET") == 0) {
-            return M_GET;
-        }
-        break;
-    case 'P':
-        if (strcmp(method, "POST") == 0) {
-            return M_POST;
-        }
-        if (strcmp(method, "PUT") == 0) {
-            return M_PUT;
-        }
-        if (strcmp(method, "PATCH") == 0) {
-            return M_PATCH;
-        }
-        if (strcmp(method, "PROPFIND") == 0) {
-            return M_PROPFIND;
-        }
-        if (strcmp(method, "PROPPATCH") == 0) {
-            return M_PROPPATCH;
-        }
-        break;
-    case 'D':
-        if (strcmp(method, "DELETE") == 0) {
-            return M_DELETE;
-        }
-        break;
-    case 'C':
-        if (strcmp(method, "CONNECT") == 0) {
-            return M_CONNECT;
-        }
-        if (strcmp(method, "COPY") == 0) {
-            return M_COPY;
-        }
-        break;
-    case 'M':
-        if (strcmp(method, "MKCOL") == 0) {
-            return M_MKCOL;
-        }
-        if (strcmp(method, "MOVE") == 0) {
-            return M_MOVE;
-        }
-        break;
-    case 'O':
-        if (strcmp(method, "OPTIONS") == 0) {
-            return M_OPTIONS;
-        }
-        break;
-    case 'T':
-        if (strcmp(method, "TRACE") == 0) {
-            return M_TRACE;
-        }
-        break;
-    case 'L':
-        if (strcmp(method, "LOCK") == 0) {
-            return M_LOCK;
-        }
-        break;
-    case 'U':
-        if (strcmp(method, "UNLOCK") == 0) {
-            return M_UNLOCK;
-        }
-        break;
-    }
-
-    /* check if the method has been dynamically registered */
-    if (methods_registry != NULL) {
-        methnum = (int*)apr_hash_get(methods_registry,
-                                     method,
-                                     APR_HASH_KEY_STRING);
-        if (methnum != NULL) {
-            return *methnum;
-        }
-    }
-
-    return M_INVALID;
-}
-
-/*
- * Turn a known method number into a name.  Doesn't work for
- * extension methods, obviously.
- */
-AP_DECLARE(const char *) ap_method_name_of(int methnum)
-{
-    static const char *AP_HTTP_METHODS[METHODS] = { NULL };
-
-    /*
-     * This is ugly, but the previous incantation made Windows C
-     * varf.  I'm not even sure it was ANSI C.  However, ugly as it
-     * is, this works, and we only have to do it once.
-     */
-    if (AP_HTTP_METHODS[0] == NULL) {
-        AP_HTTP_METHODS[M_GET]       = "GET";
-        AP_HTTP_METHODS[M_PUT]       = "PUT";
-        AP_HTTP_METHODS[M_POST]      = "POST";
-        AP_HTTP_METHODS[M_DELETE]    = "DELETE";
-        AP_HTTP_METHODS[M_CONNECT]   = "CONNECT";
-        AP_HTTP_METHODS[M_OPTIONS]   = "OPTIONS";
-        AP_HTTP_METHODS[M_TRACE]     = "TRACE";
-        AP_HTTP_METHODS[M_PATCH]     = "PATCH";
-        AP_HTTP_METHODS[M_PROPFIND]  = "PROPFIND";
-        AP_HTTP_METHODS[M_PROPPATCH] = "PROPPATCH";
-        AP_HTTP_METHODS[M_MKCOL]     = "MKCOL";
-        AP_HTTP_METHODS[M_COPY]      = "COPY";
-        AP_HTTP_METHODS[M_MOVE]      = "MOVE";
-        AP_HTTP_METHODS[M_LOCK]      = "LOCK";
-        AP_HTTP_METHODS[M_UNLOCK]    = "UNLOCK";
-        AP_HTTP_METHODS[M_INVALID]   = NULL;
-        /*
-         * Since we're using symbolic names, make sure we only do
-         * this once by forcing a value into the first slot IFF it's
-         * still NULL.
-         */
-        if (AP_HTTP_METHODS[0] == NULL) {
-            AP_HTTP_METHODS[0] = "INVALID";
-        }
-    }
-
-    if ((methnum == M_INVALID) || (methnum >= METHODS)) {
-        return NULL;
-    }
-    return AP_HTTP_METHODS[methnum];
-}
-
-static long get_chunk_size(char *);
-
-typedef struct http_filter_ctx {
-    apr_off_t remaining;
-    apr_off_t limit;
-    apr_off_t limit_used;
-    enum {
-        BODY_NONE,
-        BODY_LENGTH,
-        BODY_CHUNK
-    } state;
-} http_ctx_t;
-
-/* This is the HTTP_INPUT filter for HTTP requests and responses from 
- * proxied servers (mod_proxy).  It handles chunked and content-length 
- * bodies.  This can only be inserted/used after the headers
- * are successfully parsed. 
- */
-apr_status_t ap_http_filter(ap_filter_t *f, apr_bucket_brigade *b,
-                            ap_input_mode_t mode, apr_read_type_e block,
-                            apr_off_t readbytes)
-{
-    apr_bucket *e;
-    http_ctx_t *ctx = f->ctx;
-    apr_status_t rv;
-    apr_off_t totalread;
-
-    /* just get out of the way of things we don't want. */
-    if (mode != AP_MODE_READBYTES && mode != AP_MODE_GETLINE) {
-        return ap_get_brigade(f->next, b, mode, block, readbytes);
-    }
-
-    if (!ctx) {
-        const char *tenc, *lenp;
-        f->ctx = ctx = apr_palloc(f->r->pool, sizeof(*ctx));
-        ctx->state = BODY_NONE;
-        ctx->remaining = 0;
-        ctx->limit_used = 0;
-
-        /* LimitRequestBody does not apply to proxied responses.
-         * Consider implementing this check in its own filter. 
-         * Would adding a directive to limit the size of proxied 
-         * responses be useful?
-         */
-        if (!f->r->proxyreq) {
-            ctx->limit = ap_get_limit_req_body(f->r);
-        }
-        else {
-            ctx->limit = 0;
-        }
-
-        tenc = apr_table_get(f->r->headers_in, "Transfer-Encoding");
-        lenp = apr_table_get(f->r->headers_in, "Content-Length");
-
-        if (tenc) {
-            if (!strcasecmp(tenc, "chunked")) {
-                char line[30];
-
-                if ((rv = ap_getline(line, sizeof(line), f->r, 0)) < 0) {
-                    return rv;
-                }
-                ctx->state = BODY_CHUNK;
-                ctx->remaining = get_chunk_size(line);
-            }
-        }
-        else if (lenp) {
-            const char *pos = lenp;
-
-            while (apr_isdigit(*pos) || apr_isspace(*pos)) {
-                ++pos;
-            }
-
-            if (*pos == '\0') {
-                ctx->state = BODY_LENGTH;
-                ctx->remaining = atol(lenp);
-            }
-            
-            /* If we have a limit in effect and we know the C-L ahead of
-             * time, stop it here if it is invalid. 
-             */ 
-            if (ctx->limit && ctx->limit < ctx->remaining) {
-                ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, f->r,
-                          "Requested content-length of %" APR_OFF_T_FMT 
-                          " is larger than the configured limit"
-                          " of %" APR_OFF_T_FMT, ctx->remaining, ctx->limit);
-                ap_die(HTTP_REQUEST_ENTITY_TOO_LARGE, f->r);
-                return APR_EGENERAL;
-            }
-        }
-    }
-
-    if (!ctx->remaining) {
-        switch (ctx->state) {
-        case BODY_NONE:
-            break;
-        case BODY_LENGTH:
-            e = apr_bucket_eos_create();
-            APR_BRIGADE_INSERT_TAIL(b, e);
-            return APR_SUCCESS;
-        case BODY_CHUNK:
-            {
-                char line[30];
-
-                ctx->state = BODY_NONE;
-
-                /* We need to read the CRLF after the chunk.  */
-                if ((rv = ap_getline(line, sizeof(line), f->r, 0)) < 0) {
-                    return rv;
-                }
-
-                /* Read the real chunk line. */
-                if ((rv = ap_getline(line, sizeof(line), f->r, 0)) < 0) {
-                    return rv;
-                }
-                ctx->state = BODY_CHUNK;
-                ctx->remaining = get_chunk_size(line);
-
-                if (!ctx->remaining) {
-                    /* Handle trailers by calling get_mime_headers again! */
-                    e = apr_bucket_eos_create();
-                    APR_BRIGADE_INSERT_TAIL(b, e);
-                    return APR_SUCCESS;
-                }
-            }
-            break;
-        }
-    }
-
-    /* Ensure that the caller can not go over our boundary point. */
-    if (ctx->state == BODY_LENGTH || ctx->state == BODY_CHUNK) {
-        if (ctx->remaining < readbytes) {
-            readbytes = ctx->remaining;
-        }
-        AP_DEBUG_ASSERT(readbytes > 0);
-    }
-
-    rv = ap_get_brigade(f->next, b, mode, block, readbytes);
-
-    if (rv != APR_SUCCESS) {
-        return rv;
-    }
-
-    /* How many bytes did we just read? */
-    apr_brigade_length(b, 0, &totalread);
-
-    /* If this happens, we have a bucket of unknown length.  Die because
-     * it means our assumptions have changed. */
-    AP_DEBUG_ASSERT(totalread >= 0);
-
-    if (ctx->state != BODY_NONE) {
-        ctx->remaining -= totalread;
-    }
-
-    /* We have a limit in effect. */
-    if (ctx->limit) {
-        /* FIXME: Note that we might get slightly confused on chunked inputs
-         * as we'd need to compensate for the chunk lengths which may not
-         * really count.  This seems to be up for interpretation.  */
-        ctx->limit_used += totalread;
-        if (ctx->limit < ctx->limit_used) {
-            ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, f->r,
-                          "Read content-length of %" APR_OFF_T_FMT 
-                          " is larger than the configured limit"
-                          " of %" APR_OFF_T_FMT, ctx->limit_used, ctx->limit);
-            ap_die(HTTP_REQUEST_ENTITY_TOO_LARGE, f->r);
-            return APR_EGENERAL;
-        }
-    }
-
-    return APR_SUCCESS;
-}
-
-/* New Apache routine to map status codes into array indicies
- *  e.g.  100 -> 0,  101 -> 1,  200 -> 2 ...
- * The number of status lines must equal the value of RESPONSE_CODES (httpd.h)
- * and must be listed in order.
- */
-
-#ifdef UTS21
-/* The second const triggers an assembler bug on UTS 2.1.
- * Another workaround is to move some code out of this file into another,
- *   but this is easier.  Dave Dykstra, 3/31/99
- */
-static const char * status_lines[RESPONSE_CODES] =
-#else
-static const char * const status_lines[RESPONSE_CODES] =
-#endif
-{
-    "100 Continue",
-    "101 Switching Protocols",
-    "102 Processing",
-#define LEVEL_200  3
-    "200 OK",
-    "201 Created",
-    "202 Accepted",
-    "203 Non-Authoritative Information",
-    "204 No Content",
-    "205 Reset Content",
-    "206 Partial Content",
-    "207 Multi-Status",
-#define LEVEL_300 11
-    "300 Multiple Choices",
-    "301 Moved Permanently",
-    "302 Found",
-    "303 See Other",
-    "304 Not Modified",
-    "305 Use Proxy",
-    "306 unused",
-    "307 Temporary Redirect",
-#define LEVEL_400 19
-    "400 Bad Request",
-    "401 Authorization Required",
-    "402 Payment Required",
-    "403 Forbidden",
-    "404 Not Found",
-    "405 Method Not Allowed",
-    "406 Not Acceptable",
-    "407 Proxy Authentication Required",
-    "408 Request Time-out",
-    "409 Conflict",
-    "410 Gone",
-    "411 Length Required",
-    "412 Precondition Failed",
-    "413 Request Entity Too Large",
-    "414 Request-URI Too Large",
-    "415 Unsupported Media Type",
-    "416 Requested Range Not Satisfiable",
-    "417 Expectation Failed",
-    "418 unused",
-    "419 unused",
-    "420 unused",
-    "421 unused",
-    "422 Unprocessable Entity",
-    "423 Locked",
-    "424 Failed Dependency",
-#define LEVEL_500 44
-    "500 Internal Server Error",
-    "501 Method Not Implemented",
-    "502 Bad Gateway",
-    "503 Service Temporarily Unavailable",
-    "504 Gateway Time-out",
-    "505 HTTP Version Not Supported",
-    "506 Variant Also Negotiates",
-    "507 Insufficient Storage",
-    "508 unused",
-    "509 unused",
-    "510 Not Extended"
-};
-
-/* The index is found by its offset from the x00 code of each level.
- * Although this is fast, it will need to be replaced if some nutcase
- * decides to define a high-numbered code before the lower numbers.
- * If that sad event occurs, replace the code below with a linear search
- * from status_lines[shortcut[i]] to status_lines[shortcut[i+1]-1];
- */
-AP_DECLARE(int) ap_index_of_response(int status)
-{
-    static int shortcut[6] = {0, LEVEL_200, LEVEL_300, LEVEL_400,
-    LEVEL_500, RESPONSE_CODES};
-    int i, pos;
-
-    if (status < 100) {               /* Below 100 is illegal for HTTP status */
-        return LEVEL_500;
-    }
-
-    for (i = 0; i < 5; i++) {
-        status -= 100;
-        if (status < 100) {
-            pos = (status + shortcut[i]);
-            if (pos < shortcut[i + 1]) {
-                return pos;
-            }
-            else {
-                return LEVEL_500;            /* status unknown (falls in gap) */
-            }
-        }
-    }
-    return LEVEL_500;                         /* 600 or above is also illegal */
-}
-
-AP_DECLARE(const char *) ap_get_status_line(int status)
-{
-    return status_lines[ap_index_of_response(status)];
-}
-
-typedef struct header_struct {
-    apr_pool_t *pool;
-    apr_bucket_brigade *bb;
-} header_struct;
-
-/* Send a single HTTP header field to the client.  Note that this function
- * is used in calls to table_do(), so their interfaces are co-dependent.
- * In other words, don't change this one without checking table_do in alloc.c.
- * It returns true unless there was a write error of some kind.
- */
-static int form_header_field(header_struct *h,
-                             const char *fieldname, const char *fieldval)
-{
-    char *headfield;
-    apr_size_t len;
-    apr_size_t name_len;
-    apr_size_t val_len;
-    char *next;
-
-    name_len = strlen(fieldname);
-    val_len = strlen(fieldval);
-    len = name_len + val_len + 4; /* 4 for ": " plus CRLF */
-    headfield = (char *)apr_palloc(h->pool, len + 1);
-    memcpy(headfield, fieldname, name_len);
-    next = headfield + name_len;
-    *next++ = ':';
-    *next++ = ' ';
-    memcpy(next, fieldval, val_len);
-    next += val_len;
-    *next++ = CR;
-    *next++ = LF;
-    *next = 0;
-    ap_xlate_proto_to_ascii(headfield, len);
-    apr_brigade_write(h->bb, NULL, NULL, headfield, len);
-    return 1;
-}
-
-/*
- * Determine the protocol to use for the response. Potentially downgrade
- * to HTTP/1.0 in some situations and/or turn off keepalives.
- *
- * also prepare r->status_line.
- */
-static void basic_http_header_check(request_rec *r,
-                                    const char **protocol)
-{
-    if (r->assbackwards) {
-        /* no such thing as a response protocol */
-        return;
-    }
-
-    if (!r->status_line) {
-        r->status_line = status_lines[ap_index_of_response(r->status)];
-    }
-
-    /* kludge around broken browsers when indicated by force-response-1.0
-     */
-    if (r->proto_num == HTTP_VERSION(1,0)
-        && apr_table_get(r->subprocess_env, "force-response-1.0")) {
-        *protocol = "HTTP/1.0";
-        r->connection->keepalive = -1;
-    }
-    else {
-        *protocol = AP_SERVER_PROTOCOL;
-    }
-
-    if (r->proto_num > HTTP_VERSION(1,0)
-        && apr_table_get(r->subprocess_env, "downgrade-1.0")) {
-        r->proto_num = HTTP_VERSION(1,0);
-    }
-}
-
-/* fill "bb" with a barebones/initial HTTP response header */
-static void basic_http_header(request_rec *r, apr_bucket_brigade *bb,
-                              const char *protocol)
-{
-    char *date;
-    char *tmp;
-    header_struct h;
-    apr_size_t len;
-
-    if (r->assbackwards) {
-        /* there are no headers to send */
-        return;
-    }
-
-    /* Output the HTTP/1.x Status-Line and the Date and Server fields */
-
-    tmp = apr_pstrcat(r->pool, protocol, " ", r->status_line, CRLF, NULL);
-    len = strlen(tmp);
-    ap_xlate_proto_to_ascii(tmp, len);
-    apr_brigade_write(bb, NULL, NULL, tmp, len);
-
-    date = apr_palloc(r->pool, APR_RFC822_DATE_LEN);
-    apr_rfc822_date(date, r->request_time);
-
-    h.pool = r->pool;
-    h.bb = bb;
-    form_header_field(&h, "Date", date);
-    form_header_field(&h, "Server", ap_get_server_version());
-
-    apr_table_unset(r->headers_out, "Date");        /* Avoid bogosity */
-    apr_table_unset(r->headers_out, "Server");
-}
-
-AP_DECLARE(void) ap_basic_http_header(request_rec *r, apr_bucket_brigade *bb)
-{
-    const char *protocol;
-
-    basic_http_header_check(r, &protocol);
-    basic_http_header(r, bb, protocol);
-}
-
-/* Navigator versions 2.x, 3.x and 4.0 betas up to and including 4.0b2
- * have a header parsing bug.  If the terminating \r\n occur starting
- * at offset 256, 257 or 258 of output then it will not properly parse
- * the headers.  Curiously it doesn't exhibit this problem at 512, 513.
- * We are guessing that this is because their initial read of a new request
- * uses a 256 byte buffer, and subsequent reads use a larger buffer.
- * So the problem might exist at different offsets as well.
- *
- * This should also work on keepalive connections assuming they use the
- * same small buffer for the first read of each new request.
- *
- * At any rate, we check the bytes written so far and, if we are about to
- * tickle the bug, we instead insert a bogus padding header.  Since the bug
- * manifests as a broken image in Navigator, users blame the server.  :(
- * It is more expensive to check the User-Agent than it is to just add the
- * bytes, so we haven't used the BrowserMatch feature here.
- */
-static void terminate_header(apr_bucket_brigade *bb)
-{
-    char tmp[] = "X-Pad: avoid browser bug" CRLF;
-    char crlf[] = CRLF;
-    apr_off_t len;
-    apr_size_t buflen;
-
-    (void) apr_brigade_length(bb, 1, &len);
-
-    if (len >= 255 && len <= 257) {
-        buflen = strlen(tmp);
-        ap_xlate_proto_to_ascii(tmp, buflen);
-        apr_brigade_write(bb, NULL, NULL, tmp, buflen);
-    }
-    buflen = strlen(crlf);
-    ap_xlate_proto_to_ascii(crlf, buflen);
-    apr_brigade_write(bb, NULL, NULL, crlf, buflen);
-}
-
-/* Build the Allow field-value from the request handler method mask.
- * Note that we always allow TRACE, since it is handled below.
- */
-static char *make_allow(request_rec *r)
-{
-    char *list;
-    apr_int64_t mask;
-
-    mask = r->allowed_methods->method_mask;
-    list = apr_pstrcat(r->pool,
-                   (mask & (AP_METHOD_BIT << M_GET))       ? ", GET, HEAD" : "",
-                   (mask & (AP_METHOD_BIT << M_POST))      ? ", POST"      : "",
-                   (mask & (AP_METHOD_BIT << M_PUT))       ? ", PUT"       : "",
-                   (mask & (AP_METHOD_BIT << M_DELETE))    ? ", DELETE"    : "",
-                   (mask & (AP_METHOD_BIT << M_CONNECT))   ? ", CONNECT"   : "",
-                   (mask & (AP_METHOD_BIT << M_OPTIONS))   ? ", OPTIONS"   : "",
-                   (mask & (AP_METHOD_BIT << M_PATCH))     ? ", PATCH"     : "",
-                   (mask & (AP_METHOD_BIT << M_PROPFIND))  ? ", PROPFIND"  : "",
-                   (mask & (AP_METHOD_BIT << M_PROPPATCH)) ? ", PROPPATCH" : "",
-                   (mask & (AP_METHOD_BIT << M_MKCOL))     ? ", MKCOL"     : "",
-                   (mask & (AP_METHOD_BIT << M_COPY))      ? ", COPY"      : "",
-                   (mask & (AP_METHOD_BIT << M_MOVE))      ? ", MOVE"      : "",
-                   (mask & (AP_METHOD_BIT << M_LOCK))      ? ", LOCK"      : "",
-                   (mask & (AP_METHOD_BIT << M_UNLOCK))    ? ", UNLOCK"    : "",
-                   ", TRACE",
-                   NULL);
-    if ((mask & (AP_METHOD_BIT << M_INVALID))
-        && (r->allowed_methods->method_list != NULL)
-        && (r->allowed_methods->method_list->nelts != 0)) {
-        int i;
-        char **xmethod = (char **) r->allowed_methods->method_list->elts;
-
-        /*
-         * Append all of the elements of r->allowed_methods->method_list
-         */
-        for (i = 0; i < r->allowed_methods->method_list->nelts; ++i) {
-            list = apr_pstrcat(r->pool, list, ", ", xmethod[i], NULL);
-        }
-    }
-    /*
-     * Space past the leading ", ".  Wastes two bytes, but that's better
-     * than futzing around to find the actual length.
-     */
-    return list + 2;
-}
-
-AP_DECLARE_NONSTD(int) ap_send_http_trace(request_rec *r)
-{
-    int rv;
-    apr_bucket_brigade *b;
-    header_struct h;
-
-    if (r->method_number != M_TRACE) {
-        return DECLINED;
-    }
-
-    /* Get the original request */
-    while (r->prev) {
-        r = r->prev;
-    }
-
-    if ((rv = ap_setup_client_block(r, REQUEST_NO_BODY))) {
-        return rv;
-    }
-
-    r->content_type = "message/http";
-
-    /* Now we recreate the request, and echo it back */
-
-    b = apr_brigade_create(r->pool);
-    apr_brigade_putstrs(b, NULL, NULL, r->the_request, CRLF, NULL);
-    h.pool = r->pool;
-    h.bb = b;
-    apr_table_do((int (*) (void *, const char *, const char *))
-                 form_header_field, (void *) &h, r->headers_in, NULL);
-    apr_brigade_puts(b, NULL, NULL, CRLF);
-    ap_pass_brigade(r->output_filters, b);
-
-    return DONE;
-}
-
-AP_DECLARE(int) ap_send_http_options(request_rec *r)
-{
-    if (r->assbackwards) {
-        return DECLINED;
-    }
-
-    apr_table_setn(r->headers_out, "Allow", make_allow(r));
-
-    /* the request finalization will send an EOS, which will flush all
-     * the headers out (including the Allow header)
-     */
-
-    return OK;
-}
-
-/* This routine is called by apr_table_do and merges all instances of
- * the passed field values into a single array that will be further
- * processed by some later routine.  Originally intended to help split
- * and recombine multiple Vary fields, though it is generic to any field
- * consisting of comma/space-separated tokens.
- */
-static int uniq_field_values(void *d, const char *key, const char *val)
-{
-    apr_array_header_t *values;
-    char *start;
-    char *e;
-    char **strpp;
-    int  i;
-
-    values = (apr_array_header_t *)d;
-
-    e = apr_pstrdup(values->pool, val);
-
-    do {
-        /* Find a non-empty fieldname */
-
-        while (*e == ',' || apr_isspace(*e)) {
-            ++e;
-        }
-        if (*e == '\0') {
-            break;
-        }
-        start = e;
-        while (*e != '\0' && *e != ',' && !apr_isspace(*e)) {
-            ++e;
-        }
-        if (*e != '\0') {
-            *e++ = '\0';
-        }
-
-        /* Now add it to values if it isn't already represented.
-         * Could be replaced by a ap_array_strcasecmp() if we had one.
-         */
-        for (i = 0, strpp = (char **) values->elts; i < values->nelts;
-             ++i, ++strpp) {
-            if (*strpp && strcasecmp(*strpp, start) == 0) {
-                break;
-            }
-        }
-        if (i == values->nelts) {  /* if not found */
-            *(char **)apr_array_push(values) = start;
-        }
-    } while (*e != '\0');
-
-    return 1;
-}
-
-/*
- * Since some clients choke violently on multiple Vary fields, or
- * Vary fields with duplicate tokens, combine any multiples and remove
- * any duplicates.
- */
-static void fixup_vary(request_rec *r)
-{
-    apr_array_header_t *varies;
-
-    varies = apr_array_make(r->pool, 5, sizeof(char *));
-
-    /* Extract all Vary fields from the headers_out, separate each into
-     * its comma-separated fieldname values, and then add them to varies
-     * if not already present in the array.
-     */
-    apr_table_do((int (*)(void *, const char *, const char *))uniq_field_values,
-                 (void *) varies, r->headers_out, "Vary", NULL);
-
-    /* If we found any, replace old Vary fields with unique-ified value */
-
-    if (varies->nelts > 0) {
-        apr_table_setn(r->headers_out, "Vary",
-                       apr_array_pstrcat(r->pool, varies, ','));
-    }
-}
-
-typedef struct header_filter_ctx {
-    int headers_sent;
-} header_filter_ctx;
-
-AP_CORE_DECLARE_NONSTD(apr_status_t) ap_http_header_filter(ap_filter_t *f,
-                                                           apr_bucket_brigade *b)
-{
-    int i;
-    request_rec *r = f->r;
-    const char *clheader;
-    const char *protocol;
-    apr_bucket *e;
-    apr_bucket_brigade *b2;
-    header_struct h;
-    header_filter_ctx *ctx = f->ctx;
-
-    AP_DEBUG_ASSERT(!r->main);
-
-    /* Handlers -should- be smart enough not to send content on HEAD requests.
-     * To guard against poorly written handlers, leave the header_filter
-     * installed (but only for HEAD requests) to intercept and discard content
-     * after the headers have been sent.
-     */
-    if (r->header_only) {
-        if (!ctx) {
-            ctx = f->ctx = apr_pcalloc(r->pool, sizeof(header_filter_ctx));
-        }
-        else if (ctx->headers_sent) {
-            apr_brigade_destroy(b);
-            return OK;
-        }
-    }
-
-    APR_BRIGADE_FOREACH(e, b) {
-        if (e->type == &ap_bucket_type_error) {
-            ap_bucket_error *eb = e->data;
-
-            ap_die(eb->status, r);
-            return AP_FILTER_ERROR;
-        }
-    }
-
-    if (r->assbackwards) {
-        r->sent_bodyct = 1;
-        ap_remove_output_filter(f);
-        return ap_pass_brigade(f->next, b);
-    }
-
-    /*
-     * Now that we are ready to send a response, we need to combine the two
-     * header field tables into a single table.  If we don't do this, our
-     * later attempts to set or unset a given fieldname might be bypassed.
-     */
-    if (!apr_is_empty_table(r->err_headers_out)) {
-        r->headers_out = apr_table_overlay(r->pool, r->err_headers_out,
-                                           r->headers_out);
-    }
-
-    /*
-     * Remove the 'Vary' header field if the client can't handle it.
-     * Since this will have nasty effects on HTTP/1.1 caches, force
-     * the response into HTTP/1.0 mode.
-     *
-     * Note: the force-response-1.0 should come before the call to
-     *       basic_http_header_check()
-     */
-    if (apr_table_get(r->subprocess_env, "force-no-vary") != NULL) {
-        apr_table_unset(r->headers_out, "Vary");
-        r->proto_num = HTTP_VERSION(1,0);
-        apr_table_set(r->subprocess_env, "force-response-1.0", "1");
-    }
-    else {
-        fixup_vary(r);
-    }
-
-    /*
-     * Now remove any ETag response header field if earlier processing
-     * says so (such as a 'FileETag None' directive).
-     */
-    if (apr_table_get(r->notes, "no-etag") != NULL) {
-        apr_table_unset(r->headers_out, "ETag");
-    }
-
-    /* determine the protocol and whether we should use keepalives. */
-    basic_http_header_check(r, &protocol);
-    ap_set_keepalive(r);
-
-    if (r->chunked) {
-        apr_table_mergen(r->headers_out, "Transfer-Encoding", "chunked");
-        apr_table_unset(r->headers_out, "Content-Length");
-    }
-
-    apr_table_setn(r->headers_out, "Content-Type", 
-                   ap_make_content_type(r, r->content_type));
-
-    if (r->content_encoding) {
-        apr_table_setn(r->headers_out, "Content-Encoding",
-                       r->content_encoding);
-    }
-
-    if (!apr_is_empty_table(r->content_languages)) {
-        char **languages = (char **)(r->content_languages->elts);
-        for (i = 0; i < r->content_languages->nelts; ++i) {
-            apr_table_mergen(r->headers_out, "Content-Language", languages[i]);
-        }
-    }
-
-    /*
-     * Control cachability for non-cachable responses if not already set by
-     * some other part of the server configuration.
-     */
-    if (r->no_cache && !apr_table_get(r->headers_out, "Expires")) {
-        char *date = apr_palloc(r->pool, APR_RFC822_DATE_LEN);
-        apr_rfc822_date(date, r->request_time);
-        apr_table_addn(r->headers_out, "Expires", date);
-    }
-
-    /* This is a hack, but I can't find anyway around it.  The idea is that
-     * we don't want to send out 0 Content-Lengths if it is a head request.
-     * This happens when modules try to outsmart the server, and return
-     * if they see a HEAD request.  Apache 1.3 handlers were supposed to
-     * just return in that situation, and the core handled the HEAD.  In
-     * 2.0, if a handler returns, then the core sends an EOS bucket down
-     * the filter stack, and the content-length filter computes a C-L of
-     * zero and that gets put in the headers, and we end up sending a
-     * zero C-L to the client.  We can't just remove the C-L filter,
-     * because well behaved 2.0 handlers will send their data down the stack,
-     * and we will compute a real C-L for the head request. RBB
-     */
-    if (r->header_only
-        && (clheader = apr_table_get(r->headers_out, "Content-Length"))
-        && !strcmp(clheader, "0")) {
-        apr_table_unset(r->headers_out, "Content-Length");
-    }
-
-    b2 = apr_brigade_create(r->pool);
-    basic_http_header(r, b2, protocol);
-
-    h.pool = r->pool;
-    h.bb = b2;
-
-    if (r->status == HTTP_NOT_MODIFIED) {
-        apr_table_do((int (*)(void *, const char *, const char *)) form_header_field,
-                     (void *) &h, r->headers_out,
-                     "Connection",
-                     "Keep-Alive",
-                     "ETag",
-                     "Content-Location",
-                     "Expires",
-                     "Cache-Control",
-                     "Vary",
-                     "Warning",
-                     "WWW-Authenticate",
-                     "Proxy-Authenticate",
-                     NULL);
-    }
-    else {
-        apr_table_do((int (*) (void *, const char *, const char *)) form_header_field,
-                     (void *) &h, r->headers_out, NULL);
-    }
-
-    terminate_header(b2);
-
-    ap_pass_brigade(f->next, b2);
-
-    if (r->header_only) {
-        apr_brigade_destroy(b);
-        ctx->headers_sent = 1;
-        return OK;
-    }
-
-    r->sent_bodyct = 1;         /* Whatever follows is real body stuff... */
-
-    if (r->chunked) {
-        /* We can't add this filter until we have already sent the headers.
-         * If we add it before this point, then the headers will be chunked
-         * as well, and that is just wrong.
-         */
-        ap_add_output_filter("CHUNK", NULL, r, r->connection);
-    }
-
-    /* Don't remove this filter until after we have added the CHUNK filter.
-     * Otherwise, f->next won't be the CHUNK filter and thus the first
-     * brigade won't be chunked properly.
-     */
-    ap_remove_output_filter(f);
-    return ap_pass_brigade(f->next, b);
-}
-
-/* Here we deal with getting the request message body from the client.
- * Whether or not the request contains a body is signaled by the presence
- * of a non-zero Content-Length or by a Transfer-Encoding: chunked.
- *
- * Note that this is more complicated than it was in Apache 1.1 and prior
- * versions, because chunked support means that the module does less.
- *
- * The proper procedure is this:
- *
- * 1. Call setup_client_block() near the beginning of the request
- *    handler. This will set up all the necessary properties, and will
- *    return either OK, or an error code. If the latter, the module should
- *    return that error code. The second parameter selects the policy to
- *    apply if the request message indicates a body, and how a chunked
- *    transfer-coding should be interpreted. Choose one of
- *
- *    REQUEST_NO_BODY          Send 413 error if message has any body
- *    REQUEST_CHUNKED_ERROR    Send 411 error if body without Content-Length
- *    REQUEST_CHUNKED_DECHUNK  If chunked, remove the chunks for me.
- *
- *    In order to use the last two options, the caller MUST provide a buffer
- *    large enough to hold a chunk-size line, including any extensions.
- *
- * 2. When you are ready to read a body (if any), call should_client_block().
- *    This will tell the module whether or not to read input. If it is 0,
- *    the module should assume that there is no message body to read.
- *    This step also sends a 100 Continue response to HTTP/1.1 clients,
- *    so should not be called until the module is *definitely* ready to
- *    read content. (otherwise, the point of the 100 response is defeated).
- *    Never call this function more than once.
- *
- * 3. Finally, call get_client_block in a loop. Pass it a buffer and its size.
- *    It will put data into the buffer (not necessarily a full buffer), and
- *    return the length of the input block. When it is done reading, it will
- *    return 0 if EOF, or -1 if there was an error.
- *    If an error occurs on input, we force an end to keepalive.
- */
-
-AP_DECLARE(int) ap_setup_client_block(request_rec *r, int read_policy)
-{
-    const char *tenc = apr_table_get(r->headers_in, "Transfer-Encoding");
-    const char *lenp = apr_table_get(r->headers_in, "Content-Length");
-
-    r->read_body = read_policy;
-    r->read_chunked = 0;
-    r->remaining = 0;
-
-    if (tenc) {
-        if (strcasecmp(tenc, "chunked")) {
-            ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                          "Unknown Transfer-Encoding %s", tenc);
-            return HTTP_NOT_IMPLEMENTED;
-        }
-        if (r->read_body == REQUEST_CHUNKED_ERROR) {
-            ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                          "chunked Transfer-Encoding forbidden: %s", r->uri);
-            return (lenp) ? HTTP_BAD_REQUEST : HTTP_LENGTH_REQUIRED;
-        }
-
-        r->read_chunked = 1;
-    }
-    else if (lenp) {
-        const char *pos = lenp;
-
-        while (apr_isdigit(*pos) || apr_isspace(*pos)) {
-            ++pos;
-        }
-        if (*pos != '\0') {
-            ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                          "Invalid Content-Length %s", lenp);
-            return HTTP_BAD_REQUEST;
-        }
-
-        r->remaining = atol(lenp);
-    }
-
-    if ((r->read_body == REQUEST_NO_BODY)
-        && (r->read_chunked || (r->remaining > 0))) {
-        ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                      "%s with body is not allowed for %s", r->method, r->uri);
-        return HTTP_REQUEST_ENTITY_TOO_LARGE;
-    }
-
-#ifdef AP_DEBUG
-    {
-        /* Make sure ap_getline() didn't leave any droppings. */
-        core_request_config *req_cfg =
-            (core_request_config *)ap_get_module_config(r->request_config,
-                                                        &core_module);
-        AP_DEBUG_ASSERT(APR_BRIGADE_EMPTY(req_cfg->bb));
-    }
-#endif
-
-    return OK;
-}
-
-AP_DECLARE(int) ap_should_client_block(request_rec *r)
-{
-    /* First check if we have already read the request body */
-
-    if (r->read_length || (!r->read_chunked && (r->remaining <= 0))) {
-        return 0;
-    }
-
-    if (r->expecting_100 && r->proto_num >= HTTP_VERSION(1,1)) {
-        char *tmp;
-        apr_bucket *e;
-        apr_bucket_brigade *bb;
-
-        /* sending 100 Continue interim response */
-        tmp = apr_pstrcat(r->pool, AP_SERVER_PROTOCOL, " ", status_lines[0],
-                          CRLF CRLF, NULL);
-        bb = apr_brigade_create(r->pool);
-        e = apr_bucket_pool_create(tmp, strlen(tmp), r->pool);
-        APR_BRIGADE_INSERT_HEAD(bb, e);
-        e = apr_bucket_flush_create();
-        APR_BRIGADE_INSERT_TAIL(bb, e);
-
-        ap_pass_brigade(r->connection->output_filters, bb);
-    }
-
-    return 1;
-}
-
-static long get_chunk_size(char *b)
-{
-    long chunksize = 0;
-
-    while (apr_isxdigit(*b)) {
-        int xvalue = 0;
-
-        if (*b >= '0' && *b <= '9') {
-            xvalue = *b - '0';
-        }
-        else if (*b >= 'A' && *b <= 'F') {
-            xvalue = *b - 'A' + 0xa;
-        }
-        else if (*b >= 'a' && *b <= 'f') {
-            xvalue = *b - 'a' + 0xa;
-        }
-
-        chunksize = (chunksize << 4) | xvalue;
-        ++b;
-    }
-
-    return chunksize;
-}
-
-/* get_client_block is called in a loop to get the request message body.
- * This is quite simple if the client includes a content-length
- * (the normal case), but gets messy if the body is chunked. Note that
- * r->remaining is used to maintain state across calls and that
- * r->read_length is the total number of bytes given to the caller
- * across all invocations.  It is messy because we have to be careful not
- * to read past the data provided by the client, since these reads block.
- * Returns 0 on End-of-body, -1 on error or premature chunk end.
- *
- * Reading the chunked encoding requires a buffer size large enough to
- * hold a chunk-size line, including any extensions. For now, we'll leave
- * that to the caller, at least until we can come up with a better solution.
- */
-AP_DECLARE(long) ap_get_client_block(request_rec *r, char *buffer,
-                                     apr_size_t bufsiz)
-{
-    apr_size_t total;
-    apr_status_t rv;
-    apr_bucket *b;
-    const char *tempbuf;
-    core_request_config *req_cfg =
-        (core_request_config *)ap_get_module_config(r->request_config,
-                                                    &core_module);
-    apr_bucket_brigade *bb = req_cfg->bb;
-
-    /* read until we get a non-empty brigade */
-    while (APR_BRIGADE_EMPTY(bb)) {
-        if (ap_get_brigade(r->input_filters, bb, AP_MODE_READBYTES,
-                           APR_BLOCK_READ, bufsiz) != APR_SUCCESS) {
-            /* if we actually fail here, we want to just return and
-             * stop trying to read data from the client.
-             */
-            r->connection->keepalive = -1;
-            apr_brigade_destroy(bb);
-            return -1;
-        }
-    }
-
-    b = APR_BRIGADE_FIRST(bb);
-    if (APR_BUCKET_IS_EOS(b)) { /* reached eos on previous invocation */
-        apr_bucket_delete(b);
-        return 0;
-    }
-
-    /* ### it would be nice to replace the code below with "consume N bytes
-       ### from this brigade, placing them into that buffer." there are
-       ### other places where we do the same...
-       ###
-       ### alternatively, we could partition the brigade, then call a
-       ### function which serializes a given brigade into a buffer. that
-       ### semantic is used elsewhere, too...
-    */
-
-    total = 0;
-    while (total < bufsiz
-           && b != APR_BRIGADE_SENTINEL(bb)
-           && !APR_BUCKET_IS_EOS(b)) {
-        apr_size_t len_read;
-        apr_bucket *old;
-
-        if ((rv = apr_bucket_read(b, &tempbuf, &len_read,
-                                  APR_BLOCK_READ)) != APR_SUCCESS) {
-            return -1;
-        }
-        if (total + len_read > bufsiz) {
-            apr_bucket_split(b, bufsiz - total);
-            len_read = bufsiz - total;
-        }
-        memcpy(buffer, tempbuf, len_read);
-        buffer += len_read;
-        total += len_read;
-        /* XXX the next field shouldn't be mucked with here,
-         * as it is in terms of bytes in the unfiltered body;
-         * gotta see if anybody else actually uses it
-         */
-        r->read_length += len_read; /* XXX yank me? */
-        old = b;
-        b = APR_BUCKET_NEXT(b);
-        apr_bucket_delete(old);
-    }
-
-    return total;
-}
-
-/* In HTTP/1.1, any method can have a body.  However, most GET handlers
- * wouldn't know what to do with a request body if they received one.
- * This helper routine tests for and reads any message body in the request,
- * simply discarding whatever it receives.  We need to do this because
- * failing to read the request body would cause it to be interpreted
- * as the next request on a persistent connection.
- *
- * Since we return an error status if the request is malformed, this
- * routine should be called at the beginning of a no-body handler, e.g.,
- *
- *    if ((retval = ap_discard_request_body(r)) != OK) {
- *        return retval;
- *    }
- */
-AP_DECLARE(int) ap_discard_request_body(request_rec *r)
-{
-    int rv;
-
-    if (r->read_length == 0) {  /* if not read already */
-        if ((rv = ap_setup_client_block(r, REQUEST_CHUNKED_DECHUNK))) {
-            return rv;
-        }
-    }
-
-    /* In order to avoid sending 100 Continue when we already know the
-     * final response status, and yet not kill the connection if there is
-     * no request body to be read, we need to duplicate the test from
-     * ap_should_client_block() here negated rather than call it directly.
-     */
-    if ((r->read_length == 0) && (r->read_chunked || (r->remaining > 0))) {
-        char dumpbuf[HUGE_STRING_LEN];
-
-        if (r->expecting_100) {
-            r->connection->keepalive = -1;
-            return OK;
-        }
-
-        while ((rv = ap_get_client_block(r, dumpbuf, HUGE_STRING_LEN)) > 0) {
-            continue;
-        }
-
-        if (rv < 0) {
-            return HTTP_BAD_REQUEST;
-        }
-    }
-    return OK;
-}
-
-static const char *add_optional_notes(request_rec *r,
-                                      const char *prefix,
-                                      const char *key,
-                                      const char *suffix)
-{
-    const char *notes, *result;
-
-    if ((notes = apr_table_get(r->notes, key)) == NULL) {
-        result = apr_pstrcat(r->pool, prefix, suffix, NULL);
-    }
-    else {
-        result = apr_pstrcat(r->pool, prefix, notes, suffix, NULL);
-    }
-
-    return result;
-}
-
-/* construct and return the default error message for a given
- * HTTP defined error code
- */
-static const char *get_canned_error_string(int status,
-                                           request_rec *r,
-                                           const char *location)
-{
-    apr_pool_t *p = r->pool;
-    const char *error_notes, *h1, *s1;
-
-    switch (status) {
-    case HTTP_MOVED_PERMANENTLY:
-    case HTTP_MOVED_TEMPORARILY:
-    case HTTP_TEMPORARY_REDIRECT:
-        return(apr_pstrcat(p,
-                           "<p>The document has moved <a href=\"",
-                           ap_escape_html(r->pool, location),
-                           "\">here</a>.</p>\n",
-                           NULL));
-    case HTTP_SEE_OTHER:
-        return(apr_pstrcat(p,
-                           "<p>The answer to your request is located "
-                           "<a href=\"",
-                           ap_escape_html(r->pool, location),
-                           "\">here</a>.</p>\n",
-                           NULL));
-    case HTTP_USE_PROXY:
-        return(apr_pstrcat(p,
-                           "<p>This resource is only accessible "
-                           "through the proxy\n",
-                           ap_escape_html(r->pool, location),
-                           "<br />\nYou will need to configure "
-                           "your client to use that proxy.</p>\n",
-                           NULL));
-    case HTTP_PROXY_AUTHENTICATION_REQUIRED:
-    case HTTP_UNAUTHORIZED:
-        return("<p>This server could not verify that you\n"
-               "are authorized to access the document\n"
-               "requested.  Either you supplied the wrong\n"
-               "credentials (e.g., bad password), or your\n"
-               "browser doesn't understand how to supply\n"
-               "the credentials required.</p>\n");
-    case HTTP_BAD_REQUEST:
-        return(add_optional_notes(r,
-                                  "<p>Your browser sent a request that "
-                                  "this server could not understand.<br />\n",
-                                  "error-notes",
-                                  "</p>\n"));
-    case HTTP_FORBIDDEN:
-        return(apr_pstrcat(p,
-                           "<p>You don't have permission to access ",
-                           ap_escape_html(r->pool, r->uri),
-                           "\non this server.</p>\n",
-                           NULL));
-    case HTTP_NOT_FOUND:
-        return(apr_pstrcat(p,
-                           "<p>The requested URL ",
-                           ap_escape_html(r->pool, r->uri),
-                           " was not found on this server.</p>\n",
-                           NULL));
-    case HTTP_METHOD_NOT_ALLOWED:
-        return(apr_pstrcat(p,
-                           "<p>The requested method ", r->method,
-                           " is not allowed for the URL ",
-                           ap_escape_html(r->pool, r->uri),
-                           ".</p>\n",
-                           NULL));
-    case HTTP_NOT_ACCEPTABLE:
-        s1 = apr_pstrcat(p,
-                         "<p>An appropriate representation of the "
-                         "requested resource ",
-                         ap_escape_html(r->pool, r->uri),
-                         " could not be found on this server.</p>\n",
-                         NULL);
-        return(add_optional_notes(r, s1, "variant-list", ""));
-    case HTTP_MULTIPLE_CHOICES:
-        return(add_optional_notes(r, "", "variant-list", ""));
-    case HTTP_LENGTH_REQUIRED:
-        s1 = apr_pstrcat(p,
-                         "<p>A request of the requested method ",
-                         r->method,
-                         " requires a valid Content-length.<br />\n",
-                         NULL);
-        return(add_optional_notes(r, s1, "error-notes", "</p>\n"));
-    case HTTP_PRECONDITION_FAILED:
-        return(apr_pstrcat(p,
-                           "<p>The precondition on the request "
-                           "for the URL ",
-                           ap_escape_html(r->pool, r->uri),
-                           " evaluated to false.</p>\n",
-                           NULL));
-    case HTTP_NOT_IMPLEMENTED:
-        s1 = apr_pstrcat(p,
-                         "<p>",
-                         ap_escape_html(r->pool, r->method), " to ",
-                         ap_escape_html(r->pool, r->uri),
-                         " not supported.<br />\n",
-                         NULL);
-        return(add_optional_notes(r, s1, "error-notes", "</p>\n"));
-    case HTTP_BAD_GATEWAY:
-        s1 = "<p>The proxy server received an invalid" CRLF
-            "response from an upstream server.<br />" CRLF;
-        return(add_optional_notes(r, s1, "error-notes", "</p>\n"));
-    case HTTP_VARIANT_ALSO_VARIES:
-        return(apr_pstrcat(p,
-                           "<p>A variant for the requested "
-                           "resource\n<pre>\n",
-                           ap_escape_html(r->pool, r->uri),
-                           "\n</pre>\nis itself a negotiable resource. "
-                           "This indicates a configuration error.</p>\n",
-                           NULL));
-    case HTTP_REQUEST_TIME_OUT:
-        return("<p>Server timeout waiting for the HTTP request from the client.</p>\n");
-    case HTTP_GONE:
-        return(apr_pstrcat(p,
-                           "<p>The requested resource<br />",
-                           ap_escape_html(r->pool, r->uri),
-                           "<br />\nis no longer available on this server "
-                           "and there is no forwarding address.\n"
-                           "Please remove all references to this "
-                           "resource.</p>\n",
-                           NULL));
-    case HTTP_REQUEST_ENTITY_TOO_LARGE:
-        return(apr_pstrcat(p,
-                           "The requested resource<br />",
-                           ap_escape_html(r->pool, r->uri), "<br />\n",
-                           "does not allow request data with ",
-                           r->method,
-                           " requests, or the amount of data provided in\n"
-                           "the request exceeds the capacity limit.\n",
-                           NULL));
-    case HTTP_REQUEST_URI_TOO_LARGE:
-        s1 = "<p>The requested URL's length exceeds the capacity\n"
-             "limit for this server.<br />\n";
-        return(add_optional_notes(r, s1, "error-notes", "</p>\n"));
-    case HTTP_UNSUPPORTED_MEDIA_TYPE:
-        return("<p>The supplied request data is not in a format\n"
-               "acceptable for processing by this resource.</p>\n");
-    case HTTP_RANGE_NOT_SATISFIABLE:
-        return("<p>None of the range-specifier values in the Range\n"
-               "request-header field overlap the current extent\n"
-               "of the selected resource.</p>\n");
-    case HTTP_EXPECTATION_FAILED:
-        return(apr_pstrcat(p,
-                           "<p>The expectation given in the Expect "
-                           "request-header"
-                           "\nfield could not be met by this server.</p>\n"
-                           "<p>The client sent<pre>\n    Expect: ",
-                           apr_table_get(r->headers_in, "Expect"),
-                           "\n</pre>\n"
-                           "but we only allow the 100-continue "
-                           "expectation.</p>\n",
-                           NULL));
-    case HTTP_UNPROCESSABLE_ENTITY:
-        return("<p>The server understands the media type of the\n"
-               "request entity, but was unable to process the\n"
-               "contained instructions.</p>\n");
-    case HTTP_LOCKED:
-        return("<p>The requested resource is currently locked.\n"
-               "The lock must be released or proper identification\n"
-               "given before the method can be applied.</p>\n");
-    case HTTP_FAILED_DEPENDENCY:
-        return("<p>The method could not be performed on the resource\n"
-               "because the requested action depended on another\n"
-               "action and that other action failed.</p>\n");
-    case HTTP_INSUFFICIENT_STORAGE:
-        return("<p>The method could not be performed on the resource\n"
-               "because the server is unable to store the\n"
-               "representation needed to successfully complete the\n"
-               "request.  There is insufficient free space left in\n"
-               "your storage allocation.</p>\n");
-    case HTTP_SERVICE_UNAVAILABLE:
-        return("<p>The server is temporarily unable to service your\n"
-               "request due to maintenance downtime or capacity\n"
-               "problems. Please try again later.</p>\n");
-    case HTTP_GATEWAY_TIME_OUT:
-        return("<p>The proxy server did not receive a timely response\n"
-               "from the upstream server.</p>\n");
-    case HTTP_NOT_EXTENDED:
-        return("<p>A mandatory extension policy in the request is not\n"
-               "accepted by the server for this resource.</p>\n");
-    default:                    /* HTTP_INTERNAL_SERVER_ERROR */
-        /*
-         * This comparison to expose error-notes could be modified to
-         * use a configuration directive and export based on that
-         * directive.  For now "*" is used to designate an error-notes
-         * that is totally safe for any user to see (ie lacks paths,
-         * database passwords, etc.)
-         */
-        if (((error_notes = apr_table_get(r->notes,
-                                          "error-notes")) != NULL)
-            && (h1 = apr_table_get(r->notes, "verbose-error-to")) != NULL
-            && (strcmp(h1, "*") == 0)) {
-            return(apr_pstrcat(p, error_notes, "<p />\n", NULL));
-        }
-        else {
-            return(apr_pstrcat(p,
-                               "<p>The server encountered an internal "
-                               "error or\n"
-                               "misconfiguration and was unable to complete\n"
-                               "your request.</p>\n"
-                               "<p>Please contact the server "
-                               "administrator,\n ",
-                               ap_escape_html(r->pool,
-                                              r->server->server_admin),
-                               " and inform them of the time the "
-                               "error occurred,\n"
-                               "and anything you might have done that "
-                               "may have\n"
-                               "caused the error.</p>\n"
-                               "<p>More information about this error "
-                               "may be available\n"
-                               "in the server error log.</p>\n",
-                               NULL));
-        }
-        /*
-         * It would be nice to give the user the information they need to
-         * fix the problem directly since many users don't have access to
-         * the error_log (think University sites) even though they can easily
-         * get this error by misconfiguring an htaccess file.  However, the
-         * e error notes tend to include the real file pathname in this case,
-         * which some people consider to be a breach of privacy.  Until we
-         * can figure out a way to remove the pathname, leave this commented.
-         *
-         * if ((error_notes = apr_table_get(r->notes,
-         *                                  "error-notes")) != NULL) {
-         *     return(apr_pstrcat(p, error_notes, "<p />\n", NULL);
-         * }
-         * else {
-         *     return "";
-         * }
-         */
-    }
-}
-
-/* We should have named this send_canned_response, since it is used for any
- * response that can be generated by the server from the request record.
- * This includes all 204 (no content), 3xx (redirect), 4xx (client error),
- * and 5xx (server error) messages that have not been redirected to another
- * handler via the ErrorDocument feature.
- */
-AP_DECLARE(void) ap_send_error_response(request_rec *r, int recursive_error)
-{
-    int status = r->status;
-    int idx = ap_index_of_response(status);
-    char *custom_response;
-    const char *location = apr_table_get(r->headers_out, "Location");
-
-    /* At this point, we are starting the response over, so we have to reset
-     * this value.
-     */
-    r->eos_sent = 0;
-
-    /*
-     * It's possible that the Location field might be in r->err_headers_out
-     * instead of r->headers_out; use the latter if possible, else the
-     * former.
-     */
-    if (location == NULL) {
-        location = apr_table_get(r->err_headers_out, "Location");
-    }
-    /* We need to special-case the handling of 204 and 304 responses,
-     * since they have specific HTTP requirements and do not include a
-     * message body.  Note that being assbackwards here is not an option.
-     */
-    if (status == HTTP_NOT_MODIFIED) {
-        ap_finalize_request_protocol(r);
-        return;
-    }
-
-    if (status == HTTP_NO_CONTENT) {
-        ap_finalize_request_protocol(r);
-        return;
-    }
-
-    if (!r->assbackwards) {
-        apr_table_t *tmp = r->headers_out;
-
-        /* For all HTTP/1.x responses for which we generate the message,
-         * we need to avoid inheriting the "normal status" header fields
-         * that may have been set by the request handler before the
-         * error or redirect, except for Location on external redirects.
-         */
-        r->headers_out = r->err_headers_out;
-        r->err_headers_out = tmp;
-        apr_table_clear(r->err_headers_out);
-
-        if (ap_is_HTTP_REDIRECT(status) || (status == HTTP_CREATED)) {
-            if ((location != NULL) && *location) {
-                apr_table_setn(r->headers_out, "Location", location);
-            }
-            else {
-                location = "";   /* avoids coredump when printing, below */
-            }
-        }
-
-        r->content_languages = NULL;
-        r->content_encoding = NULL;
-        r->clength = 0;
-        r->content_type = "text/html; charset=iso-8859-1";
-
-        if ((status == HTTP_METHOD_NOT_ALLOWED)
-            || (status == HTTP_NOT_IMPLEMENTED)) {
-            apr_table_setn(r->headers_out, "Allow", make_allow(r));
-        }
-
-        if (r->header_only) {
-            ap_finalize_request_protocol(r);
-            return;
-        }
-    }
-
-    if ((custom_response = ap_response_code_string(r, idx))) {
-        /*
-         * We have a custom response output. This should only be
-         * a text-string to write back. But if the ErrorDocument
-         * was a local redirect and the requested resource failed
-         * for any reason, the custom_response will still hold the
-         * redirect URL. We don't really want to output this URL
-         * as a text message, so first check the custom response
-         * string to ensure that it is a text-string (using the
-         * same test used in ap_die(), i.e. does it start with a ").
-         * If it doesn't, we've got a recursive error, so find
-         * the original error and output that as well.
-         */
-        if (custom_response[0] == '\"') {
-            ap_rputs(custom_response + 1, r);
-            ap_finalize_request_protocol(r);
-            return;
-        }
-        /*
-         * Redirect failed, so get back the original error
-         */
-        while (r->prev && (r->prev->status != HTTP_OK))
-            r = r->prev;
-    }
-    {
-        const char *title = status_lines[idx];
-        const char *h1;
-
-        /* XXX This is a major hack that should be fixed cleanly.  The
-         * problem is that we have the information we need in a previous
-         * request, but the text of the page must be sent down the last
-         * request_rec's filter stack.  rbb
-         */
-        request_rec *rlast = r;
-        while (rlast->next) {
-            rlast = rlast->next;
-        }
-
-        /* Accept a status_line set by a module, but only if it begins
-         * with the 3 digit status code
-         */
-        if (r->status_line != NULL
-            && strlen(r->status_line) > 4       /* long enough */
-            && apr_isdigit(r->status_line[0])
-            && apr_isdigit(r->status_line[1])
-            && apr_isdigit(r->status_line[2])
-            && apr_isspace(r->status_line[3])
-            && apr_isalnum(r->status_line[4])) {
-            title = r->status_line;
-        }
-
-        /* folks decided they didn't want the error code in the H1 text */
-        h1 = &title[4];
-
-        /* can't count on a charset filter being in place here,
-         * so do ebcdic->ascii translation explicitly (if needed)
-         */
-
-        ap_rvputs_proto_in_ascii(rlast,
-                  DOCTYPE_HTML_2_0
-                  "<html><head>\n<title>", title,
-                  "</title>\n</head><body>\n<h1>", h1, "</h1>\n",
-                  NULL);
-
-        ap_rvputs_proto_in_ascii(rlast,
-                                 get_canned_error_string(status, r, location),
-                                 NULL);
-
-        if (recursive_error) {
-            ap_rvputs_proto_in_ascii(rlast, "<p>Additionally, a ",
-                      status_lines[ap_index_of_response(recursive_error)],
-                      "\nerror was encountered while trying to use an "
-                      "ErrorDocument to handle the request.</p>\n", NULL);
-        }
-        ap_rvputs_proto_in_ascii(rlast, ap_psignature("<hr />\n", r), NULL);
-        ap_rvputs_proto_in_ascii(rlast, "</body></html>\n", NULL);
-    }
-    ap_finalize_request_protocol(r);
-}
-
-/*
- * Create a new method list with the specified number of preallocated
- * extension slots.
- */
-AP_DECLARE(ap_method_list_t *) ap_make_method_list(apr_pool_t *p, int nelts)
-{
-    ap_method_list_t *ml;
-
-    ml = (ap_method_list_t *) apr_palloc(p, sizeof(ap_method_list_t));
-    ml->method_mask = 0;
-    ml->method_list = apr_array_make(p, sizeof(char *), nelts);
-    return ml;
-}
-
-/*
- * Make a copy of a method list (primarily for subrequests that may
- * subsequently change it; don't want them changing the parent's, too!).
- */
-AP_DECLARE(void) ap_copy_method_list(ap_method_list_t *dest,
-                                     ap_method_list_t *src)
-{
-    int i;
-    char **imethods;
-    char **omethods;
-
-    dest->method_mask = src->method_mask;
-    imethods = (char **) src->method_list->elts;
-    for (i = 0; i < src->method_list->nelts; ++i) {
-        omethods = (char **) apr_array_push(dest->method_list);
-        *omethods = apr_pstrdup(dest->method_list->pool, imethods[i]);
-    }
-}
-
-/*
- * Invoke a callback routine for each method in the specified list.
- */
-AP_DECLARE_NONSTD(void) ap_method_list_do(int (*comp) (void *urec,
-                                                       const char *mname,
-                                                       int mnum),
-                                          void *rec,
-                                          const ap_method_list_t *ml, ...)
-{
-    va_list vp;
-    va_start(vp, ml);
-    ap_method_list_vdo(comp, rec, ml, vp);
-    va_end(vp);
-}
-
-AP_DECLARE(void) ap_method_list_vdo(int (*comp) (void *mrec,
-                                                 const char *mname,
-                                                 int mnum),
-                                    void *rec, const ap_method_list_t *ml,
-                                    va_list vp)
-{
-
-}
-
-/*
- * Return true if the specified HTTP method is in the provided
- * method list.
- */
-AP_DECLARE(int) ap_method_in_list(ap_method_list_t *l, const char *method)
-{
-    int methnum;
-    int i;
-    char **methods;
-
-    /*
-     * If it's one of our known methods, use the shortcut and check the
-     * bitmask.
-     */
-    methnum = ap_method_number_of(method);
-    if (methnum != M_INVALID) {
-        return !!(l->method_mask & (AP_METHOD_BIT << methnum));
-    }
-    /*
-     * Otherwise, see if the method name is in the array or string names
-     */
-    if ((l->method_list == NULL) || (l->method_list->nelts == 0)) {
-        return 0;
-    }
-    methods = (char **)l->method_list->elts;
-    for (i = 0; i < l->method_list->nelts; ++i) {
-        if (strcmp(method, methods[i]) == 0) {
-            return 1;
-        }
-    }
-    return 0;
-}
-
-/*
- * Add the specified method to a method list (if it isn't already there).
- */
-AP_DECLARE(void) ap_method_list_add(ap_method_list_t *l, const char *method)
-{
-    int methnum;
-    int i;
-    const char **xmethod;
-    char **methods;
-
-    /*
-     * If it's one of our known methods, use the shortcut and use the
-     * bitmask.
-     */
-    methnum = ap_method_number_of(method);
-    l->method_mask |= (AP_METHOD_BIT << methnum);
-    if (methnum != M_INVALID) {
-        return;
-    }
-    /*
-     * Otherwise, see if the method name is in the array of string names.
-     */
-    if (l->method_list->nelts != 0) {
-        methods = (char **)l->method_list->elts;
-        for (i = 0; i < l->method_list->nelts; ++i) {
-            if (strcmp(method, methods[i]) == 0) {
-                return;
-            }
-        }
-    }
-    xmethod = (const char **) apr_array_push(l->method_list);
-    *xmethod = method;
-}
-
-/*
- * Remove the specified method from a method list.
- */
-AP_DECLARE(void) ap_method_list_remove(ap_method_list_t *l,
-                                       const char *method)
-{
-    int methnum;
-    char **methods;
-
-    /*
-     * If it's a known methods, either builtin or registered
-     * by a module, use the bitmask.
-     */
-    methnum = ap_method_number_of(method);
-    l->method_mask |= ~(AP_METHOD_BIT << methnum);
-    if (methnum != M_INVALID) {
-        return;
-    }
-    /*
-     * Otherwise, see if the method name is in the array of string names.
-     */
-    if (l->method_list->nelts != 0) {
-        register int i, j, k;
-        methods = (char **)l->method_list->elts;
-        for (i = 0; i < l->method_list->nelts; ) {
-            if (strcmp(method, methods[i]) == 0) {
-                for (j = i, k = i + 1; k < l->method_list->nelts; ++j, ++k) {
-                    methods[j] = methods[k];
-                }
-                --l->method_list->nelts;
-            }
-            else {
-                ++i;
-            }
-        }
-    }
-}
-
-/*
- * Reset a method list to be completely empty.
- */
-AP_DECLARE(void) ap_clear_method_list(ap_method_list_t *l)
-{
-    l->method_mask = 0;
-    l->method_list->nelts = 0;
-}
-
-/* Generate the human-readable hex representation of an unsigned long
- * (basically a faster version of 'sprintf("%lx")')
- */
-#define HEX_DIGITS "0123456789abcdef"
-static char *etag_ulong_to_hex(char *next, unsigned long u)
-{
-    int printing = 0;
-    int shift = sizeof(unsigned long) * 8 - 4;
-    do {
-        unsigned long next_digit = ((u >> shift) & (unsigned long)0xf);
-        if (next_digit) {
-            *next++ = HEX_DIGITS[next_digit];
-            printing = 1;
-        }
-        else if (printing) {
-            *next++ = HEX_DIGITS[next_digit];
-        }
-        shift -= 4;
-    } while (shift);
-    *next++ = HEX_DIGITS[u & (unsigned long)0xf];
-    return next;
-}
-
-#define ETAG_WEAK "W/"
-#define CHARS_PER_UNSIGNED_LONG (sizeof(unsigned long) * 2)
-/*
- * Construct an entity tag (ETag) from resource information.  If it's a real
- * file, build in some of the file characteristics.  If the modification time
- * is newer than (request-time minus 1 second), mark the ETag as weak - it
- * could be modified again in as short an interval.  We rationalize the
- * modification time we're given to keep it from being in the future.
- */
-AP_DECLARE(char *) ap_make_etag(request_rec *r, int force_weak)
-{
-    char *weak;
-    apr_size_t weak_len;
-    char *etag;
-    char *next;
-    core_dir_config *cfg;
-    etag_components_t etag_bits;
-    etag_components_t bits_added;
-
-    cfg = (core_dir_config *)ap_get_module_config(r->per_dir_config,
-                                                  &core_module);
-    etag_bits = (cfg->etag_bits & (~ cfg->etag_remove)) | cfg->etag_add;
-    
-    /*
-     * If it's a file (or we wouldn't be here) and no ETags
-     * should be set for files, return an empty string and
-     * note it for the header-sender to ignore.
-     */
-    if (etag_bits & ETAG_NONE) {
-        apr_table_setn(r->notes, "no-etag", "omit");
-        return "";
-    }
-
-    if (etag_bits == ETAG_UNSET) {
-        etag_bits = ETAG_BACKWARD;
-    }
-    /*
-     * Make an ETag header out of various pieces of information. We use
-     * the last-modified date and, if we have a real file, the
-     * length and inode number - note that this doesn't have to match
-     * the content-length (i.e. includes), it just has to be unique
-     * for the file.
-     *
-     * If the request was made within a second of the last-modified date,
-     * we send a weak tag instead of a strong one, since it could
-     * be modified again later in the second, and the validation
-     * would be incorrect.
-     */
-    if ((r->request_time - r->mtime > APR_USEC_PER_SEC) && !force_weak) {
-        weak = NULL;
-        weak_len = 0;
-    }
-    else {
-        weak = ETAG_WEAK;
-        weak_len = sizeof(ETAG_WEAK);
-    }
-
-    if (r->finfo.filetype != 0) {
-        /*
-         * ETag gets set to [W/]"inode-size-mtime", modulo any
-         * FileETag keywords.
-         */
-        etag = apr_palloc(r->pool, weak_len + sizeof("\"--\"") +
-                          3 * CHARS_PER_UNSIGNED_LONG + 1);
-        next = etag;
-        if (weak) {
-            while (*weak) {
-                *next++ = *weak++;
-            }
-        }
-        *next++ = '"';
-        bits_added = 0;
-        if (etag_bits & ETAG_INODE) {
-            next = etag_ulong_to_hex(next, (unsigned long)r->finfo.inode);
-            bits_added |= ETAG_INODE;
-        }
-        if (etag_bits & ETAG_SIZE) {
-            if (bits_added != 0) {
-                *next++ = '-';
-            }
-            next = etag_ulong_to_hex(next, (unsigned long)r->finfo.size);
-            bits_added |= ETAG_SIZE;
-        }
-        if (etag_bits & ETAG_MTIME) {
-            if (bits_added != 0) {
-                *next++ = '-';
-            }
-            next = etag_ulong_to_hex(next, (unsigned long)r->mtime);
-        }
-        *next++ = '"';
-        *next = '\0';
-    }
-    else {
-        /*
-         * Not a file document, so just use the mtime: [W/]"mtime"
-         */
-        etag = apr_palloc(r->pool, weak_len + sizeof("\"\"") +
-                          CHARS_PER_UNSIGNED_LONG + 1);
-        next = etag;
-        if (weak) {
-            while (*weak) {
-                *next++ = *weak++;
-            }
-        }
-        *next++ = '"';
-        next = etag_ulong_to_hex(next, (unsigned long)r->mtime);
-        *next++ = '"';
-        *next = '\0';
-    }
-
-    return etag;
-}
-
-AP_DECLARE(void) ap_set_etag(request_rec *r)
-{
-    char *etag;
-    char *variant_etag, *vlv;
-    int vlv_weak;
-
-    if (!r->vlist_validator) {
-        etag = ap_make_etag(r, 0);
-    }
-    else {
-        /* If we have a variant list validator (vlv) due to the
-         * response being negotiated, then we create a structured
-         * entity tag which merges the variant etag with the variant
-         * list validator (vlv).  This merging makes revalidation
-         * somewhat safer, ensures that caches which can deal with
-         * Vary will (eventually) be updated if the set of variants is
-         * changed, and is also a protocol requirement for transparent
-         * content negotiation.
-         */
-
-        /* if the variant list validator is weak, we make the whole
-         * structured etag weak.  If we would not, then clients could
-         * have problems merging range responses if we have different
-         * variants with the same non-globally-unique strong etag.
-         */
-
-        vlv = r->vlist_validator;
-        vlv_weak = (vlv[0] == 'W');
-
-        variant_etag = ap_make_etag(r, vlv_weak);
-
-        /* merge variant_etag and vlv into a structured etag */
-
-        variant_etag[strlen(variant_etag) - 1] = '\0';
-        if (vlv_weak) {
-            vlv += 3;
-        }
-        else {
-            vlv++;
-        }
-        etag = apr_pstrcat(r->pool, variant_etag, ";", vlv, NULL);
-    }
-
-    apr_table_setn(r->headers_out, "ETag", etag);
-}
-
-static int parse_byterange(char *range, apr_off_t clength,
-                           apr_off_t *start, apr_off_t *end)
-{
-    char *dash = strchr(range, '-');
-
-    if (!dash) {
-        return 0;
-    }
-
-    if ((dash == range)) {
-        /* In the form "-5" */
-        *start = clength - atol(dash + 1);
-        *end = clength - 1;
-    }
-    else {
-        *dash = '\0';
-        dash++;
-        *start = atol(range);
-        if (*dash) {
-            *end = atol(dash);
-        }
-        else {                  /* "5-" */
-            *end = clength - 1;
-        }
-    }
-
-    if (*start < 0) {
-        *start = 0;
-    }
-
-    if (*end >= clength) {
-        *end = clength - 1;
-    }
-
-    if (*start > *end) {
-        return -1;
-    }
-
-    return (*start > 0 || *end < clength);
-}
-
-static int ap_set_byterange(request_rec *r);
-
-typedef struct byterange_ctx {
-    apr_bucket_brigade *bb;
-    int num_ranges;
-    const char *orig_ct;
-} byterange_ctx;
-
-/*
- * Here we try to be compatible with clients that want multipart/x-byteranges
- * instead of multipart/byteranges (also see above), as per HTTP/1.1. We
- * look for the Request-Range header (e.g. Netscape 2 and 3) as an indication
- * that the browser supports an older protocol. We also check User-Agent
- * for Microsoft Internet Explorer 3, which needs this as well.
- */
-static int use_range_x(request_rec *r)
-{
-    const char *ua;
-    return (apr_table_get(r->headers_in, "Request-Range")
-            || ((ua = apr_table_get(r->headers_in, "User-Agent"))
-                && ap_strstr_c(ua, "MSIE 3")));
-}
-
-#define BYTERANGE_FMT "%" APR_OFF_T_FMT "-%" APR_OFF_T_FMT "/%" APR_OFF_T_FMT
-#define PARTITION_ERR_FMT "apr_brigade_partition() failed " \
-                          "[%" APR_OFF_T_FMT ",%" APR_OFF_T_FMT "]"
-
-AP_CORE_DECLARE_NONSTD(apr_status_t) ap_byterange_filter(ap_filter_t *f,
-                                                         apr_bucket_brigade *bb)
-{
-#define MIN_LENGTH(len1, len2) ((len1 > len2) ? len2 : len1)
-    request_rec *r = f->r;
-    byterange_ctx *ctx = f->ctx;
-    apr_bucket *e;
-    apr_bucket_brigade *bsend;
-    apr_off_t range_start;
-    apr_off_t range_end;
-    char *current;
-    char *bound_head;
-    apr_off_t bb_length;
-    apr_off_t clength = 0;
-    apr_status_t rv;
-    int found = 0;
-
-    if (!ctx) {
-        int num_ranges = ap_set_byterange(r);
-
-        if (num_ranges == -1) {
-            ap_remove_output_filter(f);
-            bsend = apr_brigade_create(r->pool);
-            e = ap_bucket_error_create(HTTP_RANGE_NOT_SATISFIABLE, NULL, 
-                                       r->pool);
-            APR_BRIGADE_INSERT_TAIL(bsend, e);
-            e = apr_bucket_eos_create();
-            APR_BRIGADE_INSERT_TAIL(bsend, e);
-            return ap_pass_brigade(f->next, bsend);
-        }
-        if (num_ranges == 0) {
-            ap_remove_output_filter(f);
-            return ap_pass_brigade(f->next, bb);
-        }
-
-        ctx = f->ctx = apr_pcalloc(r->pool, sizeof(*ctx));
-        ctx->num_ranges = num_ranges;
-
-        if (num_ranges > 1) {
-            ctx->orig_ct = r->content_type;
-            r->content_type = apr_pstrcat(r->pool, "multipart",
-                                          use_range_x(r) ? "/x-" : "/",
-                                          "byteranges; boundary=",
-                                          r->boundary, NULL);
-        }
-
-        /* create a brigade in case we never call ap_save_brigade() */
-        ctx->bb = apr_brigade_create(r->pool);
-    }
-
-    /* We can't actually deal with byte-ranges until we have the whole brigade
-     * because the byte-ranges can be in any order, and according to the RFC,
-     * we SHOULD return the data in the same order it was requested.
-     */
-    if (!APR_BUCKET_IS_EOS(APR_BRIGADE_LAST(bb))) {
-        ap_save_brigade(f, &ctx->bb, &bb, r->pool);
-        return APR_SUCCESS;
-    }
-
-    /* compute this once (it is an invariant) */
-    bound_head = apr_pstrcat(r->pool,
-                             CRLF "--", r->boundary,
-                             CRLF "Content-type: ",
-                             ap_make_content_type(r, ctx->orig_ct),
-                             CRLF "Content-range: bytes ",
-                             NULL);
-    ap_xlate_proto_to_ascii(bound_head, strlen(bound_head));
-
-    /* If we have a saved brigade from a previous run, concat the passed
-     * brigade with our saved brigade.  Otherwise just continue.
-     */
-    if (ctx->bb) {
-        APR_BRIGADE_CONCAT(ctx->bb, bb);
-        bb = ctx->bb;
-        ctx->bb = NULL;     /* ### strictly necessary? call brigade_destroy? */
-    }
-
-    /* It is possible that we won't have a content length yet, so we have to
-     * compute the length before we can actually do the byterange work.
-     */
-    (void) apr_brigade_length(bb, 1, &bb_length);
-    clength = (apr_off_t)bb_length;
-
-    /* this brigade holds what we will be sending */
-    bsend = apr_brigade_create(r->pool);
-
-    while ((current = ap_getword(r->pool, &r->range, ','))
-           && (rv = parse_byterange(current, clength, &range_start,
-                                    &range_end))) {
-        apr_bucket *e2;
-        apr_bucket *ec;
-
-        if (rv == -1) {
-            continue;
-        }
-
-        /* these calls to apr_brigade_partition() should theoretically
-         * never fail because of the above call to apr_brigade_length(),
-         * but what the heck, we'll check for an error anyway */
-        if ((rv = apr_brigade_partition(bb, range_start, &ec)) != APR_SUCCESS) {
-            ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
-                          PARTITION_ERR_FMT, range_start, clength);
-            continue;
-        }
-        if ((rv = apr_brigade_partition(bb, range_end+1, &e2)) != APR_SUCCESS) {
-            ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
-                          PARTITION_ERR_FMT, range_end+1, clength);
-            continue;
-        }
-
-        found = 1;
-
-        if (ctx->num_ranges > 1) {
-            char *ts;
-
-            e = apr_bucket_pool_create(bound_head,
-                                      strlen(bound_head), r->pool);
-            APR_BRIGADE_INSERT_TAIL(bsend, e);
-
-            ts = apr_psprintf(r->pool, BYTERANGE_FMT CRLF CRLF,
-                              range_start, range_end, clength);
-            ap_xlate_proto_to_ascii(ts, strlen(ts));
-            e = apr_bucket_pool_create(ts, strlen(ts), r->pool);
-            APR_BRIGADE_INSERT_TAIL(bsend, e);
-        }
-
-        do {
-            apr_bucket *foo;
-            const char *str;
-            apr_size_t len;
-
-            if (apr_bucket_copy(ec, &foo) != APR_SUCCESS) {
-                /* this shouldn't ever happen due to the call to
-                 * apr_brigade_length() above which normalizes
-                 * indeterminate-length buckets.  just to be sure,
-                 * though, this takes care of uncopyable buckets that
-                 * do somehow manage to slip through.
-                 */
-                /* XXX: check for failure? */
-                apr_bucket_read(ec, &str, &len, APR_BLOCK_READ);
-                apr_bucket_copy(ec, &foo);
-            }
-            APR_BRIGADE_INSERT_TAIL(bsend, foo);
-            ec = APR_BUCKET_NEXT(ec);
-        } while (ec != e2);
-    }
-
-    if (found == 0) {
-        ap_remove_output_filter(f);
-        r->status = HTTP_OK;
-        return HTTP_RANGE_NOT_SATISFIABLE;
-    }
-
-    if (ctx->num_ranges > 1) {
-        char *end;
-
-        /* add the final boundary */
-        end = apr_pstrcat(r->pool, CRLF "--", r->boundary, "--" CRLF, NULL);
-        ap_xlate_proto_to_ascii(end, strlen(end));
-        e = apr_bucket_pool_create(end, strlen(end), r->pool);
-        APR_BRIGADE_INSERT_TAIL(bsend, e);
-    }
-
-    e = apr_bucket_eos_create();
-    APR_BRIGADE_INSERT_TAIL(bsend, e);
-
-    /* we're done with the original content */
-    apr_brigade_destroy(bb);
-
-    /* send our multipart output */
-    return ap_pass_brigade(f->next, bsend);
-}
-
-static int ap_set_byterange(request_rec *r)
-{
-    const char *range;
-    const char *if_range;
-    const char *match;
-    const char *ct;
-    apr_off_t range_start;
-    apr_off_t range_end;
-    int num_ranges;
-
-    if (r->assbackwards) {
-        return 0;
-    }
-
-    /* is content already a single range? */
-    if (apr_table_get(r->headers_out, "Content-Range")) {
-       return 0;
-    }
-
-    /* is content already a multiple range? */
-    if ((ct = apr_table_get(r->headers_out, "Content-Type"))
-        && (!strncasecmp(ct, "multipart/byteranges", 20)
-            || !strncasecmp(ct, "multipart/x-byteranges", 22))) {
-       return 0;
-    }
-
-    /* Check for Range request-header (HTTP/1.1) or Request-Range for
-     * backwards-compatibility with second-draft Luotonen/Franks
-     * byte-ranges (e.g. Netscape Navigator 2-3).
-     *
-     * We support this form, with Request-Range, and (farther down) we
-     * send multipart/x-byteranges instead of multipart/byteranges for
-     * Request-Range based requests to work around a bug in Netscape
-     * Navigator 2-3 and MSIE 3.
-     */
-
-    if (!(range = apr_table_get(r->headers_in, "Range"))) {
-        range = apr_table_get(r->headers_in, "Request-Range");
-    }
-
-    if (!range || strncasecmp(range, "bytes=", 6)) {
-        return 0;
-    }
-
-    /* Check the If-Range header for Etag or Date.
-     * Note that this check will return false (as required) if either
-     * of the two etags are weak.
-     */
-    if ((if_range = apr_table_get(r->headers_in, "If-Range"))) {
-        if (if_range[0] == '"') {
-            if (!(match = apr_table_get(r->headers_out, "Etag"))
-                || (strcmp(if_range, match) != 0)) {
-                return 0;
-            }
-        }
-        else if (!(match = apr_table_get(r->headers_out, "Last-Modified"))
-                 || (strcmp(if_range, match) != 0)) {
-            return 0;
-        }
-    }
-
-    /* would be nice to pick this up from f->ctx */
-    ct = ap_make_content_type(r, r->content_type);
-
-    if (!ap_strchr_c(range, ',')) {
-        int rv;
-        /* A single range */
-
-        /* parse_byterange() modifies the contents, so make a copy */
-        if ((rv = parse_byterange(apr_pstrdup(r->pool, range + 6), r->clength,
-                             &range_start, &range_end)) <= 0) {
-            return rv;
-        }
-        apr_table_setn(r->headers_out, "Content-Range",
-                       apr_psprintf(r->pool, "bytes " BYTERANGE_FMT,
-                                    range_start, range_end, r->clength));
-        apr_table_setn(r->headers_out, "Content-Type", ct);
-
-        num_ranges = 1;
-    }
-    else {
-        /* a multiple range */
-
-        num_ranges = 2;
-
-        /* ### it would be nice if r->boundary was in f->ctx */
-        r->boundary = apr_psprintf(r->pool, "%qx%lx",
-                                   r->request_time, (long) getpid());
-
-        apr_table_setn(r->headers_out, "Content-Type",
-                       apr_pstrcat(r->pool,
-                                   "multipart", use_range_x(r) ? "/x-" : "/",
-                                   "byteranges; boundary=", r->boundary,
-                                   NULL));
-    }
-
-    r->status = HTTP_PARTIAL_CONTENT;
-    r->range = range + 6;
-
-    return num_ranges;
-}
diff --git a/modules/http/http_request.c b/modules/http/http_request.c
deleted file mode 100644
index ae5e9cc..0000000
--- a/modules/http/http_request.c
+++ /dev/null
@@ -1,486 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-/*
- * http_request.c: functions to get and process requests
- *
- * Rob McCool 3/21/93
- *
- * Thoroughly revamped by rst for Apache.  NB this file reads
- * best from the bottom up.
- *
- */
-
-#include "apr_strings.h"
-#include "apr_file_io.h"
-#include "apr_fnmatch.h"
-
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-#define CORE_PRIVATE
-#include "ap_config.h"
-#include "httpd.h"
-#include "http_config.h"
-#include "http_request.h"
-#include "http_core.h"
-#include "http_protocol.h"
-#include "http_log.h"
-#include "http_main.h"
-#include "util_filter.h"
-#include "util_charset.h"
-
-#include "mod_core.h"
-
-#if APR_HAVE_STDARG_H
-#include <stdarg.h>
-#endif
-
-/*****************************************************************
- *
- * Mainline request processing...
- */
-
-AP_DECLARE(void) ap_die(int type, request_rec *r)
-{
-    int error_index = ap_index_of_response(type);
-    char *custom_response = ap_response_code_string(r, error_index);
-    int recursive_error = 0;
-
-    if (type == AP_FILTER_ERROR) {
-        return;
-    }
-
-    if (type == DONE) {
-        ap_finalize_request_protocol(r);
-        return;
-    }
-
-    /*
-     * The following takes care of Apache redirects to custom response URLs
-     * Note that if we are already dealing with the response to some other
-     * error condition, we just report on the original error, and give up on
-     * any attempt to handle the other thing "intelligently"...
-     */
-
-    if (r->status != HTTP_OK) {
-        recursive_error = type;
-
-        while (r->prev && (r->prev->status != HTTP_OK))
-            r = r->prev;        /* Get back to original error */
-
-        type = r->status;
-        custom_response = NULL; /* Do NOT retry the custom thing! */
-    }
-
-    r->status = type;
-
-    /*
-     * This test is done here so that none of the auth modules needs to know
-     * about proxy authentication.  They treat it like normal auth, and then
-     * we tweak the status.
-     */
-    if (HTTP_UNAUTHORIZED == r->status && PROXYREQ_PROXY == r->proxyreq) {
-        r->status = HTTP_PROXY_AUTHENTICATION_REQUIRED;
-    }
-
-    /*
-     * If we want to keep the connection, be sure that the request body
-     * (if any) has been read.
-     */
-    if ((r->status != HTTP_NOT_MODIFIED) && (r->status != HTTP_NO_CONTENT)
-        && !ap_status_drops_connection(r->status)
-        && r->connection && (r->connection->keepalive != -1)) {
-
-        (void) ap_discard_request_body(r);
-    }
-
-    /*
-     * Two types of custom redirects --- plain text, and URLs. Plain text has
-     * a leading '"', so the URL code, here, is triggered on its absence
-     */
-
-    if (custom_response && custom_response[0] != '"') {
-
-        if (ap_is_url(custom_response)) {
-            /*
-             * The URL isn't local, so lets drop through the rest of this
-             * apache code, and continue with the usual REDIRECT handler.
-             * But note that the client will ultimately see the wrong
-             * status...
-             */
-            r->status = HTTP_MOVED_TEMPORARILY;
-            apr_table_setn(r->headers_out, "Location", custom_response);
-        }
-        else if (custom_response[0] == '/') {
-            const char *error_notes;
-            r->no_local_copy = 1;       /* Do NOT send HTTP_NOT_MODIFIED for
-                                         * error documents! */
-            /*
-             * This redirect needs to be a GET no matter what the original
-             * method was.
-             */
-            apr_table_setn(r->subprocess_env, "REQUEST_METHOD", r->method);
-
-            /*
-             * Provide a special method for modules to communicate
-             * more informative (than the plain canned) messages to us.
-             * Propagate them to ErrorDocuments via the ERROR_NOTES variable:
-             */
-            if ((error_notes = apr_table_get(r->notes, 
-                                             "error-notes")) != NULL) {
-                apr_table_setn(r->subprocess_env, "ERROR_NOTES", error_notes);
-            }
-            r->method = apr_pstrdup(r->pool, "GET");
-            r->method_number = M_GET;
-            ap_internal_redirect(custom_response, r);
-            return;
-        }
-        else {
-            /*
-             * Dumb user has given us a bad url to redirect to --- fake up
-             * dying with a recursive server error...
-             */
-            recursive_error = HTTP_INTERNAL_SERVER_ERROR;
-            ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                        "Invalid error redirection directive: %s",
-                        custom_response);
-        }
-    }
-    ap_send_error_response(r, recursive_error);
-}
-
-static void check_pipeline_flush(request_rec *r)
-{
-    /* ### if would be nice if we could PEEK without a brigade. that would
-       ### allow us to defer creation of the brigade to when we actually
-       ### need to send a FLUSH. */
-    apr_bucket_brigade *bb = apr_brigade_create(r->pool);
-
-    /* Flush the filter contents if:
-     *
-     *   1) the connection will be closed
-     *   2) there isn't a request ready to be read
-     */
-    /* ### shouldn't this read from the connection input filters? */
-    /* ### is zero correct? that means "read one line" */
-    if (!r->connection->keepalive || 
-        ap_get_brigade(r->input_filters, bb, AP_MODE_EATCRLF, 
-                       APR_NONBLOCK_READ, 0) != APR_SUCCESS) {
-        apr_bucket *e = apr_bucket_flush_create();
-
-        /* We just send directly to the connection based filters.  At
-         * this point, we know that we have seen all of the data
-         * (request finalization sent an EOS bucket, which empties all
-         * of the request filters). We just want to flush the buckets
-         * if something hasn't been sent to the network yet.
-         */
-        APR_BRIGADE_INSERT_HEAD(bb, e);
-        ap_pass_brigade(r->connection->output_filters, bb);
-    }
-}
-
-void ap_process_request(request_rec *r)
-{
-    int access_status;
-
-    access_status = ap_process_request_internal(r);
-    if (access_status == OK) {
-        access_status = ap_invoke_handler(r);
-    }
-    else if (access_status == DONE) {
-        /* e.g., something not in storage like TRACE */
-        access_status = OK;
-    }
-
-    if (access_status == OK) {
-        ap_finalize_request_protocol(r);
-    }
-    else {
-        ap_die(access_status, r);
-    }
-    
-    /*
-     * We want to flush the last packet if this isn't a pipelining connection
-     * *before* we start into logging.  Suppose that the logging causes a DNS
-     * lookup to occur, which may have a high latency.  If we hold off on
-     * this packet, then it'll appear like the link is stalled when really
-     * it's the application that's stalled.
-     */
-    check_pipeline_flush(r);
-    ap_run_log_transaction(r);
-}
-
-static apr_table_t *rename_original_env(apr_pool_t *p, apr_table_t *t)
-{
-    const apr_array_header_t *env_arr = apr_table_elts(t);
-    const apr_table_entry_t *elts = (const apr_table_entry_t *) env_arr->elts;
-    apr_table_t *new = apr_table_make(p, env_arr->nalloc);
-    int i;
-
-    for (i = 0; i < env_arr->nelts; ++i) {
-        if (!elts[i].key)
-            continue;
-        apr_table_setn(new, apr_pstrcat(p, "REDIRECT_", elts[i].key, NULL),
-                  elts[i].val);
-    }
-
-    return new;
-}
-
-static request_rec *internal_internal_redirect(const char *new_uri,
-					       request_rec *r) {
-    int access_status;
-    request_rec *new = (request_rec *) apr_pcalloc(r->pool,
-						   sizeof(request_rec));
-
-    new->connection = r->connection;
-    new->server     = r->server;
-    new->pool       = r->pool;
-
-    /*
-     * A whole lot of this really ought to be shared with http_protocol.c...
-     * another missing cleanup.  It's particularly inappropriate to be
-     * setting header_only, etc., here.
-     */
-
-    new->method          = r->method;
-    new->method_number   = r->method_number;
-    new->allowed_methods = ap_make_method_list(new->pool, 2);
-    ap_parse_uri(new, new_uri);
-
-    new->request_config = ap_create_request_config(r->pool);
-
-    new->per_dir_config = r->server->lookup_defaults;
-
-    new->prev = r;
-    r->next   = new;
-
-    /* Must have prev and next pointers set before calling create_request
-     * hook.
-     */
-    ap_run_create_request(new);
-
-    /* Inherit the rest of the protocol info... */
-
-    new->the_request = r->the_request;
-
-    new->allowed         = r->allowed;
-
-    new->status          = r->status;
-    new->assbackwards    = r->assbackwards;
-    new->header_only     = r->header_only;
-    new->protocol        = r->protocol;
-    new->proto_num       = r->proto_num;
-    new->hostname        = r->hostname;
-    new->request_time    = r->request_time;
-    new->main            = r->main;
-
-    new->headers_in      = r->headers_in;
-    new->headers_out     = apr_table_make(r->pool, 12);
-    new->err_headers_out = r->err_headers_out;
-    new->subprocess_env  = rename_original_env(r->pool, r->subprocess_env);
-    new->notes           = apr_table_make(r->pool, 5);
-    new->allowed_methods = ap_make_method_list(new->pool, 2);
-
-    new->htaccess        = r->htaccess;
-    new->no_cache        = r->no_cache;
-    new->expecting_100	 = r->expecting_100;
-    new->no_local_copy   = r->no_local_copy;
-    new->read_length     = r->read_length;     /* We can only read it once */
-    new->vlist_validator = r->vlist_validator;
-
-    new->proto_output_filters  = r->proto_output_filters;
-    new->proto_input_filters   = r->proto_input_filters;
-
-    new->output_filters  = new->proto_output_filters;
-    new->input_filters   = new->proto_input_filters;
-
-    ap_add_input_filter("HTTP_IN", NULL, new, new->connection);
-
-    apr_table_setn(new->subprocess_env, "REDIRECT_STATUS",
-	apr_psprintf(r->pool, "%d", r->status));
-
-    /*
-     * XXX: hmm.  This is because mod_setenvif and mod_unique_id really need
-     * to do their thing on internal redirects as well.  Perhaps this is a
-     * misnamed function.
-     */
-    if ((access_status = ap_run_post_read_request(new))) {
-        ap_die(access_status, new);
-        return NULL;
-    }
-
-    return new;
-}
-
-/* XXX: Is this function is so bogus and fragile that we deep-6 it? */
-AP_DECLARE(void) ap_internal_fast_redirect(request_rec *rr, request_rec *r)
-{
-    /* We need to tell POOL_DEBUG that we're guaranteeing that rr->pool
-     * will exist as long as r->pool.  Otherwise we run into troubles because
-     * some values in this request will be allocated in r->pool, and others in
-     * rr->pool.
-     */
-    apr_pool_join(r->pool, rr->pool);
-    r->mtime = rr->mtime;
-    r->uri = rr->uri;
-    r->filename = rr->filename;
-    r->canonical_filename = rr->canonical_filename;
-    r->path_info = rr->path_info;
-    r->args = rr->args;
-    r->finfo = rr->finfo;
-    r->handler = rr->handler;
-    r->content_type = rr->content_type;
-    r->content_encoding = rr->content_encoding;
-    r->content_languages = rr->content_languages;
-    r->per_dir_config = rr->per_dir_config;
-    /* copy output headers from subrequest, but leave negotiation headers */
-    r->notes = apr_table_overlay(r->pool, rr->notes, r->notes);
-    r->headers_out = apr_table_overlay(r->pool, rr->headers_out,
-                                       r->headers_out);
-    r->err_headers_out = apr_table_overlay(r->pool, rr->err_headers_out,
-                                           r->err_headers_out);
-    r->subprocess_env = apr_table_overlay(r->pool, rr->subprocess_env,
-                                          r->subprocess_env);
-
-    r->output_filters = rr->output_filters;
-    r->input_filters = rr->input_filters;
-}
-
-AP_DECLARE(void) ap_internal_redirect(const char *new_uri, request_rec *r)
-{
-    request_rec *new = internal_internal_redirect(new_uri, r);
-    int access_status = ap_process_request_internal(new);
-    if (access_status == OK) {
-        if ((access_status = ap_invoke_handler(new)) != 0) {
-            ap_die(access_status, new);
-            return;
-        }
-        ap_finalize_request_protocol(new);
-    }
-    else {
-        ap_die(access_status, new);
-    }
-}
-
-/* This function is designed for things like actions or CGI scripts, when
- * using AddHandler, and you want to preserve the content type across
- * an internal redirect.
- */
-AP_DECLARE(void) ap_internal_redirect_handler(const char *new_uri, request_rec *r)
-{
-    int access_status;
-    request_rec *new = internal_internal_redirect(new_uri, r);
-    if (r->handler)
-        new->content_type = r->content_type;
-    access_status = ap_process_request_internal(new);
-    if (access_status == OK) {
-        if ((access_status = ap_invoke_handler(new)) != 0) {
-            ap_die(access_status, new);
-            return;
-        }
-        ap_finalize_request_protocol(new);
-    }
-    else {
-        ap_die(access_status, new);
-    }
-}
-
-AP_DECLARE(void) ap_allow_methods(request_rec *r, int reset, ...) 
-{
-    const char *method;
-    va_list methods;
-
-    /*
-     * Get rid of any current settings if requested; not just the
-     * well-known methods but any extensions as well.
-     */
-    if (reset) {
-	ap_clear_method_list(r->allowed_methods);
-    }
-
-    va_start(methods, reset);
-    while ((method = va_arg(methods, const char *)) != NULL) {
-	ap_method_list_add(r->allowed_methods, method);
-    }
-}
-
-AP_DECLARE(void) ap_allow_standard_methods(request_rec *r, int reset, ...)
-{
-    int method;
-    va_list methods;
-    apr_int64_t mask;
-
-    /*
-     * Get rid of any current settings if requested; not just the
-     * well-known methods but any extensions as well.
-     */
-    if (reset) {
-        ap_clear_method_list(r->allowed_methods);
-    }
-
-    mask = 0;
-    va_start(methods, reset);
-    while ((method = va_arg(methods, int)) != -1) {
-        mask |= (AP_METHOD_BIT << method);
-    }
-    va_end(methods);
-
-    r->allowed_methods->method_mask |= mask;
-}
diff --git a/modules/http/mod_core.h b/modules/http/mod_core.h
deleted file mode 100644
index 38c2041..0000000
--- a/modules/http/mod_core.h
+++ /dev/null
@@ -1,112 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-#ifndef MOD_CORE_H
-#define MOD_CORE_H
-
-#include "apr.h"
-#include "apr_buckets.h"
-
-#include "httpd.h"
-#include "util_filter.h"
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * @package mod_core private header file
- */
-
-/*
- * These (input) filters are internal to the mod_core operation.
- */
-apr_status_t ap_http_filter(ap_filter_t *f, apr_bucket_brigade *b,
-                            ap_input_mode_t mode, apr_read_type_e block,
-                            apr_off_t readbytes);
-
-char *ap_response_code_string(request_rec *r, int error_index);
-
-/**
- * Send the minimal part of an HTTP response header.
- * @param r The current request
- * @param bb The brigade to add the header to.
- * @warning Modules should be very careful about using this, and should
- *          the default behavior.  Much of the HTTP/1.1 implementation
- *          correctness depends on the full headers.
- * @deffunc void ap_basic_http_header(request_rec *r, apr_bucket_brigade *bb)
- */
-AP_DECLARE(void) ap_basic_http_header(request_rec *r, apr_bucket_brigade *bb);
- 
-/**
- * Send an appropriate response to an http TRACE request.
- * @param r The current request
- * @tip returns DONE or the HTTP status error if it handles the TRACE,
- * or DECLINED if the request was not for TRACE.
- * request method was not TRACE.
- */
-AP_DECLARE_NONSTD(int) ap_send_http_trace(request_rec *r);
-
-/**
- * Send an appropriate response to an http OPTIONS request.
- * @param r The current request
- */
-AP_DECLARE(int) ap_send_http_options(request_rec *r);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif	/* !MOD_CORE_H */
diff --git a/modules/http/mod_mime.c b/modules/http/mod_mime.c
deleted file mode 100644
index 7eaab71..0000000
--- a/modules/http/mod_mime.c
+++ /dev/null
@@ -1,954 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-/*
- * http_mime.c: Sends/gets MIME headers for requests
- * 
- * Rob McCool
- * 
- */
-
-#include "apr.h"
-#include "apr_strings.h"
-#include "apr_lib.h"
-#include "apr_hash.h"
-
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-#include "ap_config.h"
-#include "httpd.h"
-#include "http_config.h"
-#include "http_log.h"
-#include "http_request.h"
-
-
-/* XXXX - fix me / EBCDIC
- *        there was a cludge here which would use its
- *	  own version apr_isascii(). Indicating that
- *	  on some platforms that might be needed. 
- *
- *	  #define OS_ASC(c) (c)		    -- for mere mortals 
- *     or
- *        #define OS_ASC(c) (ebcdic2ascii[c]) -- for dino's
- *
- *        #define apr_isascii(c) ((OS_ASC(c) & 0x80) == 0)
- */
-
-/* XXXXX - fix me - See note with NOT_PROXY 
- */
-
-typedef struct attrib_info {
-    char *name;
-    int   offset;
-} attrib_info;
-
-/* Information to which an extension can be mapped
- */
-typedef struct extension_info {
-    char *forced_type;                /* Additional AddTyped stuff */
-    char *encoding_type;              /* Added with AddEncoding... */
-    char *language_type;              /* Added with AddLanguage... */
-    char *handler;                    /* Added with AddHandler... */
-    char *charset_type;               /* Added with AddCharset... */
-    char *input_filters;              /* Added with AddInputFilter... */
-    char *output_filters;             /* Added with AddOutputFilter... */
-} extension_info;
-
-#define MULTIMATCH_UNSET      0
-#define MULTIMATCH_ANY        1
-#define MULTIMATCH_NEGOTIATED 2
-#define MULTIMATCH_HANDLERS   4
-#define MULTIMATCH_FILTERS    8
-
-typedef struct {
-    apr_hash_t  *extension_mappings;  /* Map from extension name to
-                                       * extension_info structure */
-
-    apr_array_header_t *remove_mappings; /* A simple list, walked once */
-
-    char *default_language;     /* Language if no AddLanguage ext found */
-
-    int multimatch;       /* Extensions to include in multiview matching
-                           * for filenames, e.g. Filters and Handlers 
-                           */
-} mime_dir_config;
-
-typedef struct param_s {
-    char *attr;
-    char *val;
-    struct param_s *next;
-} param;
-
-typedef struct {
-    char *type;
-    char *subtype;
-    param *param;
-} content_type;
-
-static char tspecial[] = {
-    '(', ')', '<', '>', '@', ',', ';', ':',
-    '\\', '"', '/', '[', ']', '?', '=',
-    '\0'
-};
-
-module AP_MODULE_DECLARE_DATA mime_module;
-
-static void *create_mime_dir_config(apr_pool_t *p, char *dummy)
-{
-    mime_dir_config *new =
-    (mime_dir_config *) apr_palloc(p, sizeof(mime_dir_config));
-
-    new->extension_mappings = NULL;
-    new->remove_mappings = NULL;
-
-    new->default_language = NULL;
-
-    new->multimatch = MULTIMATCH_UNSET;
-
-    return new;
-}
-/*
- * Overlay one hash table of extension_mappings onto another
- */
-static void *overlay_extension_mappings(apr_pool_t *p,
-                                        const void *key,
-                                        apr_ssize_t klen,
-                                        const void *overlay_val,
-                                        const void *base_val,
-                                        const void *data)
-{
-    extension_info *new_info = apr_palloc(p, sizeof(extension_info));
-    const extension_info *overlay_info = (const extension_info *)overlay_val;
-    const extension_info *base_info = (const extension_info *)base_val;
-
-    memcpy(new_info, base_info, sizeof(extension_info));
-    if (overlay_info->forced_type) {
-        new_info->forced_type = overlay_info->forced_type;
-    }
-    if (overlay_info->encoding_type) {
-        new_info->encoding_type = overlay_info->encoding_type;
-    }
-    if (overlay_info->language_type) {
-        new_info->language_type = overlay_info->language_type;
-    }
-    if (overlay_info->handler) {
-        new_info->handler = overlay_info->handler;
-    }
-    if (overlay_info->charset_type) {
-        new_info->charset_type = overlay_info->charset_type;
-    }
-    if (overlay_info->input_filters) {
-        new_info->input_filters = overlay_info->input_filters;
-    }
-    if (overlay_info->output_filters) {
-        new_info->output_filters = overlay_info->output_filters;
-    }
-
-    return new_info;
-}
-
-/* Member is the offset within an extension_info of the pointer to reset 
- */
-static void remove_items(apr_pool_t *p, apr_array_header_t *remove, 
-                         apr_hash_t *mappings)
-{
-    attrib_info *suffix = (attrib_info *) remove->elts;
-    int i;
-    for (i = 0; i < remove->nelts; i++) {
-        extension_info *exinfo =
-            (extension_info*)apr_hash_get(mappings,
-                                          suffix[i].name,
-                                          APR_HASH_KEY_STRING);
-        if (exinfo && *(const char**)((char *)exinfo + suffix[i].offset)) {
-            extension_info *copyinfo = exinfo;
-            exinfo = (extension_info*)apr_palloc(p, sizeof(*exinfo));
-            apr_hash_set(mappings, suffix[i].name, 
-                         APR_HASH_KEY_STRING, exinfo);
-            memcpy(exinfo, copyinfo, sizeof(*exinfo));
-            *(const char**)((char *)exinfo + suffix[i].offset) = NULL;
-        }
-    }
-}
-
-static void *merge_mime_dir_configs(apr_pool_t *p, void *basev, void *addv)
-{
-    mime_dir_config *base = (mime_dir_config *) basev;
-    mime_dir_config *add = (mime_dir_config *) addv;
-    mime_dir_config *new = apr_palloc(p, sizeof(mime_dir_config));
-
-    if (base->extension_mappings && add->extension_mappings) {
-        new->extension_mappings = apr_hash_merge(p, add->extension_mappings,
-                                                 base->extension_mappings,
-                                                 overlay_extension_mappings,
-                                                 NULL);
-    }
-    else {
-        if (base->extension_mappings == NULL) {
-            new->extension_mappings = add->extension_mappings;
-        }
-        else {
-            new->extension_mappings = base->extension_mappings;
-        }
-        /* We may not be merging the tables, but if we potentially will change
-         * an exinfo member, then we are about to trounce it anyways.
-         * We must have a copy for safety.
-         */
-        if (new->extension_mappings && add->remove_mappings) {
-            new->extension_mappings =
-                apr_hash_copy(p, new->extension_mappings);
-        }
-    }
-
-    if (new->extension_mappings) {
-        if (add->remove_mappings)
-            remove_items(p, add->remove_mappings, new->extension_mappings);
-    }
-    new->remove_mappings = NULL;
-
-    new->default_language = add->default_language ?
-        add->default_language : base->default_language;
-
-    new->multimatch = (add->multimatch != MULTIMATCH_UNSET) ?
-        add->multimatch : base->multimatch;
-
-    return new;
-}
-
-static const char *add_extension_info(cmd_parms *cmd, void *m_, 
-                                      const char *value_, const char* ext)
-{
-    mime_dir_config *m=m_;
-    extension_info *exinfo;
-    int offset = (int) (long) cmd->info;
-    char *key = apr_pstrdup(cmd->temp_pool, ext);
-    char *value = apr_pstrdup(cmd->pool, value_);
-    ap_str_tolower(value);
-#ifdef CASE_BLIND_FILESYSTEM
-    ap_str_tolower(key);
-#endif
-    if (*key == '.')
-	++key;
-    if (!m->extension_mappings) {
-        m->extension_mappings = apr_hash_make(cmd->pool);
-        exinfo = NULL;
-    }
-    else
-        exinfo = (extension_info*)apr_hash_get(m->extension_mappings, key,
-                                               APR_HASH_KEY_STRING);
-    if (!exinfo) {
-        exinfo = apr_pcalloc(cmd->pool, sizeof(extension_info));
-        key = apr_pstrdup(cmd->pool, key);
-        apr_hash_set(m->extension_mappings, key,
-                     APR_HASH_KEY_STRING, exinfo);
-    }
-    *(const char**)((char *)exinfo + offset) = value;
-    return NULL;
-}
-
-/*
- * Note handler names are un-added with each per_dir_config merge.
- * This keeps the association from being inherited, but not
- * from being re-added at a subordinate level.
- */
-static const char *remove_extension_info(cmd_parms *cmd, void *m_, 
-                                         const char *ext)
-{
-    mime_dir_config *m = (mime_dir_config *) m_;
-    attrib_info *suffix;
-    if (*ext == '.')
-        ++ext;
-    if (!m->remove_mappings) {
-        m->remove_mappings = apr_array_make(cmd->pool, 4, sizeof(*suffix));
-    }
-    suffix = (attrib_info *) apr_array_push(m->remove_mappings);
-    suffix->name = apr_pstrdup(cmd->pool, ext);
-#ifdef CASE_BLIND_FILESYSTEM
-    ap_str_tolower(suffix->name);
-#endif
-    suffix->offset = (int) (long) cmd->info;
-    return NULL;
-}
-
-/* The sole bit of server configuration that the MIME module has is
- * the name of its config file, so...
- */
-
-static const char *set_types_config(cmd_parms *cmd, void *dummy,
-				    const char *arg)
-{
-    ap_set_module_config(cmd->server->module_config, &mime_module,
-			 (void *)arg);
-    return NULL;
-}
-
-static const char *multiviews_match(cmd_parms *cmd, void *m_, 
-                                    const char *include)
-{
-    mime_dir_config *m = (mime_dir_config *) m_;
-
-    if (strcasecmp(include, "Any") == 0) {
-        if (m->multimatch && (m->multimatch & ~MULTIMATCH_ANY))
-            return "Any is incompatible with NegotiatedOnly, "
-                   "Filters and Handlers";
-        m->multimatch |= MULTIMATCH_ANY;
-    }
-    else if (strcasecmp(include, "NegotiatedOnly") == 0) {
-        if (m->multimatch && (m->multimatch & ~MULTIMATCH_NEGOTIATED))
-            return "Any is incompatible with NegotiatedOnly, "
-                   "Filters and Handlers";
-        m->multimatch |= MULTIMATCH_NEGOTIATED;
-    }
-    else if (strcasecmp(include, "Filters") == 0) {
-        if (m->multimatch && (m->multimatch & (MULTIMATCH_NEGOTIATED 
-                                             | MULTIMATCH_ANY)))
-            return "Filters is incompatible with Any and NegotiatedOnly";
-        m->multimatch |= MULTIMATCH_FILTERS;
-    }
-    else if (strcasecmp(include, "Handlers") == 0) {
-        if (m->multimatch && (m->multimatch & (MULTIMATCH_NEGOTIATED 
-                                             | MULTIMATCH_ANY)))
-            return "Handlers is incompatible with Any and NegotiatedOnly";
-        m->multimatch |= MULTIMATCH_HANDLERS;
-    }
-    else 
-        return "Unrecognized option";
-
-    return NULL;
-}
-
-static const command_rec mime_cmds[] =
-{
-AP_INIT_ITERATE2("AddCharset", add_extension_info, 
-         (void *)APR_XtOffsetOf(extension_info, charset_type), OR_FILEINFO,
-     "a charset (e.g., iso-2022-jp), followed by one or more file extensions"),
-AP_INIT_ITERATE2("AddEncoding", add_extension_info, 
-         (void *)APR_XtOffsetOf(extension_info, encoding_type), OR_FILEINFO,
-     "an encoding (e.g., gzip), followed by one or more file extensions"),
-AP_INIT_ITERATE2("AddHandler", add_extension_info, 
-         (void *)APR_XtOffsetOf(extension_info, handler), OR_FILEINFO,
-     "a handler name followed by one or more file extensions"),
-AP_INIT_ITERATE2("AddInputFilter", add_extension_info, 
-         (void *)APR_XtOffsetOf(extension_info, input_filters), OR_FILEINFO,
-     "input filter name (or ; delimited names) followed by one or more file extensions"),
-AP_INIT_ITERATE2("AddLanguage", add_extension_info, 
-         (void *)APR_XtOffsetOf(extension_info, language_type), OR_FILEINFO,
-     "a language (e.g., fr), followed by one or more file extensions"),
-AP_INIT_ITERATE2("AddOutputFilter", add_extension_info, 
-         (void *)APR_XtOffsetOf(extension_info, output_filters), OR_FILEINFO, 
-     "output filter name (or ; delimited names) followed by one or more file extensions"),
-AP_INIT_ITERATE2("AddType", add_extension_info, 
-         (void *)APR_XtOffsetOf(extension_info, forced_type), OR_FILEINFO, 
-     "a mime type followed by one or more file extensions"),
-AP_INIT_TAKE1("DefaultLanguage", ap_set_string_slot,
-       (void*)APR_XtOffsetOf(mime_dir_config, default_language), OR_FILEINFO,
-     "language to use for documents with no other language file extension"),
-AP_INIT_ITERATE("MultiviewsMatch", multiviews_match, NULL, OR_FILEINFO,
-     "NegotiatedOnly (default), Handlers and/or Filters, or Any"),
-AP_INIT_ITERATE("RemoveCharset", remove_extension_info, 
-        (void *)APR_XtOffsetOf(extension_info, charset_type), OR_FILEINFO,
-     "one or more file extensions"),
-AP_INIT_ITERATE("RemoveEncoding", remove_extension_info, 
-        (void *)APR_XtOffsetOf(extension_info, encoding_type), OR_FILEINFO,
-     "one or more file extensions"),
-AP_INIT_ITERATE("RemoveHandler", remove_extension_info, 
-        (void *)APR_XtOffsetOf(extension_info, handler), OR_FILEINFO,
-     "one or more file extensions"),
-AP_INIT_ITERATE("RemoveInputFilter", remove_extension_info, 
-        (void *)APR_XtOffsetOf(extension_info, input_filters), OR_FILEINFO,
-     "one or more file extensions"),
-AP_INIT_ITERATE("RemoveLanguage", remove_extension_info, 
-        (void *)APR_XtOffsetOf(extension_info, language_type), OR_FILEINFO,
-     "one or more file extensions"),
-AP_INIT_ITERATE("RemoveOutputFilter", remove_extension_info, 
-        (void *)APR_XtOffsetOf(extension_info, output_filters), OR_FILEINFO,
-     "one or more file extensions"),
-AP_INIT_ITERATE("RemoveType", remove_extension_info, 
-        (void *)APR_XtOffsetOf(extension_info, forced_type), OR_FILEINFO,
-     "one or more file extensions"),
-AP_INIT_TAKE1("TypesConfig", set_types_config, NULL, RSRC_CONF,
-     "the MIME types config file"),
-    {NULL}
-};
-
-static apr_hash_t *mime_type_extensions;
-
-static int mime_post_config(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *s)
-{
-    ap_configfile_t *f;
-    char l[MAX_STRING_LEN];
-    const char *types_confname = ap_get_module_config(s->module_config, &mime_module);
-    apr_status_t status;
-
-    if (!types_confname)
-        types_confname = AP_TYPES_CONFIG_FILE;
-
-    types_confname = ap_server_root_relative(p, types_confname);
-    if (!types_confname) {
-        ap_log_error(APLOG_MARK, APLOG_ERR, APR_EBADPATH, s,
-		     "Invalid mime types config path %s", 
-                     (const char *)ap_get_module_config(s->module_config, &mime_module));
-        return HTTP_INTERNAL_SERVER_ERROR;
-    }
-    if ((status = ap_pcfg_openfile(&f, ptemp, types_confname)) 
-                != APR_SUCCESS) {
-        ap_log_error(APLOG_MARK, APLOG_ERR, status, s,
-		     "could not open mime types config file %s.", 
-                     types_confname);
-        return HTTP_INTERNAL_SERVER_ERROR;
-    }
-
-    mime_type_extensions = apr_hash_make(p);
-
-    while (!(ap_cfg_getline(l, MAX_STRING_LEN, f))) {
-        const char *ll = l, *ct;
-
-        if (l[0] == '#')
-            continue;
-        ct = ap_getword_conf(p, &ll);
-
-        while (ll[0]) {
-            char *ext = ap_getword_conf(p, &ll);
-            ap_str_tolower(ext);   /* ??? */
-            apr_hash_set(mime_type_extensions, ext, APR_HASH_KEY_STRING, ct);
-        }
-    }
-    ap_cfg_closefile(f);
-    return OK;
-}
-
-static const char *zap_sp(const char *s)
-{
-    if (s == NULL) {
-	return (NULL);
-    }
-    if (*s == '\0') {
-	return (s);
-    }
-
-    /* skip prefixed white space */
-    for (; *s == ' ' || *s == '\t' || *s == '\n'; s++);
-
-    return (s);
-}
-
-static char *zap_sp_and_dup(apr_pool_t *p, const char *start,
-                            const char *end, apr_size_t *len)
-{
-    while ((start < end) && apr_isspace(*start)) {
-        start++;
-    }
-    while ((end > start) && apr_isspace(*(end - 1))) {
-        end--;
-    }
-    if (len) {
-        *len = end - start;
-    }
-    return apr_pstrmemdup(p, start, end - start);
-}
-
-static int is_token(char c)
-{
-    int res;
-
-    res = (apr_isascii(c) && apr_isgraph(c)
-	   && (strchr(tspecial, c) == NULL)) ? 1 : -1;
-    return res;
-}
-
-static int is_qtext(char c)
-{
-    int res;
-
-    res = (apr_isascii(c) && (c != '"') && (c != '\\') && (c != '\n'))
-	? 1 : -1;
-    return res;
-}
-
-static int is_quoted_pair(const char *s)
-{
-    int res = -1;
-    int c;
-
-    if (((s + 1) != NULL) && (*s == '\\')) {
-	c = (int) *(s + 1);
-	if (apr_isascii(c)) {
-	    res = 1;
-	}
-    }
-    return (res);
-}
-
-static content_type *analyze_ct(request_rec *r, const char *s)
-{
-    const char *cp, *mp, *tmp;
-    char *attribute, *value;
-    int quoted = 0;
-    server_rec * ss = r->server;
-    apr_pool_t  * p = r->pool;
-
-    content_type *ctp;
-    param *pp, *npp;
-
-    /* initialize ctp */
-    ctp = (content_type *) apr_palloc(p, sizeof(content_type));
-    ctp->type = NULL;
-    ctp->subtype = NULL;
-    ctp->param = NULL;
-
-    mp = s;
-
-    /* getting a type */
-    if (!(cp = ap_strchr_c(mp, '/'))) {
-	ap_log_error(APLOG_MARK, APLOG_WARNING, 0, ss,
-		     "mod_mime: analyze_ct: cannot get media type from '%s'",
-		     (const char *) mp);
-	return (NULL);
-    }
-    ctp->type = zap_sp_and_dup(p, mp, cp, NULL);
-    if (ctp->type == NULL || *(ctp->type) == '\0') {
-	ap_log_error(APLOG_MARK, APLOG_WARNING, 0, ss,
-		     "Cannot get media subtype.");
-	return (NULL);
-    }
-    for (tmp = ctp->type; *tmp; tmp++) {
-        if ((*tmp == ';') || (*tmp == ' ') || (*tmp == '\t')) {
-            ap_log_error(APLOG_MARK, APLOG_WARNING, 0, ss,
-                         "Cannot get media subtype.");
-            return (NULL);
-        }
-    }
-
-    /* getting a subtype */
-    cp++;
-    mp = cp;
-
-    for (; *cp != ';' && *cp != '\0'; cp++)
-        continue;
-    ctp->subtype = zap_sp_and_dup(p, mp, cp, NULL);
-    if ((ctp->subtype == NULL) || (*(ctp->subtype) == '\0')) {
-	ap_log_error(APLOG_MARK, APLOG_WARNING, 0, ss,
-		     "Cannot get media subtype.");
-	return (NULL);
-    }
-    for (tmp = ctp->subtype; *tmp; tmp++) {
-        if ((*tmp == ' ') || (*tmp == '\t')) {
-            ap_log_error(APLOG_MARK, APLOG_WARNING, 0, ss,
-                         "Cannot get media subtype.");
-            return (NULL);
-        }
-    }
-    if (*cp == '\0') {
-        return (ctp);
-    }
-
-    /* getting parameters */
-    cp++;
-    cp = zap_sp(cp);
-    if (cp == NULL || *cp == '\0') {
-	ap_log_error(APLOG_MARK, APLOG_WARNING, 0, ss,
-		     "Cannot get media parameter.");
-	return (NULL);
-    }
-    mp = cp;
-    attribute = NULL;
-    value = NULL;
-
-    while (cp != NULL && *cp != '\0') {
-	if (attribute == NULL) {
-	    if (is_token(*cp) > 0) {
-		cp++;
-		continue;
-	    }
-	    else if (*cp == ' ' || *cp == '\t' || *cp == '\n') {
-		cp++;
-		continue;
-	    }
-	    else if (*cp == '=') {
-		attribute = zap_sp_and_dup(p, mp, cp, NULL);
-		if (attribute == NULL || *attribute == '\0') {
-		    ap_log_error(APLOG_MARK, APLOG_WARNING, 0, ss,
-				 "Cannot get media parameter.");
-		    return (NULL);
-		}
-		cp++;
-		cp = zap_sp(cp);
-		if (cp == NULL || *cp == '\0') {
-		    ap_log_error(APLOG_MARK, APLOG_WARNING, 0, ss,
-				 "Cannot get media parameter.");
-		    return (NULL);
-		}
-		mp = cp;
-		continue;
-	    }
-	    else {
-		ap_log_error(APLOG_MARK, APLOG_WARNING, 0, ss,
-			     "Cannot get media parameter.");
-		return (NULL);
-	    }
-	}
-	else {
-	    if (mp == cp) {
-		if (*cp == '"') {
-		    quoted = 1;
-		    cp++;
-		}
-		else {
-		    quoted = 0;
-		}
-	    }
-	    if (quoted > 0) {
-		while (quoted && *cp != '\0') {
-		    if (is_qtext(*cp) > 0) {
-			cp++;
-		    }
-		    else if (is_quoted_pair(cp) > 0) {
-			cp += 2;
-		    }
-		    else if (*cp == '"') {
-			cp++;
-			while (*cp == ' ' || *cp == '\t' || *cp == '\n') {
-			    cp++;
-			}
-			if (*cp != ';' && *cp != '\0') {
-			    ap_log_error(APLOG_MARK, APLOG_WARNING, 0, ss,
-					 "Cannot get media parameter.");
-			    return(NULL);
-			}
-			quoted = 0;
-		    }
-		    else {
-			ap_log_error(APLOG_MARK, APLOG_WARNING, 0, ss,
-				     "Cannot get media parameter.");
-			return (NULL);
-		    }
-		}
-	    }
-	    else {
-		while (1) {
-		    if (is_token(*cp) > 0) {
-			cp++;
-		    }
-		    else if (*cp == '\0' || *cp == ';') {
-			break;
-		    }
-		    else {
-			ap_log_error(APLOG_MARK, APLOG_WARNING, 0, ss,
-				     "Cannot get media parameter.");
-			return (NULL);
-		    }
-		}
-	    }
-	    value = zap_sp_and_dup(p, mp, cp, NULL);
-	    if (value == NULL || *value == '\0') {
-		ap_log_error(APLOG_MARK, APLOG_WARNING, 0, ss,
-			     "Cannot get media parameter.");
-		return (NULL);
-	    }
-
-	    pp = apr_palloc(p, sizeof(param));
-	    pp->attr = attribute;
-	    pp->val = value;
-	    pp->next = NULL;
-
-	    if (ctp->param == NULL) {
-		ctp->param = pp;
-	    }
-	    else {
-		npp = ctp->param;
-		while (npp->next) {
-		    npp = npp->next;
-		}
-		npp->next = pp;
-	    }
-	    quoted = 0;
-	    attribute = NULL;
-	    value = NULL;
-	    if (*cp == '\0') {
-		break;
-	    }
-	    cp++;
-	    mp = cp;
-	}
-    }
-    return (ctp);
-}
-
-/*
- * find_ct is the hook routine for determining content-type and other
- * MIME-related metadata.  It assumes that r->filename has already been
- * set and stat has been called for r->finfo.  It also assumes that the
- * non-path base file name is not the empty string unless it is a dir.
- */
-static int find_ct(request_rec *r)
-{
-    mime_dir_config *conf;
-    apr_array_header_t *exception_list;
-    char *ext;
-    const char *fn, *type, *charset = NULL;
-    int found_metadata = 0;
-
-    if (r->finfo.filetype == APR_DIR) {
-        r->content_type = DIR_MAGIC_TYPE;
-        return OK;
-    }
-
-    conf = (mime_dir_config *) ap_get_module_config(r->per_dir_config,
-                                                    &mime_module);
-    exception_list = apr_array_make(r->pool, 2, sizeof(char *));
-
-    /* Always drop the path leading up to the file name.
-     */
-    if ((fn = strrchr(r->filename, '/')) == NULL)
-        fn = r->filename;
-    else
-        ++fn;
-
-    /* The exception list keeps track of those filename components that
-     * are not associated with extensions indicating metadata.
-     * The base name is always the first exception (i.e., "txt.html" has
-     * a basename of "txt" even though it might look like an extension).
-     */
-    ext = ap_getword(r->pool, &fn, '.');
-    *((const char **) apr_array_push(exception_list)) = ext;
-
-    /* Parse filename extensions which can be in any order 
-     */
-    while (*fn && (ext = ap_getword(r->pool, &fn, '.'))) {
-        const extension_info *exinfo = NULL;
-        int found;
-
-        if (*ext == '\0')  /* ignore empty extensions "bad..html" */
-            continue;
-
-        found = 0;
-
-#ifdef CASE_BLIND_FILESYSTEM
-        /* We have a basic problem that folks on case-crippled systems
-         * expect anything and everything to succeed
-         */
-        ap_str_tolower(ext);
-#endif
-
-        if (conf->extension_mappings != NULL) {
-            exinfo = (extension_info*)apr_hash_get(conf->extension_mappings,
-                                                   ext, APR_HASH_KEY_STRING);
-        }
-
-        if (exinfo == NULL || !exinfo->forced_type) {
-            if ((type = apr_hash_get(mime_type_extensions, ext,
-                                     APR_HASH_KEY_STRING)) != NULL) {
-                r->content_type = type;
-                found = 1;
-            }
-        }
-
-        if (exinfo != NULL) {
-
-            if (exinfo->forced_type) {
-                r->content_type = exinfo->forced_type;
-                found = 1;
-            }
-
-            if (exinfo->charset_type) {
-                charset = exinfo->charset_type;
-                found = 1;
-            }
-            if (exinfo->language_type) {
-                if (!r->content_languages)
-                    r->content_languages = apr_array_make(r->pool, 2,
-                                                          sizeof(char *));
-                    *((const char **) apr_array_push(r->content_languages))
-                                          = exinfo->language_type;
-                found = 1;
-            }
-            if (exinfo->encoding_type) {
-                if (!r->content_encoding)
-                    r->content_encoding = exinfo->encoding_type;
-                else {
-                    /* XXX should eliminate duplicate entities */
-                    r->content_encoding = apr_pstrcat(r->pool,
-                                                      r->content_encoding,
-                                                      ", ",
-                                                      exinfo->encoding_type,
-                                                      NULL);
-                }
-                found = 1;
-            }
-            /* The following extensions are not 'Found'.  That is, they don't
-             * make any contribution to metadata negotation, so they must have
-             * been explicitly requested by name. 
-             */
-            if (exinfo->handler && r->proxyreq == PROXYREQ_NONE) {
-                r->handler = exinfo->handler;
-                if (conf->multimatch & MULTIMATCH_HANDLERS)
-                    found = 1;
-            }
-            /* XXX Two significant problems; 1, we don't check to see if we are
-             * setting redundant filters.    2, we insert these in the types config
-             * hook, which may be too early (dunno.)
-             */
-            if (exinfo->input_filters && r->proxyreq == PROXYREQ_NONE) {
-                const char *filter, *filters = exinfo->input_filters;
-                while (*filters 
-                    && (filter = ap_getword(r->pool, &filters, ';'))) {
-                    ap_add_input_filter(filter, NULL, r, r->connection);
-                }
-                if (conf->multimatch & MULTIMATCH_FILTERS)
-                    found = 1;
-            }
-            if (exinfo->output_filters && r->proxyreq == PROXYREQ_NONE) {
-                const char *filter, *filters = exinfo->output_filters;
-                while (*filters 
-                    && (filter = ap_getword(r->pool, &filters, ';'))) {
-                    ap_add_output_filter(filter, NULL, r, r->connection);
-                }
-                if (conf->multimatch & MULTIMATCH_FILTERS)
-                    found = 1;
-            }
-        }
-
-        if (found || (conf->multimatch & MULTIMATCH_ANY))
-            found_metadata = 1;
-        else
-            *((const char **) apr_array_push(exception_list)) = ext;
-    }
-
-    /*
-     * Need to set a notes entry on r for unrecognized elements.
-     * Somebody better claim them!  If we did absolutely nothing,
-     * skip the notes to alert mod_negotiation we are clueless.
-     */
-    if (found_metadata) {
-        apr_table_setn(r->notes, "ap-mime-exceptions-list", 
-                       (void *)exception_list);
-    }
-
-    if (r->content_type) {
-	content_type *ctp;
-	int override = 0;
-
-	if ((ctp = analyze_ct(r, r->content_type))) {
-	    param *pp = ctp->param;
-	    r->content_type = apr_pstrcat(r->pool, ctp->type, "/",
-					 ctp->subtype, NULL);
-	    while (pp != NULL) {
-		if (charset && !strcmp(pp->attr, "charset")) {
-		    if (!override) {
-			r->content_type = apr_pstrcat(r->pool, r->content_type,
-						     "; charset=", charset,
-						     NULL);
-			override = 1;
-		    }
-		}
-		else {
-		    r->content_type = apr_pstrcat(r->pool, r->content_type,
-						 "; ", pp->attr,
-						 "=", pp->val,
-						 NULL);
-		}
-		pp = pp->next;
-	    }
-	    if (charset && !override) {
-		r->content_type = apr_pstrcat(r->pool, r->content_type,
-					     "; charset=", charset,
-					     NULL);
-	    }
-	}
-    }
-
-    /* Set default language, if none was specified by the extensions
-     * and we have a DefaultLanguage setting in force
-     */
-
-    if (!r->content_languages && conf->default_language) {
-        const char **new;
-
-        if (!r->content_languages)
-            r->content_languages = apr_array_make(r->pool, 2, sizeof(char *));
-        new = (const char **) apr_array_push(r->content_languages);
-        *new = conf->default_language;
-    }
-
-    if (!r->content_type)
-        return DECLINED;
-
-    return OK;
-}
-
-static void register_hooks(apr_pool_t *p)
-{
-    ap_hook_post_config(mime_post_config,NULL,NULL,APR_HOOK_MIDDLE);
-    ap_hook_type_checker(find_ct,NULL,NULL,APR_HOOK_MIDDLE);
- /* 
-  * this hook seems redundant ... is there any reason a type checker isn't
-  * allowed to do this already?  I'd think that fixups in general would be
-  * the last opportunity to get the filters right.
-  * ap_hook_insert_filter(mime_insert_filters,NULL,NULL,APR_HOOK_MIDDLE);
-  */
-}
-
-module AP_MODULE_DECLARE_DATA mime_module = {
-    STANDARD20_MODULE_STUFF,
-    create_mime_dir_config,	/* create per-directory config structure */
-    merge_mime_dir_configs,	/* merge per-directory config structures */
-    NULL,			/* create per-server config structure */
-    NULL,			/* merge per-server config structures */
-    mime_cmds,			/* command apr_table_t */
-    register_hooks		/* register hooks */
-};
diff --git a/modules/http/mod_mime.dsp b/modules/http/mod_mime.dsp
deleted file mode 100644
index 4af27fb..0000000
--- a/modules/http/mod_mime.dsp
+++ /dev/null
@@ -1,128 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mod_mime" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mod_mime - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "mod_mime.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "mod_mime.mak" CFG="mod_mime - Win32 Release"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "mod_mime - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mod_mime - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "mod_mime - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /O2 /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Release\mod_mime" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /map /machine:I386 /out:"Release/mod_mime.so" /base:@..\..\os\win32\BaseAddr.ref,mod_mime
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /map /machine:I386 /out:"Release/mod_mime.so" /base:@..\..\os\win32\BaseAddr.ref,mod_mime
-
-!ELSEIF  "$(CFG)" == "mod_mime - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Debug\mod_mime" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /map /debug /machine:I386 /out:"Debug/mod_mime.so" /base:@..\..\os\win32\BaseAddr.ref,mod_mime
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /map /debug /machine:I386 /out:"Debug/mod_mime.so" /base:@..\..\os\win32\BaseAddr.ref,mod_mime
-
-!ENDIF 
-
-# Begin Target
-
-# Name "mod_mime - Win32 Release"
-# Name "mod_mime - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\mod_mime.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mod_mime.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\build\win32\win32ver.awk
-
-!IF  "$(CFG)" == "mod_mime - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_mime.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ../../build/win32/win32ver.awk mod_mime  "mime_module for Apache" ../../include/ap_release.h > .\mod_mime.rc
-
-# End Custom Build
-
-!ELSEIF  "$(CFG)" == "mod_mime - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_mime.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ../../build/win32/win32ver.awk mod_mime  "mime_module for Apache" ../../include/ap_release.h > .\mod_mime.rc
-
-# End Custom Build
-
-!ENDIF 
-
-# End Source File
-# End Target
-# End Project
diff --git a/modules/http/mod_mime.exp b/modules/http/mod_mime.exp
deleted file mode 100644
index f2e38db..0000000
--- a/modules/http/mod_mime.exp
+++ /dev/null
@@ -1 +0,0 @@
-mime_module
diff --git a/modules/loggers/.cvsignore b/modules/loggers/.cvsignore
deleted file mode 100644
index aeabff3..0000000
--- a/modules/loggers/.cvsignore
+++ /dev/null
@@ -1,16 +0,0 @@
-.deps
-.libs
-*.la
-modules.mk
-Makefile
-*.lo
-*.slo
-*.so
-*.x
-Debug
-Release
-*.plg
-*.aps
-*.dep
-*.mak
-*.rc
diff --git a/modules/loggers/.indent.pro b/modules/loggers/.indent.pro
deleted file mode 100644
index a9fbe9f..0000000
--- a/modules/loggers/.indent.pro
+++ /dev/null
@@ -1,54 +0,0 @@
--i4 -npsl -di0 -br -nce -d0 -cli0 -npcs -nfc1
--TBUFF
--TFILE
--TTRANS
--TUINT4
--T_trans
--Tallow_options_t
--Tapache_sfio
--Tarray_header
--Tbool_int
--Tbuf_area
--Tbuff_struct
--Tbuffy
--Tcmd_how
--Tcmd_parms
--Tcommand_rec
--Tcommand_struct
--Tconn_rec
--Tcore_dir_config
--Tcore_server_config
--Tdir_maker_func
--Tevent
--Tglobals_s
--Thandler_func
--Thandler_rec
--Tjoblist_s
--Tlisten_rec
--Tmerger_func
--Tmode_t
--Tmodule
--Tmodule_struct
--Tmutex
--Tn_long
--Tother_child_rec
--Toverrides_t
--Tparent_score
--Tpid_t
--Tpiped_log
--Tpool
--Trequest_rec
--Trequire_line
--Trlim_t
--Tscoreboard
--Tsemaphore
--Tserver_addr_rec
--Tserver_rec
--Tserver_rec_chain
--Tshort_score
--Ttable
--Ttable_entry
--Tthread
--Tu_wide_int
--Tvtime_t
--Twide_int
diff --git a/modules/loggers/Makefile.in b/modules/loggers/Makefile.in
deleted file mode 100644
index 167b343..0000000
--- a/modules/loggers/Makefile.in
+++ /dev/null
@@ -1,3 +0,0 @@
-
-include $(top_srcdir)/build/special.mk
-
diff --git a/modules/loggers/config.m4 b/modules/loggers/config.m4
deleted file mode 100644
index 8d4304a..0000000
--- a/modules/loggers/config.m4
+++ /dev/null
@@ -1,9 +0,0 @@
-dnl modules enabled in this directory by default
-
-dnl APACHE_MODULE(name, helptext[, objects[, structname[, default[, config]]]])
-
-APACHE_MODPATH_INIT(loggers)
-	
-APACHE_MODULE(log_config, logging configuration, , , yes)
-
-APACHE_MODPATH_FINISH
diff --git a/modules/loggers/mod_log_config.c b/modules/loggers/mod_log_config.c
deleted file mode 100644
index 37f7b0e..0000000
--- a/modules/loggers/mod_log_config.c
+++ /dev/null
@@ -1,1267 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-/*
- * Modified by djm@va.pubnix.com:
- * If no TransferLog is given explicitly, decline to log.
- *
- * This is module implements the TransferLog directive (same as the
- * common log module), and additional directives, LogFormat and CustomLog.
- *
- *
- * Syntax:
- *
- *    TransferLog fn      Logs transfers to fn in standard log format, unless
- *                        a custom format is set with LogFormat
- *    LogFormat format    Set a log format from TransferLog files
- *    CustomLog fn format
- *                        Log to file fn with format given by the format
- *                        argument
- *
- *    CookieLog fn        For backwards compatability with old Cookie
- *                        logging module - now deprecated.
- *
- * There can be any number of TransferLog and CustomLog
- * commands. Each request will be logged to _ALL_ the
- * named files, in the appropriate format.
- *
- * If no TransferLog or CustomLog directive appears in a VirtualHost,
- * the request will be logged to the log file(s) defined outside
- * the virtual host section. If a TransferLog or CustomLog directive
- * appears in the VirtualHost section, the log files defined outside
- * the VirtualHost will _not_ be used. This makes this module compatable
- * with the CLF and config log modules, where the use of TransferLog
- * inside the VirtualHost section overrides its use outside.
- * 
- * Examples:
- *
- *    TransferLog    logs/access_log
- *    <VirtualHost>
- *    LogFormat      "... custom format ..."
- *    TransferLog    log/virtual_only
- *    CustomLog      log/virtual_useragents "%t %{user-agent}i"
- *    </VirtualHost>
- *
- * This will log using CLF to access_log any requests handled by the
- * main server, while any requests to the virtual host will be logged
- * with the "... custom format..." to virtual_only _AND_ using
- * the custom user-agent log to virtual_useragents.
- *
- * Note that the NCSA referer and user-agent logs are easily added with
- * CustomLog:
- *   CustomLog   logs/referer  "%{referer}i -> %U"
- *   CustomLog   logs/agent    "%{user-agent}i"
- *
- * RefererIgnore functionality can be obtained with conditional
- * logging (SetEnvIf and CustomLog ... env=!VAR).
- *
- * But using this method allows much easier modification of the
- * log format, e.g. to log hosts along with UA:
- *   CustomLog   logs/referer "%{referer}i %U %h"
- *
- * The argument to LogFormat and CustomLog is a string, which can include
- * literal characters copied into the log files, and '%' directives as
- * follows:
- *
- * %...B:  bytes sent, excluding HTTP headers.
- * %...b:  bytes sent, excluding HTTP headers in CLF format, i.e. a '-'
- *         when no bytes where sent (rather than a '0'.
- * %...{FOOBAR}C:  The contents of the HTTP cookie FOOBAR
- * %...{FOOBAR}e:  The contents of the environment variable FOOBAR
- * %...f:  filename
- * %...h:  remote host
- * %...a:  remote IP-address
- * %...A:  local IP-address
- * %...{Foobar}i:  The contents of Foobar: header line(s) in the request
- *                 sent to the client.
- * %...l:  remote logname (from identd, if supplied)
- * %...{Foobar}n:  The contents of note "Foobar" from another module.
- * %...{Foobar}o:  The contents of Foobar: header line(s) in the reply.
- * %...p:  the port the request was served to
- * %...P:  the process ID of the child that serviced the request.
- * %...r:  first line of request
- * %...s:  status.  For requests that got internally redirected, this
- *         is status of the *original* request --- %...>s for the last.
- * %...t:  time, in common log format time format
- * %...{format}t:  The time, in the form given by format, which should
- *                 be in strftime(3) format.
- * %...T:  the time taken to serve the request, in seconds.
- * %...D:  the time taken to serve the request, in micro seconds.
- * %...u:  remote user (from auth; may be bogus if return status (%s) is 401)
- * %...U:  the URL path requested.
- * %...v:  the configured name of the server (i.e. which virtual host?)
- * %...V:  the server name according to the UseCanonicalName setting
- * %...m:  the request method
- * %...H:  the request protocol
- * %...q:  the query string prepended by "?", or empty if no query string
- * %...X:  Status of the connection.
- *         'X' = connection aborted before the response completed.
- *         '+' = connection may be kept alive after the response is sent.
- *         '-' = connection will be closed after the response is sent.
-           (This directive was %...c in late versions of Apache 1.3, but
-            this conflicted with the historical ssl %...{var}c syntax.)
-*
- * The '...' can be nothing at all (e.g. "%h %u %r %s %b"), or it can
- * indicate conditions for inclusion of the item (which will cause it
- * to be replaced with '-' if the condition is not met).  Note that
- * there is no escaping performed on the strings from %r, %...i and
- * %...o; some with long memories may remember that I thought this was
- * a bad idea, once upon a time, and I'm still not comfortable with
- * it, but it is difficult to see how to "do the right thing" with all
- * of '%..i', unless we URL-escape everything and break with CLF.
- *
- * The forms of condition are a list of HTTP status codes, which may
- * or may not be preceded by '!'.  Thus, '%400,501{User-agent}i' logs
- * User-agent: on 400 errors and 501 errors (Bad Request, Not
- * Implemented) only; '%!200,304,302{Referer}i' logs Referer: on all
- * requests which did *not* return some sort of normal status.
- *
- * The default LogFormat reproduces CLF; see below.
- *
- * The way this is supposed to work with virtual hosts is as follows:
- * a virtual host can have its own LogFormat, or its own TransferLog.
- * If it doesn't have its own LogFormat, it inherits from the main
- * server.  If it doesn't have its own TransferLog, it writes to the
- * same descriptor (meaning the same process for "| ...").
- *
- * --- rst */
-
-#include "apr_strings.h"
-#include "apr_lib.h"
-#include "apr_hash.h"
-#include "apr_optional.h"
-
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-#include "ap_config.h"
-#include "mod_log_config.h"
-#include "httpd.h"
-#include "http_config.h"
-#include "http_core.h"          /* For REMOTE_NAME */
-#include "http_log.h"
-#include "http_protocol.h"
-#include "util_time.h"
-
-#if APR_HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#ifdef HAVE_LIMITS_H
-#include <limits.h>
-#endif
-
-#define DEFAULT_LOG_FORMAT "%h %l %u %t \"%r\" %>s %b"
-
-module AP_MODULE_DECLARE_DATA log_config_module;
-
-static int xfer_flags = (APR_WRITE | APR_APPEND | APR_CREATE);
-static apr_fileperms_t xfer_perms = APR_OS_DEFAULT;
-static apr_hash_t *log_hash;
-
-/* POSIX.1 defines PIPE_BUF as the maximum number of bytes that is
- * guaranteed to be atomic when writing a pipe.  And PIPE_BUF >= 512
- * is guaranteed.  So we'll just guess 512 in the event the system
- * doesn't have this.  Now, for file writes there is actually no limit,
- * the entire write is atomic.  Whether all systems implement this
- * correctly is another question entirely ... so we'll just use PIPE_BUF
- * because it's probably a good guess as to what is implemented correctly
- * everywhere.
- */
-#ifdef PIPE_BUF
-#define LOG_BUFSIZE     PIPE_BUF
-#else
-#define LOG_BUFSIZE     (512)
-#endif
-
-/*
- * multi_log_state is our per-(virtual)-server configuration. We store
- * an array of the logs we are going to use, each of type config_log_state.
- * If a default log format is given by LogFormat, store in default_format
- * (backward compat. with mod_log_config).  We also store for each virtual
- * server a pointer to the logs specified for the main server, so that if this
- * vhost has no logs defined, we can use the main server's logs instead.
- *
- * So, for the main server, config_logs contains a list of the log files
- * and server_config_logs is empty. For a vhost, server_config_logs
- * points to the same array as config_logs in the main server, and
- * config_logs points to the array of logs defined inside this vhost,
- * which might be empty.
- */
-
-typedef struct {
-    const char *default_format_string;
-    apr_array_header_t *default_format;
-    apr_array_header_t *config_logs;
-    apr_array_header_t *server_config_logs;
-    apr_table_t *formats;
-} multi_log_state;
-
-/*
- * config_log_state holds the status of a single log file. fname might
- * be NULL, which means this module does no logging for this
- * request. format might be NULL, in which case the default_format
- * from the multi_log_state should be used, or if that is NULL as
- * well, use the CLF. log_fd is NULL before the log file is opened and
- * set to a valid fd after it is opened.
- */
-
-typedef struct {
-    const char *fname;
-    const char *format_string;
-    apr_array_header_t *format;
-    apr_file_t *log_fd;
-    char *condition_var;
-#ifdef BUFFERED_LOGS
-    apr_size_t outcnt;
-    char outbuf[LOG_BUFSIZE];
-#endif
-} config_log_state;
-
-/*
- * Format items...
- * Note that many of these could have ap_sprintfs replaced with static buffers.
- */
-
-typedef struct {
-    ap_log_handler_fn_t *func;
-    char *arg;
-    int condition_sense;
-    int want_orig;
-    apr_array_header_t *conditions;
-} log_format_item;
-
-static char *format_integer(apr_pool_t *p, int i)
-{
-    return apr_itoa(p, i);
-}
-
-static char *pfmt(apr_pool_t *p, int i)
-{
-    if (i <= 0) {
-        return "-";
-    }
-    else {
-        return format_integer(p, i);
-    }
-}
-
-static const char *constant_item(request_rec *dummy, char *stuff)
-{
-    return stuff;
-}
-
-static const char *log_remote_host(request_rec *r, char *a)
-{
-    return ap_get_remote_host(r->connection, r->per_dir_config,
-                                    REMOTE_NAME, NULL);
-}
-
-static const char *log_remote_address(request_rec *r, char *a)
-{
-    return r->connection->remote_ip;
-}
-
-static const char *log_local_address(request_rec *r, char *a)
-{
-    return r->connection->local_ip;
-}
-
-static const char *log_remote_logname(request_rec *r, char *a)
-{
-    return ap_get_remote_logname(r);
-}
-
-static const char *log_remote_user(request_rec *r, char *a)
-{
-    char *rvalue = r->user;
-
-    if (rvalue == NULL) {
-        rvalue = "-";
-    }
-    else if (strlen(rvalue) == 0) {
-        rvalue = "\"\"";
-    }
-    return rvalue;
-}
-
-static const char *log_request_line(request_rec *r, char *a)
-{
-	    /* NOTE: If the original request contained a password, we
-	     * re-write the request line here to contain XXXXXX instead:
-	     * (note the truncation before the protocol string for HTTP/0.9 requests)
-	     * (note also that r->the_request contains the unmodified request)
-	     */
-    return (r->parsed_uri.password) ? apr_pstrcat(r->pool, r->method, " ",
-					 apr_uri_unparse(r->pool, &r->parsed_uri, 0),
-					 r->assbackwards ? NULL : " ", r->protocol, NULL)
-					: r->the_request;
-}
-
-static const char *log_request_file(request_rec *r, char *a)
-{
-    return r->filename;
-}
-static const char *log_request_uri(request_rec *r, char *a)
-{
-    return r->uri;
-}
-static const char *log_request_method(request_rec *r, char *a)
-{
-    return r->method;
-}
-static const char *log_request_protocol(request_rec *r, char *a)
-{
-    return r->protocol;
-}
-static const char *log_request_query(request_rec *r, char *a)
-{
-    return (r->args != NULL) ? apr_pstrcat(r->pool, "?", r->args, NULL)
-                             : "";
-}
-static const char *log_status(request_rec *r, char *a)
-{
-    return pfmt(r->pool, r->status);
-}
-
-static const char *clf_log_bytes_sent(request_rec *r, char *a)
-{
-    if (!r->sent_bodyct) {
-        return "-";
-    }
-    else {
-	return apr_off_t_toa(r->pool, r->bytes_sent);
-    }
-}
-
-static const char *log_bytes_sent(request_rec *r, char *a)
-{
-    if (!r->sent_bodyct) {
-        return "0";
-    }
-    else {
-	return apr_psprintf(r->pool, "%" APR_OFF_T_FMT, r->bytes_sent);
-    }
-}
-
-
-static const char *log_header_in(request_rec *r, char *a)
-{
-    return apr_table_get(r->headers_in, a);
-}
-
-static const char *log_header_out(request_rec *r, char *a)
-{
-    const char *cp = apr_table_get(r->headers_out, a);
-    if (!strcasecmp(a, "Content-type") && r->content_type) {
-        cp = ap_field_noparam(r->pool, r->content_type);
-    }
-    if (cp) {
-        return cp;
-    }
-    return apr_table_get(r->err_headers_out, a);
-}
-
-static const char *log_note(request_rec *r, char *a)
-{
-    return apr_table_get(r->notes, a);
-}
-static const char *log_env_var(request_rec *r, char *a)
-{
-    return apr_table_get(r->subprocess_env, a);
-}
-
-static const char *log_cookie(request_rec *r, char *a)
-{
-    const char *cookies;
-    const char *start_cookie;
-
-    if ((cookies = apr_table_get(r->headers_in, "Cookie"))) {
-        if ((start_cookie = ap_strstr_c(cookies,a))) {
-            char *cookie, *end_cookie;
-            start_cookie += strlen(a) + 1; /* cookie_name + '=' */
-            cookie = apr_pstrdup(r->pool, start_cookie);
-            /* kill everything in cookie after ';' */
-            end_cookie = strchr(cookie, ';'); 
-            if (end_cookie) {
-                *end_cookie = '\0';
-            }
-            return cookie;
-        }
-    }
-    return NULL;
-}
-
-static const char *log_request_time_custom(request_rec *r, char *a,
-                                           apr_time_exp_t *xt)
-{
-    apr_size_t retcode;
-    char tstr[MAX_STRING_LEN];
-    apr_strftime(tstr, &retcode, sizeof(tstr), a, xt);
-    return apr_pstrdup(r->pool, tstr);
-}
-
-static const char *log_request_time(request_rec *r, char *a)
-{
-    apr_time_exp_t xt;
-
-    /*
-	hi.  i think getting the time again at the end of the request
-	just for logging is dumb.  i know it's "required" for CLF.
-	folks writing log parsing tools don't realise that out of order
-	times have always been possible (consider what happens if one
-	process calculates the time to log, but then there's a context
-	switch before it writes and before that process is run again the
-	log rotation occurs) and they should just fix their tools rather
-	than force the server to pay extra cpu cycles.	if you've got
-	a problem with this, you can set the define.  -djg
-    */
-#ifdef I_INSIST_ON_EXTRA_CYCLES_FOR_CLF_COMPLIANCE
-    ap_explode_recent_localtime(&xt, apr_time_now());
-#else
-    ap_explode_recent_localtime(&xt, r->request_time);
-#endif
-    if (a && *a) {              /* Custom format */
-        /* The custom time formatting uses a very large temp buffer
-         * on the stack.  To avoid using so much stack space in the
-         * common case where we're not using a custom format, the code
-         * for the custom format in a separate function.  (That's why
-         * log_request_time_custom is not inlined right here.)
-         */
-        return log_request_time_custom(r, a, &xt);
-    }
-    else {                      /* CLF format */
-	char sign;
-	int timz;
-
-	timz = xt.tm_gmtoff;
-	if (timz < 0) {
-	    timz = -timz;
-	    sign = '-';
-	}
-	else {
-	    sign = '+';
-	}
-
-        return apr_psprintf(r->pool, "[%02d/%s/%d:%02d:%02d:%02d %c%.2d%.2d]",
-                xt.tm_mday, apr_month_snames[xt.tm_mon], xt.tm_year+1900,
-                xt.tm_hour, xt.tm_min, xt.tm_sec,
-                sign, timz / (60*60), timz % (60*60));
-    }
-}
-
-static const char *log_request_duration(request_rec *r, char *a)
-{
-    return apr_psprintf(r->pool, "%qd", (apr_time_now() - r->request_time) 
-                                             / APR_USEC_PER_SEC);
-}
-
-static const char *log_request_duration_microseconds(request_rec *r, char *a)
-{
-    return apr_psprintf(r->pool, "%qd", (apr_time_now() - r->request_time));
-}
-
-/* These next two routines use the canonical name:port so that log
- * parsers don't need to duplicate all the vhost parsing crud.
- */
-static const char *log_virtual_host(request_rec *r, char *a)
-{
-    return r->server->server_hostname;
-}
-
-static const char *log_server_port(request_rec *r, char *a)
-{
-    return apr_psprintf(r->pool, "%u",
-	r->server->port ? r->server->port : ap_default_port(r));
-}
-
-/* This respects the setting of UseCanonicalName so that
- * the dynamic mass virtual hosting trick works better.
- */
-static const char *log_server_name(request_rec *r, char *a)
-{
-    return ap_get_server_name(r);
-}
-
-static const char *log_child_pid(request_rec *r, char *a)
-{
-    return apr_psprintf(r->pool, "%ld", (long) getpid());
-}
-
-static const char *log_connection_status(request_rec *r, char *a)
-{
-    if (r->connection->aborted)
-        return "X";
-
-    if (r->connection->keepalive && 
-        (!r->server->keep_alive_max ||
-         (r->server->keep_alive_max - r->connection->keepalives) > 0)) {
-        return "+";
-    }
-    return "-";
-}
-
-/*****************************************************************
- *
- * Parsing the log format string
- */
-
-static char *parse_log_misc_string(apr_pool_t *p, log_format_item *it,
-                                   const char **sa)
-{
-    const char *s;
-    char *d;
-
-    it->func = constant_item;
-    it->conditions = NULL;
-
-    s = *sa;
-    while (*s && *s != '%') {
-	s++;
-    }
-    /*
-     * This might allocate a few chars extra if there's a backslash
-     * escape in the format string.
-     */
-    it->arg = apr_palloc(p, s - *sa + 1);
-
-    d = it->arg;
-    s = *sa;
-    while (*s && *s != '%') {
-	if (*s != '\\') {
-	    *d++ = *s++;
-	}
-	else {
-	    s++;
-	    switch (*s) {
-	    case '\\':
-		*d++ = '\\';
-		s++;
-		break;
-	    case 'r':
-		*d++ = '\r';
-		s++;
-		break;
-	    case 'n':
-		*d++ = '\n';
-		s++;
-		break;
-	    case 't':	
-		*d++ = '\t';
-		s++;
-		break;
-	    default:
-		/* copy verbatim */
-		*d++ = '\\';
-		/*
-		 * Allow the loop to deal with this *s in the normal
-		 * fashion so that it handles end of string etc.
-		 * properly.
-		 */
-		break;
-	    }
-	}
-    }
-    *d = '\0';
-
-    *sa = s;
-    return NULL;
-}
-
-static char *parse_log_item(apr_pool_t *p, log_format_item *it, const char **sa)
-{
-    const char *s = *sa;
-    ap_log_handler *handler;
-
-    if (*s != '%') {
-        return parse_log_misc_string(p, it, sa);
-    }
-
-    ++s;
-    it->condition_sense = 0;
-    it->conditions = NULL;
-    it->want_orig = -1;
-    it->arg = "";               /* For safety's sake... */
-
-    while (*s) {
-        int i;
-
-        switch (*s) {
-        case '!':
-            ++s;
-            it->condition_sense = !it->condition_sense;
-            break;
-
-        case '<':
-            ++s;
-            it->want_orig = 1;
-            break;
-
-        case '>':
-            ++s;
-            it->want_orig = 0;
-            break;
-
-        case ',':
-            ++s;
-            break;
-
-        case '{':
-            ++s;
-            it->arg = ap_getword(p, &s, '}');
-            break;
-
-        case '0':
-        case '1':
-        case '2':
-        case '3':
-        case '4':
-        case '5':
-        case '6':
-        case '7':
-        case '8':
-        case '9':
-            i = *s - '0';
-            while (apr_isdigit(*++s)) {
-                i = i * 10 + (*s) - '0';
-            }
-            if (!it->conditions) {
-                it->conditions = apr_array_make(p, 4, sizeof(int));
-            }
-            *(int *) apr_array_push(it->conditions) = i;
-            break;
-
-        default:
-            handler = (ap_log_handler *)apr_hash_get(log_hash, s++, 1);
-            if (!handler) {
-                char dummy[2];
-
-                dummy[0] = s[-1];
-                dummy[1] = '\0';
-                return apr_pstrcat(p, "Unrecognized LogFormat directive %",
-                               dummy, NULL);
-            }
-            it->func = handler->func;
-            if (it->want_orig == -1) {
-                it->want_orig = handler->want_orig_default;
-            }
-            *sa = s;
-            return NULL;
-        }
-    }
-
-    return "Ran off end of LogFormat parsing args to some directive";
-}
-
-static apr_array_header_t *parse_log_string(apr_pool_t *p, const char *s, const char **err)
-{
-    apr_array_header_t *a = apr_array_make(p, 30, sizeof(log_format_item));
-    char *res;
-
-    while (*s) {
-        if ((res = parse_log_item(p, (log_format_item *) apr_array_push(a), &s))) {
-            *err = res;
-            return NULL;
-        }
-    }
-
-    s = APR_EOL_STR;
-    parse_log_item(p, (log_format_item *) apr_array_push(a), &s);
-    return a;
-}
-
-/*****************************************************************
- *
- * Actually logging.
- */
-
-static const char *process_item(request_rec *r, request_rec *orig,
-                          log_format_item *item)
-{
-    const char *cp;
-
-    /* First, see if we need to process this thing at all... */
-
-    if (item->conditions && item->conditions->nelts != 0) {
-        int i;
-        int *conds = (int *) item->conditions->elts;
-        int in_list = 0;
-
-        for (i = 0; i < item->conditions->nelts; ++i) {
-            if (r->status == conds[i]) {
-                in_list = 1;
-                break;
-            }
-        }
-
-        if ((item->condition_sense && in_list)
-            || (!item->condition_sense && !in_list)) {
-            return "-";
-        }
-    }
-
-    /* We do.  Do it... */
-
-    cp = (*item->func) (item->want_orig ? orig : r, item->arg);
-    return cp ? cp : "-";
-}
-
-#ifdef BUFFERED_LOGS
-static void flush_log(config_log_state *cls)
-{
-    if (cls->outcnt && cls->log_fd != NULL) {
-        apr_file_write(cls->log_fd, cls->outbuf, &cls->outcnt);
-        cls->outcnt = 0;
-    }
-}
-#endif
-
-static int config_log_transaction(request_rec *r, config_log_state *cls,
-                                  apr_array_header_t *default_format)
-{
-    log_format_item *items;
-    char *str, *s;
-    const char **strs;
-    int *strl;
-    request_rec *orig;
-    int i;
-    apr_size_t len = 0;
-    apr_array_header_t *format;
-    char *envar;
-
-    if (cls->fname == NULL) {
-        return DECLINED;
-    }
-
-    /*
-     * See if we've got any conditional envariable-controlled logging decisions
-     * to make.
-     */
-    if (cls->condition_var != NULL) {
-	envar = cls->condition_var;
-	if (*envar != '!') {
-	    if (apr_table_get(r->subprocess_env, envar) == NULL) {
-		return DECLINED;
-	    }
-	}
-	else {
-	    if (apr_table_get(r->subprocess_env, &envar[1]) != NULL) {
-		return DECLINED;
-	    }
-	}
-    }
-
-    format = cls->format ? cls->format : default_format;
-
-    strs = apr_palloc(r->pool, sizeof(char *) * (format->nelts));
-    strl = apr_palloc(r->pool, sizeof(int) * (format->nelts));
-    items = (log_format_item *) format->elts;
-
-    orig = r;
-    while (orig->prev) {
-        orig = orig->prev;
-    }
-    while (r->next) {
-        r = r->next;
-    }
-
-    for (i = 0; i < format->nelts; ++i) {
-        strs[i] = process_item(r, orig, &items[i]);
-    }
-
-    for (i = 0; i < format->nelts; ++i) {
-        len += strl[i] = strlen(strs[i]);
-    }
-
-#ifdef BUFFERED_LOGS
-    if (len + cls->outcnt > LOG_BUFSIZE) {
-        flush_log(cls);
-    }
-    if (len >= LOG_BUFSIZE) {
-        apr_size_t w;
-
-        str = apr_palloc(r->pool, len + 1);
-        for (i = 0, s = str; i < format->nelts; ++i) {
-            memcpy(s, strs[i], strl[i]);
-            s += strl[i];
-        }
-        w = len;
-        apr_file_write(cls->log_fd, str, &w);
-    }
-    else {
-        for (i = 0, s = &cls->outbuf[cls->outcnt]; i < format->nelts; ++i) {
-            memcpy(s, strs[i], strl[i]);
-            s += strl[i];
-        }
-        cls->outcnt += len;
-    }
-#else
-    str = apr_palloc(r->pool, len + 1);
-
-    for (i = 0, s = str; i < format->nelts; ++i) {
-        memcpy(s, strs[i], strl[i]);
-        s += strl[i];
-    }
-
-    apr_file_write(cls->log_fd, str, &len);
-#endif
-
-    return OK;
-}
-
-static int multi_log_transaction(request_rec *r)
-{
-    multi_log_state *mls = ap_get_module_config(r->server->module_config,
-						&log_config_module);
-    config_log_state *clsarray;
-    int i;
-
-    /*
-     * Log this transaction..
-     */
-    if (mls->config_logs->nelts) {
-        clsarray = (config_log_state *) mls->config_logs->elts;
-        for (i = 0; i < mls->config_logs->nelts; ++i) {
-            config_log_state *cls = &clsarray[i];
-
-            config_log_transaction(r, cls, mls->default_format);
-        }
-    }
-    else if (mls->server_config_logs) {
-        clsarray = (config_log_state *) mls->server_config_logs->elts;
-        for (i = 0; i < mls->server_config_logs->nelts; ++i) {
-            config_log_state *cls = &clsarray[i];
-
-            config_log_transaction(r, cls, mls->default_format);
-        }
-    }
-
-    return OK;
-}
-
-/*****************************************************************
- *
- * Module glue...
- */
-
-static void *make_config_log_state(apr_pool_t *p, server_rec *s)
-{
-    multi_log_state *mls;
-
-    mls = (multi_log_state *) apr_palloc(p, sizeof(multi_log_state));
-    mls->config_logs = apr_array_make(p, 1, sizeof(config_log_state));
-    mls->default_format_string = NULL;
-    mls->default_format = NULL;
-    mls->server_config_logs = NULL;
-    mls->formats = apr_table_make(p, 4);
-    apr_table_setn(mls->formats, "CLF", DEFAULT_LOG_FORMAT);
-
-    return mls;
-}
-
-/*
- * Use the merger to simply add a pointer from the vhost log state
- * to the log of logs specified for the non-vhost configuration.  Make sure
- * vhosts inherit any globally-defined format names.
- */
-
-static void *merge_config_log_state(apr_pool_t *p, void *basev, void *addv)
-{
-    multi_log_state *base = (multi_log_state *) basev;
-    multi_log_state *add = (multi_log_state *) addv;
-
-    add->server_config_logs = base->config_logs;
-    if (!add->default_format) {
-        add->default_format_string = base->default_format_string;
-        add->default_format = base->default_format;
-    }
-    add->formats = apr_table_overlay(p, base->formats, add->formats);
-
-    return add;
-}
-
-/*
- * Set the default logfile format, or define a nickname for a format string.
- */
-static const char *log_format(cmd_parms *cmd, void *dummy, const char *fmt,
-                              const char *name)
-{
-    const char *err_string = NULL;
-    multi_log_state *mls = ap_get_module_config(cmd->server->module_config,
-						&log_config_module);
-
-    /*
-     * If we were given two arguments, the second is a name to be given to the
-     * format.  This syntax just defines the nickname - it doesn't actually
-     * make the format the default.
-     */
-    if (name != NULL) {
-        parse_log_string(cmd->pool, fmt, &err_string);
-        if (err_string == NULL) {
-            apr_table_setn(mls->formats, name, fmt);
-        }
-    }
-    else {
-        mls->default_format_string = fmt;
-        mls->default_format = parse_log_string(cmd->pool, fmt, &err_string);
-    }
-    return err_string;
-}
-
-
-static const char *add_custom_log(cmd_parms *cmd, void *dummy, const char *fn,
-                                  const char *fmt, const char *envclause)
-{
-    const char *err_string = NULL;
-    multi_log_state *mls = ap_get_module_config(cmd->server->module_config,
-						&log_config_module);
-    config_log_state *cls;
-
-    cls = (config_log_state *) apr_array_push(mls->config_logs);
-    cls->condition_var = NULL;
-    if (envclause != NULL) {
-	if (strncasecmp(envclause, "env=", 4) != 0) {
-	    return "error in condition clause";
-	}
-	if ((envclause[4] == '\0')
-	    || ((envclause[4] == '!') && (envclause[5] == '\0'))) {
-	    return "missing environment variable name";
-	}
-	cls->condition_var = apr_pstrdup(cmd->pool, &envclause[4]);
-    }
-
-    cls->fname = fn;
-    cls->format_string = fmt;
-    if (fmt == NULL) {
-        cls->format = NULL;
-    }
-    else {
-        cls->format = parse_log_string(cmd->pool, fmt, &err_string);
-    }
-    cls->log_fd = NULL;
-
-    return err_string;
-}
-
-static const char *set_transfer_log(cmd_parms *cmd, void *dummy,
-				    const char *fn)
-{
-    return add_custom_log(cmd, dummy, fn, NULL, NULL);
-}
-
-static const char *set_cookie_log(cmd_parms *cmd, void *dummy, const char *fn)
-{
-    return add_custom_log(cmd, dummy, fn, "%{Cookie}n \"%r\" %t", NULL);
-}
-
-static const command_rec config_log_cmds[] =
-{
-AP_INIT_TAKE23("CustomLog", add_custom_log, NULL, RSRC_CONF,
-     "a file name, a custom log format string or format name, "
-     "and an optional \"env=\" clause (see docs)"),
-AP_INIT_TAKE1("TransferLog", set_transfer_log, NULL, RSRC_CONF,
-     "the filename of the access log"),
-AP_INIT_TAKE12("LogFormat", log_format, NULL, RSRC_CONF,
-     "a log format string (see docs) and an optional format name"),
-AP_INIT_TAKE1("CookieLog", set_cookie_log, NULL, RSRC_CONF,
-     "the filename of the cookie log"),
-    {NULL}
-};
-
-static config_log_state *open_config_log(server_rec *s, apr_pool_t *p,
-                                         config_log_state *cls,
-                                         apr_array_header_t *default_format)
-{
-    apr_status_t status;
-    void *data;
-    const char *userdata_key = "open_config_log";
-
-    /* Skip opening the log the first time through. It's really
-     * good to avoid starting the piped log process during preflight.
-     */
-    apr_pool_userdata_get(&data, userdata_key, s->process->pool);
-    if (!data) {
-        apr_pool_userdata_set((const void *)1, userdata_key,
-                              NULL, s->process->pool);
-        /* If logging for the first time after a restart, keep going. */
-        if (!ap_my_generation) {
-            return cls;
-        }
-    }
-
-    if (cls->log_fd != NULL) {
-        return cls;             /* virtual config shared w/main server */
-    }
-
-    if (cls->fname == NULL) {
-        return cls;             /* Leave it NULL to decline.  */
-    }
-
-    if (*cls->fname == '|') {
-        piped_log *pl;
-
-        pl = ap_open_piped_log(p, cls->fname + 1);
-        if (pl == NULL) {
-            exit(1);
-        }
-        cls->log_fd = ap_piped_log_write_fd(pl);
-    }
-    else {
-        const char *fname = ap_server_root_relative(p, cls->fname);
-        if (!fname) {
-            ap_log_error(APLOG_MARK, APLOG_ERR, APR_EBADPATH, s,
-                         "invalid transfer log path %s.", cls->fname);
-            exit(1);
-        }
-        if ((status = apr_file_open(&cls->log_fd, fname, xfer_flags,
-                                    xfer_perms, p)) != APR_SUCCESS) {
-            ap_log_error(APLOG_MARK, APLOG_ERR, status, s,
-                         "could not open transfer log file %s.", fname);
-            exit(1);
-        }
-        apr_file_set_inherit(cls->log_fd);
-    }
-#ifdef BUFFERED_LOGS
-    cls->outcnt = 0;
-#endif
-
-    return cls;
-}
-
-static config_log_state *open_multi_logs(server_rec *s, apr_pool_t *p)
-{
-    int i;
-    multi_log_state *mls = ap_get_module_config(s->module_config,
-                                             &log_config_module);
-    config_log_state *clsarray;
-    const char *dummy;
-    const char *format;
-
-    if (mls->default_format_string) {
-	format = apr_table_get(mls->formats, mls->default_format_string);
-	if (format) {
-	    mls->default_format = parse_log_string(p, format, &dummy);
-	}
-    }    
-
-    if (!mls->default_format) {
-        mls->default_format = parse_log_string(p, DEFAULT_LOG_FORMAT, &dummy);
-    }
-
-    if (mls->config_logs->nelts) {
-        clsarray = (config_log_state *) mls->config_logs->elts;
-        for (i = 0; i < mls->config_logs->nelts; ++i) {
-            config_log_state *cls = &clsarray[i];
-
-	    if (cls->format_string) {
-		format = apr_table_get(mls->formats, cls->format_string);
-		if (format) {
-		    cls->format = parse_log_string(p, format, &dummy);
-		}
-	    }
-
-            cls = open_config_log(s, p, cls, mls->default_format);
-        }
-    }
-    else if (mls->server_config_logs) {
-        clsarray = (config_log_state *) mls->server_config_logs->elts;
-        for (i = 0; i < mls->server_config_logs->nelts; ++i) {
-            config_log_state *cls = &clsarray[i];
-
-	    if (cls->format_string) {
-		format = apr_table_get(mls->formats, cls->format_string);
-		if (format) {
-		    cls->format = parse_log_string(p, format, &dummy);
-		}
-	    }
-
-            cls = open_config_log(s, p, cls, mls->default_format);
-        }
-    }
-
-    return NULL;
-}
-
-#ifdef BUFFERED_LOGS
-static apr_status_t flush_all_logs(void *data)
-{
-    server_rec *s = data;
-    multi_log_state *mls;
-    apr_array_header_t *log_list;
-    config_log_state *clsarray;
-    int i;
-
-    for (; s; s = s->next) {
-        mls = ap_get_module_config(s->module_config, &log_config_module);
-        log_list = NULL;
-        if (mls->config_logs->nelts) {
-            log_list = mls->config_logs;
-        }
-        else if (mls->server_config_logs) {
-            log_list = mls->server_config_logs;
-        }
-        if (log_list) {
-            clsarray = (config_log_state *) log_list->elts;
-            for (i = 0; i < log_list->nelts; ++i) {
-                flush_log(&clsarray[i]);
-            }
-        }
-    }
-    return APR_SUCCESS;
-}
-#endif
-
-static int init_config_log(apr_pool_t *pc, apr_pool_t *p, apr_pool_t *pt, server_rec *s)
-{
-    /* First, do "physical" server, which gets default log fd and format
-     * for the virtual servers, if they don't override...
-     */
-
-    open_multi_logs(s, p);
-
-    /* Then, virtual servers */
-
-    for (s = s->next; s; s = s->next) {
-        open_multi_logs(s, p);
-    }
-    return OK;
-}
-
-static void init_child(apr_pool_t *p, server_rec *s)
-{
-#ifdef BUFFERED_LOGS
-	/* Now register the last buffer flush with the cleanup engine */
-	apr_pool_cleanup_register(p, s, flush_all_logs, flush_all_logs);
-#endif
-}
-
-static void ap_register_log_handler(apr_pool_t *p, char *tag, 
-                                    ap_log_handler_fn_t *handler, int def)
-{
-    ap_log_handler *log_struct = apr_palloc(p, sizeof(*log_struct));
-    log_struct->func = handler;
-    log_struct->want_orig_default = def;
-
-    apr_hash_set(log_hash, tag, 1, (const void *)log_struct);
-}
-
-static int log_pre_config(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp)
-{
-    static APR_OPTIONAL_FN_TYPE(ap_register_log_handler) *log_pfn_register;
-
-    log_pfn_register = APR_RETRIEVE_OPTIONAL_FN(ap_register_log_handler);
-
-    if (log_pfn_register) {
-        log_pfn_register(p, "h", log_remote_host, 0);
-        log_pfn_register(p, "a", log_remote_address, 0 );
-        log_pfn_register(p, "A", log_local_address, 0 );
-        log_pfn_register(p, "l", log_remote_logname, 0);
-        log_pfn_register(p, "u", log_remote_user, 0);
-        log_pfn_register(p, "t", log_request_time, 0);
-        log_pfn_register(p, "f", log_request_file, 0);
-        log_pfn_register(p, "b", clf_log_bytes_sent, 0);
-        log_pfn_register(p, "B", log_bytes_sent, 0);
-        log_pfn_register(p, "i", log_header_in, 0);
-        log_pfn_register(p, "o", log_header_out, 0);
-        log_pfn_register(p, "n", log_note, 0);
-        log_pfn_register(p, "e", log_env_var, 0);
-        log_pfn_register(p, "V", log_server_name, 0);
-        log_pfn_register(p, "v", log_virtual_host, 0);
-        log_pfn_register(p, "p", log_server_port, 0);
-        log_pfn_register(p, "P", log_child_pid, 0);
-        log_pfn_register(p, "H", log_request_protocol, 0);
-        log_pfn_register(p, "m", log_request_method, 0);
-        log_pfn_register(p, "q", log_request_query, 0);
-        log_pfn_register(p, "X", log_connection_status, 0);
-        log_pfn_register(p, "C", log_cookie, 0);
-        log_pfn_register(p, "r", log_request_line, 1);
-        log_pfn_register(p, "D", log_request_duration_microseconds, 1);
-        log_pfn_register(p, "T", log_request_duration, 1);
-        log_pfn_register(p, "U", log_request_uri, 1);
-        log_pfn_register(p, "s", log_status, 1);
-    }
-
-    return OK;
-}
-
-static void register_hooks(apr_pool_t *p)
-{
-    ap_hook_pre_config(log_pre_config,NULL,NULL,APR_HOOK_REALLY_FIRST);
-    ap_hook_child_init(init_child,NULL,NULL,APR_HOOK_MIDDLE);
-    ap_hook_open_logs(init_config_log,NULL,NULL,APR_HOOK_MIDDLE);
-    ap_hook_log_transaction(multi_log_transaction,NULL,NULL,APR_HOOK_MIDDLE);
-
-    /* Init log_hash before we register the optional function. It is 
-     * possible for the optional function, ap_register_log_handler,
-     * to be called before any other mod_log_config hooks are called.
-     * As a policy, we should init everything required by an optional function
-     * before calling APR_REGISTER_OPTIONAL_FN.
-     */ 
-    log_hash = apr_hash_make(p);
-    APR_REGISTER_OPTIONAL_FN(ap_register_log_handler);
-}
-
-module AP_MODULE_DECLARE_DATA log_config_module =
-{
-    STANDARD20_MODULE_STUFF,
-    NULL,                       /* create per-dir config */
-    NULL,                       /* merge per-dir config */
-    make_config_log_state,      /* server config */
-    merge_config_log_state,     /* merge server config */
-    config_log_cmds,            /* command apr_table_t */
-    register_hooks              /* register hooks */
-};
diff --git a/modules/loggers/mod_log_config.dsp b/modules/loggers/mod_log_config.dsp
deleted file mode 100644
index e043dab..0000000
--- a/modules/loggers/mod_log_config.dsp
+++ /dev/null
@@ -1,128 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mod_log_config" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mod_log_config - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "mod_log_config.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "mod_log_config.mak" CFG="mod_log_config - Win32 Release"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "mod_log_config - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mod_log_config - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "mod_log_config - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /O2 /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Release\mod_log_config" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /map /machine:I386 /out:"Release/mod_log_config.so" /base:@..\..\os\win32\BaseAddr.ref,mod_log_config
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /map /machine:I386 /out:"Release/mod_log_config.so" /base:@..\..\os\win32\BaseAddr.ref,mod_log_config
-
-!ELSEIF  "$(CFG)" == "mod_log_config - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Debug\mod_log_config" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /map /debug /machine:I386 /out:"Debug/mod_log_config.so" /base:@..\..\os\win32\BaseAddr.ref,mod_log_config
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /map /debug /machine:I386 /out:"Debug/mod_log_config.so" /base:@..\..\os\win32\BaseAddr.ref,mod_log_config
-
-!ENDIF 
-
-# Begin Target
-
-# Name "mod_log_config - Win32 Release"
-# Name "mod_log_config - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\mod_log_config.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mod_log_config.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\build\win32\win32ver.awk
-
-!IF  "$(CFG)" == "mod_log_config - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_log_config.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ../../build/win32/win32ver.awk mod_log_config  "log_config_module for Apache" ../../include/ap_release.h > .\mod_log_config.rc
-
-# End Custom Build
-
-!ELSEIF  "$(CFG)" == "mod_log_config - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_log_config.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ../../build/win32/win32ver.awk mod_log_config  "log_config_module for Apache" ../../include/ap_release.h > .\mod_log_config.rc
-
-# End Custom Build
-
-!ENDIF 
-
-# End Source File
-# End Target
-# End Project
diff --git a/modules/loggers/mod_log_config.exp b/modules/loggers/mod_log_config.exp
deleted file mode 100644
index 0749e52..0000000
--- a/modules/loggers/mod_log_config.exp
+++ /dev/null
@@ -1 +0,0 @@
-log_config_module
diff --git a/modules/loggers/mod_log_config.h b/modules/loggers/mod_log_config.h
deleted file mode 100644
index 72f6968..0000000
--- a/modules/loggers/mod_log_config.h
+++ /dev/null
@@ -1,76 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-#include "apr_optional.h"
-#include "httpd.h"
-#include "scoreboard.h"
-
-#ifndef _MOD_LOG_CONFIG_H
-#define _MOD_LOG_CONFIG_H 1
-
-typedef const char *ap_log_handler_fn_t(request_rec *r, char *a);
-
-typedef struct ap_log_handler {
-    ap_log_handler_fn_t *func;
-    int want_orig_default;
-} ap_log_handler;
-
-APR_DECLARE_OPTIONAL_FN(void, ap_register_log_handler, 
-                        (apr_pool_t *p, char *tag, ap_log_handler_fn_t *func, int def));
-
-#endif /* MOD_LOG_CONFIG */
diff --git a/modules/mappers/.cvsignore b/modules/mappers/.cvsignore
deleted file mode 100644
index aeabff3..0000000
--- a/modules/mappers/.cvsignore
+++ /dev/null
@@ -1,16 +0,0 @@
-.deps
-.libs
-*.la
-modules.mk
-Makefile
-*.lo
-*.slo
-*.so
-*.x
-Debug
-Release
-*.plg
-*.aps
-*.dep
-*.mak
-*.rc
diff --git a/modules/mappers/.indent.pro b/modules/mappers/.indent.pro
deleted file mode 100644
index a9fbe9f..0000000
--- a/modules/mappers/.indent.pro
+++ /dev/null
@@ -1,54 +0,0 @@
--i4 -npsl -di0 -br -nce -d0 -cli0 -npcs -nfc1
--TBUFF
--TFILE
--TTRANS
--TUINT4
--T_trans
--Tallow_options_t
--Tapache_sfio
--Tarray_header
--Tbool_int
--Tbuf_area
--Tbuff_struct
--Tbuffy
--Tcmd_how
--Tcmd_parms
--Tcommand_rec
--Tcommand_struct
--Tconn_rec
--Tcore_dir_config
--Tcore_server_config
--Tdir_maker_func
--Tevent
--Tglobals_s
--Thandler_func
--Thandler_rec
--Tjoblist_s
--Tlisten_rec
--Tmerger_func
--Tmode_t
--Tmodule
--Tmodule_struct
--Tmutex
--Tn_long
--Tother_child_rec
--Toverrides_t
--Tparent_score
--Tpid_t
--Tpiped_log
--Tpool
--Trequest_rec
--Trequire_line
--Trlim_t
--Tscoreboard
--Tsemaphore
--Tserver_addr_rec
--Tserver_rec
--Tserver_rec_chain
--Tshort_score
--Ttable
--Ttable_entry
--Tthread
--Tu_wide_int
--Tvtime_t
--Twide_int
diff --git a/modules/mappers/Makefile.in b/modules/mappers/Makefile.in
deleted file mode 100644
index 167b343..0000000
--- a/modules/mappers/Makefile.in
+++ /dev/null
@@ -1,3 +0,0 @@
-
-include $(top_srcdir)/build/special.mk
-
diff --git a/modules/mappers/NWGNUmakefile b/modules/mappers/NWGNUmakefile
deleted file mode 100644
index 62c9624..0000000
--- a/modules/mappers/NWGNUmakefile
+++ /dev/null
@@ -1,247 +0,0 @@
-#
-# Declare the sub-directories to be built here
-#
-
-SUBDIRS = \
-	$(EOLIST) 
-
-#
-# Get the 'head' of the build environment.  This includes default targets and
-# paths to tools
-#
-
-include $(AP_WORK)\build\NWGNUhead.inc
-
-#
-# build this level's files
-
-#
-# Make sure all needed macro's are defined
-#
-
-#
-# These directories will be at the beginning of the include list, followed by
-# INCDIRS
-#
-XINCDIRS	+= \
-			$(EOLIST)
-
-#
-# These flags will come after CFLAGS
-#
-XCFLAGS		+= \
-			$(EOLIST)
-
-#
-# These defines will come after DEFINES
-#
-XDEFINES	+= \
-			$(EOLIST)
-
-#
-# These flags will be added to the link.opt file
-#
-XLFLAGS		+= \
-			$(EOLIST)
-
-#
-# These values will be appended to the correct variables based on the value of
-# RELEASE
-#
-ifeq "$(RELEASE)" "debug"
-XINCDIRS	+= \
-			$(EOLIST)
-
-XCFLAGS		+= \
-			$(EOLIST)
-
-XDEFINES	+= \
-			$(EOLIST)
-
-XLFLAGS		+= \
-		   	$(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "noopt"
-XINCDIRS	+= \
-			$(EOLIST)
-
-XCFLAGS		+= \
-			$(EOLIST)
-
-XDEFINES	+= \
-			$(EOLIST)
-
-XLFLAGS		+= \
-		   	$(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "release"
-XINCDIRS	+= \
-			$(EOLIST)
-
-XCFLAGS		+= \
-			$(EOLIST)
-
-XDEFINES	+= \
-			$(EOLIST)
-
-XLFLAGS		+= \
-			$(EOLIST)
-endif
-
-#
-# These are used by the link target if an NLM is being generated
-# This is used by the link 'name' directive to name the nlm.  If left blank
-# TARGET_nlm (see below) will be used.
-#
-NLM_NAME		=
-
-#
-# This is used by the link '-desc ' directive. 
-# If left blank, NLM_NAME will be used.
-#
-NLM_DESCRIPTION	=
-
-#
-# This is used by the '-threadname' directive.  If left blank,
-# NLM_NAME Thread will be used.
-#
-NLM_THREAD_NAME	=
-
-#
-# If this is specified, it will override VERSION value in 
-# $(AP_WORK)\build\NWGNUenvironment.inc
-#
-NLM_VERSION		=
-
-#
-# If this is specified, it will override the default of 64K
-#
-NLM_STACK_SIZE	=
-
-
-#
-# If this is specified it will be used by the link '-entry' directive
-#
-NLM_ENTRY_SYM	=
-
-#
-# If this is specified it will be used by the link '-exit' directive
-#
-NLM_EXIT_SYM	=
-
-#
-# If this is specified it will be used by the link '-check' directive
-#
-NLM_CHECK_SYM	=
-
-#
-# If these are specified it will be used by the link '-flags' directive
-#
-NLM_FLAGS		=
-
-#
-# If this is specified it will be linked in with the XDCData option in the def 
-# file instead of the default of $(NWOS)/apache.xdc.  XDCData can be disabled
-# by setting APACHE_UNIPROC in the environment
-#
-XDCDATA         = 
-
-#
-# If there is an NLM target, put it here
-#
-TARGET_nlm = \
-	$(OBJDIR)/rewrite.nlm \
-	$(OBJDIR)/speling.nlm \
-	$(OBJDIR)/vhost.nlm \
-	$(EOLIST)
-
-#
-# If there is an LIB target, put it here
-#
-TARGET_lib = \
-	$(EOLIST)
-
-#
-# These are the OBJ files needed to create the NLM target above.
-# Paths must all use the '/' character
-#
-FILES_nlm_objs = \
-	$(EOLIST)
-
-#
-# These are the LIB files needed to create the NLM target above.
-# These will be added as a library command in the link.opt file.
-#
-FILES_nlm_libs = \
-	$(EOLIST)
-
-#
-# These are the modules that the above NLM target depends on to load.
-# These will be added as a module command in the link.opt file.
-#
-FILES_nlm_modules = \
-	$(EOLIST)
-
-#
-# If the nlm has a msg file, put it's path here
-#
-FILE_nlm_msg =
- 
-#
-# If the nlm has a hlp file put it's path here
-#
-FILE_nlm_hlp =
-
-#
-# If this is specified, it will override $(NWOS)\copyright.txt.
-#
-FILE_nlm_copyright =
-
-#
-# Any additional imports go here
-#
-FILES_nlm_Ximports = \
-	$(EOLIST)
- 
-#   
-# Any symbols exported to here
-#
-FILES_nlm_exports = \
-	$(EOLIST)
-	
-#   
-# These are the OBJ files needed to create the LIB target above.
-# Paths must all use the '/' character
-#
-FILES_lib_objs = \
-		$(EOLIST)
-
-#
-# implement targets and dependancies (leave this section alone)
-#
-
-libs :: $(OBJDIR) $(TARGET_lib)
-
-nlms :: libs $(TARGET_nlm)
-
-#
-# Updated this target to create necessary directories and copy files to the 
-# correct place.  (See $(AP_WORK)\build\NWGNUhead.inc for examples)
-#
-install :: nlms FORCE
-	copy $(OBJDIR)\*.nlm $(INSTALL)\Apache2\modules\*.*
-
-#
-# Any specialized rules here
-#
-
-#
-# Include the 'tail' makefile that has targets that depend on variables defined
-# in this makefile
-#
-
-include $(AP_WORK)\build\NWGNUtail.inc
-
-
diff --git a/modules/mappers/NWGNUrewrite b/modules/mappers/NWGNUrewrite
deleted file mode 100644
index 9e8b21f..0000000
--- a/modules/mappers/NWGNUrewrite
+++ /dev/null
@@ -1,249 +0,0 @@
-#
-# Make sure all needed macro's are defined
-#
-
-#
-# Get the 'head' of the build environment if necessary.  This includes default
-# targets and paths to tools
-#
-
-ifndef EnvironmentDefined
-include $(AP_WORK)\build\NWGNUhead.inc
-endif
-
-#
-# These directories will be at the beginning of the include list, followed by
-# INCDIRS
-#
-XINCDIRS	+= \
-			$(AP_WORK)/include \
-			$(NWOS) \
-			$(AP_WORK)/modules/arch/netware \
-			$(AP_WORK)/srclib/apr/include \
-			$(AP_WORK)/srclib/apr-util/include \
-			$(AP_WORK)/srclib/apr \
-			$(EOLIST)
-
-#
-# These flags will come after CFLAGS
-#
-XCFLAGS		+= \
-			$(EOLIST)
-
-#
-# These defines will come after DEFINES
-#
-XDEFINES	+= \
-			$(EOLIST)
-
-#
-# These flags will be added to the link.opt file
-#
-XLFLAGS		+= \
-			$(EOLIST)
-
-#
-# These values will be appended to the correct variables based on the value of
-# RELEASE
-#
-ifeq "$(RELEASE)" "debug"
-XINCDIRS	+= \
-			$(EOLIST)
-
-XCFLAGS		+= \
-			$(EOLIST)
-
-XDEFINES	+= \
-			$(EOLIST)
-
-XLFLAGS		+= \
-		   	$(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "noopt"
-XINCDIRS	+= \
-			$(EOLIST)
-
-XCFLAGS		+= \
-			$(EOLIST)
-
-XDEFINES	+= \
-			$(EOLIST)
-
-XLFLAGS		+= \
-		   	$(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "release"
-XINCDIRS	+= \
-			$(EOLIST)
-
-XCFLAGS		+= \
-			$(EOLIST)
-
-XDEFINES	+= \
-			$(EOLIST)
-
-XLFLAGS		+= \
-			$(EOLIST)
-endif
-
-#
-# These are used by the link target if an NLM is being generated
-# This is used by the link 'name' directive to name the nlm.  If left blank
-# TARGET_nlm (see below) will be used.
-#
-NLM_NAME		= rewrite
-
-#
-# This is used by the link '-desc ' directive. 
-# If left blank, NLM_NAME will be used.
-#
-NLM_DESCRIPTION	= Rewrite Module
-
-#
-# This is used by the '-threadname' directive.  If left blank,
-# NLM_NAME Thread will be used.
-#
-NLM_THREAD_NAME	= Rewrite Module
-
-#
-# If this is specified, it will override VERSION value in 
-# $(AP_WORK)\build\NWGNUenvironment.inc
-#
-NLM_VERSION		=
-
-#
-# If this is specified, it will override the default of 64K
-#
-NLM_STACK_SIZE	= 8192
-
-
-#
-# If this is specified it will be used by the link '-entry' directive
-#
-NLM_ENTRY_SYM	= _LibCPrelude
-
-#
-# If this is specified it will be used by the link '-exit' directive
-#
-NLM_EXIT_SYM	= _LibCPostlude
-
-#
-# If this is specified it will be used by the link '-check' directive
-#
-NLM_CHECK_SYM	=
-
-#
-# If these are specified it will be used by the link '-flags' directive
-#
-NLM_FLAGS		=  AUTOUNLOAD, PSEUDOPREEMPTION
-
-#
-# If this is specified it will be linked in with the XDCData option in the def 
-# file instead of the default of $(NWOS)/apache.xdc.  XDCData can be disabled
-# by setting APACHE_UNIPROC in the environment
-#
-XDCDATA         = 
-
-#
-# If there is an NLM target, put it here
-#
-TARGET_nlm = \
-	$(OBJDIR)/rewrite.nlm \
-	$(EOLIST)
-
-#
-# If there is an LIB target, put it here
-#
-TARGET_lib = \
-	$(EOLIST)
-
-#
-# These are the OBJ files needed to create the NLM target above.
-# Paths must all use the '/' character
-#
-FILES_nlm_objs = \
-	$(OBJDIR)/mod_rewrite.o \
-	$(EOLIST)
-
-#
-# These are the LIB files needed to create the NLM target above.
-# These will be added as a library command in the link.opt file.
-#
-FILES_nlm_libs = \
-   	libcpre.o \
-	$(EOLIST)
-
-#
-# These are the modules that the above NLM target depends on to load.
-# These will be added as a module command in the link.opt file.
-#
-FILES_nlm_modules = \
-	aprlib \
-	libc \
-	$(EOLIST)
-
-#
-# If the nlm has a msg file, put it's path here
-#
-FILE_nlm_msg =
- 
-#
-# If the nlm has a hlp file put it's path here
-#
-FILE_nlm_hlp =
-
-#
-# If this is specified, it will override $(NWOS)\copyright.txt.
-#
-FILE_nlm_copyright =
-
-#
-# Any additional imports go here
-#
-FILES_nlm_Ximports = \
-	@$(APR)/aprlib.imp \
-	@$(NWOS)/httpd.imp \
-	@libc.imp \
-	$(EOLIST)
- 
-#   
-# Any symbols exported to here
-#
-FILES_nlm_exports = \
-	rewrite_module \
-	$(EOLIST)
-	
-#   
-# These are the OBJ files needed to create the LIB target above.
-# Paths must all use the '/' character
-#
-FILES_lib_objs = \
-		$(EOLIST)
-
-#
-# implement targets and dependancies (leave this section alone)
-#
-
-libs :: $(OBJDIR) $(TARGET_lib)
-
-nlms :: libs $(TARGET_nlm)
-
-#
-# Updated this target to create necessary directories and copy files to the 
-# correct place.  (See $(AP_WORK)\build\NWGNUhead.inc for examples)
-#
-install :: nlms FORCE
-
-#
-# Any specialized rules here
-#
-
-#
-# Include the 'tail' makefile that has targets that depend on variables defined
-# in this makefile
-#
-
-include $(AP_WORK)\build\NWGNUtail.inc
-
diff --git a/modules/mappers/NWGNUspeling b/modules/mappers/NWGNUspeling
deleted file mode 100644
index fdd4263..0000000
--- a/modules/mappers/NWGNUspeling
+++ /dev/null
@@ -1,249 +0,0 @@
-#
-# Make sure all needed macro's are defined
-#
-
-#
-# Get the 'head' of the build environment if necessary.  This includes default
-# targets and paths to tools
-#
-
-ifndef EnvironmentDefined
-include $(AP_WORK)\build\NWGNUhead.inc
-endif
-
-#
-# These directories will be at the beginning of the include list, followed by
-# INCDIRS
-#
-XINCDIRS	+= \
-			$(AP_WORK)/include \
-			$(NWOS) \
-			$(AP_WORK)/modules/arch/netware \
-			$(AP_WORK)/srclib/apr/include \
-			$(AP_WORK)/srclib/apr-util/include \
-			$(AP_WORK)/srclib/apr \
-			$(EOLIST)
-
-#
-# These flags will come after CFLAGS
-#
-XCFLAGS		+= \
-			$(EOLIST)
-
-#
-# These defines will come after DEFINES
-#
-XDEFINES	+= \
-			$(EOLIST)
-
-#
-# These flags will be added to the link.opt file
-#
-XLFLAGS		+= \
-			$(EOLIST)
-
-#
-# These values will be appended to the correct variables based on the value of
-# RELEASE
-#
-ifeq "$(RELEASE)" "debug"
-XINCDIRS	+= \
-			$(EOLIST)
-
-XCFLAGS		+= \
-			$(EOLIST)
-
-XDEFINES	+= \
-			$(EOLIST)
-
-XLFLAGS		+= \
-		   	$(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "noopt"
-XINCDIRS	+= \
-			$(EOLIST)
-
-XCFLAGS		+= \
-			$(EOLIST)
-
-XDEFINES	+= \
-			$(EOLIST)
-
-XLFLAGS		+= \
-		   	$(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "release"
-XINCDIRS	+= \
-			$(EOLIST)
-
-XCFLAGS		+= \
-			$(EOLIST)
-
-XDEFINES	+= \
-			$(EOLIST)
-
-XLFLAGS		+= \
-			$(EOLIST)
-endif
-
-#
-# These are used by the link target if an NLM is being generated
-# This is used by the link 'name' directive to name the nlm.  If left blank
-# TARGET_nlm (see below) will be used.
-#
-NLM_NAME		= speling
-
-#
-# This is used by the link '-desc ' directive. 
-# If left blank, NLM_NAME will be used.
-#
-NLM_DESCRIPTION	= Speling Module
-
-#
-# This is used by the '-threadname' directive.  If left blank,
-# NLM_NAME Thread will be used.
-#
-NLM_THREAD_NAME	= Speling Module
-
-#
-# If this is specified, it will override VERSION value in 
-# $(AP_WORK)\build\NWGNUenvironment.inc
-#
-NLM_VERSION		=
-
-#
-# If this is specified, it will override the default of 64K
-#
-NLM_STACK_SIZE	= 8192
-
-
-#
-# If this is specified it will be used by the link '-entry' directive
-#
-NLM_ENTRY_SYM	= _LibCPrelude
-
-#
-# If this is specified it will be used by the link '-exit' directive
-#
-NLM_EXIT_SYM	= _LibCPostlude
-
-#
-# If this is specified it will be used by the link '-check' directive
-#
-NLM_CHECK_SYM	=
-
-#
-# If these are specified it will be used by the link '-flags' directive
-#
-NLM_FLAGS		=  AUTOUNLOAD, PSEUDOPREEMPTION
-
-#
-# If this is specified it will be linked in with the XDCData option in the def 
-# file instead of the default of $(NWOS)/apache.xdc.  XDCData can be disabled
-# by setting APACHE_UNIPROC in the environment
-#
-XDCDATA         = 
-
-#
-# If there is an NLM target, put it here
-#
-TARGET_nlm = \
-	$(OBJDIR)/speling.nlm \
-	$(EOLIST)
-
-#
-# If there is an LIB target, put it here
-#
-TARGET_lib = \
-	$(EOLIST)
-
-#
-# These are the OBJ files needed to create the NLM target above.
-# Paths must all use the '/' character
-#
-FILES_nlm_objs = \
-	$(OBJDIR)/mod_speling.o \
-	$(EOLIST)
-
-#
-# These are the LIB files needed to create the NLM target above.
-# These will be added as a library command in the link.opt file.
-#
-FILES_nlm_libs = \
-   	libcpre.o \
-	$(EOLIST)
-
-#
-# These are the modules that the above NLM target depends on to load.
-# These will be added as a module command in the link.opt file.
-#
-FILES_nlm_modules = \
-	aprlib \
-	libc \
-	$(EOLIST)
-
-#
-# If the nlm has a msg file, put it's path here
-#
-FILE_nlm_msg =
- 
-#
-# If the nlm has a hlp file put it's path here
-#
-FILE_nlm_hlp =
-
-#
-# If this is specified, it will override $(NWOS)\copyright.txt.
-#
-FILE_nlm_copyright =
-
-#
-# Any additional imports go here
-#
-FILES_nlm_Ximports = \
-	@$(APR)/aprlib.imp \
-	@$(NWOS)/httpd.imp \
-	@libc.imp \
-	$(EOLIST)
- 
-#   
-# Any symbols exported to here
-#
-FILES_nlm_exports = \
-	speling_module \
-	$(EOLIST)
-	
-#   
-# These are the OBJ files needed to create the LIB target above.
-# Paths must all use the '/' character
-#
-FILES_lib_objs = \
-		$(EOLIST)
-
-#
-# implement targets and dependancies (leave this section alone)
-#
-
-libs :: $(OBJDIR) $(TARGET_lib)
-
-nlms :: libs $(TARGET_nlm)
-
-#
-# Updated this target to create necessary directories and copy files to the 
-# correct place.  (See $(AP_WORK)\build\NWGNUhead.inc for examples)
-#
-install :: nlms FORCE
-
-#
-# Any specialized rules here
-#
-
-#
-# Include the 'tail' makefile that has targets that depend on variables defined
-# in this makefile
-#
-
-include $(AP_WORK)\build\NWGNUtail.inc
-
diff --git a/modules/mappers/NWGNUvhost b/modules/mappers/NWGNUvhost
deleted file mode 100644
index a2ee778..0000000
--- a/modules/mappers/NWGNUvhost
+++ /dev/null
@@ -1,249 +0,0 @@
-#
-# Make sure all needed macro's are defined
-#
-
-#
-# Get the 'head' of the build environment if necessary.  This includes default
-# targets and paths to tools
-#
-
-ifndef EnvironmentDefined
-include $(AP_WORK)\build\NWGNUhead.inc
-endif
-
-#
-# These directories will be at the beginning of the include list, followed by
-# INCDIRS
-#
-XINCDIRS	+= \
-			$(AP_WORK)/include \
-			$(NWOS) \
-			$(AP_WORK)/modules/arch/netware \
-			$(AP_WORK)/srclib/apr/include \
-			$(AP_WORK)/srclib/apr-util/include \
-			$(AP_WORK)/srclib/apr \
-			$(EOLIST)
-
-#
-# These flags will come after CFLAGS
-#
-XCFLAGS		+= \
-			$(EOLIST)
-
-#
-# These defines will come after DEFINES
-#
-XDEFINES	+= \
-			$(EOLIST)
-
-#
-# These flags will be added to the link.opt file
-#
-XLFLAGS		+= \
-			$(EOLIST)
-
-#
-# These values will be appended to the correct variables based on the value of
-# RELEASE
-#
-ifeq "$(RELEASE)" "debug"
-XINCDIRS	+= \
-			$(EOLIST)
-
-XCFLAGS		+= \
-			$(EOLIST)
-
-XDEFINES	+= \
-			$(EOLIST)
-
-XLFLAGS		+= \
-		   	$(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "noopt"
-XINCDIRS	+= \
-			$(EOLIST)
-
-XCFLAGS		+= \
-			$(EOLIST)
-
-XDEFINES	+= \
-			$(EOLIST)
-
-XLFLAGS		+= \
-		   	$(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "release"
-XINCDIRS	+= \
-			$(EOLIST)
-
-XCFLAGS		+= \
-			$(EOLIST)
-
-XDEFINES	+= \
-			$(EOLIST)
-
-XLFLAGS		+= \
-			$(EOLIST)
-endif
-
-#
-# These are used by the link target if an NLM is being generated
-# This is used by the link 'name' directive to name the nlm.  If left blank
-# TARGET_nlm (see below) will be used.
-#
-NLM_NAME		= vhost
-
-#
-# This is used by the link '-desc ' directive. 
-# If left blank, NLM_NAME will be used.
-#
-NLM_DESCRIPTION	= Vhost Alias Module
-
-#
-# This is used by the '-threadname' directive.  If left blank,
-# NLM_NAME Thread will be used.
-#
-NLM_THREAD_NAME	= Vhost Alias Module
-
-#
-# If this is specified, it will override VERSION value in 
-# $(AP_WORK)\build\NWGNUenvironment.inc
-#
-NLM_VERSION		=
-
-#
-# If this is specified, it will override the default of 64K
-#
-NLM_STACK_SIZE	= 8192
-
-
-#
-# If this is specified it will be used by the link '-entry' directive
-#
-NLM_ENTRY_SYM	= _LibCPrelude
-
-#
-# If this is specified it will be used by the link '-exit' directive
-#
-NLM_EXIT_SYM	= _LibCPostlude
-
-#
-# If this is specified it will be used by the link '-check' directive
-#
-NLM_CHECK_SYM	=
-
-#
-# If these are specified it will be used by the link '-flags' directive
-#
-NLM_FLAGS		=  AUTOUNLOAD, PSEUDOPREEMPTION
-
-#
-# If this is specified it will be linked in with the XDCData option in the def 
-# file instead of the default of $(NWOS)/apache.xdc.  XDCData can be disabled
-# by setting APACHE_UNIPROC in the environment
-#
-XDCDATA         = 
-
-#
-# If there is an NLM target, put it here
-#
-TARGET_nlm = \
-	$(OBJDIR)/vhost.nlm \
-	$(EOLIST)
-
-#
-# If there is an LIB target, put it here
-#
-TARGET_lib = \
-	$(EOLIST)
-
-#
-# These are the OBJ files needed to create the NLM target above.
-# Paths must all use the '/' character
-#
-FILES_nlm_objs = \
-	$(OBJDIR)/mod_vhost_alias.o \
-	$(EOLIST)
-
-#
-# These are the LIB files needed to create the NLM target above.
-# These will be added as a library command in the link.opt file.
-#
-FILES_nlm_libs = \
-   	libcpre.o \
-	$(EOLIST)
-
-#
-# These are the modules that the above NLM target depends on to load.
-# These will be added as a module command in the link.opt file.
-#
-FILES_nlm_modules = \
-	aprlib \
-	libc \
-	$(EOLIST)
-
-#
-# If the nlm has a msg file, put it's path here
-#
-FILE_nlm_msg =
- 
-#
-# If the nlm has a hlp file put it's path here
-#
-FILE_nlm_hlp =
-
-#
-# If this is specified, it will override $(NWOS)\copyright.txt.
-#
-FILE_nlm_copyright =
-
-#
-# Any additional imports go here
-#
-FILES_nlm_Ximports = \
-	@$(APR)/aprlib.imp \
-	@$(NWOS)/httpd.imp \
-	@libc.imp \
-	$(EOLIST)
- 
-#   
-# Any symbols exported to here
-#
-FILES_nlm_exports = \
-	vhost_alias_module \
-	$(EOLIST)
-	
-#   
-# These are the OBJ files needed to create the LIB target above.
-# Paths must all use the '/' character
-#
-FILES_lib_objs = \
-		$(EOLIST)
-
-#
-# implement targets and dependancies (leave this section alone)
-#
-
-libs :: $(OBJDIR) $(TARGET_lib)
-
-nlms :: libs $(TARGET_nlm)
-
-#
-# Updated this target to create necessary directories and copy files to the 
-# correct place.  (See $(AP_WORK)\build\NWGNUhead.inc for examples)
-#
-install :: nlms FORCE
-
-#
-# Any specialized rules here
-#
-
-#
-# Include the 'tail' makefile that has targets that depend on variables defined
-# in this makefile
-#
-
-include $(AP_WORK)\build\NWGNUtail.inc
-
diff --git a/modules/mappers/config9.m4 b/modules/mappers/config9.m4
deleted file mode 100644
index 54a5aff..0000000
--- a/modules/mappers/config9.m4
+++ /dev/null
@@ -1,50 +0,0 @@
-dnl modules enabled in this directory by default
-
-dnl APACHE_MODULE(name, helptext[, objects[, structname[, default[, config]]]])
-
-APACHE_MODPATH_INIT(mappers)
-
-APACHE_MODULE(vhost_alias, mass hosting module, , , most)
-APACHE_MODULE(negotiation, content negoatiation, , , yes)
-APACHE_MODULE(dir, directory request handling, , , yes)
-APACHE_MODULE(imap, internal imagemaps, , , yes)
-APACHE_MODULE(actions, Action triggering on requests, , , yes)
-APACHE_MODULE(speling, correct common URL misspellings, , , most)
-APACHE_MODULE(userdir, mapping of user requests, , , yes)
-APACHE_MODULE(alias, translation of requests, , , yes)
-
-APACHE_MODULE(rewrite, regex URL translation, , , most, [
-  APR_ADDTO(CFLAGS,-DNO_DBM_REWRITEMAP)
-])
-
-dnl mod_so should only be built as a static DSO
-if test "$enable_so" = "yes"; then
-    enable_so="static"
-elif test "$enable_so" = "shared"; then
-    AC_MSG_ERROR([mod_so can not be built as a shared DSO])
-fi
-
-ap_old_cppflags=$CPPFLAGS
-CPPFLAGS="$CPPFLAGS -I$APR_SOURCE_DIR/include -I$abs_builddir/srclib/apr/include"
-AC_TRY_COMPILE([#include <apr.h>], [
-#if !APR_HAS_DSO
-#error You need APR DSO support to use mod_so. 
-#endif
-], ap_enable_so="static", [
-if test "$enable_so" = "static"; then
-    AC_MSG_ERROR([mod_so has been requested but cannot be built on your system])
-else if test "$sharedobjs" = "yes"; then
-    AC_MSG_ERROR([shared objects have been requested but cannot be built since mod_so cannot be built])
-else
-    ap_enable_so="no"
-fi
-fi
-])
-CPPFLAGS=$ap_old_cppflags
-
-APACHE_MODULE(so, DSO capability, , , $ap_enable_so)
-
-dnl ### why save the cache?
-AC_CACHE_SAVE
-
-APACHE_MODPATH_FINISH
diff --git a/modules/mappers/mod_actions.c b/modules/mappers/mod_actions.c
deleted file mode 100644
index 52552de..0000000
--- a/modules/mappers/mod_actions.c
+++ /dev/null
@@ -1,238 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-/*
- * mod_actions.c: executes scripts based on MIME type or HTTP method
- *
- * by Alexei Kosut; based on mod_cgi.c, mod_mime.c and mod_includes.c,
- * adapted by rst from original NCSA code by Rob McCool
- *
- * Usage instructions:
- *
- * Action mime/type /cgi-bin/script
- * 
- * will activate /cgi-bin/script when a file of content type mime/type is 
- * requested. It sends the URL and file path of the requested document using 
- * the standard CGI PATH_INFO and PATH_TRANSLATED environment variables.
- *
- * Script PUT /cgi-bin/script
- *
- * will activate /cgi-bin/script when a request is received with the
- * HTTP method "PUT".  The available method names are defined in httpd.h.
- * If the method is GET, the script will only be activated if the requested
- * URI includes query information (stuff after a ?-mark).
- */
-
-#include "apr_strings.h"
-#include "ap_config.h"
-#include "httpd.h"
-#include "http_config.h"
-#include "http_request.h"
-#include "http_core.h"
-#include "http_protocol.h"
-#include "http_main.h"
-#include "http_log.h"
-#include "util_script.h"
-
-typedef struct {
-    apr_table_t *action_types;       /* Added with Action... */
-    const char *scripted[METHODS];   /* Added with Script... */
-    int configured;  /* True if Action or Script has been
-                      * called at least once
-                      */
-} action_dir_config;
-
-module AP_MODULE_DECLARE_DATA actions_module;
-
-static void *create_action_dir_config(apr_pool_t *p, char *dummy)
-{
-    action_dir_config *new =
-    (action_dir_config *) apr_pcalloc(p, sizeof(action_dir_config));
-
-    new->action_types = apr_table_make(p, 4);
-
-    return new;
-}
-
-static void *merge_action_dir_configs(apr_pool_t *p, void *basev, void *addv)
-{
-    action_dir_config *base = (action_dir_config *) basev;
-    action_dir_config *add = (action_dir_config *) addv;
-    action_dir_config *new = (action_dir_config *) apr_palloc(p,
-                                  sizeof(action_dir_config));
-    int i;
-
-    new->action_types = apr_table_overlay(p, add->action_types,
-				       base->action_types);
-
-    for (i = 0; i < METHODS; ++i) {
-        new->scripted[i] = add->scripted[i] ? add->scripted[i]
-                                            : base->scripted[i];
-    }
-
-    new->configured = (base->configured || add->configured);
-    return new;
-}
-
-static const char *add_action(cmd_parms *cmd, void *m_v, 
-                              const char *type, const char *script)
-{
-    action_dir_config *m = (action_dir_config *)m_v;
-    apr_table_setn(m->action_types, type, script);
-    m->configured = 1;
-    return NULL;
-}
-
-static const char *set_script(cmd_parms *cmd, void *m_v,
-                              const char *method, const char *script)
-{
-    action_dir_config *m = (action_dir_config *)m_v;    
-    int methnum;
-
-    methnum = ap_method_number_of(method);
-    if (methnum == M_TRACE)
-        return "TRACE not allowed for Script";
-    else if (methnum == M_INVALID)
-        return "Unknown method type for Script";
-    else
-        m->scripted[methnum] = script;
-
-    m->configured = 1;
-    return NULL;
-}
-
-static const command_rec action_cmds[] =
-{
-    AP_INIT_TAKE2("Action", add_action, NULL, OR_FILEINFO,
-                  "a media type followed by a script name"),
-    AP_INIT_TAKE2("Script", set_script, NULL, ACCESS_CONF | RSRC_CONF,
-                  "a method followed by a script name"),
-    {NULL}
-};
-
-static int action_handler(request_rec *r)
-{
-    action_dir_config *conf = (action_dir_config *)
-        ap_get_module_config(r->per_dir_config, &actions_module);
-    const char *t, *action;
-    const char *script;
-    int i;
-
-    if (!conf->configured) {
-        return DECLINED;
-    }
-
-    /* Note that this handler handles _all_ types, so handler is unchecked */
-
-    /* Set allowed stuff */
-    for (i = 0; i < METHODS; ++i) {
-        if (conf->scripted[i])
-            r->allowed |= (AP_METHOD_BIT << i);
-    }
-
-    /* First, check for the method-handling scripts */
-    if (r->method_number == M_GET) {
-        if (r->args)
-            script = conf->scripted[M_GET];
-        else
-            script = NULL;
-    }
-    else {
-        script = conf->scripted[r->method_number];
-    }
-
-    /* Check for looping, which can happen if the CGI script isn't */
-    if (script && r->prev && r->prev->prev)
-	return DECLINED;
-
-    /* Second, check for actions (which override the method scripts) */
-    action = r->handler ? r->handler :
-	ap_field_noparam(r->pool, r->content_type);
-    if ((t = apr_table_get(conf->action_types,
-		       action ? action : ap_default_type(r)))) {
-	script = t;
-	if (r->finfo.filetype == 0) {
-	    ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-			"File does not exist: %s", r->filename);
-	    return HTTP_NOT_FOUND;
-	}
-    }
-
-    if (script == NULL)
-	return DECLINED;
-
-    ap_internal_redirect_handler(apr_pstrcat(r->pool, script, ap_escape_uri(r->pool,
-			  r->uri), r->args ? "?" : NULL, r->args, NULL), r);
-    return OK;
-}
-
-static void register_hooks(apr_pool_t *p)
-{
-    ap_hook_handler(action_handler,NULL,NULL,APR_HOOK_LAST);
-}
-
-module AP_MODULE_DECLARE_DATA actions_module =
-{
-    STANDARD20_MODULE_STUFF,
-    create_action_dir_config,	/* dir config creater */
-    merge_action_dir_configs,	/* dir merger --- default is to override */
-    NULL,			/* server config */
-    NULL,			/* merge server config */
-    action_cmds,		/* command apr_table_t */
-    register_hooks		/* register hooks */
-};
diff --git a/modules/mappers/mod_actions.dsp b/modules/mappers/mod_actions.dsp
deleted file mode 100644
index 39fed16..0000000
--- a/modules/mappers/mod_actions.dsp
+++ /dev/null
@@ -1,128 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mod_actions" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mod_actions - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "mod_actions.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "mod_actions.mak" CFG="mod_actions - Win32 Release"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "mod_actions - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mod_actions - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "mod_actions - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /O2 /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Release\mod_actions" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /map /machine:I386 /out:"Release/mod_actions.so" /base:@..\..\os\win32\BaseAddr.ref,mod_actions
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /map /machine:I386 /out:"Release/mod_actions.so" /base:@..\..\os\win32\BaseAddr.ref,mod_actions
-
-!ELSEIF  "$(CFG)" == "mod_actions - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Debug\mod_actions" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /map /debug /machine:I386 /out:"Debug/mod_actions.so" /base:@..\..\os\win32\BaseAddr.ref,mod_actions
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /map /debug /machine:I386 /out:"Debug/mod_actions.so" /base:@..\..\os\win32\BaseAddr.ref,mod_actions
-
-!ENDIF 
-
-# Begin Target
-
-# Name "mod_actions - Win32 Release"
-# Name "mod_actions - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\mod_actions.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mod_actions.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\build\win32\win32ver.awk
-
-!IF  "$(CFG)" == "mod_actions - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_actions.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ../../build/win32/win32ver.awk mod_actions  "actions_module for Apache" ../../include/ap_release.h > .\mod_actions.rc
-
-# End Custom Build
-
-!ELSEIF  "$(CFG)" == "mod_actions - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_actions.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ../../build/win32/win32ver.awk mod_actions  "actions_module for Apache" ../../include/ap_release.h > .\mod_actions.rc
-
-# End Custom Build
-
-!ENDIF 
-
-# End Source File
-# End Target
-# End Project
diff --git a/modules/mappers/mod_actions.exp b/modules/mappers/mod_actions.exp
deleted file mode 100644
index 8cc6cdb..0000000
--- a/modules/mappers/mod_actions.exp
+++ /dev/null
@@ -1 +0,0 @@
-actions_module
diff --git a/modules/mappers/mod_alias.c b/modules/mappers/mod_alias.c
deleted file mode 100644
index 11e974e..0000000
--- a/modules/mappers/mod_alias.c
+++ /dev/null
@@ -1,485 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-/*
- * http_alias.c: Stuff for dealing with directory aliases
- * 
- * Original by Rob McCool, rewritten in succession by David Robinson
- * and rst.
- * 
- */
-
-#include "apr_strings.h"
-#include "apr_lib.h"
-
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-#include "ap_config.h"
-#include "httpd.h"
-#include "http_core.h"
-#include "http_config.h"
-#include "http_request.h"
-#include "http_log.h"
-
-
-typedef struct {
-    const char *real;
-    const char *fake;
-    char *handler;
-    regex_t *regexp;
-    int redir_status;		/* 301, 302, 303, 410, etc */
-} alias_entry;
-
-typedef struct {
-    apr_array_header_t *aliases;
-    apr_array_header_t *redirects;
-} alias_server_conf;
-
-typedef struct {
-    apr_array_header_t *redirects;
-} alias_dir_conf;
-
-module AP_MODULE_DECLARE_DATA alias_module;
-
-static void *create_alias_config(apr_pool_t *p, server_rec *s)
-{
-    alias_server_conf *a =
-    (alias_server_conf *) apr_pcalloc(p, sizeof(alias_server_conf));
-
-    a->aliases = apr_array_make(p, 20, sizeof(alias_entry));
-    a->redirects = apr_array_make(p, 20, sizeof(alias_entry));
-    return a;
-}
-
-static void *create_alias_dir_config(apr_pool_t *p, char *d)
-{
-    alias_dir_conf *a =
-    (alias_dir_conf *) apr_pcalloc(p, sizeof(alias_dir_conf));
-    a->redirects = apr_array_make(p, 2, sizeof(alias_entry));
-    return a;
-}
-
-static void *merge_alias_config(apr_pool_t *p, void *basev, void *overridesv)
-{
-    alias_server_conf *a =
-    (alias_server_conf *) apr_pcalloc(p, sizeof(alias_server_conf));
-    alias_server_conf *base = (alias_server_conf *) basev, *overrides = (alias_server_conf *) overridesv;
-
-    a->aliases = apr_array_append(p, overrides->aliases, base->aliases);
-    a->redirects = apr_array_append(p, overrides->redirects, base->redirects);
-    return a;
-}
-
-static void *merge_alias_dir_config(apr_pool_t *p, void *basev, void *overridesv)
-{
-    alias_dir_conf *a =
-    (alias_dir_conf *) apr_pcalloc(p, sizeof(alias_dir_conf));
-    alias_dir_conf *base = (alias_dir_conf *) basev, *overrides = (alias_dir_conf *) overridesv;
-    a->redirects = apr_array_append(p, overrides->redirects, base->redirects);
-    return a;
-}
-
-static const char *add_alias_internal(cmd_parms *cmd, void *dummy,
-				      const char *f, const char *r,
-				      int use_regex)
-{
-    server_rec *s = cmd->server;
-    alias_server_conf *conf = ap_get_module_config(s->module_config,
-                                                   &alias_module);
-    alias_entry *new = apr_array_push(conf->aliases);
-
-    /* XX r can NOT be relative to DocumentRoot here... compat bug. */
-
-    if (use_regex) {
-	new->regexp = ap_pregcomp(cmd->pool, f, REG_EXTENDED);
-	if (new->regexp == NULL)
-	    return "Regular expression could not be compiled.";
-        new->real = r;
-    }
-    else {
-        /* XXX This may be optimized, but we must know that new->real
-         * exists.  If so, we can dir merge later, trusing new->real
-         * and just canonicalizing the remainder.  Not till I finish
-         * cleaning out the old ap_canonical stuff first.
-         */
-        new->real = r;
-    }
-    new->fake = f;
-    new->handler = cmd->info;
-
-    return NULL;
-}
-
-static const char *add_alias(cmd_parms *cmd, void *dummy, const char *f,
-			     const char *r)
-{
-    return add_alias_internal(cmd, dummy, f, r, 0);
-}
-
-static const char *add_alias_regex(cmd_parms *cmd, void *dummy, const char *f,
-				   const char *r)
-{
-    return add_alias_internal(cmd, dummy, f, r, 1);
-}
-
-static const char *add_redirect_internal(cmd_parms *cmd,
-					 alias_dir_conf *dirconf,
-					 const char *arg1, const char *arg2, 
-                                         const char *arg3, int use_regex)
-{
-    alias_entry *new;
-    server_rec *s = cmd->server;
-    alias_server_conf *serverconf = ap_get_module_config(s->module_config,
-                                                         &alias_module);
-    int status = (int) (long) cmd->info;
-    regex_t *r = NULL;
-    const char *f = arg2;
-    const char *url = arg3;
-
-    if (!strcasecmp(arg1, "gone"))
-	status = HTTP_GONE;
-    else if (!strcasecmp(arg1, "permanent"))
-	status = HTTP_MOVED_PERMANENTLY;
-    else if (!strcasecmp(arg1, "temp"))
-	status = HTTP_MOVED_TEMPORARILY;
-    else if (!strcasecmp(arg1, "seeother"))
-	status = HTTP_SEE_OTHER;
-    else if (apr_isdigit(*arg1))
-	status = atoi(arg1);
-    else {
-	f = arg1;
-	url = arg2;
-    }
-
-    if (use_regex) {
-	r = ap_pregcomp(cmd->pool, f, REG_EXTENDED);
-	if (r == NULL)
-	    return "Regular expression could not be compiled.";
-    }
-
-    if (ap_is_HTTP_REDIRECT(status)) {
-	if (!url)
-	    return "URL to redirect to is missing";
-	if (!use_regex && !ap_is_url(url))
-	    return "Redirect to non-URL";
-    }
-    else {
-	if (url)
-	    return "Redirect URL not valid for this status";
-    }
-
-    if (cmd->path)
-	new = apr_array_push(dirconf->redirects);
-    else
-	new = apr_array_push(serverconf->redirects);
-
-    new->fake = f;
-    new->real = url;
-    new->regexp = r;
-    new->redir_status = status;
-    return NULL;
-}
-
-static const char *add_redirect(cmd_parms *cmd, void *dirconf,
-                                const char *arg1, const char *arg2,
-				const char *arg3)
-{
-    return add_redirect_internal(cmd, dirconf, arg1, arg2, arg3, 0);
-}
-
-static const char *add_redirect2(cmd_parms *cmd, void *dirconf,
-                                const char *arg1, const char *arg2)
-{
-    return add_redirect_internal(cmd, dirconf, arg1, arg2, NULL, 0);
-}
-
-static const char *add_redirect_regex(cmd_parms *cmd, void *dirconf,
-				      const char *arg1, const char *arg2,
-				      const char *arg3)
-{
-    return add_redirect_internal(cmd, dirconf, arg1, arg2, arg3, 1);
-}
-
-static const command_rec alias_cmds[] =
-{
-    AP_INIT_TAKE2("Alias", add_alias, NULL, RSRC_CONF,
-                  "a fakename and a realname"),
-    AP_INIT_TAKE2("ScriptAlias", add_alias, "cgi-script", RSRC_CONF,
-                  "a fakename and a realname"),
-    AP_INIT_TAKE23("Redirect", add_redirect, (void *) HTTP_MOVED_TEMPORARILY,
-                   OR_FILEINFO,
-                   "an optional status, then document to be redirected and "
-                   "destination URL"),
-    AP_INIT_TAKE2("AliasMatch", add_alias_regex, NULL, RSRC_CONF,
-                  "a regular expression and a filename"),
-    AP_INIT_TAKE2("ScriptAliasMatch", add_alias_regex, "cgi-script", RSRC_CONF,
-                  "a regular expression and a filename"),
-    AP_INIT_TAKE23("RedirectMatch", add_redirect_regex, 
-                   (void *) HTTP_MOVED_TEMPORARILY, OR_FILEINFO,
-                   "an optional status, then a regular expression and "
-                   "destination URL"),
-    AP_INIT_TAKE2("RedirectTemp", add_redirect2,
-		  (void *) HTTP_MOVED_TEMPORARILY, OR_FILEINFO,
-                  "a document to be redirected, then the destination URL"),
-    AP_INIT_TAKE2("RedirectPermanent", add_redirect2, 
-                  (void *) HTTP_MOVED_PERMANENTLY, OR_FILEINFO,
-                  "a document to be redirected, then the destination URL"),
-    {NULL}
-};
-
-static int alias_matches(const char *uri, const char *alias_fakename)
-{
-    const char *aliasp = alias_fakename, *urip = uri;
-
-    while (*aliasp) {
-	if (*aliasp == '/') {
-	    /* any number of '/' in the alias matches any number in
-	     * the supplied URI, but there must be at least one...
-	     */
-	    if (*urip != '/')
-		return 0;
-
-	    while (*aliasp == '/')
-		++aliasp;
-	    while (*urip == '/')
-		++urip;
-	}
-	else {
-	    /* Other characters are compared literally */
-	    if (*urip++ != *aliasp++)
-		return 0;
-	}
-    }
-
-    /* Check last alias path component matched all the way */
-
-    if (aliasp[-1] != '/' && *urip != '\0' && *urip != '/')
-	return 0;
-
-    /* Return number of characters from URI which matched (may be
-     * greater than length of alias, since we may have matched
-     * doubled slashes)
-     */
-
-    return urip - uri;
-}
-
-static char *try_alias_list(request_rec *r, apr_array_header_t *aliases, int doesc, int *status)
-{
-    alias_entry *entries = (alias_entry *) aliases->elts;
-    regmatch_t regm[10];
-    char *found = NULL;
-    int i;
-
-    for (i = 0; i < aliases->nelts; ++i) {
-	alias_entry *p = &entries[i];
-	int l;
-
-	if (p->regexp) {
-	    if (!ap_regexec(p->regexp, r->uri, p->regexp->re_nsub + 1, regm, 0)) {
-		if (p->real) {
-		    found = ap_pregsub(r->pool, p->real, r->uri,
-				    p->regexp->re_nsub + 1, regm);
-		    if (found && doesc) {
-                        apr_uri_t uri;
-                        apr_uri_parse(r->pool, found, &uri);
-                        /* Do not escape the query string or fragment. */
-                        found = apr_uri_unparse(r->pool, &uri, 
-                                                APR_URI_UNP_OMITQUERY);
-                        found = ap_escape_uri(r->pool, found);
-                        if (uri.query) {
-                            found = apr_pstrcat(r->pool, found, "?", 
-                                                uri.query, NULL);
-                        }
-                        if (uri.fragment) {
-                            found = apr_pstrcat(r->pool, found, "#", 
-                                                uri.fragment, NULL);
-                        }
-		    }
-		}
-		else {
-		    /* need something non-null */
-		    found = apr_pstrdup(r->pool, "");
-		}
-	    }
-	}
-	else {
-	    l = alias_matches(r->uri, p->fake);
-
-	    if (l > 0) {
-		if (doesc) {
-		    char *escurl;
-		    escurl = ap_os_escape_path(r->pool, r->uri + l, 1);
-
-		    found = apr_pstrcat(r->pool, p->real, escurl, NULL);
-		}
-		else
-		    found = apr_pstrcat(r->pool, p->real, r->uri + l, NULL);
-	    }
-	}
-
-	if (found) {
-	    if (p->handler) {	/* Set handler, and leave a note for mod_cgi */
-		r->handler = p->handler;
-		apr_table_setn(r->notes, "alias-forced-type", r->handler);
-	    }
-            /* XXX This is as SLOW as can be, next step, we optimize
-             * and merge to whatever part of the found path was already
-             * canonicalized.  After I finish eliminating os canonical.
-             * Better fail test for ap_server_root_relative needed here.
-             */
-            if (!doesc) {
-                found = ap_server_root_relative(r->pool, found);
-            }
-            if (found) {
-	        *status = p->redir_status;
-            }
-	    return found;
-	}
-
-    }
-
-    return NULL;
-}
-
-static int translate_alias_redir(request_rec *r)
-{
-    ap_conf_vector_t *sconf = r->server->module_config;
-    alias_server_conf *serverconf = ap_get_module_config(sconf, &alias_module);
-    char *ret;
-    int status;
-
-    if (r->uri[0] != '/' && r->uri[0] != '\0')
-	return DECLINED;
-
-    if ((ret = try_alias_list(r, serverconf->redirects, 1, &status)) != NULL) {
-	if (ap_is_HTTP_REDIRECT(status)) {
-	    /* include QUERY_STRING if any */
-	    if (r->args) {
-		ret = apr_pstrcat(r->pool, ret, "?", r->args, NULL);
-	    }
-	    apr_table_setn(r->headers_out, "Location", ret);
-	}
-	return status;
-    }
-
-    if ((ret = try_alias_list(r, serverconf->aliases, 0, &status)) != NULL) {
-	r->filename = ret;
-	return OK;
-    }
-
-    return DECLINED;
-}
-
-static int fixup_redir(request_rec *r)
-{
-    void *dconf = r->per_dir_config;
-    alias_dir_conf *dirconf =
-    (alias_dir_conf *) ap_get_module_config(dconf, &alias_module);
-    char *ret;
-    int status;
-
-    /* It may have changed since last time, so try again */
-
-    if ((ret = try_alias_list(r, dirconf->redirects, 1, &status)) != NULL) {
-        if (ap_is_HTTP_REDIRECT(status)) {
-            if (ret[0] == '/') {
-                char *orig_target = ret;
-
-                ret = ap_construct_url(r->pool, ret, r);
-                ap_log_rerror(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r,
-                              "incomplete redirection target of '%s' for "
-                              "URI '%s' modified to '%s'",
-                              orig_target, r->uri, ret);
-            }
-            if (!ap_is_url(ret)) {
-                status = HTTP_INTERNAL_SERVER_ERROR;
-                ap_log_rerror(APLOG_MARK, APLOG_ERR|APLOG_NOERRNO, 0, r,
-                              "cannot redirect '%s' to '%s'; "
-                              "target is not a valid absoluteURI or abs_path",
-                              r->uri, ret);
-            }
-            else {
-                apr_table_setn(r->headers_out, "Location", ret);
-            }
-        }
-	return status;
-    }
-
-    return DECLINED;
-}
-
-static void register_hooks(apr_pool_t *p)
-{
-    static const char * const aszPre[]={ "mod_userdir.c",NULL };
-
-    ap_hook_translate_name(translate_alias_redir,aszPre,NULL,APR_HOOK_MIDDLE);
-    ap_hook_fixups(fixup_redir,NULL,NULL,APR_HOOK_MIDDLE);
-}
-
-module AP_MODULE_DECLARE_DATA alias_module =
-{
-    STANDARD20_MODULE_STUFF,
-    create_alias_dir_config,	/* dir config creater */
-    merge_alias_dir_config,	/* dir merger --- default is to override */
-    create_alias_config,	/* server config */
-    merge_alias_config,		/* merge server configs */
-    alias_cmds,			/* command apr_table_t */
-    register_hooks		/* register hooks */
-};
diff --git a/modules/mappers/mod_alias.dsp b/modules/mappers/mod_alias.dsp
deleted file mode 100644
index d09c7af..0000000
--- a/modules/mappers/mod_alias.dsp
+++ /dev/null
@@ -1,128 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mod_alias" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mod_alias - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "mod_alias.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "mod_alias.mak" CFG="mod_alias - Win32 Release"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "mod_alias - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mod_alias - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "mod_alias - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /O2 /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Release\mod_alias" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /map /machine:I386 /out:"Release/mod_alias.so" /base:@..\..\os\win32\BaseAddr.ref,mod_alias
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /map /machine:I386 /out:"Release/mod_alias.so" /base:@..\..\os\win32\BaseAddr.ref,mod_alias
-
-!ELSEIF  "$(CFG)" == "mod_alias - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Debug\mod_alias" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /map /debug /machine:I386 /out:"Debug/mod_alias.so" /base:@..\..\os\win32\BaseAddr.ref,mod_alias
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /map /debug /machine:I386 /out:"Debug/mod_alias.so" /base:@..\..\os\win32\BaseAddr.ref,mod_alias
-
-!ENDIF 
-
-# Begin Target
-
-# Name "mod_alias - Win32 Release"
-# Name "mod_alias - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\mod_alias.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mod_alias.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\build\win32\win32ver.awk
-
-!IF  "$(CFG)" == "mod_alias - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_alias.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ../../build/win32/win32ver.awk mod_alias  "alias_module for Apache" ../../include/ap_release.h > .\mod_alias.rc
-
-# End Custom Build
-
-!ELSEIF  "$(CFG)" == "mod_alias - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_alias.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ../../build/win32/win32ver.awk mod_alias  "alias_module for Apache" ../../include/ap_release.h > .\mod_alias.rc
-
-# End Custom Build
-
-!ENDIF 
-
-# End Source File
-# End Target
-# End Project
diff --git a/modules/mappers/mod_alias.exp b/modules/mappers/mod_alias.exp
deleted file mode 100644
index ac386ec..0000000
--- a/modules/mappers/mod_alias.exp
+++ /dev/null
@@ -1 +0,0 @@
-alias_module
diff --git a/modules/mappers/mod_dir.c b/modules/mappers/mod_dir.c
deleted file mode 100644
index bfff247..0000000
--- a/modules/mappers/mod_dir.c
+++ /dev/null
@@ -1,260 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-/*
- * mod_dir.c: handle default index files, and trailing-/ redirects
- */
-
-#include "apr_strings.h"
-#include "ap_config.h"
-#include "httpd.h"
-#include "http_config.h"
-#include "http_core.h"
-#include "http_request.h"
-#include "http_protocol.h"
-#include "http_log.h"
-#include "http_main.h"
-#include "util_script.h"
-
-module AP_MODULE_DECLARE_DATA dir_module;
-
-typedef struct dir_config_struct {
-    apr_array_header_t *index_names;
-} dir_config_rec;
-
-#define DIR_CMD_PERMS OR_INDEXES
-
-static const char *add_index(cmd_parms *cmd, void *dummy, const char *arg)
-{
-    dir_config_rec *d = dummy;
-
-    if (!d->index_names) {
-	d->index_names = apr_array_make(cmd->pool, 2, sizeof(char *));
-    }
-    *(const char **)apr_array_push(d->index_names) = arg;
-    return NULL;
-}
-
-static const command_rec dir_cmds[] =
-{
-    AP_INIT_ITERATE("DirectoryIndex", add_index, NULL, DIR_CMD_PERMS,
-                    "a list of file names"),
-    {NULL}
-};
-
-static void *create_dir_config(apr_pool_t *p, char *dummy)
-{
-    dir_config_rec *new =
-    (dir_config_rec *) apr_pcalloc(p, sizeof(dir_config_rec));
-
-    new->index_names = NULL;
-    return (void *) new;
-}
-
-static void *merge_dir_configs(apr_pool_t *p, void *basev, void *addv)
-{
-    dir_config_rec *new = (dir_config_rec *) apr_pcalloc(p, sizeof(dir_config_rec));
-    dir_config_rec *base = (dir_config_rec *) basev;
-    dir_config_rec *add = (dir_config_rec *) addv;
-
-    new->index_names = add->index_names ? add->index_names : base->index_names;
-    return new;
-}
-
-static int fixup_dir(request_rec *r)
-{
-    dir_config_rec *d;
-    char *dummy_ptr[1];
-    char **names_ptr;
-    int num_names;
-    int error_notfound = 0;
-
-    /* only handle requests against directories */
-    if (r->finfo.filetype != APR_DIR) {
-        return DECLINED;
-    }
-    
-    /* In case mod_mime wasn't present, and no handler was assigned. */
-    if (!r->handler) {
-        r->handler = DIR_MAGIC_TYPE;
-    }
-
-    /* Never tollerate path_info on dir requests */
-    if (r->path_info && *r->path_info) {
-        return DECLINED;
-    }
-
-    /* Redirect requests that are not '/' terminated */
-    if (r->uri[0] == '\0' || r->uri[strlen(r->uri) - 1] != '/') 
-    {
-        char *ifile;
-
-        /* Only redirect non-get requests if we have no note to warn
-         * that this browser cannot handle redirs on non-GET requests 
-         * (such as Microsoft's WebFolders). 
-         */
-        if (r->method_number != M_GET
-                && apr_table_get(r->subprocess_env, "redirect-carefully")) {
-            return DECLINED;
-        }
-
-        if (r->args != NULL)
-            ifile = apr_pstrcat(r->pool, ap_escape_uri(r->pool, r->uri),
-                                "/", "?", r->args, NULL);
-        else
-            ifile = apr_pstrcat(r->pool, ap_escape_uri(r->pool, r->uri),
-                                "/", NULL);
-
-        apr_table_setn(r->headers_out, "Location",
-                       ap_construct_url(r->pool, ifile, r));
-        return HTTP_MOVED_PERMANENTLY;
-    }
-
-    if (strcmp(r->handler,DIR_MAGIC_TYPE)) {
-        return DECLINED;
-    }
-
-    d = (dir_config_rec *) ap_get_module_config(r->per_dir_config,
-                                                &dir_module);
-
-    if (d->index_names) {
-        names_ptr = (char **)d->index_names->elts;
-        num_names = d->index_names->nelts;
-    }
-    else {
-        dummy_ptr[0] = AP_DEFAULT_INDEX;
-        names_ptr = dummy_ptr;
-        num_names = 1;
-    }
-
-    for (; num_names; ++names_ptr, --num_names) {
-        /* XXX: Is this name_ptr considered escaped yet, or not??? */
-        char *name_ptr = *names_ptr;
-        request_rec *rr;
-
-        /* Once upon a time args were handled _after_ the successful redirect.
-         * But that redirect might then _refuse_ the given r->args, creating
-         * a nasty tangle.  It seems safer to consider the r->args while we
-         * determine if name_ptr is our viable index, and therefore set them
-         * up correctly on redirect.
-         */
-        if (r->args != NULL)
-            name_ptr = apr_pstrcat(r->pool, name_ptr, "?", r->args, NULL);
-
-        rr = ap_sub_req_lookup_uri(name_ptr, r, NULL);
-
-        /* XXX: (filetype == APR_REG) - we can't use a non-file index??? */
-        if (rr->status == HTTP_OK && rr->finfo.filetype == APR_REG) {
-            ap_internal_fast_redirect(rr, r);
-            return OK;
-        }
-            
-        /* If the request returned a redirect, propagate it to the client */
-
-        if (ap_is_HTTP_REDIRECT(rr->status) ||
-            (rr->status == HTTP_NOT_ACCEPTABLE && num_names == 1) ||
-            (rr->status == HTTP_UNAUTHORIZED && num_names == 1)) {
-
-            apr_pool_join(r->pool, rr->pool);
-            error_notfound = rr->status;
-            r->notes = apr_table_overlay(r->pool, r->notes, rr->notes);
-            r->headers_out = apr_table_overlay(r->pool, r->headers_out,
-                                            rr->headers_out);
-            r->err_headers_out = apr_table_overlay(r->pool, r->err_headers_out,
-                                                rr->err_headers_out);
-            return error_notfound;
-        }
-
-        /* If the request returned something other than 404 (or 200),
-         * it means the module encountered some sort of problem. To be
-         * secure, we should return the error, rather than allow autoindex
-         * to create a (possibly unsafe) directory index.
-         *
-         * So we store the error, and if none of the listed files
-         * exist, we return the last error response we got, instead
-         * of a directory listing.
-         */
-        if (rr->status && rr->status != HTTP_NOT_FOUND && rr->status != HTTP_OK)
-            error_notfound = rr->status;
-
-        ap_destroy_sub_req(rr);
-    }
-
-    if (error_notfound) {
-        return error_notfound;
-    }
-
-    /* nothing for us to do, pass on through */
-
-    return DECLINED;
-}
-
-static void register_hooks(apr_pool_t *p)
-{
-    ap_hook_fixups(fixup_dir,NULL,NULL,APR_HOOK_LAST);
-}
-
-module AP_MODULE_DECLARE_DATA dir_module = {
-    STANDARD20_MODULE_STUFF,
-    create_dir_config,		/* create per-directory config structure */
-    merge_dir_configs,		/* merge per-directory config structures */
-    NULL,			/* create per-server config structure */
-    NULL,			/* merge per-server config structures */
-    dir_cmds,			/* command apr_table_t */
-    register_hooks		/* register hooks */
-};
diff --git a/modules/mappers/mod_dir.dsp b/modules/mappers/mod_dir.dsp
deleted file mode 100644
index aad198e..0000000
--- a/modules/mappers/mod_dir.dsp
+++ /dev/null
@@ -1,128 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mod_dir" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mod_dir - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "mod_dir.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "mod_dir.mak" CFG="mod_dir - Win32 Release"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "mod_dir - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mod_dir - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "mod_dir - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /O2 /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Release\mod_dir" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /map /machine:I386 /out:"Release/mod_dir.so" /base:@..\..\os\win32\BaseAddr.ref,mod_dir
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /map /machine:I386 /out:"Release/mod_dir.so" /base:@..\..\os\win32\BaseAddr.ref,mod_dir
-
-!ELSEIF  "$(CFG)" == "mod_dir - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Debug\mod_dir" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /map /debug /machine:I386 /out:"Debug/mod_dir.so" /base:@..\..\os\win32\BaseAddr.ref,mod_dir
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /map /debug /machine:I386 /out:"Debug/mod_dir.so" /base:@..\..\os\win32\BaseAddr.ref,mod_dir
-
-!ENDIF 
-
-# Begin Target
-
-# Name "mod_dir - Win32 Release"
-# Name "mod_dir - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\mod_dir.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mod_dir.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\build\win32\win32ver.awk
-
-!IF  "$(CFG)" == "mod_dir - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_dir.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ../../build/win32/win32ver.awk mod_dir  "dir_module for Apache" ../../include/ap_release.h > .\mod_dir.rc
-
-# End Custom Build
-
-!ELSEIF  "$(CFG)" == "mod_dir - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_dir.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ../../build/win32/win32ver.awk mod_dir  "dir_module for Apache" ../../include/ap_release.h > .\mod_dir.rc
-
-# End Custom Build
-
-!ENDIF 
-
-# End Source File
-# End Target
-# End Project
diff --git a/modules/mappers/mod_dir.exp b/modules/mappers/mod_dir.exp
deleted file mode 100644
index 5fbf772..0000000
--- a/modules/mappers/mod_dir.exp
+++ /dev/null
@@ -1 +0,0 @@
-dir_module
diff --git a/modules/mappers/mod_imap.c b/modules/mappers/mod_imap.c
deleted file mode 100644
index ecf3657..0000000
--- a/modules/mappers/mod_imap.c
+++ /dev/null
@@ -1,925 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-/*
- * This imagemap module started as a port of the original imagemap.c
- * written by Rob McCool (11/13/93 robm@ncsa.uiuc.edu).
- * This version includes the mapping algorithms found in version 1.3
- * of imagemap.c.
- *
- * Contributors to this code include:
- *
- * Kevin Hughes, kevinh@pulua.hcc.hawaii.edu
- *
- * Eric Haines, erich@eye.com
- * "macmartinized" polygon code copyright 1992 by Eric Haines, erich@eye.com
- *
- * Randy Terbush, randy@zyzzyva.com
- * port to Apache module format, "base_uri" and support for relative URLs
- * 
- * James H. Cloos, Jr., cloos@jhcloos.com
- * Added point datatype, using code in NCSA's version 1.8 imagemap.c
- * program, as distributed with version 1.4.1 of their server.
- * The point code is originally added by Craig Milo Rogers, Rogers@ISI.Edu
- *
- * Nathan Kurz, nate@tripod.com
- * Rewrite/reorganization.  New handling of default, base and relative URLs.  
- * New Configuration directives:
- *    ImapMenu {none, formatted, semiformatted, unformatted}
- *    ImapDefault {error, nocontent, referer, menu, URL}
- *    ImapBase {map, referer, URL}
- * Support for creating non-graphical menu added.  (backwards compatible):
- *    Old:  directive URL [x,y ...]
- *    New:  directive URL "Menu text" [x,y ...]
- *     or:  directive URL x,y ... "Menu text"
- * Map format and menu concept courtesy Joshua Bell, jsbell@acs.ucalgary.ca.
- *
- * Mark Cox, mark@ukweb.com, Allow relative URLs even when no base specified
- */
-
-#include "apr.h"
-#include "apr_strings.h"
-#include "apr_lib.h"
-
-#define APR_WANT_STDIO          /* for sscanf() */
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-#include "ap_config.h"
-#include "httpd.h"
-#include "http_config.h"
-#include "http_request.h"
-#include "http_core.h"
-#include "http_protocol.h"
-#include "http_main.h"
-#include "http_log.h"
-#include "util_script.h"
-#include "mod_core.h"
-
-
-#define IMAP_MAGIC_TYPE "application/x-httpd-imap"
-#define MAXVERTS 100
-#define X 0
-#define Y 1
-
-#define IMAP_MENU_DEFAULT "formatted"
-#define IMAP_DEFAULT_DEFAULT "nocontent"
-#define IMAP_BASE_DEFAULT "map"
-
-#ifdef SUNOS4
-double strtod();                /* SunOS needed this */
-#endif
-
-module AP_MODULE_DECLARE_DATA imap_module;
-
-typedef struct {
-    char *imap_menu;
-    char *imap_default;
-    char *imap_base;
-} imap_conf_rec;
-
-static void *create_imap_dir_config(apr_pool_t *p, char *dummy)
-{
-    imap_conf_rec *icr =
-    (imap_conf_rec *) apr_palloc(p, sizeof(imap_conf_rec));
-
-    icr->imap_menu = NULL;
-    icr->imap_default = NULL;
-    icr->imap_base = NULL;
-
-    return icr;
-}
-
-static void *merge_imap_dir_configs(apr_pool_t *p, void *basev, void *addv)
-{
-    imap_conf_rec *new = (imap_conf_rec *) apr_pcalloc(p, sizeof(imap_conf_rec));
-    imap_conf_rec *base = (imap_conf_rec *) basev;
-    imap_conf_rec *add = (imap_conf_rec *) addv;
-
-    new->imap_menu = add->imap_menu ? add->imap_menu : base->imap_menu;
-    new->imap_default = add->imap_default ? add->imap_default
-                                          : base->imap_default;
-    new->imap_base = add->imap_base ? add->imap_base : base->imap_base;
-
-    return new;
-}
-
-
-static const command_rec imap_cmds[] =
-{
-    AP_INIT_TAKE1("ImapMenu", ap_set_string_slot,
-                  (void *) APR_XtOffsetOf(imap_conf_rec, imap_menu), OR_INDEXES,
-                  "the type of menu generated: none, formatted, semiformatted, "
-                  "unformatted"),
-    AP_INIT_TAKE1("ImapDefault", ap_set_string_slot,
-                  (void *) APR_XtOffsetOf(imap_conf_rec, imap_default), OR_INDEXES,
-                  "the action taken if no match: error, nocontent, referer, "
-                  "menu, URL"),
-    AP_INIT_TAKE1("ImapBase", ap_set_string_slot,
-                  (void *) APR_XtOffsetOf(imap_conf_rec, imap_base), OR_INDEXES,
-                  "the base for all URL's: map, referer, URL (or start of)"),
-    {NULL}
-};
-
-static int pointinrect(const double point[2], double coords[MAXVERTS][2])
-{
-    double max[2], min[2];
-    if (coords[0][X] > coords[1][X]) {
-        max[0] = coords[0][X];
-        min[0] = coords[1][X];
-    }
-    else {
-        max[0] = coords[1][X];
-        min[0] = coords[0][X];
-    }
-
-    if (coords[0][Y] > coords[1][Y]) {
-        max[1] = coords[0][Y];
-        min[1] = coords[1][Y];
-    }
-    else {
-        max[1] = coords[1][Y];
-        min[1] = coords[0][Y];
-    }
-
-    return ((point[X] >= min[0] && point[X] <= max[0]) &&
-            (point[Y] >= min[1] && point[Y] <= max[1]));
-}
-
-static int pointincircle(const double point[2], double coords[MAXVERTS][2])
-{
-    double radius1, radius2;
-
-    radius1 = ((coords[0][Y] - coords[1][Y]) * (coords[0][Y] - coords[1][Y]))
-        + ((coords[0][X] - coords[1][X]) * (coords[0][X] - coords[1][X]));
-
-    radius2 = ((coords[0][Y] - point[Y]) * (coords[0][Y] - point[Y]))
-        + ((coords[0][X] - point[X]) * (coords[0][X] - point[X]));
-
-    return (radius2 <= radius1);
-}
-
-#define fmin(a,b) (((a)>(b))?(b):(a))
-#define fmax(a,b) (((a)>(b))?(a):(b))
-
-static int pointinpoly(const double point[2], double pgon[MAXVERTS][2])
-{
-    int i, numverts, crossings = 0;
-    double x = point[X], y = point[Y];
-
-    for (numverts = 0; pgon[numverts][X] != -1 && numverts < MAXVERTS;
-	numverts++) {
-	/* just counting the vertexes */
-    }
-
-    for (i = 0; i < numverts; i++) {
-        double x1=pgon[i][X];
-        double y1=pgon[i][Y];
-        double x2=pgon[(i + 1) % numverts][X];
-        double y2=pgon[(i + 1) % numverts][Y];
-        double d=(y - y1) * (x2 - x1) - (x - x1) * (y2 - y1);
-
-        if ((y1 >= y) != (y2 >= y)) {
-	    crossings +=y2 - y1 >= 0 ? d >= 0 : d <= 0;
-	}
-        if (!d && fmin(x1,x2) <= x && x <= fmax(x1,x2)
-	    && fmin(y1,y2) <= y && y <= fmax(y1,y2)) {
-	    return 1;
-	}
-    }
-    return crossings & 0x01;
-}
-
-
-static int is_closer(const double point[2], double coords[MAXVERTS][2],
-                     double *closest)
-{
-    double dist_squared = ((point[X] - coords[0][X])
-                           * (point[X] - coords[0][X]))
-                          + ((point[Y] - coords[0][Y])
-                             * (point[Y] - coords[0][Y]));
-
-    if (point[X] < 0 || point[Y] < 0) {
-        return (0);          /* don't mess around with negative coordinates */
-    }
-
-    if (*closest < 0 || dist_squared < *closest) {
-        *closest = dist_squared;
-        return (1);          /* if this is the first point or is the closest yet
-                                set 'closest' equal to this distance^2 */
-    }
-
-    return (0);              /* if it's not the first or closest */
-
-}
-
-static double get_x_coord(const char *args)
-{
-    char *endptr;               /* we want it non-null */
-    double x_coord = -1;        /* -1 is returned if no coordinate is given */
-
-    if (args == NULL) {
-        return (-1);            /* in case we aren't passed anything */
-    }
-
-    while (*args && !apr_isdigit(*args) && *args != ',') {
-        args++;                 /* jump to the first digit, but not past
-                                   a comma or end */
-    }
-
-    x_coord = strtod(args, &endptr);
-
-    if (endptr > args) {        /* if a conversion was made */
-        return (x_coord);
-    }
-
-    return (-1);                /* else if no conversion was made,
-                                   or if no args was given */
-}
-
-static double get_y_coord(const char *args)
-{
-    char *endptr;               /* we want it non-null */
-    const char *start_of_y = NULL;
-    double y_coord = -1;        /* -1 is returned on error */
-
-    if (args == NULL) {
-        return (-1);            /* in case we aren't passed anything */
-    }
-
-    start_of_y = ap_strchr_c(args, ',');     /* the comma */
-
-    if (start_of_y) {
-
-        start_of_y++;           /* start looking at the character after
-                                   the comma */
-
-        while (*start_of_y && !apr_isdigit(*start_of_y)) {
-            start_of_y++;       /* jump to the first digit, but not
-                                   past the end */
-	}
-
-        y_coord = strtod(start_of_y, &endptr);
-
-        if (endptr > start_of_y) {
-            return (y_coord);
-	}
-    }
-
-    return (-1);                /* if no conversion was made, or
-                                   no comma was found in args */
-}
-
-
-/* See if string has a "quoted part", and if so set *quoted_part to
- * the first character of the quoted part, then hammer a \0 onto the
- * trailing quote, and set *string to point at the first character
- * past the second quote.
- *
- * Otherwise set *quoted_part to NULL, and leave *string alone.
- */
-static void read_quoted(char **string, char **quoted_part)
-{
-    char *strp = *string;
-
-    /* assume there's no quoted part */
-    *quoted_part = NULL;
-
-    while (apr_isspace(*strp)) {
-        strp++;               	/* go along string until non-whitespace */
-    }
-
-    if (*strp == '"') {       	/* if that character is a double quote */
-        strp++;               	/* step over it */
-	*quoted_part = strp;  	/* note where the quoted part begins */
-
-        while (*strp && *strp != '"') {
-	    ++strp;		/* skip the quoted portion */
-        }
-
-        *strp = '\0';    	/* end the string with a NUL */
-
-        strp++;               	/* step over the last double quote */
-	*string = strp;
-    }
-}
-
-/*
- * returns the mapped URL or NULL.
- */
-static char *imap_url(request_rec *r, const char *base, const char *value)
-{
-/* translates a value into a URL. */
-    int slen, clen;
-    char *string_pos = NULL;
-    const char *string_pos_const = NULL;
-    char *directory = NULL;
-    const char *referer = NULL;
-    char *my_base;
-
-    if (!strcasecmp(value, "map") || !strcasecmp(value, "menu")) {
-	return ap_construct_url(r->pool, r->uri, r);
-    }
-
-    if (!strcasecmp(value, "nocontent") || !strcasecmp(value, "error")) {
-        return apr_pstrdup(r->pool, value);      /* these are handled elsewhere,
-                                                so just copy them */
-    }
-
-    if (!strcasecmp(value, "referer")) {
-        referer = apr_table_get(r->headers_in, "Referer");
-        if (referer && *referer) {
-	    return apr_pstrdup(r->pool, referer);
-        }
-        else {
-	    /* XXX:  This used to do *value = '\0'; ... which is totally bogus
-	     * because it hammers the passed in value, which can be a string
-             * constant, or part of a config, or whatever.  Total garbage.
-             * This works around that without changing the rest of this
-             * code much
-             */
-            value = "";      /* if 'referer' but no referring page,
-                                null the value */
-        }
-    }
-
-    string_pos_const = value;
-    while (apr_isalpha(*string_pos_const)) {
-	string_pos_const++;           /* go along the URL from the map
-                                         until a non-letter */
-    }
-    if (*string_pos_const == ':') {
-	/* if letters and then a colon (like http:) */
-	/* it's an absolute URL, so use it! */
-	return apr_pstrdup(r->pool, value);
-    }
-
-    if (!base || !*base) {
-        if (value && *value) {
-	    return apr_pstrdup(r->pool, value); /* no base: use what is given */
-        }
-	/* no base, no value: pick a simple default */
-	return ap_construct_url(r->pool, "/", r);
-    }
-
-    /* must be a relative URL to be combined with base */
-    if (ap_strchr_c(base, '/') == NULL && (!strncmp(value, "../", 3)
-        || !strcmp(value, ".."))) {
-        ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                    "invalid base directive in map file: %s", r->uri);
-        return NULL;
-    }
-    my_base = apr_pstrdup(r->pool, base);
-    string_pos = my_base;
-    while (*string_pos) {
-        if (*string_pos == '/' && *(string_pos + 1) == '/') {
-            string_pos += 2;    /* if there are two slashes, jump over them */
-            continue;
-        }
-        if (*string_pos == '/') {       /* the first single slash */
-            if (value[0] == '/') {
-                *string_pos = '\0';
-            }                   /* if the URL from the map starts from root,
-                                   end the base URL string at the first single
-                                   slash */
-            else {
-                directory = string_pos;         /* save the start of
-                                                   the directory portion */
-
-                string_pos = strrchr(string_pos, '/');  /* now reuse
-                                                           string_pos */
-                string_pos++;   /* step over that last slash */
-                *string_pos = '\0';
-            }                   /* but if the map url is relative, leave the
-                                   slash on the base (if there is one) */
-            break;
-        }
-        string_pos++;           /* until we get to the end of my_base without
-                                   finding a slash by itself */
-    }
-
-    while (!strncmp(value, "../", 3) || !strcmp(value, "..")) {
-
-        if (directory && (slen = strlen(directory))) {
-
-            /* for each '..',  knock a directory off the end 
-               by ending the string right at the last slash.
-               But only consider the directory portion: don't eat
-               into the server name.  And only try if a directory
-               portion was found */
-
-            clen = slen - 1;
-
-            while ((slen - clen) == 1) {
-
-                if ((string_pos = strrchr(directory, '/'))) {
-                    *string_pos = '\0';
-		}
-                clen = strlen(directory);
-                if (clen == 0) {
-                    break;
-		}
-            }
-
-            value += 2;         /* jump over the '..' that we found in the
-                                   value */
-        }
-        else if (directory) {
-            ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                        "invalid directory name in map file: %s", r->uri);
-            return NULL;
-        }
-
-        if (!strncmp(value, "/../", 4) || !strcmp(value, "/..")) {
-            value++;            /* step over the '/' if there are more '..'
-                                   to do.  This way, we leave the starting
-                                   '/' on value after the last '..', but get
-                                   rid of it otherwise */
-	}
-
-    }                           /* by this point, value does not start
-                                   with '..' */
-
-    if (value && *value) {
-	return apr_pstrcat(r->pool, my_base, value, NULL);
-    }
-    return my_base;
-}
-
-static int imap_reply(request_rec *r, char *redirect)
-{
-    if (!strcasecmp(redirect, "error")) {
-        /* they actually requested an error! */
-        return HTTP_INTERNAL_SERVER_ERROR;
-    }
-    if (!strcasecmp(redirect, "nocontent")) {
-        /* tell the client to keep the page it has */
-        return HTTP_NO_CONTENT;
-    }
-    if (redirect && *redirect) {
-        /* must be a URL, so redirect to it */
-        apr_table_setn(r->headers_out, "Location", redirect);
-        return HTTP_MOVED_TEMPORARILY;
-    }
-    return HTTP_INTERNAL_SERVER_ERROR;
-}
-
-static void menu_header(request_rec *r, char *menu)
-{
-    r->content_type = "text/html";
-
-    ap_rvputs(r, DOCTYPE_HTML_3_2, "<html><head>\n<title>Menu for ", r->uri,
-           "</title>\n</head><body>\n", NULL);
-
-    if (!strcasecmp(menu, "formatted")) {
-        ap_rvputs(r, "<h1>Menu for ", r->uri, "</h1>\n<hr />\n\n", NULL);
-    }
-
-    return;
-}
-
-static void menu_blank(request_rec *r, char *menu)
-{
-    if (!strcasecmp(menu, "formatted")) {
-        ap_rputs("\n", r);
-    }
-    if (!strcasecmp(menu, "semiformatted")) {
-        ap_rputs("<br />\n", r);
-    }
-    if (!strcasecmp(menu, "unformatted")) {
-        ap_rputs("\n", r);
-    }
-    return;
-}
-
-static void menu_comment(request_rec *r, char *menu, char *comment)
-{
-    if (!strcasecmp(menu, "formatted")) {
-        ap_rputs("\n", r);         /* print just a newline if 'formatted' */
-    }
-    if (!strcasecmp(menu, "semiformatted") && *comment) {
-        ap_rvputs(r, comment, "\n", NULL);
-    }
-    if (!strcasecmp(menu, "unformatted") && *comment) {
-        ap_rvputs(r, comment, "\n", NULL);
-    }
-    return;                     /* comments are ignored in the
-                                   'formatted' form */
-}
-
-static void menu_default(request_rec *r, char *menu, char *href, char *text)
-{
-    if (!strcasecmp(href, "error") || !strcasecmp(href, "nocontent")) {
-        return;                 /* don't print such lines, these aren't
-                                   really href's */
-    }
-    if (!strcasecmp(menu, "formatted")) {
-        ap_rvputs(r, "<pre>(Default) <a href=\"", href, "\">", text,
-               "</a></pre>\n", NULL);
-    }
-    if (!strcasecmp(menu, "semiformatted")) {
-        ap_rvputs(r, "<pre>(Default) <a href=\"", href, "\">", text,
-               "</a></pre>\n", NULL);
-    }
-    if (!strcasecmp(menu, "unformatted")) {
-        ap_rvputs(r, "<a href=\"", href, "\">", text, "</a>", NULL);
-    }
-    return;
-}
-
-static void menu_directive(request_rec *r, char *menu, char *href, char *text)
-{
-    if (!strcasecmp(href, "error") || !strcasecmp(href, "nocontent")) {
-        return;                 /* don't print such lines, as this isn't
-                                   really an href */
-    }
-    if (!strcasecmp(menu, "formatted")) {
-        ap_rvputs(r, "<pre>          <a href=\"", href, "\">", text,
-               "</a></pre>\n", NULL);
-    }
-    if (!strcasecmp(menu, "semiformatted")) {
-        ap_rvputs(r, "<pre>          <a href=\"", href, "\">", text,
-               "</a></pre>\n", NULL);
-    }
-    if (!strcasecmp(menu, "unformatted")) {
-        ap_rvputs(r, "<a href=\"", href, "\">", text, "</a>", NULL);
-    }
-    return;
-}
-
-static void menu_footer(request_rec *r)
-{
-    ap_rputs("\n\n</body>\n</html>\n", r);         /* finish the menu */
-}
-
-static int imap_handler(request_rec *r)
-{
-    char input[MAX_STRING_LEN];
-    char *directive;
-    char *value;
-    char *href_text;
-    char *base;
-    char *redirect;
-    char *mapdflt;
-    char *closest = NULL;
-    double closest_yet = -1;
-    apr_status_t status;
-
-    double testpoint[2];
-    double pointarray[MAXVERTS + 1][2];
-    int vertex;
-
-    char *string_pos;
-    int showmenu = 0;
-
-    imap_conf_rec *icr;
-
-    char *imap_menu;
-    char *imap_default;
-    char *imap_base;
-
-    ap_configfile_t *imap; 
-
-    if (r->method_number != M_GET || (strcmp(r->handler,IMAP_MAGIC_TYPE)
-				      && strcmp(r->handler, "imap-file")))
-	return DECLINED;
-
-    icr = ap_get_module_config(r->per_dir_config, &imap_module);
-
-    imap_menu = icr->imap_menu ? icr->imap_menu : IMAP_MENU_DEFAULT;
-    imap_default = icr->imap_default
-      ?  icr->imap_default : IMAP_DEFAULT_DEFAULT;
-    imap_base = icr->imap_base ? icr->imap_base : IMAP_BASE_DEFAULT;
-
-    status = ap_pcfg_openfile(&imap, r->pool, r->filename);
-
-    if (status != APR_SUCCESS) {
-        return HTTP_NOT_FOUND;
-    }
-
-    base = imap_url(r, NULL, imap_base);         /* set base according
-                                                    to default */
-    if (!base) {
-	return HTTP_INTERNAL_SERVER_ERROR;
-    }
-    mapdflt = imap_url(r, NULL, imap_default);   /* and default to
-                                                    global default */
-    if (!mapdflt) {
-	return HTTP_INTERNAL_SERVER_ERROR;
-    }
-
-    testpoint[X] = get_x_coord(r->args);
-    testpoint[Y] = get_y_coord(r->args);
-
-    if ((testpoint[X] == -1 || testpoint[Y] == -1) ||
-        (testpoint[X] == 0 && testpoint[Y] == 0)) {
-        /* if either is -1 or if both are zero (new Lynx) */
-        /* we don't have valid coordinates */
-        testpoint[X] = -1;
-        testpoint[Y] = -1;
-        if (strncasecmp(imap_menu, "none", 2)) {
-            showmenu = 1;       /* show the menu _unless_ ImapMenu is
-                                   'none' or 'no' */
-	}
-    }
-
-    if (showmenu) {             /* send start of imagemap menu if
-                                   we're going to */
-        menu_header(r, imap_menu);
-    }
-
-    while (!ap_cfg_getline(input, sizeof(input), imap)) {
-        if (!input[0]) {
-            if (showmenu) {
-                menu_blank(r, imap_menu);
-            }
-            continue;
-        }
-
-        if (input[0] == '#') {
-            if (showmenu) {
-                menu_comment(r, imap_menu, input + 1);
-            }
-            continue;
-        }                       /* blank lines and comments are ignored
-                                   if we aren't printing a menu */
-
-	/* find the first two space delimited fields, recall that
-	 * ap_cfg_getline has removed leading/trailing whitespace.
-	 *
-	 * note that we're tokenizing as we go... if we were to use the
-	 * ap_getword() class of functions we would end up allocating extra
-	 * memory for every line of the map file
-	 */
-        string_pos = input;
-	if (!*string_pos) {		/* need at least two fields */
-	    goto need_2_fields;
-	}
-
-	directive = string_pos;
-	while (*string_pos && !apr_isspace(*string_pos)) {	/* past directive */
-	    ++string_pos;
-	}
-	if (!*string_pos) {		/* need at least two fields */
-	    goto need_2_fields;
-	}
-	*string_pos++ = '\0';
-
-	if (!*string_pos) {		/* need at least two fields */
-	    goto need_2_fields;
-	}
-	while(*string_pos && apr_isspace(*string_pos)) { /* past whitespace */
-	    ++string_pos;
-	}
-
-	value = string_pos;
-	while (*string_pos && !apr_isspace(*string_pos)) {	/* past value */
-	    ++string_pos;
-	}
-	if (apr_isspace(*string_pos)) {
-	    *string_pos++ = '\0';
-	}
-	else {
-	    /* end of input, don't advance past it */
-	    *string_pos = '\0';
-	}
-
-        if (!strncasecmp(directive, "base", 4)) {       /* base, base_uri */
-            base = imap_url(r, NULL, value);
-	    if (!base) {
-		goto menu_bail;
-	    }
-            continue;           /* base is never printed to a menu */
-        }
-
-        read_quoted(&string_pos, &href_text);
-
-        if (!strcasecmp(directive, "default")) {        /* default */
-            mapdflt = imap_url(r, NULL, value);
-	    if (!mapdflt) {
-		goto menu_bail;
-	    }
-            if (showmenu) {     /* print the default if there's a menu */
-                redirect = imap_url(r, base, mapdflt);
-		if (!redirect) {
-		    goto menu_bail;
-		}
-                menu_default(r, imap_menu, redirect,
-                             href_text ? href_text : mapdflt);
-            }
-            continue;
-        }
-
-        vertex = 0;
-        while (vertex < MAXVERTS &&
-               sscanf(string_pos, "%lf%*[, ]%lf",
-                      &pointarray[vertex][X], &pointarray[vertex][Y]) == 2) {
-            /* Now skip what we just read... we can't use ANSIism %n */
-            while (apr_isspace(*string_pos)) {      /* past whitespace */
-                string_pos++;
-	    }
-            while (apr_isdigit(*string_pos)) {      /* and the 1st number */
-                string_pos++;
-	    }
-            string_pos++;       /* skip the ',' */
-            while (apr_isspace(*string_pos)) {      /* past any more whitespace */
-                string_pos++;
-	    }
-            while (apr_isdigit(*string_pos)) {      /* 2nd number */
-                string_pos++;
-	    }
-            vertex++;
-        }                       /* so long as there are more vertices to
-                                   read, and we have room, read them in.
-                                   We start where we left off of the last
-                                   sscanf, not at the beginning. */
-
-        pointarray[vertex][X] = -1;     /* signals the end of vertices */
-
-        if (showmenu) {
-	    if (!href_text) {
-		read_quoted(&string_pos, &href_text);     /* href text could
-                                                             be here instead */
-	    }
-            redirect = imap_url(r, base, value);
-	    if (!redirect) {
-		goto menu_bail;
-	    }
-            menu_directive(r, imap_menu, redirect,
-                           href_text ? href_text : value);
-            continue;
-        }
-        /* note that we don't make it past here if we are making a menu */
-
-        if (testpoint[X] == -1 || pointarray[0][X] == -1) {
-            continue;           /* don't try the following tests if testpoints
-                                   are invalid, or if there are no
-                                   coordinates */
-	}
-
-        if (!strcasecmp(directive, "poly")) {   /* poly */
-
-            if (pointinpoly(testpoint, pointarray)) {
-		ap_cfg_closefile(imap);
-                redirect = imap_url(r, base, value);
-		if (!redirect) {
-		    return HTTP_INTERNAL_SERVER_ERROR;
-		}
-                return (imap_reply(r, redirect));
-            }
-            continue;
-        }
-
-        if (!strcasecmp(directive, "circle")) {         /* circle */
-
-            if (pointincircle(testpoint, pointarray)) {
-		ap_cfg_closefile(imap);
-                redirect = imap_url(r, base, value);
-		if (!redirect) {
-		    return HTTP_INTERNAL_SERVER_ERROR;
-		}
-                return (imap_reply(r, redirect));
-            }
-            continue;
-        }
-
-        if (!strcasecmp(directive, "rect")) {   /* rect */
-
-            if (pointinrect(testpoint, pointarray)) {
-		ap_cfg_closefile(imap);
-                redirect = imap_url(r, base, value);
-		if (!redirect) {
-		    return HTTP_INTERNAL_SERVER_ERROR;
-		}
-                return (imap_reply(r, redirect));
-            }
-            continue;
-        }
-
-        if (!strcasecmp(directive, "point")) {  /* point */
-
-            if (is_closer(testpoint, pointarray, &closest_yet)) {
-		closest = apr_pstrdup(r->pool, value);
-            }
-
-            continue;
-        }                       /* move on to next line whether it's
-                                   closest or not */
-
-    }                           /* nothing matched, so we get another line! */
-
-    ap_cfg_closefile(imap);        /* we are done with the map file; close it */
-
-    if (showmenu) {
-        menu_footer(r);         /* finish the menu and we are done */
-        return OK;
-    }
-
-    if (closest) {             /* if a 'point' directive has been seen */
-        redirect = imap_url(r, base, closest);
-	if (!redirect) {
-	    return HTTP_INTERNAL_SERVER_ERROR;
-	}
-        return (imap_reply(r, redirect));
-    }
-
-    if (mapdflt) {             /* a default should be defined, even if
-                                  only 'nocontent' */
-        redirect = imap_url(r, base, mapdflt);
-	if (!redirect) {
-	    return HTTP_INTERNAL_SERVER_ERROR;
-	}
-        return (imap_reply(r, redirect));
-    }
-
-    return HTTP_INTERNAL_SERVER_ERROR;        /* If we make it this far,
-                                                 we failed. They lose! */
-
-need_2_fields:
-    ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-		"map file %s, line %d syntax error: requires at "
-                "least two fields", r->uri, imap->line_number);
-    /* fall through */
-menu_bail:
-    ap_cfg_closefile(imap);
-    if (showmenu) {
-	/* There's not much else we can do ... we've already sent the headers
-	 * to the client.
-	 */
-	ap_rputs("\n\n[an internal server error occured]\n", r);
-	menu_footer(r);
-	return OK;
-    }
-    return HTTP_INTERNAL_SERVER_ERROR;
-}
-
-static void register_hooks(apr_pool_t *p)
-{
-    ap_hook_handler(imap_handler,NULL,NULL,APR_HOOK_MIDDLE);
-}
-
-module AP_MODULE_DECLARE_DATA imap_module =
-{
-    STANDARD20_MODULE_STUFF,
-    create_imap_dir_config,     /* dir config creater */
-    merge_imap_dir_configs,     /* dir merger --- default is to override */
-    NULL,                       /* server config */
-    NULL,                       /* merge server config */
-    imap_cmds,                  /* command apr_table_t */
-    register_hooks              /* register hooks */
-};
diff --git a/modules/mappers/mod_imap.dsp b/modules/mappers/mod_imap.dsp
deleted file mode 100644
index 9457069..0000000
--- a/modules/mappers/mod_imap.dsp
+++ /dev/null
@@ -1,128 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mod_imap" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mod_imap - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "mod_imap.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "mod_imap.mak" CFG="mod_imap - Win32 Release"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "mod_imap - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mod_imap - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "mod_imap - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /O2 /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Release\mod_imap" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /map /machine:I386 /out:"Release/mod_imap.so" /base:@..\..\os\win32\BaseAddr.ref,mod_imap
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /map /machine:I386 /out:"Release/mod_imap.so" /base:@..\..\os\win32\BaseAddr.ref,mod_imap
-
-!ELSEIF  "$(CFG)" == "mod_imap - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Debug\mod_imap" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /map /debug /machine:I386 /out:"Debug/mod_imap.so" /base:@..\..\os\win32\BaseAddr.ref,mod_imap
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /map /debug /machine:I386 /out:"Debug/mod_imap.so" /base:@..\..\os\win32\BaseAddr.ref,mod_imap
-
-!ENDIF 
-
-# Begin Target
-
-# Name "mod_imap - Win32 Release"
-# Name "mod_imap - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\mod_imap.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mod_imap.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\build\win32\win32ver.awk
-
-!IF  "$(CFG)" == "mod_imap - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_imap.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ../../build/win32/win32ver.awk mod_imap  "imap_module for Apache" ../../include/ap_release.h > .\mod_imap.rc
-
-# End Custom Build
-
-!ELSEIF  "$(CFG)" == "mod_imap - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_imap.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ../../build/win32/win32ver.awk mod_imap  "imap_module for Apache" ../../include/ap_release.h > .\mod_imap.rc
-
-# End Custom Build
-
-!ENDIF 
-
-# End Source File
-# End Target
-# End Project
diff --git a/modules/mappers/mod_imap.exp b/modules/mappers/mod_imap.exp
deleted file mode 100644
index 1e0e0b8..0000000
--- a/modules/mappers/mod_imap.exp
+++ /dev/null
@@ -1 +0,0 @@
-imap_module
diff --git a/modules/mappers/mod_negotiation.c b/modules/mappers/mod_negotiation.c
deleted file mode 100644
index 9e28a75..0000000
--- a/modules/mappers/mod_negotiation.c
+++ /dev/null
@@ -1,3014 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-/*
- * mod_negotiation.c: keeps track of MIME types the client is willing to
- * accept, and contains code to handle type arbitration.
- *
- * rst
- */
-
-#include "apr.h"
-#include "apr_strings.h"
-#include "apr_file_io.h"
-#include "apr_lib.h"
-
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-#include "ap_config.h"
-#include "httpd.h"
-#include "http_config.h"
-#include "http_request.h"
-#include "http_protocol.h"
-#include "http_core.h"
-#include "http_log.h"
-#include "util_script.h"
-
-
-#define MAP_FILE_MAGIC_TYPE "application/x-type-map"
-
-/* Commands --- configuring document caching on a per (virtual?)
- * server basis... 
- */
-
-typedef struct {
-    int forcelangpriority;
-    apr_array_header_t *language_priority;
-} neg_dir_config;
-
-/* forcelangpriority flags 
- */
-#define FLP_UNDEF    0    /* Same as FLP_DEFAULT, but base overrides */
-#define FLP_NONE     1    /* Return 406, HTTP_NOT_ACCEPTABLE */
-#define FLP_PREFER   2    /* Use language_priority rather than MC */
-#define FLP_FALLBACK 4    /* Use language_priority rather than NA */
-
-#define FLP_DEFAULT  FLP_PREFER
-
-module AP_MODULE_DECLARE_DATA negotiation_module;
-
-static void *create_neg_dir_config(apr_pool_t *p, char *dummy)
-{
-    neg_dir_config *new = (neg_dir_config *) apr_palloc(p, sizeof(neg_dir_config));
-
-    new->forcelangpriority = FLP_UNDEF;
-    new->language_priority = NULL;
-    return new;
-}
-
-static void *merge_neg_dir_configs(apr_pool_t *p, void *basev, void *addv)
-{
-    neg_dir_config *base = (neg_dir_config *) basev;
-    neg_dir_config *add = (neg_dir_config *) addv;
-    neg_dir_config *new = (neg_dir_config *) apr_palloc(p, sizeof(neg_dir_config));
-
-    /* give priority to the config in the subdirectory */
-    new->forcelangpriority = (add->forcelangpriority != FLP_UNDEF)
-				? add->forcelangpriority 
-				: base->forcelangpriority;
-    new->language_priority = add->language_priority 
-				? add->language_priority 
-                                : base->language_priority;
-    return new;
-}
-
-static const char *set_language_priority(cmd_parms *cmd, void *n_,
-					 const char *lang)
-{
-    neg_dir_config *n = n_;
-    const char **langp;
-
-    if (!n->language_priority)
-        n->language_priority = apr_array_make(cmd->pool, 4, sizeof(char *));
-
-    langp = (const char **) apr_array_push(n->language_priority);
-    *langp = lang;
-    return NULL;
-}
-
-static const char *set_force_priority(cmd_parms *cmd, void *n_, const char *w)
-{
-    neg_dir_config *n = n_;
-  
-    if (!strcasecmp(w, "None")) {
-        if (n->forcelangpriority & ~FLP_NONE) {
-	    return "Cannot combine ForceLanguagePriority options with None";
-        }
-	n->forcelangpriority = FLP_NONE;
-    }
-    else if (!strcasecmp(w, "Prefer")) {
-        if (n->forcelangpriority & FLP_NONE) {
-	    return "Cannot combine ForceLanguagePriority options None and Prefer";
-        }
-        n->forcelangpriority |= FLP_PREFER;
-    }
-    else if (!strcasecmp(w, "Fallback")) {
-        if (n->forcelangpriority & FLP_NONE) {
-	    return "Cannot combine ForceLanguagePriority options None and Fallback";
-        }
-        n->forcelangpriority |= FLP_FALLBACK;
-    }
-    else {
-	return apr_pstrcat(cmd->pool, "Invalid ForceLanguagePriority option ", w, NULL);
-    }
-
-    return NULL;
-}
-
-static const char *cache_negotiated_docs(cmd_parms *cmd, void *dummy,
-                                         int arg)
-{
-    ap_set_module_config(cmd->server->module_config, &negotiation_module, 
-                         (arg ? "Cache" : NULL));
-    return NULL;
-}
-
-static int do_cache_negotiated_docs(server_rec *s)
-{
-    return (ap_get_module_config(s->module_config, &negotiation_module) != NULL);
-}
-
-static const command_rec negotiation_cmds[] =
-{
-    AP_INIT_FLAG("CacheNegotiatedDocs", cache_negotiated_docs, NULL, RSRC_CONF, 
-                 "Either 'on' or 'off' (default)"),
-    AP_INIT_ITERATE("LanguagePriority", set_language_priority, NULL, OR_FILEINFO, 
-                    "space-delimited list of MIME language abbreviations"),
-    AP_INIT_ITERATE("ForceLanguagePriority", set_force_priority, NULL, OR_FILEINFO,
-                    "Force LanguagePriority elections, either None, or Fallback and/or Prefer"),
-    {NULL}
-};
-
-/*
- * Record of available info on a media type specified by the client
- * (we also use 'em for encodings and languages)
- */
-
-typedef struct accept_rec {
-    char *name;                 /* MUST be lowercase */
-    float quality;
-    float level;
-    char *charset;              /* for content-type only */
-} accept_rec;
-
-/*
- * Record of available info on a particular variant
- *
- * Note that a few of these fields are updated by the actual negotiation
- * code.  These are:
- *
- * level_matched --- initialized to zero.  Set to the value of level
- *             if the client actually accepts this media type at that
- *             level (and *not* if it got in on a wildcard).  See level_cmp
- *             below.
- * mime_stars -- initialized to zero.  Set to the number of stars
- *               present in the best matching Accept header element.
- *               1 for star/star, 2 for type/star and 3 for
- *               type/subtype.
- *
- * definite -- initialized to 1.  Set to 0 if there is a match which
- *             makes the variant non-definite according to the rules
- *             in rfc2296.
- */
-
-typedef struct var_rec {
-    request_rec *sub_req;       /* May be NULL (is, for map files) */
-    const char *mime_type;      /* MUST be lowercase */
-    const char *file_name;      /* Set to 'this' (for map file body content) */
-    apr_off_t body;             /* Only for map file body content */
-    const char *content_encoding;
-    apr_array_header_t *content_languages;   /* list of languages for this variant */
-    const char *content_charset;
-    const char *description;
-
-    /* The next five items give the quality values for the dimensions
-     * of negotiation for this variant. They are obtained from the
-     * appropriate header lines, except for source_quality, which
-     * is obtained from the variant itself (the 'qs' parameter value
-     * from the variant's mime-type). Apart from source_quality,
-     * these values are set when we find the quality for each variant
-     * (see best_match()). source_quality is set from the 'qs' parameter
-     * of the variant description or mime type: see set_mime_fields().
-     */
-    float lang_quality;         /* quality of this variant's language */
-    float encoding_quality;     /* ditto encoding */
-    float charset_quality;      /* ditto charset */
-    float mime_type_quality;    /* ditto media type */
-    float source_quality;       /* source quality for this variant */
-
-    /* Now some special values */
-    float level;                /* Auxiliary to content-type... */
-    apr_off_t bytes;            /* content length, if known */
-    int lang_index;             /* Index into LanguagePriority list */
-    int is_pseudo_html;         /* text/html, *or* the INCLUDES_MAGIC_TYPEs */
-
-    /* Above are all written-once properties of the variant.  The
-     * three fields below are changed during negotiation:
-     */
-
-    float level_matched;
-    int mime_stars;
-    int definite;
-} var_rec;
-
-/* Something to carry around the state of negotiation (and to keep
- * all of this thread-safe)...
- */
-
-typedef struct {
-    apr_pool_t *pool;
-    request_rec *r;
-    neg_dir_config *conf;
-    char *dir_name;
-    int accept_q;               /* 1 if an Accept item has a q= param */
-    float default_lang_quality; /* fiddle lang q for variants with no lang */
-
-    /* the array pointers below are NULL if the corresponding accept
-     * headers are not present
-     */
-    apr_array_header_t *accepts;            /* accept_recs */
-    apr_array_header_t *accept_encodings;   /* accept_recs */
-    apr_array_header_t *accept_charsets;    /* accept_recs */
-    apr_array_header_t *accept_langs;       /* accept_recs */
-
-    apr_array_header_t *avail_vars;         /* available variants */
-
-    int count_multiviews_variants;    /* number of variants found on disk */
-
-    int is_transparent;       /* 1 if this resource is trans. negotiable */
-
-    int dont_fiddle_headers;  /* 1 if we may not fiddle with accept hdrs */
-    int ua_supports_trans;    /* 1 if ua supports trans negotiation */
-    int send_alternates;      /* 1 if we want to send an Alternates header */
-    int may_choose;           /* 1 if we may choose a variant for the client */
-    int use_rvsa;             /* 1 if we must use RVSA/1.0 negotiation algo */
-} negotiation_state;
-
-/* A few functions to manipulate var_recs.
- * Cleaning out the fields...
- */
-
-static void clean_var_rec(var_rec *mime_info)
-{
-    mime_info->sub_req = NULL;
-    mime_info->mime_type = "";
-    mime_info->file_name = "";
-    mime_info->body = 0;
-    mime_info->content_encoding = NULL;
-    mime_info->content_languages = NULL;
-    mime_info->content_charset = "";
-    mime_info->description = "";
-
-    mime_info->is_pseudo_html = 0;
-    mime_info->level = 0.0f;
-    mime_info->level_matched = 0.0f;
-    mime_info->bytes = -1;
-    mime_info->lang_index = -1;
-    mime_info->mime_stars = 0;
-    mime_info->definite = 1;
-
-    mime_info->charset_quality = 1.0f;
-    mime_info->encoding_quality = 1.0f;
-    mime_info->lang_quality = 1.0f;
-    mime_info->mime_type_quality = 1.0f;
-    mime_info->source_quality = 0.0f;
-}
-
-/* Initializing the relevant fields of a variant record from the
- * accept_info read out of its content-type, one way or another.
- */
-
-static void set_mime_fields(var_rec *var, accept_rec *mime_info)
-{
-    var->mime_type = mime_info->name;
-    var->source_quality = mime_info->quality;
-    var->level = mime_info->level;
-    var->content_charset = mime_info->charset;
-
-    var->is_pseudo_html = (!strcmp(var->mime_type, "text/html")
-                           || !strcmp(var->mime_type, INCLUDES_MAGIC_TYPE)
-                           || !strcmp(var->mime_type, INCLUDES_MAGIC_TYPE3));
-}
-
-/* Create a variant list validator in r using info from vlistr. */
-
-static void set_vlist_validator(request_rec *r, request_rec *vlistr)
-{
-    /* Calculating the variant list validator is similar to
-     * calculating an etag for the source of the variant list
-     * information, so we use ap_make_etag().  Note that this
-     * validator can be 'weak' in extreme case.
-     */
-    ap_update_mtime(vlistr, vlistr->finfo.mtime);
-    r->vlist_validator = ap_make_etag(vlistr, 0);
-
-    /* ap_set_etag will later take r->vlist_validator into account
-     * when creating the etag header
-     */
-}
-
-
-/*****************************************************************
- *
- * Parsing (lists of) media types and their parameters, as seen in
- * HTTPD header lines and elsewhere.
- */
-
-/*
- * Get a single mime type entry --- one media type and parameters;
- * enter the values we recognize into the argument accept_rec
- */
-
-static const char *get_entry(apr_pool_t *p, accept_rec *result,
-                             const char *accept_line)
-{
-    result->quality = 1.0f;
-    result->level = 0.0f;
-    result->charset = "";
-
-    /*
-     * Note that this handles what I gather is the "old format",
-     *
-     *    Accept: text/html text/plain moo/zot
-     *
-     * without any compatibility kludges --- if the token after the
-     * MIME type begins with a semicolon, we know we're looking at parms,
-     * otherwise, we know we aren't.  (So why all the pissing and moaning
-     * in the CERN server code?  I must be missing something).
-     */
-
-    result->name = ap_get_token(p, &accept_line, 0);
-    ap_str_tolower(result->name);     /* You want case insensitive,
-                                       * you'll *get* case insensitive.
-                                       */
-
-    /* KLUDGE!!! Default HTML to level 2.0 unless the browser
-     * *explicitly* says something else.
-     */
-
-    if (!strcmp(result->name, "text/html") && (result->level == 0.0)) {
-        result->level = 2.0f;
-    }
-    else if (!strcmp(result->name, INCLUDES_MAGIC_TYPE)) {
-        result->level = 2.0f;
-    }
-    else if (!strcmp(result->name, INCLUDES_MAGIC_TYPE3)) {
-        result->level = 3.0f;
-    }
-
-    while (*accept_line == ';') {
-        /* Parameters ... */
-
-        char *parm;
-        char *cp;
-        char *end;
-
-        ++accept_line;
-        parm = ap_get_token(p, &accept_line, 1);
-
-        /* Look for 'var = value' --- and make sure the var is in lcase. */
-
-        for (cp = parm; (*cp && !apr_isspace(*cp) && *cp != '='); ++cp) {
-            *cp = apr_tolower(*cp);
-        }
-
-        if (!*cp) {
-            continue;           /* No '='; just ignore it. */
-        }
-
-        *cp++ = '\0';           /* Delimit var */
-        while (*cp && (apr_isspace(*cp) || *cp == '=')) {
-            ++cp;
-        }
-
-        if (*cp == '"') {
-            ++cp;
-            for (end = cp;
-                 (*end && *end != '\n' && *end != '\r' && *end != '\"');
-                 end++);
-        }
-        else {
-            for (end = cp; (*end && !apr_isspace(*end)); end++);
-        }
-        if (*end) {
-            *end = '\0';        /* strip ending quote or return */
-        }
-        ap_str_tolower(cp);
-
-        if (parm[0] == 'q'
-            && (parm[1] == '\0' || (parm[1] == 's' && parm[2] == '\0'))) {
-            result->quality = (float)atof(cp);
-        }
-        else if (parm[0] == 'l' && !strcmp(&parm[1], "evel")) {
-            result->level = (float)atof(cp);
-        }
-        else if (!strcmp(parm, "charset")) {
-            result->charset = cp;
-        }
-    }
-
-    if (*accept_line == ',') {
-        ++accept_line;
-    }
-
-    return accept_line;
-}
-
-/*****************************************************************
- *
- * Dealing with header lines ...
- *
- * Accept, Accept-Charset, Accept-Language and Accept-Encoding
- * are handled by do_header_line() - they all have the same
- * basic structure of a list of items of the format
- *    name; q=N; charset=TEXT
- *
- * where charset is only valid in Accept.
- */
-
-static apr_array_header_t *do_header_line(apr_pool_t *p, const char *accept_line)
-{
-    apr_array_header_t *accept_recs;
-
-    if (!accept_line) {
-        return NULL;
-    }
-
-    accept_recs = apr_array_make(p, 40, sizeof(accept_rec));
-
-    while (*accept_line) {
-        accept_rec *new = (accept_rec *) apr_array_push(accept_recs);
-        accept_line = get_entry(p, new, accept_line);
-    }
-
-    return accept_recs;
-}
-
-/* Given the text of the Content-Languages: line from the var map file,
- * return an array containing the languages of this variant
- */
-
-static apr_array_header_t *do_languages_line(apr_pool_t *p, const char **lang_line)
-{
-    apr_array_header_t *lang_recs = apr_array_make(p, 2, sizeof(char *));
-
-    if (!lang_line) {
-        return lang_recs;
-    }
-
-    while (**lang_line) {
-        char **new = (char **) apr_array_push(lang_recs);
-        *new = ap_get_token(p, lang_line, 0);
-        ap_str_tolower(*new);
-        if (**lang_line == ',' || **lang_line == ';') {
-            ++(*lang_line);
-        }
-    }
-
-    return lang_recs;
-}
-
-/*****************************************************************
- *
- * Handling header lines from clients...
- */
-
-static negotiation_state *parse_accept_headers(request_rec *r)
-{
-    negotiation_state *new =
-        (negotiation_state *) apr_pcalloc(r->pool, sizeof(negotiation_state));
-    accept_rec *elts;
-    apr_table_t *hdrs = r->headers_in;
-    int i;
-
-    new->pool = r->pool;
-    new->r = r;
-    new->conf = (neg_dir_config *)ap_get_module_config(r->per_dir_config,
-                                                       &negotiation_module);
-
-    new->dir_name = ap_make_dirstr_parent(r->pool, r->filename);
-
-    new->accepts = do_header_line(r->pool, apr_table_get(hdrs, "Accept"));
-
-    /* calculate new->accept_q value */
-    if (new->accepts) {
-        elts = (accept_rec *) new->accepts->elts;
-
-        for (i = 0; i < new->accepts->nelts; ++i) {
-            if (elts[i].quality < 1.0) {
-                new->accept_q = 1;
-            }
-        }
-    }
-
-    new->accept_encodings =
-        do_header_line(r->pool, apr_table_get(hdrs, "Accept-Encoding"));
-    new->accept_langs =
-        do_header_line(r->pool, apr_table_get(hdrs, "Accept-Language"));
-    new->accept_charsets =
-        do_header_line(r->pool, apr_table_get(hdrs, "Accept-Charset"));
-
-    /* This is possibly overkill for some servers, heck, we have 
-     * only 33 index.html variants in docs/docroot (today).
-     * Make this configurable?
-     */
-    new->avail_vars = apr_array_make(r->pool, 40, sizeof(var_rec));
-
-    return new;
-}
-
-
-static void parse_negotiate_header(request_rec *r, negotiation_state *neg)
-{
-    const char *negotiate = apr_table_get(r->headers_in, "Negotiate");
-    char *tok;
-    
-    /* First, default to no TCN, no Alternates, and the original Apache
-     * negotiation algorithm with fiddles for broken browser configs.
-     *
-     * To save network bandwidth, we do not configure to send an
-     * Alternates header to the user agent by default.  User
-     * agents that want an Alternates header for agent-driven
-     * negotiation will have to request it by sending an
-     * appropriate Negotiate header.
-     */
-    neg->ua_supports_trans   = 0;
-    neg->send_alternates     = 0;
-    neg->may_choose          = 1;
-    neg->use_rvsa            = 0;
-    neg->dont_fiddle_headers = 0;
-
-    if (!negotiate)
-        return;
-
-    if (strcmp(negotiate, "trans") == 0) {
-        /* Lynx 2.7 and 2.8 send 'negotiate: trans' even though they
-         * do not support transparent content negotiation, so for Lynx we
-         * ignore the negotiate header when its contents are exactly "trans".
-         * If future versions of Lynx ever need to say 'negotiate: trans',
-         * they can send the equivalent 'negotiate: trans, trans' instead
-         * to avoid triggering the workaround below. 
-         */
-        const char *ua = apr_table_get(r->headers_in, "User-Agent");
-
-        if (ua && (strncmp(ua, "Lynx", 4) == 0))
-            return;
-    }
-
-    neg->may_choose = 0;  /* An empty Negotiate would require 300 response */
-
-    while ((tok = ap_get_list_item(neg->pool, &negotiate)) != NULL) {
-
-        if (strcmp(tok, "trans") == 0 ||
-            strcmp(tok, "vlist") == 0 ||
-            strcmp(tok, "guess-small") == 0 ||
-            apr_isdigit(tok[0]) ||
-            strcmp(tok, "*") == 0) {
-
-            /* The user agent supports transparent negotiation */
-            neg->ua_supports_trans = 1;
-
-            /* Send-alternates could be configurable, but note
-             * that it must be 1 if we have 'vlist' in the
-             * negotiate header.
-             */
-            neg->send_alternates = 1;
-
-            if (strcmp(tok, "1.0") == 0) {
-                /* we may use the RVSA/1.0 algorithm, configure for it */
-                neg->may_choose = 1;
-                neg->use_rvsa = 1;
-                neg->dont_fiddle_headers = 1;
-            }
-            else if (tok[0] == '*') {
-                /* we may use any variant selection algorithm, configure
-                 * to use the Apache algorithm
-                 */
-                neg->may_choose = 1;
-                
-                /* We disable header fiddles on the assumption that a
-                 * client sending Negotiate knows how to send correct
-                 * headers which don't need fiddling.
-                 */
-                neg->dont_fiddle_headers = 1; 
-            }
-        }
-    }
-
-#ifdef NEG_DEBUG
-    ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
-            "dont_fiddle_headers=%d use_rvsa=%d ua_supports_trans=%d "
-            "send_alternates=%d, may_choose=%d",
-            neg->dont_fiddle_headers, neg->use_rvsa,  
-            neg->ua_supports_trans, neg->send_alternates, neg->may_choose);
-#endif
-
-}
-
-/* Sometimes clients will give us no Accept info at all; this routine sets
- * up the standard default for that case, and also arranges for us to be
- * willing to run a CGI script if we find one.  (In fact, we set up to
- * dramatically prefer CGI scripts in cases where that's appropriate,
- * e.g., POST or when URI includes query args or extra path info).
- */
-static void maybe_add_default_accepts(negotiation_state *neg, 
-                                      int prefer_scripts)
-{
-    accept_rec *new_accept;
-
-    if (!neg->accepts) {
-        neg->accepts = apr_array_make(neg->pool, 4, sizeof(accept_rec));
-
-        new_accept = (accept_rec *) apr_array_push(neg->accepts);
-        
-        new_accept->name = "*/*";
-        new_accept->quality = 1.0f;
-        new_accept->level = 0.0f;
-    }    
-
-    new_accept = (accept_rec *) apr_array_push(neg->accepts);
-
-    new_accept->name = CGI_MAGIC_TYPE;
-    if (neg->use_rvsa) {
-        new_accept->quality = 0;
-    }
-    else {
-        new_accept->quality = prefer_scripts ? 2.0f : 0.001f;
-    }
-    new_accept->level = 0.0f;
-}
-
-/*****************************************************************
- *
- * Parsing type-map files, in Roy's meta/http format augmented with
- * #-comments.
- */
-
-/* Reading RFC822-style header lines, ignoring #-comments and
- * handling continuations.
- */
-
-enum header_state {
-    header_eof, header_seen, header_sep
-};
-
-static enum header_state get_header_line(char *buffer, int len, apr_file_t *map)
-{
-    char *buf_end = buffer + len;
-    char *cp;
-    char c;
-
-    /* Get a noncommented line */
-
-    do {
-        if (apr_file_gets(buffer, MAX_STRING_LEN, map) != APR_SUCCESS) {
-            return header_eof;
-        }
-    } while (buffer[0] == '#');
-
-    /* If blank, just return it --- this ends information on this variant */
-
-    for (cp = buffer; (*cp && apr_isspace(*cp)); ++cp) {
-        continue;
-    }
-
-    if (*cp == '\0') {
-        return header_sep;
-    }
-
-    /* If non-blank, go looking for header lines, but note that we still
-     * have to treat comments specially...
-     */
-
-    cp += strlen(cp);
-
-    /* We need to shortcut the rest of this block following the Body:
-     * tag - we will not look for continutation after this line.
-     */
-    if (!strncasecmp(buffer, "Body:", 5))
-        return header_seen;
-
-    while (apr_file_getc(&c, map) != APR_EOF) {
-        if (c == '#') {
-            /* Comment line */
-            while (apr_file_getc(&c, map) != APR_EOF && c != '\n') {
-                continue;
-            }
-        }
-        else if (apr_isspace(c)) {
-            /* Leading whitespace.  POSSIBLE continuation line
-             * Also, possibly blank --- if so, we ungetc() the final newline
-             * so that we will pick up the blank line the next time 'round.
-             */
-
-            while (c != '\n' && apr_isspace(c)) {
-                if(apr_file_getc(&c, map) != APR_SUCCESS)
-		    break;
-            }
-
-            apr_file_ungetc(c, map);
-
-            if (c == '\n') {
-                return header_seen;     /* Blank line */
-            }
-
-            /* Continuation */
-
-            while (cp < buf_end - 2 && (apr_file_getc(&c, map)) != APR_EOF && c != '\n') {
-                *cp++ = c;
-            }
-
-            *cp++ = '\n';
-            *cp = '\0';
-        }
-        else {
-
-            /* Line beginning with something other than whitespace */
-
-            apr_file_ungetc(c, map);
-            return header_seen;
-        }
-    }
-
-    return header_seen;
-}
-
-static apr_off_t get_body(char *buffer, apr_size_t *len, const char *tag, 
-                          apr_file_t *map)
-{
-    char *endbody;
-    int bodylen;
-    int taglen;
-    apr_off_t pos;
-
-    taglen = strlen(tag);
-    *len -= taglen;
-
-    /* We are at the first character following a body:tag\n entry 
-     * Suck in the body, then backspace to the first char after the 
-     * closing tag entry.  If we fail to read, find the tag or back
-     * up then we have a hosed file, so give up already
-     */
-    if (apr_file_read(map, buffer, len) != APR_SUCCESS) {
-        return -1;
-    }
-
-    strncpy(buffer + *len, tag, taglen);
-    endbody = strstr(buffer, tag);
-    if (endbody == buffer + *len) {
-        return -1;
-    }
-    bodylen = endbody - buffer;
-    endbody += strlen(tag);
-    /* Skip all the trailing cruft after the end tag to the next line */
-    while (*endbody) {
-        if (*endbody == '\n') {
-            ++endbody;
-            break;
-        }
-        ++endbody;
-    }
-
-    pos = -(apr_off_t)(*len - (endbody - buffer));
-    if (apr_file_seek(map, APR_CUR, &pos) != APR_SUCCESS) {
-        return -1;
-    }
-
-    /* Give the caller back the actual body's file offset and length */
-    *len = bodylen;
-    return pos - (endbody - buffer);
-}
-
-
-/* Stripping out RFC822 comments */
-
-static void strip_paren_comments(char *hdr)
-{
-    /* Hmmm... is this correct?  In Roy's latest draft, (comments) can nest! */
-    /* Nope, it isn't correct.  Fails to handle backslash escape as well.    */
-
-    while (*hdr) {
-        if (*hdr == '"') {
-            hdr = strchr(hdr, '"');
-            if (hdr == NULL) {
-                return;
-            }
-            ++hdr;
-        }
-        else if (*hdr == '(') {
-            while (*hdr && *hdr != ')') {
-                *hdr++ = ' ';
-            }
-
-            if (*hdr) {
-                *hdr++ = ' ';
-            }
-        }
-        else {
-            ++hdr;
-        }
-    }
-}
-
-/* Getting to a header body from the header */
-
-static char *lcase_header_name_return_body(char *header, request_rec *r)
-{
-    char *cp = header;
-
-    for ( ; *cp && *cp != ':' ; ++cp) {
-        *cp = apr_tolower(*cp);
-    }
-
-    if (!*cp) {
-        ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                      "Syntax error in type map, no ':' in %s for header %s", 
-                      r->filename, header);
-        return NULL;
-    }
-
-    do {
-        ++cp;
-    } while (*cp && apr_isspace(*cp));
-
-    if (!*cp) {
-        ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                      "Syntax error in type map --- no header body: %s for %s",
-                      r->filename, header);
-        return NULL;
-    }
-
-    return cp;
-}
-
-static int read_type_map(apr_file_t **map, negotiation_state *neg, request_rec *rr)
-{
-    request_rec *r = neg->r;
-    apr_file_t *map_ = NULL;
-    apr_status_t status;
-    char buffer[MAX_STRING_LEN];
-    enum header_state hstate;
-    struct var_rec mime_info;
-    int has_content;
-
-    if (!map)
-        map = &map_;
-
-    /* We are not using multiviews */
-    neg->count_multiviews_variants = 0;
-
-    if ((status = apr_file_open(map, rr->filename, APR_READ | APR_BUFFERED,
-                APR_OS_DEFAULT, neg->pool)) != APR_SUCCESS) {
-        ap_log_rerror(APLOG_MARK, APLOG_ERR, status, r,
-                      "cannot access type map file: %s", rr->filename);
-        return HTTP_FORBIDDEN;
-    }
-
-    clean_var_rec(&mime_info);
-    has_content = 0;
-
-    do {
-        hstate = get_header_line(buffer, MAX_STRING_LEN, *map);
-
-        if (hstate == header_seen) {
-            char *body1 = lcase_header_name_return_body(buffer, neg->r);
-            const char *body;
-
-            if (body1 == NULL) {
-                return HTTP_INTERNAL_SERVER_ERROR;
-            }
-
-            strip_paren_comments(body1);
-            body = body1;
-
-            if (!strncmp(buffer, "uri:", 4)) {
-                mime_info.file_name = ap_get_token(neg->pool, &body, 0);
-            }
-            else if (!strncmp(buffer, "content-type:", 13)) {
-                struct accept_rec accept_info;
-
-                get_entry(neg->pool, &accept_info, body);
-                set_mime_fields(&mime_info, &accept_info);
-                has_content = 1;
-            }
-            else if (!strncmp(buffer, "content-length:", 15)) {
-                mime_info.bytes = atol(body);
-                has_content = 1;
-            }
-            else if (!strncmp(buffer, "content-language:", 17)) {
-                mime_info.content_languages = do_languages_line(neg->pool,
-                                                                &body);
-                has_content = 1;
-            }
-            else if (!strncmp(buffer, "content-encoding:", 17)) {
-                mime_info.content_encoding = ap_get_token(neg->pool, &body, 0);
-                has_content = 1;
-            }
-            else if (!strncmp(buffer, "description:", 12)) {
-                char *desc = apr_pstrdup(neg->pool, body);
-                char *cp;
-
-                for (cp = desc; *cp; ++cp) {
-                    if (*cp=='\n') *cp=' ';
-                }
-                if (cp>desc) *(cp-1)=0;
-                mime_info.description = desc;
-            }
-            else if (!strncmp(buffer, "body:", 5)) {
-                char *tag = apr_pstrdup(neg->pool, body);
-                char *eol = strchr(tag, '\0');
-                apr_size_t len = MAX_STRING_LEN;
-                while (--eol >= tag && apr_isspace(*eol)) 
-                    *eol = '\0';
-                if ((mime_info.body = get_body(buffer, &len, tag, *map)) < 0) {
-                    ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                                  "Syntax error in type map, no end tag '%s'"
-                                  "found in %s for Body: content.", 
-                                  tag, r->filename);
-                     break;
-                }
-                mime_info.bytes = len;
-                mime_info.file_name = rr->filename;
-            }
-        }
-        else {
-            if (*mime_info.file_name && has_content) {
-                void *new_var = apr_array_push(neg->avail_vars);
-
-                memcpy(new_var, (void *) &mime_info, sizeof(var_rec));
-            }
-
-            clean_var_rec(&mime_info);
-            has_content = 0;
-        }
-    } while (hstate != header_eof);
-
-    if (map_)
-        apr_file_close(map_);
-
-    set_vlist_validator(r, rr);
-
-    return OK;
-}
-
-
-/* Sort function used by read_types_multi. */
-static int variantsortf(var_rec *a, var_rec *b) {
-
-    /* First key is the source quality, sort in descending order. */
-
-    /* XXX: note that we currently implement no method of setting the
-     * source quality for multiviews variants, so we are always comparing
-     * 1.0 to 1.0 for now
-     */
-    if (a->source_quality < b->source_quality)
-        return 1;
-    if (a->source_quality > b->source_quality)
-        return -1;
-
-    /* Second key is the variant name */
-    return strcmp(a->file_name, b->file_name);
-}
-
-/*****************************************************************
- *
- * Same as read_type_map, except we use a filtered directory listing
- * as the map...  
- */
-
-static int read_types_multi(negotiation_state *neg)
-{
-    request_rec *r = neg->r;
-
-    char *filp;
-    int prefix_len;
-    apr_dir_t *dirp;
-    apr_finfo_t dirent;
-    apr_status_t status;
-    struct var_rec mime_info;
-    struct accept_rec accept_info;
-    void *new_var;
-    int anymatch = 0;
-
-    clean_var_rec(&mime_info);
-
-    if (!(filp = strrchr(r->filename, '/'))) {
-        return DECLINED;        /* Weird... */
-    }
-
-    /* XXX this should be more general, and quit using 'specials' */
-    if (strncmp(r->filename, "proxy:", 6) == 0) {
-        return DECLINED;
-    }
-
-    ++filp;
-    prefix_len = strlen(filp);
-
-    if ((status = apr_dir_open(&dirp, neg->dir_name, neg->pool)) != APR_SUCCESS) {
-        ap_log_rerror(APLOG_MARK, APLOG_ERR, status, r,
-                    "cannot read directory for multi: %s", neg->dir_name);
-        return HTTP_FORBIDDEN;
-    }
-
-    while (apr_dir_read(&dirent, APR_FINFO_DIRENT, dirp) == APR_SUCCESS) {
-        apr_array_header_t *exception_list;
-        request_rec *sub_req;
-        
-        /* Do we have a match? */
-#ifdef CASE_BLIND_FILESYSTEM
-        if (strncasecmp(dirent.name, filp, prefix_len)) {
-#else
-        if (strncmp(dirent.name, filp, prefix_len)) {
-#endif
-            continue;
-        }
-        if (dirent.name[prefix_len] != '.') {
-            continue;
-        }
-
-        /* Don't negotiate directories and other unusual files
-         * Really shouldn't see anything but DIR/LNK/REG here,
-         * and we aught to discover if the LNK was interesting.
-         *
-         * Of course, this only helps platforms that capture the
-         * the filetype in apr_dir_read(), which most can once
-         * they are optimized with some magic [it's known to the
-         * dirent, not associated to the inode, on most FS's.]
-         */
-        if ((dirent.valid & APR_FINFO_TYPE) && (dirent.filetype == APR_DIR))
-            continue;
-
-        /* Ok, something's here.  Maybe nothing useful.  Remember that
-         * we tried, if we completely fail, so we can reject the request!
-         */
-        anymatch = 1;
-
-        /* See if it's something which we have access to, and which 
-         * has a known type and encoding (as opposed to something
-         * which we'll be slapping default_type on later).
-         */
-        sub_req = ap_sub_req_lookup_dirent(&dirent, r, AP_SUBREQ_MERGE_ARGS, NULL);
-
-        /* Double check, we still don't multi-resolve non-ordinary files 
-         */
-        if (sub_req->finfo.filetype != APR_REG)
-            continue;
-
-        /* If it has a handler, we'll pretend it's a CGI script,
-         * since that's a good indication of the sort of thing it
-         * might be doing.
-         */
-        if (sub_req->handler && !sub_req->content_type) {
-            sub_req->content_type = CGI_MAGIC_TYPE;
-        }
-
-        /* 
-         * mod_mime will _always_ provide us the base name in the
-         * ap-mime-exception-list, if it processed anything.  If
-         * this list is empty, give up immediately, there was
-         * nothing interesting.  For example, looking at the files
-         * readme.txt and readme.foo, we will throw away .foo if
-         * it's an insignificant file (e.g. did not identify a 
-         * language, charset, encoding, content type or handler,)
-         */
-        exception_list = 
-            (apr_array_header_t *)apr_table_get(sub_req->notes, 
-                                                "ap-mime-exceptions-list");
-
-        if (!exception_list) {
-            ap_destroy_sub_req(sub_req);
-            continue;
-        }
-
-        /* Each unregonized bit better match our base name, in sequence.
-         * A test of index.html.foo will match index.foo or index.html.foo,
-         * but it will never transpose the segments and allow index.foo.html
-         * because that would introduce too much CPU consumption.  Better that
-         * we don't attempt a many-to-many match here.
-         */
-        {
-            int nexcept = exception_list->nelts;
-            char **cur_except = (char**)exception_list->elts;
-            char *segstart = filp, *segend, saveend;
-
-            while (*segstart && nexcept) {
-                if (!(segend = strchr(segstart, '.')))
-                    segend = strchr(segstart, '\0');
-                saveend = *segend;
-                *segend = '\0';
-                    
-#ifdef CASE_BLIND_FILESYSTEM
-                if (strcasecmp(segstart, *cur_except) == 0) {
-#else
-                if (strcmp(segstart, *cur_except) == 0) {
-#endif
-                    --nexcept;
-                    ++cur_except;                    
-                }         
-                
-                if (!saveend)
-                    break;
-
-                *segend = saveend;
-                segstart = segend + 1;
-            }
-
-            if (nexcept) {
-                /* Something you don't know is, something you don't know...
-                 */
-                ap_destroy_sub_req(sub_req);
-                continue;
-            }
-        }
-
-        /* 
-         * ###: be warned, the _default_ content type is already
-         * picked up here!  If we failed the subrequest, or don't 
-         * know what we are serving, then continue.
-         */
-        if (sub_req->status != HTTP_OK || (!sub_req->content_type)) {
-            ap_destroy_sub_req(sub_req);
-            continue;
-        }
-
-        /* If it's a map file, we use that instead of the map
-         * we're building...
-         */
-        if (((sub_req->content_type) &&
-             !strcmp(sub_req->content_type, MAP_FILE_MAGIC_TYPE)) ||
-            ((sub_req->handler) &&
-             !strcmp(sub_req->handler, "type-map"))) {
-
-            apr_dir_close(dirp);
-            neg->avail_vars->nelts = 0;
-            if (sub_req->status != HTTP_OK) {
-                return sub_req->status;
-            }
-            return read_type_map(NULL, neg, sub_req);
-        }
-
-        /* Have reasonable variant --- gather notes. */
-
-        mime_info.sub_req = sub_req;
-        mime_info.file_name = apr_pstrdup(neg->pool, dirent.name);
-        if (sub_req->content_encoding) {
-            mime_info.content_encoding = sub_req->content_encoding;
-        }
-        if (sub_req->content_languages) {
-            mime_info.content_languages = sub_req->content_languages;
-        }
-
-        get_entry(neg->pool, &accept_info, sub_req->content_type);
-        set_mime_fields(&mime_info, &accept_info);
-
-        new_var = apr_array_push(neg->avail_vars);
-        memcpy(new_var, (void *) &mime_info, sizeof(var_rec));
-
-        neg->count_multiviews_variants++;
-
-        clean_var_rec(&mime_info);
-    }
-
-    apr_dir_close(dirp);
-
-    /* We found some file names that matched.  None could be served.
-     * Rather than fall out to autoindex or some other mapper, this
-     * request must die.
-     */
-    if (anymatch && !neg->avail_vars->nelts) {
-	ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-		      "Negotiation: discovered file(s) matching request: %s"
-                      " (None could be negotiated).", 
-                      r->filename);
-        return HTTP_NOT_FOUND;
-    }
-
-    set_vlist_validator(r, r);
-
-    /* Sort the variants into a canonical order.  The negotiation
-     * result sometimes depends on the order of the variants.  By
-     * sorting the variants into a canonical order, rather than using
-     * the order in which readdir() happens to return them, we ensure
-     * that the negotiation result will be consistent over filesystem
-     * backup/restores and over all mirror sites.
-     */
-       
-    qsort((void *) neg->avail_vars->elts, neg->avail_vars->nelts,
-          sizeof(var_rec), (int (*)(const void *, const void *)) variantsortf);
-
-    return OK;
-}
-
-
-/*****************************************************************
- * And now for the code you've been waiting for... actually
- * finding a match to the client's requirements.  
- */
-
-/* Matching MIME types ... the star/star and foo/star commenting conventions
- * are implemented here.  (You know what I mean by star/star, but just
- * try mentioning those three characters in a C comment).  Using strcmp()
- * is legit, because everything has already been smashed to lowercase.
- *
- * Note also that if we get an exact match on the media type, we update
- * level_matched for use in level_cmp below...
- * 
- * We also give a value for mime_stars, which is used later. It should
- * be 1 for star/star, 2 for type/star and 3 for type/subtype.
- */
-
-static int mime_match(accept_rec *accept_r, var_rec *avail)
-{
-    const char *accept_type = accept_r->name;
-    const char *avail_type = avail->mime_type;
-    int len = strlen(accept_type);
-
-    if (accept_type[0] == '*') {        /* Anything matches star/star */
-        if (avail->mime_stars < 1) {
-            avail->mime_stars = 1;
-        }
-        return 1;
-    }
-    else if ((accept_type[len - 1] == '*') &&
-             !strncmp(accept_type, avail_type, len - 2)) {
-        if (avail->mime_stars < 2) {
-            avail->mime_stars = 2;
-        }
-        return 1;
-    }
-    else if (!strcmp(accept_type, avail_type)
-             || (!strcmp(accept_type, "text/html")
-                 && (!strcmp(avail_type, INCLUDES_MAGIC_TYPE)
-                     || !strcmp(avail_type, INCLUDES_MAGIC_TYPE3)))) {
-        if (accept_r->level >= avail->level) {
-            avail->level_matched = avail->level;
-            avail->mime_stars = 3;
-            return 1;
-        }
-    }
-
-    return OK;
-}
-
-/* This code implements a piece of the tie-breaking algorithm between
- * variants of equal quality.  This piece is the treatment of variants
- * of the same base media type, but different levels.  What we want to
- * return is the variant at the highest level that the client explicitly
- * claimed to accept.
- *
- * If all the variants available are at a higher level than that, or if
- * the client didn't say anything specific about this media type at all
- * and these variants just got in on a wildcard, we prefer the lowest
- * level, on grounds that that's the one that the client is least likely
- * to choke on.
- *
- * (This is all motivated by treatment of levels in HTML --- we only
- * want to give level 3 to browsers that explicitly ask for it; browsers
- * that don't, including HTTP/0.9 browsers that only get the implicit
- * "Accept: * / *" [space added to avoid confusing cpp --- no, that
- * syntax doesn't really work] should get HTML2 if available).
- *
- * (Note that this code only comes into play when we are choosing among
- * variants of equal quality, where the draft standard gives us a fair
- * bit of leeway about what to do.  It ain't specified by the standard;
- * rather, it is a choice made by this server about what to do in cases
- * where the standard does not specify a unique course of action).
- */
-
-static int level_cmp(var_rec *var1, var_rec *var2)
-{
-    /* Levels are only comparable between matching media types */
-
-    if (var1->is_pseudo_html && !var2->is_pseudo_html) {
-        return 0;
-    }
-
-    if (!var1->is_pseudo_html && strcmp(var1->mime_type, var2->mime_type)) {
-        return 0;
-    }
-    /* The result of the above if statements is that, if we get to
-     * here, both variants have the same mime_type or both are
-     * pseudo-html.
-     */    
-
-    /* Take highest level that matched, if either did match. */
-
-    if (var1->level_matched > var2->level_matched) {
-        return 1;
-    }
-    if (var1->level_matched < var2->level_matched) {
-        return -1;
-    }
-
-    /* Neither matched.  Take lowest level, if there's a difference. */
-
-    if (var1->level < var2->level) {
-        return 1;
-    }
-    if (var1->level > var2->level) {
-        return -1;
-    }
-
-    /* Tied */
-
-    return 0;
-}
-
-/* Finding languages.  The main entry point is set_language_quality()
- * which is called for each variant. It sets two elements in the
- * variant record:
- *    language_quality  - the 'q' value of the 'best' matching language
- *                        from Accept-Language: header (HTTP/1.1)
- *    lang_index    -     Non-negotiated language priority, using
- *                        position of language on the Accept-Language:
- *                        header, if present, else LanguagePriority
- *                        directive order.
- *
- * When we do the variant checking for best variant, we use language
- * quality first, and if a tie, language_index next (this only applies
- * when _not_ using the RVSA/1.0 algorithm). If using the RVSA/1.0
- * algorithm, lang_index is never used.
- *
- * set_language_quality() calls find_lang_index() and find_default_index()
- * to set lang_index.  
- */
-
-static int find_lang_index(apr_array_header_t *accept_langs, char *lang)
-{
-    const char **alang;
-    int i;
-
-    if (!lang || !accept_langs) {
-        return -1;
-    }
-
-    alang = (const char **) accept_langs->elts;
-
-    for (i = 0; i < accept_langs->nelts; ++i) {
-        if (!strncmp(lang, *alang, strlen(*alang))) {
-            return i;
-        }
-        alang += (accept_langs->elt_size / sizeof(char*));
-    }
-
-    return -1;
-}
-
-/* set_default_lang_quality() sets the quality we apply to variants
- * which have no language assigned to them. If none of the variants
- * have a language, we are not negotiating on language, so all are
- * acceptable, and we set the default q value to 1.0. However if
- * some of the variants have languages, we set this default to 0.0001.
- * The value of this default will be applied to all variants with
- * no explicit language -- which will have the effect of making them
- * acceptable, but only if no variants with an explicit language
- * are acceptable. The default q value set here is assigned to variants
- * with no language type in set_language_quality().
- *
- * Note that if using the RVSA/1.0 algorithm, we don't use this
- * fiddle.  
- */
-
-static void set_default_lang_quality(negotiation_state *neg)
-{
-    var_rec *avail_recs = (var_rec *) neg->avail_vars->elts;
-    int j;
-
-    if (!neg->dont_fiddle_headers) {
-        for (j = 0; j < neg->avail_vars->nelts; ++j) {
-            var_rec *variant = &avail_recs[j];
-            if (variant->content_languages &&
-                variant->content_languages->nelts) {
-                neg->default_lang_quality = 0.0001f;
-                return;
-            }
-        }
-    }
-
-    neg->default_lang_quality = 1.0f;
-}
-
-/* Set the language_quality value in the variant record. Also
- * assigns lang_index for ForceLanguagePriority.
- *
- * To find the language_quality value, we look for the 'q' value
- * of the 'best' matching language on the Accept-Language
- * header. The 'best' match is the language on Accept-Language
- * header which matches the language of this variant either fully,
- * or as far as the prefix marker (-). If two or more languages
- * match, use the longest string from the Accept-Language header
- * (see HTTP/1.1 [14.4])
- *
- * When a variant has multiple languages, we find the 'best'
- * match for each variant language tag as above, then select the
- * one with the highest q value. Because both the accept-header
- * and variant can have multiple languages, we now have a hairy
- * loop-within-a-loop here.
- *
- * If the variant has no language and we have no Accept-Language
- * items, leave the quality at 1.0 and return.
- *
- * If the variant has no language, we use the default as set by
- * set_default_lang_quality() (1.0 if we are not negotiating on
- * language, 0.001 if we are).
- *
- * Following the setting of the language quality, we drop through to
- * set the old 'lang_index'. This is set based on either the order
- * of the languages on the Accept-Language header, or the
- * order on the LanguagePriority directive. This is only used
- * in the negotiation if the language qualities tie.
- */
-
-static void set_language_quality(negotiation_state *neg, var_rec *variant)
-{
-    int forcepriority = neg->conf->forcelangpriority;
-    if (forcepriority == FLP_UNDEF) {
-        forcepriority = FLP_DEFAULT;
-    }
-
-    if (!variant->content_languages || !variant->content_languages->nelts) {
-        /* This variant has no content-language, so use the default
-         * quality factor for variants with no content-language
-         * (previously set by set_default_lang_quality()).
-         * Leave the factor alone (it remains at 1.0) when we may not fiddle
-         * with the headers.
-         */
-        if (!neg->dont_fiddle_headers) {
-            variant->lang_quality = neg->default_lang_quality;
-        }
-        if (!neg->accept_langs) {
-            return;             /* no accept-language header */
-        }
-        return;
-    }
-    else {
-        /* Variant has one (or more) languages.  Look for the best
-         * match. We do this by going through each language on the
-         * variant description looking for a match on the
-         * Accept-Language header. The best match is the longest
-         * matching language on the header. The final result is the
-         * best q value from all the languages on the variant
-         * description.
-         */
-
-        if (!neg->accept_langs) {
-            /* no accept-language header makes the variant indefinite */
-            variant->definite = 0;
-        }
-        else {    /* There is an accept-language with 0 or more items */
-            accept_rec *accs = (accept_rec *) neg->accept_langs->elts;
-            accept_rec *best = NULL, *star = NULL;
-            accept_rec *bestthistag;
-            char *lang, *p;
-            float fiddle_q = 0.0f;
-            int any_match_on_star = 0;
-            int i, j;
-            size_t alen, longest_lang_range_len;
-
-            for (j = 0; j < variant->content_languages->nelts; ++j) {
-                p = NULL;
-                bestthistag = NULL;
-                longest_lang_range_len = 0;
-                alen = 0;
-                
-                /* lang is the variant's language-tag, which is the one
-                 * we are allowed to use the prefix of in HTTP/1.1
-                 */
-                lang = ((char **) (variant->content_languages->elts))[j];
-                
-                /* now find the best (i.e. longest) matching
-                 * Accept-Language header language. We put the best match
-                 * for this tag in bestthistag. We cannot update the
-                 * overall best (based on q value) because the best match
-                 * for this tag is the longest language item on the accept
-                 * header, not necessarily the highest q.
-                 */
-                for (i = 0; i < neg->accept_langs->nelts; ++i) {
-                    if (!strcmp(accs[i].name, "*")) {
-                        if (!star) {
-                            star = &accs[i];
-                        }
-                        continue;
-                    }
-                    /* Find language. We match if either the variant
-                     * language tag exactly matches the language range
-                     * from the accept header, or a prefix of the variant
-                     * language tag up to a '-' character matches the
-                     * whole of the language range in the Accept-Language
-                     * header.  Note that HTTP/1.x allows any number of
-                     * '-' characters in a tag or range, currently only
-                     * tags with zero or one '-' characters are defined
-                     * for general use (see rfc1766).
-                     *  
-                     * We only use language range in the Accept-Language
-                     * header the best match for the variant language tag
-                     * if it is longer than the previous best match.
-                     */
-                    
-                    alen = strlen(accs[i].name);
-                    
-                    if ((strlen(lang) >= alen) &&
-                        !strncmp(lang, accs[i].name, alen) &&
-                        ((lang[alen] == 0) || (lang[alen] == '-')) ) {
-                        
-                        if (alen > longest_lang_range_len) {
-                            longest_lang_range_len = alen;
-                            bestthistag = &accs[i];
-                        }
-                    }
-                    
-                    if (!bestthistag && !neg->dont_fiddle_headers) {
-                        /* The next bit is a fiddle. Some browsers might
-                         * be configured to send more specific language
-                         * ranges than desirable. For example, an
-                         * Accept-Language of en-US should never match
-                         * variants with languages en or en-GB. But US
-                         * English speakers might pick en-US as their
-                         * language choice.  So this fiddle checks if the
-                         * language range has a prefix, and if so, it
-                         * matches variants which match that prefix with a
-                         * priority of 0.001. So a request for en-US would
-                         * match variants of types en and en-GB, but at
-                         * much lower priority than matches of en-US
-                         * directly, or of any other language listed on
-                         * the Accept-Language header. Note that this
-                         * fiddle does not handle multi-level prefixes.
-                         */
-                        if ((p = strchr(accs[i].name, '-'))) {
-                            int plen = p - accs[i].name;
-
-                            if (!strncmp(lang, accs[i].name, plen)) {
-                                fiddle_q = 0.001f;
-                            }
-                        }
-                    }
-                }
-                /* Finished looking at Accept-Language headers, the best
-                 * (longest) match is in bestthistag, or NULL if no match
-                 */
-                if (!best ||
-                    (bestthistag && bestthistag->quality > best->quality)) {
-                    best = bestthistag;
-                }
-                
-                /* See if the tag matches on a * in the Accept-Language
-                 * header. If so, record this fact for later use 
-                 */
-                if (!bestthistag && star) {
-                    any_match_on_star = 1;
-                }
-            }
-            
-            /* If one of the language tags of the variant matched on *, we
-             * need to see if its q is better than that of any non-* match
-             * on any other tag of the variant.  If so the * match takes
-             * precedence and the overall match is not definite.
-             */
-            if ( any_match_on_star &&
-                ((best && star->quality > best->quality) ||
-                 (!best)) ) {
-                best = star;
-                variant->definite = 0;
-            }
-            
-            variant->lang_quality = best ? best->quality : fiddle_q;
-        }
-    }
-
-    /* Handle the ForceDefaultLanguage overrides, based on the best match
-     * to LanguagePriority order.  The best match is the lowest index of 
-     * any LanguagePriority match.
-     */
-    if (((forcepriority & FLP_PREFER) 
-             && (variant->lang_index < 0))
-     || ((forcepriority & FLP_FALLBACK)
-             && !variant->lang_quality)) 
-    {
-        int bestidx = -1;
-        int j;
-
-        for (j = 0; j < variant->content_languages->nelts; ++j) 
-        {
-            /* lang is the variant's language-tag, which is the one
-             * we are allowed to use the prefix of in HTTP/1.1
-             */
-            char *lang = ((char **) (variant->content_languages->elts))[j];
-            int idx = -1;
-        
-            /* If we wish to fallback or 
-             * we use our own LanguagePriority index.
-             */
-            idx = find_lang_index(neg->conf->language_priority, lang);
-            if ((idx >= 0) && ((bestidx == -1) || (idx < bestidx))) {
-                bestidx = idx;
-            }
-        }
-
-        if (bestidx >= 0) {
-            if (variant->lang_quality) {
-                if (forcepriority & FLP_PREFER) {
-                    variant->lang_index = bestidx;
-                }
-            }
-            else {
-                if (forcepriority & FLP_FALLBACK) {
-                    variant->lang_index = bestidx;
-                    variant->lang_quality = .0001f;
-                    variant->definite = 0;
-                }
-            }
-        }
-    }
-    return;
-}
-
-/* Determining the content length --- if the map didn't tell us,
- * we have to do a stat() and remember for next time.
- */
-
-static apr_off_t find_content_length(negotiation_state *neg, var_rec *variant)
-{
-    apr_finfo_t statb;
-
-    if (variant->bytes < 0) {
-        if (variant->sub_req && (variant->sub_req->finfo.valid & APR_FINFO_SIZE)) {
-            variant->bytes = variant->sub_req->finfo.size;
-        }
-        else {
-            char *fullname = ap_make_full_path(neg->pool, neg->dir_name,
-                                               variant->file_name);
-
-            if (apr_stat(&statb, fullname,
-                         APR_FINFO_SIZE, neg->pool) == APR_SUCCESS) {
-                variant->bytes = statb.size;
-            }
-        }
-    }
-
-    return variant->bytes;
-}
-
-/* For a given variant, find the best matching Accept: header
- * and assign the Accept: header's quality value to the
- * mime_type_quality field of the variant, for later use in
- * determining the best matching variant.
- */
-
-static void set_accept_quality(negotiation_state *neg, var_rec *variant)
-{
-    int i;
-    accept_rec *accept_recs;
-    float q = 0.0f;
-    int q_definite = 1;
-
-    /* if no Accept: header, leave quality alone (will
-     * remain at the default value of 1) 
-     *
-     * XXX: This if is currently never true because of the effect of
-     * maybe_add_default_accepts().
-     */
-    if (!neg->accepts) {
-        if (variant->mime_type && *variant->mime_type)
-            variant->definite = 0;
-        return;
-    }
-
-    accept_recs = (accept_rec *) neg->accepts->elts;
-
-    /*
-     * Go through each of the ranges on the Accept: header,
-     * looking for the 'best' match with this variant's
-     * content-type. We use the best match's quality
-     * value (from the Accept: header) for this variant's
-     * mime_type_quality field.
-     *
-     * The best match is determined like this:
-     *    type/type is better than type/ * is better than * / *
-     *    if match is type/type, use the level mime param if available
-     */
-    for (i = 0; i < neg->accepts->nelts; ++i) {
-
-        accept_rec *type = &accept_recs[i];
-        int prev_mime_stars;
-
-        prev_mime_stars = variant->mime_stars;
-
-        if (!mime_match(type, variant)) {
-            continue;           /* didn't match the content type at all */
-        }
-        else {
-            /* did match - see if there were less or more stars than
-             * in previous match
-             */
-            if (prev_mime_stars == variant->mime_stars) {
-                continue;       /* more stars => not as good a match */
-            }
-        }
-
-        /* If we are allowed to mess with the q-values
-         * and have no explicit q= parameters in the accept header,
-         * make wildcards very low, so we have a low chance
-         * of ending up with them if there's something better.
-         */
-
-        if (!neg->dont_fiddle_headers && !neg->accept_q &&
-            variant->mime_stars == 1) {
-            q = 0.01f;
-        }
-        else if (!neg->dont_fiddle_headers && !neg->accept_q &&
-                 variant->mime_stars == 2) {
-            q = 0.02f;
-        }
-        else {
-            q = type->quality;
-        }
-
-        q_definite = (variant->mime_stars == 3);
-    }
-    variant->mime_type_quality = q;
-    variant->definite = variant->definite && q_definite;
-
-}
-
-/* For a given variant, find the 'q' value of the charset given
- * on the Accept-Charset line. If no charsets are listed,
- * assume value of '1'.
- */
-static void set_charset_quality(negotiation_state *neg, var_rec *variant)
-{
-    int i;
-    accept_rec *accept_recs;
-    const char *charset = variant->content_charset;
-    accept_rec *star = NULL;
-
-    /* if no Accept-Charset: header, leave quality alone (will
-     * remain at the default value of 1)
-     */
-    if (!neg->accept_charsets) {
-        if (charset && *charset)
-            variant->definite = 0;
-        return;
-    }
-
-    accept_recs = (accept_rec *) neg->accept_charsets->elts;
-
-    if (charset == NULL || !*charset) {
-        /* Charset of variant not known */
-
-        /* if not a text / * type, leave quality alone */
-        if (!(!strncmp(variant->mime_type, "text/", 5)
-              || !strcmp(variant->mime_type, INCLUDES_MAGIC_TYPE)
-              || !strcmp(variant->mime_type, INCLUDES_MAGIC_TYPE3) 
-              ))
-            return;
-
-        /* Don't go guessing if we are in strict header mode,
-         * e.g. when running the rvsa, as any guess won't be reflected
-         * in the variant list or content-location headers.
-         */
-        if (neg->dont_fiddle_headers)
-            return;
-
-        charset = "iso-8859-1"; /* The default charset for HTTP text types */
-    }
-
-    /*
-     * Go through each of the items on the Accept-Charset header,
-     * looking for a match with this variant's charset. If none
-     * match, charset is unacceptable, so set quality to 0.
-     */
-    for (i = 0; i < neg->accept_charsets->nelts; ++i) {
-
-        accept_rec *type = &accept_recs[i];
-
-        if (!strcmp(type->name, charset)) {
-            variant->charset_quality = type->quality;
-            return;
-        }
-        else if (strcmp(type->name, "*") == 0) {
-            star = type;
-        }
-    }
-    /* No explicit match */
-    if (star) {
-        variant->charset_quality = star->quality;
-        variant->definite = 0;
-        return;
-    }
-    /* If this variant is in charset iso-8859-1, the default is 1.0 */
-    if (strcmp(charset, "iso-8859-1") == 0) {
-        variant->charset_quality = 1.0f;
-    }
-    else {
-        variant->charset_quality = 0.0f;
-    }
-}
-
-
-/* is_identity_encoding is included for back-compat, but does anyone
- * use 7bit, 8bin or binary in their var files??
- */
-
-static int is_identity_encoding(const char *enc)
-{
-    return (!enc || !enc[0] || !strcmp(enc, "7bit") || !strcmp(enc, "8bit")
-            || !strcmp(enc, "binary"));
-}
-
-/*
- * set_encoding_quality determines whether the encoding for a particular
- * variant is acceptable for the user-agent.
- *
- * The rules for encoding are that if the user-agent does not supply
- * any Accept-Encoding header, then all encodings are allowed but a
- * variant with no encoding should be preferred.
- * If there is an empty Accept-Encoding header, then no encodings are 
- * acceptable. If there is a non-empty Accept-Encoding header, then
- * any of the listed encodings are acceptable, as well as no encoding
- * unless the "identity" encoding is specifically excluded.
- */
-static void set_encoding_quality(negotiation_state *neg, var_rec *variant)
-{
-    accept_rec *accept_recs;
-    const char *enc = variant->content_encoding;
-    accept_rec *star = NULL;
-    float value_if_not_found = 0.0f;
-    int i;
-
-    if (!neg->accept_encodings) {
-        /* We had no Accept-Encoding header, assume that all
-         * encodings are acceptable with a low quality,
-         * but we prefer no encoding if available.
-         */
-        if (!enc || is_identity_encoding(enc))
-            variant->encoding_quality = 1.0f;
-        else
-            variant->encoding_quality = 0.5f;
-
-        return;
-    }
-
-    if (!enc || is_identity_encoding(enc)) {
-        enc = "identity";
-        value_if_not_found = 0.0001f;
-    }
-
-    accept_recs = (accept_rec *) neg->accept_encodings->elts;
-
-    /* Go through each of the encodings on the Accept-Encoding: header,
-     * looking for a match with our encoding. x- prefixes are ignored.
-     */
-    if (enc[0] == 'x' && enc[1] == '-') {
-        enc += 2;
-    }
-    for (i = 0; i < neg->accept_encodings->nelts; ++i) {
-
-        char *name = accept_recs[i].name;
-
-        if (name[0] == 'x' && name[1] == '-') {
-            name += 2;
-        }
-
-        if (!strcmp(name, enc)) {
-            variant->encoding_quality = accept_recs[i].quality;
-            return;
-        }
-
-        if (strcmp(name, "*") == 0) {
-            star = &accept_recs[i];
-        }
-
-    }
-    /* No explicit match */
-    if (star) {
-        variant->encoding_quality = star->quality;
-        return;
-    }
-
-    /* Encoding not found on Accept-Encoding: header, so it is
-     * _not_ acceptable unless it is the identity (no encoding)
-     */
-    variant->encoding_quality = value_if_not_found;
-}
-
-/************************************************************* 
- * Possible results of the variant selection algorithm 
- */
-enum algorithm_results {
-    alg_choice = 1,              /* choose variant */
-    alg_list                     /* list variants */
-};
-
-/* Below is the 'best_match' function. It returns an int, which has
- * one of the two values alg_choice or alg_list, which give the result
- * of the variant selection algorithm.  alg_list means that no best
- * variant was found by the algorithm, alg_choice means that a best
- * variant was found and should be returned.  The list/choice
- * terminology comes from TCN (rfc2295), but is used in a more generic
- * way here.  The best variant is returned in *pbest. best_match has
- * two possible algorithms for determining the best variant: the
- * RVSA/1.0 algorithm (from RFC2296), and the standard Apache
- * algorithm. These are split out into separate functions
- * (is_variant_better_rvsa() and is_variant_better()).  Selection of
- * one is through the neg->use_rvsa flag.
- *
- * The call to best_match also creates full information, including
- * language, charset, etc quality for _every_ variant. This is needed
- * for generating a correct Vary header, and can be used for the
- * Alternates header, the human-readable list responses and 406 errors.
- */
-
-/* Firstly, the RVSA/1.0 (HTTP Remote Variant Selection Algorithm
- * v1.0) from rfc2296.  This is the algorithm that goes together with
- * transparent content negotiation (TCN).
- */
-static int is_variant_better_rvsa(negotiation_state *neg, var_rec *variant,
-                                  var_rec *best, float *p_bestq)
-{
-    float bestq = *p_bestq, q;
-
-    /* TCN does not cover negotiation on content-encoding.  For now,
-     * we ignore the encoding unless it was explicitly excluded.
-     */
-    if (variant->encoding_quality == 0.0f)
-        return 0;
-    
-    q = variant->mime_type_quality *
-        variant->source_quality *
-        variant->charset_quality *
-        variant->lang_quality;
-
-   /* RFC 2296 calls for the result to be rounded to 5 decimal places,
-    * but we don't do that because it serves no useful purpose other
-    * than to ensure that a remote algorithm operates on the same
-    * precision as ours.  That is silly, since what we obviously want
-    * is for the algorithm to operate on the best available precision
-    * regardless of who runs it.  Since the above calculation may
-    * result in significant variance at 1e-12, rounding would be bogus.
-    */
-
-#ifdef NEG_DEBUG
-    ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
-           "Variant: file=%s type=%s lang=%s sourceq=%1.3f "
-           "mimeq=%1.3f langq=%1.3f charq=%1.3f encq=%1.3f "
-           "q=%1.5f definite=%d",            
-            (variant->file_name ? variant->file_name : ""),
-            (variant->mime_type ? variant->mime_type : ""),
-            (variant->content_languages
-             ? apr_array_pstrcat(neg->pool, variant->content_languages, ',')
-             : ""),
-            variant->source_quality,
-            variant->mime_type_quality,
-            variant->lang_quality,
-            variant->charset_quality,
-            variant->encoding_quality,
-            q,
-            variant->definite);
-#endif
-
-    if (q <= 0.0f) {
-        return 0;
-    }
-    if (q > bestq) {
-        *p_bestq = q;
-        return 1;
-    }
-    if (q == bestq) {
-        /* If the best variant's encoding is of lesser quality than
-         * this variant, then we prefer this variant
-         */
-        if (variant->encoding_quality > best->encoding_quality) {
-            *p_bestq = q;
-            return 1;
-        }
-    }
-    return 0;
-}
-
-/* Negotiation algorithm as used by previous versions of Apache
- * (just about). 
- */
-
-static int is_variant_better(negotiation_state *neg, var_rec *variant,
-                             var_rec *best, float *p_bestq)
-{
-    float bestq = *p_bestq, q;
-    int levcmp;
-
-    /* For non-transparent negotiation, server can choose how
-     * to handle the negotiation. We'll use the following in
-     * order: content-type, language, content-type level, charset,
-     * content encoding, content length.
-     *
-     * For each check, we have three possible outcomes:
-     *   This variant is worse than current best: return 0
-     *   This variant is better than the current best:
-     *          assign this variant's q to *p_bestq, and return 1
-     *   This variant is just as desirable as the current best:
-     *          drop through to the next test.
-     *
-     * This code is written in this long-winded way to allow future
-     * customisation, either by the addition of additional
-     * checks, or to allow the order of the checks to be determined
-     * by configuration options (e.g. we might prefer to check
-     * language quality _before_ content type).
-     */
-
-    /* First though, eliminate this variant if it is not
-     * acceptable by type, charset, encoding or language.
-     */
-
-#ifdef NEG_DEBUG
-    ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
-           "Variant: file=%s type=%s lang=%s sourceq=%1.3f "
-           "mimeq=%1.3f langq=%1.3f langidx=%d charq=%1.3f encq=%1.3f ",
-            (variant->file_name ? variant->file_name : ""),
-            (variant->mime_type ? variant->mime_type : ""),
-            (variant->content_languages
-             ? apr_array_pstrcat(neg->pool, variant->content_languages, ',')
-             : ""),
-            variant->source_quality,
-            variant->mime_type_quality,
-            variant->lang_quality,
-            variant->lang_index,
-            variant->charset_quality,
-            variant->encoding_quality);
-#endif
-
-    if (variant->encoding_quality == 0.0f ||
-        variant->lang_quality == 0.0f ||
-        variant->source_quality == 0.0f ||
-        variant->charset_quality == 0.0f ||
-        variant->mime_type_quality == 0.0f) {
-        return 0;               /* don't consider unacceptables */
-    }
-
-    q = variant->mime_type_quality * variant->source_quality;
-    if (q == 0.0 || q < bestq) {
-        return 0;
-    }
-    if (q > bestq || !best) {
-        *p_bestq = q;
-        return 1;
-    }
-
-    /* language */
-    if (variant->lang_quality < best->lang_quality) {
-        return 0;
-    }
-    if (variant->lang_quality > best->lang_quality) {
-        *p_bestq = q;
-        return 1;
-    }
-
-    /* if language qualities were equal, try the LanguagePriority stuff */
-    if (best->lang_index != -1 &&
-        (variant->lang_index == -1 || variant->lang_index > best->lang_index)) {
-        return 0;
-    }
-    if (variant->lang_index != -1 &&
-        (best->lang_index == -1 || variant->lang_index < best->lang_index)) {
-        *p_bestq = q;
-        return 1;
-    }
-
-    /* content-type level (sometimes used with text/html, though we
-     * support it on other types too)
-     */
-    levcmp = level_cmp(variant, best);
-    if (levcmp == -1) {
-        return 0;
-    }
-    if (levcmp == 1) {
-        *p_bestq = q;
-        return 1;
-    }
-
-    /* charset */
-    if (variant->charset_quality < best->charset_quality) {
-        return 0;
-    }
-    /* If the best variant's charset is ISO-8859-1 and this variant has
-     * the same charset quality, then we prefer this variant
-     */
-
-    if (variant->charset_quality > best->charset_quality ||
-        ((variant->content_charset != NULL &&
-          *variant->content_charset != '\0' &&
-          strcmp(variant->content_charset, "iso-8859-1") != 0) &&
-         (best->content_charset == NULL ||
-          *best->content_charset == '\0' ||
-          strcmp(best->content_charset, "iso-8859-1") == 0))) {
-        *p_bestq = q;
-        return 1;
-    }
-
-    /* Prefer the highest value for encoding_quality.
-     */
-    if (variant->encoding_quality < best->encoding_quality) {
-       return 0;
-    }
-    if (variant->encoding_quality > best->encoding_quality) {
-       *p_bestq = q;
-       return 1;
-    }
-
-    /* content length if all else equal */
-    if (find_content_length(neg, variant) >= find_content_length(neg, best)) {
-        return 0;
-    }
-
-    /* ok, to get here means every thing turned out equal, except
-     * we have a shorter content length, so use this variant
-     */
-    *p_bestq = q;
-    return 1;
-}
-
-static int best_match(negotiation_state *neg, var_rec **pbest)
-{
-    int j;
-    var_rec *best = NULL;
-    float bestq = 0.0f;
-    enum algorithm_results algorithm_result;
-
-    var_rec *avail_recs = (var_rec *) neg->avail_vars->elts;
-
-    set_default_lang_quality(neg);
-
-    /*
-     * Find the 'best' variant 
-     */
-
-    for (j = 0; j < neg->avail_vars->nelts; ++j) {
-        var_rec *variant = &avail_recs[j];
-
-        /* Find all the relevant 'quality' values from the
-         * Accept... headers, and store in the variant.  This also
-         * prepares for sending an Alternates header etc so we need to
-         * do it even if we do not actually plan to find a best
-         * variant.  
-         */
-        set_accept_quality(neg, variant);
-        set_language_quality(neg, variant);
-        set_encoding_quality(neg, variant);
-        set_charset_quality(neg, variant);
-
-        /* Only do variant selection if we may actually choose a
-         * variant for the client 
-         */
-        if (neg->may_choose) {
-
-            /* Now find out if this variant is better than the current
-             * best, either using the RVSA/1.0 algorithm, or Apache's
-             * internal server-driven algorithm. Presumably other
-             * server-driven algorithms are possible, and could be
-             * implemented here.
-             */
-     
-            if (neg->use_rvsa) {
-                if (is_variant_better_rvsa(neg, variant, best, &bestq)) {
-                    best = variant;
-                }
-            }
-            else {
-                if (is_variant_better(neg, variant, best, &bestq)) {
-                    best = variant;
-                }
-            }
-        }
-    }
-
-    /* We now either have a best variant, or no best variant */
-
-    if (neg->use_rvsa)    {
-        /* calculate result for RVSA/1.0 algorithm:
-         * only a choice response if the best variant has q>0
-         * and is definite
-         */
-        algorithm_result = (best && best->definite) && (bestq > 0) ?
-                           alg_choice : alg_list;
-    }
-    else {
-        /* calculate result for Apache negotiation algorithm */
-        algorithm_result = bestq > 0 ? alg_choice : alg_list;        
-    }
-
-    /* Returning a choice response with a non-neighboring variant is a
-     * protocol security error in TCN (see rfc2295).  We do *not*
-     * verify here that the variant and URI are neighbors, even though
-     * we may return alg_choice.  We depend on the environment (the
-     * caller) to only declare the resource transparently negotiable if
-     * all variants are neighbors.
-     */
-    *pbest = best;
-    return algorithm_result;
-}
-
-/* Sets response headers for a negotiated response.
- * neg->is_transparent determines whether a transparently negotiated
- * response or a plain `server driven negotiation' response is
- * created.   Applicable headers are Alternates, Vary, and TCN.
- *
- * The Vary header we create is sometimes longer than is required for
- * the correct caching of negotiated results by HTTP/1.1 caches.  For
- * example if we have 3 variants x.html, x.ps.en and x.ps.nl, and if
- * the Accept: header assigns a 0 quality to .ps, then the results of
- * the two server-side negotiation algorithms we currently implement
- * will never depend on Accept-Language so we could return `Vary:
- * negotiate, accept' instead of the longer 'Vary: negotiate, accept,
- * accept-language' which the code below will return.  A routine for
- * computing the exact minimal Vary header would be a huge pain to code
- * and maintain though, especially because we need to take all possible
- * twiddles in the server-side negotiation algorithms into account.
- */
-static void set_neg_headers(request_rec *r, negotiation_state *neg,
-                            int alg_result)
-{
-    apr_table_t *hdrs;
-    var_rec *avail_recs = (var_rec *) neg->avail_vars->elts;
-    const char *sample_type = NULL;
-    const char *sample_language = NULL;
-    const char *sample_encoding = NULL;
-    const char *sample_charset = NULL;
-    char *lang;
-    char *qstr;
-    char *lenstr;
-    apr_off_t len;
-    apr_array_header_t *arr;
-    int max_vlist_array = (neg->avail_vars->nelts * 21);
-    int first_variant = 1;
-    int vary_by_type = 0;
-    int vary_by_language = 0;
-    int vary_by_charset = 0;
-    int vary_by_encoding = 0;
-    int j;
-
-    /* In order to avoid O(n^2) memory copies in building Alternates,
-     * we preallocate a apr_table_t with the maximum substrings possible,
-     * fill it with the variant list, and then concatenate the entire array.
-     * Note that if you change the number of substrings pushed, you also
-     * need to change the calculation of max_vlist_array above.
-     */
-    if (neg->send_alternates && neg->avail_vars->nelts)
-        arr = apr_array_make(r->pool, max_vlist_array, sizeof(char *));
-    else
-        arr = NULL;
-
-    /* Put headers into err_headers_out, since send_http_header()
-     * outputs both headers_out and err_headers_out.
-     */
-    hdrs = r->err_headers_out;
-
-    for (j = 0; j < neg->avail_vars->nelts; ++j) {
-        var_rec *variant = &avail_recs[j];
-
-        if (variant->content_languages && variant->content_languages->nelts) {
-            lang = apr_array_pstrcat(r->pool, variant->content_languages, ',');
-        }
-        else {
-            lang = NULL;
-        }
-
-        /* Calculate Vary by looking for any difference between variants */
-
-        if (first_variant) {
-            sample_type     = variant->mime_type;
-            sample_charset  = variant->content_charset;
-            sample_language = lang;
-            sample_encoding = variant->content_encoding;
-        }
-        else {
-            if (!vary_by_type &&
-                strcmp(sample_type ? sample_type : "", 
-                       variant->mime_type ? variant->mime_type : "")) {
-                vary_by_type = 1;
-            }
-            if (!vary_by_charset &&
-                strcmp(sample_charset ? sample_charset : "",
-                       variant->content_charset ?
-                       variant->content_charset : "")) {
-                vary_by_charset = 1;
-            }
-            if (!vary_by_language &&
-                strcmp(sample_language ? sample_language : "", 
-                       lang ? lang : "")) {
-                vary_by_language = 1;
-            }
-            if (!vary_by_encoding &&
-                strcmp(sample_encoding ? sample_encoding : "",
-                       variant->content_encoding ? 
-                       variant->content_encoding : "")) {
-                vary_by_encoding = 1;
-            }
-        }
-        first_variant = 0;
-
-        if (!neg->send_alternates)
-            continue;
-
-        /* Generate the string components for this Alternates entry */
-
-        *((const char **) apr_array_push(arr)) = "{\"";
-        *((const char **) apr_array_push(arr)) = variant->file_name;
-        *((const char **) apr_array_push(arr)) = "\" ";
-
-        qstr = (char *) apr_palloc(r->pool, 6);
-        apr_snprintf(qstr, 6, "%1.3f", variant->source_quality);
-
-        /* Strip trailing zeros (saves those valuable network bytes) */
-        if (qstr[4] == '0') {
-            qstr[4] = '\0';
-            if (qstr[3] == '0') {
-                qstr[3] = '\0';
-                if (qstr[2] == '0') {
-                    qstr[1] = '\0';
-                }
-            }
-        }
-        *((const char **) apr_array_push(arr)) = qstr;
-
-        if (variant->mime_type && *variant->mime_type) {
-            *((const char **) apr_array_push(arr)) = " {type ";
-            *((const char **) apr_array_push(arr)) = variant->mime_type;
-            *((const char **) apr_array_push(arr)) = "}";
-        }
-        if (variant->content_charset && *variant->content_charset) {
-            *((const char **) apr_array_push(arr)) = " {charset ";
-            *((const char **) apr_array_push(arr)) = variant->content_charset;
-            *((const char **) apr_array_push(arr)) = "}";
-        }
-        if (lang) {
-            *((const char **) apr_array_push(arr)) = " {language ";
-            *((const char **) apr_array_push(arr)) = lang;
-            *((const char **) apr_array_push(arr)) = "}";
-        }
-        if (variant->content_encoding && *variant->content_encoding) {
-            /* Strictly speaking, this is non-standard, but so is TCN */
-
-            *((const char **) apr_array_push(arr)) = " {encoding ";
-            *((const char **) apr_array_push(arr)) = variant->content_encoding;
-            *((const char **) apr_array_push(arr)) = "}";
-        }
-
-        /* Note that the Alternates specification (in rfc2295) does
-         * not require that we include {length x}, so we could omit it
-         * if determining the length is too expensive.  We currently
-         * always include it though.  22 bytes is enough for 2^64.
-         *
-         * If the variant is a CGI script, find_content_length would
-         * return the length of the script, not the output it
-         * produces, so we check for the presence of a handler and if
-         * there is one we don't add a length.
-         * 
-         * XXX: TODO: This check does not detect a CGI script if we
-         * get the variant from a type map.  This needs to be fixed
-         * (without breaking things if the type map specifies a
-         * content-length, which currently leads to the correct result).
-         */
-        if (!(variant->sub_req && variant->sub_req->handler)
-            && (len = find_content_length(neg, variant)) >= 0) {
-
-            lenstr = (char *) apr_palloc(r->pool, 22);
-            apr_snprintf(lenstr, 22, "%" APR_OFF_T_FMT, len);
-            *((const char **) apr_array_push(arr)) = " {length ";
-            *((const char **) apr_array_push(arr)) = lenstr;
-            *((const char **) apr_array_push(arr)) = "}";
-        }
-      
-        *((const char **) apr_array_push(arr)) = "}";
-        *((const char **) apr_array_push(arr)) = ", "; /* trimmed below */
-    }
-
-    if (neg->send_alternates && neg->avail_vars->nelts) {
-        arr->nelts--;                                 /* remove last comma */
-        apr_table_mergen(hdrs, "Alternates",
-                        apr_array_pstrcat(r->pool, arr, '\0'));
-    } 
-
-    if (neg->is_transparent || vary_by_type || vary_by_language ||
-        vary_by_language || vary_by_charset || vary_by_encoding) {
-
-        apr_table_mergen(hdrs, "Vary", 2 + apr_pstrcat(r->pool,
-            neg->is_transparent ? ", negotiate"       : "",
-            vary_by_type        ? ", accept"          : "",
-            vary_by_language    ? ", accept-language" : "",
-            vary_by_charset     ? ", accept-charset"  : "",
-            vary_by_encoding    ? ", accept-encoding" : "", NULL));
-    }
-
-    if (neg->is_transparent) { /* Create TCN response header */
-        apr_table_setn(hdrs, "TCN",
-                      alg_result == alg_list ? "list" : "choice");
-    }
-}
-
-/**********************************************************************
- *
- * Return an HTML list of variants. This is output as part of the
- * choice response or 406 status body.
- */
-
-static char *make_variant_list(request_rec *r, negotiation_state *neg)
-{
-    apr_array_header_t *arr;
-    int i;
-    int max_vlist_array = (neg->avail_vars->nelts * 15) + 2;
-
-    /* In order to avoid O(n^2) memory copies in building the list,
-     * we preallocate a apr_table_t with the maximum substrings possible,
-     * fill it with the variant list, and then concatenate the entire array.
-     */
-    arr = apr_array_make(r->pool, max_vlist_array, sizeof(char *));
-
-    *((const char **) apr_array_push(arr)) = "Available variants:\n<ul>\n";
-
-    for (i = 0; i < neg->avail_vars->nelts; ++i) {
-        var_rec *variant = &((var_rec *) neg->avail_vars->elts)[i];
-        const char *filename = variant->file_name ? variant->file_name : "";
-        apr_array_header_t *languages = variant->content_languages;
-        const char *description = variant->description ? variant->description : "";
-
-        /* The format isn't very neat, and it would be nice to make
-         * the tags human readable (eg replace 'language en' with 'English').
-         * Note that if you change the number of substrings pushed, you also
-         * need to change the calculation of max_vlist_array above.
-         */
-        *((const char **) apr_array_push(arr)) = "<li><a href=\"";
-        *((const char **) apr_array_push(arr)) = filename;
-        *((const char **) apr_array_push(arr)) = "\">";
-        *((const char **) apr_array_push(arr)) = filename;
-        *((const char **) apr_array_push(arr)) = "</a> ";
-        *((const char **) apr_array_push(arr)) = description;
-
-        if (variant->mime_type && *variant->mime_type) {
-            *((const char **) apr_array_push(arr)) = ", type ";
-            *((const char **) apr_array_push(arr)) = variant->mime_type;
-        }
-        if (languages && languages->nelts) {
-            *((const char **) apr_array_push(arr)) = ", language ";
-            *((const char **) apr_array_push(arr)) = apr_array_pstrcat(r->pool,
-                                                       languages, ',');
-        }
-        if (variant->content_charset && *variant->content_charset) {
-            *((const char **) apr_array_push(arr)) = ", charset ";
-            *((const char **) apr_array_push(arr)) = variant->content_charset;
-        }
-        if (variant->content_encoding) {
-            *((const char **) apr_array_push(arr)) = ", encoding ";
-            *((const char **) apr_array_push(arr)) = variant->content_encoding;
-        }
-        *((const char **) apr_array_push(arr)) = "</li>\n";
-    }
-    *((const char **) apr_array_push(arr)) = "</ul>\n";
-
-    return apr_array_pstrcat(r->pool, arr, '\0');
-}
-
-static void store_variant_list(request_rec *r, negotiation_state *neg)
-{
-    if (r->main == NULL) {
-        apr_table_setn(r->notes, "variant-list", make_variant_list(r, neg));
-    }
-    else {
-        apr_table_setn(r->main->notes, "variant-list",
-                      make_variant_list(r->main, neg));
-    }
-}
-
-/* Called if we got a "Choice" response from the variant selection algorithm.
- * It checks the result of the chosen variant to see if it
- * is itself negotiated (if so, return error HTTP_VARIANT_ALSO_VARIES).
- * Otherwise, add the appropriate headers to the current response.
- */
-
-static int setup_choice_response(request_rec *r, negotiation_state *neg,
-                                 var_rec *variant)
-{
-    request_rec *sub_req;
-    const char *sub_vary;
-
-    if (!variant->sub_req) {
-        int status;
-
-        sub_req = ap_sub_req_lookup_file(variant->file_name, r, NULL);
-        status = sub_req->status;
-
-        if (status != HTTP_OK && 
-            !apr_table_get(sub_req->err_headers_out, "TCN")) {
-            ap_destroy_sub_req(sub_req);
-            return status;
-        }
-        variant->sub_req = sub_req;
-    }
-    else {
-        sub_req = variant->sub_req;
-    }
-
-    /* The variant selection algorithm told us to return a "Choice"
-     * response. This is the normal variant response, with
-     * some extra headers. First, ensure that the chosen
-     * variant did or will not itself engage in transparent negotiation.
-     * If not, set the appropriate headers, and fall through to
-     * the normal variant handling 
-     */
-
-    /* This catches the error that a transparent type map selects a
-     * transparent multiviews resource as the best variant.
-     *
-     * XXX: We do not signal an error if a transparent type map
-     * selects a _non_transparent multiviews resource as the best
-     * variant, because we can generate a legal negotiation response
-     * in this case.  In this case, the vlist_validator of the
-     * nontransparent subrequest will be lost however.  This could
-     * lead to cases in which a change in the set of variants or the
-     * negotiation algorithm of the nontransparent resource is never
-     * propagated up to a HTTP/1.1 cache which interprets Vary.  To be
-     * completely on the safe side we should return HTTP_VARIANT_ALSO_VARIES
-     * for this type of recursive negotiation too.
-     */
-    if (neg->is_transparent &&
-        apr_table_get(sub_req->err_headers_out, "TCN")) {
-        return HTTP_VARIANT_ALSO_VARIES;
-    }
-
-    /* This catches the error that a transparent type map recursively
-     * selects, as the best variant, another type map which itself
-     * causes transparent negotiation to be done.
-     *
-     * XXX: Actually, we catch this error by catching all cases of
-     * type map recursion.  There are some borderline recursive type
-     * map arrangements which would not produce transparent
-     * negotiation protocol errors or lack of cache propagation
-     * problems, but such arrangements are very hard to detect at this
-     * point in the control flow, so we do not bother to single them
-     * out.
-     *
-     * Recursive type maps imply a recursive arrangement of negotiated
-     * resources which is visible to outside clients, and this is not
-     * supported by the transparent negotiation caching protocols, so
-     * if we are to have generic support for recursive type maps, we
-     * have to create some configuration setting which makes all type
-     * maps non-transparent when recursion is enabled.  Also, if we
-     * want recursive type map support which ensures propagation of
-     * type map changes into HTTP/1.1 caches that handle Vary, we
-     * would have to extend the current mechanism for generating
-     * variant list validators.
-     */
-    if (sub_req->handler && strcmp(sub_req->handler, "type-map") == 0) {
-        return HTTP_VARIANT_ALSO_VARIES;
-    }
-
-    /* This adds an appropriate Variant-Vary header if the subrequest
-     * is a multiviews resource.
-     *
-     * XXX: TODO: Note that this does _not_ handle any Vary header
-     * returned by a CGI if sub_req is a CGI script, because we don't
-     * see that Vary header yet at this point in the control flow.
-     * This won't cause any cache consistency problems _unless_ the
-     * CGI script also returns a Cache-Control header marking the
-     * response as cachable.  This needs to be fixed, also there are
-     * problems if a CGI returns an Etag header which also need to be
-     * fixed.
-     */
-    if ((sub_vary = apr_table_get(sub_req->err_headers_out, "Vary")) != NULL) {
-        apr_table_setn(r->err_headers_out, "Variant-Vary", sub_vary);
-
-        /* Move the subreq Vary header into the main request to
-         * prevent having two Vary headers in the response, which
-         * would be legal but strange.
-         */
-        apr_table_setn(r->err_headers_out, "Vary", sub_vary);
-        apr_table_unset(sub_req->err_headers_out, "Vary");
-    }
-    
-    apr_table_setn(r->err_headers_out, "Content-Location",
-                  apr_pstrdup(r->pool, variant->file_name));
-
-    set_neg_headers(r, neg, alg_choice);         /* add Alternates and Vary */
-
-    /* Still to do by caller: add Expires */
-
-    return 0;
-}
-
-/****************************************************************
- *
- * Executive...
- */
-
-static int do_negotiation(request_rec *r, negotiation_state *neg, 
-                          var_rec **bestp, int prefer_scripts) 
-{
-    var_rec *avail_recs = (var_rec *) neg->avail_vars->elts;
-    int alg_result;              /* result of variant selection algorithm */
-    int res;
-    int j;
-
-    /* Decide if resource is transparently negotiable */
-
-    /* GET or HEAD? (HEAD has same method number as GET) */
-    if (r->method_number == M_GET) {
-
-        /* maybe this should be configurable, see also the comment
-         * about recursive type maps in setup_choice_response()
-         */
-        neg->is_transparent = 1;       
-
-        /* We can't be transparent if we are a map file in the middle
-         * of the request URI.
-         */
-        if (r->path_info && *r->path_info)
-            neg->is_transparent = 0;
-
-        for (j = 0; j < neg->avail_vars->nelts; ++j) {
-            var_rec *variant = &avail_recs[j];
-
-            /* We can't be transparent, because of internal
-             * assumptions in best_match(), if there is a
-             * non-neighboring variant.  We can have a non-neighboring
-             * variant when processing a type map.  
-             */
-            if (ap_strchr_c(variant->file_name, '/'))
-                neg->is_transparent = 0;
-        }
-    }
-
-    if (neg->is_transparent)  {
-        parse_negotiate_header(r, neg);
-    }
-    else { /* configure negotiation on non-transparent resource */
-        neg->may_choose = 1;
-    }
-
-    maybe_add_default_accepts(neg, prefer_scripts);
-
-    alg_result = best_match(neg, bestp);
-
-    /* alg_result is one of
-     *   alg_choice: a best variant is chosen
-     *   alg_list: no best variant is chosen
-     */
-
-    if (alg_result == alg_list) {
-        /* send a list response or HTTP_NOT_ACCEPTABLE error response  */
-
-        neg->send_alternates = 1; /* always include Alternates header */
-        set_neg_headers(r, neg, alg_result); 
-        store_variant_list(r, neg);
-
-        if (neg->is_transparent && neg->ua_supports_trans) {
-            /* XXX todo: expires? cachability? */
-            
-            /* Some HTTP/1.0 clients are known to choke when they get
-             * a 300 (multiple choices) response without a Location
-             * header.  However the 300 code response we are are about
-             * to generate will only reach 1.0 clients which support
-             * transparent negotiation, and they should be OK. The
-             * response should never reach older 1.0 clients, even if
-             * we have CacheNegotiatedDocs enabled, because no 1.0
-             * proxy cache (we know of) will cache and return 300
-             * responses (they certainly won't if they conform to the
-             * HTTP/1.0 specification).
-             */
-            return HTTP_MULTIPLE_CHOICES;
-        }
-        
-        if (!*bestp) {
-            ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                          "no acceptable variant: %s", r->filename);
-            return HTTP_NOT_ACCEPTABLE;
-        }
-    }
-
-    /* Variant selection chose a variant */
-
-    /* XXX todo: merge the two cases in the if statement below */
-    if (neg->is_transparent) {
-
-        if ((res = setup_choice_response(r, neg, *bestp)) != 0) {
-            return res; /* return if error */
-        }
-    }
-    else {
-        set_neg_headers(r, neg, alg_result);
-    }
-
-    /* Make sure caching works - Vary should handle HTTP/1.1, but for
-     * HTTP/1.0, we can't allow caching at all.
-     */
-
-    /* XXX: Note that we only set r->no_cache to 1, which causes
-     * Expires: <now> to be added, when responding to a HTTP/1.0
-     * client.  If we return the response to a 1.1 client, we do not
-     * add Expires <now>, because doing so would degrade 1.1 cache
-     * performance by preventing re-use of the response without prior
-     * revalidation.  On the other hand, if the 1.1 client is a proxy
-     * which was itself contacted by a 1.0 client, or a proxy cache
-     * which can be contacted later by 1.0 clients, then we currently
-     * rely on this 1.1 proxy to add the Expires: <now> when it
-     * forwards the response.
-     *
-     * XXX: TODO: Find out if the 1.1 spec requires proxies and
-     * tunnels to add Expires: <now> when forwarding the response to
-     * 1.0 clients.  I (kh) recall it is rather vague on this point.
-     * Testing actual 1.1 proxy implementations would also be nice. If
-     * Expires: <now> is not added by proxies then we need to always
-     * include Expires: <now> ourselves to ensure correct caching, but
-     * this would degrade HTTP/1.1 cache efficiency unless we also add
-     * Cache-Control: max-age=N, which we currently don't.
-     *
-     * Roy: No, we are not going to screw over HTTP future just to
-     *      ensure that people who can't be bothered to upgrade their
-     *      clients will always receive perfect server-side negotiation.
-     *      Hell, those clients are sending bogus accept headers anyway.
-     *
-     *      Manual setting of cache-control/expires always overrides this
-     *      automated kluge, on purpose.
-     */
-    
-    if ((!do_cache_negotiated_docs(r->server)
-         && (r->proto_num < HTTP_VERSION(1,1)))        
-         && neg->count_multiviews_variants != 1) {
-        r->no_cache = 1;
-    }
-
-    return OK;
-}
-
-static int handle_map_file(request_rec *r)
-{
-    negotiation_state *neg;
-    apr_file_t *map;
-    var_rec *best;
-    int res;
-    char *udir;
-
-    if(strcmp(r->handler,MAP_FILE_MAGIC_TYPE) && strcmp(r->handler,"type-map"))
-	return DECLINED;
-
-    neg = parse_accept_headers(r);
-    if ((res = read_type_map(&map, neg, r))) {
-        return res;
-    }
-
-    res = do_negotiation(r, neg, &best, 0);
-    if (res != 0) return res;
-
-    if (best->body)
-    {
-        apr_bucket_brigade *bb;
-        apr_bucket *e;
-
-        ap_allow_standard_methods(r, REPLACE_ALLOW, M_GET, M_OPTIONS, M_POST, -1);
-        if ((res = ap_discard_request_body(r)) != OK) {
-            return res;
-        }
-        /*if (r->method_number == M_OPTIONS) {
-         *    return ap_send_http_options(r);
-         *}
-         */
-        if (r->method_number != M_GET && r->method_number != M_POST) {
-            return HTTP_METHOD_NOT_ALLOWED;
-        }
-
-        /* ### These may be implemented by adding some 'extra' info
-         *     of the file offset onto the etag
-         * ap_update_mtime(r, r->finfo.mtime);
-         * ap_set_last_modified(r);
-         * ap_set_etag(r);
-         */
-        apr_table_setn(r->headers_out, "Accept-Ranges", "bytes");
-        ap_set_content_length(r, best->bytes); 
-        if ((res = ap_meets_conditions(r)) != OK) {
-            return res;
-        }
-
-        bb = apr_brigade_create(r->pool);
-        e = apr_bucket_file_create(map, best->body, 
-                                   (apr_size_t)best->bytes, r->pool);
-        APR_BRIGADE_INSERT_TAIL(bb, e);
-        e = apr_bucket_eos_create();
-        APR_BRIGADE_INSERT_TAIL(bb, e);
-
-        return ap_pass_brigade(r->output_filters, bb);
-    }
-
-    if (r->path_info && *r->path_info) {
-        /* remove any path_info from the end of the uri before trying
-         * to change the filename.  r->path_info from the original
-         * request is passed along on the redirect.
-         */
-        r->uri[ap_find_path_info(r->uri, r->path_info)] = '\0';
-    }
-    udir = ap_make_dirstr_parent(r->pool, r->uri);
-    udir = ap_escape_uri(r->pool, udir);
-    ap_internal_redirect(apr_pstrcat(r->pool, udir, best->file_name,
-                                     r->path_info, NULL), r);
-    return OK;
-}
-
-static int handle_multi(request_rec *r)
-{
-    negotiation_state *neg;
-    var_rec *best, *avail_recs;
-    request_rec *sub_req;
-    int res;
-    int j;
-
-    if (r->finfo.filetype != APR_NOFILE
-        || !(ap_allow_options(r) & OPT_MULTI)) {
-        return DECLINED;
-    }
-
-    neg = parse_accept_headers(r);
-
-    if ((res = read_types_multi(neg))) {
-      return_from_multi:
-        /* free all allocated memory from subrequests */
-        avail_recs = (var_rec *) neg->avail_vars->elts;
-        for (j = 0; j < neg->avail_vars->nelts; ++j) {
-            var_rec *variant = &avail_recs[j];
-            if (variant->sub_req) {
-                ap_destroy_sub_req(variant->sub_req);
-            }
-        }
-        return res;
-    }
-    if (neg->avail_vars->nelts == 0) {
-        return DECLINED;
-    }
-
-    res = do_negotiation(r, neg, &best,
-                         (r->method_number != M_GET) || r->args ||
-                         (r->path_info && *r->path_info));
-    if (res != 0)
-        goto return_from_multi;
-
-    if (!(sub_req = best->sub_req)) {
-        /* We got this out of a map file, so we don't actually have
-         * a sub_req structure yet.  Get one now.
-         */
-
-        sub_req = ap_sub_req_lookup_file(best->file_name, r, NULL);
-        if (sub_req->status != HTTP_OK) {
-            res = sub_req->status;
-            ap_destroy_sub_req(sub_req);
-            goto return_from_multi;
-        }
-    }
-
-    /* now do a "fast redirect" ... promotes the sub_req into the main req */
-    ap_internal_fast_redirect(sub_req, r);
-
-    /* give no advise for time on this subrequest.  Perhaps we
-     * should tally the last mtime amoung all variants, and date
-     * the most recent, but that could confuse the proxies.
-     */
-    r->mtime = 0;
-    
-    /* clean up all but our favorite variant, since that sub_req
-     * is now merged into the main request!
-     */
-    avail_recs = (var_rec *) neg->avail_vars->elts;
-    for (j = 0; j < neg->avail_vars->nelts; ++j) {
-        var_rec *variant = &avail_recs[j];
-        if (variant != best && variant->sub_req) {
-            ap_destroy_sub_req(variant->sub_req);
-        }
-    }
-    return OK;
-}
-
-/********************************************************************** 
- * There is a problem with content-encoding, as some clients send and
- * expect an x- token (e.g. x-gzip) while others expect the plain token
- * (i.e. gzip). To try and deal with this as best as possible we do
- * the following: if the client sent an Accept-Encoding header and it
- * contains a plain token corresponding to the content encoding of the
- * response, then set content encoding using the plain token. Else if
- * the A-E header contains the x- token use the x- token in the C-E
- * header. Else don't do anything.
- *
- * Note that if no A-E header was sent, or it does not contain a token
- * compatible with the final content encoding, then the token in the
- * C-E header will be whatever was specified in the AddEncoding
- * directive.
- */
-static int fix_encoding(request_rec *r)
-{
-    const char *enc = r->content_encoding;
-    char *x_enc = NULL;
-    apr_array_header_t *accept_encodings;
-    accept_rec *accept_recs;
-    int i;
-
-    if (!enc || !*enc) {
-        return DECLINED;
-    }
-
-    if (enc[0] == 'x' && enc[1] == '-') {
-        enc += 2;
-    }
-
-    if ((accept_encodings = do_header_line(r->pool,
-             apr_table_get(r->headers_in, "Accept-Encoding"))) == NULL) {
-        return DECLINED;
-    }
-
-    accept_recs = (accept_rec *) accept_encodings->elts;
-
-    for (i = 0; i < accept_encodings->nelts; ++i) {
-        char *name = accept_recs[i].name;
-
-        if (!strcmp(name, enc)) {
-            r->content_encoding = name;
-            return OK;
-        }
-
-        if (name[0] == 'x' && name[1] == '-' && !strcmp(name+2, enc)) {
-            x_enc = name;
-        }
-    }
-
-    if (x_enc) {
-        r->content_encoding = x_enc;
-        return OK;
-    }
-
-    return DECLINED;
-}
-
-static void register_hooks(apr_pool_t *p)
-{
-    ap_hook_fixups(fix_encoding,NULL,NULL,APR_HOOK_MIDDLE);
-    ap_hook_type_checker(handle_multi,NULL,NULL,APR_HOOK_FIRST);
-    ap_hook_handler(handle_map_file,NULL,NULL,APR_HOOK_MIDDLE);
-}
-
-module AP_MODULE_DECLARE_DATA negotiation_module =
-{
-    STANDARD20_MODULE_STUFF,
-    create_neg_dir_config,      /* dir config creator */
-    merge_neg_dir_configs,      /* dir merger --- default is to override */
-    NULL,                       /* server config */
-    NULL,                       /* merge server config */
-    negotiation_cmds,           /* command apr_table_t */
-    register_hooks              /* register hooks */
-};
diff --git a/modules/mappers/mod_negotiation.dsp b/modules/mappers/mod_negotiation.dsp
deleted file mode 100644
index fd264fb..0000000
--- a/modules/mappers/mod_negotiation.dsp
+++ /dev/null
@@ -1,128 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mod_negotiation" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mod_negotiation - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "mod_negotiation.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "mod_negotiation.mak" CFG="mod_negotiation - Win32 Release"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "mod_negotiation - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mod_negotiation - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "mod_negotiation - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /O2 /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Release\mod_negotiation" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /map /machine:I386 /out:"Release/mod_negotiation.so" /base:@..\..\os\win32\BaseAddr.ref,mod_negotiation
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /map /machine:I386 /out:"Release/mod_negotiation.so" /base:@..\..\os\win32\BaseAddr.ref,mod_negotiation
-
-!ELSEIF  "$(CFG)" == "mod_negotiation - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Debug\mod_negotiation" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /map /debug /machine:I386 /out:"Debug/mod_negotiation.so" /base:@..\..\os\win32\BaseAddr.ref,mod_negotiation
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /map /debug /machine:I386 /out:"Debug/mod_negotiation.so" /base:@..\..\os\win32\BaseAddr.ref,mod_negotiation
-
-!ENDIF 
-
-# Begin Target
-
-# Name "mod_negotiation - Win32 Release"
-# Name "mod_negotiation - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\mod_negotiation.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mod_negotiation.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\build\win32\win32ver.awk
-
-!IF  "$(CFG)" == "mod_negotiation - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_negotiation.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ../../build/win32/win32ver.awk mod_negotiation  "negotiation_module for Apache" ../../include/ap_release.h > .\mod_negotiation.rc
-
-# End Custom Build
-
-!ELSEIF  "$(CFG)" == "mod_negotiation - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_negotiation.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ../../build/win32/win32ver.awk mod_negotiation  "negotiation_module for Apache" ../../include/ap_release.h > .\mod_negotiation.rc
-
-# End Custom Build
-
-!ENDIF 
-
-# End Source File
-# End Target
-# End Project
diff --git a/modules/mappers/mod_negotiation.exp b/modules/mappers/mod_negotiation.exp
deleted file mode 100644
index a7c18da..0000000
--- a/modules/mappers/mod_negotiation.exp
+++ /dev/null
@@ -1 +0,0 @@
-negotiation_module
diff --git a/modules/mappers/mod_rewrite.c b/modules/mappers/mod_rewrite.c
deleted file mode 100644
index b97ddf4..0000000
--- a/modules/mappers/mod_rewrite.c
+++ /dev/null
@@ -1,4210 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-/*                       _                            _ _
-**   _ __ ___   ___   __| |    _ __ _____      ___ __(_) |_ ___
-**  | '_ ` _ \ / _ \ / _` |   | '__/ _ \ \ /\ / / '__| | __/ _ \
-**  | | | | | | (_) | (_| |   | | |  __/\ V  V /| |  | | ||  __/
-**  |_| |_| |_|\___/ \__,_|___|_|  \___| \_/\_/ |_|  |_|\__\___|
-**                       |_____|
-**
-**  URL Rewriting Module
-**
-**  This module uses a rule-based rewriting engine (based on a
-**  regular-expression parser) to rewrite requested URLs on the fly.
-**
-**  It supports an unlimited number of additional rule conditions (which can
-**  operate on a lot of variables, even on HTTP headers) for granular
-**  matching and even external database lookups (either via plain text
-**  tables, DBM hash files or even external processes) for advanced URL
-**  substitution.
-**
-**  It operates on the full URLs (including the PATH_INFO part) both in
-**  per-server context (httpd.conf) and per-dir context (.htaccess) and even
-**  can generate QUERY_STRING parts on result.   The rewriting result finally
-**  can lead to internal subprocessing, external request redirection or even
-**  to internal proxy throughput.
-**
-**  This module was originally written in April 1996 and
-**  gifted exclusively to the The Apache Software Foundation in July 1997 by
-**
-**      Ralf S. Engelschall
-**      rse@engelschall.com
-**      www.engelschall.com
-*/
-
-#include "apr.h"
-#include "apr_strings.h"
-#include "apr_user.h"
-#include "apr_lib.h"
-#include "apr_signal.h"
-#include "apr_global_mutex.h"
-
-#define APR_WANT_STRFUNC
-#define APR_WANT_IOVEC
-#include "apr_want.h"
-
-#if APR_HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#if APR_HAVE_SYS_TYPES_H
-#include <sys/types.h>
-#endif
-
-#include "ap_config.h"
-#include "httpd.h"
-#include "http_config.h"
-#include "http_request.h"
-#include "http_core.h"
-#include "http_log.h"
-#include "http_protocol.h"
-#include "mod_rewrite.h"
-
-#if !defined(OS2) && !defined(WIN32) && !defined(BEOS)  && !defined(NETWARE)
-#include "unixd.h"
-#endif
-
-/*
-** +-------------------------------------------------------+
-** |                                                       |
-** |             static module configuration
-** |                                                       |
-** +-------------------------------------------------------+
-*/
-
-
-/*
-**  Our interface to the Apache server kernel:
-**
-**  o  Runtime logic of a request is as following:
-**       while(request or subrequest)
-**           foreach(stage #0...#9)
-**               foreach(module) (**)
-**                   try to run hook
-**
-**  o  the order of modules at (**) is the inverted order as
-**     given in the "Configuration" file, i.e. the last module
-**     specified is the first one called for each hook!
-**     The core module is always the last!
-**
-**  o  there are two different types of result checking and
-**     continue processing:
-**     for hook #0,#1,#4,#5,#6,#8:
-**         hook run loop stops on first modules which gives
-**         back a result != DECLINED, i.e. it usually returns OK
-**         which says "OK, module has handled this _stage_" and for #1
-**         this have not to mean "Ok, the filename is now valid".
-**     for hook #2,#3,#7,#9:
-**         all hooks are run, independend of result
-**
-**  o  at the last stage, the core module always
-**       - says "HTTP_BAD_REQUEST" if r->filename does not begin with "/"
-**       - prefix URL with document_root or replaced server_root
-**         with document_root and sets r->filename
-**       - always return a "OK" independed if the file really exists
-**         or not!
-*/
-
-    /* The section for the Configure script:
-    * XXX: this needs updating for apache-2.0 configuration method
-     * MODULE-DEFINITION-START
-     * Name: rewrite_module
-     * ConfigStart
-    . ./build/find-dbm-lib
-    if [ "x$found_dbm" = "x1" ]; then
-        echo "      enabling DBM support for mod_rewrite"
-    else
-        echo "      disabling DBM support for mod_rewrite"
-        echo "      (perhaps you need to add -ldbm, -lndbm or -lgdbm to EXTRA_LIBS)"
-        CFLAGS="$CFLAGS -DNO_DBM_REWRITEMAP"
-    fi
-     * ConfigEnd
-     * MODULE-DEFINITION-END
-     */
-
-    /* the module (predeclaration) */
-module AP_MODULE_DECLARE_DATA rewrite_module;
-
-    /* the cache */
-static cache *cachep;
-
-    /* whether proxy module is available or not */
-static int proxy_available;
-
-static const char *lockname;
-static apr_global_mutex_t *rewrite_mapr_lock_acquire = NULL;
-static apr_lock_t *rewrite_log_lock = NULL;
-
-/*
-** +-------------------------------------------------------+
-** |                                                       |
-** |           configuration directive handling
-** |                                                       |
-** +-------------------------------------------------------+
-*/
-
-/*
-**
-**  per-server configuration structure handling
-**
-*/
-
-static void *config_server_create(apr_pool_t *p, server_rec *s)
-{
-    rewrite_server_conf *a;
-
-    a = (rewrite_server_conf *)apr_pcalloc(p, sizeof(rewrite_server_conf));
-
-    a->state           = ENGINE_DISABLED;
-    a->options         = OPTION_NONE;
-    a->rewritelogfile  = NULL;
-    a->rewritelogfp    = NULL;
-    a->rewriteloglevel = 0;
-    a->rewritemaps     = apr_array_make(p, 2, sizeof(rewritemap_entry));
-    a->rewriteconds    = apr_array_make(p, 2, sizeof(rewritecond_entry));
-    a->rewriterules    = apr_array_make(p, 2, sizeof(rewriterule_entry));
-    a->server          = s;
-
-    return (void *)a;
-}
-
-static void *config_server_merge(apr_pool_t *p, void *basev, void *overridesv)
-{
-    rewrite_server_conf *a, *base, *overrides;
-
-    a         = (rewrite_server_conf *)apr_pcalloc(p, sizeof(rewrite_server_conf));
-    base      = (rewrite_server_conf *)basev;
-    overrides = (rewrite_server_conf *)overridesv;
-
-    a->state   = overrides->state;
-    a->options = overrides->options;
-    a->server  = overrides->server;
-
-    if (a->options & OPTION_INHERIT) {
-        /*
-         *  local directives override
-         *  and anything else is inherited
-         */
-        a->rewriteloglevel = overrides->rewriteloglevel != 0 
-                             ? overrides->rewriteloglevel
-                             : base->rewriteloglevel;
-        a->rewritelogfile  = overrides->rewritelogfile != NULL 
-                             ? overrides->rewritelogfile
-                             : base->rewritelogfile;
-        a->rewritelogfp    = overrides->rewritelogfp != NULL 
-                             ? overrides->rewritelogfp 
-                             : base->rewritelogfp;
-        a->rewritemaps     = apr_array_append(p, overrides->rewritemaps,
-                                              base->rewritemaps);
-        a->rewriteconds    = apr_array_append(p, overrides->rewriteconds,
-                                              base->rewriteconds);
-        a->rewriterules    = apr_array_append(p, overrides->rewriterules,
-                                              base->rewriterules);
-    }
-    else {
-        /*
-         *  local directives override
-         *  and anything else gets defaults
-         */
-        a->rewriteloglevel = overrides->rewriteloglevel;
-        a->rewritelogfile  = overrides->rewritelogfile;
-        a->rewritelogfp    = overrides->rewritelogfp;
-        a->rewritemaps     = overrides->rewritemaps;
-        a->rewriteconds    = overrides->rewriteconds;
-        a->rewriterules    = overrides->rewriterules;
-    }
-
-    return (void *)a;
-}
-
-
-/*
-**
-**  per-directory configuration structure handling
-**
-*/
-
-static void *config_perdir_create(apr_pool_t *p, char *path)
-{
-    rewrite_perdir_conf *a;
-
-    a = (rewrite_perdir_conf *)apr_pcalloc(p, sizeof(rewrite_perdir_conf));
-
-    a->state           = ENGINE_DISABLED;
-    a->options         = OPTION_NONE;
-    a->baseurl         = NULL;
-    a->rewriteconds    = apr_array_make(p, 2, sizeof(rewritecond_entry));
-    a->rewriterules    = apr_array_make(p, 2, sizeof(rewriterule_entry));
-
-    if (path == NULL) {
-        a->directory = NULL;
-    }
-    else {
-        /* make sure it has a trailing slash */
-        if (path[strlen(path)-1] == '/') {
-            a->directory = apr_pstrdup(p, path);
-        }
-        else {
-            a->directory = apr_pstrcat(p, path, "/", NULL);
-        }
-    }
-
-    return (void *)a;
-}
-
-static void *config_perdir_merge(apr_pool_t *p, void *basev, void *overridesv)
-{
-    rewrite_perdir_conf *a, *base, *overrides;
-
-    a         = (rewrite_perdir_conf *)apr_pcalloc(p,
-                                                  sizeof(rewrite_perdir_conf));
-    base      = (rewrite_perdir_conf *)basev;
-    overrides = (rewrite_perdir_conf *)overridesv;
-
-    a->state     = overrides->state;
-    a->options   = overrides->options;
-    a->directory = overrides->directory;
-    a->baseurl   = overrides->baseurl;
-
-    if (a->options & OPTION_INHERIT) {
-        a->rewriteconds = apr_array_append(p, overrides->rewriteconds,
-                                           base->rewriteconds);
-        a->rewriterules = apr_array_append(p, overrides->rewriterules,
-                                           base->rewriterules);
-    }
-    else {
-        a->rewriteconds = overrides->rewriteconds;
-        a->rewriterules = overrides->rewriterules;
-    }
-
-    return (void *)a;
-}
-
-
-/*
-**
-**  the configuration commands
-**
-*/
-
-static const char *cmd_rewriteengine(cmd_parms *cmd,
-                                     void *in_dconf, int flag)
-{
-    rewrite_perdir_conf *dconf = in_dconf;
-    rewrite_server_conf *sconf;
-
-    sconf = ap_get_module_config(cmd->server->module_config, &rewrite_module);
-
-    if (cmd->path == NULL) { /* is server command */
-        sconf->state = (flag ? ENGINE_ENABLED : ENGINE_DISABLED);
-    }
-    else                   /* is per-directory command */ {
-        dconf->state = (flag ? ENGINE_ENABLED : ENGINE_DISABLED);
-    }
-
-    return NULL;
-}
-
-static const char *cmd_rewriteoptions(cmd_parms *cmd,
-                                      void *in_dconf, const char *option)
-{
-    rewrite_perdir_conf *dconf = in_dconf;
-    rewrite_server_conf *sconf;
-    const char *err;
-
-    sconf = ap_get_module_config(cmd->server->module_config, &rewrite_module);
-
-    if (cmd->path == NULL) { /* is server command */
-        err = cmd_rewriteoptions_setoption(cmd->pool,
-                                           &(sconf->options), option);
-    }
-    else {                 /* is per-directory command */
-        err = cmd_rewriteoptions_setoption(cmd->pool,
-                                           &(dconf->options), option);
-    }
-
-    return err;
-}
-
-static const char *cmd_rewriteoptions_setoption(apr_pool_t *p, int *options,
-                                                const char *name)
-{
-    if (strcasecmp(name, "inherit") == 0) {
-        *options |= OPTION_INHERIT;
-    }
-    else {
-        return apr_pstrcat(p, "RewriteOptions: unknown option '",
-                          name, "'", NULL);
-    }
-    return NULL;
-}
-
-static const char *cmd_rewritelog(cmd_parms *cmd, void *dconf, const char *a1)
-{
-    rewrite_server_conf *sconf;
-
-    sconf = ap_get_module_config(cmd->server->module_config, &rewrite_module);
-
-    sconf->rewritelogfile = a1;
-
-    return NULL;
-}
-
-static const char *cmd_rewriteloglevel(cmd_parms *cmd, void *dconf, const char *a1)
-{
-    rewrite_server_conf *sconf;
-
-    sconf = ap_get_module_config(cmd->server->module_config, &rewrite_module);
-
-    sconf->rewriteloglevel = atoi(a1);
-
-    return NULL;
-}
-
-static const char *cmd_rewritemap(cmd_parms *cmd, void *dconf, const char *a1,
-                                  const char *a2)
-{
-    rewrite_server_conf *sconf;
-    rewritemap_entry *newmap;
-    apr_finfo_t st;
-
-    sconf = ap_get_module_config(cmd->server->module_config, &rewrite_module);
-
-    newmap = apr_array_push(sconf->rewritemaps);
-
-    newmap->name = a1;
-    newmap->func = NULL;
-    if (strncmp(a2, "txt:", 4) == 0) {
-        newmap->type      = MAPTYPE_TXT;
-        newmap->datafile  = a2+4;
-        newmap->checkfile = a2+4;
-    }
-    else if (strncmp(a2, "rnd:", 4) == 0) {
-        newmap->type      = MAPTYPE_RND;
-        newmap->datafile  = a2+4;
-        newmap->checkfile = a2+4;
-    }
-    else if (strncmp(a2, "dbm:", 4) == 0) {
-#ifndef NO_DBM_REWRITEMAP
-        newmap->type      = MAPTYPE_DBM;
-        newmap->datafile  = a2+4;
-        newmap->checkfile = apr_pstrcat(cmd->pool, a2+4, NDBM_FILE_SUFFIX, NULL);
-#else
-        return apr_pstrdup(cmd->pool, "RewriteMap: cannot use NDBM mapfile, "
-                          "because no NDBM support is compiled in");
-#endif
-    }
-    else if (strncmp(a2, "prg:", 4) == 0) {
-        newmap->type = MAPTYPE_PRG;
-        newmap->datafile = a2+4;
-        newmap->checkfile = a2+4;
-    }
-    else if (strncmp(a2, "int:", 4) == 0) {
-        newmap->type      = MAPTYPE_INT;
-        newmap->datafile  = NULL;
-        newmap->checkfile = NULL;
-        if (strcmp(a2+4, "tolower") == 0) {
-            newmap->func = rewrite_mapfunc_tolower;
-        }
-        else if (strcmp(a2+4, "toupper") == 0) {
-            newmap->func = rewrite_mapfunc_toupper;
-        }
-        else if (strcmp(a2+4, "escape") == 0) {
-            newmap->func = rewrite_mapfunc_escape;
-        }
-        else if (strcmp(a2+4, "unescape") == 0) {
-            newmap->func = rewrite_mapfunc_unescape;
-        }
-        else if (sconf->state == ENGINE_ENABLED) {
-            return apr_pstrcat(cmd->pool, "RewriteMap: internal map not found:",
-                              a2+4, NULL);
-        }
-    }
-    else {
-        newmap->type      = MAPTYPE_TXT;
-        newmap->datafile  = a2;
-        newmap->checkfile = a2;
-    }
-    newmap->fpin  = NULL;
-    newmap->fpout = NULL;
-
-    if (newmap->checkfile && (sconf->state == ENGINE_ENABLED)
-        && (apr_stat(&st, newmap->checkfile, APR_FINFO_MIN, 
-                     cmd->pool) != APR_SUCCESS)) {
-        return apr_pstrcat(cmd->pool,
-                          "RewriteMap: map file or program not found:",
-                          newmap->checkfile, NULL);
-    }
-
-    return NULL;
-}
-
-static const char *cmd_rewritelock(cmd_parms *cmd, void *dconf, const char *a1)
-{
-    const char *error;
-
-    if ((error = ap_check_cmd_context(cmd, GLOBAL_ONLY)) != NULL)
-        return error;
-
-    /* fixup the path, especially for rewritelock_remove() */
-    lockname = ap_server_root_relative(cmd->pool, a1);
-
-    if (!lockname) {
-        return apr_pstrcat(cmd->pool, "Invalid RewriteLock path ", a1);
-    }
-
-    return NULL;
-}
-
-static const char *cmd_rewritebase(cmd_parms *cmd, void *in_dconf,
-                                   const char *a1)
-{
-    rewrite_perdir_conf *dconf = in_dconf;
-
-    if (cmd->path == NULL || dconf == NULL) {
-        return "RewriteBase: only valid in per-directory config files";
-    }
-    if (a1[0] == '\0') {
-        return "RewriteBase: empty URL not allowed";
-    }
-    if (a1[0] != '/') {
-        return "RewriteBase: argument is not a valid URL";
-    }
-
-    dconf->baseurl = a1;
-
-    return NULL;
-}
-
-static const char *cmd_rewritecond(cmd_parms *cmd, void *in_dconf,
-                                   const char *in_str)
-{
-    rewrite_perdir_conf *dconf = in_dconf;
-    char *str = apr_pstrdup(cmd->pool, in_str);
-    rewrite_server_conf *sconf;
-    rewritecond_entry *newcond;
-    regex_t *regexp;
-    char *a1;
-    char *a2;
-    char *a3;
-    char *cp;
-    const char *err;
-    int rc;
-
-    sconf = ap_get_module_config(cmd->server->module_config, &rewrite_module);
-
-    /*  make a new entry in the internal temporary rewrite rule list */
-    if (cmd->path == NULL) {   /* is server command */
-        newcond = apr_array_push(sconf->rewriteconds);
-    }
-    else {                     /* is per-directory command */
-        newcond = apr_array_push(dconf->rewriteconds);
-    }
-
-    /*  parse the argument line ourself */
-    if (parseargline(str, &a1, &a2, &a3)) {
-        return apr_pstrcat(cmd->pool, "RewriteCond: bad argument line '", str,
-                          "'", NULL);
-    }
-
-    /*  arg1: the input string */
-    newcond->input = apr_pstrdup(cmd->pool, a1);
-
-    /* arg3: optional flags field
-       (this have to be first parsed, because we need to
-        know if the regex should be compiled with ICASE!) */
-    newcond->flags = CONDFLAG_NONE;
-    if (a3 != NULL) {
-        if ((err = cmd_rewritecond_parseflagfield(cmd->pool, newcond,
-                                                  a3)) != NULL) {
-            return err;
-        }
-    }
-
-    /*  arg2: the pattern
-        try to compile the regexp to test if is ok */
-    cp = a2;
-    if (cp[0] == '!') {
-        newcond->flags |= CONDFLAG_NOTMATCH;
-        cp++;
-    }
-
-    /* now be careful: Under the POSIX regex library
-       we can compile the pattern for case insensitive matching,
-       under the old V8 library we have to do it self via a hack */
-    if (newcond->flags & CONDFLAG_NOCASE) {
-        rc = ((regexp = ap_pregcomp(cmd->pool, cp, REG_EXTENDED|REG_ICASE))
-              == NULL);
-    }
-    else {
-        rc = ((regexp = ap_pregcomp(cmd->pool, cp, REG_EXTENDED)) == NULL);
-    }
-    if (rc) {
-        return apr_pstrcat(cmd->pool,
-                          "RewriteCond: cannot compile regular expression '",
-                          a2, "'", NULL);
-    }
-
-    newcond->pattern = apr_pstrdup(cmd->pool, cp);
-    newcond->regexp  = regexp;
-
-    return NULL;
-}
-
-static const char *cmd_rewritecond_parseflagfield(apr_pool_t *p,
-                                                  rewritecond_entry *cfg,
-                                                  char *str)
-{
-    char *cp;
-    char *cp1;
-    char *cp2;
-    char *cp3;
-    char *key;
-    char *val;
-    const char *err;
-
-    if (str[0] != '[' || str[strlen(str)-1] != ']') {
-        return "RewriteCond: bad flag delimiters";
-    }
-
-    cp = str+1;
-    str[strlen(str)-1] = ','; /* for simpler parsing */
-    for ( ; *cp != '\0'; ) {
-        /* skip whitespaces */
-        for ( ; (*cp == ' ' || *cp == '\t') && *cp != '\0'; cp++)
-            ;
-        if (*cp == '\0') {
-            break;
-        }
-        cp1 = cp;
-        if ((cp2 = strchr(cp, ',')) != NULL) {
-            cp = cp2+1;
-            for ( ; (*(cp2-1) == ' ' || *(cp2-1) == '\t'); cp2--)
-                ;
-            *cp2 = '\0';
-            if ((cp3 = strchr(cp1, '=')) != NULL) {
-                *cp3 = '\0';
-                key = cp1;
-                val = cp3+1;
-            }
-            else {
-                key = cp1;
-                val = "";
-            }
-            if ((err = cmd_rewritecond_setflag(p, cfg, key, val)) != NULL) {
-                return err;
-            }
-        }
-        else {
-            break;
-        }
-    }
-
-    return NULL;
-}
-
-static const char *cmd_rewritecond_setflag(apr_pool_t *p, rewritecond_entry *cfg,
-                                           char *key, char *val)
-{
-    if (   strcasecmp(key, "nocase") == 0
-        || strcasecmp(key, "NC") == 0    ) {
-        cfg->flags |= CONDFLAG_NOCASE;
-    }
-    else if (   strcasecmp(key, "ornext") == 0
-             || strcasecmp(key, "OR") == 0    ) {
-        cfg->flags |= CONDFLAG_ORNEXT;
-    }
-    else {
-        return apr_pstrcat(p, "RewriteCond: unknown flag '", key, "'", NULL);
-    }
-    return NULL;
-}
-
-static const char *cmd_rewriterule(cmd_parms *cmd, void *in_dconf,
-                                   const char *in_str)
-{
-    rewrite_perdir_conf *dconf = in_dconf;
-    char *str = apr_pstrdup(cmd->pool, in_str);
-    rewrite_server_conf *sconf;
-    rewriterule_entry *newrule;
-    regex_t *regexp;
-    char *a1;
-    char *a2;
-    char *a3;
-    char *cp;
-    const char *err;
-    int mode;
-
-    sconf = ap_get_module_config(cmd->server->module_config, &rewrite_module);
-
-    /*  make a new entry in the internal rewrite rule list */
-    if (cmd->path == NULL) {   /* is server command */
-        newrule = apr_array_push(sconf->rewriterules);
-    }
-    else {                     /* is per-directory command */
-        newrule = apr_array_push(dconf->rewriterules);
-    }
-
-    /*  parse the argument line ourself */
-    if (parseargline(str, &a1, &a2, &a3)) {
-        return apr_pstrcat(cmd->pool, "RewriteRule: bad argument line '", str,
-                          "'", NULL);
-    }
-
-    /* arg3: optional flags field */
-    newrule->forced_mimetype     = NULL;
-    newrule->forced_responsecode = HTTP_MOVED_TEMPORARILY;
-    newrule->flags  = RULEFLAG_NONE;
-    newrule->env[0] = NULL;
-    newrule->skip   = 0;
-    if (a3 != NULL) {
-        if ((err = cmd_rewriterule_parseflagfield(cmd->pool, newrule,
-                                                  a3)) != NULL) {
-            return err;
-        }
-    }
-
-    /*  arg1: the pattern
-     *  try to compile the regexp to test if is ok
-     */
-    cp = a1;
-    if (cp[0] == '!') {
-        newrule->flags |= RULEFLAG_NOTMATCH;
-        cp++;
-    }
-    mode = REG_EXTENDED;
-    if (newrule->flags & RULEFLAG_NOCASE) {
-        mode |= REG_ICASE;
-    }
-    if ((regexp = ap_pregcomp(cmd->pool, cp, mode)) == NULL) {
-        return apr_pstrcat(cmd->pool,
-                          "RewriteRule: cannot compile regular expression '",
-                          a1, "'", NULL);
-    }
-    newrule->pattern = apr_pstrdup(cmd->pool, cp);
-    newrule->regexp  = regexp;
-
-    /*  arg2: the output string
-     *  replace the $<N> by \<n> which is needed by the currently
-     *  used Regular Expression library
-     *
-     * TODO: Is this still required for PCRE?  If not, does it *work* with PCRE?
-     */
-    newrule->output = apr_pstrdup(cmd->pool, a2);
-
-    /* now, if the server or per-dir config holds an
-     * array of RewriteCond entries, we take it for us
-     * and clear the array
-     */
-    if (cmd->path == NULL) {  /* is server command */
-        newrule->rewriteconds   = sconf->rewriteconds;
-        sconf->rewriteconds = apr_array_make(cmd->pool, 2,
-                                            sizeof(rewritecond_entry));
-    }
-    else {                    /* is per-directory command */
-        newrule->rewriteconds   = dconf->rewriteconds;
-        dconf->rewriteconds = apr_array_make(cmd->pool, 2,
-                                            sizeof(rewritecond_entry));
-    }
-
-    return NULL;
-}
-
-static const char *cmd_rewriterule_parseflagfield(apr_pool_t *p,
-                                                  rewriterule_entry *cfg,
-                                                  char *str)
-{
-    char *cp;
-    char *cp1;
-    char *cp2;
-    char *cp3;
-    char *key;
-    char *val;
-    const char *err;
-
-    if (str[0] != '[' || str[strlen(str)-1] != ']') {
-        return "RewriteRule: bad flag delimiters";
-    }
-
-    cp = str+1;
-    str[strlen(str)-1] = ','; /* for simpler parsing */
-    for ( ; *cp != '\0'; ) {
-        /* skip whitespaces */
-        for ( ; (*cp == ' ' || *cp == '\t') && *cp != '\0'; cp++)
-            ;
-        if (*cp == '\0') {
-            break;
-        }
-        cp1 = cp;
-        if ((cp2 = strchr(cp, ',')) != NULL) {
-            cp = cp2+1;
-            for ( ; (*(cp2-1) == ' ' || *(cp2-1) == '\t'); cp2--)
-                ;
-            *cp2 = '\0';
-            if ((cp3 = strchr(cp1, '=')) != NULL) {
-                *cp3 = '\0';
-                key = cp1;
-                val = cp3+1;
-            }
-            else {
-                key = cp1;
-                val = "";
-            }
-            if ((err = cmd_rewriterule_setflag(p, cfg, key, val)) != NULL) {
-                return err;
-            }
-        }
-        else {
-            break;
-        }
-    }
-
-    return NULL;
-}
-
-static const char *cmd_rewriterule_setflag(apr_pool_t *p, rewriterule_entry *cfg,
-                                           char *key, char *val)
-{
-    int status = 0;
-    int i;
-
-    if (   strcasecmp(key, "redirect") == 0
-        || strcasecmp(key, "R") == 0       ) {
-        cfg->flags |= RULEFLAG_FORCEREDIRECT;
-        if (strlen(val) > 0) {
-            if (strcasecmp(val, "permanent") == 0) {
-                status = HTTP_MOVED_PERMANENTLY;
-            }
-            else if (strcasecmp(val, "temp") == 0) {
-                status = HTTP_MOVED_TEMPORARILY;
-            }
-            else if (strcasecmp(val, "seeother") == 0) {
-                status = HTTP_SEE_OTHER;
-            }
-            else if (apr_isdigit(*val)) {
-                status = atoi(val);
-            }
-            if (!ap_is_HTTP_REDIRECT(status)) {
-                return "RewriteRule: invalid HTTP response code "
-                       "for flag 'R'";
-            }
-            cfg->forced_responsecode = status;
-        }
-    }
-    else if (   strcasecmp(key, "noescape") == 0
-        || strcasecmp(key, "NE") == 0       ) {
-        cfg->flags |= RULEFLAG_NOESCAPE;
-    }
-    else if (   strcasecmp(key, "last") == 0
-             || strcasecmp(key, "L") == 0   ) {
-        cfg->flags |= RULEFLAG_LASTRULE;
-    }
-    else if (   strcasecmp(key, "next") == 0
-             || strcasecmp(key, "N") == 0   ) {
-        cfg->flags |= RULEFLAG_NEWROUND;
-    }
-    else if (   strcasecmp(key, "chain") == 0
-             || strcasecmp(key, "C") == 0    ) {
-        cfg->flags |= RULEFLAG_CHAIN;
-    }
-    else if (   strcasecmp(key, "type") == 0
-             || strcasecmp(key, "T") == 0   ) {
-        cfg->forced_mimetype = apr_pstrdup(p, val);
-        ap_str_tolower(cfg->forced_mimetype);
-    }
-    else if (   strcasecmp(key, "env") == 0
-             || strcasecmp(key, "E") == 0   ) {
-        for (i = 0; (cfg->env[i] != NULL) && (i < MAX_ENV_FLAGS); i++)
-            ;
-        if (i < MAX_ENV_FLAGS) {
-            cfg->env[i] = apr_pstrdup(p, val);
-            cfg->env[i+1] = NULL;
-        }
-        else {
-            return "RewriteRule: too many environment flags 'E'";
-        }
-    }
-    else if (   strcasecmp(key, "nosubreq") == 0
-             || strcasecmp(key, "NS") == 0      ) {
-        cfg->flags |= RULEFLAG_IGNOREONSUBREQ;
-    }
-    else if (   strcasecmp(key, "proxy") == 0
-             || strcasecmp(key, "P") == 0      ) {
-        cfg->flags |= RULEFLAG_PROXY;
-    }
-    else if (   strcasecmp(key, "passthrough") == 0
-             || strcasecmp(key, "PT") == 0      ) {
-        cfg->flags |= RULEFLAG_PASSTHROUGH;
-    }
-    else if (   strcasecmp(key, "skip") == 0
-             || strcasecmp(key, "S") == 0   ) {
-        cfg->skip = atoi(val);
-    }
-    else if (   strcasecmp(key, "forbidden") == 0
-             || strcasecmp(key, "F") == 0   ) {
-        cfg->flags |= RULEFLAG_FORBIDDEN;
-    }
-    else if (   strcasecmp(key, "gone") == 0
-             || strcasecmp(key, "G") == 0   ) {
-        cfg->flags |= RULEFLAG_GONE;
-    }
-    else if (   strcasecmp(key, "qsappend") == 0
-             || strcasecmp(key, "QSA") == 0   ) {
-        cfg->flags |= RULEFLAG_QSAPPEND;
-    }
-    else if (   strcasecmp(key, "nocase") == 0
-             || strcasecmp(key, "NC") == 0    ) {
-        cfg->flags |= RULEFLAG_NOCASE;
-    }
-    else {
-        return apr_pstrcat(p, "RewriteRule: unknown flag '", key, "'", NULL);
-    }
-    return NULL;
-}
-
-
-/*
-**
-**  Global Module Initialization
-**  [called from read_config() after all
-**  config commands were already called]
-**
-*/
-
-static int init_module(apr_pool_t *p,
-                        apr_pool_t *plog,
-                        apr_pool_t *ptemp,
-                        server_rec *s)
-{
-    apr_status_t rv;
-    void *data;
-    int first_time = 0;
-    const char *userdata_key = "rewrite_init_module";
-
-    apr_pool_userdata_get(&data, userdata_key, s->process->pool);
-    if (!data) {
-        first_time = 1;
-        apr_pool_userdata_set((const void *)1, userdata_key,
-                         apr_pool_cleanup_null, s->process->pool);
-    }
-
-    /* check if proxy module is available */
-    proxy_available = (ap_find_linked_module("mod_proxy.c") != NULL);
-
-    /* create the rewriting lockfiles in the parent */
-    if ((rv = apr_lock_create(&rewrite_log_lock, APR_MUTEX, APR_LOCKALL,
-                              APR_LOCK_DEFAULT, NULL, p)) != APR_SUCCESS) {
-        ap_log_error(APLOG_MARK, APLOG_CRIT, rv, s,
-                     "mod_rewrite: could not create rewrite_log_lock");
-        return HTTP_INTERNAL_SERVER_ERROR;
-    }
-
-    rewritelock_create(s, p);
-    apr_pool_cleanup_register(p, (void *)s, rewritelock_remove, apr_pool_cleanup_null);
-
-    /* step through the servers and
-     * - open each rewriting logfile
-     * - open the RewriteMap prg:xxx programs
-     */
-    for (; s; s = s->next) {
-        open_rewritelog(s, p);
-        if (!first_time)
-           run_rewritemap_programs(s, p);
-    }
-    return OK;
-}
-
-
-/*
-**
-**  Per-Child Module Initialization
-**  [called after a child process is spawned]
-**
-*/
-
-static void init_child(apr_pool_t *p, server_rec *s)
-{
-    apr_status_t rv;
-
-    if (lockname != NULL && *(lockname) != '\0')
-    {
-        rv = apr_global_mutex_child_init(&rewrite_mapr_lock_acquire,
-                                       lockname, p);
-        if (rv != APR_SUCCESS) {
-            ap_log_error(APLOG_MARK, APLOG_CRIT, rv, s,
-                         "mod_rewrite: could not init rewrite_mapr_lock_acquire "
-                         "in child");
-        }
-    }
-
-    /* create the lookup cache */
-    cachep = init_cache(p);
-}
-
-
-/*
-** +-------------------------------------------------------+
-** |                                                       |
-** |                     runtime hooks
-** |                                                       |
-** +-------------------------------------------------------+
-*/
-
-/*
-**
-**  URI-to-filename hook
-**
-**  [used for the rewriting engine triggered by
-**  the per-server 'RewriteRule' directives]
-**
-*/
-
-static int hook_uri2file(request_rec *r)
-{
-    rewrite_server_conf *conf;
-    const char *var;
-    const char *thisserver;
-    char *thisport;
-    const char *thisurl;
-    char buf[512];
-    char docroot[512];
-    char *cp, *cp2;
-    const char *ccp;
-    apr_finfo_t finfo;
-    unsigned int port;
-    int rulestatus;
-    int n;
-    int l;
-
-    /*
-     *  retrieve the config structures
-     */
-    conf = ap_get_module_config(r->server->module_config, &rewrite_module);
-
-    /*
-     *  only do something under runtime if the engine is really enabled,
-     *  else return immediately!
-     */
-    if (conf->state == ENGINE_DISABLED) {
-        return DECLINED;
-    }
-
-    /*
-     *  check for the ugly API case of a virtual host section where no
-     *  mod_rewrite directives exists. In this situation we became no chance
-     *  by the API to setup our default per-server config so we have to
-     *  on-the-fly assume we have the default config. But because the default
-     *  config has a disabled rewriting engine we are lucky because can
-     *  just stop operating now.
-     */
-    if (conf->server != r->server) {
-        return DECLINED;
-    }
-
-    /*
-     *  add the SCRIPT_URL variable to the env. this is a bit complicated
-     *  due to the fact that apache uses subrequests and internal redirects
-     */
-
-    if (r->main == NULL) {
-         var = apr_pstrcat(r->pool, "REDIRECT_", ENVVAR_SCRIPT_URL, NULL);
-         var = apr_table_get(r->subprocess_env, var);
-         if (var == NULL) {
-             apr_table_setn(r->subprocess_env, ENVVAR_SCRIPT_URL, r->uri);
-         }
-         else {
-             apr_table_setn(r->subprocess_env, ENVVAR_SCRIPT_URL, var);
-         }
-    }
-    else {
-         var = apr_table_get(r->main->subprocess_env, ENVVAR_SCRIPT_URL);
-         apr_table_setn(r->subprocess_env, ENVVAR_SCRIPT_URL, var);
-    }
-
-    /*
-     *  create the SCRIPT_URI variable for the env
-     */
-
-    /* add the canonical URI of this URL */
-    thisserver = ap_get_server_name(r);
-    port = ap_get_server_port(r);
-    if (ap_is_default_port(port, r)) {
-        thisport = "";
-    }
-    else {
-        apr_snprintf(buf, sizeof(buf), ":%u", port);
-        thisport = buf;
-    }
-    thisurl = apr_table_get(r->subprocess_env, ENVVAR_SCRIPT_URL);
-
-    /* set the variable */
-    var = apr_pstrcat(r->pool, ap_http_method(r), "://", thisserver, thisport,
-                     thisurl, NULL);
-    apr_table_setn(r->subprocess_env, ENVVAR_SCRIPT_URI, var);
-
-    /* if filename was not initially set,
-     * we start with the requested URI
-     */
-    if (r->filename == NULL) {
-        r->filename = apr_pstrdup(r->pool, r->uri);
-        rewritelog(r, 2, "init rewrite engine with requested uri %s",
-                   r->filename);
-    }
-
-    /*
-     *  now apply the rules ...
-     */
-    rulestatus = apply_rewrite_list(r, conf->rewriterules, NULL);
-    if (rulestatus) {
-
-        if (strlen(r->filename) > 6 &&
-            strncmp(r->filename, "proxy:", 6) == 0) {
-            /* it should be go on as an internal proxy request */
-
-            /* check if the proxy module is enabled, so
-             * we can actually use it!
-             */
-            if (!proxy_available) {
-                ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                             "attempt to make remote request from mod_rewrite "
-                             "without proxy enabled: %s", r->filename);
-                return HTTP_FORBIDDEN;
-            }
-
-            /* make sure the QUERY_STRING and
-             * PATH_INFO parts get incorporated
-             */
-            if (r->path_info != NULL) {
-                r->filename = apr_pstrcat(r->pool, r->filename,
-                                         r->path_info, NULL);
-            }
-            if (r->args != NULL &&
-                r->uri == r->unparsed_uri) {
-                /* see proxy_http:proxy_http_canon() */
-                r->filename = apr_pstrcat(r->pool, r->filename,
-                                         "?", r->args, NULL);
-            }
-
-            /* now make sure the request gets handled by the proxy handler */
-            r->proxyreq = PROXYREQ_REVERSE;
-            r->handler  = "proxy-server";
-
-            rewritelog(r, 1, "go-ahead with proxy request %s [OK]",
-                       r->filename);
-            return OK;
-        }
-        else if (is_absolute_uri(r->filename)) {
-            /* it was finally rewritten to a remote URL */
-
-            /* skip 'scheme:' */
-            for (cp = r->filename; *cp != ':' && *cp != '\0'; cp++)
-                ;
-            /* skip '://' */
-            cp += 3;
-            /* skip host part */
-            for ( ; *cp != '/' && *cp != '\0'; cp++)
-                ;
-            if (*cp != '\0') {
-                if (rulestatus != ACTION_NOESCAPE) {
-                    rewritelog(r, 1, "escaping %s for redirect", r->filename);
-                    cp2 = ap_escape_uri(r->pool, cp);
-                }
-                else {
-                    cp2 = apr_pstrdup(r->pool, cp);
-                }
-                *cp = '\0';
-                r->filename = apr_pstrcat(r->pool, r->filename, cp2, NULL);
-            }
-
-            /* append the QUERY_STRING part */
-            if (r->args != NULL) {
-                char *args;
-                if (rulestatus == ACTION_NOESCAPE) {
-                    args = r->args;
-                }
-                else {
-                    args = ap_escape_uri(r->pool, r->args);
-                }
-                r->filename = apr_pstrcat(r->pool, r->filename, "?", 
-                                          args, NULL);
-            }
-
-            /* determine HTTP redirect response code */
-            if (ap_is_HTTP_REDIRECT(r->status)) {
-                n = r->status;
-                r->status = HTTP_OK; /* make Apache kernel happy */
-            }
-            else {
-                n = HTTP_MOVED_TEMPORARILY;
-            }
-
-            /* now do the redirection */
-            apr_table_setn(r->headers_out, "Location", r->filename);
-            rewritelog(r, 1, "redirect to %s [REDIRECT/%d]", r->filename, n);
-            return n;
-        }
-        else if (strlen(r->filename) > 10 &&
-                 strncmp(r->filename, "forbidden:", 10) == 0) {
-            /* This URLs is forced to be forbidden for the requester */
-            return HTTP_FORBIDDEN;
-        }
-        else if (strlen(r->filename) > 5 &&
-                 strncmp(r->filename, "gone:", 5) == 0) {
-            /* This URLs is forced to be gone */
-            return HTTP_GONE;
-        }
-        else if (strlen(r->filename) > 12 &&
-                 strncmp(r->filename, "passthrough:", 12) == 0) {
-            /*
-             * Hack because of underpowered API: passing the current
-             * rewritten filename through to other URL-to-filename handlers
-             * just as it were the requested URL. This is to enable
-             * post-processing by mod_alias, etc.  which always act on
-             * r->uri! The difference here is: We do not try to
-             * add the document root
-             */
-            r->uri = apr_pstrdup(r->pool, r->filename+12);
-            return DECLINED;
-        }
-        else {
-            /* it was finally rewritten to a local path */
-
-            /* expand "/~user" prefix */
-#if APR_HAS_USER
-            r->filename = expand_tildepaths(r, r->filename);
-#endif
-            rewritelog(r, 2, "local path result: %s", r->filename);
-
-            /* the filename must be an absolute path! */
-            if (!ap_os_is_path_absolute(r->pool, r->filename)) {
-                return HTTP_BAD_REQUEST;
-            }
-
-            /* if there is no valid prefix, we have
-             * to emulate the translator from the core and
-             * prefix the filename with document_root
-             *
-             * NOTICE:
-             * We cannot leave out the prefix_stat because
-             * - when we always prefix with document_root
-             *   then no absolute path can be created, e.g. via
-             *   emulating a ScriptAlias directive, etc.
-             * - when we always NOT prefix with document_root
-             *   then the files under document_root have to
-             *   be references directly and document_root
-             *   gets never used and will be a dummy parameter -
-             *   this is also bad
-             *
-             * BUT:
-             * Under real Unix systems this is no problem,
-             * because we only do stat() on the first directory
-             * and this gets cached by the kernel for along time!
-             */
-            n = prefix_stat(r->filename, &finfo);
-            if (n == 0) {
-                if ((ccp = ap_document_root(r)) != NULL) {
-                    l = apr_cpystrn(docroot, ccp, sizeof(docroot)) - docroot;
-
-                    /* always NOT have a trailing slash */
-                    if (docroot[l-1] == '/') {
-                        docroot[l-1] = '\0';
-                    }
-                    if (r->server->path
-                        && !strncmp(r->filename, r->server->path,
-                                    r->server->pathlen)) {
-                        r->filename = apr_pstrcat(r->pool, docroot,
-                                                 (r->filename +
-                                                  r->server->pathlen), NULL);
-                    }
-                    else {
-                        r->filename = apr_pstrcat(r->pool, docroot, 
-                                                 r->filename, NULL);
-                    }
-                    rewritelog(r, 2, "prefixed with document_root to %s",
-                               r->filename);
-                }
-            }
-
-            rewritelog(r, 1, "go-ahead with %s [OK]", r->filename);
-            return OK;
-        }
-    }
-    else {
-        rewritelog(r, 1, "pass through %s", r->filename);
-        return DECLINED;
-    }
-}
-
-
-/*
-**
-**  MIME-type hook
-**
-**  [used to support the forced-MIME-type feature]
-**
-*/
-
-static int hook_mimetype(request_rec *r)
-{
-    const char *t;
-
-    /* now check if we have to force a MIME-type */
-    t = apr_table_get(r->notes, REWRITE_FORCED_MIMETYPE_NOTEVAR);
-    if (t == NULL) {
-        return DECLINED;
-    }
-    else {
-        rewritelog(r, 1, "force filename %s to have MIME-type '%s'",
-                   r->filename, t);
-        r->content_type = t;
-        return OK;
-    }
-}
-
-
-/*
-**
-**  Fixup hook
-**
-**  [used for the rewriting engine triggered by
-**  the per-directory 'RewriteRule' directives]
-**
-*/
-
-static int hook_fixup(request_rec *r)
-{
-    rewrite_perdir_conf *dconf;
-    char *cp;
-    char *cp2;
-    const char *ccp;
-    char *prefix;
-    int l;
-    int rulestatus;
-    int n;
-    char *ofilename;
-
-    dconf = (rewrite_perdir_conf *)ap_get_module_config(r->per_dir_config,
-                                                        &rewrite_module);
-
-    /* if there is no per-dir config we return immediately */
-    if (dconf == NULL) {
-        return DECLINED;
-    }
-
-    /* we shouldn't do anything in subrequests */
-    if (r->main != NULL) {
-        return DECLINED;
-    }
-
-    /* if there are no real (i.e. no RewriteRule directives!)
-       per-dir config of us, we return also immediately */
-    if (dconf->directory == NULL) {
-        return DECLINED;
-    }
-
-    /*
-     *  only do something under runtime if the engine is really enabled,
-     *  for this directory, else return immediately!
-     */
-    if (!(ap_allow_options(r) & (OPT_SYM_LINKS | OPT_SYM_OWNER))) {
-        /* FollowSymLinks is mandatory! */
-        ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                     "Options FollowSymLinks or SymLinksIfOwnerMatch is off "
-                     "which implies that RewriteRule directive is forbidden: "
-                     "%s", r->filename);
-        return HTTP_FORBIDDEN;
-    }
-    else {
-        /* FollowSymLinks is given, but the user can
-         * still turn off the rewriting engine
-         */
-        if (dconf->state == ENGINE_DISABLED) {
-            return DECLINED;
-        }
-    }
-
-    /*
-     *  remember the current filename before rewriting for later check
-     *  to prevent deadlooping because of internal redirects
-     *  on final URL/filename which can be equal to the inital one.
-     */
-    ofilename = r->filename;
-
-    /*
-     *  now apply the rules ...
-     */
-    rulestatus = apply_rewrite_list(r, dconf->rewriterules, dconf->directory);
-    if (rulestatus) {
-
-        if (strlen(r->filename) > 6 &&
-            strncmp(r->filename, "proxy:", 6) == 0) {
-            /* it should go on as an internal proxy request */
-
-            /* make sure the QUERY_STRING and
-             * PATH_INFO parts get incorporated
-             * (r->path_info was already appended by the
-             * rewriting engine because of the per-dir context!)
-             */
-            if (r->args != NULL) {
-                r->filename = apr_pstrcat(r->pool, r->filename,
-                                          "?", r->args, NULL);
-            }
-
-            /* now make sure the request gets handled by the proxy handler */
-            r->proxyreq = PROXYREQ_REVERSE;
-            r->handler  = "proxy-server";
-
-            rewritelog(r, 1, "[per-dir %s] go-ahead with proxy request "
-                       "%s [OK]", dconf->directory, r->filename);
-            return OK;
-        }
-        else if (is_absolute_uri(r->filename)) {
-            /* it was finally rewritten to a remote URL */
-
-            /* because we are in a per-dir context
-             * first try to replace the directory with its base-URL
-             * if there is a base-URL available
-             */
-            if (dconf->baseurl != NULL) {
-                /* skip 'scheme:' */
-                for (cp = r->filename; *cp != ':' && *cp != '\0'; cp++)
-                    ;
-                /* skip '://' */
-                cp += 3;
-                if ((cp = strchr(cp, '/')) != NULL) {
-                    rewritelog(r, 2,
-                               "[per-dir %s] trying to replace "
-                               "prefix %s with %s",
-                               dconf->directory, dconf->directory,
-                               dconf->baseurl);
-                    cp2 = subst_prefix_path(r, cp, dconf->directory,
-                                            dconf->baseurl);
-                    if (strcmp(cp2, cp) != 0) {
-                        *cp = '\0';
-                        r->filename = apr_pstrcat(r->pool, r->filename,
-                                                 cp2, NULL);
-                    }
-                }
-            }
-
-            /* now prepare the redirect... */
-
-            /* skip 'scheme:' */
-            for (cp = r->filename; *cp != ':' && *cp != '\0'; cp++)
-                ;
-            /* skip '://' */
-            cp += 3;
-            /* skip host part */
-            for ( ; *cp != '/' && *cp != '\0'; cp++)
-                ;
-            if (*cp != '\0') {
-                if (rulestatus != ACTION_NOESCAPE) {
-                    rewritelog(r, 1, "[per-dir %s] escaping %s for redirect",
-                               dconf->directory, r->filename);
-                    cp2 = ap_escape_uri(r->pool, cp);
-                }
-                else {
-                    cp2 = apr_pstrdup(r->pool, cp);
-                }
-                *cp = '\0';
-                r->filename = apr_pstrcat(r->pool, r->filename, cp2, NULL);
-            }
-
-            /* append the QUERY_STRING part */
-            if (r->args != NULL) {
-                char *args;
-                if (rulestatus == ACTION_NOESCAPE) {
-                    args = r->args;
-                }
-                else {
-                    args = ap_escape_uri(r->pool, r->args);
-                }
-                r->filename = apr_pstrcat(r->pool, r->filename, "?", 
-                                          args, NULL);
-            }
-
-            /* determine HTTP redirect response code */
-            if (ap_is_HTTP_REDIRECT(r->status)) {
-                n = r->status;
-                r->status = HTTP_OK; /* make Apache kernel happy */
-            }
-            else {
-                n = HTTP_MOVED_TEMPORARILY;
-            }
-
-            /* now do the redirection */
-            apr_table_setn(r->headers_out, "Location", r->filename);
-            rewritelog(r, 1, "[per-dir %s] redirect to %s [REDIRECT/%d]",
-                       dconf->directory, r->filename, n);
-            return n;
-        }
-        else if (strlen(r->filename) > 10 &&
-                 strncmp(r->filename, "forbidden:", 10) == 0) {
-            /* This URL is forced to be forbidden for the requester */
-            return HTTP_FORBIDDEN;
-        }
-        else if (strlen(r->filename) > 5 &&
-                 strncmp(r->filename, "gone:", 5) == 0) {
-            /* This URL is forced to be gone */
-            return HTTP_GONE;
-        }
-        else {
-            /* it was finally rewritten to a local path */
-
-            /* if someone used the PASSTHROUGH flag in per-dir
-             * context we just ignore it. It is only useful
-             * in per-server context
-             */
-            if (strlen(r->filename) > 12 &&
-                strncmp(r->filename, "passthrough:", 12) == 0) {
-                r->filename = apr_pstrdup(r->pool, r->filename+12);
-            }
-
-            /* the filename must be an absolute path! */
-            if (!ap_os_is_path_absolute(r->pool, r->filename)) {
-                return HTTP_BAD_REQUEST;
-            }
-
-            /* Check for deadlooping:
-             * At this point we KNOW that at least one rewriting
-             * rule was applied, but when the resulting URL is
-             * the same as the initial URL, we are not allowed to
-             * use the following internal redirection stuff because
-             * this would lead to a deadloop.
-             */
-            if (strcmp(r->filename, ofilename) == 0) {
-                rewritelog(r, 1, "[per-dir %s] initial URL equal rewritten "
-                           "URL: %s [IGNORING REWRITE]",
-                           dconf->directory, r->filename);
-                return OK;
-            }
-
-            /* if there is a valid base-URL then substitute
-             * the per-dir prefix with this base-URL if the
-             * current filename still is inside this per-dir
-             * context. If not then treat the result as a
-             * plain URL
-             */
-            if (dconf->baseurl != NULL) {
-                rewritelog(r, 2,
-                           "[per-dir %s] trying to replace prefix %s with %s",
-                           dconf->directory, dconf->directory, dconf->baseurl);
-                r->filename = subst_prefix_path(r, r->filename,
-                                                dconf->directory,
-                                                dconf->baseurl);
-            }
-            else {
-                /* if no explicit base-URL exists we assume
-                 * that the directory prefix is also a valid URL
-                 * for this webserver and only try to remove the
-                 * document_root if it is prefix
-                 */
-                if ((ccp = ap_document_root(r)) != NULL) {
-                    prefix = apr_pstrdup(r->pool, ccp);
-                    /* always NOT have a trailing slash */
-                    l = strlen(prefix);
-                    if (prefix[l-1] == '/') {
-                        prefix[l-1] = '\0';
-                        l--;
-                    }
-                    if (strncmp(r->filename, prefix, l) == 0) {
-                        rewritelog(r, 2,
-                                   "[per-dir %s] strip document_root "
-                                   "prefix: %s -> %s",
-                                   dconf->directory, r->filename,
-                                   r->filename+l);
-                        r->filename = apr_pstrdup(r->pool, r->filename+l);
-                    }
-                }
-            }
-
-            /* now initiate the internal redirect */
-            rewritelog(r, 1, "[per-dir %s] internal redirect with %s "
-                       "[INTERNAL REDIRECT]", dconf->directory, r->filename);
-            r->filename = apr_pstrcat(r->pool, "redirect:", r->filename, NULL);
-            r->handler = "redirect-handler";
-            return OK;
-        }
-    }
-    else {
-        rewritelog(r, 1, "[per-dir %s] pass through %s", 
-                   dconf->directory, r->filename);
-        return DECLINED;
-    }
-}
-
-
-/*
-**
-**  Content-Handlers
-**
-**  [used for redirect support]
-**
-*/
-
-static int handler_redirect(request_rec *r)
-{
-    if (strcmp(r->handler, "redirect-handler")) {
-        return DECLINED;
-    }
-
-    /* just make sure that we are really meant! */
-    if (strncmp(r->filename, "redirect:", 9) != 0) {
-        return DECLINED;
-    }
-
-    /* now do the internal redirect */
-    ap_internal_redirect(apr_pstrcat(r->pool, r->filename+9,
-                                    r->args ? "?" : NULL, r->args, NULL), r);
-
-    /* and return gracefully */
-    return OK;
-}
-
-
-/*
-** +-------------------------------------------------------+
-** |                                                       |
-** |                  the rewriting engine
-** |                                                       |
-** +-------------------------------------------------------+
-*/
-
-/*
- *  Apply a complete rule set,
- *  i.e. a list of rewrite rules
- */
-static int apply_rewrite_list(request_rec *r, apr_array_header_t *rewriterules,
-                              char *perdir)
-{
-    rewriterule_entry *entries;
-    rewriterule_entry *p;
-    int i;
-    int changed;
-    int rc;
-    int s;
-
-    /*
-     *  Iterate over all existing rules
-     */
-    entries = (rewriterule_entry *)rewriterules->elts;
-    changed = 0;
-    loop:
-    for (i = 0; i < rewriterules->nelts; i++) {
-        p = &entries[i];
-
-        /*
-         *  Ignore this rule on subrequests if we are explicitly
-         *  asked to do so or this is a proxy-throughput or a
-         *  forced redirect rule.
-         */
-        if (r->main != NULL &&
-            (p->flags & RULEFLAG_IGNOREONSUBREQ ||
-             p->flags & RULEFLAG_PROXY          ||
-             p->flags & RULEFLAG_FORCEREDIRECT    )) {
-            continue;
-        }
-
-        /*
-         *  Apply the current rule.
-         */
-        rc = apply_rewrite_rule(r, p, perdir);
-        if (rc) {
-            /*
-             *  Indicate a change if this was not a match-only rule.
-             */
-            if (rc != 2) {
-                changed = ((p->flags & RULEFLAG_NOESCAPE)
-                           ? ACTION_NOESCAPE : ACTION_NORMAL);
-            }
-
-            /*
-             *  Pass-Through Feature (`RewriteRule .. .. [PT]'):
-             *  Because the Apache 1.x API is very limited we
-             *  need this hack to pass the rewritten URL to other
-             *  modules like mod_alias, mod_userdir, etc.
-             */
-            if (p->flags & RULEFLAG_PASSTHROUGH) {
-                rewritelog(r, 2, "forcing '%s' to get passed through "
-                           "to next API URI-to-filename handler", r->filename);
-                r->filename = apr_pstrcat(r->pool, "passthrough:",
-                                         r->filename, NULL);
-                changed = ACTION_NORMAL;
-                break;
-            }
-
-            /*
-             *  Rule has the "forbidden" flag set which means that
-             *  we stop processing and indicate this to the caller.
-             */
-            if (p->flags & RULEFLAG_FORBIDDEN) {
-                rewritelog(r, 2, "forcing '%s' to be forbidden", r->filename);
-                r->filename = apr_pstrcat(r->pool, "forbidden:",
-                                         r->filename, NULL);
-                changed = ACTION_NORMAL;
-                break;
-            }
-
-            /*
-             *  Rule has the "gone" flag set which means that
-             *  we stop processing and indicate this to the caller.
-             */
-            if (p->flags & RULEFLAG_GONE) {
-                rewritelog(r, 2, "forcing '%s' to be gone", r->filename);
-                r->filename = apr_pstrcat(r->pool, "gone:", r->filename, NULL);
-                changed = ACTION_NORMAL;
-                break;
-            }
-
-            /*
-             *  Stop processing also on proxy pass-through and
-             *  last-rule and new-round flags.
-             */
-            if (p->flags & RULEFLAG_PROXY) {
-                break;
-            }
-            if (p->flags & RULEFLAG_LASTRULE) {
-                break;
-            }
-
-            /*
-             *  On "new-round" flag we just start from the top of
-             *  the rewriting ruleset again.
-             */
-            if (p->flags & RULEFLAG_NEWROUND) {
-                goto loop;
-            }
-
-            /*
-             *  If we are forced to skip N next rules, do it now.
-             */
-            if (p->skip > 0) {
-                s = p->skip;
-                while (   i < rewriterules->nelts
-                       && s > 0) {
-                    i++;
-                    p = &entries[i];
-                    s--;
-                }
-            }
-        }
-        else {
-            /*
-             *  If current rule is chained with next rule(s),
-             *  skip all this next rule(s)
-             */
-            while (   i < rewriterules->nelts
-                   && p->flags & RULEFLAG_CHAIN) {
-                i++;
-                p = &entries[i];
-            }
-        }
-    }
-    return changed;
-}
-
-/*
- *  Apply a single(!) rewrite rule
- */
-static int apply_rewrite_rule(request_rec *r, rewriterule_entry *p,
-                              char *perdir)
-{
-    char *uri;
-    char *output;
-    const char *vary;
-    char newuri[MAX_STRING_LEN];
-    regex_t *regexp;
-    regmatch_t regmatch[MAX_NMATCH];
-    backrefinfo *briRR = NULL;
-    backrefinfo *briRC = NULL;
-    int prefixstrip;
-    int failed;
-    apr_array_header_t *rewriteconds;
-    rewritecond_entry *conds;
-    rewritecond_entry *c;
-    int i;
-    int rc;
-
-    /*
-     *  Initialisation
-     */
-    uri     = r->filename;
-    regexp  = p->regexp;
-    output  = p->output;
-
-    /*
-     *  Add (perhaps splitted away) PATH_INFO postfix to URL to
-     *  make sure we really match against the complete URL.
-     */
-    if (perdir != NULL && r->path_info != NULL && r->path_info[0] != '\0') {
-        rewritelog(r, 3, "[per-dir %s] add path info postfix: %s -> %s%s",
-                   perdir, uri, uri, r->path_info);
-        uri = apr_pstrcat(r->pool, uri, r->path_info, NULL);
-    }
-
-    /*
-     *  On per-directory context (.htaccess) strip the location
-     *  prefix from the URL to make sure patterns apply only to
-     *  the local part.  Additionally indicate this special
-     *  threatment in the logfile.
-     */
-    prefixstrip = 0;
-    if (perdir != NULL) {
-        if (   strlen(uri) >= strlen(perdir)
-            && strncmp(uri, perdir, strlen(perdir)) == 0) {
-            rewritelog(r, 3, "[per-dir %s] strip per-dir prefix: %s -> %s",
-                       perdir, uri, uri+strlen(perdir));
-            uri = uri+strlen(perdir);
-            prefixstrip = 1;
-        }
-    }
-
-    /*
-     *  Try to match the URI against the RewriteRule pattern
-     *  and exit immeddiately if it didn't apply.
-     */
-    if (perdir == NULL) {
-        rewritelog(r, 3, "applying pattern '%s' to uri '%s'",
-                   p->pattern, uri);
-    }
-    else {
-        rewritelog(r, 3, "[per-dir %s] applying pattern '%s' to uri '%s'",
-                   perdir, p->pattern, uri);
-    }
-    rc = (ap_regexec(regexp, uri, regexp->re_nsub+1, regmatch, 0) == 0);
-    if (! (( rc && !(p->flags & RULEFLAG_NOTMATCH)) ||
-           (!rc &&  (p->flags & RULEFLAG_NOTMATCH))   ) ) {
-        return 0;
-    }
-
-    /*
-     *  Else create the RewriteRule `regsubinfo' structure which
-     *  holds the substitution information.
-     */
-    briRR = (backrefinfo *)apr_palloc(r->pool, sizeof(backrefinfo));
-    if (!rc && (p->flags & RULEFLAG_NOTMATCH)) {
-        /*  empty info on negative patterns  */
-        briRR->source = "";
-        briRR->nsub   = 0;
-    }
-    else {
-        briRR->source = apr_pstrdup(r->pool, uri);
-        briRR->nsub   = regexp->re_nsub;
-        memcpy((void *)(briRR->regmatch), (void *)(regmatch),
-               sizeof(regmatch));
-    }
-
-    /*
-     *  Initiallally create the RewriteCond backrefinfo with
-     *  empty backrefinfo, i.e. not subst parts
-     *  (this one is adjusted inside apply_rewrite_cond() later!!)
-     */
-    briRC = (backrefinfo *)apr_pcalloc(r->pool, sizeof(backrefinfo));
-    briRC->source = "";
-    briRC->nsub   = 0;
-
-    /*
-     *  Ok, we already know the pattern has matched, but we now
-     *  additionally have to check for all existing preconditions
-     *  (RewriteCond) which have to be also true. We do this at
-     *  this very late stage to avoid unnessesary checks which
-     *  would slow down the rewriting engine!!
-     */
-    rewriteconds = p->rewriteconds;
-    conds = (rewritecond_entry *)rewriteconds->elts;
-    failed = 0;
-    for (i = 0; i < rewriteconds->nelts; i++) {
-        c = &conds[i];
-        rc = apply_rewrite_cond(r, c, perdir, briRR, briRC);
-        if (c->flags & CONDFLAG_ORNEXT) {
-            /*
-             *  The "OR" case
-             */
-            if (rc == 0) {
-                /*  One condition is false, but another can be
-                 *  still true, so we have to continue...
-                 */
-                apr_table_unset(r->notes, VARY_KEY_THIS);
-                continue;
-            }
-            else {
-                /*  One true condition is enough in "or" case, so
-                 *  skip the other conditions which are "ornext"
-                 *  chained
-                 */
-                while (   i < rewriteconds->nelts
-                       && c->flags & CONDFLAG_ORNEXT) {
-                    i++;
-                    c = &conds[i];
-                }
-                continue;
-            }
-        }
-        else {
-            /*
-             *  The "AND" case, i.e. no "or" flag,
-             *  so a single failure means total failure.
-             */
-            if (rc == 0) {
-                failed = 1;
-                break;
-            }
-        }
-        vary = apr_table_get(r->notes, VARY_KEY_THIS);
-        if (vary != NULL) {
-            apr_table_merge(r->notes, VARY_KEY, vary);
-            apr_table_unset(r->notes, VARY_KEY_THIS);
-        }
-    }
-    /*  if any condition fails the complete rule fails  */
-    if (failed) {
-        apr_table_unset(r->notes, VARY_KEY);
-        apr_table_unset(r->notes, VARY_KEY_THIS);
-        return 0;
-    }
-
-    /*
-     * Regardless of what we do next, we've found a match.  Check to see
-     * if any of the request header fields were involved, and add them
-     * to the Vary field of the response.
-     */
-    if ((vary = apr_table_get(r->notes, VARY_KEY)) != NULL) {
-        apr_table_merge(r->headers_out, "Vary", vary);
-        apr_table_unset(r->notes, VARY_KEY);
-    }
-
-    /*
-     *  If this is a pure matching rule (`RewriteRule <pat> -')
-     *  we stop processing and return immediately. The only thing
-     *  we have not to forget are the environment variables
-     *  (`RewriteRule <pat> - [E=...]')
-     */
-    if (strcmp(output, "-") == 0) {
-        do_expand_env(r, p->env, briRR, briRC);
-        if (p->forced_mimetype != NULL) {
-            if (perdir == NULL) {
-                /* In the per-server context we can force the MIME-type
-                 * the correct way by notifying our MIME-type hook handler
-                 * to do the job when the MIME-type API stage is reached.
-                 */
-                rewritelog(r, 2, "remember %s to have MIME-type '%s'",
-                           r->filename, p->forced_mimetype);
-                apr_table_setn(r->notes, REWRITE_FORCED_MIMETYPE_NOTEVAR,
-                              p->forced_mimetype);
-            }
-            else {
-                /* In per-directory context we operate in the Fixup API hook
-                 * which is after the MIME-type hook, so our MIME-type handler
-                 * has no chance to set r->content_type. And because we are
-                 * in the situation where no substitution takes place no
-                 * sub-request will happen (which could solve the
-                 * restriction). As a workaround we do it ourself now
-                 * immediately although this is not strictly API-conforming.
-                 * But it's the only chance we have...
-                 */
-                rewritelog(r, 1, "[per-dir %s] force %s to have MIME-type "
-                           "'%s'", perdir, r->filename, p->forced_mimetype);
-                r->content_type = p->forced_mimetype;
-            }
-        }
-        return 2;
-    }
-
-    /*
-     *  Ok, now we finally know all patterns have matched and
-     *  that there is something to replace, so we create the
-     *  substitution URL string in `newuri'.
-     */
-    do_expand(r, output, newuri, sizeof(newuri), briRR, briRC);
-    if (perdir == NULL) {
-        rewritelog(r, 2, "rewrite %s -> %s", uri, newuri);
-    }
-    else {
-        rewritelog(r, 2, "[per-dir %s] rewrite %s -> %s", perdir, uri, newuri);
-    }
-
-    /*
-     *  Additionally do expansion for the environment variable
-     *  strings (`RewriteRule .. .. [E=<string>]').
-     */
-    do_expand_env(r, p->env, briRR, briRC);
-
-    /*
-     *  Now replace API's knowledge of the current URI:
-     *  Replace r->filename with the new URI string and split out
-     *  an on-the-fly generated QUERY_STRING part into r->args
-     */
-    r->filename = apr_pstrdup(r->pool, newuri);
-    splitout_queryargs(r, p->flags & RULEFLAG_QSAPPEND);
-
-    /*
-     *   Again add the previously stripped per-directory location
-     *   prefix if the new URI is not a new one for this
-     *   location, i.e. if it's not an absolute path nor
-     *   a fully qualified URL scheme.
-     */
-    if (prefixstrip && !ap_os_is_path_absolute(r->pool, r->filename)
-                    && !is_absolute_uri(r->filename)) {
-        rewritelog(r, 3, "[per-dir %s] add per-dir prefix: %s -> %s%s",
-                   perdir, r->filename, perdir, r->filename);
-        r->filename = apr_pstrcat(r->pool, perdir, r->filename, NULL);
-    }
-
-    /*
-     *  If this rule is forced for proxy throughput
-     *  (`RewriteRule ... ... [P]') then emulate mod_proxy's
-     *  URL-to-filename handler to be sure mod_proxy is triggered
-     *  for this URL later in the Apache API. But make sure it is
-     *  a fully-qualified URL. (If not it is qualified with
-     *  ourself).
-     */
-    if (p->flags & RULEFLAG_PROXY) {
-        fully_qualify_uri(r);
-        if (perdir == NULL) {
-            rewritelog(r, 2, "forcing proxy-throughput with %s", r->filename);
-        }
-        else {
-            rewritelog(r, 2, "[per-dir %s] forcing proxy-throughput with %s",
-                       perdir, r->filename);
-        }
-        r->filename = apr_pstrcat(r->pool, "proxy:", r->filename, NULL);
-        return 1;
-    }
-
-    /*
-     *  If this rule is explicitly forced for HTTP redirection
-     *  (`RewriteRule .. .. [R]') then force an external HTTP
-     *  redirect. But make sure it is a fully-qualified URL. (If
-     *  not it is qualified with ourself).
-     */
-    if (p->flags & RULEFLAG_FORCEREDIRECT) {
-        fully_qualify_uri(r);
-        if (perdir == NULL) {
-            rewritelog(r, 2,
-                       "explicitly forcing redirect with %s", r->filename);
-        }
-        else {
-            rewritelog(r, 2,
-                       "[per-dir %s] explicitly forcing redirect with %s",
-                       perdir, r->filename);
-        }
-        r->status = p->forced_responsecode;
-        return 1;
-    }
-
-    /*
-     *  Special Rewriting Feature: Self-Reduction
-     *  We reduce the URL by stripping a possible
-     *  http[s]://<ourhost>[:<port>] prefix, i.e. a prefix which
-     *  corresponds to ourself. This is to simplify rewrite maps
-     *  and to avoid recursion, etc. When this prefix is not a
-     *  coincidence then the user has to use [R] explicitly (see
-     *  above).
-     */
-    reduce_uri(r);
-
-    /*
-     *  If this rule is still implicitly forced for HTTP
-     *  redirection (`RewriteRule .. <scheme>://...') then
-     *  directly force an external HTTP redirect.
-     */
-    if (is_absolute_uri(r->filename)) {
-        if (perdir == NULL) {
-            rewritelog(r, 2,
-                       "implicitly forcing redirect (rc=%d) with %s",
-                       p->forced_responsecode, r->filename);
-        }
-        else {
-            rewritelog(r, 2, "[per-dir %s] implicitly forcing redirect "
-                       "(rc=%d) with %s", perdir, p->forced_responsecode,
-                       r->filename);
-        }
-        r->status = p->forced_responsecode;
-        return 1;
-    }
-
-    /*
-     *  Now we are sure it is not a fully qualified URL.  But
-     *  there is still one special case left: A local rewrite in
-     *  per-directory context, i.e. a substitution URL which is not
-     *  an absolute path. Here we add again the initially
-     *  stripped per-directory prefix.
-     */
-    if (prefixstrip && !ap_os_is_path_absolute(r->pool, r->filename)) {
-        rewritelog(r, 3, "[per-dir %s] add per-dir prefix: %s -> %s%s",
-                   perdir, r->filename, perdir, r->filename);
-        r->filename = apr_pstrcat(r->pool, perdir, r->filename, NULL);
-    }
-
-    /*
-     *  Finally we had to remember if a MIME-type should be
-     *  forced for this URL (`RewriteRule .. .. [T=<type>]')
-     *  Later in the API processing phase this is forced by our
-     *  MIME API-hook function. This time it's no problem even for
-     *  the per-directory context (where the MIME-type hook was
-     *  already processed) because a sub-request happens ;-)
-     */
-    if (p->forced_mimetype != NULL) {
-        apr_table_setn(r->notes, REWRITE_FORCED_MIMETYPE_NOTEVAR,
-                      p->forced_mimetype);
-        if (perdir == NULL) {
-            rewritelog(r, 2, "remember %s to have MIME-type '%s'",
-                       r->filename, p->forced_mimetype);
-        }
-        else {
-            rewritelog(r, 2,
-                       "[per-dir %s] remember %s to have MIME-type '%s'",
-                       perdir, r->filename, p->forced_mimetype);
-        }
-    }
-
-    /*
-     *  Puuhhhhhhhh... WHAT COMPLICATED STUFF ;_)
-     *  But now we're done for this particular rule.
-     */
-    return 1;
-}
-
-static int apply_rewrite_cond(request_rec *r, rewritecond_entry *p,
-                              char *perdir, backrefinfo *briRR,
-                              backrefinfo *briRC)
-{
-    char input[MAX_STRING_LEN];
-    apr_finfo_t sb;
-    request_rec *rsub;
-    regmatch_t regmatch[MAX_NMATCH];
-    int rc;
-
-    /*
-     *   Construct the string we match against
-     */
-
-    do_expand(r, p->input, input, sizeof(input), briRR, briRC);
-
-    /*
-     *   Apply the patterns
-     */
-
-    rc = 0;
-    if (strcmp(p->pattern, "-f") == 0) {
-        if (apr_stat(&sb, input, APR_FINFO_MIN, r->pool) == APR_SUCCESS) {
-            if (sb.filetype == APR_REG) {
-                rc = 1;
-            }
-        }
-    }
-    else if (strcmp(p->pattern, "-s") == 0) {
-        if (apr_stat(&sb, input, APR_FINFO_MIN, r->pool) == APR_SUCCESS) {
-            if ((sb.filetype == APR_REG) && sb.size > 0) {
-                rc = 1;
-            }
-        }
-    }
-    else if (strcmp(p->pattern, "-l") == 0) {
-#if !defined(OS2)
-        if (apr_lstat(&sb, input, APR_FINFO_MIN, r->pool) == APR_SUCCESS) {
-            if (sb.filetype == APR_LNK) {
-                rc = 1;
-            }
-        }
-#endif
-    }
-    else if (strcmp(p->pattern, "-d") == 0) {
-        if (apr_stat(&sb, input, APR_FINFO_MIN, r->pool) == APR_SUCCESS) {
-            if (sb.filetype == APR_DIR) {
-                rc = 1;
-            }
-        }
-    }
-    else if (strcmp(p->pattern, "-U") == 0) {
-        /* avoid infinite subrequest recursion */
-        if (strlen(input) > 0 && subreq_ok(r)) {
-
-            /* run a URI-based subrequest */
-            rsub = ap_sub_req_lookup_uri(input, r, NULL);
-
-            /* URI exists for any result up to 3xx, redirects allowed */
-            if (rsub->status < 400)
-                rc = 1;
-
-            /* log it */
-            rewritelog(r, 5, "RewriteCond URI (-U) check: "
-                       "path=%s -> status=%d", input, rsub->status);
-
-            /* cleanup by destroying the subrequest */
-            ap_destroy_sub_req(rsub);
-        }
-    }
-    else if (strcmp(p->pattern, "-F") == 0) {
-        /* avoid infinite subrequest recursion */
-        if (strlen(input) > 0 && subreq_ok(r)) {
-
-            /* process a file-based subrequest:
-             * this differs from -U in that no path translation is done.
-             */
-            rsub = ap_sub_req_lookup_file(input, r, NULL);
-
-            /* file exists for any result up to 2xx, no redirects */
-            if (rsub->status < 300 &&
-                /* double-check that file exists since default result is 200 */
-                apr_stat(&sb, rsub->filename, APR_FINFO_MIN, 
-                         r->pool) == APR_SUCCESS) {
-                rc = 1;
-            }
-
-            /* log it */
-            rewritelog(r, 5, "RewriteCond file (-F) check: path=%s "
-                       "-> file=%s status=%d", input, rsub->filename, 
-                       rsub->status);
-
-            /* cleanup by destroying the subrequest */
-            ap_destroy_sub_req(rsub);
-        }
-    }
-    else if (strlen(p->pattern) > 1 && *(p->pattern) == '>') {
-        rc = (compare_lexicography(input, p->pattern+1) == 1 ? 1 : 0);
-    }
-    else if (strlen(p->pattern) > 1 && *(p->pattern) == '<') {
-        rc = (compare_lexicography(input, p->pattern+1) == -1 ? 1 : 0);
-    }
-    else if (strlen(p->pattern) > 1 && *(p->pattern) == '=') {
-        if (strcmp(p->pattern+1, "\"\"") == 0) {
-            rc = (*input == '\0');
-        }
-        else {
-            rc = (strcmp(input, p->pattern+1) == 0 ? 1 : 0);
-        }
-    }
-    else {
-        /* it is really a regexp pattern, so apply it */
-        rc = (ap_regexec(p->regexp, input,
-                         p->regexp->re_nsub+1, regmatch,0) == 0);
-
-        /* if it isn't a negated pattern and really matched
-           we update the passed-through regex subst info structure */
-        if (rc && !(p->flags & CONDFLAG_NOTMATCH)) {
-            briRC->source = apr_pstrdup(r->pool, input);
-            briRC->nsub   = p->regexp->re_nsub;
-            memcpy((void *)(briRC->regmatch), (void *)(regmatch),
-                   sizeof(regmatch));
-        }
-    }
-
-    /* if this is a non-matching regexp, just negate the result */
-    if (p->flags & CONDFLAG_NOTMATCH) {
-        rc = !rc;
-    }
-
-    rewritelog(r, 4, "RewriteCond: input='%s' pattern='%s%s' => %s",
-               input, (p->flags & CONDFLAG_NOTMATCH ? "!" : ""),
-               p->pattern, rc ? "matched" : "not-matched");
-
-    /* end just return the result */
-    return rc;
-}
-
-
-/*
-** +-------------------------------------------------------+
-** |                                                       |
-** |              URL transformation functions
-** |                                                       |
-** +-------------------------------------------------------+
-*/
-
-
-/*
-**
-**  perform all the expansions on the input string
-**  leaving the result in the supplied buffer
-**
-*/
-
-static void do_expand(request_rec *r, char *input, char *buffer, int nbuf,
-                      backrefinfo *briRR, backrefinfo *briRC)
-{
-    char *inp, *outp;
-    size_t span, space;
-
-    /*
-     * for security reasons this expansion must be performed in a
-     * single pass, otherwise an attacker can arrange for the result
-     * of an earlier expansion to include expansion specifiers that
-     * are interpreted by a later expansion, producing results that
-     * were not intended by the administrator.
-     */
-
-    inp = input;
-    outp = buffer;
-    space = nbuf - 1; /* room for '\0' */
-
-    for (;;) {
-        span = strcspn(inp, "\\$%");
-        if (span > space) {
-            span = space;
-        }
-        memcpy(outp, inp, span);
-        inp += span;
-        outp += span;
-        space -= span;
-        if (space == 0 || *inp == '\0') {
-            break;
-        }
-        /* now we have a '\', '$', or '%' */
-        if (inp[0] == '\\') {
-            if (inp[1] != '\0') {
-                inp++;
-                goto skip;
-            }
-        }
-        else if (inp[1] == '{') {
-            char *endp;
-            endp = find_closing_bracket(inp+2, '{', '}');
-            if (endp == NULL) {
-                goto skip;
-            }
-            /*
-            * These lookups may be recursive in a very convoluted
-            * fashion -- see the LA-U and LA-F variable expansion
-            * prefixes -- so we copy lookup keys to a separate buffer
-            * rather than adding zero bytes in order to use them in
-            * place.
-            */
-            if (inp[0] == '$') {
-                /* ${...} map lookup expansion */
-                /*
-                * To make rewrite maps useful the lookup key and
-                * default values must be expanded, so we make
-                * recursive calls to do the work. For security
-                * reasons we must never expand a string that includes
-                * verbatim data from the network. The recursion here
-                * isn't a problem because the result of expansion is
-                * only passed to lookup_map() so it cannot be
-                * re-expanded, only re-looked-up. Another way of
-                * looking at it is that the recursion is entirely
-                * driven by the syntax of the nested curly brackets.
-                */
-                char *map, *key, *dflt, *result;
-                char xkey[MAX_STRING_LEN];
-                char xdflt[MAX_STRING_LEN];
-                key = find_char_in_brackets(inp+2, ':', '{', '}');
-                if (key == NULL) {
-                    goto skip;
-                }
-                map  = apr_pstrndup(r->pool, inp+2, key-inp-2);
-                dflt = find_char_in_brackets(key+1, '|', '{', '}');
-                if (dflt == NULL) {
-                    key  = apr_pstrndup(r->pool, key+1, endp-key-1);
-                    dflt = "";
-                }
-                else {
-                    key  = apr_pstrndup(r->pool, key+1, dflt-key-1);
-                    dflt = apr_pstrndup(r->pool, dflt+1, endp-dflt-1);
-                }
-                do_expand(r, key,  xkey,  sizeof(xkey),  briRR, briRC);
-                result = lookup_map(r, map, xkey);
-                if (result) {
-                    span = apr_cpystrn(outp, result, space) - outp;
-                }
-                else {
-                    do_expand(r, dflt, xdflt, sizeof(xdflt), briRR, briRC);
-                    span = apr_cpystrn(outp, xdflt, space) - outp;
-                }
-            }
-            else if (inp[0] == '%') {
-                /* %{...} variable lookup expansion */
-                char *var;
-                var  = apr_pstrndup(r->pool, inp+2, endp-inp-2);
-                span = apr_cpystrn(outp, lookup_variable(r, var), space) - outp;
-            }
-            else {
-                span = 0;
-            }
-            inp = endp+1;
-            outp += span;
-            space -= span;
-            continue;
-        }
-        else if (apr_isdigit(inp[1])) {
-            int n = inp[1] - '0';
-            backrefinfo *bri = NULL;
-            if (inp[0] == '$') {
-                /* $N RewriteRule regexp backref expansion */
-                bri = briRR;
-            }
-            else if (inp[0] == '%') {
-                /* %N RewriteCond regexp backref expansion */
-                bri = briRC;
-            }
-            /* see ap_pregsub() in src/main/util.c */
-            if (bri && n <= bri->nsub
-                && bri->regmatch[n].rm_eo > bri->regmatch[n].rm_so) {
-                span = bri->regmatch[n].rm_eo - bri->regmatch[n].rm_so;
-                if (span > space) {
-                    span = space;
-                }
-                memcpy(outp, bri->source + bri->regmatch[n].rm_so, span);
-                outp += span;
-                space -= span;
-            }
-            inp += 2;
-            continue;
-        }
-        skip:
-        *outp++ = *inp++;
-        space--;
-    }
-    *outp++ = '\0';
-}
-
-
-/*
-**
-**  perform all the expansions on the environment variables
-**
-*/
-
-static void do_expand_env(request_rec *r, char *env[],
-                          backrefinfo *briRR, backrefinfo *briRC)
-{
-    int i;
-    char buf[MAX_STRING_LEN];
-
-    for (i = 0; env[i] != NULL; i++) {
-    do_expand(r, env[i], buf, sizeof(buf), briRR, briRC);
-    add_env_variable(r, buf);
-    }
-}
-
-
-/*
-**
-**  split out a QUERY_STRING part from
-**  the current URI string
-**
-*/
-
-static void splitout_queryargs(request_rec *r, int qsappend)
-{
-    char *q;
-    char *olduri;
-
-    q = strchr(r->filename, '?');
-    if (q != NULL) {
-        olduri = apr_pstrdup(r->pool, r->filename);
-        *q++ = '\0';
-        if (qsappend) {
-            r->args = apr_pstrcat(r->pool, q, "&", r->args, NULL);
-        }
-        else {
-            r->args = apr_pstrdup(r->pool, q);
-        }
-        if (strlen(r->args) == 0) {
-            r->args = NULL;
-            rewritelog(r, 3, "split uri=%s -> uri=%s, args=<none>", olduri,
-                       r->filename);
-        }
-        else {
-            if (r->args[strlen(r->args)-1] == '&') {
-                r->args[strlen(r->args)-1] = '\0';
-            }
-            rewritelog(r, 3, "split uri=%s -> uri=%s, args=%s", olduri,
-                       r->filename, r->args);
-        }
-    }
-    return;
-}
-
-
-/*
-**
-**  strip 'http[s]://ourhost/' from URI
-**
-*/
-
-static void reduce_uri(request_rec *r)
-{
-    char *cp;
-    unsigned short port;
-    char *portp;
-    char *hostp;
-    char *url;
-    char c;
-    char host[LONG_STRING_LEN];
-    char buf[MAX_STRING_LEN];
-    char *olduri;
-    apr_size_t l;
-
-    cp = (char *)ap_http_method(r);
-    l  = strlen(cp);
-    if (   strlen(r->filename) > l+3 
-        && strncasecmp(r->filename, cp, l) == 0
-        && r->filename[l]   == ':'
-        && r->filename[l+1] == '/'
-        && r->filename[l+2] == '/'             ) {
-        /* there was really a rewrite to a remote path */
-
-        olduri = apr_pstrdup(r->pool, r->filename); /* save for logging */
-
-        /* cut the hostname and port out of the URI */
-        apr_cpystrn(buf, r->filename+(l+3), sizeof(buf));
-        hostp = buf;
-        for (cp = hostp; *cp != '\0' && *cp != '/' && *cp != ':'; cp++)
-            ;
-        if (*cp == ':') {
-            /* set host */
-            *cp++ = '\0';
-            apr_cpystrn(host, hostp, sizeof(host));
-            /* set port */
-            portp = cp;
-            for (; *cp != '\0' && *cp != '/'; cp++)
-                ;
-            c = *cp;
-            *cp = '\0';
-            port = atoi(portp);
-            *cp = c;
-            /* set remaining url */
-            url = cp;
-        }
-        else if (*cp == '/') {
-            /* set host */
-            *cp = '\0';
-            apr_cpystrn(host, hostp, sizeof(host));
-            *cp = '/';
-            /* set port */
-            port = ap_default_port(r);
-            /* set remaining url */
-            url = cp;
-        }
-        else {
-            /* set host */
-            apr_cpystrn(host, hostp, sizeof(host));
-            /* set port */
-            port = ap_default_port(r);
-            /* set remaining url */
-            url = "/";
-        }
-
-        /* now check whether we could reduce it to a local path... */
-        if (ap_matches_request_vhost(r, host, port)) {
-            /* this is our host, so only the URL remains */
-            r->filename = apr_pstrdup(r->pool, url);
-            rewritelog(r, 3, "reduce %s -> %s", olduri, r->filename);
-        }
-    }
-    return;
-}
-
-
-/*
-**
-**  add 'http[s]://ourhost[:ourport]/' to URI
-**  if URI is still not fully qualified
-**
-*/
-
-static void fully_qualify_uri(request_rec *r)
-{
-    char buf[32];
-    const char *thisserver;
-    char *thisport;
-    int port;
-
-    if (!is_absolute_uri(r->filename)) {
-
-        thisserver = ap_get_server_name(r);
-        port = ap_get_server_port(r);
-        if (ap_is_default_port(port,r)) {
-            thisport = "";
-        }
-        else {
-            apr_snprintf(buf, sizeof(buf), ":%u", port);
-            thisport = buf;
-        }
-
-        if (r->filename[0] == '/') {
-            r->filename = apr_psprintf(r->pool, "%s://%s%s%s",
-                                      ap_http_method(r), thisserver,
-                                      thisport, r->filename);
-        }
-        else {
-            r->filename = apr_psprintf(r->pool, "%s://%s%s/%s",
-                                      ap_http_method(r), thisserver,
-                                      thisport, r->filename);
-        }
-    }
-    return;
-}
-
-
-/*
-**
-**  return non-zero if the URI is absolute (includes a scheme etc.)
-**
-*/
-
-static int is_absolute_uri(char *uri)
-{
-    int i = strlen(uri);
-    if (   (i > 7 && strncasecmp(uri, "http://",   7) == 0)
-        || (i > 8 && strncasecmp(uri, "https://",  8) == 0)
-        || (i > 9 && strncasecmp(uri, "gopher://", 9) == 0)
-        || (i > 6 && strncasecmp(uri, "ftp://",    6) == 0)
-        || (i > 5 && strncasecmp(uri, "ldap:",     5) == 0)
-        || (i > 5 && strncasecmp(uri, "news:",     5) == 0)
-        || (i > 7 && strncasecmp(uri, "mailto:",   7) == 0) ) {
-        return 1;
-    }
-    else {
-        return 0;
-    }
-}
-
-
-/*
-**
-**  Expand tilde-paths (/~user) through Unix /etc/passwd 
-**  database information (or other OS-specific database)
-**
-*/
-#if APR_HAS_USER
-static char *expand_tildepaths(request_rec *r, char *uri)
-{
-    char user[LONG_STRING_LEN];
-    char *newuri;
-    int i, j;
-    char *homedir;
-
-    newuri = uri;
-    if (uri != NULL && strlen(uri) > 2 && uri[0] == '/' && uri[1] == '~') {
-        /* cut out the username */
-        for (j = 0, i = 2; j < sizeof(user)-1
-               && uri[i] != '\0'
-               && uri[i] != '/'  ; ) {
-            user[j++] = uri[i++];
-        }
-        user[j] = '\0';
-
-        /* lookup username in systems passwd file */
-        if (apr_get_home_directory(&homedir, user, r->pool) == APR_SUCCESS) {
-            /* ok, user was found, so expand the ~user string */
-            if (uri[i] != '\0') {
-                /* ~user/anything...  has to be expanded */
-                if (homedir[strlen(homedir)-1] == '/') {
-                    homedir[strlen(homedir)-1] = '\0';
-                }
-                newuri = apr_pstrcat(r->pool, homedir, uri+i, NULL);
-            }
-            else {
-                /* only ~user has to be expanded */
-                newuri = homedir;
-            }
-        }
-    }
-    return newuri;
-}
-#endif  /* if APR_HAS_USER */
-
-
-
-/*
-** +-------------------------------------------------------+
-** |                                                       |
-** |              DBM hashfile support
-** |                                                       |
-** +-------------------------------------------------------+
-*/
-
-
-static char *lookup_map(request_rec *r, char *name, char *key)
-{
-    rewrite_server_conf *conf;
-    apr_array_header_t *rewritemaps;
-    rewritemap_entry *entries;
-    rewritemap_entry *s;
-    char *value;
-    apr_finfo_t st;
-    apr_status_t rv;
-    int i;
-
-    /* get map configuration */
-    conf = ap_get_module_config(r->server->module_config, &rewrite_module);
-    rewritemaps = conf->rewritemaps;
-
-    entries = (rewritemap_entry *)rewritemaps->elts;
-    for (i = 0; i < rewritemaps->nelts; i++) {
-        s = &entries[i];
-        if (strcmp(s->name, name) == 0) {
-            if (s->type == MAPTYPE_TXT) {
-                if ((rv = apr_stat(&st, s->checkfile, 
-                                   APR_FINFO_MIN, r->pool)) != APR_SUCCESS) {
-                    ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
-                                 "mod_rewrite: can't access text RewriteMap "
-                                 "file %s", s->checkfile);
-                    rewritelog(r, 1, "can't open RewriteMap file, "
-                               "see error log");
-                    return NULL;
-                }
-                value = get_cache_string(cachep, s->name, CACHEMODE_TS,
-                                         st.mtime, key);
-                if (value == NULL) {
-                    rewritelog(r, 6, "cache lookup FAILED, forcing new "
-                               "map lookup");
-                    if ((value =
-                         lookup_map_txtfile(r, s->datafile, key)) != NULL) {
-                        rewritelog(r, 5, "map lookup OK: map=%s key=%s[txt] "
-                                   "-> val=%s", s->name, key, value);
-                        set_cache_string(cachep, s->name, CACHEMODE_TS,
-                                         st.mtime, key, value);
-                        return value;
-                    }
-                    else {
-                        rewritelog(r, 5, "map lookup FAILED: map=%s[txt] "
-                                   "key=%s", s->name, key);
-                        set_cache_string(cachep, s->name, CACHEMODE_TS,
-                                         st.mtime, key, "");
-                        return NULL;
-                    }
-                }
-                else {
-                    rewritelog(r, 5, "cache lookup OK: map=%s[txt] key=%s "
-                               "-> val=%s", s->name, key, value);
-                    return value[0] != '\0' ? value : NULL;
-                }
-            }
-            else if (s->type == MAPTYPE_DBM) {
-#ifndef NO_DBM_REWRITEMAP
-                if ((rv = apr_stat(&st, s->checkfile,
-                                   APR_FINFO_MIN, r->pool)) != APR_SUCCESS) {
-                    ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
-                                 "mod_rewrite: can't access DBM RewriteMap "
-                                 "file %s", s->checkfile);
-                    rewritelog(r, 1, "can't open DBM RewriteMap file, "
-                               "see error log");
-                    return NULL;
-                }
-                value = get_cache_string(cachep, s->name, CACHEMODE_TS,
-                                         st.mtime, key);
-                if (value == NULL) {
-                    rewritelog(r, 6,
-                               "cache lookup FAILED, forcing new map lookup");
-                    if ((value =
-                         lookup_map_dbmfile(r, s->datafile, key)) != NULL) {
-                        rewritelog(r, 5, "map lookup OK: map=%s[dbm] key=%s "
-                                   "-> val=%s", s->name, key, value);
-                        set_cache_string(cachep, s->name, CACHEMODE_TS,
-                                         st.mtime, key, value);
-                        return value;
-                    }
-                    else {
-                        rewritelog(r, 5, "map lookup FAILED: map=%s[dbm] "
-                                   "key=%s", s->name, key);
-                        set_cache_string(cachep, s->name, CACHEMODE_TS,
-                                         st.mtime, key, "");
-                        return NULL;
-                    }
-                }
-                else {
-                    rewritelog(r, 5, "cache lookup OK: map=%s[dbm] key=%s "
-                               "-> val=%s", s->name, key, value);
-                    return value[0] != '\0' ? value : NULL;
-                }
-#else
-                return NULL;
-#endif
-            }
-            else if (s->type == MAPTYPE_PRG) {
-                if ((value =
-                     lookup_map_program(r, s->fpin, s->fpout, key)) != NULL) {
-                    rewritelog(r, 5, "map lookup OK: map=%s key=%s -> val=%s",
-                               s->name, key, value);
-                    return value;
-                }
-                else {
-                    rewritelog(r, 5, "map lookup FAILED: map=%s key=%s",
-                               s->name, key);
-                }
-            }
-            else if (s->type == MAPTYPE_INT) {
-                if ((value = lookup_map_internal(r, s->func, key)) != NULL) {
-                    rewritelog(r, 5, "map lookup OK: map=%s key=%s -> val=%s",
-                               s->name, key, value);
-                    return value;
-                }
-                else {
-                    rewritelog(r, 5, "map lookup FAILED: map=%s key=%s",
-                               s->name, key);
-                }
-            }
-            else if (s->type == MAPTYPE_RND) {
-                if ((rv = apr_stat(&st, s->checkfile,
-                                   APR_FINFO_MIN, r->pool)) != APR_SUCCESS) {
-                    ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
-                                 "mod_rewrite: can't access text RewriteMap "
-                                 "file %s", s->checkfile);
-                    rewritelog(r, 1, "can't open RewriteMap file, "
-                               "see error log");
-                    return NULL;
-                }
-                value = get_cache_string(cachep, s->name, CACHEMODE_TS,
-                                         st.mtime, key);
-                if (value == NULL) {
-                    rewritelog(r, 6, "cache lookup FAILED, forcing new "
-                               "map lookup");
-                    if ((value =
-                         lookup_map_txtfile(r, s->datafile, key)) != NULL) {
-                        rewritelog(r, 5, "map lookup OK: map=%s key=%s[txt] "
-                                   "-> val=%s", s->name, key, value);
-                        set_cache_string(cachep, s->name, CACHEMODE_TS,
-                                         st.mtime, key, value);
-                    }
-                    else {
-                        rewritelog(r, 5, "map lookup FAILED: map=%s[txt] "
-                                   "key=%s", s->name, key);
-                        set_cache_string(cachep, s->name, CACHEMODE_TS,
-                                         st.mtime, key, "");
-                        return NULL;
-                    }
-                }
-                else {
-                    rewritelog(r, 5, "cache lookup OK: map=%s[txt] key=%s "
-                               "-> val=%s", s->name, key, value);
-                }
-                if (value[0] != '\0') {
-                   value = select_random_value_part(r, value);
-                   rewritelog(r, 5, "randomly choosen the subvalue `%s'", value);
-                }
-                else {
-                    value = NULL;
-                }
-                return value;
-            }
-        }
-    }
-    return NULL;
-}
-
-static char *lookup_map_txtfile(request_rec *r, const char *file, char *key)
-{
-    apr_file_t *fp = NULL;
-    apr_status_t rc;
-    char line[1024];
-    char *value = NULL;
-    char *cpT;
-    size_t skip;
-    char *curkey;
-    char *curval;
-
-    rc = apr_file_open(&fp, file, APR_READ, APR_OS_DEFAULT, r->pool);
-    if (rc != APR_SUCCESS) {
-       return NULL;
-    }
-
-    while (apr_file_gets(line, sizeof(line), fp) == APR_SUCCESS) {
-        if (line[0] == '#')
-            continue; /* ignore comments */
-        cpT = line;
-        curkey = cpT;
-        skip = strcspn(cpT," \t\r\n");
-        if (skip == 0)
-            continue; /* ignore lines that start with a space, tab, CR, or LF */
-        cpT += skip;
-        *cpT = '\0';
-        if (strcmp(curkey, key) != 0)
-            continue; /* key does not match... */
-            
-        /* found a matching key; now extract and return the value */
-        ++cpT;
-        skip = strspn(cpT, " \t\r\n");
-        cpT += skip;
-        curval = cpT;
-        skip = strcspn(cpT, " \t\r\n");
-        if (skip == 0)
-            continue; /* no value... */
-        cpT += skip;
-        *cpT = '\0';
-        value = apr_pstrdup(r->pool, curval);
-        break;
-    }
-    apr_file_close(fp);
-    return value;
-}
-
-#ifndef NO_DBM_REWRITEMAP
-static char *lookup_map_dbmfile(request_rec *r, const char *file, char *key)
-{
-    DBM *dbmfp = NULL;
-    datum dbmkey;
-    datum dbmval;
-    char *value = NULL;
-    char buf[MAX_STRING_LEN];
-
-    dbmkey.dptr  = key;
-    dbmkey.dsize = strlen(key);
-    if ((dbmfp = dbm_open(file, O_RDONLY, 0666)) != NULL) {
-        dbmval = dbm_fetch(dbmfp, dbmkey);
-        if (dbmval.dptr != NULL) {
-            memcpy(buf, dbmval.dptr, 
-                   dbmval.dsize < sizeof(buf)-1 ? 
-                   dbmval.dsize : sizeof(buf)-1  );
-            buf[dbmval.dsize] = '\0';
-            value = apr_pstrdup(r->pool, buf);
-        }
-        dbm_close(dbmfp);
-    }
-    return value;
-}
-#endif
-
-static char *lookup_map_program(request_rec *r, apr_file_t *fpin,
-                                apr_file_t *fpout, char *key)
-{
-    char buf[LONG_STRING_LEN];
-    char c;
-    int i;
-    apr_size_t nbytes;
-
-#ifndef NO_WRITEV
-    struct iovec iova[2];
-    apr_size_t niov;
-#endif
-
-    /* when `RewriteEngine off' was used in the per-server
-     * context then the rewritemap-programs were not spawned.
-     * In this case using such a map (usually in per-dir context)
-     * is useless because it is not available.
-     */
-    if (fpin == NULL || fpout == NULL) {
-        return NULL;
-    }
-
-    /* take the lock */
-
-    if (rewrite_mapr_lock_acquire) {
-        apr_global_mutex_lock(rewrite_mapr_lock_acquire);
-    }
-
-    /* write out the request key */
-#ifdef NO_WRITEV
-    nbytes = strlen(key);
-    apr_file_write(fpin, key, &nbytes);
-    nbytes = 1;
-    apr_file_write(fpin, "\n", &nbytes);
-#else
-    iova[0].iov_base = key;
-    iova[0].iov_len = strlen(key);
-    iova[1].iov_base = "\n";
-    iova[1].iov_len = 1;
-
-    niov = 2;
-    apr_file_writev(fpin, iova, niov, &nbytes);
-#endif
-
-    /* read in the response value */
-    i = 0;
-    nbytes = 1;
-    apr_file_read(fpout, &c, &nbytes);
-    while (nbytes == 1 && (i < LONG_STRING_LEN-1)) {
-        if (c == '\n') {
-            break;
-        }
-        buf[i++] = c;
-
-        apr_file_read(fpout, &c, &nbytes);
-    }
-    buf[i] = '\0';
-
-    /* give the lock back */
-    if (rewrite_mapr_lock_acquire) {
-        apr_global_mutex_unlock(rewrite_mapr_lock_acquire);
-    }
-
-    if (strcasecmp(buf, "NULL") == 0) {
-        return NULL;
-    }
-    else {
-        return apr_pstrdup(r->pool, buf);
-    }
-}
-
-static char *lookup_map_internal(request_rec *r,
-                                 char *(*func)(request_rec *, char *),
-                                 char *key)
-{
-    /* currently we just let the function convert
-       the key to a corresponding value */
-    return func(r, key);
-}
-
-static char *rewrite_mapfunc_toupper(request_rec *r, char *key)
-{
-    char *value, *cp;
-
-    for (cp = value = apr_pstrdup(r->pool, key); cp != NULL && *cp != '\0';
-         cp++) {
-        *cp = apr_toupper(*cp);
-    }
-    return value;
-}
-
-static char *rewrite_mapfunc_tolower(request_rec *r, char *key)
-{
-    char *value, *cp;
-
-    for (cp = value = apr_pstrdup(r->pool, key); cp != NULL && *cp != '\0';
-         cp++) {
-        *cp = apr_tolower(*cp);
-    }
-    return value;
-}
-
-static char *rewrite_mapfunc_escape(request_rec *r, char *key)
-{
-    char *value;
-
-    value = ap_escape_uri(r->pool, key);
-    return value;
-}
-
-static char *rewrite_mapfunc_unescape(request_rec *r, char *key)
-{
-    char *value;
-
-    value = apr_pstrdup(r->pool, key);
-    ap_unescape_url(value);
-    return value;
-}
-
-static int rewrite_rand_init_done = 0;
-
-static void rewrite_rand_init(void)
-{
-    if (!rewrite_rand_init_done) {
-        srand((unsigned)(getpid()));
-        rewrite_rand_init_done = 1;
-    }
-    return;
-}
-
-static int rewrite_rand(int l, int h)
-{
-    rewrite_rand_init();
-
-    /* Get [0,1) and then scale to the appropriate range. Note that using
-     * a floating point value ensures that we use all bits of the rand()
-     * result. Doing an integer modulus would only use the lower-order bits
-     * which may not be as uniformly random.
-     */
-    return (int)((double)(rand() % RAND_MAX) / RAND_MAX) * (h - l + 1) + l;
-}
-
-static char *select_random_value_part(request_rec *r, char *value)
-{
-    char *buf;
-    int n, i, k;
-
-    /*  count number of distinct values  */
-    for (n = 1, i = 0; value[i] != '\0'; i++) {
-        if (value[i] == '|') {
-            n++;
-        }
-    }
-
-    /*  when only one value we have no option to choose  */
-    if (n == 1) {
-        return value;
-    }
-
-    /*  else randomly select one  */
-    k = rewrite_rand(1, n);
-
-    /*  and grep it out  */
-    for (n = 1, i = 0; value[i] != '\0'; i++) {
-        if (n == k) {
-            break;
-        }
-        if (value[i] == '|') {
-            n++;
-        }
-    }
-    buf = apr_pstrdup(r->pool, &value[i]);
-    for (i = 0; buf[i] != '\0' && buf[i] != '|'; i++)
-        ;
-    buf[i] = '\0';
-    return buf;
-}
-
-
-/*
-** +-------------------------------------------------------+
-** |                                                       |
-** |              rewriting logfile support
-** |                                                       |
-** +-------------------------------------------------------+
-*/
-
-
-static void open_rewritelog(server_rec *s, apr_pool_t *p)
-{
-    rewrite_server_conf *conf;
-    const char *fname;
-    apr_status_t rc;
-    piped_log *pl;
-    int    rewritelog_flags = ( APR_WRITE | APR_APPEND | APR_CREATE );
-    apr_fileperms_t rewritelog_mode  = ( APR_UREAD | APR_UWRITE | APR_GREAD | APR_WREAD );
-
-    conf = ap_get_module_config(s->module_config, &rewrite_module);
-
-    if (conf->rewritelogfile == NULL) {
-        return;
-    }
-    if (*(conf->rewritelogfile) == '\0') {
-        return;
-    }
-    if (conf->rewritelogfp != NULL) {
-        return; /* virtual log shared w/ main server */
-    }
-
-    if (*conf->rewritelogfile == '|') {
-        if ((pl = ap_open_piped_log(p, conf->rewritelogfile+1)) == NULL) {
-            ap_log_error(APLOG_MARK, APLOG_ERR|APLOG_NOERRNO, 0, s, 
-                         "mod_rewrite: could not open reliable pipe "
-                         "to RewriteLog filter %s", conf->rewritelogfile+1);
-            exit(1);
-        }
-        conf->rewritelogfp = ap_piped_log_write_fd(pl);
-    }
-    else if (*conf->rewritelogfile != '\0') {
-        fname = ap_server_root_relative(p, conf->rewritelogfile);
-        if (!fname) {
-            ap_log_error(APLOG_MARK, APLOG_ERR, APR_EBADPATH, s, 
-                         "mod_rewrite: Invalid RewriteLog "
-                         "path %s", conf->rewritelogfile);
-            exit(1);
-        }
-        if ((rc = apr_file_open(&conf->rewritelogfp, fname, 
-                                rewritelog_flags, rewritelog_mode, p))
-                != APR_SUCCESS) {
-            ap_log_error(APLOG_MARK, APLOG_ERR, rc, s, 
-                         "mod_rewrite: could not open RewriteLog "
-                         "file %s", fname);
-            exit(1);
-        }
-        apr_file_set_inherit(conf->rewritelogfp);
-    }
-    return;
-}
-
-static void rewritelog(request_rec *r, int level, const char *text, ...)
-{
-    rewrite_server_conf *conf;
-    conn_rec *conn;
-    char *str1;
-    char str2[512];
-    char str3[1024];
-    const char *type;
-    char redir[20]; /* enough for "/redir#%d" if int is 32 bit */
-    va_list ap;
-    int i;
-    apr_size_t nbytes;
-    request_rec *req;
-    char *ruser;
-    const char *rhost;
-
-    va_start(ap, text);
-    conf = ap_get_module_config(r->server->module_config, &rewrite_module);
-    conn = r->connection;
-
-    if (conf->rewritelogfp == NULL) {
-        return;
-    }
-    if (conf->rewritelogfile == NULL) {
-        return;
-    }
-    if (*(conf->rewritelogfile) == '\0') {
-        return;
-    }
-
-    if (level > conf->rewriteloglevel) {
-        return;
-    }
-
-    if (r->user == NULL) {
-        ruser = "-";
-    }
-    else if (strlen(r->user) != 0) {
-        ruser = r->user;
-    }
-    else {
-        ruser = "\"\"";
-    }
-
-    rhost = ap_get_remote_host(conn, r->per_dir_config, 
-                               REMOTE_NOLOOKUP, NULL);
-    if (rhost == NULL) {
-        rhost = "UNKNOWN-HOST";
-    }
-
-    str1 = apr_pstrcat(r->pool, rhost, " ",
-                      (conn->remote_logname != NULL ?
-                      conn->remote_logname : "-"), " ",
-                      ruser, NULL);
-    apr_vsnprintf(str2, sizeof(str2), text, ap);
-
-    if (r->main == NULL) {
-        type = "initial";
-    }
-    else {
-        type = "subreq";
-    }
-
-    for (i = 0, req = r; req->prev != NULL; req = req->prev) {
-        i++;
-    }
-    if (i == 0) {
-        redir[0] = '\0';
-    }
-    else {
-        apr_snprintf(redir, sizeof(redir), "/redir#%d", i);
-    }
-
-    apr_snprintf(str3, sizeof(str3),
-                "%s %s [%s/sid#%lx][rid#%lx/%s%s] (%d) %s" APR_EOL_STR, str1,
-                current_logtime(r), ap_get_server_name(r),
-                (unsigned long)(r->server), (unsigned long)r,
-                type, redir, level, str2);
-
-    apr_lock_acquire(rewrite_log_lock);
-    nbytes = strlen(str3);
-    apr_file_write(conf->rewritelogfp, str3, &nbytes);
-    apr_lock_release(rewrite_log_lock);
-
-    va_end(ap);
-    return;
-}
-
-static char *current_logtime(request_rec *r)
-{
-    apr_time_exp_t t;
-    char tstr[80];
-    apr_size_t len;
-
-    apr_explode_localtime(&t, apr_time_now());
-
-    apr_strftime(tstr, &len, 80, "[%d/%b/%Y:%H:%M:%S ", &t);
-    apr_snprintf(tstr + strlen(tstr), 80-strlen(tstr), "%c%.2d%.2d]",
-                 t.tm_gmtoff < 0 ? '-' : '+',
-                 t.tm_gmtoff / (60*60), t.tm_gmtoff % (60*60));
-    return apr_pstrdup(r->pool, tstr);
-}
-
-
-
-
-/*
-** +-------------------------------------------------------+
-** |                                                       |
-** |              rewriting lockfile support
-** |                                                       |
-** +-------------------------------------------------------+
-*/
-
-#define REWRITELOCK_MODE ( APR_UREAD | APR_UWRITE | APR_GREAD | APR_WREAD )
-
-static void rewritelock_create(server_rec *s, apr_pool_t *p)
-{
-    apr_status_t rc;
-
-    /* only operate if a lockfile is used */
-    if (lockname == NULL || *(lockname) == '\0') {
-        return;
-    }
-
-    /* create the lockfile */
-    rc = apr_global_mutex_create(&rewrite_mapr_lock_acquire, lockname,
-                                 APR_LOCK_DEFAULT, p);
-    if (rc != APR_SUCCESS) {
-        ap_log_error(APLOG_MARK, APLOG_ERR, rc, s,
-                     "mod_rewrite: Parent could not create RewriteLock "
-                     "file %s", lockname);
-        exit(1);
-    }
-
-    return;
-}
-
-static apr_status_t rewritelock_remove(void *data)
-{
-    /* only operate if a lockfile is used */
-    if (lockname == NULL || *(lockname) == '\0') {
-        return APR_SUCCESS;
-    }
-
-    /* destroy the rewritelock */
-    apr_global_mutex_destroy (rewrite_mapr_lock_acquire);
-    rewrite_mapr_lock_acquire = NULL;
-    lockname = NULL;
-    return(0);
-}
-
-
-/*
-** +-------------------------------------------------------+
-** |                                                       |
-** |                  program map support
-** |                                                       |
-** +-------------------------------------------------------+
-*/
-
-static void run_rewritemap_programs(server_rec *s, apr_pool_t *p)
-{
-    rewrite_server_conf *conf;
-    apr_file_t *fpin = NULL;
-    apr_file_t *fpout = NULL;
-    apr_file_t *fperr = NULL;
-    apr_array_header_t *rewritemaps;
-    rewritemap_entry *entries;
-    rewritemap_entry *map;
-    int i;
-    apr_status_t rc;
-
-    conf = ap_get_module_config(s->module_config, &rewrite_module);
-
-    /*  If the engine isn't turned on,
-     *  don't even try to do anything.
-     */
-    if (conf->state == ENGINE_DISABLED) {
-        return;
-    }
-
-    rewritemaps = conf->rewritemaps;
-    entries = (rewritemap_entry *)rewritemaps->elts;
-    for (i = 0; i < rewritemaps->nelts; i++) {
-        map = &entries[i];
-        if (map->type != MAPTYPE_PRG) {
-            continue;
-        }
-        if (map->datafile == NULL
-            || *(map->datafile) == '\0'
-            || map->fpin  != NULL
-            || map->fpout != NULL        ) {
-            continue;
-        }
-        fpin  = NULL;
-        fpout = NULL;
-        rc = rewritemap_program_child(p, map->datafile,
-                                     &fpout, &fpin, &fperr);
-        if (rc != APR_SUCCESS || fpin == NULL || fpout == NULL) {
-            ap_log_error(APLOG_MARK, APLOG_ERR, rc, s,
-                         "mod_rewrite: could not fork child for "
-                         "RewriteMap process");
-            exit(1);
-        }
-        map->fpin  = fpin;
-        map->fpout = fpout;
-        map->fperr = fperr;
-    }
-    return;
-}
-
-/* child process code */
-static apr_status_t rewritemap_program_child(apr_pool_t *p, const char *progname,
-                                             apr_file_t **fpout, apr_file_t **fpin,
-                                             apr_file_t **fperr)
-{
-    apr_status_t rc;
-    apr_procattr_t *procattr;
-    apr_proc_t *procnew;
-
-    if (((rc = apr_procattr_create(&procattr, p)) != APR_SUCCESS) ||
-        ((rc = apr_procattr_io_set(procattr, APR_FULL_BLOCK,
-                                  APR_FULL_NONBLOCK,
-                                  APR_FULL_NONBLOCK)) != APR_SUCCESS) ||
-        ((rc = apr_procattr_dir_set(procattr, 
-                                   ap_make_dirstr_parent(p, progname)))
-         != APR_SUCCESS) ||
-        ((rc = apr_procattr_cmdtype_set(procattr, APR_PROGRAM)) != APR_SUCCESS)) {
-        /* Something bad happened, give up and go away. */
-    }
-    else {
-        procnew = apr_pcalloc(p, sizeof(*procnew));
-        rc = apr_proc_create(procnew, progname, NULL, NULL, procattr, p);
-    
-        if (rc == APR_SUCCESS) {
-            apr_pool_note_subprocess(p, procnew, APR_KILL_AFTER_TIMEOUT);
-
-            if (fpin) {
-                (*fpin) = procnew->in;
-            }
-
-            if (fpout) {
-                (*fpout) = procnew->out;
-            }
-
-            if (fperr) {
-                (*fperr) = procnew->err;
-            }
-        }
-    }
-
-    return (rc);
-}
-
-
-
-
-/*
-** +-------------------------------------------------------+
-** |                                                       |
-** |             environment variable support
-** |                                                       |
-** +-------------------------------------------------------+
-*/
-
-
-static char *lookup_variable(request_rec *r, char *var)
-{
-    const char *result;
-    char resultbuf[LONG_STRING_LEN];
-    apr_time_exp_t tm;
-    request_rec *rsub;
-
-    result = NULL;
-
-    /* HTTP headers */
-    if (strcasecmp(var, "HTTP_USER_AGENT") == 0) {
-        result = lookup_header(r, "User-Agent");
-    }
-    else if (strcasecmp(var, "HTTP_REFERER") == 0) {
-        result = lookup_header(r, "Referer");
-    }
-    else if (strcasecmp(var, "HTTP_COOKIE") == 0) {
-        result = lookup_header(r, "Cookie");
-    }
-    else if (strcasecmp(var, "HTTP_FORWARDED") == 0) {
-        result = lookup_header(r, "Forwarded");
-    }
-    else if (strcasecmp(var, "HTTP_HOST") == 0) {
-        result = lookup_header(r, "Host");
-    }
-    else if (strcasecmp(var, "HTTP_PROXY_CONNECTION") == 0) {
-        result = lookup_header(r, "Proxy-Connection");
-    }
-    else if (strcasecmp(var, "HTTP_ACCEPT") == 0) {
-        result = lookup_header(r, "Accept");
-    }
-    /* all other headers from which we are still not know about */
-    else if (strlen(var) > 5 && strncasecmp(var, "HTTP:", 5) == 0) {
-        result = lookup_header(r, var+5);
-    }
-
-    /* connection stuff */
-    else if (strcasecmp(var, "REMOTE_ADDR") == 0) {
-        result = r->connection->remote_ip;
-    }
-    else if (strcasecmp(var, "REMOTE_HOST") == 0) {
-        result = (char *)ap_get_remote_host(r->connection,
-                                            r->per_dir_config, REMOTE_NAME, NULL);
-    }
-    else if (strcasecmp(var, "REMOTE_USER") == 0) {
-        result = r->user;
-    }
-    else if (strcasecmp(var, "REMOTE_IDENT") == 0) {
-        result = (char *)ap_get_remote_logname(r);
-    }
-
-    /* request stuff */
-    else if (strcasecmp(var, "THE_REQUEST") == 0) { /* non-standard */
-        result = r->the_request;
-    }
-    else if (strcasecmp(var, "REQUEST_METHOD") == 0) {
-        result = r->method;
-    }
-    else if (strcasecmp(var, "REQUEST_URI") == 0) { /* non-standard */
-        result = r->uri;
-    }
-    else if (strcasecmp(var, "SCRIPT_FILENAME") == 0 ||
-             strcasecmp(var, "REQUEST_FILENAME") == 0  ) {
-        result = r->filename;
-    }
-    else if (strcasecmp(var, "PATH_INFO") == 0) {
-        result = r->path_info;
-    }
-    else if (strcasecmp(var, "QUERY_STRING") == 0) {
-        result = r->args;
-    }
-    else if (strcasecmp(var, "AUTH_TYPE") == 0) {
-        result = r->ap_auth_type;
-    }
-    else if (strcasecmp(var, "IS_SUBREQ") == 0) { /* non-standard */
-        result = (r->main != NULL ? "true" : "false");
-    }
-
-    /* internal server stuff */
-    else if (strcasecmp(var, "DOCUMENT_ROOT") == 0) {
-        result = ap_document_root(r);
-    }
-    else if (strcasecmp(var, "SERVER_ADMIN") == 0) {
-        result = r->server->server_admin;
-    }
-    else if (strcasecmp(var, "SERVER_NAME") == 0) {
-        result = ap_get_server_name(r);
-    }
-    else if (strcasecmp(var, "SERVER_ADDR") == 0) { /* non-standard */
-        result = r->connection->local_ip;
-    }
-    else if (strcasecmp(var, "SERVER_PORT") == 0) {
-        apr_snprintf(resultbuf, sizeof(resultbuf), "%u", ap_get_server_port(r));
-        result = resultbuf;
-    }
-    else if (strcasecmp(var, "SERVER_PROTOCOL") == 0) {
-        result = r->protocol;
-    }
-    else if (strcasecmp(var, "SERVER_SOFTWARE") == 0) {
-        result = ap_get_server_version();
-    }
-    else if (strcasecmp(var, "API_VERSION") == 0) { /* non-standard */
-        apr_snprintf(resultbuf, sizeof(resultbuf), "%d:%d",
-                     MODULE_MAGIC_NUMBER_MAJOR, MODULE_MAGIC_NUMBER_MINOR);
-        result = resultbuf;
-    }
-
-/* XXX: wow this has gotta be slow if you actually use it for a lot, recalculates exploded time for each variable */
-    /* underlaying Unix system stuff */
-    else if (strcasecmp(var, "TIME_YEAR") == 0) {
-        apr_explode_localtime(&tm, apr_time_now());
-        apr_snprintf(resultbuf, sizeof(resultbuf), "%04d", tm.tm_year + 1900);
-        result = resultbuf;
-    }
-#define MKTIMESTR(format, tmfield) \
-    apr_explode_localtime(&tm, apr_time_now()); \
-    apr_snprintf(resultbuf, sizeof(resultbuf), format, tm.tmfield); \
-    result = resultbuf;
-    else if (strcasecmp(var, "TIME_MON") == 0) {
-        MKTIMESTR("%02d", tm_mon+1)
-    }
-    else if (strcasecmp(var, "TIME_DAY") == 0) {
-        MKTIMESTR("%02d", tm_mday)
-    }
-    else if (strcasecmp(var, "TIME_HOUR") == 0) {
-        MKTIMESTR("%02d", tm_hour)
-    }
-    else if (strcasecmp(var, "TIME_MIN") == 0) {
-        MKTIMESTR("%02d", tm_min)
-    }
-    else if (strcasecmp(var, "TIME_SEC") == 0) {
-        MKTIMESTR("%02d", tm_sec)
-    }
-    else if (strcasecmp(var, "TIME_WDAY") == 0) {
-        MKTIMESTR("%d", tm_wday)
-    }
-    else if (strcasecmp(var, "TIME") == 0) {
-        apr_explode_localtime(&tm, apr_time_now());
-        apr_snprintf(resultbuf, sizeof(resultbuf),
-                     "%04d%02d%02d%02d%02d%02d", tm.tm_year + 1900,
-                     tm.tm_mon+1, tm.tm_mday,
-                     tm.tm_hour, tm.tm_min, tm.tm_sec);
-        result = resultbuf;
-        rewritelog(r, 1, "RESULT='%s'", result);
-    }
-
-    /* all other env-variables from the parent Apache process */
-    else if (strlen(var) > 4 && strncasecmp(var, "ENV:", 4) == 0) {
-        /* first try the internal Apache notes structure */
-        result = apr_table_get(r->notes, var+4);
-        /* second try the internal Apache env structure  */
-        if (result == NULL) {
-            result = apr_table_get(r->subprocess_env, var+4);
-        }
-        /* third try the external OS env */
-        if (result == NULL) {
-            result = getenv(var+4);
-        }
-    }
-
-#define LOOKAHEAD(subrecfunc) \
-        if ( \
-          /* filename is safe to use */ \
-          r->filename != NULL \
-              /* - and we're either not in a subrequest */ \
-              && ( r->main == NULL \
-                  /* - or in a subrequest where paths are non-NULL... */ \
-                    || ( r->main->uri != NULL && r->uri != NULL \
-                        /*   ...and sub and main paths differ */ \
-                        && strcmp(r->main->uri, r->uri) != 0))) { \
-            /* process a file-based subrequest */ \
-            rsub = subrecfunc(r->filename, r, NULL); \
-            /* now recursively lookup the variable in the sub_req */ \
-            result = lookup_variable(rsub, var+5); \
-            /* copy it up to our scope before we destroy sub_req's apr_pool_t */ \
-            result = apr_pstrdup(r->pool, result); \
-            /* cleanup by destroying the subrequest */ \
-            ap_destroy_sub_req(rsub); \
-            /* log it */ \
-            rewritelog(r, 5, "lookahead: path=%s var=%s -> val=%s", \
-                       r->filename, var+5, result); \
-            /* return ourself to prevent re-pstrdup */ \
-            return (char *)result; \
-        }
-
-    /* look-ahead for parameter through URI-based sub-request */
-    else if (strlen(var) > 5 && strncasecmp(var, "LA-U:", 5) == 0) {
-        LOOKAHEAD(ap_sub_req_lookup_uri)
-    }
-    /* look-ahead for parameter through file-based sub-request */
-    else if (strlen(var) > 5 && strncasecmp(var, "LA-F:", 5) == 0) {
-        LOOKAHEAD(ap_sub_req_lookup_file)
-    }
-
-    /* file stuff */
-    else if (strcasecmp(var, "SCRIPT_USER") == 0) {
-        result = "<unknown>";
-        if (r->finfo.valid & APR_FINFO_USER) {
-            apr_get_username((char **)&result, r->finfo.user, r->pool);
-        }
-    }
-    else if (strcasecmp(var, "SCRIPT_GROUP") == 0) {
-        result = "<unknown>";
-        if (r->finfo.valid & APR_FINFO_GROUP) {
-            apr_get_groupname((char **)&result, r->finfo.group, r->pool);
-        }
-    }
-
-    if (result == NULL) {
-        return apr_pstrdup(r->pool, "");
-    }
-    else {
-        return apr_pstrdup(r->pool, result);
-    }
-}
-
-static char *lookup_header(request_rec *r, const char *name)
-{
-    const apr_array_header_t *hdrs_arr;
-    const apr_table_entry_t *hdrs;
-    int i;
-
-    hdrs_arr = apr_table_elts(r->headers_in);
-    hdrs = (const apr_table_entry_t *)hdrs_arr->elts;
-    for (i = 0; i < hdrs_arr->nelts; ++i) {
-        if (hdrs[i].key == NULL) {
-            continue;
-        }
-        if (strcasecmp(hdrs[i].key, name) == 0) {
-            apr_table_merge(r->notes, VARY_KEY_THIS, name);
-            return hdrs[i].val;
-        }
-    }
-    return NULL;
-}
-
-
-
-
-/*
-** +-------------------------------------------------------+
-** |                                                       |
-** |                    caching support
-** |                                                       |
-** +-------------------------------------------------------+
-*/
-
-
-static cache *init_cache(apr_pool_t *p)
-{
-    cache *c;
-
-    c = (cache *)apr_palloc(p, sizeof(cache));
-    if (apr_pool_create(&c->pool, p) != APR_SUCCESS) {
-        return NULL;
-    }
-    c->lists = apr_array_make(c->pool, 2, sizeof(cachelist));
-#if APR_HAS_THREADS
-    (void)apr_thread_mutex_create(&(c->lock), APR_THREAD_MUTEX_DEFAULT, p);
-#endif
-    return c;
-}
-
-static void set_cache_string(cache *c, const char *res, int mode, apr_time_t t,
-                             char *key, char *value)
-{
-    cacheentry ce;
-
-    ce.time  = t;
-    ce.key   = key;
-    ce.value = value;
-    store_cache_string(c, res, &ce);
-    return;
-}
-
-static char *get_cache_string(cache *c, const char *res, int mode,
-                              apr_time_t t, char *key)
-{
-    cacheentry *ce;
-
-    ce = retrieve_cache_string(c, res, key);
-    if (ce == NULL) {
-        return NULL;
-    }
-    if (mode & CACHEMODE_TS) {
-        if (t != ce->time) {
-            return NULL;
-        }
-    }
-    else if (mode & CACHEMODE_TTL) {
-        if (t > ce->time) {
-            return NULL;
-        }
-    }
-    return apr_pstrdup(c->pool, ce->value);
-}
-
-static int cache_tlb_hash(char *key)
-{
-    unsigned long n;
-    char *p;
-
-    n = 0;
-    for (p = key; *p != '\0'; p++) {
-        n = ((n << 5) + n) ^ (unsigned long)(*p++);
-    }
-
-    return n % CACHE_TLB_ROWS;
-}
-
-static cacheentry *cache_tlb_lookup(cachetlbentry *tlb, cacheentry *elt,
-                                    char *key)
-{
-    int ix = cache_tlb_hash(key);
-    int i;
-    int j;
-
-    for (i=0; i < CACHE_TLB_COLS; ++i) {
-        j = tlb[ix].t[i];
-        if (j < 0)
-            return NULL;
-        if (strcmp(elt[j].key, key) == 0)
-            return &elt[j];
-    }
-    return NULL;
-}
-
-static void cache_tlb_replace(cachetlbentry *tlb, cacheentry *elt,
-                              cacheentry *e)
-{
-    int ix = cache_tlb_hash(e->key);
-    int i;
-
-    tlb = &tlb[ix];
-
-    for (i=1; i < CACHE_TLB_COLS; ++i)
-        tlb->t[i] = tlb->t[i-1];
-
-    tlb->t[0] = e - elt;
-}
-
-static void store_cache_string(cache *c, const char *res, cacheentry *ce)
-{
-    int i;
-    int j;
-    cachelist *l;
-    cacheentry *e;
-    cachetlbentry *t;
-    int found_list;
-
-#if APR_HAS_THREADS
-    apr_thread_mutex_lock(c->lock);
-#endif
-
-    found_list = 0;
-    /* first try to edit an existing entry */
-    for (i = 0; i < c->lists->nelts; i++) {
-        l = &(((cachelist *)c->lists->elts)[i]);
-        if (strcmp(l->resource, res) == 0) {
-            found_list = 1;
-
-            e = cache_tlb_lookup((cachetlbentry *)l->tlb->elts,
-                                 (cacheentry *)l->entries->elts, ce->key);
-            if (e != NULL) {
-                e->time  = ce->time;
-                e->value = apr_pstrdup(c->pool, ce->value);
-#if APR_HAS_THREADS
-                apr_thread_mutex_unlock(c->lock);
-#endif
-                return;
-            }
-
-            for (j = 0; j < l->entries->nelts; j++) {
-                e = &(((cacheentry *)l->entries->elts)[j]);
-                if (strcmp(e->key, ce->key) == 0) {
-                    e->time  = ce->time;
-                    e->value = apr_pstrdup(c->pool, ce->value);
-                    cache_tlb_replace((cachetlbentry *)l->tlb->elts,
-                                      (cacheentry *)l->entries->elts, e);
-#if APR_HAS_THREADS
-                    apr_thread_mutex_unlock(c->lock);
-#endif
-                    return;
-                }
-            }
-        }
-    }
-
-    /* create a needed new list */
-    if (!found_list) {
-        l = apr_array_push(c->lists);
-        l->resource = apr_pstrdup(c->pool, res);
-        l->entries  = apr_array_make(c->pool, 2, sizeof(cacheentry));
-        l->tlb      = apr_array_make(c->pool, CACHE_TLB_ROWS,
-                                    sizeof(cachetlbentry));
-        for (i=0; i<CACHE_TLB_ROWS; ++i) {
-            t = &((cachetlbentry *)l->tlb->elts)[i];
-                for (j=0; j<CACHE_TLB_COLS; ++j)
-                    t->t[j] = -1;
-        }
-    }
-
-    /* create the new entry */
-    for (i = 0; i < c->lists->nelts; i++) {
-        l = &(((cachelist *)c->lists->elts)[i]);
-        if (strcmp(l->resource, res) == 0) {
-            e = apr_array_push(l->entries);
-            e->time  = ce->time;
-            e->key   = apr_pstrdup(c->pool, ce->key);
-            e->value = apr_pstrdup(c->pool, ce->value);
-            cache_tlb_replace((cachetlbentry *)l->tlb->elts,
-                              (cacheentry *)l->entries->elts, e);
-#if APR_HAS_THREADS
-            apr_thread_mutex_unlock(c->lock);
-#endif
-            return;
-        }
-    }
-
-    /* not reached, but when it is no problem... */
-#if APR_HAS_THREADS
-    apr_thread_mutex_unlock(c->lock);
-#endif
-    return;
-}
-
-static cacheentry *retrieve_cache_string(cache *c, const char *res, char *key)
-{
-    int i;
-    int j;
-    cachelist *l;
-    cacheentry *e;
-
-#if APR_HAS_THREADS
-    apr_thread_mutex_lock(c->lock);
-#endif
-
-    for (i = 0; i < c->lists->nelts; i++) {
-        l = &(((cachelist *)c->lists->elts)[i]);
-        if (strcmp(l->resource, res) == 0) {
-
-            e = cache_tlb_lookup((cachetlbentry *)l->tlb->elts,
-                                 (cacheentry *)l->entries->elts, key);
-            if (e != NULL) {
-#if APR_HAS_THREADS
-                apr_thread_mutex_unlock(c->lock);
-#endif
-                return e;
-            }
-
-            for (j = 0; j < l->entries->nelts; j++) {
-                e = &(((cacheentry *)l->entries->elts)[j]);
-                if (strcmp(e->key, key) == 0) {
-#if APR_HAS_THREADS
-                    apr_thread_mutex_unlock(c->lock);
-#endif
-                    return e;
-                }
-            }
-        }
-    }
-#if APR_HAS_THREADS
-    apr_thread_mutex_unlock(c->lock);
-#endif
-    return NULL;
-}
-
-
-
-
-/*
-** +-------------------------------------------------------+
-** |                                                       |
-** |                    misc functions
-** |                                                       |
-** +-------------------------------------------------------+
-*/
-
-static char *subst_prefix_path(request_rec *r, char *input, char *match,
-                               const char *subst)
-{
-    char matchbuf[LONG_STRING_LEN];
-    char substbuf[LONG_STRING_LEN];
-    char *output;
-    int l;
-
-    output = input;
-
-    /* first create a match string which always has a trailing slash */
-    l = apr_cpystrn(matchbuf, match, sizeof(matchbuf)) - matchbuf;
-    if (matchbuf[l-1] != '/') {
-       matchbuf[l] = '/';
-       matchbuf[l+1] = '\0';
-       l++;
-    }
-    /* now compare the prefix */
-    if (strncmp(input, matchbuf, l) == 0) {
-        rewritelog(r, 5, "strip matching prefix: %s -> %s", output, output+l);
-        output = apr_pstrdup(r->pool, output+l);
-
-        /* and now add the base-URL as replacement prefix */
-        l = apr_cpystrn(substbuf, subst, sizeof(substbuf)) - substbuf;
-        if (substbuf[l-1] != '/') {
-           substbuf[l] = '/';
-           substbuf[l+1] = '\0';
-           l++;
-        }
-        if (output[0] == '/') {
-            rewritelog(r, 4, "add subst prefix: %s -> %s%s",
-                       output, substbuf, output+1);
-            output = apr_pstrcat(r->pool, substbuf, output+1, NULL);
-        }
-        else {
-            rewritelog(r, 4, "add subst prefix: %s -> %s%s",
-                       output, substbuf, output);
-            output = apr_pstrcat(r->pool, substbuf, output, NULL);
-        }
-    }
-    return output;
-}
-
-
-/*
-**
-**  own command line parser which don't have the '\\' problem
-**
-*/
-
-static int parseargline(char *str, char **a1, char **a2, char **a3)
-{
-    char *cp;
-    int isquoted;
-
-#define SKIP_WHITESPACE(cp) \
-    for ( ; *cp == ' ' || *cp == '\t'; ) { \
-        cp++; \
-    };
-
-#define CHECK_QUOTATION(cp,isquoted) \
-    isquoted = 0; \
-    if (*cp == '"') { \
-        isquoted = 1; \
-        cp++; \
-    }
-
-#define DETERMINE_NEXTSTRING(cp,isquoted) \
-    for ( ; *cp != '\0'; cp++) { \
-        if (   (isquoted    && (*cp     == ' ' || *cp     == '\t')) \
-            || (*cp == '\\' && (*(cp+1) == ' ' || *(cp+1) == '\t'))) { \
-            cp++; \
-            continue; \
-        } \
-        if (   (!isquoted && (*cp == ' ' || *cp == '\t')) \
-            || (isquoted  && *cp == '"')                  ) { \
-            break; \
-        } \
-    }
-
-    cp = str;
-    SKIP_WHITESPACE(cp);
-
-    /*  determine first argument */
-    CHECK_QUOTATION(cp, isquoted);
-    *a1 = cp;
-    DETERMINE_NEXTSTRING(cp, isquoted);
-    if (*cp == '\0') {
-        return 1;
-    }
-    *cp++ = '\0';
-
-    SKIP_WHITESPACE(cp);
-
-    /*  determine second argument */
-    CHECK_QUOTATION(cp, isquoted);
-    *a2 = cp;
-    DETERMINE_NEXTSTRING(cp, isquoted);
-    if (*cp == '\0') {
-        *cp++ = '\0';
-        *a3 = NULL;
-        return 0;
-    }
-    *cp++ = '\0';
-
-    SKIP_WHITESPACE(cp);
-
-    /* again check if there are only two arguments */
-    if (*cp == '\0') {
-        *cp++ = '\0';
-        *a3 = NULL;
-        return 0;
-    }
-
-    /*  determine second argument */
-    CHECK_QUOTATION(cp, isquoted);
-    *a3 = cp;
-    DETERMINE_NEXTSTRING(cp, isquoted);
-    *cp++ = '\0';
-
-    return 0;
-}
-
-
-static void add_env_variable(request_rec *r, char *s)
-{
-    char var[MAX_STRING_LEN];
-    char val[MAX_STRING_LEN];
-    char *cp;
-    int n;
-
-    if ((cp = strchr(s, ':')) != NULL) {
-        n = ((cp-s) > MAX_STRING_LEN-1 ? MAX_STRING_LEN-1 : (cp-s));
-        memcpy(var, s, n);
-        var[n] = '\0';
-        apr_cpystrn(val, cp+1, sizeof(val));
-        apr_table_set(r->subprocess_env, var, val);
-        rewritelog(r, 5, "setting env variable '%s' to '%s'", var, val);
-    }
-}
-
-
-/*
-**
-**  check that a subrequest won't cause infinite recursion
-**
-*/
-
-static int subreq_ok(request_rec *r)
-{
-    /*
-     * either not in a subrequest, or in a subrequest
-     * and URIs aren't NULL and sub/main URIs differ
-     */
-    return (r->main == NULL
-            || (r->main->uri != NULL
-                && r->uri != NULL
-                && strcmp(r->main->uri, r->uri) != 0));
-}
-
-
-/*
-**
-**  stat() for only the prefix of a path
-**
-*/
-
-static int prefix_stat(const char *path, apr_finfo_t *sb)
-{
-    char curpath[LONG_STRING_LEN];
-    char *cp;
-
-    apr_cpystrn(curpath, path, sizeof(curpath));
-    if (curpath[0] != '/') {
-        return 0;
-    }
-    if ((cp = strchr(curpath+1, '/')) != NULL) {
-        *cp = '\0';
-    }
-    if (apr_stat(sb, curpath, APR_FINFO_MIN, NULL) == APR_SUCCESS) {
-        return 1;
-    }
-    else {
-        return 0;
-    }
-}
-
-
-/*
-**
-**  Lexicographic Compare
-**
-*/
-
-static int compare_lexicography(char *cpNum1, char *cpNum2)
-{
-    int i;
-    int n1, n2;
-
-    n1 = strlen(cpNum1);
-    n2 = strlen(cpNum2);
-    if (n1 > n2) {
-        return 1;
-    }
-    if (n1 < n2) {
-        return -1;
-    }
-    for (i = 0; i < n1; i++) {
-        if (cpNum1[i] > cpNum2[i]) {
-            return 1;
-        }
-        if (cpNum1[i] < cpNum2[i]) {
-            return -1;
-        }
-    }
-    return 0;
-}
-
-/*
-**
-**  Bracketed expression handling
-**  s points after the opening bracket
-**
-*/
-
-static char *find_closing_bracket(char *s, int left, int right)
-{
-    int depth;
-
-    for (depth = 1; *s; ++s) {
-        if (*s == right && --depth == 0) {
-            return s;
-        }
-        else if (*s == left) {
-            ++depth;
-        }
-    }
-    return NULL;
-}
-
-static char *find_char_in_brackets(char *s, int c, int left, int right)
-{
-    int depth;
-
-    for (depth = 1; *s; ++s) {
-        if (*s == c && depth == 1) {
-            return s;
-        }
-        else if (*s == right && --depth == 0) {
-            return NULL;
-        }
-        else if (*s == left) {
-            ++depth;
-        }
-    }
-    return NULL;
-}
-
-/*
-**
-** Module paraphernalia
-**
-*/
-
-    /* the apr_table_t of commands we provide */
-static const command_rec command_table[] = {
-    AP_INIT_FLAG(    "RewriteEngine",   cmd_rewriteengine,  NULL, OR_FILEINFO,
-                     "On or Off to enable or disable (default) the whole "
-                     "rewriting engine"),
-    AP_INIT_ITERATE( "RewriteOptions",  cmd_rewriteoptions,  NULL, OR_FILEINFO,
-                     "List of option strings to set"),
-    AP_INIT_TAKE1(   "RewriteBase",     cmd_rewritebase,     NULL, OR_FILEINFO, 
-                     "the base URL of the per-directory context"),
-    AP_INIT_RAW_ARGS("RewriteCond",     cmd_rewritecond,     NULL, OR_FILEINFO,
-                     "an input string and a to be applied regexp-pattern"),
-    AP_INIT_RAW_ARGS("RewriteRule",     cmd_rewriterule,     NULL, OR_FILEINFO,
-                     "an URL-applied regexp-pattern and a substitution URL"),
-    AP_INIT_TAKE2(   "RewriteMap",      cmd_rewritemap,      NULL, RSRC_CONF,
-                     "a mapname and a filename"),
-    AP_INIT_TAKE1(   "RewriteLock",     cmd_rewritelock,     NULL, RSRC_CONF,
-                     "the filename of a lockfile used for inter-process "
-                     "synchronization"),
-    AP_INIT_TAKE1(   "RewriteLog",      cmd_rewritelog,      NULL, RSRC_CONF,
-                     "the filename of the rewriting logfile"),
-    AP_INIT_TAKE1(   "RewriteLogLevel", cmd_rewriteloglevel, NULL, RSRC_CONF,
-                     "the level of the rewriting logfile verbosity "
-                     "(0=none, 1=std, .., 9=max)"),
-    { NULL }
-};
-
-static void register_hooks(apr_pool_t *p)
-{
-    ap_hook_handler(handler_redirect, NULL, NULL, APR_HOOK_MIDDLE);
-    ap_hook_post_config(init_module, NULL, NULL, APR_HOOK_MIDDLE);
-    ap_hook_child_init(init_child, NULL, NULL, APR_HOOK_MIDDLE);
-
-    ap_hook_fixups(hook_fixup, NULL, NULL, APR_HOOK_FIRST);
-    ap_hook_translate_name(hook_uri2file, NULL, NULL, APR_HOOK_FIRST);
-    ap_hook_type_checker(hook_mimetype, NULL, NULL, APR_HOOK_MIDDLE);
-}
-
-    /* the main config structure */
-module AP_MODULE_DECLARE_DATA rewrite_module = {
-   STANDARD20_MODULE_STUFF,
-   config_perdir_create,        /* create per-dir    config structures */
-   config_perdir_merge,         /* merge  per-dir    config structures */
-   config_server_create,        /* create per-server config structures */
-   config_server_merge,         /* merge  per-server config structures */
-   command_table,               /* table of config file commands       */
-   register_hooks               /* register hooks                      */
-};
- 
-/*EOF*/
diff --git a/modules/mappers/mod_rewrite.dsp b/modules/mappers/mod_rewrite.dsp
deleted file mode 100644
index 3f6186d..0000000
--- a/modules/mappers/mod_rewrite.dsp
+++ /dev/null
@@ -1,128 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mod_rewrite" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mod_rewrite - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "mod_rewrite.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "mod_rewrite.mak" CFG="mod_rewrite - Win32 Release"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "mod_rewrite - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mod_rewrite - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "mod_rewrite - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /O2 /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "NO_DBM_REWRITEMAP" /Fd"Release\mod_rewrite" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /map /machine:I386 /out:"Release/mod_rewrite.so" /base:@..\..\os\win32\BaseAddr.ref,mod_rewrite
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /map /machine:I386 /out:"Release/mod_rewrite.so" /base:@..\..\os\win32\BaseAddr.ref,mod_rewrite
-
-!ELSEIF  "$(CFG)" == "mod_rewrite - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "NO_DBM_REWRITEMAP" /Fd"Debug\mod_rewrite" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /map /debug /machine:I386 /out:"Debug/mod_rewrite.so" /base:@..\..\os\win32\BaseAddr.ref,mod_rewrite
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /map /debug /machine:I386 /out:"Debug/mod_rewrite.so" /base:@..\..\os\win32\BaseAddr.ref,mod_rewrite
-
-!ENDIF 
-
-# Begin Target
-
-# Name "mod_rewrite - Win32 Release"
-# Name "mod_rewrite - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\mod_rewrite.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mod_rewrite.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\build\win32\win32ver.awk
-
-!IF  "$(CFG)" == "mod_rewrite - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_rewrite.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ../../build/win32/win32ver.awk mod_rewrite  "rewrite_module for Apache" ../../include/ap_release.h > .\mod_rewrite.rc
-
-# End Custom Build
-
-!ELSEIF  "$(CFG)" == "mod_rewrite - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_rewrite.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ../../build/win32/win32ver.awk mod_rewrite  "rewrite_module for Apache" ../../include/ap_release.h > .\mod_rewrite.rc
-
-# End Custom Build
-
-!ENDIF 
-
-# End Source File
-# End Target
-# End Project
diff --git a/modules/mappers/mod_rewrite.exp b/modules/mappers/mod_rewrite.exp
deleted file mode 100644
index 8f2165b..0000000
--- a/modules/mappers/mod_rewrite.exp
+++ /dev/null
@@ -1 +0,0 @@
-rewrite_module
diff --git a/modules/mappers/mod_rewrite.h b/modules/mappers/mod_rewrite.h
deleted file mode 100644
index 2a42032..0000000
--- a/modules/mappers/mod_rewrite.h
+++ /dev/null
@@ -1,484 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-#ifndef MOD_REWRITE_H
-#define MOD_REWRITE_H 1
-
-/*
-**                       _                            _ _
-**   _ __ ___   ___   __| |    _ __ _____      ___ __(_) |_ ___
-**  | '_ ` _ \ / _ \ / _` |   | '__/ _ \ \ /\ / / '__| | __/ _ \
-**  | | | | | | (_) | (_| |   | | |  __/\ V  V /| |  | | ||  __/
-**  |_| |_| |_|\___/ \__,_|___|_|  \___| \_/\_/ |_|  |_|\__\___|
-**                       |_____|
-**
-**  URL Rewriting Module
-**
-**  This module uses a rule-based rewriting engine (based on a
-**  regular-expression parser) to rewrite requested URLs on the fly.
-**
-**  It supports an unlimited number of additional rule conditions (which can
-**  operate on a lot of variables, even on HTTP headers) for granular
-**  matching and even external database lookups (either via plain text
-**  tables, DBM hash files or even external processes) for advanced URL
-**  substitution.
-**
-**  It operates on the full URLs (including the PATH_INFO part) both in
-**  per-server context (httpd.conf) and per-dir context (.htaccess) and even
-**  can generate QUERY_STRING parts on result.   The rewriting result finally
-**  can lead to internal subprocessing, external request redirection or even
-**  to internal proxy throughput.
-**
-**  This module was originally written in April 1996 and
-**  gifted exclusively to the The Apache Software Foundation in July 1997 by
-**
-**      Ralf S. Engelschall
-**      rse@engelschall.com
-**      www.engelschall.com
-*/
-
-#include "apr.h"
-
-#define APR_WANT_STRFUNC
-#define APR_WANT_MEMFUNC
-#include "apr_want.h"
-
-    /* Include from the underlaying Unix system ... */
-#if APR_HAVE_STDARG_H
-#include <stdarg.h>
-#endif
-#if APR_HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#if APR_HAVE_CTYPE_H
-#include <ctype.h>
-#endif
-#if APR_HAVE_SYS_TYPES_H
-#include <sys/types.h>
-#endif
-
-#if APR_HAS_THREADS
-#include "apr_lock.h"
-#include "apr_thread_mutex.h"
-#endif
-#include "ap_config.h"
-
-    /* Include from the Apache server ... */
-#define CORE_PRIVATE
-#include "httpd.h"
-#include "http_config.h"
-#include "http_request.h"
-#include "http_core.h"
-#include "http_log.h"
-#include "http_vhost.h"
-
-    /*
-     * The key in the r->notes apr_table_t wherein we store our accumulated
-     * Vary values, and the one used for per-condition checks in a chain.
-     */
-#define VARY_KEY "rewrite-Vary"
-#define VARY_KEY_THIS "rewrite-Vary-this"
-
-    /* The NDBM support:
-     * We support only NDBM files.
-     * But we have to stat the file for the mtime,
-     * so we also need to know the file extension
-     */
-#ifndef NO_DBM_REWRITEMAP
-#if defined(__GLIBC__) && defined(__GLIBC_MINOR__) \
-    && __GLIBC__ >= 2 && __GLIBC_MINOR__ >= 1
-#include <db1/ndbm.h>
-#else
-#include <ndbm.h>
-#endif
-#if defined(DBM_SUFFIX)
-#define NDBM_FILE_SUFFIX DBM_SUFFIX
-#elif defined(__FreeBSD__) || (defined(DB_LOCK) && defined(DB_SHMEM))
-#define NDBM_FILE_SUFFIX ".db"
-#else
-#define NDBM_FILE_SUFFIX ".pag"
-#endif
-#endif
-
-
-/*
-**
-**  Some defines
-**
-*/
-
-#define ENVVAR_SCRIPT_URL "SCRIPT_URL"
-#define ENVVAR_SCRIPT_URI "SCRIPT_URI"
-
-#ifndef SUPPORT_DBM_REWRITEMAP
-#define SUPPORT_DBM_REWRITEMAP 0
-#endif
-
-#define REWRITE_FORCED_MIMETYPE_NOTEVAR "rewrite-forced-mimetype"
-
-#define CONDFLAG_NONE               1<<0
-#define CONDFLAG_NOCASE             1<<1
-#define CONDFLAG_NOTMATCH           1<<2
-#define CONDFLAG_ORNEXT             1<<3
-
-#define RULEFLAG_NONE               1<<0
-#define RULEFLAG_FORCEREDIRECT      1<<1
-#define RULEFLAG_LASTRULE           1<<2
-#define RULEFLAG_NEWROUND           1<<3
-#define RULEFLAG_CHAIN              1<<4
-#define RULEFLAG_IGNOREONSUBREQ     1<<5
-#define RULEFLAG_NOTMATCH           1<<6
-#define RULEFLAG_PROXY              1<<7
-#define RULEFLAG_PASSTHROUGH        1<<8
-#define RULEFLAG_FORBIDDEN          1<<9
-#define RULEFLAG_GONE               1<<10
-#define RULEFLAG_QSAPPEND           1<<11
-#define RULEFLAG_NOCASE             1<<12
-#define RULEFLAG_NOESCAPE           1<<13
-
-#define ACTION_NORMAL               1<<0
-#define ACTION_NOESCAPE             1<<1
-
-#define MAPTYPE_TXT                 1<<0
-#define MAPTYPE_DBM                 1<<1
-#define MAPTYPE_PRG                 1<<2
-#define MAPTYPE_INT                 1<<3
-#define MAPTYPE_RND                 1<<4
-
-#define ENGINE_DISABLED             1<<0
-#define ENGINE_ENABLED              1<<1
-
-#define OPTION_NONE                 1<<0
-#define OPTION_INHERIT              1<<1
-
-#define CACHEMODE_TS                1<<0
-#define CACHEMODE_TTL               1<<1
-
-#define CACHE_TLB_ROWS 1024
-#define CACHE_TLB_COLS 4
-
-#ifndef FALSE
-#define FALSE 0
-#define TRUE  !FALSE
-#endif
-
-#ifndef NO
-#define NO    FALSE
-#define YES   TRUE
-#endif
-
-#ifndef RAND_MAX
-#define RAND_MAX 32767
-#endif
-
-#ifndef LONG_STRING_LEN
-#define LONG_STRING_LEN 2048
-#endif
-
-#define MAX_ENV_FLAGS 15
-
-#define MAX_NMATCH    10
-
-/*
-**
-**  our private data structures we handle with
-**
-*/
-
-    /* the list structures for holding the mapfile information
-     * and the rewrite rules
-     */
-typedef struct {
-    const char *name;              /* the name of the map */
-    const char *datafile;          /* filename for map data files */
-    const char *checkfile;         /* filename to check for map existence */
-    int   type;                    /* the type of the map */
-    apr_file_t *fpin;               /* in  file pointer for program maps */
-    apr_file_t *fpout;              /* out file pointer for program maps */
-    apr_file_t *fperr;              /* err file pointer for program maps */
-    char *(*func)(request_rec *,   /* function pointer for internal maps */
-                  char *);
-} rewritemap_entry;
-
-typedef struct {
-    char    *input;                /* Input string of RewriteCond */
-    char    *pattern;              /* the RegExp pattern string */
-    regex_t *regexp;
-    int      flags;                /* Flags which control the match */
-} rewritecond_entry;
-
-typedef struct {
-    apr_array_header_t *rewriteconds;    /* the corresponding RewriteCond entries */
-    char    *pattern;              /* the RegExp pattern string */
-    regex_t *regexp;               /* the RegExp pattern compilation */
-    char    *output;               /* the Substitution string */
-    int      flags;                /* Flags which control the substitution */
-    char    *forced_mimetype;      /* forced MIME type of substitution */
-    int      forced_responsecode;  /* forced HTTP redirect response status */
-    char    *env[MAX_ENV_FLAGS+1]; /* added environment variables */
-    int      skip;                 /* number of next rules to skip */
-} rewriterule_entry;
-
-
-    /* the per-server or per-virtual-server configuration
-     * statically generated once on startup for every server
-     */
-typedef struct {
-    int           state;           /* the RewriteEngine state */
-    int           options;         /* the RewriteOption state */
-    const char   *rewritelogfile;  /* the RewriteLog filename */
-    apr_file_t   *rewritelogfp;    /* the RewriteLog open filepointer */
-    int           rewriteloglevel; /* the RewriteLog level of verbosity */
-    apr_array_header_t *rewritemaps;     /* the RewriteMap entries */
-    apr_array_header_t *rewriteconds;    /* the RewriteCond entries (temporary) */
-    apr_array_header_t *rewriterules;    /* the RewriteRule entries */
-    server_rec   *server;          /* the corresponding server indicator */
-} rewrite_server_conf;
-
-
-    /* the per-directory configuration
-     * generated on-the-fly by Apache server for current request
-     */
-typedef struct {
-    int           state;           /* the RewriteEngine state */
-    int           options;         /* the RewriteOption state */
-    apr_array_header_t *rewriteconds;    /* the RewriteCond entries (temporary) */
-    apr_array_header_t *rewriterules;    /* the RewriteRule entries */
-    char         *directory;       /* the directory where it applies */
-    const char   *baseurl;         /* the base-URL  where it applies */
-} rewrite_perdir_conf;
-
-
-    /* the cache structures,
-     * a 4-way hash apr_table_t with LRU functionality
-     */
-typedef struct cacheentry {
-    apr_time_t time;
-    char  *key;
-    char  *value;
-} cacheentry;
-
-typedef struct tlbentry {
-    int t[CACHE_TLB_COLS];
-} cachetlbentry;
-
-typedef struct cachelist {
-    char         *resource;
-    apr_array_header_t *entries;
-    apr_array_header_t *tlb;
-} cachelist;
-
-typedef struct cache {
-    apr_pool_t         *pool;
-    apr_array_header_t *lists;
-#if APR_HAS_THREADS
-    apr_thread_mutex_t *lock;
-#endif
-} cache;
-
-
-    /* the regex structure for the
-     * substitution of backreferences
-     */
-typedef struct backrefinfo {
-    char *source;
-    int nsub;
-    regmatch_t regmatch[10];
-} backrefinfo;
-
-
-/*
-**
-**  forward declarations
-**
-*/
-
-    /* config structure handling */
-static void *config_server_create(apr_pool_t *p, server_rec *s);
-static void *config_server_merge (apr_pool_t *p, void *basev, void *overridesv);
-static void *config_perdir_create(apr_pool_t *p, char *path);
-static void *config_perdir_merge (apr_pool_t *p, void *basev, void *overridesv);
-
-    /* config directive handling */
-static const char *cmd_rewriteengine(cmd_parms *cmd,
-                                     void *dconf, int flag);
-static const char *cmd_rewriteoptions(cmd_parms *cmd,
-                                      void *dconf,
-                                      const char *option);
-static const char *cmd_rewriteoptions_setoption(apr_pool_t *p, int *options,
-                                                const char *name);
-static const char *cmd_rewritelog     (cmd_parms *cmd, void *dconf, const char *a1);
-static const char *cmd_rewriteloglevel(cmd_parms *cmd, void *dconf, const char *a1);
-static const char *cmd_rewritemap     (cmd_parms *cmd, void *dconf, 
-                                       const char *a1, const char *a2);
-static const char *cmd_rewritelock(cmd_parms *cmd, void *dconf, const char *a1);
-static const char *cmd_rewritebase(cmd_parms *cmd, void *dconf,
-                                   const char *a1);
-static const char *cmd_rewritecond(cmd_parms *cmd, void *dconf,
-                                   const char *str);
-static const char *cmd_rewritecond_parseflagfield(apr_pool_t *p,
-                                                  rewritecond_entry *new,
-                                                  char *str);
-static const char *cmd_rewritecond_setflag(apr_pool_t *p, rewritecond_entry *cfg,
-                                           char *key, char *val);
-static const char *cmd_rewriterule(cmd_parms *cmd, void *dconf,
-                                   const char *str);
-static const char *cmd_rewriterule_parseflagfield(apr_pool_t *p,
-                                                  rewriterule_entry *new,
-                                                  char *str);
-static const char *cmd_rewriterule_setflag(apr_pool_t *p, rewriterule_entry *cfg,
-                                           char *key, char *val);
-
-    /* initialisation */
-static int init_module(apr_pool_t *p,
-                        apr_pool_t *plog,
-                        apr_pool_t *ptemp,
-                        server_rec *s);
-static void init_child(apr_pool_t *p, server_rec *s);
-
-    /* runtime hooks */
-static int hook_uri2file   (request_rec *r);
-static int hook_mimetype   (request_rec *r);
-static int hook_fixup      (request_rec *r);
-static int handler_redirect(request_rec *r);
-
-    /* rewriting engine */
-static int apply_rewrite_list(request_rec *r, apr_array_header_t *rewriterules,
-                              char *perdir);
-static int apply_rewrite_rule(request_rec *r, rewriterule_entry *p,
-                              char *perdir);
-static int apply_rewrite_cond(request_rec *r, rewritecond_entry *p,
-                              char *perdir, backrefinfo *briRR,
-                              backrefinfo *briRC);
-
-static void do_expand(request_rec *r, char *input, char *buffer, int nbuf,
-		      backrefinfo *briRR, backrefinfo *briRC);
-static void do_expand_env(request_rec *r, char *env[],
-			  backrefinfo *briRR, backrefinfo *briRC);
-
-    /* URI transformation function */
-static void  splitout_queryargs(request_rec *r, int qsappend);
-static void  fully_qualify_uri(request_rec *r);
-static void  reduce_uri(request_rec *r);
-static int   is_absolute_uri(char *uri);
-static char *expand_tildepaths(request_rec *r, char *uri);
-
-    /* rewrite map support functions */
-static char *lookup_map(request_rec *r, char *name, char *key);
-static char *lookup_map_txtfile(request_rec *r, const char *file, char *key);
-#ifndef NO_DBM_REWRITEMAP
-static char *lookup_map_dbmfile(request_rec *r, const char *file, char *key);
-#endif
-static char *lookup_map_program(request_rec *r, apr_file_t *fpin,
-                                apr_file_t *fpout, char *key);
-static char *lookup_map_internal(request_rec *r,
-                                 char *(*func)(request_rec *r, char *key),
-                                 char *key);
-static char *rewrite_mapfunc_toupper(request_rec *r, char *key);
-static char *rewrite_mapfunc_tolower(request_rec *r, char *key);
-static char *rewrite_mapfunc_escape(request_rec *r, char *key);
-static char *rewrite_mapfunc_unescape(request_rec *r, char *key);
-static char *select_random_value_part(request_rec *r, char *value);
-static void  rewrite_rand_init(void);
-static int   rewrite_rand(int l, int h);
-
-    /* rewriting logfile support */
-static void  open_rewritelog(server_rec *s, apr_pool_t *p);
-static void  rewritelog(request_rec *r, int level, const char *text, ...)
-                        __attribute__((format(printf,3,4)));
-static char *current_logtime(request_rec *r);
-
-    /* rewriting lockfile support */
-static void rewritelock_create(server_rec *s, apr_pool_t *p);
-static apr_status_t rewritelock_remove(void *data);
-
-    /* program map support */
-static void  run_rewritemap_programs(server_rec *s, apr_pool_t *p);
-static apr_status_t rewritemap_program_child(apr_pool_t *p, const char *progname,
-                                             apr_file_t **fpout, apr_file_t **fpin,
-                                             apr_file_t **fperr);
-
-    /* env variable support */
-static char *lookup_variable(request_rec *r, char *var);
-static char *lookup_header(request_rec *r, const char *name);
-
-    /* caching functions */
-static cache *init_cache(apr_pool_t *p);
-static char  *get_cache_string(cache *c, const char *res, int mode, apr_time_t mtime,
-                               char *key);
-static void   set_cache_string(cache *c, const char *res, int mode, apr_time_t mtime,
-                               char *key, char *value);
-static cacheentry *retrieve_cache_string(cache *c, const char *res, char *key);
-static void   store_cache_string(cache *c, const char *res, cacheentry *ce);
-
-    /* misc functions */
-static char  *subst_prefix_path(request_rec *r, char *input, char *match,
-                                const char *subst);
-static int    parseargline(char *str, char **a1, char **a2, char **a3);
-static int    prefix_stat(const char *path, apr_finfo_t *sb);
-static void   add_env_variable(request_rec *r, char *s);
-static int    subreq_ok(request_rec *r);
-
-    /* Lexicographic Comparison */
-static int compare_lexicography(char *cpNum1, char *cpNum2);
-
-    /* Bracketed expression handling */
-static char *find_closing_bracket(char *s, int left, int right);
-static char *find_char_in_brackets(char *s, int c, int left, int right);
-
-#endif /* MOD_REWRITE_H */
diff --git a/modules/mappers/mod_so.c b/modules/mappers/mod_so.c
deleted file mode 100644
index be2caf0..0000000
--- a/modules/mappers/mod_so.c
+++ /dev/null
@@ -1,367 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-/* 
- * This module is used to load Apache modules at runtime. This means that the
- * server functionality can be extended without recompiling and even without
- * taking the server down at all. Only a HUP or AP_SIG_GRACEFUL signal 
- * needs to be sent to the server to reload the dynamically loaded modules.
- *
- * To use, you'll first need to build your module as a shared library, then
- * update your configuration (httpd.conf) to get the Apache core to load the
- * module at start-up.
- *
- * The easiest way to build a module as a shared library is to use the
- * `SharedModule' command in the Configuration file, instead of `AddModule'.
- * You should also change the file extension from `.o' to `.so'. So, for
- * example, to build the status module as a shared library edit Configuration
- * and change
- *   AddModule    modules/standard/mod_status.o
- * to
- *   SharedModule modules/standard/mod_status.so
- *
- * Run Configure and make. Now Apache's httpd binary will _not_ include
- * mod_status. Instead a shared object called mod_status.so will be build, in
- * the modules/standard directory. You can build most of the modules as shared
- * libraries like this.
- *
- * To use the shared module, move the .so file(s) into an appropriate
- * directory. You might like to create a directory called "modules" under you
- * server root for this (e.g. /usr/local/httpd/modules). 
- *
- * Then edit your conf/httpd.conf file, and add LoadModule lines. For
- * example
- *   LoadModule  status_module   modules/mod_status.so
- *
- * The first argument is the module's structure name (look at the end of the
- * module source to find this). The second option is the path to the module
- * file, relative to the server root.  Put these directives right at the top
- * of your httpd.conf file.
- *
- * Now you can start Apache. A message will be logged at "debug" level to your
- * error_log to confirm that the module(s) are loaded (use "LogLevel debug"
- * directive to get these log messages).
- *
- * If you edit the LoadModule directives while the server is live you can get
- * Apache to re-load the modules by sending it a HUP or AP_SIG_GRACEFUL 
- * signal as normal.  You can use this to dynamically change the capability 
- * of your server without bringing it down.
- *
- * Because currently there is only limited builtin support in the Configure
- * script for creating the shared library files (`.so'), please consult your
- * vendors cc(1), ld(1) and dlopen(3) manpages to find out the appropriate
- * compiler and linker flags and insert them manually into the Configuration
- * file under CFLAGS_SHLIB, LDFLAGS_SHLIB and LDFLAGS_SHLIB_EXPORT.
- *
- * If you still have problems figuring out the flags both try the paper
- *     http://developer.netscape.com/library/documentation/enterprise
- *                                          /unix/svrplug.htm#1013807
- * or install a Perl 5 interpreter on your platform and then run the command
- *
- *     $ perl -V:usedl -V:ccdlflags -V:cccdlflags -V:lddlflags
- *
- * This gives you what type of dynamic loading Perl 5 uses on your platform
- * and which compiler and linker flags Perl 5 uses to create the shared object
- * files.
- *
- * Another location where you can find useful hints is the `ltconfig' script
- * of the GNU libtool 1.2 package. Search for your platform name inside the
- * various "case" constructs.
- *
- */
-
-#include "apr.h"
-#include "apr_dso.h"
-#include "apr_strings.h"
-#include "apr_errno.h"
-
-#define CORE_PRIVATE
-#include "ap_config.h"
-#include "httpd.h"
-#include "http_config.h"
-#include "http_log.h"
-#include "ap_config.h"
-
-module AP_MODULE_DECLARE_DATA so_module;
-
-
-/*
- * Server configuration to keep track of actually
- * loaded modules and the corresponding module name.
- */
-
-typedef struct moduleinfo {
-    const char *name;
-    module *modp;
-} moduleinfo;
-
-typedef struct so_server_conf {
-    apr_array_header_t *loaded_modules;
-} so_server_conf;
-
-static void *so_sconf_create(apr_pool_t *p, server_rec *s)
-{
-    so_server_conf *soc;
-
-    soc = (so_server_conf *)apr_pcalloc(p, sizeof(so_server_conf));
-    soc->loaded_modules = apr_array_make(p, DYNAMIC_MODULE_LIMIT, 
-                                     sizeof(moduleinfo));
-
-    return (void *)soc;
-}
-
-#ifndef NO_DLOPEN
-
-/*
- * This is the cleanup for a loaded shared object. It unloads the module.
- * This is called as a cleanup function from the core.
- */
-
-static apr_status_t unload_module(void *data)
-{
-    moduleinfo *modi = (moduleinfo*)data;
-
-    /* only unload if module information is still existing */
-    if (modi->modp == NULL)
-        return APR_SUCCESS;
-
-    /* remove the module pointer from the core structure */
-    ap_remove_loaded_module(modi->modp);
-
-    /* destroy the module information */
-    modi->modp = NULL;
-    modi->name = NULL;
-    return APR_SUCCESS;
-}
-
-/* 
- * This is called for the directive LoadModule and actually loads
- * a shared object file into the address space of the server process.
- */
-
-static const char *load_module(cmd_parms *cmd, void *dummy, 
-                               const char *modname, const char *filename)
-{
-    apr_dso_handle_t *modhandle;
-    apr_dso_handle_sym_t modsym;
-    module *modp;
-    const char *szModuleFile = ap_server_root_relative(cmd->pool, filename);
-    so_server_conf *sconf;
-    moduleinfo *modi;
-    moduleinfo *modie;
-    int i;
-
-    /* we need to setup this value for dummy to make sure that we don't try
-     * to add a non-existant tree into the build when we return to
-     * execute_now.
-     */
-    *(ap_directive_t **)dummy = NULL;
-
-    if (!szModuleFile) {
-        return apr_pstrcat(cmd->pool, "Invalid LoadModule path ", 
-                           filename, NULL);
-    }
-
-    /* 
-     * check for already existing module
-     * If it already exists, we have nothing to do 
-     */
-    sconf = (so_server_conf *)ap_get_module_config(cmd->server->module_config, 
-	                                        &so_module);
-    modie = (moduleinfo *)sconf->loaded_modules->elts;
-    for (i = 0; i < sconf->loaded_modules->nelts; i++) {
-        modi = &modie[i];
-        if (modi->name != NULL && strcmp(modi->name, modname) == 0) {
-            ap_log_perror(APLOG_MARK, APLOG_WARNING|APLOG_NOERRNO, 0,
-                          cmd->pool, "module %s is already loaded, skipping",
-                          modname);
-            return NULL;
-        }
-    }
-    modi = apr_array_push(sconf->loaded_modules);
-    modi->name = modname;
-
-    /*
-     * Load the file into the Apache address space
-     */
-    if (apr_dso_load(&modhandle, szModuleFile, cmd->pool) != APR_SUCCESS) {
-        char my_error[256];
-
-        return apr_pstrcat(cmd->pool, "Cannot load ", szModuleFile,
-			  " into server: ",
-			  apr_dso_error(modhandle, my_error, sizeof(my_error)),
-			  NULL);
-    }
-    ap_log_perror(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, cmd->pool,
-		 "loaded module %s", modname);
-
-    /*
-     * Retrieve the pointer to the module structure through the module name:
-     * First with the hidden variant (prefix `AP_') and then with the plain
-     * symbol name.
-     */
-    if (apr_dso_sym(&modsym, modhandle, modname) != APR_SUCCESS) {
-        char my_error[256];
-
-	return apr_pstrcat(cmd->pool, "Can't locate API module structure `",
-			  modname, "' in file ", szModuleFile, ": ", 
-			  apr_dso_error(modhandle, my_error, sizeof(my_error)),
-			  NULL);
-    }
-    modp = (module*) modsym;
-    modp->dynamic_load_handle = (apr_dso_handle_t *)modhandle;
-    modi->modp = modp;
-
-    /* 
-     * Make sure the found module structure is really a module structure
-     * 
-     */
-    if (modp->magic != MODULE_MAGIC_COOKIE) {
-        return apr_pstrcat(cmd->pool, "API module structure `", modname,
-                          "' in file ", szModuleFile, " is garbled -"
-                          " perhaps this is not an Apache module DSO?", NULL);
-    }
-
-    /* 
-     * Add this module to the Apache core structures
-     */
-    ap_add_loaded_module(modp, cmd->pool);
-
-    /* 
-     * Register a cleanup in the config apr_pool_t (normally pconf). When
-     * we do a restart (or shutdown) this cleanup will cause the
-     * shared object to be unloaded.
-     */
-    apr_pool_cleanup_register(cmd->pool, modi, unload_module, apr_pool_cleanup_null);
-
-    /* 
-     * Finally we need to run the configuration process for the module
-     */
-    ap_single_module_configure(cmd->pool, cmd->server, modp);
-
-    return NULL;
-}
-
-/* 
- * This implements the LoadFile directive and loads an arbitrary
- * shared object file into the adress space of the server process.
- */
-
-static const char *load_file(cmd_parms *cmd, void *dummy, const char *filename)
-{
-    apr_dso_handle_t *handle;
-    const char *file;
-
-    file = ap_server_root_relative(cmd->pool, filename);
-    
-    if (!file) {
-        return apr_pstrcat(cmd->pool, "Invalid LoadFile path ", 
-                           filename, NULL);
-    }
-
-    if (apr_dso_load(&handle, file, cmd->pool) != APR_SUCCESS) {
-        char my_error[256];
-
-	return apr_pstrcat(cmd->pool, "Cannot load ", filename, 
-			  " into server: ", 
-			  apr_dso_error(handle, my_error, sizeof(my_error)),
-			  NULL);
-    }
-    
-    ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, NULL,
-		 "loaded file %s", filename);
-
-    return NULL;
-}
-
-#else /* not NO_DLOPEN */
-
-static const char *load_file(cmd_parms *cmd, void *dummy, const char *filename)
-{
-    ap_log_perror(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, cmd->pool, 
-                 "WARNING: LoadFile not supported on this platform");
-    return NULL;
-}
-
-static const char *load_module(cmd_parms *cmd, void *dummy, 
-	                       const char *modname, const char *filename)
-{
-    ap_log_perror(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, cmd->pool, 
-                 "WARNING: LoadModule not supported on this platform");
-    return NULL;
-}
-
-#endif /* NO_DLOPEN */
-
-static const command_rec so_cmds[] = {
-    AP_INIT_TAKE2("LoadModule", load_module, NULL, RSRC_CONF | EXEC_ON_READ,
-      "a module name and the name of a shared object file to load it from"),
-    AP_INIT_ITERATE("LoadFile", load_file, NULL, RSRC_CONF  | EXEC_ON_READ,
-      "shared object file or library to load into the server at runtime"),
-    { NULL }
-};
-
-module AP_MODULE_DECLARE_DATA so_module = {
-   STANDARD20_MODULE_STUFF,
-   NULL,			    /* create per-dir config */
-   NULL,			    /* merge per-dir config */
-   so_sconf_create,		/* server config */
-   NULL,			    /* merge server config */
-   so_cmds,			    /* command apr_table_t */
-   NULL				    /* register hooks */
-};
diff --git a/modules/mappers/mod_speling.c b/modules/mappers/mod_speling.c
deleted file mode 100644
index 9377c3f..0000000
--- a/modules/mappers/mod_speling.c
+++ /dev/null
@@ -1,569 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-#include "apr.h"
-#include "apr_file_io.h"
-#include "apr_strings.h"
-#include "apr_lib.h"
-
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-#define WANT_BASENAME_MATCH
-
-#include "httpd.h"
-#include "http_core.h"
-#include "http_config.h"
-#include "http_request.h"
-#include "http_log.h"
-
-/* mod_speling.c - by Alexei Kosut <akosut@organic.com> June, 1996
- *
- * This module is transparent, and simple. It attempts to correct
- * misspellings of URLs that users might have entered, namely by checking
- * capitalizations. If it finds a match, it sends a redirect.
- *
- * 08-Aug-1997 <Martin.Kraemer@Mch.SNI.De>
- * o Upgraded module interface to apache_1.3a2-dev API (more NULL's in
- *   speling_module).
- * o Integrated tcsh's "spelling correction" routine which allows one
- *   misspelling (character insertion/omission/typo/transposition).
- *   Rewrote it to ignore case as well. This ought to catch the majority
- *   of misspelled requests.
- * o Commented out the second pass where files' suffixes are stripped.
- *   Given the better hit rate of the first pass, this rather ugly
- *   (request index.html, receive index.db ?!?!) solution can be
- *   omitted.
- * o wrote a "kind of" html page for mod_speling
- *
- * Activate it with "CheckSpelling On"
- */
-
-module AP_MODULE_DECLARE_DATA speling_module;
-
-typedef struct {
-    int enabled;
-} spconfig;
-
-/*
- * Create a configuration specific to this module for a server or directory
- * location, and fill it with the default settings.
- *
- * The API says that in the absence of a merge function, the record for the
- * closest ancestor is used exclusively.  That's what we want, so we don't
- * bother to have such a function.
- */
-
-static void *mkconfig(apr_pool_t *p)
-{
-    spconfig *cfg = apr_pcalloc(p, sizeof(spconfig));
-
-    cfg->enabled = 0;
-    return cfg;
-}
-
-/*
- * Respond to a callback to create configuration record for a server or
- * vhost environment.
- */
-static void *create_mconfig_for_server(apr_pool_t *p, server_rec *s)
-{
-    return mkconfig(p);
-}
-
-/*
- * Respond to a callback to create a config record for a specific directory.
- */
-static void *create_mconfig_for_directory(apr_pool_t *p, char *dir)
-{
-    return mkconfig(p);
-}
-
-/*
- * Handler for the CheckSpelling directive, which is FLAG.
- */
-static const char *set_speling(cmd_parms *cmd, void *mconfig, int arg)
-{
-    spconfig *cfg = (spconfig *) mconfig;
-
-    cfg->enabled = arg;
-    return NULL;
-}
-
-/*
- * Define the directives specific to this module.  This structure is referenced
- * later by the 'module' structure.
- */
-static const command_rec speling_cmds[] =
-{
-    AP_INIT_FLAG("CheckSpelling", set_speling, NULL, OR_OPTIONS,
-                 "whether or not to fix miscapitalized/misspelled requests"),
-    { NULL }
-};
-
-typedef enum {
-    SP_IDENTICAL = 0,
-    SP_MISCAPITALIZED = 1,
-    SP_TRANSPOSITION = 2,
-    SP_MISSINGCHAR = 3,
-    SP_EXTRACHAR = 4,
-    SP_SIMPLETYPO = 5,
-    SP_VERYDIFFERENT = 6
-} sp_reason;
-
-static const char *sp_reason_str[] =
-{
-    "identical",
-    "miscapitalized",
-    "transposed characters",
-    "character missing",
-    "extra character",
-    "mistyped character",
-    "common basename",
-};
-
-typedef struct {
-    const char *name;
-    sp_reason quality;
-} misspelled_file;
-
-/*
- * spdist() is taken from Kernighan & Pike,
- *  _The_UNIX_Programming_Environment_
- * and adapted somewhat to correspond better to psychological reality.
- * (Note the changes to the return values)
- *
- * According to Pollock and Zamora, CACM April 1984 (V. 27, No. 4),
- * page 363, the correct order for this is:
- * OMISSION = TRANSPOSITION > INSERTION > SUBSTITUTION
- * thus, it was exactly backwards in the old version. -- PWP
- *
- * This routine was taken out of tcsh's spelling correction code
- * (tcsh-6.07.04) and re-converted to apache data types ("char" type
- * instead of tcsh's NLS'ed "Char"). Plus it now ignores the case
- * during comparisons, so is a "approximate strcasecmp()".
- * NOTE that is still allows only _one_ real "typo",
- * it does NOT try to correct multiple errors.
- */
-
-static sp_reason spdist(const char *s, const char *t)
-{
-    for (; apr_tolower(*s) == apr_tolower(*t); t++, s++) {
-        if (*t == '\0') {
-            return SP_MISCAPITALIZED;   /* exact match (sans case) */
-	}
-    }
-    if (*s) {
-        if (*t) {
-            if (s[1] && t[1] && apr_tolower(*s) == apr_tolower(t[1])
-		&& apr_tolower(*t) == apr_tolower(s[1])
-		&& strcasecmp(s + 2, t + 2) == 0) {
-                return SP_TRANSPOSITION;        /* transposition */
-	    }
-            if (strcasecmp(s + 1, t + 1) == 0) {
-                return SP_SIMPLETYPO;   /* 1 char mismatch */
-	    }
-        }
-        if (strcasecmp(s + 1, t) == 0) {
-            return SP_EXTRACHAR;        /* extra character */
-	}
-    }
-    if (*t && strcasecmp(s, t + 1) == 0) {
-        return SP_MISSINGCHAR;  /* missing character */
-    }
-    return SP_VERYDIFFERENT;    /* distance too large to fix. */
-}
-
-static int sort_by_quality(const void *left, const void *rite)
-{
-    return (int) (((misspelled_file *) left)->quality)
-        - (int) (((misspelled_file *) rite)->quality);
-}
-
-static int check_speling(request_rec *r)
-{
-    spconfig *cfg;
-    char *good, *bad, *postgood, *url;
-    apr_finfo_t dirent;
-    int filoc, dotloc, urlen, pglen;
-    apr_array_header_t *candidates = NULL;
-    apr_dir_t          *dir;
-
-    cfg = ap_get_module_config(r->per_dir_config, &speling_module);
-    if (!cfg->enabled) {
-        return DECLINED;
-    }
-
-    /* We only want to worry about GETs */
-    if (r->method_number != M_GET) {
-        return DECLINED;
-    }
-
-    /* We've already got a file of some kind or another */
-    if (r->proxyreq || (r->finfo.filetype != 0)) {
-        return DECLINED;
-    }
-
-    /* This is a sub request - don't mess with it */
-    if (r->main) {
-        return DECLINED;
-    }
-
-    /*
-     * The request should end up looking like this:
-     * r->uri: /correct-url/mispelling/more
-     * r->filename: /correct-file/mispelling r->path_info: /more
-     *
-     * So we do this in steps. First break r->filename into two pieces
-     */
-
-    filoc = ap_rind(r->filename, '/');
-    /*
-     * Don't do anything if the request doesn't contain a slash, or
-     * requests "/" 
-     */
-    if (filoc == -1 || strcmp(r->uri, "/") == 0) {
-        return DECLINED;
-    }
-
-    /* good = /correct-file */
-    good = apr_pstrndup(r->pool, r->filename, filoc);
-    /* bad = mispelling */
-    bad = apr_pstrdup(r->pool, r->filename + filoc + 1);
-    /* postgood = mispelling/more */
-    postgood = apr_pstrcat(r->pool, bad, r->path_info, NULL);
-
-    urlen = strlen(r->uri);
-    pglen = strlen(postgood);
-
-    /* Check to see if the URL pieces add up */
-    if (strcmp(postgood, r->uri + (urlen - pglen))) {
-        return DECLINED;
-    }
-
-    /* url = /correct-url */
-    url = apr_pstrndup(r->pool, r->uri, (urlen - pglen));
-
-    /* Now open the directory and do ourselves a check... */
-    if (apr_dir_open(&dir, good, r->pool) != APR_SUCCESS) {
-        /* Oops, not a directory... */
-        return DECLINED;
-    }
-
-    candidates = apr_array_make(r->pool, 2, sizeof(misspelled_file));
-
-    dotloc = ap_ind(bad, '.');
-    if (dotloc == -1) {
-        dotloc = strlen(bad);
-    }
-
-    while (apr_dir_read(&dirent, APR_FINFO_DIRENT, dir) == APR_SUCCESS) {
-        sp_reason q;
-
-        /*
-         * If we end up with a "fixed" URL which is identical to the
-         * requested one, we must have found a broken symlink or some such.
-         * Do _not_ try to redirect this, it causes a loop!
-         */
-        if (strcmp(bad, dirent.name) == 0) {
-            apr_dir_close(dir);
-            return OK;
-        }
-
-        /*
-         * miscapitalization errors are checked first (like, e.g., lower case
-         * file, upper case request)
-         */
-        else if (strcasecmp(bad, dirent.name) == 0) {
-            misspelled_file *sp_new;
-
-	    sp_new = (misspelled_file *) apr_array_push(candidates);
-            sp_new->name = apr_pstrdup(r->pool, dirent.name);
-            sp_new->quality = SP_MISCAPITALIZED;
-        }
-
-        /*
-         * simple typing errors are checked next (like, e.g.,
-         * missing/extra/transposed char)
-         */
-        else if ((q = spdist(bad, dirent.name)) != SP_VERYDIFFERENT) {
-            misspelled_file *sp_new;
-
-	    sp_new = (misspelled_file *) apr_array_push(candidates);
-            sp_new->name = apr_pstrdup(r->pool, dirent.name);
-            sp_new->quality = q;
-        }
-
-        /*
-	 * The spdist() should have found the majority of the misspelled
-	 * requests.  It is of questionable use to continue looking for
-	 * files with the same base name, but potentially of totally wrong
-	 * type (index.html <-> index.db).
-	 * I would propose to not set the WANT_BASENAME_MATCH define.
-         *      08-Aug-1997 <Martin.Kraemer@Mch.SNI.De>
-         *
-         * However, Alexei replied giving some reasons to add it anyway:
-         * > Oh, by the way, I remembered why having the
-         * > extension-stripping-and-matching stuff is a good idea:
-         * >
-         * > If you're using MultiViews, and have a file named foobar.html,
-	 * > which you refer to as "foobar", and someone tried to access
-	 * > "Foobar", mod_speling won't find it, because it won't find
-	 * > anything matching that spelling. With the extension-munging,
-	 * > it would locate "foobar.html". Not perfect, but I ran into
-	 * > that problem when I first wrote the module.
-	 */
-        else {
-#ifdef WANT_BASENAME_MATCH
-            /*
-             * Okay... we didn't find anything. Now we take out the hard-core
-             * power tools. There are several cases here. Someone might have
-             * entered a wrong extension (.htm instead of .html or vice
-             * versa) or the document could be negotiated. At any rate, now
-             * we just compare stuff before the first dot. If it matches, we
-             * figure we got us a match. This can result in wrong things if
-             * there are files of different content types but the same prefix
-             * (e.g. foo.gif and foo.html) This code will pick the first one
-             * it finds. Better than a Not Found, though.
-             */
-            int entloc = ap_ind(dirent.name, '.');
-            if (entloc == -1) {
-                entloc = strlen(dirent.name);
-	    }
-
-            if ((dotloc == entloc)
-                && !strncasecmp(bad, dirent.name, dotloc)) {
-                misspelled_file *sp_new;
-
-		sp_new = (misspelled_file *) apr_array_push(candidates);
-                sp_new->name = apr_pstrdup(r->pool, dirent.name);
-                sp_new->quality = SP_VERYDIFFERENT;
-            }
-#endif
-        }
-    }
-    apr_dir_close(dir);
-
-    if (candidates->nelts != 0) {
-        /* Wow... we found us a mispelling. Construct a fixed url */
-        char *nuri;
-	const char *ref;
-        misspelled_file *variant = (misspelled_file *) candidates->elts;
-        int i;
-
-        ref = apr_table_get(r->headers_in, "Referer");
-
-        qsort((void *) candidates->elts, candidates->nelts,
-              sizeof(misspelled_file), sort_by_quality);
-
-        /*
-         * Conditions for immediate redirection: 
-         *     a) the first candidate was not found by stripping the suffix 
-         * AND b) there exists only one candidate OR the best match is not
-	 *        ambiguous
-         * then return a redirection right away.
-         */
-        if (variant[0].quality != SP_VERYDIFFERENT
-	    && (candidates->nelts == 1
-		|| variant[0].quality != variant[1].quality)) {
-
-            nuri = ap_escape_uri(r->pool, apr_pstrcat(r->pool, url,
-						     variant[0].name,
-						     r->path_info, NULL));
-	    if (r->parsed_uri.query)
-		nuri = apr_pstrcat(r->pool, nuri, "?", r->parsed_uri.query, NULL);
-
-            apr_table_setn(r->headers_out, "Location",
-			  ap_construct_url(r->pool, nuri, r));
-
-            ap_log_rerror(APLOG_MARK, APLOG_NOERRNO | APLOG_INFO, APR_SUCCESS,
-			  r, 
-			  ref ? "Fixed spelling: %s to %s from %s"
-			      : "Fixed spelling: %s to %s",
-			  r->uri, nuri, ref);
-
-            return HTTP_MOVED_PERMANENTLY;
-        }
-        /*
-         * Otherwise, a "[300] Multiple Choices" list with the variants is
-         * returned.
-         */
-        else {
-            apr_pool_t *p;
-            apr_table_t *notes;
-	    apr_pool_t *sub_pool;
-	    apr_array_header_t *t;
-	    apr_array_header_t *v;
-
-
-            if (r->main == NULL) {
-                p = r->pool;
-                notes = r->notes;
-            }
-            else {
-                p = r->main->pool;
-                notes = r->main->notes;
-            }
-
-	    if (apr_pool_create(&sub_pool, p) != APR_SUCCESS)
-		return DECLINED;
-
-	    t = apr_array_make(sub_pool, candidates->nelts * 8 + 8,
-			      sizeof(char *));
-	    v = apr_array_make(sub_pool, candidates->nelts * 5,
-			      sizeof(char *));
-
-            /* Generate the response text. */
-
-	    *(const char **)apr_array_push(t) =
-			  "The document name you requested (<code>";
-	    *(const char **)apr_array_push(t) = ap_escape_html(sub_pool, r->uri);
-	    *(const char **)apr_array_push(t) =
-			   "</code>) could not be found on this server.\n"
-			   "However, we found documents with names similar "
-			   "to the one you requested.<p>"
-			   "Available documents:\n<ul>\n";
-
-            for (i = 0; i < candidates->nelts; ++i) {
-		char *vuri;
-		const char *reason;
-
-		reason = sp_reason_str[(int) (variant[i].quality)];
-                /* The format isn't very neat... */
-		vuri = apr_pstrcat(sub_pool, url, variant[i].name, r->path_info,
-				  (r->parsed_uri.query != NULL) ? "?" : "",
-				  (r->parsed_uri.query != NULL)
-				      ? r->parsed_uri.query : "",
-				  NULL);
-		*(const char **)apr_array_push(v) = "\"";
-		*(const char **)apr_array_push(v) = ap_escape_uri(sub_pool, vuri);
-		*(const char **)apr_array_push(v) = "\";\"";
-		*(const char **)apr_array_push(v) = reason;
-		*(const char **)apr_array_push(v) = "\"";
-
-		*(const char **)apr_array_push(t) = "<li><a href=\"";
-		*(const char **)apr_array_push(t) = ap_escape_uri(sub_pool, vuri);
-		*(const char **)apr_array_push(t) = "\">";
-		*(const char **)apr_array_push(t) = ap_escape_html(sub_pool, vuri);
-		*(const char **)apr_array_push(t) = "</a> (";
-		*(const char **)apr_array_push(t) = reason;
-		*(const char **)apr_array_push(t) = ")\n";
-
-                /*
-                 * when we have printed the "close matches" and there are
-                 * more "distant matches" (matched by stripping the suffix),
-                 * then we insert an additional separator text to suggest
-                 * that the user LOOK CLOSELY whether these are really the
-                 * files she wanted.
-                 */
-                if (i > 0 && i < candidates->nelts - 1
-                    && variant[i].quality != SP_VERYDIFFERENT
-                    && variant[i + 1].quality == SP_VERYDIFFERENT) {
-		    *(const char **)apr_array_push(t) = 
-				   "</ul>\nFurthermore, the following related "
-				   "documents were found:\n<ul>\n";
-                }
-            }
-	    *(const char **)apr_array_push(t) = "</ul>\n";
-
-            /* If we know there was a referring page, add a note: */
-            if (ref != NULL) {
-                *(const char **)apr_array_push(t) =
-			       "Please consider informing the owner of the "
-			       "<a href=\"";
-		*(const char **)apr_array_push(t) = ap_escape_uri(sub_pool, ref);
-                *(const char **)apr_array_push(t) = "\">referring page</a> "
-			       "about the broken link.\n";
-	    }
-
-
-            /* Pass our apr_table_t to http_protocol.c (see mod_negotiation): */
-            apr_table_setn(notes, "variant-list", apr_array_pstrcat(p, t, 0));
-
-	    apr_table_mergen(r->subprocess_env, "VARIANTS",
-			    apr_array_pstrcat(p, v, ','));
-	  
-	    apr_pool_destroy(sub_pool);
-
-            ap_log_rerror(APLOG_MARK, APLOG_NOERRNO | APLOG_INFO, 0, r,
-			 ref ? "Spelling fix: %s: %d candidates from %s"
-			     : "Spelling fix: %s: %d candidates",
-			 r->uri, candidates->nelts, ref);
-
-            return HTTP_MULTIPLE_CHOICES;
-        }
-    }
-
-    return OK;
-}
-
-static void register_hooks(apr_pool_t *p)
-{
-    ap_hook_fixups(check_speling,NULL,NULL,APR_HOOK_LAST);
-}
-
-module AP_MODULE_DECLARE_DATA speling_module =
-{
-    STANDARD20_MODULE_STUFF,
-    create_mconfig_for_directory,  /* create per-dir config */
-    NULL,                       /* merge per-dir config */
-    create_mconfig_for_server,  /* server config */
-    NULL,                       /* merge server config */
-    speling_cmds,               /* command apr_table_t */
-    register_hooks		/* register hooks */
-};
diff --git a/modules/mappers/mod_speling.dsp b/modules/mappers/mod_speling.dsp
deleted file mode 100644
index 1a977d6..0000000
--- a/modules/mappers/mod_speling.dsp
+++ /dev/null
@@ -1,128 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mod_speling" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mod_speling - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "mod_speling.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "mod_speling.mak" CFG="mod_speling - Win32 Release"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "mod_speling - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mod_speling - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "mod_speling - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /O2 /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Release\mod_speling" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /map /machine:I386 /out:"Release/mod_speling.so" /base:@..\..\os\win32\BaseAddr.ref,mod_speling
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /map /machine:I386 /out:"Release/mod_speling.so" /base:@..\..\os\win32\BaseAddr.ref,mod_speling
-
-!ELSEIF  "$(CFG)" == "mod_speling - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Debug\mod_speling" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /map /debug /machine:I386 /out:"Debug/mod_speling.so" /base:@..\..\os\win32\BaseAddr.ref,mod_speling
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /map /debug /machine:I386 /out:"Debug/mod_speling.so" /base:@..\..\os\win32\BaseAddr.ref,mod_speling
-
-!ENDIF 
-
-# Begin Target
-
-# Name "mod_speling - Win32 Release"
-# Name "mod_speling - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\mod_speling.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mod_speling.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\build\win32\win32ver.awk
-
-!IF  "$(CFG)" == "mod_speling - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_speling.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ../../build/win32/win32ver.awk mod_speling  "speling_module for Apache" ../../include/ap_release.h > .\mod_speling.rc
-
-# End Custom Build
-
-!ELSEIF  "$(CFG)" == "mod_speling - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_speling.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ../../build/win32/win32ver.awk mod_speling  "speling_module for Apache" ../../include/ap_release.h > .\mod_speling.rc
-
-# End Custom Build
-
-!ENDIF 
-
-# End Source File
-# End Target
-# End Project
diff --git a/modules/mappers/mod_speling.exp b/modules/mappers/mod_speling.exp
deleted file mode 100644
index a6ee8b5..0000000
--- a/modules/mappers/mod_speling.exp
+++ /dev/null
@@ -1 +0,0 @@
-speling_module
diff --git a/modules/mappers/mod_userdir.c b/modules/mappers/mod_userdir.c
deleted file mode 100644
index 9a6871e..0000000
--- a/modules/mappers/mod_userdir.c
+++ /dev/null
@@ -1,398 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-/*
- * mod_userdir... implement the UserDir command.  Broken away from the
- * Alias stuff for a couple of good and not-so-good reasons:
- *
- * 1) It shows a real minimal working example of how to do something like
- *    this.
- * 2) I know people who are actually interested in changing this *particular*
- *    aspect of server functionality without changing the rest of it.  That's
- *    what this whole modular arrangement is supposed to be good at...
- *
- * Modified by Alexei Kosut to support the following constructs
- * (server running at www.foo.com, request for /~bar/one/two.html)
- *
- * UserDir public_html      -> ~bar/public_html/one/two.html
- * UserDir /usr/web         -> /usr/web/bar/one/two.html
- * UserDir /home/ * /www     -> /home/bar/www/one/two.html
- *  NOTE: theses ^ ^ space only added allow it to work in a comment, ignore
- * UserDir http://x/users   -> (302) http://x/users/bar/one/two.html
- * UserDir http://x/ * /y     -> (302) http://x/bar/y/one/two.html
- *  NOTE: here also ^ ^
- *
- * In addition, you can use multiple entries, to specify alternate
- * user directories (a la Directory Index). For example:
- *
- * UserDir public_html /usr/web http://www.xyz.com/users
- *
- * Modified by Ken Coar to provide for the following:
- *
- * UserDir disable[d] username ...
- * UserDir enable[d] username ...
- *
- * If "disabled" has no other arguments, *all* ~<username> references are
- * disabled, except those explicitly turned on with the "enabled" keyword.
- */
-
-#include "apr_strings.h"
-#include "apr_user.h"
-
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-#if APR_HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include "ap_config.h"
-#include "httpd.h"
-#include "http_config.h"
-#include "http_request.h"
-
-#if !defined(WIN32) && !defined(OS2) && !defined(BEOS) && !defined(NETWARE)
-#define HAVE_UNIX_SUEXEC
-#endif
-
-#ifdef HAVE_UNIX_SUEXEC
-#include "unixd.h"        /* Contains the suexec_identity hook used on Unix */
-#endif
-
-
-/* The default directory in user's home dir */
-#ifndef DEFAULT_USER_DIR
-#define DEFAULT_USER_DIR "public_html"
-#endif
-
-module AP_MODULE_DECLARE_DATA userdir_module;
-
-typedef struct {
-    int globally_disabled;
-    char *userdir;
-    apr_table_t *enabled_users;
-    apr_table_t *disabled_users;
-} userdir_config;
-
-/*
- * Server config for this module: global disablement flag, a list of usernames
- * ineligible for UserDir access, a list of those immune to global (but not
- * explicit) disablement, and the replacement string for all others.
- */
-
-static void *create_userdir_config(apr_pool_t *p, server_rec *s)
-{
-    userdir_config *newcfg = apr_pcalloc(p, sizeof(*newcfg));
-
-    newcfg->globally_disabled = 0;
-    newcfg->userdir = DEFAULT_USER_DIR;
-    newcfg->enabled_users = apr_table_make(p, 4);
-    newcfg->disabled_users = apr_table_make(p, 4);
-
-    return newcfg;
-}
-
-#define O_DEFAULT 0
-#define O_ENABLE 1
-#define O_DISABLE 2
-
-static const char *set_user_dir(cmd_parms *cmd, void *dummy, const char *arg)
-{
-    userdir_config *s_cfg = ap_get_module_config(cmd->server->module_config,
-                                                 &userdir_module);
-    char *username;
-    const char *usernames = arg;
-    char *kw = ap_getword_conf(cmd->pool, &usernames);
-    apr_table_t *usertable;
-
-    /*
-     * Let's do the comparisons once.
-     */
-    if ((!strcasecmp(kw, "disable")) || (!strcasecmp(kw, "disabled"))) {
-        /*
-         * If there are no usernames specified, this is a global disable - we
-         * need do no more at this point than record the fact.
-         */
-        if (strlen(usernames) == 0) {
-            s_cfg->globally_disabled = 1;
-            return NULL;
-        }
-        usertable = s_cfg->disabled_users;
-    }
-    else if ((!strcasecmp(kw, "enable")) || (!strcasecmp(kw, "enabled"))) {
-        /*
-         * The "disable" keyword can stand alone or take a list of names, but
-         * the "enable" keyword requires the list.  Whinge if it doesn't have
-         * it.
-         */
-        if (strlen(usernames) == 0) {
-            return "UserDir \"enable\" keyword requires a list of usernames";
-        }
-        usertable = s_cfg->enabled_users;
-    }
-    else {
-        /*
-         * If the first (only?) value isn't one of our keywords, just copy
-         * the string to the userdir string.
-         */
-        s_cfg->userdir = apr_pstrdup(cmd->pool, arg);
-        return NULL;
-    }
-    /*
-     * Now we just take each word in turn from the command line and add it to
-     * the appropriate table.
-     */
-    while (*usernames) {
-        username = ap_getword_conf(cmd->pool, &usernames);
-        apr_table_setn(usertable, username, kw);
-    }
-    return NULL;
-}
-
-static const command_rec userdir_cmds[] = {
-    AP_INIT_RAW_ARGS("UserDir", set_user_dir, NULL, RSRC_CONF,
-                     "the public subdirectory in users' home directories, or "
-                     "'disabled', or 'disabled username username...', or "
-                     "'enabled username username...'"),
-    {NULL}
-};
-
-static int translate_userdir(request_rec *r)
-{
-    ap_conf_vector_t *server_conf = r->server->module_config;
-    const userdir_config *s_cfg = ap_get_module_config(server_conf,
-                                                       &userdir_module);
-    char *name = r->uri;
-    const char *userdirs = s_cfg->userdir;
-    const char *w, *dname;
-    char *redirect;
-    char *x = NULL;
-    apr_finfo_t statbuf;
-
-    /*
-     * If the URI doesn't match our basic pattern, we've nothing to do with
-     * it.
-     */
-    if (s_cfg->userdir == NULL || name[0] != '/' || name[1] != '~') {
-        return DECLINED;
-    }
-
-    dname = name + 2;
-    w = ap_getword(r->pool, &dname, '/');
-
-    /*
-     * The 'dname' funny business involves backing it up to capture the '/'
-     * delimiting the "/~user" part from the rest of the URL, in case there
-     * was one (the case where there wasn't being just "GET /~user HTTP/1.0",
-     * for which we don't want to tack on a '/' onto the filename).
-     */
-
-    if (dname[-1] == '/') {
-        --dname;
-    }
-
-    /*
-     * If there's no username, it's not for us.  Ignore . and .. as well.
-     */
-    if (w[0] == '\0' || (w[1] == '.' && (w[2] == '\0' || (w[2] == '.' && w[3] == '\0')))) {
-        return DECLINED;
-    }
-    /*
-     * Nor if there's an username but it's in the disabled list.
-     */
-    if (apr_table_get(s_cfg->disabled_users, w) != NULL) {
-        return DECLINED;
-    }
-    /*
-     * If there's a global interdiction on UserDirs, check to see if this
-     * name is one of the Blessed.
-     */
-    if (s_cfg->globally_disabled
-        && apr_table_get(s_cfg->enabled_users, w) == NULL) {
-        return DECLINED;
-    }
-
-    /*
-     * Special cases all checked, onward to normal substitution processing.
-     */
-
-    while (*userdirs) {
-        const char *userdir = ap_getword_conf(r->pool, &userdirs);
-        char *filename = NULL;
-        apr_status_t rv;
-        int is_absolute = ap_os_is_path_absolute(r->pool, userdir);
-
-        if (ap_strchr_c(userdir, '*'))
-            x = ap_getword(r->pool, &userdir, '*');
-
-        if (userdir[0] == '\0' || is_absolute) {
-            if (x) {
-#ifdef HAVE_DRIVE_LETTERS
-                /*
-                 * Crummy hack. Need to figure out whether we have been
-                 * redirected to a URL or to a file on some drive. Since I
-                 * know of no protocols that are a single letter, ignore
-                 * a : as the first or second character, and assume a file 
-                 * was specified
-                 */
-                if (strchr(x + 2, ':'))
-#else
-                if (strchr(x, ':') && !is_absolute)
-#endif /* HAVE_DRIVE_LETTERS */
-                {
-                    redirect = apr_pstrcat(r->pool, x, w, userdir, dname, NULL);
-                    apr_table_setn(r->headers_out, "Location", redirect);
-                    return HTTP_MOVED_TEMPORARILY;
-                }
-                else
-                    filename = apr_pstrcat(r->pool, x, w, userdir, NULL);
-            }
-            else
-                filename = apr_pstrcat(r->pool, userdir, "/", w, NULL);
-        }
-        else if (ap_strchr_c(userdir, ':')) {
-            redirect = apr_pstrcat(r->pool, userdir, "/", w, dname, NULL);
-            apr_table_setn(r->headers_out, "Location", redirect);
-            return HTTP_MOVED_TEMPORARILY;
-        }
-        else {
-#if APR_HAS_USER
-            char *homedir;
-
-            if (apr_get_home_directory(&homedir, w, r->pool) == APR_SUCCESS) {
-                filename = apr_pstrcat(r->pool, homedir, "/", userdir, NULL);
-            }
-            else {
-                return DECLINED;
-            }
-#else
-            return DECLINED;
-#endif
-        }
-
-        /*
-         * Now see if it exists, or we're at the last entry. If we are at the
-         * last entry, then use the filename generated (if there is one)
-         * anyway, in the hope that some handler might handle it. This can be
-         * used, for example, to run a CGI script for the user.
-         */
-        if (filename && (!*userdirs 
-                      || ((rv = apr_stat(&statbuf, filename, APR_FINFO_MIN,
-                                         r->pool)) == APR_SUCCESS
-                                             || rv == APR_INCOMPLETE))) {
-            r->filename = apr_pstrcat(r->pool, filename, dname, NULL);
-	    /* XXX: Does this walk us around FollowSymLink rules?
-             * When statbuf contains info on r->filename we can save a syscall
-	     * by copying it to r->finfo
-	     */
-	    if (*userdirs && dname[0] == 0)
-		r->finfo = statbuf;
-
-            /* For use in the get_suexec_identity phase */
-            apr_table_setn(r->notes, "mod_userdir_user", w);
-
-            return OK;
-        }
-    }
-
-    return DECLINED;
-}
-
-#ifdef HAVE_UNIX_SUEXEC
-static ap_unix_identity_t *get_suexec_id_doer(const request_rec *r)
-{
-    ap_unix_identity_t *ugid = NULL;
-#if APR_HAS_USER
-    const char *username = apr_table_get(r->notes, "mod_userdir_user");
-
-    if (username == NULL) {
-        return NULL;
-    }
-
-    if ((ugid = apr_palloc(r->pool, sizeof(ap_unix_identity_t *))) == NULL) {
-        return NULL;
-    }
-
-    if (apr_get_userid(&ugid->uid, &ugid->gid, username, r->pool) != APR_SUCCESS) {
-        return NULL;
-    }
-
-#endif 
-    return ugid;
-}
-#endif /* HAVE_UNIX_SUEXEC */
-
-static void register_hooks(apr_pool_t *p)
-{
-    static const char * const aszSucc[]={ "mod_alias.c",NULL };
-
-    ap_hook_translate_name(translate_userdir,NULL,aszSucc,APR_HOOK_MIDDLE);
-#ifdef HAVE_UNIX_SUEXEC
-    ap_hook_get_suexec_identity(get_suexec_id_doer,NULL,NULL,APR_HOOK_MIDDLE);
-#endif
-}
-
-module AP_MODULE_DECLARE_DATA userdir_module = {
-    STANDARD20_MODULE_STUFF,
-    NULL,                       /* dir config creater */
-    NULL,                       /* dir merger --- default is to override */
-    create_userdir_config,      /* server config */
-    NULL,                       /* merge server config */
-    userdir_cmds,               /* command apr_table_t */
-    register_hooks              /* register hooks */
-};
diff --git a/modules/mappers/mod_userdir.dsp b/modules/mappers/mod_userdir.dsp
deleted file mode 100644
index be606a9..0000000
--- a/modules/mappers/mod_userdir.dsp
+++ /dev/null
@@ -1,128 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mod_userdir" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mod_userdir - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "mod_userdir.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "mod_userdir.mak" CFG="mod_userdir - Win32 Release"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "mod_userdir - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mod_userdir - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "mod_userdir - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /O2 /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Release\mod_userdir" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /map /machine:I386 /out:"Release/mod_userdir.so" /base:@..\..\os\win32\BaseAddr.ref,mod_userdir
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /map /machine:I386 /out:"Release/mod_userdir.so" /base:@..\..\os\win32\BaseAddr.ref,mod_userdir
-
-!ELSEIF  "$(CFG)" == "mod_userdir - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Debug\mod_userdir" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /map /debug /machine:I386 /out:"Debug/mod_userdir.so" /base:@..\..\os\win32\BaseAddr.ref,mod_userdir
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /map /debug /machine:I386 /out:"Debug/mod_userdir.so" /base:@..\..\os\win32\BaseAddr.ref,mod_userdir
-
-!ENDIF 
-
-# Begin Target
-
-# Name "mod_userdir - Win32 Release"
-# Name "mod_userdir - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\mod_userdir.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mod_userdir.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\build\win32\win32ver.awk
-
-!IF  "$(CFG)" == "mod_userdir - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_userdir.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ../../build/win32/win32ver.awk mod_userdir  "userdir_module for Apache" ../../include/ap_release.h > .\mod_userdir.rc
-
-# End Custom Build
-
-!ELSEIF  "$(CFG)" == "mod_userdir - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_userdir.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ../../build/win32/win32ver.awk mod_userdir  "userdir_module for Apache" ../../include/ap_release.h > .\mod_userdir.rc
-
-# End Custom Build
-
-!ENDIF 
-
-# End Source File
-# End Target
-# End Project
diff --git a/modules/mappers/mod_userdir.exp b/modules/mappers/mod_userdir.exp
deleted file mode 100644
index 6b8b81d..0000000
--- a/modules/mappers/mod_userdir.exp
+++ /dev/null
@@ -1 +0,0 @@
-userdir_module
diff --git a/modules/mappers/mod_vhost_alias.c b/modules/mappers/mod_vhost_alias.c
deleted file mode 100644
index fd01b5b..0000000
--- a/modules/mappers/mod_vhost_alias.c
+++ /dev/null
@@ -1,497 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-/*
- * mod_vhost_alias.c: support for dynamically configured mass virtual hosting
- * 
- * Copyright (c) 1998-1999 Demon Internet Ltd.
- *
- * This software was submitted by Demon Internet to the Apache Software Foundation
- * in May 1999. Future revisions and derivatives of this source code
- * must acknowledge Demon Internet as the original contributor of
- * this module. All other licensing and usage conditions are those
- * of the Apache Software Foundation.
- *
- * Originally written by Tony Finch <fanf@demon.net> <dot@dotat.at>.
- *
- * Implementation ideas were taken from mod_alias.c. The overall
- * concept is derived from the OVERRIDE_DOC_ROOT/OVERRIDE_CGIDIR
- * patch to Apache 1.3b3 and a similar feature in Demon's thttpd,
- * both written by James Grinter <jrg@blodwen.demon.co.uk>.
- */
-
-#include "apr.h"
-#include "apr_strings.h"
-#include "apr_hooks.h"
-#include "apr_lib.h"
-
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-#include "httpd.h"
-#include "http_config.h"
-#include "http_core.h"
-#include "http_request.h"  /* for ap_hook_translate_name */
-
-
-module AP_MODULE_DECLARE_DATA vhost_alias_module;
-
-
-/*
- * basic configuration things
- * we abbreviate "mod_vhost_alias" to "mva" for shorter names
- */
-
-typedef enum {
-    VHOST_ALIAS_UNSET, VHOST_ALIAS_NONE, VHOST_ALIAS_NAME, VHOST_ALIAS_IP
-} mva_mode_e;
-
-/*
- * Per-server module config record.
- */
-typedef struct mva_sconf_t {
-    const char *doc_root;
-    const char *cgi_root;
-    mva_mode_e doc_root_mode;
-    mva_mode_e cgi_root_mode;
-} mva_sconf_t;
-
-static void *mva_create_server_config(apr_pool_t *p, server_rec *s)
-{
-    mva_sconf_t *conf;
-
-    conf = (mva_sconf_t *) apr_pcalloc(p, sizeof(mva_sconf_t));
-    conf->doc_root = NULL;
-    conf->cgi_root = NULL;
-    conf->doc_root_mode = VHOST_ALIAS_UNSET;
-    conf->cgi_root_mode = VHOST_ALIAS_UNSET;
-    return conf;
-}
-
-static void *mva_merge_server_config(apr_pool_t *p, void *parentv, void *childv)
-{
-    mva_sconf_t *parent = (mva_sconf_t *) parentv;
-    mva_sconf_t *child = (mva_sconf_t *) childv;
-    mva_sconf_t *conf;
-
-    conf = (mva_sconf_t *) apr_pcalloc(p, sizeof(*conf));
-    if (child->doc_root_mode == VHOST_ALIAS_UNSET) {
-	conf->doc_root_mode = parent->doc_root_mode;
-	conf->doc_root = parent->doc_root;
-    }
-    else {
-	conf->doc_root_mode = child->doc_root_mode;
-	conf->doc_root = child->doc_root;
-    }
-    if (child->cgi_root_mode == VHOST_ALIAS_UNSET) {
-	conf->cgi_root_mode = parent->cgi_root_mode;
-	conf->cgi_root = parent->cgi_root;
-    }
-    else {
-	conf->cgi_root_mode = child->cgi_root_mode;
-	conf->cgi_root = child->cgi_root;
-    }
-    return conf;
-}
-
-
-/*
- * These are just here to tell us what vhost_alias_set should do.
- * We don't put anything into them; we just use the cell addresses.
- */
-static int vhost_alias_set_doc_root_ip,
-    vhost_alias_set_cgi_root_ip,
-    vhost_alias_set_doc_root_name,
-    vhost_alias_set_cgi_root_name;
-
-static const char *vhost_alias_set(cmd_parms *cmd, void *dummy, const char *map)
-{
-    mva_sconf_t *conf;
-    mva_mode_e mode, *pmode;
-    const char **pmap;
-    const char *p;
-  
-    conf = (mva_sconf_t *) ap_get_module_config(cmd->server->module_config,
-						&vhost_alias_module);
-    /* there ought to be a better way of doing this */
-    if (&vhost_alias_set_doc_root_ip == cmd->info) {
-	mode = VHOST_ALIAS_IP;
-	pmap = &conf->doc_root;
-	pmode = &conf->doc_root_mode;
-    }
-    else if (&vhost_alias_set_cgi_root_ip == cmd->info) {
-	mode = VHOST_ALIAS_IP;
-	pmap = &conf->cgi_root;
-	pmode = &conf->cgi_root_mode;
-    }
-    else if (&vhost_alias_set_doc_root_name == cmd->info) {
-	mode = VHOST_ALIAS_NAME;
-	pmap = &conf->doc_root;
-	pmode = &conf->doc_root_mode;
-    }
-    else if (&vhost_alias_set_cgi_root_name == cmd->info) {
-	mode = VHOST_ALIAS_NAME;
-	pmap = &conf->cgi_root;
-	pmode = &conf->cgi_root_mode;
-    }
-    else {
-	return "INTERNAL ERROR: unknown command info";
-    }
-
-    if (!ap_os_is_path_absolute(cmd->pool, map)) {
-	if (strcasecmp(map, "none")) {
-	    return "format string must be an absolute path, or 'none'";
-	}
-	*pmap = NULL;
-	*pmode = VHOST_ALIAS_NONE;
-	return NULL;
-    }
-
-    /* sanity check */
-    p = map;
-    while (*p != '\0') {
-	if (*p++ != '%') {
-	    continue;
-	}
-	/* we just found a '%' */
-	if (*p == 'p' || *p == '%') {
-	    ++p;
-	    continue;
-	}
-	/* optional dash */
-	if (*p == '-') {
-	    ++p;
-	}
-	/* digit N */
-	if (apr_isdigit(*p)) {
-	    ++p;
-	}
-	else {
-	    return "syntax error in format string";
-	}
-	/* optional plus */
-	if (*p == '+') {
-	    ++p;
-	}
-	/* do we end here? */
-	if (*p != '.') {
-	    continue;
-	}
-	++p;
-	/* optional dash */
-	if (*p == '-') {
-	    ++p;
-	}
-	/* digit M */
-	if (apr_isdigit(*p)) {
-	    ++p;
-	}
-	else {
-	    return "syntax error in format string";
-	}
-	/* optional plus */
-	if (*p == '+') {
-	    ++p;
-	}
-    }
-    *pmap = map;
-    *pmode = mode;
-    return NULL;
-}
-
-static const command_rec mva_commands[] =
-{
-    AP_INIT_TAKE1("VirtualScriptAlias", vhost_alias_set, 
-                  &vhost_alias_set_cgi_root_name, RSRC_CONF, 
-                  "how to create a ScriptAlias based on the host"),
-    AP_INIT_TAKE1("VirtualDocumentRoot", vhost_alias_set, 
-                  &vhost_alias_set_doc_root_name, RSRC_CONF, 
-                  "how to create the DocumentRoot based on the host"),
-    AP_INIT_TAKE1("VirtualScriptAliasIP", vhost_alias_set, 
-                  &vhost_alias_set_cgi_root_ip, RSRC_CONF, 
-                  "how to create a ScriptAlias based on the host"),
-    AP_INIT_TAKE1("VirtualDocumentRootIP", vhost_alias_set, 
-                  &vhost_alias_set_doc_root_ip, RSRC_CONF, 
-                  "how to create the DocumentRoot based on the host"),
-    { NULL }
-};
-
-
-/*
- * This really wants to be a nested function
- * but C is too feeble to support them.
- */
-static APR_INLINE void vhost_alias_checkspace(request_rec *r, char *buf,
-					     char **pdest, int size)
-{
-    /* XXX: what if size > HUGE_STRING_LEN? */
-    if (*pdest + size > buf + HUGE_STRING_LEN) {
-	**pdest = '\0';
-	if (r->filename) {
-	    r->filename = apr_pstrcat(r->pool, r->filename, buf, NULL);
-	}
-	else {
-	    r->filename = apr_pstrdup(r->pool, buf);
-	}
-	*pdest = buf;
-    }
-}
-
-static void vhost_alias_interpolate(request_rec *r, const char *name,
-				    const char *map, const char *uri)
-{
-    /* 0..9 9..0 */
-    enum { MAXDOTS = 19 };
-    const char *dots[MAXDOTS+1];
-    int ndots;
-
-    char buf[HUGE_STRING_LEN];
-    char *dest, last;
-
-    int N, M, Np, Mp, Nd, Md;
-    const char *start, *end;
-
-    const char *p;
-
-    ndots = 0;
-    dots[ndots++] = name-1; /* slightly naughty */
-    for (p = name; *p; ++p){
-	if (*p == '.' && ndots < MAXDOTS) {
-	    dots[ndots++] = p;
-	}
-    }
-    dots[ndots] = p;
-
-    r->filename = NULL;
-  
-    dest = buf;
-    last = '\0';
-    while (*map) {
-	if (*map != '%') {
-	    /* normal characters */
-	    vhost_alias_checkspace(r, buf, &dest, 1);
-	    last = *dest++ = *map++;
-	    continue;
-	}
-	/* we are in a format specifier */
-	++map;
-	/* can't be a slash */
-	last = '\0';
-	/* %% -> % */
-	if (*map == '%') {
-	    ++map;
-	    vhost_alias_checkspace(r, buf, &dest, 1);
-	    *dest++ = '%';
-	    continue;
-	}
-	/* port number */
-	if (*map == 'p') {
-	    ++map;
-	    /* no. of decimal digits in a short plus one */
-	    vhost_alias_checkspace(r, buf, &dest, 7);
-	    dest += apr_snprintf(dest, 7, "%d", ap_get_server_port(r));
-	    continue;
-	}
-	/* deal with %-N+.-M+ -- syntax is already checked */
-	N = M = 0;   /* value */
-	Np = Mp = 0; /* is there a plus? */
-	Nd = Md = 0; /* is there a dash? */
-	if (*map == '-') ++map, Nd = 1;
-	N = *map++ - '0';
-	if (*map == '+') ++map, Np = 1;
-	if (*map == '.') {
-	    ++map;
-	    if (*map == '-') {
-		++map, Md = 1;
-	    }
-	    M = *map++ - '0';
-	    if (*map == '+') {
-		++map, Mp = 1;
-	    }
-	}
-	/* note that N and M are one-based indices, not zero-based */
-	start = dots[0]+1; /* ptr to the first character */
-	end = dots[ndots]; /* ptr to the character after the last one */
-	if (N != 0) {
-	    if (N > ndots) {
-		start = "_";
-		end = start+1;
-	    }
-	    else if (!Nd) {
-		start = dots[N-1]+1;
-		if (!Np) {
-		    end = dots[N];
-		}
-	    }
-	    else {
-		if (!Np) {
-		    start = dots[ndots-N]+1;
-		}
-		end = dots[ndots-N+1];
-	    }
-	}
-	if (M != 0) {
-	    if (M > end - start) {
-		start = "_";
-		end = start+1;
-	    }
-	    else if (!Md) {
-		start = start+M-1;
-		if (!Mp) {
-		    end = start+1;
-		}
-	    }
-	    else {
-		if (!Mp) {
-		    start = end-M;
-		}
-		end = end-M+1;
-	    }
-	}
-	vhost_alias_checkspace(r, buf, &dest, end - start);
-	for (p = start; p < end; ++p) {
-	    *dest++ = apr_tolower(*p);
-	}
-    }
-    *dest = '\0';
-    /* no double slashes */
-    if (last == '/') {
-	++uri;
-    }
-
-    if (r->filename) {
-	r->filename = apr_pstrcat(r->pool, r->filename, buf, uri, NULL);
-    }
-    else {
-	r->filename = apr_pstrcat(r->pool, buf, uri, NULL);
-    }
-}
-
-static int mva_translate(request_rec *r)
-{
-    mva_sconf_t *conf;
-    const char *name, *map, *uri;
-    mva_mode_e mode;
-    const char *cgi;
-  
-    conf = (mva_sconf_t *) ap_get_module_config(r->server->module_config,
-					      &vhost_alias_module);
-    cgi = NULL;
-    if (conf->cgi_root) {
-	cgi = strstr(r->uri, "cgi-bin/");
-	if (cgi && (cgi != r->uri + strspn(r->uri, "/"))) {
-	    cgi = NULL;
-	}
-    }
-    if (cgi) {
-	mode = conf->cgi_root_mode;
-	map = conf->cgi_root;
-	uri = cgi + strlen("cgi-bin");
-    }
-    else if (r->uri[0] == '/') {
-	mode = conf->doc_root_mode;
-	map = conf->doc_root;
-	uri = r->uri;
-    }
-    else {
-	return DECLINED;
-    }
-  
-    if (mode == VHOST_ALIAS_NAME) {
-	name = ap_get_server_name(r);
-    }
-    else if (mode == VHOST_ALIAS_IP) {
-	name = r->connection->local_ip;
-    }
-    else {
-	return DECLINED;
-    }
-
-    /* ### There is an optimization available here to determine the
-     * absolute portion of the path from the server config phase, 
-     * through the first % segment, and note that portion of the path
-     * canonical_path buffer.
-     */
-    r->canonical_filename = "";
-    vhost_alias_interpolate(r, name, map, uri);
-
-    if (cgi) {
-	/* see is_scriptaliased() in mod_cgi */
-	r->handler = "cgi-script";
-	apr_table_setn(r->notes, "alias-forced-type", r->handler);
-    }
-
-    return OK;
-}
-
-static void register_hooks(apr_pool_t *p)
-{
-    ap_hook_translate_name(mva_translate, NULL, NULL, APR_HOOK_MIDDLE);
-}
-
-module AP_MODULE_DECLARE_DATA vhost_alias_module =
-{
-    STANDARD20_MODULE_STUFF,
-    NULL,			/* dir config creater */
-    NULL,			/* dir merger --- default is to override */
-    mva_create_server_config,	/* server config */
-    mva_merge_server_config,	/* merge server configs */
-    mva_commands,		/* command apr_table_t */
-    register_hooks              /* register hooks */
-};
-
diff --git a/modules/mappers/mod_vhost_alias.dsp b/modules/mappers/mod_vhost_alias.dsp
deleted file mode 100644
index 8a08d5e..0000000
--- a/modules/mappers/mod_vhost_alias.dsp
+++ /dev/null
@@ -1,128 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mod_vhost_alias" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mod_vhost_alias - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "mod_vhost_alias.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "mod_vhost_alias.mak" CFG="mod_vhost_alias - Win32 Release"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "mod_vhost_alias - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mod_vhost_alias - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "mod_vhost_alias - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /O2 /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Release\mod_vhost_alias" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /map /machine:I386 /out:"Release/mod_vhost_alias.so" /base:@..\..\os\win32\BaseAddr.ref,mod_vhost_alias
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /map /machine:I386 /out:"Release/mod_vhost_alias.so" /base:@..\..\os\win32\BaseAddr.ref,mod_vhost_alias
-
-!ELSEIF  "$(CFG)" == "mod_vhost_alias - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Debug\mod_vhost_alias" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /map /debug /machine:I386 /out:"Debug/mod_vhost_alias.so" /base:@..\..\os\win32\BaseAddr.ref,mod_vhost_alias
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /map /debug /machine:I386 /out:"Debug/mod_vhost_alias.so" /base:@..\..\os\win32\BaseAddr.ref,mod_vhost_alias
-
-!ENDIF 
-
-# Begin Target
-
-# Name "mod_vhost_alias - Win32 Release"
-# Name "mod_vhost_alias - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\mod_vhost_alias.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mod_vhost_alias.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\build\win32\win32ver.awk
-
-!IF  "$(CFG)" == "mod_vhost_alias - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_vhost_alias.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ../../build/win32/win32ver.awk mod_vhost_alias  "vhost_alias_module for Apache" ../../include/ap_release.h > .\mod_vhost_alias.rc
-
-# End Custom Build
-
-!ELSEIF  "$(CFG)" == "mod_vhost_alias - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_vhost_alias.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ../../build/win32/win32ver.awk mod_vhost_alias  "vhost_alias_module for Apache" ../../include/ap_release.h > .\mod_vhost_alias.rc
-
-# End Custom Build
-
-!ENDIF 
-
-# End Source File
-# End Target
-# End Project
diff --git a/modules/mappers/mod_vhost_alias.exp b/modules/mappers/mod_vhost_alias.exp
deleted file mode 100644
index b17666f..0000000
--- a/modules/mappers/mod_vhost_alias.exp
+++ /dev/null
@@ -1 +0,0 @@
-vhost_alias_module
diff --git a/modules/metadata/.cvsignore b/modules/metadata/.cvsignore
deleted file mode 100644
index aeabff3..0000000
--- a/modules/metadata/.cvsignore
+++ /dev/null
@@ -1,16 +0,0 @@
-.deps
-.libs
-*.la
-modules.mk
-Makefile
-*.lo
-*.slo
-*.so
-*.x
-Debug
-Release
-*.plg
-*.aps
-*.dep
-*.mak
-*.rc
diff --git a/modules/metadata/.indent.pro b/modules/metadata/.indent.pro
deleted file mode 100644
index a9fbe9f..0000000
--- a/modules/metadata/.indent.pro
+++ /dev/null
@@ -1,54 +0,0 @@
--i4 -npsl -di0 -br -nce -d0 -cli0 -npcs -nfc1
--TBUFF
--TFILE
--TTRANS
--TUINT4
--T_trans
--Tallow_options_t
--Tapache_sfio
--Tarray_header
--Tbool_int
--Tbuf_area
--Tbuff_struct
--Tbuffy
--Tcmd_how
--Tcmd_parms
--Tcommand_rec
--Tcommand_struct
--Tconn_rec
--Tcore_dir_config
--Tcore_server_config
--Tdir_maker_func
--Tevent
--Tglobals_s
--Thandler_func
--Thandler_rec
--Tjoblist_s
--Tlisten_rec
--Tmerger_func
--Tmode_t
--Tmodule
--Tmodule_struct
--Tmutex
--Tn_long
--Tother_child_rec
--Toverrides_t
--Tparent_score
--Tpid_t
--Tpiped_log
--Tpool
--Trequest_rec
--Trequire_line
--Trlim_t
--Tscoreboard
--Tsemaphore
--Tserver_addr_rec
--Tserver_rec
--Tserver_rec_chain
--Tshort_score
--Ttable
--Ttable_entry
--Tthread
--Tu_wide_int
--Tvtime_t
--Twide_int
diff --git a/modules/metadata/Makefile.in b/modules/metadata/Makefile.in
deleted file mode 100644
index 167b343..0000000
--- a/modules/metadata/Makefile.in
+++ /dev/null
@@ -1,3 +0,0 @@
-
-include $(top_srcdir)/build/special.mk
-
diff --git a/modules/metadata/NWGNUcernmeta b/modules/metadata/NWGNUcernmeta
deleted file mode 100644
index abc4cab..0000000
--- a/modules/metadata/NWGNUcernmeta
+++ /dev/null
@@ -1,250 +0,0 @@
-#
-# Make sure all needed macro's are defined
-#
-
-#
-# Get the 'head' of the build environment if necessary.  This includes default
-# targets and paths to tools
-#
-
-ifndef EnvironmentDefined
-include $(AP_WORK)\build\NWGNUhead.inc
-endif
-
-#
-# These directories will be at the beginning of the include list, followed by
-# INCDIRS
-#
-XINCDIRS	+= \
-			$(AP_WORK)/include \
-			$(NWOS) \
-			$(AP_WORK)/modules/arch/netware \
-			$(AP_WORK)/srclib/apr/include \
-			$(AP_WORK)/srclib/apr-util/include \
-			$(AP_WORK)/srclib/apr \
-			$(EOLIST)
-
-#
-# These flags will come after CFLAGS
-#
-XCFLAGS		+= \
-			-prefix pre_nw.h \
-			$(EOLIST)
-
-#
-# These defines will come after DEFINES
-#
-XDEFINES	+= \
-			$(EOLIST)
-
-#
-# These flags will be added to the link.opt file
-#
-XLFLAGS		+= \
-			$(EOLIST)
-
-#
-# These values will be appended to the correct variables based on the value of
-# RELEASE
-#
-ifeq "$(RELEASE)" "debug"
-XINCDIRS	+= \
-			$(EOLIST)
-
-XCFLAGS		+= \
-			$(EOLIST)
-
-XDEFINES	+= \
-			$(EOLIST)
-
-XLFLAGS		+= \
-		   	$(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "noopt"
-XINCDIRS	+= \
-			$(EOLIST)
-
-XCFLAGS		+= \
-			$(EOLIST)
-
-XDEFINES	+= \
-			$(EOLIST)
-
-XLFLAGS		+= \
-		   	$(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "release"
-XINCDIRS	+= \
-			$(EOLIST)
-
-XCFLAGS		+= \
-			$(EOLIST)
-
-XDEFINES	+= \
-			$(EOLIST)
-
-XLFLAGS		+= \
-			$(EOLIST)
-endif
-
-#
-# These are used by the link target if an NLM is being generated
-# This is used by the link 'name' directive to name the nlm.  If left blank
-# TARGET_nlm (see below) will be used.
-#
-NLM_NAME		= cernmeta
-
-#
-# This is used by the link '-desc ' directive. 
-# If left blank, NLM_NAME will be used.
-#
-NLM_DESCRIPTION	= CERN Meta Module
-
-#
-# This is used by the '-threadname' directive.  If left blank,
-# NLM_NAME Thread will be used.
-#
-NLM_THREAD_NAME	= CERN Meta Module
-
-#
-# If this is specified, it will override VERSION value in 
-# $(AP_WORK)\build\NWGNUenvironment.inc
-#
-NLM_VERSION		=
-
-#
-# If this is specified, it will override the default of 64K
-#
-NLM_STACK_SIZE	= 8192
-
-
-#
-# If this is specified it will be used by the link '-entry' directive
-#
-NLM_ENTRY_SYM	= _LibCPrelude
-
-#
-# If this is specified it will be used by the link '-exit' directive
-#
-NLM_EXIT_SYM	= _LibCPostlude
-
-#
-# If this is specified it will be used by the link '-check' directive
-#
-NLM_CHECK_SYM	=
-
-#
-# If these are specified it will be used by the link '-flags' directive
-#
-NLM_FLAGS		=  AUTOUNLOAD, PSEUDOPREEMPTION
-
-#
-# If this is specified it will be linked in with the XDCData option in the def 
-# file instead of the default of $(NWOS)/apache.xdc.  XDCData can be disabled
-# by setting APACHE_UNIPROC in the environment
-#
-XDCDATA         = 
-
-#
-# If there is an NLM target, put it here
-#
-TARGET_nlm = \
-	$(OBJDIR)/cernmeta.nlm \
-	$(EOLIST)
-
-#
-# If there is an LIB target, put it here
-#
-TARGET_lib = \
-	$(EOLIST)
-
-#
-# These are the OBJ files needed to create the NLM target above.
-# Paths must all use the '/' character
-#
-FILES_nlm_objs = \
-	$(OBJDIR)/mod_cern_meta.o \
-	$(EOLIST)
-
-#
-# These are the LIB files needed to create the NLM target above.
-# These will be added as a library command in the link.opt file.
-#
-FILES_nlm_libs = \
-   	libcpre.o \
-	$(EOLIST)
-
-#
-# These are the modules that the above NLM target depends on to load.
-# These will be added as a module command in the link.opt file.
-#
-FILES_nlm_modules = \
-	aprlib \
-	libc \
-	$(EOLIST)
-
-#
-# If the nlm has a msg file, put it's path here
-#
-FILE_nlm_msg =
- 
-#
-# If the nlm has a hlp file put it's path here
-#
-FILE_nlm_hlp =
-
-#
-# If this is specified, it will override $(NWOS)\copyright.txt.
-#
-FILE_nlm_copyright =
-
-#
-# Any additional imports go here
-#
-FILES_nlm_Ximports = \
-	@$(APR)/aprlib.imp \
-	@$(NWOS)/httpd.imp \
-	@libc.imp \
-	$(EOLIST)
- 
-#   
-# Any symbols exported to here
-#
-FILES_nlm_exports = \
-	cern_meta_module \
-	$(EOLIST)
-	
-#   
-# These are the OBJ files needed to create the LIB target above.
-# Paths must all use the '/' character
-#
-FILES_lib_objs = \
-		$(EOLIST)
-
-#
-# implement targets and dependancies (leave this section alone)
-#
-
-libs :: $(OBJDIR) $(TARGET_lib)
-
-nlms :: libs $(TARGET_nlm)
-
-#
-# Updated this target to create necessary directories and copy files to the 
-# correct place.  (See $(AP_WORK)\build\NWGNUhead.inc for examples)
-#
-install :: nlms FORCE
-
-#
-# Any specialized rules here
-#
-
-#
-# Include the 'tail' makefile that has targets that depend on variables defined
-# in this makefile
-#
-
-include $(AP_WORK)\build\NWGNUtail.inc
-
diff --git a/modules/metadata/NWGNUexpires b/modules/metadata/NWGNUexpires
deleted file mode 100644
index e55fa0d..0000000
--- a/modules/metadata/NWGNUexpires
+++ /dev/null
@@ -1,250 +0,0 @@
-#
-# Make sure all needed macro's are defined
-#
-
-#
-# Get the 'head' of the build environment if necessary.  This includes default
-# targets and paths to tools
-#
-
-ifndef EnvironmentDefined
-include $(AP_WORK)\build\NWGNUhead.inc
-endif
-
-#
-# These directories will be at the beginning of the include list, followed by
-# INCDIRS
-#
-XINCDIRS	+= \
-			$(AP_WORK)/include \
-			$(NWOS) \
-			$(AP_WORK)/modules/arch/netware \
-			$(AP_WORK)/srclib/apr/include \
-			$(AP_WORK)/srclib/apr-util/include \
-			$(AP_WORK)/srclib/apr \
-			$(EOLIST)
-
-#
-# These flags will come after CFLAGS
-#
-XCFLAGS		+= \
-			-prefix pre_nw.h \
-			$(EOLIST)
-
-#
-# These defines will come after DEFINES
-#
-XDEFINES	+= \
-			$(EOLIST)
-
-#
-# These flags will be added to the link.opt file
-#
-XLFLAGS		+= \
-			$(EOLIST)
-
-#
-# These values will be appended to the correct variables based on the value of
-# RELEASE
-#
-ifeq "$(RELEASE)" "debug"
-XINCDIRS	+= \
-			$(EOLIST)
-
-XCFLAGS		+= \
-			$(EOLIST)
-
-XDEFINES	+= \
-			$(EOLIST)
-
-XLFLAGS		+= \
-		   	$(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "noopt"
-XINCDIRS	+= \
-			$(EOLIST)
-
-XCFLAGS		+= \
-			$(EOLIST)
-
-XDEFINES	+= \
-			$(EOLIST)
-
-XLFLAGS		+= \
-		   	$(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "release"
-XINCDIRS	+= \
-			$(EOLIST)
-
-XCFLAGS		+= \
-			$(EOLIST)
-
-XDEFINES	+= \
-			$(EOLIST)
-
-XLFLAGS		+= \
-			$(EOLIST)
-endif
-
-#
-# These are used by the link target if an NLM is being generated
-# This is used by the link 'name' directive to name the nlm.  If left blank
-# TARGET_nlm (see below) will be used.
-#
-NLM_NAME		= expires
-
-#
-# This is used by the link '-desc ' directive. 
-# If left blank, NLM_NAME will be used.
-#
-NLM_DESCRIPTION	= Expires Module
-
-#
-# This is used by the '-threadname' directive.  If left blank,
-# NLM_NAME Thread will be used.
-#
-NLM_THREAD_NAME	= Expires Module
-
-#
-# If this is specified, it will override VERSION value in 
-# $(AP_WORK)\build\NWGNUenvironment.inc
-#
-NLM_VERSION		=
-
-#
-# If this is specified, it will override the default of 64K
-#
-NLM_STACK_SIZE	= 8192
-
-
-#
-# If this is specified it will be used by the link '-entry' directive
-#
-NLM_ENTRY_SYM	= _LibCPrelude
-
-#
-# If this is specified it will be used by the link '-exit' directive
-#
-NLM_EXIT_SYM	= _LibCPostlude
-
-#
-# If this is specified it will be used by the link '-check' directive
-#
-NLM_CHECK_SYM	=
-
-#
-# If these are specified it will be used by the link '-flags' directive
-#
-NLM_FLAGS		=  AUTOUNLOAD, PSEUDOPREEMPTION
-
-#
-# If this is specified it will be linked in with the XDCData option in the def 
-# file instead of the default of $(NWOS)/apache.xdc.  XDCData can be disabled
-# by setting APACHE_UNIPROC in the environment
-#
-XDCDATA         = 
-
-#
-# If there is an NLM target, put it here
-#
-TARGET_nlm = \
-	$(OBJDIR)/expires.nlm \
-	$(EOLIST)
-
-#
-# If there is an LIB target, put it here
-#
-TARGET_lib = \
-	$(EOLIST)
-
-#
-# These are the OBJ files needed to create the NLM target above.
-# Paths must all use the '/' character
-#
-FILES_nlm_objs = \
-	$(OBJDIR)/mod_expires.o \
-	$(EOLIST)
-
-#
-# These are the LIB files needed to create the NLM target above.
-# These will be added as a library command in the link.opt file.
-#
-FILES_nlm_libs = \
-   	libcpre.o \
-	$(EOLIST)
-
-#
-# These are the modules that the above NLM target depends on to load.
-# These will be added as a module command in the link.opt file.
-#
-FILES_nlm_modules = \
-	aprlib \
-	libc \
-	$(EOLIST)
-
-#
-# If the nlm has a msg file, put it's path here
-#
-FILE_nlm_msg =
- 
-#
-# If the nlm has a hlp file put it's path here
-#
-FILE_nlm_hlp =
-
-#
-# If this is specified, it will override $(NWOS)\copyright.txt.
-#
-FILE_nlm_copyright =
-
-#
-# Any additional imports go here
-#
-FILES_nlm_Ximports = \
-	@$(APR)/aprlib.imp \
-	@$(NWOS)/httpd.imp \
-	@libc.imp \
-	$(EOLIST)
- 
-#   
-# Any symbols exported to here
-#
-FILES_nlm_exports = \
-	expires_module \
-	$(EOLIST)
-	
-#   
-# These are the OBJ files needed to create the LIB target above.
-# Paths must all use the '/' character
-#
-FILES_lib_objs = \
-		$(EOLIST)
-
-#
-# implement targets and dependancies (leave this section alone)
-#
-
-libs :: $(OBJDIR) $(TARGET_lib)
-
-nlms :: libs $(TARGET_nlm)
-
-#
-# Updated this target to create necessary directories and copy files to the 
-# correct place.  (See $(AP_WORK)\build\NWGNUhead.inc for examples)
-#
-install :: nlms FORCE
-
-#
-# Any specialized rules here
-#
-
-#
-# Include the 'tail' makefile that has targets that depend on variables defined
-# in this makefile
-#
-
-include $(AP_WORK)\build\NWGNUtail.inc
-
diff --git a/modules/metadata/NWGNUheaders b/modules/metadata/NWGNUheaders
deleted file mode 100644
index 88be58e..0000000
--- a/modules/metadata/NWGNUheaders
+++ /dev/null
@@ -1,250 +0,0 @@
-#
-# Make sure all needed macro's are defined
-#
-
-#
-# Get the 'head' of the build environment if necessary.  This includes default
-# targets and paths to tools
-#
-
-ifndef EnvironmentDefined
-include $(AP_WORK)\build\NWGNUhead.inc
-endif
-
-#
-# These directories will be at the beginning of the include list, followed by
-# INCDIRS
-#
-XINCDIRS	+= \
-			$(AP_WORK)/include \
-			$(NWOS) \
-			$(AP_WORK)/modules/arch/netware \
-			$(AP_WORK)/srclib/apr/include \
-			$(AP_WORK)/srclib/apr-util/include \
-			$(AP_WORK)/srclib/apr \
-			$(EOLIST)
-
-#
-# These flags will come after CFLAGS
-#
-XCFLAGS		+= \
-			-prefix pre_nw.h \
-			$(EOLIST)
-
-#
-# These defines will come after DEFINES
-#
-XDEFINES	+= \
-			$(EOLIST)
-
-#
-# These flags will be added to the link.opt file
-#
-XLFLAGS		+= \
-			$(EOLIST)
-
-#
-# These values will be appended to the correct variables based on the value of
-# RELEASE
-#
-ifeq "$(RELEASE)" "debug"
-XINCDIRS	+= \
-			$(EOLIST)
-
-XCFLAGS		+= \
-			$(EOLIST)
-
-XDEFINES	+= \
-			$(EOLIST)
-
-XLFLAGS		+= \
-		   	$(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "noopt"
-XINCDIRS	+= \
-			$(EOLIST)
-
-XCFLAGS		+= \
-			$(EOLIST)
-
-XDEFINES	+= \
-			$(EOLIST)
-
-XLFLAGS		+= \
-		   	$(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "release"
-XINCDIRS	+= \
-			$(EOLIST)
-
-XCFLAGS		+= \
-			$(EOLIST)
-
-XDEFINES	+= \
-			$(EOLIST)
-
-XLFLAGS		+= \
-			$(EOLIST)
-endif
-
-#
-# These are used by the link target if an NLM is being generated
-# This is used by the link 'name' directive to name the nlm.  If left blank
-# TARGET_nlm (see below) will be used.
-#
-NLM_NAME		= headers
-
-#
-# This is used by the link '-desc ' directive. 
-# If left blank, NLM_NAME will be used.
-#
-NLM_DESCRIPTION	= Headers Module
-
-#
-# This is used by the '-threadname' directive.  If left blank,
-# NLM_NAME Thread will be used.
-#
-NLM_THREAD_NAME	= Headers Module
-
-#
-# If this is specified, it will override VERSION value in 
-# $(AP_WORK)\build\NWGNUenvironment.inc
-#
-NLM_VERSION		=
-
-#
-# If this is specified, it will override the default of 64K
-#
-NLM_STACK_SIZE	= 8192
-
-
-#
-# If this is specified it will be used by the link '-entry' directive
-#
-NLM_ENTRY_SYM	= _LibCPrelude
-
-#
-# If this is specified it will be used by the link '-exit' directive
-#
-NLM_EXIT_SYM	= _LibCPostlude
-
-#
-# If this is specified it will be used by the link '-check' directive
-#
-NLM_CHECK_SYM	=
-
-#
-# If these are specified it will be used by the link '-flags' directive
-#
-NLM_FLAGS		=  AUTOUNLOAD, PSEUDOPREEMPTION
-
-#
-# If this is specified it will be linked in with the XDCData option in the def 
-# file instead of the default of $(NWOS)/apache.xdc.  XDCData can be disabled
-# by setting APACHE_UNIPROC in the environment
-#
-XDCDATA         = 
-
-#
-# If there is an NLM target, put it here
-#
-TARGET_nlm = \
-	$(OBJDIR)/headers.nlm \
-	$(EOLIST)
-
-#
-# If there is an LIB target, put it here
-#
-TARGET_lib = \
-	$(EOLIST)
-
-#
-# These are the OBJ files needed to create the NLM target above.
-# Paths must all use the '/' character
-#
-FILES_nlm_objs = \
-	$(OBJDIR)/mod_headers.o \
-	$(EOLIST)
-
-#
-# These are the LIB files needed to create the NLM target above.
-# These will be added as a library command in the link.opt file.
-#
-FILES_nlm_libs = \
-   	libcpre.o \
-	$(EOLIST)
-
-#
-# These are the modules that the above NLM target depends on to load.
-# These will be added as a module command in the link.opt file.
-#
-FILES_nlm_modules = \
-	aprlib \
-	libc \
-	$(EOLIST)
-
-#
-# If the nlm has a msg file, put it's path here
-#
-FILE_nlm_msg =
- 
-#
-# If the nlm has a hlp file put it's path here
-#
-FILE_nlm_hlp =
-
-#
-# If this is specified, it will override $(NWOS)\copyright.txt.
-#
-FILE_nlm_copyright =
-
-#
-# Any additional imports go here
-#
-FILES_nlm_Ximports = \
-	@$(APR)/aprlib.imp \
-	@$(NWOS)/httpd.imp \
-	@libc.imp \
-	$(EOLIST)
- 
-#   
-# Any symbols exported to here
-#
-FILES_nlm_exports = \
-	headers_module \
-	$(EOLIST)
-	
-#   
-# These are the OBJ files needed to create the LIB target above.
-# Paths must all use the '/' character
-#
-FILES_lib_objs = \
-		$(EOLIST)
-
-#
-# implement targets and dependancies (leave this section alone)
-#
-
-libs :: $(OBJDIR) $(TARGET_lib)
-
-nlms :: libs $(TARGET_nlm)
-
-#
-# Updated this target to create necessary directories and copy files to the 
-# correct place.  (See $(AP_WORK)\build\NWGNUhead.inc for examples)
-#
-install :: nlms FORCE
-
-#
-# Any specialized rules here
-#
-
-#
-# Include the 'tail' makefile that has targets that depend on variables defined
-# in this makefile
-#
-
-include $(AP_WORK)\build\NWGNUtail.inc
-
diff --git a/modules/metadata/NWGNUmakefile b/modules/metadata/NWGNUmakefile
deleted file mode 100644
index c23e762..0000000
--- a/modules/metadata/NWGNUmakefile
+++ /dev/null
@@ -1,251 +0,0 @@
-#
-# Declare the sub-directories to be built here
-#
-
-SUBDIRS = \
-	$(EOLIST) 
-
-#
-# Get the 'head' of the build environment.  This includes default targets and
-# paths to tools
-#
-
-include $(AP_WORK)\build\NWGNUhead.inc
-
-#
-# build this level's files
-
-#
-# Make sure all needed macro's are defined
-#
-
-
-#
-# These directories will be at the beginning of the include list, followed by
-# INCDIRS
-#
-XINCDIRS	+= \
-			$(EOLIST)
-
-#
-# These flags will come after CFLAGS
-#
-XCFLAGS		+= \
-			$(EOLIST)
-
-#
-# These defines will come after DEFINES
-#
-XDEFINES	+= \
-			$(EOLIST)
-
-#
-# These flags will be added to the link.opt file
-#
-XLFLAGS		+= \
-			$(EOLIST)
-
-#
-# These values will be appended to the correct variables based on the value of
-# RELEASE
-#
-ifeq "$(RELEASE)" "debug"
-XINCDIRS	+= \
-			$(EOLIST)
-
-XCFLAGS		+= \
-			$(EOLIST)
-
-XDEFINES	+= \
-			$(EOLIST)
-
-XLFLAGS		+= \
-		   	$(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "noopt"
-XINCDIRS	+= \
-			$(EOLIST)
-
-XCFLAGS		+= \
-			$(EOLIST)
-
-XDEFINES	+= \
-			$(EOLIST)
-
-XLFLAGS		+= \
-		   	$(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "release"
-XINCDIRS	+= \
-			$(EOLIST)
-
-XCFLAGS		+= \
-			$(EOLIST)
-
-XDEFINES	+= \
-			$(EOLIST)
-
-XLFLAGS		+= \
-			$(EOLIST)
-endif
-
-#
-# These are used by the link target if an NLM is being generated
-# This is used by the link 'name' directive to name the nlm.  If left blank
-# TARGET_nlm (see below) will be used.
-#
-NLM_NAME		=
-
-#
-# This is used by the link '-desc ' directive. 
-# If left blank, NLM_NAME will be used.
-#
-NLM_DESCRIPTION	=
-
-#
-# This is used by the '-threadname' directive.  If left blank,
-# NLM_NAME Thread will be used.
-#
-NLM_THREAD_NAME	=
-
-#
-# If this is specified, it will override VERSION value in 
-# $(AP_WORK)\build\NWGNUenvironment.inc
-#
-NLM_VERSION		=
-
-#
-# If this is specified, it will override the default of 64K
-#
-NLM_STACK_SIZE	=
-
-
-#
-# If this is specified it will be used by the link '-entry' directive
-#
-NLM_ENTRY_SYM	=
-
-#
-# If this is specified it will be used by the link '-exit' directive
-#
-NLM_EXIT_SYM	=
-
-#
-# If this is specified it will be used by the link '-check' directive
-#
-NLM_CHECK_SYM	=
-
-#
-# If these are specified it will be used by the link '-flags' directive
-#
-NLM_FLAGS		=
-
-#
-# If this is specified it will be linked in with the XDCData option in the def 
-# file instead of the default of $(NWOS)/apache.xdc.  XDCData can be disabled
-# by setting APACHE_UNIPROC in the environment
-#
-XDCDATA         = 
-
-#
-# If there is an NLM target, put it here
-#
-TARGET_nlm = \
-	$(OBJDIR)/cernmeta.nlm \
-	$(OBJDIR)/expires.nlm \
-	$(OBJDIR)/headers.nlm \
-	$(OBJDIR)/mimemagi.nlm \
-	$(OBJDIR)/uniqueid.nlm \
-	$(OBJDIR)/usertrk.nlm \
-	$(EOLIST)
-
-#
-# If there is an LIB target, put it here
-#
-TARGET_lib = \
-	$(EOLIST)
-
-#
-# These are the OBJ files needed to create the NLM target above.
-# Paths must all use the '/' character
-#
-FILES_nlm_objs = \
-	$(EOLIST)
-
-#
-# These are the LIB files needed to create the NLM target above.
-# These will be added as a library command in the link.opt file.
-#
-FILES_nlm_libs = \
-	$(EOLIST)
-
-#
-# These are the modules that the above NLM target depends on to load.
-# These will be added as a module command in the link.opt file.
-#
-FILES_nlm_modules = \
-	$(EOLIST)
-
-#
-# If the nlm has a msg file, put it's path here
-#
-FILE_nlm_msg =
- 
-#
-# If the nlm has a hlp file put it's path here
-#
-FILE_nlm_hlp =
-
-#
-# If this is specified, it will override $(NWOS)\copyright.txt.
-#
-FILE_nlm_copyright =
-
-#
-# Any additional imports go here
-#
-FILES_nlm_Ximports = \
-	$(EOLIST)
- 
-#   
-# Any symbols exported to here
-#
-FILES_nlm_exports = \
-	$(EOLIST)
-	
-#   
-# These are the OBJ files needed to create the LIB target above.
-# Paths must all use the '/' character
-#
-FILES_lib_objs = \
-		$(EOLIST)
-
-#
-# implement targets and dependancies (leave this section alone)
-#
-
-libs :: $(OBJDIR) $(TARGET_lib)
-
-nlms :: libs $(TARGET_nlm)
-
-#
-# Updated this target to create necessary directories and copy files to the 
-# correct place.  (See $(AP_WORK)\build\NWGNUhead.inc for examples)
-#
-install :: nlms FORCE
-	copy $(OBJDIR)\*.nlm $(INSTALL)\Apache2\modules\*.*
-
-#
-# Any specialized rules here
-#
-
-#
-# Include the 'tail' makefile that has targets that depend on variables defined
-# in this makefile
-#
-
-include $(AP_WORK)\build\NWGNUtail.inc
-
-
diff --git a/modules/metadata/NWGNUmimemagi b/modules/metadata/NWGNUmimemagi
deleted file mode 100644
index 8a989e3..0000000
--- a/modules/metadata/NWGNUmimemagi
+++ /dev/null
@@ -1,250 +0,0 @@
-#
-# Make sure all needed macro's are defined
-#
-
-#
-# Get the 'head' of the build environment if necessary.  This includes default
-# targets and paths to tools
-#
-
-ifndef EnvironmentDefined
-include $(AP_WORK)\build\NWGNUhead.inc
-endif
-
-#
-# These directories will be at the beginning of the include list, followed by
-# INCDIRS
-#
-XINCDIRS	+= \
-			$(AP_WORK)/include \
-			$(NWOS) \
-			$(AP_WORK)/modules/arch/netware \
-			$(AP_WORK)/srclib/apr/include \
-			$(AP_WORK)/srclib/apr-util/include \
-			$(AP_WORK)/srclib/apr \
-			$(EOLIST)
-
-#
-# These flags will come after CFLAGS
-#
-XCFLAGS		+= \
-			-prefix pre_nw.h \
-			$(EOLIST)
-
-#
-# These defines will come after DEFINES
-#
-XDEFINES	+= \
-			$(EOLIST)
-
-#
-# These flags will be added to the link.opt file
-#
-XLFLAGS		+= \
-			$(EOLIST)
-
-#
-# These values will be appended to the correct variables based on the value of
-# RELEASE
-#
-ifeq "$(RELEASE)" "debug"
-XINCDIRS	+= \
-			$(EOLIST)
-
-XCFLAGS		+= \
-			$(EOLIST)
-
-XDEFINES	+= \
-			$(EOLIST)
-
-XLFLAGS		+= \
-		   	$(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "noopt"
-XINCDIRS	+= \
-			$(EOLIST)
-
-XCFLAGS		+= \
-			$(EOLIST)
-
-XDEFINES	+= \
-			$(EOLIST)
-
-XLFLAGS		+= \
-		   	$(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "release"
-XINCDIRS	+= \
-			$(EOLIST)
-
-XCFLAGS		+= \
-			$(EOLIST)
-
-XDEFINES	+= \
-			$(EOLIST)
-
-XLFLAGS		+= \
-			$(EOLIST)
-endif
-
-#
-# These are used by the link target if an NLM is being generated
-# This is used by the link 'name' directive to name the nlm.  If left blank
-# TARGET_nlm (see below) will be used.
-#
-NLM_NAME		= mimemagi
-
-#
-# This is used by the link '-desc ' directive. 
-# If left blank, NLM_NAME will be used.
-#
-NLM_DESCRIPTION	= CERN Meta Module
-
-#
-# This is used by the '-threadname' directive.  If left blank,
-# NLM_NAME Thread will be used.
-#
-NLM_THREAD_NAME	= CERN Meta Module
-
-#
-# If this is specified, it will override VERSION value in 
-# $(AP_WORK)\build\NWGNUenvironment.inc
-#
-NLM_VERSION		=
-
-#
-# If this is specified, it will override the default of 64K
-#
-NLM_STACK_SIZE	= 8192
-
-
-#
-# If this is specified it will be used by the link '-entry' directive
-#
-NLM_ENTRY_SYM	= _LibCPrelude
-
-#
-# If this is specified it will be used by the link '-exit' directive
-#
-NLM_EXIT_SYM	= _LibCPostlude
-
-#
-# If this is specified it will be used by the link '-check' directive
-#
-NLM_CHECK_SYM	=
-
-#
-# If these are specified it will be used by the link '-flags' directive
-#
-NLM_FLAGS		=  AUTOUNLOAD, PSEUDOPREEMPTION
-
-#
-# If this is specified it will be linked in with the XDCData option in the def 
-# file instead of the default of $(NWOS)/apache.xdc.  XDCData can be disabled
-# by setting APACHE_UNIPROC in the environment
-#
-XDCDATA         = 
-
-#
-# If there is an NLM target, put it here
-#
-TARGET_nlm = \
-	$(OBJDIR)/mimemagi.nlm \
-	$(EOLIST)
-
-#
-# If there is an LIB target, put it here
-#
-TARGET_lib = \
-	$(EOLIST)
-
-#
-# These are the OBJ files needed to create the NLM target above.
-# Paths must all use the '/' character
-#
-FILES_nlm_objs = \
-	$(OBJDIR)/mod_mime_magic.o \
-	$(EOLIST)
-
-#
-# These are the LIB files needed to create the NLM target above.
-# These will be added as a library command in the link.opt file.
-#
-FILES_nlm_libs = \
-   	libcpre.o \
-	$(EOLIST)
-
-#
-# These are the modules that the above NLM target depends on to load.
-# These will be added as a module command in the link.opt file.
-#
-FILES_nlm_modules = \
-	aprlib \
-	libc \
-	$(EOLIST)
-
-#
-# If the nlm has a msg file, put it's path here
-#
-FILE_nlm_msg =
- 
-#
-# If the nlm has a hlp file put it's path here
-#
-FILE_nlm_hlp =
-
-#
-# If this is specified, it will override $(NWOS)\copyright.txt.
-#
-FILE_nlm_copyright =
-
-#
-# Any additional imports go here
-#
-FILES_nlm_Ximports = \
-	@$(APR)/aprlib.imp \
-	@$(NWOS)/httpd.imp \
-	@libc.imp \
-	$(EOLIST)
- 
-#   
-# Any symbols exported to here
-#
-FILES_nlm_exports = \
-	mime_magic_module \
-	$(EOLIST)
-	
-#   
-# These are the OBJ files needed to create the LIB target above.
-# Paths must all use the '/' character
-#
-FILES_lib_objs = \
-		$(EOLIST)
-
-#
-# implement targets and dependancies (leave this section alone)
-#
-
-libs :: $(OBJDIR) $(TARGET_lib)
-
-nlms :: libs $(TARGET_nlm)
-
-#
-# Updated this target to create necessary directories and copy files to the 
-# correct place.  (See $(AP_WORK)\build\NWGNUhead.inc for examples)
-#
-install :: nlms FORCE
-
-#
-# Any specialized rules here
-#
-
-#
-# Include the 'tail' makefile that has targets that depend on variables defined
-# in this makefile
-#
-
-include $(AP_WORK)\build\NWGNUtail.inc
-
diff --git a/modules/metadata/NWGNUuniqueid b/modules/metadata/NWGNUuniqueid
deleted file mode 100644
index c7dace4..0000000
--- a/modules/metadata/NWGNUuniqueid
+++ /dev/null
@@ -1,256 +0,0 @@
-#
-# Make sure all needed macro's are defined
-#
-
-#
-# Get the 'head' of the build environment if necessary.  This includes default
-# targets and paths to tools
-#
-
-ifndef EnvironmentDefined
-include $(AP_WORK)\build\NWGNUhead.inc
-endif
-
-#
-# These directories will be at the beginning of the include list, followed by
-# INCDIRS
-#
-XINCDIRS	+= \
-			$(AP_WORK)/include \
-			$(NWOS) \
-			$(AP_WORK)/modules/arch/netware \
-			$(AP_WORK)/srclib/apr/include \
-			$(AP_WORK)/srclib/apr-util/include \
-			$(AP_WORK)/srclib/apr \
-			$(EOLIST)
-
-#
-# These flags will come after CFLAGS
-#
-XCFLAGS		+= \
-			-prefix pre_nw.h \
-			$(EOLIST)
-
-#
-# These defines will come after DEFINES
-#
-XDEFINES	+= \
-			$(EOLIST)
-
-#
-# These flags will be added to the link.opt file
-#
-XLFLAGS		+= \
-			$(EOLIST)
-
-#
-# These values will be appended to the correct variables based on the value of
-# RELEASE
-#
-ifeq "$(RELEASE)" "debug"
-XINCDIRS	+= \
-			$(EOLIST)
-
-XCFLAGS		+= \
-			$(EOLIST)
-
-XDEFINES	+= \
-			$(EOLIST)
-
-XLFLAGS		+= \
-		   	$(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "noopt"
-XINCDIRS	+= \
-			$(EOLIST)
-
-XCFLAGS		+= \
-			$(EOLIST)
-
-XDEFINES	+= \
-			$(EOLIST)
-
-XLFLAGS		+= \
-		   	$(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "release"
-XINCDIRS	+= \
-			$(EOLIST)
-
-XCFLAGS		+= \
-			$(EOLIST)
-
-XDEFINES	+= \
-			$(EOLIST)
-
-XLFLAGS		+= \
-			$(EOLIST)
-endif
-
-#
-# These are used by the link target if an NLM is being generated
-# This is used by the link 'name' directive to name the nlm.  If left blank
-# TARGET_nlm (see below) will be used.
-#
-NLM_NAME		= uniqueid
-
-#
-# This is used by the link '-desc ' directive. 
-# If left blank, NLM_NAME will be used.
-#
-NLM_DESCRIPTION	= Unique ID Module
-
-#
-# This is used by the '-threadname' directive.  If left blank,
-# NLM_NAME Thread will be used.
-#
-NLM_THREAD_NAME	= Unique ID Module
-
-#
-# If this is specified, it will override VERSION value in 
-# $(AP_WORK)\build\NWGNUenvironment.inc
-#
-NLM_VERSION		=
-
-#
-# If this is specified, it will override the default of 64K
-#
-NLM_STACK_SIZE	= 8192
-
-
-#
-# If this is specified it will be used by the link '-entry' directive
-#
-NLM_ENTRY_SYM	= _LibCPrelude
-
-#
-# If this is specified it will be used by the link '-exit' directive
-#
-NLM_EXIT_SYM	= _LibCPostlude
-
-#
-# If this is specified it will be used by the link '-check' directive
-#
-NLM_CHECK_SYM	=
-
-#
-# If these are specified it will be used by the link '-flags' directive
-#
-NLM_FLAGS		=  AUTOUNLOAD, PSEUDOPREEMPTION
-
-#
-# If this is specified it will be linked in with the XDCData option in the def 
-# file instead of the default of $(NWOS)/apache.xdc.  XDCData can be disabled
-# by setting APACHE_UNIPROC in the environment
-#
-XDCDATA         = 
-
-#
-# If there is an NLM target, put it here
-#
-TARGET_nlm = \
-	$(OBJDIR)/uniqueid.nlm \
-	$(EOLIST)
-
-#
-# If there is an LIB target, put it here
-#
-TARGET_lib = \
-	$(EOLIST)
-
-#
-# These are the OBJ files needed to create the NLM target above.
-# Paths must all use the '/' character
-#
-FILES_nlm_objs = \
-	$(OBJDIR)/mod_unique_id.o \
-	$(OBJDIR)/libprews.o \
-	$(EOLIST)
-
-#
-# These are the LIB files needed to create the NLM target above.
-# These will be added as a library command in the link.opt file.
-#
-FILES_nlm_libs = \
-   	libcpre.o \
-	$(EOLIST)
-
-#
-# These are the modules that the above NLM target depends on to load.
-# These will be added as a module command in the link.opt file.
-#
-FILES_nlm_modules = \
-	aprlib \
-	libc \
-	$(EOLIST)
-
-#
-# If the nlm has a msg file, put it's path here
-#
-FILE_nlm_msg =
- 
-#
-# If the nlm has a hlp file put it's path here
-#
-FILE_nlm_hlp =
-
-#
-# If this is specified, it will override $(NWOS)\copyright.txt.
-#
-FILE_nlm_copyright =
-
-#
-# Any additional imports go here
-#
-FILES_nlm_Ximports = \
-	@$(APR)/aprlib.imp \
-	@$(NWOS)/httpd.imp \
-	@libc.imp \
-	@ws2nlm.imp \
-	$(EOLIST)
- 
-#   
-# Any symbols exported to here
-#
-FILES_nlm_exports = \
-	unique_id_module \
-	$(EOLIST)
-	
-#   
-# These are the OBJ files needed to create the LIB target above.
-# Paths must all use the '/' character
-#
-FILES_lib_objs = \
-		$(EOLIST)
-
-#
-# implement targets and dependancies (leave this section alone)
-#
-
-libs :: $(OBJDIR) $(TARGET_lib)
-
-nlms :: libs $(TARGET_nlm)
-
-#
-# Updated this target to create necessary directories and copy files to the 
-# correct place.  (See $(AP_WORK)\build\NWGNUhead.inc for examples)
-#
-install :: nlms FORCE
-
-#
-# Any specialized rules here
-#
-
-$(OBJDIR)/%.o: ../arch/netware/%.c $(OBJDIR)\cc.opt
-	@echo compiling $<
-	$(CC) $< -o=$(OBJDIR)\$(@F) @$(OBJDIR)\cc.opt
-
-#
-# Include the 'tail' makefile that has targets that depend on variables defined
-# in this makefile
-#
-
-include $(AP_WORK)\build\NWGNUtail.inc
-
diff --git a/modules/metadata/NWGNUusertrk b/modules/metadata/NWGNUusertrk
deleted file mode 100644
index 44bcb48..0000000
--- a/modules/metadata/NWGNUusertrk
+++ /dev/null
@@ -1,250 +0,0 @@
-#
-# Make sure all needed macro's are defined
-#
-
-#
-# Get the 'head' of the build environment if necessary.  This includes default
-# targets and paths to tools
-#
-
-ifndef EnvironmentDefined
-include $(AP_WORK)\build\NWGNUhead.inc
-endif
-
-#
-# These directories will be at the beginning of the include list, followed by
-# INCDIRS
-#
-XINCDIRS	+= \
-			$(AP_WORK)/include \
-			$(NWOS) \
-			$(AP_WORK)/modules/arch/netware \
-			$(AP_WORK)/srclib/apr/include \
-			$(AP_WORK)/srclib/apr-util/include \
-			$(AP_WORK)/srclib/apr \
-			$(EOLIST)
-
-#
-# These flags will come after CFLAGS
-#
-XCFLAGS		+= \
-			-prefix pre_nw.h \
-			$(EOLIST)
-
-#
-# These defines will come after DEFINES
-#
-XDEFINES	+= \
-			$(EOLIST)
-
-#
-# These flags will be added to the link.opt file
-#
-XLFLAGS		+= \
-			$(EOLIST)
-
-#
-# These values will be appended to the correct variables based on the value of
-# RELEASE
-#
-ifeq "$(RELEASE)" "debug"
-XINCDIRS	+= \
-			$(EOLIST)
-
-XCFLAGS		+= \
-			$(EOLIST)
-
-XDEFINES	+= \
-			$(EOLIST)
-
-XLFLAGS		+= \
-		   	$(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "noopt"
-XINCDIRS	+= \
-			$(EOLIST)
-
-XCFLAGS		+= \
-			$(EOLIST)
-
-XDEFINES	+= \
-			$(EOLIST)
-
-XLFLAGS		+= \
-		   	$(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "release"
-XINCDIRS	+= \
-			$(EOLIST)
-
-XCFLAGS		+= \
-			$(EOLIST)
-
-XDEFINES	+= \
-			$(EOLIST)
-
-XLFLAGS		+= \
-			$(EOLIST)
-endif
-
-#
-# These are used by the link target if an NLM is being generated
-# This is used by the link 'name' directive to name the nlm.  If left blank
-# TARGET_nlm (see below) will be used.
-#
-NLM_NAME		= usertrk
-
-#
-# This is used by the link '-desc ' directive. 
-# If left blank, NLM_NAME will be used.
-#
-NLM_DESCRIPTION	= User Track Module
-
-#
-# This is used by the '-threadname' directive.  If left blank,
-# NLM_NAME Thread will be used.
-#
-NLM_THREAD_NAME	= User Track Module
-
-#
-# If this is specified, it will override VERSION value in 
-# $(AP_WORK)\build\NWGNUenvironment.inc
-#
-NLM_VERSION		=
-
-#
-# If this is specified, it will override the default of 64K
-#
-NLM_STACK_SIZE	= 8192
-
-
-#
-# If this is specified it will be used by the link '-entry' directive
-#
-NLM_ENTRY_SYM	= _LibCPrelude
-
-#
-# If this is specified it will be used by the link '-exit' directive
-#
-NLM_EXIT_SYM	= _LibCPostlude
-
-#
-# If this is specified it will be used by the link '-check' directive
-#
-NLM_CHECK_SYM	=
-
-#
-# If these are specified it will be used by the link '-flags' directive
-#
-NLM_FLAGS		=  AUTOUNLOAD, PSEUDOPREEMPTION
-
-#
-# If this is specified it will be linked in with the XDCData option in the def 
-# file instead of the default of $(NWOS)/apache.xdc.  XDCData can be disabled
-# by setting APACHE_UNIPROC in the environment
-#
-XDCDATA         = 
-
-#
-# If there is an NLM target, put it here
-#
-TARGET_nlm = \
-	$(OBJDIR)/usertrk.nlm \
-	$(EOLIST)
-
-#
-# If there is an LIB target, put it here
-#
-TARGET_lib = \
-	$(EOLIST)
-
-#
-# These are the OBJ files needed to create the NLM target above.
-# Paths must all use the '/' character
-#
-FILES_nlm_objs = \
-	$(OBJDIR)/mod_usertrack.o \
-	$(EOLIST)
-
-#
-# These are the LIB files needed to create the NLM target above.
-# These will be added as a library command in the link.opt file.
-#
-FILES_nlm_libs = \
-   	libcpre.o \
-	$(EOLIST)
-
-#
-# These are the modules that the above NLM target depends on to load.
-# These will be added as a module command in the link.opt file.
-#
-FILES_nlm_modules = \
-	aprlib \
-	libc \
-	$(EOLIST)
-
-#
-# If the nlm has a msg file, put it's path here
-#
-FILE_nlm_msg =
- 
-#
-# If the nlm has a hlp file put it's path here
-#
-FILE_nlm_hlp =
-
-#
-# If this is specified, it will override $(NWOS)\copyright.txt.
-#
-FILE_nlm_copyright =
-
-#
-# Any additional imports go here
-#
-FILES_nlm_Ximports = \
-	@$(APR)/aprlib.imp \
-	@$(NWOS)/httpd.imp \
-	@libc.imp \
-	$(EOLIST)
- 
-#   
-# Any symbols exported to here
-#
-FILES_nlm_exports = \
-	usertrack_module \
-	$(EOLIST)
-	
-#   
-# These are the OBJ files needed to create the LIB target above.
-# Paths must all use the '/' character
-#
-FILES_lib_objs = \
-		$(EOLIST)
-
-#
-# implement targets and dependancies (leave this section alone)
-#
-
-libs :: $(OBJDIR) $(TARGET_lib)
-
-nlms :: libs $(TARGET_nlm)
-
-#
-# Updated this target to create necessary directories and copy files to the 
-# correct place.  (See $(AP_WORK)\build\NWGNUhead.inc for examples)
-#
-install :: nlms FORCE
-
-#
-# Any specialized rules here
-#
-
-#
-# Include the 'tail' makefile that has targets that depend on variables defined
-# in this makefile
-#
-
-include $(AP_WORK)\build\NWGNUtail.inc
-
diff --git a/modules/metadata/config.m4 b/modules/metadata/config.m4
deleted file mode 100644
index cd08b42..0000000
--- a/modules/metadata/config.m4
+++ /dev/null
@@ -1,23 +0,0 @@
-dnl modules enabled in this directory by default
-
-dnl APACHE_MODULE(name, helptext[, objects[, structname[, default[, config]]]])
-
-APACHE_MODPATH_INIT(metadata)
-
-APACHE_MODULE(env, clearing/setting of ENV vars, , , yes)
-APACHE_MODULE(mime_magic, automagically determining MIME type)
-APACHE_MODULE(cern_meta, CERN-type meta files)
-APACHE_MODULE(expires, Expires header control, , , most)
-APACHE_MODULE(headers, HTTP header control, , , most)
-
-APACHE_MODULE(usertrack, user-session tracking, , , , [
-  AC_CHECK_HEADERS(sys/times.h)
-  AC_CHECK_FUNCS(times)
-])
-
-APACHE_MODULE(unique_id, per-request unique ids)
-APACHE_MODULE(setenvif, basing ENV vars on headers, , , yes)
-
-APR_ADDTO(LT_LDFLAGS,-export-dynamic)
-
-APACHE_MODPATH_FINISH
diff --git a/modules/metadata/mod_cern_meta.c b/modules/metadata/mod_cern_meta.c
deleted file mode 100644
index 2808a44..0000000
--- a/modules/metadata/mod_cern_meta.c
+++ /dev/null
@@ -1,413 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-/*
- * mod_cern_meta.c
- * version 0.1.0
- * status beta
- * 
- * Andrew Wilson <Andrew.Wilson@cm.cf.ac.uk> 25.Jan.96
- *
- * *** IMPORTANT ***
- * This version of mod_cern_meta.c controls Meta File behaviour on a
- * per-directory basis.  Previous versions of the module defined behaviour
- * on a per-server basis.  The upshot is that you'll need to revisit your 
- * configuration files in order to make use of the new module.
- * ***
- *
- * Emulate the CERN HTTPD Meta file semantics.  Meta files are HTTP
- * headers that can be output in addition to the normal range of
- * headers for each file accessed.  They appear rather like the Apache
- * .asis files, and are able to provide a crude way of influencing
- * the Expires: header, as well as providing other curiosities.
- * There are many ways to manage meta information, this one was
- * chosen because there is already a large number of CERN users
- * who can exploit this module.  It should be noted that there are probably
- * more sensitive ways of managing the Expires: header specifically.
- *
- * The module obeys the following directives, which can appear 
- * in the server's .conf files and in .htaccess files.
- *
- *  MetaFiles <on|off> 
- *
- *    turns on|off meta file processing for any directory.  
- *    Default value is off
- *
- *        # turn on MetaFiles in this directory
- *        MetaFiles on
- *
- *  MetaDir <directory name>
- *      
- *    specifies the name of the directory in which Apache can find
- *    meta information files.  The directory is usually a 'hidden'
- *    subdirectory of the directory that contains the file being
- *    accessed.  eg:
- *
- *        # .meta files are in the *same* directory as the 
- *        # file being accessed
- *        MetaDir .
- *
- *    the default is to look in a '.web' subdirectory. This is the
- *    same as for CERN 3.+ webservers and behaviour is the same as 
- *    for the directive:
- *
- *        MetaDir .web
- *
- *  MetaSuffix <meta file suffix>
- *
- *    specifies the file name suffix for the file containing the
- *    meta information.  eg:
- *
- *       # our meta files are suffixed with '.cern_meta'
- *       MetaSuffix .cern_meta
- *
- *    the default is to look for files with the suffix '.meta'.  This
- *    behaviour is the same as for the directive:
- *
- *       MetaSuffix .meta
- *
- * When accessing the file
- *
- *   DOCUMENT_ROOT/somedir/index.html
- *
- * this module will look for the file
- *
- *   DOCUMENT_ROOT/somedir/.web/index.html.meta
- *
- * and will use its contents to generate additional MIME header 
- * information.
- *
- * For more information on the CERN Meta file semantics see:
- *
- *   http://www.w3.org/hypertext/WWW/Daemon/User/Config/General.html#MetaDir
- *
- * Change-log:
- * 29.Jan.96 pfopen/pfclose instead of fopen/fclose
- *           DECLINE when real file not found, we may be checking each
- *           of the index.html/index.shtml/index.htm variants and don't
- *           need to report missing ones as spurious errors. 
- * 31.Jan.96 log_error reports about a malformed .meta file, rather
- *           than a script error.
- * 20.Jun.96 MetaFiles <on|off> default off, added, so that module
- *           can be configured per-directory.  Prior to this the module
- *           was running for each request anywhere on the server, naughty..
- * 29.Jun.96 All directives made per-directory.
- */
-
-#include "apr.h"
-#include "apr_strings.h"
-
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-#if APR_HAVE_SYS_TYPES_H
-#include <sys/types.h>
-#endif
-
-#include "ap_config.h"
-#include "httpd.h"
-#include "http_config.h"
-#include "util_script.h"
-#include "http_log.h"
-#include "http_request.h"
-#include "apr_lib.h"
-
-#define DIR_CMD_PERMS OR_INDEXES
-
-#define DEFAULT_METADIR		".web"
-#define DEFAULT_METASUFFIX	".meta"
-#define DEFAULT_METAFILES	0
-
-module AP_MODULE_DECLARE_DATA cern_meta_module;
-
-typedef struct {
-    const char *metadir;
-    const char *metasuffix;
-    int metafiles;
-} cern_meta_dir_config;
-
-static void *create_cern_meta_dir_config(apr_pool_t *p, char *dummy)
-{
-    cern_meta_dir_config *new =
-    (cern_meta_dir_config *) apr_palloc(p, sizeof(cern_meta_dir_config));
-
-    new->metadir = NULL;
-    new->metasuffix = NULL;
-    new->metafiles = DEFAULT_METAFILES;
-
-    return new;
-}
-
-static void *merge_cern_meta_dir_configs(apr_pool_t *p, void *basev, void *addv)
-{
-    cern_meta_dir_config *base = (cern_meta_dir_config *) basev;
-    cern_meta_dir_config *add = (cern_meta_dir_config *) addv;
-    cern_meta_dir_config *new =
-    (cern_meta_dir_config *) apr_palloc(p, sizeof(cern_meta_dir_config));
-
-    new->metadir = add->metadir ? add->metadir : base->metadir;
-    new->metasuffix = add->metasuffix ? add->metasuffix : base->metasuffix;
-    new->metafiles = add->metafiles;
-
-    return new;
-}
-
-static const char *set_metadir(cmd_parms *parms, void *in_dconf, const char *arg)
-{
-    cern_meta_dir_config *dconf = in_dconf;
-
-    dconf->metadir = arg;
-    return NULL;
-}
-
-static const char *set_metasuffix(cmd_parms *parms, void *in_dconf, const char *arg)
-{
-    cern_meta_dir_config *dconf = in_dconf;
-
-    dconf->metasuffix = arg;
-    return NULL;
-}
-
-static const char *set_metafiles(cmd_parms *parms, void *in_dconf, int arg)
-{
-    cern_meta_dir_config *dconf = in_dconf;
-
-    dconf->metafiles = arg;
-    return NULL;
-}
-
-
-static const command_rec cern_meta_cmds[] =
-{
-    AP_INIT_FLAG("MetaFiles", set_metafiles, NULL, DIR_CMD_PERMS,
-                 "Limited to 'on' or 'off'"),
-    AP_INIT_TAKE1("MetaDir", set_metadir, NULL, DIR_CMD_PERMS,
-                  "the name of the directory containing meta files"),
-    AP_INIT_TAKE1("MetaSuffix", set_metasuffix, NULL, DIR_CMD_PERMS,
-                  "the filename suffix for meta files"),
-    {NULL}
-};
-
-/* XXX: this is very similar to ap_scan_script_header_err_core...
- * are the differences deliberate, or just a result of bit rot?
- */
-static int scan_meta_file(request_rec *r, apr_file_t *f)
-{
-    char w[MAX_STRING_LEN];
-    char *l;
-    int p;
-    apr_table_t *tmp_headers;
-
-    tmp_headers = apr_table_make(r->pool, 5);
-    while (apr_file_gets(w, MAX_STRING_LEN - 1, f) == APR_SUCCESS) {
-
-	/* Delete terminal (CR?)LF */
-
-	p = strlen(w);
-	if (p > 0 && w[p - 1] == '\n') {
-	    if (p > 1 && w[p - 2] == '\015')
-		w[p - 2] = '\0';
-	    else
-		w[p - 1] = '\0';
-	}
-
-	if (w[0] == '\0') {
-	    return OK;
-	}
-
-	/* if we see a bogus header don't ignore it. Shout and scream */
-
-	if (!(l = strchr(w, ':'))) {
- 	    ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-			"malformed header in meta file: %s", r->filename);
-	    return HTTP_INTERNAL_SERVER_ERROR;
-	}
-
-	*l++ = '\0';
-	while (*l && apr_isspace(*l))
-	    ++l;
-
-	if (!strcasecmp(w, "Content-type")) {
-	    char *tmp;
-	    /* Nuke trailing whitespace */
-
-	    char *endp = l + strlen(l) - 1;
-	    while (endp > l && apr_isspace(*endp))
-		*endp-- = '\0';
-
-	    tmp = apr_pstrdup(r->pool, l);
-	    ap_content_type_tolower(tmp);
-	    r->content_type = tmp;
-	}
-	else if (!strcasecmp(w, "Status")) {
-	    sscanf(l, "%d", &r->status);
-	    r->status_line = apr_pstrdup(r->pool, l);
-	}
-	else {
-	    apr_table_set(tmp_headers, w, l);
-	}
-    }
-    apr_table_overlap(r->headers_out, tmp_headers, APR_OVERLAP_TABLES_SET);
-    return OK;
-}
-
-static int add_cern_meta_data(request_rec *r)
-{
-    char *metafilename;
-    char *leading_slash;
-    char *last_slash;
-    char *real_file;
-    char *scrap_book;
-    apr_file_t *f = NULL;
-    apr_status_t retcode;
-    cern_meta_dir_config *dconf;
-    int rv;
-    request_rec *rr;
-
-    dconf = ap_get_module_config(r->per_dir_config, &cern_meta_module);
-
-    if (!dconf->metafiles) {
-	return DECLINED;
-    };
-
-    /* if ./.web/$1.meta exists then output 'asis' */
-
-    if (r->finfo.filetype == 0) {
-	return DECLINED;
-    };
-
-    /* is this a directory? */
-    if (r->finfo.filetype == APR_DIR || r->uri[strlen(r->uri) - 1] == '/') {
-	return DECLINED;
-    };
-
-    /* what directory is this file in? */
-    scrap_book = apr_pstrdup(r->pool, r->filename);
-
-    leading_slash = strchr(scrap_book, '/');
-    last_slash = strrchr(scrap_book, '/');
-    if ((last_slash != NULL) && (last_slash != leading_slash)) {
-	/* skip over last slash */
-	real_file = last_slash;
-	real_file++;
-	*last_slash = '\0';
-    }
-    else {
-	/* no last slash, buh?! */
-	ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-		    "internal error in mod_cern_meta: %s", r->filename);
-	/* should really barf, but hey, let's be friends... */
-	return DECLINED;
-    };
-
-    metafilename = apr_pstrcat(r->pool, scrap_book, "/",
-			   dconf->metadir ? dconf->metadir : DEFAULT_METADIR,
-			   "/", real_file,
-		 dconf->metasuffix ? dconf->metasuffix : DEFAULT_METASUFFIX,
-			   NULL);
-
-    /* It sucks to require this subrequest to complete, because this
-     * means people must leave their meta files accessible to the world.
-     * A better solution might be a "safe open" feature of pfopen to avoid
-     * pipes, symlinks, and crap like that.
-     *
-     * In fact, this doesn't suck.  Because <Location > blocks are never run
-     * against sub_req_lookup_file, the meta can be somewhat protected by
-     * either masking it with a <Location > directive or alias, or stowing
-     * the file outside of the web document tree, while providing the
-     * appropriate directory blocks to allow access to it as a file.
-     */
-    rr = ap_sub_req_lookup_file(metafilename, r, NULL);
-    if (rr->status != HTTP_OK) {
-	ap_destroy_sub_req(rr);
-	return DECLINED;
-    }
-    ap_destroy_sub_req(rr);
-
-    retcode = apr_file_open(&f, metafilename, APR_READ | APR_CREATE, APR_OS_DEFAULT, r->pool);
-    if (retcode != APR_SUCCESS) {
-	if (APR_STATUS_IS_ENOENT(retcode)) {
-	    return DECLINED;
-	}
-	ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
-	      "meta file permissions deny server access: %s", metafilename);
-	return HTTP_FORBIDDEN;
-    };
-
-    /* read the headers in */
-    rv = scan_meta_file(r, f);
-    apr_file_close(f);
-
-    return rv;
-}
-
-static void register_hooks(apr_pool_t *p)
-{
-    ap_hook_fixups(add_cern_meta_data,NULL,NULL,APR_HOOK_MIDDLE);
-}
-
-module AP_MODULE_DECLARE_DATA cern_meta_module =
-{
-    STANDARD20_MODULE_STUFF,
-    create_cern_meta_dir_config,/* dir config creater */
-    merge_cern_meta_dir_configs,/* dir merger --- default is to override */
-    NULL,			/* server config */
-    NULL,			/* merge server configs */
-    cern_meta_cmds,		/* command apr_table_t */
-    register_hooks		/* register hooks */
-};
diff --git a/modules/metadata/mod_cern_meta.dsp b/modules/metadata/mod_cern_meta.dsp
deleted file mode 100644
index 3476e04..0000000
--- a/modules/metadata/mod_cern_meta.dsp
+++ /dev/null
@@ -1,128 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mod_cern_meta" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mod_cern_meta - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "mod_cern_meta.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "mod_cern_meta.mak" CFG="mod_cern_meta - Win32 Release"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "mod_cern_meta - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mod_cern_meta - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "mod_cern_meta - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /O2 /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Release\mod_cern_meta" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /map /machine:I386 /out:"Release/mod_cern_meta.so" /base:@..\..\os\win32\BaseAddr.ref,mod_cern_meta
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /map /machine:I386 /out:"Release/mod_cern_meta.so" /base:@..\..\os\win32\BaseAddr.ref,mod_cern_meta
-
-!ELSEIF  "$(CFG)" == "mod_cern_meta - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Debug\mod_cern_meta" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /map /debug /machine:I386 /out:"Debug/mod_cern_meta.so" /base:@..\..\os\win32\BaseAddr.ref,mod_cern_meta
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /map /debug /machine:I386 /out:"Debug/mod_cern_meta.so" /base:@..\..\os\win32\BaseAddr.ref,mod_cern_meta
-
-!ENDIF 
-
-# Begin Target
-
-# Name "mod_cern_meta - Win32 Release"
-# Name "mod_cern_meta - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\mod_cern_meta.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mod_cern_meta.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\build\win32\win32ver.awk
-
-!IF  "$(CFG)" == "mod_cern_meta - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_cern_meta.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ../../build/win32/win32ver.awk mod_cern_meta  "cern_meta_module for Apache" ../../include/ap_release.h > .\mod_cern_meta.rc
-
-# End Custom Build
-
-!ELSEIF  "$(CFG)" == "mod_cern_meta - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_cern_meta.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ../../build/win32/win32ver.awk mod_cern_meta  "cern_meta_module for Apache" ../../include/ap_release.h > .\mod_cern_meta.rc
-
-# End Custom Build
-
-!ENDIF 
-
-# End Source File
-# End Target
-# End Project
diff --git a/modules/metadata/mod_cern_meta.exp b/modules/metadata/mod_cern_meta.exp
deleted file mode 100644
index d36e2be..0000000
--- a/modules/metadata/mod_cern_meta.exp
+++ /dev/null
@@ -1 +0,0 @@
-cern_meta_module
diff --git a/modules/metadata/mod_env.c b/modules/metadata/mod_env.c
deleted file mode 100644
index c7e587c..0000000
--- a/modules/metadata/mod_env.c
+++ /dev/null
@@ -1,217 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-#include "apr.h"
-#include "apr_strings.h"
-
-#if APR_HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-
-#include "ap_config.h"
-#include "httpd.h"
-#include "http_config.h"
-#include "http_request.h"
-#include "http_log.h"
-
-typedef struct {
-    apr_table_t *vars;
-    apr_table_t *unsetenv;
-} env_dir_config_rec;
-
-module AP_MODULE_DECLARE_DATA env_module;
-
-static void *create_env_dir_config(apr_pool_t *p, char *dummy)
-{
-    env_dir_config_rec *conf = apr_palloc(p, sizeof(*conf));
-
-    conf->vars = apr_table_make(p, 10);
-    conf->unsetenv = apr_table_make(p, 10);
-
-    return conf;
-}
-
-static void *merge_env_dir_configs(apr_pool_t *p, void *basev, void *addv)
-{
-    env_dir_config_rec *base = basev;
-    env_dir_config_rec *add = addv;
-    env_dir_config_rec *res = apr_palloc(p, sizeof(*res));
-
-    const apr_table_entry_t *elts;
-    const apr_array_header_t *arr;
-
-    int i;
-
-    /* 
-     * res->vars = copy_table( p, base->vars );
-     * foreach $unsetenv ( @add->unsetenv )
-     *     table_unset( res->vars, $unsetenv );
-     * foreach $element ( @add->vars )
-     *     table_set( res->vars, $element.key, $element.val );
-     *
-     * add->unsetenv already removed the vars from add->vars, 
-     * if they preceeded the UnsetEnv directive.
-     */
-    res->vars = apr_table_copy(p, base->vars);
-    res->unsetenv = NULL;
-
-    arr = apr_table_elts(add->unsetenv);
-    elts = (const apr_table_entry_t *)arr->elts;
-
-    for (i = 0; i < arr->nelts; ++i) {
-        apr_table_unset(res->vars, elts[i].key);
-    }
-
-    arr = apr_table_elts(add->vars);
-    elts = (const apr_table_entry_t *)arr->elts;
-
-    for (i = 0; i < arr->nelts; ++i) {
-        apr_table_setn(res->vars, elts[i].key, elts[i].val);
-    }
-
-    return res;
-}
-
-static const char *add_env_module_vars_passed(cmd_parms *cmd, void *sconf_,
-                                              const char *arg)
-{
-    env_dir_config_rec *sconf = sconf_;
-    apr_table_t *vars = sconf->vars;
-    const char *env_var;
-    
-    env_var = getenv(arg);
-    if (env_var != NULL) {
-        apr_table_setn(vars, arg, apr_pstrdup(cmd->pool, env_var));
-    }
-    else {
-        ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_WARNING, 0, cmd->server,
-                     "PassEnv variable %s was undefined", arg);
-    }
-
-    return NULL;
-}
-
-static const char *add_env_module_vars_set(cmd_parms *cmd, void *sconf_,
-                                           const char *name, const char *value)
-{
-    env_dir_config_rec *sconf = sconf_;
-    
-    /* name is mandatory, value is optional.  no value means
-     * set the variable to an empty string
-     */
-    apr_table_setn(sconf->vars, name, value);
-
-    return NULL;
-}
-
-static const char *add_env_module_vars_unset(cmd_parms *cmd, void *sconf_,
-                                             const char *arg)
-{
-    env_dir_config_rec *sconf = sconf_;
-
-    /* Always UnsetEnv FOO in the same context as {Set,Pass}Env FOO
-     * only if this UnsetEnv follows the {Set,Pass}Env.  The merge
-     * will only apply unsetenv to the parent env (main server).
-     */
-    apr_table_set(sconf->unsetenv, arg, NULL);
-    apr_table_unset(sconf->vars, arg);
-
-    return NULL;
-}
-
-static const command_rec env_module_cmds[] =
-{
-AP_INIT_ITERATE("PassEnv", add_env_module_vars_passed, NULL,
-     OR_FILEINFO, "a list of environment variables to pass to CGI."),
-AP_INIT_TAKE12("SetEnv", add_env_module_vars_set, NULL,
-     OR_FILEINFO, "an environment variable name and optional value to pass to CGI."),
-AP_INIT_ITERATE("UnsetEnv", add_env_module_vars_unset, NULL,
-     OR_FILEINFO, "a list of variables to remove from the CGI environment."),
-    {NULL},
-};
-
-static int fixup_env_module(request_rec *r)
-{
-    apr_table_t *e = r->subprocess_env;
-    env_dir_config_rec *sconf = ap_get_module_config(r->per_dir_config,
-                                                     &env_module);
-    apr_table_t *vars = sconf->vars;
-
-    if (!apr_table_elts(sconf->vars)->nelts)
-        return DECLINED;
-
-    r->subprocess_env = apr_table_overlay(r->pool, e, vars);
-
-    return OK;
-}
-
-static void register_hooks(apr_pool_t *p)
-{
-    ap_hook_fixups(fixup_env_module, NULL, NULL, APR_HOOK_MIDDLE);
-}
-
-module AP_MODULE_DECLARE_DATA env_module =
-{
-    STANDARD20_MODULE_STUFF,
-    create_env_dir_config,      /* dir config creater */
-    merge_env_dir_configs,      /* dir merger --- default is to override */
-    NULL,                       /* server config */
-    NULL,                       /* merge server configs */
-    env_module_cmds,            /* command apr_table_t */
-    register_hooks              /* register hooks */
-};
diff --git a/modules/metadata/mod_env.dsp b/modules/metadata/mod_env.dsp
deleted file mode 100644
index 13a4123..0000000
--- a/modules/metadata/mod_env.dsp
+++ /dev/null
@@ -1,128 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mod_env" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mod_env - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "mod_env.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "mod_env.mak" CFG="mod_env - Win32 Release"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "mod_env - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mod_env - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "mod_env - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /O2 /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Release\mod_env" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /map /machine:I386 /out:"Release/mod_env.so" /base:@..\..\os\win32\BaseAddr.ref,mod_env
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /map /machine:I386 /out:"Release/mod_env.so" /base:@..\..\os\win32\BaseAddr.ref,mod_env
-
-!ELSEIF  "$(CFG)" == "mod_env - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Debug\mod_env" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /map /debug /machine:I386 /out:"Debug/mod_env.so" /base:@..\..\os\win32\BaseAddr.ref,mod_env
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /map /debug /machine:I386 /out:"Debug/mod_env.so" /base:@..\..\os\win32\BaseAddr.ref,mod_env
-
-!ENDIF 
-
-# Begin Target
-
-# Name "mod_env - Win32 Release"
-# Name "mod_env - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\mod_env.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mod_env.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\build\win32\win32ver.awk
-
-!IF  "$(CFG)" == "mod_env - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_env.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ../../build/win32/win32ver.awk mod_env  "env_module for Apache" ../../include/ap_release.h  > .\mod_env.rc
-
-# End Custom Build
-
-!ELSEIF  "$(CFG)" == "mod_env - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_env.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ../../build/win32/win32ver.awk mod_env  "env_module for Apache" ../../include/ap_release.h  > .\mod_env.rc
-
-# End Custom Build
-
-!ENDIF 
-
-# End Source File
-# End Target
-# End Project
diff --git a/modules/metadata/mod_env.exp b/modules/metadata/mod_env.exp
deleted file mode 100644
index b487bf0..0000000
--- a/modules/metadata/mod_env.exp
+++ /dev/null
@@ -1 +0,0 @@
-env_module
diff --git a/modules/metadata/mod_expires.c b/modules/metadata/mod_expires.c
deleted file mode 100644
index 757e498..0000000
--- a/modules/metadata/mod_expires.c
+++ /dev/null
@@ -1,523 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-/*
- * mod_expires.c
- * version 0.0.11
- * status beta
- * 
- * Andrew Wilson <Andrew.Wilson@cm.cf.ac.uk> 26.Jan.96
- *
- * This module allows you to control the form of the Expires: header
- * that Apache issues for each access.  Directives can appear in
- * configuration files or in .htaccess files so expiry semantics can
- * be defined on a per-directory basis.  
- *
- * DIRECTIVE SYNTAX
- *
- * Valid directives are:
- *
- *     ExpiresActive on | off
- *     ExpiresDefault <code><seconds>
- *     ExpiresByType type/encoding <code><seconds>
- *
- * Valid values for <code> are:
- *
- *     'M'      expires header shows file modification date + <seconds>
- *     'A'      expires header shows access time + <seconds>
- *
- *              [I'm not sure which of these is best under different
- *              circumstances, I guess it's for other people to explore.
- *              The effects may be indistinguishable for a number of cases]
- *
- * <seconds> should be an integer value [acceptable to atoi()]
- *
- * There is NO space between the <code> and <seconds>.
- *
- * For example, a directory which contains information which changes
- * frequently might contain:
- *
- *     # reports generated by cron every hour.  don't let caches
- *     # hold onto stale information
- *     ExpiresDefault M3600
- *
- * Another example, our html pages can change all the time, the gifs
- * tend not to change often:
- * 
- *     # pages are hot (1 week), images are cold (1 month)
- *     ExpiresByType text/html A604800
- *     ExpiresByType image/gif A2592000
- *
- * Expires can be turned on for all URLs on the server by placing the
- * following directive in a conf file:
- *
- *     ExpiresActive on
- *
- * ExpiresActive can also appear in .htaccess files, enabling the
- * behaviour to be turned on or off for each chosen directory.
- *
- *     # turn off Expires behaviour in this directory
- *     # and subdirectories
- *     ExpiresActive off
- *
- * Directives defined for a directory are valid in subdirectories
- * unless explicitly overridden by new directives in the subdirectory
- * .htaccess files.
- *
- * ALTERNATIVE DIRECTIVE SYNTAX
- *
- * Directives can also be defined in a more readable syntax of the form:
- *
- *     ExpiresDefault "<base> [plus] {<num> <type>}*"
- *     ExpiresByType type/encoding "<base> [plus] {<num> <type>}*"
- *
- * where <base> is one of:
- *      access  
- *      now             equivalent to 'access'
- *      modification
- *
- * where the 'plus' keyword is optional
- *
- * where <num> should be an integer value [acceptable to atoi()]
- *
- * where <type> is one of:
- *      years
- *      months
- *      weeks
- *      days
- *      hours
- *      minutes
- *      seconds
- *
- * For example, any of the following directives can be used to make
- * documents expire 1 month after being accessed, by default:
- *
- *      ExpiresDefault "access plus 1 month"
- *      ExpiresDefault "access plus 4 weeks"
- *      ExpiresDefault "access plus 30 days"
- *
- * The expiry time can be fine-tuned by adding several '<num> <type>'
- * clauses:
- *
- *      ExpiresByType text/html "access plus 1 month 15 days 2 hours"
- *      ExpiresByType image/gif "modification plus 5 hours 3 minutes"
- *
- * ---
- *
- * Change-log:
- * 29.Jan.96    Hardened the add_* functions.  Server will now bail out
- *              if bad directives are given in the conf files.
- * 02.Feb.96    Returns DECLINED if not 'ExpiresActive on', giving other
- *              expires-aware modules a chance to play with the same
- *              directives. [Michael Rutman]
- * 03.Feb.96    Call tzset() before localtime().  Trying to get the module
- *              to work properly in non GMT timezones.
- * 12.Feb.96    Modified directive syntax to allow more readable commands:
- *                ExpiresDefault "now plus 10 days 20 seconds"
- *                ExpiresDefault "access plus 30 days"
- *                ExpiresDefault "modification plus 1 year 10 months 30 days"
- * 13.Feb.96    Fix call to table_get() with NULL 2nd parameter [Rob Hartill]
- * 19.Feb.96    Call gm_timestr_822() to get time formatted correctly, can't
- *              rely on presence of HTTP_TIME_FORMAT in Apache 1.1+.
- * 21.Feb.96    This version (0.0.9) reverses assumptions made in 0.0.8
- *              about star/star handlers.  Reverting to 0.0.7 behaviour.
- * 08.Jun.96    allows ExpiresDefault to be used with responses that use 
- *              the DefaultType by not DECLINING, but instead skipping 
- *              the table_get check and then looking for an ExpiresDefault.
- *              [Rob Hartill]
- * 04.Nov.96    'const' definitions added.
- *
- * TODO
- * add support for Cache-Control: max-age=20 from the HTTP/1.1
- * proposal (in this case, a ttl of 20 seconds) [ask roy]
- * add per-file expiry and explicit expiry times - duplicates some
- * of the mod_cern_meta.c functionality.  eg:
- *              ExpiresExplicit index.html "modification plus 30 days"
- *
- * BUGS
- * Hi, welcome to the internet.
- */
-
-#include "apr.h"
-#include "apr_strings.h"
-#include "apr_lib.h"
-
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-#include "ap_config.h"
-#include "httpd.h"
-#include "http_config.h"
-#include "http_log.h"
-#include "http_request.h"
-
-typedef struct {
-    int active;
-    char *expiresdefault;
-    apr_table_t *expiresbytype;
-} expires_dir_config;
-
-/* from mod_dir, why is this alias used?
- */
-#define DIR_CMD_PERMS OR_INDEXES
-
-#define ACTIVE_ON       1
-#define ACTIVE_OFF      0
-#define ACTIVE_DONTCARE 2
-
-module AP_MODULE_DECLARE_DATA expires_module;
-
-static void *create_dir_expires_config(apr_pool_t *p, char *dummy)
-{
-    expires_dir_config *new =
-    (expires_dir_config *) apr_pcalloc(p, sizeof(expires_dir_config));
-    new->active = ACTIVE_DONTCARE;
-    new->expiresdefault = "";
-    new->expiresbytype = apr_table_make(p, 4);
-    return (void *) new;
-}
-
-static const char *set_expiresactive(cmd_parms *cmd, void *in_dir_config, int arg)
-{
-    expires_dir_config *dir_config = in_dir_config;
-
-    /* if we're here at all it's because someone explicitly
-     * set the active flag
-     */
-    dir_config->active = ACTIVE_ON;
-    if (arg == 0) {
-        dir_config->active = ACTIVE_OFF;
-    }
-    return NULL;
-}
-
-/* check_code() parse 'code' and return NULL or an error response
- * string.  If we return NULL then real_code contains code converted
- * to the cnnnn format.
- */
-static char *check_code(apr_pool_t *p, const char *code, char **real_code)
-{
-    char *word;
-    char base = 'X';
-    int modifier = 0;
-    int num = 0;
-    int factor = 0;
-
-    /* 0.0.4 compatibility?
-     */
-    if ((code[0] == 'A') || (code[0] == 'M')) {
-        *real_code = (char *)code;
-        return NULL;
-    }
-
-    /* <base> [plus] {<num> <type>}*
-     */
-
-    /* <base>
-     */
-    word = ap_getword_conf(p, &code);
-    if (!strncasecmp(word, "now", 1) ||
-        !strncasecmp(word, "access", 1)) {
-        base = 'A';
-    }
-    else if (!strncasecmp(word, "modification", 1)) {
-        base = 'M';
-    }
-    else {
-        return apr_pstrcat(p, "bad expires code, unrecognised <base> '",
-                       word, "'", NULL);
-    }
-
-    /* [plus]
-     */
-    word = ap_getword_conf(p, &code);
-    if (!strncasecmp(word, "plus", 1)) {
-        word = ap_getword_conf(p, &code);
-    }
-
-    /* {<num> <type>}*
-     */
-    while (word[0]) {
-        /* <num>
-         */
-        if (apr_isdigit(word[0])) {
-            num = atoi(word);
-        }
-        else {
-            return apr_pstrcat(p, "bad expires code, numeric value expected <num> '",
-                           word, "'", NULL);
-        }
-
-        /* <type>
-         */
-        word = ap_getword_conf(p, &code);
-        if (word[0]) {
-            /* do nothing */
-        }
-        else {
-            return apr_pstrcat(p, "bad expires code, missing <type>", NULL);
-        }
-
-        factor = 0;
-        if (!strncasecmp(word, "years", 1)) {
-            factor = 60 * 60 * 24 * 365;
-        }
-        else if (!strncasecmp(word, "months", 2)) {
-            factor = 60 * 60 * 24 * 30;
-        }
-        else if (!strncasecmp(word, "weeks", 1)) {
-            factor = 60 * 60 * 24 * 7;
-        }
-        else if (!strncasecmp(word, "days", 1)) {
-            factor = 60 * 60 * 24;
-        }
-        else if (!strncasecmp(word, "hours", 1)) {
-            factor = 60 * 60;
-        }
-        else if (!strncasecmp(word, "minutes", 2)) {
-            factor = 60;
-        }
-        else if (!strncasecmp(word, "seconds", 1)) {
-            factor = 1;
-        }
-        else {
-            return apr_pstrcat(p, "bad expires code, unrecognised <type>",
-                           "'", word, "'", NULL);
-        }
-
-        modifier = modifier + factor * num;
-
-        /* next <num>
-         */
-        word = ap_getword_conf(p, &code);
-    }
-
-    *real_code = apr_psprintf(p, "%c%d", base, modifier);
-
-    return NULL;
-}
-
-static const char *set_expiresbytype(cmd_parms *cmd, void *in_dir_config,
-                                     const char *mime, const char *code)
-{
-    expires_dir_config *dir_config = in_dir_config;
-    char *response, *real_code;
-
-    if ((response = check_code(cmd->pool, code, &real_code)) == NULL) {
-        apr_table_setn(dir_config->expiresbytype, mime, real_code);
-        return NULL;
-    }
-    return apr_pstrcat(cmd->pool,
-                 "'ExpiresByType ", mime, " ", code, "': ", response, NULL);
-}
-
-static const char *set_expiresdefault(cmd_parms *cmd, void *in_dir_config,
-                                      const char *code)
-{
-    expires_dir_config * dir_config = in_dir_config;
-    char *response, *real_code;
-
-    if ((response = check_code(cmd->pool, code, &real_code)) == NULL) {
-        dir_config->expiresdefault = real_code;
-        return NULL;
-    }
-    return apr_pstrcat(cmd->pool,
-                   "'ExpiresDefault ", code, "': ", response, NULL);
-}
-
-static const command_rec expires_cmds[] =
-{
-    AP_INIT_FLAG("ExpiresActive", set_expiresactive, NULL, DIR_CMD_PERMS,
-                 "Limited to 'on' or 'off'"),
-    AP_INIT_TAKE2("ExpiresByType", set_expiresbytype, NULL, DIR_CMD_PERMS,
-                  "a MIME type followed by an expiry date code"),
-    AP_INIT_TAKE1("ExpiresDefault", set_expiresdefault, NULL, DIR_CMD_PERMS,
-                  "an expiry date code"),
-    {NULL}
-};
-
-static void *merge_expires_dir_configs(apr_pool_t *p, void *basev, void *addv)
-{
-    expires_dir_config *new = (expires_dir_config *) apr_pcalloc(p, sizeof(expires_dir_config));
-    expires_dir_config *base = (expires_dir_config *) basev;
-    expires_dir_config *add = (expires_dir_config *) addv;
-
-    if (add->active == ACTIVE_DONTCARE) {
-        new->active = base->active;
-    }
-    else {
-        new->active = add->active;
-    }
-
-    if (add->expiresdefault[0] != '\0') {
-        new->expiresdefault = add->expiresdefault;
-    }
-    else {
-	new->expiresdefault = base->expiresdefault;
-    }
-
-    new->expiresbytype = apr_table_overlay(p, add->expiresbytype,
-                                        base->expiresbytype);
-    return new;
-}
-
-static int add_expires(request_rec *r)
-{
-    expires_dir_config *conf;
-    char *code;
-    apr_time_t base;
-    apr_time_t additional;
-    apr_time_t expires;
-    char *timestr;
-
-    if (ap_is_HTTP_ERROR(r->status))       /* Don't add Expires headers to errors */
-        return DECLINED;
-
-    if (r->main != NULL)        /* Say no to subrequests */
-        return DECLINED;
-
-    conf = (expires_dir_config *) ap_get_module_config(r->per_dir_config, &expires_module);
-    if (conf == NULL) {
-        ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                    "internal error: %s", r->filename);
-        return HTTP_INTERNAL_SERVER_ERROR;
-    }
-
-    if (conf->active != ACTIVE_ON)
-        return DECLINED;
-
-    /* we perhaps could use the default_type(r) in its place but that
-     * may be 2nd guesing the desired configuration...  calling table_get
-     * with a NULL key will SEGV us
-     *
-     * I still don't know *why* r->content_type would ever be NULL, this
-     * is possibly a result of fixups being called in many different
-     * places.  Fixups is probably the wrong place to be doing all this
-     * work...  Bah.
-     *
-     * Changed as of 08.Jun.96 don't DECLINE, look for an ExpiresDefault.
-     */
-    if (r->content_type == NULL)
-        code = NULL;
-    else
-        code = (char *) apr_table_get(conf->expiresbytype, 
-		ap_field_noparam(r->pool, r->content_type));
-
-    if (code == NULL) {
-        /* no expires defined for that type, is there a default? */
-        code = conf->expiresdefault;
-
-        if (code[0] == '\0')
-            return OK;
-    }
-
-    /* we have our code */
-
-    switch (code[0]) {
-    case 'M':
-	if (r->finfo.filetype == 0) { 
-	    /* file doesn't exist on disk, so we can't do anything based on
-	     * modification time.  Note that this does _not_ log an error.
-	     */
-	    return DECLINED;
-	}
-	base = r->finfo.mtime;
-        additional = atoi(&code[1]) * APR_USEC_PER_SEC;
-        break;
-    case 'A':
-        /* there's been some discussion and it's possible that 
-         * 'access time' will be stored in request structure
-         */
-        base = r->request_time;
-        additional = atoi(&code[1]) * APR_USEC_PER_SEC;
-        break;
-    default:
-        /* expecting the add_* routines to be case-hardened this 
-         * is just a reminder that module is beta
-         */
-        ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                    "internal error: bad expires code: %s", r->filename);
-        return HTTP_INTERNAL_SERVER_ERROR;
-    }
-
-    expires = base + additional;
-    apr_table_mergen(r->headers_out, "Cache-Control",
-		    apr_psprintf(r->pool, "max-age=%qd",
-				(expires - r->request_time)
-				    / APR_USEC_PER_SEC));
-    timestr = apr_palloc(r->pool, APR_RFC822_DATE_LEN);
-    apr_rfc822_date(timestr, expires);
-    apr_table_setn(r->headers_out, "Expires", timestr);
-    return OK;
-}
-
-static void register_hooks(apr_pool_t *p)
-{
-    ap_hook_fixups(add_expires,NULL,NULL,APR_HOOK_MIDDLE);
-}
-
-module AP_MODULE_DECLARE_DATA expires_module =
-{
-    STANDARD20_MODULE_STUFF,
-    create_dir_expires_config,  /* dir config creater */
-    merge_expires_dir_configs,  /* dir merger --- default is to override */
-    NULL,                       /* server config */
-    NULL,                       /* merge server configs */
-    expires_cmds,               /* command apr_table_t */
-    register_hooks		/* register hooks */
-};
diff --git a/modules/metadata/mod_expires.dsp b/modules/metadata/mod_expires.dsp
deleted file mode 100644
index ac9780f..0000000
--- a/modules/metadata/mod_expires.dsp
+++ /dev/null
@@ -1,128 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mod_expires" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mod_expires - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "mod_expires.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "mod_expires.mak" CFG="mod_expires - Win32 Release"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "mod_expires - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mod_expires - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "mod_expires - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /O2 /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Release\mod_expires" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /map /machine:I386 /out:"Release/mod_expires.so" /base:@..\..\os\win32\BaseAddr.ref,mod_expires
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /map /machine:I386 /out:"Release/mod_expires.so" /base:@..\..\os\win32\BaseAddr.ref,mod_expires
-
-!ELSEIF  "$(CFG)" == "mod_expires - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Debug\mod_expires" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /map /debug /machine:I386 /out:"Debug/mod_expires.so" /base:@..\..\os\win32\BaseAddr.ref,mod_expires
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /map /debug /machine:I386 /out:"Debug/mod_expires.so" /base:@..\..\os\win32\BaseAddr.ref,mod_expires
-
-!ENDIF 
-
-# Begin Target
-
-# Name "mod_expires - Win32 Release"
-# Name "mod_expires - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\mod_expires.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mod_expires.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\build\win32\win32ver.awk
-
-!IF  "$(CFG)" == "mod_expires - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_expires.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ../../build/win32/win32ver.awk mod_expires  "expires_module for Apache" ../../include/ap_release.h > .\mod_expires.rc
-
-# End Custom Build
-
-!ELSEIF  "$(CFG)" == "mod_expires - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_expires.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ../../build/win32/win32ver.awk mod_expires  "expires_module for Apache" ../../include/ap_release.h > .\mod_expires.rc
-
-# End Custom Build
-
-!ENDIF 
-
-# End Source File
-# End Target
-# End Project
diff --git a/modules/metadata/mod_expires.exp b/modules/metadata/mod_expires.exp
deleted file mode 100644
index 863a968..0000000
--- a/modules/metadata/mod_expires.exp
+++ /dev/null
@@ -1 +0,0 @@
-expires_module
diff --git a/modules/metadata/mod_headers.c b/modules/metadata/mod_headers.c
deleted file mode 100644
index 06ac3db..0000000
--- a/modules/metadata/mod_headers.c
+++ /dev/null
@@ -1,635 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-/*
- * mod_headers.c: Add/append/remove HTTP response headers
- *     Written by Paul Sutton, paul@ukweb.com, 1 Oct 1996
- *
- * The Header directive can be used to add/replace/remove HTTP headers
- * within the response message.  The RequestHeader directive can be used
- * to add/replace/remove HTTP headers before a request message is processed.
- * Valid in both per-server and per-dir configurations.
- *
- * Syntax is:
- *
- *   Header action header value
- *   RequestHeader action header value
- *
- * Where action is one of:
- *     set    - set this header, replacing any old value
- *     add    - add this header, possible resulting in two or more
- *              headers with the same name
- *     append - append this text onto any existing header of this same
- *     unset  - remove this header
- *
- * Where action is unset, the third argument (value) should not be given.
- * The header name can include the colon, or not.
- *
- * The Header and RequestHeader directives can only be used where allowed
- * by the FileInfo override.
- *
- * When the request is processed, the header directives are processed in
- * this order: firstly, the main server, then the virtual server handling
- * this request (if any), then any <Directory> sections (working downwards 
- * from the root dir), then an <Location> sections (working down from 
- * shortest URL component), the any <File> sections. This order is
- * important if any 'set' or 'unset' actions are used. For example,
- * the following two directives have different effect if applied in
- * the reverse order:
- *
- *   Header append Author "John P. Doe"
- *   Header unset Author
- *
- * Examples:
- *
- *  To set the "Author" header, use
- *     Header add Author "John P. Doe"
- *
- *  To remove a header:
- *     Header unset Author
- *
- */
-
-#include "apr.h"
-#include "apr_lib.h"
-#include "apr_strings.h"
-#include "apr_buckets.h"
-
-#include "apr_hash.h"
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-#include "httpd.h"
-#include "http_config.h"
-#include "http_request.h"
-#include "http_log.h"
-#include "util_filter.h"
-
-/* format_tag_hash is initialized during pre-config */
-static apr_hash_t *format_tag_hash;
-
-typedef enum {
-    hdr_add = 'a',              /* add header (could mean multiple hdrs) */
-    hdr_set = 's',              /* set (replace old value) */
-    hdr_append = 'm',           /* append (merge into any old value) */
-    hdr_unset = 'u',            /* unset header */
-    hdr_echo = 'e'              /* echo headers from request to response */
-} hdr_actions;
-
-typedef enum {
-    hdr_in = 0,                 /* RequestHeader */
-    hdr_out = 1                 /* Header */
-} hdr_inout;
-
-/*
- * There is an array of struct format_tag per Header/RequestHeader 
- * config directive
- */
-typedef struct {
-    const char* (*func)(request_rec *r,char *arg);
-    char *arg;
-} format_tag;
-
-/*
- * There is one "header_entry" per Header/RequestHeader config directive
- */
-typedef struct {
-    hdr_actions action;
-    char *header;
-    apr_array_header_t *ta;   /* Array of format_tag structs */
-    regex_t *regex;
-    const char *condition_var;
-} header_entry;
-
-/* echo_do is used for Header echo to iterate through the request headers*/
-typedef struct {
-    request_rec *r;
-    header_entry *hdr;
-} echo_do;
-
-/*
- * headers_conf is our per-module configuration. This is used as both
- * a per-dir and per-server config
- */
-typedef struct {
-    apr_array_header_t *fixup_in;
-    apr_array_header_t *fixup_out;
-} headers_conf;
-
-module AP_MODULE_DECLARE_DATA headers_module;
-
-/*
- * Tag formatting functions
- */
-static const char *constant_item(request_rec *r, char *stuff)
-{
-    return stuff;
-}
-static const char *header_request_duration(request_rec *r, char *a)
-{
-    return apr_psprintf(r->pool, "D=%qd", (apr_time_now() - r->request_time)); 
-}
-static const char *header_request_time(request_rec *r, char *a)
-{
-    return apr_psprintf(r->pool, "t=%qd", r->request_time);
-}
-static const char *header_request_env_var(request_rec *r, char *a)
-{
-    const char *s = apr_table_get(r->subprocess_env,a);
-		 
-    if (s)
-        return s;
-    else
-        return "(null)";
-}
-/*
- * Config routines
- */
-static void *create_headers_config(apr_pool_t *p, server_rec *s)
-{
-    headers_conf *conf = apr_pcalloc(p, sizeof(*conf));
-
-    conf->fixup_in = apr_array_make(p, 2, sizeof(header_entry));
-    conf->fixup_out = apr_array_make(p, 2, sizeof(header_entry));
-
-    return conf;
-}
-
-static void *create_headers_dir_config(apr_pool_t *p, char *d)
-{
-    return create_headers_config(p, NULL);
-}
-
-static void *merge_headers_config(apr_pool_t *p, void *basev, void *overridesv)
-{
-    headers_conf *newconf = apr_pcalloc(p, sizeof(*newconf));
-    headers_conf *base = basev;
-    headers_conf *overrides = overridesv;
-
-    newconf->fixup_in = apr_array_append(p, base->fixup_in, overrides->fixup_in);
-    newconf->fixup_out = apr_array_append(p, base->fixup_out, overrides->fixup_out);
-
-    return newconf;
-}
- 
-static char *parse_misc_string(apr_pool_t *p, format_tag *tag, const char **sa)
-{
-    const char *s;
-    char *d;
-
-    tag->func = constant_item;
-
-    s = *sa;
-    while (*s && *s != '%') {
-	s++;
-    }
-    /*
-     * This might allocate a few chars extra if there's a backslash
-     * escape in the format string.
-     */
-    tag->arg = apr_palloc(p, s - *sa + 1);
-
-    d = tag->arg;
-    s = *sa;
-    while (*s && *s != '%') {
-	if (*s != '\\') {
-	    *d++ = *s++;
-	}
-	else {
-	    s++;
-	    switch (*s) {
-	    case '\\':
-		*d++ = '\\';
-		s++;
-		break;
-	    case 'r':
-		*d++ = '\r';
-		s++;
-		break;
-	    case 'n':
-		*d++ = '\n';
-		s++;
-		break;
-	    case 't':	
-		*d++ = '\t';
-		s++;
-		break;
-	    default:
-		/* copy verbatim */
-		*d++ = '\\';
-		/*
-		 * Allow the loop to deal with this *s in the normal
-		 * fashion so that it handles end of string etc.
-		 * properly.
-		 */
-		break;
-	    }
-	}
-    }
-    *d = '\0';
-
-    *sa = s;
-    return NULL;
-}
-
-static char *parse_format_tag(apr_pool_t *p, format_tag *tag, const char **sa)
-{ 
-    const char *s = *sa;
-    const char * (*tag_handler)(request_rec *,char *);
-    
-    /* Handle string literal/conditionals */
-    if (*s != '%') {
-        return parse_misc_string(p, tag, sa);
-    }
-    s++; /* skip the % */
-    tag->arg = '\0';
-    /* grab the argument if there is one */
-    if (*s == '{') {
-        ++s;
-        tag->arg = ap_getword(p,&s,'}');
-    }
-
-    tag_handler = (const char * (*)(request_rec *,char *))apr_hash_get(format_tag_hash, s++, 1);
-
-    if (!tag_handler) {
-        char dummy[2];
-        dummy[0] = s[-1];
-        dummy[1] = '\0';
-        return apr_pstrcat(p, "Unrecognized Header or RequestHeader directive %",
-                           dummy, NULL);
-    }
-    tag->func = tag_handler;
-
-    *sa = s;
-    return NULL;
-}
-
-/*
- * A format string consists of white space, text and optional format 
- * tags in any order. E.g., 
- *
- * Header add MyHeader "Free form text %D %t more text"
- *
- * Decompose the format string into its tags. Each tag (struct format_tag)
- * contains a pointer to the function used to format the tag. Then save each 
- * tag in the tag array anchored in the header_entry.
- */
-static char *parse_format_string(apr_pool_t *p, header_entry *hdr, const char *s)
-{
-    char *res;
-
-    /* No string to parse with unset and copy commands */
-    if (hdr->action == hdr_unset ||
-        hdr->action == hdr_echo) {
-        return NULL;
-    }
-
-    hdr->ta = apr_array_make(p, 10, sizeof(format_tag));
-
-    while (*s) {
-        if ((res = parse_format_tag(p, (format_tag *) apr_array_push(hdr->ta), &s))) {
-            return res;
-        }
-    }
-    return NULL;
-}
-
-/* handle RequestHeader and Header directive */
-static const char *header_inout_cmd(hdr_inout inout, cmd_parms *cmd, void *indirconf,
-                              const char *action, const char *inhdr,
-                              const char *value, const char* envclause)
-{
-    headers_conf *dirconf = indirconf;
-    const char *condition_var = NULL;
-    char *colon;
-    char *hdr = apr_pstrdup(cmd->pool, inhdr);
-    header_entry *new;
-    server_rec *s = cmd->server;
-    headers_conf *serverconf = ap_get_module_config(s->module_config,
-                                                    &headers_module);
-
-    if (cmd->path) {
-        new = (header_entry *) apr_array_push((hdr_in == inout) ? dirconf->fixup_in : dirconf->fixup_out);
-    }
-    else {
-        new = (header_entry *) apr_array_push((hdr_in == inout) ? serverconf->fixup_in : serverconf->fixup_out);
-    }
-
-    if (!strcasecmp(action, "set"))
-        new->action = hdr_set;
-    else if (!strcasecmp(action, "add"))
-        new->action = hdr_add;
-    else if (!strcasecmp(action, "append"))
-        new->action = hdr_append;
-    else if (!strcasecmp(action, "unset"))
-        new->action = hdr_unset;
-    else if (!strcasecmp(action, "echo"))
-        new->action = hdr_echo;
-    else
-        return "first argument must be add, set, append, unset or echo.";
-
-    if (new->action == hdr_unset) {
-        if (value)
-            return "header unset takes two arguments";
-    }
-    else if (new->action == hdr_echo) {
-        regex_t *regex;
-        if (value)
-            return "Header echo takes two arguments";
-        else if (inout != hdr_out)
-            return "Header echo only valid on Header directive";
-        else {
-            regex = ap_pregcomp(cmd->pool, hdr, REG_EXTENDED | REG_NOSUB);
-            if (regex == NULL) {
-                return "Header echo regex could not be compiled";
-            }
-        }
-        new->regex = regex;
-    }
-    else if (!value)
-        return "header requires three arguments";
-
-    /* Handle the envclause on Header */
-    if (envclause != NULL) {
-        if (inout != hdr_out) {
-            return "error: envclause (env=...) only valid on Header directive";
-        }
-	if (strncasecmp(envclause, "env=", 4) != 0) {
-	    return "error: envclause should be in the form env=envar";
-	}
-	if ((envclause[4] == '\0')
-	    || ((envclause[4] == '!') && (envclause[5] == '\0'))) {
-	    return "error: missing environment variable name. envclause should be in the form env=envar ";
-	}
-	condition_var = apr_pstrdup(cmd->pool, &envclause[4]);
-    }
-    
-    if ((colon = strchr(hdr, ':')))
-        *colon = '\0';
-
-    new->header = hdr;
-    new->condition_var = condition_var;
-
-    return parse_format_string(cmd->pool, new, value);
-}
-
-/* Handle Header directive */
-static const char *header_cmd(cmd_parms *cmd, void *indirconf,
-                              const char *args)
-{
-    const char *s;
-    const char *action;
-    const char *hdr;
-    const char *val;
-    const char *envclause;
-
-    s = apr_pstrdup(cmd->pool, args);
-    action = ap_getword_conf(cmd->pool, &s);
-    hdr = ap_getword_conf(cmd->pool, &s);
-    val = *s ? ap_getword_conf(cmd->pool, &s) : NULL;
-    envclause = *s ? ap_getword_conf(cmd->pool, &s) : NULL;
-
-    return header_inout_cmd(hdr_out, cmd, indirconf, action, hdr, val, envclause);
-}
-
-/* handle RequestHeader directive */
-static const char *request_header_cmd(cmd_parms *cmd, void *indirconf,
-                              const char *action, const char *inhdr,
-                              const char *value)
-{
-    return header_inout_cmd(hdr_in, cmd, indirconf, action, inhdr, value, NULL);
-}
-
-/*
- * Process the tags in the format string. Tags may be format specifiers 
- * (%D, %t, etc.), whitespace or text strings. For each tag, run the handler
- * (formatter) specific to the tag. Handlers return text strings.
- * Concatenate the return from each handler into one string that is 
- * returned from this call.
- */
-static char* process_tags(header_entry *hdr, request_rec *r) 
-{
-    int i;
-    const char *s;
-    char *str = NULL;
-
-    format_tag *tag = (format_tag*) hdr->ta->elts;
- 
-    for (i = 0; i < hdr->ta->nelts; i++) {
-        s = tag[i].func(r, tag[i].arg);
-        if (str == NULL) 
-            str = apr_pstrdup(r->pool, s);
-        else
-            str = apr_pstrcat(r->pool, str, s, NULL);
-    }
-    return str;
-}
-
-static int echo_header(echo_do *v, const char *key, const char *val)
-{
-    /* If the input header (key) matches the regex, echo it intact to 
-     * r->headers_out.
-     */
-    if (!ap_regexec(v->hdr->regex, key, 0, NULL, 0)) {
-        apr_table_add(v->r->headers_out, key, val);
-    }
-
-    return 1;
-}
-
-static void do_headers_fixup(request_rec *r, hdr_inout inout,
-                             apr_array_header_t *fixup)
-{
-    int i;
-    apr_table_t *headers = (hdr_in == inout) ? r->headers_in : r->headers_out;
-
-    for (i = 0; i < fixup->nelts; ++i) {
-        header_entry *hdr = &((header_entry *) (fixup->elts))[i];
-
-        /* Have any conditional envar-controlled Header processing to do? */
-        if (hdr->condition_var) {
-            const char *envar = hdr->condition_var;
-            if (*envar != '!') {
-                if (apr_table_get(r->subprocess_env, envar) == NULL)
-                    continue;
-            }
-            else {
-                if (apr_table_get(r->subprocess_env, &envar[1]) != NULL)
-                    continue;
-            }
-        }
-
-        switch (hdr->action) {
-        case hdr_add:
-            apr_table_addn(headers, hdr->header, process_tags(hdr, r));
-            break;
-        case hdr_append:
-            apr_table_mergen(headers, hdr->header, process_tags(hdr, r));
-            break;
-        case hdr_set:
-            apr_table_setn(headers, hdr->header, process_tags(hdr, r));
-            break;
-        case hdr_unset:
-            apr_table_unset(headers, hdr->header);
-            break;
-        case hdr_echo:
-        {
-            echo_do v;
-            v.r = r;
-            v.hdr = hdr;
-            apr_table_do((int (*) (void *, const char *, const char *)) 
-                         echo_header, (void *) &v, r->headers_in, NULL);
-            break;
-        }
-        }
-    }
-}
-
-static void ap_headers_insert_output_filter(request_rec *r)
-{
-    headers_conf *serverconf = ap_get_module_config(r->server->module_config,
-                                                    &headers_module);
-    headers_conf *dirconf = ap_get_module_config(r->per_dir_config,
-                                                 &headers_module);
-
-    if (serverconf->fixup_out->nelts || dirconf->fixup_out->nelts) {
-	ap_add_output_filter("FIXUP_HEADERS_OUT", NULL, r, r->connection);
-    }
-}
-
-static apr_status_t ap_headers_output_filter(ap_filter_t *f,
-                                             apr_bucket_brigade *in)
-{
-    headers_conf *serverconf = ap_get_module_config(f->r->server->module_config,
-                                                    &headers_module);
-    headers_conf *dirconf = ap_get_module_config(f->r->per_dir_config,
-                                                 &headers_module);
-
-    ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, f->r->server,
-		 "headers: ap_headers_output_filter()");
-
-    /* do the fixup */
-    do_headers_fixup(f->r, hdr_out, serverconf->fixup_out);
-    do_headers_fixup(f->r, hdr_out, dirconf->fixup_out);
-
-    /* remove ourselves from the filter chain */
-    ap_remove_output_filter(f);
-
-    /* send the data up the stack */
-    return ap_pass_brigade(f->next,in);
-}
-
-static apr_status_t ap_headers_fixup(request_rec *r)
-{
-    headers_conf *serverconf = ap_get_module_config(r->server->module_config,
-                                                    &headers_module);
-    headers_conf *dirconf = ap_get_module_config(r->per_dir_config,
-                                                 &headers_module);
-
-    /* do the fixup */
-    if (serverconf->fixup_in->nelts || dirconf->fixup_in->nelts) {
-        do_headers_fixup(r, hdr_in, serverconf->fixup_in);
-        do_headers_fixup(r, hdr_in, dirconf->fixup_in);
-    }
-
-    return DECLINED;
-}
-                                        
-static const command_rec headers_cmds[] =
-{
-    AP_INIT_RAW_ARGS("Header", header_cmd, NULL, OR_FILEINFO,
-                   "an action, header and value followed by optional env clause"),
-    AP_INIT_TAKE23("RequestHeader", request_header_cmd, NULL, OR_FILEINFO,
-                   "an action, header and value"),
-    {NULL}
-};
-
-static void register_format_tag_handler(apr_pool_t *p, char *tag, void *tag_handler, int def)
-{
-    const void *h = apr_palloc(p, sizeof(h));
-    h = tag_handler;
-    apr_hash_set(format_tag_hash, tag, 1, h);
-}
-static int header_pre_config(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp)
-{
-    format_tag_hash = apr_hash_make(p);
-    register_format_tag_handler(p, "D", (void*) header_request_duration, 0);
-    register_format_tag_handler(p, "t", (void*) header_request_time, 0);
-    register_format_tag_handler(p, "e", (void*) header_request_env_var, 0);
-
-    return OK;
-}
-
-static void register_hooks(apr_pool_t *p)
-{
-    ap_hook_pre_config(header_pre_config,NULL,NULL,APR_HOOK_MIDDLE);
-    ap_hook_insert_filter(ap_headers_insert_output_filter, NULL, NULL, APR_HOOK_LAST);
-    ap_hook_fixups(ap_headers_fixup, NULL, NULL, APR_HOOK_LAST);
-    ap_register_output_filter("FIXUP_HEADERS_OUT", ap_headers_output_filter, AP_FTYPE_CONTENT_SET);
-}
-
-module AP_MODULE_DECLARE_DATA headers_module =
-{
-    STANDARD20_MODULE_STUFF,
-    create_headers_dir_config,  /* dir config creater */
-    merge_headers_config,       /* dir merger --- default is to override */
-    create_headers_config,      /* server config */
-    merge_headers_config,       /* merge server configs */
-    headers_cmds,               /* command apr_table_t */
-    register_hooks		/* register hooks */
-};
diff --git a/modules/metadata/mod_headers.dsp b/modules/metadata/mod_headers.dsp
deleted file mode 100644
index 98cc451..0000000
--- a/modules/metadata/mod_headers.dsp
+++ /dev/null
@@ -1,128 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mod_headers" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mod_headers - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "mod_headers.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "mod_headers.mak" CFG="mod_headers - Win32 Release"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "mod_headers - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mod_headers - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "mod_headers - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /O2 /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Release\mod_headers" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /map /machine:I386 /out:"Release/mod_headers.so" /base:@..\..\os\win32\BaseAddr.ref,mod_headers
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /map /machine:I386 /out:"Release/mod_headers.so" /base:@..\..\os\win32\BaseAddr.ref,mod_headers
-
-!ELSEIF  "$(CFG)" == "mod_headers - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Debug\mod_headers" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /map /debug /machine:I386 /out:"Debug/mod_headers.so" /base:@..\..\os\win32\BaseAddr.ref,mod_headers
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /map /debug /machine:I386 /out:"Debug/mod_headers.so" /base:@..\..\os\win32\BaseAddr.ref,mod_headers
-
-!ENDIF 
-
-# Begin Target
-
-# Name "mod_headers - Win32 Release"
-# Name "mod_headers - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\mod_headers.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mod_headers.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\build\win32\win32ver.awk
-
-!IF  "$(CFG)" == "mod_headers - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_headers.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ../../build/win32/win32ver.awk mod_headers  "headers_module for Apache" ../../include/ap_release.h > .\mod_headers.rc
-
-# End Custom Build
-
-!ELSEIF  "$(CFG)" == "mod_headers - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_headers.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ../../build/win32/win32ver.awk mod_headers  "headers_module for Apache" ../../include/ap_release.h  > .\mod_headers.rc
-
-# End Custom Build
-
-!ENDIF 
-
-# End Source File
-# End Target
-# End Project
diff --git a/modules/metadata/mod_headers.exp b/modules/metadata/mod_headers.exp
deleted file mode 100644
index 3f30638..0000000
--- a/modules/metadata/mod_headers.exp
+++ /dev/null
@@ -1 +0,0 @@
-headers_module
diff --git a/modules/metadata/mod_mime_magic.c b/modules/metadata/mod_mime_magic.c
deleted file mode 100644
index 5c9d925..0000000
--- a/modules/metadata/mod_mime_magic.c
+++ /dev/null
@@ -1,2516 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-/*
- * mod_mime_magic: MIME type lookup via file magic numbers
- * Copyright (c) 1996-1997 Cisco Systems, Inc.
- *
- * This software was submitted by Cisco Systems to the Apache Software Foundation in July
- * 1997.  Future revisions and derivatives of this source code must
- * acknowledge Cisco Systems as the original contributor of this module.
- * All other licensing and usage conditions are those of the Apache Software Foundation.
- *
- * Some of this code is derived from the free version of the file command
- * originally posted to comp.sources.unix.  Copyright info for that program
- * is included below as required.
- * ---------------------------------------------------------------------------
- * - Copyright (c) Ian F. Darwin, 1987. Written by Ian F. Darwin.
- *
- * This software is not subject to any license of the American Telephone and
- * Telegraph Company or of the Regents of the University of California.
- *
- * Permission is granted to anyone to use this software for any purpose on any
- * computer system, and to alter it and redistribute it freely, subject to
- * the following restrictions:
- *
- * 1. The author is not responsible for the consequences of use of this
- * software, no matter how awful, even if they arise from flaws in it.
- *
- * 2. The origin of this software must not be misrepresented, either by
- * explicit claim or by omission.  Since few users ever read sources, credits
- * must appear in the documentation.
- *
- * 3. Altered versions must be plainly marked as such, and must not be
- * misrepresented as being the original software.  Since few users ever read
- * sources, credits must appear in the documentation.
- *
- * 4. This notice may not be removed or altered.
- * -------------------------------------------------------------------------
- *
- * For compliance with Mr Darwin's terms: this has been very significantly
- * modified from the free "file" command.
- * - all-in-one file for compilation convenience when moving from one
- *   version of Apache to the next.
- * - Memory allocation is done through the Apache API's apr_pool_t structure.
- * - All functions have had necessary Apache API request or server
- *   structures passed to them where necessary to call other Apache API
- *   routines.  (i.e. usually for logging, files, or memory allocation in
- *   itself or a called function.)
- * - struct magic has been converted from an array to a single-ended linked
- *   list because it only grows one record at a time, it's only accessed
- *   sequentially, and the Apache API has no equivalent of realloc().
- * - Functions have been changed to get their parameters from the server
- *   configuration instead of globals.  (It should be reentrant now but has
- *   not been tested in a threaded environment.)
- * - Places where it used to print results to stdout now saves them in a
- *   list where they're used to set the MIME type in the Apache request
- *   record.
- * - Command-line flags have been removed since they will never be used here.
- *
- * Ian Kluft <ikluft@cisco.com>
- * Engineering Information Framework
- * Central Engineering
- * Cisco Systems, Inc.
- * San Jose, CA, USA
- *
- * Initial installation          July/August 1996
- * Misc bug fixes                May 1997
- * Submission to Apache Software Foundation    July 1997
- *
- */
-
-#include "apr.h"
-#include "apr_strings.h"
-#include "apr_lib.h"
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-#if APR_HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include "ap_config.h"
-#include "httpd.h"
-#include "http_config.h"
-#include "http_request.h"
-#include "http_core.h"
-#include "http_log.h"
-#include "http_protocol.h"
-#include "util_script.h"
-
-/* ### this isn't set by configure? does anybody set this? */
-#ifdef HAVE_UTIME_H
-#include <utime.h>
-#endif
-
-/*
- * data structures and related constants
- */
-
-#define MODNAME        "mod_mime_magic"
-#define MIME_MAGIC_DEBUG        0
-
-#define MIME_BINARY_UNKNOWN    "application/octet-stream"
-#define MIME_TEXT_UNKNOWN    "text/plain"
-
-#define MAXMIMESTRING        256
-
-/* HOWMANY must be at least 4096 to make gzip -dcq work */
-#define HOWMANY	4096
-/* SMALL_HOWMANY limits how much work we do to figure out text files */
-#define SMALL_HOWMANY 1024
-#define MAXDESC    50		/* max leng of text description */
-#define MAXstring 64		/* max leng of "string" types */
-
-struct magic {
-    struct magic *next;		/* link to next entry */
-    int lineno;			/* line number from magic file */
-
-    short flag;
-#define INDIR    1		/* if '>(...)' appears,  */
-#define    UNSIGNED 2		/* comparison is unsigned */
-    short cont_level;		/* level of ">" */
-    struct {
-	char type;		/* byte short long */
-	long offset;		/* offset from indirection */
-    } in;
-    long offset;		/* offset to magic number */
-    unsigned char reln;		/* relation (0=eq, '>'=gt, etc) */
-    char type;			/* int, short, long or string. */
-    char vallen;		/* length of string value, if any */
-#define BYTE    1
-#define SHORT    2
-#define LONG    4
-#define STRING    5
-#define DATE    6
-#define BESHORT    7
-#define BELONG    8
-#define BEDATE    9
-#define LESHORT    10
-#define LELONG    11
-#define LEDATE    12
-    union VALUETYPE {
-	unsigned char b;
-	unsigned short h;
-	unsigned long l;
-	char s[MAXstring];
-	unsigned char hs[2];	/* 2 bytes of a fixed-endian "short" */
-	unsigned char hl[4];	/* 2 bytes of a fixed-endian "long" */
-    } value;			/* either number or string */
-    unsigned long mask;		/* mask before comparison with value */
-    char nospflag;		/* supress space character */
-
-    /* NOTE: this string is suspected of overrunning - find it! */
-    char desc[MAXDESC];		/* description */
-};
-
-/*
- * data structures for tar file recognition
- * --------------------------------------------------------------------------
- * Header file for public domain tar (tape archive) program.
- *
- * @(#)tar.h 1.20 86/10/29    Public Domain. Created 25 August 1985 by John
- * Gilmore, ihnp4!hoptoad!gnu.
- *
- * Header block on tape.
- *
- * I'm going to use traditional DP naming conventions here. A "block" is a big
- * chunk of stuff that we do I/O on. A "record" is a piece of info that we
- * care about. Typically many "record"s fit into a "block".
- */
-#define RECORDSIZE    512
-#define NAMSIZ    100
-#define TUNMLEN    32
-#define TGNMLEN    32
-
-union record {
-    char charptr[RECORDSIZE];
-    struct header {
-	char name[NAMSIZ];
-	char mode[8];
-	char uid[8];
-	char gid[8];
-	char size[12];
-	char mtime[12];
-	char chksum[8];
-	char linkflag;
-	char linkname[NAMSIZ];
-	char magic[8];
-	char uname[TUNMLEN];
-	char gname[TGNMLEN];
-	char devmajor[8];
-	char devminor[8];
-    } header;
-};
-
-/* The magic field is filled with this if uname and gname are valid. */
-#define    TMAGIC        "ustar  "	/* 7 chars and a null */
-
-/*
- * file-function prototypes
- */
-static int ascmagic(request_rec *, unsigned char *, apr_size_t);
-static int is_tar(unsigned char *, apr_size_t);
-static int softmagic(request_rec *, unsigned char *, apr_size_t);
-static void tryit(request_rec *, unsigned char *, apr_size_t, int);
-static int zmagic(request_rec *, unsigned char *, apr_size_t);
-
-static int getvalue(server_rec *, struct magic *, char **);
-static int hextoint(int);
-static char *getstr(server_rec *, char *, char *, int, int *);
-static int parse(server_rec *, apr_pool_t *p, char *, int);
-
-static int match(request_rec *, unsigned char *, apr_size_t);
-static int mget(request_rec *, union VALUETYPE *, unsigned char *,
-		struct magic *, apr_size_t);
-static int mcheck(request_rec *, union VALUETYPE *, struct magic *);
-static void mprint(request_rec *, union VALUETYPE *, struct magic *);
-
-static int uncompress(request_rec *, int, 
-		      unsigned char **, apr_size_t);
-static long from_oct(int, char *);
-static int fsmagic(request_rec *r, const char *fn);
-
-/*
- * includes for ASCII substring recognition formerly "names.h" in file
- * command
- *
- * Original notes: names and types used by ascmagic in file(1). These tokens are
- * here because they can appear anywhere in the first HOWMANY bytes, while
- * tokens in /etc/magic must appear at fixed offsets into the file. Don't
- * make HOWMANY too high unless you have a very fast CPU.
- */
-
-/* these types are used to index the apr_table_t 'types': keep em in sync! */
-/* HTML inserted in first because this is a web server module now */
-#define L_HTML    0		/* HTML */
-#define L_C       1		/* first and foremost on UNIX */
-#define L_FORT    2		/* the oldest one */
-#define L_MAKE    3		/* Makefiles */
-#define L_PLI     4		/* PL/1 */
-#define L_MACH    5		/* some kinda assembler */
-#define L_ENG     6		/* English */
-#define L_PAS     7		/* Pascal */
-#define L_MAIL    8		/* Electronic mail */
-#define L_NEWS    9		/* Usenet Netnews */
-
-static char *types[] =
-{
-    "text/html",		/* HTML */
-    "text/plain",		/* "c program text", */
-    "text/plain",		/* "fortran program text", */
-    "text/plain",		/* "make commands text", */
-    "text/plain",		/* "pl/1 program text", */
-    "text/plain",		/* "assembler program text", */
-    "text/plain",		/* "English text", */
-    "text/plain",		/* "pascal program text", */
-    "message/rfc822",		/* "mail text", */
-    "message/news",		/* "news text", */
-    "application/binary",	/* "can't happen error on names.h/types", */
-    0
-};
-
-static struct names {
-    char *name;
-    short type;
-} names[] = {
-
-    /* These must be sorted by eye for optimal hit rate */
-    /* Add to this list only after substantial meditation */
-    {
-	"<html>", L_HTML
-    },
-    {
-	"<HTML>", L_HTML
-    },
-    {
-	"<head>", L_HTML
-    },
-    {
-	"<HEAD>", L_HTML
-    },
-    {
-	"<title>", L_HTML
-    },
-    {
-	"<TITLE>", L_HTML
-    },
-    {
-	"<h1>", L_HTML
-    },
-    {
-	"<H1>", L_HTML
-    },
-    {
-	"<!--", L_HTML
-    },
-    {
-	"<!DOCTYPE HTML", L_HTML
-    },
-    {
-	"/*", L_C
-    },				/* must precede "The", "the", etc. */
-    {
-	"#include", L_C
-    },
-    {
-	"char", L_C
-    },
-    {
-	"The", L_ENG
-    },
-    {
-	"the", L_ENG
-    },
-    {
-	"double", L_C
-    },
-    {
-	"extern", L_C
-    },
-    {
-	"float", L_C
-    },
-    {
-	"real", L_C
-    },
-    {
-	"struct", L_C
-    },
-    {
-	"union", L_C
-    },
-    {
-	"CFLAGS", L_MAKE
-    },
-    {
-	"LDFLAGS", L_MAKE
-    },
-    {
-	"all:", L_MAKE
-    },
-    {
-	".PRECIOUS", L_MAKE
-    },
-    /*
-     * Too many files of text have these words in them.  Find another way to
-     * recognize Fortrash.
-     */
-#ifdef    NOTDEF
-    {
-	"subroutine", L_FORT
-    },
-    {
-	"function", L_FORT
-    },
-    {
-	"block", L_FORT
-    },
-    {
-	"common", L_FORT
-    },
-    {
-	"dimension", L_FORT
-    },
-    {
-	"integer", L_FORT
-    },
-    {
-	"data", L_FORT
-    },
-#endif /* NOTDEF */
-    {
-	".ascii", L_MACH
-    },
-    {
-	".asciiz", L_MACH
-    },
-    {
-	".byte", L_MACH
-    },
-    {
-	".even", L_MACH
-    },
-    {
-	".globl", L_MACH
-    },
-    {
-	"clr", L_MACH
-    },
-    {
-	"(input,", L_PAS
-    },
-    {
-	"dcl", L_PLI
-    },
-    {
-	"Received:", L_MAIL
-    },
-    {
-	">From", L_MAIL
-    },
-    {
-	"Return-Path:", L_MAIL
-    },
-    {
-	"Cc:", L_MAIL
-    },
-    {
-	"Newsgroups:", L_NEWS
-    },
-    {
-	"Path:", L_NEWS
-    },
-    {
-	"Organization:", L_NEWS
-    },
-    {
-	NULL, 0
-    }
-};
-
-#define NNAMES ((sizeof(names)/sizeof(struct names)) - 1)
-
-/*
- * Result String List (RSL)
- *
- * The file(1) command prints its output.  Instead, we store the various
- * "printed" strings in a list (allocating memory as we go) and concatenate
- * them at the end when we finally know how much space they'll need.
- */
-
-typedef struct magic_rsl_s {
-    char *str;			/* string, possibly a fragment */
-    struct magic_rsl_s *next;	/* pointer to next fragment */
-} magic_rsl;
-
-/*
- * Apache module configuration structures
- */
-
-/* per-server info */
-typedef struct {
-    const char *magicfile;		/* where magic be found */
-    struct magic *magic;	/* head of magic config list */
-    struct magic *last;
-} magic_server_config_rec;
-
-/* per-request info */
-typedef struct {
-    magic_rsl *head;		/* result string list */
-    magic_rsl *tail;
-    unsigned suf_recursion;	/* recursion depth in suffix check */
-} magic_req_rec;
-
-/*
- * configuration functions - called by Apache API routines
- */
-
-module AP_MODULE_DECLARE_DATA mime_magic_module;
-
-static void *create_magic_server_config(apr_pool_t *p, server_rec *d)
-{
-    /* allocate the config - use pcalloc because it needs to be zeroed */
-    return apr_pcalloc(p, sizeof(magic_server_config_rec));
-}
-
-static void *merge_magic_server_config(apr_pool_t *p, void *basev, void *addv)
-{
-    magic_server_config_rec *base = (magic_server_config_rec *) basev;
-    magic_server_config_rec *add = (magic_server_config_rec *) addv;
-    magic_server_config_rec *new = (magic_server_config_rec *)
-			    apr_palloc(p, sizeof(magic_server_config_rec));
-
-    new->magicfile = add->magicfile ? add->magicfile : base->magicfile;
-    new->magic = NULL;
-    new->last = NULL;
-    return new;
-}
-
-static const char *set_magicfile(cmd_parms *cmd, void *dummy, const char *arg)
-{
-    magic_server_config_rec *conf = (magic_server_config_rec *)
-    ap_get_module_config(cmd->server->module_config,
-		      &mime_magic_module);
-
-    if (!conf) {
-	return MODNAME ": server structure not allocated";
-    }
-    conf->magicfile = arg;
-    return NULL;
-}
-
-/*
- * configuration file commands - exported to Apache API
- */
-
-static const command_rec mime_magic_cmds[] =
-{
-    AP_INIT_TAKE1("MimeMagicFile", set_magicfile, NULL, RSRC_CONF,
-     "Path to MIME Magic file (in file(1) format)"),
-    {NULL}
-};
-
-/*
- * RSL (result string list) processing routines
- *
- * These collect strings that would have been printed in fragments by file(1)
- * into a list of magic_rsl structures with the strings. When complete,
- * they're concatenated together to become the MIME content and encoding
- * types.
- *
- * return value conventions for these functions: functions which return int:
- * failure = -1, other = result functions which return pointers: failure = 0,
- * other = result
- */
-
-/* allocate a per-request structure and put it in the request record */
-static magic_req_rec *magic_set_config(request_rec *r)
-{
-    magic_req_rec *req_dat = (magic_req_rec *) apr_palloc(r->pool,
-						      sizeof(magic_req_rec));
-
-    req_dat->head = req_dat->tail = (magic_rsl *) NULL;
-    ap_set_module_config(r->request_config, &mime_magic_module, req_dat);
-    return req_dat;
-}
-
-/* add a string to the result string list for this request */
-/* it is the responsibility of the caller to allocate "str" */
-static int magic_rsl_add(request_rec *r, char *str)
-{
-    magic_req_rec *req_dat = (magic_req_rec *)
-		    ap_get_module_config(r->request_config, &mime_magic_module);
-    magic_rsl *rsl;
-
-    /* make sure we have a list to put it in */
-    if (!req_dat) {
-	ap_log_rerror(APLOG_MARK, APLOG_NOERRNO | APLOG_ERR, APR_EINVAL, r,
-		    MODNAME ": request config should not be NULL");
-	if (!(req_dat = magic_set_config(r))) {
-	    /* failure */
-	    return -1;
-	}
-    }
-
-    /* allocate the list entry */
-    rsl = (magic_rsl *) apr_palloc(r->pool, sizeof(magic_rsl));
-
-    /* fill it */
-    rsl->str = str;
-    rsl->next = (magic_rsl *) NULL;
-
-    /* append to the list */
-    if (req_dat->head && req_dat->tail) {
-	req_dat->tail->next = rsl;
-	req_dat->tail = rsl;
-    }
-    else {
-	req_dat->head = req_dat->tail = rsl;
-    }
-
-    /* success */
-    return 0;
-}
-
-/* RSL hook for puts-type functions */
-static int magic_rsl_puts(request_rec *r, char *str)
-{
-    return magic_rsl_add(r, str);
-}
-
-/* RSL hook for printf-type functions */
-static int magic_rsl_printf(request_rec *r, char *str,...)
-{
-    va_list ap;
-
-    char buf[MAXMIMESTRING];
-
-    /* assemble the string into the buffer */
-    va_start(ap, str);
-    apr_vsnprintf(buf, sizeof(buf), str, ap);
-    va_end(ap);
-
-    /* add the buffer to the list */
-    return magic_rsl_add(r, apr_pstrdup(r->pool, buf));
-}
-
-/* RSL hook for putchar-type functions */
-static int magic_rsl_putchar(request_rec *r, char c)
-{
-    char str[2];
-
-    /* high overhead for 1 char - just hope they don't do this much */
-    str[0] = c;
-    str[1] = '\0';
-    return magic_rsl_add(r, str);
-}
-
-/* allocate and copy a contiguous string from a result string list */
-static char *rsl_strdup(request_rec *r, int start_frag, int start_pos, int len)
-{
-    char *result;		/* return value */
-    int cur_frag,		/* current fragment number/counter */
-        cur_pos,		/* current position within fragment */
-        res_pos;		/* position in result string */
-    magic_rsl *frag;		/* list-traversal pointer */
-    magic_req_rec *req_dat = (magic_req_rec *)
-		    ap_get_module_config(r->request_config, &mime_magic_module);
-
-    /* allocate the result string */
-    result = (char *) apr_palloc(r->pool, len + 1);
-
-    /* loop through and collect the string */
-    res_pos = 0;
-    for (frag = req_dat->head, cur_frag = 0;
-	 frag->next;
-	 frag = frag->next, cur_frag++) {
-	/* loop to the first fragment */
-	if (cur_frag < start_frag)
-	    continue;
-
-	/* loop through and collect chars */
-	for (cur_pos = (cur_frag == start_frag) ? start_pos : 0;
-	     frag->str[cur_pos];
-	     cur_pos++) {
-	    if (cur_frag >= start_frag
-		&& cur_pos >= start_pos
-		&& res_pos <= len) {
-		result[res_pos++] = frag->str[cur_pos];
-		if (res_pos > len) {
-		    break;
-		}
-	    }
-	}
-    }
-
-    /* clean up and return */
-    result[res_pos] = 0;
-#if MIME_MAGIC_DEBUG
-    ap_log_rerror(APLOG_MARK, APLOG_NOERRNO | APLOG_DEBUG, 0, r,
-	     MODNAME ": rsl_strdup() %d chars: %s", res_pos - 1, result);
-#endif
-    return result;
-}
-
-/* states for the state-machine algorithm in magic_rsl_to_request() */
-typedef enum {
-    rsl_leading_space, rsl_type, rsl_subtype, rsl_separator, rsl_encoding
-} rsl_states;
-
-/* process the RSL and set the MIME info in the request record */
-static int magic_rsl_to_request(request_rec *r)
-{
-    int cur_frag,		/* current fragment number/counter */
-        cur_pos,		/* current position within fragment */
-        type_frag,		/* content type starting point: fragment */
-        type_pos,		/* content type starting point: position */
-        type_len,		/* content type length */
-        encoding_frag,		/* content encoding starting point: fragment */
-        encoding_pos,		/* content encoding starting point: position */
-        encoding_len;		/* content encoding length */
-
-    magic_rsl *frag;		/* list-traversal pointer */
-    rsl_states state;
-
-    magic_req_rec *req_dat = (magic_req_rec *)
-		    ap_get_module_config(r->request_config, &mime_magic_module);
-
-    /* check if we have a result */
-    if (!req_dat || !req_dat->head) {
-	/* empty - no match, we defer to other Apache modules */
-	return DECLINED;
-    }
-
-    /* start searching for the type and encoding */
-    state = rsl_leading_space;
-    type_frag = type_pos = type_len = 0;
-    encoding_frag = encoding_pos = encoding_len = 0;
-    for (frag = req_dat->head, cur_frag = 0;
-	 frag && frag->next;
-	 frag = frag->next, cur_frag++) {
-	/* loop through the characters in the fragment */
-	for (cur_pos = 0; frag->str[cur_pos]; cur_pos++) {
-	    if (apr_isspace(frag->str[cur_pos])) {
-		/* process whitespace actions for each state */
-		if (state == rsl_leading_space) {
-		    /* eat whitespace in this state */
-		    continue;
-		}
-		else if (state == rsl_type) {
-		    /* whitespace: type has no slash! */
-		    return DECLINED;
-		}
-		else if (state == rsl_subtype) {
-		    /* whitespace: end of MIME type */
-		    state++;
-		    continue;
-		}
-		else if (state == rsl_separator) {
-		    /* eat whitespace in this state */
-		    continue;
-		}
-		else if (state == rsl_encoding) {
-		    /* whitespace: end of MIME encoding */
-		    /* we're done */
-		    frag = req_dat->tail;
-		    break;
-		}
-		else {
-		    /* should not be possible */
-		    /* abandon malfunctioning module */
-		    ap_log_rerror(APLOG_MARK, APLOG_NOERRNO | APLOG_ERR, 0, r,
-				MODNAME ": bad state %d (ws)", state);
-		    return DECLINED;
-		}
-		/* NOTREACHED */
-	    }
-	    else if (state == rsl_type &&
-		     frag->str[cur_pos] == '/') {
-		/* copy the char and go to rsl_subtype state */
-		type_len++;
-		state++;
-	    }
-	    else {
-		/* process non-space actions for each state */
-		if (state == rsl_leading_space) {
-		    /* non-space: begin MIME type */
-		    state++;
-		    type_frag = cur_frag;
-		    type_pos = cur_pos;
-		    type_len = 1;
-		    continue;
-		}
-		else if (state == rsl_type ||
-			 state == rsl_subtype) {
-		    /* non-space: adds to type */
-		    type_len++;
-		    continue;
-		}
-		else if (state == rsl_separator) {
-		    /* non-space: begin MIME encoding */
-		    state++;
-		    encoding_frag = cur_frag;
-		    encoding_pos = cur_pos;
-		    encoding_len = 1;
-		    continue;
-		}
-		else if (state == rsl_encoding) {
-		    /* non-space: adds to encoding */
-		    encoding_len++;
-		    continue;
-		}
-		else {
-		    /* should not be possible */
-		    /* abandon malfunctioning module */
-		    ap_log_rerror(APLOG_MARK, APLOG_NOERRNO | APLOG_ERR, 0, r,
-				MODNAME ": bad state %d (ns)", state);
-		    return DECLINED;
-		}
-		/* NOTREACHED */
-	    }
-	    /* NOTREACHED */
-	}
-    }
-
-    /* if we ended prior to state rsl_subtype, we had incomplete info */
-    if (state != rsl_subtype && state != rsl_separator &&
-	state != rsl_encoding) {
-	/* defer to other modules */
-	return DECLINED;
-    }
-
-    /* save the info in the request record */
-    if (state == rsl_subtype || state == rsl_encoding ||
-	state == rsl_encoding) {
-        char *tmp;
-	tmp = rsl_strdup(r, type_frag, type_pos, type_len);
-	/* XXX: this could be done at config time I'm sure... but I'm
-	 * confused by all this magic_rsl stuff. -djg */
-	ap_content_type_tolower(tmp);
-	r->content_type = tmp;
-    }
-    if (state == rsl_encoding) {
-        char *tmp;
-	tmp = rsl_strdup(r, encoding_frag,
-					 encoding_pos, encoding_len);
-	/* XXX: this could be done at config time I'm sure... but I'm
-	 * confused by all this magic_rsl stuff. -djg */
-	ap_str_tolower(tmp);
-	r->content_encoding = tmp;
-    }
-
-    /* detect memory allocation or other errors */
-    if (!r->content_type ||
-	(state == rsl_encoding && !r->content_encoding)) {
-        ap_log_rerror(APLOG_MARK, APLOG_NOERRNO | APLOG_ERR, 0, r,
-                      MODNAME ": unexpected state %d; could be caused by bad "
-                      "data in magic file",
-                      state);
-	return HTTP_INTERNAL_SERVER_ERROR;
-    }
-
-    /* success! */
-    return OK;
-}
-
-/*
- * magic_process - process input file r        Apache API request record
- * (formerly called "process" in file command, prefix added for clarity) Opens
- * the file and reads a fixed-size buffer to begin processing the contents.
- */
-static int magic_process(request_rec *r)
-{
-    apr_file_t *fd = NULL;
-    unsigned char buf[HOWMANY + 1];	/* one extra for terminating '\0' */
-    apr_size_t nbytes = 0;		/* number of bytes read from a datafile */
-    int result;
-
-    /*
-     * first try judging the file based on its filesystem status
-     */
-    switch ((result = fsmagic(r, r->filename))) {
-    case DONE:
-	magic_rsl_putchar(r, '\n');
-	return OK;
-    case OK:
-	break;
-    default:
-	/* fatal error, bail out */
-	return result;
-    }
-
-    if (apr_file_open(&fd, r->filename, APR_READ, APR_OS_DEFAULT, r->pool) != APR_SUCCESS) {
-	/* We can't open it, but we were able to stat it. */
-	ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
-		    MODNAME ": can't read `%s'", r->filename);
-	/* let some other handler decide what the problem is */
-	return DECLINED;
-    }
-
-    /*
-     * try looking at the first HOWMANY bytes
-     */
-    nbytes = sizeof(buf) - 1;
-    if ((result = apr_file_read(fd, (char *) buf, &nbytes)) != APR_SUCCESS) {
-	ap_log_rerror(APLOG_MARK, APLOG_ERR, result, r,
-		    MODNAME ": read failed: %s", r->filename);
-	return HTTP_INTERNAL_SERVER_ERROR;
-    }
-
-    if (nbytes == 0)
-	magic_rsl_puts(r, MIME_TEXT_UNKNOWN);
-    else {
-	buf[nbytes++] = '\0';	/* null-terminate it */
-	tryit(r, buf, nbytes, 1); 
-    }
-
-    (void) apr_file_close(fd);
-    (void) magic_rsl_putchar(r, '\n');
-
-    return OK;
-}
-
-
-static void tryit(request_rec *r, unsigned char *buf, apr_size_t nb, int checkzmagic)
-{
-    /*
-     * Try compression stuff
-     */
-	if (checkzmagic == 1) {  
-			if (zmagic(r, buf, nb) == 1)
-			return;
-	}
-
-    /*
-     * try tests in /etc/magic (or surrogate magic file)
-     */
-    if (softmagic(r, buf, nb) == 1)
-	return;
-
-    /*
-     * try known keywords, check for ascii-ness too.
-     */
-    if (ascmagic(r, buf, nb) == 1)
-	return;
-
-    /*
-     * abandon hope, all ye who remain here
-     */
-    magic_rsl_puts(r, MIME_BINARY_UNKNOWN);
-}
-
-#define    EATAB {while (apr_isspace((unsigned char) *l))  ++l;}
-
-/*
- * apprentice - load configuration from the magic file r
- *  API request record
- */
-static int apprentice(server_rec *s, apr_pool_t *p)
-{
-    apr_file_t *f = NULL;
-    apr_status_t result;
-    char line[BUFSIZ + 1];
-    int errs = 0;
-    int lineno;
-#if MIME_MAGIC_DEBUG
-    int rule = 0;
-    struct magic *m, *prevm;
-#endif
-    magic_server_config_rec *conf = (magic_server_config_rec *)
-		    ap_get_module_config(s->module_config, &mime_magic_module);
-    const char *fname = ap_server_root_relative(p, conf->magicfile);
-
-    if (!fname) {
-	ap_log_error(APLOG_MARK, APLOG_ERR, APR_EBADPATH, s,
-		     MODNAME ": Invalid magic file path %s", conf->magicfile);
-	return -1;
-    }        
-    if ((result = apr_file_open(&f, fname, APR_READ | APR_BUFFERED, 
-                                APR_OS_DEFAULT, p) != APR_SUCCESS)) {
-	ap_log_error(APLOG_MARK, APLOG_ERR, result, s,
-		     MODNAME ": can't read magic file %s", fname);
-	return -1;
-    }
-
-    /* set up the magic list (empty) */
-    conf->magic = conf->last = NULL;
-
-    /* parse it */
-    for (lineno = 1; apr_file_gets(line, BUFSIZ, f) == APR_SUCCESS; lineno++) {
-	int ws_offset;
-
-	/* delete newline */
-	if (line[0]) {
-	    line[strlen(line) - 1] = '\0';
-	}
-
-	/* skip leading whitespace */
-	ws_offset = 0;
-	while (line[ws_offset] && apr_isspace(line[ws_offset])) {
-	    ws_offset++;
-	}
-
-	/* skip blank lines */
-	if (line[ws_offset] == 0) {
-	    continue;
-	}
-
-	/* comment, do not parse */
-	if (line[ws_offset] == '#')
-	    continue;
-
-#if MIME_MAGIC_DEBUG
-	/* if we get here, we're going to use it so count it */
-	rule++;
-#endif
-
-	/* parse it */
-	if (parse(s, p, line + ws_offset, lineno) != 0)
-	    ++errs;
-    }
-
-    (void) apr_file_close(f);
-
-#if MIME_MAGIC_DEBUG
-    ap_log_error(APLOG_MARK, APLOG_NOERRNO | APLOG_DEBUG, 0, s,
-		MODNAME ": apprentice conf=%x file=%s m=%s m->next=%s last=%s",
-		conf,
-		conf->magicfile ? conf->magicfile : "NULL",
-		conf->magic ? "set" : "NULL",
-		(conf->magic && conf->magic->next) ? "set" : "NULL",
-		conf->last ? "set" : "NULL");
-    ap_log_error(APLOG_MARK, APLOG_NOERRNO | APLOG_DEBUG, 0, s,
-		MODNAME ": apprentice read %d lines, %d rules, %d errors",
-		lineno, rule, errs);
-#endif
-
-#if MIME_MAGIC_DEBUG
-    prevm = 0;
-    ap_log_error(APLOG_MARK, APLOG_NOERRNO | APLOG_DEBUG, 0, s,
-		MODNAME ": apprentice test");
-    for (m = conf->magic; m; m = m->next) {
-	if (apr_isprint((((unsigned long) m) >> 24) & 255) &&
-	    apr_isprint((((unsigned long) m) >> 16) & 255) &&
-	    apr_isprint((((unsigned long) m) >> 8) & 255) &&
-	    apr_isprint(((unsigned long) m) & 255)) {
-	    ap_log_error(APLOG_MARK, APLOG_NOERRNO | APLOG_DEBUG, 0, s,
-			MODNAME ": apprentice: POINTER CLOBBERED! "
-			"m=\"%c%c%c%c\" line=%d",
-			(((unsigned long) m) >> 24) & 255,
-			(((unsigned long) m) >> 16) & 255,
-			(((unsigned long) m) >> 8) & 255,
-			((unsigned long) m) & 255,
-			prevm ? prevm->lineno : -1);
-	    break;
-	}
-	prevm = m;
-    }
-#endif
-
-    return (errs ? -1 : 0);
-}
-
-/*
- * extend the sign bit if the comparison is to be signed
- */
-static unsigned long signextend(server_rec *s, struct magic *m, unsigned long v)
-{
-    if (!(m->flag & UNSIGNED))
-	switch (m->type) {
-	    /*
-	     * Do not remove the casts below.  They are vital. When later
-	     * compared with the data, the sign extension must have happened.
-	     */
-	case BYTE:
-	    v = (char) v;
-	    break;
-	case SHORT:
-	case BESHORT:
-	case LESHORT:
-	    v = (short) v;
-	    break;
-	case DATE:
-	case BEDATE:
-	case LEDATE:
-	case LONG:
-	case BELONG:
-	case LELONG:
-	    v = (long) v;
-	    break;
-	case STRING:
-	    break;
-	default:
-	    ap_log_error(APLOG_MARK, APLOG_NOERRNO | APLOG_ERR, 0, s,
-			MODNAME ": can't happen: m->type=%d", m->type);
-	    return -1;
-	}
-    return v;
-}
-
-/*
- * parse one line from magic file, put into magic[index++] if valid
- */
-static int parse(server_rec *serv, apr_pool_t *p, char *l, int lineno)
-{
-    struct magic *m;
-    char *t, *s;
-    magic_server_config_rec *conf = (magic_server_config_rec *)
-		    ap_get_module_config(serv->module_config, &mime_magic_module);
-
-    /* allocate magic structure entry */
-    m = (struct magic *) apr_pcalloc(p, sizeof(struct magic));
-
-    /* append to linked list */
-    m->next = NULL;
-    if (!conf->magic || !conf->last) {
-	conf->magic = conf->last = m;
-    }
-    else {
-	conf->last->next = m;
-	conf->last = m;
-    }
-
-    /* set values in magic structure */
-    m->flag = 0;
-    m->cont_level = 0;
-    m->lineno = lineno;
-
-    while (*l == '>') {
-	++l;			/* step over */
-	m->cont_level++;
-    }
-
-    if (m->cont_level != 0 && *l == '(') {
-	++l;			/* step over */
-	m->flag |= INDIR;
-    }
-
-    /* get offset, then skip over it */
-    m->offset = (int) strtol(l, &t, 0);
-    if (l == t) {
-	ap_log_error(APLOG_MARK, APLOG_NOERRNO | APLOG_ERR, 0, serv,
-		    MODNAME ": offset %s invalid", l);
-    }
-    l = t;
-
-    if (m->flag & INDIR) {
-	m->in.type = LONG;
-	m->in.offset = 0;
-	/*
-	 * read [.lbs][+-]nnnnn)
-	 */
-	if (*l == '.') {
-	    switch (*++l) {
-	    case 'l':
-		m->in.type = LONG;
-		break;
-	    case 's':
-		m->in.type = SHORT;
-		break;
-	    case 'b':
-		m->in.type = BYTE;
-		break;
-	    default:
-		ap_log_error(APLOG_MARK, APLOG_NOERRNO | APLOG_ERR, 0, serv,
-			MODNAME ": indirect offset type %c invalid", *l);
-		break;
-	    }
-	    l++;
-	}
-	s = l;
-	if (*l == '+' || *l == '-')
-	    l++;
-	if (apr_isdigit((unsigned char) *l)) {
-	    m->in.offset = strtol(l, &t, 0);
-	    if (*s == '-')
-		m->in.offset = -m->in.offset;
-	}
-	else
-	    t = l;
-	if (*t++ != ')') {
-	    ap_log_error(APLOG_MARK, APLOG_NOERRNO | APLOG_ERR, 0, serv,
-			MODNAME ": missing ')' in indirect offset");
-	}
-	l = t;
-    }
-
-
-    while (apr_isdigit((unsigned char) *l))
-	++l;
-    EATAB;
-
-#define NBYTE           4
-#define NSHORT          5
-#define NLONG           4
-#define NSTRING         6
-#define NDATE           4
-#define NBESHORT        7
-#define NBELONG         6
-#define NBEDATE         6
-#define NLESHORT        7
-#define NLELONG         6
-#define NLEDATE         6
-
-    if (*l == 'u') {
-	++l;
-	m->flag |= UNSIGNED;
-    }
-
-    /* get type, skip it */
-    if (strncmp(l, "byte", NBYTE) == 0) {
-	m->type = BYTE;
-	l += NBYTE;
-    }
-    else if (strncmp(l, "short", NSHORT) == 0) {
-	m->type = SHORT;
-	l += NSHORT;
-    }
-    else if (strncmp(l, "long", NLONG) == 0) {
-	m->type = LONG;
-	l += NLONG;
-    }
-    else if (strncmp(l, "string", NSTRING) == 0) {
-	m->type = STRING;
-	l += NSTRING;
-    }
-    else if (strncmp(l, "date", NDATE) == 0) {
-	m->type = DATE;
-	l += NDATE;
-    }
-    else if (strncmp(l, "beshort", NBESHORT) == 0) {
-	m->type = BESHORT;
-	l += NBESHORT;
-    }
-    else if (strncmp(l, "belong", NBELONG) == 0) {
-	m->type = BELONG;
-	l += NBELONG;
-    }
-    else if (strncmp(l, "bedate", NBEDATE) == 0) {
-	m->type = BEDATE;
-	l += NBEDATE;
-    }
-    else if (strncmp(l, "leshort", NLESHORT) == 0) {
-	m->type = LESHORT;
-	l += NLESHORT;
-    }
-    else if (strncmp(l, "lelong", NLELONG) == 0) {
-	m->type = LELONG;
-	l += NLELONG;
-    }
-    else if (strncmp(l, "ledate", NLEDATE) == 0) {
-	m->type = LEDATE;
-	l += NLEDATE;
-    }
-    else {
-	ap_log_error(APLOG_MARK, APLOG_NOERRNO | APLOG_ERR, 0, serv,
-		    MODNAME ": type %s invalid", l);
-	return -1;
-    }
-    /* New-style anding: "0 byte&0x80 =0x80 dynamically linked" */
-    if (*l == '&') {
-	++l;
-	m->mask = signextend(serv, m, strtol(l, &l, 0));
-    }
-    else
-	m->mask = ~0L;
-    EATAB;
-
-    switch (*l) {
-    case '>':
-    case '<':
-	/* Old-style anding: "0 byte &0x80 dynamically linked" */
-    case '&':
-    case '^':
-    case '=':
-	m->reln = *l;
-	++l;
-	break;
-    case '!':
-	if (m->type != STRING) {
-	    m->reln = *l;
-	    ++l;
-	    break;
-	}
-	/* FALL THROUGH */
-    default:
-	if (*l == 'x' && apr_isspace((unsigned char) l[1])) {
-	    m->reln = *l;
-	    ++l;
-	    goto GetDesc;	/* Bill The Cat */
-	}
-	m->reln = '=';
-	break;
-    }
-    EATAB;
-
-    if (getvalue(serv, m, &l))
-	return -1;
-    /*
-     * now get last part - the description
-     */
-  GetDesc:
-    EATAB;
-    if (l[0] == '\b') {
-	++l;
-	m->nospflag = 1;
-    }
-    else if ((l[0] == '\\') && (l[1] == 'b')) {
-	++l;
-	++l;
-	m->nospflag = 1;
-    }
-    else
-	m->nospflag = 0;
-    strncpy(m->desc, l, sizeof(m->desc) - 1);
-    m->desc[sizeof(m->desc) - 1] = '\0';
-
-#if MIME_MAGIC_DEBUG
-    ap_log_error(APLOG_MARK, APLOG_NOERRNO | APLOG_DEBUG, 0, serv,
-		MODNAME ": parse line=%d m=%x next=%x cont=%d desc=%s",
-		lineno, m, m->next, m->cont_level, m->desc);
-#endif /* MIME_MAGIC_DEBUG */
-
-    return 0;
-}
-
-/*
- * Read a numeric value from a pointer, into the value union of a magic
- * pointer, according to the magic type.  Update the string pointer to point
- * just after the number read.  Return 0 for success, non-zero for failure.
- */
-static int getvalue(server_rec *s, struct magic *m, char **p)
-{
-    int slen;
-
-    if (m->type == STRING) {
-	*p = getstr(s, *p, m->value.s, sizeof(m->value.s), &slen);
-	m->vallen = slen;
-    }
-    else if (m->reln != 'x')
-	m->value.l = signextend(s, m, strtol(*p, p, 0));
-    return 0;
-}
-
-/*
- * Convert a string containing C character escapes.  Stop at an unescaped
- * space or tab. Copy the converted version to "p", returning its length in
- * *slen. Return updated scan pointer as function result.
- */
-static char *getstr(server_rec *serv, register char *s, register char *p,
-		    int plen, int *slen)
-{
-    char *origs = s, *origp = p;
-    char *pmax = p + plen - 1;
-    register int c;
-    register int val;
-
-    while ((c = *s++) != '\0') {
-	if (apr_isspace((unsigned char) c))
-	    break;
-	if (p >= pmax) {
-	    ap_log_error(APLOG_MARK, APLOG_NOERRNO | APLOG_ERR, 0, serv,
-			MODNAME ": string too long: %s", origs);
-	    break;
-	}
-	if (c == '\\') {
-	    switch (c = *s++) {
-
-	    case '\0':
-		goto out;
-
-	    default:
-		*p++ = (char) c;
-		break;
-
-	    case 'n':
-		*p++ = '\n';
-		break;
-
-	    case 'r':
-		*p++ = '\r';
-		break;
-
-	    case 'b':
-		*p++ = '\b';
-		break;
-
-	    case 't':
-		*p++ = '\t';
-		break;
-
-	    case 'f':
-		*p++ = '\f';
-		break;
-
-	    case 'v':
-		*p++ = '\v';
-		break;
-
-		/* \ and up to 3 octal digits */
-	    case '0':
-	    case '1':
-	    case '2':
-	    case '3':
-	    case '4':
-	    case '5':
-	    case '6':
-	    case '7':
-		val = c - '0';
-		c = *s++;	/* try for 2 */
-		if (c >= '0' && c <= '7') {
-		    val = (val << 3) | (c - '0');
-		    c = *s++;	/* try for 3 */
-		    if (c >= '0' && c <= '7')
-			val = (val << 3) | (c - '0');
-		    else
-			--s;
-		}
-		else
-		    --s;
-		*p++ = (char) val;
-		break;
-
-		/* \x and up to 3 hex digits */
-	    case 'x':
-		val = 'x';	/* Default if no digits */
-		c = hextoint(*s++);	/* Get next char */
-		if (c >= 0) {
-		    val = c;
-		    c = hextoint(*s++);
-		    if (c >= 0) {
-			val = (val << 4) + c;
-			c = hextoint(*s++);
-			if (c >= 0) {
-			    val = (val << 4) + c;
-			}
-			else
-			    --s;
-		    }
-		    else
-			--s;
-		}
-		else
-		    --s;
-		*p++ = (char) val;
-		break;
-	    }
-	}
-	else
-	    *p++ = (char) c;
-    }
-  out:
-    *p = '\0';
-    *slen = p - origp;
-    return s;
-}
-
-
-/* Single hex char to int; -1 if not a hex char. */
-static int hextoint(int c)
-{
-    if (apr_isdigit((unsigned char) c))
-	return c - '0';
-    if ((c >= 'a') && (c <= 'f'))
-	return c + 10 - 'a';
-    if ((c >= 'A') && (c <= 'F'))
-	return c + 10 - 'A';
-    return -1;
-}
-
-
-/*
- * return DONE to indicate it's been handled
- * return OK to indicate it's a regular file still needing handling
- * other returns indicate a failure of some sort
- */
-static int fsmagic(request_rec *r, const char *fn)
-{
-    switch (r->finfo.filetype) {
-    case APR_DIR:
-	magic_rsl_puts(r, DIR_MAGIC_TYPE);
-	return DONE;
-    case APR_CHR:
-	/*
-	 * (void) magic_rsl_printf(r,"character special (%d/%d)",
-	 * major(sb->st_rdev), minor(sb->st_rdev));
-	 */
-	(void) magic_rsl_puts(r, MIME_BINARY_UNKNOWN);
-	return DONE;
-    case APR_BLK:
-	/*
-	 * (void) magic_rsl_printf(r,"block special (%d/%d)",
-	 * major(sb->st_rdev), minor(sb->st_rdev));
-	 */
-	(void) magic_rsl_puts(r, MIME_BINARY_UNKNOWN);
-	return DONE;
-	/* TODO add code to handle V7 MUX and Blit MUX files */
-    case APR_PIPE:
-	/*
-	 * magic_rsl_puts(r,"fifo (named pipe)");
-	 */
-	(void) magic_rsl_puts(r, MIME_BINARY_UNKNOWN);
-	return DONE;
-    case APR_LNK:
-	/* We used stat(), the only possible reason for this is that the
-	 * symlink is broken.
-	 */
-	ap_log_rerror(APLOG_MARK, APLOG_NOERRNO | APLOG_ERR, 0, r,
-		    MODNAME ": broken symlink (%s)", fn);
-	return HTTP_INTERNAL_SERVER_ERROR;
-    case APR_SOCK:
-	magic_rsl_puts(r, MIME_BINARY_UNKNOWN);
-	return DONE;
-    case APR_REG:
-	break;
-    default:
-	ap_log_rerror(APLOG_MARK, APLOG_NOERRNO | APLOG_ERR, 0, r,
-		      MODNAME ": invalid file type %d.", r->finfo.filetype);
-	return HTTP_INTERNAL_SERVER_ERROR;
-    }
-
-    /*
-     * regular file, check next possibility
-     */
-    if (r->finfo.size == 0) {
-	magic_rsl_puts(r, MIME_TEXT_UNKNOWN);
-	return DONE;
-    }
-    return OK;
-}
-
-/*
- * softmagic - lookup one file in database (already read from /etc/magic by
- * apprentice.c). Passed the name and FILE * of one file to be typed.
- */
-		/* ARGSUSED1 *//* nbytes passed for regularity, maybe need later */
-static int softmagic(request_rec *r, unsigned char *buf, apr_size_t nbytes)
-{
-    if (match(r, buf, nbytes))
-	return 1;
-
-    return 0;
-}
-
-/*
- * Go through the whole list, stopping if you find a match.  Process all the
- * continuations of that match before returning.
- *
- * We support multi-level continuations:
- *
- * At any time when processing a successful top-level match, there is a current
- * continuation level; it represents the level of the last successfully
- * matched continuation.
- *
- * Continuations above that level are skipped as, if we see one, it means that
- * the continuation that controls them - i.e, the lower-level continuation
- * preceding them - failed to match.
- *
- * Continuations below that level are processed as, if we see one, it means
- * we've finished processing or skipping higher-level continuations under the
- * control of a successful or unsuccessful lower-level continuation, and are
- * now seeing the next lower-level continuation and should process it.  The
- * current continuation level reverts to the level of the one we're seeing.
- *
- * Continuations at the current level are processed as, if we see one, there's
- * no lower-level continuation that may have failed.
- *
- * If a continuation matches, we bump the current continuation level so that
- * higher-level continuations are processed.
- */
-static int match(request_rec *r, unsigned char *s, apr_size_t nbytes)
-{
-#if MIME_MAGIC_DEBUG
-    int rule_counter = 0;
-#endif
-    int cont_level = 0;
-    int need_separator = 0;
-    union VALUETYPE p;
-    magic_server_config_rec *conf = (magic_server_config_rec *)
-		ap_get_module_config(r->server->module_config, &mime_magic_module);
-    struct magic *m;
-
-#if MIME_MAGIC_DEBUG
-    ap_log_rerror(APLOG_MARK, APLOG_NOERRNO | APLOG_DEBUG, 0, r,
-		MODNAME ": match conf=%x file=%s m=%s m->next=%s last=%s",
-		conf,
-		conf->magicfile ? conf->magicfile : "NULL",
-		conf->magic ? "set" : "NULL",
-		(conf->magic && conf->magic->next) ? "set" : "NULL",
-		conf->last ? "set" : "NULL");
-#endif
-
-#if MIME_MAGIC_DEBUG
-    for (m = conf->magic; m; m = m->next) {
-	if (apr_isprint((((unsigned long) m) >> 24) & 255) &&
-	    apr_isprint((((unsigned long) m) >> 16) & 255) &&
-	    apr_isprint((((unsigned long) m) >> 8) & 255) &&
-	    apr_isprint(((unsigned long) m) & 255)) {
-	    ap_log_rerror(APLOG_MARK, APLOG_NOERRNO | APLOG_DEBUG, 0, r,
-			MODNAME ": match: POINTER CLOBBERED! "
-			"m=\"%c%c%c%c\"",
-			(((unsigned long) m) >> 24) & 255,
-			(((unsigned long) m) >> 16) & 255,
-			(((unsigned long) m) >> 8) & 255,
-			((unsigned long) m) & 255);
-	    break;
-	}
-    }
-#endif
-
-    for (m = conf->magic; m; m = m->next) {
-#if MIME_MAGIC_DEBUG
-	rule_counter++;
-	ap_log_rerror(APLOG_MARK, APLOG_NOERRNO | APLOG_DEBUG, 0, r,
-		    MODNAME ": line=%d desc=%s", m->lineno, m->desc);
-#endif
-
-	/* check if main entry matches */
-	if (!mget(r, &p, s, m, nbytes) ||
-	    !mcheck(r, &p, m)) {
-	    struct magic *m_cont;
-
-	    /*
-	     * main entry didn't match, flush its continuations
-	     */
-	    if (!m->next || (m->next->cont_level == 0)) {
-		continue;
-	    }
-
-	    m_cont = m->next;
-	    while (m_cont && (m_cont->cont_level != 0)) {
-#if MIME_MAGIC_DEBUG
-		rule_counter++;
-		ap_log_rerror(APLOG_MARK, APLOG_NOERRNO | APLOG_DEBUG, 0, r,
-			MODNAME ": line=%d mc=%x mc->next=%x cont=%d desc=%s",
-			    m_cont->lineno, m_cont,
-			    m_cont->next, m_cont->cont_level,
-			    m_cont->desc);
-#endif
-		/*
-		 * this trick allows us to keep *m in sync when the continue
-		 * advances the pointer
-		 */
-		m = m_cont;
-		m_cont = m_cont->next;
-	    }
-	    continue;
-	}
-
-	/* if we get here, the main entry rule was a match */
-	/* this will be the last run through the loop */
-#if MIME_MAGIC_DEBUG
-	ap_log_rerror(APLOG_MARK, APLOG_NOERRNO | APLOG_DEBUG, 0, r,
-		    MODNAME ": rule matched, line=%d type=%d %s",
-		    m->lineno, m->type,
-		    (m->type == STRING) ? m->value.s : "");
-#endif
-
-	/* print the match */
-	mprint(r, &p, m);
-
-	/*
-	 * If we printed something, we'll need to print a blank before we
-	 * print something else.
-	 */
-	if (m->desc[0])
-	    need_separator = 1;
-	/* and any continuations that match */
-	cont_level++;
-	/*
-	 * while (m && m->next && m->next->cont_level != 0 && ( m = m->next
-	 * ))
-	 */
-	m = m->next;
-	while (m && (m->cont_level != 0)) {
-#if MIME_MAGIC_DEBUG
-	    ap_log_rerror(APLOG_MARK, APLOG_NOERRNO | APLOG_DEBUG, 0, r,
-			MODNAME ": match line=%d cont=%d type=%d %s",
-			m->lineno, m->cont_level, m->type,
-			(m->type == STRING) ? m->value.s : "");
-#endif
-	    if (cont_level >= m->cont_level) {
-		if (cont_level > m->cont_level) {
-		    /*
-		     * We're at the end of the level "cont_level"
-		     * continuations.
-		     */
-		    cont_level = m->cont_level;
-		}
-		if (mget(r, &p, s, m, nbytes) &&
-		    mcheck(r, &p, m)) {
-		    /*
-		     * This continuation matched. Print its message, with a
-		     * blank before it if the previous item printed and this
-		     * item isn't empty.
-		     */
-		    /* space if previous printed */
-		    if (need_separator
-			&& (m->nospflag == 0)
-			&& (m->desc[0] != '\0')
-			) {
-			(void) magic_rsl_putchar(r, ' ');
-			need_separator = 0;
-		    }
-		    mprint(r, &p, m);
-		    if (m->desc[0])
-			need_separator = 1;
-
-		    /*
-		     * If we see any continuations at a higher level, process
-		     * them.
-		     */
-		    cont_level++;
-		}
-	    }
-
-	    /* move to next continuation record */
-	    m = m->next;
-	}
-#if MIME_MAGIC_DEBUG
-	ap_log_rerror(APLOG_MARK, APLOG_NOERRNO | APLOG_DEBUG, 0, r,
-		    MODNAME ": matched after %d rules", rule_counter);
-#endif
-	return 1;		/* all through */
-    }
-#if MIME_MAGIC_DEBUG
-    ap_log_rerror(APLOG_MARK, APLOG_NOERRNO | APLOG_DEBUG, 0, r,
-		MODNAME ": failed after %d rules", rule_counter);
-#endif
-    return 0;			/* no match at all */
-}
-
-static void mprint(request_rec *r, union VALUETYPE *p, struct magic *m)
-{
-    char *pp;
-    unsigned long v;
-    char time_str[APR_CTIME_LEN];
-
-    switch (m->type) {
-    case BYTE:
-	v = p->b;
-	break;
-
-    case SHORT:
-    case BESHORT:
-    case LESHORT:
-	v = p->h;
-	break;
-
-    case LONG:
-    case BELONG:
-    case LELONG:
-	v = p->l;
-	break;
-
-    case STRING:
-	if (m->reln == '=') {
-	    (void) magic_rsl_printf(r, m->desc, m->value.s);
-	}
-	else {
-	    (void) magic_rsl_printf(r, m->desc, p->s);
-	}
-	return;
-
-    case DATE:
-    case BEDATE:
-    case LEDATE:
-        apr_ctime(time_str, APR_USEC_PER_SEC * (apr_time_t)*(time_t *)&p->l);
-        pp = time_str;
-	(void) magic_rsl_printf(r, m->desc, pp);
-	return;
-    default:
-	ap_log_rerror(APLOG_MARK, APLOG_NOERRNO | APLOG_ERR, 0, r,
-		    MODNAME ": invalid m->type (%d) in mprint().",
-		    m->type);
-	return;
-    }
-
-    v = signextend(r->server, m, v) & m->mask;
-    (void) magic_rsl_printf(r, m->desc, (unsigned long) v);
-}
-
-/*
- * Convert the byte order of the data we are looking at
- */
-static int mconvert(request_rec *r, union VALUETYPE *p, struct magic *m)
-{
-    char *rt;
-
-    switch (m->type) {
-    case BYTE:
-    case SHORT:
-    case LONG:
-    case DATE:
-	return 1;
-    case STRING:
-	/* Null terminate and eat the return */
-	p->s[sizeof(p->s) - 1] = '\0';
-	if ((rt = strchr(p->s, '\n')) != NULL)
-	    *rt = '\0';
-	return 1;
-    case BESHORT:
-	p->h = (short) ((p->hs[0] << 8) | (p->hs[1]));
-	return 1;
-    case BELONG:
-    case BEDATE:
-	p->l = (long)
-	    ((p->hl[0] << 24) | (p->hl[1] << 16) | (p->hl[2] << 8) | (p->hl[3]));
-	return 1;
-    case LESHORT:
-	p->h = (short) ((p->hs[1] << 8) | (p->hs[0]));
-	return 1;
-    case LELONG:
-    case LEDATE:
-	p->l = (long)
-	    ((p->hl[3] << 24) | (p->hl[2] << 16) | (p->hl[1] << 8) | (p->hl[0]));
-	return 1;
-    default:
-	ap_log_rerror(APLOG_MARK, APLOG_NOERRNO | APLOG_ERR, 0, r,
-		    MODNAME ": invalid type %d in mconvert().", m->type);
-	return 0;
-    }
-}
-
-
-static int mget(request_rec *r, union VALUETYPE *p, unsigned char *s,
-		struct magic *m, apr_size_t nbytes)
-{
-    long offset = m->offset;
-
-    if (offset + sizeof(union VALUETYPE) > nbytes)
-	          return 0;
-
-    memcpy(p, s + offset, sizeof(union VALUETYPE));
-
-    if (!mconvert(r, p, m))
-	return 0;
-
-    if (m->flag & INDIR) {
-
-	switch (m->in.type) {
-	case BYTE:
-	    offset = p->b + m->in.offset;
-	    break;
-	case SHORT:
-	    offset = p->h + m->in.offset;
-	    break;
-	case LONG:
-	    offset = p->l + m->in.offset;
-	    break;
-	}
-
-	if (offset + sizeof(union VALUETYPE) > nbytes)
-	              return 0;
-
-	memcpy(p, s + offset, sizeof(union VALUETYPE));
-
-	if (!mconvert(r, p, m))
-	    return 0;
-    }
-    return 1;
-}
-
-static int mcheck(request_rec *r, union VALUETYPE *p, struct magic *m)
-{
-    register unsigned long l = m->value.l;
-    register unsigned long v;
-    int matched;
-
-    if ((m->value.s[0] == 'x') && (m->value.s[1] == '\0')) {
-	ap_log_rerror(APLOG_MARK, APLOG_NOERRNO | APLOG_ERR, 0, r,
-		    MODNAME ": BOINK");
-	return 1;
-    }
-
-    switch (m->type) {
-    case BYTE:
-	v = p->b;
-	break;
-
-    case SHORT:
-    case BESHORT:
-    case LESHORT:
-	v = p->h;
-	break;
-
-    case LONG:
-    case BELONG:
-    case LELONG:
-    case DATE:
-    case BEDATE:
-    case LEDATE:
-	v = p->l;
-	break;
-
-    case STRING:
-	l = 0;
-	/*
-	 * What we want here is: v = strncmp(m->value.s, p->s, m->vallen);
-	 * but ignoring any nulls.  bcmp doesn't give -/+/0 and isn't
-	 * universally available anyway.
-	 */
-	v = 0;
-	{
-	    register unsigned char *a = (unsigned char *) m->value.s;
-	    register unsigned char *b = (unsigned char *) p->s;
-	    register int len = m->vallen;
-
-	    while (--len >= 0)
-		if ((v = *b++ - *a++) != 0)
-		    break;
-	}
-	break;
-    default:
-	/*  bogosity, pretend that it just wasn't a match */
-	ap_log_rerror(APLOG_MARK, APLOG_NOERRNO | APLOG_ERR, 0, r,
-		    MODNAME ": invalid type %d in mcheck().", m->type);
-	return 0;
-    }
-
-    v = signextend(r->server, m, v) & m->mask;
-
-    switch (m->reln) {
-    case 'x':
-#if MIME_MAGIC_DEBUG
-	ap_log_rerror(APLOG_MARK, APLOG_NOERRNO | APLOG_DEBUG, 0, r,
-		    "%lu == *any* = 1", v);
-#endif
-	matched = 1;
-	break;
-
-    case '!':
-	matched = v != l;
-#if MIME_MAGIC_DEBUG
-	ap_log_rerror(APLOG_MARK, APLOG_NOERRNO | APLOG_DEBUG, 0, r,
-		    "%lu != %lu = %d", v, l, matched);
-#endif
-	break;
-
-    case '=':
-	matched = v == l;
-#if MIME_MAGIC_DEBUG
-	ap_log_rerror(APLOG_MARK, APLOG_NOERRNO | APLOG_DEBUG, 0, r,
-		    "%lu == %lu = %d", v, l, matched);
-#endif
-	break;
-
-    case '>':
-	if (m->flag & UNSIGNED) {
-	    matched = v > l;
-#if MIME_MAGIC_DEBUG
-	    ap_log_rerror(APLOG_MARK, APLOG_NOERRNO | APLOG_DEBUG, 0, r,
-			"%lu > %lu = %d", v, l, matched);
-#endif
-	}
-	else {
-	    matched = (long) v > (long) l;
-#if MIME_MAGIC_DEBUG
-	    ap_log_rerror(APLOG_MARK, APLOG_NOERRNO | APLOG_DEBUG, 0, r,
-			"%ld > %ld = %d", v, l, matched);
-#endif
-	}
-	break;
-
-    case '<':
-	if (m->flag & UNSIGNED) {
-	    matched = v < l;
-#if MIME_MAGIC_DEBUG
-	    ap_log_rerror(APLOG_MARK, APLOG_NOERRNO | APLOG_DEBUG, 0, r,
-			"%lu < %lu = %d", v, l, matched);
-#endif
-	}
-	else {
-	    matched = (long) v < (long) l;
-#if MIME_MAGIC_DEBUG
-	    ap_log_rerror(APLOG_MARK, APLOG_NOERRNO | APLOG_DEBUG, 0, r,
-			"%ld < %ld = %d", v, l, matched);
-#endif
-	}
-	break;
-
-    case '&':
-	matched = (v & l) == l;
-#if MIME_MAGIC_DEBUG
-	ap_log_rerror(APLOG_MARK, APLOG_NOERRNO | APLOG_DEBUG, 0, r,
-		    "((%lx & %lx) == %lx) = %d", v, l, l, matched);
-#endif
-	break;
-
-    case '^':
-	matched = (v & l) != l;
-#if MIME_MAGIC_DEBUG
-	ap_log_rerror(APLOG_MARK, APLOG_NOERRNO | APLOG_DEBUG, 0, r,
-		    "((%lx & %lx) != %lx) = %d", v, l, l, matched);
-#endif
-	break;
-
-    default:
-	/* bogosity, pretend it didn't match */
-	matched = 0;
-	ap_log_rerror(APLOG_MARK, APLOG_NOERRNO | APLOG_ERR, 0, r,
-		    MODNAME ": mcheck: can't happen: invalid relation %d.",
-		    m->reln);
-	break;
-    }
-
-    return matched;
-}
-
-/* an optimization over plain strcmp() */
-#define    STREQ(a, b)    (*(a) == *(b) && strcmp((a), (b)) == 0)
-
-static int ascmagic(request_rec *r, unsigned char *buf, apr_size_t nbytes)
-{
-    int has_escapes = 0;
-    unsigned char *s;
-    char nbuf[HOWMANY + 1];	/* one extra for terminating '\0' */
-    char *token;
-    register struct names *p;
-    int small_nbytes;
-    char *strtok_state;
-
-    /* these are easy, do them first */
-
-    /*
-     * for troff, look for . + letter + letter or .\"; this must be done to
-     * disambiguate tar archives' ./file and other trash from real troff
-     * input.
-     */
-    if (*buf == '.') {
-	unsigned char *tp = buf + 1;
-
-	while (apr_isspace(*tp))
-	    ++tp;		/* skip leading whitespace */
-	if ((apr_isalnum(*tp) || *tp == '\\') &&
-	     (apr_isalnum(*(tp + 1)) || *tp == '"')) {
-	    magic_rsl_puts(r, "application/x-troff");
-	    return 1;
-	}
-    }
-    if ((*buf == 'c' || *buf == 'C') && apr_isspace(*(buf + 1))) {
-	/* Fortran */
-	magic_rsl_puts(r, "text/plain");
-	return 1;
-    }
-
-    /* look for tokens from names.h - this is expensive!, so we'll limit
-     * ourselves to only SMALL_HOWMANY bytes */
-    small_nbytes = (nbytes > SMALL_HOWMANY) ? SMALL_HOWMANY : nbytes;
-    /* make a copy of the buffer here because apr_strtok() will destroy it */
-    s = (unsigned char *) memcpy(nbuf, buf, small_nbytes);
-    s[small_nbytes] = '\0';
-    has_escapes = (memchr(s, '\033', small_nbytes) != NULL);
-    while ((token = apr_strtok((char *) s, " \t\n\r\f", &strtok_state)) != NULL) {
-	s = NULL;		/* make apr_strtok() keep on tokin' */
-	for (p = names; p < names + NNAMES; p++) {
-	    if (STREQ(p->name, token)) {
-		magic_rsl_puts(r, types[p->type]);
-		if (has_escapes)
-		    magic_rsl_puts(r, " (with escape sequences)");
-		return 1;
-	    }
-	}
-    }
-
-    switch (is_tar(buf, nbytes)) {
-    case 1:
-	/* V7 tar archive */
-	magic_rsl_puts(r, "application/x-tar");
-	return 1;
-    case 2:
-	/* POSIX tar archive */
-	magic_rsl_puts(r, "application/x-tar");
-	return 1;
-    }
-
-    /* all else fails, but it is ascii... */
-    if (has_escapes) {
-	/* text with escape sequences */
-	/* we leave this open for further differentiation later */
-	magic_rsl_puts(r, "text/plain");
-    }
-    else {
-	/* plain text */
-	magic_rsl_puts(r, "text/plain");
-    }
-    return 1;
-}
-
-
-/*
- * compress routines: zmagic() - returns 0 if not recognized, uncompresses
- * and prints information if recognized uncompress(s, method, old, n, newch)
- * - uncompress old into new, using method, return sizeof new
- */
-
-static struct {
-    char *magic;
-    apr_size_t maglen;
-    char *argv[3];
-    int silent;
-    char *encoding;	/* MUST be lowercase */
-} compr[] = {
-
-    /* we use gzip here rather than uncompress because we have to pass
-     * it a full filename -- and uncompress only considers filenames
-     * ending with .Z
-     */
-    {
-	"\037\235", 2, {
-	    "gzip", "-dcq", NULL
-	}, 0, "x-compress"
-    },
-    {
-	"\037\213", 2, {
-	    "gzip", "-dcq", NULL
-	}, 1, "x-gzip"
-    },
-    /*
-     * XXX pcat does not work, cause I don't know how to make it read stdin,
-     * so we use gzip
-     */
-    {
-	"\037\036", 2, {
-	    "gzip", "-dcq", NULL
-	}, 0, "x-gzip"
-    },
-};
-
-static int ncompr = sizeof(compr) / sizeof(compr[0]);
-
-static int zmagic(request_rec *r, unsigned char *buf, apr_size_t nbytes)
-{
-    unsigned char *newbuf;
-    int newsize;
-    int i;
-
-    for (i = 0; i < ncompr; i++) {
-	if (nbytes < compr[i].maglen)
-	    continue;
-	if (memcmp(buf, compr[i].magic, compr[i].maglen) == 0)
-	    break;
-    }
-
-    if (i == ncompr)
-	return 0;
-
-    if ((newsize = uncompress(r, i, &newbuf, nbytes)) > 0) {
-	tryit(r, newbuf, newsize, 0);
-
-	/* set encoding type in the request record */
-	r->content_encoding = compr[i].encoding;
-    }
-    return 1;
-}
-
-
-struct uncompress_parms {
-    request_rec *r;
-    int method;
-};
-
-static int create_uncompress_child(struct uncompress_parms *parm, apr_pool_t *cntxt,
-                                   apr_file_t **pipe_in)
-{
-    int rc = 1;
-    const char *new_argv[4];
-    const char *const *env;
-    request_rec *r = parm->r;
-    apr_pool_t *child_context = cntxt;
-    apr_procattr_t *procattr;
-    apr_proc_t *procnew;
-
-    /* XXX missing 1.3 logic: 
-     *
-     * what happens when !compr[parm->method].silent?
-     * Should we create the err pipe, read it, and copy to the log?
-     */
-        
-    env = (const char *const *)ap_create_environment(child_context, r->subprocess_env);
-
-    if ((apr_procattr_create(&procattr, child_context) != APR_SUCCESS) ||
-        (apr_procattr_io_set(procattr, APR_FULL_BLOCK, 
-                           APR_FULL_BLOCK, APR_NO_PIPE)   != APR_SUCCESS) ||
-        (apr_procattr_dir_set(procattr, r->filename)        != APR_SUCCESS) ||
-        (apr_procattr_cmdtype_set(procattr, APR_PROGRAM)    != APR_SUCCESS)) {
-        /* Something bad happened, tell the world. */
-        ap_log_rerror(APLOG_MARK, APLOG_ERR, APR_ENOPROC, r,
-               "couldn't setup child process: %s", r->filename);
-    }
-    else {
-        new_argv[0] = compr[parm->method].argv[0];
-        new_argv[1] = compr[parm->method].argv[1];
-        new_argv[2] = r->filename;
-        new_argv[3] = NULL;
-
-        procnew = apr_pcalloc(child_context, sizeof(*procnew));
-        rc = apr_proc_create(procnew, compr[parm->method].argv[0],
-                               new_argv, env, procattr, child_context);
-
-        if (rc != APR_SUCCESS) {
-            /* Bad things happened. Everyone should have cleaned up. */
-            ap_log_rerror(APLOG_MARK, APLOG_ERR, APR_ENOPROC, r,
-                          MODNAME ": could not execute `%s'.",
-                          compr[parm->method].argv[0]);
-        }
-        else {
-            apr_pool_note_subprocess(child_context, procnew, APR_KILL_AFTER_TIMEOUT);
-            *pipe_in = procnew->out;
-        }
-    }
-
-    return (rc);
-}
-
-static int uncompress(request_rec *r, int method, 
-		      unsigned char **newch, apr_size_t n)
-{
-    struct uncompress_parms parm;
-    apr_file_t *pipe_out = NULL;
-    apr_pool_t *sub_context;
-    apr_status_t rv;
-
-    parm.r = r;
-    parm.method = method;
-
-    /* We make a sub_pool so that we can collect our child early, otherwise
-     * there are cases (i.e. generating directory indicies with mod_autoindex)
-     * where we would end up with LOTS of zombies.
-     */
-    if (apr_pool_create(&sub_context, r->pool) != APR_SUCCESS)
-        return -1;
-
-    if ((rv = create_uncompress_child(&parm, sub_context, &pipe_out)) != APR_SUCCESS) {
-	ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
-		    MODNAME ": couldn't spawn uncompress process: %s", r->uri);
-	return -1;
-    }
-
-    *newch = (unsigned char *) apr_palloc(r->pool, n);
-    rv = apr_file_read(pipe_out, *newch, &n);
-    if (n == 0) {
-	apr_pool_destroy(sub_context);
-	ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
-	    MODNAME ": read failed %s", r->filename);
-	return -1;
-    }
-    apr_pool_destroy(sub_context);
-    return n;
-}
-
-/*
- * is_tar() -- figure out whether file is a tar archive.
- *
- * Stolen (by author of file utility) from the public domain tar program: Public
- * Domain version written 26 Aug 1985 John Gilmore (ihnp4!hoptoad!gnu).
- *
- * @(#)list.c 1.18 9/23/86 Public Domain - gnu $Id: mod_mime_magic.c,v 1.7
- * 1997/06/24 00:41:02 ikluft Exp ikluft $
- *
- * Comments changed and some code/comments reformatted for file command by Ian
- * Darwin.
- */
-
-#define    isodigit(c)    ( ((c) >= '0') && ((c) <= '7') )
-
-/*
- * Return 0 if the checksum is bad (i.e., probably not a tar archive), 1 for
- * old UNIX tar file, 2 for Unix Std (POSIX) tar file.
- */
-
-static int is_tar(unsigned char *buf, apr_size_t nbytes)
-{
-    register union record *header = (union record *) buf;
-    register int i;
-    register long sum, recsum;
-    register char *p;
-
-    if (nbytes < sizeof(union record))
-	       return 0;
-
-    recsum = from_oct(8, header->header.chksum);
-
-    sum = 0;
-    p = header->charptr;
-    for (i = sizeof(union record); --i >= 0;) {
-	/*
-	 * We can't use unsigned char here because of old compilers, e.g. V7.
-	 */
-	sum += 0xFF & *p++;
-    }
-
-    /* Adjust checksum to count the "chksum" field as blanks. */
-    for (i = sizeof(header->header.chksum); --i >= 0;)
-	sum -= 0xFF & header->header.chksum[i];
-    sum += ' ' * sizeof header->header.chksum;
-
-    if (sum != recsum)
-	return 0;		/* Not a tar archive */
-
-    if (0 == strcmp(header->header.magic, TMAGIC))
-	return 2;		/* Unix Standard tar archive */
-
-    return 1;			/* Old fashioned tar archive */
-}
-
-
-/*
- * Quick and dirty octal conversion.
- *
- * Result is -1 if the field is invalid (all blank, or nonoctal).
- */
-static long from_oct(int digs, char *where)
-{
-    register long value;
-
-    while (apr_isspace(*where)) {	/* Skip spaces */
-	where++;
-	if (--digs <= 0)
-	    return -1;		/* All blank field */
-    }
-    value = 0;
-    while (digs > 0 && isodigit(*where)) {	/* Scan til nonoctal */
-	value = (value << 3) | (*where++ - '0');
-	--digs;
-    }
-
-    if (digs > 0 && *where && !apr_isspace(*where))
-	return -1;		/* Ended on non-space/nul */
-
-    return value;
-}
-
-/*
- * Check for file-revision suffix
- *
- * This is for an obscure document control system used on an intranet.
- * The web representation of each file's revision has an @1, @2, etc
- * appended with the revision number.  This needs to be stripped off to
- * find the file suffix, which can be recognized by sending the name back
- * through a sub-request.  The base file name (without the @num suffix)
- * must exist because its type will be used as the result.
- */
-static int revision_suffix(request_rec *r)
-{
-    int suffix_pos, result;
-    char *sub_filename;
-    request_rec *sub;
-
-#if MIME_MAGIC_DEBUG
-    ap_log_rerror(APLOG_MARK, APLOG_NOERRNO | APLOG_DEBUG, 0, r,
-		MODNAME ": revision_suffix checking %s", r->filename);
-#endif /* MIME_MAGIC_DEBUG */
-
-    /* check for recognized revision suffix */
-    suffix_pos = strlen(r->filename) - 1;
-    if (!apr_isdigit(r->filename[suffix_pos])) {
-	return 0;
-    }
-    while (suffix_pos >= 0 && apr_isdigit(r->filename[suffix_pos]))
-	suffix_pos--;
-    if (suffix_pos < 0 || r->filename[suffix_pos] != '@') {
-	return 0;
-    }
-
-    /* perform sub-request for the file name without the suffix */
-    result = 0;
-    sub_filename = apr_pstrndup(r->pool, r->filename, suffix_pos);
-#if MIME_MAGIC_DEBUG
-    ap_log_rerror(APLOG_MARK, APLOG_NOERRNO | APLOG_DEBUG, 0, r,
-		MODNAME ": subrequest lookup for %s", sub_filename);
-#endif /* MIME_MAGIC_DEBUG */
-    sub = ap_sub_req_lookup_file(sub_filename, r, NULL);
-
-    /* extract content type/encoding/language from sub-request */
-    if (sub->content_type) {
-	r->content_type = apr_pstrdup(r->pool, sub->content_type);
-#if MIME_MAGIC_DEBUG
-	ap_log_rerror(APLOG_MARK, APLOG_NOERRNO | APLOG_DEBUG, 0, r,
-		    MODNAME ": subrequest %s got %s",
-		    sub_filename, r->content_type);
-#endif /* MIME_MAGIC_DEBUG */
-	if (sub->content_encoding)
-	    r->content_encoding =
-		apr_pstrdup(r->pool, sub->content_encoding);
-        if (sub->content_languages) {
-            int n;
-	    r->content_languages = apr_array_copy(r->pool, 
-                                                  sub->content_languages);
-            for (n = 0; n < r->content_languages->nelts; ++n) {
-                char **lang = ((char **)r->content_languages->elts) + n;
-                *lang = apr_pstrdup(r->pool, *lang);
-            }
-        }
-	result = 1;
-    }
-
-    /* clean up */
-    ap_destroy_sub_req(sub);
-
-    return result;
-}
-
-/*
- * initialize the module
- */
-static int magic_init(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *main_server)
-{
-    int result;
-    magic_server_config_rec *conf;
-    magic_server_config_rec *main_conf;
-    server_rec *s;
-#if MIME_MAGIC_DEBUG
-    struct magic *m, *prevm;
-#endif /* MIME_MAGIC_DEBUG */
-
-    main_conf = ap_get_module_config(main_server->module_config, &mime_magic_module);
-    for (s = main_server; s; s = s->next) {
-	conf = ap_get_module_config(s->module_config, &mime_magic_module);
-	if (conf->magicfile == NULL && s != main_server) {
-	    /* inherits from the parent */
-	    *conf = *main_conf;
-	}
-	else if (conf->magicfile) {
-	    result = apprentice(s, p);
-	    if (result == -1)
-		return OK;
-#if MIME_MAGIC_DEBUG
-	    prevm = 0;
-	    ap_log_error(APLOG_MARK, APLOG_NOERRNO | APLOG_DEBUG, 0, s,
-			MODNAME ": magic_init 1 test");
-	    for (m = conf->magic; m; m = m->next) {
-		if (apr_isprint((((unsigned long) m) >> 24) & 255) &&
-		    apr_isprint((((unsigned long) m) >> 16) & 255) &&
-		    apr_isprint((((unsigned long) m) >> 8) & 255) &&
-		    apr_isprint(((unsigned long) m) & 255)) {
-		    ap_log_error(APLOG_MARK, APLOG_NOERRNO | APLOG_DEBUG, 0, s,
-				MODNAME ": magic_init 1: POINTER CLOBBERED! "
-				"m=\"%c%c%c%c\" line=%d",
-				(((unsigned long) m) >> 24) & 255,
-				(((unsigned long) m) >> 16) & 255,
-				(((unsigned long) m) >> 8) & 255,
-				((unsigned long) m) & 255,
-				prevm ? prevm->lineno : -1);
-		    break;
-		}
-		prevm = m;
-	    }
-#endif
-	}
-    }
-    return OK;
-}
-
-/*
- * Find the Content-Type from any resource this module has available
- */
-
-static int magic_find_ct(request_rec *r)
-{
-    int result;
-    magic_server_config_rec *conf;
-
-    /* the file has to exist */
-    if (r->finfo.filetype == 0 || !r->filename) {
-	return DECLINED;
-    }
-
-    /* was someone else already here? */
-    if (r->content_type) {
-	return DECLINED;
-    }
-
-    conf = ap_get_module_config(r->server->module_config, &mime_magic_module);
-    if (!conf || !conf->magic) {
-	return DECLINED;
-    }
-
-    /* initialize per-request info */
-    if (!magic_set_config(r)) {
-	return HTTP_INTERNAL_SERVER_ERROR;
-    }
-
-    /* try excluding file-revision suffixes */
-    if (revision_suffix(r) != 1) {
-	/* process it based on the file contents */
-	if ((result = magic_process(r)) != OK) {
-	    return result;
-	}
-    }
-
-    /* if we have any results, put them in the request structure */
-    return magic_rsl_to_request(r);
-}
-
-static void register_hooks(apr_pool_t *p)
-{
-    static const char * const aszPre[]={ "mod_mime.c", NULL };
-
-    /* mod_mime_magic should be run after mod_mime, if at all. */
-
-    ap_hook_type_checker(magic_find_ct, aszPre, NULL, APR_HOOK_MIDDLE);
-    ap_hook_post_config(magic_init, NULL, NULL, APR_HOOK_FIRST);
-}
-
-/*
- * Apache API module interface
- */
-
-module AP_MODULE_DECLARE_DATA mime_magic_module =
-{
-    STANDARD20_MODULE_STUFF,
-    NULL,                      /* dir config creator */
-    NULL,                      /* dir merger --- default is to override */
-    create_magic_server_config,        /* server config */
-    merge_magic_server_config, /* merge server config */
-    mime_magic_cmds,           /* command apr_table_t */
-    register_hooks              /* register hooks */
-};
-
-
diff --git a/modules/metadata/mod_mime_magic.dsp b/modules/metadata/mod_mime_magic.dsp
deleted file mode 100644
index 83c287c..0000000
--- a/modules/metadata/mod_mime_magic.dsp
+++ /dev/null
@@ -1,128 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mod_mime_magic" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mod_mime_magic - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "mod_mime_magic.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "mod_mime_magic.mak" CFG="mod_mime_magic - Win32 Release"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "mod_mime_magic - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mod_mime_magic - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "mod_mime_magic - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /O2 /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Release\mod_mime_magic" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib ws2_32.lib /nologo /subsystem:windows /dll /map /machine:I386 /out:"Release/mod_mime_magic.so" /base:@..\..\os\win32\BaseAddr.ref,mod_mime_magic
-# ADD LINK32 kernel32.lib ws2_32.lib /nologo /subsystem:windows /dll /map /machine:I386 /out:"Release/mod_mime_magic.so" /base:@..\..\os\win32\BaseAddr.ref,mod_mime_magic
-
-!ELSEIF  "$(CFG)" == "mod_mime_magic - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Debug\mod_mime_magic" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib ws2_32.lib /nologo /subsystem:windows /dll /incremental:no /map /debug /machine:I386 /out:"Debug/mod_mime_magic.so" /base:@..\..\os\win32\BaseAddr.ref,mod_mime_magic
-# ADD LINK32 kernel32.lib ws2_32.lib /nologo /subsystem:windows /dll /incremental:no /map /debug /machine:I386 /out:"Debug/mod_mime_magic.so" /base:@..\..\os\win32\BaseAddr.ref,mod_mime_magic
-
-!ENDIF 
-
-# Begin Target
-
-# Name "mod_mime_magic - Win32 Release"
-# Name "mod_mime_magic - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\mod_mime_magic.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mod_mime_magic.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\build\win32\win32ver.awk
-
-!IF  "$(CFG)" == "mod_mime_magic - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_mime_magic.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ../../build/win32/win32ver.awk mod_mime_magic  "mime_magic_module for Apache" ../../include/ap_release.h  > .\mod_mime_magic.rc
-
-# End Custom Build
-
-!ELSEIF  "$(CFG)" == "mod_mime_magic - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_mime_magic.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ../../build/win32/win32ver.awk mod_mime_magic  "mime_magic_module for Apache" ../../include/ap_release.h  > .\mod_mime_magic.rc
-
-# End Custom Build
-
-!ENDIF 
-
-# End Source File
-# End Target
-# End Project
diff --git a/modules/metadata/mod_mime_magic.exp b/modules/metadata/mod_mime_magic.exp
deleted file mode 100644
index 42068a4..0000000
--- a/modules/metadata/mod_mime_magic.exp
+++ /dev/null
@@ -1 +0,0 @@
-mime_magic_module
diff --git a/modules/metadata/mod_setenvif.c b/modules/metadata/mod_setenvif.c
deleted file mode 100644
index bc9cc82..0000000
--- a/modules/metadata/mod_setenvif.c
+++ /dev/null
@@ -1,525 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-/*
- * mod_setenvif.c
- * Set environment variables based on matching request headers or
- * attributes against regex strings
- * 
- * Paul Sutton <paul@ukweb.com> 27 Oct 1996
- * Based on mod_browser by Alexei Kosut <akosut@organic.com>
- */
-
-/*
- * Used to set environment variables based on the incoming request headers,
- * or some selected other attributes of the request (e.g., the remote host
- * name).
- *
- * Usage:
- *
- *   SetEnvIf name regex var ...
- *
- * where name is either a HTTP request header name, or one of the
- * special values (see below). 'name' may be a regex when it is used
- * to specify an HTTP request header name. The 'value' of the header 
- & (or the value of the special value from below) are compared against
- * the regex argument. If this is a simple string, a simple sub-string
- * match is performed. Otherwise, a request expression match is
- * done. If the value matches the string or regular expression, the
- * environment variables listed as var ... are set. Each var can 
- * be in one of three formats: var, which sets the named variable
- * (the value value "1"); var=value, which sets the variable to
- * the given value; or !var, which unsets the variable is it has
- * been previously set.
- *
- * Normally the strings are compared with regard to case. To ignore
- * case, use the directive SetEnvIfNoCase instead.
- *
- * Special values for 'name' are:
- *
- *   remote_host        Remote host name (if available)
- *   remote_addr        Remote IP address
- *   remote_user        Remote authenticated user (if any)
- *   request_method     Request method (GET, POST, etc)
- *   request_uri        Requested URI
- *
- * Examples:
- *
- * To set the enviroment variable LOCALHOST if the client is the local
- * machine:
- *
- *    SetEnvIf remote_addr 127.0.0.1 LOCALHOST
- *
- * To set LOCAL if the client is the local host, or within our company's
- * domain (192.168.10):
- *
- *    SetEnvIf remote_addr 192.168.10. LOCAL
- *    SetEnvIf remote_addr 127.0.0.1   LOCALHOST
- *
- * This could be written as:
- *
- *    SetEnvIf remote_addr (127.0.0.1|192.168.10.) LOCAL
- *
- * To set HAVE_TS if the client request contains any header beginning
- * with "TS" with a value beginning with a lower case alphabet:
- *
- *    SetEnvIf ^TS* ^[a-z].* HAVE_TS
- */
-
-#include "apr.h"
-#include "apr_strings.h"
-
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-#include "ap_config.h"
-#include "httpd.h"
-#include "http_config.h"
-#include "http_core.h"
-#include "http_log.h"
-#include "http_protocol.h"
-
-
-enum special {
-    SPECIAL_NOT,
-    SPECIAL_REMOTE_ADDR,
-    SPECIAL_REMOTE_HOST,
-    SPECIAL_REMOTE_USER,
-    SPECIAL_REQUEST_URI,
-    SPECIAL_REQUEST_METHOD,
-    SPECIAL_REQUEST_PROTOCOL
-};
-typedef struct {
-    char *name;                 /* header name */
-    regex_t *pnamereg;          /* compiled header name regex */
-    char *regex;                /* regex to match against */
-    regex_t *preg;              /* compiled regex */
-    apr_table_t *features;      /* env vars to set (or unset) */
-    enum special special_type;  /* is it a "special" header ? */
-    int icase;                  /* ignoring case? */
-} sei_entry;
-
-typedef struct {
-    apr_array_header_t *conditionals;
-} sei_cfg_rec;
-
-module AP_MODULE_DECLARE_DATA setenvif_module;
-
-/*
- * These routines, the create- and merge-config functions, are called
- * for both the server-wide and the per-directory contexts.  This is
- * because the different definitions are used at different times; the
- * server-wide ones are used in the post-read-request phase, and the
- * per-directory ones are used during the header-parse phase (after
- * the URI has been mapped to a file and we have anything from the
- * .htaccess file and <Directory> and <Files> containers).
- */
-static void *create_setenvif_config(apr_pool_t *p)
-{
-    sei_cfg_rec *new = (sei_cfg_rec *) apr_palloc(p, sizeof(sei_cfg_rec));
-
-    new->conditionals = apr_array_make(p, 20, sizeof(sei_entry));
-    return (void *) new;
-}
-
-static void *create_setenvif_config_svr(apr_pool_t *p, server_rec *dummy)
-{
-    return create_setenvif_config(p);
-}
-
-static void *create_setenvif_config_dir(apr_pool_t *p, char *dummy)
-{
-    return create_setenvif_config(p);
-}
-
-static void *merge_setenvif_config(apr_pool_t *p, void *basev, void *overridesv)
-{
-    sei_cfg_rec *a = apr_pcalloc(p, sizeof(sei_cfg_rec));
-    sei_cfg_rec *base = basev, *overrides = overridesv;
-
-    a->conditionals = apr_array_append(p, base->conditionals,
-				       overrides->conditionals);
-    return a;
-}
-
-/*
- * any non-NULL magic constant will do... used to indicate if REG_ICASE should
- * be used
- */
-#define ICASE_MAGIC	((void *)(&setenvif_module))
-#define SEI_MAGIC_HEIRLOOM "setenvif-phase-flag"
-
-static int is_header_regex(apr_pool_t *p, const char* name) 
-{
-    /* If a Header name contains characters other than:
-     *    -,_,[A-Z\, [a-z] and [0-9].
-     * assume the header name is a regular expression.
-     */
-    regex_t *preg = ap_pregcomp(p, "^[-A-Za-z0-9_]*$",
-                                (REG_EXTENDED | REG_NOSUB ));
-    if (preg) {
-        if (ap_regexec(preg, name, 0, NULL, 0)) {
-            return 1;
-        }
-    }
-    return 0;
-}
-static const char *add_setenvif_core(cmd_parms *cmd, void *mconfig,
-				     char *fname, const char *args)
-{
-    char *regex;
-    const char *feature;
-    sei_cfg_rec *sconf;
-    sei_entry *new;
-    sei_entry *entries;
-    char *var;
-    int i;
-    int beenhere = 0;
-    int icase;
-
-    /*
-     * Determine from our context into which record to put the entry.
-     * cmd->path == NULL means we're in server-wide context; otherwise,
-     * we're dealing with a per-directory setting.
-     */
-    sconf = (cmd->path != NULL)
-	? (sei_cfg_rec *) mconfig
-	: (sei_cfg_rec *) ap_get_module_config(cmd->server->module_config,
-					       &setenvif_module);
-    entries = (sei_entry *) sconf->conditionals->elts;
-    /* get regex */
-    regex = ap_getword_conf(cmd->pool, &args);
-    if (!*regex) {
-        return apr_pstrcat(cmd->pool, "Missing regular expression for ",
-			  cmd->cmd->name, NULL);
-    }
-
-    /*
-     * If we've already got a sei_entry with the same name we want to
-     * just copy the name pointer... so that later on we can compare
-     * two header names just by comparing the pointers.
-     */
-
-    for (i = 0; i < sconf->conditionals->nelts; ++i) {
-        new = &entries[i];
-	if (!strcasecmp(new->name, fname)) {
-	    fname = new->name;
-	    break;
-	}
-    }
-
-    /* if the last entry has an identical headername and regex then
-     * merge with it
-     */
-    i = sconf->conditionals->nelts - 1;
-    icase = cmd->info == ICASE_MAGIC;
-    if (i < 0
-	|| entries[i].name != fname
-	|| entries[i].icase != icase
-	|| strcmp(entries[i].regex, regex)) {
-
-	/* no match, create a new entry */
-
-	new = apr_array_push(sconf->conditionals);
-	new->name = fname;
-	new->regex = regex;
-	new->icase = icase;
-	new->preg = ap_pregcomp(cmd->pool, regex,
-				(REG_EXTENDED | REG_NOSUB
-				 | (icase ? REG_ICASE : 0)));
-	if (new->preg == NULL) {
-	    return apr_pstrcat(cmd->pool, cmd->cmd->name,
-			      " regex could not be compiled.", NULL);
-	}
-	new->features = apr_table_make(cmd->pool, 2);
-
-	if (!strcasecmp(fname, "remote_addr")) {
-	    new->special_type = SPECIAL_REMOTE_ADDR;
-	}
-	else if (!strcasecmp(fname, "remote_host")) {
-	    new->special_type = SPECIAL_REMOTE_HOST;
-	}
-	else if (!strcasecmp(fname, "remote_user")) {
-	    new->special_type = SPECIAL_REMOTE_USER;
-	}
-	else if (!strcasecmp(fname, "request_uri")) {
-	    new->special_type = SPECIAL_REQUEST_URI;
-	}
-	else if (!strcasecmp(fname, "request_method")) {
-	    new->special_type = SPECIAL_REQUEST_METHOD;
-	}
-	else if (!strcasecmp(fname, "request_protocol")) {
-	    new->special_type = SPECIAL_REQUEST_PROTOCOL;
-	}
-	else {
-	    new->special_type = SPECIAL_NOT;
-            /* Handle fname as a regular expression.
-             * If fname a simple header string, identify as such (new->pnamereg = NULL)
-             * to avoid the overhead of searching through headers_in for a regex match.
-             */
-            if (is_header_regex(cmd->pool, fname)) {
-                new->pnamereg = ap_pregcomp(cmd->pool, fname,
-                                            (REG_EXTENDED | REG_NOSUB
-                                             | (icase ? REG_ICASE : 0)));
-                if (new->pnamereg == NULL)
-                    return apr_pstrcat(cmd->pool, cmd->cmd->name,
-                                       "Header name regex could not be compiled.", NULL);
-            }
-            else {
-                new->pnamereg = NULL;
-            }
-	}
-    }
-    else {
-	new = &entries[i];
-    }
-
-    for ( ; ; ) {
-	feature = ap_getword_conf(cmd->pool, &args);
-	if (!*feature) {
-	    break;
-	}
-        beenhere++;
-
-        var = ap_getword(cmd->pool, &feature, '=');
-        if (*feature) {
-            apr_table_setn(new->features, var, feature);
-        }
-        else if (*var == '!') {
-            apr_table_setn(new->features, var + 1, "!");
-        }
-        else {
-            apr_table_setn(new->features, var, "1");
-        }
-    }
-
-    if (!beenhere) {
-        return apr_pstrcat(cmd->pool, "Missing envariable expression for ",
-			  cmd->cmd->name, NULL);
-    }
-
-    return NULL;
-}
-
-static const char *add_setenvif(cmd_parms *cmd, void *mconfig,
-				const char *args)
-{
-    char *fname;
-
-    /* get header name */
-    fname = ap_getword_conf(cmd->pool, &args);
-    if (!*fname) {
-        return apr_pstrcat(cmd->pool, "Missing header-field name for ",
-			  cmd->cmd->name, NULL);
-    }
-    return add_setenvif_core(cmd, mconfig, fname, args);
-}
-
-/*
- * This routine handles the BrowserMatch* directives.  It simply turns around
- * and feeds them, with the appropriate embellishments, to the general-purpose
- * command handler.
- */
-static const char *add_browser(cmd_parms *cmd, void *mconfig, const char *args)
-{
-    return add_setenvif_core(cmd, mconfig, "User-Agent", args);
-}
-
-static const command_rec setenvif_module_cmds[] =
-{
-    AP_INIT_RAW_ARGS("SetEnvIf", add_setenvif, NULL,
-                     OR_FILEINFO, "A header-name, regex and a list of variables."),
-    AP_INIT_RAW_ARGS("SetEnvIfNoCase", add_setenvif, ICASE_MAGIC,
-                     OR_FILEINFO, "a header-name, regex and a list of variables."),
-    AP_INIT_RAW_ARGS("BrowserMatch", add_browser, NULL,
-                     OR_FILEINFO, "A browser regex and a list of variables."),
-    AP_INIT_RAW_ARGS("BrowserMatchNoCase", add_browser, ICASE_MAGIC,
-                     OR_FILEINFO, "A browser regex and a list of variables."),
-    { NULL },
-};
-
-/*
- * This routine gets called at two different points in request processing:
- * once before the URI has been translated (during the post-read-request
- * phase) and once after (during the header-parse phase).  We use different
- * config records for the two different calls to reduce overhead (by not
- * re-doing the server-wide settings during directory processing), and
- * signal which call it is by having the earlier one pass a flag to the
- * later one.
- */
-static int match_headers(request_rec *r)
-{
-    sei_cfg_rec *sconf;
-    sei_entry *entries;
-    const apr_table_entry_t *elts;
-    const char *val;
-    int i, j;
-    char *last_name;
-
-    if (!ap_get_module_config(r->request_config, &setenvif_module)) {
-        ap_set_module_config(r->request_config, &setenvif_module,
-                             SEI_MAGIC_HEIRLOOM);
-	sconf  = (sei_cfg_rec *) ap_get_module_config(r->server->module_config,
-						      &setenvif_module);
-    }
-    else {
-	sconf = (sei_cfg_rec *) ap_get_module_config(r->per_dir_config,
-						     &setenvif_module);
-    }
-    entries = (sei_entry *) sconf->conditionals->elts;
-    last_name = NULL;
-    val = NULL;
-    for (i = 0; i < sconf->conditionals->nelts; ++i) {
-        sei_entry *b = &entries[i];
-
-	/* Optimize the case where a bunch of directives in a row use the
-	 * same header.  Remember we don't need to strcmp the two header
-	 * names because we made sure the pointers were equal during
-	 * configuration.
-	 */
-	if (b->name != last_name) {
-	    last_name = b->name;
-	    switch (b->special_type) {
-	    case SPECIAL_REMOTE_ADDR:
-		val = r->connection->remote_ip;
-		break;
-	    case SPECIAL_REMOTE_HOST:
-		val =  ap_get_remote_host(r->connection, r->per_dir_config,
-					  REMOTE_NAME, NULL);
-		break;
-	    case SPECIAL_REMOTE_USER:
-		val = r->user;
-		break;
-	    case SPECIAL_REQUEST_URI:
-		val = r->uri;
-		break;
-	    case SPECIAL_REQUEST_METHOD:
-		val = r->method;
-		break;
-	    case SPECIAL_REQUEST_PROTOCOL:
-		val = r->protocol;
-		break;
-	    case SPECIAL_NOT:
-                if (b->pnamereg) {
-                    /* Matching headers_in against a regex. Iterate through
-                     * the headers_in until we find a match or run out of
-                     * headers.
-                     */
-                    const apr_array_header_t *arr = apr_table_elts(r->headers_in);
-                    elts = (const apr_table_entry_t *) arr->elts;
-                    val = NULL;
-                    for (j = 0; j < arr->nelts; ++j) {
-                        if (!ap_regexec(b->pnamereg, elts[j].key, 0, NULL, 0)) { 
-                            val = elts[j].val;
-                        }
-                    }
-                }
-                else {
-                    /* Not matching against a regex */
-                    val = apr_table_get(r->headers_in, b->name);
-                    if (val == NULL) {
-                        val = apr_table_get(r->subprocess_env, b->name);
-                    }
-                }
-	    }
-        }
-
-	/*
-	 * A NULL value indicates that the header field or special entity
-	 * wasn't present or is undefined.  Represent that as an empty string
-	 * so that REs like "^$" will work and allow envariable setting
-	 * based on missing or empty field.
-	 */
-        if (val == NULL) {
-            val = "";
-        }
-
-        if (!ap_regexec(b->preg, val, 0, NULL, 0)) {
-	    const apr_array_header_t *arr = apr_table_elts(b->features);
-            elts = (const apr_table_entry_t *) arr->elts;
-
-            for (j = 0; j < arr->nelts; ++j) {
-                if (*(elts[j].val) == '!') {
-                    apr_table_unset(r->subprocess_env, elts[j].key);
-                }
-                else {
-                    apr_table_setn(r->subprocess_env, elts[j].key, elts[j].val);
-                }
-            }
-        }
-    }
-
-    return DECLINED;
-}
-
-static void register_hooks(apr_pool_t *p)
-{
-    ap_hook_header_parser(match_headers, NULL, NULL, APR_HOOK_MIDDLE);
-    ap_hook_post_read_request(match_headers, NULL, NULL, APR_HOOK_MIDDLE);
-}
-
-module AP_MODULE_DECLARE_DATA setenvif_module =
-{
-    STANDARD20_MODULE_STUFF,
-    create_setenvif_config_dir, /* dir config creater */
-    merge_setenvif_config,      /* dir merger --- default is to override */
-    create_setenvif_config_svr, /* server config */
-    merge_setenvif_config,      /* merge server configs */
-    setenvif_module_cmds,       /* command apr_table_t */
-    register_hooks		/* register hooks */
-};
diff --git a/modules/metadata/mod_setenvif.dsp b/modules/metadata/mod_setenvif.dsp
deleted file mode 100644
index 8779ec8..0000000
--- a/modules/metadata/mod_setenvif.dsp
+++ /dev/null
@@ -1,128 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mod_setenvif" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mod_setenvif - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "mod_setenvif.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "mod_setenvif.mak" CFG="mod_setenvif - Win32 Release"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "mod_setenvif - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mod_setenvif - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "mod_setenvif - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /O2 /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Release\mod_setenvif" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /map /machine:I386 /out:"Release/mod_setenvif.so" /base:@..\..\os\win32\BaseAddr.ref,mod_setenvif
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /map /machine:I386 /out:"Release/mod_setenvif.so" /base:@..\..\os\win32\BaseAddr.ref,mod_setenvif
-
-!ELSEIF  "$(CFG)" == "mod_setenvif - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Debug\mod_setenvif" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /map /debug /machine:I386 /out:"Debug/mod_setenvif.so" /base:@..\..\os\win32\BaseAddr.ref,mod_setenvif
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /map /debug /machine:I386 /out:"Debug/mod_setenvif.so" /base:@..\..\os\win32\BaseAddr.ref,mod_setenvif
-
-!ENDIF 
-
-# Begin Target
-
-# Name "mod_setenvif - Win32 Release"
-# Name "mod_setenvif - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\mod_setenvif.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mod_setenvif.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\build\win32\win32ver.awk
-
-!IF  "$(CFG)" == "mod_setenvif - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_setenvif.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ../../build/win32/win32ver.awk mod_setenvif  "setenvif_module for Apache" ../../include/ap_release.h  > .\mod_setenvif.rc
-
-# End Custom Build
-
-!ELSEIF  "$(CFG)" == "mod_setenvif - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_setenvif.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ../../build/win32/win32ver.awk mod_setenvif  "setenvif_module for Apache" ../../include/ap_release.h  > .\mod_setenvif.rc
-
-# End Custom Build
-
-!ENDIF 
-
-# End Source File
-# End Target
-# End Project
diff --git a/modules/metadata/mod_setenvif.exp b/modules/metadata/mod_setenvif.exp
deleted file mode 100644
index 4f3800e..0000000
--- a/modules/metadata/mod_setenvif.exp
+++ /dev/null
@@ -1 +0,0 @@
-setenvif_module
diff --git a/modules/metadata/mod_unique_id.c b/modules/metadata/mod_unique_id.c
deleted file mode 100644
index a6e2e48..0000000
--- a/modules/metadata/mod_unique_id.c
+++ /dev/null
@@ -1,402 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-/*
- * mod_unique_id.c: generate a unique identifier for each request
- *
- * Original author: Dean Gaudet <dgaudet@arctic.org>
- * UUencoding modified by: Alvaro Martinez Echevarria <alvaro@lander.es>
- */
-
-#define APR_WANT_BYTEFUNC   /* for htons() et al */
-#include "apr_want.h"
-#include "apr_general.h"    /* for APR_XtOffsetOf                */
-#include "apr_network_io.h"
-
-#include "httpd.h"
-#include "http_config.h"
-#include "http_log.h"
-#include "http_protocol.h"  /* for ap_hook_post_read_request */
-
-#if APR_HAVE_UNISTD_H
-#include <unistd.h>         /* for getpid() */
-#endif
-
-typedef struct {
-    unsigned int stamp;
-    unsigned int in_addr;
-    unsigned int pid;
-    unsigned short counter;
-    unsigned int thread_index;
-} unique_id_rec;
-
-/* We are using thread_index (the index into the scoreboard), because we
- * cannot guarantee the thread_id will be an integer.
- *
- * This code looks like it won't give a unique ID with the new thread logic.
- * It will.  The reason is, we don't increment the counter in a thread_safe 
- * manner.  Because the thread_index is also in the unique ID now, this does
- * not matter.  In order for the id to not be unique, the same thread would
- * have to get the same counter twice in the same second. 
- */
-
-/* Comments:
- *
- * We want an identifier which is unique across all hits, everywhere.
- * "everywhere" includes multiple httpd instances on the same machine, or on
- * multiple machines.  Essentially "everywhere" should include all possible
- * httpds across all servers at a particular "site".  We make some assumptions
- * that if the site has a cluster of machines then their time is relatively
- * synchronized.  We also assume that the first address returned by a
- * gethostbyname (gethostname()) is unique across all the machines at the
- * "site".
- *
- * We also further assume that pids fit in 32-bits.  If something uses more
- * than 32-bits, the fix is trivial, but it requires the unrolled uuencoding
- * loop to be extended.  * A similar fix is needed to support multithreaded
- * servers, using a pid/tid combo.
- *
- * Together, the in_addr and pid are assumed to absolutely uniquely identify
- * this one child from all other currently running children on all servers
- * (including this physical server if it is running multiple httpds) from each
- * other.
- *
- * The stamp and counter are used to distinguish all hits for a particular
- * (in_addr,pid) pair.  The stamp is updated using r->request_time,
- * saving cpu cycles.  The counter is never reset, and is used to permit up to
- * 64k requests in a single second by a single child.
- *
- * The 112-bits of unique_id_rec are encoded using the alphabet
- * [A-Za-z0-9@-], resulting in 19 bytes of printable characters.  That is then
- * stuffed into the environment variable UNIQUE_ID so that it is available to
- * other modules.  The alphabet choice differs from normal base64 encoding
- * [A-Za-z0-9+/] because + and / are special characters in URLs and we want to
- * make it easy to use UNIQUE_ID in URLs.
- *
- * Note that UNIQUE_ID should be considered an opaque token by other
- * applications.  No attempt should be made to dissect its internal components.
- * It is an abstraction that may change in the future as the needs of this
- * module change.
- *
- * It is highly desirable that identifiers exist for "eternity".  But future
- * needs (such as much faster webservers, moving to 64-bit pids, or moving to a
- * multithreaded server) may dictate a need to change the contents of
- * unique_id_rec.  Such a future implementation should ensure that the first
- * field is still a time_t stamp.  By doing that, it is possible for a site to
- * have a "flag second" in which they stop all of their old-format servers,
- * wait one entire second, and then start all of their new-servers.  This
- * procedure will ensure that the new space of identifiers is completely unique
- * from the old space.  (Since the first four unencoded bytes always differ.)
- */
-/*
- * Sun Jun  7 05:43:49 CEST 1998 -- Alvaro
- * More comments:
- * 1) The UUencoding prodecure is now done in a general way, avoiding the problems
- * with sizes and paddings that can arise depending on the architecture. Now the
- * offsets and sizes of the elements of the unique_id_rec structure are calculated
- * in unique_id_global_init; and then used to duplicate the structure without the
- * paddings that might exist. The multithreaded server fix should be now very easy:
- * just add a new "tid" field to the unique_id_rec structure, and increase by one
- * UNIQUE_ID_REC_MAX.
- * 2) unique_id_rec.stamp has been changed from "time_t" to "unsigned int", because
- * its size is 64bits on some platforms (linux/alpha), and this caused problems with
- * htonl/ntohl. Well, this shouldn't be a problem till year 2106.
- */
-
-static unsigned global_in_addr;
-
-static unique_id_rec cur_unique_id;
-
-/*
- * Number of elements in the structure unique_id_rec.
- */
-#define UNIQUE_ID_REC_MAX 5 
-
-static unsigned short unique_id_rec_offset[UNIQUE_ID_REC_MAX],
-                      unique_id_rec_size[UNIQUE_ID_REC_MAX],
-                      unique_id_rec_total_size,
-                      unique_id_rec_size_uu;
-
-static int unique_id_global_init(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *main_server)
-{
-    char str[APRMAXHOSTLEN + 1];
-    apr_short_interval_time_t pause;
-    apr_status_t rv;
-    char *ipaddrstr;
-    apr_sockaddr_t *sockaddr;
-
-    /*
-     * Calculate the sizes and offsets in cur_unique_id.
-     */
-    unique_id_rec_offset[0] = APR_XtOffsetOf(unique_id_rec, stamp);
-    unique_id_rec_size[0] = sizeof(cur_unique_id.stamp);
-    unique_id_rec_offset[1] = APR_XtOffsetOf(unique_id_rec, in_addr);
-    unique_id_rec_size[1] = sizeof(cur_unique_id.in_addr);
-    unique_id_rec_offset[2] = APR_XtOffsetOf(unique_id_rec, pid);
-    unique_id_rec_size[2] = sizeof(cur_unique_id.pid);
-    unique_id_rec_offset[3] = APR_XtOffsetOf(unique_id_rec, counter);
-    unique_id_rec_size[3] = sizeof(cur_unique_id.counter);
-    unique_id_rec_offset[4] = APR_XtOffsetOf(unique_id_rec, thread_index);
-    unique_id_rec_size[4] = sizeof(cur_unique_id.thread_index);
-    unique_id_rec_total_size = unique_id_rec_size[0] + unique_id_rec_size[1] +
-                               unique_id_rec_size[2] + unique_id_rec_size[3] +
-                               unique_id_rec_size[4];
-
-    /*
-     * Calculate the size of the structure when encoded.
-     */
-    unique_id_rec_size_uu = (unique_id_rec_total_size*8+5)/6;
-
-    /*
-     * Now get the global in_addr.  Note that it is not sufficient to use one
-     * of the addresses from the main_server, since those aren't as likely to
-     * be unique as the physical address of the machine
-     */
-    if ((rv = apr_gethostname(str, sizeof(str) - 1, p)) != APR_SUCCESS) {
-        ap_log_error(APLOG_MARK, APLOG_ALERT, rv, main_server,
-          "mod_unique_id: unable to find hostname of the server");
-        return HTTP_INTERNAL_SERVER_ERROR;
-    }
-
-    /* XXX theoretically there are boxes out there which want to use
-     *     mod_unique_id but which have no IPv4 address...  send in a patch :)
-     */
-    if ((rv = apr_sockaddr_info_get(&sockaddr, str, AF_INET, 0, 0, p)) != APR_SUCCESS) {
-        ap_log_error(APLOG_MARK, APLOG_ALERT, rv, main_server,
-                    "mod_unique_id: unable to find IPv4 address of \"%s\"", str);
-        return HTTP_INTERNAL_SERVER_ERROR;
-    }
-
-    global_in_addr = sockaddr->sa.sin.sin_addr.s_addr;
-
-    apr_sockaddr_ip_get(&ipaddrstr, sockaddr);
-    ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_INFO, 0, main_server,
-                "mod_unique_id: using ip addr %s",
-                 ipaddrstr);
-
-    /*
-     * If the server is pummelled with restart requests we could possibly end
-     * up in a situation where we're starting again during the same second
-     * that has been used in previous identifiers.  Avoid that situation.
-     * 
-     * In truth, for this to actually happen not only would it have to restart
-     * in the same second, but it would have to somehow get the same pids as
-     * one of the other servers that was running in that second. Which would
-     * mean a 64k wraparound on pids ... not very likely at all.
-     * 
-     * But protecting against it is relatively cheap.  We just sleep into the
-     * next second.
-     */
-    pause = (apr_short_interval_time_t)(1000000 - (apr_time_now() % APR_USEC_PER_SEC));
-    apr_sleep(pause);
-    return OK;
-}
-
-static void unique_id_child_init(apr_pool_t *p, server_rec *s)
-{
-    pid_t pid;
-    apr_time_t tv;
-
-    /*
-     * Note that we use the pid because it's possible that on the same
-     * physical machine there are multiple servers (i.e. using Listen). But
-     * it's guaranteed that none of them will share the same pids between
-     * children.
-     * 
-     * XXX: for multithread this needs to use a pid/tid combo and probably
-     * needs to be expanded to 32 bits
-     */
-    pid = getpid();
-    cur_unique_id.pid = pid;
-
-    /*
-     * Test our assumption that the pid is 32-bits.  It's possible that
-     * 64-bit machines will declare pid_t to be 64 bits but only use 32
-     * of them.  It would have been really nice to test this during
-     * global_init ... but oh well.
-     */
-    if ((pid_t)cur_unique_id.pid != pid) {
-        ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_CRIT, 0, s,
-                    "oh no! pids are greater than 32-bits!  I'm broken!");
-    }
-
-    cur_unique_id.in_addr = global_in_addr;
-
-    /*
-     * If we use 0 as the initial counter we have a little less protection
-     * against restart problems, and a little less protection against a clock
-     * going backwards in time.
-     */
-    tv = apr_time_now();
-    /* Some systems have very low variance on the low end of their system
-     * counter, defend against that.
-     */
-    cur_unique_id.counter = (unsigned short)(tv % APR_USEC_PER_SEC / 10);
-
-    /*
-     * We must always use network ordering for these bytes, so that
-     * identifiers are comparable between machines of different byte
-     * orderings.  Note in_addr is already in network order.
-     */
-    cur_unique_id.pid = htonl(cur_unique_id.pid);
-    cur_unique_id.counter = htons(cur_unique_id.counter);
-}
-
-/* NOTE: This is *NOT* the same encoding used by base64encode ... the last two
- * characters should be + and /.  But those two characters have very special
- * meanings in URLs, and we want to make it easy to use identifiers in
- * URLs.  So we replace them with @ and -.
- */
-static const char uuencoder[64] = {
-    'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
-    'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
-    'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
-    'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
-    '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '@', '-',
-};
-
-static int gen_unique_id(request_rec *r)
-{
-    char *str;
-    /*
-     * Buffer padded with two final bytes, used to copy the unique_id_red
-     * structure without the internal paddings that it could have.
-     */
-    unique_id_rec new_unique_id;
-    struct {
-	unique_id_rec foo;
-	unsigned char pad[2];
-    } paddedbuf;
-    unsigned char *x,*y;
-    unsigned short counter;
-    const char *e;
-    int i,j,k;
-
-    /* copy the unique_id if this is an internal redirect (we're never
-     * actually called for sub requests, so we don't need to test for
-     * them) */
-    if (r->prev && (e = apr_table_get(r->subprocess_env, "REDIRECT_UNIQUE_ID"))) {
-	apr_table_setn(r->subprocess_env, "UNIQUE_ID", e);
-	return DECLINED;
-    }
-    
-    new_unique_id.in_addr = cur_unique_id.in_addr;
-    new_unique_id.pid = cur_unique_id.pid;
-    new_unique_id.counter = cur_unique_id.counter;
-
-    new_unique_id.stamp = htonl((unsigned int)r->request_time);
-    new_unique_id.thread_index = htonl((unsigned int)r->connection->id);
-
-    /* we'll use a temporal buffer to avoid uuencoding the possible internal
-     * paddings of the original structure */
-    x = (unsigned char *) &paddedbuf;
-    y = (unsigned char *) &new_unique_id;
-    k = 0;
-    for (i = 0; i < UNIQUE_ID_REC_MAX; i++) {
-        y = ((unsigned char *) &new_unique_id) + unique_id_rec_offset[i];
-        for (j = 0; j < unique_id_rec_size[i]; j++, k++) {
-            x[k] = y[j];
-        }
-    }
-    /*
-     * We reset two more bytes just in case padding is needed for the uuencoding.
-     */
-    x[k++] = '\0';
-    x[k++] = '\0';
-    
-    /* alloc str and do the uuencoding */
-    str = (char *)apr_palloc(r->pool, unique_id_rec_size_uu + 1);
-    k = 0;
-    for (i = 0; i < unique_id_rec_total_size; i += 3) {
-        y = x + i;
-        str[k++] = uuencoder[y[0] >> 2];
-        str[k++] = uuencoder[((y[0] & 0x03) << 4) | ((y[1] & 0xf0) >> 4)];
-        if (k == unique_id_rec_size_uu) break;
-        str[k++] = uuencoder[((y[1] & 0x0f) << 2) | ((y[2] & 0xc0) >> 6)];
-        if (k == unique_id_rec_size_uu) break;
-        str[k++] = uuencoder[y[2] & 0x3f];
-    }
-    str[k++] = '\0';
-
-    /* set the environment variable */
-    apr_table_setn(r->subprocess_env, "UNIQUE_ID", str);
-
-    /* and increment the identifier for the next call */
-
-    counter = ntohs(new_unique_id.counter) + 1;
-    cur_unique_id.counter = htons(counter);
-
-    return DECLINED;
-}
-
-static void register_hooks(apr_pool_t *p)
-{
-    ap_hook_post_config(unique_id_global_init, NULL, NULL, APR_HOOK_MIDDLE);
-    ap_hook_child_init(unique_id_child_init, NULL, NULL, APR_HOOK_MIDDLE);
-    ap_hook_post_read_request(gen_unique_id, NULL, NULL, APR_HOOK_MIDDLE); 
-}
-
-module AP_MODULE_DECLARE_DATA unique_id_module = {
-    STANDARD20_MODULE_STUFF,
-    NULL,                       /* dir config creater */
-    NULL,                       /* dir merger --- default is to override */
-    NULL,                       /* server config */
-    NULL,                       /* merge server configs */
-    NULL,                       /* command apr_table_t */
-    register_hooks              /* register hooks */
-};
diff --git a/modules/metadata/mod_unique_id.dsp b/modules/metadata/mod_unique_id.dsp
deleted file mode 100644
index f9167bf..0000000
--- a/modules/metadata/mod_unique_id.dsp
+++ /dev/null
@@ -1,128 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mod_unique_id" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mod_unique_id - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "mod_unique_id.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "mod_unique_id.mak" CFG="mod_unique_id - Win32 Release"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "mod_unique_id - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mod_unique_id - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "mod_unique_id - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /O2 /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Release\mod_unique_id" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib ws2_32.lib /nologo /subsystem:windows /dll /map /machine:I386 /out:"Release/mod_unique_id.so" /base:@..\..\os\win32\BaseAddr.ref,mod_unique_id
-# ADD LINK32 kernel32.lib ws2_32.lib /nologo /subsystem:windows /dll /map /machine:I386 /out:"Release/mod_unique_id.so" /base:@..\..\os\win32\BaseAddr.ref,mod_unique_id
-
-!ELSEIF  "$(CFG)" == "mod_unique_id - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Debug\mod_unique_id" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib ws2_32.lib /nologo /subsystem:windows /dll /incremental:no /map /debug /machine:I386 /out:"Debug/mod_unique_id.so" /base:@..\..\os\win32\BaseAddr.ref,mod_unique_id
-# ADD LINK32 kernel32.lib ws2_32.lib /nologo /subsystem:windows /dll /incremental:no /map /debug /machine:I386 /out:"Debug/mod_unique_id.so" /base:@..\..\os\win32\BaseAddr.ref,mod_unique_id
-
-!ENDIF 
-
-# Begin Target
-
-# Name "mod_unique_id - Win32 Release"
-# Name "mod_unique_id - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\mod_unique_id.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mod_unique_id.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\build\win32\win32ver.awk
-
-!IF  "$(CFG)" == "mod_unique_id - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_unique_id.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ../../build/win32/win32ver.awk mod_unique_id  "unique_id_module for Apache" ../../include/ap_release.h  > .\mod_unique_id.rc
-
-# End Custom Build
-
-!ELSEIF  "$(CFG)" == "mod_unique_id - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_unique_id.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ../../build/win32/win32ver.awk mod_unique_id  "unique_id_module for Apache" ../../include/ap_release.h  > .\mod_unique_id.rc
-
-# End Custom Build
-
-!ENDIF 
-
-# End Source File
-# End Target
-# End Project
diff --git a/modules/metadata/mod_unique_id.exp b/modules/metadata/mod_unique_id.exp
deleted file mode 100644
index 93000f1..0000000
--- a/modules/metadata/mod_unique_id.exp
+++ /dev/null
@@ -1 +0,0 @@
-unique_id_module
diff --git a/modules/metadata/mod_usertrack.c b/modules/metadata/mod_usertrack.c
deleted file mode 100644
index 2d83ff3..0000000
--- a/modules/metadata/mod_usertrack.c
+++ /dev/null
@@ -1,419 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-/* User Tracking Module (Was mod_cookies.c)
- *
- * *** IMPORTANT NOTE: This module is not designed to generate
- * *** cryptographically secure cookies.  This means you should not
- * *** use cookies generated by this module for authentication purposes
- *
- * This Apache module is designed to track users paths through a site.
- * It uses the client-side state ("Cookie") protocol developed by Netscape.
- * It is known to work on most browsers.
- *
- * Each time a page is requested we look to see if the browser is sending
- * us a Cookie: header that we previously generated.
- *
- * If we don't find one then the user hasn't been to this site since
- * starting their browser or their browser doesn't support cookies.  So
- * we generate a unique Cookie for the transaction and send it back to
- * the browser (via a "Set-Cookie" header)
- * Future requests from the same browser should keep the same Cookie line.
- *
- * By matching up all the requests with the same cookie you can
- * work out exactly what path a user took through your site.  To log
- * the cookie use the " %{Cookie}n " directive in a custom access log;
- *
- * Example 1 : If you currently use the standard Log file format (CLF)
- * and use the command "TransferLog somefilename", add the line
- *       LogFormat "%h %l %u %t \"%r\" %s %b %{Cookie}n"
- * to your config file.
- *
- * Example 2 : If you used to use the old "CookieLog" directive, you
- * can emulate it by adding the following command to your config file
- *       CustomLog filename "%{Cookie}n \"%r\" %t"
- *
- * Mark Cox, mjc@apache.org, 6 July 95
- *
- * This file replaces mod_cookies.c
- */
-
-#include "apr.h"
-#include "apr_lib.h"
-#include "apr_strings.h"
-
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-#include "httpd.h"
-#include "http_config.h"
-#include "http_core.h"
-#include "http_request.h"
-
-
-module AP_MODULE_DECLARE_DATA usertrack_module;
-
-typedef struct {
-    int always;
-    int expires;
-} cookie_log_state;
-
-typedef enum {
-    CT_UNSET,
-    CT_NETSCAPE,
-    CT_COOKIE,
-    CT_COOKIE2
-} cookie_type_e;
-
-typedef struct {
-    int enabled;
-    cookie_type_e style;
-    char *cookie_name;
-    char *cookie_domain;
-} cookie_dir_rec;
-
-/* Make Cookie: Now we have to generate something that is going to be
- * pretty unique.  We can base it on the pid, time, hostip */
-
-#define COOKIE_NAME "Apache"
-
-static void make_cookie(request_rec *r)
-{
-    cookie_log_state *cls = ap_get_module_config(r->server->module_config,
-						 &usertrack_module);
-    /* 1024 == hardcoded constant */
-    char cookiebuf[1024];
-    char *new_cookie;
-    const char *rname = ap_get_remote_host(r->connection, r->per_dir_config,
-					   REMOTE_NAME, NULL);
-    cookie_dir_rec *dcfg;
-
-    dcfg = ap_get_module_config(r->per_dir_config, &usertrack_module);
-
-    /* XXX: hmm, this should really tie in with mod_unique_id */
-    apr_snprintf(cookiebuf, sizeof(cookiebuf), "%s.%qd", rname, apr_time_now());
-
-    if (cls->expires) {
-
-        /* Cookie with date; as strftime '%a, %d-%h-%y %H:%M:%S GMT' */
-        new_cookie = apr_psprintf(r->pool, "%s=%s; path=/",
-                                  dcfg->cookie_name, cookiebuf);
-
-        if ((dcfg->style == CT_UNSET) || (dcfg->style == CT_NETSCAPE)) {
-	    apr_time_exp_t tms;
-            apr_explode_gmt(&tms, r->request_time 
-                                + cls->expires * APR_USEC_PER_SEC);
-            new_cookie = apr_psprintf(r->pool,
-                                       "%s; expires=%s, "
-                                       "%.2d-%s-%.2d %.2d:%.2d:%.2d GMT",
-                                       new_cookie, apr_day_snames[tms.tm_wday],
-                                       tms.tm_mday,
-                                       apr_month_snames[tms.tm_mon],
-                                       tms.tm_year % 100,
-                                       tms.tm_hour, tms.tm_min, tms.tm_sec);
-        }
-        else {
-            new_cookie = apr_psprintf(r->pool, "%s; max-age=%d",
-                                      new_cookie, cls->expires);
-        }
-    }
-    else {
-        new_cookie = apr_psprintf(r->pool, "%s=%s; path=/",
-                                  dcfg->cookie_name, cookiebuf);
-    }
-    if (dcfg->cookie_domain != NULL) {
-        new_cookie = apr_pstrcat(r->pool, new_cookie, "; domain=",
-                                 dcfg->cookie_domain,
-                                 (dcfg->style == CT_COOKIE2
-                                  ? "; version=1"
-                                  : ""),
-                                 NULL);
-    }
-
-    apr_table_setn(r->headers_out,
-                   (dcfg->style == CT_COOKIE2 ? "Set-Cookie2" : "Set-Cookie"),
-                   new_cookie);
-    apr_table_setn(r->notes, "cookie", apr_pstrdup(r->pool, cookiebuf));   /* log first time */
-    return;
-}
-
-static int spot_cookie(request_rec *r)
-{
-    cookie_dir_rec *dcfg = ap_get_module_config(r->per_dir_config,
-						&usertrack_module);
-    const char *cookie;
-    const char *value;
-
-    if (!dcfg->enabled) {
-        return DECLINED;
-    }
-
-    if ((cookie = apr_table_get(r->headers_in,
-                                (dcfg->style == CT_COOKIE2
-                                 ? "Cookie2"
-                                 : "Cookie"))))
-        if ((value = ap_strstr_c(cookie, dcfg->cookie_name))) {
-            char *cookiebuf, *cookieend;
-
-            value += strlen(dcfg->cookie_name) + 1;  /* Skip over the '=' */
-            cookiebuf = apr_pstrdup(r->pool, value);
-            cookieend = strchr(cookiebuf, ';');
-            if (cookieend)
-                *cookieend = '\0';      /* Ignore anything after a ; */
-
-            /* Set the cookie in a note, for logging */
-            apr_table_setn(r->notes, "cookie", cookiebuf);
-
-            return DECLINED;    /* There's already a cookie, no new one */
-        }
-    make_cookie(r);
-    return OK;                  /* We set our cookie */
-}
-
-static void *make_cookie_log_state(apr_pool_t *p, server_rec *s)
-{
-    cookie_log_state *cls =
-    (cookie_log_state *) apr_palloc(p, sizeof(cookie_log_state));
-
-    cls->expires = 0;
-
-    return (void *) cls;
-}
-
-static void *make_cookie_dir(apr_pool_t *p, char *d)
-{
-    cookie_dir_rec *dcfg;
-
-    dcfg = (cookie_dir_rec *) apr_pcalloc(p, sizeof(cookie_dir_rec));
-    dcfg->cookie_name = COOKIE_NAME;
-    dcfg->cookie_domain = NULL;
-    dcfg->style = CT_UNSET;
-    dcfg->enabled = 0;
-    return dcfg;
-}
-
-static const char *set_cookie_enable(cmd_parms *cmd, void *mconfig, int arg)
-{
-    cookie_dir_rec *dcfg = mconfig;
-
-    dcfg->enabled = arg;
-    return NULL;
-}
-
-static const char *set_cookie_exp(cmd_parms *parms, void *dummy,
-                                  const char *arg)
-{
-    cookie_log_state *cls;
-    time_t factor, modifier = 0;
-    time_t num = 0;
-    char *word;
-
-    cls  = ap_get_module_config(parms->server->module_config,
-                                &usertrack_module);
-    /* The simple case first - all numbers (we assume) */
-    if (apr_isdigit(arg[0]) && apr_isdigit(arg[strlen(arg) - 1])) {
-        cls->expires = atol(arg);
-        return NULL;
-    }
-
-    /*
-     * The harder case - stolen from mod_expires 
-     *
-     * CookieExpires "[plus] {<num> <type>}*"
-     */
-
-    word = ap_getword_conf(parms->pool, &arg);
-    if (!strncasecmp(word, "plus", 1)) {
-        word = ap_getword_conf(parms->pool, &arg);
-    };
-
-    /* {<num> <type>}* */
-    while (word[0]) {
-        /* <num> */
-	if (apr_isdigit(word[0]))
-            num = atoi(word);
-        else
-            return "bad expires code, numeric value expected.";
-
-        /* <type> */
-        word = ap_getword_conf(parms->pool, &arg);
-        if (!word[0])
-            return "bad expires code, missing <type>";
-
-        factor = 0;
-        if (!strncasecmp(word, "years", 1))
-            factor = 60 * 60 * 24 * 365;
-        else if (!strncasecmp(word, "months", 2))
-            factor = 60 * 60 * 24 * 30;
-        else if (!strncasecmp(word, "weeks", 1))
-            factor = 60 * 60 * 24 * 7;
-        else if (!strncasecmp(word, "days", 1))
-            factor = 60 * 60 * 24;
-        else if (!strncasecmp(word, "hours", 1))
-            factor = 60 * 60;
-        else if (!strncasecmp(word, "minutes", 2))
-            factor = 60;
-        else if (!strncasecmp(word, "seconds", 1))
-            factor = 1;
-        else
-            return "bad expires code, unrecognized type";
-
-        modifier = modifier + factor * num;
-
-        /* next <num> */
-        word = ap_getword_conf(parms->pool, &arg);
-    }
-
-    cls->expires = modifier;
-
-    return NULL;
-}
-
-static const char *set_cookie_name(cmd_parms *cmd, void *mconfig,
-                                   const char *name)
-{
-    cookie_dir_rec *dcfg = (cookie_dir_rec *) mconfig;
-
-    dcfg->cookie_name = apr_pstrdup(cmd->pool, name);
-    return NULL;
-}
-
-/*
- * Set the value for the 'Domain=' attribute.
- */
-static const char *set_cookie_domain(cmd_parms *cmd, void *mconfig,
-                                     const char *name)
-{
-    cookie_dir_rec *dcfg;
-
-    dcfg = (cookie_dir_rec *) mconfig;
-
-    /*
-     * Apply the restrictions on cookie domain attributes.
-     */
-    if (strlen(name) == 0) {
-        return "CookieDomain values may not be null";
-    }
-    if (name[0] != '.') {
-        return "CookieDomain values must begin with a dot";
-    }
-    if (ap_strchr_c(&name[1], '.') == NULL) {
-        return "CookieDomain values must contain at least one embedded dot";
-    }
-
-    dcfg->cookie_domain = apr_pstrdup(cmd->pool, name);
-    return NULL;
-}
-
-/*
- * Make a note of the cookie style we should use.
- */
-static const char *set_cookie_style(cmd_parms *cmd, void *mconfig,
-                                    const char *name)
-{
-    cookie_dir_rec *dcfg;
-
-    dcfg = (cookie_dir_rec *) mconfig;
-
-    if (strcasecmp(name, "Netscape") == 0) {
-        dcfg->style = CT_NETSCAPE;
-    }
-    else if ((strcasecmp(name, "Cookie") == 0)
-             || (strcasecmp(name, "RFC2109") == 0)) {
-        dcfg->style = CT_COOKIE;
-    }
-    else if ((strcasecmp(name, "Cookie2") == 0)
-             || (strcasecmp(name, "RFC2965") == 0)) {
-        dcfg->style = CT_COOKIE2;
-    }
-    else {
-        return apr_psprintf(cmd->pool, "Invalid %s keyword: '%s'",
-                            cmd->cmd->name, name);
-    }
-
-    return NULL;
-}
-
-static const command_rec cookie_log_cmds[] = {
-    AP_INIT_TAKE1("CookieExpires", set_cookie_exp, NULL, OR_FILEINFO,
-                  "an expiry date code"),
-    AP_INIT_TAKE1("CookieDomain", set_cookie_domain, NULL, OR_FILEINFO,
-                  "domain to which this cookie applies"),
-    AP_INIT_TAKE1("CookieStyle", set_cookie_style, NULL, OR_FILEINFO,
-                  "'Netscape', 'Cookie' (RFC2109), or 'Cookie2' (RFC2965)"),
-    AP_INIT_FLAG("CookieTracking", set_cookie_enable, NULL, OR_FILEINFO,
-                 "whether or not to enable cookies"),
-    AP_INIT_TAKE1("CookieName", set_cookie_name, NULL, OR_FILEINFO,
-                  "name of the tracking cookie"),
-    {NULL}
-};
-
-static void register_hooks(apr_pool_t *p)
-{
-    ap_hook_fixups(spot_cookie,NULL,NULL,APR_HOOK_MIDDLE);
-}
-
-module AP_MODULE_DECLARE_DATA usertrack_module = {
-    STANDARD20_MODULE_STUFF,
-    make_cookie_dir,            /* dir config creater */
-    NULL,                       /* dir merger --- default is to override */
-    make_cookie_log_state,      /* server config */
-    NULL,                       /* merge server configs */
-    cookie_log_cmds,            /* command apr_table_t */
-    register_hooks		/* register hooks */
-};
diff --git a/modules/metadata/mod_usertrack.dsp b/modules/metadata/mod_usertrack.dsp
deleted file mode 100644
index 7452ced..0000000
--- a/modules/metadata/mod_usertrack.dsp
+++ /dev/null
@@ -1,128 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mod_usertrack" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mod_usertrack - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "mod_usertrack.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "mod_usertrack.mak" CFG="mod_usertrack - Win32 Release"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "mod_usertrack - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mod_usertrack - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "mod_usertrack - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /O2 /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Release\mod_usertrack" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /map /machine:I386 /out:"Release/mod_usertrack.so" /base:@..\..\os\win32\BaseAddr.ref,mod_usertrack
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /map /machine:I386 /out:"Release/mod_usertrack.so" /base:@..\..\os\win32\BaseAddr.ref,mod_usertrack
-
-!ELSEIF  "$(CFG)" == "mod_usertrack - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Debug\mod_usertrack" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /map /debug /machine:I386 /out:"Debug/mod_usertrack.so" /base:@..\..\os\win32\BaseAddr.ref,mod_usertrack
-# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /map /debug /machine:I386 /out:"Debug/mod_usertrack.so" /base:@..\..\os\win32\BaseAddr.ref,mod_usertrack
-
-!ENDIF 
-
-# Begin Target
-
-# Name "mod_usertrack - Win32 Release"
-# Name "mod_usertrack - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\mod_usertrack.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mod_usertrack.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\build\win32\win32ver.awk
-
-!IF  "$(CFG)" == "mod_usertrack - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_usertrack.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ../../build/win32/win32ver.awk mod_usertrack  "usertrack_module for Apache" ../../include/ap_release.h  > .\mod_usertrack.rc
-
-# End Custom Build
-
-!ELSEIF  "$(CFG)" == "mod_usertrack - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_usertrack.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ../../build/win32/win32ver.awk mod_usertrack  "usertrack_module for Apache" ../../include/ap_release.h  > .\mod_usertrack.rc
-
-# End Custom Build
-
-!ENDIF 
-
-# End Source File
-# End Target
-# End Project
diff --git a/modules/metadata/mod_usertrack.exp b/modules/metadata/mod_usertrack.exp
deleted file mode 100644
index 234a5f7..0000000
--- a/modules/metadata/mod_usertrack.exp
+++ /dev/null
@@ -1 +0,0 @@
-usertrack_module
diff --git a/modules/proxy/.cvsignore b/modules/proxy/.cvsignore
deleted file mode 100644
index b5f6aab..0000000
--- a/modules/proxy/.cvsignore
+++ /dev/null
@@ -1,13 +0,0 @@
-Debug
-Release
-Makefile
-*.lo
-*.plg
-*.slo
-*.la
-*.so
-*.rc
-modules.mk
-.deps
-.libs
-*.mak
diff --git a/modules/proxy/.indent.pro b/modules/proxy/.indent.pro
deleted file mode 100644
index e2cd357..0000000
--- a/modules/proxy/.indent.pro
+++ /dev/null
@@ -1,58 +0,0 @@
--i4 -npsl -di0 -br -nce -d0 -cli0 -npcs -nfc1
--TBUFF
--TFILE
--TTRANS
--TUINT4
--T_trans
--Tallow_options_t
--Tapache_sfio
--Tarray_header
--Tbool_int
--Tapr_bucket_brigade
--Tapr_pool_t
--Tap_filter_t
--Tbuf_area
--Tbuff_struct
--Tbuffy
--Tcmd_how
--Tcmd_parms
--Tcommand_rec
--Tcommand_struct
--Tconn_rec
--Tcore_dir_config
--Tcore_server_config
--Tdir_maker_func
--Tevent
--Tglobals_s
--Thandler_func
--Thandler_rec
--Tjoblist_s
--Tlisten_rec
--Tmerger_func
--Tmode_t
--Tmodule
--Tmodule_struct
--Tmutex
--Tn_long
--Tother_child_rec
--Toverrides_t
--Tparent_score
--Tpid_t
--Tpiped_log
--Tpool
--Trequest_rec
--Trequire_line
--Trlim_t
--Tscoreboard
--Tsemaphore
--Tserver_addr_rec
--Tserver_rec
--Tserver_rec_chain
--Tshort_score
--Ttable
--Ttable_entry
--Tthread
--Tu_wide_int
--Tvtime_t
--Twide_int
--Tproxy_server_conf
diff --git a/modules/proxy/CHANGES b/modules/proxy/CHANGES
deleted file mode 100644
index d1388c5..0000000
--- a/modules/proxy/CHANGES
+++ /dev/null
@@ -1,213 +0,0 @@
-mod_proxy changes for httpd 2.0.29-dev
-  *) don't do keepalives for sub-requests. [Ian Holsman]
-  
-  *) fix up proxypass handling [Ian Holsman]
-
-  *) don't send If-Modified-Since, Cache-Control, or If-None-Match on 
-     a subrequest [Ian Holsman]
-
-mod_proxy changes for httpd 2.0.26-dev
-  *) Add New option 'HTTPProxyOverrideReturnedErrors'. By Turning the
-     Flag on, you will mask the error pages returned by the proxied
-     server, and will it will be handled as if your server generated
-     the error. This change was put in so that a 404 on a included
-     r-proxied component will act in the same manner as a 404 on a 
-     included file. [Ian Holsman <ianh@cnet.com>]
-
-mod_proxy changes for httpd 2.0.25-dev
-
-  *) Split proxy: space using <Proxy[Match] > directive blocks from
-     the <Directory[Match] > and <Files[Match] > blocks.  Mod_proxy
-     now bypasses the directory and files testing phase (and skips 
-     the http TRACE default handler on it's own, as well).  Note that 
-     <Location > blocks continue to be processed for proxy: requests.
-     [William Rowe <wrowe@covalent.net>]
-
-  *) apr_uri type/function namespace changes in apr_uri functions
-     [Doug MacEachern <dougm@covalent.net>]
-
-mod_proxy changes for httpd 2.0.23-dev
-
-  *) break the proxy_http_handler into multiple smaller functions.
-     [John Barbee <barbee@veribox.net>]
-
-  *) Fix the proxy when the origin server sends back a 100
-     Continue response.  [John Barbee <barbee@veribox.net>]
-
-  *) Change 'readbytes' from apr_size_t to apr_off_t due to change
-     in ap_get_brigade's parameters [John Barbee <barbee@veribox.net>]
-
-mod_proxy changes for httpd 2.0.20-dev
-  *) Timeout added for backend connections.
-     [Victor Orlikowski <v.j.orlikowski@gte.net>]
-
-  *) Fix abort code path in proxy_http.c, similar to FTP fix.
-     [Chuck Murcko <chuck@topsail.org>]
-
-  *) Fix FTP ABOR command execution path.
-     [Victor Orlikowski <v.j.orlikowski@gte.net>]
-
-  *) FTP return code variable cleanup; fixed problem in login
-     [Chuck Murcko <chuck@topsail.org>]
-
-  *) Get PORT working again in the ftp proxy.
-     [Victor Orlikowski <v.j.orlikowski@gte.net>]
-
-  *) Return result code check for FTP QUIT, after fixing
-     problems with passive connection handling.
-     [Victor Orlikowski <v.j.orlikowski@gte.net>]
-
-  *) Reorganize ap_proxy_string_read() internally to not process eos
-     buckets.
-     [Chuck Murcko <chuck@topsail.org>]
-     [Victor Orlikowski <v.j.orlikowski@gte.net>]
-
-  *) Remove result code check for FTP QUIT command. Some servers send
-     nothing at all back in response to QUIT.
-     [Chuck Murcko <chuck@topsail.org>]
-     [Victor Orlikowski <v.j.orlikowski@gte.net>]
-
-mod_proxy changes for httpd 2.0.19
-
-  *) Reverse previous patch since the core reverted.
-     [Chuck Murcko <chuck@topsail.org>]
-
-  *) Remove indirection on number of bytes to read for input filters.
-     [Chuck Murcko <chuck@topsail.org>]
-
-  *) Fixed a problem with directory listing corruption in the
-     PROXY_DIR filter.
-     [Graham Leggett <minfrin@sharp.fm>]
-
-  *) mod_proxy and the proxy submodules now build properly as DSOs.
-     [Graham Leggett <minfrin@sharp.fm>]
-
-  *) Stopped the HTTP proxy from trying to read entity bodies when there
-     wasn't one (response was 1xx, 204, 205 or 304).
-     [Graham Leggett <minfrin@sharp.fm>]
-
-  *) Made sure dates were canonicalised correctly when passed to the client
-     browser through the HTTP proxy.
-     [Graham Leggett <minfrin@sharp.fm>]
-
-  *) Split each individual proxy protocol into separate modules.
-     [Graham Leggett <minfrin@sharp.fm>]
-
-  *) Added Max-Forwards support for all request types so as to prevent
-     loops.
-     [Graham Leggett <minfrin@sharp.fm>]
-
-  *) Fix warnings about byte count type on Darwin (connect handler).
-     [Chuck Murcko <chuck@topsail.org>]
-
-mod_proxy changes for httpd 2.0.18
-
-  *) IPV6 EPSV support for IPV6 in FTP proxy.
-     [Graham Leggett <minfrin@sharp.fm>]
-
-  *) FTP directory filter works now.
-     [Graham Leggett <minfrin@sharp.fm>]
-
-  *) Fixed some thread-safety issues with the HTTP proxy in mod_proxy.
-     [Graham Leggett <minfrin@sharp.fm>]
-
-  *) PASV FTP works now.
-     [Graham Leggett <minfrin@sharp.fm>]
-
-  *) Reworked the line-at-a-time read from the control connection to
-     workaround a stray empty bucket returned by the HTTP_IN filter.
-     [Graham Leggett <minfrin@sharp.fm>]
-
-  *) Stopped the CORE filter from sending off an HTTP response when a
-     CONNECT tunnel was closed.
-     [Graham Leggett <minfrin@sharp.fm>]
-
-  *) Fixed the poll() loop in proxy_connect.c -> it works now!!!
-     [Graham Leggett <minfrin@sharp.fm>]
-
-  *) Converted send_dir() to ap_proxy_send_dir_filter() in proxy_ftp.c.
-     [Graham Leggett <minfrin@sharp.fm>]
-
-mod_proxy changes for httpd 2.0.17
-
-  *) Major rework of ap_proxy_ftp_handler() to use filters (begone foul
-     BUFF!!!). It compiles, but is untested, and the build environment needs
-     to be fixed to include proxy_ftp.c.
-     [Graham Leggett <minfrin@sharp.fm>]
-
-  *) Cleanup of dead functions within proxy_util.c.
-     [Graham Leggett <minfrin@sharp.fm>]
-
-  *) Reworked the storage of the client socket between keepalive connections
-     to fix some nasty problems with the socket lasting longer than the
-     memory pool it was allocated from.
-     [Graham Leggett <minfrin@sharp.fm>]
-
-  *) Fixed bug where a hostname without a "." in it (such as "localhost")
-     would not trigger an IP address check with ProxyBlock.
-     [Graham Leggett <minfrin@sharp.fm>]
-
-mod_proxy changes for httpd 2.0.16
-
-  *) Fixed ProxyBlock bugs with ap_proxy_http_handler() and
-     ap_proxy_connect_handler().
-     [Graham Leggett <minfrin@sharp.fm>]
-
-  *) Updated ap_proxy_connect_handler() to support APR, while
-     moving some common code between http_handler and connect_handler
-     to proxy_util.c.
-     [Graham Leggett <minfrin@sharp.fm>]
-
-  *) Updated mod_proxy.html docs to include v2.0 configuration.
-     [Graham Leggett <minfrin@sharp.fm>]
-
-  *) Fixed problem where responses without entity bodies would cause
-     the directly following proxy keepalive request to fail.
-     [Graham Leggett <minfrin@sharp.fm>]
-
-mod_proxy changes for httpd 2.0.15
-
-  *) Added support for downstream keepalives in mod_proxy.
-     [Graham Leggett <minfrin@sharp.fm>]
-
-  *) Changed mod_proxy ap_proxy_http_handler() to support APR properly.
-     [Graham Leggett <minfrin@sharp.fm>]
-
-  *) Fix problem where incoming response headers were not being returned
-     to the client in mod_proxy.
-     [Graham Leggett <minfrin@sharp.fm>]
-
-  *) Added X-Forwarded-For, X-Forwarded-Host and X-Forwarded-Server to
-     reverse proxied request headers in mod_proxy.
-     [Graham Leggett <minfrin@sharp.fm>]
-
-  *) replace INADDR_NONE with APR_INADDR_NONE [Ian Holsman <IanH@cnet.com>]
-
-  *) Fix problem with proxy configuration where globally set
-     configuration options were overridden inside virtual hosts.
-     [Graham Leggett <minfrin@sharp.fm>]
-
-  *) Fix ProxyReceiveBufferSize where default value was left
-     uninitialised.
-     [Graham Leggett <minfrin@sharp.fm>]
-
-  *) Some small changes:
-     - Ensured hop-by-hop headers were stripped as per
-       RFC2616 13.5.1.
-     - Upgraded version code to HTTP/1.1.
-     - Added Connection: close until Keepalives come.
-     - Some cosmetic fixes and commenting.
-     [Graham Leggett <minfrin@sharp.fm>]
-
-mod_proxy changes for httpd 2.0.14
-
-  *) removed ProxyNoCache and ProxyCacheForceCompletion config directives,
-     since we no longer directly cache from this module
-     [Chuck Murcko <chuck@topsail.org>]
-
-  *) removed cache
-     [Chuck Murcko <chuck@topsail.org>]
-
-  *) initial rerebuild for 2.0
-     [Chuck Murcko <chuck@topsail.org>]
-
diff --git a/modules/proxy/Makefile.in b/modules/proxy/Makefile.in
deleted file mode 100644
index 7c5c149..0000000
--- a/modules/proxy/Makefile.in
+++ /dev/null
@@ -1,3 +0,0 @@
-# a modules Makefile has no explicit targets -- they will be defined by
-# whatever modules are enabled. just grab special.mk to deal with this.
-include $(top_srcdir)/build/special.mk
diff --git a/modules/proxy/NWGNUmakefile b/modules/proxy/NWGNUmakefile
deleted file mode 100644
index b86fab5..0000000
--- a/modules/proxy/NWGNUmakefile
+++ /dev/null
@@ -1,271 +0,0 @@
-#
-# Declare the sub-directories to be built here
-#
-
-SUBDIRS = \
-	$(EOLIST) 
-
-#
-# Get the 'head' of the build environment.  This includes default targets and
-# paths to tools
-#
-
-include $(AP_WORK)\build\NWGNUhead.inc
-
-#
-# build this level's files
-#
-# Make sure all needed macro's are defined
-#
-
-
-#
-# These directories will be at the beginning of the include list, followed by
-# INCDIRS
-#
-XINCDIRS	+= \
-			$(AP_WORK)/include \
-			$(NWOS) \
-			$(AP_WORK)/modules/http \
-			$(AP_WORK)/modules/arch/netware \
-			$(AP_WORK)/srclib/apr/include \
-			$(AP_WORK)/srclib/apr-util/include \
-			$(AP_WORK)/srclib/apr \
-			$(EOLIST)
-
-#
-# These flags will come after CFLAGS
-#
-XCFLAGS		+= \
-			-prefix pre_nw.h \
-			$(EOLIST)
-
-#
-# These defines will come after DEFINES
-#
-XDEFINES	+= \
-			$(EOLIST)
-
-#
-# These flags will be added to the link.opt file
-#
-XLFLAGS		+= \
-			$(EOLIST)
-
-#
-# These values will be appended to the correct variables based on the value of
-# RELEASE
-#
-ifeq "$(RELEASE)" "debug"
-XINCDIRS	+= \
-			$(EOLIST)
-
-XCFLAGS		+= \
-			$(EOLIST)
-
-XDEFINES	+= \
-			$(EOLIST)
-
-XLFLAGS		+= \
-		   	$(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "noopt"
-XINCDIRS	+= \
-			$(EOLIST)
-
-XCFLAGS		+= \
-			$(EOLIST)
-
-XDEFINES	+= \
-			$(EOLIST)
-
-XLFLAGS		+= \
-		   	$(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "release"
-XINCDIRS	+= \
-			$(EOLIST)
-
-XCFLAGS		+= \
-			$(EOLIST)
-
-XDEFINES	+= \
-			$(EOLIST)
-
-XLFLAGS		+= \
-			$(EOLIST)
-endif
-
-#
-# These are used by the link target if an NLM is being generated
-# This is used by the link 'name' directive to name the nlm.  If left blank
-# TARGET_nlm (see below) will be used.
-#
-NLM_NAME		= proxy
-
-#
-# This is used by the link '-desc ' directive. 
-# If left blank, NLM_NAME will be used.
-#
-NLM_DESCRIPTION	= Proxy Module
-
-#
-# This is used by the '-threadname' directive.  If left blank,
-# NLM_NAME Thread will be used.
-#
-NLM_THREAD_NAME	= Proxy Module
-
-#
-# If this is specified, it will override VERSION value in 
-# $(AP_WORK)\build\NWGNUenvironment.inc
-#
-NLM_VERSION		=
-
-#
-# If this is specified, it will override the default of 64K
-#
-NLM_STACK_SIZE	= 8192
-
-
-#
-# If this is specified it will be used by the link '-entry' directive
-#
-NLM_ENTRY_SYM	= _LibCPrelude
-
-#
-# If this is specified it will be used by the link '-exit' directive
-#
-NLM_EXIT_SYM	= _LibCPostlude
-
-#
-# If this is specified it will be used by the link '-check' directive
-#
-NLM_CHECK_SYM	=
-
-#
-# If these are specified it will be used by the link '-flags' directive
-#
-NLM_FLAGS		=  AUTOUNLOAD, PSEUDOPREEMPTION
-
-#
-# If this is specified it will be linked in with the XDCData option in the def 
-# file instead of the default of $(NWOS)/apache.xdc.  XDCData can be disabled
-# by setting APACHE_UNIPROC in the environment
-#
-XDCDATA         = 
-
-#
-# If there is an NLM target, put it here
-#
-TARGET_nlm = \
-	$(OBJDIR)/proxy.nlm \
-	$(EOLIST)
-
-#
-# If there is an LIB target, put it here
-#
-TARGET_lib = \
-	$(EOLIST)
-
-#
-# These are the OBJ files needed to create the NLM target above.
-# Paths must all use the '/' character
-#
-FILES_nlm_objs = \
-	$(OBJDIR)/mod_proxy.o \
-	$(OBJDIR)/proxy_connect.o \
-	$(OBJDIR)/proxy_ftp.o \
-	$(OBJDIR)/proxy_http.o \
-	$(OBJDIR)/proxy_util.o \
-	$(OBJDIR)/libprews.o \
-	$(EOLIST)
-
-#
-# These are the LIB files needed to create the NLM target above.
-# These will be added as a library command in the link.opt file.
-#
-FILES_nlm_libs = \
-   	libcpre.o \
-	$(EOLIST)
-
-#
-# These are the modules that the above NLM target depends on to load.
-# These will be added as a module command in the link.opt file.
-#
-FILES_nlm_modules = \
-	aprlib \
-	libc \
-	$(EOLIST)
-
-#
-# If the nlm has a msg file, put it's path here
-#
-FILE_nlm_msg =
- 
-#
-# If the nlm has a hlp file put it's path here
-#
-FILE_nlm_hlp =
-
-#
-# If this is specified, it will override $(NWOS)\copyright.txt.
-#
-FILE_nlm_copyright =
-
-#
-# Any additional imports go here
-#
-FILES_nlm_Ximports = \
-	@$(APR)/aprlib.imp \
-	@$(NWOS)/httpd.imp \
-	@libc.imp \
-	@ws2nlm.imp \
-	$(EOLIST)
- 
-#   
-# Any symbols exported to here
-#
-FILES_nlm_exports = \
-	proxy_module \
-	$(EOLIST)
-	
-#   
-# These are the OBJ files needed to create the LIB target above.
-# Paths must all use the '/' character
-#
-FILES_lib_objs = \
-		$(EOLIST)
-
-#
-# implement targets and dependancies (leave this section alone)
-#
-
-libs :: $(OBJDIR) $(TARGET_lib)
-
-nlms :: libs $(TARGET_nlm)
-
-#
-# Updated this target to create necessary directories and copy files to the 
-# correct place.  (See $(AP_WORK)\build\NWGNUhead.inc for examples)
-#
-install :: nlms FORCE
-	copy $(OBJDIR)\*.nlm $(INSTALL)\Apache2\modules\*.*
-
-#
-# Any specialized rules here
-#
-
-$(OBJDIR)/%.o: ../arch/netware/%.c $(OBJDIR)\cc.opt
-	@echo compiling $<
-	$(CC) $< -o=$(OBJDIR)\$(@F) @$(OBJDIR)\cc.opt
-
-#
-# Include the 'tail' makefile that has targets that depend on variables defined
-# in this makefile
-#
-
-include $(AP_WORK)\build\NWGNUtail.inc
-
-
diff --git a/modules/proxy/config.m4 b/modules/proxy/config.m4
deleted file mode 100644
index d962904..0000000
--- a/modules/proxy/config.m4
+++ /dev/null
@@ -1,24 +0,0 @@
-dnl modules enabled in this directory by default
-
-APACHE_MODPATH_INIT(proxy)
-
-if test "$enable_proxy" = "shared"; then
-  proxy_mods_enable=shared
-elif test "$enable_proxy" = "yes"; then
-  proxy_mods_enable=yes
-else
-  proxy_mods_enable=no
-fi
-
-proxy_objs="mod_proxy.lo proxy_util.lo"
-APACHE_MODULE(proxy, Apache proxy module, $proxy_objs, , $proxy_mods_enable)
-
-proxy_connect_objs="proxy_connect.lo"
-APACHE_MODULE(proxy_connect, Apache proxy CONNECT module, $proxy_connect_objs, , $proxy_mods_enable)
-proxy_ftp_objs="proxy_ftp.lo"
-APACHE_MODULE(proxy_ftp, Apache proxy FTP module, $proxy_ftp_objs, , $proxy_mods_enable)
-proxy_http_objs="proxy_http.lo"
-APACHE_MODULE(proxy_http, Apache proxy HTTP module, $proxy_http_objs, , $proxy_mods_enable)
-
-
-APACHE_MODPATH_FINISH
diff --git a/modules/proxy/libproxy.exp b/modules/proxy/libproxy.exp
deleted file mode 100644
index a20f237..0000000
--- a/modules/proxy/libproxy.exp
+++ /dev/null
@@ -1 +0,0 @@
-proxy_module
diff --git a/modules/proxy/mod_proxy.c b/modules/proxy/mod_proxy.c
deleted file mode 100644
index a53912a..0000000
--- a/modules/proxy/mod_proxy.c
+++ /dev/null
@@ -1,1085 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-#define CORE_PRIVATE
-
-#include "mod_proxy.h"
-#include "mod_core.h"
-
-extern module AP_MODULE_DECLARE_DATA proxy_module;
-
-#ifndef MAX
-#define MAX(x,y) ((x) >= (y) ? (x) : (y))
-#endif
-
-/*
- * A Web proxy module. Stages:
- *
- *  translate_name: set filename to proxy:<URL>
- *  map_to_storage: run proxy_walk (rather than directory_walk/file_walk)
- *                  can't trust directory_walk/file_walk since these are
- *                  not in our filesystem.  Prevents mod_http from serving
- *                  the TRACE request we will set aside to handle later.
- *  type_checker:   set type to PROXY_MAGIC_TYPE if filename begins proxy:
- *  fix_ups:        convert the URL stored in the filename to the
- *                  canonical form.
- *  handler:        handle proxy requests
- */
-
-/* -------------------------------------------------------------- */
-/* Translate the URL into a 'filename' */
-
-static int alias_match(const char *uri, const char *alias_fakename)
-{
-    const char *end_fakename = alias_fakename + strlen(alias_fakename);
-    const char *aliasp = alias_fakename, *urip = uri;
-
-    while (aliasp < end_fakename) {
-        if (*aliasp == '/') {
-            /* any number of '/' in the alias matches any number in
-             * the supplied URI, but there must be at least one...
-             */
-            if (*urip != '/')
-                return 0;
-
-            while (*aliasp == '/')
-                ++aliasp;
-            while (*urip == '/')
-                ++urip;
-        }
-        else {
-            /* Other characters are compared literally */
-            if (*urip++ != *aliasp++)
-                return 0;
-        }
-    }
-
-    /* Check last alias path component matched all the way */
-
-    if (aliasp[-1] != '/' && *urip != '\0' && *urip != '/')
-        return 0;
-
-    /* Return number of characters from URI which matched (may be
-     * greater than length of alias, since we may have matched
-     * doubled slashes)
-     */
-
-    return urip - uri;
-}
-
-/* Detect if an absoluteURI should be proxied or not.  Note that we
- * have to do this during this phase because later phases are
- * "short-circuiting"... i.e. translate_names will end when the first
- * module returns OK.  So for example, if the request is something like:
- *
- * GET http://othervhost/cgi-bin/printenv HTTP/1.0
- *
- * mod_alias will notice the /cgi-bin part and ScriptAlias it and
- * short-circuit the proxy... just because of the ordering in the
- * configuration file.
- */
-static int proxy_detect(request_rec *r)
-{
-    void *sconf = r->server->module_config;
-    proxy_server_conf *conf;
-
-    conf = (proxy_server_conf *) ap_get_module_config(sconf, &proxy_module);
-
-    /* Ick... msvc (perhaps others) promotes ternary short results to int */
-
-    if (conf->req && r->parsed_uri.scheme) {
-        /* but it might be something vhosted */
-        if (!(r->parsed_uri.hostname
-              && !strcasecmp(r->parsed_uri.scheme, ap_http_method(r))
-              && ap_matches_request_vhost(r, r->parsed_uri.hostname,
-                                          (apr_port_t)(r->parsed_uri.port_str ? r->parsed_uri.port 
-                                                       : ap_default_port(r))))) {
-            r->proxyreq = PROXYREQ_PROXY;
-            r->uri = r->unparsed_uri;
-            r->filename = apr_pstrcat(r->pool, "proxy:", r->uri, NULL);
-            r->handler = "proxy-server";
-        }
-    }
-    /* We need special treatment for CONNECT proxying: it has no scheme part */
-    else if (conf->req && r->method_number == M_CONNECT
-             && r->parsed_uri.hostname
-             && r->parsed_uri.port_str) {
-        r->proxyreq = PROXYREQ_PROXY;
-        r->uri = r->unparsed_uri;
-        r->filename = apr_pstrcat(r->pool, "proxy:", r->uri, NULL);
-        r->handler = "proxy-server";
-    }
-    return DECLINED;
-}
-
-static int proxy_trans(request_rec *r)
-{
-    void *sconf = r->server->module_config;
-    proxy_server_conf *conf =
-    (proxy_server_conf *) ap_get_module_config(sconf, &proxy_module);
-    int i, len;
-    struct proxy_alias *ent = (struct proxy_alias *) conf->aliases->elts;
-
-    if (r->proxyreq) {
-        /* someone has already set up the proxy, it was possibly ourselves
-         * in proxy_detect
-         */
-        return OK;
-    }
-
-    /* XXX: since r->uri has been manipulated already we're not really
-     * compliant with RFC1945 at this point.  But this probably isn't
-     * an issue because this is a hybrid proxy/origin server.
-     */
-
-    for (i = 0; i < conf->aliases->nelts; i++) {
-        len = alias_match(r->uri, ent[i].fake);
-
-       if (len > 0) {
-           if ((ent[i].real[0] == '!' ) && ( ent[i].real[1] == 0 )) {
-               return DECLINED;
-           }
-
-           r->filename = apr_pstrcat(r->pool, "proxy:", ent[i].real,
-                                 (r->uri + len ), NULL);
-           r->handler = "proxy-server";
-           r->proxyreq = PROXYREQ_REVERSE;
-           return OK;
-       }
-    }
-    return DECLINED;
-}
-
-static int proxy_walk(request_rec *r)
-{
-    proxy_server_conf *sconf = ap_get_module_config(r->server->module_config,
-                                                    &proxy_module);
-    ap_conf_vector_t *per_dir_defaults = r->server->lookup_defaults;
-    ap_conf_vector_t **sec_proxy = (ap_conf_vector_t **) sconf->sec_proxy->elts;
-    ap_conf_vector_t *entry_config;
-    proxy_dir_conf *entry_proxy;
-    int num_sec = sconf->sec_proxy->nelts;
-    /* XXX: shouldn't we use URI here?  Canonicalize it first?
-     * Pass over "proxy:" prefix 
-     */
-    const char *proxyname = r->filename + 6;
-    int j;
-
-    for (j = 0; j < num_sec; ++j) 
-    {
-        entry_config = sec_proxy[j];
-        entry_proxy = ap_get_module_config(entry_config, &proxy_module);
-
-        /* XXX: What about case insensitive matching ???
-         * Compare regex, fnmatch or string as appropriate
-         * If the entry doesn't relate, then continue 
-         */
-        if (entry_proxy->r 
-              ? ap_regexec(entry_proxy->r, proxyname, 0, NULL, 0)
-              : (entry_proxy->p_is_fnmatch
-                   ? apr_fnmatch(entry_proxy->p, proxyname, 0)
-                   : strncmp(proxyname, entry_proxy->p, 
-                                        strlen(entry_proxy->p)))) {
-            continue;
-        }
-        per_dir_defaults = ap_merge_per_dir_configs(r->pool, per_dir_defaults,
-                                                             entry_config);
-    }
-
-    r->per_dir_config = per_dir_defaults;
-
-    return OK;
-}
-
-static int proxy_map_location(request_rec *r)
-{
-    int access_status;
-
-    if (!r->proxyreq || strncmp(r->filename, "proxy:", 6) != 0)
-        return DECLINED;
-
-    /* Don't let the core or mod_http map_to_storage hooks handle this,
-     * We don't need directory/file_walk, and we want to TRACE on our own.
-     */
-    if ((access_status = proxy_walk(r))) {
-        ap_die(access_status, r);
-        return access_status;
-    }
-
-    return OK;
-}
-
-/* -------------------------------------------------------------- */
-/* Fixup the filename */
-
-/*
- * Canonicalise the URL
- */
-static int proxy_fixup(request_rec *r)
-{
-    char *url, *p;
-    int access_status;
-
-    if (!r->proxyreq || strncmp(r->filename, "proxy:", 6) != 0)
-        return DECLINED;
-
-    /* XXX: Shouldn't we try this before we run the proxy_walk? */
-    url = &r->filename[6];
-
-    /* canonicalise each specific scheme */
-    if ((access_status = proxy_run_canon_handler(r, url))) {
-        return access_status;
-    }
-
-    p = strchr(url, ':');
-    if (p == NULL || p == url)
-        return HTTP_BAD_REQUEST;
-
-    return OK;		/* otherwise; we've done the best we can */
-}
-
-/* Send a redirection if the request contains a hostname which is not */
-/* fully qualified, i.e. doesn't have a domain name appended. Some proxy */
-/* servers like Netscape's allow this and access hosts from the local */
-/* domain in this case. I think it is better to redirect to a FQDN, since */
-/* these will later be found in the bookmarks files. */
-/* The "ProxyDomain" directive determines what domain will be appended */
-static int proxy_needsdomain(request_rec *r, const char *url, const char *domain)
-{
-    char *nuri;
-    const char *ref;
-
-    /* We only want to worry about GETs */
-    if (!r->proxyreq || r->method_number != M_GET || !r->parsed_uri.hostname)
-        return DECLINED;
-
-    /* If host does contain a dot already, or it is "localhost", decline */
-    if (strchr(r->parsed_uri.hostname, '.') != NULL
-     || strcasecmp(r->parsed_uri.hostname, "localhost") == 0)
-        return DECLINED;	/* host name has a dot already */
-
-    ref = apr_table_get(r->headers_in, "Referer");
-
-    /* Reassemble the request, but insert the domain after the host name */
-    /* Note that the domain name always starts with a dot */
-    r->parsed_uri.hostname = apr_pstrcat(r->pool, r->parsed_uri.hostname,
-                                         domain, NULL);
-    nuri = apr_uri_unparse(r->pool,
-                           &r->parsed_uri,
-                           APR_URI_UNP_REVEALPASSWORD);
-
-    apr_table_set(r->headers_out, "Location", nuri);
-    ap_log_rerror(APLOG_MARK, APLOG_INFO|APLOG_NOERRNO, 0, r,
-                  "Domain missing: %s sent to %s%s%s", r->uri,
-                  apr_uri_unparse(r->pool, &r->parsed_uri,
-                                  APR_URI_UNP_OMITUSERINFO),
-                  ref ? " from " : "", ref ? ref : "");
-
-    return HTTP_MOVED_PERMANENTLY;
-}
-
-/* -------------------------------------------------------------- */
-/* Invoke handler */
-
-static int proxy_handler(request_rec *r)
-{
-    char *url, *scheme, *p;
-    const char *p2;
-    void *sconf = r->server->module_config;
-    proxy_server_conf *conf = (proxy_server_conf *)
-        ap_get_module_config(sconf, &proxy_module);
-    apr_array_header_t *proxies = conf->proxies;
-    struct proxy_remote *ents = (struct proxy_remote *) proxies->elts;
-    int i, rc, access_status;
-    int direct_connect = 0;
-    const char *str;
-    long maxfwd;
-
-    /* is this for us? */
-    if (!r->proxyreq || strncmp(r->filename, "proxy:", 6) != 0)
-        return DECLINED;
-
-    /* handle max-forwards / OPTIONS / TRACE */
-    if ((str = apr_table_get(r->headers_in, "Max-Forwards"))) {
-        maxfwd = strtol(str, NULL, 10);
-        if (maxfwd < 1) {
-            switch (r->method_number) {
-            case M_TRACE: {
-                int access_status;
-                r->proxyreq = PROXYREQ_NONE;
-                if ((access_status = ap_send_http_trace(r)))
-                    ap_die(access_status, r);
-                else
-                    ap_finalize_request_protocol(r);
-                return OK;
-            }
-            case M_OPTIONS: {
-                int access_status;
-                r->proxyreq = PROXYREQ_NONE;
-                if ((access_status = ap_send_http_options(r)))
-                    ap_die(access_status, r);
-                else
-                    ap_finalize_request_protocol(r);
-                return OK;
-            }
-            default: {
-                return ap_proxyerror(r, HTTP_BAD_GATEWAY,
-                                     "Max-Forwards has reached zero - proxy loop?");
-            }
-            }
-        }
-        maxfwd = (maxfwd > 0) ? maxfwd - 1 : 0;
-    }
-    else {
-        /* set configured max-forwards */
-        maxfwd = conf->maxfwd;
-    }
-    apr_table_set(r->headers_in, "Max-Forwards", 
-                  apr_psprintf(r->pool, "%ld", (maxfwd > 0) ? maxfwd : 0));
-
-    if ((rc = ap_setup_client_block(r, REQUEST_CHUNKED_ERROR)))
-        return rc;
-
-    url = r->filename + 6;
-    p = strchr(url, ':');
-    if (p == NULL)
-        return HTTP_BAD_REQUEST;
-
-    /* If the host doesn't have a domain name, add one and redirect. */
-    if (conf->domain != NULL) {
-        rc = proxy_needsdomain(r, url, conf->domain);
-        if (ap_is_HTTP_REDIRECT(rc))
-            return HTTP_MOVED_PERMANENTLY;
-    }
-
-    *p = '\0';
-    scheme = apr_pstrdup(r->pool, url);
-    *p = ':';
-
-    /* Check URI's destination host against NoProxy hosts */
-    /* Bypass ProxyRemote server lookup if configured as NoProxy */
-    /* we only know how to handle communication to a proxy via http */
-    /*if (strcasecmp(scheme, "http") == 0) */
-    {
-        int ii;
-        struct dirconn_entry *list = (struct dirconn_entry *) conf->dirconn->elts;
-
-        for (direct_connect = ii = 0; ii < conf->dirconn->nelts && !direct_connect; ii++) {
-            direct_connect = list[ii].matcher(&list[ii], r);
-        }
-#if DEBUGGING
-        ap_log_rerror(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r,
-                      (direct_connect) ? "NoProxy for %s" : "UseProxy for %s",
-                      r->uri);
-#endif
-    }
-
-    /* firstly, try a proxy, unless a NoProxy directive is active */
-    if (!direct_connect) {
-        for (i = 0; i < proxies->nelts; i++) {
-            p2 = ap_strchr_c(ents[i].scheme, ':');  /* is it a partial URL? */
-            if (strcmp(ents[i].scheme, "*") == 0 ||
-                (ents[i].use_regex && ap_regexec(ents[i].regexp, url, 0,NULL, 0)) ||
-                (p2 == NULL && strcasecmp(scheme, ents[i].scheme) == 0) ||
-                (p2 != NULL &&
-                 strncasecmp(url, ents[i].scheme, strlen(ents[i].scheme)) == 0)) {
-
-                /* handle the scheme */
-                ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, 0, r->server,
-                             "Trying to run scheme_handler against proxy");
-                access_status = proxy_run_scheme_handler(r, conf, url, ents[i].hostname, ents[i].port);
-
-                /* an error or success */
-                if (access_status != DECLINED && access_status != HTTP_BAD_GATEWAY) {
-                    return access_status;
-                }
-                /* we failed to talk to the upstream proxy */
-            }
-        }
-    }
-
-    /* otherwise, try it direct */
-    /* N.B. what if we're behind a firewall, where we must use a proxy or
-     * give up??
-     */
-
-    /* handle the scheme */
-    ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, 0, r->server,
-                 "Trying to run scheme_handler");
-    access_status = proxy_run_scheme_handler(r, conf, url, NULL, 0);
-    if (DECLINED == access_status) {
-        ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, 0, r->server,
-                     "Neither CONNECT, HTTP or FTP for %s",
-                     r->uri);
-        return HTTP_FORBIDDEN;
-    }
-    return access_status;
-}
-
-/* -------------------------------------------------------------- */
-/* Setup configurable data */
-
-static void * create_proxy_config(apr_pool_t *p, server_rec *s)
-{
-    proxy_server_conf *ps = ap_pcalloc(p, sizeof(proxy_server_conf));
-
-    ps->sec_proxy = ap_make_array(p, 10, sizeof(ap_conf_vector_t *));
-    ps->proxies = ap_make_array(p, 10, sizeof(struct proxy_remote));
-    ps->aliases = ap_make_array(p, 10, sizeof(struct proxy_alias));
-    ps->raliases = ap_make_array(p, 10, sizeof(struct proxy_alias));
-    ps->noproxies = ap_make_array(p, 10, sizeof(struct noproxy_entry));
-    ps->dirconn = ap_make_array(p, 10, sizeof(struct dirconn_entry));
-    ps->allowed_connect_ports = ap_make_array(p, 10, sizeof(int));
-    ps->domain = NULL;
-    ps->viaopt = via_off; /* initially backward compatible with 1.3.1 */
-    ps->viaopt_set = 0; /* 0 means default */
-    ps->req = 0;
-    ps->req_set = 0;
-    ps->recv_buffer_size = 0; /* this default was left unset for some reason */
-    ps->recv_buffer_size_set = 0;
-    ps->io_buffer_size = AP_IOBUFSIZE;
-    ps->io_buffer_size_set = 0;
-    ps->maxfwd = DEFAULT_MAX_FORWARDS;
-    ps->maxfwd_set = 0;
-    ps->error_override = 0; 
-    ps->error_override_set = 0; 
-    ps->preserve_host_set =0;
-    ps->preserve_host =0;    
-    ps->timeout=0;
-    ps->timeout_set=0;
-    return ps;
-}
-
-static void * merge_proxy_config(apr_pool_t *p, void *basev, void *overridesv)
-{
-    proxy_server_conf *ps = ap_pcalloc(p, sizeof(proxy_server_conf));
-    proxy_server_conf *base = (proxy_server_conf *) basev;
-    proxy_server_conf *overrides = (proxy_server_conf *) overridesv;
-
-    ps->proxies = apr_array_append(p, base->proxies, overrides->proxies);
-    ps->sec_proxy = apr_array_append(p, base->sec_proxy, overrides->sec_proxy);
-    ps->aliases = apr_array_append(p, base->aliases, overrides->aliases);
-    ps->raliases = apr_array_append(p, base->raliases, overrides->raliases);
-    ps->noproxies = apr_array_append(p, base->noproxies, overrides->noproxies);
-    ps->dirconn = apr_array_append(p, base->dirconn, overrides->dirconn);
-    ps->allowed_connect_ports = apr_array_append(p, base->allowed_connect_ports, overrides->allowed_connect_ports);
-
-    ps->domain = (overrides->domain == NULL) ? base->domain : overrides->domain;
-    ps->viaopt = (overrides->viaopt_set == 0) ? base->viaopt : overrides->viaopt;
-    ps->req = (overrides->req_set == 0) ? base->req : overrides->req;
-    ps->recv_buffer_size = (overrides->recv_buffer_size_set == 0) ? base->recv_buffer_size : overrides->recv_buffer_size;
-    ps->io_buffer_size = (overrides->io_buffer_size_set == 0) ? base->io_buffer_size : overrides->io_buffer_size;
-    ps->maxfwd = (overrides->maxfwd_set == 0) ? base->maxfwd : overrides->maxfwd;
-    ps->error_override = (overrides->error_override_set == 0) ? base->error_override : overrides->error_override;
-    ps->preserve_host = (overrides->preserve_host_set == 0) ? base->preserve_host : overrides->preserve_host;
-    ps->timeout= (overrides->timeout_set == 0) ? base->timeout : overrides->timeout;
-
-    return ps;
-}
-
-static void *create_proxy_dir_config(apr_pool_t *p, char *dummy)
-{
-    proxy_dir_conf *new =
-        (proxy_dir_conf *) apr_pcalloc(p, sizeof(proxy_dir_conf));
-
-    /* Filled in by proxysection, when applicable */
-
-    return (void *) new;
-}
-
-static void *merge_proxy_dir_config(apr_pool_t *p, void *basev, void *addv)
-{
-    proxy_dir_conf *new = (proxy_dir_conf *) apr_pcalloc(p, sizeof(proxy_dir_conf));
-    proxy_dir_conf *add = (proxy_dir_conf *) addv;
-
-    new->p = add->p;
-    new->p_is_fnmatch = add->p_is_fnmatch;
-    new->r = add->r;
-    return new;
-}
-
-
-static const char *
-    add_proxy(cmd_parms *cmd, void *dummy, const char *f1, const char *r1, int regex)
-{
-    server_rec *s = cmd->server;
-    proxy_server_conf *conf =
-    (proxy_server_conf *) ap_get_module_config(s->module_config, &proxy_module);
-    struct proxy_remote *new;
-    char *p, *q;
-    char *r, *f, *scheme;
-    regex_t *reg = NULL;
-    int port;
-
-    r = apr_pstrdup(cmd->pool, r1);
-    scheme = apr_pstrdup(cmd->pool, r1);
-    f = apr_pstrdup(cmd->pool, f1);
-    p = strchr(r, ':');
-    if (p == NULL || p[1] != '/' || p[2] != '/' || p[3] == '\0') {
-        if (regex)
-            return "ProxyRemoteMatch: Bad syntax for a remote proxy server";
-        else
-            return "ProxyRemote: Bad syntax for a remote proxy server";
-    }
-    else {
-        scheme[p-r] = 0;
-    }
-    q = strchr(p + 3, ':');
-    if (q != NULL) {
-        if (sscanf(q + 1, "%u", &port) != 1 || port > 65535) {
-            if (regex)
-                return "ProxyRemoteMatch: Bad syntax for a remote proxy server (bad port number)";
-            else
-                return "ProxyRemote: Bad syntax for a remote proxy server (bad port number)";
-        }
-        *q = '\0';
-    }
-    else
-        port = -1;
-    *p = '\0';
-    if (regex) {
-        reg = ap_pregcomp(cmd->pool, f, REG_EXTENDED);
-        if (!reg)
-            return "Regular expression for ProxyRemoteMatch could not be compiled.";
-    }
-    else
-        if (strchr(f, ':') == NULL)
-            ap_str_tolower(f);		/* lowercase scheme */
-    ap_str_tolower(p + 3);		/* lowercase hostname */
-
-    if (port == -1) {
-        port = apr_uri_default_port_for_scheme(scheme);
-    }
-
-    new = apr_array_push(conf->proxies);
-    new->scheme = f;
-    new->protocol = r;
-    new->hostname = p + 3;
-    new->port = port;
-    new->regexp = reg;
-    new->use_regex = regex;
-    return NULL;
-}
-
-static const char *
-    add_proxy_noregex(cmd_parms *cmd, void *dummy, const char *f1, const char *r1)
-{
-    return add_proxy(cmd, dummy, f1, r1, 0);
-}
-
-static const char *
-    add_proxy_regex(cmd_parms *cmd, void *dummy, const char *f1, const char *r1)
-{
-    return add_proxy(cmd, dummy, f1, r1, 1);
-}
-
-static const char *
-    add_pass(cmd_parms *cmd, void *dummy, const char *f, const char *r)
-{
-    server_rec *s = cmd->server;
-    proxy_server_conf *conf =
-    (proxy_server_conf *) ap_get_module_config(s->module_config, &proxy_module);
-    struct proxy_alias *new;
-    if (r!=NULL && cmd->path == NULL ) {
-        new = apr_array_push(conf->aliases);
-        new->fake = f;
-        new->real = r;
-    } else if (r==NULL && cmd->path != NULL) {
-        new = apr_array_push(conf->aliases);
-        new->fake = cmd->path;
-        new->real = f;
-    } else {
-        if ( r== NULL)
-            return "ProxyPass needs a path when not defined in a location";
-        else 
-            return "ProxyPass can not have a path when defined in a location";
-    }
-
-     return NULL;
-}
-
-static const char *
-    add_pass_reverse(cmd_parms *cmd, void *dummy, const char *f, const char *r)
-{
-    server_rec *s = cmd->server;
-    proxy_server_conf *conf;
-    struct proxy_alias *new;
-
-    conf = (proxy_server_conf *)ap_get_module_config(s->module_config, 
-                                                     &proxy_module);
-    if (r!=NULL && cmd->path == NULL ) {
-        new = apr_array_push(conf->raliases);
-        new->fake = f;
-        new->real = r;
-    } else if (r==NULL && cmd->path != NULL) {
-        new = apr_array_push(conf->raliases);
-        new->fake = cmd->path;
-        new->real = f;
-    } else {
-        if ( r == NULL)
-            return "ProxyPassReverse needs a path when not defined in a location";
-        else 
-            return "ProxyPassReverse can not have a path when defined in a location";
-    }
-
-    return NULL;
-}
-
-static const char *
-    set_proxy_exclude(cmd_parms *parms, void *dummy, const char *arg)
-{
-    server_rec *s = parms->server;
-    proxy_server_conf *conf =
-    ap_get_module_config(s->module_config, &proxy_module);
-    struct noproxy_entry *new;
-    struct noproxy_entry *list = (struct noproxy_entry *) conf->noproxies->elts;
-    struct apr_sockaddr_t *addr;
-    int found = 0;
-    int i;
-
-    /* Don't duplicate entries */
-    for (i = 0; i < conf->noproxies->nelts; i++) {
-        if (apr_strnatcasecmp(arg, list[i].name) == 0) { /* ignore case for host names */
-            found = 1;
-        }
-    }
-
-    if (!found) {
-        new = apr_array_push(conf->noproxies);
-        new->name = arg;
-        if (APR_SUCCESS == apr_sockaddr_info_get(&addr, new->name, APR_UNSPEC, 0, 0, parms->pool)) {
-            new->addr = addr;
-        }
-        else {
-            new->addr = NULL;
-        }
-    }
-    return NULL;
-}
-
-/*
- * Set the ports CONNECT can use
- */
-static const char *
-    set_allowed_ports(cmd_parms *parms, void *dummy, const char *arg)
-{
-    server_rec *s = parms->server;
-    proxy_server_conf *conf =
-        ap_get_module_config(s->module_config, &proxy_module);
-    int *New;
-
-    if (!apr_isdigit(arg[0]))
-        return "AllowCONNECT: port number must be numeric";
-
-    New = apr_array_push(conf->allowed_connect_ports);
-    *New = atoi(arg);
-    return NULL;
-}
-
-/* Similar to set_proxy_exclude(), but defining directly connected hosts,
- * which should never be accessed via the configured ProxyRemote servers
- */
-static const char *
-    set_proxy_dirconn(cmd_parms *parms, void *dummy, const char *arg)
-{
-    server_rec *s = parms->server;
-    proxy_server_conf *conf =
-    ap_get_module_config(s->module_config, &proxy_module);
-    struct dirconn_entry *New;
-    struct dirconn_entry *list = (struct dirconn_entry *) conf->dirconn->elts;
-    int found = 0;
-    int i;
-
-    /* Don't duplicate entries */
-    for (i = 0; i < conf->dirconn->nelts; i++) {
-        if (strcasecmp(arg, list[i].name) == 0)
-            found = 1;
-    }
-
-    if (!found) {
-        New = apr_array_push(conf->dirconn);
-        New->name = apr_pstrdup(parms->pool, arg);
-        New->hostaddr = NULL;
-
-	if (ap_proxy_is_ipaddr(New, parms->pool)) {
-#if DEBUGGING
-            ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL,
-                         "Parsed addr %s", inet_ntoa(New->addr));
-            ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL,
-                         "Parsed mask %s", inet_ntoa(New->mask));
-#endif
-	}
-	else if (ap_proxy_is_domainname(New, parms->pool)) {
-            ap_str_tolower(New->name);
-#if DEBUGGING
-            ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL,
-                         "Parsed domain %s", New->name);
-#endif
-        }
-        else if (ap_proxy_is_hostname(New, parms->pool)) {
-            ap_str_tolower(New->name);
-#if DEBUGGING
-            ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL,
-                         "Parsed host %s", New->name);
-#endif
-        }
-        else {
-            ap_proxy_is_word(New, parms->pool);
-#if DEBUGGING
-            fprintf(stderr, "Parsed word %s\n", New->name);
-#endif
-        }
-    }
-    return NULL;
-}
-
-static const char *
-    set_proxy_domain(cmd_parms *parms, void *dummy, const char *arg)
-{
-    proxy_server_conf *psf =
-    ap_get_module_config(parms->server->module_config, &proxy_module);
-
-    if (arg[0] != '.')
-        return "ProxyDomain: domain name must start with a dot.";
-
-    psf->domain = arg;
-    return NULL;
-}
-
-static const char *
-    set_proxy_req(cmd_parms *parms, void *dummy, int flag)
-{
-    proxy_server_conf *psf =
-    ap_get_module_config(parms->server->module_config, &proxy_module);
-
-    psf->req = flag;
-    psf->req_set = 1;
-    return NULL;
-}
-static const char *
-    set_proxy_error_override(cmd_parms *parms, void *dummy, int flag)
-{
-    proxy_server_conf *psf =
-    ap_get_module_config(parms->server->module_config, &proxy_module);
-
-    psf->error_override = flag;
-    psf->error_override_set = 1;
-    return NULL;
-}
-static const char *
-    set_preserve_host(cmd_parms *parms, void *dummy, int flag)
-{
-    proxy_server_conf *psf =
-    ap_get_module_config(parms->server->module_config, &proxy_module);
-
-    psf->preserve_host = flag;
-    psf->preserve_host_set = 1;
-    return NULL;
-}
-
-static const char *
-    set_recv_buffer_size(cmd_parms *parms, void *dummy, const char *arg)
-{
-    proxy_server_conf *psf =
-    ap_get_module_config(parms->server->module_config, &proxy_module);
-    int s = atoi(arg);
-    if (s < 512 && s != 0) {
-        return "ProxyReceiveBufferSize must be >= 512 bytes, or 0 for system default.";
-    }
-
-    psf->recv_buffer_size = s;
-    psf->recv_buffer_size_set = 1;
-    return NULL;
-}
-
-static const char *
-    set_io_buffer_size(cmd_parms *parms, void *dummy, const char *arg)
-{
-    proxy_server_conf *psf =
-    ap_get_module_config(parms->server->module_config, &proxy_module);
-    long s = atol(arg);
-
-    psf->io_buffer_size = MAX(s, AP_IOBUFSIZE);
-    psf->io_buffer_size_set = 1;
-    return NULL;
-}
-
-static const char *
-    set_max_forwards(cmd_parms *parms, void *dummy, const char *arg)
-{
-    proxy_server_conf *psf =
-    ap_get_module_config(parms->server->module_config, &proxy_module);
-    long s = atol(arg);
-    if (s < 0) {
-        return "ProxyMaxForwards must be greater or equal to zero..";
-    }
-
-    psf->maxfwd = s;
-    psf->maxfwd_set = 1;
-    return NULL;
-}
-static const char*
-    set_proxy_timeout(cmd_parms *parms, void *dummy, const char *arg)
-{
-    proxy_server_conf *psf =
-    ap_get_module_config(parms->server->module_config, &proxy_module);
-    int timeout;
-
-    timeout=atoi(arg);
-    if (timeout<1) {
-        return "Proxy Timeout must be at least 1 second.";
-    }
-    psf->timeout_set=1;
-    psf->timeout=timeout;
-
-    return NULL;    
-}
-
-static const char*
-    set_via_opt(cmd_parms *parms, void *dummy, const char *arg)
-{
-    proxy_server_conf *psf =
-    ap_get_module_config(parms->server->module_config, &proxy_module);
-
-    if (strcasecmp(arg, "Off") == 0)
-        psf->viaopt = via_off;
-    else if (strcasecmp(arg, "On") == 0)
-        psf->viaopt = via_on;
-    else if (strcasecmp(arg, "Block") == 0)
-        psf->viaopt = via_block;
-    else if (strcasecmp(arg, "Full") == 0)
-        psf->viaopt = via_full;
-    else {
-        return "ProxyVia must be one of: "
-            "off | on | full | block";
-    }
-
-    psf->viaopt_set = 1;
-    return NULL;    
-}
-
-static void ap_add_per_proxy_conf(server_rec *s, ap_conf_vector_t *dir_config)
-{
-    proxy_server_conf *sconf = ap_get_module_config(s->module_config,
-					            &proxy_module);
-    void **new_space = (void **)apr_array_push(sconf->sec_proxy);
-    
-    *new_space = dir_config;
-}
-
-static const char *proxysection(cmd_parms *cmd, void *mconfig, const char *arg)
-{
-    const char *errmsg;
-    const char *endp = ap_strrchr_c(arg, '>');
-    int old_overrides = cmd->override;
-    char *old_path = cmd->path;
-    proxy_dir_conf *conf;
-    ap_conf_vector_t *new_dir_conf = ap_create_per_dir_config(cmd->pool);
-    regex_t *r = NULL;
-    const command_rec *thiscmd = cmd->cmd;
-
-    const char *err = ap_check_cmd_context(cmd,
-                                           NOT_IN_DIR_LOC_FILE|NOT_IN_LIMIT);
-    if (err != NULL) {
-        return err;
-    }
-
-    if (endp == NULL) {
-        return apr_pstrcat(cmd->pool, cmd->cmd->name,
-                           "> directive missing closing '>'", NULL);
-    }
-
-    arg=apr_pstrndup(cmd->pool, arg, endp-arg);
-
-    if (!arg) {
-        if (thiscmd->cmd_data)
-            return "<ProxyMatch > block must specify a path";
-        else
-            return "<Proxy > block must specify a path";
-    }
-
-    cmd->path = ap_getword_conf(cmd->pool, &arg);
-    cmd->override = OR_ALL|ACCESS_CONF;
-
-    if (!strncasecmp(cmd->path, "proxy:", 6))
-        cmd->path += 6;
-
-    /* XXX Ignore case?  What if we proxy a case-insensitive server?!? 
-     * While we are at it, shouldn't we also canonicalize the entire
-     * scheme?  See proxy_fixup()
-     */
-    if (thiscmd->cmd_data) { /* <ProxyMatch> */
-        r = ap_pregcomp(cmd->pool, cmd->path, REG_EXTENDED);
-    }
-    else if (!strcmp(cmd->path, "~")) {
-        cmd->path = ap_getword_conf(cmd->pool, &arg);
-        if (!cmd->path)
-            return "<Proxy ~ > block must specify a path";
-        if (strncasecmp(cmd->path, "proxy:", 6))
-            cmd->path += 6;
-        r = ap_pregcomp(cmd->pool, cmd->path, REG_EXTENDED);
-    }
-
-    /* initialize our config and fetch it */
-    conf = ap_set_config_vectors(cmd->server, new_dir_conf, cmd->path,
-                                 &proxy_module, cmd->pool);
-
-    errmsg = ap_walk_config(cmd->directive->first_child, cmd, new_dir_conf);
-    if (errmsg != NULL)
-        return errmsg;
-
-    conf->r = r;
-    conf->p = cmd->path;
-    conf->p_is_fnmatch = apr_is_fnmatch(conf->p);
-
-    ap_add_per_proxy_conf(cmd->server, new_dir_conf);
-
-    if (*arg != '\0') {
-        return apr_pstrcat(cmd->pool, "Multiple ", thiscmd->name,
-                           "> arguments not (yet) supported.", NULL);
-    }
-
-    cmd->path = old_path;
-    cmd->override = old_overrides;
-
-    return NULL;
-}
-
-static const command_rec proxy_cmds[] =
-{
-    AP_INIT_RAW_ARGS("<Proxy", proxysection, NULL, RSRC_CONF, 
-    "Container for directives affecting resources located in the proxied "
-    "location"),
-    AP_INIT_RAW_ARGS("<ProxyMatch", proxysection, (void*)1, RSRC_CONF,
-    "Container for directives affecting resources located in the proxied "
-    "location, in regular expression syntax"),
-    AP_INIT_FLAG("ProxyRequests", set_proxy_req, NULL, RSRC_CONF,
-     "on if the true proxy requests should be accepted"),
-    AP_INIT_TAKE2("ProxyRemote", add_proxy_noregex, NULL, RSRC_CONF,
-     "a scheme, partial URL or '*' and a proxy server"),
-    AP_INIT_TAKE2("ProxyRemoteMatch", add_proxy_regex, NULL, RSRC_CONF,
-     "a regex pattern and a proxy server"),
-    AP_INIT_TAKE12("ProxyPass", add_pass, NULL, RSRC_CONF|ACCESS_CONF,
-     "a virtual path and a URL"),
-    AP_INIT_TAKE12("ProxyPassReverse", add_pass_reverse, NULL, RSRC_CONF|ACCESS_CONF,
-     "a virtual path and a URL for reverse proxy behaviour"),
-    AP_INIT_ITERATE("ProxyBlock", set_proxy_exclude, NULL, RSRC_CONF,
-     "A list of names, hosts or domains to which the proxy will not connect"),
-    AP_INIT_TAKE1("ProxyReceiveBufferSize", set_recv_buffer_size, NULL, RSRC_CONF,
-     "Receive buffer size for outgoing HTTP and FTP connections in bytes"),
-    AP_INIT_TAKE1("ProxyIOBufferSize", set_io_buffer_size, NULL, RSRC_CONF,
-     "IO buffer size for outgoing HTTP and FTP connections in bytes"),
-    AP_INIT_TAKE1("ProxyMaxForwards", set_max_forwards, NULL, RSRC_CONF,
-     "The maximum number of proxies a request may be forwarded through."),
-    AP_INIT_ITERATE("NoProxy", set_proxy_dirconn, NULL, RSRC_CONF,
-     "A list of domains, hosts, or subnets to which the proxy will connect directly"),
-    AP_INIT_TAKE1("ProxyDomain", set_proxy_domain, NULL, RSRC_CONF,
-     "The default intranet domain name (in absence of a domain in the URL)"),
-    AP_INIT_ITERATE("AllowCONNECT", set_allowed_ports, NULL, RSRC_CONF,
-     "A list of ports which CONNECT may connect to"),
-    AP_INIT_TAKE1("ProxyVia", set_via_opt, NULL, RSRC_CONF,
-     "Configure Via: proxy header header to one of: on | off | block | full"),
-    AP_INIT_FLAG("ProxyErrorOverride", set_proxy_error_override, NULL, RSRC_CONF,
-     "use our error handling pages instead of the servers' we are proxying"),
-    AP_INIT_FLAG("ProxyPreserveHost", set_preserve_host, NULL, RSRC_CONF,
-     "on if we should preserve host header while proxying"),
-    AP_INIT_TAKE1("ProxyTimeout", set_proxy_timeout, NULL, RSRC_CONF,
-     "Set the timeout (in seconds) for a proxied connection. "
-     "This overrides the server timeout"),
- 
-    {NULL}
-};
-
-static void register_hooks(apr_pool_t *p)
-{
-    /* handler */
-    ap_hook_handler(proxy_handler, NULL, NULL, APR_HOOK_FIRST);
-    /* filename-to-URI translation */
-    ap_hook_translate_name(proxy_trans, NULL, NULL, APR_HOOK_FIRST);
-    /* walk <Proxy > entries and suppress default TRACE behavior */
-    ap_hook_map_to_storage(proxy_map_location, NULL,NULL, APR_HOOK_FIRST);
-    /* fixups */
-    ap_hook_fixups(proxy_fixup, NULL, NULL, APR_HOOK_FIRST);
-    /* post read_request handling */
-    ap_hook_post_read_request(proxy_detect, NULL, NULL, APR_HOOK_FIRST);
-}
-
-module AP_MODULE_DECLARE_DATA proxy_module =
-{
-    STANDARD20_MODULE_STUFF,
-    create_proxy_dir_config,    /* create per-directory config structure */
-    merge_proxy_dir_config,     /* merge per-directory config structures */
-    create_proxy_config,	/* create per-server config structure */
-    merge_proxy_config,		/* merge per-server config structures */
-    proxy_cmds,			/* command table */
-    register_hooks
-};
-
-APR_HOOK_STRUCT(
-	APR_HOOK_LINK(scheme_handler)
-	APR_HOOK_LINK(canon_handler)
-)
-
-APR_IMPLEMENT_EXTERNAL_HOOK_RUN_FIRST(proxy, PROXY, int, scheme_handler, 
-                                     (request_rec *r, proxy_server_conf *conf, 
-                                     char *url, const char *proxyhost, 
-                                     apr_port_t proxyport),(r,conf,url,
-                                     proxyhost,proxyport),DECLINED)
-APR_IMPLEMENT_EXTERNAL_HOOK_RUN_FIRST(proxy, PROXY, int, canon_handler, 
-                                     (request_rec *r, char *url),(r,
-                                     url),DECLINED)
diff --git a/modules/proxy/mod_proxy.dsp b/modules/proxy/mod_proxy.dsp
deleted file mode 100644
index 2cedb18..0000000
--- a/modules/proxy/mod_proxy.dsp
+++ /dev/null
@@ -1,140 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mod_proxy" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mod_proxy - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "mod_proxy.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "mod_proxy.mak" CFG="mod_proxy - Win32 Release"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "mod_proxy - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mod_proxy - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "mod_proxy - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /O2 /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "PROXY_DECLARE_EXPORT" /Fd"Release\mod_proxy" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x809 /d "NDEBUG"
-# ADD RSC /l 0x809 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib ws2_32.lib mswsock.lib /nologo /subsystem:windows /dll /map /machine:I386 /out:"Release/mod_proxy.so" /base:@..\..\os\win32\BaseAddr.ref,mod_proxy
-# ADD LINK32 kernel32.lib ws2_32.lib mswsock.lib /nologo /subsystem:windows /dll /map /machine:I386 /out:"Release/mod_proxy.so" /base:@..\..\os\win32\BaseAddr.ref,mod_proxy
-
-!ELSEIF  "$(CFG)" == "mod_proxy - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "PROXY_DECLARE_EXPORT" /Fd"Debug\mod_proxy" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x809 /d "_DEBUG"
-# ADD RSC /l 0x809 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib ws2_32.lib mswsock.lib /nologo /subsystem:windows /dll /incremental:no /map /debug /machine:I386 /out:"Debug/mod_proxy.so" /base:@..\..\os\win32\BaseAddr.ref,mod_proxy
-# ADD LINK32 kernel32.lib ws2_32.lib mswsock.lib /nologo /subsystem:windows /dll /incremental:no /map /debug /machine:I386 /out:"Debug/mod_proxy.so" /base:@..\..\os\win32\BaseAddr.ref,mod_proxy
-
-!ENDIF 
-
-# Begin Target
-
-# Name "mod_proxy - Win32 Release"
-# Name "mod_proxy - Win32 Debug"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90"
-# Begin Source File
-
-SOURCE=.\mod_proxy.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\proxy_util.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd"
-# Begin Source File
-
-SOURCE=.\mod_proxy.h
-# End Source File
-# End Group
-# Begin Source File
-
-SOURCE=..\..\build\win32\win32ver.awk
-
-!IF  "$(CFG)" == "mod_proxy - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_proxy.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ../../build/win32/win32ver.awk mod_proxy  "proxy_module for Apache" ../../include/ap_release.h > .\mod_proxy.rc
-
-# End Custom Build
-
-!ELSEIF  "$(CFG)" == "mod_proxy - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_proxy.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ../../build/win32/win32ver.awk mod_proxy  "proxy_module for Apache" ../../include/ap_release.h > .\mod_proxy.rc
-
-# End Custom Build
-
-!ENDIF 
-
-# End Source File
-# End Target
-# End Project
diff --git a/modules/proxy/mod_proxy.h b/modules/proxy/mod_proxy.h
deleted file mode 100644
index b9d18bc..0000000
--- a/modules/proxy/mod_proxy.h
+++ /dev/null
@@ -1,277 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-#ifndef MOD_PROXY_H
-#define MOD_PROXY_H 
-
-/*
- * Main include file for the Apache proxy
- */
-
-/*
-
-   Also note numerous FIXMEs and CHECKMEs which should be eliminated.
-
-   This code is once again experimental!
-
-   Things to do:
-
-   1. Make it completely work (for FTP too)
-
-   2. HTTP/1.1
-
-   Chuck Murcko <chuck@topsail.org> 02-06-01
-
- */
-
-#define CORE_PRIVATE
-
-#include "apr_hooks.h"
-#include "apr.h"
-#include "apr_compat.h"
-#include "apr_lib.h"
-#include "apr_strings.h"
-#include "apr_buckets.h"
-#include "apr_md5.h"
-#include "apr_network_io.h"
-#include "apr_pools.h"
-#include "apr_strings.h"
-#include "apr_uri.h"
-#include "apr_date.h"
-#include "apr_fnmatch.h"
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-#include "httpd.h"
-#include "http_config.h"
-#include "ap_config.h"
-#include "http_core.h"
-#include "http_protocol.h"
-#include "http_request.h"
-#include "http_vhost.h"
-#include "http_main.h"
-#include "http_log.h"
-#include "http_connection.h"
-#include "util_filter.h"
-
-#if APR_HAVE_NETINET_IN_H
-#include <netinet/in.h>
-#endif
-#if APR_HAVE_ARPA_INET_H
-#include <arpa/inet.h>
-#endif
-
-/* for proxy_canonenc() */
-enum enctype {
-    enc_path, enc_search, enc_user, enc_fpath, enc_parm
-};
-
-#if APR_CHARSET_EBCDIC
-#define CRLF   "\r\n"
-#else /*APR_CHARSET_EBCDIC*/
-#define CRLF   "\015\012"
-#endif /*APR_CHARSET_EBCDIC*/
-
-/* default Max-Forwards header setting */
-#define DEFAULT_MAX_FORWARDS	10
-
-/* static information about a remote proxy */
-struct proxy_remote {
-    const char *scheme;		/* the schemes handled by this proxy, or '*' */
-    const char *protocol;	/* the scheme used to talk to this proxy */
-    const char *hostname;	/* the hostname of this proxy */
-    apr_port_t  port;		/* the port for this proxy */
-    regex_t *regexp;		/* compiled regex (if any) for the remote */
-    int use_regex;		/* simple boolean. True if we have a regex pattern */
-};
-
-struct proxy_alias {
-    const char *real;
-    const char *fake;
-};
-
-struct dirconn_entry {
-    char *name;
-    struct in_addr addr, mask;
-    struct apr_sockaddr_t *hostaddr;
-    int (*matcher) (struct dirconn_entry * This, request_rec *r);
-};
-
-struct noproxy_entry {
-    const char *name;
-    struct apr_sockaddr_t *addr;
-};
-
-typedef struct {
-    apr_array_header_t *proxies;
-    apr_array_header_t *sec_proxy;
-    apr_array_header_t *aliases;
-    apr_array_header_t *raliases;
-    apr_array_header_t *noproxies;
-    apr_array_header_t *dirconn;
-    apr_array_header_t *allowed_connect_ports;
-    const char *domain;		/* domain name to use in absence of a domain name in the request */
-    int req;			/* true if proxy requests are enabled */
-    char req_set;
-    enum {
-      via_off,
-      via_on,
-      via_block,
-      via_full
-    } viaopt;                   /* how to deal with proxy Via: headers */
-    char viaopt_set;
-    apr_size_t recv_buffer_size;
-    char recv_buffer_size_set;
-    apr_size_t io_buffer_size;
-    char io_buffer_size_set;
-    long maxfwd;
-    char maxfwd_set;
-    /** 
-     * the following setting masks the error page
-     * returned from the 'proxied server' and just 
-     * forwards the status code upwards.
-     * This allows the main server (us) to generate
-     * the error page, (so it will look like a error
-     * returned from the rest of the system 
-     */
-    int error_override;
-    int error_override_set;
-    int preserve_host;
-    int preserve_host_set;
-    int timeout;
-    int timeout_set;
-
-} proxy_server_conf;
-
-typedef struct {
-    const char *p;            /* The path */
-    int         p_is_fnmatch; /* Is this path an fnmatch candidate? */
-    regex_t    *r;            /* Is this a regex? */
-} proxy_dir_conf;
-
-typedef struct {
-    conn_rec *connection;
-    char *hostname;
-    apr_port_t port;
-} proxy_conn_rec;
-
-typedef struct {
-        float cache_completion; /* completion percentage */
-        int content_length; /* length of the content */
-} proxy_completion;
-
-
-/* hooks */
-
-/* Create a set of PROXY_DECLARE(type), PROXY_DECLARE_NONSTD(type) and 
- * PROXY_DECLARE_DATA with appropriate export and import tags for the platform
- */
-#if !defined(WIN32)
-#define PROXY_DECLARE(type)            type
-#define PROXY_DECLARE_NONSTD(type)     type
-#define PROXY_DECLARE_DATA
-#elif defined(PROXY_DECLARE_STATIC)
-#define PROXY_DECLARE(type)            type __stdcall
-#define PROXY_DECLARE_NONSTD(type)     type
-#define PROXY_DECLARE_DATA
-#elif defined(PROXY_DECLARE_EXPORT)
-#define PROXY_DECLARE(type)            __declspec(dllexport) type __stdcall
-#define PROXY_DECLARE_NONSTD(type)     __declspec(dllexport) type
-#define PROXY_DECLARE_DATA             __declspec(dllexport)
-#else
-#define PROXY_DECLARE(type)            __declspec(dllimport) type __stdcall
-#define PROXY_DECLARE_NONSTD(type)     __declspec(dllimport) type
-#define PROXY_DECLARE_DATA             __declspec(dllimport)
-#endif
-
-APR_DECLARE_EXTERNAL_HOOK(proxy, PROXY, int, scheme_handler, (request_rec *r, 
-                          proxy_server_conf *conf, char *url, 
-                          const char *proxyhost, apr_port_t proxyport))
-APR_DECLARE_EXTERNAL_HOOK(proxy, PROXY, int, canon_handler, (request_rec *r, 
-                          char *url))
-
-APR_DECLARE_EXTERNAL_HOOK(proxy, PROXY, int, create_req, (request_rec *r, request_rec *pr))
-
-/* proxy_util.c */
-
-PROXY_DECLARE(request_rec *)ap_proxy_make_fake_req(conn_rec *c, request_rec *r);
-PROXY_DECLARE(int) ap_proxy_hex2c(const char *x);
-PROXY_DECLARE(void) ap_proxy_c2hex(int ch, char *x);
-PROXY_DECLARE(char *)ap_proxy_canonenc(apr_pool_t *p, const char *x, int len, enum enctype t,
-			int isenc);
-PROXY_DECLARE(char *)ap_proxy_canon_netloc(apr_pool_t *p, char **const urlp, char **userp,
-			 char **passwordp, char **hostp, apr_port_t *port);
-PROXY_DECLARE(const char *)ap_proxy_date_canon(apr_pool_t *p, const char *x);
-PROXY_DECLARE(apr_table_t *)ap_proxy_read_headers(request_rec *r, request_rec *rp, char *buffer, int size, conn_rec *c);
-PROXY_DECLARE(int) ap_proxy_liststr(const char *list, const char *val);
-PROXY_DECLARE(char *)ap_proxy_removestr(apr_pool_t *pool, const char *list, const char *val);
-PROXY_DECLARE(int) ap_proxy_hex2sec(const char *x);
-PROXY_DECLARE(void) ap_proxy_sec2hex(int t, char *y);
-PROXY_DECLARE(int) ap_proxyerror(request_rec *r, int statuscode, const char *message);
-PROXY_DECLARE(int) ap_proxy_is_ipaddr(struct dirconn_entry *This, apr_pool_t *p);
-PROXY_DECLARE(int) ap_proxy_is_domainname(struct dirconn_entry *This, apr_pool_t *p);
-PROXY_DECLARE(int) ap_proxy_is_hostname(struct dirconn_entry *This, apr_pool_t *p);
-PROXY_DECLARE(int) ap_proxy_is_word(struct dirconn_entry *This, apr_pool_t *p);
-PROXY_DECLARE(int) ap_proxy_checkproxyblock(request_rec *r, proxy_server_conf *conf, apr_sockaddr_t *uri_addr);
-PROXY_DECLARE(int) ap_proxy_pre_http_request(conn_rec *c, request_rec *r);
-PROXY_DECLARE(apr_status_t) ap_proxy_string_read(conn_rec *c, apr_bucket_brigade *bb, char *buff, size_t bufflen, int *eos);
-PROXY_DECLARE(void) ap_proxy_reset_output_filters(conn_rec *c);
-PROXY_DECLARE(void) ap_proxy_table_unmerge(apr_pool_t *p, apr_table_t *t, char *key);
-PROXY_DECLARE(int) ap_proxy_connect_to_backend(apr_socket_t **, const char *, apr_sockaddr_t *, const char *, proxy_server_conf *, server_rec *, apr_pool_t *);
-
-#endif /*MOD_PROXY_H*/
diff --git a/modules/proxy/mod_proxy_connect.dsp b/modules/proxy/mod_proxy_connect.dsp
deleted file mode 100644
index c6b9d5f..0000000
--- a/modules/proxy/mod_proxy_connect.dsp
+++ /dev/null
@@ -1,136 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mod_proxy_connect" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mod_proxy_connect - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "mod_proxy_connect.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "mod_proxy_connect.mak" CFG="mod_proxy_connect - Win32 Release"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "mod_proxy_connect - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mod_proxy_connect - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "mod_proxy_connect - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /O2 /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Release\mod_proxy_connect" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x809 /d "NDEBUG"
-# ADD RSC /l 0x809 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib ws2_32.lib mswsock.lib /nologo /subsystem:windows /dll /map /machine:I386 /out:"Release/mod_proxy_connect.so" /base:@..\..\os\win32\BaseAddr.ref,mod_proxy_connect
-# ADD LINK32 kernel32.lib ws2_32.lib mswsock.lib /nologo /subsystem:windows /dll /map /machine:I386 /out:"Release/mod_proxy_connect.so" /base:@..\..\os\win32\BaseAddr.ref,mod_proxy_connect
-
-!ELSEIF  "$(CFG)" == "mod_proxy_connect - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Debug\mod_proxy_connect" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x809 /d "_DEBUG"
-# ADD RSC /l 0x809 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib ws2_32.lib mswsock.lib /nologo /subsystem:windows /dll /incremental:no /map /debug /machine:I386 /out:"Debug/mod_proxy_connect.so" /base:@..\..\os\win32\BaseAddr.ref,mod_proxy_connect
-# ADD LINK32 kernel32.lib ws2_32.lib mswsock.lib /nologo /subsystem:windows /dll /incremental:no /map /debug /machine:I386 /out:"Debug/mod_proxy_connect.so" /base:@..\..\os\win32\BaseAddr.ref,mod_proxy_connect
-
-!ENDIF 
-
-# Begin Target
-
-# Name "mod_proxy_connect - Win32 Release"
-# Name "mod_proxy_connect - Win32 Debug"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90"
-# Begin Source File
-
-SOURCE=.\proxy_connect.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter ".h"
-# Begin Source File
-
-SOURCE=.\mod_proxy.h
-# End Source File
-# End Group
-# Begin Source File
-
-SOURCE=..\..\build\win32\win32ver.awk
-
-!IF  "$(CFG)" == "mod_proxy_connect - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_proxy_connect.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ../../build/win32/win32ver.awk mod_proxy_connect  "proxy_connect_module for Apache" ../../include/ap_release.h > .\mod_proxy_connect.rc
-
-# End Custom Build
-
-!ELSEIF  "$(CFG)" == "mod_proxy_connect - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_proxy_connect.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ../../build/win32/win32ver.awk mod_proxy_connect  "proxy_connect_module for Apache" ../../include/ap_release.h > .\mod_proxy_connect.rc
-
-# End Custom Build
-
-!ENDIF 
-
-# End Source File
-# End Target
-# End Project
diff --git a/modules/proxy/mod_proxy_ftp.dsp b/modules/proxy/mod_proxy_ftp.dsp
deleted file mode 100644
index 9a232fb..0000000
--- a/modules/proxy/mod_proxy_ftp.dsp
+++ /dev/null
@@ -1,136 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mod_proxy_ftp" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mod_proxy_ftp - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "mod_proxy_ftp.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "mod_proxy_ftp.mak" CFG="mod_proxy_ftp - Win32 Release"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "mod_proxy_ftp - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mod_proxy_ftp - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "mod_proxy_ftp - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /O2 /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Release\mod_proxy_ftp" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x809 /d "NDEBUG"
-# ADD RSC /l 0x809 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib ws2_32.lib mswsock.lib /nologo /subsystem:windows /dll /map /machine:I386 /out:"Release/mod_proxy_ftp.so" /base:@..\..\os\win32\BaseAddr.ref,mod_proxy_ftp
-# ADD LINK32 kernel32.lib ws2_32.lib mswsock.lib /nologo /subsystem:windows /dll /map /machine:I386 /out:"Release/mod_proxy_ftp.so" /base:@..\..\os\win32\BaseAddr.ref,mod_proxy_ftp
-
-!ELSEIF  "$(CFG)" == "mod_proxy_ftp - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Debug\mod_proxy_ftp" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x809 /d "_DEBUG"
-# ADD RSC /l 0x809 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib ws2_32.lib mswsock.lib /nologo /subsystem:windows /dll /incremental:no /map /debug /machine:I386 /out:"Debug/mod_proxy_ftp.so" /base:@..\..\os\win32\BaseAddr.ref,mod_proxy_ftp
-# ADD LINK32 kernel32.lib ws2_32.lib mswsock.lib /nologo /subsystem:windows /dll /incremental:no /map /debug /machine:I386 /out:"Debug/mod_proxy_ftp.so" /base:@..\..\os\win32\BaseAddr.ref,mod_proxy_ftp
-
-!ENDIF 
-
-# Begin Target
-
-# Name "mod_proxy_ftp - Win32 Release"
-# Name "mod_proxy_ftp - Win32 Debug"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90"
-# Begin Source File
-
-SOURCE=.\proxy_ftp.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter ".h"
-# Begin Source File
-
-SOURCE=.\mod_proxy.h
-# End Source File
-# End Group
-# Begin Source File
-
-SOURCE=..\..\build\win32\win32ver.awk
-
-!IF  "$(CFG)" == "mod_proxy_ftp - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_proxy_ftp.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ../../build/win32/win32ver.awk mod_proxy_ftp  "proxy_ftp_module for Apache" ../../include/ap_release.h > .\mod_proxy_ftp.rc
-
-# End Custom Build
-
-!ELSEIF  "$(CFG)" == "mod_proxy_ftp - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_proxy_ftp.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ../../build/win32/win32ver.awk mod_proxy_ftp  "proxy_ftp_module for Apache" ../../include/ap_release.h > .\mod_proxy_ftp.rc
-
-# End Custom Build
-
-!ENDIF 
-
-# End Source File
-# End Target
-# End Project
diff --git a/modules/proxy/mod_proxy_http.dsp b/modules/proxy/mod_proxy_http.dsp
deleted file mode 100644
index 8764b54..0000000
--- a/modules/proxy/mod_proxy_http.dsp
+++ /dev/null
@@ -1,136 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mod_proxy_http" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mod_proxy_http - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "mod_proxy_http.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "mod_proxy_http.mak" CFG="mod_proxy_http - Win32 Release"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "mod_proxy_http - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mod_proxy_http - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "mod_proxy_http - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /O2 /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Release\mod_proxy_http" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x809 /d "NDEBUG"
-# ADD RSC /l 0x809 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib ws2_32.lib mswsock.lib /nologo /subsystem:windows /dll /map /machine:I386 /out:"Release/mod_proxy_http.so" /base:@..\..\os\win32\BaseAddr.ref,mod_proxy_http
-# ADD LINK32 kernel32.lib ws2_32.lib mswsock.lib /nologo /subsystem:windows /dll /map /machine:I386 /out:"Release/mod_proxy_http.so" /base:@..\..\os\win32\BaseAddr.ref,mod_proxy_http
-
-!ELSEIF  "$(CFG)" == "mod_proxy_http - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Debug\mod_proxy_http" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x809 /d "_DEBUG"
-# ADD RSC /l 0x809 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib ws2_32.lib mswsock.lib /nologo /subsystem:windows /dll /incremental:no /map /debug /machine:I386 /out:"Debug/mod_proxy_http.so" /base:@..\..\os\win32\BaseAddr.ref,mod_proxy_http
-# ADD LINK32 kernel32.lib ws2_32.lib mswsock.lib /nologo /subsystem:windows /dll /incremental:no /map /debug /machine:I386 /out:"Debug/mod_proxy_http.so" /base:@..\..\os\win32\BaseAddr.ref,mod_proxy_http
-
-!ENDIF 
-
-# Begin Target
-
-# Name "mod_proxy_http - Win32 Release"
-# Name "mod_proxy_http - Win32 Debug"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90"
-# Begin Source File
-
-SOURCE=.\proxy_http.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter ".h"
-# Begin Source File
-
-SOURCE=.\mod_proxy.h
-# End Source File
-# End Group
-# Begin Source File
-
-SOURCE=..\..\build\win32\win32ver.awk
-
-!IF  "$(CFG)" == "mod_proxy_http - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_proxy_http.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ../../build/win32/win32ver.awk mod_proxy_http  "proxy_http_module for Apache" ../../include/ap_release.h > .\mod_proxy_http.rc
-
-# End Custom Build
-
-!ELSEIF  "$(CFG)" == "mod_proxy_http - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_proxy_http.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ../../build/win32/win32ver.awk mod_proxy_http  "proxy_http_module for Apache" ../../include/ap_release.h > .\mod_proxy_http.rc
-
-# End Custom Build
-
-!ENDIF 
-
-# End Source File
-# End Target
-# End Project
diff --git a/modules/proxy/proxy_connect.c b/modules/proxy/proxy_connect.c
deleted file mode 100644
index 9704ed2..0000000
--- a/modules/proxy/proxy_connect.c
+++ /dev/null
@@ -1,416 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-/* CONNECT method for Apache proxy */
-
-#define CORE_PRIVATE
-
-#include "mod_proxy.h"
-
-module AP_MODULE_DECLARE_DATA proxy_connect_module;
-
-int ap_proxy_connect_canon(request_rec *r, char *url);
-int ap_proxy_connect_handler(request_rec *r, proxy_server_conf *conf, 
-                             char *url, const char *proxyname, 
-                             apr_port_t proxyport);
-
-/*  
- * This handles Netscape CONNECT method secure proxy requests.
- * A connection is opened to the specified host and data is
- * passed through between the WWW site and the browser.
- *
- * This code is based on the INTERNET-DRAFT document
- * "Tunneling SSL Through a WWW Proxy" currently at
- * http://www.mcom.com/newsref/std/tunneling_ssl.html.
- *
- * If proxyhost and proxyport are set, we send a CONNECT to 
- * the specified proxy..  
- *
- * FIXME: this doesn't log the number of bytes sent, but
- *        that may be okay, since the data is supposed to
- *        be transparent. In fact, this doesn't log at all
- *        yet. 8^)
- * FIXME: doesn't check any headers initally sent from the
- *        client.
- * FIXME: should allow authentication, but hopefully the
- *        generic proxy authentication is good enough.
- * FIXME: no check for r->assbackwards, whatever that is.
- */
-
-static int
-allowed_port(proxy_server_conf *conf, int port)
-{
-    int i;
-    int *list = (int *) conf->allowed_connect_ports->elts;
-
-    for(i = 0; i < conf->allowed_connect_ports->nelts; i++) {
-	if(port == list[i])
-	    return 1;
-    }
-    return 0;
-}
-
-/* canonicalise CONNECT URLs. */
-int ap_proxy_connect_canon(request_rec *r, char *url)
-{
-
-    if (r->method_number != M_CONNECT) {
-	return DECLINED;
-    }
-    ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r->server,
-		 "proxy: CONNECT: canonicalising URL %s", url);
-
-    return OK;
-}
-
-/* CONNECT handler */
-int ap_proxy_connect_handler(request_rec *r, proxy_server_conf *conf, 
-                             char *url, const char *proxyname, 
-                             apr_port_t proxyport)
-{
-    apr_pool_t *p = r->pool;
-    apr_socket_t *sock;
-    apr_status_t err, rv;
-    apr_size_t i, o, nbytes;
-    char buffer[HUGE_STRING_LEN];
-    apr_socket_t *client_socket = ap_get_module_config(r->connection->conn_config, &core_module);
-    int failed;
-    apr_pollfd_t *pollfd;
-    apr_int32_t pollcnt;
-    apr_int16_t pollevent;
-    apr_sockaddr_t *uri_addr, *connect_addr;
-
-    apr_uri_t uri;
-    const char *connectname;
-    int connectport = 0;
-
-    /* is this for us? */
-    if (r->method_number != M_CONNECT) {
-        ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r->server,
-		     "proxy: CONNECT: declining URL %s", url);
-	return DECLINED;
-    }
-    ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r->server,
-		 "proxy: CONNECT: serving URL %s", url);
-
-
-    /*
-     * Step One: Determine Who To Connect To
-     *
-     * Break up the URL to determine the host to connect to
-     */
-
-    /* we break the URL into host, port, uri */
-    if (APR_SUCCESS != apr_uri_parse_hostinfo(p, url, &uri)) {
-	return ap_proxyerror(r, HTTP_BAD_REQUEST,
-			     apr_pstrcat(p, "URI cannot be parsed: ", url, NULL));
-    }
-
-    ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r->server,
-		 "proxy: CONNECT: connecting %s to %s:%d", url, uri.hostname, uri.port);
-
-    /* do a DNS lookup for the destination host */
-    err = apr_sockaddr_info_get(&uri_addr, uri.hostname, APR_UNSPEC, uri.port, 0, p);
-
-    /* are we connecting directly, or via a proxy? */
-    if (proxyname) {
-	connectname = proxyname;
-	connectport = proxyport;
-        err = apr_sockaddr_info_get(&connect_addr, proxyname, APR_UNSPEC, proxyport, 0, p);
-    }
-    else {
-	connectname = uri.hostname;
-	connectport = uri.port;
-	connect_addr = uri_addr;
-    }
-    ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r->server,
-		 "proxy: CONNECT: connecting to remote proxy %s on port %d", connectname, connectport);
-
-    /* check if ProxyBlock directive on this host */
-    if (OK != ap_proxy_checkproxyblock(r, conf, uri_addr)) {
-	return ap_proxyerror(r, HTTP_FORBIDDEN,
-			     "Connect to remote machine blocked");
-    }
-
-    /* Check if it is an allowed port */
-    if (conf->allowed_connect_ports->nelts == 0) {
-	/* Default setting if not overridden by AllowCONNECT */
-	switch (uri.port) {
-	    case APR_URI_HTTPS_DEFAULT_PORT:
-	    case APR_URI_SNEWS_DEFAULT_PORT:
-		break;
-	    default:
-                /* XXX can we call ap_proxyerror() here to get a nice log message? */
-		return HTTP_FORBIDDEN;
-	}
-    } else if(!allowed_port(conf, uri.port)) {
-        /* XXX can we call ap_proxyerror() here to get a nice log message? */
-	return HTTP_FORBIDDEN;
-    }
-
-    /*
-     * Step Two: Make the Connection
-     *
-     * We have determined who to connect to. Now make the connection.
-     */
-
-    /* get all the possible IP addresses for the destname and loop through them
-     * until we get a successful connection
-     */
-    if (APR_SUCCESS != err) {
-	return ap_proxyerror(r, HTTP_BAD_GATEWAY, apr_pstrcat(p,
-                             "DNS lookup failure for: ",
-                             connectname, NULL));
-    }
-
-    /*
-     * At this point we have a list of one or more IP addresses of
-     * the machine to connect to. If configured, reorder this
-     * list so that the "best candidate" is first try. "best
-     * candidate" could mean the least loaded server, the fastest
-     * responding server, whatever.
-     *
-     * For now we do nothing, ie we get DNS round robin.
-     * XXX FIXME
-     */
-    failed = ap_proxy_connect_to_backend(&sock, "CONNECT", connect_addr,
-                                         connectname, conf, r->server,
-                                         r->pool);
-
-    /* handle a permanent error from the above loop */
-    if (failed) {
-        if (proxyname) {
-            return DECLINED;
-        }
-        else {
-            return HTTP_BAD_GATEWAY;
-        }
-    }
-
-    /*
-     * Step Three: Send the Request
-     *
-     * Send the HTTP/1.1 CONNECT request to the remote server
-     */
-
-    /* we are acting as a tunnel - the output filter stack should
-     * be completely empty, because when we are done here we are done completely.
-     * We add the NULL filter to the stack to do this...
-     */
-    r->output_filters = NULL;
-    r->connection->output_filters = NULL;
-
-
-    /* If we are connecting through a remote proxy, we need to pass
-     * the CONNECT request on to it.
-     */
-    if (proxyport) {
-	/* FIXME: Error checking ignored.
-	 */
-        ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r->server,
-		     "proxy: CONNECT: sending the CONNECT request to the remote proxy");
-        nbytes = apr_snprintf(buffer, sizeof(buffer),
-			      "CONNECT %s HTTP/1.0" CRLF, r->uri);
-        apr_send(sock, buffer, &nbytes);
-        nbytes = apr_snprintf(buffer, sizeof(buffer),
-			      "Proxy-agent: %s" CRLF CRLF, ap_get_server_version());
-        apr_send(sock, buffer, &nbytes);
-    }
-    else {
-        ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r->server,
-		     "proxy: CONNECT: Returning 200 OK Status");
-        nbytes = apr_snprintf(buffer, sizeof(buffer),
-			      "HTTP/1.0 200 Connection Established" CRLF);
-        apr_send(client_socket, buffer, &nbytes);
-        nbytes = apr_snprintf(buffer, sizeof(buffer),
-			      "Proxy-agent: %s" CRLF CRLF, ap_get_server_version());
-#if 0
-        /* This is safer code, but it doesn't work yet.  I'm leaving it 
-         * here so that I can fix it later.
-         */
-        apr_send(r->connection->client_socket, buffer, &nbytes);
-        r->status = HTTP_OK;
-        r->header_only = 1;
-        apr_table_set(r->headers_out, "Proxy-agent: %s", ap_get_server_version());
-        ap_rflush(r);
-#endif
-    }
-
-    ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r->server,
-		 "proxy: CONNECT: setting up poll()");
-
-    /*
-     * Step Four: Handle Data Transfer
-     *
-     * Handle two way transfer of data over the socket (this is a tunnel).
-     */
-
-/*    r->sent_bodyct = 1;*/
-
-    if((rv = apr_poll_setup(&pollfd, 2, r->pool)) != APR_SUCCESS)
-    {
-	apr_socket_close(sock);
-        ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
-            "proxy: CONNECT: error apr_poll_setup()");
-        return HTTP_INTERNAL_SERVER_ERROR;
-    }
-
-    /* Add client side to the poll */
-    apr_poll_socket_add(pollfd, client_socket, APR_POLLIN);
-
-    /* Add the server side to the poll */
-    apr_poll_socket_add(pollfd, sock, APR_POLLIN);
-
-    while (1) { /* Infinite loop until error (one side closes the connection) */
-/*	ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r->server, "proxy: CONNECT: going to sleep (poll)");*/
-        if ((rv = apr_poll(pollfd, &pollcnt, -1)) != APR_SUCCESS)
-        {
-	    apr_socket_close(sock);
-            ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r, "proxy: CONNECT: error apr_poll()");
-            return HTTP_INTERNAL_SERVER_ERROR;
-        }
-/*	ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r->server,
-                     "proxy: CONNECT: woke from select(), i=%d", pollcnt);*/
-
-        if (pollcnt) {
-	    apr_poll_revents_get(&pollevent, sock, pollfd);
-            if (pollevent & APR_POLLIN) {
-/*		ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r->server,
-                             "proxy: CONNECT: sock was set");*/
-                nbytes = sizeof(buffer);
-                if (apr_recv(sock, buffer, &nbytes) == APR_SUCCESS) {
-                    o = 0;
-                    i = nbytes;
-                    while(i > 0)
-                    {
-                        nbytes = i;
-    /* This is just plain wrong.  No module should ever write directly
-     * to the client.  For now, this works, but this is high on my list of
-     * things to fix.  The correct line is:
-     * if ((nbytes = ap_rwrite(buffer + o, nbytes, r)) < 0)
-     * rbb
-     */
-                        if (apr_send(client_socket, buffer + o, &nbytes) != APR_SUCCESS)
-			    break;
-                        o += nbytes;
-                        i -= nbytes;
-                    }
-                }
-                else
-                    break;
-            }
-            else if ((pollevent & APR_POLLERR) || (pollevent & APR_POLLHUP))
-		break;
-
-
-            apr_poll_revents_get(&pollevent, client_socket, pollfd);
-            if (pollevent & APR_POLLIN) {
-/*		ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r->server,
-                             "proxy: CONNECT: client was set");*/
-                nbytes = sizeof(buffer);
-                if (apr_recv(client_socket, buffer, &nbytes) == APR_SUCCESS) {
-                    o = 0;
-                    i = nbytes;
-                    while(i > 0)
-                    {
-			nbytes = i;
-			if (apr_send(sock, buffer + o, &nbytes) != APR_SUCCESS)
-			    break;
-                        o += nbytes;
-                        i -= nbytes;
-                    }
-                }
-                else
-                    break;
-            }
-            else if ((pollevent & APR_POLLERR) || (pollevent & APR_POLLHUP))
-		break;
-        }
-        else
-            break;
-    }
-
-    ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r->server,
-		 "proxy: CONNECT: finished with poll() - cleaning up");
-
-    /*
-     * Step Five: Clean Up
-     *
-     * Close the socket and clean up
-     */
-
-    apr_socket_close(sock);
-
-    return OK;
-}
-
-static void ap_proxy_connect_register_hook(apr_pool_t *p)
-{
-    proxy_hook_scheme_handler(ap_proxy_connect_handler, NULL, NULL, APR_HOOK_MIDDLE);
-    proxy_hook_canon_handler(ap_proxy_connect_canon, NULL, NULL, APR_HOOK_MIDDLE);
-}
-
-module AP_MODULE_DECLARE_DATA proxy_connect_module = {
-    STANDARD20_MODULE_STUFF,
-    NULL,		/* create per-directory config structure */
-    NULL,		/* merge per-directory config structures */
-    NULL,		/* create per-server config structure */
-    NULL,		/* merge per-server config structures */
-    NULL,		/* command apr_table_t */
-    ap_proxy_connect_register_hook	/* register hooks */
-};
diff --git a/modules/proxy/proxy_ftp.c b/modules/proxy/proxy_ftp.c
deleted file mode 100644
index 41cdf2c..0000000
--- a/modules/proxy/proxy_ftp.c
+++ /dev/null
@@ -1,1924 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-/* FTP routines for Apache proxy */
-
-#include "mod_proxy.h"
-#if APR_HAVE_TIME_H
-#include <time.h>
-#endif
-
-#define AUTODETECT_PWD
-/* Automatic timestamping (Last-Modified header) based on MDTM is used if:
- * 1) the FTP server supports the MDTM command and
- * 2) HAVE_TIMEGM (preferred) or HAVE_GMTOFF is available at compile time
- */
-#define USE_MDTM
-
-
-module AP_MODULE_DECLARE_DATA proxy_ftp_module;
-
-int ap_proxy_ftp_canon(request_rec *r, char *url);
-int ap_proxy_ftp_handler(request_rec *r, proxy_server_conf *conf,
-                             char *url, const char *proxyhost,
-                             apr_port_t proxyport);
-apr_status_t ap_proxy_send_dir_filter(ap_filter_t * f,
-                                                   apr_bucket_brigade *bb);
-
-
-/*
- * Decodes a '%' escaped string, and returns the number of characters
- */
-static int decodeenc(char *x)
-{
-    int i, j, ch;
-
-    if (x[0] == '\0')
-        return 0;               /* special case for no characters */
-    for (i = 0, j = 0; x[i] != '\0'; i++, j++) {
-        /* decode it if not already done */
-        ch = x[i];
-        if (ch == '%' && ap_isxdigit(x[i + 1]) && ap_isxdigit(x[i + 2])) {
-            ch = ap_proxy_hex2c(&x[i + 1]);
-            i += 2;
-        }
-        x[j] = ch;
-    }
-    x[j] = '\0';
-    return j;
-}
-
-/*
- * Escape the globbing characters in a path used as argument to
- * the FTP commands (SIZE, CWD, RETR, MDTM, ...).
- * ftpd assumes '\\' as a quoting character to escape special characters.
- * Returns: escaped string
- */
-#define FTP_GLOBBING_CHARS "*?[{~"
-static char *ftp_escape_globbingchars(apr_pool_t *p, const char *path)
-{
-    char *ret = apr_palloc(p, 2*strlen(path)+sizeof(""));
-    char *d;
-    for (d = ret; *path; ++path) {
-        if (strchr(FTP_GLOBBING_CHARS, *path) != NULL)
-            *d++ = '\\';
-        *d++ = *path;
-    }
-    *d = '\0';
-    return ret;
-}
-
-/*
- * Check for globbing characters in a path used as argument to
- * the FTP commands (SIZE, CWD, RETR, MDTM, ...).
- * ftpd assumes '\\' as a quoting character to escape special characters.
- * Returns: 0 (no globbing chars, or all globbing chars escaped), 1 (globbing chars)
- */
-static int ftp_check_globbingchars(const char *path)
-{
-    for ( ; *path; ++path) {
-        if (*path == '\\')
-	    ++path;
-        if (path != '\0' && strchr(FTP_GLOBBING_CHARS, *path) != NULL)
-            return TRUE;
-    }
-    return FALSE;
-}
-
-/*
- * checks an encoded ftp string for bad characters, namely, CR, LF or
- * non-ascii character
- */
-static int ftp_check_string(const char *x)
-{
-    int i, ch = 0;
-
-    for (i = 0; x[i] != '\0'; i++) {
-        ch = x[i];
-        if (ch == '%' && ap_isxdigit(x[i + 1]) && ap_isxdigit(x[i + 2])) {
-            ch = ap_proxy_hex2c(&x[i + 1]);
-            i += 2;
-        }
-#if !APR_CHARSET_EBCDIC
-        if (ch == '\015' || ch == '\012' || (ch & 0x80))
-#else                           /* APR_CHARSET_EBCDIC */
-        if (ch == '\r' || ch == '\n' || (os_toascii[ch] & 0x80))
-#endif                          /* APR_CHARSET_EBCDIC */
-            return 0;
-    }
-    return 1;
-}
-
-/*
- * Canonicalise ftp URLs.
- */
-int ap_proxy_ftp_canon(request_rec *r, char *url)
-{
-    char *user, *password, *host, *path, *parms, *strp, sport[7];
-    apr_pool_t *p = r->pool;
-    const char *err;
-    apr_port_t port, def_port;
-
-    /* */
-    if (strncasecmp(url, "ftp:", 4) == 0) {
-        url += 4;
-    }
-    else {
-        return DECLINED;
-    }
-    def_port = apr_uri_default_port_for_scheme("ftp");
-
-    ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, 0, r->server,
-                 "proxy: FTP: canonicalising URL %s", url);
-
-    port = def_port;
-    err = ap_proxy_canon_netloc(p, &url, &user, &password, &host, &port);
-    if (err)
-        return HTTP_BAD_REQUEST;
-    if (user != NULL && !ftp_check_string(user))
-        return HTTP_BAD_REQUEST;
-    if (password != NULL && !ftp_check_string(password))
-        return HTTP_BAD_REQUEST;
-
-    /* now parse path/parameters args, according to rfc1738 */
-    /*
-     * N.B. if this isn't a true proxy request, then the URL path (but not
-     * query args) has already been decoded. This gives rise to the problem
-     * of a ; being decoded into the path.
-     */
-    strp = strchr(url, ';');
-    if (strp != NULL) {
-        *(strp++) = '\0';
-        parms = ap_proxy_canonenc(p, strp, strlen(strp), enc_parm,
-                                  r->proxyreq);
-        if (parms == NULL)
-            return HTTP_BAD_REQUEST;
-    }
-    else
-        parms = "";
-
-    path = ap_proxy_canonenc(p, url, strlen(url), enc_path, r->proxyreq);
-    if (path == NULL)
-        return HTTP_BAD_REQUEST;
-    if (!ftp_check_string(path))
-        return HTTP_BAD_REQUEST;
-
-    if (r->proxyreq && r->args != NULL) {
-        if (strp != NULL) {
-            strp = ap_proxy_canonenc(p, r->args, strlen(r->args), enc_parm, 1);
-            if (strp == NULL)
-                return HTTP_BAD_REQUEST;
-            parms = apr_pstrcat(p, parms, "?", strp, NULL);
-        }
-        else {
-            strp = ap_proxy_canonenc(p, r->args, strlen(r->args), enc_fpath, 1);
-            if (strp == NULL)
-                return HTTP_BAD_REQUEST;
-            path = apr_pstrcat(p, path, "?", strp, NULL);
-        }
-        r->args = NULL;
-    }
-
-/* now, rebuild URL */
-
-    if (port != def_port)
-        apr_snprintf(sport, sizeof(sport), ":%d", port);
-    else
-        sport[0] = '\0';
-
-    r->filename = apr_pstrcat(p, "proxy:ftp://", (user != NULL) ? user : "",
-                              (password != NULL) ? ":" : "",
-                              (password != NULL) ? password : "",
-                          (user != NULL) ? "@" : "", host, sport, "/", path,
-                              (parms[0] != '\0') ? ";" : "", parms, NULL);
-
-    return OK;
-}
-
-/* we chop lines longer than 80 characters */
-#define MAX_LINE_LEN 80
-
-/*
- * Reads response lines, returns both the ftp status code and
- * remembers the response message in the supplied buffer
- */
-static int ftp_getrc_msg(conn_rec *ftp_ctrl, apr_bucket_brigade *bb, char *msgbuf, int msglen)
-{
-    int status;
-    char response[MAX_LINE_LEN];
-    char buff[5];
-    char *mb = msgbuf, *me = &msgbuf[msglen];
-    apr_status_t rv;
-    int eos;
-
-    if (APR_SUCCESS != (rv = ap_proxy_string_read(ftp_ctrl, bb, response, sizeof(response), &eos))) {
-        return -1;
-    }
-/*
-    ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, 0, NULL,
-                 "proxy: <FTP: %s", response);
-*/
-    if (!apr_isdigit(response[0]) || !apr_isdigit(response[1]) ||
-    !apr_isdigit(response[2]) || (response[3] != ' ' && response[3] != '-'))
-        status = 0;
-    else
-        status = 100 * response[0] + 10 * response[1] + response[2] - 111 * '0';
-
-    mb = apr_cpystrn(mb, response + 4, me - mb);
-
-    if (response[3] == '-') {
-        memcpy(buff, response, 3);
-        buff[3] = ' ';
-        do {
-            if (APR_SUCCESS != (rv = ap_proxy_string_read(ftp_ctrl, bb, response, sizeof(response), &eos))) {
-                return -1;
-            }
-            mb = apr_cpystrn(mb, response + (' ' == response[0] ? 1 : 4), me - mb);
-        } while (memcmp(response, buff, 4) != 0);
-    }
-
-    return status;
-}
-
-/* this is a filter that turns a raw ASCII directory listing into pretty HTML */
-
-/* ideally, mod_proxy should simply send the raw directory list up the filter
- * stack to mod_autoindex, which in theory should turn the raw ascii into
- * pretty html along with all the bells and whistles it provides...
- *
- * all in good time...! :)
- */
-
-typedef struct {
-    apr_bucket_brigade *in;
-    char buffer[MAX_STRING_LEN];
-    enum {
-        HEADER, BODY, FOOTER
-    }    state;
-}      proxy_dir_ctx_t;
-
-apr_status_t ap_proxy_send_dir_filter(ap_filter_t *f, apr_bucket_brigade *in)
-{
-    request_rec *r = f->r;
-    apr_pool_t *p = r->pool;
-    apr_bucket_brigade *out = apr_brigade_create(p);
-    apr_status_t rv;
-
-    register int n;
-    char *dir, *path, *reldir, *site, *str, *type;
-
-    const char *pwd = apr_table_get(r->notes, "Directory-PWD");
-    const char *readme = apr_table_get(r->notes, "Directory-README");
-
-    proxy_dir_ctx_t *ctx = f->ctx;
-
-    if (!ctx) {
-        f->ctx = ctx = apr_pcalloc(p, sizeof(*ctx));
-        ctx->in = apr_brigade_create(p);
-        ctx->buffer[0] = 0;
-        ctx->state = HEADER;
-    }
-
-    /* combine the stored and the new */
-    APR_BRIGADE_CONCAT(ctx->in, in);
-
-    if (HEADER == ctx->state) {
-
-        /* basedir is either "", or "/%2f" for the "squid %2f hack" */
-        const char *basedir = "";  /* By default, path is relative to the $HOME dir */
-        char *wildcard = NULL;
-
-        /* Save "scheme://site" prefix without password */
-        site = apr_uri_unparse(p, &f->r->parsed_uri, APR_URI_UNP_OMITPASSWORD | APR_URI_UNP_OMITPATHINFO);
-        /* ... and path without query args */
-        path = apr_uri_unparse(p, &f->r->parsed_uri, APR_URI_UNP_OMITSITEPART | APR_URI_UNP_OMITQUERY);
-
-        /* If path began with /%2f, change the basedir */
-        if (strncasecmp(path, "/%2f", 4) == 0) {
-            basedir = "/%2f";
-        }
-
-        /* Strip off a type qualifier. It is ignored for dir listings */
-        if ((type = strstr(path, ";type=")) != NULL)
-            *type++ = '\0';
-
-        (void)decodeenc(path);
-
-        while (path[1] == '/') /* collapse multiple leading slashes to one */
-            ++path;
-
-        reldir = strrchr(path, '/');
-        if (reldir != NULL && ftp_check_globbingchars(reldir)) {
-            wildcard = &reldir[1];
-            reldir[0] = '\0'; /* strip off the wildcard suffix */
-        }
-
-        /* Copy path, strip (all except the last) trailing slashes */
-        /* (the trailing slash is needed for the dir component loop below) */
-        path = dir = apr_pstrcat(p, path, "/", NULL);
-        for (n = strlen(path); n > 1 && path[n - 1] == '/' && path[n - 2] == '/'; --n)
-            path[n - 1] = '\0';
-
-        /* Add a link to the root directory (if %2f hack was used) */
-        str = (basedir[0] != '\0') ? "<a href=\"/%2f/\">%2f</a>/" : "";
-
-        /* print "ftp://host/" */
-        str = apr_psprintf(p, DOCTYPE_HTML_3_2
-                "<html>\n <head>\n  <title>%s%s%s</title>\n"
-                "  <base href=\"%s%s%s\">\n </head>\n"
-                " <body>\n  <h2>Directory of "
-                "<a href=\"/\">%s</a>/%s",
-                site, basedir, ap_escape_html(p, path),
-                site, basedir, ap_escape_uri(p, path),
-                site, str);
-
-        APR_BRIGADE_INSERT_TAIL(out, apr_bucket_pool_create(str, strlen(str), p));
-
-        for (dir = path+1; (dir = strchr(dir, '/')) != NULL; )
-        {
-            *dir = '\0';
-            if ((reldir = strrchr(path+1, '/'))==NULL) {
-                reldir = path+1;
-            }
-            else
-                ++reldir;
-            /* print "path/" component */
-            str = apr_psprintf(p, "<a href=\"%s%s/\">%s</a>/", basedir,
-                        ap_escape_uri(p, path),
-                        ap_escape_html(p, reldir));
-            *dir = '/';
-            while (*dir == '/')
-              ++dir;
-            APR_BRIGADE_INSERT_TAIL(out, apr_bucket_pool_create(str, strlen(str), p));
-        }
-        if (wildcard != NULL) {
-            APR_BRIGADE_INSERT_TAIL(out, apr_bucket_pool_create(wildcard, strlen(wildcard), p));
-        }
-
-        /* If the caller has determined the current directory, and it differs */
-        /* from what the client requested, then show the real name */
-        if (pwd == NULL || strncmp(pwd, path, strlen(pwd)) == 0) {
-            str = apr_psprintf(p, "</h2>\n\n  <hr />\n\n<pre>");
-        }
-        else {
-            str = apr_psprintf(p, "</h2>\n\n(%s)\n\n  <hr />\n\n<pre>",
-                               ap_escape_html(p, pwd));
-        }
-        APR_BRIGADE_INSERT_TAIL(out, apr_bucket_pool_create(str, strlen(str), p));
-
-        /* print README */
-        if (readme) {
-            str = apr_psprintf(p, "%s\n</pre>\n\n<hr />\n\n<pre>\n",
-                               ap_escape_html(p, readme));
-
-            APR_BRIGADE_INSERT_TAIL(out, apr_bucket_pool_create(str, strlen(str), p));
-        }
-
-        /* make sure page intro gets sent out */
-        APR_BRIGADE_INSERT_TAIL(out, apr_bucket_flush_create());
-        if (APR_SUCCESS != (rv = ap_pass_brigade(f->next, out))) {
-            return rv;
-        }
-        apr_brigade_cleanup(out);
-
-        ctx->state = BODY;
-    }
-
-    /* loop through each line of directory */
-    while (BODY == ctx->state) {
-        char *filename;
-        int found = 0;
-        int eos = 0;
-
-        regex_t *re = NULL;
-        regmatch_t re_result[3];
-
-        /* Compile the output format of "ls -s1" as a fallback for non-unix ftp listings */
-        re = ap_pregcomp(p, "^ *([0-9]+) +([^ ]+)$", REG_EXTENDED);
-
-        /* get a complete line */
-        /* if the buffer overruns - throw data away */
-        while (!found && !APR_BRIGADE_EMPTY(ctx->in)) {
-            char *pos, *response;
-            apr_size_t len, max;
-            apr_bucket *e;
-
-            e = APR_BRIGADE_FIRST(ctx->in);
-            if (APR_BUCKET_IS_EOS(e)) {
-                eos = 1;
-                break;
-            }
-            if (APR_SUCCESS != (rv = apr_bucket_read(e, (const char **)&response, &len, APR_BLOCK_READ))) {
-                return rv;
-            }
-            pos = memchr(response, APR_ASCII_LF, len);
-            if (pos != NULL) {
-                if ((response + len) != (pos + 1)) {
-                    len = pos - response + 1;
-                    apr_bucket_split(e, pos - response + 1);
-                }
-                found = 1;
-            }
-            max = sizeof(ctx->buffer) - strlen(ctx->buffer) - 1;
-            if (len > max) {
-                len = max;
-            }
-
-            /* len+1 to leave space for the trailing nil char */
-            apr_cpystrn(ctx->buffer+strlen(ctx->buffer), response, len+1);
-
-            APR_BUCKET_REMOVE(e);
-            apr_bucket_destroy(e);
-        }
-
-        /* EOS? jump to footer */
-        if (eos) {
-            ctx->state = FOOTER;
-            break;
-        }
-
-        /* not complete? leave and try get some more */
-        if (!found) {
-            return APR_SUCCESS;
-        }
-
-        {
-            size_t n = strlen(ctx->buffer);
-            if (ctx->buffer[n-1] == CRLF[1])  /* strip trailing '\n' */
-                ctx->buffer[--n] = '\0';
-            if (ctx->buffer[n-1] == CRLF[0])  /* strip trailing '\r' if present */
-                ctx->buffer[--n] = '\0';
-        }
-
-        /* a symlink? */
-        if (ctx->buffer[0] == 'l' && (filename = strstr(ctx->buffer, " -> ")) != NULL) {
-            char *link_ptr = filename;
-
-            do {
-                filename--;
-            } while (filename[0] != ' ' && filename > ctx->buffer);
-            if (filename > ctx->buffer)
-                *(filename++) = '\0';
-            *(link_ptr++) = '\0';
-            str = apr_psprintf(p, "%s <a href=\"%s\">%s %s</a>\n",
-                               ap_escape_html(p, ctx->buffer),
-                               ap_escape_uri(p, filename),
-                               ap_escape_html(p, filename),
-                               ap_escape_html(p, link_ptr));
-        }
-
-        /* a directory/file? */
-        else if (ctx->buffer[0] == 'd' || ctx->buffer[0] == '-' || ctx->buffer[0] == 'l' || apr_isdigit(ctx->buffer[0])) {
-            int searchidx = 0;
-            char *searchptr = NULL;
-            int firstfile = 1;
-            if (apr_isdigit(ctx->buffer[0])) {  /* handle DOS dir */
-                searchptr = strchr(ctx->buffer, '<');
-                if (searchptr != NULL)
-                    *searchptr = '[';
-                searchptr = strchr(ctx->buffer, '>');
-                if (searchptr != NULL)
-                    *searchptr = ']';
-            }
-
-            filename = strrchr(ctx->buffer, ' ');
-            *(filename++) = '\0';
-
-            /* handle filenames with spaces in 'em */
-            if (!strcmp(filename, ".") || !strcmp(filename, "..") || firstfile) {
-                firstfile = 0;
-                searchidx = filename - ctx->buffer;
-            }
-            else if (searchidx != 0 && ctx->buffer[searchidx] != 0) {
-                *(--filename) = ' ';
-                ctx->buffer[searchidx - 1] = '\0';
-                filename = &ctx->buffer[searchidx];
-            }
-
-            /* Append a slash to the HREF link for directories */
-            if (!strcmp(filename, ".") || !strcmp(filename, "..") || ctx->buffer[0] == 'd') {
-                str = apr_psprintf(p, "%s <a href=\"%s/\">%s</a>\n",
-                                   ap_escape_html(p, ctx->buffer),
-                                   ap_escape_uri(p, filename),
-                                   ap_escape_html(p, filename));
-            }
-            else {
-                str = apr_psprintf(p, "%s <a href=\"%s\">%s</a>\n",
-                                   ap_escape_html(p, ctx->buffer),
-                                   ap_escape_uri(p, filename),
-                                   ap_escape_html(p, filename));
-            }
-        }
-        /* Try a fallback for listings in the format of "ls -s1" */
-        else if (0 == ap_regexec(re, ctx->buffer, 3, re_result, 0)) {
-
-            filename = apr_pstrndup(p, &ctx->buffer[re_result[2].rm_so], re_result[2].rm_eo - re_result[2].rm_so);
-
-            str = apr_pstrcat(p, ap_escape_html(p, apr_pstrndup(p, ctx->buffer, re_result[2].rm_so)),
-                              "<a href=\"", ap_escape_uri(p, filename), "\">",
-                              ap_escape_html(p, filename), "</a>\n", NULL);
-        }
-        else {
-            strcat(ctx->buffer, "\n"); /* re-append the newline */
-            str = ap_escape_html(p, ctx->buffer);
-        }
-
-        /* erase buffer for next time around */
-        ctx->buffer[0] = 0;
-
-        APR_BRIGADE_INSERT_TAIL(out, apr_bucket_pool_create(str, strlen(str), p));
-        APR_BRIGADE_INSERT_TAIL(out, apr_bucket_flush_create());
-        if (APR_SUCCESS != (rv = ap_pass_brigade(f->next, out))) {
-            return rv;
-        }
-        apr_brigade_cleanup(out);
-
-    }
-
-    if (FOOTER == ctx->state) {
-        str = apr_psprintf(p, "</pre>\n\n  <hr />\n\n  %s\n\n </body>\n</html>\n", ap_psignature("", r));
-        APR_BRIGADE_INSERT_TAIL(out, apr_bucket_pool_create(str, strlen(str), p));
-        APR_BRIGADE_INSERT_TAIL(out, apr_bucket_flush_create());
-        APR_BRIGADE_INSERT_TAIL(out, apr_bucket_eos_create());
-        if (APR_SUCCESS != (rv = ap_pass_brigade(f->next, out))) {
-            return rv;
-        }
-        apr_brigade_destroy(out);
-    }
-
-    return APR_SUCCESS;
-}
-
-/*
- * Generic "send FTP command to server" routine, using the control socket.
- * Returns the FTP returncode (3 digit code)
- * Allows for tracing the FTP protocol (in LogLevel debug)
- */
-static int
-proxy_ftp_command(const char *cmd, request_rec *r, conn_rec *ftp_ctrl,
-                  apr_bucket_brigade *bb, char **pmessage)
-{
-    char *crlf;
-    int rc;
-    char message[HUGE_STRING_LEN];
-
-    /* If cmd == NULL, we retrieve the next ftp response line */
-    if (cmd != NULL) {
-
-        APR_BRIGADE_INSERT_TAIL(bb, apr_bucket_pool_create(cmd, strlen(cmd), r->pool));
-        APR_BRIGADE_INSERT_TAIL(bb, apr_bucket_flush_create());
-        ap_pass_brigade(ftp_ctrl->output_filters, bb);
-
-        /* strip off the CRLF for logging */
-        ap_cpystrn(message, cmd, sizeof message);
-        if ((crlf = strchr(message, '\r')) != NULL ||
-            (crlf = strchr(message, '\n')) != NULL)
-            *crlf = '\0';
-        if (strncmp(message,"PASS ", 5) == 0)
-            strcpy(&message[5], "****");
-        ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, 0, r->server,
-                     "proxy:>FTP: %s", message);
-    }
-
-    rc = ftp_getrc_msg(ftp_ctrl, bb, message, sizeof message);
-    if (rc == -1 || rc == 421)
-        strcpy(message,"<unable to read result>");
-    if ((crlf = strchr(message, '\r')) != NULL ||
-        (crlf = strchr(message, '\n')) != NULL)
-        *crlf = '\0';
-    ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, 0, r->server,
-                 "proxy:<FTP: %3.3u %s", rc, message);
-
-    if (pmessage != NULL)
-        *pmessage = ap_pstrdup(r->pool, message);
-
-    return rc;
-}
-
-/* Set ftp server to TYPE {A,I,E} before transfer of a directory or file */
-static int ftp_set_TYPE(char xfer_type, request_rec *r, conn_rec *ftp_ctrl,
-                  apr_bucket_brigade *bb, char **pmessage)
-{
-    static char old_type[2] = { 'A', '\0' }; /* After logon, mode is ASCII */
-    int ret = HTTP_OK;
-    int rc;
-
-    if (xfer_type == old_type[0])
-        return ret;
-
-    /* set desired type */
-    old_type[0] = xfer_type;
-
-    rc = proxy_ftp_command(apr_pstrcat(r->pool, "TYPE ", old_type, CRLF, NULL),
-                           r, ftp_ctrl, bb, pmessage);
-/* responses: 200, 421, 500, 501, 504, 530 */
-    /* 200 Command okay. */
-    /* 421 Service not available, closing control connection. */
-    /* 500 Syntax error, command unrecognized. */
-    /* 501 Syntax error in parameters or arguments. */
-    /* 504 Command not implemented for that parameter. */
-    /* 530 Not logged in. */
-    if (rc == -1 || rc == 421) {
-        ret = ap_proxyerror(r, HTTP_BAD_GATEWAY,
-                             "Error reading from remote server");
-    }
-    else if (rc != 200 && rc != 504) {
-        ret = ap_proxyerror(r, HTTP_BAD_GATEWAY,
-                             "Unable to set transfer type");
-    }
-/* Allow not implemented */
-    else if (rc == 504)
-        /* ignore it silently */;
-
-    return ret;
-}
-
-
-/* Return the current directory which we have selected on the FTP server, or NULL */
-static char *ftp_get_PWD(request_rec *r, conn_rec *ftp_ctrl, apr_bucket_brigade *bb)
-{
-    char *cwd = NULL;
-    char *ftpmessage = NULL;
-
-    /* responses: 257, 500, 501, 502, 421, 550 */
-    /* 257 "<directory-name>" <commentary> */
-    /* 421 Service not available, closing control connection. */
-    /* 500 Syntax error, command unrecognized. */
-    /* 501 Syntax error in parameters or arguments. */
-    /* 502 Command not implemented. */
-    /* 550 Requested action not taken. */
-    switch (proxy_ftp_command("PWD" CRLF, r, ftp_ctrl, bb, &ftpmessage)) {
-        case -1:
-        case 421:
-        case 550:
-            ap_proxyerror(r, HTTP_BAD_GATEWAY,
-                             "Failed to read PWD on ftp server");
-            break;
-
-        case 257: {
-            const char *dirp = ftpmessage;
-            cwd = ap_getword_conf(r->pool, &dirp);
-        }
-    }
-    return cwd;
-}
-
-
-/* Common routine for failed authorization (i.e., missing or wrong password)
- * to an ftp service. This causes most browsers to retry the request
- * with username and password (which was presumably queried from the user)
- * supplied in the Authorization: header.
- * Note that we "invent" a realm name which consists of the
- * ftp://user@host part of the reqest (sans password -if supplied but invalid-)
- */
-static int ftp_unauthorized(request_rec *r, int log_it)
-{
-    r->proxyreq = PROXYREQ_NONE;
-    /*
-     * Log failed requests if they supplied a password (log username/password
-     * guessing attempts)
-     */
-    if (log_it)
-        ap_log_rerror(APLOG_MARK, APLOG_INFO | APLOG_NOERRNO, 0, r,
-                      "proxy: missing or failed auth to %s",
-                      apr_uri_unparse(r->pool,
-                                 &r->parsed_uri, APR_URI_UNP_OMITPATHINFO));
-
-    apr_table_setn(r->err_headers_out, "WWW-Authenticate",
-                   apr_pstrcat(r->pool, "Basic realm=\"",
-                               apr_uri_unparse(r->pool, &r->parsed_uri,
-                       APR_URI_UNP_OMITPASSWORD | APR_URI_UNP_OMITPATHINFO),
-                               "\"", NULL));
-
-    return HTTP_UNAUTHORIZED;
-}
-
-
-/*
- * Handles direct access of ftp:// URLs
- * Original (Non-PASV) version from
- * Troy Morrison <spiffnet@zoom.com>
- * PASV added by Chuck
- * Filters by [Graham Leggett <minfrin@sharp.fm>]
- */
-int ap_proxy_ftp_handler(request_rec *r, proxy_server_conf *conf,
-                             char *url, const char *proxyhost,
-                             apr_port_t proxyport)
-{
-    apr_pool_t *p = r->pool;
-    conn_rec *c = r->connection;
-    proxy_conn_rec *backend;
-    apr_socket_t *sock, *local_sock, *data_sock = NULL;
-    apr_sockaddr_t *connect_addr;
-    apr_status_t rv;
-    conn_rec *origin, *data = NULL;
-    int err;
-    apr_bucket_brigade *bb = apr_brigade_create(p);
-    char *buf, *connectname;
-    apr_port_t connectport;
-    char buffer[MAX_STRING_LEN];
-    char *ftpmessage = NULL;
-    char *path, *strp, *type_suffix, *cwd = NULL;
-    char *user = NULL;
-/*    char *account = NULL; how to supply an account in a URL? */
-    const char *password = NULL;
-    int len, rc;
-    int one = 1;
-    char *size = NULL;
-    apr_socket_t *origin_sock = NULL;
-    char xfer_type = 'A'; /* after ftp login, the default is ASCII */
-    int  dirlisting = 0;
-#if defined(USE_MDTM) && (defined(HAVE_TIMEGM) || defined(HAVE_GMTOFF))
-    apr_time_t mtime = 0L;
-#endif
-
-    /* stuff for PASV mode */
-    int connect = 0, use_port = 0;
-    char dates[AP_RFC822_DATE_LEN];
-
-    /* is this for us? */
-    if (proxyhost) {
-        ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, 0, r->server,
-                     "proxy: FTP: declining URL %s - proxyhost %s specified:", url, proxyhost);
-        return DECLINED;        /* proxy connections are via HTTP */
-    }
-    if (strncasecmp(url, "ftp:", 4)) {
-        ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, 0, r->server,
-                     "proxy: FTP: declining URL %s - not ftp:", url);
-        return DECLINED;        /* only interested in FTP */
-    }
-    ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, 0, r->server,
-                 "proxy: FTP: serving URL %s", url);
-
-    /* create space for state information */
-    backend = (proxy_conn_rec *) ap_get_module_config(c->conn_config, &proxy_ftp_module);
-    if (!backend) {
-        backend = ap_pcalloc(c->pool, sizeof(proxy_conn_rec));
-        backend->connection = NULL;
-        backend->hostname = NULL;
-        backend->port = 0;
-        ap_set_module_config(c->conn_config, &proxy_ftp_module, backend);
-    }
-    if (backend->connection)
-        origin_sock = ap_get_module_config(backend->connection->conn_config, &core_module);
-
-
-    /*
-     * I: Who Do I Connect To? -----------------------
-     *
-     * Break up the URL to determine the host to connect to
-     */
-
-    /* we only support GET and HEAD */
-    if (r->method_number != M_GET)
-        return HTTP_NOT_IMPLEMENTED;
-
-
-    /* We break the URL into host, port, path-search */
-    connectname = r->parsed_uri.hostname;
-    connectport = (r->parsed_uri.port != 0)
-        ? r->parsed_uri.port
-        : apr_uri_default_port_for_scheme("ftp");
-    path = apr_pstrdup(p, r->parsed_uri.path);
-    path = (path != NULL && path[0] != '\0') ? &path[1] : "";
-
-    type_suffix = strchr(path, ';');
-    if (type_suffix != NULL)
-        *(type_suffix++) = '\0';
-
-    if (type_suffix != NULL && strncmp(type_suffix, "type=", 5) == 0
-        && ap_isalpha(type_suffix[5])) {
-        /* "type=d" forces a dir listing.
-         * The other types (i|a|e) are directly used for the ftp TYPE command
-         */
-        if ( ! (dirlisting = (ap_tolower(type_suffix[5]) == 'd')))
-            xfer_type = ap_toupper(type_suffix[5]);
-
-        /* Check valid types, rather than ignoring invalid types silently: */
-        if (strchr("AEI", xfer_type) == NULL)
-            return ap_proxyerror(r, HTTP_BAD_REQUEST, apr_pstrcat(r->pool,
-                                    "ftp proxy supports only types 'a', 'i', or 'e': \"",
-                                    type_suffix, "\" is invalid.", NULL));
-    }
-    else {
-        /* make binary transfers the default */
-        xfer_type = 'I';
-    }
-
-
-    /*
-     * The "Authorization:" header must be checked first. We allow the user
-     * to "override" the URL-coded user [ & password ] in the Browsers'
-     * User&Password Dialog. NOTE that this is only marginally more secure
-     * than having the password travel in plain as part of the URL, because
-     * Basic Auth simply uuencodes the plain text password. But chances are
-     * still smaller that the URL is logged regularly.
-     */
-    if ((password = apr_table_get(r->headers_in, "Authorization")) != NULL
-        && strcasecmp(ap_getword(r->pool, &password, ' '), "Basic") == 0
-        && (password = ap_pbase64decode(r->pool, password))[0] != ':') {
-        /*
-         * Note that this allocation has to be made from r->connection->pool
-         * because it has the lifetime of the connection.  The other
-         * allocations are temporary and can be tossed away any time.
-         */
-        user = ap_getword_nulls(r->connection->pool, &password, ':');
-        r->ap_auth_type = "Basic";
-        r->user = r->parsed_uri.user = user;
-    }
-    else if ((user = r->parsed_uri.user) != NULL) {
-        user = apr_pstrdup(p, user);
-        decodeenc(user);
-        if ((password = r->parsed_uri.password) != NULL) {
-            char *tmp = apr_pstrdup(p, password);
-            decodeenc(tmp);
-            password = tmp;
-        }
-    }
-    else {
-        user = "anonymous";
-        password = "apache-proxy@";
-    }
-
-    ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, 0, r->server,
-       "proxy: FTP: connecting %s to %s:%d", url, connectname, connectport);
-
-    /* do a DNS lookup for the destination host */
-    err = apr_sockaddr_info_get(&connect_addr, connectname, APR_UNSPEC, connectport, 0, p);
-
-    /* check if ProxyBlock directive on this host */
-    if (OK != ap_proxy_checkproxyblock(r, conf, connect_addr)) {
-        return ap_proxyerror(r, HTTP_FORBIDDEN,
-                             "Connect to remote machine blocked");
-    }
-
-
-    /*
-     * II: Make the Connection -----------------------
-     *
-     * We have determined who to connect to. Now make the connection.
-     */
-
-    /*
-     * get all the possible IP addresses for the destname and loop through
-     * them until we get a successful connection
-     */
-    if (APR_SUCCESS != err) {
-        return ap_proxyerror(r, HTTP_BAD_GATEWAY, apr_pstrcat(p,
-                                                 "DNS lookup failure for: ",
-                                                        connectname, NULL));
-    }
-
-
-    if ((rv = apr_socket_create(&sock, APR_INET, SOCK_STREAM, r->pool)) != APR_SUCCESS) {
-        ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
-                      "proxy: FTP: error creating socket");
-        return HTTP_INTERNAL_SERVER_ERROR;
-    }
-
-#if !defined(TPF) && !defined(BEOS)
-    if (conf->recv_buffer_size > 0
-        && (rv = apr_setsocketopt(sock, APR_SO_RCVBUF,
-                                  conf->recv_buffer_size))) {
-        ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
-                      "setsockopt(SO_RCVBUF): Failed to set ProxyReceiveBufferSize, using default");
-    }
-#endif
-
-    if (APR_SUCCESS != (rv = apr_setsocketopt(sock, APR_SO_REUSEADDR, one))) {
-#ifndef _OSD_POSIX              /* BS2000 has this option "always on" */
-        ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
-                      "proxy: FTP: error setting reuseaddr option: setsockopt(SO_REUSEADDR)");
-        return HTTP_INTERNAL_SERVER_ERROR;
-#endif                          /* _OSD_POSIX */
-    }
-
-    /* Set a timeout on the socket */
-    if (conf->timeout_set == 1) {
-        apr_setsocketopt(sock, 
-                         APR_SO_TIMEOUT, 
-                         (int)(conf->timeout * APR_USEC_PER_SEC));
-    }
-    else {
-        apr_setsocketopt(sock, 
-                         APR_SO_TIMEOUT, 
-                         (int)(r->server->timeout * APR_USEC_PER_SEC));
-    }
-
-    ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, 0, r->server,
-                 "proxy: FTP: socket has been created");
-
-
-    /*
-     * At this point we have a list of one or more IP addresses of the
-     * machine to connect to. If configured, reorder this list so that the
-     * "best candidate" is first try. "best candidate" could mean the least
-     * loaded server, the fastest responding server, whatever.
-     *
-     * For now we do nothing, ie we get DNS round robin. XXX FIXME
-     */
-
-
-    /* try each IP address until we connect successfully */
-    {
-        int failed = 1;
-        while (connect_addr) {
-
-            /* FIXME: @@@: We created an APR_INET socket. Now there may be
-             * IPv6 (AF_INET6) DNS addresses in the list... IMO the socket
-             * should be created with the correct family in the first place.
-             * (either do it in this loop, or make at least two attempts
-             * with the AF_INET and AF_INET6 elements in the list)
-             */
-            ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r->server,
-                         "proxy: FTP: trying to connect to %pI (%s)...", connect_addr, connectname);
-
-            /* make the connection out of the socket */
-            rv = apr_connect(sock, connect_addr);
-
-            /* if an error occurred, loop round and try again */
-            if (rv != APR_SUCCESS) {
-                ap_log_error(APLOG_MARK, APLOG_ERR, rv, r->server,
-                             "proxy: FTP: attempt to connect to %pI (%s) failed", connect_addr, connectname);
-                connect_addr = connect_addr->next;
-                continue;
-            }
-
-            /* if we get here, all is well */
-            failed = 0;
-            break;
-        }
-
-        /* handle a permanent error from the above loop */
-        if (failed) {
-            return ap_proxyerror(r, HTTP_BAD_GATEWAY, apr_psprintf(r->pool,
-                          "Could not connect to remote machine: %s port %d",
-                                                 connectname, connectport));
-        }
-    }
-
-    /* the socket is now open, create a new connection */
-    origin = ap_run_create_connection(p, r->server, sock, r->connection->id, r->connection->sbh);
-    if (!origin) {
-        /*
-         * the peer reset the connection already; ap_run_create_connection() closed
-         * the socket
-         */
-        ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, 0, r->server,
-                     "proxy: FTP: an error occurred creating a new connection to %pI (%s)", connect_addr, connectname);
-        return HTTP_INTERNAL_SERVER_ERROR;
-    }
-
-    /* if a keepalive connection is floating around, close it first! */
-    /* we might support ftp keepalives later, but not now... */
-    if (backend->connection) {
-        apr_socket_close(origin_sock);
-        backend->connection = NULL;
-        origin_sock = NULL;
-    }
-
-    ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, 0, r->server,
-                 "proxy: FTP: control connection complete");
-
-
-    /*
-     * III: Send Control Request -------------------------
-     *
-     * Log into the ftp server, send the username & password, change to the
-     * correct directory...
-     */
-
-    /* set up the connection filters */
-    ap_run_pre_connection(origin, sock);
-
-    /* possible results: */
-    /* 120 Service ready in nnn minutes. */
-    /* 220 Service ready for new user. */
-    /* 421 Service not available, closing control connection. */
-    rc = proxy_ftp_command(NULL, r, origin, bb, &ftpmessage);
-    if (rc == -1 || rc == 421) {
-        return ap_proxyerror(r, HTTP_BAD_GATEWAY, "Error reading from remote server");
-    }
-    if (rc == 120) {
-        /*
-         * RFC2616 states: 14.37 Retry-After
-         *
-         * The Retry-After response-header field can be used with a 503 (Service
-         * Unavailable) response to indicate how long the service is expected
-         * to be unavailable to the requesting client. [...] The value of
-         * this field can be either an HTTP-date or an integer number of
-         * seconds (in decimal) after the time of the response. Retry-After
-         * = "Retry-After" ":" ( HTTP-date | delta-seconds )
-         */
-        char *secs_str = ftpmessage;
-        time_t secs;
-
-        /* Look for a number, preceded by whitespace */
-        while (*secs_str)
-            if ((secs_str==ftpmessage || apr_isspace(secs_str[-1])) &&
-                apr_isdigit(secs_str[0]))
-                break;
-        if (*secs_str != '\0') {
-            secs = atol(secs_str);
-            ap_table_add(r->headers_out, "Retry-After",
-                         apr_psprintf(p, "%lu", (unsigned long)(60 * secs)));
-        }
-        return ap_proxyerror(r, HTTP_SERVICE_UNAVAILABLE, ftpmessage);
-    }
-    if (rc != 220) {
-        return ap_proxyerror(r, HTTP_BAD_GATEWAY, ftpmessage);
-    }
-
-
-    rc = proxy_ftp_command(apr_pstrcat(p, "USER ", user, CRLF, NULL),
-                           r, origin, bb, &ftpmessage);
-    /* possible results; 230, 331, 332, 421, 500, 501, 530 */
-    /* states: 1 - error, 2 - success; 3 - send password, 4,5 fail */
-    /* 230 User logged in, proceed. */
-    /* 331 User name okay, need password. */
-    /* 332 Need account for login. */
-    /* 421 Service not available, closing control connection. */
-    /* 500 Syntax error, command unrecognized. */
-    /* (This may include errors such as command line too long.) */
-    /* 501 Syntax error in parameters or arguments. */
-    /* 530 Not logged in. */
-    if (rc == -1 || rc == 421) {
-        return ap_proxyerror(r, HTTP_BAD_GATEWAY, "Error reading from remote server");
-    }
-    if (rc == 530) {
-        return ftp_unauthorized(r, 1);  /* log it: user name guessing
-                                         * attempt? */
-    }
-    if (rc != 230 && rc != 331) {
-        return ap_proxyerror(r, HTTP_BAD_GATEWAY, ftpmessage);
-    }
-
-    if (rc == 331) {            /* send password */
-        if (password == NULL) {
-            return ftp_unauthorized(r, 0);
-        }
-
-        rc = proxy_ftp_command(apr_pstrcat(p, "PASS ", password, CRLF, NULL),
-                           r, origin, bb, &ftpmessage);
-        /* possible results 202, 230, 332, 421, 500, 501, 503, 530 */
-        /* 230 User logged in, proceed. */
-        /* 332 Need account for login. */
-        /* 421 Service not available, closing control connection. */
-        /* 500 Syntax error, command unrecognized. */
-        /* 501 Syntax error in parameters or arguments. */
-        /* 503 Bad sequence of commands. */
-        /* 530 Not logged in. */
-        if (rc == -1 || rc == 421) {
-            return ap_proxyerror(r, HTTP_BAD_GATEWAY,
-                                 "Error reading from remote server");
-        }
-        if (rc == 332) {
-            return ap_proxyerror(r, HTTP_UNAUTHORIZED,
-                  apr_pstrcat(p, "Need account for login: ", ftpmessage, NULL));
-        }
-        /* @@@ questionable -- we might as well return a 403 Forbidden here */
-        if (rc == 530) {
-            return ftp_unauthorized(r, 1);      /* log it: passwd guessing
-                                                 * attempt? */
-        }
-        if (rc != 230 && rc != 202) {
-            return ap_proxyerror(r, HTTP_BAD_GATEWAY, ftpmessage);
-        }
-    }
-    apr_table_set(r->notes, "Directory-README", ftpmessage);
-
-
-    /* Special handling for leading "%2f": this enforces a "cwd /"
-     * out of the $HOME directory which was the starting point after login
-     */
-    if (strncasecmp(path, "%2f", 3) == 0) {
-        path += 3;
-        while (*path == '/') /* skip leading '/' (after root %2f) */
-            ++path;
-
-        rc = proxy_ftp_command("CWD /" CRLF, r, origin, bb, &ftpmessage);
-        if (rc == -1 || rc == 421)
-            return ap_proxyerror(r, HTTP_BAD_GATEWAY,
-                                 "Error reading from remote server");
-    }
-
-    /*
-     * set the directory (walk directory component by component): this is
-     * what we must do if we don't know the OS type of the remote machine
-     */
-    for (;;) {
-        strp = strchr(path, '/');
-        if (strp == NULL)
-            break;
-        *strp = '\0';
-
-        len = decodeenc(path); /* Note! This decodes a %2f -> "/" */
-
-        if (strchr(path, '/')) { /* are there now any '/' characters? */
-            return ap_proxyerror(r, HTTP_BAD_REQUEST,
-                                 "Use of /%2f is only allowed at the base directory");
-        }
-
-        /* NOTE: FTP servers do globbing on the path.
-         * So we need to escape the URI metacharacters.
-         * We use a special glob-escaping routine to escape globbing chars.
-         * We could also have extended gen_test_char.c with a special T_ESCAPE_FTP_PATH
-         */
-        rc = proxy_ftp_command(apr_pstrcat(p, "CWD ",
-                           ftp_escape_globbingchars(p, path), CRLF, NULL),
-                           r, origin, bb, &ftpmessage);
-        *strp = '/';
-        /* responses: 250, 421, 500, 501, 502, 530, 550 */
-        /* 250 Requested file action okay, completed. */
-        /* 421 Service not available, closing control connection. */
-        /* 500 Syntax error, command unrecognized. */
-        /* 501 Syntax error in parameters or arguments. */
-        /* 502 Command not implemented. */
-        /* 530 Not logged in. */
-        /* 550 Requested action not taken. */
-        if (rc == -1 || rc == 421) {
-            return ap_proxyerror(r, HTTP_BAD_GATEWAY,
-                                 "Error reading from remote server");
-        }
-        if (rc == 550) {
-            return ap_proxyerror(r, HTTP_NOT_FOUND, ftpmessage);
-        }
-        if (rc != 250) {
-            return ap_proxyerror(r, HTTP_BAD_GATEWAY, ftpmessage);
-        }
-
-        path = strp + 1;
-    }
-
-    /*
-     * IV: Make Data Connection? -------------------------
-     *
-     * Try EPSV, if that fails... try PASV, if that fails... try PORT.
-     */
-/* this temporarily switches off EPSV/PASV */
-/*goto bypass;*/
-
-    /* set up data connection - EPSV */
-    {
-        apr_sockaddr_t *data_addr;
-        char *data_ip;
-        apr_port_t data_port;
-
-        /*
-         * The EPSV command replaces PASV where both IPV4 and IPV6 is
-         * supported. Only the port is returned, the IP address is always the
-         * same as that on the control connection. Example: Entering Extended
-         * Passive Mode (|||6446|)
-         */
-        rc = proxy_ftp_command("EPSV" CRLF,
-                           r, origin, bb, &ftpmessage);
-        /* possible results: 227, 421, 500, 501, 502, 530 */
-        /* 227 Entering Passive Mode (h1,h2,h3,h4,p1,p2). */
-        /* 421 Service not available, closing control connection. */
-        /* 500 Syntax error, command unrecognized. */
-        /* 501 Syntax error in parameters or arguments. */
-        /* 502 Command not implemented. */
-        /* 530 Not logged in. */
-        if (rc == -1 || rc == 421) {
-            return ap_proxyerror(r, HTTP_BAD_GATEWAY,
-                                 "Error reading from remote server");
-        }
-        if (rc != 229 && rc != 500 && rc != 501 && rc != 502) {
-            return ap_proxyerror(r, HTTP_BAD_GATEWAY, ftpmessage);
-        }
-        else if (rc == 229) {
-            char *pstr;
-            char *tok_cntx;
-
-            pstr = ftpmessage;
-            pstr = apr_strtok(pstr, " ", &tok_cntx);    /* separate result code */
-            if (pstr != NULL) {
-                if (*(pstr + strlen(pstr) + 1) == '=') {
-                    pstr += strlen(pstr) + 2;
-                }
-                else {
-                    pstr = apr_strtok(NULL, "(", &tok_cntx);    /* separate address &
-                                                                 * port params */
-                    if (pstr != NULL)
-                        pstr = apr_strtok(NULL, ")", &tok_cntx);
-                }
-            }
-
-            if (pstr) {
-                apr_sockaddr_t *epsv_addr;
-                data_port = atoi(pstr + 3);
-
-                ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, 0, r->server,
-                       "proxy: FTP: EPSV contacting remote host on port %d",
-                             data_port);
-
-                if ((rv = apr_socket_create(&data_sock, APR_INET, SOCK_STREAM, r->pool)) != APR_SUCCESS) {
-                    ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
-                                  "proxy: FTP: error creating EPSV socket");
-                    return HTTP_INTERNAL_SERVER_ERROR;
-                }
-
-#if !defined (TPF) && !defined(BEOS)
-                if (conf->recv_buffer_size > 0 && (rv = apr_setsocketopt(data_sock, APR_SO_RCVBUF,
-                                                 conf->recv_buffer_size))) {
-                    ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
-                                  "proxy: FTP: setsockopt(SO_RCVBUF): Failed to set ProxyReceiveBufferSize, using default");
-                }
-#endif
-
-                /* make the connection */
-                apr_socket_addr_get(&data_addr, APR_REMOTE, sock);
-                apr_sockaddr_ip_get(&data_ip, data_addr);
-                apr_sockaddr_info_get(&epsv_addr, data_ip, APR_INET, data_port, 0, p);
-                rv = apr_connect(data_sock, epsv_addr);
-                if (rv != APR_SUCCESS) {
-                    ap_log_error(APLOG_MARK, APLOG_ERR, rv, r->server,
-                                 "proxy: FTP: EPSV attempt to connect to %pI failed - Firewall/NAT?", epsv_addr);
-                    return ap_proxyerror(r, HTTP_BAD_GATEWAY, apr_psprintf(r->pool,
-                                                                           "EPSV attempt to connect to %pI failed - firewall/NAT?", epsv_addr));
-                }
-                else {
-                    connect = 1;
-                }
-            }
-            else {
-                /* and try the regular way */
-                apr_socket_close(data_sock);
-            }
-        }
-    }
-
-    /* set up data connection - PASV */
-    if (!connect) {
-        rc = proxy_ftp_command("PASV" CRLF,
-                           r, origin, bb, &ftpmessage);
-        /* possible results: 227, 421, 500, 501, 502, 530 */
-        /* 227 Entering Passive Mode (h1,h2,h3,h4,p1,p2). */
-        /* 421 Service not available, closing control connection. */
-        /* 500 Syntax error, command unrecognized. */
-        /* 501 Syntax error in parameters or arguments. */
-        /* 502 Command not implemented. */
-        /* 530 Not logged in. */
-        if (rc == -1 || rc == 421) {
-            return ap_proxyerror(r, HTTP_BAD_GATEWAY,
-                                 "Error reading from remote server");
-        }
-        if (rc != 227 && rc != 502) {
-            return ap_proxyerror(r, HTTP_BAD_GATEWAY, ftpmessage);
-        }
-        else if (rc == 227) {
-            unsigned int h0, h1, h2, h3, p0, p1;
-            char *pstr;
-            char *tok_cntx;
-
-/* FIXME: Check PASV against RFC1123 */
-
-            pstr = ftpmessage;
-            pstr = apr_strtok(pstr, " ", &tok_cntx);    /* separate result code */
-            if (pstr != NULL) {
-                if (*(pstr + strlen(pstr) + 1) == '=') {
-                    pstr += strlen(pstr) + 2;
-                }
-                else {
-                    pstr = apr_strtok(NULL, "(", &tok_cntx);    /* separate address &
-                                                                 * port params */
-                    if (pstr != NULL)
-                        pstr = apr_strtok(NULL, ")", &tok_cntx);
-                }
-            }
-
-/* FIXME: Only supports IPV4 - fix in RFC2428 */
-
-            if (pstr != NULL && (sscanf(pstr,
-                 "%d,%d,%d,%d,%d,%d", &h3, &h2, &h1, &h0, &p1, &p0) == 6)) {
-
-                apr_sockaddr_t *pasv_addr;
-                apr_port_t pasvport = (p1 << 8) + p0;
-                ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, 0, r->server,
-                          "proxy: FTP: PASV contacting host %d.%d.%d.%d:%d",
-                             h3, h2, h1, h0, pasvport);
-
-                if ((rv = apr_socket_create(&data_sock, APR_INET, SOCK_STREAM, r->pool)) != APR_SUCCESS) {
-                    ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
-                                  "proxy: error creating PASV socket");
-                    return HTTP_INTERNAL_SERVER_ERROR;
-                }
-
-#if !defined (TPF) && !defined(BEOS)
-                if (conf->recv_buffer_size > 0 && (rv = apr_setsocketopt(data_sock, APR_SO_RCVBUF,
-                                                 conf->recv_buffer_size))) {
-                    ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
-                                  "proxy: FTP: setsockopt(SO_RCVBUF): Failed to set ProxyReceiveBufferSize, using default");
-                }
-#endif
-
-                /* make the connection */
-                apr_sockaddr_info_get(&pasv_addr, apr_psprintf(p, "%d.%d.%d.%d", h3, h2, h1, h0), APR_INET, pasvport, 0, p);
-                rv = apr_connect(data_sock, pasv_addr);
-                if (rv != APR_SUCCESS) {
-                    ap_log_error(APLOG_MARK, APLOG_ERR, rv, r->server,
-                                 "proxy: FTP: PASV attempt to connect to %pI failed - Firewall/NAT?", pasv_addr);
-                    return ap_proxyerror(r, HTTP_BAD_GATEWAY, apr_psprintf(r->pool,
-                                                                           "PASV attempt to connect to %pI failed - firewall/NAT?", pasv_addr));
-                }
-                else {
-                    connect = 1;
-                }
-            }
-            else {
-                /* and try the regular way */
-                apr_socket_close(data_sock);
-            }
-        }
-    }
-/*bypass:*/
-
-    /* set up data connection - PORT */
-    if (!connect) {
-        apr_sockaddr_t *local_addr;
-        char *local_ip;
-        apr_port_t local_port;
-        unsigned int h0, h1, h2, h3, p0, p1;
-
-        if ((rv = apr_socket_create(&local_sock, APR_INET, SOCK_STREAM, r->pool)) != APR_SUCCESS) {
-            ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
-                          "proxy: FTP: error creating local socket");
-            return HTTP_INTERNAL_SERVER_ERROR;
-        }
-        apr_socket_addr_get(&local_addr, APR_LOCAL, sock);
-        apr_sockaddr_port_get(&local_port, local_addr);
-        apr_sockaddr_ip_get(&local_ip, local_addr);
-
-        if ((rv = apr_setsocketopt(local_sock, APR_SO_REUSEADDR, one)) != APR_SUCCESS) {
-#ifndef _OSD_POSIX              /* BS2000 has this option "always on" */
-            ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
-                          "proxy: FTP: error setting reuseaddr option");
-            return HTTP_INTERNAL_SERVER_ERROR;
-#endif                          /* _OSD_POSIX */
-        }
-
-        apr_sockaddr_info_get(&local_addr, local_ip, APR_UNSPEC, local_port, 0, r->pool);
-
-        if ((rv = apr_bind(local_sock, local_addr)) != APR_SUCCESS) {
-            ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
-            "proxy: FTP: error binding to ftp data socket %pI", local_addr);
-            return HTTP_INTERNAL_SERVER_ERROR;
-        }
-
-        /* only need a short queue */
-        if ((rv = apr_listen(local_sock, 2)) != APR_SUCCESS) {
-            ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
-                          "proxy: FTP: error listening to ftp data socket %pI", local_addr);
-            return HTTP_INTERNAL_SERVER_ERROR;
-        }
-
-/* FIXME: Sent PORT here */
-
-        if (local_ip && (sscanf(local_ip,
-                                "%d.%d.%d.%d", &h3, &h2, &h1, &h0) == 4)) {
-            p1 = (local_port >> 8);
-            p0 = (local_port & 0xFF);
-
-            rc = proxy_ftp_command(apr_psprintf(p, "PORT %d,%d,%d,%d,%d,%d" CRLF, h3, h2, h1, h0, p1, p0),
-                           r, origin, bb, &ftpmessage);
-            /* possible results: 200, 421, 500, 501, 502, 530 */
-            /* 200 Command okay. */
-            /* 421 Service not available, closing control connection. */
-            /* 500 Syntax error, command unrecognized. */
-            /* 501 Syntax error in parameters or arguments. */
-            /* 502 Command not implemented. */
-            /* 530 Not logged in. */
-            if (rc == -1 || rc == 421) {
-                return ap_proxyerror(r, HTTP_BAD_GATEWAY,
-                                     "Error reading from remote server");
-            }
-            if (rc != 200) {
-                return ap_proxyerror(r, HTTP_BAD_GATEWAY, buffer);
-            }
-
-            /* signal that we must use the EPRT/PORT loop */
-            use_port = 1;
-        }
-        else {
-/* IPV6 FIXME:
- * The EPRT command replaces PORT where both IPV4 and IPV6 is supported. The first
- * number (1,2) indicates the protocol type. Examples:
- *   EPRT |1|132.235.1.2|6275|
- *   EPRT |2|1080::8:800:200C:417A|5282|
- */
-            return ap_proxyerror(r, HTTP_NOT_IMPLEMENTED, "Connect to IPV6 ftp server using EPRT not supported. Enable EPSV.");
-        }
-    }
-
-
-    /*
-     * V: Set The Headers -------------------
-     *
-     * Get the size of the request, set up the environment for HTTP.
-     */
-
-    /* set request; "path" holds last path component */
-    len = decodeenc(path);
-
-    if (strchr(path, '/')) { /* are there now any '/' characters? */
-       return ap_proxyerror(r, HTTP_BAD_REQUEST,
-                            "Use of /%2f is only allowed at the base directory");
-    }
-
-    /* If len == 0 then it must be a directory (you can't RETR nothing)
-     * Also, don't allow to RETR by wildcard. Instead, create a dirlisting
-     */
-    if (len == 0 || ftp_check_globbingchars(path)) {
-        dirlisting = 1;
-    }
-    else {
-        /* (from FreeBSD ftpd):
-         * SIZE is not in RFC959, but Postel has blessed it and
-         * it will be in the updated RFC.
-         *
-         * Return size of file in a format suitable for
-         * using with RESTART (we just count bytes).
-         */
-        /* from draft-ietf-ftpext-mlst-14.txt:
-         * This value will
-         * change depending on the current STRUcture, MODE and TYPE of the data
-         * connection, or a data connection which would be created were one
-         * created now.  Thus, the result of the SIZE command is dependent on
-         * the currently established STRU, MODE and TYPE parameters.
-         */
-        /* Therefore: switch to binary if the user did not specify ";type=a" */
-        ftp_set_TYPE(xfer_type, r, origin, bb, &ftpmessage);
-        rc = proxy_ftp_command(apr_pstrcat(p, "SIZE ",
-                           ftp_escape_globbingchars(p, path), CRLF, NULL),
-                           r, origin, bb, &ftpmessage);
-        if (rc == -1 || rc == 421) {
-            return ap_proxyerror(r, HTTP_BAD_GATEWAY,
-                                 "Error reading from remote server");
-        }
-        else if (rc == 213) {/* Size command ok */
-            int j;
-            for (j = 0; apr_isdigit(ftpmessage[j]); j++)
-                ;
-            ftpmessage[j] = '\0';
-            if (ftpmessage[0] != '\0')
-                 size = ftpmessage; /* already pstrdup'ed: no copy necessary */
-        }
-        else if (rc == 550) {    /* Not a regular file */
-            ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, 0, r->server,
-                             "proxy: FTP: SIZE shows this is a directory");
-            dirlisting = 1;
-            rc = proxy_ftp_command(apr_pstrcat(p, "CWD ", 
-                           ftp_escape_globbingchars(p, path), CRLF, NULL),
-                           r, origin, bb, &ftpmessage);
-            /* possible results: 250, 421, 500, 501, 502, 530, 550 */
-            /* 250 Requested file action okay, completed. */
-            /* 421 Service not available, closing control connection. */
-            /* 500 Syntax error, command unrecognized. */
-            /* 501 Syntax error in parameters or arguments. */
-            /* 502 Command not implemented. */
-            /* 530 Not logged in. */
-            /* 550 Requested action not taken. */
-            if (rc == -1 || rc == 421) {
-                return ap_proxyerror(r, HTTP_BAD_GATEWAY,
-                                     "Error reading from remote server");
-            }
-            if (rc == 550) {
-                return ap_proxyerror(r, HTTP_NOT_FOUND, ftpmessage);
-            }
-            if (rc != 250) {
-                return ap_proxyerror(r, HTTP_BAD_GATEWAY, ftpmessage);
-            }
-            path = "";
-            len = 0;
-        }
-    }
-
-    cwd = ftp_get_PWD(r, origin, bb);
-    if (cwd != NULL) {
-        apr_table_set(r->notes, "Directory-PWD", cwd);
-    }
-
-    if (dirlisting) {
-        ftp_set_TYPE('A', r, origin, bb, NULL);
-        /* If the current directory contains no slash, we are talking to
-         * a non-unix ftp system. Try LIST instead of "LIST -lag", it
-         * should return a long listing anyway (unlike NLST).
-         * Some exotic FTP servers might choke on the "-lag" switch.
-         */
-        /* Note that we do not escape the path here, to allow for
-         * queries like: ftp://user@host/apache/src/server/http_*.c
-         */
-        if (len != 0)
-            buf = apr_pstrcat(p, "LIST ", path, CRLF, NULL);
-        else if (cwd == NULL || strchr(cwd, '/') != NULL)
-            buf = apr_pstrcat(p, "LIST -lag", CRLF, NULL);
-        else
-            buf = "LIST" CRLF;
-    }
-    else {
-        /* switch to binary if the user did not specify ";type=a" */
-        ftp_set_TYPE(xfer_type, r, origin, bb, &ftpmessage);
-#if defined(USE_MDTM) && (defined(HAVE_TIMEGM) || defined(HAVE_GMTOFF))
-        /* from draft-ietf-ftpext-mlst-14.txt:
-         *   The FTP command, MODIFICATION TIME (MDTM), can be used to determine
-         *   when a file in the server NVFS was last modified.     <..>
-         *   The syntax of a time value is:
-         *           time-val       = 14DIGIT [ "." 1*DIGIT ]      <..>
-         *     Symbolically, a time-val may be viewed as
-         *           YYYYMMDDHHMMSS.sss
-         *     The "." and subsequent digits ("sss") are optional. <..>
-         *     Time values are always represented in UTC (GMT)
-         */
-        rc = proxy_ftp_command(apr_pstrcat(p, "MDTM ", ftp_escape_globbingchars(p, path), CRLF, NULL),
-                               r, origin, bb, &ftpmessage);
-        /* then extract the Last-Modified time from it (YYYYMMDDhhmmss or YYYYMMDDhhmmss.xxx GMT). */
-        if (rc == 213) {
-	    struct {
-	        char YYYY[4+1];
-		char MM[2+1];
-		char DD[2+1];
-		char hh[2+1];
-		char mm[2+1];
-		char ss[2+1];
-	    } time_val;
-	    if (6 == sscanf(ftpmessage, "%4[0-9]%2[0-9]%2[0-9]%2[0-9]%2[0-9]%2[0-9]",
-	        time_val.YYYY, time_val.MM, time_val.DD, time_val.hh, time_val.mm, time_val.ss)) {
-                struct tm tms;
-		memset (&tms, '\0', sizeof tms);
-		tms.tm_year = atoi(time_val.YYYY) - 1900;
-		tms.tm_mon  = atoi(time_val.MM)   - 1;
-		tms.tm_mday = atoi(time_val.DD);
-		tms.tm_hour = atoi(time_val.hh);
-		tms.tm_min  = atoi(time_val.mm);
-		tms.tm_sec  = atoi(time_val.ss);
-#ifdef HAVE_TIMEGM /* Does system have timegm()? */
-		mtime = timegm(&tms);
-		mtime *= APR_USEC_PER_SEC;
-#elif HAVE_GMTOFF /* does struct tm have a member tm_gmtoff? */
-                /* mktime will subtract the local timezone, which is not what we want.
-		 * Add it again because the MDTM string is GMT
-		 */
-		mtime = mktime(&tms);
-		mtime += tms.tm_gmtoff;
-		mtime *= APR_USEC_PER_SEC;
-#else
-		mtime = 0L;
-#endif
-            }
-	}
-#endif /* USE_MDTM */
-/* FIXME: Handle range requests - send REST */
-        buf = apr_pstrcat(p, "RETR ", ftp_escape_globbingchars(p, path), CRLF, NULL);
-    }
-    rc = proxy_ftp_command(buf, r, origin, bb, &ftpmessage);
-    /* rc is an intermediate response for the LIST or RETR commands */
-
-    /*
-     * RETR: 110, 125, 150, 226, 250, 421, 425, 426, 450, 451, 500, 501, 530,
-     * 550 NLST: 125, 150, 226, 250, 421, 425, 426, 450, 451, 500, 501, 502,
-     * 530
-     */
-    /* 110 Restart marker reply. */
-    /* 125 Data connection already open; transfer starting. */
-    /* 150 File status okay; about to open data connection. */
-    /* 226 Closing data connection. */
-    /* 250 Requested file action okay, completed. */
-    /* 421 Service not available, closing control connection. */
-    /* 425 Can't open data connection. */
-    /* 426 Connection closed; transfer aborted. */
-    /* 450 Requested file action not taken. */
-    /* 451 Requested action aborted. Local error in processing. */
-    /* 500 Syntax error, command unrecognized. */
-    /* 501 Syntax error in parameters or arguments. */
-    /* 530 Not logged in. */
-    /* 550 Requested action not taken. */
-    if (rc == -1 || rc == 421) {
-        return ap_proxyerror(r, HTTP_BAD_GATEWAY,
-                             "Error reading from remote server");
-    }
-    if (rc == 550) {
-        ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, 0, r->server,
-                     "proxy: FTP: RETR failed, trying LIST instead");
-
-        /* Directory Listings should always be fetched in ASCII mode */
-        dirlisting = 1;
-        ftp_set_TYPE('A', r, origin, bb, NULL);
-
-        rc = proxy_ftp_command(apr_pstrcat(p, "CWD ",
-                               ftp_escape_globbingchars(p, path), CRLF, NULL),
-                               r, origin, bb, &ftpmessage);
-        /* possible results: 250, 421, 500, 501, 502, 530, 550 */
-        /* 250 Requested file action okay, completed. */
-        /* 421 Service not available, closing control connection. */
-        /* 500 Syntax error, command unrecognized. */
-        /* 501 Syntax error in parameters or arguments. */
-        /* 502 Command not implemented. */
-        /* 530 Not logged in. */
-        /* 550 Requested action not taken. */
-        if (rc == -1 || rc == 421) {
-            return ap_proxyerror(r, HTTP_BAD_GATEWAY,
-                                 "Error reading from remote server");
-        }
-        if (rc == 550) {
-            return ap_proxyerror(r, HTTP_NOT_FOUND, ftpmessage);
-        }
-        if (rc != 250) {
-            return ap_proxyerror(r, HTTP_BAD_GATEWAY, ftpmessage);
-        }
-
-        /* Update current directory after CWD */
-        cwd = ftp_get_PWD(r, origin, bb);
-        if (cwd != NULL) {
-            apr_table_set(r->notes, "Directory-PWD", cwd);
-        }
-
-        /* See above for the "LIST" vs. "LIST -lag" discussion. */
-        rc = proxy_ftp_command((cwd == NULL || strchr(cwd, '/') != NULL)
-                               ? "LIST -lag" CRLF : "LIST" CRLF,
-                               r, origin, bb, &ftpmessage);
-
-        /* rc is an intermediate response for the LIST command (125 transfer starting, 150 opening data connection) */
-        if (rc == -1 || rc == 421)
-            return ap_proxyerror(r, HTTP_BAD_GATEWAY,
-                                 "Error reading from remote server");
-    }
-    if (rc != 125 && rc != 150 && rc != 226 && rc != 250) {
-        return ap_proxyerror(r, HTTP_BAD_GATEWAY, ftpmessage);
-    }
-
-    r->status = HTTP_OK;
-    r->status_line = "200 OK";
-
-    apr_rfc822_date(dates, r->request_time);
-    apr_table_setn(r->headers_out, "Date", dates);
-    apr_table_setn(r->headers_out, "Server", ap_get_server_version());
-
-    /* set content-type */
-    if (dirlisting) {
-        r->content_type = "text/html";
-    }
-    else {
-        if (r->content_type) {
-            ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, 0, r->server,
-                     "proxy: FTP: Content-Type set to %s", r->content_type);
-        }
-        else {
-            r->content_type = ap_default_type(r);
-        }
-        if (xfer_type != 'A' && size != NULL) {
-            /* We "trust" the ftp server to really serve (size) bytes... */
-            apr_table_setn(r->headers_out, "Content-Length", size);
-            ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, 0, r->server,
-                         "proxy: FTP: Content-Length set to %s", size);
-        }
-    }
-    apr_table_setn(r->headers_out, "Content-Type", r->content_type);
-    ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, 0, r->server,
-                 "proxy: FTP: Content-Type set to %s", r->content_type);
-
-#if defined(USE_MDTM) && (defined(HAVE_TIMEGM) || defined(HAVE_GMTOFF))
-    if (mtime != 0L) {
-        char datestr[APR_RFC822_DATE_LEN];
-        apr_rfc822_date(datestr, mtime);
-        apr_table_set(r->headers_out, "Last-Modified", datestr);
-        ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, 0, r->server,
-                 "proxy: FTP: Last-Modified set to %s", datestr);
-    }
-#endif /* USE_MDTM */
-
-    /* If an encoding has been set by mistake, delete it.
-     * @@@ FIXME (e.g., for ftp://user@host/file*.tar.gz,
-     * @@@        the encoding is currently set to x-gzip)
-     */
-    if (dirlisting && r->content_encoding != NULL)
-        r->content_encoding = NULL;
-
-    /* set content-encoding (not for dir listings, they are uncompressed)*/
-    if (r->content_encoding != NULL && r->content_encoding[0] != '\0') {
-        ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, 0, r->server,
-             "proxy: FTP: Content-Encoding set to %s", r->content_encoding);
-        apr_table_setn(r->headers_out, "Content-Encoding", r->content_encoding);
-    }
-
-    /* wait for connection */
-    if (use_port) {
-        for (;;) {
-            rv = apr_accept(&data_sock, local_sock, r->pool);
-            if (rv == APR_EINTR) {
-                continue;
-            }
-            else if (rv == APR_SUCCESS) {
-                break;
-            }
-            else {
-                ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
-                            "proxy: FTP: failed to accept data connection");
-                return HTTP_BAD_GATEWAY;
-            }
-        }
-    }
-
-    /* the transfer socket is now open, create a new connection */
-    data = ap_run_create_connection(p, r->server, data_sock, r->connection->id, r->connection->sbh);
-    if (!data) {
-        /*
-         * the peer reset the connection already; ap_run_create_connection() closed
-         * the socket
-         */
-        ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, 0, r->server,
-          "proxy: FTP: an error occurred creating the transfer connection");
-        return HTTP_INTERNAL_SERVER_ERROR;
-    }
-
-    /* set up the connection filters */
-    ap_run_pre_connection(data, data_sock);
-
-    /*
-     * VI: Receive the Response ------------------------
-     *
-     * Get response from the remote ftp socket, and pass it up the filter chain.
-     */
-
-    /* send response */
-    r->sent_bodyct = 1;
-
-    if (dirlisting) {
-        /* insert directory filter */
-        ap_add_output_filter("PROXY_SEND_DIR", NULL, r, r->connection);
-    }
-
-    /* send body */
-    if (!r->header_only) {
-        apr_bucket *e;
-        int finish = FALSE;
-
-        ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, 0, r->server,
-                     "proxy: FTP: start body send");
-
-        /* read the body, pass it to the output filters */
-        while (ap_get_brigade(data->input_filters, 
-                              bb, 
-                              AP_MODE_READBYTES, 
-                              APR_BLOCK_READ, 
-                              conf->io_buffer_size) == APR_SUCCESS) {
-#if DEBUGGING
-            {
-                apr_off_t readbytes;
-                apr_brigade_length(bb, 0, &readbytes);
-                ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0,
-                             r->server, "proxy (PID %d): readbytes: %#x",
-                             getpid(), readbytes);
-            }
-#endif
-            /* sanity check */
-            if (APR_BRIGADE_EMPTY(bb)) {
-                apr_brigade_cleanup(bb);
-                break;
-            }
-
-            /* found the last brigade? */
-            if (APR_BUCKET_IS_EOS(APR_BRIGADE_LAST(bb))) {
-                /* if this is the last brigade, cleanup the
-                 * backend connection first to prevent the
-                 * backend server from hanging around waiting
-                 * for a slow client to eat these bytes
-                 */
-                ap_flush_conn(data);
-                apr_socket_close(data_sock);
-                data_sock = NULL;
-                ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r->server,
-                             "proxy: FTP: data connection closed");
-                /* signal that we must leave */
-                finish = TRUE;
-            }
-
-            /* if no EOS yet, then we must flush */
-            if (FALSE == finish) {
-                e = apr_bucket_flush_create();
-                APR_BRIGADE_INSERT_TAIL(bb, e);
-            }
-
-            /* try send what we read */
-            if (ap_pass_brigade(r->output_filters, bb) != APR_SUCCESS) {
-                /* Ack! Phbtt! Die! User aborted! */
-                finish = TRUE;
-            }
-
-            /* make sure we always clean up after ourselves */
-            apr_brigade_cleanup(bb);
-
-            /* if we are done, leave */
-            if (TRUE == finish) {
-                break;
-            }
-        }
-        ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r->server,
-                     "proxy: FTP: end body send");
-
-    }
-    if (data_sock) {
-        ap_flush_conn(data);
-        apr_socket_close(data_sock);
-        ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r->server,
-                     "proxy: FTP: data connection closed");
-    }
-
-    /* Retrieve the final response for the RETR or LIST commands */
-    rc = proxy_ftp_command(NULL, r, origin, bb, &ftpmessage);
-    apr_brigade_cleanup(bb);
-
-    /*
-     * VII: Clean Up -------------
-     *
-     * If there are no KeepAlives, or if the connection has been signalled to
-     * close, close the socket and clean up
-     */
-
-    /* finish */
-    rc = proxy_ftp_command("QUIT" CRLF,
-                           r, origin, bb, &ftpmessage);
-    /* responses: 221, 500 */
-    /* 221 Service closing control connection. */
-    /* 500 Syntax error, command unrecognized. */
-    ap_flush_conn(origin);
-    if (origin_sock) {
-        apr_socket_close(origin_sock);
-        origin_sock = NULL;
-    }
-    apr_brigade_destroy(bb);
-    return OK;
-}
-
-static void ap_proxy_ftp_register_hook(apr_pool_t *p)
-{
-    /* hooks */
-    proxy_hook_scheme_handler(ap_proxy_ftp_handler, NULL, NULL, APR_HOOK_MIDDLE);
-    proxy_hook_canon_handler(ap_proxy_ftp_canon, NULL, NULL, APR_HOOK_MIDDLE);
-    /* filters */
-    ap_register_output_filter("PROXY_SEND_DIR", ap_proxy_send_dir_filter, AP_FTYPE_RESOURCE);
-}
-
-module AP_MODULE_DECLARE_DATA proxy_ftp_module = {
-    STANDARD20_MODULE_STUFF,
-    NULL,                       /* create per-directory config structure */
-    NULL,                       /* merge per-directory config structures */
-    NULL,                       /* create per-server config structure */
-    NULL,                       /* merge per-server config structures */
-    NULL,                       /* command apr_table_t */
-    ap_proxy_ftp_register_hook  /* register hooks */
-};
diff --git a/modules/proxy/proxy_http.c b/modules/proxy/proxy_http.c
deleted file mode 100644
index 8130e2c..0000000
--- a/modules/proxy/proxy_http.c
+++ /dev/null
@@ -1,1049 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-/* HTTP routines for Apache proxy */
-
-#include "mod_proxy.h"
-
-module AP_MODULE_DECLARE_DATA proxy_http_module;
-
-int ap_proxy_http_canon(request_rec *r, char *url);
-int ap_proxy_http_handler(request_rec *r, proxy_server_conf *conf,
-                          char *url, const char *proxyname, 
-                          apr_port_t proxyport);
-
-typedef struct {
-    const char     *name;
-    apr_port_t      port;
-    apr_sockaddr_t *addr;
-    apr_socket_t   *sock;
-    int             close;
-} proxy_http_conn_t;
-
-static apr_status_t ap_proxy_http_cleanup(request_rec *r,
-                                          proxy_http_conn_t *p_conn,
-                                          proxy_conn_rec *backend);
-
-/*
- * Canonicalise http-like URLs.
- *  scheme is the scheme for the URL
- *  url    is the URL starting with the first '/'
- *  def_port is the default port for this scheme.
- */
-int ap_proxy_http_canon(request_rec *r, char *url)
-{
-    char *host, *path, *search, sport[7];
-    const char *err;
-    const char *scheme;
-    apr_port_t port, def_port;
-
-    /* ap_default_port_for_scheme() */
-    if (strncasecmp(url, "http:", 5) == 0) {
-        url += 5;
-        scheme = "http";
-    }
-    else if (strncasecmp(url, "https:", 6) == 0) {
-        url += 6;
-        scheme = "https";
-    }
-    else {
-        return DECLINED;
-    }
-    def_port = apr_uri_default_port_for_scheme(scheme);
-
-    ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r->server,
-             "proxy: HTTP: canonicalising URL %s", url);
-
-    /* do syntatic check.
-     * We break the URL into host, port, path, search
-     */
-    port = def_port;
-    err = ap_proxy_canon_netloc(r->pool, &url, NULL, NULL, &host, &port);
-    if (err)
-        return HTTP_BAD_REQUEST;
-
-    /* now parse path/search args, according to rfc1738 */
-    /* N.B. if this isn't a true proxy request, then the URL _path_
-     * has already been decoded.  True proxy requests have r->uri
-     * == r->unparsed_uri, and no others have that property.
-     */
-    if (r->uri == r->unparsed_uri) {
-        search = strchr(url, '?');
-        if (search != NULL)
-            *(search++) = '\0';
-    }
-    else
-        search = r->args;
-
-    /* process path */
-    path = ap_proxy_canonenc(r->pool, url, strlen(url), enc_path, r->proxyreq);
-    if (path == NULL)
-        return HTTP_BAD_REQUEST;
-
-    if (port != def_port)
-        apr_snprintf(sport, sizeof(sport), ":%d", port);
-    else
-        sport[0] = '\0';
-
-    r->filename = apr_pstrcat(r->pool, "proxy:", scheme, "://", host, sport, 
-            "/", path, (search) ? "?" : "", (search) ? search : "", NULL);
-    return OK;
-}
- 
-static const char *ap_proxy_location_reverse_map(request_rec *r, proxy_server_conf *conf, const char *url)
-{
-    struct proxy_alias *ent;
-    int i, l1, l2;
-    char *u;
-
-    /* XXX FIXME: Make sure this handled the ambiguous case of the :80
-     * after the hostname */
-
-    l1 = strlen(url);
-    ent = (struct proxy_alias *)conf->raliases->elts;
-    for (i = 0; i < conf->raliases->nelts; i++) {
-        l2 = strlen(ent[i].real);
-        if (l1 >= l2 && strncmp(ent[i].real, url, l2) == 0) {
-            u = apr_pstrcat(r->pool, ent[i].fake, &url[l2], NULL);
-            return ap_construct_url(r->pool, u, r);
-        }
-    }
-    return url;
-}
-
-/* Clear all connection-based headers from the incoming headers table */
-static void ap_proxy_clear_connection(apr_pool_t *p, apr_table_t *headers)
-{
-    const char *name;
-    char *next = apr_pstrdup(p, apr_table_get(headers, "Connection"));
-
-    apr_table_unset(headers, "Proxy-Connection");
-    if (!next)
-        return;
-
-    while (*next) {
-        name = next;
-        while (*next && !apr_isspace(*next) && (*next != ',')) {
-            ++next;
-        }
-        while (*next && (apr_isspace(*next) || (*next == ','))) {
-            *next = '\0';
-            ++next;
-        }
-        apr_table_unset(headers, name);
-    }
-    apr_table_unset(headers, "Connection");
-}
-
-static
-apr_status_t ap_proxy_http_determine_connection(apr_pool_t *p, request_rec *r,
-                                                proxy_http_conn_t *p_conn,
-                                                conn_rec *c,
-                                                proxy_server_conf *conf,
-                                                apr_uri_t *uri,
-                                                char **url,
-                                                const char *proxyname,
-                                                apr_port_t proxyport,
-                                                char *server_portstr,
-                                                int server_portstr_size) {
-    int server_port;
-    apr_status_t err;
-    apr_sockaddr_t *uri_addr;
-    /*
-     * Break up the URL to determine the host to connect to
-     */
-
-    /* we break the URL into host, port, uri */
-    if (APR_SUCCESS != apr_uri_parse(p, *url, uri)) {
-        return ap_proxyerror(r, HTTP_BAD_REQUEST,
-                             apr_pstrcat(p,"URI cannot be parsed: ", *url,
-                                         NULL));
-    }
-    if (!uri->port) {
-        uri->port = apr_uri_default_port_for_scheme(uri->scheme);
-    }
-
-    ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r->server,
-                 "proxy: HTTP connecting %s to %s:%d", *url, uri->hostname,
-                 uri->port);
-
-    /* do a DNS lookup for the destination host */
-    /* see memory note above */
-    err = apr_sockaddr_info_get(&uri_addr, apr_pstrdup(c->pool, uri->hostname),
-                                APR_UNSPEC, uri->port, 0, c->pool);
-
-    /* allocate these out of the connection pool - the check on
-     * r->connection->id makes sure that this string does not get accessed
-     * past the connection lifetime */
-    /* are we connecting directly, or via a proxy? */
-    if (proxyname) {
-        p_conn->name = apr_pstrdup(c->pool, proxyname);
-        p_conn->port = proxyport;
-        /* see memory note above */
-        err = apr_sockaddr_info_get(&p_conn->addr, p_conn->name, APR_UNSPEC,
-                                    p_conn->port, 0, c->pool);
-    } else {
-        p_conn->name = apr_pstrdup(c->pool, uri->hostname);
-        p_conn->port = uri->port;
-        p_conn->addr = uri_addr;
-        *url = apr_pstrcat(p, uri->path, uri->query ? "?" : "",
-                           uri->query ? uri->query : "",
-                           uri->fragment ? "#" : "",
-                           uri->fragment ? uri->fragment : "", NULL);
-    }
-
-    if (err != APR_SUCCESS) {
-        return ap_proxyerror(r, HTTP_BAD_GATEWAY,
-                             apr_pstrcat(p, "DNS lookup failure for: ",
-                                         p_conn->name, NULL));
-    }
-
-    /* Get the server port for the Via headers */
-    {
-        server_port = ap_get_server_port(r);
-        if (ap_is_default_port(server_port, r)) {
-            strcpy(server_portstr,"");
-        } else {
-            apr_snprintf(server_portstr, server_portstr_size, ":%d",
-                         server_port);
-        }
-    }
-
-    /* check if ProxyBlock directive on this host */
-    if (OK != ap_proxy_checkproxyblock(r, conf, uri_addr)) {
-        return ap_proxyerror(r, HTTP_FORBIDDEN,
-                             "Connect to remote machine blocked");
-    }
-    return OK;
-}
-
-static
-apr_status_t ap_proxy_http_create_connection(apr_pool_t *p, request_rec *r,
-                                             proxy_http_conn_t *p_conn,
-                                             conn_rec *c, conn_rec **origin,
-                                             proxy_conn_rec *backend,
-                                             proxy_server_conf *conf,
-                                             const char *proxyname) {
-    int failed=0, new=0;
-    apr_socket_t *client_socket = NULL;
-
-    /* We have determined who to connect to. Now make the connection, supporting
-     * a KeepAlive connection.
-     */
-
-    /* get all the possible IP addresses for the destname and loop through them
-     * until we get a successful connection
-     */
-
-    /* if a keepalive socket is already open, check whether it must stay
-     * open, or whether it should be closed and a new socket created.
-     */
-    /* see memory note above */
-    if (backend->connection) {
-        client_socket = ap_get_module_config(backend->connection->conn_config, &core_module);
-        if ((backend->connection->id == c->id) &&
-            (backend->port == p_conn->port) &&
-            (backend->hostname) &&
-            (!apr_strnatcasecmp(backend->hostname, p_conn->name))) {
-            ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r->server,
-                         "proxy: keepalive address match (keep original socket)");
-        } else {
-            ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r->server,
-                         "proxy: keepalive address mismatch / connection has"
-                         " changed (close old socket (%s/%s, %d/%d))", 
-                         p_conn->name, backend->hostname, p_conn->port,
-                         backend->port);
-            apr_socket_close(client_socket);
-            backend->connection = NULL;
-        }
-    }
-
-    /* get a socket - either a keepalive one, or a new one */
-    new = 1;
-    if ((backend->connection) && (backend->connection->id == c->id)) {
-        apr_size_t buffer_len = 1;
-        char test_buffer[1]; 
-        apr_status_t socket_status;
-        apr_int32_t current_timeout;
-
-        /* use previous keepalive socket */
-        *origin = backend->connection;
-        p_conn->sock = client_socket;
-        new = 0;
-
-        /* reset the connection filters */
-        ap_proxy_reset_output_filters(*origin);
-
-        /* save timeout */
-        apr_getsocketopt(p_conn->sock, APR_SO_TIMEOUT, &current_timeout);
-        /* set no timeout */
-        apr_setsocketopt(p_conn->sock, APR_SO_TIMEOUT, 0);
-        socket_status = apr_recv(p_conn->sock, test_buffer, &buffer_len);
-        /* put back old timeout */
-        apr_setsocketopt(p_conn->sock, APR_SO_TIMEOUT, current_timeout);
-        if ( APR_STATUS_IS_EOF(socket_status) ) {
-            ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, NULL,
-                         "proxy: HTTP: previous connection is closed");
-            new = 1;
-        }
-    }
-    if (new) {
-
-        /* create a new socket */
-        backend->connection = NULL;
-
-        /*
-         * At this point we have a list of one or more IP addresses of
-         * the machine to connect to. If configured, reorder this
-         * list so that the "best candidate" is first try. "best
-         * candidate" could mean the least loaded server, the fastest
-         * responding server, whatever.
-         *
-         * For now we do nothing, ie we get DNS round robin.
-         * XXX FIXME
-         */
-        failed = ap_proxy_connect_to_backend(&p_conn->sock, "HTTP",
-                                             p_conn->addr, p_conn->name,
-                                             conf, r->server, c->pool);
-
-        /* handle a permanent error on the connect */
-        if (failed) {
-            if (proxyname) {
-                return DECLINED;
-            } else {
-                return HTTP_BAD_GATEWAY;
-            }
-        }
-
-        ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r->server,
-                     "proxy: socket is connected");
-
-        /* the socket is now open, create a new backend server connection */
-        *origin = ap_run_create_connection(c->pool, r->server, p_conn->sock,
-                                           r->connection->id, r->connection->sbh);
-        if (!origin) {
-        /* the peer reset the connection already; ap_run_create_connection() 
-         * closed the socket
-         */
-            ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0,
-                         r->server, "proxy: an error occurred creating a "
-                         "new connection to %pI (%s)", p_conn->addr,
-                         p_conn->name);
-            apr_socket_close(p_conn->sock);
-            return HTTP_INTERNAL_SERVER_ERROR;
-        }
-        backend->connection = *origin;
-        backend->hostname = apr_pstrdup(c->pool, p_conn->name);
-        backend->port = p_conn->port;
-
-        ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r->server,
-                     "proxy: connection complete to %pI (%s)",
-                     p_conn->addr, p_conn->name);
-
-        /* set up the connection filters */
-        ap_run_pre_connection(*origin, p_conn->sock);
-    }
-    return OK;
-}
-
-static
-apr_status_t ap_proxy_http_request(apr_pool_t *p, request_rec *r,
-                                   proxy_http_conn_t *p_conn, conn_rec *origin, 
-                                   proxy_server_conf *conf,
-                                   apr_uri_t *uri,
-                                   char *url, apr_bucket_brigade *bb,
-                                   char *server_portstr) {
-    char buffer[HUGE_STRING_LEN];
-    char *buf;
-    apr_bucket *e;
-    const apr_array_header_t *headers_in_array;
-    const apr_table_entry_t *headers_in;
-    int counter;
-    /*
-     * Send the HTTP/1.1 request to the remote server
-     */
-
-    /* strip connection listed hop-by-hop headers from the request */
-    /* even though in theory a connection: close coming from the client
-     * should not affect the connection to the server, it's unlikely
-     * that subsequent client requests will hit this thread/process, so
-     * we cancel server keepalive if the client does.
-     */
-    p_conn->close += ap_proxy_liststr(apr_table_get(r->headers_in,
-                                                     "Connection"), "close");
-    /* sub-requests never use keepalives */
-    if (r->main) {
-        p_conn->close++;
-    }
-
-    ap_proxy_clear_connection(p, r->headers_in);
-    if (p_conn->close) {
-        apr_table_setn(r->headers_in, "Connection", "close");
-        origin->keepalive = 0;
-    }
-
-    buf = apr_pstrcat(p, r->method, " ", url, " HTTP/1.1" CRLF, NULL);
-    e = apr_bucket_pool_create(buf, strlen(buf), p);
-    APR_BRIGADE_INSERT_TAIL(bb, e);
-    if ( conf->preserve_host == 0 ) {
-        if (uri->port_str && uri->port != DEFAULT_HTTP_PORT) {
-            buf = apr_pstrcat(p, "Host: ", uri->hostname, ":", uri->port_str, CRLF,
-                            NULL);
-        } else {
-            buf = apr_pstrcat(p, "Host: ", uri->hostname, CRLF, NULL);
-        }
-    } 
-    else {
-        /* don't want to use r->hostname, as the incoming header might have a 
-         * port attached 
-         */
-        const char* hostname = apr_table_get(r->headers_in,"Host");        
-        if (!hostname) {
-            hostname =  r->server->server_hostname;
-            ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_WARNING, 0, r,
-                          "proxy: no HTTP 0.9 request (with no host line) "
-                          "on incoming request and preserve host set "
-                          "forcing hostname to be %s for uri %s", 
-                          hostname, 
-                          r->uri );
-        }
-        buf = apr_pstrcat(p, "Host: ", hostname, CRLF, NULL);
-    }
-    e = apr_bucket_pool_create(buf, strlen(buf), p);        
-    APR_BRIGADE_INSERT_TAIL(bb, e);
-
-    /* handle Via */
-    if (conf->viaopt == via_block) {
-        /* Block all outgoing Via: headers */
-        apr_table_unset(r->headers_in, "Via");
-    } else if (conf->viaopt != via_off) {
-        /* Create a "Via:" request header entry and merge it */
-        /* Generate outgoing Via: header with/without server comment: */
-        apr_table_mergen(r->headers_in, "Via",
-                         (conf->viaopt == via_full)
-                         ? apr_psprintf(p, "%d.%d %s%s (%s)",
-                                        HTTP_VERSION_MAJOR(r->proto_num),
-                                        HTTP_VERSION_MINOR(r->proto_num),
-                                        ap_get_server_name(r), server_portstr,
-                                        AP_SERVER_BASEVERSION)
-                         : apr_psprintf(p, "%d.%d %s%s",
-                                        HTTP_VERSION_MAJOR(r->proto_num),
-                                        HTTP_VERSION_MINOR(r->proto_num),
-                                        ap_get_server_name(r), server_portstr)
-        );
-    }
-
-    /* X-Forwarded-*: handling
-     *
-     * XXX Privacy Note:
-     * -----------------
-     *
-     * These request headers are only really useful when the mod_proxy
-     * is used in a reverse proxy configuration, so that useful info
-     * about the client can be passed through the reverse proxy and on
-     * to the backend server, which may require the information to
-     * function properly.
-     *
-     * In a forward proxy situation, these options are a potential
-     * privacy violation, as information about clients behind the proxy
-     * are revealed to arbitrary servers out there on the internet.
-     *
-     * The HTTP/1.1 Via: header is designed for passing client
-     * information through proxies to a server, and should be used in
-     * a forward proxy configuation instead of X-Forwarded-*. See the
-     * ProxyVia option for details.
-     */
-
-    if (PROXYREQ_REVERSE == r->proxyreq) {
-        const char *buf;
-
-        /* Add X-Forwarded-For: so that the upstream has a chance to
-         * determine, where the original request came from.
-         */
-        apr_table_mergen(r->headers_in, "X-Forwarded-For",
-                       r->connection->remote_ip);
-
-        /* Add X-Forwarded-Host: so that upstream knows what the
-         * original request hostname was.
-         */
-        if ((buf = apr_table_get(r->headers_in, "Host"))) {
-            apr_table_mergen(r->headers_in, "X-Forwarded-Host", buf);
-        }
-
-        /* Add X-Forwarded-Server: so that upstream knows what the
-         * name of this proxy server is (if there are more than one)
-         * XXX: This duplicates Via: - do we strictly need it?
-         */
-        apr_table_mergen(r->headers_in, "X-Forwarded-Server",
-                       r->server->server_hostname);
-    }
-
-    /* send request headers */
-    headers_in_array = apr_table_elts(r->headers_in);
-    headers_in = (const apr_table_entry_t *) headers_in_array->elts;
-    for (counter = 0; counter < headers_in_array->nelts; counter++) {
-        if (headers_in[counter].key == NULL || headers_in[counter].val == NULL
-
-        /* Clear out hop-by-hop request headers not to send
-         * RFC2616 13.5.1 says we should strip these headers
-         */
-                /* Already sent */
-            || !apr_strnatcasecmp(headers_in[counter].key, "Host")
-
-            || !apr_strnatcasecmp(headers_in[counter].key, "Keep-Alive")
-            || !apr_strnatcasecmp(headers_in[counter].key, "TE")
-            || !apr_strnatcasecmp(headers_in[counter].key, "Trailer")
-            || !apr_strnatcasecmp(headers_in[counter].key, "Transfer-Encoding")
-            || !apr_strnatcasecmp(headers_in[counter].key, "Upgrade")
-
-        /* XXX: @@@ FIXME: "Proxy-Authorization" should *only* be 
-         * suppressed if THIS server requested the authentication,
-         * not when a frontend proxy requested it!
-         *
-         * The solution to this problem is probably to strip out
-         * the Proxy-Authorisation header in the authorisation
-         * code itself, not here. This saves us having to signal
-         * somehow whether this request was authenticated or not.
-         */
-            || !apr_strnatcasecmp(headers_in[counter].key,"Proxy-Authorization")
-            || !apr_strnatcasecmp(headers_in[counter].key,"Proxy-Authenticate")) {
-            continue;
-        }
-        /* for sub-requests, ignore freshness/expiry headers */
-        if (r->main) {
-                if (headers_in[counter].key == NULL || headers_in[counter].val == NULL
-                     || !apr_strnatcasecmp(headers_in[counter].key, "If-Match")
-                     || !apr_strnatcasecmp(headers_in[counter].key, "If-Modified-Since")
-                     || !apr_strnatcasecmp(headers_in[counter].key, "If-Range")
-                     || !apr_strnatcasecmp(headers_in[counter].key, "If-Unmodified-Since")                     
-                     || !apr_strnatcasecmp(headers_in[counter].key, "If-None-Match")) {
-                    continue;
-                }
-        }
-
-        buf = apr_pstrcat(p, headers_in[counter].key, ": ",
-                          headers_in[counter].val, CRLF,
-                          NULL);
-        e = apr_bucket_pool_create(buf, strlen(buf), p);
-        APR_BRIGADE_INSERT_TAIL(bb, e);
-    }
-
-    /* add empty line at the end of the headers */
-    e = apr_bucket_immortal_create(CRLF, sizeof(CRLF)-1);
-    APR_BRIGADE_INSERT_TAIL(bb, e);
-    e = apr_bucket_flush_create();
-    APR_BRIGADE_INSERT_TAIL(bb, e);
-
-    ap_pass_brigade(origin->output_filters, bb);
-
-    /* send the request data, if any. */
-    if (ap_should_client_block(r)) {
-        while ((counter = ap_get_client_block(r, buffer, sizeof(buffer))) > 0) {
-            e = apr_bucket_pool_create(buffer, counter, p);
-            APR_BRIGADE_INSERT_TAIL(bb, e);
-            e = apr_bucket_flush_create();
-            APR_BRIGADE_INSERT_TAIL(bb, e);
-            ap_pass_brigade(origin->output_filters, bb);
-            apr_brigade_cleanup(bb);
-        }
-    }
-    return OK;
-}
-
-static
-apr_status_t ap_proxy_http_process_response(apr_pool_t * p, request_rec *r,
-                                            proxy_http_conn_t *p_conn,
-                                            conn_rec *origin,
-                                            proxy_conn_rec *backend,
-                                            proxy_server_conf *conf,
-                                            apr_bucket_brigade *bb,
-                                            char *server_portstr) {
-    char buffer[HUGE_STRING_LEN];
-    request_rec *rp;
-    apr_bucket *e;
-    int len, backasswards;
-    int received_continue = 1; /* flag to indicate if we should
-                                * loop over response parsing logic
-                                * in the case that the origin told us
-                                * to HTTP_CONTINUE
-                                */
-
-    /* Get response from the remote server, and pass it up the
-     * filter chain
-     */
-
-    rp = ap_proxy_make_fake_req(origin, r);
-
-    while (received_continue) {
-        apr_brigade_cleanup(bb);
-
-        len = ap_getline(buffer, sizeof(buffer), rp, 0);
-        if (len <= 0) {
-            apr_socket_close(p_conn->sock);
-            backend->connection = NULL;
-            ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                          "proxy: error reading status line from remote "
-                          "server %s", p_conn->name);
-            return ap_proxyerror(r, HTTP_BAD_GATEWAY,
-                                 "Error reading from remote server");
-        }
-
-       /* Is it an HTTP/1 response?
-        * This is buggy if we ever see an HTTP/1.10
-        */
-        if (apr_date_checkmask(buffer, "HTTP/#.# ###*")) {
-            int major, minor;
-
-            if (2 != sscanf(buffer, "HTTP/%u.%u", &major, &minor)) {
-                major = 1;
-                minor = 1;
-            }
-            /* If not an HTTP/1 message or
-             * if the status line was > 8192 bytes
-             */
-            else if ((buffer[5] != '1') || (len >= sizeof(buffer)-1)) {
-                apr_socket_close(p_conn->sock);
-                backend->connection = NULL;
-                return ap_proxyerror(r, HTTP_BAD_GATEWAY,
-                apr_pstrcat(p, "Corrupt status line returned by remote "
-                            "server: ", buffer, NULL));
-            }
-            backasswards = 0;
-
-            buffer[12] = '\0';
-            r->status = atoi(&buffer[9]);
-
-            buffer[12] = ' ';
-            r->status_line = apr_pstrdup(p, &buffer[9]);
-
-            /* read the headers. */
-            /* N.B. for HTTP/1.0 clients, we have to fold line-wrapped headers*/
-            /* Also, take care with headers with multiple occurences. */
-
-            r->headers_out = ap_proxy_read_headers(r, rp, buffer,
-                                                   sizeof(buffer), origin);
-            if (r->headers_out == NULL) {
-                ap_log_error(APLOG_MARK, APLOG_WARNING|APLOG_NOERRNO, 0,
-                             r->server, "proxy: bad HTTP/%d.%d header "
-                             "returned by %s (%s)", major, minor, r->uri,
-                             r->method);
-                p_conn->close += 1;
-                /*
-                 * ap_send_error relies on a headers_out to be present. we
-                 * are in a bad position here.. so force everything we send out
-                 * to have nothing to do with the incoming packet
-                 */
-                r->headers_out = apr_table_make(r->pool,1);
-                r->status = HTTP_BAD_GATEWAY;
-                r->status_line = "bad gateway";
-                return r->status;
-
-            } else {
-                /* strip connection listed hop-by-hop headers from response */
-                const char *buf;
-                p_conn->close += ap_proxy_liststr(apr_table_get(r->headers_out,
-                                                                "Connection"),
-                                                  "close");
-                ap_proxy_clear_connection(p, r->headers_out);
-                if ((buf = apr_table_get(r->headers_out, "Content-Type"))) {
-                    r->content_type = apr_pstrdup(p, buf);
-                }            
-                ap_proxy_pre_http_request(origin,rp);
-            }
-
-            /* handle Via header in response */
-            if (conf->viaopt != via_off && conf->viaopt != via_block) {
-                /* create a "Via:" response header entry and merge it */
-                ap_table_mergen(r->headers_out, "Via",
-                                (conf->viaopt == via_full)
-                                ? apr_psprintf(p, "%d.%d %s%s (%s)",
-                                               HTTP_VERSION_MAJOR(r->proto_num),
-                                               HTTP_VERSION_MINOR(r->proto_num),
-                                               ap_get_server_name(r),
-                                               server_portstr,
-                                               AP_SERVER_BASEVERSION)
-                                : apr_psprintf(p, "%d.%d %s%s",
-                                               HTTP_VERSION_MAJOR(r->proto_num),
-                                               HTTP_VERSION_MINOR(r->proto_num),
-                                               ap_get_server_name(r),
-                                               server_portstr)
-                );
-            }
-
-            /* cancel keepalive if HTTP/1.0 or less */
-            if ((major < 1) || (minor < 1)) {
-                p_conn->close += 1;
-                origin->keepalive = 0;
-            }
-        } else {
-            /* an http/0.9 response */
-            backasswards = 1;
-            r->status = 200;
-            r->status_line = "200 OK";
-            p_conn->close += 1;
-        }
-
-        if ( r->status != HTTP_CONTINUE ) {
-            received_continue = 0;
-        } else {
-            ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_DEBUG, 0, NULL,
-                         "proxy: HTTP: received 100 CONTINUE");
-        }
-
-        /* we must accept 3 kinds of date, but generate only 1 kind of date */
-        {
-            const char *buf;
-            if ((buf = apr_table_get(r->headers_out, "Date")) != NULL) {
-                apr_table_set(r->headers_out, "Date",
-                              ap_proxy_date_canon(p, buf));
-            }
-            if ((buf = apr_table_get(r->headers_out, "Expires")) != NULL) {
-                apr_table_set(r->headers_out, "Expires",
-                              ap_proxy_date_canon(p, buf));
-            }
-            if ((buf = apr_table_get(r->headers_out, "Last-Modified")) != NULL) {
-                apr_table_set(r->headers_out, "Last-Modified",
-                              ap_proxy_date_canon(p, buf));
-            }
-        }
-
-        /* munge the Location and URI response headers according to
-         * ProxyPassReverse
-         */
-        {
-            const char *buf;
-            if ((buf = apr_table_get(r->headers_out, "Location")) != NULL) {
-                apr_table_set(r->headers_out, "Location",
-                              ap_proxy_location_reverse_map(r, conf, buf));
-            }
-            if ((buf = apr_table_get(r->headers_out, "Content-Location")) != NULL) {
-                apr_table_set(r->headers_out, "Content-Location",
-                              ap_proxy_location_reverse_map(r, conf, buf));
-            }
-            if ((buf = apr_table_get(r->headers_out, "URI")) != NULL) {
-                apr_table_set(r->headers_out, "URI",
-                              ap_proxy_location_reverse_map(r, conf, buf));
-            }
-        }
-
-        /* cookies are special: they must not be merged (stupid browsers) */
-        ap_proxy_table_unmerge(r->pool, r->headers_out, "Set-Cookie");
-        ap_proxy_table_unmerge(r->pool, r->headers_out, "Set-Cookie2");
-
-        r->sent_bodyct = 1;
-        /* Is it an HTTP/0.9 response? If so, send the extra data */
-        if (backasswards) {
-            apr_ssize_t cntr = len;
-            e = apr_bucket_heap_create(buffer, cntr, 1);
-            APR_BRIGADE_INSERT_TAIL(bb, e);
-        }
-
-        /* send body - but only if a body is expected */
-        if ((!r->header_only) &&                   /* not HEAD request */
-            (r->status > 199) &&                   /* not any 1xx response */
-            (r->status != HTTP_NO_CONTENT) &&      /* not 204 */
-            (r->status != HTTP_RESET_CONTENT) &&   /* not 205 */
-            (r->status != HTTP_NOT_MODIFIED)) {    /* not 304 */
-
-            /* We need to copy the output headers and treat them as input
-             * headers as well.  BUT, we need to do this before we remove
-             * TE and C-L, so that they are preserved accordingly for
-             * ap_http_filter to know where to end.
-             */
-            rp->headers_in = apr_table_copy(r->pool, r->headers_out);
-
-            /* In order for ap_set_keepalive to work properly, we can NOT
-             * have any length information stored in the output headers.
-             */
-            apr_table_unset(r->headers_out,"Transfer-Encoding");
-            apr_table_unset(r->headers_out,"Content-Length");
-
-            ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r->server,
-                         "proxy: start body send");
-             
-            /*
-             * if we are overriding the errors, we can't put the content
-             * of the page into the brigade
-             */
-            if ( (conf->error_override ==0) || r->status < 400 ) {
-
-                /* read the body, pass it to the output filters */
-                apr_bucket *e;
-                int finish = FALSE;
-                while (ap_get_brigade(rp->input_filters, 
-                                      bb, 
-                                      AP_MODE_READBYTES, 
-                                      APR_BLOCK_READ, 
-                                      conf->io_buffer_size) == APR_SUCCESS) {
-#if DEBUGGING
-                    {
-                    apr_off_t readbytes;
-                    apr_brigade_length(bb, 0, &readbytes);
-                    ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0,
-                                 r->server, "proxy (PID %d): readbytes: %#x",
-                                 getpid(), readbytes);
-                    }
-#endif
-                    /* sanity check */
-                    if (APR_BRIGADE_EMPTY(bb)) {
-                        apr_brigade_cleanup(bb);
-                        break;
-                    }
-
-                    /* found the last brigade? */
-                    if (APR_BUCKET_IS_EOS(APR_BRIGADE_LAST(bb))) {
-                        /* if this is the last brigade, cleanup the
-                         * backend connection first to prevent the
-                         * backend server from hanging around waiting
-                         * for a slow client to eat these bytes
-                         */
-                        ap_proxy_http_cleanup(r, p_conn, backend);
-                        /* signal that we must leave */
-                        finish = TRUE;
-                    }
-
-                    /* if no EOS yet, then we must flush */
-                    if (FALSE == finish) {
-                        e = apr_bucket_flush_create();
-                        APR_BRIGADE_INSERT_TAIL(bb, e);
-                    }
-
-                    /* try send what we read */
-                    if (ap_pass_brigade(r->output_filters, bb) != APR_SUCCESS) {
-                        /* Ack! Phbtt! Die! User aborted! */
-                        p_conn->close = 1;  /* this causes socket close below */
-                        finish = TRUE;
-                    }
-
-                    /* make sure we always clean up after ourselves */
-                    apr_brigade_cleanup(bb);
-
-                    /* if we are done, leave */
-                    if (TRUE == finish) {
-                        break;
-                    }
-                }
-            }
-            ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r->server,
-                         "proxy: end body send");
-        } else {
-            ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r->server,
-                         "proxy: header only");
-        }
-    }
-
-    if ( conf->error_override ) {
-        /* the code above this checks for 'OK' which is what the hook expects */
-        if ( r->status == HTTP_OK )
-            return OK;
-        else  {
-            /* clear r->status for override error, otherwise ErrorDocument
-             * thinks that this is a recursive error, and doesn't find the
-             * custom error page
-             */
-            int status = r->status;
-            r->status = HTTP_OK;
-            return status;
-        }
-    } else 
-        return OK;
-}
-
-static
-apr_status_t ap_proxy_http_cleanup(request_rec *r, proxy_http_conn_t *p_conn,
-                                   proxy_conn_rec *backend) {
-    /* If there are no KeepAlives, or if the connection has been signalled
-     * to close, close the socket and clean up
-     */
-
-    /* if the connection is < HTTP/1.1, or Connection: close,
-     * we close the socket, otherwise we leave it open for KeepAlive support
-     */
-    if (p_conn->close || (r->proto_num < HTTP_VERSION(1,1))) {
-        if (p_conn->sock) {
-            apr_socket_close(p_conn->sock);
-            p_conn->sock = NULL;
-            backend->connection = NULL;
-        }
-    }
-    return OK;
-}
-
-/*
- * This handles http:// URLs, and other URLs using a remote proxy over http
- * If proxyhost is NULL, then contact the server directly, otherwise
- * go via the proxy.
- * Note that if a proxy is used, then URLs other than http: can be accessed,
- * also, if we have trouble which is clearly specific to the proxy, then
- * we return DECLINED so that we can try another proxy. (Or the direct
- * route.)
- */
-int ap_proxy_http_handler(request_rec *r, proxy_server_conf *conf,
-                          char *url, const char *proxyname, 
-                          apr_port_t proxyport)
-{
-    int status;
-    char server_portstr[32];
-    conn_rec *origin = NULL;
-    proxy_conn_rec *backend = NULL;
-
-    /* Note: Memory pool allocation.
-     * A downstream keepalive connection is always connected to the existence
-     * (or not) of an upstream keepalive connection. If this is not done then
-     * load balancing against multiple backend servers breaks (one backend
-     * server ends up taking 100% of the load), and the risk is run of
-     * downstream keepalive connections being kept open unnecessarily. This
-     * keeps webservers busy and ties up resources.
-     *
-     * As a result, we allocate all sockets out of the upstream connection
-     * pool, and when we want to reuse a socket, we check first whether the
-     * connection ID of the current upstream connection is the same as that
-     * of the connection when the socket was opened.
-     */
-    apr_pool_t *p = r->connection->pool;
-    conn_rec *c = r->connection;
-    apr_bucket_brigade *bb = apr_brigade_create(p);
-    apr_uri_t *uri = apr_palloc(r->connection->pool, sizeof(*uri));
-    proxy_http_conn_t *p_conn = apr_pcalloc(r->connection->pool,
-                                           sizeof(*p_conn));
-
-    /* is it for us? */
-    if (strncasecmp(url, "http:", 5)) {
-        ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r->server,
-                     "proxy: HTTP: declining URL %s", url);
-        return DECLINED; /* only interested in HTTP */
-    }
-    ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r->server,
-             "proxy: HTTP: serving URL %s", url);
-    
-    
-    /* only use stored info for top-level pages. Sub requests don't share 
-     * in keepalives
-     */
-    if (!r->main) {
-        backend = (proxy_conn_rec *) ap_get_module_config(c->conn_config,
-                                                      &proxy_http_module);
-    }
-    /* create space for state information */
-    if (!backend) {
-        backend = ap_pcalloc(c->pool, sizeof(proxy_conn_rec));
-        backend->connection = NULL;
-        backend->hostname = NULL;
-        backend->port = 0;
-        if (!r->main) {
-            ap_set_module_config(c->conn_config, &proxy_http_module, backend);
-        }
-    }
-
-    /* Step One: Determine Who To Connect To */
-    status = ap_proxy_http_determine_connection(p, r, p_conn, c, conf, uri,
-                                                &url, proxyname, proxyport,
-                                                server_portstr,
-                                                sizeof(server_portstr));
-    if ( status != OK ) {
-        return status;
-    }
-
-    /* Step Two: Make the Connection */
-    status = ap_proxy_http_create_connection(p, r, p_conn, c, &origin, backend,
-                                             conf, proxyname);
-    if ( status != OK ) {
-        return status;
-    }
-   
-    /* Step Three: Send the Request */
-    status = ap_proxy_http_request(p, r, p_conn, origin, conf, uri, url, bb,
-                                   server_portstr);
-    if ( status != OK ) {
-        return status;
-    }
-
-    /* Step Four: Receive the Response */
-    status = ap_proxy_http_process_response(p, r, p_conn, origin, backend, conf,
-                                            bb, server_portstr);
-    if ( status != OK ) {
-        /* clean up even if there is an error */
-        ap_proxy_http_cleanup(r, p_conn, backend);
-        return status;
-    }
-
-    /* Step Five: Clean Up */
-    status = ap_proxy_http_cleanup(r, p_conn, backend);
-    if ( status != OK ) {
-        return status;
-    }
-
-    return OK;
-}
-
-static void ap_proxy_http_register_hook(apr_pool_t *p)
-{
-    proxy_hook_scheme_handler(ap_proxy_http_handler, NULL, NULL, APR_HOOK_FIRST);
-    proxy_hook_canon_handler(ap_proxy_http_canon, NULL, NULL, APR_HOOK_FIRST);
-}
-
-module AP_MODULE_DECLARE_DATA proxy_http_module = {
-    STANDARD20_MODULE_STUFF,
-    NULL,              /* create per-directory config structure */
-    NULL,              /* merge per-directory config structures */
-    NULL,              /* create per-server config structure */
-    NULL,              /* merge per-server config structures */
-    NULL,              /* command apr_table_t */
-    ap_proxy_http_register_hook/* register hooks */
-};
-
diff --git a/modules/proxy/proxy_util.c b/modules/proxy/proxy_util.c
deleted file mode 100644
index bf1c85b..0000000
--- a/modules/proxy/proxy_util.c
+++ /dev/null
@@ -1,1179 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-/* Utility routines for Apache proxy */
-#include "mod_proxy.h"
-
-
-static int proxy_match_ipaddr(struct dirconn_entry *This, request_rec *r);
-static int proxy_match_domainname(struct dirconn_entry *This, request_rec *r);
-static int proxy_match_hostname(struct dirconn_entry *This, request_rec *r);
-static int proxy_match_word(struct dirconn_entry *This, request_rec *r);
-
-APR_IMPLEMENT_OPTIONAL_HOOK_RUN_ALL(proxy, PROXY, int, create_req, 
-                                   (request_rec *r, request_rec *pr), (r, pr),
-                                   OK, DECLINED)
-
-/* already called in the knowledge that the characters are hex digits */
-PROXY_DECLARE(int) ap_proxy_hex2c(const char *x)
-{
-    int i, ch;
-
-#if !APR_CHARSET_EBCDIC
-    ch = x[0];
-    if (apr_isdigit(ch))
-	i = ch - '0';
-    else if (apr_isupper(ch))
-	i = ch - ('A' - 10);
-    else
-	i = ch - ('a' - 10);
-    i <<= 4;
-
-    ch = x[1];
-    if (apr_isdigit(ch))
-	i += ch - '0';
-    else if (apr_isupper(ch))
-	i += ch - ('A' - 10);
-    else
-	i += ch - ('a' - 10);
-    return i;
-#else /*APR_CHARSET_EBCDIC*/
-    return (1 == sscanf(x, "%2x", &i)) ? os_toebcdic[i&0xFF] : 0;
-#endif /*APR_CHARSET_EBCDIC*/
-}
-
-PROXY_DECLARE(void) ap_proxy_c2hex(int ch, char *x)
-{
-#if !APR_CHARSET_EBCDIC
-    int i;
-
-    x[0] = '%';
-    i = (ch & 0xF0) >> 4;
-    if (i >= 10)
-	x[1] = ('A' - 10) + i;
-    else
-	x[1] = '0' + i;
-
-    i = ch & 0x0F;
-    if (i >= 10)
-	x[2] = ('A' - 10) + i;
-    else
-	x[2] = '0' + i;
-#else /*APR_CHARSET_EBCDIC*/
-    static const char ntoa[] = { "0123456789ABCDEF" };
-    ch &= 0xFF;
-    x[0] = '%';
-    x[1] = ntoa[(os_toascii[ch]>>4)&0x0F];
-    x[2] = ntoa[os_toascii[ch]&0x0F];
-    x[3] = '\0';
-#endif /*APR_CHARSET_EBCDIC*/
-}
-
-/*
- * canonicalise a URL-encoded string
- */
-
-/*
- * Convert a URL-encoded string to canonical form.
- * It decodes characters which need not be encoded,
- * and encodes those which must be encoded, and does not touch
- * those which must not be touched.
- */
-PROXY_DECLARE(char *)ap_proxy_canonenc(apr_pool_t *p, const char *x, int len, enum enctype t,
-	int isenc)
-{
-    int i, j, ch;
-    char *y;
-    char *allowed;	/* characters which should not be encoded */
-    char *reserved;	/* characters which much not be en/de-coded */
-
-/* N.B. in addition to :@&=, this allows ';' in an http path
- * and '?' in an ftp path -- this may be revised
- * 
- * Also, it makes a '+' character in a search string reserved, as
- * it may be form-encoded. (Although RFC 1738 doesn't allow this -
- * it only permits ; / ? : @ = & as reserved chars.)
- */
-    if (t == enc_path)
-	allowed = "$-_.+!*'(),;:@&=";
-    else if (t == enc_search)
-	allowed = "$-_.!*'(),;:@&=";
-    else if (t == enc_user)
-	allowed = "$-_.+!*'(),;@&=";
-    else if (t == enc_fpath)
-	allowed = "$-_.+!*'(),?:@&=";
-    else			/* if (t == enc_parm) */
-	allowed = "$-_.+!*'(),?/:@&=";
-
-    if (t == enc_path)
-	reserved = "/";
-    else if (t == enc_search)
-	reserved = "+";
-    else
-	reserved = "";
-
-    y = apr_palloc(p, 3 * len + 1);
-
-    for (i = 0, j = 0; i < len; i++, j++) {
-/* always handle '/' first */
-	ch = x[i];
-	if (strchr(reserved, ch)) {
-	    y[j] = ch;
-	    continue;
-	}
-/* decode it if not already done */
-	if (isenc && ch == '%') {
-	    if (!ap_isxdigit(x[i + 1]) || !ap_isxdigit(x[i + 2]))
-		return NULL;
-	    ch = ap_proxy_hex2c(&x[i + 1]);
-	    i += 2;
-	    if (ch != 0 && strchr(reserved, ch)) {	/* keep it encoded */
-		ap_proxy_c2hex(ch, &y[j]);
-		j += 2;
-		continue;
-	    }
-	}
-/* recode it, if necessary */
-	if (!apr_isalnum(ch) && !strchr(allowed, ch)) {
-	    ap_proxy_c2hex(ch, &y[j]);
-	    j += 2;
-	}
-	else
-	    y[j] = ch;
-    }
-    y[j] = '\0';
-    return y;
-}
-
-/*
- * Parses network-location.
- *    urlp           on input the URL; on output the path, after the leading /
- *    user           NULL if no user/password permitted
- *    password       holder for password
- *    host           holder for host
- *    port           port number; only set if one is supplied.
- *
- * Returns an error string.
- */
-PROXY_DECLARE(char *)
-     ap_proxy_canon_netloc(apr_pool_t *p, char **const urlp, char **userp,
-			char **passwordp, char **hostp, apr_port_t *port)
-{
-    apr_port_t i;
-    char *strp, *host, *url = *urlp;
-    char *user = NULL, *password = NULL;
-
-    if (url[0] != '/' || url[1] != '/')
-	return "Malformed URL";
-    host = url + 2;
-    url = strchr(host, '/');
-    if (url == NULL)
-	url = "";
-    else
-	*(url++) = '\0';	/* skip seperating '/' */
-
-    /* find _last_ '@' since it might occur in user/password part */
-    strp = strrchr(host, '@');
-
-    if (strp != NULL) {
-	*strp = '\0';
-	user = host;
-	host = strp + 1;
-
-/* find password */
-	strp = strchr(user, ':');
-	if (strp != NULL) {
-	    *strp = '\0';
-	    password = ap_proxy_canonenc(p, strp + 1, strlen(strp + 1), enc_user, 1);
-	    if (password == NULL)
-		return "Bad %-escape in URL (password)";
-	}
-
-	user = ap_proxy_canonenc(p, user, strlen(user), enc_user, 1);
-	if (user == NULL)
-	    return "Bad %-escape in URL (username)";
-    }
-    if (userp != NULL) {
-	*userp = user;
-    }
-    if (passwordp != NULL) {
-	*passwordp = password;
-    }
-
-    strp = strrchr(host, ':');
-    if (strp != NULL) {
-	*(strp++) = '\0';
-
-	for (i = 0; strp[i] != '\0'; i++)
-	    if (!apr_isdigit(strp[i]))
-		break;
-
-	/* if (i == 0) the no port was given; keep default */
-	if (strp[i] != '\0') {
-	    return "Bad port number in URL";
-	} else if (i > 0) {
-	    *port = atoi(strp);
-	    if (*port > 65535)
-		return "Port number in URL > 65535";
-	}
-    }
-    ap_str_tolower(host);		/* DNS names are case-insensitive */
-    if (*host == '\0')
-	return "Missing host in URL";
-/* check hostname syntax */
-    for (i = 0; host[i] != '\0'; i++)
-	if (!apr_isdigit(host[i]) && host[i] != '.')
-	    break;
-    /* must be an IP address */
-    if (host[i] == '\0' && (apr_inet_addr(host) == -1))
-    {
-	return "Bad IP address in URL";
-    }
-
-/*    if (strchr(host,'.') == NULL && domain != NULL)
-   host = pstrcat(p, host, domain, NULL);
- */
-    *urlp = url;
-    *hostp = host;
-
-    return NULL;
-}
-
-static const char * const lwday[7] =
-{"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
-
-/*
- * If the date is a valid RFC 850 date or asctime() date, then it
- * is converted to the RFC 1123 format, otherwise it is not modified.
- * This routine is not very fast at doing conversions, as it uses
- * sscanf and sprintf. However, if the date is already correctly
- * formatted, then it exits very quickly.
- */
-PROXY_DECLARE(const char *)
-     ap_proxy_date_canon(apr_pool_t *p, const char *x1)
-{
-    char *x = apr_pstrdup(p, x1);
-    int wk, mday, year, hour, min, sec, mon;
-    char *q, month[4], zone[4], week[4];
-
-    q = strchr(x, ',');
-    /* check for RFC 850 date */
-    if (q != NULL && q - x > 3 && q[1] == ' ') {
-	*q = '\0';
-	for (wk = 0; wk < 7; wk++)
-	    if (strcmp(x, lwday[wk]) == 0)
-		break;
-	*q = ',';
-	if (wk == 7)
-	    return x;		/* not a valid date */
-	if (q[4] != '-' || q[8] != '-' || q[11] != ' ' || q[14] != ':' ||
-	    q[17] != ':' || strcmp(&q[20], " GMT") != 0)
-	    return x;
-	if (sscanf(q + 2, "%u-%3s-%u %u:%u:%u %3s", &mday, month, &year,
-		   &hour, &min, &sec, zone) != 7)
-	    return x;
-	if (year < 70)
-	    year += 2000;
-	else
-	    year += 1900;
-    }
-    else {
-/* check for acstime() date */
-	if (x[3] != ' ' || x[7] != ' ' || x[10] != ' ' || x[13] != ':' ||
-	    x[16] != ':' || x[19] != ' ' || x[24] != '\0')
-	    return x;
-	if (sscanf(x, "%3s %3s %u %u:%u:%u %u", week, month, &mday, &hour,
-		   &min, &sec, &year) != 7)
-	    return x;
-	for (wk = 0; wk < 7; wk++)
-	    if (strcmp(week, ap_day_snames[wk]) == 0)
-		break;
-	if (wk == 7)
-	    return x;
-    }
-
-/* check date */
-    for (mon = 0; mon < 12; mon++)
-	if (strcmp(month, ap_month_snames[mon]) == 0)
-	    break;
-    if (mon == 12)
-	return x;
-
-    q = apr_palloc(p, 30);
-    apr_snprintf(q, 30, "%s, %.2d %s %d %.2d:%.2d:%.2d GMT", ap_day_snames[wk],
-       mday, ap_month_snames[mon], year, hour, min, sec);
-    return q;
-}
-
-PROXY_DECLARE(request_rec *)ap_proxy_make_fake_req(conn_rec *c, request_rec *r)
-{
-    request_rec *rp = apr_pcalloc(c->pool, sizeof(*r));
-
-    rp->pool            = c->pool;
-    rp->status          = HTTP_OK;
-
-    rp->headers_in      = apr_table_make(c->pool, 50);
-    rp->subprocess_env  = apr_table_make(c->pool, 50);
-    rp->headers_out     = apr_table_make(c->pool, 12);
-    rp->err_headers_out = apr_table_make(c->pool, 5);
-    rp->notes           = apr_table_make(c->pool, 5);
-
-    rp->server = r->server;
-    rp->proxyreq = r->proxyreq;
-    rp->request_time = r->request_time;
-    rp->connection      = c;
-    rp->output_filters  = c->output_filters;
-    rp->input_filters   = c->input_filters;
-    rp->proto_output_filters  = c->output_filters;
-    rp->proto_input_filters   = c->input_filters;
-
-    rp->request_config  = ap_create_request_config(c->pool);
-    proxy_run_create_req(r, rp);
-
-    return rp;
-}
-
-/*
- * Reads headers from a buffer and returns an array of headers.
- * Returns NULL on file error
- * This routine tries to deal with too long lines and continuation lines.
- * @@@: XXX: FIXME: currently the headers are passed thru un-merged. 
- * Is that okay, or should they be collapsed where possible?
- */
-PROXY_DECLARE(apr_table_t *)ap_proxy_read_headers(request_rec *r, request_rec *rr, char *buffer, int size, conn_rec *c)
-{
-    apr_table_t *headers_out;
-    int len;
-    char *value, *end;
-    char field[MAX_STRING_LEN];
-
-    headers_out = ap_make_table(r->pool, 20);
-
-    /*
-     * Read header lines until we get the empty separator line, a read error,
-     * the connection closes (EOF), or we timeout.
-     */
-    while ((len = ap_getline(buffer, size, rr, 1)) > 0) {
-
-	if (!(value = strchr(buffer, ':'))) {     /* Find the colon separator */
-
-	    /* Buggy MS IIS servers sometimes return invalid headers
-	     * (an extra "HTTP/1.0 200, OK" line sprinkled in between
-	     * the usual MIME headers). Try to deal with it in a sensible
-	     * way, but log the fact.
-	     * XXX: The mask check is buggy if we ever see an HTTP/1.10 */
-
-	    if (!apr_date_checkmask(buffer, "HTTP/#.# ###*")) {
-		/* Nope, it wasn't even an extra HTTP header. Give up. */
-		return NULL;
-	    }
-
-	    ap_log_error(APLOG_MARK, APLOG_WARNING|APLOG_NOERRNO, 0, r->server,
-			 "proxy: Ignoring duplicate HTTP header "
-			 "returned by %s (%s)", r->uri, r->method);
-	    continue;
-	}
-
-        *value = '\0';
-        ++value;
-	/* XXX: RFC2068 defines only SP and HT as whitespace, this test is
-	 * wrong... and so are many others probably.
-	 */
-        while (apr_isspace(*value))
-            ++value;            /* Skip to start of value   */
-
-	/* should strip trailing whitespace as well */
-	for (end = &value[strlen(value)-1]; end > value && apr_isspace(*end); --end)
-	    *end = '\0';
-
-        /* make sure we merge so as not to destroy duplicated headers */
-        apr_table_merge(headers_out, buffer, value);
-
-	/* the header was too long; at the least we should skip extra data */
-	if (len >= size - 1) { 
-	    while ((len = ap_getline(field, MAX_STRING_LEN, rr, 1))
-		    >= MAX_STRING_LEN - 1) {
-		/* soak up the extra data */
-	    }
-	    if (len == 0) /* time to exit the larger loop as well */
-		break;
-	}
-    }
-    return headers_out;
-}
-
-
-/*
- * list is a comma-separated list of case-insensitive tokens, with
- * optional whitespace around the tokens.
- * The return returns 1 if the token val is found in the list, or 0
- * otherwise.
- */
-PROXY_DECLARE(int) ap_proxy_liststr(const char *list, const char *val)
-{
-    int len, i;
-    const char *p;
-
-    len = strlen(val);
-
-    while (list != NULL) {
-	p = ap_strchr_c(list, ',');
-	if (p != NULL) {
-	    i = p - list;
-	    do
-		p++;
-	    while (apr_isspace(*p));
-	}
-	else
-	    i = strlen(list);
-
-	while (i > 0 && apr_isspace(list[i - 1]))
-	    i--;
-	if (i == len && strncasecmp(list, val, len) == 0)
-	    return 1;
-	list = p;
-    }
-    return 0;
-}
-
-/*
- * list is a comma-separated list of case-insensitive tokens, with
- * optional whitespace around the tokens.
- * The return returns 1 if the token val is found in the list, or 0
- * otherwise.
- */
-PROXY_DECLARE(char *)ap_proxy_removestr(apr_pool_t *pool, const char *list, const char *val)
-{
-    int len, i;
-    const char *p;
-    char *new = NULL;
-
-    len = strlen(val);
-
-    while (list != NULL) {
-	p = ap_strchr_c(list, ',');
-	if (p != NULL) {
-	    i = p - list;
-	    do
-		p++;
-	    while (apr_isspace(*p));
-	}
-	else
-	    i = strlen(list);
-
-	while (i > 0 && apr_isspace(list[i - 1]))
-	    i--;
-	if (i == len && strncasecmp(list, val, len) == 0) {
-	    /* do nothing */
-	}
-	else {
-	    if (new)
-		new = apr_pstrcat(pool, new, ",", apr_pstrndup(pool, list, i), NULL);
-	    else
-		new = apr_pstrndup(pool, list, i);
-	}
-	list = p;
-    }
-    return new;
-}
-
-/*
- * Converts 8 hex digits to a time integer
- */
-PROXY_DECLARE(int) ap_proxy_hex2sec(const char *x)
-{
-    int i, ch;
-    unsigned int j;
-
-    for (i = 0, j = 0; i < 8; i++) {
-	ch = x[i];
-	j <<= 4;
-	if (apr_isdigit(ch))
-	    j |= ch - '0';
-	else if (apr_isupper(ch))
-	    j |= ch - ('A' - 10);
-	else
-	    j |= ch - ('a' - 10);
-    }
-    if (j == 0xffffffff)
-	return -1;		/* so that it works with 8-byte ints */
-    else
-	return j;
-}
-
-/*
- * Converts a time integer to 8 hex digits
- */
-PROXY_DECLARE(void) ap_proxy_sec2hex(int t, char *y)
-{
-    int i, ch;
-    unsigned int j = t;
-
-    for (i = 7; i >= 0; i--) {
-	ch = j & 0xF;
-	j >>= 4;
-	if (ch >= 10)
-	    y[i] = ch + ('A' - 10);
-	else
-	    y[i] = ch + '0';
-    }
-    y[8] = '\0';
-}
-
-PROXY_DECLARE(int) ap_proxyerror(request_rec *r, int statuscode, const char *message)
-{
-    apr_table_setn(r->notes, "error-notes",
-	apr_pstrcat(r->pool, 
-		"The proxy server could not handle the request "
-		"<EM><A HREF=\"", ap_escape_uri(r->pool, r->uri),
-		"\">", ap_escape_html(r->pool, r->method),
-		"&nbsp;", 
-		ap_escape_html(r->pool, r->uri), "</A></EM>.<P>\n"
-		"Reason: <STRONG>",
-		ap_escape_html(r->pool, message), 
-		"</STRONG>", NULL));
-
-    /* Allow "error-notes" string to be printed by ap_send_error_response() */
-    apr_table_setn(r->notes, "verbose-error-to", apr_pstrdup(r->pool, "*"));
-
-    r->status_line = apr_psprintf(r->pool, "%3.3u Proxy Error", statuscode);
-    ap_log_rerror(APLOG_MARK, APLOG_ERR|APLOG_NOERRNO, 0, r,
-			 "proxy: %s returned by %s", message, r->uri);
-    return statuscode;
-}
-
-static const char *
-     proxy_get_host_of_request(request_rec *r)
-{
-    char *url, *user = NULL, *password = NULL, *err, *host;
-    apr_port_t port = -1;
-
-    if (r->hostname != NULL)
-	return r->hostname;
-
-    /* Set url to the first char after "scheme://" */
-    if ((url = strchr(r->uri, ':')) == NULL
-	|| url[1] != '/' || url[2] != '/')
-	return NULL;
-
-    url = apr_pstrdup(r->pool, &url[1]);	/* make it point to "//", which is what proxy_canon_netloc expects */
-
-    err = ap_proxy_canon_netloc(r->pool, &url, &user, &password, &host, &port);
-
-    if (err != NULL)
-	ap_log_rerror(APLOG_MARK, APLOG_ERR|APLOG_NOERRNO, 0, r,
-		     "%s", err);
-
-    r->hostname = host;
-
-    return host;		/* ought to return the port, too */
-}
-
-/* Return TRUE if addr represents an IP address (or an IP network address) */
-PROXY_DECLARE(int) ap_proxy_is_ipaddr(struct dirconn_entry *This, apr_pool_t *p)
-{
-    const char *addr = This->name;
-    long ip_addr[4];
-    int i, quads;
-    long bits;
-
-    /* if the address is given with an explicit netmask, use that */
-    /* Due to a deficiency in apr_inet_addr(), it is impossible to parse */
-    /* "partial" addresses (with less than 4 quads) correctly, i.e.  */
-    /* 192.168.123 is parsed as 192.168.0.123, which is not what I want. */
-    /* I therefore have to parse the IP address manually: */
-    /*if (proxy_readmask(This->name, &This->addr.s_addr, &This->mask.s_addr) == 0) */
-    /* addr and mask were set by proxy_readmask() */
-    /*return 1; */
-
-    /* Parse IP addr manually, optionally allowing */
-    /* abbreviated net addresses like 192.168. */
-
-    /* Iterate over up to 4 (dotted) quads. */
-    for (quads = 0; quads < 4 && *addr != '\0'; ++quads) {
-	char *tmp;
-
-	if (*addr == '/' && quads > 0)	/* netmask starts here. */
-	    break;
-
-	if (!apr_isdigit(*addr))
-	    return 0;		/* no digit at start of quad */
-
-	ip_addr[quads] = strtol(addr, &tmp, 0);
-
-	if (tmp == addr)	/* expected a digit, found something else */
-	    return 0;
-
-	if (ip_addr[quads] < 0 || ip_addr[quads] > 255) {
-	    /* invalid octet */
-	    return 0;
-	}
-
-	addr = tmp;
-
-	if (*addr == '.' && quads != 3)
-	    ++addr;		/* after the 4th quad, a dot would be illegal */
-    }
-
-    for (This->addr.s_addr = 0, i = 0; i < quads; ++i)
-	This->addr.s_addr |= htonl(ip_addr[i] << (24 - 8 * i));
-
-    if (addr[0] == '/' && apr_isdigit(addr[1])) {	/* net mask follows: */
-	char *tmp;
-
-	++addr;
-
-	bits = strtol(addr, &tmp, 0);
-
-	if (tmp == addr)	/* expected a digit, found something else */
-	    return 0;
-
-	addr = tmp;
-
-	if (bits < 0 || bits > 32)	/* netmask must be between 0 and 32 */
-	    return 0;
-
-    }
-    else {
-	/* Determine (i.e., "guess") netmask by counting the */
-	/* number of trailing .0's; reduce #quads appropriately */
-	/* (so that 192.168.0.0 is equivalent to 192.168.)        */
-	while (quads > 0 && ip_addr[quads - 1] == 0)
-	    --quads;
-
-	/* "IP Address should be given in dotted-quad form, optionally followed by a netmask (e.g., 192.168.111.0/24)"; */
-	if (quads < 1)
-	    return 0;
-
-	/* every zero-byte counts as 8 zero-bits */
-	bits = 8 * quads;
-
-	if (bits != 32)		/* no warning for fully qualified IP address */
-            ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL,
-	      "Warning: NetMask not supplied with IP-Addr; guessing: %s/%ld\n",
-		 inet_ntoa(This->addr), bits);
-    }
-
-    This->mask.s_addr = htonl(APR_INADDR_NONE << (32 - bits));
-
-    if (*addr == '\0' && (This->addr.s_addr & ~This->mask.s_addr) != 0) {
-        ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL,
-	    "Warning: NetMask and IP-Addr disagree in %s/%ld\n",
-		inet_ntoa(This->addr), bits);
-	This->addr.s_addr &= This->mask.s_addr;
-        ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL,
-	    "         Set to %s/%ld\n",
-		inet_ntoa(This->addr), bits);
-    }
-
-    if (*addr == '\0') {
-	This->matcher = proxy_match_ipaddr;
-	return 1;
-    }
-    else
-	return (*addr == '\0');	/* okay iff we've parsed the whole string */
-}
-
-/* Return TRUE if addr represents an IP address (or an IP network address) */
-static int proxy_match_ipaddr(struct dirconn_entry *This, request_rec *r)
-{
-    int i, ip_addr[4];
-    struct in_addr addr, *ip;
-    const char *host = proxy_get_host_of_request(r);
-
-    if (host == NULL)   /* oops! */
-       return 0;
-
-    memset(&addr, '\0', sizeof addr);
-    memset(ip_addr, '\0', sizeof ip_addr);
-
-    if (4 == sscanf(host, "%d.%d.%d.%d", &ip_addr[0], &ip_addr[1], &ip_addr[2], &ip_addr[3])) {
-	for (addr.s_addr = 0, i = 0; i < 4; ++i)
-	    addr.s_addr |= htonl(ip_addr[i] << (24 - 8 * i));
-
-	if (This->addr.s_addr == (addr.s_addr & This->mask.s_addr)) {
-#if DEBUGGING
-        ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL,
-                         "1)IP-Match: %s[%s] <-> ", host, inet_ntoa(addr));
-        ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL,
-                         "%s/", inet_ntoa(This->addr));
-        ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL,
-                         "%s", inet_ntoa(This->mask));
-#endif
-	    return 1;
-	}
-#if DEBUGGING
-	else {
-        ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL,
-                         "1)IP-NoMatch: %s[%s] <-> ", host, inet_ntoa(addr));
-        ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL,
-                         "%s/", inet_ntoa(This->addr));
-        ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL,
-                         "%s", inet_ntoa(This->mask));
-	}
-#endif
-    }
-    else {
-	struct apr_sockaddr_t *reqaddr;
-
-        if (apr_sockaddr_info_get(&reqaddr, host, APR_UNSPEC, 0, 0, r->pool)
-	    != APR_SUCCESS) {
-#if DEBUGGING
-	    ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL,
-			 "2)IP-NoMatch: hostname=%s msg=Host not found", 
-			 host);
-#endif
-	    return 0;
-	}
-
-	/* Try to deal with multiple IP addr's for a host */
-	/* FIXME: This needs to be able to deal with IPv6 */
-	while (reqaddr) {
-	    ip = (struct in_addr *) reqaddr->ipaddr_ptr;
-	    if (This->addr.s_addr == (ip->s_addr & This->mask.s_addr)) {
-#if DEBUGGING
-		ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL,
-			     "3)IP-Match: %s[%s] <-> ", host, 
-			     inet_ntoa(*ip));
-		ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL,
-			     "%s/", inet_ntoa(This->addr));
-		ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL,
-			     "%s", inet_ntoa(This->mask));
-#endif
-		return 1;
-	    }
-#if DEBUGGING
-	    else {
-                ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL,
-			     "3)IP-NoMatch: %s[%s] <-> ", host, 
-			     inet_ntoa(*ip));
-                ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL,
-			     "%s/", inet_ntoa(This->addr));
-                ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL,
-			     "%s", inet_ntoa(This->mask));
-	    }
-#endif
-	    reqaddr = reqaddr->next;
-	}
-    }
-
-    return 0;
-}
-
-/* Return TRUE if addr represents a domain name */
-PROXY_DECLARE(int) ap_proxy_is_domainname(struct dirconn_entry *This, apr_pool_t *p)
-{
-    char *addr = This->name;
-    int i;
-
-    /* Domain name must start with a '.' */
-    if (addr[0] != '.')
-        return 0;
-
-    /* rfc1035 says DNS names must consist of "[-a-zA-Z0-9]" and '.' */
-    for (i = 0; apr_isalnum(addr[i]) || addr[i] == '-' || addr[i] == '.'; ++i)
-        continue;
-
-#if 0
-    if (addr[i] == ':') {
-    ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL,
-                     "@@@@ handle optional port in proxy_is_domainname()");
-	/* @@@@ handle optional port */
-    }
-#endif
-
-    if (addr[i] != '\0')
-        return 0;
-
-    /* Strip trailing dots */
-    for (i = strlen(addr) - 1; i > 0 && addr[i] == '.'; --i)
-        addr[i] = '\0';
-
-    This->matcher = proxy_match_domainname;
-    return 1;
-}
-
-/* Return TRUE if host "host" is in domain "domain" */
-static int proxy_match_domainname(struct dirconn_entry *This, request_rec *r)
-{
-    const char *host = proxy_get_host_of_request(r);
-    int d_len = strlen(This->name), h_len;
-
-    if (host == NULL)		/* some error was logged already */
-        return 0;
-
-    h_len = strlen(host);
-
-    /* @@@ do this within the setup? */
-    /* Ignore trailing dots in domain comparison: */
-    while (d_len > 0 && This->name[d_len - 1] == '.')
-        --d_len;
-    while (h_len > 0 && host[h_len - 1] == '.')
-        --h_len;
-    return h_len > d_len
-        && strncasecmp(&host[h_len - d_len], This->name, d_len) == 0;
-}
-
-/* Return TRUE if host represents a host name */
-PROXY_DECLARE(int) ap_proxy_is_hostname(struct dirconn_entry *This, apr_pool_t *p)
-{
-    struct apr_sockaddr_t *addr;
-    char *host = This->name;
-    int i;
-
-    /* Host names must not start with a '.' */
-    if (host[0] == '.')
-        return 0;
-
-    /* rfc1035 says DNS names must consist of "[-a-zA-Z0-9]" and '.' */
-    for (i = 0; apr_isalnum(host[i]) || host[i] == '-' || host[i] == '.'; ++i);
-
-    if (host[i] != '\0' || apr_sockaddr_info_get(&addr, host, APR_UNSPEC, 0, 0, p) != APR_SUCCESS)
-        return 0;
-    
-    This->hostaddr = addr;
-
-    /* Strip trailing dots */
-    for (i = strlen(host) - 1; i > 0 && host[i] == '.'; --i)
-        host[i] = '\0';
-
-    This->matcher = proxy_match_hostname;
-    return 1;
-}
-
-/* Return TRUE if host "host" is equal to host2 "host2" */
-static int proxy_match_hostname(struct dirconn_entry *This, request_rec *r)
-{
-    char *host = This->name;
-    const char *host2 = proxy_get_host_of_request(r);
-    int h2_len;
-    int h1_len;
-
-    if (host == NULL || host2 == NULL)
-        return 0; /* oops! */
-
-    h2_len = strlen(host2);
-    h1_len = strlen(host);
-
-#if 0
-    struct apr_sockaddr_t *addr = *This->hostaddr;
-
-    /* Try to deal with multiple IP addr's for a host */
-    while (addr) {
-        if (addr->ipaddr_ptr == ? ? ? ? ? ? ? ? ? ? ? ? ?)
-            return 1;
-        addr = addr->next;
-    }
-#endif
-
-    /* Ignore trailing dots in host2 comparison: */
-    while (h2_len > 0 && host2[h2_len - 1] == '.')
-        --h2_len;
-    while (h1_len > 0 && host[h1_len - 1] == '.')
-        --h1_len;
-    return h1_len == h2_len
-        && strncasecmp(host, host2, h1_len) == 0;
-}
-
-/* Return TRUE if addr is to be matched as a word */
-PROXY_DECLARE(int) ap_proxy_is_word(struct dirconn_entry *This, apr_pool_t *p)
-{
-    This->matcher = proxy_match_word;
-    return 1;
-}
-
-/* Return TRUE if string "str2" occurs literally in "str1" */
-static int proxy_match_word(struct dirconn_entry *This, request_rec *r)
-{
-    const char *host = proxy_get_host_of_request(r);
-    return host != NULL && ap_strstr_c(host, This->name) != NULL;
-}
-
-/* checks whether a host in uri_addr matches proxyblock */
-PROXY_DECLARE(int) ap_proxy_checkproxyblock(request_rec *r, proxy_server_conf *conf, 
-                             apr_sockaddr_t *uri_addr)
-{
-    int j;
-    /* XXX FIXME: conf->noproxies->elts is part of an opaque structure */
-    for (j = 0; j < conf->noproxies->nelts; j++) {
-        struct noproxy_entry *npent = (struct noproxy_entry *) conf->noproxies->elts;
-        struct apr_sockaddr_t *conf_addr = npent[j].addr;
-        ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r->server,
-                     "proxy: checking remote machine [%s] against [%s]", uri_addr->hostname, npent[j].name);
-        if ((npent[j].name && ap_strstr_c(uri_addr->hostname, npent[j].name))
-            || npent[j].name[0] == '*') {
-            ap_log_error(APLOG_MARK, APLOG_WARNING|APLOG_NOERRNO, 0, r->server,
-                         "proxy: connect to remote machine %s blocked: name %s matched", uri_addr->hostname, npent[j].name);
-            return HTTP_FORBIDDEN;
-        }
-        while (conf_addr) {
-            while (uri_addr) {
-                char *conf_ip;
-                char *uri_ip;
-                apr_sockaddr_ip_get(&conf_ip, conf_addr);
-                apr_sockaddr_ip_get(&uri_ip, uri_addr);
-                ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r->server,
-                             "proxy: ProxyBlock comparing %s and %s", conf_ip, uri_ip);
-                if (!apr_strnatcasecmp(conf_ip, uri_ip)) {
-                    ap_log_error(APLOG_MARK, APLOG_WARNING|APLOG_NOERRNO, 0, r->server,
-                                 "proxy: connect to remote machine %s blocked: IP %s matched", uri_addr->hostname, conf_ip);
-                    return HTTP_FORBIDDEN;
-                }
-                uri_addr = uri_addr->next;
-            }
-            conf_addr = conf_addr->next;
-        }
-    }
-    return OK;
-}
-
-/* set up the minimal filter set */
-PROXY_DECLARE(int) ap_proxy_pre_http_request(conn_rec *c, request_rec *r)
-{
-    ap_add_input_filter("HTTP_IN", NULL, r, c);
-    return OK;
-}
-
-/* converts a series of buckets into a string 
- * XXX: BillS says this function performs essentially the same function as 
- * ap_rgetline() in protocol.c. Deprecate this function and use ap_rgetline() 
- * instead? I think ap_proxy_string_read() will not work properly on non ASCII
- * (EBCDIC) machines either.
- */
-PROXY_DECLARE(apr_status_t) ap_proxy_string_read(conn_rec *c, apr_bucket_brigade *bb,
-                                                 char *buff, size_t bufflen, int *eos)
-{
-    apr_bucket *e;
-    apr_status_t rv;
-    char *pos = buff;
-    char *response;
-    int found = 0;
-    apr_size_t len;
-
-    /* start with an empty string */
-    buff[0] = 0;
-    *eos = 0;
-
-    /* loop through each brigade */
-    while (!found) {
-        /* get brigade from network one line at a time */
-        if (APR_SUCCESS != (rv = ap_get_brigade(c->input_filters, bb, 
-                                                AP_MODE_GETLINE,
-                                                APR_BLOCK_READ,
-                                                0))) {
-            return rv;
-        }
-        /* loop through each bucket */
-        while (!found) {
-            if (*eos || APR_BRIGADE_EMPTY(bb)) {
-                /* The connection aborted or timed out */
-                return APR_ECONNABORTED;
-            }
-            e = APR_BRIGADE_FIRST(bb);
-            if (APR_BUCKET_IS_EOS(e)) {
-                *eos = 1;
-            }
-            else {
-                if (APR_SUCCESS != apr_bucket_read(e, (const char **)&response, &len, APR_BLOCK_READ)) {
-                    return rv;
-                }
-                /* is string LF terminated? 
-                 * XXX: This check can be made more efficient by simply checking 
-                 * if the last character in the 'response' buffer is an ASCII_LF.
-                 * See ap_rgetline() for an example.
-                 */
-                if (memchr(response, APR_ASCII_LF, len)) {
-                    found = 1;
-                }
-                /* concat strings until buff is full - then throw the data away */
-                if (len > ((bufflen-1)-(pos-buff))) {
-                    len = (bufflen-1)-(pos-buff);
-                }
-                if (len > 0) {
-                    pos = apr_cpystrn(pos, response, len);
-                }
-            }
-            APR_BUCKET_REMOVE(e);
-            apr_bucket_destroy(e);
-        }
-    }
-
-    return APR_SUCCESS;
-}
-
-/* remove other filters (like DECHUNK) from filter stack */
-PROXY_DECLARE(void) ap_proxy_reset_output_filters(conn_rec *c)
-{
-    ap_filter_t *f = c->output_filters;
-
-    while (f) {
-        if (!strcasecmp(f->frec->name, "CORE") ||
-            !strcasecmp(f->frec->name, "CONTENT_LENGTH") ||
-            !strcasecmp(f->frec->name, "HTTP_HEADER")) {
-            f = f->next;
-            continue;
-        }
-        else {
-            ap_remove_output_filter(f);
-            f = f->next;
-        }
-    }
-}
-
-/* unmerge an element in the table */
-PROXY_DECLARE(void) ap_proxy_table_unmerge(apr_pool_t *p, apr_table_t *t, char *key)
-{
-    apr_off_t offset = 0;
-    apr_off_t count = 0;
-    char *value = NULL;
-
-    /* get the value to unmerge */
-    const char *initial = apr_table_get(t, key);
-    if (!initial) {
-        return;
-    }
-    value = apr_pstrdup(p, initial);
-
-    /* remove the value from the headers */
-    apr_table_unset(t, key);
-
-    /* find each comma */
-    while (value[count]) {
-        if (value[count] == ',') {
-            value[count] = 0;
-            apr_table_add(t, key, value + offset);
-            offset = count + 1;
-        }
-        count++;
-    }
-    apr_table_add(t, key, value + offset);
-}
-
-PROXY_DECLARE(int) ap_proxy_connect_to_backend(apr_socket_t **newsock,
-                                               const char *proxy_function,
-                                               apr_sockaddr_t *backend_addr,
-                                               const char *backend_name,
-                                               proxy_server_conf *conf,
-                                               server_rec *s,
-                                               apr_pool_t *p)
-{
-    apr_status_t rv;
-    int connected = 0;
-    int loglevel;
-    
-    while (backend_addr && !connected) {
-        if ((rv = apr_socket_create(newsock, backend_addr->family,
-                                    SOCK_STREAM, p)) != APR_SUCCESS) {
-            loglevel = backend_addr->next ? APLOG_DEBUG : APLOG_ERR;
-            ap_log_error(APLOG_MARK, loglevel, rv, s,
-                         "proxy: %s: error creating fam %d socket for target %s",
-                         proxy_function,
-                         backend_addr->family,
-                         backend_name);
-            /* this could be an IPv6 address from the DNS but the
-             * local machine won't give us an IPv6 socket; hopefully the
-             * DNS returned an additional address to try
-             */
-            backend_addr = backend_addr->next;
-            continue;
-        }
-
-#if !defined(TPF) && !defined(BEOS)
-        if (conf->recv_buffer_size > 0 &&
-            (rv = apr_setsocketopt(*newsock, APR_SO_RCVBUF,
-                                   conf->recv_buffer_size))) {
-            ap_log_error(APLOG_MARK, APLOG_ERR, rv, s,
-                         "setsockopt(SO_RCVBUF): Failed to set "
-                         "ProxyReceiveBufferSize, using default");
-        }
-#endif
-
-        /* Set a timeout on the socket */
-        if (conf->timeout_set == 1) {
-            apr_setsocketopt(*newsock, APR_SO_TIMEOUT,
-                             (int)(conf->timeout * APR_USEC_PER_SEC));
-        }
-        else {
-            apr_setsocketopt(*newsock, APR_SO_TIMEOUT,
-                             (int)(s->timeout * APR_USEC_PER_SEC));
-        }
-
-        ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, s,
-                     "proxy: %s: fam %d socket created to connect to %s",
-                     proxy_function, backend_addr->family, backend_name);
-
-        /* make the connection out of the socket */
-        rv = apr_connect(*newsock, backend_addr);
-
-        /* if an error occurred, loop round and try again */
-        if (rv != APR_SUCCESS) {
-            apr_socket_close(*newsock);
-            loglevel = backend_addr->next ? APLOG_DEBUG : APLOG_ERR;
-            ap_log_error(APLOG_MARK, loglevel, rv, s,
-                         "proxy: %s: attempt to connect to %pI (%s) failed",
-                         proxy_function,
-                         backend_addr,
-                         backend_name);
-            backend_addr = backend_addr->next;
-            continue;
-        }
-        connected = 1;
-    }
-    return connected ? 0 : 1;
-}
-    
diff --git a/modules/ssl/.cvsignore b/modules/ssl/.cvsignore
deleted file mode 100644
index e7507a4..0000000
--- a/modules/ssl/.cvsignore
+++ /dev/null
@@ -1,14 +0,0 @@
-.libs
-.deps
-Makefile
-modules.mk
-*.lo
-*.slo
-*.la
-Debug
-Release
-*.plg
-*.aps
-*.dep
-*.mak
-*.rc
diff --git a/modules/ssl/Makefile.in b/modules/ssl/Makefile.in
deleted file mode 100644
index 14cccdd..0000000
--- a/modules/ssl/Makefile.in
+++ /dev/null
@@ -1,71 +0,0 @@
-## ====================================================================
-## The Apache Software License, Version 1.1
-##
-## Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
-## reserved.
-##
-## Redistribution and use in source and binary forms, with or without
-## modification, are permitted provided that the following conditions
-## are met:
-##
-## 1. Redistributions of source code must retain the above copyright
-##    notice, this list of conditions and the following disclaimer.
-##
-## 2. Redistributions in binary form must reproduce the above copyright
-##    notice, this list of conditions and the following disclaimer in
-##    the documentation and/or other materials provided with the
-##    distribution.
-##
-## 3. The end-user documentation included with the redistribution,
-##    if any, must include the following acknowledgment:
-##       "This product includes software developed by the
-##        Apache Software Foundation (http://www.apache.org/)."
-##    Alternately, this acknowledgment may appear in the software itself,
-##    if and wherever such third-party acknowledgments normally appear.
-##
-## 4. The names "Apache" and "Apache Software Foundation" must
-##    not be used to endorse or promote products derived from this
-##    software without prior written permission. For written
-##    permission, please contact apache@apache.org.
-##
-## 5. Products derived from this software may not be called "Apache",
-##    nor may "Apache" appear in their name, without prior written
-##    permission of the Apache Software Foundation.
-##
-## THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
-## WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-## OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-## DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
-## ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
-## USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-## ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-## OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
-## OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-## SUCH DAMAGE.
-## ====================================================================
-
-#
-#   standard stuff
-#
-
-include $(top_srcdir)/build/special.mk
-
-#
-#   developer stuff
-#   (we really don't expect end users to use these targets!)
-#
-
-ssl_expr_scan.c: $(top_srcdir)/modules/ssl/ssl_expr_scan.l ssl_expr_parse.h
-	flex -Pssl_expr_yy -s -B $(top_srcdir)/modules/ssl/ssl_expr_scan.l
-	sed -e '/$$Header:/d' <lex.ssl_expr_yy.c >ssl_expr_scan.c && rm -f lex.ssl_expr_yy.c
-
-ssl_expr_parse.c ssl_expr_parse.h: $(top_srcdir)/modules/ssl/ssl_expr_parse.y
-	yacc -d $(top_srcdir)/modules/ssl/ssl_expr_parse.y
-	sed -e 's;yy;ssl_expr_yy;g' \
-	    -e '/#if defined(c_plusplus) || defined(__cplusplus)/,/#endif/d' \
-	    <y.tab.c >ssl_expr_parse.c && rm -f y.tab.c
-	sed -e 's;yy;ssl_expr_yy;g' \
-	    <y.tab.h >ssl_expr_parse.h && rm -f y.tab.h
-
diff --git a/modules/ssl/README b/modules/ssl/README
deleted file mode 100644
index a09df6d..0000000
--- a/modules/ssl/README
+++ /dev/null
@@ -1,176 +0,0 @@
-                      _             _ 
-  _ __ ___   ___   __| |    ___ ___| |
- | '_ ` _ \ / _ \ / _` |   / __/ __| | 
- | | | | | | (_) | (_| |   \__ \__ \ | ``mod_ssl combines the flexibility of
- |_| |_| |_|\___/ \__,_|___|___/___/_|   Apache with the security of OpenSSL.''
-                      |_____|                                           
- mod_ssl                               ``Ralf Engelschall has released an
- Apache Interface to OpenSSL             excellent module that integrates
- http://www.modssl.org/                  Apache and SSLeay.''                 
- Version 2.8                                               -- Tim J. Hudson
-
- SYNOPSIS
-
- This Apache module provides strong cryptography for the Apache 1.3 webserver
- via the Secure Sockets Layer (SSL v2/v3) and Transport Layer Security (TLS
- v1) protocols by the help of the SSL/TLS implementation library OpenSSL which
- is based on SSLeay from Eric A. Young and Tim J. Hudson. The mod_ssl package
- was created in April 1998 by Ralf S. Engelschall and was originally derived
- from software developed by Ben Laurie for use in the Apache-SSL HTTP server
- project. 
-
- SOURCES
-
- Here is a short overview of the source files:
-
- * README .................. This file ;)
- # Makefile.in ............. Makefile template for Unix platform
- # config.m4 ............... Autoconf stub for the Apache config mechanism
- # mod_ssl.c ............... main source file containing API structures
- # mod_ssl.h ............... common header file of mod_ssl
- # ssl_engine_config.c ..... module configuration handling
- # ssl_engine_dh.c ......... DSA/DH support
- # ssl_engine_ds.c ......... data structures
- - ssl_engine_ext.c ........ Extensions to other Apache parts
- # ssl_engine_init.c ....... module initialization
- * ssl_engine_io.c ......... I/O support
- # ssl_engine_kernel.c ..... SSL engine kernel
- # ssl_engine_log.c ........ logfile support
- # ssl_engine_mutex.c ...... mutual exclusion support
- # ssl_engine_pphrase.c .... pass-phrase handling
- # ssl_engine_rand.c ....... PRNG support
- # ssl_engine_vars.c ....... Variable Expansion support
- # ssl_expr.c .............. expression handling main source
- # ssl_expr.h .............. expression handling common header
- - ssl_expr_scan.c ......... expression scanner automaton (pre-generated)
- - ssl_expr_scan.l ......... expression scanner source
- - ssl_expr_parse.c ........ expression parser automaton  (pre-generated)
- - ssl_expr_parse.h ........ expression parser header     (pre-generated)
- - ssl_expr_parse.y ........ expression parser source
- # ssl_expr_eval.c ......... expression machine evaluation
- # ssl_scache.c ............ session cache abstraction layer
- # ssl_scache_dbm.c ........ session cache via DBM file
- - ssl_scache_shmcb.c ...... session cache via shared memory cyclic buffer
- - ssl_scache_shmht.c ...... session cache via shared memory hash table
- # ssl_util.c .............. utility functions
- # ssl_util_ssl.c .......... the OpenSSL companion source
- # ssl_util_ssl.h .......... the OpenSSL companion header
- # ssl_util_table.c ........ the hash table library source
- # ssl_util_table.h ........ the hash table library header
-
- Legend: # = already ported to Apache 2.0 and is cleaned up
-         * = ported to Apache 2.0 but still needs cleaning up
-         - = port still not finished
-
- The source files are written in clean ANSI C and pass the ``gcc -O -g
- -ggdb3 -Wall -Wshadow -Wpointer-arith -Wcast-align -Wmissing-prototypes
- -Wmissing-declarations -Wnested-externs -Winline'' compiler test
- (assuming `gcc' is GCC 2.95.2 or newer) without any complains. When
- you make changes or additions make sure the source still passes this
- compiler test.
-
- FUNCTIONS
-  
- Inside the source code you will be confronted with the following types of
- functions which can be identified by their prefixes:
-
-   ap_xxxx() ............... Apache API function
-   ssl_xxxx() .............. mod_ssl function
-   SSL_xxxx() .............. OpenSSL function (SSL library)
-   OpenSSL_xxxx() .......... OpenSSL function (SSL library)
-   X509_xxxx() ............. OpenSSL function (Crypto library)
-   PEM_xxxx() .............. OpenSSL function (Crypto library)
-   EVP_xxxx() .............. OpenSSL function (Crypto library)
-   RSA_xxxx() .............. OpenSSL function (Crypto library)
-
- DATA STRUCTURES
-
- Inside the source code you will be confronted with the following
- data structures:
-
-   server_rec .............. Apache (Virtual) Server
-   conn_rec ................ Apache Connection
-   BUFF .................... Apache Connection Buffer
-   request_rec ............. Apache Request
-   SSLModConfig ............ mod_ssl (Global)  Module Configuration
-   SSLSrvConfig ............ mod_ssl (Virtual) Server Configuration
-   SSLDirConfig ............ mod_ssl Directory Configuration
-   SSL_CTX ................. OpenSSL Context
-   SSL_METHOD .............. OpenSSL Protocol Method
-   SSL_CIPHER .............. OpenSSL Cipher
-   SSL_SESSION ............. OpenSSL Session
-   SSL ..................... OpenSSL Connection
-   BIO ..................... OpenSSL Connection Buffer
-   SSLFilterRec ............ mod_ssl Filter Context
-
- For an overview how these are related and chained together have a look at the
- page in README.dsov.{fig,ps}. It contains overview diagrams for those data
- structures. It's designed for DIN A4 paper size, but you can easily generate
- a smaller version inside XFig by specifing a magnification on the Export
- panel.
-
- EXPERIMENTAL CODE
-
- Experimental code is always encapsulated as following:
-
-   | #ifdef SSL_EXPERIMENTAL_xxxx
-   | ...
-   | #endif
-
- This way it is only compiled in when this define is enabled with
- the APACI --enable-rule=SSL_EXPERIMENTAL option and as long as the
- C pre-processor variable SSL_EXPERIMENTAL_xxxx_IGNORE is _NOT_
- defined (via CFLAGS). Or in other words: SSL_EXPERIMENTAL enables all
- SSL_EXPERIMENTAL_xxxx variables, except if SSL_EXPERIMENTAL_xxxx_IGNORE
- is already defined. Currently the following features are experimental:
-
-   o SSL_EXPERIMENTAL_PERDIRCA
-     The ability to use SSLCACertificateFile and SSLCACertificatePath
-     in a per-directory context (.htaccess). This is provided by some nasty
-     reconfiguration hacks until OpenSSL has better support for this. It
-     should work on non-multithreaded platforms (all but Win32).
-
-   o SSL_EXPERIMENTAL_PROXY
-     The ability to use various additional SSLProxyXXX directives in
-     oder to control extended client functionality in the HTTPS proxy
-     code.
-
-   o SSL_EXPERIMENTAL_ENGINE
-     The ability to support the new forthcoming OpenSSL ENGINE stuff.
-     Until this development branch of OpenSSL is merged into the main
-     stream, you have to use openssl-engine-0.9.x.tar.gz for this.
-     mod_ssl automatically recognizes this OpenSSL variant and then can
-     activate external crypto devices through SSLCryptoDevice directive.
-
- INCOMPATIBILITIES
-
- The following intentional incompatibilities exist between mod_ssl 2.x
- from Apache 1.3 and this mod_ssl version for Apache 2.0:
-
- o The complete EAPI-based SSL_VENDOR stuff was removed.
- o The complete EAPI-based SSL_COMPAT stuff was removed.
- o The <IfDefine> variable MOD_SSL is no longer provided automatically 
- o The complete SSL_CONSERVATIVE stuff was removed, i.e.,
-   SSL renegotiations in combination with POST request are not supported
-   unless the problem is solved again, but this time through layered I/O.
-
- MAJOR CHANGES 
-
- The following major changes were made between mod_ssl 2.x
- from Apache 1.3 and this mod_ssl version for Apache 2.0:
-
- o The DBM based session cache is now based on APR's DBM API only.
- o Introduced Filter logic (similar to mod_tls)
- o Eliminated ap_global_ctx. Storing Persistant information in 
-   process_rec->pool->user_data. The ssl_pphrase_Handle_CB() and 
-   ssl_config_global_* () functions have an extra parameter now - 
-   "server_rec *" -  which is used to retrieve the SSLModConfigRec.
- 
- TODO
-
- o Cleanup ssl_engine_io.c !!
- o Port all remaining code (code inside #if 0...#endif blocks)
- o Do we need SSL_set_read_ahead()?
- o Enable use of MM, SHMCB and SHMHT.
- o Enable SSL extensions (ssl_engine_ext.c)
-
diff --git a/modules/ssl/README.dsov.fig b/modules/ssl/README.dsov.fig
deleted file mode 100644
index d8d03db..0000000
--- a/modules/ssl/README.dsov.fig
+++ /dev/null
@@ -1,346 +0,0 @@
-#FIG 3.2
-Landscape
-Center
-Metric
-Letter  
-100.00
-Single
--2
-1200 2
-0 32 #616561
-0 33 #b6b2b6
-0 34 #f7f3f7
-0 35 #cfcfcf
-0 36 #ffffff
-6 6345 2835 7155 3150
-6 6345 2970 7110 3150
-4 0 0 200 0 20 8 0.0000 4 120 585 6345 3105 "ssl_module")\001
--6
-4 0 0 200 0 20 8 0.0000 4 120 660 6345 2970 ap_ctx_get(...,\001
--6
-6 10800 2610 12240 3060
-4 0 0 200 0 20 8 0.0000 4 120 1170 10800 2745 ap_get_module_config(...\001
-4 0 0 200 0 20 8 0.0000 4 120 795 10800 2880 ->per_dir_config,\001
-4 0 0 200 0 20 8 0.0000 4 120 585 10800 3015 &ssl_module)\001
--6
-6 7920 4770 9135 4995
-2 4 0 1 35 35 200 0 20 0.000 0 0 4 0 0 5
-	 9135 4995 7920 4995 7920 4770 9135 4770 9135 4995
-4 0 0 100 0 18 12 0.0000 4 180 1065 8010 4950 request_rec\001
--6
-2 1 0 1 0 34 200 0 20 0.000 0 0 -1 1 0 2
-	1 1 1.00 60.00 120.00
-	 6975 3330 7425 2520
-2 1 0 1 0 34 200 0 20 0.000 0 0 -1 1 0 2
-	1 1 1.00 60.00 120.00
-	 7200 4230 9450 2520
-2 1 0 1 0 34 200 0 20 0.000 0 0 -1 1 0 2
-	1 1 1.00 60.00 120.00
-	 7875 4905 7200 5220
-2 1 0 1 0 34 200 0 20 0.000 0 0 -1 1 0 2
-	1 1 1.00 60.00 120.00
-	 6750 5130 6750 4545
-2 1 0 1 0 34 200 0 20 0.000 0 0 -1 1 0 2
-	1 1 1.00 60.00 120.00
-	 6705 5445 7155 6120
-2 1 0 1 0 34 200 0 20 0.000 0 0 -1 1 0 2
-	1 1 1.00 60.00 120.00
-	 7875 4815 7200 4590
-2 1 0 1 0 34 200 0 20 0.000 0 0 -1 1 0 2
-	1 1 1.00 60.00 120.00
-	 9585 2565 11475 4230
-2 1 0 1 0 34 200 0 20 0.000 0 0 -1 1 0 2
-	1 1 1.00 60.00 120.00
-	 10170 5130 11835 4545
-2 1 0 1 0 34 200 0 20 0.000 0 0 -1 1 0 2
-	1 1 1.00 60.00 120.00
-	 7920 6075 9855 5400
-2 1 0 1 0 34 200 0 20 0.000 0 0 -1 1 0 2
-	1 1 1.00 60.00 120.00
-	 9990 5445 10935 5625
-2 1 0 1 0 34 200 0 20 0.000 0 0 -1 1 0 2
-	1 1 1.00 60.00 120.00
-	 10215 5310 10935 5310
-2 1 0 1 0 34 200 0 20 0.000 0 0 -1 1 0 2
-	1 1 1.00 60.00 120.00
-	 11925 4590 11925 5085
-2 1 0 1 0 34 200 0 20 0.000 0 0 -1 1 0 2
-	1 1 1.00 60.00 120.00
-	 9810 5490 9810 6840
-2 1 0 1 0 34 200 0 20 0.000 0 0 -1 1 0 2
-	1 1 1.00 60.00 120.00
-	 9945 5445 10935 6030
-2 1 0 1 0 34 200 0 20 0.000 0 0 -1 1 0 2
-	1 1 1.00 60.00 120.00
-	 8865 4725 10800 2565
-2 1 0 3 0 34 200 0 20 0.000 0 0 -1 0 0 2
-	 675 6075 5850 6075
-2 1 2 1 0 34 200 0 20 1.000 0 0 -1 1 0 2
-	1 1 1.00 60.00 120.00
-	 675 6525 675 6075
-2 1 2 1 0 34 200 0 20 1.000 0 0 -1 1 0 2
-	1 0 1.00 60.00 120.00
-	 5850 6075 5850 6525
-2 1 0 3 0 34 200 0 20 0.000 0 0 -1 0 0 2
-	 900 5625 5625 5625
-2 1 0 3 0 34 200 0 20 0.000 0 0 -1 0 0 2
-	 1125 5175 5400 5175
-2 1 0 3 0 34 200 0 20 0.000 0 0 -1 0 0 2
-	 1350 4725 5175 4725
-2 1 0 3 0 34 200 0 20 0.000 0 0 -1 0 0 2
-	 1575 4275 4950 4275
-2 1 0 3 0 34 200 0 20 0.000 0 0 -1 0 0 2
-	 1800 3825 4725 3825
-2 1 0 3 0 34 200 0 20 0.000 0 0 -1 0 0 2
-	 2025 3375 4500 3375
-2 1 0 3 0 34 200 0 20 0.000 0 0 -1 0 0 2
-	 2250 2925 4275 2925
-2 1 0 3 0 34 200 0 20 0.000 0 0 -1 0 0 2
-	 2475 2475 4050 2475
-2 1 0 3 0 34 200 0 20 0.000 0 0 -1 0 0 2
-	 2700 2025 3825 2025
-2 1 0 3 0 34 200 0 20 0.000 0 0 -1 0 0 2
-	 2925 1575 3600 1575
-2 1 2 1 0 34 200 0 20 1.000 0 0 -1 1 0 2
-	1 1 1.00 60.00 120.00
-	 900 6075 900 5625
-2 1 2 1 0 34 200 0 20 1.000 0 0 -1 1 0 2
-	1 1 1.00 60.00 120.00
-	 1125 6525 1125 5175
-2 1 2 1 0 34 200 0 20 1.000 0 0 -1 1 0 2
-	1 1 1.00 60.00 120.00
-	 1350 5175 1350 4725
-2 1 2 1 0 34 200 0 20 1.000 0 0 -1 1 0 2
-	1 1 1.00 60.00 120.00
-	 1575 4725 1575 4275
-2 1 2 1 0 34 200 0 20 1.000 0 0 -1 1 0 2
-	1 1 1.00 60.00 120.00
-	 1800 6525 1800 3825
-2 1 2 1 0 34 200 0 20 1.000 0 0 -1 1 0 2
-	1 1 1.00 60.00 120.00
-	 2025 3825 2025 3375
-2 1 2 1 0 34 200 0 20 1.000 0 0 -1 1 0 2
-	1 1 1.00 60.00 120.00
-	 2250 3375 2250 2925
-2 1 2 1 0 34 200 0 20 1.000 0 0 -1 1 0 2
-	1 1 1.00 60.00 120.00
-	 2475 2925 2475 2475
-2 1 2 1 0 34 200 0 20 1.000 0 0 -1 1 0 2
-	1 0 1.00 60.00 120.00
-	 5625 5625 5625 6075
-2 1 2 1 0 34 200 0 20 1.000 0 0 -1 1 0 2
-	1 0 1.00 60.00 120.00
-	 5400 5175 5400 6525
-2 1 2 1 0 34 200 0 20 1.000 0 0 -1 1 0 2
-	1 0 1.00 60.00 120.00
-	 5175 4725 5175 5175
-2 1 2 1 0 34 200 0 20 1.000 0 0 -1 1 0 2
-	1 0 1.00 60.00 120.00
-	 4950 4275 4950 4725
-2 1 2 1 0 34 200 0 20 1.000 0 0 -1 1 0 2
-	1 0 1.00 60.00 120.00
-	 4725 3825 4725 6525
-2 1 2 1 0 34 200 0 20 1.000 0 0 -1 1 0 2
-	1 0 1.00 60.00 120.00
-	 4500 3375 4500 3825
-2 1 2 1 0 34 200 0 20 1.000 0 0 -1 1 0 2
-	1 0 1.00 60.00 120.00
-	 4275 2925 4275 3375
-2 1 2 1 0 34 200 0 20 1.000 0 0 -1 1 0 2
-	1 0 1.00 60.00 120.00
-	 4050 2475 4050 2925
-2 1 2 1 0 34 200 0 20 1.000 0 0 -1 1 0 2
-	1 1 1.00 60.00 120.00
-	 2700 6525 2700 2025
-2 1 2 1 0 34 200 0 20 1.000 0 0 -1 1 0 2
-	1 0 1.00 60.00 120.00
-	 3825 2025 3825 6525
-2 1 2 1 0 34 200 0 20 1.000 0 0 -1 1 0 2
-	1 0 1.00 60.00 120.00
-	 3600 1575 3600 2025
-2 1 2 1 0 34 200 0 20 1.000 0 0 -1 1 0 2
-	1 1 1.00 60.00 120.00
-	 2925 2025 2925 1575
-2 1 0 4 0 0 200 0 20 0.000 0 0 -1 1 0 2
-	1 1 4.00 60.00 120.00
-	 540 6525 6300 6525
-2 3 0 1 7 7 800 0 20 0.000 0 0 -1 0 0 9
-	 675 6525 5850 6525 5850 6075 5625 6075 5625 5625 900 5625
-	 900 6075 675 6075 675 6525
-2 3 0 1 34 34 700 0 20 0.000 0 0 -1 0 0 13
-	 1125 6525 5355 6525 5400 5175 5175 5175 5175 4725 4950 4725
-	 4950 4275 1575 4275 1575 4725 1350 4725 1350 5175 1125 5175
-	 1125 6525
-2 3 0 1 35 35 500 0 20 0.000 0 0 -1 0 0 17
-	 1800 6525 4725 6525 4725 3825 4500 3825 4500 3375 4275 3375
-	 4275 2925 4050 2925 4050 2475 2475 2475 2475 2925 2250 2925
-	 2250 3375 2025 3375 2025 3825 1800 3825 1800 6525
-2 3 0 1 33 33 400 0 20 0.000 0 0 -1 0 0 9
-	 2700 6525 3825 6525 3825 2025 3600 2025 3600 1575 2925 1575
-	 2925 2025 2700 2025 2700 6525
-2 1 0 1 0 34 200 0 20 0.000 0 0 -1 1 1 2
-	2 0 1.00 60.00 120.00
-	2 0 1.00 60.00 120.00
-	 2700 6750 3825 6750
-2 1 0 1 0 34 200 0 20 0.000 0 0 -1 1 1 2
-	2 0 1.00 60.00 120.00
-	2 0 1.00 60.00 120.00
-	 1125 7200 5400 7200
-2 1 0 1 0 34 200 0 20 0.000 0 0 -1 1 1 2
-	2 0 1.00 60.00 120.00
-	2 0 1.00 60.00 120.00
-	 1800 6975 4725 6975
-2 1 0 1 0 34 200 0 20 0.000 0 0 -1 1 1 2
-	2 0 1.00 60.00 120.00
-	2 0 1.00 60.00 120.00
-	 675 7425 5850 7425
-2 1 2 1 0 34 200 0 20 3.000 0 1 -1 0 0 2
-	 675 6570 675 7650
-2 1 2 1 0 34 200 0 20 3.000 0 1 -1 0 0 2
-	 1125 6570 1125 7650
-2 1 2 1 0 34 200 0 20 3.000 0 1 -1 0 0 2
-	 1800 6570 1800 7650
-2 1 2 1 0 34 200 0 20 3.000 0 1 -1 0 0 2
-	 2700 6570 2700 7650
-2 1 2 1 0 34 200 0 20 3.000 0 1 -1 0 0 2
-	 3825 6570 3825 7650
-2 1 2 1 0 34 200 0 20 3.000 0 1 -1 0 0 2
-	 4725 6570 4725 7650
-2 1 2 1 0 34 200 0 20 3.000 0 1 -1 0 0 2
-	 5400 6570 5400 7650
-2 1 2 1 0 34 200 0 20 3.000 0 1 -1 0 0 2
-	 5850 6570 5850 7650
-2 4 0 2 0 7 100 0 -1 0.000 0 0 20 0 0 5
-	 12600 8550 450 8550 450 225 12600 225 12600 8550
-2 4 0 1 0 34 200 0 20 0.000 0 0 20 0 0 5
-	 12600 1350 450 1350 450 225 12600 225 12600 1350
-2 4 0 1 35 35 200 0 20 0.000 0 0 4 0 0 5
-	 10170 2475 8775 2475 8775 2250 10170 2250 10170 2475
-2 4 0 1 35 35 200 0 20 0.000 0 0 4 0 0 5
-	 11925 2475 10575 2475 10575 2250 11925 2250 11925 2475
-2 4 0 1 35 35 200 0 20 0.000 0 0 4 0 0 5
-	 12375 4500 11430 4500 11430 4275 12375 4275 12375 4500
-2 4 0 1 35 35 200 0 20 0.000 0 0 4 0 0 5
-	 12375 5400 10980 5400 10980 5175 12375 5175 12375 5400
-2 4 0 1 35 35 200 0 20 0.000 0 0 4 0 0 5
-	 10170 5400 9675 5400 9675 5175 10170 5175 10170 5400
-2 4 0 1 35 35 200 0 20 0.000 0 0 4 0 0 5
-	 7875 6300 7200 6300 7200 6075 7875 6075 7875 6300
-2 4 0 1 35 35 200 0 20 0.000 0 0 4 0 0 5
-	 8190 2475 6750 2475 6750 2250 8190 2250 8190 2475
-2 4 0 1 35 35 200 0 20 0.000 0 0 4 0 0 5
-	 7605 3600 6300 3600 6300 3375 7605 3375 7605 3600
-2 4 0 1 35 35 200 0 20 0.000 0 0 4 0 0 5
-	 7335 4500 6300 4500 6300 4275 7335 4275 7335 4500
-2 4 0 1 35 35 200 0 20 0.000 0 0 4 0 0 5
-	 7200 5400 6300 5400 6300 5175 7200 5175 7200 5400
-2 1 0 6 7 7 600 0 -1 0.000 0 0 -1 0 0 2
-	 9450 4500 6075 1935
-2 1 0 6 7 7 600 0 -1 0.000 0 0 4 0 0 2
-	 9450 4500 12465 2205
-2 1 0 6 7 7 600 0 -1 0.000 0 0 4 0 0 2
-	 9450 4500 9450 7785
-2 1 0 1 0 34 200 0 20 0.000 0 0 -1 1 0 2
-	1 1 1.00 60.00 120.00
-	 9630 5310 7245 5310
-2 1 0 1 0 34 200 0 20 0.000 0 0 -1 1 0 2
-	1 1 1.00 60.00 120.00
-	 11385 4365 7380 4365
-2 4 0 1 35 35 200 0 20 0.000 0 0 4 0 0 5
-	 12240 5805 10980 5805 10980 5580 12240 5580 12240 5805
-2 4 0 1 35 35 200 0 20 0.000 0 0 4 0 0 5
-	 12375 6210 10980 6210 10980 5985 12375 5985 12375 6210
-2 1 0 1 0 34 200 0 20 0.000 0 0 -1 1 0 2
-	1 1 1.00 60.00 120.00
-	 11205 6885 9900 5445
-2 4 0 1 35 35 200 0 20 0.000 0 0 4 0 0 5
-	 12285 7155 10530 7155 10530 6930 12285 6930 12285 7155
-2 4 0 1 35 35 200 0 20 0.000 0 0 4 0 0 5
-	 10170 7155 9630 7155 9630 6930 10170 6930 10170 7155
-2 1 0 6 7 7 600 0 -1 0.000 0 0 4 0 0 2
-	 12510 6435 9450 6435
-2 1 0 1 0 34 300 0 20 0.000 0 0 7 1 0 4
-	1 1 1.00 60.00 120.00
-	 12375 4455 12510 4635 12510 6210 11970 6885
-2 1 2 1 0 34 200 0 20 1.000 0 0 -1 1 0 2
-	1 1 1.00 60.00 120.00
-	 9850 5143 9175 4918
-3 1 0 1 34 34 800 0 20 0.000 0 0 0 41
-	 7380 1710 6390 2115 5535 2115 6075 3015 5670 3465 6165 3915
-	 5715 4410 6030 5040 6030 5310 6480 5715 6390 6255 6975 6300
-	 7065 6975 7965 6750 8100 7560 8955 7290 9360 7740 9720 7560
-	 10755 8145 12060 8280 12375 7650 12420 7200 12510 7065 12330 6660
-	 12510 6390 12420 5940 12375 5400 12510 5220 12510 4725 12600 4275
-	 12375 3645 12105 3240 12150 2745 12375 2700 12330 1980 11790 1575
-	 11250 1935 10125 1485 8955 2070 7785 1620 7695 1575
-	 1.000 1.000 1.000 1.000 1.000 1.000 1.000 1.000
-	 1.000 1.000 1.000 1.000 1.000 1.000 1.000 1.000
-	 1.000 1.000 1.000 1.000 1.000 1.000 1.000 1.000
-	 1.000 1.000 1.000 1.000 1.000 1.000 1.000 1.000
-	 1.000 1.000 1.000 1.000 1.000 1.000 1.000 1.000
-	 1.000
-4 0 0 100 0 0 12 0.0000 4 180 1440 10575 675 Ralf S. Engelschall\001
-4 0 0 100 0 18 20 0.0000 4 270 3840 4275 675 Apache+mod_ssl+OpenSSL\001
-4 0 0 100 0 0 10 0.0000 4 135 1320 10575 855 rse@engelschall.com\001
-4 0 0 100 0 0 10 0.0000 4 135 1410 10575 1035 www.engelschall.com\001
-4 0 0 100 0 0 12 0.0000 4 135 870 900 675 Version 1.3\001
-4 0 0 100 0 0 12 0.0000 4 180 1035 900 855 12-Apr-1999\001
-4 0 0 200 0 20 8 0.0000 4 60 390 6210 4680 ->server\001
-4 0 0 200 0 20 8 0.0000 4 120 855 8280 6120 ap_ctx_get(...,"ssl")\001
-4 0 0 200 0 20 8 0.0000 4 120 1170 7740 2700 ap_get_module_config(...\001
-4 0 0 200 0 20 8 0.0000 4 120 810 7740 2835 ->module_config,\001
-4 0 0 200 0 20 8 0.0000 4 120 585 7740 2970 &ssl_module)\001
-4 0 0 100 0 18 20 0.0000 4 270 1200 9000 8100 Chaining\001
-4 0 0 100 0 18 20 0.0000 4 210 1095 2745 8100 Lifetime\001
-4 0 0 100 0 18 12 0.0000 4 180 1215 810 6255 ap_global_ctx\001
-4 0 0 100 0 18 12 0.0000 4 180 1305 990 5805 SSLModConfig\001
-4 0 0 100 0 18 12 0.0000 4 180 840 4050 4455 SSL_CTX\001
-4 0 0 100 0 18 12 0.0000 4 150 975 4455 5355 server_rec\001
-4 0 0 100 0 18 12 0.0000 4 180 1260 3870 4905 SSLSrvConfig\001
-4 0 0 100 0 18 12 0.0000 4 135 480 1845 4005 BUFF\001
-4 0 0 100 0 18 12 0.0000 4 150 810 2070 3555 conn_rec\001
-4 0 0 100 0 18 12 0.0000 4 135 345 2295 3105 BIO\001
-4 0 0 100 0 18 12 0.0000 4 135 375 2565 2655 SSL\001
-4 0 0 100 0 18 12 0.0000 4 180 1185 3645 1620 SSLDirConfig\001
-4 0 0 100 0 18 12 0.0000 4 180 1065 3915 2070 request_rec\001
-4 0 0 200 0 0 8 0.0000 4 120 1440 900 7560 Startup, Runtime, Shutdown\001
-4 0 0 200 0 0 8 0.0000 4 105 975 1350 7335 Configuration Time\001
-4 0 0 200 0 0 8 0.0000 4 90 1050 2025 7110 Connection Duration\001
-4 0 0 200 0 0 8 0.0000 4 120 885 2835 6885 Request Duration\001
-4 0 0 200 0 18 20 0.0000 4 195 90 6345 6795 t\001
-4 0 0 200 0 20 8 0.0000 4 90 345 7110 5985 ->client\001
-4 0 0 100 0 18 12 0.0000 4 180 1305 6795 2430 SSLModConfig\001
-4 0 0 100 0 18 12 0.0000 4 180 1260 8865 2430 SSLSrvConfig\001
-4 0 0 100 0 18 12 0.0000 4 180 1215 6345 3555 ap_global_ctx\001
-4 0 0 100 0 18 12 0.0000 4 150 975 6345 4455 server_rec\001
-4 0 0 100 0 18 12 0.0000 4 150 810 6345 5355 conn_rec\001
-4 0 0 100 0 18 12 0.0000 4 135 375 9720 5355 SSL\001
-4 0 0 100 0 18 12 0.0000 4 180 1185 10665 2430 SSLDirConfig\001
-4 0 0 100 0 18 12 0.0000 4 135 480 7290 6255 BUFF\001
-4 0 0 100 0 18 12 0.0000 4 180 1305 11025 5355 SSL_METHOD\001
-4 0 0 100 0 18 12 0.0000 4 180 840 11475 4455 SSL_CTX\001
-4 0 0 100 0 18 24 0.0000 4 285 4365 3915 1080 Data Structure Overview\001
-4 0 0 200 0 20 8 0.0000 4 90 615 7065 5085 ->connection\001
-4 0 0 200 0 20 8 0.0000 4 60 390 7065 4770 ->server\001
-4 0 0 200 0 20 8 0.0000 4 120 960 8010 5445 SSL_get_app_data()\001
-4 0 0 200 0 20 8 0.0000 4 120 510 10530 4050 ->pSSLCtx\001
-4 0 0 200 0 20 8 0.0000 4 120 1215 7875 4275 SSL_CTX_get_app_data()\001
-4 0 0 200 0 20 8 0.0000 4 120 1155 10305 5535 SSL_get_current_cipher()\001
-4 0 0 100 0 18 12 0.0000 4 180 1170 11025 5760 SSL_CIPHER\001
-4 0 0 100 0 18 12 0.0000 4 180 1350 10980 6165 SSL_SESSION\001
-4 0 0 200 0 20 8 0.0000 4 120 840 10440 5940 SSL_get_session()\001
-4 0 0 100 0 18 12 0.0000 4 180 1665 10575 7110 X509_STORE_CTX\001
-4 0 0 100 0 18 12 0.0000 4 135 345 9720 7110 BIO\001
-4 0 0 200 0 20 8 0.0000 4 120 840 9540 7335 SSL_get_{r,w}bio()\001
-4 0 0 100 0 18 20 0.0000 4 270 1170 8730 3465 mod_ssl\001
-4 0 0 100 0 18 20 0.0000 4 270 1050 8145 6750 Apache\001
-4 0 0 200 0 20 8 0.0000 4 120 945 10125 4680 SSL_get_SSL_CTX()\001
-4 0 0 200 0 20 8 0.0000 4 120 1170 10350 5175 SSL_get_SSL_METHOD()\001
-4 0 0 200 0 20 8 0.0000 4 90 465 11745 4770 ->method\001
-4 0 0 200 0 20 8 0.0000 4 120 1665 9945 6480 X509_STORE_CTX_get_app_data()\001
-4 0 0 200 0 20 8 0.0000 4 120 1215 10980 6705 SSL_CTX_get_cert_store()\001
-4 0 0 200 0 20 8 0.0000 4 120 1020 8280 5130 SSL_get_app_data2()\001
-4 0 0 100 0 18 20 0.0000 4 270 1290 10710 7605 OpenSSL\001
-4 0 0 100 0 18 12 0.0000 4 180 720 10710 7785 [Crypto]\001
-4 0 0 100 0 18 20 0.0000 4 270 1290 10935 3645 OpenSSL\001
-4 0 0 100 0 18 12 0.0000 4 180 495 10935 3825 [SSL]\001
diff --git a/modules/ssl/README.dsov.ps b/modules/ssl/README.dsov.ps
deleted file mode 100644
index def19db..0000000
--- a/modules/ssl/README.dsov.ps
+++ /dev/null
@@ -1,1138 +0,0 @@
-%!PS-Adobe-2.0
-%%Title: README.dsov.ps
-%%Creator: fig2dev Version 3.2 Patchlevel 1
-%%CreationDate: Mon Apr 12 17:09:11 1999
-%%For: rse@en1.engelschall.com (Ralf S. Engelschall)
-%%Orientation: Landscape
-%%BoundingBox: 59 37 553 755
-%%Pages: 1
-%%BeginSetup
-%%IncludeFeature: *PageSize Letter
-%%EndSetup
-%%Magnification: 0.9340
-%%EndComments
-/$F2psDict 200 dict def
-$F2psDict begin
-$F2psDict /mtrx matrix put
-/col-1 {0 setgray} bind def
-/col0 {0.000 0.000 0.000 srgb} bind def
-/col1 {0.000 0.000 1.000 srgb} bind def
-/col2 {0.000 1.000 0.000 srgb} bind def
-/col3 {0.000 1.000 1.000 srgb} bind def
-/col4 {1.000 0.000 0.000 srgb} bind def
-/col5 {1.000 0.000 1.000 srgb} bind def
-/col6 {1.000 1.000 0.000 srgb} bind def
-/col7 {1.000 1.000 1.000 srgb} bind def
-/col8 {0.000 0.000 0.560 srgb} bind def
-/col9 {0.000 0.000 0.690 srgb} bind def
-/col10 {0.000 0.000 0.820 srgb} bind def
-/col11 {0.530 0.810 1.000 srgb} bind def
-/col12 {0.000 0.560 0.000 srgb} bind def
-/col13 {0.000 0.690 0.000 srgb} bind def
-/col14 {0.000 0.820 0.000 srgb} bind def
-/col15 {0.000 0.560 0.560 srgb} bind def
-/col16 {0.000 0.690 0.690 srgb} bind def
-/col17 {0.000 0.820 0.820 srgb} bind def
-/col18 {0.560 0.000 0.000 srgb} bind def
-/col19 {0.690 0.000 0.000 srgb} bind def
-/col20 {0.820 0.000 0.000 srgb} bind def
-/col21 {0.560 0.000 0.560 srgb} bind def
-/col22 {0.690 0.000 0.690 srgb} bind def
-/col23 {0.820 0.000 0.820 srgb} bind def
-/col24 {0.500 0.190 0.000 srgb} bind def
-/col25 {0.630 0.250 0.000 srgb} bind def
-/col26 {0.750 0.380 0.000 srgb} bind def
-/col27 {1.000 0.500 0.500 srgb} bind def
-/col28 {1.000 0.630 0.630 srgb} bind def
-/col29 {1.000 0.750 0.750 srgb} bind def
-/col30 {1.000 0.880 0.880 srgb} bind def
-/col31 {1.000 0.840 0.000 srgb} bind def
-/col32 {0.380 0.396 0.380 srgb} bind def
-/col33 {0.714 0.698 0.714 srgb} bind def
-/col34 {0.969 0.953 0.969 srgb} bind def
-/col35 {0.812 0.812 0.812 srgb} bind def
-/col36 {1.000 1.000 1.000 srgb} bind def
-
-end
-save
-48.0 12.0 translate
- 90 rotate
-1 -1 scale
-
-/cp {closepath} bind def
-/ef {eofill} bind def
-/gr {grestore} bind def
-/gs {gsave} bind def
-/sa {save} bind def
-/rs {restore} bind def
-/l {lineto} bind def
-/m {moveto} bind def
-/rm {rmoveto} bind def
-/n {newpath} bind def
-/s {stroke} bind def
-/sh {show} bind def
-/slc {setlinecap} bind def
-/slj {setlinejoin} bind def
-/slw {setlinewidth} bind def
-/srgb {setrgbcolor} bind def
-/rot {rotate} bind def
-/sc {scale} bind def
-/sd {setdash} bind def
-/ff {findfont} bind def
-/sf {setfont} bind def
-/scf {scalefont} bind def
-/sw {stringwidth} bind def
-/tr {translate} bind def
-/tnt {dup dup currentrgbcolor
-  4 -2 roll dup 1 exch sub 3 -1 roll mul add
-  4 -2 roll dup 1 exch sub 3 -1 roll mul add
-  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
-  bind def
-/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
-  4 -2 roll mul srgb} bind def
-/reencdict 12 dict def /ReEncode { reencdict begin
-/newcodesandnames exch def /newfontname exch def /basefontname exch def
-/basefontdict basefontname findfont def /newfont basefontdict maxlength dict def
-basefontdict { exch dup /FID ne { dup /Encoding eq
-{ exch dup length array copy newfont 3 1 roll put }
-{ exch newfont 3 1 roll put } ifelse } { pop pop } ifelse } forall
-newfont /FontName newfontname put newcodesandnames aload pop
-128 1 255 { newfont /Encoding get exch /.notdef put } for
-newcodesandnames length 2 idiv { newfont /Encoding get 3 1 roll put } repeat
-newfontname newfont definefont pop end } def
-/isovec [
-8#200 /grave 8#201 /acute 8#202 /circumflex 8#203 /tilde
-8#204 /macron 8#205 /breve 8#206 /dotaccent 8#207 /dieresis
-8#210 /ring 8#211 /cedilla 8#212 /hungarumlaut 8#213 /ogonek 8#214 /caron
-8#220 /dotlessi 8#230 /oe 8#231 /OE
-8#240 /space 8#241 /exclamdown 8#242 /cent 8#243 /sterling
-8#244 /currency 8#245 /yen 8#246 /brokenbar 8#247 /section 8#250 /dieresis
-8#251 /copyright 8#252 /ordfeminine 8#253 /guillemotleft 8#254 /logicalnot
-8#255 /endash 8#256 /registered 8#257 /macron 8#260 /degree 8#261 /plusminus
-8#262 /twosuperior 8#263 /threesuperior 8#264 /acute 8#265 /mu 8#266 /paragraph
-8#267 /periodcentered 8#270 /cedilla 8#271 /onesuperior 8#272 /ordmasculine
-8#273 /guillemotright 8#274 /onequarter 8#275 /onehalf
-8#276 /threequarters 8#277 /questiondown 8#300 /Agrave 8#301 /Aacute
-8#302 /Acircumflex 8#303 /Atilde 8#304 /Adieresis 8#305 /Aring
-8#306 /AE 8#307 /Ccedilla 8#310 /Egrave 8#311 /Eacute
-8#312 /Ecircumflex 8#313 /Edieresis 8#314 /Igrave 8#315 /Iacute
-8#316 /Icircumflex 8#317 /Idieresis 8#320 /Eth 8#321 /Ntilde 8#322 /Ograve
-8#323 /Oacute 8#324 /Ocircumflex 8#325 /Otilde 8#326 /Odieresis 8#327 /multiply
-8#330 /Oslash 8#331 /Ugrave 8#332 /Uacute 8#333 /Ucircumflex
-8#334 /Udieresis 8#335 /Yacute 8#336 /Thorn 8#337 /germandbls 8#340 /agrave
-8#341 /aacute 8#342 /acircumflex 8#343 /atilde 8#344 /adieresis 8#345 /aring
-8#346 /ae 8#347 /ccedilla 8#350 /egrave 8#351 /eacute
-8#352 /ecircumflex 8#353 /edieresis 8#354 /igrave 8#355 /iacute
-8#356 /icircumflex 8#357 /idieresis 8#360 /eth 8#361 /ntilde 8#362 /ograve
-8#363 /oacute 8#364 /ocircumflex 8#365 /otilde 8#366 /odieresis 8#367 /divide
-8#370 /oslash 8#371 /ugrave 8#372 /uacute 8#373 /ucircumflex
-8#374 /udieresis 8#375 /yacute 8#376 /thorn 8#377 /ydieresis] def
-/Times-Roman /Times-Roman-iso isovec ReEncode
-/Helvetica-Bold /Helvetica-Bold-iso isovec ReEncode
-/Helvetica-Narrow /Helvetica-Narrow-iso isovec ReEncode
-/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
-/$F2psEnd {$F2psEnteredState restore end} def
-%%EndProlog
-
-$F2psBegin
-10 setmiterlimit
-n -1000 9572 m -1000 -1000 l 13622 -1000 l 13622 9572 l cp clip
- 0.05883 0.05883 sc
-%%Page: 1 1
-% Polyline
-7.500 slw
-n 6413 2048 m 6380 2054 l 6348 2061 l 6315 2067 l 6283 2073 l 6250 2079 l
- 6217 2084 l 6185 2090 l 6152 2095 l 6120 2101 l 6088 2107 l
- 6057 2113 l 6027 2120 l 5998 2126 l 5970 2134 l 5943 2141 l
- 5918 2149 l 5894 2158 l 5873 2167 l 5853 2177 l 5835 2187 l
- 5819 2198 l 5805 2210 l 5793 2222 l 5782 2235 l 5774 2250 l
- 5768 2265 l 5763 2281 l 5760 2299 l 5759 2318 l 5759 2339 l
- 5761 2360 l 5764 2383 l 5768 2408 l 5774 2433 l 5780 2460 l
- 5788 2488 l 5797 2516 l 5806 2546 l 5815 2575 l 5825 2606 l
- 5836 2636 l 5846 2666 l 5856 2696 l 5866 2726 l 5875 2755 l
- 5884 2784 l 5892 2812 l 5899 2839 l 5905 2866 l 5910 2891 l
- 5915 2916 l 5918 2940 l 5919 2968 l 5920 2995 l 5919 3022 l
- 5916 3048 l 5912 3075 l 5908 3101 l 5902 3127 l 5895 3153 l
- 5887 3179 l 5880 3205 l 5871 3230 l 5863 3254 l 5855 3278 l
- 5848 3302 l 5841 3324 l 5834 3346 l 5829 3367 l 5824 3388 l
- 5821 3408 l 5819 3427 l 5819 3446 l 5820 3465 l 5823 3484 l
- 5827 3503 l 5833 3522 l 5840 3542 l 5848 3562 l 5858 3582 l
- 5868 3603 l 5880 3625 l 5891 3647 l 5904 3669 l 5916 3691 l
- 5929 3713 l 5941 3736 l 5953 3758 l 5964 3779 l 5974 3801 l
- 5983 3822 l 5991 3843 l 5997 3863 l 6002 3883 l 6006 3903 l
- 6008 3923 l 6008 3942 l 6006 3962 l 6003 3983 l 5998 4004 l
- 5992 4025 l 5985 4048 l 5977 4070 l 5968 4094 l 5958 4118 l
- 5947 4142 l 5936 4167 l 5925 4192 l 5913 4216 l 5902 4241 l
- 5892 4266 l 5882 4291 l 5872 4315 l 5864 4339 l 5857 4362 l
- 5851 4386 l 5846 4409 l 5843 4433 l 5840 4456 l 5840 4480 l
- 5840 4505 l 5842 4530 l 5845 4556 l 5849 4582 l 5854 4609 l
- 5860 4636 l 5867 4664 l 5875 4692 l 5883 4720 l 5892 4747 l
- 5901 4774 l 5910 4801 l 5920 4827 l 5929 4852 l 5938 4875 l
- 5947 4898 l 5955 4920 l 5963 4941 l 5971 4961 l 5978 4980 l
- 5985 5002 l 5992 5024 l 5999 5046 l 6005 5067 l 6010 5088 l
- 6016 5109 l 6022 5129 l 6027 5150 l 6033 5170 l 6039 5190 l
- 6045 5209 l 6052 5228 l 6059 5246 l 6067 5264 l 6075 5281 l
- 6084 5298 l 6094 5315 l 6105 5333 l 6115 5347 l 6125 5361 l
- 6137 5376 l 6149 5392 l 6162 5408 l 6176 5425 l 6191 5443 l
- 6206 5461 l 6221 5480 l 6237 5499 l 6253 5519 l 6269 5539 l
- 6284 5559 l 6299 5579 l 6313 5599 l 6327 5619 l 6340 5639 l
- 6352 5659 l 6363 5679 l 6373 5698 l 6382 5718 l 6390 5738 l
- 6398 5759 l 6404 5782 l 6410 5805 l 6415 5828 l 6420 5852 l
- 6424 5877 l 6428 5902 l 6431 5927 l 6435 5952 l 6438 5977 l
- 6442 6001 l 6446 6025 l 6450 6048 l 6455 6069 l 6461 6090 l
- 6467 6109 l 6474 6127 l 6483 6143 l 6492 6159 l 6503 6173 l
- 6515 6185 l 6528 6197 l 6543 6209 l 6560 6220 l 6578 6230 l
- 6598 6240 l 6619 6250 l 6641 6260 l 6663 6270 l 6687 6281 l
- 6710 6291 l 6733 6302 l 6757 6312 l 6779 6324 l 6801 6335 l
- 6821 6348 l 6841 6361 l 6859 6374 l 6876 6389 l 6893 6405 l
- 6906 6421 l 6919 6437 l 6932 6455 l 6944 6475 l 6955 6495 l
- 6967 6516 l 6979 6538 l 6991 6561 l 7003 6584 l 7015 6608 l
- 7027 6631 l 7040 6654 l 7053 6677 l 7067 6699 l 7081 6720 l
- 7096 6739 l 7111 6758 l 7127 6774 l 7144 6789 l 7161 6803 l
- 7180 6815 l 7200 6825 l 7220 6833 l 7240 6840 l 7263 6845 l
- 7286 6850 l 7311 6854 l 7338 6857 l 7365 6859 l 7394 6861 l
- 7424 6862 l 7454 6864 l 7485 6865 l 7516 6866 l 7547 6867 l
- 7578 6868 l 7609 6870 l 7639 6872 l 7668 6875 l 7696 6879 l
- 7723 6883 l 7748 6889 l 7773 6895 l 7795 6903 l 7817 6912 l
- 7838 6923 l 7857 6934 l 7875 6948 l 7892 6963 l 7909 6980 l
- 7926 6998 l 7941 7017 l 7957 7038 l 7972 7060 l 7987 7083 l
- 8002 7106 l 8017 7130 l 8031 7154 l 8046 7178 l 8061 7202 l
- 8075 7225 l 8090 7247 l 8105 7269 l 8120 7289 l 8135 7308 l
- 8151 7326 l 8167 7342 l 8184 7356 l 8202 7369 l 8220 7380 l
- 8239 7390 l 8260 7397 l 8282 7404 l 8305 7409 l 8330 7413 l
- 8356 7416 l 8383 7418 l 8412 7420 l 8441 7420 l 8471 7419 l
- 8502 7418 l 8534 7417 l 8565 7415 l 8597 7413 l 8629 7411 l
- 8660 7409 l 8690 7407 l 8720 7405 l 8749 7404 l 8777 7404 l
- 8804 7404 l 8830 7405 l 8856 7407 l 8880 7410 l 8906 7414 l
- 8931 7420 l 8956 7427 l 8981 7435 l 9005 7444 l 9029 7455 l
- 9053 7466 l 9077 7478 l 9100 7491 l 9123 7504 l 9146 7517 l
- 9168 7531 l 9190 7544 l 9210 7557 l 9230 7570 l 9250 7582 l
- 9268 7593 l 9286 7604 l 9304 7613 l 9320 7621 l 9336 7629 l
- 9353 7635 l 9370 7641 l 9388 7645 l 9406 7648 l 9425 7650 l
- 9444 7652 l 9464 7653 l 9485 7653 l 9508 7653 l 9531 7653 l
- 9555 7653 l 9579 7653 l 9605 7654 l 9631 7655 l 9658 7656 l
- 9685 7659 l 9713 7662 l 9742 7666 l 9771 7672 l 9801 7679 l
- 9833 7688 l 9853 7694 l 9874 7700 l 9895 7708 l 9918 7716 l
- 9941 7725 l 9966 7734 l 9991 7745 l 10017 7755 l 10045 7767 l
- 10073 7779 l 10102 7791 l 10132 7804 l 10163 7818 l 10194 7831 l
- 10227 7845 l 10259 7860 l 10293 7874 l 10326 7889 l 10360 7903 l
- 10394 7918 l 10429 7932 l 10463 7947 l 10497 7961 l 10531 7974 l
- 10565 7988 l 10599 8001 l 10633 8013 l 10667 8025 l 10700 8037 l
- 10733 8049 l 10767 8059 l 10800 8070 l 10834 8080 l 10868 8090 l
- 10902 8099 l 10937 8108 l 10973 8117 l 11009 8125 l 11045 8133 l
- 11083 8141 l 11120 8148 l 11158 8155 l 11197 8161 l 11236 8167 l
- 11275 8172 l 11313 8177 l 11352 8181 l 11391 8184 l 11429 8187 l
- 11467 8190 l 11504 8191 l 11540 8192 l 11576 8192 l 11610 8192 l
- 11644 8191 l 11676 8189 l 11707 8187 l 11738 8184 l 11767 8180 l
- 11794 8176 l 11821 8171 l 11847 8165 l 11871 8159 l 11895 8153 l
- 11923 8143 l 11950 8133 l 11976 8122 l 12001 8109 l 12025 8096 l
- 12048 8081 l 12071 8065 l 12092 8048 l 12113 8031 l 12133 8012 l
- 12153 7992 l 12171 7972 l 12188 7951 l 12205 7930 l 12220 7909 l
- 12235 7887 l 12248 7865 l 12260 7843 l 12272 7822 l 12282 7800 l
- 12292 7779 l 12301 7759 l 12309 7739 l 12316 7719 l 12323 7699 l
- 12330 7680 l 12338 7655 l 12345 7631 l 12352 7607 l 12359 7582 l
- 12365 7558 l 12371 7533 l 12377 7508 l 12382 7484 l 12388 7460 l
- 12392 7436 l 12397 7414 l 12401 7391 l 12405 7370 l 12409 7350 l
- 12412 7331 l 12415 7313 l 12418 7297 l 12421 7281 l 12424 7266 l
- 12428 7253 l 12432 7234 l 12437 7216 l 12442 7199 l 12446 7183 l
- 12451 7166 l 12456 7150 l 12460 7134 l 12463 7117 l 12466 7101 l
- 12468 7086 l 12469 7070 l 12469 7054 l 12467 7037 l 12465 7020 l
- 12462 7006 l 12459 6991 l 12455 6975 l 12450 6958 l 12445 6940 l
- 12440 6921 l 12434 6901 l 12428 6880 l 12422 6859 l 12416 6838 l
- 12411 6817 l 12406 6796 l 12401 6776 l 12397 6756 l 12394 6736 l
- 12392 6718 l 12390 6700 l 12390 6683 l 12390 6665 l 12392 6649 l
- 12394 6631 l 12397 6614 l 12401 6597 l 12406 6579 l 12411 6561 l
- 12416 6542 l 12422 6524 l 12428 6505 l 12434 6487 l 12440 6468 l
- 12445 6450 l 12450 6432 l 12455 6414 l 12459 6396 l 12462 6378 l
- 12465 6360 l 12467 6343 l 12468 6326 l 12469 6308 l 12469 6289 l
- 12468 6269 l 12468 6249 l 12466 6227 l 12464 6205 l 12462 6182 l
- 12460 6159 l 12457 6135 l 12454 6111 l 12451 6087 l 12447 6063 l
- 12444 6040 l 12441 6016 l 12437 5993 l 12434 5970 l 12431 5948 l
- 12428 5925 l 12424 5902 l 12421 5879 l 12419 5855 l 12416 5831 l
- 12413 5806 l 12411 5781 l 12408 5755 l 12406 5729 l 12404 5702 l
- 12403 5676 l 12401 5651 l 12400 5625 l 12400 5601 l 12399 5578 l
- 12399 5555 l 12400 5534 l 12401 5514 l 12402 5495 l 12403 5477 l
- 12405 5460 l 12408 5440 l 12411 5421 l 12416 5402 l 12420 5384 l
- 12426 5365 l 12431 5347 l 12437 5329 l 12444 5311 l 12450 5293 l
- 12456 5275 l 12462 5258 l 12468 5240 l 12474 5222 l 12479 5205 l
- 12483 5186 l 12488 5168 l 12490 5152 l 12493 5135 l 12496 5117 l
- 12498 5099 l 12500 5079 l 12502 5058 l 12504 5036 l 12506 5014 l
- 12507 4990 l 12509 4966 l 12510 4942 l 12512 4918 l 12513 4893 l
- 12515 4869 l 12516 4845 l 12518 4822 l 12520 4799 l 12521 4776 l
- 12523 4754 l 12525 4733 l 12527 4713 l 12529 4693 l 12531 4673 l
- 12534 4653 l 12536 4632 l 12539 4610 l 12541 4588 l 12543 4566 l
- 12546 4543 l 12548 4520 l 12550 4497 l 12552 4473 l 12553 4450 l
- 12554 4426 l 12555 4403 l 12555 4380 l 12555 4357 l 12555 4334 l
- 12554 4312 l 12552 4290 l 12550 4267 l 12548 4245 l 12545 4224 l
- 12541 4203 l 12537 4181 l 12533 4159 l 12528 4136 l 12523 4112 l
- 12517 4088 l 12510 4064 l 12503 4038 l 12496 4013 l 12488 3987 l
- 12479 3961 l 12471 3935 l 12462 3909 l 12452 3884 l 12443 3859 l
- 12434 3835 l 12424 3811 l 12415 3788 l 12405 3766 l 12396 3744 l
- 12386 3723 l 12377 3702 l 12368 3683 l 12357 3661 l 12347 3640 l
- 12336 3619 l 12325 3598 l 12314 3576 l 12303 3555 l 12291 3533 l
- 12280 3511 l 12269 3489 l 12257 3467 l 12246 3446 l 12235 3424 l
- 12225 3402 l 12215 3381 l 12206 3360 l 12197 3340 l 12189 3320 l
- 12181 3301 l 12174 3281 l 12168 3262 l 12162 3244 l 12158 3225 l
- 12153 3204 l 12149 3183 l 12145 3162 l 12142 3139 l 12140 3117 l
- 12138 3094 l 12137 3071 l 12137 3047 l 12138 3024 l 12139 3001 l
- 12141 2978 l 12143 2956 l 12146 2935 l 12150 2915 l 12154 2896 l
- 12158 2879 l 12163 2862 l 12168 2847 l 12174 2833 l 12180 2820 l
- 12188 2805 l 12197 2792 l 12206 2779 l 12216 2766 l 12227 2754 l
- 12238 2742 l 12249 2730 l 12260 2717 l 12272 2704 l 12282 2691 l
- 12292 2676 l 12302 2661 l 12310 2645 l 12318 2627 l 12324 2608 l
- 12330 2588 l 12334 2571 l 12336 2553 l 12339 2534 l 12341 2513 l
- 12342 2491 l 12343 2467 l 12343 2442 l 12342 2416 l 12340 2389 l
- 12338 2360 l 12335 2332 l 12331 2303 l 12326 2273 l 12320 2244 l
- 12314 2215 l 12307 2187 l 12299 2159 l 12290 2132 l 12280 2106 l
- 12270 2081 l 12259 2056 l 12248 2033 l 12236 2011 l 12224 1990 l
- 12210 1970 l 12196 1949 l 12181 1929 l 12164 1910 l 12147 1890 l
- 12129 1871 l 12110 1853 l 12090 1835 l 12070 1818 l 12049 1802 l
- 12027 1787 l 12005 1773 l 11983 1761 l 11961 1749 l 11939 1739 l
- 11917 1730 l 11895 1722 l 11874 1716 l 11852 1710 l 11831 1707 l
- 11811 1704 l 11790 1703 l 11769 1702 l 11748 1703 l 11727 1705 l
- 11706 1708 l 11683 1711 l 11660 1716 l 11636 1721 l 11612 1727 l
- 11587 1733 l 11560 1740 l 11534 1747 l 11506 1754 l 11479 1761 l
- 11450 1768 l 11422 1774 l 11393 1780 l 11364 1786 l 11334 1791 l
- 11305 1795 l 11275 1798 l 11245 1800 l 11215 1801 l 11184 1801 l
- 11153 1800 l 11128 1798 l 11104 1796 l 11078 1793 l 11052 1790 l
- 11025 1785 l 10997 1781 l 10968 1776 l 10939 1770 l 10908 1764 l
- 10877 1758 l 10844 1751 l 10811 1744 l 10778 1737 l 10743 1730 l
- 10708 1722 l 10673 1715 l 10637 1708 l 10601 1701 l 10565 1695 l
- 10530 1688 l 10494 1682 l 10458 1677 l 10422 1672 l 10387 1668 l
- 10352 1664 l 10318 1661 l 10284 1658 l 10250 1657 l 10216 1656 l
- 10183 1655 l 10150 1656 l 10118 1658 l 10087 1660 l 10055 1663 l
- 10024 1666 l 9992 1671 l 9960 1676 l 9927 1682 l 9894 1688 l
- 9861 1695 l 9827 1703 l 9792 1711 l 9757 1720 l 9721 1729 l
- 9685 1738 l 9649 1748 l 9613 1757 l 9576 1767 l 9539 1778 l
- 9502 1788 l 9465 1798 l 9429 1807 l 9392 1817 l 9356 1826 l
- 9320 1835 l 9285 1844 l 9250 1852 l 9216 1860 l 9182 1867 l
- 9148 1873 l 9115 1879 l 9082 1884 l 9050 1889 l 9018 1892 l
- 8987 1895 l 8955 1898 l 8919 1899 l 8883 1900 l 8847 1899 l
- 8811 1898 l 8774 1896 l 8737 1893 l 8699 1889 l 8661 1884 l
- 8623 1878 l 8585 1872 l 8546 1865 l 8508 1857 l 8470 1849 l
- 8432 1840 l 8395 1830 l 8358 1821 l 8322 1811 l 8287 1801 l
- 8254 1790 l 8221 1780 l 8189 1770 l 8159 1760 l 8130 1750 l
- 8102 1740 l 8076 1730 l 8051 1721 l 8028 1712 l 8006 1703 l
- 7985 1695 l 7965 1688 l 7931 1674 l 7899 1662 l 7871 1650 l
- 7844 1640 l 7820 1631 l 7798 1623 l 7778 1617 l 7760 1611 l
- 7743 1607 l 7728 1603 l 7715 1601 l 7702 1600 l 7691 1600 l
- 7680 1601 l 7669 1603 l 7658 1605 l 7648 1607 l 7638 1610 l
- 7627 1613 l 7615 1617 l 7601 1621 l 7587 1626 l 7571 1632 l
- 7554 1638 l 7536 1645 l 7517 1653 l 7496 1661 l 7474 1670 l
- 7452 1679 l 7428 1689 l 7403 1699 l 7378 1709 l 7352 1720 l
- 7325 1731 l 7297 1743 l 7268 1755 l 7247 1763 l 7226 1772 l
- 7204 1781 l 7182 1790 l 7158 1800 l 7133 1810 l 7108 1820 l
- 7081 1831 l 7053 1842 l 7025 1853 l 6996 1864 l 6966 1875 l
- 6935 1886 l 6904 1898 l 6873 1909 l 6841 1921 l 6809 1932 l
- 6776 1943 l 6744 1954 l 6712 1964 l 6680 1974 l 6649 1984 l
- 6618 1994 l 6587 2003 l 6557 2011 l 6527 2019 l 6498 2027 l
- 6469 2034 l 6441 2041 l cp gs col34 1.00 shd ef gr gs col34 s gr 
-% Polyline
-n 675 6525 m 5850 6525 l 5850 6075 l 5625 6075 l 5625 5625 l 900 5625 l
- 900 6075 l 675 6075 l cp gs col7 1.00 shd ef gr gs col7 s gr 
-% Polyline
-n 1125 6525 m 5355 6525 l 5400 5175 l 5175 5175 l 5175 4725 l 4950 4725 l
- 4950 4275 l 1575 4275 l 1575 4725 l 1350 4725 l 1350 5175 l
- 1125 5175 l cp gs col34 1.00 shd ef gr gs col34 s gr 
-% Polyline
-75.000 slw
-n 9450 4500 m 12465 2205 l gs col7 s gr 
-% Polyline
-n 9450 4500 m 9450 7785 l gs col7 s gr 
-% Polyline
-n 9450 4500 m 6075 1935 l gs col7 s gr 
-% Polyline
-n 12510 6435 m 9450 6435 l gs col7 s gr 
-% Polyline
-7.500 slw
-n 1800 6525 m 4725 6525 l 4725 3825 l 4500 3825 l 4500 3375 l 4275 3375 l
- 4275 2925 l 4050 2925 l 4050 2475 l 2475 2475 l 2475 2925 l
- 2250 2925 l 2250 3375 l 2025 3375 l 2025 3825 l 1800 3825 l
- cp gs col35 1.00 shd ef gr gs col35 s gr 
-% Polyline
-n 2700 6525 m 3825 6525 l 3825 2025 l 3600 2025 l 3600 1575 l 2925 1575 l
- 2925 2025 l 2700 2025 l cp gs col33 1.00 shd ef gr gs col33 s gr 
-% Polyline
-gs  clippath
-12068 6810 m 11970 6885 l 12022 6773 l 11937 6878 l 11984 6915 l cp
-clip
-n 12375 4455 m 12510 4635 l 12510 6210 l 11970 6885 l gs col34 1.00 shd ef gr gs col0 s gr gr
-
-% arrowhead
-n 12068 6810 m 11970 6885 l 12022 6773 l 12045 6791 l 12068 6810 l  cp gs 0.00 setgray ef gr  col0 s
-% Polyline
-gs  clippath
-7113 6004 m 7155 6120 l 7063 6037 l 7138 6149 l 7188 6116 l cp
-clip
-n 6705 5445 m 7155 6120 l gs col34 1.00 shd ef gr gs col0 s gr gr
-
-% arrowhead
-n 7113 6004 m 7155 6120 l 7063 6037 l 7088 6020 l 7113 6004 l  cp gs 0.00 setgray ef gr  col0 s
-% Polyline
-gs  clippath
-7304 4656 m 7200 4590 l 7323 4599 l 7195 4557 l 7176 4614 l cp
-clip
-n 7875 4815 m 7200 4590 l gs col34 1.00 shd ef gr gs col0 s gr gr
-
-% arrowhead
-n 7304 4656 m 7200 4590 l 7323 4599 l 7314 4628 l 7304 4656 l  cp gs 0.00 setgray ef gr  col0 s
-% Polyline
-gs  clippath
-11405 4128 m 11475 4230 l 11365 4173 l 11466 4262 l 11506 4217 l cp
-clip
-n 9585 2565 m 11475 4230 l gs col34 1.00 shd ef gr gs col0 s gr gr
-
-% arrowhead
-n 11405 4128 m 11475 4230 l 11365 4173 l 11385 4151 l 11405 4128 l  cp gs 0.00 setgray ef gr  col0 s
-% Polyline
-gs  clippath
-11712 4556 m 11835 4545 l 11732 4613 l 11859 4568 l 11839 4512 l cp
-clip
-n 10170 5130 m 11835 4545 l gs col34 1.00 shd ef gr gs col0 s gr gr
-
-% arrowhead
-n 11712 4556 m 11835 4545 l 11732 4613 l 11722 4585 l 11712 4556 l  cp gs 0.00 setgray ef gr  col0 s
-% Polyline
-gs  clippath
-9732 5411 m 9855 5400 l 9752 5468 l 9879 5423 l 9859 5367 l cp
-clip
-n 7920 6075 m 9855 5400 l gs col34 1.00 shd ef gr gs col0 s gr gr
-
-% arrowhead
-n 9732 5411 m 9855 5400 l 9752 5468 l 9742 5440 l 9732 5411 l  cp gs 0.00 setgray ef gr  col0 s
-% Polyline
-gs  clippath
-10823 5573 m 10935 5625 l 10812 5632 l 10944 5657 l 10955 5598 l cp
-clip
-n 9990 5445 m 10935 5625 l gs col34 1.00 shd ef gr gs col0 s gr gr
-
-% arrowhead
-n 10823 5573 m 10935 5625 l 10812 5632 l 10817 5603 l 10823 5573 l  cp gs 0.00 setgray ef gr  col0 s
-% Polyline
-gs  clippath
-10815 5280 m 10935 5310 l 10815 5340 l 10950 5340 l 10950 5280 l cp
-clip
-n 10215 5310 m 10935 5310 l gs col34 1.00 shd ef gr gs col0 s gr gr
-
-% arrowhead
-n 10815 5280 m 10935 5310 l 10815 5340 l 10815 5310 l 10815 5280 l  cp gs 0.00 setgray ef gr  col0 s
-% Polyline
-gs  clippath
-11955 4965 m 11925 5085 l 11895 4965 l 11895 5100 l 11955 5100 l cp
-clip
-n 11925 4590 m 11925 5085 l gs col34 1.00 shd ef gr gs col0 s gr gr
-
-% arrowhead
-n 11955 4965 m 11925 5085 l 11895 4965 l 11925 4965 l 11955 4965 l  cp gs 0.00 setgray ef gr  col0 s
-% Polyline
-gs  clippath
-9840 6720 m 9810 6840 l 9780 6720 l 9780 6855 l 9840 6855 l cp
-clip
-n 9810 5490 m 9810 6840 l gs col34 1.00 shd ef gr gs col0 s gr gr
-
-% arrowhead
-n 9840 6720 m 9810 6840 l 9780 6720 l 9810 6720 l 9840 6720 l  cp gs 0.00 setgray ef gr  col0 s
-% Polyline
-gs  clippath
-10847 5943 m 10935 6030 l 10816 5995 l 10933 6063 l 10963 6012 l cp
-clip
-n 9945 5445 m 10935 6030 l gs col34 1.00 shd ef gr gs col0 s gr gr
-
-% arrowhead
-n 10847 5943 m 10935 6030 l 10816 5995 l 10832 5969 l 10847 5943 l  cp gs 0.00 setgray ef gr  col0 s
-% Polyline
-gs  clippath
-10698 2634 m 10800 2565 l 10742 2674 l 10832 2574 l 10788 2534 l cp
-clip
-n 8865 4725 m 10800 2565 l gs col34 1.00 shd ef gr gs col0 s gr gr
-
-% arrowhead
-n 10698 2634 m 10800 2565 l 10742 2674 l 10720 2654 l 10698 2634 l  cp gs 0.00 setgray ef gr  col0 s
-% Polyline
-30.000 slw
-n 675 6075 m 5850 6075 l gs col34 1.00 shd ef gr gs col0 s gr 
-% Polyline
-7.500 slw
- [15 15] 15 sd
-gs  clippath
-645 6195 m 675 6075 l 705 6195 l 705 6060 l 645 6060 l cp
-clip
-n 675 6525 m 675 6075 l gs col34 1.00 shd ef gr gs col0 s gr gr
- [] 0 sd
-% arrowhead
-n 645 6195 m 675 6075 l 705 6195 l 675 6195 l 645 6195 l  cp gs 0.00 setgray ef gr  col0 s
-% Polyline
- [15 15] 15 sd
-gs  clippath
-5880 6405 m 5850 6525 l 5820 6405 l 5820 6540 l 5880 6540 l cp
-clip
-n 5850 6075 m 5850 6525 l gs col34 1.00 shd ef gr gs col0 s gr gr
- [] 0 sd
-% arrowhead
-n 5880 6405 m 5850 6525 l 5820 6405 l 5850 6405 l 5880 6405 l  cp gs col7 1.00 shd ef gr  col0 s
-% Polyline
-30.000 slw
-n 900 5625 m 5625 5625 l gs col34 1.00 shd ef gr gs col0 s gr 
-% Polyline
-n 1125 5175 m 5400 5175 l gs col34 1.00 shd ef gr gs col0 s gr 
-% Polyline
-n 1350 4725 m 5175 4725 l gs col34 1.00 shd ef gr gs col0 s gr 
-% Polyline
-n 1575 4275 m 4950 4275 l gs col34 1.00 shd ef gr gs col0 s gr 
-% Polyline
-n 1800 3825 m 4725 3825 l gs col34 1.00 shd ef gr gs col0 s gr 
-% Polyline
-n 2025 3375 m 4500 3375 l gs col34 1.00 shd ef gr gs col0 s gr 
-% Polyline
-n 2250 2925 m 4275 2925 l gs col34 1.00 shd ef gr gs col0 s gr 
-% Polyline
-n 2475 2475 m 4050 2475 l gs col34 1.00 shd ef gr gs col0 s gr 
-% Polyline
-n 2700 2025 m 3825 2025 l gs col34 1.00 shd ef gr gs col0 s gr 
-% Polyline
-n 2925 1575 m 3600 1575 l gs col34 1.00 shd ef gr gs col0 s gr 
-% Polyline
-7.500 slw
- [15 15] 15 sd
-gs  clippath
-870 5745 m 900 5625 l 930 5745 l 930 5610 l 870 5610 l cp
-clip
-n 900 6075 m 900 5625 l gs col34 1.00 shd ef gr gs col0 s gr gr
- [] 0 sd
-% arrowhead
-n 870 5745 m 900 5625 l 930 5745 l 900 5745 l 870 5745 l  cp gs 0.00 setgray ef gr  col0 s
-% Polyline
- [15 15] 15 sd
-gs  clippath
-1095 5295 m 1125 5175 l 1155 5295 l 1155 5160 l 1095 5160 l cp
-clip
-n 1125 6525 m 1125 5175 l gs col34 1.00 shd ef gr gs col0 s gr gr
- [] 0 sd
-% arrowhead
-n 1095 5295 m 1125 5175 l 1155 5295 l 1125 5295 l 1095 5295 l  cp gs 0.00 setgray ef gr  col0 s
-% Polyline
- [15 15] 15 sd
-gs  clippath
-1320 4845 m 1350 4725 l 1380 4845 l 1380 4710 l 1320 4710 l cp
-clip
-n 1350 5175 m 1350 4725 l gs col34 1.00 shd ef gr gs col0 s gr gr
- [] 0 sd
-% arrowhead
-n 1320 4845 m 1350 4725 l 1380 4845 l 1350 4845 l 1320 4845 l  cp gs 0.00 setgray ef gr  col0 s
-% Polyline
- [15 15] 15 sd
-gs  clippath
-1545 4395 m 1575 4275 l 1605 4395 l 1605 4260 l 1545 4260 l cp
-clip
-n 1575 4725 m 1575 4275 l gs col34 1.00 shd ef gr gs col0 s gr gr
- [] 0 sd
-% arrowhead
-n 1545 4395 m 1575 4275 l 1605 4395 l 1575 4395 l 1545 4395 l  cp gs 0.00 setgray ef gr  col0 s
-% Polyline
- [15 15] 15 sd
-gs  clippath
-1770 3945 m 1800 3825 l 1830 3945 l 1830 3810 l 1770 3810 l cp
-clip
-n 1800 6525 m 1800 3825 l gs col34 1.00 shd ef gr gs col0 s gr gr
- [] 0 sd
-% arrowhead
-n 1770 3945 m 1800 3825 l 1830 3945 l 1800 3945 l 1770 3945 l  cp gs 0.00 setgray ef gr  col0 s
-% Polyline
- [15 15] 15 sd
-gs  clippath
-1995 3495 m 2025 3375 l 2055 3495 l 2055 3360 l 1995 3360 l cp
-clip
-n 2025 3825 m 2025 3375 l gs col34 1.00 shd ef gr gs col0 s gr gr
- [] 0 sd
-% arrowhead
-n 1995 3495 m 2025 3375 l 2055 3495 l 2025 3495 l 1995 3495 l  cp gs 0.00 setgray ef gr  col0 s
-% Polyline
- [15 15] 15 sd
-gs  clippath
-2220 3045 m 2250 2925 l 2280 3045 l 2280 2910 l 2220 2910 l cp
-clip
-n 2250 3375 m 2250 2925 l gs col34 1.00 shd ef gr gs col0 s gr gr
- [] 0 sd
-% arrowhead
-n 2220 3045 m 2250 2925 l 2280 3045 l 2250 3045 l 2220 3045 l  cp gs 0.00 setgray ef gr  col0 s
-% Polyline
- [15 15] 15 sd
-gs  clippath
-2445 2595 m 2475 2475 l 2505 2595 l 2505 2460 l 2445 2460 l cp
-clip
-n 2475 2925 m 2475 2475 l gs col34 1.00 shd ef gr gs col0 s gr gr
- [] 0 sd
-% arrowhead
-n 2445 2595 m 2475 2475 l 2505 2595 l 2475 2595 l 2445 2595 l  cp gs 0.00 setgray ef gr  col0 s
-% Polyline
- [15 15] 15 sd
-gs  clippath
-5655 5955 m 5625 6075 l 5595 5955 l 5595 6090 l 5655 6090 l cp
-clip
-n 5625 5625 m 5625 6075 l gs col34 1.00 shd ef gr gs col0 s gr gr
- [] 0 sd
-% arrowhead
-n 5655 5955 m 5625 6075 l 5595 5955 l 5625 5955 l 5655 5955 l  cp gs col7 1.00 shd ef gr  col0 s
-% Polyline
- [15 15] 15 sd
-gs  clippath
-5430 6405 m 5400 6525 l 5370 6405 l 5370 6540 l 5430 6540 l cp
-clip
-n 5400 5175 m 5400 6525 l gs col34 1.00 shd ef gr gs col0 s gr gr
- [] 0 sd
-% arrowhead
-n 5430 6405 m 5400 6525 l 5370 6405 l 5400 6405 l 5430 6405 l  cp gs col7 1.00 shd ef gr  col0 s
-% Polyline
- [15 15] 15 sd
-gs  clippath
-5205 5055 m 5175 5175 l 5145 5055 l 5145 5190 l 5205 5190 l cp
-clip
-n 5175 4725 m 5175 5175 l gs col34 1.00 shd ef gr gs col0 s gr gr
- [] 0 sd
-% arrowhead
-n 5205 5055 m 5175 5175 l 5145 5055 l 5175 5055 l 5205 5055 l  cp gs col7 1.00 shd ef gr  col0 s
-% Polyline
- [15 15] 15 sd
-gs  clippath
-4980 4605 m 4950 4725 l 4920 4605 l 4920 4740 l 4980 4740 l cp
-clip
-n 4950 4275 m 4950 4725 l gs col34 1.00 shd ef gr gs col0 s gr gr
- [] 0 sd
-% arrowhead
-n 4980 4605 m 4950 4725 l 4920 4605 l 4950 4605 l 4980 4605 l  cp gs col7 1.00 shd ef gr  col0 s
-% Polyline
- [15 15] 15 sd
-gs  clippath
-4755 6405 m 4725 6525 l 4695 6405 l 4695 6540 l 4755 6540 l cp
-clip
-n 4725 3825 m 4725 6525 l gs col34 1.00 shd ef gr gs col0 s gr gr
- [] 0 sd
-% arrowhead
-n 4755 6405 m 4725 6525 l 4695 6405 l 4725 6405 l 4755 6405 l  cp gs col7 1.00 shd ef gr  col0 s
-% Polyline
- [15 15] 15 sd
-gs  clippath
-4530 3705 m 4500 3825 l 4470 3705 l 4470 3840 l 4530 3840 l cp
-clip
-n 4500 3375 m 4500 3825 l gs col34 1.00 shd ef gr gs col0 s gr gr
- [] 0 sd
-% arrowhead
-n 4530 3705 m 4500 3825 l 4470 3705 l 4500 3705 l 4530 3705 l  cp gs col7 1.00 shd ef gr  col0 s
-% Polyline
- [15 15] 15 sd
-gs  clippath
-4305 3255 m 4275 3375 l 4245 3255 l 4245 3390 l 4305 3390 l cp
-clip
-n 4275 2925 m 4275 3375 l gs col34 1.00 shd ef gr gs col0 s gr gr
- [] 0 sd
-% arrowhead
-n 4305 3255 m 4275 3375 l 4245 3255 l 4275 3255 l 4305 3255 l  cp gs col7 1.00 shd ef gr  col0 s
-% Polyline
- [15 15] 15 sd
-gs  clippath
-4080 2805 m 4050 2925 l 4020 2805 l 4020 2940 l 4080 2940 l cp
-clip
-n 4050 2475 m 4050 2925 l gs col34 1.00 shd ef gr gs col0 s gr gr
- [] 0 sd
-% arrowhead
-n 4080 2805 m 4050 2925 l 4020 2805 l 4050 2805 l 4080 2805 l  cp gs col7 1.00 shd ef gr  col0 s
-% Polyline
- [15 15] 15 sd
-gs  clippath
-2670 2145 m 2700 2025 l 2730 2145 l 2730 2010 l 2670 2010 l cp
-clip
-n 2700 6525 m 2700 2025 l gs col34 1.00 shd ef gr gs col0 s gr gr
- [] 0 sd
-% arrowhead
-n 2670 2145 m 2700 2025 l 2730 2145 l 2700 2145 l 2670 2145 l  cp gs 0.00 setgray ef gr  col0 s
-% Polyline
- [15 15] 15 sd
-gs  clippath
-3855 6405 m 3825 6525 l 3795 6405 l 3795 6540 l 3855 6540 l cp
-clip
-n 3825 2025 m 3825 6525 l gs col34 1.00 shd ef gr gs col0 s gr gr
- [] 0 sd
-% arrowhead
-n 3855 6405 m 3825 6525 l 3795 6405 l 3825 6405 l 3855 6405 l  cp gs col7 1.00 shd ef gr  col0 s
-% Polyline
- [15 15] 15 sd
-gs  clippath
-3630 1905 m 3600 2025 l 3570 1905 l 3570 2040 l 3630 2040 l cp
-clip
-n 3600 1575 m 3600 2025 l gs col34 1.00 shd ef gr gs col0 s gr gr
- [] 0 sd
-% arrowhead
-n 3630 1905 m 3600 2025 l 3570 1905 l 3600 1905 l 3630 1905 l  cp gs col7 1.00 shd ef gr  col0 s
-% Polyline
- [15 15] 15 sd
-gs  clippath
-2895 1695 m 2925 1575 l 2955 1695 l 2955 1560 l 2895 1560 l cp
-clip
-n 2925 2025 m 2925 1575 l gs col34 1.00 shd ef gr gs col0 s gr gr
- [] 0 sd
-% arrowhead
-n 2895 1695 m 2925 1575 l 2955 1695 l 2925 1695 l 2895 1695 l  cp gs 0.00 setgray ef gr  col0 s
-% Polyline
-45.000 slw
-gs  clippath
-6087 6495 m 6207 6525 l 6087 6555 l 6360 6555 l 6360 6495 l cp
-clip
-n 540 6525 m 6300 6525 l gs 0.00 setgray ef gr gs col0 s gr gr
-
-% arrowhead
-n 6087 6495 m 6207 6525 l 6087 6555 l 6087 6525 l 6087 6495 l  cp gs 0.00 setgray ef gr  col0 s
-% Polyline
-7.500 slw
-gs  clippath
-3681 6720 m 3825 6750 l 3681 6780 l 3840 6780 l 3840 6720 l cp
-2844 6780 m 2700 6750 l 2844 6720 l 2685 6720 l 2685 6780 l cp
-clip
-n 2700 6750 m 3825 6750 l gs col34 1.00 shd ef gr gs col0 s gr gr
-
-% arrowhead
-n 2844 6780 m 2700 6750 l 2844 6720 l 2820 6750 l 2844 6780 l  cp gs col7 1.00 shd ef gr  col0 s
-% arrowhead
-n 3681 6720 m 3825 6750 l 3681 6780 l 3705 6750 l 3681 6720 l  cp gs col7 1.00 shd ef gr  col0 s
-% Polyline
-gs  clippath
-5256 7170 m 5400 7200 l 5256 7230 l 5415 7230 l 5415 7170 l cp
-1269 7230 m 1125 7200 l 1269 7170 l 1110 7170 l 1110 7230 l cp
-clip
-n 1125 7200 m 5400 7200 l gs col34 1.00 shd ef gr gs col0 s gr gr
-
-% arrowhead
-n 1269 7230 m 1125 7200 l 1269 7170 l 1245 7200 l 1269 7230 l  cp gs col7 1.00 shd ef gr  col0 s
-% arrowhead
-n 5256 7170 m 5400 7200 l 5256 7230 l 5280 7200 l 5256 7170 l  cp gs col7 1.00 shd ef gr  col0 s
-% Polyline
-gs  clippath
-4581 6945 m 4725 6975 l 4581 7005 l 4740 7005 l 4740 6945 l cp
-1944 7005 m 1800 6975 l 1944 6945 l 1785 6945 l 1785 7005 l cp
-clip
-n 1800 6975 m 4725 6975 l gs col34 1.00 shd ef gr gs col0 s gr gr
-
-% arrowhead
-n 1944 7005 m 1800 6975 l 1944 6945 l 1920 6975 l 1944 7005 l  cp gs col7 1.00 shd ef gr  col0 s
-% arrowhead
-n 4581 6945 m 4725 6975 l 4581 7005 l 4605 6975 l 4581 6945 l  cp gs col7 1.00 shd ef gr  col0 s
-% Polyline
-gs  clippath
-5706 7395 m 5850 7425 l 5706 7455 l 5865 7455 l 5865 7395 l cp
-819 7455 m 675 7425 l 819 7395 l 660 7395 l 660 7455 l cp
-clip
-n 675 7425 m 5850 7425 l gs col34 1.00 shd ef gr gs col0 s gr gr
-
-% arrowhead
-n 819 7455 m 675 7425 l 819 7395 l 795 7425 l 819 7455 l  cp gs col7 1.00 shd ef gr  col0 s
-% arrowhead
-n 5706 7395 m 5850 7425 l 5706 7455 l 5730 7425 l 5706 7395 l  cp gs col7 1.00 shd ef gr  col0 s
-% Polyline
-1 slc
- [15 45] 45 sd
-n 675 6570 m 675 7650 l gs col34 1.00 shd ef gr gs col0 s gr  [] 0 sd
-% Polyline
- [15 45] 45 sd
-n 1125 6570 m 1125 7650 l gs col34 1.00 shd ef gr gs col0 s gr  [] 0 sd
-% Polyline
- [15 45] 45 sd
-n 1800 6570 m 1800 7650 l gs col34 1.00 shd ef gr gs col0 s gr  [] 0 sd
-% Polyline
- [15 45] 45 sd
-n 2700 6570 m 2700 7650 l gs col34 1.00 shd ef gr gs col0 s gr  [] 0 sd
-% Polyline
- [15 45] 45 sd
-n 3825 6570 m 3825 7650 l gs col34 1.00 shd ef gr gs col0 s gr  [] 0 sd
-% Polyline
- [15 45] 45 sd
-n 4725 6570 m 4725 7650 l gs col34 1.00 shd ef gr gs col0 s gr  [] 0 sd
-% Polyline
- [15 45] 45 sd
-n 5400 6570 m 5400 7650 l gs col34 1.00 shd ef gr gs col0 s gr  [] 0 sd
-% Polyline
- [15 45] 45 sd
-n 5850 6570 m 5850 7650 l gs col34 1.00 shd ef gr gs col0 s gr  [] 0 sd
-% Polyline
-0 slc
-n 750 225 m 450 225 450 1050 300 arcto 4 {pop} repeat
-  450 1350 12300 1350 300 arcto 4 {pop} repeat
-  12600 1350 12600 525 300 arcto 4 {pop} repeat
-  12600 225 750 225 300 arcto 4 {pop} repeat
- cp gs col34 1.00 shd ef gr gs col0 s gr 
-% Polyline
-n 8835 2250 m 8775 2250 8775 2415 60 arcto 4 {pop} repeat
-  8775 2475 10110 2475 60 arcto 4 {pop} repeat
-  10170 2475 10170 2310 60 arcto 4 {pop} repeat
-  10170 2250 8835 2250 60 arcto 4 {pop} repeat
- cp gs col35 1.00 shd ef gr gs col35 s gr 
-% Polyline
-n 10635 2250 m 10575 2250 10575 2415 60 arcto 4 {pop} repeat
-  10575 2475 11865 2475 60 arcto 4 {pop} repeat
-  11925 2475 11925 2310 60 arcto 4 {pop} repeat
-  11925 2250 10635 2250 60 arcto 4 {pop} repeat
- cp gs col35 1.00 shd ef gr gs col35 s gr 
-% Polyline
-n 11490 4275 m 11430 4275 11430 4440 60 arcto 4 {pop} repeat
-  11430 4500 12315 4500 60 arcto 4 {pop} repeat
-  12375 4500 12375 4335 60 arcto 4 {pop} repeat
-  12375 4275 11490 4275 60 arcto 4 {pop} repeat
- cp gs col35 1.00 shd ef gr gs col35 s gr 
-% Polyline
-n 11040 5175 m 10980 5175 10980 5340 60 arcto 4 {pop} repeat
-  10980 5400 12315 5400 60 arcto 4 {pop} repeat
-  12375 5400 12375 5235 60 arcto 4 {pop} repeat
-  12375 5175 11040 5175 60 arcto 4 {pop} repeat
- cp gs col35 1.00 shd ef gr gs col35 s gr 
-% Polyline
-n 9735 5175 m 9675 5175 9675 5340 60 arcto 4 {pop} repeat
-  9675 5400 10110 5400 60 arcto 4 {pop} repeat
-  10170 5400 10170 5235 60 arcto 4 {pop} repeat
-  10170 5175 9735 5175 60 arcto 4 {pop} repeat
- cp gs col35 1.00 shd ef gr gs col35 s gr 
-% Polyline
-n 7260 6075 m 7200 6075 7200 6240 60 arcto 4 {pop} repeat
-  7200 6300 7815 6300 60 arcto 4 {pop} repeat
-  7875 6300 7875 6135 60 arcto 4 {pop} repeat
-  7875 6075 7260 6075 60 arcto 4 {pop} repeat
- cp gs col35 1.00 shd ef gr gs col35 s gr 
-% Polyline
-n 6810 2250 m 6750 2250 6750 2415 60 arcto 4 {pop} repeat
-  6750 2475 8130 2475 60 arcto 4 {pop} repeat
-  8190 2475 8190 2310 60 arcto 4 {pop} repeat
-  8190 2250 6810 2250 60 arcto 4 {pop} repeat
- cp gs col35 1.00 shd ef gr gs col35 s gr 
-% Polyline
-n 6360 3375 m 6300 3375 6300 3540 60 arcto 4 {pop} repeat
-  6300 3600 7545 3600 60 arcto 4 {pop} repeat
-  7605 3600 7605 3435 60 arcto 4 {pop} repeat
-  7605 3375 6360 3375 60 arcto 4 {pop} repeat
- cp gs col35 1.00 shd ef gr gs col35 s gr 
-% Polyline
-n 6360 4275 m 6300 4275 6300 4440 60 arcto 4 {pop} repeat
-  6300 4500 7275 4500 60 arcto 4 {pop} repeat
-  7335 4500 7335 4335 60 arcto 4 {pop} repeat
-  7335 4275 6360 4275 60 arcto 4 {pop} repeat
- cp gs col35 1.00 shd ef gr gs col35 s gr 
-% Polyline
-n 6360 5175 m 6300 5175 6300 5340 60 arcto 4 {pop} repeat
-  6300 5400 7140 5400 60 arcto 4 {pop} repeat
-  7200 5400 7200 5235 60 arcto 4 {pop} repeat
-  7200 5175 6360 5175 60 arcto 4 {pop} repeat
- cp gs col35 1.00 shd ef gr gs col35 s gr 
-% Polyline
-gs  clippath
-7365 5340 m 7245 5310 l 7365 5280 l 7230 5280 l 7230 5340 l cp
-clip
-n 9630 5310 m 7245 5310 l gs col34 1.00 shd ef gr gs col0 s gr gr
-
-% arrowhead
-n 7365 5340 m 7245 5310 l 7365 5280 l 7365 5310 l 7365 5340 l  cp gs 0.00 setgray ef gr  col0 s
-% Polyline
-gs  clippath
-7500 4395 m 7380 4365 l 7500 4335 l 7365 4335 l 7365 4395 l cp
-clip
-n 11385 4365 m 7380 4365 l gs col34 1.00 shd ef gr gs col0 s gr gr
-
-% arrowhead
-n 7500 4395 m 7380 4365 l 7500 4335 l 7500 4365 l 7500 4395 l  cp gs 0.00 setgray ef gr  col0 s
-% Polyline
-n 11040 5580 m 10980 5580 10980 5745 60 arcto 4 {pop} repeat
-  10980 5805 12180 5805 60 arcto 4 {pop} repeat
-  12240 5805 12240 5640 60 arcto 4 {pop} repeat
-  12240 5580 11040 5580 60 arcto 4 {pop} repeat
- cp gs col35 1.00 shd ef gr gs col35 s gr 
-% Polyline
-n 11040 5985 m 10980 5985 10980 6150 60 arcto 4 {pop} repeat
-  10980 6210 12315 6210 60 arcto 4 {pop} repeat
-  12375 6210 12375 6045 60 arcto 4 {pop} repeat
-  12375 5985 11040 5985 60 arcto 4 {pop} repeat
- cp gs col35 1.00 shd ef gr gs col35 s gr 
-% Polyline
-gs  clippath
-9958 5554 m 9900 5445 l 10003 5514 l 9912 5414 l 9868 5454 l cp
-clip
-n 11205 6885 m 9900 5445 l gs col34 1.00 shd ef gr gs col0 s gr gr
-
-% arrowhead
-n 9958 5554 m 9900 5445 l 10003 5514 l 9981 5534 l 9958 5554 l  cp gs 0.00 setgray ef gr  col0 s
-% Polyline
-n 10590 6930 m 10530 6930 10530 7095 60 arcto 4 {pop} repeat
-  10530 7155 12225 7155 60 arcto 4 {pop} repeat
-  12285 7155 12285 6990 60 arcto 4 {pop} repeat
-  12285 6930 10590 6930 60 arcto 4 {pop} repeat
- cp gs col35 1.00 shd ef gr gs col35 s gr 
-% Polyline
-n 9690 6930 m 9630 6930 9630 7095 60 arcto 4 {pop} repeat
-  9630 7155 10110 7155 60 arcto 4 {pop} repeat
-  10170 7155 10170 6990 60 arcto 4 {pop} repeat
-  10170 6930 9690 6930 60 arcto 4 {pop} repeat
- cp gs col35 1.00 shd ef gr gs col35 s gr 
-/Times-Roman-iso ff 120.00 scf sf
-900 7560 m
-gs 1 -1 sc (Startup, Runtime, Shutdown) col0 sh gr
-/Helvetica-Narrow-iso ff 120.00 scf sf
-6345 2970 m
-gs 1 -1 sc (ap_ctx_get\(...,) col0 sh gr
-/Helvetica-Narrow-iso ff 120.00 scf sf
-10800 2745 m
-gs 1 -1 sc (ap_get_module_config\(...) col0 sh gr
-/Helvetica-Narrow-iso ff 120.00 scf sf
-10800 2880 m
-gs 1 -1 sc (->per_dir_config,) col0 sh gr
-/Helvetica-Narrow-iso ff 120.00 scf sf
-10800 3015 m
-gs 1 -1 sc (&ssl_module\)) col0 sh gr
-% Polyline
-n 7980 4770 m 7920 4770 7920 4935 60 arcto 4 {pop} repeat
-  7920 4995 9075 4995 60 arcto 4 {pop} repeat
-  9135 4995 9135 4830 60 arcto 4 {pop} repeat
-  9135 4770 7980 4770 60 arcto 4 {pop} repeat
- cp gs col35 1.00 shd ef gr gs col35 s gr 
-% Polyline
-gs  clippath
-7340 2610 m 7425 2520 l 7393 2639 l 7459 2521 l 7406 2492 l cp
-clip
-n 6975 3330 m 7425 2520 l gs col34 1.00 shd ef gr gs col0 s gr gr
-
-% arrowhead
-n 7340 2610 m 7425 2520 l 7393 2639 l 7367 2625 l 7340 2610 l  cp gs 0.00 setgray ef gr  col0 s
-% Polyline
-gs  clippath
-9336 2569 m 9450 2520 l 9373 2616 l 9480 2535 l 9444 2487 l cp
-clip
-n 7200 4230 m 9450 2520 l gs col34 1.00 shd ef gr gs col0 s gr gr
-
-% arrowhead
-n 9336 2569 m 9450 2520 l 9373 2616 l 9354 2593 l 9336 2569 l  cp gs 0.00 setgray ef gr  col0 s
-% Polyline
-gs  clippath
-7321 5196 m 7200 5220 l 7296 5142 l 7174 5199 l 7199 5254 l cp
-clip
-n 7875 4905 m 7200 5220 l gs col34 1.00 shd ef gr gs col0 s gr gr
-
-% arrowhead
-n 7321 5196 m 7200 5220 l 7296 5142 l 7309 5169 l 7321 5196 l  cp gs 0.00 setgray ef gr  col0 s
-% Polyline
-gs  clippath
-6720 4665 m 6750 4545 l 6780 4665 l 6780 4530 l 6720 4530 l cp
-clip
-n 6750 5130 m 6750 4545 l gs col34 1.00 shd ef gr gs col0 s gr gr
-
-% arrowhead
-n 6720 4665 m 6750 4545 l 6780 4665 l 6750 4665 l 6720 4665 l  cp gs 0.00 setgray ef gr  col0 s
-% Polyline
- [15 15] 15 sd
-gs  clippath
-9279 4984 m 9175 4918 l 9298 4927 l 9170 4885 l 9151 4942 l cp
-clip
-n 9850 5143 m 9175 4918 l gs col34 1.00 shd ef gr gs col0 s gr gr
- [] 0 sd
-% arrowhead
-n 9279 4984 m 9175 4918 l 9298 4927 l 9289 4956 l 9279 4984 l  cp gs 0.00 setgray ef gr  col0 s
-/Helvetica-Narrow-iso ff 120.00 scf sf
-6210 4680 m
-gs 1 -1 sc (->server) col0 sh gr
-/Helvetica-Narrow-iso ff 120.00 scf sf
-8280 6120 m
-gs 1 -1 sc (ap_ctx_get\(...,"ssl"\)) col0 sh gr
-/Helvetica-Narrow-iso ff 120.00 scf sf
-7740 2700 m
-gs 1 -1 sc (ap_get_module_config\(...) col0 sh gr
-/Helvetica-Narrow-iso ff 120.00 scf sf
-7740 2835 m
-gs 1 -1 sc (->module_config,) col0 sh gr
-/Helvetica-Narrow-iso ff 120.00 scf sf
-7740 2970 m
-gs 1 -1 sc (&ssl_module\)) col0 sh gr
-/Helvetica-Narrow-iso ff 120.00 scf sf
-6345 3105 m
-gs 1 -1 sc ("ssl_module"\)) col0 sh gr
-/Times-Roman-iso ff 120.00 scf sf
-1350 7335 m
-gs 1 -1 sc (Configuration Time) col0 sh gr
-/Times-Roman-iso ff 120.00 scf sf
-2025 7110 m
-gs 1 -1 sc (Connection Duration) col0 sh gr
-/Times-Roman-iso ff 120.00 scf sf
-2835 6885 m
-gs 1 -1 sc (Request Duration) col0 sh gr
-/Helvetica-Bold-iso ff 300.00 scf sf
-6345 6795 m
-gs 1 -1 sc (t) col0 sh gr
-/Helvetica-Narrow-iso ff 120.00 scf sf
-7110 5985 m
-gs 1 -1 sc (->client) col0 sh gr
-/Helvetica-Narrow-iso ff 120.00 scf sf
-7065 5085 m
-gs 1 -1 sc (->connection) col0 sh gr
-/Helvetica-Narrow-iso ff 120.00 scf sf
-7065 4770 m
-gs 1 -1 sc (->server) col0 sh gr
-/Helvetica-Narrow-iso ff 120.00 scf sf
-8010 5445 m
-gs 1 -1 sc (SSL_get_app_data\(\)) col0 sh gr
-/Helvetica-Narrow-iso ff 120.00 scf sf
-10530 4050 m
-gs 1 -1 sc (->pSSLCtx) col0 sh gr
-/Helvetica-Narrow-iso ff 120.00 scf sf
-7875 4275 m
-gs 1 -1 sc (SSL_CTX_get_app_data\(\)) col0 sh gr
-/Helvetica-Narrow-iso ff 120.00 scf sf
-10305 5535 m
-gs 1 -1 sc (SSL_get_current_cipher\(\)) col0 sh gr
-/Helvetica-Narrow-iso ff 120.00 scf sf
-10440 5940 m
-gs 1 -1 sc (SSL_get_session\(\)) col0 sh gr
-/Helvetica-Narrow-iso ff 120.00 scf sf
-9540 7335 m
-gs 1 -1 sc (SSL_get_{r,w}bio\(\)) col0 sh gr
-/Helvetica-Narrow-iso ff 120.00 scf sf
-10125 4680 m
-gs 1 -1 sc (SSL_get_SSL_CTX\(\)) col0 sh gr
-/Helvetica-Narrow-iso ff 120.00 scf sf
-10350 5175 m
-gs 1 -1 sc (SSL_get_SSL_METHOD\(\)) col0 sh gr
-/Helvetica-Narrow-iso ff 120.00 scf sf
-11745 4770 m
-gs 1 -1 sc (->method) col0 sh gr
-/Helvetica-Narrow-iso ff 120.00 scf sf
-9945 6480 m
-gs 1 -1 sc (X509_STORE_CTX_get_app_data\(\)) col0 sh gr
-/Helvetica-Narrow-iso ff 120.00 scf sf
-10980 6705 m
-gs 1 -1 sc (SSL_CTX_get_cert_store\(\)) col0 sh gr
-/Helvetica-Narrow-iso ff 120.00 scf sf
-8280 5130 m
-gs 1 -1 sc (SSL_get_app_data2\(\)) col0 sh gr
-/Helvetica-Bold-iso ff 180.00 scf sf
-3645 1620 m
-gs 1 -1 sc (SSLDirConfig) col0 sh gr
-/Helvetica-Bold-iso ff 300.00 scf sf
-10935 3645 m
-gs 1 -1 sc (OpenSSL) col0 sh gr
-/Helvetica-Bold-iso ff 180.00 scf sf
-10935 3825 m
-gs 1 -1 sc ([SSL]) col0 sh gr
-/Helvetica-Bold-iso ff 180.00 scf sf
-11025 5760 m
-gs 1 -1 sc (SSL_CIPHER) col0 sh gr
-/Helvetica-Bold-iso ff 180.00 scf sf
-10980 6165 m
-gs 1 -1 sc (SSL_SESSION) col0 sh gr
-/Helvetica-Bold-iso ff 300.00 scf sf
-10710 7605 m
-gs 1 -1 sc (OpenSSL) col0 sh gr
-/Helvetica-Bold-iso ff 180.00 scf sf
-10575 7110 m
-gs 1 -1 sc (X509_STORE_CTX) col0 sh gr
-/Helvetica-Bold-iso ff 180.00 scf sf
-6795 2430 m
-gs 1 -1 sc (SSLModConfig) col0 sh gr
-/Helvetica-Bold-iso ff 180.00 scf sf
-8865 2430 m
-gs 1 -1 sc (SSLSrvConfig) col0 sh gr
-/Helvetica-Bold-iso ff 180.00 scf sf
-6345 3555 m
-gs 1 -1 sc (ap_global_ctx) col0 sh gr
-/Helvetica-Bold-iso ff 180.00 scf sf
-6345 4455 m
-gs 1 -1 sc (server_rec) col0 sh gr
-/Helvetica-Bold-iso ff 180.00 scf sf
-6345 5355 m
-gs 1 -1 sc (conn_rec) col0 sh gr
-/Helvetica-Bold-iso ff 180.00 scf sf
-9720 5355 m
-gs 1 -1 sc (SSL) col0 sh gr
-/Helvetica-Bold-iso ff 180.00 scf sf
-10665 2430 m
-gs 1 -1 sc (SSLDirConfig) col0 sh gr
-/Helvetica-Bold-iso ff 180.00 scf sf
-7290 6255 m
-gs 1 -1 sc (BUFF) col0 sh gr
-/Helvetica-Bold-iso ff 180.00 scf sf
-11025 5355 m
-gs 1 -1 sc (SSL_METHOD) col0 sh gr
-% Polyline
-15.000 slw
-n 750 225 m 450 225 450 8250 300 arcto 4 {pop} repeat
-  450 8550 12300 8550 300 arcto 4 {pop} repeat
-  12600 8550 12600 525 300 arcto 4 {pop} repeat
-  12600 225 750 225 300 arcto 4 {pop} repeat
- cp gs col0 s gr 
-/Helvetica-Bold-iso ff 180.00 scf sf
-11475 4455 m
-gs 1 -1 sc (SSL_CTX) col0 sh gr
-/Helvetica-Bold-iso ff 180.00 scf sf
-8010 4950 m
-gs 1 -1 sc (request_rec) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
-10575 675 m
-gs 1 -1 sc (Ralf S. Engelschall) col0 sh gr
-/Helvetica-Bold-iso ff 300.00 scf sf
-4275 675 m
-gs 1 -1 sc (Apache+mod_ssl+OpenSSL) col0 sh gr
-/Times-Roman-iso ff 150.00 scf sf
-10575 855 m
-gs 1 -1 sc (rse@engelschall.com) col0 sh gr
-/Times-Roman-iso ff 150.00 scf sf
-10575 1035 m
-gs 1 -1 sc (www.engelschall.com) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
-900 675 m
-gs 1 -1 sc (Version 1.3) col0 sh gr
-/Times-Roman-iso ff 180.00 scf sf
-900 855 m
-gs 1 -1 sc (12-Apr-1999) col0 sh gr
-/Helvetica-Bold-iso ff 360.00 scf sf
-3915 1080 m
-gs 1 -1 sc (Data Structure Overview) col0 sh gr
-/Helvetica-Bold-iso ff 180.00 scf sf
-9720 7110 m
-gs 1 -1 sc (BIO) col0 sh gr
-/Helvetica-Bold-iso ff 180.00 scf sf
-10710 7785 m
-gs 1 -1 sc ([Crypto]) col0 sh gr
-/Helvetica-Bold-iso ff 300.00 scf sf
-8730 3465 m
-gs 1 -1 sc (mod_ssl) col0 sh gr
-/Helvetica-Bold-iso ff 300.00 scf sf
-8145 6750 m
-gs 1 -1 sc (Apache) col0 sh gr
-/Helvetica-Bold-iso ff 300.00 scf sf
-9000 8100 m
-gs 1 -1 sc (Chaining) col0 sh gr
-/Helvetica-Bold-iso ff 300.00 scf sf
-2745 8100 m
-gs 1 -1 sc (Lifetime) col0 sh gr
-/Helvetica-Bold-iso ff 180.00 scf sf
-810 6255 m
-gs 1 -1 sc (ap_global_ctx) col0 sh gr
-/Helvetica-Bold-iso ff 180.00 scf sf
-990 5805 m
-gs 1 -1 sc (SSLModConfig) col0 sh gr
-/Helvetica-Bold-iso ff 180.00 scf sf
-4050 4455 m
-gs 1 -1 sc (SSL_CTX) col0 sh gr
-/Helvetica-Bold-iso ff 180.00 scf sf
-4455 5355 m
-gs 1 -1 sc (server_rec) col0 sh gr
-/Helvetica-Bold-iso ff 180.00 scf sf
-3870 4905 m
-gs 1 -1 sc (SSLSrvConfig) col0 sh gr
-/Helvetica-Bold-iso ff 180.00 scf sf
-1845 4005 m
-gs 1 -1 sc (BUFF) col0 sh gr
-/Helvetica-Bold-iso ff 180.00 scf sf
-2070 3555 m
-gs 1 -1 sc (conn_rec) col0 sh gr
-/Helvetica-Bold-iso ff 180.00 scf sf
-2295 3105 m
-gs 1 -1 sc (BIO) col0 sh gr
-/Helvetica-Bold-iso ff 180.00 scf sf
-2565 2655 m
-gs 1 -1 sc (SSL) col0 sh gr
-/Helvetica-Bold-iso ff 180.00 scf sf
-3915 2070 m
-gs 1 -1 sc (request_rec) col0 sh gr
-$F2psEnd
-rs
-showpage
diff --git a/modules/ssl/config.m4 b/modules/ssl/config.m4
deleted file mode 100644
index 3841caf..0000000
--- a/modules/ssl/config.m4
+++ /dev/null
@@ -1,85 +0,0 @@
-dnl ## ====================================================================
-dnl ## The Apache Software License, Version 1.1
-dnl ##  
-dnl ## Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
-dnl ## reserved.
-dnl ##
-dnl ## Redistribution and use in source and binary forms, with or without
-dnl ## modification, are permitted provided that the following conditions
-dnl ## are met:
-dnl ##
-dnl ## 1. Redistributions of source code must retain the above copyright
-dnl ##    notice, this list of conditions and the following disclaimer.
-dnl ##
-dnl ## 2. Redistributions in binary form must reproduce the above copyright
-dnl ##    notice, this list of conditions and the following disclaimer in
-dnl ##    the documentation and/or other materials provided with the
-dnl ##    distribution.
-dnl ##
-dnl ## 3. The end-user documentation included with the redistribution,
-dnl ##    if any, must include the following acknowledgment:
-dnl ##       "This product includes software developed by the
-dnl ##        Apache Software Foundation (http://www.apache.org/)."
-dnl ##    Alternately, this acknowledgment may appear in the software itself,
-dnl ##    if and wherever such third-party acknowledgments normally appear.
-dnl ##
-dnl ## 4. The names "Apache" and "Apache Software Foundation" must
-dnl ##    not be used to endorse or promote products derived from this
-dnl ##    software without prior written permission. For written
-dnl ##    permission, please contact apache@apache.org.
-dnl ##
-dnl ## 5. Products derived from this software may not be called "Apache",
-dnl ##    nor may "Apache" appear in their name, without prior written
-dnl ##    permission of the Apache Software Foundation.
-dnl ##
-dnl ## THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
-dnl ## WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-dnl ## OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-dnl ## DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
-dnl ## ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-dnl ## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-dnl ## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
-dnl ## USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-dnl ## ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-dnl ## OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
-dnl ## OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-dnl ## SUCH DAMAGE.
-dnl ## ====================================================================
-
-dnl #  start of module specific part
-APACHE_MODPATH_INIT(ssl)
-
-dnl #  list of module object files
-ssl_objs="dnl
-mod_ssl.lo dnl
-ssl_engine_config.lo dnl
-ssl_engine_dh.lo dnl
-ssl_engine_ext.lo dnl
-ssl_engine_init.lo dnl
-ssl_engine_io.lo dnl
-ssl_engine_kernel.lo dnl
-ssl_engine_log.lo dnl
-ssl_engine_mutex.lo dnl
-ssl_engine_pphrase.lo dnl
-ssl_engine_rand.lo dnl
-ssl_engine_vars.lo dnl
-ssl_expr.lo dnl
-ssl_expr_eval.lo dnl
-ssl_expr_parse.lo dnl
-ssl_expr_scan.lo dnl
-ssl_scache.lo dnl
-ssl_scache_dbm.lo dnl
-ssl_scache_shmcb.lo dnl
-ssl_scache_shmht.lo dnl
-ssl_util.lo dnl
-ssl_util_ssl.lo dnl
-ssl_util_table.lo dnl
-"
-dnl #  hook module into the Autoconf mechanism (--enable-ssl option)
-APACHE_MODULE(ssl, [SSL/TLS support (mod_ssl)], $ssl_objs, , no, [
-    APACHE_CHECK_SSL_TOOLKIT
-])
-
-dnl #  end of module specific part
-APACHE_MODPATH_FINISH
-
diff --git a/modules/ssl/mod_ssl.c b/modules/ssl/mod_ssl.c
deleted file mode 100644
index 45f72bb..0000000
--- a/modules/ssl/mod_ssl.c
+++ /dev/null
@@ -1,524 +0,0 @@
-/*                      _             _
-**  _ __ ___   ___   __| |    ___ ___| |  mod_ssl
-** | '_ ` _ \ / _ \ / _` |   / __/ __| |  Apache Interface to OpenSSL
-** | | | | | | (_) | (_| |   \__ \__ \ |  www.modssl.org
-** |_| |_| |_|\___/ \__,_|___|___/___/_|  ftp.modssl.org
-**                      |_____|
-**  mod_ssl.c
-**  Apache API interface structures
-*/
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- */
-
-#include "mod_ssl.h"
-#include "util_md5.h"
-#include <assert.h>
-
-/*
- *  the table of configuration directives we provide
- */
-
-#define SSL_CMD_ALL(name, args, desc) \
-        AP_INIT_##args("SSL"#name, ssl_cmd_SSL##name, \
-                       NULL, RSRC_CONF|OR_AUTHCFG, desc),
-
-#define SSL_CMD_SRV(name, args, desc) \
-        AP_INIT_##args("SSL"#name, ssl_cmd_SSL##name, \
-                       NULL, RSRC_CONF, desc),
-
-#define SSL_CMD_DIR(name, type, args, desc) \
-        AP_INIT_##args("SSL"#name, ssl_cmd_SSL##name, \
-                       NULL, OR_##type, desc),
-
-#define AP_END_CMD { NULL }
-
-static const command_rec ssl_config_cmds[] = {
-    /*
-     * Global (main-server) context configuration directives
-     */
-    SSL_CMD_SRV(Mutex, TAKE1,
-                "SSL lock for handling internal mutual exclusions "
-                "(`none', `file:/path/to/file')")
-    SSL_CMD_SRV(PassPhraseDialog, TAKE1,
-                "SSL dialog mechanism for the pass phrase query "
-                "(`builtin', `|/path/to/pipe_program`, "
-                "or `exec:/path/to/cgi_program')")
-    SSL_CMD_SRV(SessionCache, TAKE1,
-                "SSL Session Cache storage "
-                "(`none', `dbm:/path/to/file')")
-#ifdef SSL_EXPERIMENTAL_ENGINE
-    SSL_CMD_SRV(CryptoDevice, TAKE1,
-                "SSL external Crypto Device usage "
-                "(`builtin', `...')")
-#endif
-    SSL_CMD_SRV(RandomSeed, TAKE23,
-                "SSL Pseudo Random Number Generator (PRNG) seeding source "
-                "(`startup|connect builtin|file:/path|exec:/path [bytes]')")
-
-    /*
-     * Per-server context configuration directives
-     */
-    SSL_CMD_SRV(Engine, FLAG,
-                "SSL switch for the protocol engine "
-                "(`on', `off')")
-    SSL_CMD_ALL(CipherSuite, TAKE1,
-                "Colon-delimited list of permitted SSL Ciphers "
-                "(`XXX:...:XXX' - see manual)")
-    SSL_CMD_SRV(CertificateFile, TAKE1,
-                "SSL Server Certificate file "
-                "(`/path/to/file' - PEM or DER encoded)")
-    SSL_CMD_SRV(CertificateKeyFile, TAKE1,
-                "SSL Server Private Key file "
-                "(`/path/to/file' - PEM or DER encoded)")
-    SSL_CMD_SRV(CertificateChainFile, TAKE1,
-                "SSL Server CA Certificate Chain file "
-                "(`/path/to/file' - PEM encoded)")
-#ifdef SSL_EXPERIMENTAL_PERDIRCA
-    SSL_CMD_ALL(CACertificatePath, TAKE1,
-                "SSL CA Certificate path "
-                "(`/path/to/dir' - contains PEM encoded files)")
-    SSL_CMD_ALL(CACertificateFile, TAKE1,
-                "SSL CA Certificate file "
-                "(`/path/to/file' - PEM encoded)")
-#else
-    SSL_CMD_SRV(CACertificatePath, TAKE1,
-                "SSL CA Certificate path "
-                "(`/path/to/dir' - contains PEM encoded files)")
-    SSL_CMD_SRV(CACertificateFile, TAKE1,
-                "SSL CA Certificate file "
-                "(`/path/to/file' - PEM encoded)")
-#endif
-    SSL_CMD_SRV(CARevocationPath, TAKE1,
-                "SSL CA Certificate Revocation List (CRL) path "
-                "(`/path/to/dir' - contains PEM encoded files)")
-    SSL_CMD_SRV(CARevocationFile, TAKE1,
-                "SSL CA Certificate Revocation List (CRL) file "
-                "(`/path/to/file' - PEM encoded)")
-    SSL_CMD_ALL(VerifyClient, TAKE1,
-                "SSL Client verify type "
-                "(`none', `optional', `require', `optional_no_ca')")
-    SSL_CMD_ALL(VerifyDepth, TAKE1,
-                "SSL Client verify depth "
-                "(`N' - number of intermediate certificates)")
-    SSL_CMD_SRV(SessionCacheTimeout, TAKE1,
-                "SSL Session Cache object lifetime "
-                "(`N' - number of seconds)")
-    SSL_CMD_SRV(Log, TAKE1,
-                "SSL logfile for SSL-related messages "
-                "(`/path/to/file', `|/path/to/program')")
-    SSL_CMD_SRV(LogLevel, TAKE1,
-                "SSL logfile verbosity level "
-                "(`none', `error', `warn', `info', `debug')")
-    SSL_CMD_SRV(Protocol, RAW_ARGS,
-                "Enable or disable various SSL protocols"
-                "(`[+-][SSLv2|SSLv3|TLSv1] ...' - see manual)")
-
-#ifdef SSL_EXPERIMENTAL_PROXY
-    /* 
-     * Proxy configuration for remote SSL connections
-     */
-    SSL_CMD_SRV(ProxyProtocol, RAW_ARGS,
-               "SSL Proxy: enable or disable SSL protocol flavors "
-               "(`[+-][SSLv2|SSLv3|TLSv1] ...' - see manual)")
-    SSL_CMD_SRV(ProxyCipherSuite, TAKE1,
-               "SSL Proxy: colon-delimited list of permitted SSL ciphers "
-               "(`XXX:...:XXX' - see manual)")
-    SSL_CMD_SRV(ProxyVerify, FLAG,
-               "SSL Proxy: whether to verify the remote certificate "
-               "(`on' or `off')")
-    SSL_CMD_SRV(ProxyVerifyDepth, TAKE1,
-               "SSL Proxy: maximum certificate verification depth "
-               "(`N' - number of intermediate certificates)")
-    SSL_CMD_SRV(ProxyCACertificateFile, TAKE1,
-               "SSL Proxy: file containing server certificates "
-               "(`/path/to/file' - PEM encoded certificates)")
-    SSL_CMD_SRV(ProxyCACertificatePath, TAKE1,
-               "SSL Proxy: directory containing server certificates "
-               "(`/path/to/dir' - contains PEM encoded certificates)")
-    SSL_CMD_SRV(ProxyMachineCertificateFile, TAKE1,
-               "SSL Proxy: file containing client certificates "
-               "(`/path/to/file' - PEM encoded certificates)")
-    SSL_CMD_SRV(ProxyMachineCertificatePath, TAKE1,
-               "SSL Proxy: directory containing client certificates "
-               "(`/path/to/dir' - contains PEM encoded certificates)")
-#endif
-
-    /*
-     * Per-directory context configuration directives
-     */
-    SSL_CMD_DIR(Options, OPTIONS, RAW_ARGS,
-               "Set one or more options to configure the SSL engine"
-               "(`[+-]option[=value] ...' - see manual)")
-    SSL_CMD_DIR(RequireSSL, AUTHCFG, NO_ARGS,
-               "Require the SSL protocol for the per-directory context "
-               "(no arguments)")
-    SSL_CMD_DIR(Require, AUTHCFG, RAW_ARGS,
-               "Require a boolean expression to evaluate to true for granting access"
-               "(arbitrary complex boolean expression - see manual)")
-
-    AP_END_CMD
-};
-
-/*
- *  the various processing hooks
- */
-
-static int ssl_hook_pre_config(apr_pool_t *pconf,
-                               apr_pool_t *plog,
-                               apr_pool_t *ptemp)
-{
-    /* Register us to handle mod_log_config %c/%x variables */
-    ssl_var_log_config_register(pconf);
-#if 0 /* XXX */
-    /* XXX: Register us to handle mod_proxy extensions that don't exist yet */
-    ssl_ext_proxy_register(pconf);
-    /* XXX: Register us to handle mod_status extensions that don't exist yet */
-    ssl_scache_status_register(pconf);
-#endif /* -0- */
-
-    return OK;
-}
-
-static int ssl_hook_pre_connection(conn_rec *c, void *csd)
-{
-    SSLSrvConfigRec *sc = mySrvConfig(c->base_server);
-    SSL *ssl;
-    SSLConnRec *sslconn;
-
-    /*
-     * Immediately stop processing if SSL is disabled for this connection
-     */
-    if (!(sc && sc->bEnabled)) {
-        return DECLINED;
-    }
-
-    /*
-     * Create SSL context
-     */
-    sslconn = apr_pcalloc(c->pool, sizeof(*sslconn));
-    myConnConfigSet(c, sslconn);
-    sslconn->log_level = sc->nLogLevel;
-
-    /*
-     * Remember the connection information for
-     * later access inside callback functions
-     */
-
-    ssl_log(c->base_server, SSL_LOG_INFO,
-            "Connection to child %d established "
-            "(server %s, client %s)", c->id, sc->szVHostID, 
-            c->remote_ip ? c->remote_ip : "unknown");
-
-    /*
-     * Seed the Pseudo Random Number Generator (PRNG)
-     */
-    ssl_rand_seed(c->base_server, c->pool, SSL_RSCTX_CONNECT, "");
-
-    /*
-     * Create a new SSL connection with the configured server SSL context and
-     * attach this to the socket. Additionally we register this attachment
-     * so we can detach later.
-     */
-    if (!(ssl = SSL_new(sc->pSSLCtx))) {
-        ssl_log(c->base_server, SSL_LOG_ERROR|SSL_ADD_SSLERR,
-                "Unable to create a new SSL connection from the SSL context");
-
-        c->aborted = 1;
-
-        return DECLINED; /* XXX */
-    }
-
-    if (!SSL_set_session_id_context(ssl,
-                                    (unsigned char *)sc->szVHostID,
-                                    sc->nVHostID_length))
-    {
-        ssl_log(c->base_server, SSL_LOG_ERROR|SSL_ADD_SSLERR,
-                "Unable to set session id context to `%s'", sc->szVHostID);
-
-        c->aborted = 1;
-
-        return DECLINED; /* XXX */
-    }
-
-    SSL_set_app_data(ssl, c);
-    SSL_set_app_data2(ssl, NULL); /* will be request_rec */
-
-    sslconn->ssl = ssl;
-
-    /*
-     *  Configure callbacks for SSL connection
-     */
-    SSL_set_tmp_rsa_callback(ssl, ssl_callback_TmpRSA);
-    SSL_set_tmp_dh_callback(ssl,  ssl_callback_TmpDH);
-
-    SSL_set_verify_result(ssl, X509_V_OK);
-
-    ssl_io_filter_init(c, ssl);
-
-    return APR_SUCCESS;
-}
-
-static apr_status_t ssl_abort(SSLFilterRec *filter, conn_rec *c)
-{
-    SSLConnRec *sslconn = myConnConfig(c);
-    /*
-     * try to gracefully shutdown the connection:
-     * - send an own shutdown message (be gracefully)
-     * - don't wait for peer's shutdown message (deadloop)
-     * - kick away the SSL stuff immediately
-     * - block the socket, so Apache cannot operate any more
-     */
-
-    SSL_set_shutdown(filter->pssl, SSL_RECEIVED_SHUTDOWN);
-    SSL_smart_shutdown(filter->pssl);
-    SSL_free(filter->pssl);
-
-    filter->pssl = NULL; /* so filters know we've been shutdown */
-    sslconn->ssl = NULL;
-    c->aborted = 1;
-
-    return APR_EGENERAL;
-}
-
-/*
- * The hook is NOT registered with ap_hook_process_connection. Instead, it is
- * called manually from the churn () before it tries to read any data.
- * There is some problem if I accept conn_rec *. Still investigating..
- * Adv. if conn_rec * can be accepted is we can hook this function using the
- * ap_hook_process_connection hook.
- */
-int ssl_hook_process_connection(SSLFilterRec *filter)
-{
-    conn_rec *c         = (conn_rec *)SSL_get_app_data(filter->pssl);
-    SSLConnRec *sslconn = myConnConfig(c);
-    SSLSrvConfigRec *sc = mySrvConfig(c->base_server);
-    X509 *cert;
-    int n, err;
-    long verify_result;
-
-    if (!SSL_is_init_finished(filter->pssl)) {
-        if ((n = SSL_accept(filter->pssl)) <= 0) {
-            err = SSL_get_error(filter->pssl, n);
-
-            if (err == SSL_ERROR_ZERO_RETURN) {
-                /*
-                 * The case where the connection was closed before any data
-                 * was transferred. That's not a real error and can occur
-                 * sporadically with some clients.
-                 */
-                ssl_log(c->base_server, SSL_LOG_INFO,
-                        "SSL handshake stopped: connection was closed");
-            }
-            else if (err == SSL_ERROR_WANT_READ) {
-                /*
-                 * This is in addition to what was present earlier. It is 
-                 * borrowed from openssl_state_machine.c [mod_tls].
-                 * TBD.
-                 */
-                return SSL_ERROR_WANT_READ;
-            }
-            else if (ERR_GET_REASON(ERR_peek_error()) == SSL_R_HTTP_REQUEST) {
-                /*
-                 * The case where OpenSSL has recognized a HTTP request:
-                 * This means the client speaks plain HTTP on our HTTPS port.
-                 * Hmmmm...  Punt this out of here after removing our output
-                 * filter.
-                 */
-                ap_remove_output_filter(filter->pOutputFilter);
-                return HTTP_BAD_REQUEST;
-            }
-            else if ((SSL_get_error(filter->pssl, n) == SSL_ERROR_SYSCALL) &&
-                     (errno != EINTR))
-            {
-                if (errno > 0) {
-                    ssl_log(c->base_server,
-                            SSL_LOG_ERROR|SSL_ADD_SSLERR|SSL_ADD_ERRNO,
-                            "SSL handshake interrupted by system "
-                            "[Hint: Stop button pressed in browser?!]");
-                }
-                else {
-                    ssl_log(c->base_server,
-                            SSL_LOG_INFO|SSL_ADD_SSLERR|SSL_ADD_ERRNO,
-                            "Spurious SSL handshake interrupt [Hint: "
-                            "Usually just one of those OpenSSL confusions!?]");
-                }
-            }
-            else {
-                /*
-                 * Ok, anything else is a fatal error
-                 */
-                ssl_log(c->base_server,
-                        SSL_LOG_ERROR|SSL_ADD_SSLERR|SSL_ADD_ERRNO,
-                        "SSL handshake failed (server %s, client %s)",
-                        ssl_util_vhostid(c->pool, c->base_server),
-                        c->remote_ip ? c->remote_ip : "unknown");
-            }
-
-            return ssl_abort(filter, c);
-        }
-
-        /*
-         * Check for failed client authentication
-         */
-        verify_result = SSL_get_verify_result(filter->pssl);
-
-        if ((verify_result != X509_V_OK) ||
-            sslconn->verify_error)
-        {
-            if (ssl_verify_error_is_optional(verify_result) &&
-                (sc->nVerifyClient == SSL_CVERIFY_OPTIONAL_NO_CA))
-            {
-                /* leaving this log message as an error for the moment,
-                 * according to the mod_ssl docs:
-                 * "level optional_no_ca is actually against the idea
-                 *  of authentication (but can be used to establish 
-                 * SSL test pages, etc.)"
-                 * optional_no_ca doesn't appear to work as advertised
-                 * in 1.x
-                 */
-                ssl_log(c->base_server, SSL_LOG_ERROR|SSL_ADD_SSLERR,
-                        "SSL client authentication failed, "
-                        "accepting certificate based on "
-                        "\"SSLVerifyClient optional_no_ca\" configuration");
-            }
-            else {
-                const char *error = sslconn->verify_error ?
-                    sslconn->verify_error :
-                    X509_verify_cert_error_string(verify_result);
-
-                ssl_log(c->base_server, SSL_LOG_ERROR|SSL_ADD_SSLERR,
-                        "SSL client authentication failed: %s",
-                        error ? error : "unknown");
-
-                return ssl_abort(filter, c);
-            }
-        }
-
-        /*
-         * Remember the peer certificate's DN
-         */
-        if ((cert = SSL_get_peer_certificate(filter->pssl))) {
-            sslconn->client_cert = cert;
-            sslconn->client_dn = NULL;
-        }
-
-        /*
-         * Make really sure that when a peer certificate
-         * is required we really got one... (be paranoid)
-         */
-        if ((sc->nVerifyClient == SSL_CVERIFY_REQUIRE) &&
-            !sslconn->client_cert)
-        {
-            ssl_log(c->base_server, SSL_LOG_ERROR,
-                    "No acceptable peer certificate available");
-
-            return ssl_abort(filter, c);
-        }
-    }
-
-    return APR_SUCCESS;
-}
-
-static const char *ssl_hook_http_method(const request_rec *r)
-{
-    SSLSrvConfigRec *sc = mySrvConfig(r->server);
-
-    if (sc->bEnabled == FALSE) {
-        return NULL;
-    }
-
-    return "https";
-}
-
-static apr_port_t ssl_hook_default_port(const request_rec *r)
-{
-    SSLSrvConfigRec *sc = mySrvConfig(r->server);
-
-    if (sc->bEnabled == FALSE) {
-        return 0;
-    }
-
-    return 443;
-}
-
-/*
- *  the module registration phase
- */
-
-static void ssl_register_hooks(apr_pool_t *p)
-{
-    ssl_io_filter_register(p);
-
-    ap_hook_pre_connection(ssl_hook_pre_connection,NULL,NULL, APR_HOOK_MIDDLE);
-    ap_hook_post_config   (ssl_init_Module,        NULL,NULL, APR_HOOK_MIDDLE);
-    ap_hook_http_method   (ssl_hook_http_method,   NULL,NULL, APR_HOOK_MIDDLE);
-    ap_hook_default_port  (ssl_hook_default_port,  NULL,NULL, APR_HOOK_MIDDLE);
-    ap_hook_handler       (ssl_hook_Handler,       NULL,NULL, APR_HOOK_MIDDLE);
-    ap_hook_pre_config    (ssl_hook_pre_config,    NULL,NULL, APR_HOOK_MIDDLE);
-    ap_hook_child_init    (ssl_init_Child,         NULL,NULL, APR_HOOK_MIDDLE);
-    ap_hook_translate_name(ssl_hook_Translate,     NULL,NULL, APR_HOOK_MIDDLE);
-    ap_hook_check_user_id (ssl_hook_UserCheck,     NULL,NULL, APR_HOOK_FIRST);
-    ap_hook_fixups        (ssl_hook_Fixup,         NULL,NULL, APR_HOOK_MIDDLE);
-    ap_hook_access_checker(ssl_hook_Access,        NULL,NULL, APR_HOOK_MIDDLE);
-    ap_hook_auth_checker  (ssl_hook_Auth,          NULL,NULL, APR_HOOK_MIDDLE);
-    ap_hook_post_read_request(ssl_hook_ReadReq,    NULL,NULL, APR_HOOK_MIDDLE);
-
-    ssl_var_register();
-}
-
-module AP_MODULE_DECLARE_DATA ssl_module = {
-    STANDARD20_MODULE_STUFF,
-    ssl_config_perdir_create,   /* create per-dir    config structures */
-    ssl_config_perdir_merge,    /* merge  per-dir    config structures */
-    ssl_config_server_create,   /* create per-server config structures */
-    ssl_config_server_merge,    /* merge  per-server config structures */
-    ssl_config_cmds,            /* table of configuration directives   */
-    ssl_register_hooks          /* register hooks */
-};
diff --git a/modules/ssl/mod_ssl.dsp b/modules/ssl/mod_ssl.dsp
deleted file mode 100644
index 29c9335..0000000
--- a/modules/ssl/mod_ssl.dsp
+++ /dev/null
@@ -1,328 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mod_ssl" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mod_ssl - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "mod_ssl.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "mod_ssl.mak" CFG="mod_ssl - Win32 Release"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "mod_ssl - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mod_ssl - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "mod_ssl - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /O2 /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /I "../../srclib/openssl/inc32/openssl" /I "../../srclib/openssl/inc32" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "WIN32_LEAN_AND_MEAN" /D "NO_IDEA" /D "NO_RC5" /D "NO_MDC2" /Fd"Release\mod_ssl" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /map /machine:I386 /out:"Release/mod_ssl.so" /base:@..\..\os\win32\BaseAddr.ref,mod_ssl
-# ADD LINK32 kernel32.lib user32.lib wsock32.lib ws2_32.lib advapi32.lib gdi32.lib ssleay32.lib libeay32.lib /nologo /subsystem:windows /dll /map /machine:I386 /out:"Release/mod_ssl.so" /libpath:"../../srclib/openssl/out32dll" /libpath:"../../srclib/openssl/out32" /base:@..\..\os\win32\BaseAddr.ref,mod_ssl
-
-!ELSEIF  "$(CFG)" == "mod_ssl - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /I "../../srclib/openssl/inc32/openssl" /I "../../srclib/openssl/inc32" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "WIN32_LEAN_AND_MEAN" /D "NO_IDEA" /D "NO_RC5" /D "NO_MDC2" /Fd"Debug\mod_ssl" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /map /debug /machine:I386 /out:"Debug/mod_ssl.so" /base:@..\..\os\win32\BaseAddr.ref,mod_ssl
-# ADD LINK32 kernel32.lib user32.lib wsock32.lib ws2_32.lib advapi32.lib gdi32.lib ssleay32.lib libeay32.lib /nologo /subsystem:windows /dll /incremental:no /map /debug /machine:I386 /out:"Debug/mod_ssl.so" /libpath:"../../srclib/openssl/out32dll.dbg" /libpath:"../../srclib/openssl/out32.dbg" /base:@..\..\os\win32\BaseAddr.ref,mod_ssl
-
-!ENDIF 
-
-# Begin Target
-
-# Name "mod_ssl - Win32 Release"
-# Name "mod_ssl - Win32 Debug"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "*.c"
-# Begin Source File
-
-SOURCE=.\mod_ssl.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\ssl_engine_config.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\ssl_engine_dh.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\ssl_engine_ext.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\ssl_engine_init.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\ssl_engine_io.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\ssl_engine_kernel.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\ssl_engine_log.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\ssl_engine_mutex.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\ssl_engine_pphrase.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\ssl_engine_rand.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\ssl_engine_vars.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\ssl_expr.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\ssl_expr_eval.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\ssl_expr_parse.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\ssl_expr_scan.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\ssl_scache.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\ssl_scache_dbm.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\ssl_scache_shmcb.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\ssl_scache_shmht.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\ssl_util.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\ssl_util_ssl.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\ssl_util_table.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "*.h"
-# Begin Source File
-
-SOURCE=.\mod_ssl.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\ssl_expr.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\ssl_expr_parse.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\ssl_util_ssl.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\ssl_util_table.h
-# End Source File
-# End Group
-# Begin Group "Generated Files"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\ssl_expr_parse.y
-
-!IF  "$(CFG)" == "mod_ssl - Win32 Release"
-
-# Begin Custom Build - Generating ssl_expr_parse.c/.h from ssl_expr_parse.y
-InputPath=.\ssl_expr_parse.y
-
-BuildCmds= \
-	bison -y -d ssl_expr_parse.y \
-	sed -e "s;yy;ssl_expr_yy;g" -e  "/#if defined(c_plusplus) || defined(__cplusplus)/,/#endif/d" <y.tab.c  >ssl_expr_parse.c \
-	del y.tab.c \
-	sed -e "s;yy;ssl_expr_yy;g" <y.tab.h >ssl_expr_parse.h \
-	del y.tab.h \
-	
-
-"ssl_expr_parse.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-   $(BuildCmds)
-
-"ssl_expr_parse.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-   $(BuildCmds)
-# End Custom Build
-
-!ELSEIF  "$(CFG)" == "mod_ssl - Win32 Debug"
-
-# Begin Custom Build - Generating ssl_expr_parse.c/.h from ssl_expr_parse.y
-InputPath=.\ssl_expr_parse.y
-
-BuildCmds= \
-	bison -y -d ssl_expr_parse.y \
-	sed -e "s;yy;ssl_expr_yy;g" -e  "/#if defined(c_plusplus) || defined(__cplusplus)/,/#endif/d" <y.tab.c  >ssl_expr_parse.c \
-	del y.tab.c \
-	sed -e "s;yy;ssl_expr_yy;g" <y.tab.h >ssl_expr_parse.h \
-	del y.tab.h \
-	
-
-"ssl_expr_parse.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-   $(BuildCmds)
-
-"ssl_expr_parse.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-   $(BuildCmds)
-# End Custom Build
-
-!ENDIF 
-
-# End Source File
-# Begin Source File
-
-SOURCE=.\ssl_expr_scan.l
-
-!IF  "$(CFG)" == "mod_ssl - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Generating ssl_expr_scan.c from ssl_expr_scan.l
-InputPath=.\ssl_expr_scan.l
-
-"ssl_expr_scan.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	flex -Pssl_expr_yy -s -B ssl_expr_scan.l 
-	sed -e "/$$Header:/d" <lex.ssl_expr_yy.c >ssl_expr_scan.c 
-	del lex.ssl_expr_yy.c 
-	
-# End Custom Build
-
-!ELSEIF  "$(CFG)" == "mod_ssl - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Generating ssl_expr_scan.c from ssl_expr_scan.l
-InputPath=.\ssl_expr_scan.l
-
-"ssl_expr_scan.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	flex -Pssl_expr_yy -s -B ssl_expr_scan.l 
-	sed -e "/$$Header:/d" <lex.ssl_expr_yy.c >ssl_expr_scan.c 
-	del lex.ssl_expr_yy.c 
-	
-# End Custom Build
-
-!ENDIF 
-
-# End Source File
-# End Group
-# Begin Source File
-
-SOURCE=.\mod_ssl.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\build\win32\win32ver.awk
-
-!IF  "$(CFG)" == "mod_ssl - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_ssl.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ../../build/win32/win32ver.awk mod_ssl  "ssl_module for Apache" ../../include/ap_release.h > .\mod_ssl.rc
-
-# End Custom Build
-
-!ELSEIF  "$(CFG)" == "mod_ssl - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\mod_ssl.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ../../build/win32/win32ver.awk mod_ssl  "ssl_module for Apache" ../../include/ap_release.h > .\mod_ssl.rc
-
-# End Custom Build
-
-!ENDIF 
-
-# End Source File
-# End Target
-# End Project
diff --git a/modules/ssl/mod_ssl.h b/modules/ssl/mod_ssl.h
deleted file mode 100644
index 89c0a58..0000000
--- a/modules/ssl/mod_ssl.h
+++ /dev/null
@@ -1,773 +0,0 @@
-/*                      _             _
-**  _ __ ___   ___   __| |    ___ ___| |  mod_ssl
-** | '_ ` _ \ / _ \ / _` |   / __/ __| |  Apache Interface to OpenSSL
-** | | | | | | (_) | (_| |   \__ \__ \ |  www.modssl.org
-** |_| |_| |_|\___/ \__,_|___|___/___/_|  ftp.modssl.org
-**                      |_____|
-**  mod_ssl.h
-**  Global header
-*/
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- */
-                             /* ``The Apache Group: a collection
-                                  of talented individuals who are
-                                  trying to perfect the art of
-                                  never finishing something.''
-                                             -- Rob Hartill         */
-#ifndef __MOD_SSL_H__
-#define __MOD_SSL_H__
-
-#define MOD_SSL_VERSION "3.0a0"
-
-/* 
- * Optionally enable the experimental stuff, but allow the user to
- * override the decision which experimental parts are included by using
- * CFLAGS="-DSSL_EXPERIMENTAL_xxxx_IGNORE".
- */
-#ifdef SSL_EXPERIMENTAL
-#ifndef SSL_EXPERIMENTAL_PERDIRCA_IGNORE
-#define SSL_EXPERIMENTAL_PERDIRCA
-#endif
-#ifndef SSL_EXPERIMENTAL_PROXY_IGNORE
-#define SSL_EXPERIMENTAL_PROXY
-#endif
-#ifdef SSL_ENGINE
-#ifndef SSL_EXPERIMENTAL_ENGINE_IGNORE
-#define SSL_EXPERIMENTAL_ENGINE
-#endif
-#endif
-#endif /* SSL_EXPERIMENTAL */
-
-/*
- * Power up our brain...
- */
-
-/* Apache headers */
-#include "httpd.h"
-#include "http_config.h"
-#include "http_core.h"
-#include "http_log.h"
-#include "http_main.h"
-#include "http_connection.h"
-#include "http_request.h"
-#include "http_protocol.h"
-#include "util_script.h"
-#include "util_filter.h"
-#include "mpm.h"
-#include "apr.h"
-#include "apr_strings.h"
-#include "apr_tables.h"
-#include "apr_lib.h"
-#include "apr_fnmatch.h"
-#include "apr_strings.h"
-#include "apr_dbm.h"
-#include "apr_rmm.h"
-#include "apr_shm.h"
-#include "apr_optional.h"
-
-/* OpenSSL headers */
-#include <ssl.h>
-#include <err.h>
-#include <x509.h>
-#include <x509v3.h>
-#include <pem.h>
-#include <crypto.h>
-#include <evp.h>
-#include <rand.h>
-#ifdef SSL_EXPERIMENTAL_ENGINE
-#include <engine.h>
-#endif
-
-/* mod_ssl headers */
-#include "ssl_expr.h"
-#include "ssl_util_ssl.h"
-#include "ssl_util_table.h"
-
-/* The #ifdef macros are only defined AFTER including the above
- * therefore we cannot include these system files at the top  :-(
- */
-#if APR_HAVE_SYS_TIME_H
-#include <sys/time.h>
-#endif
-#if APR_HAVE_UNISTD_H
-#include <unistd.h> /* needed for STDIN_FILENO et.al., at least on FreeBSD */
-#endif
-
-/*
- * Provide reasonable default for some defines
- */
-#ifndef FALSE
-#define FALSE (0)
-#endif
-#ifndef TRUE
-#define TRUE (!FALSE)
-#endif
-#ifndef PFALSE
-#define PFALSE ((void *)FALSE)
-#endif
-#ifndef PTRUE
-#define PTRUE ((void *)TRUE)
-#endif
-#ifndef UNSET
-#define UNSET (-1)
-#endif
-#ifndef NUL
-#define NUL '\0'
-#endif
-#ifndef RAND_MAX
-#include <limits.h>
-#define RAND_MAX INT_MAX
-#endif
-
-/*
- * Provide reasonable defines for some types
- */
-#ifndef BOOL
-#define BOOL unsigned int
-#endif
-#ifndef UCHAR
-#define UCHAR unsigned char
-#endif
-
-/*
- * Provide useful shorthands
- */
-#define strEQ(s1,s2)     (strcmp(s1,s2)        == 0)
-#define strNE(s1,s2)     (strcmp(s1,s2)        != 0)
-#define strEQn(s1,s2,n)  (strncmp(s1,s2,n)     == 0)
-#define strNEn(s1,s2,n)  (strncmp(s1,s2,n)     != 0)
-
-#define strcEQ(s1,s2)    (strcasecmp(s1,s2)    == 0)
-#define strcNE(s1,s2)    (strcasecmp(s1,s2)    != 0)
-#define strcEQn(s1,s2,n) (strncasecmp(s1,s2,n) == 0)
-#define strcNEn(s1,s2,n) (strncasecmp(s1,s2,n) != 0)
-
-#define strIsEmpty(s)    (s == NULL || s[0] == NUL)
-
-#define cfgMerge(el,unset)  new->el = (add->el == (unset)) ? base->el : add->el
-#define cfgMergeArray(el)   new->el = apr_array_append(p, add->el, base->el)
-#define cfgMergeTable(el)   new->el = apr_table_overlay(p, add->el, base->el)
-#define cfgMergeCtx(el)     new->el = apr_table_overlay(p, add->el, base->el)
-#define cfgMergeString(el)  cfgMerge(el, NULL)
-#define cfgMergeBool(el)    cfgMerge(el, UNSET)
-#define cfgMergeInt(el)     cfgMerge(el, UNSET)
-
-#define myConnConfig(c) \
-(SSLConnRec *)ap_get_module_config(c->conn_config, &ssl_module)
-#define myConnConfigSet(c, val) \
-ap_set_module_config(c->conn_config, &ssl_module, val)
-#define mySrvConfig(srv) (SSLSrvConfigRec *)ap_get_module_config(srv->module_config,  &ssl_module)
-#define myDirConfig(req) (SSLDirConfigRec *)ap_get_module_config(req->per_dir_config, &ssl_module)
-#define myModConfig(srv) (mySrvConfig((srv)))->mc
-
-#define myCtxVarSet(mc,num,val)  mc->rCtx.pV##num = val
-#define myCtxVarGet(mc,num,type) (type)(mc->rCtx.pV##num)
-
-/*
- * SSL Logging
- */
-#define SSL_LOG_NONE    (1<<0)
-#define SSL_LOG_ERROR   (1<<1)
-#define SSL_LOG_WARN    (1<<2)
-#define SSL_LOG_INFO    (1<<3)
-#define SSL_LOG_TRACE   (1<<4)
-#define SSL_LOG_DEBUG   (1<<5)
-#define SSL_LOG_MASK    (SSL_LOG_ERROR|SSL_LOG_WARN|SSL_LOG_INFO|SSL_LOG_TRACE|SSL_LOG_DEBUG)
-
-#define SSL_ADD_NONE     (1<<8)
-#define SSL_ADD_ERRNO    (1<<9)
-#define SSL_ADD_SSLERR   (1<<10)
-#define SSL_NO_TIMESTAMP (1<<11)
-#define SSL_NO_LEVELID   (1<<12)
-#define SSL_NO_NEWLINE   (1<<13)
-
-/*
- * Defaults for the configuration
- */
-#ifndef SSL_SESSION_CACHE_TIMEOUT
-#define SSL_SESSION_CACHE_TIMEOUT  300
-#endif
-
-/*
- * Support for MM library
- */
-#define SSL_MM_FILE_MODE ( APR_UREAD | APR_UWRITE | APR_GREAD | APR_WREAD )
-
-/*
- * Support for DBM library
- */
-#define SSL_DBM_FILE_MODE ( APR_UREAD | APR_UWRITE | APR_GREAD | APR_WREAD )
-
-#if !defined(SSL_DBM_FILE_SUFFIX_DIR) && !defined(SSL_DBM_FILE_SUFFIX_PAG)
-#if defined(DBM_SUFFIX)
-#define SSL_DBM_FILE_SUFFIX_DIR DBM_SUFFIX
-#define SSL_DBM_FILE_SUFFIX_PAG DBM_SUFFIX
-#elif defined(__FreeBSD__) || (defined(DB_LOCK) && defined(DB_SHMEM))
-#define SSL_DBM_FILE_SUFFIX_DIR ".db"
-#define SSL_DBM_FILE_SUFFIX_PAG ".db"
-#else
-#define SSL_DBM_FILE_SUFFIX_DIR ".dir"
-#define SSL_DBM_FILE_SUFFIX_PAG ".pag"
-#endif
-#endif
-
-/*
- * Check for OpenSSL version 
- */
-#if SSL_LIBRARY_VERSION < 0x00906000
-#error "mod_ssl requires OpenSSL 0.9.6 or higher"
-#endif
-
-/*
- * Define the certificate algorithm types
- */
-
-typedef int ssl_algo_t;
-
-#define SSL_ALGO_UNKNOWN (0)
-#define SSL_ALGO_RSA     (1<<0)
-#define SSL_ALGO_DSA     (1<<1)
-#define SSL_ALGO_ALL     (SSL_ALGO_RSA|SSL_ALGO_DSA)
-
-#define SSL_AIDX_RSA     (0)
-#define SSL_AIDX_DSA     (1)
-#define SSL_AIDX_MAX     (2)
-
-
-/*
- * Define IDs for the temporary RSA keys and DH params
- */
-
-#define SSL_TMP_KEY_RSA_512  (0)
-#define SSL_TMP_KEY_RSA_1024 (1)
-#define SSL_TMP_KEY_DH_512   (2)
-#define SSL_TMP_KEY_DH_1024  (3)
-#define SSL_TMP_KEY_MAX      (4)
-
-/*
- * Define the SSL options
- */
-#define SSL_OPT_NONE           (0)
-#define SSL_OPT_RELSET         (1<<0)
-#define SSL_OPT_STDENVVARS     (1<<1)
-#define SSL_OPT_COMPATENVVARS  (1<<2)
-#define SSL_OPT_EXPORTCERTDATA (1<<3)
-#define SSL_OPT_FAKEBASICAUTH  (1<<4)
-#define SSL_OPT_STRICTREQUIRE  (1<<5)
-#define SSL_OPT_OPTRENEGOTIATE (1<<6)
-#define SSL_OPT_ALL            (SSL_OPT_STDENVVARS|SSL_OPT_COMPATENVVAR|SSL_OPT_EXPORTCERTDATA|SSL_OPT_FAKEBASICAUTH|SSL_OPT_STRICTREQUIRE|SSL_OPT_OPTRENEGOTIATE)
-typedef int ssl_opt_t;
-
-/*
- * Define the SSL Protocol options
- */
-#define SSL_PROTOCOL_NONE  (0)
-#define SSL_PROTOCOL_SSLV2 (1<<0)
-#define SSL_PROTOCOL_SSLV3 (1<<1)
-#define SSL_PROTOCOL_TLSV1 (1<<2)
-#define SSL_PROTOCOL_ALL   (SSL_PROTOCOL_SSLV2|SSL_PROTOCOL_SSLV3|SSL_PROTOCOL_TLSV1)
-typedef int ssl_proto_t;
-
-/*
- * Define the SSL verify levels
- */
-typedef enum {
-    SSL_CVERIFY_UNSET           = UNSET,
-    SSL_CVERIFY_NONE            = 0,
-    SSL_CVERIFY_OPTIONAL        = 1,
-    SSL_CVERIFY_REQUIRE         = 2,
-    SSL_CVERIFY_OPTIONAL_NO_CA  = 3
-} ssl_verify_t;
-
-#define SSL_VERIFY_PEER_STRICT \
-     (SSL_VERIFY_PEER|SSL_VERIFY_FAIL_IF_NO_PEER_CERT)
-
-#ifndef X509_V_ERR_CERT_UNTRUSTED
-#define X509_V_ERR_CERT_UNTRUSTED 27
-
-#endif
-
-#ifdef OPENSSL_VERSION_NUMBER
-
-#define EVP_PKEY_key_type(k)              (EVP_PKEY_type(k->type))
-
-#define X509_NAME_get_entries(xs)         (xs->entries)
-#define X509_REVOKED_get_serialNumber(xs) (xs->serialNumber)
-
-#define X509_get_signature_algorithm(xs) (xs->cert_info->signature->algorithm)
-#define X509_get_key_algorithm(xs)       (xs->cert_info->key->algor->algorithm)
-
-#define X509_NAME_ENTRY_get_data_ptr(xs) (xs->value->data)
-#define X509_NAME_ENTRY_get_data_len(xs) (xs->value->length)
-
-#define SSL_CTX_get_extra_certs(ctx)       (ctx->extra_certs)
-#define SSL_CTX_set_extra_certs(ctx,value) {ctx->extra_certs = value;}
-
-#define SSL_CIPHER_get_name(s)             (s->name)
-#define SSL_CIPHER_get_valid(s)            (s->valid)
-
-#define SSL_SESSION_get_session_id(s)      (s->session_id)
-#define SSL_SESSION_get_session_id_length(s) (s->session_id_length)
-
-/*
- * Support for retrieving/overriding states
- */
-#ifndef SSL_get_state
-#define SSL_get_state(ssl) SSL_state(ssl)
-#endif
-
-#define SSL_set_state(ssl,val) (ssl)->state = val
-
-#endif
-
-#define ssl_verify_error_is_optional(errnum) \
-   ((errnum == X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT) \
-    || (errnum == X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN) \
-    || (errnum == X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY) \
-    || (errnum == X509_V_ERR_CERT_UNTRUSTED) \
-    || (errnum == X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE))
-
-/*
- * Define the SSL pass phrase dialog types
- */
-typedef enum {
-    SSL_PPTYPE_UNSET   = UNSET,
-    SSL_PPTYPE_BUILTIN = 0,
-    SSL_PPTYPE_FILTER  = 1,
-	SSL_PPTYPE_PIPE    = 2
-} ssl_pphrase_t;
-
-/*
- * Define the Path Checking modes
- */
-#define SSL_PCM_EXISTS     1
-#define SSL_PCM_ISREG      2
-#define SSL_PCM_ISDIR      4
-#define SSL_PCM_ISNONZERO  8
-typedef unsigned int ssl_pathcheck_t;
-
-/*
- * Define the SSL session cache modes and structures
- */
-typedef enum {
-    SSL_SCMODE_UNSET = UNSET,
-    SSL_SCMODE_NONE  = 0,
-    SSL_SCMODE_DBM   = 1,
-    SSL_SCMODE_SHMHT = 2,
-    SSL_SCMODE_SHMCB = 3
-} ssl_scmode_t;
-
-/*
- * Define the SSL mutex modes
- */
-typedef enum {
-    SSL_MUTEXMODE_UNSET  = UNSET,
-    SSL_MUTEXMODE_NONE   = 0,
-    SSL_MUTEXMODE_USED   = 1
-} ssl_mutexmode_t;
-
-/*
- * Define the SSL requirement structure
- */
-typedef struct {
-    char     *cpExpr;
-    ssl_expr *mpExpr;
-} ssl_require_t;
-
-/*
- * Define the SSL random number generator seeding source
- */
-typedef enum {
-    SSL_RSCTX_STARTUP = 1,
-    SSL_RSCTX_CONNECT = 2
-} ssl_rsctx_t;
-typedef enum {
-    SSL_RSSRC_BUILTIN = 1,
-    SSL_RSSRC_FILE    = 2,
-    SSL_RSSRC_EXEC    = 3,
-    SSL_RSSRC_EGD     = 4
-} ssl_rssrc_t;
-typedef struct {
-    ssl_rsctx_t  nCtx;
-    ssl_rssrc_t  nSrc;
-    char        *cpPath;
-    int          nBytes;
-} ssl_randseed_t;
-
-/*
- * Define the structure of an ASN.1 anything
- */
-typedef struct {
-    long int       nData;
-    unsigned char *cpData;
-    apr_time_t     source_mtime;
-} ssl_asn1_t;
-
-/*
- * Define the mod_ssl per-module configuration structure
- * (i.e. the global configuration for each httpd process)
- */
-
-typedef struct {
-    SSL                *pssl;
-    BIO                *pbioRead;
-    BIO                *pbioWrite;
-    ap_filter_t        *pInputFilter;
-    ap_filter_t        *pOutputFilter;
-} SSLFilterRec;
-
-typedef enum {
-    SSL_SHUTDOWN_TYPE_UNSET,
-    SSL_SHUTDOWN_TYPE_STANDARD,
-    SSL_SHUTDOWN_TYPE_UNCLEAN,
-    SSL_SHUTDOWN_TYPE_ACCURATE
-} ssl_shutdown_type_e;
-
-typedef struct {
-    SSL *ssl;
-    const char *client_dn;
-    X509 *client_cert;
-    ssl_shutdown_type_e shutdown_type;
-    const char *verify_info;
-    const char *verify_error;
-    int verify_depth;
-    int log_level; /* for avoiding expensive logging */
-} SSLConnRec;
-
-#define SSLConnLogApplies(sslconn, level) (sslconn->log_level >= level)
-
-typedef struct {
-    pid_t           pid;
-    apr_pool_t     *pPool;
-    BOOL            bFixed;
-    int             nSessionCacheMode;
-    char           *szSessionCacheDataFile;
-    int             nSessionCacheDataSize;
-    apr_shm_t      *pSessionCacheDataMM;
-    apr_rmm_t      *pSessionCacheDataRMM;
-    apr_table_t    *tSessionCacheDataTable;
-    ssl_mutexmode_t nMutexMode;
-    char           *szMutexFile;
-    apr_lock_t     *pMutex;
-    apr_array_header_t   *aRandSeed;
-    apr_hash_t     *tVHostKeys;
-    void           *pTmpKeys[SSL_TMP_KEY_MAX];
-    apr_hash_t     *tPublicCert;
-    apr_hash_t     *tPrivateKey;
-#ifdef SSL_EXPERIMENTAL_ENGINE
-    char           *szCryptoDevice;
-#endif
-    struct {
-        void *pV1, *pV2, *pV3, *pV4, *pV5, *pV6, *pV7, *pV8, *pV9, *pV10;
-    } rCtx;
-} SSLModConfigRec;
-
-/*
- * Define the mod_ssl per-server configuration structure
- * (i.e. the configuration for the main server
- *  and all <VirtualHost> contexts)
- */
-typedef struct {
-    SSLModConfigRec *mc;
-    const char  *szVHostID;
-    int          nVHostID_length;
-    BOOL         bEnabled;
-    const char  *szPublicCertFiles[SSL_AIDX_MAX];
-    const char  *szPrivateKeyFiles[SSL_AIDX_MAX];
-    const char  *szCertificateChain;
-    const char  *szCACertificatePath;
-    const char  *szCACertificateFile;
-    const char  *szLogFile;
-    const char  *szCipherSuite;
-    apr_file_t  *fileLogFile;
-    int          nLogLevel;
-    int          nVerifyDepth;
-    ssl_verify_t nVerifyClient;
-    X509        *pPublicCert[SSL_AIDX_MAX];
-    EVP_PKEY    *pPrivateKey[SSL_AIDX_MAX];
-    SSL_CTX     *pSSLCtx;
-    int          nSessionCacheTimeout;
-    int          nPassPhraseDialogType;
-    const char  *szPassPhraseDialogPath;
-    ssl_proto_t  nProtocol;
-    const char  *szCARevocationPath;
-    const char  *szCARevocationFile;
-    X509_STORE  *pRevocationStore;
-#ifdef SSL_EXPERIMENTAL_PROXY
-    /* Configuration details for proxy operation */
-    ssl_proto_t  nProxyProtocol;
-    int          bProxyVerify;
-    int          nProxyVerifyDepth;
-    const char  *szProxyCACertificatePath;
-    const char  *szProxyCACertificateFile;
-    const char  *szProxyClientCertificateFile;
-    const char  *szProxyClientCertificatePath;
-    const char  *szProxyCipherSuite;
-    SSL_CTX     *pSSLProxyCtx;
-    STACK_OF(X509_INFO) *skProxyClientCerts;
-#endif
-} SSLSrvConfigRec;
-
-/*
- * Define the mod_ssl per-directory configuration structure
- * (i.e. the local configuration for all <Directory>
- *  and .htaccess contexts)
- */
-typedef struct {
-    BOOL          bSSLRequired;
-    apr_array_header_t *aRequirement;
-    ssl_opt_t     nOptions;
-    ssl_opt_t     nOptionsAdd;
-    ssl_opt_t     nOptionsDel;
-    char         *szCipherSuite;
-    ssl_verify_t  nVerifyClient;
-    int           nVerifyDepth;
-#ifdef SSL_EXPERIMENTAL_PERDIRCA
-    char         *szCACertificatePath;
-    char         *szCACertificateFile;
-#endif
-} SSLDirConfigRec;
-
-/*
- *  function prototypes
- */
-
-/*  API glue structures  */
-extern module AP_MODULE_DECLARE_DATA ssl_module;
-
-/*  configuration handling   */
-SSLModConfigRec *ssl_config_global_create(server_rec *);
-void         ssl_config_global_fix(SSLModConfigRec *);
-BOOL         ssl_config_global_isfixed(SSLModConfigRec *);
-void        *ssl_config_server_create(apr_pool_t *, server_rec *);
-void        *ssl_config_server_merge(apr_pool_t *, void *, void *);
-void        *ssl_config_perdir_create(apr_pool_t *, char *);
-void        *ssl_config_perdir_merge(apr_pool_t *, void *, void *);
-const char  *ssl_cmd_SSLMutex(cmd_parms *, void *, const char *);
-const char  *ssl_cmd_SSLPassPhraseDialog(cmd_parms *, void *, const char *);
-const char  *ssl_cmd_SSLCryptoDevice(cmd_parms *, void *, const char *);
-const char  *ssl_cmd_SSLRandomSeed(cmd_parms *, void *, const char *, const char *, const char *);
-const char  *ssl_cmd_SSLEngine(cmd_parms *, void *, int);
-const char  *ssl_cmd_SSLCipherSuite(cmd_parms *, void *, const char *);
-const char  *ssl_cmd_SSLCertificateFile(cmd_parms *, void *, const char *);
-const char  *ssl_cmd_SSLCertificateKeyFile(cmd_parms *, void *, const char *);
-const char  *ssl_cmd_SSLCertificateChainFile(cmd_parms *, void *, const char *);
-const char  *ssl_cmd_SSLCACertificatePath(cmd_parms *, void *, const char *);
-const char  *ssl_cmd_SSLCACertificateFile(cmd_parms *, void *, const char *);
-const char  *ssl_cmd_SSLCARevocationPath(cmd_parms *, void *, const char *);
-const char  *ssl_cmd_SSLCARevocationFile(cmd_parms *, void *, const char *);
-const char  *ssl_cmd_SSLVerifyClient(cmd_parms *, void *, const char *);
-const char  *ssl_cmd_SSLVerifyDepth(cmd_parms *, void *, const char *);
-const char  *ssl_cmd_SSLSessionCache(cmd_parms *, void *, const char *);
-const char  *ssl_cmd_SSLSessionCacheTimeout(cmd_parms *, void *, const char *);
-const char  *ssl_cmd_SSLLog(cmd_parms *, void *, const char *);
-const char  *ssl_cmd_SSLLogLevel(cmd_parms *, void *, const char *);
-const char  *ssl_cmd_SSLProtocol(cmd_parms *, void *, const char *);
-const char  *ssl_cmd_SSLOptions(cmd_parms *, void *, const char *);
-const char  *ssl_cmd_SSLRequireSSL(cmd_parms *, void *);
-const char  *ssl_cmd_SSLRequire(cmd_parms *, void *, const char *);
-#ifdef SSL_EXPERIMENTAL_PROXY
-const char  *ssl_cmd_SSLProxyProtocol(cmd_parms *, char *, const char *);
-const char  *ssl_cmd_SSLProxyCipherSuite(cmd_parms *, char *, char *);
-const char  *ssl_cmd_SSLProxyVerify(cmd_parms *, char *, int);
-const char  *ssl_cmd_SSLProxyVerifyDepth(cmd_parms *, char *, char *);
-const char  *ssl_cmd_SSLProxyCACertificatePath(cmd_parms *, char *, char *);
-const char  *ssl_cmd_SSLProxyCACertificateFile(cmd_parms *, char *, char *);
-const char  *ssl_cmd_SSLProxyMachineCertificatePath(cmd_parms *, char *, char *);
-const char  *ssl_cmd_SSLProxyMachineCertificateFile(cmd_parms *, char *, char *);
-#endif
-
-/*  module initialization  */
-int          ssl_init_Module(apr_pool_t *, apr_pool_t *, apr_pool_t *, server_rec *);
-void         ssl_init_Engine(server_rec *, apr_pool_t *);
-void         ssl_init_ConfigureServer(server_rec *, apr_pool_t *, apr_pool_t *, SSLSrvConfigRec *);
-void         ssl_init_CheckServers(server_rec *, apr_pool_t *);
-STACK_OF(X509_NAME) 
-            *ssl_init_FindCAList(server_rec *, apr_pool_t *, const char *, const char *);
-void         ssl_init_Child(apr_pool_t *, server_rec *);
-apr_status_t ssl_init_ModuleKill(void *data);
-
-/*  Apache API hooks  */
-void         ssl_hook_NewConnection(conn_rec *);
-void         ssl_hook_TimeoutConnection(int);
-int          ssl_hook_process_connection(SSLFilterRec *pRec);
-apr_status_t ssl_hook_CloseConnection(SSLFilterRec *);
-int          ssl_hook_Translate(request_rec *);
-int          ssl_hook_Auth(request_rec *);
-int          ssl_hook_UserCheck(request_rec *);
-int          ssl_hook_Access(request_rec *);
-int          ssl_hook_Fixup(request_rec *);
-int          ssl_hook_ReadReq(request_rec *);
-int          ssl_hook_Handler(request_rec *);
-
-/*  OpenSSL callbacks */
-RSA         *ssl_callback_TmpRSA(SSL *, int, int);
-DH          *ssl_callback_TmpDH(SSL *, int, int);
-int          ssl_callback_SSLVerify(int, X509_STORE_CTX *);
-int          ssl_callback_SSLVerify_CRL(int, X509_STORE_CTX *, server_rec *);
-int          ssl_callback_NewSessionCacheEntry(SSL *, SSL_SESSION *);
-SSL_SESSION *ssl_callback_GetSessionCacheEntry(SSL *, unsigned char *, int, int *);
-void         ssl_callback_DelSessionCacheEntry(SSL_CTX *, SSL_SESSION *);
-#if SSL_LIBRARY_VERSION >= 0x00907000
-void         ssl_callback_LogTracingState(const SSL *, int, int);
-#else
-void         ssl_callback_LogTracingState(SSL *, int, int);
-#endif
-
-/*  Session Cache Support  */
-void         ssl_scache_init(server_rec *, apr_pool_t *);
-#if 0 /* XXX */
-void         ssl_scache_status_register(apr_pool_t *p);
-#endif
-void         ssl_scache_kill(server_rec *);
-BOOL         ssl_scache_store(server_rec *, UCHAR *, int, time_t, SSL_SESSION *);
-SSL_SESSION *ssl_scache_retrieve(server_rec *, UCHAR *, int);
-void         ssl_scache_remove(server_rec *, UCHAR *, int);
-void         ssl_scache_expire(server_rec *);
-void         ssl_scache_status(server_rec *, apr_pool_t *, void (*)(char *, void *), void *);
-char        *ssl_scache_id2sz(UCHAR *, int);
-void         ssl_scache_dbm_init(server_rec *, apr_pool_t *);
-void         ssl_scache_dbm_kill(server_rec *);
-BOOL         ssl_scache_dbm_store(server_rec *, UCHAR *, int, time_t, SSL_SESSION *);
-SSL_SESSION *ssl_scache_dbm_retrieve(server_rec *, UCHAR *, int);
-void         ssl_scache_dbm_remove(server_rec *, UCHAR *, int);
-void         ssl_scache_dbm_expire(server_rec *);
-void         ssl_scache_dbm_status(server_rec *, apr_pool_t *, void (*)(char *, void *), void *);
-
-void         ssl_scache_shmht_init(server_rec *, apr_pool_t *);
-void         ssl_scache_shmht_kill(server_rec *);
-BOOL         ssl_scache_shmht_store(server_rec *, UCHAR *, int, time_t, SSL_SESSION *);
-SSL_SESSION *ssl_scache_shmht_retrieve(server_rec *, UCHAR *, int);
-void         ssl_scache_shmht_remove(server_rec *, UCHAR *, int);
-void         ssl_scache_shmht_expire(server_rec *);
-void         ssl_scache_shmht_status(server_rec *, apr_pool_t *, void (*)(char *, void *), void *);
-
-void         ssl_scache_shmcb_init(server_rec *, apr_pool_t *);
-void         ssl_scache_shmcb_kill(server_rec *);
-BOOL         ssl_scache_shmcb_store(server_rec *, UCHAR *, int, time_t, SSL_SESSION *);
-SSL_SESSION *ssl_scache_shmcb_retrieve(server_rec *, UCHAR *, int);
-void         ssl_scache_shmcb_remove(server_rec *, UCHAR *, int);
-void         ssl_scache_shmcb_expire(server_rec *);
-void         ssl_scache_shmcb_status(server_rec *, apr_pool_t *, void (*)(char *, void *), void *);
-
-/*  Pass Phrase Support  */
-void         ssl_pphrase_Handle(server_rec *, apr_pool_t *);
-
-/*  Diffie-Hellman Parameter Support  */
-DH           *ssl_dh_GetTmpParam(int);
-DH           *ssl_dh_GetParamFromFile(char *);
-
-unsigned char *ssl_asn1_table_set(apr_hash_t *table,
-                                  const char *key,
-                                  long int length);
-
-ssl_asn1_t *ssl_asn1_table_get(apr_hash_t *table,
-                               const char *key);
-
-void ssl_asn1_table_unset(apr_hash_t *table,
-                          const char *key);
-
-const char *ssl_asn1_keystr(int keytype);
-
-const char *ssl_asn1_table_keyfmt(apr_pool_t *p,
-                                  const char *id,
-                                  int keytype);
-/*  Mutex Support  */
-int          ssl_mutex_init(server_rec *, apr_pool_t *);
-int          ssl_mutex_reinit(server_rec *, apr_pool_t *);
-int          ssl_mutex_on(server_rec *);
-int          ssl_mutex_off(server_rec *);
-
-/*  Logfile Support  */
-void         ssl_log_open(server_rec *, server_rec *, apr_pool_t *);
-void         ssl_log(server_rec *, int, const char *, ...);
-void         ssl_die(void);
-
-/*  Variables  */
-void         ssl_var_register(void);
-char        *ssl_var_lookup(apr_pool_t *, server_rec *, conn_rec *, request_rec *, char *);
-void         ssl_var_log_config_register(apr_pool_t *p);
-
-APR_DECLARE_OPTIONAL_FN(char *, ssl_var_lookup,
-                        (apr_pool_t *, server_rec *,
-                         conn_rec *, request_rec *,
-                         char *));
-
-/*  Proxy Extensions  */
-#if 0 /* XXX */
-void         ssl_ext_proxy_register(apr_pool_t *p);
-#endif /* -0- */
-
-/*  I/O  */
-void         ssl_io_filter_init(conn_rec *, SSL *);
-void         ssl_io_filter_register(apr_pool_t *);
-long         ssl_io_data_cb(BIO *, int, const char *, int, long, long);
-
-/*  PRNG  */
-int          ssl_rand_seed(server_rec *, apr_pool_t *, ssl_rsctx_t, char *);
-
-/*  Utility Functions  */
-char        *ssl_util_vhostid(apr_pool_t *, server_rec *);
-void         ssl_util_strupper(char *);
-void         ssl_util_uuencode(char *, const char *, BOOL);
-void         ssl_util_uuencode_binary(unsigned char *, const unsigned char *, int, BOOL);
-apr_file_t  *ssl_util_ppopen(server_rec *, apr_pool_t *, const char *,
-                             const char * const *);
-void         ssl_util_ppclose(server_rec *, apr_pool_t *, apr_file_t *);
-char        *ssl_util_readfilter(server_rec *, apr_pool_t *, const char *,
-                                 const char * const *);
-BOOL         ssl_util_path_check(ssl_pathcheck_t, const char *, apr_pool_t *);
-ssl_algo_t   ssl_util_algotypeof(X509 *, EVP_PKEY *); 
-char        *ssl_util_algotypestr(ssl_algo_t);
-char        *ssl_util_ptxtsub(apr_pool_t *, const char *, const char *, char *);
-void         ssl_util_thread_setup(server_rec *, apr_pool_t *);
-
-#define APR_SHM_MAXSIZE (64 * 1024 * 1024)
-#endif /* __MOD_SSL_H__ */
diff --git a/modules/ssl/ssl_engine_config.c b/modules/ssl/ssl_engine_config.c
deleted file mode 100644
index 9c06811..0000000
--- a/modules/ssl/ssl_engine_config.c
+++ /dev/null
@@ -1,1283 +0,0 @@
-/*                      _             _
-**  _ __ ___   ___   __| |    ___ ___| |  mod_ssl
-** | '_ ` _ \ / _ \ / _` |   / __/ __| |  Apache Interface to OpenSSL
-** | | | | | | (_) | (_| |   \__ \__ \ |  www.modssl.org
-** |_| |_| |_|\___/ \__,_|___|___/___/_|  ftp.modssl.org
-**                      |_____|
-**  ssl_engine_config.c
-**  Apache Configuration Directives
-*/
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- */
-
-                                      /* ``Damned if you do,
-                                           damned if you don't.''
-                                               -- Unknown        */
-#include "mod_ssl.h"
-
-/*  _________________________________________________________________
-**
-**  Support for Global Configuration
-**  _________________________________________________________________
-*/
-
-#define SSL_MOD_CONFIG_KEY "ssl_module"
-
-SSLModConfigRec *ssl_config_global_create(server_rec *s)
-{
-    apr_pool_t *pool = s->process->pool;
-    SSLModConfigRec *mc;
-
-    apr_pool_userdata_get((void **)&mc, SSL_MOD_CONFIG_KEY,
-                          pool);
-
-    if (mc) {
-        return mc; /* reused for lifetime of the server */
-    }
-
-    /*
-     * allocate an own subpool which survives server restarts
-     */
-    mc = (SSLModConfigRec *)apr_palloc(pool, sizeof(*mc));
-    mc->pPool = pool;
-    mc->bFixed = FALSE;
-
-    /*
-     * initialize per-module configuration
-     */
-    mc->nSessionCacheMode      = SSL_SCMODE_UNSET;
-    mc->szSessionCacheDataFile = NULL;
-    mc->nSessionCacheDataSize  = 0;
-    mc->pSessionCacheDataMM    = NULL;
-    mc->pSessionCacheDataRMM   = NULL;
-    mc->tSessionCacheDataTable = NULL;
-    mc->nMutexMode             = SSL_MUTEXMODE_UNSET;
-    mc->szMutexFile            = NULL;
-    mc->pMutex                 = NULL;
-    mc->aRandSeed              = apr_array_make(pool, 4,
-                                                sizeof(ssl_randseed_t));
-    mc->tVHostKeys             = apr_hash_make(pool);
-    mc->tPrivateKey            = apr_hash_make(pool);
-    mc->tPublicCert            = apr_hash_make(pool);
-#ifdef SSL_EXPERIMENTAL_ENGINE
-    mc->szCryptoDevice         = NULL;
-#endif
-
-    memset(mc->pTmpKeys, 0, sizeof(mc->pTmpKeys));
-
-    apr_pool_userdata_set(mc, SSL_MOD_CONFIG_KEY,
-                          apr_pool_cleanup_null,
-                          pool);
-
-    return mc;
-}
-
-void ssl_config_global_fix(SSLModConfigRec *mc)
-{
-    mc->bFixed = TRUE;
-}
-
-BOOL ssl_config_global_isfixed(SSLModConfigRec *mc)
-{
-    return mc->bFixed;
-}
-
-/*  _________________________________________________________________
-**
-**  Configuration handling
-**  _________________________________________________________________
-*/
-
-/*
- *  Create per-server SSL configuration
- */
-void *ssl_config_server_create(apr_pool_t *p, server_rec *s)
-{
-    SSLSrvConfigRec *sc = apr_palloc(p, sizeof(*sc));
-
-    sc->mc                     = ssl_config_global_create(s);
-    sc->bEnabled               = UNSET;
-    sc->szCACertificatePath    = NULL;
-    sc->szCACertificateFile    = NULL;
-    sc->szCertificateChain     = NULL;
-    sc->szLogFile              = NULL;
-    sc->szCipherSuite          = NULL;
-    sc->nLogLevel              = SSL_LOG_NONE;
-    sc->nVerifyDepth           = UNSET;
-    sc->nVerifyClient          = SSL_CVERIFY_UNSET;
-    sc->nSessionCacheTimeout   = UNSET;
-    sc->nPassPhraseDialogType  = SSL_PPTYPE_UNSET;
-    sc->szPassPhraseDialogPath = NULL;
-    sc->nProtocol              = SSL_PROTOCOL_ALL;
-    sc->fileLogFile            = NULL;
-    sc->pSSLCtx                = NULL;
-    sc->szCARevocationPath     = NULL;
-    sc->szCARevocationFile     = NULL;
-    sc->pRevocationStore       = NULL;
-
-#ifdef SSL_EXPERIMENTAL_PROXY
-    sc->nProxyVerifyDepth             = UNSET;
-    sc->szProxyCACertificatePath      = NULL;
-    sc->szProxyCACertificateFile      = NULL;
-    sc->szProxyClientCertificateFile  = NULL;
-    sc->szProxyClientCertificatePath  = NULL;
-    sc->szProxyCipherSuite            = NULL;
-    sc->nProxyProtocol                = SSL_PROTOCOL_ALL & ~SSL_PROTOCOL_TLSV1;
-    sc->bProxyVerify                  = UNSET;
-    sc->pSSLProxyCtx                  = NULL;
-#endif
-
-    memset((void*)sc->szPublicCertFiles, 0, sizeof(sc->szPublicCertFiles));
-    memset((void*)sc->szPrivateKeyFiles, 0, sizeof(sc->szPrivateKeyFiles));
-    memset(sc->pPublicCert,       0, sizeof(sc->pPublicCert));
-    memset(sc->pPrivateKey,       0, sizeof(sc->pPrivateKey));
-
-    return sc;
-}
-
-/*
- *  Merge per-server SSL configurations
- */
-void *ssl_config_server_merge(apr_pool_t *p, void *basev, void *addv)
-{
-    int i;
-    SSLSrvConfigRec *base = (SSLSrvConfigRec *)basev;
-    SSLSrvConfigRec *add  = (SSLSrvConfigRec *)addv;
-    SSLSrvConfigRec *new  = (SSLSrvConfigRec *)apr_palloc(p, sizeof(*new));
-
-    cfgMerge(mc, NULL);
-    cfgMergeString(szVHostID);
-    cfgMergeBool(bEnabled);
-    cfgMergeString(szCACertificatePath);
-    cfgMergeString(szCACertificateFile);
-    cfgMergeString(szCertificateChain);
-    cfgMergeString(szLogFile);
-    cfgMergeString(szCipherSuite);
-    cfgMerge(nLogLevel, SSL_LOG_NONE);
-    cfgMergeInt(nVerifyDepth);
-    cfgMerge(nVerifyClient, SSL_CVERIFY_UNSET);
-    cfgMergeInt(nSessionCacheTimeout);
-    cfgMerge(nPassPhraseDialogType, SSL_PPTYPE_UNSET);
-    cfgMergeString(szPassPhraseDialogPath);
-    cfgMerge(nProtocol, SSL_PROTOCOL_ALL);
-    cfgMerge(fileLogFile, NULL);
-    cfgMerge(pSSLCtx, NULL);
-    cfgMerge(szCARevocationPath, NULL);
-    cfgMerge(szCARevocationFile, NULL);
-    cfgMerge(pRevocationStore, NULL);
-
-    for (i = 0; i < SSL_AIDX_MAX; i++) {
-        cfgMergeString(szPublicCertFiles[i]);
-        cfgMergeString(szPrivateKeyFiles[i]);
-        cfgMerge(pPublicCert[i], NULL);
-        cfgMerge(pPrivateKey[i], NULL);
-    }
-
-#ifdef SSL_EXPERIMENTAL_PROXY
-    cfgMergeInt(nProxyVerifyDepth);
-    cfgMergeString(szProxyCACertificatePath);
-    cfgMergeString(szProxyCACertificateFile);
-    cfgMergeString(szProxyClientCertificateFile);
-    cfgMergeString(szProxyClientCertificatePath);
-    cfgMergeString(szProxyCipherSuite);
-    cfgMerge(nProxyProtocol, (SSL_PROTOCOL_ALL & ~SSL_PROTOCOL_TLSV1));
-    cfgMergeBool(bProxyVerify);
-    cfgMerge(pSSLProxyCtx, NULL);
-#endif
-
-    return new;
-}
-
-/*
- *  Create per-directory SSL configuration
- */
-void *ssl_config_perdir_create(apr_pool_t *p, char *dir)
-{
-    SSLDirConfigRec *dc = apr_palloc(p, sizeof(*dc));
-
-    dc->bSSLRequired  = FALSE;
-    dc->aRequirement  = apr_array_make(p, 4, sizeof(ssl_require_t));
-    dc->nOptions      = SSL_OPT_NONE|SSL_OPT_RELSET;
-    dc->nOptionsAdd   = SSL_OPT_NONE;
-    dc->nOptionsDel   = SSL_OPT_NONE;
-
-    dc->szCipherSuite          = NULL;
-    dc->nVerifyClient          = SSL_CVERIFY_UNSET;
-    dc->nVerifyDepth           = UNSET;
-
-#ifdef SSL_EXPERIMENTAL_PERDIRCA
-    dc->szCACertificatePath    = NULL;
-    dc->szCACertificateFile    = NULL;
-#endif
-
-    return dc;
-}
-
-/*
- *  Merge per-directory SSL configurations
- */
-void *ssl_config_perdir_merge(apr_pool_t *p, void *basev, void *addv)
-{
-    SSLDirConfigRec *base = (SSLDirConfigRec *)basev;
-    SSLDirConfigRec *add  = (SSLDirConfigRec *)addv;
-    SSLDirConfigRec *new  = (SSLDirConfigRec *)apr_palloc(p, sizeof(*new));
-
-    cfgMerge(bSSLRequired, FALSE);
-    cfgMergeArray(aRequirement);
-
-    if (add->nOptions & SSL_OPT_RELSET) {
-        new->nOptionsAdd =
-            (base->nOptionsAdd & ~(add->nOptionsDel)) | add->nOptionsAdd;
-        new->nOptionsDel =
-            (base->nOptionsDel & ~(add->nOptionsAdd)) | add->nOptionsDel;
-        new->nOptions    =
-            (base->nOptions    & ~(new->nOptionsDel)) | new->nOptionsAdd;
-    }
-    else {
-        new->nOptions    = add->nOptions;
-        new->nOptionsAdd = add->nOptionsAdd;
-        new->nOptionsDel = add->nOptionsDel;
-    }
-
-    cfgMergeString(szCipherSuite);
-    cfgMerge(nVerifyClient, SSL_CVERIFY_UNSET);
-    cfgMergeInt(nVerifyDepth);
-
-#ifdef SSL_EXPERIMENTAL_PERDIRCA
-    cfgMergeString(szCACertificatePath);
-    cfgMergeString(szCACertificateFile);
-#endif
-
-    return new;
-}
-
-/*
- *  Configuration functions for particular directives
- */
-
-const char *ssl_cmd_SSLMutex(cmd_parms *cmd, void *ctx,
-                             const char *arg)
-{
-    const char *err;
-    SSLModConfigRec *mc = myModConfig(cmd->server);
-
-    if ((err = ap_check_cmd_context(cmd, GLOBAL_ONLY))) {
-        return err;
-    }
-
-    if (ssl_config_global_isfixed(mc)) {
-        return NULL;
-    }
-
-    if (strcEQ(arg, "none") || strcEQ(arg, "no")) {
-        mc->nMutexMode  = SSL_MUTEXMODE_NONE;
-    }
-    else if (strlen(arg) > 5 && strcEQn(arg, "file:", 5)) {
-        const char *file = ap_server_root_relative(cmd->pool, arg+5);
-        if (!file) {
-            return apr_pstrcat(cmd->pool, "Invalid SSLMutex file: path ", 
-                               arg+5, NULL);
-        }
-        mc->nMutexMode  = SSL_MUTEXMODE_USED;
-        mc->szMutexFile =
-            (char *)apr_psprintf(mc->pPool, "%s.%lu",
-                                 file, (unsigned long)getpid());
-    }
-    else if (strcEQ(arg, "sem") || strcEQ(arg, "yes")) {
-        mc->nMutexMode  = SSL_MUTEXMODE_USED;
-        mc->szMutexFile = NULL; /* APR determines temporary filename */
-    }
-    else {
-        return apr_pstrcat(cmd->pool, "Invalid SSLMutex argument ", 
-                           arg, NULL);
-    }
-
-    return NULL;
-}
-
-const char *ssl_cmd_SSLPassPhraseDialog(cmd_parms *cmd, void *ctx,
-                                        const char *arg)
-{
-    SSLSrvConfigRec *sc = mySrvConfig(cmd->server);
-    const char *err;
-    int arglen = strlen(arg);
-
-    if ((err = ap_check_cmd_context(cmd, GLOBAL_ONLY))) {
-        return err;
-    }
-
-    if (strcEQ(arg, "builtin")) {
-        sc->nPassPhraseDialogType  = SSL_PPTYPE_BUILTIN;
-        sc->szPassPhraseDialogPath = NULL;
-    }
-    else if ((arglen > 5) && strEQn(arg, "exec:", 5)) {
-        sc->nPassPhraseDialogType  = SSL_PPTYPE_FILTER;
-        /* ### This is broken, exec: may contain args, no? */
-        sc->szPassPhraseDialogPath =
-            ap_server_root_relative(cmd->pool, arg+5);
-        if (!sc->szPassPhraseDialogPath) {
-            return apr_pstrcat(cmd->pool,
-                               "Invalid SSLPassPhraseDialog exec: path ",
-                               arg+5, NULL);
-        }
-        if (!ssl_util_path_check(SSL_PCM_EXISTS,
-                                 sc->szPassPhraseDialogPath,
-                                 cmd->pool))
-        {
-            return apr_pstrcat(cmd->pool,
-                               "SSLPassPhraseDialog: file '",
-                               sc->szPassPhraseDialogPath,
-                               "' does not exist", NULL);
-        }
-
-    }
-    else if ((arglen > 1) && (arg[0] == '|')) {
-        sc->nPassPhraseDialogType  = SSL_PPTYPE_PIPE;
-        sc->szPassPhraseDialogPath = arg + 1;
-    }
-    else {
-        return "SSLPassPhraseDialog: Invalid argument";
-    }
-
-    return NULL;
-}
-
-#ifdef SSL_EXPERIMENTAL_ENGINE
-const char *ssl_cmd_SSLCryptoDevice(cmd_parms *cmd, void *ctx,
-                                    const char *arg)
-{
-    SSLModConfigRec *mc = myModConfig(cmd->server);
-    const char *err;
-    ENGINE *e;
-#if SSL_LIBRARY_VERSION >= 0x00907000
-    static int loaded_engines = FALSE;
-
-    /* early loading to make sure the engines are already 
-       available for ENGINE_by_id() above... */
-    if (!loaded_engines) {
-        ENGINE_load_builtin_engines();
-        loaded_engines = TRUE;
-    }
-#endif
-    if ((err = ap_check_cmd_context(cmd, GLOBAL_ONLY))) {
-        return err;
-    }
-
-    if (strcEQ(arg, "builtin")) {
-        mc->szCryptoDevice = NULL;
-    }
-    else if ((e = ENGINE_by_id(arg))) {
-        mc->szCryptoDevice = arg;
-        ENGINE_free(e);
-    }
-    else {
-        return "SSLCryptoDevice: Invalid argument";
-    }
-
-    return NULL;
-}
-#endif
-
-const char *ssl_cmd_SSLRandomSeed(cmd_parms *cmd, void *ctx,
-                                  const char *arg1, 
-                                  const char *arg2,
-                                  const char *arg3)
-{
-    SSLModConfigRec *mc = myModConfig(cmd->server);
-    const char *err;
-    ssl_randseed_t *seed;
-    int arg2len = strlen(arg2);
-
-    if ((err = ap_check_cmd_context(cmd, GLOBAL_ONLY))) {
-        return err;
-    }
-
-    if (ssl_config_global_isfixed(mc)) {
-        return NULL;
-    }
-
-    seed = apr_array_push(mc->aRandSeed);
-
-    if (strcEQ(arg1, "startup")) {
-        seed->nCtx = SSL_RSCTX_STARTUP;
-    }
-    else if (strcEQ(arg1, "connect")) {
-        seed->nCtx = SSL_RSCTX_CONNECT;
-    }
-    else {
-        return apr_pstrcat(cmd->pool, "SSLRandomSeed: "
-                           "invalid context: `", arg1, "'",
-                           NULL);
-    }
-
-    if ((arg2len > 5) && strEQn(arg2, "file:", 5)) {
-        seed->nSrc   = SSL_RSSRC_FILE;
-        seed->cpPath = ap_server_root_relative(mc->pPool, arg2+5);
-    }
-    else if ((arg2len > 5) && strEQn(arg2, "exec:", 5)) {
-        seed->nSrc   = SSL_RSSRC_EXEC;
-        seed->cpPath = ap_server_root_relative(mc->pPool, arg2+5);
-    }
-    else if ((arg2len > 4) && strEQn(arg2, "egd:", 4)) {
-        seed->nSrc   = SSL_RSSRC_EGD;
-        seed->cpPath = ap_server_root_relative(mc->pPool, arg2+4);
-    }
-    else if (strcEQ(arg2, "builtin")) {
-        seed->nSrc   = SSL_RSSRC_BUILTIN;
-        seed->cpPath = NULL;
-    }
-    else {
-        seed->nSrc   = SSL_RSSRC_FILE;
-        seed->cpPath = ap_server_root_relative(mc->pPool, arg2);
-    }
-
-    if (seed->nSrc != SSL_RSSRC_BUILTIN) {
-        if (!seed->cpPath) {
-            return apr_pstrcat(cmd->pool,
-                               "Invalid SSLRandomSeed path ",
-                               arg2, NULL);
-        }
-        if (!ssl_util_path_check(SSL_PCM_EXISTS, seed->cpPath, cmd->pool)) {
-            return apr_pstrcat(cmd->pool,
-                               "SSLRandomSeed: source path '",
-                               seed->cpPath, "' does not exist", NULL);
-        }
-    }
-
-    if (!arg3) {
-        seed->nBytes = 0; /* read whole file */
-    }
-    else {
-        if (seed->nSrc == SSL_RSSRC_BUILTIN) {
-            return "SSLRandomSeed: byte specification not "
-                   "allowed for builtin seed source";
-        }
-
-        seed->nBytes = atoi(arg3);
-
-        if (seed->nBytes < 0) {
-            return "SSLRandomSeed: invalid number of bytes specified";
-        }
-    }
-
-    return NULL;
-}
-
-const char *ssl_cmd_SSLEngine(cmd_parms *cmd, void *ctx, int flag)
-{
-    SSLSrvConfigRec *sc = mySrvConfig(cmd->server);
-
-    sc->bEnabled = flag ? TRUE : FALSE;
-
-    return NULL;
-}
-
-const char *ssl_cmd_SSLCipherSuite(cmd_parms *cmd, void *ctx,
-                                   const char *arg)
-{
-    SSLSrvConfigRec *sc = mySrvConfig(cmd->server);
-    SSLDirConfigRec *dc = (SSLDirConfigRec *)ctx;
-
-    if (!(cmd->path || dc)) {
-        sc->szCipherSuite = arg;
-    }
-    else {
-        dc->szCipherSuite = (char *)arg;
-    }
-
-    return NULL;
-}
-
-#define SSL_FLAGS_CHECK_FILE \
-    (SSL_PCM_EXISTS|SSL_PCM_ISREG|SSL_PCM_ISNONZERO)
-
-#define SSL_FLAGS_CHECK_DIR \
-    (SSL_PCM_EXISTS|SSL_PCM_ISDIR)
-
-static const char *ssl_cmd_check_file(cmd_parms *parms,
-                                      const char **file)
-{
-    const char *filepath = ap_server_root_relative(parms->pool, *file);
-
-    if (!filepath) {
-        return apr_pstrcat(parms->pool, parms->cmd->name,
-                           ": Invalid file path ", *file, NULL);
-    }
-    *file = filepath;
-
-    if (ssl_util_path_check(SSL_FLAGS_CHECK_FILE, *file, parms->pool)) {
-        return NULL;
-    }
-
-    return apr_pstrcat(parms->pool, parms->cmd->name,
-                       ": file '", *file, 
-                       "' does not exist or is empty", NULL);
-
-}
-
-static const char *ssl_cmd_check_dir(cmd_parms *parms,
-                                     const char **dir)
-{
-    const char *dirpath = ap_server_root_relative(parms->pool, *dir);
-
-    if (!dirpath) {
-        return apr_pstrcat(parms->pool, parms->cmd->name,
-                           ": Invalid dir path ", *dir, NULL);
-    }
-    *dir = dirpath;
-
-    if (ssl_util_path_check(SSL_FLAGS_CHECK_DIR, *dir, parms->pool)) {
-        return NULL;
-    }
-
-    return apr_pstrcat(parms->pool, parms->cmd->name,
-                       ": directory '", *dir, 
-                       "' does not exist", NULL);
-
-}
-
-#define SSL_AIDX_CERTS 1
-#define SSL_AIDX_KEYS  2
-
-static const char *ssl_cmd_check_aidx_max(cmd_parms *parms,
-                                          const char *arg,
-                                          int idx)
-{
-    SSLSrvConfigRec *sc = mySrvConfig(parms->server);
-    const char *err, *desc, **files;
-    int i;
-
-    if ((err = ssl_cmd_check_file(parms, &arg))) {
-        return err;
-    }
-
-    switch (idx) {
-      case SSL_AIDX_CERTS:
-        desc = "certificates";
-        files = sc->szPublicCertFiles;
-        break;
-      case SSL_AIDX_KEYS:
-        desc = "private keys";
-        files = sc->szPrivateKeyFiles;
-        break;
-    }
-
-    for (i = 0; i < SSL_AIDX_MAX; i++) {
-        if (!files[i]) {
-            files[i] = arg;
-            return NULL;
-        }
-    }
-
-    return apr_psprintf(parms->pool,
-                        "%s: only up to %d "
-                        "different %s per virtual host allowed", 
-                         parms->cmd->name, SSL_AIDX_MAX, desc);
-}
-
-const char *ssl_cmd_SSLCertificateFile(cmd_parms *cmd, void *ctx,
-                                       const char *arg)
-{
-
-    const char *err;
-
-    if ((err = ssl_cmd_check_aidx_max(cmd, arg, SSL_AIDX_CERTS))) {
-        return err;
-    }
-
-    return NULL;
-}
-
-const char *ssl_cmd_SSLCertificateKeyFile(cmd_parms *cmd, void *ctx,
-                                          const char *arg)
-{
-    const char *err;
-
-    if ((err = ssl_cmd_check_aidx_max(cmd, arg, SSL_AIDX_KEYS))) {
-        return err;
-    }
-
-    return NULL;
-}
-
-const char *ssl_cmd_SSLCertificateChainFile(cmd_parms *cmd, void *ctx,
-                                            const char *arg)
-{
-    SSLSrvConfigRec *sc = mySrvConfig(cmd->server);
-    const char *err;
-
-    if ((err = ssl_cmd_check_file(cmd, &arg))) {
-        return err;
-    }
-
-    sc->szCertificateChain = arg;
-
-    return NULL;
-}
-
-const char *ssl_cmd_SSLCACertificatePath(cmd_parms *cmd, void *ctx,
-                                         const char *arg)
-{
-#ifdef SSL_EXPERIMENTAL_PERDIRCA
-    SSLDirConfigRec *dc = (SSLDirConfigRec *)ctx;
-#endif
-    SSLSrvConfigRec *sc = mySrvConfig(cmd->server);
-    const char *err;
-
-    if ((err = ssl_cmd_check_dir(cmd, &arg))) {
-        return err;
-    }
-
-#ifdef SSL_EXPERIMENTAL_PERDIRCA
-    if (!(cmd->path || dc)) {
-        sc->szCACertificatePath = arg;
-    }
-    else {
-        dc->szCACertificatePath = arg;
-    }
-#else
-    sc->szCACertificatePath = arg;
-#endif
-
-    return NULL;
-}
-
-const char *ssl_cmd_SSLCACertificateFile(cmd_parms *cmd, void *ctx,
-                                         const char *arg)
-{
-#ifdef SSL_EXPERIMENTAL_PERDIRCA
-    SSLDirConfigRec *dc = (SSLDirConfigRec *)ctx;
-#endif
-    SSLSrvConfigRec *sc = mySrvConfig(cmd->server);
-    const char *err;
-
-    if ((err = ssl_cmd_check_file(cmd, &arg))) {
-        return err;
-    }
-
-#ifdef SSL_EXPERIMENTAL_PERDIRCA
-    if (!(cmd->path || dc)) {
-        sc->szCACertificateFile = arg;
-    }
-    else {
-        dc->szCACertificateFile = arg;
-    }
-#else
-    sc->szCACertificateFile = arg;
-#endif
-
-    return NULL;
-}
-
-const char *ssl_cmd_SSLCARevocationPath(cmd_parms *cmd, void *ctx,
-                                        const char *arg)
-{
-    SSLSrvConfigRec *sc = mySrvConfig(cmd->server);
-    const char *err;
-
-    if ((err = ssl_cmd_check_dir(cmd, &arg))) {
-        return err;
-    }
-
-    sc->szCARevocationPath = arg;
-
-    return NULL;
-}
-
-const char *ssl_cmd_SSLCARevocationFile(cmd_parms *cmd, void *ctx,
-                                        const char *arg)
-{
-    SSLSrvConfigRec *sc = mySrvConfig(cmd->server);
-    const char *err;
-
-    if ((err = ssl_cmd_check_file(cmd, &arg))) {
-        return err;
-    }
-
-    sc->szCARevocationFile = arg;
-
-    return NULL;
-}
-
-static const char *ssl_cmd_verify_parse(cmd_parms *parms,
-                                        const char *arg,
-                                        ssl_verify_t *id)
-{
-    if (strcEQ(arg, "none") || strcEQ(arg, "off")) {
-        *id = SSL_CVERIFY_NONE;
-    }
-    else if (strcEQ(arg, "optional")) {
-        *id = SSL_CVERIFY_OPTIONAL;
-    }
-    else if (strcEQ(arg, "require") || strcEQ(arg, "on")) {
-        *id = SSL_CVERIFY_REQUIRE;
-    }
-    else if (strcEQ(arg, "optional_no_ca")) {
-        *id = SSL_CVERIFY_OPTIONAL_NO_CA;
-    }
-    else {
-        return apr_pstrcat(parms->temp_pool, parms->cmd->name,
-                           ": Invalid argument '", arg, "'",
-                           NULL);
-    }
-
-    return NULL;
-}
-
-const char *ssl_cmd_SSLVerifyClient(cmd_parms *cmd, void *ctx,
-                                    const char *arg)
-{
-    SSLDirConfigRec *dc = (SSLDirConfigRec *)ctx;
-    SSLSrvConfigRec *sc = mySrvConfig(cmd->server);
-    ssl_verify_t id;
-    const char *err;
-
-    if ((err = ssl_cmd_verify_parse(cmd, arg, &id))) {
-        return err;
-    }
-    
-    if (!(cmd->path || dc)) {
-        sc->nVerifyClient = id;
-    }
-    else {
-        dc->nVerifyClient = id;
-    }
-
-    return NULL;
-}
-
-static const char *ssl_cmd_verify_depth_parse(cmd_parms *parms,
-                                              const char *arg,
-                                              int *depth)
-{
-    if ((*depth = atoi(arg)) >= 0) {
-        return NULL;
-    }
-
-    return apr_pstrcat(parms->temp_pool, parms->cmd->name,
-                       ": Invalid argument '", arg, "'",
-                       NULL);
-}
-
-const char *ssl_cmd_SSLVerifyDepth(cmd_parms *cmd, void *ctx,
-                                   const char *arg)
-{
-    SSLDirConfigRec *dc = (SSLDirConfigRec *)ctx;
-    SSLSrvConfigRec *sc = mySrvConfig(cmd->server);
-    int depth;
-    const char *err;
-
-    if ((err = ssl_cmd_verify_depth_parse(cmd, arg, &depth))) {
-        return err;
-    }
-
-    if (!(cmd->path || dc)) {
-        sc->nVerifyDepth = depth;
-    }
-    else {
-        dc->nVerifyDepth = depth;
-    }
-
-    return NULL;
-}
-
-#define MODSSL_NO_SHARED_MEMORY_ERROR \
-    "SSLSessionCache: shared memory cache not useable on this platform"
-
-const char *ssl_cmd_SSLSessionCache(cmd_parms *cmd, void *ctx,
-                                    const char *arg)
-{
-    SSLModConfigRec *mc = myModConfig(cmd->server);
-    const char *err, *colon;
-    char *cp, *cp2;
-    int maxsize;
-    int arglen = strlen(arg);
-
-    if ((err = ap_check_cmd_context(cmd, GLOBAL_ONLY))) {
-        return err;
-    }
-
-    if (ssl_config_global_isfixed(mc)) {
-        return NULL;
-    }
-
-    if (strcEQ(arg, "none")) {
-        mc->nSessionCacheMode      = SSL_SCMODE_NONE;
-        mc->szSessionCacheDataFile = NULL;
-    }
-    else if ((arglen > 4) && strcEQn(arg, "dbm:", 4)) {
-        mc->nSessionCacheMode      = SSL_SCMODE_DBM;
-        mc->szSessionCacheDataFile = ap_server_root_relative(mc->pPool, arg+4);
-        if (!mc->szSessionCacheDataFile) {
-            return apr_psprintf(cmd->pool,
-                                "SSLSessionCache: Invalid cache file path ",
-                                arg+4);
-        }
-    }
-    else if ((arglen > 6) && strcEQn(arg, "shmht:", 6)) {
-#if !APR_HAS_SHARED_MEMORY
-        return MODSSL_NO_SHARED_MEMORY_ERROR;
-#endif
-        mc->nSessionCacheMode = SSL_SCMODE_SHMHT;
-        colon = ap_strchr_c(arg, ':');
-        mc->szSessionCacheDataFile =
-            ap_server_root_relative(mc->pPool, colon+1);
-        if (!mc->szSessionCacheDataFile) {
-            return apr_psprintf(cmd->pool,
-                                "SSLSessionCache: Invalid cache file path ",
-                                colon+1);
-        }
-        mc->tSessionCacheDataTable = NULL;
-        mc->nSessionCacheDataSize  = 1024*512; /* 512KB */
-
-        if ((cp = strchr(mc->szSessionCacheDataFile, '('))) {
-            *cp++ = NUL;
-
-            if (!(cp2 = strchr(cp, ')'))) {
-                return "SSLSessionCache: Invalid argument: "
-                       "no closing parenthesis";
-            }
-
-            *cp2 = NUL;
-
-            mc->nSessionCacheDataSize = atoi(cp);
-
-            if (mc->nSessionCacheDataSize <= 8192) {
-                return "SSLSessionCache: Invalid argument: "
-                       "size has to be >= 8192 bytes";
-            }
-
-            if (mc->nSessionCacheDataSize >= APR_SHM_MAXSIZE) {
-                return apr_psprintf(cmd->pool,
-                                    "SSLSessionCache: Invalid argument: "
-                                    "size has to be < %d bytes on this "
-                                    "platform", maxsize);
-            }
-        }
-    }
-    else if (((arglen > 4) && strcEQn(arg, "shm:", 4)) ||
-             ((arglen > 6) && strcEQn(arg, "shmcb:", 6))) {
-#if !APR_HAS_SHARED_MEMORY
-        return MODSSL_NO_SHARED_MEMORY_ERROR;
-#endif
-        mc->nSessionCacheMode      = SSL_SCMODE_SHMCB;
-        colon = ap_strchr_c(arg, ':');
-        mc->szSessionCacheDataFile =
-            ap_server_root_relative(mc->pPool, colon+1);
-        if (!mc->szSessionCacheDataFile) {
-            return apr_psprintf(cmd->pool,
-                                "SSLSessionCache: Invalid cache file path ",
-                                colon+1);
-        }
-        mc->tSessionCacheDataTable = NULL;
-        mc->nSessionCacheDataSize  = 1024*512; /* 512KB */
-
-        if ((cp = strchr(mc->szSessionCacheDataFile, '('))) {
-            *cp++ = NUL;
-
-            if (!(cp2 = strchr(cp, ')'))) {
-                return "SSLSessionCache: Invalid argument: "
-                       "no closing parenthesis";
-            }
-
-            *cp2 = NUL;
-
-            mc->nSessionCacheDataSize = atoi(cp);
-
-            if (mc->nSessionCacheDataSize <= 8192) {
-                return "SSLSessionCache: Invalid argument: "
-                       "size has to be >= 8192 bytes";
-
-            }
-
-            if (mc->nSessionCacheDataSize >= APR_SHM_MAXSIZE) {
-                return apr_psprintf(cmd->pool,
-                                    "SSLSessionCache: Invalid argument: "
-                                    "size has to be < %d bytes on this "
-                                    "platform", maxsize);
-
-            }
-        }
-	else {
-            return "SSLSessionCache: Invalid argument";
-        }
-    }
-
-    return NULL;
-}
-
-const char *ssl_cmd_SSLSessionCacheTimeout(cmd_parms *cmd, void *ctx,
-                                           const char *arg)
-{
-    SSLSrvConfigRec *sc = mySrvConfig(cmd->server);
-
-    sc->nSessionCacheTimeout = atoi(arg);
-
-    if (sc->nSessionCacheTimeout < 0) {
-        return "SSLSessionCacheTimeout: Invalid argument";
-    }
-
-    return NULL;
-}
-
-#define SSL_FLAGS_LOG_CONTEXT \
-    (NOT_IN_LIMIT|NOT_IN_DIRECTORY|NOT_IN_LOCATION|NOT_IN_FILES)
-
-const char *ssl_cmd_SSLLog(cmd_parms *cmd, void *ctx,
-                           const char *arg)
-{
-    SSLSrvConfigRec *sc = mySrvConfig(cmd->server);
-    const char *err;
-
-    if ((err = ap_check_cmd_context(cmd, SSL_FLAGS_LOG_CONTEXT))) {
-        return err;
-    }
-
-    sc->szLogFile = arg;
-
-    return NULL;
-}
-
-const char *ssl_cmd_SSLLogLevel(cmd_parms *cmd, void *ctx,
-                                const char *level)
-{
-    SSLSrvConfigRec *sc = mySrvConfig(cmd->server);
-    const char *err;
-
-    if ((err = ap_check_cmd_context(cmd, SSL_FLAGS_LOG_CONTEXT))) {
-        return err;
-    }
-
-    if (strcEQ(level, "none")) {
-        sc->nLogLevel = SSL_LOG_NONE;
-    }
-    else if (strcEQ(level, "error")) {
-        sc->nLogLevel = SSL_LOG_ERROR;
-    }
-    else if (strcEQ(level, "warn")) {
-        sc->nLogLevel = SSL_LOG_WARN;
-    }
-    else if (strcEQ(level, "info")) {
-        sc->nLogLevel = SSL_LOG_INFO;
-    }
-    else if (strcEQ(level, "trace")) {
-        sc->nLogLevel = SSL_LOG_TRACE;
-    }
-    else if (strcEQ(level, "debug")) {
-        sc->nLogLevel = SSL_LOG_DEBUG;
-    }
-    else {
-        return "SSLLogLevel: Invalid argument";
-    }
-
-    return NULL;
-}
-
-const char *ssl_cmd_SSLOptions(cmd_parms *cmd, void *ctx,
-                               const char *arg)
-{
-    SSLDirConfigRec *dc = (SSLDirConfigRec *)ctx;
-    ssl_opt_t opt;
-    int first = TRUE;
-    char action, *w;
-
-    while (*arg) {
-        w = ap_getword_conf(cmd->pool, &arg);
-        action = NUL;
-
-        if ((*w == '+') || (*w == '-')) {
-            action = *(w++);
-        }
-        else if (first) {
-            dc->nOptions = SSL_OPT_NONE;
-            first = FALSE;
-        }
-
-        if (strcEQ(w, "StdEnvVars")) {
-            opt = SSL_OPT_STDENVVARS;
-        }
-        else if (strcEQ(w, "CompatEnvVars")) {
-            opt = SSL_OPT_COMPATENVVARS;
-        }
-        else if (strcEQ(w, "ExportCertData")) {
-            opt = SSL_OPT_EXPORTCERTDATA;
-        }
-        else if (strcEQ(w, "FakeBasicAuth")) {
-            opt = SSL_OPT_FAKEBASICAUTH;
-        }
-        else if (strcEQ(w, "StrictRequire")) {
-            opt = SSL_OPT_STRICTREQUIRE;
-        }
-        else if (strcEQ(w, "OptRenegotiate")) {
-            opt = SSL_OPT_OPTRENEGOTIATE;
-        }
-        else {
-            return apr_pstrcat(cmd->pool,
-                               "SSLOptions: Illegal option '", w, "'",
-                               NULL);
-        }
-
-        if (action == '-') {
-            dc->nOptionsAdd &= ~opt;
-            dc->nOptionsDel |=  opt;
-            dc->nOptions    &= ~opt;
-        }
-        else if (action == '+') {
-            dc->nOptionsAdd |=  opt;
-            dc->nOptionsDel &= ~opt;
-            dc->nOptions    |=  opt;
-        }
-        else {
-            dc->nOptions    = opt;
-            dc->nOptionsAdd = opt;
-            dc->nOptionsDel = SSL_OPT_NONE;
-        }
-    }
-
-    return NULL;
-}
-
-const char *ssl_cmd_SSLRequireSSL(cmd_parms *cmd, void *ctx)
-{
-    SSLDirConfigRec *dc = (SSLDirConfigRec *)ctx;
-
-    dc->bSSLRequired = TRUE;
-
-    return NULL;
-}
-
-const char *ssl_cmd_SSLRequire(cmd_parms *cmd, void *ctx,
-                               const char *arg)
-{
-    SSLDirConfigRec *dc = (SSLDirConfigRec *)ctx;
-    ssl_expr *expr;
-    ssl_require_t *require;
-
-    if (!(expr = ssl_expr_comp(cmd->pool, (char *)arg))) {
-        return apr_pstrcat(cmd->pool, "SSLRequire: ",
-                           ssl_expr_get_error(), NULL);
-    }
-
-    require = apr_array_push(dc->aRequirement);
-    require->cpExpr = apr_pstrdup(cmd->pool, arg);
-    require->mpExpr = expr;
-
-    return NULL;
-}
-
-static const char *ssl_cmd_protocol_parse(cmd_parms *parms,
-                                          const char *arg,
-                                          ssl_proto_t *options)
-{
-    ssl_proto_t thisopt;
-
-    *options = SSL_PROTOCOL_NONE;
-
-    while (*arg) {
-        char *w = ap_getword_conf(parms->temp_pool, &arg);
-        char action = '\0';
-
-        if ((*w == '+') || (*w == '-')) {
-            action = *(w++);
-        }
-
-        if (strcEQ(w, "SSLv2")) {
-            thisopt = SSL_PROTOCOL_SSLV2;
-        }
-        else if (strcEQ(w, "SSLv3")) {
-            thisopt = SSL_PROTOCOL_SSLV3;
-        }
-        else if (strcEQ(w, "TLSv1")) {
-            thisopt = SSL_PROTOCOL_TLSV1;
-        }
-        else if (strcEQ(w, "all")) {
-            thisopt = SSL_PROTOCOL_ALL;
-        }
-        else {
-            return apr_pstrcat(parms->temp_pool,
-                               parms->cmd->name,
-                               ": Illegal protocol '",
-                               w, "'", NULL);
-        }
-
-        if (action == '-') {
-            *options &= ~thisopt;
-        }
-        else if (action == '+') {
-            *options |= thisopt;
-        }
-        else {
-            *options = thisopt;
-        }
-    }
-
-    return NULL;
-}
-
-const char *ssl_cmd_SSLProtocol(cmd_parms *cmd, void *ctx,
-                                const char *opt)
-{
-    SSLSrvConfigRec *sc = mySrvConfig(cmd->server);
-
-    return ssl_cmd_protocol_parse(cmd, opt, &sc->nProtocol);
-}
-
-#ifdef SSL_EXPERIMENTAL_PROXY
-
-const char *ssl_cmd_SSLProxyProtocol(cmd_parms *cmd, char *struct_ptr,
-                                     const char *opt)
-{
-    SSLSrvConfigRec *sc = mySrvConfig(cmd->server);
-
-    return ssl_cmd_protocol_parse(cmd, opt, &sc->nProxyProtocol);
-}
-
-const char *ssl_cmd_SSLProxyCipherSuite(cmd_parms *cmd, char *struct_ptr,
-                                        char *arg)
-{
-    SSLSrvConfigRec *sc = mySrvConfig(cmd->server);
-
-    sc->szProxyCipherSuite = arg;
-
-    return NULL;
-}
-
-const char *ssl_cmd_SSLProxyVerify(cmd_parms *cmd, char *struct_ptr,
-                                   int flag)
-{
-    SSLSrvConfigRec *sc = mySrvConfig(cmd->server);
-
-    sc->bProxyVerify = flag ? TRUE : FALSE;
-
-    return NULL;
-}
-
-const char *ssl_cmd_SSLProxyVerifyDepth(cmd_parms *cmd, char *struct_ptr,
-                                        char *arg)
-{
-    SSLSrvConfigRec *sc = mySrvConfig(cmd->server);
-    int depth;
-    const char *err;
-
-    if ((err = ssl_cmd_verify_depth_parse(cmd, arg, &depth))) {
-        return err;
-    }
-
-    sc->nProxyVerifyDepth = depth;
-
-    return NULL;
-}
-
-const char *ssl_cmd_SSLProxyCACertificateFile(cmd_parms *cmd,
-                                              char *struct_ptr,
-                                              char *arg)
-{
-    SSLSrvConfigRec *sc = mySrvConfig(cmd->server);
-    const char *err;
-
-    if ((err = ssl_cmd_check_file(cmd, &arg))) {
-        return err;
-    }
-
-    sc->szProxyCACertificateFile = arg;
-
-    return NULL;
-}
-
-const char *ssl_cmd_SSLProxyCACertificatePath(cmd_parms *cmd,
-                                              char *struct_ptr,
-                                              char *arg)
-{
-    SSLSrvConfigRec *sc = mySrvConfig(cmd->server);
-    const char *err;
-
-    if ((err = ssl_cmd_check_file(cmd, &arg))) {
-        return err;
-    }
-
-    sc->szProxyCACertificatePath = arg;
-
-    return NULL;
-}
-
-const char *ssl_cmd_SSLProxyMachineCertificateFile(cmd_parms *cmd,
-                                                   char *struct_ptr,
-                                                   char *arg)
-{
-    SSLSrvConfigRec *sc = mySrvConfig(cmd->server);
-    const char *err;
-
-    if ((err = ssl_cmd_check_file(cmd, &arg))) {
-        return err;
-    }
-
-    sc->szProxyClientCertificateFile = arg;
-
-    return NULL;
-}
-
-const char *ssl_cmd_SSLProxyMachineCertificatePath(cmd_parms *cmd,
-                                                   char *struct_ptr,
-                                                   char *arg)
-{
-    SSLSrvConfigRec *sc = mySrvConfig(cmd->server);
-    const char *err;
-
-    if ((err = ssl_cmd_check_dir(cmd, &arg))) {
-        return err;
-    }
-
-    sc->szProxyClientCertificatePath = arg;
-
-    return NULL;
-}
-
-#endif /* SSL_EXPERIMENTAL_PROXY */
-
diff --git a/modules/ssl/ssl_engine_dh.c b/modules/ssl/ssl_engine_dh.c
deleted file mode 100644
index 4eaae84..0000000
--- a/modules/ssl/ssl_engine_dh.c
+++ /dev/null
@@ -1,253 +0,0 @@
-#if 0
-=pod
-#endif
-/*                      _             _
-**  _ __ ___   ___   __| |    ___ ___| |  mod_ssl
-** | '_ ` _ \ / _ \ / _` |   / __/ __| |  Apache Interface to OpenSSL
-** | | | | | | (_) | (_| |   \__ \__ \ |  www.modssl.org
-** |_| |_| |_|\___/ \__,_|___|___/___/_|  ftp.modssl.org
-**                      |_____|
-** ssl_engine_dh.c 
-** Diffie-Hellman Built-in Temporary Parameters
-*/
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- */
-
-#include "mod_ssl.h"
-
-/* ----BEGIN GENERATED SECTION-------- */
-
-/*
-** Diffie-Hellman-Parameters: (512 bit)
-**     prime:
-**         00:d4:bc:d5:24:06:f6:9b:35:99:4b:88:de:5d:b8:
-**         96:82:c8:15:7f:62:d8:f3:36:33:ee:57:72:f1:1f:
-**         05:ab:22:d6:b5:14:5b:9f:24:1e:5a:cc:31:ff:09:
-**         0a:4b:c7:11:48:97:6f:76:79:50:94:e7:1e:79:03:
-**         52:9f:5a:82:4b
-**     generator: 2 (0x2)
-** Diffie-Hellman-Parameters: (1024 bit)
-**     prime:
-**         00:e6:96:9d:3d:49:5b:e3:2c:7c:f1:80:c3:bd:d4:
-**         79:8e:91:b7:81:82:51:bb:05:5e:2a:20:64:90:4a:
-**         79:a7:70:fa:15:a2:59:cb:d5:23:a6:a6:ef:09:c4:
-**         30:48:d5:a2:2f:97:1f:3c:20:12:9b:48:00:0e:6e:
-**         dd:06:1c:bc:05:3e:37:1d:79:4e:53:27:df:61:1e:
-**         bb:be:1b:ac:9b:5c:60:44:cf:02:3d:76:e0:5e:ea:
-**         9b:ad:99:1b:13:a6:3c:97:4e:9e:f1:83:9e:b5:db:
-**         12:51:36:f7:26:2e:56:a8:87:15:38:df:d8:23:c6:
-**         50:50:85:e2:1f:0d:d5:c8:6b
-**     generator: 2 (0x2)
-*/
-
-static unsigned char dh512_p[] =
-{
-    0xD4, 0xBC, 0xD5, 0x24, 0x06, 0xF6, 0x9B, 0x35, 0x99, 0x4B, 0x88, 0xDE,
-    0x5D, 0xB8, 0x96, 0x82, 0xC8, 0x15, 0x7F, 0x62, 0xD8, 0xF3, 0x36, 0x33,
-    0xEE, 0x57, 0x72, 0xF1, 0x1F, 0x05, 0xAB, 0x22, 0xD6, 0xB5, 0x14, 0x5B,
-    0x9F, 0x24, 0x1E, 0x5A, 0xCC, 0x31, 0xFF, 0x09, 0x0A, 0x4B, 0xC7, 0x11,
-    0x48, 0x97, 0x6F, 0x76, 0x79, 0x50, 0x94, 0xE7, 0x1E, 0x79, 0x03, 0x52,
-    0x9F, 0x5A, 0x82, 0x4B,
-};
-static unsigned char dh512_g[] =
-{
-    0x02,
-};
-
-static DH *get_dh512(void)
-{
-    DH *dh;
-
-    if ((dh = DH_new()) == NULL)
-        return (NULL);
-    dh->p = BN_bin2bn(dh512_p, sizeof(dh512_p), NULL);
-    dh->g = BN_bin2bn(dh512_g, sizeof(dh512_g), NULL);
-    if ((dh->p == NULL) || (dh->g == NULL))
-        return (NULL);
-    return (dh);
-}
-static unsigned char dh1024_p[] =
-{
-    0xE6, 0x96, 0x9D, 0x3D, 0x49, 0x5B, 0xE3, 0x2C, 0x7C, 0xF1, 0x80, 0xC3,
-    0xBD, 0xD4, 0x79, 0x8E, 0x91, 0xB7, 0x81, 0x82, 0x51, 0xBB, 0x05, 0x5E,
-    0x2A, 0x20, 0x64, 0x90, 0x4A, 0x79, 0xA7, 0x70, 0xFA, 0x15, 0xA2, 0x59,
-    0xCB, 0xD5, 0x23, 0xA6, 0xA6, 0xEF, 0x09, 0xC4, 0x30, 0x48, 0xD5, 0xA2,
-    0x2F, 0x97, 0x1F, 0x3C, 0x20, 0x12, 0x9B, 0x48, 0x00, 0x0E, 0x6E, 0xDD,
-    0x06, 0x1C, 0xBC, 0x05, 0x3E, 0x37, 0x1D, 0x79, 0x4E, 0x53, 0x27, 0xDF,
-    0x61, 0x1E, 0xBB, 0xBE, 0x1B, 0xAC, 0x9B, 0x5C, 0x60, 0x44, 0xCF, 0x02,
-    0x3D, 0x76, 0xE0, 0x5E, 0xEA, 0x9B, 0xAD, 0x99, 0x1B, 0x13, 0xA6, 0x3C,
-    0x97, 0x4E, 0x9E, 0xF1, 0x83, 0x9E, 0xB5, 0xDB, 0x12, 0x51, 0x36, 0xF7,
-    0x26, 0x2E, 0x56, 0xA8, 0x87, 0x15, 0x38, 0xDF, 0xD8, 0x23, 0xC6, 0x50,
-    0x50, 0x85, 0xE2, 0x1F, 0x0D, 0xD5, 0xC8, 0x6B,
-};
-static unsigned char dh1024_g[] =
-{
-    0x02,
-};
-
-static DH *get_dh1024(void)
-{
-    DH *dh;
-
-    if ((dh = DH_new()) == NULL)
-        return (NULL);
-    dh->p = BN_bin2bn(dh1024_p, sizeof(dh1024_p), NULL);
-    dh->g = BN_bin2bn(dh1024_g, sizeof(dh1024_g), NULL);
-    if ((dh->p == NULL) || (dh->g == NULL))
-        return (NULL);
-    return (dh);
-}
-/* ----END GENERATED SECTION---------- */
-
-DH *ssl_dh_GetTmpParam(int nKeyLen)
-{
-    DH *dh;
-
-    if (nKeyLen == 512)
-        dh = get_dh512();
-    else if (nKeyLen == 1024)
-        dh = get_dh1024();
-    else
-        dh = get_dh1024();
-    return dh;
-}
-
-DH *ssl_dh_GetParamFromFile(char *file)
-{
-    DH *dh = NULL;
-    BIO *bio;
-
-    if ((bio = BIO_new_file(file, "r")) == NULL)
-        return NULL;
-#if SSL_LIBRARY_VERSION < 0x00904000
-    dh = PEM_read_bio_DHparams(bio, NULL, NULL);
-#else
-    dh = PEM_read_bio_DHparams(bio, NULL, NULL, NULL);
-#endif
-    BIO_free(bio);
-    return (dh);
-}
-
-/*
-=cut
-##
-##  Embedded Perl script for generating the temporary DH parameters
-##
-
-require 5.003;
-use strict;
-
-#   configuration
-my $file  = $0;
-my $begin = '----BEGIN GENERATED SECTION--------';
-my $end   = '----END GENERATED SECTION----------';
-
-#   read ourself and keep a backup
-open(FP, "<$file") || die;
-my $source = '';
-$source .= $_ while (<FP>);
-close(FP);
-open(FP, ">$file.bak") || die;
-print FP $source;
-close(FP);
-
-#   generate the DH parameters
-print "1. Generate 512 and 1024 bit Diffie-Hellman parameters (p, g)\n";
-my $rand = '';
-foreach $file (qw(/var/log/messages /var/adm/messages 
-                  /kernel /vmunix /vmlinuz /etc/hosts /etc/resolv.conf)) {
-    if (-f $file) {
-        $rand = $file     if ($rand eq '');
-        $rand .= ":$file" if ($rand ne '');
-    }
-}
-$rand = "-rand $rand" if ($rand ne '');
-system("openssl gendh $rand -out dh512.pem 512");
-system("openssl gendh $rand -out dh1024.pem 1024");
-
-#   generate DH param info 
-my $dhinfo = '';
-open(FP, "openssl dh -noout -text -in dh512.pem |") || die;
-$dhinfo .= $_ while (<FP>);
-close(FP);
-open(FP, "openssl dh -noout -text -in dh1024.pem |") || die;
-$dhinfo .= $_ while (<FP>);
-close(FP);
-$dhinfo =~ s|^|** |mg;
-$dhinfo = "\n\/\*\n$dhinfo\*\/\n\n";
-
-#   generate C source from DH params
-my $dhsource = '';
-open(FP, "openssl dh -noout -C -in dh512.pem | indent | expand |") || die;
-$dhsource .= $_ while (<FP>);
-close(FP);
-open(FP, "openssl dh -noout -C -in dh1024.pem | indent | expand |") || die;
-$dhsource .= $_ while (<FP>);
-close(FP);
-$dhsource =~ s|(DH\s+\*get_dh)|static $1|sg;
-
-#   generate output
-my $o = $dhinfo . $dhsource;
-
-#   insert the generated code at the target location
-$source =~ s|(\/\* $begin.+?\n).*\n(.*?\/\* $end)|$1$o$2|s;
-
-#   and update the source on disk
-print "Updating file `$file'\n";
-open(FP, ">$file") || die;
-print FP $source;
-close(FP);
-
-#   cleanup
-unlink("dh512.pem");
-unlink("dh1024.pem");
-
-=pod
-*/
diff --git a/modules/ssl/ssl_engine_ext.c b/modules/ssl/ssl_engine_ext.c
deleted file mode 100644
index c0b17dc..0000000
--- a/modules/ssl/ssl_engine_ext.c
+++ /dev/null
@@ -1,601 +0,0 @@
-/*                      _             _
-**  _ __ ___   ___   __| |    ___ ___| |  mod_ssl
-** | '_ ` _ \ / _ \ / _` |   / __/ __| |  Apache Interface to OpenSSL
-** | | | | | | (_) | (_| |   \__ \__ \ |  www.modssl.org
-** |_| |_| |_|\___/ \__,_|___|___/___/_|  ftp.modssl.org
-**                      |_____|
-**  ssl_engine_ext.c
-**  Extensions to other Apache parts
-*/
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- */
-                             /* ``Only those who attempt the absurd
-                                  can achieve the impossible.''
-                                           -- Unknown             */
-#include "mod_ssl.h"
-
-
-#if 0 /* XXX this is for mod_proxy hackers, which optional_fn's to create? */
-/*  _________________________________________________________________
-**
-**  SSL Extension to mod_proxy
-**  _________________________________________________________________
-*/
-
-static int   ssl_ext_mp_canon(request_rec *, char *);
-static int   ssl_ext_mp_handler(request_rec *, void *, char *, char *, int, char *);
-static int   ssl_ext_mp_set_destport(request_rec *);
-static char *ssl_ext_mp_new_connection(request_rec *, BUFF *, char *);
-static void  ssl_ext_mp_close_connection(void *);
-static int   ssl_ext_mp_write_host_header(request_rec *, BUFF *, char *, int, char *);
-#ifdef SSL_EXPERIMENTAL_PROXY
-static void  ssl_ext_mp_init(server_rec *, pool *);
-static int   ssl_ext_mp_verify_cb(int, X509_STORE_CTX *);
-static int   ssl_ext_mp_clientcert_cb(SSL *, X509 **, EVP_PKEY **);
-#endif
-
-/*
- * register us ...
- */
-void ssl_ext_proxy_register(apr_pool_t *pconf)
-{
-#ifdef SSL_EXPERIMENTAL_PROXY
-    ap_hook_register("ap::mod_proxy::init",
-                     ssl_ext_mp_init, AP_HOOK_NOCTX);
-#endif
-    ap_hook_register("ap::mod_proxy::canon",
-                     ssl_ext_mp_canon, AP_HOOK_NOCTX);
-    ap_hook_register("ap::mod_proxy::handler",
-                     ssl_ext_mp_handler, AP_HOOK_NOCTX);
-    ap_hook_register("ap::mod_proxy::http::handler::set_destport",
-                     ssl_ext_mp_set_destport, AP_HOOK_NOCTX);
-    ap_hook_register("ap::mod_proxy::http::handler::new_connection",
-                     ssl_ext_mp_new_connection, AP_HOOK_NOCTX);
-    ap_hook_register("ap::mod_proxy::http::handler::write_host_header",
-                     ssl_ext_mp_write_host_header, AP_HOOK_NOCTX);
-    return;
-}
-
-/*
- * SSL proxy initialization
- */
-#ifdef SSL_EXPERIMENTAL_PROXY
-static void ssl_ext_mp_init(server_rec *s, pool *p)
-{
-    SSLSrvConfigRec *sc;
-    char *cpVHostID;
-    int nVerify;
-    SSL_CTX *ctx;
-    char *cp;
-    STACK_OF(X509_INFO) *sk;
-
-    /*
-     * Initialize each virtual server 
-     */
-    ERR_clear_error();
-    for (; s != NULL; s = s->next) {
-        sc = mySrvConfig(s);
-        cpVHostID = ssl_util_vhostid(p, s);
-        
-        if (sc->bProxyVerify == UNSET)
-            sc->bProxyVerify = FALSE;
-
-        /*
-         *  Create new SSL context and configure callbacks
-         */
-        if (sc->nProxyProtocol == SSL_PROTOCOL_NONE) {
-            ssl_log(s, SSL_LOG_ERROR,
-                    "Init: (%s) No Proxy SSL protocols available [hint: SSLProxyProtocol]",
-                    cpVHostID);
-            ssl_die();
-        }
-        cp = apr_pstrcat(p, (sc->nProxyProtocol & SSL_PROTOCOL_SSLV2 ? "SSLv2, " : ""), 
-                            (sc->nProxyProtocol & SSL_PROTOCOL_SSLV3 ? "SSLv3, " : ""), 
-                            (sc->nProxyProtocol & SSL_PROTOCOL_TLSV1 ? "TLSv1, " : ""), NULL);
-        cp[strlen(cp)-2] = NUL;
-        ssl_log(s, SSL_LOG_TRACE, 
-                "Init: (%s) Creating new proxy SSL context (protocols: %s)", 
-                cpVHostID, cp);
-        if (sc->nProxyProtocol == SSL_PROTOCOL_SSLV2)
-            ctx = SSL_CTX_new(SSLv2_client_method());  /* only SSLv2 is left */ 
-        else
-            ctx = SSL_CTX_new(SSLv23_client_method()); /* be more flexible */
-        if (ctx == NULL) {
-            ssl_log(s, SSL_LOG_ERROR|SSL_ADD_SSLERR,
-                    "Init: (%s) Unable to create SSL Proxy context", cpVHostID);
-            ssl_die();
-        }
-        sc->pSSLProxyCtx = ctx;
-        SSL_CTX_set_options(ctx, SSL_OP_ALL);
-        if (!(sc->nProxyProtocol & SSL_PROTOCOL_SSLV2))
-            SSL_CTX_set_options(ctx, SSL_OP_NO_SSLv2);
-        if (!(sc->nProxyProtocol & SSL_PROTOCOL_SSLV3))
-            SSL_CTX_set_options(ctx, SSL_OP_NO_SSLv3);
-        if (!(sc->nProxyProtocol & SSL_PROTOCOL_TLSV1)) 
-            SSL_CTX_set_options(ctx, SSL_OP_NO_TLSv1);
-
-        if (sc->szProxyClientCertificateFile || sc->szProxyClientCertificatePath) {
-            sk = sk_X509_INFO_new_null();
-            if (sc->szProxyClientCertificateFile) 
-                SSL_load_CrtAndKeyInfo_file(p, sk, sc->szProxyClientCertificateFile);
-            if (sc->szProxyClientCertificatePath)
-                SSL_load_CrtAndKeyInfo_path(p, sk, sc->szProxyClientCertificatePath);
-            ssl_log(s, SSL_LOG_TRACE, "Init: (%s) loaded %d client certs for SSL proxy",
-                    cpVHostID, sk_X509_INFO_num(sk));
-            if (sk_X509_INFO_num(sk) > 0) {
-                SSL_CTX_set_client_cert_cb(ctx, ssl_ext_mp_clientcert_cb);
-                sc->skProxyClientCerts = sk;
-            }
-        }
-
-        /*
-         * Calculate OpenSSL verify type for verifying the remote server
-         * certificate. We either verify it against our list of CA's, or don't
-         * bother at all.
-         */
-        nVerify = SSL_VERIFY_NONE;
-        if (sc->bProxyVerify)
-            nVerify |= SSL_VERIFY_PEER;
-        if (   nVerify & SSL_VERIFY_PEER 
-            && sc->szProxyCACertificateFile == NULL 
-            && sc->szProxyCACertificatePath == NULL) {
-            ssl_log(s, SSL_LOG_ERROR,
-                    "Init: (%s) SSLProxyVerify set to On but no CA certificates configured",
-                    cpVHostID);
-            ssl_die();
-        }
-        if (   nVerify & SSL_VERIFY_NONE
-            && (   sc->szProxyCACertificateFile != NULL
-                || sc->szProxyCACertificatePath != NULL)) {
-            ssl_log(s, SSL_LOG_WARN, 
-                    "init: (%s) CA certificates configured but ignored because SSLProxyVerify is Off",
-                    cpVHostID);
-        }
-        SSL_CTX_set_verify(ctx, nVerify, ssl_ext_mp_verify_cb);
-
-        /*
-         * Enable session caching. We can safely use the same cache
-         * as used for communicating with the other clients.
-         */
-        SSL_CTX_sess_set_new_cb(sc->pSSLProxyCtx,    ssl_callback_NewSessionCacheEntry);
-        SSL_CTX_sess_set_get_cb(sc->pSSLProxyCtx,    ssl_callback_GetSessionCacheEntry);
-        SSL_CTX_sess_set_remove_cb(sc->pSSLProxyCtx, ssl_callback_DelSessionCacheEntry);
-
-        /*
-         *  Configure SSL Cipher Suite
-         */
-        ssl_log(s, SSL_LOG_TRACE,
-                "Init: (%s) Configuring permitted SSL ciphers for SSL proxy", cpVHostID);
-        if (sc->szProxyCipherSuite != NULL) {
-            if (!SSL_CTX_set_cipher_list(sc->pSSLProxyCtx, sc->szProxyCipherSuite)) {
-                ssl_log(s, SSL_LOG_ERROR|SSL_ADD_SSLERR,
-                        "Init: (%s) Unable to configure permitted SSL ciphers for SSL Proxy",
-                        cpVHostID);
-                ssl_die();
-            }
-        }
-
-        /*
-         * Configure Client Authentication details
-         */
-        if (sc->szProxyCACertificateFile != NULL || sc->szProxyCACertificatePath != NULL) {
-             ssl_log(s, SSL_LOG_DEBUG, 
-                     "Init: (%s) Configuring client verification locations for SSL Proxy", 
-                     cpVHostID);
-             if (!SSL_CTX_load_verify_locations(sc->pSSLProxyCtx,
-                                                sc->szProxyCACertificateFile,
-                                                sc->szProxyCACertificatePath)) {
-                 ssl_log(s, SSL_LOG_ERROR|SSL_ADD_SSLERR, 
-                         "Init: (%s) Unable to configure SSL verify locations for SSL proxy",
-                         cpVHostID);
-                 ssl_die();
-             }
-        }
-    }
-    return;
-}
-#endif /* SSL_EXPERIMENTAL_PROXY */
-
-static int ssl_ext_mp_canon(request_rec *r, char *url)
-{
-    int rc;
-
-    if (strcEQn(url, "https:", 6)) {
-        rc = OK;
-        ap_hook_call("ap::mod_proxy::http::canon",
-                     &rc, r, url+6, "https", DEFAULT_HTTPS_PORT);
-        return rc;
-    }
-    return DECLINED;
-}
-
-static int ssl_ext_mp_handler(
-    request_rec *r, void *cr, char *url, char *proxyhost, int proxyport, char *protocol)
-{
-    int rc;
-
-    if (strcEQ(protocol, "https")) {
-        ap_ctx_set(r->ctx, "ssl::proxy::enabled", PTRUE);
-        ap_hook_call("ap::mod_proxy::http::handler",
-                     &rc, r, cr, url, proxyhost, proxyport);
-        return rc;
-    }
-    else {
-        ap_ctx_set(r->ctx, "ssl::proxy::enabled", PFALSE);
-    }
-    return DECLINED;
-}
-
-static int ssl_ext_mp_set_destport(request_rec *r)
-{
-    if (ap_ctx_get(r->ctx, "ssl::proxy::enabled") == PTRUE)
-        return DEFAULT_HTTPS_PORT;
-    else
-        return DEFAULT_HTTP_PORT;
-}
-
-static char *ssl_ext_mp_new_connection(request_rec *r, BUFF *fb, char *peer)
-{
-#ifndef SSL_EXPERIMENTAL_PROXY
-    SSL_CTX *ssl_ctx;
-#endif
-    SSL *ssl;
-    char *errmsg;
-    int rc;
-    char *cpVHostID;
-    char *cpVHostMD5;
-#ifdef SSL_EXPERIMENTAL_PROXY
-    SSLSrvConfigRec *sc;
-    char *cp;
-#endif
-
-    if (ap_ctx_get(r->ctx, "ssl::proxy::enabled") == PFALSE)
-        return NULL;
-
-    /*
-     * Find context
-     */
-#ifdef SSL_EXPERIMENTAL_PROXY
-    sc = mySrvConfig(r->server);
-#endif
-    cpVHostID = ssl_util_vhostid(r->pool, r->server);
-
-    /*
-     * Create a SSL context and handle
-     */
-#ifdef SSL_EXPERIMENTAL_PROXY
-    ssl = SSL_new(sc->pSSLProxyCtx);
-#else
-    ssl_ctx = SSL_CTX_new(SSLv23_client_method());
-    ssl = SSL_new(ssl_ctx);
-#endif
-    if (ssl == NULL) {
-        errmsg = ap_psprintf(r->pool, "SSL proxy new failed (%s): peer %s: %s",
-                             cpVHostID, peer, ERR_reason_error_string(ERR_get_error()));
-        ap_ctx_set(fb->ctx, "ssl", NULL);
-        return errmsg;
-    }
-
-    cpVHostMD5 = ap_md5(r->pool, (unsigned char *)cpVHostID);
-    if (!SSL_set_session_id_context(ssl, (unsigned char *)cpVHostMD5, strlen(cpVHostMD5))) {
-        errmsg = ap_psprintf(r->pool, "Unable to set session id context to `%s': peer %s: %s",
-                             cpVHostMD5, peer, ERR_reason_error_string(ERR_get_error()));
-        ap_ctx_set(fb->ctx, "ssl", NULL);
-        return errmsg;
-    }
-    SSL_set_fd(ssl, fb->fd);
-#ifdef SSL_EXPERIMENTAL_PROXY
-    SSL_set_app_data(ssl, fb->ctx);
-#endif
-    ap_ctx_set(fb->ctx, "ssl", ssl);
-#ifdef SSL_EXPERIMENTAL_PROXY
-    ap_ctx_set(fb->ctx, "ssl::proxy::server_rec", r->server);
-    ap_ctx_set(fb->ctx, "ssl::proxy::peer", peer);
-    ap_ctx_set(fb->ctx, "ssl::proxy::servername", cpVHostID);
-    ap_ctx_set(fb->ctx, "ssl::proxy::verifyerror", NULL);
-#endif
-
-    /*
-     * Give us a chance to gracefully close the connection
-     */
-    ap_register_cleanup(r->pool, (void *)fb,
-                        ssl_ext_mp_close_connection, ssl_ext_mp_close_connection);
-
-    /*
-     * Establish the SSL connection
-     */
-    if ((rc = SSL_connect(ssl)) <= 0) {
-#ifdef SSL_EXPERIMENTAL_PROXY
-        if ((cp = (char *)ap_ctx_get(fb->ctx, "ssl::proxy::verifyerror")) != NULL) {
-            SSL_set_shutdown(ssl, SSL_RECEIVED_SHUTDOWN); 
-            SSL_smart_shutdown(ssl);
-            SSL_free(ssl);
-            ap_ctx_set(fb->ctx, "ssl", NULL);
-            ap_bsetflag(fb, B_EOF|B_EOUT, 1);
-            return NULL;
-        }
-#endif
-        errmsg = ap_psprintf(r->pool, "SSL proxy connect failed (%s): peer %s: %s",
-                             cpVHostID, peer, ERR_reason_error_string(ERR_get_error()));
-        ssl_log(r->server, SSL_LOG_ERROR, errmsg);
-        SSL_free(ssl);
-        ap_ctx_set(fb->ctx, "ssl", NULL);
-        return errmsg;
-    }
-
-    return NULL;
-}
-
-static void ssl_ext_mp_close_connection(void *_fb)
-{
-    BUFF *fb = _fb;
-    SSL *ssl;
-#ifndef SSL_EXPERIMENTAL_PROXY
-    SSL_CTX *ctx;
-#endif
-
-    ssl = ap_ctx_get(fb->ctx, "ssl");
-    if (ssl != NULL) {
-#ifndef SSL_EXPERIMENTAL_PROXY
-        ctx = SSL_get_SSL_CTX(ssl);
-#endif
-        SSL_set_shutdown(ssl, SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN);
-        SSL_smart_shutdown(ssl);
-        SSL_free(ssl);
-        ap_ctx_set(fb->ctx, "ssl", NULL);
-#ifndef SSL_EXPERIMENTAL_PROXY
-        if (ctx != NULL)
-            SSL_CTX_free(ctx);
-#endif
-    }
-    return;
-}
-
-static int ssl_ext_mp_write_host_header(
-    request_rec *r, BUFF *fb, char *host, int port, char *portstr)
-{
-    if (ap_ctx_get(r->ctx, "ssl::proxy::enabled") == PFALSE)
-        return DECLINED;
-
-    if (portstr != NULL && port != DEFAULT_HTTPS_PORT) {
-        ap_bvputs(fb, "Host: ", host, ":", portstr, "\r\n", NULL);
-        return OK;
-    }
-    return DECLINED;
-}
-
-#ifdef SSL_EXPERIMENTAL_PROXY
-
-/* 
- * Callback for client certificate stuff.
- * If the remote site sent us a SSLv3 list of acceptable CA's then trawl the
- * table of client certs and send the first one that matches.
- */
-static int ssl_ext_mp_clientcert_cb(SSL *ssl, X509 **x509, EVP_PKEY **pkey) 
-{
-    SSLSrvConfigRec *sc;
-    X509_NAME *xnx;
-    X509_NAME *issuer;
-    X509_INFO *xi;
-    char *peer;
-    char *servername;
-    server_rec *s;
-    ap_ctx *pCtx;
-    STACK_OF(X509_NAME) *sk;
-    STACK_OF(X509_INFO) *pcerts;
-    char *cp;
-    int i, j;
-    
-    pCtx       = (ap_ctx *)SSL_get_app_data(ssl);
-    s          = ap_ctx_get(pCtx, "ssl::proxy::server_rec");
-    peer       = ap_ctx_get(pCtx, "ssl::proxy::peer");
-    servername = ap_ctx_get(pCtx, "ssl::proxy::servername");
-
-    sc         = mySrvConfig(s);
-    pcerts     = sc->skProxyClientCerts;
-
-    ssl_log(s, SSL_LOG_DEBUG, 
-            "Proxy client certificate callback: (%s) entered", servername);
-
-    if ((pcerts == NULL) || (sk_X509_INFO_num(pcerts) <= 0)) {
-        ssl_log(s, SSL_LOG_TRACE,
-                "Proxy client certificate callback: (%s) "
-                "site wanted client certificate but none available", 
-                servername);
-        return 0;
-    }                                                                     
-
-    sk = SSL_get_client_CA_list(ssl);
-
-    if ((sk == NULL) || (sk_X509_NAME_num(sk) <= 0)) {
-        /* 
-         * remote site didn't send us a list of acceptable CA certs, 
-         * so lets send the first one we came across 
-         */   
-        xi = sk_X509_INFO_value(pcerts, 0);
-        cp  = X509_NAME_oneline(X509_get_subject_name(xi->x509), NULL, 0);
-        ssl_log(s, SSL_LOG_DEBUG,
-                "SSL Proxy: (%s) no acceptable CA list, sending %s", 
-                servername, cp != NULL ? cp : "-unknown-");
-        free(cp);
-        /* export structures to the caller */
-        *x509 = xi->x509;
-        *pkey = xi->x_pkey->dec_pkey;
-        /* prevent OpenSSL freeing these structures */
-        CRYPTO_add(&((*x509)->references), +1, CRYPTO_LOCK_X509_PKEY);
-        CRYPTO_add(&((*pkey)->references), +1, CRYPTO_LOCK_X509_PKEY);
-        return 1;
-    }         
-
-    for (i = 0; i < sk_X509_NAME_num(sk); i++) {
-        xnx = sk_X509_NAME_value(sk, i);
-        for (j = 0; j < sk_X509_INFO_num(pcerts); j++) {
-            xi = sk_X509_INFO_value(pcerts,j);
-            issuer = X509_get_issuer_name(xi->x509);
-            if (X509_NAME_cmp(issuer, xnx) == 0) {
-                cp = X509_NAME_oneline(X509_get_subject_name(xi->x509), NULL, 0);
-                ssl_log(s, SSL_LOG_DEBUG, "SSL Proxy: (%s) sending %s", 
-                        servername, cp != NULL ? cp : "-unknown-");
-                free(cp);
-                /* export structures to the caller */
-                *x509 = xi->x509;
-                *pkey = xi->x_pkey->dec_pkey;
-                /* prevent OpenSSL freeing these structures */
-                CRYPTO_add(&((*x509)->references), +1, CRYPTO_LOCK_X509_PKEY);
-                CRYPTO_add(&((*pkey)->references), +1, CRYPTO_LOCK_X509_PKEY);
-                return 1;
-            }
-        }
-    }
-    ssl_log(s, SSL_LOG_TRACE,
-            "Proxy client certificate callback: (%s) "
-            "no client certificate found!?", servername);
-    return 0; 
-}
-
-/*
- * This is the verify callback when we are connecting to a remote SSL server
- * from the proxy. Information is passed in via the SSL "ctx" app_data
- * mechanism. We pass in an Apache context in this field, which contains
- * server_rec of the server making the proxy connection from the
- * "ssl::proxy::server_rec" context.
- *
- * The result of the verification is passed back out to SSLERR via the return
- * value. We also store the error message in the "proxyverifyfailed" context,
- * so the caller of SSL_connect() can log a detailed error message.
- */
-static int ssl_ext_mp_verify_cb(int ok, X509_STORE_CTX *ctx)
-{
-    SSLSrvConfigRec *sc;
-    X509 *xs;
-    int errnum;
-    int errdepth;
-    char *cp, *cp2;
-    ap_ctx *pCtx;
-    server_rec *s;
-    SSL *ssl;
-    char *peer;
-    char *servername;
-
-    ssl        = (SSL *)X509_STORE_CTX_get_app_data(ctx);
-    pCtx       = (ap_ctx *)SSL_get_app_data(ssl);
-    s          = ap_ctx_get(pCtx, "ssl::proxy::server_rec");
-    peer       = ap_ctx_get(pCtx, "ssl::proxy::peer");
-    servername = ap_ctx_get(pCtx, "ssl::proxy::servername");
-    sc         = mySrvConfig(s);
-
-    /*
-     * Unless stated otherwise by the configuration, we really don't
-     * care if the verification was okay or not, so lets return now
-     * before we do anything involving memory or time.
-     */
-    if (sc->bProxyVerify == FALSE)
-        return ok;
-                     
-    /*
-     * Get verify ingredients
-     */
-    xs       = X509_STORE_CTX_get_current_cert(ctx);
-    errnum   = X509_STORE_CTX_get_error(ctx);
-    errdepth = X509_STORE_CTX_get_error_depth(ctx);
-
-    /* 
-     * Log verification information
-     */
-    cp  = X509_NAME_oneline(X509_get_subject_name(xs), NULL, 0);
-    cp2 = X509_NAME_oneline(X509_get_issuer_name(xs),  NULL, 0);
-    ssl_log(s, SSL_LOG_DEBUG,
-            "SSL Proxy: (%s) Certificate Verification for remote server %s: "
-            "depth: %d, subject: %s, issuer: %s", 
-            servername, peer != NULL ? peer : "-unknown-",
-            errdepth, cp != NULL ? cp : "-unknown-", 
-            cp2 != NULL ? cp2 : "-unknown");
-    free(cp);
-    free(cp2);
-
-    /*
-     * If we already know it's not ok, log the real reason
-     */
-    if (!ok) {
-        ssl_log(s, SSL_LOG_ERROR,
-                "SSL Proxy: (%s) Certificate Verification failed for %s: "
-                "Error (%d): %s", servername,
-                peer != NULL ? peer : "-unknown-",
-                errnum, X509_verify_cert_error_string(errnum));
-        ap_ctx_set(pCtx, "ssl::proxy::verifyerror", 
-                   (void *)X509_verify_cert_error_string(errnum));
-        return ok;
-    }
-
-    /*
-     * Check the depth of the certificate chain
-     */
-    if (sc->nProxyVerifyDepth > 0) {
-        if (errdepth > sc->nProxyVerifyDepth) {
-            ssl_log(s, SSL_LOG_ERROR,
-                "SSL Proxy: (%s) Certificate Verification failed for %s: "
-                "Certificate Chain too long "
-                "(chain has %d certificates, but maximum allowed are only %d)", 
-                servername, peer, errdepth, sc->nProxyVerifyDepth);
-            ap_ctx_set(pCtx, "ssl::proxy::verifyerror",
-                       (void *)X509_verify_cert_error_string(X509_V_ERR_CERT_CHAIN_TOO_LONG));
-            ok = FALSE;
-        }
-    }
-
-    /*
-     * And finally signal OpenSSL the (perhaps changed) state
-     */
-    return (ok);
-}
-
-#endif /* SSL_EXPERIMENTAL_PROXY */
-
-#endif /* XXX */
diff --git a/modules/ssl/ssl_engine_init.c b/modules/ssl/ssl_engine_init.c
deleted file mode 100644
index 935c288..0000000
--- a/modules/ssl/ssl_engine_init.c
+++ /dev/null
@@ -1,1095 +0,0 @@
-/*                      _             _
-**  _ __ ___   ___   __| |    ___ ___| |  mod_ssl
-** | '_ ` _ \ / _ \ / _` |   / __/ __| |  Apache Interface to OpenSSL
-** | | | | | | (_) | (_| |   \__ \__ \ |  www.modssl.org
-** |_| |_| |_|\___/ \__,_|___|___/___/_|  ftp.modssl.org
-**                      |_____|
-**  ssl_engine_init.c
-**  Initialization of Servers
-*/
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- */
-                             /* ``Recursive, adj.;
-                                  see Recursive.''
-                                        -- Unknown   */
-#include "mod_ssl.h"
-
-/*  _________________________________________________________________
-**
-**  Module Initialization
-**  _________________________________________________________________
-*/
-
-static char *ssl_add_version_component(apr_pool_t *p,
-                                       server_rec *s,
-                                       char *name)
-{
-    char *val = ssl_var_lookup(p, s, NULL, NULL, name);
-
-    if (val && *val) {
-        ap_add_version_component(p, val);
-    }
-
-    return val;
-}
-
-static char *version_components[] = {
-    "SSL_VERSION_PRODUCT",
-    "SSL_VERSION_INTERFACE",
-    "SSL_VERSION_LIBRARY",
-    NULL
-};
-
-static void ssl_add_version_components(apr_pool_t *p,
-                                       server_rec *s)
-{
-    char *vals[sizeof(version_components)/sizeof(char *)];
-    int i;
-
-    for (i=0; version_components[i]; i++) {
-        vals[i] = ssl_add_version_component(p, s,
-                                            version_components[i]);
-    }
-
-    ssl_log(s, SSL_LOG_INFO,
-            "Server: %s, Interface: %s, Library: %s",
-            AP_SERVER_BASEVERSION,
-            vals[1],  /* SSL_VERSION_INTERFACE */
-            vals[2]); /* SSL_VERSION_LIBRARY */
-}
-
-
-/*
- *  Initialize SSL library
- */
-static void ssl_init_SSLLibrary(server_rec *s)
-{
-    ssl_log(s, SSL_LOG_INFO,
-            "Init: Initializing %s library", SSL_LIBRARY_NAME);
-
-    CRYPTO_malloc_init();
-    SSL_load_error_strings();
-    SSL_library_init();
-}
-
-/*
- * Handle the Temporary RSA Keys and DH Params
- */
-
-#define MODSSL_TMP_KEY_FREE(mc, type, idx) \
-    if (mc->pTmpKeys[idx]) { \
-        type##_free((type *)mc->pTmpKeys[idx]); \
-        mc->pTmpKeys[idx] = NULL; \
-    }
-
-#define MODSSL_TMP_KEYS_FREE(mc, type) \
-    MODSSL_TMP_KEY_FREE(mc, type, SSL_TMP_KEY_##type##_512); \
-    MODSSL_TMP_KEY_FREE(mc, type, SSL_TMP_KEY_##type##_1024)
-
-static void ssl_tmp_keys_free(server_rec *s)
-{
-    SSLModConfigRec *mc = myModConfig(s);
-
-    MODSSL_TMP_KEYS_FREE(mc, RSA);
-    MODSSL_TMP_KEYS_FREE(mc, DH);
-}
-
-static void ssl_tmp_key_init_rsa(server_rec *s,
-                                 int bits, int idx)
-{
-    SSLModConfigRec *mc = myModConfig(s);
-
-    if (!(mc->pTmpKeys[idx] =
-          RSA_generate_key(bits, RSA_F4, NULL, NULL)))
-    {
-        ssl_log(s, SSL_LOG_ERROR,
-                "Init: Failed to generate temporary "
-                "%d bit RSA private key", bits);
-        ssl_die();
-    }
-
-}
-
-static void ssl_tmp_key_init_dh(server_rec *s,
-                                int bits, int idx)
-{
-    SSLModConfigRec *mc = myModConfig(s);
-
-    if (!(mc->pTmpKeys[idx] =
-          ssl_dh_GetTmpParam(bits)))
-    {
-        ssl_log(s, SSL_LOG_ERROR,
-                "Init: Failed to generate temporary "
-                "%d bit DH parameters", bits);
-        ssl_die();
-    }
-}
-
-#define MODSSL_TMP_KEY_INIT_RSA(s, bits) \
-    ssl_tmp_key_init_rsa(s, bits, SSL_TMP_KEY_RSA_##bits)
-
-#define MODSSL_TMP_KEY_INIT_DH(s, bits) \
-    ssl_tmp_key_init_dh(s, bits, SSL_TMP_KEY_DH_##bits)
-
-static void ssl_tmp_keys_init(server_rec *s)
-{
-    ssl_log(s, SSL_LOG_INFO,
-            "Init: Generating temporary RSA private keys (512/1024 bits)");
-
-    MODSSL_TMP_KEY_INIT_RSA(s, 512);
-    MODSSL_TMP_KEY_INIT_RSA(s, 1024);
-
-    ssl_log(s, SSL_LOG_INFO,
-            "Init: Generating temporary DH parameters (512/1024 bits)");
-
-    MODSSL_TMP_KEY_INIT_DH(s, 512);
-    MODSSL_TMP_KEY_INIT_DH(s, 1024);
-}
-
-/*
- *  Per-module initialization
- */
-int ssl_init_Module(apr_pool_t *p, apr_pool_t *plog,
-                    apr_pool_t *ptemp,
-                    server_rec *base_server)
-{
-    SSLModConfigRec *mc = myModConfig(base_server);
-    SSLSrvConfigRec *sc;
-    server_rec *s;
-
-    /*
-     * Let us cleanup on restarts and exists
-     */
-    apr_pool_cleanup_register(p, base_server,
-                              ssl_init_ModuleKill,
-                              apr_pool_cleanup_null);
-
-    /*
-     * Any init round fixes the global config
-     */
-    ssl_config_global_create(base_server); /* just to avoid problems */
-    ssl_config_global_fix(mc);
-
-    /*
-     *  try to fix the configuration and open the dedicated SSL
-     *  logfile as early as possible
-     */
-    for (s = base_server; s; s = s->next) {
-        sc = mySrvConfig(s);
-
-        /* Fix up stuff that may not have been set */
-        if (sc->bEnabled == UNSET) {
-            sc->bEnabled = FALSE;
-        }
-
-        if (sc->nVerifyClient == SSL_CVERIFY_UNSET) {
-            sc->nVerifyClient = SSL_CVERIFY_NONE;
-        }
-
-        if (sc->nVerifyDepth == UNSET) {
-            sc->nVerifyDepth = 1;
-        }
-
-#ifdef SSL_EXPERIMENTAL_PROXY
-        if (sc->nProxyVerifyDepth == UNSET) {
-            sc->nProxyVerifyDepth = 1;
-        }
-#endif
-
-        if (sc->nSessionCacheTimeout == UNSET) {
-            sc->nSessionCacheTimeout = SSL_SESSION_CACHE_TIMEOUT;
-        }
-
-        if (sc->nPassPhraseDialogType == SSL_PPTYPE_UNSET) {
-            sc->nPassPhraseDialogType = SSL_PPTYPE_BUILTIN;
-        }
-
-        /* Open the dedicated SSL logfile */
-        ssl_log_open(base_server, s, p);
-    }
-
-    ssl_init_SSLLibrary(base_server);
-
-#if APR_HAS_THREADS
-    ssl_util_thread_setup(base_server, p);
-#endif
-
-    /*
-     * Seed the Pseudo Random Number Generator (PRNG)
-     * only need ptemp here; nothing inside allocated from the pool
-     * needs to live once we return from ssl_rand_seed().
-     */
-    ssl_rand_seed(base_server, ptemp, SSL_RSCTX_STARTUP, "Init: ");
-
-    /*
-     * read server private keys/public certs into memory.
-     * decrypting any encrypted keys via configured SSLPassPhraseDialogs
-     * anything that needs to live longer than ptemp needs to also survive
-     * restarts, in which case they'll live inside s->process->pool.
-     */
-    ssl_pphrase_Handle(base_server, ptemp);
-
-    ssl_tmp_keys_init(base_server);
-
-    /*
-     * SSL external crypto device ("engine") support
-     */
-#ifdef SSL_EXPERIMENTAL_ENGINE
-    ssl_init_Engine(base_server, p);
-#endif
-
-    /*
-     * Warn the user that he should use the session cache.
-     * But we can operate without it, of course.
-     */
-    if (mc->nSessionCacheMode == SSL_SCMODE_UNSET) {
-        ssl_log(base_server, SSL_LOG_WARN,
-                "Init: Session Cache is not configured "
-                "[hint: SSLSessionCache]");
-        mc->nSessionCacheMode = SSL_SCMODE_NONE;
-    }
-
-    /*
-     * initialize the mutex handling
-     */
-    if (!ssl_mutex_init(base_server, p)) {
-        return HTTP_INTERNAL_SERVER_ERROR;
-    }
-
-    /*
-     * initialize session caching
-     */
-    ssl_scache_init(base_server, p);
-
-    /*
-     *  initialize servers
-     */
-    ssl_log(base_server, SSL_LOG_INFO,
-            "Init: Initializing (virtual) servers for SSL");
-
-    for (s = base_server; s; s = s->next) {
-        sc = mySrvConfig(s);
-        /*
-         * Either now skip this server when SSL is disabled for
-         * it or give out some information about what we're
-         * configuring.
-         */
-        if (!sc->bEnabled) {
-            continue;
-        }
-
-        ssl_log(s, SSL_LOG_INFO,
-                "Init: Configuring server %s for SSL protocol",
-                ssl_util_vhostid(p, s));
-
-        /*
-         * Read the server certificate and key
-         */
-        ssl_init_ConfigureServer(s, p, ptemp, sc);
-    }
-
-    /*
-     * Configuration consistency checks
-     */
-    ssl_init_CheckServers(base_server, ptemp);
-
-    /*
-     *  Announce mod_ssl and SSL library in HTTP Server field
-     *  as ``mod_ssl/X.X.X OpenSSL/X.X.X''
-     */
-    ssl_add_version_components(p, base_server);
-
-    SSL_init_app_data2_idx(); /* for SSL_get_app_data2() at request time */
-
-    return OK;
-}
-
-/*
- * Support for external a Crypto Device ("engine"), usually
- * a hardware accellerator card for crypto operations.
- */
-#ifdef SSL_EXPERIMENTAL_ENGINE
-void ssl_init_Engine(server_rec *s, apr_pool_t *p)
-{
-    SSLModConfigRec *mc = myModConfig(s);
-    ENGINE *e;
-
-    if (mc->szCryptoDevice) {
-        if (!(e = ENGINE_by_id(mc->szCryptoDevice))) {
-            ssl_log(s, SSL_LOG_ERROR,
-                    "Init: Failed to load Crypto Device API `%s'",
-                    mc->szCryptoDevice);
-            ssl_die();
-        }
-
-        if (strEQ(mc->szCryptoDevice, "chil")) {
-            ENGINE_ctrl(e, ENGINE_CTRL_CHIL_SET_FORKCHECK, 1, 0, 0);
-        }
-
-        if (!ENGINE_set_default(e, ENGINE_METHOD_ALL)) {
-            ssl_log(s, SSL_LOG_ERROR,
-                    "Init: Failed to enable Crypto Device API `%s'",
-                    mc->szCryptoDevice);
-            ssl_die();
-        }
-
-        ENGINE_free(e);
-    }
-}
-#endif
-
-/*
- * Configure a particular server
- */
-void ssl_init_ConfigureServer(server_rec *s,
-                              apr_pool_t *p,
-                              apr_pool_t *ptemp,
-                              SSLSrvConfigRec *sc)
-{
-    SSLModConfigRec *mc = myModConfig(s);
-    int verify = SSL_VERIFY_NONE;
-    char *cp;
-    const char *vhost_id, *rsa_id, *dsa_id;
-    EVP_PKEY *pkey;
-    SSL_CTX *ctx;
-    STACK_OF(X509_NAME) *ca_list;
-    ssl_asn1_t *asn1;
-    unsigned char *ptr;
-    BOOL ok = FALSE;
-    int is_ca, pathlen;
-    int i, n;
-    long cache_mode;
-
-    /*
-     * Create the server host:port string because we need it a lot
-     */
-    sc->szVHostID = vhost_id = ssl_util_vhostid(p, s);
-    sc->nVHostID_length = strlen(sc->szVHostID);
-
-    /*
-     * Now check for important parameters and the
-     * possibility that the user forgot to set them.
-     */
-    if (!sc->szPublicCertFiles[0]) {
-        ssl_log(s, SSL_LOG_ERROR,
-                "Init: (%s) No SSL Certificate set [hint: SSLCertificateFile]",
-                vhost_id);
-        ssl_die();
-    }
-
-    /*
-     *  Check for problematic re-initializations
-     */
-    if (sc->pPublicCert[SSL_AIDX_RSA] ||
-        sc->pPublicCert[SSL_AIDX_DSA])
-    {
-        ssl_log(s, SSL_LOG_ERROR,
-                "Init: (%s) Illegal attempt to re-initialise SSL for server "
-                "(theoretically shouldn't happen!)", vhost_id);
-        ssl_die();
-    }
-
-    /*
-     *  Create the new per-server SSL context
-     */
-    if (sc->nProtocol == SSL_PROTOCOL_NONE) {
-        ssl_log(s, SSL_LOG_ERROR,
-                "Init: (%s) No SSL protocols available [hint: SSLProtocol]",
-                vhost_id);
-        ssl_die();
-    }
-
-    cp = apr_pstrcat(p,
-                     (sc->nProtocol & SSL_PROTOCOL_SSLV2 ? "SSLv2, " : ""),
-                     (sc->nProtocol & SSL_PROTOCOL_SSLV3 ? "SSLv3, " : ""),
-                     (sc->nProtocol & SSL_PROTOCOL_TLSV1 ? "TLSv1, " : ""),
-                     NULL);
-    cp[strlen(cp)-2] = NUL;
-
-    ssl_log(s, SSL_LOG_TRACE,
-            "Init: (%s) Creating new SSL context (protocols: %s)",
-            vhost_id, cp);
-
-    if (sc->nProtocol == SSL_PROTOCOL_SSLV2) {
-        ctx = SSL_CTX_new(SSLv2_server_method());  /* only SSLv2 is left */
-    }
-    else {
-        ctx = SSL_CTX_new(SSLv23_server_method()); /* be more flexible */
-    }
-
-    SSL_CTX_set_options(ctx, SSL_OP_ALL);
-
-    if (!(sc->nProtocol & SSL_PROTOCOL_SSLV2)) {
-        SSL_CTX_set_options(ctx, SSL_OP_NO_SSLv2);
-    }
-
-    if (!(sc->nProtocol & SSL_PROTOCOL_SSLV3)) {
-        SSL_CTX_set_options(ctx, SSL_OP_NO_SSLv3);
-    }
-
-    if (!(sc->nProtocol & SSL_PROTOCOL_TLSV1)) {
-        SSL_CTX_set_options(ctx, SSL_OP_NO_TLSv1);
-    }
-
-    SSL_CTX_set_app_data(ctx, s);
-    sc->pSSLCtx = ctx;
-
-    /*
-     * Configure additional context ingredients
-     */
-    SSL_CTX_set_options(ctx, SSL_OP_SINGLE_DH_USE);
-
-    if (mc->nSessionCacheMode == SSL_SCMODE_NONE) {
-        cache_mode = SSL_SESS_CACHE_OFF;
-    }
-    else {
-        /* SSL_SESS_CACHE_NO_INTERNAL_LOOKUP will force OpenSSL
-         * to ignore process local-caching and
-         * to always get/set/delete sessions using mod_ssl's callbacks.
-         */
-        cache_mode = SSL_SESS_CACHE_SERVER|SSL_SESS_CACHE_NO_INTERNAL_LOOKUP;
-    }
-
-    SSL_CTX_set_session_cache_mode(ctx, cache_mode);
-
-    /*
-     *  Configure callbacks for SSL context
-     */
-    if (sc->nVerifyClient == SSL_CVERIFY_REQUIRE) {
-        verify |= SSL_VERIFY_PEER_STRICT;
-    }
-
-    if ((sc->nVerifyClient == SSL_CVERIFY_OPTIONAL) ||
-        (sc->nVerifyClient == SSL_CVERIFY_OPTIONAL_NO_CA))
-    {
-        verify |= SSL_VERIFY_PEER;
-    }
-
-    SSL_CTX_set_verify(ctx, verify,  ssl_callback_SSLVerify);
-
-    SSL_CTX_sess_set_new_cb(ctx,      ssl_callback_NewSessionCacheEntry);
-    SSL_CTX_sess_set_get_cb(ctx,      ssl_callback_GetSessionCacheEntry);
-    SSL_CTX_sess_set_remove_cb(ctx,   ssl_callback_DelSessionCacheEntry);
-
-    SSL_CTX_set_tmp_rsa_callback(ctx, ssl_callback_TmpRSA);
-    SSL_CTX_set_tmp_dh_callback(ctx,  ssl_callback_TmpDH);
-
-    if (sc->nLogLevel >= SSL_LOG_INFO) {
-        /* this callback only logs if SSLLogLevel >= info */
-        SSL_CTX_set_info_callback(ctx, ssl_callback_LogTracingState);
-    }
-
-    /*
-     *  Configure SSL Cipher Suite
-     */
-    if (sc->szCipherSuite) {
-        ssl_log(s, SSL_LOG_TRACE,
-                "Init: (%s) Configuring permitted SSL ciphers [%s]", 
-                vhost_id, sc->szCipherSuite);
-
-        if (!SSL_CTX_set_cipher_list(ctx, sc->szCipherSuite)) {
-            ssl_log(s, SSL_LOG_ERROR|SSL_ADD_SSLERR,
-                    "Init: (%s) Unable to configure permitted SSL ciphers",
-                    vhost_id);
-            ssl_die();
-        }
-    }
-
-    /*
-     * Configure Client Authentication details
-     */
-    if (sc->szCACertificateFile || sc->szCACertificatePath) {
-        ssl_log(s, SSL_LOG_TRACE,
-                "Init: (%s) Configuring client authentication", vhost_id);
-
-        if (!SSL_CTX_load_verify_locations(ctx,
-                                           sc->szCACertificateFile,
-                                           sc->szCACertificatePath))
-        {
-            ssl_log(s, SSL_LOG_ERROR|SSL_ADD_SSLERR,
-                    "Init: (%s) Unable to configure verify locations "
-                    "for client authentication", vhost_id);
-            ssl_die();
-        }
-
-        ca_list = ssl_init_FindCAList(s, ptemp,
-                                      sc->szCACertificateFile,
-                                      sc->szCACertificatePath);
-        if (!ca_list) {
-            ssl_log(s, SSL_LOG_ERROR,
-                    "Init: (%s) Unable to determine list of available "
-                    "CA certificates for client authentication",
-                    vhost_id);
-            ssl_die();
-        }
-
-        SSL_CTX_set_client_CA_list(sc->pSSLCtx, (STACK *)ca_list);
-    }
-
-    /*
-     * Configure Certificate Revocation List (CRL) Details
-     */
-    if (sc->szCARevocationFile || sc->szCARevocationPath) {
-        ssl_log(s, SSL_LOG_TRACE,
-                "Init: (%s) Configuring certificate revocation facility",
-                vhost_id);
-
-        sc->pRevocationStore =
-            SSL_X509_STORE_create((char *)sc->szCARevocationFile,
-                                  (char *)sc->szCARevocationPath);
-
-        if (!sc->pRevocationStore) {
-            ssl_log(s, SSL_LOG_ERROR|SSL_ADD_SSLERR,
-                    "Init: (%s) Unable to configure X.509 CRL storage "
-                    "for certificate revocation",
-                    vhost_id);
-            ssl_die();
-        }
-    }
-
-    /*
-     * Give a warning when no CAs were configured but client authentication
-     * should take place. This cannot work.
-     */
-    if (sc->nVerifyClient == SSL_CVERIFY_REQUIRE) {
-        ca_list = (STACK_OF(X509_NAME) *)SSL_CTX_get_client_CA_list(ctx);
-
-        if (sk_X509_NAME_num(ca_list) == 0) {
-            ssl_log(s, SSL_LOG_WARN,
-                    "Init: Ops, you want to request client authentication, "
-                    "but no CAs are known for verification!? "
-                    "[Hint: SSLCACertificate*]");
-        }
-    }
-
-    /*
-     *  Configure server certificate(s)
-     */
-    rsa_id = ssl_asn1_table_keyfmt(ptemp, vhost_id, SSL_AIDX_RSA);
-    dsa_id = ssl_asn1_table_keyfmt(ptemp, vhost_id, SSL_AIDX_DSA);
-
-    if ((asn1 = ssl_asn1_table_get(mc->tPublicCert, rsa_id))) {
-        ssl_log(s, SSL_LOG_TRACE,
-                "Init: (%s) Configuring RSA server certificate",
-                vhost_id);
-
-        ptr = asn1->cpData;
-        if (!(sc->pPublicCert[SSL_AIDX_RSA] =
-              d2i_X509(NULL, &ptr, asn1->nData)))
-        {
-            ssl_log(s, SSL_LOG_ERROR|SSL_ADD_SSLERR,
-                    "Init: (%s) Unable to import RSA server certificate",
-                    vhost_id);
-            ssl_die();
-        }
-
-        if (SSL_CTX_use_certificate(ctx, sc->pPublicCert[SSL_AIDX_RSA]) <= 0) {
-            ssl_log(s, SSL_LOG_ERROR|SSL_ADD_SSLERR,
-                    "Init: (%s) Unable to configure RSA server certificate",
-                    vhost_id);
-            ssl_die();
-        }
-
-        ok = TRUE;
-    }
-
-    if ((asn1 = ssl_asn1_table_get(mc->tPublicCert, dsa_id))) {
-        ssl_log(s, SSL_LOG_TRACE,
-                "Init: (%s) Configuring DSA server certificate",
-                vhost_id);
-
-        ptr = asn1->cpData;
-        if (!(sc->pPublicCert[SSL_AIDX_DSA] =
-              d2i_X509(NULL, &ptr, asn1->nData)))
-        {
-            ssl_log(s, SSL_LOG_ERROR|SSL_ADD_SSLERR,
-                    "Init: (%s) Unable to import DSA server certificate",
-                    vhost_id);
-            ssl_die();
-        }
-
-        if (SSL_CTX_use_certificate(ctx, sc->pPublicCert[SSL_AIDX_DSA]) <= 0) {
-            ssl_log(s, SSL_LOG_ERROR|SSL_ADD_SSLERR,
-                    "Init: (%s) Unable to configure DSA server certificate",
-                    vhost_id);
-            ssl_die();
-        }
-
-        ok = TRUE;
-    }
-
-    if (!ok) {
-        ssl_log(s, SSL_LOG_ERROR,
-                "Init: (%s) Ops, no RSA or DSA server certificate found?!",
-                vhost_id);
-        ssl_log(s, SSL_LOG_ERROR,
-                "Init: (%s) You have to perform a *full* server restart "
-                "when you added or removed a certificate and/or key file",
-                vhost_id);
-        ssl_die();
-    }
-
-    /*
-     * Some information about the certificate(s)
-     */
-    for (i = 0; i < SSL_AIDX_MAX; i++) {
-        if (sc->pPublicCert[i]) {
-            if (SSL_X509_isSGC(sc->pPublicCert[i])) {
-                ssl_log(s, SSL_LOG_INFO,
-                        "Init: (%s) %s server certificate enables "
-                        "Server Gated Cryptography (SGC)", 
-                        vhost_id, ssl_asn1_keystr(i));
-            }
-
-            if (SSL_X509_getBC(sc->pPublicCert[i], &is_ca, &pathlen)) {
-                if (is_ca) {
-                    ssl_log(s, SSL_LOG_WARN,
-                            "Init: (%s) %s server certificate "
-                            "is a CA certificate "
-                            "(BasicConstraints: CA == TRUE !?)",
-                            vhost_id, ssl_asn1_keystr(i));
-                }
-
-                if (pathlen > 0) {
-                    ssl_log(s, SSL_LOG_WARN,
-                            "Init: (%s) %s server certificate "
-                            "is not a leaf certificate "
-                            "(BasicConstraints: pathlen == %d > 0 !?)",
-                            vhost_id, ssl_asn1_keystr(i), pathlen);
-                }
-            }
-
-            if (SSL_X509_getCN(p, sc->pPublicCert[i], &cp)) {
-                int fnm_flags = FNM_PERIOD|FNM_CASE_BLIND;
-
-                if (apr_is_fnmatch(cp) &&
-                    (apr_fnmatch(cp, s->server_hostname,
-                                 fnm_flags) == FNM_NOMATCH))
-                {
-                    ssl_log(s, SSL_LOG_WARN,
-                            "Init: (%s) %s server certificate "
-                            "wildcard CommonName (CN) `%s' "
-                            "does NOT match server name!?",
-                            vhost_id, ssl_asn1_keystr(i), cp);
-                }
-                else if (strNE(s->server_hostname, cp)) {
-                    ssl_log(s, SSL_LOG_WARN,
-                            "Init: (%s) %s server certificate "
-                            "CommonName (CN) `%s' "
-                            "does NOT match server name!?",
-                            vhost_id, ssl_asn1_keystr(i), cp);
-                }
-            }
-        }
-    }
-
-    /*
-     *  Configure server private key(s)
-     */
-    ok = FALSE;
-
-    if ((asn1 = ssl_asn1_table_get(mc->tPrivateKey, rsa_id))) {
-        ssl_log(s, SSL_LOG_TRACE,
-                "Init: (%s) Configuring RSA server private key",
-                vhost_id);
-
-        ptr = asn1->cpData;
-        if (!(sc->pPrivateKey[SSL_AIDX_RSA] = 
-              d2i_PrivateKey(EVP_PKEY_RSA, NULL, &ptr, asn1->nData)))
-        {
-            ssl_log(s, SSL_LOG_ERROR|SSL_ADD_SSLERR,
-                    "Init: (%s) Unable to import RSA server private key",
-                    vhost_id);
-            ssl_die();
-        }
-
-        if (SSL_CTX_use_PrivateKey(ctx, sc->pPrivateKey[SSL_AIDX_RSA]) <= 0) {
-            ssl_log(s, SSL_LOG_ERROR|SSL_ADD_SSLERR,
-                    "Init: (%s) Unable to configure RSA server private key",
-                    vhost_id);
-            ssl_die();
-        }
-
-        ok = TRUE;
-    }
-
-    if ((asn1 = ssl_asn1_table_get(mc->tPrivateKey, dsa_id))) {
-        ssl_log(s, SSL_LOG_TRACE,
-                "Init: (%s) Configuring DSA server private key",
-                vhost_id);
-
-        ptr = asn1->cpData;
-        if (!(sc->pPrivateKey[SSL_AIDX_DSA] = 
-              d2i_PrivateKey(EVP_PKEY_DSA, NULL, &ptr, asn1->nData)))
-        {
-            ssl_log(s, SSL_LOG_ERROR|SSL_ADD_SSLERR,
-                    "Init: (%s) Unable to import DSA server private key",
-                    vhost_id);
-            ssl_die();
-        }
-
-        if (SSL_CTX_use_PrivateKey(ctx, sc->pPrivateKey[SSL_AIDX_DSA]) <= 0) {
-            ssl_log(s, SSL_LOG_ERROR|SSL_ADD_SSLERR,
-                    "Init: (%s) Unable to configure DSA server private key",
-                    vhost_id);
-            ssl_die();
-        }
-
-        ok = TRUE;
-    }
-
-    if (!ok) {
-        ssl_log(s, SSL_LOG_ERROR,
-                "Init: (%s) Ops, no RSA or DSA server private key found?!",
-                vhost_id);
-        ssl_die();
-    }
-
-    /*
-     * Optionally copy DSA parameters for certificate from private key
-     * (see http://www.psy.uq.edu.au/~ftp/Crypto/ssleay/TODO.html)
-     */
-    if (sc->pPublicCert[SSL_AIDX_DSA] &&
-        sc->pPrivateKey[SSL_AIDX_DSA])
-    {
-        pkey = X509_get_pubkey(sc->pPublicCert[SSL_AIDX_DSA]);
-
-        if (pkey && (EVP_PKEY_key_type(pkey) == EVP_PKEY_DSA) &&
-            EVP_PKEY_missing_parameters(pkey))
-        {
-            EVP_PKEY_copy_parameters(pkey,
-                                     sc->pPrivateKey[SSL_AIDX_DSA]);
-        }
-    }
-
-    /* 
-     * Optionally configure extra server certificate chain certificates.
-     * This is usually done by OpenSSL automatically when one of the
-     * server cert issuers are found under SSLCACertificatePath or in
-     * SSLCACertificateFile. But because these are intended for client
-     * authentication it can conflict. For instance when you use a
-     * Global ID server certificate you've to send out the intermediate
-     * CA certificate, too. When you would just configure this with
-     * SSLCACertificateFile and also use client authentication mod_ssl
-     * would accept all clients also issued by this CA. Obviously this
-     * isn't what we want in this situation. So this feature here exists
-     * to allow one to explicity configure CA certificates which are
-     * used only for the server certificate chain.
-     */
-    if (sc->szCertificateChain) {
-        BOOL skip_first = FALSE;
-
-        for (i = 0; (i < SSL_AIDX_MAX) && sc->szPublicCertFiles[i]; i++) {
-            if (strEQ(sc->szPublicCertFiles[i], sc->szCertificateChain)) {
-                skip_first = TRUE;
-                break;
-            }
-        }
-
-        n = SSL_CTX_use_certificate_chain(ctx,
-                                          (char *)sc->szCertificateChain, 
-                                          skip_first, NULL);
-        if (n < 0) {
-            ssl_log(s, SSL_LOG_ERROR,
-                    "Init: (%s) Failed to configure CA certificate chain!",
-                    vhost_id);
-            ssl_die();
-        }
-
-        ssl_log(s, SSL_LOG_TRACE,
-                "Init: (%s) Configuring server certificate chain "
-                "(%d CA certificate%s)",
-                vhost_id, n, n == 1 ? "" : "s");
-    }
-}
-
-void ssl_init_CheckServers(server_rec *base_server, apr_pool_t *p)
-{
-    server_rec *s, *ps;
-    SSLSrvConfigRec *sc;
-    apr_hash_t *table;
-    const char *key;
-    apr_ssize_t klen;
-
-    BOOL conflict = FALSE;
-
-    /*
-     * Give out warnings when a server has HTTPS configured 
-     * for the HTTP port or vice versa
-     */
-    for (s = base_server; s; s = s->next) {
-        sc = mySrvConfig(s);
-
-        if (sc->bEnabled && (s->port == DEFAULT_HTTP_PORT)) {
-            ssl_log(base_server, SSL_LOG_WARN,
-                    "Init: (%s) You configured HTTPS(%d) "
-                    "on the standard HTTP(%d) port!",
-                    ssl_util_vhostid(p, s),
-                    DEFAULT_HTTPS_PORT, DEFAULT_HTTP_PORT);
-        }
-
-        if (!sc->bEnabled && (s->port == DEFAULT_HTTPS_PORT)) {
-            ssl_log(base_server, SSL_LOG_WARN,
-                    "Init: (%s) You configured HTTP(%d) "
-                    "on the standard HTTPS(%d) port!",
-                    ssl_util_vhostid(p, s),
-                    DEFAULT_HTTP_PORT, DEFAULT_HTTPS_PORT);
-        }
-    }
-
-    /*
-     * Give out warnings when more than one SSL-aware virtual server uses the
-     * same IP:port. This doesn't work because mod_ssl then will always use
-     * just the certificate/keys of one virtual host (which one cannot be said
-     * easily - but that doesn't matter here).
-     */
-    table = apr_hash_make(p);
-
-    for (s = base_server; s; s = s->next) {
-        sc = mySrvConfig(s);
-
-        if (!sc->bEnabled) {
-            continue;
-        }
-
-        key = apr_psprintf(p, "%pA:%u",
-                           &s->addrs->host_addr, s->addrs->host_port);
-        klen = strlen(key);
-
-        if ((ps = (server_rec *)apr_hash_get(table, key, klen))) {
-            ssl_log(base_server, SSL_LOG_WARN,
-                    "Init: SSL server IP/port conflict: "
-                    "%s (%s:%d) vs. %s (%s:%d)",
-                    ssl_util_vhostid(p, s), 
-                    (s->defn_name ? s->defn_name : "unknown"),
-                    s->defn_line_number,
-                    ssl_util_vhostid(p, ps),
-                    (ps->defn_name ? ps->defn_name : "unknown"), 
-                    ps->defn_line_number);
-            conflict = TRUE;
-            continue;
-        }
-
-        apr_hash_set(table, key, klen, s);
-    }
-
-    if (conflict) {
-        ssl_log(base_server, SSL_LOG_WARN,
-                "Init: You should not use name-based "
-                "virtual hosts in conjunction with SSL!!");
-    }
-}
-
-static int ssl_init_FindCAList_X509NameCmp(X509_NAME **a, X509_NAME **b)
-{
-    return(X509_NAME_cmp(*a, *b));
-}
-
-static void ssl_init_PushCAList(STACK_OF(X509_NAME) *ca_list,
-                                server_rec *s, const char *file)
-{
-    int n;
-    STACK_OF(X509_NAME) *sk;
-
-    sk = (STACK_OF(X509_NAME) *)SSL_load_client_CA_file(file);
-
-    if (!sk) {
-        return;
-    }
-
-    for (n = 0; n < sk_X509_NAME_num(sk); n++) {
-        char name_buf[256];
-        X509_NAME *name = sk_X509_NAME_value(sk, n);
-
-        ssl_log(s, SSL_LOG_TRACE,
-                "CA certificate: %s",
-                X509_NAME_oneline(name, name_buf, sizeof(name_buf)));
-
-        /*
-         * note that SSL_load_client_CA_file() checks for duplicates,
-         * but since we call it multiple times when reading a directory
-         * we must also check for duplicates ourselves.
-         */
-
-        if (sk_X509_NAME_find(ca_list, name) < 0) {
-            /* this will be freed when ca_list is */
-            sk_X509_NAME_push(ca_list, name);
-        }
-        else {
-            /* need to free this ourselves, else it will leak */
-            X509_NAME_free(name);
-        }
-    }
-
-    sk_X509_NAME_free(sk);
-}
-
-STACK_OF(X509_NAME) *ssl_init_FindCAList(server_rec *s,
-                                         apr_pool_t *ptemp,
-                                         const char *ca_file,
-                                         const char *ca_path)
-{
-    STACK_OF(X509_NAME) *ca_list;
-
-    /*
-     * Start with a empty stack/list where new
-     * entries get added in sorted order.
-     */
-    ca_list = sk_X509_NAME_new(ssl_init_FindCAList_X509NameCmp);
-
-    /*
-     * Process CA certificate bundle file
-     */
-    if (ca_file) {
-        ssl_init_PushCAList(ca_list, s, ca_file);
-    }
-
-    /*
-     * Process CA certificate path files
-     */
-    if (ca_path) {
-        apr_dir_t *dir;
-        apr_finfo_t direntry;
-        apr_int32_t finfo_flags = APR_FINFO_MIN|APR_FINFO_NAME;
-
-        if (apr_dir_open(&dir, ca_path, ptemp) != APR_SUCCESS) {
-            ssl_log(s, SSL_LOG_ERROR|SSL_ADD_ERRNO,
-                    "Init: Failed to open SSLCACertificatePath `%s'",
-                    ca_path);
-            ssl_die();
-        }
-
-        while ((apr_dir_read(&direntry, finfo_flags, dir)) == APR_SUCCESS) {
-            const char *file;
-            if (direntry.filetype == APR_DIR) {
-                continue; /* don't try to load directories */
-            }
-            file = apr_pstrcat(ptemp, ca_path, "/", direntry.name, NULL);
-            ssl_init_PushCAList(ca_list, s, file);
-        }
-
-        apr_dir_close(dir);
-    }
-
-    /*
-     * Cleanup
-     */
-    sk_X509_NAME_set_cmp_func(ca_list, NULL);
-
-    return ca_list;
-}
-
-void ssl_init_Child(apr_pool_t *p, server_rec *s)
-{
-    SSLModConfigRec *mc = myModConfig(s);
-    mc->pid = getpid(); /* only call getpid() once per-process */
-
-    /* XXX: there should be an ap_srand() function */
-    srand((unsigned int)time(NULL));
-
-    /* open the mutex lockfile */
-    ssl_mutex_reinit(s, p);
-}
-
-#define MODSSL_CFG_ITEM_FREE(func, item) \
-    if (item) { \
-        func(item); \
-        item = NULL; \
-    }
-
-apr_status_t ssl_init_ModuleKill(void *data)
-{
-    SSLSrvConfigRec *sc;
-    server_rec *base_server = (server_rec *)data;
-    server_rec *s;
-
-    /*
-     * Drop the session cache and mutex
-     */
-    ssl_scache_kill(base_server);
-
-    /* 
-     * Destroy the temporary keys and params
-     */
-    ssl_tmp_keys_free(base_server);
-
-    /*
-     * Free the non-pool allocated structures
-     * in the per-server configurations
-     */
-    for (s = base_server; s; s = s->next) {
-        int i;
-        sc = mySrvConfig(s);
-
-        for (i=0; i < SSL_AIDX_MAX; i++) {
-            MODSSL_CFG_ITEM_FREE(X509_free,
-                                 sc->pPublicCert[i]);
-
-            MODSSL_CFG_ITEM_FREE(EVP_PKEY_free,
-                                 sc->pPrivateKey[i]);
-        }
-
-        MODSSL_CFG_ITEM_FREE(X509_STORE_free,
-                             sc->pRevocationStore);
-
-        MODSSL_CFG_ITEM_FREE(SSL_CTX_free,
-                             sc->pSSLCtx);
-    }
-
-    /*
-     * Try to kill the internals of the SSL library.
-     */
-    ERR_free_strings();
-    ERR_remove_state(0);
-    EVP_cleanup();
-
-    return APR_SUCCESS;
-}
-
diff --git a/modules/ssl/ssl_engine_io.c b/modules/ssl/ssl_engine_io.c
deleted file mode 100644
index a2a338d..0000000
--- a/modules/ssl/ssl_engine_io.c
+++ /dev/null
@@ -1,994 +0,0 @@
-/*                      _             _
-**  _ __ ___   ___   __| |    ___ ___| |  mod_ssl
-** | '_ ` _ \ / _ \ / _` |   / __/ __| |  Apache Interface to OpenSSL
-** | | | | | | (_) | (_| |   \__ \__ \ |  www.modssl.org
-** |_| |_| |_|\___/ \__,_|___|___/___/_|  ftp.modssl.org
-**                      |_____|
-**  ssl_engine_io.c
-**  I/O Functions
-*/
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- */
-                             /* ``MY HACK: This universe.
-                                  Just one little problem:
-                                  core keeps dumping.''
-                                            -- Unknown    */
-#include "mod_ssl.h"
-
-/*  _________________________________________________________________
-**
-**  I/O Hooks
-**  _________________________________________________________________
-*/
-
-/* XXX THIS STUFF NEEDS A MAJOR CLEANUP -RSE XXX */
-
-/* this custom BIO allows us to hook SSL_write directly into 
- * an apr_bucket_brigade and use transient buckets with the SSL
- * malloc-ed buffer, rather than copying into a mem BIO.
- * also allows us to pass the brigade as data is being written
- * rather than buffering up the entire response in the mem BIO.
- *
- * when SSL needs to flush (e.g. SSL_accept()), it will call BIO_flush()
- * which will trigger a call to bio_bucket_ctrl() -> BIO_bucket_flush().
- * so we only need to flush the output ourselves if we receive an
- * EOS or FLUSH bucket. this was not possible with the mem BIO where we
- * had to flush all over the place not really knowing when it was required
- * to do so.
- */
-
-typedef struct {
-    SSLFilterRec *frec;
-    conn_rec *c;
-    apr_bucket_brigade *bb;
-    apr_size_t length;
-    char buffer[AP_IOBUFSIZE];
-    apr_size_t blen;
-} BIO_bucket_t;
-
-static BIO_bucket_t *BIO_bucket_new(SSLFilterRec *frec, conn_rec *c)
-{
-    BIO_bucket_t *b = apr_palloc(c->pool, sizeof(*b));
-
-    b->frec = frec;
-    b->c = c;
-    b->bb = apr_brigade_create(c->pool);
-    b->blen = 0;
-    b->length = 0;
-
-    return b;
-}
-
-#define BIO_bucket_ptr(bio) (BIO_bucket_t *)bio->ptr
-
-static int BIO_bucket_flush(BIO *bio)
-{
-    BIO_bucket_t *b = BIO_bucket_ptr(bio);
-
-    if (!(b->blen || b->length)) {
-        return APR_SUCCESS;
-    }
-
-    if (b->blen) {
-        apr_bucket *bucket = 
-            apr_bucket_transient_create(b->buffer,
-                                        b->blen);
-        /* we filled this buffer first so add it to the 
-         * head of the brigade
-         */
-        APR_BRIGADE_INSERT_HEAD(b->bb, bucket);
-        b->blen = 0;
-    }
-
-    b->length = 0;
-    APR_BRIGADE_INSERT_TAIL(b->bb, apr_bucket_flush_create());
-
-    return ap_pass_brigade(b->frec->pOutputFilter->next, b->bb);
-}
-
-static int bio_bucket_new(BIO *bio)
-{
-    bio->shutdown = 1;
-    bio->init = 1;
-    bio->num = -1;
-    bio->ptr = NULL;
-
-    return 1;
-}
-
-static int bio_bucket_free(BIO *bio)
-{
-    if (bio == NULL) {
-        return 0;
-    }
-
-    /* nothing to free here.
-     * apache will destroy the bucket brigade for us
-     */
-    return 1;
-}
-	
-static int bio_bucket_read(BIO *bio, char *out, int outl)
-{
-    /* this is never called */
-    return -1;
-}
-
-static int bio_bucket_write(BIO *bio, const char *in, int inl)
-{
-    BIO_bucket_t *b = BIO_bucket_ptr(bio);
-
-    /* when handshaking we'll have a small number of bytes.
-     * max size SSL will pass us here is about 16k.
-     * (16413 bytes to be exact)
-     */
-    BIO_clear_retry_flags(bio);
-
-    if (!b->length && (inl + b->blen < sizeof(b->buffer))) {
-        /* the first two SSL_writes (of 1024 and 261 bytes)
-         * need to be in the same packet (vec[0].iov_base)
-         */
-        /* XXX: could use apr_brigade_write() to make code look cleaner
-         * but this way we avoid the malloc(APR_BUCKET_BUFF_SIZE)
-         * and free() of it later
-         */
-        memcpy(&b->buffer[b->blen], in, inl);
-        b->blen += inl;
-    }
-    else {
-        /* pass along the encrypted data
-         * need to flush since we're using SSL's malloc-ed buffer 
-         * which will be overwritten once we leave here
-         */
-        apr_bucket *bucket = apr_bucket_transient_create(in, inl);
-
-        b->length += inl;
-        APR_BRIGADE_INSERT_TAIL(b->bb, bucket);
-
-        BIO_bucket_flush(bio);
-    }
-
-    return inl;
-}
-
-static long bio_bucket_ctrl(BIO *bio, int cmd, long num, void *ptr)
-{
-    long ret = 1;
-    char **pptr;
-
-    BIO_bucket_t *b = BIO_bucket_ptr(bio);
-
-    switch (cmd) {
-      case BIO_CTRL_RESET:
-        b->blen = b->length = 0;
-        break;
-      case BIO_CTRL_EOF:
-        ret = (long)((b->blen + b->length) == 0);
-        break;
-      case BIO_C_SET_BUF_MEM_EOF_RETURN:
-        b->blen = b->length = (apr_size_t)num;
-        break;
-      case BIO_CTRL_INFO:
-        ret = (long)(b->blen + b->length);
-        if (ptr) {
-            pptr = (char **)ptr;
-            *pptr = (char *)&(b->buffer[0]);
-        }
-        break;
-      case BIO_CTRL_GET_CLOSE:
-        ret = (long)bio->shutdown;
-        break;
-      case BIO_CTRL_SET_CLOSE:
-        bio->shutdown = (int)num;
-        break;
-      case BIO_CTRL_WPENDING:
-        ret = 0L;
-        break;
-      case BIO_CTRL_PENDING:
-        ret = (long)(b->blen + b->length);
-        break;
-      case BIO_CTRL_FLUSH:
-        ret = (BIO_bucket_flush(bio) == APR_SUCCESS);
-        break;
-      case BIO_CTRL_DUP:
-        ret = 1;
-        break;
-        /* N/A */
-      case BIO_C_SET_BUF_MEM:
-      case BIO_C_GET_BUF_MEM_PTR:
-        /* we don't care */
-      case BIO_CTRL_PUSH:
-      case BIO_CTRL_POP:
-      default:
-        ret = 0;
-        break;
-    }
-
-    return ret;
-}
-
-static int bio_bucket_gets(BIO *bio, char *buf, int size)
-{
-    /* this is never called */
-    return -1;
-}
-
-static int bio_bucket_puts(BIO *bio, const char *str)
-{
-    /* this is never called */
-    return -1;
-}
-
-static BIO_METHOD bio_bucket_method = {
-    BIO_TYPE_MEM,
-    "APR bucket brigade",
-    bio_bucket_write,
-    bio_bucket_read,
-    bio_bucket_puts,
-    bio_bucket_gets,
-    bio_bucket_ctrl,
-    bio_bucket_new,
-    bio_bucket_free,
-#ifdef OPENSSL_VERSION_NUMBER
-    NULL /* sslc does not have the callback_ctrl field */
-#endif
-};
-
-static BIO_METHOD *BIO_s_bucket(void)
-{
-    return &bio_bucket_method;
-}
-
-typedef struct {
-    int length;
-    char *value;
-} char_buffer_t;
-
-typedef struct {
-    SSL *ssl;
-    BIO *wbio;
-    ap_filter_t *f;
-    apr_status_t rc;
-    ap_input_mode_t mode;
-    apr_read_type_e block;
-    apr_bucket_brigade *bb;
-    apr_bucket *bucket;
-    char_buffer_t cbuf;
-} BIO_bucket_in_t;
-
-typedef struct {
-    BIO_bucket_in_t inbio;
-    char_buffer_t cbuf;
-    apr_pool_t *pool;
-    char buffer[AP_IOBUFSIZE];
-    SSLFilterRec *frec;
-} ssl_io_input_ctx_t;
-
-/*
- * this char_buffer api might seem silly, but we don't need to copy
- * any of this data and we need to remember the length.
- */
-static int char_buffer_read(char_buffer_t *buffer, char *in, int inl)
-{
-    if (!buffer->length) {
-        return 0;
-    }
-
-    if (buffer->length > inl) {
-        /* we have have enough to fill the caller's buffer */
-        memcpy(in, buffer->value, inl);
-        buffer->value += inl;
-        buffer->length -= inl;
-    }
-    else {
-        /* swallow remainder of the buffer */
-        memcpy(in, buffer->value, buffer->length);
-        inl = buffer->length;
-        buffer->value = NULL;
-        buffer->length = 0;
-    }
-
-    return inl;
-}
-
-static int char_buffer_write(char_buffer_t *buffer, char *in, int inl)
-{
-    buffer->value = in;
-    buffer->length = inl;
-    return inl;
-}
-
-/*
- * this is the function called by SSL_read()
- */
-#define BIO_bucket_in_ptr(bio) (BIO_bucket_in_t *)bio->ptr
-
-static int bio_bucket_in_read(BIO *bio, char *in, int inl)
-{
-    BIO_bucket_in_t *inbio = BIO_bucket_in_ptr(bio);
-    int len = 0;
-
-    /* XXX: flush here only required for SSLv2;
-     * OpenSSL calls BIO_flush() at the appropriate times for
-     * the other protocols.
-     */
-    if (SSL_version(inbio->ssl) == SSL2_VERSION) {
-        BIO_bucket_flush(inbio->wbio);
-    }
-
-    inbio->rc = APR_SUCCESS;
-    
-    /* first use data already read from socket if any */
-    if ((len = char_buffer_read(&inbio->cbuf, in, inl))) {
-        if ((len <= inl) || inbio->mode == AP_MODE_GETLINE) {
-            return len;
-        }
-        inl -= len;
-    }
-
-    while (1) {
-        const char *buf;
-        apr_size_t buf_len = 0;
-
-        if (inbio->bucket) {
-            /* all of the data in this bucket has been read,
-             * so we can delete it now.
-             */
-            apr_bucket_delete(inbio->bucket);
-            inbio->bucket = NULL;
-        }
-
-        if (APR_BRIGADE_EMPTY(inbio->bb)) {
-            /* We will always call with READBYTES even if the user wants
-             * GETLINE.
-             */
-            inbio->rc = ap_get_brigade(inbio->f->next, inbio->bb,
-                                       AP_MODE_READBYTES, inbio->block, 
-                                       inl);
-
-            if ((inbio->rc != APR_SUCCESS) || APR_BRIGADE_EMPTY(inbio->bb))
-            {
-                break;
-            }
-        }
-
-        inbio->bucket = APR_BRIGADE_FIRST(inbio->bb);
-
-        inbio->rc = apr_bucket_read(inbio->bucket,
-                                    &buf, &buf_len, inbio->block);
-
-        if (inbio->rc != APR_SUCCESS) {
-            apr_bucket_delete(inbio->bucket);
-            inbio->bucket = NULL;
-            return len;
-        }
-
-        if (buf_len) {
-            /* Protected against len > MAX_INT 
-             */
-            if ((len + (int)buf_len) >= inl || (int)buf_len < 0) {
-                /* we have enough to fill the buffer.
-                 * append if we have already written to the buffer.
-                 */
-                int nibble = inl - len;
-                char *value = (char *)buf+nibble;
-
-                int length = buf_len - nibble;
-                memcpy(in + len, buf, nibble);
-
-                char_buffer_write(&inbio->cbuf, value, length);
-                len += nibble;
-
-                break;
-            }
-            else {
-                /* not enough data,
-                 * save what we have and try to read more.
-                 */
-                memcpy(in + len, buf, buf_len);
-                len += buf_len;
-            }
-        }
-
-        if (inbio->mode == AP_MODE_GETLINE) {
-            /* only read from the socket once in getline mode.
-             * since callers buffer size is likely much larger than
-             * the request headers.  caller can always come back for more
-             * if first read didn't get all the headers.
-             */
-            break;
-        }
-    }
-
-    return len;
-}
-
-static BIO_METHOD bio_bucket_in_method = {
-    BIO_TYPE_MEM,
-    "APR input bucket brigade",
-    NULL,                       /* write is never called */
-    bio_bucket_in_read,
-    NULL,                       /* puts is never called */
-    NULL,                       /* gets is never called */
-    NULL,                       /* ctrl is never called */
-    bio_bucket_new,
-    bio_bucket_free,
-#ifdef OPENSSL_VERSION_NUMBER
-    NULL /* sslc does not have the callback_ctrl field */
-#endif
-};
-
-static BIO_METHOD *BIO_s_in_bucket(void)
-{
-    return &bio_bucket_in_method;
-}
-
-static const char ssl_io_filter[] = "SSL/TLS Filter";
-
-static int ssl_io_hook_read(SSL *ssl, char *buf, int len)
-{
-    int rc;
-
-    if (ssl == NULL) {
-        return -1;
-    }
-
-    rc = SSL_read(ssl, buf, len);
-
-    if (rc < 0) {
-        int ssl_err = SSL_get_error(ssl, rc);
-
-        if (ssl_err == SSL_ERROR_WANT_READ) {
-            /*
-             * Simulate an EINTR in case OpenSSL wants to read more.
-             * (This is usually the case when the client forces an SSL
-             * renegotation which is handled implicitly by OpenSSL.)
-             */
-            errno = EINTR;
-        }
-        else if (ssl_err == SSL_ERROR_SSL) {
-            /*
-             * Log SSL errors
-             */
-            conn_rec *c = (conn_rec *)SSL_get_app_data(ssl);
-            ssl_log(c->base_server, SSL_LOG_ERROR|SSL_ADD_SSLERR,
-                    "SSL error on reading data");
-        }
-        /*
-         * XXX - Just trying to reflect the behaviour in 
-         * openssl_state_machine.c [mod_tls]. TBD
-         */
-        rc = -1;
-    }
-    return rc;
-}
-
-static int ssl_io_hook_write(SSL *ssl, unsigned char *buf, int len)
-{
-    int rc;
-
-    if (ssl == NULL) {
-        return -1;
-    }
-
-    rc = SSL_write(ssl, buf, len);
-
-    if (rc < 0) {
-        int ssl_err = SSL_get_error(ssl, rc);
-
-        if (ssl_err == SSL_ERROR_WANT_WRITE) {
-            /*
-             * Simulate an EINTR in case OpenSSL wants to write more.
-             */
-            errno = EINTR;
-        }
-        else if (ssl_err == SSL_ERROR_SSL) {
-            /*
-             * Log SSL errors
-             */
-            conn_rec *c = (conn_rec *)SSL_get_app_data(ssl);
-            ssl_log(c->base_server, SSL_LOG_ERROR|SSL_ADD_SSLERR,
-                    "SSL error on writing data");
-        }
-        /*
-         * XXX - Just trying to reflect the behaviour in 
-         * openssl_state_machine.c [mod_tls]. TBD
-         */
-        rc = 0;
-    }
-    return rc;
-}
-
-static apr_status_t ssl_filter_write(ap_filter_t *f,
-                                     const char *data,
-                                     apr_size_t len)
-{
-    SSLFilterRec *ctx = f->ctx;
-    apr_size_t n;
-
-    /* write SSL */
-    n = ssl_io_hook_write(ctx->pssl, (unsigned char *)data, len);
-
-    if (n != len) {
-        conn_rec *c = f->c;
-        char *reason = "reason unknown";
-
-        /* XXX: probably a better way to determine this */
-        if (SSL_total_renegotiations(ctx->pssl)) {
-            reason = "likely due to failed renegotiation";
-        }
-
-        ssl_log(c->base_server, SSL_LOG_ERROR,
-                "failed to write %d of %d bytes (%s)",
-                n > 0 ? len - n : len, len, reason);
-
-        return APR_EINVAL;
-    }
-
-    return APR_SUCCESS;
-}
-
-static apr_status_t ssl_io_filter_Output(ap_filter_t *f,
-                                         apr_bucket_brigade *bb)
-{
-    apr_status_t status = APR_SUCCESS;
-
-    while (!APR_BRIGADE_EMPTY(bb)) {
-        apr_bucket *bucket = APR_BRIGADE_FIRST(bb);
-
-        /* If it is a flush or EOS, we need to pass this down. 
-         * These types do not require translation by OpenSSL.  
-         */
-        if (APR_BUCKET_IS_EOS(bucket) || APR_BUCKET_IS_FLUSH(bucket)) {
-            SSLFilterRec *ctx = f->ctx;
-
-            if ((status = BIO_bucket_flush(ctx->pbioWrite)) != APR_SUCCESS) {
-                return status;
-            }
-
-            if (APR_BUCKET_IS_EOS(bucket)) {
-                /* By definition, nothing can come after EOS.
-                 * which also means we can pass the rest of this brigade
-                 * without creating a new one since it only contains the
-                 * EOS bucket.
-                 */
-
-                if ((status = ap_pass_brigade(f->next, bb)) != APR_SUCCESS) {
-                    return status;
-                }
-                break;
-            }
-            else {
-                /* BIO_bucket_flush() already passed down a flush bucket
-                 * if there was any data to be flushed.
-                 */
-                apr_bucket_delete(bucket);
-            }
-        }
-        else {
-            /* read filter */
-            const char *data;
-            apr_size_t len;
-
-            apr_bucket_read(bucket, &data, &len, APR_BLOCK_READ);
-            status = ssl_filter_write(f, data, len);
-            apr_bucket_delete(bucket);
-
-            if (status != APR_SUCCESS) {
-                break;
-            }
-        }
-    }
-
-    return status;
-}
-
-/*
- * ctx->cbuf is leftover plaintext from ssl_io_input_getline,
- * use what we have there first if any,
- * then go for more by calling ssl_io_hook_read.
- */
-static apr_status_t ssl_io_input_read(ssl_io_input_ctx_t *ctx,
-                                      char *buf,
-                                      apr_size_t *len)
-{
-    apr_size_t wanted = *len;
-    apr_size_t bytes = 0;
-    int rc;
-
-    *len = 0;
-
-    if ((bytes = char_buffer_read(&ctx->cbuf, buf, wanted))) {
-        *len = bytes;
-        if (ctx->inbio.mode == AP_MODE_SPECULATIVE) {
-            /* We want to rollback this read. */
-            ctx->cbuf.value -= bytes;
-            ctx->cbuf.length += bytes;
-            return APR_SUCCESS;
-        } 
-        if ((*len >= wanted) || ctx->inbio.mode == AP_MODE_GETLINE) {
-            return APR_SUCCESS;
-        }
-    }
-
-    rc = ssl_io_hook_read(ctx->frec->pssl, buf + bytes, wanted - bytes);
-
-    if (rc > 0) {
-        *len += rc;
-        if (ctx->inbio.mode == AP_MODE_SPECULATIVE) {
-            char_buffer_write(&ctx->cbuf, buf, rc);
-        }
-    }
-
-    return ctx->inbio.rc;
-}
-
-static apr_status_t ssl_io_input_getline(ssl_io_input_ctx_t *ctx,
-                                         char *buf,
-                                         apr_size_t *len)
-{
-    const char *pos = NULL;
-    apr_status_t status;
-    apr_size_t tmplen = *len, buflen = *len, offset = 0;
-
-    *len = 0;
-
-    /*
-     * in most cases we get all the headers on the first SSL_read.
-     * however, in certain cases SSL_read will only get a partial
-     * chunk of the headers, so we try to read until LF is seen.
-     */
-
-    while (tmplen > 0) {
-        status = ssl_io_input_read(ctx, buf + offset, &tmplen);
-        
-        if (status != APR_SUCCESS) {
-            return status;
-        }
-
-        *len += tmplen;
-
-        if ((pos = memchr(buf, APR_ASCII_LF, *len))) {
-            break;
-        }
-
-        offset += tmplen;
-        tmplen = buflen - offset;
-    }
-
-    if (pos) {
-        char *value;
-        int length;
-        apr_size_t bytes = pos - buf;
-
-        bytes += 1;
-        value = buf + bytes;
-        length = *len - bytes;
-
-        char_buffer_write(&ctx->cbuf, value, length);
-
-        *len = bytes;
-    }
-
-    return APR_SUCCESS;
-}
-
-#define HTTP_ON_HTTPS_PORT \
-    "GET /mod_ssl:error:HTTP-request HTTP/1.0\r\n\r\n"
-
-#define HTTP_ON_HTTPS_PORT_BUCKET() \
-    apr_bucket_immortal_create(HTTP_ON_HTTPS_PORT, \
-                               sizeof(HTTP_ON_HTTPS_PORT) - 1)
-
-static apr_status_t ssl_io_filter_error(ap_filter_t *f,
-                                        apr_bucket_brigade *bb,
-                                        apr_status_t status)
-{
-    apr_bucket *bucket;
-
-    switch (status) {
-      case HTTP_BAD_REQUEST:
-            /* log the situation */
-            ssl_log(f->c->base_server, SSL_LOG_ERROR|SSL_ADD_SSLERR,
-                    "SSL handshake failed: HTTP spoken on HTTPS port; "
-                    "trying to send HTML error page");
-
-            /* fake the request line */
-            bucket = HTTP_ON_HTTPS_PORT_BUCKET();
-            break;
-
-      default:
-        return status;
-    }
-
-    APR_BRIGADE_INSERT_TAIL(bb, bucket);
-
-    return APR_SUCCESS;
-}
-
-static apr_status_t ssl_io_filter_Input(ap_filter_t *f,
-                                        apr_bucket_brigade *bb,
-                                        ap_input_mode_t mode,
-                                        apr_read_type_e block,
-                                        apr_off_t readbytes)
-{
-    apr_status_t status;
-    ssl_io_input_ctx_t *ctx = f->ctx;
-
-    apr_size_t len = sizeof(ctx->buffer);
-    int is_init = (mode == AP_MODE_INIT);
-
-    /* XXX: we don't currently support anything other than these modes. */
-    if (mode != AP_MODE_READBYTES && mode != AP_MODE_GETLINE && 
-        mode != AP_MODE_SPECULATIVE && mode != AP_MODE_INIT) {
-        return APR_ENOTIMPL;
-    }
-
-    ctx->inbio.mode = mode;
-    ctx->inbio.block = block;
-
-    /* XXX: we could actually move ssl_hook_process_connection to an
-     * ap_hook_process_connection but would still need to call it for
-     * AP_MODE_INIT for protocols that may upgrade the connection
-     * rather than have SSLEngine On configured.
-     */
-    status = ssl_hook_process_connection(ctx->frec);
-
-    if (status != APR_SUCCESS) {
-        return ssl_io_filter_error(f, bb, status);
-    }
-
-    if (is_init) {
-        /* protocol module needs to handshake before sending
-         * data to client (e.g. NNTP or FTP)
-         */
-        return APR_SUCCESS;
-    }
-
-    if (ctx->inbio.mode == AP_MODE_READBYTES || 
-        ctx->inbio.mode == AP_MODE_SPECULATIVE) {
-        /* Protected from truncation, readbytes < MAX_SIZE_T 
-         * FIXME: No, it's *not* protected.  -- jre */
-        if (readbytes < len) {
-            len = (apr_size_t)readbytes;
-        }
-        status = ssl_io_input_read(ctx, ctx->buffer, &len);
-    }
-    else if (ctx->inbio.mode == AP_MODE_GETLINE) {
-        status = ssl_io_input_getline(ctx, ctx->buffer, &len);
-    }
-    else {
-        /* We have no idea what you are talking about, so return an error. */
-        return APR_ENOTIMPL;
-    }
-
-    if (status != APR_SUCCESS) {
-        return ssl_io_filter_error(f, bb, status);
-    }
-
-    if (len > 0) {
-        apr_bucket *bucket =
-            apr_bucket_transient_create(ctx->buffer, len);
-        APR_BRIGADE_INSERT_TAIL(bb, bucket);
-    }
-
-    return APR_SUCCESS;
-}
-
-static void ssl_io_input_add_filter(SSLFilterRec *frec, conn_rec *c,
-                                    SSL *ssl)
-{
-    ssl_io_input_ctx_t *ctx;
-
-    ctx = apr_palloc(c->pool, sizeof(*ctx));
-
-    frec->pInputFilter = ap_add_input_filter(ssl_io_filter, ctx, NULL, c);
-
-    frec->pbioRead = BIO_new(BIO_s_in_bucket());
-    frec->pbioRead->ptr = &ctx->inbio;
-
-    ctx->frec = frec;
-    ctx->inbio.ssl = ssl;
-    ctx->inbio.wbio = frec->pbioWrite;
-    ctx->inbio.f = frec->pInputFilter;
-    ctx->inbio.bb = apr_brigade_create(c->pool);
-    ctx->inbio.bucket = NULL;
-    ctx->inbio.cbuf.length = 0;
-
-    ctx->cbuf.length = 0;
-
-    ctx->pool = c->pool;
-}
-
-static apr_status_t ssl_io_filter_cleanup (void *data)
-{
-    apr_status_t ret;
-    SSLFilterRec *pRec = (SSLFilterRec *)data;
-
-    if (!pRec->pssl) {
-        /* already been shutdown */
-        return APR_SUCCESS;
-    }
-
-    if ((ret = ssl_hook_CloseConnection(pRec)) != APR_SUCCESS) {
-        ap_log_error(APLOG_MARK, APLOG_ERR, ret, NULL,
-                     "Error in ssl_hook_CloseConnection");
-    }
-
-    return ret;
-}
-
-void ssl_io_filter_init(conn_rec *c, SSL *ssl)
-{
-    SSLSrvConfigRec *sc = mySrvConfig(c->base_server);
-    SSLFilterRec *filter;
-
-    filter = apr_palloc(c->pool, sizeof(SSLFilterRec));
-
-    filter->pOutputFilter   = ap_add_output_filter(ssl_io_filter,
-                                                   filter, NULL, c);
-
-    filter->pbioWrite       = BIO_new(BIO_s_bucket());
-    filter->pbioWrite->ptr  = BIO_bucket_new(filter, c);
-
-    ssl_io_input_add_filter(filter, c, ssl);
-
-    SSL_set_bio(ssl, filter->pbioRead, filter->pbioWrite);
-    filter->pssl            = ssl;
-
-    apr_pool_cleanup_register(c->pool, (void*)filter,
-                              ssl_io_filter_cleanup, apr_pool_cleanup_null);
-
-    if (sc->nLogLevel >= SSL_LOG_DEBUG) {
-        BIO_set_callback(SSL_get_rbio(ssl), ssl_io_data_cb);
-        BIO_set_callback_arg(SSL_get_rbio(ssl), ssl);
-    }
-
-    return;
-}
-
-void ssl_io_filter_register(apr_pool_t *p)
-{
-    ap_register_input_filter  (ssl_io_filter, ssl_io_filter_Input,  AP_FTYPE_CONNECTION + 5);
-    ap_register_output_filter (ssl_io_filter, ssl_io_filter_Output, AP_FTYPE_CONNECTION + 5);
-    return;
-}
-
-/*  _________________________________________________________________
-**
-**  I/O Data Debugging
-**  _________________________________________________________________
-*/
-
-#define DUMP_WIDTH 16
-
-static void ssl_io_data_dump(server_rec *srvr, const char *s, long len)
-{
-    char buf[256];
-    char tmp[64];
-    int i, j, rows, trunc;
-    unsigned char ch;
-
-    trunc = 0;
-    for(; (len > 0) && ((s[len-1] == ' ') || (s[len-1] == '\0')); len--)
-        trunc++;
-    rows = (len / DUMP_WIDTH);
-    if ((rows * DUMP_WIDTH) < len)
-        rows++;
-    ssl_log(srvr, SSL_LOG_DEBUG|SSL_NO_TIMESTAMP|SSL_NO_LEVELID,
-            "+-------------------------------------------------------------------------+");
-    for(i = 0 ; i< rows; i++) {
-        apr_snprintf(tmp, sizeof(tmp), "| %04x: ", i * DUMP_WIDTH);
-        apr_cpystrn(buf, tmp, sizeof(buf));
-        for (j = 0; j < DUMP_WIDTH; j++) {
-            if (((i * DUMP_WIDTH) + j) >= len)
-                apr_cpystrn(buf+strlen(buf), "   ", sizeof(buf)-strlen(buf));
-            else {
-                ch = ((unsigned char)*((char *)(s) + i * DUMP_WIDTH + j)) & 0xff;
-                apr_snprintf(tmp, sizeof(tmp), "%02x%c", ch , j==7 ? '-' : ' ');
-                apr_cpystrn(buf+strlen(buf), tmp, sizeof(buf)-strlen(buf));
-            }
-        }
-        apr_cpystrn(buf+strlen(buf), " ", sizeof(buf)-strlen(buf));
-        for (j = 0; j < DUMP_WIDTH; j++) {
-            if (((i * DUMP_WIDTH) + j) >= len)
-                apr_cpystrn(buf+strlen(buf), " ", sizeof(buf)-strlen(buf));
-            else {
-                ch = ((unsigned char)*((char *)(s) + i * DUMP_WIDTH + j)) & 0xff;
-                apr_snprintf(tmp, sizeof(tmp), "%c", ((ch >= ' ') && (ch <= '~')) ? ch : '.');
-                apr_cpystrn(buf+strlen(buf), tmp, sizeof(buf)-strlen(buf));
-            }
-        }
-        apr_cpystrn(buf+strlen(buf), " |", sizeof(buf)-strlen(buf));
-        ssl_log(srvr, SSL_LOG_DEBUG|SSL_NO_TIMESTAMP|SSL_NO_LEVELID, "%s", buf);
-    }
-    if (trunc > 0)
-        ssl_log(srvr, SSL_LOG_DEBUG|SSL_NO_TIMESTAMP|SSL_NO_LEVELID,
-                "| %04x - <SPACES/NULS>", len + trunc);
-    ssl_log(srvr, SSL_LOG_DEBUG|SSL_NO_TIMESTAMP|SSL_NO_LEVELID,
-            "+-------------------------------------------------------------------------+");
-    return;
-}
-
-long ssl_io_data_cb(BIO *bio, int cmd, const char *argp, int argi, long argl, long rc)
-{
-    SSL *ssl;
-    conn_rec *c;
-    server_rec *s;
-
-    if ((ssl = (SSL *)BIO_get_callback_arg(bio)) == NULL)
-        return rc;
-    if ((c = (conn_rec *)SSL_get_app_data(ssl)) == NULL)
-        return rc;
-    s = c->base_server;
-
-    if (   cmd == (BIO_CB_WRITE|BIO_CB_RETURN)
-        || cmd == (BIO_CB_READ |BIO_CB_RETURN) ) {
-        if (rc >= 0) {
-            ssl_log(s, SSL_LOG_DEBUG,
-                    "%s: %s %ld/%d bytes %s BIO#%08X [mem: %08lX] %s",
-                    SSL_LIBRARY_NAME,
-                    (cmd == (BIO_CB_WRITE|BIO_CB_RETURN) ? "write" : "read"),
-                    rc, argi, (cmd == (BIO_CB_WRITE|BIO_CB_RETURN) ? "to" : "from"),
-                    bio, argp,
-                    (argp != NULL ? "(BIO dump follows)" : "(Ops, no memory buffer?)"));
-            if (argp != NULL)
-                ssl_io_data_dump(s, argp, rc);
-        }
-        else {
-            ssl_log(s, SSL_LOG_DEBUG,
-                    "%s: I/O error, %d bytes expected to %s on BIO#%08X [mem: %08lX]",
-                    SSL_LIBRARY_NAME, argi,
-                    (cmd == (BIO_CB_WRITE|BIO_CB_RETURN) ? "write" : "read"),
-                    bio, argp);
-        }
-    }
-    return rc;
-}
diff --git a/modules/ssl/ssl_engine_kernel.c b/modules/ssl/ssl_engine_kernel.c
deleted file mode 100644
index ac1caca..0000000
--- a/modules/ssl/ssl_engine_kernel.c
+++ /dev/null
@@ -1,1799 +0,0 @@
-/*                      _             _
-**  _ __ ___   ___   __| |    ___ ___| |  mod_ssl
-** | '_ ` _ \ / _ \ / _` |   / __/ __| |  Apache Interface to OpenSSL
-** | | | | | | (_) | (_| |   \__ \__ \ |  www.modssl.org
-** |_| |_| |_|\___/ \__,_|___|___/___/_|  ftp.modssl.org
-**                      |_____|
-**  ssl_engine_kernel.c
-**  The SSL engine kernel
-*/
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- */
-                             /* ``It took me fifteen years to discover
-                                  I had no talent for programming, but
-                                  I couldn't give it up because by that
-                                  time I was too famous.''
-                                            -- Unknown                */
-#include "mod_ssl.h"
-
-/*
- *  Close the SSL part of the socket connection
- *  (called immediately _before_ the socket is closed)
- */
-/* XXX: perhaps ssl_abort() should call us or vice-versa
- * lot of the same happening in both places
- */
-apr_status_t ssl_hook_CloseConnection(SSLFilterRec *filter)
-{
-    SSL *ssl = filter->pssl;
-    const char *type = "";
-    conn_rec *conn;
-    SSLConnRec *sslconn;
-
-    if (!ssl) {
-        return APR_SUCCESS;
-    }
-
-    conn = (conn_rec *)SSL_get_app_data(ssl);
-    sslconn = myConnConfig(conn);
-
-    /*
-     * Now close the SSL layer of the connection. We've to take
-     * the TLSv1 standard into account here:
-     *
-     * | 7.2.1. Closure alerts
-     * |
-     * | The client and the server must share knowledge that the connection is
-     * | ending in order to avoid a truncation attack. Either party may
-     * | initiate the exchange of closing messages.
-     * |
-     * | close_notify
-     * |     This message notifies the recipient that the sender will not send
-     * |     any more messages on this connection. The session becomes
-     * |     unresumable if any connection is terminated without proper
-     * |     close_notify messages with level equal to warning.
-     * |
-     * | Either party may initiate a close by sending a close_notify alert.
-     * | Any data received after a closure alert is ignored.
-     * |
-     * | Each party is required to send a close_notify alert before closing
-     * | the write side of the connection. It is required that the other party
-     * | respond with a close_notify alert of its own and close down the
-     * | connection immediately, discarding any pending writes. It is not
-     * | required for the initiator of the close to wait for the responding
-     * | close_notify alert before closing the read side of the connection.
-     *
-     * This means we've to send a close notify message, but haven't to wait
-     * for the close notify of the client. Actually we cannot wait for the
-     * close notify of the client because some clients (including Netscape
-     * 4.x) don't send one, so we would hang.
-     */
-
-    /*
-     * exchange close notify messages, but allow the user
-     * to force the type of handshake via SetEnvIf directive
-     */
-    switch (sslconn->shutdown_type) {
-      case SSL_SHUTDOWN_TYPE_UNSET:
-      case SSL_SHUTDOWN_TYPE_STANDARD:
-        /* send close notify, but don't wait for clients close notify
-           (standard compliant and safe, so it's the DEFAULT!) */
-        SSL_set_shutdown(ssl, SSL_RECEIVED_SHUTDOWN);
-        type = "standard";
-        break;
-      case SSL_SHUTDOWN_TYPE_UNCLEAN:
-        /* perform no close notify handshake at all
-           (violates the SSL/TLS standard!) */
-        SSL_set_shutdown(ssl, SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN);
-        type = "unclean";
-        break;
-      case SSL_SHUTDOWN_TYPE_ACCURATE:
-        /* send close notify and wait for clients close notify
-           (standard compliant, but usually causes connection hangs) */
-        SSL_set_shutdown(ssl, 0);
-        type = "accurate";
-        break;
-    }
-
-    SSL_smart_shutdown(ssl);
-
-    /* and finally log the fact that we've closed the connection */
-    if (SSLConnLogApplies(sslconn, SSL_LOG_INFO)) {
-        ssl_log(conn->base_server, SSL_LOG_INFO,
-                "Connection to child %d closed with %s shutdown"
-                "(server %s, client %s)",
-                conn->id, type,
-                ssl_util_vhostid(conn->pool, conn->base_server),
-                conn->remote_ip ? conn->remote_ip : "unknown");
-    }
-
-    /* deallocate the SSL connection */
-    SSL_free(ssl);
-    sslconn->ssl = NULL;
-    filter->pssl = NULL; /* so filters know we've been shutdown */
-
-    return APR_SUCCESS;
-}
-
-/*
- *  Post Read Request Handler
- */
-int ssl_hook_ReadReq(request_rec *r)
-{
-    SSLConnRec *sslconn = myConnConfig(r->connection);
-    SSL *ssl;
-
-    if (!sslconn) {
-        return DECLINED;
-    }
-
-    /*
-     * Get the SSL connection structure and perform the
-     * delayed interlinking from SSL back to request_rec
-     */
-    if ((ssl = sslconn->ssl)) {
-        SSL_set_app_data2(ssl, r);
-    }
-
-    /*
-     * Force the mod_ssl content handler when URL indicates this
-     */
-    if (strEQn(r->uri, "/mod_ssl:", 9)) {
-        r->handler = "mod_ssl:content-handler";
-    }
-
-    return DECLINED;
-}
-
-/*
- * Move SetEnvIf information from request_rec to conn_rec/BUFF
- * to allow the close connection handler to use them.
- */
-
-static void ssl_configure_env(request_rec *r, SSLConnRec *sslconn)
-{
-    int i;
-    const apr_array_header_t *arr = apr_table_elts(r->subprocess_env);
-    const apr_table_entry_t *elts = (const apr_table_entry_t *)arr->elts;
-
-    sslconn->shutdown_type = SSL_SHUTDOWN_TYPE_STANDARD;
-
-    for (i = 0; i < arr->nelts; i++) {
-        const char *key = elts[i].key;
-
-        switch (*key) {
-          case 's':
-            /* being case-sensitive here.
-             * and not checking for the -shutdown since these are the only
-             * SetEnvIf "flags" we support
-             */
-            if (!strncmp(key+1, "sl-", 3)) {
-                key += 4;
-                if (!strncmp(key, "unclean", 7)) {
-                    sslconn->shutdown_type = SSL_SHUTDOWN_TYPE_UNCLEAN;
-                }
-                else if (!strncmp(key, "accurate", 8)) {
-                    sslconn->shutdown_type = SSL_SHUTDOWN_TYPE_ACCURATE;
-                }
-                return; /* should only ever be one ssl-*-shutdown */
-            }
-            break;
-        }
-    }
-}
-
-/*
- *  URL Translation Handler
- */
-int ssl_hook_Translate(request_rec *r)
-{
-    SSLConnRec *sslconn = myConnConfig(r->connection);
-
-    if (!(sslconn && sslconn->ssl)) {
-        return DECLINED;
-    }
-
-    /*
-     * Log information about incoming HTTPS requests
-     */
-    if (SSLConnLogApplies(sslconn, SSL_LOG_INFO) && ap_is_initial_req(r)) {
-        ssl_log(r->server, SSL_LOG_INFO,
-                "%s HTTPS request received for child %d (server %s)",
-                (r->connection->keepalives <= 0 ?
-                 "Initial (No.1)" :
-                 apr_psprintf(r->pool, "Subsequent (No.%d)",
-                              r->connection->keepalives+1)),
-                r->connection->id,
-                ssl_util_vhostid(r->pool, r->server));
-    }
-
-    /* SetEnvIf ssl-*-shutdown flags can only be per-server,
-     * so they won't change across keepalive requests
-     */
-    if (sslconn->shutdown_type == SSL_SHUTDOWN_TYPE_UNSET) {
-        ssl_configure_env(r, sslconn);
-    }
-
-    return DECLINED;
-}
-
-/*
- *  Content Handler
- */
-int ssl_hook_Handler(request_rec *r)
-{
-    if (strNE(r->handler, "mod_ssl:content-handler")) {
-        return DECLINED;
-    }
-
-    if (strNEn(r->uri, "/mod_ssl:", 9)) {
-        return DECLINED;
-    }
-
-    if (strEQ(r->uri, "/mod_ssl:error:HTTP-request")) {
-        const char *errmsg;
-        char *thisurl;
-        char *thisport = "";
-        int port = ap_get_server_port(r);
-
-        if (!ap_is_default_port(port, r)) {
-            thisport = apr_psprintf(r->pool, ":%u", port);
-        }
-
-        thisurl = ap_escape_html(r->pool,
-                                 apr_psprintf(r->pool, "https://%s%s/",
-                                              ap_get_server_name(r),
-                                              thisport));
-
-        errmsg = apr_psprintf(r->pool,
-                              "Reason: You're speaking plain HTTP "
-                              "to an SSL-enabled server port.<br />\n"
-                              "Instead use the HTTPS scheme to access "
-                              "this URL, please.<br />\n"
-                              "<blockquote>Hint: "
-                              "<a href=\"%s\"><b>%s</b></a></blockquote>",
-                              thisurl, thisurl);
-
-        apr_table_setn(r->notes, "error-notes", errmsg);
-    }
-
-    return HTTP_BAD_REQUEST;
-}
-
-/*
- *  Access Handler
- */
-int ssl_hook_Access(request_rec *r)
-{
-    SSLDirConfigRec *dc = myDirConfig(r);
-    SSLSrvConfigRec *sc = mySrvConfig(r->server);
-    SSLConnRec *sslconn = myConnConfig(r->connection);
-    SSL *ssl            = sslconn ? sslconn->ssl : NULL;
-    SSL_CTX *ctx = NULL;
-    apr_array_header_t *requires;
-    ssl_require_t *ssl_requires;
-    char *cp;
-    int ok, i;
-    BOOL renegotiate = FALSE, renegotiate_quick = FALSE;
-#ifdef SSL_EXPERIMENTAL_PERDIRCA
-    BOOL reconfigured_locations = FALSE;
-    STACK_OF(X509_NAME) *ca_list;
-    char *ca_path, *ca_file;
-#endif
-    X509 *cert;
-    STACK_OF(X509) *cert_stack;
-    X509_STORE *cert_store;
-    X509_STORE_CTX cert_store_ctx;
-    STACK_OF(SSL_CIPHER) *cipher_list_old, *cipher_list = NULL;
-    SSL_CIPHER *cipher = NULL;
-    int depth, verify_old, verify, n;
-
-    if (ssl) {
-        ctx = SSL_get_SSL_CTX(ssl);
-    }
-
-    /*
-     * Support for SSLRequireSSL directive
-     */
-    if (dc->bSSLRequired && !ssl) {
-        ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r, 
-                      "access to %s failed, reason: %s",
-                      r->filename, "SSL connection required");
-
-        /* remember forbidden access for strict require option */
-        apr_table_setn(r->notes, "ssl-access-forbidden", "1");
-
-        return HTTP_FORBIDDEN;
-    }
-
-    /*
-     * Check to see if SSL protocol is on
-     */
-    if (!(sc->bEnabled || ssl)) {
-        return DECLINED;
-    }
-    /*
-     * Support for per-directory reconfigured SSL connection parameters.
-     *
-     * This is implemented by forcing an SSL renegotiation with the
-     * reconfigured parameter suite. But Apache's internal API processing
-     * makes our life very hard here, because when internal sub-requests occur
-     * we nevertheless should avoid multiple unnecessary SSL handshakes (they
-     * require extra network I/O and especially time to perform). 
-     * 
-     * But the optimization for filtering out the unnecessary handshakes isn't
-     * obvious and trivial.  Especially because while Apache is in its
-     * sub-request processing the client could force additional handshakes,
-     * too. And these take place perhaps without our notice. So the only
-     * possibility is to explicitly _ask_ OpenSSL whether the renegotiation
-     * has to be performed or not. It has to performed when some parameters
-     * which were previously known (by us) are not those we've now
-     * reconfigured (as known by OpenSSL) or (in optimized way) at least when
-     * the reconfigured parameter suite is stronger (more restrictions) than
-     * the currently active one.
-     */
-
-    /*
-     * Override of SSLCipherSuite
-     *
-     * We provide two options here:
-     *
-     * o The paranoid and default approach where we force a renegotiation when
-     *   the cipher suite changed in _any_ way (which is straight-forward but
-     *   often forces renegotiations too often and is perhaps not what the
-     *   user actually wanted).
-     *
-     * o The optimized and still secure way where we force a renegotiation
-     *   only if the currently active cipher is no longer contained in the
-     *   reconfigured/new cipher suite. Any other changes are not important
-     *   because it's the servers choice to select a cipher from the ones the
-     *   client supports. So as long as the current cipher is still in the new
-     *   cipher suite we're happy. Because we can assume we would have
-     *   selected it again even when other (better) ciphers exists now in the
-     *   new cipher suite. This approach is fine because the user explicitly
-     *   has to enable this via ``SSLOptions +OptRenegotiate''. So we do no
-     *   implicit optimizations.
-     */
-    if (dc->szCipherSuite) {
-        /* remember old state */
-
-        if (dc->nOptions & SSL_OPT_OPTRENEGOTIATE) {
-            cipher = SSL_get_current_cipher(ssl);
-        }
-        else {
-            cipher_list_old = (STACK_OF(SSL_CIPHER) *)SSL_get_ciphers(ssl);
-
-            if (cipher_list_old) {
-                cipher_list_old = sk_SSL_CIPHER_dup(cipher_list_old);
-            }
-        }
-
-        /* configure new state */
-        if (!SSL_set_cipher_list(ssl, dc->szCipherSuite)) {
-            ssl_log(r->server, SSL_LOG_WARN|SSL_ADD_SSLERR,
-                    "Unable to reconfigure (per-directory) "
-                    "permitted SSL ciphers");
-
-            if (cipher_list_old) {
-                sk_SSL_CIPHER_free(cipher_list_old);
-            }
-
-            return HTTP_FORBIDDEN;
-        }
-
-        /* determine whether a renegotiation has to be forced */
-        cipher_list = (STACK_OF(SSL_CIPHER) *)SSL_get_ciphers(ssl);
-
-        if (dc->nOptions & SSL_OPT_OPTRENEGOTIATE) {
-            /* optimized way */
-            if ((!cipher && cipher_list) ||
-                (cipher && !cipher_list))
-            {
-                renegotiate = TRUE;
-            }
-            else if (cipher && cipher_list &&
-                     (sk_SSL_CIPHER_find(cipher_list, cipher) < 0))
-            {
-                renegotiate = TRUE;
-            }
-        }
-        else {
-            /* paranoid way */
-            if ((!cipher_list_old && cipher_list) ||
-                (cipher_list_old && !cipher_list))
-            {
-                renegotiate = TRUE;
-            }
-            else if (cipher_list_old && cipher_list) {
-                for (n = 0;
-                     !renegotiate && (n < sk_SSL_CIPHER_num(cipher_list));
-                     n++)
-                {
-                    SSL_CIPHER *value = sk_SSL_CIPHER_value(cipher_list, n);
-
-                    if (sk_SSL_CIPHER_find(cipher_list_old, value) < 0) {
-                        renegotiate = TRUE;
-                    }
-                }
-
-                for (n = 0;
-                     !renegotiate && (n < sk_SSL_CIPHER_num(cipher_list_old));
-                     n++)
-                {
-                    SSL_CIPHER *value = sk_SSL_CIPHER_value(cipher_list_old, n);
-
-                    if (sk_SSL_CIPHER_find(cipher_list, value) < 0) {
-                        renegotiate = TRUE;
-                    }
-                }
-            }
-        }
-
-        /* cleanup */
-        if (cipher_list_old) {
-            sk_SSL_CIPHER_free(cipher_list_old);
-        }
-
-        /* tracing */
-        if (renegotiate) {
-            ssl_log(r->server, SSL_LOG_TRACE,
-                    "Reconfigured cipher suite will force renegotiation");
-        }
-    }
-
-    /*
-     * override of SSLVerifyDepth
-     *
-     * The depth checks are handled by us manually inside the verify callback
-     * function and not by OpenSSL internally (and our function is aware of
-     * both the per-server and per-directory contexts). So we cannot ask
-     * OpenSSL about the currently verify depth. Instead we remember it in our
-     * ap_ctx attached to the SSL* of OpenSSL.  We've to force the
-     * renegotiation if the reconfigured/new verify depth is less than the
-     * currently active/remembered verify depth (because this means more
-     * restriction on the certificate chain).
-     */
-    if (dc->nVerifyDepth != UNSET) {
-        /* XXX: doesnt look like sslconn->verify_depth is actually used */
-        if (!(n = sslconn->verify_depth)) {
-            sslconn->verify_depth = n = sc->nVerifyDepth;
-        }
-
-        /* determine whether a renegotiation has to be forced */
-        if (dc->nVerifyDepth < n) {
-            renegotiate = TRUE;
-            ssl_log(r->server, SSL_LOG_TRACE,
-                    "Reduced client verification depth "
-                    "will force renegotiation");
-        }
-    }
-
-    /*
-     * override of SSLVerifyClient
-     *
-     * We force a renegotiation if the reconfigured/new verify type is
-     * stronger than the currently active verify type. 
-     *
-     * The order is: none << optional_no_ca << optional << require
-     *
-     * Additionally the following optimization is possible here: When the
-     * currently active verify type is "none" but a client certificate is
-     * already known/present, it's enough to manually force a client
-     * verification but at least skip the I/O-intensive renegotation
-     * handshake.
-     */
-    if (dc->nVerifyClient != SSL_CVERIFY_UNSET) {
-        /* remember old state */
-        verify_old = SSL_get_verify_mode(ssl);
-        /* configure new state */
-        verify = SSL_VERIFY_NONE;
-
-        if (dc->nVerifyClient == SSL_CVERIFY_REQUIRE) {
-            verify |= SSL_VERIFY_PEER_STRICT;
-        }
-
-        if ((dc->nVerifyClient == SSL_CVERIFY_OPTIONAL) ||
-            (dc->nVerifyClient == SSL_CVERIFY_OPTIONAL_NO_CA))
-        {
-            verify |= SSL_VERIFY_PEER;
-        }
-
-        SSL_set_verify(ssl, verify, ssl_callback_SSLVerify);
-        SSL_set_verify_result(ssl, X509_V_OK);
-
-        /* determine whether we've to force a renegotiation */
-        if (verify != verify_old) {
-            if (((verify_old == SSL_VERIFY_NONE) &&
-                 (verify     != SSL_VERIFY_NONE)) ||
-
-                (!(verify_old & SSL_VERIFY_PEER) &&
-                  (verify     & SSL_VERIFY_PEER)) ||
-
-                (!(verify_old & SSL_VERIFY_PEER_STRICT) &&
-                  (verify     & SSL_VERIFY_PEER_STRICT)))
-            {
-                renegotiate = TRUE;
-                /* optimization */
-
-                if ((dc->nOptions & SSL_OPT_OPTRENEGOTIATE) &&
-                    (verify_old == SSL_VERIFY_NONE) &&
-                    SSL_get_peer_certificate(ssl))
-                {
-                    renegotiate_quick = TRUE;
-                }
-
-                ssl_log(r->server, SSL_LOG_TRACE,
-                        "Changed client verification type "
-                        "will force %srenegotiation",
-                        renegotiate_quick ? "quick " : "");
-             }
-        }
-    }
-
-    /*
-     *  override SSLCACertificateFile & SSLCACertificatePath
-     *  This is tagged experimental because it has to use an ugly kludge: We
-     *  have to change the locations inside the SSL_CTX* (per-server global)
-     *  instead inside SSL* (per-connection local) and reconfigure it to the
-     *  old values later. That's problematic at least for the threaded process
-     *  model of Apache under Win32 or when an error occurs. But unless
-     *  OpenSSL provides a SSL_load_verify_locations() function we've no other
-     *  chance to provide this functionality...
-     */
-
-#ifdef SSL_EXPERIMENTAL_PERDIRCA
-    /*
-     * check if per-dir and per-server config field are not the same.
-     * if f is defined in per-dir and not defined in per-server
-     * or f is defined in both but not the equal ...
-     */
-#define MODSSL_CFG_NE(f) \
-     (dc->f && (!sc->f || (sc->f && strNE(dc->f, sc->f))))
-
-    if (MODSSL_CFG_NE(szCACertificateFile) ||
-        MODSSL_CFG_NE(szCACertificatePath))
-    {
-        ca_file = dc->szCACertificateFile ?
-            dc->szCACertificateFile : sc->szCACertificateFile;
-
-        ca_path = dc->szCACertificatePath ?
-            dc->szCACertificatePath : sc->szCACertificatePath;
-
-        /*
-           FIXME: This should be...
-           if (!SSL_load_verify_locations(ssl, ca_file, ca_path)) {
-           ...but OpenSSL still doesn't provide this!
-         */
-        if (!SSL_CTX_load_verify_locations(ctx, ca_file, ca_path)) {
-            ssl_log(r->server, SSL_LOG_ERROR|SSL_ADD_SSLERR,
-                    "Unable to reconfigure verify locations "
-                    "for client authentication");
-
-            return HTTP_FORBIDDEN;
-        }
-
-        if (!(ca_list = ssl_init_FindCAList(r->server, r->pool,
-                                            ca_file, ca_path)))
-        {
-            ssl_log(r->server, SSL_LOG_ERROR,
-                    "Unable to determine list of available "
-                    "CA certificates for client authentication");
-
-            return HTTP_FORBIDDEN;
-        }
-
-        SSL_set_client_CA_list(ssl, ca_list);
-        renegotiate = TRUE;
-        reconfigured_locations = TRUE;
-
-        ssl_log(r->server, SSL_LOG_TRACE,
-                "Changed client verification locations "
-                "will force renegotiation");
-    }
-#endif /* SSL_EXPERIMENTAL_PERDIRCA */
-
-    /* 
-     * SSL renegotiations in conjunction with HTTP
-     * requests using the POST method are not supported.
-     *
-     * Background:
-     *
-     * 1. When the client sends a HTTP/HTTPS request, Apache's core code
-     * reads only the request line ("METHOD /path HTTP/x.y") and the
-     * attached MIME headers ("Foo: bar") up to the terminating line ("CR
-     * LF"). An attached request body (for instance the data of a POST
-     * method) is _NOT_ read. Instead it is read by mod_cgi's content
-     * handler and directly passed to the CGI script.
-     *
-     * 2. mod_ssl supports per-directory re-configuration of SSL parameters.
-     * This is implemented by performing an SSL renegotiation of the
-     * re-configured parameters after the request is read, but before the
-     * response is sent. In more detail: the renegotiation happens after the
-     * request line and MIME headers were read, but _before_ the attached
-     * request body is read. The reason simply is that in the HTTP protocol
-     * usually there is no acknowledgment step between the headers and the
-     * body (there is the 100-continue feature and the chunking facility
-     * only), so Apache has no API hook for this step.
-     *
-     * 3. the problem now occurs when the client sends a POST request for
-     * URL /foo via HTTPS the server and the server has SSL parameters
-     * re-configured on a per-URL basis for /foo. Then mod_ssl has to
-     * perform an SSL renegotiation after the request was read and before
-     * the response is sent. But the problem is the pending POST body data
-     * in the receive buffer of SSL (which Apache still has not read - it's
-     * pending until mod_cgi sucks it in). When mod_ssl now tries to perform
-     * the renegotiation the pending data leads to an I/O error.
-     *
-     * Solution Idea:
-     *
-     * There are only two solutions: Either to simply state that POST
-     * requests to URLs with SSL re-configurations are not allowed, or to
-     * renegotiate really after the _complete_ request (i.e. including
-     * the POST body) was read. Obviously the latter would be preferred,
-     * but it cannot be done easily inside Apache, because as already
-     * mentioned, there is no API step between the body reading and the body
-     * processing. And even when we mod_ssl would hook directly into the
-     * loop of mod_cgi, we wouldn't solve the problem for other handlers, of
-     * course. So the only general solution is to suck in the pending data
-     * of the request body from the OpenSSL BIO into the Apache BUFF. Then
-     * the renegotiation can be done and after this step Apache can proceed
-     * processing the request as before.
-     *
-     * Solution Implementation:
-     *
-     * We cannot simply suck in the data via an SSL_read-based loop because of
-     * HTTP chunking. Instead we _have_ to use the Apache API for this step which
-     * is aware of HTTP chunking. So the trick is to suck in the pending request
-     * data via the Apache API (which uses Apache's BUFF code and in the
-     * background mod_ssl's I/O glue code) and re-inject it later into the Apache
-     * BUFF code again. This way the data flows twice through the Apache BUFF, of
-     * course. But this way the solution doesn't depend on any Apache specifics
-     * and is fully transparent to Apache modules.
-     *
-     * !! BUT ALL THIS IS STILL NOT RE-IMPLEMENTED FOR APACHE 2.0 !!
-     */
-    if (renegotiate && (r->method_number == M_POST)) {
-        ssl_log(r->server, SSL_LOG_ERROR,
-                "SSL Re-negotiation in conjunction "
-                "with POST method not supported!");
-
-        return HTTP_METHOD_NOT_ALLOWED;
-    }
-
-    /*
-     * now do the renegotiation if anything was actually reconfigured
-     */
-    if (renegotiate) {
-        /*
-         * Now we force the SSL renegotation by sending the Hello Request
-         * message to the client. Here we have to do a workaround: Actually
-         * OpenSSL returns immediately after sending the Hello Request (the
-         * intent AFAIK is because the SSL/TLS protocol says it's not a must
-         * that the client replies to a Hello Request). But because we insist
-         * on a reply (anything else is an error for us) we have to go to the
-         * ACCEPT state manually. Using SSL_set_accept_state() doesn't work
-         * here because it resets too much of the connection.  So we set the
-         * state explicitly and continue the handshake manually.
-         */
-        ssl_log(r->server, SSL_LOG_INFO,
-                "Requesting connection re-negotiation");
-
-        if (renegotiate_quick) {
-            /* perform just a manual re-verification of the peer */
-            ssl_log(r->server, SSL_LOG_TRACE,
-                    "Performing quick renegotiation: "
-                    "just re-verifying the peer");
-
-            if (!(cert_store = SSL_CTX_get_cert_store(ctx))) {
-                ssl_log(r->server, SSL_LOG_ERROR,
-                        "Cannot find certificate storage");
-
-                return HTTP_FORBIDDEN;
-            }
-
-            cert_stack = (STACK_OF(X509) *)SSL_get_peer_cert_chain(ssl);
-
-            if (!cert_stack || (sk_X509_num(cert_stack) == 0)) {
-                ssl_log(r->server, SSL_LOG_ERROR,
-                        "Cannot find peer certificate chain");
-
-                return HTTP_FORBIDDEN;
-            }
-
-            cert = sk_X509_value(cert_stack, 0);
-            X509_STORE_CTX_init(&cert_store_ctx, cert_store, cert, cert_stack);
-            depth = SSL_get_verify_depth(ssl);
-
-            if (depth >= 0) {
-                X509_STORE_CTX_set_depth(&cert_store_ctx, depth);
-            }
-
-            X509_STORE_CTX_set_ex_data(&cert_store_ctx,
-                                       SSL_get_ex_data_X509_STORE_CTX_idx(),
-                                       (char *)ssl);
-
-            if (!X509_verify_cert(&cert_store_ctx)) {
-                ssl_log(r->server, SSL_LOG_ERROR|SSL_ADD_SSLERR, 
-                        "Re-negotiation verification step failed");
-            }
-
-            SSL_set_verify_result(ssl, cert_store_ctx.error);
-            X509_STORE_CTX_cleanup(&cert_store_ctx);
-        }
-        else {
-            request_rec *id = r->main ? r->main : r;
-
-            /* do a full renegotiation */
-            ssl_log(r->server, SSL_LOG_TRACE,
-                    "Performing full renegotiation: "
-                    "complete handshake protocol");
-
-            SSL_set_session_id_context(ssl,
-                                       (unsigned char *)&id,
-                                       sizeof(id));
-
-            SSL_renegotiate(ssl);
-            SSL_do_handshake(ssl);
-
-            if (SSL_get_state(ssl) != SSL_ST_OK) {
-                ssl_log(r->server, SSL_LOG_ERROR,
-                        "Re-negotiation request failed");
-
-                return HTTP_FORBIDDEN;
-            }
-
-            ssl_log(r->server, SSL_LOG_INFO,
-                    "Awaiting re-negotiation handshake");
-
-            SSL_set_state(ssl, SSL_ST_ACCEPT);
-            SSL_do_handshake(ssl);
-
-            if (SSL_get_state(ssl) != SSL_ST_OK) {
-                ssl_log(r->server, SSL_LOG_ERROR,
-                        "Re-negotiation handshake failed: "
-                        "Not accepted by client!?");
-
-                return HTTP_FORBIDDEN;
-            }
-        }
-
-        /*
-         * Remember the peer certificate's DN
-         */
-        if ((cert = SSL_get_peer_certificate(ssl))) {
-            sslconn->client_cert = cert;
-            sslconn->client_dn = NULL;
-        }
-
-        /*
-         * Finally check for acceptable renegotiation results
-         */
-        if (dc->nVerifyClient != SSL_CVERIFY_NONE) {
-            BOOL do_verify = (dc->nVerifyClient == SSL_CVERIFY_REQUIRE);
-
-            if (do_verify && (SSL_get_verify_result(ssl) != X509_V_OK)) {
-                ssl_log(r->server, SSL_LOG_ERROR,
-                        "Re-negotiation handshake failed: "
-                        "Client verification failed");
-
-                return HTTP_FORBIDDEN;
-            }
-
-            if (do_verify && !SSL_get_peer_certificate(ssl)) {
-                ssl_log(r->server, SSL_LOG_ERROR,
-                        "Re-negotiation handshake failed: "
-                        "Client certificate missing");
-
-                return HTTP_FORBIDDEN;
-            }
-        }
-    }
-
-    /*
-     * Under old OpenSSL we had to change the X509_STORE inside the
-     * SSL_CTX instead inside the SSL structure, so we have to reconfigure it
-     * to the old values. This should be changed with forthcoming OpenSSL
-     * versions when better functionality is avaiable.
-     */
-#ifdef SSL_EXPERIMENTAL_PERDIRCA
-    if (renegotiate && reconfigured_locations) {
-        if (!SSL_CTX_load_verify_locations(ctx,
-                                           sc->szCACertificateFile,
-                                           sc->szCACertificatePath))
-        {
-            ssl_log(r->server, SSL_LOG_ERROR|SSL_ADD_SSLERR,
-                    "Unable to reconfigure verify locations "
-                    "to per-server configuration parameters");
-
-            return HTTP_FORBIDDEN;
-        }
-    }
-#endif /* SSL_EXPERIMENTAL_PERDIRCA */
-
-    /*
-     * Check SSLRequire boolean expressions
-     */
-    requires = dc->aRequirement;
-    ssl_requires = (ssl_require_t *)requires->elts;
-
-    for (i = 0; i < requires->nelts; i++) {
-        ssl_require_t *req = &ssl_requires[i];
-        ok = ssl_expr_exec(r, req->mpExpr);
-
-        if (ok < 0) {
-            cp = apr_psprintf(r->pool,
-                              "Failed to execute "
-                              "SSL requirement expression: %s",
-                              ssl_expr_get_error());
-
-            ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r, 
-                          "access to %s failed, reason: %s",
-                          r->filename, cp);
-
-            /* remember forbidden access for strict require option */
-            apr_table_setn(r->notes, "ssl-access-forbidden", "1");
-
-            return HTTP_FORBIDDEN;
-        }
-
-        if (ok != 1) {
-            ssl_log(r->server, SSL_LOG_INFO,
-                    "Access to %s denied for %s "
-                    "(requirement expression not fulfilled)",
-                    r->filename, r->connection->remote_ip);
-
-            ssl_log(r->server, SSL_LOG_INFO,
-                    "Failed expression: %s", req->cpExpr);
-
-            ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r, 
-                          "access to %s failed, reason: %s",
-                          r->filename,
-                          "SSL requirement expression not fulfilled "
-                          "(see SSL logfile for more details)");
-
-            /* remember forbidden access for strict require option */
-            apr_table_setn(r->notes, "ssl-access-forbidden", "1");
-
-            return HTTP_FORBIDDEN;
-        }
-    }
-
-    /*
-     * Else access is granted from our point of view (except vendor
-     * handlers override). But we have to return DECLINED here instead
-     * of OK, because mod_auth and other modules still might want to
-     * deny access.
-     */
-
-    return DECLINED;
-}
-
-/*
- *  Authentication Handler:
- *  Fake a Basic authentication from the X509 client certificate.
- *
- *  This must be run fairly early on to prevent a real authentication from
- *  occuring, in particular it must be run before anything else that
- *  authenticates a user.  This means that the Module statement for this
- *  module should be LAST in the Configuration file.
- */
-int ssl_hook_UserCheck(request_rec *r)
-{
-    SSLConnRec *sslconn = myConnConfig(r->connection);
-    SSLSrvConfigRec *sc = mySrvConfig(r->server);
-    SSLDirConfigRec *dc = myDirConfig(r);
-    char buf1[MAX_STRING_LEN], buf2[MAX_STRING_LEN];
-    char *clientdn;
-    const char *auth_line, *username, *password;
-
-    /*
-     * Additionally forbid access (again)
-     * when strict require option is used.
-     */
-    if ((dc->nOptions & SSL_OPT_STRICTREQUIRE) &&
-        (apr_table_get(r->notes, "ssl-access-forbidden")))
-    {
-        return HTTP_FORBIDDEN;
-    }
-
-    /*
-     * Make sure the user is not able to fake the client certificate
-     * based authentication by just entering an X.509 Subject DN
-     * ("/XX=YYY/XX=YYY/..") as the username and "password" as the
-     * password.
-     */
-    if ((auth_line = apr_table_get(r->headers_in, "Authorization"))) {
-        if (strcEQ(ap_getword(r->pool, &auth_line, ' '), "Basic")) {
-            while ((*auth_line == ' ') || (*auth_line == '\t')) {
-                auth_line++;
-            }
-
-            auth_line = ap_pbase64decode(r->pool, auth_line);
-            username = ap_getword_nulls(r->pool, &auth_line, ':');
-            password = auth_line;
-
-            if ((username[0] == '/') && strEQ(password, "password")) {
-                return HTTP_FORBIDDEN;
-            }
-        }
-    }
-
-    /*
-     * We decline operation in various situations...
-     * - SSLOptions +FakeBasicAuth not configured
-     * - r->user already authenticated
-     * - ssl not enabled
-     * - client did not present a certificate
-     */
-    if (!(sc->bEnabled && sslconn->ssl && sslconn->client_cert) ||
-        !(dc->nOptions & SSL_OPT_FAKEBASICAUTH) || r->user)
-    {
-        return DECLINED;
-    }
-    
-    if (!sslconn->client_dn) {
-        X509_NAME *name = X509_get_subject_name(sslconn->client_cert);
-        char *cp = X509_NAME_oneline(name, NULL, 0);
-        sslconn->client_dn = apr_pstrdup(r->connection->pool, cp);
-        free(cp);
-    }
-
-    clientdn = (char *)sslconn->client_dn;
-
-    /*
-     * Fake a password - which one would be immaterial, as, it seems, an empty
-     * password in the users file would match ALL incoming passwords, if only
-     * we were using the standard crypt library routine. Unfortunately, OpenSSL
-     * "fixes" a "bug" in crypt and thus prevents blank passwords from
-     * working.  (IMHO what they really fix is a bug in the users of the code
-     * - failing to program correctly for shadow passwords).  We need,
-     * therefore, to provide a password. This password can be matched by
-     * adding the string "xxj31ZMTZzkVA" as the password in the user file.
-     * This is just the crypted variant of the word "password" ;-)
-     */
-    apr_snprintf(buf1, sizeof(buf1), "%s:password", clientdn);
-    ssl_util_uuencode(buf2, buf1, FALSE);
-
-    apr_snprintf(buf1, sizeof(buf1), "Basic %s", buf2);
-    apr_table_set(r->headers_in, "Authorization", buf1);
-
-    ssl_log(r->server, SSL_LOG_INFO,
-            "Faking HTTP Basic Auth header: \"Authorization: %s\"", buf1);
-
-    return DECLINED;
-}
-
-/* authorization phase */
-int ssl_hook_Auth(request_rec *r)
-{
-    SSLDirConfigRec *dc = myDirConfig(r);
-
-    /*
-     * Additionally forbid access (again)
-     * when strict require option is used.
-     */
-    if ((dc->nOptions & SSL_OPT_STRICTREQUIRE) &&
-        (apr_table_get(r->notes, "ssl-access-forbidden")))
-    {
-        return HTTP_FORBIDDEN;
-    }
-
-    return DECLINED;
-}
-
-/*
- *   Fixup Handler
- */
-
-static const char *ssl_hook_Fixup_vars[] = {
-    "SSL_VERSION_INTERFACE",
-    "SSL_VERSION_LIBRARY",
-    "SSL_PROTOCOL",
-    "SSL_CIPHER",
-    "SSL_CIPHER_EXPORT",
-    "SSL_CIPHER_USEKEYSIZE",
-    "SSL_CIPHER_ALGKEYSIZE",
-    "SSL_CLIENT_VERIFY",
-    "SSL_CLIENT_M_VERSION",
-    "SSL_CLIENT_M_SERIAL",
-    "SSL_CLIENT_V_START",
-    "SSL_CLIENT_V_END",
-    "SSL_CLIENT_S_DN",
-    "SSL_CLIENT_S_DN_C",
-    "SSL_CLIENT_S_DN_ST",
-    "SSL_CLIENT_S_DN_L",
-    "SSL_CLIENT_S_DN_O",
-    "SSL_CLIENT_S_DN_OU",
-    "SSL_CLIENT_S_DN_CN",
-    "SSL_CLIENT_S_DN_T",
-    "SSL_CLIENT_S_DN_I",
-    "SSL_CLIENT_S_DN_G",
-    "SSL_CLIENT_S_DN_S",
-    "SSL_CLIENT_S_DN_D",
-    "SSL_CLIENT_S_DN_UID",
-    "SSL_CLIENT_S_DN_Email",
-    "SSL_CLIENT_I_DN",
-    "SSL_CLIENT_I_DN_C",
-    "SSL_CLIENT_I_DN_ST",
-    "SSL_CLIENT_I_DN_L",
-    "SSL_CLIENT_I_DN_O",
-    "SSL_CLIENT_I_DN_OU",
-    "SSL_CLIENT_I_DN_CN",
-    "SSL_CLIENT_I_DN_T",
-    "SSL_CLIENT_I_DN_I",
-    "SSL_CLIENT_I_DN_G",
-    "SSL_CLIENT_I_DN_S",
-    "SSL_CLIENT_I_DN_D",
-    "SSL_CLIENT_I_DN_UID",
-    "SSL_CLIENT_I_DN_Email",
-    "SSL_CLIENT_A_KEY",
-    "SSL_CLIENT_A_SIG",
-    "SSL_SERVER_M_VERSION",
-    "SSL_SERVER_M_SERIAL",
-    "SSL_SERVER_V_START",
-    "SSL_SERVER_V_END",
-    "SSL_SERVER_S_DN",
-    "SSL_SERVER_S_DN_C",
-    "SSL_SERVER_S_DN_ST",
-    "SSL_SERVER_S_DN_L",
-    "SSL_SERVER_S_DN_O",
-    "SSL_SERVER_S_DN_OU",
-    "SSL_SERVER_S_DN_CN",
-    "SSL_SERVER_S_DN_T",
-    "SSL_SERVER_S_DN_I",
-    "SSL_SERVER_S_DN_G",
-    "SSL_SERVER_S_DN_S",
-    "SSL_SERVER_S_DN_D",
-    "SSL_SERVER_S_DN_UID",
-    "SSL_SERVER_S_DN_Email",
-    "SSL_SERVER_I_DN",
-    "SSL_SERVER_I_DN_C",
-    "SSL_SERVER_I_DN_ST",
-    "SSL_SERVER_I_DN_L",
-    "SSL_SERVER_I_DN_O",
-    "SSL_SERVER_I_DN_OU",
-    "SSL_SERVER_I_DN_CN",
-    "SSL_SERVER_I_DN_T",
-    "SSL_SERVER_I_DN_I",
-    "SSL_SERVER_I_DN_G",
-    "SSL_SERVER_I_DN_S",
-    "SSL_SERVER_I_DN_D",
-    "SSL_SERVER_I_DN_UID",
-    "SSL_SERVER_I_DN_Email",
-    "SSL_SERVER_A_KEY",
-    "SSL_SERVER_A_SIG",
-    "SSL_SESSION_ID",
-    NULL
-};
-
-int ssl_hook_Fixup(request_rec *r)
-{
-    SSLConnRec *sslconn = myConnConfig(r->connection);
-    SSLSrvConfigRec *sc = mySrvConfig(r->server);
-    SSLDirConfigRec *dc = myDirConfig(r);
-    apr_table_t *env = r->subprocess_env;
-    char *var, *val = "";
-    STACK_OF(X509) *peer_certs;
-    SSL *ssl;
-    int i;
-
-    /*
-     * Check to see if SSL is on
-     */
-    if (!(sc->bEnabled || (sslconn && (ssl = sslconn->ssl)))) {
-        return DECLINED;
-    }
-
-    /*
-     * Annotate the SSI/CGI environment with standard SSL information
-     */
-    /* the always present HTTPS (=HTTP over SSL) flag! */
-    apr_table_setn(env, "HTTPS", "on"); 
-
-    /* standard SSL environment variables */
-    if (dc->nOptions & SSL_OPT_STDENVVARS) {
-        for (i = 0; ssl_hook_Fixup_vars[i]; i++) {
-            var = (char *)ssl_hook_Fixup_vars[i];
-            val = ssl_var_lookup(r->pool, r->server, r->connection, r, var);
-            if (!strIsEmpty(val)) {
-                apr_table_setn(env, var, val);
-            }
-        }
-    }
-
-    /*
-     * On-demand bloat up the SSI/CGI environment with certificate data
-     */
-    if (dc->nOptions & SSL_OPT_EXPORTCERTDATA) {
-        val = ssl_var_lookup(r->pool, r->server, r->connection,
-                             r, "SSL_SERVER_CERT");
-
-        apr_table_setn(env, "SSL_SERVER_CERT", val);
-
-        val = ssl_var_lookup(r->pool, r->server, r->connection,
-                             r, "SSL_CLIENT_CERT");
-
-        apr_table_setn(env, "SSL_CLIENT_CERT", val);
-
-        if ((peer_certs = (STACK_OF(X509) *)SSL_get_peer_cert_chain(ssl))) {
-            for (i = 0; i < sk_X509_num(peer_certs); i++) {
-                var = apr_psprintf(r->pool, "SSL_CLIENT_CERT_CHAIN_%d", i);
-                val = ssl_var_lookup(r->pool, r->server, r->connection,
-                                     r, var);
-                if (val) {
-                    apr_table_setn(env, var, val);
-                }
-            }
-        }
-    }
-
-    return DECLINED;
-}
-
-/*  _________________________________________________________________
-**
-**  OpenSSL Callback Functions
-**  _________________________________________________________________
-*/
-
-/*
- * Handle out temporary RSA private keys on demand
- *
- * The background of this as the TLSv1 standard explains it:
- *
- * | D.1. Temporary RSA keys
- * |
- * |    US Export restrictions limit RSA keys used for encryption to 512
- * |    bits, but do not place any limit on lengths of RSA keys used for
- * |    signing operations. Certificates often need to be larger than 512
- * |    bits, since 512-bit RSA keys are not secure enough for high-value
- * |    transactions or for applications requiring long-term security. Some
- * |    certificates are also designated signing-only, in which case they
- * |    cannot be used for key exchange.
- * |
- * |    When the public key in the certificate cannot be used for encryption,
- * |    the server signs a temporary RSA key, which is then exchanged. In
- * |    exportable applications, the temporary RSA key should be the maximum
- * |    allowable length (i.e., 512 bits). Because 512-bit RSA keys are
- * |    relatively insecure, they should be changed often. For typical
- * |    electronic commerce applications, it is suggested that keys be
- * |    changed daily or every 500 transactions, and more often if possible.
- * |    Note that while it is acceptable to use the same temporary key for
- * |    multiple transactions, it must be signed each time it is used.
- * |
- * |    RSA key generation is a time-consuming process. In many cases, a
- * |    low-priority process can be assigned the task of key generation.
- * |    Whenever a new key is completed, the existing temporary key can be
- * |    replaced with the new one.
- *
- * XXX: base on comment above, if thread support is enabled,
- * we should spawn a low-priority thread to generate new keys
- * on the fly.
- *
- * So we generated 512 and 1024 bit temporary keys on startup
- * which we now just hand out on demand....
- */
-
-RSA *ssl_callback_TmpRSA(SSL *ssl, int export, int keylen)
-{
-    conn_rec *c = (conn_rec *)SSL_get_app_data(ssl);
-    SSLModConfigRec *mc = myModConfig(c->base_server);
-    int idx;
-
-    ssl_log(c->base_server, SSL_LOG_TRACE,
-            "handing out temporary %d bit RSA key", keylen);
-
-    /* doesn't matter if export flag is on,
-     * we won't be asked for keylen > 512 in that case.
-     * if we are asked for a keylen > 1024, it is too expensive
-     * to generate on the fly.
-     * XXX: any reason not to generate 2048 bit keys at startup?
-     */
-
-    switch (keylen) {
-      case 512:
-        idx = SSL_TMP_KEY_RSA_512;
-        break;
-
-      case 1024:
-      default:
-        idx = SSL_TMP_KEY_RSA_1024;
-    }
-
-    return (RSA *)mc->pTmpKeys[idx];
-}
-
-/* 
- * Hand out the already generated DH parameters...
- */
-DH *ssl_callback_TmpDH(SSL *ssl, int export, int keylen)
-{
-    conn_rec *c = (conn_rec *)SSL_get_app_data(ssl);
-    SSLModConfigRec *mc = myModConfig(c->base_server);
-    int idx;
-
-    ssl_log(c->base_server, SSL_LOG_TRACE,
-            "handing out temporary %d bit DH key", keylen);
-
-    switch (keylen) {
-      case 512:
-        idx = SSL_TMP_KEY_DH_512;
-        break;
-
-      case 1024:
-      default:
-        idx = SSL_TMP_KEY_DH_1024;
-    }
-
-    return (DH *)mc->pTmpKeys[idx];
-}
-
-/*
- * This OpenSSL callback function is called when OpenSSL
- * does client authentication and verifies the certificate chain.
- */
-int ssl_callback_SSLVerify(int ok, X509_STORE_CTX *ctx)
-{
-    /* Get Apache context back through OpenSSL context */
-    SSL *ssl            = (SSL *)X509_STORE_CTX_get_app_data(ctx);
-    conn_rec *conn      = (conn_rec *)SSL_get_app_data(ssl);
-    server_rec *s       = conn->base_server;
-    request_rec *r      = (request_rec *)SSL_get_app_data2(ssl);
-
-    SSLSrvConfigRec *sc = mySrvConfig(s);
-    SSLDirConfigRec *dc = r ? myDirConfig(r) : NULL;
-    SSLConnRec *sslconn = myConnConfig(conn);
-
-    /* Get verify ingredients */
-    int errnum   = X509_STORE_CTX_get_error(ctx);
-    int errdepth = X509_STORE_CTX_get_error_depth(ctx);
-    int depth, verify;
-
-    /*
-     * Log verification information
-     */
-    if (sc->nLogLevel >= SSL_LOG_TRACE) {
-        X509 *cert  = X509_STORE_CTX_get_current_cert(ctx);
-        char *sname = X509_NAME_oneline(X509_get_subject_name(cert), NULL, 0);
-        char *iname = X509_NAME_oneline(X509_get_issuer_name(cert),  NULL, 0);
-
-        ssl_log(s, SSL_LOG_TRACE,
-                "Certificate Verification: depth: %d, subject: %s, issuer: %s",
-                errdepth,
-                sname ? sname : "-unknown-",
-                iname ? iname : "-unknown-");
-
-        if (sname) {
-            free(sname);
-        }
-
-        if (iname) {
-            free(iname);
-        }
-    }
-
-    /*
-     * Check for optionally acceptable non-verifiable issuer situation
-     */
-    if (dc && (dc->nVerifyClient != SSL_CVERIFY_UNSET)) {
-        verify = dc->nVerifyClient;
-    }
-    else {
-        verify = sc->nVerifyClient;
-    }
-
-    if (ssl_verify_error_is_optional(errnum) &&
-        (verify == SSL_CVERIFY_OPTIONAL_NO_CA))
-    {
-        ssl_log(s, SSL_LOG_TRACE,
-                "Certificate Verification: Verifiable Issuer is configured as "
-                "optional, therefore we're accepting the certificate");
-
-        sslconn->verify_info = "GENEROUS";
-        ok = TRUE;
-    }
-
-    /*
-     * Additionally perform CRL-based revocation checks
-     */
-    if (ok) {
-        if (!(ok = ssl_callback_SSLVerify_CRL(ok, ctx, s))) {
-            errnum = X509_STORE_CTX_get_error(ctx);
-        }
-    }
-
-    /*
-     * If we already know it's not ok, log the real reason
-     */
-    if (!ok) {
-        ssl_log(s, SSL_LOG_ERROR,
-                "Certificate Verification: Error (%d): %s",
-                errnum, X509_verify_cert_error_string(errnum));
-
-        sslconn->client_dn = NULL;
-        sslconn->client_cert = NULL;
-        sslconn->verify_error = X509_verify_cert_error_string(errnum);
-    }
-
-    /*
-     * Finally check the depth of the certificate verification
-     */
-    if (dc && (dc->nVerifyDepth != UNSET)) {
-        depth = dc->nVerifyDepth;
-    }
-    else {
-        depth = sc->nVerifyDepth;
-    }
-
-    if (errdepth > depth) {
-        ssl_log(s, SSL_LOG_ERROR,
-                "Certificate Verification: Certificate Chain too long "
-                "(chain has %d certificates, but maximum allowed are only %d)",
-                errdepth, depth);
-
-        errnum = X509_V_ERR_CERT_CHAIN_TOO_LONG;
-        sslconn->verify_error = X509_verify_cert_error_string(errnum);
-
-        ok = FALSE;
-    }
-
-    /*
-     * And finally signal OpenSSL the (perhaps changed) state
-     */
-    return ok;
-}
-
-int ssl_callback_SSLVerify_CRL(int ok, X509_STORE_CTX *ctx, server_rec *s)
-{
-    SSLSrvConfigRec *sc = mySrvConfig(s);
-    X509_OBJECT obj;
-    X509_NAME *subject, *issuer;
-    X509 *cert;
-    X509_CRL *crl;
-    int i, n, rc;
-
-    /*
-     * Unless a revocation store for CRLs was created we
-     * cannot do any CRL-based verification, of course.
-     */
-    if (!sc->pRevocationStore) {
-        return ok;
-    }
-
-    /*
-     * Determine certificate ingredients in advance
-     */
-    cert    = X509_STORE_CTX_get_current_cert(ctx);
-    subject = X509_get_subject_name(cert);
-    issuer  = X509_get_issuer_name(cert);
-
-    /*
-     * OpenSSL provides the general mechanism to deal with CRLs but does not
-     * use them automatically when verifying certificates, so we do it
-     * explicitly here. We will check the CRL for the currently checked
-     * certificate, if there is such a CRL in the store.
-     *
-     * We come through this procedure for each certificate in the certificate
-     * chain, starting with the root-CA's certificate. At each step we've to
-     * both verify the signature on the CRL (to make sure it's a valid CRL)
-     * and it's revocation list (to make sure the current certificate isn't
-     * revoked).  But because to check the signature on the CRL we need the
-     * public key of the issuing CA certificate (which was already processed
-     * one round before), we've a little problem. But we can both solve it and
-     * at the same time optimize the processing by using the following
-     * verification scheme (idea and code snippets borrowed from the GLOBUS
-     * project):
-     *
-     * 1. We'll check the signature of a CRL in each step when we find a CRL
-     *    through the _subject_ name of the current certificate. This CRL
-     *    itself will be needed the first time in the next round, of course.
-     *    But we do the signature processing one round before this where the
-     *    public key of the CA is available.
-     *
-     * 2. We'll check the revocation list of a CRL in each step when
-     *    we find a CRL through the _issuer_ name of the current certificate.
-     *    This CRLs signature was then already verified one round before.
-     *
-     * This verification scheme allows a CA to revoke its own certificate as
-     * well, of course.
-     */
-
-    /*
-     * Try to retrieve a CRL corresponding to the _subject_ of
-     * the current certificate in order to verify it's integrity.
-     */
-    memset((char *)&obj, 0, sizeof(obj));
-    rc = SSL_X509_STORE_lookup(sc->pRevocationStore,
-                               X509_LU_CRL, subject, &obj);
-    crl = obj.data.crl;
-
-    if ((rc > 0) && crl) {
-        /*
-         * Log information about CRL
-         * (A little bit complicated because of ASN.1 and BIOs...)
-         */
-        if (sc->nLogLevel >= SSL_LOG_TRACE) {
-            char buff[512]; /* should be plenty */
-            BIO *bio = BIO_new(BIO_s_mem());
-
-            BIO_printf(bio, "CA CRL: Issuer: ");
-            X509_NAME_print(bio, issuer, 0);
-
-            BIO_printf(bio, ", lastUpdate: ");
-            ASN1_UTCTIME_print(bio, X509_CRL_get_lastUpdate(crl));
-
-            BIO_printf(bio, ", nextUpdate: ");
-            ASN1_UTCTIME_print(bio, X509_CRL_get_nextUpdate(crl));
-
-            n = BIO_read(bio, buff, sizeof(buff));
-            buff[n] = '\0';
-
-            BIO_free(bio);
-
-            ssl_log(s, SSL_LOG_TRACE, buff);
-        }
-
-        /*
-         * Verify the signature on this CRL
-         */
-        if (X509_CRL_verify(crl, X509_get_pubkey(cert)) <= 0) {
-            ssl_log(s, SSL_LOG_WARN, "Invalid signature on CRL");
-
-            X509_STORE_CTX_set_error(ctx, X509_V_ERR_CRL_SIGNATURE_FAILURE);
-            X509_OBJECT_free_contents(&obj);
-
-            return FALSE;
-        }
-
-        /*
-         * Check date of CRL to make sure it's not expired
-         */
-        i = X509_cmp_current_time(X509_CRL_get_nextUpdate(crl));
-
-        if (i == 0) {
-            ssl_log(s, SSL_LOG_WARN,
-                    "Found CRL has invalid nextUpdate field");
-
-            X509_STORE_CTX_set_error(ctx,
-                                     X509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD);
-            X509_OBJECT_free_contents(&obj);
-
-            return FALSE;
-        }
-
-        if (i < 0) {
-            ssl_log(s, SSL_LOG_WARN,
-                    "Found CRL is expired - "
-                    "revoking all certificates until you get updated CRL");
-
-            X509_STORE_CTX_set_error(ctx, X509_V_ERR_CRL_HAS_EXPIRED);
-            X509_OBJECT_free_contents(&obj);
-
-            return FALSE;
-        }
-
-        X509_OBJECT_free_contents(&obj);
-    }
-
-    /*
-     * Try to retrieve a CRL corresponding to the _issuer_ of
-     * the current certificate in order to check for revocation.
-     */
-    memset((char *)&obj, 0, sizeof(obj));
-    rc = SSL_X509_STORE_lookup(sc->pRevocationStore,
-                               X509_LU_CRL, issuer, &obj);
-
-    crl = obj.data.crl;
-    if ((rc > 0) && crl) {
-        /*
-         * Check if the current certificate is revoked by this CRL
-         */
-        n = sk_X509_REVOKED_num(X509_CRL_get_REVOKED(crl));
-
-        for (i = 0; i < n; i++) {
-            X509_REVOKED *revoked =
-                sk_X509_REVOKED_value(X509_CRL_get_REVOKED(crl), i);
-
-            ASN1_INTEGER *sn = X509_REVOKED_get_serialNumber(revoked);
-
-            if (!ASN1_INTEGER_cmp(sn, X509_get_serialNumber(cert))) {
-                if (sc->nLogLevel >= SSL_LOG_INFO) {
-                    char *cp = X509_NAME_oneline(issuer, NULL, 0);
-                    long serial = ASN1_INTEGER_get(sn);
-
-                    ssl_log(s, SSL_LOG_INFO,
-                            "Certificate with serial %ld (0x%lX) "
-                            "revoked per CRL from issuer %s",
-                            serial, serial, cp);
-                    free(cp);
-                }
-
-                X509_STORE_CTX_set_error(ctx, X509_V_ERR_CERT_REVOKED);
-                X509_OBJECT_free_contents(&obj);
-
-                return FALSE;
-            }
-        }
-
-        X509_OBJECT_free_contents(&obj);
-    }
-
-    return ok;
-}
-
-static void ssl_session_log(server_rec *s,
-                            const char *request,
-                            unsigned char *id,
-                            unsigned int idlen,
-                            const char *status,
-                            const char *result,
-                            long timeout)
-{
-    SSLSrvConfigRec *sc = mySrvConfig(s);
-    char buf[SSL_SESSION_ID_STRING_LEN];
-    char timeout_str[56] = {'\0'};
-
-    if (sc->nLogLevel < SSL_LOG_TRACE) {
-        return;
-    }
-
-    if (timeout) {
-        apr_snprintf(timeout_str, sizeof(timeout_str),
-                     "timeout=%lds ", (timeout - time(NULL)));
-    }
-
-    ssl_log(s, SSL_LOG_TRACE, "Inter-Process Session Cache: "
-            "request=%s status=%s id=%s %s(session %s)",
-            request, status,
-            SSL_SESSION_id2sz(id, idlen, buf, sizeof(buf)),
-            timeout_str, result);
-}
-
-/*
- *  This callback function is executed by OpenSSL whenever a new SSL_SESSION is
- *  added to the internal OpenSSL session cache. We use this hook to spread the
- *  SSL_SESSION also to the inter-process disk-cache to make share it with our
- *  other Apache pre-forked server processes.
- */
-int ssl_callback_NewSessionCacheEntry(SSL *ssl, SSL_SESSION *session)
-{
-    /* Get Apache context back through OpenSSL context */
-    conn_rec *conn      = (conn_rec *)SSL_get_app_data(ssl);
-    server_rec *s       = conn->base_server;
-    SSLSrvConfigRec *sc = mySrvConfig(s);
-    long timeout        = sc->nSessionCacheTimeout;
-    BOOL rc;
-    unsigned char *id;
-    unsigned int idlen;
-
-    /*
-     * Set the timeout also for the internal OpenSSL cache, because this way
-     * our inter-process cache is consulted only when it's really necessary.
-     */
-    SSL_set_timeout(session, timeout);
-
-    /*
-     * Store the SSL_SESSION in the inter-process cache with the
-     * same expire time, so it expires automatically there, too.
-     */
-    id = SSL_SESSION_get_session_id(session);
-    idlen = SSL_SESSION_get_session_id_length(session);
-
-    timeout += SSL_get_time(session);
-
-    rc = ssl_scache_store(s, id, idlen, timeout, session);
-
-    ssl_session_log(s, "SET", id, idlen,
-                    rc == TRUE ? "OK" : "BAD",
-                    "caching", timeout);
-
-    /*
-     * return 0 which means to OpenSSL that the session is still
-     * valid and was not freed by us with SSL_SESSION_free().
-     */
-    return 0;
-}
-
-/*
- *  This callback function is executed by OpenSSL whenever a
- *  SSL_SESSION is looked up in the internal OpenSSL cache and it
- *  was not found. We use this to lookup the SSL_SESSION in the
- *  inter-process disk-cache where it was perhaps stored by one
- *  of our other Apache pre-forked server processes.
- */
-SSL_SESSION *ssl_callback_GetSessionCacheEntry(SSL *ssl,
-                                               unsigned char *id,
-                                               int idlen, int *do_copy)
-{
-    /* Get Apache context back through OpenSSL context */
-    conn_rec *conn = (conn_rec *)SSL_get_app_data(ssl);
-    server_rec *s  = conn->base_server;
-    SSL_SESSION *session;
-
-    /*
-     * Try to retrieve the SSL_SESSION from the inter-process cache
-     */
-    session = ssl_scache_retrieve(s, id, idlen);
-
-    ssl_session_log(s, "GET", id, idlen,
-                    session ? "FOUND" : "MISSED",
-                    session ? "reuse" : "renewal", 0);
-
-    /*
-     * Return NULL or the retrieved SSL_SESSION. But indicate (by
-     * setting do_copy to 0) that the reference count on the
-     * SSL_SESSION should not be incremented by the SSL library,
-     * because we will no longer hold a reference to it ourself.
-     */
-    *do_copy = 0;
-
-    return session;
-}
-
-/*
- *  This callback function is executed by OpenSSL whenever a
- *  SSL_SESSION is removed from the the internal OpenSSL cache.
- *  We use this to remove the SSL_SESSION in the inter-process
- *  disk-cache, too.
- */
-void ssl_callback_DelSessionCacheEntry(SSL_CTX *ctx,
-                                       SSL_SESSION *session)
-{
-    server_rec *s;
-    SSLSrvConfigRec *sc;
-    unsigned char *id;
-    unsigned int idlen;
-
-    /*
-     * Get Apache context back through OpenSSL context
-     */
-    if (!(s = (server_rec *)SSL_CTX_get_app_data(ctx))) {
-        return; /* on server shutdown Apache is already gone */
-    }
-
-    sc = mySrvConfig(s);
-
-    /*
-     * Remove the SSL_SESSION from the inter-process cache
-     */
-    id = SSL_SESSION_get_session_id(session);
-    idlen = SSL_SESSION_get_session_id_length(session);
-
-    ssl_scache_remove(s, id, idlen);
-
-    ssl_session_log(s, "REM", id, idlen,
-                    "OK", "dead", 0);
-
-    return;
-}
-
-/*
- * This callback function is executed while OpenSSL processes the
- * SSL handshake and does SSL record layer stuff. We use it to
- * trace OpenSSL's processing in out SSL logfile.
- */
-void ssl_callback_LogTracingState(SSL *ssl, int where, int rc)
-{
-    conn_rec *c;
-    server_rec *s;
-    SSLSrvConfigRec *sc;
-
-    /*
-     * find corresponding server
-     */
-    if (!(c = (conn_rec *)SSL_get_app_data((SSL *)ssl))) {
-        return;
-    }
-
-    s = c->base_server;
-    if (!(sc = mySrvConfig(s))) {
-        return;
-    }
-
-    /*
-     * create the various trace messages
-     */
-    if (sc->nLogLevel >= SSL_LOG_TRACE) {
-        if (where & SSL_CB_HANDSHAKE_START) {
-            ssl_log(s, SSL_LOG_TRACE,
-                    "%s: Handshake: start", SSL_LIBRARY_NAME);
-        }
-        else if (where & SSL_CB_HANDSHAKE_DONE) {
-            ssl_log(s, SSL_LOG_TRACE,
-                    "%s: Handshake: done", SSL_LIBRARY_NAME);
-        }
-        else if (where & SSL_CB_LOOP) {
-            ssl_log(s, SSL_LOG_TRACE, "%s: Loop: %s",
-                    SSL_LIBRARY_NAME, SSL_state_string_long(ssl));
-        }
-        else if (where & SSL_CB_READ) {
-            ssl_log(s, SSL_LOG_TRACE, "%s: Read: %s",
-                    SSL_LIBRARY_NAME, SSL_state_string_long(ssl));
-        }
-        else if (where & SSL_CB_WRITE) {
-            ssl_log(s, SSL_LOG_TRACE, "%s: Write: %s",
-                    SSL_LIBRARY_NAME, SSL_state_string_long(ssl));
-        }
-        else if (where & SSL_CB_ALERT) {
-            char *str = (where & SSL_CB_READ) ? "read" : "write";
-            ssl_log(s, SSL_LOG_TRACE, "%s: Alert: %s:%s:%s\n",
-                    SSL_LIBRARY_NAME, str,
-                    SSL_alert_type_string_long(rc),
-                    SSL_alert_desc_string_long(rc));
-        }
-        else if (where & SSL_CB_EXIT) {
-            if (rc == 0) {
-                ssl_log(s, SSL_LOG_TRACE, "%s: Exit: failed in %s",
-                        SSL_LIBRARY_NAME, SSL_state_string_long(ssl));
-            }
-            else if (rc < 0) {
-                ssl_log(s, SSL_LOG_TRACE, "%s: Exit: error in %s",
-                        SSL_LIBRARY_NAME, SSL_state_string_long(ssl));
-            }
-        }
-    }
-
-    /*
-     * Because SSL renegotations can happen at any time (not only after
-     * SSL_accept()), the best way to log the current connection details is
-     * right after a finished handshake.
-     */
-    if (where & SSL_CB_HANDSHAKE_DONE) {
-        ssl_log(s, SSL_LOG_INFO,
-                "Connection: Client IP: %s, Protocol: %s, "
-                "Cipher: %s (%s/%s bits)",
-                ssl_var_lookup(NULL, s, c, NULL, "REMOTE_ADDR"),
-                ssl_var_lookup(NULL, s, c, NULL, "SSL_PROTOCOL"),
-                ssl_var_lookup(NULL, s, c, NULL, "SSL_CIPHER"),
-                ssl_var_lookup(NULL, s, c, NULL, "SSL_CIPHER_USEKEYSIZE"),
-                ssl_var_lookup(NULL, s, c, NULL, "SSL_CIPHER_ALGKEYSIZE"));
-    }
-}
-
diff --git a/modules/ssl/ssl_engine_log.c b/modules/ssl/ssl_engine_log.c
deleted file mode 100644
index 40c7af9..0000000
--- a/modules/ssl/ssl_engine_log.c
+++ /dev/null
@@ -1,314 +0,0 @@
-/*                      _             _
-**  _ __ ___   ___   __| |    ___ ___| |  mod_ssl
-** | '_ ` _ \ / _ \ / _` |   / __/ __| |  Apache Interface to OpenSSL
-** | | | | | | (_) | (_| |   \__ \__ \ |  www.modssl.org
-** |_| |_| |_|\___/ \__,_|___|___/___/_|  ftp.modssl.org
-**                      |_____|
-**  ssl_engine_log.c
-**  Logging Facility
-*/
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- */
-                             /* ``The difference between a computer
-                                  industry job and open-source software
-                                  hacking is about 30 hours a week.''
-                                         -- Ralf S. Engelschall     */
-#include "mod_ssl.h"
-
-/*  _________________________________________________________________
-**
-**  Logfile Support
-**  _________________________________________________________________
-*/
-
-/*
- * Open the SSL logfile
- */
-void ssl_log_open(server_rec *s_main, server_rec *s, apr_pool_t *p)
-{
-    const char *szLogFile;
-    SSLSrvConfigRec *sc_main = mySrvConfig(s_main);
-    SSLSrvConfigRec *sc = mySrvConfig(s);
-    piped_log *pl;
-
-    /* 
-     * Short-circuit for inherited logfiles in order to save
-     * filedescriptors in mass-vhost situation. Be careful, this works
-     * fine because the close happens implicitly by the pool facility.
-     */
-    if (   s != s_main 
-        && sc_main->fileLogFile != NULL
-        && (   (sc->szLogFile == NULL)
-            || (   sc->szLogFile != NULL 
-                && sc_main->szLogFile != NULL 
-                && strEQ(sc->szLogFile, sc_main->szLogFile)))) {
-        sc->fileLogFile = sc_main->fileLogFile;
-    }
-    else if (sc->szLogFile != NULL) {
-        if (strEQ(sc->szLogFile, "/dev/null"))
-            return;
-        else if (sc->szLogFile[0] == '|') {
-            szLogFile = sc->szLogFile + 1;
-            if ((pl = ap_open_piped_log(p, szLogFile)) == NULL) {
-                ssl_log(s, SSL_LOG_ERROR|SSL_ADD_ERRNO,
-                        "Cannot open reliable pipe to SSL logfile filter %s", szLogFile);
-                ssl_die();
-            }
-            sc->fileLogFile = ap_piped_log_write_fd(pl); 
-        }
-        else {
-            szLogFile = ap_server_root_relative(p, sc->szLogFile);
-            if (!szLogFile) {
-                ssl_log(s, SSL_LOG_ERROR|SSL_ADD_ERRNO,
-                        "Invalid SSL logfile path %s", sc->szLogFile);
-                ssl_die();
-            }
-            if ((apr_file_open(&(sc->fileLogFile), szLogFile, 
-                               APR_WRITE|APR_APPEND|APR_CREATE, APR_OS_DEFAULT, p)) 
-                               != APR_SUCCESS) {
-                ssl_log(s, SSL_LOG_ERROR|SSL_ADD_ERRNO,
-                        "Cannot open SSL logfile %s", szLogFile);
-                ssl_die();
-            }
-        }
-    }
-    return;
-}
-
-static struct {
-    int   nLevel;
-    char *szLevel;
-} ssl_log_level2string[] = {
-    { SSL_LOG_ERROR, "error" },
-    { SSL_LOG_WARN,  "warn"  },
-    { SSL_LOG_INFO,  "info"  },
-    { SSL_LOG_TRACE, "trace" },
-    { SSL_LOG_DEBUG, "debug" },
-    { 0, NULL }
-};
-
-static struct {
-    char *cpPattern;
-    char *cpAnnotation;
-} ssl_log_annotate[] = {
-    { "*envelope*bad*decrypt*", "wrong pass phrase!?" },
-    { "*CLIENT_HELLO*unknown*protocol*", "speaking not SSL to HTTPS port!?" },
-    { "*CLIENT_HELLO*http*request*", "speaking HTTP to HTTPS port!?" },
-    { "*SSL3_READ_BYTES:sslv3*alert*bad*certificate*", "Subject CN in certificate not server name or identical to CA!?" },
-    { "*self signed certificate in certificate chain*", "Client certificate signed by CA not known to server?" },
-    { "*peer did not return a certificate*", "No CAs known to server for verification?" },
-    { "*no shared cipher*", "Too restrictive SSLCipherSuite or using DSA server certificate?" },
-    { "*no start line*", "Bad file contents or format - or even just a forgotten SSLCertificateKeyFile?" },
-    { "*bad password read*", "You entered an incorrect pass phrase!?" },
-    { "*bad mac decode*", "Browser still remembered details of a re-created server certificate?" },
-    { NULL, NULL }
-};
-
-static char *ssl_log_annotation(char *error)
-{
-    char *errstr;
-    int i;
-
-    errstr = NULL;
-    for (i = 0; ssl_log_annotate[i].cpPattern != NULL; i++) {
-        if (ap_strcmp_match(error, ssl_log_annotate[i].cpPattern) == 0) {
-            errstr = ssl_log_annotate[i].cpAnnotation;
-            break;
-        }
-    }
-    return errstr;
-}
-
-void ssl_log(server_rec *s, int level, const char *msg, ...)
-{
-    char tstr[80];
-    char lstr[20];
-    char vstr[1024];
-    char str[1024];
-    char *nstr;
-    apr_size_t len;
-    apr_time_exp_t t;
-    va_list ap;
-    int add;
-    int i;
-    char *astr;
-    int safe_errno;
-    unsigned long e;
-    SSLSrvConfigRec *sc;
-    char *cpE;
-    char *cpA;
-
-    /*  initialization  */
-    safe_errno = errno;
-    sc = mySrvConfig(s);
-
-    /*  strip out additional flags  */
-    add   = (level & ~SSL_LOG_MASK);
-    level = (level & SSL_LOG_MASK);
-
-    /*  reduce flags when not reasonable in context  */
-    if (add & SSL_ADD_ERRNO && errno == 0)
-        add &= ~SSL_ADD_ERRNO;
-    if (add & SSL_ADD_SSLERR && ERR_peek_error() == 0)
-        add &= ~SSL_ADD_SSLERR;
-
-    /*  we log only levels below, except for errors */
-    if (   sc->fileLogFile == NULL
-        && !(level & SSL_LOG_ERROR))
-        return;
-    if (   level > sc->nLogLevel
-        && !(level & SSL_LOG_ERROR))
-        return;
-
-    /*  determine the time entry string  */
-    if (add & SSL_NO_TIMESTAMP)
-        tstr[0] = NUL;
-    else {
-        apr_explode_localtime(&t, apr_time_now());
-        apr_strftime(tstr, &len, 80, "[%d/%b/%Y %H:%M:%S", &t);
-        apr_snprintf(tstr + strlen(tstr), 80 - strlen(tstr), " %05d] ", 
-                     (unsigned int)getpid());
-    }
-
-    /*  determine whether newline should be written */
-    if (add & SSL_NO_NEWLINE)
-        nstr = "";
-    else {
-        nstr = APR_EOL_STR;
-    }
-
-    /*  determine level name  */
-    lstr[0] = NUL;
-    if (!(add & SSL_NO_LEVELID)) {
-        for (i = 0; ssl_log_level2string[i].nLevel != 0; i++) {
-            if (ssl_log_level2string[i].nLevel == level) {
-                apr_snprintf(lstr, sizeof(lstr), "[%s]", ssl_log_level2string[i].szLevel);
-                break;
-            }
-        }
-        for (i = strlen(lstr); i <= 7; i++)
-            lstr[i] = ' ';
-        lstr[i] = NUL;
-    }
-
-    /*  create custom message  */
-    va_start(ap, msg);
-    apr_vsnprintf(vstr, sizeof(vstr), msg, ap);
-    va_end(ap);
-
-    /*  write out SSLog message  */
-    if ((add & SSL_ADD_ERRNO) && (add & SSL_ADD_SSLERR))
-        astr = " (System and " SSL_LIBRARY_NAME " library errors follow)";
-    else if (add & SSL_ADD_ERRNO)
-        astr = " (System error follows)";
-    else if (add & SSL_ADD_SSLERR)
-        astr = " (" SSL_LIBRARY_NAME " library error follows)";
-    else
-        astr = "";
-    if (level <= sc->nLogLevel && sc->fileLogFile != NULL) {
-        apr_snprintf(str, sizeof(str), "%s%s%s%s%s", 
-                     tstr, lstr, vstr, astr, nstr);
-        apr_file_printf(sc->fileLogFile, "%s", str);
-    }
-    if (level & SSL_LOG_ERROR)
-        ap_log_error(APLOG_MARK, APLOG_ERR|APLOG_NOERRNO, 0, s,
-                     "mod_ssl: %s%s", vstr, astr);
-
-    /*  write out additional attachment messages  */
-    if (add & SSL_ADD_ERRNO) {
-        if (level <= sc->nLogLevel && sc->fileLogFile != NULL) {
-            apr_snprintf(str, sizeof(str), "%s%sSystem: %s (errno: %d)%s",
-                         tstr, lstr, strerror(safe_errno), safe_errno, nstr);
-            apr_file_printf(sc->fileLogFile, "%s", str);
-        }
-        if (level & SSL_LOG_ERROR)
-            ap_log_error(APLOG_MARK, APLOG_ERR|APLOG_NOERRNO, 0, s,
-                         "System: %s (errno: %d)",
-                         strerror(safe_errno), safe_errno);
-    }
-    if (add & SSL_ADD_SSLERR) {
-        while ((e = ERR_get_error())) {
-            cpE = ERR_error_string(e, NULL);
-            cpA = ssl_log_annotation(cpE);
-            if (level <= sc->nLogLevel && sc->fileLogFile != NULL) {
-                apr_snprintf(str, sizeof(str), "%s%s%s: %s%s%s%s%s",
-                             tstr, lstr, SSL_LIBRARY_NAME, cpE,
-                             cpA != NULL ? " [Hint: " : "",
-                             cpA != NULL ? cpA : "", cpA != NULL ? "]" : "",
-                             nstr);
-                apr_file_printf(sc->fileLogFile, "%s", str);
-            }
-            if (level & SSL_LOG_ERROR)
-                ap_log_error(APLOG_MARK, APLOG_ERR|APLOG_NOERRNO, 0, s,
-                             "%s: %s%s%s%s", SSL_LIBRARY_NAME, cpE,
-                             cpA != NULL ? " [Hint: " : "",
-                             cpA != NULL ? cpA : "", cpA != NULL ? "]" : "");
-        }
-    }
-    /* make sure the next log starts from a clean base */
-    /* ERR_clear_error(); */
-
-    /*  cleanup and return  */
-    if (sc->fileLogFile != NULL)
-        apr_file_flush(sc->fileLogFile);
-    errno = safe_errno;
-    return;
-}
-
-void ssl_die(void)
-{
-    /*
-     * This is used for fatal errors and here
-     * it is common module practice to really
-     * exit from the complete program.
-     */
-    exit(1);
-}
-
diff --git a/modules/ssl/ssl_engine_mutex.c b/modules/ssl/ssl_engine_mutex.c
deleted file mode 100644
index 2696969..0000000
--- a/modules/ssl/ssl_engine_mutex.c
+++ /dev/null
@@ -1,119 +0,0 @@
-/*                      _             _
-**  _ __ ___   ___   __| |    ___ ___| |  mod_ssl
-** | '_ ` _ \ / _ \ / _` |   / __/ __| |  Apache Interface to OpenSSL
-** | | | | | | (_) | (_| |   \__ \__ \ |  www.modssl.org
-** |_| |_| |_|\___/ \__,_|___|___/___/_|  ftp.modssl.org
-**                      |_____|
-**  ssl_engine_mutex.c
-**  Semaphore for Mutual Exclusion
-*/
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- */
-                             /* ``Real programmers confuse
-                                  Christmas and Halloween
-                                  because DEC 25 = OCT 31.''
-                                             -- Unknown     */
-#include "mod_ssl.h"
-
-int ssl_mutex_init(server_rec *s, apr_pool_t *p)
-{
-    SSLModConfigRec *mc = myModConfig(s);
-
-    if (mc->nMutexMode == SSL_MUTEXMODE_NONE) 
-        return TRUE;
-
-    if (apr_lock_create(&mc->pMutex, APR_MUTEX, APR_LOCKALL, APR_LOCK_DEFAULT,
-                        mc->szMutexFile, p) != APR_SUCCESS) {
-        ssl_log(s, SSL_LOG_ERROR,
-                   "Cannot create SSLMutex file `%s'",
-                    mc->szMutexFile);
-        return FALSE;
-    }
-    return TRUE;
-}
-
-int ssl_mutex_reinit(server_rec *s, apr_pool_t *p)
-{
-    SSLModConfigRec *mc = myModConfig(s);
-
-    if (mc->nMutexMode == SSL_MUTEXMODE_NONE)
-        return TRUE;
-
-    if (apr_lock_child_init(&mc->pMutex, mc->szMutexFile, p) != APR_SUCCESS)
-        return FALSE;
-    return TRUE;
-}
-
-int ssl_mutex_on(server_rec *s)
-{
-    SSLModConfigRec *mc = myModConfig(s);
-
-    if (mc->nMutexMode == SSL_MUTEXMODE_NONE)
-        return TRUE;
-    if (apr_lock_acquire(mc->pMutex) != APR_SUCCESS) {
-        ssl_log(s, SSL_LOG_WARN, "Failed to acquire global mutex lock");
-        return FALSE;
-    }
-    return TRUE;
-}
-
-int ssl_mutex_off(server_rec *s)
-{
-    SSLModConfigRec *mc = myModConfig(s);
-
-    if (mc->nMutexMode == SSL_MUTEXMODE_NONE)
-        return TRUE;
-    if (apr_lock_release(mc->pMutex) != APR_SUCCESS) {
-        ssl_log(s, SSL_LOG_WARN, "Failed to release global mutex lock");
-        return FALSE;
-    }
-    return TRUE;
-}
-
diff --git a/modules/ssl/ssl_engine_pphrase.c b/modules/ssl/ssl_engine_pphrase.c
deleted file mode 100644
index 8d67065..0000000
--- a/modules/ssl/ssl_engine_pphrase.c
+++ /dev/null
@@ -1,775 +0,0 @@
-/*                      _             _
-**  _ __ ___   ___   __| |    ___ ___| |  mod_ssl
-** | '_ ` _ \ / _ \ / _` |   / __/ __| |  Apache Interface to OpenSSL
-** | | | | | | (_) | (_| |   \__ \__ \ |  www.modssl.org
-** |_| |_| |_|\___/ \__,_|___|___/___/_|  ftp.modssl.org
-**                      |_____|
-**  ssl_engine_pphrase.c
-**  Pass Phrase Dialog
-*/
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- */
-                             /* ``Treat your password like your
-                                  toothbrush. Don't let anybody
-                                  else use it, and get a new one
-                                  every six months.''
-                                           -- Clifford Stoll     */
-#include "mod_ssl.h"
-
-/*
- * Return true if the named file exists and is readable
- */
-
-static apr_status_t exists_and_readable(char *fname, apr_pool_t *pool, apr_time_t *mtime)
-{
-    apr_status_t stat;
-    apr_finfo_t sbuf;
-    apr_file_t *fd;
-
-    if ((stat = apr_stat(&sbuf, fname, APR_FINFO_MIN, pool)) != APR_SUCCESS)
-        return stat;
-
-    if (sbuf.filetype != APR_REG)
-        return APR_EGENERAL;
-
-    if ((stat = apr_file_open(&fd, fname, APR_READ, 0, pool)) != APR_SUCCESS)
-        return stat;
-
-    if (mtime) {
-        *mtime = sbuf.mtime;
-    }
-
-    apr_file_close(fd);
-    return APR_SUCCESS;
-}
-
-/*
- * reuse vhost keys for asn1 tables where keys are allocated out
- * of s->process->pool to prevent "leaking" each time we format
- * a vhost key.  since the key is stored in a table with lifetime
- * of s->process->pool, the key needs to have the same lifetime.
- *
- * XXX: probably seems silly to use a hash table with keys and values
- * being the same, but it is easier than doing a linear search
- * and will make it easier to remove keys if needed in the future.
- * also have the problem with apr_array_header_t that if we
- * underestimate the number of vhost keys when we apr_array_make(),
- * the array will get resized when we push past the initial number
- * of elts.  this resizing in the s->process->pool means "leaking"
- * since apr_array_push() will apr_alloc arr->nalloc * 2 elts,
- * leaving the original arr->elts to waste.
- */
-static char *asn1_table_vhost_key(SSLModConfigRec *mc, apr_pool_t *p,
-                                  char *id, char *an)
-{
-    /* 'p' pool used here is cleared on restarts (or sooner) */
-    char *key = apr_psprintf(p, "%s:%s", id, an);
-    void *keyptr = apr_hash_get(mc->tVHostKeys, key,
-                                APR_HASH_KEY_STRING);
-
-    if (!keyptr) {
-        /* make a copy out of s->process->pool */
-        keyptr = apr_pstrdup(mc->pPool, key);
-        apr_hash_set(mc->tVHostKeys, keyptr,
-                     APR_HASH_KEY_STRING, keyptr);
-    }
-
-    return (char *)keyptr;
-}
-
-/*  _________________________________________________________________
-**
-**  Pass Phrase and Private Key Handling
-**  _________________________________________________________________
-*/
-
-#define BUILTIN_DIALOG_BACKOFF 2
-#define BUILTIN_DIALOG_RETRIES 5
-
-apr_file_t *writetty = NULL;
-apr_file_t *readtty = NULL;
-    
-int ssl_pphrase_Handle_CB(char *, int, int, void *);
-
-static char *pphrase_array_get(apr_array_header_t *arr, int idx)
-{
-    if ((idx < 0) || (idx >= arr->nelts)) {
-        return NULL;
-    }
-
-    return ((char **)arr->elts)[idx];
-}
-
-static void pphrase_array_clear(apr_array_header_t *arr)
-{
-    if (arr->nelts > 0) {
-        memset(arr->elts, 0, arr->elt_size * arr->nelts);
-    }
-    arr->nelts = 0;
-}
-
-void ssl_pphrase_Handle(server_rec *s, apr_pool_t *p)
-{
-    SSLModConfigRec *mc = myModConfig(s);
-    SSLSrvConfigRec *sc;
-    server_rec *pServ;
-    char *cpVHostID;
-    char szPath[MAX_STRING_LEN];
-    EVP_PKEY *pPrivateKey;
-    ssl_asn1_t *asn1;
-    unsigned char *ucp;
-    long int length;
-    X509 *pX509Cert;
-    BOOL bReadable;
-    apr_array_header_t *aPassPhrase;
-    int nPassPhrase;
-    int nPassPhraseCur;
-    char *cpPassPhraseCur;
-    int nPassPhraseRetry;
-    int nPassPhraseDialog;
-    int nPassPhraseDialogCur;
-    BOOL bPassPhraseDialogOnce;
-    char **cpp;
-    int i, j;
-    ssl_algo_t algoCert, algoKey, at;
-    char *an;
-    char *cp;
-    apr_time_t pkey_mtime = 0;
-    int isterm = 1;
-    /*
-     * Start with a fresh pass phrase array
-     */
-    aPassPhrase       = apr_array_make(p, 2, sizeof(char *));
-    nPassPhrase       = 0;
-    nPassPhraseDialog = 0;
-
-    /*
-     * Walk through all configured servers
-     */
-    for (pServ = s; pServ != NULL; pServ = pServ->next) {
-        sc = mySrvConfig(pServ);
-
-        if (!sc->bEnabled)
-            continue;
-
-        cpVHostID = ssl_util_vhostid(p, pServ);
-        ssl_log(pServ, SSL_LOG_INFO,
-                "Init: Loading certificate & private key of SSL-aware server %s",
-                cpVHostID);
-
-        /*
-         * Read in server certificate(s): This is the easy part
-         * because this file isn't encrypted in any way.
-         */
-        if (sc->szPublicCertFiles[0] == NULL) {
-            ssl_log(pServ, SSL_LOG_ERROR,
-                    "Init: Server %s should be SSL-aware but has no certificate configured "
-                    "[Hint: SSLCertificateFile]", cpVHostID);
-            ssl_die();
-        }
-        algoCert = SSL_ALGO_UNKNOWN;
-        algoKey  = SSL_ALGO_UNKNOWN;
-        for (i = 0, j = 0; i < SSL_AIDX_MAX && sc->szPublicCertFiles[i] != NULL; i++) {
-
-            apr_cpystrn(szPath, sc->szPublicCertFiles[i], sizeof(szPath));
-            if ( exists_and_readable(szPath, p, NULL) != APR_SUCCESS ) {
-                ssl_log(s, SSL_LOG_ERROR|SSL_ADD_ERRNO,
-                        "Init: Can't open server certificate file %s", szPath);
-                ssl_die();
-            }
-            if ((pX509Cert = SSL_read_X509(szPath, NULL, NULL)) == NULL) {
-                ssl_log(s, SSL_LOG_ERROR|SSL_ADD_SSLERR,
-                        "Init: Unable to read server certificate from file %s", szPath);
-                ssl_die();
-            }
-
-            /*
-             * check algorithm type of certificate and make
-             * sure only one certificate per type is used.
-             */
-            at = ssl_util_algotypeof(pX509Cert, NULL);
-            an = ssl_util_algotypestr(at);
-            if (algoCert & at) {
-                ssl_log(s, SSL_LOG_ERROR|SSL_ADD_SSLERR,
-                        "Init: Multiple %s server certificates not allowed", an);
-                ssl_die();
-            }
-            algoCert |= at;
-
-            /*
-             * Insert the certificate into global module configuration to let it
-             * survive the processing between the 1st Apache API init round (where
-             * we operate here) and the 2nd Apache init round (where the
-             * certificate is actually used to configure mod_ssl's per-server
-             * configuration structures).
-             */
-            cp = asn1_table_vhost_key(mc, p, cpVHostID, an);
-            length = i2d_X509(pX509Cert, NULL);
-            ucp = ssl_asn1_table_set(mc->tPublicCert, cp, length);
-            (void)i2d_X509(pX509Cert, &ucp); /* 2nd arg increments */
-
-            /*
-             * Free the X509 structure
-             */
-            X509_free(pX509Cert);
-
-            /*
-             * Read in the private key: This is the non-trivial part, because the
-             * key is typically encrypted, so a pass phrase dialog has to be used
-             * to request it from the user (or it has to be alternatively gathered
-             * from a dialog program). The important point here is that ISPs
-             * usually have hundrets of virtual servers configured and a lot of
-             * them use SSL, so really we have to minimize the pass phrase
-             * dialogs.
-             *
-             * The idea is this: When N virtual hosts are configured and all of
-             * them use encrypted private keys with different pass phrases, we
-             * have no chance and have to pop up N pass phrase dialogs. But
-             * usually the admin is clever enough and uses the same pass phrase
-             * for more private key files (typically he even uses one single pass
-             * phrase for all). When this is the case we can minimize the dialogs
-             * by trying to re-use already known/entered pass phrases.
-             */
-            if (sc->szPrivateKeyFiles[j] != NULL)
-                apr_cpystrn(szPath, sc->szPrivateKeyFiles[j++], sizeof(szPath));
-
-            /*
-             * Try to read the private key file with the help of
-             * the callback function which serves the pass
-             * phrases to OpenSSL
-             */
-            myCtxVarSet(mc,  1, pServ);
-            myCtxVarSet(mc,  2, p);
-            myCtxVarSet(mc,  3, aPassPhrase);
-            myCtxVarSet(mc,  4, &nPassPhraseCur);
-            myCtxVarSet(mc,  5, &cpPassPhraseCur);
-            myCtxVarSet(mc,  6, cpVHostID);
-            myCtxVarSet(mc,  7, an);
-            myCtxVarSet(mc,  8, &nPassPhraseDialog);
-            myCtxVarSet(mc,  9, &nPassPhraseDialogCur);
-            myCtxVarSet(mc, 10, &bPassPhraseDialogOnce);
-
-            nPassPhraseCur        = 0;
-            nPassPhraseRetry      = 0;
-            nPassPhraseDialogCur  = 0;
-            bPassPhraseDialogOnce = TRUE;
-
-            pPrivateKey = NULL;
-
-            for (;;) {
-                /*
-                 * Try to read the private key file with the help of
-                 * the callback function which serves the pass
-                 * phrases to OpenSSL
-                 */
-                if ( exists_and_readable(szPath, p, &pkey_mtime) != APR_SUCCESS ) {
-                     ssl_log(s, SSL_LOG_ERROR|SSL_ADD_ERRNO,
-                         "Init: Can't open server private key file %s",szPath);
-                     ssl_die();
-                }
-
-                /*
-                 * if the private key is encrypted and SSLPassPhraseDialog
-                 * is configured to "builtin" it isn't possible to prompt for
-                 * a password after httpd has detached from the tty.
-                 * in this case if we already have a private key and the
-                 * file name/mtime hasn't changed, then reuse the existing key.
-                 * we also reuse existing private keys that were encrypted for
-                 * exec: and pipe: dialogs to minimize chances to snoop the
-                 * password.  that and pipe: dialogs might prompt the user
-                 * for password, which on win32 for example could happen 4
-                 * times at startup.  twice for each child and twice within
-                 * each since apache "restarts itself" on startup.
-                 * of course this will not work for the builtin dialog if
-                 * the server was started without LoadModule ssl_module
-                 * configured, then restarted with it configured.
-                 * but we fall through with a chance of success if the key
-                 * is not encrypted or can be handled via exec or pipe dialog.
-                 * and in the case of fallthrough, pkey_mtime and isatty()
-                 * are used to give a better idea as to what failed.
-                 */
-                if (pkey_mtime) {
-                    int i;
-
-                    for (i=0; i < SSL_AIDX_MAX; i++) {
-                        const char *key_id =
-                            ssl_asn1_table_keyfmt(p, cpVHostID, i);
-                        ssl_asn1_t *asn1 = 
-                            ssl_asn1_table_get(mc->tPrivateKey, key_id);
-                    
-                        if (asn1 && (asn1->source_mtime == pkey_mtime)) {
-                            ssl_log(pServ, SSL_LOG_INFO,
-                                    "%s reusing existing "
-                                    "%s private key on restart",
-                                    cpVHostID, ssl_asn1_keystr(i));
-                            return;
-                        }
-                    }
-                }
-
-                cpPassPhraseCur = NULL;
-                bReadable = ((pPrivateKey = SSL_read_PrivateKey(szPath, NULL,
-                            ssl_pphrase_Handle_CB, s)) != NULL ? TRUE : FALSE);
-                
-                /*
-                 * when the private key file now was readable,
-                 * it's fine and we go out of the loop
-                 */
-                if (bReadable)
-                   break;
-
-                /*
-                 * when we have more remembered pass phrases
-                 * try to reuse these first.
-                 */
-                if (nPassPhraseCur < nPassPhrase) {
-                    nPassPhraseCur++;
-                    continue;
-                }
-
-                /*
-                 * else it's not readable and we have no more
-                 * remembered pass phrases. Then this has to mean
-                 * that the callback function popped up the dialog
-                 * but a wrong pass phrase was entered.  We give the
-                 * user (but not the dialog program) a few more
-                 * chances...
-                 */
-#ifndef WIN32
-                if ((sc->nPassPhraseDialogType == SSL_PPTYPE_BUILTIN
-                       || sc->nPassPhraseDialogType == SSL_PPTYPE_PIPE)
-#else
-                if (sc->nPassPhraseDialogType == SSL_PPTYPE_PIPE
-#endif
-                    && cpPassPhraseCur != NULL
-                    && nPassPhraseRetry < BUILTIN_DIALOG_RETRIES ) {
-                    apr_file_printf(writetty, "Apache:mod_ssl:Error: Pass phrase incorrect "
-                            "(%d more retr%s permitted).\n",
-                            (BUILTIN_DIALOG_RETRIES-nPassPhraseRetry),
-                            (BUILTIN_DIALOG_RETRIES-nPassPhraseRetry) == 1 ? "y" : "ies");
-                    nPassPhraseRetry++;
-                    if (nPassPhraseRetry > BUILTIN_DIALOG_BACKOFF)
-                        apr_sleep((nPassPhraseRetry-BUILTIN_DIALOG_BACKOFF)
-                                    * 5 * APR_USEC_PER_SEC);
-                    continue;
-                }
-#ifdef WIN32
-                if (sc->nPassPhraseDialogType == SSL_PPTYPE_BUILTIN) {
-                    ssl_log(s, SSL_LOG_ERROR|SSL_ADD_SSLERR,
-                            "Init: PassPhraseDialog BuiltIn not supported in server private key from file %s", szPath);
-                    ssl_die();
-                }
-#endif /* WIN32 */
-
-                /*
-                 * Ok, anything else now means a fatal error.
-                 */
-                if (cpPassPhraseCur == NULL) {
-                    if (nPassPhraseDialogCur && pkey_mtime &&
-                        !(isterm = isatty(fileno(stdout)))) /* XXX: apr_isatty() */
-                    {
-                        ssl_log(pServ, SSL_LOG_ERROR|SSL_ADD_SSLERR,
-                                "Init: Unable read passphrase "
-                                "[Hint: key introduced or changed before restart?]");
-                    }
-                    else {
-                        ssl_log(pServ, SSL_LOG_ERROR|SSL_ADD_SSLERR, "Init: Private key not found");
-                    }
-                    if (sc->nPassPhraseDialogType == SSL_PPTYPE_BUILTIN
-                          || sc->nPassPhraseDialogType == SSL_PPTYPE_PIPE) {
-                        apr_file_printf(writetty, "Apache:mod_ssl:Error: Private key not found.\n");
-                        apr_file_printf(writetty, "**Stopped\n");
-                    }
-                }
-                else {
-                    ssl_log(pServ, SSL_LOG_ERROR|SSL_ADD_SSLERR, "Init: Pass phrase incorrect");
-                    if (sc->nPassPhraseDialogType == SSL_PPTYPE_BUILTIN
-                          || sc->nPassPhraseDialogType == SSL_PPTYPE_PIPE) {
-                        apr_file_printf(writetty, "Apache:mod_ssl:Error: Pass phrase incorrect.\n");
-                        apr_file_printf(writetty, "**Stopped\n");
-                    }
-                }
-                ssl_die();
-            }
-
-            if (pPrivateKey == NULL) {
-                ssl_log(s, SSL_LOG_ERROR|SSL_ADD_SSLERR,
-                        "Init: Unable to read server private key from file %s [Hint: Perhaps it is in a separate file?  See SSLCertificateKeyFile]", szPath);
-                ssl_die();
-            }
-
-            /*
-             * check algorithm type of private key and make
-             * sure only one private key per type is used.
-             */
-            at = ssl_util_algotypeof(NULL, pPrivateKey);
-            an = ssl_util_algotypestr(at);
-            if (algoKey & at) {
-                ssl_log(s, SSL_LOG_ERROR|SSL_ADD_SSLERR,
-                        "Init: Multiple %s server private keys not allowed", an);
-                ssl_die();
-            }
-            algoKey |= at;
-
-            /*
-             * Log the type of reading
-             */
-            if (nPassPhraseDialogCur == 0) {
-                ssl_log(pServ, SSL_LOG_TRACE, 
-                        "Init: (%s) unencrypted %s private key - pass phrase not required", 
-                        cpVHostID, an);
-            }
-            else {
-                if (cpPassPhraseCur != NULL) {
-                    ssl_log(pServ, SSL_LOG_TRACE, 
-                            "Init: (%s) encrypted %s private key - pass phrase requested", 
-                            cpVHostID, an);
-                }
-                else {
-                    ssl_log(pServ, SSL_LOG_TRACE, 
-                            "Init: (%s) encrypted %s private key - pass phrase reused", 
-                            cpVHostID, an);
-                }
-            }
-
-            /*
-             * Ok, when we have one more pass phrase store it
-             */
-            if (cpPassPhraseCur != NULL) {
-                cpp = (char **)apr_array_push(aPassPhrase);
-                *cpp = cpPassPhraseCur;
-                nPassPhrase++;
-            }
-
-            /*
-             * Insert private key into the global module configuration
-             * (we convert it to a stand-alone DER byte sequence
-             * because the SSL library uses static variables inside a
-             * RSA structure which do not survive DSO reloads!)
-             */
-            cp = asn1_table_vhost_key(mc, p, cpVHostID, an);
-            length = i2d_PrivateKey(pPrivateKey, NULL);
-            ucp = ssl_asn1_table_set(mc->tPrivateKey, cp, length);
-            (void)i2d_PrivateKey(pPrivateKey, &ucp); /* 2nd arg increments */
-
-            if (nPassPhraseDialogCur != 0) {
-                /* remember mtime of encrypted keys */
-                asn1 = ssl_asn1_table_get(mc->tPrivateKey, cp);
-                asn1->source_mtime = pkey_mtime;
-            }
-
-            /*
-             * Free the private key structure
-             */
-            EVP_PKEY_free(pPrivateKey);
-        }
-    }
-
-    /*
-     * Let the user know when we're successful.
-     */
-    if (nPassPhraseDialog > 0) {
-        sc = mySrvConfig(s);
-        if (sc->nPassPhraseDialogType == SSL_PPTYPE_BUILTIN
-              || sc->nPassPhraseDialogType == SSL_PPTYPE_PIPE) {
-            apr_file_printf(writetty, "\n");
-            apr_file_printf(writetty, "Ok: Pass Phrase Dialog successful.\n");
-        }
-    }
-
-    /*
-     * Wipe out the used memory from the
-     * pass phrase array and then deallocate it
-     */
-    if (aPassPhrase->nelts) {
-        pphrase_array_clear(aPassPhrase);
-        ssl_log(s, SSL_LOG_INFO,
-                "Init: Wiped out the queried pass phrases from memory");
-    }
-
-    /* Close the pipes if they were opened
-     */
-    if (readtty) {
-        apr_file_close(readtty);
-        apr_file_close(writetty);
-        readtty = writetty = NULL;
-    }
-    return;
-}
-
-static apr_status_t ssl_pipe_child_create(apr_pool_t *p, const char *progname)
-{
-    /* Child process code for 'ErrorLog "|..."';
-     * may want a common framework for this, since I expect it will
-     * be common for other foo-loggers to want this sort of thing...
-     */
-    apr_status_t rc;
-    apr_procattr_t *procattr;
-    apr_proc_t *procnew;
-
-    if (((rc = apr_procattr_create(&procattr, p)) == APR_SUCCESS) &&
-        ((rc = apr_procattr_io_set(procattr,
-                                   APR_FULL_BLOCK,
-                                   APR_FULL_BLOCK,
-                                   APR_NO_PIPE)) == APR_SUCCESS)) {
-        char **args;
-        const char *pname;
-        
-        apr_tokenize_to_argv(progname, &args, p);
-        pname = apr_pstrdup(p, args[0]);
-        procnew = (apr_proc_t *)apr_pcalloc(p, sizeof(*procnew));
-        rc = apr_proc_create(procnew, pname, (const char * const *)args,
-                             NULL, procattr, p);
-        if (rc == APR_SUCCESS) {
-            /* XXX: not sure if we aught to...
-             * apr_pool_note_subprocess(p, procnew, APR_KILL_AFTER_TIMEOUT);
-             */
-            writetty = procnew->in;
-            readtty = procnew->out;
-        }
-    }
-
-    return rc;
-}
-
-static int pipe_get_passwd_cb(char *buf, int length, char *prompt, int verify)
-{
-    apr_status_t rc;
-    char *p;
-
-    apr_file_puts(prompt, writetty);
-
-    buf[0]='\0';
-    rc = apr_file_gets(buf, length, readtty);
-    apr_file_puts(APR_EOL_STR, writetty);
-    
-    if (rc != APR_SUCCESS || apr_file_eof(readtty)) {
-	memset(buf, 0, length);
-        return 1;  /* failure */
-    }
-    if ((p = strchr(buf, '\n')) != NULL) {
-	*p = '\0';
-    }
-#ifdef WIN32
-    /* XXX: apr_sometest */
-    if ((p = strchr(buf, '\r')) != NULL) {
-	*p = '\0';
-    }
-#endif
-    return 0;
-}
-
-int ssl_pphrase_Handle_CB(char *buf, int bufsize, int verify, void *srv)
-{
-    SSLModConfigRec *mc = myModConfig((server_rec *)srv);
-    server_rec *s;
-    apr_pool_t *p;
-    apr_array_header_t *aPassPhrase;
-    SSLSrvConfigRec *sc;
-    int *pnPassPhraseCur;
-    char **cppPassPhraseCur;
-    char *cpVHostID;
-    char *cpAlgoType;
-    int *pnPassPhraseDialog;
-    int *pnPassPhraseDialogCur;
-    BOOL *pbPassPhraseDialogOnce;
-    char *cpp;
-    int len = -1;
-
-    /*
-     * Reconnect to the context of ssl_phrase_Handle()
-     */
-    s                      = myCtxVarGet(mc,  1, server_rec *);
-    p                      = myCtxVarGet(mc,  2, apr_pool_t *);
-    aPassPhrase            = myCtxVarGet(mc,  3, apr_array_header_t *);
-    pnPassPhraseCur        = myCtxVarGet(mc,  4, int *);
-    cppPassPhraseCur       = myCtxVarGet(mc,  5, char **);
-    cpVHostID              = myCtxVarGet(mc,  6, char *);
-    cpAlgoType             = myCtxVarGet(mc,  7, char *);
-    pnPassPhraseDialog     = myCtxVarGet(mc,  8, int *);
-    pnPassPhraseDialogCur  = myCtxVarGet(mc,  9, int *);
-    pbPassPhraseDialogOnce = myCtxVarGet(mc, 10, BOOL *);
-    sc                     = mySrvConfig(s);
-
-    (*pnPassPhraseDialog)++;
-    (*pnPassPhraseDialogCur)++;
-
-    /*
-     * When remembered pass phrases are available use them...
-     */
-    if ((cpp = pphrase_array_get(aPassPhrase, *pnPassPhraseCur)) != NULL) {
-        apr_cpystrn(buf, cpp, bufsize);
-        len = strlen(buf);
-        return len;
-    }
-
-    /*
-     * Builtin or Pipe dialog
-     */
-    if (sc->nPassPhraseDialogType == SSL_PPTYPE_BUILTIN
-          || sc->nPassPhraseDialogType == SSL_PPTYPE_PIPE) {
-        char *prompt;
-        int i;
-
-        if (sc->nPassPhraseDialogType == SSL_PPTYPE_PIPE) {
-            if (!readtty) {
-                ssl_log(s, SSL_LOG_INFO,
-                        "Init: Creating pass phrase dialog pipe child '%s'",
-                        sc->szPassPhraseDialogPath);
-	        if (ssl_pipe_child_create(p, sc->szPassPhraseDialogPath)
-                        != APR_SUCCESS) {
-                    ssl_log(s, SSL_LOG_ERROR,
-                            "Init: Failed to create pass phrase pipe '%s'",
-                            sc->szPassPhraseDialogPath);
-                    PEMerr(PEM_F_DEF_CALLBACK,PEM_R_PROBLEMS_GETTING_PASSWORD);
-                    memset(buf, 0, (unsigned int)bufsize);
-                    return (-1);
-                }
-            }
-            ssl_log(s, SSL_LOG_INFO,
-                    "Init: Requesting pass phrase via piped dialog");
-        }
-        else { /* sc->nPassPhraseDialogType == SSL_PPTYPE_BUILTIN */ 
-#ifdef WIN32
-            PEMerr(PEM_F_DEF_CALLBACK,PEM_R_PROBLEMS_GETTING_PASSWORD);
-            memset(buf, 0, (unsigned int)bufsize);
-            return (-1);
-#else
-            /*
-             * stderr has already been redirected to the error_log.
-             * rather than attempting to temporarily rehook it to the terminal,
-             * we print the prompt to stdout before EVP_read_pw_string turns
-             * off tty echo
-             */
-            apr_file_open_stdout(&writetty, p);
-
-            ssl_log(s, SSL_LOG_INFO,
-                    "Init: Requesting pass phrase via builtin terminal dialog");
-#endif
-        }
-
-        /*
-         * The first time display a header to inform the user about what
-         * program he actually speaks to, which module is responsible for
-         * this terminal dialog and why to the hell he has to enter
-         * something...
-         */
-        if (*pnPassPhraseDialog == 1) {
-            apr_file_printf(writetty, "%s mod_ssl/%s (Pass Phrase Dialog)\n",
-                            AP_SERVER_BASEVERSION, MOD_SSL_VERSION);
-            apr_file_printf(writetty, "Some of your private key files are encrypted for security reasons.\n");
-            apr_file_printf(writetty, "In order to read them you have to provide us with the pass phrases.\n");
-        }
-        if (*pbPassPhraseDialogOnce) {
-            *pbPassPhraseDialogOnce = FALSE;
-            apr_file_printf(writetty, "\n");
-            apr_file_printf(writetty, "Server %s (%s)\n", cpVHostID, cpAlgoType);
-        }
-
-        /*
-         * Emulate the OpenSSL internal pass phrase dialog
-         * (see crypto/pem/pem_lib.c:def_callback() for details)
-         */
-        prompt = "Enter pass phrase:";
-        apr_file_puts(prompt, writetty);
-
-        for (;;) {
-            if (sc->nPassPhraseDialogType == SSL_PPTYPE_PIPE) {
-                i = pipe_get_passwd_cb(buf, bufsize, "", FALSE); 
-            }  
-            else { /* sc->nPassPhraseDialogType == SSL_PPTYPE_BUILTIN */
-                i = EVP_read_pw_string(buf, bufsize, "", FALSE); 
-            }  
-            if (i != 0) {
-                PEMerr(PEM_F_DEF_CALLBACK,PEM_R_PROBLEMS_GETTING_PASSWORD);
-                memset(buf, 0, (unsigned int)bufsize);
-                return (-1);
-            }
-            len = strlen(buf);
-            if (len < 1)
-                apr_file_printf(writetty, "Apache:mod_ssl:Error: Pass phrase empty (needs to be at least 1 character).\n");
-            else
-                break;
-        }
-    }
-
-    /*
-     * Filter program
-     */
-    else if (sc->nPassPhraseDialogType == SSL_PPTYPE_FILTER) {
-        const char *cmd = sc->szPassPhraseDialogPath;
-        const char **argv = apr_palloc(p, sizeof(char *) * 4);
-        char *result;
-
-        ssl_log(s, SSL_LOG_INFO,
-                "Init: Requesting pass phrase from dialog filter program (%s)",
-                cmd);
-
-        argv[0] = cmd;
-        argv[1] = cpVHostID;
-        argv[2] = cpAlgoType;
-        argv[3] = NULL;
-
-        result = ssl_util_readfilter(s, p, cmd, argv);
-        apr_cpystrn(buf, result, bufsize);
-        len = strlen(buf);
-    }
-
-    /*
-     * Ok, we now have the pass phrase, so give it back
-     */
-    *cppPassPhraseCur = apr_pstrdup(p, buf);
-
-    /*
-     * And return it's length to OpenSSL...
-     */
-    return (len);
-}
-
diff --git a/modules/ssl/ssl_engine_rand.c b/modules/ssl/ssl_engine_rand.c
deleted file mode 100644
index 6acb2d6..0000000
--- a/modules/ssl/ssl_engine_rand.c
+++ /dev/null
@@ -1,208 +0,0 @@
-/*                      _             _
-**  _ __ ___   ___   __| |    ___ ___| |  mod_ssl
-** | '_ ` _ \ / _ \ / _` |   / __/ __| |  Apache Interface to OpenSSL
-** | | | | | | (_) | (_| |   \__ \__ \ |  www.modssl.org
-** |_| |_| |_|\___/ \__,_|___|___/___/_|  ftp.modssl.org
-**                      |_____|
-**  ssl_engine_rand.c
-**  Random Number Generator Seeding
-*/
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- */
-                             /* ``The generation of random
-                                  numbers is too important
-                                  to be left to chance.'' */
-
-#include "mod_ssl.h"
-
-/*  _________________________________________________________________
-**
-**  Support for better seeding of SSL library's RNG
-**  _________________________________________________________________
-*/
-
-static int ssl_rand_choosenum(int, int);
-static int ssl_rand_feedfp(apr_pool_t *, apr_file_t *, int);
-
-int ssl_rand_seed(server_rec *s, apr_pool_t *p, ssl_rsctx_t nCtx, char *prefix)
-{
-    SSLModConfigRec *mc;
-    apr_array_header_t *apRandSeed;
-    ssl_randseed_t *pRandSeeds;
-    ssl_randseed_t *pRandSeed;
-    unsigned char stackdata[256];
-    int nReq, nDone;
-    apr_file_t *fp;
-    int i, n, l;
-
-    mc = myModConfig(s);
-    nReq  = 0;
-    nDone = 0;
-    apRandSeed = mc->aRandSeed;
-    pRandSeeds = (ssl_randseed_t *)apRandSeed->elts;
-    for (i = 0; i < apRandSeed->nelts; i++) {
-        pRandSeed = &pRandSeeds[i];
-        if (pRandSeed->nCtx == nCtx) {
-            nReq += pRandSeed->nBytes;
-            if (pRandSeed->nSrc == SSL_RSSRC_FILE) {
-                /*
-                 * seed in contents of an external file
-                 */
-                if (apr_file_open(&fp, pRandSeed->cpPath, 
-                                  APR_READ, APR_OS_DEFAULT, p) != APR_SUCCESS)
-                    continue;
-                nDone += ssl_rand_feedfp(p, fp, pRandSeed->nBytes);
-                apr_file_close(fp);
-            }
-            else if (pRandSeed->nSrc == SSL_RSSRC_EXEC) {
-                const char *cmd = pRandSeed->cpPath;
-                const char **argv = apr_palloc(p, sizeof(char *) * 3);
-                /*
-                 * seed in contents generated by an external program
-                 */
-                argv[0] = cmd;
-                argv[1] = apr_itoa(p, pRandSeed->nBytes);
-                argv[2] = NULL;
-
-                if ((fp = ssl_util_ppopen(s, p, cmd, argv)) == NULL)
-                    continue;
-                nDone += ssl_rand_feedfp(p, fp, pRandSeed->nBytes);
-                ssl_util_ppclose(s, p, fp);
-            }
-            else if (pRandSeed->nSrc == SSL_RSSRC_EGD) {
-                /*
-                 * seed in contents provided by the external
-                 * Entropy Gathering Daemon (EGD)
-                 */
-                if ((n = RAND_egd(pRandSeed->cpPath)) == -1)
-                    continue;
-                nDone += n;
-            }
-            else if (pRandSeed->nSrc == SSL_RSSRC_BUILTIN) {
-                struct {
-                    time_t t;
-                    pid_t pid;
-                } my_seed;
-
-                /*
-                 * seed in the current time (usually just 4 bytes)
-                 */
-                my_seed.t = time(NULL);
-
-                /*
-                 * seed in the current process id (usually just 4 bytes)
-                 */
-                my_seed.pid = mc->pid;
-
-                l = sizeof(my_seed);
-                RAND_seed((unsigned char *)&my_seed, l);
-                nDone += l;
-                
-                /*
-                 * seed in some current state of the run-time stack (128 bytes)
-                 */
-                n = ssl_rand_choosenum(0, sizeof(stackdata)-128-1);
-                RAND_seed(stackdata+n, 128);
-                nDone += 128;
-
-            }
-        }
-    }
-    ssl_log(s, SSL_LOG_INFO, "%sSeeding PRNG with %d bytes of entropy", prefix, nDone);
-
-    if (RAND_status() == 0)
-        ssl_log(s, SSL_LOG_WARN, "%sPRNG still contains not sufficient entropy!", prefix);
-
-    return nDone;
-}
-
-#define BUFSIZE 8192
-
-static int ssl_rand_feedfp(apr_pool_t *p, apr_file_t *fp, int nReq)
-{
-    apr_size_t nDone;
-    unsigned char caBuf[BUFSIZE];
-    apr_size_t nBuf;
-    apr_size_t nRead;
-    apr_size_t nTodo;
-
-    nDone = 0;
-    nRead = BUFSIZE;
-    nTodo = nReq;
-    while (1) {
-        if (nReq > 0)
-            nRead = (nTodo < BUFSIZE ? nTodo : BUFSIZE);
-        nBuf = nRead;
-        if (apr_file_read(fp, caBuf, &nBuf) != APR_SUCCESS)
-            break;
-        RAND_seed(caBuf, nBuf);
-        nDone += nBuf;
-        if (nReq > 0) {
-            nTodo -= nBuf;
-            if (nTodo <= 0)
-                break;
-        }
-    }
-    return nDone;
-}
-
-static int ssl_rand_choosenum(int l, int h)
-{
-    int i;
-    char buf[50];
-
-    apr_snprintf(buf, sizeof(buf), "%.0f",
-                 (((double)(rand()%RAND_MAX)/RAND_MAX)*(h-l)));
-    i = atoi(buf)+1;
-    if (i < l) i = l;
-    if (i > h) i = h;
-    return i;
-}
-
diff --git a/modules/ssl/ssl_engine_vars.c b/modules/ssl/ssl_engine_vars.c
deleted file mode 100644
index 1671ec1..0000000
--- a/modules/ssl/ssl_engine_vars.c
+++ /dev/null
@@ -1,690 +0,0 @@
-/*                      _             _
-**  _ __ ___   ___   __| |    ___ ___| |  mod_ssl
-** | '_ ` _ \ / _ \ / _` |   / __/ __| |  Apache Interface to OpenSSL
-** | | | | | | (_) | (_| |   \__ \__ \ |  www.modssl.org
-** |_| |_| |_|\___/ \__,_|___|___/___/_|  ftp.modssl.org
-**                      |_____|
-**  ssl_engine_vars.c
-**  Variable Lookup Facility
-*/
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- */
-                             /* ``Those of you who think they
-                                  know everything are very annoying
-                                  to those of us who do.''
-                                                  -- Unknown       */
-#include "mod_ssl.h"
-
-/*  _________________________________________________________________
-**
-**  Variable Lookup
-**  _________________________________________________________________
-*/
-
-static char *ssl_var_lookup_header(apr_pool_t *p, request_rec *r, const char *name);
-static char *ssl_var_lookup_ssl(apr_pool_t *p, conn_rec *c, char *var);
-static char *ssl_var_lookup_ssl_cert(apr_pool_t *p, X509 *xs, char *var);
-static char *ssl_var_lookup_ssl_cert_dn(apr_pool_t *p, X509_NAME *xsname, char *var);
-static char *ssl_var_lookup_ssl_cert_valid(apr_pool_t *p, ASN1_UTCTIME *tm);
-static char *ssl_var_lookup_ssl_cert_serial(apr_pool_t *p, X509 *xs);
-static char *ssl_var_lookup_ssl_cert_chain(apr_pool_t *p, STACK_OF(X509) *sk, char *var);
-static char *ssl_var_lookup_ssl_cert_PEM(apr_pool_t *p, X509 *xs);
-static char *ssl_var_lookup_ssl_cert_verify(apr_pool_t *p, conn_rec *c);
-static char *ssl_var_lookup_ssl_cipher(apr_pool_t *p, conn_rec *c, char *var);
-static void  ssl_var_lookup_ssl_cipher_bits(SSL *ssl, int *usekeysize, int *algkeysize);
-static char *ssl_var_lookup_ssl_version(apr_pool_t *p, char *var);
-
-void ssl_var_register(void)
-{
-    APR_REGISTER_OPTIONAL_FN(ssl_var_lookup);
-    return;
-}
-
-char *ssl_var_lookup(apr_pool_t *p, server_rec *s, conn_rec *c, request_rec *r, char *var)
-{
-    SSLConnRec *sslconn;
-    SSLModConfigRec *mc = myModConfig(s);
-    char *result;
-    BOOL resdup;
-    time_t tc;
-    struct tm *tm;
-
-    result = NULL;
-    resdup = TRUE;
-
-    /*
-     * When no pool is given try to find one
-     */
-    if (p == NULL) {
-        if (r != NULL)
-            p = r->pool;
-        else if (c != NULL)
-            p = c->pool;
-        else
-            p = mc->pPool;
-    }
-
-    /*
-     * Request dependent stuff
-     */
-    if (r != NULL) {
-        if (strcEQ(var, "HTTP_USER_AGENT"))
-            result = ssl_var_lookup_header(p, r, "User-Agent");
-        else if (strcEQ(var, "HTTP_REFERER"))
-            result = ssl_var_lookup_header(p, r, "Referer");
-        else if (strcEQ(var, "HTTP_COOKIE"))
-            result = ssl_var_lookup_header(p, r, "Cookie");
-        else if (strcEQ(var, "HTTP_FORWARDED"))
-            result = ssl_var_lookup_header(p, r, "Forwarded");
-        else if (strcEQ(var, "HTTP_HOST"))
-            result = ssl_var_lookup_header(p, r, "Host");
-        else if (strcEQ(var, "HTTP_PROXY_CONNECTION"))
-            result = ssl_var_lookup_header(p, r, "Proxy-Connection");
-        else if (strcEQ(var, "HTTP_ACCEPT"))
-            result = ssl_var_lookup_header(p, r, "Accept");
-        else if (strlen(var) > 5 && strcEQn(var, "HTTP:", 5))
-            /* all other headers from which we are still not know about */
-            result = ssl_var_lookup_header(p, r, var+5);
-        else if (strcEQ(var, "THE_REQUEST"))
-            result = r->the_request;
-        else if (strcEQ(var, "REQUEST_METHOD"))
-            result = (char *)(r->method);
-        else if (strcEQ(var, "REQUEST_SCHEME"))
-            result = (char *)ap_http_method(r);
-        else if (strcEQ(var, "REQUEST_URI"))
-            result = r->uri;
-        else if (strcEQ(var, "SCRIPT_FILENAME") ||
-                 strcEQ(var, "REQUEST_FILENAME"))
-            result = r->filename;
-        else if (strcEQ(var, "PATH_INFO"))
-            result = r->path_info;
-        else if (strcEQ(var, "QUERY_STRING"))
-            result = r->args;
-        else if (strcEQ(var, "REMOTE_HOST"))
-            result = (char *)ap_get_remote_host(r->connection,
-					r->per_dir_config, REMOTE_NAME, NULL);
-        else if (strcEQ(var, "REMOTE_IDENT"))
-            result = (char *)ap_get_remote_logname(r);
-        else if (strcEQ(var, "IS_SUBREQ"))
-            result = (r->main != NULL ? "true" : "false");
-        else if (strcEQ(var, "DOCUMENT_ROOT"))
-            result = (char *)ap_document_root(r);
-        else if (strcEQ(var, "SERVER_ADMIN"))
-            result = r->server->server_admin;
-        else if (strcEQ(var, "SERVER_NAME"))
-            result = (char *)ap_get_server_name(r);
-        else if (strcEQ(var, "SERVER_PORT"))
-            result = apr_psprintf(p, "%u", ap_get_server_port(r));
-        else if (strcEQ(var, "SERVER_PROTOCOL"))
-            result = r->protocol;
-    }
-
-    /*
-     * Connection stuff
-     */
-    if (result == NULL && c != NULL) {
-        sslconn = myConnConfig(c);
-        if (strcEQ(var, "REMOTE_ADDR"))
-            result = c->remote_ip;
-        else if (strcEQ(var, "REMOTE_USER"))
-            result = r->user;
-        else if (strcEQ(var, "AUTH_TYPE"))
-            result = r->ap_auth_type;
-        else if (strlen(var) > 4 && strcEQn(var, "SSL_", 4))
-            result = ssl_var_lookup_ssl(p, c, var+4);
-        else if (strcEQ(var, "HTTPS")) {
-            if (sslconn->ssl != NULL)
-                result = "on";
-            else
-                result = "off";
-        }
-    }
-
-    /*
-     * Totally independent stuff
-     */
-    if (result == NULL) {
-        if (strlen(var) > 12 && strcEQn(var, "SSL_VERSION_", 12))
-            result = ssl_var_lookup_ssl_version(p, var+12);
-        else if (strcEQ(var, "SERVER_SOFTWARE"))
-            result = (char *)ap_get_server_version();
-        else if (strcEQ(var, "API_VERSION")) {
-            result = apr_psprintf(p, "%d", MODULE_MAGIC_NUMBER);
-            resdup = FALSE;
-        }
-        else if (strcEQ(var, "TIME_YEAR")) {
-            tc = time(NULL);
-            tm = localtime(&tc);
-            result = apr_psprintf(p, "%02d%02d",
-                                 (tm->tm_year / 100) + 19, tm->tm_year % 100);
-            resdup = FALSE;
-        }
-#define MKTIMESTR(format, tmfield) \
-            tc = time(NULL); \
-            tm = localtime(&tc); \
-            result = apr_psprintf(p, format, tm->tmfield); \
-            resdup = FALSE;
-        else if (strcEQ(var, "TIME_MON")) {
-            MKTIMESTR("%02d", tm_mon+1)
-        }
-        else if (strcEQ(var, "TIME_DAY")) {
-            MKTIMESTR("%02d", tm_mday)
-        }
-        else if (strcEQ(var, "TIME_HOUR")) {
-            MKTIMESTR("%02d", tm_hour)
-        }
-        else if (strcEQ(var, "TIME_MIN")) {
-            MKTIMESTR("%02d", tm_min)
-        }
-        else if (strcEQ(var, "TIME_SEC")) {
-            MKTIMESTR("%02d", tm_sec)
-        }
-        else if (strcEQ(var, "TIME_WDAY")) {
-            MKTIMESTR("%d", tm_wday)
-        }
-        else if (strcEQ(var, "TIME")) {
-            tc = time(NULL);
-            tm = localtime(&tc);
-            result = apr_psprintf(p,
-                        "%02d%02d%02d%02d%02d%02d%02d", (tm->tm_year / 100) + 19,
-                        (tm->tm_year % 100), tm->tm_mon+1, tm->tm_mday,
-                        tm->tm_hour, tm->tm_min, tm->tm_sec);
-            resdup = FALSE;
-        }
-        /* all other env-variables from the parent Apache process */
-        else if (strlen(var) > 4 && strcEQn(var, "ENV:", 4)) {
-            result = (char *)apr_table_get(r->notes, var+4);
-            if (result == NULL)
-                result = (char *)apr_table_get(r->subprocess_env, var+4);
-            if (result == NULL)
-                result = getenv(var+4);
-        }
-    }
-
-    if (result != NULL && resdup)
-        result = apr_pstrdup(p, result);
-    if (result == NULL)
-        result = "";
-    return result;
-}
-
-static char *ssl_var_lookup_header(apr_pool_t *p, request_rec *r, const char *name)
-{
-    char *hdr = NULL;
-
-    if ((hdr = (char *)apr_table_get(r->headers_in, name)) != NULL)
-        hdr = apr_pstrdup(p, hdr);
-    return hdr;
-}
-
-static char *ssl_var_lookup_ssl(apr_pool_t *p, conn_rec *c, char *var)
-{
-    SSLConnRec *sslconn = myConnConfig(c);
-    char *result;
-    X509 *xs;
-    STACK_OF(X509) *sk;
-    SSL *ssl;
-
-    result = NULL;
-
-    ssl = sslconn->ssl;
-    if (strlen(var) > 8 && strcEQn(var, "VERSION_", 8)) {
-        result = ssl_var_lookup_ssl_version(p, var+8);
-    }
-    else if (ssl != NULL && strcEQ(var, "PROTOCOL")) {
-        result = (char *)SSL_get_version(ssl);
-    }
-    else if (ssl != NULL && strcEQ(var, "SESSION_ID")) {
-        char buf[SSL_SESSION_ID_STRING_LEN];
-        SSL_SESSION *pSession = SSL_get_session(ssl);
-        result = apr_pstrdup(p, SSL_SESSION_id2sz(
-                                SSL_SESSION_get_session_id(pSession),
-                                SSL_SESSION_get_session_id_length(pSession),
-                                buf, sizeof(buf)));
-    }
-    else if (ssl != NULL && strlen(var) >= 6 && strcEQn(var, "CIPHER", 6)) {
-        result = ssl_var_lookup_ssl_cipher(p, c, var+6);
-    }
-    else if (ssl != NULL && strlen(var) > 18 && strcEQn(var, "CLIENT_CERT_CHAIN_", 18)) {
-        sk = SSL_get_peer_cert_chain(ssl);
-        result = ssl_var_lookup_ssl_cert_chain(p, sk, var+17);
-    }
-    else if (ssl != NULL && strcEQ(var, "CLIENT_VERIFY")) {
-        result = ssl_var_lookup_ssl_cert_verify(p, c);
-    }
-    else if (ssl != NULL && strlen(var) > 7 && strcEQn(var, "CLIENT_", 7)) {
-        if ((xs = SSL_get_peer_certificate(ssl)) != NULL)
-            result = ssl_var_lookup_ssl_cert(p, xs, var+7);
-    }
-    else if (ssl != NULL && strlen(var) > 7 && strcEQn(var, "SERVER_", 7)) {
-        if ((xs = SSL_get_certificate(ssl)) != NULL)
-            result = ssl_var_lookup_ssl_cert(p, xs, var+7);
-    }
-    return result;
-}
-
-static char *ssl_var_lookup_ssl_cert(apr_pool_t *p, X509 *xs, char *var)
-{
-    char *result;
-    BOOL resdup;
-    X509_NAME *xsname;
-    int nid;
-    char *cp;
-
-    result = NULL;
-    resdup = TRUE;
-
-    if (strcEQ(var, "M_VERSION")) {
-        result = apr_psprintf(p, "%lu", X509_get_version(xs)+1);
-        resdup = FALSE;
-    }
-    else if (strcEQ(var, "M_SERIAL")) {
-        result = ssl_var_lookup_ssl_cert_serial(p, xs);
-    }
-    else if (strcEQ(var, "V_START")) {
-        result = ssl_var_lookup_ssl_cert_valid(p, X509_get_notBefore(xs));
-    }
-    else if (strcEQ(var, "V_END")) {
-        result = ssl_var_lookup_ssl_cert_valid(p, X509_get_notAfter(xs));
-    }
-    else if (strcEQ(var, "S_DN")) {
-        xsname = X509_get_subject_name(xs);
-        cp = X509_NAME_oneline(xsname, NULL, 0);
-        result = apr_pstrdup(p, cp);
-        free(cp);
-        resdup = FALSE;
-    }
-    else if (strlen(var) > 5 && strcEQn(var, "S_DN_", 5)) {
-        xsname = X509_get_subject_name(xs);
-        result = ssl_var_lookup_ssl_cert_dn(p, xsname, var+5);
-        resdup = FALSE;
-    }
-    else if (strcEQ(var, "I_DN")) {
-        xsname = X509_get_issuer_name(xs);
-        cp = X509_NAME_oneline(xsname, NULL, 0);
-        result = apr_pstrdup(p, cp);
-        free(cp);
-        resdup = FALSE;
-    }
-    else if (strlen(var) > 5 && strcEQn(var, "I_DN_", 5)) {
-        xsname = X509_get_issuer_name(xs);
-        result = ssl_var_lookup_ssl_cert_dn(p, xsname, var+5);
-        resdup = FALSE;
-    }
-    else if (strcEQ(var, "A_SIG")) {
-        nid = OBJ_obj2nid((ASN1_OBJECT *)X509_get_signature_algorithm(xs));
-        result = apr_pstrdup(p, 
-                             (nid == NID_undef) ? "UNKNOWN" : OBJ_nid2ln(nid));
-        resdup = FALSE;
-    }
-    else if (strcEQ(var, "A_KEY")) {
-        nid = OBJ_obj2nid((ASN1_OBJECT *)X509_get_key_algorithm(xs));
-        result = apr_pstrdup(p,
-                             (nid == NID_undef) ? "UNKNOWN" : OBJ_nid2ln(nid));
-        resdup = FALSE;
-    }
-    else if (strcEQ(var, "CERT")) {
-        result = ssl_var_lookup_ssl_cert_PEM(p, xs);
-    }
-
-    if (result != NULL && resdup)
-        result = apr_pstrdup(p, result);
-    return result;
-}
-
-static const struct {
-    char *name;
-    int   nid;
-} ssl_var_lookup_ssl_cert_dn_rec[] = {
-    { "C",     NID_countryName            },
-    { "ST",    NID_stateOrProvinceName    }, /* officially    (RFC2156) */
-    { "SP",    NID_stateOrProvinceName    }, /* compatibility (SSLeay)  */
-    { "L",     NID_localityName           },
-    { "O",     NID_organizationName       },
-    { "OU",    NID_organizationalUnitName },
-    { "CN",    NID_commonName             },
-    { "T",     NID_title                  },
-    { "I",     NID_initials               },
-    { "G",     NID_givenName              },
-    { "S",     NID_surname                },
-    { "D",     NID_description            },
-    { "UID",   NID_uniqueIdentifier       },
-    { "Email", NID_pkcs9_emailAddress     },
-    { NULL,    0                          }
-};
-
-static char *ssl_var_lookup_ssl_cert_dn(apr_pool_t *p, X509_NAME *xsname, char *var)
-{
-    char *result;
-    X509_NAME_ENTRY *xsne;
-    int i, j, n;
-    unsigned char *data_ptr;
-    int data_len;
-
-    result = NULL;
-
-    for (i = 0; ssl_var_lookup_ssl_cert_dn_rec[i].name != NULL; i++) {
-        if (strEQ(var, ssl_var_lookup_ssl_cert_dn_rec[i].name)) {
-            for (j = 0; j < sk_X509_NAME_ENTRY_num((STACK_OF(X509_NAME_ENTRY) *)
-                                                 X509_NAME_get_entries(xsname));
-                 j++) {
-                xsne = sk_X509_NAME_ENTRY_value((STACK_OF(X509_NAME_ENTRY) *)
-                                             X509_NAME_get_entries(xsname), j);
-
-                n =OBJ_obj2nid((ASN1_OBJECT *)X509_NAME_ENTRY_get_object(xsne));
-                data_ptr = X509_NAME_ENTRY_get_data_ptr(xsne);
-                data_len = X509_NAME_ENTRY_get_data_len(xsne);
-
-                if (n == ssl_var_lookup_ssl_cert_dn_rec[i].nid) {
-                    result = apr_palloc(p, data_len+1);
-                    apr_cpystrn(result, (char *)data_ptr, data_len+1);
-#ifdef CHARSET_EBCDIC
-                    ascii2ebcdic(result, result, xsne->value->length);
-#endif /* CHARSET_EBCDIC */
-                    result[data_len] = NUL;
-                    break;
-                }
-            }
-            break;
-        }
-    }
-    return result;
-}
-
-static char *ssl_var_lookup_ssl_cert_valid(apr_pool_t *p, ASN1_UTCTIME *tm)
-{
-    char *result;
-    BIO* bio;
-    int n;
-
-    if ((bio = BIO_new(BIO_s_mem())) == NULL)
-        return NULL;
-    ASN1_UTCTIME_print(bio, tm);
-    n = BIO_pending(bio);
-    result = apr_pcalloc(p, n+1);
-    n = BIO_read(bio, result, n);
-    result[n] = NUL;
-    BIO_free(bio);
-    return result;
-}
-
-static char *ssl_var_lookup_ssl_cert_serial(apr_pool_t *p, X509 *xs)
-{
-    char *result;
-    BIO *bio;
-    int n;
-
-    if ((bio = BIO_new(BIO_s_mem())) == NULL)
-        return NULL;
-    i2a_ASN1_INTEGER(bio, X509_get_serialNumber(xs));
-    n = BIO_pending(bio);
-    result = apr_pcalloc(p, n+1);
-    n = BIO_read(bio, result, n);
-    result[n] = NUL;
-    BIO_free(bio);
-    return result;
-}
-
-static char *ssl_var_lookup_ssl_cert_chain(apr_pool_t *p, STACK_OF(X509) *sk, char *var)
-{
-    char *result;
-    X509 *xs;
-    int n;
-
-    result = NULL;
-
-    if (strspn(var, "0123456789") == strlen(var)) {
-        n = atoi(var);
-        if (n < sk_X509_num(sk)) {
-            xs = sk_X509_value(sk, n);
-            result = ssl_var_lookup_ssl_cert_PEM(p, xs);
-        }
-    }
-
-    return result;
-}
-
-static char *ssl_var_lookup_ssl_cert_PEM(apr_pool_t *p, X509 *xs)
-{
-    char *result;
-    BIO *bio;
-    int n;
-
-    if ((bio = BIO_new(BIO_s_mem())) == NULL)
-        return NULL;
-    PEM_write_bio_X509(bio, xs);
-    n = BIO_pending(bio);
-    result = apr_pcalloc(p, n+1);
-    n = BIO_read(bio, result, n);
-    result[n] = NUL;
-    BIO_free(bio);
-    return result;
-}
-
-static char *ssl_var_lookup_ssl_cert_verify(apr_pool_t *p, conn_rec *c)
-{
-    SSLConnRec *sslconn = myConnConfig(c);
-    char *result;
-    long vrc;
-    const char *verr;
-    const char *vinfo;
-    SSL *ssl;
-    X509 *xs;
-
-    result = NULL;
-    ssl   = sslconn->ssl;
-    verr  = sslconn->verify_error;
-    vinfo = sslconn->verify_info;
-    vrc   = SSL_get_verify_result(ssl);
-    xs    = SSL_get_peer_certificate(ssl);
-
-    if (vrc == X509_V_OK && verr == NULL && vinfo == NULL && xs == NULL)
-        /* no client verification done at all */
-        result = "NONE";
-    else if (vrc == X509_V_OK && verr == NULL && vinfo == NULL && xs != NULL)
-        /* client verification done successful */
-        result = "SUCCESS";
-    else if (vrc == X509_V_OK && vinfo != NULL && strEQ(vinfo, "GENEROUS"))
-        /* client verification done in generous way */
-        result = "GENEROUS";
-    else
-        /* client verification failed */
-        result = apr_psprintf(p, "FAILED:%s", verr);
-    return result;
-}
-
-static char *ssl_var_lookup_ssl_cipher(apr_pool_t *p, conn_rec *c, char *var)
-{
-    SSLConnRec *sslconn = myConnConfig(c);    
-    char *result;
-    BOOL resdup;
-    int usekeysize, algkeysize;
-    SSL *ssl;
-
-    result = NULL;
-    resdup = TRUE;
-
-    ssl = sslconn->ssl;
-    ssl_var_lookup_ssl_cipher_bits(ssl, &usekeysize, &algkeysize);
-
-    if (ssl && strEQ(var, "")) {
-        SSL_CIPHER *cipher = SSL_get_current_cipher(ssl);
-        result = (cipher != NULL ? (char *)SSL_CIPHER_get_name(cipher) : NULL);
-    }
-    else if (strcEQ(var, "_EXPORT"))
-        result = (usekeysize < 56 ? "true" : "false");
-    else if (strcEQ(var, "_USEKEYSIZE")) {
-        result = apr_psprintf(p, "%d", usekeysize);
-        resdup = FALSE;
-    }
-    else if (strcEQ(var, "_ALGKEYSIZE")) {
-        result = apr_psprintf(p, "%d", algkeysize);
-        resdup = FALSE;
-    }
-
-    if (result != NULL && resdup)
-        result = apr_pstrdup(p, result);
-    return result;
-}
-
-static void ssl_var_lookup_ssl_cipher_bits(SSL *ssl, int *usekeysize, int *algkeysize)
-{
-    SSL_CIPHER *cipher;
-
-    *usekeysize = 0;
-    *algkeysize = 0;
-    if (ssl != NULL)
-        if ((cipher = SSL_get_current_cipher(ssl)) != NULL)
-            *usekeysize = SSL_CIPHER_get_bits(cipher, algkeysize);
-    return;
-}
-
-static char *ssl_var_lookup_ssl_version(apr_pool_t *p, char *var)
-{
-    char *result;
-    char *cp, *cp2;
-
-    result = NULL;
-
-    if (strEQ(var, "PRODUCT")) {
-#if defined(SSL_PRODUCT_NAME) && defined(SSL_PRODUCT_VERSION)
-        result = apr_psprintf(p, "%s/%s", SSL_PRODUCT_NAME, SSL_PRODUCT_VERSION);
-#else
-        result = NULL;
-#endif
-    }
-    else if (strEQ(var, "INTERFACE")) {
-        result = apr_psprintf(p, "mod_ssl/%s", MOD_SSL_VERSION);
-    }
-    else if (strEQ(var, "LIBRARY")) {
-        result = apr_pstrdup(p, SSL_LIBRARY_TEXT);
-        if ((cp = strchr(result, ' ')) != NULL) {
-            *cp = '/';
-            if ((cp2 = strchr(cp, ' ')) != NULL)
-                *cp2 = NUL;
-        }
-    }
-    return result;
-}
-
-/*  _________________________________________________________________
-**
-**  SSL Extension to mod_log_config
-**  _________________________________________________________________
-*/
-
-#include "../../modules/loggers/mod_log_config.h"
-
-static const char *ssl_var_log_handler_c(request_rec *r, char *a);
-static const char *ssl_var_log_handler_x(request_rec *r, char *a);
-
-/*
- * register us for the mod_log_config function registering phase
- * to establish %{...}c and to be able to expand %{...}x variables.
- */
-void ssl_var_log_config_register(apr_pool_t *p)
-{
-    static APR_OPTIONAL_FN_TYPE(ap_register_log_handler) *log_pfn_register;
-
-    log_pfn_register = APR_RETRIEVE_OPTIONAL_FN(ap_register_log_handler);
-
-    if (log_pfn_register) {
-        log_pfn_register(p, "c", ssl_var_log_handler_c, 0);
-        log_pfn_register(p, "x", ssl_var_log_handler_x, 0);
-    }
-    return;
-}
-
-/*
- * implement the %{..}c log function
- * (we are the only function)
- */
-static const char *ssl_var_log_handler_c(request_rec *r, char *a)
-{
-    SSLConnRec *sslconn = myConnConfig(r->connection);
-    char *result;
-
-    if (sslconn->ssl == NULL)
-        return NULL;
-    result = NULL;
-    if (strEQ(a, "version"))
-        result = ssl_var_lookup(r->pool, r->server, r->connection, r, "SSL_PROTOCOL");
-    else if (strEQ(a, "cipher"))
-        result = ssl_var_lookup(r->pool, r->server, r->connection, r, "SSL_CIPHER");
-    else if (strEQ(a, "subjectdn") || strEQ(a, "clientcert"))
-        result = ssl_var_lookup(r->pool, r->server, r->connection, r, "SSL_CLIENT_S_DN");
-    else if (strEQ(a, "issuerdn") || strEQ(a, "cacert"))
-        result = ssl_var_lookup(r->pool, r->server, r->connection, r, "SSL_CLIENT_I_DN");
-    else if (strEQ(a, "errcode"))
-        result = "-";
-    else if (strEQ(a, "errstr"))
-        result = (char *)sslconn->verify_error;
-    if (result != NULL && result[0] == NUL)
-        result = NULL;
-    return result;
-}
-
-/*
- * extend the implementation of the %{..}x log function
- * (there can be more functions)
- */
-static const char *ssl_var_log_handler_x(request_rec *r, char *a)
-{
-    SSLConnRec *sslconn = myConnConfig(r->connection);
-    char *result;
-
-    result = NULL;
-    if (sslconn && sslconn->ssl)
-        result = ssl_var_lookup(r->pool, r->server, r->connection, r, a);
-    if (result != NULL && result[0] == NUL)
-        result = NULL;
-    return result;
-}
-
diff --git a/modules/ssl/ssl_expr.c b/modules/ssl/ssl_expr.c
deleted file mode 100644
index 8a019fe..0000000
--- a/modules/ssl/ssl_expr.c
+++ /dev/null
@@ -1,115 +0,0 @@
-/*                      _             _
-**  _ __ ___   ___   __| |    ___ ___| |  mod_ssl
-** | '_ ` _ \ / _ \ / _` |   / __/ __| |  Apache Interface to OpenSSL
-** | | | | | | (_) | (_| |   \__ \__ \ |  www.modssl.org
-** |_| |_| |_|\___/ \__,_|___|___/___/_|  ftp.modssl.org
-**                      |_____|
-**  ssl_expr.c
-**  Expression Handling
-*/
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- */
-                             /* ``It is hard to fly with
-                                  the eagles when you work
-                                  with the turkeys.''
-                                          -- Unknown  */
-#include "mod_ssl.h"
-
-/*  _________________________________________________________________
-**
-**  Expression Handling
-**  _________________________________________________________________
-*/
-
-ssl_expr_info_type ssl_expr_info;
-char              *ssl_expr_error;
-
-ssl_expr *ssl_expr_comp(apr_pool_t *p, char *expr)
-{
-    ssl_expr_info.pool       = p;
-    ssl_expr_info.inputbuf   = expr;
-    ssl_expr_info.inputlen   = strlen(expr);
-    ssl_expr_info.inputptr   = ssl_expr_info.inputbuf;
-    ssl_expr_info.expr       = FALSE;
-
-    ssl_expr_error = NULL;
-    if (ssl_expr_yyparse())
-        return NULL;
-    return ssl_expr_info.expr;
-}
-
-char *ssl_expr_get_error(void)
-{
-    if (ssl_expr_error == NULL)
-        return "";
-    return ssl_expr_error;
-}
-
-ssl_expr *ssl_expr_make(ssl_expr_node_op op, void *a1, void *a2)
-{
-    ssl_expr *node;
-
-    node = (ssl_expr *)apr_palloc(ssl_expr_info.pool, sizeof(ssl_expr));
-    node->node_op   = op;
-    node->node_arg1 = (char *)a1;
-    node->node_arg2 = (char *)a2;
-    return node;
-}
-
-int ssl_expr_exec(request_rec *r, ssl_expr *expr)
-{
-    BOOL rc;
-
-    rc = ssl_expr_eval(r, expr);
-    if (ssl_expr_error != NULL)
-        return (-1);
-    else
-        return (rc ? 1 : 0);
-}
diff --git a/modules/ssl/ssl_expr.h b/modules/ssl/ssl_expr.h
deleted file mode 100644
index 8038031..0000000
--- a/modules/ssl/ssl_expr.h
+++ /dev/null
@@ -1,136 +0,0 @@
-/*                      _             _
-**  _ __ ___   ___   __| |    ___ ___| |  mod_ssl
-** | '_ ` _ \ / _ \ / _` |   / __/ __| |  Apache Interface to OpenSSL
-** | | | | | | (_) | (_| |   \__ \__ \ |  www.modssl.org
-** |_| |_| |_|\___/ \__,_|___|___/___/_|  ftp.modssl.org
-**                      |_____|
-**  ssl_expr.h
-**  Expression Handling (Header)
-*/
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- */
-                             /* ``May all your PUSHes be POPed.'' */
-
-#ifndef __SSL_EXPR_H__
-#define __SSL_EXPR_H__
-
-#ifndef FALSE
-#define FALSE 0
-#endif
-
-#ifndef TRUE
-#define TRUE !FALSE
-#endif
-
-#ifndef YY_NULL
-#define YY_NULL 0
-#endif
-
-#ifndef MIN
-#define MIN(a,b) (((a)<(b))?(a):(b))
-#endif
-
-#ifndef BOOL
-#define BOOL unsigned int
-#endif
-
-#ifndef NULL
-#define NULL (void *)0
-#endif
-
-#ifndef NUL
-#define NUL '\0'
-#endif
-
-#ifndef YYDEBUG
-#define YYDEBUG 0
-#endif
-
-typedef enum {
-    op_NOP, op_ListElement,
-    op_True, op_False, op_Not, op_Or, op_And, op_Comp,
-    op_EQ, op_NE, op_LT, op_LE, op_GT, op_GE, op_IN, op_REG, op_NRE,
-    op_Digit, op_String, op_Regex, op_Var, op_Func
-} ssl_expr_node_op;
-
-typedef struct {
-    ssl_expr_node_op node_op;
-    void *node_arg1;
-    void *node_arg2;
-} ssl_expr_node;
-
-typedef ssl_expr_node ssl_expr;
-
-typedef struct {
-	apr_pool_t *pool;
-    char     *inputbuf;
-    int       inputlen;
-    char     *inputptr;
-    ssl_expr *expr;
-} ssl_expr_info_type;
-
-extern ssl_expr_info_type ssl_expr_info;
-extern char *ssl_expr_error;
-
-#define yylval  ssl_expr_yylval
-#define yyerror ssl_expr_yyerror
-#define yyinput ssl_expr_yyinput
-
-extern int ssl_expr_yyparse(void);
-extern int ssl_expr_yyerror(char *);
-extern int ssl_expr_yylex(void);
-
-extern ssl_expr *ssl_expr_comp(apr_pool_t *, char *);
-extern int       ssl_expr_exec(request_rec *, ssl_expr *);
-extern char     *ssl_expr_get_error(void);
-extern ssl_expr *ssl_expr_make(ssl_expr_node_op, void *, void *);
-extern BOOL      ssl_expr_eval(request_rec *, ssl_expr *);
-
-#endif /* __SSL_EXPR_H__ */
diff --git a/modules/ssl/ssl_expr_eval.c b/modules/ssl/ssl_expr_eval.c
deleted file mode 100644
index 998216f..0000000
--- a/modules/ssl/ssl_expr_eval.c
+++ /dev/null
@@ -1,287 +0,0 @@
-/*                      _             _
-**  _ __ ___   ___   __| |    ___ ___| |  mod_ssl
-** | '_ ` _ \ / _ \ / _` |   / __/ __| |  Apache Interface to OpenSSL
-** | | | | | | (_) | (_| |   \__ \__ \ |  www.modssl.org
-** |_| |_| |_|\___/ \__,_|___|___/___/_|  ftp.modssl.org
-**                      |_____|
-**  ssl_expr_eval.c
-**  Expression Evaluation
-*/
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- */
-                             /* ``Make love,
-                                  not software!''
-                                        -- Unknown */
-#include "mod_ssl.h"
-
-/*  _________________________________________________________________
-**
-**  Expression Evaluation
-**  _________________________________________________________________
-*/
-
-static BOOL  ssl_expr_eval_comp(request_rec *, ssl_expr *);
-static char *ssl_expr_eval_word(request_rec *, ssl_expr *);
-static char *ssl_expr_eval_func_file(request_rec *, char *);
-static int   ssl_expr_eval_strcmplex(char *, char *);
-
-BOOL ssl_expr_eval(request_rec *r, ssl_expr *node)
-{
-    switch (node->node_op) {
-        case op_True: {
-            return TRUE;
-        }
-        case op_False: {
-            return FALSE;
-        }
-        case op_Not: {
-            ssl_expr *e = (ssl_expr *)node->node_arg1;
-            return (!ssl_expr_eval(r, e));
-        }
-        case op_Or: {
-            ssl_expr *e1 = (ssl_expr *)node->node_arg1;
-            ssl_expr *e2 = (ssl_expr *)node->node_arg2;
-            return (ssl_expr_eval(r, e1) || ssl_expr_eval(r, e2));
-        }
-        case op_And: {
-            ssl_expr *e1 = (ssl_expr *)node->node_arg1;
-            ssl_expr *e2 = (ssl_expr *)node->node_arg2;
-            return (ssl_expr_eval(r, e1) && ssl_expr_eval(r, e2));
-        }
-        case op_Comp: {
-            ssl_expr *e = (ssl_expr *)node->node_arg1;
-            return ssl_expr_eval_comp(r, e);
-        }
-        default: {
-            ssl_expr_error = "Internal evaluation error: Unknown expression node";
-            return FALSE;
-        }
-    }
-}
-
-static BOOL ssl_expr_eval_comp(request_rec *r, ssl_expr *node)
-{
-    switch (node->node_op) {
-        case op_EQ: {
-            ssl_expr *e1 = (ssl_expr *)node->node_arg1;
-            ssl_expr *e2 = (ssl_expr *)node->node_arg2;
-            return (strcmp(ssl_expr_eval_word(r, e1), ssl_expr_eval_word(r, e2)) == 0);
-        }
-        case op_NE: {
-            ssl_expr *e1 = (ssl_expr *)node->node_arg1;
-            ssl_expr *e2 = (ssl_expr *)node->node_arg2;
-            return (strcmp(ssl_expr_eval_word(r, e1), ssl_expr_eval_word(r, e2)) != 0);
-        }
-        case op_LT: {
-            ssl_expr *e1 = (ssl_expr *)node->node_arg1;
-            ssl_expr *e2 = (ssl_expr *)node->node_arg2;
-            return (ssl_expr_eval_strcmplex(ssl_expr_eval_word(r, e1), ssl_expr_eval_word(r, e2)) <  0);
-        }
-        case op_LE: {
-            ssl_expr *e1 = (ssl_expr *)node->node_arg1;
-            ssl_expr *e2 = (ssl_expr *)node->node_arg2;
-            return (ssl_expr_eval_strcmplex(ssl_expr_eval_word(r, e1), ssl_expr_eval_word(r, e2)) <= 0);
-        }
-        case op_GT: {
-            ssl_expr *e1 = (ssl_expr *)node->node_arg1;
-            ssl_expr *e2 = (ssl_expr *)node->node_arg2;
-            return (ssl_expr_eval_strcmplex(ssl_expr_eval_word(r, e1), ssl_expr_eval_word(r, e2)) >  0);
-        }
-        case op_GE: {
-            ssl_expr *e1 = (ssl_expr *)node->node_arg1;
-            ssl_expr *e2 = (ssl_expr *)node->node_arg2;
-            return (ssl_expr_eval_strcmplex(ssl_expr_eval_word(r, e1), ssl_expr_eval_word(r, e2)) >= 0);
-        }
-        case op_IN: {
-            ssl_expr *e1 = (ssl_expr *)node->node_arg1;
-            ssl_expr *e2 = (ssl_expr *)node->node_arg2;
-            ssl_expr *e3;
-            char *w1 = ssl_expr_eval_word(r, e1);
-            BOOL found = FALSE;
-            do {
-                e3 = (ssl_expr *)e2->node_arg1;
-                e2 = (ssl_expr *)e2->node_arg2;
-                if (strcmp(w1, ssl_expr_eval_word(r, e3)) == 0) {
-                    found = TRUE;
-                    break;
-                }
-            } while (e2 != NULL);
-            return found;
-        }
-        case op_REG: {
-            ssl_expr *e1;
-            ssl_expr *e2;
-            char *word;
-            regex_t *regex;
-
-            e1 = (ssl_expr *)node->node_arg1;
-            e2 = (ssl_expr *)node->node_arg2;
-            word = ssl_expr_eval_word(r, e1);
-            regex = (regex_t *)(e2->node_arg1);
-            return (ap_regexec(regex, word, 0, NULL, 0) == 0);
-        }
-        case op_NRE: {
-            ssl_expr *e1;
-            ssl_expr *e2;
-            char *word;
-            regex_t *regex;
-
-            e1 = (ssl_expr *)node->node_arg1;
-            e2 = (ssl_expr *)node->node_arg2;
-            word = ssl_expr_eval_word(r, e1);
-            regex = (regex_t *)(e2->node_arg1);
-            return !(ap_regexec(regex, word, 0, NULL, 0) == 0);
-        }
-        default: {
-            ssl_expr_error = "Internal evaluation error: Unknown expression node";
-            return FALSE;
-        }
-    }
-}
-
-static char *ssl_expr_eval_word(request_rec *r, ssl_expr *node)
-{
-    switch (node->node_op) {
-        case op_Digit: {
-            char *string = (char *)node->node_arg1;
-            return string;
-        }
-        case op_String: {
-            char *string = (char *)node->node_arg1;
-            return string;
-        }
-        case op_Var: {
-            char *var = (char *)node->node_arg1;
-            char *val = ssl_var_lookup(r->pool, r->server, r->connection, r, var);
-            return (val == NULL ? "" : val);
-        }
-        case op_Func: {
-            char *name = (char *)node->node_arg1;
-            ssl_expr *args = (ssl_expr *)node->node_arg2;
-            if (strEQ(name, "file"))
-                return ssl_expr_eval_func_file(r, (char *)(args->node_arg1));
-            else {
-                ssl_expr_error = "Internal evaluation error: Unknown function name";
-                return "";
-            }
-        }
-        default: {
-            ssl_expr_error = "Internal evaluation error: Unknown expression node";
-            return FALSE;
-        }
-    }
-}
-
-static char *ssl_expr_eval_func_file(request_rec *r, char *filename)
-{
-    apr_file_t *fp;
-    char *buf;
-    apr_off_t offset;
-    apr_size_t len;
-    apr_finfo_t finfo;
-
-    if (apr_file_open(&fp, filename, APR_READ|APR_BUFFERED, 
-                      APR_OS_DEFAULT, r->pool) != APR_SUCCESS) {
-        ssl_expr_error = "Cannot open file";
-        return "";
-    }
-    apr_file_info_get(&finfo, APR_FINFO_SIZE, fp);
-    if ((finfo.size + 1) != ((apr_size_t)finfo.size + 1)) {
-        ssl_expr_error = "Huge file cannot be read";
-        apr_file_close(fp);
-        return "";
-    }
-    len = (apr_size_t)finfo.size;
-    if (len == 0) {
-        buf = (char *)apr_palloc(r->pool, sizeof(char) * 1);
-        *buf = NUL;
-    }
-    else {
-        if ((buf = (char *)apr_palloc(r->pool, sizeof(char)*(len+1))) == NULL) {
-            ssl_expr_error = "Cannot allocate memory";
-            apr_file_close(fp);
-            return "";
-        }
-        offset = 0;
-        apr_file_seek(fp, APR_SET, &offset);
-        if (apr_file_read(fp, buf, &len) != APR_SUCCESS) {
-            ssl_expr_error = "Cannot read from file";
-            apr_file_close(fp);
-            return "";
-        }
-        buf[len] = NUL;
-    }
-    apr_file_close(fp);
-    return buf;
-}
-
-/* a variant of strcmp(3) which works correctly also for number strings */
-static int ssl_expr_eval_strcmplex(char *cpNum1, char *cpNum2)
-{
-    int i, n1, n2;
-
-    if (cpNum1 == NULL)
-        return -1;
-    if (cpNum2 == NULL)
-        return +1;
-    n1 = strlen(cpNum1);
-    n2 = strlen(cpNum2);
-    if (n1 > n2)
-        return 1;
-    if (n1 < n2)
-        return -1;
-    for (i = 0; i < n1; i++) {
-        if (cpNum1[i] > cpNum2[i])
-            return 1;
-        if (cpNum1[i] < cpNum2[i])
-            return -1;
-    }
-    return 0;
-}
diff --git a/modules/ssl/ssl_expr_parse.c b/modules/ssl/ssl_expr_parse.c
deleted file mode 100644
index d8fdc0a..0000000
--- a/modules/ssl/ssl_expr_parse.c
+++ /dev/null
@@ -1,1081 +0,0 @@
-
-/*  A Bison parser, made from ssl_expr_parse.y
-    by GNU Bison version 1.28  */
-
-#define YYBISON 1  /* Identify Bison output.  */
-
-#define	T_TRUE	257
-#define	T_FALSE	258
-#define	T_DIGIT	259
-#define	T_ID	260
-#define	T_STRING	261
-#define	T_REGEX	262
-#define	T_REGEX_I	263
-#define	T_FUNC_FILE	264
-#define	T_OP_EQ	265
-#define	T_OP_NE	266
-#define	T_OP_LT	267
-#define	T_OP_LE	268
-#define	T_OP_GT	269
-#define	T_OP_GE	270
-#define	T_OP_REG	271
-#define	T_OP_NRE	272
-#define	T_OP_IN	273
-#define	T_OP_OR	274
-#define	T_OP_AND	275
-#define	T_OP_NOT	276
-
-#line 68 "ssl_expr_parse.y"
-
-#include "mod_ssl.h"
-
-#line 72 "ssl_expr_parse.y"
-typedef union {
-    char     *cpVal;
-    ssl_expr *exVal;
-} YYSTYPE;
-#include <stdio.h>
-
-#ifndef __cplusplus
-#ifndef __STDC__
-#define const
-#endif
-#endif
-
-
-
-#define	YYFINAL		53
-#define	YYFLAG		-32768
-#define	YYNTBASE	29
-
-#define YYTRANSLATE(x) ((unsigned)(x) <= 276 ? ssl_expr_yytranslate[x] : 36)
-
-static const char ssl_expr_yytranslate[] = {     0,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,    28,     2,     2,    23,
-    24,     2,     2,    27,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,    25,     2,    26,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     1,     3,     4,     5,     6,
-     7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-    17,    18,    19,    20,    21,    22
-};
-
-#if YYDEBUG != 0
-static const short ssl_expr_yyprhs[] = {     0,
-     0,     2,     4,     6,     9,    13,    17,    19,    23,    27,
-    31,    35,    39,    43,    47,    53,    57,    61,    63,    67,
-    69,    71,    76,    78,    80,    82
-};
-
-static const short ssl_expr_yyrhs[] = {    30,
-     0,     3,     0,     4,     0,    22,    30,     0,    30,    20,
-    30,     0,    30,    21,    30,     0,    31,     0,    23,    30,
-    24,     0,    33,    11,    33,     0,    33,    12,    33,     0,
-    33,    13,    33,     0,    33,    14,    33,     0,    33,    15,
-    33,     0,    33,    16,    33,     0,    33,    19,    25,    32,
-    26,     0,    33,    17,    34,     0,    33,    18,    34,     0,
-    33,     0,    32,    27,    33,     0,     5,     0,     7,     0,
-    28,    25,     6,    26,     0,    35,     0,     8,     0,     9,
-     0,    10,    23,     7,    24,     0
-};
-
-#endif
-
-#if YYDEBUG != 0
-static const short ssl_expr_yyrline[] = { 0,
-   115,   118,   119,   120,   121,   122,   123,   124,   127,   128,
-   129,   130,   131,   132,   133,   134,   135,   138,   139,   142,
-   143,   144,   145,   148,   158,   170
-};
-#endif
-
-
-#if YYDEBUG != 0 || defined (YYERROR_VERBOSE)
-
-static const char * const ssl_expr_yytname[] = {   "$","error","$undefined.","T_TRUE",
-"T_FALSE","T_DIGIT","T_ID","T_STRING","T_REGEX","T_REGEX_I","T_FUNC_FILE","T_OP_EQ",
-"T_OP_NE","T_OP_LT","T_OP_LE","T_OP_GT","T_OP_GE","T_OP_REG","T_OP_NRE","T_OP_IN",
-"T_OP_OR","T_OP_AND","T_OP_NOT","'('","')'","'{'","'}'","','","'%'","root","expr",
-"comparison","words","word","regex","funccall", NULL
-};
-#endif
-
-static const short ssl_expr_yyr1[] = {     0,
-    29,    30,    30,    30,    30,    30,    30,    30,    31,    31,
-    31,    31,    31,    31,    31,    31,    31,    32,    32,    33,
-    33,    33,    33,    34,    34,    35
-};
-
-static const short ssl_expr_yyr2[] = {     0,
-     1,     1,     1,     2,     3,     3,     1,     3,     3,     3,
-     3,     3,     3,     3,     5,     3,     3,     1,     3,     1,
-     1,     4,     1,     1,     1,     4
-};
-
-static const short ssl_expr_yydefact[] = {     0,
-     2,     3,    20,    21,     0,     0,     0,     0,     1,     7,
-     0,    23,     0,     4,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     8,     0,
-     5,     6,     9,    10,    11,    12,    13,    14,    24,    25,
-    16,    17,     0,    26,    22,     0,    18,    15,     0,    19,
-     0,     0,     0
-};
-
-static const short ssl_expr_yydefgoto[] = {    51,
-     9,    10,    46,    11,    41,    12
-};
-
-static const short ssl_expr_yypact[] = {     3,
--32768,-32768,-32768,-32768,   -11,     3,     3,   -10,     0,-32768,
-    22,-32768,    16,-32768,    -2,    23,     3,     3,     4,     4,
-     4,     4,     4,     4,    34,    34,    21,    24,-32768,    25,
-    26,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,     4,-32768,-32768,    18,-32768,-32768,     4,-32768,
-    49,    50,-32768
-};
-
-static const short ssl_expr_yypgoto[] = {-32768,
-    10,-32768,-32768,   -19,    27,-32768
-};
-
-
-#define	YYLAST		53
-
-
-static const short ssl_expr_yytable[] = {    33,
-    34,    35,    36,    37,    38,     1,     2,     3,     3,     4,
-     4,    13,     5,     5,    16,    14,    15,    17,    18,    17,
-    18,    29,    28,    47,     6,     7,    31,    32,    30,    50,
-     8,     8,    19,    20,    21,    22,    23,    24,    25,    26,
-    27,    39,    40,    48,    49,    43,    18,    44,    52,    53,
-    45,     0,    42
-};
-
-static const short ssl_expr_yycheck[] = {    19,
-    20,    21,    22,    23,    24,     3,     4,     5,     5,     7,
-     7,    23,    10,    10,    25,     6,     7,    20,    21,    20,
-    21,    24,     7,    43,    22,    23,    17,    18,     6,    49,
-    28,    28,    11,    12,    13,    14,    15,    16,    17,    18,
-    19,     8,     9,    26,    27,    25,    21,    24,     0,     0,
-    26,    -1,    26
-};
-/* -*-C-*-  Note some compilers choke on comments on `#line' lines.  */
-#line 3 "/usr/local/share/bison.simple"
-/* This file comes from bison-1.28.  */
-
-/* Skeleton output parser for bison,
-   Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc.
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2, or (at your option)
-   any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330,
-   Boston, MA 02111-1307, USA.  */
-
-/* As a special exception, when this file is copied by Bison into a
-   Bison output file, you may use that output file without restriction.
-   This special exception was added by the Free Software Foundation
-   in version 1.24 of Bison.  */
-
-/* This is the parser code that is written into each bison parser
-  when the %semantic_parser declaration is not specified in the grammar.
-  It was written by Richard Stallman by simplifying the hairy parser
-  used when %semantic_parser is specified.  */
-
-#ifndef YYSTACK_USE_ALLOCA
-#ifdef alloca
-#define YYSTACK_USE_ALLOCA
-#else /* alloca not defined */
-#ifdef __GNUC__
-#define YYSTACK_USE_ALLOCA
-#define alloca __builtin_alloca
-#else /* not GNU C.  */
-#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi) || (defined (__sun) && defined (__i386))
-#define YYSTACK_USE_ALLOCA
-#include <alloca.h>
-#else /* not sparc */
-/* We think this test detects Watcom and Microsoft C.  */
-/* This used to test MSDOS, but that is a bad idea
-   since that symbol is in the user namespace.  */
-#if (defined (_MSDOS) || defined (_MSDOS_)) && !defined (__TURBOC__)
-#if 0 /* No need for malloc.h, which pollutes the namespace;
-	 instead, just don't use alloca.  */
-#include <malloc.h>
-#endif
-#else /* not MSDOS, or __TURBOC__ */
-#if defined(_AIX)
-/* I don't know what this was needed for, but it pollutes the namespace.
-   So I turned it off.   rms, 2 May 1997.  */
-/* #include <malloc.h>  */
- #pragma alloca
-#define YYSTACK_USE_ALLOCA
-#else /* not MSDOS, or __TURBOC__, or _AIX */
-#if 0
-#ifdef __hpux /* haible@ilog.fr says this works for HPUX 9.05 and up,
-		 and on HPUX 10.  Eventually we can turn this on.  */
-#define YYSTACK_USE_ALLOCA
-#define alloca __builtin_alloca
-#endif /* __hpux */
-#endif
-#endif /* not _AIX */
-#endif /* not MSDOS, or __TURBOC__ */
-#endif /* not sparc */
-#endif /* not GNU C */
-#endif /* alloca not defined */
-#endif /* YYSTACK_USE_ALLOCA not defined */
-
-#ifdef YYSTACK_USE_ALLOCA
-#define YYSTACK_ALLOC alloca
-#else
-#define YYSTACK_ALLOC malloc
-#endif
-
-/* Note: there must be only one dollar sign in this file.
-   It is replaced by the list of actions, each action
-   as one case of the switch.  */
-
-#define ssl_expr_yyerrok		(ssl_expr_yyerrstatus = 0)
-#define ssl_expr_yyclearin	(ssl_expr_yychar = YYEMPTY)
-#define YYEMPTY		-2
-#define YYEOF		0
-#define YYACCEPT	goto ssl_expr_yyacceptlab
-#define YYABORT 	goto ssl_expr_yyabortlab
-#define YYERROR		goto ssl_expr_yyerrlab1
-/* Like YYERROR except do call ssl_expr_yyerror.
-   This remains here temporarily to ease the
-   transition to the new meaning of YYERROR, for GCC.
-   Once GCC version 2 has supplanted version 1, this can go.  */
-#define YYFAIL		goto ssl_expr_yyerrlab
-#define YYRECOVERING()  (!!ssl_expr_yyerrstatus)
-#define YYBACKUP(token, value) \
-do								\
-  if (ssl_expr_yychar == YYEMPTY && ssl_expr_yylen == 1)				\
-    { ssl_expr_yychar = (token), ssl_expr_yylval = (value);			\
-      ssl_expr_yychar1 = YYTRANSLATE (ssl_expr_yychar);				\
-      YYPOPSTACK;						\
-      goto ssl_expr_yybackup;						\
-    }								\
-  else								\
-    { ssl_expr_yyerror ("syntax error: cannot back up"); YYERROR; }	\
-while (0)
-
-#define YYTERROR	1
-#define YYERRCODE	256
-
-#ifndef YYPURE
-#define YYLEX		ssl_expr_yylex()
-#endif
-
-#ifdef YYPURE
-#ifdef YYLSP_NEEDED
-#ifdef YYLEX_PARAM
-#define YYLEX		ssl_expr_yylex(&ssl_expr_yylval, &ssl_expr_yylloc, YYLEX_PARAM)
-#else
-#define YYLEX		ssl_expr_yylex(&ssl_expr_yylval, &ssl_expr_yylloc)
-#endif
-#else /* not YYLSP_NEEDED */
-#ifdef YYLEX_PARAM
-#define YYLEX		ssl_expr_yylex(&ssl_expr_yylval, YYLEX_PARAM)
-#else
-#define YYLEX		ssl_expr_yylex(&ssl_expr_yylval)
-#endif
-#endif /* not YYLSP_NEEDED */
-#endif
-
-/* If nonreentrant, generate the variables here */
-
-#ifndef YYPURE
-
-int	ssl_expr_yychar;			/*  the lookahead symbol		*/
-YYSTYPE	ssl_expr_yylval;			/*  the semantic value of the		*/
-				/*  lookahead symbol			*/
-
-#ifdef YYLSP_NEEDED
-YYLTYPE ssl_expr_yylloc;			/*  location data for the lookahead	*/
-				/*  symbol				*/
-#endif
-
-int ssl_expr_yynerrs;			/*  number of parse errors so far       */
-#endif  /* not YYPURE */
-
-#if YYDEBUG != 0
-int ssl_expr_yydebug;			/*  nonzero means print parse trace	*/
-/* Since this is uninitialized, it does not stop multiple parsers
-   from coexisting.  */
-#endif
-
-/*  YYINITDEPTH indicates the initial size of the parser's stacks	*/
-
-#ifndef	YYINITDEPTH
-#define YYINITDEPTH 200
-#endif
-
-/*  YYMAXDEPTH is the maximum size the stacks can grow to
-    (effective only if the built-in stack extension method is used).  */
-
-#if YYMAXDEPTH == 0
-#undef YYMAXDEPTH
-#endif
-
-#ifndef YYMAXDEPTH
-#define YYMAXDEPTH 10000
-#endif
-
-/* Define __ssl_expr_yy_memcpy.  Note that the size argument
-   should be passed with type unsigned int, because that is what the non-GCC
-   definitions require.  With GCC, __builtin_memcpy takes an arg
-   of type size_t, but it can handle unsigned int.  */
-
-#if __GNUC__ > 1		/* GNU C and GNU C++ define this.  */
-#define __ssl_expr_yy_memcpy(TO,FROM,COUNT)	__builtin_memcpy(TO,FROM,COUNT)
-#else				/* not GNU C or C++ */
-#ifndef __cplusplus
-
-/* This is the most reliable way to avoid incompatibilities
-   in available built-in functions on various systems.  */
-static void
-__ssl_expr_yy_memcpy (to, from, count)
-     char *to;
-     char *from;
-     unsigned int count;
-{
-  register char *f = from;
-  register char *t = to;
-  register int i = count;
-
-  while (i-- > 0)
-    *t++ = *f++;
-}
-
-#else /* __cplusplus */
-
-/* This is the most reliable way to avoid incompatibilities
-   in available built-in functions on various systems.  */
-static void
-__ssl_expr_yy_memcpy (char *to, char *from, unsigned int count)
-{
-  register char *t = to;
-  register char *f = from;
-  register int i = count;
-
-  while (i-- > 0)
-    *t++ = *f++;
-}
-
-#endif
-#endif
-
-#line 217 "/usr/local/share/bison.simple"
-
-/* The user can define YYPARSE_PARAM as the name of an argument to be passed
-   into ssl_expr_yyparse.  The argument should have type void *.
-   It should actually point to an object.
-   Grammar actions can access the variable by casting it
-   to the proper pointer type.  */
-
-#ifdef YYPARSE_PARAM
-#ifdef __cplusplus
-#define YYPARSE_PARAM_ARG void *YYPARSE_PARAM
-#define YYPARSE_PARAM_DECL
-#else /* not __cplusplus */
-#define YYPARSE_PARAM_ARG YYPARSE_PARAM
-#define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
-#endif /* not __cplusplus */
-#else /* not YYPARSE_PARAM */
-#define YYPARSE_PARAM_ARG
-#define YYPARSE_PARAM_DECL
-#endif /* not YYPARSE_PARAM */
-
-/* Prevent warning if -Wstrict-prototypes.  */
-#ifdef __GNUC__
-#ifdef YYPARSE_PARAM
-int ssl_expr_yyparse (void *);
-#else
-int ssl_expr_yyparse (void);
-#endif
-#endif
-
-int
-ssl_expr_yyparse(YYPARSE_PARAM_ARG)
-     YYPARSE_PARAM_DECL
-{
-  register int ssl_expr_yystate;
-  register int ssl_expr_yyn;
-  register short *ssl_expr_yyssp;
-  register YYSTYPE *ssl_expr_yyvsp;
-  int ssl_expr_yyerrstatus;	/*  number of tokens to shift before error messages enabled */
-  int ssl_expr_yychar1 = 0;		/*  lookahead token as an internal (translated) token number */
-
-  short	ssl_expr_yyssa[YYINITDEPTH];	/*  the state stack			*/
-  YYSTYPE ssl_expr_yyvsa[YYINITDEPTH];	/*  the semantic value stack		*/
-
-  short *ssl_expr_yyss = ssl_expr_yyssa;		/*  refer to the stacks thru separate pointers */
-  YYSTYPE *ssl_expr_yyvs = ssl_expr_yyvsa;	/*  to allow ssl_expr_yyoverflow to reallocate them elsewhere */
-
-#ifdef YYLSP_NEEDED
-  YYLTYPE ssl_expr_yylsa[YYINITDEPTH];	/*  the location stack			*/
-  YYLTYPE *ssl_expr_yyls = ssl_expr_yylsa;
-  YYLTYPE *ssl_expr_yylsp;
-
-#define YYPOPSTACK   (ssl_expr_yyvsp--, ssl_expr_yyssp--, ssl_expr_yylsp--)
-#else
-#define YYPOPSTACK   (ssl_expr_yyvsp--, ssl_expr_yyssp--)
-#endif
-
-  int ssl_expr_yystacksize = YYINITDEPTH;
-  int ssl_expr_yyfree_stacks = 0;
-
-#ifdef YYPURE
-  int ssl_expr_yychar;
-  YYSTYPE ssl_expr_yylval;
-  int ssl_expr_yynerrs;
-#ifdef YYLSP_NEEDED
-  YYLTYPE ssl_expr_yylloc;
-#endif
-#endif
-
-  YYSTYPE ssl_expr_yyval;		/*  the variable used to return		*/
-				/*  semantic values from the action	*/
-				/*  routines				*/
-
-  int ssl_expr_yylen;
-
-#if YYDEBUG != 0
-  if (ssl_expr_yydebug)
-    fprintf(stderr, "Starting parse\n");
-#endif
-
-  ssl_expr_yystate = 0;
-  ssl_expr_yyerrstatus = 0;
-  ssl_expr_yynerrs = 0;
-  ssl_expr_yychar = YYEMPTY;		/* Cause a token to be read.  */
-
-  /* Initialize stack pointers.
-     Waste one element of value and location stack
-     so that they stay on the same level as the state stack.
-     The wasted elements are never initialized.  */
-
-  ssl_expr_yyssp = ssl_expr_yyss - 1;
-  ssl_expr_yyvsp = ssl_expr_yyvs;
-#ifdef YYLSP_NEEDED
-  ssl_expr_yylsp = ssl_expr_yyls;
-#endif
-
-/* Push a new state, which is found in  ssl_expr_yystate  .  */
-/* In all cases, when you get here, the value and location stacks
-   have just been pushed. so pushing a state here evens the stacks.  */
-ssl_expr_yynewstate:
-
-  *++ssl_expr_yyssp = ssl_expr_yystate;
-
-  if (ssl_expr_yyssp >= ssl_expr_yyss + ssl_expr_yystacksize - 1)
-    {
-      /* Give user a chance to reallocate the stack */
-      /* Use copies of these so that the &'s don't force the real ones into memory. */
-      YYSTYPE *ssl_expr_yyvs1 = ssl_expr_yyvs;
-      short *ssl_expr_yyss1 = ssl_expr_yyss;
-#ifdef YYLSP_NEEDED
-      YYLTYPE *ssl_expr_yyls1 = ssl_expr_yyls;
-#endif
-
-      /* Get the current used size of the three stacks, in elements.  */
-      int size = ssl_expr_yyssp - ssl_expr_yyss + 1;
-
-#ifdef ssl_expr_yyoverflow
-      /* Each stack pointer address is followed by the size of
-	 the data in use in that stack, in bytes.  */
-#ifdef YYLSP_NEEDED
-      /* This used to be a conditional around just the two extra args,
-	 but that might be undefined if ssl_expr_yyoverflow is a macro.  */
-      ssl_expr_yyoverflow("parser stack overflow",
-		 &ssl_expr_yyss1, size * sizeof (*ssl_expr_yyssp),
-		 &ssl_expr_yyvs1, size * sizeof (*ssl_expr_yyvsp),
-		 &ssl_expr_yyls1, size * sizeof (*ssl_expr_yylsp),
-		 &ssl_expr_yystacksize);
-#else
-      ssl_expr_yyoverflow("parser stack overflow",
-		 &ssl_expr_yyss1, size * sizeof (*ssl_expr_yyssp),
-		 &ssl_expr_yyvs1, size * sizeof (*ssl_expr_yyvsp),
-		 &ssl_expr_yystacksize);
-#endif
-
-      ssl_expr_yyss = ssl_expr_yyss1; ssl_expr_yyvs = ssl_expr_yyvs1;
-#ifdef YYLSP_NEEDED
-      ssl_expr_yyls = ssl_expr_yyls1;
-#endif
-#else /* no ssl_expr_yyoverflow */
-      /* Extend the stack our own way.  */
-      if (ssl_expr_yystacksize >= YYMAXDEPTH)
-	{
-	  ssl_expr_yyerror("parser stack overflow");
-	  if (ssl_expr_yyfree_stacks)
-	    {
-	      free (ssl_expr_yyss);
-	      free (ssl_expr_yyvs);
-#ifdef YYLSP_NEEDED
-	      free (ssl_expr_yyls);
-#endif
-	    }
-	  return 2;
-	}
-      ssl_expr_yystacksize *= 2;
-      if (ssl_expr_yystacksize > YYMAXDEPTH)
-	ssl_expr_yystacksize = YYMAXDEPTH;
-#ifndef YYSTACK_USE_ALLOCA
-      ssl_expr_yyfree_stacks = 1;
-#endif
-      ssl_expr_yyss = (short *) YYSTACK_ALLOC (ssl_expr_yystacksize * sizeof (*ssl_expr_yyssp));
-      __ssl_expr_yy_memcpy ((char *)ssl_expr_yyss, (char *)ssl_expr_yyss1,
-		   size * (unsigned int) sizeof (*ssl_expr_yyssp));
-      ssl_expr_yyvs = (YYSTYPE *) YYSTACK_ALLOC (ssl_expr_yystacksize * sizeof (*ssl_expr_yyvsp));
-      __ssl_expr_yy_memcpy ((char *)ssl_expr_yyvs, (char *)ssl_expr_yyvs1,
-		   size * (unsigned int) sizeof (*ssl_expr_yyvsp));
-#ifdef YYLSP_NEEDED
-      ssl_expr_yyls = (YYLTYPE *) YYSTACK_ALLOC (ssl_expr_yystacksize * sizeof (*ssl_expr_yylsp));
-      __ssl_expr_yy_memcpy ((char *)ssl_expr_yyls, (char *)ssl_expr_yyls1,
-		   size * (unsigned int) sizeof (*ssl_expr_yylsp));
-#endif
-#endif /* no ssl_expr_yyoverflow */
-
-      ssl_expr_yyssp = ssl_expr_yyss + size - 1;
-      ssl_expr_yyvsp = ssl_expr_yyvs + size - 1;
-#ifdef YYLSP_NEEDED
-      ssl_expr_yylsp = ssl_expr_yyls + size - 1;
-#endif
-
-#if YYDEBUG != 0
-      if (ssl_expr_yydebug)
-	fprintf(stderr, "Stack size increased to %d\n", ssl_expr_yystacksize);
-#endif
-
-      if (ssl_expr_yyssp >= ssl_expr_yyss + ssl_expr_yystacksize - 1)
-	YYABORT;
-    }
-
-#if YYDEBUG != 0
-  if (ssl_expr_yydebug)
-    fprintf(stderr, "Entering state %d\n", ssl_expr_yystate);
-#endif
-
-  goto ssl_expr_yybackup;
- ssl_expr_yybackup:
-
-/* Do appropriate processing given the current state.  */
-/* Read a lookahead token if we need one and don't already have one.  */
-/* ssl_expr_yyresume: */
-
-  /* First try to decide what to do without reference to lookahead token.  */
-
-  ssl_expr_yyn = ssl_expr_yypact[ssl_expr_yystate];
-  if (ssl_expr_yyn == YYFLAG)
-    goto ssl_expr_yydefault;
-
-  /* Not known => get a lookahead token if don't already have one.  */
-
-  /* ssl_expr_yychar is either YYEMPTY or YYEOF
-     or a valid token in external form.  */
-
-  if (ssl_expr_yychar == YYEMPTY)
-    {
-#if YYDEBUG != 0
-      if (ssl_expr_yydebug)
-	fprintf(stderr, "Reading a token: ");
-#endif
-      ssl_expr_yychar = YYLEX;
-    }
-
-  /* Convert token to internal form (in ssl_expr_yychar1) for indexing tables with */
-
-  if (ssl_expr_yychar <= 0)		/* This means end of input. */
-    {
-      ssl_expr_yychar1 = 0;
-      ssl_expr_yychar = YYEOF;		/* Don't call YYLEX any more */
-
-#if YYDEBUG != 0
-      if (ssl_expr_yydebug)
-	fprintf(stderr, "Now at end of input.\n");
-#endif
-    }
-  else
-    {
-      ssl_expr_yychar1 = YYTRANSLATE(ssl_expr_yychar);
-
-#if YYDEBUG != 0
-      if (ssl_expr_yydebug)
-	{
-	  fprintf (stderr, "Next token is %d (%s", ssl_expr_yychar, ssl_expr_yytname[ssl_expr_yychar1]);
-	  /* Give the individual parser a way to print the precise meaning
-	     of a token, for further debugging info.  */
-#ifdef YYPRINT
-	  YYPRINT (stderr, ssl_expr_yychar, ssl_expr_yylval);
-#endif
-	  fprintf (stderr, ")\n");
-	}
-#endif
-    }
-
-  ssl_expr_yyn += ssl_expr_yychar1;
-  if (ssl_expr_yyn < 0 || ssl_expr_yyn > YYLAST || ssl_expr_yycheck[ssl_expr_yyn] != ssl_expr_yychar1)
-    goto ssl_expr_yydefault;
-
-  ssl_expr_yyn = ssl_expr_yytable[ssl_expr_yyn];
-
-  /* ssl_expr_yyn is what to do for this token type in this state.
-     Negative => reduce, -ssl_expr_yyn is rule number.
-     Positive => shift, ssl_expr_yyn is new state.
-       New state is final state => don't bother to shift,
-       just return success.
-     0, or most negative number => error.  */
-
-  if (ssl_expr_yyn < 0)
-    {
-      if (ssl_expr_yyn == YYFLAG)
-	goto ssl_expr_yyerrlab;
-      ssl_expr_yyn = -ssl_expr_yyn;
-      goto ssl_expr_yyreduce;
-    }
-  else if (ssl_expr_yyn == 0)
-    goto ssl_expr_yyerrlab;
-
-  if (ssl_expr_yyn == YYFINAL)
-    YYACCEPT;
-
-  /* Shift the lookahead token.  */
-
-#if YYDEBUG != 0
-  if (ssl_expr_yydebug)
-    fprintf(stderr, "Shifting token %d (%s), ", ssl_expr_yychar, ssl_expr_yytname[ssl_expr_yychar1]);
-#endif
-
-  /* Discard the token being shifted unless it is eof.  */
-  if (ssl_expr_yychar != YYEOF)
-    ssl_expr_yychar = YYEMPTY;
-
-  *++ssl_expr_yyvsp = ssl_expr_yylval;
-#ifdef YYLSP_NEEDED
-  *++ssl_expr_yylsp = ssl_expr_yylloc;
-#endif
-
-  /* count tokens shifted since error; after three, turn off error status.  */
-  if (ssl_expr_yyerrstatus) ssl_expr_yyerrstatus--;
-
-  ssl_expr_yystate = ssl_expr_yyn;
-  goto ssl_expr_yynewstate;
-
-/* Do the default action for the current state.  */
-ssl_expr_yydefault:
-
-  ssl_expr_yyn = ssl_expr_yydefact[ssl_expr_yystate];
-  if (ssl_expr_yyn == 0)
-    goto ssl_expr_yyerrlab;
-
-/* Do a reduction.  ssl_expr_yyn is the number of a rule to reduce with.  */
-ssl_expr_yyreduce:
-  ssl_expr_yylen = ssl_expr_yyr2[ssl_expr_yyn];
-  if (ssl_expr_yylen > 0)
-    ssl_expr_yyval = ssl_expr_yyvsp[1-ssl_expr_yylen]; /* implement default value of the action */
-
-#if YYDEBUG != 0
-  if (ssl_expr_yydebug)
-    {
-      int i;
-
-      fprintf (stderr, "Reducing via rule %d (line %d), ",
-	       ssl_expr_yyn, ssl_expr_yyrline[ssl_expr_yyn]);
-
-      /* Print the symbols being reduced, and their result.  */
-      for (i = ssl_expr_yyprhs[ssl_expr_yyn]; ssl_expr_yyrhs[i] > 0; i++)
-	fprintf (stderr, "%s ", ssl_expr_yytname[ssl_expr_yyrhs[i]]);
-      fprintf (stderr, " -> %s\n", ssl_expr_yytname[ssl_expr_yyr1[ssl_expr_yyn]]);
-    }
-#endif
-
-
-  switch (ssl_expr_yyn) {
-
-case 1:
-#line 115 "ssl_expr_parse.y"
-{ ssl_expr_info.expr = ssl_expr_yyvsp[0].exVal; ;
-    break;}
-case 2:
-#line 118 "ssl_expr_parse.y"
-{ ssl_expr_yyval.exVal = ssl_expr_make(op_True,  NULL, NULL); ;
-    break;}
-case 3:
-#line 119 "ssl_expr_parse.y"
-{ ssl_expr_yyval.exVal = ssl_expr_make(op_False, NULL, NULL); ;
-    break;}
-case 4:
-#line 120 "ssl_expr_parse.y"
-{ ssl_expr_yyval.exVal = ssl_expr_make(op_Not,   ssl_expr_yyvsp[0].exVal,   NULL); ;
-    break;}
-case 5:
-#line 121 "ssl_expr_parse.y"
-{ ssl_expr_yyval.exVal = ssl_expr_make(op_Or,    ssl_expr_yyvsp[-2].exVal,   ssl_expr_yyvsp[0].exVal);   ;
-    break;}
-case 6:
-#line 122 "ssl_expr_parse.y"
-{ ssl_expr_yyval.exVal = ssl_expr_make(op_And,   ssl_expr_yyvsp[-2].exVal,   ssl_expr_yyvsp[0].exVal);   ;
-    break;}
-case 7:
-#line 123 "ssl_expr_parse.y"
-{ ssl_expr_yyval.exVal = ssl_expr_make(op_Comp,  ssl_expr_yyvsp[0].exVal,   NULL); ;
-    break;}
-case 8:
-#line 124 "ssl_expr_parse.y"
-{ ssl_expr_yyval.exVal = ssl_expr_yyvsp[-1].exVal; ;
-    break;}
-case 9:
-#line 127 "ssl_expr_parse.y"
-{ ssl_expr_yyval.exVal = ssl_expr_make(op_EQ,  ssl_expr_yyvsp[-2].exVal, ssl_expr_yyvsp[0].exVal); ;
-    break;}
-case 10:
-#line 128 "ssl_expr_parse.y"
-{ ssl_expr_yyval.exVal = ssl_expr_make(op_NE,  ssl_expr_yyvsp[-2].exVal, ssl_expr_yyvsp[0].exVal); ;
-    break;}
-case 11:
-#line 129 "ssl_expr_parse.y"
-{ ssl_expr_yyval.exVal = ssl_expr_make(op_LT,  ssl_expr_yyvsp[-2].exVal, ssl_expr_yyvsp[0].exVal); ;
-    break;}
-case 12:
-#line 130 "ssl_expr_parse.y"
-{ ssl_expr_yyval.exVal = ssl_expr_make(op_LE,  ssl_expr_yyvsp[-2].exVal, ssl_expr_yyvsp[0].exVal); ;
-    break;}
-case 13:
-#line 131 "ssl_expr_parse.y"
-{ ssl_expr_yyval.exVal = ssl_expr_make(op_GT,  ssl_expr_yyvsp[-2].exVal, ssl_expr_yyvsp[0].exVal); ;
-    break;}
-case 14:
-#line 132 "ssl_expr_parse.y"
-{ ssl_expr_yyval.exVal = ssl_expr_make(op_GE,  ssl_expr_yyvsp[-2].exVal, ssl_expr_yyvsp[0].exVal); ;
-    break;}
-case 15:
-#line 133 "ssl_expr_parse.y"
-{ ssl_expr_yyval.exVal = ssl_expr_make(op_IN,  ssl_expr_yyvsp[-4].exVal, ssl_expr_yyvsp[-1].exVal); ;
-    break;}
-case 16:
-#line 134 "ssl_expr_parse.y"
-{ ssl_expr_yyval.exVal = ssl_expr_make(op_REG, ssl_expr_yyvsp[-2].exVal, ssl_expr_yyvsp[0].exVal); ;
-    break;}
-case 17:
-#line 135 "ssl_expr_parse.y"
-{ ssl_expr_yyval.exVal = ssl_expr_make(op_NRE, ssl_expr_yyvsp[-2].exVal, ssl_expr_yyvsp[0].exVal); ;
-    break;}
-case 18:
-#line 138 "ssl_expr_parse.y"
-{ ssl_expr_yyval.exVal = ssl_expr_make(op_ListElement, ssl_expr_yyvsp[0].exVal, NULL); ;
-    break;}
-case 19:
-#line 139 "ssl_expr_parse.y"
-{ ssl_expr_yyval.exVal = ssl_expr_make(op_ListElement, ssl_expr_yyvsp[0].exVal, ssl_expr_yyvsp[-2].exVal);   ;
-    break;}
-case 20:
-#line 142 "ssl_expr_parse.y"
-{ ssl_expr_yyval.exVal = ssl_expr_make(op_Digit,  ssl_expr_yyvsp[0].cpVal, NULL); ;
-    break;}
-case 21:
-#line 143 "ssl_expr_parse.y"
-{ ssl_expr_yyval.exVal = ssl_expr_make(op_String, ssl_expr_yyvsp[0].cpVal, NULL); ;
-    break;}
-case 22:
-#line 144 "ssl_expr_parse.y"
-{ ssl_expr_yyval.exVal = ssl_expr_make(op_Var,    ssl_expr_yyvsp[-1].cpVal, NULL); ;
-    break;}
-case 23:
-#line 145 "ssl_expr_parse.y"
-{ ssl_expr_yyval.exVal = ssl_expr_yyvsp[0].exVal; ;
-    break;}
-case 24:
-#line 148 "ssl_expr_parse.y"
-{ 
-                regex_t *regex;
-                if ((regex = ap_pregcomp(ssl_expr_info.pool, ssl_expr_yyvsp[0].cpVal, 
-                                         REG_EXTENDED|REG_NOSUB)) == NULL) {
-                    ssl_expr_error = "Failed to compile regular expression";
-                    YYERROR;
-                    regex = NULL;
-                }
-                ssl_expr_yyval.exVal = ssl_expr_make(op_Regex, regex, NULL);
-            ;
-    break;}
-case 25:
-#line 158 "ssl_expr_parse.y"
-{
-                regex_t *regex;
-                if ((regex = ap_pregcomp(ssl_expr_info.pool, ssl_expr_yyvsp[0].cpVal, 
-                                         REG_EXTENDED|REG_NOSUB|REG_ICASE)) == NULL) {
-                    ssl_expr_error = "Failed to compile regular expression";
-                    YYERROR;
-                    regex = NULL;
-                }
-                ssl_expr_yyval.exVal = ssl_expr_make(op_Regex, regex, NULL);
-            ;
-    break;}
-case 26:
-#line 170 "ssl_expr_parse.y"
-{ 
-               ssl_expr *args = ssl_expr_make(op_ListElement, ssl_expr_yyvsp[-1].cpVal, NULL);
-               ssl_expr_yyval.exVal = ssl_expr_make(op_Func, "file", args);
-            ;
-    break;}
-}
-   /* the action file gets copied in in place of this dollarsign */
-#line 543 "/usr/local/share/bison.simple"
-
-  ssl_expr_yyvsp -= ssl_expr_yylen;
-  ssl_expr_yyssp -= ssl_expr_yylen;
-#ifdef YYLSP_NEEDED
-  ssl_expr_yylsp -= ssl_expr_yylen;
-#endif
-
-#if YYDEBUG != 0
-  if (ssl_expr_yydebug)
-    {
-      short *ssp1 = ssl_expr_yyss - 1;
-      fprintf (stderr, "state stack now");
-      while (ssp1 != ssl_expr_yyssp)
-	fprintf (stderr, " %d", *++ssp1);
-      fprintf (stderr, "\n");
-    }
-#endif
-
-  *++ssl_expr_yyvsp = ssl_expr_yyval;
-
-#ifdef YYLSP_NEEDED
-  ssl_expr_yylsp++;
-  if (ssl_expr_yylen == 0)
-    {
-      ssl_expr_yylsp->first_line = ssl_expr_yylloc.first_line;
-      ssl_expr_yylsp->first_column = ssl_expr_yylloc.first_column;
-      ssl_expr_yylsp->last_line = (ssl_expr_yylsp-1)->last_line;
-      ssl_expr_yylsp->last_column = (ssl_expr_yylsp-1)->last_column;
-      ssl_expr_yylsp->text = 0;
-    }
-  else
-    {
-      ssl_expr_yylsp->last_line = (ssl_expr_yylsp+ssl_expr_yylen-1)->last_line;
-      ssl_expr_yylsp->last_column = (ssl_expr_yylsp+ssl_expr_yylen-1)->last_column;
-    }
-#endif
-
-  /* Now "shift" the result of the reduction.
-     Determine what state that goes to,
-     based on the state we popped back to
-     and the rule number reduced by.  */
-
-  ssl_expr_yyn = ssl_expr_yyr1[ssl_expr_yyn];
-
-  ssl_expr_yystate = ssl_expr_yypgoto[ssl_expr_yyn - YYNTBASE] + *ssl_expr_yyssp;
-  if (ssl_expr_yystate >= 0 && ssl_expr_yystate <= YYLAST && ssl_expr_yycheck[ssl_expr_yystate] == *ssl_expr_yyssp)
-    ssl_expr_yystate = ssl_expr_yytable[ssl_expr_yystate];
-  else
-    ssl_expr_yystate = ssl_expr_yydefgoto[ssl_expr_yyn - YYNTBASE];
-
-  goto ssl_expr_yynewstate;
-
-ssl_expr_yyerrlab:   /* here on detecting error */
-
-  if (! ssl_expr_yyerrstatus)
-    /* If not already recovering from an error, report this error.  */
-    {
-      ++ssl_expr_yynerrs;
-
-#ifdef YYERROR_VERBOSE
-      ssl_expr_yyn = ssl_expr_yypact[ssl_expr_yystate];
-
-      if (ssl_expr_yyn > YYFLAG && ssl_expr_yyn < YYLAST)
-	{
-	  int size = 0;
-	  char *msg;
-	  int x, count;
-
-	  count = 0;
-	  /* Start X at -ssl_expr_yyn if nec to avoid negative indexes in ssl_expr_yycheck.  */
-	  for (x = (ssl_expr_yyn < 0 ? -ssl_expr_yyn : 0);
-	       x < (sizeof(ssl_expr_yytname) / sizeof(char *)); x++)
-	    if (ssl_expr_yycheck[x + ssl_expr_yyn] == x)
-	      size += strlen(ssl_expr_yytname[x]) + 15, count++;
-	  msg = (char *) malloc(size + 15);
-	  if (msg != 0)
-	    {
-	      strcpy(msg, "parse error");
-
-	      if (count < 5)
-		{
-		  count = 0;
-		  for (x = (ssl_expr_yyn < 0 ? -ssl_expr_yyn : 0);
-		       x < (sizeof(ssl_expr_yytname) / sizeof(char *)); x++)
-		    if (ssl_expr_yycheck[x + ssl_expr_yyn] == x)
-		      {
-			strcat(msg, count == 0 ? ", expecting `" : " or `");
-			strcat(msg, ssl_expr_yytname[x]);
-			strcat(msg, "'");
-			count++;
-		      }
-		}
-	      ssl_expr_yyerror(msg);
-	      free(msg);
-	    }
-	  else
-	    ssl_expr_yyerror ("parse error; also virtual memory exceeded");
-	}
-      else
-#endif /* YYERROR_VERBOSE */
-	ssl_expr_yyerror("parse error");
-    }
-
-  goto ssl_expr_yyerrlab1;
-ssl_expr_yyerrlab1:   /* here on error raised explicitly by an action */
-
-  if (ssl_expr_yyerrstatus == 3)
-    {
-      /* if just tried and failed to reuse lookahead token after an error, discard it.  */
-
-      /* return failure if at end of input */
-      if (ssl_expr_yychar == YYEOF)
-	YYABORT;
-
-#if YYDEBUG != 0
-      if (ssl_expr_yydebug)
-	fprintf(stderr, "Discarding token %d (%s).\n", ssl_expr_yychar, ssl_expr_yytname[ssl_expr_yychar1]);
-#endif
-
-      ssl_expr_yychar = YYEMPTY;
-    }
-
-  /* Else will try to reuse lookahead token
-     after shifting the error token.  */
-
-  ssl_expr_yyerrstatus = 3;		/* Each real token shifted decrements this */
-
-  goto ssl_expr_yyerrhandle;
-
-ssl_expr_yyerrdefault:  /* current state does not do anything special for the error token. */
-
-#if 0
-  /* This is wrong; only states that explicitly want error tokens
-     should shift them.  */
-  ssl_expr_yyn = ssl_expr_yydefact[ssl_expr_yystate];  /* If its default is to accept any token, ok.  Otherwise pop it.*/
-  if (ssl_expr_yyn) goto ssl_expr_yydefault;
-#endif
-
-ssl_expr_yyerrpop:   /* pop the current state because it cannot handle the error token */
-
-  if (ssl_expr_yyssp == ssl_expr_yyss) YYABORT;
-  ssl_expr_yyvsp--;
-  ssl_expr_yystate = *--ssl_expr_yyssp;
-#ifdef YYLSP_NEEDED
-  ssl_expr_yylsp--;
-#endif
-
-#if YYDEBUG != 0
-  if (ssl_expr_yydebug)
-    {
-      short *ssp1 = ssl_expr_yyss - 1;
-      fprintf (stderr, "Error: state stack now");
-      while (ssp1 != ssl_expr_yyssp)
-	fprintf (stderr, " %d", *++ssp1);
-      fprintf (stderr, "\n");
-    }
-#endif
-
-ssl_expr_yyerrhandle:
-
-  ssl_expr_yyn = ssl_expr_yypact[ssl_expr_yystate];
-  if (ssl_expr_yyn == YYFLAG)
-    goto ssl_expr_yyerrdefault;
-
-  ssl_expr_yyn += YYTERROR;
-  if (ssl_expr_yyn < 0 || ssl_expr_yyn > YYLAST || ssl_expr_yycheck[ssl_expr_yyn] != YYTERROR)
-    goto ssl_expr_yyerrdefault;
-
-  ssl_expr_yyn = ssl_expr_yytable[ssl_expr_yyn];
-  if (ssl_expr_yyn < 0)
-    {
-      if (ssl_expr_yyn == YYFLAG)
-	goto ssl_expr_yyerrpop;
-      ssl_expr_yyn = -ssl_expr_yyn;
-      goto ssl_expr_yyreduce;
-    }
-  else if (ssl_expr_yyn == 0)
-    goto ssl_expr_yyerrpop;
-
-  if (ssl_expr_yyn == YYFINAL)
-    YYACCEPT;
-
-#if YYDEBUG != 0
-  if (ssl_expr_yydebug)
-    fprintf(stderr, "Shifting error token, ");
-#endif
-
-  *++ssl_expr_yyvsp = ssl_expr_yylval;
-#ifdef YYLSP_NEEDED
-  *++ssl_expr_yylsp = ssl_expr_yylloc;
-#endif
-
-  ssl_expr_yystate = ssl_expr_yyn;
-  goto ssl_expr_yynewstate;
-
- ssl_expr_yyacceptlab:
-  /* YYACCEPT comes here.  */
-  if (ssl_expr_yyfree_stacks)
-    {
-      free (ssl_expr_yyss);
-      free (ssl_expr_yyvs);
-#ifdef YYLSP_NEEDED
-      free (ssl_expr_yyls);
-#endif
-    }
-  return 0;
-
- ssl_expr_yyabortlab:
-  /* YYABORT comes here.  */
-  if (ssl_expr_yyfree_stacks)
-    {
-      free (ssl_expr_yyss);
-      free (ssl_expr_yyvs);
-#ifdef YYLSP_NEEDED
-      free (ssl_expr_yyls);
-#endif
-    }
-  return 1;
-}
-#line 176 "ssl_expr_parse.y"
-
-
-int ssl_expr_yyerror(char *s)
-{
-    ssl_expr_error = s;
-    return 2;
-}
-
diff --git a/modules/ssl/ssl_expr_parse.h b/modules/ssl/ssl_expr_parse.h
deleted file mode 100644
index 5378e28..0000000
--- a/modules/ssl/ssl_expr_parse.h
+++ /dev/null
@@ -1,27 +0,0 @@
-typedef union {
-    char     *cpVal;
-    ssl_expr *exVal;
-} YYSTYPE;
-#define	T_TRUE	257
-#define	T_FALSE	258
-#define	T_DIGIT	259
-#define	T_ID	260
-#define	T_STRING	261
-#define	T_REGEX	262
-#define	T_REGEX_I	263
-#define	T_FUNC_FILE	264
-#define	T_OP_EQ	265
-#define	T_OP_NE	266
-#define	T_OP_LT	267
-#define	T_OP_LE	268
-#define	T_OP_GT	269
-#define	T_OP_GE	270
-#define	T_OP_REG	271
-#define	T_OP_NRE	272
-#define	T_OP_IN	273
-#define	T_OP_OR	274
-#define	T_OP_AND	275
-#define	T_OP_NOT	276
-
-
-extern YYSTYPE ssl_expr_yylval;
diff --git a/modules/ssl/ssl_expr_parse.y b/modules/ssl/ssl_expr_parse.y
deleted file mode 100644
index c063b2b..0000000
--- a/modules/ssl/ssl_expr_parse.y
+++ /dev/null
@@ -1,183 +0,0 @@
-/*                      _             _ 
-**  _ __ ___   ___   __| |    ___ ___| |  
-** | '_ ` _ \ / _ \ / _` |   / __/ __| |  
-** | | | | | | (_) | (_| |   \__ \__ \ | mod_ssl - Apache Interface to OpenSSL
-** |_| |_| |_|\___/ \__,_|___|___/___/_| http://www.modssl.org/
-**                      |_____|         
-**  ssl_expr_parse.y
-**  Expression LR(1) Parser
-*/
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- */
-                             /* ``What you see is all you get.''
-							              -- Brian Kernighan      */
-
-/*  _________________________________________________________________
-**
-**  Expression Parser
-**  _________________________________________________________________
-*/
-
-%{
-#include "mod_ssl.h"
-%}
-
-%union {
-    char     *cpVal;
-    ssl_expr *exVal;
-}
-
-%token  T_TRUE
-%token  T_FALSE
-
-%token  <cpVal> T_DIGIT
-%token  <cpVal> T_ID
-%token  <cpVal> T_STRING
-%token  <cpVal> T_REGEX
-%token  <cpVal> T_REGEX_I
-
-%token  T_FUNC_FILE
-
-%token  T_OP_EQ
-%token  T_OP_NE
-%token  T_OP_LT
-%token  T_OP_LE
-%token  T_OP_GT
-%token  T_OP_GE
-%token  T_OP_REG
-%token  T_OP_NRE
-%token  T_OP_IN
-
-%token  T_OP_OR
-%token  T_OP_AND
-%token  T_OP_NOT
-
-%left   T_OP_OR
-%left   T_OP_AND
-%left   T_OP_NOT
-
-%type   <exVal>   expr
-%type   <exVal>   comparison
-%type   <exVal>   funccall
-%type   <exVal>   regex
-%type   <exVal>   words
-%type   <exVal>   word
-
-%%
-
-root      : expr                         { ssl_expr_info.expr = $1; }
-          ;
-
-expr      : T_TRUE                       { $$ = ssl_expr_make(op_True,  NULL, NULL); }
-          | T_FALSE                      { $$ = ssl_expr_make(op_False, NULL, NULL); }
-          | T_OP_NOT expr                { $$ = ssl_expr_make(op_Not,   $2,   NULL); }
-          | expr T_OP_OR expr            { $$ = ssl_expr_make(op_Or,    $1,   $3);   }
-          | expr T_OP_AND expr           { $$ = ssl_expr_make(op_And,   $1,   $3);   }
-          | comparison                   { $$ = ssl_expr_make(op_Comp,  $1,   NULL); }
-          | '(' expr ')'                 { $$ = $2; }
-          ;
-
-comparison: word T_OP_EQ word            { $$ = ssl_expr_make(op_EQ,  $1, $3); }
-          | word T_OP_NE word            { $$ = ssl_expr_make(op_NE,  $1, $3); }
-          | word T_OP_LT word            { $$ = ssl_expr_make(op_LT,  $1, $3); }
-          | word T_OP_LE word            { $$ = ssl_expr_make(op_LE,  $1, $3); }
-          | word T_OP_GT word            { $$ = ssl_expr_make(op_GT,  $1, $3); }
-          | word T_OP_GE word            { $$ = ssl_expr_make(op_GE,  $1, $3); }
-          | word T_OP_IN '{' words '}'   { $$ = ssl_expr_make(op_IN,  $1, $4); }
-          | word T_OP_REG regex          { $$ = ssl_expr_make(op_REG, $1, $3); }
-          | word T_OP_NRE regex          { $$ = ssl_expr_make(op_NRE, $1, $3); }
-          ;
-
-words     : word                         { $$ = ssl_expr_make(op_ListElement, $1, NULL); }
-          | words ',' word               { $$ = ssl_expr_make(op_ListElement, $3, $1);   }
-          ;
-
-word      : T_DIGIT                      { $$ = ssl_expr_make(op_Digit,  $1, NULL); }
-          | T_STRING                     { $$ = ssl_expr_make(op_String, $1, NULL); }
-          | '%' '{' T_ID '}'             { $$ = ssl_expr_make(op_Var,    $3, NULL); }
-          | funccall                     { $$ = $1; }
-          ;
-
-regex     : T_REGEX { 
-                regex_t *regex;
-                if ((regex = ap_pregcomp(ssl_expr_info.pool, $1, 
-                                         REG_EXTENDED|REG_NOSUB)) == NULL) {
-                    ssl_expr_error = "Failed to compile regular expression";
-                    YYERROR;
-                    regex = NULL;
-                }
-                $$ = ssl_expr_make(op_Regex, regex, NULL);
-            }
-          | T_REGEX_I {
-                regex_t *regex;
-                if ((regex = ap_pregcomp(ssl_expr_info.pool, $1, 
-                                         REG_EXTENDED|REG_NOSUB|REG_ICASE)) == NULL) {
-                    ssl_expr_error = "Failed to compile regular expression";
-                    YYERROR;
-                    regex = NULL;
-                }
-                $$ = ssl_expr_make(op_Regex, regex, NULL);
-            }
-          ;
-
-funccall  : T_FUNC_FILE '(' T_STRING ')' { 
-               ssl_expr *args = ssl_expr_make(op_ListElement, $3, NULL);
-               $$ = ssl_expr_make(op_Func, "file", args);
-            }
-          ;
-
-%%
-
-int yyerror(char *s)
-{
-    ssl_expr_error = s;
-    return 2;
-}
-
diff --git a/modules/ssl/ssl_expr_scan.c b/modules/ssl/ssl_expr_scan.c
deleted file mode 100644
index 29eb106..0000000
--- a/modules/ssl/ssl_expr_scan.c
+++ /dev/null
@@ -1,2001 +0,0 @@
-#define yy_create_buffer ssl_expr_yy_create_buffer
-#define yy_delete_buffer ssl_expr_yy_delete_buffer
-#define yy_scan_buffer ssl_expr_yy_scan_buffer
-#define yy_scan_string ssl_expr_yy_scan_string
-#define yy_scan_bytes ssl_expr_yy_scan_bytes
-#define yy_flex_debug ssl_expr_yy_flex_debug
-#define yy_init_buffer ssl_expr_yy_init_buffer
-#define yy_flush_buffer ssl_expr_yy_flush_buffer
-#define yy_load_buffer_state ssl_expr_yy_load_buffer_state
-#define yy_switch_to_buffer ssl_expr_yy_switch_to_buffer
-#define yyin ssl_expr_yyin
-#define yyleng ssl_expr_yyleng
-#define yylex ssl_expr_yylex
-#define yyout ssl_expr_yyout
-#define yyrestart ssl_expr_yyrestart
-#define yytext ssl_expr_yytext
-
-/* A lexical scanner generated by flex */
-
-/* Scanner skeleton version:
- * $Header: /home/striker/cvs2svn/dumps/httpd-2.0/../../httpd-2.0/modules/ssl/ssl_expr_scan.c,v 1.8 2002/03/13 20:47:55 fielding Exp $
- */
-
-#define FLEX_SCANNER
-#define YY_FLEX_MAJOR_VERSION 2
-#define YY_FLEX_MINOR_VERSION 5
-
-#include <stdio.h>
-
-
-/* cfront 1.2 defines "c_plusplus" instead of "__cplusplus" */
-#ifdef c_plusplus
-#ifndef __cplusplus
-#define __cplusplus
-#endif
-#endif
-
-
-#ifdef __cplusplus
-
-#include <stdlib.h>
-#include <unistd.h>
-
-/* Use prototypes in function declarations. */
-#define YY_USE_PROTOS
-
-/* The "const" storage-class-modifier is valid. */
-#define YY_USE_CONST
-
-#else	/* ! __cplusplus */
-
-#if __STDC__
-
-#define YY_USE_PROTOS
-#define YY_USE_CONST
-
-#endif	/* __STDC__ */
-#endif	/* ! __cplusplus */
-
-#ifdef __TURBOC__
- #pragma warn -rch
- #pragma warn -use
-#include <io.h>
-#include <stdlib.h>
-#define YY_USE_CONST
-#define YY_USE_PROTOS
-#endif
-
-#ifdef YY_USE_CONST
-#define yyconst const
-#else
-#define yyconst
-#endif
-
-
-#ifdef YY_USE_PROTOS
-#define YY_PROTO(proto) proto
-#else
-#define YY_PROTO(proto) ()
-#endif
-
-/* Returned upon end-of-file. */
-#define YY_NULL 0
-
-/* Promotes a possibly negative, possibly signed char to an unsigned
- * integer for use as an array index.  If the signed char is negative,
- * we want to instead treat it as an 8-bit unsigned char, hence the
- * double cast.
- */
-#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
-
-/* Enter a start condition.  This macro really ought to take a parameter,
- * but we do it the disgusting crufty way forced on us by the ()-less
- * definition of BEGIN.
- */
-#define BEGIN yy_start = 1 + 2 *
-
-/* Translate the current start state into a value that can be later handed
- * to BEGIN to return to the state.  The YYSTATE alias is for lex
- * compatibility.
- */
-#define YY_START ((yy_start - 1) / 2)
-#define YYSTATE YY_START
-
-/* Action number for EOF rule of a given start state. */
-#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
-
-/* Special action meaning "start processing a new file". */
-#define YY_NEW_FILE yyrestart( yyin )
-
-#define YY_END_OF_BUFFER_CHAR 0
-
-/* Size of default input buffer. */
-#define YY_BUF_SIZE 16384
-
-typedef struct yy_buffer_state *YY_BUFFER_STATE;
-
-extern int yyleng;
-extern FILE *yyin, *yyout;
-
-#define EOB_ACT_CONTINUE_SCAN 0
-#define EOB_ACT_END_OF_FILE 1
-#define EOB_ACT_LAST_MATCH 2
-
-/* The funky do-while in the following #define is used to turn the definition
- * int a single C statement (which needs a semi-colon terminator).  This
- * avoids problems with code like:
- *
- * 	if ( condition_holds )
- *		yyless( 5 );
- *	else
- *		do_something_else();
- *
- * Prior to using the do-while the compiler would get upset at the
- * "else" because it interpreted the "if" statement as being all
- * done when it reached the ';' after the yyless() call.
- */
-
-/* Return all but the first 'n' matched characters back to the input stream. */
-
-#define yyless(n) \
-	do \
-		{ \
-		/* Undo effects of setting up yytext. */ \
-		*yy_cp = yy_hold_char; \
-		YY_RESTORE_YY_MORE_OFFSET \
-		yy_c_buf_p = yy_cp = yy_bp + n - YY_MORE_ADJ; \
-		YY_DO_BEFORE_ACTION; /* set up yytext again */ \
-		} \
-	while ( 0 )
-
-#define unput(c) yyunput( c, yytext_ptr )
-
-/* The following is because we cannot portably get our hands on size_t
- * (without autoconf's help, which isn't available because we want
- * flex-generated scanners to compile on their own).
- */
-typedef unsigned int yy_size_t;
-
-
-struct yy_buffer_state
-	{
-	FILE *yy_input_file;
-
-	char *yy_ch_buf;		/* input buffer */
-	char *yy_buf_pos;		/* current position in input buffer */
-
-	/* Size of input buffer in bytes, not including room for EOB
-	 * characters.
-	 */
-	yy_size_t yy_buf_size;
-
-	/* Number of characters read into yy_ch_buf, not including EOB
-	 * characters.
-	 */
-	int yy_n_chars;
-
-	/* Whether we "own" the buffer - i.e., we know we created it,
-	 * and can realloc() it to grow it, and should free() it to
-	 * delete it.
-	 */
-	int yy_is_our_buffer;
-
-	/* Whether this is an "interactive" input source; if so, and
-	 * if we're using stdio for input, then we want to use getc()
-	 * instead of fread(), to make sure we stop fetching input after
-	 * each newline.
-	 */
-	int yy_is_interactive;
-
-	/* Whether we're considered to be at the beginning of a line.
-	 * If so, '^' rules will be active on the next match, otherwise
-	 * not.
-	 */
-	int yy_at_bol;
-
-	/* Whether to try to fill the input buffer when we reach the
-	 * end of it.
-	 */
-	int yy_fill_buffer;
-
-	int yy_buffer_status;
-#define YY_BUFFER_NEW 0
-#define YY_BUFFER_NORMAL 1
-	/* When an EOF's been seen but there's still some text to process
-	 * then we mark the buffer as YY_EOF_PENDING, to indicate that we
-	 * shouldn't try reading from the input source any more.  We might
-	 * still have a bunch of tokens to match, though, because of
-	 * possible backing-up.
-	 *
-	 * When we actually see the EOF, we change the status to "new"
-	 * (via yyrestart()), so that the user can continue scanning by
-	 * just pointing yyin at a new input file.
-	 */
-#define YY_BUFFER_EOF_PENDING 2
-	};
-
-static YY_BUFFER_STATE yy_current_buffer = 0;
-
-/* We provide macros for accessing buffer states in case in the
- * future we want to put the buffer states in a more general
- * "scanner state".
- */
-#define YY_CURRENT_BUFFER yy_current_buffer
-
-
-/* yy_hold_char holds the character lost when yytext is formed. */
-static char yy_hold_char;
-
-static int yy_n_chars;		/* number of characters read into yy_ch_buf */
-
-
-int yyleng;
-
-/* Points to current character in buffer. */
-static char *yy_c_buf_p = (char *) 0;
-static int yy_init = 1;		/* whether we need to initialize */
-static int yy_start = 0;	/* start state number */
-
-/* Flag which is used to allow yywrap()'s to do buffer switches
- * instead of setting up a fresh yyin.  A bit of a hack ...
- */
-static int yy_did_buffer_switch_on_eof;
-
-void yyrestart YY_PROTO(( FILE *input_file ));
-
-void yy_switch_to_buffer YY_PROTO(( YY_BUFFER_STATE new_buffer ));
-void yy_load_buffer_state YY_PROTO(( void ));
-YY_BUFFER_STATE yy_create_buffer YY_PROTO(( FILE *file, int size ));
-void yy_delete_buffer YY_PROTO(( YY_BUFFER_STATE b ));
-void yy_init_buffer YY_PROTO(( YY_BUFFER_STATE b, FILE *file ));
-void yy_flush_buffer YY_PROTO(( YY_BUFFER_STATE b ));
-#define YY_FLUSH_BUFFER yy_flush_buffer( yy_current_buffer )
-
-YY_BUFFER_STATE yy_scan_buffer YY_PROTO(( char *base, yy_size_t size ));
-YY_BUFFER_STATE yy_scan_string YY_PROTO(( yyconst char *yy_str ));
-YY_BUFFER_STATE yy_scan_bytes YY_PROTO(( yyconst char *bytes, int len ));
-
-static void *yy_flex_alloc YY_PROTO(( yy_size_t ));
-static void *yy_flex_realloc YY_PROTO(( void *, yy_size_t ));
-static void yy_flex_free YY_PROTO(( void * ));
-
-#define yy_new_buffer yy_create_buffer
-
-#define yy_set_interactive(is_interactive) \
-	{ \
-	if ( ! yy_current_buffer ) \
-		yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \
-	yy_current_buffer->yy_is_interactive = is_interactive; \
-	}
-
-#define yy_set_bol(at_bol) \
-	{ \
-	if ( ! yy_current_buffer ) \
-		yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \
-	yy_current_buffer->yy_at_bol = at_bol; \
-	}
-
-#define YY_AT_BOL() (yy_current_buffer->yy_at_bol)
-
-
-#define yywrap() 1
-#define YY_SKIP_YYWRAP
-typedef unsigned char YY_CHAR;
-FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0;
-typedef int yy_state_type;
-extern char *yytext;
-#define yytext_ptr yytext
-
-static yy_state_type yy_get_previous_state YY_PROTO(( void ));
-static yy_state_type yy_try_NUL_trans YY_PROTO(( yy_state_type current_state ));
-static int yy_get_next_buffer YY_PROTO(( void ));
-static void yy_fatal_error YY_PROTO(( yyconst char msg[] ));
-
-/* Done after the current pattern has been matched and before the
- * corresponding action - sets up yytext.
- */
-#define YY_DO_BEFORE_ACTION \
-	yytext_ptr = yy_bp; \
-	yyleng = (int) (yy_cp - yy_bp); \
-	yy_hold_char = *yy_cp; \
-	*yy_cp = '\0'; \
-	yy_c_buf_p = yy_cp;
-
-#define YY_NUM_RULES 46
-#define YY_END_OF_BUFFER 47
-static yyconst short int yy_accept[86] =
-    {   0,
-        0,    0,    0,    0,    0,    0,    0,    0,   47,   45,
-        1,   38,    2,   45,   43,   24,   45,   28,   44,   44,
-       44,   44,   44,   44,   44,   44,   44,   44,   44,   45,
-       13,    4,    3,   14,   16,   18,   17,    1,   22,   32,
-       34,   43,   26,   20,   31,   30,   44,   44,   19,   44,
-       44,   29,   27,   39,   25,   23,   15,   15,   21,   44,
-       35,   44,   36,   13,   12,    5,    6,   10,   11,    7,
-        8,    9,   33,   44,   44,   37,   44,    5,    6,   44,
-       40,   41,    5,   42,    0
-    } ;
-
-static yyconst int yy_ec[256] =
-    {   0,
-        1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    2,    4,    5,    1,    1,    1,    6,    1,    1,
-        1,    1,    1,    1,    7,    1,    1,    8,    8,    8,
-        8,    8,    8,    8,    8,    9,    9,    7,    1,   10,
-       11,   12,    1,    1,   13,   13,   13,   13,   13,   13,
-       13,   13,   13,   13,   13,   13,   13,   13,   13,   13,
-       13,   13,   13,   13,   13,   13,   13,   13,   13,   13,
-        1,   14,    1,    1,    7,    1,   15,   16,   13,   17,
-
-       18,   19,   20,   13,   21,   13,   13,   22,   23,   24,
-       25,   13,   26,   27,   28,   29,   30,   13,   13,   13,
-       13,   13,    1,   31,    1,   32,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1
-    } ;
-
-static yyconst int yy_meta[33] =
-    {   0,
-        1,    1,    2,    1,    3,    1,    4,    4,    4,    1,
-        1,    1,    4,    3,    4,    4,    4,    4,    4,    4,
-        4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
-        1,    1
-    } ;
-
-static yyconst short int yy_base[93] =
-    {   0,
-        0,    0,   30,   31,    0,    0,   82,   81,  101,  142,
-       35,   28,  142,   94,   32,   88,   31,   87,    0,   69,
-       66,   28,   28,   67,   29,   63,   30,   63,   62,   57,
-        0,  142,  142,   88,  142,  142,  142,   48,  142,  142,
-      142,   44,  142,  142,  142,  142,    0,   70,    0,   64,
-       63,    0,    0,    0,    0,    0,  142,    0,    0,   55,
-        0,   46,  142,    0,  142,   53,   62,  142,  142,  142,
-      142,  142,    0,   44,   48,    0,   41,   70,   72,   38,
-        0,    0,   74,    0,  142,  117,  121,  125,   50,  129,
-      133,  137
-
-    } ;
-
-static yyconst short int yy_def[93] =
-    {   0,
-       85,    1,   86,   86,   87,   87,   88,   88,   85,   85,
-       85,   85,   85,   85,   85,   85,   85,   85,   89,   89,
-       89,   89,   89,   89,   89,   90,   89,   89,   89,   85,
-       91,   85,   85,   92,   85,   85,   85,   85,   85,   85,
-       85,   85,   85,   85,   85,   85,   89,   89,   89,   89,
-       89,   89,   89,   89,   89,   89,   85,   89,   89,   89,
-       89,   89,   85,   91,   85,   85,   85,   85,   85,   85,
-       85,   85,   89,   89,   89,   89,   89,   85,   85,   89,
-       89,   89,   85,   89,    0,   85,   85,   85,   85,   85,
-       85,   85
-
-    } ;
-
-static yyconst short int yy_nxt[175] =
-    {   0,
-       10,   11,   11,   12,   13,   14,   10,   15,   15,   16,
-       17,   18,   19,   10,   20,   19,   19,   21,   22,   23,
-       24,   25,   26,   27,   28,   19,   19,   19,   29,   19,
-       30,   10,   32,   32,   33,   33,   38,   38,   39,   42,
-       42,   44,   50,   34,   34,   52,   55,   59,   51,   38,
-       38,   42,   42,   47,   60,   84,   53,   56,   82,   40,
-       78,   79,   45,   57,   57,   81,   57,   57,   57,   79,
-       79,   80,   57,   57,   57,   77,   57,   83,   79,   79,
-       79,   79,   79,   76,   75,   74,   73,   63,   62,   61,
-       54,   49,   48,   57,   57,   66,   67,   46,   43,   41,
-
-       85,   37,   37,   68,   85,   85,   69,   85,   85,   85,
-       85,   70,   85,   85,   71,   85,   72,   31,   31,   31,
-       31,   35,   35,   35,   35,   36,   36,   36,   36,   58,
-       85,   58,   58,   64,   85,   85,   64,   65,   65,   65,
-       65,    9,   85,   85,   85,   85,   85,   85,   85,   85,
-       85,   85,   85,   85,   85,   85,   85,   85,   85,   85,
-       85,   85,   85,   85,   85,   85,   85,   85,   85,   85,
-       85,   85,   85,   85
-    } ;
-
-static yyconst short int yy_chk[175] =
-    {   0,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    3,    4,    3,    4,   11,   11,   12,   15,
-       15,   17,   22,    3,    4,   23,   25,   27,   22,   38,
-       38,   42,   42,   89,   27,   80,   23,   25,   77,   12,
-       66,   66,   17,   26,   26,   75,   26,   26,   26,   67,
-       67,   74,   26,   26,   26,   62,   26,   78,   78,   79,
-       79,   83,   83,   60,   51,   50,   48,   30,   29,   28,
-       24,   21,   20,   26,   26,   34,   34,   18,   16,   14,
-
-        9,    8,    7,   34,    0,    0,   34,    0,    0,    0,
-        0,   34,    0,    0,   34,    0,   34,   86,   86,   86,
-       86,   87,   87,   87,   87,   88,   88,   88,   88,   90,
-        0,   90,   90,   91,    0,    0,   91,   92,   92,   92,
-       92,   85,   85,   85,   85,   85,   85,   85,   85,   85,
-       85,   85,   85,   85,   85,   85,   85,   85,   85,   85,
-       85,   85,   85,   85,   85,   85,   85,   85,   85,   85,
-       85,   85,   85,   85
-    } ;
-
-static yy_state_type yy_last_accepting_state;
-static char *yy_last_accepting_cpos;
-
-/* The intent behind this definition is that it'll catch
- * any uses of REJECT which flex missed.
- */
-#define REJECT reject_used_but_not_detected
-#define yymore() yymore_used_but_not_detected
-#define YY_MORE_ADJ 0
-#define YY_RESTORE_YY_MORE_OFFSET
-char *yytext;
-#line 1 "ssl_expr_scan.l"
-#define INITIAL 0
-/*                      _             _ 
-**  _ __ ___   ___   __| |    ___ ___| |  
-** | '_ ` _ \ / _ \ / _` |   / __/ __| |  
-** | | | | | | (_) | (_| |   \__ \__ \ | mod_ssl - Apache Interface to OpenSSL
-** |_| |_| |_|\___/ \__,_|___|___/___/_| http://www.modssl.org/
-**                      |_____|         
-**  ssl_expr_scan.l
-**  Expression Scanner
-*/
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- */
-/* ``Killing for peace is 
-like fucking for virginity.''
--- Unknown  */
-/*  _________________________________________________________________
-**
-**  Expression Scanner
-**  _________________________________________________________________
-*/
-#line 70 "ssl_expr_scan.l"
-#include "mod_ssl.h"
-
-#include "ssl_expr_parse.h"
-
-#define YY_NO_UNPUT 1
-int yyinput(char *buf, int max_size);
-
-#undef  YY_INPUT
-#define YY_INPUT(buf,result,max_size) \
-    (result = yyinput(buf, max_size))
-
-#define MAX_STR_LEN 2048
-/* %option stack */
-#define YY_NEVER_INTERACTIVE 1
-#define str 1
-
-#define regex 2
-#define regex_flags 3
-
-#line 535 "lex.ssl_expr_yy.c"
-
-/* Macros after this point can all be overridden by user definitions in
- * section 1.
- */
-
-#ifndef YY_SKIP_YYWRAP
-#ifdef __cplusplus
-extern "C" int yywrap YY_PROTO(( void ));
-#else
-extern int yywrap YY_PROTO(( void ));
-#endif
-#endif
-
-#ifndef YY_NO_UNPUT
-static void yyunput YY_PROTO(( int c, char *buf_ptr ));
-#endif
-
-#ifndef yytext_ptr
-static void yy_flex_strncpy YY_PROTO(( char *, yyconst char *, int ));
-#endif
-
-#ifdef YY_NEED_STRLEN
-static int yy_flex_strlen YY_PROTO(( yyconst char * ));
-#endif
-
-#ifndef YY_NO_INPUT
-#ifdef __cplusplus
-static int yyinput YY_PROTO(( void ));
-#else
-static int input YY_PROTO(( void ));
-#endif
-#endif
-
-#if YY_STACK_USED
-static int yy_start_stack_ptr = 0;
-static int yy_start_stack_depth = 0;
-static int *yy_start_stack = 0;
-#ifndef YY_NO_PUSH_STATE
-static void yy_push_state YY_PROTO(( int new_state ));
-#endif
-#ifndef YY_NO_POP_STATE
-static void yy_pop_state YY_PROTO(( void ));
-#endif
-#ifndef YY_NO_TOP_STATE
-static int yy_top_state YY_PROTO(( void ));
-#endif
-
-#else
-#define YY_NO_PUSH_STATE 1
-#define YY_NO_POP_STATE 1
-#define YY_NO_TOP_STATE 1
-#endif
-
-#ifdef YY_MALLOC_DECL
-YY_MALLOC_DECL
-#else
-#if __STDC__
-#ifndef __cplusplus
-#include <stdlib.h>
-#endif
-#else
-/* Just try to get by without declaring the routines.  This will fail
- * miserably on non-ANSI systems for which sizeof(size_t) != sizeof(int)
- * or sizeof(void*) != sizeof(int).
- */
-#endif
-#endif
-
-/* Amount of stuff to slurp up with each read. */
-#ifndef YY_READ_BUF_SIZE
-#define YY_READ_BUF_SIZE 8192
-#endif
-
-/* Copy whatever the last rule matched to the standard output. */
-
-#ifndef ECHO
-/* This used to be an fputs(), but since the string might contain NUL's,
- * we now use fwrite().
- */
-#define ECHO (void) fwrite( yytext, yyleng, 1, yyout )
-#endif
-
-/* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
- * is returned in "result".
- */
-#ifndef YY_INPUT
-#define YY_INPUT(buf,result,max_size) \
-	if ( yy_current_buffer->yy_is_interactive ) \
-		{ \
-		int c = '*', n; \
-		for ( n = 0; n < max_size && \
-			     (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
-			buf[n] = (char) c; \
-		if ( c == '\n' ) \
-			buf[n++] = (char) c; \
-		if ( c == EOF && ferror( yyin ) ) \
-			YY_FATAL_ERROR( "input in flex scanner failed" ); \
-		result = n; \
-		} \
-	else if ( ((result = fread( buf, 1, max_size, yyin )) == 0) \
-		  && ferror( yyin ) ) \
-		YY_FATAL_ERROR( "input in flex scanner failed" );
-#endif
-
-/* No semi-colon after return; correct usage is to write "yyterminate();" -
- * we don't want an extra ';' after the "return" because that will cause
- * some compilers to complain about unreachable statements.
- */
-#ifndef yyterminate
-#define yyterminate() return YY_NULL
-#endif
-
-/* Number of entries by which start-condition stack grows. */
-#ifndef YY_START_STACK_INCR
-#define YY_START_STACK_INCR 25
-#endif
-
-/* Report a fatal error. */
-#ifndef YY_FATAL_ERROR
-#define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
-#endif
-
-/* Default declaration of generated scanner - a define so the user can
- * easily add parameters.
- */
-#ifndef YY_DECL
-#define YY_DECL int yylex YY_PROTO(( void ))
-#endif
-
-/* Code executed at the beginning of each rule, after yytext and yyleng
- * have been set up.
- */
-#ifndef YY_USER_ACTION
-#define YY_USER_ACTION
-#endif
-
-/* Code executed at the end of each rule. */
-#ifndef YY_BREAK
-#define YY_BREAK break;
-#endif
-
-#define YY_RULE_SETUP \
-	YY_USER_ACTION
-
-YY_DECL
-	{
-	register yy_state_type yy_current_state;
-	register char *yy_cp, *yy_bp;
-	register int yy_act;
-
-#line 91 "ssl_expr_scan.l"
-
-  
-  char  caStr[MAX_STR_LEN];
-  char *cpStr = NULL;
-  char  caRegex[MAX_STR_LEN];
-  char *cpRegex = NULL;
-  char  cRegexDel = NUL;
-
- /*
-  * Whitespaces
-  */
-#line 698 "lex.ssl_expr_yy.c"
-
-	if ( yy_init )
-		{
-		yy_init = 0;
-
-#ifdef YY_USER_INIT
-		YY_USER_INIT;
-#endif
-
-		if ( ! yy_start )
-			yy_start = 1;	/* first start state */
-
-		if ( ! yyin )
-			yyin = stdin;
-
-		if ( ! yyout )
-			yyout = stdout;
-
-		if ( ! yy_current_buffer )
-			yy_current_buffer =
-				yy_create_buffer( yyin, YY_BUF_SIZE );
-
-		yy_load_buffer_state();
-		}
-
-	while ( 1 )		/* loops until end-of-file is reached */
-		{
-		yy_cp = yy_c_buf_p;
-
-		/* Support of yytext. */
-		*yy_cp = yy_hold_char;
-
-		/* yy_bp points to the position in yy_ch_buf of the start of
-		 * the current run.
-		 */
-		yy_bp = yy_cp;
-
-		yy_current_state = yy_start;
-yy_match:
-		do
-			{
-			register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
-			if ( yy_accept[yy_current_state] )
-				{
-				yy_last_accepting_state = yy_current_state;
-				yy_last_accepting_cpos = yy_cp;
-				}
-			while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
-				{
-				yy_current_state = (int) yy_def[yy_current_state];
-				if ( yy_current_state >= 86 )
-					yy_c = yy_meta[(unsigned int) yy_c];
-				}
-			yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-			++yy_cp;
-			}
-		while ( yy_current_state != 85 );
-		yy_cp = yy_last_accepting_cpos;
-		yy_current_state = yy_last_accepting_state;
-
-yy_find_action:
-		yy_act = yy_accept[yy_current_state];
-
-		YY_DO_BEFORE_ACTION;
-
-
-do_action:	/* This label is used only to access EOF actions. */
-
-
-		switch ( yy_act )
-	{ /* beginning of action switch */
-			case 0: /* must back up */
-			/* undo the effects of YY_DO_BEFORE_ACTION */
-			*yy_cp = yy_hold_char;
-			yy_cp = yy_last_accepting_cpos;
-			yy_current_state = yy_last_accepting_state;
-			goto yy_find_action;
-
-case 1:
-YY_RULE_SETUP
-#line 102 "ssl_expr_scan.l"
-{ 
-    /* NOP */
-}
-	YY_BREAK
-/*
-  * C-style strings ("...")
-  */
-case 2:
-YY_RULE_SETUP
-#line 109 "ssl_expr_scan.l"
-{
-    cpStr = caStr;
-    BEGIN(str);
-}
-	YY_BREAK
-case 3:
-YY_RULE_SETUP
-#line 113 "ssl_expr_scan.l"
-{
-    BEGIN(INITIAL);
-    *cpStr = NUL;
-    yylval.cpVal = apr_pstrdup(ssl_expr_info.pool, caStr);
-    return T_STRING;
-}
-	YY_BREAK
-case 4:
-YY_RULE_SETUP
-#line 119 "ssl_expr_scan.l"
-{
-    yyerror("Unterminated string");
-}
-	YY_BREAK
-case 5:
-YY_RULE_SETUP
-#line 122 "ssl_expr_scan.l"
-{
-    int result;
-
-    (void)sscanf(yytext+1, "%o", &result);
-    if (result > 0xff)
-        yyerror("Escape sequence out of bound");
-    else
-        *cpStr++ = result;
-}
-	YY_BREAK
-case 6:
-YY_RULE_SETUP
-#line 131 "ssl_expr_scan.l"
-{
-    yyerror("Bad escape sequence");
-}
-	YY_BREAK
-case 7:
-YY_RULE_SETUP
-#line 134 "ssl_expr_scan.l"
-{ *cpStr++ = '\n'; }
-	YY_BREAK
-case 8:
-YY_RULE_SETUP
-#line 135 "ssl_expr_scan.l"
-{ *cpStr++ = '\r'; }
-	YY_BREAK
-case 9:
-YY_RULE_SETUP
-#line 136 "ssl_expr_scan.l"
-{ *cpStr++ = '\t'; }
-	YY_BREAK
-case 10:
-YY_RULE_SETUP
-#line 137 "ssl_expr_scan.l"
-{ *cpStr++ = '\b'; }
-	YY_BREAK
-case 11:
-YY_RULE_SETUP
-#line 138 "ssl_expr_scan.l"
-{ *cpStr++ = '\f'; }
-	YY_BREAK
-case 12:
-YY_RULE_SETUP
-#line 139 "ssl_expr_scan.l"
-{
-    *cpStr++ = yytext[1];
-}
-	YY_BREAK
-case 13:
-YY_RULE_SETUP
-#line 142 "ssl_expr_scan.l"
-{
-    char *cp = yytext;
-    while (*cp != NUL)
-        *cpStr++ = *cp++;
-}
-	YY_BREAK
-case 14:
-YY_RULE_SETUP
-#line 147 "ssl_expr_scan.l"
-{
-    *cpStr++ = yytext[1];
-}
-	YY_BREAK
-/*
-  * Regular Expression
-  */
-case 15:
-YY_RULE_SETUP
-#line 154 "ssl_expr_scan.l"
-{
-    cRegexDel = yytext[1];
-    cpRegex = caRegex;
-    BEGIN(regex);
-}
-	YY_BREAK
-case 16:
-YY_RULE_SETUP
-#line 159 "ssl_expr_scan.l"
-{
-    if (yytext[0] == cRegexDel) {
-        *cpRegex = NUL;
-        BEGIN(regex_flags);
-    }
-    else {
-        *cpRegex++ = yytext[0];
-    }
-}
-	YY_BREAK
-case 17:
-YY_RULE_SETUP
-#line 168 "ssl_expr_scan.l"
-{
-    yylval.cpVal = apr_pstrdup(ssl_expr_info.pool, caRegex);
-    BEGIN(INITIAL);
-    return T_REGEX_I;
-}
-	YY_BREAK
-case 18:
-YY_RULE_SETUP
-#line 173 "ssl_expr_scan.l"
-{
-    yylval.cpVal = apr_pstrdup(ssl_expr_info.pool, caRegex);
-    yyless(0);
-    BEGIN(INITIAL);
-    return T_REGEX;
-}
-	YY_BREAK
-case YY_STATE_EOF(regex_flags):
-#line 179 "ssl_expr_scan.l"
-{
-    yylval.cpVal = apr_pstrdup(ssl_expr_info.pool, caRegex);
-    BEGIN(INITIAL);
-    return T_REGEX;
-}
-	YY_BREAK
-/*
-  * Operators
-  */
-case 19:
-YY_RULE_SETUP
-#line 188 "ssl_expr_scan.l"
-{ return T_OP_EQ; }
-	YY_BREAK
-case 20:
-YY_RULE_SETUP
-#line 189 "ssl_expr_scan.l"
-{ return T_OP_EQ; }
-	YY_BREAK
-case 21:
-YY_RULE_SETUP
-#line 190 "ssl_expr_scan.l"
-{ return T_OP_NE; }
-	YY_BREAK
-case 22:
-YY_RULE_SETUP
-#line 191 "ssl_expr_scan.l"
-{ return T_OP_NE; }
-	YY_BREAK
-case 23:
-YY_RULE_SETUP
-#line 192 "ssl_expr_scan.l"
-{ return T_OP_LT; }
-	YY_BREAK
-case 24:
-YY_RULE_SETUP
-#line 193 "ssl_expr_scan.l"
-{ return T_OP_LT; }
-	YY_BREAK
-case 25:
-YY_RULE_SETUP
-#line 194 "ssl_expr_scan.l"
-{ return T_OP_LE; }
-	YY_BREAK
-case 26:
-YY_RULE_SETUP
-#line 195 "ssl_expr_scan.l"
-{ return T_OP_LE; }
-	YY_BREAK
-case 27:
-YY_RULE_SETUP
-#line 196 "ssl_expr_scan.l"
-{ return T_OP_GT; }
-	YY_BREAK
-case 28:
-YY_RULE_SETUP
-#line 197 "ssl_expr_scan.l"
-{ return T_OP_GT; }
-	YY_BREAK
-case 29:
-YY_RULE_SETUP
-#line 198 "ssl_expr_scan.l"
-{ return T_OP_GE; }
-	YY_BREAK
-case 30:
-YY_RULE_SETUP
-#line 199 "ssl_expr_scan.l"
-{ return T_OP_GE; }
-	YY_BREAK
-case 31:
-YY_RULE_SETUP
-#line 200 "ssl_expr_scan.l"
-{ return T_OP_REG; }
-	YY_BREAK
-case 32:
-YY_RULE_SETUP
-#line 201 "ssl_expr_scan.l"
-{ return T_OP_NRE; }
-	YY_BREAK
-case 33:
-YY_RULE_SETUP
-#line 202 "ssl_expr_scan.l"
-{ return T_OP_AND; }
-	YY_BREAK
-case 34:
-YY_RULE_SETUP
-#line 203 "ssl_expr_scan.l"
-{ return T_OP_AND; }
-	YY_BREAK
-case 35:
-YY_RULE_SETUP
-#line 204 "ssl_expr_scan.l"
-{ return T_OP_OR; }
-	YY_BREAK
-case 36:
-YY_RULE_SETUP
-#line 205 "ssl_expr_scan.l"
-{ return T_OP_OR; }
-	YY_BREAK
-case 37:
-YY_RULE_SETUP
-#line 206 "ssl_expr_scan.l"
-{ return T_OP_NOT; }
-	YY_BREAK
-case 38:
-YY_RULE_SETUP
-#line 207 "ssl_expr_scan.l"
-{ return T_OP_NOT; }
-	YY_BREAK
-case 39:
-YY_RULE_SETUP
-#line 208 "ssl_expr_scan.l"
-{ return T_OP_IN; }
-	YY_BREAK
-/*
-  * Functions
-  */
-case 40:
-YY_RULE_SETUP
-#line 213 "ssl_expr_scan.l"
-{ return T_FUNC_FILE; }
-	YY_BREAK
-/*
-  * Specials
-  */
-case 41:
-YY_RULE_SETUP
-#line 218 "ssl_expr_scan.l"
-{ return T_TRUE; }
-	YY_BREAK
-case 42:
-YY_RULE_SETUP
-#line 219 "ssl_expr_scan.l"
-{ return T_FALSE; }
-	YY_BREAK
-/*
-  * Digits
-  */
-case 43:
-YY_RULE_SETUP
-#line 224 "ssl_expr_scan.l"
-{
-    yylval.cpVal = apr_pstrdup(ssl_expr_info.pool, yytext);
-    return T_DIGIT;
-}
-	YY_BREAK
-/*
-  * Identifiers
-  */
-case 44:
-YY_RULE_SETUP
-#line 232 "ssl_expr_scan.l"
-{
-    yylval.cpVal = apr_pstrdup(ssl_expr_info.pool, yytext);
-    return T_ID;
-}
-	YY_BREAK
-/*
-  * Anything else is returned as is...
-  */
-case 45:
-YY_RULE_SETUP
-#line 240 "ssl_expr_scan.l"
-{ 
-    return yytext[0];
-}
-	YY_BREAK
-case 46:
-YY_RULE_SETUP
-#line 244 "ssl_expr_scan.l"
-YY_FATAL_ERROR( "flex scanner jammed" );
-	YY_BREAK
-#line 1098 "lex.ssl_expr_yy.c"
-case YY_STATE_EOF(INITIAL):
-case YY_STATE_EOF(str):
-case YY_STATE_EOF(regex):
-	yyterminate();
-
-	case YY_END_OF_BUFFER:
-		{
-		/* Amount of text matched not including the EOB char. */
-		int yy_amount_of_matched_text = (int) (yy_cp - yytext_ptr) - 1;
-
-		/* Undo the effects of YY_DO_BEFORE_ACTION. */
-		*yy_cp = yy_hold_char;
-		YY_RESTORE_YY_MORE_OFFSET
-
-		if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_NEW )
-			{
-			/* We're scanning a new file or input source.  It's
-			 * possible that this happened because the user
-			 * just pointed yyin at a new source and called
-			 * yylex().  If so, then we have to assure
-			 * consistency between yy_current_buffer and our
-			 * globals.  Here is the right place to do so, because
-			 * this is the first action (other than possibly a
-			 * back-up) that will match for the new input source.
-			 */
-			yy_n_chars = yy_current_buffer->yy_n_chars;
-			yy_current_buffer->yy_input_file = yyin;
-			yy_current_buffer->yy_buffer_status = YY_BUFFER_NORMAL;
-			}
-
-		/* Note that here we test for yy_c_buf_p "<=" to the position
-		 * of the first EOB in the buffer, since yy_c_buf_p will
-		 * already have been incremented past the NUL character
-		 * (since all states make transitions on EOB to the
-		 * end-of-buffer state).  Contrast this with the test
-		 * in input().
-		 */
-		if ( yy_c_buf_p <= &yy_current_buffer->yy_ch_buf[yy_n_chars] )
-			{ /* This was really a NUL. */
-			yy_state_type yy_next_state;
-
-			yy_c_buf_p = yytext_ptr + yy_amount_of_matched_text;
-
-			yy_current_state = yy_get_previous_state();
-
-			/* Okay, we're now positioned to make the NUL
-			 * transition.  We couldn't have
-			 * yy_get_previous_state() go ahead and do it
-			 * for us because it doesn't know how to deal
-			 * with the possibility of jamming (and we don't
-			 * want to build jamming into it because then it
-			 * will run more slowly).
-			 */
-
-			yy_next_state = yy_try_NUL_trans( yy_current_state );
-
-			yy_bp = yytext_ptr + YY_MORE_ADJ;
-
-			if ( yy_next_state )
-				{
-				/* Consume the NUL. */
-				yy_cp = ++yy_c_buf_p;
-				yy_current_state = yy_next_state;
-				goto yy_match;
-				}
-
-			else
-				{
-				yy_cp = yy_last_accepting_cpos;
-				yy_current_state = yy_last_accepting_state;
-				goto yy_find_action;
-				}
-			}
-
-		else switch ( yy_get_next_buffer() )
-			{
-			case EOB_ACT_END_OF_FILE:
-				{
-				yy_did_buffer_switch_on_eof = 0;
-
-				if ( yywrap() )
-					{
-					/* Note: because we've taken care in
-					 * yy_get_next_buffer() to have set up
-					 * yytext, we can now set up
-					 * yy_c_buf_p so that if some total
-					 * hoser (like flex itself) wants to
-					 * call the scanner after we return the
-					 * YY_NULL, it'll still work - another
-					 * YY_NULL will get returned.
-					 */
-					yy_c_buf_p = yytext_ptr + YY_MORE_ADJ;
-
-					yy_act = YY_STATE_EOF(YY_START);
-					goto do_action;
-					}
-
-				else
-					{
-					if ( ! yy_did_buffer_switch_on_eof )
-						YY_NEW_FILE;
-					}
-				break;
-				}
-
-			case EOB_ACT_CONTINUE_SCAN:
-				yy_c_buf_p =
-					yytext_ptr + yy_amount_of_matched_text;
-
-				yy_current_state = yy_get_previous_state();
-
-				yy_cp = yy_c_buf_p;
-				yy_bp = yytext_ptr + YY_MORE_ADJ;
-				goto yy_match;
-
-			case EOB_ACT_LAST_MATCH:
-				yy_c_buf_p =
-				&yy_current_buffer->yy_ch_buf[yy_n_chars];
-
-				yy_current_state = yy_get_previous_state();
-
-				yy_cp = yy_c_buf_p;
-				yy_bp = yytext_ptr + YY_MORE_ADJ;
-				goto yy_find_action;
-			}
-		break;
-		}
-
-	default:
-		YY_FATAL_ERROR(
-			"fatal flex scanner internal error--no action found" );
-	} /* end of action switch */
-		} /* end of scanning one token */
-	} /* end of yylex */
-
-
-/* yy_get_next_buffer - try to read in a new buffer
- *
- * Returns a code representing an action:
- *	EOB_ACT_LAST_MATCH -
- *	EOB_ACT_CONTINUE_SCAN - continue scanning from current position
- *	EOB_ACT_END_OF_FILE - end of file
- */
-
-static int yy_get_next_buffer()
-	{
-	register char *dest = yy_current_buffer->yy_ch_buf;
-	register char *source = yytext_ptr;
-	register int number_to_move, i;
-	int ret_val;
-
-	if ( yy_c_buf_p > &yy_current_buffer->yy_ch_buf[yy_n_chars + 1] )
-		YY_FATAL_ERROR(
-		"fatal flex scanner internal error--end of buffer missed" );
-
-	if ( yy_current_buffer->yy_fill_buffer == 0 )
-		{ /* Don't try to fill the buffer, so this is an EOF. */
-		if ( yy_c_buf_p - yytext_ptr - YY_MORE_ADJ == 1 )
-			{
-			/* We matched a single character, the EOB, so
-			 * treat this as a final EOF.
-			 */
-			return EOB_ACT_END_OF_FILE;
-			}
-
-		else
-			{
-			/* We matched some text prior to the EOB, first
-			 * process it.
-			 */
-			return EOB_ACT_LAST_MATCH;
-			}
-		}
-
-	/* Try to read more data. */
-
-	/* First move last chars to start of buffer. */
-	number_to_move = (int) (yy_c_buf_p - yytext_ptr) - 1;
-
-	for ( i = 0; i < number_to_move; ++i )
-		*(dest++) = *(source++);
-
-	if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_EOF_PENDING )
-		/* don't do the read, it's not guaranteed to return an EOF,
-		 * just force an EOF
-		 */
-		yy_current_buffer->yy_n_chars = yy_n_chars = 0;
-
-	else
-		{
-		int num_to_read =
-			yy_current_buffer->yy_buf_size - number_to_move - 1;
-
-		while ( num_to_read <= 0 )
-			{ /* Not enough room in the buffer - grow it. */
-#ifdef YY_USES_REJECT
-			YY_FATAL_ERROR(
-"input buffer overflow, can't enlarge buffer because scanner uses REJECT" );
-#else
-
-			/* just a shorter name for the current buffer */
-			YY_BUFFER_STATE b = yy_current_buffer;
-
-			int yy_c_buf_p_offset =
-				(int) (yy_c_buf_p - b->yy_ch_buf);
-
-			if ( b->yy_is_our_buffer )
-				{
-				int new_size = b->yy_buf_size * 2;
-
-				if ( new_size <= 0 )
-					b->yy_buf_size += b->yy_buf_size / 8;
-				else
-					b->yy_buf_size *= 2;
-
-				b->yy_ch_buf = (char *)
-					/* Include room in for 2 EOB chars. */
-					yy_flex_realloc( (void *) b->yy_ch_buf,
-							 b->yy_buf_size + 2 );
-				}
-			else
-				/* Can't grow it, we don't own it. */
-				b->yy_ch_buf = 0;
-
-			if ( ! b->yy_ch_buf )
-				YY_FATAL_ERROR(
-				"fatal error - scanner input buffer overflow" );
-
-			yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset];
-
-			num_to_read = yy_current_buffer->yy_buf_size -
-						number_to_move - 1;
-#endif
-			}
-
-		if ( num_to_read > YY_READ_BUF_SIZE )
-			num_to_read = YY_READ_BUF_SIZE;
-
-		/* Read in more data. */
-		YY_INPUT( (&yy_current_buffer->yy_ch_buf[number_to_move]),
-			yy_n_chars, num_to_read );
-
-		yy_current_buffer->yy_n_chars = yy_n_chars;
-		}
-
-	if ( yy_n_chars == 0 )
-		{
-		if ( number_to_move == YY_MORE_ADJ )
-			{
-			ret_val = EOB_ACT_END_OF_FILE;
-			yyrestart( yyin );
-			}
-
-		else
-			{
-			ret_val = EOB_ACT_LAST_MATCH;
-			yy_current_buffer->yy_buffer_status =
-				YY_BUFFER_EOF_PENDING;
-			}
-		}
-
-	else
-		ret_val = EOB_ACT_CONTINUE_SCAN;
-
-	yy_n_chars += number_to_move;
-	yy_current_buffer->yy_ch_buf[yy_n_chars] = YY_END_OF_BUFFER_CHAR;
-	yy_current_buffer->yy_ch_buf[yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR;
-
-	yytext_ptr = &yy_current_buffer->yy_ch_buf[0];
-
-	return ret_val;
-	}
-
-
-/* yy_get_previous_state - get the state just before the EOB char was reached */
-
-static yy_state_type yy_get_previous_state()
-	{
-	register yy_state_type yy_current_state;
-	register char *yy_cp;
-
-	yy_current_state = yy_start;
-
-	for ( yy_cp = yytext_ptr + YY_MORE_ADJ; yy_cp < yy_c_buf_p; ++yy_cp )
-		{
-		register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
-		if ( yy_accept[yy_current_state] )
-			{
-			yy_last_accepting_state = yy_current_state;
-			yy_last_accepting_cpos = yy_cp;
-			}
-		while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
-			{
-			yy_current_state = (int) yy_def[yy_current_state];
-			if ( yy_current_state >= 86 )
-				yy_c = yy_meta[(unsigned int) yy_c];
-			}
-		yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-		}
-
-	return yy_current_state;
-	}
-
-
-/* yy_try_NUL_trans - try to make a transition on the NUL character
- *
- * synopsis
- *	next_state = yy_try_NUL_trans( current_state );
- */
-
-#ifdef YY_USE_PROTOS
-static yy_state_type yy_try_NUL_trans( yy_state_type yy_current_state )
-#else
-static yy_state_type yy_try_NUL_trans( yy_current_state )
-yy_state_type yy_current_state;
-#endif
-	{
-	register int yy_is_jam;
-	register char *yy_cp = yy_c_buf_p;
-
-	register YY_CHAR yy_c = 1;
-	if ( yy_accept[yy_current_state] )
-		{
-		yy_last_accepting_state = yy_current_state;
-		yy_last_accepting_cpos = yy_cp;
-		}
-	while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
-		{
-		yy_current_state = (int) yy_def[yy_current_state];
-		if ( yy_current_state >= 86 )
-			yy_c = yy_meta[(unsigned int) yy_c];
-		}
-	yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-	yy_is_jam = (yy_current_state == 85);
-
-	return yy_is_jam ? 0 : yy_current_state;
-	}
-
-
-#ifndef YY_NO_UNPUT
-#ifdef YY_USE_PROTOS
-static void yyunput( int c, register char *yy_bp )
-#else
-static void yyunput( c, yy_bp )
-int c;
-register char *yy_bp;
-#endif
-	{
-	register char *yy_cp = yy_c_buf_p;
-
-	/* undo effects of setting up yytext */
-	*yy_cp = yy_hold_char;
-
-	if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
-		{ /* need to shift things up to make room */
-		/* +2 for EOB chars. */
-		register int number_to_move = yy_n_chars + 2;
-		register char *dest = &yy_current_buffer->yy_ch_buf[
-					yy_current_buffer->yy_buf_size + 2];
-		register char *source =
-				&yy_current_buffer->yy_ch_buf[number_to_move];
-
-		while ( source > yy_current_buffer->yy_ch_buf )
-			*--dest = *--source;
-
-		yy_cp += (int) (dest - source);
-		yy_bp += (int) (dest - source);
-		yy_current_buffer->yy_n_chars =
-			yy_n_chars = yy_current_buffer->yy_buf_size;
-
-		if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
-			YY_FATAL_ERROR( "flex scanner push-back overflow" );
-		}
-
-	*--yy_cp = (char) c;
-
-
-	yytext_ptr = yy_bp;
-	yy_hold_char = *yy_cp;
-	yy_c_buf_p = yy_cp;
-	}
-#endif	/* ifndef YY_NO_UNPUT */
-
-
-#ifdef __cplusplus
-static int yyinput()
-#else
-static int input()
-#endif
-	{
-	int c;
-
-	*yy_c_buf_p = yy_hold_char;
-
-	if ( *yy_c_buf_p == YY_END_OF_BUFFER_CHAR )
-		{
-		/* yy_c_buf_p now points to the character we want to return.
-		 * If this occurs *before* the EOB characters, then it's a
-		 * valid NUL; if not, then we've hit the end of the buffer.
-		 */
-		if ( yy_c_buf_p < &yy_current_buffer->yy_ch_buf[yy_n_chars] )
-			/* This was really a NUL. */
-			*yy_c_buf_p = '\0';
-
-		else
-			{ /* need more input */
-			int offset = yy_c_buf_p - yytext_ptr;
-			++yy_c_buf_p;
-
-			switch ( yy_get_next_buffer() )
-				{
-				case EOB_ACT_LAST_MATCH:
-					/* This happens because yy_g_n_b()
-					 * sees that we've accumulated a
-					 * token and flags that we need to
-					 * try matching the token before
-					 * proceeding.  But for input(),
-					 * there's no matching to consider.
-					 * So convert the EOB_ACT_LAST_MATCH
-					 * to EOB_ACT_END_OF_FILE.
-					 */
-
-					/* Reset buffer status. */
-					yyrestart( yyin );
-
-					/* fall through */
-
-				case EOB_ACT_END_OF_FILE:
-					{
-					if ( yywrap() )
-						return EOF;
-
-					if ( ! yy_did_buffer_switch_on_eof )
-						YY_NEW_FILE;
-#ifdef __cplusplus
-					return yyinput();
-#else
-					return input();
-#endif
-					}
-
-				case EOB_ACT_CONTINUE_SCAN:
-					yy_c_buf_p = yytext_ptr + offset;
-					break;
-				}
-			}
-		}
-
-	c = *(unsigned char *) yy_c_buf_p;	/* cast for 8-bit char's */
-	*yy_c_buf_p = '\0';	/* preserve yytext */
-	yy_hold_char = *++yy_c_buf_p;
-
-
-	return c;
-	}
-
-
-#ifdef YY_USE_PROTOS
-void yyrestart( FILE *input_file )
-#else
-void yyrestart( input_file )
-FILE *input_file;
-#endif
-	{
-	if ( ! yy_current_buffer )
-		yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE );
-
-	yy_init_buffer( yy_current_buffer, input_file );
-	yy_load_buffer_state();
-	}
-
-
-#ifdef YY_USE_PROTOS
-void yy_switch_to_buffer( YY_BUFFER_STATE new_buffer )
-#else
-void yy_switch_to_buffer( new_buffer )
-YY_BUFFER_STATE new_buffer;
-#endif
-	{
-	if ( yy_current_buffer == new_buffer )
-		return;
-
-	if ( yy_current_buffer )
-		{
-		/* Flush out information for old buffer. */
-		*yy_c_buf_p = yy_hold_char;
-		yy_current_buffer->yy_buf_pos = yy_c_buf_p;
-		yy_current_buffer->yy_n_chars = yy_n_chars;
-		}
-
-	yy_current_buffer = new_buffer;
-	yy_load_buffer_state();
-
-	/* We don't actually know whether we did this switch during
-	 * EOF (yywrap()) processing, but the only time this flag
-	 * is looked at is after yywrap() is called, so it's safe
-	 * to go ahead and always set it.
-	 */
-	yy_did_buffer_switch_on_eof = 1;
-	}
-
-
-#ifdef YY_USE_PROTOS
-void yy_load_buffer_state( void )
-#else
-void yy_load_buffer_state()
-#endif
-	{
-	yy_n_chars = yy_current_buffer->yy_n_chars;
-	yytext_ptr = yy_c_buf_p = yy_current_buffer->yy_buf_pos;
-	yyin = yy_current_buffer->yy_input_file;
-	yy_hold_char = *yy_c_buf_p;
-	}
-
-
-#ifdef YY_USE_PROTOS
-YY_BUFFER_STATE yy_create_buffer( FILE *file, int size )
-#else
-YY_BUFFER_STATE yy_create_buffer( file, size )
-FILE *file;
-int size;
-#endif
-	{
-	YY_BUFFER_STATE b;
-
-	b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) );
-	if ( ! b )
-		YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
-
-	b->yy_buf_size = size;
-
-	/* yy_ch_buf has to be 2 characters longer than the size given because
-	 * we need to put in 2 end-of-buffer characters.
-	 */
-	b->yy_ch_buf = (char *) yy_flex_alloc( b->yy_buf_size + 2 );
-	if ( ! b->yy_ch_buf )
-		YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
-
-	b->yy_is_our_buffer = 1;
-
-	yy_init_buffer( b, file );
-
-	return b;
-	}
-
-
-#ifdef YY_USE_PROTOS
-void yy_delete_buffer( YY_BUFFER_STATE b )
-#else
-void yy_delete_buffer( b )
-YY_BUFFER_STATE b;
-#endif
-	{
-	if ( ! b )
-		return;
-
-	if ( b == yy_current_buffer )
-		yy_current_buffer = (YY_BUFFER_STATE) 0;
-
-	if ( b->yy_is_our_buffer )
-		yy_flex_free( (void *) b->yy_ch_buf );
-
-	yy_flex_free( (void *) b );
-	}
-
-
-#ifndef YY_ALWAYS_INTERACTIVE
-#ifndef YY_NEVER_INTERACTIVE
-extern int isatty YY_PROTO(( int ));
-#endif
-#endif
-
-#ifdef YY_USE_PROTOS
-void yy_init_buffer( YY_BUFFER_STATE b, FILE *file )
-#else
-void yy_init_buffer( b, file )
-YY_BUFFER_STATE b;
-FILE *file;
-#endif
-
-
-	{
-	yy_flush_buffer( b );
-
-	b->yy_input_file = file;
-	b->yy_fill_buffer = 1;
-
-#if YY_ALWAYS_INTERACTIVE
-	b->yy_is_interactive = 1;
-#else
-#if YY_NEVER_INTERACTIVE
-	b->yy_is_interactive = 0;
-#else
-	b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
-#endif
-#endif
-	}
-
-
-#ifdef YY_USE_PROTOS
-void yy_flush_buffer( YY_BUFFER_STATE b )
-#else
-void yy_flush_buffer( b )
-YY_BUFFER_STATE b;
-#endif
-
-	{
-	if ( ! b )
-		return;
-
-	b->yy_n_chars = 0;
-
-	/* We always need two end-of-buffer characters.  The first causes
-	 * a transition to the end-of-buffer state.  The second causes
-	 * a jam in that state.
-	 */
-	b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
-	b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
-
-	b->yy_buf_pos = &b->yy_ch_buf[0];
-
-	b->yy_at_bol = 1;
-	b->yy_buffer_status = YY_BUFFER_NEW;
-
-	if ( b == yy_current_buffer )
-		yy_load_buffer_state();
-	}
-
-
-#ifndef YY_NO_SCAN_BUFFER
-#ifdef YY_USE_PROTOS
-YY_BUFFER_STATE yy_scan_buffer( char *base, yy_size_t size )
-#else
-YY_BUFFER_STATE yy_scan_buffer( base, size )
-char *base;
-yy_size_t size;
-#endif
-	{
-	YY_BUFFER_STATE b;
-
-	if ( size < 2 ||
-	     base[size-2] != YY_END_OF_BUFFER_CHAR ||
-	     base[size-1] != YY_END_OF_BUFFER_CHAR )
-		/* They forgot to leave room for the EOB's. */
-		return 0;
-
-	b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) );
-	if ( ! b )
-		YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );
-
-	b->yy_buf_size = size - 2;	/* "- 2" to take care of EOB's */
-	b->yy_buf_pos = b->yy_ch_buf = base;
-	b->yy_is_our_buffer = 0;
-	b->yy_input_file = 0;
-	b->yy_n_chars = b->yy_buf_size;
-	b->yy_is_interactive = 0;
-	b->yy_at_bol = 1;
-	b->yy_fill_buffer = 0;
-	b->yy_buffer_status = YY_BUFFER_NEW;
-
-	yy_switch_to_buffer( b );
-
-	return b;
-	}
-#endif
-
-
-#ifndef YY_NO_SCAN_STRING
-#ifdef YY_USE_PROTOS
-YY_BUFFER_STATE yy_scan_string( yyconst char *yy_str )
-#else
-YY_BUFFER_STATE yy_scan_string( yy_str )
-yyconst char *yy_str;
-#endif
-	{
-	int len;
-	for ( len = 0; yy_str[len]; ++len )
-		;
-
-	return yy_scan_bytes( yy_str, len );
-	}
-#endif
-
-
-#ifndef YY_NO_SCAN_BYTES
-#ifdef YY_USE_PROTOS
-YY_BUFFER_STATE yy_scan_bytes( yyconst char *bytes, int len )
-#else
-YY_BUFFER_STATE yy_scan_bytes( bytes, len )
-yyconst char *bytes;
-int len;
-#endif
-	{
-	YY_BUFFER_STATE b;
-	char *buf;
-	yy_size_t n;
-	int i;
-
-	/* Get memory for full buffer, including space for trailing EOB's. */
-	n = len + 2;
-	buf = (char *) yy_flex_alloc( n );
-	if ( ! buf )
-		YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
-
-	for ( i = 0; i < len; ++i )
-		buf[i] = bytes[i];
-
-	buf[len] = buf[len+1] = YY_END_OF_BUFFER_CHAR;
-
-	b = yy_scan_buffer( buf, n );
-	if ( ! b )
-		YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" );
-
-	/* It's okay to grow etc. this buffer, and we should throw it
-	 * away when we're done.
-	 */
-	b->yy_is_our_buffer = 1;
-
-	return b;
-	}
-#endif
-
-
-#ifndef YY_NO_PUSH_STATE
-#ifdef YY_USE_PROTOS
-static void yy_push_state( int new_state )
-#else
-static void yy_push_state( new_state )
-int new_state;
-#endif
-	{
-	if ( yy_start_stack_ptr >= yy_start_stack_depth )
-		{
-		yy_size_t new_size;
-
-		yy_start_stack_depth += YY_START_STACK_INCR;
-		new_size = yy_start_stack_depth * sizeof( int );
-
-		if ( ! yy_start_stack )
-			yy_start_stack = (int *) yy_flex_alloc( new_size );
-
-		else
-			yy_start_stack = (int *) yy_flex_realloc(
-					(void *) yy_start_stack, new_size );
-
-		if ( ! yy_start_stack )
-			YY_FATAL_ERROR(
-			"out of memory expanding start-condition stack" );
-		}
-
-	yy_start_stack[yy_start_stack_ptr++] = YY_START;
-
-	BEGIN(new_state);
-	}
-#endif
-
-
-#ifndef YY_NO_POP_STATE
-static void yy_pop_state()
-	{
-	if ( --yy_start_stack_ptr < 0 )
-		YY_FATAL_ERROR( "start-condition stack underflow" );
-
-	BEGIN(yy_start_stack[yy_start_stack_ptr]);
-	}
-#endif
-
-
-#ifndef YY_NO_TOP_STATE
-static int yy_top_state()
-	{
-	return yy_start_stack[yy_start_stack_ptr - 1];
-	}
-#endif
-
-#ifndef YY_EXIT_FAILURE
-#define YY_EXIT_FAILURE 2
-#endif
-
-#ifdef YY_USE_PROTOS
-static void yy_fatal_error( yyconst char msg[] )
-#else
-static void yy_fatal_error( msg )
-char msg[];
-#endif
-	{
-	(void) fprintf( stderr, "%s\n", msg );
-	exit( YY_EXIT_FAILURE );
-	}
-
-
-
-/* Redefine yyless() so it works in section 3 code. */
-
-#undef yyless
-#define yyless(n) \
-	do \
-		{ \
-		/* Undo effects of setting up yytext. */ \
-		yytext[yyleng] = yy_hold_char; \
-		yy_c_buf_p = yytext + n; \
-		yy_hold_char = *yy_c_buf_p; \
-		*yy_c_buf_p = '\0'; \
-		yyleng = n; \
-		} \
-	while ( 0 )
-
-
-/* Internal utility routines. */
-
-#ifndef yytext_ptr
-#ifdef YY_USE_PROTOS
-static void yy_flex_strncpy( char *s1, yyconst char *s2, int n )
-#else
-static void yy_flex_strncpy( s1, s2, n )
-char *s1;
-yyconst char *s2;
-int n;
-#endif
-	{
-	register int i;
-	for ( i = 0; i < n; ++i )
-		s1[i] = s2[i];
-	}
-#endif
-
-#ifdef YY_NEED_STRLEN
-#ifdef YY_USE_PROTOS
-static int yy_flex_strlen( yyconst char *s )
-#else
-static int yy_flex_strlen( s )
-yyconst char *s;
-#endif
-	{
-	register int n;
-	for ( n = 0; s[n]; ++n )
-		;
-
-	return n;
-	}
-#endif
-
-
-#ifdef YY_USE_PROTOS
-static void *yy_flex_alloc( yy_size_t size )
-#else
-static void *yy_flex_alloc( size )
-yy_size_t size;
-#endif
-	{
-	return (void *) malloc( size );
-	}
-
-#ifdef YY_USE_PROTOS
-static void *yy_flex_realloc( void *ptr, yy_size_t size )
-#else
-static void *yy_flex_realloc( ptr, size )
-void *ptr;
-yy_size_t size;
-#endif
-	{
-	/* The cast to (char *) in the following accommodates both
-	 * implementations that use char* generic pointers, and those
-	 * that use void* generic pointers.  It works with the latter
-	 * because both ANSI C and C++ allow castless assignment from
-	 * any pointer type to void*, and deal with argument conversions
-	 * as though doing an assignment.
-	 */
-	return (void *) realloc( (char *) ptr, size );
-	}
-
-#ifdef YY_USE_PROTOS
-static void yy_flex_free( void *ptr )
-#else
-static void yy_flex_free( ptr )
-void *ptr;
-#endif
-	{
-	free( ptr );
-	}
-
-#if YY_MAIN
-int main()
-	{
-	yylex();
-	return 0;
-	}
-#endif
-#line 244 "ssl_expr_scan.l"
-
-
-int yyinput(char *buf, int max_size)
-{
-    int n;
-
-    if ((n = MIN(max_size, ssl_expr_info.inputbuf
-                         + ssl_expr_info.inputlen 
-                         - ssl_expr_info.inputptr)) <= 0)
-        return YY_NULL;
-    memcpy(buf, ssl_expr_info.inputptr, n);
-    ssl_expr_info.inputptr += n;
-    return n;
-}
-
diff --git a/modules/ssl/ssl_expr_scan.l b/modules/ssl/ssl_expr_scan.l
deleted file mode 100644
index 33dfe5e..0000000
--- a/modules/ssl/ssl_expr_scan.l
+++ /dev/null
@@ -1,258 +0,0 @@
-/*                      _             _ 
-**  _ __ ___   ___   __| |    ___ ___| |  
-** | '_ ` _ \ / _ \ / _` |   / __/ __| |  
-** | | | | | | (_) | (_| |   \__ \__ \ | mod_ssl - Apache Interface to OpenSSL
-** |_| |_| |_|\___/ \__,_|___|___/___/_| http://www.modssl.org/
-**                      |_____|         
-**  ssl_expr_scan.l
-**  Expression Scanner
-*/
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- */
-                             /* ``Killing for peace is 
-                                  like fucking for virginity.''
-                                             -- Unknown  */
-
-/*  _________________________________________________________________
-**
-**  Expression Scanner
-**  _________________________________________________________________
-*/
-
-%{
-#include "mod_ssl.h"
-
-#include "ssl_expr_parse.h"
-
-#define YY_NO_UNPUT 1
-int yyinput(char *buf, int max_size);
-
-#undef  YY_INPUT
-#define YY_INPUT(buf,result,max_size) \
-    (result = yyinput(buf, max_size))
-
-#define MAX_STR_LEN 2048
-%}
-
-%pointer
-/* %option stack */
-%option never-interactive
-%option noyywrap
-%x str
-%x regex regex_flags
-
-%%
-  
-  char  caStr[MAX_STR_LEN];
-  char *cpStr = NULL;
-  char  caRegex[MAX_STR_LEN];
-  char *cpRegex = NULL;
-  char  cRegexDel = NUL;
-
- /*
-  * Whitespaces
-  */
-[ \t\n]+ { 
-    /* NOP */
-}
-
- /*
-  * C-style strings ("...")
-  */
-\" {
-    cpStr = caStr;
-    BEGIN(str);
-}
-<str>\" {
-    BEGIN(INITIAL);
-    *cpStr = NUL;
-    yylval.cpVal = apr_pstrdup(ssl_expr_info.pool, caStr);
-    return T_STRING;
-}
-<str>\n {
-    yyerror("Unterminated string");
-}
-<str>\\[0-7]{1,3} {
-    int result;
-
-    (void)sscanf(yytext+1, "%o", &result);
-    if (result > 0xff)
-        yyerror("Escape sequence out of bound");
-    else
-        *cpStr++ = result;
-}
-<str>\\[0-9]+ {
-    yyerror("Bad escape sequence");
-}
-<str>\\n { *cpStr++ = '\n'; }
-<str>\\r { *cpStr++ = '\r'; }
-<str>\\t { *cpStr++ = '\t'; }
-<str>\\b { *cpStr++ = '\b'; }
-<str>\\f { *cpStr++ = '\f'; }
-<str>\\(.|\n) {
-    *cpStr++ = yytext[1];
-}
-<str>[^\\\n\"]+ {
-    char *cp = yytext;
-    while (*cp != NUL)
-        *cpStr++ = *cp++;
-}
-<str>. {
-    *cpStr++ = yytext[1];
-}
-
- /*
-  * Regular Expression
-  */
-"m". {
-    cRegexDel = yytext[1];
-    cpRegex = caRegex;
-    BEGIN(regex);
-}
-<regex>.|\n {
-    if (yytext[0] == cRegexDel) {
-        *cpRegex = NUL;
-        BEGIN(regex_flags);
-    }
-    else {
-        *cpRegex++ = yytext[0];
-    }
-}
-<regex_flags>i {
-    yylval.cpVal = apr_pstrdup(ssl_expr_info.pool, caRegex);
-    BEGIN(INITIAL);
-    return T_REGEX_I;
-}
-<regex_flags>.|\n {
-    yylval.cpVal = apr_pstrdup(ssl_expr_info.pool, caRegex);
-    yyless(0);
-    BEGIN(INITIAL);
-    return T_REGEX;
-}
-<regex_flags><<EOF>> {
-    yylval.cpVal = apr_pstrdup(ssl_expr_info.pool, caRegex);
-    BEGIN(INITIAL);
-    return T_REGEX;
-}
-
- /*
-  * Operators
-  */
-"eq"  { return T_OP_EQ; }
-"=="  { return T_OP_EQ; }
-"ne"  { return T_OP_NE; }
-"!="  { return T_OP_NE; }
-"lt"  { return T_OP_LT; }
-"<"   { return T_OP_LT; }
-"le"  { return T_OP_LE; }
-"<="  { return T_OP_LE; }
-"gt"  { return T_OP_GT; }
-">"   { return T_OP_GT; }
-"ge"  { return T_OP_GE; }
-">="  { return T_OP_GE; }
-"=~"  { return T_OP_REG; }
-"!~"  { return T_OP_NRE; }
-"and" { return T_OP_AND; }
-"&&"  { return T_OP_AND; }
-"or"  { return T_OP_OR; }
-"||"  { return T_OP_OR; }
-"not" { return T_OP_NOT; }
-"!"   { return T_OP_NOT; }
-"in"  { return T_OP_IN; }
-
- /*
-  * Functions
-  */
-"file" { return T_FUNC_FILE; }
-
- /*
-  * Specials
-  */
-"true"  { return T_TRUE; }
-"false" { return T_FALSE; }
-
- /*
-  * Digits
-  */
-[0-9]+ {
-    yylval.cpVal = apr_pstrdup(ssl_expr_info.pool, yytext);
-    return T_DIGIT;
-}
-
- /*
-  * Identifiers
-  */
-[a-zA-Z][a-zA-Z0-9_:-]* {
-    yylval.cpVal = apr_pstrdup(ssl_expr_info.pool, yytext);
-    return T_ID;
-}
-
- /*
-  * Anything else is returned as is...
-  */
-.|\n { 
-    return yytext[0];
-}
-
-%%
-
-int yyinput(char *buf, int max_size)
-{
-    int n;
-
-    if ((n = MIN(max_size, ssl_expr_info.inputbuf
-                         + ssl_expr_info.inputlen 
-                         - ssl_expr_info.inputptr)) <= 0)
-        return YY_NULL;
-    memcpy(buf, ssl_expr_info.inputptr, n);
-    ssl_expr_info.inputptr += n;
-    return n;
-}
-
diff --git a/modules/ssl/ssl_scache.c b/modules/ssl/ssl_scache.c
deleted file mode 100644
index 839add7..0000000
--- a/modules/ssl/ssl_scache.c
+++ /dev/null
@@ -1,221 +0,0 @@
-/*                      _             _
-**  _ __ ___   ___   __| |    ___ ___| |  mod_ssl
-** | '_ ` _ \ / _ \ / _` |   / __/ __| |  Apache Interface to OpenSSL
-** | | | | | | (_) | (_| |   \__ \__ \ |  www.modssl.org
-** |_| |_| |_|\___/ \__,_|___|___/___/_|  ftp.modssl.org
-**                      |_____|
-**  ssl_scache.c
-**  Session Cache Abstraction
-*/
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- */
-                             /* ``Open-Source Software: generous
-                                  programmers from around the world all
-                                  join forces to help you shoot
-                                  yourself in the foot for free.''
-                                                 -- Unknown         */
-#include "mod_ssl.h"
-
-/*  _________________________________________________________________
-**
-**  Session Cache: Common Abstraction Layer
-**  _________________________________________________________________
-*/
-
-void ssl_scache_init(server_rec *s, apr_pool_t *p)
-{
-    SSLModConfigRec *mc = myModConfig(s);
-
-    if (mc->nSessionCacheMode == SSL_SCMODE_DBM)
-        ssl_scache_dbm_init(s, p);
-    else if ((mc->nSessionCacheMode == SSL_SCMODE_SHMHT) ||
-             (mc->nSessionCacheMode == SSL_SCMODE_SHMCB)) {
-        void *data;
-        const char *userdata_key = "ssl_scache_init";
-
-        apr_pool_userdata_get(&data, userdata_key, s->process->pool);
-        if (!data) {
-            apr_pool_userdata_setn((const void *)1, userdata_key,
-                                   apr_pool_cleanup_null, s->process->pool);
-            return;
-        }
-        if (mc->nSessionCacheMode == SSL_SCMODE_SHMHT)
-            ssl_scache_shmht_init(s, p);
-        else if (mc->nSessionCacheMode == SSL_SCMODE_SHMCB)
-            ssl_scache_shmcb_init(s, p);
-    }
-    return;
-}
-
-void ssl_scache_kill(server_rec *s)
-{
-    SSLModConfigRec *mc = myModConfig(s);
-
-    if (mc->nSessionCacheMode == SSL_SCMODE_DBM)
-        ssl_scache_dbm_kill(s);
-    else if (mc->nSessionCacheMode == SSL_SCMODE_SHMHT)
-        ssl_scache_shmht_kill(s);
-    else if (mc->nSessionCacheMode == SSL_SCMODE_SHMCB)
-        ssl_scache_shmcb_kill(s);
-    return;
-}
-
-BOOL ssl_scache_store(server_rec *s, UCHAR *id, int idlen, time_t expiry, SSL_SESSION *sess)
-{
-    SSLModConfigRec *mc = myModConfig(s);
-    BOOL rv = FALSE;
-
-    if (mc->nSessionCacheMode == SSL_SCMODE_DBM)
-        rv = ssl_scache_dbm_store(s, id, idlen, expiry, sess);
-    else if (mc->nSessionCacheMode == SSL_SCMODE_SHMHT)
-        rv = ssl_scache_shmht_store(s, id, idlen, expiry, sess);
-    else if (mc->nSessionCacheMode == SSL_SCMODE_SHMCB)
-        rv = ssl_scache_shmcb_store(s, id, idlen, expiry, sess);
-    return rv;
-}
-
-SSL_SESSION *ssl_scache_retrieve(server_rec *s, UCHAR *id, int idlen)
-{
-    SSLModConfigRec *mc = myModConfig(s);
-    SSL_SESSION *sess = NULL;
-
-    if (mc->nSessionCacheMode == SSL_SCMODE_DBM)
-        sess = ssl_scache_dbm_retrieve(s, id, idlen);
-    else if (mc->nSessionCacheMode == SSL_SCMODE_SHMHT)
-        sess = ssl_scache_shmht_retrieve(s, id, idlen);
-    else if (mc->nSessionCacheMode == SSL_SCMODE_SHMCB)
-        sess = ssl_scache_shmcb_retrieve(s, id, idlen);
-    return sess;
-}
-
-void ssl_scache_remove(server_rec *s, UCHAR *id, int idlen)
-{
-    SSLModConfigRec *mc = myModConfig(s);
-
-    if (mc->nSessionCacheMode == SSL_SCMODE_DBM)
-        ssl_scache_dbm_remove(s, id, idlen);
-    else if (mc->nSessionCacheMode == SSL_SCMODE_SHMHT)
-        ssl_scache_shmht_remove(s, id, idlen);
-    else if (mc->nSessionCacheMode == SSL_SCMODE_SHMCB)
-        ssl_scache_shmcb_remove(s, id, idlen);
-    return;
-}
-
-void ssl_scache_status(server_rec *s, apr_pool_t *p, void (*func)(char *, void *), void *arg)
-{
-    SSLModConfigRec *mc = myModConfig(s);
-
-    if (mc->nSessionCacheMode == SSL_SCMODE_DBM)
-        ssl_scache_dbm_status(s, p, func, arg);
-    else if (mc->nSessionCacheMode == SSL_SCMODE_SHMHT)
-        ssl_scache_shmht_status(s, p, func, arg);
-    else if (mc->nSessionCacheMode == SSL_SCMODE_SHMCB)
-        ssl_scache_shmcb_status(s, p, func, arg);
-    return;
-}
-
-void ssl_scache_expire(server_rec *s)
-{
-    SSLModConfigRec *mc = myModConfig(s);
-
-    if (mc->nSessionCacheMode == SSL_SCMODE_DBM)
-        ssl_scache_dbm_expire(s);
-    else if (mc->nSessionCacheMode == SSL_SCMODE_SHMHT)
-        ssl_scache_shmht_expire(s);
-    else if (mc->nSessionCacheMode == SSL_SCMODE_SHMCB)
-        ssl_scache_shmcb_expire(s);
-    return;
-}
-
-/*  _________________________________________________________________
-**
-**  SSL Extension to mod_status
-**  _________________________________________________________________
-*/
-#if 0 /* NOT YET */
-static void ssl_ext_ms_display(request_rec *, int, int);
-
-void ssl_scache_status_register(apr_pool_t *p)
-{
-    /* XXX point mod_status to this update, when it grows the opt fn */
-#if 0
-    ap_hook_register("ap::mod_status::display", ssl_ext_ms_display, AP_HOOK_NOCTX);
-#endif
-    return;
-}
-
-static void ssl_ext_ms_display_cb(char *str, void *_r)
-{
-    request_rec *r = (request_rec *)_r;
-    if (str != NULL)
-        ap_rputs(str, r);
-    return;
-}
-
-static void ssl_ext_ms_display(request_rec *r, int no_table_report, int short_report)
-{
-    SSLSrvConfigRec *sc = mySrvConfig(r->server);
-
-    if (sc == NULL)
-        return;
-    if (short_report)
-        return;
-    ap_rputs("<hr>\n", r);
-    ap_rputs("<table cellspacing=0 cellpadding=0>\n", r);
-    ap_rputs("<tr><td bgcolor=\"#000000\">\n", r);
-    ap_rputs("<b><font color=\"#ffffff\" face=\"Arial,Helvetica\">SSL/TLS Session Cache Status:</font></b>\r", r);
-    ap_rputs("</td></tr>\n", r);
-    ap_rputs("<tr><td bgcolor=\"#ffffff\">\n", r);
-    ssl_scache_status(r->server, r->pool, ssl_ext_ms_display_cb, r);
-    ap_rputs("</td></tr>\n", r);
-    ap_rputs("</table>\n", r);
-    return;
-}
-#endif
diff --git a/modules/ssl/ssl_scache_dbm.c b/modules/ssl/ssl_scache_dbm.c
deleted file mode 100644
index fb382b7..0000000
--- a/modules/ssl/ssl_scache_dbm.c
+++ /dev/null
@@ -1,456 +0,0 @@
-/*                      _             _
-**  _ __ ___   ___   __| |    ___ ___| |  mod_ssl
-** | '_ ` _ \ / _ \ / _` |   / __/ __| |  Apache Interface to OpenSSL
-** | | | | | | (_) | (_| |   \__ \__ \ |  www.modssl.org
-** |_| |_| |_|\___/ \__,_|___|___/___/_|  ftp.modssl.org
-**                      |_____|
-**  ssl_scache_dbm.c
-**  Session Cache via DBM
-*/
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- */
-
-#include "mod_ssl.h"
-
-void ssl_scache_dbm_init(server_rec *s, apr_pool_t *p)
-{
-    SSLModConfigRec *mc = myModConfig(s);
-    apr_dbm_t *dbm;
-
-    /* for the DBM we need the data file */
-    if (mc->szSessionCacheDataFile == NULL) {
-        ssl_log(s, SSL_LOG_ERROR, "SSLSessionCache required");
-        ssl_die();
-    }
-
-    /* open it once to create it and to make sure it _can_ be created */
-    ssl_mutex_on(s);
-    if (apr_dbm_open(&dbm, mc->szSessionCacheDataFile,
-	    APR_DBM_RWCREATE, SSL_DBM_FILE_MODE, mc->pPool) != APR_SUCCESS) {
-        ssl_log(s, SSL_LOG_ERROR|SSL_ADD_ERRNO,
-                "Cannot create SSLSessionCache DBM file `%s'",
-                mc->szSessionCacheDataFile);
-        ssl_mutex_off(s);
-        return;
-    }
-    apr_dbm_close(dbm);
-
-#if !defined(OS2) && !defined(WIN32) && !defined(BEOS) && !defined(NETWARE)
-    /*
-     * We have to make sure the Apache child processes have access to
-     * the DBM file. But because there are brain-dead platforms where we
-     * cannot exactly determine the suffixes we try all possibilities.
-     */
-    if (geteuid() == 0 /* is superuser */) {
-        chown(mc->szSessionCacheDataFile, unixd_config.user_id, -1 /* no gid change */);
-        if (chown(apr_pstrcat(p, mc->szSessionCacheDataFile, SSL_DBM_FILE_SUFFIX_DIR, NULL),
-                  unixd_config.user_id, -1) == -1) {
-            if (chown(apr_pstrcat(p, mc->szSessionCacheDataFile, ".db", NULL),
-                      unixd_config.user_id, -1) == -1)
-                chown(apr_pstrcat(p, mc->szSessionCacheDataFile, ".dir", NULL),
-                      unixd_config.user_id, -1);
-        }
-        if (chown(apr_pstrcat(p, mc->szSessionCacheDataFile, SSL_DBM_FILE_SUFFIX_PAG, NULL),
-                  unixd_config.user_id, -1) == -1) {
-            if (chown(apr_pstrcat(p, mc->szSessionCacheDataFile, ".db", NULL),
-                      unixd_config.user_id, -1) == -1)
-                chown(apr_pstrcat(p, mc->szSessionCacheDataFile, ".pag", NULL),
-                      unixd_config.user_id, -1);
-        }
-    }
-#endif
-    ssl_mutex_off(s);
-    ssl_scache_dbm_expire(s);
-    return;
-}
-
-void ssl_scache_dbm_kill(server_rec *s)
-{
-    SSLModConfigRec *mc = myModConfig(s);
-    apr_pool_t *p;
-
-    apr_pool_sub_make(&p, mc->pPool, NULL);
-    if (p != NULL) {
-        /* the correct way */
-        unlink(apr_pstrcat(p, mc->szSessionCacheDataFile, SSL_DBM_FILE_SUFFIX_DIR, NULL));
-        unlink(apr_pstrcat(p, mc->szSessionCacheDataFile, SSL_DBM_FILE_SUFFIX_PAG, NULL));
-        /* the additional ways to be sure */
-        unlink(apr_pstrcat(p, mc->szSessionCacheDataFile, ".dir", NULL));
-        unlink(apr_pstrcat(p, mc->szSessionCacheDataFile, ".pag", NULL));
-        unlink(apr_pstrcat(p, mc->szSessionCacheDataFile, ".db", NULL));
-        unlink(mc->szSessionCacheDataFile);
-        apr_pool_destroy(p);
-    }
-    return;
-}
-
-BOOL ssl_scache_dbm_store(server_rec *s, UCHAR *id, int idlen, time_t expiry, SSL_SESSION *sess)
-{
-    SSLModConfigRec *mc = myModConfig(s);
-    apr_dbm_t *dbm;
-    apr_datum_t dbmkey;
-    apr_datum_t dbmval;
-    UCHAR ucaData[SSL_SESSION_MAX_DER];
-    int nData;
-    UCHAR *ucp;
-
-    /* streamline session data */
-    if ((nData = i2d_SSL_SESSION(sess, NULL)) > sizeof(ucaData))
-        return FALSE;
-    ucp = ucaData;
-    i2d_SSL_SESSION(sess, &ucp);
-
-    /* be careful: do not try to store too much bytes in a DBM file! */
-#ifdef PAIRMAX
-    if ((idlen + nData) >= PAIRMAX)
-        return FALSE;
-#else
-    if ((idlen + nData) >= 950 /* at least less than approx. 1KB */)
-        return FALSE;
-#endif
-
-    /* create DBM key */
-    dbmkey.dptr  = (char *)id;
-    dbmkey.dsize = idlen;
-
-    /* create DBM value */
-    dbmval.dsize = sizeof(time_t) + nData;
-    dbmval.dptr  = (char *)malloc(dbmval.dsize);
-    if (dbmval.dptr == NULL)
-        return FALSE;
-    memcpy((char *)dbmval.dptr, &expiry, sizeof(time_t));
-    memcpy((char *)dbmval.dptr+sizeof(time_t), ucaData, nData);
-
-    /* and store it to the DBM file */
-    ssl_mutex_on(s);
-    if (apr_dbm_open(&dbm, mc->szSessionCacheDataFile,
-	    APR_DBM_RWCREATE, SSL_DBM_FILE_MODE, mc->pPool) != APR_SUCCESS) {
-        ssl_log(s, SSL_LOG_ERROR|SSL_ADD_ERRNO,
-                "Cannot open SSLSessionCache DBM file `%s' for writing (store)",
-                mc->szSessionCacheDataFile);
-        ssl_mutex_off(s);
-        free(dbmval.dptr);
-        return FALSE;
-    }
-    if (apr_dbm_store(dbm, dbmkey, dbmval) != APR_SUCCESS) {
-        ssl_log(s, SSL_LOG_ERROR|SSL_ADD_ERRNO,
-                "Cannot store SSL session to DBM file `%s'",
-                mc->szSessionCacheDataFile);
-        apr_dbm_close(dbm);
-        ssl_mutex_off(s);
-        free(dbmval.dptr);
-        return FALSE;
-    }
-    apr_dbm_close(dbm);
-    ssl_mutex_off(s);
-
-    /* free temporary buffers */
-    free(dbmval.dptr);
-
-    /* allow the regular expiring to occur */
-    ssl_scache_dbm_expire(s);
-
-    return TRUE;
-}
-
-SSL_SESSION *ssl_scache_dbm_retrieve(server_rec *s, UCHAR *id, int idlen)
-{
-    SSLModConfigRec *mc = myModConfig(s);
-    apr_dbm_t *dbm;
-    apr_datum_t dbmkey;
-    apr_datum_t dbmval;
-    SSL_SESSION *sess = NULL;
-    UCHAR *ucpData;
-    int nData;
-    time_t expiry;
-    time_t now;
-    apr_status_t rc;
-
-    /* allow the regular expiring to occur */
-    ssl_scache_dbm_expire(s);
-
-    /* create DBM key and values */
-    dbmkey.dptr  = (char *)id;
-    dbmkey.dsize = idlen;
-
-    /* and fetch it from the DBM file 
-     * XXX: Should we open the dbm against r->pool so the cleanup will
-     * do the apr_dbm_close? This would make the code a bit cleaner.
-     */
-    if (apr_dbm_open(&dbm, mc->szSessionCacheDataFile,
-	    APR_DBM_RWCREATE, SSL_DBM_FILE_MODE, mc->pPool) != APR_SUCCESS) {
-        ssl_log(s, SSL_LOG_ERROR|SSL_ADD_ERRNO,
-                "Cannot open SSLSessionCache DBM file `%s' for reading (fetch)",
-                mc->szSessionCacheDataFile);
-        return NULL;
-    }
-    rc = apr_dbm_fetch(dbm, dbmkey, &dbmval);
-    if (rc != APR_SUCCESS) {
-        apr_dbm_close(dbm);
-        return NULL;
-    }
-    if (dbmval.dptr == NULL || dbmval.dsize <= sizeof(time_t)) {
-        apr_dbm_close(dbm);
-        return NULL;
-    }
-
-    /* parse resulting data */
-    nData = dbmval.dsize-sizeof(time_t);
-    ucpData = (UCHAR *)malloc(nData);
-    if (ucpData == NULL) {
-        apr_dbm_close(dbm);
-        return NULL;
-    }
-    memcpy(ucpData, (char *)dbmval.dptr+sizeof(time_t), nData);
-    memcpy(&expiry, dbmval.dptr, sizeof(time_t));
-
-    apr_dbm_close(dbm);
-
-    /* make sure the stuff is still not expired */
-    now = time(NULL);
-    if (expiry <= now) {
-        ssl_scache_dbm_remove(s, id, idlen);
-        return NULL;
-    }
-
-    /* unstreamed SSL_SESSION */
-    sess = d2i_SSL_SESSION(NULL, &ucpData, nData);
-
-    return sess;
-}
-
-void ssl_scache_dbm_remove(server_rec *s, UCHAR *id, int idlen)
-{
-    SSLModConfigRec *mc = myModConfig(s);
-    apr_dbm_t *dbm;
-    apr_datum_t dbmkey;
-
-    /* create DBM key and values */
-    dbmkey.dptr  = (char *)id;
-    dbmkey.dsize = idlen;
-
-    /* and delete it from the DBM file */
-    ssl_mutex_on(s);
-    if (apr_dbm_open(&dbm, mc->szSessionCacheDataFile,
-	    APR_DBM_RWCREATE, SSL_DBM_FILE_MODE, mc->pPool) != APR_SUCCESS) {
-        ssl_log(s, SSL_LOG_ERROR|SSL_ADD_ERRNO,
-                "Cannot open SSLSessionCache DBM file `%s' for writing (delete)",
-                mc->szSessionCacheDataFile);
-        ssl_mutex_off(s);
-        return;
-    }
-    apr_dbm_delete(dbm, dbmkey);
-    apr_dbm_close(dbm);
-    ssl_mutex_off(s);
-
-    return;
-}
-
-void ssl_scache_dbm_expire(server_rec *s)
-{
-    SSLModConfigRec *mc = myModConfig(s);
-    SSLSrvConfigRec *sc = mySrvConfig(s);
-    static time_t tLast = 0;
-    apr_dbm_t *dbm;
-    apr_datum_t dbmkey;
-    apr_datum_t dbmval;
-    apr_pool_t *p;
-    time_t tExpiresAt;
-    int nElements = 0;
-    int nDeleted = 0;
-    int bDelete;
-    apr_datum_t *keylist;
-    int keyidx;
-    int i;
-    time_t tNow;
-
-    /*
-     * make sure the expiration for still not-accessed session
-     * cache entries is done only from time to time
-     */
-    tNow = time(NULL);
-    if (tNow < tLast+sc->nSessionCacheTimeout)
-        return;
-    tLast = tNow;
-
-    /*
-     * Here we have to be very carefully: Not all DBM libraries are
-     * smart enough to allow one to iterate over the elements and at the
-     * same time delete expired ones. Some of them get totally crazy
-     * while others have no problems. So we have to do it the slower but
-     * more safe way: we first iterate over all elements and remember
-     * those which have to be expired. Then in a second pass we delete
-     * all those expired elements. Additionally we reopen the DBM file
-     * to be really safe in state.
-     */
-
-#define KEYMAX 1024
-
-    ssl_mutex_on(s);
-    for (;;) {
-        /* allocate the key array in a memory sub pool */
-        apr_pool_sub_make(&p, mc->pPool, NULL);
-        if (p == NULL)
-            break;
-        if ((keylist = apr_palloc(p, sizeof(dbmkey)*KEYMAX)) == NULL) {
-            apr_pool_destroy(p);
-            break;
-        }
-
-        /* pass 1: scan DBM database */
-        keyidx = 0;
-        if (apr_dbm_open(&dbm, mc->szSessionCacheDataFile,
-		APR_DBM_RWCREATE,SSL_DBM_FILE_MODE, p) != APR_SUCCESS) {
-            ssl_log(s, SSL_LOG_ERROR|SSL_ADD_ERRNO,
-                    "Cannot open SSLSessionCache DBM file `%s' for scanning",
-                    mc->szSessionCacheDataFile);
-            apr_pool_destroy(p);
-            break;
-        }
-        apr_dbm_firstkey(dbm, &dbmkey);
-        while (dbmkey.dptr != NULL) {
-            nElements++;
-            bDelete = FALSE;
-            apr_dbm_fetch(dbm, dbmkey, &dbmval);
-            if (dbmval.dsize <= sizeof(time_t) || dbmval.dptr == NULL)
-                bDelete = TRUE;
-            else {
-                memcpy(&tExpiresAt, dbmval.dptr, sizeof(time_t));
-                if (tExpiresAt <= tNow)
-                    bDelete = TRUE;
-            }
-            if (bDelete) {
-                if ((keylist[keyidx].dptr = apr_palloc(p, dbmkey.dsize)) != NULL) {
-                    memcpy(keylist[keyidx].dptr, dbmkey.dptr, dbmkey.dsize);
-                    keylist[keyidx].dsize = dbmkey.dsize;
-                    keyidx++;
-                    if (keyidx == KEYMAX)
-                        break;
-                }
-            }
-            apr_dbm_nextkey(dbm, &dbmkey);
-        }
-        apr_dbm_close(dbm);
-
-        /* pass 2: delete expired elements */
-        if (apr_dbm_open(&dbm, mc->szSessionCacheDataFile,
-		APR_DBM_RWCREATE,SSL_DBM_FILE_MODE, p) != APR_SUCCESS) {
-            ssl_log(s, SSL_LOG_ERROR|SSL_ADD_ERRNO,
-                    "Cannot re-open SSLSessionCache DBM file `%s' for expiring",
-                    mc->szSessionCacheDataFile);
-            apr_pool_destroy(p);
-            break;
-        }
-        for (i = 0; i < keyidx; i++) {
-            apr_dbm_delete(dbm, keylist[i]);
-            nDeleted++;
-        }
-        apr_dbm_close(dbm);
-
-        /* destroy temporary pool */
-        apr_pool_destroy(p);
-
-        if (keyidx < KEYMAX)
-            break;
-    }
-    ssl_mutex_off(s);
-
-    ssl_log(s, SSL_LOG_TRACE, "Inter-Process Session Cache (DBM) Expiry: "
-            "old: %d, new: %d, removed: %d", nElements, nElements-nDeleted, nDeleted);
-    return;
-}
-
-void ssl_scache_dbm_status(server_rec *s, apr_pool_t *p, void (*func)(char *, void *), void *arg)
-{
-    SSLModConfigRec *mc = myModConfig(s);
-    apr_dbm_t *dbm;
-    apr_datum_t dbmkey;
-    apr_datum_t dbmval;
-    int nElem;
-    int nSize;
-    int nAverage;
-
-    nElem = 0;
-    nSize = 0;
-    ssl_mutex_on(s);
-    /*
-     * XXX - Check what pool is to be used - TBD
-     */
-    if (apr_dbm_open(&dbm, mc->szSessionCacheDataFile,
-	                 APR_DBM_RWCREATE, SSL_DBM_FILE_MODE, mc->pPool) != APR_SUCCESS) {
-        ssl_log(s, SSL_LOG_ERROR|SSL_ADD_ERRNO,
-                "Cannot open SSLSessionCache DBM file `%s' for status retrival",
-                mc->szSessionCacheDataFile);
-        ssl_mutex_off(s);
-        return;
-    }
-    /*
-     * XXX - Check the return value of apr_dbm_firstkey, apr_dbm_fetch - TBD
-     */
-    apr_dbm_firstkey(dbm, &dbmkey);
-    for ( ; dbmkey.dptr != NULL; apr_dbm_nextkey(dbm, &dbmkey)) {
-        apr_dbm_fetch(dbm, dbmkey, &dbmval);
-        if (dbmval.dptr == NULL)
-            continue;
-        nElem += 1;
-        nSize += dbmval.dsize;
-    }
-    apr_dbm_close(dbm);
-    ssl_mutex_off(s);
-    if (nSize > 0 && nElem > 0)
-        nAverage = nSize / nElem;
-    else
-        nAverage = 0;
-    func(apr_psprintf(p, "cache type: <b>DBM</b>, maximum size: <b>unlimited</b><br>"), arg);
-    func(apr_psprintf(p, "current sessions: <b>%d</b>, current size: <b>%d</b> bytes<br>", nElem, nSize), arg);
-    func(apr_psprintf(p, "average session size: <b>%d</b> bytes<br>", nAverage), arg);
-    return;
-}
-
diff --git a/modules/ssl/ssl_scache_shmcb.c b/modules/ssl/ssl_scache_shmcb.c
deleted file mode 100644
index 49b7945..0000000
--- a/modules/ssl/ssl_scache_shmcb.c
+++ /dev/null
@@ -1,1346 +0,0 @@
-/*                      _             _
-**  _ __ ___   ___   __| |    ___ ___| |  mod_ssl
-** | '_ ` _ \ / _ \ / _` |   / __/ __| |  Apache Interface to OpenSSL
-** | | | | | | (_) | (_| |   \__ \__ \ |  www.modssl.org
-** |_| |_| |_|\___/ \__,_|___|___/___/_|  ftp.modssl.org
-**                      |_____|
-**  ssl_scache_shmcb.c
-**  Session Cache via Shared Memory (Cyclic Buffer Variant)
-*/
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- */
-
-#include "mod_ssl.h"
-
-/* 
- * This shared memory based SSL session cache implementation was
- * originally written by Geoff Thorpe <geoff@eu.c2.net> for C2Net Europe
- * and as a contribution to Ralf Engelschall's mod_ssl project.
- */
-
-/*
- * The shared-memory segment header can be cast to and from the
- * SHMCBHeader type, all other structures need to be initialised by
- * utility functions.
- *
- * The "header" looks like this;
- *
- * data applying to the overall structure:
- * - division_offset (unsigned int):
- *   how far into the shared memory segment the first division is.
- * - division_size (unsigned int):
- *   how many bytes each division occupies.
- *   (NB: This includes the queue and the cache)
- * - division_mask (unsigned char):
- *   the "mask" in the next line. Add one to this,
- *   and that's the number of divisions.
- *
- * data applying to within each division:
- * - queue_size (unsigned int):
- *   how big each "queue" is. NB: The queue is the first block in each
- *   division and is followed immediately by the cache itself so so
- *   there's no cache_offset value.
- *
- * data applying to within each queue:
- * - index_num (unsigned char):
- *   how many indexes in each cache's queue
- * - index_offset (unsigned char):
- *   how far into the queue the first index is.
- * - index_size:
- *   how big each index is.
- *
- * data applying to within each cache:
- * - cache_data_offset (unsigned int):
- *   how far into the cache the session-data array is stored.
- * - cache_data_size (unsigned int):
- *   how big each cache's data block is.
- *
- * statistics data (this will eventually be per-division but right now
- * there's only one mutex):
- * - stores (unsigned long):
- *   how many stores have been performed in the cache.
- * - expiries (unsigned long):
- *   how many session have been expired from the cache.
- * - scrolled (unsigned long):
- *   how many sessions have been scrolled out of full cache during a
- *   "store" operation. This is different to the "removes" stats as
- *   they are requested by mod_ssl/Apache, these are done because of
- *   cache logistics. (NB: Also, this value should be deducible from
- *   the others if my code has no bugs, but I count it anyway - plus
- *   it helps debugging :-).
- * - retrieves_hit (unsigned long):
- *   how many session-retrieves have succeeded.
- * - retrieves_miss (unsigned long):
- *   how many session-retrieves have failed.
- * - removes_hit (unsigned long):
- * - removes_miss (unsigned long):
- * 
- * Following immediately after the header is an array of "divisions".
- * Each division is simply a "queue" immediately followed by its
- * corresponding "cache". Each division handles some pre-defined band
- * of sessions by using the "division_mask" in the header. Eg. if
- * division_mask=0x1f then there are 32 divisions, the first of which
- * will store sessions whose least-significant 5 bits are 0, the second
- * stores session whose LS 5 bits equal 1, etc. A queue is an indexing
- * structure referring to its corresponding cache.
- *
- * A "queue" looks like this;
- *
- * - first_pos (unsigned int):
- *   the location within the array of indexes where the virtual
- *   "left-hand-edge" of the cyclic buffer is.
- * - pos_count (unsigned int):
- *   the number of indexes occupied from first_pos onwards.
- *
- * ...followed by an array of indexes, each of which can be
- * memcpy'd to and from an SHMCBIndex, and look like this;
- *
- * - expires (time_t):
- *   the time() value at which this session expires.
- * - offset (unsigned int):
- *   the offset within the cache data block where the corresponding
- *   session is stored.
- * - s_id2 (unsigned char):
- *   the second byte of the session_id, stored as an optimisation to
- *   reduce the number of d2i_SSL_SESSION calls that are made when doing
- *   a lookup.
- * - removed (unsigned char):
- *   a byte used to indicate whether a session has been "passively"
- *   removed. Ie. it is still in the cache but is to be disregarded by
- *   any "retrieve" operation.
- *
- * A "cache" looks like this;
- *
- * - first_pos (unsigned int):
- *   the location within the data block where the virtual
- *   "left-hand-edge" of the cyclic buffer is.
- * - pos_count (unsigned int):
- *   the number of bytes used in the data block from first_pos onwards.
- *
- * ...followed by the data block in which actual DER-encoded SSL
- * sessions are stored.
- */
-
-/* 
- * Header - can be memcpy'd to and from the front of the shared
- * memory segment. NB: The first copy (commented out) has the
- * elements in a meaningful order, but due to data-alignment
- * braindeadness, the second (uncommented) copy has the types grouped
- * so as to decrease "struct-bloat". sigh.
- */
-typedef struct {
-    unsigned long num_stores;
-    unsigned long num_expiries;
-    unsigned long num_scrolled;
-    unsigned long num_retrieves_hit;
-    unsigned long num_retrieves_miss;
-    unsigned long num_removes_hit;
-    unsigned long num_removes_miss;
-    unsigned int division_offset;
-    unsigned int division_size;
-    unsigned int queue_size;
-    unsigned int cache_data_offset;
-    unsigned int cache_data_size;
-    unsigned char division_mask;
-    unsigned int index_num;
-    unsigned int index_offset;
-    unsigned int index_size;
-} SHMCBHeader;
-
-/* 
- * Index - can be memcpy'd to and from an index inside each
- * queue's index array.
- */
-typedef struct {
-    time_t expires;
-    unsigned int offset;
-    unsigned char s_id2;
-    unsigned char removed;
-} SHMCBIndex;
-
-/* 
- * Queue - must be populated by a call to shmcb_get_division
- * and the structure's pointers are used for updating (ie.
- * the structure doesn't need any "set" to update values).
- */
-typedef struct {
-    SHMCBHeader *header;
-    unsigned int *first_pos;
-    unsigned int *pos_count;
-    SHMCBIndex *indexes;
-} SHMCBQueue;
-
-/* 
- * Cache - same comment as for Queue. 'Queue's are in a 1-1
- * correspondance with 'Cache's and are usually carried round
- * in a pair, they are only seperated for clarity.
- */
-typedef struct {
-    SHMCBHeader *header;
-    unsigned int *first_pos;
-    unsigned int *pos_count;
-    unsigned char *data;
-} SHMCBCache;
-
-/*
- * Forward function prototypes.
- */
-
-/* Functions for working around data-alignment-picky systems (sparcs,
-   Irix, etc). These use "memcpy" as a way of foxing these systems into
-   treating the composite types as byte-arrays rather than higher-level
-   primitives that it prefers to have 4-(or 8-)byte aligned. I don't
-   envisage this being a performance issue as a couple of 2 or 4 byte
-   memcpys can hardly make a dent on the massive memmove operations this
-   cache technique avoids, nor the overheads of ASN en/decoding. */
-static unsigned int shmcb_get_safe_uint(unsigned int *);
-static void shmcb_set_safe_uint_ex(unsigned char *, const unsigned char *);
-#define shmcb_set_safe_uint(pdest, src) \
-	do { \
-		unsigned int tmp_uint = src; \
-		shmcb_set_safe_uint_ex((unsigned char *)pdest, \
-			(const unsigned char *)(&tmp_uint)); \
-	} while(0)
-#if 0 /* Unused so far */
-static unsigned long shmcb_get_safe_ulong(unsigned long *);
-static void shmcb_set_safe_ulong_ex(unsigned char *, const unsigned char *);
-#define shmcb_set_safe_ulong(pdest, src) \
-	do { \
-		unsigned long tmp_ulong = src; \
-		shmcb_set_safe_ulong_ex((unsigned char *)pdest, \
-			(const unsigned char *)(&tmp_ulong)); \
-	} while(0)
-#endif
-static time_t shmcb_get_safe_time(time_t *);
-static void shmcb_set_safe_time_ex(unsigned char *, const unsigned char *);
-#define shmcb_set_safe_time(pdest, src) \
-	do { \
-		time_t tmp_time = src; \
-		shmcb_set_safe_time_ex((unsigned char *)pdest, \
-			(const unsigned char *)(&tmp_time)); \
-	} while(0)
-
-/* This is necessary simply so that the size passed to memset() is not a
- * compile-time constant, preventing the compiler from optimising it. */
-#if 0
-/* XXX: this isn't used, is it needed? */
-static void shmcb_safe_clear(void *ptr, size_t size)
-{
-	memset(ptr, 0, size);
-}
-#endif
-
-/* Underlying functions for session-caching */
-static BOOL shmcb_init_memory(server_rec *, void *, unsigned int);
-static BOOL shmcb_store_session(server_rec *, void *, UCHAR *, int, SSL_SESSION *, time_t);
-static SSL_SESSION *shmcb_retrieve_session(server_rec *, void *, UCHAR *, int);
-static BOOL shmcb_remove_session(server_rec *, void *, UCHAR *, int);
-
-/* Utility functions for manipulating the structures */
-static void shmcb_get_header(void *, SHMCBHeader **);
-static BOOL shmcb_get_division(SHMCBHeader *, SHMCBQueue *, SHMCBCache *, unsigned int);
-static SHMCBIndex *shmcb_get_index(const SHMCBQueue *, unsigned int);
-static unsigned int shmcb_expire_division(server_rec *, SHMCBQueue *, SHMCBCache *);
-static BOOL shmcb_insert_encoded_session(server_rec *, SHMCBQueue *, SHMCBCache *, unsigned char *, unsigned int, unsigned char *, time_t);
-static SSL_SESSION *shmcb_lookup_session_id(server_rec *, SHMCBQueue *, SHMCBCache *, UCHAR *, unsigned int);
-static BOOL shmcb_remove_session_id(server_rec *, SHMCBQueue *, SHMCBCache *, UCHAR *, unsigned int);
-
-/*
- * Data-alignment functions (a.k.a. avoidance tactics)
- *
- * NB: On HPUX (and possibly others) there is a *very* mischievous little
- * "optimisation" in the compilers where it will convert the following;
- *      memcpy(dest_ptr, &source, sizeof(unsigned int));
- * (where dest_ptr is of type (unsigned int *) and source is (unsigned int))
- * into;
- *      *dest_ptr = source; (or *dest_ptr = *(&source), not sure).
- * Either way, it completely destroys the whole point of these _safe_
- * functions, because the assignment operation will fall victim to the
- * architecture's byte-alignment dictations, whereas the memcpy (as a
- * byte-by-byte copy) should not. sigh. So, if you're wondering about the
- * apparently unnecessary conversions to (unsigned char *) in these
- * functions, you now have an explanation. Don't just revert them back and
- * say "ooh look, it still works" - if you try it on HPUX (well, 32-bit
- * HPUX 11.00 at least) you may find it fails with a SIGBUS. :-(
- */
-
-static unsigned int shmcb_get_safe_uint(unsigned int *ptr)
-{
-    unsigned int ret;
-    shmcb_set_safe_uint_ex((unsigned char *)(&ret),
-		    (const unsigned char *)ptr);
-    return ret;
-}
-
-static void shmcb_set_safe_uint_ex(unsigned char *dest,
-				const unsigned char *src)
-{
-    memcpy(dest, src, sizeof(unsigned int));
-}
-
-#if 0 /* Unused so far */
-static unsigned long shmcb_get_safe_ulong(unsigned long *ptr)
-{
-    unsigned long ret;
-    shmcb_set_safe_ulong_ex((unsigned char *)(&ret),
-		    (const unsigned char *)ptr);
-    return ret;
-}
-
-static void shmcb_set_safe_ulong_ex(unsigned char *dest,
-				const unsigned char *src)
-{
-    memcpy(dest, src, sizeof(unsigned long));
-}
-#endif
-
-static time_t shmcb_get_safe_time(time_t * ptr)
-{
-    time_t ret;
-    shmcb_set_safe_time_ex((unsigned char *)(&ret),
-		    (const unsigned char *)ptr);
-    return ret;
-}
-
-static void shmcb_set_safe_time_ex(unsigned char *dest,
-				const unsigned char *src)
-{
-    memcpy(dest, src, sizeof(time_t));
-}
-/*
-**
-** High-Level "handlers" as per ssl_scache.c
-**
-*/
-
-static void *shmcb_malloc(SSLModConfigRec *mc, size_t size)
-{
-    apr_rmm_off_t off = apr_rmm_malloc(mc->pSessionCacheDataRMM, size);
-    return apr_rmm_addr_get(mc->pSessionCacheDataRMM, off);
-}
-
-void ssl_scache_shmcb_init(server_rec *s, apr_pool_t *p)
-{
-    SSLModConfigRec *mc = myModConfig(s);
-    void *shm_segment = NULL;
-    int avail, avail_orig;
-    apr_status_t rv;
-
-    /*
-     * Create shared memory segment
-     */
-    if (mc->szSessionCacheDataFile == NULL) {
-        ssl_log(s, SSL_LOG_ERROR, "SSLSessionCache required");
-        ssl_die();
-    }
-
-    if ((rv = apr_shm_create(&(mc->pSessionCacheDataMM), 
-                             mc->nSessionCacheDataSize, 
-                             mc->szSessionCacheDataFile,
-                             mc->pPool)) != APR_SUCCESS) {
-        ssl_log(s, SSL_LOG_ERROR,
-                "Cannot allocate shared memory: %d", rv);
-        ssl_die();
-    }
-
-    if ((rv = apr_rmm_init(&(mc->pSessionCacheDataRMM), NULL,
-                             apr_shm_baseaddr_get(mc->pSessionCacheDataMM),
-                             mc->nSessionCacheDataSize,
-                             mc->pPool)) != APR_SUCCESS) {
-        ssl_log(s, SSL_LOG_ERROR,
-                "Cannot initialize rmm: %d", rv);
-        ssl_die();
-    }
-
-    /*
-     * Create cache inside the shared memory segment
-     */
-    avail_orig = avail = mc->nSessionCacheDataSize - apr_rmm_overhead_get(0);
-    ssl_log(s, SSL_LOG_TRACE, "Shared-memory segment has %u available",
-            avail);
-
-    /* 
-     * For some reason to do with MM's internal management, I can't
-     * allocate the full amount. Implement a reasonable form of trial
-     * and error and output trace information.
-     */
-    while ((shm_segment == NULL) && ((avail_orig - avail) * 100 < avail_orig)) {
-        shm_segment = shmcb_malloc(mc, avail);
-        if (shm_segment == NULL) {
-            ssl_log(s, SSL_LOG_TRACE,
-                    "shmcb_malloc attempt for %u bytes failed", avail);
-            avail -= 4;
-        }
-    }
-    if (shm_segment == NULL) {
-        ssl_log(s, SSL_LOG_ERROR,
-                "Cannot allocate memory for the 'shmcb' session cache\n");
-        ssl_die();
-    }
-    ssl_log(s, SSL_LOG_TRACE, "shmcb_init allocated %u bytes of shared "
-            "memory", avail);
-    if (!shmcb_init_memory(s, shm_segment, avail)) {
-        ssl_log(s, SSL_LOG_ERROR,
-                "Failure initialising 'shmcb' shared memory");
-        ssl_die();
-    }
-    ssl_log(s, SSL_LOG_INFO, "Shared memory session cache initialised");
-
-    /* 
-     * Success ... we hack the memory block into place by cheating for
-     * now and stealing a member variable the original shared memory
-     * cache was using. :-)
-     */
-    mc->tSessionCacheDataTable = (table_t *) shm_segment;
-    return;
-}
-
-void ssl_scache_shmcb_kill(server_rec *s)
-{
-    SSLModConfigRec *mc = myModConfig(s);
-
-    if (mc->pSessionCacheDataRMM != NULL) {
-        apr_rmm_destroy(mc->pSessionCacheDataRMM);
-        mc->pSessionCacheDataRMM = NULL;
-    }
-
-    if (mc->pSessionCacheDataMM != NULL) {
-        apr_shm_destroy(mc->pSessionCacheDataMM);
-        mc->pSessionCacheDataMM = NULL;
-    }
-    return;
-}
-
-BOOL ssl_scache_shmcb_store(server_rec *s, UCHAR *id, int idlen,
-                           time_t timeout, SSL_SESSION * pSession)
-{
-    SSLModConfigRec *mc = myModConfig(s);
-    void *shm_segment;
-    BOOL to_return = FALSE;
-
-    /* We've kludged our pointer into the other cache's member variable. */
-    shm_segment = (void *) mc->tSessionCacheDataTable;
-    ssl_mutex_on(s);
-    if (!shmcb_store_session(s, shm_segment, id, idlen, pSession, timeout))
-        /* in this cache engine, "stores" should never fail. */
-        ssl_log(s, SSL_LOG_ERROR, "'shmcb' code was unable to store a "
-                "session in the cache.");
-    else {
-        ssl_log(s, SSL_LOG_TRACE, "shmcb_store successful");
-        to_return = TRUE;
-    }
-    ssl_mutex_off(s);
-    return to_return;
-}
-
-SSL_SESSION *ssl_scache_shmcb_retrieve(server_rec *s, UCHAR *id, int idlen)
-{
-    SSLModConfigRec *mc = myModConfig(s);
-    void *shm_segment;
-    SSL_SESSION *pSession;
-
-    /* We've kludged our pointer into the other cache's member variable. */
-    shm_segment = (void *) mc->tSessionCacheDataTable;
-    ssl_mutex_on(s);
-    pSession = shmcb_retrieve_session(s, shm_segment, id, idlen);
-    ssl_mutex_off(s);
-    if (pSession)
-        ssl_log(s, SSL_LOG_TRACE, "shmcb_retrieve had a hit");
-    else {
-        ssl_log(s, SSL_LOG_TRACE, "shmcb_retrieve had a miss");
-        ssl_log(s, SSL_LOG_INFO, "Client requested a 'session-resume' but "
-                "we have no such session.");
-    }
-    return pSession;
-}
-
-void ssl_scache_shmcb_remove(server_rec *s, UCHAR *id, int idlen)
-{
-    SSLModConfigRec *mc = myModConfig(s);
-    void *shm_segment;
-
-    /* We've kludged our pointer into the other cache's member variable. */
-    shm_segment = (void *) mc->tSessionCacheDataTable;
-    ssl_mutex_on(s);
-    shmcb_remove_session(s, shm_segment, id, idlen);
-    ssl_mutex_off(s);
-}
-
-void ssl_scache_shmcb_expire(server_rec *s)
-{
-    /* NOP */
-    return;
-}
-
-void ssl_scache_shmcb_status(server_rec *s, apr_pool_t *p,
-                            void (*func) (char *, void *), void *arg)
-{
-    SSLModConfigRec *mc = myModConfig(s);
-    SHMCBHeader *header;
-    SHMCBQueue queue;
-    SHMCBCache cache;
-    SHMCBIndex *idx;
-    void *shm_segment;
-    unsigned int loop, total, cache_total, non_empty_divisions;
-    int index_pct, cache_pct;
-    double expiry_total;
-    time_t average_expiry, now, max_expiry, min_expiry, idxexpiry;
-
-    ssl_log(s, SSL_LOG_TRACE, "inside ssl_scache_shmcb_status");
-
-    /* We've kludged our pointer into the other cache's member variable. */
-    shm_segment = (void *) mc->tSessionCacheDataTable;
-
-    /* Get the header structure. */
-    shmcb_get_header(shm_segment, &header);
-    total = cache_total = non_empty_divisions = 0;
-    average_expiry = max_expiry = min_expiry = 0;
-    expiry_total = 0;
-
-    /* It may seem strange to grab "now" at this point, but in theory
-     * we should never have a negative threshold but grabbing "now" after
-     * the loop (which performs expiries) could allow that chance. */
-    now = time(NULL);
-    for (loop = 0; loop <= header->division_mask; loop++) {
-        if (shmcb_get_division(header, &queue, &cache, loop)) {
-            shmcb_expire_division(s, &queue, &cache);
-            total += shmcb_get_safe_uint(queue.pos_count);
-            cache_total += shmcb_get_safe_uint(cache.pos_count);
-            if (shmcb_get_safe_uint(queue.pos_count) > 0) {
-                idx = shmcb_get_index(&queue,
-                                     shmcb_get_safe_uint(queue.first_pos));
-                non_empty_divisions++;
-                idxexpiry = shmcb_get_safe_time(&(idx->expires));
-                expiry_total += (double) idxexpiry;
-                max_expiry = (idxexpiry > max_expiry ? idxexpiry :
-                              max_expiry);
-                if (min_expiry == 0)
-                    min_expiry = idxexpiry;
-                else
-                    min_expiry = (idxexpiry < min_expiry ? idxexpiry :
-                                  min_expiry);
-            }
-        }
-    }
-    index_pct = (100 * total) / (header->index_num * (header->division_mask + 1));
-    cache_pct = (100 * cache_total) / (header->cache_data_size * (header->division_mask + 1));
-    func(apr_psprintf(p, "cache type: <b>SHMCB</b>, shared memory: <b>%d</b> "
-                     "bytes, current sessions: <b>%d</b><br>",
-                     mc->nSessionCacheDataSize, total), arg);
-    func(apr_psprintf(p, "sub-caches: <b>%d</b>, indexes per sub-cache: "
-                     "<b>%d</b><br>", (int) header->division_mask + 1,
-                     (int) header->index_num), arg);
-    if (non_empty_divisions != 0) {
-        average_expiry = (time_t)(expiry_total / (double)non_empty_divisions);
-        func(apr_psprintf(p, "time left on oldest entries' SSL sessions: "), arg);
-        if (now < average_expiry)
-            func(apr_psprintf(p, "avg: <b>%d</b> seconds, (range: %d...%d)<br>",
-                            (int)(average_expiry - now), (int) (min_expiry - now),
-                            (int)(max_expiry - now)), arg);
-        else
-            func(apr_psprintf(p, "expiry threshold: <b>Calculation Error!</b>" 
-                             "<br>"), arg);
-
-    }
-    func(apr_psprintf(p, "index usage: <b>%d%%</b>, cache usage: <b>%d%%</b>"
-                     "<br>", index_pct, cache_pct), arg);
-    func(apr_psprintf(p, "total sessions stored since starting: <b>%lu</b><br>",
-                     header->num_stores), arg);
-    func(apr_psprintf(p,"total sessions expired since starting: <b>%lu</b><br>",
-                     header->num_expiries), arg);
-    func(apr_psprintf(p, "total (pre-expiry) sessions scrolled out of the "
-                     "cache: <b>%lu</b><br>", header->num_scrolled), arg);
-    func(apr_psprintf(p, "total retrieves since starting: <b>%lu</b> hit, "
-                     "<b>%lu</b> miss<br>", header->num_retrieves_hit,
-                     header->num_retrieves_miss), arg);
-    func(apr_psprintf(p, "total removes since starting: <b>%lu</b> hit, "
-                     "<b>%lu</b> miss<br>", header->num_removes_hit,
-                     header->num_removes_miss), arg);
-    ssl_log(s, SSL_LOG_TRACE, "leaving shmcb_status");
-    return;
-}
-
-/*
-**
-** Memory manipulation and low-level cache operations 
-**
-*/
-
-static BOOL shmcb_init_memory(
-    server_rec *s, void *shm_mem,
-    unsigned int shm_mem_size)
-{
-    SHMCBHeader *header;
-    SHMCBQueue queue;
-    SHMCBCache cache;
-    unsigned int temp, loop, granularity;
-
-    ssl_log(s, SSL_LOG_TRACE, "entered shmcb_init_memory()");
-
-    /* Calculate some sizes... */
-    temp = sizeof(SHMCBHeader);
-
-    /* If the segment is ridiculously too small, bail out */
-    if (shm_mem_size < (2*temp)) {
-        ssl_log(s, SSL_LOG_ERROR, "shared memory segment too small");
-        return FALSE;
-    }
-
-    /* Make temp the amount of memory without the header */
-    temp = shm_mem_size - temp;
-
-    /* Work on the basis that you need 10 bytes index for each session
-     * (approx 150 bytes), which is to divide temp by 160 - and then
-     * make sure we err on having too index space to burn even when
-     * the cache is full, which is a lot less stupid than having
-     * having not enough index space to utilise the whole cache!. */
-    temp /= 120;
-    ssl_log(s, SSL_LOG_TRACE, "for %u bytes, recommending %u indexes",
-            shm_mem_size, temp);
-
-    /* We should divide these indexes evenly amongst the queues. Try
-     * to get it so that there are roughly half the number of divisions
-     * as there are indexes in each division. */
-    granularity = 256;
-    while ((temp / granularity) < (2 * granularity))
-        granularity /= 2;
-
-    /* So we have 'granularity' divisions, set 'temp' equal to the
-     * number of indexes in each division. */
-    temp /= granularity;
-
-    /* Too small? Bail ... */
-    if (temp < 5) {
-        ssl_log(s, SSL_LOG_ERROR, "shared memory segment too small");
-        return FALSE;
-    }
-
-    /* OK, we're sorted - from here on in, the return should be TRUE */
-    header = (SHMCBHeader *)shm_mem;
-    header->division_mask = (unsigned char)(granularity - 1);
-    header->division_offset = sizeof(SHMCBHeader);
-    header->index_num = temp;
-    header->index_offset = (2 * sizeof(unsigned int));
-    header->index_size = sizeof(SHMCBIndex);
-    header->queue_size = header->index_offset +
-                         (header->index_num * header->index_size);
-
-    /* Now calculate the space for each division */
-    temp = shm_mem_size - header->division_offset;
-    header->division_size = temp / granularity;
-
-    /* Calculate the space left in each division for the cache */
-    temp -= header->queue_size;
-    header->cache_data_offset = (2 * sizeof(unsigned int));
-    header->cache_data_size = header->division_size -
-                              header->queue_size - header->cache_data_offset;
-
-    /* Output trace info */
-    ssl_log(s, SSL_LOG_TRACE, "shmcb_init_memory choices follow");
-    ssl_log(s, SSL_LOG_TRACE, "division_mask = 0x%02X", header->division_mask);
-    ssl_log(s, SSL_LOG_TRACE, "division_offset = %u", header->division_offset);
-    ssl_log(s, SSL_LOG_TRACE, "division_size = %u", header->division_size);
-    ssl_log(s, SSL_LOG_TRACE, "queue_size = %u", header->queue_size);
-    ssl_log(s, SSL_LOG_TRACE, "index_num = %u", header->index_num);
-    ssl_log(s, SSL_LOG_TRACE, "index_offset = %u", header->index_offset);
-    ssl_log(s, SSL_LOG_TRACE, "index_size = %u", header->index_size);
-    ssl_log(s, SSL_LOG_TRACE, "cache_data_offset = %u", header->cache_data_offset);
-    ssl_log(s, SSL_LOG_TRACE, "cache_data_size = %u", header->cache_data_size);
-
-    /* The header is done, make the caches empty */
-    for (loop = 0; loop < granularity; loop++) {
-        if (!shmcb_get_division(header, &queue, &cache, loop))
-            ssl_log(s, SSL_LOG_ERROR, "shmcb_init_memory, " "internal error");
-        shmcb_set_safe_uint(cache.first_pos, 0);
-        shmcb_set_safe_uint(cache.pos_count, 0);
-        shmcb_set_safe_uint(queue.first_pos, 0);
-        shmcb_set_safe_uint(queue.pos_count, 0);
-    }
-
-    ssl_log(s, SSL_LOG_TRACE, "leaving shmcb_init_memory()");
-    return TRUE;
-}
-
-static BOOL shmcb_store_session(
-    server_rec *s, void *shm_segment, UCHAR *id,
-    int idlen, SSL_SESSION * pSession,
-    time_t timeout)
-{
-    SHMCBHeader *header;
-    SHMCBQueue queue;
-    SHMCBCache cache;
-    unsigned char masked_index;
-    unsigned char encoded[SSL_SESSION_MAX_DER];
-    unsigned char *ptr_encoded;
-    unsigned int len_encoded;
-    time_t expiry_time;
-
-    ssl_log(s, SSL_LOG_TRACE, "inside shmcb_store_session");
-
-    /* Get the header structure, which division this session will fall into etc. */
-    shmcb_get_header(shm_segment, &header);
-    masked_index = pSession->session_id[0] & header->division_mask;
-    ssl_log(s, SSL_LOG_TRACE, "session_id[0]=%u, masked index=%u",
-            pSession->session_id[0], masked_index);
-    if (!shmcb_get_division(header, &queue, &cache, (unsigned int)masked_index)) {
-        ssl_log(s, SSL_LOG_ERROR, "shmcb_store_session, " "internal error");
-        return FALSE;
-    }
-
-    /* Serialise the session, work out how much we're dealing
-     * with. NB: This check could be removed if we're not paranoid
-     * or we find some assurance that it will never be necessary. */
-    len_encoded = i2d_SSL_SESSION(pSession, NULL);
-    if (len_encoded > SSL_SESSION_MAX_DER) {
-        ssl_log(s, SSL_LOG_ERROR, "session is too big (%u bytes)",
-                len_encoded);
-        return FALSE;
-    }
-    ptr_encoded = encoded;
-    len_encoded = i2d_SSL_SESSION(pSession, &ptr_encoded);
-    expiry_time = timeout;
-    if (!shmcb_insert_encoded_session(s, &queue, &cache, encoded,
-                                     len_encoded, pSession->session_id,
-                                     expiry_time)) {
-        ssl_log(s, SSL_LOG_ERROR, "can't store a session!");
-        return FALSE;
-    }
-    ssl_log(s, SSL_LOG_TRACE, "leaving shmcb_store successfully");
-    header->num_stores++;
-    return TRUE;
-}
-
-static SSL_SESSION *shmcb_retrieve_session(
-    server_rec *s, void *shm_segment,
-    UCHAR *id, int idlen)
-{
-    SHMCBHeader *header;
-    SHMCBQueue queue;
-    SHMCBCache cache;
-    unsigned char masked_index;
-    SSL_SESSION *pSession;
-
-    ssl_log(s, SSL_LOG_TRACE, "inside shmcb_retrieve_session");
-    if (idlen < 2) {
-        ssl_log(s, SSL_LOG_ERROR, "unusably short session_id provided "
-                "(%u bytes)", idlen);
-        return FALSE;
-    }
-
-    /* Get the header structure, which division this session lookup
-     * will come from etc. */
-    shmcb_get_header(shm_segment, &header);
-    masked_index = id[0] & header->division_mask;
-    ssl_log(s, SSL_LOG_TRACE, "id[0]=%u, masked index=%u", id[0],
-            masked_index);
-    if (!shmcb_get_division(header, &queue, &cache, (unsigned int) masked_index)) {
-        ssl_log(s, SSL_LOG_ERROR, "shmcb_retrieve_session, " "internal error");
-        header->num_retrieves_miss++;
-        return FALSE;
-    }
-
-    /* Get the session corresponding to the session_id or NULL if it
-     * doesn't exist (or is flagged as "removed"). */
-    pSession = shmcb_lookup_session_id(s, &queue, &cache, id, idlen);
-    if (pSession)
-        header->num_retrieves_hit++;
-    else
-        header->num_retrieves_miss++;
-    ssl_log(s, SSL_LOG_TRACE, "leaving shmcb_retrieve_session");
-    return pSession;
-}
-
-static BOOL shmcb_remove_session(
-    server_rec *s, void *shm_segment,
-    UCHAR *id, int idlen)
-{
-    SHMCBHeader *header;
-    SHMCBQueue queue;
-    SHMCBCache cache;
-    unsigned char masked_index;
-    BOOL res;
-
-    ssl_log(s, SSL_LOG_TRACE, "inside shmcb_remove_session");
-    if (id == NULL) {
-        ssl_log(s, SSL_LOG_ERROR, "remove called with NULL session_id!");
-        return FALSE;
-    }
-
-    /* Get the header structure, which division this session remove
-     * will happen in etc. */
-    shmcb_get_header(shm_segment, &header);
-    masked_index = id[0] & header->division_mask;
-    ssl_log(s, SSL_LOG_TRACE, "id[0]=%u, masked index=%u",
-            id[0], masked_index);
-    if (!shmcb_get_division(header, &queue, &cache, (unsigned int)masked_index)) {
-        ssl_log(s, SSL_LOG_ERROR, "shmcb_remove_session, internal error");
-        header->num_removes_miss++;
-        return FALSE;
-    }
-    res = shmcb_remove_session_id(s, &queue, &cache, id, idlen);
-    if (res)
-        header->num_removes_hit++;
-    else
-        header->num_removes_miss++;
-    ssl_log(s, SSL_LOG_TRACE, "leaving shmcb_remove_session");
-    return res;
-}
-
-
-/* 
-**
-** Weirdo cyclic buffer functions
-**
-*/
-
-/* This gets used in the cyclic "index array" (in the 'Queue's) and
- * in the cyclic 'Cache's too ... you provide the "width" of the
- * cyclic store, the starting position and how far to move (with
- * wrapping if necessary). Basically it's addition modulo buf_size. */
-static unsigned int shmcb_cyclic_increment(
-    unsigned int buf_size,
-    unsigned int start_pos,
-    unsigned int to_add)
-{
-    start_pos += to_add;
-    while (start_pos >= buf_size)
-        start_pos -= buf_size;
-    return start_pos;
-}
-
-/* Given two positions in a cyclic buffer, calculate the "distance".
- * This is to cover the case ("non-trivial") where the 'next' offset
- * is to the left of the 'start' offset. NB: This calculates the
- * space inclusive of one end-point but not the other. There is an
- * ambiguous case (which is why we use the <start_pos,offset>
- * coordinate system rather than <start_pos,end_pos> one) when 'start'
- * is the same as 'next'. It could indicate the buffer is full or it
- * can indicate the buffer is empty ... I choose the latter as it's
- * easier and usually necessary to check if the buffer is full anyway
- * before doing incremental logic (which is this useful for), but we
- * definitely need the empty case handled - in fact it's our starting
- * state!! */
-static unsigned int shmcb_cyclic_space(
-    unsigned int buf_size,
-    unsigned int start_offset,
-    unsigned int next_offset)
-{
-    /* Is it the trivial case? */
-    if (start_offset <= next_offset)
-        return (next_offset - start_offset);              /* yes */
-    else
-        return ((buf_size - start_offset) + next_offset); /* no */
-}
-
-/* A "normal-to-cyclic" memcpy ... this takes a linear block of
- * memory and copies it onto a cyclic buffer. The purpose and
- * function of this is pretty obvious, you need to cover the case
- * that the destination (cyclic) buffer has to wrap round. */
-static void shmcb_cyclic_ntoc_memcpy(
-    unsigned int buf_size,
-    unsigned char *data,
-    unsigned int dest_offset,
-    unsigned char *src, unsigned int src_len)
-{
-    /* Can it be copied all in one go? */
-    if (dest_offset + src_len < buf_size)
-        /* yes */
-        memcpy(data + dest_offset, src, src_len);
-    else {
-        /* no */
-        memcpy(data + dest_offset, src, buf_size - dest_offset);
-        memcpy(data, src + buf_size - dest_offset,
-               src_len + dest_offset - buf_size);
-    }
-    return;
-}
-
-/* A "cyclic-to-normal" memcpy ... given the last function, this
- * one's purpose is clear, it copies out of a cyclic buffer handling
- * wrapping. */
-static void shmcb_cyclic_cton_memcpy(
-    unsigned int buf_size,
-    unsigned char *dest,
-    unsigned char *data,
-    unsigned int src_offset,
-    unsigned int src_len)
-{
-    /* Can it be copied all in one go? */
-    if (src_offset + src_len < buf_size)
-        /* yes */
-        memcpy(dest, data + src_offset, src_len);
-    else {
-        /* no */
-        memcpy(dest, data + src_offset, buf_size - src_offset);
-        memcpy(dest + buf_size - src_offset, data,
-               src_len + src_offset - buf_size);
-    }
-    return;
-}
-
-/* Here's the cool hack that makes it all work ... by simply
- * making the first collection of bytes *be* our header structure
- * (casting it into the C structure), we have the perfect way to
- * maintain state in a shared-memory session cache from one call
- * (and process) to the next, use the shared memory itself! The
- * original mod_ssl shared-memory session cache uses variables
- * inside the context, but we simply use that for storing the
- * pointer to the shared memory itself. And don't forget, after
- * Apache's initialisation, this "header" is constant/read-only
- * so we can read it outside any locking.
- * <grin> - sometimes I just *love* coding y'know?!  */
-static void shmcb_get_header(void *shm_mem, SHMCBHeader **header)
-{
-    *header = (SHMCBHeader *)shm_mem;
-    return;
-}
-
-/* This is what populates our "interesting" structures. Given a
- * pointer to the header, and an index into the appropriate
- * division (this must have already been masked using the
- * division_mask by the caller!), we can populate the provided
- * SHMCBQueue and SHMCBCache structures with values and
- * pointers to the underlying shared memory. Upon returning
- * (if not FALSE), the caller can meddle with the pointer
- * values and they will map into the shared-memory directly,
- * as such there's no need to "free" or "set" the Queue or
- * Cache values, they were themselves references to the *real*
- * data. */
-static BOOL shmcb_get_division(
-    SHMCBHeader *header, SHMCBQueue *queue,
-    SHMCBCache *cache, unsigned int idx)
-{
-    unsigned char *pQueue;
-    unsigned char *pCache;
-
-    /* bounds check */
-    if (idx > (unsigned int) header->division_mask)
-        return FALSE;
-
-    /* Locate the blocks of memory storing the corresponding data */
-    pQueue = ((unsigned char *) header) + header->division_offset +
-        (idx * header->division_size);
-    pCache = pQueue + header->queue_size;
-
-    /* Populate the structures with appropriate pointers */
-    queue->first_pos = (unsigned int *) pQueue;
-
-    /* Our structures stay packed, no matter what the system's
-     * data-alignment regime is. */
-    queue->pos_count = (unsigned int *) (pQueue + sizeof(unsigned int));
-    queue->indexes = (SHMCBIndex *) (pQueue + (2 * sizeof(unsigned int)));
-    cache->first_pos = (unsigned int *) pCache;
-    cache->pos_count = (unsigned int *) (pCache + sizeof(unsigned int));
-    cache->data = (unsigned char *) (pCache + (2 * sizeof(unsigned int)));
-    queue->header = cache->header = header;
-
-    return TRUE;
-}
-
-/* This returns a pointer to the piece of shared memory containing
- * a specified 'Index'. SHMCBIndex, like SHMCBHeader, is a fixed
- * width non-referencing structure of primitive types that can be
- * cast onto the corresponding block of shared memory. Thus, by
- * returning a cast pointer to that section of shared memory, the
- * caller can read and write values to and from the "structure" and
- * they are actually reading and writing the underlying shared
- * memory. */
-static SHMCBIndex *shmcb_get_index(
-    const SHMCBQueue *queue, unsigned int idx)
-{
-    /* bounds check */
-    if (idx > queue->header->index_num)
-        return NULL;
-
-    /* Return a pointer to the index. NB: I am being horribly pendantic
-     * here so as to avoid any potential data-alignment assumptions being
-     * placed on the pointer arithmetic by the compiler (sigh). */
-    return (SHMCBIndex *)(((unsigned char *) queue->indexes) +
-                          (idx * sizeof(SHMCBIndex)));
-}
-
-/* This functions rolls expired cache (and index) entries off the front
- * of the cyclic buffers in a division. The function returns the number
- * of expired sessions. */
-static unsigned int shmcb_expire_division(
-    server_rec *s, SHMCBQueue *queue, SHMCBCache *cache)
-{
-    SHMCBIndex *idx;
-    time_t now;
-    unsigned int loop, index_num, pos_count, new_pos;
-    SHMCBHeader *header;
-
-    ssl_log(s, SSL_LOG_TRACE, "entering shmcb_expire_division");
-
-    /* We must calculate num and space ourselves based on expiry times. */
-    now = time(NULL);
-    loop = 0;
-    new_pos = shmcb_get_safe_uint(queue->first_pos);
-
-    /* Cache useful values */
-    header = queue->header;
-    index_num = header->index_num;
-    pos_count = shmcb_get_safe_uint(queue->pos_count);
-    while (loop < pos_count) {
-        idx = shmcb_get_index(queue, new_pos);
-        if (shmcb_get_safe_time(&(idx->expires)) > now)
-            /* it hasn't expired yet, we're done iterating */
-            break;
-        /* This one should be expired too. Shift to the next entry. */
-        loop++;
-        new_pos = shmcb_cyclic_increment(index_num, new_pos, 1);
-    }
-
-    /* Find the new_offset and make the expiries happen. */
-    if (loop > 0) {
-        ssl_log(s, SSL_LOG_TRACE, "will be expiring %u sessions", loop);
-        /* We calculate the new_offset by "peeking" (or in the
-         * case it's the last entry, "sneaking" ;-). */
-        if (loop == pos_count) {
-            /* We are expiring everything! This is easy to do... */
-            shmcb_set_safe_uint(queue->pos_count, 0);
-            shmcb_set_safe_uint(cache->pos_count, 0);
-        }
-        else {
-            /* The Queue is easy to adjust */
-            shmcb_set_safe_uint(queue->pos_count,
-                               shmcb_get_safe_uint(queue->pos_count) - loop);
-            shmcb_set_safe_uint(queue->first_pos, new_pos);
-            /* peek to the start of the next session */
-            idx = shmcb_get_index(queue, new_pos);
-            /* We can use shmcb_cyclic_space because we've guaranteed 
-             * we don't fit the ambiguous full/empty case. */
-            shmcb_set_safe_uint(cache->pos_count,
-                               shmcb_get_safe_uint(cache->pos_count) -
-                               shmcb_cyclic_space(header->cache_data_size,
-                                                  shmcb_get_safe_uint(cache->first_pos),
-                                                  shmcb_get_safe_uint(&(idx->offset))));
-            shmcb_set_safe_uint(cache->first_pos, shmcb_get_safe_uint(&(idx->offset)));
-        }
-        ssl_log(s, SSL_LOG_TRACE, "we now have %u sessions",
-                shmcb_get_safe_uint(queue->pos_count));
-    }
-    header->num_expiries += loop;
-    return loop;
-}
-
-/* Inserts a new encoded session into a queue/cache pair - expiring
- * (early or otherwise) any leading sessions as necessary to ensure
- * there is room. An error return (FALSE) should only happen in the
- * event of surreal values being passed on, or ridiculously small
- * cache sizes. NB: For tracing purposes, this function is also given
- * the server_rec to allow "ssl_log()". */
-static BOOL shmcb_insert_encoded_session(
-    server_rec *s, SHMCBQueue * queue,
-    SHMCBCache * cache,
-    unsigned char *encoded,
-    unsigned int encoded_len,
-    unsigned char *session_id,
-    time_t expiry_time)
-{
-    SHMCBHeader *header;
-    SHMCBIndex *idx = NULL;
-    unsigned int gap, new_pos, loop, new_offset;
-    int need;
-
-    ssl_log(s, SSL_LOG_TRACE, "entering shmcb_insert_encoded_session, "
-            "*queue->pos_count = %u", shmcb_get_safe_uint(queue->pos_count));
-
-    /* If there's entries to expire, ditch them first thing. */
-    shmcb_expire_division(s, queue, cache);
-    header = cache->header;
-    gap = header->cache_data_size - shmcb_get_safe_uint(cache->pos_count);
-    if (gap < encoded_len) {
-        new_pos = shmcb_get_safe_uint(queue->first_pos);
-        loop = 0;
-        need = (int) encoded_len - (int) gap;
-        while ((need > 0) && (loop + 1 < shmcb_get_safe_uint(queue->pos_count))) {
-            new_pos = shmcb_cyclic_increment(header->index_num, new_pos, 1);
-            loop += 1;
-            idx = shmcb_get_index(queue, new_pos);
-            need = (int) encoded_len - (int) gap -
-                shmcb_cyclic_space(header->cache_data_size,
-                                   shmcb_get_safe_uint(cache->first_pos),
-                                   shmcb_get_safe_uint(&(idx->offset)));
-        }
-        if (loop > 0) {
-            ssl_log(s, SSL_LOG_TRACE, "about to scroll %u sessions from %u",
-                    loop, shmcb_get_safe_uint(queue->pos_count));
-            /* We are removing "loop" items from the cache. */
-            shmcb_set_safe_uint(cache->pos_count,
-                                shmcb_get_safe_uint(cache->pos_count) -
-                                shmcb_cyclic_space(header->cache_data_size,
-                                                   shmcb_get_safe_uint(cache->first_pos),
-                                                   shmcb_get_safe_uint(&(idx->offset))));
-            shmcb_set_safe_uint(cache->first_pos, shmcb_get_safe_uint(&(idx->offset)));
-            shmcb_set_safe_uint(queue->pos_count, shmcb_get_safe_uint(queue->pos_count) - loop);
-            shmcb_set_safe_uint(queue->first_pos, new_pos);
-            ssl_log(s, SSL_LOG_TRACE, "now only have %u sessions",
-                    shmcb_get_safe_uint(queue->pos_count));
-            /* Update the stats!!! */
-            header->num_scrolled += loop;
-        }
-    }
-
-    /* probably unecessary checks, but I'll leave them until this code
-     * is verified. */
-    if (shmcb_get_safe_uint(cache->pos_count) + encoded_len >
-        header->cache_data_size) {
-        ssl_log(s, SSL_LOG_ERROR, "shmcb_insert_encoded_session, "
-                "internal error");
-        return FALSE;
-    }
-    if (shmcb_get_safe_uint(queue->pos_count) == header->index_num) {
-        ssl_log(s, SSL_LOG_ERROR, "shmcb_insert_encoded_session, "
-                "internal error");
-        return FALSE;
-    }
-    ssl_log(s, SSL_LOG_TRACE, "we have %u bytes and %u indexes free - "
-            "enough", header->cache_data_size -
-            shmcb_get_safe_uint(cache->pos_count), header->index_num -
-            shmcb_get_safe_uint(queue->pos_count));
-
-
-    /* HERE WE ASSUME THAT THE NEW SESSION SHOULD GO ON THE END! I'M NOT
-     * CHECKING WHETHER IT SHOULD BE GENUINELY "INSERTED" SOMEWHERE.
-     *
-     * We either fix that, or find out at a "higher" (read "mod_ssl")
-     * level whether it is possible to have distinct session caches for
-     * any attempted tomfoolery to do with different session timeouts.
-     * Knowing in advance that we can have a cache-wide constant timeout
-     * would make this stuff *MUCH* more efficient. Mind you, it's very
-     * efficient right now because I'm ignoring this problem!!!
-     */
-
-    /* Increment to the first unused byte */
-    new_offset = shmcb_cyclic_increment(header->cache_data_size,
-                                        shmcb_get_safe_uint(cache->first_pos),
-                                        shmcb_get_safe_uint(cache->pos_count));
-    /* Copy the DER-encoded session into place */
-    shmcb_cyclic_ntoc_memcpy(header->cache_data_size, cache->data,
-                            new_offset, encoded, encoded_len);
-    /* Get the new index that this session is stored in. */
-    new_pos = shmcb_cyclic_increment(header->index_num,
-                                     shmcb_get_safe_uint(queue->first_pos),
-                                     shmcb_get_safe_uint(queue->pos_count));
-    ssl_log(s, SSL_LOG_TRACE, "storing in index %u, at offset %u", new_pos,
-            new_offset);
-    idx = shmcb_get_index(queue, new_pos);
-    if (idx == NULL) {
-        ssl_log(s, SSL_LOG_ERROR, "shmcb_insert_encoded_session, "
-                "internal error");
-        return FALSE;
-    }
-    memset(idx, 0, sizeof(SHMCBIndex));
-    shmcb_set_safe_time(&(idx->expires), expiry_time);
-    shmcb_set_safe_uint(&(idx->offset), new_offset);
-
-    /* idx->removed = (unsigned char)0; */ /* Not needed given the memset above. */
-    idx->s_id2 = session_id[1];
-    ssl_log(s, SSL_LOG_TRACE, "session_id[0]=%u, idx->s_id2=%u",
-            session_id[0], session_id[1]);
-
-    /* All that remains is to adjust the cache's and queue's "pos_count"s. */
-    shmcb_set_safe_uint(cache->pos_count,
-                       shmcb_get_safe_uint(cache->pos_count) + encoded_len);
-    shmcb_set_safe_uint(queue->pos_count,
-                       shmcb_get_safe_uint(queue->pos_count) + 1);
-
-    /* And just for good debugging measure ... */
-    ssl_log(s, SSL_LOG_TRACE, "leaving now with %u bytes in the cache and "
-            "%u indexes", shmcb_get_safe_uint(cache->pos_count),
-            shmcb_get_safe_uint(queue->pos_count));
-    ssl_log(s, SSL_LOG_TRACE, "leaving shmcb_insert_encoded_session");
-    return TRUE;
-}
-
-/* Performs a lookup into a queue/cache pair for a
- * session_id. If found, the session is deserialised
- * and returned, otherwise NULL. */
-static SSL_SESSION *shmcb_lookup_session_id(
-    server_rec *s, SHMCBQueue *queue,
-    SHMCBCache *cache, UCHAR *id,
-    unsigned int idlen)
-{
-    unsigned char tempasn[SSL_SESSION_MAX_DER];
-    SHMCBIndex *idx;
-    SHMCBHeader *header;
-    SSL_SESSION *pSession = NULL;
-    unsigned int curr_pos, loop, count;
-    unsigned char *ptr;
-    time_t now;
-
-    ssl_log(s, SSL_LOG_TRACE, "entering shmcb_lookup_session_id");
-
-    /* If there are entries to expire, ditch them first thing. */
-    shmcb_expire_division(s, queue, cache);
-    now = time(NULL);
-    curr_pos = shmcb_get_safe_uint(queue->first_pos);
-    count = shmcb_get_safe_uint(queue->pos_count);
-    header = queue->header;
-    for (loop = 0; loop < count; loop++) {
-        ssl_log(s, SSL_LOG_TRACE, "loop=%u, count=%u, curr_pos=%u",
-                loop, count, curr_pos);
-        idx = shmcb_get_index(queue, curr_pos);
-        ssl_log(s, SSL_LOG_TRACE, "idx->s_id2=%u, id[1]=%u, offset=%u",
-                idx->s_id2, id[1], shmcb_get_safe_uint(&(idx->offset)));
-        /* Only look into the session further if;
-         * (a) the second byte of the session_id matches,
-         * (b) the "removed" flag isn't set,
-         * (c) the session hasn't expired yet.
-         * We do (c) like this so that it saves us having to
-         * do natural expiries ... naturally expired sessions
-         * scroll off the front anyway when the cache is full and
-         * "rotating", the only real issue that remains is the
-         * removal or disabling of forcibly killed sessions. */
-        if ((idx->s_id2 == id[1]) && !idx->removed &&
-            (shmcb_get_safe_time(&(idx->expires)) > now)) {
-            ssl_log(s, SSL_LOG_TRACE, "at index %u, found possible "
-                    "session match", curr_pos);
-            shmcb_cyclic_cton_memcpy(header->cache_data_size,
-                                     tempasn, cache->data,
-                                     shmcb_get_safe_uint(&(idx->offset)),
-                                     SSL_SESSION_MAX_DER);
-            ptr = tempasn;
-            pSession = d2i_SSL_SESSION(NULL, &ptr, SSL_SESSION_MAX_DER);
-            if (pSession == NULL) {
-                ssl_log(s, SSL_LOG_ERROR, "scach2_lookup_"
-                        "session_id, internal error");
-                return NULL;
-            }
-            if ((pSession->session_id_length == idlen) &&
-                (memcmp(pSession->session_id, id, idlen) == 0)) {
-                ssl_log(s, SSL_LOG_TRACE, "a match!");
-                return pSession;
-            }
-            ssl_log(s, SSL_LOG_TRACE, "not a match");
-            SSL_SESSION_free(pSession);
-            pSession = NULL;
-        }
-        curr_pos = shmcb_cyclic_increment(header->index_num, curr_pos, 1);
-    }
-    ssl_log(s, SSL_LOG_TRACE, "no matching sessions were found");
-    return NULL;
-}
-
-static BOOL shmcb_remove_session_id(
-    server_rec *s, SHMCBQueue *queue,
-    SHMCBCache *cache, UCHAR *id, unsigned int idlen)
-{
-    unsigned char tempasn[SSL_SESSION_MAX_DER];
-    SSL_SESSION *pSession = NULL;
-    SHMCBIndex *idx;
-    SHMCBHeader *header;
-    unsigned int curr_pos, loop, count;
-    unsigned char *ptr;
-    BOOL to_return = FALSE;
-
-    ssl_log(s, SSL_LOG_TRACE, "entering shmcb_remove_session_id");
-
-    /* If there's entries to expire, ditch them first thing. */
-    /* shmcb_expire_division(s, queue, cache); */
-
-    /* Regarding the above ... hmmm ... I know my expiry code is slightly
-     * "faster" than all this remove stuff ... but if the higher level
-     * code calls a "remove" operation (and this *only* seems to happen
-     * when it has spotted an expired session before we had a chance to)
-     * then it should get credit for a remove (stats-wise). Also, in the
-     * off-chance that the server *requests* a renegotiate and wants to
-     * wipe the session clean we should give that priority over our own
-     * routine expiry handling. So I've moved the expiry check to *after*
-     * this general remove stuff. */
-    curr_pos = shmcb_get_safe_uint(queue->first_pos);
-    count = shmcb_get_safe_uint(queue->pos_count);
-    header = cache->header;
-    for (loop = 0; loop < count; loop++) {
-        ssl_log(s, SSL_LOG_TRACE, "loop=%u, count=%u, curr_pos=%u",
-                loop, count, curr_pos);
-        idx = shmcb_get_index(queue, curr_pos);
-        ssl_log(s, SSL_LOG_TRACE, "idx->s_id2=%u, id[1]=%u", idx->s_id2,
-                id[1]);
-        /* Only look into the session further if the second byte of the
-         * session_id matches. */
-        if (idx->s_id2 == id[1]) {
-            ssl_log(s, SSL_LOG_TRACE, "at index %u, found possible "
-                    "session match", curr_pos);
-            shmcb_cyclic_cton_memcpy(header->cache_data_size,
-                                     tempasn, cache->data,
-                                     shmcb_get_safe_uint(&(idx->offset)),
-                                     SSL_SESSION_MAX_DER);
-            ptr = tempasn;
-            pSession = d2i_SSL_SESSION(NULL, &ptr, SSL_SESSION_MAX_DER);
-            if (pSession == NULL) {
-                ssl_log(s, SSL_LOG_ERROR, "shmcb_remove_session_id, "
-                        "internal error");
-                goto end;
-            }
-            if ((pSession->session_id_length == idlen) 
-                 && (memcmp(id, pSession->session_id, idlen) == 0)) {
-                ssl_log(s, SSL_LOG_TRACE, "a match!");
-                /* Scrub out this session "quietly" */
-                idx->removed = (unsigned char) 1;
-                SSL_SESSION_free(pSession);
-                to_return = TRUE;
-                goto end;
-            }
-            ssl_log(s, SSL_LOG_TRACE, "not a match");
-            SSL_SESSION_free(pSession);
-            pSession = NULL;
-        }
-        curr_pos = shmcb_cyclic_increment(header->index_num, curr_pos, 1);
-    }
-    ssl_log(s, SSL_LOG_TRACE, "no matching sessions were found");
-
-    /* If there's entries to expire, ditch them now. */
-    shmcb_expire_division(s, queue, cache);
-end:
-    ssl_log(s, SSL_LOG_TRACE, "leaving shmcb_remove_session_id");
-    return to_return;
-}
diff --git a/modules/ssl/ssl_scache_shmht.c b/modules/ssl/ssl_scache_shmht.c
deleted file mode 100644
index 1901efe..0000000
--- a/modules/ssl/ssl_scache_shmht.c
+++ /dev/null
@@ -1,379 +0,0 @@
-/*                      _             _
-**  _ __ ___   ___   __| |    ___ ___| |  mod_ssl
-** | '_ ` _ \ / _ \ / _` |   / __/ __| |  Apache Interface to OpenSSL
-** | | | | | | (_) | (_| |   \__ \__ \ |  www.modssl.org
-** |_| |_| |_|\___/ \__,_|___|___/___/_|  ftp.modssl.org
-**                      |_____|
-**  ssl_scache_shmht.c
-**  Session Cache via Shared Memory (Hash Table Variant)
-*/
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- */
-
-#include "mod_ssl.h"
-
-/*
- *  Wrapper functions for table library which resemble malloc(3) & Co 
- *  but use the variants from the MM shared memory library.
- */
-
-static void *ssl_scache_shmht_malloc(void *opt_param, size_t size)
-{
-    SSLModConfigRec *mc = myModConfig((server_rec *)opt_param);
-
-    apr_rmm_off_t off = apr_rmm_calloc(mc->pSessionCacheDataRMM, size);
-    return apr_rmm_addr_get(mc->pSessionCacheDataRMM, off);
-}
-
-static void *ssl_scache_shmht_calloc(void *opt_param,
-                                     size_t number, size_t size)
-{
-    SSLModConfigRec *mc = myModConfig((server_rec *)opt_param);
-
-    apr_rmm_off_t off = apr_rmm_calloc(mc->pSessionCacheDataRMM, (number*size));
-
-    return apr_rmm_addr_get(mc->pSessionCacheDataRMM, off);
-}
-
-static void *ssl_scache_shmht_realloc(void *opt_param, void *ptr, size_t size)
-{
-    SSLModConfigRec *mc = myModConfig((server_rec *)opt_param);
-
-    apr_rmm_off_t off = apr_rmm_realloc(mc->pSessionCacheDataRMM, ptr, size);
-    return apr_rmm_addr_get(mc->pSessionCacheDataRMM, off);
-}
-
-static void ssl_scache_shmht_free(void *opt_param, void *ptr)
-{
-    SSLModConfigRec *mc = myModConfig((server_rec *)opt_param);
-
-    apr_rmm_off_t off = apr_rmm_offset_get(mc->pSessionCacheDataRMM, ptr);
-    apr_rmm_free(mc->pSessionCacheDataRMM, off);
-    return;
-}
-
-/*
- * Now the actual session cache implementation
- * based on a hash table inside a shared memory segment.
- */
-
-void ssl_scache_shmht_init(server_rec *s, apr_pool_t *p)
-{
-    SSLModConfigRec *mc = myModConfig(s);
-    table_t *ta;
-    int ta_errno;
-    apr_size_t avail;
-    int n;
-    apr_status_t rv;
-
-    /*
-     * Create shared memory segment
-     */
-    if (mc->szSessionCacheDataFile == NULL) {
-        ssl_log(s, SSL_LOG_ERROR, "SSLSessionCache required");
-        ssl_die();
-    }
-
-    if ((rv = apr_shm_create(&(mc->pSessionCacheDataMM), 
-                   mc->nSessionCacheDataSize, 
-                   mc->szSessionCacheDataFile, mc->pPool)) != APR_SUCCESS) {
-        ssl_log(s, SSL_LOG_ERROR,
-                "Cannot allocate shared memory: %d", rv);
-        ssl_die();
-    }
-
-    if ((rv = apr_rmm_init(&(mc->pSessionCacheDataRMM), NULL,
-                   apr_shm_baseaddr_get(mc->pSessionCacheDataMM),
-                   mc->nSessionCacheDataSize, mc->pPool)) != APR_SUCCESS) {
-        ssl_log(s, SSL_LOG_ERROR,
-                "Cannot initialize rmm: %d", rv);
-        ssl_die();
-    }
-ssl_log(s, SSL_LOG_ERROR, "initialize MM %ld RMM %ld",
-        mc->pSessionCacheDataMM, mc->pSessionCacheDataRMM);
-
-    /*
-     * Create hash table in shared memory segment
-     */
-    avail = mc->nSessionCacheDataSize;
-    n = (avail/2) / 1024;
-    n = n < 10 ? 10 : n;
-
-    /*
-     * Passing server_rec as opt_param to table_alloc so that we can do
-     * logging if required ssl_util_table. Otherwise, mc is sufficient.
-     */ 
-    if ((ta = table_alloc(n, &ta_errno, 
-                          ssl_scache_shmht_malloc,  
-                          ssl_scache_shmht_calloc, 
-                          ssl_scache_shmht_realloc, 
-                          ssl_scache_shmht_free, s )) == NULL) {
-        ssl_log(s, SSL_LOG_ERROR,
-                "Cannot allocate hash table in shared memory: %s",
-                table_strerror(ta_errno));
-        ssl_die();
-    }
-
-    table_attr(ta, TABLE_FLAG_AUTO_ADJUST|TABLE_FLAG_ADJUST_DOWN);
-    table_set_data_alignment(ta, sizeof(char *));
-    table_clear(ta);
-    mc->tSessionCacheDataTable = ta;
-
-    /*
-     * Log the done work
-     */
-    ssl_log(s, SSL_LOG_INFO, 
-            "Init: Created hash-table (%d buckets) "
-            "in shared memory (%d bytes) for SSL session cache", n, avail);
-    return;
-}
-
-void ssl_scache_shmht_kill(server_rec *s)
-{
-    SSLModConfigRec *mc = myModConfig(s);
-
-    if (mc->pSessionCacheDataRMM != NULL) {
-        apr_rmm_destroy(mc->pSessionCacheDataRMM);
-        mc->pSessionCacheDataRMM = NULL;
-    }
-
-    if (mc->pSessionCacheDataMM != NULL) {
-        apr_shm_destroy(mc->pSessionCacheDataMM);
-        mc->pSessionCacheDataMM = NULL;
-    }
-    return;
-}
-
-BOOL ssl_scache_shmht_store(server_rec *s, UCHAR *id, int idlen, time_t expiry, SSL_SESSION *sess)
-{
-    SSLModConfigRec *mc = myModConfig(s);
-    void *vp;
-    UCHAR ucaData[SSL_SESSION_MAX_DER];
-    int nData;
-    UCHAR *ucp;
-
-    /* streamline session data */
-    if ((nData = i2d_SSL_SESSION(sess, NULL)) > sizeof(ucaData))
-        return FALSE;
-    ucp = ucaData;
-    i2d_SSL_SESSION(sess, &ucp);
-
-    ssl_mutex_on(s);
-    if (table_insert_kd(mc->tSessionCacheDataTable, 
-                        id, idlen, NULL, sizeof(time_t)+nData,
-                        NULL, &vp, 1) != TABLE_ERROR_NONE) {
-        ssl_mutex_off(s);
-        return FALSE;
-    }
-    memcpy(vp, &expiry, sizeof(time_t));
-    memcpy((char *)vp+sizeof(time_t), ucaData, nData);
-    ssl_mutex_off(s);
-
-    /* allow the regular expiring to occur */
-    ssl_scache_shmht_expire(s);
-
-    return TRUE;
-}
-
-SSL_SESSION *ssl_scache_shmht_retrieve(server_rec *s, UCHAR *id, int idlen)
-{
-    SSLModConfigRec *mc = myModConfig(s);
-    void *vp;
-    SSL_SESSION *sess = NULL;
-    UCHAR *ucpData;
-    int nData;
-    time_t expiry;
-    time_t now;
-    int n;
-
-    /* allow the regular expiring to occur */
-    ssl_scache_shmht_expire(s);
-
-    /* lookup key in table */
-    ssl_mutex_on(s);
-    if (table_retrieve(mc->tSessionCacheDataTable,
-                       id, idlen, &vp, &n) != TABLE_ERROR_NONE) {
-        ssl_mutex_off(s);
-        return NULL;
-    }
-
-    /* copy over the information to the SCI */
-    nData = n-sizeof(time_t);
-    ucpData = (UCHAR *)malloc(nData);
-    if (ucpData == NULL) {
-        ssl_mutex_off(s);
-        return NULL;
-    }
-    memcpy(&expiry, vp, sizeof(time_t));
-    memcpy(ucpData, (char *)vp+sizeof(time_t), nData);
-    ssl_mutex_off(s);
-
-    /* make sure the stuff is still not expired */
-    now = time(NULL);
-    if (expiry <= now) {
-        ssl_scache_shmht_remove(s, id, idlen);
-        return NULL;
-    }
-
-    /* unstreamed SSL_SESSION */
-    sess = d2i_SSL_SESSION(NULL, &ucpData, nData);
-
-    return sess;
-}
-
-void ssl_scache_shmht_remove(server_rec *s, UCHAR *id, int idlen)
-{
-    SSLModConfigRec *mc = myModConfig(s);
-
-    /* remove value under key in table */
-    ssl_mutex_on(s);
-    table_delete(mc->tSessionCacheDataTable, id, idlen, NULL, NULL);
-    ssl_mutex_off(s);
-    return;
-}
-
-void ssl_scache_shmht_expire(server_rec *s)
-{
-    SSLModConfigRec *mc = myModConfig(s);
-    SSLSrvConfigRec *sc = mySrvConfig(s);
-    static time_t tLast = 0;
-    table_linear_t iterator;
-    time_t tExpiresAt;
-    void *vpKey;
-    void *vpKeyThis;
-    void *vpData;
-    int nKey;
-    int nKeyThis;
-    int nData;
-    int nElements = 0;
-    int nDeleted = 0;
-    int bDelete;
-    int rc;
-    time_t tNow;
-
-    /*
-     * make sure the expiration for still not-accessed session
-     * cache entries is done only from time to time
-     */
-    tNow = time(NULL);
-    if (tNow < tLast+sc->nSessionCacheTimeout)
-        return;
-    tLast = tNow;
-
-    ssl_mutex_on(s);
-    if (table_first_r(mc->tSessionCacheDataTable, &iterator,
-                      &vpKey, &nKey, &vpData, &nData) == TABLE_ERROR_NONE) {
-        do {
-            bDelete = FALSE;
-            nElements++;
-            if (nData < sizeof(time_t) || vpData == NULL)
-                bDelete = TRUE;
-            else {
-                memcpy(&tExpiresAt, vpData, sizeof(time_t));
-                /* 
-                 * XXX : Force the record to be cleaned up. TBD (Madhu)
-                 * tExpiresAt = tNow;
-                 */
-                if (tExpiresAt <= tNow)
-                   bDelete = TRUE;
-            }
-            vpKeyThis = vpKey;
-            nKeyThis  = nKey;
-            rc = table_next_r(mc->tSessionCacheDataTable, &iterator,
-                              &vpKey, &nKey, &vpData, &nData);
-            if (bDelete) {
-                table_delete(mc->tSessionCacheDataTable,
-                             vpKeyThis, nKeyThis, NULL, NULL);
-                nDeleted++;
-            }
-        } while (rc == TABLE_ERROR_NONE); 
-        /* (vpKeyThis != vpKey) && (nKeyThis != nKey) */
-    }
-    ssl_mutex_off(s);
-    ssl_log(s, SSL_LOG_TRACE, "Inter-Process Session Cache (SHMHT) Expiry: "
-            "old: %d, new: %d, removed: %d",
-            nElements, nElements-nDeleted, nDeleted);
-    return;
-}
-
-void ssl_scache_shmht_status(server_rec *s, apr_pool_t *p, void (*func)(char *, void *), void *arg)
-{
-    SSLModConfigRec *mc = myModConfig(s);
-    void *vpKey;
-    void *vpData;
-    int nKey;
-    int nData;
-    int nElem;
-    int nSize;
-    int nAverage;
-
-    nElem = 0;
-    nSize = 0;
-    ssl_mutex_on(s);
-    if (table_first(mc->tSessionCacheDataTable,
-                    &vpKey, &nKey, &vpData, &nData) == TABLE_ERROR_NONE) {
-        do {
-            if (vpKey == NULL || vpData == NULL)
-                continue;
-            nElem += 1;
-            nSize += nData;
-        } while (table_next(mc->tSessionCacheDataTable,
-                        &vpKey, &nKey, &vpData, &nData) == TABLE_ERROR_NONE);
-    }
-    ssl_mutex_off(s);
-    if (nSize > 0 && nElem > 0)
-        nAverage = nSize / nElem;
-    else
-        nAverage = 0;
-    func(apr_psprintf(p, "cache type: <b>SHMHT</b>, maximum size: <b>%d</b> bytes<br>", mc->nSessionCacheDataSize), arg);
-    func(apr_psprintf(p, "current sessions: <b>%d</b>, current size: <b>%d</b> bytes<br>", nElem, nSize), arg);
-    func(apr_psprintf(p, "average session size: <b>%d</b> bytes<br>", nAverage), arg);
-    return;
-}
diff --git a/modules/ssl/ssl_util.c b/modules/ssl/ssl_util.c
deleted file mode 100644
index 3ef632a..0000000
--- a/modules/ssl/ssl_util.c
+++ /dev/null
@@ -1,472 +0,0 @@
-/*                      _             _
-**  _ __ ___   ___   __| |    ___ ___| |  mod_ssl
-** | '_ ` _ \ / _ \ / _` |   / __/ __| |  Apache Interface to OpenSSL
-** | | | | | | (_) | (_| |   \__ \__ \ |  www.modssl.org
-** |_| |_| |_|\___/ \__,_|___|___/___/_|  ftp.modssl.org
-**                      |_____|
-**  ssl_util.c
-**  Utility Functions
-*/
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- */
-                             /* ``Every day of my life
-                                  I am forced to add another
-                                  name to the list of people
-                                  who piss me off!''
-                                            -- Calvin          */
-
-#include "mod_ssl.h"
-#include "ap_mpm.h"
-#include "apr_thread_mutex.h"
-
-/*  _________________________________________________________________
-**
-**  Utility Functions
-**  _________________________________________________________________
-*/
-
-char *ssl_util_vhostid(apr_pool_t *p, server_rec *s)
-{
-    char *id;
-    SSLSrvConfigRec *sc;
-    char *host;
-    apr_port_t port;
-
-    host = s->server_hostname;
-    if (s->port != 0)
-        port = s->port;
-    else {
-        sc = mySrvConfig(s);
-        if (sc->bEnabled)
-            port = DEFAULT_HTTPS_PORT;
-        else
-            port = DEFAULT_HTTP_PORT;
-    }
-    id = apr_psprintf(p, "%s:%lu", host, (unsigned long)port);
-    return id;
-}
-
-void ssl_util_strupper(char *s)
-{
-    for (; *s; ++s)
-        *s = apr_toupper(*s);
-    return;
-}
-
-static const char ssl_util_uuencode_six2pr[64+1] =
-    "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
-
-void ssl_util_uuencode(char *szTo, const char *szFrom, BOOL bPad)
-{
-    ssl_util_uuencode_binary((unsigned char *)szTo,
-                             (const unsigned char *)szFrom,
-                             strlen(szFrom), bPad);
-}
-
-void ssl_util_uuencode_binary(unsigned char *szTo,
-                              const unsigned char *szFrom,
-                              int nLength, BOOL bPad)
-{
-    const unsigned char *s;
-    int nPad = 0;
-
-    for (s = szFrom; nLength > 0; s += 3) {
-        *szTo++ = ssl_util_uuencode_six2pr[s[0] >> 2];
-        *szTo++ = ssl_util_uuencode_six2pr[(s[0] << 4 | s[1] >> 4) & 0x3f];
-        if (--nLength == 0) {
-            nPad = 2;
-            break;
-        }
-        *szTo++ = ssl_util_uuencode_six2pr[(s[1] << 2 | s[2] >> 6) & 0x3f];
-        if (--nLength == 0) {
-            nPad = 1;
-            break;
-        }
-        *szTo++ = ssl_util_uuencode_six2pr[s[2] & 0x3f];
-        --nLength;
-    }
-    while(bPad && nPad--) {
-        *szTo++ = NUL;
-    }
-    *szTo = NUL;
-    return;
-}
-
-apr_file_t *ssl_util_ppopen(server_rec *s, apr_pool_t *p, const char *cmd,
-                            const char * const *argv)
-{
-    apr_procattr_t *procattr;
-    apr_proc_t *proc;
-
-    if (apr_procattr_create(&procattr, p) != APR_SUCCESS) 
-        return NULL;
-    if (apr_procattr_io_set(procattr, APR_FULL_BLOCK, APR_FULL_BLOCK, 
-                            APR_FULL_BLOCK) != APR_SUCCESS)
-        return NULL;
-    if (apr_procattr_dir_set(procattr, 
-                             ap_make_dirstr_parent(p, cmd)) != APR_SUCCESS)
-        return NULL;
-    if (apr_procattr_cmdtype_set(procattr, APR_PROGRAM) != APR_SUCCESS)
-        return NULL;
-    if ((proc = (apr_proc_t *)apr_pcalloc(p, sizeof(apr_proc_t))) == NULL)
-        return NULL;
-    if (apr_proc_create(proc, cmd, argv, NULL, procattr, p) != APR_SUCCESS)
-        return NULL;
-    return proc->out;
-}
-
-void ssl_util_ppclose(server_rec *s, apr_pool_t *p, apr_file_t *fp)
-{
-    apr_file_close(fp);
-    return;
-}
-
-/*
- * Run a filter program and read the first line of its stdout output
- */
-char *ssl_util_readfilter(server_rec *s, apr_pool_t *p, const char *cmd,
-                          const char * const *argv)
-{
-    static char buf[MAX_STRING_LEN];
-    apr_file_t *fp;
-    apr_size_t nbytes = 1;
-    char c;
-    int k;
-
-    if ((fp = ssl_util_ppopen(s, p, cmd, argv)) == NULL)
-        return NULL;
-    /* XXX: we are reading 1 byte at a time here */
-    for (k = 0; apr_file_read(fp, &c, &nbytes) == APR_SUCCESS
-                && nbytes == 1 && (k < MAX_STRING_LEN-1)     ; ) {
-        if (c == '\n' || c == '\r')
-            break;
-        buf[k++] = c;
-    }
-    buf[k] = NUL;
-    ssl_util_ppclose(s, p, fp);
-
-    return buf;
-}
-
-BOOL ssl_util_path_check(ssl_pathcheck_t pcm, const char *path, apr_pool_t *p)
-{
-    apr_finfo_t finfo;
-
-    if (path == NULL)
-        return FALSE;
-    if (pcm & SSL_PCM_EXISTS && apr_stat(&finfo, path, 
-                                APR_FINFO_TYPE|APR_FINFO_SIZE, p) != 0)
-        return FALSE;
-    if (pcm & SSL_PCM_ISREG && finfo.filetype != APR_REG)
-        return FALSE;
-    if (pcm & SSL_PCM_ISDIR && finfo.filetype != APR_DIR)
-        return FALSE;
-    if (pcm & SSL_PCM_ISNONZERO && finfo.size <= 0)
-        return FALSE;
-    return TRUE;
-}
-
-ssl_algo_t ssl_util_algotypeof(X509 *pCert, EVP_PKEY *pKey) 
-{
-    ssl_algo_t t;
-            
-    t = SSL_ALGO_UNKNOWN;
-    if (pCert != NULL)
-        pKey = X509_get_pubkey(pCert);
-    if (pKey != NULL) {
-        switch (EVP_PKEY_key_type(pKey)) {
-            case EVP_PKEY_RSA: 
-                t = SSL_ALGO_RSA;
-                break;
-            case EVP_PKEY_DSA: 
-                t = SSL_ALGO_DSA;
-                break;
-            default:
-                break;
-        }
-    }
-    return t;
-}
-
-char *ssl_util_algotypestr(ssl_algo_t t) 
-{
-    char *cp;
-
-    cp = "UNKNOWN";
-    switch (t) {
-        case SSL_ALGO_RSA: 
-            cp = "RSA";
-            break;
-        case SSL_ALGO_DSA: 
-            cp = "DSA";
-            break;
-        default:
-            break;
-    }
-    return cp;
-}
-
-char *ssl_util_ptxtsub(apr_pool_t *p, const char *cpLine,
-                       const char *cpMatch, char *cpSubst)
-{
-#define MAX_PTXTSUB 100
-    char *cppMatch[MAX_PTXTSUB];
-    char *cpResult;
-    int nResult;
-    int nLine;
-    int nSubst;
-    int nMatch;
-    char *cpI;
-    char *cpO;
-    char *cp;
-    int i;
-
-    /*
-     * Pass 1: find substitution locations and calculate sizes
-     */
-    nLine  = strlen(cpLine);
-    nMatch = strlen(cpMatch);
-    nSubst = strlen(cpSubst);
-    for (cpI = (char *)cpLine, i = 0, nResult = 0;
-         cpI < cpLine+nLine && i < MAX_PTXTSUB;    ) {
-        if ((cp = strstr(cpI, cpMatch)) != NULL) {
-            cppMatch[i++] = cp;
-            nResult += ((cp-cpI)+nSubst);
-            cpI = (cp+nMatch);
-        }
-        else {
-            nResult += strlen(cpI);
-            break;
-        }
-    }
-    cppMatch[i] = NULL;
-    if (i == 0)
-        return NULL;
-
-    /*
-     * Pass 2: allocate memory and assemble result
-     */
-    cpResult = apr_pcalloc(p, nResult+1);
-    for (cpI = (char *)cpLine, cpO = cpResult, i = 0;
-         cppMatch[i] != NULL;
-         i++) {
-        apr_cpystrn(cpO, cpI, cppMatch[i]-cpI+1);
-        cpO += (cppMatch[i]-cpI);
-        apr_cpystrn(cpO, cpSubst, nSubst+1);
-        cpO += nSubst;
-        cpI = (cppMatch[i]+nMatch);
-    }
-    apr_cpystrn(cpO, cpI, cpResult+nResult-cpO+1);
-
-    return cpResult;
-}
-
-/*
- * certain key and cert data needs to survive restarts,
- * which are stored in the user data table of s->process->pool.
- * to prevent "leaking" of this data, we use malloc/free
- * rather than apr_palloc and these wrappers to help make sure
- * we do not leak the malloc-ed data.
- */
-unsigned char *ssl_asn1_table_set(apr_hash_t *table,
-                                  const char *key,
-                                  long int length)
-{
-    apr_ssize_t klen = strlen(key);
-    ssl_asn1_t *asn1 = apr_hash_get(table, key, klen);
-
-    /*
-     * if a value for this key already exists,
-     * reuse as much of the already malloc-ed data
-     * as possible.
-     */
-    if (asn1) {
-        if (asn1->nData != length) {
-            free(asn1->cpData); /* XXX: realloc? */
-            asn1->cpData = NULL;
-        }
-    }
-    else {
-        asn1 = malloc(sizeof(*asn1));
-        asn1->source_mtime = 0; /* used as a note for encrypted private keys */
-        asn1->cpData = NULL;
-    }
-
-    asn1->nData = length;
-    if (!asn1->cpData) {
-        asn1->cpData = malloc(length);
-    }
-
-    apr_hash_set(table, key, klen, asn1);
-
-    return asn1->cpData; /* caller will assign a value to this */
-}
-
-ssl_asn1_t *ssl_asn1_table_get(apr_hash_t *table,
-                               const char *key)
-{
-    return (ssl_asn1_t *)apr_hash_get(table, key, APR_HASH_KEY_STRING);
-}
-
-void ssl_asn1_table_unset(apr_hash_t *table,
-                          const char *key)
-{
-    apr_ssize_t klen = strlen(key);
-    ssl_asn1_t *asn1 = apr_hash_get(table, key, klen);
-
-    if (!asn1) {
-        return;
-    }
-
-    if (asn1->cpData) {
-        free(asn1->cpData);
-    }
-    free(asn1);
-
-    apr_hash_set(table, key, klen, NULL);
-}
-
-static const char *ssl_asn1_key_types[] = {"RSA", "DSA"};
-
-const char *ssl_asn1_keystr(int keytype)
-{
-    if (keytype >= SSL_AIDX_MAX) {
-        return NULL;
-    }
-
-    return ssl_asn1_key_types[keytype];
-}
-
-const char *ssl_asn1_table_keyfmt(apr_pool_t *p,
-                                  const char *id,
-                                  int keytype)
-{
-    const char *keystr = ssl_asn1_keystr(keytype);
-
-    return apr_pstrcat(p, id, ":", keystr, NULL);
-}
-
-
-#if APR_HAS_THREADS
-/*
- * To ensure thread-safetyness in OpenSSL - work in progress
- */
-
-static apr_thread_mutex_t **lock_cs;
-/* FIXME: CRYPTO_NUM_LOCKS may vary between releases - replace with
-   CRYPT_num_locks() [Ben, Jan 2002] */
-static long                 lock_count[CRYPTO_NUM_LOCKS];
-
-static void ssl_util_thr_lock(int mode, int type, const char *file, int line)
-{
-    if (mode & CRYPTO_LOCK) {
-        apr_thread_mutex_lock(lock_cs[type]);
-        lock_count[type]++;
-    }
-    else {
-        apr_thread_mutex_unlock(lock_cs[type]);
-    }
-}
-
-static unsigned long ssl_util_thr_id(void)
-{
-    return (unsigned long) apr_os_thread_current();
-}
-
-static apr_status_t ssl_util_thread_cleanup(void *data)
-{
-    int i;
-
-    CRYPTO_set_locking_callback(NULL);
-
-    for (i = 0; i < CRYPTO_NUM_LOCKS; i++) {
-        apr_thread_mutex_destroy(lock_cs[i]);
-    }
-
-    return APR_SUCCESS;
-}
-
-void ssl_util_thread_setup(server_rec *s, apr_pool_t *p)
-{
-    int i, threaded_mpm;
-    /* This variable is not used? -aaron
-    SSLModConfigRec *mc = myModConfig(s);
-    */
-
-    ap_mpm_query(AP_MPMQ_IS_THREADED, &threaded_mpm);
-
-    if (!threaded_mpm) {
-        return;
-    }
-
-    lock_cs = apr_palloc(p, CRYPTO_NUM_LOCKS * sizeof(apr_thread_mutex_t *));
-
-    /*
-     * XXX: CRYPTO_NUM_LOCKS == 28
-     * should determine if there are lock types we do not need
-     * for example: debug_malloc, debug_malloc2 (see crypto/cryptlib.c)
-     */
-    for (i = 0; i < CRYPTO_NUM_LOCKS; i++) {
-        lock_count[i] = 0;
-        /* XXX: Can we remove the lock_count now that apr_thread_mutex_t
-         * can support nested (aka recursive) locks? -aaron */
-        apr_thread_mutex_create(&(lock_cs[i]), APR_THREAD_MUTEX_DEFAULT, p);
-    }
-
-    CRYPTO_set_id_callback(ssl_util_thr_id);
-
-    CRYPTO_set_locking_callback(ssl_util_thr_lock);
-
-    apr_pool_cleanup_register(p, NULL,
-                              ssl_util_thread_cleanup,
-                              apr_pool_cleanup_null);
-
-}
-#endif
diff --git a/modules/ssl/ssl_util_ssl.c b/modules/ssl/ssl_util_ssl.c
deleted file mode 100644
index 8dd4015..0000000
--- a/modules/ssl/ssl_util_ssl.c
+++ /dev/null
@@ -1,552 +0,0 @@
-/*                      _             _
-**  _ __ ___   ___   __| |    ___ ___| |  mod_ssl
-** | '_ ` _ \ / _ \ / _` |   / __/ __| |  Apache Interface to OpenSSL
-** | | | | | | (_) | (_| |   \__ \__ \ |  www.modssl.org
-** |_| |_| |_|\___/ \__,_|___|___/___/_|  ftp.modssl.org
-**                      |_____|
-**  ssl_util_ssl.c
-**  Additional Utility Functions for OpenSSL
-*/
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- */
-
-#include "mod_ssl.h"
-
-/*  _________________________________________________________________
-**
-**  Additional High-Level Functions for OpenSSL
-**  _________________________________________________________________
-*/
-
-/* we initialize this index at startup time
- * and never write to it at request time,
- * so this static is thread safe.
- * also note that OpenSSL increments at static variable when
- * SSL_get_ex_new_index() is called, so we _must_ do this at startup.
- */
-static int SSL_app_data2_idx = -1;
-
-void SSL_init_app_data2_idx(void)
-{
-    int i;
-
-    if (SSL_app_data2_idx > -1) {
-        return;
-    }
-
-    /* we _do_ need to call this twice */
-    for (i=0; i<=1; i++) {
-        SSL_app_data2_idx =
-            SSL_get_ex_new_index(0,
-                                 "Second Application Data for SSL",
-                                 NULL, NULL, NULL);
-    }
-}
-
-void *SSL_get_app_data2(SSL *ssl)
-{
-    return (void *)SSL_get_ex_data(ssl, SSL_app_data2_idx);
-}
-
-void SSL_set_app_data2(SSL *ssl, void *arg)
-{
-    SSL_set_ex_data(ssl, SSL_app_data2_idx, (char *)arg);
-    return;
-}
-
-/*  _________________________________________________________________
-**
-**  High-Level Certificate / Private Key Loading
-**  _________________________________________________________________
-*/
-
-X509 *SSL_read_X509(char* filename, X509 **x509, int (*cb)(char*,int,int,void*))
-{
-    X509 *rc;
-    BIO *bioS;
-    BIO *bioF;
-
-    /* 1. try PEM (= DER+Base64+headers) */
-       if ((bioS=BIO_new_file(filename, "r")) == NULL)
-               return NULL;
-       rc=PEM_read_bio_X509 (bioS, x509, cb, NULL);
-       BIO_free(bioS);
-
-    if (rc == NULL) {
-        /* 2. try DER+Base64 */
-               if ((bioS=BIO_new_file(filename, "r")) == NULL)
-                       return NULL;
-                      
-               if ((bioF = BIO_new(BIO_f_base64())) == NULL) {
-            BIO_free(bioS);
-            return NULL;
-        }
-        bioS = BIO_push(bioF, bioS);
-        rc = d2i_X509_bio(bioS, NULL);
-        BIO_free_all(bioS);
-        if (rc == NULL) {
-            /* 3. try plain DER */
-                       if ((bioS=BIO_new_file(filename, "r")) == NULL)
-                               return NULL;
-            rc = d2i_X509_bio(bioS, NULL);
-            BIO_free(bioS);
-        }
-    }
-    if (rc != NULL && x509 != NULL) {
-        if (*x509 != NULL)
-            X509_free(*x509);
-        *x509 = rc;
-    }
-    return rc;
-}
-
-#if SSL_LIBRARY_VERSION <= 0x00904100
-static EVP_PKEY *d2i_PrivateKey_bio(BIO *bio, EVP_PKEY **key)
-{
-     return ((EVP_PKEY *)ASN1_d2i_bio(
-             (char *(*)())EVP_PKEY_new, 
-             (char *(*)())d2i_PrivateKey, 
-             (bio), (unsigned char **)(key)));
-}
-#endif
-
-EVP_PKEY *SSL_read_PrivateKey(char* filename, EVP_PKEY **key, int (*cb)(char*,int,int,void*), void *s)
-{
-    EVP_PKEY *rc;
-    BIO *bioS;
-    BIO *bioF;
-
-    /* 1. try PEM (= DER+Base64+headers) */
-       if ((bioS=BIO_new_file(filename, "r")) == NULL)
-               return NULL;
-       rc = PEM_read_bio_PrivateKey(bioS, key, cb, s);
-       BIO_free(bioS);
-
-    if (rc == NULL) {
-        /* 2. try DER+Base64 */
-               if ( (bioS = BIO_new_file(filename, "r")) == NULL )
-                       return NULL;
-
-               if ((bioF = BIO_new(BIO_f_base64())) == NULL) {
-            BIO_free(bioS);
-            return NULL;
-        }
-        bioS = BIO_push(bioF, bioS);
-        rc = d2i_PrivateKey_bio(bioS, NULL);
-        BIO_free_all(bioS);
-        if (rc == NULL) {
-            /* 3. try plain DER */
-                       if ( (bioS = BIO_new_file(filename, "r")) == NULL )
-                               return NULL;
-            rc = d2i_PrivateKey_bio(bioS, NULL);
-            BIO_free(bioS);
-        }
-    }
-    if (rc != NULL && key != NULL) {
-        if (*key != NULL)
-            EVP_PKEY_free(*key);
-        *key = rc;
-    }
-    return rc;
-}
-
-/*  _________________________________________________________________
-**
-**  Smart shutdown
-**  _________________________________________________________________
-*/
-
-int SSL_smart_shutdown(SSL *ssl)
-{
-    int i;
-    int rc;
-
-    /*
-     * Repeat the calls, because SSL_shutdown internally dispatches through a
-     * little state machine. Usually only one or two interation should be
-     * needed, so we restrict the total number of restrictions in order to
-     * avoid process hangs in case the client played bad with the socket
-     * connection and OpenSSL cannot recognize it.
-     */
-    rc = 0;
-    for (i = 0; i < 4 /* max 2x pending + 2x data = 4 */; i++) {
-        if ((rc = SSL_shutdown(ssl)))
-            break;
-    }
-    return rc;
-}
-
-/*  _________________________________________________________________
-**
-**  Certificate Revocation List (CRL) Storage
-**  _________________________________________________________________
-*/
-
-X509_STORE *SSL_X509_STORE_create(char *cpFile, char *cpPath)
-{
-    X509_STORE *pStore;
-    X509_LOOKUP *pLookup;
-
-    if (cpFile == NULL && cpPath == NULL)
-        return NULL;
-    if ((pStore = X509_STORE_new()) == NULL)
-        return NULL;
-    if (cpFile != NULL) {
-        if ((pLookup = X509_STORE_add_lookup(pStore, X509_LOOKUP_file())) == NULL) {
-            X509_STORE_free(pStore);
-            return NULL;
-        }
-        X509_LOOKUP_load_file(pLookup, cpFile, X509_FILETYPE_PEM);
-    }
-    if (cpPath != NULL) {
-        if ((pLookup = X509_STORE_add_lookup(pStore, X509_LOOKUP_hash_dir())) == NULL) {
-            X509_STORE_free(pStore);
-            return NULL;
-        }
-        X509_LOOKUP_add_dir(pLookup, cpPath, X509_FILETYPE_PEM);
-    }
-    return pStore;
-}
-
-int SSL_X509_STORE_lookup(X509_STORE *pStore, int nType,
-                          X509_NAME *pName, X509_OBJECT *pObj)
-{
-    X509_STORE_CTX pStoreCtx;
-    int rc;
-
-    X509_STORE_CTX_init(&pStoreCtx, pStore, NULL, NULL);
-    rc = X509_STORE_get_by_subject(&pStoreCtx, nType, pName, pObj);
-    X509_STORE_CTX_cleanup(&pStoreCtx);
-    return rc;
-}
-
-/*  _________________________________________________________________
-**
-**  Cipher Suite Spec String Creation
-**  _________________________________________________________________
-*/
-
-char *SSL_make_ciphersuite(apr_pool_t *p, SSL *ssl)
-{
-    STACK_OF(SSL_CIPHER) *sk;
-    SSL_CIPHER *c;
-    int i;
-    int l;
-    char *cpCipherSuite;
-    char *cp;
-
-    if (ssl == NULL) 
-        return "";
-    if ((sk = (STACK_OF(SSL_CIPHER) *)SSL_get_ciphers(ssl)) == NULL)
-        return "";
-    l = 0;
-    for (i = 0; i < sk_SSL_CIPHER_num(sk); i++) {
-        c = sk_SSL_CIPHER_value(sk, i);
-        l += strlen(SSL_CIPHER_get_name(c))+2+1;
-    }
-    if (l == 0)
-        return "";
-    cpCipherSuite = (char *)apr_palloc(p, l+1);
-    cp = cpCipherSuite;
-    for (i = 0; i < sk_SSL_CIPHER_num(sk); i++) {
-        c = sk_SSL_CIPHER_value(sk, i);
-        l = strlen(SSL_CIPHER_get_name(c));
-        memcpy(cp, SSL_CIPHER_get_name(c), l);
-        cp += l;
-        *cp++ = '/';
-        *cp++ = (SSL_CIPHER_get_valid(c) == 1 ? '1' : '0');
-        *cp++ = ':';
-    }
-    *(cp-1) = NUL;
-    return cpCipherSuite;
-}
-
-/*  _________________________________________________________________
-**
-**  Certificate Checks
-**  _________________________________________________________________
-*/
-
-/* check whether cert contains extended key usage with a SGC tag */
-BOOL SSL_X509_isSGC(X509 *cert)
-{
-    X509_EXTENSION *ext;
-    int ext_nid;
-    STACK *sk;
-    BOOL is_sgc;
-    int idx;
-    int i;
-    
-    is_sgc = FALSE;
-    idx = X509_get_ext_by_NID(cert, NID_ext_key_usage, -1);
-    if (idx >= 0) {
-        ext = X509_get_ext(cert, idx);
-        if ((sk = (STACK *)X509V3_EXT_d2i(ext)) != NULL) {
-            for (i = 0; i < sk_num(sk); i++) {
-                ext_nid = OBJ_obj2nid((ASN1_OBJECT *)sk_value(sk, i));
-                if (ext_nid == NID_ms_sgc || ext_nid == NID_ns_sgc) {
-                    is_sgc = TRUE;
-                    break;
-                }
-            }
-        }
-    }
-    return is_sgc;
-}
-
-/* retrieve basic constraints ingredients */
-BOOL SSL_X509_getBC(X509 *cert, int *ca, int *pathlen)
-{
-    X509_EXTENSION *ext;
-    BASIC_CONSTRAINTS *bc;
-    int idx;
-    BIGNUM *bn = NULL;
-    char *cp;
-    
-    if ((idx = X509_get_ext_by_NID(cert, NID_basic_constraints, -1)) < 0)
-        return FALSE;
-    ext = X509_get_ext(cert, idx);
-    if (ext == NULL)
-        return FALSE;
-    if ((bc = (BASIC_CONSTRAINTS *)X509V3_EXT_d2i(ext)) == NULL)
-        return FALSE;
-    *ca = bc->ca;
-    *pathlen = -1 /* unlimited */;
-    if (bc->pathlen != NULL) {
-        if ((bn = ASN1_INTEGER_to_BN(bc->pathlen, NULL)) == NULL)
-            return FALSE;
-        if ((cp = BN_bn2dec(bn)) == NULL)
-            return FALSE;
-        *pathlen = atoi(cp);
-        free(cp);
-        BN_free(bn);
-    }
-    BASIC_CONSTRAINTS_free(bc);
-    return TRUE;
-}
-
-/* retrieve subject CommonName of certificate */
-BOOL SSL_X509_getCN(apr_pool_t *p, X509 *xs, char **cppCN)
-{
-    X509_NAME *xsn;
-    X509_NAME_ENTRY *xsne;
-    int i, nid;
-    char *data_ptr;
-    int data_len;
-
-    xsn = X509_get_subject_name(xs);
-    for (i = 0; i < sk_X509_NAME_ENTRY_num((STACK_OF(X509_NAME_ENTRY) *)
-                                           X509_NAME_get_entries(xsn)); i++) {
-        xsne = sk_X509_NAME_ENTRY_value((STACK_OF(X509_NAME_ENTRY) *)
-                                         X509_NAME_get_entries(xsn), i);
-        nid = OBJ_obj2nid((ASN1_OBJECT *)X509_NAME_ENTRY_get_object(xsne));
-        if (nid == NID_commonName) {
-            data_ptr = X509_NAME_ENTRY_get_data_ptr(xsne);
-            data_len = X509_NAME_ENTRY_get_data_len(xsne);
-            *cppCN = apr_palloc(p, data_len+1);
-            apr_cpystrn(*cppCN, (char *)data_ptr, data_len+1);
-            (*cppCN)[data_len] = NUL;
-#ifdef CHARSET_EBCDIC
-            ascii2ebcdic(*cppCN, *cppCN, strlen(*cppCN));
-#endif
-            return TRUE;
-        }
-    }
-    return FALSE;
-}
-
-/*  _________________________________________________________________
-**
-**  Low-Level CA Certificate Loading
-**  _________________________________________________________________
-*/
-
-#ifdef SSL_EXPERIMENTAL_PROXY
-
-BOOL SSL_load_CrtAndKeyInfo_file(apr_pool_t *p, STACK_OF(X509_INFO) *sk, char *filename)
-{
-    BIO *in;
-
-    if ((in = BIO_new(BIO_s_file())) == NULL)
-        return FALSE;
-    if (BIO_read_filename(in, filename) <= 0) {
-        BIO_free(in);
-        return FALSE;
-    }
-    ERR_clear_error();
-#if SSL_LIBRARY_VERSION < 0x00904000
-    PEM_X509_INFO_read_bio(in, sk, NULL);
-#else
-    PEM_X509_INFO_read_bio(in, sk, NULL, NULL);
-#endif
-    BIO_free(in);
-    return TRUE;
-}
-
-BOOL SSL_load_CrtAndKeyInfo_path(apr_pool_t *p, STACK_OF(X509_INFO) *sk, char *pathname)
-{
-    apr_pool_t *sp;
-    apr_dir_t *dir;
-    apr_finfo_t dirent;
-    char *fullname;
-    BOOL ok;
-
-    apr_pool_sub_make(&sp, p, NULL);
-    if (apr_dir_open(&dir, pathname, sp)) != APR_SUCCESS) {
-        apr_pool_destroy(sp);
-        return FALSE;
-    }
-    ok = FALSE;
-    while ((apr_dir_read(&dirent, APR_FINFO_DIRENT, dir)) == APR_SUCCESS) {
-        fullname = apr_pstrcat(sp, pathname, "/", dirent.name, NULL);
-        if (dirent.filetype != APR_REG)
-            continue;
-        if (SSL_load_CrtAndKeyInfo_file(sp, sk, fullname))
-            ok = TRUE;
-    }
-    apr_dir_close(dir);
-    apr_pool_destroy(sp);
-    return ok;
-}              
-
-#endif /* SSL_EXPERIMENTAL_PROXY */
-
-/*  _________________________________________________________________
-**
-**  Extra Server Certificate Chain Support
-**  _________________________________________________________________
-*/
-
-/* 
- * Read a file that optionally contains the server certificate in PEM
- * format, possibly followed by a sequence of CA certificates that
- * should be sent to the peer in the SSL Certificate message.
- */
-int SSL_CTX_use_certificate_chain(
-    SSL_CTX *ctx, char *file, int skipfirst, int (*cb)(char*,int,int,void*))
-{
-    BIO *bio;
-    X509 *x509;
-    unsigned long err;
-    int n;
-    STACK *extra_certs;
-
-    if ((bio = BIO_new(BIO_s_file_internal())) == NULL)
-        return -1;
-    if (BIO_read_filename(bio, file) <= 0) {
-        BIO_free(bio);
-        return -1;
-    }
-    /* optionally skip a leading server certificate */
-    if (skipfirst) {
-#if SSL_LIBRARY_VERSION < 0x00904000
-        if ((x509 = PEM_read_bio_X509(bio, NULL, cb)) == NULL) {
-#else
-        if ((x509 = PEM_read_bio_X509(bio, NULL, cb, NULL)) == NULL) {
-#endif
-            BIO_free(bio);
-            return -1;
-        }
-        X509_free(x509);
-    }
-    /* free a perhaps already configured extra chain */
-    extra_certs=SSL_CTX_get_extra_certs(ctx);
-    if (extra_certs != NULL) {
-        sk_X509_pop_free((STACK_OF(X509) *)extra_certs, X509_free);
-        SSL_CTX_set_extra_certs(ctx,NULL);
-    }
-    /* create new extra chain by loading the certs */
-    n = 0;
-#if SSL_LIBRARY_VERSION < 0x00904000
-    while ((x509 = PEM_read_bio_X509(bio, NULL, cb)) != NULL) {
-#else
-    while ((x509 = PEM_read_bio_X509(bio, NULL, cb, NULL)) != NULL) {
-#endif
-        if (!SSL_CTX_add_extra_chain_cert(ctx, x509)) { 
-            X509_free(x509);
-            BIO_free(bio);
-            return -1;
-        }
-        n++;
-    }
-    /* Make sure that only the error is just an EOF */
-    if ((err = ERR_peek_error()) > 0) {
-        if (!(   ERR_GET_LIB(err) == ERR_LIB_PEM 
-              && ERR_GET_REASON(err) == PEM_R_NO_START_LINE)) {
-            BIO_free(bio);
-            return -1;
-        }
-        while (ERR_get_error() > 0) ;
-    }
-    BIO_free(bio);
-    return n;
-}
-
-/*  _________________________________________________________________
-**
-**  Session Stuff
-**  _________________________________________________________________
-*/
-
-char *SSL_SESSION_id2sz(unsigned char *id, int idlen,
-                        char *str, int strsize)
-{
-    char *cp;
-    int n;
-
-    cp = str;
-    for (n = 0; n < idlen && n < SSL_MAX_SSL_SESSION_ID_LENGTH; n++) {
-        apr_snprintf(cp, strsize - (cp-str), "%02X", id[n]);
-        cp += 2;
-    }
-    *cp = NUL;
-    return str;
-}
-
diff --git a/modules/ssl/ssl_util_ssl.h b/modules/ssl/ssl_util_ssl.h
deleted file mode 100644
index 6cf7fcc..0000000
--- a/modules/ssl/ssl_util_ssl.h
+++ /dev/null
@@ -1,109 +0,0 @@
-/*                      _             _
-**  _ __ ___   ___   __| |    ___ ___| |  mod_ssl
-** | '_ ` _ \ / _ \ / _` |   / __/ __| |  Apache Interface to OpenSSL
-** | | | | | | (_) | (_| |   \__ \__ \ |  www.modssl.org
-** |_| |_| |_|\___/ \__,_|___|___/___/_|  ftp.modssl.org
-**                      |_____|
-**  ssl_util_ssl.h
-**  Additional Utility Functions for OpenSSL
-*/
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- */
-
-#ifndef __SSL_UTIL_SSL_H__
-#define __SSL_UTIL_SSL_H__
-
-/*
- * Determine SSL library version number
- */
-#ifdef OPENSSL_VERSION_NUMBER
-#define SSL_LIBRARY_VERSION OPENSSL_VERSION_NUMBER
-#define SSL_LIBRARY_NAME    "OpenSSL"
-#define SSL_LIBRARY_TEXT    OPENSSL_VERSION_TEXT
-#elif !defined(SSL_LIBRARY_VERSION)
-#define SSL_LIBRARY_VERSION 0x0000
-#define SSL_LIBRARY_NAME    "OtherSSL"
-#define SSL_LIBRARY_TEXT    "OtherSSL 0.0.0 00 XXX 0000"
-#endif
-
-/*
- *  Maximum length of a DER encoded session.
- *  FIXME: There is no define in OpenSSL, but OpenSSL uses 1024*10,
- *         so this value should be ok. Although we have no warm feeling.
- */
-#define SSL_SESSION_MAX_DER 1024*10
-
-/* max length for SSL_SESSION_id2sz */
-#define SSL_SESSION_ID_STRING_LEN \
-    ((SSL_MAX_SSL_SESSION_ID_LENGTH + 1) * 2)
-
-/*  
- *  Additional Functions
- */
-void        SSL_init_app_data2_idx(void);
-void       *SSL_get_app_data2(SSL *);
-void        SSL_set_app_data2(SSL *, void *);
-X509       *SSL_read_X509(char *, X509 **, int (*)(char*,int,int,void*));
-EVP_PKEY   *SSL_read_PrivateKey(char *, EVP_PKEY **, int (*)(char*,int,int,void*), void *);
-int         SSL_smart_shutdown(SSL *ssl);
-X509_STORE *SSL_X509_STORE_create(char *, char *);
-int         SSL_X509_STORE_lookup(X509_STORE *, int, X509_NAME *, X509_OBJECT *);
-char       *SSL_make_ciphersuite(apr_pool_t *, SSL *);
-BOOL        SSL_X509_isSGC(X509 *);
-BOOL        SSL_X509_getBC(X509 *, int *, int *);
-BOOL        SSL_X509_getCN(apr_pool_t *, X509 *, char **);
-#ifdef SSL_EXPERIMENTAL_PROXY
-BOOL        SSL_load_CrtAndKeyInfo_file(apr_pool_t *, STACK_OF(X509_INFO) *, char *);
-BOOL        SSL_load_CrtAndKeyInfo_path(apr_pool_t *, STACK_OF(X509_INFO) *, char *);
-#endif /* SSL_EXPERIMENTAL_PROXY */
-int         SSL_CTX_use_certificate_chain(SSL_CTX *, char *, int, int (*)(char*,int,int,void*));
-char       *SSL_SESSION_id2sz(unsigned char *, int, char *, int);
-
-#endif /* __SSL_UTIL_SSL_H__ */
diff --git a/modules/ssl/ssl_util_table.c b/modules/ssl/ssl_util_table.c
deleted file mode 100644
index 0e16809..0000000
--- a/modules/ssl/ssl_util_table.c
+++ /dev/null
@@ -1,2555 +0,0 @@
-/*                      _             _
-**  _ __ ___   ___   __| |    ___ ___| |  mod_ssl
-** | '_ ` _ \ / _ \ / _` |   / __/ __| |  Apache Interface to OpenSSL
-** | | | | | | (_) | (_| |   \__ \__ \ |  www.modssl.org
-** |_| |_| |_|\___/ \__,_|___|___/___/_|  ftp.modssl.org
-**                      |_____|
-**  ssl_util_table.c
-**  High Performance Hash Table Functions
-*/
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- */
-
-/*
- * Generic hash table handler
- * Table 4.1.0 July-28-1998
- *
- * This library is a generic open hash table with buckets and
- * linked lists.  It is pretty high performance.  Each element
- * has a key and a data.  The user indexes on the key to find the
- * data.
- *
- * Copyright 1998 by Gray Watson <gray@letters.com>
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose and without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies,
- * and that the name of Gray Watson not be used in advertising or
- * publicity pertaining to distribution of the document or software
- * without specific, written prior permission.
- *
- * Gray Watson makes no representations about the suitability of the
- * software described herein for any purpose.  It is provided "as is"
- * without express or implied warranty.
- *
- * Modified in March 1999 by Ralf S. Engelschall <rse@engelschall.com>
- * for use in the mod_ssl project:
- *   o merged table_loc.h header into table.c
- *   o removed fillproto-comments from table.h
- *   o removed mmap() support because it's too unportable
- *   o added support for MM library via ta_{malloc,calloc,realloc,free}
- */
-
-#include <stdlib.h>
-#include <string.h>
-
-/* forward definitions for table.h */
-typedef struct table_st table_t;
-typedef struct table_entry_st table_entry_t;
-
-#define TABLE_PRIVATE
-#include "ssl_util_table.h"
-#include "mod_ssl.h"
-
-/****************************** local defines ******************************/
-
-#ifndef BITSPERBYTE
-#define BITSPERBYTE     8
-#endif
-#ifndef BITS
-#define BITS(type)      (BITSPERBYTE * (int)sizeof(type))
-#endif
-
-#define TABLE_MAGIC     0xBADF00D       /* very magic magicness */
-#define LINEAR_MAGIC    0xAD00D00       /* magic value for linear struct */
-#define DEFAULT_SIZE    1024    /* default table size */
-#define MAX_ALIGNMENT   128     /* max alignment value */
-#define MAX_SORT_SPLITS 128     /* qsort can handle 2^128 entries */
-
-/* returns 1 when we should grow or shrink the table */
-#define SHOULD_TABLE_GROW(tab)  ((tab)->ta_entry_n > (tab)->ta_bucket_n * 2)
-#define SHOULD_TABLE_SHRINK(tab) ((tab)->ta_entry_n < (tab)->ta_bucket_n / 2)
-
-/*
- * void HASH_MIX
- *
- * DESCRIPTION:
- *
- * Mix 3 32-bit values reversibly.  For every delta with one or two bits
- * set, and the deltas of all three high bits or all three low bits,
- * whether the original value of a,b,c is almost all zero or is
- * uniformly distributed.
- *
- * If HASH_MIX() is run forward or backward, at least 32 bits in a,b,c
- * have at least 1/4 probability of changing.  If mix() is run
- * forward, every bit of c will change between 1/3 and 2/3 of the
- * time.  (Well, 22/100 and 78/100 for some 2-bit deltas.)
- *
- * HASH_MIX() takes 36 machine instructions, but only 18 cycles on a
- * superscalar machine (like a Pentium or a Sparc).  No faster mixer
- * seems to work, that's the result of my brute-force search.  There
- * were about 2^68 hashes to choose from.  I only tested about a
- * billion of those.
- */
-#define HASH_MIX(a, b, c) \
- do { \
-   a -= b; a -= c; a ^= (c >> 13); \
-   b -= c; b -= a; b ^= (a << 8); \
-   c -= a; c -= b; c ^= (b >> 13); \
-   a -= b; a -= c; a ^= (c >> 12); \
-   b -= c; b -= a; b ^= (a << 16); \
-   c -= a; c -= b; c ^= (b >> 5); \
-   a -= b; a -= c; a ^= (c >> 3); \
-   b -= c; b -= a; b ^= (a << 10); \
-   c -= a; c -= b; c ^= (b >> 15); \
- } while(0)
-
-#define TABLE_POINTER(table, type, pnt)         (pnt)
-
-/*
- * Macros to get at the key and the data pointers
- */
-#define ENTRY_KEY_BUF(entry_p)          ((entry_p)->te_key_buf)
-#define ENTRY_DATA_BUF(tab_p, entry_p)  \
-     (ENTRY_KEY_BUF(entry_p) + (entry_p)->te_key_size)
-
-/*
- * Table structures...
- */
-
-/*
- * HACK: this should be equiv as the table_entry_t without the key_buf
- * char.  We use this with the ENTRY_SIZE() macro above which solves
- * the problem with the lack of the [0] GNU hack.  We use the
- * table_entry_t structure to better map the memory and make things
- * faster.
- */
-typedef struct table_shell_st {
-    unsigned int te_key_size;   /* size of data */
-    unsigned int te_data_size;  /* size of data */
-    struct table_shell_st *te_next_p;   /* pointer to next in the list */
-    /* NOTE: this does not have the te_key_buf field here */
-} table_shell_t;
-
-/*
- * Elements in the bucket linked-lists.  The key[1] is the start of
- * the key with the rest of the key and all of the data information
- * packed in memory directly after the end of this structure.
- *
- * NOTE: if this structure is changed, the table_shell_t must be changed
- * to match.
- */
-struct table_entry_st {
-    unsigned int te_key_size;   /* size of data */
-    unsigned int te_data_size;  /* size of data */
-    struct table_entry_st *te_next_p;   /* pointer to next in the list */
-    unsigned char te_key_buf[1];        /* 1st byte of key buf */
-};
-
-/* external structure for debuggers be able to see void */
-typedef table_entry_t table_entry_ext_t;
-
-/* main table structure */
-struct table_st {
-    unsigned int ta_magic;      /* magic number */
-    unsigned int ta_flags;      /* table's flags defined in table.h */
-    unsigned int ta_bucket_n;   /* num of buckets, should be 2^X */
-    unsigned int ta_entry_n;    /* num of entries in all buckets */
-    unsigned int ta_data_align; /* data alignment value */
-    table_entry_t **ta_buckets; /* array of linked lists */
-    table_linear_t ta_linear;   /* linear tracking */
-    unsigned long ta_file_size; /* size of on-disk space */
-    void *(*ta_malloc)(void *opt_param, size_t size);
-    void *(*ta_calloc)(void *opt_param, size_t number, size_t size);
-    void *(*ta_realloc)(void *opt_param, void *ptr, size_t size);
-    void (*ta_free)(void *opt_param, void *ptr);
-    void *opt_param;
-};
-
-/* external table structure for debuggers */
-typedef table_t table_ext_t;
-
-/* local comparison functions */
-typedef int (*compare_t) (const void *element1_p, const void *element2_p,
-                          table_compare_t user_compare,
-                          const table_t * table_p);
-
-/*
- * to map error to string
- */
-typedef struct {
-    int es_error;               /* error number */
-    char *es_string;            /* assocaited string */
-} error_str_t;
-
-static error_str_t errors[] =
-{
-    {TABLE_ERROR_NONE, "no error"},
-    {TABLE_ERROR_PNT, "invalid table pointer"},
-    {TABLE_ERROR_ARG_NULL, "buffer argument is null"},
-    {TABLE_ERROR_SIZE, "incorrect size argument"},
-    {TABLE_ERROR_OVERWRITE, "key exists and no overwrite"},
-    {TABLE_ERROR_NOT_FOUND, "key does not exist"},
-    {TABLE_ERROR_ALLOC, "error allocating memory"},
-    {TABLE_ERROR_LINEAR, "linear access not in progress"},
-    {TABLE_ERROR_OPEN, "could not open file"},
-    {TABLE_ERROR_SEEK, "could not seek to position in file"},
-    {TABLE_ERROR_READ, "could not read from file"},
-    {TABLE_ERROR_WRITE, "could not write to file"},
-    {TABLE_ERROR_EMPTY, "table is empty"},
-    {TABLE_ERROR_NOT_EMPTY, "table contains data"},
-    {TABLE_ERROR_ALIGNMENT, "invalid alignment value"},
-    {0}
-};
-
-#define INVALID_ERROR   "invalid error code"
-
-
-/********************** wrappers for system functions ************************/
-static void *sys_malloc(void *param, size_t size)
-{
-    return malloc(size);
-}
-
-static void *sys_calloc(void *param, size_t size1, size_t size2)
-{
-    return calloc(size1, size2);
-}
-
-static void *sys_realloc(void *param, void *ptr, size_t size)
-{
-    return realloc(ptr, size);
-}
-
-static void sys_free(void *param, void *ptr)
-{
-    free(ptr);
-}
-
-/****************************** local functions ******************************/
-
-/*
- * static table_entry_t *first_entry
- *
- * DESCRIPTION:
- *
- * Return the first entry in the table.  It will set the linear
- * structure counter to the position of the first entry.
- *
- * RETURNS:
- *
- * Success: A pointer to the first entry in the table.
- *
- * Failure: NULL if there is no first entry.
- *
- * ARGUMENTS:
- *
- * table_p - Table whose next entry we are finding.
- *
- * linear_p - Pointer to a linear structure which we will advance and
- * then find the corresponding entry.
- */
-static table_entry_t *first_entry(table_t * table_p,
-                                  table_linear_t * linear_p)
-{
-    table_entry_t *entry_p;
-    unsigned int bucket_c = 0;
-
-    /* look for the first non-empty bucket */
-    for (bucket_c = 0; bucket_c < table_p->ta_bucket_n; bucket_c++) {
-        entry_p = table_p->ta_buckets[bucket_c];
-        if (entry_p != NULL) {
-            if (linear_p != NULL) {
-                linear_p->tl_bucket_c = bucket_c;
-                linear_p->tl_entry_c = 0;
-            }
-            return TABLE_POINTER(table_p, table_entry_t *, entry_p);
-        }
-    }
-
-    return NULL;
-}
-
-/*
- * static table_entry_t *next_entry
- *
- * DESCRIPTION:
- *
- * Return the next entry in the table which is past the position in
- * our linear pointer.  It will advance the linear structure counters.
- *
- * RETURNS:
- *
- * Success: A pointer to the next entry in the table.
- *
- * Failure: NULL.
- *
- * ARGUMENTS:
- *
- * table_p - Table whose next entry we are finding.
- *
- * linear_p - Pointer to a linear structure which we will advance and
- * then find the corresponding entry.
- *
- * error_p - Pointer to an integer which when the routine returns will
- * contain a table error code.
- */
-static table_entry_t *next_entry(table_t * table_p, table_linear_t * linear_p,
-                                 int *error_p)
-{
-    table_entry_t *entry_p;
-    int entry_c;
-
-    /* can't next if we haven't first-ed */
-    if (linear_p == NULL) {
-        if (error_p != NULL)
-            *error_p = TABLE_ERROR_LINEAR;
-        return NULL;
-    }
-
-    if (linear_p->tl_bucket_c >= table_p->ta_bucket_n) {
-        /*
-         * NOTE: this might happen if we delete an item which shortens the
-         * table bucket numbers.
-         */
-        if (error_p != NULL)
-            *error_p = TABLE_ERROR_NOT_FOUND;
-        return NULL;
-    }
-
-    linear_p->tl_entry_c++;
-
-    /* find the entry which is the nth in the list */
-    entry_p = table_p->ta_buckets[linear_p->tl_bucket_c];
-    /* NOTE: we swap the order here to be more efficient */
-    for (entry_c = linear_p->tl_entry_c; entry_c > 0; entry_c--) {
-        /* did we reach the end of the list? */
-        if (entry_p == NULL)
-            break;
-        entry_p = TABLE_POINTER(table_p, table_entry_t *, entry_p)->te_next_p;
-    }
-
-    /* did we find an entry in the current bucket? */
-    if (entry_p != NULL) {
-        if (error_p != NULL)
-            *error_p = TABLE_ERROR_NONE;
-        return TABLE_POINTER(table_p, table_entry_t *, entry_p);
-    }
-
-    /* find the first entry in the next non-empty bucket */
-
-    linear_p->tl_entry_c = 0;
-    for (linear_p->tl_bucket_c++; linear_p->tl_bucket_c < table_p->ta_bucket_n;
-         linear_p->tl_bucket_c++) {
-        entry_p = table_p->ta_buckets[linear_p->tl_bucket_c];
-        if (entry_p != NULL) {
-            if (error_p != NULL)
-                *error_p = TABLE_ERROR_NONE;
-            return TABLE_POINTER(table_p, table_entry_t *, entry_p);
-        }
-    }
-
-    if (error_p != NULL)
-        *error_p = TABLE_ERROR_NOT_FOUND;
-    return NULL;
-}
-
-/*
- * static unsigned int hash
- *
- * DESCRIPTION:
- *
- * Hash a variable-length key into a 32-bit value.  Every bit of the
- * key affects every bit of the return value.  Every 1-bit and 2-bit
- * delta achieves avalanche.  About (6 * len + 35) instructions.  The
- * best hash table sizes are powers of 2.  There is no need to use mod
- * (sooo slow!).  If you need less than 32 bits, use a bitmask.  For
- * example, if you need only 10 bits, do h = (h & hashmask(10)); In
- * which case, the hash table should have hashsize(10) elements.
- *
- * By Bob Jenkins, 1996.  bob_jenkins@compuserve.com.  You may use
- * this code any way you wish, private, educational, or commercial.
- * It's free.  See
- * http://ourworld.compuserve.com/homepages/bob_jenkins/evahash.htm
- * Use for hash table lookup, or anything where one collision in 2^^32
- * is acceptable.  Do NOT use for cryptographic purposes.
- *
- * RETURNS:
- *
- * Returns a 32-bit hash value.
- *
- * ARGUMENTS:
- *
- * key - Key (the unaligned variable-length array of bytes) that we
- * are hashing.
- *
- * length - Length of the key in bytes.
- *
- * init_val - Initialization value of the hash if you need to hash a
- * number of strings together.  For instance, if you are hashing N
- * strings (unsigned char **)keys, do it like this:
- *
- * for (i=0, h=0; i<N; ++i) h = hash( keys[i], len[i], h);
- */
-static unsigned int hash(const unsigned char *key,
-                         const unsigned int length,
-                         const unsigned int init_val)
-{
-    const unsigned char *key_p = key;
-    unsigned int a, b, c, len;
-
-    /* set up the internal state */
-    a = 0x9e3779b9;             /* the golden ratio; an arbitrary value */
-    b = 0x9e3779b9;
-    c = init_val;               /* the previous hash value */
-
-    /* handle most of the key */
-    for (len = length; len >= 12; len -= 12) {
-        a += (key_p[0]
-              + ((unsigned long) key_p[1] << 8)
-              + ((unsigned long) key_p[2] << 16)
-              + ((unsigned long) key_p[3] << 24));
-        b += (key_p[4]
-              + ((unsigned long) key_p[5] << 8)
-              + ((unsigned long) key_p[6] << 16)
-              + ((unsigned long) key_p[7] << 24));
-        c += (key_p[8]
-              + ((unsigned long) key_p[9] << 8)
-              + ((unsigned long) key_p[10] << 16)
-              + ((unsigned long) key_p[11] << 24));
-        HASH_MIX(a, b, c);
-        key_p += 12;
-    }
-
-    c += length;
-
-    /* all the case statements fall through to the next */
-    switch (len) {
-    case 11:
-        c += ((unsigned long) key_p[10] << 24);
-    case 10:
-        c += ((unsigned long) key_p[9] << 16);
-    case 9:
-        c += ((unsigned long) key_p[8] << 8);
-        /* the first byte of c is reserved for the length */
-    case 8:
-        b += ((unsigned long) key_p[7] << 24);
-    case 7:
-        b += ((unsigned long) key_p[6] << 16);
-    case 6:
-        b += ((unsigned long) key_p[5] << 8);
-    case 5:
-        b += key_p[4];
-    case 4:
-        a += ((unsigned long) key_p[3] << 24);
-    case 3:
-        a += ((unsigned long) key_p[2] << 16);
-    case 2:
-        a += ((unsigned long) key_p[1] << 8);
-    case 1:
-        a += key_p[0];
-        /* case 0: nothing left to add */
-    }
-    HASH_MIX(a, b, c);
-
-    return c;
-}
-
-/*
- * static int entry_size
- *
- * DESCRIPTION:
- *
- * Calculates the appropriate size of an entry to include the key and
- * data sizes as well as any associated alignment to the data.
- *
- * RETURNS:
- *
- * The associated size of the entry.
- *
- * ARGUMENTS:
- *
- * table_p - Table associated with the entries whose size we are
- * determining.
- *
- * key_size - Size of the entry key.
- *
- * data - Size of the entry data.
- */
-static int entry_size(const table_t * table_p, const unsigned int key_size,
-                      const unsigned int data_size)
-{
-    int size, left;
-
-    /* initial size -- key is already aligned if right after struct */
-    size = sizeof(struct table_shell_st) + key_size;
-
-    /* if there is no alignment then it is easy */
-    if (table_p->ta_data_align == 0)
-        return size + data_size;
-    /* add in our alignement */
-    left = size & (table_p->ta_data_align - 1);
-    if (left > 0)
-        size += table_p->ta_data_align - left;
-    /* we add the data size here after the alignment */
-    size += data_size;
-
-    return size;
-}
-
-/*
- * static unsigned char *entry_data_buf
- *
- * DESCRIPTION:
- *
- * Companion to the ENTRY_DATA_BUF macro but this handles any
- * associated alignment to the data in the entry.
- *
- * RETURNS:
- *
- * Pointer to the data segment of the entry.
- *
- * ARGUMENTS:
- *
- * table_p - Table associated with the entry.
- *
- * entry_p - Entry whose data pointer we are determining.
- */
-static unsigned char *entry_data_buf(const table_t * table_p,
-                                     const table_entry_t * entry_p)
-{
-    const unsigned char *buf_p;
-    int size, pad;
-
-    buf_p = entry_p->te_key_buf + entry_p->te_key_size;
-
-    /* if there is no alignment then it is easy */
-    if (table_p->ta_data_align == 0)
-        return (unsigned char *) buf_p;
-    /* we need the size of the space before the data */
-    size = sizeof(struct table_shell_st) + entry_p->te_key_size;
-
-    /* add in our alignment */
-    pad = size & (table_p->ta_data_align - 1);
-    if (pad > 0)
-        pad = table_p->ta_data_align - pad;
-    return (unsigned char *) buf_p + pad;
-}
-
-/******************************* sort routines *******************************/
-
-/*
- * static int our_compare
- *
- * DESCRIPTION:
- *
- * Compare two entries by calling user's compare program or by using
- * memcmp.
- *
- * RETURNS:
- *
- * < 0, == 0, or > 0 depending on whether p1 is > p2, == p2, < p2.
- *
- * ARGUMENTS:
- *
- * p1 - First entry pointer to compare.
- *
- * p2 - Second entry pointer to compare.
- *
- * compare - User comparison function.  Ignored.
- *
- * table_p - Associated table being ordered.  Ignored.
- */
-static int local_compare(const void *p1, const void *p2,
-                         table_compare_t compare, const table_t * table_p)
-{
-    const table_entry_t *const *ent1_p = p1, *const *ent2_p = p2;
-    int cmp;
-    unsigned int size;
-
-    /* compare as many bytes as we can */
-    size = (*ent1_p)->te_key_size;
-    if ((*ent2_p)->te_key_size < size)
-        size = (*ent2_p)->te_key_size;
-    cmp = memcmp(ENTRY_KEY_BUF(*ent1_p), ENTRY_KEY_BUF(*ent2_p), size);
-    /* if common-size equal, then if next more bytes, it is larger */
-    if (cmp == 0)
-        cmp = (*ent1_p)->te_key_size - (*ent2_p)->te_key_size;
-    return cmp;
-}
-
-/*
- * static int external_compare
- *
- * DESCRIPTION:
- *
- * Compare two entries by calling user's compare program or by using
- * memcmp.
- *
- * RETURNS:
- *
- * < 0, == 0, or > 0 depending on whether p1 is > p2, == p2, < p2.
- *
- * ARGUMENTS:
- *
- * p1 - First entry pointer to compare.
- *
- * p2 - Second entry pointer to compare.
- *
- * user_compare - User comparison function.
- *
- * table_p - Associated table being ordered.
- */
-static int external_compare(const void *p1, const void *p2,
-                            table_compare_t user_compare,
-                            const table_t * table_p)
-{
-    const table_entry_t *const *ent1_p = p1, *const *ent2_p = p2;
-    /* since we know we are not aligned we can use the EXTRY_DATA_BUF macro */
-    return user_compare(ENTRY_KEY_BUF(*ent1_p), (*ent1_p)->te_key_size,
-                        ENTRY_DATA_BUF(table_p, *ent1_p),
-                        (*ent1_p)->te_data_size,
-                        ENTRY_KEY_BUF(*ent2_p), (*ent2_p)->te_key_size,
-                        ENTRY_DATA_BUF(table_p, *ent2_p),
-                        (*ent2_p)->te_data_size);
-}
-
-/*
- * static int external_compare_align
- *
- * DESCRIPTION:
- *
- * Compare two entries by calling user's compare program or by using
- * memcmp.  Alignment information is necessary.
- *
- * RETURNS:
- *
- * < 0, == 0, or > 0 depending on whether p1 is > p2, == p2, < p2.
- *
- * ARGUMENTS:
- *
- * p1 - First entry pointer to compare.
- *
- * p2 - Second entry pointer to compare.
- *
- * user_compare - User comparison function.
- *
- * table_p - Associated table being ordered.
- */
-static int external_compare_align(const void *p1, const void *p2,
-                                  table_compare_t user_compare,
-                                  const table_t * table_p)
-{
-    const table_entry_t *const *ent1_p = p1, *const *ent2_p = p2;
-    /* since we are aligned we have to use the entry_data_buf function */
-    return user_compare(ENTRY_KEY_BUF(*ent1_p), (*ent1_p)->te_key_size,
-                        entry_data_buf(table_p, *ent1_p),
-                        (*ent1_p)->te_data_size,
-                        ENTRY_KEY_BUF(*ent2_p), (*ent2_p)->te_key_size,
-                        entry_data_buf(table_p, *ent2_p),
-                        (*ent2_p)->te_data_size);
-}
-
-/*
- * static void split
- *
- * DESCRIPTION:
- *
- * This sorts an array of longs via the quick sort algorithm (it's
- * pretty quick)
- *
- * RETURNS:
- *
- * None.
- *
- * ARGUMENTS:
- *
- * first_p - Start of the list that we are splitting.
- *
- * last_p - Last entry in the list that we are splitting.
- *
- * compare - Comparison function which is handling the actual
- * elements.  This is either a local function or a function to setup
- * the problem element key and data pointers which then hands off to
- * the user function.
- *
- * user_compare - User comparison function.  Could be NULL if we are
- * just using a local comparison function.
- *
- * table_p - Associated table being sorted.
- */
-static void split(void *first_p, void *last_p, compare_t compare,
-                  table_compare_t user_compare, table_t * table_p)
-{
-    void *pivot_p, *left_p, *right_p, *left_last_p, *right_first_p;
-    void *firsts[MAX_SORT_SPLITS], *lasts[MAX_SORT_SPLITS];
-    int split_c = 0;
-
-    for (;;) {
-
-        /* no need to split the list if it is < 2 elements */
-        while (first_p >= last_p) {
-            if (split_c == 0) {
-                /* we are done */
-                return;
-            }
-            split_c--;
-            first_p = firsts[split_c];
-            last_p = lasts[split_c];
-        }
-
-        left_p = first_p;
-        right_p = last_p;
-        pivot_p = first_p;
-
-        do {
-            /* scan from right hand side */
-            while (right_p > left_p
-                   && compare(right_p, pivot_p, user_compare, table_p) > 0)
-                right_p = (char *) right_p - sizeof(table_entry_t *);
-            /* scan from left hand side */
-            while (right_p > left_p
-                   && compare(pivot_p, left_p, user_compare, table_p) >= 0)
-                left_p = (char *) left_p + sizeof(table_entry_t *);
-            /* if the pointers haven't met then swap values */
-            if (right_p > left_p) {
-                /* swap_bytes(left_p, right_p) */
-                table_entry_t *temp;
-
-                temp = *(table_entry_t **) left_p;
-                *(table_entry_t **) left_p = *(table_entry_t **) right_p;
-                *(table_entry_t **) right_p = temp;
-            }
-        } while (right_p > left_p);
-
-        /* now we swap the pivot with the right-hand side */
-        {
-            /* swap_bytes(pivot_p, right_p); */
-            table_entry_t *temp;
-
-            temp = *(table_entry_t **) pivot_p;
-            *(table_entry_t **) pivot_p = *(table_entry_t **) right_p;
-            *(table_entry_t **) right_p = temp;
-        }
-        pivot_p = right_p;
-
-        /* save the section to the right of the pivot in our stack */
-        right_first_p = (char *) pivot_p + sizeof(table_entry_t *);
-        left_last_p = (char *) pivot_p - sizeof(table_entry_t *);
-
-        /* do we need to save the righthand side? */
-        if (right_first_p < last_p) {
-            if (split_c >= MAX_SORT_SPLITS) {
-                /* sanity check here -- we should never get here */
-                abort();
-            }
-            firsts[split_c] = right_first_p;
-            lasts[split_c] = last_p;
-            split_c++;
-        }
-
-        /* do the left hand side of the pivot */
-        /* first_p = first_p */
-        last_p = left_last_p;
-    }
-}
-
-/*************************** exported routines *******************************/
-
-/*
- * table_t *table_alloc
- *
- * DESCRIPTION:
- *
- * Allocate a new table structure.
- *
- * RETURNS:
- *
- * A pointer to the new table structure which must be passed to
- * table_free to be deallocated.  On error a NULL is returned.
- *
- * ARGUMENTS:
- *
- * bucket_n - Number of buckets for the hash table.  Our current hash
- * value works best with base two numbers.  Set to 0 to take the
- * library default of 1024.
- *
- * error_p - Pointer to an integer which, if not NULL, will contain a
- * table error code.
- *
- * malloc_f, realloc_f, free_f - Pointers to malloc(3)-, realloc(3)-
- * and free(3)-style functions.
- */
-table_t *table_alloc(const unsigned int bucket_n, int *error_p,
-                 void *(*malloc_f)(void *opt_param, size_t size),
-                 void *(*calloc_f)(void *opt_param, size_t number, size_t size),
-                 void *(*realloc_f)(void *opt_param, void *ptr, size_t size),
-                 void (*free_f)(void *opt_param, void *ptr), void *opt_param)
-{
-    table_t *table_p = NULL;
-    unsigned int buck_n;
-
-    /* allocate a table structure */
-    if (malloc_f != NULL)
-        table_p = malloc_f(opt_param, sizeof(table_t));
-    else
-        table_p = malloc(sizeof(table_t));
-    if (table_p == NULL) {
-        if (error_p != NULL)
-            *error_p = TABLE_ERROR_ALLOC;
-        return NULL;
-    }
-
-    if (bucket_n > 0)
-        buck_n = bucket_n;
-    else
-        buck_n = DEFAULT_SIZE;
-    /* allocate the buckets which are NULLed */
-    if (calloc_f != NULL)
-        table_p->ta_buckets = (table_entry_t **)calloc_f(opt_param, buck_n,
-                                                       sizeof(table_entry_t *));
-    else
-        table_p->ta_buckets = (table_entry_t **)calloc(buck_n, sizeof(table_entry_t *));
-    if (table_p->ta_buckets == NULL) {
-        if (error_p != NULL)
-            *error_p = TABLE_ERROR_ALLOC;
-        if (free_f != NULL)
-            free_f(opt_param, table_p);
-        else
-            free(table_p);
-        return NULL;
-    }
-
-    /* initialize structure */
-    table_p->ta_magic = TABLE_MAGIC;
-    table_p->ta_flags = 0;
-    table_p->ta_bucket_n = buck_n;
-    table_p->ta_entry_n = 0;
-    table_p->ta_data_align = 0;
-    table_p->ta_linear.tl_magic = 0;
-    table_p->ta_linear.tl_bucket_c = 0;
-    table_p->ta_linear.tl_entry_c = 0;
-    table_p->ta_file_size = 0;
-    table_p->ta_malloc  = malloc_f  != NULL ? malloc_f  : sys_malloc;
-    table_p->ta_calloc  = calloc_f  != NULL ? calloc_f  : sys_calloc;
-    table_p->ta_realloc = realloc_f != NULL ? realloc_f : sys_realloc;
-    table_p->ta_free    = free_f    != NULL ? free_f    : sys_free;
-    table_p->opt_param = opt_param;
-
-    if (error_p != NULL)
-        *error_p = TABLE_ERROR_NONE;
-    return table_p;
-}
-
-/*
- * int table_attr
- *
- * DESCRIPTION:
- *
- * Set the attributes for the table.  The available attributes are
- * specified at the top of table.h.
- *
- * RETURNS:
- *
- * Success - TABLE_ERROR_NONE
- *
- * Failure - Table error code.
- *
- * ARGUMENTS:
- *
- * table_p - Pointer to a table structure which we will be altering.
- *
- * attr - Attribute(s) that we will be applying to the table.
- */
-int table_attr(table_t * table_p, const int attr)
-{
-    if (table_p == NULL)
-        return TABLE_ERROR_ARG_NULL;
-    if (table_p->ta_magic != TABLE_MAGIC)
-        return TABLE_ERROR_PNT;
-    table_p->ta_flags = attr;
-
-    return TABLE_ERROR_NONE;
-}
-
-/*
- * int table_set_data_alignment
- *
- * DESCRIPTION:
- *
- * Set the alignment for the data in the table.  For data elements
- * sizeof(long) is recommended unless you use smaller data types
- * exclusively.
- *
- * WARNING: This must be done before any data gets put into the table.
- *
- * RETURNS:
- *
- * Success - TABLE_ERROR_NONE
- *
- * Failure - Table error code.
- *
- * ARGUMENTS:
- *
- * table_p - Pointer to a table structure which we will be altering.
- *
- * alignment - Alignment requested for the data.  Must be a power of
- * 2.  Set to 0 for none.
- */
-int table_set_data_alignment(table_t * table_p, const int alignment)
-{
-    int val;
-
-    if (table_p == NULL)
-        return TABLE_ERROR_ARG_NULL;
-    if (table_p->ta_magic != TABLE_MAGIC)
-        return TABLE_ERROR_PNT;
-    if (table_p->ta_entry_n > 0)
-        return TABLE_ERROR_NOT_EMPTY;
-    /* defaults */
-    if (alignment < 2)
-        table_p->ta_data_align = 0;
-    else {
-        /* verify we have a base 2 number */
-        for (val = 2; val < MAX_ALIGNMENT; val *= 2) {
-            if (val == alignment)
-                break;
-        }
-        if (val >= MAX_ALIGNMENT)
-            return TABLE_ERROR_ALIGNMENT;
-        table_p->ta_data_align = alignment;
-    }
-
-    return TABLE_ERROR_NONE;
-}
-
-/*
- * int table_clear
- *
- * DESCRIPTION:
- *
- * Clear out and free all elements in a table structure.
- *
- * RETURNS:
- *
- * Success - TABLE_ERROR_NONE
- *
- * Failure - Table error code.
- *
- * ARGUMENTS:
- *
- * table_p - Table structure pointer that we will be clearing.
- */
-int table_clear(table_t * table_p)
-{
-#if 0
-    table_entry_t *entry_p, *next_p;
-#endif
-    table_entry_t **bucket_p, **bounds_p;
-
-    if (table_p == NULL)
-        return TABLE_ERROR_ARG_NULL;
-    if (table_p->ta_magic != TABLE_MAGIC)
-        return TABLE_ERROR_PNT;
-    /* free the table allocation and table structure */
-    bounds_p = table_p->ta_buckets + table_p->ta_bucket_n;
-    for (bucket_p = table_p->ta_buckets; bucket_p <= bounds_p; bucket_p++) {
-#if 0
-        for (entry_p = *bucket_p; entry_p != NULL; entry_p = next_p) {
-            /* record the next pointer before we free */
-            next_p = entry_p->te_next_p;
-            table_p->ta_free(table_p->opt_param, entry_p);
-        }
-#endif
-        /* clear the bucket entry after we free its entries */
-        *bucket_p = NULL;
-    }
-
-    /* reset table state info */
-    table_p->ta_entry_n = 0;
-    table_p->ta_linear.tl_magic = 0;
-    table_p->ta_linear.tl_bucket_c = 0;
-    table_p->ta_linear.tl_entry_c = 0;
-
-    return TABLE_ERROR_NONE;
-}
-
-/*
- * int table_free
- *
- * DESCRIPTION:
- *
- * Deallocates a table structure.
- *
- * RETURNS:
- *
- * Success - TABLE_ERROR_NONE
- *
- * Failure - Table error code.
- *
- * ARGUMENTS:
- *
- * table_p - Table structure pointer that we will be freeing.
- */
-int table_free(table_t * table_p)
-{
-    int ret;
-
-    if (table_p == NULL)
-        return TABLE_ERROR_ARG_NULL;
-    if (table_p->ta_magic != TABLE_MAGIC)
-        return TABLE_ERROR_PNT;
-    ret = table_clear(table_p);
-
-    if (table_p->ta_buckets != NULL)
-        table_p->ta_free(table_p->opt_param, table_p->ta_buckets);
-    table_p->ta_magic = 0;
-    table_p->ta_free(table_p->opt_param, table_p);
-
-    return ret;
-}
-
-/*
- * int table_insert_kd
- *
- * DESCRIPTION:
- *
- * Like table_insert except it passes back a pointer to the key and
- * the data buffers after they have been inserted into the table
- * structure.
- *
- * This routine adds a key/data pair both of which are made up of a
- * buffer of bytes and an associated size.  Both the key and the data
- * will be copied into buffers allocated inside the table.  If the key
- * exists already, the associated data will be replaced if the
- * overwrite flag is set, otherwise an error is returned.
- *
- * NOTE: be very careful changing the values since the table library
- * provides the pointers to its memory.  The key can _never_ be
- * changed otherwise you will not find it again.  The data can be
- * changed but its length can never be altered unless you delete and
- * re-insert it into the table.
- *
- * WARNING: The pointers to the key and data are not in any specific
- * alignment.  Accessing the key and/or data as an short, integer, or
- * long pointer directly can cause problems.
- *
- * WARNING: Replacing a data cell (not inserting) will cause the table
- * linked list to be temporarily invalid.  Care must be taken with
- * multiple threaded programs which are relying on the first/next
- * linked list to be always valid.
- *
- * RETURNS:
- *
- * Success - TABLE_ERROR_NONE
- *
- * Failure - Table error code.
- *
- * ARGUMENTS:
- *
- * table_p - Table structure pointer into which we will be inserting a
- * new key/data pair.
- *
- * key_buf - Buffer of bytes of the key that we are inserting.  If you
- * are storing an (int) as the key (for example) then key_buf should
- * be a (int *).
- *
- * key_size - Size of the key_buf buffer.  If set to < 0 then the
- * library will do a strlen of key_buf and add 1 for the '\0'.  If you
- * are storing an (int) as the key (for example) then key_size should
- * be sizeof(int).
- *
- * data_buf - Buffer of bytes of the data that we are inserting.  If
- * it is NULL then the library will allocate space for the data in the
- * table without copying in any information.  If data_buf is NULL and
- * data_size is 0 then the library will associate a NULL data pointer
- * with the key.  If you are storing a (long) as the data (for
- * example) then data_buf should be a (long *).
- *
- * data_size - Size of the data_buf buffer.  If set to < 0 then the
- * library will do a strlen of data_buf and add 1 for the '\0'.  If
- * you are storing an (long) as the key (for example) then key_size
- * should be sizeof(long).
- *
- * key_buf_p - Pointer which, if not NULL, will be set to the address
- * of the key storage that was allocated in the table.  If you are
- * storing an (int) as the key (for example) then key_buf_p should be
- * (int **) i.e. the address of a (int *).
- *
- * data_buf_p - Pointer which, if not NULL, will be set to the address
- * of the data storage that was allocated in the table.  If you are
- * storing an (long) as the data (for example) then data_buf_p should
- * be (long **) i.e. the address of a (long *).
- *
- * overwrite - Flag which, if set to 1, will allow the overwriting of
- * the data in the table with the new data if the key already exists
- * in the table.
- */
-int table_insert_kd(table_t * table_p,
-                    const void *key_buf, const int key_size,
-                    const void *data_buf, const int data_size,
-                    void **key_buf_p, void **data_buf_p,
-                    const char overwrite_b)
-{
-    int bucket;
-    unsigned int ksize, dsize;
-    table_entry_t *entry_p, *last_p;
-    void *key_copy_p, *data_copy_p;
-
-    /* check the arguments */
-    if (table_p == NULL)
-        return TABLE_ERROR_ARG_NULL;
-    if (table_p->ta_magic != TABLE_MAGIC)
-        return TABLE_ERROR_PNT;
-    if (key_buf == NULL)
-        return TABLE_ERROR_ARG_NULL;
-    /* data_buf can be null but size must be >= 0, if it isn't null size != 0 */
-    if ((data_buf == NULL && data_size < 0)
-        || (data_buf != NULL && data_size == 0))
-        return TABLE_ERROR_SIZE;
-    /* determine sizes of key and data */
-    if (key_size < 0)
-        ksize = strlen((char *) key_buf) + sizeof(char);
-    else
-        ksize = key_size;
-    if (data_size < 0)
-        dsize = strlen((char *) data_buf) + sizeof(char);
-    else
-        dsize = data_size;
-    /* get the bucket number via a hash function */
-    bucket = hash(key_buf, ksize, 0) % table_p->ta_bucket_n;
-
-    /* look for the entry in this bucket, only check keys of the same size */
-    last_p = NULL;
-    for (entry_p = table_p->ta_buckets[bucket];
-         (entry_p != NULL) && (entry_p->te_next_p != last_p);
-         last_p = entry_p, entry_p = entry_p->te_next_p) {
-        if (entry_p->te_key_size == ksize
-            && memcmp(ENTRY_KEY_BUF(entry_p), key_buf, ksize) == 0)
-            break;
-    }
-
-    /* did we find it?  then we are in replace mode. */
-    if (entry_p != NULL) {
-
-        /* can we not overwrite existing data? */
-        if (!overwrite_b) {
-            if (key_buf_p != NULL)
-                *key_buf_p = ENTRY_KEY_BUF(entry_p);
-            if (data_buf_p != NULL) {
-                if (entry_p->te_data_size == 0)
-                    *data_buf_p = NULL;
-                else {
-                    if (table_p->ta_data_align == 0)
-                        *data_buf_p = ENTRY_DATA_BUF(table_p, entry_p);
-                    else
-                        *data_buf_p = entry_data_buf(table_p, entry_p);
-                }
-            }
-            return TABLE_ERROR_OVERWRITE;
-        }
-
-        /* re-alloc entry's data if the new size != the old */
-        if (dsize != entry_p->te_data_size) {
-
-            /*
-             * First we delete it from the list to keep the list whole.
-             * This properly preserves the linked list in case we have a
-             * thread marching through the linked list while we are
-             * inserting.  Maybe this is an unnecessary protection but it
-             * should not harm that much.
-             */
-            if (last_p == NULL)
-                table_p->ta_buckets[bucket] = entry_p->te_next_p;
-            else
-                last_p->te_next_p = entry_p->te_next_p;
-            /*
-             * Realloc the structure which may change its pointer. NOTE:
-             * this may change any previous data_key_p and data_copy_p
-             * pointers.
-             */
-            entry_p = (table_entry_t *)
-                       table_p->ta_realloc(table_p->opt_param, entry_p,
-			     entry_size(table_p, entry_p->te_key_size, dsize));
-            if (entry_p == NULL)
-                return TABLE_ERROR_ALLOC;
-            /* add it back to the front of the list */
-            entry_p->te_data_size = dsize;
-            entry_p->te_next_p = table_p->ta_buckets[bucket];
-            table_p->ta_buckets[bucket] = entry_p;
-        }
-
-        /* copy or replace data in storage */
-        if (dsize > 0) {
-            if (table_p->ta_data_align == 0)
-                data_copy_p = ENTRY_DATA_BUF(table_p, entry_p);
-            else
-                data_copy_p = entry_data_buf(table_p, entry_p);
-            if (data_buf != NULL)
-                memcpy(data_copy_p, data_buf, dsize);
-        }
-        else
-            data_copy_p = NULL;
-        if (key_buf_p != NULL)
-            *key_buf_p = ENTRY_KEY_BUF(entry_p);
-        if (data_buf_p != NULL)
-            *data_buf_p = data_copy_p;
-        /* returning from the section where we were overwriting table data */
-        return TABLE_ERROR_NONE;
-    }
-
-    /*
-     * It is a new entry.
-     */
-
-    /* allocate a new entry */
-    entry_p = (table_entry_t *)
-               table_p->ta_malloc(table_p->opt_param,
-                                  entry_size(table_p, ksize, dsize));
-    if (entry_p == NULL)
-        return TABLE_ERROR_ALLOC;
-    /* copy key into storage */
-    entry_p->te_key_size = ksize;
-    key_copy_p = ENTRY_KEY_BUF(entry_p);
-    memcpy(key_copy_p, key_buf, ksize);
-
-    /* copy data in */
-    entry_p->te_data_size = dsize;
-    if (dsize > 0) {
-        if (table_p->ta_data_align == 0)
-            data_copy_p = ENTRY_DATA_BUF(table_p, entry_p);
-        else
-            data_copy_p = entry_data_buf(table_p, entry_p);
-        if (data_buf != NULL)
-            memcpy(data_copy_p, data_buf, dsize);
-    }
-    else
-        data_copy_p = NULL;
-    if (key_buf_p != NULL)
-        *key_buf_p = key_copy_p;
-    if (data_buf_p != NULL)
-        *data_buf_p = data_copy_p;
-    /* insert into list, no need to append */
-    entry_p->te_next_p = table_p->ta_buckets[bucket];
-    table_p->ta_buckets[bucket] = entry_p;
-
-    table_p->ta_entry_n++;
-
-    /* do we need auto-adjust? */
-    if (table_p->ta_flags & TABLE_FLAG_AUTO_ADJUST
-        && SHOULD_TABLE_GROW(table_p))
-        return table_adjust(table_p, table_p->ta_entry_n);
-    return TABLE_ERROR_NONE;
-}
-
-/*
- * int table_insert
- *
- * DESCRIPTION:
- *
- * Exactly the same as table_insert_kd except it does not pass back a
- * pointer to the key after they have been inserted into the table
- * structure.  This is still here for backwards compatibility.
- *
- * See table_insert_kd for more information.
- *
- * RETURNS:
- *
- * Success - TABLE_ERROR_NONE
- *
- * Failure - Table error code.
- *
- * ARGUMENTS:
- *
- * table_p - Table structure pointer into which we will be inserting a
- * new key/data pair.
- *
- * key_buf - Buffer of bytes of the key that we are inserting.  If you
- * are storing an (int) as the key (for example) then key_buf should
- * be a (int *).
- *
- * key_size - Size of the key_buf buffer.  If set to < 0 then the
- * library will do a strlen of key_buf and add 1 for the '\0'.  If you
- * are storing an (int) as the key (for example) then key_size should
- * be sizeof(int).
- *
- * data_buf - Buffer of bytes of the data that we are inserting.  If
- * it is NULL then the library will allocate space for the data in the
- * table without copying in any information.  If data_buf is NULL and
- * data_size is 0 then the library will associate a NULL data pointer
- * with the key.  If you are storing a (long) as the data (for
- * example) then data_buf should be a (long *).
- *
- * data_size - Size of the data_buf buffer.  If set to < 0 then the
- * library will do a strlen of data_buf and add 1 for the '\0'.  If
- * you are storing an (long) as the key (for example) then key_size
- * should be sizeof(long).
- *
- * data_buf_p - Pointer which, if not NULL, will be set to the address
- * of the data storage that was allocated in the table.  If you are
- * storing an (long) as the data (for example) then data_buf_p should
- * be (long **) i.e. the address of a (long *).
- *
- * overwrite - Flag which, if set to 1, will allow the overwriting of
- * the data in the table with the new data if the key already exists
- * in the table.
- */
-int table_insert(table_t * table_p,
-                 const void *key_buf, const int key_size,
-                 const void *data_buf, const int data_size,
-                 void **data_buf_p, const char overwrite_b)
-{
-    return table_insert_kd(table_p, key_buf, key_size, data_buf, data_size,
-                           NULL, data_buf_p, overwrite_b);
-}
-
-/*
- * int table_retrieve
- *
- * DESCRIPTION:
- *
- * This routine looks up a key made up of a buffer of bytes and an
- * associated size in the table.  If found then it returns the
- * associated data information.
- *
- * RETURNS:
- *
- * Success - TABLE_ERROR_NONE
- *
- * Failure - Table error code.
- *
- * ARGUMENTS:
- *
- * table_p - Table structure pointer into which we will be searching
- * for the key.
- *
- * key_buf - Buffer of bytes of the key that we are searching for.  If
- * you are looking for an (int) as the key (for example) then key_buf
- * should be a (int *).
- *
- * key_size - Size of the key_buf buffer.  If set to < 0 then the
- * library will do a strlen of key_buf and add 1 for the '\0'.  If you
- * are looking for an (int) as the key (for example) then key_size
- * should be sizeof(int).
- *
- * data_buf_p - Pointer which, if not NULL, will be set to the address
- * of the data storage that was allocated in the table and that is
- * associated with the key.  If a (long) was stored as the data (for
- * example) then data_buf_p should be (long **) i.e. the address of a
- * (long *).
- *
- * data_size_p - Pointer to an integer which, if not NULL, will be set
- * to the size of the data stored in the table that is associated with
- * the key.
- */
-int table_retrieve(table_t * table_p,
-                   const void *key_buf, const int key_size,
-                   void **data_buf_p, int *data_size_p)
-{
-    int bucket;
-    unsigned int ksize;
-    table_entry_t *entry_p, **buckets;
-
-    if (table_p == NULL)
-        return TABLE_ERROR_ARG_NULL;
-    if (table_p->ta_magic != TABLE_MAGIC)
-        return TABLE_ERROR_PNT;
-    if (key_buf == NULL)
-        return TABLE_ERROR_ARG_NULL;
-    /* find key size */
-    if (key_size < 0)
-        ksize = strlen((char *) key_buf) + sizeof(char);
-    else
-        ksize = key_size;
-    /* get the bucket number via a has function */
-    bucket = hash(key_buf, ksize, 0) % table_p->ta_bucket_n;
-
-    /* look for the entry in this bucket, only check keys of the same size */
-    buckets = table_p->ta_buckets;
-    for (entry_p = buckets[bucket];
-         entry_p != NULL;
-         entry_p = entry_p->te_next_p) {
-        entry_p = TABLE_POINTER(table_p, table_entry_t *, entry_p);
-        if (entry_p->te_key_size == ksize
-            && memcmp(ENTRY_KEY_BUF(entry_p), key_buf, ksize) == 0)
-            break;
-    }
-
-    /* not found? */
-    if (entry_p == NULL)
-        return TABLE_ERROR_NOT_FOUND;
-    if (data_buf_p != NULL) {
-        if (entry_p->te_data_size == 0)
-            *data_buf_p = NULL;
-        else {
-            if (table_p->ta_data_align == 0)
-                *data_buf_p = ENTRY_DATA_BUF(table_p, entry_p);
-            else
-                *data_buf_p = entry_data_buf(table_p, entry_p);
-        }
-    }
-    if (data_size_p != NULL)
-        *data_size_p = entry_p->te_data_size;
-    return TABLE_ERROR_NONE;
-}
-
-/*
- * int table_delete
- *
- * DESCRIPTION:
- *
- * This routine looks up a key made up of a buffer of bytes and an
- * associated size in the table.  If found then it will be removed
- * from the table.  The associated data can be passed back to the user
- * if requested.
- *
- * RETURNS:
- *
- * Success - TABLE_ERROR_NONE
- *
- * Failure - Table error code.
- *
- * NOTE: this could be an allocation error if the library is to return
- * the data to the user.
- *
- * ARGUMENTS:
- *
- * table_p - Table structure pointer from which we will be deleteing
- * the key.
- *
- * key_buf - Buffer of bytes of the key that we are searching for to
- * delete.  If you are deleting an (int) key (for example) then
- * key_buf should be a (int *).
- *
- * key_size - Size of the key_buf buffer.  If set to < 0 then the
- * library will do a strlen of key_buf and add 1 for the '\0'.  If you
- * are deleting an (int) key (for example) then key_size should be
- * sizeof(int).
- *
- * data_buf_p - Pointer which, if not NULL, will be set to the address
- * of the data storage that was allocated in the table and that was
- * associated with the key.  If a (long) was stored as the data (for
- * example) then data_buf_p should be (long **) i.e. the address of a
- * (long *).  If a pointer is passed in, the caller is responsible for
- * freeing it after use.  If data_buf_p is NULL then the library will
- * free up the data allocation itself.
- *
- * data_size_p - Pointer to an integer which, if not NULL, will be set
- * to the size of the data that was stored in the table and that was
- * associated with the key.
- */
-int table_delete(table_t * table_p,
-                 const void *key_buf, const int key_size,
-                 void **data_buf_p, int *data_size_p)
-{
-    int bucket;
-    unsigned int ksize;
-    unsigned char *data_copy_p;
-    table_entry_t *entry_p, *last_p;
-
-    if (table_p == NULL)
-        return TABLE_ERROR_ARG_NULL;
-    if (table_p->ta_magic != TABLE_MAGIC)
-        return TABLE_ERROR_PNT;
-    if (key_buf == NULL)
-        return TABLE_ERROR_ARG_NULL;
-    /* get the key size */
-    if (key_size < 0)
-        ksize = strlen((char *) key_buf) + sizeof(char);
-    else
-        ksize = key_size;
-    /* find our bucket */
-    bucket = hash(key_buf, ksize, 0) % table_p->ta_bucket_n;
-
-    /* look for the entry in this bucket, only check keys of the same size */
-    for (last_p = NULL, entry_p = table_p->ta_buckets[bucket]; entry_p != NULL;
-         last_p = entry_p, entry_p = entry_p->te_next_p) {
-        if (entry_p->te_key_size == ksize
-            && memcmp(ENTRY_KEY_BUF(entry_p), key_buf, ksize) == 0)
-            break;
-    }
-
-    /* did we find it? */
-    if (entry_p == NULL)
-        return TABLE_ERROR_NOT_FOUND;
-    /*
-     * NOTE: we may want to adjust the linear counters here if the entry
-     * we are deleting is the one we are pointing on or is ahead of the
-     * one in the bucket list
-     */
-
-    /* remove entry from the linked list */
-    if (last_p == NULL)
-        table_p->ta_buckets[bucket] = entry_p->te_next_p;
-    else
-        last_p->te_next_p = entry_p->te_next_p;
-    /* free entry */
-    if (data_buf_p != NULL) {
-        if (entry_p->te_data_size == 0)
-            *data_buf_p = NULL;
-        else {
-            /*
-             * if we were storing it compacted, we now need to malloc some
-             * space if the user wants the value after the delete.
-             */
-            *data_buf_p = table_p->ta_malloc(table_p->opt_param,
-                                             entry_p->te_data_size);
-            if (*data_buf_p == NULL)
-                return TABLE_ERROR_ALLOC;
-            if (table_p->ta_data_align == 0)
-                data_copy_p = ENTRY_DATA_BUF(table_p, entry_p);
-            else
-                data_copy_p = entry_data_buf(table_p, entry_p);
-            memcpy(*data_buf_p, data_copy_p, entry_p->te_data_size);
-        }
-    }
-    if (data_size_p != NULL)
-        *data_size_p = entry_p->te_data_size;
-    table_p->ta_free(table_p->opt_param, entry_p);
-    entry_p = NULL;
-
-    table_p->ta_entry_n--;
-
-    /* do we need auto-adjust down? */
-    if ((table_p->ta_flags & TABLE_FLAG_AUTO_ADJUST)
-        && (table_p->ta_flags & TABLE_FLAG_ADJUST_DOWN)
-        && SHOULD_TABLE_SHRINK(table_p))
-        return table_adjust(table_p, table_p->ta_entry_n);
-    return TABLE_ERROR_NONE;
-}
-
-/*
- * int table_delete_first
- *
- * DESCRIPTION:
- *
- * This is like the table_delete routines except it deletes the first
- * key/data pair in the table instead of an entry corresponding to a
- * particular key.  The associated key and data information can be
- * passed back to the user if requested.  This routines is handy to
- * clear out a table.
- *
- * RETURNS:
- *
- * Success - TABLE_ERROR_NONE
- *
- * Failure - Table error code.
- *
- * NOTE: this could be an allocation error if the library is to return
- * the data to the user.
- *
- * ARGUMENTS:
- *
- * table_p - Table structure pointer from which we will be deleteing
- * the first key.
- *
- * key_buf_p - Pointer which, if not NULL, will be set to the address
- * of the storage of the first key that was allocated in the table.
- * If an (int) was stored as the first key (for example) then
- * key_buf_p should be (int **) i.e. the address of a (int *).  If a
- * pointer is passed in, the caller is responsible for freeing it
- * after use.  If key_buf_p is NULL then the library will free up the
- * key allocation itself.
- *
- * key_size_p - Pointer to an integer which, if not NULL, will be set
- * to the size of the key that was stored in the table and that was
- * associated with the key.
- *
- * data_buf_p - Pointer which, if not NULL, will be set to the address
- * of the data storage that was allocated in the table and that was
- * associated with the key.  If a (long) was stored as the data (for
- * example) then data_buf_p should be (long **) i.e. the address of a
- * (long *).  If a pointer is passed in, the caller is responsible for
- * freeing it after use.  If data_buf_p is NULL then the library will
- * free up the data allocation itself.
- *
- * data_size_p - Pointer to an integer which, if not NULL, will be set
- * to the size of the data that was stored in the table and that was
- * associated with the key.
- */
-int table_delete_first(table_t * table_p,
-                       void **key_buf_p, int *key_size_p,
-                       void **data_buf_p, int *data_size_p)
-{
-    unsigned char *data_copy_p;
-    table_entry_t *entry_p;
-    table_linear_t linear;
-
-    if (table_p == NULL)
-        return TABLE_ERROR_ARG_NULL;
-    if (table_p->ta_magic != TABLE_MAGIC)
-        return TABLE_ERROR_PNT;
-    /* take the first entry */
-    entry_p = first_entry(table_p, &linear);
-    if (entry_p == NULL)
-        return TABLE_ERROR_NOT_FOUND;
-    /*
-     * NOTE: we may want to adjust the linear counters here if the entry
-     * we are deleting is the one we are pointing on or is ahead of the
-     * one in the bucket list
-     */
-
-    /* remove entry from the linked list */
-    table_p->ta_buckets[linear.tl_bucket_c] = entry_p->te_next_p;
-
-    /* free entry */
-    if (key_buf_p != NULL) {
-        if (entry_p->te_key_size == 0)
-            *key_buf_p = NULL;
-        else {
-            /*
-             * if we were storing it compacted, we now need to malloc some
-             * space if the user wants the value after the delete.
-             */
-            *key_buf_p = table_p->ta_malloc(table_p->opt_param,
-                                            entry_p->te_key_size);
-            if (*key_buf_p == NULL)
-                return TABLE_ERROR_ALLOC;
-            memcpy(*key_buf_p, ENTRY_KEY_BUF(entry_p), entry_p->te_key_size);
-        }
-    }
-    if (key_size_p != NULL)
-        *key_size_p = entry_p->te_key_size;
-    if (data_buf_p != NULL) {
-        if (entry_p->te_data_size == 0)
-            *data_buf_p = NULL;
-        else {
-            /*
-             * if we were storing it compacted, we now need to malloc some
-             * space if the user wants the value after the delete.
-             */
-            *data_buf_p = table_p->ta_malloc(table_p->opt_param,
-                                             entry_p->te_data_size);
-            if (*data_buf_p == NULL)
-                return TABLE_ERROR_ALLOC;
-            if (table_p->ta_data_align == 0)
-                data_copy_p = ENTRY_DATA_BUF(table_p, entry_p);
-            else
-                data_copy_p = entry_data_buf(table_p, entry_p);
-            memcpy(*data_buf_p, data_copy_p, entry_p->te_data_size);
-        }
-    }
-    if (data_size_p != NULL)
-        *data_size_p = entry_p->te_data_size;
-    table_p->ta_free(table_p->opt_param, entry_p);
-
-    table_p->ta_entry_n--;
-
-    /* do we need auto-adjust down? */
-    if ((table_p->ta_flags & TABLE_FLAG_AUTO_ADJUST)
-        && (table_p->ta_flags & TABLE_FLAG_ADJUST_DOWN)
-        && SHOULD_TABLE_SHRINK(table_p))
-        return table_adjust(table_p, table_p->ta_entry_n);
-    return TABLE_ERROR_NONE;
-}
-
-/*
- * int table_info
- *
- * DESCRIPTION:
- *
- * Get some information about a table_p structure.
- *
- * RETURNS:
- *
- * Success - TABLE_ERROR_NONE
- *
- * Failure - Table error code.
- *
- * ARGUMENTS:
- *
- * table_p - Table structure pointer from which we are getting
- * information.
- *
- * num_buckets_p - Pointer to an integer which, if not NULL, will
- * contain the number of buckets in the table.
- *
- * num_entries_p - Pointer to an integer which, if not NULL, will
- * contain the number of entries stored in the table.
- */
-int table_info(table_t * table_p, int *num_buckets_p, int *num_entries_p)
-{
-    if (table_p == NULL)
-        return TABLE_ERROR_ARG_NULL;
-    if (table_p->ta_magic != TABLE_MAGIC)
-        return TABLE_ERROR_PNT;
-    if (num_buckets_p != NULL)
-        *num_buckets_p = table_p->ta_bucket_n;
-    if (num_entries_p != NULL)
-        *num_entries_p = table_p->ta_entry_n;
-    return TABLE_ERROR_NONE;
-}
-
-/*
- * int table_adjust
- *
- * DESCRIPTION:
- *
- * Set the number of buckets in a table to a certain value.
- *
- * RETURNS:
- *
- * Success - TABLE_ERROR_NONE
- *
- * Failure - Table error code.
- *
- * ARGUMENTS:
- *
- * table_p - Table structure pointer of which we are adjusting.
- *
- * bucket_n - Number buckets to adjust the table to.  Set to 0 to
- * adjust the table to its number of entries.
- */
-int table_adjust(table_t * table_p, const int bucket_n)
-{
-    table_entry_t *entry_p, *next_p;
-    table_entry_t **buckets, **bucket_p, **bounds_p;
-    int bucket;
-    unsigned int buck_n;
-
-    if (table_p == NULL)
-        return TABLE_ERROR_ARG_NULL;
-    if (table_p->ta_magic != TABLE_MAGIC)
-        return TABLE_ERROR_PNT;
-    /*
-     * NOTE: we walk through the entries and rehash them.  If we stored
-     * the hash value as a full int in the table-entry, all we would
-     * have to do is remod it.
-     */
-
-    /* normalize to the number of entries */
-    if (bucket_n == 0)
-        buck_n = table_p->ta_entry_n;
-    else
-        buck_n = bucket_n;
-    /* we must have at least 1 bucket */
-    if (buck_n == 0)
-        buck_n = 1;
-    /* make sure we have somethign to do */
-    if (buck_n <= table_p->ta_bucket_n)
-        return TABLE_ERROR_NONE;
-    /* allocate a new bucket list */
-    buckets = (table_entry_t **)
-               table_p->ta_calloc(table_p->opt_param,
-                                  buck_n, sizeof(table_entry_t *));
-    if (table_p->ta_buckets == NULL)
-        return TABLE_ERROR_ALLOC;
-    /*
-     * run through each of the items in the current table and rehash
-     * them into the newest bucket sizes
-     */
-    bounds_p = table_p->ta_buckets + table_p->ta_bucket_n;
-    for (bucket_p = table_p->ta_buckets; bucket_p < bounds_p; bucket_p++) {
-        for (entry_p = *bucket_p; entry_p != NULL; entry_p = next_p) {
-
-            /* hash the old data into the new table size */
-            bucket = hash(ENTRY_KEY_BUF(entry_p), entry_p->te_key_size, 0) % buck_n;
-
-            /* record the next one now since we overwrite next below */
-            next_p = entry_p->te_next_p;
-
-            /* insert into new list, no need to append */
-            entry_p->te_next_p = buckets[bucket];
-            buckets[bucket] = entry_p;
-
-            /*
-             * NOTE: we may want to adjust the bucket_c linear entry here to
-             * keep it current
-             */
-        }
-        /* remove the old table pointers as we go by */
-        *bucket_p = NULL;
-    }
-
-    /* replace the table buckets with the new ones */
-    table_p->ta_free(table_p->opt_param, table_p->ta_buckets);
-    table_p->ta_buckets = buckets;
-    table_p->ta_bucket_n = buck_n;
-
-    return TABLE_ERROR_NONE;
-}
-
-/*
- * const char *table_strerror
- *
- * DESCRIPTION:
- *
- * Return the corresponding string for the error number.
- *
- * RETURNS:
- *
- * Success - String equivalient of the error.
- *
- * Failure - String "invalid error code"
- *
- * ARGUMENTS:
- *
- * error - Error number that we are converting.
- */
-const char *table_strerror(const int error)
-{
-    error_str_t *err_p;
-
-    for (err_p = errors; err_p->es_error != 0; err_p++) {
-        if (err_p->es_error == error)
-            return err_p->es_string;
-    }
-
-    return INVALID_ERROR;
-}
-
-/*
- * int table_type_size
- *
- * DESCRIPTION:
- *
- * Return the size of the internal table type.
- *
- * RETURNS:
- *
- * The size of the table_t type.
- *
- * ARGUMENTS:
- *
- * None.
- */
-int table_type_size(void)
-{
-    return sizeof(table_t);
-}
-
-/************************* linear access routines ****************************/
-
-/*
- * int table_first
- *
- * DESCRIPTION:
- *
- * Find first element in a table and pass back information about the
- * key/data pair.  If any of the key/data pointers are NULL then they
- * are ignored.
- *
- * NOTE: This function is not reentrant.  More than one thread cannot
- * be doing a first and next on the same table at the same time.  Use
- * the table_first_r version below for this.
- *
- * RETURNS:
- *
- * Success - TABLE_ERROR_NONE
- *
- * Failure - Table error code.
- *
- * ARGUMENTS:
- *
- * table_p - Table structure pointer from which we are getting the
- * first element.
- *
- * key_buf_p - Pointer which, if not NULL, will be set to the address
- * of the storage of the first key that is allocated in the table.  If
- * an (int) is stored as the first key (for example) then key_buf_p
- * should be (int **) i.e. the address of a (int *).
- *
- * key_size_p - Pointer to an integer which, if not NULL, will be set
- * to the size of the key that is stored in the table and that is
- * associated with the first key.
- *
- * data_buf_p - Pointer which, if not NULL, will be set to the address
- * of the data storage that is allocated in the table and that is
- * associated with the first key.  If a (long) is stored as the data
- * (for example) then data_buf_p should be (long **) i.e. the address
- * of a (long *).
- *
- * data_size_p - Pointer to an integer which, if not NULL, will be set
- * to the size of the data that is stored in the table and that is
- * associated with the first key.
- */
-int table_first(table_t * table_p,
-                void **key_buf_p, int *key_size_p,
-                void **data_buf_p, int *data_size_p)
-{
-    table_entry_t *entry_p;
-
-    if (table_p == NULL)
-        return TABLE_ERROR_ARG_NULL;
-    if (table_p->ta_magic != TABLE_MAGIC)
-        return TABLE_ERROR_PNT;
-    /* initialize our linear magic number */
-    table_p->ta_linear.tl_magic = LINEAR_MAGIC;
-
-    entry_p = first_entry(table_p, &table_p->ta_linear);
-    if (entry_p == NULL)
-        return TABLE_ERROR_NOT_FOUND;
-    if (key_buf_p != NULL)
-        *key_buf_p = ENTRY_KEY_BUF(entry_p);
-    if (key_size_p != NULL)
-        *key_size_p = entry_p->te_key_size;
-    if (data_buf_p != NULL) {
-        if (entry_p->te_data_size == 0)
-            *data_buf_p = NULL;
-        else {
-            if (table_p->ta_data_align == 0)
-                *data_buf_p = ENTRY_DATA_BUF(table_p, entry_p);
-            else
-                *data_buf_p = entry_data_buf(table_p, entry_p);
-        }
-    }
-    if (data_size_p != NULL)
-        *data_size_p = entry_p->te_data_size;
-    return TABLE_ERROR_NONE;
-}
-
-/*
- * int table_next
- *
- * DESCRIPTION:
- *
- * Find the next element in a table and pass back information about
- * the key/data pair.  If any of the key/data pointers are NULL then
- * they are ignored.
- *
- * NOTE: This function is not reentrant.  More than one thread cannot
- * be doing a first and next on the same table at the same time.  Use
- * the table_next_r version below for this.
- *
- * RETURNS:
- *
- * Success - TABLE_ERROR_NONE
- *
- * Failure - Table error code.
- *
- * ARGUMENTS:
- *
- * table_p - Table structure pointer from which we are getting the
- * next element.
- *
- * key_buf_p - Pointer which, if not NULL, will be set to the address
- * of the storage of the next key that is allocated in the table.  If
- * an (int) is stored as the next key (for example) then key_buf_p
- * should be (int **) i.e. the address of a (int *).
- *
- * key_size_p - Pointer to an integer which, if not NULL, will be set
- * to the size of the key that is stored in the table and that is
- * associated with the next key.
- *
- * data_buf_p - Pointer which, if not NULL, will be set to the address
- * of the data storage that is allocated in the table and that is
- * associated with the next key.  If a (long) is stored as the data
- * (for example) then data_buf_p should be (long **) i.e. the address
- * of a (long *).
- *
- * data_size_p - Pointer to an integer which, if not NULL, will be set
- * to the size of the data that is stored in the table and that is
- * associated with the next key.
- */
-int table_next(table_t * table_p,
-               void **key_buf_p, int *key_size_p,
-               void **data_buf_p, int *data_size_p)
-{
-    table_entry_t *entry_p;
-    int error;
-
-    if (table_p == NULL)
-        return TABLE_ERROR_ARG_NULL;
-    if (table_p->ta_magic != TABLE_MAGIC)
-        return TABLE_ERROR_PNT;
-    if (table_p->ta_linear.tl_magic != LINEAR_MAGIC)
-        return TABLE_ERROR_LINEAR;
-    /* move to the next entry */
-    entry_p = next_entry(table_p, &table_p->ta_linear, &error);
-    if (entry_p == NULL)
-        return error;
-    if (key_buf_p != NULL)
-        *key_buf_p = ENTRY_KEY_BUF(entry_p);
-    if (key_size_p != NULL)
-        *key_size_p = entry_p->te_key_size;
-    if (data_buf_p != NULL) {
-        if (entry_p->te_data_size == 0)
-            *data_buf_p = NULL;
-        else {
-            if (table_p->ta_data_align == 0)
-                *data_buf_p = ENTRY_DATA_BUF(table_p, entry_p);
-            else
-                *data_buf_p = entry_data_buf(table_p, entry_p);
-        }
-    }
-    if (data_size_p != NULL)
-        *data_size_p = entry_p->te_data_size;
-    return TABLE_ERROR_NONE;
-}
-
-/*
- * int table_this
- *
- * DESCRIPTION:
- *
- * Find the current element in a table and pass back information about
- * the key/data pair.  If any of the key/data pointers are NULL then
- * they are ignored.
- *
- * NOTE: This function is not reentrant.  Use the table_current_r
- * version below.
- *
- * RETURNS:
- *
- * Success - TABLE_ERROR_NONE
- *
- * Failure - Table error code.
- *
- * ARGUMENTS:
- *
- * table_p - Table structure pointer from which we are getting the
- * current element.
- *
- * key_buf_p - Pointer which, if not NULL, will be set to the address
- * of the storage of the current key that is allocated in the table.
- * If an (int) is stored as the current key (for example) then
- * key_buf_p should be (int **) i.e. the address of a (int *).
- *
- * key_size_p - Pointer to an integer which, if not NULL, will be set
- * to the size of the key that is stored in the table and that is
- * associated with the current key.
- *
- * data_buf_p - Pointer which, if not NULL, will be set to the address
- * of the data storage that is allocated in the table and that is
- * associated with the current key.  If a (long) is stored as the data
- * (for example) then data_buf_p should be (long **) i.e. the address
- * of a (long *).
- *
- * data_size_p - Pointer to an integer which, if not NULL, will be set
- * to the size of the data that is stored in the table and that is
- * associated with the current key.
- */
-int table_this(table_t * table_p,
-               void **key_buf_p, int *key_size_p,
-               void **data_buf_p, int *data_size_p)
-{
-    table_entry_t *entry_p = NULL;
-    int entry_c;
-
-    if (table_p == NULL)
-        return TABLE_ERROR_ARG_NULL;
-    if (table_p->ta_magic != TABLE_MAGIC)
-        return TABLE_ERROR_PNT;
-    if (table_p->ta_linear.tl_magic != LINEAR_MAGIC)
-        return TABLE_ERROR_LINEAR;
-    /* if we removed an item that shorted the bucket list, we may get this */
-    if (table_p->ta_linear.tl_bucket_c >= table_p->ta_bucket_n) {
-        /*
-         * NOTE: this might happen if we delete an item which shortens the
-         * table bucket numbers.
-         */
-        return TABLE_ERROR_NOT_FOUND;
-    }
-
-    /* find the entry which is the nth in the list */
-    entry_p = table_p->ta_buckets[table_p->ta_linear.tl_bucket_c];
-    /* NOTE: we swap the order here to be more efficient */
-    for (entry_c = table_p->ta_linear.tl_entry_c; entry_c > 0; entry_c--) {
-        /* did we reach the end of the list? */
-        if (entry_p == NULL)
-            break;
-        entry_p = TABLE_POINTER(table_p, table_entry_t *, entry_p)->te_next_p;
-    }
-
-    /* is this a NOT_FOUND or a LINEAR error */
-    if (entry_p == NULL)
-        return TABLE_ERROR_NOT_FOUND;
-    if (key_buf_p != NULL)
-        *key_buf_p = ENTRY_KEY_BUF(entry_p);
-    if (key_size_p != NULL)
-        *key_size_p = entry_p->te_key_size;
-    if (data_buf_p != NULL) {
-        if (entry_p->te_data_size == 0)
-            *data_buf_p = NULL;
-        else {
-            if (table_p->ta_data_align == 0)
-                *data_buf_p = ENTRY_DATA_BUF(table_p, entry_p);
-            else
-                *data_buf_p = entry_data_buf(table_p, entry_p);
-        }
-    }
-    if (data_size_p != NULL)
-        *data_size_p = entry_p->te_data_size;
-    return TABLE_ERROR_NONE;
-}
-
-/*
- * int table_first_r
- *
- * DESCRIPTION:
- *
- * Reetrant version of the table_first routine above.  Find first
- * element in a table and pass back information about the key/data
- * pair.  If any of the key/data pointers are NULL then they are
- * ignored.
- *
- * RETURNS:
- *
- * Success - TABLE_ERROR_NONE
- *
- * Failure - Table error code.
- *
- * ARGUMENTS:
- *
- * table_p - Table structure pointer from which we are getting the
- * first element.
- *
- * linear_p - Pointer to a table linear structure which is initialized
- * here.  The same pointer should then be passed to table_next_r
- * below.
- *
- * key_buf_p - Pointer which, if not NULL, will be set to the address
- * of the storage of the first key that is allocated in the table.  If
- * an (int) is stored as the first key (for example) then key_buf_p
- * should be (int **) i.e. the address of a (int *).
- *
- * key_size_p - Pointer to an integer which, if not NULL, will be set
- * to the size of the key that is stored in the table and that is
- * associated with the first key.
- *
- * data_buf_p - Pointer which, if not NULL, will be set to the address
- * of the data storage that is allocated in the table and that is
- * associated with the first key.  If a (long) is stored as the data
- * (for example) then data_buf_p should be (long **) i.e. the address
- * of a (long *).
- *
- * data_size_p - Pointer to an integer which, if not NULL, will be set
- * to the size of the data that is stored in the table and that is
- * associated with the first key.
- */
-int table_first_r(table_t * table_p, table_linear_t * linear_p,
-                  void **key_buf_p, int *key_size_p,
-                  void **data_buf_p, int *data_size_p)
-{
-    table_entry_t *entry_p;
-
-    if (table_p == NULL)
-        return TABLE_ERROR_ARG_NULL;
-    if (table_p->ta_magic != TABLE_MAGIC)
-        return TABLE_ERROR_PNT;
-    if (linear_p == NULL)
-        return TABLE_ERROR_ARG_NULL;
-    /* initialize our linear magic number */
-    linear_p->tl_magic = LINEAR_MAGIC;
-
-    entry_p = first_entry(table_p, linear_p);
-    if (entry_p == NULL)
-        return TABLE_ERROR_NOT_FOUND;
-    if (key_buf_p != NULL)
-        *key_buf_p = ENTRY_KEY_BUF(entry_p);
-    if (key_size_p != NULL)
-        *key_size_p = entry_p->te_key_size;
-    if (data_buf_p != NULL) {
-        if (entry_p->te_data_size == 0)
-            *data_buf_p = NULL;
-        else {
-            if (table_p->ta_data_align == 0)
-                *data_buf_p = ENTRY_DATA_BUF(table_p, entry_p);
-            else
-                *data_buf_p = entry_data_buf(table_p, entry_p);
-        }
-    }
-    if (data_size_p != NULL)
-        *data_size_p = entry_p->te_data_size;
-    return TABLE_ERROR_NONE;
-}
-
-/*
- * int table_next_r
- *
- * DESCRIPTION:
- *
- * Reetrant version of the table_next routine above.  Find next
- * element in a table and pass back information about the key/data
- * pair.  If any of the key/data pointers are NULL then they are
- * ignored.
- *
- * RETURNS:
- *
- * Success - TABLE_ERROR_NONE
- *
- * Failure - Table error code.
- *
- * ARGUMENTS:
- *
- * table_p - Table structure pointer from which we are getting the
- * next element.
- *
- * linear_p - Pointer to a table linear structure which is incremented
- * here.  The same pointer must have been passed to table_first_r
- * first so that it can be initialized.
- *
- * key_buf_p - Pointer which, if not NULL, will be set to the address
- * of the storage of the next key that is allocated in the table.  If
- * an (int) is stored as the next key (for example) then key_buf_p
- * should be (int **) i.e. the address of a (int *).
- *
- * key_size_p - Pointer to an integer which, if not NULL will be set
- * to the size of the key that is stored in the table and that is
- * associated with the next key.
- *
- * data_buf_p - Pointer which, if not NULL, will be set to the address
- * of the data storage that is allocated in the table and that is
- * associated with the next key.  If a (long) is stored as the data
- * (for example) then data_buf_p should be (long **) i.e. the address
- * of a (long *).
- *
- * data_size_p - Pointer to an integer which, if not NULL, will be set
- * to the size of the data that is stored in the table and that is
- * associated with the next key.
- */
-int table_next_r(table_t * table_p, table_linear_t * linear_p,
-                 void **key_buf_p, int *key_size_p,
-                 void **data_buf_p, int *data_size_p)
-{
-    table_entry_t *entry_p;
-    int error;
-
-    if (table_p == NULL)
-        return TABLE_ERROR_ARG_NULL;
-    if (table_p->ta_magic != TABLE_MAGIC)
-        return TABLE_ERROR_PNT;
-    if (linear_p == NULL)
-        return TABLE_ERROR_ARG_NULL;
-    if (linear_p->tl_magic != LINEAR_MAGIC)
-        return TABLE_ERROR_LINEAR;
-    /* move to the next entry */
-    entry_p = next_entry(table_p, linear_p, &error);
-    if (entry_p == NULL)
-        return error;
-    if (key_buf_p != NULL)
-        *key_buf_p = ENTRY_KEY_BUF(entry_p);
-    if (key_size_p != NULL)
-        *key_size_p = entry_p->te_key_size;
-    if (data_buf_p != NULL) {
-        if (entry_p->te_data_size == 0)
-            *data_buf_p = NULL;
-        else {
-            if (table_p->ta_data_align == 0)
-                *data_buf_p = ENTRY_DATA_BUF(table_p, entry_p);
-            else
-                *data_buf_p = entry_data_buf(table_p, entry_p);
-        }
-    }
-    if (data_size_p != NULL)
-        *data_size_p = entry_p->te_data_size;
-    return TABLE_ERROR_NONE;
-}
-
-/*
- * int table_this_r
- *
- * DESCRIPTION:
- *
- * Reetrant version of the table_this routine above.  Find current
- * element in a table and pass back information about the key/data
- * pair.  If any of the key/data pointers are NULL then they are
- * ignored.
- *
- * RETURNS:
- *
- * Success - TABLE_ERROR_NONE
- *
- * Failure - Table error code.
- *
- * ARGUMENTS:
- *
- * table_p - Table structure pointer from which we are getting the
- * current element.
- *
- * linear_p - Pointer to a table linear structure which is accessed
- * here.  The same pointer must have been passed to table_first_r
- * first so that it can be initialized.
- *
- * key_buf_p - Pointer which, if not NULL, will be set to the address
- * of the storage of the current key that is allocated in the table.
- * If an (int) is stored as the current key (for example) then
- * key_buf_p should be (int **) i.e. the address of a (int *).
- *
- * key_size_p - Pointer to an integer which, if not NULL, will be set
- * to the size of the key that is stored in the table and that is
- * associated with the current key.
- *
- * data_buf_p - Pointer which, if not NULL, will be set to the address
- * of the data storage that is allocated in the table and that is
- * associated with the current key.  If a (long) is stored as the data
- * (for example) then data_buf_p should be (long **) i.e. the address
- * of a (long *).
- *
- * data_size_p - Pointer to an integer which, if not NULL, will be set
- * to the size of the data that is stored in the table and that is
- * associated with the current key.
- */
-int table_this_r(table_t * table_p, table_linear_t * linear_p,
-                 void **key_buf_p, int *key_size_p,
-                 void **data_buf_p, int *data_size_p)
-{
-    table_entry_t *entry_p;
-    int entry_c;
-
-    if (table_p == NULL)
-        return TABLE_ERROR_ARG_NULL;
-    if (table_p->ta_magic != TABLE_MAGIC)
-        return TABLE_ERROR_PNT;
-    if (linear_p->tl_magic != LINEAR_MAGIC)
-        return TABLE_ERROR_LINEAR;
-    /* if we removed an item that shorted the bucket list, we may get this */
-    if (linear_p->tl_bucket_c >= table_p->ta_bucket_n) {
-        /*
-         * NOTE: this might happen if we delete an item which shortens the
-         * table bucket numbers.
-         */
-        return TABLE_ERROR_NOT_FOUND;
-    }
-
-    /* find the entry which is the nth in the list */
-    for (entry_c = linear_p->tl_entry_c,
-         entry_p = table_p->ta_buckets[linear_p->tl_bucket_c];
-         entry_p != NULL && entry_c > 0;
-         entry_c--, entry_p = TABLE_POINTER(table_p, table_entry_t *,
-                                            entry_p)->te_next_p) {
-    }
-
-    if (entry_p == NULL)
-        return TABLE_ERROR_NOT_FOUND;
-    if (key_buf_p != NULL)
-        *key_buf_p = ENTRY_KEY_BUF(entry_p);
-    if (key_size_p != NULL)
-        *key_size_p = entry_p->te_key_size;
-    if (data_buf_p != NULL) {
-        if (entry_p->te_data_size == 0)
-            *data_buf_p = NULL;
-        else {
-            if (table_p->ta_data_align == 0)
-                *data_buf_p = ENTRY_DATA_BUF(table_p, entry_p);
-            else
-                *data_buf_p = entry_data_buf(table_p, entry_p);
-        }
-    }
-    if (data_size_p != NULL)
-        *data_size_p = entry_p->te_data_size;
-    return TABLE_ERROR_NONE;
-}
-
-/******************************** table order ********************************/
-
-/*
- * table_entry_t *table_order
- *
- * DESCRIPTION:
- *
- * Order a table by building an array of table entry pointers and then
- * sorting this array using the qsort function.  To retrieve the
- * sorted entries, you can then use the table_entry routine to access
- * each entry in order.
- *
- * NOTE: This routine is now thread safe in that two table_order calls
- * can now happen at the same time, even on the same table.
- *
- * RETURNS:
- *
- * An allocated list of entry pointers which must be freed later.
- * Returns null on error.
- *
- * ARGUMENTS:
- *
- * table_p - Pointer to the table that we are ordering.
- *
- * compare - Comparison function defined by the user.  Its definition
- * is at the top of the table.h file.  If this is NULL then it will
- * order the table my memcmp-ing the keys.
- *
- * num_entries_p - Pointer to an integer which, if not NULL, will
- * contain the number of entries in the returned entry pointer array.
- *
- * error_p - Pointer to an integer which, if not NULL, will contain a
- * table error code.
- */
-table_entry_t **table_order(table_t * table_p, table_compare_t compare,
-                            int *num_entries_p, int *error_p)
-{
-    table_entry_t *entry_p, **entries, **entries_p;
-    table_linear_t linear;
-    compare_t comp_func;
-    int error;
-
-    if (table_p == NULL) {
-        if (error_p != NULL)
-            *error_p = TABLE_ERROR_ARG_NULL;
-        return NULL;
-    }
-    if (table_p->ta_magic != TABLE_MAGIC) {
-        if (error_p != NULL)
-            *error_p = TABLE_ERROR_PNT;
-        return NULL;
-    }
-
-    /* there must be at least 1 element in the table for this to work */
-    if (table_p->ta_entry_n == 0) {
-        if (error_p != NULL)
-            *error_p = TABLE_ERROR_EMPTY;
-        return NULL;
-    }
-
-    entries = (table_entry_t **)
-               table_p->ta_malloc(table_p->opt_param,
-                                  table_p->ta_entry_n *sizeof(table_entry_t *));
-    if (entries == NULL) {
-        if (error_p != NULL)
-            *error_p = TABLE_ERROR_ALLOC;
-        return NULL;
-    }
-
-    /* get a pointer to all entries */
-    entry_p = first_entry(table_p, &linear);
-    if (entry_p == NULL) {
-        if (error_p != NULL)
-            *error_p = TABLE_ERROR_NOT_FOUND;
-        return NULL;
-    }
-
-    /* add all of the entries to the array */
-    for (entries_p = entries;
-         entry_p != NULL;
-         entry_p = next_entry(table_p, &linear, &error))
-        *entries_p++ = entry_p;
-    if (error != TABLE_ERROR_NOT_FOUND) {
-        if (error_p != NULL)
-            *error_p = error;
-        return NULL;
-    }
-
-    if (compare == NULL) {
-        /* this is regardless of the alignment */
-        comp_func = local_compare;
-    }
-    else if (table_p->ta_data_align == 0)
-        comp_func = external_compare;
-    else
-        comp_func = external_compare_align;
-    /* now qsort the entire entries array from first to last element */
-    split(entries, entries + table_p->ta_entry_n - 1, comp_func, compare,
-          table_p);
-
-    if (num_entries_p != NULL)
-        *num_entries_p = table_p->ta_entry_n;
-    if (error_p != NULL)
-        *error_p = TABLE_ERROR_NONE;
-    return entries;
-}
-
-/*
- * int table_entry
- *
- * DESCRIPTION:
- *
- * Get information about an element.  The element is one from the
- * array returned by the table_order function.  If any of the key/data
- * pointers are NULL then they are ignored.
- *
- * RETURNS:
- *
- * Success - TABLE_ERROR_NONE
- *
- * Failure - Table error code.
- *
- * ARGUMENTS:
- *
- * table_p - Table structure pointer from which we are getting the
- * element.
- *
- * entry_p - Pointer to a table entry from the array returned by the
- * table_order function.
- *
- * key_buf_p - Pointer which, if not NULL, will be set to the address
- * of the storage of this entry that is allocated in the table.  If an
- * (int) is stored as this entry (for example) then key_buf_p should
- * be (int **) i.e. the address of a (int *).
- *
- * key_size_p - Pointer to an integer which, if not NULL, will be set
- * to the size of the key that is stored in the table.
- *
- * data_buf_p - Pointer which, if not NULL, will be set to the address
- * of the data storage of this entry that is allocated in the table.
- * If a (long) is stored as this entry data (for example) then
- * data_buf_p should be (long **) i.e. the address of a (long *).
- *
- * data_size_p - Pointer to an integer which, if not NULL, will be set
- * to the size of the data that is stored in the table.
- */
-int table_entry_info(table_t * table_p, table_entry_t * entry_p,
-                void **key_buf_p, int *key_size_p,
-                void **data_buf_p, int *data_size_p)
-{
-    if (table_p == NULL)
-        return TABLE_ERROR_ARG_NULL;
-    if (table_p->ta_magic != TABLE_MAGIC)
-        return TABLE_ERROR_PNT;
-    if (entry_p == NULL)
-        return TABLE_ERROR_ARG_NULL;
-    if (key_buf_p != NULL)
-        *key_buf_p = ENTRY_KEY_BUF(entry_p);
-    if (key_size_p != NULL)
-        *key_size_p = entry_p->te_key_size;
-    if (data_buf_p != NULL) {
-        if (entry_p->te_data_size == 0)
-            *data_buf_p = NULL;
-        else {
-            if (table_p->ta_data_align == 0)
-                *data_buf_p = ENTRY_DATA_BUF(table_p, entry_p);
-            else
-                *data_buf_p = entry_data_buf(table_p, entry_p);
-        }
-    }
-    if (data_size_p != NULL)
-        *data_size_p = entry_p->te_data_size;
-    return TABLE_ERROR_NONE;
-}
-
diff --git a/modules/ssl/ssl_util_table.h b/modules/ssl/ssl_util_table.h
deleted file mode 100644
index b7b1885..0000000
--- a/modules/ssl/ssl_util_table.h
+++ /dev/null
@@ -1,185 +0,0 @@
-/*                      _             _
-**  _ __ ___   ___   __| |    ___ ___| |  mod_ssl
-** | '_ ` _ \ / _ \ / _` |   / __/ __| |  Apache Interface to OpenSSL
-** | | | | | | (_) | (_| |   \__ \__ \ |  www.modssl.org
-** |_| |_| |_|\___/ \__,_|___|___/___/_|  ftp.modssl.org
-**                      |_____|
-**  ssl_util_table.h
-**  High Performance Hash Table Header
-*/
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- */
-
-/*
- * Generic hash table defines
- * Table 4.1.0 July-28-1998
- *
- * This library is a generic open hash table with buckets and
- * linked lists.  It is pretty high performance.  Each element
- * has a key and a data.  The user indexes on the key to find the
- * data.
- *
- * Copyright 1998 by Gray Watson <gray@letters.com>
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose and without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies,
- * and that the name of Gray Watson not be used in advertising or
- * publicity pertaining to distribution of the document or software
- * without specific, written prior permission.
- *
- * Gray Watson makes no representations about the suitability of the
- * software described herein for any purpose.  It is provided "as is"
- * without express or implied warranty.
- */
-
-#ifndef __SSL_UTIL_TABLE_H__
-#define __SSL_UTIL_TABLE_H__
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-/*
- * To build a "key" in any of the below routines, pass in a pointer to
- * the key and its size [i.e. sizeof(int), etc].  With any of the
- * "key" or "data" arguments, if their size is < 0, it will do an
- * internal strlen of the item and add 1 for the \0.
- *
- * If you are using firstkey() and nextkey() functions, be careful if,
- * after starting your firstkey loop, you use delete or insert, it
- * will not crash but may produce interesting results.  If you are
- * deleting from firstkey to NULL it will work fine.
- */
-
-/* return types for table functions */
-#define TABLE_ERROR_NONE    1   /* no error from function */
-#define TABLE_ERROR_PNT     2   /* bad table pointer */
-#define TABLE_ERROR_ARG_NULL    3   /* buffer args were null */
-#define TABLE_ERROR_SIZE    4   /* size of data was bad */
-#define TABLE_ERROR_OVERWRITE   5   /* key exists and we cant overwrite */
-#define TABLE_ERROR_NOT_FOUND   6   /* key does not exist */
-#define TABLE_ERROR_ALLOC   7   /* memory allocation error */
-#define TABLE_ERROR_LINEAR  8   /* no linear access started */
-#define TABLE_ERROR_OPEN    9   /* could not open file */
-#define TABLE_ERROR_SEEK    10  /* could not seek to pos in file */
-#define TABLE_ERROR_READ    11  /* could not read from file */
-#define TABLE_ERROR_WRITE   12  /* could not write to file */
-#define TABLE_ERROR_EMPTY   13  /* table is empty */
-#define TABLE_ERROR_NOT_EMPTY   14  /* table contains data */
-#define TABLE_ERROR_ALIGNMENT   15  /* invalid alignment value */
-
-/*
- * Table flags set with table_attr.
- */
-
-/*
- * Automatically adjust the number of table buckets on the fly.
- * Whenever the number of entries gets above some threshold, the
- * number of buckets is realloced to a new size and each entry is
- * re-hashed.  Although this may take some time when it re-hashes, the
- * table will perform better over time.
- */
-#define TABLE_FLAG_AUTO_ADJUST  (1<<0)
-
-/*
- * If the above auto-adjust flag is set, also adjust the number of
- * table buckets down as we delete entries.
- */
-#define TABLE_FLAG_ADJUST_DOWN  (1<<1)
-
-/* structure to walk through the fields in a linear order */
-typedef struct {
-  unsigned int  tl_magic;   /* magic structure to ensure correct init */
-  unsigned int  tl_bucket_c;    /* where in the table buck array we are */
-  unsigned int  tl_entry_c; /* in the bucket, which entry we are on */
-} table_linear_t;
-
-typedef int (*table_compare_t)(const void *key1, const int key1_size,
-                   const void *data1, const int data1_size,
-                   const void *key2, const int key2_size,
-                   const void *data2, const int data2_size);
-
-#ifndef TABLE_PRIVATE
-typedef void    table_t;
-typedef void    table_entry_t;
-#endif
-
-/*
- * Prototypes
- */
-extern table_t        *table_alloc(const unsigned int bucket_n, int *error_p, void *(*malloc_f)(void *opt_param, size_t size), void *(*calloc_f)(void *opt_param, size_t number, size_t size), void *(*realloc_f)(void *opt_param, void *ptr, size_t size), void (*free_f)(void *opt_param, void *ptr), void *opt_param);
-extern int             table_attr(table_t *table_p, const int attr);
-extern int             table_set_data_alignment(table_t *table_p, const int alignment);
-extern int             table_clear(table_t *table_p);
-extern int             table_free(table_t *table_p);
-extern int             table_insert_kd(table_t *table_p, const void *key_buf, const int key_size, const void *data_buf, const int data_size, void **key_buf_p, void **data_buf_p, const char overwrite_b);
-extern int             table_insert(table_t *table_p, const void *key_buf, const int key_size, const void *data_buf, const int data_size, void **data_buf_p, const char overwrite_b);
-extern int             table_retrieve(table_t *table_p, const void *key_buf, const int key_size, void **data_buf_p, int *data_size_p);
-extern int             table_delete(table_t *table_p, const void *key_buf, const int key_size, void **data_buf_p, int *data_size_p);
-extern int             table_delete_first(table_t *table_p, void **key_buf_p, int *key_size_p, void **data_buf_p, int *data_size_p);
-extern int             table_info(table_t *table_p, int *num_buckets_p, int *num_entries_p);
-extern int             table_adjust(table_t *table_p, const int bucket_n);
-extern const char     *table_strerror(const int error);
-extern int             table_type_size(void);
-extern int             table_first(table_t *table_p, void **key_buf_p, int *key_size_p, void **data_buf_p, int *data_size_p);
-extern int             table_next(table_t *table_p, void **key_buf_p, int *key_size_p, void **data_buf_p, int *data_size_p);
-extern int             table_this(table_t *table_p, void **key_buf_p, int *key_size_p, void **data_buf_p, int *data_size_p);
-extern int             table_first_r(table_t *table_p, table_linear_t *linear_p, void **key_buf_p, int *key_size_p, void **data_buf_p, int *data_size_p);
-extern int             table_next_r(table_t *table_p, table_linear_t *linear_p, void **key_buf_p, int *key_size_p, void **data_buf_p, int *data_size_p);
-extern int             table_this_r(table_t *table_p, table_linear_t *linear_p, void **key_buf_p, int *key_size_p, void **data_buf_p, int *data_size_p);
-extern table_entry_t **table_order(table_t *table_p, table_compare_t compare, int *num_entries_p, int *error_p);
-extern int             table_entry_info(table_t *table_p, table_entry_t *entry_p, void **key_buf_p, int *key_size_p, void **data_buf_p, int *data_size_p);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* __SSL_UTIL_TABLE_H__ */
diff --git a/modules/test/.cvsignore b/modules/test/.cvsignore
deleted file mode 100644
index aeabff3..0000000
--- a/modules/test/.cvsignore
+++ /dev/null
@@ -1,16 +0,0 @@
-.deps
-.libs
-*.la
-modules.mk
-Makefile
-*.lo
-*.slo
-*.so
-*.x
-Debug
-Release
-*.plg
-*.aps
-*.dep
-*.mak
-*.rc
diff --git a/modules/test/.indent.pro b/modules/test/.indent.pro
deleted file mode 100644
index a9fbe9f..0000000
--- a/modules/test/.indent.pro
+++ /dev/null
@@ -1,54 +0,0 @@
--i4 -npsl -di0 -br -nce -d0 -cli0 -npcs -nfc1
--TBUFF
--TFILE
--TTRANS
--TUINT4
--T_trans
--Tallow_options_t
--Tapache_sfio
--Tarray_header
--Tbool_int
--Tbuf_area
--Tbuff_struct
--Tbuffy
--Tcmd_how
--Tcmd_parms
--Tcommand_rec
--Tcommand_struct
--Tconn_rec
--Tcore_dir_config
--Tcore_server_config
--Tdir_maker_func
--Tevent
--Tglobals_s
--Thandler_func
--Thandler_rec
--Tjoblist_s
--Tlisten_rec
--Tmerger_func
--Tmode_t
--Tmodule
--Tmodule_struct
--Tmutex
--Tn_long
--Tother_child_rec
--Toverrides_t
--Tparent_score
--Tpid_t
--Tpiped_log
--Tpool
--Trequest_rec
--Trequire_line
--Trlim_t
--Tscoreboard
--Tsemaphore
--Tserver_addr_rec
--Tserver_rec
--Tserver_rec_chain
--Tshort_score
--Ttable
--Ttable_entry
--Tthread
--Tu_wide_int
--Tvtime_t
--Twide_int
diff --git a/modules/test/Makefile.in b/modules/test/Makefile.in
deleted file mode 100644
index 7c5c149..0000000
--- a/modules/test/Makefile.in
+++ /dev/null
@@ -1,3 +0,0 @@
-# a modules Makefile has no explicit targets -- they will be defined by
-# whatever modules are enabled. just grab special.mk to deal with this.
-include $(top_srcdir)/build/special.mk
diff --git a/modules/test/README b/modules/test/README
deleted file mode 100644
index f122368..0000000
--- a/modules/test/README
+++ /dev/null
@@ -1 +0,0 @@
-test modules have moved to httpd-test/perl-framework/c-modules
diff --git a/modules/test/config.m4 b/modules/test/config.m4
deleted file mode 100644
index 337d095..0000000
--- a/modules/test/config.m4
+++ /dev/null
@@ -1,10 +0,0 @@
-
-APACHE_MODPATH_INIT(test)
-
-APACHE_MODULE(optional_hook_export, example optional hook exporter, , , no)
-APACHE_MODULE(optional_hook_import, example optional hook importer, , , no)
-APACHE_MODULE(optional_fn_import, example optional function importer, , , no)
-APACHE_MODULE(optional_fn_export, example optional function exporter, , , no)
-APACHE_MODULE(bucketeer, buckets manipulation filter, , , no)
-
-APACHE_MODPATH_FINISH
diff --git a/modules/test/mod_bucketeer.c b/modules/test/mod_bucketeer.c
deleted file mode 100644
index c601cce..0000000
--- a/modules/test/mod_bucketeer.c
+++ /dev/null
@@ -1,212 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-/*
- * mod_bucketeer.c: split buckets whenever we find a control-char
- *
- * Written by Ian Holsman (IanH@apache.org)
- *
- */
-
-#include "httpd.h"
-#include "http_config.h"
-#include "http_log.h"
-#include "apr_strings.h"
-#include "apr_general.h"
-#include "util_filter.h"
-#include "apr_buckets.h"
-#include "http_request.h"
-
-
-static const char bucketeerFilterName[] = "BUCKETEER";
-module AP_MODULE_DECLARE_DATA bucketeer_module;
-
-typedef struct bucketeer_filter_config_t
-{
-    char bucketdelimter;
-    char passdelimiter;
-    char flushdelimiter;
-
-} bucketeer_filter_config_t;
-
-
-static void *create_bucketeer_server_config(apr_pool_t *p, server_rec *s)
-{
-    bucketeer_filter_config_t *c = apr_pcalloc(p, sizeof *c);
-
-    c->bucketdelimter = 0x02; /* ^B */
-    c->passdelimiter = 0x10; /* ^P */
-    c->flushdelimiter = 0x06; /* ^F */
-
-    return c;
-}
-
-
-typedef struct bucketeer_ctx_t
-{
-    apr_bucket_brigade *bb;
-} bucketeer_ctx_t;
-
-static apr_status_t bucketeer_out_filter(ap_filter_t *f,
-                                       apr_bucket_brigade *bb)
-{
-    apr_bucket *e;
-    request_rec *r = f->r;
-    bucketeer_ctx_t *ctx = f->ctx;
-   
-    bucketeer_filter_config_t *c = ap_get_module_config(r->server->module_config,
-                                                    &bucketeer_module);
-
-    /* If we don't have a context, we need to ensure that it is okay to send
-     * the deflated content.  If we have a context, that means we've done
-     * this before and we liked it.
-     * This could be not so nice if we always fail.  But, if we succeed,
-     * we're in better shape.
-     */
-    if (!ctx) {  
-        if (!r->content_type || strncmp(r->content_type, "text/", 5)) {
-            ap_remove_output_filter(f);
-            return ap_pass_brigade(f->next, bb);
-        }
-
-        /* We're cool with filtering this. */
-        ctx = f->ctx = apr_pcalloc(f->r->pool, sizeof(*ctx));
-        ctx->bb = apr_brigade_create(f->r->pool); 
-        apr_table_unset(f->r->headers_out, "Content-Length");
-    }
-
-    APR_BRIGADE_FOREACH(e, bb) {
-        const char *data;
-        apr_size_t len;
-
-        apr_size_t i;
-        apr_size_t lastpos;
-
-        if (APR_BUCKET_IS_EOS(e)) {
-
-            APR_BUCKET_REMOVE(e);
-            APR_BRIGADE_INSERT_TAIL(ctx->bb, e);
-
-            /* Okay, we've seen the EOS.
-             * Time to pass it along down the chain.
-             */
-            return ap_pass_brigade(f->next, ctx->bb);
-        }
-
-        if (APR_BUCKET_IS_FLUSH(e)) {     
-            /*
-             * Ignore flush buckets for the moment.. 
-             * we decide what to stream
-             */
-            continue;
-        }
-
-        /* read */
-        apr_bucket_read(e, &data, &len, APR_BLOCK_READ);
-        if (len>0) {
-            lastpos=0;
-            for (i=0; i<len;i++) {
-                if ( data[i] == c->flushdelimiter ||data[i] == c->bucketdelimter || data[i] == c->passdelimiter) {
-                    apr_bucket *p;
-                    if ( i-lastpos>0) {
-                        p = apr_bucket_pool_create(apr_pmemdup( f->r->pool,
-                                                            &data[lastpos],
-                                                            i-lastpos),
-                                                    i-lastpos,
-                                                    f->r->pool);
-                        APR_BRIGADE_INSERT_TAIL(ctx->bb,p);
-                    }
-                    lastpos=i+1;
-                    if ( data[i] == c->flushdelimiter) {
-                        p = apr_bucket_flush_create();
-                        APR_BRIGADE_INSERT_TAIL(ctx->bb,p);
-                    }
-                    if ( data[i] == c->flushdelimiter || data[i] == c->passdelimiter ) {
-                        ap_pass_brigade(f->next, ctx->bb);
-                       /* apr_brigade_cleanup(ctx->bb);*/
-                    }
-                }                       
-            }
-            /* XXX: really should append this to the next 'real' bucket */
-            if ( lastpos < i ) {
-                apr_bucket *p;
-                p = apr_bucket_pool_create(apr_pmemdup( f->r->pool,&data[lastpos],i-lastpos),i-lastpos,f->r->pool);
-                lastpos=i;
-                APR_BRIGADE_INSERT_TAIL(ctx->bb,p);
-            }
-        }     
-    }
-
-    return APR_SUCCESS;
-}
-
-static void register_hooks(apr_pool_t * p)
-{
-    ap_register_output_filter(bucketeerFilterName, bucketeer_out_filter,
-                              AP_FTYPE_RESOURCE-1);
-}
-
-static const command_rec bucketeer_filter_cmds[] = {
-    {NULL}
-};
-
-module AP_MODULE_DECLARE_DATA bucketeer_module = {
-    STANDARD20_MODULE_STUFF,
-    NULL,
-    NULL,
-    create_bucketeer_server_config,
-    NULL,
-    bucketeer_filter_cmds,
-    register_hooks
-};
diff --git a/modules/test/mod_optional_fn_export.c b/modules/test/mod_optional_fn_export.c
deleted file mode 100644
index a3153f9..0000000
--- a/modules/test/mod_optional_fn_export.c
+++ /dev/null
@@ -1,86 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-#include "httpd.h"
-#include "http_config.h"
-#include "http_log.h"
-#include "mod_optional_fn_export.h"
-
-/* The alert will note a strange mirror-image style resemblance to
- * mod_optional_hook_import.c. Yes, I _did_ mean import. Think about it.
- */
-
-static int TestOptionalFn(const char *szStr)
-{
-    ap_log_error(APLOG_MARK,APLOG_ERR,OK,NULL,
-		 "Optional function test said: %s",szStr);
-
-    return OK;
-}
-
-static void ExportRegisterHooks(apr_pool_t *p)
-{
-    APR_REGISTER_OPTIONAL_FN(TestOptionalFn);
-}
-
-module AP_MODULE_DECLARE_DATA optional_fn_export_module=
-{
-    STANDARD20_MODULE_STUFF,
-    NULL,
-    NULL,
-    NULL,
-    NULL,
-    NULL,
-    ExportRegisterHooks
-};
diff --git a/modules/test/mod_optional_fn_export.h b/modules/test/mod_optional_fn_export.h
deleted file mode 100644
index a1950f3..0000000
--- a/modules/test/mod_optional_fn_export.h
+++ /dev/null
@@ -1,3 +0,0 @@
-#include "apr_optional.h"
-
-APR_DECLARE_OPTIONAL_FN(int,TestOptionalFn,(const char *));
diff --git a/modules/test/mod_optional_fn_import.c b/modules/test/mod_optional_fn_import.c
deleted file mode 100644
index d0a1ddd..0000000
--- a/modules/test/mod_optional_fn_import.c
+++ /dev/null
@@ -1,93 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-#include "httpd.h"
-#include "http_config.h"
-#include "mod_optional_fn_export.h"
-#include "http_protocol.h"
-
-/* The alert will note a strange mirror-image style resemblance to
- * mod_optional_hook_export.c. Yes, I _did_ mean export. Think about it.
- */
-
-static APR_OPTIONAL_FN_TYPE(TestOptionalFn) *pfn;
-
-static int ImportLogTransaction(request_rec *r)
-{
-    if(pfn)
-	return pfn(r->the_request);
-    return DECLINED;
-}
-
-static void ImportFnRetrieve(void)
-{
-    pfn=APR_RETRIEVE_OPTIONAL_FN(TestOptionalFn);
-}
-
-static void ImportRegisterHooks(apr_pool_t *p)
-{
-    ap_hook_log_transaction(ImportLogTransaction,NULL,NULL,APR_HOOK_MIDDLE);
-    ap_hook_optional_fn_retrieve(ImportFnRetrieve,NULL,NULL,APR_HOOK_MIDDLE);
-}
-
-module AP_MODULE_DECLARE_DATA optional_fn_import_module =
-{
-    STANDARD20_MODULE_STUFF,
-    NULL,
-    NULL,
-    NULL,
-    NULL,
-    NULL,
-    ImportRegisterHooks
-};
diff --git a/modules/test/mod_optional_hook_export.c b/modules/test/mod_optional_hook_export.c
deleted file mode 100644
index a13d59d..0000000
--- a/modules/test/mod_optional_hook_export.c
+++ /dev/null
@@ -1,82 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-#include "httpd.h"
-#include "http_config.h"
-#include "mod_optional_hook_export.h"
-#include "http_protocol.h"
-
-AP_IMPLEMENT_OPTIONAL_HOOK_RUN_ALL(int,optional_hook_test,(const char *szStr),
-				    (szStr),OK,DECLINED)
-
-static int ExportLogTransaction(request_rec *r)
-{
-    return ap_run_optional_hook_test(r->the_request);
-}
-
-static void ExportRegisterHooks(apr_pool_t *p)
-{
-    ap_hook_log_transaction(ExportLogTransaction,NULL,NULL,APR_HOOK_MIDDLE);
-}
-
-module AP_MODULE_DECLARE_DATA optional_hook_export_module =
-{
-    STANDARD20_MODULE_STUFF,
-    NULL,
-    NULL,
-    NULL,
-    NULL,
-    NULL,
-    ExportRegisterHooks
-};
diff --git a/modules/test/mod_optional_hook_export.h b/modules/test/mod_optional_hook_export.h
deleted file mode 100644
index cdf8011..0000000
--- a/modules/test/mod_optional_hook_export.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-#ifndef MOD_OPTIONAL_HOOK_EXPORT_H
-#define MOD_OPTOPNAL_HOOK_EXPORT_H
-
-#include "ap_config.h"
-
-AP_DECLARE_HOOK(int,optional_hook_test,(const char *))
-
-#endif /* def MOD_OPTIONAL_HOOK_EXPORT_H */
diff --git a/modules/test/mod_optional_hook_import.c b/modules/test/mod_optional_hook_import.c
deleted file mode 100644
index e89afdc..0000000
--- a/modules/test/mod_optional_hook_import.c
+++ /dev/null
@@ -1,83 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-#include "httpd.h"
-#include "http_config.h"
-#include "http_log.h"
-#include "mod_optional_hook_export.h"
-
-static int ImportOptionalHookTestHook(const char *szStr)
-{
-    ap_log_error(APLOG_MARK,APLOG_ERR,OK,NULL,"Optional hook test said: %s",
-		 szStr);
-
-    return OK;
-}
-
-static void ImportRegisterHooks(apr_pool_t *p)
-{
-    AP_OPTIONAL_HOOK(optional_hook_test,ImportOptionalHookTestHook,NULL,
-		     NULL,APR_HOOK_MIDDLE);
-}
-
-module AP_MODULE_DECLARE_DATA optional_hook_import_module=
-{
-    STANDARD20_MODULE_STUFF,
-    NULL,
-    NULL,
-    NULL,
-    NULL,
-    NULL,
-    ImportRegisterHooks
-};
diff --git a/os/.cvsignore b/os/.cvsignore
deleted file mode 100644
index bd5fe06..0000000
--- a/os/.cvsignore
+++ /dev/null
@@ -1,2 +0,0 @@
-Makefile
-.deps
diff --git a/os/.indent.pro b/os/.indent.pro
deleted file mode 100644
index a9fbe9f..0000000
--- a/os/.indent.pro
+++ /dev/null
@@ -1,54 +0,0 @@
--i4 -npsl -di0 -br -nce -d0 -cli0 -npcs -nfc1
--TBUFF
--TFILE
--TTRANS
--TUINT4
--T_trans
--Tallow_options_t
--Tapache_sfio
--Tarray_header
--Tbool_int
--Tbuf_area
--Tbuff_struct
--Tbuffy
--Tcmd_how
--Tcmd_parms
--Tcommand_rec
--Tcommand_struct
--Tconn_rec
--Tcore_dir_config
--Tcore_server_config
--Tdir_maker_func
--Tevent
--Tglobals_s
--Thandler_func
--Thandler_rec
--Tjoblist_s
--Tlisten_rec
--Tmerger_func
--Tmode_t
--Tmodule
--Tmodule_struct
--Tmutex
--Tn_long
--Tother_child_rec
--Toverrides_t
--Tparent_score
--Tpid_t
--Tpiped_log
--Tpool
--Trequest_rec
--Trequire_line
--Trlim_t
--Tscoreboard
--Tsemaphore
--Tserver_addr_rec
--Tserver_rec
--Tserver_rec_chain
--Tshort_score
--Ttable
--Ttable_entry
--Tthread
--Tu_wide_int
--Tvtime_t
--Twide_int
diff --git a/os/Makefile.in b/os/Makefile.in
deleted file mode 100644
index 9b35d49..0000000
--- a/os/Makefile.in
+++ /dev/null
@@ -1,4 +0,0 @@
-
-SUBDIRS = $(OS_DIR)
-
-include $(top_builddir)/build/rules.mk
diff --git a/os/beos/.cvsignore b/os/beos/.cvsignore
deleted file mode 100644
index bbc8ba0..0000000
--- a/os/beos/.cvsignore
+++ /dev/null
@@ -1,5 +0,0 @@
-Makefile
-.deps
-.libs
-*.lo
-*.la
diff --git a/os/beos/Makefile.in b/os/beos/Makefile.in
deleted file mode 100644
index 66272ec..0000000
--- a/os/beos/Makefile.in
+++ /dev/null
@@ -1,5 +0,0 @@
-
-LTLIBRARY_NAME    = libos.la
-LTLIBRARY_SOURCES = os.c beosd.c
-
-include $(top_srcdir)/build/ltlib.mk
diff --git a/os/beos/beosd.c b/os/beos/beosd.c
deleted file mode 100644
index cf73988..0000000
--- a/os/beos/beosd.c
+++ /dev/null
@@ -1,209 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-#include <unistd.h>
-#include "httpd.h"
-#include "http_config.h"
-#include "http_main.h"
-#include "http_log.h"
-#include "beosd.h"
-#include "apr_lock.h"
-#include "mpm_common.h"
-
-beosd_config_rec beosd_config;
-
-/* Set group privileges.
- *
- * Note that until we get the multi-user situation sorted on beos,
- * this is just a no-op to allow common configuration files!
- */
-
-#if B_BEOS_VERSION < 0x0460
-static int set_group_privs(void)
-{
-    /* no-op */
-    return 0;
-}
-#endif
-
-
-int beosd_setup_child(void)
-{
-    /* TODO: revisit the whole issue of users/groups for BeOS as
-     * R5 and below doesn't really have much concept of them.
-     */
-
-    return 0;
-}
-
-
-AP_DECLARE(const char *) beosd_set_user(cmd_parms *cmd, 
-                                        void *dummy, const char *arg)
-{
-    /* no-op */
-    return NULL;
-}
-
-AP_DECLARE(const char *) beosd_set_group(cmd_parms *cmd, 
-                                         void *dummy, const char *arg)
-{
-    /* no-op */
-    return NULL;
-}
-
-void beosd_pre_config(void)
-{
-    /* Until the multi-user situation on BeOS is fixed,
-       simply have a no-op here to allow for common conf files
-     */
-}
-
-AP_DECLARE(apr_status_t) beosd_accept(void **accepted, ap_listen_rec *lr,
-                                      apr_pool_t *ptrans)
-{
-    apr_socket_t *csd;
-    apr_status_t status;
-    int sockdes;
-
-    status = apr_accept(&csd, lr->sd, ptrans);
-    if (status == APR_SUCCESS) { 
-        *accepted = csd;
-        apr_os_sock_get(&sockdes, csd);
-        if (sockdes >= FD_SETSIZE) {
-            ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_WARNING, 0, NULL,
-                         "new file descriptor %d is too large; you probably need "
-                         "to rebuild Apache with a larger FD_SETSIZE "
-                         "(currently %d)",
-                         sockdes, FD_SETSIZE);
-            apr_socket_close(csd);
-            return APR_EINTR;
-        } 
-        return status;
-    }
-
-    if (APR_STATUS_IS_EINTR(status)) {
-        return status;
-    }
-    /* Our old behaviour here was to continue after accept()
-     * errors.  But this leads us into lots of troubles
-     * because most of the errors are quite fatal.  For
-     * example, EMFILE can be caused by slow descriptor
-     * leaks (say in a 3rd party module, or libc).  It's
-     * foolish for us to continue after an EMFILE.  We also
-     * seem to tickle kernel bugs on some platforms which
-     * lead to never-ending loops here.  So it seems best
-     * to just exit in most cases.
-     */
-    switch (status) {
-#ifdef EPROTO
-        /* EPROTO on certain older kernels really means
-         * ECONNABORTED, so we need to ignore it for them.
-         * See discussion in new-httpd archives nh.9701
-         * search for EPROTO.
-         *
-         * Also see nh.9603, search for EPROTO:
-         * There is potentially a bug in Solaris 2.x x<6,
-         * and other boxes that implement tcp sockets in
-         * userland (i.e. on top of STREAMS).  On these
-         * systems, EPROTO can actually result in a fatal
-         * loop.  See PR#981 for example.  It's hard to
-         * handle both uses of EPROTO.
-         */
-        case EPROTO:
-#endif
-#ifdef ECONNABORTED
-        case ECONNABORTED:
-#endif
-#ifdef ETIMEDOUT
-        case ETIMEDOUT:
-#endif
-#ifdef EHOSTUNREACH
-        case EHOSTUNREACH:
-#endif
-#ifdef ENETUNREACH
-        case ENETUNREACH:
-#endif
-            break;
-#ifdef ENETDOWN
-        case ENETDOWN:
-            /*
-             * When the network layer has been shut down, there
-             * is not much use in simply exiting: the parent
-             * would simply re-create us (and we'd fail again).
-             * Use the CHILDFATAL code to tear the server down.
-             * @@@ Martin's idea for possible improvement:
-             * A different approach would be to define
-             * a new APEXIT_NETDOWN exit code, the reception
-             * of which would make the parent shutdown all
-             * children, then idle-loop until it detected that
-             * the network is up again, and restart the children.
-             * Ben Hyde noted that temporary ENETDOWN situations
-             * occur in mobile IP.
-             */
-            ap_log_error(APLOG_MARK, APLOG_EMERG, status, ap_server_conf,
-                         "apr_accept: giving up.");
-            return APR_EGENERAL;
-#endif /*ENETDOWN*/
-
-        default:
-            ap_log_error(APLOG_MARK, APLOG_ERR, status, ap_server_conf,
-                         "apr_accept: (client socket)");
-            return APR_EGENERAL;
-    }
-    return status;
-}
diff --git a/os/beos/beosd.h b/os/beos/beosd.h
deleted file mode 100644
index fb8f808..0000000
--- a/os/beos/beosd.h
+++ /dev/null
@@ -1,102 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-#ifndef BEOSD_H
-#define BEOSD_H
-
-#include "httpd.h"
-#include "ap_listen.h"
-/* common stuff that beos MPMs will want */
-
-/* Default user name and group name. These may be specified as numbers by
- * placing a # before a number */
-
-#ifndef DEFAULT_USER
-#define DEFAULT_USER "#-1"
-#endif
-#ifndef DEFAULT_GROUP
-#define DEFAULT_GROUP "#"
-#endif
-
-typedef struct {
-    char *user_name;
-    uid_t user_id;
-    gid_t group_id;
-} beosd_config_rec;
-extern beosd_config_rec beosd_config;
-
-void beosd_detach(void);
-int beosd_setup_child(void);
-void beosd_pre_config(void);
-AP_DECLARE(const char *) beosd_set_user (cmd_parms *cmd, void *dummy, 
-                                         const char *arg);
-AP_DECLARE(const char *) beosd_set_group(cmd_parms *cmd, void *dummy, 
-                                         const char *arg);
-AP_DECLARE(apr_status_t) beosd_accept(void **accepted, ap_listen_rec *lr,
-                                      apr_pool_t *ptrans);
-
-#define beosd_killpg(x, y)	(kill (-(x), (y)))
-#define ap_os_killpg(x, y)      (kill (-(x), (y)))
-
-#define BEOS_DAEMON_COMMANDS	\
-AP_INIT_TAKE1("User", beosd_set_user, NULL, RSRC_CONF, \
-  "Effective user id for this server (NO-OP)"), \
-AP_INIT_TAKE1("Group", beosd_set_group, NULL, RSRC_CONF, \
-  "Effective group id for this server (NO-OP)")
-
-#endif /* BEOSD_H */
diff --git a/os/beos/config.m4 b/os/beos/config.m4
deleted file mode 100644
index 4fe95b7..0000000
--- a/os/beos/config.m4
+++ /dev/null
@@ -1,3 +0,0 @@
-if test "$OS" = "beos" ; then
-    APR_ADDTO(CFLAGS,-DBEOS)
-fi
diff --git a/os/beos/os.c b/os/beos/os.c
deleted file mode 100644
index 43e79b5..0000000
--- a/os/beos/os.c
+++ /dev/null
@@ -1,79 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-/*
- * This file will include OS specific functions which are not inlineable.
- * Any inlineable functions should be defined in os-inline.c instead.
- */
-
-#include "ap_config.h"
-#include "os.h"
-#include "httpd.h"
-#include "apr_thread_proc.h"
-#include "ap_mpm.h" /* needed for definition of 
-                     * ap_os_create_privileged_process */
-
-AP_DECLARE(apr_status_t) ap_os_create_privileged_process(
-    const request_rec *r,
-    apr_proc_t *newproc, const char *progname,
-    const char * const *args,
-    const char * const *env,
-    apr_procattr_t *attr, apr_pool_t *p)
-{
-    return apr_proc_create(newproc, progname, args, env, attr, p);
-}
diff --git a/os/beos/os.h b/os/beos/os.h
deleted file mode 100644
index 0158736..0000000
--- a/os/beos/os.h
+++ /dev/null
@@ -1,72 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-#ifndef APACHE_OS_H
-#define APACHE_OS_H
-
-#include "ap_config.h"
-
-#ifndef PLATFORM
-  #ifdef BONE_VERSION
-  #define PLATFORM "BeOS BONE"
-  #else
-  #define PLATFORM "BeOS R5"
-  #endif
-#endif
-
-#endif	/* !APACHE_OS_H */
diff --git a/os/bs2000/.cvsignore b/os/bs2000/.cvsignore
deleted file mode 100644
index bd5fe06..0000000
--- a/os/bs2000/.cvsignore
+++ /dev/null
@@ -1,2 +0,0 @@
-Makefile
-.deps
diff --git a/os/bs2000/bs2login.c b/os/bs2000/bs2login.c
deleted file mode 100644
index 2a1de0d..0000000
--- a/os/bs2000/bs2login.c
+++ /dev/null
@@ -1,308 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-#ifdef _OSD_POSIX
-#include "httpd.h"
-#include "http_config.h"
-#include "http_log.h"
-#include <ctype.h>
-#include <sys/utsname.h>
-
-#define ACCT_LEN 8
-#define USER_LEN 8
-
-static const char *bs2000_account = NULL;
-typedef enum
-{
-    bs2_unknown,     /* not initialized yet. */
-    bs2_noFORK,      /* no fork() because -X flag was specified */
-    bs2_FORK,        /* only fork() because uid != 0 */
-    bs2_FORK_RINI,   /* prior to A17, regular fork() and _rini() was used. */
-    bs2_RFORK_RINI,  /* for A17, use of _rfork() and _rini() was required */
-    bs2_UFORK        /* As of A18, the new ufork() is used. */
-} bs2_ForkType;
-
-static bs2_ForkType forktype = bs2_unknown;
-
-#if !defined(_POSIX_SOURCE) && !defined(_XOPEN_SOURCE)
-typedef struct {           
-    char    *username;     
-    char    *account;      
-    char    *processor_name;
-}  _rini_struct;           
-
-extern int _rini(_rini_struct *);
-#endif /* !defined(_POSIX_SOURCE) && !defined(_XOPEN_SOURCE) */
-
-
-static void ap_pad(char *dest, size_t size, char ch)
-{
-    int i = strlen(dest); /* Leave space for trailing '\0' */
-    
-    while (i < size-1)
-	dest[i++] = ch;
-
-    dest[size-1] = '\0';	/* Guarantee for trailing '\0' */
-}
-
-static void ap_str_toupper(char *str)
-{
-    while (*str) {
-	*str = apr_toupper(*str);
-	++str;
-    }
-}
-
-/* Determine the method for forking off a child in such a way as to
- * set both the POSIX and BS2000 user id's to the unprivileged user.
- */
-static bs2_ForkType os_forktype(void)
-{
-    struct utsname os_version;
-
-    /* have we checked the OS version before? If yes return the previous
-     * result - the OS release isn't going to change suddenly!
-     */
-    if (forktype != bs2_unknown) {
-	return forktype;
-    }
-
-    /* If the user is unprivileged, use the normal fork() only. */
-    if (getuid() != 0) {
-	return forktype = bs2_FORK;
-    }
-
-    if (uname(&os_version) < 0)
-    {
-	ap_log_error(APLOG_MARK, APLOG_ALERT, errno, NULL,
-		     "uname() failed - aborting.");
-	exit(APEXIT_CHILDFATAL);
-    }
-
-    /*
-     * Old BS2000/OSD versions (before XPG4 SPEC1170) don't work with Apache.
-     * Anyway, simply return a fork().
-     */
-    if (strcmp(os_version.release, "01.0A") == 0 ||
-	strcmp(os_version.release, "02.0A") == 0 ||
-	strcmp(os_version.release, "02.1A") == 0)
-    {
-	ap_log_error(APLOG_MARK, APLOG_ERR|APLOG_NOERRNO, 0, NULL,
-		     "Error: unsupported OS version. "
-		     "You may encounter problems.");
-	forktype = bs2_FORK;
-    }
-
-    /* The following versions are special:
-     * OS versions before A17 needs regular fork() and _rini().
-     * A17 requires _rfork() and _rini(),
-     * and later versions need ufork().
-     */
-    else if (strcmp(os_version.release, "01.1A") == 0 ||
-	     strcmp(os_version.release, "03.0A") == 0 ||
-	     strcmp(os_version.release, "03.1A") == 0 ||
-	     strcmp(os_version.release, "04.0A") == 0)
-    {
-        if (strcmp (os_version.version, "A18") >= 0)
-            forktype = bs2_UFORK;
-
-	else if (strcmp (os_version.version, "A17") < 0)
-            forktype = bs2_FORK_RINI;
-
-	else
-	    forktype = bs2_RFORK_RINI;
-    }
-
-    /* All later OS versions will hopefully use ufork() only  ;-) */
-    else
-        forktype = bs2_UFORK;
-
-    return forktype;
-}
-
-
-
-/* This routine is called by http_core for the BS2000Account directive */
-/* It stores the account name for later use */
-const char *os_set_account(apr_pool_t *p, const char *account)
-{
-    char account_temp[ACCT_LEN+1];
-
-    apr_cpystrn(account_temp, account, sizeof account_temp);
-
-    /* Make account all upper case */
-    ap_str_toupper(account_temp);
-
-    /* Pad to length 8 */
-    ap_pad(account_temp, sizeof account_temp, ' ');
-
-    bs2000_account = apr_pstrdup(p, account_temp);
-    return NULL;
-}
-
-/* This routine complements the setuid() call: it causes the BS2000 job
- * environment to be switched to the target user's user id.
- * That is important if CGI scripts try to execute native BS2000 commands.
- */
-int os_init_job_environment(server_rec *server, const char *user_name, int one_process)
-{
-    _rini_struct            inittask; 
-    char                    username[USER_LEN+1];
-    int                     save_errno;
-    bs2_ForkType            type = os_forktype();
-
-    /* We can be sure that no change to uid==0 is possible because of
-     * the checks in http_core.c:set_user()
-     */
-
-    /* The _rini() function works only after a prior _rfork().
-     * In the case of one_process, it would fail.
-     */
-    if (one_process) {
-
-	type = forktype = bs2_noFORK;
-
-	ap_log_error(APLOG_MARK, APLOG_ERR|APLOG_NOERRNO, 0, server,
-		     "The debug mode of Apache should only "
-		     "be started by an unprivileged user!");
-	return 0;
-    }
-
-    /* If no _rini() is required, then return quickly. */
-    if (type != bs2_RFORK_RINI && type != bs2_FORK_RINI)
-	return 0;
-
-    /* An Account is required for _rini() */
-    if (bs2000_account == NULL)
-    {
-	ap_log_error(APLOG_MARK, APLOG_ALERT|APLOG_NOERRNO, 0, server,
-		     "No BS2000Account configured - cannot switch to User %s",
-		     user_name);
-	exit(APEXIT_CHILDFATAL);
-    }
-
-    apr_cpystrn(username, user_name, sizeof username);
-
-    /* Make user name all upper case */
-    ap_str_toupper(username);
-
-    /* Pad to length 8 */
-    ap_pad(username, sizeof username, ' ');
-
-    inittask.username       = username;
-    inittask.account        = bs2000_account;
-    inittask.processor_name = "        ";
-
-    /* Switch to the new logon user (setuid() and setgid() are done later) */
-    /* Only the super user can switch identities. */
-    if (_rini(&inittask) != 0) {
-
-	ap_log_error(APLOG_MARK, APLOG_ALERT, errno, server,
-		     "_rini: BS2000 auth failed for user \"%s\" acct \"%s\"",
-		     inittask.username, inittask.account);
-
-	exit(APEXIT_CHILDFATAL);
-    }
-
-    return 0;
-}
-
-/* BS2000 requires a "special" version of fork() before a setuid()/_rini() call */
-pid_t os_fork(const char *user)
-{
-    pid_t pid;
-    char  username[USER_LEN+1];
-
-    switch (os_forktype()) {
-      case bs2_FORK:
-      case bs2_FORK_RINI:
-	pid = fork();
-	break;
-
-      case bs2_RFORK_RINI:
-	pid = _rfork();
-	break;
-
-      case bs2_UFORK:
-	apr_cpystrn(username, user, sizeof username);
-
-	/* Make user name all upper case - for some versions of ufork() */
-	ap_str_toupper(username);
-
-	pid = ufork(username);
-	if (pid == -1 && errno == EPERM) {
-	    ap_log_error(APLOG_MARK, APLOG_EMERG, errno,
-			 NULL, "ufork: Possible mis-configuration "
-			 "for user %s - Aborting.", user);
-	    exit(1);
-	}
-	break;
-
-      default:
-	pid = 0;
-	break;
-    }
-
-    return pid;
-}
-
-#else /* _OSD_POSIX */
-void bs2login_is_not_here()
-{
-}
-#endif /* _OSD_POSIX */
diff --git a/os/bs2000/ebcdic.c b/os/bs2000/ebcdic.c
deleted file mode 100644
index 649b37c..0000000
--- a/os/bs2000/ebcdic.c
+++ /dev/null
@@ -1,252 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-#include "ap_config.h"
-#if APR_CHARSET_EBCDIC
-#include "ebcdic.h"
-/*
-	   Initial Port for  Apache-1.3 by <Martin.Kraemer@Mch.SNI.De>
-
-"BS2000 OSD" is a POSIX on a main frame. It is made by Siemens AG, Germany.
-Within the POSIX subsystem, the same character set was chosen as in
-"native BS2000", namely EBCDIC.
-
-EBCDIC Table. (Yes, in EBCDIC, the letters 'a'..'z' are not contiguous!)
-This apr_table_t is bijective, i.e. there are no ambigous or duplicate characters
-00    00 01 02 03 85 09 86 7f  87 8d 8e 0b 0c 0d 0e 0f  *................*
-10    10 11 12 13 8f 0a 08 97  18 19 9c 9d 1c 1d 1e 1f  *................*
-20    80 81 82 83 84 92 17 1b  88 89 8a 8b 8c 05 06 07  *................*
-30    90 91 16 93 94 95 96 04  98 99 9a 9b 14 15 9e 1a  *................*
-40    20 a0 e2 e4 e0 e1 e3 e5  e7 f1 60 2e 3c 28 2b 7c  * .........`.<(+|*
-50    26 e9 ea eb e8 ed ee ef  ec df 21 24 2a 29 3b 9f  *&.........!$*);.*
-60    2d 2f c2 c4 c0 c1 c3 c5  c7 d1 5e 2c 25 5f 3e 3f  *-/........^,%_>?*
-70    f8 c9 ca cb c8 cd ce cf  cc a8 3a 23 40 27 3d 22  *..........:#@'="*
-80    d8 61 62 63 64 65 66 67  68 69 ab bb f0 fd fe b1  *.abcdefghi......*
-90    b0 6a 6b 6c 6d 6e 6f 70  71 72 aa ba e6 b8 c6 a4  *.jklmnopqr......*
-a0    b5 af 73 74 75 76 77 78  79 7a a1 bf d0 dd de ae  *..stuvwxyz......*
-b0    a2 a3 a5 b7 a9 a7 b6 bc  bd be ac 5b 5c 5d b4 d7  *...........[\]..*
-c0    f9 41 42 43 44 45 46 47  48 49 ad f4 f6 f2 f3 f5  *.ABCDEFGHI......*
-d0    a6 4a 4b 4c 4d 4e 4f 50  51 52 b9 fb fc db fa ff  *.JKLMNOPQR......*
-e0    d9 f7 53 54 55 56 57 58  59 5a b2 d4 d6 d2 d3 d5  *..STUVWXYZ......*
-f0    30 31 32 33 34 35 36 37  38 39 b3 7b dc 7d da 7e  *0123456789.{.}.~*
-*/
-
-/* The bijective ebcdic-to-ascii table: */
-const unsigned char os_toascii_strictly[256] = {
-/*00*/ 0x00, 0x01, 0x02, 0x03, 0x85, 0x09, 0x86, 0x7f,
-       0x87, 0x8d, 0x8e, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /*................*/
-/*10*/ 0x10, 0x11, 0x12, 0x13, 0x8f, 0x0a, 0x08, 0x97,
-       0x18, 0x19, 0x9c, 0x9d, 0x1c, 0x1d, 0x1e, 0x1f, /*................*/
-/*20*/ 0x80, 0x81, 0x82, 0x83, 0x84, 0x92, 0x17, 0x1b,
-       0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x05, 0x06, 0x07, /*................*/
-/*30*/ 0x90, 0x91, 0x16, 0x93, 0x94, 0x95, 0x96, 0x04,
-       0x98, 0x99, 0x9a, 0x9b, 0x14, 0x15, 0x9e, 0x1a, /*................*/
-/*40*/ 0x20, 0xa0, 0xe2, 0xe4, 0xe0, 0xe1, 0xe3, 0xe5,
-       0xe7, 0xf1, 0x60, 0x2e, 0x3c, 0x28, 0x2b, 0x7c, /* .........`.<(+|*/
-/*50*/ 0x26, 0xe9, 0xea, 0xeb, 0xe8, 0xed, 0xee, 0xef,
-       0xec, 0xdf, 0x21, 0x24, 0x2a, 0x29, 0x3b, 0x9f, /*&.........!$*);.*/
-/*60*/ 0x2d, 0x2f, 0xc2, 0xc4, 0xc0, 0xc1, 0xc3, 0xc5,
-       0xc7, 0xd1, 0x5e, 0x2c, 0x25, 0x5f, 0x3e, 0x3f, /*-/........^,%_>?*/
-/*70*/ 0xf8, 0xc9, 0xca, 0xcb, 0xc8, 0xcd, 0xce, 0xcf,
-       0xcc, 0xa8, 0x3a, 0x23, 0x40, 0x27, 0x3d, 0x22, /*..........:#@'="*/
-/*80*/ 0xd8, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
-       0x68, 0x69, 0xab, 0xbb, 0xf0, 0xfd, 0xfe, 0xb1, /*.abcdefghi......*/
-/*90*/ 0xb0, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70,
-       0x71, 0x72, 0xaa, 0xba, 0xe6, 0xb8, 0xc6, 0xa4, /*.jklmnopqr......*/
-/*a0*/ 0xb5, 0xaf, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78,
-       0x79, 0x7a, 0xa1, 0xbf, 0xd0, 0xdd, 0xde, 0xae, /*..stuvwxyz......*/
-/*b0*/ 0xa2, 0xa3, 0xa5, 0xb7, 0xa9, 0xa7, 0xb6, 0xbc,
-       0xbd, 0xbe, 0xac, 0x5b, 0x5c, 0x5d, 0xb4, 0xd7, /*...........[\]..*/
-/*c0*/ 0xf9, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
-       0x48, 0x49, 0xad, 0xf4, 0xf6, 0xf2, 0xf3, 0xf5, /*.ABCDEFGHI......*/
-/*d0*/ 0xa6, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50,
-       0x51, 0x52, 0xb9, 0xfb, 0xfc, 0xdb, 0xfa, 0xff, /*.JKLMNOPQR......*/
-/*e0*/ 0xd9, 0xf7, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58,
-       0x59, 0x5a, 0xb2, 0xd4, 0xd6, 0xd2, 0xd3, 0xd5, /*..STUVWXYZ......*/
-/*f0*/ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
-       0x38, 0x39, 0xb3, 0x7b, 0xdc, 0x7d, 0xda, 0x7e  /*0123456789.{.}.~*/
-};
-
-/* This apr_table_t is (almost) identical to the previous one. The only difference
- * is the fact that it maps every EBCDIC *except 0x0A* to its ASCII
- * equivalent. The reason for this apr_table_t is simple: Throughout the
- * server, protocol strings are used in the form
- *  "Content-Type: text/plain\015\012". Now all the characters in the string
- * are stored as EBCDIC, only the semantics of \012 is completely
- * different from LF (look it up in the apr_table_t above). \015 happens to be
- * mapped to \015 anyway, so there's no special case for it.
- * 
- * In THIS table, EBCDIC-\012 is mapped to ASCII-\012.
- * This apr_table_t is therefore used wherever an EBCDIC to ASCII conversion is
- * needed in the server.
- */
-/* ebcdic-to-ascii with \012 mapped to ASCII-\n */
-const unsigned char os_toascii[256] = {
-/*00*/ 0x00, 0x01, 0x02, 0x03, 0x85, 0x09, 0x86, 0x7f,
-       0x87, 0x8d, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /*................*/
-/*10*/ 0x10, 0x11, 0x12, 0x13, 0x8f, 0x0a, 0x08, 0x97,
-       0x18, 0x19, 0x9c, 0x9d, 0x1c, 0x1d, 0x1e, 0x1f, /*................*/
-/*20*/ 0x80, 0x81, 0x82, 0x83, 0x84, 0x92, 0x17, 0x1b,
-       0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x05, 0x06, 0x07, /*................*/
-/*30*/ 0x90, 0x91, 0x16, 0x93, 0x94, 0x95, 0x96, 0x04,
-       0x98, 0x99, 0x9a, 0x9b, 0x14, 0x15, 0x9e, 0x1a, /*................*/
-/*40*/ 0x20, 0xa0, 0xe2, 0xe4, 0xe0, 0xe1, 0xe3, 0xe5,
-       0xe7, 0xf1, 0x60, 0x2e, 0x3c, 0x28, 0x2b, 0x7c, /* .........`.<(+|*/
-/*50*/ 0x26, 0xe9, 0xea, 0xeb, 0xe8, 0xed, 0xee, 0xef,
-       0xec, 0xdf, 0x21, 0x24, 0x2a, 0x29, 0x3b, 0x9f, /*&.........!$*);.*/
-/*60*/ 0x2d, 0x2f, 0xc2, 0xc4, 0xc0, 0xc1, 0xc3, 0xc5,
-       0xc7, 0xd1, 0x5e, 0x2c, 0x25, 0x5f, 0x3e, 0x3f, /*-/........^,%_>?*/
-/*70*/ 0xf8, 0xc9, 0xca, 0xcb, 0xc8, 0xcd, 0xce, 0xcf,
-       0xcc, 0xa8, 0x3a, 0x23, 0x40, 0x27, 0x3d, 0x22, /*..........:#@'="*/
-/*80*/ 0xd8, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
-       0x68, 0x69, 0xab, 0xbb, 0xf0, 0xfd, 0xfe, 0xb1, /*.abcdefghi......*/
-/*90*/ 0xb0, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70,
-       0x71, 0x72, 0xaa, 0xba, 0xe6, 0xb8, 0xc6, 0xa4, /*.jklmnopqr......*/
-/*a0*/ 0xb5, 0xaf, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78,
-       0x79, 0x7a, 0xa1, 0xbf, 0xd0, 0xdd, 0xde, 0xae, /*..stuvwxyz......*/
-/*b0*/ 0xa2, 0xa3, 0xa5, 0xb7, 0xa9, 0xa7, 0xb6, 0xbc,
-       0xbd, 0xbe, 0xac, 0x5b, 0x5c, 0x5d, 0xb4, 0xd7, /*...........[\]..*/
-/*c0*/ 0xf9, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
-       0x48, 0x49, 0xad, 0xf4, 0xf6, 0xf2, 0xf3, 0xf5, /*.ABCDEFGHI......*/
-/*d0*/ 0xa6, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50,
-       0x51, 0x52, 0xb9, 0xfb, 0xfc, 0xdb, 0xfa, 0xff, /*.JKLMNOPQR......*/
-/*e0*/ 0xd9, 0xf7, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58,
-       0x59, 0x5a, 0xb2, 0xd4, 0xd6, 0xd2, 0xd3, 0xd5, /*..STUVWXYZ......*/
-/*f0*/ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
-       0x38, 0x39, 0xb3, 0x7b, 0xdc, 0x7d, 0xda, 0x7e  /*0123456789.{.}.~*/
-};
-
-/* The ascii-to-ebcdic table:
-00    00 01 02 03 37 2d 2e 2f  16 05 15 0b 0c 0d 0e 0f  *................*
-10    10 11 12 13 3c 3d 32 26  18 19 3f 27 1c 1d 1e 1f  *................*
-20    40 5a 7f 7b 5b 6c 50 7d  4d 5d 5c 4e 6b 60 4b 61  * !"#$%&'()*+,-./
-30    f0 f1 f2 f3 f4 f5 f6 f7  f8 f9 7a 5e 4c 7e 6e 6f  *0123456789:;<=>?*
-40    7c c1 c2 c3 c4 c5 c6 c7  c8 c9 d1 d2 d3 d4 d5 d6  *@ABCDEFGHIJKLMNO*
-50    d7 d8 d9 e2 e3 e4 e5 e6  e7 e8 e9 bb bc bd 6a 6d  *PQRSTUVWXYZ[\]^_*
-60    4a 81 82 83 84 85 86 87  88 89 91 92 93 94 95 96  *`abcdefghijklmno*
-70    97 98 99 a2 a3 a4 a5 a6  a7 a8 a9 fb 4f fd ff 07  *pqrstuvwxyz{|}~.*
-80    20 21 22 23 24 04 06 08  28 29 2a 2b 2c 09 0a 14  *................*
-90    30 31 25 33 34 35 36 17  38 39 3a 3b 1a 1b 3e 5f  *................*
-a0    41 aa b0 b1 9f b2 d0 b5  79 b4 9a 8a ba ca af a1  *................*
-b0    90 8f ea fa be a0 b6 b3  9d da 9b 8b b7 b8 b9 ab  *................*
-c0    64 65 62 66 63 67 9e 68  74 71 72 73 78 75 76 77  *................*
-d0    ac 69 ed ee eb ef ec bf  80 e0 fe dd fc ad ae 59  *................*
-e0    44 45 42 46 43 47 9c 48  54 51 52 53 58 55 56 57  *................*
-f0    8c 49 cd ce cb cf cc e1  70 c0 de db dc 8d 8e df  *................*
-*/
-const unsigned char os_toebcdic[256] = {
-/*00*/  0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f,
-	0x16, 0x05, 0x15, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,  /*................*/
-/*10*/  0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26,
-	0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f,  /*................*/
-/*20*/  0x40, 0x5a, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d,
-	0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61,  /* !"#$%&'()*+,-./ */
-/*30*/  0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
-	0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f,  /*0123456789:;<=>?*/
-/*40*/  0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
-	0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6,  /*@ABCDEFGHIJKLMNO*/
-/*50*/  0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6,
-	0xe7, 0xe8, 0xe9, 0xbb, 0xbc, 0xbd, 0x6a, 0x6d,  /*PQRSTUVWXYZ[\]^_*/
-/*60*/  0x4a, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
-	0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96,  /*`abcdefghijklmno*/
-/*70*/  0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6,
-	0xa7, 0xa8, 0xa9, 0xfb, 0x4f, 0xfd, 0xff, 0x07,  /*pqrstuvwxyz{|}~.*/
-/*80*/  0x20, 0x21, 0x22, 0x23, 0x24, 0x04, 0x06, 0x08,
-	0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x14,  /*................*/
-/*90*/  0x30, 0x31, 0x25, 0x33, 0x34, 0x35, 0x36, 0x17,
-	0x38, 0x39, 0x3a, 0x3b, 0x1a, 0x1b, 0x3e, 0x5f,  /*................*/
-/*a0*/  0x41, 0xaa, 0xb0, 0xb1, 0x9f, 0xb2, 0xd0, 0xb5,
-	0x79, 0xb4, 0x9a, 0x8a, 0xba, 0xca, 0xaf, 0xa1,  /*................*/
-/*b0*/  0x90, 0x8f, 0xea, 0xfa, 0xbe, 0xa0, 0xb6, 0xb3,
-	0x9d, 0xda, 0x9b, 0x8b, 0xb7, 0xb8, 0xb9, 0xab,  /*................*/
-/*c0*/  0x64, 0x65, 0x62, 0x66, 0x63, 0x67, 0x9e, 0x68,
-	0x74, 0x71, 0x72, 0x73, 0x78, 0x75, 0x76, 0x77,  /*................*/
-/*d0*/  0xac, 0x69, 0xed, 0xee, 0xeb, 0xef, 0xec, 0xbf,
-	0x80, 0xe0, 0xfe, 0xdd, 0xfc, 0xad, 0xae, 0x59,  /*................*/
-/*e0*/  0x44, 0x45, 0x42, 0x46, 0x43, 0x47, 0x9c, 0x48,
-	0x54, 0x51, 0x52, 0x53, 0x58, 0x55, 0x56, 0x57,  /*................*/
-/*f0*/  0x8c, 0x49, 0xcd, 0xce, 0xcb, 0xcf, 0xcc, 0xe1,
-	0x70, 0xc0, 0xde, 0xdb, 0xdc, 0x8d, 0x8e, 0xdf   /*................*/
-};
-
-/* Translate a memory block from EBCDIC (host charset) to ASCII (net charset)
- * dest and srce may be identical, or separate memory blocks, but
- * should not overlap.
- */
-void
-ebcdic2ascii(unsigned char *dest, const unsigned char *srce, size_t count)
-{
-	while (count-- != 0) {
-		*dest++ = os_toascii[*srce++];
-	}
-}
-void
-ebcdic2ascii_strictly(unsigned char *dest, const unsigned char *srce, size_t count)
-{
-	while (count-- != 0) {
-		*dest++ = os_toascii_strictly[*srce++];
-	}
-}
-void
-ascii2ebcdic(unsigned char *dest, const unsigned char *srce, size_t count)
-{
-	while (count-- != 0) {
-		*dest++ = os_toebcdic[*srce++];
-	}
-}
-#endif /*APR_CHARSET_EBCDIC*/
diff --git a/os/bs2000/ebcdic.h b/os/bs2000/ebcdic.h
deleted file mode 100644
index 779c15f..0000000
--- a/os/bs2000/ebcdic.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-#include <sys/types.h>
-
-extern const unsigned char os_toascii[256];
-extern const unsigned char os_toebcdic[256];
-void ebcdic2ascii(unsigned char *dest, const unsigned char *srce, size_t count);
-void ebcdic2ascii_strictly(unsigned char *dest, const unsigned char *srce, size_t count);
-void ascii2ebcdic(unsigned char *dest, const unsigned char *srce, size_t count);
-
diff --git a/os/bs2000/os.c b/os/bs2000/os.c
deleted file mode 100644
index cc478b2..0000000
--- a/os/bs2000/os.c
+++ /dev/null
@@ -1,76 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-/*
- * This file will include OS specific functions which are not inlineable.
- * Any inlineable functions should be defined in os-inline.c instead.
- */
-
-#include "httpd.h"
-#include "os.h"
-
-AP_DECLARE(apr_status_t) ap_os_create_privileged_process(
-    const request_rec *r,
-    apr_proc_t *newproc, const char *progname,
-    const char * const *args,
-    const char * const *env,
-    apr_procattr_t *attr, apr_pool_t *p)
-{
-    return apr_proc_create(newproc, progname, args, env, attr, p);
-}
-
diff --git a/os/bs2000/os.h b/os/bs2000/os.h
deleted file mode 100644
index f3f333c..0000000
--- a/os/bs2000/os.h
+++ /dev/null
@@ -1,76 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-#ifndef APACHE_OS_H
-#define APACHE_OS_H
-
-#define PLATFORM "BS2000"
-
-#include "apr.h"
-
-/*
- * This file in included in all Apache source code. It contains definitions
- * of facilities available on _this_ operating system (HAVE_* macros),
- * and prototypes of OS specific functions defined in os.c or os-inline.c
- */
-
-/* Other ap_os_ routines not used by this platform */
-
-extern pid_t os_fork(const char *user);
-
-#endif /*! APACHE_OS_H*/
diff --git a/os/config.m4 b/os/config.m4
deleted file mode 100644
index 7042043..0000000
--- a/os/config.m4
+++ /dev/null
@@ -1,26 +0,0 @@
-AC_MSG_CHECKING(for target platform)
-
-case $host in
-*beos*)
-  OS="beos"
-  OS_DIR=$OS
-  ;;
-*pc-os2_emx*)
-  OS="os2"
-  OS_DIR=$OS
-  ;;
-bs2000*)
-  OS="unix"
-  OS_DIR=bs2000  # only the OS_DIR is platform specific.
-  ;;
-*cygwin*)
-  OS="cygwin"
-  OS_DIR="unix"
-  ;;
-*)
-  OS="unix"
-  OS_DIR=$OS;;
-esac
-
-AC_MSG_RESULT($OS)
-APACHE_FAST_OUTPUT(os/$OS_DIR/Makefile)
diff --git a/os/netware/Apache.def b/os/netware/Apache.def
deleted file mode 100644
index 6d8bf9f..0000000
--- a/os/netware/Apache.def
+++ /dev/null
@@ -1,5 +0,0 @@
-MODULE  APRLIB.NLM
-MODULE  LIBC.NLM
-MODULE  WS2_32.NLM
-EXPORT  @HTTPD.IMP
-IMPORT	GetCurrentAddressSpace
diff --git a/os/netware/apache.xdc b/os/netware/apache.xdc
deleted file mode 100644
index 12a7f6b..0000000
--- a/os/netware/apache.xdc
+++ /dev/null
Binary files differ
diff --git a/os/netware/modules.c b/os/netware/modules.c
deleted file mode 100644
index d677ed3..0000000
--- a/os/netware/modules.c
+++ /dev/null
@@ -1,80 +0,0 @@
-/* modules.c --- major modules compiled into Apache for NetWare.
- * Only insert an entry for a module if it must be compiled into
- * the core server
- */
-
-#define CORE_PRIVATE
-#include "httpd.h"
-#include "http_config.h"
-
-extern module core_module;
-extern module mpm_netware_module;
-extern module http_module;
-extern module so_module;
-extern module mime_module;
-extern module access_module;
-extern module auth_module;
-extern module negotiation_module;
-extern module include_module;
-extern module autoindex_module;
-extern module dir_module;
-//extern module cgi_module;
-extern module userdir_module;
-extern module alias_module;
-extern module env_module;
-extern module log_config_module;
-extern module asis_module;
-extern module imap_module;
-extern module actions_module;
-extern module setenvif_module;
-extern module nwssl_module;
-
-module *ap_prelinked_modules[] = {
-  &core_module,
-  &mpm_netware_module,
-  &http_module,
-  &so_module,
-  &mime_module,
-  &access_module,
-  &auth_module,
-  &negotiation_module,
-  &include_module,
-  &autoindex_module,
-  &dir_module,
-//  &cgi_module,
-  &userdir_module,
-  &alias_module,
-  &env_module,
-  &log_config_module,
-  &asis_module,
-  &imap_module,
-  &actions_module,
-  &setenvif_module,
-  &nwssl_module,
-  NULL
-};
-
-module *ap_preloaded_modules[] = {
-  &core_module,
-  &mpm_netware_module,
-  &http_module,
-  &so_module,
-  &mime_module,
-  &access_module,
-  &auth_module,
-  &negotiation_module,
-  &include_module,
-  &autoindex_module,
-  &dir_module,
-//  &cgi_module,
-  &userdir_module,
-  &alias_module,
-  &env_module,
-  &log_config_module,
-  &asis_module,
-  &imap_module,
-  &actions_module,
-  &setenvif_module,
-  &nwssl_module,
-  NULL
-};
diff --git a/os/netware/os.h b/os/netware/os.h
deleted file mode 100644
index a38d1c4..0000000
--- a/os/netware/os.h
+++ /dev/null
@@ -1,76 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-#ifndef APACHE_OS_H
-#define APACHE_OS_H
-
-#ifndef PLATFORM
-#define PLATFORM "NETWARE"
-#endif
-
-#include <screen.h>
-
-#define CASE_BLIND_FILESYSTEM
-#define NO_WRITEV
-
-#define APACHE_MPM_DIR  "server/mpm/netware" /* generated on unix */
-
-#define getpid NXThreadGetId
-#define exit(s) if(s){pressanykey();apr_terminate();}exit(s);
-
-#endif   /* ! APACHE_OS_H */
diff --git a/os/netware/pre_nw.h b/os/netware/pre_nw.h
deleted file mode 100644
index ce5ebe4..0000000
--- a/os/netware/pre_nw.h
+++ /dev/null
@@ -1,49 +0,0 @@
-#ifndef __pre_nw__
-#define __pre_nw__
-
-#pragma precompile_target "precomp.mch"
-#define NETWARE
-
-
-#define N_PLAT_NLM
-
-/* hint for MSL C++ that we're on NetWare platform */
-#define __NETWARE__
-
-/* the FAR keyword has no meaning in a 32-bit environment 
-   but is used in the SDK headers so we take it out */
-#define FAR
-#define far
-
-/* no-op for Codewarrior C compiler; a functions are cdecl 
-   by default */
-#define cdecl
-
-/* if we have wchar_t enabled in C++, predefine this type to avoid
-   a conflict in Novell's header files */
-#if (__option(cplusplus) && __option(wchar_type))
-#define _WCHAR_T
-#endif
-
-/* C9X defintion used by MSL C++ library */
-#define DECIMAL_DIG 17
-
-/* define long long typedefs for Watcom compatiblity */
-typedef long long int64_t;
-typedef unsigned long long uint64_t;
-
-/* some code may want to use the MS convention for long long */
-#ifndef __int64
-#define __int64 long long
-#endif
-
-/* Don't use the DBM rewrite map for mod_rewrite */
-#define NO_DBM_REWRITEMAP
-
-/* Allow MOD_AUTH_DBM to use APR */
-#define AP_AUTH_DBM_USE_APR
-
-#endif
-
-
-
diff --git a/os/netware/util_nw.c b/os/netware/util_nw.c
deleted file mode 100644
index 4483403..0000000
--- a/os/netware/util_nw.c
+++ /dev/null
@@ -1,79 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-#include "httpd.h"
-#include "http_log.h"
-
-#include <netware.h>
-
-int nlmUnloadSignaled();
-
-AP_DECLARE(apr_status_t) ap_os_create_privileged_process(
-    const request_rec *r,
-    apr_proc_t *newproc, const char *progname,
-    const char * const *args,
-    const char * const *env,
-    apr_procattr_t *attr, apr_pool_t *p)
-{
-    return APR_ENOTIMPL;
-}
-
-int  _NonAppCheckUnload( void )
-{
-	return nlmUnloadSignaled();
-}
diff --git a/os/os2/.cvsignore b/os/os2/.cvsignore
deleted file mode 100644
index a00af59..0000000
--- a/os/os2/.cvsignore
+++ /dev/null
@@ -1,5 +0,0 @@
-Makefile
-.deps
-*.lo
-*.la
-.libs
diff --git a/os/os2/Makefile.in b/os/os2/Makefile.in
deleted file mode 100644
index fba4972..0000000
--- a/os/os2/Makefile.in
+++ /dev/null
@@ -1,5 +0,0 @@
-
-LTLIBRARY_NAME    = libos.la
-LTLIBRARY_SOURCES = util_os2.c
-
-include $(top_srcdir)/build/ltlib.mk
diff --git a/os/os2/config.m4 b/os/os2/config.m4
deleted file mode 100644
index b62d214..0000000
--- a/os/os2/config.m4
+++ /dev/null
@@ -1,3 +0,0 @@
-if test "$OS" = "os2" ; then
-  APR_ADDTO(CFLAGS, [-DOS2 -O2])
-fi
diff --git a/os/os2/core.mk b/os/os2/core.mk
deleted file mode 100644
index a397ad4..0000000
--- a/os/os2/core.mk
+++ /dev/null
@@ -1,7 +0,0 @@
-# Some rules for making a shared core dll on OS/2
-
-os2core: httpd.dll $(CORE_IMPLIB)
-	$(LIBTOOL) --mode=link gcc -Zstack 512 $(LDFLAGS) $(EXTRA_LDFLAGS) -o httpd $(CORE_IMPLIB)
-
-httpd.dll: $(PROGRAM_DEPENDENCIES) $(CORE_IMPLIB)
-	$(LINK) -Zdll $(EXTRA_LDFLAGS) -s -o $@ server/exports.lo modules.lo $(PROGRAM_DEPENDENCIES) $(EXTRA_LIBS) server/ApacheCoreOS2.def
diff --git a/os/os2/core_header.def b/os/os2/core_header.def
deleted file mode 100644
index fc7cb34..0000000
--- a/os/os2/core_header.def
+++ /dev/null
@@ -1,16 +0,0 @@
-LIBRARY httpd INITINSTANCE
-DESCRIPTION "Apache Server Core"
-DATA NONSHARED
-
-EXPORTS
-  "main"
-
-; One for mod_dav from socket library
-  "_swaps"
-
-; And some more for mod_unique_id
-  "gethostname"
-  "gethostbyname"
-  "_swapl"
-  "h_errno"
-  "inet_ntoa"
diff --git a/os/os2/os.h b/os/os2/os.h
deleted file mode 100644
index a0a7035..0000000
--- a/os/os2/os.h
+++ /dev/null
@@ -1,75 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-#ifndef APACHE_OS_H
-#define APACHE_OS_H
-
-#define PLATFORM "OS/2"
-
-/* going away shortly... */
-#define HAVE_DRIVE_LETTERS
-#define HAVE_UNC_PATHS
-#define CASE_BLIND_FILESYSTEM
-
-/*
- * This file in included in all Apache source code. It contains definitions
- * of facilities available on _this_ operating system (HAVE_* macros),
- * and prototypes of OS specific functions defined in os.c or os-inline.c
- */
-
-#endif   /* ! APACHE_OS_H */
diff --git a/os/os2/util_os2.c b/os/os2/util_os2.c
deleted file mode 100644
index 7d77daa..0000000
--- a/os/os2/util_os2.c
+++ /dev/null
@@ -1,81 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-#define INCL_DOS
-#define INCL_DOSERRORS
-#include <os2.h>
-#include "ap_config.h"
-#include "httpd.h"
-#include "http_log.h"
-#include "os.h"
-#include <sys/time.h>
-#include <sys/signal.h>
-#include <ctype.h>
-#include <string.h>
-#include "apr_strings.h"
-
-
-AP_DECLARE(apr_status_t) ap_os_create_privileged_process(
-    const request_rec *r,
-    apr_proc_t *newproc, const char *progname,
-    const char * const *args,
-    const char * const *env,
-    apr_procattr_t *attr, apr_pool_t *p)
-{
-    return apr_proc_create(newproc, progname, args, env, attr, p);
-}
diff --git a/os/tpf/.cvsignore b/os/tpf/.cvsignore
deleted file mode 100644
index bd5fe06..0000000
--- a/os/tpf/.cvsignore
+++ /dev/null
@@ -1,2 +0,0 @@
-Makefile
-.deps
diff --git a/os/tpf/TPFExport b/os/tpf/TPFExport
deleted file mode 100644
index 449ebf2..0000000
--- a/os/tpf/TPFExport
+++ /dev/null
@@ -1,7 +0,0 @@
-#!/bin/sh
-echo " Setting TPF/c89 environment variables"
-export _C89_CCMODE=1
-# replace the following with the location of your TPF include files
-export _C89_INCDIRS="/u/tpf41/currentmaint/include /u/tpf41/currentmaint/include/oco" 
-export TPF=YES
-echo "Done"
diff --git a/os/tpf/ebcdic.c b/os/tpf/ebcdic.c
deleted file mode 100644
index 0bb11a9..0000000
--- a/os/tpf/ebcdic.c
+++ /dev/null
@@ -1,221 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-#include "ap_config.h"
-#if APR_CHARSET_EBCDIC
-#include "ebcdic.h"
-/*
-This code does basic character mapping for IBM's TPF operating system.
-It is a modified version of <Martin.Kraemer@Mch.SNI.De>'s code for
-the BS2000 (apache/src/os/bs2000/ebcdic.c).
-*/
-
-/*
-Bijective EBCDIC (character set IBM-1047) to US-ASCII table:
-This apr_table_t is bijective - there are no ambigous or duplicate characters.
-*/
-const unsigned char os_toascii_strictly[256] = {
-    0x00, 0x01, 0x02, 0x03, 0x85, 0x09, 0x86, 0x7f, /* 00-0f:           */
-    0x87, 0x8d, 0x8e, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* ................ */
-    0x10, 0x11, 0x12, 0x13, 0x8f, 0x0a, 0x08, 0x97, /* 10-1f:           */
-    0x18, 0x19, 0x9c, 0x9d, 0x1c, 0x1d, 0x1e, 0x1f, /* ................ */
-    0x80, 0x81, 0x82, 0x83, 0x84, 0x92, 0x17, 0x1b, /* 20-2f:           */
-    0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x05, 0x06, 0x07, /* ................ */
-    0x90, 0x91, 0x16, 0x93, 0x94, 0x95, 0x96, 0x04, /* 30-3f:           */
-    0x98, 0x99, 0x9a, 0x9b, 0x14, 0x15, 0x9e, 0x1a, /* ................ */
-    0x20, 0xa0, 0xe2, 0xe4, 0xe0, 0xe1, 0xe3, 0xe5, /* 40-4f:           */
-    0xe7, 0xf1, 0xa2, 0x2e, 0x3c, 0x28, 0x2b, 0x7c, /*  ...........<(+| */
-    0x26, 0xe9, 0xea, 0xeb, 0xe8, 0xed, 0xee, 0xef, /* 50-5f:           */
-    0xec, 0xdf, 0x21, 0x24, 0x2a, 0x29, 0x3b, 0x5e, /* &.........!$*);^ */
-    0x2d, 0x2f, 0xc2, 0xc4, 0xc0, 0xc1, 0xc3, 0xc5, /* 60-6f:           */
-    0xc7, 0xd1, 0xa6, 0x2c, 0x25, 0x5f, 0x3e, 0x3f, /* -/.........,%_>? */
-    0xf8, 0xc9, 0xca, 0xcb, 0xc8, 0xcd, 0xce, 0xcf, /* 70-7f:           */
-    0xcc, 0x60, 0x3a, 0x23, 0x40, 0x27, 0x3d, 0x22, /* .........`:#@'=" */
-    0xd8, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 80-8f:           */
-    0x68, 0x69, 0xab, 0xbb, 0xf0, 0xfd, 0xfe, 0xb1, /* .abcdefghi...... */
-    0xb0, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, /* 90-9f:           */
-    0x71, 0x72, 0xaa, 0xba, 0xe6, 0xb8, 0xc6, 0xa4, /* .jklmnopqr...... */
-    0xb5, 0x7e, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, /* a0-af:           */
-    0x79, 0x7a, 0xa1, 0xbf, 0xd0, 0x5b, 0xde, 0xae, /* .~stuvwxyz...[.. */
-    0xac, 0xa3, 0xa5, 0xb7, 0xa9, 0xa7, 0xb6, 0xbc, /* b0-bf:           */
-    0xbd, 0xbe, 0xdd, 0xa8, 0xaf, 0x5d, 0xb4, 0xd7, /* .............].. */
-    0x7b, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* c0-cf:           */
-    0x48, 0x49, 0xad, 0xf4, 0xf6, 0xf2, 0xf3, 0xf5, /* {ABCDEFGHI...... */
-    0x7d, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, /* d0-df:           */
-    0x51, 0x52, 0xb9, 0xfb, 0xfc, 0xf9, 0xfa, 0xff, /* }JKLMNOPQR...... */
-    0x5c, 0xf7, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, /* e0-ef:           */
-    0x59, 0x5a, 0xb2, 0xd4, 0xd6, 0xd2, 0xd3, 0xd5, /* \.STUVWXYZ...... */
-    0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* f0-ff:           */
-    0x38, 0x39, 0xb3, 0xdb, 0xdc, 0xd9, 0xda, 0x9f  /* 0123456789...... */
-};
-
-/*
-Server EBCDIC (character set IBM-1047) to US-ASCII table:
-This apr_table_t is a copy of the os_toascii_strictly bijective apr_table_t above.
-The only change is that hex 0a (\012 octal) is mapped to hex 0a
-(ASCII's line feed) instead of hex 8e.  This is done because throughout
-Apache, protocol string definitions hardcode the linefeed as \012 (octal):
-"Content-Type: text/plain\015\012".  Without this kludge all protocol
-string definitions would need to be changed from ...\012 to ...\025.
-*/
-const unsigned char os_toascii[256] = {
-    0x00, 0x01, 0x02, 0x03, 0x85, 0x09, 0x86, 0x7f, /* 00-0f:           */
-    0x87, 0x8d, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* ................ */
-    0x10, 0x11, 0x12, 0x13, 0x8f, 0x0a, 0x08, 0x97, /* 10-1f:           */
-    0x18, 0x19, 0x9c, 0x9d, 0x1c, 0x1d, 0x1e, 0x1f, /* ................ */
-    0x80, 0x81, 0x82, 0x83, 0x84, 0x92, 0x17, 0x1b, /* 20-2f:           */
-    0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x05, 0x06, 0x07, /* ................ */
-    0x90, 0x91, 0x16, 0x93, 0x94, 0x95, 0x96, 0x04, /* 30-3f:           */
-    0x98, 0x99, 0x9a, 0x9b, 0x14, 0x15, 0x9e, 0x1a, /* ................ */
-    0x20, 0xa0, 0xe2, 0xe4, 0xe0, 0xe1, 0xe3, 0xe5, /* 40-4f:           */
-    0xe7, 0xf1, 0xa2, 0x2e, 0x3c, 0x28, 0x2b, 0x7c, /*  ...........<(+| */
-    0x26, 0xe9, 0xea, 0xeb, 0xe8, 0xed, 0xee, 0xef, /* 50-5f:           */
-    0xec, 0xdf, 0x21, 0x24, 0x2a, 0x29, 0x3b, 0x5e, /* &.........!$*);^ */
-    0x2d, 0x2f, 0xc2, 0xc4, 0xc0, 0xc1, 0xc3, 0xc5, /* 60-6f:           */
-    0xc7, 0xd1, 0xa6, 0x2c, 0x25, 0x5f, 0x3e, 0x3f, /* -/.........,%_>? */
-    0xf8, 0xc9, 0xca, 0xcb, 0xc8, 0xcd, 0xce, 0xcf, /* 70-7f:           */
-    0xcc, 0x60, 0x3a, 0x23, 0x40, 0x27, 0x3d, 0x22, /* .........`:#@'=" */
-    0xd8, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 80-8f:           */
-    0x68, 0x69, 0xab, 0xbb, 0xf0, 0xfd, 0xfe, 0xb1, /* .abcdefghi...... */
-    0xb0, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, /* 90-9f:           */
-    0x71, 0x72, 0xaa, 0xba, 0xe6, 0xb8, 0xc6, 0xa4, /* .jklmnopqr...... */
-    0xb5, 0x7e, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, /* a0-af:           */
-    0x79, 0x7a, 0xa1, 0xbf, 0xd0, 0x5b, 0xde, 0xae, /* .~stuvwxyz...[.. */
-    0xac, 0xa3, 0xa5, 0xb7, 0xa9, 0xa7, 0xb6, 0xbc, /* b0-bf:           */
-    0xbd, 0xbe, 0xdd, 0xa8, 0xaf, 0x5d, 0xb4, 0xd7, /* .............].. */
-    0x7b, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* c0-cf:           */
-    0x48, 0x49, 0xad, 0xf4, 0xf6, 0xf2, 0xf3, 0xf5, /* {ABCDEFGHI...... */
-    0x7d, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, /* d0-df:           */
-    0x51, 0x52, 0xb9, 0xfb, 0xfc, 0xf9, 0xfa, 0xff, /* }JKLMNOPQR...... */
-    0x5c, 0xf7, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, /* e0-ef:           */
-    0x59, 0x5a, 0xb2, 0xd4, 0xd6, 0xd2, 0xd3, 0xd5, /* \.STUVWXYZ...... */
-    0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* f0-ff:           */
-    0x38, 0x39, 0xb3, 0xdb, 0xdc, 0xd9, 0xda, 0x9f  /* 0123456789...... */
-};
-
-/*
-The US-ASCII to EBCDIC (character set IBM-1047) table:
-This apr_table_t is bijective (no ambiguous or duplicate characters)
-*/
-const unsigned char os_toebcdic[256] = {
-    0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 00-0f:           */
-    0x16, 0x05, 0x15, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* ................ */
-    0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 10-1f:           */
-    0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* ................ */
-    0x40, 0x5a, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, /* 20-2f:           */
-    0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /*  !"#$%&'()*+,-./ */
-    0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 30-3f:           */
-    0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0123456789:;<=>? */
-    0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 40-4f:           */
-    0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* @ABCDEFGHIJKLMNO */
-    0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 50-5f:           */
-    0xe7, 0xe8, 0xe9, 0xad, 0xe0, 0xbd, 0x5f, 0x6d, /* PQRSTUVWXYZ[\]^_ */
-    0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 60-6f:           */
-    0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* `abcdefghijklmno */
-    0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 70-7f:           */
-    0xa7, 0xa8, 0xa9, 0xc0, 0x4f, 0xd0, 0xa1, 0x07, /* pqrstuvwxyz{|}~. */
-    0x20, 0x21, 0x22, 0x23, 0x24, 0x04, 0x06, 0x08, /* 80-8f:           */
-    0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x14, /* ................ */
-    0x30, 0x31, 0x25, 0x33, 0x34, 0x35, 0x36, 0x17, /* 90-9f:           */
-    0x38, 0x39, 0x3a, 0x3b, 0x1a, 0x1b, 0x3e, 0xff, /* ................ */
-    0x41, 0xaa, 0x4a, 0xb1, 0x9f, 0xb2, 0x6a, 0xb5, /* a0-af:           */
-    0xbb, 0xb4, 0x9a, 0x8a, 0xb0, 0xca, 0xaf, 0xbc, /* ................ */
-    0x90, 0x8f, 0xea, 0xfa, 0xbe, 0xa0, 0xb6, 0xb3, /* b0-bf:           */
-    0x9d, 0xda, 0x9b, 0x8b, 0xb7, 0xb8, 0xb9, 0xab, /* ................ */
-    0x64, 0x65, 0x62, 0x66, 0x63, 0x67, 0x9e, 0x68, /* c0-cf:           */
-    0x74, 0x71, 0x72, 0x73, 0x78, 0x75, 0x76, 0x77, /* ................ */
-    0xac, 0x69, 0xed, 0xee, 0xeb, 0xef, 0xec, 0xbf, /* d0-df:           */
-    0x80, 0xfd, 0xfe, 0xfb, 0xfc, 0xba, 0xae, 0x59, /* ................ */
-    0x44, 0x45, 0x42, 0x46, 0x43, 0x47, 0x9c, 0x48, /* e0-ef:           */
-    0x54, 0x51, 0x52, 0x53, 0x58, 0x55, 0x56, 0x57, /* ................ */
-    0x8c, 0x49, 0xcd, 0xce, 0xcb, 0xcf, 0xcc, 0xe1, /* f0-ff:           */
-    0x70, 0xdd, 0xde, 0xdb, 0xdc, 0x8d, 0x8e, 0xdf  /* ................ */
-};
-
-/* Translate a memory block from EBCDIC (host charset) to ASCII (net charset)
- * dest and srce may be identical, or separate memory blocks, but
- * should not overlap.
- */
-void
-ebcdic2ascii(void *dest, const void *srce, size_t count)
-{
-    unsigned char *udest = dest;
-    const unsigned char *usrce = srce;
-    while (count-- != 0) {
-        *udest++ = os_toascii[*usrce++];
-    }
-}
-void
-ebcdic2ascii_strictly(unsigned char *dest, const unsigned char *srce, size_t count)
-{
-    while (count-- != 0) {
-        *dest++ = os_toascii_strictly[*srce++];
-    }
-}
-void
-ascii2ebcdic(void *dest, const void *srce, size_t count)
-{
-        unsigned char *udest = dest;
-        const unsigned char *usrce = srce;
-
-        while (count-- != 0) {
-                *udest++ = os_toebcdic[*usrce++];
-    }
-}
-#endif /*APR_CHARSET_EBCDIC*/
- 
diff --git a/os/tpf/ebcdic.h b/os/tpf/ebcdic.h
deleted file mode 100644
index ce8ca15..0000000
--- a/os/tpf/ebcdic.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-#include <sys/types.h>
-
-extern const unsigned char os_toascii[256];
-extern const unsigned char os_toebcdic[256];
-void ebcdic2ascii(void *dest, const void *srce, size_t count);
-void ebcdic2ascii_strictly(unsigned char *dest, const unsigned char *srce, size_t count);
-void ascii2ebcdic(void *dest, const void *srce, size_t count);
-
diff --git a/os/tpf/os.c b/os/tpf/os.c
deleted file mode 100644
index bcb6335..0000000
--- a/os/tpf/os.c
+++ /dev/null
@@ -1,178 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-/*
- * This file will include OS specific functions which are not inlineable.
- * Any inlineable functions should be defined in os-inline.c instead.
- */
-
-#include "httpd.h"
-#include "http_core.h"
-#include "os.h"
-#include "scoreboard.h"
-#include "http_log.h"
-
-static FILE *sock_fp;
-
-#ifndef __PIPE_
-int pipe(int fildes[2])
-{
-    errno = ENOSYS;
-    return(-1);
-}
-#endif
-  
-/* fork and exec functions are not defined on
-   TPF due to the implementation of tpf_fork() */
- 
-pid_t fork(void)
-{
-    errno = ENOSYS;
-    return(-1);
-}
-
-int execl(const char *path, const char *arg0, ...)
-{
-    errno = ENOSYS;
-    return(-1);
-}
-
-int execle(const char *path, const char *arg0, ...)
-{
-    errno = ENOSYS;
-    return(-1);
-}
-
-int execve(const char *path, char *const argv[], char *const envp[])
-{
-    errno = ENOSYS;
-    return(-1);
-}
-
-int execvp(const char *file, char *const argv[])
-{
-    errno = ENOSYS;
-    return(-1);
-}
-
-
-pid_t os_fork(server_rec *s, int slot)
-{
-    struct tpf_fork_input fork_input;
-    APACHE_TPF_INPUT input_parms;
-    int count;
-    listen_rec *lr;
-
-    fflush(stdin);
-    if (dup2(fileno(sock_fp), STDIN_FILENO) == -1)
-        ap_log_error(APLOG_MARK, APLOG_CRIT, errno, s,
-        "unable to replace stdin with sock device driver");
-    fflush(stdout);
-    if (dup2(fileno(sock_fp), STDOUT_FILENO) == -1)
-        ap_log_error(APLOG_MARK, APLOG_CRIT, errno, s,
-        "unable to replace stdout with sock device driver");
-    input_parms.generation = ap_my_generation;
-#ifdef SCOREBOARD_FILE
-    input_parms.scoreboard_fd = scoreboard_fd;
-#else /* must be USE_TPF_SCOREBOARD or USE_SHMGET_SCOREBOARD */
-    input_parms.scoreboard_heap = ap_scoreboard_image;
-#endif
-
-    lr = ap_listeners;
-    count = 0;
-    do {
-        input_parms.listeners[count] = lr->fd;
-        lr = lr->next;
-        count++;
-    } while(lr != ap_listeners);
-
-    input_parms.slot = slot;
-    input_parms.restart_time = ap_restart_time;
-    fork_input.ebw_data = &input_parms;
-    fork_input.program = ap_server_argv0;
-    fork_input.prog_type = TPF_FORK_NAME;
-    fork_input.istream = TPF_FORK_IS_BALANCE;
-    fork_input.ebw_data_length = sizeof(input_parms);
-    fork_input.parm_data = "-x";
-    return tpf_fork(&fork_input);
-}
-
-int os_check_server(char *server) {
-#ifndef USE_TPF_DAEMON
-    int rv;
-    int *current_acn;
-    if((rv = inetd_getServerStatus(server)) == INETD_SERVER_STATUS_INACTIVE)
-        return 1;
-    else {
-        current_acn = (int *)cinfc_fast(CINFC_CMMACNUM);
-        if(ecbp2()->ce2acn != *current_acn)
-            return 1;
-    }
-#endif
-    return 0;
-}
-
-AP_DECLARE(apr_status_t) ap_os_create_privileged_process(
-    const request_rec *r,
-    apr_proc_t *newproc, const char *progname,
-    const char * const *args,
-    const char * const *env,
-    apr_procattr_t *attr, apr_pool_t *p)
-{
-    return apr_proc_create(newproc, progname, args, env, attr, p);
-}
diff --git a/os/tpf/os.h b/os/tpf/os.h
deleted file mode 100644
index 688ea80..0000000
--- a/os/tpf/os.h
+++ /dev/null
@@ -1,129 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-#ifndef APACHE_OS_H
-#define APACHE_OS_H
-
-#define PLATFORM "TPF"
-
-#ifdef errno
-#undef errno
-#endif
-
-/*
- * This file in included in all Apache source code. It contains definitions
- * of facilities available on _this_ operating system (HAVE_* macros),
- * and prototypes of OS specific functions defined in os.c or os-inline.c
- */
-
-#include "apr.h"
-#include "ap_config.h"
-#include <strings.h>
-#ifndef __strings_h
-
-#define FD_SETSIZE    2048 
- 
-typedef long fd_mask;
-
-#define NBBY    8    /* number of bits in a byte */
-#define NFDBITS (sizeof(fd_mask) * NBBY)
-#define  howmany(x, y)  (((x)+((y)-1))/(y))
-
-typedef struct fd_set { 
-        fd_mask fds_bits [howmany(FD_SETSIZE, NFDBITS)];
-} fd_set; 
-
-#define FD_CLR(n, p)((p)->fds_bits[(n)/NFDBITS] &= ~(1 << ((n) % NFDBITS)))
-#define FD_ISSET(n, p)((p)->fds_bits[(n)/NFDBITS] & (1 <<((n) % NFDBITS)))
-#define  FD_ZERO(p)   memset((char *)(p), 0, sizeof(*(p)))
-#endif
-    
-#ifdef FD_SET
-#undef FD_SET
-#define FD_SET(n, p) (0)
-#endif
-
-#include <i$netd.h>
-struct apache_input {
-    INETD_SERVER_INPUT  inetd_server;
-    void                *scoreboard_heap;   /* scoreboard system heap address */
-    int                 scoreboard_fd;      /* scoreboard file descriptor */
-    int                 slot;               /* child number */
-    int                 generation;         /* server generation number */
-    int                 listeners[10];
-    time_t              restart_time;
-};
-
-typedef struct apache_input APACHE_TPF_INPUT;
-
-extern int tpf_child;
-
-struct server_rec;
-pid_t os_fork(struct server_rec *s, int slot);
-int os_check_server(char *server);
-
-extern char *ap_server_argv0;
-extern int scoreboard_fd;
-#include <signal.h>
-#ifndef SIGPIPE
-#define SIGPIPE 14
-#endif
-#ifdef NSIG
-#undef NSIG
-#endif
-#endif /*! APACHE_OS_H*/
diff --git a/os/tpf/samples/linkdll.jcl b/os/tpf/samples/linkdll.jcl
deleted file mode 100644
index 16524bf..0000000
--- a/os/tpf/samples/linkdll.jcl
+++ /dev/null
@@ -1,121 +0,0 @@
-//APACH JOB MSGLEVEL=(1,1),CLASS=A,MSGCLASS=A
-/*ROUTE PRINT XXXXXX.XXXXXX
-/*ROUTE PUNCH XXXXXX.XXXXXX
-/*NOTIFY XXXXXX.XXXXXX
-//CCLE JCLLIB ORDER=(SYS1.CBC.SCBCPRC,SYS1.CEE.SCEEPROC)
-//PRELINK EXEC EDCPL,COND.LKED=(0,NE),
-// PPARM='OMVS,DLLNAME(pppp)',
-// LREGSIZ='2048K',
-// LPARM='AMODE=31,RMODE=ANY,LIST,XREF'
-//PLKED.SYSLIB DD DISP=SHR,DSN=FSE0000.DEVP.STUB.OB
-//             DD DISP=SHR,DSN=FSE0000.DEVP.CLIB.OB
-//             DD DISP=SHR,DSN=ACP.CLIB.RLSE46.WEB
-//             DD DISP=SHR,DSN=ACP.STUB.RLSE46.WEB
-//             DD DISP=SHR,DSN=ACP.CLIB.RLSE40
-//             DD DISP=SHR,DSN=ACP.STUB.RLSE40
-//PLKED.SYSDEFSD DD DSN=APA0000.DEVP.IMPORTS.DSD(ppppvv),DISP=SHR
-//PLKED.DSD DD DSN=APA0000.DEVP.IMPORTS.DSD,DISP=SHR
-//PLKED.OBJLIB DD DISP=SHR,DSN=FSE0000.DEVP.TEST.OB
-//             DD DISP=SHR,DSN=ACP.OBJ.RLSE46.WEB
-//             DD DISP=SHR,DSN=ACP.OBJ.INTG98.NBS
-//             DD DISP=SHR,DSN=ACP.MAIN.SYST.OBBSS
-//             DD DISP=SHR,DSN=ACP.DF.MAIN.SYST.OBBSS
-//             DD DISP=SHR,DSN=ACP.OBJ.RLSE40.BSS
-//PLKED.OBJ1   DD PATH='/usr/local/apache/src/ap/ap_cpystrn.o'
-//PLKED.OBJ2   DD PATH='/usr/local/apache/src/ap/ap_execve.o'
-//PLKED.OBJ3   DD PATH='/usr/local/apache/src/ap/ap_signal.o'
-//PLKED.OBJ4   DD PATH='/usr/local/apache/src/ap/ap_slack.o'
-//PLKED.OBJ5   DD PATH='/usr/local/apache/src/ap/ap_snprintf.o'
-//PLKED.OBJ6   DD PATH='/usr/local/apache/src/ap/ap_strings.o'
-//PLKED.OBJ7   DD PATH='/usr/local/apache/src/os/tpf/ebcdic.o'
-//PLKED.OBJ8   DD PATH='/usr/local/apache/src/os/tpf/os.o'
-//PLKED.OBJ9   DD PATH='/usr/local/apache/src/os/tpf/os-inline.o'
-//PLKED.OBJ10  DD PATH='/usr/local/apache/src/regex/regcomp.o'
-//PLKED.OBJ11  DD PATH='/usr/local/apache/src/regex/regerror.o'
-//PLKED.OBJ12  DD PATH='/usr/local/apache/src/regex/regexec.o'
-//PLKED.OBJ13  DD PATH='/usr/local/apache/src/regex/regfree.o'
-//PLKED.OBJ14  DD PATH='/usr/local/apache/src/main/alloc.o'
-//PLKED.OBJ15  DD PATH='/usr/local/apache/src/main/buff.o'
-//PLKED.OBJ16  DD PATH='/usr/local/apache/src/main/fnmatch.o'
-//PLKED.OBJ17  DD PATH='/usr/local/apache/src/main/http_config.o'
-//PLKED.OBJ18  DD PATH='/usr/local/apache/src/main/http_core.o'
-//PLKED.OBJ19  DD PATH='/usr/local/apache/src/main/http_log.o'
-//PLKED.OBJ20  DD PATH='/usr/local/apache/src/main/http_main.o'
-//PLKED.OBJ21  DD PATH='/usr/local/apache/src/main/http_protocol.o'
-//PLKED.OBJ22  DD PATH='/usr/local/apache/src/main/http_request.o'
-//PLKED.OBJ23  DD PATH='/usr/local/apache/src/main/http_vhost.o'
-//PLKED.OBJ24  DD PATH='/usr/local/apache/src/main/md5c.o'
-//PLKED.OBJ25  DD PATH='/usr/local/apache/src/main/rfc1413.o'
-//PLKED.OBJ26  DD PATH='/usr/local/apache/src/main/util.o'
-//PLKED.OBJ27  DD PATH='/usr/local/apache/src/main/util_date.o'
-//PLKED.OBJ28  DD PATH='/usr/local/apache/src/main/util_md5.o'
-//PLKED.OBJ29  DD PATH='/usr/local/apache/src/main/util_script.o'
-//PLKED.OBJ30  DD PATH='/usr/local/apache/src/main/util_uri.o'
-//PLKED.OBJ31  DD PATH='/usr/local/apache/src/modules.o'
-//PLKED.OBJ32  DD PATH='/usr/local/apache/src/buildmark.o'
-//PLKED.OBJ33  DD PATH='/usr/local/apache/src/modules/standard/mod_auto\
-//             index.o'
-//PLKED.OBJ34  DD PATH='/usr/local/apache/src/modules/standard/mod_dir.\
-//             o'
-//PLKED.OBJ35  DD PATH='/usr/local/apache/src/modules/standard/mod_mime\
-//             .o'
-//PLKED.OBJ36  DD PATH='/usr/local/apache/src/modules/standard/mod_sete\
-//             nvif.o'
-//PLKED.OBJ37  DD PATH='/usr/local/apache/src/modules/standard/mod_alia\
-//             s.o'
-//PLKED.OBJ38  DD PATH='/usr/local/apache/src/modules/standard/mod_acce\
-//             ss.o'
-//PLKED.OBJ39  DD PATH='/usr/local/apache/src/modules/standard/mod_user\
-//             dir.o'
-//PLKED.OBJ40  DD PATH='/usr/local/apache/src/modules/standard/mod_spel\
-//             ing.o'
-//PLKED.OBJ41  DD PATH='/usr/local/apache/src/modules/standard/mod_nego\
-//             tiation.o'
-//PLKED.SYSIN DD *
- ORDER @@DLMHDR
- INCLUDE OBJLIB(CSTRTD40)
- INCLUDE OBJ1
- INCLUDE OBJ2
- INCLUDE OBJ3
- INCLUDE OBJ4
- INCLUDE OBJ5
- INCLUDE OBJ6
- INCLUDE OBJ7
- INCLUDE OBJ8
- INCLUDE OBJ9
- INCLUDE OBJ10
- INCLUDE OBJ11
- INCLUDE OBJ12
- INCLUDE OBJ13
- INCLUDE OBJ14
- INCLUDE OBJ15
- INCLUDE OBJ16
- INCLUDE OBJ17
- INCLUDE OBJ18
- INCLUDE OBJ19
- INCLUDE OBJ20
- INCLUDE OBJ21
- INCLUDE OBJ22
- INCLUDE OBJ23
- INCLUDE OBJ24
- INCLUDE OBJ25
- INCLUDE OBJ26
- INCLUDE OBJ27
- INCLUDE OBJ28
- INCLUDE OBJ29
- INCLUDE OBJ30
- INCLUDE OBJ31
- INCLUDE OBJ32
- INCLUDE OBJ33
- INCLUDE OBJ34
- INCLUDE OBJ35
- INCLUDE OBJ36
- INCLUDE OBJ37
- INCLUDE OBJ38
- INCLUDE OBJ39
- INCLUDE OBJ40
- INCLUDE OBJ41
-/*
-//*** WARNING *** NEVER change .LK to .OB in SYSLMOD!!!
-//LKED.SYSLMOD DD DISP=OLD,DSN=xxxxxx.xxxx(ppppvv)
-//
diff --git a/os/tpf/samples/loadset.jcl b/os/tpf/samples/loadset.jcl
deleted file mode 100644
index 405af82..0000000
--- a/os/tpf/samples/loadset.jcl
+++ /dev/null
@@ -1,58 +0,0 @@
-//OLDRWEB JOB MSGLEVEL=1,CLASS=A,MSGCLASS=S
-//JOBCAT DD DSN=ICFCAT.ESAWK2,DISP=SHR
-/*ROUTE PRINT xxxxxx.xxxxxxx
-/*ROUTE PUNCH xxxxxx.xxxxxxx
-//TLDR   EXEC  PGM=TPFLDRCA,REGION=8M,
-//             PARM='OLDR,SYS=ACP,CLMSIZE=8000000'
-//STEPLIB  DD  DSN=ACP.LINK.RLSE46.WEB,DISP=SHR
-//         DD  DSN=ACP.LINK.RLSE40.BSS,DISP=SHR
-//         DD  DSN=VIS0000.DEVP.TEST.LK,DISP=SHR
-//         DD  DSN=SYS1.CEE.SCEERUN,DISP=SHR
-//SALTB    DD  DSN=ACP.SALTBL.RLSE46.WEB,DISP=SHR
-//         DD  DSN=ACP.SALTBL.INTG46.WEB,DISP=SHR
-//OBJLIB   DD  DSN=FSE0000.DEVP.TEST.OB,DISP=SHR
-//         DD  DSN=APA0000.DEVP.TEST.OB,DISP=SHR
-//         DD  DSN=ACP.DRVE.TEST.OB,DISP=SHR
-//         DD  DSN=ACP.OBJ.RLSE46.WEB,DISP=SHR
-//         DD  DSN=ACP.OBJ.INTG36.DRV,DISP=SHR
-//         DD  DSN=ACP.OBJ.INTG46.WEB,DISP=SHR
-//         DD  DSN=ACP.OBJ.INTG40.BSS,DISP=SHR
-//LOADMOD  DD  DSN=FSE0000.DEVP.TEST.LK,DISP=SHR
-//         DD  DSN=APA0000.DEVP.TEST.LK,DISP=SHR
-//         DD  DSN=CWEISS.LINK,DISP=SHR
-//         DD  DSN=ACP.DRVE.TEST.LK,DISP=SHR
-//         DD  DSN=ACP.LINK.RLSE46.WEB,DISP=SHR
-//         DD  DSN=ACP.LINK.INTG98.NBS,DISP=SHR
-//         DD  DSN=ACP.LINK.INTG46.WEB,DISP=SHR
-//         DD  DSN=ACP.LINK.INTG36.DRV,DISP=SHR
-//         DD  DSN=ACP.LINK.INTG40.BSS,DISP=SHR
-//LOADSUM  DD  DSN=&&LOADSUM,DISP=(NEW,PASS),UNIT=SYSDA,
-//             LRECL=133,SPACE=(TRK,(10,10)),RECFM=FBA
-//CPRTEMP  DD  UNIT=SYSDA,
-//             DSN=&&CPRTEMP,SPACE=(TRK,(100,20)),
-//             DCB=(RECFM=FB,BLKSIZE=4095,LRECL=4095),
-//             DISP=(NEW,DELETE)
-//PROGTEMP DD  UNIT=SYSDA,
-//             DSN=&&PRTEMP,SPACE=(TRK,(100,20)),
-//             DCB=(RECFM=FB,BLKSIZE=4095,LRECL=4095),
-//             DISP=(NEW,DELETE)
-//OUTPUT   DD  DSN=&&VRDROUT,DISP=(NEW,PASS),UNIT=SYSDA,
-//             DCB=(RECFM=F,BLKSIZE=4095,LRECL=4095)
-//SYSUDUMP DD  DUMMY
-//SYSABEND DD  DUMMY
-//SYSOUT   DD  SYSOUT=A
-//SYSPRINT DD  SYSOUT=A
-//PRINTER  DD  SYSOUT=A
-//CEEDUMP  DD  SYSOUT=A
-//SYSIN    DD  *
-SYSID=BSS
-PATVERS=NONE
-SALVERS=40
-LOADER   LOADSET  lllllll
-LOADER   CALL  PROG ppppvv
-/*
-//TRANSMIT EXEC PGM=IKJEFT01,
-//  PARM='TRANSMIT xxxxxx.xxxxxx DDNAME(SYSTSIN) NOLOG NONOTIFY SEQ'
-//SYSTSIN  DD  UNIT=SYSDA,
-//             DSN=&&VRDROUT,DISP=(OLD,DELETE)
-//SYSTSPRT DD  DUMMY
diff --git a/os/unix/.cvsignore b/os/unix/.cvsignore
deleted file mode 100644
index bbc8ba0..0000000
--- a/os/unix/.cvsignore
+++ /dev/null
@@ -1,5 +0,0 @@
-Makefile
-.deps
-.libs
-*.lo
-*.la
diff --git a/os/unix/Makefile.in b/os/unix/Makefile.in
deleted file mode 100644
index eddb2c2..0000000
--- a/os/unix/Makefile.in
+++ /dev/null
@@ -1,5 +0,0 @@
-
-LTLIBRARY_NAME    = libos.la
-LTLIBRARY_SOURCES = unixd.c
-
-include $(top_srcdir)/build/ltlib.mk
diff --git a/os/unix/config.m4 b/os/unix/config.m4
deleted file mode 100644
index dacbf6b..0000000
--- a/os/unix/config.m4
+++ /dev/null
@@ -1,7 +0,0 @@
-if test "$OS" = "unix" ; then
-    APACHE_TYPE_RLIM_T
-
-    AC_CHECK_HEADERS(sys/time.h sys/resource.h sys/sem.h sys/ipc.h)
-
-    AC_CHECK_FUNCS(setsid killpg)
-fi
diff --git a/os/unix/os.h b/os/unix/os.h
deleted file mode 100644
index 122f499..0000000
--- a/os/unix/os.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-#ifndef APACHE_OS_H
-#define APACHE_OS_H
-
-#include "apr.h"
-#include "ap_config.h"
-
-#ifndef PLATFORM
-#define PLATFORM "Unix"
-#endif
-
-#endif	/* !APACHE_OS_H */
diff --git a/os/unix/unixd.c b/os/unix/unixd.c
deleted file mode 100644
index b0f927a..0000000
--- a/os/unix/unixd.c
+++ /dev/null
@@ -1,547 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-#include "ap_config.h"
-#define CORE_PRIVATE
-#include "httpd.h"
-#include "http_config.h"
-#include "http_main.h"
-#include "http_log.h"
-#include "unixd.h"
-#include "mpm_common.h"
-#include "os.h"
-#include "ap_mpm.h"
-#include "apr_thread_proc.h"
-#include "apr_strings.h"
-#include "apr_portable.h"
-#ifdef HAVE_PWD_H
-#include <pwd.h>
-#endif
-#ifdef HAVE_SYS_RESOURCE_H
-#include <sys/resource.h>
-#endif
-/* XXX */
-#include <sys/stat.h>
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#ifdef HAVE_GRP_H
-#include <grp.h>
-#endif
-#ifdef HAVE_STRINGS_H
-#include <strings.h>
-#endif
-#ifdef HAVE_SYS_SEM_H
-#include <sys/sem.h>
-#endif
-
-unixd_config_rec unixd_config;
-
-/* Set group privileges.
- *
- * Note that we use the username as set in the config files, rather than
- * the lookup of to uid --- the same uid may have multiple passwd entries,
- * with different sets of groups for each.
- */
-
-static int set_group_privs(void)
-{
-    if (!geteuid()) {
-	const char *name;
-
-	/* Get username if passed as a uid */
-
-	if (unixd_config.user_name[0] == '#') {
-	    struct passwd *ent;
-	    uid_t uid = atoi(&unixd_config.user_name[1]);
-
-	    if ((ent = getpwuid(uid)) == NULL) {
-		ap_log_error(APLOG_MARK, APLOG_ALERT, errno, NULL,
-			 "getpwuid: couldn't determine user name from uid %u, "
-			 "you probably need to modify the User directive",
-			 (unsigned)uid);
-		return -1;
-	    }
-
-	    name = ent->pw_name;
-	}
-	else
-	    name = unixd_config.user_name;
-
-#if !defined(OS2) && !defined(TPF)
-	/* OS/2 and TPF don't support groups. */
-
-	/*
-	 * Set the GID before initgroups(), since on some platforms
-	 * setgid() is known to zap the group list.
-	 */
-	if (setgid(unixd_config.group_id) == -1) {
-	    ap_log_error(APLOG_MARK, APLOG_ALERT, errno, NULL,
-			"setgid: unable to set group id to Group %u",
-			(unsigned)unixd_config.group_id);
-	    return -1;
-	}
-
-	/* Reset `groups' attributes. */
-
-	if (initgroups(name, unixd_config.group_id) == -1) {
-	    ap_log_error(APLOG_MARK, APLOG_ALERT, errno, NULL,
-			"initgroups: unable to set groups for User %s "
-			"and Group %u", name, (unsigned)unixd_config.group_id);
-	    return -1;
-	}
-#endif /* !defined(OS2) && !defined(TPF) */
-    }
-    return 0;
-}
-
-
-AP_DECLARE(int) unixd_setup_child(void)
-{
-    if (set_group_privs()) {
-	return -1;
-    }
-#ifdef MPE
-    /* Only try to switch if we're running as MANAGER.SYS */
-    if (geteuid() == 1 && unixd_config.user_id > 1) {
-	GETPRIVMODE();
-	if (setuid(unixd_config.user_id) == -1) {
-	    GETUSERMODE();
-	    ap_log_error(APLOG_MARK, APLOG_ALERT, errno, NULL,
-			"setuid: unable to change to uid: %ld",
-                        (long) unixd_config.user_id);
-	    exit(1);
-	}
-	GETUSERMODE();
-    }
-#else
-    /* Only try to switch if we're running as root */
-    if (!geteuid() && (
-#ifdef _OSD_POSIX
-	os_init_job_environment(server_conf, unixd_config.user_name, one_process) != 0 || 
-#endif
-	setuid(unixd_config.user_id) == -1)) {
-	ap_log_error(APLOG_MARK, APLOG_ALERT, errno, NULL,
-		    "setuid: unable to change to uid: %ld",
-                    (long) unixd_config.user_id);
-	return -1;
-    }
-#endif
-    return 0;
-}
-
-
-AP_DECLARE(const char *) unixd_set_user(cmd_parms *cmd, void *dummy, 
-                                        const char *arg)
-{
-    const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
-    if (err != NULL) {
-        return err;
-    }
-
-    unixd_config.user_name = arg;
-    unixd_config.user_id = ap_uname2id(arg);
-#if !defined (BIG_SECURITY_HOLE) && !defined (OS2)
-    if (unixd_config.user_id == 0) {
-	return "Error:\tApache has not been designed to serve pages while\n"
-		"\trunning as root.  There are known race conditions that\n"
-		"\twill allow any local user to read any file on the system.\n"
-		"\tIf you still desire to serve pages as root then\n"
-		"\tadd -DBIG_SECURITY_HOLE to the CFLAGS env variable\n"
-		"\tand then rebuild the server.\n"
-		"\tIt is strongly suggested that you instead modify the User\n"
-		"\tdirective in your httpd.conf file to list a non-root\n"
-		"\tuser.\n";
-    }
-#endif
-
-    return NULL;
-}
-
-AP_DECLARE(const char *) unixd_set_group(cmd_parms *cmd, void *dummy, 
-                                         const char *arg)
-{
-    const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
-    if (err != NULL) {
-        return err;
-    }
-
-    unixd_config.group_id = ap_gname2id(arg);
-
-    return NULL;
-}
-
-AP_DECLARE(void) unixd_pre_config(apr_pool_t *ptemp)
-{
-    apr_finfo_t wrapper;
-
-    unixd_config.user_name = DEFAULT_USER;
-    unixd_config.user_id = ap_uname2id(DEFAULT_USER);
-    unixd_config.group_id = ap_gname2id(DEFAULT_GROUP);
-
-    /* Check for suexec */
-    unixd_config.suexec_enabled = 0;
-    if ((apr_stat(&wrapper, SUEXEC_BIN, 
-                  APR_FINFO_NORM, ptemp)) != APR_SUCCESS) {
-        return;
-    }
-
-    /* XXX - apr_stat is incapable of checking suid bits (grumble) */
-    /* if ((wrapper.filetype & S_ISUID) && wrapper.user == 0) { */
-        unixd_config.suexec_enabled = 1;
-    /* } */
-}
-
-
-AP_DECLARE(void) unixd_set_rlimit(cmd_parms *cmd, struct rlimit **plimit, 
-                           const char *arg, const char * arg2, int type)
-{
-#if (defined(RLIMIT_CPU) || defined(RLIMIT_DATA) || defined(RLIMIT_VMEM) || defined(RLIMIT_NPROC) || defined(RLIMIT_AS)) && APR_HAVE_STRUCT_RLIMIT && APR_HAVE_GETRLIMIT
-    char *str;
-    struct rlimit *limit;
-    /* If your platform doesn't define rlim_t then typedef it in ap_config.h */
-    rlim_t cur = 0;
-    rlim_t max = 0;
-
-    *plimit = (struct rlimit *)apr_pcalloc(cmd->pool, sizeof(**plimit));
-    limit = *plimit;
-    if ((getrlimit(type, limit)) != 0)  {
-        *plimit = NULL;
-        ap_log_error(APLOG_MARK, APLOG_ERR, errno, cmd->server,
-                     "%s: getrlimit failed", cmd->cmd->name);
-        return;
-    }
-
-    if ((str = ap_getword_conf(cmd->pool, &arg))) {
-        if (!strcasecmp(str, "max")) {
-            cur = limit->rlim_max;
-        }
-        else {
-            cur = atol(str);
-        }
-    }
-    else {
-        ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, cmd->server,
-                     "Invalid parameters for %s", cmd->cmd->name);
-        return;
-    }
-
-    if (arg2 && (str = ap_getword_conf(cmd->pool, &arg2))) {
-        max = atol(str);
-    }
-
-    /* if we aren't running as root, cannot increase max */
-    if (geteuid()) {
-        limit->rlim_cur = cur;
-        if (max) {
-            ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, cmd->server,
-                         "Must be uid 0 to raise maximum %s", cmd->cmd->name);
-        }
-    }
-    else {
-        if (cur) {
-            limit->rlim_cur = cur;
-        }
-        if (max) {
-            limit->rlim_max = max;
-        }
-    }
-#else
-
-    ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, cmd->server,
-                 "Platform does not support rlimit for %s", cmd->cmd->name);
-#endif
-}
-
-APR_HOOK_STRUCT(
-               APR_HOOK_LINK(get_suexec_identity)
-)
-
-AP_IMPLEMENT_HOOK_RUN_FIRST(ap_unix_identity_t *, get_suexec_identity,
-                         (const request_rec *r), (r), NULL)
-
-static apr_status_t ap_unix_create_privileged_process(
-                              apr_proc_t *newproc, const char *progname,
-                              const char * const *args,
-                              const char * const *env,
-                              apr_procattr_t *attr, ap_unix_identity_t *ugid,
-                              apr_pool_t *p)
-{
-    int i = 0;
-    const char **newargs;
-    char *newprogname;
-    char *execuser, *execgroup;
-
-    if (!unixd_config.suexec_enabled) {
-        return apr_proc_create(newproc, progname, args, env, attr, p);
-    }
-
-    execuser = apr_psprintf(p, "%ld", (long) ugid->uid);
-    execgroup = apr_psprintf(p, "%ld", (long) ugid->gid);
-
-    if (!execuser || !execgroup) {
-        return APR_ENOMEM;
-    }
-
-    i = 0;
-    if (args) {
-        while (args[i]) {
-            i++;
-	    }
-    }
-    /* allocate space for 4 new args, the input args, and a null terminator */
-    newargs = apr_palloc(p, sizeof(char *) * (i + 5));
-    newprogname = SUEXEC_BIN;
-    newargs[0] = SUEXEC_BIN;
-    newargs[1] = execuser;
-    newargs[2] = execgroup;
-    newargs[3] = apr_pstrdup(p, progname);
-
-    i = 0;
-    do {
-        newargs[i + 4] = args[i];
-    } while (args[i++]);
-
-    return apr_proc_create(newproc, newprogname, newargs, env, attr, p);
-}
-
-AP_DECLARE(apr_status_t) ap_os_create_privileged_process(
-    const request_rec *r,
-    apr_proc_t *newproc, const char *progname,
-    const char * const *args,
-    const char * const *env,
-    apr_procattr_t *attr, apr_pool_t *p)
-{
-    ap_unix_identity_t *ugid = ap_run_get_suexec_identity(r);
-
-    if (ugid == NULL) {
-        return apr_proc_create(newproc, progname, args, env, attr, p);
-    }
-
-    return ap_unix_create_privileged_process(newproc, progname, args, env,
-                                              attr, ugid, p);
-}
-
-AP_DECLARE(apr_status_t) unixd_set_proc_mutex_perms(apr_proc_mutex_t *pmutex)
-{
-/* MPM shouldn't call us unless we're actually using a SysV sem;
- * this is just to avoid compile issues on systems without that
- * feature
- */
-#if APR_HAS_SYSVSEM_SERIALIZE
-    apr_os_proc_mutex_t ospmutex;
-#if !APR_HAVE_UNION_SEMUN
-    union semun {
-        long val;
-        struct semid_ds *buf;
-        ushort *array;
-    };
-#endif
-    union semun ick;
-    struct semid_ds buf;
-
-    if (!geteuid()) {
-        apr_os_proc_mutex_get(&ospmutex, pmutex);
-        buf.sem_perm.uid = unixd_config.user_id;
-        buf.sem_perm.gid = unixd_config.group_id;
-        buf.sem_perm.mode = 0600;
-        ick.buf = &buf;
-        if (semctl(ospmutex.crossproc, 0, IPC_SET, ick) < 0) {
-            return errno;
-        }
-    }
-#endif
-    return APR_SUCCESS;
-}
-
-AP_DECLARE(apr_status_t) unixd_accept(void **accepted, ap_listen_rec *lr,
-                                        apr_pool_t *ptrans)
-{
-    apr_socket_t *csd;
-    apr_status_t status;
-    int sockdes;
-
-    *accepted = NULL;
-    status = apr_accept(&csd, lr->sd, ptrans);
-    if (status == APR_SUCCESS) { 
-        *accepted = csd;
-        apr_os_sock_get(&sockdes, csd);
-        if (sockdes >= FD_SETSIZE) {
-            ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_WARNING, 0, NULL,
-                         "new file descriptor %d is too large; you probably need "
-                         "to rebuild Apache with a larger FD_SETSIZE "
-                         "(currently %d)",
-                         sockdes, FD_SETSIZE);
-            apr_socket_close(csd);
-            return APR_EINTR;
-        } 
-#ifdef TPF
-        if (sockdes == 0) {                  /* 0 is invalid socket for TPF */
-            return APR_EINTR;
-        }
-#endif
-        return status;
-    }
-
-    if (APR_STATUS_IS_EINTR(status)) {
-        return status;
-    }
-    /* Our old behaviour here was to continue after accept()
-     * errors.  But this leads us into lots of troubles
-     * because most of the errors are quite fatal.  For
-     * example, EMFILE can be caused by slow descriptor
-     * leaks (say in a 3rd party module, or libc).  It's
-     * foolish for us to continue after an EMFILE.  We also
-     * seem to tickle kernel bugs on some platforms which
-     * lead to never-ending loops here.  So it seems best
-     * to just exit in most cases.
-     */
-    switch (status) {
-#if defined(HPUX11) && defined(ENOBUFS)
-        /* On HPUX 11.x, the 'ENOBUFS, No buffer space available'
-         * error occurs because the accept() cannot complete.
-         * You will not see ENOBUFS with 10.20 because the kernel
-         * hides any occurrence from being returned to user space.
-         * ENOBUFS with 11.x's TCP/IP stack is possible, and could
-         * occur intermittently. As a work-around, we are going to
-         * ignore ENOBUFS.
-         */
-        case ENOBUFS:
-#endif
-
-#ifdef EPROTO
-        /* EPROTO on certain older kernels really means
-         * ECONNABORTED, so we need to ignore it for them.
-         * See discussion in new-httpd archives nh.9701
-         * search for EPROTO.
-         *
-         * Also see nh.9603, search for EPROTO:
-         * There is potentially a bug in Solaris 2.x x<6,
-         * and other boxes that implement tcp sockets in
-         * userland (i.e. on top of STREAMS).  On these
-         * systems, EPROTO can actually result in a fatal
-         * loop.  See PR#981 for example.  It's hard to
-         * handle both uses of EPROTO.
-         */
-        case EPROTO:
-#endif
-#ifdef ECONNABORTED
-        case ECONNABORTED:
-#endif
-        /* Linux generates the rest of these, other tcp
-         * stacks (i.e. bsd) tend to hide them behind
-         * getsockopt() interfaces.  They occur when
-         * the net goes sour or the client disconnects
-         * after the three-way handshake has been done
-         * in the kernel but before userland has picked
-         * up the socket.
-         */
-#ifdef ECONNRESET
-        case ECONNRESET:
-#endif
-#ifdef ETIMEDOUT
-        case ETIMEDOUT:
-#endif
-#ifdef EHOSTUNREACH
-        case EHOSTUNREACH:
-#endif
-#ifdef ENETUNREACH
-        case ENETUNREACH:
-#endif
-            break;
-#ifdef ENETDOWN
-        case ENETDOWN:
-            /*
-             * When the network layer has been shut down, there
-             * is not much use in simply exiting: the parent
-             * would simply re-create us (and we'd fail again).
-             * Use the CHILDFATAL code to tear the server down.
-             * @@@ Martin's idea for possible improvement:
-             * A different approach would be to define
-             * a new APEXIT_NETDOWN exit code, the reception
-             * of which would make the parent shutdown all
-             * children, then idle-loop until it detected that
-             * the network is up again, and restart the children.
-             * Ben Hyde noted that temporary ENETDOWN situations
-             * occur in mobile IP.
-             */
-            ap_log_error(APLOG_MARK, APLOG_EMERG, status, ap_server_conf,
-                         "apr_accept: giving up.");
-            return APR_EGENERAL;
-#endif /*ENETDOWN*/
-
-#ifdef TPF
-        case EINACT:
-            ap_log_error(APLOG_MARK, APLOG_EMERG, status, ap_server_conf,
-                         "offload device inactive");
-            return APR_EGENERAL;
-            break;
-        default:
-            ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, ap_server_conf,
-                         "select/accept error (%d)", status);
-            return APR_EGENERAL;
-#else
-        default:
-            ap_log_error(APLOG_MARK, APLOG_ERR, status, ap_server_conf,
-                         "apr_accept: (client socket)");
-            return APR_EGENERAL;
-#endif
-    }
-    return status;
-}
-
diff --git a/os/unix/unixd.h b/os/unix/unixd.h
deleted file mode 100644
index ec77762..0000000
--- a/os/unix/unixd.h
+++ /dev/null
@@ -1,138 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-#ifndef UNIXD_H
-#define UNIXD_H
-
-#include "httpd.h"
-#include "http_config.h"
-#include "ap_listen.h"
-#ifdef HAVE_SYS_TIME_H
-#include <sys/time.h>
-#endif
-#ifdef HAVE_SYS_RESOURCE_H
-#include <sys/resource.h>
-#endif
-#include "apr_hooks.h"
-#include "apr_thread_proc.h"
-#include "apr_proc_mutex.h"
-
-#include <pwd.h>
-#include <grp.h>
-#ifdef APR_HAVE_SYS_TYPES_H
-#include <sys/types.h>
-#endif
-#ifdef HAVE_SYS_IPC_H
-#include <sys/ipc.h>
-#endif
-
-typedef struct {
-    uid_t uid;
-    gid_t gid;
-} ap_unix_identity_t;
-
-AP_DECLARE_HOOK(ap_unix_identity_t *, get_suexec_identity,(const request_rec *r))
-
-/* common stuff that unix MPMs will want */
-
-/* Default user name and group name. These may be specified as numbers by
- * placing a # before a number */
-
-#ifndef DEFAULT_USER
-#define DEFAULT_USER "#-1"
-#endif
-#ifndef DEFAULT_GROUP
-#define DEFAULT_GROUP "#-1"
-#endif
-
-typedef struct {
-    const char *user_name;
-    uid_t user_id;
-    gid_t group_id;
-    int suexec_enabled;
-} unixd_config_rec;
-AP_DECLARE_DATA extern unixd_config_rec unixd_config;
-
-AP_DECLARE(int) unixd_setup_child(void);
-AP_DECLARE(void) unixd_pre_config(apr_pool_t *ptemp);
-AP_DECLARE(const char *) unixd_set_user(cmd_parms *cmd, void *dummy, 
-                                        const char *arg);
-AP_DECLARE(const char *) unixd_set_group(cmd_parms *cmd, void *dummy, 
-                                         const char *arg);
-#if defined(RLIMIT_CPU) || defined(RLIMIT_DATA) || defined(RLIMIT_VMEM) || defined(RLIMIT_NPROC) || defined(RLIMIT_AS)
-AP_DECLARE(void) unixd_set_rlimit(cmd_parms *cmd, struct rlimit **plimit,
-                           const char *arg, const char * arg2, int type);
-#endif
-AP_DECLARE(apr_status_t) unixd_set_proc_mutex_perms(apr_proc_mutex_t *pmutex);
-AP_DECLARE(apr_status_t) unixd_accept(void **accepted, ap_listen_rec *lr, apr_pool_t *ptrans);
-
-#ifdef HAVE_KILLPG
-#define unixd_killpg(x, y)	(killpg ((x), (y)))
-#define ap_os_killpg(x, y)      (killpg ((x), (y)))
-#else /* HAVE_KILLPG */
-#define unixd_killpg(x, y)	(kill (-(x), (y)))
-#define ap_os_killpg(x, y)      (kill (-(x), (y)))
-#endif /* HAVE_KILLPG */
-
-#define UNIX_DAEMON_COMMANDS	\
-AP_INIT_TAKE1("User", unixd_set_user, NULL, RSRC_CONF, \
-  "Effective user id for this server"), \
-AP_INIT_TAKE1("Group", unixd_set_group, NULL, RSRC_CONF, \
-  "Effective group id for this server")
-
-#endif
diff --git a/os/win32/BaseAddr.ref b/os/win32/BaseAddr.ref
deleted file mode 100644
index bd79385..0000000
--- a/os/win32/BaseAddr.ref
+++ /dev/null
@@ -1,50 +0,0 @@
-; os/win32/BaseAddr.ref contains the central repository
-;                       of all module base addresses
-;                       to avoid relocation
-
-; WARNING: Update this file by reviewing the image size
-;          of the debug-generated dll files; release images
-;          should fit in the larger debug-sized space.
-
-; module name      base-address      max-size
-
-libhttpd             0x6FF00000    0x000A0000
-mod_auth_anon        0x6FEF0000    0x00010000
-mod_auth_digest      0x6FED0000    0x00020000
-mod_cern_meta        0x6FEC0000    0x00010000
-mod_expires          0x6FEB0000    0x00010000
-mod_headers          0x6FEA0000    0x00010000
-mod_info             0x6FE90000    0x00010000
-mod_rewrite          0x6FE70000    0x00020000
-mod_speling          0x6FE60000    0x00010000
-mod_status           0x6FE50000    0x00010000
-mod_usertrack        0x6FE40000    0x00010000
-mod_file_cache       0x6FE20000    0x00020000
-mod_auth_dbm         0x6FE10000    0x00010000
-mod_unique_id        0x6FE00000    0x00010000
-mod_vhost_alias      0x6FDF0000    0x00010000
-mod_mime_magic       0x6FDE0000    0x00010000
-mod_dav              0x6FDC0000    0x00020000
-mod_dav_fs           0x6FDB0000    0x00010000
-mod_proxy            0x6FDA0000    0x00010000
-mod_proxy_connect    0x6FD90000    0x00010000
-mod_proxy_ftp        0x6FD80000    0x00010000
-mod_proxy_http       0x6FD70000    0x00010000
-mod_ssl              0x6FD00000    0x00070000
-mod_access           0x6FCF0000    0x00010000
-mod_actions          0x6FCE0000    0x00010000
-mod_alias            0x6FCD0000    0x00010000
-mod_asis             0x6FCC0000    0x00010000
-mod_auth             0x6FCB0000    0x00010000
-mod_autoindex        0x6FCA0000    0x00010000
-mod_cgi              0x6FC90000    0x00010000
-mod_dir              0x6FC80000    0x00010000
-mod_env              0x6FC70000    0x00010000
-mod_imap             0x6FC60000    0x00010000
-mod_include          0x6FC50000    0x00010000
-mod_isapi            0x6FC40000    0x00010000
-mod_log_config       0x6FC30000    0x00010000
-mod_mime             0x6FC20000    0x00010000
-mod_negotiation      0x6FC10000    0x00010000
-mod_setenvif         0x6FC00000    0x00010000
-mod_userdir          0x6FBF0000    0x00010000
diff --git a/os/win32/modules.c b/os/win32/modules.c
deleted file mode 100644
index 6c966ed..0000000
--- a/os/win32/modules.c
+++ /dev/null
@@ -1,32 +0,0 @@
-/* modules.c --- major modules compiled into Apache for Win32.
- * Only insert an entry for a module if it must be compiled into
- * the core server
- */
-
-#define CORE_PRIVATE
-#include "httpd.h"
-#include "http_config.h"
-
-extern module core_module;
-extern module win32_module;
-extern module mpm_winnt_module;
-extern module http_module;
-extern module so_module;
-
-AP_DECLARE_DATA module *ap_prelinked_modules[] = {
-  &core_module,
-  &win32_module,
-  &mpm_winnt_module,
-  &http_module,
-  &so_module,
-  NULL
-};
-
-AP_DECLARE_DATA module *ap_preloaded_modules[] = {
-  &core_module,
-  &win32_module,
-  &mpm_winnt_module,
-  &http_module,
-  &so_module,
-  NULL
-};
diff --git a/os/win32/os.h b/os/win32/os.h
deleted file mode 100644
index dfb4459..0000000
--- a/os/win32/os.h
+++ /dev/null
@@ -1,90 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-#ifndef APACHE_OS_H
-#define APACHE_OS_H
-/* 
- * Compile the server including all the Windows NT 4.0 header files by 
- * default. We still want the server to run on Win95/98 so use 
- * runtime checks before calling NT specific functions to verify we are 
- * really running on an NT system.
- *
- * Delegate windows include to the apr.h header, if USER or GDI declarations
- * are required (for a window rather than console application), include
- * windows.h prior to any other Apache header files.
- */
-
-#ifndef _WIN32
-#define _WIN32
-#endif
-
-#include <io.h>
-#include <fcntl.h>
-
-#define PLATFORM "Win32"
-
-/* going away shortly... */
-#define HAVE_DRIVE_LETTERS
-#define HAVE_UNC_PATHS
-#define CASE_BLIND_FILESYSTEM
-
-#define APACHE_MPM_DIR  "server/mpm/winnt" /* generated on unix */
-
-#include <stddef.h>
-
-#endif   /* ! APACHE_OS_H */
diff --git a/os/win32/util_win32.c b/os/win32/util_win32.c
deleted file mode 100644
index dc15980..0000000
--- a/os/win32/util_win32.c
+++ /dev/null
@@ -1,76 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-#include "httpd.h"
-#include "http_log.h"
-#include "apr_strings.h"
-
-#include <stdarg.h>
-#include <time.h>
-#include <stdlib.h>
-
-
-AP_DECLARE(apr_status_t) ap_os_create_privileged_process(
-    const request_rec *r,
-    apr_proc_t *newproc, const char *progname,
-    const char * const *args,
-    const char * const *env,
-    apr_procattr_t *attr, apr_pool_t *p)
-{
-    return apr_proc_create(newproc, progname, args, env, attr, p);
-}
diff --git a/server/.cvsignore b/server/.cvsignore
deleted file mode 100644
index 8597109..0000000
--- a/server/.cvsignore
+++ /dev/null
@@ -1,16 +0,0 @@
-Makefile
-.deps
-.libs
-*.lo
-*.la
-test_char.h
-gen_test_char
-exports.c
-export_vars.h
-Debug
-Release
-ApacheCoreOS2.def
-httpd.exp
-*.plg
-*.dep
-*.mak
diff --git a/server/.indent.pro b/server/.indent.pro
deleted file mode 100644
index a9fbe9f..0000000
--- a/server/.indent.pro
+++ /dev/null
@@ -1,54 +0,0 @@
--i4 -npsl -di0 -br -nce -d0 -cli0 -npcs -nfc1
--TBUFF
--TFILE
--TTRANS
--TUINT4
--T_trans
--Tallow_options_t
--Tapache_sfio
--Tarray_header
--Tbool_int
--Tbuf_area
--Tbuff_struct
--Tbuffy
--Tcmd_how
--Tcmd_parms
--Tcommand_rec
--Tcommand_struct
--Tconn_rec
--Tcore_dir_config
--Tcore_server_config
--Tdir_maker_func
--Tevent
--Tglobals_s
--Thandler_func
--Thandler_rec
--Tjoblist_s
--Tlisten_rec
--Tmerger_func
--Tmode_t
--Tmodule
--Tmodule_struct
--Tmutex
--Tn_long
--Tother_child_rec
--Toverrides_t
--Tparent_score
--Tpid_t
--Tpiped_log
--Tpool
--Trequest_rec
--Trequire_line
--Trlim_t
--Tscoreboard
--Tsemaphore
--Tserver_addr_rec
--Tserver_rec
--Tserver_rec_chain
--Tshort_score
--Ttable
--Ttable_entry
--Tthread
--Tu_wide_int
--Tvtime_t
--Twide_int
diff --git a/server/Makefile.in b/server/Makefile.in
deleted file mode 100644
index 47f028f..0000000
--- a/server/Makefile.in
+++ /dev/null
@@ -1,70 +0,0 @@
-
-CLEAN_TARGETS = gen_test_char test_char.h gen_uri_delims uri_delims.h \
-	ApacheCoreOS2.def
-DISTCLEAN_TARGETS = httpd.exp
-EXTRACLEAN_TARGETS = exports.c export_vars.h
-
-SUBDIRS = mpm
-
-LTLIBRARY_NAME    = libmain.la
-LTLIBRARY_SOURCES = \
-    test_char.h \
-	config.c log.c main.c vhost.c util.c \
-	util_script.c util_md5.c util_cfgtree.c util_ebcdic.c util_time.c \
-	rfc1413.c connection.c listen.c \
-	mpm_common.c util_charset.c util_debug.c util_xml.c \
-	util_filter.c exports.c buildmark.c scoreboard.c \
-	error_bucket.c protocol.c core.c request.c
-
-TARGETS = delete-exports $(LTLIBRARY_NAME) $(CORE_IMPLIB_FILE) export_vars.h httpd.exp
-
-include $(top_builddir)/build/rules.mk
-include $(top_srcdir)/build/library.mk
-
-gen_test_char_OBJECTS = gen_test_char.lo util_debug.lo
-gen_test_char: $(gen_test_char_OBJECTS)
-	$(LINK) $(EXTRA_LDFLAGS) $(gen_test_char_OBJECTS) $(EXTRA_LIBS)
-
-test_char.h: gen_test_char
-	./gen_test_char > test_char.h
-
-util.lo: test_char.h
-
-EXPORT_FILES = $(top_srcdir)/include/*.h \
-       $(top_srcdir)/os/$(OS_DIR)/*.h \
-       $(top_srcdir)/srclib/apr/include/*.h \
-       $(top_srcdir)/srclib/apr-util/include/*.h \
-       $(top_srcdir)/modules/http/*.h
-
-delete-exports:
-	@if test -f exports.c; then \
-		    headers="`find $(EXPORT_FILES) -newer exports.c`" ; \
-		    if test -n "$$headers"; then \
-		        echo Found newer headers. Will rebuild exports.c. ; \
-		        echo rm -f exports.c ; \
-		        rm -f exports.c ; \
-		    fi \
-	fi
-
-exports.c:
-	$(AWK) -f $(top_srcdir)/build/make_exports.awk $(EXPORT_FILES) > $@
-
-export_vars.h:
-	$(AWK) -f $(top_srcdir)/build/make_var_export.awk $(EXPORT_FILES) > $@
-
-# wtf does this have to be explicit????
-exports.lo: exports.c
-
-# Rule to make def file for OS/2 core dll
-ApacheCoreOS2.def: exports.c export_vars.h $(top_srcdir)/os/$(OS_DIR)/core_header.def
-	cat $(top_srcdir)/os/$(OS_DIR)/core_header.def > $@
-	$(CPP) $< $(ALL_CPPFLAGS) $(ALL_INCLUDES) | grep "ap_hack_" | sed -e 's/^.*[)]\(.*\);$$/  "\1"/' >> $@
-	$(CPP) $(ALL_CPPFLAGS) $(ALL_INCLUDES) export_vars.h | grep "^[a-z]" | sed -e 's/^\(.*\)$$/  "\1"/' >> $@
-
-# Rule to make exp file for AIX DSOs
-httpd.exp: exports.c export_vars.h
-	@echo "#! ." > $@
-	@echo "* This file was AUTOGENERATED at build time." >> $@
-	@echo "* Please do not edit by hand." >> $@
-	$(CPP) $(ALL_CPPFLAGS) $(ALL_INCLUDES) exports.c | grep "ap_hack_" | grep -v apr_ | sed -e 's/^.*[)]\(.*\);$$/\1/' >> $@
-	$(CPP) $(ALL_CPPFLAGS) $(ALL_INCLUDES) export_vars.h | grep -v apr_ | sed -e 's/^\#[^!]*//' | sed -e '/^$$/d' >> $@
diff --git a/server/NWGNUmakefile b/server/NWGNUmakefile
deleted file mode 100644
index 7dabc8e..0000000
--- a/server/NWGNUmakefile
+++ /dev/null
@@ -1,250 +0,0 @@
-#
-# Declare the sub-directories to be built here
-#
-
-SUBDIRS = \
-		$(EOLIST) 
-
-#
-# Get the 'head' of the build environment.  This includes default targets and
-# paths to tools
-#
-
-include $(AP_WORK)\build\NWGNUhead.inc
-
-#
-# build this level's files
-
-#
-# These directories will be at the beginning of the include list, followed by
-# INCDIRS
-#
-XINCDIRS	+= \
-			$(NWOS) \
-			$(APR)/include \
-			$(AP_WORK)/include \
-			$(APRUTIL)/include \
-			$(EOLIST)
-
-#
-# These flags will come after CFLAGS
-#
-XCFLAGS		+= \
-			$(EOLIST)
-
-#
-# These defines will come after DEFINES
-#
-XDEFINES	+= \
-			$(EOLIST)
-
-#
-# These flags will be added to the link.opt file
-#
-XLFLAGS		+= \
-			$(EOLIST)
-
-#
-# These values will be appended to the correct variables based on the value of
-# RELEASE
-#
-ifeq "$(RELEASE)" "debug"
-XINCDIRS	+= \
-			$(EOLIST)
-
-XCFLAGS		+= \
-			$(EOLIST)
-
-XDEFINES	+= \
-			$(EOLIST)
-
-XLFLAGS		+= \
-			$(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "noopt"
-XINCDIRS	+= \
-			$(EOLIST)
-
-XCFLAGS		+= \
-			$(EOLIST)
-
-XDEFINES	+= \
-			$(EOLIST)
-
-XLFLAGS		+= \
-			$(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "release"
-XINCDIRS	+= \
-			$(EOLIST)
-
-XCFLAGS		+= \
-			$(EOLIST)
-
-XDEFINES	+= \
-			$(EOLIST)
-
-XLFLAGS		+= \
-			$(EOLIST)
-endif
-
-#
-# These are used by the link target if an NLM is being generated
-# This is used by the link 'name' directive to name the nlm.  If left blank
-# TARGET_nlm (see below) will be used.
-#
-NLM_NAME		= genchars
-
-#
-# This is used by the link '-desc ' directive. 
-# If left blank, NLM_NAME will be used.
-#
-NLM_DESCRIPTION	= Generate Test Characters
-
-#
-# This is used by the '-threadname' directive.  If left blank,
-# NLM_NAME Thread will be used.
-#
-NLM_THREAD_NAME	= genchars
-
-#
-# If this is specified, it will override VERSION value in 
-# $(AP_WORK)\NWGNUNetWare.rul
-#
-NLM_VERSION		= 1,0,0
-
-#
-# If this is specified, it will override the default of 64K
-#
-NLM_STACK_SIZE	= 8192
-
-#
-# If this is specified it will be used by the link '-entry' directive
-#
-NLM_ENTRY_SYM	=_LibCPrelude 
-
-#
-# If this is specified it will be used by the link '-exit' directive
-#
-NLM_EXIT_SYM	=_LibCPostlude 
-
-#
-# If this is specified it will be used by the link '-check' directive
-#
-NLM_CHECK_SYM	=
-
-#
-# If this is specified it will be used by the link '-flags' directive
-#
-NLM_FLAGS		= PSEUDOPREEMPTION
- 
-#
-# If this is specified it will be linked in with the XDCData option in the def 
-# file instead of the default of $(NWOS)/apache.xdc.  XDCData can be disabled
-# by setting APACHE_UNIPROC in the environment
-#
-XDCDATA         = 
-
-#
-# Declare all target files (you must add your files here)
-#
-
-#
-# If there is an NLM target, put it here
-#
-TARGET_nlm = \
-$(OBJDIR)/genchars.nlm \
-	$(EOLIST)
-
-#
-# If there is an LIB target, put it here
-#
-TARGET_lib = \
-	$(EOLIST)
-
-#
-# These are the OBJ files needed to create the NLM target above.
-# Paths must all use the '/' character
-#
-FILES_nlm_objs = \
-	$(OBJDIR)/gen_test_char.o \
-	$(EOLIST)
-
-#
-# These are the LIB files needed to create the NLM target above.
-# These will be added as a library command in the link.opt file.
-#
-FILES_nlm_libs = \
-	libcpre.o \
-	$(EOLIST)
-
-#
-# These are the modules that the above NLM target depends on to load.
-# These will be added as a module command in the link.opt file.
-#
-FILES_nlm_modules = \
-	Libc \
-	$(EOLIST)
-
-#
-# If the nlm has a msg file, put it's path here
-#
-FILE_nlm_msg =
- 
-#
-# If the nlm has a hlp file put it's path here
-#
-FILE_nlm_hlp =
-
-#
-# If this is specified, it will override $(NWOS)\copyright.txt.
-#
-FILE_nlm_copyright =
-
-#
-# Any additional imports go here
-#
-FILES_nlm_Ximports = \
-	@libc.imp \
-	$(EOLIST)
- 
-#   
-# Any symbols exported to here
-#
-FILES_nlm_exports = \
-	$(EOLIST)
-	
-#   
-# These are the OBJ files needed to create the LIB target above.
-# Paths must all use the '/' character
-#
-FILES_lib_objs = \
-	$(EOLIST)
-
-#
-# implement targets and dependancies (leave this section alone)
-#
-
-libs :: $(OBJDIR) $(TARGET_lib)
-
-nlms :: libs $(TARGET_nlm)
-
-#
-# Updated this target to create necessary directories and copy files to the 
-# correct place.
-#
-install :: nlms FORCE
-
-#
-# Any specialized rules here
-#
-
-#
-# Include the 'tail' makefile that has targets that depend on variables defined
-# in this makefile
-#
-
-include $(AP_WORK)\build\NWGNUtail.inc
-                          
diff --git a/server/buildmark.c b/server/buildmark.c
deleted file mode 100644
index 92db49f..0000000
--- a/server/buildmark.c
+++ /dev/null
@@ -1,67 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-#include "ap_config.h"
-#include "httpd.h"
-
-#if defined(__DATE__) && defined(__TIME__)
-static const char server_built[] = __DATE__ " " __TIME__;
-#else
-static const char server_built[] = "unknown";
-#endif
-
-AP_DECLARE(const char *) ap_get_server_built()
-{
-    return server_built;
-}
diff --git a/server/config.c b/server/config.c
deleted file mode 100644
index 037f88b..0000000
--- a/server/config.c
+++ /dev/null
@@ -1,1926 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-/*
- * http_config.c: once was auxillary functions for reading httpd's config
- * file and converting filenames into a namespace
- *
- * Rob McCool
- *
- * Wall-to-wall rewrite for Apache... commands which are part of the
- * server core can now be found next door in "http_core.c".  Now contains
- * general command loop, and functions which do bookkeeping for the new
- * Apache config stuff (modules and configuration vectors).
- *
- * rst
- *
- */
-
-#include "apr.h"
-#include "apr_strings.h"
-#include "apr_portable.h"
-#include "apr_file_io.h"
-
-#define APR_WANT_STDIO
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-#define CORE_PRIVATE
-
-#include "ap_config.h"
-#include "httpd.h"
-#include "http_config.h"
-#include "http_protocol.h"
-#include "http_core.h"
-#include "http_log.h"		/* for errors in parse_htaccess */
-#include "http_request.h"	/* for default_handler (see invoke_handler) */
-#include "http_main.h"
-#include "http_vhost.h"
-#include "util_cfgtree.h"
-#include "mpm.h"
-
-
-AP_DECLARE_DATA const char *ap_server_argv0 = NULL;
-
-AP_DECLARE_DATA const char *ap_server_root = NULL;
-
-AP_DECLARE_DATA apr_array_header_t *ap_server_pre_read_config = NULL;
-AP_DECLARE_DATA apr_array_header_t *ap_server_post_read_config = NULL;
-AP_DECLARE_DATA apr_array_header_t *ap_server_config_defines = NULL;
-
-AP_DECLARE_DATA ap_directive_t *ap_conftree = NULL;
-
-APR_HOOK_STRUCT(
-           APR_HOOK_LINK(header_parser)
-           APR_HOOK_LINK(pre_config)
-           APR_HOOK_LINK(post_config)
-           APR_HOOK_LINK(open_logs)
-           APR_HOOK_LINK(child_init)
-           APR_HOOK_LINK(handler)
-           APR_HOOK_LINK(quick_handler)
-           APR_HOOK_LINK(optional_fn_retrieve)
-)
-
-AP_IMPLEMENT_HOOK_RUN_ALL(int, header_parser,
-                          (request_rec *r), (r), OK, DECLINED)
-
-AP_IMPLEMENT_HOOK_RUN_ALL(int, pre_config,
-                          (apr_pool_t *pconf, apr_pool_t *plog,
-                           apr_pool_t *ptemp),
-                          (pconf, plog, ptemp), OK, DECLINED)
-
-AP_IMPLEMENT_HOOK_RUN_ALL(int, post_config,
-                          (apr_pool_t *pconf, apr_pool_t *plog,
-                           apr_pool_t *ptemp, server_rec *s),
-                          (pconf, plog, ptemp, s), OK, DECLINED)
-
-/* During the course of debugging I expanded this macro out, so
- * rather than remove all the useful information there is in the
- * following lines, I'm going to leave it here in case anyone
- * else finds it useful.
- *
- * Ben has looked at it and thinks it correct :)
- *
-AP_DECLARE(int) ap_hook_post_config(ap_HOOK_post_config_t *pf,
-                                    const char * const *aszPre,
-                                    const char * const *aszSucc,
-                                    int nOrder)
-{
-    ap_LINK_post_config_t *pHook;
-
-    if (!_hooks.link_post_config) {
-        _hooks.link_post_config = apr_array_make(apr_global_hook_pool, 1,
-                                                 sizeof(ap_LINK_post_config_t));
-        apr_hook_sort_register("post_config", &_hooks.link_post_config);
-    }
-
-    pHook = apr_array_push(_hooks.link_post_config);
-    pHook->pFunc = pf;
-    pHook->aszPredecessors = aszPre;
-    pHook->aszSuccessors = aszSucc;
-    pHook->nOrder = nOrder;
-    pHook->szName = apr_current_hooking_module;
-
-    if (apr_debug_module_hooks)
-        apr_show_hook("post_config", aszPre, aszSucc);
-}
-
-AP_DECLARE(apr_array_header_t *) ap_hook_get_post_config(void) {
-    return _hooks.link_post_config;
-}
-
-AP_DECLARE(int) ap_run_post_config(apr_pool_t *pconf,
-                                   apr_pool_t *plog,
-                                   apr_pool_t *ptemp,
-                                   server_rec *s)
-{
-    ap_LINK_post_config_t *pHook;
-    int n;
-
-    if(!_hooks.link_post_config)
-        return;
-
-    pHook = (ap_LINK_post_config_t *)_hooks.link_post_config->elts;
-    for (n = 0; n < _hooks.link_post_config->nelts; ++n)
-        pHook[n].pFunc (pconf, plog, ptemp, s);
-}
- */
-
-AP_IMPLEMENT_HOOK_RUN_ALL(int, open_logs,
-                          (apr_pool_t *pconf, apr_pool_t *plog,
-                           apr_pool_t *ptemp, server_rec *s),
-                          (pconf, plog, ptemp, s), OK, DECLINED)
-
-AP_IMPLEMENT_HOOK_VOID(child_init,
-                       (apr_pool_t *pchild, server_rec *s),
-                       (pchild, s))
-
-AP_IMPLEMENT_HOOK_RUN_FIRST(int, handler, (request_rec *r),
-                            (r), DECLINED)
-
-AP_IMPLEMENT_HOOK_RUN_FIRST(int, quick_handler, (request_rec *r),
-                            (r), DECLINED)
-
-AP_IMPLEMENT_HOOK_VOID(optional_fn_retrieve, (void), ())
-
-/****************************************************************
- *
- * We begin with the functions which deal with the linked list
- * of modules which control just about all of the server operation.
- */
-
-/* total_modules is the number of modules that have been linked
- * into the server.
- */
-static int total_modules = 0;
-
-/* dynamic_modules is the number of modules that have been added
- * after the pre-loaded ones have been set up. It shouldn't be larger
- * than DYNAMIC_MODULE_LIMIT.
- */
-static int dynamic_modules = 0;
-
-AP_DECLARE_DATA module *ap_top_module = NULL;
-AP_DECLARE_DATA module **ap_loaded_modules=NULL;
-
-typedef int (*handler_func)(request_rec *);
-typedef void *(*dir_maker_func)(apr_pool_t *, char *);
-typedef void *(*merger_func)(apr_pool_t *, void *, void *);
-
-/* Dealing with config vectors.  These are associated with per-directory,
- * per-server, and per-request configuration, and have a void* pointer for
- * each modules.  The nature of the structure pointed to is private to the
- * module in question... the core doesn't (and can't) know.  However, there
- * are defined interfaces which allow it to create instances of its private
- * per-directory and per-server structures, and to merge the per-directory
- * structures of a directory and its subdirectory (producing a new one in
- * which the defaults applying to the base directory have been properly
- * overridden).
- */
-
-static ap_conf_vector_t *create_empty_config(apr_pool_t *p)
-{
-    void *conf_vector = apr_pcalloc(p, sizeof(void *) *
-                                    (total_modules + DYNAMIC_MODULE_LIMIT));
-    return conf_vector;
-}
-
-static ap_conf_vector_t *create_default_per_dir_config(apr_pool_t *p)
-{
-    void **conf_vector = apr_pcalloc(p, sizeof(void *) *
-                                     (total_modules + DYNAMIC_MODULE_LIMIT));
-    module *modp;
-
-    for (modp = ap_top_module; modp; modp = modp->next) {
-        dir_maker_func df = modp->create_dir_config;
-
-        if (df)
-            conf_vector[modp->module_index] = (*df)(p, NULL);
-    }
-
-    return (ap_conf_vector_t *)conf_vector;
-}
-
-AP_CORE_DECLARE(ap_conf_vector_t *) ap_merge_per_dir_configs(apr_pool_t *p,
-                                           ap_conf_vector_t *base,
-                                           ap_conf_vector_t *new_conf)
-{
-    void **conf_vector = apr_palloc(p, sizeof(void *) * total_modules);
-    void **base_vector = (void **)base;
-    void **new_vector = (void **)new_conf;
-    module *modp;
-
-    for (modp = ap_top_module; modp; modp = modp->next) {
-        int i = modp->module_index;
-
-        if (!new_vector[i]) {
-            conf_vector[i] = base_vector[i];
-        }
-        else {
-            merger_func df = modp->merge_dir_config;
-            if (df && base_vector[i]) {
-                conf_vector[i] = (*df)(p, base_vector[i], new_vector[i]);
-            }
-            else
-                conf_vector[i] = new_vector[i];
-        }
-    }
-
-    return (ap_conf_vector_t *)conf_vector;
-}
-
-static ap_conf_vector_t *create_server_config(apr_pool_t *p, server_rec *s)
-{
-    void **conf_vector = apr_pcalloc(p, sizeof(void *) *
-                                     (total_modules + DYNAMIC_MODULE_LIMIT));
-    module *modp;
-
-    for (modp = ap_top_module; modp; modp = modp->next) {
-        if (modp->create_server_config)
-            conf_vector[modp->module_index] = (*modp->create_server_config)(p, s);
-    }
-
-    return (ap_conf_vector_t *)conf_vector;
-}
-
-static void merge_server_configs(apr_pool_t *p, ap_conf_vector_t *base,
-                                 ap_conf_vector_t *virt)
-{
-    /* Can reuse the 'virt' vector for the spine of it, since we don't
-     * have to deal with the moral equivalent of .htaccess files here...
-     */
-
-    void **base_vector = (void **)base;
-    void **virt_vector = (void **)virt;
-    module *modp;
-
-    for (modp = ap_top_module; modp; modp = modp->next) {
-        merger_func df = modp->merge_server_config;
-        int i = modp->module_index;
-
-        if (!virt_vector[i])
-            virt_vector[i] = base_vector[i];
-        else if (df)
-            virt_vector[i] = (*df)(p, base_vector[i], virt_vector[i]);
-    }
-}
-
-AP_CORE_DECLARE(ap_conf_vector_t *) ap_create_request_config(apr_pool_t *p)
-{
-    return create_empty_config(p);
-}
-
-AP_CORE_DECLARE(ap_conf_vector_t *) ap_create_conn_config(apr_pool_t *p)
-{
-    return create_empty_config(p);
-}
-
-AP_CORE_DECLARE(ap_conf_vector_t *) ap_create_per_dir_config(apr_pool_t *p)
-{
-    return create_empty_config(p);
-}
-
-AP_CORE_DECLARE(int) ap_invoke_handler(request_rec *r)
-{
-    const char *handler;
-    const char *p;
-    int result;
-    const char *old_handler = r->handler;
-
-    /*
-     * The new insert_filter stage makes the most sense here.  We only use
-     * it when we are going to run the request, so we must insert filters
-     * if any are available.  Since the goal of this phase is to allow all
-     * modules to insert a filter if they want to, this filter returns
-     * void.  I just can't see any way that this filter can reasonably
-     * fail, either your modules inserts something or it doesn't.  rbb
-     */
-    ap_run_insert_filter(r);
-
-    if (!r->handler) {
-        handler = r->content_type ? r->content_type : ap_default_type(r);
-        if ((p=ap_strchr_c(handler, ';')) != NULL) {
-            char *new_handler = (char *)apr_pmemdup(r->pool, handler,
-                                                    p - handler + 1);
-            char *p2 = new_handler + (p - handler);
-            handler = new_handler;
-
-            /* MIME type arguments */
-            while (p2 > handler && p2[-1] == ' ')
-                --p2; /* strip trailing spaces */
-
-            *p2='\0';
-        }
-
-        r->handler = handler;
-    }
-
-    result = ap_run_handler(r);
-
-    r->handler = old_handler;
-
-    if (result == DECLINED && r->handler && r->filename) {
-        ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_WARNING, 0, r,
-            "handler \"%s\" not found for: %s", r->handler, r->filename);
-    }
-
-    return result == DECLINED ? HTTP_INTERNAL_SERVER_ERROR : result;
-}
-
-AP_DECLARE(int) ap_method_is_limited(cmd_parms *cmd, const char *method)
-{
-    int methnum;
-
-    methnum = ap_method_number_of(method);
-
-    /*
-     * A method number either hardcoded into apache or
-     * added by a module and registered.
-     */
-    if (methnum != M_INVALID) {
-        return (cmd->limited & (AP_METHOD_BIT << methnum)) ? 1 : 0;
-    }
-
-    return 0; /* not found */
-}
-
-AP_DECLARE(void) ap_register_hooks(module *m, apr_pool_t *p)
-{
-    if (m->register_hooks) {
-        if (getenv("SHOW_HOOKS")) {
-            printf("Registering hooks for %s\n", m->name);
-            apr_debug_module_hooks = 1;
-        }
-
-        apr_current_hooking_module = m->name;
-        m->register_hooks(p);
-    }
-}
-
-/* One-time setup for precompiled modules --- NOT to be done on restart */
-
-AP_DECLARE(void) ap_add_module(module *m, apr_pool_t *p)
-{
-    /* This could be called from an AddModule httpd.conf command,
-     * after the file has been linked and the module structure within it
-     * teased out...
-     */
-
-    if (m->version != MODULE_MAGIC_NUMBER_MAJOR) {
-        ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL,
-                     "%s: module \"%s\" is not compatible with this "
-                     "version of Apache.", ap_server_argv0, m->name);
-        ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL,
-                     "Please contact the vendor for the correct version.");
-        exit(1);
-    }
-
-    if (m->next == NULL) {
-        m->next = ap_top_module;
-        ap_top_module = m;
-    }
-
-    if (m->module_index == -1) {
-        m->module_index = total_modules++;
-        dynamic_modules++;
-
-        if (dynamic_modules > DYNAMIC_MODULE_LIMIT) {
-            ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL,
-                         "%s: module \"%s\" could not be loaded, because"
-                         " the dynamic", ap_server_argv0, m->name);
-            ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL,
-                         "module limit was reached. Please increase "
-                         "DYNAMIC_MODULE_LIMIT and recompile.");
-            exit(1);
-        }
-    }
-
-    /* Some C compilers put a complete path into __FILE__, but we want
-     * only the filename (e.g. mod_includes.c). So check for path
-     * components (Unix and DOS), and remove them.
-     */
-
-    if (ap_strrchr_c(m->name, '/'))
-        m->name = 1 + ap_strrchr_c(m->name, '/');
-
-    if (ap_strrchr_c(m->name, '\\'))
-        m->name = 1 + ap_strrchr_c(m->name, '\\');
-
-#ifdef _OSD_POSIX
-    /* __FILE__ =
-     * "*POSIX(/home/martin/apache/src/modules/standard/mod_info.c)"
-     */
-
-    /* We cannot fix the string in-place, because it's const */
-    if (m->name[strlen(m->name)-1] == ')') {
-        char *tmp = strdup(m->name); /* FIXME: memory leak, albeit a small one */
-        tmp[strlen(tmp)-1] = '\0';
-        m->name = tmp;
-    }
-#endif /*_OSD_POSIX*/
-
-    /*  FIXME: is this the right place to call this?
-     *  It doesn't appear to be
-     */
-    ap_register_hooks(m, p);
-}
-
-/*
- * remove_module undoes what add_module did. There are some caveats:
- * when the module is removed, its slot is lost so all the current
- * per-dir and per-server configurations are invalid. So we should
- * only ever call this function when you are invalidating almost
- * all our current data. I.e. when doing a restart.
- */
-
-AP_DECLARE(void) ap_remove_module(module *m)
-{
-    module *modp;
-
-    modp = ap_top_module;
-    if (modp == m) {
-        /* We are the top module, special case */
-        ap_top_module = modp->next;
-        m->next = NULL;
-    }
-    else {
-        /* Not the top module, find use. When found modp will
-         * point to the module _before_ us in the list
-         */
-
-        while (modp && modp->next != m) {
-            modp = modp->next;
-        }
-
-        if (!modp) {
-            /* Uh-oh, this module doesn't exist */
-            ap_log_error(APLOG_MARK, APLOG_ERR|APLOG_NOERRNO, 0, NULL,
-                         "Cannot remove module %s: not found in module list",
-                         m->name);
-            return;
-        }
-
-        /* Eliminate us from the module list */
-        modp->next = modp->next->next;
-    }
-
-    m->module_index = -1; /* simulate being unloaded, should
-                           * be unnecessary */
-    dynamic_modules--;
-    total_modules--;
-}
-
-AP_DECLARE(void) ap_add_loaded_module(module *mod, apr_pool_t *p)
-{
-    module **m;
-
-    /*
-     *  Add module pointer to top of chained module list
-     */
-    ap_add_module(mod, p);
-
-    /*
-     *  And module pointer to list of loaded modules
-     *
-     *  Notes: 1. ap_add_module() would already complain if no more space
-     *            exists for adding a dynamically loaded module
-     *         2. ap_add_module() accepts double inclusion, so we have
-     *            to accept this, too.
-     */
-    for (m = ap_loaded_modules; *m != NULL; m++)
-        ;
-    *m++ = mod;
-    *m = NULL;
-}
-
-AP_DECLARE(void) ap_remove_loaded_module(module *mod)
-{
-    module **m;
-    module **m2;
-    int done;
-
-    /*
-     *  Remove module pointer from chained module list
-     */
-    ap_remove_module(mod);
-
-    /*
-     *  Remove module pointer from list of loaded modules
-     *
-     *  Note: 1. We cannot determine if the module was successfully
-     *           removed by ap_remove_module().
-     *        2. We have not to complain explicity when the module
-     *           is not found because ap_remove_module() did it
-     *           for us already.
-     */
-    for (m = m2 = ap_loaded_modules, done = 0; *m2 != NULL; m2++) {
-        if (*m2 == mod && done == 0)
-            done = 1;
-        else
-            *m++ = *m2;
-    }
-
-    *m = NULL;
-}
-
-AP_DECLARE(void) ap_setup_prelinked_modules(process_rec *process)
-{
-    module **m;
-    module **m2;
-
-    apr_global_hook_pool=process->pconf;
-
-    /*
-     *  Initialise total_modules variable and module indices
-     */
-    total_modules = 0;
-    for (m = ap_preloaded_modules; *m != NULL; m++)
-        (*m)->module_index = total_modules++;
-
-    /*
-     *  Initialise list of loaded modules
-     */
-    ap_loaded_modules = (module **)apr_palloc(process->pool,
-        sizeof(module *) * (total_modules + DYNAMIC_MODULE_LIMIT + 1));
-
-    if (ap_loaded_modules == NULL) {
-        ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL,
-                     "Ouch!  Out of memory in ap_setup_prelinked_modules()!");
-    }
-
-    for (m = ap_preloaded_modules, m2 = ap_loaded_modules; *m != NULL; )
-        *m2++ = *m++;
-
-    *m2 = NULL;
-
-    /*
-     *   Initialize chain of linked (=activate) modules
-     */
-    for (m = ap_prelinked_modules; *m != NULL; m++)
-        ap_add_module(*m, process->pconf);
-
-    apr_sort_hooks();
-}
-
-AP_DECLARE(const char *) ap_find_module_name(module *m)
-{
-    return m->name;
-}
-
-AP_DECLARE(module *) ap_find_linked_module(const char *name)
-{
-    module *modp;
-
-    for (modp = ap_top_module; modp; modp = modp->next) {
-        if (strcmp(modp->name, name) == 0)
-            return modp;
-    }
-
-    return NULL;
-}
-
-/* Add a named module.  Returns 1 if module found, 0 otherwise.  */
-AP_DECLARE(int) ap_add_named_module(const char *name, apr_pool_t *p)
-{
-    module *modp;
-    int i = 0;
-
-    for (modp = ap_loaded_modules[i]; modp; modp = ap_loaded_modules[++i]) {
-        if (strcmp(modp->name, name) == 0) {
-            /* Only add modules that are not already enabled.  */
-            if (modp->next == NULL) {
-                ap_add_module(modp, p);
-            }
-
-            return 1;
-        }
-    }
-
-    return 0;
-}
-
-/*****************************************************************
- *
- * Resource, access, and .htaccess config files now parsed by a common
- * command loop.
- *
- * Let's begin with the basics; parsing the line and
- * invoking the function...
- */
-
-static const char *invoke_cmd(const command_rec *cmd, cmd_parms *parms,
-                              void *mconfig, const char *args)
-{
-    char *w, *w2, *w3;
-    const char *errmsg;
-
-    if ((parms->override & cmd->req_override) == 0)
-        return apr_pstrcat(parms->pool, cmd->name, " not allowed here", NULL);
-
-    parms->info = cmd->cmd_data;
-    parms->cmd = cmd;
-
-    switch (cmd->args_how) {
-    case RAW_ARGS:
-#ifdef RESOLVE_ENV_PER_TOKEN
-        args = ap_resolve_env(parms->pool,args);
-#endif
-        return cmd->AP_RAW_ARGS(parms, mconfig, args);
-
-    case NO_ARGS:
-        if (*args != 0)
-            return apr_pstrcat(parms->pool, cmd->name, " takes no arguments",
-                               NULL);
-
-        return cmd->AP_NO_ARGS(parms, mconfig);
-
-    case TAKE1:
-        w = ap_getword_conf(parms->pool, &args);
-
-        if (*w == '\0' || *args != 0)
-            return apr_pstrcat(parms->pool, cmd->name, " takes one argument",
-                               cmd->errmsg ? ", " : NULL, cmd->errmsg, NULL);
-
-        return cmd->AP_TAKE1(parms, mconfig, w);
-
-    case TAKE2:
-        w = ap_getword_conf(parms->pool, &args);
-        w2 = ap_getword_conf(parms->pool, &args);
-
-        if (*w == '\0' || *w2 == '\0' || *args != 0)
-            return apr_pstrcat(parms->pool, cmd->name, " takes two arguments",
-                               cmd->errmsg ? ", " : NULL, cmd->errmsg, NULL);
-
-        return cmd->AP_TAKE2(parms, mconfig, w, w2);
-
-    case TAKE12:
-        w = ap_getword_conf(parms->pool, &args);
-        w2 = ap_getword_conf(parms->pool, &args);
-
-        if (*w == '\0' || *args != 0)
-            return apr_pstrcat(parms->pool, cmd->name, " takes 1-2 arguments",
-                               cmd->errmsg ? ", " : NULL, cmd->errmsg, NULL);
-
-        return cmd->AP_TAKE2(parms, mconfig, w, *w2 ? w2 : NULL);
-
-    case TAKE3:
-        w = ap_getword_conf(parms->pool, &args);
-        w2 = ap_getword_conf(parms->pool, &args);
-        w3 = ap_getword_conf(parms->pool, &args);
-
-        if (*w == '\0' || *w2 == '\0' || *w3 == '\0' || *args != 0)
-            return apr_pstrcat(parms->pool, cmd->name, " takes three arguments",
-                               cmd->errmsg ? ", " : NULL, cmd->errmsg, NULL);
-
-        return cmd->AP_TAKE3(parms, mconfig, w, w2, w3);
-
-    case TAKE23:
-        w = ap_getword_conf(parms->pool, &args);
-        w2 = ap_getword_conf(parms->pool, &args);
-        w3 = *args ? ap_getword_conf(parms->pool, &args) : NULL;
-
-        if (*w == '\0' || *w2 == '\0' || *args != 0)
-            return apr_pstrcat(parms->pool, cmd->name,
-                               " takes two or three arguments",
-                               cmd->errmsg ? ", " : NULL, cmd->errmsg, NULL);
-
-        return cmd->AP_TAKE3(parms, mconfig, w, w2, w3);
-
-    case TAKE123:
-        w = ap_getword_conf(parms->pool, &args);
-        w2 = *args ? ap_getword_conf(parms->pool, &args) : NULL;
-        w3 = *args ? ap_getword_conf(parms->pool, &args) : NULL;
-
-        if (*w == '\0' || *args != 0)
-            return apr_pstrcat(parms->pool, cmd->name,
-                               " takes one, two or three arguments",
-                               cmd->errmsg ? ", " : NULL, cmd->errmsg, NULL);
-
-        return cmd->AP_TAKE3(parms, mconfig, w, w2, w3);
-
-    case TAKE13:
-        w = ap_getword_conf(parms->pool, &args);
-        w2 = *args ? ap_getword_conf(parms->pool, &args) : NULL;
-        w3 = *args ? ap_getword_conf(parms->pool, &args) : NULL;
-
-        if (*w == '\0' || (w2 && *w2 && !w3) || *args != 0)
-            return apr_pstrcat(parms->pool, cmd->name,
-                               " takes one or three arguments",
-                               cmd->errmsg ? ", " : NULL, cmd->errmsg, NULL);
-
-        return cmd->AP_TAKE3(parms, mconfig, w, w2, w3);
-
-    case ITERATE:
-        while (*(w = ap_getword_conf(parms->pool, &args)) != '\0') {
-            if ((errmsg = cmd->AP_TAKE1(parms, mconfig, w)))
-                return errmsg;
-        }
-
-        return NULL;
-
-    case ITERATE2:
-        w = ap_getword_conf(parms->pool, &args);
-
-        if (*w == '\0' || *args == 0)
-            return apr_pstrcat(parms->pool, cmd->name,
-                               " requires at least two arguments",
-                               cmd->errmsg ? ", " : NULL, cmd->errmsg, NULL);
-
-        while (*(w2 = ap_getword_conf(parms->pool, &args)) != '\0') {
-            if ((errmsg = cmd->AP_TAKE2(parms, mconfig, w, w2)))
-                return errmsg;
-        }
-
-        return NULL;
-
-    case FLAG:
-        w = ap_getword_conf(parms->pool, &args);
-
-        if (*w == '\0' || (strcasecmp(w, "on") && strcasecmp(w, "off")))
-            return apr_pstrcat(parms->pool, cmd->name, " must be On or Off",
-                               NULL);
-
-        return cmd->AP_FLAG(parms, mconfig, strcasecmp(w, "off") != 0);
-
-    default:
-        return apr_pstrcat(parms->pool, cmd->name,
-                           " is improperly configured internally (server bug)",
-                           NULL);
-    }
-}
-
-AP_CORE_DECLARE(const command_rec *) ap_find_command(const char *name,
-                                                     const command_rec *cmds)
-{
-    while (cmds->name) {
-        if (!strcasecmp(name, cmds->name))
-            return cmds;
-
-        ++cmds;
-    }
-
-    return NULL;
-}
-
-AP_CORE_DECLARE(const command_rec *) ap_find_command_in_modules(
-                                          const char *cmd_name, module **mod)
-{
-    const command_rec *cmdp;
-    module *modp;
-
-    for (modp = *mod; modp; modp = modp->next) {
-        if (modp->cmds && (cmdp = ap_find_command(cmd_name, modp->cmds))) {
-            *mod = modp;
-            return cmdp;
-        }
-    }
-
-    return NULL;
-}
-
-AP_CORE_DECLARE(void *) ap_set_config_vectors(server_rec *server,
-                                              ap_conf_vector_t *section_vector,
-                                              const char *section,
-                                              module *mod, apr_pool_t *pconf)
-{
-    void *section_config = ap_get_module_config(section_vector, mod);
-    void *server_config = ap_get_module_config(server->module_config, mod);
-
-    if (!section_config && mod->create_dir_config) {
-        /* ### need to fix the create_dir_config functions' prototype... */
-        section_config = (*mod->create_dir_config)(pconf, (char *)section);
-        ap_set_module_config(section_vector, mod, section_config);
-    }
-
-    if (!server_config && mod->create_server_config) {
-        server_config = (*mod->create_server_config)(pconf, server);
-        ap_set_module_config(server->module_config, mod, server_config);
-    }
-
-    return section_config;
-}
-
-static const char *execute_now(char *cmd_line, const char *args,
-                               cmd_parms *parms,
-                               apr_pool_t *p, apr_pool_t *ptemp,
-                               ap_directive_t **sub_tree,
-                               ap_directive_t *parent);
-
-static const char *ap_build_config_sub(apr_pool_t *p, apr_pool_t *temp_pool,
-                                       const char *l, cmd_parms *parms,
-                                       ap_directive_t **current,
-                                       ap_directive_t **curr_parent,
-                                       ap_directive_t **conftree)
-{
-    const char *args;
-    char *cmd_name;
-    ap_directive_t *newdir;
-    module *mod = ap_top_module;
-    const command_rec *cmd;
-
-    if (*l == '#' || *l == '\0')
-        return NULL;
-
-#if RESOLVE_ENV_PER_TOKEN
-    args = l;
-#else
-    args = ap_resolve_env(temp_pool, l);
-#endif
-
-    cmd_name = ap_getword_conf(p, &args);
-    if (*cmd_name == '\0') {
-        /* Note: this branch should not occur. An empty line should have
-         * triggered the exit further above.
-         */
-        return NULL;
-    }
-
-    if (cmd_name[1] != '/') {
-        char *lastc = cmd_name + strlen(cmd_name) - 1;
-        if (*lastc == '>') {
-            *lastc = '\0' ;
-        }
-    }
-
-    newdir = apr_pcalloc(p, sizeof(ap_directive_t));
-    newdir->filename = parms->config_file->name;
-    newdir->line_num = parms->config_file->line_number;
-    newdir->directive = cmd_name;
-    newdir->args = apr_pstrdup(p, args);
-
-    if ((cmd = ap_find_command_in_modules(cmd_name, &mod)) != NULL) {
-        if (cmd->req_override & EXEC_ON_READ) {
-            const char *retval;
-            ap_directive_t *sub_tree = NULL;
-
-            parms->err_directive = newdir;
-            retval = execute_now(cmd_name, args, parms, p, temp_pool,
-                                 &sub_tree, *curr_parent);
-            if (*current) {
-                (*current)->next = sub_tree;
-            }
-            else {
-                (*current) = sub_tree;
-                if (*curr_parent) {
-                    (*curr_parent)->first_child = (*current);
-                }
-                if (*current) {
-                    (*current)->parent = (*curr_parent);
-                }
-            }
-            if (*current) {
-                if (!*conftree) {
-                    /* Before walking *current to the end of the list,
-                     * set the head to *current.
-                     */
-                    *conftree = *current;
-                }
-                while ((*current)->next != NULL) {
-                    (*current) = (*current)->next;
-                    (*current)->parent = (*curr_parent);
-                }
-            }
-            return retval;
-        }
-    }
-
-    if (cmd_name[0] == '<') {
-        if (cmd_name[1] != '/') {
-            (*current) = ap_add_node(curr_parent, *current, newdir, 1);
-        }
-        else if (*curr_parent == NULL) {
-            parms->err_directive = newdir;
-            return apr_pstrcat(p, cmd_name,
-                               " without matching <", cmd_name + 2,
-                               " section", NULL);
-        }
-        else {
-            char *bracket = cmd_name + strlen(cmd_name) - 1;
-
-            if (*bracket != '>') {
-                parms->err_directive = newdir;
-                return apr_pstrcat(p, cmd_name,
-                                   "> directive missing closing '>'", NULL);
-            }
-
-            *bracket = '\0';
-
-            if (strcasecmp(cmd_name + 2,
-                           (*curr_parent)->directive + 1) != 0) {
-                parms->err_directive = newdir;
-                return apr_pstrcat(p, "Expected </",
-                                   (*curr_parent)->directive + 1, "> but saw ",
-                                   cmd_name, ">", NULL);
-            }
-
-            *bracket = '>';
-
-            /* done with this section; move up a level */
-            *current = *curr_parent;
-            *curr_parent = (*current)->parent;
-        }
-    }
-    else {
-        *current = ap_add_node(curr_parent, *current, newdir, 0);
-    }
-
-    return NULL;
-}
-
-AP_DECLARE(const char *) ap_build_cont_config(apr_pool_t *p,
-                                              apr_pool_t *temp_pool,
-                                              cmd_parms *parms,
-                                              ap_directive_t **current,
-                                              ap_directive_t **curr_parent,
-                                              char *orig_directive)
-{
-    char l[MAX_STRING_LEN];
-    char *bracket;
-    const char *retval;
-    ap_directive_t *sub_tree = NULL;
-
-    bracket = apr_pstrcat(p, orig_directive + 1, ">", NULL);
-    while (!(ap_cfg_getline(l, MAX_STRING_LEN, parms->config_file))) {
-        if (!memcmp(l, "</", 2)
-            && (strcasecmp(l + 2, bracket) == 0)
-            && (*curr_parent == NULL)) {
-            break;
-        }
-        retval = ap_build_config_sub(p, temp_pool, l, parms, current,
-                                     curr_parent, &sub_tree);
-        if (retval != NULL)
-            return retval;
-
-        if (sub_tree == NULL && curr_parent != NULL) {
-            sub_tree = *curr_parent;
-        }
-
-        if (sub_tree == NULL && current != NULL) {
-            sub_tree = *current;
-        }
-    }
-
-    *current = sub_tree;
-    return NULL;
-}
-
-static const char *ap_walk_config_sub(const ap_directive_t *current,
-                                      cmd_parms *parms,
-                                      ap_conf_vector_t *section_vector)
-{
-    module *mod = ap_top_module;
-
-    while (1) {
-        const command_rec *cmd;
-
-        if (!(cmd = ap_find_command_in_modules(current->directive, &mod))) {
-            parms->err_directive = current;
-            return apr_pstrcat(parms->pool, "Invalid command '",
-                               current->directive,
-                               "', perhaps mis-spelled or defined by a module "
-                               "not included in the server configuration",
-                               NULL);
-        }
-        else {
-            void *dir_config = ap_set_config_vectors(parms->server,
-                                                     section_vector,
-                                                     parms->path,
-                                                     mod,
-                                                     parms->pool);
-            const char *retval;
-
-            retval = invoke_cmd(cmd, parms, dir_config, current->args);
-            if (retval == NULL) {
-                return NULL;
-            }
-
-            if (strcmp(retval, DECLINE_CMD) != 0) {
-                /* If the directive in error has already been set, don't
-                 * replace it.  Otherwise, an error inside a container 
-                 * will be reported as occuring on the first line of the
-                 * container.
-                 */
-                if (!parms->err_directive) {
-                    parms->err_directive = current;
-                }
-
-                return retval;
-            }
-
-            mod = mod->next; /* Next time around, skip this one */
-        }
-    }
-    /* NOTREACHED */
-}
-
-AP_DECLARE(const char *) ap_walk_config(ap_directive_t *current,
-                                        cmd_parms *parms,
-                                        ap_conf_vector_t *section_vector)
-{
-    ap_conf_vector_t *oldconfig = parms->context;
-
-    parms->context = section_vector;
-
-    /* scan through all directives, executing each one */
-    for (; current != NULL; current = current->next) {
-        const char *errmsg;
-
-        parms->directive = current;
-
-        /* actually parse the command and execute the correct function */
-        errmsg = ap_walk_config_sub(current, parms, section_vector);
-        if (errmsg != NULL) {
-            /* restore the context (just in case) */
-            parms->context = oldconfig;
-            return errmsg;
-        }
-    }
-
-    parms->context = oldconfig;
-    return NULL;
-}
-
-AP_DECLARE(const char *) ap_build_config(cmd_parms *parms,
-                                         apr_pool_t *p, apr_pool_t *temp_pool,
-                                         ap_directive_t **conftree)
-{
-    ap_directive_t *current = *conftree;
-    ap_directive_t *curr_parent = NULL;
-    char l[MAX_STRING_LEN];
-    const char *errmsg;
-
-    if (current != NULL) {
-        while (current->next) {
-            current = current->next;
-        }
-    }
-
-    while (!(ap_cfg_getline(l, MAX_STRING_LEN, parms->config_file))) {
-        errmsg = ap_build_config_sub(p, temp_pool, l, parms,
-                                     &current, &curr_parent, conftree);
-        if (errmsg != NULL)
-            return errmsg;
-
-        if (*conftree == NULL && curr_parent != NULL) {
-            *conftree = curr_parent;
-        }
-
-        if (*conftree == NULL && current != NULL) {
-            *conftree = current;
-        }
-    }
-
-    if (curr_parent != NULL) {
-        errmsg = "";
-
-        while (curr_parent != NULL) {
-            errmsg = apr_psprintf(p, "%s%s%s:%u: %s> was not closed.",
-                                  errmsg,
-                                  *errmsg == '\0' ? "" : APR_EOL_STR,
-                                  curr_parent->filename,
-                                  curr_parent->line_num,
-                                  curr_parent->directive);
-                                  curr_parent = curr_parent->parent;
-        }
-
-        return errmsg;
-    }
-
-    return NULL;
-}
-
-/*
- * Generic command functions...
- */
-
-AP_DECLARE_NONSTD(const char *) ap_set_string_slot(cmd_parms *cmd,
-                                                   void *struct_ptr,
-                                                   const char *arg)
-{
-    int offset = (int)(long)cmd->info;
-
-    *(const char **)((char *)struct_ptr + offset) = arg;
-
-    return NULL;
-}
-
-AP_DECLARE_NONSTD(const char *) ap_set_int_slot(cmd_parms *cmd,
-                                                void *struct_ptr,
-                                                const char *arg)
-{
-    char *endptr;
-    char *error_str = NULL;
-    int offset = (int)(long)cmd->info;
-
-    *(int *)((char*)struct_ptr + offset) = strtol(arg, &endptr, 10);
-
-    if ((*arg == '\0') || (*endptr != '\0')) {
-        error_str = apr_psprintf(cmd->pool,
-                     "Invalid value for directive %s, expected integer",
-                     cmd->directive->directive);
-    }
-
-    return error_str;
-}
-
-AP_DECLARE_NONSTD(const char *) ap_set_string_slot_lower(cmd_parms *cmd,
-                                                         void *struct_ptr,
-                                                         const char *arg_)
-{
-    char *arg = apr_pstrdup(cmd->pool,arg_);
-    int offset = (int)(long)cmd->info;
-
-    ap_str_tolower(arg);
-    *(char **)((char *)struct_ptr + offset) = arg;
-
-    return NULL;
-}
-
-AP_DECLARE_NONSTD(const char *) ap_set_flag_slot(cmd_parms *cmd,
-                                                 void *struct_ptr_v, int arg)
-{
-    int offset = (int)(long)cmd->info;
-    char *struct_ptr = (char *)struct_ptr_v;
-
-    *(int *)(struct_ptr + offset) = arg ? 1 : 0;
-
-    return NULL;
-}
-
-AP_DECLARE_NONSTD(const char *) ap_set_file_slot(cmd_parms *cmd, void *struct_ptr,
-                                                 const char *arg)
-{
-    /* Prepend server_root to relative arg.
-     * This allows most args to be independent of server_root,
-     * so the server can be moved or mirrored with less pain.
-     */
-    const char *path;
-    int offset = (int)(long)cmd->info;
-
-    path = ap_server_root_relative(cmd->pool, arg);
-
-    if (!path) {
-        return apr_pstrcat(cmd->pool, "Invalid file path ",
-                           arg, NULL);
-    }
-
-    *(const char **) ((char*)struct_ptr + offset) = path;
-
-    return NULL;
-}
-
-AP_DECLARE_NONSTD(const char *) ap_set_deprecated(cmd_parms *cmd,
-                                                  void *struct_ptr,
-                                                  const char *arg)
-{
-    return cmd->cmd->errmsg;
-}
-
-/*****************************************************************
- *
- * Reading whole config files...
- */
-
-static cmd_parms default_parms =
-{NULL, 0, -1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL};
-
-AP_DECLARE(char *) ap_server_root_relative(apr_pool_t *p, const char *file)
-{
-    char *newpath;
-    if (apr_filepath_merge(&newpath, ap_server_root, file,
-                           APR_FILEPATH_TRUENAME, p) == APR_SUCCESS)
-        return newpath;
-    else
-        return NULL;
-}
-
-AP_DECLARE(const char *) ap_soak_end_container(cmd_parms *cmd, char *directive)
-{
-    char l[MAX_STRING_LEN];
-    const char *args;
-    char *cmd_name;
-
-    while(!(ap_cfg_getline(l, MAX_STRING_LEN, cmd->config_file))) {
-#if RESOLVE_ENV_PER_TOKEN
-        args = l;
-#else
-        args = ap_resolve_env(cmd->temp_pool, l);
-#endif
-
-        cmd_name = ap_getword_conf(cmd->pool, &args);
-        if (cmd_name[0] == '<') {
-            if (cmd_name[1] == '/') {
-                cmd_name[strlen(cmd_name) - 1] = '\0';
-
-                if (strcasecmp(cmd_name + 2, directive + 1) != 0) {
-                    return apr_pstrcat(cmd->pool, "Expected </",
-                                       directive + 1, "> but saw ",
-                                       cmd_name, ">", NULL);
-                }
-
-                return NULL; /* found end of container */
-            }
-            else {
-                const char *msg;
-
-                if ((msg = ap_soak_end_container(cmd, cmd_name)) != NULL) {
-                    return msg;
-                }
-            }
-        }
-    }
-
-    return apr_pstrcat(cmd->pool, "Expected </",
-                       directive + 1, "> before end of configuration",
-                       NULL);
-}
-
-static const char *execute_now(char *cmd_line, const char *args,
-                               cmd_parms *parms,
-                               apr_pool_t *p, apr_pool_t *ptemp,
-                               ap_directive_t **sub_tree,
-                               ap_directive_t *parent)
-{
-    module *mod = ap_top_module;
-    const command_rec *cmd;
-
-    if (!(cmd = ap_find_command_in_modules(cmd_line, &mod))) {
-        return apr_pstrcat(parms->pool, "Invalid command '",
-                           cmd_line,
-                           "', perhaps mis-spelled or defined by a module "
-                           "not included in the server configuration",
-                           NULL);
-    }
-    else {
-        return invoke_cmd(cmd, parms, sub_tree, args);
-    }
-}
-
-/* This structure and the following functions are needed for the
- * table-based config file reading. They are passed to the
- * cfg_open_custom() routine.
- */
-
-/* Structure to be passed to cfg_open_custom(): it contains an
- * index which is incremented from 0 to nelts on each call to
- * cfg_getline() (which in turn calls arr_elts_getstr())
- * and an apr_array_header_t pointer for the string array.
- */
-typedef struct {
-    apr_array_header_t *array;
-    int curr_idx;
-} arr_elts_param_t;
-
-
-/* arr_elts_getstr() returns the next line from the string array. */
-static void *arr_elts_getstr(void *buf, size_t bufsiz, void *param)
-{
-    arr_elts_param_t *arr_param = (arr_elts_param_t *)param;
-
-    /* End of array reached? */
-    if (++arr_param->curr_idx > arr_param->array->nelts)
-        return NULL;
-
-    /* return the line */
-    apr_cpystrn(buf,
-                ((char **)arr_param->array->elts)[arr_param->curr_idx - 1],
-                bufsiz);
-
-    return buf;
-}
-
-
-/* arr_elts_close(): dummy close routine (makes sure no more lines can be read) */
-static int arr_elts_close(void *param)
-{
-    arr_elts_param_t *arr_param = (arr_elts_param_t *)param;
-
-    arr_param->curr_idx = arr_param->array->nelts;
-
-    return 0;
-}
-
-static void process_command_config(server_rec *s, apr_array_header_t *arr,
-                                   ap_directive_t **conftree, apr_pool_t *p,
-                                   apr_pool_t *ptemp)
-{
-    const char *errmsg;
-    cmd_parms parms;
-    arr_elts_param_t arr_parms;
-
-    arr_parms.curr_idx = 0;
-    arr_parms.array = arr;
-
-    parms = default_parms;
-    parms.pool = p;
-    parms.temp_pool = ptemp;
-    parms.server = s;
-    parms.override = (RSRC_CONF | OR_ALL) & ~(OR_AUTHCFG | OR_LIMIT);
-
-    parms.config_file = ap_pcfg_open_custom(p, "-c/-C directives",
-                                            &arr_parms, NULL,
-                                            arr_elts_getstr, arr_elts_close);
-
-    errmsg = ap_build_config(&parms, p, ptemp, conftree);
-    if (errmsg) {
-        ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL,
-                     "Syntax error in -C/-c directive:" APR_EOL_STR "%s",
-                     errmsg);
-        exit(1);
-    }
-
-    ap_cfg_closefile(parms.config_file);
-}
-
-typedef struct {
-    char *fname;
-} fnames;
-
-static int fname_alphasort(const void *fn1, const void *fn2)
-{
-    const fnames *f1 = fn1;
-    const fnames *f2 = fn2;
-
-    return strcmp(f1->fname,f2->fname);
-}
-
-AP_DECLARE(void) ap_process_resource_config(server_rec *s, const char *fname,
-                                            ap_directive_t **conftree,
-                                            apr_pool_t *p,
-                                            apr_pool_t *ptemp)
-{
-    cmd_parms parms;
-    apr_finfo_t finfo;
-    const char *errmsg;
-    ap_configfile_t *cfp;
-
-    /* don't require conf/httpd.conf if we have a -C or -c switch */
-    if ((ap_server_pre_read_config->nelts
-        || ap_server_post_read_config->nelts)
-        && !(strcmp(fname, ap_server_root_relative(p, SERVER_CONFIG_FILE)))) {
-        if (apr_lstat(&finfo, fname, APR_FINFO_TYPE, p) != APR_SUCCESS)
-            return;
-    }
-
-    /*
-     * here we want to check if the candidate file is really a
-     * directory, and most definitely NOT a symlink (to prevent
-     * horrible loops).  If so, let's recurse and toss it back
-     * into the function.
-     */
-    if (ap_is_rdirectory(ptemp, fname)) {
-        apr_dir_t *dirp;
-        apr_finfo_t dirent;
-        int current;
-        apr_array_header_t *candidates = NULL;
-        fnames *fnew;
-        apr_status_t rv;
-        char errmsg[120];
-
-        /*
-         * first course of business is to grok all the directory
-         * entries here and store 'em away. Recall we need full pathnames
-         * for this.
-         */
-        fprintf(stderr, "Processing config directory: %s\n", fname);
-        rv = apr_dir_open(&dirp, fname, p);
-        if (rv != APR_SUCCESS) {
-            fprintf(stderr, "%s: could not open config directory %s: %s\n",
-                    ap_server_argv0, fname,
-                    apr_strerror(rv, errmsg, sizeof errmsg));
-            exit(1);
-        }
-
-        candidates = apr_array_make(p, 1, sizeof(fnames));
-        while (apr_dir_read(&dirent, APR_FINFO_DIRENT, dirp) == APR_SUCCESS) {
-            /* strip out '.' and '..' */
-            if (strcmp(dirent.name, ".")
-                && strcmp(dirent.name, "..")) {
-                fnew = (fnames *) apr_array_push(candidates);
-                fnew->fname = ap_make_full_path(p, fname, dirent.name);
-            }
-        }
-
-        apr_dir_close(dirp);
-        if (candidates->nelts != 0) {
-            qsort((void *) candidates->elts, candidates->nelts,
-                  sizeof(fnames), fname_alphasort);
-
-            /*
-             * Now recurse these... we handle errors and subdirectories
-             * via the recursion, which is nice
-             */
-            for (current = 0; current < candidates->nelts; ++current) {
-                fnew = &((fnames *) candidates->elts)[current];
-                fprintf(stderr, " Processing config file: %s\n", fnew->fname);
-                ap_process_resource_config(s, fnew->fname, conftree, p, ptemp);
-            }
-        }
-
-        return;
-    }
-
-    /* GCC's initialization extensions are soooo nice here... */
-
-    parms = default_parms;
-    parms.pool = p;
-    parms.temp_pool = ptemp;
-    parms.server = s;
-    parms.override = (RSRC_CONF | OR_ALL) & ~(OR_AUTHCFG | OR_LIMIT);
-
-    if (ap_pcfg_openfile(&cfp, p, fname) != APR_SUCCESS) {
-        ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL,
-                     "%s: could not open document config file %s",
-                     ap_server_argv0, fname);
-        exit(1);
-    }
-
-    parms.config_file = cfp;
-
-    errmsg = ap_build_config(&parms, p, ptemp, conftree);
-
-    if (errmsg != NULL) {
-        ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL,
-                     "Syntax error on line %d of %s:",
-                     parms.err_directive->line_num,
-                     parms.err_directive->filename);
-        ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL,
-                     "%s", errmsg);
-        exit(1);
-    }
-
-    ap_cfg_closefile(cfp);
-}
-
-AP_DECLARE(void) ap_process_config_tree(server_rec *s,
-                                        ap_directive_t *conftree,
-                                        apr_pool_t *p, apr_pool_t *ptemp)
-{
-    const char *errmsg;
-    cmd_parms parms;
-
-    parms = default_parms;
-    parms.pool = p;
-    parms.temp_pool = ptemp;
-    parms.server = s;
-    parms.override = (RSRC_CONF | OR_ALL) & ~(OR_AUTHCFG | OR_LIMIT);
-    parms.limited = -1;
-
-    errmsg = ap_walk_config(conftree, &parms, s->lookup_defaults);
-    if (errmsg) {
-        ap_log_perror(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, p,
-                     "Syntax error on line %d of %s:",
-                     parms.err_directive->line_num,
-                     parms.err_directive->filename);
-        ap_log_perror(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, p,
-                     "%s", errmsg);
-        exit(1);
-    }
-}
-
-AP_CORE_DECLARE(int) ap_parse_htaccess(ap_conf_vector_t **result,
-                                       request_rec *r, int override,
-                                       const char *d, const char *access_name)
-{
-    ap_configfile_t *f = NULL;
-    cmd_parms parms;
-    char *filename = NULL;
-    const struct htaccess_result *cache;
-    struct htaccess_result *new;
-    ap_conf_vector_t *dc = NULL;
-    apr_status_t status;
-
-    /* firstly, search cache */
-    for (cache = r->htaccess; cache != NULL; cache = cache->next) {
-        if (cache->override == override && strcmp(cache->dir, d) == 0) {
-            *result = cache->htaccess;
-            return OK;
-        }
-    }
-
-    parms = default_parms;
-    parms.override = override;
-    parms.pool = r->pool;
-    parms.temp_pool = r->pool;
-    parms.server = r->server;
-    parms.path = apr_pstrdup(r->pool, d);
-
-    /* loop through the access names and find the first one */
-    while (access_name[0]) {
-        /* AFAICT; there is no use of the actual 'filename' against
-         * any canonicalization, so we will simply take the given
-         * name, ignoring case sensitivity and aliases
-         */
-        filename = ap_make_full_path(r->pool, d,
-                                     ap_getword_conf(r->pool, &access_name));
-        status = ap_pcfg_openfile(&f, r->pool, filename);
-
-        if (status == APR_SUCCESS) {
-            const char *errmsg;
-            ap_directive_t *temptree = NULL;
-
-            dc = ap_create_per_dir_config(r->pool);
-
-            parms.config_file = f;
-            errmsg = ap_build_config(&parms, r->pool, r->pool, &temptree);
-            if (errmsg == NULL)
-                errmsg = ap_walk_config(temptree, &parms, dc);
-
-            ap_cfg_closefile(f);
-
-            if (errmsg) {
-                ap_log_rerror(APLOG_MARK, APLOG_ALERT|APLOG_NOERRNO, 0, r,
-                              "%s: %s", filename, errmsg);
-                return HTTP_INTERNAL_SERVER_ERROR;
-            }
-
-            *result = dc;
-            break;
-        }
-        else {
-            if (!APR_STATUS_IS_ENOENT(status)
-                && !APR_STATUS_IS_ENOTDIR(status)) {
-                ap_log_rerror(APLOG_MARK, APLOG_CRIT, status, r,
-                              "%s pcfg_openfile: unable to check htaccess file, "
-                              "ensure it is readable",
-                              filename);
-                apr_table_setn(r->notes, "error-notes",
-                               "Server unable to read htaccess file, denying "
-                               "access to be safe");
-                return HTTP_FORBIDDEN;
-            }
-        }
-    }
-
-    /* cache it */
-    new = apr_palloc(r->pool, sizeof(struct htaccess_result));
-    new->dir = parms.path;
-    new->override = override;
-    new->htaccess = dc;
-
-    /* add to head of list */
-    new->next = r->htaccess;
-    r->htaccess = new;
-
-    return OK;
-}
-
-AP_CORE_DECLARE(const char *) ap_init_virtual_host(apr_pool_t *p,
-                                                   const char *hostname,
-                                                   server_rec *main_server,
-                                                   server_rec **ps)
-{
-    server_rec *s = (server_rec *) apr_pcalloc(p, sizeof(server_rec));
-
-    /* TODO: this crap belongs in http_core */
-    s->process = main_server->process;
-    s->server_admin = NULL;
-    s->server_hostname = NULL;
-    s->error_fname = NULL;
-    s->timeout = 0;
-    s->keep_alive_timeout = 0;
-    s->keep_alive = -1;
-    s->keep_alive_max = -1;
-    s->error_log = main_server->error_log;
-    s->loglevel = main_server->loglevel;
-    /* useful default, otherwise we get a port of 0 on redirects */
-    s->port = main_server->port;
-    s->next = NULL;
-
-    s->is_virtual = 1;
-    s->names = apr_array_make(p, 4, sizeof(char **));
-    s->wild_names = apr_array_make(p, 4, sizeof(char **));
-
-    s->module_config = create_empty_config(p);
-    s->lookup_defaults = ap_create_per_dir_config(p);
-
-    s->limit_req_line = main_server->limit_req_line;
-    s->limit_req_fieldsize = main_server->limit_req_fieldsize;
-    s->limit_req_fields = main_server->limit_req_fields;
-
-    *ps = s;
-
-    return ap_parse_vhost_addrs(p, hostname, s);
-}
-
-
-AP_DECLARE(void) ap_fixup_virtual_hosts(apr_pool_t *p, server_rec *main_server)
-{
-    server_rec *virt;
-
-    for (virt = main_server->next; virt; virt = virt->next) {
-        merge_server_configs(p, main_server->module_config,
-                             virt->module_config);
-
-        virt->lookup_defaults =
-            ap_merge_per_dir_configs(p, main_server->lookup_defaults,
-                                     virt->lookup_defaults);
-
-        if (virt->server_admin == NULL)
-            virt->server_admin = main_server->server_admin;
-
-        if (virt->timeout == 0)
-            virt->timeout = main_server->timeout;
-
-        if (virt->keep_alive_timeout == 0)
-            virt->keep_alive_timeout = main_server->keep_alive_timeout;
-
-        if (virt->keep_alive == -1)
-            virt->keep_alive = main_server->keep_alive;
-
-        if (virt->keep_alive_max == -1)
-            virt->keep_alive_max = main_server->keep_alive_max;
-
-        /* XXX: this is really something that should be dealt with by a
-         * post-config api phase
-         */
-        ap_core_reorder_directories(p, virt);
-    }
-
-    ap_core_reorder_directories(p, main_server);
-}
-
-/*****************************************************************
- *
- * Getting *everything* configured...
- */
-
-static void init_config_globals(apr_pool_t *p)
-{
-    /* Global virtual host hash bucket pointers.  Init to null. */
-    ap_init_vhost_config(p);
-}
-
-static server_rec *init_server_config(process_rec *process, apr_pool_t *p)
-{
-    apr_status_t rv;
-    server_rec *s = (server_rec *) apr_pcalloc(p, sizeof(server_rec));
-
-    apr_file_open_stderr(&s->error_log, p);
-    s->process = process;
-    s->port = 0;
-    s->server_admin = DEFAULT_ADMIN;
-    s->server_hostname = NULL;
-    s->error_fname = DEFAULT_ERRORLOG;
-    s->loglevel = DEFAULT_LOGLEVEL;
-    s->limit_req_line = DEFAULT_LIMIT_REQUEST_LINE;
-    s->limit_req_fieldsize = DEFAULT_LIMIT_REQUEST_FIELDSIZE;
-    s->limit_req_fields = DEFAULT_LIMIT_REQUEST_FIELDS;
-    s->timeout = DEFAULT_TIMEOUT;
-    s->keep_alive_timeout = DEFAULT_KEEPALIVE_TIMEOUT;
-    s->keep_alive_max = DEFAULT_KEEPALIVE;
-    s->keep_alive = 1;
-    s->next = NULL;
-    s->addrs = apr_pcalloc(p, sizeof(server_addr_rec));
-
-    /* NOT virtual host; don't match any real network interface */
-    rv = apr_sockaddr_info_get(&s->addrs->host_addr,
-                               NULL, APR_INET, 0, 0, p);
-    ap_assert(rv == APR_SUCCESS); /* otherwise: bug or no storage */
-
-    s->addrs->host_port = 0; /* matches any port */
-    s->addrs->virthost = ""; /* must be non-NULL */
-    s->names = s->wild_names = NULL;
-
-    s->module_config = create_server_config(p, s);
-    s->lookup_defaults = create_default_per_dir_config(p);
-
-    return s;
-}
-
-
-AP_DECLARE(server_rec*) ap_read_config(process_rec *process, apr_pool_t *ptemp,
-                                       const char *filename,
-                                       ap_directive_t **conftree)
-{
-    const char *confname;
-    apr_pool_t *p = process->pconf;
-    server_rec *s = init_server_config(process, p);
-
-    init_config_globals(p);
-
-    /* All server-wide config files now have the SAME syntax... */
-    process_command_config(s, ap_server_pre_read_config, conftree,
-                           p, ptemp);
-
-    /* process_command_config may change the ServerRoot so
-     * compute this config file name afterwards.
-     */
-    confname = ap_server_root_relative(p, filename);
-
-    if (!confname) {
-        ap_log_error(APLOG_MARK, APLOG_STARTUP|APLOG_CRIT,
-                     APR_EBADPATH, NULL, "Invalid config file path %s",
-                     filename);
-        exit(1);
-    }
-
-    ap_process_resource_config(s, confname, conftree, p, ptemp);
-
-    process_command_config(s, ap_server_post_read_config, conftree,
-                           p, ptemp);
-
-    return s;
-}
-
-AP_DECLARE(void) ap_single_module_configure(apr_pool_t *p, server_rec *s,
-                                            module *m)
-{
-    if (m->create_server_config)
-        ap_set_module_config(s->module_config, m,
-                             (*m->create_server_config)(p, s));
-
-    if (m->create_dir_config)
-        ap_set_module_config(s->lookup_defaults, m,
-                             (*m->create_dir_config)(p, NULL));
-}
-
-AP_DECLARE(void) ap_run_rewrite_args(process_rec *process)
-{
-    module *m;
-
-    for (m = ap_top_module; m; m = m->next) {
-        if (m->rewrite_args) {
-            (*m->rewrite_args)(process);
-        }
-    }
-}
-
-/********************************************************************
- * Configuration directives are restricted in terms of where they may
- * appear in the main configuration files and/or .htaccess files according
- * to the bitmask req_override in the command_rec structure.
- * If any of the overrides set in req_override are also allowed in the
- * context in which the command is read, then the command is allowed.
- * The context is determined as follows:
- *
- *    inside *.conf --> override = (RSRC_CONF|OR_ALL)&~(OR_AUTHCFG|OR_LIMIT);
- *    within <Directory> or <Location> --> override = OR_ALL|ACCESS_CONF;
- *    within .htaccess --> override = AllowOverride for current directory;
- *
- * the result is, well, a rather confusing set of possibilities for when
- * a particular directive is allowed to be used.  This procedure prints
- * in English where the given (pc) directive can be used.
- */
-static void show_overrides(const command_rec *pc, module *pm)
-{
-    int n = 0;
-
-    printf("\tAllowed in *.conf ");
-    if ((pc->req_override & (OR_OPTIONS | OR_FILEINFO | OR_INDEXES))
-        || ((pc->req_override & RSRC_CONF)
-        && ((pc->req_override & (ACCESS_CONF | OR_AUTHCFG | OR_LIMIT))))) {
-        printf("anywhere");
-    }
-    else if (pc->req_override & RSRC_CONF) {
-        printf("only outside <Directory>, <Files> or <Location>");
-    }
-    else {
-        printf("only inside <Directory>, <Files> or <Location>");
-    }
-
-    /* Warn if the directive is allowed inside <Directory> or .htaccess
-     * but module doesn't support per-dir configuration
-     */
-    if ((pc->req_override & (OR_ALL | ACCESS_CONF)) && !pm->create_dir_config)
-        printf(" [no per-dir config]");
-
-    if (pc->req_override & OR_ALL) {
-        printf(" and in .htaccess\n\twhen AllowOverride");
-
-        if ((pc->req_override & OR_ALL) == OR_ALL) {
-            printf(" isn't None");
-        }
-        else {
-            printf(" includes ");
-
-            if (pc->req_override & OR_AUTHCFG) {
-                if (n++)
-                    printf(" or ");
-
-                printf("AuthConfig");
-            }
-
-            if (pc->req_override & OR_LIMIT) {
-                if (n++)
-                    printf(" or ");
-
-                printf("Limit");
-            }
-
-            if (pc->req_override & OR_OPTIONS) {
-                if (n++)
-                    printf(" or ");
-
-                printf("Options");
-            }
-
-            if (pc->req_override & OR_FILEINFO) {
-                if (n++)
-                    printf(" or ");
-
-                printf("FileInfo");
-            }
-
-            if (pc->req_override & OR_INDEXES) {
-                if (n++)
-                    printf(" or ");
-
-                printf("Indexes");
-            }
-        }
-    }
-
-    printf("\n");
-}
-
-/* Show the preloaded configuration directives, the help string explaining
- * the directive arguments, in what module they are handled, and in
- * what parts of the configuration they are allowed.  Used for httpd -L.
- */
-AP_DECLARE(void) ap_show_directives(void)
-{
-    const command_rec *pc;
-    int n;
-
-    for (n = 0; ap_loaded_modules[n]; ++n) {
-        for (pc = ap_loaded_modules[n]->cmds; pc && pc->name; ++pc) {
-            printf("%s (%s)\n", pc->name, ap_loaded_modules[n]->name);
-
-            if (pc->errmsg)
-                printf("\t%s\n", pc->errmsg);
-
-            show_overrides(pc, ap_loaded_modules[n]);
-        }
-    }
-}
-
-/* Show the preloaded module names.  Used for httpd -l. */
-AP_DECLARE(void) ap_show_modules(void)
-{
-    int n;
-
-    printf("Compiled in modules:\n");
-    for (n = 0; ap_loaded_modules[n]; ++n)
-        printf("  %s\n", ap_loaded_modules[n]->name);
-}
-
-AP_DECLARE(const char *) ap_show_mpm(void)
-{
-    return MPM_NAME;
-}
diff --git a/server/config.m4 b/server/config.m4
deleted file mode 100644
index 85fa4d1..0000000
--- a/server/config.m4
+++ /dev/null
@@ -1,15 +0,0 @@
-dnl ## Check for libraries
-
-dnl ## Check for header files
-
-AC_CHECK_HEADERS(bstring.h unistd.h)
-
-dnl ## Check for typedefs, structures, and compiler characteristics.
-
-dnl ## Check for library functions
-
-AC_CHECK_FUNCS(syslog)
-
-dnl Obsolete scoreboard code uses this.
-    AC_CHECK_HEADERS(sys/times.h)
-    AC_CHECK_FUNCS(times)
diff --git a/server/connection.c b/server/connection.c
deleted file mode 100644
index 0941f11..0000000
--- a/server/connection.c
+++ /dev/null
@@ -1,232 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-#include "apr.h"
-#include "apr_strings.h"
-
-#define CORE_PRIVATE
-#include "ap_config.h"
-#include "httpd.h"
-#include "http_connection.h"
-#include "http_request.h"
-#include "http_protocol.h"
-#include "ap_mpm.h"
-#include "mpm_default.h"
-#include "http_config.h"
-#include "http_core.h"
-#include "http_vhost.h"
-#include "scoreboard.h"
-#include "http_log.h"
-#include "util_filter.h"
-
-APR_HOOK_STRUCT(
-            APR_HOOK_LINK(create_connection)
-	    APR_HOOK_LINK(process_connection)
-	    APR_HOOK_LINK(pre_connection)
-)
-AP_IMPLEMENT_HOOK_RUN_FIRST(conn_rec *,create_connection,
-                            (apr_pool_t *p, server_rec *server, apr_socket_t *csd, long conn_id, void *sbh),
-                            (p, server, csd, conn_id, sbh), NULL)
-AP_IMPLEMENT_HOOK_RUN_FIRST(int,process_connection,(conn_rec *c),(c),DECLINED)
-AP_IMPLEMENT_HOOK_RUN_ALL(int,pre_connection,(conn_rec *c, void *csd),(c, csd),OK,DECLINED)
-/*
- * More machine-dependent networking gooo... on some systems,
- * you've got to be *really* sure that all the packets are acknowledged
- * before closing the connection, since the client will not be able
- * to see the last response if their TCP buffer is flushed by a RST
- * packet from us, which is what the server's TCP stack will send
- * if it receives any request data after closing the connection.
- *
- * In an ideal world, this function would be accomplished by simply
- * setting the socket option SO_LINGER and handling it within the
- * server's TCP stack while the process continues on to the next request.
- * Unfortunately, it seems that most (if not all) operating systems
- * block the server process on close() when SO_LINGER is used.
- * For those that don't, see USE_SO_LINGER below.  For the rest,
- * we have created a home-brew lingering_close.
- *
- * Many operating systems tend to block, puke, or otherwise mishandle
- * calls to shutdown only half of the connection.  You should define
- * NO_LINGCLOSE in ap_config.h if such is the case for your system.
- */
-#ifndef MAX_SECS_TO_LINGER
-#define MAX_SECS_TO_LINGER 30
-#endif
-
-#ifdef USE_SO_LINGER
-#define NO_LINGCLOSE /* The two lingering options are exclusive */
-
-static void sock_enable_linger(int s)
-{
-    struct linger li;
-
-    li.l_onoff = 1;
-    li.l_linger = MAX_SECS_TO_LINGER;
-
-    if (setsockopt(s, SOL_SOCKET, SO_LINGER,
-                   (char *)&li, sizeof(struct linger)) < 0) {
-        ap_log_error(APLOG_MARK, APLOG_WARNING, errno, server_conf,
-                     "setsockopt: (SO_LINGER)");
-        /* not a fatal error */
-    }
-}
-
-#else
-#define sock_enable_linger(s) /* NOOP */
-#endif /* USE_SO_LINGER */
-
-AP_CORE_DECLARE(void) ap_flush_conn(conn_rec *c)
-{
-    apr_bucket_brigade *bb;
-    apr_bucket *b;
-
-    bb = apr_brigade_create(c->pool);
-    b = apr_bucket_flush_create();
-    APR_BRIGADE_INSERT_TAIL(bb, b);
-    ap_pass_brigade(c->output_filters, bb);
-}
-
-/* we now proceed to read from the client until we get EOF, or until
- * MAX_SECS_TO_LINGER has passed.  the reasons for doing this are
- * documented in a draft:
- *
- * http://www.ics.uci.edu/pub/ietf/http/draft-ietf-http-connection-00.txt
- *
- * in a nutshell -- if we don't make this effort we risk causing
- * TCP RST packets to be sent which can tear down a connection before
- * all the response data has been sent to the client.
- */
-#define SECONDS_TO_LINGER  2
-AP_DECLARE(void) ap_lingering_close(conn_rec *c)
-{
-    char dummybuf[512];
-    apr_size_t nbytes = sizeof(dummybuf);
-    apr_status_t rc;
-    apr_int32_t timeout;
-    apr_int32_t total_linger_time = 0;
-    apr_socket_t *csd = ap_get_module_config(c->conn_config, &core_module);
-
-    if (!csd) {
-        return;
-    }
-
-    ap_update_child_status(c->sbh, SERVER_CLOSING, NULL);
-
-#ifdef NO_LINGCLOSE
-    ap_flush_conn(c); /* just close it */
-    apr_socket_close(csd);
-    return;
-#endif
-
-    /* Close the connection, being careful to send out whatever is still
-     * in our buffers.  If possible, try to avoid a hard close until the
-     * client has ACKed our FIN and/or has stopped sending us data.
-     */
-
-    /* Send any leftover data to the client, but never try to again */
-    ap_flush_conn(c);
-
-    if (c->aborted) {
-        apr_socket_close(csd);
-        return;
-    }
-
-    /* Shut down the socket for write, which will send a FIN
-     * to the peer.
-     */
-    if (apr_shutdown(csd, APR_SHUTDOWN_WRITE) != APR_SUCCESS
-        || c->aborted) {
-        apr_socket_close(csd);
-        return;
-    }
-
-    /* Read all data from the peer until we reach "end-of-file" (FIN
-     * from peer) or we've exceeded our overall timeout. If the client does
-     * not send us bytes within 2 seconds (a value pulled from Apache 1.3
-     * which seems to work well), close the connection.
-     */
-    timeout = SECONDS_TO_LINGER * APR_USEC_PER_SEC;
-    apr_setsocketopt(csd, APR_SO_TIMEOUT, timeout);
-    apr_setsocketopt(csd, APR_INCOMPLETE_READ, 1);
-    while (1) {
-        nbytes = sizeof(dummybuf);
-        rc = apr_recv(csd, dummybuf, &nbytes);
-        if (rc != APR_SUCCESS || nbytes == 0)
-            break;
-
-        total_linger_time += SECONDS_TO_LINGER;
-        if (total_linger_time >= MAX_SECS_TO_LINGER) {
-            break;
-        }
-    }
-
-    apr_socket_close(csd);
-    return;
-}
-
-AP_CORE_DECLARE(void) ap_process_connection(conn_rec *c, void *csd)
-{
-    ap_update_vhost_given_ip(c);
-
-    ap_run_pre_connection(c, csd);
-
-    if (!c->aborted) {
-        ap_run_process_connection(c);
-    }
-}
-
diff --git a/server/core.c b/server/core.c
deleted file mode 100644
index 7fb15c5..0000000
--- a/server/core.c
+++ /dev/null
@@ -1,4062 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-#include "apr.h"
-#include "apr_strings.h"
-#include "apr_lib.h"
-#include "apr_fnmatch.h"
-#include "apr_hash.h"
-#include "apr_thread_proc.h"    /* for RLIMIT stuff */
-#include "apr_hooks.h"
-
-#define APR_WANT_IOVEC
-#define APR_WANT_STRFUNC
-#define APR_WANT_MEMFUNC
-#include "apr_want.h"
-
-#define CORE_PRIVATE
-#include "ap_config.h"
-#include "httpd.h"
-#include "http_config.h"
-#include "http_core.h"
-#include "http_protocol.h" /* For index_of_response().  Grump. */
-#include "http_request.h"
-#include "http_vhost.h"
-#include "http_main.h"     /* For the default_handler below... */
-#include "http_log.h"
-#include "rfc1413.h"
-#include "util_md5.h"
-#include "http_connection.h"
-#include "apr_buckets.h"
-#include "util_filter.h"
-#include "util_ebcdic.h"
-#include "mpm.h"
-#include "mpm_common.h"
-#include "scoreboard.h"
-#include "mod_core.h"
-#include "mod_proxy.h"
-#include "ap_listen.h"
-
-/* LimitXMLRequestBody handling */
-#define AP_LIMIT_UNSET                  ((long) -1)
-#define AP_DEFAULT_LIMIT_XML_BODY       ((size_t)1000000)
-
-#define AP_MIN_SENDFILE_BYTES           (256)
-
-APR_HOOK_STRUCT(
-    APR_HOOK_LINK(get_mgmt_items)
-)
-
-AP_IMPLEMENT_HOOK_RUN_ALL(int, get_mgmt_items,
-                          (apr_pool_t *p, const char *val, apr_hash_t *ht),
-                          (p, val, ht), OK, DECLINED)
-
-/* Server core module... This module provides support for really basic
- * server operations, including options and commands which control the
- * operation of other modules.  Consider this the bureaucracy module.
- *
- * The core module also defines handlers, etc., do handle just enough
- * to allow a server with the core module ONLY to actually serve documents
- * (though it slaps DefaultType on all of 'em); this was useful in testing,
- * but may not be worth preserving.
- *
- * This file could almost be mod_core.c, except for the stuff which affects
- * the http_conf_globals.
- */
-
-/* Handles for core filters */
-ap_filter_rec_t *ap_subreq_core_filter_handle;
-ap_filter_rec_t *ap_core_output_filter_handle;
-ap_filter_rec_t *ap_content_length_filter_handle;
-ap_filter_rec_t *ap_net_time_filter_handle;
-ap_filter_rec_t *ap_core_input_filter_handle;
-
-static void *create_core_dir_config(apr_pool_t *a, char *dir)
-{
-    core_dir_config *conf;
-
-    conf = (core_dir_config *)apr_pcalloc(a, sizeof(core_dir_config));
-
-    /* conf->r and conf->d[_*] are initialized by dirsection() or left NULL */
-
-    conf->opts = dir ? OPT_UNSET : OPT_UNSET|OPT_ALL;
-    conf->opts_add = conf->opts_remove = OPT_NONE;
-    conf->override = dir ? OR_UNSET : OR_UNSET|OR_ALL;
-
-    conf->content_md5 = 2;
-    conf->accept_path_info = 3;
-
-    conf->use_canonical_name = USE_CANONICAL_NAME_UNSET;
-
-    conf->hostname_lookups = HOSTNAME_LOOKUP_UNSET;
-    conf->do_rfc1413 = DEFAULT_RFC1413 | 2; /* set bit 1 to indicate default */
-    conf->satisfy = SATISFY_NOSPEC;
-
-#ifdef RLIMIT_CPU
-    conf->limit_cpu = NULL;
-#endif
-#if defined(RLIMIT_DATA) || defined(RLIMIT_VMEM) || defined(RLIMIT_AS)
-    conf->limit_mem = NULL;
-#endif
-#ifdef RLIMIT_NPROC
-    conf->limit_nproc = NULL;
-#endif
-
-    conf->limit_req_body = 0;
-    conf->limit_xml_body = AP_LIMIT_UNSET;
-    conf->sec_file = apr_array_make(a, 2, sizeof(ap_conf_vector_t *));
-
-    conf->server_signature = srv_sig_unset;
-
-    conf->add_default_charset = ADD_DEFAULT_CHARSET_UNSET;
-    conf->add_default_charset_name = DEFAULT_ADD_DEFAULT_CHARSET_NAME;
-
-    /* Overriding all negotiation
-     */
-    conf->mime_type = NULL;
-    conf->handler = NULL;
-    conf->output_filters = NULL;
-    conf->input_filters = NULL;
-
-    /*
-     * Flag for use of inodes in ETags.
-     */
-    conf->etag_bits = ETAG_UNSET;
-    conf->etag_add = ETAG_UNSET;
-    conf->etag_remove = ETAG_UNSET;
-
-    return (void *)conf;
-}
-
-/*
- * Overlay one hash table of ct_output_filters onto another
- */
-static void *merge_ct_filters(apr_pool_t *p,
-                              const void *key,
-                              apr_ssize_t klen,
-                              const void *overlay_val,
-                              const void *base_val,
-                              const void *data)
-{
-    ap_filter_rec_t *cur;
-    const ap_filter_rec_t *overlay_info = (const ap_filter_rec_t *)overlay_val;
-    const ap_filter_rec_t *base_info = (const ap_filter_rec_t *)base_val;
-
-    cur = NULL;
-
-    while (overlay_info) {
-        ap_filter_rec_t *new;
-
-        new = apr_pcalloc(p, sizeof(ap_filter_rec_t));
-        new->name = apr_pstrdup(p, overlay_info->name);
-        new->next = cur;
-        cur = new;
-        overlay_info = overlay_info->next;
-    }
-
-    while (base_info) {
-        ap_filter_rec_t *f;
-        int found = 0;
-
-        /* We can't have dups. */
-        f = cur;
-        while (f) {
-            if (!strcasecmp(base_info->name, f->name)) {
-                found = 1;
-                break;
-            }
-
-            f = f->next;
-        }
-
-        if (!found) {
-            f = apr_pcalloc(p, sizeof(ap_filter_rec_t));
-            f->name = apr_pstrdup(p, base_info->name);
-            f->next = cur;
-            cur = f;
-        }
-
-        base_info = base_info->next;
-    }
-
-    return cur;
-}
-
-static void *merge_core_dir_configs(apr_pool_t *a, void *basev, void *newv)
-{
-    core_dir_config *base = (core_dir_config *)basev;
-    core_dir_config *new = (core_dir_config *)newv;
-    core_dir_config *conf;
-    int i;
-
-    /* Create this conf by duplicating the base, replacing elements
-     * (or creating copies for merging) where new-> values exist.
-     */
-    conf = (core_dir_config *)apr_palloc(a, sizeof(core_dir_config));
-    memcpy(conf, base, sizeof(core_dir_config));
-
-    conf->d = new->d;
-    conf->d_is_fnmatch = new->d_is_fnmatch;
-    conf->d_components = new->d_components;
-    conf->r = new->r;
-
-    if (new->opts & OPT_UNSET) {
-        /* there was no explicit setting of new->opts, so we merge
-         * preserve the invariant (opts_add & opts_remove) == 0
-         */
-        conf->opts_add = (conf->opts_add & ~new->opts_remove) | new->opts_add;
-        conf->opts_remove = (conf->opts_remove & ~new->opts_add)
-                            | new->opts_remove;
-        conf->opts = (conf->opts & ~conf->opts_remove) | conf->opts_add;
-        if ((base->opts & OPT_INCNOEXEC) && (new->opts & OPT_INCLUDES)) {
-            conf->opts = (conf->opts & ~OPT_INCNOEXEC) | OPT_INCLUDES;
-        }
-    }
-    else {
-        /* otherwise we just copy, because an explicit opts setting
-         * overrides all earlier +/- modifiers
-         */
-        conf->opts = new->opts;
-        conf->opts_add = new->opts_add;
-        conf->opts_remove = new->opts_remove;
-    }
-
-    if (!(new->override & OR_UNSET)) {
-        conf->override = new->override;
-    }
-
-    if (new->ap_default_type) {
-        conf->ap_default_type = new->ap_default_type;
-    }
-
-    if (new->ap_auth_type) {
-        conf->ap_auth_type = new->ap_auth_type;
-    }
-
-    if (new->ap_auth_name) {
-        conf->ap_auth_name = new->ap_auth_name;
-    }
-
-    if (new->ap_requires) {
-        conf->ap_requires = new->ap_requires;
-    }
-
-    if (conf->response_code_strings == NULL) {
-        conf->response_code_strings = new->response_code_strings;
-    }
-    else if (new->response_code_strings != NULL) {
-        /* If we merge, the merge-result must have it's own array
-         */
-        conf->response_code_strings = apr_palloc(a,
-            sizeof(*conf->response_code_strings) * RESPONSE_CODES);
-        memcpy(conf->response_code_strings, base->response_code_strings,
-               sizeof(*conf->response_code_strings) * RESPONSE_CODES);
-
-        for (i = 0; i < RESPONSE_CODES; ++i) {
-            if (new->response_code_strings[i] != NULL) {
-                conf->response_code_strings[i] = new->response_code_strings[i];
-            }
-        }
-    }
-    /* Otherwise we simply use the base->response_code_strings array
-     */
-
-    if (new->hostname_lookups != HOSTNAME_LOOKUP_UNSET) {
-        conf->hostname_lookups = new->hostname_lookups;
-    }
-
-    if ((new->do_rfc1413 & 2) == 0) {
-        conf->do_rfc1413 = new->do_rfc1413;
-    }
-
-    if ((new->content_md5 & 2) == 0) {
-        conf->content_md5 = new->content_md5;
-    }
-
-    if (new->accept_path_info != 3) {
-        conf->accept_path_info = new->accept_path_info;
-    }
-
-    if (new->use_canonical_name != USE_CANONICAL_NAME_UNSET) {
-        conf->use_canonical_name = new->use_canonical_name;
-    }
-
-#ifdef RLIMIT_CPU
-    if (new->limit_cpu) {
-        conf->limit_cpu = new->limit_cpu;
-    }
-#endif
-
-#if defined(RLIMIT_DATA) || defined(RLIMIT_VMEM) || defined(RLIMIT_AS)
-    if (new->limit_mem) {
-        conf->limit_mem = new->limit_mem;
-    }
-#endif
-
-#ifdef RLIMIT_NPROC
-    if (new->limit_nproc) {
-        conf->limit_nproc = new->limit_nproc;
-    }
-#endif
-
-    if (new->limit_req_body) {
-        conf->limit_req_body = new->limit_req_body;
-    }
-
-    if (new->limit_xml_body != AP_LIMIT_UNSET)
-        conf->limit_xml_body = new->limit_xml_body;
-    else
-        conf->limit_xml_body = base->limit_xml_body;
-
-    if (!conf->sec_file) {
-        conf->sec_file = new->sec_file;
-    }
-    else if (new->sec_file) {
-        /* If we merge, the merge-result must have it's own array
-         */
-        conf->sec_file = apr_array_append(a, base->sec_file, new->sec_file);
-    }
-    /* Otherwise we simply use the base->sec_file array
-     */
-
-    if (new->satisfy != SATISFY_NOSPEC) {
-        conf->satisfy = new->satisfy;
-    }
-
-    if (new->server_signature != srv_sig_unset) {
-        conf->server_signature = new->server_signature;
-    }
-
-    if (new->add_default_charset != ADD_DEFAULT_CHARSET_UNSET) {
-        conf->add_default_charset = new->add_default_charset;
-        conf->add_default_charset_name = new->add_default_charset_name;
-    }
-
-    /* Overriding all negotiation
-     */
-    if (new->mime_type) {
-        conf->mime_type = new->mime_type;
-    }
-
-    if (new->handler) {
-        conf->handler = new->handler;
-    }
-
-    if (new->output_filters) {
-        conf->output_filters = new->output_filters;
-    }
-
-    if (new->input_filters) {
-        conf->input_filters = new->input_filters;
-    }
-
-    if (conf->ct_output_filters && new->ct_output_filters) {
-        conf->ct_output_filters = apr_hash_merge(a,
-                                                 new->ct_output_filters,
-                                                 conf->ct_output_filters,
-                                                 merge_ct_filters,
-                                                 NULL);
-    }
-    else if (new->ct_output_filters) {
-        conf->ct_output_filters = apr_hash_copy(a, new->ct_output_filters);
-    }
-    else if (conf->ct_output_filters) {
-        /* That memcpy above isn't enough. */
-        conf->ct_output_filters = apr_hash_copy(a, base->ct_output_filters);
-    }
-
-    /*
-     * Now merge the setting of the FileETag directive.
-     */
-    if (new->etag_bits == ETAG_UNSET) {
-        conf->etag_add =
-            (conf->etag_add & (~ new->etag_remove)) | new->etag_add;
-        conf->etag_remove =
-            (conf->opts_remove & (~ new->etag_add)) | new->etag_remove;
-        conf->etag_bits =
-            (conf->etag_bits & (~ conf->etag_remove)) | conf->etag_add;
-    }
-    else {
-        conf->etag_bits = new->etag_bits;
-        conf->etag_add = new->etag_add;
-        conf->etag_remove = new->etag_remove;
-    }
-
-    if (conf->etag_bits != ETAG_NONE) {
-        conf->etag_bits &= (~ ETAG_NONE);
-    }
-
-    return (void*)conf;
-}
-
-static void *create_core_server_config(apr_pool_t *a, server_rec *s)
-{
-    core_server_config *conf;
-    int is_virtual = s->is_virtual;
-
-    conf = (core_server_config *)apr_pcalloc(a, sizeof(core_server_config));
-
-#ifdef GPROF
-    conf->gprof_dir = NULL;
-#endif
-
-    conf->access_name = is_virtual ? NULL : DEFAULT_ACCESS_FNAME;
-    conf->ap_document_root = is_virtual ? NULL : DOCUMENT_LOCATION;
-    conf->sec_dir = apr_array_make(a, 40, sizeof(ap_conf_vector_t *));
-    conf->sec_url = apr_array_make(a, 40, sizeof(ap_conf_vector_t *));
-
-    return (void *)conf;
-}
-
-static void *merge_core_server_configs(apr_pool_t *p, void *basev, void *virtv)
-{
-    core_server_config *base = (core_server_config *)basev;
-    core_server_config *virt = (core_server_config *)virtv;
-    core_server_config *conf;
-
-    conf = (core_server_config *)apr_palloc(p, sizeof(core_server_config));
-    memcpy(conf, virt, sizeof(core_server_config));
-
-    if (!conf->access_name) {
-        conf->access_name = base->access_name;
-    }
-
-    if (!conf->ap_document_root) {
-        conf->ap_document_root = base->ap_document_root;
-    }
-
-    conf->sec_dir = apr_array_append(p, base->sec_dir, virt->sec_dir);
-    conf->sec_url = apr_array_append(p, base->sec_url, virt->sec_url);
-
-    return conf;
-}
-
-/* Add per-directory configuration entry (for <directory> section);
- * these are part of the core server config.
- */
-
-AP_CORE_DECLARE(void) ap_add_per_dir_conf(server_rec *s, void *dir_config)
-{
-    core_server_config *sconf = ap_get_module_config(s->module_config,
-                                                     &core_module);
-    void **new_space = (void **)apr_array_push(sconf->sec_dir);
-
-    *new_space = dir_config;
-}
-
-AP_CORE_DECLARE(void) ap_add_per_url_conf(server_rec *s, void *url_config)
-{
-    core_server_config *sconf = ap_get_module_config(s->module_config,
-                                                     &core_module);
-    void **new_space = (void **)apr_array_push(sconf->sec_url);
-
-    *new_space = url_config;
-}
-
-AP_CORE_DECLARE(void) ap_add_file_conf(core_dir_config *conf, void *url_config)
-{
-    void **new_space = (void **)apr_array_push(conf->sec_file);
-
-    *new_space = url_config;
-}
-
-/* We need to do a stable sort, qsort isn't stable.  So to make it stable
- * we'll be maintaining the original index into the list, and using it
- * as the minor key during sorting.  The major key is the number of
- * components (where the root component is zero).
- */
-struct reorder_sort_rec {
-    ap_conf_vector_t *elt;
-    int orig_index;
-};
-
-static int reorder_sorter(const void *va, const void *vb)
-{
-    const struct reorder_sort_rec *a = va;
-    const struct reorder_sort_rec *b = vb;
-    core_dir_config *core_a;
-    core_dir_config *core_b;
-
-    core_a = ap_get_module_config(a->elt, &core_module);
-    core_b = ap_get_module_config(b->elt, &core_module);
-
-    /* a regex always sorts after a non-regex
-     */
-    if (!core_a->r && core_b->r) {
-        return -1;
-    }
-    else if (core_a->r && !core_b->r) {
-        return 1;
-    }
-
-    /* we always sort next by the number of components
-     */
-    if (core_a->d_components < core_b->d_components) {
-        return -1;
-    }
-    else if (core_a->d_components > core_b->d_components) {
-        return 1;
-    }
-
-    /* They have the same number of components, we now have to compare
-     * the minor key to maintain the original order (from the config.)
-     */
-    return a->orig_index - b->orig_index;
-}
-
-void ap_core_reorder_directories(apr_pool_t *p, server_rec *s)
-{
-    core_server_config *sconf;
-    apr_array_header_t *sec_dir;
-    struct reorder_sort_rec *sortbin;
-    int nelts;
-    ap_conf_vector_t **elts;
-    int i;
-    apr_pool_t *tmp;
-
-    sconf = ap_get_module_config(s->module_config, &core_module);
-    sec_dir = sconf->sec_dir;
-    nelts = sec_dir->nelts;
-    elts = (ap_conf_vector_t **)sec_dir->elts;
-
-    if (!nelts) {
-        /* simple case of already being sorted... */
-        /* We're not checking this condition to be fast... we're checking
-         * it to avoid trying to palloc zero bytes, which can trigger some
-         * memory debuggers to barf
-         */
-        return;
-    }
-
-    /* we have to allocate tmp space to do a stable sort */
-    apr_pool_create(&tmp, p);
-    sortbin = apr_palloc(tmp, sec_dir->nelts * sizeof(*sortbin));
-    for (i = 0; i < nelts; ++i) {
-        sortbin[i].orig_index = i;
-        sortbin[i].elt = elts[i];
-    }
-
-    qsort(sortbin, nelts, sizeof(*sortbin), reorder_sorter);
-
-    /* and now copy back to the original array */
-    for (i = 0; i < nelts; ++i) {
-        elts[i] = sortbin[i].elt;
-    }
-
-    apr_pool_destroy(tmp);
-}
-
-/*****************************************************************
- *
- * There are some elements of the core config structures in which
- * other modules have a legitimate interest (this is ugly, but necessary
- * to preserve NCSA back-compatibility).  So, we have a bunch of accessors
- * here...
- */
-
-AP_DECLARE(int) ap_allow_options(request_rec *r)
-{
-    core_dir_config *conf =
-      (core_dir_config *)ap_get_module_config(r->per_dir_config, &core_module);
-
-    return conf->opts;
-}
-
-AP_DECLARE(int) ap_allow_overrides(request_rec *r)
-{
-    core_dir_config *conf;
-    conf = (core_dir_config *)ap_get_module_config(r->per_dir_config,
-                                                   &core_module);
-
-    return conf->override;
-}
-
-AP_DECLARE(const char *) ap_auth_type(request_rec *r)
-{
-    core_dir_config *conf;
-
-    conf = (core_dir_config *)ap_get_module_config(r->per_dir_config,
-                                                   &core_module);
-
-    return conf->ap_auth_type;
-}
-
-AP_DECLARE(const char *) ap_auth_name(request_rec *r)
-{
-    core_dir_config *conf;
-
-    conf = (core_dir_config *)ap_get_module_config(r->per_dir_config,
-                                                   &core_module);
-
-    return conf->ap_auth_name;
-}
-
-AP_DECLARE(const char *) ap_default_type(request_rec *r)
-{
-    core_dir_config *conf;
-
-    conf = (core_dir_config *)ap_get_module_config(r->per_dir_config,
-                                                   &core_module);
-
-    return conf->ap_default_type
-               ? conf->ap_default_type
-               : DEFAULT_CONTENT_TYPE;
-}
-
-AP_DECLARE(const char *) ap_document_root(request_rec *r) /* Don't use this! */
-{
-    core_server_config *conf;
-
-    conf = (core_server_config *)ap_get_module_config(r->server->module_config,
-                                                      &core_module);
-
-    return conf->ap_document_root;
-}
-
-AP_DECLARE(const apr_array_header_t *) ap_requires(request_rec *r)
-{
-    core_dir_config *conf;
-
-    conf = (core_dir_config *)ap_get_module_config(r->per_dir_config,
-                                                   &core_module);
-
-    return conf->ap_requires;
-}
-
-AP_DECLARE(int) ap_satisfies(request_rec *r)
-{
-    core_dir_config *conf;
-
-    conf = (core_dir_config *)ap_get_module_config(r->per_dir_config,
-                                                   &core_module);
-
-    return conf->satisfy;
-}
-
-/* Should probably just get rid of this... the only code that cares is
- * part of the core anyway (and in fact, it isn't publicised to other
- * modules).
- */
-
-char *ap_response_code_string(request_rec *r, int error_index)
-{
-    core_dir_config *conf;
-
-    conf = (core_dir_config *)ap_get_module_config(r->per_dir_config,
-                                                   &core_module);
-
-    if (conf->response_code_strings == NULL) {
-        return NULL;
-    }
-
-    return conf->response_code_strings[error_index];
-}
-
-
-/* Code from Harald Hanche-Olsen <hanche@imf.unit.no> */
-static APR_INLINE void do_double_reverse (conn_rec *conn)
-{
-    apr_sockaddr_t *sa;
-    apr_status_t rv;
-
-    if (conn->double_reverse) {
-        /* already done */
-        return;
-    }
-
-    if (conn->remote_host == NULL || conn->remote_host[0] == '\0') {
-        /* single reverse failed, so don't bother */
-        conn->double_reverse = -1;
-        return;
-    }
-
-    rv = apr_sockaddr_info_get(&sa, conn->remote_host, APR_UNSPEC, 0, 0, conn->pool);
-    if (rv == APR_SUCCESS) {
-        while (sa) {
-            if (apr_sockaddr_equal(sa, conn->remote_addr)) {
-                conn->double_reverse = 1;
-                return;
-            }
-
-            sa = sa->next;
-        }
-    }
-
-    conn->double_reverse = -1;
-}
-
-AP_DECLARE(const char *) ap_get_remote_host(conn_rec *conn, void *dir_config,
-                                            int type, int *str_is_ip)
-{
-    int hostname_lookups;
-
-    if (str_is_ip) { /* if caller wants to know */
-        *str_is_ip = 0;
-    }
-
-    /* If we haven't checked the host name, and we want to */
-    if (dir_config) {
-        hostname_lookups =
-            ((core_dir_config *)ap_get_module_config(dir_config, &core_module))
-            ->hostname_lookups;
-
-        if (hostname_lookups == HOSTNAME_LOOKUP_UNSET) {
-            hostname_lookups = HOSTNAME_LOOKUP_OFF;
-        }
-    }
-    else {
-        /* the default */
-        hostname_lookups = HOSTNAME_LOOKUP_OFF;
-    }
-
-    if (type != REMOTE_NOLOOKUP
-        && conn->remote_host == NULL
-        && (type == REMOTE_DOUBLE_REV
-        || hostname_lookups != HOSTNAME_LOOKUP_OFF)) {
-
-        if (apr_getnameinfo(&conn->remote_host, conn->remote_addr, 0)
-            == APR_SUCCESS) {
-            ap_str_tolower(conn->remote_host);
-
-            if (hostname_lookups == HOSTNAME_LOOKUP_DOUBLE) {
-                do_double_reverse(conn);
-                if (conn->double_reverse != 1) {
-                    conn->remote_host = NULL;
-                }
-            }
-        }
-
-        /* if failed, set it to the NULL string to indicate error */
-        if (conn->remote_host == NULL) {
-            conn->remote_host = "";
-        }
-    }
-
-    if (type == REMOTE_DOUBLE_REV) {
-        do_double_reverse(conn);
-        if (conn->double_reverse == -1) {
-            return NULL;
-        }
-    }
-
-    /*
-     * Return the desired information; either the remote DNS name, if found,
-     * or either NULL (if the hostname was requested) or the IP address
-     * (if any identifier was requested).
-     */
-    if (conn->remote_host != NULL && conn->remote_host[0] != '\0') {
-        return conn->remote_host;
-    }
-    else {
-        if (type == REMOTE_HOST || type == REMOTE_DOUBLE_REV) {
-            return NULL;
-        }
-        else {
-            if (str_is_ip) { /* if caller wants to know */
-                *str_is_ip = 1;
-            }
-
-            return conn->remote_ip;
-        }
-    }
-}
-
-AP_DECLARE(const char *) ap_get_remote_logname(request_rec *r)
-{
-    core_dir_config *dir_conf;
-
-    if (r->connection->remote_logname != NULL) {
-        return r->connection->remote_logname;
-    }
-
-    /* If we haven't checked the identity, and we want to */
-    dir_conf = (core_dir_config *)ap_get_module_config(r->per_dir_config,
-                                                       &core_module);
-
-    if (dir_conf->do_rfc1413 & 1) {
-        return ap_rfc1413(r->connection, r->server);
-    }
-    else {
-        return NULL;
-    }
-}
-
-/* There are two options regarding what the "name" of a server is.  The
- * "canonical" name as defined by ServerName and Port, or the "client's
- * name" as supplied by a possible Host: header or full URI.  We never
- * trust the port passed in the client's headers, we always use the
- * port of the actual socket.
- *
- * The DNS option to UseCanonicalName causes this routine to do a
- * reverse lookup on the local IP address of the connection and use
- * that for the ServerName. This makes its value more reliable while
- * at the same time allowing Demon's magic virtual hosting to work.
- * The assumption is that DNS lookups are sufficiently quick...
- * -- fanf 1998-10-03
- */
-AP_DECLARE(const char *) ap_get_server_name(request_rec *r)
-{
-    conn_rec *conn = r->connection;
-    core_dir_config *d;
-
-    d = (core_dir_config *)ap_get_module_config(r->per_dir_config,
-                                                &core_module);
-
-    if (d->use_canonical_name == USE_CANONICAL_NAME_OFF) {
-        return r->hostname ? r->hostname : r->server->server_hostname;
-    }
-
-    if (d->use_canonical_name == USE_CANONICAL_NAME_DNS) {
-        if (conn->local_host == NULL) {
-            if (apr_getnameinfo(&conn->local_host,
-                                conn->local_addr, 0) != APR_SUCCESS)
-                conn->local_host = apr_pstrdup(conn->pool,
-                                               r->server->server_hostname);
-            else {
-                ap_str_tolower(conn->local_host);
-            }
-        }
-
-        return conn->local_host;
-    }
-
-    /* default */
-    return r->server->server_hostname;
-}
-
-AP_DECLARE(apr_port_t) ap_get_server_port(const request_rec *r)
-{
-    apr_port_t port;
-    core_dir_config *d =
-      (core_dir_config *)ap_get_module_config(r->per_dir_config, &core_module);
-
-    if (d->use_canonical_name == USE_CANONICAL_NAME_OFF
-        || d->use_canonical_name == USE_CANONICAL_NAME_DNS) {
-
-        /* With UseCanonicalName off Apache will form self-referential
-         * URLs using the hostname and port supplied by the client if
-         * any are supplied (otherwise it will use the canonical name).
-         */
-        port = r->parsed_uri.port ? r->parsed_uri.port :
-               r->server->port ? r->server->port :
-               ap_default_port(r);
-    }
-    else { /* d->use_canonical_name == USE_CANONICAL_NAME_ON */
-
-        /* With UseCanonicalName on (and in all versions prior to 1.3)
-         * Apache will use the hostname and port specified in the
-         * ServerName directive to construct a canonical name for the
-         * server. (If no port was specified in the ServerName
-         * directive, Apache uses the port supplied by the client if
-         * any is supplied, and finally the default port for the protocol
-         * used.
-         */
-        port = r->server->port ? r->server->port :
-               r->connection->local_addr->port ? r->connection->local_addr->port :
-               ap_default_port(r);
-    }
-
-    /* default */
-    return port;
-}
-
-AP_DECLARE(char *) ap_construct_url(apr_pool_t *p, const char *uri,
-                                    request_rec *r)
-{
-    unsigned port = ap_get_server_port(r);
-    const char *host = ap_get_server_name(r);
-
-    if (ap_is_default_port(port, r)) {
-        return apr_pstrcat(p, ap_http_method(r), "://", host, uri, NULL);
-    }
-
-    return apr_psprintf(p, "%s://%s:%u%s", ap_http_method(r), host, port, uri);
-}
-
-AP_DECLARE(apr_off_t) ap_get_limit_req_body(const request_rec *r)
-{
-    core_dir_config *d =
-      (core_dir_config *)ap_get_module_config(r->per_dir_config, &core_module);
-
-    return d->limit_req_body;
-}
-
-
-/*****************************************************************
- *
- * Commands... this module handles almost all of the NCSA httpd.conf
- * commands, but most of the old srm.conf is in the the modules.
- */
-
-
-/* returns a parent if it matches the given directive */
-static const ap_directive_t * find_parent(const ap_directive_t *dirp,
-                                          const char *what)
-{
-    while (dirp->parent != NULL) {
-        dirp = dirp->parent;
-
-        /* ### it would be nice to have atom-ized directives */
-        if (strcasecmp(dirp->directive, what) == 0)
-            return dirp;
-    }
-
-    return NULL;
-}
-
-AP_DECLARE(const char *) ap_check_cmd_context(cmd_parms *cmd,
-                                              unsigned forbidden)
-{
-    const char *gt = (cmd->cmd->name[0] == '<'
-                      && cmd->cmd->name[strlen(cmd->cmd->name)-1] != '>')
-                         ? ">" : "";
-    const ap_directive_t *found;
-
-    if ((forbidden & NOT_IN_VIRTUALHOST) && cmd->server->is_virtual) {
-        return apr_pstrcat(cmd->pool, cmd->cmd->name, gt,
-                           " cannot occur within <VirtualHost> section", NULL);
-    }
-
-    if ((forbidden & NOT_IN_LIMIT) && cmd->limited != -1) {
-        return apr_pstrcat(cmd->pool, cmd->cmd->name, gt,
-                           " cannot occur within <Limit> section", NULL);
-    }
-
-    if ((forbidden & NOT_IN_DIR_LOC_FILE) == NOT_IN_DIR_LOC_FILE
-        && cmd->path != NULL) {
-        return apr_pstrcat(cmd->pool, cmd->cmd->name, gt,
-                           " cannot occur within <Directory/Location/Files> "
-                           "section", NULL);
-    }
-
-    if (((forbidden & NOT_IN_DIRECTORY)
-         && ((found = find_parent(cmd->directive, "<Directory"))
-             || (found = find_parent(cmd->directive, "<DirectoryMatch"))))
-        || ((forbidden & NOT_IN_LOCATION)
-            && ((found = find_parent(cmd->directive, "<Location"))
-                || (found = find_parent(cmd->directive, "<LocationMatch"))))
-        || ((forbidden & NOT_IN_FILES)
-            && ((found = find_parent(cmd->directive, "<Files"))
-                || (found = find_parent(cmd->directive, "<FilesMatch"))))) {
-        return apr_pstrcat(cmd->pool, cmd->cmd->name, gt,
-                           " cannot occur within ", found->directive,
-                           "> section", NULL);
-    }
-
-    return NULL;
-}
-
-static const char *set_access_name(cmd_parms *cmd, void *dummy,
-                                   const char *arg)
-{
-    void *sconf = cmd->server->module_config;
-    core_server_config *conf = ap_get_module_config(sconf, &core_module);
-
-    const char *err = ap_check_cmd_context(cmd,
-                                           NOT_IN_DIR_LOC_FILE|NOT_IN_LIMIT);
-    if (err != NULL) {
-        return err;
-    }
-
-    conf->access_name = apr_pstrdup(cmd->pool, arg);
-    return NULL;
-}
-
-#ifdef GPROF
-static const char *set_gprof_dir(cmd_parms *cmd, void *dummy, const char *arg)
-{
-    void *sconf = cmd->server->module_config;
-    core_server_config *conf = ap_get_module_config(sconf, &core_module);
-
-    const char *err = ap_check_cmd_context(cmd,
-                                           NOT_IN_DIR_LOC_FILE|NOT_IN_LIMIT);
-    if (err != NULL) {
-        return err;
-    }
-
-    conf->gprof_dir = apr_pstrdup(cmd->pool, arg);
-    return NULL;
-}
-#endif /*GPROF*/
-
-static const char *set_add_default_charset(cmd_parms *cmd,
-                                           void *d_, const char *arg)
-{
-    core_dir_config *d = d_;
-
-    const char *err = ap_check_cmd_context(cmd, NOT_IN_LIMIT);
-    if (err != NULL) {
-        return err;
-    }
-
-    if (!strcasecmp(arg, "Off")) {
-       d->add_default_charset = ADD_DEFAULT_CHARSET_OFF;
-    }
-    else if (!strcasecmp(arg, "On")) {
-       d->add_default_charset = ADD_DEFAULT_CHARSET_ON;
-       d->add_default_charset_name = DEFAULT_ADD_DEFAULT_CHARSET_NAME;
-    }
-    else {
-       d->add_default_charset = ADD_DEFAULT_CHARSET_ON;
-       d->add_default_charset_name = arg;
-    }
-
-    return NULL;
-}
-
-static const char *set_document_root(cmd_parms *cmd, void *dummy,
-                                     const char *arg)
-{
-    void *sconf = cmd->server->module_config;
-    core_server_config *conf = ap_get_module_config(sconf, &core_module);
-
-    const char *err = ap_check_cmd_context(cmd,
-                                           NOT_IN_DIR_LOC_FILE|NOT_IN_LIMIT);
-    if (err != NULL) {
-        return err;
-    }
-
-    /* TODO: ap_configtestonly && ap_docrootcheck && */
-    /* XXX Shouldn't this be relative to ServerRoot ??? */
-    if (apr_filepath_merge((char**)&conf->ap_document_root, NULL, arg,
-                           APR_FILEPATH_TRUENAME, cmd->pool) != APR_SUCCESS
-        || !ap_is_directory(cmd->pool, arg)) {
-        if (cmd->server->is_virtual) {
-            ap_log_perror(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0,
-                          cmd->pool,
-                          "Warning: DocumentRoot [%s] does not exist",
-                          arg);
-            conf->ap_document_root = arg;
-        }
-        else {
-            return "DocumentRoot must be a directory";
-        }
-    }
-    return NULL;
-}
-
-AP_DECLARE(void) ap_custom_response(request_rec *r, int status,
-                                    const char *string)
-{
-    core_dir_config *conf =
-        ap_get_module_config(r->per_dir_config, &core_module);
-    int idx;
-
-    if(conf->response_code_strings == NULL) {
-        conf->response_code_strings =
-            apr_pcalloc(r->pool,
-                        sizeof(*conf->response_code_strings) * RESPONSE_CODES);
-    }
-
-    idx = ap_index_of_response(status);
-
-    conf->response_code_strings[idx] =
-       ((ap_is_url(string) || (*string == '/')) && (*string != '"')) ?
-       apr_pstrdup(r->pool, string) : apr_pstrcat(r->pool, "\"", string, NULL);
-}
-
-static const char *set_error_document(cmd_parms *cmd, void *conf_,
-                                      const char *errno_str, const char *msg)
-{
-    core_dir_config *conf = conf_;
-    int error_number, index_number, idx500;
-    enum { MSG, LOCAL_PATH, REMOTE_PATH } what = MSG;
-
-    const char *err = ap_check_cmd_context(cmd, NOT_IN_LIMIT);
-    if (err != NULL) {
-        return err;
-    }
-
-    /* 1st parameter should be a 3 digit number, which we recognize;
-     * convert it into an array index
-     */
-    error_number = atoi(errno_str);
-    idx500 = ap_index_of_response(HTTP_INTERNAL_SERVER_ERROR);
-
-    if (error_number == HTTP_INTERNAL_SERVER_ERROR) {
-        index_number = idx500;
-    }
-    else if ((index_number = ap_index_of_response(error_number)) == idx500) {
-        return apr_pstrcat(cmd->pool, "Unsupported HTTP response code ",
-                           errno_str, NULL);
-    }
-
-    /* Heuristic to determine second argument. */
-    if (ap_strchr_c(msg,' '))
-        what = MSG;
-    else if (msg[0] == '/')
-        what = LOCAL_PATH;
-    else if (ap_is_url(msg))
-        what = REMOTE_PATH;
-    else
-        what = MSG;
-
-    /* The entry should be ignored if it is a full URL for a 401 error */
-
-    if (error_number == 401 && what == REMOTE_PATH) {
-        ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_NOTICE, 0, cmd->server,
-                     "cannot use a full URL in a 401 ErrorDocument "
-                     "directive --- ignoring!");
-    }
-    else { /* Store it... */
-        if (conf->response_code_strings == NULL) {
-            conf->response_code_strings =
-                apr_pcalloc(cmd->pool,
-                            sizeof(*conf->response_code_strings) *
-                            RESPONSE_CODES);
-        }
-
-        /* hack. Prefix a " if it is a msg; as that is what
-         * http_protocol.c relies on to distinguish between
-         * a msg and a (local) path.
-         */
-        conf->response_code_strings[index_number] = (what == MSG) ?
-                apr_pstrcat(cmd->pool, "\"",msg,NULL) :
-                apr_pstrdup(cmd->pool, msg);
-    }
-
-    return NULL;
-}
-
-static const char *set_override(cmd_parms *cmd, void *d_, const char *l)
-{
-    core_dir_config *d = d_;
-    char *w;
-
-    const char *err = ap_check_cmd_context(cmd, NOT_IN_LIMIT);
-    if (err != NULL) {
-        return err;
-    }
-
-    d->override = OR_NONE;
-    while (l[0]) {
-        w = ap_getword_conf(cmd->pool, &l);
-        if (!strcasecmp(w, "Limit")) {
-            d->override |= OR_LIMIT;
-        }
-        else if (!strcasecmp(w, "Options")) {
-            d->override |= OR_OPTIONS;
-        }
-        else if (!strcasecmp(w, "FileInfo")) {
-            d->override |= OR_FILEINFO;
-        }
-        else if (!strcasecmp(w, "AuthConfig")) {
-            d->override |= OR_AUTHCFG;
-        }
-        else if (!strcasecmp(w, "Indexes")) {
-            d->override |= OR_INDEXES;
-        }
-        else if (!strcasecmp(w, "None")) {
-            d->override = OR_NONE;
-        }
-        else if (!strcasecmp(w, "All")) {
-            d->override = OR_ALL;
-        }
-        else {
-            return apr_pstrcat(cmd->pool, "Illegal override option ", w, NULL);
-        }
-
-        d->override &= ~OR_UNSET;
-    }
-
-    return NULL;
-}
-
-static const char *set_options(cmd_parms *cmd, void *d_, const char *l)
-{
-    core_dir_config *d = d_;
-    allow_options_t opt;
-    int first = 1;
-    char action;
-
-    while (l[0]) {
-        char *w = ap_getword_conf(cmd->pool, &l);
-        action = '\0';
-
-        if (*w == '+' || *w == '-') {
-            action = *(w++);
-        }
-        else if (first) {
-              d->opts = OPT_NONE;
-            first = 0;
-        }
-
-        if (!strcasecmp(w, "Indexes")) {
-            opt = OPT_INDEXES;
-        }
-        else if (!strcasecmp(w, "Includes")) {
-            opt = OPT_INCLUDES;
-        }
-        else if (!strcasecmp(w, "IncludesNOEXEC")) {
-            opt = (OPT_INCLUDES | OPT_INCNOEXEC);
-        }
-        else if (!strcasecmp(w, "FollowSymLinks")) {
-            opt = OPT_SYM_LINKS;
-        }
-        else if (!strcasecmp(w, "SymLinksIfOwnerMatch")) {
-            opt = OPT_SYM_OWNER;
-        }
-        else if (!strcasecmp(w, "execCGI")) {
-            opt = OPT_EXECCGI;
-        }
-        else if (!strcasecmp(w, "MultiViews")) {
-            opt = OPT_MULTI;
-        }
-        else if (!strcasecmp(w, "RunScripts")) { /* AI backcompat. Yuck */
-            opt = OPT_MULTI|OPT_EXECCGI;
-        }
-        else if (!strcasecmp(w, "None")) {
-            opt = OPT_NONE;
-        }
-        else if (!strcasecmp(w, "All")) {
-            opt = OPT_ALL;
-        }
-        else {
-            return apr_pstrcat(cmd->pool, "Illegal option ", w, NULL);
-        }
-
-        /* we ensure the invariant (d->opts_add & d->opts_remove) == 0 */
-        if (action == '-') {
-            d->opts_remove |= opt;
-            d->opts_add &= ~opt;
-            d->opts &= ~opt;
-        }
-        else if (action == '+') {
-            d->opts_add |= opt;
-            d->opts_remove &= ~opt;
-            d->opts |= opt;
-        }
-        else {
-            d->opts |= opt;
-        }
-    }
-
-    return NULL;
-}
-
-/*
- * Note what data should be used when forming file ETag values.
- * It would be nicer to do this as an ITERATE, but then we couldn't
- * remember the +/- state properly.
- */
-static const char *set_etag_bits(cmd_parms *cmd, void *mconfig,
-                                 const char *args_p)
-{
-    core_dir_config *cfg;
-    etag_components_t bit;
-    char action;
-    char *token;
-    const char *args;
-    int valid;
-    int first;
-    int explicit;
-
-    cfg = (core_dir_config *)mconfig;
-
-    args = args_p;
-    first = 1;
-    explicit = 0;
-    while (args[0] != '\0') {
-        action = '*';
-        bit = ETAG_UNSET;
-        valid = 1;
-        token = ap_getword_conf(cmd->pool, &args);
-        if ((*token == '+') || (*token == '-')) {
-            action = *token;
-            token++;
-        }
-        else {
-            /*
-             * The occurrence of an absolute setting wipes
-             * out any previous relative ones.  The first such
-             * occurrence forgets any inherited ones, too.
-             */
-            if (first) {
-                cfg->etag_bits = ETAG_UNSET;
-                cfg->etag_add = ETAG_UNSET;
-                cfg->etag_remove = ETAG_UNSET;
-                first = 0;
-            }
-        }
-
-        if (strcasecmp(token, "None") == 0) {
-            if (action != '*') {
-                valid = 0;
-            }
-            else {
-                cfg->etag_bits = bit = ETAG_NONE;
-                explicit = 1;
-            }
-        }
-        else if (strcasecmp(token, "All") == 0) {
-            if (action != '*') {
-                valid = 0;
-            }
-            else {
-                explicit = 1;
-                cfg->etag_bits = bit = ETAG_ALL;
-            }
-        }
-        else if (strcasecmp(token, "Size") == 0) {
-            bit = ETAG_SIZE;
-        }
-        else if ((strcasecmp(token, "LMTime") == 0)
-                 || (strcasecmp(token, "MTime") == 0)
-                 || (strcasecmp(token, "LastModified") == 0)) {
-            bit = ETAG_MTIME;
-        }
-        else if (strcasecmp(token, "INode") == 0) {
-            bit = ETAG_INODE;
-        }
-        else {
-            return apr_pstrcat(cmd->pool, "Unknown keyword '",
-                               token, "' for ", cmd->cmd->name,
-                               " directive", NULL);
-        }
-
-        if (! valid) {
-            return apr_pstrcat(cmd->pool, cmd->cmd->name, " keyword '",
-                               token, "' cannot be used with '+' or '-'",
-                               NULL);
-        }
-
-        if (action == '+') {
-            /*
-             * Make sure it's in the 'add' list and absent from the
-             * 'subtract' list.
-             */
-            cfg->etag_add |= bit;
-            cfg->etag_remove &= (~ bit);
-        }
-        else if (action == '-') {
-            cfg->etag_remove |= bit;
-            cfg->etag_add &= (~ bit);
-        }
-        else {
-            /*
-             * Non-relative values wipe out any + or - values
-             * accumulated so far.
-             */
-            cfg->etag_bits |= bit;
-            cfg->etag_add = ETAG_UNSET;
-            cfg->etag_remove = ETAG_UNSET;
-            explicit = 1;
-        }
-    }
-
-    /*
-     * Any setting at all will clear the 'None' and 'Unset' bits.
-     */
-
-    if (cfg->etag_add != ETAG_UNSET) {
-        cfg->etag_add &= (~ ETAG_UNSET);
-    }
-
-    if (cfg->etag_remove != ETAG_UNSET) {
-        cfg->etag_remove &= (~ ETAG_UNSET);
-    }
-
-    if (explicit) {
-        cfg->etag_bits &= (~ ETAG_UNSET);
-
-        if ((cfg->etag_bits & ETAG_NONE) != ETAG_NONE) {
-            cfg->etag_bits &= (~ ETAG_NONE);
-        }
-    }
-
-    return NULL;
-}
-
-static const char *satisfy(cmd_parms *cmd, void *c_, const char *arg)
-{
-    core_dir_config *c = c_;
-
-    if (!strcasecmp(arg, "all")) {
-        c->satisfy = SATISFY_ALL;
-    }
-    else if (!strcasecmp(arg, "any")) {
-        c->satisfy = SATISFY_ANY;
-    }
-    else {
-        return "Satisfy either 'any' or 'all'.";
-    }
-
-    return NULL;
-}
-
-static const char *require(cmd_parms *cmd, void *c_, const char *arg)
-{
-    require_line *r;
-    core_dir_config *c = c_;
-
-    if (!c->ap_requires) {
-        c->ap_requires = apr_array_make(cmd->pool, 2, sizeof(require_line));
-    }
-
-    r = (require_line *)apr_array_push(c->ap_requires);
-    r->requirement = apr_pstrdup(cmd->pool, arg);
-    r->method_mask = cmd->limited;
-
-    return NULL;
-}
-
-AP_CORE_DECLARE_NONSTD(const char *) ap_limit_section(cmd_parms *cmd,
-                                                      void *dummy,
-                                                      const char *arg)
-{
-    const char *limited_methods = ap_getword(cmd->pool, &arg, '>');
-    void *tog = cmd->cmd->cmd_data;
-    apr_int64_t limited = 0;
-    const char *errmsg;
-
-    const char *err = ap_check_cmd_context(cmd, NOT_IN_LIMIT);
-    if (err != NULL) {
-        return err;
-    }
-
-    while (limited_methods[0]) {
-        char *method = ap_getword_conf(cmd->pool, &limited_methods);
-        int methnum;
-
-        /* check for builtin or module registered method number */
-        methnum = ap_method_number_of(method);
-
-        if (methnum == M_TRACE && !tog) {
-            return "TRACE cannot be controlled by <Limit>";
-        }
-        else if (methnum == M_INVALID) {
-            /* method has not been registered yet, but resorce restriction
-             * is always checked before method handling, so register it.
-             */
-            methnum = ap_method_register(cmd->pool, method);
-        }
-
-        limited |= (AP_METHOD_BIT << methnum);
-    }
-
-    /* Killing two features with one function,
-     * if (tog == NULL) <Limit>, else <LimitExcept>
-     */
-    cmd->limited = tog ? ~limited : limited;
-
-    errmsg = ap_walk_config(cmd->directive->first_child, cmd, cmd->context);
-
-    cmd->limited = -1;
-
-    return errmsg;
-}
-
-/* XXX: Bogus - need to do this differently (at least OS2/Netware suffer
- * the same problem!!!
- * We use this in <DirectoryMatch> and <FilesMatch>, to ensure that
- * people don't get bitten by wrong-cased regex matches
- */
-
-#ifdef WIN32
-#define USE_ICASE REG_ICASE
-#else
-#define USE_ICASE 0
-#endif
-
-/*
- * Report a missing-'>' syntax error.
- */
-static char *unclosed_directive(cmd_parms *cmd)
-{
-    return apr_pstrcat(cmd->pool, cmd->cmd->name,
-                       "> directive missing closing '>'", NULL);
-}
-
-static const char *dirsection(cmd_parms *cmd, void *mconfig, const char *arg)
-{
-    const char *errmsg;
-    const char *endp = ap_strrchr_c(arg, '>');
-    int old_overrides = cmd->override;
-    char *old_path = cmd->path;
-    core_dir_config *conf;
-    ap_conf_vector_t *new_dir_conf = ap_create_per_dir_config(cmd->pool);
-    regex_t *r = NULL;
-    const command_rec *thiscmd = cmd->cmd;
-
-    const char *err = ap_check_cmd_context(cmd,
-                                           NOT_IN_DIR_LOC_FILE|NOT_IN_LIMIT);
-    if (err != NULL) {
-        return err;
-    }
-
-    if (endp == NULL) {
-        return unclosed_directive(cmd);
-    }
-
-    arg = apr_pstrndup(cmd->pool, arg, endp - arg);
-
-    if (!arg) {
-        if (thiscmd->cmd_data)
-            return "<DirectoryMatch > block must specify a path";
-        else
-            return "<Directory > block must specify a path";
-    }
-
-    cmd->path = ap_getword_conf(cmd->pool, &arg);
-    cmd->override = OR_ALL|ACCESS_CONF;
-
-    if (!strcmp(cmd->path, "~")) {
-        cmd->path = ap_getword_conf(cmd->pool, &arg);
-        if (!cmd->path)
-            return "<Directory ~ > block must specify a path";
-        r = ap_pregcomp(cmd->pool, cmd->path, REG_EXTENDED|USE_ICASE);
-    }
-    else if (thiscmd->cmd_data) { /* <DirectoryMatch> */
-        r = ap_pregcomp(cmd->pool, cmd->path, REG_EXTENDED|USE_ICASE);
-    }
-    else if (!strcmp(cmd->path, "/") == 0)
-    {
-        char *newpath;
-
-        /*
-         * Ensure that the pathname is canonical, and append the trailing /
-         */
-        if (apr_filepath_merge(&newpath, NULL, cmd->path,
-                               APR_FILEPATH_TRUENAME, cmd->pool) != APR_SUCCESS) {
-            return apr_pstrcat(cmd->pool, "<Directory \"", cmd->path,
-                               "\"> path is invalid.", NULL);
-        }
-
-        cmd->path = newpath;
-        if (cmd->path[strlen(cmd->path) - 1] != '/')
-            cmd->path = apr_pstrcat(cmd->pool, cmd->path, "/", NULL);
-    }
-
-    /* initialize our config and fetch it */
-    conf = ap_set_config_vectors(cmd->server, new_dir_conf, cmd->path,
-                                 &core_module, cmd->pool);
-
-    errmsg = ap_walk_config(cmd->directive->first_child, cmd, new_dir_conf);
-    if (errmsg != NULL)
-        return errmsg;
-
-    conf->r = r;
-    conf->d = cmd->path;
-    conf->d_is_fnmatch = (apr_is_fnmatch(conf->d) != 0);
-
-    /* Make this explicit - the "/" root has 0 elements, that is, we
-     * will always merge it, and it will always sort and merge first.
-     * All others are sorted and tested by the number of slashes.
-     */
-    if (strcmp(conf->d, "/") == 0)
-        conf->d_components = 0;
-    else
-        conf->d_components = ap_count_dirs(conf->d);
-
-    ap_add_per_dir_conf(cmd->server, new_dir_conf);
-
-    if (*arg != '\0') {
-        return apr_pstrcat(cmd->pool, "Multiple ", thiscmd->name,
-                           "> arguments not (yet) supported.", NULL);
-    }
-
-    cmd->path = old_path;
-    cmd->override = old_overrides;
-
-    return NULL;
-}
-
-static const char *urlsection(cmd_parms *cmd, void *mconfig, const char *arg)
-{
-    const char *errmsg;
-    const char *endp = ap_strrchr_c(arg, '>');
-    int old_overrides = cmd->override;
-    char *old_path = cmd->path;
-    core_dir_config *conf;
-    regex_t *r = NULL;
-    const command_rec *thiscmd = cmd->cmd;
-    ap_conf_vector_t *new_url_conf = ap_create_per_dir_config(cmd->pool);
-    const char *err = ap_check_cmd_context(cmd,
-                                           NOT_IN_DIR_LOC_FILE|NOT_IN_LIMIT);
-    if (err != NULL) {
-        return err;
-    }
-
-    if (endp == NULL) {
-        return unclosed_directive(cmd);
-    }
-
-    arg = apr_pstrndup(cmd->pool, arg, endp - arg);
-
-    cmd->path = ap_getword_conf(cmd->pool, &arg);
-    cmd->override = OR_ALL|ACCESS_CONF;
-
-    if (thiscmd->cmd_data) { /* <LocationMatch> */
-        r = ap_pregcomp(cmd->pool, cmd->path, REG_EXTENDED);
-    }
-    else if (!strcmp(cmd->path, "~")) {
-        cmd->path = ap_getword_conf(cmd->pool, &arg);
-        r = ap_pregcomp(cmd->pool, cmd->path, REG_EXTENDED);
-    }
-
-    /* initialize our config and fetch it */
-    conf = ap_set_config_vectors(cmd->server, new_url_conf, cmd->path,
-                                 &core_module, cmd->pool);
-
-    errmsg = ap_walk_config(cmd->directive->first_child, cmd, new_url_conf);
-    if (errmsg != NULL)
-        return errmsg;
-
-    conf->d = apr_pstrdup(cmd->pool, cmd->path);     /* No mangling, please */
-    conf->d_is_fnmatch = apr_is_fnmatch(conf->d) != 0;
-    conf->r = r;
-
-    ap_add_per_url_conf(cmd->server, new_url_conf);
-
-    if (*arg != '\0') {
-        return apr_pstrcat(cmd->pool, "Multiple ", thiscmd->name,
-                           "> arguments not (yet) supported.", NULL);
-    }
-
-    cmd->path = old_path;
-    cmd->override = old_overrides;
-
-    return NULL;
-}
-
-static const char *filesection(cmd_parms *cmd, void *mconfig, const char *arg)
-{
-    const char *errmsg;
-    const char *endp = ap_strrchr_c(arg, '>');
-    int old_overrides = cmd->override;
-    char *old_path = cmd->path;
-    core_dir_config *conf;
-    regex_t *r = NULL;
-    const command_rec *thiscmd = cmd->cmd;
-    core_dir_config *c = mconfig;
-    ap_conf_vector_t *new_file_conf = ap_create_per_dir_config(cmd->pool);
-    const char *err = ap_check_cmd_context(cmd, NOT_IN_LIMIT|NOT_IN_LOCATION);
-
-    if (err != NULL) {
-        return err;
-    }
-
-    if (endp == NULL) {
-        return unclosed_directive(cmd);
-    }
-
-    arg = apr_pstrndup(cmd->pool, arg, endp - arg);
-
-    cmd->path = ap_getword_conf(cmd->pool, &arg);
-    /* Only if not an .htaccess file */
-    if (!old_path) {
-        cmd->override = OR_ALL|ACCESS_CONF;
-    }
-
-    if (thiscmd->cmd_data) { /* <FilesMatch> */
-        r = ap_pregcomp(cmd->pool, cmd->path, REG_EXTENDED|USE_ICASE);
-    }
-    else if (!strcmp(cmd->path, "~")) {
-        cmd->path = ap_getword_conf(cmd->pool, &arg);
-        r = ap_pregcomp(cmd->pool, cmd->path, REG_EXTENDED|USE_ICASE);
-    }
-    else {
-        char *newpath;
-        /* Ensure that the pathname is canonical, but we
-         * can't test the case/aliases without a fixed path */
-        if (apr_filepath_merge(&newpath, "", cmd->path,
-                               0, cmd->pool) != APR_SUCCESS)
-                return apr_pstrcat(cmd->pool, "<Files \"", cmd->path,
-                               "\"> is invalid.", NULL);
-        cmd->path = newpath;
-    }
-
-    /* initialize our config and fetch it */
-    conf = ap_set_config_vectors(cmd->server, new_file_conf, cmd->path,
-                                 &core_module, cmd->pool);
-
-    errmsg = ap_walk_config(cmd->directive->first_child, cmd, new_file_conf);
-    if (errmsg != NULL)
-        return errmsg;
-
-    conf->d = cmd->path;
-    conf->d_is_fnmatch = apr_is_fnmatch(conf->d) != 0;
-    conf->r = r;
-
-    ap_add_file_conf(c, new_file_conf);
-
-    if (*arg != '\0') {
-        return apr_pstrcat(cmd->pool, "Multiple ", thiscmd->name,
-                           "> arguments not (yet) supported.", NULL);
-    }
-
-    cmd->path = old_path;
-    cmd->override = old_overrides;
-
-    return NULL;
-}
-
-static const char *start_ifmod(cmd_parms *cmd, void *mconfig, const char *arg)
-{
-    const char *endp = ap_strrchr_c(arg, '>');
-    int not = (arg[0] == '!');
-    module *found;
-
-    if (endp == NULL) {
-        return unclosed_directive(cmd);
-    }
-
-    arg = apr_pstrndup(cmd->pool, arg, endp - arg);
-
-    if (not) {
-        arg++;
-    }
-
-    found = ap_find_linked_module(arg);
-
-    if ((!not && found) || (not && !found)) {
-        ap_directive_t *parent = NULL;
-        ap_directive_t *current = NULL;
-        const char *retval;
-
-        retval = ap_build_cont_config(cmd->pool, cmd->temp_pool, cmd,
-                                      &current, &parent, "<IfModule");
-        *(ap_directive_t **)mconfig = current;
-        return retval;
-    }
-    else {
-        *(ap_directive_t **)mconfig = NULL;
-        return ap_soak_end_container(cmd, "<IfModule");
-    }
-}
-
-AP_DECLARE(int) ap_exists_config_define(const char *name)
-{
-    char **defines;
-    int i;
-
-    defines = (char **)ap_server_config_defines->elts;
-    for (i = 0; i < ap_server_config_defines->nelts; i++) {
-        if (strcmp(defines[i], name) == 0) {
-            return 1;
-        }
-    }
-
-    return 0;
-}
-
-static const char *start_ifdefine(cmd_parms *cmd, void *dummy, const char *arg)
-{
-    const char *endp;
-    int defined;
-    int not = 0;
-
-    endp = ap_strrchr_c(arg, '>');
-    if (endp == NULL) {
-        return unclosed_directive(cmd);
-    }
-
-    arg = apr_pstrndup(cmd->pool, arg, endp - arg);
-
-    if (arg[0] == '!') {
-        not = 1;
-        arg++;
-    }
-
-    defined = ap_exists_config_define(arg);
-    if ((!not && defined) || (not && !defined)) {
-        ap_directive_t *parent = NULL;
-        ap_directive_t *current = NULL;
-        const char *retval;
-
-        retval = ap_build_cont_config(cmd->pool, cmd->temp_pool, cmd,
-                                      &current, &parent, "<IfDefine");
-        *(ap_directive_t **)dummy = current;
-        return retval;
-    }
-    else {
-        *(ap_directive_t **)dummy = NULL;
-        return ap_soak_end_container(cmd, "<IfDefine");
-    }
-}
-
-/* httpd.conf commands... beginning with the <VirtualHost> business */
-
-static const char *virtualhost_section(cmd_parms *cmd, void *dummy,
-                                       const char *arg)
-{
-    server_rec *main_server = cmd->server, *s;
-    const char *errmsg;
-    const char *endp = ap_strrchr_c(arg, '>');
-    apr_pool_t *p = cmd->pool;
-
-    const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
-    if (err != NULL) {
-        return err;
-    }
-
-    if (endp == NULL) {
-        return unclosed_directive(cmd);
-    }
-
-    arg = apr_pstrndup(cmd->pool, arg, endp - arg);
-
-    /* FIXME: There's another feature waiting to happen here -- since you
-        can now put multiple addresses/names on a single <VirtualHost>
-        you might want to use it to group common definitions and then
-        define other "subhosts" with their individual differences.  But
-        personally I'd rather just do it with a macro preprocessor. -djg */
-    if (main_server->is_virtual) {
-        return "<VirtualHost> doesn't nest!";
-    }
-
-    errmsg = ap_init_virtual_host(p, arg, main_server, &s);
-    if (errmsg) {
-        return errmsg;
-    }
-
-    s->next = main_server->next;
-    main_server->next = s;
-
-    s->defn_name = cmd->directive->filename;
-    s->defn_line_number = cmd->directive->line_num;
-
-    cmd->server = s;
-
-    errmsg = ap_walk_config(cmd->directive->first_child, cmd,
-                            s->lookup_defaults);
-
-    cmd->server = main_server;
-
-    return errmsg;
-}
-
-static const char *set_server_alias(cmd_parms *cmd, void *dummy,
-                                    const char *arg)
-{
-    if (!cmd->server->names) {
-        return "ServerAlias only used in <VirtualHost>";
-    }
-
-    while (*arg) {
-        char **item, *name = ap_getword_conf(cmd->pool, &arg);
-
-        if (ap_is_matchexp(name)) {
-            item = (char **)apr_array_push(cmd->server->wild_names);
-        }
-        else {
-            item = (char **)apr_array_push(cmd->server->names);
-        }
-
-        *item = name;
-    }
-
-    return NULL;
-}
-
-static const char *set_server_string_slot(cmd_parms *cmd, void *dummy,
-                                          const char *arg)
-{
-    /* This one's pretty generic... */
-
-    int offset = (int)(long)cmd->info;
-    char *struct_ptr = (char *)cmd->server;
-
-    const char *err = ap_check_cmd_context(cmd,
-                                           NOT_IN_DIR_LOC_FILE|NOT_IN_LIMIT);
-    if (err != NULL) {
-        return err;
-    }
-
-    *(const char **)(struct_ptr + offset) = arg;
-    return NULL;
-}
-
-static const char *server_hostname_port(cmd_parms *cmd, void *dummy, const char *arg)
-{
-    const char *err = ap_check_cmd_context(cmd, NOT_IN_DIR_LOC_FILE|NOT_IN_LIMIT);
-    const char *portstr;
-    int port;
-
-    if (err != NULL) {
-        return err;
-    }
-
-    portstr = ap_strchr_c(arg, ':');
-    if (portstr) {
-        cmd->server->server_hostname = apr_pstrndup(cmd->pool, arg,
-                                                    portstr - arg);
-        portstr++;
-        port = atoi(portstr);
-        if (port <= 0 || port >= 65536) { /* 65536 == 1<<16 */
-            return apr_pstrcat(cmd->temp_pool, "The port number \"", arg,
-                          "\" is outside the appropriate range "
-                          "(i.e., 1..65535).", NULL);
-        }
-    }
-    else {
-        cmd->server->server_hostname = apr_pstrdup(cmd->pool, arg);
-        port = 0;
-    }
-
-    cmd->server->port = port;
-    return NULL;
-}
-
-static const char *set_signature_flag(cmd_parms *cmd, void *d_,
-                                      const char *arg)
-{
-    core_dir_config *d = d_;
-    const char *err = ap_check_cmd_context(cmd, NOT_IN_LIMIT);
-
-    if (err != NULL) {
-        return err;
-    }
-
-    if (strcasecmp(arg, "On") == 0) {
-        d->server_signature = srv_sig_on;
-    }
-    else if (strcasecmp(arg, "Off") == 0) {
-        d->server_signature = srv_sig_off;
-    }
-    else if (strcasecmp(arg, "EMail") == 0) {
-        d->server_signature = srv_sig_withmail;
-    }
-    else {
-        return "ServerSignature: use one of: off | on | email";
-    }
-
-    return NULL;
-}
-
-static const char *set_server_root(cmd_parms *cmd, void *dummy,
-                                   const char *arg)
-{
-    const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
-
-    if (err != NULL) {
-        return err;
-    }
-
-    if ((apr_filepath_merge((char**)&ap_server_root, NULL, arg,
-                            APR_FILEPATH_TRUENAME, cmd->pool) != APR_SUCCESS)
-        || !ap_is_directory(cmd->pool, ap_server_root)) {
-        return "ServerRoot must be a valid directory";
-    }
-
-    return NULL;
-}
-
-static const char *set_timeout(cmd_parms *cmd, void *dummy, const char *arg)
-{
-    const char *err = ap_check_cmd_context(cmd, NOT_IN_DIR_LOC_FILE|NOT_IN_LIMIT);
-
-    if (err != NULL) {
-        return err;
-    }
-
-    cmd->server->timeout = atoi(arg);
-    return NULL;
-}
-
-static const char *set_idcheck(cmd_parms *cmd, void *d_, int arg)
-{
-    core_dir_config *d = d_;
-    const char *err = ap_check_cmd_context(cmd, NOT_IN_LIMIT);
-
-    if (err != NULL) {
-        return err;
-    }
-
-    d->do_rfc1413 = arg != 0;
-    return NULL;
-}
-
-static const char *set_hostname_lookups(cmd_parms *cmd, void *d_,
-                                        const char *arg)
-{
-    core_dir_config *d = d_;
-    const char *err = ap_check_cmd_context(cmd, NOT_IN_LIMIT);
-
-    if (err != NULL) {
-        return err;
-    }
-
-    if (!strcasecmp(arg, "on")) {
-        d->hostname_lookups = HOSTNAME_LOOKUP_ON;
-    }
-    else if (!strcasecmp(arg, "off")) {
-        d->hostname_lookups = HOSTNAME_LOOKUP_OFF;
-    }
-    else if (!strcasecmp(arg, "double")) {
-        d->hostname_lookups = HOSTNAME_LOOKUP_DOUBLE;
-    }
-    else {
-        return "parameter must be 'on', 'off', or 'double'";
-    }
-
-    return NULL;
-}
-
-static const char *set_serverpath(cmd_parms *cmd, void *dummy,
-                                  const char *arg)
-{
-    const char *err = ap_check_cmd_context(cmd, NOT_IN_DIR_LOC_FILE|NOT_IN_LIMIT);
-
-    if (err != NULL) {
-        return err;
-    }
-
-    cmd->server->path = arg;
-    cmd->server->pathlen = strlen(arg);
-    return NULL;
-}
-
-static const char *set_content_md5(cmd_parms *cmd, void *d_, int arg)
-{
-    core_dir_config *d = d_;
-    const char *err = ap_check_cmd_context(cmd, NOT_IN_LIMIT);
-
-    if (err != NULL) {
-        return err;
-    }
-
-    d->content_md5 = arg != 0;
-    return NULL;
-}
-
-static const char *set_accept_path_info(cmd_parms *cmd, void *d_, const char *arg)
-{
-    core_dir_config *d = d_;
-
-    if (strcasecmp(arg, "on") == 0) {
-        d->accept_path_info = AP_REQ_ACCEPT_PATH_INFO;
-    }
-    else if (strcasecmp(arg, "off") == 0) {
-        d->accept_path_info = AP_REQ_REJECT_PATH_INFO;
-    }
-    else if (strcasecmp(arg, "default") == 0) {
-        d->accept_path_info = AP_REQ_DEFAULT_PATH_INFO;
-    }
-    else {
-        return "AcceptPathInfo must be set to on, off or default";
-    }
-
-    return NULL;
-}
-
-static const char *set_use_canonical_name(cmd_parms *cmd, void *d_,
-                                          const char *arg)
-{
-    core_dir_config *d = d_;
-    const char *err = ap_check_cmd_context(cmd, NOT_IN_LIMIT);
-
-    if (err != NULL) {
-        return err;
-    }
-
-    if (strcasecmp(arg, "on") == 0) {
-        d->use_canonical_name = USE_CANONICAL_NAME_ON;
-    }
-    else if (strcasecmp(arg, "off") == 0) {
-        d->use_canonical_name = USE_CANONICAL_NAME_OFF;
-    }
-    else if (strcasecmp(arg, "dns") == 0) {
-        d->use_canonical_name = USE_CANONICAL_NAME_DNS;
-    }
-    else {
-        return "parameter must be 'on', 'off', or 'dns'";
-    }
-
-    return NULL;
-}
-
-
-static const char *include_config (cmd_parms *cmd, void *dummy,
-                                   const char *name)
-{
-    ap_directive_t *conftree = NULL;
-    const char* conffile = ap_server_root_relative(cmd->pool, name);
-    
-    if (!conffile) {
-        return apr_pstrcat(cmd->pool, "Invalid Include path ", 
-                           name, NULL);
-    }
-
-    ap_process_resource_config(cmd->server, conffile,
-                               &conftree, cmd->pool, cmd->temp_pool);
-    *(ap_directive_t **)dummy = conftree;
-    return NULL;
-}
-
-static const char *set_loglevel(cmd_parms *cmd, void *dummy, const char *arg)
-{
-    char *str;
-
-    const char *err = ap_check_cmd_context(cmd,
-                                           NOT_IN_DIR_LOC_FILE|NOT_IN_LIMIT);
-    if (err != NULL) {
-        return err;
-    }
-
-    if ((str = ap_getword_conf(cmd->pool, &arg))) {
-        if (!strcasecmp(str, "emerg")) {
-            cmd->server->loglevel = APLOG_EMERG;
-        }
-        else if (!strcasecmp(str, "alert")) {
-            cmd->server->loglevel = APLOG_ALERT;
-        }
-        else if (!strcasecmp(str, "crit")) {
-            cmd->server->loglevel = APLOG_CRIT;
-        }
-        else if (!strcasecmp(str, "error")) {
-            cmd->server->loglevel = APLOG_ERR;
-        }
-        else if (!strcasecmp(str, "warn")) {
-            cmd->server->loglevel = APLOG_WARNING;
-        }
-        else if (!strcasecmp(str, "notice")) {
-            cmd->server->loglevel = APLOG_NOTICE;
-        }
-        else if (!strcasecmp(str, "info")) {
-            cmd->server->loglevel = APLOG_INFO;
-        }
-        else if (!strcasecmp(str, "debug")) {
-            cmd->server->loglevel = APLOG_DEBUG;
-        }
-        else {
-            return "LogLevel requires level keyword: one of "
-                   "emerg/alert/crit/error/warn/notice/info/debug";
-        }
-    }
-    else {
-        return "LogLevel requires level keyword";
-    }
-
-    return NULL;
-}
-
-AP_DECLARE(const char *) ap_psignature(const char *prefix, request_rec *r)
-{
-    char sport[20];
-    core_dir_config *conf;
-
-    conf = (core_dir_config *)ap_get_module_config(r->per_dir_config,
-                                                   &core_module);
-    if ((conf->server_signature == srv_sig_off)
-            || (conf->server_signature == srv_sig_unset)) {
-        return "";
-    }
-
-    apr_snprintf(sport, sizeof sport, "%u", (unsigned) ap_get_server_port(r));
-
-    if (conf->server_signature == srv_sig_withmail) {
-        return apr_pstrcat(r->pool, prefix, "<address>" AP_SERVER_BASEVERSION
-                           " Server at <a href=\"mailto:",
-                           r->server->server_admin, "\">",
-                           ap_get_server_name(r), "</a> Port ", sport,
-                           "</address>\n", NULL);
-    }
-
-    return apr_pstrcat(r->pool, prefix, "<address>" AP_SERVER_BASEVERSION
-                       " Server at ", ap_get_server_name(r), " Port ", sport,
-                       "</address>\n", NULL);
-}
-
-/*
- * Load an authorisation realm into our location configuration, applying the
- * usual rules that apply to realms.
- */
-static const char *set_authname(cmd_parms *cmd, void *mconfig,
-                                const char *word1)
-{
-    core_dir_config *aconfig = (core_dir_config *)mconfig;
-
-    aconfig->ap_auth_name = ap_escape_quotes(cmd->pool, word1);
-    return NULL;
-}
-
-#ifdef _OSD_POSIX /* BS2000 Logon Passwd file */
-static const char *set_bs2000_account(cmd_parms *cmd, void *dummy, char *name)
-{
-    const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
-    if (err != NULL) {
-        return err;
-    }
-
-    return os_set_account(cmd->pool, name);
-}
-#endif /*_OSD_POSIX*/
-
-/*
- * Handle a request to include the server's OS platform in the Server
- * response header field (the ServerTokens directive).  Unfortunately
- * this requires a new global in order to communicate the setting back to
- * http_main so it can insert the information in the right place in the
- * string.
- */
-
-static char *server_version = NULL;
-static int version_locked = 0;
-
-enum server_token_type {
-    SrvTk_MIN,          /* eg: Apache/1.3.0 */
-    SrvTk_OS,           /* eg: Apache/1.3.0 (UNIX) */
-    SrvTk_FULL,         /* eg: Apache/1.3.0 (UNIX) PHP/3.0 FooBar/1.2b */
-    SrvTk_PRODUCT_ONLY  /* eg: Apache */
-};
-static enum server_token_type ap_server_tokens = SrvTk_FULL;
-
-static apr_status_t reset_version(void *dummy)
-{
-    version_locked = 0;
-    ap_server_tokens = SrvTk_FULL;
-    server_version = NULL;
-    return APR_SUCCESS;
-}
-
-AP_DECLARE(const char *) ap_get_server_version(void)
-{
-    return (server_version ? server_version : AP_SERVER_BASEVERSION);
-}
-
-AP_DECLARE(void) ap_add_version_component(apr_pool_t *pconf, const char *component)
-{
-    if (! version_locked) {
-        /*
-         * If the version string is null, register our cleanup to reset the
-         * pointer on pool destruction. We also know that, if NULL,
-         * we are adding the original SERVER_BASEVERSION string.
-         */
-        if (server_version == NULL) {
-            apr_pool_cleanup_register(pconf, NULL, reset_version,
-                                      apr_pool_cleanup_null);
-            server_version = apr_pstrdup(pconf, component);
-        }
-        else {
-            /*
-             * Tack the given component identifier to the end of
-             * the existing string.
-             */
-            server_version = apr_pstrcat(pconf, server_version, " ",
-                                         component, NULL);
-        }
-    }
-}
-
-/*
- * This routine adds the real server base identity to the version string,
- * and then locks out changes until the next reconfig.
- */
-static void ap_set_version(apr_pool_t *pconf)
-{
-    if (ap_server_tokens == SrvTk_PRODUCT_ONLY) {
-        ap_add_version_component(pconf, AP_SERVER_BASEPRODUCT);
-    }
-    else if (ap_server_tokens == SrvTk_MIN) {
-        ap_add_version_component(pconf, AP_SERVER_BASEVERSION);
-    }
-    else {
-        ap_add_version_component(pconf, AP_SERVER_BASEVERSION " (" PLATFORM ")");
-    }
-
-    /*
-     * Lock the server_version string if we're not displaying
-     * the full set of tokens
-     */
-    if (ap_server_tokens != SrvTk_FULL) {
-        version_locked++;
-    }
-}
-
-static const char *set_serv_tokens(cmd_parms *cmd, void *dummy,
-                                   const char *arg)
-{
-    const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
-
-    if (err != NULL) {
-        return err;
-    }
-
-    if (!strcasecmp(arg, "OS")) {
-        ap_server_tokens = SrvTk_OS;
-    }
-    else if (!strcasecmp(arg, "Min") || !strcasecmp(arg, "Minimal")) {
-        ap_server_tokens = SrvTk_MIN;
-    }
-    else if (!strcasecmp(arg, "Prod") || !strcasecmp(arg, "ProductOnly")) {
-        ap_server_tokens = SrvTk_PRODUCT_ONLY;
-    }
-    else {
-        ap_server_tokens = SrvTk_FULL;
-    }
-
-    return NULL;
-}
-
-static const char *set_limit_req_line(cmd_parms *cmd, void *dummy,
-                                      const char *arg)
-{
-    const char *err = ap_check_cmd_context(cmd,
-                                           NOT_IN_DIR_LOC_FILE|NOT_IN_LIMIT);
-    int lim;
-
-    if (err != NULL) {
-        return err;
-    }
-
-    lim = atoi(arg);
-    if (lim < 0) {
-        return apr_pstrcat(cmd->temp_pool, "LimitRequestLine \"", arg,
-                           "\" must be a non-negative integer", NULL);
-    }
-
-    if (lim > DEFAULT_LIMIT_REQUEST_LINE) {
-        return apr_psprintf(cmd->temp_pool, "LimitRequestLine \"%s\" "
-                            "must not exceed the precompiled maximum of %d",
-                            arg, DEFAULT_LIMIT_REQUEST_LINE);
-    }
-
-    cmd->server->limit_req_line = lim;
-    return NULL;
-}
-
-static const char *set_limit_req_fieldsize(cmd_parms *cmd, void *dummy,
-                                           const char *arg)
-{
-    const char *err = ap_check_cmd_context(cmd,
-                                           NOT_IN_DIR_LOC_FILE|NOT_IN_LIMIT);
-    int lim;
-
-    if (err != NULL) {
-        return err;
-    }
-
-    lim = atoi(arg);
-    if (lim < 0) {
-        return apr_pstrcat(cmd->temp_pool, "LimitRequestFieldsize \"", arg,
-                          "\" must be a non-negative integer (0 = no limit)",
-                          NULL);
-    }
-
-    if (lim > DEFAULT_LIMIT_REQUEST_FIELDSIZE) {
-        return apr_psprintf(cmd->temp_pool, "LimitRequestFieldsize \"%s\" "
-                           "must not exceed the precompiled maximum of %d",
-                            arg, DEFAULT_LIMIT_REQUEST_FIELDSIZE);
-    }
-
-    cmd->server->limit_req_fieldsize = lim;
-    return NULL;
-}
-
-static const char *set_limit_req_fields(cmd_parms *cmd, void *dummy,
-                                        const char *arg)
-{
-    const char *err = ap_check_cmd_context(cmd,
-                                           NOT_IN_DIR_LOC_FILE|NOT_IN_LIMIT);
-    int lim;
-
-    if (err != NULL) {
-        return err;
-    }
-
-    lim = atoi(arg);
-    if (lim < 0) {
-        return apr_pstrcat(cmd->temp_pool, "LimitRequestFields \"", arg,
-                           "\" must be a non-negative integer (0 = no limit)",
-                           NULL);
-    }
-
-    cmd->server->limit_req_fields = lim;
-    return NULL;
-}
-
-static const char *set_limit_req_body(cmd_parms *cmd, void *conf_,
-                                      const char *arg)
-{
-    core_dir_config *conf = conf_;
-    const char *err = ap_check_cmd_context(cmd, NOT_IN_LIMIT);
-    char *errp;
-
-    if (err != NULL) {
-        return err;
-    }
-
-    /* WTF: If strtoul is not portable, then write a replacement.
-     *      Instead we have an idiotic define in httpd.h that prevents
-     *      it from being used even when it is available. Sheesh.
-     */
-    conf->limit_req_body = (apr_off_t)strtol(arg, &errp, 10);
-    if (*errp != '\0') {
-        return "LimitRequestBody requires a non-negative integer.";
-    }
-
-    return NULL;
-}
-
-static const char *set_limit_xml_req_body(cmd_parms *cmd, void *conf_,
-                                          const char *arg)
-{
-    core_dir_config *conf = conf_;
-    const char *err = ap_check_cmd_context(cmd, NOT_IN_LIMIT);
-
-    if (err != NULL) {
-        return err;
-    }
-
-    conf->limit_xml_body = atol(arg);
-    if (conf->limit_xml_body < 0)
-        return "LimitXMLRequestBody requires a non-negative integer.";
-
-    return NULL;
-}
-
-AP_DECLARE(size_t) ap_get_limit_xml_body(const request_rec *r)
-{
-    core_dir_config *conf;
-
-    conf = ap_get_module_config(r->per_dir_config, &core_module);
-    if (conf->limit_xml_body == AP_LIMIT_UNSET)
-        return AP_DEFAULT_LIMIT_XML_BODY;
-
-    return (size_t)conf->limit_xml_body;
-}
-
-#if !defined (RLIMIT_CPU) || !(defined (RLIMIT_DATA) || defined (RLIMIT_VMEM) || defined(RLIMIT_AS)) || !defined (RLIMIT_NPROC)
-static const char *no_set_limit(cmd_parms *cmd, void *conf_,
-                                const char *arg, const char *arg2)
-{
-    ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, cmd->server,
-                "%s not supported on this platform", cmd->cmd->name);
-
-    return NULL;
-}
-#endif
-
-#ifdef RLIMIT_CPU
-static const char *set_limit_cpu(cmd_parms *cmd, void *conf_,
-                                 const char *arg, const char *arg2)
-{
-    core_dir_config *conf = conf_;
-
-    unixd_set_rlimit(cmd, &conf->limit_cpu, arg, arg2, RLIMIT_CPU);
-    return NULL;
-}
-#endif
-
-#if defined (RLIMIT_DATA) || defined (RLIMIT_VMEM) || defined(RLIMIT_AS)
-static const char *set_limit_mem(cmd_parms *cmd, void *conf_,
-                                 const char *arg, const char * arg2)
-{
-    core_dir_config *conf = conf_;
-
-#if defined(RLIMIT_AS)
-    unixd_set_rlimit(cmd, &conf->limit_mem, arg, arg2 ,RLIMIT_AS);
-#elif defined(RLIMIT_DATA)
-    unixd_set_rlimit(cmd, &conf->limit_mem, arg, arg2, RLIMIT_DATA);
-#elif defined(RLIMIT_VMEM)
-    unixd_set_rlimit(cmd, &conf->limit_mem, arg, arg2, RLIMIT_VMEM);
-#endif
-
-    return NULL;
-}
-#endif
-
-#ifdef RLIMIT_NPROC
-static const char *set_limit_nproc(cmd_parms *cmd, void *conf_,
-                                   const char *arg, const char * arg2)
-{
-    core_dir_config *conf = conf_;
-
-    unixd_set_rlimit(cmd, &conf->limit_nproc, arg, arg2, RLIMIT_NPROC);
-    return NULL;
-}
-#endif
-
-static const char *add_ct_output_filters(cmd_parms *cmd, void *conf_,
-                                         const char *arg, const char *arg2)
-{
-    core_dir_config *conf = conf_;
-    ap_filter_rec_t *old, *new;
-
-    if (!conf->ct_output_filters) {
-        conf->ct_output_filters = apr_hash_make(cmd->pool);
-        old = NULL;
-    }
-    else {
-        old = (ap_filter_rec_t*) apr_hash_get(conf->ct_output_filters, arg2,
-                                              APR_HASH_KEY_STRING);
-    }
-
-    new = apr_pcalloc(cmd->pool, sizeof(ap_filter_rec_t));
-    new->name = apr_pstrdup(cmd->pool, arg);
-
-    /* We found something, so let's append it.  */
-    if (old) {
-        new->next = old;
-    }
-
-    apr_hash_set(conf->ct_output_filters, arg2, APR_HASH_KEY_STRING, new);
-
-    return NULL;
-}
-
-static apr_status_t writev_it_all(apr_socket_t *s,
-                                  struct iovec *vec, int nvec,
-                                  apr_size_t len, apr_size_t *nbytes)
-{
-    apr_size_t bytes_written = 0;
-    apr_status_t rv;
-    apr_size_t n = len;
-    int i = 0;
-
-    *nbytes = 0;
-
-    /* XXX handle checking for non-blocking socket */
-    while (bytes_written != len) {
-        rv = apr_sendv(s, vec + i, nvec - i, &n);
-        bytes_written += n;
-        if (rv != APR_SUCCESS)
-            return rv;
-
-        *nbytes += n;
-
-        /* If the write did not complete, adjust the iovecs and issue
-         * apr_sendv again
-         */
-        if (bytes_written < len) {
-            /* Skip over the vectors that have already been written */
-            apr_size_t cnt = vec[i].iov_len;
-            while (n >= cnt && i + 1 < nvec) {
-                i++;
-                cnt += vec[i].iov_len;
-            }
-
-            if (n < cnt) {
-                /* Handle partial write of vec i */
-                vec[i].iov_base = (char *) vec[i].iov_base +
-                    (vec[i].iov_len - (cnt - n));
-                vec[i].iov_len = cnt -n;
-            }
-        }
-
-        n = len - bytes_written;
-    }
-
-    return APR_SUCCESS;
-}
-
-/* sendfile_it_all()
- *  send the entire file using sendfile()
- *  handle partial writes
- *  return only when all bytes have been sent or an error is encountered.
- */
-
-#if APR_HAS_SENDFILE
-static apr_status_t sendfile_it_all(core_net_rec *c,
-                                    apr_file_t *fd,
-                                    apr_hdtr_t *hdtr,
-                                    apr_off_t   file_offset,
-                                    apr_size_t  file_bytes_left,
-                                    apr_size_t  total_bytes_left,
-                                    apr_int32_t flags)
-{
-    apr_status_t rv;
-#ifdef AP_DEBUG
-    apr_int32_t timeout = 0;
-#endif
-
-    AP_DEBUG_ASSERT((apr_getsocketopt(c->client_socket, APR_SO_TIMEOUT,
-                                      &timeout) == APR_SUCCESS)
-                    && timeout > 0);  /* socket must be in timeout mode */
-
-    do {
-        apr_size_t tmplen = file_bytes_left;
-
-        rv = apr_sendfile(c->client_socket, fd, hdtr, &file_offset, &tmplen,
-                          flags);
-        total_bytes_left -= tmplen;
-        if (!total_bytes_left || rv != APR_SUCCESS) {
-            return rv;        /* normal case & error exit */
-        }
-
-        AP_DEBUG_ASSERT(total_bytes_left > 0 && tmplen > 0);
-
-        /* partial write, oooh noooo...
-         * Skip over any header data which was written
-         */
-        while (tmplen && hdtr->numheaders) {
-            if (tmplen >= hdtr->headers[0].iov_len) {
-                tmplen -= hdtr->headers[0].iov_len;
-                --hdtr->numheaders;
-                ++hdtr->headers;
-            }
-            else {
-                char *iov_base = (char *)hdtr->headers[0].iov_base;
-
-                hdtr->headers[0].iov_len -= tmplen;
-                iov_base += tmplen;
-                hdtr->headers[0].iov_base = iov_base;
-                tmplen = 0;
-            }
-        }
-
-        /* Skip over any file data which was written */
-
-        if (tmplen <= file_bytes_left) {
-            file_offset += tmplen;
-            file_bytes_left -= tmplen;
-            continue;
-        }
-
-        tmplen -= file_bytes_left;
-        file_bytes_left = 0;
-        file_offset = 0;
-
-        /* Skip over any trailer data which was written */
-
-        while (tmplen && hdtr->numtrailers) {
-            if (tmplen >= hdtr->trailers[0].iov_len) {
-                tmplen -= hdtr->trailers[0].iov_len;
-                --hdtr->numtrailers;
-                ++hdtr->trailers;
-            }
-            else {
-                char *iov_base = (char *)hdtr->trailers[0].iov_base;
-
-                hdtr->trailers[0].iov_len -= tmplen;
-                iov_base += tmplen;
-                hdtr->trailers[0].iov_base = iov_base;
-                tmplen = 0;
-            }
-        }
-    } while (1);
-}
-#endif
-
-/*
- * emulate_sendfile()
- * Sends the contents of file fd along with header/trailer bytes, if any,
- * to the network. emulate_sendfile will return only when all the bytes have been
- * sent (i.e., it handles partial writes) or on a network error condition.
- */
-static apr_status_t emulate_sendfile(core_net_rec *c, apr_file_t *fd,
-                                     apr_hdtr_t *hdtr, apr_off_t offset,
-                                     apr_size_t length, apr_size_t *nbytes)
-{
-    apr_status_t rv = APR_SUCCESS;
-    apr_int32_t togo;        /* Remaining number of bytes in the file to send */
-    apr_size_t sendlen = 0;
-    apr_size_t bytes_sent;
-    apr_int32_t i;
-    apr_off_t o;             /* Track the file offset for partial writes */
-    char buffer[8192];
-
-    *nbytes = 0;
-
-    /* Send the headers
-     * writev_it_all handles partial writes.
-     * XXX: optimization... if headers are less than MIN_WRITE_SIZE, copy
-     * them into buffer
-     */
-    if (hdtr && hdtr->numheaders > 0 ) {
-        for (i = 0; i < hdtr->numheaders; i++) {
-            sendlen += hdtr->headers[i].iov_len;
-        }
-
-        rv = writev_it_all(c->client_socket, hdtr->headers, hdtr->numheaders,
-                           sendlen, &bytes_sent);
-        if (rv == APR_SUCCESS)
-            *nbytes += bytes_sent;     /* track total bytes sent */
-    }
-
-    /* Seek the file to 'offset' */
-    if (offset != 0 && rv == APR_SUCCESS) {
-        rv = apr_file_seek(fd, APR_SET, &offset);
-    }
-
-    /* Send the file, making sure to handle partial writes */
-    togo = length;
-    while (rv == APR_SUCCESS && togo) {
-        sendlen = togo > sizeof(buffer) ? sizeof(buffer) : togo;
-        o = 0;
-        rv = apr_file_read(fd, buffer, &sendlen);
-        while (rv == APR_SUCCESS && sendlen) {
-            bytes_sent = sendlen;
-            rv = apr_send(c->client_socket, &buffer[o], &bytes_sent);
-            if (rv == APR_SUCCESS) {
-                sendlen -= bytes_sent; /* sendlen != bytes_sent ==> partial write */
-                o += bytes_sent;       /* o is where we are in the buffer */
-                *nbytes += bytes_sent;
-                togo -= bytes_sent;    /* track how much of the file we've sent */
-            }
-        }
-    }
-
-    /* Send the trailers
-     * XXX: optimization... if it will fit, send this on the last send in the
-     * loop above
-     */
-    sendlen = 0;
-    if ( rv == APR_SUCCESS && hdtr && hdtr->numtrailers > 0 ) {
-        for (i = 0; i < hdtr->numtrailers; i++) {
-            sendlen += hdtr->trailers[i].iov_len;
-        }
-        rv = writev_it_all(c->client_socket, hdtr->trailers, hdtr->numtrailers,
-                           sendlen, &bytes_sent);
-        if (rv == APR_SUCCESS)
-            *nbytes += bytes_sent;
-    }
-
-    return rv;
-}
-
-/* Note --- ErrorDocument will now work from .htaccess files.
- * The AllowOverride of Fileinfo allows webmasters to turn it off
- */
-
-static const command_rec core_cmds[] = {
-
-/* Old access config file commands */
-
-AP_INIT_RAW_ARGS("<Directory", dirsection, NULL, RSRC_CONF,
-  "Container for directives affecting resources located in the specified "
-  "directories"),
-AP_INIT_RAW_ARGS("<Location", urlsection, NULL, RSRC_CONF,
-  "Container for directives affecting resources accessed through the "
-  "specified URL paths"),
-AP_INIT_RAW_ARGS("<VirtualHost", virtualhost_section, NULL, RSRC_CONF,
-  "Container to map directives to a particular virtual host, takes one or "
-  "more host addresses"),
-AP_INIT_RAW_ARGS("<Files", filesection, NULL, OR_ALL,
-  "Container for directives affecting files matching specified patterns"),
-AP_INIT_RAW_ARGS("<Limit", ap_limit_section, NULL, OR_ALL,
-  "Container for authentication directives when accessed using specified HTTP "
-  "methods"),
-AP_INIT_RAW_ARGS("<LimitExcept", ap_limit_section, (void*)1, OR_ALL,
-  "Container for authentication directives to be applied when any HTTP "
-  "method other than those specified is used to access the resource"),
-AP_INIT_TAKE1("<IfModule", start_ifmod, NULL, EXEC_ON_READ | OR_ALL,
-  "Container for directives based on existance of specified modules"),
-AP_INIT_TAKE1("<IfDefine", start_ifdefine, NULL, EXEC_ON_READ | OR_ALL,
-  "Container for directives based on existance of command line defines"),
-AP_INIT_RAW_ARGS("<DirectoryMatch", dirsection, (void*)1, RSRC_CONF,
-  "Container for directives affecting resources located in the "
-  "specified directories"),
-AP_INIT_RAW_ARGS("<LocationMatch", urlsection, (void*)1, RSRC_CONF,
-  "Container for directives affecting resources accessed through the "
-  "specified URL paths"),
-AP_INIT_RAW_ARGS("<FilesMatch", filesection, (void*)1, OR_ALL,
-  "Container for directives affecting files matching specified patterns"),
-AP_INIT_TAKE1("AuthType", ap_set_string_slot,
-  (void*)APR_XtOffsetOf(core_dir_config, ap_auth_type), OR_AUTHCFG,
-  "An HTTP authorization type (e.g., \"Basic\")"),
-AP_INIT_TAKE1("AuthName", set_authname, NULL, OR_AUTHCFG,
-  "The authentication realm (e.g. \"Members Only\")"),
-AP_INIT_RAW_ARGS("Require", require, NULL, OR_AUTHCFG,
-  "Selects which authenticated users or groups may access a protected space"),
-AP_INIT_TAKE1("Satisfy", satisfy, NULL, OR_AUTHCFG,
-  "access policy if both allow and require used ('all' or 'any')"),
-#ifdef GPROF
-AP_INIT_TAKE1("GprofDir", set_gprof_dir, NULL, RSRC_CONF,
-  "Directory to plop gmon.out files"),
-#endif
-AP_INIT_TAKE1("AddDefaultCharset", set_add_default_charset, NULL, OR_FILEINFO,
-  "The name of the default charset to add to any Content-Type without one or 'Off' to disable"),
-AP_INIT_TAKE1("AcceptPathInfo", set_accept_path_info, NULL, OR_FILEINFO,
-  "Set to on or off for PATH_INFO to be accepted by handlers, or default for the per-handler preference"),
-
-/* Old resource config file commands */
-
-AP_INIT_RAW_ARGS("AccessFileName", set_access_name, NULL, RSRC_CONF,
-  "Name(s) of per-directory config files (default: .htaccess)"),
-AP_INIT_TAKE1("DocumentRoot", set_document_root, NULL, RSRC_CONF,
-  "Root directory of the document tree"),
-AP_INIT_TAKE2("ErrorDocument", set_error_document, NULL, OR_FILEINFO,
-  "Change responses for HTTP errors"),
-AP_INIT_RAW_ARGS("AllowOverride", set_override, NULL, ACCESS_CONF,
-  "Controls what groups of directives can be configured by per-directory "
-  "config files"),
-AP_INIT_RAW_ARGS("Options", set_options, NULL, OR_OPTIONS,
-  "Set a number of attributes for a given directory"),
-AP_INIT_TAKE1("DefaultType", ap_set_string_slot,
-  (void*)APR_XtOffsetOf (core_dir_config, ap_default_type),
-  OR_FILEINFO, "the default MIME type for untypable files"),
-AP_INIT_RAW_ARGS("FileETag", set_etag_bits, NULL, OR_FILEINFO,
-  "Specify components used to construct a file's ETag"),
-
-/* Old server config file commands */
-
-AP_INIT_TAKE1("Port", ap_set_deprecated, NULL, RSRC_CONF,
-  "Port was replaced with Listen in Apache 2.0"),
-AP_INIT_TAKE1("HostnameLookups", set_hostname_lookups, NULL,
-  ACCESS_CONF|RSRC_CONF,
-  "\"on\" to enable, \"off\" to disable reverse DNS lookups, or \"double\" to "
-  "enable double-reverse DNS lookups"),
-AP_INIT_TAKE1("ServerAdmin", set_server_string_slot,
-  (void *)APR_XtOffsetOf (server_rec, server_admin), RSRC_CONF,
-  "The email address of the server administrator"),
-AP_INIT_TAKE1("ServerName", server_hostname_port, NULL, RSRC_CONF,
-  "The hostname and port of the server"),
-AP_INIT_TAKE1("ServerSignature", set_signature_flag, NULL, OR_ALL,
-  "En-/disable server signature (on|off|email)"),
-AP_INIT_TAKE1("ServerRoot", set_server_root, NULL, RSRC_CONF,
-  "Common directory of server-related files (logs, confs, etc.)"),
-AP_INIT_TAKE1("ErrorLog", set_server_string_slot,
-  (void *)APR_XtOffsetOf (server_rec, error_fname), RSRC_CONF,
-  "The filename of the error log"),
-AP_INIT_RAW_ARGS("ServerAlias", set_server_alias, NULL, RSRC_CONF,
-  "A name or names alternately used to access the server"),
-AP_INIT_TAKE1("ServerPath", set_serverpath, NULL, RSRC_CONF,
-  "The pathname the server can be reached at"),
-AP_INIT_TAKE1("Timeout", set_timeout, NULL, RSRC_CONF,
-  "Timeout duration (sec)"),
-AP_INIT_FLAG("IdentityCheck", set_idcheck, NULL, RSRC_CONF|ACCESS_CONF,
-  "Enable identd (RFC 1413) user lookups - SLOW"),
-AP_INIT_FLAG("ContentDigest", set_content_md5, NULL, OR_OPTIONS,
-  "whether or not to send a Content-MD5 header with each request"),
-AP_INIT_TAKE1("UseCanonicalName", set_use_canonical_name, NULL,
-  RSRC_CONF|ACCESS_CONF,
-  "How to work out the ServerName : Port when constructing URLs"),
-/* TODO: RlimitFoo should all be part of mod_cgi, not in the core */
-/* TODO: ListenBacklog in MPM */
-AP_INIT_TAKE1("Include", include_config, NULL,
-  (RSRC_CONF | ACCESS_CONF | EXEC_ON_READ),
-  "Name of the config file to be included"),
-AP_INIT_TAKE1("LogLevel", set_loglevel, NULL, RSRC_CONF,
-  "Level of verbosity in error logging"),
-AP_INIT_TAKE1("NameVirtualHost", ap_set_name_virtual_host, NULL, RSRC_CONF,
-  "A numeric IP address:port, or the name of a host"),
-#ifdef _OSD_POSIX
-AP_INIT_TAKE1("BS2000Account", set_bs2000_account, NULL, RSRC_CONF,
-  "Name of server User's bs2000 logon account name"),
-#endif
-AP_INIT_TAKE1("ServerTokens", set_serv_tokens, NULL, RSRC_CONF,
-  "Determine tokens displayed in the Server: header - Min(imal), OS or Full"),
-AP_INIT_TAKE1("LimitRequestLine", set_limit_req_line, NULL, RSRC_CONF,
-  "Limit on maximum size of an HTTP request line"),
-AP_INIT_TAKE1("LimitRequestFieldsize", set_limit_req_fieldsize, NULL,
-  RSRC_CONF,
-  "Limit on maximum size of an HTTP request header field"),
-AP_INIT_TAKE1("LimitRequestFields", set_limit_req_fields, NULL, RSRC_CONF,
-  "Limit (0 = unlimited) on max number of header fields in a request message"),
-AP_INIT_TAKE1("LimitRequestBody", set_limit_req_body,
-  (void*)APR_XtOffsetOf(core_dir_config, limit_req_body), OR_ALL,
-  "Limit (in bytes) on maximum size of request message body"),
-AP_INIT_TAKE1("LimitXMLRequestBody", set_limit_xml_req_body, NULL, OR_ALL,
-              "Limit (in bytes) on maximum size of an XML-based request "
-              "body"),
-
-/* System Resource Controls */
-#ifdef RLIMIT_CPU
-AP_INIT_TAKE12("RLimitCPU", set_limit_cpu,
-  (void*)APR_XtOffsetOf(core_dir_config, limit_cpu),
-  OR_ALL, "Soft/hard limits for max CPU usage in seconds"),
-#else
-AP_INIT_TAKE12("RLimitCPU", no_set_limit, NULL,
-  OR_ALL, "Soft/hard limits for max CPU usage in seconds"),
-#endif
-#if defined (RLIMIT_DATA) || defined (RLIMIT_VMEM) || defined (RLIMIT_AS)
-AP_INIT_TAKE12("RLimitMEM", set_limit_mem,
-  (void*)APR_XtOffsetOf(core_dir_config, limit_mem),
-  OR_ALL, "Soft/hard limits for max memory usage per process"),
-#else
-AP_INIT_TAKE12("RLimitMEM", no_set_limit, NULL,
-  OR_ALL, "Soft/hard limits for max memory usage per process"),
-#endif
-#ifdef RLIMIT_NPROC
-AP_INIT_TAKE12("RLimitNPROC", set_limit_nproc,
-  (void*)APR_XtOffsetOf(core_dir_config, limit_nproc),
-  OR_ALL, "soft/hard limits for max number of processes per uid"),
-#else
-AP_INIT_TAKE12("RLimitNPROC", no_set_limit, NULL,
-   OR_ALL, "soft/hard limits for max number of processes per uid"),
-#endif
-
-AP_INIT_TAKE1("ForceType", ap_set_string_slot_lower,
-       (void *)APR_XtOffsetOf(core_dir_config, mime_type), OR_FILEINFO,
-     "a mime type that overrides other configured type"),
-AP_INIT_TAKE1("SetHandler", ap_set_string_slot_lower,
-       (void *)APR_XtOffsetOf(core_dir_config, handler), OR_FILEINFO,
-   "a handler name that overrides any other configured handler"),
-AP_INIT_TAKE1("SetOutputFilter", ap_set_string_slot,
-       (void *)APR_XtOffsetOf(core_dir_config, output_filters), OR_FILEINFO,
-   "filter (or ; delimited list of filters) to be run on the request content"),
-AP_INIT_TAKE1("SetInputFilter", ap_set_string_slot,
-       (void *)APR_XtOffsetOf(core_dir_config, input_filters), OR_FILEINFO,
-   "filter (or ; delimited list of filters) to be run on the request body"),
-AP_INIT_ITERATE2("AddOutputFilterByType", add_ct_output_filters,
-       (void *)APR_XtOffsetOf(core_dir_config, ct_output_filters), OR_FILEINFO,
-     "output filter name followed by one or more content-types"),
-
-/*
- * These are default configuration directives that mpms can/should
- * pay attention to. If an mpm wishes to use these, they should
- * #defined them in mpm.h.
- */
-#ifdef AP_MPM_WANT_SET_PIDFILE
-AP_INIT_TAKE1("PidFile",  ap_mpm_set_pidfile, NULL, RSRC_CONF, \
-              "A file for logging the server process ID"),
-#endif
-#ifdef AP_MPM_WANT_SET_SCOREBOARD
-AP_INIT_TAKE1("ScoreBoardFile", ap_mpm_set_scoreboard, NULL, RSRC_CONF, \
-              "A file for Apache to maintain runtime process management information"),
-#endif
-#ifdef AP_MPM_WANT_SET_LOCKFILE
-AP_INIT_TAKE1("LockFile",  ap_mpm_set_lockfile, NULL, RSRC_CONF, \
-              "The lockfile used when Apache needs to lock the accept() call"),
-#endif
-#ifdef AP_MPM_WANT_SET_MAX_REQUESTS
-AP_INIT_TAKE1("MaxRequestsPerChild", ap_mpm_set_max_requests, NULL, RSRC_CONF,\
-              "Maximum number of requests a particular child serves before dying."),
-#endif
-#ifdef AP_MPM_WANT_SET_COREDUMPDIR
-AP_INIT_TAKE1("CoreDumpDirectory", ap_mpm_set_coredumpdir, NULL, RSRC_CONF, \
-              "The location of the directory Apache changes to before dumping core"),
-#endif
-#ifdef AP_MPM_WANT_SET_ACCEPT_LOCK_MECH
-AP_INIT_TAKE1("AcceptMutex", ap_mpm_set_accept_lock_mech, NULL, RSRC_CONF, \
-              "The system mutex implementation to use for the accept mutex"),
-#endif
-{ NULL }
-};
-
-/*****************************************************************
- *
- * Core handlers for various phases of server operation...
- */
-
-AP_DECLARE_NONSTD(int) ap_core_translate(request_rec *r)
-{
-    void *sconf = r->server->module_config;
-    core_server_config *conf = ap_get_module_config(sconf, &core_module);
-
-    /* XXX this seems too specific, this should probably become
-     * some general-case test
-     */
-    if (r->proxyreq) {
-        return HTTP_FORBIDDEN;
-    }
-    if (!r->uri || ((r->uri[0] != '/') && strcmp(r->uri, "*"))) {
-        ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                     "Invalid URI in request %s", r->the_request);
-        return HTTP_BAD_REQUEST;
-    }
-
-    if (r->server->path
-        && !strncmp(r->uri, r->server->path, r->server->pathlen)
-        && (r->server->path[r->server->pathlen - 1] == '/'
-            || r->uri[r->server->pathlen] == '/'
-            || r->uri[r->server->pathlen] == '\0')) {
-        if (apr_filepath_merge(&r->filename, conf->ap_document_root,
-                               r->uri + r->server->pathlen,
-                               APR_FILEPATH_TRUENAME
-                             | APR_FILEPATH_SECUREROOT, r->pool)
-                    != APR_SUCCESS) {
-            return HTTP_FORBIDDEN;
-        }
-        r->canonical_filename = r->filename;
-    }
-    else {
-        /*
-         * Make sure that we do not mess up the translation by adding two
-         * /'s in a row.  This happens under windows when the document
-         * root ends with a /
-         */
-        if (apr_filepath_merge(&r->filename, conf->ap_document_root,
-                               r->uri + ((*(r->uri) == '/') ? 1 : 0),
-                               APR_FILEPATH_TRUENAME
-                             | APR_FILEPATH_SECUREROOT, r->pool)
-                    != APR_SUCCESS) {
-            return HTTP_FORBIDDEN;
-        }
-        r->canonical_filename = r->filename;
-    }
-
-    return OK;
-}
-
-/*****************************************************************
- *
- * Test the filesystem name through directory_walk and file_walk
- */
-static int core_map_to_storage(request_rec *r)
-{
-    int access_status;
-
-    if ((access_status = ap_directory_walk(r))) {
-        return access_status;
-    }
-
-    if ((access_status = ap_file_walk(r))) {
-        return access_status;
-    }
-
-    return OK;
-}
-
-
-static int do_nothing(request_rec *r) { return OK; }
-
-
-static int core_override_type(request_rec *r)
-{
-    core_dir_config *conf =
-        (core_dir_config *)ap_get_module_config(r->per_dir_config,
-                                                &core_module);
-
-    /* Check for overrides with ForceType / SetHandler
-     */
-    if (conf->mime_type && strcmp(conf->mime_type, "none"))
-        r->content_type = conf->mime_type;
-
-    if (conf->handler && strcmp(conf->handler, "none"))
-        r->handler = conf->handler;
-
-    /* Deal with the poor soul who is trying to force path_info to be
-     * accepted within the core_handler, where they will let the subreq
-     * address it's contents.  This is toggled by the user in the very
-     * beginning of the fixup phase, so modules should override the user's
-     * discresion in their own module fixup phase.  It is tristate, if
-     * the user doesn't specify, the result is 2 (which the module may
-     * interpret to it's own customary behavior.)  It won't be tounched
-     * if the value is no longer undefined (2), so any module changing
-     * the value prior to the fixup phase OVERRIDES the user's choice.
-     */
-    if ((r->used_path_info == AP_REQ_DEFAULT_PATH_INFO)
-        && (conf->accept_path_info != 3)) {
-        r->used_path_info = conf->accept_path_info;
-    }
-
-    return OK;
-}
-
-static int core_filters_type(request_rec *r)
-{
-    core_dir_config *conf;
-    const char *ctype, *ctypes;
-
-    conf = (core_dir_config *)ap_get_module_config(r->per_dir_config,
-                                                   &core_module);
-
-    /* We can't do anything with proxy requests, no content-types or if
-     * we don't have a filter configured.
-     */
-    if (r->proxyreq != PROXYREQ_NONE || !r->content_type ||
-        !conf->ct_output_filters) {
-        return OK;
-    }
-
-    ctypes = r->content_type;
-
-    /* We must be able to handle decorated content-types.  */
-    while (*ctypes && (ctype = ap_getword(r->pool, &ctypes, ';'))) {
-        ap_filter_rec_t *ct_filter;
-        ct_filter = apr_hash_get(conf->ct_output_filters, ctype,
-                                 APR_HASH_KEY_STRING);
-        while (ct_filter) {
-            ap_add_output_filter(ct_filter->name, NULL, r, r->connection);
-            ct_filter = ct_filter->next;
-        }
-    }
-
-    return OK;
-}
-
-static int default_handler(request_rec *r)
-{
-    apr_bucket_brigade *bb;
-    apr_bucket *e;
-    core_dir_config *d;
-    int errstatus;
-    apr_file_t *fd = NULL;
-    apr_status_t status;
-    /* XXX if/when somebody writes a content-md5 filter we either need to
-     *     remove this support or coordinate when to use the filter vs.
-     *     when to use this code
-     *     The current choice of when to compute the md5 here matches the 1.3
-     *     support fairly closely (unlike 1.3, we don't handle computing md5
-     *     when the charset is translated).
-     */
-    int bld_content_md5;
-
-    /*
-     * The old way of doing handlers meant that this handler would
-     * match literally anything - this way will require handler to
-     * have a / in the middle, which probably captures the original
-     * intent, but may cause problems at first - Ben 7th Jan 01
-     * Don't try to serve a dir.  Some OSs do weird things with
-     * raw I/O on a dir.
-     */
-    if ((strcmp(r->handler, "default-handler")
-        && !ap_strchr_c(r->handler, '/'))
-        || r->finfo.filetype == APR_DIR)
-        return DECLINED;
-
-    d = (core_dir_config *)ap_get_module_config(r->per_dir_config,
-                                                &core_module);
-    bld_content_md5 = (d->content_md5 & 1)
-                      && r->output_filters->frec->ftype != AP_FTYPE_RESOURCE;
-
-    ap_allow_standard_methods(r, MERGE_ALLOW, M_GET, M_OPTIONS, M_POST, -1);
-
-    /* If filters intend to consume the request body, they must
-     * register an InputFilter to slurp the contents of the POST
-     * data from the POST input stream.  It no longer exists when
-     * the output filters are invoked by the default handler.
-     */
-    if ((errstatus = ap_discard_request_body(r)) != OK) {
-        return errstatus;
-    }
-
-    if (r->method_number == M_INVALID) {
-        ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                      "Invalid method in request %s", r->the_request);
-        return HTTP_NOT_IMPLEMENTED;
-    }
-
-    if (r->method_number == M_OPTIONS) {
-        return ap_send_http_options(r);
-    }
-
-    if (r->method_number != M_GET && r->method_number != M_POST) {
-        return HTTP_METHOD_NOT_ALLOWED;
-    }
-
-    if (r->finfo.filetype == 0) {
-        ap_log_rerror(APLOG_MARK, APLOG_ERR|APLOG_NOERRNO, 0, r,
-                      "File does not exist: %s", r->filename);
-        return HTTP_NOT_FOUND;
-    }
-
-    if (!(r->used_path_info & 1) && r->path_info && *r->path_info) {
-        ap_log_rerror(APLOG_MARK, APLOG_ERR|APLOG_NOERRNO, 0, r,
-                      "File does not exist: %s",
-                      apr_pstrcat(r->pool, r->filename, r->path_info, NULL));
-        return HTTP_NOT_FOUND;
-    }
-
-    if ((status = apr_file_open(&fd, r->filename, APR_READ | APR_BINARY, 0,
-                                r->pool)) != APR_SUCCESS) {
-        ap_log_rerror(APLOG_MARK, APLOG_ERR, status, r,
-                      "file permissions deny server access: %s", r->filename);
-        return HTTP_FORBIDDEN;
-    }
-
-    ap_update_mtime(r, r->finfo.mtime);
-    ap_set_last_modified(r);
-    ap_set_etag(r);
-    apr_table_setn(r->headers_out, "Accept-Ranges", "bytes");
-    ap_set_content_length(r, r->finfo.size);
-    if ((errstatus = ap_meets_conditions(r)) != OK) {
-        apr_file_close(fd);
-        return errstatus;
-    }
-
-    if (bld_content_md5) {
-        apr_table_setn(r->headers_out, "Content-MD5",
-                       ap_md5digest(r->pool, fd));
-    }
-
-    bb = apr_brigade_create(r->pool);
-#if APR_HAS_LARGE_FILES
-    if (r->finfo.size > AP_MAX_SENDFILE) {
-        /* APR_HAS_LARGE_FILES issue; must split into mutiple buckets,
-         * no greater than MAX(apr_size_t), and more granular than that
-         * in case the brigade code/filters attempt to read it directly.
-         */
-        apr_off_t fsize = r->finfo.size;
-        e = apr_bucket_file_create(fd, 0, AP_MAX_SENDFILE, r->pool);
-        while (fsize > AP_MAX_SENDFILE) {
-            apr_bucket *ce;
-            apr_bucket_copy(e, &ce);
-            APR_BRIGADE_INSERT_TAIL(bb, ce);
-            e->start += AP_MAX_SENDFILE;
-            fsize -= AP_MAX_SENDFILE;
-        }
-        e->length = (apr_size_t)fsize; /* Resize just the last bucket */
-    }
-    else
-#endif
-        e = apr_bucket_file_create(fd, 0, (apr_size_t)r->finfo.size, r->pool);
-
-    APR_BRIGADE_INSERT_TAIL(bb, e);
-    e = apr_bucket_eos_create();
-    APR_BRIGADE_INSERT_TAIL(bb, e);
-
-    return ap_pass_brigade(r->output_filters, bb);
-}
-
-static int net_time_filter(ap_filter_t *f, apr_bucket_brigade *b,
-                           ap_input_mode_t mode, apr_read_type_e block,
-                           apr_off_t readbytes)
-{
-    int keptalive = f->c->keepalive == 1;
-    apr_socket_t *csd = ap_get_module_config(f->c->conn_config, &core_module);
-    int *first_line = f->ctx;
-
-    if (!f->ctx) {
-        f->ctx = first_line = apr_palloc(f->r->pool, sizeof(*first_line));
-        *first_line = 1;
-    }
-
-    if (mode != AP_MODE_INIT && mode != AP_MODE_EATCRLF) {
-        if (*first_line) {
-            apr_setsocketopt(csd, APR_SO_TIMEOUT,
-                             (int)(keptalive
-                      ? f->c->base_server->keep_alive_timeout * APR_USEC_PER_SEC
-                      : f->c->base_server->timeout * APR_USEC_PER_SEC));
-            *first_line = 0;
-        }
-        else {
-            if (keptalive) {
-                apr_setsocketopt(csd, APR_SO_TIMEOUT,
-                         (int)(f->c->base_server->timeout * APR_USEC_PER_SEC));
-            }
-        }
-    }
-    return ap_get_brigade(f->next, b, mode, block, readbytes);
-}
-
-/**
- * Remove all zero length buckets from the brigade.
- */
-#define BRIGADE_NORMALIZE(b) \
-do { \
-    apr_bucket *e = APR_BRIGADE_FIRST(b); \
-    do {  \
-        if (e->length == 0) { \
-            apr_bucket *d; \
-            d = APR_BUCKET_NEXT(e); \
-            apr_bucket_delete(e); \
-            e = d; \
-        } \
-        e = APR_BUCKET_NEXT(e); \
-    } while (!APR_BRIGADE_EMPTY(b) && (e != APR_BRIGADE_SENTINEL(b))); \
-} while (0)
-
-static int core_input_filter(ap_filter_t *f, apr_bucket_brigade *b,
-                             ap_input_mode_t mode, apr_read_type_e block,
-                             apr_off_t readbytes)
-{
-    apr_bucket *e;
-    apr_status_t rv;
-    core_net_rec *net = f->ctx;
-    core_ctx_t *ctx = net->in_ctx;
-    const char *str;
-    apr_size_t len;
-
-    if (mode == AP_MODE_INIT) {
-        /*
-         * this mode is for filters that might need to 'initialize'
-         * a connection before reading request data from a client.
-         * NNTP over SSL for example needs to handshake before the
-         * server sends the welcome message.
-         * such filters would have changed the mode before this point
-         * is reached.  however, protocol modules such as NNTP should
-         * not need to know anything about SSL.  given the example, if
-         * SSL is not in the filter chain, AP_MODE_INIT is a noop.
-         */
-        return APR_SUCCESS;
-    }
-
-    if (!ctx)
-    {
-        ctx = apr_pcalloc(f->c->pool, sizeof(*ctx));
-        ctx->b = apr_brigade_create(f->c->pool);
-
-        /* seed the brigade with the client socket. */
-        e = apr_bucket_socket_create(net->client_socket);
-        APR_BRIGADE_INSERT_TAIL(ctx->b, e);
-        net->in_ctx = ctx;
-    }
-    else if (APR_BRIGADE_EMPTY(ctx->b)) {
-        return APR_EOF;
-    }
-
-    /* ### This is bad. */
-    BRIGADE_NORMALIZE(ctx->b);
-
-    /* check for empty brigade again *AFTER* BRIGADE_NORMALIZE()
-     * If we have lost our socket bucket (see above), we are EOF.
-     *
-     * Ideally, this should be returning SUCCESS with EOS bucket, but
-     * some higher-up APIs (spec. read_request_line via ap_rgetline)
-     * want an error code. */
-    if (APR_BRIGADE_EMPTY(ctx->b)) {
-        return APR_EOF;
-    }
-
-    /* ### AP_MODE_PEEK is a horrific name for this mode because we also
-     * eat any CRLFs that we see.  That's not the obvious intention of
-     * this mode.  Determine whether anyone actually uses this or not. */
-    if (mode == AP_MODE_EATCRLF) {
-        apr_bucket *e;
-        const char *c;
-
-        /* The purpose of this loop is to ignore any CRLF (or LF) at the end
-         * of a request.  Many browsers send extra lines at the end of POST
-         * requests.  We use the PEEK method to determine if there is more
-         * data on the socket, so that we know if we should delay sending the
-         * end of one request until we have served the second request in a
-         * pipelined situation.  We don't want to actually delay sending a
-         * response if the server finds a CRLF (or LF), becuause that doesn't
-         * mean that there is another request, just a blank line.
-         */
-        while (1) {
-            if (APR_BRIGADE_EMPTY(ctx->b))
-                return APR_EOF;
-
-            e = APR_BRIGADE_FIRST(ctx->b);
-
-            rv = apr_bucket_read(e, &str, &len, APR_NONBLOCK_READ);
-
-            if (rv != APR_SUCCESS)
-                return rv;
-
-            c = str;
-            while (c < str + len) {
-                if (*c == APR_ASCII_LF)
-                    c++;
-                else if (*c == APR_ASCII_CR && *(c + 1) == APR_ASCII_LF)
-                    c += 2;
-                else
-                    return APR_SUCCESS;
-            }
-
-            /* If we reach here, we were a bucket just full of CRLFs, so
-             * just toss the bucket. */
-            /* FIXME: Is this the right thing to do in the core? */
-            apr_bucket_delete(e);
-        }
-    }
-
-    /* If mode is EXHAUSTIVE, we want to just read everything until the end
-     * of the brigade, which in this case means the end of the socket.
-     * To do this, we attach the brigade that has currently been setaside to
-     * the brigade that was passed down, and send that brigade back.
-     *
-     * NOTE:  This is VERY dangerous to use, and should only be done with
-     * extreme caution.  However, the Perchild MPM needs this feature
-     * if it is ever going to work correctly again.  With this, the Perchild
-     * MPM can easily request the socket and all data that has been read,
-     * which means that it can pass it to the correct child process.
-     */
-    if (mode == AP_MODE_EXHAUSTIVE) {
-        apr_bucket *e;
-
-        /* Tack on any buckets that were set aside. */
-        APR_BRIGADE_CONCAT(b, ctx->b);
-
-        /* Since we've just added all potential buckets (which will most
-         * likely simply be the socket bucket) we know this is the end,
-         * so tack on an EOS too. */
-        /* We have read until the brigade was empty, so we know that we
-         * must be EOS. */
-        e = apr_bucket_eos_create();
-        APR_BRIGADE_INSERT_TAIL(b, e);
-        return APR_SUCCESS;
-    }
-
-    /* read up to the amount they specified. */
-    if (mode == AP_MODE_READBYTES || mode == AP_MODE_SPECULATIVE) {
-        apr_off_t total;
-        apr_bucket *e;
-        apr_bucket_brigade *newbb;
-
-        AP_DEBUG_ASSERT(readbytes > 0);
-
-        e = APR_BRIGADE_FIRST(ctx->b);
-        rv = apr_bucket_read(e, &str, &len, block);
-
-        if (APR_STATUS_IS_EAGAIN(rv)) {
-            return APR_SUCCESS;
-        }
-        else if (rv != APR_SUCCESS) {
-            return rv;
-        }
-        else if (block == APR_BLOCK_READ && len == 0) {
-            /* We wanted to read some bytes in blocking mode.  We read
-             * 0 bytes.  Hence, we now assume we are EOS.
-             *
-             * When we are in normal mode, return an EOS bucket to the
-             * caller.
-             * When we are in speculative mode, leave ctx->b empty, so
-             * that the next call returns an EOS bucket.
-             */
-            apr_bucket_delete(e);
-
-            if (mode == AP_MODE_READBYTES) {
-                e = apr_bucket_eos_create();
-                APR_BRIGADE_INSERT_TAIL(b, e);
-            }
-            return APR_SUCCESS;
-        }
-
-        /* We can only return at most what we read. */
-        if (len < readbytes) {
-            readbytes = len;
-        }
-
-        apr_brigade_partition(ctx->b, readbytes, &e);
-
-        /* Must do split before CONCAT */
-        newbb = apr_brigade_split(ctx->b, e);
-
-        if (mode == AP_MODE_READBYTES) {
-            APR_BRIGADE_CONCAT(b, ctx->b);
-        }
-        else if (mode == AP_MODE_SPECULATIVE) {
-            apr_bucket *copy_bucket;
-            APR_BRIGADE_FOREACH(e, ctx->b) {
-                rv = apr_bucket_copy(e, &copy_bucket);
-                if (rv != APR_SUCCESS) {
-                    return rv;
-                }
-                APR_BRIGADE_INSERT_TAIL(b, copy_bucket);
-            }
-        }
-
-        /* Take what was originally there and place it back on ctx->b */
-        APR_BRIGADE_CONCAT(ctx->b, newbb);
-
-        /* XXX: Why is this here? We never use 'total'! */
-        apr_brigade_length(b, 1, &total);
-
-        return APR_SUCCESS;
-    }
-
-    /* we are reading a single LF line, e.g. the HTTP headers */
-    rv = apr_brigade_split_line(b, ctx->b, block, HUGE_STRING_LEN);
-
-    /* We should treat EAGAIN here the same as we do for EOF (brigade is
-     * empty).  We do this by returning whatever we have read.  This may
-     * or may not be bogus, but is consistent (for now) with EOF logic.
-     */
-    if (APR_STATUS_IS_EAGAIN(rv)) {
-        rv = APR_SUCCESS;
-    }
-
-    return rv;
-}
-
-/* Default filter.  This filter should almost always be used.  Its only job
- * is to send the headers if they haven't already been sent, and then send
- * the actual data.
- */
-#define MAX_IOVEC_TO_WRITE 16
-
-static apr_status_t core_output_filter(ap_filter_t *f, apr_bucket_brigade *b)
-{
-    apr_status_t rv;
-    conn_rec *c = f->c;
-    core_net_rec *net = f->ctx;
-    core_output_filter_ctx_t *ctx = net->out_ctx;
-
-    if (ctx == NULL) {
-        ctx = apr_pcalloc(c->pool, sizeof(*ctx));
-        net->out_ctx = ctx;
-    }
-
-    /* If we have a saved brigade, concatenate the new brigade to it */
-    if (ctx->b) {
-        APR_BRIGADE_CONCAT(ctx->b, b);
-        b = ctx->b;
-        ctx->b = NULL;
-    }
-
-    /* Perform multiple passes over the brigade, sending batches of output
-       to the connection. */
-    while (b) {
-        apr_size_t nbytes = 0;
-        apr_bucket *last_e = NULL; /* initialized for debugging */
-        apr_bucket *e;
-
-        /* tail of brigade if we need another pass */
-        apr_bucket_brigade *more = NULL;
-
-        /* one group of iovecs per pass over the brigade */
-        apr_size_t nvec = 0;
-        apr_size_t nvec_trailers = 0;
-        struct iovec vec[MAX_IOVEC_TO_WRITE];
-        struct iovec vec_trailers[MAX_IOVEC_TO_WRITE];
-
-        /* one file per pass over the brigade */
-        apr_file_t *fd = NULL;
-        apr_size_t flen = 0;
-        apr_off_t foffset = 0;
-
-        /* keep track of buckets that we've concatenated
-         * to avoid small writes
-         */
-        apr_bucket *last_merged_bucket = NULL;
-
-        /* Iterate over the brigade: collect iovecs and/or a file */
-        APR_BRIGADE_FOREACH(e, b) {
-            /* keep track of the last bucket processed */
-            last_e = e;
-            if (APR_BUCKET_IS_EOS(e) || APR_BUCKET_IS_FLUSH(e)) {
-                break;
-            }
-
-            /* It doesn't make any sense to use sendfile for a file bucket
-             * that represents 10 bytes.
-             */
-            else if (APR_BUCKET_IS_FILE(e)
-                     && (e->length >= AP_MIN_SENDFILE_BYTES)) {
-                apr_bucket_file *a = e->data;
-
-                /* We can't handle more than one file bucket at a time
-                 * so we split here and send the file we have already
-                 * found.
-                 */
-                if (fd) {
-                    more = apr_brigade_split(b, e);
-                    break;
-                }
-
-                fd = a->fd;
-                flen = e->length;
-                foffset = e->start;
-            }
-            else {
-                const char *str;
-                apr_size_t n;
-
-                rv = apr_bucket_read(e, &str, &n, APR_BLOCK_READ);
-                if (n) {
-                    if (!fd) {
-                        if (nvec == MAX_IOVEC_TO_WRITE) {
-                            /* woah! too many. buffer them up, for use later. */
-                            apr_bucket *temp, *next;
-                            apr_bucket_brigade *temp_brig;
-
-                            if (nbytes >= AP_MIN_BYTES_TO_WRITE) {
-                                /* We have enough data in the iovec
-                                 * to justify doing a writev
-                                 */
-                                more = apr_brigade_split(b, e);
-                                break;
-                            }
-
-                            /* Create a temporary brigade as a means
-                             * of concatenating a bunch of buckets together
-                             */
-                            if (last_merged_bucket) {
-                                /* If we've concatenated together small
-                                 * buckets already in a previous pass,
-                                 * the initial buckets in this brigade
-                                 * are heap buckets that may have extra
-                                 * space left in them (because they
-                                 * were created by apr_brigade_write()).
-                                 * We can take advantage of this by
-                                 * building the new temp brigade out of
-                                 * these buckets, so that the content
-                                 * in them doesn't have to be copied again.
-                                 */
-                                apr_bucket_brigade *bb;
-                                bb = apr_brigade_split(b,
-                                         APR_BUCKET_NEXT(last_merged_bucket));
-                                temp_brig = b;
-                                b = bb;
-                            }
-                            else {
-                                temp_brig = apr_brigade_create(f->c->pool);
-                            }
-
-                            temp = APR_BRIGADE_FIRST(b);
-                            while (temp != e) {
-                                apr_bucket *d;
-                                rv = apr_bucket_read(temp, &str, &n, APR_BLOCK_READ);
-                                apr_brigade_write(temp_brig, NULL, NULL, str, n);
-                                d = temp;
-                                temp = APR_BUCKET_NEXT(temp);
-                                apr_bucket_delete(d);
-                            }
-
-                            nvec = 0;
-                            nbytes = 0;
-                            temp = APR_BRIGADE_FIRST(temp_brig);
-                            APR_BUCKET_REMOVE(temp);
-                            APR_BRIGADE_INSERT_HEAD(b, temp);
-                            apr_bucket_read(temp, &str, &n, APR_BLOCK_READ);
-                            vec[nvec].iov_base = (char*) str;
-                            vec[nvec].iov_len = n;
-                            nvec++;
-
-                            /* Just in case the temporary brigade has
-                             * multiple buckets, recover the rest of
-                             * them and put them in the brigade that
-                             * we're sending.
-                             */
-                            for (next = APR_BRIGADE_FIRST(temp_brig);
-                                 next != APR_BRIGADE_SENTINEL(temp_brig);
-                                 next = APR_BRIGADE_FIRST(temp_brig)) {
-                                APR_BUCKET_REMOVE(next);
-                                APR_BUCKET_INSERT_AFTER(temp, next);
-                                temp = next;
-                                apr_bucket_read(next, &str, &n,
-                                                APR_BLOCK_READ);
-                                vec[nvec].iov_base = (char*) str;
-                                vec[nvec].iov_len = n;
-                                nvec++;
-                            }
-
-                            apr_brigade_destroy(temp_brig);
-
-                            last_merged_bucket = temp;
-                            e = temp;
-                            last_e = e;
-                        }
-                        else {
-                            vec[nvec].iov_base = (char*) str;
-                            vec[nvec].iov_len = n;
-                            nvec++;
-                        }
-                    }
-                    else {
-                        /* The bucket is a trailer to a file bucket */
-
-                        if (nvec_trailers == MAX_IOVEC_TO_WRITE) {
-                            /* woah! too many. stop now. */
-                            more = apr_brigade_split(b, e);
-                            break;
-                        }
-
-                        vec_trailers[nvec_trailers].iov_base = (char*) str;
-                        vec_trailers[nvec_trailers].iov_len = n;
-                        nvec_trailers++;
-                    }
-
-                    nbytes += n;
-                }
-            }
-        }
-
-
-        /* Completed iterating over the brigades, now determine if we want
-         * to buffer the brigade or send the brigade out on the network.
-         *
-         * Save if:
-         *
-         *   1) we didn't see a file, we don't have more passes over the
-         *      brigade to perform, we haven't accumulated enough bytes to
-         *      send, AND we didn't stop at a FLUSH bucket.
-         *      (IOW, we will save away plain old bytes)
-         * or
-         *   2) we hit the EOS and have a keep-alive connection
-         *      (IOW, this response is a bit more complex, but we save it
-         *       with the hope of concatenating with another response)
-         */
-        if ((!fd && !more
-             && (nbytes + flen < AP_MIN_BYTES_TO_WRITE)
-             && !APR_BUCKET_IS_FLUSH(last_e))
-            || (nbytes + flen < AP_MIN_BYTES_TO_WRITE 
-                && APR_BUCKET_IS_EOS(last_e) && c->keepalive)) {
-
-            /* NEVER save an EOS in here.  If we are saving a brigade with
-             * an EOS bucket, then we are doing keepalive connections, and
-             * we want to process to second request fully.
-             */
-            if (APR_BUCKET_IS_EOS(last_e)) {
-                apr_bucket *bucket = NULL;
-                /* If we are in here, then this request is a keepalive.  We
-                 * need to be certain that any data in a bucket is valid
-                 * after the request_pool is cleared.
-                 */
-                if (ctx->b == NULL) {
-                    ctx->b = apr_brigade_create(net->c->pool);
-                }
-
-                APR_BRIGADE_FOREACH(bucket, b) {
-                    const char *str;
-                    apr_size_t n;
-
-                    rv = apr_bucket_read(bucket, &str, &n, APR_BLOCK_READ);
-
-                    /* This apr_brigade_write does not use a flush function
-                       because we assume that we will not write enough data
-                       into it to cause a flush. However, if we *do* write
-                       "too much", then we could end up with transient
-                       buckets which would suck. This works for now, but is
-                       a bit shaky if changes are made to some of the
-                       buffering sizes. Let's do an assert to prevent
-                       potential future problems... */
-                    AP_DEBUG_ASSERT(AP_MIN_BYTES_TO_WRITE <=
-                                    APR_BUCKET_BUFF_SIZE);
-                    if (rv != APR_SUCCESS) {
-                        ap_log_error(APLOG_MARK, APLOG_ERR, rv, c->base_server,
-                                     "core_output_filter: Error reading from bucket.");
-                        return rv;
-                    }
-
-                    apr_brigade_write(ctx->b, NULL, NULL, str, n);
-                }
-
-                apr_brigade_destroy(b);
-            }
-            else {
-                ap_save_brigade(f, &ctx->b, &b, c->pool);
-            }
-
-            return APR_SUCCESS;
-        }
-
-        if (fd) {
-            apr_hdtr_t hdtr;
-#if APR_HAS_SENDFILE
-            apr_int32_t flags = 0;
-#endif
-
-            memset(&hdtr, '\0', sizeof(hdtr));
-            if (nvec) {
-                hdtr.numheaders = nvec;
-                hdtr.headers = vec;
-            }
-
-            if (nvec_trailers) {
-                hdtr.numtrailers = nvec_trailers;
-                hdtr.trailers = vec_trailers;
-            }
-
-#if APR_HAS_SENDFILE
-            if (!c->keepalive && APR_BUCKET_IS_EOS(last_e)) {
-                /* Prepare the socket to be reused */
-                flags |= APR_SENDFILE_DISCONNECT_SOCKET;
-            }
-
-            rv = sendfile_it_all(net,      /* the network information   */
-                                 fd,       /* the file to send          */
-                                 &hdtr,    /* header and trailer iovecs */
-                                 foffset,  /* offset in the file to begin
-                                              sending from              */
-                                 flen,     /* length of file            */
-                                 nbytes + flen, /* total length including
-                                                   headers                */
-                                 flags);   /* apr_sendfile flags        */
-
-            /* If apr_sendfile() returns APR_ENOTIMPL, call emulate_sendfile().
-             * emulate_sendfile() is useful to enable the same Apache binary
-             * distribution to support Windows NT/2000 (supports TransmitFile)
-             * and Win95/98 (do not support TransmitFile)
-             */
-            if (rv == APR_ENOTIMPL)
-#endif
-            {
-                apr_size_t unused_bytes_sent;
-                rv = emulate_sendfile(net, fd, &hdtr, foffset, flen,
-                                      &unused_bytes_sent);
-            }
-
-            fd = NULL;
-        }
-        else {
-            apr_size_t unused_bytes_sent;
-
-            rv = writev_it_all(net->client_socket,
-                               vec, nvec,
-                               nbytes, &unused_bytes_sent);
-        }
-
-        apr_brigade_destroy(b);
-        if (rv != APR_SUCCESS) {
-            ap_log_error(APLOG_MARK, APLOG_INFO, rv, c->base_server,
-                         "core_output_filter: writing data to the network");
-
-            if (more)
-                apr_brigade_destroy(more);
-
-            if (APR_STATUS_IS_ECONNABORTED(rv)
-                || APR_STATUS_IS_ECONNRESET(rv)
-                || APR_STATUS_IS_EPIPE(rv)) {
-                c->aborted = 1;
-            }
-
-            return rv;
-        }
-
-        b = more;
-        more = NULL;
-    }  /* end while () */
-
-    return APR_SUCCESS;
-}
-
-static int core_post_config(apr_pool_t *pconf, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *s)
-{
-    ap_set_version(pconf);
-    return OK;
-}
-
-static int core_open_logs(apr_pool_t *pconf, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *s)
-{
-    ap_open_logs(s, plog);
-    return OK;
-}
-
-static void core_insert_filter(request_rec *r)
-{
-    core_dir_config *conf = (core_dir_config *)
-                            ap_get_module_config(r->per_dir_config,
-                                                 &core_module);
-    const char *filter, *filters = conf->output_filters;
-
-    if (filters) {
-        while (*filters && (filter = ap_getword(r->pool, &filters, ';'))) {
-            ap_add_output_filter(filter, NULL, r, r->connection);
-        }
-    }
-
-    filters = conf->input_filters;
-    if (filters) {
-        while (*filters && (filter = ap_getword(r->pool, &filters, ';'))) {
-            ap_add_input_filter(filter, NULL, r, r->connection);
-        }
-    }
-}
-
-static apr_size_t num_request_notes = AP_NUM_STD_NOTES;
-
-static apr_status_t reset_request_notes(void *dummy)
-{
-    num_request_notes = AP_NUM_STD_NOTES;
-    return APR_SUCCESS;
-}
-
-AP_DECLARE(apr_size_t) ap_register_request_note(void)
-{
-    apr_pool_cleanup_register(apr_global_hook_pool, NULL, reset_request_notes,
-                              apr_pool_cleanup_null);
-    return num_request_notes++;
-}
-
-AP_DECLARE(void **) ap_get_request_note(request_rec *r, apr_size_t note_num)
-{
-    core_request_config *req_cfg;
-
-    if (note_num >= num_request_notes) {
-        return NULL;
-    }
-
-    req_cfg = (core_request_config *)
-        ap_get_module_config(r->request_config, &core_module);
-
-    if (!req_cfg) {
-        return NULL;
-    }
-
-    return &(req_cfg->notes[note_num]);
-}
-
-static int core_create_req(request_rec *r)
-{
-    /* Alloc the config struct and the array of request notes in
-     * a single block for efficiency
-     */
-    core_request_config *req_cfg;
-
-    req_cfg = apr_pcalloc(r->pool, sizeof(core_request_config) +
-                          sizeof(void *) * num_request_notes);
-    req_cfg->notes = (void **)((char *)req_cfg + sizeof(core_request_config));
-    if (r->main) {
-        core_request_config *main_req_cfg = (core_request_config *)
-            ap_get_module_config(r->main->request_config, &core_module);
-        req_cfg->bb = main_req_cfg->bb;
-    }
-    else {
-        req_cfg->bb = apr_brigade_create(r->pool);
-        if (!r->prev) {
-            ap_add_input_filter_handle(ap_net_time_filter_handle,
-                                       NULL, r, r->connection);
-        }
-    }
-
-    ap_set_module_config(r->request_config, &core_module, req_cfg);
-
-    /* Begin by presuming any module can make it's own path_info assumptions,
-     * until some module interjects and changes the value.
-     */
-    r->used_path_info = 2;
-
-    return OK;
-}
-
-static int core_create_proxy_req(request_rec *r, request_rec *pr)
-{
-    return core_create_req(pr);
-}
-
-static conn_rec *core_create_conn(apr_pool_t *ptrans, server_rec *server,
-                                  apr_socket_t *csd, long id, void *sbh)
-{
-    apr_status_t rv;
-    conn_rec *c = (conn_rec *) apr_pcalloc(ptrans, sizeof(conn_rec));
-
-    c->sbh = sbh;
-    (void) ap_update_child_status(c->sbh, SERVER_BUSY_READ, (request_rec *) NULL);
-
-    /* Got a connection structure, so initialize what fields we can
-     * (the rest are zeroed out by pcalloc).
-     */
-    c->conn_config = ap_create_conn_config(ptrans);
-    c->notes = apr_table_make(ptrans, 5);
-
-    c->pool = ptrans;
-    if ((rv = apr_socket_addr_get(&c->local_addr, APR_LOCAL, csd))
-        != APR_SUCCESS) {
-        ap_log_error(APLOG_MARK, APLOG_INFO, rv, server,
-                     "apr_socket_addr_get(APR_LOCAL)");
-        apr_socket_close(csd);
-        return NULL;
-    }
-
-    apr_sockaddr_ip_get(&c->local_ip, c->local_addr);
-    if ((rv = apr_socket_addr_get(&c->remote_addr, APR_REMOTE, csd))
-        != APR_SUCCESS) {
-        ap_log_error(APLOG_MARK, APLOG_INFO, rv, server,
-                     "apr_socket_addr_get(APR_REMOTE)");
-        apr_socket_close(csd);
-        return NULL;
-    }
-
-    apr_sockaddr_ip_get(&c->remote_ip, c->remote_addr);
-    c->base_server = server;
-
-    c->id = id;
-    return c;
-}
-
-static int core_pre_connection(conn_rec *c, void *csd)
-{
-    core_net_rec *net = apr_palloc(c->pool, sizeof(*net));
-
-#ifdef AP_MPM_DISABLE_NAGLE_ACCEPTED_SOCK
-    /* BillS says perhaps this should be moved to the MPMs. Some OSes
-     * allow listening socket attributes to be inherited by the
-     * accept sockets which means this call only needs to be made
-     * once on the listener
-     */
-    ap_sock_disable_nagle(csd);
-#endif
-    net->c = c;
-    net->in_ctx = NULL;
-    net->out_ctx = NULL;
-    net->client_socket = csd;
-
-    ap_set_module_config(net->c->conn_config, &core_module, csd);
-    ap_add_input_filter("CORE_IN", net, NULL, net->c);
-    ap_add_output_filter("CORE", net, NULL, net->c);
-    return DONE;
-}
-
-static void register_hooks(apr_pool_t *p)
-{
-    /* create_connection and install_transport_filters are
-     * hooks that should always be APR_HOOK_REALLY_LAST to give other
-     * modules the opportunity to install alternate network transports
-     * and stop other functions from being run.
-     */
-    ap_hook_create_connection(core_create_conn, NULL, NULL,
-                              APR_HOOK_REALLY_LAST);
-    ap_hook_pre_connection(core_pre_connection, NULL, NULL,
-                           APR_HOOK_REALLY_LAST);
-
-    ap_hook_post_config(core_post_config,NULL,NULL,APR_HOOK_REALLY_FIRST);
-    ap_hook_translate_name(ap_core_translate,NULL,NULL,APR_HOOK_REALLY_LAST);
-    ap_hook_map_to_storage(core_map_to_storage,NULL,NULL,APR_HOOK_REALLY_LAST);
-    ap_hook_open_logs(core_open_logs,NULL,NULL,APR_HOOK_MIDDLE);
-    ap_hook_handler(default_handler,NULL,NULL,APR_HOOK_REALLY_LAST);
-    /* FIXME: I suspect we can eliminate the need for these do_nothings - Ben */
-    ap_hook_type_checker(do_nothing,NULL,NULL,APR_HOOK_REALLY_LAST);
-    ap_hook_fixups(core_override_type,NULL,NULL,APR_HOOK_REALLY_FIRST);
-    ap_hook_fixups(core_filters_type,NULL,NULL,APR_HOOK_MIDDLE);
-    ap_hook_access_checker(do_nothing,NULL,NULL,APR_HOOK_REALLY_LAST);
-    ap_hook_create_request(core_create_req, NULL, NULL, APR_HOOK_MIDDLE);
-    APR_OPTIONAL_HOOK(proxy, create_req, core_create_proxy_req, NULL, NULL,
-                      APR_HOOK_MIDDLE);
-    ap_hook_pre_mpm(ap_create_scoreboard, NULL, NULL, APR_HOOK_MIDDLE);
-
-    /* register the core's insert_filter hook and register core-provided
-     * filters
-     */
-    ap_hook_insert_filter(core_insert_filter, NULL, NULL, APR_HOOK_MIDDLE);
-
-    ap_core_input_filter_handle =
-        ap_register_input_filter("CORE_IN", core_input_filter,
-                                 AP_FTYPE_NETWORK);
-    ap_net_time_filter_handle =
-        ap_register_input_filter("NET_TIME", net_time_filter,
-                                 AP_FTYPE_PROTOCOL);
-    ap_content_length_filter_handle =
-        ap_register_output_filter("CONTENT_LENGTH", ap_content_length_filter,
-                                  AP_FTYPE_PROTOCOL);
-    ap_core_output_filter_handle =
-        ap_register_output_filter("CORE", core_output_filter,
-                                  AP_FTYPE_NETWORK);
-    ap_subreq_core_filter_handle =
-        ap_register_output_filter("SUBREQ_CORE", ap_sub_req_output_filter,
-                                  AP_FTYPE_CONTENT_SET);
-    ap_old_write_func = ap_register_output_filter("OLD_WRITE",
-                                   ap_old_write_filter, AP_FTYPE_RESOURCE - 10);
-}
-
-AP_DECLARE_DATA module core_module = {
-    STANDARD20_MODULE_STUFF,
-    create_core_dir_config,       /* create per-directory config structure */
-    merge_core_dir_configs,       /* merge per-directory config structures */
-    create_core_server_config,    /* create per-server config structure */
-    merge_core_server_configs,    /* merge per-server config structures */
-    core_cmds,                    /* command apr_table_t */
-    register_hooks                /* register hooks */
-};
-
diff --git a/server/error_bucket.c b/server/error_bucket.c
deleted file mode 100644
index cfacbd8..0000000
--- a/server/error_bucket.c
+++ /dev/null
@@ -1,107 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-#include "http_protocol.h"
-#include "apr_buckets.h"
-#include "apr_strings.h"
-#include <stdlib.h>
-#if APR_HAVE_STRINGS_H
-#include <strings.h>
-#endif
-
-static apr_status_t error_read(apr_bucket *b, const char **str,
-                               apr_size_t *len, apr_read_type_e block)
-{
-    *str = NULL;
-    *len = 0;
-    return APR_SUCCESS;
-}
-
-AP_DECLARE(apr_bucket *) ap_bucket_error_make(apr_bucket *b, int error,
-                                              const char *buf, apr_pool_t *p)
-{
-    ap_bucket_error *h;
-
-    h = malloc(sizeof(*h));
-    if (h == NULL) {
-        return NULL;
-    }
-    h->status = error;
-    h->data = (buf) ? apr_pstrdup(p, buf) : NULL;
-
-    b->length = 0;
-    b->start  = 0;
-    b->type = &ap_bucket_type_error;
-    b->data = h;
-    return b;
-}
-
-AP_DECLARE(apr_bucket *) ap_bucket_error_create(int error, 
-		const char *buf, apr_pool_t *p)
-{
-    apr_bucket *b = (apr_bucket *)malloc(sizeof(*b));
-
-    APR_BUCKET_INIT(b);
-    b->free = free;
-    return ap_bucket_error_make(b, error, buf, p);
-}
-
-AP_DECLARE_DATA const apr_bucket_type_t ap_bucket_type_error = {
-    "ERROR", 5,
-    free,
-    error_read,
-    apr_bucket_setaside_notimpl,
-    apr_bucket_split_notimpl,
-    apr_bucket_copy_notimpl
-};
diff --git a/server/gen_test_char.c b/server/gen_test_char.c
deleted file mode 100644
index e85106f..0000000
--- a/server/gen_test_char.c
+++ /dev/null
@@ -1,129 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-#include "apr.h"
-#include "apr_lib.h"
-
-#if APR_HAVE_STDIO_H
-#include <stdio.h>
-#endif
-
-/* we need some of the portability definitions... for strchr */
-#include "httpd.h"
-
-/* A bunch of functions in util.c scan strings looking for certain characters.
- * To make that more efficient we encode a lookup table.
- */
-#define T_ESCAPE_SHELL_CMD    (0x01)
-#define T_ESCAPE_PATH_SEGMENT (0x02)
-#define T_OS_ESCAPE_PATH      (0x04)
-#define T_HTTP_TOKEN_STOP     (0x08)
-
-int main(int argc, char *argv[])
-{
-    unsigned c;
-    unsigned char flags;
-
-    printf("/* this file is automatically generated by gen_test_char, "
-           "do not edit */\n"
-           "#define T_ESCAPE_SHELL_CMD     (%u)\n"
-           "#define T_ESCAPE_PATH_SEGMENT  (%u)\n"
-           "#define T_OS_ESCAPE_PATH       (%u)\n"
-           "#define T_HTTP_TOKEN_STOP      (%u)\n"
-           "\n"
-           "static const unsigned char test_char_table[256] = {\n"
-           "    0,",
-           T_ESCAPE_SHELL_CMD,
-           T_ESCAPE_PATH_SEGMENT,
-           T_OS_ESCAPE_PATH,
-           T_HTTP_TOKEN_STOP);
-
-    /* we explicitly dealt with NUL above
-     * in case some strchr() do bogosity with it */
-
-    for (c = 1; c < 256; ++c) {
-        flags = 0;
-        if (c % 20 == 0)
-            printf("\n    ");
-
-        /* escape_shell_cmd */
-        if (strchr("&;`'\"|*?~<>^()[]{}$\\\n", c)) {
-            flags |= T_ESCAPE_SHELL_CMD;
-        }
-
-        if (!apr_isalnum(c) && !strchr("$-_.+!*'(),:@&=~", c)) {
-            flags |= T_ESCAPE_PATH_SEGMENT;
-        }
-
-        if (!apr_isalnum(c) && !strchr("$-_.+!*'(),:@&=/~", c)) {
-            flags |= T_OS_ESCAPE_PATH;
-        }
-
-        /* these are the "tspecials" from RFC2068 */
-        if (apr_iscntrl(c) || strchr(" \t()<>@,;:\\/[]?={}", c)) {
-            flags |= T_HTTP_TOKEN_STOP;
-        }
-
-        printf("%u%c", flags, (c < 255) ? ',' : ' ');
-
-    }
-
-    printf("\n};\n");
-
-    return 0;
-}
diff --git a/server/gen_test_char.dsp b/server/gen_test_char.dsp
deleted file mode 100644
index f37f4e8..0000000
--- a/server/gen_test_char.dsp
+++ /dev/null
@@ -1,94 +0,0 @@
-# Microsoft Developer Studio Project File - Name="gen_test_char" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Console Application" 0x0103
-
-CFG=gen_test_char - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "gen_test_char.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "gen_test_char.mak" CFG="gen_test_char - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "gen_test_char - Win32 Release" (based on "Win32 (x86) Console Application")
-!MESSAGE "gen_test_char - Win32 Debug" (based on "Win32 (x86) Console Application")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "gen_test_char - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir ""
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir ""
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c
-# ADD CPP /nologo /MD /W3 /O2 /I "..\include" /I "..\srclib\apr\include" /I "..\srclib\apr-util\include" /I "..\os\win32" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /Fd"Release\gen_test_char" /FD /c
-# ADD BASE RSC /l 0x809 /d "NDEBUG"
-# ADD RSC /l 0x809 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:console /pdb:"Release\gen_test_char.pdb" /machine:I386
-# SUBTRACT BASE LINK32 /pdb:none
-# ADD LINK32 kernel32.lib /nologo /subsystem:console /pdb:"Release\gen_test_char.pdb" /machine:I386
-# SUBTRACT LINK32 /pdb:none
-
-!ELSEIF  "$(CFG)" == "gen_test_char - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir ""
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir ""
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "..\include" /I "..\srclib\apr\include" /I "..\srclib\apr-util\include" /I "..\os\win32" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /Fd"Debug\gen_test_char" /FD /c
-# ADD BASE RSC /l 0x809 /d "_DEBUG"
-# ADD RSC /l 0x809 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:console /incremental:no /pdb:"Debug\gen_test_char.pdb" /debug /machine:I386 /pdbtype:sept
-# SUBTRACT BASE LINK32 /pdb:none
-# ADD LINK32 kernel32.lib /nologo /subsystem:console /incremental:no /pdb:"Debug\gen_test_char.pdb" /debug /machine:I386
-# SUBTRACT LINK32 /pdb:none
-
-!ENDIF 
-
-# Begin Target
-
-# Name "gen_test_char - Win32 Release"
-# Name "gen_test_char - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\gen_test_char.c
-# End Source File
-# End Target
-# End Project
diff --git a/server/listen.c b/server/listen.c
deleted file mode 100644
index a5b4b0c..0000000
--- a/server/listen.c
+++ /dev/null
@@ -1,444 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-#include "apr_network_io.h"
-#include "apr_strings.h"
-#include "apr_lock.h"
-
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-#define CORE_PRIVATE
-#include "ap_config.h"
-#include "httpd.h"
-#include "http_config.h"
-#include "ap_listen.h"
-#include "http_log.h"
-#include "mpm.h"
-#include "mpm_common.h"
-
-ap_listen_rec *ap_listeners = NULL;
-
-#if APR_HAVE_IPV6
-static int default_family = APR_UNSPEC;
-#else
-static int default_family = APR_INET;
-#endif
-
-static ap_listen_rec *old_listeners;
-static int ap_listenbacklog;
-static int send_buffer_size;
-
-/* TODO: make_sock is just begging and screaming for APR abstraction */
-static apr_status_t make_sock(apr_pool_t *p, ap_listen_rec *server)
-{
-    apr_socket_t *s = server->sd;
-    int one = 1;
-    apr_status_t stat;
-
-#ifndef WIN32
-    stat = apr_setsocketopt(s, APR_SO_REUSEADDR, one);
-    if (stat != APR_SUCCESS && stat != APR_ENOTIMPL) {
-        ap_log_perror(APLOG_MARK, APLOG_CRIT, stat, p,
-                      "make_sock: for address %pI, setsockopt: (SO_REUSEADDR)",
-                      server->bind_addr);
-        apr_socket_close(s);
-        return stat;
-    }
-#endif
-
-    stat = apr_setsocketopt(s, APR_SO_KEEPALIVE, one);
-    if (stat != APR_SUCCESS && stat != APR_ENOTIMPL) {
-        ap_log_perror(APLOG_MARK, APLOG_CRIT, stat, p,
-                      "make_sock: for address %pI, setsockopt: (SO_KEEPALIVE)",
-                      server->bind_addr);
-        apr_socket_close(s);
-        return stat;
-    }
-
-    /*
-     * To send data over high bandwidth-delay connections at full
-     * speed we must force the TCP window to open wide enough to keep the
-     * pipe full.  The default window size on many systems
-     * is only 4kB.  Cross-country WAN connections of 100ms
-     * at 1Mb/s are not impossible for well connected sites.
-     * If we assume 100ms cross-country latency,
-     * a 4kB buffer limits throughput to 40kB/s.
-     *
-     * To avoid this problem I've added the SendBufferSize directive
-     * to allow the web master to configure send buffer size.
-     *
-     * The trade-off of larger buffers is that more kernel memory
-     * is consumed.  YMMV, know your customers and your network!
-     *
-     * -John Heidemann <johnh@isi.edu> 25-Oct-96
-     *
-     * If no size is specified, use the kernel default.
-     */
-    if (send_buffer_size) {
-        stat = apr_setsocketopt(s, APR_SO_SNDBUF,  send_buffer_size);
-        if (stat != APR_SUCCESS && stat != APR_ENOTIMPL) {
-            ap_log_perror(APLOG_MARK, APLOG_WARNING, stat, p,
-                          "make_sock: failed to set SendBufferSize for "
-                          "address %pI, using default",
-                          server->bind_addr);
-            /* not a fatal error */
-        }
-    }
-
-#if APR_TCP_NODELAY_INHERITED
-    ap_sock_disable_nagle(s);
-#endif
-
-    if ((stat = apr_bind(s, server->bind_addr)) != APR_SUCCESS) {
-        ap_log_perror(APLOG_MARK, APLOG_STARTUP|APLOG_CRIT, stat, p,
-                      "make_sock: could not bind to address %pI",
-                      server->bind_addr);
-        apr_socket_close(s);
-        return stat;
-    }
-
-    if ((stat = apr_listen(s, ap_listenbacklog)) != APR_SUCCESS) {
-        ap_log_perror(APLOG_MARK, APLOG_STARTUP|APLOG_ERR, stat, p,
-                      "make_sock: unable to listen for connections "
-                      "on address %pI",
-                      server->bind_addr);
-        apr_socket_close(s);
-        return stat;
-    }
-
-#ifdef WIN32
-    /* I seriously doubt that this would work on Unix; I have doubts that
-     * it entirely solves the problem on Win32.  However, since setting
-     * reuseaddr on the listener -prior- to binding the socket has allowed
-     * us to attach to the same port as an already running instance of
-     * Apache, or even another web server, we cannot identify that this
-     * port was exclusively granted to this instance of Apache.
-     *
-     * So set reuseaddr, but do not attempt to do so until we have the
-     * parent listeners successfully bound.
-     */
-    stat = apr_setsocketopt(s, APR_SO_REUSEADDR, one);
-    if (stat != APR_SUCCESS && stat != APR_ENOTIMPL) {
-        ap_log_perror(APLOG_MARK, APLOG_CRIT, stat, p,
-                    "make_sock: for address %pI, setsockopt: (SO_REUSEADDR)", 
-                     server->bind_addr);
-        apr_socket_close(s);
-        return stat;
-    }
-#endif
-
-#if APR_HAS_SO_ACCEPTFILTER
-#ifndef ACCEPT_FILTER_NAME
-#define ACCEPT_FILTER_NAME "dataready"
-#endif
-    apr_socket_accept_filter(s, ACCEPT_FILTER_NAME, "");
-#endif
-
-    server->sd = s;
-    server->active = 1;
-
-#ifdef MPM_ACCEPT_FUNC
-    server->accept_func = MPM_ACCEPT_FUNC;
-#else
-    server->accept_func = NULL;
-#endif
-
-    return APR_SUCCESS;
-}
-
-static apr_status_t close_listeners_on_exec(void *v)
-{
-    ap_listen_rec *lr;
-
-    for (lr = ap_listeners; lr; lr = lr->next) {
-        apr_socket_close(lr->sd);
-        lr->active = 0;
-    }
-
-    return APR_SUCCESS;
-}
-
-
-static void find_default_family(apr_pool_t *p)
-{
-#if APR_HAVE_IPV6
-    /* We know the platform supports IPv6, but this particular
-     * system may not have IPv6 enabled.  See if we can get an
-     * AF_INET6 socket.
-     */
-    if (default_family == APR_UNSPEC) {
-        apr_socket_t *tmp_sock;
-
-        if (apr_socket_create(&tmp_sock, APR_INET6, SOCK_STREAM,
-                              p) == APR_SUCCESS) {
-            apr_socket_close(tmp_sock);
-            default_family = APR_INET6;
-        }
-        else {
-            default_family = APR_INET;
-        }
-    }
-#endif
-}
-
-
-static void alloc_listener(process_rec *process, char *addr, apr_port_t port)
-{
-    ap_listen_rec **walk;
-    ap_listen_rec *new;
-    apr_status_t status;
-    char *oldaddr;
-    apr_port_t oldport;
-    apr_sockaddr_t *sa;
-
-    if (!addr) { /* don't bind to specific interface */
-        find_default_family(process->pool);
-        switch(default_family) {
-        case APR_INET:
-            addr = "0.0.0.0";
-            break;
-
-#if APR_HAVE_IPV6
-        case APR_INET6:
-            addr = "::";
-            break;
-#endif
-
-        default:
-            ap_assert(1 != 1); /* should not occur */
-        }
-    }
-
-    /* see if we've got an old listener for this address:port */
-    for (walk = &old_listeners; *walk; walk = &(*walk)->next) {
-        sa = (*walk)->bind_addr;
-        /* Some listeners are not real so they will not have a bind_addr. */
-        if (sa) {
-            apr_sockaddr_port_get(&oldport, sa);
-            apr_sockaddr_ip_get(&oldaddr, sa);
-            if (!strcmp(oldaddr, addr) && port == oldport) {
-                /* re-use existing record */
-                new = *walk;
-                *walk = new->next;
-                new->next = ap_listeners;
-                ap_listeners = new;
-                return;
-            }
-        }
-    }
-
-    /* this has to survive restarts */
-    new = apr_palloc(process->pool, sizeof(ap_listen_rec));
-    new->active = 0;
-    if ((status = apr_sockaddr_info_get(&new->bind_addr, addr, APR_UNSPEC,
-                                        port, 0, process->pool))
-        != APR_SUCCESS) {
-        ap_log_perror(APLOG_MARK, APLOG_CRIT, status, process->pool,
-                      "alloc_listener: failed to set up sockaddr for %s",
-                      addr);
-        return;
-    }
-    if ((status = apr_socket_create(&new->sd,
-                                    new->bind_addr->family,
-                                    SOCK_STREAM, process->pool))
-        != APR_SUCCESS) {
-        ap_log_perror(APLOG_MARK, APLOG_CRIT, status, process->pool,
-                      "alloc_listener: failed to get a socket for %s", addr);
-        return;
-    }
-
-    new->next = ap_listeners;
-    ap_listeners = new;
-}
-
-static int ap_listen_open(process_rec *process, apr_port_t port)
-{
-    apr_pool_t *pconf = process->pconf;
-    ap_listen_rec *lr;
-    ap_listen_rec *next;
-    int num_open;
-
-    /* Don't allocate a default listener.  If we need to listen to a
-     * port, then the user needs to have a Listen directive in their
-     * config file.
-     */
-    num_open = 0;
-    for (lr = ap_listeners; lr; lr = lr->next) {
-        if (lr->active) {
-            ++num_open;
-        }
-        else {
-            if (make_sock(pconf, lr) == APR_SUCCESS) {
-                ++num_open;
-                lr->active = 1;
-            }
-            else {
-                /* fatal error */
-                return -1;
-            }
-        }
-    }
-
-    /* close the old listeners */
-    for (lr = old_listeners; lr; lr = next) {
-        apr_socket_close(lr->sd);
-        lr->active = 0;
-        next = lr->next;
-    }
-    old_listeners = NULL;
-
-    apr_pool_cleanup_register(pconf, NULL, apr_pool_cleanup_null,
-                              close_listeners_on_exec);
-
-    return num_open ? 0 : -1;
-}
-
-int ap_setup_listeners(server_rec *s)
-{
-    ap_listen_rec *lr;
-    int num_listeners = 0;
-
-    if (ap_listen_open(s->process, s->port)) {
-       return 0;
-    }
-
-    for (lr = ap_listeners; lr; lr = lr->next) {
-        num_listeners++;
-    }
-
-    return num_listeners;
-}
-
-void ap_listen_pre_config(void)
-{
-    old_listeners = ap_listeners;
-    ap_listeners = NULL;
-    ap_listenbacklog = DEFAULT_LISTENBACKLOG;
-}
-
-
-const char *ap_set_listener(cmd_parms *cmd, void *dummy, const char *ips)
-{
-    char *host, *scope_id;
-    apr_port_t port;
-    apr_status_t rv;
-    const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
-
-    if (err != NULL) {
-        return err;
-    }
-
-    rv = apr_parse_addr_port(&host, &scope_id, &port, ips, cmd->pool);
-    if (rv != APR_SUCCESS) {
-        return "Invalid address or port";
-    }
-
-    if (host && !strcmp(host, "*")) {
-        host = NULL;
-    }
-
-    if (scope_id) {
-        /* XXX scope id support is useful with link-local IPv6 addresses */
-        return "Scope id is not supported";
-    }
-
-    if (!port) {
-        return "Port must be specified";
-    }
-
-    alloc_listener(cmd->server->process, host, port);
-
-    return NULL;
-}
-
-const char *ap_set_listenbacklog(cmd_parms *cmd, void *dummy, const char *arg)
-{
-    int b;
-    const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
-
-    if (err != NULL) {
-        return err;
-    }
-
-    b = atoi(arg);
-    if (b < 1) {
-        return "ListenBacklog must be > 0";
-    }
-
-    ap_listenbacklog = b;
-    return NULL;
-}
-
-const char *ap_set_send_buffer_size(cmd_parms *cmd, void *dummy,
-                                    const char *arg)
-{
-    int s = atoi(arg);
-    const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
-
-    if (err != NULL) {
-        return err;
-    }
-
-    if (s < 512 && s != 0) {
-        return "SendBufferSize must be >= 512 bytes, or 0 for system default.";
-    }
-
-    send_buffer_size = s;
-    return NULL;
-}
diff --git a/server/log.c b/server/log.c
deleted file mode 100644
index 37e8561..0000000
--- a/server/log.c
+++ /dev/null
@@ -1,804 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-/*
- * http_log.c: Dealing with the logs and errors
- *
- * Rob McCool
- *
- */
-
-#include "apr.h"
-#include "apr_general.h"        /* for signal stuff */
-#include "apr_strings.h"
-#include "apr_errno.h"
-#include "apr_thread_proc.h"
-#include "apr_lib.h"
-#include "apr_signal.h"
-
-#define APR_WANT_STDIO
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-#if APR_HAVE_STDARG_H
-#include <stdarg.h>
-#endif
-#if APR_HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#define CORE_PRIVATE
-
-#include "ap_config.h"
-#include "httpd.h"
-#include "http_config.h"
-#include "http_core.h"
-#include "http_log.h"
-#include "http_main.h"
-#include "util_time.h"
-
-typedef struct {
-    char    *t_name;
-    int      t_val;
-} TRANS;
-
-APR_HOOK_STRUCT(
-    APR_HOOK_LINK(error_log)
-)
-
-int AP_DECLARE_DATA ap_default_loglevel = DEFAULT_LOGLEVEL;
-
-#ifdef HAVE_SYSLOG
-
-static const TRANS facilities[] = {
-    {"auth",    LOG_AUTH},
-#ifdef LOG_AUTHPRIV
-    {"authpriv",LOG_AUTHPRIV},
-#endif
-#ifdef LOG_CRON
-    {"cron",    LOG_CRON},
-#endif
-#ifdef LOG_DAEMON
-    {"daemon",  LOG_DAEMON},
-#endif
-#ifdef LOG_FTP
-    {"ftp", LOG_FTP},
-#endif
-#ifdef LOG_KERN
-    {"kern",    LOG_KERN},
-#endif
-#ifdef LOG_LPR
-    {"lpr", LOG_LPR},
-#endif
-#ifdef LOG_MAIL
-    {"mail",    LOG_MAIL},
-#endif
-#ifdef LOG_NEWS
-    {"news",    LOG_NEWS},
-#endif
-#ifdef LOG_SYSLOG
-    {"syslog",  LOG_SYSLOG},
-#endif
-#ifdef LOG_USER
-    {"user",    LOG_USER},
-#endif
-#ifdef LOG_UUCP
-    {"uucp",    LOG_UUCP},
-#endif
-#ifdef LOG_LOCAL0
-    {"local0",  LOG_LOCAL0},
-#endif
-#ifdef LOG_LOCAL1
-    {"local1",  LOG_LOCAL1},
-#endif
-#ifdef LOG_LOCAL2
-    {"local2",  LOG_LOCAL2},
-#endif
-#ifdef LOG_LOCAL3
-    {"local3",  LOG_LOCAL3},
-#endif
-#ifdef LOG_LOCAL4
-    {"local4",  LOG_LOCAL4},
-#endif
-#ifdef LOG_LOCAL5
-    {"local5",  LOG_LOCAL5},
-#endif
-#ifdef LOG_LOCAL6
-    {"local6",  LOG_LOCAL6},
-#endif
-#ifdef LOG_LOCAL7
-    {"local7",  LOG_LOCAL7},
-#endif
-    {NULL,      -1},
-};
-#endif
-
-static const TRANS priorities[] = {
-    {"emerg",   APLOG_EMERG},
-    {"alert",   APLOG_ALERT},
-    {"crit",    APLOG_CRIT},
-    {"error",   APLOG_ERR},
-    {"warn",    APLOG_WARNING},
-    {"notice",  APLOG_NOTICE},
-    {"info",    APLOG_INFO},
-    {"debug",   APLOG_DEBUG},
-    {NULL,      -1},
-};
-
-static apr_file_t *stderr_log = NULL;
-
-AP_DECLARE(void) ap_open_stderr_log(apr_pool_t *p)
-{
-    apr_file_open_stderr(&stderr_log, p);
-}
-
-static int log_child(apr_pool_t *p, const char *progname,
-                     apr_file_t **fpin)
-{
-    /* Child process code for 'ErrorLog "|..."';
-     * may want a common framework for this, since I expect it will
-     * be common for other foo-loggers to want this sort of thing...
-     */
-    apr_status_t rc;
-    apr_procattr_t *procattr;
-    apr_proc_t *procnew;
-
-    if (((rc = apr_procattr_create(&procattr, p)) == APR_SUCCESS)
-        && ((rc = apr_procattr_io_set(procattr,
-                                      APR_FULL_BLOCK,
-                                      APR_NO_PIPE,
-                                      APR_NO_PIPE)) == APR_SUCCESS)) {
-        char **args;
-        const char *pname;
-
-        apr_tokenize_to_argv(progname, &args, p);
-        pname = apr_pstrdup(p, args[0]);
-        procnew = (apr_proc_t *)apr_pcalloc(p, sizeof(*procnew));
-        rc = apr_proc_create(procnew, pname, (const char * const *)args,
-                             NULL, procattr, p);
-
-        if (rc == APR_SUCCESS) {
-            apr_pool_note_subprocess(p, procnew, APR_KILL_AFTER_TIMEOUT);
-            (*fpin) = procnew->in;
-        }
-    }
-
-    return rc;
-}
-
-static void open_error_log(server_rec *s, apr_pool_t *p)
-{
-    const char *fname;
-    int rc;
-
-    if (*s->error_fname == '|') {
-        apr_file_t *dummy = NULL;
-
-        /* This starts a new process... */
-        rc = log_child (p, s->error_fname + 1, &dummy);
-        if (rc != APR_SUCCESS) {
-            ap_log_error(APLOG_MARK, APLOG_STARTUP, rc, NULL,
-                         "Couldn't start ErrorLog process");
-            exit(1);
-        }
-
-        s->error_log = dummy;
-    }
-
-#ifdef HAVE_SYSLOG
-    else if (!strncasecmp(s->error_fname, "syslog", 6)) {
-        if ((fname = strchr(s->error_fname, ':'))) {
-            const TRANS *fac;
-
-            fname++;
-            for (fac = facilities; fac->t_name; fac++) {
-                if (!strcasecmp(fname, fac->t_name)) {
-                    openlog(ap_server_argv0, LOG_NDELAY|LOG_CONS|LOG_PID,
-                            fac->t_val);
-                    s->error_log = NULL;
-                    return;
-                }
-            }
-        }
-        else {
-            openlog(ap_server_argv0, LOG_NDELAY|LOG_CONS|LOG_PID, LOG_LOCAL7);
-        }
-
-        s->error_log = NULL;
-    }
-#endif
-    else {
-        fname = ap_server_root_relative(p, s->error_fname);
-        if (!fname) {
-            ap_log_error(APLOG_MARK, APLOG_STARTUP, APR_EBADPATH, NULL,
-                         "%s: Invalid error log path %s.",
-                         ap_server_argv0, s->error_fname);
-            exit(1);
-        }
-        if ((rc = apr_file_open(&s->error_log, fname,
-                               APR_APPEND | APR_READ | APR_WRITE | APR_CREATE,
-                               APR_OS_DEFAULT, p)) != APR_SUCCESS) {
-            ap_log_error(APLOG_MARK, APLOG_STARTUP, rc, NULL,
-                         "%s: could not open error log file %s.",
-                         ap_server_argv0, fname);
-            exit(1);
-        }
-
-        apr_file_set_inherit(s->error_log);
-    }
-}
-
-void ap_open_logs(server_rec *s_main, apr_pool_t *p)
-{
-    apr_status_t rc = APR_SUCCESS;
-    server_rec *virt, *q;
-    int replace_stderr;
-    apr_file_t *errfile = NULL;
-
-    open_error_log(s_main, p);
-
-    replace_stderr = 1;
-    if (s_main->error_log) {
-        /* replace stderr with this new log */
-        apr_file_flush(s_main->error_log);
-        if ((rc = apr_file_open_stderr(&errfile, p)) == APR_SUCCESS) {
-            rc = apr_file_dup2(errfile, s_main->error_log, p);
-        }
-        if (rc != APR_SUCCESS) {
-            ap_log_error(APLOG_MARK, APLOG_CRIT, rc, s_main,
-                         "unable to replace stderr with error_log");
-        }
-        else {
-            replace_stderr = 0;
-        }
-    }
-    /* note that stderr may still need to be replaced with something
-     * because it points to the old error log, or back to the tty
-     * of the submitter.
-     * XXX: This is BS - /dev/null is non-portable
-     */
-    if (replace_stderr && freopen("/dev/null", "w", stderr) == NULL) {
-        ap_log_error(APLOG_MARK, APLOG_CRIT, errno, s_main,
-                     "unable to replace stderr with /dev/null");
-    }
-
-    for (virt = s_main->next; virt; virt = virt->next) {
-        if (virt->error_fname) {
-            for (q=s_main; q != virt; q = q->next) {
-                if (q->error_fname != NULL
-                    && strcmp(q->error_fname, virt->error_fname) == 0) {
-                    break;
-                }
-            }
-
-            if (q == virt) {
-                open_error_log(virt, p);
-            }
-            else {
-                virt->error_log = q->error_log;
-            }
-        }
-        else {
-            virt->error_log = s_main->error_log;
-        }
-    }
-}
-
-AP_DECLARE(void) ap_error_log2stderr(server_rec *s) {
-    apr_file_t *errfile = NULL;
-
-    apr_file_open_stderr(&errfile, s->process->pool);
-    if (s->error_log != NULL) {
-        apr_file_dup2(s->error_log, errfile, s->process->pool);
-    }
-}
-
-static void log_error_core(const char *file, int line, int level,
-                           apr_status_t status, const server_rec *s,
-                           const request_rec *r, apr_pool_t *pool,
-                           const char *fmt, va_list args)
-{
-    char errstr[MAX_STRING_LEN];
-    size_t len, errstrlen;
-    apr_file_t *logf = NULL;
-    const char *referer;
-    int level_and_mask = level & APLOG_LEVELMASK;
-
-    if (s == NULL) {
-        /*
-         * If we are doing stderr logging (startup), don't log messages that are
-         * above the default server log level unless it is a startup/shutdown
-         * notice
-         */
-        if ((level_and_mask != APLOG_NOTICE)
-            && (level_and_mask > ap_default_loglevel)) {
-            return;
-        }
-
-        logf = stderr_log;
-    }
-    else if (s->error_log) {
-        /*
-         * If we are doing normal logging, don't log messages that are
-         * above the server log level unless it is a startup/shutdown notice
-         */
-        if ((level_and_mask != APLOG_NOTICE)
-            && (level_and_mask > s->loglevel)) {
-            return;
-        }
-
-        logf = s->error_log;
-    }
-#ifdef TPF
-    else if (tpf_child) {
-        /*
-         * If we are doing normal logging, don't log messages that are
-         * above the server log level unless it is a startup/shutdown notice
-         */
-        if ((level_and_mask != APLOG_NOTICE)
-            && (level_and_mask > s->loglevel)) {
-            return;
-        }
-
-        logf = stderr;
-    }
-#endif /* TPF */
-    else {
-        /*
-         * If we are doing syslog logging, don't log messages that are
-         * above the server log level (including a startup/shutdown notice)
-         */
-        if (level_and_mask > s->loglevel) {
-            return;
-        }
-    }
-
-    if (logf && ((level & APLOG_STARTUP) != APLOG_STARTUP)) {
-        errstr[0] = '[';
-        ap_recent_ctime(errstr + 1, apr_time_now());
-        errstr[1 + APR_CTIME_LEN - 1] = ']';
-        errstr[1 + APR_CTIME_LEN    ] = ' ';
-        len = 1 + APR_CTIME_LEN + 1;
-    } else {
-        len = 0;
-    }
-
-    if ((level & APLOG_STARTUP) != APLOG_STARTUP) {
-        len += apr_snprintf(errstr + len, MAX_STRING_LEN - len,
-                            "[%s] ", priorities[level_and_mask].t_name);
-    }
-
-#ifndef TPF
-    if (file && level_and_mask == APLOG_DEBUG) {
-#ifdef _OSD_POSIX
-        char tmp[256];
-        char *e = strrchr(file, '/');
-
-        /* In OSD/POSIX, the compiler returns for __FILE__
-         * a string like: __FILE__="*POSIX(/usr/include/stdio.h)"
-         * (it even returns an absolute path for sources in
-         * the current directory). Here we try to strip this
-         * down to the basename.
-         */
-        if (e != NULL && e[1] != '\0') {
-            apr_snprintf(tmp, sizeof(tmp), "%s", &e[1]);
-            e = &tmp[strlen(tmp)-1];
-            if (*e == ')') {
-                *e = '\0';
-            }
-            file = tmp;
-        }
-#endif /*_OSD_POSIX*/
-        len += apr_snprintf(errstr + len, MAX_STRING_LEN - len,
-                            "%s(%d): ", file, line);
-    }
-#endif /* TPF */
-
-    if (r && r->connection) {
-        /* XXX: TODO: add a method of selecting whether logged client
-         * addresses are in dotted quad or resolved form... dotted
-         * quad is the most secure, which is why I'm implementing it
-         * first. -djg
-         */
-        len += apr_snprintf(errstr + len, MAX_STRING_LEN - len,
-                            "[client %s] ", r->connection->remote_ip);
-    }
-    if (!(level & APLOG_NOERRNO) && (status != 0)) {
-        char buf[120];
-        len += apr_snprintf(errstr + len, MAX_STRING_LEN - len,
-                            "(%d)%s: ", status,
-                            apr_strerror(status, buf, sizeof(buf)));
-    }
-    errstrlen = len;
-    len += apr_vsnprintf(errstr + len, MAX_STRING_LEN - len, fmt, args);
-
-    if (r && (referer = apr_table_get(r->headers_in, "Referer"))) {
-        len += apr_snprintf(errstr + len, MAX_STRING_LEN - len,
-                            ", referer: %s", referer);
-    }
-
-    /* NULL if we are logging to syslog */
-    if (logf) {
-        /* Truncate for the terminator (as apr_snprintf does) */
-        if (len > MAX_STRING_LEN - sizeof(APR_EOL_STR)) {
-            len = MAX_STRING_LEN - sizeof(APR_EOL_STR);
-        }
-        strcpy(errstr + len, APR_EOL_STR);
-        apr_file_puts(errstr, logf);
-        apr_file_flush(logf);
-    }
-#ifdef HAVE_SYSLOG
-    else {
-        syslog(level_and_mask, "%s", errstr);
-    }
-#endif
-
-    ap_run_error_log(file, line, level, status, s, r, pool, errstr + errstrlen);
-}
-
-AP_DECLARE(void) ap_log_error(const char *file, int line, int level,
-                              apr_status_t status, const server_rec *s,
-                              const char *fmt, ...)
-{
-    va_list args;
-
-    va_start(args, fmt);
-    log_error_core(file, line, level, status, s, NULL, NULL, fmt, args);
-    va_end(args);
-}
-
-AP_DECLARE(void) ap_log_perror(const char *file, int line, int level,
-                               apr_status_t status, apr_pool_t *p,
-                               const char *fmt, ...)
-{
-    va_list args;
-
-    va_start(args, fmt);
-    log_error_core(file, line, level, status, NULL, NULL, p, fmt, args);
-    va_end(args);
-}
-
-AP_DECLARE(void) ap_log_rerror(const char *file, int line, int level,
-                               apr_status_t status, const request_rec *r,
-                               const char *fmt, ...)
-{
-    va_list args;
-
-    va_start(args, fmt);
-    log_error_core(file, line, level, status, r->server, r, NULL, fmt, args);
-
-    /*
-     * IF the error level is 'warning' or more severe,
-     * AND there isn't already error text associated with this request,
-     * THEN make the message text available to ErrorDocument and
-     * other error processors.  This can be disabled by stuffing
-     * something, even an empty string, into the "error-notes" cell
-     * before calling this routine.
-     */
-    va_end(args);
-    va_start(args,fmt);
-    if (((level & APLOG_LEVELMASK) <= APLOG_WARNING)
-        && (apr_table_get(r->notes, "error-notes") == NULL)) {
-        apr_table_setn(r->notes, "error-notes",
-                       ap_escape_html(r->pool, apr_pvsprintf(r->pool, fmt,
-                                                             args)));
-    }
-    va_end(args);
-}
-
-AP_DECLARE(void) ap_log_pid(apr_pool_t *p, const char *filename)
-{
-    apr_file_t *pid_file = NULL;
-    apr_finfo_t finfo;
-    static pid_t saved_pid = -1;
-    pid_t mypid;
-    apr_status_t rv;
-    const char *fname;
-
-    if (!filename) {
-        return;
-    }
-
-    fname = ap_server_root_relative(p, filename);
-    if (!fname) {
-        ap_log_error(APLOG_MARK, APLOG_STARTUP|APLOG_CRIT, APR_EBADPATH, 
-                     NULL, "Invalid PID file path %s, ignoring.", filename);
-        return;
-    }
-
-    mypid = getpid();
-    if (mypid != saved_pid
-        && apr_stat(&finfo, fname, APR_FINFO_MTIME, p) == APR_SUCCESS) {
-        /* AP_SIG_GRACEFUL and HUP call this on each restart.
-         * Only warn on first time through for this pid.
-         *
-         * XXX: Could just write first time through too, although
-         *      that may screw up scripts written to do something
-         *      based on the last modification time of the pid file.
-         */
-        ap_log_perror(APLOG_MARK, APLOG_NOERRNO|APLOG_WARNING, 0, p,
-                      apr_psprintf(p, "pid file %s overwritten -- Unclean "
-                                   "shutdown of previous Apache run?",
-                                   fname));
-    }
-
-    if ((rv = apr_file_open(&pid_file, fname,
-                            APR_WRITE | APR_CREATE | APR_TRUNCATE,
-                            APR_UREAD | APR_UWRITE | APR_GREAD | APR_WREAD, p))
-        != APR_SUCCESS) {
-        ap_log_error(APLOG_MARK, APLOG_ERR, rv, NULL,
-                     "could not create %s", fname);
-        ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, NULL,
-                     "%s: could not log pid to file %s",
-                     ap_server_argv0, fname);
-        exit(1);
-    }
-    apr_file_printf(pid_file, "%ld" APR_EOL_STR, (long)mypid);
-    apr_file_close(pid_file);
-    saved_pid = mypid;
-}
-
-AP_DECLARE(void) ap_log_assert(const char *szExp, const char *szFile,
-                               int nLine)
-{
-    char time_str[APR_CTIME_LEN];
-
-    apr_ctime(time_str, apr_time_now());
-    ap_log_error(APLOG_MARK, APLOG_CRIT | APLOG_NOERRNO, 0, NULL,
-                 "[%s] file %s, line %d, assertion \"%s\" failed",
-                 time_str, szFile, nLine, szExp);
-#if defined(WIN32)
-    DebugBreak();
-#else
-    /* unix assert does an abort leading to a core dump */
-    abort();
-#endif
-}
-
-/* piped log support */
-
-#ifdef AP_HAVE_RELIABLE_PIPED_LOGS
-/* forward declaration */
-static void piped_log_maintenance(int reason, void *data, apr_wait_t status);
-
-static int piped_log_spawn(piped_log *pl)
-{
-    int rc;
-    apr_procattr_t *procattr;
-    apr_proc_t *procnew = NULL;
-    apr_status_t status;
-
-    if (((status = apr_procattr_create(&procattr, pl->p)) != APR_SUCCESS) ||
-        ((status = apr_procattr_child_in_set(procattr,
-                                             ap_piped_log_read_fd(pl),
-                                             ap_piped_log_write_fd(pl)))
-        != APR_SUCCESS)) {
-        char buf[120];
-        /* Something bad happened, give up and go away. */
-        ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL,
-                     "piped_log_spawn: unable to setup child process '%s': %s",
-                     pl->program, apr_strerror(status, buf, sizeof(buf)));
-        rc = -1;
-    }
-    else {
-        char **args;
-        const char *pname;
-
-        apr_tokenize_to_argv(pl->program, &args, pl->p);
-        pname = apr_pstrdup(pl->p, args[0]);
-        procnew = apr_pcalloc(pl->p, sizeof(apr_proc_t));
-        rc = apr_proc_create(procnew, pname, (const char * const *) args,
-                             NULL, procattr, pl->p);
-
-        if (rc == APR_SUCCESS) {
-            /* pjr - This no longer happens inside the child, */
-            /*   I am assuming that if apr_proc_create was  */
-            /*   successful that the child is running.        */
-            RAISE_SIGSTOP(PIPED_LOG_SPAWN);
-            pl->pid = procnew;
-            ap_piped_log_write_fd(pl) = procnew->in;
-            apr_proc_other_child_register(procnew, piped_log_maintenance, pl,
-                                          ap_piped_log_write_fd(pl), pl->p);
-        }
-    }
-
-    return 0;
-}
-
-
-static void piped_log_maintenance(int reason, void *data, apr_wait_t status)
-{
-    piped_log *pl = data;
-    apr_status_t stats;
-
-    switch (reason) {
-    case APR_OC_REASON_DEATH:
-        pl->pid = NULL;
-        apr_proc_other_child_unregister(pl);
-        if (pl->program == NULL) {
-            /* during a restart */
-            break;
-        }
-        break;
-    case APR_OC_REASON_LOST:
-        pl->pid = NULL;
-        apr_proc_other_child_unregister(pl);
-        if (pl->program == NULL) {
-            /* during a restart */
-            break;
-        }
-        if ((stats = piped_log_spawn(pl)) != APR_SUCCESS) {
-            /* what can we do?  This could be the error log we're having
-             * problems opening up... */
-            char buf[120];
-            ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL,
-                         "piped_log_maintenance: unable to respawn '%s': %s",
-                         pl->program, apr_strerror(stats, buf, sizeof(buf)));
-        }
-        break;
-
-    case APR_OC_REASON_UNWRITABLE:
-        /* We should not kill off the pipe here, since it may only be full.
-         * If it really is locked, we should kill it off manually. */
-    break;
-
-    case APR_OC_REASON_RESTART:
-        pl->program = NULL;
-        if (pl->pid != NULL) {
-            apr_proc_kill(pl->pid, SIGTERM);
-        }
-        break;
-
-    case APR_OC_REASON_UNREGISTER:
-        break;
-    }
-}
-
-
-static apr_status_t piped_log_cleanup_for_exec(void *data)
-{
-    piped_log *pl = data;
-
-    apr_file_close(ap_piped_log_read_fd(pl));
-    apr_file_close(ap_piped_log_write_fd(pl));
-    return APR_SUCCESS;
-}
-
-
-static apr_status_t piped_log_cleanup(void *data)
-{
-    piped_log *pl = data;
-
-    if (pl->pid != NULL) {
-        apr_proc_kill(pl->pid, SIGTERM);
-    }
-    return piped_log_cleanup_for_exec(data);
-}
-
-
-AP_DECLARE(piped_log *) ap_open_piped_log(apr_pool_t *p, const char *program)
-{
-    piped_log *pl;
-
-    pl = apr_palloc(p, sizeof (*pl));
-    pl->p = p;
-    pl->program = apr_pstrdup(p, program);
-    pl->pid = NULL;
-    if (apr_file_pipe_create(&ap_piped_log_read_fd(pl),
-                             &ap_piped_log_write_fd(pl), p) != APR_SUCCESS) {
-        return NULL;
-    }
-    apr_pool_cleanup_register(p, pl, piped_log_cleanup,
-                              piped_log_cleanup_for_exec);
-    if (piped_log_spawn(pl) == -1) {
-        int save_errno = errno;
-        apr_pool_cleanup_kill(p, pl, piped_log_cleanup);
-        apr_file_close(ap_piped_log_read_fd(pl));
-        apr_file_close(ap_piped_log_write_fd(pl));
-        errno = save_errno;
-        return NULL;
-    }
-    return pl;
-}
-
-#else /* !AP_HAVE_RELIABLE_PIPED_LOGS */
-
-static apr_status_t piped_log_cleanup(void *data)
-{
-    piped_log *pl = data;
-
-    apr_file_close(ap_piped_log_write_fd(pl));
-    return APR_SUCCESS;
-}
-
-AP_DECLARE(piped_log *) ap_open_piped_log(apr_pool_t *p, const char *program)
-{
-    piped_log *pl;
-    apr_file_t *dummy = NULL;
-    int rc;
-
-    rc = log_child(p, program, &dummy);
-    if (rc != APR_SUCCESS) {
-        ap_log_error(APLOG_MARK, APLOG_STARTUP, rc, NULL,
-                     "Couldn't start piped log process");
-        exit (1);
-    }
-
-    pl = apr_palloc(p, sizeof (*pl));
-    pl->p = p;
-    ap_piped_log_read_fd(pl) = NULL;
-    ap_piped_log_write_fd(pl) = dummy;
-    apr_pool_cleanup_register(p, pl, piped_log_cleanup, piped_log_cleanup);
-
-    return pl;
-}
-
-#endif
-
-AP_DECLARE(void) ap_close_piped_log(piped_log *pl)
-{
-    apr_pool_cleanup_run(pl->p, pl, piped_log_cleanup);
-}
-
-AP_IMPLEMENT_HOOK_VOID(error_log,
-                       (const char *file, int line, int level,
-                        apr_status_t status, const server_rec *s,
-                        const request_rec *r, apr_pool_t *pool,
-                        const char *errstr), (file, line, level,
-                        status, s, r, pool, errstr))
-
diff --git a/server/main.c b/server/main.c
deleted file mode 100644
index 7fc9885..0000000
--- a/server/main.c
+++ /dev/null
@@ -1,661 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-#include "apr.h"
-#include "apr_strings.h"
-#include "apr_getopt.h"
-#include "apr_general.h"
-#include "apr_lib.h"
-
-#define APR_WANT_STDIO
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-#define CORE_PRIVATE
-#include "ap_config.h"
-#include "httpd.h"
-#include "http_main.h"
-#include "http_log.h"
-#include "http_config.h"
-#include "http_vhost.h"
-#include "apr_uri.h"
-#include "util_ebcdic.h"
-#include "ap_mpm.h"
-
-/* WARNING: Win32 binds http_main.c dynamically to the server. Please place
- *          extern functions and global data in another appropriate module.
- *
- * Most significant main() global data can be found in http_config.c
- */
-
-/* XXX - We should be able to grab the per-MPM settings here too */
-static void show_compile_settings(void)
-{
-    printf("Server version: %s\n", ap_get_server_version());
-    printf("Server built:   %s\n", ap_get_server_built());
-    printf("Server's Module Magic Number: %u:%u\n",
-           MODULE_MAGIC_NUMBER_MAJOR, MODULE_MAGIC_NUMBER_MINOR);
-
-    /* sizeof(foo) is long on some platforms so we might as well
-     * make it long everywhere to keep the printf format
-     * consistent
-     */
-    printf("Architecture:   %ld-bit\n", 8 * (long)sizeof(void *));
-    printf("Server compiled with....\n");
-#ifdef BIG_SECURITY_HOLE
-    printf(" -D BIG_SECURITY_HOLE\n");
-#endif
-
-#ifdef SECURITY_HOLE_PASS_AUTHORIZATION
-    printf(" -D SECURITY_HOLE_PASS_AUTHORIZATION\n");
-#endif
-
-#ifdef APACHE_MPM_DIR
-    printf(" -D APACHE_MPM_DIR=\"%s\"\n", APACHE_MPM_DIR);
-#endif
-
-#ifdef HAVE_SHMGET
-    printf(" -D HAVE_SHMGET\n");
-#endif
-
-#if APR_FILE_BASED_SHM
-    printf(" -D APR_FILE_BASED_SHM\n");
-#endif
-
-#if APR_HAS_SENDFILE
-    printf(" -D APR_HAS_SENDFILE\n");
-#endif
-
-#if APR_HAS_MMAP
-    printf(" -D APR_HAS_MMAP\n");
-#endif
-
-#ifdef NO_WRITEV
-    printf(" -D NO_WRITEV\n");
-#endif
-
-#ifdef NO_LINGCLOSE
-    printf(" -D NO_LINGCLOSE\n");
-#endif
-
-#if APR_HAVE_IPV6
-    printf(" -D APR_HAVE_IPV6\n");
-#endif
-
-#if APR_USE_FLOCK_SERIALIZE
-    printf(" -D APR_USE_FLOCK_SERIALIZE\n");
-#endif
-
-#if APR_USE_SYSVSEM_SERIALIZE
-    printf(" -D APR_USE_SYSVSEM_SERIALIZE\n");
-#endif
-
-#if APR_USE_FCNTL_SERIALIZE
-    printf(" -D APR_USE_FCNTL_SERIALIZE\n");
-#endif
-
-#if APR_USE_PROC_PTHREAD_SERIALIZE
-    printf(" -D APR_USE_PROC_PTHREAD_SERIALIZE\n");
-#endif
-
-#if APR_USE_PTHREAD_SERIALIZE
-    printf(" -D APR_USE_PTHREAD_SERIALIZE\n");
-#endif
-
-#if APR_PROCESS_LOCK_IS_GLOBAL
-    printf(" -D APR_PROCESS_LOCK_IS_GLOBAL\n");
-#endif
-
-#ifdef SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-    printf(" -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT\n");
-#endif
-
-#if APR_HAS_OTHER_CHILD
-    printf(" -D APR_HAS_OTHER_CHILD\n");
-#endif
-
-#ifdef AP_HAVE_RELIABLE_PIPED_LOGS
-    printf(" -D AP_HAVE_RELIABLE_PIPED_LOGS\n");
-#endif
-
-#ifdef BUFFERED_LOGS
-    printf(" -D BUFFERED_LOGS\n");
-#ifdef PIPE_BUF
-    printf(" -D PIPE_BUF=%ld\n",(long)PIPE_BUF);
-#endif
-#endif
-
-#if APR_CHARSET_EBCDIC
-    printf(" -D APR_CHARSET_EBCDIC\n");
-#endif
-
-#ifdef APACHE_XLATE
-    printf(" -D APACHE_XLATE\n");
-#endif
-
-#ifdef NEED_HASHBANG_EMUL
-    printf(" -D NEED_HASHBANG_EMUL\n");
-#endif
-
-#ifdef SHARED_CORE
-    printf(" -D SHARED_CORE\n");
-#endif
-
-/* This list displays the compiled in default paths: */
-#ifdef HTTPD_ROOT
-    printf(" -D HTTPD_ROOT=\"" HTTPD_ROOT "\"\n");
-#endif
-
-#ifdef SUEXEC_BIN
-    printf(" -D SUEXEC_BIN=\"" SUEXEC_BIN "\"\n");
-#endif
-
-#if defined(SHARED_CORE) && defined(SHARED_CORE_DIR)
-    printf(" -D SHARED_CORE_DIR=\"" SHARED_CORE_DIR "\"\n");
-#endif
-
-#ifdef DEFAULT_PIDLOG
-    printf(" -D DEFAULT_PIDLOG=\"" DEFAULT_PIDLOG "\"\n");
-#endif
-
-#ifdef DEFAULT_SCOREBOARD
-    printf(" -D DEFAULT_SCOREBOARD=\"" DEFAULT_SCOREBOARD "\"\n");
-#endif
-
-#ifdef DEFAULT_LOCKFILE
-    printf(" -D DEFAULT_LOCKFILE=\"" DEFAULT_LOCKFILE "\"\n");
-#endif
-
-#ifdef DEFAULT_ERRORLOG
-    printf(" -D DEFAULT_ERRORLOG=\"" DEFAULT_ERRORLOG "\"\n");
-#endif
-
-#ifdef TYPES_CONFIG_FILE
-    printf(" -D TYPES_CONFIG_FILE=\"" TYPES_CONFIG_FILE "\"\n");
-#endif
-
-#ifdef SERVER_CONFIG_FILE
-    printf(" -D SERVER_CONFIG_FILE=\"" SERVER_CONFIG_FILE "\"\n");
-#endif
-}
-
-static void destroy_and_exit_process(process_rec *process,
-                                     int process_exit_value)
-{
-    apr_pool_destroy(process->pool); /* and destroy all descendent pools */
-    apr_terminate();
-    exit(process_exit_value);
-}
-
-static process_rec *create_process(int argc, const char * const *argv)
-{
-    process_rec *process;
-    apr_pool_t *cntx;
-    apr_status_t stat;
-
-    stat = apr_pool_create(&cntx, NULL);
-    if (stat != APR_SUCCESS) {
-        /* XXX From the time that we took away the NULL pool->malloc mapping
-         *     we have been unable to log here without segfaulting.
-         */
-        ap_log_error(APLOG_MARK, APLOG_ERR, stat, NULL,
-                     "apr_pool_create() failed to create "
-                     "initial context");
-        apr_terminate();
-        exit(1);
-    }
-
-    apr_pool_tag(cntx, "process");
-    ap_open_stderr_log(cntx);
-
-    process = apr_palloc(cntx, sizeof(process_rec));
-    process->pool = cntx;
-
-    apr_pool_create(&process->pconf, process->pool);
-    apr_pool_tag(process->pconf, "pconf");
-    process->argc = argc;
-    process->argv = argv;
-    process->short_name = apr_filename_of_pathname(argv[0]);
-    return process;
-}
-
-static void usage(process_rec *process)
-{
-    const char *bin = process->argv[0];
-    char pad[MAX_STRING_LEN];
-    unsigned i;
-
-    for (i = 0; i < strlen(bin); i++) {
-        pad[i] = ' ';
-    }
-
-    pad[i] = '\0';
-
-#ifdef SHARED_CORE
-    ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL ,
-                 "Usage: %s [-R directory] [-D name] [-d directory] [-f file]",
-                 bin);
-#else
-    ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL,
-                 "Usage: %s [-D name] [-d directory] [-f file]", bin);
-#endif
-
-    ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL,
-                 "       %s [-C \"directive\"] [-c \"directive\"]", pad);
-
-#ifdef WIN32
-    ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL,
-                 "       %s [-k restart|shutdown|start]", pad);
-    ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL,
-                 "       %s [-n service_name]", pad);
-    ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL,
-                 "       %s [-i] [-u]", pad);
-#endif
-
-    ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL,
-                 "       %s [-v] [-V] [-h] [-l] [-L] [-t] [-T]", pad);
-    ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL,
-                 "Options:");
-
-#ifdef SHARED_CORE
-    ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL,
-                 "  -R directory      : specify an alternate location for "
-                 "shared object files");
-#endif
-
-    ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL,
-                 "  -D name           : define a name for use in "
-                 "<IfDefine name> directives");
-    ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL,
-                 "  -d directory      : specify an alternate initial "
-                 "ServerRoot");
-    ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL,
-                 "  -f file           : specify an alternate ServerConfigFile");
-    ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL,
-                 "  -C \"directive\"    : process directive before reading "
-                 "config files");
-    ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL,
-                 "  -c \"directive\"    : process directive after reading "
-                 "config files");
-
-#ifdef WIN32
-    ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL,
-                 "  -n name           : set service name and use its "
-                 "ServerConfigFile");
-    ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL,
-                 "  -k shutdown       : tell running Apache to shutdown");
-    ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL,
-                 "  -k restart        : tell running Apache to do a graceful "
-                 "restart");
-    ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL,
-                 "  -k start          : tell Apache to start");
-    ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL,
-                 "  -i                : install an Apache service");
-    ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL,
-                 "  -u                : uninstall an Apache service");
-#endif
-
-    ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL,
-                 "  -e level          : show startup errors of level "
-                 "(see LogLevel)");
-    ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL,
-                 "  -v                : show version number");
-    ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL,
-                 "  -V                : show compile settings");
-    ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL,
-                 "  -h                : list available command line options "
-                 "(this page)");
-    ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL,
-                 "  -l                : list compiled in modules");
-    ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL,
-                 "  -L                : list available configuration "
-                 "directives");
-    ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL,
-                 "  -t -D DUMP_VHOSTS : show parsed settings (currently only "
-                 "vhost settings)");
-    ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL,
-                 "  -t                : run syntax check for config files "
-                 "(with docroot check)");
-    ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL,
-                 "  -T                : run syntax check for config files "
-                 "(without docroot check)");
-
-    destroy_and_exit_process(process, 1);
-}
-
-int main(int argc, const char * const argv[])
-{
-    char c;
-    int configtestonly = 0;
-    const char *confname = SERVER_CONFIG_FILE;
-    const char *def_server_root = HTTPD_ROOT;
-    process_rec *process;
-    server_rec *server_conf;
-    apr_pool_t *pglobal;
-    apr_pool_t *pconf;
-    apr_pool_t *plog; /* Pool of log streams, reset _after_ each read of conf */
-    apr_pool_t *ptemp; /* Pool for temporary config stuff, reset often */
-    apr_pool_t *pcommands; /* Pool for -D, -C and -c switches */
-    apr_getopt_t *opt;
-    apr_status_t rv;
-    module **mod;
-    const char *optarg;
-
-    AP_MONCONTROL(0); /* turn of profiling of startup */
-
-    apr_initialize();
-
-    process = create_process(argc, argv);
-    pglobal = process->pool;
-    pconf = process->pconf;
-    ap_server_argv0 = process->short_name;
-
-#if APR_CHARSET_EBCDIC
-    if (ap_init_ebcdic(pglobal) != APR_SUCCESS) {
-        destroy_and_exit_process(process, 1);
-    }
-#endif
-
-    ap_setup_prelinked_modules(process);
-
-    apr_pool_create(&pcommands, pglobal);
-    apr_pool_tag(pcommands, "pcommands");
-    ap_server_pre_read_config  = apr_array_make(pcommands, 1, sizeof(char *));
-    ap_server_post_read_config = apr_array_make(pcommands, 1, sizeof(char *));
-    ap_server_config_defines   = apr_array_make(pcommands, 1, sizeof(char *));
-
-    ap_run_rewrite_args(process);
-
-    /* Maintain AP_SERVER_BASEARGS list in http_main.h to allow the MPM
-     * to safely pass on our args from its rewrite_args() handler.
-     */
-    apr_getopt_init(&opt, pcommands, process->argc, process->argv);
-
-    while ((rv = apr_getopt(opt, AP_SERVER_BASEARGS, &c, &optarg))
-            == APR_SUCCESS) {
-        char **new;
-
-        switch (c) {
-        case 'c':
-            new = (char **)apr_array_push(ap_server_post_read_config);
-            *new = apr_pstrdup(pcommands, optarg);
-            break;
-
-        case 'C':
-            new = (char **)apr_array_push(ap_server_pre_read_config);
-            *new = apr_pstrdup(pcommands, optarg);
-            break;
-
-        case 'd':
-            def_server_root = optarg;
-            break;
-
-        case 'D':
-            new = (char **)apr_array_push(ap_server_config_defines);
-            *new = apr_pstrdup(pcommands, optarg);
-            break;
-
-        case 'e':
-            if (strcasecmp(optarg, "emerg") == 0) {
-                ap_default_loglevel = APLOG_EMERG;
-            }
-            else if (strcasecmp(optarg, "alert") == 0) {
-                ap_default_loglevel = APLOG_ALERT;
-            }
-            else if (strcasecmp(optarg, "crit") == 0) {
-                ap_default_loglevel = APLOG_CRIT;
-            }
-            else if (strncasecmp(optarg, "err", 3) == 0) {
-                ap_default_loglevel = APLOG_ERR;
-            }
-            else if (strncasecmp(optarg, "warn", 4) == 0) {
-                ap_default_loglevel = APLOG_WARNING;
-            }
-            else if (strcasecmp(optarg, "notice") == 0) {
-                ap_default_loglevel = APLOG_NOTICE;
-            }
-            else if (strcasecmp(optarg, "info") == 0) {
-                ap_default_loglevel = APLOG_INFO;
-            }
-            else if (strcasecmp(optarg, "debug") == 0) {
-                ap_default_loglevel = APLOG_DEBUG;
-            }
-            else {
-                usage(process);
-            }
-            break;
-
-        case 'X':
-            new = (char **)apr_array_push(ap_server_config_defines);
-            *new = "DEBUG";
-            break;
-
-        case 'f':
-            confname = optarg;
-            break;
-
-        case 'v':
-            printf("Server version: %s\n", ap_get_server_version());
-            printf("Server built:   %s\n", ap_get_server_built());
-            destroy_and_exit_process(process, 0);
-
-        case 'V':
-            show_compile_settings();
-            destroy_and_exit_process(process, 0);
-
-        case 'l':
-            ap_show_modules();
-            destroy_and_exit_process(process, 0);
-
-        case 'L':
-            ap_show_directives();
-            destroy_and_exit_process(process, 0);
-
-        case 't':
-            configtestonly = 1;
-            break;
-
-        case 'h':
-        case '?':
-            usage(process);
-        }
-    }
-
-    /* bad cmdline option?  then we die */
-    if (rv != APR_EOF) {
-        usage(process);
-    }
-
-    apr_pool_create(&plog, pglobal);
-    apr_pool_tag(plog, "plog");
-    apr_pool_create(&ptemp, pconf);
-
-    /* Note that we preflight the config file once
-     * before reading it _again_ in the main loop.
-     * This allows things, log files configuration
-     * for example, to settle down.
-     */
-
-    ap_server_root = def_server_root;
-    server_conf = ap_read_config(process, ptemp, confname, &ap_conftree);
-    if (ap_run_pre_config(pconf, plog, ptemp) != OK) {
-        ap_log_error(APLOG_MARK, APLOG_STARTUP |APLOG_ERR| APLOG_NOERRNO, 0,
-                     NULL, "Pre-configuration failed\n");
-        destroy_and_exit_process(process, 1);
-    }
-
-    ap_process_config_tree(server_conf, ap_conftree, process->pconf, ptemp);
-    ap_fixup_virtual_hosts(pconf, server_conf);
-    ap_fini_vhost_config(pconf, server_conf);
-    apr_sort_hooks();
-    if (configtestonly) {
-        ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL,
-                     "Syntax OK\n");
-        destroy_and_exit_process(process, 0);
-    }
-
-    apr_pool_clear(plog);
-
-    /* It is assumed that if you are going to fail the open_logs phase, then
-     * you will print out your own message that explains what has gone wrong.
-     * The server doesn't need to do that for you.
-     */
-    if ( ap_run_open_logs(pconf, plog, ptemp, server_conf) != OK) {
-        destroy_and_exit_process(process, 1);
-    }
-
-    if ( ap_run_post_config(pconf, plog, ptemp, server_conf) != OK) {
-        ap_log_error(APLOG_MARK, APLOG_STARTUP |APLOG_ERR| APLOG_NOERRNO, 0,
-                     NULL, "Configuration Failed\n");
-        destroy_and_exit_process(process, 1);
-    }
-
-    apr_pool_destroy(ptemp);
-
-    for (;;) {
-        apr_hook_deregister_all();
-        apr_pool_clear(pconf);
-
-        for (mod = ap_prelinked_modules; *mod != NULL; mod++) {
-            ap_register_hooks(*mod, pconf);
-        }
-
-        /* This is a hack until we finish the code so that it only reads
-         * the config file once and just operates on the tree already in
-         * memory.  rbb
-         */
-        ap_conftree = NULL;
-        apr_pool_create(&ptemp, pconf);
-        ap_server_root = def_server_root;
-        server_conf = ap_read_config(process, ptemp, confname, &ap_conftree);
-        if (ap_run_pre_config(pconf, plog, ptemp) != OK) {
-            ap_log_error(APLOG_MARK, APLOG_STARTUP |APLOG_ERR| APLOG_NOERRNO,
-                         0, NULL, "Pre-configuration failed\n");
-            destroy_and_exit_process(process, 1);
-        }
-
-        ap_process_config_tree(server_conf, ap_conftree, process->pconf, ptemp);
-        ap_fixup_virtual_hosts(pconf, server_conf);
-        ap_fini_vhost_config(pconf, server_conf);
-        apr_sort_hooks();
-        apr_pool_clear(plog);
-        if (ap_run_open_logs(pconf, plog, ptemp, server_conf) != OK) {
-            ap_log_error(APLOG_MARK, APLOG_STARTUP |APLOG_ERR| APLOG_NOERRNO,
-                         0, NULL, "Unable to open logs\n");
-            destroy_and_exit_process(process, 1);
-        }
-
-        if (ap_run_post_config(pconf, plog, ptemp, server_conf) != OK) {
-            ap_log_error(APLOG_MARK, APLOG_STARTUP |APLOG_ERR | APLOG_NOERRNO,
-                         0, NULL, "Configuration Failed\n");
-            destroy_and_exit_process(process, 1);
-        }
-
-        apr_pool_destroy(ptemp);
-        apr_pool_lock(pconf, 1);
-
-        ap_run_optional_fn_retrieve();
-
-        if (ap_mpm_run(pconf, plog, server_conf))
-            break;
-
-        apr_pool_lock(pconf, 0);
-    }
-
-    apr_pool_lock(pconf, 0);
-    destroy_and_exit_process(process, 0);
-
-    return 0; /* Supress compiler warning. */
-}
-
-/* force Expat to be linked into the server executable */
-#if defined(USE_EXPAT) && !defined(SHARED_CORE_BOOTSTRAP)
-#include "xmlparse.h"
-const XML_LChar *suck_in_expat(void);
-const XML_LChar *suck_in_expat(void)
-{
-    return XML_ErrorString(XML_ERROR_NONE);
-}
-#endif /* USE_EXPAT */
-
-#ifndef SHARED_CORE_BOOTSTRAP
-/*
- * Force apr_password_validate() into the image so that modules like
- * mod_auth can use it even if they're dynamically loaded.
- */
-void suck_in_apr_password_validate(void);
-void suck_in_apr_password_validate(void)
-{
-    apr_password_validate("a", "b");
-}
-#endif
-
-#ifdef AP_USING_AUTOCONF
-/* This ugly little hack pulls any function referenced in exports.c into
- * the web server.  exports.c is generated during the build, and it
- * has all of the APR functions specified by the apr/apr.exports and
- * apr-util/aprutil.exports files.
- */
-const void *suck_in_APR(void);
-const void *suck_in_APR(void)
-{
-    extern const void *ap_ugly_hack;
-
-    return ap_ugly_hack;
-}
-#endif
diff --git a/server/mpm/.cvsignore b/server/mpm/.cvsignore
deleted file mode 100644
index bd5fe06..0000000
--- a/server/mpm/.cvsignore
+++ /dev/null
@@ -1,2 +0,0 @@
-Makefile
-.deps
diff --git a/server/mpm/MPM.NAMING b/server/mpm/MPM.NAMING
deleted file mode 100644
index 83c0694..0000000
--- a/server/mpm/MPM.NAMING
+++ /dev/null
@@ -1,15 +0,0 @@
-
-The following MPMs currently exist:
-
-  prefork ....... Multi  Process Model with Preforking (Apache 1.3)
-  perchild ...... Multi  Process Model with Threading.
-                  Constant number of processes, variable number of threads
-                  each child process can have a different uid/gid.  
-  mpmt_os2 ...... Multi Process Model with Threading on OS/2
-                  Constant number of processes, variable number of threads.
-                  One acceptor thread per process, multiple workers threads.
-  winnt ......... Single Process Model with Threading on Windows NT
-  worker ........ Multi Process model with threads.  One acceptor thread,
-                  multiple worker threads.
-  netware ....... Multi-threaded MPM for Netware
-  beos .......... Single Process Model with Threading on BeOS
diff --git a/server/mpm/Makefile.in b/server/mpm/Makefile.in
deleted file mode 100644
index 38d6bd3..0000000
--- a/server/mpm/Makefile.in
+++ /dev/null
@@ -1,4 +0,0 @@
-
-SUBDIRS = $(MPM_NAME)
-
-include $(top_builddir)/build/rules.mk
diff --git a/server/mpm/beos/.cvsignore b/server/mpm/beos/.cvsignore
deleted file mode 100644
index 84df257..0000000
--- a/server/mpm/beos/.cvsignore
+++ /dev/null
@@ -1,5 +0,0 @@
-.deps
-.libs
-*.lo
-*.la
-Makefile
diff --git a/server/mpm/beos/Makefile.in b/server/mpm/beos/Makefile.in
deleted file mode 100644
index 3f88b04..0000000
--- a/server/mpm/beos/Makefile.in
+++ /dev/null
@@ -1,5 +0,0 @@
-
-LTLIBRARY_NAME    = libbeos.la
-LTLIBRARY_SOURCES = beos.c 
-
-include $(top_srcdir)/build/ltlib.mk
diff --git a/server/mpm/beos/beos.c b/server/mpm/beos/beos.c
deleted file mode 100644
index a703d8e..0000000
--- a/server/mpm/beos/beos.c
+++ /dev/null
@@ -1,1170 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-/* The new BeOS MPM!
- *
- * This one basically is a single process multi threaded model, but 
- * I couldn't be bothered adding the spmt_ to the front of the name!
- * Anyway, this is still under development so it isn't yet the default
- * choice.
- */
- 
-#define CORE_PRIVATE 
- 
-#include "apr_strings.h"
-#include "apr_portable.h"
-#include "httpd.h" 
-#include "http_main.h" 
-#include "http_log.h" 
-#include "http_config.h"	/* for read_config */ 
-#include "http_core.h"		/* for get_remote_host */ 
-#include "http_connection.h"
-#include "ap_mpm.h"
-#include "beosd.h"
-#include "ap_listen.h"
-#include "scoreboard.h" 
-#include <kernel/OS.h>
-#include "mpm_common.h"
-#include "mpm.h"
-#include "mpm_default.h"
-#include <unistd.h>
-#include <sys/socket.h>
-#include <signal.h>
-
-extern int _kset_fd_limit_(int num);
-
-/* Limit on the total --- clients will be locked out if more servers than
- * this are needed.  It is intended solely to keep the server from crashing
- * when things get out of hand.
- *
- * We keep a hard maximum number of servers, for two reasons:
- * 1) in case something goes seriously wrong, we want to stop the server starting
- *    threads ad infinitum and crashing the server (remember that BeOS has a 192
- *    thread per team limit).
- * 2) it keeps the size of the scoreboard file small
- *    enough that we can read the whole thing without worrying too much about
- *    the overhead.
- */
-
-/* we only ever have 1 main process running... */ 
-#define HARD_SERVER_LIMIT 1
-
-/* Limit on the threads per process.  Clients will be locked out if more than
- * this  * HARD_SERVER_LIMIT are needed.
- *
- * We keep this for one reason it keeps the size of the scoreboard file small
- * enough that we can read the whole thing without worrying too much about
- * the overhead.
- */
-#ifdef NO_THREADS
-#define HARD_THREAD_LIMIT 1
-#endif
-#ifndef HARD_THREAD_LIMIT
-#define HARD_THREAD_LIMIT 50 
-#endif
-
-/*
- * Actual definitions of config globals
- */
-
-static int ap_threads_to_start=0;
-static int ap_max_requests_per_thread = 0;
-static int min_spare_threads=0;
-static int max_spare_threads=0;
-static int ap_thread_limit=0;
-static int num_listening_sockets = 0;
-static apr_socket_t ** listening_sockets;
-apr_lock_t *accept_mutex = NULL;
-
-static apr_pool_t *pconf;		/* Pool for config stuff */
-static apr_pool_t *pchild;		/* Pool for httpd child stuff */
-
-static int server_pid; 
-
-/* Keep track of the number of worker threads currently active */
-static int worker_thread_count;
-apr_lock_t *worker_thread_count_mutex;
-
-/* The structure used to pass unique initialization info to each thread */
-typedef struct {
-    int slot;
-    apr_pool_t *tpool;
-} proc_info;
-
-static void check_restart(void *data);
-
-/*
- * The max child slot ever assigned, preserved across restarts.  Necessary
- * to deal with MaxClients changes across AP_SIG_GRACEFUL restarts.  We use 
- * this value to optimize routines that have to scan the entire scoreboard.
- */
-int ap_max_child_assigned = -1;
-int ap_max_threads_limit = -1;
-
-static apr_socket_t *udp_sock;
-static apr_sockaddr_t *udp_sa;
-
-/* shared http_main globals... */
-
-server_rec *ap_server_conf;
-
-/* one_process */
-static int one_process = 0;
-
-#ifdef DEBUG_SIGSTOP
-int raise_sigstop_flags;
-#endif
-
-/* a clean exit from a child with proper cleanup 
-   static void clean_child_exit(int code) __attribute__ ((noreturn)); */
-static void clean_child_exit(int code)
-{
-    if (pchild)
-        apr_pool_destroy(pchild);
-    exit(code);
-}
-
-/* handle all varieties of core dumping signals */
-static void sig_coredump(int sig)
-{
-    chdir(ap_coredump_dir);
-    signal(sig, SIG_DFL);
-    kill(server_pid, sig);
-    /* At this point we've got sig blocked, because we're still inside
-     * the signal handler.  When we leave the signal handler it will
-     * be unblocked, and we'll take the signal... and coredump or whatever
-     * is appropriate for this particular Unix.  In addition the parent
-     * will see the real signal we received -- whereas if we called
-     * abort() here, the parent would only see SIGABRT.
-     */
-}
-
-/*****************************************************************
- * Connection structures and accounting...
- */
-
-/* volatile just in case */
-static int volatile shutdown_pending;
-static int volatile restart_pending;
-static int volatile is_graceful;
-static int volatile child_fatal;
-ap_generation_t volatile ap_my_generation = 0;
-
-/*
- * ap_start_shutdown() and ap_start_restart(), below, are a first stab at
- * functions to initiate shutdown or restart without relying on signals. 
- * Previously this was initiated in sig_term() and restart() signal handlers, 
- * but we want to be able to start a shutdown/restart from other sources --
- * e.g. on Win32, from the service manager. Now the service manager can
- * call ap_start_shutdown() or ap_start_restart() as appropiate.  Note that
- * these functions can also be called by the child processes, since global
- * variables are no longer used to pass on the required action to the parent.
- *
- * These should only be called from the parent process itself, since the
- * parent process will use the shutdown_pending and restart_pending variables
- * to determine whether to shutdown or restart. The child process should
- * call signal_parent() directly to tell the parent to die -- this will
- * cause neither of those variable to be set, which the parent will
- * assume means something serious is wrong (which it will be, for the
- * child to force an exit) and so do an exit anyway.
- */
-
-static void ap_start_shutdown(void)
-{
-    if (shutdown_pending == 1) {
-	/* Um, is this _probably_ not an error, if the user has
-	 * tried to do a shutdown twice quickly, so we won't
-	 * worry about reporting it.
-	 */
-	return;
-    }
-    shutdown_pending = 1;
-}
-
-/* do a graceful restart if graceful == 1 */
-static void ap_start_restart(int graceful)
-{
-
-    if (restart_pending == 1) {
-        /* Probably not an error - don't bother reporting it */
-        return;
-    }
-    restart_pending = 1;
-    is_graceful = graceful;
-    if (is_graceful){
-        apr_pool_cleanup_kill(pconf, NULL, ap_cleanup_scoreboard);
-    }
-}
-
-static void sig_term(int sig)
-{
-    ap_start_shutdown();
-}
-
-static void restart(int sig)
-{
-    ap_start_restart(sig == AP_SIG_GRACEFUL);
-}
-
-static void tell_workers_to_exit(void)
-{
-    apr_size_t len;
-    int i = 0;
-    for (i = 0 ; i < ap_max_child_assigned; i++){
-        len = 4;
-        if (apr_sendto(udp_sock, udp_sa, 0, "die!", &len) != APR_SUCCESS)
-            break;
-    }   
-}
-
-static void set_signals(void)
-{
-    struct sigaction sa;
-
-    sigemptyset(&sa.sa_mask);
-    sa.sa_flags = 0;
-
-    if (!one_process) {
-	sa.sa_handler = sig_coredump;
-
-	if (sigaction(SIGSEGV, &sa, NULL) < 0)
-	    ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf, "sigaction(SIGSEGV)");
-	if (sigaction(SIGBUS, &sa, NULL) < 0)
-	    ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf, "sigaction(SIGBUS)");
-	if (sigaction(SIGABRT, &sa, NULL) < 0)
-	    ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf, "sigaction(SIGABRT)");
-	if (sigaction(SIGILL, &sa, NULL) < 0)
-	    ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf, "sigaction(SIGILL)");
-	sa.sa_flags = 0;
-    }
-    sa.sa_handler = sig_term;
-    if (sigaction(SIGTERM, &sa, NULL) < 0)
-	    ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf, "sigaction(SIGTERM)");
-    if (sigaction(SIGINT, &sa, NULL) < 0)
-        ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf, "sigaction(SIGINT)");
-    
-    sa.sa_handler = SIG_IGN;
-    if (sigaction(SIGPIPE, &sa, NULL) < 0)
-    	ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf, "sigaction(SIGPIPE)");
-
-    /* we want to ignore HUPs and AP_SIG_GRACEFUL while we're busy 
-     * processing one */
-    sigaddset(&sa.sa_mask, SIGHUP);
-    sigaddset(&sa.sa_mask, AP_SIG_GRACEFUL);
-    sa.sa_handler = restart;
-    if (sigaction(SIGHUP, &sa, NULL) < 0)
-    	ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf, "sigaction(SIGHUP)");
-    if (sigaction(AP_SIG_GRACEFUL, &sa, NULL) < 0)
-	    ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf, "sigaction(" AP_SIG_GRACEFUL_STRING ")");
-}
-
-/*****************************************************************
- * Here follows a long bunch of generic server bookkeeping stuff...
- */
-
-int ap_graceful_stop_signalled(void)
-{
-    /* XXX - Does this really work? - Manoj */
-    return is_graceful;
-}
-
-/*****************************************************************
- * Child process main loop.
- */
-
-static void process_socket(apr_pool_t *p, apr_socket_t *sock, int my_child_num)
-{
-    conn_rec *current_conn;
-    long conn_id = my_child_num;
-    int csd;
-    ap_sb_handle_t *sbh;
-
-    (void)apr_os_sock_get(&csd, sock);
-    
-    if (csd >= FD_SETSIZE) {
-        ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_WARNING, 0, NULL,
-                     "filedescriptor (%u) larger than FD_SETSIZE (%u) "
-                     "found, you probably need to rebuild Apache with a "
-                     "larger FD_SETSIZE", csd, FD_SETSIZE);
-        apr_socket_close(sock);
-        return;
-    }
-
-    ap_create_sb_handle(&sbh, p, 0, my_child_num);
-    current_conn = ap_run_create_connection(p, ap_server_conf, sock, conn_id, sbh);
-
-    if (current_conn) {
-        ap_process_connection(current_conn, sock);
-        ap_lingering_close(current_conn);
-    }
-}
-
-static int32 worker_thread(void * dummy)
-{
-    proc_info * ti = dummy;
-    int child_slot = ti->slot;
-    apr_pool_t *tpool = ti->tpool;
-    apr_allocator_t *allocator;
-    apr_socket_t *csd = NULL;
-    apr_pool_t *ptrans;		/* Pool for per-transaction stuff */
-    apr_socket_t *sd = NULL;
-    apr_status_t rv = APR_EINIT;
-    int srv , n;
-    int curr_pollfd = 0, last_pollfd = 0;
-    sigset_t sig_mask;
-    int requests_this_child = ap_max_requests_per_thread;
-    apr_pollfd_t *pollset;
-    /* each worker thread is in control of its own destiny...*/
-    int this_worker_should_exit = 0; 
-    free(ti);
-
-    on_exit_thread(check_restart, (void*)child_slot);
-          
-    /* block the signals for this thread */
-    sigfillset(&sig_mask);
-    sigprocmask(SIG_BLOCK, &sig_mask, NULL);
-
-    apr_allocator_create(&allocator);
-    apr_pool_create_ex(&ptrans, tpool, NULL, allocator);
-    apr_allocator_set_owner(ptrans);
-
-    apr_pool_tag(ptrans, "transaction");
-
-    apr_lock_acquire(worker_thread_count_mutex);
-    worker_thread_count++;
-    apr_lock_release(worker_thread_count_mutex);
-
-    (void) ap_update_child_status_from_indexes(0, child_slot, SERVER_STARTING,
-                                               (request_rec*)NULL);
-                                  
-    apr_poll_setup(&pollset, num_listening_sockets, tpool);
-    for(n=0 ; n <= num_listening_sockets ; n++)
-        apr_poll_socket_add(pollset, listening_sockets[n], APR_POLLIN);
-
-    while (1) {
-        /* If we're here, then chances are (unless we're the first thread created) 
-         * we're going to be held up in the accept mutex, so doing this here
-         * shouldn't hurt performance.
-         */
-
-        this_worker_should_exit |= (ap_max_requests_per_thread != 0) && (requests_this_child <= 0);
-        
-        if (this_worker_should_exit) break;
-
-        (void) ap_update_child_status_from_indexes(0, child_slot, SERVER_READY,
-                                                   (request_rec*)NULL);
-
-        apr_lock_acquire(accept_mutex);
-
-        while (!this_worker_should_exit) {
-            apr_int16_t event;
-            apr_status_t ret;
-
-            ret = apr_poll(pollset, &srv, -1);
-
-            if (ret != APR_SUCCESS) {
-                if (APR_STATUS_IS_EINTR(ret)) {
-                    continue;
-                }
-                /* poll() will only return errors in catastrophic
-                 * circumstances. Let's try exiting gracefully, for now. */
-                ap_log_error(APLOG_MARK, APLOG_ERR, ret, (const server_rec *)
-                             ap_server_conf, "apr_poll: (listen)");
-                this_worker_should_exit = 1;
-            } else {
-                /* if we've bailed in apr_poll what's the point of trying to use the data? */
-                apr_poll_revents_get(&event, listening_sockets[0], pollset);
-
-                if (event & APR_POLLIN){
-                    apr_sockaddr_t *rec_sa;
-                    apr_size_t len = 5;
-                    char *tmpbuf = apr_palloc(ptrans, sizeof(char) * 5);
-                    apr_sockaddr_info_get(&rec_sa, "127.0.0.1", APR_UNSPEC, 7772, 0, ptrans);
-                    
-                    if ((ret = apr_recvfrom(rec_sa, listening_sockets[0], 0, tmpbuf, &len))
-                        != APR_SUCCESS){
-                        ap_log_error(APLOG_MARK, APLOG_ERR, ret, NULL, 
-                            "error getting data from UDP!!");
-                    }else {
-                        /* add checking??? */              
-                    }
-                    this_worker_should_exit = 1;
-                }
-            }
-          
-            if (this_worker_should_exit) break;
-
-            if (num_listening_sockets == 1) {
-                sd = ap_listeners->sd;
-                goto got_fd;
-            }
-            else {
-                /* find a listener */
-                curr_pollfd = last_pollfd;
-                do {
-                    curr_pollfd++;
-
-                    if (curr_pollfd > num_listening_sockets)
-                        curr_pollfd = 1;
-                    
-                    /* Get the revent... */
-                    apr_poll_revents_get(&event, listening_sockets[curr_pollfd], pollset);
-                    
-                    if (event & APR_POLLIN) {
-                        last_pollfd = curr_pollfd;
-                        sd = listening_sockets[curr_pollfd];
-                        goto got_fd;
-                    }
-                } while (curr_pollfd != last_pollfd);
-            }
-        }
-    got_fd:
-
-        if (!this_worker_should_exit) {
-            rv = apr_accept(&csd, sd, ptrans);
-
-            apr_lock_release(accept_mutex);
-            if (rv != APR_SUCCESS) {
-                ap_log_error(APLOG_MARK, APLOG_ERR, rv, ap_server_conf,
-                  "apr_accept");
-            } else {
-                process_socket(ptrans, csd, child_slot);
-                requests_this_child--;
-            }
-        }
-        else {
-            apr_lock_release(accept_mutex);
-            break;
-        }
-        apr_pool_clear(ptrans);
-    }
-
-    ap_update_child_status_from_indexes(0, child_slot, SERVER_DEAD, (request_rec*)NULL);
-
-ap_log_error(APLOG_MARK, APLOG_NOTICE | APLOG_NOERRNO, 0, NULL,
-             "worker_thread %ld exiting", find_thread(NULL));
-    
-    apr_lock_acquire(worker_thread_count_mutex);
-    worker_thread_count--;
-    apr_lock_release(worker_thread_count_mutex);
-
-    return (0);
-}
-
-static int make_worker(int slot)
-{
-    thread_id tid;
-    proc_info *my_info = (proc_info *)malloc(sizeof(proc_info)); /* freed by thread... */
-
-    if (my_info == NULL) {
-        ap_log_error(APLOG_MARK, APLOG_ALERT, errno, ap_server_conf,
-            "malloc: out of memory");
-        clean_child_exit(APEXIT_CHILDFATAL);
-    }
-    
-    my_info->slot = slot;
-    apr_pool_create(&my_info->tpool, pchild);
-    
-    if (slot + 1 > ap_max_child_assigned)
-	    ap_max_child_assigned = slot + 1;
-
-    if (one_process) {
-    	set_signals();
-        ap_scoreboard_image->parent[0].pid = getpid();
-        return 0;
-    }
-
-    (void) ap_update_child_status_from_indexes(0, slot, SERVER_STARTING, (request_rec*)NULL);
-    tid = spawn_thread(worker_thread, "apache_worker", B_NORMAL_PRIORITY,
-        my_info);
-    if (tid < B_NO_ERROR) {
-        ap_log_error(APLOG_MARK, APLOG_ERR, errno, NULL, 
-            "spawn_thread: Unable to start a new thread");
-        /* In case system resources are maxxed out, we don't want
-         * Apache running away with the CPU trying to fork over and
-         * over and over again. 
-         */
-        (void) ap_update_child_status_from_indexes(0, slot, SERVER_DEAD, 
-                                                   (request_rec*)NULL);
-        
-    	sleep(10);
-        free(my_info);
-        
-    	return -1;
-    }
-    resume_thread(tid);
-
-    ap_scoreboard_image->servers[0][slot].tid = tid;
-    return 0;
-}
-
-static void check_restart(void *data)
-{
-    if (!restart_pending && !shutdown_pending) {
-        int slot = (int)data;
-        make_worker(slot);
-        ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_INFO, 0, NULL, 
-            "spawning a new worker thread in slot %d", slot);
-    }
-}
-
-/* start up a bunch of children */
-static void startup_threads(int number_to_start)
-{
-    int i;
-
-    for (i = 0; number_to_start && i < ap_thread_limit; ++i) {
-	if (ap_scoreboard_image->servers[0][i].tid) {
-	    continue;
-	}
-	if (make_worker(i) < 0) {
-	    break;
-	}
-	--number_to_start;
-    }
-}
-
-
-/*
- * spawn_rate is the number of children that will be spawned on the
- * next maintenance cycle if there aren't enough idle servers.  It is
- * doubled up to MAX_SPAWN_RATE, and reset only when a cycle goes by
- * without the need to spawn.
- */
-static int spawn_rate = 1;
-#ifndef MAX_SPAWN_RATE
-#define MAX_SPAWN_RATE	(32)
-#endif
-static int hold_off_on_exponential_spawning;
-
-static void perform_idle_server_maintenance(void)
-{
-    int i;
-    int free_length;
-    int free_slots[MAX_SPAWN_RATE];
-    int last_non_dead  = -1;
-
-    /* initialize the free_list */
-    free_length = 0;
-
-    for (i = 0; i < ap_thread_limit; ++i) {
-        if (ap_scoreboard_image->servers[0][i].tid == 0) {
-            if (free_length < spawn_rate) {
-                free_slots[free_length] = i;
-                ++free_length;
-            }
-        }
-        else {
-            last_non_dead = i;
-        }
-
-    	if (i >= ap_max_child_assigned && free_length >= spawn_rate) {
-	         break;
-	    }
-    }
-    ap_max_child_assigned = last_non_dead + 1;
-
-    if (free_length > 0) {
-    	for (i = 0; i < free_length; ++i) {
-	        make_worker(free_slots[i]);
-	    }
-	    /* the next time around we want to spawn twice as many if this
-	     * wasn't good enough, but not if we've just done a graceful
-	     */
-	    if (hold_off_on_exponential_spawning) {
-	        --hold_off_on_exponential_spawning;
-	    } else if (spawn_rate < MAX_SPAWN_RATE) {
-	        spawn_rate *= 2;
-	    }
-    } else {
-        spawn_rate = 1;
-    }
-}
-
-static void server_main_loop(int remaining_threads_to_start)
-{
-    int child_slot;
-    apr_exit_why_e exitwhy;
-    int status;
-    apr_proc_t pid;
-    int i;
-
-    while (!restart_pending && !shutdown_pending) {
-
-        ap_wait_or_timeout(&exitwhy, &status, &pid, pconf);
-         
-        if (pid.pid >= 0) {
-            if (ap_process_child_status(&pid, exitwhy, status) == APEXIT_CHILDFATAL) {
-                shutdown_pending = 1;
-                child_fatal = 1;
-                return;
-            }
-            /* non-fatal death... note that it's gone in the scoreboard. */
-            child_slot = -1;
-            for (i = 0; i < ap_max_child_assigned; ++i) {
-        	if (ap_scoreboard_image->servers[0][i].tid == pid.pid) {
-                    child_slot = i;
-                    break;
-                }
-            }
-            if (child_slot >= 0) {
-                ap_scoreboard_image->servers[0][child_slot].tid = 0;
-                (void) ap_update_child_status_from_indexes(0, child_slot, 
-                                                           SERVER_DEAD, 
-                                                           (request_rec*)NULL);
-                
-                if (remaining_threads_to_start
-		            && child_slot < ap_thread_limit) {
-                    /* we're still doing a 1-for-1 replacement of dead
-                     * children with new children
-                     */
-                    make_worker(child_slot);
-                    --remaining_threads_to_start;
-		        }
-#if APR_HAS_OTHER_CHILD
-            }
-            else if (apr_proc_other_child_read(&pid, status) == 0) {
-    		/* handled */
-#endif
-            }
-            else if (is_graceful) {
-                /* Great, we've probably just lost a slot in the
-                 * scoreboard.  Somehow we don't know about this
-                 * child.
-                 */
-                 ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_WARNING, 0, ap_server_conf,
-			                  "long lost child came home! (pid %ld)", pid.pid);
-            }
-	    
-            /* Don't perform idle maintenance when a child dies,
-             * only do it when there's a timeout.  Remember only a
-             * finite number of children can die, and it's pretty
-             * pathological for a lot to die suddenly.
-             */
-             continue;
-         }
-	     else if (remaining_threads_to_start) {
-             /* we hit a 1 second timeout in which none of the previous
-              * generation of children needed to be reaped... so assume
-              * they're all done, and pick up the slack if any is left.
-              */
-              startup_threads(remaining_threads_to_start);
-              remaining_threads_to_start = 0;
-              /* In any event we really shouldn't do the code below because
-               * few of the servers we just started are in the IDLE state
-               * yet, so we'd mistakenly create an extra server.
-               */
-              continue;
-         }
-         perform_idle_server_maintenance();
-    }
-}
-
-AP_DECLARE(apr_status_t) ap_mpm_query(int query_code, int *result)
-{
-    switch(query_code){
-        case AP_MPMQ_MAX_DAEMON_USED:
-            *result = ap_max_child_assigned;
-            return APR_SUCCESS;
-        case AP_MPMQ_IS_THREADED:
-            *result = AP_MPMQ_DYNAMIC;
-            return APR_SUCCESS;
-        case AP_MPMQ_IS_FORKED:
-            *result = AP_MPMQ_NOT_SUPPORTED;
-            return APR_SUCCESS;
-        case AP_MPMQ_HARD_LIMIT_DAEMONS:
-            *result = HARD_SERVER_LIMIT;
-            return APR_SUCCESS;
-        case AP_MPMQ_HARD_LIMIT_THREADS:
-            *result = HARD_THREAD_LIMIT;
-            return APR_SUCCESS;
-        case AP_MPMQ_MAX_THREADS:
-            *result = HARD_THREAD_LIMIT;
-            return APR_SUCCESS;
-        case AP_MPMQ_MIN_SPARE_DAEMONS:
-            *result = 0;
-            return APR_SUCCESS;
-        case AP_MPMQ_MIN_SPARE_THREADS:    
-            *result = max_spare_threads;
-            return APR_SUCCESS;
-        case AP_MPMQ_MAX_SPARE_DAEMONS:
-            *result = 0;
-            return APR_SUCCESS;
-        case AP_MPMQ_MAX_SPARE_THREADS:
-            *result = min_spare_threads;
-            return APR_SUCCESS;
-        case AP_MPMQ_MAX_REQUESTS_DAEMON:
-            *result = ap_max_requests_per_thread;
-            return APR_SUCCESS;
-        case AP_MPMQ_MAX_DAEMONS:
-            *result = HARD_SERVER_LIMIT;
-            return APR_SUCCESS;
-    }
-    return APR_ENOTIMPL;
-}
-
-int ap_mpm_run(apr_pool_t *_pconf, apr_pool_t *plog, server_rec *s)
-{
-    int remaining_threads_to_start, i,j;
-    apr_status_t rv;
-    ap_listen_rec *lr;    
-    pconf = _pconf;
-    ap_server_conf = s;
-
-    /* Increase the available pool of fd's.  This code from
-     * Joe Kloss <joek@be.com>
-     */
-    if( FD_SETSIZE > 128 && (i = _kset_fd_limit_( 128 )) < 0 ){
-        ap_log_error(APLOG_MARK, APLOG_ERR, i, s,
-            "could not set FD_SETSIZE (_kset_fd_limit_ failed)");
-    }
-
-    /* BeOS R5 doesn't support pipes on select() calls, so we use a 
-       UDP socket as these are supported in both R5 and BONE.  If we only cared
-       about BONE we'd use a pipe, but there it is.
-       As we have UDP support in APR, now use the APR functions and check all the
-       return values...
-      */
-    if (apr_sockaddr_info_get(&udp_sa, "127.0.0.1", APR_UNSPEC, 7772, 0, _pconf)
-        != APR_SUCCESS){
-        ap_log_error(APLOG_MARK, APLOG_ALERT, errno, s,
-            "couldn't create control socket information, shutting down");
-        return 1;
-    }
-    if (apr_socket_create(&udp_sock, udp_sa->family, SOCK_DGRAM,
-                      _pconf) != APR_SUCCESS){
-        ap_log_error(APLOG_MARK, APLOG_ALERT, errno, s,
-            "couldn't create control socket, shutting down");
-        return 1;
-    }
-    if (apr_bind(udp_sock, udp_sa) != APR_SUCCESS){
-        ap_log_error(APLOG_MARK, APLOG_ALERT, errno, s,
-            "couldn't bind UDP socket!");
-        return 1;
-    }
- 
-    if ((num_listening_sockets = ap_setup_listeners(ap_server_conf)) < 1) {
-        ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_ALERT, 0, s,
-            "no listening sockets available, shutting down");
-        return 1;
-    }
-
-    ap_log_pid(pconf, ap_pid_fname);
-
-    /*
-     * Create our locks... 
-     */
-    
-    /* accept_mutex
-     * used to lock around select so we only have one thread
-     * in select at a time
-     */
-    if ((rv = apr_lock_create(&accept_mutex, APR_MUTEX, APR_CROSS_PROCESS,
-                              APR_LOCK_DEFAULT, NULL, pconf)) != APR_SUCCESS) {
-        /* tsch tsch, can't have more than one thread in the accept loop
-           at a time so we need to fall on our sword... */
-        ap_log_error(APLOG_MARK, APLOG_EMERG, rv, s,
-                     "Couldn't create accept lock");
-        return 1;
-    }
-
-    /* worker_thread_count_mutex
-     * locks the worker_thread_count so we have ana ccurate count...
-     */
-    if ((rv = apr_lock_create(&worker_thread_count_mutex, APR_MUTEX, APR_CROSS_PROCESS,
-                              APR_LOCK_DEFAULT, NULL, pconf)) != APR_SUCCESS) {
-        ap_log_error(APLOG_MARK, APLOG_EMERG, rv, s,
-                     "Couldn't create worker thread count lock");
-        return 1;
-    }
-
-    /*
-     * Startup/shutdown... 
-     */
-    
-    if (!is_graceful) {
-        /* setup the scoreboard shared memory */
-        if (ap_run_pre_mpm(pconf, SB_SHARED) != OK) {
-            return 1;
-        }
-
-        for (i = 0; i < HARD_SERVER_LIMIT; i++) {
-            ap_scoreboard_image->parent[i].pid = 0;
-            for (j = 0;j < HARD_THREAD_LIMIT; j++)
-                ap_scoreboard_image->servers[i][j].tid = 0;
-        }
-    }
-
-    if (HARD_SERVER_LIMIT == 1)
-        ap_scoreboard_image->parent[0].pid = getpid();
-
-    set_signals();
-
-    /* Sanity checks to avoid thrashing... */
-    if (max_spare_threads < min_spare_threads )
-        max_spare_threads = min_spare_threads;
-
-    /* If we're doing a graceful_restart then we're going to see a lot
-     * of threads exiting immediately when we get into the main loop
-     * below (because we just sent them AP_SIG_GRACEFUL).  This happens 
-     * pretty rapidly... and for each one that exits we'll start a new one 
-     * until we reach at least threads_min_free.  But we may be permitted to
-     * start more than that, so we'll just keep track of how many we're
-     * supposed to start up without the 1 second penalty between each fork.
-     */
-    remaining_threads_to_start = ap_threads_to_start;
-    /* sanity check on the number to start... */
-    if (remaining_threads_to_start > ap_thread_limit) {
-	    remaining_threads_to_start = ap_thread_limit;
-    }
-
-    /* setup the child pool to use for the workers.  Each worker creates
-     * a seperate pool of its own to use.
-     */
-    apr_pool_create(&pchild, pconf);
-
-    /* Now that we have the child pool (pchild) we can allocate
-     * the listenfds and creat the pollset...
-     */
-    listening_sockets = apr_palloc(pchild,
-       sizeof(*listening_sockets) * (num_listening_sockets + 1));
-
-    listening_sockets[0] = udp_sock;
-    for (lr = ap_listeners, i = 1; i <= num_listening_sockets; lr = lr->next, ++i)
-	    listening_sockets[i]=lr->sd;
-
-    /* we assume all goes OK...hmm might want to check that! */
-    /* if we're in one_process mode we don't want to start threads
-     * do we??
-     */
-    if (!is_graceful && !one_process) {
-	    startup_threads(remaining_threads_to_start);
-	    remaining_threads_to_start = 0;
-    }
-    else {
-	    /* give the system some time to recover before kicking into
-	     * exponential mode */
-        hold_off_on_exponential_spawning = 10;
-    }
-
-    /*
-     * record that we've entered the world !
-     */
-    ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_NOTICE, 0, ap_server_conf,
-		"%s configured -- resuming normal operations",
-		ap_get_server_version());
-
-    ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_INFO, 0, ap_server_conf,
-		"Server built: %s", ap_get_server_built());
-
-    restart_pending = shutdown_pending = 0;
-
-    /*
-     * main_loop until it's all over
-     */
-    if (!one_process) {
-        server_main_loop(remaining_threads_to_start);
-    
-        tell_workers_to_exit(); /* if we get here we're exiting... */
-        sleep(1); /* give them a brief chance to exit */
-    } else {
-        proc_info *my_info = (proc_info *)malloc(sizeof(proc_info));
-        my_info->slot = 0;
-        apr_pool_create(&my_info->tpool, pchild);
-        worker_thread(my_info);
-    }
-        
-    /* close the UDP socket we've been using... */
-    apr_socket_close(listening_sockets[0]);
-
-    if ((one_process || shutdown_pending) && !child_fatal) {
-        const char *pidfile = NULL;
-        pidfile = ap_server_root_relative (pconf, ap_pid_fname);
-        if ( pidfile != NULL && unlink(pidfile) == 0)
-            ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_INFO, 0, ap_server_conf,
-                         "removed PID file %s (pid=%ld)", pidfile, 
-                         (long)getpid());
-    }
-
-    if (one_process) {
-        return 1;
-    }
-        
-    /*
-     * If we get here we're shutting down...
-     */
-    if (shutdown_pending) {
-        /* Time to gracefully shut down:
-         * Kill child processes, tell them to call child_exit, etc...
-         */
-        if (beosd_killpg(getpgrp(), SIGTERM) < 0)
-            ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf,
-             "killpg SIGTERM");
-      
-        /* use ap_reclaim_child_processes starting with SIGTERM */
-        ap_reclaim_child_processes(1);
-
-        if (!child_fatal) {         /* already recorded */
-            /* record the shutdown in the log */
-            ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_NOTICE, 0, ap_server_conf,
-                         "caught SIGTERM, shutting down");
-        }
-    
-        return 1;
-    }
-
-    /* we've been told to restart */
-    signal(SIGHUP, SIG_IGN);
-
-    if (is_graceful) {
-        ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_NOTICE, 0, ap_server_conf,
-		    AP_SIG_GRACEFUL_STRING " received.  Doing graceful restart");
-    }
-    else {
-        /* Kill 'em all.  Since the child acts the same on the parents SIGTERM 
-         * and a SIGHUP, we may as well use the same signal, because some user
-         * pthreads are stealing signals from us left and right.
-         */
-	    
-        ap_reclaim_child_processes(1);		/* Start with SIGTERM */
-	    ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_NOTICE, 0, ap_server_conf,
-		    "SIGHUP received.  Attempting to restart");
-    }
-    
-    /* just before we go, tidy up the locks we've created to prevent a 
-     * potential leak of semaphores... */
-    apr_lock_destroy(worker_thread_count_mutex);
-    apr_lock_destroy(accept_mutex);
-    
-    return 0;
-}
-
-static int beos_pre_config(apr_pool_t *pconf, apr_pool_t *plog, apr_pool_t *ptemp)
-{
-    static int restart_num = 0;
-    int no_detach, debug;
-    apr_status_t rv;
-
-    debug = ap_exists_config_define("DEBUG");
-
-    if (debug)
-        no_detach = one_process = 1;
-    else
-    {
-        one_process = ap_exists_config_define("ONE_PROCESS");
-        no_detach = ap_exists_config_define("NO_DETACH");
-    }
-
-    /* sigh, want this only the second time around */
-    if (restart_num++ == 1) {
-        is_graceful = 0;
-        
-        if (!one_process) {
-            rv = apr_proc_detach(no_detach ? APR_PROC_DETACH_FOREGROUND
-                                           : APR_PROC_DETACH_DAEMONIZE);
-            if (rv != APR_SUCCESS) {
-                ap_log_error(APLOG_MARK, APLOG_CRIT, rv, NULL,
-                             "apr_proc_detach failed");
-                return HTTP_INTERNAL_SERVER_ERROR;
-            }                  
-        }
-
-        server_pid = getpid();
-    }
-
-    beosd_pre_config();
-    ap_listen_pre_config();
-    ap_threads_to_start = DEFAULT_START_THREADS;
-    min_spare_threads = DEFAULT_MIN_FREE_THREADS;
-    max_spare_threads = DEFAULT_MAX_FREE_THREADS;
-    ap_thread_limit = HARD_THREAD_LIMIT;
-    ap_pid_fname = DEFAULT_PIDLOG;
-    ap_max_requests_per_thread = DEFAULT_MAX_REQUESTS_PER_THREAD;
-
-    apr_cpystrn(ap_coredump_dir, ap_server_root, sizeof(ap_coredump_dir));
-
-    return OK;
-}
-
-static void beos_hooks(apr_pool_t *p)
-{
-    one_process = 0;
-    
-    ap_hook_pre_config(beos_pre_config, NULL, NULL, APR_HOOK_MIDDLE); 
-}
-
-static const char *set_threads_to_start(cmd_parms *cmd, void *dummy, const char *arg) 
-{
-    const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
-    if (err != NULL) {
-        return err;
-    }
-
-    ap_threads_to_start = atoi(arg);
-    if (ap_threads_to_start < 0) {
-        ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL,
-                     "StartThreads set to a value less than 0, reset to 1");
-        ap_threads_to_start = 1;
-    }
-    return NULL;
-}
-
-static const char *set_min_spare_threads(cmd_parms *cmd, void *dummy, const char *arg)
-{
-    const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
-    if (err != NULL) {
-        return err;
-    }
-
-    min_spare_threads = atoi(arg);
-    if (min_spare_threads <= 0) {
-       ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
-                    "WARNING: detected MinSpareThreads set to non-positive.");
-       ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL,
-                    "Resetting to 1 to avoid almost certain Apache failure.");
-       ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
-                    "Please read the documentation.");
-       min_spare_threads = 1;
-    }
-       
-    return NULL;
-}
-
-static const char *set_max_spare_threads(cmd_parms *cmd, void *dummy, const char *arg)
-{
-    const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
-    if (err != NULL) {
-        return err;
-    }
-
-    max_spare_threads = atoi(arg);
-    return NULL;
-}
-
-static const char *set_threads_limit (cmd_parms *cmd, void *dummy, const char *arg) 
-{
-    const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
-    if (err != NULL) {
-        return err;
-    }
-
-    ap_thread_limit = atoi(arg);
-    if (ap_thread_limit > HARD_THREAD_LIMIT) {
-       ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
-                    "WARNING: MaxClients of %d exceeds compile time limit "
-                    "of %d servers,", ap_thread_limit, HARD_THREAD_LIMIT);
-       ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
-                    " lowering MaxClients to %d.  To increase, please "
-                    "see the", HARD_THREAD_LIMIT);
-       ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
-                    " HARD_THREAD_LIMIT define in server/mpm/beos/mpm_default.h.");
-       ap_thread_limit = HARD_THREAD_LIMIT;
-    } 
-    else if (ap_thread_limit < 1) {
-        ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
-                     "WARNING: Require MaxClients > 0, setting to %d", HARD_THREAD_LIMIT);
-        ap_thread_limit = HARD_THREAD_LIMIT;
-    }
-    return NULL;
-}
-
-static const char *set_max_requests_per_thread (cmd_parms *cmd, void *dummy, const char *arg)
-{
-    const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
-    if (err != NULL) {
-        return err;
-    }
-
-    ap_max_requests_per_thread = atoi(arg);
-    if (ap_max_requests_per_thread < 0) {
-        ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL,
-                     "WARNING: MaxRequestsPerThread was set below 0"
-                     "reset to 0, but this may not be what you want.");
-        ap_max_requests_per_thread = 0;
-    }
-
-    return NULL;
-}
-
-static const command_rec beos_cmds[] = {
-BEOS_DAEMON_COMMANDS,
-LISTEN_COMMANDS,
-AP_INIT_TAKE1( "StartThreads", set_threads_to_start, NULL, RSRC_CONF,
-  "Number of threads to launch at server startup"),
-AP_INIT_TAKE1( "MinSpareThreads", set_min_spare_threads, NULL, RSRC_CONF,
-  "Minimum number of idle children, to handle request spikes"),
-AP_INIT_TAKE1( "MaxSpareThreads", set_max_spare_threads, NULL, RSRC_CONF,
-  "Maximum number of idle children" ),
-AP_INIT_TAKE1( "MaxClients", set_threads_limit, NULL, RSRC_CONF, 
-  "Maximum number of children alive at the same time (max threads)" ),
-AP_INIT_TAKE1( "MaxRequestsPerThread", set_max_requests_per_thread, NULL, RSRC_CONF,
-  "Maximum number of requests served by a thread" ),
-{ NULL }
-};
-
-module AP_MODULE_DECLARE_DATA mpm_beos_module = {
-    MPM20_MODULE_STUFF,
-    NULL,                       /* hook to run before apache parses args */
-    NULL,			/* create per-directory config structure */
-    NULL,			/* merge per-directory config structures */
-    NULL,			/* create per-server config structure */
-    NULL,			/* merge per-server config structures */
-    beos_cmds,		/* command apr_table_t */
-    beos_hooks		/* register_hooks */
-};
-
diff --git a/server/mpm/beos/beos.h b/server/mpm/beos/beos.h
deleted file mode 100644
index 49da933..0000000
--- a/server/mpm/beos/beos.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-#ifndef APACHE_MPM_BEOS_H
-#define APACHE_MPM_BEOS_H
-
-extern int ap_threads_per_child;
-extern int ap_pipe_of_death[2];
-extern int ap_extended_status;
-extern void clean_child_exit(int);
-extern int max_daemons_limit;
-
-#endif /* APACHE_MPM_BEOS_H */
diff --git a/server/mpm/beos/config5.m4 b/server/mpm/beos/config5.m4
deleted file mode 100644
index 4f20140..0000000
--- a/server/mpm/beos/config5.m4
+++ /dev/null
@@ -1,7 +0,0 @@
-dnl ## XXX - Need a more thorough check of the proper flags to use
-
-if test "$MPM_NAME" = "beos" ; then
-    apache_apr_flags="--enable-threads"
-
-    APACHE_FAST_OUTPUT(server/mpm/$MPM_NAME/Makefile)
-fi
diff --git a/server/mpm/beos/mpm.h b/server/mpm/beos/mpm.h
deleted file mode 100644
index 8054b49..0000000
--- a/server/mpm/beos/mpm.h
+++ /dev/null
@@ -1,82 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-#ifndef APACHE_MPM_BEOS_H
-#define APACHE_MPM_BEOS_H
-
-#define BEOS_MPM
-#include "scoreboard.h"
-
-#define MPM_NAME "Beos"
-#define MPM_SYNC_CHILD_TABLE()
-#define MPM_CHILD_PID(i) (ap_scoreboard_image->servers[0][i].tid)
-#define MPM_NOTE_CHILD_KILLED(i) (MPM_CHILD_PID(i) = 0)
-
-#define AP_MPM_WANT_RECLAIM_CHILD_PROCESSES
-#define AP_MPM_WANT_WAIT_OR_TIMEOUT
-#define AP_MPM_WANT_PROCESS_CHILD_STATUS
-#define AP_MPM_WANT_SET_PIDFILE
-#define AP_MPM_WANT_SET_SCOREBOARD
-#define AP_MPM_WANT_SET_MAX_REQUESTS
-#define AP_MPM_WANT_SET_COREDUMPDIR
-
-extern int ap_max_child_assigned;
-extern server_rec *ap_server_conf;
-extern int ap_threads_per_child;
-
-#endif /* APACHE_MPM_BEOS_H */
diff --git a/server/mpm/beos/mpm_default.h b/server/mpm/beos/mpm_default.h
deleted file mode 100644
index 8de87c3..0000000
--- a/server/mpm/beos/mpm_default.h
+++ /dev/null
@@ -1,118 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-#ifndef APACHE_MPM_DEFAULT_H
-#define APACHE_MPM_DEFAULT_H
-
-/* we use the child (c) as zero in our code... */
-#define AP_ID_FROM_CHILD_THREAD(c, t)     t
-/* as the child is always zero, just return the id... */
-#define AP_CHILD_THREAD_FROM_ID(i)        0 , i
-
-/* Number of threads to spawn off by default --- also, if fewer than
- * this free when the caretaker checks, it will spawn more.
- */
-#ifndef DEFAULT_START_THREADS
-#define DEFAULT_START_THREADS 10
-#endif
-
-#ifdef NO_THREADS
-#define DEFAULT_THREADS 1
-#endif
-#ifndef DEFAULT_THREADS
-#define DEFAULT_THREADS 10
-#endif
-
-/* The following 2 settings are used to control the number of threads
- * we have available.  Normally the DEFAULT_MAX_FREE_THREADS is set
- * to the same as the HARD_THREAD_LIMIT to avoid churning of starting
- * new threads to replace threads killed off...
- */
-
-/* Maximum number of *free* threads --- more than this, and
- * they will die off.
- */
-#ifndef DEFAULT_MAX_FREE_THREADS
-#define DEFAULT_MAX_FREE_THREADS HARD_THREAD_LIMIT
-#endif
-
-/* Minimum --- fewer than this, and more will be created */
-#ifndef DEFAULT_MIN_FREE_THREADS
-#define DEFAULT_MIN_FREE_THREADS 1
-#endif
-                   
-/* Where the main/parent process's pid is logged */
-#ifndef DEFAULT_PIDLOG
-#define DEFAULT_PIDLOG "logs/httpd.pid"
-#endif
-
-/*
- * Interval, in microseconds, between scoreboard maintenance.
- */
-#ifndef SCOREBOARD_MAINTENANCE_INTERVAL
-#define SCOREBOARD_MAINTENANCE_INTERVAL 1000000
-#endif
-
-/* Number of requests to try to handle in a single process.  If == 0,
- * the children don't die off.
- */
-#ifndef DEFAULT_MAX_REQUESTS_PER_THREAD
-#define DEFAULT_MAX_REQUESTS_PER_THREAD 0
-#endif
-
-#endif /* AP_MPM_DEFAULT_H */
diff --git a/server/mpm/config.m4 b/server/mpm/config.m4
deleted file mode 100644
index e0f4c0b..0000000
--- a/server/mpm/config.m4
+++ /dev/null
@@ -1,37 +0,0 @@
-AC_MSG_CHECKING(which MPM to use)
-AC_ARG_WITH(mpm,
-APACHE_HELP_STRING(--with-mpm=MPM,Choose the process model for Apache to use.
-                          MPM={beos|worker|prefork|mpmt_os2|perchild}),[
-  APACHE_MPM=$withval
-],[
-  if test "x$APACHE_MPM" = "x"; then
-    APACHE_MPM=prefork
-  fi
-])
-AC_MSG_RESULT($APACHE_MPM)
-
-apache_cv_mpm=$APACHE_MPM
-	
-if test "$apache_cv_mpm" = "worker" -o "$apache_cv_mpm" = "perchild"; then
-  APR_CHECK_APR_DEFINE(APR_HAS_THREADS, srclib/apr)
-
-  if test "x$ac_cv_define_APR_HAS_THREADS" = "xno"; then
-    AC_MSG_RESULT(The currently selected MPM requires threads which your system seems to lack)
-    AC_MSG_CHECKING(checking for replacement)
-    AC_MSG_RESULT(prefork selected)
-    apache_cv_mpm=prefork
-  fi
-fi
-if test ! -f "$abs_srcdir/server/mpm/$apache_cv_mpm/mpm.h"; then
-    AC_MSG_ERROR(the selected mpm -- $apache_cv_mpm -- is not supported)
-fi
-
-APACHE_FAST_OUTPUT(server/mpm/Makefile)
-
-MPM_NAME=$apache_cv_mpm
-MPM_DIR=server/mpm/$MPM_NAME
-MPM_LIB=$MPM_DIR/lib${MPM_NAME}.la
-
-APACHE_SUBST(MPM_NAME)
-MODLIST="$MODLIST mpm_${MPM_NAME}"
-
diff --git a/server/mpm/experimental/perchild/.cvsignore b/server/mpm/experimental/perchild/.cvsignore
deleted file mode 100644
index 84df257..0000000
--- a/server/mpm/experimental/perchild/.cvsignore
+++ /dev/null
@@ -1,5 +0,0 @@
-.deps
-.libs
-*.lo
-*.la
-Makefile
diff --git a/server/mpm/experimental/perchild/Makefile.in b/server/mpm/experimental/perchild/Makefile.in
deleted file mode 100644
index 374f130..0000000
--- a/server/mpm/experimental/perchild/Makefile.in
+++ /dev/null
@@ -1,5 +0,0 @@
-
-LTLIBRARY_NAME    = libperchild.la
-LTLIBRARY_SOURCES = perchild.c
-
-include $(top_srcdir)/build/ltlib.mk
diff --git a/server/mpm/experimental/perchild/config5.m4 b/server/mpm/experimental/perchild/config5.m4
deleted file mode 100644
index bd179ba..0000000
--- a/server/mpm/experimental/perchild/config5.m4
+++ /dev/null
@@ -1,6 +0,0 @@
-dnl ## XXX - Need a more thorough check of the proper flags to use
-
-if test "$MPM_NAME" = "perchild" ; then
-
-    APACHE_FAST_OUTPUT(server/mpm/$MPM_NAME/Makefile)
-fi
diff --git a/server/mpm/experimental/perchild/mpm.h b/server/mpm/experimental/perchild/mpm.h
deleted file mode 100644
index bc4c264..0000000
--- a/server/mpm/experimental/perchild/mpm.h
+++ /dev/null
@@ -1,98 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-#include "httpd.h"
-#include "mpm_default.h"
-#include "unixd.h"
-
-#ifndef APACHE_MPM_PERCHILD_H
-#define APACHE_MPM_PERCHILD_H
-
-#define PERCHILD_MPM
-
-#define MPM_NAME "Perchild"
-
-#define AP_MPM_WANT_RECLAIM_CHILD_PROCESSES
-#define AP_MPM_WANT_WAIT_OR_TIMEOUT
-#define AP_MPM_WANT_PROCESS_CHILD_STATUS
-#define AP_MPM_WANT_SET_PIDFILE
-#define AP_MPM_WANT_SET_SCOREBOARD
-#define AP_MPM_WANT_SET_LOCKFILE
-#define AP_MPM_WANT_SET_MAX_REQUESTS
-#define AP_MPM_WANT_SET_COREDUMPDIR
-#define AP_MPM_WANT_SET_ACCEPT_LOCK_MECH
-
-#define MPM_SYNC_CHILD_TABLE()
-#define MPM_CHILD_PID(i) (ap_scoreboard_image->parent[i].pid)
-#define MPM_NOTE_CHILD_KILLED(i) (MPM_CHILD_PID(i) = 0)
-
-/* Table of child status */
-#define SERVER_DEAD 0
-#define SERVER_DYING 1
-#define SERVER_ALIVE 2
-
-typedef struct ap_ctable{
-    pid_t pid;
-    unsigned char status;
-} ap_ctable;
-
-extern int ap_threads_per_child;
-extern int ap_max_daemons_limit;
-extern server_rec *ap_server_conf;
-
-#endif /* APACHE_MPM_PERCHILD_H */
diff --git a/server/mpm/experimental/perchild/mpm_default.h b/server/mpm/experimental/perchild/mpm_default.h
deleted file mode 100644
index 2874b34..0000000
--- a/server/mpm/experimental/perchild/mpm_default.h
+++ /dev/null
@@ -1,113 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-#ifndef APACHE_MPM_DEFAULT_H
-#define APACHE_MPM_DEFAULT_H
-
-/* Number of threads to spawn off by default --- also, if fewer than
- * this free when the caretaker checks, it will spawn more.
- */
-#ifndef DEFAULT_START_THREAD
-#define DEFAULT_START_THREAD 5
-#endif
-
-/* Maximum number of *free* server threads --- more than this, and
- * they will die off.
- */
-
-#ifndef DEFAULT_MAX_SPARE_THREAD
-#define DEFAULT_MAX_SPARE_THREAD 10
-#endif
-
-/* Minimum --- fewer than this, and more will be created */
-
-#ifndef DEFAULT_MIN_SPARE_THREAD
-#define DEFAULT_MIN_SPARE_THREAD 5
-#endif
-
-/* Number of servers to spawn off by default
- */
-#ifndef DEFAULT_NUM_DAEMON
-#define DEFAULT_NUM_DAEMON 2
-#endif
-
-/* File used for accept locking, when we use a file */
-#ifndef DEFAULT_LOCKFILE
-#define DEFAULT_LOCKFILE "logs/accept.lock"
-#endif
-
-/* Where the main/parent process's pid is logged */
-#ifndef DEFAULT_PIDLOG
-#define DEFAULT_PIDLOG "logs/httpd.pid"
-#endif
-
-/*
- * Interval, in microseconds, between scoreboard maintenance.
- */
-#ifndef SCOREBOARD_MAINTENANCE_INTERVAL
-#define SCOREBOARD_MAINTENANCE_INTERVAL 1000000
-#endif
-
-/* Number of requests to try to handle in a single process.  If <= 0,
- * the children don't die off.
- */
-#ifndef DEFAULT_MAX_REQUESTS_PER_CHILD
-#define DEFAULT_MAX_REQUESTS_PER_CHILD 10000
-#endif
-
-#endif /* AP_MPM_DEFAULT_H */
diff --git a/server/mpm/experimental/perchild/perchild.c b/server/mpm/experimental/perchild/perchild.c
deleted file mode 100644
index 82b111a..0000000
--- a/server/mpm/experimental/perchild/perchild.c
+++ /dev/null
@@ -1,2050 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-#include "apr_hash.h"
-#include "apr_strings.h"
-#include "apr_pools.h"
-#include "apr_portable.h"
-#include "apr_file_io.h"
-#include "apr_signal.h"
-
-#define APR_WANT_IOVEC
-#include "apr_want.h"
-
-#if APR_HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#if APR_HAVE_SYS_SOCKET_H
-#include <sys/socket.h>
-#endif
-
-#if !APR_HAS_THREADS
-#error The perchild MPM requires APR threads, but they are unavailable.
-#endif  
-
-#define CORE_PRIVATE 
- 
-#include "ap_config.h"
-#include "httpd.h" 
-#include "http_main.h" 
-#include "http_log.h" 
-#include "http_config.h"    /* for read_config */ 
-#include "http_core.h"      /* for get_remote_host */ 
-#include "http_protocol.h"
-#include "http_connection.h"
-#include "ap_mpm.h"
-#include "unixd.h"
-#include "mpm_common.h"
-#include "ap_listen.h"
-#include "mpm_default.h"
-#include "mpm.h"
-#include "scoreboard.h"
-#include "util_filter.h"
-
-/* ### should be APR-ized */
-#include <poll.h>
-#include <grp.h>
-#include <pwd.h>
-#include <sys/stat.h>
-#include <sys/un.h>
-#include <setjmp.h>
-#ifdef HAVE_SYS_PROCESSOR_H
-#include <sys/processor.h> /* for bindprocessor() */
-#endif
-
-/*
- * Define some magic numbers that we use for the state of the incomming
- * request. These must be < 0 so they don't collide with a file descriptor.
- */
-#define AP_PERCHILD_THISCHILD -1
-#define AP_PERCHILD_OTHERCHILD -2
-
-/* Limit on the threads per process.  Clients will be locked out if more than
- * this * server_limit are needed.
- *
- * We keep this for one reason it keeps the size of the scoreboard file small
- * enough that we can read the whole thing without worrying too much about
- * the overhead.
- */
-#ifndef DEFAULT_THREAD_LIMIT
-#define DEFAULT_THREAD_LIMIT 64 
-#endif
-
-/* Admin can't tune ThreadLimit beyond MAX_THREAD_LIMIT.  We want
- * some sort of compile-time limit to help catch typos.
- */
-#ifndef MAX_THREAD_LIMIT
-#define MAX_THREAD_LIMIT 20000
-#endif 
-
-/* Limit on the total --- clients will be locked out if more servers than
- * this are needed.  It is intended solely to keep the server from crashing
- * when things get out of hand.
- *
- * We keep a hard maximum number of servers, for two reasons --- first off,
- * in case something goes seriously wrong, we want to stop the fork bomb
- * short of actually crashing the machine we're running on by filling some
- * kernel table.  Secondly, it keeps the size of the scoreboard file small
- * enough that we can read the whole thing without worrying too much about
- * the overhead.
- */
-#ifndef DEFAULT_SERVER_LIMIT
-#define DEFAULT_SERVER_LIMIT 8 
-#endif
-
-/* Admin can't tune ServerLimit beyond MAX_SERVER_LIMIT.  We want
- * some sort of compile-time limit to help catch typos.
- */
-#ifndef MAX_SERVER_LIMIT
-#define MAX_SERVER_LIMIT 20000
-#endif
-
-/*
- * Actual definitions of config globals
- */
-
-static int threads_to_start = 0;         /* Worker threads per child */
-static int min_spare_threads = 0;
-static int max_spare_threads = 0;
-static int max_threads = 0;
-static int server_limit = DEFAULT_SERVER_LIMIT;
-static int first_server_limit;
-static int thread_limit = DEFAULT_THREAD_LIMIT;
-static int first_thread_limit;
-static int changed_limit_at_restart;
-static int max_requests_per_child = 0;
-static int num_daemons = 0;
-static int curr_child_num = 0;
-static int workers_may_exit = 0;
-static int requests_this_child;
-static int num_listenfds = 0;
-static apr_socket_t **listenfds;
-static jmp_buf jmpbuffer;
-
-struct child_info_t {
-    uid_t uid;
-    gid_t gid;
-    int sd;
-};
-
-typedef struct {
-    const char *sockname;    /* The base name for the socket */
-    const char *fullsockname;   /* socket base name + extension */
-    int        sd;       /* The socket descriptor */
-    int        sd2;       /* The socket descriptor */
-} perchild_server_conf;
-
-typedef struct child_info_t child_info_t;
-
-/* Tables used to determine the user and group each child process should
- * run as.  The hash table is used to correlate a server name with a child
- * process.
- */
-static child_info_t *child_info_table;
-static int          *thread_socket_table;
-struct ap_ctable    *ap_child_table;
-
-/*
- * The max child slot ever assigned, preserved across restarts.  Necessary
- * to deal with NumServers changes across AP_SIG_GRACEFUL restarts.  We 
- * use this value to optimize routines that have to scan the entire child 
- * table.
- *
- * XXX - It might not be worth keeping this code in. There aren't very
- * many child processes in this MPM.
- */
-int ap_max_daemons_limit = -1;
-int ap_threads_per_child; /* XXX not part of API!  axe it! */
-
-module AP_MODULE_DECLARE_DATA mpm_perchild_module;
-
-static apr_file_t *pipe_of_death_in = NULL;
-static apr_file_t *pipe_of_death_out = NULL;
-static apr_lock_t *pipe_of_death_mutex;
-
-/* *Non*-shared http_main globals... */
-
-server_rec *ap_server_conf;
-
-/* one_process --- debugging mode variable; can be set from the command line
- * with the -X flag.  If set, this gets you the child_main loop running
- * in the process which originally started up (no detach, no make_child),
- * which is a pretty nice debugging environment.  (You'll get a SIGHUP
- * early in standalone_main; just continue through.  This is the server
- * trying to kill off any child processes which it might have lying
- * around --- Apache doesn't keep track of their pids, it just sends
- * SIGHUP to the process group, ignoring it in the root process.
- * Continue through and you'll be fine.).
- */
-
-static int one_process = 0;
-
-#ifdef DEBUG_SIGSTOP
-int raise_sigstop_flags;
-#endif
-
-static apr_pool_t *pconf;              /* Pool for config stuff */
-static apr_pool_t *pchild;             /* Pool for httpd child stuff */
-static apr_pool_t *thread_pool_parent; /* Parent of per-thread pools */
-static apr_lock_t *thread_pool_parent_mutex;
-
-static int child_num;
-static unsigned int my_pid; /* Linux getpid() doesn't work except in 
-                      main thread. Use this instead */
-/* Keep track of the number of worker threads currently active */
-static int worker_thread_count;
-static apr_lock_t *worker_thread_count_mutex;
-static int *worker_thread_free_ids;
-static apr_threadattr_t *worker_thread_attr;
-
-/* Keep track of the number of idle worker threads */
-static int idle_thread_count;
-static apr_lock_t *idle_thread_count_mutex;
-
-/* Locks for accept serialization */
-#ifdef NO_SERIALIZED_ACCEPT
-#define SAFE_ACCEPT(stmt) APR_SUCCESS
-#else
-#define SAFE_ACCEPT(stmt) (stmt)
-static apr_lock_t *process_accept_mutex;
-#endif /* NO_SERIALIZED_ACCEPT */
-static apr_lock_t *thread_accept_mutex;
-
-AP_DECLARE(apr_status_t) ap_mpm_query(int query_code, int *result)
-{
-    switch(query_code){
-        case AP_MPMQ_MAX_DAEMON_USED:
-            *result = ap_max_daemons_limit;
-            return APR_SUCCESS;
-        case AP_MPMQ_IS_THREADED:
-            *result = AP_MPMQ_DYNAMIC;
-            return APR_SUCCESS;
-        case AP_MPMQ_IS_FORKED:
-            *result = AP_MPMQ_STATIC;
-            return APR_SUCCESS;
-        case AP_MPMQ_HARD_LIMIT_DAEMONS:
-            *result = server_limit;
-            return APR_SUCCESS;
-        case AP_MPMQ_HARD_LIMIT_THREADS:
-            *result = thread_limit;
-            return APR_SUCCESS;
-        case AP_MPMQ_MAX_THREADS:
-            *result = max_threads;
-            return APR_SUCCESS;
-        case AP_MPMQ_MIN_SPARE_DAEMONS:
-            *result = 0;
-            return APR_SUCCESS;
-        case AP_MPMQ_MIN_SPARE_THREADS:    
-            *result = min_spare_threads;
-            return APR_SUCCESS;
-        case AP_MPMQ_MAX_SPARE_DAEMONS:
-            *result = 0;
-            return APR_SUCCESS;
-        case AP_MPMQ_MAX_SPARE_THREADS:
-            *result = max_spare_threads;
-            return APR_SUCCESS;
-        case AP_MPMQ_MAX_REQUESTS_DAEMON:
-            *result = max_requests_per_child;
-            return APR_SUCCESS; 
-        case AP_MPMQ_MAX_DAEMONS:
-            *result = num_daemons;
-            return APR_SUCCESS;
-    }
-    return APR_ENOTIMPL;
-}
-
-/* a clean exit from a child with proper cleanup */
-static void clean_child_exit(int code)
-{
-    if (pchild) {
-        apr_pool_destroy(pchild);
-    }
-    exit(code);
-}
-
-/* handle all varieties of core dumping signals */
-static void sig_coredump(int sig)
-{
-    chdir(ap_coredump_dir);
-    apr_signal(sig, SIG_DFL);
-    kill(getpid(), sig);
-    /* At this point we've got sig blocked, because we're still inside
-     * the signal handler.  When we leave the signal handler it will
-     * be unblocked, and we'll take the signal... and coredump or whatever
-     * is appropriate for this particular Unix.  In addition the parent
-     * will see the real signal we received -- whereas if we called
-     * abort() here, the parent would only see SIGABRT.
-     */
-}
-
-static void just_die(int sig)
-{
-    clean_child_exit(0);
-}
-
-/*****************************************************************
- * Connection structures and accounting...
- */
-
-/* volatile just in case */
-static int volatile shutdown_pending;
-static int volatile restart_pending;
-static int volatile is_graceful;
-static int volatile child_fatal;
-/* we don't currently track ap_my_generation, but mod_status 
- * references it so it must be defined */
-ap_generation_t volatile ap_my_generation=0;
-
-/*
- * ap_start_shutdown() and ap_start_restart(), below, are a first stab at
- * functions to initiate shutdown or restart without relying on signals. 
- * Previously this was initiated in sig_term() and restart() signal handlers, 
- * but we want to be able to start a shutdown/restart from other sources --
- * e.g. on Win32, from the service manager. Now the service manager can
- * call ap_start_shutdown() or ap_start_restart() as appropiate.  Note that
- * these functions can also be called by the child processes, since global
- * variables are no longer used to pass on the required action to the parent.
- *
- * These should only be called from the parent process itself, since the
- * parent process will use the shutdown_pending and restart_pending variables
- * to determine whether to shutdown or restart. The child process should
- * call signal_parent() directly to tell the parent to die -- this will
- * cause neither of those variable to be set, which the parent will
- * assume means something serious is wrong (which it will be, for the
- * child to force an exit) and so do an exit anyway.
- */
-
-static void ap_start_shutdown(void)
-{
-    if (shutdown_pending == 1) {
-        /* Um, is this _probably_ not an error, if the user has
-         * tried to do a shutdown twice quickly, so we won't
-         * worry about reporting it.
-         */
-        return;
-    }
-    shutdown_pending = 1;
-}
-
-/* do a graceful restart if graceful == 1 */
-static void ap_start_restart(int graceful)
-{
-
-    if (restart_pending == 1) {
-        /* Probably not an error - don't bother reporting it */
-        return;
-    }
-    restart_pending = 1;
-    is_graceful = graceful;
-    if (is_graceful) {
-        apr_pool_cleanup_kill(pconf, NULL, ap_cleanup_scoreboard);
-    }
-}
-
-static void sig_term(int sig)
-{
-    ap_start_shutdown();
-}
-
-static void restart(int sig)
-{
-#ifndef WIN32
-    ap_start_restart(sig == AP_SIG_GRACEFUL);
-#else
-    ap_start_restart(1);
-#endif
-}
-
-static void set_signals(void)
-{
-#ifndef NO_USE_SIGACTION
-    struct sigaction sa;
-
-    sigemptyset(&sa.sa_mask);
-    sa.sa_flags = 0;
-
-    if (!one_process) {
-        sa.sa_handler = sig_coredump;
-#if defined(SA_ONESHOT)
-        sa.sa_flags = SA_ONESHOT;
-#elif defined(SA_RESETHAND)
-        sa.sa_flags = SA_RESETHAND;
-#endif
-        if (sigaction(SIGSEGV, &sa, NULL) < 0)
-            ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf,
-                         "sigaction(SIGSEGV)");
-#ifdef SIGBUS
-        if (sigaction(SIGBUS, &sa, NULL) < 0)
-            ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf,
-                         "sigaction(SIGBUS)");
-#endif
-#ifdef SIGABORT
-        if (sigaction(SIGABORT, &sa, NULL) < 0)
-            ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf,
-                         "sigaction(SIGABORT)");
-#endif
-#ifdef SIGABRT
-        if (sigaction(SIGABRT, &sa, NULL) < 0)
-            ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf,
-                         "sigaction(SIGABRT)");
-#endif
-#ifdef SIGILL
-        if (sigaction(SIGILL, &sa, NULL) < 0)
-            ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf,
-                         "sigaction(SIGILL)");
-#endif
-        sa.sa_flags = 0;
-    }
-    sa.sa_handler = sig_term;
-    if (sigaction(SIGTERM, &sa, NULL) < 0)
-        ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf,
-                     "sigaction(SIGTERM)");
-#ifdef SIGINT
-    if (sigaction(SIGINT, &sa, NULL) < 0)
-        ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf,
-                     "sigaction(SIGINT)");
-#endif
-#ifdef SIGXCPU
-    sa.sa_handler = SIG_DFL;
-    if (sigaction(SIGXCPU, &sa, NULL) < 0)
-        ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf,
-                     "sigaction(SIGXCPU)");
-#endif
-#ifdef SIGXFSZ
-    sa.sa_handler = SIG_DFL;
-    if (sigaction(SIGXFSZ, &sa, NULL) < 0)
-        ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf,
-                     "sigaction(SIGXFSZ)");
-#endif
-#ifdef SIGPIPE
-    sa.sa_handler = SIG_IGN;
-    if (sigaction(SIGPIPE, &sa, NULL) < 0)
-        ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf,
-                     "sigaction(SIGPIPE)");
-#endif
-
-    /* we want to ignore HUPs and AP_SIG_GRACEFUL while we're busy 
-     * processing one */
-    sigaddset(&sa.sa_mask, SIGHUP);
-    sigaddset(&sa.sa_mask, AP_SIG_GRACEFUL);
-    sa.sa_handler = restart;
-    if (sigaction(SIGHUP, &sa, NULL) < 0)
-        ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf,
-                     "sigaction(SIGHUP)");
-    if (sigaction(AP_SIG_GRACEFUL, &sa, NULL) < 0)
-        ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf,
-                     "sigaction(" AP_SIG_GRACEFUL_STRING ")");
-#else
-    if (!one_process) {
-        apr_signal(SIGSEGV, sig_coredump);
-#ifdef SIGBUS
-        apr_signal(SIGBUS, sig_coredump);
-#endif /* SIGBUS */
-#ifdef SIGABORT
-        apr_signal(SIGABORT, sig_coredump);
-#endif /* SIGABORT */
-#ifdef SIGABRT
-        apr_signal(SIGABRT, sig_coredump);
-#endif /* SIGABRT */
-#ifdef SIGILL
-        apr_signal(SIGILL, sig_coredump);
-#endif /* SIGILL */
-#ifdef SIGXCPU
-        apr_signal(SIGXCPU, SIG_DFL);
-#endif /* SIGXCPU */
-#ifdef SIGXFSZ
-        apr_signal(SIGXFSZ, SIG_DFL);
-#endif /* SIGXFSZ */
-    }
-
-    apr_signal(SIGTERM, sig_term);
-#ifdef SIGHUP
-    apr_signal(SIGHUP, restart);
-#endif /* SIGHUP */
-#ifdef AP_SIG_GRACEFUL
-    apr_signal(AP_SIG_GRACEFUL, restart);
-#endif /* AP_SIG_GRACEFUL */
-#ifdef SIGPIPE
-    apr_signal(SIGPIPE, SIG_IGN);
-#endif /* SIGPIPE */
-
-#endif
-}
-
-/*****************************************************************
- * Here follows a long bunch of generic server bookkeeping stuff...
- */
-
-int ap_graceful_stop_signalled(void)
-{
-    /* XXX - Does this really work? - Manoj */
-    return is_graceful;
-}
-
-/*****************************************************************
- * Child process main loop.
- */
-
-static void process_socket(apr_pool_t *p, apr_socket_t *sock, long conn_id)
-{
-    conn_rec *current_conn;
-    int csd;
-    apr_status_t rv;
-    int thread_num = conn_id % thread_limit;
-    ap_sb_handle_t *sbh;
-
-    if ((rv = apr_os_sock_get(&csd, sock)) != APR_SUCCESS) {
-        ap_log_error(APLOG_MARK, APLOG_ERR, rv, NULL, "apr_os_sock_get");
-    }
-
-    if (csd >= FD_SETSIZE) {
-        ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_WARNING, 0, NULL,
-                     "new file descriptor %d is too large; you probably need "
-                     "to rebuild Apache with a larger FD_SETSIZE "
-                     "(currently %d)", 
-                     csd, FD_SETSIZE);
-        apr_socket_close(sock);
-        return;
-    }
-
-    if (thread_socket_table[thread_num] < 0) {
-        ap_sock_disable_nagle(sock);
-    }
-
-    ap_create_sb_handle(&sbh, p, conn_id / thread_limit, thread_num);
-    current_conn = ap_run_create_connection(p, ap_server_conf, sock, conn_id, sbh);
-    if (current_conn) {
-        ap_process_connection(current_conn, sock);
-        ap_lingering_close(current_conn);
-    }
-}
-
-static void *worker_thread(apr_thread_t *, void *);
-
-/* Starts a thread as long as we're below max_threads */
-static int start_thread(void)
-{
-    apr_thread_t *thread;
-    int rc;
-
-    apr_lock_acquire(worker_thread_count_mutex);
-    if (worker_thread_count < max_threads - 1) {
-        rc = apr_thread_create(&thread, worker_thread_attr, worker_thread,
-                 &worker_thread_free_ids[worker_thread_count], pchild);
-        if (rc != APR_SUCCESS) {
-            ap_log_error(APLOG_MARK, APLOG_ALERT, rc, ap_server_conf,
-                         "apr_thread_create: unable to create worker thread");
-            /* In case system resources are maxxed out, we don't want
-               Apache running away with the CPU trying to fork over and
-               over and over again if we exit. */
-            sleep(10);
-            workers_may_exit = 1;
-            apr_lock_release(worker_thread_count_mutex);
-            return 0;
-        }
-        else {
-            worker_thread_count++;
-        }
-    }
-    else {
-        static int reported = 0;
-        
-        if (!reported) {
-            ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0,
-                         ap_server_conf,
-                         "server reached MaxThreadsPerChild setting, "
-                         "consider raising the MaxThreadsPerChild or "
-                         "NumServers settings");
-            reported = 1;
-        }
-        apr_lock_release(worker_thread_count_mutex);
-        return 0;
-    }
-    apr_lock_release(worker_thread_count_mutex);
-    return 1;
-
-}
-/* Sets workers_may_exit if we received a character on the pipe_of_death */
-static void check_pipe_of_death(void)
-{
-    apr_lock_acquire(pipe_of_death_mutex);
-    if (!workers_may_exit) {
-        int ret;
-        char pipe_read_char;
-        apr_size_t n = 1;
-
-        ret = apr_recv(listenfds[0], &pipe_read_char, &n);
-        if (APR_STATUS_IS_EAGAIN(ret)) {
-            /* It lost the lottery. It must continue to suffer
-             * through a life of servitude. */
-        }
-        else {
-            /* It won the lottery (or something else is very
-             * wrong). Embrace death with open arms. */
-            workers_may_exit = 1;
-        }
-    }
-    apr_lock_release(pipe_of_death_mutex);
-}
-
-/* idle_thread_count should be incremented before starting a worker_thread */
-
-static void *worker_thread(apr_thread_t *thd, void *arg)
-{
-    apr_socket_t *csd = NULL;
-    apr_pool_t *tpool;      /* Pool for this thread           */
-    apr_pool_t *ptrans;     /* Pool for per-transaction stuff */
-    apr_socket_t *sd = NULL;
-    volatile int last_pollfd = 0;
-    volatile int thread_just_started = 1;
-    int srv;
-    int curr_pollfd;
-    int thread_num = *((int *) arg);
-    long conn_id = child_num * thread_limit + thread_num;
-    apr_pollfd_t *pollset;
-    int n;
-    apr_status_t rv;
-
-    apr_lock_acquire(thread_pool_parent_mutex);
-    apr_pool_create(&tpool, thread_pool_parent);
-    apr_lock_release(thread_pool_parent_mutex);
-    apr_pool_create(&ptrans, tpool);
-
-    (void) ap_update_child_status_from_indexes(child_num, thread_num, 
-                                               SERVER_STARTING,
-                                               (request_rec *) NULL);
-
-    apr_poll_setup(&pollset, num_listenfds+1, tpool);
-    for(n = 0; n <= num_listenfds; ++n) {
-        apr_poll_socket_add(pollset, listenfds[n], APR_POLLIN);
-    }
-
-    while (!workers_may_exit) {
-        workers_may_exit |= (max_requests_per_child != 0)
-                            && (requests_this_child <= 0);
-        if (workers_may_exit) break;
-        if (!thread_just_started) {
-            apr_lock_acquire(idle_thread_count_mutex);
-            if (idle_thread_count < max_spare_threads) {
-                idle_thread_count++;
-                apr_lock_release(idle_thread_count_mutex);
-            }
-            else {
-                apr_lock_release(idle_thread_count_mutex);
-                break;
-            }
-        }
-        else {
-            thread_just_started = 0;
-        }
-
-        (void) ap_update_child_status_from_indexes(child_num, thread_num, 
-                                                   SERVER_READY,
-                                                   (request_rec *) NULL);
-
-        apr_lock_acquire(thread_accept_mutex);
-        if (workers_may_exit) {
-            apr_lock_release(thread_accept_mutex);
-            break;
-        }
-        if ((rv = SAFE_ACCEPT(apr_lock_acquire(process_accept_mutex)))
-            != APR_SUCCESS) {
-            ap_log_error(APLOG_MARK, APLOG_EMERG, rv, ap_server_conf,
-                         "apr_lock_acquire failed. Attempting to shutdown "
-                         "process gracefully.");
-            workers_may_exit = 1;
-        }
-
-        while (!workers_may_exit) {
-            apr_int16_t event;
-            srv = apr_poll(pollset, &n, -1);
-
-            if (srv != APR_SUCCESS) {
-                if (APR_STATUS_IS_EINTR(srv)) {
-                    continue;
-                }
-
-                /* apr_poll() will only return errors in catastrophic
-                 * circumstances. Let's try exiting gracefully, for now. */
-                ap_log_error(APLOG_MARK, APLOG_ERR, srv, (const server_rec *)
-                             ap_server_conf, "apr_poll: (listen)");
-                workers_may_exit = 1;
-            }
-            if (workers_may_exit) break;
-
-            apr_poll_revents_get(&event, listenfds[0], pollset);
-            if (event & APR_POLLIN) {
-                /* A process got a signal on the shutdown pipe. Check if we're
-                 * the lucky process to die. */
-                check_pipe_of_death();
-                continue;
-            }
-            
-            apr_poll_revents_get(&event, listenfds[1], pollset);
-            if (event & APR_POLLIN || event & APR_POLLOUT) {
-                /* This request is from another child in our current process.
-                 * We should set a flag here, and then below we will read
-                 * two bytes (the socket number and the NULL byte.
-                 */
-                thread_socket_table[thread_num] = AP_PERCHILD_OTHERCHILD;
-                goto got_from_other_child;
-            }
-
-            if (num_listenfds == 1) {
-                sd = ap_listeners->sd;
-                goto got_fd;
-            }
-            else {
-                /* find a listener */
-                curr_pollfd = last_pollfd;
-                do {
-                    curr_pollfd++;
-                    if (curr_pollfd > num_listenfds) {
-                        curr_pollfd = 1;
-                    }
-                    /* XXX: Should we check for POLLERR? */
-                    apr_poll_revents_get(&event, listenfds[curr_pollfd],
-                                         pollset);
-                    if (event & APR_POLLIN) {
-                        last_pollfd = curr_pollfd;
-                        sd = listenfds[curr_pollfd];
-                        goto got_fd;
-                    }
-                } while (curr_pollfd != last_pollfd);
-            }
-        }
-    got_fd:
-        if (!workers_may_exit) {
-            if ((rv = apr_accept(&csd, sd, ptrans)) != APR_SUCCESS) {
-                ap_log_error(APLOG_MARK, APLOG_ERR, rv, ap_server_conf,
-                             "apr_accept");
-            }
-            if ((rv = SAFE_ACCEPT(apr_lock_release(process_accept_mutex)))
-                != APR_SUCCESS) {
-                ap_log_error(APLOG_MARK, APLOG_EMERG, rv, ap_server_conf,
-                             "apr_lock_release failed. Attempting to shutdown "
-                             "process gracefully.");
-                workers_may_exit = 1;
-            }
-            apr_lock_release(thread_accept_mutex);
-            apr_lock_acquire(idle_thread_count_mutex);
-            if (idle_thread_count > min_spare_threads) {
-                idle_thread_count--;
-            }
-            else {
-                if (!start_thread()) {
-                    idle_thread_count--;
-                }
-            }
-            apr_lock_release(idle_thread_count_mutex);
-        got_from_other_child:
-            if (thread_socket_table[thread_num] == AP_PERCHILD_OTHERCHILD) {
-                struct msghdr msg;
-                struct cmsghdr *cmsg;
-                char sockname[80];
-                struct iovec iov;
-                int ret, sd, dp;
-
-                iov.iov_base = sockname;
-                iov.iov_len = 80;
-
-                msg.msg_name = NULL;
-                msg.msg_namelen = 0;
-                msg.msg_iov = &iov;
-                msg.msg_iovlen = 1;
-
-                cmsg = apr_palloc(ptrans, sizeof(*cmsg) + sizeof(sd));
-                cmsg->cmsg_len = sizeof(*cmsg) + sizeof(sd);
-                msg.msg_control = (caddr_t)cmsg;
-                msg.msg_controllen = cmsg->cmsg_len;
-                msg.msg_flags = 0;
-                
-                ret = recvmsg(child_info_table[child_num].sd, &msg, 0);
-
-                memcpy(&dp, CMSG_DATA(cmsg), sizeof(dp));
-
-                thread_socket_table[thread_num] = dp;
-                apr_os_sock_put(&csd, &child_info_table[child_num].sd, ptrans);
-            }
-            if (setjmp(jmpbuffer) != 1) {
-                process_socket(ptrans, csd, conn_id);
-            }
-            else {
-                thread_socket_table[thread_num] = AP_PERCHILD_THISCHILD;
-            }  
-            requests_this_child--;
-        }
-        else {
-            if ((rv = SAFE_ACCEPT(apr_lock_release(process_accept_mutex)))
-                != APR_SUCCESS) {
-                ap_log_error(APLOG_MARK, APLOG_EMERG, rv, ap_server_conf,
-                             "apr_lock_release failed. Attempting to shutdown "
-                             "process gracefully.");
-                workers_may_exit = 1;
-            }
-            apr_lock_release(thread_accept_mutex);
-            apr_lock_acquire(idle_thread_count_mutex);
-            idle_thread_count--;
-            apr_lock_release(idle_thread_count_mutex);
-        break;
-        }
-        apr_pool_clear(ptrans);
-    }
-
-    apr_lock_acquire(thread_pool_parent_mutex);
-    ap_update_child_status_from_indexes(child_num, thread_num, SERVER_DEAD,
-                                        (request_rec *) NULL);
-    apr_pool_destroy(tpool);
-    apr_lock_release(thread_pool_parent_mutex);
-    apr_lock_acquire(worker_thread_count_mutex);
-    worker_thread_count--;
-    worker_thread_free_ids[worker_thread_count] = thread_num;
-    if (worker_thread_count == 0) {
-        /* All the threads have exited, now finish the shutdown process
-         * by signalling the sigwait thread */
-        kill(my_pid, SIGTERM);
-    }
-    apr_lock_release(worker_thread_count_mutex);
-
-    return NULL;
-}
-
-/* Set group privileges.
- *
- * Note that we use the username as set in the config files, rather than
- * the lookup of to uid --- the same uid may have multiple passwd entries,
- * with different sets of groups for each.
- */
-
-static int set_group_privs(uid_t uid, gid_t gid)
-{
-    if (!geteuid()) {
-        const char *name;
-
-        /* Get username if passed as a uid */
-
-        struct passwd *ent;
-
-        if ((ent = getpwuid(uid)) == NULL) {
-            ap_log_error(APLOG_MARK, APLOG_ALERT, errno, NULL,
-                         "getpwuid: couldn't determine user name from uid %u, "
-                         "you probably need to modify the User directive",
-                         (unsigned)uid);
-            return -1;
-        }
-
-        name = ent->pw_name;
-
-        /*
-         * Set the GID before initgroups(), since on some platforms
-         * setgid() is known to zap the group list.
-         */
-        if (setgid(gid) == -1) {
-            ap_log_error(APLOG_MARK, APLOG_ALERT, errno, NULL,
-                         "setgid: unable to set group id to Group %u",
-                         (unsigned)gid);
-            return -1;
-        }
-
-        /* Reset `groups' attributes. */
-
-        if (initgroups(name, gid) == -1) {
-            ap_log_error(APLOG_MARK, APLOG_ALERT, errno, NULL,
-                         "initgroups: unable to set groups for User %s "
-                         "and Group %u", name, (unsigned)gid);
-            return -1;
-        }
-    }
-    return 0;
-}
-
-
-static int perchild_setup_child(int childnum)
-{
-    child_info_t *ug = &child_info_table[childnum];
-
-    if (ug->uid == -1 && ug->gid == -1) {
-        return unixd_setup_child();
-    }
-    if (set_group_privs(ug->uid, ug->gid)) {
-        return -1;
-    }
-    /* Only try to switch if we're running as root */
-    if (!geteuid()
-        && (
-#ifdef _OSD_POSIX
-            os_init_job_environment(server_conf, unixd_config.user_name,
-                                    one_process) != 0 ||
-#endif
-            setuid(ug->uid) == -1)) {
-        ap_log_error(APLOG_MARK, APLOG_ALERT, errno, NULL,
-                     "setuid: unable to change to uid: %ld",
-                     (long) ug->uid);
-        return -1;
-    }
-    return 0;
-}
-
-static int check_signal(int signum)
-{
-    switch (signum) {
-    case SIGTERM:
-    case SIGINT:
-        just_die(signum);
-        return 1;
-    }
-    return 0;
-}                                                                               
-
-static void child_main(int child_num_arg)
-{
-    int i;
-    ap_listen_rec *lr;
-    apr_status_t rv;
-
-    my_pid = getpid();
-    child_num = child_num_arg;
-    apr_pool_create(&pchild, pconf);
-
-    /*stuff to do before we switch id's, so we have permissions.*/
-
-    rv = SAFE_ACCEPT(apr_lock_child_init(&process_accept_mutex, ap_lock_fname,
-                                         pchild));
-    if (rv != APR_SUCCESS) {
-        ap_log_error(APLOG_MARK, APLOG_EMERG, rv, ap_server_conf,
-                     "Couldn't initialize cross-process lock in child");
-        clean_child_exit(APEXIT_CHILDFATAL);
-    }
-
-    if (perchild_setup_child(child_num)) {
-        clean_child_exit(APEXIT_CHILDFATAL);
-    }
-
-    ap_run_child_init(pchild, ap_server_conf);
-
-    /*done with init critical section */
-
-    apr_setup_signal_thread();
-
-    requests_this_child = max_requests_per_child;
-    
-    /* Set up the pollfd array, num_listenfds + 1 for the pipe and 1 for
-     * the child socket.
-     */
-    listenfds = apr_pcalloc(pchild, sizeof(*listenfds) * (num_listenfds + 2));
-#if APR_FILES_AS_SOCKETS
-    apr_socket_from_file(&listenfds[0], pipe_of_death_in);
-#endif
-
-    /* The child socket */
-    apr_os_sock_put(&listenfds[1], &child_info_table[child_num].sd, pchild);
-
-    num_listenfds++;
-    for (lr = ap_listeners, i = 2; i <= num_listenfds; lr = lr->next, ++i) {
-        listenfds[i]=lr->sd;
-    }
-
-    /* Setup worker threads */
-
-    if (threads_to_start > max_threads) {
-        threads_to_start = max_threads;
-    }
-    idle_thread_count = threads_to_start;
-    worker_thread_count = 0;
-    worker_thread_free_ids = (int *)apr_pcalloc(pchild, thread_limit * sizeof(int));
-    for (i = 0; i < max_threads; i++) {
-        worker_thread_free_ids[i] = i;
-    }
-    apr_pool_create(&thread_pool_parent, pchild);
-    apr_lock_create(&thread_pool_parent_mutex, APR_MUTEX, APR_INTRAPROCESS, 
-                    APR_LOCK_DEFAULT, NULL, pchild);
-    apr_lock_create(&idle_thread_count_mutex, APR_MUTEX, APR_INTRAPROCESS, 
-                    APR_LOCK_DEFAULT, NULL, pchild);
-    apr_lock_create(&worker_thread_count_mutex, APR_MUTEX, APR_INTRAPROCESS,
-                    APR_LOCK_DEFAULT, NULL, pchild);
-    apr_lock_create(&pipe_of_death_mutex, APR_MUTEX, APR_INTRAPROCESS,
-                    APR_LOCK_DEFAULT, NULL, pchild);
-    apr_lock_create(&thread_accept_mutex, APR_MUTEX, APR_INTRAPROCESS,
-                    APR_LOCK_DEFAULT, NULL, pchild);
-
-    apr_threadattr_create(&worker_thread_attr, pchild);
-    apr_threadattr_detach_set(worker_thread_attr, 1);                                     
-
-    /* We are creating worker threads right now */
-    for (i=0; i < threads_to_start; i++) {
-        /* start_thread shouldn't fail here */
-        if (!start_thread()) {
-            break;
-        }
-    }
-
-    apr_signal_thread(check_signal);
-}
-
-static int make_child(server_rec *s, int slot)
-{
-    int pid;
-
-    if (slot + 1 > ap_max_daemons_limit) {
-        ap_max_daemons_limit = slot + 1;
-    }
-
-    if (one_process) {
-        set_signals();
-        ap_child_table[slot].pid = getpid();
-        ap_child_table[slot].status = SERVER_ALIVE;
-        child_main(slot);
-    }
-    (void) ap_update_child_status_from_indexes(slot, 0, SERVER_STARTING,
-                                               (request_rec *) NULL);
-
-    if ((pid = fork()) == -1) {
-        ap_log_error(APLOG_MARK, APLOG_ERR, errno, s,
-                     "fork: Unable to fork new process");
-        /* In case system resources are maxxed out, we don't want
-         * Apache running away with the CPU trying to fork over and
-         * over and over again. */
-        sleep(10);
-
-        return -1;
-    }
-
-    if (!pid) {
-#ifdef HAVE_BINDPROCESSOR
-        /* By default, AIX binds to a single processor.  This bit unbinds
-         * children which will then bind to another CPU.
-         */
-        int status = bindprocessor(BINDPROCESS, (int)getpid(),
-                                   PROCESSOR_CLASS_ANY);
-        if (status != OK) {
-            ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_WARNING, errno, 
-                         ap_server_conf, "processor unbind failed %d", status);
-        }
-#endif
-
-        RAISE_SIGSTOP(MAKE_CHILD);
-
-        /* XXX - For an unthreaded server, a signal handler will be necessary
-         * apr_signal(SIGTERM, just_die);
-         */
-        child_main(slot);
-        clean_child_exit(0);
-    }
-    /* else */
-    ap_child_table[slot].pid = pid;
-    ap_child_table[slot].status = SERVER_ALIVE;
-
-    return 0;
-}
-
-/* start up a bunch of children */
-static int startup_children(int number_to_start)
-{
-    int i;
-
-    for (i = 0; number_to_start && i < num_daemons; ++i) {
-        if (ap_child_table[i].pid) {
-            continue;
-        }
-        if (make_child(ap_server_conf, i) < 0) {
-            break;
-        }
-        --number_to_start;
-    }
-    return number_to_start;
-}
-
-
-/*
- * spawn_rate is the number of children that will be spawned on the
- * next maintenance cycle if there aren't enough servers.  It is
- * doubled up to MAX_SPAWN_RATE, and reset only when a cycle goes by
- * without the need to spawn.
- */
-static int spawn_rate = 1;
-#ifndef MAX_SPAWN_RATE
-#define MAX_SPAWN_RATE  (32)
-#endif
-static int hold_off_on_exponential_spawning;
-
-static void perform_child_maintenance(void)
-{
-    int i;
-    int free_length;
-    int free_slots[MAX_SPAWN_RATE];
-    int last_non_dead = -1;
-
-    /* initialize the free_list */
-    free_length = 0;
-    
-    for (i = 0; i < num_daemons; ++i) {
-        if (ap_child_table[i].pid == 0) {
-            if (free_length < spawn_rate) {
-                free_slots[free_length] = i;
-                ++free_length;
-            }
-        }
-        else {
-            last_non_dead = i;
-        }
-
-        if (i >= ap_max_daemons_limit && free_length >= spawn_rate) {
-            break;
-        }
-    }
-    ap_max_daemons_limit = last_non_dead + 1;
-
-    if (free_length > 0) {
-        for (i = 0; i < free_length; ++i) {
-            make_child(ap_server_conf, free_slots[i]);
-        }
-        /* the next time around we want to spawn twice as many if this
-         * wasn't good enough, but not if we've just done a graceful
-         */
-        if (hold_off_on_exponential_spawning) {
-            --hold_off_on_exponential_spawning;
-        }
-        else if (spawn_rate < MAX_SPAWN_RATE) {
-            spawn_rate *= 2;
-        }
-    }
-    else {
-        spawn_rate = 1;
-    }
-}
-
-static void server_main_loop(int remaining_children_to_start)
-{
-    int child_slot;
-    apr_exit_why_e exitwhy;
-    int status;
-    apr_proc_t pid;
-    int i;
-
-    while (!restart_pending && !shutdown_pending) {
-        ap_wait_or_timeout(&exitwhy, &status, &pid, pconf);
-        
-        if (pid.pid != -1) {
-            if (ap_process_child_status(&pid, exitwhy, status)
-                == APEXIT_CHILDFATAL) {
-                shutdown_pending = 1;
-                child_fatal = 1;
-                return;
-            }
-            /* non-fatal death... note that it's gone in the child table and
-             * clean out the status table. */
-            child_slot = -1;
-            for (i = 0; i < ap_max_daemons_limit; ++i) {
-                if (ap_child_table[i].pid == pid.pid) {
-                    child_slot = i;
-                    break;
-                }
-            }
-            if (child_slot >= 0) {
-                ap_child_table[child_slot].pid = 0;
-                ap_update_child_status_from_indexes(child_slot, i, SERVER_DEAD,
-                                                    (request_rec *) NULL);
-
-                
-                if (remaining_children_to_start
-                    && child_slot < num_daemons) {
-                    /* we're still doing a 1-for-1 replacement of dead
-                     * children with new children
-                     */
-                    make_child(ap_server_conf, child_slot);
-                    --remaining_children_to_start;
-                }
-#if APR_HAS_OTHER_CHILD
-            }
-            else if (apr_proc_other_child_read(&pid, status) == 0) {
-            /* handled */
-#endif
-            }
-            else if (is_graceful) {
-                /* Great, we've probably just lost a slot in the
-                * child table.  Somehow we don't know about this
-                * child.
-                */
-                ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_WARNING, 0, 
-                             ap_server_conf,
-                             "long lost child came home! (pid %ld)", 
-                             (long)pid.pid);
-            }
-            /* Don't perform idle maintenance when a child dies,
-             * only do it when there's a timeout.  Remember only a
-             * finite number of children can die, and it's pretty
-             * pathological for a lot to die suddenly.
-             */
-            continue;
-        }
-        else if (remaining_children_to_start) {
-            /* we hit a 1 second timeout in which none of the previous
-             * generation of children needed to be reaped... so assume
-             * they're all done, and pick up the slack if any is left.
-             */
-            remaining_children_to_start = \
-                startup_children(remaining_children_to_start);
-            /* In any event we really shouldn't do the code below because
-             * few of the servers we just started are in the IDLE state
-             * yet, so we'd mistakenly create an extra server.
-             */
-            continue;
-        }
-
-        perform_child_maintenance();
-    }
-}
-
-int ap_mpm_run(apr_pool_t *_pconf, apr_pool_t *plog, server_rec *s)
-{
-    int remaining_children_to_start;
-    int i;
-    apr_status_t rv;
-    apr_size_t one = 1;
-
-    ap_log_pid(pconf, ap_pid_fname);
-
-    first_server_limit = server_limit;
-    first_thread_limit = thread_limit;
-    if (changed_limit_at_restart) {
-        ap_log_error(APLOG_MARK, APLOG_WARNING | APLOG_NOERRNO, 0, s,
-                     "WARNING: Attempt to change ServerLimit or ThreadLimit "
-                     "ignored during restart");
-        changed_limit_at_restart = 0;
-    }
-
-    if ((rv = apr_file_pipe_create(&pipe_of_death_in, &pipe_of_death_out,
-                                   pconf)) != APR_SUCCESS) {
-        ap_log_error(APLOG_MARK, APLOG_ERR, rv,
-                     (const server_rec*) ap_server_conf,
-                     "apr_file_pipe_create (pipe_of_death)");
-        exit(1);
-    }
-    if ((rv = apr_file_pipe_timeout_set(pipe_of_death_in, 0)) != APR_SUCCESS) {
-        ap_log_error(APLOG_MARK, APLOG_ERR, rv,
-                     (const server_rec*) ap_server_conf,
-                     "apr_file_pipe_timeout_set (pipe_of_death)");
-        exit(1);
-    }
-    ap_server_conf = s;
-    if ((num_listenfds = ap_setup_listeners(ap_server_conf)) < 1) {
-        /* XXX: hey, what's the right way for the mpm to indicate
-         * a fatal error? */
-        ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_ALERT, 0, s,
-                     "no listening sockets available, shutting down");
-        return 1;
-    }
-
-    /* Initialize cross-process accept lock */
-    ap_lock_fname = apr_psprintf(_pconf, "%s.%u",
-                                 ap_server_root_relative(_pconf, ap_lock_fname),
-                                 my_pid);
-    rv = SAFE_ACCEPT(apr_lock_create(&process_accept_mutex, APR_MUTEX,
-                                     APR_CROSS_PROCESS, ap_accept_lock_mech,
-                                     ap_lock_fname, _pconf));
-    if (rv != APR_SUCCESS) {
-        ap_log_error(APLOG_MARK, APLOG_EMERG, rv, s,
-                     "Couldn't create cross-process lock");
-        return 1;
-    }
-
-    if (!is_graceful) {
-        if (ap_run_pre_mpm(pconf, SB_SHARED) != OK) {
-            return 1;
-        }
-    }
-    /* Initialize the child table */
-    if (!is_graceful) {
-        for (i = 0; i < server_limit; i++) {
-            ap_child_table[i].pid = 0;
-        }
-    }
-
-    set_signals();
-
-    /* If we're doing a graceful_restart then we're going to see a lot
-     * of children exiting immediately when we get into the main loop
-     * below (because we just sent them AP_SIG_GRACEFUL).  This happens 
-     * pretty rapidly... and for each one that exits we'll start a new one 
-     * until we reach at least daemons_min_free.  But we may be permitted to
-     * start more than that, so we'll just keep track of how many we're
-     * supposed to start up without the 1 second penalty between each fork.
-     */
-    remaining_children_to_start = num_daemons;
-    if (!is_graceful) {
-        remaining_children_to_start = \
-            startup_children(remaining_children_to_start);
-    }
-    else {
-        /* give the system some time to recover before kicking into
-         * exponential mode */
-        hold_off_on_exponential_spawning = 10;
-    }
-
-    ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_NOTICE, 0, ap_server_conf,
-                 "%s configured -- resuming normal operations",
-                 ap_get_server_version());
-    ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_INFO, 0, ap_server_conf,
-                 "Server built: %s", ap_get_server_built());
-    restart_pending = shutdown_pending = 0;
-
-    server_main_loop(remaining_children_to_start);
-
-    if (shutdown_pending) {
-        /* Time to gracefully shut down:
-         * Kill child processes, tell them to call child_exit, etc...
-         */
-        if (unixd_killpg(getpgrp(), SIGTERM) < 0) {
-            ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf,
-                         "killpg SIGTERM");
-        }
-        ap_reclaim_child_processes(1);      /* Start with SIGTERM */
-
-        if (!child_fatal) {
-            /* cleanup pid file on normal shutdown */
-            const char *pidfile = NULL;
-            pidfile = ap_server_root_relative (pconf, ap_pid_fname);
-            if (pidfile != NULL && unlink(pidfile) == 0) {
-                ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_INFO, 0,
-                             ap_server_conf,
-                             "removed PID file %s (pid=%ld)",
-                             pidfile, (long)getpid());
-            }
-    
-            ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_NOTICE, 0,
-                         ap_server_conf, "caught SIGTERM, shutting down");
-        }
-        return 1;
-    }
-
-    /* we've been told to restart */
-    apr_signal(SIGHUP, SIG_IGN);
-
-    if (one_process) {
-        /* not worth thinking about */
-        return 1;
-    }
-
-    if (is_graceful) {
-        char char_of_death = '!';
-
-        ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_NOTICE, 0,
-                     ap_server_conf, AP_SIG_GRACEFUL_STRING " received.  "
-                     "Doing graceful restart");
-
-        /* This is mostly for debugging... so that we know what is still
-         * gracefully dealing with existing request.
-         */
-    
-        for (i = 0; i < num_daemons; ++i) {
-            if (ap_child_table[i].pid) {
-                ap_child_table[i].status = SERVER_DYING;
-            } 
-        }
-        /* give the children the signal to die */
-        for (i = 0; i < num_daemons;) {
-            if ((rv = apr_file_write(pipe_of_death_out, &char_of_death,
-                                     &one)) != APR_SUCCESS) {
-                if (APR_STATUS_IS_EINTR(rv)) continue;
-                ap_log_error(APLOG_MARK, APLOG_WARNING, rv, ap_server_conf,
-                             "write pipe_of_death");
-            }
-            i++;
-        }
-    }
-    else {
-        /* Kill 'em all.  Since the child acts the same on the parents SIGTERM 
-         * and a SIGHUP, we may as well use the same signal, because some user
-         * pthreads are stealing signals from us left and right.
-         */
-        if (unixd_killpg(getpgrp(), SIGTERM) < 0) {
-            ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf,
-                         "killpg SIGTERM");
-        }
-        ap_reclaim_child_processes(1);      /* Start with SIGTERM */
-        ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_NOTICE, 0,
-                     ap_server_conf, "SIGHUP received.  Attempting to restart");
-    }
-    return 0;
-}
-
-/* This really should be a post_config hook, but the error log is already
- * redirected by that point, so we need to do this in the open_logs phase.
- */
-static int perchild_open_logs(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *s)
-{
-    apr_status_t rv;
-
-    pconf = p;
-    ap_server_conf = s;
-
-    if ((num_listensocks = ap_setup_listeners(ap_server_conf)) < 1) {
-        ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_ALERT|APLOG_STARTUP, 0,
-                     NULL, "no listening sockets available, shutting down");
-        return DONE;
-    }
-
-    ap_log_pid(pconf, ap_pid_fname);
-
-    if ((rv = ap_mpm_pod_open(pconf, &pod))) {
-        ap_log_error(APLOG_MARK, APLOG_CRIT|APLOG_STARTUP, rv, NULL,
-                "Could not open pipe-of-death.");
-        return DONE;
-    }
-    return OK;
-}
-
-static int perchild_pre_config(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp)
-{
-    static int restart_num = 0;
-    int no_detach, debug;
-    ap_directive_t *pdir;
-    int i;
-    int tmp_server_limit = DEFAULT_SERVER_LIMIT;
-    int tmp_thread_limit = DEFAULT_THREAD_LIMIT;
-    apr_status_t rv;
-
-    debug = ap_exists_config_define("DEBUG");
-
-    if (debug) {
-        no_detach = one_process = 1;
-    }
-    else {
-        one_process = ap_exists_config_define("ONE_PROCESS");
-        no_detach = ap_exists_config_define("NO_DETACH");
-    }
-
-    /* sigh, want this only the second time around */
-    if (restart_num++ == 1) {
-        is_graceful = 0;
-
-        if (!one_process) {
-            rv = apr_proc_detach(no_detach ? APR_PROC_DETACH_FOREGROUND
-                                           : APR_PROC_DETACH_DAEMONIZE);
-            if (rv != APR_SUCCESS) {
-                ap_log_error(APLOG_MARK, APLOG_CRIT, rv, NULL,
-                             "apr_proc_detach failed");
-                return HTTP_INTERNAL_SERVER_ERROR;
-            }                  
-        }
-
-        my_pid = getpid();
-    }
-
-    unixd_pre_config(ptemp);
-    ap_listen_pre_config();
-    num_daemons = DEFAULT_NUM_DAEMON;
-    threads_to_start = DEFAULT_START_THREAD;
-    min_spare_threads = DEFAULT_MIN_SPARE_THREAD;
-    max_spare_threads = DEFAULT_MAX_SPARE_THREAD;
-    max_threads = thread_limit;
-    ap_pid_fname = DEFAULT_PIDLOG;
-    ap_lock_fname = DEFAULT_LOCKFILE;
-    max_requests_per_child = DEFAULT_MAX_REQUESTS_PER_CHILD;
-    curr_child_num = 0;
-
-    apr_cpystrn(ap_coredump_dir, ap_server_root, sizeof(ap_coredump_dir));
-
-    /* we need to know ServerLimit and ThreadLimit before we start processing
-     * the tree because we need to already have allocated child_info_table
-     */
-    for (pdir = ap_conftree; pdir != NULL; pdir = pdir->next) {
-        if (!strcasecmp(pdir->directive, "ServerLimit")) {
-            if (atoi(pdir->args) > tmp_server_limit) {
-                tmp_server_limit = atoi(pdir->args);
-                if (tmp_server_limit > MAX_SERVER_LIMIT) {
-                    tmp_server_limit = MAX_SERVER_LIMIT;
-                }
-            }
-        }
-        else if (!strcasecmp(pdir->directive, "ThreadLimit")) {
-            if (atoi(pdir->args) > tmp_thread_limit) {
-                tmp_thread_limit = atoi(pdir->args);
-                if (tmp_thread_limit > MAX_THREAD_LIMIT) {
-                    tmp_thread_limit = MAX_THREAD_LIMIT;
-                }
-            }
-        }
-    }
-
-    child_info_table = (child_info_t *)apr_pcalloc(p, tmp_server_limit * sizeof(child_info_t));
-    for (i = 0; i < tmp_server_limit; i++) {
-        child_info_table[i].uid = -1;
-        child_info_table[i].gid = -1;
-        child_info_table[i].sd = -1;
-    }
-
-    return OK;
-}
-
-static int pass_request(request_rec *r)
-{
-    apr_socket_t *thesock = ap_get_module_config(r->connection->conn_config, &core_module);
-    struct msghdr msg;
-    struct cmsghdr *cmsg;
-    int sfd;
-    struct iovec iov;
-    apr_bucket_brigade *bb = apr_brigade_create(r->pool);
-    perchild_server_conf *sconf = (perchild_server_conf *)
-                            ap_get_module_config(r->server->module_config, 
-                                                 &mpm_perchild_module);
-    char *foo;
-    apr_size_t len;
-
-    apr_pool_userdata_get((void **)&foo, "PERCHILD_BUFFER",
-                          r->connection->pool);
-    len = strlen(foo);
-
-    apr_pool_userdata_set(NULL, "PERCHILD_BUFFER", apr_pool_cleanup_null, 
-                          r->connection->pool);
-
-    apr_os_sock_get(&sfd, thesock);
-
-    iov.iov_base = NULL;
-    iov.iov_len = 0;
-
-    msg.msg_name = NULL;
-    msg.msg_namelen = 0;
-    msg.msg_iov = &iov;
-    msg.msg_iovlen = 1;
-
-    cmsg = apr_palloc(r->pool, sizeof(*cmsg) + sizeof(sfd));
-    cmsg->cmsg_len = sizeof(*cmsg) + sizeof(int);
-    cmsg->cmsg_level = SOL_SOCKET;
-    cmsg->cmsg_type = SCM_RIGHTS;
-
-    memcpy(CMSG_DATA(cmsg), &sfd, sizeof(sfd));
-
-    msg.msg_control = (caddr_t)cmsg;
-    msg.msg_controllen = cmsg->cmsg_len;
-    msg.msg_flags=0;
-
-    if (sendmsg(sconf->sd2, &msg, 0) == -1) {
-        apr_pool_destroy(r->pool);
-        return -1;
-    }
-
-    write(sconf->sd2, foo, len);
-
-    /* ### this "read one line" doesn't seem right... shouldn't we be
-       ### reading large chunks of data or something?
-    */
-    while (ap_get_brigade(r->input_filters, bb, AP_MODE_GETLINE, 
-                          APR_NONBLOCK_READ, 0) == APR_SUCCESS) {
-        apr_bucket *e;
-        APR_BRIGADE_FOREACH(e, bb) {
-            const char *str;
-
-            apr_bucket_read(e, &str, &len, APR_NONBLOCK_READ);
-            write(sconf->sd2, str, len);
-        }
-    }
-
-    apr_pool_destroy(r->pool);
-    return 1;
-}
-
-static char *make_perchild_socket(const char *fullsockname, int sd[2])
-{
-    socketpair(PF_UNIX, SOCK_STREAM, 0, sd);
-    return NULL;
-}
-
-static int perchild_post_config(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *s)
-{
-    int i;
-    server_rec *sr;
-    perchild_server_conf *sconf;
-    int def_sd[2];
-
-    def_sd[0] = -1;
-    def_sd[1] = -1;
-
-    for (sr = s; sr; sr = sr->next) {
-        sconf = (perchild_server_conf *)ap_get_module_config(sr->module_config,
-                                                      &mpm_perchild_module);
-
-        if (sconf->sd == -1) {
-            sconf->fullsockname = apr_pstrcat(sr->process->pool, 
-                                             sconf->sockname, ".DEFAULT", NULL);
-            if (def_sd[0] == -1) {
-                if (!make_perchild_socket(sconf->fullsockname, def_sd)) {
-                    /* log error */
-                }
-            }
-            sconf->sd = def_sd[0];
-            sconf->sd2 = def_sd[1];
-        }
-    }
-
-    for (i = 0; i < num_daemons; i++) {
-        if (child_info_table[i].uid == -1) {
-            child_info_table[i].sd = def_sd[0];
-        }
-    }
-
-    thread_socket_table = (int *)apr_pcalloc(p, thread_limit * sizeof(int));
-    for (i = 0; i < thread_limit; i++) {
-        thread_socket_table[i] = AP_PERCHILD_THISCHILD;
-    }
-    ap_child_table = (ap_ctable *)apr_pcalloc(p, server_limit * sizeof(ap_ctable));
-
-    return OK;
-}
-
-static int perchild_post_read(request_rec *r)
-{
-    ap_filter_t *f = r->connection->input_filters;
-    int thread_num = r->connection->id % thread_limit;
-    perchild_server_conf *sconf = (perchild_server_conf *)
-                            ap_get_module_config(r->server->module_config, 
-                                                 &mpm_perchild_module);
-
-    while (f) {
-        if (!strcasecmp("PERCHILD_BUFFER", f->frec->name)) {
-            ap_remove_output_filter(f);
-            break;
-        }
-        f = f->next;
-    }
-
-    if (thread_socket_table[thread_num] != AP_PERCHILD_THISCHILD) {
-        apr_socket_t *csd = NULL;
-
-        apr_os_sock_put(&csd, &thread_socket_table[thread_num], 
-                        r->connection->pool);
-        ap_sock_disable_nagle(csd);
-        ap_set_module_config(r->connection->conn_config, &core_module, csd);
-        return OK;
-    }
-    else {
-        /* sconf is the server config for this vhost, so if our socket
-         * is not the same that was set in the config, then the request
-         * needs to be passed to another child. */
-        if (sconf->sd != child_info_table[child_num].sd) {
-            if (pass_request(r) == -1) {
-                ap_log_error(APLOG_MARK, APLOG_ERR | APLOG_NOERRNO, 0,
-                             ap_server_conf, "Could not pass request to proper "
-                             "child, request will not be honored.");
-            }
-            longjmp(jmpbuffer, 1); 
-        }
-        return OK;
-    }
-    return OK;
-}
-
-static apr_status_t perchild_buffer(ap_filter_t *f, apr_bucket_brigade *b,
-                                    ap_input_mode_t mode, 
-                                    apr_read_type_e block,
-                                    apr_off_t readbytes)
-{
-    apr_bucket *e;
-    apr_status_t rv;
-    char *buffer = NULL;
-    const char *str;
-    apr_size_t len;
-
-    if ((rv = ap_get_brigade(f->next, b, mode, block, 
-                             readbytes)) != APR_SUCCESS) {
-        return rv;
-    }
-
-    apr_pool_userdata_get((void **)&buffer, "PERCHILD_BUFFER", f->c->pool);
-
-    APR_BRIGADE_FOREACH(e, b) {
-        if (e->length != 0) {
-            apr_bucket_read(e, &str, &len, APR_NONBLOCK_READ);
-       
-            if (buffer == NULL) {
-                buffer = apr_pstrndup(f->c->pool, str, len);
-            }
-            else {
-               buffer = apr_pstrcat(f->c->pool, buffer, 
-                                    apr_pstrndup(f->c->pool, str, len), NULL);
-            } 
-        }
-    }
-    apr_pool_userdata_set(buffer, "PERCHILD_BUFFER", apr_pool_cleanup_null,
-                          f->c->pool);
-    
-    return APR_SUCCESS;
-}
-
-static int perchild_pre_connection(conn_rec *c, void *csd)
-{
-    ap_add_input_filter("PERCHILD_BUFFER", NULL, NULL, c);
-    return OK;
-}
-
-static void perchild_hooks(apr_pool_t *p)
-{
-    /* The perchild open_logs phase must run before the core's, or stderr
-     * will be redirected to a file, and the messages won't print to the
-     * console.
-     */
-    static const char *const aszSucc[] = {"core.c", NULL};
-    one_process = 0;
-
-    ap_hook_open_logs(perchild_open_logs, NULL, aszSucc, APR_HOOK_MIDDLE);
-    ap_hook_pre_config(perchild_pre_config, NULL, NULL, APR_HOOK_MIDDLE); 
-    ap_hook_post_config(perchild_post_config, NULL, NULL, APR_HOOK_MIDDLE); 
-    ap_hook_pre_connection(perchild_pre_connection,NULL,NULL, APR_HOOK_MIDDLE);
-
-    /* This must be run absolutely first.  If this request isn't for this
-     * server then we need to forward it to the proper child.  No sense
-     * tying up this server running more post_read request hooks if it is
-     * just going to be forwarded along.
-     */
-    ap_hook_post_read_request(perchild_post_read, NULL, NULL,
-                              APR_HOOK_REALLY_FIRST);
-    ap_register_input_filter("PERCHILD_BUFFER", perchild_buffer,
-                             AP_FTYPE_RESOURCE);
-}
-
-static const char *set_num_daemons(cmd_parms *cmd, void *dummy,
-                                   const char *arg) 
-{
-    const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
-    if (err != NULL) {
-        return err;
-    }
-
-    num_daemons = atoi(arg);
-    if (num_daemons > server_limit) {
-       ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
-                    "WARNING: NumServers of %d exceeds ServerLimit value "
-                    "of %d servers,", num_daemons, server_limit);
-       ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
-                    " lowering NumServers to %d.  To increase, please "
-                    "see the", server_limit);
-       ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
-                    " ServerLimit directive.");
-       num_daemons = server_limit;
-    } 
-    else if (num_daemons < 1) {
-        ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
-                     "WARNING: Require NumServers > 0, setting to 1");
-        num_daemons = 1;
-    }
-    return NULL;
-}
-
-static const char *set_threads_to_start(cmd_parms *cmd, void *dummy,
-                                        const char *arg) 
-{
-    const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
-    if (err != NULL) {
-        return err;
-    }
-
-    threads_to_start = atoi(arg);
-    if (threads_to_start > thread_limit) {
-        ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
-                     "WARNING: StartThreads of %d exceeds ThreadLimit value"
-                     " of %d threads,", threads_to_start,
-                     thread_limit);
-        ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
-                     " lowering StartThreads to %d. To increase, please"
-                     " see the", thread_limit);
-        ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
-                     " ThreadLimit directive.");
-    }
-    else if (threads_to_start < 1) {
-        ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
-                     "WARNING: Require StartThreads > 0, setting to 1");
-        threads_to_start = 1;
-    }
-    return NULL;
-}
-
-static const char *set_min_spare_threads(cmd_parms *cmd, void *dummy,
-                                         const char *arg)
-{
-    const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
-    if (err != NULL) {
-        return err;
-    }
-
-    min_spare_threads = atoi(arg);
-    if (min_spare_threads <= 0) {
-       ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
-                    "WARNING: detected MinSpareThreads set to non-positive.");
-       ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
-                    "Resetting to 1 to avoid almost certain Apache failure.");
-       ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
-                    "Please read the documentation.");
-       min_spare_threads = 1;
-    }
-       
-    return NULL;
-}
-
-static const char *set_max_spare_threads(cmd_parms *cmd, void *dummy,
-                                         const char *arg)
-{
-    const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
-    if (err != NULL) {
-        return err;
-    }
-
-    max_spare_threads = atoi(arg);
-    if (max_spare_threads >= thread_limit) {
-       ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
-                    "WARNING: detected MinSpareThreads set higher than");
-       ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
-                    "ThreadLimit. Resetting to %d", thread_limit);
-       max_spare_threads = thread_limit;
-    }
-    return NULL;
-}
-
-static const char *set_max_threads(cmd_parms *cmd, void *dummy, const char *arg)
-{
-    const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
-    if (err != NULL) {
-        return err;
-    }
-
-    max_threads = atoi(arg);
-    if (max_threads > thread_limit) {
-       ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
-                    "WARNING: detected MaxThreadsPerChild set higher than");
-       ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
-                    "ThreadLimit. Resetting to %d", thread_limit);
-       max_threads = thread_limit;
-    }
-    return NULL;
-}
-
-static const char *set_child_per_uid(cmd_parms *cmd, void *dummy, const char *u,
-                                     const char *g, const char *num)
-{
-    int i;
-    int max_this_time = atoi(num) + curr_child_num;
-
-    for (i = curr_child_num; i < max_this_time; i++, curr_child_num++) {
-        child_info_t *ug = &child_info_table[i - 1];
-
-        if (i > num_daemons) {
-            return "Trying to use more child ID's than NumServers.  Increase "
-                   "NumServers in your config file.";
-        }
-    
-        ug->uid = atoi(u);
-        ug->gid = atoi(g); 
-    }
-    return NULL;
-}
-
-static const char *assign_childuid(cmd_parms *cmd, void *dummy, const char *uid,
-                                   const char *gid)
-{
-    int i;
-    int u = atoi(uid);
-    int g = atoi(gid);
-    const char *errstr;
-    int socks[2];
-    perchild_server_conf *sconf = (perchild_server_conf *)
-                            ap_get_module_config(cmd->server->module_config, 
-                                                 &mpm_perchild_module);
-
-    sconf->fullsockname = apr_pstrcat(cmd->pool, sconf->sockname, ".", uid,
-                                      ":", gid, NULL);
-
-    if ((errstr = make_perchild_socket(sconf->fullsockname, socks))) {
-        return errstr;
-    }
-
-    sconf->sd = socks[0]; 
-    sconf->sd2 = socks[1];
-
-    for (i = 0; i < num_daemons; i++) {
-        if (u == child_info_table[i].uid && g == child_info_table[i].gid) {
-            child_info_table[i].sd = sconf->sd;
-        }
-    }
-
-    return NULL;
-}
-
-static const char *set_server_limit (cmd_parms *cmd, void *dummy, const char *arg) 
-{
-    int tmp_server_limit;
-    
-    const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
-    if (err != NULL) {
-        return err;
-    }
-
-    tmp_server_limit = atoi(arg);
-    /* you cannot change ServerLimit across a restart; ignore
-     * any such attempts
-     */
-    if (first_server_limit &&
-        tmp_server_limit != server_limit) {
-        /* how do we log a message?  the error log is a bit bucket at this
-         * point; we'll just have to set a flag so that ap_mpm_run()
-         * logs a warning later
-         */
-        changed_limit_at_restart = 1;
-        return NULL;
-    }
-    server_limit = tmp_server_limit;
-    
-    if (server_limit > MAX_SERVER_LIMIT) {
-       ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
-                    "WARNING: ServerLimit of %d exceeds compile time limit "
-                    "of %d servers,", server_limit, MAX_SERVER_LIMIT);
-       ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
-                    " lowering ServerLimit to %d.", MAX_SERVER_LIMIT);
-       server_limit = MAX_SERVER_LIMIT;
-    } 
-    else if (server_limit < 1) {
-	ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
-                     "WARNING: Require ServerLimit > 0, setting to 1");
-	server_limit = 1;
-    }
-    return NULL;
-}
-
-static const char *set_thread_limit (cmd_parms *cmd, void *dummy, const char *arg) 
-{
-    int tmp_thread_limit;
-    
-    const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
-    if (err != NULL) {
-        return err;
-    }
-
-    tmp_thread_limit = atoi(arg);
-    /* you cannot change ThreadLimit across a restart; ignore
-     * any such attempts
-     */
-    if (first_thread_limit &&
-        tmp_thread_limit != thread_limit) {
-        /* how do we log a message?  the error log is a bit bucket at this
-         * point; we'll just have to set a flag so that ap_mpm_run()
-         * logs a warning later
-         */
-        changed_limit_at_restart = 1;
-        return NULL;
-    }
-    thread_limit = tmp_thread_limit;
-    
-    if (thread_limit > MAX_THREAD_LIMIT) {
-       ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
-                    "WARNING: ThreadLimit of %d exceeds compile time limit "
-                    "of %d servers,", thread_limit, MAX_THREAD_LIMIT);
-       ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
-                    " lowering ThreadLimit to %d.", MAX_THREAD_LIMIT);
-       thread_limit = MAX_THREAD_LIMIT;
-    } 
-    else if (thread_limit < 1) {
-	ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
-                     "WARNING: Require ThreadLimit > 0, setting to 1");
-	thread_limit = 1;
-    }
-    return NULL;
-}
-
-static const command_rec perchild_cmds[] = {
-UNIX_DAEMON_COMMANDS,
-LISTEN_COMMANDS,
-AP_INIT_TAKE1("NumServers", set_num_daemons, NULL, RSRC_CONF,
-              "Number of children alive at the same time"),
-AP_INIT_TAKE1("StartThreads", set_threads_to_start, NULL, RSRC_CONF,
-              "Number of threads each child creates"),
-AP_INIT_TAKE1("MinSpareThreads", set_min_spare_threads, NULL, RSRC_CONF,
-              "Minimum number of idle threads per child, to handle "
-              "request spikes"),
-AP_INIT_TAKE1("MaxSpareThreads", set_max_spare_threads, NULL, RSRC_CONF,
-              "Maximum number of idle threads per child"),
-AP_INIT_TAKE1("MaxThreadsPerChild", set_max_threads, NULL, RSRC_CONF,
-              "Maximum number of threads per child"),
-AP_INIT_TAKE3("ChildperUserID", set_child_per_uid, NULL, RSRC_CONF,
-              "Specify a User and Group for a specific child process."),
-AP_INIT_TAKE2("AssignUserID", assign_childuid, NULL, RSRC_CONF,
-              "Tie a virtual host to a specific child process."),
-AP_INIT_TAKE1("ServerLimit", set_server_limit, NULL, RSRC_CONF,
-              "Maximum value of NumServers for this run of Apache"),
-AP_INIT_TAKE1("ThreadLimit", set_thread_limit, NULL, RSRC_CONF,
-              "Maximum worker threads in a server for this run of Apache"),
-{ NULL }
-};
-
-static void *perchild_create_config(apr_pool_t *p, server_rec *s)
-{
-    perchild_server_conf *c = (perchild_server_conf *)
-                                  apr_pcalloc(p, sizeof(perchild_server_conf));
-
-    c->sd = -1;
-    return c;
-}
-
-module AP_MODULE_DECLARE_DATA mpm_perchild_module = {
-    MPM20_MODULE_STUFF,
-    NULL,                       /* hook to run before apache parses args */
-    NULL,                       /* create per-directory config structure */
-    NULL,                       /* merge per-directory config structures */
-    perchild_create_config,     /* create per-server config structure */
-    NULL,                       /* merge per-server config structures */
-    perchild_cmds,              /* command apr_table_t */
-    perchild_hooks              /* register_hooks */
-};
-
diff --git a/server/mpm/monitoring-services.txt b/server/mpm/monitoring-services.txt
deleted file mode 100644
index 2466589..0000000
--- a/server/mpm/monitoring-services.txt
+++ /dev/null
@@ -1,94 +0,0 @@
-From:    William A. Rowe, Jr. 
-Date:    June 7th '00
-Subject: service monitoring in Apache 1.3.13
-
-The concept for a taskbar monitor has been thrown around
-for a very long while.  1.3.13 introduced Win9x services,
-and that added fuel to the mix.  Here are some sideband
-observations I've made for other developers...
-
-About Apache as a console, don't start Apache hidden without
-any command line arguments if you want to launch it yourself
-in a hidden window (it will do the classic test for 
-AllocConsole/FreeConsole)... drop in some arguments such as
-the -f or -r option and it will fly without thinking it is a 
-service under 9x and NT.
-
-Rule two, don't use --ntservice as an argument, ever.  Only
-the Windows NT Service Control Manager is allowed to pass that
-flag, and only that flag, when it runs Apache.exe.  Do use 
---ntservice as the sole argument to the executable name if 
-you are installing an Apache NT service yourself.
-
-Rule three, use -k start and -n name when maintaining the
-HKLM/Software/Microsoft/Windows/CurrentVersion/RunServices
-list, since there is no other way for Apache to know what 
-the service is named :)  And look at any 9x installed service's 
-RunServices entry in the registry for the start service semantic.
-
-Rule four, use the WinNT Service Control Manager exclusively
-for starting, stopping and restarting Apache as an NT service.
-The restart signal is the value 128, as documented in service.h 
-and service.c - this will continue to work in Apache 2.0.  If
-it fails, you are handling an older version (pre 1.3.13) of
-Apache, and need to stop and then start the service instead.
-
-Rule five, use the legacy pid-named events to signal Win9x 
-service Apache to restart and stop the service.  But don't
-bother looking for httpd.pid files... you can get the pid
-right from the hidden service control window.  Apache 1.3.13
-and 2.x create a hidden window named for the name of the 
-service (without the spaces), with a window class of
-"ApacheWin95ServiceMonitor", so can use FindWindow to track 
-down running Win9x services.  See the service.c code for how 
-I accomplished this pretty simply in the -k stop/-k restart
-handler.
-
-Taskbar Monitor App
--------------------
-
-Basic requirements: a C code application using strictly the
-Win32 API, and not MFC or other Win32 frameworks.  Could use
-the service.c module to share some basic functions.  That
-module could be extended in Apache 2.0 to make this all easier.
-
-I think we are looking for an external app that simply acts 
-as a monitor or allows a stopped service to be started.  If 
-the user logs off, we loose the monitor app, but installed as 
-a shortcut in the Start group or in the registry key
-HKLM/Software/Microsoft/Windows/CurrentVersion/Run
-we will be just fine.  I'd like to see the monitor run only
-one instance to monitor all running services, for memory
-and resource conservation.
-
-I was thinking that the hover/iconbar title would tell them 
-"Test service is running", or "Test service is stopped".
-If they left click, they could stop or restart, or simply
-start if it is stopped.  There could be a preference that
-each service doesn't get it's own individual task icon unless 
-it is running, if it is a manual start service (or missing 
-from the RunServices list, which is the equivilant under 9x).
-
-If a specific service is set to Auto start or is in the 
-RunServices Win9x registry key, we must show them the stopped 
-icon, of course.  We might also keep the icon for any running
-service that stops abruptly.  But there could be a 'single 
-icon' option for the taskbar icon monitor that says show only
-a single status icon, for simplicity if the administrator runs
-many Apache services.
-
-But I was hoping that any right click would provide a menu
-of all Apache services with their status.  e.g.
-  Test service is stopped
-  Apache_2 service is running
-  MyWeb service is running
-and each would do the logical submenu, same as if that
-specific taskbar icon were left clicked, offering to start or
-offering to stop or restart the server, as appropriate.
-
-Finally, to identify all installed Apache services, just query 
-the registry key HKLM\SYSTEM\CurrentControlSet\Services for any 
-key that has the ImagePath value of "...\Apache.exe"... (quotes
-are significant here, if the leading quote is ommitted the 
-entire string ends with the text \Apache.exe - based on Apache's 
-own service installer in every released version.)
diff --git a/server/mpm/mpmt_os2/.cvsignore b/server/mpm/mpmt_os2/.cvsignore
deleted file mode 100644
index dc53ac8..0000000
--- a/server/mpm/mpmt_os2/.cvsignore
+++ /dev/null
@@ -1,5 +0,0 @@
-*.lo
-*.la
-Makefile
-.deps
-.libs
diff --git a/server/mpm/mpmt_os2/Makefile.in b/server/mpm/mpmt_os2/Makefile.in
deleted file mode 100644
index 38e598e..0000000
--- a/server/mpm/mpmt_os2/Makefile.in
+++ /dev/null
@@ -1,5 +0,0 @@
-
-LTLIBRARY_NAME    = libmpmt_os2.la
-LTLIBRARY_SOURCES = mpmt_os2.c mpmt_os2_child.c
-
-include $(top_srcdir)/build/ltlib.mk
diff --git a/server/mpm/mpmt_os2/config5.m4 b/server/mpm/mpmt_os2/config5.m4
deleted file mode 100644
index b27c296..0000000
--- a/server/mpm/mpmt_os2/config5.m4
+++ /dev/null
@@ -1,5 +0,0 @@
-if test "$MPM_NAME" = "mpmt_os2" ; then
-    AC_CACHE_SAVE
-    APACHE_FAST_OUTPUT(server/mpm/$MPM_NAME/Makefile)
-    APR_ADDTO(CFLAGS,-Zmt)
-fi
diff --git a/server/mpm/mpmt_os2/mpm.h b/server/mpm/mpmt_os2/mpm.h
deleted file mode 100644
index 322bfe7..0000000
--- a/server/mpm/mpmt_os2/mpm.h
+++ /dev/null
@@ -1,75 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-#ifndef APACHE_MPM_MPMT_OS2_H
-#define APACHE_MPM_MPMT_OS2_H
-
-#define MPMT_OS2_MPM
-
-#include "httpd.h"
-#include "mpm_default.h"
-#include "scoreboard.h"
-
-#define MPM_NAME "MPMT_OS2"
-
-extern server_rec *ap_server_conf;
-#define AP_MPM_WANT_SET_PIDFILE
-#define AP_MPM_WANT_SET_MAX_REQUESTS
-#define AP_MPM_DISABLE_NAGLE_ACCEPTED_SOCK
-
-#endif /* APACHE_MPM_MPMT_OS2_H */
diff --git a/server/mpm/mpmt_os2/mpm_default.h b/server/mpm/mpmt_os2/mpm_default.h
deleted file mode 100644
index 7ac40ab..0000000
--- a/server/mpm/mpmt_os2/mpm_default.h
+++ /dev/null
@@ -1,101 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-#ifndef APACHE_MPM_DEFAULT_H
-#define APACHE_MPM_DEFAULT_H
-
-/* Number of servers processes to spawn off by default
- */
-#ifndef DEFAULT_START_DAEMON
-#define DEFAULT_START_DAEMON 2
-#endif
-
-/* Maximum number of *free* server threads --- more than this, and
- * they will die off.
- */
-
-#ifndef DEFAULT_MAX_SPARE_THREAD
-#define DEFAULT_MAX_SPARE_THREAD 10
-#endif
-
-/* Minimum --- fewer than this, and more will be created */
-
-#ifndef DEFAULT_MIN_SPARE_THREAD
-#define DEFAULT_MIN_SPARE_THREAD 5
-#endif
-
-/* Where the main/parent process's pid is logged */
-#ifndef DEFAULT_PIDLOG
-#define DEFAULT_PIDLOG "logs/httpd.pid"
-#endif
-
-/*
- * Interval, in microseconds, between scoreboard maintenance.
- */
-#ifndef SCOREBOARD_MAINTENANCE_INTERVAL
-#define SCOREBOARD_MAINTENANCE_INTERVAL 1000000
-#endif
-
-/* Number of requests to try to handle in a single process.  If <= 0,
- * the children don't die off.
- */
-#ifndef DEFAULT_MAX_REQUESTS_PER_CHILD
-#define DEFAULT_MAX_REQUESTS_PER_CHILD 10000
-#endif
-
-#endif /* AP_MPM_DEFAULT_H */
diff --git a/server/mpm/mpmt_os2/mpmt_os2.c b/server/mpm/mpmt_os2/mpmt_os2.c
deleted file mode 100644
index 424d360..0000000
--- a/server/mpm/mpmt_os2/mpmt_os2.c
+++ /dev/null
@@ -1,608 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-/* Multi-process, multi-threaded MPM for OS/2
- *
- * Server consists of
- * - a main, parent process
- * - a small, static number of child processes
- *
- * The parent process's job is to manage the child processes. This involves
- * spawning children as required to ensure there are always ap_daemons_to_start
- * processes accepting connections.
- *
- * Each child process consists of a a pool of worker threads and a
- * main thread that accepts connections & passes them to the workers via
- * a work queue. The worker thread pool is dynamic, managed by a maintanence
- * thread so that the number of idle threads is kept between
- * min_spare_threads & max_spare_threads.
- *
- */
-
-/*
- Todo list
- - Enforce MaxClients somehow
-*/
-#define CORE_PRIVATE
-#define INCL_NOPMAPI
-#define INCL_DOS
-#define INCL_DOSERRORS
-
-#include "ap_config.h"
-#include "httpd.h"
-#include "mpm_default.h"
-#include "http_main.h"
-#include "http_log.h"
-#include "http_config.h"
-#include "http_core.h"		/* for get_remote_host */
-#include "http_connection.h"
-#include "mpm.h"
-#include "ap_mpm.h"
-#include "ap_listen.h"
-#include "apr_portable.h"
-#include "mpm_common.h"
-#include "apr_strings.h"
-#include <os2.h>
-#include <process.h>
-
-/* We don't need many processes, 
- * they're only for redundancy in the event of a crash 
- */
-#define HARD_SERVER_LIMIT 10
-
-/* Limit on the total number of threads per process
- */
-#ifndef HARD_THREAD_LIMIT
-#define HARD_THREAD_LIMIT 256
-#endif
-
-server_rec *ap_server_conf;
-static apr_pool_t *pconf = NULL;		/* Pool for config stuff */
-static const char *ap_pid_fname=NULL;
-
-/* Config globals */
-static int one_process = 0;
-static int ap_daemons_to_start = 0;
-static int ap_thread_limit = 0;
-static int ap_max_requests_per_child = 0;
-int ap_min_spare_threads = 0;
-int ap_max_spare_threads = 0;
-
-/* Keep track of a few interesting statistics */
-int ap_max_daemons_limit = -1;
-
-/* volatile just in case */
-static int volatile shutdown_pending;
-static int volatile restart_pending;
-static int volatile is_graceful = 0;
-ap_generation_t volatile ap_my_generation=0; /* Used by the scoreboard */
-static int is_parent_process=TRUE;
-HMTX ap_mpm_accept_mutex = 0;
-
-/* An array of these is stored in a shared memory area for passing
- * sockets from the parent to child processes
- */
-typedef struct {
-    struct sockaddr_in name;
-    apr_os_sock_t listen_fd;
-} listen_socket_t;
-
-typedef struct {
-    HMTX accept_mutex;
-    listen_socket_t listeners[1];
-} parent_info_t;
-
-static char master_main();
-static void spawn_child(int slot);
-void ap_mpm_child_main(apr_pool_t *pconf);
-static void set_signals();
-
-
-int ap_mpm_run(apr_pool_t *_pconf, apr_pool_t *plog, server_rec *s )
-{
-    char *listener_shm_name;
-    parent_info_t *parent_info;
-    ULONG rc;
-    pconf = _pconf;
-    ap_server_conf = s;
-    restart_pending = 0;
-
-    DosSetMaxFH(ap_thread_limit * 2);
-    listener_shm_name = apr_psprintf(pconf, "/sharemem/httpd/parent_info.%d", getppid());
-    rc = DosGetNamedSharedMem((PPVOID)&parent_info, listener_shm_name, PAG_READ);
-    is_parent_process = rc != 0;
-    ap_scoreboard_fname = apr_psprintf(pconf, "/sharemem/httpd/scoreboard.%d", is_parent_process ? getpid() : getppid());
-
-    if (rc == 0) {
-        /* Child process */
-        ap_listen_rec *lr;
-        int num_listeners = 0;
-
-        ap_mpm_accept_mutex = parent_info->accept_mutex;
-
-        /* Set up a default listener if necessary */
-        if (ap_listeners == NULL) {
-            ap_listen_rec *lr = apr_pcalloc(s->process->pool, sizeof(ap_listen_rec));
-            ap_listeners = lr;
-            apr_sockaddr_info_get(&lr->bind_addr, "0.0.0.0", APR_UNSPEC,
-                                  DEFAULT_HTTP_PORT, 0, s->process->pool);
-            apr_socket_create(&lr->sd, lr->bind_addr->family,
-                              SOCK_STREAM, s->process->pool);
-        }
-
-        for (lr = ap_listeners; lr; lr = lr->next) {
-            apr_os_sock_put(&lr->sd, &parent_info->listeners[num_listeners].listen_fd, pconf);
-            num_listeners++;
-        }
-
-        DosFreeMem(parent_info);
-
-        /* Do the work */
-        ap_mpm_child_main(pconf);
-
-        /* Outta here */
-        return 1;
-    }
-    else {
-        /* Parent process */
-        char restart;
-        is_parent_process = TRUE;
-
-        if (ap_setup_listeners(ap_server_conf) < 1) {
-            ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_ALERT, 0, s,
-                         "no listening sockets available, shutting down");
-            return 1;
-        }
-
-        ap_log_pid(pconf, ap_pid_fname);
-
-        restart = master_main();
-        ++ap_my_generation;
-        ap_scoreboard_image->global->running_generation = ap_my_generation;
-
-        if (!restart) {
-            const char *pidfile = ap_server_root_relative(pconf, ap_pid_fname);
-
-            if (pidfile != NULL && remove(pidfile) == 0) {
-                ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_INFO, APR_SUCCESS,
-                             ap_server_conf, "removed PID file %s (pid=%d)",
-                             pidfile, getpid());
-            }
-
-            ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_NOTICE, 0, ap_server_conf,
-                         "caught SIGTERM, shutting down");
-            return 1;
-        }
-    }  /* Parent process */
-
-    return 0; /* Restart */
-}
-
-
-
-/* Main processing of the parent process
- * returns TRUE if restarting
- */
-static char master_main()
-{
-    server_rec *s = ap_server_conf;
-    ap_listen_rec *lr;
-    parent_info_t *parent_info;
-    char *listener_shm_name;
-    int listener_num, num_listeners, slot;
-    ULONG rc;
-
-    printf("%s \n", ap_get_server_version());
-    set_signals();
-
-    if (ap_setup_listeners(ap_server_conf) < 1) {
-        ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_ALERT, 0, s,
-                     "no listening sockets available, shutting down");
-        return FALSE;
-    }
-
-    /* Allocate a shared memory block for the array of listeners */
-    for (num_listeners = 0, lr = ap_listeners; lr; lr = lr->next) {
-        num_listeners++;
-    }
-
-    listener_shm_name = apr_psprintf(pconf, "/sharemem/httpd/parent_info.%d", getpid());
-    rc = DosAllocSharedMem((PPVOID)&parent_info, listener_shm_name,
-                           sizeof(parent_info_t) + num_listeners * sizeof(listen_socket_t),
-                           PAG_READ|PAG_WRITE|PAG_COMMIT);
-
-    if (rc) {
-        ap_log_error(APLOG_MARK, APLOG_ALERT, APR_FROM_OS_ERROR(rc), s,
-                     "failure allocating shared memory, shutting down");
-        return FALSE;
-    }
-
-    /* Store the listener sockets in the shared memory area for our children to see */
-    for (listener_num = 0, lr = ap_listeners; lr; lr = lr->next, listener_num++) {
-        apr_os_sock_get(&parent_info->listeners[listener_num].listen_fd, lr->sd);
-    }
-
-    /* Create mutex to prevent multiple child processes from detecting
-     * a connection with apr_poll()
-     */
-
-    rc = DosCreateMutexSem(NULL, &ap_mpm_accept_mutex, DC_SEM_SHARED, FALSE);
-
-    if (rc) {
-        ap_log_error(APLOG_MARK, APLOG_ALERT, APR_FROM_OS_ERROR(rc), s,
-                     "failure creating accept mutex, shutting down");
-        return FALSE;
-    }
-
-    parent_info->accept_mutex = ap_mpm_accept_mutex;
-
-    /* Allocate shared memory for scoreboard */
-    if (ap_scoreboard_image == NULL) {
-        void *sb_mem;
-        rc = DosAllocSharedMem(&sb_mem, ap_scoreboard_fname,
-                               ap_calc_scoreboard_size(),
-                               PAG_COMMIT|PAG_READ|PAG_WRITE);
-
-        if (rc) {
-            ap_log_error(APLOG_MARK, APLOG_ERR, APR_FROM_OS_ERROR(rc), ap_server_conf,
-                         "unable to allocate shared memory for scoreboard , exiting");
-            return FALSE;
-        }
-
-        ap_init_scoreboard(sb_mem);
-    }
-
-    ap_scoreboard_image->global->restart_time = apr_time_now();
-    ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_NOTICE, 0, ap_server_conf,
-		"%s configured -- resuming normal operations",
-		ap_get_server_version());
-    ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_INFO, 0, ap_server_conf,
-		"Server built: %s", ap_get_server_built());
-
-    if (one_process) {
-        ap_scoreboard_image->parent[0].pid = getpid();
-        ap_mpm_child_main(pconf);
-        return FALSE;
-    }
-
-    while (!restart_pending && !shutdown_pending) {
-        RESULTCODES proc_rc;
-        PID child_pid;
-        int active_children = 0;
-
-        /* Count number of active children */
-        for (slot=0; slot < HARD_SERVER_LIMIT; slot++) {
-            active_children += ap_scoreboard_image->parent[slot].pid != 0 &&
-                !ap_scoreboard_image->parent[slot].quiescing;
-        }
-
-        /* Spawn children if needed */
-        for (slot=0; slot < HARD_SERVER_LIMIT && active_children < ap_daemons_to_start; slot++) {
-            if (ap_scoreboard_image->parent[slot].pid == 0) {
-                spawn_child(slot);
-                active_children++;
-            }
-        }
-
-        rc = DosWaitChild(DCWA_PROCESSTREE, DCWW_NOWAIT, &proc_rc, &child_pid, 0);
-
-        if (rc == 0) {
-            /* A child has terminated, remove its scoreboard entry & terminate if necessary */
-            for (slot=0; ap_scoreboard_image->parent[slot].pid != child_pid && slot < HARD_SERVER_LIMIT; slot++);
-
-            if (slot < HARD_SERVER_LIMIT) {
-                ap_scoreboard_image->parent[slot].pid = 0;
-                ap_scoreboard_image->parent[slot].quiescing = 0;
-
-                if (proc_rc.codeTerminate == TC_EXIT) {
-                    /* Child terminated normally, check its exit code and
-                     * terminate server if child indicates a fatal error
-                     */
-                    if (proc_rc.codeResult == APEXIT_CHILDFATAL)
-                        break;
-                }
-            }
-        } else if (rc == ERROR_CHILD_NOT_COMPLETE) {
-            /* No child exited, lets sleep for a while.... */
-            apr_sleep(SCOREBOARD_MAINTENANCE_INTERVAL);
-        }
-    }
-
-    /* Signal children to shut down, either gracefully or immediately */
-    for (slot=0; slot<HARD_SERVER_LIMIT; slot++) {
-      kill(ap_scoreboard_image->parent[slot].pid, is_graceful ? SIGHUP : SIGTERM);
-    }
-
-    DosFreeMem(parent_info);
-    return restart_pending;
-}
-
-
-
-static void spawn_child(int slot)
-{
-    PPIB ppib;
-    PTIB ptib;
-    char fail_module[100];
-    char progname[CCHMAXPATH];
-    RESULTCODES proc_rc;
-    ULONG rc;
-
-    ap_scoreboard_image->parent[slot].generation = ap_my_generation;
-    DosGetInfoBlocks(&ptib, &ppib);
-    DosQueryModuleName(ppib->pib_hmte, sizeof(progname), progname);
-    rc = DosExecPgm(fail_module, sizeof(fail_module), EXEC_ASYNCRESULT,
-                    ppib->pib_pchcmd, NULL, &proc_rc, progname);
-
-    if (rc) {
-        ap_log_error(APLOG_MARK, APLOG_ERR, APR_FROM_OS_ERROR(rc), ap_server_conf,
-                     "error spawning child, slot %d", slot);
-    }
-
-    if (ap_max_daemons_limit < slot) {
-        ap_max_daemons_limit = slot;
-    }
-
-    ap_scoreboard_image->parent[slot].pid = proc_rc.codeTerminate;
-}
-
-
-
-/* Signal handling routines */
-
-static void sig_term(int sig)
-{
-    shutdown_pending = 1;
-}
-
-
-
-static void sig_restart(int sig)
-{
-    if (sig == SIGUSR1) {
-        is_graceful = 1;
-    }
-
-    restart_pending = 1;
-}
-
-
-
-static void set_signals()
-{
-    struct sigaction sa;
-
-    sigemptyset(&sa.sa_mask);
-    sa.sa_flags = 0;
-    sa.sa_handler = sig_term;
-
-    if (sigaction(SIGTERM, &sa, NULL) < 0)
-	ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf, "sigaction(SIGTERM)");
-
-    if (sigaction(SIGINT, &sa, NULL) < 0)
-        ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf, "sigaction(SIGINT)");
-
-    sa.sa_handler = sig_restart;
-
-    if (sigaction(SIGHUP, &sa, NULL) < 0)
-        ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf, "sigaction(SIGHUP)");
-    if (sigaction(SIGUSR1, &sa, NULL) < 0)
-        ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf, "sigaction(SIGUSR1)");
-}
-
-
-
-/* Enquiry functions used get MPM status info */
-
-AP_DECLARE(apr_status_t) ap_mpm_query(int query_code, int *result)
-{
-    switch (query_code) {
-        case AP_MPMQ_MAX_DAEMON_USED:
-            *result = ap_max_daemons_limit;
-            return APR_SUCCESS;
-        case AP_MPMQ_IS_THREADED:
-            *result = AP_MPMQ_DYNAMIC;
-            return APR_SUCCESS;
-        case AP_MPMQ_IS_FORKED:
-            *result = AP_MPMQ_NOT_SUPPORTED;
-            return APR_SUCCESS;
-        case AP_MPMQ_HARD_LIMIT_DAEMONS:
-            *result = HARD_SERVER_LIMIT;
-            return APR_SUCCESS;
-        case AP_MPMQ_HARD_LIMIT_THREADS:
-            *result = HARD_THREAD_LIMIT;
-            return APR_SUCCESS;
-        case AP_MPMQ_MIN_SPARE_DAEMONS:
-            *result = 0;
-            return APR_SUCCESS;
-        case AP_MPMQ_MAX_SPARE_DAEMONS:
-            *result = 0;
-            return APR_SUCCESS;
-        case AP_MPMQ_MAX_REQUESTS_DAEMON:
-            *result = ap_max_requests_per_child;
-            return APR_SUCCESS; 
-    }
-    return APR_ENOTIMPL;
-} 
-
-
-
-int ap_graceful_stop_signalled(void)
-{
-    return is_graceful;
-}
-
-
-
-/* Configuration handling stuff */
-
-static int mpmt_os2_pre_config(apr_pool_t *pconf, apr_pool_t *plog, apr_pool_t *ptemp)
-{
-    one_process = ap_exists_config_define("ONE_PROCESS") || 
-                  ap_exists_config_define("DEBUG");
-    is_graceful = 0;
-    ap_listen_pre_config();
-    ap_daemons_to_start = DEFAULT_START_DAEMON;
-    ap_thread_limit = HARD_THREAD_LIMIT;
-    ap_pid_fname = DEFAULT_PIDLOG;
-    ap_max_requests_per_child = DEFAULT_MAX_REQUESTS_PER_CHILD;
-    ap_extended_status = 0;
-    ap_min_spare_threads = DEFAULT_MIN_SPARE_THREAD;
-    ap_max_spare_threads = DEFAULT_MAX_SPARE_THREAD;
-
-    return OK;
-}
-
-
-
-static void mpmt_os2_hooks(apr_pool_t *p)
-{
-    ap_hook_pre_config(mpmt_os2_pre_config, NULL, NULL, APR_HOOK_MIDDLE);
-}
-
-
-
-static const char *set_daemons_to_start(cmd_parms *cmd, void *dummy, const char *arg)
-{
-    const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
-
-    if (err != NULL) {
-        return err;
-    }
-
-    ap_daemons_to_start = atoi(arg);
-    return NULL;
-}
-
-
-
-static const char *set_min_spare_threads(cmd_parms *cmd, void *dummy,
-					 const char *arg)
-{
-    const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
-
-    if (err != NULL) {
-        return err;
-    }
-
-    ap_min_spare_threads = atoi(arg);
-
-    if (ap_min_spare_threads <= 0) {
-       ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
-                    "WARNING: detected MinSpareThreads set to non-positive.");
-       ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
-                    "Resetting to 1 to avoid almost certain Apache failure.");
-       ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
-                    "Please read the documentation.");
-       ap_min_spare_threads = 1;
-    }
-       
-    return NULL;
-}
-
-
-
-static const char *set_max_spare_threads(cmd_parms *cmd, void *dummy,
-					 const char *arg)
-{
-    const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
-
-    if (err != NULL) {
-        return err;
-    }
-
-    ap_max_spare_threads = atoi(arg);
-    return NULL;
-}
-
-
-
-static const char *ignore_cmd(cmd_parms *cmd, void *dummy, const char *arg)
-{
-    return NULL;
-}
-
-
-
-static const command_rec mpmt_os2_cmds[] = {
-LISTEN_COMMANDS,
-AP_INIT_TAKE1( "StartServers", set_daemons_to_start, NULL, RSRC_CONF, 
-  "Number of child processes launched at server startup" ),
-AP_INIT_TAKE1("MinSpareThreads", set_min_spare_threads, NULL, RSRC_CONF,
-  "Minimum number of idle children, to handle request spikes"),
-AP_INIT_TAKE1("MaxSpareThreads", set_max_spare_threads, NULL, RSRC_CONF,
-  "Maximum number of idle children"),
-AP_INIT_TAKE1("User", ignore_cmd, NULL, RSRC_CONF,
-  "Not applicable on this platform"),
-AP_INIT_TAKE1("Group", ignore_cmd, NULL, RSRC_CONF,
-  "Not applicable on this platform"),
-AP_INIT_TAKE1("ScoreBoardFile", ignore_cmd, NULL, RSRC_CONF, \
-  "Not applicable on this platform"),
-{ NULL }
-};
-
-module AP_MODULE_DECLARE_DATA mpm_mpmt_os2_module = {
-    MPM20_MODULE_STUFF,
-    NULL,                       /* hook to run before apache parses args */
-    NULL,			/* create per-directory config structure */
-    NULL,			/* merge per-directory config structures */
-    NULL,			/* create per-server config structure */
-    NULL,			/* merge per-server config structures */
-    mpmt_os2_cmds,		/* command apr_table_t */
-    mpmt_os2_hooks,		/* register_hooks */
-};
diff --git a/server/mpm/mpmt_os2/mpmt_os2_child.c b/server/mpm/mpmt_os2/mpmt_os2_child.c
deleted file mode 100644
index 35c8661..0000000
--- a/server/mpm/mpmt_os2/mpmt_os2_child.c
+++ /dev/null
@@ -1,526 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
- 
-#define CORE_PRIVATE
-#define INCL_NOPMAPI
-#define INCL_DOS
-#define INCL_DOSERRORS
-
-#include "ap_config.h"
-#include "httpd.h"
-#include "mpm_default.h"
-#include "http_main.h"
-#include "http_log.h"
-#include "http_config.h"
-#include "http_core.h"		/* for get_remote_host */
-#include "http_connection.h"
-#include "mpm.h"
-#include "ap_mpm.h"
-#include "ap_listen.h"
-#include "apr_portable.h"
-#include "mpm_common.h"
-#include "apr_strings.h"
-#include <os2.h>
-#include <process.h>
-
-/* XXXXXX move these to header file private to this MPM */
-
-/* We don't need many processes, 
- * they're only for redundancy in the event of a crash 
- */
-#define HARD_SERVER_LIMIT 10
-
-/* Limit on the total number of threads per process
- */
-#ifndef HARD_THREAD_LIMIT
-#define HARD_THREAD_LIMIT 256
-#endif
-
-#define ID_FROM_CHILD_THREAD(c, t)    ((c * HARD_THREAD_LIMIT) + t)
-
-typedef struct {
-    apr_pool_t *pconn;
-    apr_socket_t *conn_sd;
-} worker_args_t;
-
-#define WORKTYPE_CONN 0
-#define WORKTYPE_EXIT 1
-
-static apr_pool_t *pchild = NULL;
-static int child_slot;
-static int shutdown_pending = 0;
-extern int ap_my_generation;
-static int volatile is_graceful = 1;
-HEV shutdown_event; /* signaled when this child is shutting down */
-
-/* grab some MPM globals */
-extern int ap_min_spare_threads;
-extern int ap_max_spare_threads;
-extern HMTX ap_mpm_accept_mutex;
-
-static void worker_main(void *vpArg);
-static void clean_child_exit(int code);
-static void set_signals();
-static void server_maintenance(void *vpArg);
-
-
-static void clean_child_exit(int code)
-{
-    if (pchild) {
-	apr_pool_destroy(pchild);
-    }
-
-    exit(code);
-}
-
-
-
-void ap_mpm_child_main(apr_pool_t *pconf)
-{
-    ap_listen_rec *lr = NULL;
-    ap_listen_rec *first_lr = NULL;
-    int requests_this_child = 0;
-    apr_socket_t *sd = ap_listeners->sd;
-    int nsds, rv = 0;
-    unsigned long ulTimes;
-    int my_pid = getpid();
-    ULONG rc, c;
-    HQUEUE workq;
-    apr_pollfd_t *pollset;
-    int num_listeners;
-    TID server_maint_tid;
-    void *sb_mem;
-
-    /* Stop Ctrl-C/Ctrl-Break signals going to child processes */
-    DosSetSignalExceptionFocus(0, &ulTimes);
-    set_signals();
-
-    /* Create pool for child */
-    apr_pool_create(&pchild, pconf);
-
-    ap_run_child_init(pchild, ap_server_conf);
-
-    /* Create an event semaphore used to trigger other threads to shutdown */
-    rc = DosCreateEventSem(NULL, &shutdown_event, 0, FALSE);
-
-    if (rc) {
-        ap_log_error(APLOG_MARK, APLOG_ERR, APR_FROM_OS_ERROR(rc), ap_server_conf,
-                     "unable to create shutdown semaphore, exiting");
-        clean_child_exit(APEXIT_CHILDFATAL);
-    }
-
-    /* Gain access to the scoreboard. */
-    rc = DosGetNamedSharedMem(&sb_mem, ap_scoreboard_fname,
-                              PAG_READ|PAG_WRITE);
-
-    if (rc) {
-        ap_log_error(APLOG_MARK, APLOG_ERR, APR_FROM_OS_ERROR(rc), ap_server_conf,
-                     "scoreboard not readable in child, exiting");
-        clean_child_exit(APEXIT_CHILDFATAL);
-    }
-
-    ap_calc_scoreboard_size();
-    ap_init_scoreboard(sb_mem);
-
-    /* Gain access to the accpet mutex */
-    rc = DosOpenMutexSem(NULL, &ap_mpm_accept_mutex);
-
-    if (rc) {
-        ap_log_error(APLOG_MARK, APLOG_ERR, APR_FROM_OS_ERROR(rc), ap_server_conf,
-                     "accept mutex couldn't be accessed in child, exiting");
-        clean_child_exit(APEXIT_CHILDFATAL);
-    }
-
-    /* Find our pid in the scoreboard so we know what slot our parent allocated us */
-    for (child_slot = 0; ap_scoreboard_image->parent[child_slot].pid != my_pid && child_slot < HARD_SERVER_LIMIT; child_slot++);
-
-    if (child_slot == HARD_SERVER_LIMIT) {
-        ap_log_error(APLOG_MARK, APLOG_ERR|APLOG_NOERRNO, 0, ap_server_conf,
-                     "child pid not found in scoreboard, exiting");
-        clean_child_exit(APEXIT_CHILDFATAL);
-    }
-
-    ap_my_generation = ap_scoreboard_image->parent[child_slot].generation;
-    memset(ap_scoreboard_image->servers[child_slot], 0, sizeof(worker_score) * HARD_THREAD_LIMIT);
-
-    /* Set up an OS/2 queue for passing connections & termination requests
-     * to worker threads
-     */
-    rc = DosCreateQueue(&workq, QUE_FIFO, apr_psprintf(pchild, "/queues/httpd/work.%d", my_pid));
-
-    if (rc) {
-        ap_log_error(APLOG_MARK, APLOG_ERR, APR_FROM_OS_ERROR(rc), ap_server_conf,
-                     "unable to create work queue, exiting");
-        clean_child_exit(APEXIT_CHILDFATAL);
-    }
-
-    /* Create initial pool of worker threads */
-    for (c = 0; c < ap_min_spare_threads; c++) {
-//        ap_scoreboard_image->servers[child_slot][c].tid = _beginthread(worker_main, NULL, 128*1024, (void *)c);
-    }
-
-    /* Start maintenance thread */
-    server_maint_tid = _beginthread(server_maintenance, NULL, 32768, NULL);
-
-    /* Set up poll */
-    for (num_listeners = 0, lr = ap_listeners; lr; lr = lr->next) {
-        num_listeners++;
-    }
-
-    apr_poll_setup(&pollset, num_listeners, pchild);
-
-    for (lr = ap_listeners; lr; lr = lr->next) {
-        apr_poll_socket_add(pollset, lr->sd, APR_POLLIN);
-    }
-
-    /* Main connection accept loop */
-    do {
-        apr_pool_t *pconn;
-        worker_args_t *worker_args;
-
-        apr_pool_create(&pconn, pchild);
-        worker_args = apr_palloc(pconn, sizeof(worker_args_t));
-        worker_args->pconn = pconn;
-
-        if (num_listeners == 1) {
-            rv = apr_accept(&worker_args->conn_sd, ap_listeners->sd, pconn);
-        } else {
-            rc = DosRequestMutexSem(ap_mpm_accept_mutex, SEM_INDEFINITE_WAIT);
-
-            if (shutdown_pending) {
-                DosReleaseMutexSem(ap_mpm_accept_mutex);
-                break;
-            }
-
-            rv = APR_FROM_OS_ERROR(rc);
-
-            if (rv == APR_SUCCESS) {
-                rv = apr_poll(pollset, &nsds, -1);
-                DosReleaseMutexSem(ap_mpm_accept_mutex);
-            }
-
-            if (rv == APR_SUCCESS) {
-                if (first_lr == NULL) {
-                    first_lr = ap_listeners;
-                }
-
-                lr = first_lr;
-
-                do {
-                    apr_int16_t event;
-
-                    apr_poll_revents_get(&event, lr->sd, pollset);
-
-                    if (event == APR_POLLIN) {
-                        apr_sockaddr_t *sa;
-                        apr_port_t port;
-                        apr_socket_addr_get(&sa, APR_LOCAL, lr->sd);
-                        apr_sockaddr_port_get(&port, sa);
-                        first_lr = lr->next;
-                        break;
-                    }
-                    lr = lr->next;
-
-                    if (!lr) {
-                        lr = ap_listeners;
-                    }
-                } while (lr != first_lr);
-
-                if (lr == first_lr) {
-                    continue;
-                }
-
-                sd = lr->sd;
-                rv = apr_accept(&worker_args->conn_sd, sd, pconn);
-            }
-        }
-
-        if (rv != APR_SUCCESS) {
-            if (!APR_STATUS_IS_EINTR(rv)) {
-                ap_log_error(APLOG_MARK, APLOG_ERR, rv, ap_server_conf,
-                             "apr_accept");
-                clean_child_exit(APEXIT_CHILDFATAL);
-            }
-        } else {
-            DosWriteQueue(workq, WORKTYPE_CONN, sizeof(worker_args_t), worker_args, 0);
-            requests_this_child++;
-        }
-
-        if (ap_max_requests_per_child != 0 && requests_this_child >= ap_max_requests_per_child)
-            break;
-    } while (!shutdown_pending && ap_my_generation == ap_scoreboard_image->global->running_generation);
-
-    ap_scoreboard_image->parent[child_slot].quiescing = 1;
-    DosPostEventSem(shutdown_event);
-    DosWaitThread(&server_maint_tid, DCWW_WAIT);
-
-    if (is_graceful) {
-        char someleft;
-
-        /* tell our worker threads to exit */
-        for (c=0; c<HARD_THREAD_LIMIT; c++) {
-            if (ap_scoreboard_image->servers[child_slot][c].status != SERVER_DEAD) {
-                DosWriteQueue(workq, WORKTYPE_EXIT, 0, NULL, 0);
-            }
-        }
-
-        do {
-            someleft = 0;
-
-            for (c=0; c<HARD_THREAD_LIMIT; c++) {
-                if (ap_scoreboard_image->servers[child_slot][c].status != SERVER_DEAD) {
-                    someleft = 1;
-                    DosSleep(1000);
-                    break;
-                }
-            }
-        } while (someleft);
-    } else {
-        DosPurgeQueue(workq);
-
-        for (c=0; c<HARD_THREAD_LIMIT; c++) {
-            if (ap_scoreboard_image->servers[child_slot][c].status != SERVER_DEAD) {
-                DosKillThread(ap_scoreboard_image->servers[child_slot][c].tid);
-            }
-        }
-    }
-
-    apr_pool_destroy(pchild);
-}
-
-
-
-void add_worker()
-{
-    int thread_slot;
-
-    /* Find a free thread slot */
-    for (thread_slot=0; thread_slot < HARD_THREAD_LIMIT; thread_slot++) {
-        if (ap_scoreboard_image->servers[child_slot][thread_slot].status == SERVER_DEAD) {
-            ap_scoreboard_image->servers[child_slot][thread_slot].status = SERVER_STARTING;
-            ap_scoreboard_image->servers[child_slot][thread_slot].tid =
-                _beginthread(worker_main, NULL, 128*1024, (void *)thread_slot);
-            break;
-        }
-    }
-}
-
-
-
-ULONG APIENTRY thread_exception_handler(EXCEPTIONREPORTRECORD *pReportRec,
-                                        EXCEPTIONREGISTRATIONRECORD *pRegRec,
-                                        CONTEXTRECORD *pContext,
-                                        PVOID p)
-{
-    int c;
-
-    if (pReportRec->fHandlerFlags & EH_NESTED_CALL) {
-        return XCPT_CONTINUE_SEARCH;
-    }
-
-    if (pReportRec->ExceptionNum == XCPT_ACCESS_VIOLATION ||
-        pReportRec->ExceptionNum == XCPT_INTEGER_DIVIDE_BY_ZERO) {
-        ap_log_error(APLOG_MARK, APLOG_ERR|APLOG_NOERRNO, 0, ap_server_conf,
-                     "caught exception in worker thread, initiating child shutdown pid=%d", getpid());
-        for (c=0; c<HARD_THREAD_LIMIT; c++) {
-            if (ap_scoreboard_image->servers[child_slot][c].tid == _gettid()) {
-                ap_scoreboard_image->servers[child_slot][c].status = SERVER_DEAD;
-                break;
-            }
-        }
-
-        /* Shut down process ASAP, it could be quite unhealthy & leaking resources */
-        shutdown_pending = 1;
-        ap_scoreboard_image->parent[child_slot].quiescing = 1;
-        DosUnwindException(UNWIND_ALL, 0, 0);
-    }
-  
-    return XCPT_CONTINUE_SEARCH;
-}
-
-
-
-static void worker_main(void *vpArg)
-{
-    long conn_id;
-    conn_rec *current_conn;
-    apr_pool_t *pconn;
-    worker_args_t *worker_args;
-    HQUEUE workq;
-    PID owner;
-    int rc;
-    REQUESTDATA rd;
-    ULONG len;
-    BYTE priority;
-    int thread_slot = (int)vpArg;
-    EXCEPTIONREGISTRATIONRECORD reg_rec = { NULL, thread_exception_handler };
-    ap_sb_handle_t *sbh;
-  
-    /* Trap exceptions in this thread so we don't take down the whole process */
-    DosSetExceptionHandler( &reg_rec );
-
-    rc = DosOpenQueue(&owner, &workq,
-                      apr_psprintf(pchild, "/queues/httpd/work.%d", getpid()));
-
-    if (rc) {
-        ap_log_error(APLOG_MARK, APLOG_ERR, APR_FROM_OS_ERROR(rc), ap_server_conf,
-                     "unable to open work queue, exiting");
-        ap_scoreboard_image->servers[child_slot][thread_slot].tid = 0;
-    }
-
-    conn_id = ID_FROM_CHILD_THREAD(child_slot, thread_slot);
-    ap_update_child_status_from_indexes(child_slot, thread_slot, SERVER_READY, 
-                                        NULL);
-
-    while (rc = DosReadQueue(workq, &rd, &len, (PPVOID)&worker_args, 0, DCWW_WAIT, &priority, NULLHANDLE),
-           rc == 0 && rd.ulData != WORKTYPE_EXIT) {
-        pconn = worker_args->pconn;
-        ap_create_sb_handle(&sbh, pconn, child_slot, thread_slot);
-        current_conn = ap_run_create_connection(pconn, ap_server_conf, worker_args->conn_sd, conn_id, sbh);
-
-        if (current_conn) {
-            ap_process_connection(current_conn, worker_args->conn_sd);
-            ap_lingering_close(current_conn);
-        }
-
-        apr_pool_destroy(pconn);
-        ap_update_child_status_from_indexes(child_slot, thread_slot, 
-                                            SERVER_READY, NULL);
-    }
-
-    ap_update_child_status_from_indexes(child_slot, thread_slot, SERVER_DEAD, 
-                                        NULL);
-}
-
-
-
-static void server_maintenance(void *vpArg)
-{
-    int num_idle, num_needed;
-    ULONG num_pending = 0;
-    int threadnum;
-    HQUEUE workq;
-    ULONG rc;
-    PID owner;
-
-    rc = DosOpenQueue(&owner, &workq,
-                      apr_psprintf(pchild, "/queues/httpd/work.%d", getpid()));
-
-    if (rc) {
-        ap_log_error(APLOG_MARK, APLOG_ERR, APR_FROM_OS_ERROR(rc), ap_server_conf,
-                     "unable to open work queue in maintenance thread");
-        return;
-    }
-
-    do {
-        for (num_idle=0, threadnum=0; threadnum < HARD_THREAD_LIMIT; threadnum++) {
-            num_idle += ap_scoreboard_image->servers[child_slot][threadnum].status == SERVER_READY;
-        }
-
-        DosQueryQueue(workq, &num_pending);
-        num_needed = ap_min_spare_threads - num_idle + num_pending;
-
-        if (num_needed > 0) {
-            for (threadnum=0; threadnum < num_needed; threadnum++) {
-                add_worker();
-            }
-        }
-
-        if (num_idle - num_pending > ap_max_spare_threads) {
-            DosWriteQueue(workq, WORKTYPE_EXIT, 0, NULL, 0);
-        }
-    } while (DosWaitEventSem(shutdown_event, 500) == ERROR_TIMEOUT);
-}
-
-
-
-/* Signal handling routines */
-
-static void sig_term(int sig)
-{
-    shutdown_pending = 1;
-    is_graceful = 0;
-    signal(SIGTERM, SIG_DFL);
-}
-
-
-
-static void sig_hup(int sig)
-{
-    shutdown_pending = 1;
-    is_graceful = 1;
-}
-
-
-
-static void set_signals()
-{
-    struct sigaction sa;
-
-    sigemptyset(&sa.sa_mask);
-    sa.sa_flags = 0;
-    sa.sa_handler = sig_term;
-
-    if (sigaction(SIGTERM, &sa, NULL) < 0)
-	ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf, "sigaction(SIGTERM)");
-
-    sa.sa_handler = sig_hup;
-
-    if (sigaction(SIGHUP, &sa, NULL) < 0)
-	ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf, "sigaction(SIGHUP)");
-}
diff --git a/server/mpm/netware/mpm.h b/server/mpm/netware/mpm.h
deleted file mode 100644
index 44fdd69..0000000
--- a/server/mpm/netware/mpm.h
+++ /dev/null
@@ -1,89 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-#include "scoreboard.h"
-
-#ifndef APACHE_MPM_THREADED_H
-#define APACHE_MPM_THREADED_H
-
-#define THREADED_MPM
-
-#define MPM_NAME "NetWare_Threaded"
-
-/*#define AP_MPM_WANT_RECLAIM_CHILD_PROCESSES
-  #define AP_MPM_WANT_WAIT_OR_TIMEOUT
-  #define AP_MPM_WANT_PROCESS_CHILD_STATUS
-  #define AP_MPM_WANT_SET_PIDFILE
-  #define AP_MPM_WANT_SET_SCOREBOARD
-  #define AP_MPM_WANT_SET_LOCKFILE 
-*/
-#define AP_MPM_WANT_SET_MAX_REQUESTS
-#define AP_MPM_DISABLE_NAGLE_ACCEPTED_SOCK
-/*#define AP_MPM_WANT_SET_COREDUMPDIR
-  #define AP_MPM_WANT_SET_ACCEPT_LOCK_MECH 
-*/
-
-#define MPM_SYNC_CHILD_TABLE() (ap_sync_scoreboard_image())
-#define MPM_CHILD_PID(i) (ap_scoreboard_image->parent[i].pid)
-#define MPM_NOTE_CHILD_KILLED(i) (MPM_CHILD_PID(i) = 0)
-
-extern int ap_threads_per_child;
-extern int ap_thread_stack_size;
-extern int ap_max_workers_limit;
-extern server_rec *ap_server_conf;
-
-#endif /* APACHE_MPM_THREADED_H */
diff --git a/server/mpm/netware/mpm_default.h b/server/mpm/netware/mpm_default.h
deleted file mode 100644
index 6934875..0000000
--- a/server/mpm/netware/mpm_default.h
+++ /dev/null
@@ -1,145 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-#ifndef APACHE_MPM_DEFAULT_H
-#define APACHE_MPM_DEFAULT_H
-
-/* Number of servers to spawn off by default --- also, if fewer than
- * this free when the caretaker checks, it will spawn more.
- */
-#ifndef DEFAULT_START_DAEMON
-#define DEFAULT_START_DAEMON 1
-#endif
-
-/* Maximum number of *free* server processes --- more than this, and
- * they will die off.
- */
-
-#ifndef DEFAULT_MAX_FREE_DAEMON
-#define DEFAULT_MAX_FREE_DAEMON 1
-#endif
-
-/* Minimum --- fewer than this, and more will be created */
-
-#ifndef DEFAULT_MIN_FREE_DAEMON
-#define DEFAULT_MIN_FREE_DAEMON 1
-#endif
-
-/* Limit on the threads per process.  Clients will be locked out if more than
- * this  * HARD_SERVER_LIMIT are needed.
- *
- * We keep this for one reason it keeps the size of the scoreboard file small
- * enough that we can read the whole thing without worrying too much about
- * the overhead.
- */
-#ifndef HARD_THREAD_LIMIT
-#define HARD_THREAD_LIMIT 2048
-#endif
-
-#ifndef DEFAULT_THREADS_PER_CHILD
-#define DEFAULT_THREADS_PER_CHILD 50
-#endif
-
-/* Number of threads to spawn off by default --- also, if fewer than
- * this free when the caretaker checks, it will spawn more.
- */
-#ifndef DEFAULT_START_THREADS
-#define DEFAULT_START_THREADS DEFAULT_THREADS_PER_CHILD
-#endif
-
-/* Maximum number of *free* threads --- more than this, and
- * they will die off.
- */
-
-#ifndef DEFAULT_MAX_FREE_THREADS
-#define DEFAULT_MAX_FREE_THREADS 100
-#endif
-
-/* Minimum --- fewer than this, and more will be created */
-
-#ifndef DEFAULT_MIN_FREE_THREADS
-#define DEFAULT_MIN_FREE_THREADS 10
-#endif
-
-/* File used for accept locking, when we use a file */
-/*#ifndef DEFAULT_LOCKFILE
-  #define DEFAULT_LOCKFILE "logs/accept.lock"
-  #endif
-*/
-
-/* Where the main/parent process's pid is logged */
-/*#ifndef DEFAULT_PIDLOG
-  #define DEFAULT_PIDLOG "logs/httpd.pid"
-  #endif
-*/
-
-/*
- * Interval, in microseconds, between scoreboard maintenance.
- */
-#ifndef SCOREBOARD_MAINTENANCE_INTERVAL
-#define SCOREBOARD_MAINTENANCE_INTERVAL 1000000
-#endif
-
-/* Number of requests to try to handle in a single process.  If <= 0,
- * the children don't die off.
- */
-#ifndef DEFAULT_MAX_REQUESTS_PER_CHILD
-#define DEFAULT_MAX_REQUESTS_PER_CHILD 0
-#endif
-
-#endif /* AP_MPM_DEFAULT_H */
diff --git a/server/mpm/netware/mpm_netware.c b/server/mpm/netware/mpm_netware.c
deleted file mode 100644
index 2b519d4..0000000
--- a/server/mpm/netware/mpm_netware.c
+++ /dev/null
@@ -1,1289 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-/*
- * httpd.c: simple http daemon for answering WWW file requests
- *
- * 
- * 03-21-93  Rob McCool wrote original code (up to NCSA HTTPd 1.3)
- * 
- * 03-06-95  blong
- *  changed server number for child-alone processes to 0 and changed name
- *   of processes
- *
- * 03-10-95  blong
- *      Added numerous speed hacks proposed by Robert S. Thau (rst@ai.mit.edu) 
- *      including set group before fork, and call gettime before to fork
- *      to set up libraries.
- *
- * 04-14-95  rst / rh
- *      Brandon's code snarfed from NCSA 1.4, but tinkered to work with the
- *      Apache server, and also to have child processes do accept() directly.
- *
- * April-July '95 rst
- *      Extensive rework for Apache.
- */
-
-#include "apr.h"
-#include "apr_portable.h"
-#include "apr_strings.h"
-#include "apr_thread_proc.h"
-#include "apr_signal.h"
-#include "apr_tables.h"
-#include "apr_getopt.h"
-#include "apr_thread_mutex.h"
-
-#define APR_WANT_STDIO
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-#if APR_HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#if APR_HAVE_SYS_TYPES_H
-#include <sys/types.h>
-#endif
-
-#define CORE_PRIVATE
-
-#include "ap_config.h"
-#include "httpd.h"
-#include "mpm_default.h"
-#include "http_main.h"
-#include "http_log.h"
-#include "http_config.h"
-#include "http_core.h"		/* for get_remote_host */
-#include "http_connection.h"
-#include "scoreboard.h"
-#include "ap_mpm.h"
-#include "mpm_common.h"
-#include "ap_listen.h"
-#include "ap_mmn.h"
-
-#ifdef HAVE_TIME_H
-#include <time.h>
-#endif
-
-#include <signal.h>
-
-#include <netware.h>
-#include <nks/netware.h>
-#include <library.h>
-
-/* Limit on the total --- clients will be locked out if more servers than
- * this are needed.  It is intended solely to keep the server from crashing
- * when things get out of hand.
- *
- * We keep a hard maximum number of servers, for two reasons --- first off,
- * in case something goes seriously wrong, we want to stop the fork bomb
- * short of actually crashing the machine we're running on by filling some
- * kernel table.  Secondly, it keeps the size of the scoreboard file small
- * enough that we can read the whole thing without worrying too much about
- * the overhead.
- */
-#ifndef HARD_SERVER_LIMIT
-#define HARD_SERVER_LIMIT 1
-#endif
-
-#define WORKER_DEAD         SERVER_DEAD
-#define WORKER_STARTING     SERVER_STARTING
-#define WORKER_READY        SERVER_READY
-#define WORKER_IDLE_KILL    SERVER_IDLE_KILL
-
-/* config globals */
-
-int ap_threads_per_child=0;         /* Worker threads per child */
-int ap_thread_stack_size=65536;
-static apr_thread_mutex_t *accept_lock;
-static int ap_threads_to_start=0;
-static int ap_threads_min_free=0;
-static int ap_threads_max_free=0;
-static int ap_threads_limit=0;
-
-/*
- * The max child slot ever assigned, preserved across restarts.  Necessary
- * to deal with MaxClients changes across SIGWINCH restarts.  We use this
- * value to optimize routines that have to scan the entire scoreboard.
- */
-int ap_max_workers_limit = -1;
-server_rec *ap_server_conf;
-
-/* *Non*-shared http_main globals... */
-
-static fd_set listenfds;
-static int listenmaxfd;
-
-static apr_pool_t *pconf;		/* Pool for config stuff */
-static apr_pool_t *pmain;		/* Pool for httpd child stuff */
-
-static pid_t ap_my_pid;	/* it seems silly to call getpid all the time */
-static char *ap_my_addrspace = NULL;
-
-static int die_now = 0;
-
-static apr_thread_mutex_t *accept_mutex = NULL;
-
-/* Keep track of the number of worker threads currently active */
-static int worker_thread_count;
-static apr_thread_mutex_t *worker_thread_count_mutex;
-static int request_count;
-
-/*  Structure used to register/deregister a console handler with the OS */
-static int InstallConsoleHandler(void);
-static void RemoveConsoleHandler(void);
-static int CommandLineInterpreter(scr_t screenID, const char *commandLine);
-static  CommandParser_t ConsoleHandler = {0, NULL, 0};
-#define HANDLEDCOMMAND  0
-#define NOTMYCOMMAND    1
-
-static int show_settings = 0;
-
-#if 0
-#define DBPRINT0(s) printf(s)
-#define DBPRINT1(s,v1) printf(s,v1)
-#define DBPRINT2(s,v1,v2) printf(s,v1,v2)
-#else
-#define DBPRINT0(s)
-#define DBPRINT1(s,v1)
-#define DBPRINT2(s,v1,v2)
-#endif
-
-/* a clean exit from a child with proper cleanup */
-static void clean_child_exit(int code, int worker_num) __attribute__ ((noreturn));
-static void clean_child_exit(int code, int worker_num)
-{
-    apr_thread_mutex_lock(worker_thread_count_mutex);
-    worker_thread_count--;
-    apr_thread_mutex_unlock(worker_thread_count_mutex);
-    if (worker_num >=0)
-        ap_update_child_status_from_indexes(0, worker_num, WORKER_DEAD, 
-                                            (request_rec *) NULL);
-    NXThreadExit((void*)&code);
-}
-
-AP_DECLARE(apr_status_t) ap_mpm_query(int query_code, int *result)
-{
-    switch(query_code){
-        case AP_MPMQ_MAX_DAEMON_USED:
-            *result = 1;
-            return APR_SUCCESS;
-        case AP_MPMQ_IS_THREADED:
-            *result = AP_MPMQ_DYNAMIC;
-            return APR_SUCCESS;
-        case AP_MPMQ_IS_FORKED:
-            *result = AP_MPMQ_NOT_SUPPORTED;
-            return APR_SUCCESS;
-        case AP_MPMQ_HARD_LIMIT_DAEMONS:
-            *result = HARD_SERVER_LIMIT;
-            return APR_SUCCESS;
-        case AP_MPMQ_HARD_LIMIT_THREADS:
-            *result = HARD_THREAD_LIMIT;
-            return APR_SUCCESS;
-        case AP_MPMQ_MAX_THREADS:
-            *result = ap_threads_limit;
-            return APR_SUCCESS;
-        case AP_MPMQ_MIN_SPARE_DAEMONS:
-            *result = 0;
-            return APR_SUCCESS;
-        case AP_MPMQ_MIN_SPARE_THREADS:
-            *result = ap_threads_min_free;
-            return APR_SUCCESS;
-        case AP_MPMQ_MAX_SPARE_DAEMONS:
-            *result = 0;
-            return APR_SUCCESS;
-        case AP_MPMQ_MAX_SPARE_THREADS:
-            *result = ap_threads_max_free;
-            return APR_SUCCESS;
-        case AP_MPMQ_MAX_REQUESTS_DAEMON:
-            *result = ap_max_requests_per_child;
-            return APR_SUCCESS;
-        case AP_MPMQ_MAX_DAEMONS:
-            *result = 1;
-            return APR_SUCCESS;
-    }
-    return APR_ENOTIMPL;
-}
-
-
-/*****************************************************************
- * Connection structures and accounting...
- */
-
-/* volatile just in case */
-static int volatile shutdown_pending;
-static int volatile restart_pending;
-static int volatile is_graceful;
-static int volatile wait_to_finish=1;
-ap_generation_t volatile ap_my_generation=0;
-
-static void mpm_term(void)
-{
-    RemoveConsoleHandler();
-    wait_to_finish = 0;
-}
-
-static void sig_term(int sig)
-{
-    if (shutdown_pending == 1) {
-	    /* Um, is this _probably_ not an error, if the user has
-	     * tried to do a shutdown twice quickly, so we won't
-	     * worry about reporting it.
-	     */
-	    return;
-    }
-    shutdown_pending = 1;
-
-    DBPRINT0 ("waiting for threads\n");
-    while (wait_to_finish) {
-        apr_thread_yield();
-    }
-    DBPRINT0 ("goodbye\n");
-}
-
-/* restart() is the signal handler for SIGHUP and SIGWINCH
- * in the parent process, unless running in ONE_PROCESS mode
- */
-static void restart(void)
-{
-    if (restart_pending == 1) {
-        /* Probably not an error - don't bother reporting it */
-        return;
-    }
-    restart_pending = 1;
-    is_graceful = 1;
-}
-
-static void set_signals(void)
-{
-    apr_signal(SIGTERM, sig_term);
-    apr_signal(SIGABRT, sig_term);
-}
-
-int nlmUnloadSignaled()
-{
-    shutdown_pending = 1;
-
-/* Hold off on this change for now */
-/*    while (wait_to_finish) {
-        NXThreadYield();
-    }
-*/
-    return 1;
-}
-
-/*****************************************************************
- * Child process main loop.
- * The following vars are static to avoid getting clobbered by longjmp();
- * they are really private to child_main.
- */
-
-static fd_set main_fds;
-
-int ap_graceful_stop_signalled(void)
-{
-    /* not ever called anymore... */
-    return 0;
-}
-
-static int dont_block = 0;
-static int missed_accept = 0;
-static apr_socket_t *sd = NULL;
-
-static int skipped_selects = 0;
-static int would_block = 0;
-/*static */
-void worker_main(void *arg)
-{
-    ap_listen_rec *lr;
-    ap_listen_rec *last_lr = NULL;
-    apr_pool_t *ptrans;
-    apr_allocator_t *allocator;
-    conn_rec *current_conn;
-    apr_status_t stat = APR_EINIT;
-    int worker_num_arg = (int)arg;
-    ap_sb_handle_t *sbh;
-
-    int my_worker_num = worker_num_arg;
-    apr_socket_t *csd = NULL;
-    int requests_this_child = 0;
-
-    int sockdes;
-    ap_listen_rec *first_lr;
-    int srv;
-    struct timeval tv;
-
-    tv.tv_sec = 1;
-    tv.tv_usec = 0;
-
-    apr_allocator_create(&allocator);
-    apr_pool_create_ex(&ptrans, NULL, NULL, allocator);
-    apr_allocator_set_owner(allocator, ptrans);
-
-    apr_pool_tag(ptrans, "transaction");
-
-    apr_thread_mutex_lock(worker_thread_count_mutex);
-    worker_thread_count++;
-    apr_thread_mutex_unlock(worker_thread_count_mutex);
-
-    ap_update_child_status_from_indexes(0, my_worker_num, WORKER_READY, 
-                                        (request_rec *) NULL);
-
-    while (!die_now) {
-        /*
-        * (Re)initialize this child to a pre-connection state.
-        */
-        current_conn = NULL;
-        apr_pool_clear(ptrans);
-
-        if ((ap_max_requests_per_child > 0
-            && requests_this_child++ >= ap_max_requests_per_child)) {
-            clean_child_exit(0, my_worker_num);
-        }
-
-        ap_update_child_status_from_indexes(0, my_worker_num, WORKER_READY, 
-                                            (request_rec *) NULL);
-
-        /*
-        * Wait for an acceptable connection to arrive.
-        */
-
-        /* Only allow a single thread at a time into the "accept" loop */
-        apr_thread_mutex_lock(accept_mutex);
-
-        for (;;) {
-            if (shutdown_pending || restart_pending || (ap_scoreboard_image->servers[0][my_worker_num].status == WORKER_IDLE_KILL)) {
-                DBPRINT1 ("\nThread slot %d is shutting down\n", my_worker_num);
-                apr_thread_mutex_unlock(accept_mutex);
-                clean_child_exit(0, my_worker_num);
-            }
-
-            /* If we just satisfied a request on listen port x, assume that more 
-                is coming. Don't bother using select() to determine if there is 
-                more, just try to accept() the next request. */
-            if (dont_block && (missed_accept<10)) {
-                skipped_selects++;
-            }
-            else {
-                /* If we determine that there are no more requests on the listen
-                    queue then set the socket back to blocking and move back into 
-                    more of an idle listen state. */
-                if (dont_block) {
-                    apr_setsocketopt(sd, APR_SO_NONBLOCK, 0);
-                    dont_block = 0;
-                }
-
-                /* Check the listen queue on all sockets for requests */
-                memcpy(&main_fds, &listenfds, sizeof(fd_set));
-                srv = select(listenmaxfd + 1, &main_fds, NULL, NULL, &tv);
-
-                if (srv <= 0)
-                    continue;
-
-                /* remember the last_lr we searched last time around so that
-                we don't end up starving any particular listening socket */
-                if (last_lr == NULL) {
-                    lr = ap_listeners;
-                }
-                else {
-                    lr = last_lr->next;
-                    if (!lr)
-                        lr = ap_listeners;
-                }
-                first_lr = lr;
-                do {
-                    apr_os_sock_get(&sockdes, lr->sd);
-                    if (FD_ISSET(sockdes, &main_fds))
-                        goto got_listener;
-                    lr = lr->next;
-                    if (!lr)
-                        lr = ap_listeners;
-                } while (lr != first_lr);
-                /* FIXME: if we get here, something bad has happened, and we're
-                probably gonna spin forever.
-                */
-                continue;
-got_listener:
-                last_lr = lr;
-                sd = lr->sd;
-
-                /* Just got a request on one of the listen sockets so assume that
-                    there are more coming.  Set the socket to non-blocking and 
-                    move into a fast pull mode. */
-                apr_setsocketopt(sd, APR_SO_NONBLOCK, 1);
-                dont_block = 1;
-                missed_accept = 0;
-            }
-            
-            stat = apr_accept(&csd, sd, ptrans);
-
-            /* If we got a new socket, set it to non-blocking mode and process
-                it.  Otherwise handle the error. */
-            if (stat == APR_SUCCESS) {
-                apr_setsocketopt(csd, APR_SO_NONBLOCK, 0);
-                break;		/* We have a socket ready for reading */
-            }
-            else {
-                switch (APR_TO_NETOS_ERROR(stat)) {
-
-                    /* if the error is a wouldblock then maybe we were too
-                        quick try to pull the next request from the listen 
-                        queue.  Try a few more times then return to our idle
-                        listen state. */
-                    case WSAEWOULDBLOCK:
-                        missed_accept++;
-                        would_block++;
-                        apr_thread_yield();
-                        continue;
-                        break;
-
-                    case WSAECONNRESET:
-                    case WSAETIMEDOUT:
-                    case WSAEHOSTUNREACH:
-                    case WSAENETUNREACH:
-                        break;
-
-                    case WSAENETDOWN:
-                        /*
-                        * When the network layer has been shut down, there
-                        * is not much use in simply exiting: the parent
-                        * would simply re-create us (and we'd fail again).
-                        * Use the CHILDFATAL code to tear the server down.
-                        * @@@ Martin's idea for possible improvement:
-                        * A different approach would be to define
-                        * a new APEXIT_NETDOWN exit code, the reception
-                        * of which would make the parent shutdown all
-                        * children, then idle-loop until it detected that
-                        * the network is up again, and restart the children.
-                        * Ben Hyde noted that temporary ENETDOWN situations
-                        * occur in mobile IP.
-                        */
-                        ap_log_error(APLOG_MARK, APLOG_EMERG, stat, ap_server_conf,
-                            "apr_accept: giving up.");
-                        clean_child_exit(APEXIT_CHILDFATAL, my_worker_num);
-
-                    default:
-                        ap_log_error(APLOG_MARK, APLOG_ERR, stat, ap_server_conf,
-                            "apr_accept: (client socket)");
-                        clean_child_exit(1, my_worker_num);
-                }
-            }
-        }
-
-        /* Unlock the mutext so that the next thread can start listening for requests. */
-        apr_thread_mutex_unlock(accept_mutex);
-
-        ap_create_sb_handle(&sbh, ptrans, 0, my_worker_num);
-        /*
-        * We now have a connection, so set it up with the appropriate
-        * socket options, file descriptors, and read/write buffers.
-        */
-        current_conn = ap_run_create_connection(ptrans, ap_server_conf, csd, 
-                                                my_worker_num, sbh);
-        if (current_conn) {
-            ap_process_connection(current_conn, csd);
-            ap_lingering_close(current_conn);
-        }
-        request_count++;
-    }
-    clean_child_exit(0, my_worker_num);
-}
-
-
-static int make_child(server_rec *s, int slot)
-{
-    int tid;
-    int err=0;
-    NXContext_t ctx;
-
-    if (slot + 1 > ap_max_workers_limit) {
-        ap_max_workers_limit = slot + 1;
-    }
-
-    ap_update_child_status_from_indexes(0, slot, WORKER_STARTING, 
-                                        (request_rec *) NULL);
-
-    if (ctx = NXContextAlloc((void (*)(void *)) worker_main, (void*)slot, NX_PRIO_MED, ap_thread_stack_size, NX_CTX_NORMAL, &err)) {
-        char threadName[32];
-
-        sprintf (threadName, "Apache_Worker %d", slot);
-        NXContextSetName(ctx, threadName);
-        err = NXThreadCreate(ctx, NX_THR_BIND_CONTEXT, &tid);
-        if (err) {
-            NXContextFree (ctx);
-        }
-    }
-
-    if (err) {
-        /* create thread didn't succeed. Fix the scoreboard or else
-        * it will say SERVER_STARTING forever and ever
-        */
-        ap_update_child_status_from_indexes(0, slot, WORKER_DEAD, 
-                                            (request_rec *) NULL);
-
-        /* In case system resources are maxxed out, we don't want
-        Apache running away with the CPU trying to fork over and
-        over and over again. */
-        apr_thread_yield();
-
-        return -1;
-    }
-
-    ap_scoreboard_image->servers[0][slot].tid = tid;
-
-    return 0;
-}
-
-
-/* start up a bunch of worker threads */
-static void startup_workers(int number_to_start)
-{
-    int i;
-
-    for (i = 0; number_to_start && i < ap_threads_limit; ++i) {
-        if (ap_scoreboard_image->servers[0][i].status != WORKER_DEAD) {
-            continue;
-        }
-        if (make_child(ap_server_conf, i) < 0) {
-            break;
-        }
-        --number_to_start;
-    }
-}
-
-
-/*
- * idle_spawn_rate is the number of children that will be spawned on the
- * next maintenance cycle if there aren't enough idle servers.  It is
- * doubled up to MAX_SPAWN_RATE, and reset only when a cycle goes by
- * without the need to spawn.
- */
-static int idle_spawn_rate = 1;
-#ifndef MAX_SPAWN_RATE
-#define MAX_SPAWN_RATE	(64)
-#endif
-static int hold_off_on_exponential_spawning;
-
-static void perform_idle_server_maintenance(apr_pool_t *p)
-{
-    int i;
-    int to_kill;
-    int idle_count;
-    worker_score *ws;
-    int free_length;
-    int free_slots[MAX_SPAWN_RATE];
-    int last_non_dead;
-    int total_non_dead;
-
-    /* initialize the free_list */
-    free_length = 0;
-
-    to_kill = -1;
-    idle_count = 0;
-    last_non_dead = -1;
-    total_non_dead = 0;
-
-    for (i = 0; i < ap_threads_limit; ++i) {
-        int status;
-
-        if (i >= ap_max_workers_limit && free_length == idle_spawn_rate)
-            break;
-        ws = &ap_scoreboard_image->servers[0][i];
-        status = ws->status;
-        if (status == WORKER_DEAD) {
-            /* try to keep children numbers as low as possible */
-            if (free_length < idle_spawn_rate) {
-                free_slots[free_length] = i;
-                ++free_length;
-            }
-        }
-        else if (status == WORKER_IDLE_KILL) {
-            /* If it is already marked to die, skip it */
-            continue;
-        }
-        else {
-            /* We consider a starting server as idle because we started it
-            * at least a cycle ago, and if it still hasn't finished starting
-            * then we're just going to swamp things worse by forking more.
-            * So we hopefully won't need to fork more if we count it.
-            * This depends on the ordering of SERVER_READY and SERVER_STARTING.
-            */
-            if (status <= WORKER_READY) {
-                ++ idle_count;
-                /* always kill the highest numbered child if we have to...
-                * no really well thought out reason ... other than observing
-                * the server behaviour under linux where lower numbered children
-                * tend to service more hits (and hence are more likely to have
-                * their data in cpu caches).
-                */
-                to_kill = i;
-            }
-
-            ++total_non_dead;
-            last_non_dead = i;
-        }
-    }
-    DBPRINT2("Total: %d Idle Count: %d  \r", total_non_dead, idle_count);
-    ap_max_workers_limit = last_non_dead + 1;
-    if (idle_count > ap_threads_max_free) {
-        /* kill off one child... we use the pod because that'll cause it to
-        * shut down gracefully, in case it happened to pick up a request
-        * while we were counting
-        */
-        idle_spawn_rate = 1;
-        ap_update_child_status_from_indexes(0, last_non_dead, WORKER_IDLE_KILL, 
-                                            (request_rec *) NULL);
-        DBPRINT1("\nKilling idle thread: %d\n", last_non_dead);
-    }
-    else if (idle_count < ap_threads_min_free) {
-        /* terminate the free list */
-        if (free_length == 0) {
-            /* only report this condition once */
-            static int reported = 0;
-
-            if (!reported) {
-                ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, ap_server_conf,
-                    "server reached MaxClients setting, consider"
-                    " raising the MaxClients setting");
-                reported = 1;
-            }
-            idle_spawn_rate = 1;
-        }
-        else {
-            if (idle_spawn_rate >= 8) {
-                ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_INFO, 0, ap_server_conf,
-                    "server seems busy, (you may need "
-                    "to increase StartServers, or Min/MaxSpareServers), "
-                    "spawning %d children, there are %d idle, and "
-                    "%d total children", idle_spawn_rate,
-                    idle_count, total_non_dead);
-            }
-            DBPRINT0("\n");
-            for (i = 0; i < free_length; ++i) {
-                DBPRINT1("Spawning additional thread slot: %d\n", free_slots[i]);
-                make_child(ap_server_conf, free_slots[i]);
-            }
-            /* the next time around we want to spawn twice as many if this
-            * wasn't good enough, but not if we've just done a graceful
-            */
-            if (hold_off_on_exponential_spawning) {
-                --hold_off_on_exponential_spawning;
-            }
-            else if (idle_spawn_rate < MAX_SPAWN_RATE) {
-                idle_spawn_rate *= 2;
-            }
-        }
-    }
-    else {
-        idle_spawn_rate = 1;
-    }
-}
-
-static void display_settings ()
-{
-    int status_array[SERVER_NUM_STATUS];
-    int i, status, total=0;
-    int reqs = request_count;
-    int skips = skipped_selects;
-    int wblock = would_block;
-
-    request_count = 0;
-    skipped_selects = 0;
-    would_block = 0;
-
-    ClearScreen (getscreenhandle());
-    printf("%s \n", ap_get_server_version());
-
-    for (i=0;i<SERVER_NUM_STATUS;i++) {
-        status_array[i] = 0;
-    }
-
-    for (i = 0; i < ap_threads_limit; ++i) {
-        status = (ap_scoreboard_image->servers[0][i]).status;
-        status_array[status]++;
-    }
-
-    for (i=0;i<SERVER_NUM_STATUS;i++) {
-        switch(i)
-        {
-        case SERVER_DEAD:
-            printf ("Available:\t%d\n", status_array[i]);
-            break;
-        case SERVER_STARTING:
-            printf ("Starting:\t%d\n", status_array[i]);
-            break;
-        case SERVER_READY:
-            printf ("Ready:\t\t%d\n", status_array[i]);
-            break;
-        case SERVER_BUSY_READ:
-            printf ("Busy:\t\t%d\n", status_array[i]);
-            break;
-        case SERVER_BUSY_WRITE:
-            printf ("Busy Write:\t%d\n", status_array[i]);
-            break;
-        case SERVER_BUSY_KEEPALIVE:
-            printf ("Busy Keepalive:\t%d\n", status_array[i]);
-            break;
-        case SERVER_BUSY_LOG:
-            printf ("Busy Log:\t%d\n", status_array[i]);
-            break;
-        case SERVER_BUSY_DNS:
-            printf ("Busy DNS:\t%d\n", status_array[i]);
-            break;
-        case SERVER_CLOSING:
-            printf ("Closing:\t%d\n", status_array[i]);
-            break;
-        case SERVER_GRACEFUL:
-            printf ("Restart:\t%d\n", status_array[i]);
-            break;
-        case SERVER_IDLE_KILL:
-            printf ("Idle Kill:\t%d\n", status_array[i]);
-            break;
-        default:
-            printf ("Unknown Status:\t%d\n", status_array[i]);
-            break;
-        }
-        if (i != SERVER_DEAD)
-            total+=status_array[i];
-    }
-    printf ("Total Running:\t%d\tout of: \t%d\n", total, ap_threads_limit);
-    printf ("Requests per interval:\t%d\n", reqs);
-    printf ("Skipped selects:\t%d\n", skips);
-    printf ("Would blocks:\t%d\n", wblock);
-}
-
-static void show_server_data()
-{
-    ap_listen_rec *lr;
-    module **m;
-
-    printf("%s\n", ap_get_server_version());
-    if (ap_my_addrspace && (ap_my_addrspace[0] != 'O') && (ap_my_addrspace[1] != 'S'))
-        printf("   Running in address space %s\n", ap_my_addrspace);
-
-
-    /* Display listening ports */
-    printf("   Listening on port(s):");
-    lr = ap_listeners;
-    do {
-       printf(" %d", lr->bind_addr->port);
-       lr = lr->next;
-    } while(lr && lr != ap_listeners);
-    
-    /* Display dynamic modules loaded */
-    printf("\n");    
-    for (m = ap_loaded_modules; *m != NULL; m++) {
-        if (((module*)*m)->dynamic_load_handle) {
-            printf("   Loaded dynamic module %s\n", ((module*)*m)->name);
-        }
-    }
-}
-
-
-static int setup_listeners(server_rec *s)
-{
-    ap_listen_rec *lr;
-    int sockdes;
-
-    if (ap_setup_listeners(s) < 1 ) {
-        ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_ALERT, 0, s,
-            "no listening sockets available, shutting down");
-        return -1;
-    }
-
-    listenmaxfd = -1;
-    FD_ZERO(&listenfds);
-    for (lr = ap_listeners; lr; lr = lr->next) {
-        apr_os_sock_get(&sockdes, lr->sd);
-        FD_SET(sockdes, &listenfds);
-        if (sockdes > listenmaxfd) {
-            listenmaxfd = sockdes;
-        }
-#ifdef NONBLOCK1
-        apr_setsocketopt(lr->sd, APR_SO_NONBLOCK, 1);
-#endif
-    }
-    return 0;
-}
-
-static int shutdown_listeners()
-{
-    ap_listen_rec *lr;
-
-    for (lr = ap_listeners; lr; lr = lr->next) {
-        apr_socket_close(lr->sd);
-    }
-    return 0;
-}
-
-/*****************************************************************
- * Executive routines.
- */
-
-int ap_mpm_run(apr_pool_t *_pconf, apr_pool_t *plog, server_rec *s)
-{
-    apr_status_t status=0;
-
-    pconf = _pconf;
-    ap_server_conf = s;
-
-    if (setup_listeners(s)) {
-        ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_ALERT, status, s,
-            "no listening sockets available, shutting down");
-        return -1;
-    }
-
-    restart_pending = shutdown_pending = 0;
-    worker_thread_count = 0;
-    apr_thread_mutex_create(&worker_thread_count_mutex, APR_THREAD_MUTEX_DEFAULT, pconf);
-    apr_thread_mutex_create(&accept_mutex, APR_THREAD_MUTEX_DEFAULT, pconf);
-
-    if (!is_graceful) {
-        if (ap_run_pre_mpm(pconf, SB_NOT_SHARED) != OK) {
-            return 1;
-        }
-    }
-
-    /* Only set slot 0 since that is all NetWare will ever have. */
-    ap_scoreboard_image->parent[0].pid = getpid();
-
-    set_signals();
-
-    apr_pool_create(&pmain, pconf);
-    ap_run_child_init(pmain, ap_server_conf);
-
-    if (ap_threads_max_free < ap_threads_min_free + 1)	/* Don't thrash... */
-        ap_threads_max_free = ap_threads_min_free + 1;
-    request_count = 0;
-
-    startup_workers(ap_threads_to_start);
-
-    ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_NOTICE, 0, ap_server_conf,
-		"%s configured -- resuming normal operations",
-		ap_get_server_version());
-    ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_INFO, 0, ap_server_conf,
-		"Server built: %s", ap_get_server_built());
-
-    show_server_data();
-
-    while (!restart_pending && !shutdown_pending) {
-        perform_idle_server_maintenance(pconf);
-        if (show_settings)
-            display_settings();
-        apr_thread_yield();
-        apr_sleep(SCOREBOARD_MAINTENANCE_INTERVAL);
-    }
-
-
-    /* Shutdown the listen sockets so that we don't get stuck in a blocking call. 
-    shutdown_listeners();*/
-
-    if (shutdown_pending) { /* Got an unload from the console */
-        ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_NOTICE, 0, ap_server_conf,
-            "caught SIGTERM, shutting down");
-
-        DBPRINT0 ("Shutdown pending. Waiting for threads to terminate...\n");
-        while (worker_thread_count > 0)
-            apr_thread_yield();
-
-        return 1;
-    }
-    else {  /* the only other way out is a restart */
-        /* advance to the next generation */
-        /* XXX: we really need to make sure this new generation number isn't in
-         * use by any of the children.
-         */
-        ++ap_my_generation;
-        ap_scoreboard_image->global->running_generation = ap_my_generation;
-        update_scoreboard_global();
-
-    	ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_NOTICE, 0, ap_server_conf,
-		    "Graceful restart requested, doing restart");
-
-        /* Wait for all of the threads to terminate before initiating the restart */
-        DBPRINT0 ("Restart pending. Waiting for threads to terminate...\n");
-        while (worker_thread_count > 0) {
-            apr_thread_yield();
-        }
-        DBPRINT0 ("restarting...\n");
-    }
-
-    return 0;
-}
-
-/* GetCurrentAddressSpace - this should be replaced with the correct header file when available! */
-struct _BogusAddressSpace { int a; int b; int c; char name[]; };
-typedef struct _BogusAddressSpace BogusAddressSpace;
-extern BogusAddressSpace* GetCurrentAddressSpace(void);
-/* GetCurrentAddressSpace */
-
-static int netware_pre_config(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp)
-{
-    int debug;
-    BogusAddressSpace *addrspace = NULL;
-
-    debug = ap_exists_config_define("DEBUG");
-
-    is_graceful = 0;
-    ap_my_pid = getpid();
-    addrspace = GetCurrentAddressSpace();
-    if (addrspace)
-        ap_my_addrspace = apr_pstrdup (p, addrspace->name);
-
-    ap_listen_pre_config();
-    ap_threads_to_start = DEFAULT_START_THREADS;
-    ap_threads_min_free = DEFAULT_MIN_FREE_THREADS;
-    ap_threads_max_free = DEFAULT_MAX_FREE_THREADS;
-    ap_threads_limit = HARD_THREAD_LIMIT;
-    ap_max_requests_per_child = DEFAULT_MAX_REQUESTS_PER_CHILD;
-    ap_extended_status = 0;
-
-    return OK;
-}
-
-static void netware_mpm_hooks(apr_pool_t *p)
-{
-    ap_hook_pre_config(netware_pre_config, NULL, NULL, APR_HOOK_MIDDLE);
-}
-
-void netware_rewrite_args(process_rec *process) 
-{
-    char *def_server_root;
-    char optbuf[3];
-    const char *opt_arg;
-    apr_getopt_t *opt;
-    apr_array_header_t *mpm_new_argv;
-
-
-    atexit (mpm_term);
-    InstallConsoleHandler();
-
-    /* Rewrite process->argv[]; 
-     *
-     * add default -d serverroot from the path of this executable
-     * 
-     * The end result will look like:
-     *     The -d serverroot default from the running executable
-     */
-    if (process->argc > 0) {
-        char *s = apr_pstrdup (process->pconf, process->argv[0]);
-        if (s) {
-            int i, len = strlen(s);
-
-            for (i=len; i; i--) {
-                if (s[i] == '\\' || s[i] == '/') {
-                    s[i] = NULL;
-                    apr_filepath_merge(&def_server_root, NULL, s, 
-                        APR_FILEPATH_TRUENAME, process->pool);
-                    break;
-                }
-            }
-            /* Use process->pool so that the rewritten argv
-            * lasts for the lifetime of the server process,
-            * because pconf will be destroyed after the 
-            * initial pre-flight of the config parser.
-            */
-            mpm_new_argv = apr_array_make(process->pool, process->argc + 2,
-                                  sizeof(const char *));
-            *(const char **)apr_array_push(mpm_new_argv) = process->argv[0];
-            *(const char **)apr_array_push(mpm_new_argv) = "-d";
-            *(const char **)apr_array_push(mpm_new_argv) = def_server_root;
-
-            optbuf[0] = '-';
-            optbuf[2] = '\0';
-            apr_getopt_init(&opt, process->pool, process->argc, (char**) process->argv);
-            while (apr_getopt(opt, AP_SERVER_BASEARGS, optbuf + 1, &opt_arg) == APR_SUCCESS) {
-                switch (optbuf[1]) {
-                default:
-                    *(const char **)apr_array_push(mpm_new_argv) =
-                        apr_pstrdup(process->pool, optbuf);
-
-                    if (opt_arg) {
-                        *(const char **)apr_array_push(mpm_new_argv) = opt_arg;
-                    }
-                    break;
-                }
-            }
-            process->argc = mpm_new_argv->nelts; 
-            process->argv = (const char * const *) mpm_new_argv->elts;
-        }
-    }
-}
-
-static int CommandLineInterpreter(scr_t screenID, const char *commandLine)
-{
-    char *szCommand = "APACHE2 ";
-    int iCommandLen = 8;
-    char szcommandLine[256];
-    char *pID;
-    screenID = screenID;
-
-
-    if (commandLine == NULL)
-        return NOTMYCOMMAND;
-    if (strlen(commandLine) <= strlen(szCommand))
-        return NOTMYCOMMAND;
-
-    strncpy (szcommandLine, commandLine, sizeof(szcommandLine)-1);
-
-    /*  All added commands begin with "APACHE2 " */
-
-    if (!strnicmp(szCommand, szcommandLine, iCommandLen)) {
-        ActivateScreen (getscreenhandle());
-
-        /* If an instance id was not given but the nlm is loaded in 
-            protected space, then the the command belongs to the
-            OS address space instance to pass it on. */
-        pID = strstr (szcommandLine, "-p");
-        if ((pID == NULL) && nlmisloadedprotected())
-            return NOTMYCOMMAND;
-
-        /* If we got an instance id but it doesn't match this 
-            instance of the nlm, pass it on. */
-        if (pID && ap_my_addrspace && strnicmp(&pID[2], ap_my_addrspace, strlen(ap_my_addrspace)))
-            return NOTMYCOMMAND;
-
-        /* If we have determined that this command belongs to this
-            instance of the nlm, then handle it. */
-        if (!strnicmp("RESTART",&szcommandLine[iCommandLen],3)) {
-            printf("Restart Requested...\n");
-            restart();
-        }
-        else if (!strnicmp("VERSION",&szcommandLine[iCommandLen],3)) {
-            printf("Server version: %s\n", ap_get_server_version());
-            printf("Server built:   %s\n", ap_get_server_built());
-        }
-        else if (!strnicmp("MODULES",&szcommandLine[iCommandLen],3)) {
-    	    ap_show_modules();
-        }
-        else if (!strnicmp("DIRECTIVES",&szcommandLine[iCommandLen],3)) {
-	        ap_show_directives();
-        }
-        else if (!strnicmp("SHUTDOWN",&szcommandLine[iCommandLen],3)) {
-            printf("Shutdown Requested...\n");
-            shutdown_pending = 1;
-        }
-        else if (!strnicmp("SETTINGS",&szcommandLine[iCommandLen],3)) {
-            if (show_settings) {
-                show_settings = 0;
-                ClearScreen (getscreenhandle());
-                show_server_data();
-            }
-            else {
-                show_settings = 1;
-                display_settings();
-            }
-        }
-        else {
-            show_settings = 0;
-            if (!strnicmp("HELP",&szcommandLine[iCommandLen],3))
-                printf("Unknown APACHE2 command %s\n", &szcommandLine[iCommandLen]);
-            printf("Usage: APACHE2 [command] [-p <instance ID>]\n");
-            printf("Commands:\n");
-            printf("\tDIRECTIVES - Show directives\n");
-            printf("\tHELP       - Display this help information\n");
-            printf("\tMODULES    - Show a list of the loaded modules\n");
-            printf("\tRESTART    - Reread the configurtion file and restart Apache\n");
-            printf("\tSETTINGS   - Show current thread status\n");
-            printf("\tSHUTDOWN   - Shutdown Apache\n");
-            printf("\tVERSION    - Display the server version information\n");
-        }
-
-        /*  Tell NetWare we handled the command */
-        return HANDLEDCOMMAND;
-    }
-
-    /*  Tell NetWare that the command isn't mine */
-    return NOTMYCOMMAND;
-}
-
-static int InstallConsoleHandler(void)
-{
-    /*  Our command line handler interfaces the system operator
-    with this NLM */
-
-    NX_WRAP_INTERFACE(CommandLineInterpreter, 2, (void*)&(ConsoleHandler.parser));
-
-    ConsoleHandler.rTag = AllocateResourceTag(getnlmhandle(), "Command Line Processor",
-        ConsoleCommandSignature);
-    if (!ConsoleHandler.rTag)
-    {
-        printf("Error on allocate resource tag\n");
-        return 1;
-    }
-
-    RegisterConsoleCommand(&ConsoleHandler);
-
-    /*  The Remove procedure unregisters the console handler */
-
-    return 0;
-}
-
-static void RemoveConsoleHandler(void)
-{
-    UnRegisterConsoleCommand(&ConsoleHandler);
-    NX_UNWRAP_INTERFACE(ConsoleHandler.parser);
-}
-
-static const char *set_threads_to_start(cmd_parms *cmd, void *dummy, const char *arg) 
-{
-    const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
-    if (err != NULL) {
-        return err;
-    }
-
-    ap_threads_to_start = atoi(arg);
-    return NULL;
-}
-
-static const char *set_min_free_threads(cmd_parms *cmd, void *dummy, const char *arg)
-{
-    const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
-    if (err != NULL) {
-        return err;
-    }
-
-    ap_threads_min_free = atoi(arg);
-    if (ap_threads_min_free <= 0) {
-       ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
-                    "WARNING: detected MinSpareServers set to non-positive.");
-       ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
-                    "Resetting to 1 to avoid almost certain Apache failure.");
-       ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
-                    "Please read the documentation.");
-       ap_threads_min_free = 1;
-    }
-       
-    return NULL;
-}
-
-static const char *set_max_free_threads(cmd_parms *cmd, void *dummy, const char *arg)
-{
-    const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
-    if (err != NULL) {
-        return err;
-    }
-
-    ap_threads_max_free = atoi(arg);
-    return NULL;
-}
-
-static const char *set_thread_limit (cmd_parms *cmd, void *dummy, const char *arg) 
-{
-    const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
-    if (err != NULL) {
-        return err;
-    }
-
-    ap_threads_limit = atoi(arg);
-    if (ap_threads_limit > HARD_THREAD_LIMIT) {
-       ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
-                    "WARNING: MaxThreads of %d exceeds compile time limit "
-                    "of %d threads,", ap_threads_limit, HARD_THREAD_LIMIT);
-       ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
-                    " lowering MaxThreads to %d.  To increase, please "
-                    "see the", HARD_THREAD_LIMIT);
-       ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL,
-                    " HARD_THREAD_LIMIT define in %s.",
-                    AP_MPM_HARD_LIMITS_FILE);
-       ap_threads_limit = HARD_THREAD_LIMIT;
-    } 
-    else if (ap_threads_limit < 1) {
-        ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
-            "WARNING: Require MaxThreads > 0, setting to 1");
-        ap_threads_limit = 1;
-    }
-    return NULL;
-}
-
-static const char *set_thread_stacksize(cmd_parms *cmd, void *dummy, 
-                                        const char *arg)
-{
-    const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
-    if (err != NULL) {
-        return err;
-    }
-    
-    ap_thread_stack_size = atoi(arg);
-    return NULL;
-}
-
-static const command_rec netware_mpm_cmds[] = {
-AP_INIT_TAKE1("ThreadStackSize", set_thread_stacksize, NULL, RSRC_CONF,
-              "Stack size each created thread will use."),
-LISTEN_COMMANDS,
-AP_INIT_TAKE1("StartThreads", set_threads_to_start, NULL, RSRC_CONF,
-              "Number of worker threads launched at server startup"),
-AP_INIT_TAKE1("MinSpareThreads", set_min_free_threads, NULL, RSRC_CONF,
-              "Minimum number of idle threads, to handle request spikes"),
-AP_INIT_TAKE1("MaxSpareThreads", set_max_free_threads, NULL, RSRC_CONF,
-              "Maximum number of idle threads"),
-AP_INIT_TAKE1("MaxThreads", set_thread_limit, NULL, RSRC_CONF,
-              "Maximum number of worker threads alive at the same time"),
-{ NULL }
-};
-
-module AP_MODULE_DECLARE_DATA mpm_netware_module = {
-    MPM20_MODULE_STUFF,
-    netware_rewrite_args,   /* hook to run before apache parses args */
-    NULL,			        /* create per-directory config structure */
-    NULL,			        /* merge per-directory config structures */
-    NULL,			        /* create per-server config structure */
-    NULL,			        /* merge per-server config structures */
-    netware_mpm_cmds,       /* command apr_table_t */
-    netware_mpm_hooks,      /* register hooks */
-};
diff --git a/server/mpm/perchild/.cvsignore b/server/mpm/perchild/.cvsignore
deleted file mode 100644
index 84df257..0000000
--- a/server/mpm/perchild/.cvsignore
+++ /dev/null
@@ -1,5 +0,0 @@
-.deps
-.libs
-*.lo
-*.la
-Makefile
diff --git a/server/mpm/perchild/Makefile.in b/server/mpm/perchild/Makefile.in
deleted file mode 100644
index 374f130..0000000
--- a/server/mpm/perchild/Makefile.in
+++ /dev/null
@@ -1,5 +0,0 @@
-
-LTLIBRARY_NAME    = libperchild.la
-LTLIBRARY_SOURCES = perchild.c
-
-include $(top_srcdir)/build/ltlib.mk
diff --git a/server/mpm/perchild/config5.m4 b/server/mpm/perchild/config5.m4
deleted file mode 100644
index bd179ba..0000000
--- a/server/mpm/perchild/config5.m4
+++ /dev/null
@@ -1,6 +0,0 @@
-dnl ## XXX - Need a more thorough check of the proper flags to use
-
-if test "$MPM_NAME" = "perchild" ; then
-
-    APACHE_FAST_OUTPUT(server/mpm/$MPM_NAME/Makefile)
-fi
diff --git a/server/mpm/perchild/mpm.h b/server/mpm/perchild/mpm.h
deleted file mode 100644
index bc4c264..0000000
--- a/server/mpm/perchild/mpm.h
+++ /dev/null
@@ -1,98 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-#include "httpd.h"
-#include "mpm_default.h"
-#include "unixd.h"
-
-#ifndef APACHE_MPM_PERCHILD_H
-#define APACHE_MPM_PERCHILD_H
-
-#define PERCHILD_MPM
-
-#define MPM_NAME "Perchild"
-
-#define AP_MPM_WANT_RECLAIM_CHILD_PROCESSES
-#define AP_MPM_WANT_WAIT_OR_TIMEOUT
-#define AP_MPM_WANT_PROCESS_CHILD_STATUS
-#define AP_MPM_WANT_SET_PIDFILE
-#define AP_MPM_WANT_SET_SCOREBOARD
-#define AP_MPM_WANT_SET_LOCKFILE
-#define AP_MPM_WANT_SET_MAX_REQUESTS
-#define AP_MPM_WANT_SET_COREDUMPDIR
-#define AP_MPM_WANT_SET_ACCEPT_LOCK_MECH
-
-#define MPM_SYNC_CHILD_TABLE()
-#define MPM_CHILD_PID(i) (ap_scoreboard_image->parent[i].pid)
-#define MPM_NOTE_CHILD_KILLED(i) (MPM_CHILD_PID(i) = 0)
-
-/* Table of child status */
-#define SERVER_DEAD 0
-#define SERVER_DYING 1
-#define SERVER_ALIVE 2
-
-typedef struct ap_ctable{
-    pid_t pid;
-    unsigned char status;
-} ap_ctable;
-
-extern int ap_threads_per_child;
-extern int ap_max_daemons_limit;
-extern server_rec *ap_server_conf;
-
-#endif /* APACHE_MPM_PERCHILD_H */
diff --git a/server/mpm/perchild/mpm_default.h b/server/mpm/perchild/mpm_default.h
deleted file mode 100644
index 2874b34..0000000
--- a/server/mpm/perchild/mpm_default.h
+++ /dev/null
@@ -1,113 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-#ifndef APACHE_MPM_DEFAULT_H
-#define APACHE_MPM_DEFAULT_H
-
-/* Number of threads to spawn off by default --- also, if fewer than
- * this free when the caretaker checks, it will spawn more.
- */
-#ifndef DEFAULT_START_THREAD
-#define DEFAULT_START_THREAD 5
-#endif
-
-/* Maximum number of *free* server threads --- more than this, and
- * they will die off.
- */
-
-#ifndef DEFAULT_MAX_SPARE_THREAD
-#define DEFAULT_MAX_SPARE_THREAD 10
-#endif
-
-/* Minimum --- fewer than this, and more will be created */
-
-#ifndef DEFAULT_MIN_SPARE_THREAD
-#define DEFAULT_MIN_SPARE_THREAD 5
-#endif
-
-/* Number of servers to spawn off by default
- */
-#ifndef DEFAULT_NUM_DAEMON
-#define DEFAULT_NUM_DAEMON 2
-#endif
-
-/* File used for accept locking, when we use a file */
-#ifndef DEFAULT_LOCKFILE
-#define DEFAULT_LOCKFILE "logs/accept.lock"
-#endif
-
-/* Where the main/parent process's pid is logged */
-#ifndef DEFAULT_PIDLOG
-#define DEFAULT_PIDLOG "logs/httpd.pid"
-#endif
-
-/*
- * Interval, in microseconds, between scoreboard maintenance.
- */
-#ifndef SCOREBOARD_MAINTENANCE_INTERVAL
-#define SCOREBOARD_MAINTENANCE_INTERVAL 1000000
-#endif
-
-/* Number of requests to try to handle in a single process.  If <= 0,
- * the children don't die off.
- */
-#ifndef DEFAULT_MAX_REQUESTS_PER_CHILD
-#define DEFAULT_MAX_REQUESTS_PER_CHILD 10000
-#endif
-
-#endif /* AP_MPM_DEFAULT_H */
diff --git a/server/mpm/perchild/perchild.c b/server/mpm/perchild/perchild.c
deleted file mode 100644
index 82b111a..0000000
--- a/server/mpm/perchild/perchild.c
+++ /dev/null
@@ -1,2050 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-#include "apr_hash.h"
-#include "apr_strings.h"
-#include "apr_pools.h"
-#include "apr_portable.h"
-#include "apr_file_io.h"
-#include "apr_signal.h"
-
-#define APR_WANT_IOVEC
-#include "apr_want.h"
-
-#if APR_HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#if APR_HAVE_SYS_SOCKET_H
-#include <sys/socket.h>
-#endif
-
-#if !APR_HAS_THREADS
-#error The perchild MPM requires APR threads, but they are unavailable.
-#endif  
-
-#define CORE_PRIVATE 
- 
-#include "ap_config.h"
-#include "httpd.h" 
-#include "http_main.h" 
-#include "http_log.h" 
-#include "http_config.h"    /* for read_config */ 
-#include "http_core.h"      /* for get_remote_host */ 
-#include "http_protocol.h"
-#include "http_connection.h"
-#include "ap_mpm.h"
-#include "unixd.h"
-#include "mpm_common.h"
-#include "ap_listen.h"
-#include "mpm_default.h"
-#include "mpm.h"
-#include "scoreboard.h"
-#include "util_filter.h"
-
-/* ### should be APR-ized */
-#include <poll.h>
-#include <grp.h>
-#include <pwd.h>
-#include <sys/stat.h>
-#include <sys/un.h>
-#include <setjmp.h>
-#ifdef HAVE_SYS_PROCESSOR_H
-#include <sys/processor.h> /* for bindprocessor() */
-#endif
-
-/*
- * Define some magic numbers that we use for the state of the incomming
- * request. These must be < 0 so they don't collide with a file descriptor.
- */
-#define AP_PERCHILD_THISCHILD -1
-#define AP_PERCHILD_OTHERCHILD -2
-
-/* Limit on the threads per process.  Clients will be locked out if more than
- * this * server_limit are needed.
- *
- * We keep this for one reason it keeps the size of the scoreboard file small
- * enough that we can read the whole thing without worrying too much about
- * the overhead.
- */
-#ifndef DEFAULT_THREAD_LIMIT
-#define DEFAULT_THREAD_LIMIT 64 
-#endif
-
-/* Admin can't tune ThreadLimit beyond MAX_THREAD_LIMIT.  We want
- * some sort of compile-time limit to help catch typos.
- */
-#ifndef MAX_THREAD_LIMIT
-#define MAX_THREAD_LIMIT 20000
-#endif 
-
-/* Limit on the total --- clients will be locked out if more servers than
- * this are needed.  It is intended solely to keep the server from crashing
- * when things get out of hand.
- *
- * We keep a hard maximum number of servers, for two reasons --- first off,
- * in case something goes seriously wrong, we want to stop the fork bomb
- * short of actually crashing the machine we're running on by filling some
- * kernel table.  Secondly, it keeps the size of the scoreboard file small
- * enough that we can read the whole thing without worrying too much about
- * the overhead.
- */
-#ifndef DEFAULT_SERVER_LIMIT
-#define DEFAULT_SERVER_LIMIT 8 
-#endif
-
-/* Admin can't tune ServerLimit beyond MAX_SERVER_LIMIT.  We want
- * some sort of compile-time limit to help catch typos.
- */
-#ifndef MAX_SERVER_LIMIT
-#define MAX_SERVER_LIMIT 20000
-#endif
-
-/*
- * Actual definitions of config globals
- */
-
-static int threads_to_start = 0;         /* Worker threads per child */
-static int min_spare_threads = 0;
-static int max_spare_threads = 0;
-static int max_threads = 0;
-static int server_limit = DEFAULT_SERVER_LIMIT;
-static int first_server_limit;
-static int thread_limit = DEFAULT_THREAD_LIMIT;
-static int first_thread_limit;
-static int changed_limit_at_restart;
-static int max_requests_per_child = 0;
-static int num_daemons = 0;
-static int curr_child_num = 0;
-static int workers_may_exit = 0;
-static int requests_this_child;
-static int num_listenfds = 0;
-static apr_socket_t **listenfds;
-static jmp_buf jmpbuffer;
-
-struct child_info_t {
-    uid_t uid;
-    gid_t gid;
-    int sd;
-};
-
-typedef struct {
-    const char *sockname;    /* The base name for the socket */
-    const char *fullsockname;   /* socket base name + extension */
-    int        sd;       /* The socket descriptor */
-    int        sd2;       /* The socket descriptor */
-} perchild_server_conf;
-
-typedef struct child_info_t child_info_t;
-
-/* Tables used to determine the user and group each child process should
- * run as.  The hash table is used to correlate a server name with a child
- * process.
- */
-static child_info_t *child_info_table;
-static int          *thread_socket_table;
-struct ap_ctable    *ap_child_table;
-
-/*
- * The max child slot ever assigned, preserved across restarts.  Necessary
- * to deal with NumServers changes across AP_SIG_GRACEFUL restarts.  We 
- * use this value to optimize routines that have to scan the entire child 
- * table.
- *
- * XXX - It might not be worth keeping this code in. There aren't very
- * many child processes in this MPM.
- */
-int ap_max_daemons_limit = -1;
-int ap_threads_per_child; /* XXX not part of API!  axe it! */
-
-module AP_MODULE_DECLARE_DATA mpm_perchild_module;
-
-static apr_file_t *pipe_of_death_in = NULL;
-static apr_file_t *pipe_of_death_out = NULL;
-static apr_lock_t *pipe_of_death_mutex;
-
-/* *Non*-shared http_main globals... */
-
-server_rec *ap_server_conf;
-
-/* one_process --- debugging mode variable; can be set from the command line
- * with the -X flag.  If set, this gets you the child_main loop running
- * in the process which originally started up (no detach, no make_child),
- * which is a pretty nice debugging environment.  (You'll get a SIGHUP
- * early in standalone_main; just continue through.  This is the server
- * trying to kill off any child processes which it might have lying
- * around --- Apache doesn't keep track of their pids, it just sends
- * SIGHUP to the process group, ignoring it in the root process.
- * Continue through and you'll be fine.).
- */
-
-static int one_process = 0;
-
-#ifdef DEBUG_SIGSTOP
-int raise_sigstop_flags;
-#endif
-
-static apr_pool_t *pconf;              /* Pool for config stuff */
-static apr_pool_t *pchild;             /* Pool for httpd child stuff */
-static apr_pool_t *thread_pool_parent; /* Parent of per-thread pools */
-static apr_lock_t *thread_pool_parent_mutex;
-
-static int child_num;
-static unsigned int my_pid; /* Linux getpid() doesn't work except in 
-                      main thread. Use this instead */
-/* Keep track of the number of worker threads currently active */
-static int worker_thread_count;
-static apr_lock_t *worker_thread_count_mutex;
-static int *worker_thread_free_ids;
-static apr_threadattr_t *worker_thread_attr;
-
-/* Keep track of the number of idle worker threads */
-static int idle_thread_count;
-static apr_lock_t *idle_thread_count_mutex;
-
-/* Locks for accept serialization */
-#ifdef NO_SERIALIZED_ACCEPT
-#define SAFE_ACCEPT(stmt) APR_SUCCESS
-#else
-#define SAFE_ACCEPT(stmt) (stmt)
-static apr_lock_t *process_accept_mutex;
-#endif /* NO_SERIALIZED_ACCEPT */
-static apr_lock_t *thread_accept_mutex;
-
-AP_DECLARE(apr_status_t) ap_mpm_query(int query_code, int *result)
-{
-    switch(query_code){
-        case AP_MPMQ_MAX_DAEMON_USED:
-            *result = ap_max_daemons_limit;
-            return APR_SUCCESS;
-        case AP_MPMQ_IS_THREADED:
-            *result = AP_MPMQ_DYNAMIC;
-            return APR_SUCCESS;
-        case AP_MPMQ_IS_FORKED:
-            *result = AP_MPMQ_STATIC;
-            return APR_SUCCESS;
-        case AP_MPMQ_HARD_LIMIT_DAEMONS:
-            *result = server_limit;
-            return APR_SUCCESS;
-        case AP_MPMQ_HARD_LIMIT_THREADS:
-            *result = thread_limit;
-            return APR_SUCCESS;
-        case AP_MPMQ_MAX_THREADS:
-            *result = max_threads;
-            return APR_SUCCESS;
-        case AP_MPMQ_MIN_SPARE_DAEMONS:
-            *result = 0;
-            return APR_SUCCESS;
-        case AP_MPMQ_MIN_SPARE_THREADS:    
-            *result = min_spare_threads;
-            return APR_SUCCESS;
-        case AP_MPMQ_MAX_SPARE_DAEMONS:
-            *result = 0;
-            return APR_SUCCESS;
-        case AP_MPMQ_MAX_SPARE_THREADS:
-            *result = max_spare_threads;
-            return APR_SUCCESS;
-        case AP_MPMQ_MAX_REQUESTS_DAEMON:
-            *result = max_requests_per_child;
-            return APR_SUCCESS; 
-        case AP_MPMQ_MAX_DAEMONS:
-            *result = num_daemons;
-            return APR_SUCCESS;
-    }
-    return APR_ENOTIMPL;
-}
-
-/* a clean exit from a child with proper cleanup */
-static void clean_child_exit(int code)
-{
-    if (pchild) {
-        apr_pool_destroy(pchild);
-    }
-    exit(code);
-}
-
-/* handle all varieties of core dumping signals */
-static void sig_coredump(int sig)
-{
-    chdir(ap_coredump_dir);
-    apr_signal(sig, SIG_DFL);
-    kill(getpid(), sig);
-    /* At this point we've got sig blocked, because we're still inside
-     * the signal handler.  When we leave the signal handler it will
-     * be unblocked, and we'll take the signal... and coredump or whatever
-     * is appropriate for this particular Unix.  In addition the parent
-     * will see the real signal we received -- whereas if we called
-     * abort() here, the parent would only see SIGABRT.
-     */
-}
-
-static void just_die(int sig)
-{
-    clean_child_exit(0);
-}
-
-/*****************************************************************
- * Connection structures and accounting...
- */
-
-/* volatile just in case */
-static int volatile shutdown_pending;
-static int volatile restart_pending;
-static int volatile is_graceful;
-static int volatile child_fatal;
-/* we don't currently track ap_my_generation, but mod_status 
- * references it so it must be defined */
-ap_generation_t volatile ap_my_generation=0;
-
-/*
- * ap_start_shutdown() and ap_start_restart(), below, are a first stab at
- * functions to initiate shutdown or restart without relying on signals. 
- * Previously this was initiated in sig_term() and restart() signal handlers, 
- * but we want to be able to start a shutdown/restart from other sources --
- * e.g. on Win32, from the service manager. Now the service manager can
- * call ap_start_shutdown() or ap_start_restart() as appropiate.  Note that
- * these functions can also be called by the child processes, since global
- * variables are no longer used to pass on the required action to the parent.
- *
- * These should only be called from the parent process itself, since the
- * parent process will use the shutdown_pending and restart_pending variables
- * to determine whether to shutdown or restart. The child process should
- * call signal_parent() directly to tell the parent to die -- this will
- * cause neither of those variable to be set, which the parent will
- * assume means something serious is wrong (which it will be, for the
- * child to force an exit) and so do an exit anyway.
- */
-
-static void ap_start_shutdown(void)
-{
-    if (shutdown_pending == 1) {
-        /* Um, is this _probably_ not an error, if the user has
-         * tried to do a shutdown twice quickly, so we won't
-         * worry about reporting it.
-         */
-        return;
-    }
-    shutdown_pending = 1;
-}
-
-/* do a graceful restart if graceful == 1 */
-static void ap_start_restart(int graceful)
-{
-
-    if (restart_pending == 1) {
-        /* Probably not an error - don't bother reporting it */
-        return;
-    }
-    restart_pending = 1;
-    is_graceful = graceful;
-    if (is_graceful) {
-        apr_pool_cleanup_kill(pconf, NULL, ap_cleanup_scoreboard);
-    }
-}
-
-static void sig_term(int sig)
-{
-    ap_start_shutdown();
-}
-
-static void restart(int sig)
-{
-#ifndef WIN32
-    ap_start_restart(sig == AP_SIG_GRACEFUL);
-#else
-    ap_start_restart(1);
-#endif
-}
-
-static void set_signals(void)
-{
-#ifndef NO_USE_SIGACTION
-    struct sigaction sa;
-
-    sigemptyset(&sa.sa_mask);
-    sa.sa_flags = 0;
-
-    if (!one_process) {
-        sa.sa_handler = sig_coredump;
-#if defined(SA_ONESHOT)
-        sa.sa_flags = SA_ONESHOT;
-#elif defined(SA_RESETHAND)
-        sa.sa_flags = SA_RESETHAND;
-#endif
-        if (sigaction(SIGSEGV, &sa, NULL) < 0)
-            ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf,
-                         "sigaction(SIGSEGV)");
-#ifdef SIGBUS
-        if (sigaction(SIGBUS, &sa, NULL) < 0)
-            ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf,
-                         "sigaction(SIGBUS)");
-#endif
-#ifdef SIGABORT
-        if (sigaction(SIGABORT, &sa, NULL) < 0)
-            ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf,
-                         "sigaction(SIGABORT)");
-#endif
-#ifdef SIGABRT
-        if (sigaction(SIGABRT, &sa, NULL) < 0)
-            ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf,
-                         "sigaction(SIGABRT)");
-#endif
-#ifdef SIGILL
-        if (sigaction(SIGILL, &sa, NULL) < 0)
-            ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf,
-                         "sigaction(SIGILL)");
-#endif
-        sa.sa_flags = 0;
-    }
-    sa.sa_handler = sig_term;
-    if (sigaction(SIGTERM, &sa, NULL) < 0)
-        ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf,
-                     "sigaction(SIGTERM)");
-#ifdef SIGINT
-    if (sigaction(SIGINT, &sa, NULL) < 0)
-        ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf,
-                     "sigaction(SIGINT)");
-#endif
-#ifdef SIGXCPU
-    sa.sa_handler = SIG_DFL;
-    if (sigaction(SIGXCPU, &sa, NULL) < 0)
-        ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf,
-                     "sigaction(SIGXCPU)");
-#endif
-#ifdef SIGXFSZ
-    sa.sa_handler = SIG_DFL;
-    if (sigaction(SIGXFSZ, &sa, NULL) < 0)
-        ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf,
-                     "sigaction(SIGXFSZ)");
-#endif
-#ifdef SIGPIPE
-    sa.sa_handler = SIG_IGN;
-    if (sigaction(SIGPIPE, &sa, NULL) < 0)
-        ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf,
-                     "sigaction(SIGPIPE)");
-#endif
-
-    /* we want to ignore HUPs and AP_SIG_GRACEFUL while we're busy 
-     * processing one */
-    sigaddset(&sa.sa_mask, SIGHUP);
-    sigaddset(&sa.sa_mask, AP_SIG_GRACEFUL);
-    sa.sa_handler = restart;
-    if (sigaction(SIGHUP, &sa, NULL) < 0)
-        ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf,
-                     "sigaction(SIGHUP)");
-    if (sigaction(AP_SIG_GRACEFUL, &sa, NULL) < 0)
-        ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf,
-                     "sigaction(" AP_SIG_GRACEFUL_STRING ")");
-#else
-    if (!one_process) {
-        apr_signal(SIGSEGV, sig_coredump);
-#ifdef SIGBUS
-        apr_signal(SIGBUS, sig_coredump);
-#endif /* SIGBUS */
-#ifdef SIGABORT
-        apr_signal(SIGABORT, sig_coredump);
-#endif /* SIGABORT */
-#ifdef SIGABRT
-        apr_signal(SIGABRT, sig_coredump);
-#endif /* SIGABRT */
-#ifdef SIGILL
-        apr_signal(SIGILL, sig_coredump);
-#endif /* SIGILL */
-#ifdef SIGXCPU
-        apr_signal(SIGXCPU, SIG_DFL);
-#endif /* SIGXCPU */
-#ifdef SIGXFSZ
-        apr_signal(SIGXFSZ, SIG_DFL);
-#endif /* SIGXFSZ */
-    }
-
-    apr_signal(SIGTERM, sig_term);
-#ifdef SIGHUP
-    apr_signal(SIGHUP, restart);
-#endif /* SIGHUP */
-#ifdef AP_SIG_GRACEFUL
-    apr_signal(AP_SIG_GRACEFUL, restart);
-#endif /* AP_SIG_GRACEFUL */
-#ifdef SIGPIPE
-    apr_signal(SIGPIPE, SIG_IGN);
-#endif /* SIGPIPE */
-
-#endif
-}
-
-/*****************************************************************
- * Here follows a long bunch of generic server bookkeeping stuff...
- */
-
-int ap_graceful_stop_signalled(void)
-{
-    /* XXX - Does this really work? - Manoj */
-    return is_graceful;
-}
-
-/*****************************************************************
- * Child process main loop.
- */
-
-static void process_socket(apr_pool_t *p, apr_socket_t *sock, long conn_id)
-{
-    conn_rec *current_conn;
-    int csd;
-    apr_status_t rv;
-    int thread_num = conn_id % thread_limit;
-    ap_sb_handle_t *sbh;
-
-    if ((rv = apr_os_sock_get(&csd, sock)) != APR_SUCCESS) {
-        ap_log_error(APLOG_MARK, APLOG_ERR, rv, NULL, "apr_os_sock_get");
-    }
-
-    if (csd >= FD_SETSIZE) {
-        ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_WARNING, 0, NULL,
-                     "new file descriptor %d is too large; you probably need "
-                     "to rebuild Apache with a larger FD_SETSIZE "
-                     "(currently %d)", 
-                     csd, FD_SETSIZE);
-        apr_socket_close(sock);
-        return;
-    }
-
-    if (thread_socket_table[thread_num] < 0) {
-        ap_sock_disable_nagle(sock);
-    }
-
-    ap_create_sb_handle(&sbh, p, conn_id / thread_limit, thread_num);
-    current_conn = ap_run_create_connection(p, ap_server_conf, sock, conn_id, sbh);
-    if (current_conn) {
-        ap_process_connection(current_conn, sock);
-        ap_lingering_close(current_conn);
-    }
-}
-
-static void *worker_thread(apr_thread_t *, void *);
-
-/* Starts a thread as long as we're below max_threads */
-static int start_thread(void)
-{
-    apr_thread_t *thread;
-    int rc;
-
-    apr_lock_acquire(worker_thread_count_mutex);
-    if (worker_thread_count < max_threads - 1) {
-        rc = apr_thread_create(&thread, worker_thread_attr, worker_thread,
-                 &worker_thread_free_ids[worker_thread_count], pchild);
-        if (rc != APR_SUCCESS) {
-            ap_log_error(APLOG_MARK, APLOG_ALERT, rc, ap_server_conf,
-                         "apr_thread_create: unable to create worker thread");
-            /* In case system resources are maxxed out, we don't want
-               Apache running away with the CPU trying to fork over and
-               over and over again if we exit. */
-            sleep(10);
-            workers_may_exit = 1;
-            apr_lock_release(worker_thread_count_mutex);
-            return 0;
-        }
-        else {
-            worker_thread_count++;
-        }
-    }
-    else {
-        static int reported = 0;
-        
-        if (!reported) {
-            ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0,
-                         ap_server_conf,
-                         "server reached MaxThreadsPerChild setting, "
-                         "consider raising the MaxThreadsPerChild or "
-                         "NumServers settings");
-            reported = 1;
-        }
-        apr_lock_release(worker_thread_count_mutex);
-        return 0;
-    }
-    apr_lock_release(worker_thread_count_mutex);
-    return 1;
-
-}
-/* Sets workers_may_exit if we received a character on the pipe_of_death */
-static void check_pipe_of_death(void)
-{
-    apr_lock_acquire(pipe_of_death_mutex);
-    if (!workers_may_exit) {
-        int ret;
-        char pipe_read_char;
-        apr_size_t n = 1;
-
-        ret = apr_recv(listenfds[0], &pipe_read_char, &n);
-        if (APR_STATUS_IS_EAGAIN(ret)) {
-            /* It lost the lottery. It must continue to suffer
-             * through a life of servitude. */
-        }
-        else {
-            /* It won the lottery (or something else is very
-             * wrong). Embrace death with open arms. */
-            workers_may_exit = 1;
-        }
-    }
-    apr_lock_release(pipe_of_death_mutex);
-}
-
-/* idle_thread_count should be incremented before starting a worker_thread */
-
-static void *worker_thread(apr_thread_t *thd, void *arg)
-{
-    apr_socket_t *csd = NULL;
-    apr_pool_t *tpool;      /* Pool for this thread           */
-    apr_pool_t *ptrans;     /* Pool for per-transaction stuff */
-    apr_socket_t *sd = NULL;
-    volatile int last_pollfd = 0;
-    volatile int thread_just_started = 1;
-    int srv;
-    int curr_pollfd;
-    int thread_num = *((int *) arg);
-    long conn_id = child_num * thread_limit + thread_num;
-    apr_pollfd_t *pollset;
-    int n;
-    apr_status_t rv;
-
-    apr_lock_acquire(thread_pool_parent_mutex);
-    apr_pool_create(&tpool, thread_pool_parent);
-    apr_lock_release(thread_pool_parent_mutex);
-    apr_pool_create(&ptrans, tpool);
-
-    (void) ap_update_child_status_from_indexes(child_num, thread_num, 
-                                               SERVER_STARTING,
-                                               (request_rec *) NULL);
-
-    apr_poll_setup(&pollset, num_listenfds+1, tpool);
-    for(n = 0; n <= num_listenfds; ++n) {
-        apr_poll_socket_add(pollset, listenfds[n], APR_POLLIN);
-    }
-
-    while (!workers_may_exit) {
-        workers_may_exit |= (max_requests_per_child != 0)
-                            && (requests_this_child <= 0);
-        if (workers_may_exit) break;
-        if (!thread_just_started) {
-            apr_lock_acquire(idle_thread_count_mutex);
-            if (idle_thread_count < max_spare_threads) {
-                idle_thread_count++;
-                apr_lock_release(idle_thread_count_mutex);
-            }
-            else {
-                apr_lock_release(idle_thread_count_mutex);
-                break;
-            }
-        }
-        else {
-            thread_just_started = 0;
-        }
-
-        (void) ap_update_child_status_from_indexes(child_num, thread_num, 
-                                                   SERVER_READY,
-                                                   (request_rec *) NULL);
-
-        apr_lock_acquire(thread_accept_mutex);
-        if (workers_may_exit) {
-            apr_lock_release(thread_accept_mutex);
-            break;
-        }
-        if ((rv = SAFE_ACCEPT(apr_lock_acquire(process_accept_mutex)))
-            != APR_SUCCESS) {
-            ap_log_error(APLOG_MARK, APLOG_EMERG, rv, ap_server_conf,
-                         "apr_lock_acquire failed. Attempting to shutdown "
-                         "process gracefully.");
-            workers_may_exit = 1;
-        }
-
-        while (!workers_may_exit) {
-            apr_int16_t event;
-            srv = apr_poll(pollset, &n, -1);
-
-            if (srv != APR_SUCCESS) {
-                if (APR_STATUS_IS_EINTR(srv)) {
-                    continue;
-                }
-
-                /* apr_poll() will only return errors in catastrophic
-                 * circumstances. Let's try exiting gracefully, for now. */
-                ap_log_error(APLOG_MARK, APLOG_ERR, srv, (const server_rec *)
-                             ap_server_conf, "apr_poll: (listen)");
-                workers_may_exit = 1;
-            }
-            if (workers_may_exit) break;
-
-            apr_poll_revents_get(&event, listenfds[0], pollset);
-            if (event & APR_POLLIN) {
-                /* A process got a signal on the shutdown pipe. Check if we're
-                 * the lucky process to die. */
-                check_pipe_of_death();
-                continue;
-            }
-            
-            apr_poll_revents_get(&event, listenfds[1], pollset);
-            if (event & APR_POLLIN || event & APR_POLLOUT) {
-                /* This request is from another child in our current process.
-                 * We should set a flag here, and then below we will read
-                 * two bytes (the socket number and the NULL byte.
-                 */
-                thread_socket_table[thread_num] = AP_PERCHILD_OTHERCHILD;
-                goto got_from_other_child;
-            }
-
-            if (num_listenfds == 1) {
-                sd = ap_listeners->sd;
-                goto got_fd;
-            }
-            else {
-                /* find a listener */
-                curr_pollfd = last_pollfd;
-                do {
-                    curr_pollfd++;
-                    if (curr_pollfd > num_listenfds) {
-                        curr_pollfd = 1;
-                    }
-                    /* XXX: Should we check for POLLERR? */
-                    apr_poll_revents_get(&event, listenfds[curr_pollfd],
-                                         pollset);
-                    if (event & APR_POLLIN) {
-                        last_pollfd = curr_pollfd;
-                        sd = listenfds[curr_pollfd];
-                        goto got_fd;
-                    }
-                } while (curr_pollfd != last_pollfd);
-            }
-        }
-    got_fd:
-        if (!workers_may_exit) {
-            if ((rv = apr_accept(&csd, sd, ptrans)) != APR_SUCCESS) {
-                ap_log_error(APLOG_MARK, APLOG_ERR, rv, ap_server_conf,
-                             "apr_accept");
-            }
-            if ((rv = SAFE_ACCEPT(apr_lock_release(process_accept_mutex)))
-                != APR_SUCCESS) {
-                ap_log_error(APLOG_MARK, APLOG_EMERG, rv, ap_server_conf,
-                             "apr_lock_release failed. Attempting to shutdown "
-                             "process gracefully.");
-                workers_may_exit = 1;
-            }
-            apr_lock_release(thread_accept_mutex);
-            apr_lock_acquire(idle_thread_count_mutex);
-            if (idle_thread_count > min_spare_threads) {
-                idle_thread_count--;
-            }
-            else {
-                if (!start_thread()) {
-                    idle_thread_count--;
-                }
-            }
-            apr_lock_release(idle_thread_count_mutex);
-        got_from_other_child:
-            if (thread_socket_table[thread_num] == AP_PERCHILD_OTHERCHILD) {
-                struct msghdr msg;
-                struct cmsghdr *cmsg;
-                char sockname[80];
-                struct iovec iov;
-                int ret, sd, dp;
-
-                iov.iov_base = sockname;
-                iov.iov_len = 80;
-
-                msg.msg_name = NULL;
-                msg.msg_namelen = 0;
-                msg.msg_iov = &iov;
-                msg.msg_iovlen = 1;
-
-                cmsg = apr_palloc(ptrans, sizeof(*cmsg) + sizeof(sd));
-                cmsg->cmsg_len = sizeof(*cmsg) + sizeof(sd);
-                msg.msg_control = (caddr_t)cmsg;
-                msg.msg_controllen = cmsg->cmsg_len;
-                msg.msg_flags = 0;
-                
-                ret = recvmsg(child_info_table[child_num].sd, &msg, 0);
-
-                memcpy(&dp, CMSG_DATA(cmsg), sizeof(dp));
-
-                thread_socket_table[thread_num] = dp;
-                apr_os_sock_put(&csd, &child_info_table[child_num].sd, ptrans);
-            }
-            if (setjmp(jmpbuffer) != 1) {
-                process_socket(ptrans, csd, conn_id);
-            }
-            else {
-                thread_socket_table[thread_num] = AP_PERCHILD_THISCHILD;
-            }  
-            requests_this_child--;
-        }
-        else {
-            if ((rv = SAFE_ACCEPT(apr_lock_release(process_accept_mutex)))
-                != APR_SUCCESS) {
-                ap_log_error(APLOG_MARK, APLOG_EMERG, rv, ap_server_conf,
-                             "apr_lock_release failed. Attempting to shutdown "
-                             "process gracefully.");
-                workers_may_exit = 1;
-            }
-            apr_lock_release(thread_accept_mutex);
-            apr_lock_acquire(idle_thread_count_mutex);
-            idle_thread_count--;
-            apr_lock_release(idle_thread_count_mutex);
-        break;
-        }
-        apr_pool_clear(ptrans);
-    }
-
-    apr_lock_acquire(thread_pool_parent_mutex);
-    ap_update_child_status_from_indexes(child_num, thread_num, SERVER_DEAD,
-                                        (request_rec *) NULL);
-    apr_pool_destroy(tpool);
-    apr_lock_release(thread_pool_parent_mutex);
-    apr_lock_acquire(worker_thread_count_mutex);
-    worker_thread_count--;
-    worker_thread_free_ids[worker_thread_count] = thread_num;
-    if (worker_thread_count == 0) {
-        /* All the threads have exited, now finish the shutdown process
-         * by signalling the sigwait thread */
-        kill(my_pid, SIGTERM);
-    }
-    apr_lock_release(worker_thread_count_mutex);
-
-    return NULL;
-}
-
-/* Set group privileges.
- *
- * Note that we use the username as set in the config files, rather than
- * the lookup of to uid --- the same uid may have multiple passwd entries,
- * with different sets of groups for each.
- */
-
-static int set_group_privs(uid_t uid, gid_t gid)
-{
-    if (!geteuid()) {
-        const char *name;
-
-        /* Get username if passed as a uid */
-
-        struct passwd *ent;
-
-        if ((ent = getpwuid(uid)) == NULL) {
-            ap_log_error(APLOG_MARK, APLOG_ALERT, errno, NULL,
-                         "getpwuid: couldn't determine user name from uid %u, "
-                         "you probably need to modify the User directive",
-                         (unsigned)uid);
-            return -1;
-        }
-
-        name = ent->pw_name;
-
-        /*
-         * Set the GID before initgroups(), since on some platforms
-         * setgid() is known to zap the group list.
-         */
-        if (setgid(gid) == -1) {
-            ap_log_error(APLOG_MARK, APLOG_ALERT, errno, NULL,
-                         "setgid: unable to set group id to Group %u",
-                         (unsigned)gid);
-            return -1;
-        }
-
-        /* Reset `groups' attributes. */
-
-        if (initgroups(name, gid) == -1) {
-            ap_log_error(APLOG_MARK, APLOG_ALERT, errno, NULL,
-                         "initgroups: unable to set groups for User %s "
-                         "and Group %u", name, (unsigned)gid);
-            return -1;
-        }
-    }
-    return 0;
-}
-
-
-static int perchild_setup_child(int childnum)
-{
-    child_info_t *ug = &child_info_table[childnum];
-
-    if (ug->uid == -1 && ug->gid == -1) {
-        return unixd_setup_child();
-    }
-    if (set_group_privs(ug->uid, ug->gid)) {
-        return -1;
-    }
-    /* Only try to switch if we're running as root */
-    if (!geteuid()
-        && (
-#ifdef _OSD_POSIX
-            os_init_job_environment(server_conf, unixd_config.user_name,
-                                    one_process) != 0 ||
-#endif
-            setuid(ug->uid) == -1)) {
-        ap_log_error(APLOG_MARK, APLOG_ALERT, errno, NULL,
-                     "setuid: unable to change to uid: %ld",
-                     (long) ug->uid);
-        return -1;
-    }
-    return 0;
-}
-
-static int check_signal(int signum)
-{
-    switch (signum) {
-    case SIGTERM:
-    case SIGINT:
-        just_die(signum);
-        return 1;
-    }
-    return 0;
-}                                                                               
-
-static void child_main(int child_num_arg)
-{
-    int i;
-    ap_listen_rec *lr;
-    apr_status_t rv;
-
-    my_pid = getpid();
-    child_num = child_num_arg;
-    apr_pool_create(&pchild, pconf);
-
-    /*stuff to do before we switch id's, so we have permissions.*/
-
-    rv = SAFE_ACCEPT(apr_lock_child_init(&process_accept_mutex, ap_lock_fname,
-                                         pchild));
-    if (rv != APR_SUCCESS) {
-        ap_log_error(APLOG_MARK, APLOG_EMERG, rv, ap_server_conf,
-                     "Couldn't initialize cross-process lock in child");
-        clean_child_exit(APEXIT_CHILDFATAL);
-    }
-
-    if (perchild_setup_child(child_num)) {
-        clean_child_exit(APEXIT_CHILDFATAL);
-    }
-
-    ap_run_child_init(pchild, ap_server_conf);
-
-    /*done with init critical section */
-
-    apr_setup_signal_thread();
-
-    requests_this_child = max_requests_per_child;
-    
-    /* Set up the pollfd array, num_listenfds + 1 for the pipe and 1 for
-     * the child socket.
-     */
-    listenfds = apr_pcalloc(pchild, sizeof(*listenfds) * (num_listenfds + 2));
-#if APR_FILES_AS_SOCKETS
-    apr_socket_from_file(&listenfds[0], pipe_of_death_in);
-#endif
-
-    /* The child socket */
-    apr_os_sock_put(&listenfds[1], &child_info_table[child_num].sd, pchild);
-
-    num_listenfds++;
-    for (lr = ap_listeners, i = 2; i <= num_listenfds; lr = lr->next, ++i) {
-        listenfds[i]=lr->sd;
-    }
-
-    /* Setup worker threads */
-
-    if (threads_to_start > max_threads) {
-        threads_to_start = max_threads;
-    }
-    idle_thread_count = threads_to_start;
-    worker_thread_count = 0;
-    worker_thread_free_ids = (int *)apr_pcalloc(pchild, thread_limit * sizeof(int));
-    for (i = 0; i < max_threads; i++) {
-        worker_thread_free_ids[i] = i;
-    }
-    apr_pool_create(&thread_pool_parent, pchild);
-    apr_lock_create(&thread_pool_parent_mutex, APR_MUTEX, APR_INTRAPROCESS, 
-                    APR_LOCK_DEFAULT, NULL, pchild);
-    apr_lock_create(&idle_thread_count_mutex, APR_MUTEX, APR_INTRAPROCESS, 
-                    APR_LOCK_DEFAULT, NULL, pchild);
-    apr_lock_create(&worker_thread_count_mutex, APR_MUTEX, APR_INTRAPROCESS,
-                    APR_LOCK_DEFAULT, NULL, pchild);
-    apr_lock_create(&pipe_of_death_mutex, APR_MUTEX, APR_INTRAPROCESS,
-                    APR_LOCK_DEFAULT, NULL, pchild);
-    apr_lock_create(&thread_accept_mutex, APR_MUTEX, APR_INTRAPROCESS,
-                    APR_LOCK_DEFAULT, NULL, pchild);
-
-    apr_threadattr_create(&worker_thread_attr, pchild);
-    apr_threadattr_detach_set(worker_thread_attr, 1);                                     
-
-    /* We are creating worker threads right now */
-    for (i=0; i < threads_to_start; i++) {
-        /* start_thread shouldn't fail here */
-        if (!start_thread()) {
-            break;
-        }
-    }
-
-    apr_signal_thread(check_signal);
-}
-
-static int make_child(server_rec *s, int slot)
-{
-    int pid;
-
-    if (slot + 1 > ap_max_daemons_limit) {
-        ap_max_daemons_limit = slot + 1;
-    }
-
-    if (one_process) {
-        set_signals();
-        ap_child_table[slot].pid = getpid();
-        ap_child_table[slot].status = SERVER_ALIVE;
-        child_main(slot);
-    }
-    (void) ap_update_child_status_from_indexes(slot, 0, SERVER_STARTING,
-                                               (request_rec *) NULL);
-
-    if ((pid = fork()) == -1) {
-        ap_log_error(APLOG_MARK, APLOG_ERR, errno, s,
-                     "fork: Unable to fork new process");
-        /* In case system resources are maxxed out, we don't want
-         * Apache running away with the CPU trying to fork over and
-         * over and over again. */
-        sleep(10);
-
-        return -1;
-    }
-
-    if (!pid) {
-#ifdef HAVE_BINDPROCESSOR
-        /* By default, AIX binds to a single processor.  This bit unbinds
-         * children which will then bind to another CPU.
-         */
-        int status = bindprocessor(BINDPROCESS, (int)getpid(),
-                                   PROCESSOR_CLASS_ANY);
-        if (status != OK) {
-            ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_WARNING, errno, 
-                         ap_server_conf, "processor unbind failed %d", status);
-        }
-#endif
-
-        RAISE_SIGSTOP(MAKE_CHILD);
-
-        /* XXX - For an unthreaded server, a signal handler will be necessary
-         * apr_signal(SIGTERM, just_die);
-         */
-        child_main(slot);
-        clean_child_exit(0);
-    }
-    /* else */
-    ap_child_table[slot].pid = pid;
-    ap_child_table[slot].status = SERVER_ALIVE;
-
-    return 0;
-}
-
-/* start up a bunch of children */
-static int startup_children(int number_to_start)
-{
-    int i;
-
-    for (i = 0; number_to_start && i < num_daemons; ++i) {
-        if (ap_child_table[i].pid) {
-            continue;
-        }
-        if (make_child(ap_server_conf, i) < 0) {
-            break;
-        }
-        --number_to_start;
-    }
-    return number_to_start;
-}
-
-
-/*
- * spawn_rate is the number of children that will be spawned on the
- * next maintenance cycle if there aren't enough servers.  It is
- * doubled up to MAX_SPAWN_RATE, and reset only when a cycle goes by
- * without the need to spawn.
- */
-static int spawn_rate = 1;
-#ifndef MAX_SPAWN_RATE
-#define MAX_SPAWN_RATE  (32)
-#endif
-static int hold_off_on_exponential_spawning;
-
-static void perform_child_maintenance(void)
-{
-    int i;
-    int free_length;
-    int free_slots[MAX_SPAWN_RATE];
-    int last_non_dead = -1;
-
-    /* initialize the free_list */
-    free_length = 0;
-    
-    for (i = 0; i < num_daemons; ++i) {
-        if (ap_child_table[i].pid == 0) {
-            if (free_length < spawn_rate) {
-                free_slots[free_length] = i;
-                ++free_length;
-            }
-        }
-        else {
-            last_non_dead = i;
-        }
-
-        if (i >= ap_max_daemons_limit && free_length >= spawn_rate) {
-            break;
-        }
-    }
-    ap_max_daemons_limit = last_non_dead + 1;
-
-    if (free_length > 0) {
-        for (i = 0; i < free_length; ++i) {
-            make_child(ap_server_conf, free_slots[i]);
-        }
-        /* the next time around we want to spawn twice as many if this
-         * wasn't good enough, but not if we've just done a graceful
-         */
-        if (hold_off_on_exponential_spawning) {
-            --hold_off_on_exponential_spawning;
-        }
-        else if (spawn_rate < MAX_SPAWN_RATE) {
-            spawn_rate *= 2;
-        }
-    }
-    else {
-        spawn_rate = 1;
-    }
-}
-
-static void server_main_loop(int remaining_children_to_start)
-{
-    int child_slot;
-    apr_exit_why_e exitwhy;
-    int status;
-    apr_proc_t pid;
-    int i;
-
-    while (!restart_pending && !shutdown_pending) {
-        ap_wait_or_timeout(&exitwhy, &status, &pid, pconf);
-        
-        if (pid.pid != -1) {
-            if (ap_process_child_status(&pid, exitwhy, status)
-                == APEXIT_CHILDFATAL) {
-                shutdown_pending = 1;
-                child_fatal = 1;
-                return;
-            }
-            /* non-fatal death... note that it's gone in the child table and
-             * clean out the status table. */
-            child_slot = -1;
-            for (i = 0; i < ap_max_daemons_limit; ++i) {
-                if (ap_child_table[i].pid == pid.pid) {
-                    child_slot = i;
-                    break;
-                }
-            }
-            if (child_slot >= 0) {
-                ap_child_table[child_slot].pid = 0;
-                ap_update_child_status_from_indexes(child_slot, i, SERVER_DEAD,
-                                                    (request_rec *) NULL);
-
-                
-                if (remaining_children_to_start
-                    && child_slot < num_daemons) {
-                    /* we're still doing a 1-for-1 replacement of dead
-                     * children with new children
-                     */
-                    make_child(ap_server_conf, child_slot);
-                    --remaining_children_to_start;
-                }
-#if APR_HAS_OTHER_CHILD
-            }
-            else if (apr_proc_other_child_read(&pid, status) == 0) {
-            /* handled */
-#endif
-            }
-            else if (is_graceful) {
-                /* Great, we've probably just lost a slot in the
-                * child table.  Somehow we don't know about this
-                * child.
-                */
-                ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_WARNING, 0, 
-                             ap_server_conf,
-                             "long lost child came home! (pid %ld)", 
-                             (long)pid.pid);
-            }
-            /* Don't perform idle maintenance when a child dies,
-             * only do it when there's a timeout.  Remember only a
-             * finite number of children can die, and it's pretty
-             * pathological for a lot to die suddenly.
-             */
-            continue;
-        }
-        else if (remaining_children_to_start) {
-            /* we hit a 1 second timeout in which none of the previous
-             * generation of children needed to be reaped... so assume
-             * they're all done, and pick up the slack if any is left.
-             */
-            remaining_children_to_start = \
-                startup_children(remaining_children_to_start);
-            /* In any event we really shouldn't do the code below because
-             * few of the servers we just started are in the IDLE state
-             * yet, so we'd mistakenly create an extra server.
-             */
-            continue;
-        }
-
-        perform_child_maintenance();
-    }
-}
-
-int ap_mpm_run(apr_pool_t *_pconf, apr_pool_t *plog, server_rec *s)
-{
-    int remaining_children_to_start;
-    int i;
-    apr_status_t rv;
-    apr_size_t one = 1;
-
-    ap_log_pid(pconf, ap_pid_fname);
-
-    first_server_limit = server_limit;
-    first_thread_limit = thread_limit;
-    if (changed_limit_at_restart) {
-        ap_log_error(APLOG_MARK, APLOG_WARNING | APLOG_NOERRNO, 0, s,
-                     "WARNING: Attempt to change ServerLimit or ThreadLimit "
-                     "ignored during restart");
-        changed_limit_at_restart = 0;
-    }
-
-    if ((rv = apr_file_pipe_create(&pipe_of_death_in, &pipe_of_death_out,
-                                   pconf)) != APR_SUCCESS) {
-        ap_log_error(APLOG_MARK, APLOG_ERR, rv,
-                     (const server_rec*) ap_server_conf,
-                     "apr_file_pipe_create (pipe_of_death)");
-        exit(1);
-    }
-    if ((rv = apr_file_pipe_timeout_set(pipe_of_death_in, 0)) != APR_SUCCESS) {
-        ap_log_error(APLOG_MARK, APLOG_ERR, rv,
-                     (const server_rec*) ap_server_conf,
-                     "apr_file_pipe_timeout_set (pipe_of_death)");
-        exit(1);
-    }
-    ap_server_conf = s;
-    if ((num_listenfds = ap_setup_listeners(ap_server_conf)) < 1) {
-        /* XXX: hey, what's the right way for the mpm to indicate
-         * a fatal error? */
-        ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_ALERT, 0, s,
-                     "no listening sockets available, shutting down");
-        return 1;
-    }
-
-    /* Initialize cross-process accept lock */
-    ap_lock_fname = apr_psprintf(_pconf, "%s.%u",
-                                 ap_server_root_relative(_pconf, ap_lock_fname),
-                                 my_pid);
-    rv = SAFE_ACCEPT(apr_lock_create(&process_accept_mutex, APR_MUTEX,
-                                     APR_CROSS_PROCESS, ap_accept_lock_mech,
-                                     ap_lock_fname, _pconf));
-    if (rv != APR_SUCCESS) {
-        ap_log_error(APLOG_MARK, APLOG_EMERG, rv, s,
-                     "Couldn't create cross-process lock");
-        return 1;
-    }
-
-    if (!is_graceful) {
-        if (ap_run_pre_mpm(pconf, SB_SHARED) != OK) {
-            return 1;
-        }
-    }
-    /* Initialize the child table */
-    if (!is_graceful) {
-        for (i = 0; i < server_limit; i++) {
-            ap_child_table[i].pid = 0;
-        }
-    }
-
-    set_signals();
-
-    /* If we're doing a graceful_restart then we're going to see a lot
-     * of children exiting immediately when we get into the main loop
-     * below (because we just sent them AP_SIG_GRACEFUL).  This happens 
-     * pretty rapidly... and for each one that exits we'll start a new one 
-     * until we reach at least daemons_min_free.  But we may be permitted to
-     * start more than that, so we'll just keep track of how many we're
-     * supposed to start up without the 1 second penalty between each fork.
-     */
-    remaining_children_to_start = num_daemons;
-    if (!is_graceful) {
-        remaining_children_to_start = \
-            startup_children(remaining_children_to_start);
-    }
-    else {
-        /* give the system some time to recover before kicking into
-         * exponential mode */
-        hold_off_on_exponential_spawning = 10;
-    }
-
-    ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_NOTICE, 0, ap_server_conf,
-                 "%s configured -- resuming normal operations",
-                 ap_get_server_version());
-    ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_INFO, 0, ap_server_conf,
-                 "Server built: %s", ap_get_server_built());
-    restart_pending = shutdown_pending = 0;
-
-    server_main_loop(remaining_children_to_start);
-
-    if (shutdown_pending) {
-        /* Time to gracefully shut down:
-         * Kill child processes, tell them to call child_exit, etc...
-         */
-        if (unixd_killpg(getpgrp(), SIGTERM) < 0) {
-            ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf,
-                         "killpg SIGTERM");
-        }
-        ap_reclaim_child_processes(1);      /* Start with SIGTERM */
-
-        if (!child_fatal) {
-            /* cleanup pid file on normal shutdown */
-            const char *pidfile = NULL;
-            pidfile = ap_server_root_relative (pconf, ap_pid_fname);
-            if (pidfile != NULL && unlink(pidfile) == 0) {
-                ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_INFO, 0,
-                             ap_server_conf,
-                             "removed PID file %s (pid=%ld)",
-                             pidfile, (long)getpid());
-            }
-    
-            ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_NOTICE, 0,
-                         ap_server_conf, "caught SIGTERM, shutting down");
-        }
-        return 1;
-    }
-
-    /* we've been told to restart */
-    apr_signal(SIGHUP, SIG_IGN);
-
-    if (one_process) {
-        /* not worth thinking about */
-        return 1;
-    }
-
-    if (is_graceful) {
-        char char_of_death = '!';
-
-        ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_NOTICE, 0,
-                     ap_server_conf, AP_SIG_GRACEFUL_STRING " received.  "
-                     "Doing graceful restart");
-
-        /* This is mostly for debugging... so that we know what is still
-         * gracefully dealing with existing request.
-         */
-    
-        for (i = 0; i < num_daemons; ++i) {
-            if (ap_child_table[i].pid) {
-                ap_child_table[i].status = SERVER_DYING;
-            } 
-        }
-        /* give the children the signal to die */
-        for (i = 0; i < num_daemons;) {
-            if ((rv = apr_file_write(pipe_of_death_out, &char_of_death,
-                                     &one)) != APR_SUCCESS) {
-                if (APR_STATUS_IS_EINTR(rv)) continue;
-                ap_log_error(APLOG_MARK, APLOG_WARNING, rv, ap_server_conf,
-                             "write pipe_of_death");
-            }
-            i++;
-        }
-    }
-    else {
-        /* Kill 'em all.  Since the child acts the same on the parents SIGTERM 
-         * and a SIGHUP, we may as well use the same signal, because some user
-         * pthreads are stealing signals from us left and right.
-         */
-        if (unixd_killpg(getpgrp(), SIGTERM) < 0) {
-            ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf,
-                         "killpg SIGTERM");
-        }
-        ap_reclaim_child_processes(1);      /* Start with SIGTERM */
-        ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_NOTICE, 0,
-                     ap_server_conf, "SIGHUP received.  Attempting to restart");
-    }
-    return 0;
-}
-
-/* This really should be a post_config hook, but the error log is already
- * redirected by that point, so we need to do this in the open_logs phase.
- */
-static int perchild_open_logs(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *s)
-{
-    apr_status_t rv;
-
-    pconf = p;
-    ap_server_conf = s;
-
-    if ((num_listensocks = ap_setup_listeners(ap_server_conf)) < 1) {
-        ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_ALERT|APLOG_STARTUP, 0,
-                     NULL, "no listening sockets available, shutting down");
-        return DONE;
-    }
-
-    ap_log_pid(pconf, ap_pid_fname);
-
-    if ((rv = ap_mpm_pod_open(pconf, &pod))) {
-        ap_log_error(APLOG_MARK, APLOG_CRIT|APLOG_STARTUP, rv, NULL,
-                "Could not open pipe-of-death.");
-        return DONE;
-    }
-    return OK;
-}
-
-static int perchild_pre_config(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp)
-{
-    static int restart_num = 0;
-    int no_detach, debug;
-    ap_directive_t *pdir;
-    int i;
-    int tmp_server_limit = DEFAULT_SERVER_LIMIT;
-    int tmp_thread_limit = DEFAULT_THREAD_LIMIT;
-    apr_status_t rv;
-
-    debug = ap_exists_config_define("DEBUG");
-
-    if (debug) {
-        no_detach = one_process = 1;
-    }
-    else {
-        one_process = ap_exists_config_define("ONE_PROCESS");
-        no_detach = ap_exists_config_define("NO_DETACH");
-    }
-
-    /* sigh, want this only the second time around */
-    if (restart_num++ == 1) {
-        is_graceful = 0;
-
-        if (!one_process) {
-            rv = apr_proc_detach(no_detach ? APR_PROC_DETACH_FOREGROUND
-                                           : APR_PROC_DETACH_DAEMONIZE);
-            if (rv != APR_SUCCESS) {
-                ap_log_error(APLOG_MARK, APLOG_CRIT, rv, NULL,
-                             "apr_proc_detach failed");
-                return HTTP_INTERNAL_SERVER_ERROR;
-            }                  
-        }
-
-        my_pid = getpid();
-    }
-
-    unixd_pre_config(ptemp);
-    ap_listen_pre_config();
-    num_daemons = DEFAULT_NUM_DAEMON;
-    threads_to_start = DEFAULT_START_THREAD;
-    min_spare_threads = DEFAULT_MIN_SPARE_THREAD;
-    max_spare_threads = DEFAULT_MAX_SPARE_THREAD;
-    max_threads = thread_limit;
-    ap_pid_fname = DEFAULT_PIDLOG;
-    ap_lock_fname = DEFAULT_LOCKFILE;
-    max_requests_per_child = DEFAULT_MAX_REQUESTS_PER_CHILD;
-    curr_child_num = 0;
-
-    apr_cpystrn(ap_coredump_dir, ap_server_root, sizeof(ap_coredump_dir));
-
-    /* we need to know ServerLimit and ThreadLimit before we start processing
-     * the tree because we need to already have allocated child_info_table
-     */
-    for (pdir = ap_conftree; pdir != NULL; pdir = pdir->next) {
-        if (!strcasecmp(pdir->directive, "ServerLimit")) {
-            if (atoi(pdir->args) > tmp_server_limit) {
-                tmp_server_limit = atoi(pdir->args);
-                if (tmp_server_limit > MAX_SERVER_LIMIT) {
-                    tmp_server_limit = MAX_SERVER_LIMIT;
-                }
-            }
-        }
-        else if (!strcasecmp(pdir->directive, "ThreadLimit")) {
-            if (atoi(pdir->args) > tmp_thread_limit) {
-                tmp_thread_limit = atoi(pdir->args);
-                if (tmp_thread_limit > MAX_THREAD_LIMIT) {
-                    tmp_thread_limit = MAX_THREAD_LIMIT;
-                }
-            }
-        }
-    }
-
-    child_info_table = (child_info_t *)apr_pcalloc(p, tmp_server_limit * sizeof(child_info_t));
-    for (i = 0; i < tmp_server_limit; i++) {
-        child_info_table[i].uid = -1;
-        child_info_table[i].gid = -1;
-        child_info_table[i].sd = -1;
-    }
-
-    return OK;
-}
-
-static int pass_request(request_rec *r)
-{
-    apr_socket_t *thesock = ap_get_module_config(r->connection->conn_config, &core_module);
-    struct msghdr msg;
-    struct cmsghdr *cmsg;
-    int sfd;
-    struct iovec iov;
-    apr_bucket_brigade *bb = apr_brigade_create(r->pool);
-    perchild_server_conf *sconf = (perchild_server_conf *)
-                            ap_get_module_config(r->server->module_config, 
-                                                 &mpm_perchild_module);
-    char *foo;
-    apr_size_t len;
-
-    apr_pool_userdata_get((void **)&foo, "PERCHILD_BUFFER",
-                          r->connection->pool);
-    len = strlen(foo);
-
-    apr_pool_userdata_set(NULL, "PERCHILD_BUFFER", apr_pool_cleanup_null, 
-                          r->connection->pool);
-
-    apr_os_sock_get(&sfd, thesock);
-
-    iov.iov_base = NULL;
-    iov.iov_len = 0;
-
-    msg.msg_name = NULL;
-    msg.msg_namelen = 0;
-    msg.msg_iov = &iov;
-    msg.msg_iovlen = 1;
-
-    cmsg = apr_palloc(r->pool, sizeof(*cmsg) + sizeof(sfd));
-    cmsg->cmsg_len = sizeof(*cmsg) + sizeof(int);
-    cmsg->cmsg_level = SOL_SOCKET;
-    cmsg->cmsg_type = SCM_RIGHTS;
-
-    memcpy(CMSG_DATA(cmsg), &sfd, sizeof(sfd));
-
-    msg.msg_control = (caddr_t)cmsg;
-    msg.msg_controllen = cmsg->cmsg_len;
-    msg.msg_flags=0;
-
-    if (sendmsg(sconf->sd2, &msg, 0) == -1) {
-        apr_pool_destroy(r->pool);
-        return -1;
-    }
-
-    write(sconf->sd2, foo, len);
-
-    /* ### this "read one line" doesn't seem right... shouldn't we be
-       ### reading large chunks of data or something?
-    */
-    while (ap_get_brigade(r->input_filters, bb, AP_MODE_GETLINE, 
-                          APR_NONBLOCK_READ, 0) == APR_SUCCESS) {
-        apr_bucket *e;
-        APR_BRIGADE_FOREACH(e, bb) {
-            const char *str;
-
-            apr_bucket_read(e, &str, &len, APR_NONBLOCK_READ);
-            write(sconf->sd2, str, len);
-        }
-    }
-
-    apr_pool_destroy(r->pool);
-    return 1;
-}
-
-static char *make_perchild_socket(const char *fullsockname, int sd[2])
-{
-    socketpair(PF_UNIX, SOCK_STREAM, 0, sd);
-    return NULL;
-}
-
-static int perchild_post_config(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *s)
-{
-    int i;
-    server_rec *sr;
-    perchild_server_conf *sconf;
-    int def_sd[2];
-
-    def_sd[0] = -1;
-    def_sd[1] = -1;
-
-    for (sr = s; sr; sr = sr->next) {
-        sconf = (perchild_server_conf *)ap_get_module_config(sr->module_config,
-                                                      &mpm_perchild_module);
-
-        if (sconf->sd == -1) {
-            sconf->fullsockname = apr_pstrcat(sr->process->pool, 
-                                             sconf->sockname, ".DEFAULT", NULL);
-            if (def_sd[0] == -1) {
-                if (!make_perchild_socket(sconf->fullsockname, def_sd)) {
-                    /* log error */
-                }
-            }
-            sconf->sd = def_sd[0];
-            sconf->sd2 = def_sd[1];
-        }
-    }
-
-    for (i = 0; i < num_daemons; i++) {
-        if (child_info_table[i].uid == -1) {
-            child_info_table[i].sd = def_sd[0];
-        }
-    }
-
-    thread_socket_table = (int *)apr_pcalloc(p, thread_limit * sizeof(int));
-    for (i = 0; i < thread_limit; i++) {
-        thread_socket_table[i] = AP_PERCHILD_THISCHILD;
-    }
-    ap_child_table = (ap_ctable *)apr_pcalloc(p, server_limit * sizeof(ap_ctable));
-
-    return OK;
-}
-
-static int perchild_post_read(request_rec *r)
-{
-    ap_filter_t *f = r->connection->input_filters;
-    int thread_num = r->connection->id % thread_limit;
-    perchild_server_conf *sconf = (perchild_server_conf *)
-                            ap_get_module_config(r->server->module_config, 
-                                                 &mpm_perchild_module);
-
-    while (f) {
-        if (!strcasecmp("PERCHILD_BUFFER", f->frec->name)) {
-            ap_remove_output_filter(f);
-            break;
-        }
-        f = f->next;
-    }
-
-    if (thread_socket_table[thread_num] != AP_PERCHILD_THISCHILD) {
-        apr_socket_t *csd = NULL;
-
-        apr_os_sock_put(&csd, &thread_socket_table[thread_num], 
-                        r->connection->pool);
-        ap_sock_disable_nagle(csd);
-        ap_set_module_config(r->connection->conn_config, &core_module, csd);
-        return OK;
-    }
-    else {
-        /* sconf is the server config for this vhost, so if our socket
-         * is not the same that was set in the config, then the request
-         * needs to be passed to another child. */
-        if (sconf->sd != child_info_table[child_num].sd) {
-            if (pass_request(r) == -1) {
-                ap_log_error(APLOG_MARK, APLOG_ERR | APLOG_NOERRNO, 0,
-                             ap_server_conf, "Could not pass request to proper "
-                             "child, request will not be honored.");
-            }
-            longjmp(jmpbuffer, 1); 
-        }
-        return OK;
-    }
-    return OK;
-}
-
-static apr_status_t perchild_buffer(ap_filter_t *f, apr_bucket_brigade *b,
-                                    ap_input_mode_t mode, 
-                                    apr_read_type_e block,
-                                    apr_off_t readbytes)
-{
-    apr_bucket *e;
-    apr_status_t rv;
-    char *buffer = NULL;
-    const char *str;
-    apr_size_t len;
-
-    if ((rv = ap_get_brigade(f->next, b, mode, block, 
-                             readbytes)) != APR_SUCCESS) {
-        return rv;
-    }
-
-    apr_pool_userdata_get((void **)&buffer, "PERCHILD_BUFFER", f->c->pool);
-
-    APR_BRIGADE_FOREACH(e, b) {
-        if (e->length != 0) {
-            apr_bucket_read(e, &str, &len, APR_NONBLOCK_READ);
-       
-            if (buffer == NULL) {
-                buffer = apr_pstrndup(f->c->pool, str, len);
-            }
-            else {
-               buffer = apr_pstrcat(f->c->pool, buffer, 
-                                    apr_pstrndup(f->c->pool, str, len), NULL);
-            } 
-        }
-    }
-    apr_pool_userdata_set(buffer, "PERCHILD_BUFFER", apr_pool_cleanup_null,
-                          f->c->pool);
-    
-    return APR_SUCCESS;
-}
-
-static int perchild_pre_connection(conn_rec *c, void *csd)
-{
-    ap_add_input_filter("PERCHILD_BUFFER", NULL, NULL, c);
-    return OK;
-}
-
-static void perchild_hooks(apr_pool_t *p)
-{
-    /* The perchild open_logs phase must run before the core's, or stderr
-     * will be redirected to a file, and the messages won't print to the
-     * console.
-     */
-    static const char *const aszSucc[] = {"core.c", NULL};
-    one_process = 0;
-
-    ap_hook_open_logs(perchild_open_logs, NULL, aszSucc, APR_HOOK_MIDDLE);
-    ap_hook_pre_config(perchild_pre_config, NULL, NULL, APR_HOOK_MIDDLE); 
-    ap_hook_post_config(perchild_post_config, NULL, NULL, APR_HOOK_MIDDLE); 
-    ap_hook_pre_connection(perchild_pre_connection,NULL,NULL, APR_HOOK_MIDDLE);
-
-    /* This must be run absolutely first.  If this request isn't for this
-     * server then we need to forward it to the proper child.  No sense
-     * tying up this server running more post_read request hooks if it is
-     * just going to be forwarded along.
-     */
-    ap_hook_post_read_request(perchild_post_read, NULL, NULL,
-                              APR_HOOK_REALLY_FIRST);
-    ap_register_input_filter("PERCHILD_BUFFER", perchild_buffer,
-                             AP_FTYPE_RESOURCE);
-}
-
-static const char *set_num_daemons(cmd_parms *cmd, void *dummy,
-                                   const char *arg) 
-{
-    const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
-    if (err != NULL) {
-        return err;
-    }
-
-    num_daemons = atoi(arg);
-    if (num_daemons > server_limit) {
-       ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
-                    "WARNING: NumServers of %d exceeds ServerLimit value "
-                    "of %d servers,", num_daemons, server_limit);
-       ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
-                    " lowering NumServers to %d.  To increase, please "
-                    "see the", server_limit);
-       ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
-                    " ServerLimit directive.");
-       num_daemons = server_limit;
-    } 
-    else if (num_daemons < 1) {
-        ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
-                     "WARNING: Require NumServers > 0, setting to 1");
-        num_daemons = 1;
-    }
-    return NULL;
-}
-
-static const char *set_threads_to_start(cmd_parms *cmd, void *dummy,
-                                        const char *arg) 
-{
-    const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
-    if (err != NULL) {
-        return err;
-    }
-
-    threads_to_start = atoi(arg);
-    if (threads_to_start > thread_limit) {
-        ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
-                     "WARNING: StartThreads of %d exceeds ThreadLimit value"
-                     " of %d threads,", threads_to_start,
-                     thread_limit);
-        ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
-                     " lowering StartThreads to %d. To increase, please"
-                     " see the", thread_limit);
-        ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
-                     " ThreadLimit directive.");
-    }
-    else if (threads_to_start < 1) {
-        ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
-                     "WARNING: Require StartThreads > 0, setting to 1");
-        threads_to_start = 1;
-    }
-    return NULL;
-}
-
-static const char *set_min_spare_threads(cmd_parms *cmd, void *dummy,
-                                         const char *arg)
-{
-    const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
-    if (err != NULL) {
-        return err;
-    }
-
-    min_spare_threads = atoi(arg);
-    if (min_spare_threads <= 0) {
-       ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
-                    "WARNING: detected MinSpareThreads set to non-positive.");
-       ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
-                    "Resetting to 1 to avoid almost certain Apache failure.");
-       ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
-                    "Please read the documentation.");
-       min_spare_threads = 1;
-    }
-       
-    return NULL;
-}
-
-static const char *set_max_spare_threads(cmd_parms *cmd, void *dummy,
-                                         const char *arg)
-{
-    const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
-    if (err != NULL) {
-        return err;
-    }
-
-    max_spare_threads = atoi(arg);
-    if (max_spare_threads >= thread_limit) {
-       ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
-                    "WARNING: detected MinSpareThreads set higher than");
-       ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
-                    "ThreadLimit. Resetting to %d", thread_limit);
-       max_spare_threads = thread_limit;
-    }
-    return NULL;
-}
-
-static const char *set_max_threads(cmd_parms *cmd, void *dummy, const char *arg)
-{
-    const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
-    if (err != NULL) {
-        return err;
-    }
-
-    max_threads = atoi(arg);
-    if (max_threads > thread_limit) {
-       ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
-                    "WARNING: detected MaxThreadsPerChild set higher than");
-       ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
-                    "ThreadLimit. Resetting to %d", thread_limit);
-       max_threads = thread_limit;
-    }
-    return NULL;
-}
-
-static const char *set_child_per_uid(cmd_parms *cmd, void *dummy, const char *u,
-                                     const char *g, const char *num)
-{
-    int i;
-    int max_this_time = atoi(num) + curr_child_num;
-
-    for (i = curr_child_num; i < max_this_time; i++, curr_child_num++) {
-        child_info_t *ug = &child_info_table[i - 1];
-
-        if (i > num_daemons) {
-            return "Trying to use more child ID's than NumServers.  Increase "
-                   "NumServers in your config file.";
-        }
-    
-        ug->uid = atoi(u);
-        ug->gid = atoi(g); 
-    }
-    return NULL;
-}
-
-static const char *assign_childuid(cmd_parms *cmd, void *dummy, const char *uid,
-                                   const char *gid)
-{
-    int i;
-    int u = atoi(uid);
-    int g = atoi(gid);
-    const char *errstr;
-    int socks[2];
-    perchild_server_conf *sconf = (perchild_server_conf *)
-                            ap_get_module_config(cmd->server->module_config, 
-                                                 &mpm_perchild_module);
-
-    sconf->fullsockname = apr_pstrcat(cmd->pool, sconf->sockname, ".", uid,
-                                      ":", gid, NULL);
-
-    if ((errstr = make_perchild_socket(sconf->fullsockname, socks))) {
-        return errstr;
-    }
-
-    sconf->sd = socks[0]; 
-    sconf->sd2 = socks[1];
-
-    for (i = 0; i < num_daemons; i++) {
-        if (u == child_info_table[i].uid && g == child_info_table[i].gid) {
-            child_info_table[i].sd = sconf->sd;
-        }
-    }
-
-    return NULL;
-}
-
-static const char *set_server_limit (cmd_parms *cmd, void *dummy, const char *arg) 
-{
-    int tmp_server_limit;
-    
-    const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
-    if (err != NULL) {
-        return err;
-    }
-
-    tmp_server_limit = atoi(arg);
-    /* you cannot change ServerLimit across a restart; ignore
-     * any such attempts
-     */
-    if (first_server_limit &&
-        tmp_server_limit != server_limit) {
-        /* how do we log a message?  the error log is a bit bucket at this
-         * point; we'll just have to set a flag so that ap_mpm_run()
-         * logs a warning later
-         */
-        changed_limit_at_restart = 1;
-        return NULL;
-    }
-    server_limit = tmp_server_limit;
-    
-    if (server_limit > MAX_SERVER_LIMIT) {
-       ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
-                    "WARNING: ServerLimit of %d exceeds compile time limit "
-                    "of %d servers,", server_limit, MAX_SERVER_LIMIT);
-       ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
-                    " lowering ServerLimit to %d.", MAX_SERVER_LIMIT);
-       server_limit = MAX_SERVER_LIMIT;
-    } 
-    else if (server_limit < 1) {
-	ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
-                     "WARNING: Require ServerLimit > 0, setting to 1");
-	server_limit = 1;
-    }
-    return NULL;
-}
-
-static const char *set_thread_limit (cmd_parms *cmd, void *dummy, const char *arg) 
-{
-    int tmp_thread_limit;
-    
-    const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
-    if (err != NULL) {
-        return err;
-    }
-
-    tmp_thread_limit = atoi(arg);
-    /* you cannot change ThreadLimit across a restart; ignore
-     * any such attempts
-     */
-    if (first_thread_limit &&
-        tmp_thread_limit != thread_limit) {
-        /* how do we log a message?  the error log is a bit bucket at this
-         * point; we'll just have to set a flag so that ap_mpm_run()
-         * logs a warning later
-         */
-        changed_limit_at_restart = 1;
-        return NULL;
-    }
-    thread_limit = tmp_thread_limit;
-    
-    if (thread_limit > MAX_THREAD_LIMIT) {
-       ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
-                    "WARNING: ThreadLimit of %d exceeds compile time limit "
-                    "of %d servers,", thread_limit, MAX_THREAD_LIMIT);
-       ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
-                    " lowering ThreadLimit to %d.", MAX_THREAD_LIMIT);
-       thread_limit = MAX_THREAD_LIMIT;
-    } 
-    else if (thread_limit < 1) {
-	ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
-                     "WARNING: Require ThreadLimit > 0, setting to 1");
-	thread_limit = 1;
-    }
-    return NULL;
-}
-
-static const command_rec perchild_cmds[] = {
-UNIX_DAEMON_COMMANDS,
-LISTEN_COMMANDS,
-AP_INIT_TAKE1("NumServers", set_num_daemons, NULL, RSRC_CONF,
-              "Number of children alive at the same time"),
-AP_INIT_TAKE1("StartThreads", set_threads_to_start, NULL, RSRC_CONF,
-              "Number of threads each child creates"),
-AP_INIT_TAKE1("MinSpareThreads", set_min_spare_threads, NULL, RSRC_CONF,
-              "Minimum number of idle threads per child, to handle "
-              "request spikes"),
-AP_INIT_TAKE1("MaxSpareThreads", set_max_spare_threads, NULL, RSRC_CONF,
-              "Maximum number of idle threads per child"),
-AP_INIT_TAKE1("MaxThreadsPerChild", set_max_threads, NULL, RSRC_CONF,
-              "Maximum number of threads per child"),
-AP_INIT_TAKE3("ChildperUserID", set_child_per_uid, NULL, RSRC_CONF,
-              "Specify a User and Group for a specific child process."),
-AP_INIT_TAKE2("AssignUserID", assign_childuid, NULL, RSRC_CONF,
-              "Tie a virtual host to a specific child process."),
-AP_INIT_TAKE1("ServerLimit", set_server_limit, NULL, RSRC_CONF,
-              "Maximum value of NumServers for this run of Apache"),
-AP_INIT_TAKE1("ThreadLimit", set_thread_limit, NULL, RSRC_CONF,
-              "Maximum worker threads in a server for this run of Apache"),
-{ NULL }
-};
-
-static void *perchild_create_config(apr_pool_t *p, server_rec *s)
-{
-    perchild_server_conf *c = (perchild_server_conf *)
-                                  apr_pcalloc(p, sizeof(perchild_server_conf));
-
-    c->sd = -1;
-    return c;
-}
-
-module AP_MODULE_DECLARE_DATA mpm_perchild_module = {
-    MPM20_MODULE_STUFF,
-    NULL,                       /* hook to run before apache parses args */
-    NULL,                       /* create per-directory config structure */
-    NULL,                       /* merge per-directory config structures */
-    perchild_create_config,     /* create per-server config structure */
-    NULL,                       /* merge per-server config structures */
-    perchild_cmds,              /* command apr_table_t */
-    perchild_hooks              /* register_hooks */
-};
-
diff --git a/server/mpm/prefork/.cvsignore b/server/mpm/prefork/.cvsignore
deleted file mode 100644
index dc53ac8..0000000
--- a/server/mpm/prefork/.cvsignore
+++ /dev/null
@@ -1,5 +0,0 @@
-*.lo
-*.la
-Makefile
-.deps
-.libs
diff --git a/server/mpm/prefork/Makefile.in b/server/mpm/prefork/Makefile.in
deleted file mode 100644
index 034bf5c..0000000
--- a/server/mpm/prefork/Makefile.in
+++ /dev/null
@@ -1,5 +0,0 @@
-
-LTLIBRARY_NAME    = libprefork.la
-LTLIBRARY_SOURCES = prefork.c
-
-include $(top_srcdir)/build/ltlib.mk
diff --git a/server/mpm/prefork/config.m4 b/server/mpm/prefork/config.m4
deleted file mode 100644
index 9c189a8..0000000
--- a/server/mpm/prefork/config.m4
+++ /dev/null
@@ -1,3 +0,0 @@
-if test "$MPM_NAME" = "prefork" ; then
-    APACHE_FAST_OUTPUT(server/mpm/$MPM_NAME/Makefile)
-fi
diff --git a/server/mpm/prefork/mpm.h b/server/mpm/prefork/mpm.h
deleted file mode 100644
index c7672b8..0000000
--- a/server/mpm/prefork/mpm.h
+++ /dev/null
@@ -1,91 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-#include "httpd.h"
-#include "mpm_default.h"
-#include "scoreboard.h"
-#include "unixd.h"
-
-#ifndef APACHE_MPM_PREFORK_H
-#define APACHE_MPM_PREFORK_H
-
-#define PREFORK_MPM
-
-#define MPM_NAME "Prefork"
-
-#define AP_MPM_WANT_RECLAIM_CHILD_PROCESSES
-#define AP_MPM_WANT_WAIT_OR_TIMEOUT
-#define AP_MPM_WANT_PROCESS_CHILD_STATUS
-#define AP_MPM_WANT_SET_PIDFILE
-#define AP_MPM_WANT_SET_SCOREBOARD
-#define AP_MPM_WANT_SET_LOCKFILE
-#define AP_MPM_WANT_SET_MAX_REQUESTS
-#define AP_MPM_WANT_SET_COREDUMPDIR
-#define AP_MPM_WANT_SET_ACCEPT_LOCK_MECH
-#define AP_MPM_DISABLE_NAGLE_ACCEPTED_SOCK
-
-#define AP_MPM_USES_POD 1
-#define MPM_SYNC_CHILD_TABLE() (ap_sync_scoreboard_image())
-#define MPM_CHILD_PID(i) (ap_scoreboard_image->parent[i].pid)
-#define MPM_NOTE_CHILD_KILLED(i) (MPM_CHILD_PID(i) = 0)
-#define MPM_ACCEPT_FUNC unixd_accept
-
-extern int ap_threads_per_child;
-extern int ap_max_daemons_limit;
-extern server_rec *ap_server_conf;
-#endif /* APACHE_MPM_PREFORK_H */
diff --git a/server/mpm/prefork/mpm_default.h b/server/mpm/prefork/mpm_default.h
deleted file mode 100644
index cd5cb38..0000000
--- a/server/mpm/prefork/mpm_default.h
+++ /dev/null
@@ -1,107 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-#ifndef APACHE_MPM_DEFAULT_H
-#define APACHE_MPM_DEFAULT_H
-
-/* Number of servers to spawn off by default --- also, if fewer than
- * this free when the caretaker checks, it will spawn more.
- */
-#ifndef DEFAULT_START_DAEMON
-#define DEFAULT_START_DAEMON 5
-#endif
-
-/* Maximum number of *free* server processes --- more than this, and
- * they will die off.
- */
-
-#ifndef DEFAULT_MAX_FREE_DAEMON
-#define DEFAULT_MAX_FREE_DAEMON 10
-#endif
-
-/* Minimum --- fewer than this, and more will be created */
-
-#ifndef DEFAULT_MIN_FREE_DAEMON
-#define DEFAULT_MIN_FREE_DAEMON 5
-#endif
-
-/* File used for accept locking, when we use a file */
-#ifndef DEFAULT_LOCKFILE
-#define DEFAULT_LOCKFILE "logs/accept.lock"
-#endif
-
-/* Where the main/parent process's pid is logged */
-#ifndef DEFAULT_PIDLOG
-#define DEFAULT_PIDLOG "logs/httpd.pid"
-#endif
-
-/*
- * Interval, in microseconds, between scoreboard maintenance.
- */
-#ifndef SCOREBOARD_MAINTENANCE_INTERVAL
-#define SCOREBOARD_MAINTENANCE_INTERVAL 1000000
-#endif
-
-/* Number of requests to try to handle in a single process.  If <= 0,
- * the children don't die off.
- */
-#ifndef DEFAULT_MAX_REQUESTS_PER_CHILD
-#define DEFAULT_MAX_REQUESTS_PER_CHILD 10000
-#endif
-
-#endif /* AP_MPM_DEFAULT_H */
diff --git a/server/mpm/prefork/prefork.c b/server/mpm/prefork/prefork.c
deleted file mode 100644
index f2710eb..0000000
--- a/server/mpm/prefork/prefork.c
+++ /dev/null
@@ -1,1402 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-#include "apr.h"
-#include "apr_portable.h"
-#include "apr_strings.h"
-#include "apr_thread_proc.h"
-#include "apr_signal.h"
-
-#define APR_WANT_STDIO
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-#if APR_HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#if APR_HAVE_SYS_TYPES_H
-#include <sys/types.h>
-#endif
-
-#define CORE_PRIVATE
-
-#include "ap_config.h"
-#include "httpd.h"
-#include "mpm_default.h"
-#include "http_main.h"
-#include "http_log.h"
-#include "http_config.h"
-#include "http_core.h"		/* for get_remote_host */
-#include "http_connection.h"
-#include "scoreboard.h"
-#include "ap_mpm.h"
-#include "unixd.h"
-#include "mpm_common.h"
-#include "ap_listen.h"
-#include "ap_mmn.h"
-
-#ifdef HAVE_BSTRING_H
-#include <bstring.h>		/* for IRIX, FD_SET calls bzero() */
-#endif
-#ifdef HAVE_TIME_H
-#include <time.h>
-#endif
-#ifdef HAVE_SYS_PROCESSOR_H
-#include <sys/processor.h> /* for bindprocessor() */
-#endif
-
-#include <signal.h>
-#include <sys/times.h>
-
-/* Limit on the total --- clients will be locked out if more servers than
- * this are needed.  It is intended solely to keep the server from crashing
- * when things get out of hand.
- *
- * We keep a hard maximum number of servers, for two reasons --- first off,
- * in case something goes seriously wrong, we want to stop the fork bomb
- * short of actually crashing the machine we're running on by filling some
- * kernel table.  Secondly, it keeps the size of the scoreboard file small
- * enough that we can read the whole thing without worrying too much about
- * the overhead.
- */
-#ifndef DEFAULT_SERVER_LIMIT
-#define DEFAULT_SERVER_LIMIT 256
-#endif
-
-/* Admin can't tune ServerLimit beyond MAX_SERVER_LIMIT.  We want
- * some sort of compile-time limit to help catch typos.
- */
-#ifndef MAX_SERVER_LIMIT
-#define MAX_SERVER_LIMIT 20000
-#endif
-
-#ifndef HARD_THREAD_LIMIT
-#define HARD_THREAD_LIMIT 1
-#endif
-
-/* config globals */
-
-int ap_threads_per_child=0;         /* Worker threads per child */
-static apr_proc_mutex_t *accept_mutex;
-static int ap_daemons_to_start=0;
-static int ap_daemons_min_free=0;
-static int ap_daemons_max_free=0;
-static int ap_daemons_limit=0;      /* MaxClients */
-static int server_limit = DEFAULT_SERVER_LIMIT;
-static int first_server_limit;
-static int changed_limit_at_restart;
-
-static ap_pod_t *pod;
-
-/*
- * The max child slot ever assigned, preserved across restarts.  Necessary
- * to deal with MaxClients changes across AP_SIG_GRACEFUL restarts.  We 
- * use this value to optimize routines that have to scan the entire scoreboard.
- */
-int ap_max_daemons_limit = -1;
-server_rec *ap_server_conf;
-
-/* one_process --- debugging mode variable; can be set from the command line
- * with the -X flag.  If set, this gets you the child_main loop running
- * in the process which originally started up (no detach, no make_child),
- * which is a pretty nice debugging environment.  (You'll get a SIGHUP
- * early in standalone_main; just continue through.  This is the server
- * trying to kill off any child processes which it might have lying
- * around --- Apache doesn't keep track of their pids, it just sends
- * SIGHUP to the process group, ignoring it in the root process.
- * Continue through and you'll be fine.).
- */
-
-static int one_process = 0;
-
-static apr_pool_t *pconf;		/* Pool for config stuff */
-static apr_pool_t *pchild;		/* Pool for httpd child stuff */
-
-static pid_t ap_my_pid;	/* it seems silly to call getpid all the time */
-static pid_t parent_pid;
-#ifndef MULTITHREAD
-static int my_child_num;
-#endif
-
-#ifdef TPF
-int tpf_child = 0;
-char tpf_server_name[INETD_SERVNAME_LENGTH+1];
-#endif /* TPF */
-
-static int die_now = 0;
-
-#ifdef GPROF
-/* 
- * change directory for gprof to plop the gmon.out file
- * configure in httpd.conf:
- * GprofDir logs/   -> $ServerRoot/logs/gmon.out
- * GprofDir logs/%  -> $ServerRoot/logs/gprof.$pid/gmon.out
- */
-static void chdir_for_gprof(void)
-{
-    core_server_config *sconf = 
-	ap_get_module_config(ap_server_conf->module_config, &core_module);    
-    char *dir = sconf->gprof_dir;
-    const char *use_dir;
-
-    if(dir) {
-        apr_status_t res;
-	char buf[512];
-	int len = strlen(sconf->gprof_dir) - 1;
-	if(*(dir + len) == '%') {
-	    dir[len] = '\0';
-	    apr_snprintf(buf, sizeof(buf), "%sgprof.%d", dir, (int)getpid());
-	} 
-	use_dir = ap_server_root_relative(pconf, buf[0] ? buf : dir);
-	res = apr_dir_make(use_dir, 0755, pconf);
-	if(res != APR_SUCCESS && !APR_STATUS_IS_EEXIST(res)) {
-	    ap_log_error(APLOG_MARK, APLOG_ERR, errno, ap_server_conf,
-			 "gprof: error creating directory %s", dir);
-	}
-    }
-    else {
-	use_dir = ap_server_root_relative(pconf, "logs");
-    }
-
-    chdir(use_dir);
-}
-#else
-#define chdir_for_gprof()
-#endif
-
-/* XXX - I don't know if TPF will ever use this module or not, so leave
- * the ap_check_signals calls in but disable them - manoj */
-#define ap_check_signals() 
-
-/* a clean exit from a child with proper cleanup */
-static void clean_child_exit(int code) __attribute__ ((noreturn));
-static void clean_child_exit(int code)
-{
-    if (pchild) {
-	apr_pool_destroy(pchild);
-    }
-    ap_mpm_pod_close(pod);
-    chdir_for_gprof();
-    exit(code);
-}
-
-static void accept_mutex_on(void)
-{
-    apr_status_t rv = apr_proc_mutex_lock(accept_mutex);
-    if (rv != APR_SUCCESS) {
-        ap_log_error(APLOG_MARK, APLOG_EMERG, rv, NULL, "couldn't grab the accept mutex");
-        exit(APEXIT_CHILDFATAL);
-    }
-}
-
-static void accept_mutex_off(void)
-{
-    apr_status_t rv = apr_proc_mutex_unlock(accept_mutex);
-    if (rv != APR_SUCCESS) {
-        ap_log_error(APLOG_MARK, APLOG_EMERG, rv, NULL, "couldn't release the accept mutex");
-        exit(APEXIT_CHILDFATAL);
-    }
-}
-
-/* On some architectures it's safe to do unserialized accept()s in the single
- * Listen case.  But it's never safe to do it in the case where there's
- * multiple Listen statements.  Define SINGLE_LISTEN_UNSERIALIZED_ACCEPT
- * when it's safe in the single Listen case.
- */
-#ifdef SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-#define SAFE_ACCEPT(stmt) do {if (ap_listeners->next) {stmt;}} while(0)
-#else
-#define SAFE_ACCEPT(stmt) do {stmt;} while(0)
-#endif
-
-AP_DECLARE(apr_status_t) ap_mpm_query(int query_code, int *result)
-{
-    switch(query_code){
-        case AP_MPMQ_MAX_DAEMON_USED:
-            *result = ap_daemons_limit;
-            return APR_SUCCESS;
-        case AP_MPMQ_IS_THREADED:
-            *result = AP_MPMQ_NOT_SUPPORTED;
-            return APR_SUCCESS;
-        case AP_MPMQ_IS_FORKED:
-            *result = AP_MPMQ_DYNAMIC;
-            return APR_SUCCESS;
-        case AP_MPMQ_HARD_LIMIT_DAEMONS:
-            *result = server_limit;
-            return APR_SUCCESS;
-        case AP_MPMQ_HARD_LIMIT_THREADS:
-            *result = HARD_THREAD_LIMIT;
-            return APR_SUCCESS;
-        case AP_MPMQ_MAX_THREADS:
-            *result = 0;
-            return APR_SUCCESS;
-        case AP_MPMQ_MIN_SPARE_DAEMONS:
-            *result = ap_daemons_min_free;
-            return APR_SUCCESS;
-        case AP_MPMQ_MIN_SPARE_THREADS:
-            *result = 0;
-            return APR_SUCCESS;
-        case AP_MPMQ_MAX_SPARE_DAEMONS:
-            *result = ap_daemons_max_free;
-            return APR_SUCCESS;
-        case AP_MPMQ_MAX_SPARE_THREADS:
-            *result = 0;
-            return APR_SUCCESS;
-        case AP_MPMQ_MAX_REQUESTS_DAEMON:
-            *result = ap_max_requests_per_child;
-            return APR_SUCCESS;
-        case AP_MPMQ_MAX_DAEMONS:
-            *result = ap_daemons_limit;
-            return APR_SUCCESS;
-    }
-    return APR_ENOTIMPL;
-}
-
-#if defined(NEED_WAITPID)
-/*
-   Systems without a real waitpid sometimes lose a child's exit while waiting
-   for another.  Search through the scoreboard for missing children.
- */
-int reap_children(int *exitcode, apr_exit_why_e *status)
-{
-    int n, pid;
-
-    for (n = 0; n < ap_max_daemons_limit; ++n) {
-        ap_sync_scoreboard_image();
-	if (ap_scoreboard_image->servers[n][0].status != SERVER_DEAD &&
-		kill((pid = ap_scoreboard_image->parent[n].pid), 0) == -1) {
-	    ap_update_child_status_from_indexes(n, 0, SERVER_DEAD, NULL);
-	    /* just mark it as having a successful exit status */
-            *status = APR_PROC_EXIT;
-            *exitcode = 0;
-	    return(pid);
-	}
-    }
-    return 0;
-}
-#endif
-
-/* handle all varieties of core dumping signals */
-static void sig_coredump(int sig)
-{
-    chdir(ap_coredump_dir);
-    apr_signal(sig, SIG_DFL);
-    if (ap_my_pid == parent_pid) {
-            ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_NOTICE,
-                         0, ap_server_conf,
-                         "seg fault or similar nasty error detected "
-                         "in the parent process");
-    }
-    kill(getpid(), sig);
-    /* At this point we've got sig blocked, because we're still inside
-     * the signal handler.  When we leave the signal handler it will
-     * be unblocked, and we'll take the signal... and coredump or whatever
-     * is appropriate for this particular Unix.  In addition the parent
-     * will see the real signal we received -- whereas if we called
-     * abort() here, the parent would only see SIGABRT.
-     */
-}
-
-/*****************************************************************
- * Connection structures and accounting...
- */
-
-static void just_die(int sig)
-{
-    clean_child_exit(0);
-}
-
-/* volatile just in case */
-static int volatile shutdown_pending;
-static int volatile restart_pending;
-static int volatile is_graceful;
-ap_generation_t volatile ap_my_generation=0;
-
-static void sig_term(int sig)
-{
-    if (shutdown_pending == 1) {
-	/* Um, is this _probably_ not an error, if the user has
-	 * tried to do a shutdown twice quickly, so we won't
-	 * worry about reporting it.
-	 */
-	return;
-    }
-    shutdown_pending = 1;
-}
-
-/* restart() is the signal handler for SIGHUP and AP_SIG_GRACEFUL
- * in the parent process, unless running in ONE_PROCESS mode
- */
-static void restart(int sig)
-{
-    if (restart_pending == 1) {
-	/* Probably not an error - don't bother reporting it */
-	return;
-    }
-    restart_pending = 1;
-    if ((is_graceful = (sig == AP_SIG_GRACEFUL))) {
-        apr_pool_cleanup_kill(pconf, NULL, ap_cleanup_scoreboard);
-    }
-}
-
-static void set_signals(void)
-{
-#ifndef NO_USE_SIGACTION
-    struct sigaction sa;
-
-    sigemptyset(&sa.sa_mask);
-    sa.sa_flags = 0;
-
-    if (!one_process) {
-	sa.sa_handler = sig_coredump;
-#if defined(SA_ONESHOT)
-	sa.sa_flags = SA_ONESHOT;
-#elif defined(SA_RESETHAND)
-	sa.sa_flags = SA_RESETHAND;
-#endif
-	if (sigaction(SIGSEGV, &sa, NULL) < 0)
-	    ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf, "sigaction(SIGSEGV)");
-#ifdef SIGBUS
-	if (sigaction(SIGBUS, &sa, NULL) < 0)
-	    ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf, "sigaction(SIGBUS)");
-#endif
-#ifdef SIGABORT
-	if (sigaction(SIGABORT, &sa, NULL) < 0)
-	    ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf, "sigaction(SIGABORT)");
-#endif
-#ifdef SIGABRT
-	if (sigaction(SIGABRT, &sa, NULL) < 0)
-	    ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf, "sigaction(SIGABRT)");
-#endif
-#ifdef SIGILL
-	if (sigaction(SIGILL, &sa, NULL) < 0)
-	    ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf, "sigaction(SIGILL)");
-#endif
-	sa.sa_flags = 0;
-    }
-    sa.sa_handler = sig_term;
-    if (sigaction(SIGTERM, &sa, NULL) < 0)
-	ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf, "sigaction(SIGTERM)");
-#ifdef SIGINT
-    if (sigaction(SIGINT, &sa, NULL) < 0)
-        ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf, "sigaction(SIGINT)");
-#endif
-#ifdef SIGXCPU
-    sa.sa_handler = SIG_DFL;
-    if (sigaction(SIGXCPU, &sa, NULL) < 0)
-	ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf, "sigaction(SIGXCPU)");
-#endif
-#ifdef SIGXFSZ
-    sa.sa_handler = SIG_DFL;
-    if (sigaction(SIGXFSZ, &sa, NULL) < 0)
-	ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf, "sigaction(SIGXFSZ)");
-#endif
-#ifdef SIGPIPE
-    sa.sa_handler = SIG_IGN;
-    if (sigaction(SIGPIPE, &sa, NULL) < 0)
-	ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf, "sigaction(SIGPIPE)");
-#endif
-
-    /* we want to ignore HUPs and AP_SIG_GRACEFUL while we're busy 
-     * processing one */
-    sigaddset(&sa.sa_mask, SIGHUP);
-    sigaddset(&sa.sa_mask, AP_SIG_GRACEFUL);
-    sa.sa_handler = restart;
-    if (sigaction(SIGHUP, &sa, NULL) < 0)
-	ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf, "sigaction(SIGHUP)");
-    if (sigaction(AP_SIG_GRACEFUL, &sa, NULL) < 0)
-        ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf, "sigaction(" AP_SIG_GRACEFUL_STRING ")");
-#else
-    if (!one_process) {
-	apr_signal(SIGSEGV, sig_coredump);
-#ifdef SIGBUS
-	apr_signal(SIGBUS, sig_coredump);
-#endif /* SIGBUS */
-#ifdef SIGABORT
-	apr_signal(SIGABORT, sig_coredump);
-#endif /* SIGABORT */
-#ifdef SIGABRT
-	apr_signal(SIGABRT, sig_coredump);
-#endif /* SIGABRT */
-#ifdef SIGILL
-	apr_signal(SIGILL, sig_coredump);
-#endif /* SIGILL */
-#ifdef SIGXCPU
-	apr_signal(SIGXCPU, SIG_DFL);
-#endif /* SIGXCPU */
-#ifdef SIGXFSZ
-	apr_signal(SIGXFSZ, SIG_DFL);
-#endif /* SIGXFSZ */
-    }
-
-    apr_signal(SIGTERM, sig_term);
-#ifdef SIGHUP
-    apr_signal(SIGHUP, restart);
-#endif /* SIGHUP */
-#ifdef AP_SIG_GRACEFUL
-    apr_signal(AP_SIG_GRACEFUL, restart);
-#endif /* AP_SIG_GRACEFUL */
-#ifdef SIGPIPE
-    apr_signal(SIGPIPE, SIG_IGN);
-#endif /* SIGPIPE */
-
-#endif
-}
-
-/*****************************************************************
- * Child process main loop.
- * The following vars are static to avoid getting clobbered by longjmp();
- * they are really private to child_main.
- */
-
-static int requests_this_child;
-static int num_listensocks = 0;
-static ap_listen_rec *listensocks;
-
-int ap_graceful_stop_signalled(void)
-{
-    /* not ever called anymore... */
-    return 0;
-}
-
-
-static void child_main(int child_num_arg)
-{
-    apr_pool_t *ptrans;
-    apr_allocator_t *allocator;
-    conn_rec *current_conn;
-    apr_status_t status = APR_EINIT;
-    int i;
-    ap_listen_rec *lr;
-    int curr_pollfd, last_pollfd = 0;
-    apr_pollfd_t *pollset;
-    int offset;
-    void *csd;
-    ap_sb_handle_t *sbh;
-    apr_status_t rv;
-
-    my_child_num = child_num_arg;
-    ap_my_pid = getpid();
-    csd = NULL;
-    requests_this_child = 0;
-
-    /* Get a sub context for global allocations in this child, so that
-     * we can have cleanups occur when the child exits.
-     */
-    apr_allocator_create(&allocator);
-    apr_pool_create_ex(&pchild, pconf, NULL, allocator);
-    apr_allocator_set_owner(allocator, pchild);
-
-    apr_pool_create(&ptrans, pchild);
-    apr_pool_tag(ptrans, "transaction");
-
-    /* needs to be done before we switch UIDs so we have permissions */
-    ap_reopen_scoreboard(pchild, NULL, 0);
-    rv = apr_proc_mutex_child_init(&accept_mutex, ap_lock_fname, pchild);
-    if (rv != APR_SUCCESS) {
-        ap_log_error(APLOG_MARK, APLOG_EMERG, rv, ap_server_conf,
-                     "Couldn't initialize cross-process lock in child");
-        clean_child_exit(APEXIT_CHILDFATAL);
-    }
-
-    if (unixd_setup_child()) {
-	clean_child_exit(APEXIT_CHILDFATAL);
-    }
-
-    ap_run_child_init(pchild, ap_server_conf);
-
-    ap_create_sb_handle(&sbh, pchild, my_child_num, 0);
-
-    (void) ap_update_child_status(sbh, SERVER_READY, (request_rec *) NULL);
-
-    ap_sync_scoreboard_image();
-
-    /* Set up the pollfd array */
-    listensocks = apr_pcalloc(pchild,
-                            sizeof(*listensocks) * (num_listensocks));
-    for (lr = ap_listeners, i = 0; i < num_listensocks; lr = lr->next, i++) {
-        listensocks[i].accept_func = lr->accept_func;
-        listensocks[i].sd = lr->sd;
-    }
-
-    apr_poll_setup(&pollset, num_listensocks, pchild);
-    for (i = 0; i < num_listensocks; i++)
-        apr_poll_socket_add(pollset, listensocks[i].sd, APR_POLLIN);
-
-    while (!die_now) {
-	/*
-	 * (Re)initialize this child to a pre-connection state.
-	 */
-
-	current_conn = NULL;
-
-	apr_pool_clear(ptrans);
-
-	if ((ap_max_requests_per_child > 0
-	     && requests_this_child++ >= ap_max_requests_per_child)) {
-	    clean_child_exit(0);
-	}
-
-	(void) ap_update_child_status(sbh, SERVER_READY, (request_rec *) NULL);
-
-	/*
-	 * Wait for an acceptable connection to arrive.
-	 */
-
-	/* Lock around "accept", if necessary */
-	SAFE_ACCEPT(accept_mutex_on());
-
-        if (num_listensocks == 1) {
-            offset = 0;
-        }
-        else {
-            /* multiple listening sockets - need to poll */
-	    for (;;) {
-                apr_status_t ret;
-                apr_int16_t event;
-                apr_int32_t n;
-
-                ret = apr_poll(pollset, &n, -1);
-                if (ret != APR_SUCCESS) {
-                    if (APR_STATUS_IS_EINTR(ret)) {
-                        continue;
-                    }
-    	            /* Single Unix documents select as returning errnos
-    	             * EBADF, EINTR, and EINVAL... and in none of those
-    	             * cases does it make sense to continue.  In fact
-    	             * on Linux 2.0.x we seem to end up with EFAULT
-    	             * occasionally, and we'd loop forever due to it.
-    	             */
-    	            ap_log_error(APLOG_MARK, APLOG_ERR, ret, ap_server_conf,
-                             "apr_poll: (listen)");
-    	            clean_child_exit(1);
-                }
-                /* find a listener */
-                curr_pollfd = last_pollfd;
-                do {
-                    curr_pollfd++;
-                    if (curr_pollfd >= num_listensocks) {
-                        curr_pollfd = 0;
-                    }
-                    /* XXX: Should we check for POLLERR? */
-                    apr_poll_revents_get(&event, listensocks[curr_pollfd].sd, pollset);
-                    if (event & APR_POLLIN) {
-                        last_pollfd = curr_pollfd;
-                        offset = curr_pollfd;
-                        goto got_fd;
-                    }
-                } while (curr_pollfd != last_pollfd);
-
-                continue;
-            }
-        }
-    got_fd:
-	/* if we accept() something we don't want to die, so we have to
-	 * defer the exit
-	 */
-	for (;;) {
-            ap_sync_scoreboard_image();
-            status = listensocks[offset].accept_func(&csd, 
-                                       &listensocks[offset], ptrans);
-
-            if (status == APR_SUCCESS) {
-                break;
-            }
-            if (status == APR_EGENERAL) {
-                /* resource shortage or should-not-occur occured */
-                clean_child_exit(1);
-            }
-        }
-	SAFE_ACCEPT(accept_mutex_off());	/* unlock after "accept" */
-
-	/*
-	 * We now have a connection, so set it up with the appropriate
-	 * socket options, file descriptors, and read/write buffers.
-	 */
-
-	current_conn = ap_run_create_connection(ptrans, ap_server_conf, csd, my_child_num, sbh);
-        if (current_conn) {
-            ap_process_connection(current_conn, csd);
-            ap_lingering_close(current_conn);
-        }
-        
-        /* Check the pod after processing a connection so that we'll go away
-         * if a graceful restart occurred while we were processing the 
-         * connection.  Otherwise, we won't wake up until a real connection 
-         * comes in and we'll use the wrong config to process it and we may
-         * block in the wrong syscall (because the new generation is using a
-         * different accept mutex) and in general it is goofy.
-         */
-        if (!ap_mpm_pod_check(pod)) {
-            die_now = 1;
-        }
-        ap_sync_scoreboard_image();
-    }
-    clean_child_exit(0);
-}
-
-
-static int make_child(server_rec *s, int slot)
-{
-    int pid;
-
-    if (slot + 1 > ap_max_daemons_limit) {
-	ap_max_daemons_limit = slot + 1;
-    }
-
-    if (one_process) {
-	apr_signal(SIGHUP, just_die);
-        /* Don't catch AP_SIG_GRACEFUL in ONE_PROCESS mode :) */
-	apr_signal(SIGINT, just_die);
-#ifdef SIGQUIT
-	apr_signal(SIGQUIT, SIG_DFL);
-#endif
-	apr_signal(SIGTERM, just_die);
-	child_main(slot);
-    }
-
-    (void) ap_update_child_status_from_indexes(slot, 0, SERVER_STARTING,
-                                               (request_rec *) NULL);
-
-
-#ifdef _OSD_POSIX
-    /* BS2000 requires a "special" version of fork() before a setuid() call */
-    if ((pid = os_fork(unixd_config.user_name)) == -1) {
-#elif defined(TPF)
-    if ((pid = os_fork(s, slot)) == -1) {
-#else
-    if ((pid = fork()) == -1) {
-#endif
-	ap_log_error(APLOG_MARK, APLOG_ERR, errno, s, "fork: Unable to fork new process");
-
-	/* fork didn't succeed. Fix the scoreboard or else
-	 * it will say SERVER_STARTING forever and ever
-	 */
-	(void) ap_update_child_status_from_indexes(slot, 0, SERVER_DEAD,
-                                                   (request_rec *) NULL);
-
-	/* In case system resources are maxxed out, we don't want
-	   Apache running away with the CPU trying to fork over and
-	   over and over again. */
-	sleep(10);
-
-	return -1;
-    }
-
-    if (!pid) {
-#ifdef HAVE_BINDPROCESSOR
-        /* by default AIX binds to a single processor
-         * this bit unbinds children which will then bind to another cpu
-         */
-	int status = bindprocessor(BINDPROCESS, (int)getpid(), 
-				   PROCESSOR_CLASS_ANY);
-	if (status != OK) {
-	    ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_WARNING, errno, 
-                         ap_server_conf, "processor unbind failed %d", status);
-	}
-#endif
-	RAISE_SIGSTOP(MAKE_CHILD);
-        AP_MONCONTROL(1);
-        /* Disable the parent's signal handlers and set up proper handling in
-         * the child.
-	 */
-	apr_signal(SIGHUP, just_die);
-	apr_signal(SIGTERM, just_die);
-        /* The child process doesn't do anything for AP_SIG_GRACEFUL.  
-         * Instead, the pod is used for signalling graceful restart.
-         */
-        apr_signal(AP_SIG_GRACEFUL, SIG_IGN);
-	child_main(slot);
-    }
-
-    ap_scoreboard_image->parent[slot].pid = pid;
-#ifdef SCOREBOARD_FILE
-    lseek(scoreboard_fd, APR_XtOffsetOf(scoreboard, parent[slot]), 0);
-    force_write(scoreboard_fd, &ap_scoreboard_image->parent[slot],
-		sizeof(process_score));
-#endif
-
-    return 0;
-}
-
-
-/* start up a bunch of children */
-static void startup_children(int number_to_start)
-{
-    int i;
-
-    for (i = 0; number_to_start && i < ap_daemons_limit; ++i) {
-	if (ap_scoreboard_image->servers[i][0].status != SERVER_DEAD) {
-	    continue;
-	}
-	if (make_child(ap_server_conf, i) < 0) {
-	    break;
-	}
-	--number_to_start;
-    }
-}
-
-
-/*
- * idle_spawn_rate is the number of children that will be spawned on the
- * next maintenance cycle if there aren't enough idle servers.  It is
- * doubled up to MAX_SPAWN_RATE, and reset only when a cycle goes by
- * without the need to spawn.
- */
-static int idle_spawn_rate = 1;
-#ifndef MAX_SPAWN_RATE
-#define MAX_SPAWN_RATE	(32)
-#endif
-static int hold_off_on_exponential_spawning;
-
-static void perform_idle_server_maintenance(apr_pool_t *p)
-{
-    int i;
-    int to_kill;
-    int idle_count;
-    worker_score *ws;
-    int free_length;
-    int free_slots[MAX_SPAWN_RATE];
-    int last_non_dead;
-    int total_non_dead;
-
-    /* initialize the free_list */
-    free_length = 0;
-
-    to_kill = -1;
-    idle_count = 0;
-    last_non_dead = -1;
-    total_non_dead = 0;
-
-    ap_sync_scoreboard_image();
-    for (i = 0; i < ap_daemons_limit; ++i) {
-	int status;
-
-	if (i >= ap_max_daemons_limit && free_length == idle_spawn_rate)
-	    break;
-	ws = &ap_scoreboard_image->servers[i][0];
-	status = ws->status;
-	if (status == SERVER_DEAD) {
-	    /* try to keep children numbers as low as possible */
-	    if (free_length < idle_spawn_rate) {
-		free_slots[free_length] = i;
-		++free_length;
-	    }
-	}
-	else {
-	    /* We consider a starting server as idle because we started it
-	     * at least a cycle ago, and if it still hasn't finished starting
-	     * then we're just going to swamp things worse by forking more.
-	     * So we hopefully won't need to fork more if we count it.
-	     * This depends on the ordering of SERVER_READY and SERVER_STARTING.
-	     */
-	    if (status <= SERVER_READY) {
-		++ idle_count;
-		/* always kill the highest numbered child if we have to...
-		 * no really well thought out reason ... other than observing
-		 * the server behaviour under linux where lower numbered children
-		 * tend to service more hits (and hence are more likely to have
-		 * their data in cpu caches).
-		 */
-		to_kill = i;
-	    }
-
-	    ++total_non_dead;
-	    last_non_dead = i;
-	}
-    }
-    ap_max_daemons_limit = last_non_dead + 1;
-    if (idle_count > ap_daemons_max_free) {
-	/* kill off one child... we use the pod because that'll cause it to
-	 * shut down gracefully, in case it happened to pick up a request
-	 * while we were counting
-	 */
-	ap_mpm_pod_signal(pod);
-	idle_spawn_rate = 1;
-    }
-    else if (idle_count < ap_daemons_min_free) {
-	/* terminate the free list */
-	if (free_length == 0) {
-	    /* only report this condition once */
-	    static int reported = 0;
-
-	    if (!reported) {
-		ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, ap_server_conf,
-			    "server reached MaxClients setting, consider"
-			    " raising the MaxClients setting");
-		reported = 1;
-	    }
-	    idle_spawn_rate = 1;
-	}
-	else {
-	    if (idle_spawn_rate >= 8) {
-		ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_INFO, 0, ap_server_conf,
-		    "server seems busy, (you may need "
-		    "to increase StartServers, or Min/MaxSpareServers), "
-		    "spawning %d children, there are %d idle, and "
-		    "%d total children", idle_spawn_rate,
-		    idle_count, total_non_dead);
-	    }
-	    for (i = 0; i < free_length; ++i) {
-#ifdef TPF
-        if (make_child(ap_server_conf, free_slots[i]) == -1) {
-            if(free_length == 1) {
-                shutdown_pending = 1;
-                ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_EMERG, 0, ap_server_conf,
-                "No active child processes: shutting down");
-            }
-        }
-#else
-		make_child(ap_server_conf, free_slots[i]);
-#endif /* TPF */
-	    }
-	    /* the next time around we want to spawn twice as many if this
-	     * wasn't good enough, but not if we've just done a graceful
-	     */
-	    if (hold_off_on_exponential_spawning) {
-		--hold_off_on_exponential_spawning;
-	    }
-	    else if (idle_spawn_rate < MAX_SPAWN_RATE) {
-		idle_spawn_rate *= 2;
-	    }
-	}
-    }
-    else {
-	idle_spawn_rate = 1;
-    }
-}
-
-/*****************************************************************
- * Executive routines.
- */
-
-int ap_mpm_run(apr_pool_t *_pconf, apr_pool_t *plog, server_rec *s)
-{
-    int index;
-    int remaining_children_to_start;
-    apr_status_t rv;
-
-    ap_log_pid(pconf, ap_pid_fname);
-
-    first_server_limit = server_limit;
-    if (changed_limit_at_restart) {
-        ap_log_error(APLOG_MARK, APLOG_WARNING | APLOG_NOERRNO, 0, s,
-                     "WARNING: Attempt to change ServerLimit "
-                     "ignored during restart");
-        changed_limit_at_restart = 0;
-    }
-
-    /* Initialize cross-process accept lock */
-    ap_lock_fname = apr_psprintf(_pconf, "%s.%" APR_PID_T_FMT,
-                                 ap_server_root_relative(_pconf, ap_lock_fname),
-                                 ap_my_pid);
-
-    rv = apr_proc_mutex_create(&accept_mutex, ap_lock_fname, 
-                               ap_accept_lock_mech, _pconf);
-    if (rv != APR_SUCCESS) {
-        ap_log_error(APLOG_MARK, APLOG_EMERG, rv, s,
-                     "Couldn't create accept lock");
-        return 1;
-    }
-
-#if APR_USE_SYSVSEM_SERIALIZE
-    if (ap_accept_lock_mech == APR_LOCK_DEFAULT || 
-        ap_accept_lock_mech == APR_LOCK_SYSVSEM) {
-#else
-    if (ap_accept_lock_mech == APR_LOCK_SYSVSEM) {
-#endif
-        rv = unixd_set_proc_mutex_perms(accept_mutex);
-        if (rv != APR_SUCCESS) {
-            ap_log_error(APLOG_MARK, APLOG_EMERG, rv, s,
-                         "Couldn't set permissions on cross-process lock");
-            return 1;
-        }
-    }
-
-    if (!is_graceful) {
-        if (ap_run_pre_mpm(pconf, SB_SHARED) != OK) {
-            return 1;
-        }
-    }
-#ifdef SCOREBOARD_FILE
-    else {
-	ap_scoreboard_fname = ap_server_root_relative(pconf, ap_scoreboard_fname);
-	ap_note_cleanups_for_fd(pconf, scoreboard_fd);
-    }
-#endif
-
-    set_signals();
-
-    if (one_process) {
-        AP_MONCONTROL(1);
-    }
-
-    if (ap_daemons_max_free < ap_daemons_min_free + 1)	/* Don't thrash... */
-	ap_daemons_max_free = ap_daemons_min_free + 1;
-
-    /* If we're doing a graceful_restart then we're going to see a lot
-	* of children exiting immediately when we get into the main loop
-	* below (because we just sent them AP_SIG_GRACEFUL).  This happens pretty
-	* rapidly... and for each one that exits we'll start a new one until
-	* we reach at least daemons_min_free.  But we may be permitted to
-	* start more than that, so we'll just keep track of how many we're
-	* supposed to start up without the 1 second penalty between each fork.
-	*/
-    remaining_children_to_start = ap_daemons_to_start;
-    if (remaining_children_to_start > ap_daemons_limit) {
-	remaining_children_to_start = ap_daemons_limit;
-    }
-    if (!is_graceful) {
-	startup_children(remaining_children_to_start);
-	remaining_children_to_start = 0;
-    }
-    else {
-	/* give the system some time to recover before kicking into
-	    * exponential mode */
-	hold_off_on_exponential_spawning = 10;
-    }
-
-    ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_NOTICE, 0, ap_server_conf,
-		"%s configured -- resuming normal operations",
-		ap_get_server_version());
-    ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_INFO, 0, ap_server_conf,
-		"Server built: %s", ap_get_server_built());
-    restart_pending = shutdown_pending = 0;
-
-    while (!restart_pending && !shutdown_pending) {
-	int child_slot;
-        apr_exit_why_e exitwhy;
-	int status, processed_status;
-        /* this is a memory leak, but I'll fix it later. */
-	apr_proc_t pid;
-
-        ap_wait_or_timeout(&exitwhy, &status, &pid, pconf);
-
-	/* XXX: if it takes longer than 1 second for all our children
-	 * to start up and get into IDLE state then we may spawn an
-	 * extra child
-	 */
-	if (pid.pid != -1) {
-            processed_status = ap_process_child_status(&pid, exitwhy, status);
-            if (processed_status == APEXIT_CHILDFATAL) {
-                return 1;
-            }
-
-	    /* non-fatal death... note that it's gone in the scoreboard. */
-	    ap_sync_scoreboard_image();
-	    child_slot = find_child_by_pid(&pid);
-	    if (child_slot >= 0) {
-		(void) ap_update_child_status_from_indexes(child_slot, 0, SERVER_DEAD,
-                                                           (request_rec *) NULL);
-                if (processed_status == APEXIT_CHILDSICK) {
-                    /* child detected a resource shortage (E[NM]FILE, ENOBUFS, etc)
-                     * cut the fork rate to the minimum 
-                     */
-                    idle_spawn_rate = 1; 
-                }
-                else if (remaining_children_to_start
-		    && child_slot < ap_daemons_limit) {
-		    /* we're still doing a 1-for-1 replacement of dead
-			* children with new children
-			*/
-		    make_child(ap_server_conf, child_slot);
-		    --remaining_children_to_start;
-		}
-#if APR_HAS_OTHER_CHILD
-	    }
-	    else if (apr_proc_other_child_read(&pid, status) == 0) {
-		/* handled */
-#endif
-	    }
-	    else if (is_graceful) {
-		/* Great, we've probably just lost a slot in the
-		    * scoreboard.  Somehow we don't know about this
-		    * child.
-		    */
-		ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_WARNING, 
-                            0, ap_server_conf,
-			    "long lost child came home! (pid %ld)", (long)pid.pid);
-	    }
-	    /* Don't perform idle maintenance when a child dies,
-		* only do it when there's a timeout.  Remember only a
-		* finite number of children can die, and it's pretty
-		* pathological for a lot to die suddenly.
-		*/
-	    continue;
-	}
-	else if (remaining_children_to_start) {
-	    /* we hit a 1 second timeout in which none of the previous
-		* generation of children needed to be reaped... so assume
-		* they're all done, and pick up the slack if any is left.
-		*/
-	    startup_children(remaining_children_to_start);
-	    remaining_children_to_start = 0;
-	    /* In any event we really shouldn't do the code below because
-		* few of the servers we just started are in the IDLE state
-		* yet, so we'd mistakenly create an extra server.
-		*/
-	    continue;
-	}
-
-	perform_idle_server_maintenance(pconf);
-#ifdef TPF
-    shutdown_pending = os_check_server(tpf_server_name);
-    ap_check_signals();
-    sleep(1);
-#endif /*TPF */
-    }
-
-    if (shutdown_pending) {
-	/* Time to gracefully shut down:
-	 * Kill child processes, tell them to call child_exit, etc...
-	 */
-	if (unixd_killpg(getpgrp(), SIGTERM) < 0) {
-	    ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf, "killpg SIGTERM");
-	}
-	ap_reclaim_child_processes(1);		/* Start with SIGTERM */
-
-	/* cleanup pid file on normal shutdown */
-	{
-	    const char *pidfile = NULL;
-	    pidfile = ap_server_root_relative (pconf, ap_pid_fname);
-	    if ( pidfile != NULL && unlink(pidfile) == 0)
-		ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_INFO,
-				0, ap_server_conf,
-				"removed PID file %s (pid=%ld)",
-				pidfile, (long)getpid());
-	}
-
-	ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_NOTICE, 0, ap_server_conf,
-		    "caught SIGTERM, shutting down");
-	return 1;
-    }
-
-    /* we've been told to restart */
-    apr_signal(SIGHUP, SIG_IGN);
-    if (one_process) {
-	/* not worth thinking about */
-	return 1;
-    }
-
-    /* advance to the next generation */
-    /* XXX: we really need to make sure this new generation number isn't in
-     * use by any of the children.
-     */
-    ++ap_my_generation;
-    ap_scoreboard_image->global->running_generation = ap_my_generation;
-    update_scoreboard_global();
-    
-    if (is_graceful) {
-	ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_NOTICE, 0, ap_server_conf,
-		    "Graceful restart requested, doing restart");
-
-	/* kill off the idle ones */
-        ap_mpm_pod_killpg(pod, ap_daemons_limit);
-
-#ifndef SCOREBOARD_FILE
-	/* This is mostly for debugging... so that we know what is still
-	    * gracefully dealing with existing request.  But we can't really
-	    * do it if we're in a SCOREBOARD_FILE because it'll cause
-	    * corruption too easily.
-	    */
-	ap_sync_scoreboard_image();
-	for (index = 0; index < ap_daemons_limit; ++index) {
-	    if (ap_scoreboard_image->servers[index][0].status != SERVER_DEAD) {
-		ap_scoreboard_image->servers[index][0].status = SERVER_GRACEFUL;
-	    }
-	}
-#endif
-    }
-    else {
-	/* Kill 'em off */
-	if (unixd_killpg(getpgrp(), SIGHUP) < 0) {
-	    ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf, "killpg SIGHUP");
-	}
-	ap_reclaim_child_processes(0);		/* Not when just starting up */
-	ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_NOTICE, 0, ap_server_conf,
-		    "SIGHUP received.  Attempting to restart");
-    }
-
-    return 0;
-}
-
-/* This really should be a post_config hook, but the error log is already
- * redirected by that point, so we need to do this in the open_logs phase.
- */
-static int prefork_open_logs(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *s)
-{
-    apr_status_t rv;
-
-    pconf = p;
-    ap_server_conf = s;
-
-    if ((num_listensocks = ap_setup_listeners(ap_server_conf)) < 1) {
-        ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_ALERT|APLOG_STARTUP, 0, 
-                     NULL, "no listening sockets available, shutting down");
-	return DONE;
-    }
-
-    if ((rv = ap_mpm_pod_open(pconf, &pod))) {
-        ap_log_error(APLOG_MARK, APLOG_CRIT|APLOG_STARTUP, rv, NULL,
-		"Could not open pipe-of-death.");
-        return DONE;
-    }
-    return OK;
-}
-
-static int prefork_pre_config(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp)
-{
-    static int restart_num = 0;
-    int no_detach, debug;
-    apr_status_t rv;
-
-    debug = ap_exists_config_define("DEBUG");
-
-    if (debug)
-        no_detach = one_process = 1;
-    else
-    {
-        no_detach = ap_exists_config_define("NO_DETACH");
-        one_process = ap_exists_config_define("ONE_PROCESS");
-    }
-
-    /* sigh, want this only the second time around */
-    if (restart_num++ == 1) {
-	is_graceful = 0;
-
-    if (!one_process) {
-        rv = apr_proc_detach(no_detach ? APR_PROC_DETACH_FOREGROUND
-                                       : APR_PROC_DETACH_DAEMONIZE);
-        if (rv != APR_SUCCESS) {
-            ap_log_error(APLOG_MARK, APLOG_CRIT, rv, NULL,
-                         "apr_proc_detach failed");
-            return HTTP_INTERNAL_SERVER_ERROR;
-        }
-    }
-
-	parent_pid = ap_my_pid = getpid();
-    }
-
-    unixd_pre_config(ptemp);
-    ap_listen_pre_config();
-    ap_daemons_to_start = DEFAULT_START_DAEMON;
-    ap_daemons_min_free = DEFAULT_MIN_FREE_DAEMON;
-    ap_daemons_max_free = DEFAULT_MAX_FREE_DAEMON;
-    ap_daemons_limit = server_limit;
-    ap_pid_fname = DEFAULT_PIDLOG;
-    ap_lock_fname = DEFAULT_LOCKFILE;
-    ap_max_requests_per_child = DEFAULT_MAX_REQUESTS_PER_CHILD;
-    ap_extended_status = 0;
-
-    apr_cpystrn(ap_coredump_dir, ap_server_root, sizeof(ap_coredump_dir));
-
-    return OK;
-}
-
-static void prefork_hooks(apr_pool_t *p)
-{
-    /* The prefork open_logs phase must run before the core's, or stderr
-     * will be redirected to a file, and the messages won't print to the
-     * console.
-     */
-    static const char *const aszSucc[] = {"core.c", NULL};
-
-#ifdef AUX3
-    (void) set42sig();
-#endif
-
-    ap_hook_open_logs(prefork_open_logs, NULL, aszSucc, APR_HOOK_MIDDLE);
-    ap_hook_pre_config(prefork_pre_config, NULL, NULL, APR_HOOK_MIDDLE);
-}
-
-static const char *set_daemons_to_start(cmd_parms *cmd, void *dummy, const char *arg) 
-{
-    const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
-    if (err != NULL) {
-        return err;
-    }
-
-    ap_daemons_to_start = atoi(arg);
-    return NULL;
-}
-
-static const char *set_min_free_servers(cmd_parms *cmd, void *dummy, const char *arg)
-{
-    const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
-    if (err != NULL) {
-        return err;
-    }
-
-    ap_daemons_min_free = atoi(arg);
-    if (ap_daemons_min_free <= 0) {
-       ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
-                    "WARNING: detected MinSpareServers set to non-positive.");
-       ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
-                    "Resetting to 1 to avoid almost certain Apache failure.");
-       ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
-                    "Please read the documentation.");
-       ap_daemons_min_free = 1;
-    }
-       
-    return NULL;
-}
-
-static const char *set_max_free_servers(cmd_parms *cmd, void *dummy, const char *arg)
-{
-    const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
-    if (err != NULL) {
-        return err;
-    }
-
-    ap_daemons_max_free = atoi(arg);
-    return NULL;
-}
-
-static const char *set_max_clients (cmd_parms *cmd, void *dummy, const char *arg) 
-{
-    const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
-    if (err != NULL) {
-        return err;
-    }
-
-    ap_daemons_limit = atoi(arg);
-    if (ap_daemons_limit > server_limit) {
-       ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
-                    "WARNING: MaxClients of %d exceeds ServerLimit value "
-                    "of %d servers,", ap_daemons_limit, server_limit);
-       ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
-                    " lowering MaxClients to %d.  To increase, please "
-                    "see the ServerLimit", server_limit);
-       ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL,
-                    " directive.");
-       ap_daemons_limit = server_limit;
-    } 
-    else if (ap_daemons_limit < 1) {
-	ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
-                     "WARNING: Require MaxClients > 0, setting to 1");
-	ap_daemons_limit = 1;
-    }
-    return NULL;
-}
-
-static const char *set_server_limit (cmd_parms *cmd, void *dummy, const char *arg) 
-{
-    int tmp_server_limit;
-    
-    const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
-    if (err != NULL) {
-        return err;
-    }
-
-    tmp_server_limit = atoi(arg);
-    /* you cannot change ServerLimit across a restart; ignore
-     * any such attempts
-     */
-    if (first_server_limit &&
-        tmp_server_limit != server_limit) {
-        /* how do we log a message?  the error log is a bit bucket at this
-         * point; we'll just have to set a flag so that ap_mpm_run()
-         * logs a warning later
-         */
-        changed_limit_at_restart = 1;
-        return NULL;
-    }
-    server_limit = tmp_server_limit;
-    
-    if (server_limit > MAX_SERVER_LIMIT) {
-       ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
-                    "WARNING: ServerLimit of %d exceeds compile time limit "
-                    "of %d servers,", server_limit, MAX_SERVER_LIMIT);
-       ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
-                    " lowering ServerLimit to %d.", MAX_SERVER_LIMIT);
-       server_limit = MAX_SERVER_LIMIT;
-    } 
-    else if (server_limit < 1) {
-	ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
-                     "WARNING: Require ServerLimit > 0, setting to 1");
-	server_limit = 1;
-    }
-    return NULL;
-}
-
-static const command_rec prefork_cmds[] = {
-UNIX_DAEMON_COMMANDS,
-LISTEN_COMMANDS,
-AP_INIT_TAKE1("StartServers", set_daemons_to_start, NULL, RSRC_CONF,
-              "Number of child processes launched at server startup"),
-AP_INIT_TAKE1("MinSpareServers", set_min_free_servers, NULL, RSRC_CONF,
-              "Minimum number of idle children, to handle request spikes"),
-AP_INIT_TAKE1("MaxSpareServers", set_max_free_servers, NULL, RSRC_CONF,
-              "Maximum number of idle children"),
-AP_INIT_TAKE1("MaxClients", set_max_clients, NULL, RSRC_CONF,
-              "Maximum number of children alive at the same time"),
-AP_INIT_TAKE1("ServerLimit", set_server_limit, NULL, RSRC_CONF,
-              "Maximum value of MaxClients for this run of Apache"),
-{ NULL }
-};
-
-module AP_MODULE_DECLARE_DATA mpm_prefork_module = {
-    MPM20_MODULE_STUFF,
-    NULL,                       /* hook to run before apache parses args */
-    NULL,			/* create per-directory config structure */
-    NULL,			/* merge per-directory config structures */
-    NULL,			/* create per-server config structure */
-    NULL,			/* merge per-server config structures */
-    prefork_cmds,		/* command apr_table_t */
-    prefork_hooks,		/* register hooks */
-};
diff --git a/server/mpm/winnt/Win9xConHook.c b/server/mpm/winnt/Win9xConHook.c
deleted file mode 100644
index f6a67ea..0000000
--- a/server/mpm/winnt/Win9xConHook.c
+++ /dev/null
@@ -1,739 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-#ifdef WIN32
-
-/*
- * Win9xConHook.dll - a hook proc to clean up Win95/98 console behavior.
- *
- * It is well(?) documented by Microsoft that the Win9x HandlerRoutine
- * hooked by the SetConsoleCtrlHandler never receives the CTRL_CLOSE_EVENT,
- * CTRL_LOGOFF_EVENT or CTRL_SHUTDOWN_EVENT signals.  
- *
- * It is possible to have a second window to monitor the WM_ENDSESSION 
- * message, but the close button still fails..
- * 
- * There is a 16bit polling method for the close window option, but this
- * is CPU intensive and requires thunking.
- *
- * Attempts to subclass the 'tty' console fail, since that message thread
- * is actually owned by the 16 bit winoldap.mod process, although the 
- * window reports it is owned by the process/thread of the console app.
- *
- * Win9xConHook is thunks the WM_CLOSE and WM_ENDSESSION messages,
- * first through a window hook procedure in the winoldap context, into
- * a subclass WndProc, and on to a second hidden monitor window in the
- * console application's context that dispatches them to the console app's
- * registered HandlerRoutine.
- */
-
-/* This debugging define turns on output to COM1, although you better init
- * the port first (even using hyperterm).  It's the only way to catch the
- * goings on within system logoff/shutdown.
- * #define DBG 1
- */
-
-#include <windows.h>
-
-/* Variables used within any process context:
- *  hookwndmsg is a shared message to send Win9xConHook signals
- *  origwndprop is a wndprop atom to store the orig wndproc of the tty
- *  hookwndprop is a wndprop atom to store the hwnd of the hidden child
- *  is_service reminds us to unmark this process on the way out
- */
-static UINT hookwndmsg = 0;
-static LPCTSTR origwndprop;
-static LPCTSTR hookwndprop;
-static BOOL is_service = 0;
-//static HMODULE hmodThis = NULL;
-
-/* Variables used within the tty processes' context:
- *  is_tty flags this process;  -1 == unknown, 1 == if tty, 0 == if not
- *  hw_tty is the handle of the top level tty in this process context
- *  is_subclassed is toggled to assure DllMain removes the subclass on unload
- *  hmodLock is there to try and prevent this dll from being unloaded if the
- *           hook is removed while we are subclassed
- */
-static int is_tty = -1;
-static HWND hwtty = NULL;
-static BOOL is_subclassed = 0;
-
-// This simply causes a gpfault the moment it tries to FreeLibrary within
-// the subclass procedure ... not good.
-//static HMODULE hmodLock = NULL;
-
-/* Variables used within the service or console app's context:
- *  hmodHook is the instance handle of this module for registering the hooks
- *  hhkGetMessage is the hook handle for catching Posted messages
- *  hhkGetMessage is the hook handle for catching Sent messages
- *  monitor_hwnd is the invisible window that handles our tty messages
- *  the tty_info strucure is used to pass args into the hidden window's thread
- */
-static HMODULE hmodHook = NULL;
-static HHOOK hhkGetMessage;
-//static HHOOK hhkCallWndProc;
-static HWND monitor_hwnd = NULL;
-
-typedef struct {
-    PHANDLER_ROUTINE phandler;
-    HINSTANCE instance;
-    HWND parent;
-    INT type;
-    LPCSTR name;
-} tty_info;
-
-/* These are the GetWindowLong offsets for the hidden window's internal info
- *  gwltty_phandler is the address of the app's HandlerRoutine
- *  gwltty_ttywnd is the tty this hidden window will handle messages from
- */
-#define gwltty_phandler 0
-#define gwltty_ttywnd 4
-
-/* Forward declaration prototypes for internal functions 
- */
-static BOOL CALLBACK EnumttyWindow(HWND wnd, LPARAM retwnd);
-static LRESULT WINAPI RegisterWindows9xService(BOOL set_service);
-static LRESULT CALLBACK ttyConsoleCtrlWndProc(HWND hwnd, UINT msg, 
-                                              WPARAM wParam, LPARAM lParam);
-static DWORD WINAPI ttyConsoleCtrlThread(LPVOID tty);
-static LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, 
-                                WPARAM wParam, LPARAM lParam);
-static int HookProc(int hc, HWND *hwnd, UINT *msg, 
-                    WPARAM *wParam, LPARAM *lParam);
-#ifdef DBG
-static VOID DbgPrintf(LPTSTR fmt, ...);
-#endif
-
-
-/* DllMain is invoked by every process in the entire system that is hooked
- * by our window hooks, notably the tty processes' context, and by the user
- * who wants tty messages (the app).  Keep it light and simple.
- */
-BOOL __declspec(dllexport) APIENTRY DllMain(HINSTANCE hModule, ULONG ulReason, 
-                                            LPVOID pctx)
-{
-    if (ulReason == DLL_PROCESS_ATTACH) 
-    {
-        //hmodThis = hModule;
-        if (!hookwndmsg) {
-            origwndprop = MAKEINTATOM(GlobalAddAtom("Win9xConHookOrigProc"));
-            hookwndprop = MAKEINTATOM(GlobalAddAtom("Win9xConHookThunkWnd"));
-            hookwndmsg = RegisterWindowMessage("Win9xConHookMsg");
-        }
-#ifdef DBG
-//        DbgPrintf("H ProcessAttach:%8.8x\r\n", 
-//                  GetCurrentProcessId());
-#endif
-    }
-    else if ( ulReason == DLL_PROCESS_DETACH ) 
-    {
-#ifdef DBG
-//        DbgPrintf("H ProcessDetach:%8.8x\r\n", GetCurrentProcessId());                
-#endif
-        if (monitor_hwnd)
-            SendMessage(monitor_hwnd, WM_DESTROY, 0, 0);
-        if (is_subclassed) 
-            SendMessage(hwtty, hookwndmsg, 0, (LPARAM)hwtty);
-        if (hmodHook)
-        {
-            if (hhkGetMessage) {
-                UnhookWindowsHookEx(hhkGetMessage);
-                hhkGetMessage = NULL;
-            }
-            //if (hhkCallWndProc) {
-            //    UnhookWindowsHookEx(hhkCallWndProc);
-            //    hhkCallWndProc = NULL;
-            //}
-            FreeLibrary(hmodHook);
-            hmodHook = NULL;
-        }
-        if (is_service)
-            RegisterWindows9xService(FALSE);
-        if (hookwndmsg) {
-            GlobalDeleteAtom((ATOM)origwndprop);
-            GlobalDeleteAtom((ATOM)hookwndprop);
-            hookwndmsg = 0;
-        }
-    }
-    return TRUE;
-}
-
-
-/*  This group of functions are provided for the service/console app
- *  to register itself a HandlerRoutine to accept tty or service messages
- */
-
-
-/*  Exported function that creates a Win9x 'service' via a hidden window,
- *  that notifies the process via the HandlerRoutine messages.
- */
-BOOL __declspec(dllexport) WINAPI Windows9xServiceCtrlHandler(
-        PHANDLER_ROUTINE phandler,
-        LPCSTR name)
-{
-    /* If we have not yet done so */
-    FreeConsole();
-
-    if (name)
-    {
-        DWORD tid;
-        HANDLE hThread;
-        /* NOTE: this is static so the module can continue to
-         * access these args while we go on to other things
-         */
-        static tty_info tty;
-        tty.instance = GetModuleHandle(NULL);
-        tty.phandler = phandler;
-        tty.parent = NULL;
-        tty.name = name;
-        tty.type = 2;
-        RegisterWindows9xService(TRUE);
-        hThread = CreateThread(NULL, 0, ttyConsoleCtrlThread,
-                               (LPVOID)&tty, 0, &tid);
-        if (hThread)
-        {
-            CloseHandle(hThread);
-            return TRUE;
-        }
-    }
-    else /* remove */
-    {
-        if (monitor_hwnd)
-            SendMessage(monitor_hwnd, WM_DESTROY, 0, 0);
-        RegisterWindows9xService(FALSE);
-        return TRUE;
-    }
-    return FALSE;
-}
-
-
-/*  Exported function that registers a HandlerRoutine to accept missing
- *  Win9x CTRL_EVENTs from the tty window, as NT does without a hassle.
- *  If add is 1 or 2, register the handler, if 2 also mark it as a service.
- *  If add is 0 deregister the handler, and unmark if a service
- */
-BOOL __declspec(dllexport) WINAPI FixConsoleCtrlHandler(
-        PHANDLER_ROUTINE phandler,
-        INT add)
-{
-    HWND parent;
-
-    if (add)
-    {
-        HANDLE hThread;
-        DWORD tid;
-        /* NOTE: this is static so the module can continue to
-         * access these args while we go on to other things
-         */
-        static tty_info tty;
-        EnumWindows(EnumttyWindow, (LPARAM)&parent);
-        if (!parent) {
-#ifdef DBG
-            DbgPrintf("A EnumttyWindow failed (%d)\r\n", GetLastError());
-#endif
-            return FALSE;
-        }
-        tty.instance = GetModuleHandle(NULL);
-        tty.phandler = phandler;
-        tty.parent = parent;
-        tty.type = add;
-        if (add == 2) {
-            tty.name = "ttyService";
-            RegisterWindows9xService(TRUE);
-        }
-        else 
-            tty.name = "ttyMonitor";
-        hThread = CreateThread(NULL, 0, ttyConsoleCtrlThread,
-                               (LPVOID)&tty, 0, &tid);
-        if (!hThread)
-            return FALSE;        
-        CloseHandle(hThread);
-        hmodHook = LoadLibrary("Win9xConHook.dll");
-        if (hmodHook)
-        {
-            hhkGetMessage = SetWindowsHookEx(WH_GETMESSAGE,
-              (HOOKPROC)GetProcAddress(hmodHook, "GetMsgProc"), hmodHook, 0);
-            //hhkCallWndProc = SetWindowsHookEx(WH_CALLWNDPROC,
-            //  (HOOKPROC)GetProcAddress(hmodHook, "CallWndProc"), hmodHook, 0);
-        }        
-        return TRUE;
-    }
-    else /* remove */
-    {
-        if (monitor_hwnd) {
-            SendMessage(monitor_hwnd, WM_DESTROY, 0, 0);
-        }
-        if (hmodHook)
-        {
-            if (hhkGetMessage) {
-                UnhookWindowsHookEx(hhkGetMessage);
-                hhkGetMessage = NULL;
-            }
-            //if (hhkCallWndProc) {
-            //    UnhookWindowsHookEx(hhkCallWndProc);
-            //    hhkCallWndProc = NULL;
-            //}
-            FreeLibrary(hmodHook);
-            hmodHook = NULL;
-        }
-        if (is_service)
-            RegisterWindows9xService(FALSE);
-        return TRUE;
-    }
-    return FALSE;
-}
-
-
-/*  The following internal helpers are only used within the app's context
- */
-
-/* ttyConsoleCreateThread is the process that runs within the user app's
- * context.  It creates and pumps the messages of a hidden monitor window,
- * watching for messages from the system, or the associated subclassed tty 
- * window.  Things can happen in our context that can't be done from the
- * tty's context, and visa versa, so the subclass procedure and this hidden
- * window work together to make it all happen.
- */
-static DWORD WINAPI ttyConsoleCtrlThread(LPVOID tty)
-{
-    WNDCLASS wc;
-    MSG msg;
-    wc.style         = CS_GLOBALCLASS;
-    wc.lpfnWndProc   = ttyConsoleCtrlWndProc; 
-    wc.cbClsExtra    = 0;
-    wc.cbWndExtra    = 8; 
-    wc.hInstance     = NULL;
-    wc.hIcon         = NULL;
-    wc.hCursor       = NULL;
-    wc.hbrBackground = NULL;
-    wc.lpszMenuName  = NULL;
-    if (((tty_info*)tty)->parent)
-        wc.lpszClassName = "ttyConHookChild";
-    else
-        wc.lpszClassName = "ApacheWin95ServiceMonitor";
-        
-    if (!RegisterClass(&wc)) { 
-#ifdef DBG
-        DbgPrintf("A proc %8.8x Error creating class %s (%d)\r\n", 
-                  GetCurrentProcessId(), wc.lpszClassName, GetLastError());
-#endif
-        return 0;
-    }
-
-    /* Create an invisible window */
-    monitor_hwnd = CreateWindow(wc.lpszClassName, ((tty_info*)tty)->name, 
-                                WS_OVERLAPPED & ~WS_VISIBLE,
-                                CW_USEDEFAULT, CW_USEDEFAULT, 
-                                CW_USEDEFAULT, CW_USEDEFAULT, 
-                                NULL, NULL, 
-                                ((tty_info*)tty)->instance, tty);
-
-    if (!monitor_hwnd) {
-#ifdef DBG
-        DbgPrintf("A proc %8.8x Error creating window %s %s (%d)\r\n", 
-                  GetCurrentProcessId(), wc.lpszClassName, 
-                  ((tty_info*)tty)->name, GetLastError());
-#endif
-        return 0;
-    }
-
-    while (GetMessage(&msg, NULL, 0, 0)) 
-    {
-        TranslateMessage(&msg);
-        DispatchMessage(&msg);
-    }
-
-    /* Tag again as deleted, just in case we missed WM_DESTROY */
-    monitor_hwnd = NULL;
-    return 0;
-}
-
-
-/* This is the WndProc procedure for our invisible window.
- * When our subclasssed tty window receives the WM_CLOSE, WM_ENDSESSION,
- * or WM_QUERYENDSESSION messages, the message is dispatched to our hidden
- * window (this message process), and we call the installed HandlerRoutine 
- * that was registered by the app.
- */
-static LRESULT CALLBACK ttyConsoleCtrlWndProc(HWND hwnd, UINT msg, 
-                                              WPARAM wParam, LPARAM lParam)
-{
-    if (msg == WM_CREATE)
-    {
-        tty_info *tty = (tty_info*)(((LPCREATESTRUCT)lParam)->lpCreateParams);
-        SetWindowLong(hwnd, gwltty_phandler, (LONG)tty->phandler);
-        SetWindowLong(hwnd, gwltty_ttywnd, (LONG)tty->parent);
-#ifdef DBG
-        DbgPrintf("A proc %8.8x created %8.8x %s for tty wnd %8.8x\r\n", 
-                  GetCurrentProcessId(), hwnd, 
-                  tty->name, tty->parent);
-#endif
-        if (tty->parent) {
-            SetProp(tty->parent, hookwndprop, hwnd);
-            PostMessage(tty->parent, hookwndmsg, 
-                        tty->type, (LPARAM)tty->parent); 
-        }
-        return 0;
-    }
-    else if (msg == WM_DESTROY)
-    {
-        HWND parent = (HWND)GetWindowLong(hwnd, gwltty_ttywnd);
-#ifdef DBG
-        DbgPrintf("A proc %8.8x destroyed %8.8x ttyConHookChild\r\n",
-                  GetCurrentProcessId(), hwnd);
-#endif
-        if (parent) {
-            RemoveProp(parent, hookwndprop);
-            SendMessage(parent, hookwndmsg, 0, (LPARAM)parent); 
-        }
-        monitor_hwnd = NULL;
-    }
-    else if (msg == WM_CLOSE)
-    {
-        PHANDLER_ROUTINE phandler = 
-            (PHANDLER_ROUTINE)GetWindowLong(hwnd, gwltty_phandler);
-        LRESULT rv = phandler(CTRL_CLOSE_EVENT);
-#ifdef DBG
-        DbgPrintf("A proc %8.8x invoked CTRL_CLOSE_EVENT "
-                  "returning %d\r\n",
-                  GetCurrentProcessId(), rv);
-#endif
-        if (rv)
-            return !rv;
-    }
-    else if ((msg == WM_QUERYENDSESSION) || (msg == WM_ENDSESSION))
-    {
-        if (lParam & ENDSESSION_LOGOFF) 
-        {
-            PHANDLER_ROUTINE phandler = 
-                (PHANDLER_ROUTINE)GetWindowLong(hwnd, gwltty_phandler);
-            LRESULT rv = phandler(CTRL_LOGOFF_EVENT);
-#ifdef DBG
-            DbgPrintf("A proc %8.8x invoked CTRL_LOGOFF_EVENT "
-                      "returning %d\r\n",
-                      GetCurrentProcessId(), rv);
-#endif
-            if (rv)
-                return ((msg == WM_QUERYENDSESSION) ? rv : !rv);
-        }
-        else
-        {
-            PHANDLER_ROUTINE phandler = 
-                (PHANDLER_ROUTINE)GetWindowLong(hwnd, gwltty_phandler);
-            LRESULT rv = phandler(CTRL_SHUTDOWN_EVENT);
-#ifdef DBG
-            DbgPrintf("A proc %8.8x invoked CTRL_SHUTDOWN_EVENT "
-                      "returning %d\r\n", GetCurrentProcessId(), rv);
-#endif
-            if (rv)
-                return ((msg == WM_QUERYENDSESSION) ? rv : !rv);
-        }
-    }
-    return (DefWindowProc(hwnd, msg, wParam, lParam));
-}
-
-
-/*  The following internal helpers are invoked by the hooked tty and our app
- */
-
- 
-/*  Register or deregister the current process as a Windows9x style service.
- *  Experience shows this call is ignored across processes, so the second
- *  arg to RegisterServiceProcess (process group id) is effectively useless.
- */
-static LRESULT WINAPI RegisterWindows9xService(BOOL set_service)
-{
-    static HINSTANCE hkernel;
-    static DWORD (WINAPI *register_service_process)(DWORD, DWORD) = NULL;
-    BOOL rv;
-
-    if (set_service == is_service)
-        return 1;
-
-#ifdef DBG
-    DbgPrintf("R %s proc %8.8x as a service\r\n",
-              set_service ? "installing" : "removing",
-              GetCurrentProcessId());
-#endif
-
-    if (!register_service_process)
-    {
-        /* Obtain a handle to the kernel library */
-        hkernel = LoadLibrary("KERNEL32.DLL");
-        if (!hkernel)
-            return 0;
-    
-        /* Find the RegisterServiceProcess function */
-        register_service_process = (DWORD (WINAPI *)(DWORD, DWORD))
-                         GetProcAddress(hkernel, "RegisterServiceProcess");
-        if (register_service_process == NULL) {
-            FreeLibrary(hkernel);
-            return 0;
-        }
-    }
-    
-    /* Register this process as a service */
-    rv = register_service_process(0, set_service != FALSE);
-    if (rv)
-        is_service = set_service;
-    
-    if (!is_service)
-    {
-        /* Unload the kernel library */
-        FreeLibrary(hkernel);
-        register_service_process = NULL;
-    }
-    return rv;
-}
-
-
-/* 
- * This function only works when this process is the active process 
- * (e.g. once it is running a child process, it can no longer determine 
- * which console window is its own.)
- */
-static BOOL CALLBACK EnumttyWindow(HWND wnd, LPARAM retwnd)
-{
-    char tmp[8];
-    if (GetClassName(wnd, tmp, sizeof(tmp)) && !strcmp(tmp, "tty")) 
-    {
-        DWORD wndproc, thisproc = GetCurrentProcessId();
-        GetWindowThreadProcessId(wnd, &wndproc);
-        if (wndproc == thisproc) {
-            *((HWND*)retwnd) = wnd;
-            return FALSE;
-        }
-    }
-    return TRUE;
-}
-
-
-/* The remaining code all executes --in the tty's own process context--
- *
- * That means special attention must be paid to what it's doing...
- */
-
-/* Subclass message process for the tty window
- *
- * This code -handles- WM_CLOSE, WM_ENDSESSION and WM_QUERYENDSESSION
- * by dispatching them to the window identified by the hookwndprop
- * property atom set against our window.  Messages are then dispatched
- * to origwndprop property atom we set against the window when we
- * injected this subclass.  This trick did not work with simply a hook.
- */
-static LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, 
-                                WPARAM wParam, LPARAM lParam)
-{
-    WNDPROC origproc = (WNDPROC) GetProp(hwnd, origwndprop);
-    if (!origproc)
-        return 0;
-
-    if (msg == WM_NCDESTROY 
-        || (msg == hookwndmsg && !LOWORD(wParam) && (HWND)lParam == hwnd))
-    {
-        if (is_subclassed) {
-#ifdef DBG
-            DbgPrintf("W proc %08x hwnd:%08x Subclass removed\r\n", 
-                      GetCurrentProcessId(), hwnd);
-#endif
-            if (is_service)
-                RegisterWindows9xService(FALSE);
-            SetWindowLong(hwnd, GWL_WNDPROC, (LONG)origproc);
-            RemoveProp(hwnd, origwndprop);
-            RemoveProp(hwnd, hookwndprop);
-            is_subclassed = FALSE;
-            //if (hmodLock)
-            //    FreeLibrary(hmodLock);
-            //hmodLock = NULL;
-        }
-    }
-    else if (msg == WM_CLOSE || msg == WM_ENDSESSION 
-                             || msg == WM_QUERYENDSESSION)
-    {
-        HWND child = (HWND)GetProp(hwnd, hookwndprop);
-        if (child) {
-#ifdef DBG
-            DbgPrintf("W proc %08x hwnd:%08x forwarded msg:%d\r\n", 
-                      GetCurrentProcessId(), hwnd, msg);
-#endif
-            return SendMessage(child, msg, wParam, lParam);
-        }
-    }
-    return CallWindowProc(origproc, hwnd, msg, wParam, lParam);
-}
-
-
-/* HookProc, once installed, is responsible for subclassing the system
- * tty windows.  It generally does nothing special itself, since
- * research indicates that it cannot deal well with the messages we are
- * interested in, that is, WM_CLOSE, WM_QUERYSHUTDOWN and WM_SHUTDOWN
- * of the tty process.
- *
- * Respond and subclass only when a WM_NULL is received by the window.
- */
-int HookProc(int hc, HWND *hwnd, UINT *msg, WPARAM *wParam, LPARAM *lParam)
-{
-    if (is_tty == -1 && *hwnd) 
-    {
-        char ttybuf[8];
-        HWND htty;
-        hwtty = *hwnd;
-        while (htty = GetParent(hwtty))
-            hwtty = htty;
-        is_tty = (GetClassName(hwtty, ttybuf, sizeof(ttybuf)) 
-                  && !strcmp(ttybuf, "tty"));
-#ifdef DBG
-        if (is_tty)
-            DbgPrintf("H proc %08x tracking hwnd %08x\r\n", 
-                      GetCurrentProcessId(), hwtty);
-#endif
-    }
-
-    if (*msg == hookwndmsg && *wParam && *lParam == (LPARAM)hwtty && is_tty)
-    {
-        WNDPROC origproc = (WNDPROC)GetWindowLong(hwtty, GWL_WNDPROC);
-        //char myname[MAX_PATH];
-        //if (GetModuleFileName(hmodThis, myname, sizeof(myname)))
-        //    hmodLock = LoadLibrary(myname);        
-        SetProp(hwtty, origwndprop, origproc);
-        SetWindowLong(hwtty, GWL_WNDPROC, (LONG)WndProc);
-        is_subclassed = TRUE;
-#ifdef DBG
-        DbgPrintf("H proc %08x hwnd:%08x Subclassed\r\n", 
-                  GetCurrentProcessId(), hwtty);
-#endif
-        if (LOWORD(*wParam) == 2)
-            RegisterWindows9xService(TRUE);
-    }
-
-    return -1;
-}
-
-
-/*
- * PostMessage Hook:
- */
-LRESULT __declspec(dllexport) CALLBACK GetMsgProc(INT hc, WPARAM wParam, 
-                                                  LPARAM lParam)
-{
-    PMSG pmsg;
-
-    pmsg = (PMSG)lParam;
-
-    if (pmsg) {
-        int rv = HookProc(hc, &pmsg->hwnd, &pmsg->message, 
-                          &pmsg->wParam, &pmsg->lParam);
-        if (rv != -1)
-            return rv;
-    }
-    /* 
-     * CallNextHookEx apparently ignores the hhook argument, so pass NULL
-     */
-    return CallNextHookEx(NULL, hc, wParam, lParam);
-}
-
-
-/*
- * SendMessage Hook:
- */
-LRESULT __declspec(dllexport) CALLBACK CallWndProc(INT hc, WPARAM wParam, 
-                                                   LPARAM lParam)
-{
-    PCWPSTRUCT pcwps = (PCWPSTRUCT)lParam;
-    
-    if (pcwps) {
-        int rv = HookProc(hc, &pcwps->hwnd, &pcwps->message, 
-                          &pcwps->wParam, &pcwps->lParam);
-        if (rv != -1)
-            return rv;
-    }
-    /* 
-     * CallNextHookEx apparently ignores the hhook argument, so pass NULL
-     */
-    return CallNextHookEx(NULL, hc, wParam, lParam);
-}
-
-
-#ifdef DBG
-VOID DbgPrintf(
-    LPTSTR fmt,
-    ...
-    )
-{
-    static HANDLE mutex;
-    va_list marker;
-    TCHAR szBuf[256];
-    DWORD t;
-    HANDLE gDbgOut;
-
-    va_start(marker, fmt);
-    wvsprintf(szBuf, fmt, marker);
-    va_end(marker);
-
-    if (!mutex)
-        mutex = CreateMutex(NULL, FALSE, "Win9xConHookDbgOut");
-    WaitForSingleObject(mutex, INFINITE);
-    gDbgOut = CreateFile("COM1", GENERIC_READ | GENERIC_WRITE, 0,
-                         NULL, OPEN_EXISTING, FILE_FLAG_WRITE_THROUGH, NULL);
-    WriteFile(gDbgOut, szBuf, strlen(szBuf), &t, NULL);
-    CloseHandle(gDbgOut);
-    ReleaseMutex(mutex);
-}
-#endif
-
-#endif /* WIN32 */
diff --git a/server/mpm/winnt/Win9xConHook.def b/server/mpm/winnt/Win9xConHook.def
deleted file mode 100644
index 85ec166..0000000
--- a/server/mpm/winnt/Win9xConHook.def
+++ /dev/null
@@ -1,10 +0,0 @@
-LIBRARY Win9xConHook
-
-EXETYPE WINDOWS
-
-EXPORTS
-    DllMain
-    GetMsgProc
-    CallWndProc
-    FixConsoleCtrlHandler
-    Windows9xServiceCtrlHandler
diff --git a/server/mpm/winnt/Win9xConHook.dsp b/server/mpm/winnt/Win9xConHook.dsp
deleted file mode 100644
index 632ab67..0000000
--- a/server/mpm/winnt/Win9xConHook.dsp
+++ /dev/null
@@ -1,103 +0,0 @@
-# Microsoft Developer Studio Project File - Name="Win9xConHook" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=Win9xConHook - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "Win9xConHook.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "Win9xConHook.mak" CFG="Win9xConHook - Win32 Release"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "Win9xConHook - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "Win9xConHook - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "Win9xConHook - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir ".\Release"
-# PROP BASE Intermediate_Dir ".\Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /O2 /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "SHARED_MODULE" /Fd"Release\Win9xConHook" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x809 /d "NDEBUG"
-# ADD RSC /l 0x809 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib /nologo /subsystem:windows /dll /incremental:no /map /machine:I386 /base:"0x1c0f0000"
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib /nologo /subsystem:windows /dll /incremental:no /map /machine:I386 /base:"0x1c0f0000"
-
-!ELSEIF  "$(CFG)" == "Win9xConHook - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "SHARED_MODULE" /Fd"Debug\Win9xConHook" /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x809 /d "_DEBUG"
-# ADD RSC /l 0x809 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib /nologo /subsystem:windows /dll /incremental:no /map /debug /machine:I386 /base:"0x1c0f0000"
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib /nologo /subsystem:windows /dll /incremental:no /map /debug /machine:I386 /base:"0x1c0f0000"
-
-!ENDIF 
-
-# Begin Target
-
-# Name "Win9xConHook - Win32 Release"
-# Name "Win9xConHook - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\Win9xConHook.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\Win9xConHook.def
-# End Source File
-# Begin Source File
-
-SOURCE=.\Win9xConHook.h
-# End Source File
-# End Target
-# End Project
diff --git a/server/mpm/winnt/Win9xConHook.h b/server/mpm/winnt/Win9xConHook.h
deleted file mode 100644
index b96414b..0000000
--- a/server/mpm/winnt/Win9xConHook.h
+++ /dev/null
@@ -1,99 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-#ifndef AP_WIN9XCONHOOK_H
-#define AP_WIN9XCONHOOK_H
-
-#ifdef WIN32
-
-/* Windows9xServiceCtrlHandler registers a handler routine, frees the
- * console window, and registers this process as a service in Win9x.
- * It creats a hidden window of class "ApacheWin95ServiceMonitor"
- * and titled by the name passed, which passes the WM_SHUTDOWN message 
- * through the given HandlerRoutine's CTRL_SHUTDOWN event.
- * Call with name of NULL to remove the Service handler.
- */
-BOOL WINAPI Windows9xServiceCtrlHandler(PHANDLER_ROUTINE phandler, LPCSTR name);
-
-
-/* FixConsoleControlHandler registers a handler routine with the
- * Win9xConHook.dll, creating a hidden window and forwarding the
- * WM_ENDSESSION and WM_CLOSE messages to the given HandlerRoutine
- * as CTRL_SHUTDOWN_EVENT, CTRL_LOGOFF_EVENT and CTRL_CLOSE_EVENT. 
- * The application should still use SetConsoleCtrlHandler to grab
- * the CTRL_BREAK_EVENT and CTRL_C_EVENT, if desired.
- */
-BOOL WINAPI FixConsoleCtrlHandler(PHANDLER_ROUTINE phandler, BOOL add);
-
-
-/*
- * Exported PostMessage Hook, never use this directly:
- *
- * LRESULT CALLBACK GetMsgProc(INT hc, WPARAM wParam, LPARAM lParam);
- */
-
-
-/*
- * Exported SendMessage Hook, never use this directly:
- *
- * LRESULT CALLBACK CallWndProc(INT hc, WPARAM wParam, LPARAM lParam);
- */
-
-#endif /* WIN32 */
-
-#endif AP_WIN9XCONHOOK_H
\ No newline at end of file
diff --git a/server/mpm/winnt/mpm.h b/server/mpm/winnt/mpm.h
deleted file mode 100644
index 752af27..0000000
--- a/server/mpm/winnt/mpm.h
+++ /dev/null
@@ -1,79 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-#ifndef APACHE_MPM_H
-#define APACHE_MPM_H
-
-/* mpm.h is the place to make declarations that are MPM specific but that must be 
- * shared with non-mpm specific code in the server.  Hummm, perhaps we can
- * move most of this stuff to mpm_common.h?
- */
-
-#include "scoreboard.h"
-
-#define MPM_NAME "WinNT"
-
-#define AP_MPM_WANT_SET_PIDFILE
-#define AP_MPM_WANT_SET_MAX_REQUESTS
-#define AP_MPM_WANT_SET_COREDUMPDIR
-#define AP_MPM_WANT_SET_SCOREBOARD
-
-extern int ap_threads_per_child;
-extern server_rec *ap_server_conf;
-
-#endif /* APACHE_MPM_H */
diff --git a/server/mpm/winnt/mpm_default.h b/server/mpm/winnt/mpm_default.h
deleted file mode 100644
index 7121298..0000000
--- a/server/mpm/winnt/mpm_default.h
+++ /dev/null
@@ -1,108 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-#ifndef APACHE_MPM_DEFAULT_H
-#define APACHE_MPM_DEFAULT_H
-
-/* Number of threads to spawn off by default --- also, if fewer than
- * this free when the caretaker checks, it will spawn more.
- */
-#ifndef DEFAULT_START_THREAD
-#define DEFAULT_START_THREAD 5
-#endif
-
-/* Maximum number of *free* server threads --- more than this, and
- * they will die off.
-#ifndef DEFAULT_MAX_SPARE_THREAD
-#define DEFAULT_MAX_SPARE_THREAD 10
-#endif
-*/
-
-/* Minimum --- fewer than this, and more will be created */
-/*
-#ifndef DEFAULT_MIN_SPARE_THREAD
-#define DEFAULT_MIN_SPARE_THREAD 5
-#endif
-*/
-
-/* Number of servers to spawn off by default
- */
-#ifndef DEFAULT_NUM_DAEMON
-#define DEFAULT_NUM_DAEMON 1
-#endif
-
-/* Where the main/parent process's pid is logged */
-#ifndef DEFAULT_PIDLOG
-#define DEFAULT_PIDLOG "logs/httpd.pid"
-#endif
-
-/*
- * Interval, in microseconds, between scoreboard maintenance.
- */
-#ifndef SCOREBOARD_MAINTENANCE_INTERVAL
-#define SCOREBOARD_MAINTENANCE_INTERVAL 1000000
-#endif
-
-/* Number of requests to try to handle in a single process.  If <= 0,
- * the children don't die off.
- */
-#ifndef DEFAULT_MAX_REQUESTS_PER_CHILD
-#define DEFAULT_MAX_REQUESTS_PER_CHILD 0
-#endif
-
-#endif /* AP_MPM_DEFAULT_H */
diff --git a/server/mpm/winnt/mpm_winnt.c b/server/mpm/winnt/mpm_winnt.c
deleted file mode 100644
index 55a29e1..0000000
--- a/server/mpm/winnt/mpm_winnt.c
+++ /dev/null
@@ -1,2456 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-#define CORE_PRIVATE 
-#include "httpd.h" 
-#include "http_main.h" 
-#include "http_log.h" 
-#include "http_config.h"	/* for read_config */ 
-#include "http_core.h"		/* for get_remote_host */ 
-#include "http_connection.h"
-#include "apr_portable.h"
-#include "apr_getopt.h"
-#include "apr_strings.h"
-#include "apr_lib.h"
-#include "apr_shm.h"
-#include "apr_thread_mutex.h"
-#include "ap_mpm.h"
-#include "ap_config.h"
-#include "ap_listen.h"
-#include "mpm_default.h"
-#include "mpm_winnt.h"
-#include "mpm_common.h"
-#include <malloc.h>
-
-/* Limit on the threads per process.  Clients will be locked out if more than
- * this  * HARD_SERVER_LIMIT are needed.
- *
- * We keep this for one reason it keeps the size of the scoreboard file small
- * enough that we can read the whole thing without worrying too much about
- * the overhead.
- */
-#ifndef HARD_THREAD_LIMIT
-#define HARD_THREAD_LIMIT 1920
-#endif
-
-/* Limit on the total --- clients will be locked out if more servers than
- * this are needed.  It is intended solely to keep the server from crashing
- * when things get out of hand.
- *
- * We keep a hard maximum number of servers, for two reasons --- first off,
- * in case something goes seriously wrong, we want to stop the fork bomb
- * short of actually crashing the machine we're running on by filling some
- * kernel table.  Secondly, it keeps the size of the scoreboard file small
- * enough that we can read the whole thing without worrying too much about
- * the overhead.
- */
-#define HARD_SERVER_LIMIT 1
-
-/* scoreboard.c does the heavy lifting; all we do is create the child
- * score by moving a handle down the pipe into the child's stdin.
- */
-extern apr_shm_t *ap_scoreboard_shm;
-server_rec *ap_server_conf;
-typedef HANDLE thread;
-
-/* Definitions of WINNT MPM specific config globals */
-static apr_pool_t *pconf;
-static apr_pool_t *pchild = NULL;
-static int workers_may_exit = 0;
-static int shutdown_in_progress = 0;
-static unsigned int g_blocked_threads = 0;
-
-static HANDLE shutdown_event;	/* used to signal the parent to shutdown */
-static HANDLE restart_event;	/* used to signal the parent to restart */
-static HANDLE exit_event;       /* used by parent to signal the child to exit */
-static HANDLE max_requests_per_child_event;
-
-static char ap_coredump_dir[MAX_STRING_LEN];
-
-static int one_process = 0;
-static char const* signal_arg = NULL;
-
-OSVERSIONINFO osver; /* VER_PLATFORM_WIN32_NT */
-
-apr_proc_mutex_t *start_mutex;
-static DWORD my_pid;
-static DWORD parent_pid;
-
-int ap_threads_per_child = 0;
-
-/* ap_my_generation are used by the scoreboard code */
-ap_generation_t volatile ap_my_generation=0;
-
-/* Queue for managing the passing of COMP_CONTEXTs between
- * the accept and worker threads.
- */
-static apr_thread_mutex_t  *qlock;
-static PCOMP_CONTEXT qhead = NULL;
-static PCOMP_CONTEXT qtail = NULL;
-static int num_completion_contexts = 0;
-static HANDLE ThreadDispatchIOCP = NULL;
-
-/* Stub functions until this MPM supports the connection status API */
-
-AP_DECLARE(void) ap_update_connection_status(long conn_id, const char *key, \
-                                             const char *value)
-{
-    /* NOP */
-}
-
-AP_DECLARE(void) ap_reset_connection_status(long conn_id)
-{
-    /* NOP */
-}
-
-AP_DECLARE(apr_array_header_t *) ap_get_status_table(apr_pool_t *p)
-{
-    /* NOP */
-    return NULL;
-}
-
-/* 
- * Command processors 
- */
-
-static const char *set_threads_per_child (cmd_parms *cmd, void *dummy, char *arg) 
-{
-    const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
-    if (err != NULL) {
-        return err;
-    }
-
-    ap_threads_per_child = atoi(arg);
-    if (ap_threads_per_child > HARD_THREAD_LIMIT) {
-        ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
-                     "WARNING: ThreadsPerChild of %d exceeds compile time"
-                     " limit of %d threads,", ap_threads_per_child, 
-                     HARD_THREAD_LIMIT);
-        ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL,
-                     " lowering ThreadsPerChild to %d. To increase, please"
-                     " see the  HARD_THREAD_LIMIT define in %s.", 
-                     HARD_THREAD_LIMIT, AP_MPM_HARD_LIMITS_FILE);
-        ap_threads_per_child = HARD_THREAD_LIMIT;
-    }
-    else if (ap_threads_per_child < 1) {
-	ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
-                     "WARNING: Require ThreadsPerChild > 0, setting to 1");
-	ap_threads_per_child = 1;
-    }
-    return NULL;
-}
-
-static const command_rec winnt_cmds[] = {
-LISTEN_COMMANDS,
-{ "ThreadsPerChild", set_threads_per_child, NULL, RSRC_CONF, TAKE1,
-  "Number of threads each child creates" },
-{ NULL }
-};
-
-
-AP_DECLARE(void) mpm_recycle_completion_context(PCOMP_CONTEXT pCompContext)
-{
-    /* Recycle the completion context.
-     * - destroy the ptrans pool
-     * - put the context on the queue to be consumed by the accept thread
-     * Note: 
-     * pCompContext->accept_socket may be in a disconnected but reusable 
-     * state so -don't- close it.
-     */
-    if (pCompContext) {
-        apr_pool_clear(pCompContext->ptrans);
-        apr_pool_destroy(pCompContext->ptrans);
-        pCompContext->ptrans = NULL;
-        pCompContext->next = NULL;
-        apr_thread_mutex_lock(qlock);
-        if (qtail)
-            qtail->next = pCompContext;
-        else
-            qhead = pCompContext;
-        qtail = pCompContext;
-        apr_thread_mutex_unlock(qlock);
-    }
-}
-
-AP_DECLARE(PCOMP_CONTEXT) mpm_get_completion_context(void)
-{
-    PCOMP_CONTEXT pCompContext = NULL;
-
-    /* Grab a context off the queue */
-    apr_thread_mutex_lock(qlock);
-    if (qhead) {
-        pCompContext = qhead;
-        qhead = qhead->next;
-        if (!qhead)
-            qtail = NULL;
-    }
-    apr_thread_mutex_unlock(qlock);
-
-    /* If we failed to grab a context off the queue, alloc one out of 
-     * the child pool. There may be up to ap_threads_per_child contexts
-     * in the system at once.
-     */
-    if (!pCompContext) {
-        if (num_completion_contexts >= ap_threads_per_child) {
-            static int reported = 0;
-            if (!reported) {
-                ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_WARNING, 0, ap_server_conf,
-                             "Server ran out of threads to serve requests. Consider "
-                             "raising the ThreadsPerChild setting");
-                reported = 1;
-            }
-            return NULL;
-        }
-        pCompContext = (PCOMP_CONTEXT) apr_pcalloc(pchild, sizeof(COMP_CONTEXT));
-
-        pCompContext->Overlapped.hEvent = CreateEvent(NULL, FALSE, FALSE, NULL); 
-        if (pCompContext->Overlapped.hEvent == NULL) {
-            /* Hopefully this is a temporary condition ... */
-            ap_log_error(APLOG_MARK,APLOG_WARNING, apr_get_os_error(), ap_server_conf,
-                         "mpm_get_completion_context: CreateEvent failed.");
-            return NULL;
-        }
-        pCompContext->accept_socket = INVALID_SOCKET;
-        num_completion_contexts++;
-    }
-    return pCompContext;
-}
-
-AP_DECLARE(apr_status_t) mpm_post_completion_context(PCOMP_CONTEXT pCompContext, 
-                                                     io_state_e state)
-{
-    LPOVERLAPPED pOverlapped;
-    if (pCompContext)
-        pOverlapped = &pCompContext->Overlapped;
-    else
-        pOverlapped = NULL;
-
-    PostQueuedCompletionStatus(ThreadDispatchIOCP, 0, state, pOverlapped);
-    return APR_SUCCESS;
-}
-
-/* This is the helper code to resolve late bound entry points 
- * missing from one or more releases of the Win32 API...
- * but it sure would be nice if we didn't duplicate this code
- * from the APR ;-)
- */
-static const char* const lateDllName[DLL_defined] = {
-    "kernel32", "advapi32", "mswsock",  "ws2_32"  };
-static HMODULE lateDllHandle[DLL_defined] = {
-    NULL,       NULL,       NULL,       NULL      };
-
-FARPROC ap_load_dll_func(ap_dlltoken_e fnLib, char* fnName, int ordinal)
-{
-    if (!lateDllHandle[fnLib]) { 
-        lateDllHandle[fnLib] = LoadLibrary(lateDllName[fnLib]);
-        if (!lateDllHandle[fnLib])
-            return NULL;
-    }
-    if (ordinal)
-        return GetProcAddress(lateDllHandle[fnLib], (char *) ordinal);
-    else
-        return GetProcAddress(lateDllHandle[fnLib], fnName);
-}
-
-/* To share the semaphores with other processes, we need a NULL ACL
- * Code from MS KB Q106387
- */
-static PSECURITY_ATTRIBUTES GetNullACL()
-{
-    PSECURITY_DESCRIPTOR pSD;
-    PSECURITY_ATTRIBUTES sa;
-
-    sa  = (PSECURITY_ATTRIBUTES) LocalAlloc(LPTR, sizeof(SECURITY_ATTRIBUTES));
-    sa->nLength = sizeof(sizeof(SECURITY_ATTRIBUTES));
-
-    pSD = (PSECURITY_DESCRIPTOR) LocalAlloc(LPTR, SECURITY_DESCRIPTOR_MIN_LENGTH);
-    sa->lpSecurityDescriptor = pSD;
-
-    if (pSD == NULL || sa == NULL) {
-        return NULL;
-    }
-    apr_set_os_error(0);
-    if (!InitializeSecurityDescriptor(pSD, SECURITY_DESCRIPTOR_REVISION)
-	|| apr_get_os_error()) {
-        LocalFree( pSD );
-        LocalFree( sa );
-        return NULL;
-    }
-    if (!SetSecurityDescriptorDacl(pSD, TRUE, (PACL) NULL, FALSE)
-	|| apr_get_os_error()) {
-        LocalFree( pSD );
-        LocalFree( sa );
-        return NULL;
-    }
-
-    sa->bInheritHandle = TRUE;
-    return sa;
-}
-
-static void CleanNullACL( void *sa ) {
-    if( sa ) {
-        LocalFree( ((PSECURITY_ATTRIBUTES)sa)->lpSecurityDescriptor);
-        LocalFree( sa );
-    }
-}
-
-/*
- * The Win32 call WaitForMultipleObjects will only allow you to wait for 
- * a maximum of MAXIMUM_WAIT_OBJECTS (current 64).  Since the threading 
- * model in the multithreaded version of apache wants to use this call, 
- * we are restricted to a maximum of 64 threads.  This is a simplistic 
- * routine that will increase this size.
- */
-static DWORD wait_for_many_objects(DWORD nCount, CONST HANDLE *lpHandles, 
-                                   DWORD dwSeconds)
-{
-    time_t tStopTime;
-    DWORD dwRet = WAIT_TIMEOUT;
-    DWORD dwIndex=0;
-    BOOL bFirst = TRUE;
-  
-    tStopTime = time(NULL) + dwSeconds;
-  
-    do {
-        if (!bFirst)
-            Sleep(1000);
-        else
-            bFirst = FALSE;
-          
-        for (dwIndex = 0; dwIndex * MAXIMUM_WAIT_OBJECTS < nCount; dwIndex++) {
-            dwRet = WaitForMultipleObjects( 
-                min(MAXIMUM_WAIT_OBJECTS, nCount - (dwIndex * MAXIMUM_WAIT_OBJECTS)),
-                lpHandles + (dwIndex * MAXIMUM_WAIT_OBJECTS), 
-                0, 0);
-                                           
-            if (dwRet != WAIT_TIMEOUT) {                                          
-              break;
-            }
-        }
-    } while((time(NULL) < tStopTime) && (dwRet == WAIT_TIMEOUT));
-    
-    return dwRet;
-}
-
-/*
- * Signalling Apache on NT.
- *
- * Under Unix, Apache can be told to shutdown or restart by sending various
- * signals (HUP, USR, TERM). On NT we don't have easy access to signals, so
- * we use "events" instead. The parent apache process goes into a loop
- * where it waits forever for a set of events. Two of those events are
- * called
- *
- *    apPID_shutdown
- *    apPID_restart
- *
- * (where PID is the PID of the apache parent process). When one of these
- * is signalled, the Apache parent performs the appropriate action. The events
- * can become signalled through internal Apache methods (e.g. if the child
- * finds a fatal error and needs to kill its parent), via the service
- * control manager (the control thread will signal the shutdown event when
- * requested to stop the Apache service), from the -k Apache command line,
- * or from any external program which finds the Apache PID from the
- * httpd.pid file.
- *
- * The signal_parent() function, below, is used to signal one of these events.
- * It can be called by any child or parent process, since it does not
- * rely on global variables.
- *
- * On entry, type gives the event to signal. 0 means shutdown, 1 means 
- * graceful restart.
- */
-/*
- * Initialise the signal names, in the global variables signal_name_prefix, 
- * signal_restart_name and signal_shutdown_name.
- */
-#define MAX_SIGNAL_NAME 30  /* Long enough for apPID_shutdown, where PID is an int */
-char signal_name_prefix[MAX_SIGNAL_NAME];
-char signal_restart_name[MAX_SIGNAL_NAME]; 
-char signal_shutdown_name[MAX_SIGNAL_NAME];
-void setup_signal_names(char *prefix)
-{
-    apr_snprintf(signal_name_prefix, sizeof(signal_name_prefix), prefix);    
-    apr_snprintf(signal_shutdown_name, sizeof(signal_shutdown_name), 
-	"%s_shutdown", signal_name_prefix);    
-    apr_snprintf(signal_restart_name, sizeof(signal_restart_name), 
-	"%s_restart", signal_name_prefix);    
-}
-
-static int volatile is_graceful = 0;
-AP_DECLARE(int) ap_graceful_stop_signalled(void)
-{
-    return is_graceful;
-}
-
-AP_DECLARE(void) ap_signal_parent(ap_signal_parent_e type)
-{
-    HANDLE e;
-    char *signal_name;
-    
-    if (one_process) {
-	return;
-    }
-
-    switch(type) {
-       case SIGNAL_PARENT_SHUTDOWN: 
-       {
-           signal_name = signal_shutdown_name; 
-           break;
-       }
-       /* This MPM supports only graceful restarts right now */
-       case SIGNAL_PARENT_RESTART: 
-       case SIGNAL_PARENT_RESTART_GRACEFUL:
-       {
-           signal_name = signal_restart_name;     
-           is_graceful = 1;
-           break;
-       }
-       default: 
-           return;
-    }
-
-    e = OpenEvent(EVENT_MODIFY_STATE, FALSE, signal_name);
-    if (!e) {
-	/* Um, problem, can't signal the parent, which means we can't
-	 * signal ourselves to die. Ignore for now...
-	 */
-	ap_log_error(APLOG_MARK, APLOG_EMERG, apr_get_os_error(), ap_server_conf,
-                     "OpenEvent on %s event", signal_name);
-	return;
-    }
-    if (SetEvent(e) == 0) {
-	/* Same problem as above */
-	ap_log_error(APLOG_MARK, APLOG_EMERG, apr_get_os_error(), ap_server_conf,
-                     "SetEvent on %s event", signal_name);
-	CloseHandle(e);
-	return;
-    }
-    CloseHandle(e);
-}
-
-/* set_listeners_noninheritable()
- * Make the listening socket handles noninheritable by processes
- * started out of this process.
- */
-static int set_listeners_noninheritable(apr_pool_t *p) 
-{
-    ap_listen_rec *lr;
-    HANDLE dup;
-    SOCKET nsd;
-    HANDLE hProcess = GetCurrentProcess();
-
-    for (lr = ap_listeners; lr; lr = lr->next) {
-        apr_os_sock_get(&nsd,lr->sd);
-        if (!DuplicateHandle(hProcess, (HANDLE) nsd, hProcess, &dup, 
-                             0, FALSE, DUPLICATE_SAME_ACCESS)) {
-            ap_log_error(APLOG_MARK, APLOG_ERR, apr_get_os_error(), ap_server_conf,
-                         "set_listeners_noninheritable: DuplicateHandle failed.");
-        }
-        else {
-            closesocket(nsd);
-            nsd = (SOCKET) dup;
-            apr_os_sock_put(&lr->sd, &nsd, p);
-        }
-    }
-
-    if (my_pid == parent_pid) {
-        ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, 0, ap_server_conf,
-                     "Parent: Marked listeners as not inheritable.");
-    } else {
-        ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, 0, ap_server_conf,
-                     "Child %d: Marked listeners as not inheritable.", my_pid);
-    }
-    return 1;
-}
-
-/*
- * find_ready_listener()
- * Only used by Win9* and should go away when the win9*_accept() function is 
- * reimplemented using apr_poll().
- */
-static ap_listen_rec *head_listener;
-static APR_INLINE ap_listen_rec *find_ready_listener(fd_set * main_fds)
-{
-    ap_listen_rec *lr;
-    SOCKET nsd;
-
-    for (lr = head_listener; lr ; lr = lr->next) {
-        apr_os_sock_get(&nsd, lr->sd);
-	if (FD_ISSET(nsd, main_fds)) {
-	    head_listener = lr->next;
-            if (head_listener == NULL)
-                head_listener = ap_listeners;
-
-	    return (lr);
-	}
-    }
-    return NULL;
-}
-
-/*
- *
- */
-void get_handles_from_parent(server_rec *s)
-{
-    HANDLE pipe;
-    HANDLE hScore;
-    DWORD BytesRead;
-    void *sb_shared;
-    apr_status_t rv;
-    
-    pipe = GetStdHandle(STD_INPUT_HANDLE);
-    if (!ReadFile(pipe, &exit_event, sizeof(HANDLE),
-                  &BytesRead, (LPOVERLAPPED) NULL)
-        || (BytesRead != sizeof(HANDLE))) {
-        ap_log_error(APLOG_MARK, APLOG_CRIT, apr_get_os_error(), ap_server_conf,
-                     "Child %d: Unable to retrieve the exit event from the parent", my_pid);
-        exit(APEXIT_CHILDINIT);
-    }
-
-    if (!ReadFile(pipe, &hScore, sizeof(hScore),
-                  &BytesRead, (LPOVERLAPPED) NULL)
-        || (BytesRead != sizeof(hScore))) {
-        ap_log_error(APLOG_MARK, APLOG_CRIT, apr_get_os_error(), ap_server_conf,
-                     "Child %d: Unable to retrieve the scoreboard from the parent", my_pid);
-        exit(APEXIT_CHILDINIT);
-    }
-
-    if ((rv = apr_os_shm_put(&ap_scoreboard_shm, &hScore, s->process->pool)) 
-            != APR_SUCCESS) {
-        ap_log_error(APLOG_MARK, APLOG_CRIT, rv, ap_server_conf,
-                     "Child %d: Unable to access the scoreboard from the parent", my_pid);
-        exit(APEXIT_CHILDINIT);
-    }
-
-    rv = ap_reopen_scoreboard(pchild, &ap_scoreboard_shm, 1);
-    if (rv || !(sb_shared = apr_shm_baseaddr_get(ap_scoreboard_shm))) {
-	ap_log_error(APLOG_MARK, APLOG_CRIT, rv, NULL, 
-                     "Child %d: Unable to reopen the scoreboard from the parent", my_pid);
-        exit(APEXIT_CHILDINIT);
-    }
-    ap_init_scoreboard(sb_shared);
-
-    ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, 0, ap_server_conf,
-                 "Child %d: Retrieved our scoreboard from the parent.", my_pid);
-}
-
-/* 
- * get_listeners_from_parent()
- * The listen sockets are opened in the parent. This function, which runs
- * exclusively in the child process, receives them from the parent and
- * makes them availeble in the child.
- */
-void get_listeners_from_parent(server_rec *s)
-{
-    WSAPROTOCOL_INFO WSAProtocolInfo;
-    HANDLE pipe;
-    ap_listen_rec *lr;
-    DWORD BytesRead;
-    int lcnt = 0;
-    SOCKET nsd;
-
-    /* Set up a default listener if necessary */
-    if (ap_listeners == NULL) {
-        ap_listen_rec *lr;
-        lr = apr_palloc(s->process->pool, sizeof(ap_listen_rec));
-        lr->sd = NULL;
-        lr->next = ap_listeners;
-        ap_listeners = lr;
-    }
-
-    /* Open the pipe to the parent process to receive the inherited socket
-     * data. The sockets have been set to listening in the parent process.
-     */
-    pipe = GetStdHandle(STD_INPUT_HANDLE);
-
-    for (lr = ap_listeners; lr; lr = lr->next, ++lcnt) {
-        if (!ReadFile(pipe, &WSAProtocolInfo, sizeof(WSAPROTOCOL_INFO), 
-                      &BytesRead, (LPOVERLAPPED) NULL)) {
-            ap_log_error(APLOG_MARK, APLOG_CRIT, apr_get_os_error(), ap_server_conf,
-                         "setup_inherited_listeners: Unable to read socket data from parent");
-            exit(APEXIT_CHILDINIT);
-        }
-        nsd = WSASocket(FROM_PROTOCOL_INFO, FROM_PROTOCOL_INFO, FROM_PROTOCOL_INFO,
-                        &WSAProtocolInfo, 0, 0);
-        if (nsd == INVALID_SOCKET) {
-            ap_log_error(APLOG_MARK, APLOG_CRIT, apr_get_netos_error(), ap_server_conf,
-                         "Child %d: setup_inherited_listeners(), WSASocket failed to open the inherited socket.", my_pid);
-            exit(APEXIT_CHILDINIT);
-        }
-        apr_os_sock_put(&lr->sd, &nsd, pconf);
-    }
-
-    ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, 0, ap_server_conf,
-                 "Child %d: retrieved %d listeners from parent", my_pid, lcnt);
-
-    if (!set_listeners_noninheritable(pconf)) {
-        exit(APEXIT_CHILDINIT);
-    }
-}
-
-
-/* Windows 9x specific code...
- * Accept processing for on Windows 95/98 uses a producer/consumer queue 
- * model. A single thread accepts connections and queues the accepted socket 
- * to the accept queue for consumption by a pool of worker threads.
- *
- * win9x_accept()
- *    The accept threads runs this function, which accepts connections off 
- *    the network and calls add_job() to queue jobs to the accept_queue.
- * add_job()/remove_job()
- *    Add or remove an accepted socket from the list of sockets 
- *    connected to clients. allowed_globals.jobmutex protects
- *    against multiple concurrent access to the linked list of jobs.
- * win9x_get_connection()
- *    Calls remove_job() to pull a job from the accept queue. All the worker 
- *    threads block on remove_job.
- */
-
-typedef struct joblist_s {
-    struct joblist_s *next;
-    int sock;
-} joblist;
-
-typedef struct globals_s {
-    HANDLE jobsemaphore;
-    joblist *jobhead;
-    joblist *jobtail;
-    apr_thread_mutex_t *jobmutex;
-    int jobcount;
-} globals;
-
-globals allowed_globals = {NULL, NULL, NULL, NULL, 0};
-#define MAX_SELECT_ERRORS 100
-
-static void add_job(int sock)
-{
-    joblist *new_job;
-
-    new_job = (joblist *) malloc(sizeof(joblist));
-    if (new_job == NULL) {
-	ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
-                     "Ouch!  Out of memory in add_job()!");
-        return;
-    }
-    new_job->next = NULL;
-    new_job->sock = sock;
-
-    apr_thread_mutex_lock(allowed_globals.jobmutex);
-
-    if (allowed_globals.jobtail != NULL)
-	allowed_globals.jobtail->next = new_job;
-    allowed_globals.jobtail = new_job;
-    if (!allowed_globals.jobhead)
-	allowed_globals.jobhead = new_job;
-    allowed_globals.jobcount++;
-    ReleaseSemaphore(allowed_globals.jobsemaphore, 1, NULL);
-
-    apr_thread_mutex_unlock(allowed_globals.jobmutex);
-}
-
-static int remove_job(void)
-{
-    joblist *job;
-    int sock;
-
-    WaitForSingleObject(allowed_globals.jobsemaphore, INFINITE);
-    apr_thread_mutex_lock(allowed_globals.jobmutex);
-
-    if (shutdown_in_progress && !allowed_globals.jobhead) {
-        apr_thread_mutex_unlock(allowed_globals.jobmutex);
-	return (-1);
-    }
-    job = allowed_globals.jobhead;
-    ap_assert(job);
-    allowed_globals.jobhead = job->next;
-    if (allowed_globals.jobhead == NULL)
-	allowed_globals.jobtail = NULL;
-    apr_thread_mutex_unlock(allowed_globals.jobmutex);
-    sock = job->sock;
-    free(job);
-
-    return (sock);
-}
-
-static void win9x_accept(void * dummy)
-{
-    struct timeval tv;
-    fd_set main_fds;
-    int wait_time = 1;
-    int csd;
-    SOCKET nsd = INVALID_SOCKET;
-    struct sockaddr_in sa_client;
-    int count_select_errors = 0;
-    int rc;
-    int clen;
-    ap_listen_rec *lr;
-    struct fd_set listenfds;
-    SOCKET listenmaxfd = INVALID_SOCKET;
-
-    /* Setup the listeners 
-     * ToDo: Use apr_poll()
-     */
-    FD_ZERO(&listenfds);
-    for (lr = ap_listeners; lr; lr = lr->next) {
-        if (lr->sd != NULL) {
-            apr_os_sock_get(&nsd, lr->sd);
-            FD_SET(nsd, &listenfds);
-            if (listenmaxfd == INVALID_SOCKET || nsd > listenmaxfd) {
-                listenmaxfd = nsd;
-            }
-        }
-    }
-    head_listener = ap_listeners;
-
-    while (!shutdown_in_progress) {
-	tv.tv_sec = wait_time;
-	tv.tv_usec = 0;
-	memcpy(&main_fds, &listenfds, sizeof(fd_set));
-
-	rc = select(listenmaxfd + 1, &main_fds, NULL, NULL, &tv);
-
-        if (rc == 0 || (rc == SOCKET_ERROR && APR_STATUS_IS_EINTR(apr_get_netos_error()))) {
-            count_select_errors = 0;    /* reset count of errors */            
-            continue;
-        }
-        else if (rc == SOCKET_ERROR) {
-            /* A "real" error occurred, log it and increment the count of
-             * select errors. This count is used to ensure we don't go into
-             * a busy loop of continuous errors.
-             */
-            ap_log_error(APLOG_MARK, APLOG_INFO, apr_get_netos_error(), ap_server_conf, 
-                         "select failed with error %d", apr_get_netos_error());
-            count_select_errors++;
-            if (count_select_errors > MAX_SELECT_ERRORS) {
-                shutdown_in_progress = 1;
-                ap_log_error(APLOG_MARK, APLOG_ERR, apr_get_netos_error(), ap_server_conf,
-                             "Too many errors in select loop. Child process exiting.");
-                break;
-            }
-	} else {
-	    ap_listen_rec *lr;
-
-	    lr = find_ready_listener(&main_fds);
-	    if (lr != NULL) {
-                /* fetch the native socket descriptor */
-                apr_os_sock_get(&nsd, lr->sd);
-	    }
-	}
-
-	do {
-            clen = sizeof(sa_client);
-            csd = accept(nsd, (struct sockaddr *) &sa_client, &clen);
-            if (csd == INVALID_SOCKET) {
-                csd = -1;
-            }
-        } while (csd < 0 && APR_STATUS_IS_EINTR(apr_get_netos_error()));
-
-	if (csd < 0) {
-            if (APR_STATUS_IS_ECONNABORTED(apr_get_netos_error())) {
-		ap_log_error(APLOG_MARK, APLOG_ERR, apr_get_netos_error(), ap_server_conf,
-			    "accept: (client socket)");
-            }
-	}
-	else {
-	    add_job(csd);
-	}
-    }
-    SetEvent(exit_event);
-}
-
-static PCOMP_CONTEXT win9x_get_connection(PCOMP_CONTEXT context)
-{
-    int len;
-
-    if (context == NULL) {
-        /* allocate the completion context and the transaction pool */
-        context = apr_pcalloc(pconf, sizeof(COMP_CONTEXT));
-        apr_pool_create(&context->ptrans, pconf);
-    }
-    
-
-    while (1) {
-        apr_pool_clear(context->ptrans);        
-        context->accept_socket = remove_job();
-        if (context->accept_socket == -1) {
-            return NULL;
-        }
-	len = sizeof(struct sockaddr);
-        context->sa_server = apr_palloc(context->ptrans, len);
-        if (getsockname(context->accept_socket, 
-                        context->sa_server, &len)== SOCKET_ERROR) {
-            ap_log_error(APLOG_MARK, APLOG_WARNING, apr_get_netos_error(), ap_server_conf, 
-                         "getsockname failed");
-            continue;
-        }
-        len = sizeof(struct sockaddr);
-        context->sa_client = apr_palloc(context->ptrans, len);
-        if ((getpeername(context->accept_socket,
-                         context->sa_client, &len)) == SOCKET_ERROR) {
-            ap_log_error(APLOG_MARK, APLOG_WARNING, apr_get_netos_error(), ap_server_conf, 
-                         "getpeername failed");
-            memset(&context->sa_client, '\0', sizeof(context->sa_client));
-        }
-
-        /* do we NEED_DUPPED_CSD ?? */
-        
-        return context;
-    }
-}
-/* Windows NT/2000 specific code...
- * Accept processing for on Windows NT uses a producer/consumer queue 
- * model. An accept thread accepts connections off the network then issues
- * PostQueuedCompletionStatus() to awake a thread blocked on the ThreadDispatch 
- * IOCompletionPort.
- *
- * winnt_accept()
- *    One or more accept threads run in this function, each of which accepts 
- *    connections off the network and calls PostQueuedCompletionStatus() to
- *    queue an io completion packet to the ThreadDispatch IOCompletionPort.
- * winnt_get_connection()
- *    Worker threads block on the ThreadDispatch IOCompletionPort awaiting 
- *    connections to service.
- */
-static void winnt_accept(void *listen_socket) 
-{
-
-    PCOMP_CONTEXT pCompContext;
-    DWORD BytesRead;
-    SOCKET nlsd;
-    int lasterror;
-
-    nlsd = (SOCKET) listen_socket;
-
-    while (!shutdown_in_progress) {
-        pCompContext = mpm_get_completion_context();
-        if (!pCompContext) {
-            /* Hopefully whatever is preventing us from getting a 
-             * completion context is a temporary resource constraint.
-             */
-            Sleep(750);
-            continue;
-        }
-
-    again:            
-        /* Create and initialize the accept socket */
-        if (pCompContext->accept_socket == INVALID_SOCKET) {
-            pCompContext->accept_socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
-            if (pCompContext->accept_socket == INVALID_SOCKET) {
-                /* Hopefully another temporary condition. Be graceful. */
-                ap_log_error(APLOG_MARK,APLOG_WARNING, apr_get_netos_error(), ap_server_conf,
-                             "winnt_accept: Failed to allocate an accept socket. "
-                             "Temporary resource constraint? Try again.");
-                Sleep(500);
-                goto again;
-            }
-        }
-
-        /* AcceptEx on the completion context. The completion context will be 
-         * signaled when a connection is accepted. 
-         */
-        if (!AcceptEx(nlsd, pCompContext->accept_socket,
-                      pCompContext->buff,
-                      0,
-                      PADDED_ADDR_SIZE, 
-                      PADDED_ADDR_SIZE,
-                      &BytesRead,
-                      &pCompContext->Overlapped)) {
-            lasterror = apr_get_netos_error();
-            if (lasterror == APR_FROM_OS_ERROR(WSAEINVAL)) {
-                /* Hack alert. Occasionally, TransmitFile will not recycle the 
-                 * accept socket (usually when the client disconnects early). 
-                 * Get a new socket and try the call again.
-                 */
-                closesocket(pCompContext->accept_socket);
-                pCompContext->accept_socket = INVALID_SOCKET;
-                ap_log_error(APLOG_MARK, APLOG_DEBUG, lasterror, ap_server_conf,
-                       "winnt_accept: AcceptEx failed due to early client "
-                       "disconnect. Reallocate the accept socket and try again.");
-                if (shutdown_in_progress)
-                    break;
-                else
-                    goto again;
-            }
-            else if (lasterror != APR_FROM_OS_ERROR(ERROR_IO_PENDING)) {
-                ap_log_error(APLOG_MARK,APLOG_ERR, lasterror, ap_server_conf,
-                             "winnt_accept: AcceptEx failed. Attempting to recover.");
-                closesocket(pCompContext->accept_socket);
-                pCompContext->accept_socket = INVALID_SOCKET;
-                Sleep(500);
-                goto again;
-            }
-
-            /* Wait for pending i/o */
-            WaitForSingleObject(pCompContext->Overlapped.hEvent, INFINITE);
-        }
-
-        /* Inherit the listen socket settings. Required for 
-         * shutdown() to work 
-         */
-        if (setsockopt(pCompContext->accept_socket, SOL_SOCKET,
-                       SO_UPDATE_ACCEPT_CONTEXT, (char *)&nlsd,
-                       sizeof(nlsd))) {
-            ap_log_error(APLOG_MARK, APLOG_WARNING, apr_get_netos_error(), ap_server_conf,
-                         "setsockopt(SO_UPDATE_ACCEPT_CONTEXT) failed.");
-            /* Not a failure condition. Keep running. */
-        }
-
-        /* Get the local & remote address */
-        GetAcceptExSockaddrs(pCompContext->buff,
-                             0,
-                             PADDED_ADDR_SIZE,
-                             PADDED_ADDR_SIZE,
-                             &pCompContext->sa_server,
-                             &pCompContext->sa_server_len,
-                             &pCompContext->sa_client,
-                             &pCompContext->sa_client_len);
-
-        /* When a connection is received, send an io completion notification to
-         * the ThreadDispatchIOCP. This function could be replaced by
-         * mpm_post_completion_context(), but why do an extra function call...
-         */
-        PostQueuedCompletionStatus(ThreadDispatchIOCP, 0, IOCP_CONNECTION_ACCEPTED,
-                                   &pCompContext->Overlapped);
-    }
-
-    if (!shutdown_in_progress) {
-        /* Yow, hit an irrecoverable error! Tell the child to die. */
-        SetEvent(exit_event);
-    }
-}
-static PCOMP_CONTEXT winnt_get_connection(PCOMP_CONTEXT pCompContext)
-{
-    int rc;
-    DWORD BytesRead;
-    DWORD CompKey;
-    LPOVERLAPPED pol;
-
-    mpm_recycle_completion_context(pCompContext);
-
-    g_blocked_threads++;        
-    while (1) {
-        if (workers_may_exit) {
-            g_blocked_threads--;
-            return NULL;
-        }
-        rc = GetQueuedCompletionStatus(ThreadDispatchIOCP, &BytesRead, &CompKey,
-                                       &pol, INFINITE);
-        if (!rc) {
-            rc = apr_get_os_error();
-            ap_log_error(APLOG_MARK,APLOG_DEBUG, rc, ap_server_conf,
-                             "Child %d: GetQueuedComplationStatus returned %d", my_pid, rc);
-            continue;
-        }
-
-        switch (CompKey) {
-        case IOCP_CONNECTION_ACCEPTED:
-            pCompContext = CONTAINING_RECORD(pol, COMP_CONTEXT, Overlapped);
-            break;
-        case IOCP_SHUTDOWN:
-            g_blocked_threads--;
-            return NULL;
-        default:
-            g_blocked_threads--;
-            return NULL;
-        }
-        break;
-    }
-
-    g_blocked_threads--;    
-
-    if ((rc = apr_pool_create(&pCompContext->ptrans, pconf)) != APR_SUCCESS) {
-        ap_log_error(APLOG_MARK,APLOG_DEBUG, rc, ap_server_conf,
-                     "Child %d: apr_pool_create failed with rc %d", my_pid, rc);
-    }
-
-    return pCompContext;
-}
-
-/*
- * worker_main()
- * Main entry point for the worker threads. Worker threads block in 
- * win*_get_connection() awaiting a connection to service.
- */
-static void worker_main(long thread_num)
-{
-    static int requests_this_child = 0;
-    PCOMP_CONTEXT context = NULL;
-    apr_os_sock_info_t sockinfo;
-    ap_sb_handle_t *sbh;
-
-    while (1) {
-        conn_rec *c;
-        apr_int32_t disconnected;
-
-        ap_update_child_status_from_indexes(0, thread_num, SERVER_READY, 
-                                            (request_rec *) NULL);
-
-
-        /* Grab a connection off the network */
-        if (osver.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) {
-            context = win9x_get_connection(context);
-        }
-        else {
-            context = winnt_get_connection(context);
-        }
-        if (!context) {
-            /* Time for the thread to exit */
-            break;
-        }
-
-        /* Have we hit MaxRequestPerChild connections? */
-        if (ap_max_requests_per_child) {
-            requests_this_child++;
-            if (requests_this_child > ap_max_requests_per_child) {
-                SetEvent(max_requests_per_child_event);
-            }
-        }
-
-        sockinfo.os_sock = &context->accept_socket;
-        sockinfo.local   = context->sa_server;
-        sockinfo.remote  = context->sa_client;
-        sockinfo.family  = APR_INET;
-        sockinfo.type    = SOCK_STREAM;
-        /* ### is this correct?  Shouldn't be inheritable (at this point) */
-        apr_os_sock_make(&context->sock, &sockinfo, context->ptrans);
-
-        ap_create_sb_handle(&sbh, context->ptrans, 0, thread_num);
-        c = ap_run_create_connection(context->ptrans, ap_server_conf, context->sock,
-                                     thread_num, sbh);
-
-        if (c) {
-            ap_process_connection(c, context->sock);
-            apr_getsocketopt(context->sock, APR_SO_DISCONNECTED, &disconnected);
-            if (!disconnected) {
-                context->accept_socket = INVALID_SOCKET;
-                ap_lingering_close(c);
-            }
-        }
-        else {
-            /* ap_run_create_connection closes the socket on failure */
-            context->accept_socket = INVALID_SOCKET;
-        }
-    }
-
-    ap_update_child_status_from_indexes(0, thread_num, SERVER_DEAD, 
-                                        (request_rec *) NULL);
-
-    ap_log_error(APLOG_MARK, APLOG_INFO, APR_SUCCESS, ap_server_conf,
-                 "Child %d: Thread exiting.", my_pid);
-}
-
-static void cleanup_thread(thread *handles, int *thread_cnt, int thread_to_clean)
-{
-    int i;
-
-    CloseHandle(handles[thread_to_clean]);
-    for (i = thread_to_clean; i < ((*thread_cnt) - 1); i++)
-	handles[i] = handles[i + 1];
-    (*thread_cnt)--;
-}
-
-/*
- * child_main() 
- * Entry point for the main control thread for the child process. 
- * This thread creates the accept thread, worker threads and
- * monitors the child process for maintenance and shutdown
- * events.
- */
-static void child_main()
-{
-    apr_status_t status;
-    ap_listen_rec *lr;
-    HANDLE child_events[2];
-    int nthreads = ap_threads_per_child;
-    int tid;
-    thread *child_handles;
-    int rv;
-    time_t end_time;
-    int i;
-    int cld;
-
-    apr_pool_create(&pchild, pconf);
-
-    ap_run_child_init(pchild, ap_server_conf);
-    
-    /* Initialize the child_events */
-    max_requests_per_child_event = CreateEvent(NULL, TRUE, FALSE, NULL);
-    if (!max_requests_per_child_event) {
-        ap_log_error(APLOG_MARK, APLOG_CRIT, apr_get_os_error(), ap_server_conf,
-                     "Child %d: Failed to create a max_requests event.", my_pid);
-        exit(APEXIT_CHILDINIT);
-    }
-    child_events[0] = exit_event;
-    child_events[1] = max_requests_per_child_event;
-
-    allowed_globals.jobsemaphore = CreateSemaphore(NULL, 0, 1000000, NULL);
-    apr_thread_mutex_create(&allowed_globals.jobmutex, 
-                            APR_THREAD_MUTEX_DEFAULT, pchild);
-
-    /*
-     * Wait until we have permission to start accepting connections.
-     * start_mutex is used to ensure that only one child ever
-     * goes into the listen/accept loop at once.
-     */
-    status = apr_proc_mutex_lock(start_mutex);
-    if (status != APR_SUCCESS) {
-        ap_log_error(APLOG_MARK,APLOG_ERR, status, ap_server_conf,
-                     "Child %d: Failed to acquire the start_mutex. Process will exit.", my_pid);
-        exit(APEXIT_CHILDINIT);
-    }
-    ap_log_error(APLOG_MARK,APLOG_INFO, APR_SUCCESS, ap_server_conf, 
-                 "Child %d: Acquired the start mutex.", my_pid);
-
-    /*
-     * Create the worker thread dispatch IOCompletionPort
-     * on Windows NT/2000
-     */
-    if (osver.dwPlatformId != VER_PLATFORM_WIN32_WINDOWS) {
-        /* Create the worker thread dispatch IOCP */
-        ThreadDispatchIOCP = CreateIoCompletionPort(INVALID_HANDLE_VALUE,
-                                                    NULL,
-                                                    0,
-                                                    0); /* CONCURRENT ACTIVE THREADS */
-        apr_thread_mutex_create(&qlock, APR_THREAD_MUTEX_DEFAULT, pchild);
-    }
-
-    /* 
-     * Create the pool of worker threads
-     */
-    ap_log_error(APLOG_MARK,APLOG_INFO, APR_SUCCESS, ap_server_conf, 
-                 "Child %d: Starting %d worker threads.", my_pid, nthreads);
-    child_handles = (thread) alloca(nthreads * sizeof(int));
-    for (i = 0; i < nthreads; i++) {
-        ap_update_child_status_from_indexes(0, i, SERVER_STARTING, 
-                                            (request_rec *) NULL);
-        child_handles[i] = (thread) _beginthreadex(NULL, 0, (LPTHREAD_START_ROUTINE) worker_main,
-                                                   (void *) i, 0, &tid);
-    }
-
-    /* 
-     * Start the accept thread
-     */
-    if (osver.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) {
-        _beginthreadex(NULL, 0, (LPTHREAD_START_ROUTINE) win9x_accept,
-                       (void *) i, 0, &tid);
-    } else {
-        /* Start an accept thread per listener */
-        SOCKET nlsd; /* native listening sock descriptor */
-        ap_listen_rec *lr;
-        for (lr = ap_listeners; lr; lr = lr->next) {
-            if (lr->sd != NULL) {
-                apr_os_sock_get(&nlsd, lr->sd);
-                _beginthreadex(NULL, 1000, (LPTHREAD_START_ROUTINE) winnt_accept,
-                               (void *) nlsd, 0, &tid);
-            }
-        }
-    }
-
-    /* Wait for one of three events:
-     * exit_event: 
-     *    The exit_event is signaled by the parent process to notify 
-     *    the child that it is time to exit.
-     *
-     * max_requests_per_child_event: 
-     *    This event is signaled by the worker threads to indicate that
-     *    the process has handled MaxRequestsPerChild connections.
-     *
-     * TIMEOUT:
-     *    To do periodic maintenance on the server (check for thread exits,
-     *    number of completion contexts, etc.)
-     */
-    while (1) {
-        rv = WaitForMultipleObjects(2, (HANDLE *) child_events, FALSE, 1000);
-        cld = rv - WAIT_OBJECT_0;
-        if (rv == WAIT_FAILED) {
-            /* Something serious is wrong */
-            ap_log_error(APLOG_MARK, APLOG_CRIT, apr_get_os_error(), ap_server_conf,
-                         "Child %d: WAIT_FAILED -- shutting down server");
-            break;
-        }
-        else if (rv == WAIT_TIMEOUT) {
-            apr_proc_other_child_check();
-        }
-        else if (cld == 0) {
-            /* Exit event was signaled */
-            ap_log_error(APLOG_MARK, APLOG_INFO, APR_SUCCESS, ap_server_conf,
-                         "Child %d: Exit event signaled. Child process is ending.", my_pid);
-            break;
-        }
-        else {
-            /* MaxRequestsPerChild event set by the worker threads.
-             * Signal the parent to restart
-             */
-            ap_log_error(APLOG_MARK, APLOG_INFO, APR_SUCCESS, ap_server_conf,
-                         "Child %d: Process exiting because it reached "
-                         "MaxRequestsPerChild. Signaling the parent to "
-                         "restart a new child process.", my_pid);
-            ap_signal_parent(SIGNAL_PARENT_RESTART);
-            break;
-        }
-    }
-
-    /* Setting is_graceful will cause keep-alive connections to be closed
-     * rather than block on the next network read.
-     */
-    is_graceful = 1;
-
-    /* Setting shutdown_in_progress prevents new connections from
-     * being accepted but allows the worker threads to continue
-     * handling connections that have already been accepted.
-     */
-    shutdown_in_progress = 1;
-
-    /* Close the listening sockets. */
-    for (lr = ap_listeners; lr ; lr = lr->next) {
-        apr_socket_close(lr->sd);
-    }
-    Sleep(1000);
-
-    /* Release the start_mutex to let the new process (in the restart
-     * scenario) a chance to begin accepting and servicing requests 
-     */
-    rv = apr_proc_mutex_unlock(start_mutex);
-    if (rv == APR_SUCCESS) {
-        ap_log_error(APLOG_MARK,APLOG_INFO | APLOG_NOERRNO, rv, ap_server_conf, 
-                     "Child %d: Released the start mutex", my_pid);
-    }
-    else {
-        ap_log_error(APLOG_MARK,APLOG_ERR, rv, ap_server_conf, 
-                     "Child %d: Failure releasing the start mutex", my_pid);
-    }
-
-    /* Tell the worker threads they may exit when done handling
-     * a connection.
-     */
-    workers_may_exit = 1;
-
-    /* Shutdown the worker threads */
-    if (osver.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) {
-        for (i = 0; i < nthreads; i++) {
-            add_job(-1);
-        }
-    }
-    else { /* Windows NT/2000 */
-        /* Post worker threads blocked on the ThreadDispatch IOCompletion port */
-        while (g_blocked_threads > 0) {
-            ap_log_error(APLOG_MARK,APLOG_INFO, APR_SUCCESS, ap_server_conf, 
-                         "Child %d: %d threads blocked on the completion port", my_pid, g_blocked_threads);
-            for (i=g_blocked_threads; i > 0; i--) {
-                PostQueuedCompletionStatus(ThreadDispatchIOCP, 0, IOCP_SHUTDOWN, NULL);
-            }
-            Sleep(1000);
-        }
-        /* Empty the accept queue of completion contexts */
-        apr_thread_mutex_lock(qlock);
-        while (qhead) {
-            CloseHandle(qhead->Overlapped.hEvent);
-            closesocket(qhead->accept_socket);
-            qhead = qhead->next;
-        }
-        apr_thread_mutex_unlock(qlock);
-    }
-
-    /* Give busy worker threads a chance to service their connections */
-    ap_log_error(APLOG_MARK,APLOG_INFO, APR_SUCCESS, ap_server_conf, 
-                 "Child %d: Waiting for %d threads to die.", my_pid, nthreads);
-    end_time = time(NULL) + 180;
-    while (nthreads) {
-        rv = wait_for_many_objects(nthreads, child_handles, end_time - time(NULL));
-        if (rv != WAIT_TIMEOUT) {
-            rv = rv - WAIT_OBJECT_0;
-            ap_assert((rv >= 0) && (rv < nthreads));
-            cleanup_thread(child_handles, &nthreads, rv);
-            continue;
-        }
-        break;
-    }
-
-    /* Kill remaining threads off the hard way */
-    for (i = 0; i < nthreads; i++) {
-        TerminateThread(child_handles[i], 1);
-        CloseHandle(child_handles[i]);
-    }
-    ap_log_error(APLOG_MARK,APLOG_DEBUG, APR_SUCCESS, ap_server_conf, 
-                 "Child %d: All worker threads have ended.", my_pid);
-
-    CloseHandle(allowed_globals.jobsemaphore);
-    apr_thread_mutex_destroy(allowed_globals.jobmutex);
-    if (osver.dwPlatformId != VER_PLATFORM_WIN32_WINDOWS)
-    	apr_thread_mutex_destroy(qlock);
-
-    apr_pool_destroy(pchild);
-    CloseHandle(exit_event);
-}
-
-static int send_handles_to_child(apr_pool_t *p, HANDLE child_exit_event, HANDLE hProcess, HANDLE hPipeWrite)
-{
-    apr_status_t rv;
-    HANDLE hScore;
-    HANDLE hDup;
-    HANDLE hCurrentProcess = GetCurrentProcess();
-    DWORD BytesWritten;
-
-    if (!DuplicateHandle(hCurrentProcess, child_exit_event, hProcess, &hDup,
-                         EVENT_MODIFY_STATE | SYNCHRONIZE, FALSE, 0)) {
-        ap_log_error(APLOG_MARK, APLOG_CRIT, apr_get_os_error(), ap_server_conf,
-                     "Parent: Unable to duplicate the exit event handle for the child");
-        return -1;
-    }
-    if (!WriteFile(hPipeWrite, &hDup, sizeof(hDup),
-                   &BytesWritten, (LPOVERLAPPED) NULL)
-            || (BytesWritten != sizeof(hDup))) {
-        ap_log_error(APLOG_MARK, APLOG_CRIT, apr_get_os_error(), ap_server_conf,
-                     "Parent: Unable to send the exit event handle to the child");
-        return -1;
-    }
-
-    if ((rv = apr_os_shm_get(&hScore, ap_scoreboard_shm)) != APR_SUCCESS) {
-        ap_log_error(APLOG_MARK, APLOG_CRIT, rv, ap_server_conf,
-                     "Parent: Unable to retrieve the scoreboard handle for the child");
-        return -1;
-    }
-    if (!DuplicateHandle(hCurrentProcess, hScore, hProcess, &hDup,
-                         FILE_MAP_READ | FILE_MAP_WRITE, FALSE, 0)) {
-        ap_log_error(APLOG_MARK, APLOG_CRIT, apr_get_os_error(), ap_server_conf,
-                     "Parent: Unable to duplicate the scoreboard handle to the child");
-        return -1;
-    }
-    if (!WriteFile(hPipeWrite, &hDup, sizeof(hDup),
-                   &BytesWritten, (LPOVERLAPPED) NULL)
-            || (BytesWritten != sizeof(hDup))) {
-        ap_log_error(APLOG_MARK, APLOG_CRIT, apr_get_os_error(), ap_server_conf,
-                     "Parent: Unable to send the scoreboard handle to the child");
-        return -1;
-    }
-
-    ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, 0, ap_server_conf,
-                 "Parent: Sent the scoreboard to the child");
-    return 0;
-}
-
-static int send_listeners_to_child(apr_pool_t *p, DWORD dwProcessId, HANDLE hPipeWrite)
-{
-    int lcnt = 0;
-    ap_listen_rec *lr;
-    LPWSAPROTOCOL_INFO  lpWSAProtocolInfo;
-    DWORD BytesWritten;
-
-    /* Run the chain of open sockets. For each socket, duplicate it 
-     * for the target process then send the WSAPROTOCOL_INFO 
-     * (returned by dup socket) to the child.
-     */
-    for (lr = ap_listeners; lr; lr = lr->next, ++lcnt) {
-        int nsd;
-        lpWSAProtocolInfo = apr_pcalloc(p, sizeof(WSAPROTOCOL_INFO));
-        apr_os_sock_get(&nsd,lr->sd);
-        ap_log_error(APLOG_MARK, APLOG_INFO, APR_SUCCESS, ap_server_conf,
-                     "Parent: Duplicating socket %d and sending it to child process %d", 
-                     nsd, dwProcessId);
-        if (WSADuplicateSocket(nsd, dwProcessId,
-                               lpWSAProtocolInfo) == SOCKET_ERROR) {
-            ap_log_error(APLOG_MARK, APLOG_CRIT, apr_get_netos_error(), ap_server_conf,
-                         "Parent: WSADuplicateSocket failed for socket %d. Check the FAQ.", lr->sd );
-            return -1;
-        }
-
-        if (!WriteFile(hPipeWrite, lpWSAProtocolInfo, (DWORD) sizeof(WSAPROTOCOL_INFO),
-                       &BytesWritten,
-                       (LPOVERLAPPED) NULL)
-                || BytesWritten != sizeof(WSAPROTOCOL_INFO)) {
-            ap_log_error(APLOG_MARK, APLOG_CRIT, apr_get_os_error(), ap_server_conf,
-                         "Parent: Unable to write duplicated socket %d to the child.", lr->sd );
-            return -1;
-        }
-    }
-
-    ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, 0, ap_server_conf,
-                 "Parent: Sent %d listeners to child %d", lcnt, dwProcessId);
-    return 0;
-}
-
-static int create_process(apr_pool_t *p, HANDLE *child_proc, HANDLE *child_exit_event)
-{
-    int rv;
-    char buf[1024];
-    char *pCommand;
-    char *pEnvVar;
-    char *pEnvBlock;
-    int i;
-    int iEnvBlockLen;
-    STARTUPINFO si;           /* Filled in prior to call to CreateProcess */
-    PROCESS_INFORMATION pi;   /* filled in on call to CreateProcess */
-    HANDLE hDup;
-    HANDLE hPipeRead;
-    HANDLE hPipeWrite;
-    HANDLE hNullOutput;
-    HANDLE hShareError;
-    HANDLE hExitEvent;
-    HANDLE hCurrentProcess = GetCurrentProcess();
-    SECURITY_ATTRIBUTES sa;
-
-    sa.nLength = sizeof(sa);
-    sa.bInheritHandle = TRUE;
-    sa.lpSecurityDescriptor = NULL;
-
-    /* Build the command line. Should look something like this:
-     * C:/apache/bin/apache.exe -f ap_server_confname 
-     * First, get the path to the executable...
-     */
-    rv = GetModuleFileName(NULL, buf, sizeof(buf));
-    if (rv == sizeof(buf)) {
-        ap_log_error(APLOG_MARK, APLOG_CRIT, ERROR_BAD_PATHNAME, ap_server_conf,
-                     "Parent: Path to Apache process too long");
-        return -1;
-    } else if (rv == 0) {
-        ap_log_error(APLOG_MARK, APLOG_CRIT, apr_get_os_error(), ap_server_conf,
-                     "Parent: GetModuleFileName() returned NULL for current process.");
-        return -1;
-    }
-
-    /* Build the command line */
-    pCommand = apr_psprintf(p, "\"%s\"", buf);  
-    for (i = 1; i < ap_server_conf->process->argc; i++) {
-        pCommand = apr_pstrcat(p, pCommand, " \"", ap_server_conf->process->argv[i], "\"", NULL);
-    }
-
-    /* Create a pipe to send socket info to the child */
-    if (!CreatePipe(&hPipeRead, &hPipeWrite, &sa, 0)) {
-        ap_log_error(APLOG_MARK, APLOG_CRIT, apr_get_os_error(), ap_server_conf,
-                     "Parent: Unable to create pipe to child process.");
-        return -1;
-    }
-
-    /* Make our end of the handle non-inherited */
-    if (DuplicateHandle(hCurrentProcess, hPipeWrite, hCurrentProcess,
-                        &hDup, 0, FALSE, DUPLICATE_SAME_ACCESS)) {
-        CloseHandle(hPipeWrite);
-        hPipeWrite = hDup;
-    }
-    else {
-        ap_log_error(APLOG_MARK, APLOG_CRIT, apr_get_os_error(), ap_server_conf,
-                     "Parent: Unable to duplicate pipe to child.\n");
-        CloseHandle(hPipeWrite);
-        CloseHandle(hPipeRead);
-        return -1;
-    }
-
-    /* Open a null handle to soak info from the child */
-    hNullOutput = CreateFile("nul", GENERIC_READ | GENERIC_WRITE, 
-                             FILE_SHARE_READ | FILE_SHARE_WRITE, 
-                             &sa, OPEN_EXISTING, 0, NULL);
-    if (hNullOutput == INVALID_HANDLE_VALUE) {
-        ap_log_error(APLOG_MARK, APLOG_CRIT, apr_get_os_error(), ap_server_conf,
-                     "Parent: Unable to create null output pipe for child process.\n");
-        CloseHandle(hPipeWrite);
-        CloseHandle(hPipeRead);
-        return -1;
-    }
-
-    /* Child's initial stderr -> our main server error log (or, failing that, stderr) */
-    if (ap_server_conf->error_log) { /* Is this check really necessary?*/
-        rv = apr_os_file_get(&hShareError, ap_server_conf->error_log);
-        if (rv == APR_SUCCESS && hShareError != INVALID_HANDLE_VALUE) {
-            if (DuplicateHandle(hCurrentProcess, hShareError, 
-                                hCurrentProcess, &hDup, 
-                                GENERIC_WRITE, TRUE, 0)) {
-                hShareError = hDup;
-            }
-            else {
-                rv = apr_get_os_error();
-            }
-        }
-        if (rv != APR_SUCCESS) {
-            ap_log_error(APLOG_MARK, APLOG_CRIT, rv, ap_server_conf,
-                         "Parent: Unable to share error log with child.\n");
-            CloseHandle(hPipeWrite);
-            CloseHandle(hPipeRead);
-            CloseHandle(hNullOutput);
-            return -1;
-        }
-        else if (hShareError == INVALID_HANDLE_VALUE) {
-            ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_CRIT, 0, ap_server_conf,
-                         "Parent: Failed to share error log with child.\n");
-            CloseHandle(hPipeWrite);
-            CloseHandle(hPipeRead);
-            CloseHandle(hNullOutput);
-            return -1;
-        }
-    }
-    else {
-        hShareError = GetStdHandle(STD_ERROR_HANDLE);
-    }
-
-    /* Create the child_exit_event */
-    hExitEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
-    if (!hExitEvent) {
-        ap_log_error(APLOG_MARK, APLOG_CRIT, apr_get_os_error(), ap_server_conf,
-                     "Parent: Could not create exit event for child process");
-        CloseHandle(hPipeWrite);
-        CloseHandle(hPipeRead);
-        CloseHandle(hNullOutput);
-        if (GetStdHandle(STD_ERROR_HANDLE) != hShareError) {
-            CloseHandle(hShareError);
-        }
-        return -1;
-    }
-    
-    /*
-     * Build the environment
-     * Win32's CreateProcess call requires that the environment
-     * be passed in an environment block, a null terminated block of
-     * null terminated strings.
-     */  
-    _putenv(apr_psprintf(p,"AP_PARENT_PID=%i", parent_pid));
-    _putenv(apr_psprintf(p,"AP_MY_GENERATION=%i", ap_my_generation));
-
-    i = 0;
-    iEnvBlockLen = 1;
-    while (_environ[i]) {
-        iEnvBlockLen += strlen(_environ[i]) + 1;
-        i++;
-    }
-    pEnvBlock = (char *)apr_pcalloc(p, iEnvBlockLen);
-    pEnvVar = pEnvBlock;
-    i = 0;
-    while (_environ[i]) {
-        strcpy(pEnvVar, _environ[i]);
-        pEnvVar = strchr(pEnvVar, '\0') + 1;
-        i++;
-    }
-    pEnvVar = '\0';
-
-    /* Give the read end of the pipe (hPipeRead) to the child as stdin. The 
-     * parent will write the socket data to the child on this pipe.
-     */
-    memset(&si, 0, sizeof(si));
-    memset(&pi, 0, sizeof(pi));
-    si.cb = sizeof(si);
-    si.dwFlags     = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
-    si.wShowWindow = SW_HIDE;
-    si.hStdInput   = hPipeRead;
-    si.hStdOutput  = hNullOutput;
-    si.hStdError   = hShareError;
-
-    rv = CreateProcess(NULL, pCommand, NULL, NULL, 
-                       TRUE,               /* Inherit handles */
-                       0,                  /* Creation flags */
-                       pEnvBlock,          /* Environment block */
-                       NULL,
-                       &si, &pi);
-
-    /* Undo everything created for the child alone
-     */
-    CloseHandle(pi.hThread);
-    CloseHandle(hPipeRead);
-    CloseHandle(hNullOutput);
-    if (GetStdHandle(STD_ERROR_HANDLE) != hShareError) {
-        /* Handles opened with GetStdHandle are psuedo handles
-         * and should not be closed else bad things will happen.
-         */
-        CloseHandle(hShareError);
-    }
-    _putenv("AP_PARENT_PID=");
-    _putenv("AP_MY_GENERATION=");
-
-    if (!rv) {
-        ap_log_error(APLOG_MARK, APLOG_CRIT, apr_get_os_error(), ap_server_conf,
-                     "Parent: Failed to create the child process.");
-        CloseHandle(hExitEvent);
-        CloseHandle(hPipeWrite);
-        CloseHandle(pi.hProcess);
-        return -1;
-    }
-
-    ap_log_error(APLOG_MARK, APLOG_INFO, APR_SUCCESS, ap_server_conf,
-                 "Parent: Created child process %d", pi.dwProcessId);
-
-    if (send_handles_to_child(p, hExitEvent, pi.hProcess, hPipeWrite)) {
-        /*
-         * This error is fatal, mop up the child and move on
-         * We toggle the child's exit event to cause this child 
-         * to quit even as it is attempting to start.
-         */
-        SetEvent(hExitEvent);
-        CloseHandle(hExitEvent);
-        CloseHandle(hPipeWrite);
-        CloseHandle(pi.hProcess);
-        return -1;
-    }
-
-    /* Important:
-     * Give the child process a chance to run before dup'ing the sockets.
-     * We have already set the listening sockets noninheritable, but if 
-     * WSADuplicateSocket runs before the child process initializes
-     * the listeners will be inherited anyway.
-     *
-     * XXX: This is badness; needs some mutex interlocking
-     */
-    Sleep(1000);
-
-    if (send_listeners_to_child(p, pi.dwProcessId, hPipeWrite)) {
-        /*
-         * This error is fatal, mop up the child and move on
-         * We toggle the child's exit event to cause this child 
-         * to quit even as it is attempting to start.
-         */
-        SetEvent(hExitEvent);
-        CloseHandle(hExitEvent);
-        CloseHandle(hPipeWrite);        
-        CloseHandle(pi.hProcess);
-        return -1;
-    }
-
-    CloseHandle(hPipeWrite);        
-
-    *child_proc = pi.hProcess;
-    *child_exit_event = hExitEvent;
-
-    return 0;
-}
-
-/***********************************************************************
- * master_main()
- * master_main() runs in the parent process.  It creates the child 
- * process which handles HTTP requests then waits on one of three 
- * events:
- *
- * restart_event
- * -------------
- * The restart event causes master_main to start a new child process and
- * tells the old child process to exit (by setting the child_exit_event).
- * The restart event is set as a result of one of the following:
- * 1. An apache -k restart command on the command line
- * 2. A command received from Windows service manager which gets 
- *    translated into an ap_signal_parent(SIGNAL_PARENT_RESTART)
- *    call by code in service.c.
- * 3. The child process calling ap_signal_parent(SIGNAL_PARENT_RESTART)
- *    as a result of hitting MaxRequestsPerChild.
- *
- * shutdown_event 
- * --------------
- * The shutdown event causes master_main to tell the child process to 
- * exit and that the server is shutting down. The shutdown event is
- * set as a result of one of the following:
- * 1. An apache -k shutdown command on the command line
- * 2. A command received from Windows service manager which gets
- *    translated into an ap_signal_parent(SIGNAL_PARENT_SHUTDOWN)
- *    call by code in service.c.
- *
- * child process handle
- * --------------------
- * The child process handle will be signaled if the child process 
- * exits for any reason. In a normal running server, the signaling
- * of this event means that the child process has exited prematurely
- * due to a seg fault or other irrecoverable error. For server
- * robustness, master_main will restart the child process under this 
- * condtion.
- *
- * master_main uses the child_exit_event to signal the child process
- * to exit.
- **********************************************************************/
-#define NUM_WAIT_HANDLES 3
-#define CHILD_HANDLE     0
-#define SHUTDOWN_HANDLE  1
-#define RESTART_HANDLE   2
-static int master_main(server_rec *s, HANDLE shutdown_event, HANDLE restart_event)
-{
-    int rv, cld;
-    int restart_pending;
-    int shutdown_pending;
-    HANDLE child_exit_event;
-    HANDLE event_handles[NUM_WAIT_HANDLES];
-
-    restart_pending = shutdown_pending = 0;
-
-    event_handles[SHUTDOWN_HANDLE] = shutdown_event;
-    event_handles[RESTART_HANDLE] = restart_event;
-
-    /* Create a single child process */
-    rv = create_process(pconf, &event_handles[CHILD_HANDLE], 
-                        &child_exit_event);
-    if (rv < 0) 
-    {
-        ap_log_error(APLOG_MARK, APLOG_CRIT, apr_get_os_error(), ap_server_conf,
-                     "master_main: create child process failed. Exiting.");
-        shutdown_pending = 1;
-        goto die_now;
-    }
-    
-    if (!strcasecmp(signal_arg, "runservice")) {
-        mpm_service_started();
-    }
-
-    /* Wait for shutdown or restart events or for child death */
-    rv = WaitForMultipleObjects(NUM_WAIT_HANDLES, (HANDLE *) event_handles, FALSE, INFINITE);
-    cld = rv - WAIT_OBJECT_0;
-    if (rv == WAIT_FAILED) {
-        /* Something serious is wrong */
-        ap_log_error(APLOG_MARK,APLOG_CRIT, apr_get_os_error(), ap_server_conf,
-                     "master_main: WaitForMultipeObjects WAIT_FAILED -- doing server shutdown");
-        shutdown_pending = 1;
-    }
-    else if (rv == WAIT_TIMEOUT) {
-        /* Hey, this cannot happen */
-        ap_log_error(APLOG_MARK, APLOG_ERR, apr_get_os_error(), s,
-                     "master_main: WaitForMultipeObjects with INFINITE wait exited with WAIT_TIMEOUT");
-        shutdown_pending = 1;
-    }
-    else if (cld == SHUTDOWN_HANDLE) {
-        /* shutdown_event signalled */
-        shutdown_pending = 1;
-        ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_INFO, APR_SUCCESS, s, 
-                     "Parent: Received shutdown signal -- Shutting down the server.");
-        if (ResetEvent(shutdown_event) == 0) {
-            ap_log_error(APLOG_MARK, APLOG_ERR, apr_get_os_error(), s,
-                         "ResetEvent(shutdown_event)");
-        }
-
-    }
-    else if (cld == RESTART_HANDLE) {
-        /* Received a restart event. Prepare the restart_event to be reused 
-         * then signal the child process to exit. 
-         */
-        restart_pending = 1;
-        ap_log_error(APLOG_MARK, APLOG_INFO, APR_SUCCESS, s, 
-                     "Parent: Received restart signal -- Restarting the server.");
-        if (ResetEvent(restart_event) == 0) {
-            ap_log_error(APLOG_MARK, APLOG_ERR, apr_get_os_error(), s,
-                         "Parent: ResetEvent(restart_event) failed.");
-        }
-        if (SetEvent(child_exit_event) == 0) {
-            ap_log_error(APLOG_MARK, APLOG_ERR, apr_get_os_error(), s,
-                         "Parent: SetEvent for child process %d failed.", 
-                         event_handles[CHILD_HANDLE]);
-        }
-        /* Don't wait to verify that the child process really exits, 
-         * just move on with the restart.
-         */
-        CloseHandle(event_handles[CHILD_HANDLE]);
-        event_handles[CHILD_HANDLE] = NULL;
-        ++ap_my_generation;
-    }
-    else {
-        /* The child process exited prematurely due to a fatal error. */
-        DWORD exitcode;
-        if (!GetExitCodeProcess(event_handles[CHILD_HANDLE], &exitcode)) {
-            /* HUH? We did exit, didn't we? */
-            exitcode = APEXIT_CHILDFATAL;
-        }
-        if (   exitcode == APEXIT_CHILDFATAL 
-            || exitcode == APEXIT_CHILDINIT
-            || exitcode == APEXIT_INIT) {
-            ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_INFO, APR_SUCCESS, ap_server_conf, 
-                         "Parent: child process exited with status %u -- Aborting.", exitcode);
-        }
-        else {
-            restart_pending = 1;
-            ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_INFO, APR_SUCCESS, ap_server_conf, 
-                         "Parent: child process exited with status %u -- Restarting.", exitcode);
-        }
-        CloseHandle(event_handles[CHILD_HANDLE]);
-        event_handles[CHILD_HANDLE] = NULL;
-        ++ap_my_generation;
-    }
-
-die_now:
-    if (shutdown_pending) 
-    {
-        int timeout = 30000;  /* Timeout is milliseconds */
-
-        /* This shutdown is only marginally graceful. We will give the 
-         * child a bit of time to exit gracefully. If the time expires,
-         * the child will be wacked.
-         */
-        if (strcasecmp(signal_arg, "runservice")) {
-            mpm_service_stopping();
-        }
-        /* Signal the child processes to exit */
-        if (SetEvent(child_exit_event) == 0) {
-                ap_log_error(APLOG_MARK,APLOG_ERR, apr_get_os_error(), ap_server_conf,
-                             "Parent: SetEvent for child process %d failed", event_handles[CHILD_HANDLE]);
-        }
-        if (event_handles[CHILD_HANDLE]) {
-            rv = WaitForSingleObject(event_handles[CHILD_HANDLE], timeout);
-            if (rv == WAIT_OBJECT_0) {
-                ap_log_error(APLOG_MARK,APLOG_INFO|APLOG_NOERRNO, APR_SUCCESS, ap_server_conf,
-                             "Parent: Child process %d exited successfully.", event_handles[CHILD_HANDLE]);
-                CloseHandle(event_handles[CHILD_HANDLE]);
-                event_handles[CHILD_HANDLE] = NULL;
-            }
-            else {
-                ap_log_error(APLOG_MARK,APLOG_INFO|APLOG_NOERRNO, APR_SUCCESS, ap_server_conf,
-                             "Parent: Forcing termination of child process %d ", event_handles[CHILD_HANDLE]);
-                TerminateProcess(event_handles[CHILD_HANDLE], 1);
-                CloseHandle(event_handles[CHILD_HANDLE]);
-                event_handles[CHILD_HANDLE] = NULL;
-            }
-        }
-        return 0;  /* Tell the caller we do not want to restart */
-    }
-
-    return 1;      /* Tell the caller we want a restart */
-}
-
-/* service_nt_main_fn needs to append the StartService() args 
- * outside of our call stack and thread as the service starts...
- */
-apr_array_header_t *mpm_new_argv;
-
-/* Remember service_to_start failures to log and fail in pre_config.
- * Remember inst_argc and inst_argv for installing or starting the
- * service after we preflight the config.
- */
-
-AP_DECLARE(apr_status_t) ap_mpm_query(int query_code, int *result)
-{
-    switch(query_code){
-        case AP_MPMQ_MAX_DAEMON_USED:
-            *result = MAXIMUM_WAIT_OBJECTS;
-            return APR_SUCCESS;
-        case AP_MPMQ_IS_THREADED:
-            *result = AP_MPMQ_STATIC;
-            return APR_SUCCESS;
-        case AP_MPMQ_IS_FORKED:
-            *result = AP_MPMQ_NOT_SUPPORTED;
-            return APR_SUCCESS;
-        case AP_MPMQ_HARD_LIMIT_DAEMONS:
-            *result = HARD_SERVER_LIMIT;
-            return APR_SUCCESS;
-        case AP_MPMQ_HARD_LIMIT_THREADS:
-            *result = HARD_THREAD_LIMIT;
-            return APR_SUCCESS;
-        case AP_MPMQ_MAX_THREADS:
-            *result = ap_threads_per_child;
-            return APR_SUCCESS;
-        case AP_MPMQ_MIN_SPARE_DAEMONS:
-            *result = 0;
-            return APR_SUCCESS;
-        case AP_MPMQ_MIN_SPARE_THREADS:    
-            *result = 0;
-            return APR_SUCCESS;
-        case AP_MPMQ_MAX_SPARE_DAEMONS:
-            *result = 0;
-            return APR_SUCCESS;
-        case AP_MPMQ_MAX_SPARE_THREADS:
-            *result = 0;
-            return APR_SUCCESS;
-        case AP_MPMQ_MAX_REQUESTS_DAEMON:
-            *result = ap_max_requests_per_child;
-            return APR_SUCCESS;
-        case AP_MPMQ_MAX_DAEMONS:
-            *result = 0;
-            return APR_SUCCESS;
-    }
-    return APR_ENOTIMPL;
-} 
-
-#define SERVICE_UNSET (-1)
-static apr_status_t service_set = SERVICE_UNSET;
-static apr_status_t service_to_start_success;
-static int inst_argc;
-static const char * const *inst_argv;
-static char *service_name = NULL;
-    
-void winnt_rewrite_args(process_rec *process) 
-{
-    /* Handle the following SCM aspects in this phase:
-     *
-     *   -k runservice [transition for WinNT, nothing for Win9x]
-     *   -k (!)install [error out if name is not installed]
-     *
-     * We can't leave this phase until we know our identity
-     * and modify the command arguments appropriately.
-     */
-    apr_status_t rv;
-    char *def_server_root;
-    char fnbuf[MAX_PATH];
-    char optbuf[3];
-    const char *optarg;
-    int fixed_args;
-    char *pid;
-    apr_getopt_t *opt;
-    int running_as_service = 1;
-
-    osver.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
-    GetVersionEx(&osver);
-
-    /* AP_PARENT_PID is only valid in the child */
-    pid = getenv("AP_PARENT_PID");
-    if (pid) 
-    {
-        /* This is the child */
-        my_pid = GetCurrentProcessId();
-        parent_pid = (DWORD) atol(pid);
-
-        /* The parent is responsible for providing the
-         * COMPLETE ARGUMENTS REQUIRED to the child.
-         *
-         * No further argument parsing is needed, but
-         * for good measure we will provide a simple
-         * signal string for later testing.
-         */
-        signal_arg = "runchild";
-        return;
-    }
-    
-    /* This is the parent, we have a long way to go :-) */
-    parent_pid = my_pid = GetCurrentProcessId();
-    
-    /* Rewrite process->argv[]; 
-     *
-     * strip out -k signal into signal_arg
-     * strip out -n servicename and set the names
-     * add default -d serverroot from the path of this executable
-     * 
-     * The end result will look like:
-     *
-     * The invocation command (%0)
-     *     The -d serverroot default from the running executable
-     *         The requested service's (-n) registry ConfigArgs
-     *             The WinNT SCM's StartService() args
-     */
-    if (!GetModuleFileName(NULL, fnbuf, sizeof(fnbuf))) {
-        rv = apr_get_os_error();
-        ap_log_error(APLOG_MARK,APLOG_CRIT, rv, NULL, 
-                     "Failed to get the path of Apache.exe");
-        exit(APEXIT_INIT);
-    }
-    /* WARNING: There is an implict assumption here that the
-     * executable resides in ServerRoot or ServerRoot\bin
-     */
-    def_server_root = (char *) apr_filename_of_pathname(fnbuf);
-    if (def_server_root > fnbuf) {
-        *(def_server_root - 1) = '\0';
-        def_server_root = (char *) apr_filename_of_pathname(fnbuf);
-        if (!strcasecmp(def_server_root, "bin"))
-            *(def_server_root - 1) = '\0';
-    }
-    apr_filepath_merge(&def_server_root, NULL, fnbuf, 
-                       APR_FILEPATH_TRUENAME, process->pool);
-
-    /* Use process->pool so that the rewritten argv
-     * lasts for the lifetime of the server process,
-     * because pconf will be destroyed after the 
-     * initial pre-flight of the config parser.
-     */
-    mpm_new_argv = apr_array_make(process->pool, process->argc + 2,
-                                  sizeof(const char *));
-    *(const char **)apr_array_push(mpm_new_argv) = process->argv[0];
-    *(const char **)apr_array_push(mpm_new_argv) = "-d";
-    *(const char **)apr_array_push(mpm_new_argv) = def_server_root;
-
-    fixed_args = mpm_new_argv->nelts;
-
-    optbuf[0] = '-';
-    optbuf[2] = '\0';
-    apr_getopt_init(&opt, process->pool, process->argc, (char**) process->argv);
-    opt->errfn = NULL;
-    while ((rv = apr_getopt(opt, "n:k:iu" AP_SERVER_BASEARGS, 
-                            optbuf + 1, &optarg)) == APR_SUCCESS) {
-        switch (optbuf[1]) {
-        case 'n':
-            service_set = mpm_service_set_name(process->pool, &service_name, 
-                                               optarg);
-            break;
-        case 'k':
-            signal_arg = optarg;
-            break;
-        case 'i':
-            ap_log_error(APLOG_MARK,APLOG_WARNING, 0, NULL,
-                "-i is deprecated.  Use -k install.");
-            signal_arg = "install";
-            break;
-        case 'u':
-            ap_log_error(APLOG_MARK,APLOG_WARNING, 0, NULL,
-                "-u is deprecated.  Use -k uninstall.");
-            signal_arg = "uninstall";
-            break;
-        default:
-            *(const char **)apr_array_push(mpm_new_argv) =
-                apr_pstrdup(process->pool, optbuf);
-
-            if (optarg) {
-                *(const char **)apr_array_push(mpm_new_argv) = optarg;
-            }
-            break;
-        }
-    }
-    
-    /* back up to capture the bad argument */
-    if (rv == APR_BADCH || rv == APR_BADARG) {
-        opt->ind--;
-    }
-
-    while (opt->ind < opt->argc) {
-        *(const char **)apr_array_push(mpm_new_argv) =
-            apr_pstrdup(process->pool, opt->argv[opt->ind++]);
-    }
-
-    /* Track the number of args actually entered by the user */
-    inst_argc = mpm_new_argv->nelts - fixed_args;
-
-    /* Provide a default 'run' -k arg to simplify signal_arg tests */
-    if (!signal_arg)
-    {
-        signal_arg = "run";
-        running_as_service = 0;
-    }
-
-    if (!strcasecmp(signal_arg, "runservice")) 
-    {
-        /* Start the NT Service _NOW_ because the WinNT SCM is 
-         * expecting us to rapidly assume control of our own 
-         * process, the SCM will tell us our service name, and
-         * may have extra StartService() command arguments to
-         * add for us.
-         *
-         * Any other process has a console, so we don't to begin
-         * a Win9x service until the configuration is parsed and
-         * any command line errors are reported.
-         *
-         * We hold the return value so that we can die in pre_config
-         * after logging begins, and the failure can land in the log.
-         */
-        if (osver.dwPlatformId == VER_PLATFORM_WIN32_NT) {
-            service_to_start_success = mpm_service_to_start(&service_name,
-                                                            process->pool);
-            if (service_to_start_success == APR_SUCCESS) {
-                service_set = APR_SUCCESS;
-            }
-        }
-    }
-
-    /* Get the default for any -k option, except run */
-    if (service_set == SERVICE_UNSET && strcasecmp(signal_arg, "run")) {
-        service_set = mpm_service_set_name(process->pool, &service_name,
-                                           AP_DEFAULT_SERVICE_NAME);
-    }
-
-    if (!strcasecmp(signal_arg, "install")) /* -k install */
-    {
-        if (service_set == APR_SUCCESS) 
-        {
-            ap_log_error(APLOG_MARK,APLOG_ERR, 0, NULL,
-                 "%s: Service is already installed.", service_name);
-            exit(APEXIT_INIT);
-        }
-    }
-    else if (running_as_service)
-    {
-        if (service_set == APR_SUCCESS) 
-        {
-            rv = mpm_merge_service_args(process->pool, mpm_new_argv, 
-                                        fixed_args);
-            if (rv == APR_SUCCESS) {
-                ap_log_error(APLOG_MARK,APLOG_NOERRNO|APLOG_INFO, 0, NULL,
-                             "Using ConfigArgs of the installed service "
-                             "\"%s\".", service_name);
-            }
-            else  {
-                ap_log_error(APLOG_MARK,APLOG_WARNING, rv, NULL,
-                             "No installed ConfigArgs for the service "
-                             "\"%s\", using Apache defaults.", service_name);
-            }
-        }
-        else
-        {
-            ap_log_error(APLOG_MARK,APLOG_ERR, service_set, NULL,
-                 "No installed service named \"%s\".", service_name);
-            exit(APEXIT_INIT);
-        }
-    }
-    if (strcasecmp(signal_arg, "install") && service_set && service_set != SERVICE_UNSET) 
-    {
-        ap_log_error(APLOG_MARK,APLOG_ERR, service_set, NULL,
-             "No installed service named \"%s\".", service_name);
-        exit(APEXIT_INIT);
-    }
-    
-    /* Track the args actually entered by the user.
-     * These will be used for the -k install parameters, as well as
-     * for the -k start service override arguments.
-     */
-    inst_argv = (const char * const *)mpm_new_argv->elts
-        + mpm_new_argv->nelts - inst_argc;
-
-    process->argc = mpm_new_argv->nelts; 
-    process->argv = (const char * const *) mpm_new_argv->elts;
-}
-
-
-static int winnt_pre_config(apr_pool_t *pconf, apr_pool_t *plog, apr_pool_t *ptemp) 
-{
-    /* Handle the following SCM aspects in this phase:
-     *
-     *   -k runservice [WinNT errors logged from rewrite_args]
-     *   -k uninstall
-     *   -k stop
-     *   -k shutdown (same as -k stop). Maintained for backward compatability.
-     *
-     * in these cases we -don't- care if httpd.conf has config errors!
-     */
-    apr_status_t rv;
-
-    if (ap_exists_config_define("ONE_PROCESS") ||
-        ap_exists_config_define("DEBUG"))
-        one_process = -1;
-
-    if (!strcasecmp(signal_arg, "runservice")
-            && (osver.dwPlatformId == VER_PLATFORM_WIN32_NT)
-            && (service_to_start_success != APR_SUCCESS)) {
-        ap_log_error(APLOG_MARK,APLOG_CRIT, service_to_start_success, NULL, 
-                     "%s: Unable to start the service manager.",
-                     service_name);
-        exit(APEXIT_INIT);
-    }
-
-    if (!strcasecmp(signal_arg, "uninstall")) {
-        rv = mpm_service_uninstall();
-        exit(rv);
-    }
-
-    if ((!strcasecmp(signal_arg, "stop")) || 
-        (!strcasecmp(signal_arg, "shutdown"))) {
-        mpm_signal_service(ptemp, 0);
-        exit(0);
-    }
-
-    ap_listen_pre_config();
-    ap_threads_per_child = DEFAULT_START_THREAD;
-    ap_pid_fname = DEFAULT_PIDLOG;
-    ap_max_requests_per_child = DEFAULT_MAX_REQUESTS_PER_CHILD;
-
-    apr_cpystrn(ap_coredump_dir, ap_server_root, sizeof(ap_coredump_dir));
-
-    return OK;
-}
-
-static int winnt_post_config(apr_pool_t *pconf, apr_pool_t *plog, apr_pool_t *ptemp, server_rec* server)
-{
-    static int restart_num = 0;
-    apr_status_t rv = 0;
-
-    ap_server_conf = server;
-    
-    /* Handle the following SCM aspects in this phase:
-     *
-     *   -k install
-     *   -k start
-     *   -k restart
-     *   -k runservice [Win95, only once - after we parsed the config]
-     *
-     * because all of these signals are useful _only_ if there
-     * is a valid conf\httpd.conf environment to start.
-     *
-     * We reached this phase by avoiding errors that would cause
-     * these options to fail unexpectedly in another process.
-     */
-
-    if (!strcasecmp(signal_arg, "install")) {
-        rv = mpm_service_install(ptemp, inst_argc, inst_argv);
-        exit (rv);
-    }
-
-    if (!strcasecmp(signal_arg, "start")) {
-        ap_listen_rec *lr;
-
-        /* Close the listening sockets. */
-        for (lr = ap_listeners; lr; lr = lr->next) {
-            apr_socket_close(lr->sd);
-            lr->active = 0;
-        }
-        rv = mpm_service_start(ptemp, inst_argc, inst_argv);
-        exit (rv);
-    }
-
-    if (!strcasecmp(signal_arg, "restart")) {
-        mpm_signal_service(ptemp, 1);
-        exit (rv);
-    }
-
-    if (parent_pid == my_pid) 
-    {
-        if (restart_num++ == 1) 
-        {
-            /* This code should be run once in the parent and not run
-             * across a restart
-             */
-            PSECURITY_ATTRIBUTES sa = GetNullACL();  /* returns NULL if invalid (Win95?) */
-            setup_signal_names(apr_psprintf(pconf,"ap%d", parent_pid));
-
-            ap_log_pid(pconf, ap_pid_fname);
-            
-            /* Create shutdown event, apPID_shutdown, where PID is the parent 
-             * Apache process ID. Shutdown is signaled by 'apache -k shutdown'.
-             */
-            shutdown_event = CreateEvent(sa, FALSE, FALSE, signal_shutdown_name);
-            if (!shutdown_event) {
-                ap_log_error(APLOG_MARK, APLOG_CRIT, apr_get_os_error(), ap_server_conf,
-                             "Parent: Cannot create shutdown event %s", signal_shutdown_name);
-                CleanNullACL((void *)sa);
-                return HTTP_INTERNAL_SERVER_ERROR;
-            }
-
-            /* Create restart event, apPID_restart, where PID is the parent 
-             * Apache process ID. Restart is signaled by 'apache -k restart'.
-             */
-            restart_event = CreateEvent(sa, FALSE, FALSE, signal_restart_name);
-            if (!restart_event) {
-                CloseHandle(shutdown_event);
-                ap_log_error(APLOG_MARK, APLOG_CRIT, apr_get_os_error(), ap_server_conf,
-                             "Parent: Cannot create restart event %s", signal_restart_name);
-                CleanNullACL((void *)sa);
-                return HTTP_INTERNAL_SERVER_ERROR;
-            }
-            CleanNullACL((void *)sa);
-
-            /* Now that we are flying at 15000 feet... 
-             * wipe out the Win95 service console,
-             * signal the SCM the WinNT service started, or
-             * if not a service, setup console handlers instead.
-             */
-            if (!strcasecmp(signal_arg, "runservice"))
-            {
-                if (osver.dwPlatformId != VER_PLATFORM_WIN32_NT) 
-                {
-                    rv = mpm_service_to_start(&service_name,
-                                              server->process->pool);
-                    if (rv != APR_SUCCESS) {
-                        ap_log_error(APLOG_MARK,APLOG_ERR, rv, ap_server_conf,
-                                     "%s: Unable to start the service manager.",
-                                     service_name);
-                        return HTTP_INTERNAL_SERVER_ERROR;
-                    }            
-                }
-            }
-            else /* ! -k runservice */
-            {
-                mpm_start_console_handler();
-            }
-
-            /* Create the start mutex, apPID, where PID is the parent Apache process ID.
-             * Ths start mutex is used during a restart to prevent more than one 
-             * child process from entering the accept loop at once.
-             */
-            rv =  apr_proc_mutex_create(&start_mutex, 
-                                        signal_name_prefix,
-                                        APR_LOCK_DEFAULT,
-                                        ap_server_conf->process->pool);
-            if (rv != APR_SUCCESS) {
-                ap_log_error(APLOG_MARK,APLOG_ERR, rv, ap_server_conf,
-                             "%s: Unable to create the start_mutex.",
-                             service_name);
-                return HTTP_INTERNAL_SERVER_ERROR;
-            }            
-        }
-    }
-    else /* parent_pid != my_pid */
-    {
-        mpm_start_child_console_handler();
-    }
-    return OK;
-}
-
-/* This really should be a post_config hook, but the error log is already
- * redirected by that point, so we need to do this in the open_logs phase.
- */
-static int winnt_open_logs(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *s)
-{
-    pconf = p;
-    ap_server_conf = s;
-
-    if (parent_pid != my_pid) {
-        return OK;
-    }
-
-    /* We cannot initialize our listeners if we are restarting
-     * (the parent process already has glomed on to them)
-     * nor should we do so for service reconfiguration 
-     * (since the service may already be running.)
-     */
-    if (!strcasecmp(signal_arg, "restart") 
-            || !strcasecmp(signal_arg, "config")) {
-        return OK;
-    }
-
-    if (ap_setup_listeners(ap_server_conf) < 1) {
-        ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_ALERT|APLOG_STARTUP, 0, 
-                     NULL, "no listening sockets available, shutting down");
-        return DONE;
-    }
-
-    if (!set_listeners_noninheritable(pconf)) {
-        return 1;
-    }
-
-    return OK;
-}
-
-static void winnt_child_init(apr_pool_t *pchild, struct server_rec *ap_server_conf)
-{
-    apr_status_t rv;
-
-    setup_signal_names(apr_psprintf(pchild,"ap%d", parent_pid));
-
-    /* This is a child process, not in single process mode */
-    if (!one_process) {
-        /* Set up events and the scoreboard */
-        get_handles_from_parent(ap_server_conf);
-
-        /* Set up the listeners */
-        get_listeners_from_parent(ap_server_conf);
-
-        ap_my_generation = atoi(getenv("AP_MY_GENERATION"));
-
-        rv = apr_proc_mutex_child_init(&start_mutex, signal_name_prefix, pconf);
-    }
-    else {
-        /* Single process mode - this lock doesn't even need to exist */
-        rv = apr_proc_mutex_create(&start_mutex, signal_name_prefix, 
-                                   APR_LOCK_DEFAULT, pconf);
-        
-        /* Borrow the shutdown_even as our _child_ loop exit event */
-        exit_event = shutdown_event;
-    }
-    if (rv != APR_SUCCESS) {
-        ap_log_error(APLOG_MARK,APLOG_ERR, rv, ap_server_conf,
-                     "%s child %d: Unable to init the start_mutex.",
-                     service_name, my_pid);
-        exit(APEXIT_CHILDINIT);
-    }
-}
-
-
-AP_DECLARE(int) ap_mpm_run(apr_pool_t *_pconf, apr_pool_t *plog, server_rec *s )
-{
-    static int restart = 0;            /* Default is "not a restart" */
-
-    if ((parent_pid == my_pid) || one_process) {
-        /* Set up the scoreboard. */
-        if (ap_run_pre_mpm(pconf, SB_SHARED) != OK) {
-            return 1;
-        }
-    }
-    
-    if ((parent_pid != my_pid) || one_process) 
-    {
-        /* The child process or in one_process (debug) mode 
-         */
-        ap_log_error(APLOG_MARK, APLOG_INFO, APR_SUCCESS, ap_server_conf,
-                     "Child %d: Child process is running", my_pid);
-
-        child_main();
-
-        ap_log_error(APLOG_MARK, APLOG_INFO, APR_SUCCESS, ap_server_conf,
-                     "Child %d: Child process is exiting", my_pid);        
-        return 1;
-    }
-    else 
-    {
-        /* A real-honest to goodness parent */
-
-        restart = master_main(ap_server_conf, shutdown_event, restart_event);
-
-        if (!restart) 
-        {
-            /* Shutting down. Clean up... */
-            const char *pidfile = ap_server_root_relative (pconf, ap_pid_fname);
-
-            if (pidfile != NULL && unlink(pidfile) == 0) {
-                ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_INFO, APR_SUCCESS,
-                             ap_server_conf, "removed PID file %s (pid=%ld)",
-                             pidfile, GetCurrentProcessId());
-            }
-            apr_proc_mutex_destroy(start_mutex);
-
-            CloseHandle(restart_event);
-            CloseHandle(shutdown_event);
-
-            return 1;
-        }
-    }
-
-    return 0; /* Restart */
-}
-
-static void winnt_hooks(apr_pool_t *p)
-{
-    /* The prefork open_logs phase must run before the core's, or stderr
-     * will be redirected to a file, and the messages won't print to the
-     * console.
-     */
-    static const char *const aszSucc[] = {"core.c", NULL};
-
-    ap_hook_pre_config(winnt_pre_config, NULL, NULL, APR_HOOK_MIDDLE);
-    ap_hook_post_config(winnt_post_config, NULL, NULL, 0);
-    ap_hook_child_init(winnt_child_init, NULL, NULL, APR_HOOK_MIDDLE);
-    ap_hook_open_logs(winnt_open_logs, NULL, aszSucc, APR_HOOK_MIDDLE);
-}
-
-AP_MODULE_DECLARE_DATA module mpm_winnt_module = {
-    MPM20_MODULE_STUFF,
-    winnt_rewrite_args,         /* hook to run before apache parses args */
-    NULL,			/* create per-directory config structure */
-    NULL,			/* merge per-directory config structures */
-    NULL,			/* create per-server config structure */
-    NULL,			/* merge per-server config structures */
-    winnt_cmds,		        /* command apr_table_t */
-    winnt_hooks 		/* register_hooks */
-};
diff --git a/server/mpm/winnt/mpm_winnt.h b/server/mpm/winnt/mpm_winnt.h
deleted file mode 100644
index 9fc45ab..0000000
--- a/server/mpm/winnt/mpm_winnt.h
+++ /dev/null
@@ -1,214 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-#ifndef APACHE_MPM_WINNT_H
-#define APACHE_MPM_WINNT_H
-
-#include "ap_listen.h"
-
-/* From registry.c: */
-
-apr_status_t ap_registry_create_key(const char *key);
-apr_status_t ap_registry_delete_key(const char *key);
-
-apr_status_t ap_registry_store_value(const char *key, const char *name, 
-                                    const char *value);
-apr_status_t ap_registry_get_value(apr_pool_t *p, const char *key, 
-                                  const char *name, char **ppValue);
-apr_status_t ap_registry_store_array(apr_pool_t *p, const char *key, 
-                                    const char *name, int nelts, 
-                                    char const* const* elts);
-apr_status_t ap_registry_get_array(apr_pool_t *p, const char *key, 
-                                  const char *name, 
-                                  apr_array_header_t **parray);
-apr_status_t ap_registry_delete_value(const char *key, const char *name);
-
-
-/* From service.c: */
-
-#define SERVICE_APACHE_RESTART 128
-
-#ifndef AP_DEFAULT_SERVICE_NAME
-#define AP_DEFAULT_SERVICE_NAME "Apache2"
-#endif
-
-#define SERVICECONFIG9X "Software\\Microsoft\\Windows\\CurrentVersion\\RunServices"
-#define SERVICECONFIG "System\\CurrentControlSet\\Services\\%s"
-#define SERVICEPARAMS "System\\CurrentControlSet\\Services\\%s\\Parameters"
-
-apr_status_t mpm_service_set_name(apr_pool_t *p, const char **display_name, 
-                                                 const char *set_name);
-apr_status_t mpm_merge_service_args(apr_pool_t *p, apr_array_header_t *args, 
-                                   int fixed_args);
-
-apr_status_t mpm_service_to_start(const char **display_name, apr_pool_t *p);
-apr_status_t mpm_service_started(void);
-apr_status_t mpm_service_install(apr_pool_t *ptemp, int argc, 
-                                char const* const* argv);
-apr_status_t mpm_service_uninstall(void);
-
-apr_status_t mpm_service_start(apr_pool_t *ptemp, int argc, 
-                              char const* const* argv);
-
-void mpm_signal_service(apr_pool_t *ptemp, int signal);
-
-void mpm_service_stopping(void);
-
-void mpm_start_console_handler(void);
-void mpm_start_child_console_handler(void);
-
-/* From nt_eventlog.c: */
-
-void mpm_nt_eventlog_stderr_open(char *display_name, apr_pool_t *p);
-void mpm_nt_eventlog_stderr_flush(void);
-
-/* From winnt.c: */
-
-extern OSVERSIONINFO osver;
-extern void clean_child_exit(int);
-
-void setup_signal_names(char *prefix);
-
-typedef enum {
-    SIGNAL_PARENT_SHUTDOWN,
-    SIGNAL_PARENT_RESTART,
-    SIGNAL_PARENT_RESTART_GRACEFUL
-} ap_signal_parent_e;
-AP_DECLARE(void) ap_signal_parent(ap_signal_parent_e type);
-
-/* This code is stolen from the apr_private.h and misc/win32/misc.c
- * Please see those sources for detailed documentation.
- */
-typedef enum {
-    DLL_WINBASEAPI = 0,    // kernel32 From WinBase.h
-    DLL_WINADVAPI = 1,     // advapi32 From WinBase.h
-    DLL_WINSOCKAPI = 2,    // mswsock  From WinSock.h
-    DLL_WINSOCK2API = 3,   // ws2_32   From WinSock2.h
-    DLL_defined = 4        // must define as last idx_ + 1
-} ap_dlltoken_e;
-
-FARPROC ap_load_dll_func(ap_dlltoken_e fnLib, char *fnName, int ordinal);
-
-#define AP_DECLARE_LATE_DLL_FUNC(lib, rettype, calltype, fn, ord, args, names) \
-    typedef rettype (calltype *ap_winapi_fpt_##fn) args; \
-    static ap_winapi_fpt_##fn ap_winapi_pfn_##fn = NULL; \
-    __inline rettype ap_winapi_##fn args \
-    {   if (!ap_winapi_pfn_##fn) \
-            ap_winapi_pfn_##fn = (ap_winapi_fpt_##fn) ap_load_dll_func(lib, #fn, ord); \
-        return (*(ap_winapi_pfn_##fn)) names; }; \
-
-/* Win2K kernel only */
-AP_DECLARE_LATE_DLL_FUNC(DLL_WINADVAPI, BOOL, WINAPI, ChangeServiceConfig2A, 0, (
-    SC_HANDLE hService, 
-    DWORD dwInfoLevel, 
-    LPVOID lpInfo),
-    (hService, dwInfoLevel, lpInfo));
-#undef ChangeServiceConfig2
-#define ChangeServiceConfig2 ap_winapi_ChangeServiceConfig2A
-
-/* WinNT kernel only */
-AP_DECLARE_LATE_DLL_FUNC(DLL_WINBASEAPI, BOOL, WINAPI, CancelIo, 0, (
-    IN HANDLE hFile),
-    (hFile));
-#define CancelIo ap_winapi_CancelIo
-
-/* Win9x kernel only */
-AP_DECLARE_LATE_DLL_FUNC(DLL_WINBASEAPI, DWORD, WINAPI, RegisterServiceProcess, 0, (
-    DWORD dwProcessId,
-    DWORD dwType),
-    (dwProcessId, dwType));
-#define RegisterServiceProcess ap_winapi_RegisterServiceProcess
-
-/*
- * The Windoes MPM uses a queue of completion contexts that it passes
- * between the accept threads and the worker threads. Declare the
- * functions to access the queue and the structures passed on the
- * queue in the header file to enable modules to access them
- * if necessary. The queue resides in the MPM.
- */
-#ifdef CONTAINING_RECORD
-#undef CONTAINING_RECORD
-#endif
-#define CONTAINING_RECORD(address, type, field) ((type *)( \
-                                                  (PCHAR)(address) - \
-                                                  (PCHAR)(&((type *)0)->field)))
-#define PADDED_ADDR_SIZE sizeof(SOCKADDR_IN)+16
-typedef struct CompContext {
-    struct CompContext *next;
-    OVERLAPPED Overlapped;
-    apr_socket_t *sock;
-    SOCKET accept_socket;
-    char buff[2*PADDED_ADDR_SIZE];
-    struct sockaddr *sa_server;
-    int sa_server_len;
-    struct sockaddr *sa_client;
-    int sa_client_len;
-    apr_pool_t *ptrans;
-} COMP_CONTEXT, *PCOMP_CONTEXT;
-
-typedef enum {
-    IOCP_CONNECTION_ACCEPTED = 1,
-    IOCP_WAIT_FOR_RECEIVE = 2,
-    IOCP_WAIT_FOR_TRANSMITFILE = 3,
-    IOCP_SHUTDOWN = 4
-} io_state_e;
-
-AP_DECLARE(PCOMP_CONTEXT) mpm_get_completion_context(void);
-AP_DECLARE(void)          mpm_recycle_completion_context(PCOMP_CONTEXT pCompContext);
-AP_DECLARE(apr_status_t)  mpm_post_completion_context(PCOMP_CONTEXT pCompContext, io_state_e state);
-#endif /* APACHE_MPM_WINNT_H */
diff --git a/server/mpm/winnt/nt_eventlog.c b/server/mpm/winnt/nt_eventlog.c
deleted file mode 100644
index a647494..0000000
--- a/server/mpm/winnt/nt_eventlog.c
+++ /dev/null
@@ -1,222 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-#define CORE_PRIVATE 
-
-#include "httpd.h"
-#include "http_log.h"
-#include "mpm_winnt.h"
-#include "apr_strings.h"
-#include "apr_lib.h"
-
-static char  *display_name  = NULL;
-static HANDLE stderr_thread = NULL;
-static HANDLE stderr_ready;
-
-static DWORD WINAPI service_stderr_thread(LPVOID hPipe)
-{
-    HANDLE hPipeRead = (HANDLE) hPipe;
-    HANDLE hEventSource;
-    char errbuf[256];
-    char *errmsg = errbuf;
-    const char *errarg[9];
-    DWORD errres;
-    HKEY hk;
-    
-    errarg[0] = "The Apache service named";
-    errarg[1] = display_name;
-    errarg[2] = "reported the following error:\r\n>>>";
-    errarg[3] = errbuf;
-    errarg[4] = NULL;
-    errarg[5] = NULL;
-    errarg[6] = NULL;
-    errarg[7] = NULL;
-    errarg[8] = NULL;
-
-    /* What are we going to do in here, bail on the user?  not. */
-    if (!RegCreateKey(HKEY_LOCAL_MACHINE, "SYSTEM\\CurrentControlSet\\Services"
-                      "\\EventLog\\Application\\Apache Service", &hk)) 
-    {
-        /* The stock message file */
-        char *netmsgkey = "%SystemRoot%\\System32\\netmsg.dll";
-        DWORD dwData = EVENTLOG_ERROR_TYPE | EVENTLOG_WARNING_TYPE | 
-                       EVENTLOG_INFORMATION_TYPE; 
- 
-        RegSetValueEx(hk, "EventMessageFile", 0, REG_EXPAND_SZ,
-                          (LPBYTE) netmsgkey, strlen(netmsgkey) + 1);
-        
-        RegSetValueEx(hk, "TypesSupported", 0, REG_DWORD,
-                          (LPBYTE) &dwData, sizeof(dwData));
-        RegCloseKey(hk);
-    }
-
-    hEventSource = RegisterEventSource(NULL, "Apache Service");
-
-    SetEvent(stderr_ready);
-
-    while (ReadFile(hPipeRead, errmsg, 1, &errres, NULL) && (errres == 1))
-    {
-        if ((errmsg > errbuf) || !isspace(*errmsg))
-        {
-            ++errmsg;
-            if ((*(errmsg - 1) == '\n') 
-                    || (errmsg >= errbuf + sizeof(errbuf) - 1))
-            {
-                while ((errmsg > errbuf) && isspace(*(errmsg - 1))) {
-                    --errmsg;
-                }
-                *errmsg = '\0';
-
-                /* Generic message: '%1 %2 %3 %4 %5 %6 %7 %8 %9'
-                 * The event code in netmsg.dll is 3299
-                 */
-                ReportEvent(hEventSource, EVENTLOG_ERROR_TYPE, 0, 
-                            3299, NULL, 9, 0, errarg, NULL);
-                errmsg = errbuf;
-            }
-        }
-    }
-
-    if ((errres = GetLastError()) != ERROR_BROKEN_PIPE) {
-        apr_snprintf(errbuf, sizeof(errbuf),
-                     "Win32 error %d reading stderr pipe stream\r\n", 
-                     GetLastError());
-
-        ReportEvent(hEventSource, EVENTLOG_ERROR_TYPE, 0, 
-                    3299, NULL, 9, 0, errarg, NULL);
-    }
-
-    CloseHandle(hPipeRead);
-    DeregisterEventSource(hEventSource);
-    CloseHandle(stderr_thread);
-    stderr_thread = NULL;
-    return 0;
-}
-
-
-void mpm_nt_eventlog_stderr_flush(void)
-{
-    HANDLE cleanup_thread = stderr_thread;
-
-    if (cleanup_thread) {
-        HANDLE hErr = GetStdHandle(STD_ERROR_HANDLE);
-        fclose(stderr);
-        CloseHandle(hErr);
-        WaitForSingleObject(cleanup_thread, 30000);
-        CloseHandle(cleanup_thread);
-    }
-}
-
-
-void mpm_nt_eventlog_stderr_open(char *argv0, apr_pool_t *p)
-{
-    SECURITY_ATTRIBUTES sa;
-    HANDLE hProc = GetCurrentProcess();
-    HANDLE hPipeRead = NULL;
-    HANDLE hPipeWrite = NULL;
-    HANDLE hDup = NULL;
-    DWORD  threadid;
-    int    fd;
-
-    display_name = argv0;
-
-    /* Create a pipe to send stderr messages to the system error log.
-     *
-     * _dup2() duplicates the write handle inheritable for us.
-     */
-    sa.nLength = sizeof(sa);
-    sa.lpSecurityDescriptor = NULL;
-    sa.bInheritHandle = FALSE;
-    CreatePipe(&hPipeRead, &hPipeWrite, NULL, 0); 
-    ap_assert(hPipeRead && hPipeWrite);
-
-    stderr_ready = CreateEvent(NULL, FALSE, FALSE, NULL);
-    stderr_thread = CreateThread(NULL, 0, service_stderr_thread,
-                                 (LPVOID) hPipeRead, 0, &threadid);
-    ap_assert(stderr_ready && stderr_thread);
-
-    WaitForSingleObject(stderr_ready, INFINITE);
-
-    /* Flush stderr and unset its buffer, then commit and replace stderr.
-     * This is typically a noop for Win2K/XP since services with NULL std 
-     * handles [but valid FILE *'s, oddly enough], but is required 
-     * for NT 4.0 and to use this code outside of services.
-     */
-    fflush(stderr);
-    setvbuf(stderr, NULL, _IONBF, 0);
-    _commit(2 /* stderr */);
-    fd = _open_osfhandle((long) hPipeWrite, 
-                         _O_WRONLY | _O_BINARY);
-    _dup2(fd, 2);
-    _close(fd);
-    _setmode(2, _O_BINARY);
-
-    /* hPipeWrite was _close()'ed above, and _dup2()'ed
-     * to fd 2 creating a new, inherited Win32 handle.
-     * Recover that real handle from fd 2.
-     */
-    hPipeWrite = (HANDLE)_get_osfhandle(2);
-
-    SetStdHandle(STD_ERROR_HANDLE, hPipeWrite);
-
-    /* The code above _will_ corrupt the StdHandle... 
-     * and we must do so anyways.  We set this up only
-     * after we initialized the posix stderr API.
-     */
-    ap_open_stderr_log(p);
-}
diff --git a/server/mpm/winnt/registry.c b/server/mpm/winnt/registry.c
deleted file mode 100644
index 763bd76..0000000
--- a/server/mpm/winnt/registry.c
+++ /dev/null
@@ -1,489 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-/*
- * Functions to handle interacting with the Win32 registry
- */
-
-/*
- * Apache registry key structure
- *
- * Apache's registry information is stored in the HKEY_LOCAL_MACHINE
- * key, under
- *
- *  HKLM\SOFTWARE\Apache Software Foundation\Apache\version
- *
- * These keys are defined in this file. The definition of the "version" part
- * will need updating each time Apache moves from beta to non-beta or from a
- * release to a development or beta version.
- */
-
-#include "httpd.h"
-#include "http_log.h"
-#include "mpm_winnt.h"
-#include "apr_strings.h"
-
-/* bet you are looking to change revisions to roll the tarball...
- * Guess what, you already did.  Revised May '00 to save you from 
- * searching all over creation for every revision tag.
- */
-
-#define VENDOR   AP_SERVER_BASEVENDOR
-#define SOFTWARE AP_SERVER_BASEPRODUCT
-#define VERSION  AP_SERVER_BASEREVISION
-
-#define REGKEY "SOFTWARE\\" VENDOR "\\" SOFTWARE "\\" VERSION
-
-/*
- * The Windows API registry key functions don't set the last error
- * value (the windows equivalent of errno). So we need to set it
- * with SetLastError() before calling the aplog_error() function.
- * Because this is common, let's have a macro.
- */
-#define return_error(rv) return (apr_set_os_error(APR_FROM_OS_ERROR(rv)),\
-                                 APR_FROM_OS_ERROR(rv));
-
-apr_status_t ap_registry_create_key(const char *key)
-{
-    HKEY hKey = HKEY_LOCAL_MACHINE;
-    HKEY hKeyNext;
-    char keystr[MAX_PATH + 1];        
-    char *parsekey = keystr;
-    char *nextkey = keystr;
-    DWORD result;
-    int rv;
-
-    apr_cpystrn(keystr, key, sizeof(keystr) - 1);
-    	
-    /* Walk the tree, creating at each stage if necessary */
-    while (parsekey) {
-        if (nextkey = strchr(parsekey, '\\'))
-            *(nextkey++) = '\0';
-
-        rv = RegCreateKeyEx(hKey,
-			    parsekey,    /* subkey */
-			    0,	         /* reserved */
-			    NULL,        /* class */
-			    REG_OPTION_NON_VOLATILE,
-			    KEY_WRITE,
-			    NULL,
-			    &hKeyNext,
-			    &result);
-
-    	/* Close the old key */
-        if (hKey != HKEY_LOCAL_MACHINE)
-	    RegCloseKey(hKey);
-        hKey = hKeyNext;
-        
-        if (rv != ERROR_SUCCESS)
-	    break;
-
-        parsekey = nextkey;
-    }
-
-    if (hKey != HKEY_LOCAL_MACHINE)
-        RegCloseKey(hKey);
-
-    return_error(rv);
-}
-
-apr_status_t ap_registry_delete_key(const char *key)
-{
-    apr_status_t rv;
-    HKEY hKey;
-    int nSize = 0;
-    char tempkey[MAX_PATH + 1];
-    char *parsekey;
-
-    apr_cpystrn(tempkey, key, sizeof(parsekey) - 1);
-    parsekey = strrchr(tempkey, '\\');
-    
-    if (parsekey) {
-        *(parsekey++) = '\0';
-        rv = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
-                          tempkey,
-		          0,
-		          KEY_WRITE,
-		          &hKey);
-
-        if (rv != ERROR_SUCCESS)
-            return_error(rv);
-    }
-    else {
-        parsekey = tempkey;
-        hKey = HKEY_LOCAL_MACHINE;
-    }
-    
-    rv = RegDeleteKey(hKey, key);
-
-    if (hKey != HKEY_LOCAL_MACHINE)
-        RegCloseKey(hKey);
-
-    return_error(rv);
-}
-
-/* Clean up a way over complicated process.
- *
- * The return value is APR_SUCCESS, APR_ENOENT, APR_NOTFOUND, or the OS error
- */
-
-apr_status_t ap_registry_get_value(apr_pool_t *p, const char *key, const char *name, char **ppValue)
-{
-    apr_status_t rv;
-    HKEY hKey;
-    int nSize = 0;
-
-    rv = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
-                      key,
-		      0,
-		      KEY_READ,
-		      &hKey);
-
-    if (rv != ERROR_SUCCESS)
-        return_error(rv);
-
-    /* Find the size required for the data by passing NULL as the buffer
-     * pointer. On return nSize will contain the size required for the
-     * buffer if the return value is ERROR_SUCCESS.
-     */
-    rv = RegQueryValueEx(hKey, 
-			 name,		/* key name */
-			 NULL,		/* reserved */
-			 NULL,		/* type */
-			 NULL,		/* for value */
-			 &nSize);		/* for size of "value" */
-
-    if (rv != ERROR_SUCCESS)
-	return_error(rv);
-
-    *ppValue = apr_palloc(p, nSize);
-    rv = RegQueryValueEx(hKey, 
-			 name,		/* key name */
-			 NULL,		/* reserved */
-			 NULL,		/* type */
-			 *ppValue,      /* for value */
-			 &nSize);	/* for size of "value" */
-
-    RegCloseKey(hKey);
-
-    return_error(rv);
-}
-
-apr_status_t ap_registry_get_array(apr_pool_t *p, const char *key, const char *name, apr_array_header_t **parray)
-{
-    char *pValue;
-    char *tmp;
-    char **newelem;
-    apr_status_t rv;
-    HKEY hKey;
-    int nSize = 0;
-
-    rv = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
-                      key,
-		      0,
-		      KEY_READ,
-		      &hKey);
-
-    if (rv != ERROR_SUCCESS)
-        return_error(rv);
-
-    /* Find the size required for the data by passing NULL as the buffer
-     * pointer. On return nSize will contain the size required for the
-     * buffer if the return value is ERROR_SUCCESS.
-     */
-    rv = RegQueryValueEx(hKey, 
-			 name,		/* key name */
-			 NULL,		/* reserved */
-			 NULL,		/* type */
-			 NULL,		/* for value */
-			 &nSize);		/* for size of "value" */
-
-    if (rv != ERROR_SUCCESS) {
-	return_error(rv);
-    }
-    else 
-    {
-        pValue = apr_palloc(p, nSize);
-        rv = RegQueryValueEx(hKey, 
-			     name,		/* key name */
-			     NULL,		/* reserved */
-			     NULL,		/* type */
-			     pValue,        /* for value */
-			     &nSize);	/* for size of "value" */
-
-        nSize = 1;    /* Element Count */
-        tmp = pValue;
-        while (tmp[0] || tmp[1])
-        {
-            if (!tmp[0])
-                ++nSize;
-            ++tmp;
-        }
-    
-        *parray = apr_array_make(p, nSize, sizeof(char *));
-        tmp = pValue;
-        newelem = (char **) apr_array_push(*parray);
-        *newelem = tmp;
-        while (tmp[0] || tmp[1])
-        {
-            if (!tmp[0]) {
-                newelem = (char **) apr_array_push(*parray);
-                *newelem = tmp + 1;
-            }
-            ++tmp;
-        }
-    }    
-    
-    RegCloseKey(hKey);
-
-    return_error(rv);
-}
-
-/*
- * ap_registry_store_key_value() stores a value name and value under the
- * Apache registry key. If the Apache key does not exist it is created
- * first. This function is intended to be called from a wrapper function
- * in this file to set particular data values, such as 
- * ap_registry_set_server_root() below.
- *
- * Returns 0 if the value name and data was stored successfully, or
- * returns -1 if the Apache key does not exist (since we try to create 
- * this key, this should never happen), or -4 if any other error occurred
- * (these values are consistent with ap_registry_get_key_value()).
- * If the return value is negative then the error will already have been
- * logged via aplog_error().
- */
-
-apr_status_t ap_registry_store_value(const char *key, const char *name, const char *value)
-{
-    long rv;
-    HKEY hKey;
-
-    rv = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
-		      key,
-		      0,
-	 	      KEY_WRITE,
-		      &hKey);
-
-    if (rv == ERROR_FILE_NOT_FOUND) 
-    {
-	rv = ap_registry_create_key(key);
-
-        if (rv != APR_SUCCESS)
-	    return_error(rv);
-	
-	rv = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
-		          key,
-		          0,
-	 	          KEY_WRITE,
-		          &hKey);
-    }
-
-    if (rv != ERROR_SUCCESS)
-        return_error(rv);
-
-    /* Now set the value and data */
-    rv = RegSetValueEx(hKey, 
-                       name,	/* value key name */
-		       0,	/* reserved */
-		       REG_SZ,	/* type */
-		       value,	/* value data */
-		       (DWORD) strlen(value) + 1); /* for size of "value" */
-
-    if (rv == ERROR_SUCCESS) {
-	ap_log_error(APLOG_MARK,APLOG_INFO|APLOG_NOERRNO,rv,NULL,
-	    "Registry stored HKLM\\" REGKEY "\\%s value %s", key, value);
-    }
-
-    /* Make sure we close the key even if there was an error storing
-     * the data
-     */
-    RegCloseKey(hKey);
-    
-    return_error(rv);
-}
-
-apr_status_t ap_registry_store_array(apr_pool_t *p,
-                                     const char *key, const char *name,
-                                     int nelts, const char * const * elts)
-{
-    int  bufsize, i;
-    char *buf, *tmp;
-    long rv;
-    HKEY hKey;
-
-    rv = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
-		      key,
-		      0,
-	 	      KEY_WRITE,
-		      &hKey);
-
-    if (rv == ERROR_FILE_NOT_FOUND) 
-    {
-	rv = ap_registry_create_key(key);
-
-        if (rv != APR_SUCCESS)
-	    return_error(rv);
-	
-	rv = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
-		          key,
-		          0,
-	 	          KEY_WRITE,
-		          &hKey);
-    }
-
-    if (rv != ERROR_SUCCESS)
-        return_error(rv);
-
-    bufsize = 1; /* For trailing second null */
-    for (i = 0; i < nelts; ++i)
-    {
-        bufsize += strlen(elts[i]) + 1;
-    }
-    if (!nelts) 
-        ++bufsize;
-
-    buf = apr_palloc(p, bufsize);
-    tmp = buf;
-    for (i = 0; i < nelts; ++i)
-    {
-        strcpy(tmp, elts[i]);
-        tmp += strlen(elts[i]) + 1;
-    }
-    if (!nelts) 
-        (*tmp++) = '\0';
-    *tmp = '\0'; /* Trailing second null */
-
-    /* Now set the value and data */
-    rv = RegSetValueEx(hKey, 
-                       name,	     /* value key name */
-		       0,	     /* reserved */
-		       REG_MULTI_SZ, /* type */
-		       buf,	     /* value data */
-		       (DWORD) bufsize); /* for size of "value" */
-
-    if (rv == ERROR_SUCCESS) {
-	ap_log_error(APLOG_MARK,APLOG_INFO|APLOG_NOERRNO,rv,NULL,
-	    "Registry stored HKLM\\" REGKEY "\\%s", key);
-    }
-
-    /* Make sure we close the key even if there was an error storing
-     * the data
-     */
-    RegCloseKey(hKey);
-    
-    return_error(rv);
-}
-
-/* A key or value that does not exist is _not_ an error while deleting. */
-
-apr_status_t ap_registry_delete_value(const char *key, const char *name)
-{
-    apr_status_t rv;
-    HKEY hKey;
-    
-    rv = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
-                      key,
-		      0,
-		      KEY_WRITE,
-		      &hKey);
-
-    if (rv == ERROR_FILE_NOT_FOUND)
-        return APR_SUCCESS;
-    
-    if (rv != ERROR_SUCCESS)
-        return_error(rv);
-
-    rv = RegDeleteValue(hKey, name);
-
-    if (rv == ERROR_FILE_NOT_FOUND)
-        rv = APR_SUCCESS;
-    
-    RegCloseKey(hKey);
-    return_error(rv);
-}
-
-/*
- * Get the server root from the registry into 'dir' which is
- * size bytes long. Returns 0 if the server root was found
- * or if the serverroot key does not exist (in which case
- * dir will contain an empty string), or -1 if there was
- * an error getting the key.
- */
-apr_status_t ap_registry_get_server_root(apr_pool_t *p, char **buf)
-{
-    apr_status_t rv;
-
-    rv = ap_registry_get_value(p, REGKEY, "ServerRoot", buf);
-    if (rv) 
-        *buf = NULL;
-
-    return rv;
-}
-
-
-/*
- * Sets the serverroot value within the registry. Returns 0 on success
- * or -1 on error. If -1 is return the error will already have been
- * logged via aplog_error().
- */
-
-apr_status_t ap_registry_set_server_root(char *dir)
-{
-    return ap_registry_store_value(REGKEY, "ServerRoot", dir);
-}
diff --git a/server/mpm/winnt/service.c b/server/mpm/winnt/service.c
deleted file mode 100644
index 0e6ca29..0000000
--- a/server/mpm/winnt/service.c
+++ /dev/null
@@ -1,1268 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-/* This module ALONE requires the window message API from user.h 
- * and the default APR include of windows.h will omit it, so
- * preload the API symbols now...
- */
-
-#define CORE_PRIVATE 
-#define _WINUSER_
-
-#include "httpd.h"
-#include "http_log.h"
-#include "mpm_winnt.h"
-#include "apr_strings.h"
-#include "apr_lib.h"
-
-#ifdef NOUSER
-#undef NOUSER
-#endif
-#undef _WINUSER_
-#include <winuser.h>
-
-static char *mpm_service_name = NULL;
-static char *mpm_display_name = NULL;
-
-static struct
-{
-    HANDLE mpm_thread;       /* primary thread handle of the apache server */
-    HANDLE service_thread;   /* thread service/monitor handle */
-    DWORD  service_thread_id;/* thread service/monitor ID */
-    HANDLE service_init;     /* controller thread init mutex */
-    HANDLE service_term;     /* NT service thread kill signal */
-    SERVICE_STATUS ssStatus;
-    SERVICE_STATUS_HANDLE hServiceStatus;
-} globdat;
-
-static int ReportStatusToSCMgr(int currentState, int exitCode, int waitHint);
-
-/* The service configuration's is stored under the following trees:
- *
- * HKLM\System\CurrentControlSet\Services\[service name]
- *
- *     \DisplayName
- *     \ImagePath
- *     \Parameters\ConfigArgs
- *
- * For Win9x, the launch service command is stored under:
- *
- * HKLM\Software\Microsoft\Windows\CurrentVersion\RunServices\[service name]
- */
-
-
-/* exit() for Win32 is macro mapped (horrible, we agree) that allows us 
- * to catch the non-zero conditions and inform the console process that
- * the application died, and hang on to the console a bit longer.
- *
- * The macro only maps for http_main.c and other sources that include
- * the service.h header, so we best assume it's an error to exit from
- * _any_ other module.
- *
- * If real_exit_code is reset to 0, it will not be set or trigger this
- * behavior on exit.  All service and child processes are expected to
- * reset this flag to zero to avoid undesireable side effects.
- */
-int real_exit_code = 1;
-
-void hold_console_open_on_error(void)
-{
-    HANDLE hConIn;
-    HANDLE hConErr;
-    DWORD result;
-    time_t start;
-    time_t remains;
-    char *msg = "Note the errors or messages above, "
-                "and press the <ESC> key to exit.  ";
-    CONSOLE_SCREEN_BUFFER_INFO coninfo;
-    INPUT_RECORD in;
-    char count[16];
-    
-    if (!real_exit_code)
-        return;
-    hConIn = GetStdHandle(STD_INPUT_HANDLE);
-    hConErr = GetStdHandle(STD_ERROR_HANDLE);
-    if ((hConIn == INVALID_HANDLE_VALUE) || (hConErr == INVALID_HANDLE_VALUE))
-        return;
-    if (!WriteConsole(hConErr, msg, strlen(msg), &result, NULL) || !result)
-        return;
-    if (!GetConsoleScreenBufferInfo(hConErr, &coninfo))
-        return;
-    if (!SetConsoleMode(hConIn, ENABLE_MOUSE_INPUT | 0x80))
-        return;
-        
-    start = time(NULL);
-    do
-    {
-        while (PeekConsoleInput(hConIn, &in, 1, &result) && result)
-        {
-            if (!ReadConsoleInput(hConIn, &in, 1, &result) || !result)
-                return;
-            if ((in.EventType == KEY_EVENT) && in.Event.KeyEvent.bKeyDown 
-                    && (in.Event.KeyEvent.uChar.AsciiChar == 27))
-                return;
-            if (in.EventType == MOUSE_EVENT 
-                    && (in.Event.MouseEvent.dwEventFlags == DOUBLE_CLICK))
-                return;
-        }
-        remains = ((start + 30) - time(NULL)); 
-        sprintf (count, "%d...", remains);
-        if (!SetConsoleCursorPosition(hConErr, coninfo.dwCursorPosition))
-            return;
-        if (!WriteConsole(hConErr, count, strlen(count), &result, NULL) 
-                || !result)
-            return;
-    }
-    while ((remains > 0) && WaitForSingleObject(hConIn, 1000) != WAIT_FAILED);
-}
-
-static BOOL  die_on_logoff = FALSE;
-
-static LRESULT CALLBACK monitor_service_9x_proc(HWND hWnd, UINT msg, 
-                                                WPARAM wParam, LPARAM lParam)
-{
-/* This is the WndProc procedure for our invisible window.
- * When the user shuts down the system, this window is sent
- * a signal WM_ENDSESSION. We clean up by signaling Apache
- * to shut down, and idle until Apache's primary thread quits.
- */
-    if ((msg == WM_ENDSESSION) 
-            && (die_on_logoff || (lParam != ENDSESSION_LOGOFF)))
-    {
-        ap_signal_parent(SIGNAL_PARENT_SHUTDOWN);
-	if (wParam)
-            /* Don't leave this message until we are dead! */
-	    WaitForSingleObject(globdat.mpm_thread, 30000);
-        return 0;
-    }
-    return (DefWindowProc(hWnd, msg, wParam, lParam));
-}
-
-static DWORD WINAPI monitor_service_9x_thread(void *service_name)
-{
-    /* When running as a service under Windows 9x, there is no console
-     * window present, and no ConsoleCtrlHandler to call when the system 
-     * is shutdown.  If the WatchWindow thread is created with a NULL
-     * service_name argument, then the ...SystemMonitor window class is
-     * used to create the "Apache" window to watch for logoff and shutdown.
-     * If the service_name is provided, the ...ServiceMonitor window class
-     * is used to create the window named by the service_name argument,
-     * and the logoff message is ignored.
-     */
-    WNDCLASS wc;
-    HWND hwndMain;
-    MSG msg;
-    
-    wc.style         = CS_GLOBALCLASS;
-    wc.lpfnWndProc   = monitor_service_9x_proc; 
-    wc.cbClsExtra    = 0;
-    wc.cbWndExtra    = 0; 
-    wc.hInstance     = NULL;
-    wc.hIcon         = NULL;
-    wc.hCursor       = NULL;
-    wc.hbrBackground = NULL;
-    wc.lpszMenuName  = NULL;
-    if (service_name)
-	wc.lpszClassName = "ApacheWin95ServiceMonitor";
-    else
-	wc.lpszClassName = "ApacheWin95SystemMonitor";
- 
-    die_on_logoff = service_name ? FALSE : TRUE;
-
-    if (!RegisterClass(&wc)) 
-    {
-        ap_log_error(APLOG_MARK, APLOG_ERR | APLOG_STARTUP, apr_get_os_error(), 
-                     NULL, "Could not register window class for WatchWindow");
-        globdat.service_thread_id = 0;
-        return 0;
-    }
-    
-    /* Create an invisible window */
-    hwndMain = CreateWindow(wc.lpszClassName, 
-                            service_name ? (char *) service_name : "Apache",
- 	                    WS_OVERLAPPEDWINDOW & ~WS_VISIBLE, 
-                            CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, 
-                            CW_USEDEFAULT, NULL, NULL, NULL, NULL);
-                            
-    if (!hwndMain)
-    {
-        ap_log_error(APLOG_MARK, APLOG_ERR | APLOG_STARTUP, apr_get_os_error(), 
-                     NULL, "Could not create WatchWindow");
-        globdat.service_thread_id = 0;
-        return 0;
-    }
-
-    /* If we succeed, eliminate the console window.
-     * Signal the parent we are all set up, and
-     * watch the message queue while the window lives.
-     */
-    FreeConsole();
-    SetEvent(globdat.service_init);
-
-    while (GetMessage(&msg, NULL, 0, 0)) 
-    {
-        if (msg.message == WM_CLOSE)
-            DestroyWindow(hwndMain); 
-        else {
-	    TranslateMessage(&msg);
-	    DispatchMessage(&msg);
-        }
-    }
-    globdat.service_thread_id = 0;
-    return 0;
-}
-
-
-static BOOL CALLBACK console_control_handler(DWORD ctrl_type)
-{
-    switch (ctrl_type)
-    {
-        case CTRL_BREAK_EVENT:
-            fprintf(stderr, "Apache server restarting...\n");
-            ap_signal_parent(SIGNAL_PARENT_RESTART);
-            return TRUE;
-        case CTRL_C_EVENT:
-            fprintf(stderr, "Apache server interrupted...\n");
-            /* for Interrupt signals, shut down the server.
-             * Tell the system we have dealt with the signal
-             * without waiting for Apache to terminate.
-             */
-            ap_signal_parent(SIGNAL_PARENT_SHUTDOWN);
-            return TRUE;
-
-        case CTRL_CLOSE_EVENT:
-        case CTRL_LOGOFF_EVENT:
-        case CTRL_SHUTDOWN_EVENT:
-            /* for Terminate signals, shut down the server.
-             * Wait for Apache to terminate, but respond
-             * after a reasonable time to tell the system
-             * that we did attempt to shut ourself down.
-             * THESE EVENTS WILL NOT OCCUR UNDER WIN9x!
-             */
-            fprintf(stderr, "Apache server shutdown initiated...\n");
-            ap_signal_parent(SIGNAL_PARENT_SHUTDOWN);
-            Sleep(30000);
-            return TRUE;
-    }
- 
-    /* We should never get here, but this is (mostly) harmless */
-    return FALSE;
-}
-
-
-static void stop_console_handler(void)
-{
-    SetConsoleCtrlHandler(console_control_handler, FALSE);
-}
-
-
-void mpm_start_console_handler(void)
-{
-    SetConsoleCtrlHandler(console_control_handler, TRUE);
-    atexit(stop_console_handler);
-}
-
-
-/* Special situation - children of services need to mind their
- * P's & Q's and wait quietly, ignoring the mean OS signaling
- * shutdown and other horrors, to kill them gracefully...
- */
-
-static BOOL CALLBACK child_control_handler(DWORD ctrl_type)
-{
-    switch (ctrl_type)
-    {
-        case CTRL_C_EVENT:
-        case CTRL_BREAK_EVENT:
-            /* for Interrupt signals, ignore them.
-             * The system will also signal the parent process,
-             * which will terminate Apache.
-             */
-            return TRUE;
-
-        case CTRL_CLOSE_EVENT:
-        case CTRL_LOGOFF_EVENT:
-        case CTRL_SHUTDOWN_EVENT:
-            /* for Shutdown signals, ignore them, but...             .
-             * The system will also signal the parent process,
-             * which will terminate Apache, so we need to wait.
-             */
-            Sleep(30000);
-            return TRUE;
-    }
- 
-    /* We should never get here, but this is (mostly) harmless */
-    return FALSE;
-}
-
-
-static void stop_child_console_handler(void)
-{
-    SetConsoleCtrlHandler(child_control_handler, FALSE);
-}
-
-
-void mpm_start_child_console_handler(void)
-{
-    if (osver.dwPlatformId == VER_PLATFORM_WIN32_NT) {
-        FreeConsole();
-    }
-    else
-    {
-        SetConsoleCtrlHandler(child_control_handler, TRUE);
-        atexit(stop_child_console_handler);
-    }
-}
-
-
-/**********************************
-  WinNT service control management
- **********************************/
-
-static int ReportStatusToSCMgr(int currentState, int exitCode, int waitHint)
-{
-    static int checkPoint = 1;
-    int rv = APR_SUCCESS;
-    
-    if (globdat.hServiceStatus)
-    {
-        if (currentState == SERVICE_RUNNING) {
-            globdat.ssStatus.dwWaitHint = 0;
-            globdat.ssStatus.dwCheckPoint = 0;
-            globdat.ssStatus.dwControlsAccepted = SERVICE_ACCEPT_STOP;
-        }
-        else if (currentState == SERVICE_STOPPED) {
-            globdat.ssStatus.dwWaitHint = 0;
-            globdat.ssStatus.dwCheckPoint = 0;
-            if (!exitCode && globdat.ssStatus.dwCurrentState 
-                                           != SERVICE_STOP_PENDING) {
-                /* An unexpected exit?  Better to error! */
-                exitCode = 1;
-            }
-            if (exitCode) {
-                globdat.ssStatus.dwWin32ExitCode =ERROR_SERVICE_SPECIFIC_ERROR;
-                globdat.ssStatus.dwServiceSpecificExitCode = exitCode;
-            }
-        }
-        else {
-            globdat.ssStatus.dwCheckPoint = ++checkPoint;
-	    globdat.ssStatus.dwControlsAccepted = 0;
-            if(waitHint)
-                globdat.ssStatus.dwWaitHint = waitHint;
-        }
-
-        globdat.ssStatus.dwCurrentState = currentState;
-        
-        rv = SetServiceStatus(globdat.hServiceStatus, &globdat.ssStatus);
-    }
-    return(rv);
-}
-
-/* Set the service description regardless of platform.
- * We revert to set_service_description on NT/9x, the
- * very long way so any Apache management program can grab the
- * description.  This would be bad on Win2000, since it wouldn't
- * notify the service control manager of the name change.
- */
-
-/* Windows 2000 alone supports ChangeServiceConfig2 in order to
- * register our server_version string... so we need some fixups
- * to avoid binding to that function if we are on WinNT/9x.
- */
-static void set_service_description(void)
-{
-    const char *full_description;
-    SC_HANDLE schSCManager;
-    BOOL ret = 0;
-
-    /* Nothing to do if we are a console
-     */
-    if (!mpm_service_name)
-        return;
-
-    /* Time to fix up the description, upon each successful restart
-     */
-    full_description = ap_get_server_version();
-
-    if ((osver.dwPlatformId == VER_PLATFORM_WIN32_NT) 
-          && (osver.dwMajorVersion > 4) 
-          && (ChangeServiceConfig2)
-          && (schSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS)))
-    {    
-        SC_HANDLE schService = OpenService(schSCManager, mpm_service_name,
-                                               SERVICE_ALL_ACCESS);
-        if (schService) {
-            /* Cast is necessary, ChangeServiceConfig2 handles multiple
-             * object types, some volatile, some not.
-             */
-            if (ChangeServiceConfig2(schService,
-                                     1 /* SERVICE_CONFIG_DESCRIPTION */,
-                                     (LPVOID) &full_description)) {
-                full_description = NULL;
-            }
-            CloseServiceHandle(schService);
-        }
-        CloseServiceHandle(schSCManager);
-    }
-
-    if (full_description) 
-    {
-        char szPath[MAX_PATH];
-        HKEY hkey;
-
-        /* Create/Find the Service key that Monitor Applications iterate */
-        apr_snprintf(szPath, sizeof(szPath), 
-                     "SYSTEM\\CurrentControlSet\\Services\\%s", 
-                     mpm_service_name);
-        if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, szPath, 0, KEY_SET_VALUE, &hkey) 
-                != ERROR_SUCCESS) {
-            return;
-        }
-
-        /* Attempt to set the Description value for our service */
-        RegSetValueEx(hkey, "Description", 0, REG_SZ,  
-                      (unsigned char *) full_description, 
-                      strlen(full_description) + 1);
-        RegCloseKey(hkey);
-    }
-}
-
-/* handle the SCM's ControlService() callbacks to our service */
-
-static VOID WINAPI service_nt_ctrl(DWORD dwCtrlCode)
-{
-    if (dwCtrlCode == SERVICE_CONTROL_STOP)
-    {
-        ap_signal_parent(SIGNAL_PARENT_SHUTDOWN);
-        ReportStatusToSCMgr(SERVICE_STOP_PENDING, NO_ERROR, 30000);
-        return;
-    }
-    if (dwCtrlCode == SERVICE_APACHE_RESTART)
-    {
-        ap_signal_parent(SIGNAL_PARENT_RESTART);
-        ReportStatusToSCMgr(SERVICE_START_PENDING, NO_ERROR, 30000);
-        return;
-    }
-    
-    ReportStatusToSCMgr(globdat.ssStatus.dwCurrentState, NO_ERROR, 0);            
-}
-
-
-/* service_nt_main_fn is outside of the call stack and outside of the
- * primary server thread... so now we _really_ need a placeholder!
- * The winnt_rewrite_args has created and shared mpm_new_argv with us.
- */
-extern apr_array_header_t *mpm_new_argv;
-
-static void __stdcall service_nt_main_fn(DWORD argc, LPTSTR *argv)
-{
-    const char *ignored;
-
-    /* args and service names live in the same pool */
-    mpm_service_set_name(mpm_new_argv->pool, &ignored, argv[0]);
-
-    memset(&globdat.ssStatus, 0, sizeof(globdat.ssStatus));
-    globdat.ssStatus.dwServiceType = SERVICE_WIN32_OWN_PROCESS;
-    globdat.ssStatus.dwCurrentState = SERVICE_START_PENDING;
-    globdat.ssStatus.dwCheckPoint = 1;
-
-    if (!(globdat.hServiceStatus = RegisterServiceCtrlHandler(argv[0], service_nt_ctrl)))
-    {
-        ap_log_error(APLOG_MARK, APLOG_ERR | APLOG_STARTUP, apr_get_os_error(), 
-                     NULL, "Failure registering service handler");
-        return;
-    }
-
-    /* Report status, no errors, and buy 3 more seconds */
-    ReportStatusToSCMgr(SERVICE_START_PENDING, NO_ERROR, 30000);
-
-    /* We need to append all the command arguments passed via StartService() 
-     * to our running service... which just got here via the SCM...
-     * but we hvae no interest in argv[0] for the mpm_new_argv list.
-     */
-    if (argc > 1) 
-    {
-        char **cmb_data;
-
-        mpm_new_argv->nalloc = mpm_new_argv->nelts + argc - 1;
-        cmb_data = malloc(mpm_new_argv->nalloc * sizeof(const char *));
-
-        /* mpm_new_argv remains first (of lower significance) */
-        memcpy (cmb_data, mpm_new_argv->elts, 
-                mpm_new_argv->elt_size * mpm_new_argv->nelts);
-        
-        /* Service args follow from StartService() invocation */
-        memcpy (cmb_data + mpm_new_argv->nelts, argv + 1, 
-                mpm_new_argv->elt_size * (argc - 1));
-        
-        /* The replacement arg list is complete */
-        mpm_new_argv->elts = (char *)cmb_data;
-        mpm_new_argv->nelts = mpm_new_argv->nalloc;
-    }
-
-    /* Let the main thread continue now... but hang on to the
-     * signal_monitor event so we can take further action
-     */
-    SetEvent(globdat.service_init);
-
-    WaitForSingleObject(globdat.service_term, INFINITE);
-}
-
-
-DWORD WINAPI service_nt_dispatch_thread(LPVOID nada)
-{
-    apr_status_t rv = APR_SUCCESS;
-
-    SERVICE_TABLE_ENTRY dispatchTable[] =
-    {
-        { "", service_nt_main_fn },
-        { NULL, NULL }
-    };
-
-    if (!StartServiceCtrlDispatcher(dispatchTable))
-    {
-        /* This is a genuine failure of the SCM. */
-        rv = apr_get_os_error();
-        ap_log_error(APLOG_MARK, APLOG_ERR | APLOG_STARTUP, rv, NULL,
-                     "Error starting service control dispatcher");
-    }
-
-    return (rv);
-}
-
-
-apr_status_t mpm_service_set_name(apr_pool_t *p, const char **display_name, 
-                                  const char *set_name)
-{
-    char key_name[MAX_PATH];
-    apr_status_t rv;
-
-    /* ### Needs improvement, on Win2K the user can _easily_ 
-     * change the display name to a string that doesn't reflect 
-     * the internal service name + whitespace!
-     */
-    mpm_service_name = apr_palloc(p, strlen(set_name) + 1);
-    apr_collapse_spaces((char*) mpm_service_name, set_name);
-    apr_snprintf(key_name, sizeof(key_name), SERVICECONFIG, mpm_service_name);
-    rv = ap_registry_get_value(p, key_name, "DisplayName", &mpm_display_name);
-    if (rv != APR_SUCCESS) {
-        /* Take the given literal name if there is no service entry */
-        mpm_display_name = apr_pstrdup(p, set_name);
-    }
-    *display_name = mpm_display_name;
-    return rv;
-}
-
-
-apr_status_t mpm_merge_service_args(apr_pool_t *p, 
-                                   apr_array_header_t *args, 
-                                   int fixed_args)
-{
-    apr_array_header_t *svc_args = NULL;
-    char conf_key[MAX_PATH];
-    char **cmb_data;
-    apr_status_t rv;
-
-    apr_snprintf(conf_key, sizeof(conf_key), SERVICEPARAMS, mpm_service_name);
-    rv = ap_registry_get_array(p, conf_key, "ConfigArgs", &svc_args);
-    if (rv != APR_SUCCESS) {
-        if (rv == ERROR_FILE_NOT_FOUND) {
-            ap_log_error(APLOG_MARK, APLOG_INFO|APLOG_NOERRNO, 0, NULL,
-                         "No ConfigArgs registered for %s, perhaps "
-                         "this service is not installed?", 
-                         mpm_service_name);
-            return APR_SUCCESS;
-        }
-        else
-            return (rv);        
-    }
-
-    if (!svc_args || svc_args->nelts == 0) {
-        return (APR_SUCCESS);
-    }
-
-    /* Now we have the mpm_service_name arg, and the mpm_runservice_nt()
-     * call appended the arguments passed by StartService(), so it's  
-     * time to _prepend_ the default arguments for the server from 
-     * the service's default arguments (all others override them)...
-     */
-    args->nalloc = args->nelts + svc_args->nelts;
-    cmb_data = malloc(args->nalloc * sizeof(const char *));
-
-    /* First three args (argv[0], -f, path) remain first */
-    memcpy(cmb_data, args->elts, args->elt_size * fixed_args);
-    
-    /* Service args follow from service registry array */
-    memcpy(cmb_data + fixed_args, svc_args->elts, 
-           svc_args->elt_size * svc_args->nelts);
-    
-    /* Remaining new args follow  */
-    memcpy(cmb_data + fixed_args + svc_args->nelts,
-           (const char **)args->elts + fixed_args, 
-           args->elt_size * (args->nelts - fixed_args));
-    
-    args->elts = (char *)cmb_data;
-    args->nelts = args->nalloc;
-
-    return APR_SUCCESS;
-}
-
-
-void service_stopped(void)
-{
-    /* Still have a thread & window to clean up, so signal now */
-    if (globdat.service_thread)
-    {
-        if (osver.dwPlatformId == VER_PLATFORM_WIN32_NT)
-        {
-            /* Stop logging to the event log */
-            mpm_nt_eventlog_stderr_flush();
-
-            /* Cause the service_nt_main_fn to complete */
-            ReleaseMutex(globdat.service_term);
-
-            ReportStatusToSCMgr(SERVICE_STOPPED, // service state
-                                NO_ERROR,        // exit code
-                                0);              // wait hint
-        }
-        else /* osver.dwPlatformId != VER_PLATFORM_WIN32_NT */
-        {
-            RegisterServiceProcess(0, 0);
-            PostThreadMessage(globdat.service_thread_id, WM_CLOSE, 0, 0);
-        }
-
-        WaitForSingleObject(globdat.service_thread, 5000);
-        CloseHandle(globdat.service_thread);
-    }
-}
-
-
-apr_status_t mpm_service_to_start(const char **display_name, apr_pool_t *p)
-{
-    HANDLE hProc = GetCurrentProcess();
-    HANDLE hThread = GetCurrentThread();
-    HANDLE waitfor[2];
-
-     /* GetCurrentThread returns a psuedo-handle, we need
-      * a real handle for another thread to wait upon.
-      */
-    if (!DuplicateHandle(hProc, hThread, hProc, &(globdat.mpm_thread),
-                         0, FALSE, DUPLICATE_SAME_ACCESS)) {
-        return APR_ENOTHREAD;
-    }
-    
-    if (osver.dwPlatformId == VER_PLATFORM_WIN32_NT)
-    {
-        mpm_nt_eventlog_stderr_open(mpm_display_name, p);
-
-        globdat.service_init = CreateEvent(NULL, FALSE, FALSE, NULL);
-        globdat.service_term = CreateMutex(NULL, TRUE, NULL);
-        if (!globdat.service_init || !globdat.service_term) {
-             return APR_EGENERAL;
-        }
-
-        globdat.service_thread = CreateThread(NULL, 0, service_nt_dispatch_thread, 
-                                              NULL, 0, &globdat.service_thread_id);
-    }
-    else /* osver.dwPlatformId != VER_PLATFORM_WIN32_NT */
-    {
-        if (!RegisterServiceProcess(0, 1)) 
-            return GetLastError();
-
-        globdat.service_init = CreateEvent(NULL, FALSE, FALSE, NULL);
-        if (!globdat.service_init) {
-            return APR_EGENERAL;
-        }
-
-        globdat.service_thread = CreateThread(NULL, 0, monitor_service_9x_thread, 
-                                              (LPVOID) mpm_service_name, 0,
-                                              &globdat.service_thread_id);
-    }
-
-    if (!globdat.service_thread) {
-        return APR_ENOTHREAD;
-    }
-
-    waitfor[0] = globdat.service_init;
-    waitfor[1] = globdat.service_thread;
-
-    /* Wait for controlling thread init or termination */
-    if (WaitForMultipleObjects(2, waitfor, FALSE, 10000) != WAIT_OBJECT_0) {
-        return APR_ENOTHREAD;
-    }
-
-    atexit(service_stopped);
-    *display_name = mpm_display_name; 
-    return APR_SUCCESS;
-}
-
-
-apr_status_t mpm_service_started(void)
-{
-    set_service_description();
-    if (osver.dwPlatformId == VER_PLATFORM_WIN32_NT)
-    {
-        ReportStatusToSCMgr(SERVICE_RUNNING,    // service state
-                            NO_ERROR,           // exit code
-                            0);                 // wait hint
-    }
-    return APR_SUCCESS;
-}
-
-
-void mpm_service_stopping(void)
-{
-    if (osver.dwPlatformId == VER_PLATFORM_WIN32_NT)
-        ReportStatusToSCMgr(SERVICE_STOP_PENDING, // service state
-                            NO_ERROR,             // exit code
-                            30000);               // wait hint
-}
-
-
-apr_status_t mpm_service_install(apr_pool_t *ptemp, int argc, 
-                                 const char * const * argv)
-{
-    char key_name[MAX_PATH];
-    char exe_path[MAX_PATH];
-    char *launch_cmd;
-    apr_status_t(rv);
-    
-    fprintf(stderr,"Installing the %s service\n", mpm_display_name);
-
-    if (GetModuleFileName(NULL, exe_path, sizeof(exe_path)) == 0)
-    {
-        apr_status_t rv = apr_get_os_error();
-        ap_log_error(APLOG_MARK, APLOG_ERR | APLOG_STARTUP, rv, NULL,
-                     "GetModuleFileName failed");
-        return rv;
-    }
-
-    if (osver.dwPlatformId == VER_PLATFORM_WIN32_NT)
-    {
-        SC_HANDLE   schService;
-        SC_HANDLE   schSCManager;
-    
-        // TODO: Determine the minimum permissions required for security
-        schSCManager = OpenSCManager(NULL, NULL, /* local, default database */
-                                     SC_MANAGER_ALL_ACCESS);
-        if (!schSCManager) {
-            rv = apr_get_os_error();
-            ap_log_error(APLOG_MARK, APLOG_ERR | APLOG_STARTUP, rv, NULL,
-                         "Failed to open the WinNT service manager");
-            return (rv);
-        }
-
-        launch_cmd = apr_psprintf(ptemp, "\"%s\" -k runservice", exe_path);
-
-        /* RPCSS is the Remote Procedure Call (RPC) Locator required for DCOM 
-         * communication pipes.  I am far from convinced we should add this to
-         * the default service dependencies, but be warned that future apache 
-         * modules or ISAPI dll's may depend on it.
-         */
-        schService = CreateService(schSCManager,         // SCManager database
-                                   mpm_service_name,     // name of service
-                                   mpm_display_name,     // name to display
-                                   SERVICE_ALL_ACCESS,   // access required
-                                   SERVICE_WIN32_OWN_PROCESS,  // service type
-                                   SERVICE_AUTO_START,   // start type
-                                   SERVICE_ERROR_NORMAL, // error control type
-                                   launch_cmd,           // service's binary
-                                   NULL,                 // no load svc group
-                                   NULL,                 // no tag identifier
-                                   "Tcpip\0Afd\0",       // dependencies
-                                   NULL,                 // use SYSTEM account
-                                   NULL);                // no password
-
-        if (!schService) 
-        {
-            rv = apr_get_os_error();
-            ap_log_error(APLOG_MARK, APLOG_ERR | APLOG_STARTUP, rv, NULL, 
-                         "Failed to create WinNT Service Profile");
-            CloseServiceHandle(schSCManager);
-            return (rv);
-        }
-
-        CloseServiceHandle(schService);
-        CloseServiceHandle(schSCManager);
-    }
-    else /* osver.dwPlatformId != VER_PLATFORM_WIN32_NT */
-    {
-        /* Store the launch command in the registry */
-        launch_cmd = apr_psprintf(ptemp, "\"%s\" -n %s -k runservice", 
-                                 exe_path, mpm_service_name);
-        rv = ap_registry_store_value(SERVICECONFIG9X, mpm_service_name, launch_cmd);
-        if (rv != APR_SUCCESS) {
-            ap_log_error(APLOG_MARK, APLOG_ERR | APLOG_STARTUP, rv, NULL, 
-                         "%s: Failed to add the RunServices registry entry.", 
-                         mpm_display_name);
-            return (rv);
-        }
-
-        apr_snprintf(key_name, sizeof(key_name), SERVICECONFIG, mpm_service_name);
-        rv = ap_registry_store_value(key_name, "ImagePath", launch_cmd);
-        if (rv != APR_SUCCESS) {
-            ap_log_error(APLOG_MARK, APLOG_ERR | APLOG_STARTUP, rv, NULL, 
-                         "%s: Failed to store ImagePath in the registry.", 
-                         mpm_display_name);
-            return (rv);
-        }
-        rv = ap_registry_store_value(key_name, "DisplayName", mpm_display_name);
-        if (rv != APR_SUCCESS) {
-            ap_log_error(APLOG_MARK, APLOG_ERR | APLOG_STARTUP, rv, NULL, 
-                         "%s: Failed to store DisplayName in the registry.", 
-                         mpm_display_name);
-            return (rv);
-        }
-    }
-
-    set_service_description();
-
-    /* For both WinNT & Win9x store the service ConfigArgs in the registry...
-     */
-    apr_snprintf(key_name, sizeof(key_name), SERVICEPARAMS, mpm_service_name);
-    rv = ap_registry_store_array(ptemp, key_name, "ConfigArgs", argc, argv);
-    if (rv != APR_SUCCESS) {
-        ap_log_error(APLOG_MARK, APLOG_ERR | APLOG_STARTUP, rv, NULL, 
-                     "%s: Failed to store the ConfigArgs in the registry.", 
-                     mpm_display_name);
-        return (rv);
-    }
-    fprintf(stderr,"The %s service is successfully installed.\n", mpm_display_name);
-    return APR_SUCCESS;
-}
-
-
-apr_status_t mpm_service_uninstall(void)
-{
-    char key_name[MAX_PATH];
-    apr_status_t rv;
-
-    if (osver.dwPlatformId == VER_PLATFORM_WIN32_NT)
-    {
-        SC_HANDLE schService;
-        SC_HANDLE schSCManager;
-
-        fprintf(stderr,"Removing the %s service\n", mpm_display_name);
-
-        // TODO: Determine the minimum permissions required for security
-        schSCManager = OpenSCManager(NULL, NULL, /* local, default database */
-                                     SC_MANAGER_ALL_ACCESS);
-        if (!schSCManager) {
-            rv = apr_get_os_error();
-            ap_log_error(APLOG_MARK, APLOG_ERR | APLOG_STARTUP, rv, NULL,
-                         "Failed to open the WinNT service manager.");
-            return (rv);
-        }
-        
-        schService = OpenService(schSCManager, mpm_service_name, SERVICE_ALL_ACCESS);
-
-        if (!schService) {
-           rv = apr_get_os_error();
-           ap_log_error(APLOG_MARK, APLOG_ERR | APLOG_STARTUP, rv, NULL,
-			"%s: OpenService failed", mpm_display_name);
-           return (rv);
-        }
-        
-        /* assure the service is stopped before continuing
-         *
-         * This may be out of order... we might not be able to be
-         * granted all access if the service is running anyway.
-         *
-         * And do we want to make it *this easy* for them
-         * to uninstall their service unintentionally?
-         */
-        // ap_stop_service(schService);
-
-        if (DeleteService(schService) == 0) {
-            rv = apr_get_os_error();
-	    ap_log_error(APLOG_MARK, APLOG_ERR | APLOG_STARTUP, rv, NULL,
-                         "%s: Failed to delete the service.", mpm_display_name);
-            return (rv);
-        }
-        
-        CloseServiceHandle(schService);        
-        CloseServiceHandle(schSCManager);
-    }
-    else /* osver.dwPlatformId != VER_PLATFORM_WIN32_NT */
-    {
-        fprintf(stderr,"Removing the %s service\n", mpm_display_name);
-
-        /* TODO: assure the service is stopped before continuing */
-
-        if (ap_registry_delete_value(SERVICECONFIG9X, mpm_service_name)) {
-            rv = apr_get_os_error();
-	    ap_log_error(APLOG_MARK, APLOG_ERR | APLOG_STARTUP, rv, NULL,
-                         "%s: Failed to remove the RunServices registry "
-                         "entry.", mpm_display_name);
-            return (rv);
-        }
-        
-        /* we blast Services/us, not just the Services/us/Parameters branch */
-        apr_snprintf(key_name, sizeof(key_name), SERVICECONFIG, mpm_service_name);
-        if (ap_registry_delete_key(key_name)) 
-        {
-            rv = apr_get_os_error();
-            ap_log_error(APLOG_MARK, APLOG_ERR | APLOG_STARTUP, rv, NULL,
-                         "%s: Failed to remove the service config from the "
-                         "registry.", mpm_display_name);
-            return (rv);
-        }
-    }
-    fprintf(stderr,"The %s service has been removed successfully.\n", mpm_display_name);
-    return APR_SUCCESS;
-}
-
-
-/* signal_service_transition is a simple thunk to signal the service
- * and monitor its successful transition.  If the signal passed is 0,
- * then the caller is assumed to already have performed some service 
- * operation to be monitored (such as StartService), and no actual
- * ControlService signal is sent.
- */
-
-static int signal_service_transition(SC_HANDLE schService, DWORD signal, DWORD pending, DWORD complete)
-{
-    if (signal && !ControlService(schService, signal, &globdat.ssStatus)) 
-        return FALSE;
-    
-    do {
-        Sleep(1000);    
-        if (!QueryServiceStatus(schService, &globdat.ssStatus))
-            return FALSE;
-    } while (globdat.ssStatus.dwCurrentState == pending);
-        
-    return (globdat.ssStatus.dwCurrentState == complete);
-}
-
-
-apr_status_t mpm_service_start(apr_pool_t *ptemp, int argc, 
-                               const char * const * argv)
-{
-    apr_status_t rv;
-    
-    fprintf(stderr,"Starting the %s service\n", mpm_display_name);
-
-    if (osver.dwPlatformId == VER_PLATFORM_WIN32_NT)
-    {
-        char **start_argv;
-        SC_HANDLE   schService;
-        SC_HANDLE   schSCManager;
-
-        // TODO: Determine the minimum permissions required for security
-        schSCManager = OpenSCManager(NULL, NULL, /* local, default database */
-                                     SC_MANAGER_ALL_ACCESS);
-        if (!schSCManager) {
-            rv = apr_get_os_error();
-            ap_log_error(APLOG_MARK, APLOG_ERR | APLOG_STARTUP, rv, NULL,
-                         "Failed to open the WinNT service manager");
-            return (rv);
-        }
-
-        schService = OpenService(schSCManager, mpm_service_name, 
-                                 SERVICE_START | SERVICE_QUERY_STATUS);
-        if (!schService) {
-            rv = apr_get_os_error();
-            ap_log_error(APLOG_MARK, APLOG_ERR | APLOG_STARTUP, rv, NULL,
-                         "%s: Failed to open the service.", mpm_display_name);
-            CloseServiceHandle(schSCManager);
-            return (rv);
-        }
-
-        if (QueryServiceStatus(schService, &globdat.ssStatus)
-            && (globdat.ssStatus.dwCurrentState == SERVICE_RUNNING)) {
-            ap_log_error(APLOG_MARK, APLOG_ERR | APLOG_STARTUP, 0, NULL,
-                         "Service %s is already started!", mpm_display_name);
-            CloseServiceHandle(schService);
-            CloseServiceHandle(schSCManager);
-            return 0;
-        }
-        
-        argc += 1;
-        start_argv = malloc(argc * sizeof(const char **));
-        start_argv[0] = mpm_service_name;
-        if (argc > 1)
-            memcpy(start_argv + 1, argv, (argc - 1) * sizeof(const char **));
-        
-        rv = APR_EINIT;
-        if (StartService(schService, argc, start_argv)
-            && signal_service_transition(schService, 0, /* test only */
-                                         SERVICE_START_PENDING, 
-                                         SERVICE_RUNNING))
-                rv = APR_SUCCESS;
-
-        if (rv != APR_SUCCESS)
-            rv = apr_get_os_error();
-        
-        CloseServiceHandle(schService);
-        CloseServiceHandle(schSCManager);
-    }
-    else /* osver.dwPlatformId != VER_PLATFORM_WIN32_NT */
-    {
-        STARTUPINFO si;           /* Filled in prior to call to CreateProcess */
-        PROCESS_INFORMATION pi;   /* filled in on call to CreateProcess */
-        char exe_path[MAX_PATH];
-        char exe_cmd[MAX_PATH * 4];
-        char *next_arg;
-        int i;
-
-        /* Locate the active top level window named service_name
-         * provided the class is ApacheWin95ServiceMonitor
-         */
-        if (FindWindow("ApacheWin95ServiceMonitor", mpm_service_name)) {
-            ap_log_error(APLOG_MARK, APLOG_ERR | APLOG_STARTUP, 0, NULL,
-                         "Service %s is already started!", mpm_display_name);
-            return 0;
-        }
-
-        /* This may not appear intuitive, but Win9x will not allow a process
-         * to detach from the console without releasing the entire console.
-         * Ergo, we must spawn a new process for the service to get back our
-         * console window.
-         * The config is pre-flighted, so there should be no danger of failure.
-         */
-        
-        if (GetModuleFileName(NULL, exe_path, sizeof(exe_path)) == 0)
-        {
-            apr_status_t rv = apr_get_os_error();
-            ap_log_error(APLOG_MARK, APLOG_ERR | APLOG_STARTUP, rv, NULL,
-                         "GetModuleFileName failed");
-            return rv;
-        }
-        
-        apr_snprintf(exe_cmd, sizeof(exe_cmd), 
-                     "\"%s\" -n %s -k runservice", 
-                     exe_path, mpm_service_name);  
-        next_arg = strchr(exe_cmd, '\0');
-        for (i = 0; i < argc; ++i) {
-            apr_snprintf(next_arg, sizeof(exe_cmd) - (next_arg - exe_cmd), 
-                         " \"%s\"", argv[i]);
-            next_arg = strchr(exe_cmd, '\0');
-        }
-        
-        memset(&si, 0, sizeof(si));
-        memset(&pi, 0, sizeof(pi));
-        si.cb = sizeof(si);
-        si.dwFlags     = STARTF_USESHOWWINDOW;
-        si.wShowWindow = SW_HIDE;   /* This might be redundant */
-        
-        rv = APR_EINIT;
-        if (CreateProcess(NULL, exe_cmd, NULL, NULL, FALSE, 
-                           DETACHED_PROCESS, /* Creation flags */
-                           NULL, NULL, &si, &pi)) 
-        {
-            DWORD code;
-            while (GetExitCodeProcess(pi.hProcess, &code) == STILL_ACTIVE) {
-                if (FindWindow("ApacheWin95ServiceMonitor", mpm_service_name)) {
-                    rv = APR_SUCCESS;
-                    break;
-                }
-                Sleep (1000);
-            }
-        }
-        
-        if (rv != APR_SUCCESS)
-            rv = apr_get_os_error();
-        
-        CloseHandle(pi.hProcess);
-        CloseHandle(pi.hThread);
-    }    
-
-    if (rv == APR_SUCCESS)
-        fprintf(stderr,"The %s service is running.\n", mpm_display_name);
-    else
-        ap_log_error(APLOG_MARK, APLOG_CRIT, rv, NULL,
-                     "%s: Failed to start the service process.",
-                     mpm_display_name);
-        
-    return rv;
-}
-
-
-/* signal is zero to stop, non-zero for restart */
-
-void mpm_signal_service(apr_pool_t *ptemp, int signal)
-{
-    int success = FALSE;
-    
-    if (osver.dwPlatformId == VER_PLATFORM_WIN32_NT) 
-    {
-        SC_HANDLE   schService;
-        SC_HANDLE   schSCManager;
-
-        schSCManager = OpenSCManager(NULL, NULL, // default machine & database
-                                     SC_MANAGER_ALL_ACCESS);
-        
-        if (!schSCManager) {
-            ap_log_error(APLOG_MARK, APLOG_ERR | APLOG_STARTUP, apr_get_os_error(), NULL,
-                         "Failed to open the NT Service Manager");
-            return;
-        }
-        
-        schService = OpenService(schSCManager, mpm_service_name, 
-                                 SERVICE_ALL_ACCESS);
-
-        if (schService == NULL) {
-            /* Could not open the service */
-            ap_log_error(APLOG_MARK, APLOG_ERR | APLOG_STARTUP, apr_get_os_error(), NULL,
-                         "Failed to open the %s Service", mpm_display_name);
-            CloseServiceHandle(schSCManager);
-            return;
-        }
-        
-        if (!QueryServiceStatus(schService, &globdat.ssStatus)) {
-            ap_log_error(APLOG_MARK, APLOG_ERR | APLOG_STARTUP, apr_get_os_error(), NULL,
-                         "Query of Service %s failed", mpm_display_name);
-            CloseServiceHandle(schService);
-            CloseServiceHandle(schSCManager);
-            return;
-        }
-
-        if (!signal && (globdat.ssStatus.dwCurrentState == SERVICE_STOPPED)) {
-            fprintf(stderr,"The %s service is not started.\n", mpm_display_name);
-            CloseServiceHandle(schService);
-            CloseServiceHandle(schSCManager);
-            return;
-        }
-        
-        fprintf(stderr,"The %s service is %s.\n", mpm_display_name, 
-               signal ? "restarting" : "stopping");
-
-        if (!signal)
-            success = signal_service_transition(schService, 
-                                                SERVICE_CONTROL_STOP, 
-                                                SERVICE_STOP_PENDING, 
-                                                SERVICE_STOPPED);
-        else if (globdat.ssStatus.dwCurrentState == SERVICE_STOPPED) {
-            mpm_service_start(ptemp, 0, NULL);
-            CloseServiceHandle(schService);
-            CloseServiceHandle(schSCManager);
-            return;
-        }
-        else
-            success = signal_service_transition(schService, 
-                                                SERVICE_APACHE_RESTART, 
-                                                SERVICE_START_PENDING, 
-                                                SERVICE_RUNNING);
-
-        CloseServiceHandle(schService);
-        CloseServiceHandle(schSCManager);
-    }
-    else /* !isWindowsNT() */
-    {
-        DWORD       service_pid;
-        HANDLE      hwnd;
-        char prefix[20];
-        /* Locate the active top level window named service_name
-         * provided the class is ApacheWin95ServiceMonitor
-         */
-        hwnd = FindWindow("ApacheWin95ServiceMonitor", mpm_service_name);
-        if (hwnd && GetWindowThreadProcessId(hwnd, &service_pid))
-            globdat.ssStatus.dwCurrentState = SERVICE_RUNNING;
-        else
-        {
-            globdat.ssStatus.dwCurrentState = SERVICE_STOPPED;
-            if (!signal) {
-                fprintf(stderr,"The %s service is not started.\n", mpm_display_name);
-                return;
-            }
-        }
-
-        fprintf(stderr,"The %s service is %s.\n", mpm_display_name, 
-               signal ? "restarting" : "stopping");
-
-        apr_snprintf(prefix, sizeof(prefix), "ap%ld", (long)service_pid);
-        setup_signal_names(prefix);
-
-        if (!signal) 
-        {
-            int ticks = 60;
-            ap_signal_parent(SIGNAL_PARENT_SHUTDOWN);
-            while (--ticks)
-            {
-                if (!IsWindow(hwnd)) {
-                    success = TRUE;
-                    break;
-                }
-                Sleep(1000);
-            }
-        }
-        else /* !stop */
-        {   
-            /* TODO: Aught to add a little test to the restart logic, and
-             * store the restart counter in the window's user dword.
-             * Then we can hang on and report a successful restart.  But
-             * that's a project for another day.
-             */
-            if (globdat.ssStatus.dwCurrentState == SERVICE_STOPPED) {
-                mpm_service_start(ptemp, 0, NULL);
-                return;
-            }
-            else {
-                success = TRUE;
-                ap_signal_parent(SIGNAL_PARENT_RESTART);
-            }
-        }
-    }
-
-    if (success)
-        fprintf(stderr,"The %s service has %s.\n", mpm_display_name, 
-               signal ? "restarted" : "stopped");
-    else
-        fprintf(stderr,"Failed to %s the %s service.\n", 
-               signal ? "restart" : "stop", mpm_display_name);
-}
diff --git a/server/mpm/worker/.cvsignore b/server/mpm/worker/.cvsignore
deleted file mode 100644
index 84df257..0000000
--- a/server/mpm/worker/.cvsignore
+++ /dev/null
@@ -1,5 +0,0 @@
-.deps
-.libs
-*.lo
-*.la
-Makefile
diff --git a/server/mpm/worker/Makefile.in b/server/mpm/worker/Makefile.in
deleted file mode 100644
index b45b848..0000000
--- a/server/mpm/worker/Makefile.in
+++ /dev/null
@@ -1,5 +0,0 @@
-
-LTLIBRARY_NAME    = libworker.la
-LTLIBRARY_SOURCES = worker.c fdqueue.c pod.c
-
-include $(top_srcdir)/build/ltlib.mk
diff --git a/server/mpm/worker/config5.m4 b/server/mpm/worker/config5.m4
deleted file mode 100644
index 52ab50e..0000000
--- a/server/mpm/worker/config5.m4
+++ /dev/null
@@ -1,5 +0,0 @@
-dnl ## XXX - Need a more thorough check of the proper flags to use
-
-if test "$MPM_NAME" = "worker" ; then
-    APACHE_FAST_OUTPUT(server/mpm/$MPM_NAME/Makefile)
-fi
diff --git a/server/mpm/worker/fdqueue.c b/server/mpm/worker/fdqueue.c
deleted file mode 100644
index af27e83..0000000
--- a/server/mpm/worker/fdqueue.c
+++ /dev/null
@@ -1,238 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-#include "fdqueue.h"
-
-/**
- * Detects when the fd_queue_t is full. This utility function is expected
- * to be called from within critical sections, and is not threadsafe.
- */
-#define ap_queue_full(queue) ((queue)->tail == (queue)->bounds)
-
-/**
- * Detects when the fd_queue_t is empty. This utility function is expected
- * to be called from within critical sections, and is not threadsafe.
- */
-#define ap_queue_empty(queue) ((queue)->tail == 0)
-
-/**
- * Callback routine that is called to destroy this
- * fd_queue_t when it's pool is destroyed.
- */
-static apr_status_t ap_queue_destroy(void *data) 
-{
-    fd_queue_t *queue = data;
-
-    /* Ignore errors here, we can't do anything about them anyway.
-     * XXX: We should at least try to signal an error here, it is
-     * indicative of a programmer error. -aaron */
-    apr_thread_cond_destroy(queue->not_empty);
-    apr_thread_cond_destroy(queue->not_full);
-    apr_thread_mutex_destroy(queue->one_big_mutex);
-
-    return APR_SUCCESS;
-}
-
-/**
- * Initialize the fd_queue_t.
- */
-apr_status_t ap_queue_init(fd_queue_t *queue, int queue_capacity, apr_pool_t *a)
-{
-    int i;
-    apr_status_t rv;
-
-    if ((rv = apr_thread_mutex_create(&queue->one_big_mutex,
-                                      APR_THREAD_MUTEX_DEFAULT, a)) != APR_SUCCESS) {
-        return rv;
-    }
-    if ((rv = apr_thread_cond_create(&queue->not_empty, a)) != APR_SUCCESS) {
-        return rv;
-    }
-    if ((rv = apr_thread_cond_create(&queue->not_full, a)) != APR_SUCCESS) {
-        return rv;
-    }
-
-    queue->tail = 0;
-    queue->data = apr_palloc(a, queue_capacity * sizeof(fd_queue_elem_t));
-    queue->bounds = queue_capacity;
-
-    /* Set all the sockets in the queue to NULL */
-    for (i = 0; i < queue_capacity; ++i)
-        queue->data[i].sd = NULL;
-
-    queue->recycled_pools = apr_palloc(a,
-                                       queue_capacity * sizeof(apr_pool_t *));
-    queue->num_recycled = 0;
-
-    apr_pool_cleanup_register(a, queue, ap_queue_destroy, apr_pool_cleanup_null);
-
-    return APR_SUCCESS;
-}
-
-/**
- * Push a new socket onto the queue. Blocks if the queue is full. Once
- * the push operation has completed, it signals other threads waiting
- * in apr_queue_pop() that they may continue consuming sockets.
- */
-apr_status_t ap_queue_push(fd_queue_t *queue, apr_socket_t *sd, apr_pool_t *p,
-                           apr_pool_t **recycled_pool)
-{
-    fd_queue_elem_t *elem;
-    apr_status_t rv;
-
-    *recycled_pool = NULL;
-    if ((rv = apr_thread_mutex_lock(queue->one_big_mutex)) != APR_SUCCESS) {
-        return rv;
-    }
-
-    while (ap_queue_full(queue)) {
-        apr_thread_cond_wait(queue->not_full, queue->one_big_mutex);
-    }
-
-    elem = &queue->data[queue->tail++];
-    elem->sd = sd;
-    elem->p = p;
-
-    if (queue->num_recycled != 0) {
-        *recycled_pool = queue->recycled_pools[--queue->num_recycled];
-    }
-
-    apr_thread_cond_signal(queue->not_empty);
-
-    if ((rv = apr_thread_mutex_unlock(queue->one_big_mutex)) != APR_SUCCESS) {
-        return rv;
-    }
-
-    return APR_SUCCESS;
-}
-
-/**
- * Retrieves the next available socket from the queue. If there are no
- * sockets available, it will block until one becomes available.
- * Once retrieved, the socket is placed into the address specified by
- * 'sd'.
- */
-apr_status_t ap_queue_pop(fd_queue_t *queue, apr_socket_t **sd, apr_pool_t **p,
-                          apr_pool_t *recycled_pool) 
-{
-    fd_queue_elem_t *elem;
-    apr_status_t rv;
-
-    if ((rv = apr_thread_mutex_lock(queue->one_big_mutex)) != APR_SUCCESS) {
-        if (recycled_pool) {
-            apr_pool_destroy(recycled_pool);
-        }
-        return rv;
-    }
-
-    if (recycled_pool) {
-        if (queue->num_recycled < queue->bounds) {
-            queue->recycled_pools[queue->num_recycled++] = recycled_pool;
-        }
-        else {
-            apr_pool_destroy(recycled_pool);
-        }
-    }
-
-    /* Keep waiting until we wake up and find that the queue is not empty. */
-    if (ap_queue_empty(queue)) {
-        apr_thread_cond_wait(queue->not_empty, queue->one_big_mutex);
-        /* If we wake up and it's still empty, then we were interrupted */
-        if (ap_queue_empty(queue)) {
-            if ((rv = apr_thread_mutex_unlock(queue->one_big_mutex)) != APR_SUCCESS) {
-                return rv;
-            }
-            return APR_EINTR;
-        }
-    } 
-    
-    elem = &queue->data[--queue->tail];
-    *sd = elem->sd;
-    *p = elem->p;
-    elem->sd = NULL;
-    elem->p = NULL;
-
-    /* signal not_full if we were full before this pop */
-    if (queue->tail == queue->bounds - 1) {
-        apr_thread_cond_signal(queue->not_full);
-    }
-
-    if ((rv = apr_thread_mutex_unlock(queue->one_big_mutex)) != APR_SUCCESS) {
-        return rv;
-    }
-
-    return APR_SUCCESS;
-}
-
-apr_status_t ap_queue_interrupt_all(fd_queue_t *queue)
-{
-    apr_status_t rv;
-    
-    if ((rv = apr_thread_mutex_lock(queue->one_big_mutex)) != APR_SUCCESS) {
-        return rv;
-    }
-    apr_thread_cond_broadcast(queue->not_empty);
-    /* We shouldn't have multiple threads sitting in not_full, but
-     * broadcast just in case. */
-    apr_thread_cond_broadcast(queue->not_full);
-    if ((rv = apr_thread_mutex_unlock(queue->one_big_mutex)) != APR_SUCCESS) {
-        return rv;
-    }
-    return APR_SUCCESS;
-}
-
diff --git a/server/mpm/worker/fdqueue.h b/server/mpm/worker/fdqueue.h
deleted file mode 100644
index 0608813..0000000
--- a/server/mpm/worker/fdqueue.h
+++ /dev/null
@@ -1,101 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-#ifndef FDQUEUE_H
-#define FDQUEUE_H
-#include "httpd.h"
-#include <stdlib.h>
-#if APR_HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#include <apr_thread_mutex.h>
-#include <apr_thread_cond.h>
-#include <sys/types.h>
-#if APR_HAVE_SYS_SOCKET_H
-#include <sys/socket.h>
-#endif
-#include <apr_errno.h>
-
-struct fd_queue_elem_t {
-    apr_socket_t      *sd;
-    apr_pool_t        *p;
-};
-typedef struct fd_queue_elem_t fd_queue_elem_t;
-
-struct fd_queue_t {
-    int                 tail;
-    fd_queue_elem_t    *data;
-    int                 bounds;
-    int                 blanks;
-    apr_thread_mutex_t *one_big_mutex;
-    apr_thread_cond_t  *not_empty;
-    apr_thread_cond_t  *not_full;
-    int                 cancel_state;
-    apr_pool_t        **recycled_pools;
-    int                 num_recycled;
-};
-typedef struct fd_queue_t fd_queue_t;
-
-apr_status_t ap_queue_init(fd_queue_t *queue, int queue_capacity, apr_pool_t *a);
-apr_status_t ap_queue_push(fd_queue_t *queue, apr_socket_t *sd, apr_pool_t *p,
-                           apr_pool_t **recycled_pool);
-apr_status_t ap_queue_pop(fd_queue_t *queue, apr_socket_t **sd, apr_pool_t **p,
-                          apr_pool_t *recycled_pool);
-apr_status_t ap_queue_interrupt_all(fd_queue_t *queue);
-
-#endif /* FDQUEUE_H */
diff --git a/server/mpm/worker/mpm.h b/server/mpm/worker/mpm.h
deleted file mode 100644
index baa63c4..0000000
--- a/server/mpm/worker/mpm.h
+++ /dev/null
@@ -1,89 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-#include "scoreboard.h"
-#include "unixd.h"
-
-#ifndef APACHE_MPM_WORKER_H
-#define APACHE_MPM_WORKER_H
-
-#define WORKER_MPM
-
-#define MPM_NAME "Worker"
-
-#define AP_MPM_WANT_RECLAIM_CHILD_PROCESSES
-#define AP_MPM_WANT_WAIT_OR_TIMEOUT
-#define AP_MPM_WANT_PROCESS_CHILD_STATUS
-#define AP_MPM_WANT_SET_PIDFILE
-#define AP_MPM_WANT_SET_SCOREBOARD
-#define AP_MPM_WANT_SET_LOCKFILE
-#define AP_MPM_WANT_SET_MAX_REQUESTS
-#define AP_MPM_WANT_SET_COREDUMPDIR
-#define AP_MPM_WANT_SET_ACCEPT_LOCK_MECH
-#define AP_MPM_DISABLE_NAGLE_ACCEPTED_SOCK
-
-#define MPM_SYNC_CHILD_TABLE() (ap_sync_scoreboard_image())
-#define MPM_CHILD_PID(i) (ap_scoreboard_image->parent[i].pid)
-#define MPM_NOTE_CHILD_KILLED(i) (MPM_CHILD_PID(i) = 0)
-#define MPM_ACCEPT_FUNC unixd_accept
-
-extern int ap_threads_per_child;
-extern int ap_max_daemons_limit;
-extern server_rec *ap_server_conf;
-extern char ap_coredump_dir[MAX_STRING_LEN];
-
-#endif /* APACHE_MPM_WORKER_H */
diff --git a/server/mpm/worker/mpm_default.h b/server/mpm/worker/mpm_default.h
deleted file mode 100644
index b24fd17..0000000
--- a/server/mpm/worker/mpm_default.h
+++ /dev/null
@@ -1,111 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-#ifndef APACHE_MPM_DEFAULT_H
-#define APACHE_MPM_DEFAULT_H
-
-/* Number of servers to spawn off by default --- also, if fewer than
- * this free when the caretaker checks, it will spawn more.
- */
-#ifndef DEFAULT_START_DAEMON
-#define DEFAULT_START_DAEMON 3
-#endif
-
-/* Maximum number of *free* server processes --- more than this, and
- * they will die off.
- */
-
-#ifndef DEFAULT_MAX_FREE_DAEMON
-#define DEFAULT_MAX_FREE_DAEMON 10
-#endif
-
-/* Minimum --- fewer than this, and more will be created */
-
-#ifndef DEFAULT_MIN_FREE_DAEMON
-#define DEFAULT_MIN_FREE_DAEMON 3
-#endif
-
-#ifndef DEFAULT_THREADS_PER_CHILD
-#define DEFAULT_THREADS_PER_CHILD 25
-#endif
-
-/* File used for accept locking, when we use a file */
-#ifndef DEFAULT_LOCKFILE
-#define DEFAULT_LOCKFILE "logs/accept.lock"
-#endif
-
-/* Where the main/parent process's pid is logged */
-#ifndef DEFAULT_PIDLOG
-#define DEFAULT_PIDLOG "logs/httpd.pid"
-#endif
-
-/*
- * Interval, in microseconds, between scoreboard maintenance.
- */
-#ifndef SCOREBOARD_MAINTENANCE_INTERVAL
-#define SCOREBOARD_MAINTENANCE_INTERVAL 1000000
-#endif
-
-/* Number of requests to try to handle in a single process.  If <= 0,
- * the children don't die off.
- */
-#ifndef DEFAULT_MAX_REQUESTS_PER_CHILD
-#define DEFAULT_MAX_REQUESTS_PER_CHILD 10000
-#endif
-
-#endif /* AP_MPM_DEFAULT_H */
diff --git a/server/mpm/worker/pod.c b/server/mpm/worker/pod.c
deleted file mode 100644
index c20672a..0000000
--- a/server/mpm/worker/pod.c
+++ /dev/null
@@ -1,235 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-#include "apr.h"
-#include "apr_strings.h"
-#include "apr_lock.h"
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-#include "httpd.h"
-#include "http_config.h"
-#include "http_log.h"
-#include "http_main.h"
-#include "mpm.h"
-#include "pod.h"
-#include "mpm_common.h"
-#include "ap_mpm.h"
-#include "ap_listen.h"
-#include "mpm_default.h"
-
-AP_DECLARE(apr_status_t) ap_mpm_pod_open(apr_pool_t *p, ap_pod_t **pod)
-{
-    apr_status_t rv;
-
-    *pod = apr_palloc(p, sizeof(**pod));
-    rv = apr_file_pipe_create(&((*pod)->pod_in), &((*pod)->pod_out), p);
-    if (rv != APR_SUCCESS) {
-        return rv;
-    }
-/*
-    apr_file_pipe_timeout_set((*pod)->pod_in, 0);
-*/
-    (*pod)->p = p;
-    
-    apr_sockaddr_info_get(&(*pod)->sa, ap_listeners->bind_addr->hostname,
-                          APR_UNSPEC, ap_listeners->bind_addr->port, 0, p);
-
-    return APR_SUCCESS;
-}
-
-AP_DECLARE(int) ap_mpm_pod_check(ap_pod_t *pod)
-{
-    char c;
-    apr_size_t len = 1;
-    apr_status_t rv;
-
-    rv = apr_file_read(pod->pod_in, &c, &len);
-
-    if ((rv == APR_SUCCESS) && (len ==1)) {
-        if (c == RESTART_CHAR) {
-            return AP_RESTART;
-        }
-        if (c == GRACEFUL_CHAR) {
-            return AP_GRACEFUL;
-        }
-    }
-    else if (rv != APR_SUCCESS) {
-        return rv;
-    }
-    return AP_NORESTART;
-}
-
-AP_DECLARE(apr_status_t) ap_mpm_pod_close(ap_pod_t *pod)
-{
-    apr_status_t rv;
-
-    rv = apr_file_close(pod->pod_out);
-    if (rv != APR_SUCCESS) {
-        return rv;
-    }
-
-    rv = apr_file_close(pod->pod_in);
-    if (rv != APR_SUCCESS) {
-        return rv;
-    }
-    return rv;
-}
-
-static apr_status_t pod_signal_internal(ap_pod_t *pod, int graceful)
-{
-    apr_status_t rv;
-    char char_of_death = graceful ? GRACEFUL_CHAR : RESTART_CHAR;
-    apr_size_t one = 1;
-
-    do {
-        rv = apr_file_write(pod->pod_out, &char_of_death, &one);
-    } while (APR_STATUS_IS_EINTR(rv));
-    if (rv != APR_SUCCESS) {
-        ap_log_error(APLOG_MARK, APLOG_WARNING, rv, ap_server_conf,
-                     "write pipe_of_death");
-    }
-    return rv;
-}
-
-/* This function connects to the server, then immediately closes the connection.
- * This permits the MPM to skip the poll when there is only one listening
- * socket, because it provides a alternate way to unblock an accept() when
- * the pod is used.
- */
-
-static apr_status_t dummy_connection(ap_pod_t *pod)
-{
-    apr_status_t rv;
-    apr_socket_t *sock;
-    apr_pool_t *p;
-    
-    /* create a temporary pool for the socket.  pconf stays around too long */
-    rv = apr_pool_create(&p, pod->p);
-    if (rv != APR_SUCCESS) {
-        return rv;
-    }
-    
-    rv = apr_socket_create(&sock, pod->sa->family, SOCK_STREAM, p);
-    if (rv != APR_SUCCESS) {
-        ap_log_error(APLOG_MARK, APLOG_WARNING, rv, ap_server_conf,
-                     "get socket to connect to listener");
-        return rv;
-    }
-    /* on some platforms (e.g., FreeBSD), the kernel won't accept many
-     * queued connections before it starts blocking local connects...
-     * we need to keep from blocking too long and instead return an error,
-     * because the MPM won't want to hold up a graceful restart for a
-     * long time
-     */
-    rv = apr_setsocketopt(sock, APR_SO_TIMEOUT, 3 * APR_USEC_PER_SEC);
-    if (rv != APR_SUCCESS) {
-        ap_log_error(APLOG_MARK, APLOG_WARNING, rv, ap_server_conf,
-                     "set timeout on socket to connect to listener");
-        apr_socket_close(sock);
-        return rv;
-    }
-    
-    rv = apr_connect(sock, pod->sa);    
-    if (rv != APR_SUCCESS) {
-        int log_level = APLOG_WARNING;
-
-        if (APR_STATUS_IS_TIMEUP(rv)) {
-            /* probably some server processes bailed out already and there 
-             * is nobody around to call accept and clear out the kernel 
-             * connection queue; usually this is not worth logging
-             */
-            log_level = APLOG_DEBUG;
-        }
-	
-        ap_log_error(APLOG_MARK, log_level, rv, ap_server_conf,
-                     "connect to listener");
-    }
-
-    apr_socket_close(sock);
-    apr_pool_destroy(p);
-
-    return rv;
-}
-
-AP_DECLARE(apr_status_t) ap_mpm_pod_signal(ap_pod_t *pod, int graceful)
-{
-    apr_status_t rv;
-
-    rv = pod_signal_internal(pod, graceful);
-    if (rv != APR_SUCCESS) {
-        return rv;
-    }
-    return dummy_connection(pod);
-}
-
-AP_DECLARE(void) ap_mpm_pod_killpg(ap_pod_t *pod, int num, int graceful)
-{
-    int i;
-    apr_status_t rv = APR_SUCCESS;
-
-    for (i = 0; i < num && rv == APR_SUCCESS; i++) {
-        rv = pod_signal_internal(pod, graceful);
-    }
-    if (rv == APR_SUCCESS) {
-        for (i = 0; i < num && rv == APR_SUCCESS; i++) {
-             rv = dummy_connection(pod);
-        }
-    }
-}
-
diff --git a/server/mpm/worker/pod.h b/server/mpm/worker/pod.h
deleted file mode 100644
index dea317c..0000000
--- a/server/mpm/worker/pod.h
+++ /dev/null
@@ -1,94 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-#include "apr.h"
-#include "apr_strings.h"
-#include "apr_lock.h"
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-#include "httpd.h"
-#include "http_config.h"
-#include "http_log.h"
-#include "http_main.h"
-#include "mpm.h"
-#include "mpm_common.h"
-#include "ap_mpm.h"
-#include "ap_listen.h"
-#include "mpm_default.h"
-
-#define RESTART_CHAR '$'
-#define GRACEFUL_CHAR '!'
-
-#define AP_RESTART  0
-#define AP_GRACEFUL 1
-
-typedef struct ap_pod_t ap_pod_t;
-
-struct ap_pod_t {
-    apr_file_t *pod_in;
-    apr_file_t *pod_out;
-    apr_pool_t *p;
-    apr_sockaddr_t *sa;
-};
-
-AP_DECLARE(apr_status_t) ap_mpm_pod_open(apr_pool_t *p, ap_pod_t **pod);
-AP_DECLARE(int) ap_mpm_pod_check(ap_pod_t *pod);
-AP_DECLARE(apr_status_t) ap_mpm_pod_close(ap_pod_t *pod);
-AP_DECLARE(apr_status_t) ap_mpm_pod_signal(ap_pod_t *pod, int graceful);
-AP_DECLARE(void) ap_mpm_pod_killpg(ap_pod_t *pod, int num, int graceful);
diff --git a/server/mpm/worker/worker.c b/server/mpm/worker/worker.c
deleted file mode 100644
index d199c91..0000000
--- a/server/mpm/worker/worker.c
+++ /dev/null
@@ -1,1903 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-/* The purpose of this MPM is to fix the design flaws in the threaded
- * model.  Because of the way that pthreads and mutex locks interact,
- * it is basically impossible to cleanly gracefully shutdown a child
- * process if multiple threads are all blocked in accept.  This model
- * fixes those problems.
- */
-
-#include "apr.h"
-#include "apr_portable.h"
-#include "apr_strings.h"
-#include "apr_file_io.h"
-#include "apr_thread_proc.h"
-#include "apr_signal.h"
-#include "apr_thread_mutex.h"
-#include "apr_proc_mutex.h"
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-#if APR_HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#if APR_HAVE_SYS_SOCKET_H
-#include <sys/socket.h>
-#endif
-#if APR_HAVE_SYS_WAIT_H
-#include <sys/wait.h> 
-#endif
-#ifdef HAVE_SYS_PROCESSOR_H
-#include <sys/processor.h> /* for bindprocessor() */
-#endif
-
-#if !APR_HAS_THREADS
-#error The Worker MPM requires APR threads, but they are unavailable.
-#endif
-
-#define CORE_PRIVATE 
- 
-#include "ap_config.h"
-#include "httpd.h" 
-#include "http_main.h" 
-#include "http_log.h" 
-#include "http_config.h"        /* for read_config */ 
-#include "http_core.h"          /* for get_remote_host */ 
-#include "http_connection.h"
-#include "ap_mpm.h"
-#include "pod.h"
-#include "mpm_common.h"
-#include "ap_listen.h"
-#include "scoreboard.h" 
-#include "fdqueue.h"
-#include "mpm_default.h"
-
-#include <signal.h>
-#include <limits.h>             /* for INT_MAX */
-
-/* Limit on the total --- clients will be locked out if more servers than
- * this are needed.  It is intended solely to keep the server from crashing
- * when things get out of hand.
- *
- * We keep a hard maximum number of servers, for two reasons --- first off,
- * in case something goes seriously wrong, we want to stop the fork bomb
- * short of actually crashing the machine we're running on by filling some
- * kernel table.  Secondly, it keeps the size of the scoreboard file small
- * enough that we can read the whole thing without worrying too much about
- * the overhead.
- */
-#ifndef DEFAULT_SERVER_LIMIT
-#define DEFAULT_SERVER_LIMIT 16
-#endif
-
-/* Admin can't tune ServerLimit beyond MAX_SERVER_LIMIT.  We want
- * some sort of compile-time limit to help catch typos.
- */
-#ifndef MAX_SERVER_LIMIT
-#define MAX_SERVER_LIMIT 20000
-#endif
-
-/* Limit on the threads per process.  Clients will be locked out if more than
- * this  * server_limit are needed.
- *
- * We keep this for one reason it keeps the size of the scoreboard file small
- * enough that we can read the whole thing without worrying too much about
- * the overhead.
- */
-#ifndef DEFAULT_THREAD_LIMIT
-#define DEFAULT_THREAD_LIMIT 64 
-#endif
-
-/* Admin can't tune ThreadLimit beyond MAX_THREAD_LIMIT.  We want
- * some sort of compile-time limit to help catch typos.
- */
-#ifndef MAX_THREAD_LIMIT
-#define MAX_THREAD_LIMIT 20000
-#endif
-
-/*
- * Actual definitions of config globals
- */
-
-int ap_threads_per_child = 0;         /* Worker threads per child */
-static int ap_daemons_to_start = 0;
-static int min_spare_threads = 0;
-static int max_spare_threads = 0;
-static int ap_daemons_limit = 0;
-static int server_limit = DEFAULT_SERVER_LIMIT;
-static int first_server_limit;
-static int thread_limit = DEFAULT_THREAD_LIMIT;
-static int first_thread_limit;
-static int changed_limit_at_restart;
-static int dying = 0;
-static int workers_may_exit = 0;
-static int requests_this_child;
-static int num_listensocks = 0;
-static int resource_shortage = 0;
-static fd_queue_t *worker_queue;
-
-/* The structure used to pass unique initialization info to each thread */
-typedef struct {
-    int pid;
-    int tid;
-    int sd;
-} proc_info;
-
-/* Structure used to pass information to the thread responsible for 
- * creating the rest of the threads.
- */
-typedef struct {
-    apr_thread_t **threads;
-    int child_num_arg;
-    apr_threadattr_t *threadattr;
-} thread_starter;
-
-#define ID_FROM_CHILD_THREAD(c, t)    ((c * thread_limit) + t)
-
-/*
- * The max child slot ever assigned, preserved across restarts.  Necessary
- * to deal with MaxClients changes across AP_SIG_GRACEFUL restarts.  We 
- * use this value to optimize routines that have to scan the entire 
- * scoreboard.
- */
-int ap_max_daemons_limit = -1;
-
-static ap_pod_t *pod;
-
-/* *Non*-shared http_main globals... */
-
-server_rec *ap_server_conf;
-
-/* The worker MPM respects a couple of runtime flags that can aid
- * in debugging. Setting the -DNO_DETACH flag will prevent the root process
- * from detaching from its controlling terminal. Additionally, setting
- * the -DONE_PROCESS flag (which implies -DNO_DETACH) will get you the
- * child_main loop running in the process which originally started up.
- * This gives you a pretty nice debugging environment.  (You'll get a SIGHUP
- * early in standalone_main; just continue through.  This is the server
- * trying to kill off any child processes which it might have lying
- * around --- Apache doesn't keep track of their pids, it just sends
- * SIGHUP to the process group, ignoring it in the root process.
- * Continue through and you'll be fine.).
- */
-
-static int one_process = 0;
-
-#ifdef DEBUG_SIGSTOP
-int raise_sigstop_flags;
-#endif
-
-static apr_pool_t *pconf;                 /* Pool for config stuff */
-static apr_pool_t *pchild;                /* Pool for httpd child stuff */
-
-static pid_t ap_my_pid; /* Linux getpid() doesn't work except in main 
-                           thread. Use this instead */
-static pid_t parent_pid;
-/* Keep track of the number of worker threads currently active */
-static int worker_thread_count;
-static apr_thread_mutex_t *worker_thread_count_mutex;
-
-/* Locks for accept serialization */
-static apr_proc_mutex_t *accept_mutex;
-
-#ifdef SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-#define SAFE_ACCEPT(stmt) (ap_listeners->next ? (stmt) : APR_SUCCESS)
-#else
-#define SAFE_ACCEPT(stmt) (stmt)
-#endif
-
-static void signal_workers(void)
-{
-    workers_may_exit = 1;
-    /* XXX: This will happen naturally on a graceful, and we don't care 
-     * otherwise.
-    ap_queue_signal_all_wakeup(worker_queue); */
-    ap_queue_interrupt_all(worker_queue);
-}
-
-AP_DECLARE(apr_status_t) ap_mpm_query(int query_code, int *result)
-{
-    switch(query_code){
-        case AP_MPMQ_MAX_DAEMON_USED:
-            *result = ap_max_daemons_limit;
-            return APR_SUCCESS;
-        case AP_MPMQ_IS_THREADED:
-            *result = AP_MPMQ_STATIC;
-            return APR_SUCCESS;
-        case AP_MPMQ_IS_FORKED:
-            *result = AP_MPMQ_DYNAMIC;
-            return APR_SUCCESS;
-        case AP_MPMQ_HARD_LIMIT_DAEMONS:
-            *result = server_limit;
-            return APR_SUCCESS;
-        case AP_MPMQ_HARD_LIMIT_THREADS:
-            *result = thread_limit;
-            return APR_SUCCESS;
-        case AP_MPMQ_MAX_THREADS:
-            *result = ap_threads_per_child;
-            return APR_SUCCESS;
-        case AP_MPMQ_MIN_SPARE_DAEMONS:
-            *result = 0;
-            return APR_SUCCESS;
-        case AP_MPMQ_MIN_SPARE_THREADS:    
-            *result = min_spare_threads;
-            return APR_SUCCESS;
-        case AP_MPMQ_MAX_SPARE_DAEMONS:
-            *result = 0;
-            return APR_SUCCESS;
-        case AP_MPMQ_MAX_SPARE_THREADS:
-            *result = max_spare_threads;
-            return APR_SUCCESS;
-        case AP_MPMQ_MAX_REQUESTS_DAEMON:
-            *result = ap_max_requests_per_child;
-            return APR_SUCCESS;
-        case AP_MPMQ_MAX_DAEMONS:
-            *result = ap_daemons_limit;
-            return APR_SUCCESS;
-    }
-    return APR_ENOTIMPL;
-}
-
-/* a clean exit from a child with proper cleanup */ 
-static void clean_child_exit(int code) __attribute__ ((noreturn));
-static void clean_child_exit(int code)
-{
-    if (pchild) {
-        apr_pool_destroy(pchild);
-    }
-    exit(code);
-}
-
-/* handle all varieties of core dumping signals */
-static void sig_coredump(int sig)
-{
-    apr_filepath_set(ap_coredump_dir, pconf);
-    apr_signal(sig, SIG_DFL);
-    if (ap_my_pid == parent_pid) {
-        ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_NOTICE,
-                     0, ap_server_conf,
-                     "seg fault or similar nasty error detected "
-                     "in the parent process");
-        
-        /* XXX we can probably add some rudimentary cleanup code here,
-         * like getting rid of the pid file.  If any additional bad stuff
-         * happens, we are protected from recursive errors taking down the
-         * system since this function is no longer the signal handler   GLA
-         */
-    }
-    kill(ap_my_pid, sig);
-    /* At this point we've got sig blocked, because we're still inside
-     * the signal handler.  When we leave the signal handler it will
-     * be unblocked, and we'll take the signal... and coredump or whatever
-     * is appropriate for this particular Unix.  In addition the parent
-     * will see the real signal we received -- whereas if we called
-     * abort() here, the parent would only see SIGABRT.
-     */
-}
-
-static void just_die(int sig)
-{
-    clean_child_exit(0);
-}
-
-/*****************************************************************
- * Connection structures and accounting...
- */
-
-/* volatile just in case */
-static int volatile shutdown_pending;
-static int volatile restart_pending;
-static int volatile is_graceful;
-static volatile int child_fatal;
-ap_generation_t volatile ap_my_generation;
-
-/*
- * ap_start_shutdown() and ap_start_restart(), below, are a first stab at
- * functions to initiate shutdown or restart without relying on signals. 
- * Previously this was initiated in sig_term() and restart() signal handlers, 
- * but we want to be able to start a shutdown/restart from other sources --
- * e.g. on Win32, from the service manager. Now the service manager can
- * call ap_start_shutdown() or ap_start_restart() as appropiate.  Note that
- * these functions can also be called by the child processes, since global
- * variables are no longer used to pass on the required action to the parent.
- *
- * These should only be called from the parent process itself, since the
- * parent process will use the shutdown_pending and restart_pending variables
- * to determine whether to shutdown or restart. The child process should
- * call signal_parent() directly to tell the parent to die -- this will
- * cause neither of those variable to be set, which the parent will
- * assume means something serious is wrong (which it will be, for the
- * child to force an exit) and so do an exit anyway.
- */
-
-static void ap_start_shutdown(void)
-{
-    if (shutdown_pending == 1) {
-        /* Um, is this _probably_ not an error, if the user has
-         * tried to do a shutdown twice quickly, so we won't
-         * worry about reporting it.
-         */
-        return;
-    }
-    shutdown_pending = 1;
-}
-
-/* do a graceful restart if graceful == 1 */
-static void ap_start_restart(int graceful)
-{
-
-    if (restart_pending == 1) {
-        /* Probably not an error - don't bother reporting it */
-        return;
-    }
-    restart_pending = 1;
-    is_graceful = graceful;
-    if (is_graceful) {
-        apr_pool_cleanup_kill(pconf, NULL, ap_cleanup_scoreboard);
-    }
-}
-
-static void sig_term(int sig)
-{
-    ap_start_shutdown();
-}
-
-static void restart(int sig)
-{
-    ap_start_restart(sig == AP_SIG_GRACEFUL);
-}
-
-static void set_signals(void)
-{
-#ifndef NO_USE_SIGACTION
-    struct sigaction sa;
-
-    sigemptyset(&sa.sa_mask);
-    sa.sa_flags = 0;
-
-    if (!one_process) {
-        sa.sa_handler = sig_coredump;
-#if defined(SA_ONESHOT)
-        sa.sa_flags = SA_ONESHOT;
-#elif defined(SA_RESETHAND)
-        sa.sa_flags = SA_RESETHAND;
-#endif
-        if (sigaction(SIGSEGV, &sa, NULL) < 0)
-            ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf, 
-                         "sigaction(SIGSEGV)");
-#ifdef SIGBUS
-        if (sigaction(SIGBUS, &sa, NULL) < 0)
-            ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf, 
-                         "sigaction(SIGBUS)");
-#endif
-#ifdef SIGABORT
-        if (sigaction(SIGABORT, &sa, NULL) < 0)
-            ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf, 
-                         "sigaction(SIGABORT)");
-#endif
-#ifdef SIGABRT
-        if (sigaction(SIGABRT, &sa, NULL) < 0)
-            ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf, 
-                         "sigaction(SIGABRT)");
-#endif
-#ifdef SIGILL
-        if (sigaction(SIGILL, &sa, NULL) < 0)
-            ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf, 
-                         "sigaction(SIGILL)");
-#endif
-        sa.sa_flags = 0;
-    }
-    sa.sa_handler = sig_term;
-    if (sigaction(SIGTERM, &sa, NULL) < 0)
-        ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf, 
-                     "sigaction(SIGTERM)");
-#ifdef SIGINT
-    if (sigaction(SIGINT, &sa, NULL) < 0)
-        ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf, 
-                     "sigaction(SIGINT)");
-#endif
-#ifdef SIGXCPU
-    sa.sa_handler = SIG_DFL;
-    if (sigaction(SIGXCPU, &sa, NULL) < 0)
-        ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf, 
-                     "sigaction(SIGXCPU)");
-#endif
-#ifdef SIGXFSZ
-    sa.sa_handler = SIG_DFL;
-    if (sigaction(SIGXFSZ, &sa, NULL) < 0)
-        ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf, 
-                     "sigaction(SIGXFSZ)");
-#endif
-#ifdef SIGPIPE
-    sa.sa_handler = SIG_IGN;
-    if (sigaction(SIGPIPE, &sa, NULL) < 0)
-        ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf, 
-                     "sigaction(SIGPIPE)");
-#endif
-
-    /* we want to ignore HUPs and AP_SIG_GRACEFUL while we're busy 
-     * processing one */
-    sigaddset(&sa.sa_mask, SIGHUP);
-    sigaddset(&sa.sa_mask, AP_SIG_GRACEFUL);
-    sa.sa_handler = restart;
-    if (sigaction(SIGHUP, &sa, NULL) < 0)
-        ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf, 
-                     "sigaction(SIGHUP)");
-    if (sigaction(AP_SIG_GRACEFUL, &sa, NULL) < 0)
-        ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf, 
-                     "sigaction(" AP_SIG_GRACEFUL_STRING ")");
-#else
-    if (!one_process) {
-        apr_signal(SIGSEGV, sig_coredump);
-#ifdef SIGBUS
-        apr_signal(SIGBUS, sig_coredump);
-#endif /* SIGBUS */
-#ifdef SIGABORT
-        apr_signal(SIGABORT, sig_coredump);
-#endif /* SIGABORT */
-#ifdef SIGABRT
-        apr_signal(SIGABRT, sig_coredump);
-#endif /* SIGABRT */
-#ifdef SIGILL
-        apr_signal(SIGILL, sig_coredump);
-#endif /* SIGILL */
-#ifdef SIGXCPU
-        apr_signal(SIGXCPU, SIG_DFL);
-#endif /* SIGXCPU */
-#ifdef SIGXFSZ
-        apr_signal(SIGXFSZ, SIG_DFL);
-#endif /* SIGXFSZ */
-    }
-
-    apr_signal(SIGTERM, sig_term);
-#ifdef SIGHUP
-    apr_signal(SIGHUP, restart);
-#endif /* SIGHUP */
-#ifdef AP_SIG_GRACEFUL
-    apr_signal(AP_SIG_GRACEFUL, restart);
-#endif /* AP_SIG_GRACEFUL */
-#ifdef SIGPIPE
-    apr_signal(SIGPIPE, SIG_IGN);
-#endif /* SIGPIPE */
-
-#endif
-}
-
-/*****************************************************************
- * Here follows a long bunch of generic server bookkeeping stuff...
- */
-
-int ap_graceful_stop_signalled(void)
-    /* XXX this is really a bad confusing obsolete name
-     * maybe it should be ap_mpm_process_exiting?
-     */
-{
-    return workers_may_exit;
-}
-
-/*****************************************************************
- * Child process main loop.
- */
-
-static void process_socket(apr_pool_t *p, apr_socket_t *sock, int my_child_num,
-                           int my_thread_num)
-{
-    conn_rec *current_conn;
-    long conn_id = ID_FROM_CHILD_THREAD(my_child_num, my_thread_num);
-    int csd;
-    ap_sb_handle_t *sbh;
-
-    ap_create_sb_handle(&sbh, p, my_child_num, my_thread_num);
-    apr_os_sock_get(&csd, sock);
-
-    if (csd >= FD_SETSIZE) {
-        ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_WARNING, 0, NULL,
-                     "new file descriptor %d is too large; you probably need "
-                     "to rebuild Apache with a larger FD_SETSIZE "
-                     "(currently %d)", 
-                     csd, FD_SETSIZE);
-        apr_socket_close(sock);
-        return;
-    }
-
-    current_conn = ap_run_create_connection(p, ap_server_conf, sock, conn_id, sbh);
-    if (current_conn) {
-        ap_process_connection(current_conn, sock);
-        ap_lingering_close(current_conn);
-    }
-}
-
-/* requests_this_child has gone to zero or below.  See if the admin coded
-   "MaxRequestsPerChild 0", and keep going in that case.  Doing it this way
-   simplifies the hot path in worker_thread */
-static void check_infinite_requests(void)
-{
-    if (ap_max_requests_per_child) {
-        signal_workers();
-    }
-    else {
-        /* wow! if you're executing this code, you may have set a record.
-         * either this child process has served over 2 billion requests, or
-         * you're running a threaded 2.0 on a 16 bit machine.  
-         *
-         * I'll buy pizza and beers at Apachecon for the first person to do
-         * the former without cheating (dorking with INT_MAX, or running with
-         * uncommitted performance patches, for example).    
-         *
-         * for the latter case, you probably deserve a beer too.   Greg Ames
-         */
-            
-        requests_this_child = INT_MAX;      /* keep going */ 
-    }
-}
-
-static void *listener_thread(apr_thread_t *thd, void * dummy)
-{
-    proc_info * ti = dummy;
-    int process_slot = ti->pid;
-    int thread_slot = ti->tid;
-    apr_pool_t *tpool = apr_thread_pool_get(thd);
-    void *csd = NULL;
-    apr_pool_t *ptrans;                /* Pool for per-transaction stuff */
-    apr_pool_t *recycled_pool = NULL;
-    int n;
-    apr_pollfd_t *pollset;
-    apr_status_t rv;
-    ap_listen_rec *lr, *last_lr = ap_listeners;
-
-    free(ti);
-
-    apr_thread_mutex_lock(worker_thread_count_mutex);
-    worker_thread_count++;
-    apr_thread_mutex_unlock(worker_thread_count_mutex);
-
-    apr_poll_setup(&pollset, num_listensocks, tpool);
-    for(lr = ap_listeners ; lr != NULL ; lr = lr->next)
-        apr_poll_socket_add(pollset, lr->sd, APR_POLLIN);
-
-    /* TODO: Switch to a system where threads reuse the results from earlier
-       poll calls - manoj */
-    while (1) {
-        /* TODO: requests_this_child should be synchronized - aaron */
-        if (requests_this_child <= 0) {
-            check_infinite_requests();
-        }
-        if (workers_may_exit) break;
-
-        if ((rv = SAFE_ACCEPT(apr_proc_mutex_lock(accept_mutex)))
-            != APR_SUCCESS) {
-            int level = APLOG_EMERG;
-
-            if (ap_scoreboard_image->parent[process_slot].generation != 
-                ap_scoreboard_image->global->running_generation) {
-                level = APLOG_DEBUG; /* common to get these at restart time */
-            }
-            ap_log_error(APLOG_MARK, level, rv, ap_server_conf,
-                         "apr_proc_mutex_lock failed. Attempting to shutdown "
-                         "process gracefully.");
-            signal_workers();
-            break;                    /* skip the lock release */
-        }
-
-        if (!ap_listeners->next) {
-            /* Only one listener, so skip the poll */
-            lr = ap_listeners;
-        }
-        else {
-            while (!workers_may_exit) {
-                apr_status_t ret;
-                apr_int16_t event;
-
-                ret = apr_poll(pollset, &n, -1);
-                if (ret != APR_SUCCESS) {
-                    if (APR_STATUS_IS_EINTR(ret)) {
-                        continue;
-                    }
-
-                    /* apr_poll() will only return errors in catastrophic
-                     * circumstances. Let's try exiting gracefully, for now. */
-                    ap_log_error(APLOG_MARK, APLOG_ERR, ret, (const server_rec *)
-                                 ap_server_conf, "apr_poll: (listen)");
-                    signal_workers();
-                }
-
-                if (workers_may_exit) break;
-
-                /* find a listener */
-                lr = last_lr;
-                do {
-                    lr = lr->next;
-                    if (lr == NULL) {
-                        lr = ap_listeners;
-                    }
-                    /* XXX: Should we check for POLLERR? */
-                    apr_poll_revents_get(&event, lr->sd, pollset);
-                    if (event & APR_POLLIN) {
-                        last_lr = lr;
-                        goto got_fd;
-                    }
-                } while (lr != last_lr);
-            }
-        }
-    got_fd:
-        if (!workers_may_exit) {
-            /* create a new transaction pool for each accepted socket */
-            if (recycled_pool == NULL) {
-                apr_allocator_t *allocator;
-
-                apr_allocator_create(&allocator);
-                apr_pool_create_ex(&ptrans, NULL, NULL, allocator);
-                apr_allocator_set_owner(allocator, ptrans);
-            }
-            else {
-                ptrans = recycled_pool;
-            }
-            apr_pool_tag(ptrans, "transaction");
-            rv = lr->accept_func(&csd, lr, ptrans);
-
-            /* If we were interrupted for whatever reason, just start
-             * the main loop over again. (The worker MPM still uses
-             * signals in the one_process case.) */
-            if (APR_STATUS_IS_EINTR(rv)) {
-                continue;
-            }
-            if (rv == APR_EGENERAL) {
-                /* E[NM]FILE, ENOMEM, etc */
-                resource_shortage = 1;
-                signal_workers();
-            }
-            if ((rv = SAFE_ACCEPT(apr_proc_mutex_unlock(accept_mutex)))
-                != APR_SUCCESS) {
-                int level = APLOG_EMERG;
-
-                if (ap_scoreboard_image->parent[process_slot].generation != 
-                    ap_scoreboard_image->global->running_generation) {
-                    level = APLOG_DEBUG; /* common to get these at restart time */
-                }
-                ap_log_error(APLOG_MARK, level, rv, ap_server_conf,
-                             "apr_proc_mutex_unlock failed. Attempting to "
-                             "shutdown process gracefully.");
-                signal_workers();
-            }
-            if (csd != NULL) {
-                rv = ap_queue_push(worker_queue, csd, ptrans,
-                                   &recycled_pool);
-                if (rv) {
-                    /* trash the connection; we couldn't queue the connected
-                     * socket to a worker 
-                     */
-                    apr_socket_close(csd);
-                    ap_log_error(APLOG_MARK, APLOG_CRIT, rv, ap_server_conf,
-                                 "ap_queue_push failed");
-                }
-            }
-        }
-        else {
-            if ((rv = SAFE_ACCEPT(apr_proc_mutex_unlock(accept_mutex)))
-                != APR_SUCCESS) {
-                ap_log_error(APLOG_MARK, APLOG_EMERG, rv, ap_server_conf,
-                             "apr_proc_mutex_unlock failed. Attempting to "
-                             "shutdown process gracefully.");
-                signal_workers();
-            }
-            break;
-        }
-    }
-
-    ap_update_child_status_from_indexes(process_slot, thread_slot, 
-                                        (dying) ? SERVER_DEAD : SERVER_GRACEFUL,
-                                        (request_rec *) NULL);
-    dying = 1;
-    ap_scoreboard_image->parent[process_slot].quiescing = 1;
-    kill(ap_my_pid, SIGTERM);
-
-    apr_thread_exit(thd, APR_SUCCESS);
-    return NULL;
-}
-
-static void * APR_THREAD_FUNC worker_thread(apr_thread_t *thd, void * dummy)
-{
-    proc_info * ti = dummy;
-    int process_slot = ti->pid;
-    int thread_slot = ti->tid;
-    apr_socket_t *csd = NULL;
-    apr_pool_t *last_ptrans = NULL;
-    apr_pool_t *ptrans;                /* Pool for per-transaction stuff */
-    apr_status_t rv;
-
-    free(ti);
-
-    ap_update_child_status_from_indexes(process_slot, thread_slot, SERVER_STARTING, NULL);
-    while (!workers_may_exit) {
-        ap_update_child_status_from_indexes(process_slot, thread_slot, SERVER_READY, NULL);
-        rv = ap_queue_pop(worker_queue, &csd, &ptrans, last_ptrans);
-        last_ptrans = NULL;
-
-        /* We get APR_EINTR whenever ap_queue_pop() has been interrupted
-         * from an explicit call to ap_queue_interrupt_all(). This allows
-         * us to unblock threads stuck in ap_queue_pop() when a shutdown
-         * is pending. */
-        if (rv == APR_EINTR || !csd) {
-            continue;
-        }
-        process_socket(ptrans, csd, process_slot, thread_slot);
-        requests_this_child--; /* FIXME: should be synchronized - aaron */
-        apr_pool_clear(ptrans);
-        last_ptrans = ptrans;
-    }
-
-    ap_update_child_status_from_indexes(process_slot, thread_slot,
-        (dying) ? SERVER_DEAD : SERVER_GRACEFUL, (request_rec *) NULL);
-    apr_thread_mutex_lock(worker_thread_count_mutex);
-    worker_thread_count--;
-    apr_thread_mutex_unlock(worker_thread_count_mutex);
-
-    apr_thread_exit(thd, APR_SUCCESS);
-    return NULL;
-}
-
-static int check_signal(int signum)
-{
-    switch (signum) {
-    case SIGTERM:
-    case SIGINT:
-        return 1;
-    }
-    return 0;
-}
-
-static void * APR_THREAD_FUNC start_threads(apr_thread_t *thd, void *dummy)
-{
-    thread_starter *ts = dummy;
-    apr_thread_t **threads = ts->threads;
-    apr_threadattr_t *thread_attr = ts->threadattr;
-    int child_num_arg = ts->child_num_arg;
-    int my_child_num = child_num_arg;
-    proc_info *my_info = NULL;
-    apr_status_t rv;
-    int i = 0;
-    int threads_created = 0;
-    apr_thread_t *listener;
-
-    /* We must create the fd queues before we start up the listener
-     * and worker threads. */
-    worker_queue = apr_pcalloc(pchild, sizeof(*worker_queue));
-    rv = ap_queue_init(worker_queue, ap_threads_per_child, pchild);
-    if (rv != APR_SUCCESS) {
-        ap_log_error(APLOG_MARK, APLOG_ALERT, rv, ap_server_conf,
-                     "ap_queue_init() failed");
-        clean_child_exit(APEXIT_CHILDFATAL);
-    }
-
-    my_info = (proc_info *)malloc(sizeof(proc_info));
-    my_info->pid = my_child_num;
-    my_info->tid = i;
-    my_info->sd = 0;
-    rv = apr_thread_create(&listener, thread_attr, listener_thread,
-                           my_info, pchild);
-    if (rv != APR_SUCCESS) {
-        ap_log_error(APLOG_MARK, APLOG_ALERT, rv, ap_server_conf,
-                     "apr_thread_create: unable to create worker thread");
-        /* In case system resources are maxxed out, we don't want
-         * Apache running away with the CPU trying to fork over and
-         * over and over again if we exit.
-         * XXX Jeff doesn't see how Apache is going to try to fork again since
-         * the exit code is APEXIT_CHILDFATAL
-         */
-        apr_sleep(10 * APR_USEC_PER_SEC);
-        clean_child_exit(APEXIT_CHILDFATAL);
-    }
-    while (1) {
-        /* ap_threads_per_child does not include the listener thread */
-        for (i = 0; i < ap_threads_per_child; i++) {
-            int status = ap_scoreboard_image->servers[child_num_arg][i].status;
-
-            if (status != SERVER_GRACEFUL && status != SERVER_DEAD) {
-                continue;
-            }
-
-            my_info = (proc_info *)malloc(sizeof(proc_info));
-            if (my_info == NULL) {
-                ap_log_error(APLOG_MARK, APLOG_ALERT, errno, ap_server_conf,
-                             "malloc: out of memory");
-                clean_child_exit(APEXIT_CHILDFATAL);
-            }
-            my_info->pid = my_child_num;
-            my_info->tid = i;
-            my_info->sd = 0;
-        
-            /* We are creating threads right now */
-            ap_update_child_status_from_indexes(my_child_num, i,
-                                                SERVER_STARTING, NULL);
-            /* We let each thread update its own scoreboard entry.  This is
-             * done because it lets us deal with tid better.
-             */
-            rv = apr_thread_create(&threads[i], thread_attr, 
-                                   worker_thread, my_info, pchild);
-            if (rv != APR_SUCCESS) {
-                ap_log_error(APLOG_MARK, APLOG_ALERT, rv, ap_server_conf,
-                    "apr_thread_create: unable to create worker thread");
-                /* In case system resources are maxxed out, we don't want
-                   Apache running away with the CPU trying to fork over and
-                   over and over again if we exit. */
-                apr_sleep(10 * APR_USEC_PER_SEC);
-                clean_child_exit(APEXIT_CHILDFATAL);
-            }
-            threads_created++;
-        }
-        if (workers_may_exit || threads_created == ap_threads_per_child) {
-            break;
-        }
-        /* wait for previous generation to clean up an entry */
-        apr_sleep(1 * APR_USEC_PER_SEC);
-    }
-    
-    /* What state should this child_main process be listed as in the 
-     * scoreboard...?
-     *  ap_update_child_status_from_indexes(my_child_num, i, SERVER_STARTING, 
-     *                                      (request_rec *) NULL);
-     * 
-     *  This state should be listed separately in the scoreboard, in some kind
-     *  of process_status, not mixed in with the worker threads' status.   
-     *  "life_status" is almost right, but it's in the worker's structure, and 
-     *  the name could be clearer.   gla
-     */
-    apr_thread_exit(thd, APR_SUCCESS);
-    return NULL;
-}
-
-static void join_workers(apr_thread_t **threads)
-{
-    int i;
-    apr_status_t rv, thread_rv;
-
-    for (i = 0; i < ap_threads_per_child; i++) {
-        if (threads[i]) { /* if we ever created this thread */
-            rv = apr_thread_join(&thread_rv, threads[i]);
-            if (rv != APR_SUCCESS) {
-                ap_log_error(APLOG_MARK, APLOG_CRIT, rv, ap_server_conf,
-                             "apr_thread_join: unable to join worker "
-                             "thread %d",
-                             i);
-            }
-        }
-    }
-}
-
-static void join_start_thread(apr_thread_t *start_thread_id)
-{
-    apr_status_t rv, thread_rv;
-
-    rv = apr_thread_join(&thread_rv, start_thread_id);
-    if (rv != APR_SUCCESS) {
-        ap_log_error(APLOG_MARK, APLOG_CRIT, rv, ap_server_conf,
-                     "apr_thread_join: unable to join the start "
-                     "thread");
-    }
-}
-
-static void child_main(int child_num_arg)
-{
-    apr_thread_t **threads;
-    apr_status_t rv;
-    thread_starter *ts;
-    apr_threadattr_t *thread_attr;
-    apr_thread_t *start_thread_id;
-
-    ap_my_pid = getpid();
-    apr_pool_create(&pchild, pconf);
-
-    /*stuff to do before we switch id's, so we have permissions.*/
-    ap_reopen_scoreboard(pchild, NULL, 0);
-
-    rv = SAFE_ACCEPT(apr_proc_mutex_child_init(&accept_mutex, ap_lock_fname,
-                                               pchild));
-    if (rv != APR_SUCCESS) {
-        ap_log_error(APLOG_MARK, APLOG_EMERG, rv, ap_server_conf,
-                     "Couldn't initialize cross-process lock in child");
-        clean_child_exit(APEXIT_CHILDFATAL);
-    }
-
-    if (unixd_setup_child()) {
-        clean_child_exit(APEXIT_CHILDFATAL);
-    }
-
-    ap_run_child_init(pchild, ap_server_conf);
-
-    /* done with init critical section */
-
-    /* Just use the standard apr_setup_signal_thread to block all signals
-     * from being received.  The child processes no longer use signals for
-     * any communication with the parent process.
-     */
-    rv = apr_setup_signal_thread();
-    if (rv != APR_SUCCESS) {
-        ap_log_error(APLOG_MARK, APLOG_EMERG, rv, ap_server_conf,
-                     "Couldn't initialize signal thread");
-        clean_child_exit(APEXIT_CHILDFATAL);
-    }
-
-    if (ap_max_requests_per_child) {
-        requests_this_child = ap_max_requests_per_child;
-    }
-    else {
-        /* coding a value of zero means infinity */
-        requests_this_child = INT_MAX;
-    }
-    
-    /* Setup worker threads */
-
-    /* clear the storage; we may not create all our threads immediately, 
-     * and we want a 0 entry to indicate a thread which was not created
-     */
-    threads = (apr_thread_t **)calloc(1, 
-                                sizeof(apr_thread_t *) * ap_threads_per_child);
-    if (threads == NULL) {
-        ap_log_error(APLOG_MARK, APLOG_ALERT, errno, ap_server_conf,
-                     "malloc: out of memory");
-        clean_child_exit(APEXIT_CHILDFATAL);
-    }
-    worker_thread_count = 0;
-    apr_thread_mutex_create(&worker_thread_count_mutex,
-                            APR_THREAD_MUTEX_DEFAULT, pchild);
-
-    ts = (thread_starter *)apr_palloc(pchild, sizeof(*ts));
-
-    apr_threadattr_create(&thread_attr, pchild);
-    /* 0 means PTHREAD_CREATE_JOINABLE */
-    apr_threadattr_detach_set(thread_attr, 0);
-
-    ts->threads = threads;
-    ts->child_num_arg = child_num_arg;
-    ts->threadattr = thread_attr;
-
-    rv = apr_thread_create(&start_thread_id, thread_attr, start_threads,
-                           ts, pchild);
-    if (rv != APR_SUCCESS) {
-        ap_log_error(APLOG_MARK, APLOG_ALERT, rv, ap_server_conf,
-                     "apr_thread_create: unable to create worker thread");
-        /* In case system resources are maxxed out, we don't want
-           Apache running away with the CPU trying to fork over and
-           over and over again if we exit. */
-        apr_sleep(10 * APR_USEC_PER_SEC);
-        clean_child_exit(APEXIT_CHILDFATAL);
-    }
-
-    /* If we are only running in one_process mode, we will want to
-     * still handle signals. */
-    if (one_process) {
-        /* Set up a signal handler for this thread. */
-        apr_signal_thread(check_signal);
-        /* make sure the start thread has finished; signal_workers() 
-         * and join_workers() depend on that
-         */
-        join_start_thread(start_thread_id);
-        signal_workers(); /* helps us terminate a little more quickly when
-                           * the dispatch of the signal thread
-                           * beats the Pipe of Death and the browsers
-                           */
-        /* A terminating signal was received. Now join each of the
-         * workers to clean them up.
-         *   If the worker already exited, then the join frees
-         *   their resources and returns.
-         *   If the worker hasn't exited, then this blocks until
-         *   they have (then cleans up).
-         */
-        join_workers(threads);
-    }
-    else { /* !one_process */
-        /* Watch for any messages from the parent over the POD */
-        while (1) {
-            rv = ap_mpm_pod_check(pod);
-            if (rv == AP_GRACEFUL || rv == AP_RESTART) {
-                /* make sure the start thread has finished; 
-                 * signal_workers() and join_workers depend on that
-                 */
-                join_start_thread(start_thread_id);
-                signal_workers();
-                break;
-            }
-        }
-
-        if (rv == AP_GRACEFUL) {
-            /* A terminating signal was received. Now join each of the
-             * workers to clean them up.
-             *   If the worker already exited, then the join frees
-             *   their resources and returns.
-             *   If the worker hasn't exited, then this blocks until
-             *   they have (then cleans up).
-             */
-            join_workers(threads);
-        }
-    }
-
-    free(threads);
-
-    clean_child_exit(resource_shortage ? APEXIT_CHILDSICK : 0);
-}
-
-static int make_child(server_rec *s, int slot) 
-{
-    int pid;
-
-    if (slot + 1 > ap_max_daemons_limit) {
-        ap_max_daemons_limit = slot + 1;
-    }
-
-    if (one_process) {
-        set_signals();
-        ap_scoreboard_image->parent[slot].pid = getpid();
-        child_main(slot);
-    }
-
-    if ((pid = fork()) == -1) {
-        ap_log_error(APLOG_MARK, APLOG_ERR, errno, s, 
-                     "fork: Unable to fork new process");
-
-        /* fork didn't succeed. Fix the scoreboard or else
-         * it will say SERVER_STARTING forever and ever
-         */
-        ap_update_child_status_from_indexes(slot, 0, SERVER_DEAD, NULL);
-
-        /* In case system resources are maxxed out, we don't want
-           Apache running away with the CPU trying to fork over and
-           over and over again. */
-        apr_sleep(10 * APR_USEC_PER_SEC);
-
-        return -1;
-    }
-
-    if (!pid) {
-#ifdef HAVE_BINDPROCESSOR
-        /* By default, AIX binds to a single processor.  This bit unbinds
-         * children which will then bind to another CPU.
-         */
-        int status = bindprocessor(BINDPROCESS, (int)getpid(),
-                               PROCESSOR_CLASS_ANY);
-        if (status != OK)
-            ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_WARNING, errno, 
-                         ap_server_conf,
-                         "processor unbind failed %d", status);
-#endif
-        RAISE_SIGSTOP(MAKE_CHILD);
-
-        apr_signal(SIGTERM, just_die);
-        child_main(slot);
-
-        clean_child_exit(0);
-    }
-    /* else */
-    ap_scoreboard_image->parent[slot].quiescing = 0;
-    ap_scoreboard_image->parent[slot].pid = pid;
-    return 0;
-}
-
-/* start up a bunch of children */
-static void startup_children(int number_to_start)
-{
-    int i;
-
-    for (i = 0; number_to_start && i < ap_daemons_limit; ++i) {
-        if (ap_scoreboard_image->parent[i].pid != 0) {
-            continue;
-        }
-        if (make_child(ap_server_conf, i) < 0) {
-            break;
-        }
-        --number_to_start;
-    }
-}
-
-
-/*
- * idle_spawn_rate is the number of children that will be spawned on the
- * next maintenance cycle if there aren't enough idle servers.  It is
- * doubled up to MAX_SPAWN_RATE, and reset only when a cycle goes by
- * without the need to spawn.
- */
-static int idle_spawn_rate = 1;
-#ifndef MAX_SPAWN_RATE
-#define MAX_SPAWN_RATE        (32)
-#endif
-static int hold_off_on_exponential_spawning;
-
-static void perform_idle_server_maintenance(void)
-{
-    int i, j;
-    int idle_thread_count;
-    worker_score *ws;
-    process_score *ps;
-    int free_length;
-    int totally_free_length = 0;
-    int free_slots[MAX_SPAWN_RATE];
-    int last_non_dead;
-    int total_non_dead;
-
-    /* initialize the free_list */
-    free_length = 0;
-
-    idle_thread_count = 0;
-    last_non_dead = -1;
-    total_non_dead = 0;
-
-    ap_sync_scoreboard_image();
-    for (i = 0; i < ap_daemons_limit; ++i) {
-        /* Initialization to satisfy the compiler. It doesn't know
-         * that ap_threads_per_child is always > 0 */
-        int status = SERVER_DEAD;
-        int any_dying_threads = 0;
-        int any_dead_threads = 0;
-        int all_dead_threads = 1;
-
-        if (i >= ap_max_daemons_limit && totally_free_length == idle_spawn_rate)
-            break;
-        ps = &ap_scoreboard_image->parent[i];
-        for (j = 0; j < ap_threads_per_child; j++) {
-            ws = &ap_scoreboard_image->servers[i][j];
-            status = ws->status;
-
-            /* XXX any_dying_threads is probably no longer needed    GLA */
-            any_dying_threads = any_dying_threads || 
-                                (status == SERVER_GRACEFUL);
-            any_dead_threads = any_dead_threads || (status == SERVER_DEAD);
-            all_dead_threads = all_dead_threads &&
-                                   (status == SERVER_DEAD ||
-                                    status == SERVER_GRACEFUL);
-
-            /* We consider a starting server as idle because we started it
-             * at least a cycle ago, and if it still hasn't finished starting
-             * then we're just going to swamp things worse by forking more.
-             * So we hopefully won't need to fork more if we count it.
-             * This depends on the ordering of SERVER_READY and SERVER_STARTING.
-             */
-            if (status <= SERVER_READY && status != SERVER_DEAD &&
-                    !ps->quiescing &&
-                    ps->generation == ap_my_generation &&
-                 /* XXX the following shouldn't be necessary if we clean up 
-                  *     properly after seg faults, but we're not yet    GLA 
-                  */     
-                    ps->pid != 0) {
-                ++idle_thread_count;
-            }
-        }
-        if (any_dead_threads && totally_free_length < idle_spawn_rate 
-                && (!ps->pid               /* no process in the slot */
-                    || ps->quiescing)) {   /* or at least one is going away */
-            if (all_dead_threads) {
-                /* great! we prefer these, because the new process can
-                 * start more threads sooner.  So prioritize this slot 
-                 * by putting it ahead of any slots with active threads.
-                 *
-                 * first, make room by moving a slot that's potentially still
-                 * in use to the end of the array
-                 */
-                free_slots[free_length] = free_slots[totally_free_length];
-                free_slots[totally_free_length++] = i;
-            }
-            else {
-                /* slot is still in use - back of the bus
-                 */
-            free_slots[free_length] = i;
-            }
-            ++free_length;
-        }
-        /* XXX if (!ps->quiescing)     is probably more reliable  GLA */
-        if (!any_dying_threads) {
-            last_non_dead = i;
-            ++total_non_dead;
-        }
-    }
-    ap_max_daemons_limit = last_non_dead + 1;
-
-    if (idle_thread_count > max_spare_threads) {
-        /* Kill off one child */
-        ap_mpm_pod_signal(pod, TRUE);
-        idle_spawn_rate = 1;
-    }
-    else if (idle_thread_count < min_spare_threads) {
-        /* terminate the free list */
-        if (free_length == 0) {
-            /* only report this condition once */
-            static int reported = 0;
-            
-            if (!reported) {
-                ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, 
-                             ap_server_conf,
-                             "server reached MaxClients setting, consider"
-                             " raising the MaxClients setting");
-                reported = 1;
-            }
-            idle_spawn_rate = 1;
-        }
-        else {
-            if (free_length > idle_spawn_rate) {
-                free_length = idle_spawn_rate;
-            }
-            if (idle_spawn_rate >= 8) {
-                ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_INFO, 0, 
-                             ap_server_conf,
-                             "server seems busy, (you may need "
-                             "to increase StartServers, ThreadsPerChild "
-                             "or Min/MaxSpareThreads), "
-                             "spawning %d children, there are around %d idle "
-                             "threads, and %d total children", free_length,
-                             idle_thread_count, total_non_dead);
-            }
-            for (i = 0; i < free_length; ++i) {
-                make_child(ap_server_conf, free_slots[i]);
-            }
-            /* the next time around we want to spawn twice as many if this
-             * wasn't good enough, but not if we've just done a graceful
-             */
-            if (hold_off_on_exponential_spawning) {
-                --hold_off_on_exponential_spawning;
-            }
-            else if (idle_spawn_rate < MAX_SPAWN_RATE) {
-                idle_spawn_rate *= 2;
-            }
-        }
-    }
-    else {
-      idle_spawn_rate = 1;
-    }
-}
-
-static void server_main_loop(int remaining_children_to_start)
-{
-    int child_slot;
-    apr_exit_why_e exitwhy;
-    int status, processed_status;
-    apr_proc_t pid;
-    int i;
-
-    while (!restart_pending && !shutdown_pending) {
-        ap_wait_or_timeout(&exitwhy, &status, &pid, pconf);
-        
-        if (pid.pid != -1) {
-            processed_status = ap_process_child_status(&pid, exitwhy, status);
-            if (processed_status == APEXIT_CHILDFATAL) {
-                shutdown_pending = 1;
-                child_fatal = 1;
-                return;
-            }
-            /* non-fatal death... note that it's gone in the scoreboard. */
-            child_slot = find_child_by_pid(&pid);
-            if (child_slot >= 0) {
-                for (i = 0; i < ap_threads_per_child; i++)
-                    ap_update_child_status_from_indexes(child_slot, i, SERVER_DEAD, 
-                                                        (request_rec *) NULL);
-                
-                ap_scoreboard_image->parent[child_slot].pid = 0;
-                ap_scoreboard_image->parent[child_slot].quiescing = 0;
-                if (processed_status == APEXIT_CHILDSICK) {
-                    /* resource shortage, minimize the fork rate */
-                    idle_spawn_rate = 1;
-                }
-                else if (remaining_children_to_start
-                    && child_slot < ap_daemons_limit) {
-                    /* we're still doing a 1-for-1 replacement of dead
-                     * children with new children
-                     */
-                    make_child(ap_server_conf, child_slot);
-                    --remaining_children_to_start;
-                }
-#if APR_HAS_OTHER_CHILD
-            }
-            else if (apr_proc_other_child_read(&pid, status) == 0) {
-                /* handled */
-#endif
-            }
-            else if (is_graceful) {
-                /* Great, we've probably just lost a slot in the
-                 * scoreboard.  Somehow we don't know about this child.
-                 */
-                ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_WARNING, 0,
-                             ap_server_conf,
-                             "long lost child came home! (pid %ld)",
-                             (long)pid.pid);
-            }
-            /* Don't perform idle maintenance when a child dies,
-             * only do it when there's a timeout.  Remember only a
-             * finite number of children can die, and it's pretty
-             * pathological for a lot to die suddenly.
-             */
-            continue;
-        }
-        else if (remaining_children_to_start) {
-            /* we hit a 1 second timeout in which none of the previous
-             * generation of children needed to be reaped... so assume
-             * they're all done, and pick up the slack if any is left.
-             */
-            startup_children(remaining_children_to_start);
-            remaining_children_to_start = 0;
-            /* In any event we really shouldn't do the code below because
-             * few of the servers we just started are in the IDLE state
-             * yet, so we'd mistakenly create an extra server.
-             */
-            continue;
-        }
-
-        perform_idle_server_maintenance();
-    }
-}
-
-int ap_mpm_run(apr_pool_t *_pconf, apr_pool_t *plog, server_rec *s)
-{
-    int remaining_children_to_start;
-    apr_status_t rv;
-
-    ap_log_pid(pconf, ap_pid_fname);
-
-    first_server_limit = server_limit;
-    first_thread_limit = thread_limit;
-    if (changed_limit_at_restart) {
-        ap_log_error(APLOG_MARK, APLOG_WARNING | APLOG_NOERRNO, 0, s,
-                     "WARNING: Attempt to change ServerLimit or ThreadLimit "
-                     "ignored during restart");
-        changed_limit_at_restart = 0;
-    }
-    
-    /* Initialize cross-process accept lock */
-    ap_lock_fname = apr_psprintf(_pconf, "%s.%" APR_PID_T_FMT,
-                                 ap_server_root_relative(_pconf, ap_lock_fname),
-                                 ap_my_pid);
-
-    rv = apr_proc_mutex_create(&accept_mutex, ap_lock_fname, 
-                               ap_accept_lock_mech, _pconf);
-    if (rv != APR_SUCCESS) {
-        ap_log_error(APLOG_MARK, APLOG_EMERG, rv, s,
-                     "Couldn't create accept lock");
-        return 1;
-    }
-
-#if APR_USE_SYSVSEM_SERIALIZE
-    if (ap_accept_lock_mech == APR_LOCK_DEFAULT || 
-        ap_accept_lock_mech == APR_LOCK_SYSVSEM) {
-#else
-    if (ap_accept_lock_mech == APR_LOCK_SYSVSEM) {
-#endif
-        rv = unixd_set_proc_mutex_perms(accept_mutex);
-        if (rv != APR_SUCCESS) {
-            ap_log_error(APLOG_MARK, APLOG_EMERG, rv, s,
-                         "Couldn't set permissions on cross-process lock");
-            return 1;
-        }
-    }
-
-    if (!is_graceful) {
-        if (ap_run_pre_mpm(pconf, SB_SHARED) != OK) {
-            return 1;
-        }
-    }
-
-    set_signals();
-    /* Don't thrash... */
-    if (max_spare_threads < min_spare_threads + ap_threads_per_child)
-        max_spare_threads = min_spare_threads + ap_threads_per_child;
-
-    /* If we're doing a graceful_restart then we're going to see a lot
-     * of children exiting immediately when we get into the main loop
-     * below (because we just sent them AP_SIG_GRACEFUL).  This happens pretty
-     * rapidly... and for each one that exits we'll start a new one until
-     * we reach at least daemons_min_free.  But we may be permitted to
-     * start more than that, so we'll just keep track of how many we're
-     * supposed to start up without the 1 second penalty between each fork.
-     */
-    remaining_children_to_start = ap_daemons_to_start;
-    if (remaining_children_to_start > ap_daemons_limit) {
-        remaining_children_to_start = ap_daemons_limit;
-    }
-    if (!is_graceful) {
-        startup_children(remaining_children_to_start);
-        remaining_children_to_start = 0;
-    }
-    else {
-        /* give the system some time to recover before kicking into
-            * exponential mode */
-        hold_off_on_exponential_spawning = 10;
-    }
-
-    ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_NOTICE, 0, ap_server_conf,
-                "%s configured -- resuming normal operations",
-                ap_get_server_version());
-    ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_INFO, 0, ap_server_conf,
-                "Server built: %s", ap_get_server_built());
-    restart_pending = shutdown_pending = 0;
-
-    server_main_loop(remaining_children_to_start);
-
-    if (shutdown_pending) {
-        /* Time to gracefully shut down:
-         * Kill child processes, tell them to call child_exit, etc...
-         */
-        ap_mpm_pod_killpg(pod, ap_daemons_limit, TRUE);
-        ap_reclaim_child_processes(1);                /* Start with SIGTERM */
-
-        if (!child_fatal) {
-            /* cleanup pid file on normal shutdown */
-            const char *pidfile = NULL;
-            pidfile = ap_server_root_relative (pconf, ap_pid_fname);
-            if ( pidfile != NULL && unlink(pidfile) == 0)
-                ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_INFO, 0,
-                             ap_server_conf,
-                             "removed PID file %s (pid=%ld)",
-                             pidfile, (long)getpid());
-    
-            ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_NOTICE, 0,
-                         ap_server_conf, "caught SIGTERM, shutting down");
-        }
-        return 1;
-    }
-
-    /* we've been told to restart */
-    apr_signal(SIGHUP, SIG_IGN);
-
-    if (one_process) {
-        /* not worth thinking about */
-        return 1;
-    }
-
-    /* advance to the next generation */
-    /* XXX: we really need to make sure this new generation number isn't in
-     * use by any of the children.
-     */
-    ++ap_my_generation;
-    ap_scoreboard_image->global->running_generation = ap_my_generation;
-    update_scoreboard_global();
-    
-    if (is_graceful) {
-        ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_NOTICE, 0, ap_server_conf,
-                     AP_SIG_GRACEFUL_STRING " received.  Doing graceful restart");
-        /* wake up the children...time to die.  But we'll have more soon */
-        ap_mpm_pod_killpg(pod, ap_daemons_limit, TRUE);
-    
-
-        /* This is mostly for debugging... so that we know what is still
-         * gracefully dealing with existing request.
-         */
-        
-    }
-    else {
-        /* Kill 'em all.  Since the child acts the same on the parents SIGTERM 
-         * and a SIGHUP, we may as well use the same signal, because some user
-         * pthreads are stealing signals from us left and right.
-         */
-        ap_mpm_pod_killpg(pod, ap_daemons_limit, FALSE);
-
-        ap_reclaim_child_processes(1);                /* Start with SIGTERM */
-        ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_NOTICE, 0, ap_server_conf,
-                    "SIGHUP received.  Attempting to restart");
-    }
-
-    return 0;
-}
-
-/* This really should be a post_config hook, but the error log is already
- * redirected by that point, so we need to do this in the open_logs phase.
- */
-static int worker_open_logs(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *s)
-{
-    apr_status_t rv;
-
-    pconf = p;
-    ap_server_conf = s;
-
-    if ((num_listensocks = ap_setup_listeners(ap_server_conf)) < 1) {
-        ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_ALERT|APLOG_STARTUP, 0,
-                     NULL, "no listening sockets available, shutting down");
-        return DONE;
-    }
-
-    if (!one_process) {
-        if ((rv = ap_mpm_pod_open(pconf, &pod))) {
-            ap_log_error(APLOG_MARK, APLOG_CRIT|APLOG_STARTUP, rv, NULL,
-                    "Could not open pipe-of-death.");
-            return DONE;
-        }
-    }
-    return OK;
-}
-
-static int worker_pre_config(apr_pool_t *pconf, apr_pool_t *plog, 
-                             apr_pool_t *ptemp)
-{
-    static int restart_num = 0;
-    int no_detach, debug;
-    ap_directive_t *pdir;
-    ap_directive_t *max_clients = NULL;
-    apr_status_t rv;
-
-    /* make sure that "ThreadsPerChild" gets set before "MaxClients" */
-    for (pdir = ap_conftree; pdir != NULL; pdir = pdir->next) {
-        if (strncasecmp(pdir->directive, "ThreadsPerChild", 15) == 0) {
-            if (!max_clients) {
-                break; /* we're in the clear, got ThreadsPerChild first */
-            }
-            else {
-                /* now to swap the data */
-                ap_directive_t temp;
-
-                temp.directive = pdir->directive;
-                temp.args = pdir->args;
-                /* Make sure you don't change 'next', or you may get loops! */
-                /* XXX: first_child, parent, and data can never be set
-                 * for these directives, right? -aaron */
-                temp.filename = pdir->filename;
-                temp.line_num = pdir->line_num;
-
-                pdir->directive = max_clients->directive;
-                pdir->args = max_clients->args;
-                pdir->filename = max_clients->filename;
-                pdir->line_num = max_clients->line_num;
-                
-                max_clients->directive = temp.directive;
-                max_clients->args = temp.args;
-                max_clients->filename = temp.filename;
-                max_clients->line_num = temp.line_num;
-                break;
-            }
-        }
-        else if (!max_clients
-                 && strncasecmp(pdir->directive, "MaxClients", 10) == 0) {
-            max_clients = pdir;
-        }
-    }
-
-    debug = ap_exists_config_define("DEBUG");
-
-    if (debug) {
-        no_detach = one_process = 1;
-    }
-    else {
-        one_process = ap_exists_config_define("ONE_PROCESS");
-        no_detach = ap_exists_config_define("NO_DETACH");
-    }
-
-    /* sigh, want this only the second time around */
-    if (restart_num++ == 1) {
-        is_graceful = 0;
-
-        if (!one_process) {
-            rv = apr_proc_detach(no_detach ? APR_PROC_DETACH_FOREGROUND
-                                           : APR_PROC_DETACH_DAEMONIZE);
-            if (rv != APR_SUCCESS) {
-                ap_log_error(APLOG_MARK, APLOG_CRIT, rv, NULL,
-                             "apr_proc_detach failed");
-                return HTTP_INTERNAL_SERVER_ERROR;
-            }
-        }
-        parent_pid = ap_my_pid = getpid();
-    }
-
-    unixd_pre_config(ptemp);
-    ap_listen_pre_config();
-    ap_daemons_to_start = DEFAULT_START_DAEMON;
-    min_spare_threads = DEFAULT_MIN_FREE_DAEMON * DEFAULT_THREADS_PER_CHILD;
-    max_spare_threads = DEFAULT_MAX_FREE_DAEMON * DEFAULT_THREADS_PER_CHILD;
-    ap_daemons_limit = server_limit;
-    ap_threads_per_child = DEFAULT_THREADS_PER_CHILD;
-    ap_pid_fname = DEFAULT_PIDLOG;
-    ap_lock_fname = DEFAULT_LOCKFILE;
-    ap_max_requests_per_child = DEFAULT_MAX_REQUESTS_PER_CHILD;
-    ap_extended_status = 0;
-
-    apr_cpystrn(ap_coredump_dir, ap_server_root, sizeof(ap_coredump_dir));
-
-    return OK;
-}
-
-static void worker_hooks(apr_pool_t *p)
-{
-    /* The worker open_logs phase must run before the core's, or stderr
-     * will be redirected to a file, and the messages won't print to the
-     * console.
-     */
-    static const char *const aszSucc[] = {"core.c", NULL};
-    one_process = 0;
-
-    ap_hook_open_logs(worker_open_logs, NULL, aszSucc, APR_HOOK_MIDDLE);
-    ap_hook_pre_config(worker_pre_config, NULL, NULL, APR_HOOK_MIDDLE);
-}
-
-static const char *set_daemons_to_start(cmd_parms *cmd, void *dummy,
-                                        const char *arg) 
-{
-    const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
-    if (err != NULL) {
-        return err;
-    }
-
-    ap_daemons_to_start = atoi(arg);
-    return NULL;
-}
-
-static const char *set_min_spare_threads(cmd_parms *cmd, void *dummy,
-                                         const char *arg)
-{
-    const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
-    if (err != NULL) {
-        return err;
-    }
-
-    min_spare_threads = atoi(arg);
-    if (min_spare_threads <= 0) {
-       ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
-                    "WARNING: detected MinSpareThreads set to non-positive.");
-       ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
-                    "Resetting to 1 to avoid almost certain Apache failure.");
-       ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
-                    "Please read the documentation.");
-       min_spare_threads = 1;
-    }
-       
-    return NULL;
-}
-
-static const char *set_max_spare_threads(cmd_parms *cmd, void *dummy,
-                                         const char *arg)
-{
-    const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
-    if (err != NULL) {
-        return err;
-    }
-
-    max_spare_threads = atoi(arg);
-    return NULL;
-}
-
-static const char *set_max_clients (cmd_parms *cmd, void *dummy,
-                                     const char *arg) 
-{
-    int max_clients;
-    const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
-    if (err != NULL) {
-        return err;
-    }
-
-    /* It is ok to use ap_threads_per_child here because we are
-     * sure that it gets set before MaxClients in the pre_config stage. */
-    max_clients = atoi(arg);
-    if (max_clients < ap_threads_per_child) {
-       ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
-                    "WARNING: MaxClients (%d) must be at least as large",
-                    max_clients);
-       ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
-                    " large as ThreadsPerChild (%d). Automatically",
-                    ap_threads_per_child);
-       ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
-                    " increasing MaxClients to %d.",
-                    ap_threads_per_child);
-       max_clients = ap_threads_per_child;
-    }
-    ap_daemons_limit = max_clients / ap_threads_per_child;
-    if ((max_clients > 0) && (max_clients % ap_threads_per_child)) {
-       ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
-                    "WARNING: MaxClients (%d) is not an integer multiple",
-                    max_clients);
-       ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
-                    " of ThreadsPerChild (%d), lowering MaxClients to %d",
-                    ap_threads_per_child,
-                    ap_daemons_limit * ap_threads_per_child);
-       ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
-                    " for a maximum of %d child processes,",
-                    ap_daemons_limit);
-       max_clients = ap_daemons_limit * ap_threads_per_child; 
-    }
-    if (ap_daemons_limit > server_limit) {
-       ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
-                    "WARNING: MaxClients of %d would require %d servers,",
-                    max_clients, ap_daemons_limit);
-       ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
-                    " and would exceed the ServerLimit value of %d.",
-                    server_limit);
-       ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
-                    " Automatically lowering MaxClients to %d.  To increase,",
-                    server_limit);
-       ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
-                    " please see the ServerLimit directive.");
-       ap_daemons_limit = server_limit;
-    } 
-    else if (ap_daemons_limit < 1) {
-        ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
-                     "WARNING: Require MaxClients > 0, setting to 1");
-        ap_daemons_limit = 1;
-    }
-    return NULL;
-}
-
-static const char *set_threads_per_child (cmd_parms *cmd, void *dummy,
-                                          const char *arg) 
-{
-    const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
-    if (err != NULL) {
-        return err;
-    }
-
-    ap_threads_per_child = atoi(arg);
-    if (ap_threads_per_child > thread_limit) {
-        ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
-                     "WARNING: ThreadsPerChild of %d exceeds ThreadLimit "
-                     "value of %d", ap_threads_per_child,
-                     thread_limit);
-        ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
-                     "threads, lowering ThreadsPerChild to %d. To increase, please"
-                     " see the", thread_limit);
-        ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
-                     " ThreadLimit directive.");
-        ap_threads_per_child = thread_limit;
-    }
-    else if (ap_threads_per_child < 1) {
-        ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
-                     "WARNING: Require ThreadsPerChild > 0, setting to 1");
-        ap_threads_per_child = 1;
-    }
-    return NULL;
-}
-
-static const char *set_server_limit (cmd_parms *cmd, void *dummy, const char *arg) 
-{
-    int tmp_server_limit;
-    
-    const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
-    if (err != NULL) {
-        return err;
-    }
-
-    tmp_server_limit = atoi(arg);
-    /* you cannot change ServerLimit across a restart; ignore
-     * any such attempts
-     */
-    if (first_server_limit &&
-        tmp_server_limit != server_limit) {
-        /* how do we log a message?  the error log is a bit bucket at this
-         * point; we'll just have to set a flag so that ap_mpm_run()
-         * logs a warning later
-         */
-        changed_limit_at_restart = 1;
-        return NULL;
-    }
-    server_limit = tmp_server_limit;
-    
-    if (server_limit > MAX_SERVER_LIMIT) {
-       ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
-                    "WARNING: ServerLimit of %d exceeds compile time limit "
-                    "of %d servers,", server_limit, MAX_SERVER_LIMIT);
-       ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
-                    " lowering ServerLimit to %d.", MAX_SERVER_LIMIT);
-       server_limit = MAX_SERVER_LIMIT;
-    } 
-    else if (server_limit < 1) {
-	ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
-                     "WARNING: Require ServerLimit > 0, setting to 1");
-	server_limit = 1;
-    }
-    return NULL;
-}
-
-static const char *set_thread_limit (cmd_parms *cmd, void *dummy, const char *arg) 
-{
-    int tmp_thread_limit;
-    
-    const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
-    if (err != NULL) {
-        return err;
-    }
-
-    tmp_thread_limit = atoi(arg);
-    /* you cannot change ThreadLimit across a restart; ignore
-     * any such attempts
-     */
-    if (first_thread_limit &&
-        tmp_thread_limit != thread_limit) {
-        /* how do we log a message?  the error log is a bit bucket at this
-         * point; we'll just have to set a flag so that ap_mpm_run()
-         * logs a warning later
-         */
-        changed_limit_at_restart = 1;
-        return NULL;
-    }
-    thread_limit = tmp_thread_limit;
-    
-    if (thread_limit > MAX_THREAD_LIMIT) {
-       ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
-                    "WARNING: ThreadLimit of %d exceeds compile time limit "
-                    "of %d servers,", thread_limit, MAX_THREAD_LIMIT);
-       ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
-                    " lowering ThreadLimit to %d.", MAX_THREAD_LIMIT);
-       thread_limit = MAX_THREAD_LIMIT;
-    } 
-    else if (thread_limit < 1) {
-	ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
-                     "WARNING: Require ThreadLimit > 0, setting to 1");
-	thread_limit = 1;
-    }
-    return NULL;
-}
-
-static const command_rec worker_cmds[] = {
-UNIX_DAEMON_COMMANDS,
-LISTEN_COMMANDS,
-AP_INIT_TAKE1("StartServers", set_daemons_to_start, NULL, RSRC_CONF,
-  "Number of child processes launched at server startup"),
-AP_INIT_TAKE1("MinSpareThreads", set_min_spare_threads, NULL, RSRC_CONF,
-  "Minimum number of idle children, to handle request spikes"),
-AP_INIT_TAKE1("MaxSpareThreads", set_max_spare_threads, NULL, RSRC_CONF,
-  "Maximum number of idle children"),
-AP_INIT_TAKE1("MaxClients", set_max_clients, NULL, RSRC_CONF,
-  "Maximum number of children alive at the same time"),
-AP_INIT_TAKE1("ThreadsPerChild", set_threads_per_child, NULL, RSRC_CONF,
-  "Number of threads each child creates"),
-AP_INIT_TAKE1("ServerLimit", set_server_limit, NULL, RSRC_CONF,
-  "Maximum value of MaxClients for this run of Apache"),
-AP_INIT_TAKE1("ThreadLimit", set_thread_limit, NULL, RSRC_CONF,
-  "Maximum worker threads in a server for this run of Apache"),
-{ NULL }
-};
-
-module AP_MODULE_DECLARE_DATA mpm_worker_module = {
-    MPM20_MODULE_STUFF,
-    NULL,                       /* hook to run before apache parses args */
-    NULL,                       /* create per-directory config structure */
-    NULL,                       /* merge per-directory config structures */
-    NULL,                       /* create per-server config structure */
-    NULL,                       /* merge per-server config structures */
-    worker_cmds,                /* command apr_table_t */
-    worker_hooks                /* register_hooks */
-};
-
diff --git a/server/mpm_common.c b/server/mpm_common.c
deleted file mode 100644
index 3433698..0000000
--- a/server/mpm_common.c
+++ /dev/null
@@ -1,718 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-/* The purpose of this file is to store the code that MOST mpm's will need
- * this does not mean a function only goes into this file if every MPM needs
- * it.  It means that if a function is needed by more than one MPM, and
- * future maintenance would be served by making the code common, then the
- * function belongs here.
- *
- * This is going in src/main because it is not platform specific, it is
- * specific to multi-process servers, but NOT to Unix.  Which is why it
- * does not belong in src/os/unix
- */
-
-#include "apr.h"
-#include "apr_thread_proc.h"
-#include "apr_signal.h"
-#include "apr_strings.h"
-#include "apr_lock.h"
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-#include "httpd.h"
-#include "http_config.h"
-#include "http_log.h"
-#include "http_main.h"
-#include "mpm.h"
-#include "mpm_common.h"
-#include "ap_mpm.h"
-#include "ap_listen.h"
-#include "mpm_default.h"
-
-#ifdef AP_MPM_WANT_SET_SCOREBOARD
-#include "scoreboard.h"
-#endif
-
-#ifdef HAVE_PWD_H
-#include <pwd.h>
-#endif
-#ifdef HAVE_GRP_H
-#include <grp.h>
-#endif
-
-#ifdef AP_MPM_WANT_RECLAIM_CHILD_PROCESSES
-void ap_reclaim_child_processes(int terminate)
-{
-    int i;
-    long int waittime = 1024 * 16;      /* in usecs */
-    apr_status_t waitret;
-    int tries;
-    int not_dead_yet;
-    int max_daemons;
-
-    ap_mpm_query(AP_MPMQ_MAX_DAEMON_USED, &max_daemons);
-    MPM_SYNC_CHILD_TABLE();
-
-    for (tries = terminate ? 4 : 1; tries <= 9; ++tries) {
-        /* don't want to hold up progress any more than
-         * necessary, but we need to allow children a few moments to exit.
-         * Set delay with an exponential backoff.
-         */
-        apr_sleep(waittime);
-        waittime = waittime * 4;
-
-        /* now see who is done */
-        not_dead_yet = 0;
-        for (i = 0; i < max_daemons; ++i) {
-            pid_t pid = MPM_CHILD_PID(i);
-            apr_proc_t proc;
-
-            if (pid == 0)
-                continue;
-
-            proc.pid = pid;
-            waitret = apr_proc_wait(&proc, NULL, NULL, APR_NOWAIT);
-            if (waitret != APR_CHILD_NOTDONE) {
-                MPM_NOTE_CHILD_KILLED(i);
-                continue;
-            }
-
-            ++not_dead_yet;
-            switch (tries) {
-            case 1:     /*  16ms */
-            case 2:     /*  82ms */
-            case 3:     /* 344ms */
-            case 4:     /*  16ms */
-                break;
-
-            case 5:     /*  82ms */
-            case 6:     /* 344ms */
-            case 7:     /* 1.4sec */
-                /* ok, now it's being annoying */
-                ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_WARNING,
-                             0, ap_server_conf,
-                             "child process %ld still did not exit, "
-                             "sending a SIGTERM",
-                             (long)pid);
-                kill(pid, SIGTERM);
-                break;
-
-            case 8:     /*  6 sec */
-                /* die child scum */
-                ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR,
-                             0, ap_server_conf,
-                             "child process %ld still did not exit, "
-                             "sending a SIGKILL",
-                             (long)pid);
-#ifndef BEOS
-                kill(pid, SIGKILL);
-#else
-                /* sending a SIGKILL kills the entire team on BeOS, and as
-                 * httpd thread is part of that team it removes any chance
-                 * of ever doing a restart.  To counter this I'm changing to
-                 * use a kinder, gentler way of killing a specific thread
-                 * that is just as effective.
-                 */
-                kill_thread(pid);
-#endif
-                break;
-
-            case 9:     /* 14 sec */
-                /* gave it our best shot, but alas...  If this really
-                 * is a child we are trying to kill and it really hasn't
-                 * exited, we will likely fail to bind to the port
-                 * after the restart.
-                 */
-                ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR,
-                             0, ap_server_conf,
-                             "could not make child process %ld exit, "
-                             "attempting to continue anyway",
-                             (long)pid);
-                break;
-            }
-        }
-
-#if APR_HAS_OTHER_CHILD
-        apr_proc_other_child_check();
-#endif
-
-        if (!not_dead_yet) {
-            /* nothing left to wait for */
-            break;
-        }
-    }
-}
-#endif /* AP_MPM_WANT_RECLAIM_CHILD_PROCESSES */
-
-#ifdef AP_MPM_WANT_WAIT_OR_TIMEOUT
-
-/* number of calls to wait_or_timeout between writable probes */
-#ifndef INTERVAL_OF_WRITABLE_PROBES
-#define INTERVAL_OF_WRITABLE_PROBES 10
-#endif
-static int wait_or_timeout_counter;
-
-void ap_wait_or_timeout(apr_exit_why_e *status, int *exitcode, apr_proc_t *ret,
-                        apr_pool_t *p)
-{
-    apr_status_t rv;
-
-    ++wait_or_timeout_counter;
-    if (wait_or_timeout_counter == INTERVAL_OF_WRITABLE_PROBES) {
-        wait_or_timeout_counter = 0;
-    }
-
-    rv = apr_proc_wait_all_procs(ret, exitcode, status, APR_NOWAIT, p);
-    if (APR_STATUS_IS_EINTR(rv)) {
-        ret->pid = -1;
-        return;
-    }
-
-    if (APR_STATUS_IS_CHILD_DONE(rv)) {
-        return;
-    }
-
-#ifdef NEED_WAITPID
-    if ((ret = reap_children(exitcode, status)) > 0) {
-        return;
-    }
-#endif
-
-    apr_sleep(SCOREBOARD_MAINTENANCE_INTERVAL);
-    ret->pid = -1;
-    return;
-}
-#endif /* AP_MPM_WANT_WAIT_OR_TIMEOUT */
-
-#ifdef AP_MPM_WANT_PROCESS_CHILD_STATUS
-int ap_process_child_status(apr_proc_t *pid, apr_exit_why_e why, int status)
-{
-    int signum = status;
-    const char *sigdesc = apr_signal_get_description(signum);
-
-    /* Child died... if it died due to a fatal error,
-     * we should simply bail out.  The caller needs to
-     * check for bad rc from us and exit, running any
-     * appropriate cleanups.
-     *
-     * If the child died due to a resource shortage, 
-     * the parent should limit the rate of forking
-     */
-    if (APR_PROC_CHECK_EXIT(why)) {
-        if (status == APEXIT_CHILDSICK) {
-            return status;
-        }
-
-        if (status == APEXIT_CHILDFATAL) {
-            ap_log_error(APLOG_MARK, APLOG_ALERT|APLOG_NOERRNO,
-                         0, ap_server_conf,
-                         "Child %" APR_PID_T_FMT
-                         " returned a Fatal error..." APR_EOL_STR
-                         "Apache is exiting!",
-                         pid->pid);
-            return APEXIT_CHILDFATAL;
-        }
-
-        return 0;
-    }
-
-    if (APR_PROC_CHECK_SIGNALED(why)) {
-        switch (signum) {
-        case SIGTERM:
-        case SIGHUP:
-        case AP_SIG_GRACEFUL:
-        case SIGKILL:
-            break;
-
-        default:
-            if (APR_PROC_CHECK_CORE_DUMP(why)) {
-                ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_NOTICE,
-                             0, ap_server_conf,
-                             "child pid %ld exit signal %s (%d), "
-                             "possible coredump in %s",
-                             (long)pid->pid, sigdesc, signum,
-                             ap_coredump_dir);
-            }
-            else {
-                ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_NOTICE,
-                             0, ap_server_conf,
-                             "child pid %ld exit signal %s (%d)",
-                             (long)pid->pid, sigdesc, signum);
-            }
-        }
-    }
-    return 0;
-}
-#endif /* AP_MPM_WANT_PROCESS_CHILD_STATUS */
-
-#if defined(TCP_NODELAY) && !defined(MPE) && !defined(TPF) && !defined(WIN32)
-void ap_sock_disable_nagle(apr_socket_t *s)
-{
-    /* The Nagle algorithm says that we should delay sending partial
-     * packets in hopes of getting more data.  We don't want to do
-     * this; we are not telnet.  There are bad interactions between
-     * persistent connections and Nagle's algorithm that have very severe
-     * performance penalties.  (Failing to disable Nagle is not much of a
-     * problem with simple HTTP.)
-     *
-     * In spite of these problems, failure here is not a shooting offense.
-     */
-    apr_status_t status = apr_setsocketopt(s, APR_TCP_NODELAY, 1);
-
-    if (status != APR_SUCCESS) {
-        ap_log_error(APLOG_MARK, APLOG_WARNING, status, ap_server_conf,
-                     "setsockopt: (TCP_NODELAY)");
-    }
-}
-#endif
-
-#ifdef HAVE_GETPWNAM
-AP_DECLARE(uid_t) ap_uname2id(const char *name)
-{
-    struct passwd *ent;
-
-    if (name[0] == '#')
-        return (atoi(&name[1]));
-
-    if (!(ent = getpwnam(name))) {
-        ap_log_error(APLOG_MARK, APLOG_STARTUP|APLOG_NOERRNO, 0, NULL,
-                     "%s: bad user name %s", ap_server_argv0, name);
-        exit(1);
-    }
-
-    return (ent->pw_uid);
-}
-#endif
-
-#ifdef HAVE_GETGRNAM
-AP_DECLARE(gid_t) ap_gname2id(const char *name)
-{
-    struct group *ent;
-
-    if (name[0] == '#')
-        return (atoi(&name[1]));
-
-    if (!(ent = getgrnam(name))) {
-        ap_log_error(APLOG_MARK, APLOG_STARTUP|APLOG_NOERRNO, 0, NULL,
-                     "%s: bad group name %s", ap_server_argv0, name);
-        exit(1);
-    }
-
-    return (ent->gr_gid);
-}
-#endif
-
-#ifndef HAVE_INITGROUPS
-int initgroups(const char *name, gid_t basegid)
-{
-#if defined(QNX) || defined(MPE) || defined(BEOS) || defined(_OSD_POSIX) || defined(TPF) || defined(__TANDEM) || defined(OS2) || defined(WIN32) || defined(NETWARE)
-/* QNX, MPE and BeOS do not appear to support supplementary groups. */
-    return 0;
-#else /* ndef QNX */
-    gid_t groups[NGROUPS_MAX];
-    struct group *g;
-    int index = 0;
-
-    setgrent();
-
-    groups[index++] = basegid;
-
-    while (index < NGROUPS_MAX && ((g = getgrent()) != NULL)) {
-        if (g->gr_gid != basegid) {
-            char **names;
-
-            for (names = g->gr_mem; *names != NULL; ++names) {
-                if (!strcmp(*names, name))
-                    groups[index++] = g->gr_gid;
-            }
-        }
-    }
-
-    endgrent();
-
-    return setgroups(index, groups);
-#endif /* def QNX */
-}
-#endif /* def NEED_INITGROUPS */
-
-#ifdef AP_MPM_USES_POD
-
-AP_DECLARE(apr_status_t) ap_mpm_pod_open(apr_pool_t *p, ap_pod_t **pod)
-{
-    apr_status_t rv;
-
-    *pod = apr_palloc(p, sizeof(**pod));
-    rv = apr_file_pipe_create(&((*pod)->pod_in), &((*pod)->pod_out), p);
-    if (rv != APR_SUCCESS) {
-        return rv;
-    }
-
-    apr_file_pipe_timeout_set((*pod)->pod_in, 0);
-    (*pod)->p = p;
-
-    apr_sockaddr_info_get(&(*pod)->sa, ap_listeners->bind_addr->hostname,
-                          APR_UNSPEC, ap_listeners->bind_addr->port, 0, p);
-
-    return APR_SUCCESS;
-}
-
-AP_DECLARE(apr_status_t) ap_mpm_pod_check(ap_pod_t *pod)
-{
-    char c;
-    apr_size_t len = 1;
-    apr_status_t rv;
-
-    rv = apr_file_read(pod->pod_in, &c, &len);
-
-    if ((rv == APR_SUCCESS) && (len == 1)) {
-        return APR_SUCCESS;
-    }
-
-    if (rv != APR_SUCCESS) {
-        return rv;
-    }
-
-    return AP_NORESTART;
-}
-
-AP_DECLARE(apr_status_t) ap_mpm_pod_close(ap_pod_t *pod)
-{
-    apr_status_t rv;
-
-    rv = apr_file_close(pod->pod_out);
-    if (rv != APR_SUCCESS) {
-        return rv;
-    }
-
-    rv = apr_file_close(pod->pod_in);
-    if (rv != APR_SUCCESS) {
-        return rv;
-    }
-
-    return APR_SUCCESS;
-}
-
-static apr_status_t pod_signal_internal(ap_pod_t *pod)
-{
-    apr_status_t rv;
-    char char_of_death = '!';
-    apr_size_t one = 1;
-
-    do {
-        rv = apr_file_write(pod->pod_out, &char_of_death, &one);
-    } while (APR_STATUS_IS_EINTR(rv));
-
-    if (rv != APR_SUCCESS) {
-        ap_log_error(APLOG_MARK, APLOG_WARNING, rv, ap_server_conf,
-                     "write pipe_of_death");
-    }
-
-    return rv;
-}
-
-/* This function connects to the server, then immediately closes the connection.
- * This permits the MPM to skip the poll when there is only one listening
- * socket, because it provides a alternate way to unblock an accept() when
- * the pod is used.
- */
-static apr_status_t dummy_connection(ap_pod_t *pod)
-{
-    apr_status_t rv;
-    apr_socket_t *sock;
-    apr_pool_t *p;
-
-    /* create a temporary pool for the socket.  pconf stays around too long */
-    rv = apr_pool_create(&p, pod->p);
-    if (rv != APR_SUCCESS) {
-        return rv;
-    }
-
-    rv = apr_socket_create(&sock, pod->sa->family, SOCK_STREAM, p);
-    if (rv != APR_SUCCESS) {
-        ap_log_error(APLOG_MARK, APLOG_WARNING, rv, ap_server_conf,
-                     "get socket to connect to listener");
-        return rv;
-    }
-
-    /* on some platforms (e.g., FreeBSD), the kernel won't accept many
-     * queued connections before it starts blocking local connects...
-     * we need to keep from blocking too long and instead return an error,
-     * because the MPM won't want to hold up a graceful restart for a
-     * long time
-     */
-    rv = apr_setsocketopt(sock, APR_SO_TIMEOUT, 3 * APR_USEC_PER_SEC);
-    if (rv != APR_SUCCESS) {
-        ap_log_error(APLOG_MARK, APLOG_WARNING, rv, ap_server_conf,
-                     "set timeout on socket to connect to listener");
-        apr_socket_close(sock);
-        return rv;
-    }
-
-    rv = apr_connect(sock, pod->sa);
-    if (rv != APR_SUCCESS) {
-        int log_level = APLOG_WARNING;
-
-        if (APR_STATUS_IS_TIMEUP(rv)) {
-            /* probably some server processes bailed out already and there
-             * is nobody around to call accept and clear out the kernel
-             * connection queue; usually this is not worth logging
-             */
-            log_level = APLOG_DEBUG;
-        }
-
-        ap_log_error(APLOG_MARK, log_level, rv, ap_server_conf,
-                     "connect to listener");
-    }
-
-    apr_socket_close(sock);
-    apr_pool_destroy(p);
-
-    return rv;
-}
-
-AP_DECLARE(apr_status_t) ap_mpm_pod_signal(ap_pod_t *pod)
-{
-    apr_status_t rv;
-
-    rv = pod_signal_internal(pod);
-    if (rv != APR_SUCCESS) {
-        return rv;
-    }
-
-    return dummy_connection(pod);
-}
-
-void ap_mpm_pod_killpg(ap_pod_t *pod, int num)
-{
-    int i;
-    apr_status_t rv = APR_SUCCESS;
-
-    for (i = 0; i < num && rv == APR_SUCCESS; i++) {
-        rv = pod_signal_internal(pod);
-    }
-
-    if (rv == APR_SUCCESS) {
-        for (i = 0; i < num && rv == APR_SUCCESS; i++) {
-             rv = dummy_connection(pod);
-        }
-    }
-}
-#endif /* #ifdef AP_MPM_USES_POD */
-
-/* standard mpm configuration handling */
-#ifdef AP_MPM_WANT_SET_PIDFILE
-const char *ap_pid_fname = NULL;
-
-const char *ap_mpm_set_pidfile(cmd_parms *cmd, void *dummy,
-                               const char *arg)
-{
-    const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
-    if (err != NULL) {
-        return err;
-    }
-
-    if (cmd->server->is_virtual) {
-        return "PidFile directive not allowed in <VirtualHost>";
-    }
-
-    ap_pid_fname = arg;
-    return NULL;
-}
-#endif
-
-#ifdef AP_MPM_WANT_SET_SCOREBOARD
-const char * ap_mpm_set_scoreboard(cmd_parms *cmd, void *dummy,
-                                   const char *arg)
-{
-    const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
-    if (err != NULL) {
-        return err;
-    }
-
-    ap_scoreboard_fname = arg;
-    return NULL;
-}
-#endif
-
-#ifdef AP_MPM_WANT_SET_LOCKFILE
-const char *ap_lock_fname = NULL;
-
-const char *ap_mpm_set_lockfile(cmd_parms *cmd, void *dummy,
-                                const char *arg)
-{
-    const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
-    if (err != NULL) {
-        return err;
-    }
-
-    ap_lock_fname = arg;
-    return NULL;
-}
-#endif
-
-#ifdef AP_MPM_WANT_SET_MAX_REQUESTS
-int ap_max_requests_per_child = 0;
-
-const char *ap_mpm_set_max_requests(cmd_parms *cmd, void *dummy,
-                                    const char *arg)
-{
-    const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
-    if (err != NULL) {
-        return err;
-    }
-
-    ap_max_requests_per_child = atoi(arg);
-
-    return NULL;
-}
-#endif
-
-#ifdef AP_MPM_WANT_SET_COREDUMPDIR
-char ap_coredump_dir[MAX_STRING_LEN];
-
-const char *ap_mpm_set_coredumpdir(cmd_parms *cmd, void *dummy,
-                                   const char *arg)
-{
-    apr_status_t rv;
-    apr_finfo_t finfo;
-    const char *fname;
-    const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
-    if (err != NULL) {
-        return err;
-    }
-
-    fname = ap_server_root_relative(cmd->pool, arg);
-    if (!fname) {
-        return apr_pstrcat(cmd->pool, "Invalid CoreDumpDirectory path ", 
-                           arg, NULL);
-    }
-    if ((rv = apr_stat(&finfo, fname, APR_FINFO_TYPE, cmd->pool)) != APR_SUCCESS) {
-        return apr_pstrcat(cmd->pool, "CoreDumpDirectory ", fname,
-                           " does not exist", NULL);
-    }
-    if (finfo.filetype != APR_DIR) {
-        return apr_pstrcat(cmd->pool, "CoreDumpDirectory ", fname,
-                           " is not a directory", NULL);
-    }
-    apr_cpystrn(ap_coredump_dir, fname, sizeof(ap_coredump_dir));
-    return NULL;
-}
-#endif
-
-#ifdef AP_MPM_WANT_SET_ACCEPT_LOCK_MECH
-apr_lockmech_e ap_accept_lock_mech = APR_LOCK_DEFAULT;
-
-AP_DECLARE(const char *) ap_mpm_set_accept_lock_mech(cmd_parms *cmd,
-                                                     void *dummy,
-                                                     const char *arg)
-{
-    const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
-    if (err != NULL) {
-        return err;
-    }
-
-    if (!strcasecmp(arg, "default")) {
-        ap_accept_lock_mech = APR_LOCK_DEFAULT;
-    }
-#if APR_HAS_FLOCK_SERIALIZE
-    else if (!strcasecmp(arg, "flock")) {
-        ap_accept_lock_mech = APR_LOCK_FLOCK;
-    }
-#endif
-#if APR_HAS_FCNTL_SERIALIZE
-    else if (!strcasecmp(arg, "fcntl")) {
-        ap_accept_lock_mech = APR_LOCK_FCNTL;
-    }
-#endif
-
-    /* perchild can't use SysV sems because the permissions on the accept
-     * mutex can't be set to allow all processes to use the mutex and
-     * at the same time keep all users from being able to dink with the
-     * mutex
-     */
-#if APR_HAS_SYSVSEM_SERIALIZE && !defined(PERCHILD_MPM)
-    else if (!strcasecmp(arg, "sysvsem")) {
-        ap_accept_lock_mech = APR_LOCK_SYSVSEM;
-    }
-#endif
-#if APR_HAS_PROC_PTHREAD_SERIALIZE
-    else if (!strcasecmp(arg, "pthread")) {
-        ap_accept_lock_mech = APR_LOCK_PROC_PTHREAD;
-    }
-#endif
-    else {
-        return apr_pstrcat(cmd->pool, arg, " is an invalid mutex mechanism; "
-                           "valid ones for this platform and MPM are: default"
-#if APR_HAS_FLOCK_SERIALIZE
-                           ", flock"
-#endif
-#if APR_HAS_FCNTL_SERIALIZE
-                           ", fcntl"
-#endif
-#if APR_HAS_SYSVSEM_SERIALIZE && !defined(PERCHILD_MPM)
-                           ", sysvsem"
-#endif
-#if APR_HAS_PROC_PTHREAD_SERIALIZE
-                           ", pthread"
-#endif
-                           , NULL);
-    }
-    return NULL;
-}
-#endif
diff --git a/server/protocol.c b/server/protocol.c
deleted file mode 100644
index a8c2e72..0000000
--- a/server/protocol.c
+++ /dev/null
@@ -1,1563 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-/*
- * http_protocol.c --- routines which directly communicate with the client.
- *
- * Code originally by Rob McCool; much redone by Robert S. Thau
- * and the Apache Software Foundation.
- */
-
-#include "apr.h"
-#include "apr_strings.h"
-#include "apr_buckets.h"
-#include "apr_lib.h"
-#include "apr_signal.h"
-
-#define APR_WANT_STDIO          /* for sscanf */
-#define APR_WANT_STRFUNC
-#define APR_WANT_MEMFUNC
-#include "apr_want.h"
-
-#define CORE_PRIVATE
-#include "util_filter.h"
-#include "ap_config.h"
-#include "httpd.h"
-#include "http_config.h"
-#include "http_core.h"
-#include "http_protocol.h"
-#include "http_main.h"
-#include "http_request.h"
-#include "http_vhost.h"
-#include "http_log.h"           /* For errors detected in basic auth common
-                                 * support code... */
-#include "util_charset.h"
-#include "util_ebcdic.h"
-
-#if APR_HAVE_STDARG_H
-#include <stdarg.h>
-#endif
-#if APR_HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-
-APR_HOOK_STRUCT(
-    APR_HOOK_LINK(post_read_request)
-    APR_HOOK_LINK(log_transaction)
-    APR_HOOK_LINK(http_method)
-    APR_HOOK_LINK(default_port)
-)
-
-AP_DECLARE_DATA ap_filter_rec_t *ap_old_write_func = NULL;
-
-/*
- * Builds the content-type that should be sent to the client from the
- * content-type specified.  The following rules are followed:
- *    - if type is NULL, type is set to ap_default_type(r)
- *    - if charset adding is disabled, stop processing and return type.
- *    - then, if there are no parameters on type, add the default charset
- *    - return type
- */
-AP_DECLARE(const char *)ap_make_content_type(request_rec *r, const char *type)
-{
-    static const char *needcset[] = {
-        "text/plain",
-        "text/html",
-        NULL };
-    const char **pcset;
-    core_dir_config *conf =
-        (core_dir_config *)ap_get_module_config(r->per_dir_config,
-                                                &core_module);
-
-    if (!type) {
-        type = ap_default_type(r);
-    }
-
-    if (conf->add_default_charset != ADD_DEFAULT_CHARSET_ON) {
-        return type;
-    }
-
-    if (ap_strcasestr(type, "charset=") != NULL) {
-        /* already has parameter, do nothing */
-        /* XXX we don't check the validity */
-        ;
-    }
-    else {
-        /* see if it makes sense to add the charset. At present,
-         * we only add it if the Content-type is one of needcset[]
-         */
-        for (pcset = needcset; *pcset ; pcset++) {
-            if (ap_strcasestr(type, *pcset) != NULL) {
-                type = apr_pstrcat(r->pool, type, "; charset=",
-                                   conf->add_default_charset_name, NULL);
-                break;
-            }
-        }
-    }
-
-    return type;
-}
-
-AP_DECLARE(void) ap_set_content_length(request_rec *r, apr_off_t clength)
-{
-    r->clength = clength;
-    apr_table_setn(r->headers_out, "Content-Length",
-                   apr_off_t_toa(r->pool, clength));
-}
-
-/*
- * Return the latest rational time from a request/mtime (modification time)
- * pair.  We return the mtime unless it's in the future, in which case we
- * return the current time.  We use the request time as a reference in order
- * to limit the number of calls to time().  We don't check for futurosity
- * unless the mtime is at least as new as the reference.
- */
-AP_DECLARE(apr_time_t) ap_rationalize_mtime(request_rec *r, apr_time_t mtime)
-{
-    apr_time_t now;
-
-    /* For all static responses, it's almost certain that the file was
-     * last modified before the beginning of the request.  So there's
-     * no reason to call time(NULL) again.  But if the response has been
-     * created on demand, then it might be newer than the time the request
-     * started.  In this event we really have to call time(NULL) again
-     * so that we can give the clients the most accurate Last-Modified.  If we
-     * were given a time in the future, we return the current time - the
-     * Last-Modified can't be in the future.
-     */
-    now = (mtime < r->request_time) ? r->request_time : apr_time_now();
-    return (mtime > now) ? now : mtime;
-}
-
-/* Get a line of protocol input, including any continuation lines
- * caused by MIME folding (or broken clients) if fold != 0, and place it
- * in the buffer s, of size n bytes, without the ending newline.
- *
- * If s is NULL, ap_rgetline_core will allocate necessary memory from r->pool.
- *
- * Returns APR_SUCCESS if there are no problems and sets *read to be
- * the full length of s.
- *
- * APR_ENOSPC is returned if there is not enough buffer space.
- * Other errors may be returned on other errors.
- *
- * The LF is *not* returned in the buffer.  Therefore, a *read of 0
- * indicates that an empty line was read.
- *
- * Notes: Because the buffer uses 1 char for NUL, the most we can return is
- *        (n - 1) actual characters.
- *
- *        If no LF is detected on the last line due to a dropped connection
- *        or a full buffer, that's considered an error.
- */
-AP_DECLARE(apr_status_t) ap_rgetline_core(char **s, apr_size_t n,
-                                          apr_size_t *read, request_rec *r,
-                                          int fold)
-{
-    apr_status_t rv;
-    apr_bucket_brigade *b;
-    apr_bucket *e;
-    apr_size_t bytes_handled = 0, current_alloc = 0;
-    char *pos, *last_char = *s;
-    int do_alloc = (*s == NULL), saw_eos = 0;
-
-    b = apr_brigade_create(r->pool);
-    rv = ap_get_brigade(r->input_filters, b, AP_MODE_GETLINE,
-                        APR_BLOCK_READ, 0);
-
-    if (rv != APR_SUCCESS) {
-        apr_brigade_destroy(b);
-        return rv;
-    }
-
-    /* Something horribly wrong happened.  Someone didn't block! */
-    if (APR_BRIGADE_EMPTY(b)) {
-        apr_brigade_destroy(b);
-        return APR_EGENERAL;
-    }
-
-    APR_BRIGADE_FOREACH(e, b) {
-        const char *str;
-        apr_size_t len;
-
-        /* If we see an EOS, don't bother doing anything more. */
-        if (APR_BUCKET_IS_EOS(e)) {
-            saw_eos = 1;
-            break;
-        }
-
-        rv = apr_bucket_read(e, &str, &len, APR_BLOCK_READ);
-
-        if (rv != APR_SUCCESS) {
-            apr_brigade_destroy(b);
-            return rv;
-        }
-
-        if (len == 0) {
-            /* no use attempting a zero-byte alloc (hurts when
-             * using --with-efence --enable-pool-debug) or
-             * doing any of the other logic either
-             */
-            continue;
-        }
-
-        /* Would this overrun our buffer?  If so, we'll die. */
-        if (n < bytes_handled + len) {
-            apr_brigade_destroy(b);
-            return APR_ENOSPC;
-        }
-
-        /* Do we have to handle the allocation ourselves? */
-        if (do_alloc) {
-            /* We'll assume the common case where one bucket is enough. */
-            if (!*s) {
-                current_alloc = len;
-                *s = apr_palloc(r->pool, len);
-            }
-            else if (bytes_handled + len > current_alloc) {
-                /* We resize to the next power of 2. */
-                apr_size_t new_size = current_alloc;
-                char *new_buffer;
-
-                do {
-                    new_size *= 2;
-                } while (bytes_handled + len > new_size);
-
-                new_buffer = apr_palloc(r->pool, new_size);
-
-                /* Copy what we already had. */
-                memcpy(new_buffer, *s, bytes_handled);
-                current_alloc = new_size;
-                *s = new_buffer;
-            }
-        }
-
-        /* Just copy the rest of the data to the end of the old buffer. */
-        pos = *s + bytes_handled;
-        memcpy(pos, str, len);
-        last_char = pos + len - 1;
-
-        /* We've now processed that new data - update accordingly. */
-        bytes_handled += len;
-    }
-
-    /* We no longer need the returned brigade. */
-    apr_brigade_destroy(b);
-
-    /* We likely aborted early before reading anything or we read no
-     * data.  Technically, this might be success condition.  But,
-     * probably means something is horribly wrong.  For now, we'll
-     * treat this as APR_SUCCESS, but it may be worth re-examining.
-     */
-    if (bytes_handled == 0) {
-        *read = 0;
-        return APR_SUCCESS;
-    }
-
-    /* If we didn't get a full line of input, try again. */
-    if (*last_char != APR_ASCII_LF) {
-        /* Do we have enough space? We may be full now. */
-        if (bytes_handled < n) {
-            apr_size_t next_size, next_len;
-            char *tmp;
-
-            /* If we're doing the allocations for them, we have to
-             * give ourselves a NULL and copy it on return.
-             */
-            if (do_alloc) {
-                tmp = NULL;
-            } else {
-                /* We're not null terminated yet. */
-                tmp = last_char + 1;
-            }
-
-            next_size = n - bytes_handled;
-
-            rv = ap_rgetline_core(&tmp, next_size, &next_len, r, fold);
-
-            if (rv != APR_SUCCESS) {
-                return rv;
-            }
-
-            /* XXX this code appears to be dead because the filter chain
-             * seems to read until it sees a LF or an error.  If it ever
-             * comes back to life, we need to make sure that:
-             * - we really alloc enough space for the trailing null
-             * - we don't allow the tail trimming code to run more than
-             *   once
-             */
-            if (do_alloc && next_len > 0) {
-                char *new_buffer;
-                apr_size_t new_size = bytes_handled + next_len;
-
-                /* Again we need to alloc an extra two bytes for LF, null */
-                new_buffer = apr_palloc(r->pool, new_size);
-
-                /* Copy what we already had. */
-                memcpy(new_buffer, *s, bytes_handled);
-                memcpy(new_buffer + bytes_handled, tmp, next_len);
-                current_alloc = new_size;
-                *s = new_buffer;
-            }
-
-            bytes_handled += next_len;
-            last_char = *s + bytes_handled - 1;
-        }
-        else {
-            return APR_ENOSPC;
-        }
-    }
-
-    /* We now go backwards over any CR (if present) or white spaces.
-     *
-     * Trim any extra trailing spaces or tabs except for the first
-     * space or tab at the beginning of a blank string.  This makes
-     * it much easier to check field values for exact matches, and
-     * saves memory as well.  Terminate string at end of line.
-     */
-    pos = last_char;
-    if (pos > *s && *(pos - 1) == APR_ASCII_CR) {
-        --pos;
-    }
-
-    /* Trim any extra trailing spaces or tabs except for the first
-     * space or tab at the beginning of a blank string.  This makes
-     * it much easier to check field values for exact matches, and
-     * saves memory as well.
-     */
-    while (pos > ((*s) + 1)
-           && (*(pos - 1) == APR_ASCII_BLANK || *(pos - 1) == APR_ASCII_TAB)) {
-        --pos;
-    }
-
-    /* Since we want to remove the LF from the line, we'll go ahead
-     * and set this last character to be the term NULL and reset
-     * bytes_handled accordingly.
-     */
-    *pos = '\0';
-    last_char = pos;
-    bytes_handled = pos - *s;
-
-    /* If we're folding, we have more work to do.
-     *
-     * Note that if an EOS was seen, we know we can't have another line.
-     */
-    if (fold && bytes_handled && !saw_eos) {
-        const char *str;
-        apr_bucket_brigade *bb;
-        apr_size_t len;
-        char c;
-
-        /* Create a brigade for this filter read. */
-        bb = apr_brigade_create(r->pool);
-
-        /* We only care about the first byte. */
-        rv = ap_get_brigade(r->input_filters, bb, AP_MODE_SPECULATIVE,
-                            APR_BLOCK_READ, 1);
-
-        if (rv != APR_SUCCESS) {
-            apr_brigade_destroy(bb);
-            return rv;
-        }
-
-        if (APR_BRIGADE_EMPTY(bb)) {
-            *read = bytes_handled;
-            apr_brigade_destroy(bb);
-            return APR_SUCCESS;
-        }
-
-        e = APR_BRIGADE_FIRST(bb);
-
-        /* If we see an EOS, don't bother doing anything more. */
-        if (APR_BUCKET_IS_EOS(e)) {
-            *read = bytes_handled;
-            apr_brigade_destroy(bb);
-            return APR_SUCCESS;
-        }
-
-        rv = apr_bucket_read(e, &str, &len, APR_BLOCK_READ);
-
-        if (rv != APR_SUCCESS) {
-            apr_brigade_destroy(bb);
-            return rv;
-        }
-
-        /* When we call destroy, the buckets are deleted, so save that
-         * one character we need.  This simplifies our execution paths
-         * at the cost of one character read.
-         */
-        c = *str;
-
-        /* We no longer need the returned brigade. */
-        apr_brigade_destroy(bb);
-
-        /* Found one, so call ourselves again to get the next line.
-         *
-         * FIXME: If the folding line is completely blank, should we
-         * stop folding?  Does that require also looking at the next
-         * char?
-         */
-        if (c == APR_ASCII_BLANK || c == APR_ASCII_TAB) {
-            /* Do we have enough space? We may be full now. */
-            if (bytes_handled < n) {
-                apr_size_t next_size, next_len;
-                char *tmp;
-
-                /* If we're doing the allocations for them, we have to
-                 * give ourselves a NULL and copy it on return.
-                 */
-                if (do_alloc) {
-                    tmp = NULL;
-                } else {
-                    /* We're null terminated. */
-                    tmp = last_char;
-                }
-
-                next_size = n - bytes_handled;
-
-                rv = ap_rgetline_core(&tmp, next_size, &next_len, r, fold);
-
-                if (rv != APR_SUCCESS) {
-                    return rv;
-                }
-
-                if (do_alloc && next_len > 0) {
-                    char *new_buffer;
-                    apr_size_t new_size = bytes_handled + next_len + 1;
-
-                    /* we need to alloc an extra byte for a null */
-                    new_buffer = apr_palloc(r->pool, new_size);
-
-                    /* Copy what we already had. */
-                    memcpy(new_buffer, *s, bytes_handled);
-
-                    /* copy the new line, including the trailing null */
-                    memcpy(new_buffer + bytes_handled, tmp, next_len + 1);
-                    *s = new_buffer;
-                }
-
-                *read = bytes_handled + next_len;
-                return APR_SUCCESS;
-            }
-            else {
-                return APR_ENOSPC;
-            }
-        }
-    }
-
-    *read = bytes_handled;
-    return APR_SUCCESS;
-}
-
-#if APR_CHARSET_EBCDIC
-AP_DECLARE(apr_status_t) ap_rgetline(char **s, apr_size_t n,
-                                     apr_size_t *read, request_rec *r,
-                                     int fold)
-{
-    /* on ASCII boxes, ap_rgetline is a macro which simply invokes
-     * ap_rgetline_core with the same parms
-     *
-     * on EBCDIC boxes, each complete http protocol input line needs to be
-     * translated into the code page used by the compiler.  Since
-     * ap_rgetline_core uses recursion, we do the translation in a wrapper
-     * function to insure that each input character gets translated only once.
-     */
-    apr_status_t rv;
-
-    rv = ap_rgetline_core(s, n, read, r, fold);
-    if (rv == APR_SUCCESS) {
-        ap_xlate_proto_from_ascii(*s, *read);
-    }
-    return rv;
-}
-#endif
-
-AP_DECLARE(int) ap_getline(char *s, int n, request_rec *r, int fold)
-{
-    char *tmp_s = s;
-    apr_status_t rv;
-    apr_size_t len;
-
-    rv = ap_rgetline(&tmp_s, n, &len, r, fold);
-
-    /* Map the out-of-space condition to the old API. */
-    if (rv == APR_ENOSPC) {
-        return n;
-    }
-
-    /* Anything else is just bad. */
-    if (rv != APR_SUCCESS) {
-        return -1;
-    }
-
-    return (int)len;
-}
-
-/* parse_uri: break apart the uri
- * Side Effects:
- * - sets r->args to rest after '?' (or NULL if no '?')
- * - sets r->uri to request uri (without r->args part)
- * - sets r->hostname (if not set already) from request (scheme://host:port)
- */
-AP_CORE_DECLARE(void) ap_parse_uri(request_rec *r, const char *uri)
-{
-    int status = HTTP_OK;
-
-    r->unparsed_uri = apr_pstrdup(r->pool, uri);
-
-    if (r->method_number == M_CONNECT) {
-        status = apr_uri_parse_hostinfo(r->pool, uri, &r->parsed_uri);
-    }
-    else {
-        /* Simple syntax Errors in URLs are trapped by
-         * parse_uri_components().
-         */
-        status = apr_uri_parse(r->pool, uri, &r->parsed_uri);
-    }
-
-    if (status == APR_SUCCESS) {
-        /* if it has a scheme we may need to do absoluteURI vhost stuff */
-        if (r->parsed_uri.scheme
-            && !strcasecmp(r->parsed_uri.scheme, ap_http_method(r))) {
-            r->hostname = r->parsed_uri.hostname;
-        }
-        else if (r->method_number == M_CONNECT) {
-            r->hostname = r->parsed_uri.hostname;
-        }
-
-        r->args = r->parsed_uri.query;
-        r->uri = r->parsed_uri.path ? r->parsed_uri.path
-                 : apr_pstrdup(r->pool, "/");
-
-#if defined(OS2) || defined(WIN32)
-        /* Handle path translations for OS/2 and plug security hole.
-         * This will prevent "http://www.wherever.com/..\..\/" from
-         * returning a directory for the root drive.
-         */
-        {
-            char *x;
-
-            for (x = r->uri; (x = strchr(x, '\\')) != NULL; )
-                *x = '/';
-        }
-#endif /* OS2 || WIN32 */
-    }
-    else {
-        r->args = NULL;
-        r->hostname = NULL;
-        r->status = HTTP_BAD_REQUEST;             /* set error status */
-        r->uri = apr_pstrdup(r->pool, uri);
-    }
-}
-
-static int read_request_line(request_rec *r)
-{
-    const char *ll;
-    const char *uri;
-    const char *pro;
-
-#if 0
-    conn_rec *conn = r->connection;
-#endif
-    int major = 1, minor = 0;   /* Assume HTTP/1.0 if non-"HTTP" protocol */
-    apr_size_t len;
-
-    /* Read past empty lines until we get a real request line,
-     * a read error, the connection closes (EOF), or we timeout.
-     *
-     * We skip empty lines because browsers have to tack a CRLF on to the end
-     * of POSTs to support old CERN webservers.  But note that we may not
-     * have flushed any previous response completely to the client yet.
-     * We delay the flush as long as possible so that we can improve
-     * performance for clients that are pipelining requests.  If a request
-     * is pipelined then we won't block during the (implicit) read() below.
-     * If the requests aren't pipelined, then the client is still waiting
-     * for the final buffer flush from us, and we will block in the implicit
-     * read().  B_SAFEREAD ensures that the BUFF layer flushes if it will
-     * have to block during a read.
-     */
-
-    do {
-        apr_status_t rv;
-
-        /* insure ap_rgetline allocates memory each time thru the loop
-         * if there are empty lines
-         */
-        r->the_request = NULL;
-        rv = ap_rgetline(&(r->the_request), DEFAULT_LIMIT_REQUEST_LINE + 2,
-                         &len, r, 0);
-
-        if (rv != APR_SUCCESS) {
-            r->request_time = apr_time_now();
-            return 0;
-        }
-    } while (len <= 0);
-
-    /* we've probably got something to do, ignore graceful restart requests */
-
-    r->request_time = apr_time_now();
-    ll = r->the_request;
-    r->method = ap_getword_white(r->pool, &ll);
-
-#if 0
-/* XXX If we want to keep track of the Method, the protocol module should do
- * it.  That support isn't in the scoreboard yet.  Hopefully next week
- * sometime.   rbb */
-    ap_update_connection_status(AP_CHILD_THREAD_FROM_ID(conn->id), "Method",
-                                r->method);
-#endif
-
-    uri = ap_getword_white(r->pool, &ll);
-
-    /* Provide quick information about the request method as soon as known */
-
-    r->method_number = ap_method_number_of(r->method);
-    if (r->method_number == M_GET && r->method[0] == 'H') {
-        r->header_only = 1;
-    }
-
-    ap_parse_uri(r, uri);
-
-    /* ap_getline returns (size of max buffer - 1) if it fills up the
-     * buffer before finding the end-of-line.  This is only going to
-     * happen if it exceeds the configured limit for a request-line.
-     * The cast is safe, limit_req_line cannot be negative
-     */
-    if (len > (apr_size_t)r->server->limit_req_line) {
-        r->status    = HTTP_REQUEST_URI_TOO_LARGE;
-        r->proto_num = HTTP_VERSION(1,0);
-        r->protocol  = apr_pstrdup(r->pool, "HTTP/1.0");
-        return 0;
-    }
-
-    if (ll[0]) {
-        r->assbackwards = 0;
-        pro = ll;
-        len = strlen(ll);
-    } else {
-        r->assbackwards = 1;
-        pro = "HTTP/0.9";
-        len = 8;
-    }
-    r->protocol = apr_pstrmemdup(r->pool, pro, len);
-
-    /* XXX ap_update_connection_status(conn->id, "Protocol", r->protocol); */
-
-    /* Avoid sscanf in the common case */
-    if (len == 8
-        && pro[0] == 'H' && pro[1] == 'T' && pro[2] == 'T' && pro[3] == 'P'
-        && pro[4] == '/' && apr_isdigit(pro[5]) && pro[6] == '.'
-        && apr_isdigit(pro[7])) {
-        r->proto_num = HTTP_VERSION(pro[5] - '0', pro[7] - '0');
-    }
-    else if (2 == sscanf(r->protocol, "HTTP/%u.%u", &major, &minor)
-             && minor < HTTP_VERSION(1, 0)) /* don't allow HTTP/0.1000 */
-        r->proto_num = HTTP_VERSION(major, minor);
-    else
-        r->proto_num = HTTP_VERSION(1, 0);
-
-    return 1;
-}
-
-static void get_mime_headers(request_rec *r)
-{
-    char* field;
-    char *value;
-    apr_size_t len;
-    int fields_read = 0;
-    apr_table_t *tmp_headers;
-
-    /* We'll use apr_table_overlap later to merge these into r->headers_in. */
-    tmp_headers = apr_table_make(r->pool, 50);
-
-    /*
-     * Read header lines until we get the empty separator line, a read error,
-     * the connection closes (EOF), reach the server limit, or we timeout.
-     */
-    while(1) {
-        apr_status_t rv;
-
-        field = NULL;
-        rv = ap_rgetline(&field, DEFAULT_LIMIT_REQUEST_FIELDSIZE + 2,
-                         &len, r, 1);
-
-        /* ap_rgetline returns APR_ENOSPC if it fills up the buffer before
-         * finding the end-of-line.  This is only going to happen if it
-         * exceeds the configured limit for a field size.
-         * The cast is safe, limit_req_fieldsize cannot be negative
-         */
-        if (rv == APR_ENOSPC
-            || (rv == APR_SUCCESS 
-                && len > (apr_size_t)r->server->limit_req_fieldsize)) {
-            r->status = HTTP_BAD_REQUEST;
-            apr_table_setn(r->notes, "error-notes",
-                           apr_pstrcat(r->pool,
-                                       "Size of a request header field "
-                                       "exceeds server limit.<br />\n"
-                                       "<pre>\n",
-                                       ap_escape_html(r->pool, field),
-                                       "</pre>\n", NULL));
-            return;
-        }
-
-        if (rv != APR_SUCCESS) {
-            r->status = HTTP_BAD_REQUEST;
-            return;
-        }
-
-        /* Found a blank line, stop. */
-        if (len == 0) {
-            break;
-        }
-
-        if (r->server->limit_req_fields
-            && (++fields_read > r->server->limit_req_fields)) {
-            r->status = HTTP_BAD_REQUEST;
-            apr_table_setn(r->notes, "error-notes",
-                           "The number of request header fields exceeds "
-                           "this server's limit.");
-            return;
-        }
-
-        if (!(value = strchr(field, ':'))) {    /* Find the colon separator */
-            r->status = HTTP_BAD_REQUEST;       /* or abort the bad request */
-            apr_table_setn(r->notes, "error-notes",
-                           apr_pstrcat(r->pool,
-                                       "Request header field is missing "
-                                       "colon separator.<br />\n"
-                                       "<pre>\n",
-                                       ap_escape_html(r->pool, field),
-                                       "</pre>\n", NULL));
-            return;
-        }
-
-        *value = '\0';
-        ++value;
-        while (*value == ' ' || *value == '\t') {
-            ++value;            /* Skip to start of value   */
-        }
-
-        apr_table_addn(tmp_headers, field, value);
-    }
-
-    apr_table_overlap(r->headers_in, tmp_headers, APR_OVERLAP_TABLES_MERGE);
-}
-
-request_rec *ap_read_request(conn_rec *conn)
-{
-    request_rec *r;
-    apr_pool_t *p;
-    const char *expect;
-    int access_status;
-
-    apr_pool_create(&p, conn->pool);
-    r = apr_pcalloc(p, sizeof(request_rec));
-    r->pool            = p;
-    r->connection      = conn;
-    r->server          = conn->base_server;
-
-    r->user            = NULL;
-    r->ap_auth_type    = NULL;
-
-    r->allowed_methods = ap_make_method_list(p, 2);
-
-    r->headers_in      = apr_table_make(r->pool, 25);
-    r->subprocess_env  = apr_table_make(r->pool, 25);
-    r->headers_out     = apr_table_make(r->pool, 12);
-    r->err_headers_out = apr_table_make(r->pool, 5);
-    r->notes           = apr_table_make(r->pool, 5);
-
-    r->request_config  = ap_create_request_config(r->pool);
-    /* Must be set before we run create request hook */
-
-    r->proto_output_filters = conn->output_filters;
-    r->output_filters  = r->proto_output_filters;
-    r->proto_input_filters = conn->input_filters;
-    r->input_filters   = r->proto_input_filters;
-    ap_run_create_request(r);
-    r->per_dir_config  = r->server->lookup_defaults;
-
-    r->sent_bodyct     = 0;                      /* bytect isn't for body */
-
-    r->read_length     = 0;
-    r->read_body       = REQUEST_NO_BODY;
-
-    r->status          = HTTP_REQUEST_TIME_OUT;  /* Until we get a request */
-    r->the_request     = NULL;
-
-    /* Get the request... */
-    if (!read_request_line(r)) {
-        if (r->status == HTTP_REQUEST_URI_TOO_LARGE) {
-            ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                          "request failed: URI too long");
-            ap_send_error_response(r, 0);
-            ap_run_log_transaction(r);
-            return r;
-        }
-
-        return NULL;
-    }
-
-    if (!r->assbackwards) {
-        get_mime_headers(r);
-        if (r->status != HTTP_REQUEST_TIME_OUT) {
-            ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                          "request failed: error reading the headers");
-            ap_send_error_response(r, 0);
-            ap_run_log_transaction(r);
-            return r;
-        }
-    }
-    else {
-        if (r->header_only) {
-            /*
-             * Client asked for headers only with HTTP/0.9, which doesn't send
-             * headers! Have to dink things just to make sure the error message
-             * comes through...
-             */
-            ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                          "client sent invalid HTTP/0.9 request: HEAD %s",
-                          r->uri);
-            r->header_only = 0;
-            r->status = HTTP_BAD_REQUEST;
-            ap_send_error_response(r, 0);
-            ap_run_log_transaction(r);
-            return r;
-        }
-    }
-
-    r->status = HTTP_OK;                         /* Until further notice. */
-
-    /* update what we think the virtual host is based on the headers we've
-     * now read. may update status.
-     */
-    ap_update_vhost_from_headers(r);
-
-    /* we may have switched to another server */
-    r->per_dir_config = r->server->lookup_defaults;
-
-    if ((!r->hostname && (r->proto_num >= HTTP_VERSION(1, 1)))
-        || ((r->proto_num == HTTP_VERSION(1, 1))
-            && !apr_table_get(r->headers_in, "Host"))) {
-        /*
-         * Client sent us an HTTP/1.1 or later request without telling us the
-         * hostname, either with a full URL or a Host: header. We therefore
-         * need to (as per the 1.1 spec) send an error.  As a special case,
-         * HTTP/1.1 mentions twice (S9, S14.23) that a request MUST contain
-         * a Host: header, and the server MUST respond with 400 if it doesn't.
-         */
-        r->status = HTTP_BAD_REQUEST;
-        ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                      "client sent HTTP/1.1 request without hostname "
-                      "(see RFC2616 section 14.23): %s", r->uri);
-    }
-
-    if (r->status != HTTP_OK) {
-        ap_send_error_response(r, 0);
-        ap_run_log_transaction(r);
-        return r;
-    }
-
-    if (((expect = apr_table_get(r->headers_in, "Expect")) != NULL)
-        && (expect[0] != '\0')) {
-        /*
-         * The Expect header field was added to HTTP/1.1 after RFC 2068
-         * as a means to signal when a 100 response is desired and,
-         * unfortunately, to signal a poor man's mandatory extension that
-         * the server must understand or return 417 Expectation Failed.
-         */
-        if (strcasecmp(expect, "100-continue") == 0) {
-            r->expecting_100 = 1;
-        }
-        else {
-            r->status = HTTP_EXPECTATION_FAILED;
-            ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_INFO, 0, r,
-                          "client sent an unrecognized expectation value of "
-                          "Expect: %s", expect);
-            ap_send_error_response(r, 0);
-            (void) ap_discard_request_body(r);
-            ap_run_log_transaction(r);
-            return r;
-        }
-    }
-
-    ap_add_input_filter_handle(ap_http_input_filter_handle,
-                               NULL, r, r->connection);
-
-    if ((access_status = ap_run_post_read_request(r))) {
-        ap_die(access_status, r);
-        ap_run_log_transaction(r);
-        return NULL;
-    }
-
-    return r;
-}
-
-/*
- * A couple of other functions which initialize some of the fields of
- * a request structure, as appropriate for adjuncts of one kind or another
- * to a request in progress.  Best here, rather than elsewhere, since
- * *someone* has to set the protocol-specific fields...
- */
-
-void ap_set_sub_req_protocol(request_rec *rnew, const request_rec *r)
-{
-    rnew->the_request     = r->the_request;  /* Keep original request-line */
-
-    rnew->assbackwards    = 1;   /* Don't send headers from this. */
-    rnew->no_local_copy   = 1;   /* Don't try to send HTTP_NOT_MODIFIED for a
-                                  * fragment. */
-    rnew->method          = "GET";
-    rnew->method_number   = M_GET;
-    rnew->protocol        = "INCLUDED";
-
-    rnew->status          = HTTP_OK;
-
-    rnew->headers_in      = r->headers_in;
-    rnew->subprocess_env  = apr_table_copy(rnew->pool, r->subprocess_env);
-    rnew->headers_out     = apr_table_make(rnew->pool, 5);
-    rnew->err_headers_out = apr_table_make(rnew->pool, 5);
-    rnew->notes           = apr_table_make(rnew->pool, 5);
-
-    rnew->expecting_100   = r->expecting_100;
-    rnew->read_length     = r->read_length;
-    rnew->read_body       = REQUEST_NO_BODY;
-
-    rnew->main = (request_rec *) r;
-}
-
-static void end_output_stream(request_rec *r)
-{
-    apr_bucket_brigade *bb;
-    apr_bucket *b;
-
-    bb = apr_brigade_create(r->pool);
-    b = apr_bucket_eos_create();
-    APR_BRIGADE_INSERT_TAIL(bb, b);
-    ap_pass_brigade(r->output_filters, bb);
-}
-
-void ap_finalize_sub_req_protocol(request_rec *sub)
-{
-    end_output_stream(sub);
-}
-
-/* finalize_request_protocol is called at completion of sending the
- * response.  Its sole purpose is to send the terminating protocol
- * information for any wrappers around the response message body
- * (i.e., transfer encodings).  It should have been named finalize_response.
- */
-AP_DECLARE(void) ap_finalize_request_protocol(request_rec *r)
-{
-    while (r->next) {
-        r = r->next;
-    }
-
-    /* tell the filter chain there is no more content coming */
-    if (!r->eos_sent) {
-        end_output_stream(r);
-    }
-}
-
-/*
- * Support for the Basic authentication protocol, and a bit for Digest.
- */
-AP_DECLARE(void) ap_note_auth_failure(request_rec *r)
-{
-    const char *type = ap_auth_type(r);
-    if (type) {
-        if (!strcasecmp(type, "Basic"))
-            ap_note_basic_auth_failure(r);
-        else if (!strcasecmp(type, "Digest"))
-            ap_note_digest_auth_failure(r);
-    }
-    else {
-        ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR,
-                      0, r, "need AuthType to note auth failure: %s", r->uri);
-    }
-}
-
-AP_DECLARE(void) ap_note_basic_auth_failure(request_rec *r)
-{
-    const char *type = ap_auth_type(r);
-
-    /* if there is no AuthType configure or it is something other than
-     * Basic, let ap_note_auth_failure() deal with it
-     */
-    if (!type || strcasecmp(type, "Basic"))
-        ap_note_auth_failure(r);
-    else
-        apr_table_setn(r->err_headers_out,
-                       (PROXYREQ_PROXY == r->proxyreq) ? "Proxy-Authenticate"
-                                                       : "WWW-Authenticate",
-                       apr_pstrcat(r->pool, "Basic realm=\"", ap_auth_name(r),
-                                   "\"", NULL));
-}
-
-AP_DECLARE(void) ap_note_digest_auth_failure(request_rec *r)
-{
-    apr_table_setn(r->err_headers_out,
-                   (PROXYREQ_PROXY == r->proxyreq) ? "Proxy-Authenticate"
-                                                   : "WWW-Authenticate",
-                   apr_psprintf(r->pool, "Digest realm=\"%s\", nonce=\"%llx\"",
-                                ap_auth_name(r), r->request_time));
-}
-
-AP_DECLARE(int) ap_get_basic_auth_pw(request_rec *r, const char **pw)
-{
-    const char *auth_line = apr_table_get(r->headers_in,
-                                          (PROXYREQ_PROXY == r->proxyreq)
-                                              ? "Proxy-Authorization"
-                                              : "Authorization");
-    const char *t;
-
-    if (!(t = ap_auth_type(r)) || strcasecmp(t, "Basic"))
-        return DECLINED;
-
-    if (!ap_auth_name(r)) {
-        ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR,
-                      0, r, "need AuthName: %s", r->uri);
-        return HTTP_INTERNAL_SERVER_ERROR;
-    }
-
-    if (!auth_line) {
-        ap_note_basic_auth_failure(r);
-        return HTTP_UNAUTHORIZED;
-    }
-
-    if (strcasecmp(ap_getword(r->pool, &auth_line, ' '), "Basic")) {
-        /* Client tried to authenticate using wrong auth scheme */
-        ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                      "client used wrong authentication scheme: %s", r->uri);
-        ap_note_basic_auth_failure(r);
-        return HTTP_UNAUTHORIZED;
-    }
-
-    while (*auth_line == ' ' || *auth_line == '\t') {
-        auth_line++;
-    }
-
-    t = ap_pbase64decode(r->pool, auth_line);
-    /* Note that this allocation has to be made from r->connection->pool
-     * because it has the lifetime of the connection.  The other allocations
-     * are temporary and can be tossed away any time.
-     */
-    r->user = ap_getword_nulls (r->pool, &t, ':');
-    r->ap_auth_type = "Basic";
-
-    *pw = t;
-
-    return OK;
-}
-
-struct content_length_ctx {
-    apr_bucket_brigade *saved;
-    int compute_len;
-    apr_size_t curr_len;
-};
-
-/* This filter computes the content length, but it also computes the number
- * of bytes sent to the client.  This means that this filter will always run
- * through all of the buckets in all brigades
- */
-AP_CORE_DECLARE_NONSTD(apr_status_t) ap_content_length_filter(ap_filter_t *f,
-                                         apr_bucket_brigade *b)
-{
-    request_rec *r = f->r;
-    struct content_length_ctx *ctx;
-    apr_status_t rv;
-    apr_bucket *e;
-    int eos = 0, flush = 0, partial_send_okay = 0;
-    apr_bucket_brigade *more, *split;
-    apr_read_type_e eblock = APR_NONBLOCK_READ;
-
-    ctx = f->ctx;
-    if (!ctx) { /* first time through */
-        f->ctx = ctx = apr_pcalloc(r->pool, sizeof(struct content_length_ctx));
-        ctx->compute_len = 1;   /* Assume we will compute the length */
-    }
-
-    /* Humm, is this check the best it can be?
-     * - protocol >= HTTP/1.1 implies support for chunking
-     * - non-keepalive implies the end of byte stream will be signaled
-     *    by a connection close
-     * In both cases, we can send bytes to the client w/o needing to
-     * compute content-length.
-     * Todo:
-     * We should be able to force connection close from this filter
-     * when we see we are buffering too much.
-     */
-    if ((r->proto_num >= HTTP_VERSION(1, 1))
-        || (!f->r->connection->keepalive)) {
-        partial_send_okay = 1;
-    }
-
-    more = b;
-    while (more) {
-        b = more;
-        more = NULL;
-        split = NULL;
-        flush = 0;
-
-        APR_BRIGADE_FOREACH(e, b) {
-            const char *ignored;
-            apr_size_t len;
-            len = 0;
-            if (APR_BUCKET_IS_EOS(e)) {
-                eos = 1;
-            }
-            else if (APR_BUCKET_IS_FLUSH(e)) {
-                if (partial_send_okay) {
-                    split = b;
-                    more = apr_brigade_split(b, APR_BUCKET_NEXT(e));
-                    break;
-                }
-            }
-            else if ((ctx->curr_len > 4 * AP_MIN_BYTES_TO_WRITE)) {
-                /* If we've accumulated more than 4xAP_MIN_BYTES_TO_WRITE and
-                 * the client supports chunked encoding, send what we have
-                 * and come back for more.
-                 */
-                if (partial_send_okay) {
-                    split = b;
-                    more = apr_brigade_split(b, e);
-                    break;
-                }
-            }
-            if (e->length == -1) { /* if length unknown */
-                rv = apr_bucket_read(e, &ignored, &len, eblock);
-                if (rv == APR_SUCCESS) {
-                    /* Attempt a nonblocking read next time through */
-                    eblock = APR_NONBLOCK_READ;
-                }
-                else if (APR_STATUS_IS_EAGAIN(rv)) {
-                    /* Make the next read blocking.  If the client supports
-                     * chunked encoding, flush the filter stack to the network.
-                     */
-                    eblock = APR_BLOCK_READ;
-                    if (partial_send_okay) {
-                        split = b;
-                        more = apr_brigade_split(b, e);
-                        flush = 1;
-                        break;
-                    }
-                }
-                else if (rv != APR_EOF) {
-                    ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
-                                  "ap_content_length_filter: "
-                                  "apr_bucket_read() failed");
-                    return rv;
-                }
-            }
-            else {
-                len = e->length;
-            }
-
-            ctx->curr_len += len;
-            r->bytes_sent += len;
-        }
-
-        if (split) {
-            ctx->compute_len = 0;  /* Ooops, can't compute the length now */
-            ctx->curr_len = 0;
-            if (ctx->saved) {
-                APR_BRIGADE_CONCAT(ctx->saved, split);
-                apr_brigade_destroy(split);
-                split = ctx->saved;
-                ctx->saved = NULL;
-            }
-
-            if (flush) {
-                rv = ap_fflush(f->next, split);
-            }
-            else {
-                rv = ap_pass_brigade(f->next, split);
-            }
-
-            if (rv != APR_SUCCESS)
-                return rv;
-        }
-    }
-
-    if ((ctx->curr_len < AP_MIN_BYTES_TO_WRITE) && !eos) {
-        return ap_save_brigade(f, &ctx->saved, &b,
-                               (r->main) ? r->main->pool : r->pool);
-    }
-
-    if (ctx->compute_len) {
-        /* save the brigade; we can't pass any data to the next
-         * filter until we have the entire content length
-         */
-        if (!eos) {
-            return ap_save_brigade(f, &ctx->saved, &b, r->pool);
-        }
-
-        ap_set_content_length(r, r->bytes_sent);
-    }
-
-    if (ctx->saved) {
-        APR_BRIGADE_CONCAT(ctx->saved, b);
-        apr_brigade_destroy(b);
-        b = ctx->saved;
-        ctx->saved = NULL;
-    }
-
-    ctx->curr_len = 0;
-    return ap_pass_brigade(f->next, b);
-}
-
-/*
- * Send the body of a response to the client.
- */
-AP_DECLARE(apr_status_t) ap_send_fd(apr_file_t *fd, request_rec *r,
-                                    apr_off_t offset, apr_size_t len,
-                                    apr_size_t *nbytes)
-{
-    apr_bucket_brigade *bb = NULL;
-    apr_bucket *b;
-    apr_status_t rv;
-
-    bb = apr_brigade_create(r->pool);
-    b = apr_bucket_file_create(fd, offset, len, r->pool);
-    APR_BRIGADE_INSERT_TAIL(bb, b);
-
-    rv = ap_pass_brigade(r->output_filters, bb);
-    if (rv != APR_SUCCESS) {
-        *nbytes = 0; /* no way to tell how many were actually sent */
-    }
-    else {
-        *nbytes = len;
-    }
-
-    return rv;
-}
-
-#if APR_HAS_MMAP
-/* send data from an in-memory buffer */
-AP_DECLARE(size_t) ap_send_mmap(apr_mmap_t *mm, request_rec *r, size_t offset,
-                                size_t length)
-{
-    apr_bucket_brigade *bb = NULL;
-    apr_bucket *b;
-
-    bb = apr_brigade_create(r->pool);
-    b = apr_bucket_mmap_create(mm, offset, length);
-    APR_BRIGADE_INSERT_TAIL(bb, b);
-    ap_pass_brigade(r->output_filters, bb);
-
-    return mm->size; /* XXX - change API to report apr_status_t? */
-}
-#endif /* APR_HAS_MMAP */
-
-typedef struct {
-    apr_bucket_brigade *bb;
-} old_write_filter_ctx;
-
-AP_CORE_DECLARE_NONSTD(apr_status_t) ap_old_write_filter(
-    ap_filter_t *f, apr_bucket_brigade *bb)
-{
-    old_write_filter_ctx *ctx = f->ctx;
-
-    AP_DEBUG_ASSERT(ctx);
-
-    if (ctx->bb != 0) {
-        /* whatever is coming down the pipe (we don't care), we
-         * can simply insert our buffered data at the front and
-         * pass the whole bundle down the chain.
-         */
-        APR_BRIGADE_CONCAT(ctx->bb, bb);
-        bb = ctx->bb;
-        ctx->bb = NULL;
-    }
-
-    return ap_pass_brigade(f->next, bb);
-}
-
-static apr_status_t buffer_output(request_rec *r,
-                                  const char *str, apr_size_t len)
-{
-    ap_filter_t *f;
-    old_write_filter_ctx *ctx;
-
-    if (len == 0)
-        return APR_SUCCESS;
-
-    /* future optimization: record some flags in the request_rec to
-     * say whether we've added our filter, and whether it is first.
-     */
-
-    /* this will typically exit on the first test */
-    for (f = r->output_filters; f != NULL; f = f->next) {
-        if (ap_old_write_func == f->frec)
-            break;
-    }
-
-    if (f == NULL) {
-        /* our filter hasn't been added yet */
-        ctx = apr_pcalloc(r->pool, sizeof(*ctx));
-        ap_add_output_filter("OLD_WRITE", ctx, r, r->connection);
-        f = r->output_filters;
-    }
-
-    /* if the first filter is not our buffering filter, then we have to
-     * deliver the content through the normal filter chain
-     */
-    if (f != r->output_filters) {
-        apr_bucket_brigade *bb = apr_brigade_create(r->pool);
-        apr_bucket *b = apr_bucket_transient_create(str, len);
-        APR_BRIGADE_INSERT_TAIL(bb, b);
-
-        return ap_pass_brigade(r->output_filters, bb);
-    }
-
-    /* grab the context from our filter */
-    ctx = r->output_filters->ctx;
-
-    if (ctx->bb == NULL) {
-        ctx->bb = apr_brigade_create(r->pool);
-    }
-
-    return ap_fwrite(f->next, ctx->bb, str, len);
-}
-
-AP_DECLARE(int) ap_rputc(int c, request_rec *r)
-{
-    char c2 = (char)c;
-
-    if (r->connection->aborted) {
-        return -1;
-    }
-
-    if (buffer_output(r, &c2, 1) != APR_SUCCESS)
-        return -1;
-
-    return c;
-}
-
-AP_DECLARE(int) ap_rputs(const char *str, request_rec *r)
-{
-    apr_size_t len;
-
-    if (r->connection->aborted)
-        return -1;
-
-    if (buffer_output(r, str, len = strlen(str)) != APR_SUCCESS)
-        return -1;
-
-    return len;
-}
-
-AP_DECLARE(int) ap_rwrite(const void *buf, int nbyte, request_rec *r)
-{
-    if (r->connection->aborted)
-        return -1;
-
-    if (buffer_output(r, buf, nbyte) != APR_SUCCESS)
-        return -1;
-
-    return nbyte;
-}
-
-struct ap_vrprintf_data {
-    apr_vformatter_buff_t vbuff;
-    request_rec *r;
-    char *buff;
-};
-
-static apr_status_t r_flush(apr_vformatter_buff_t *buff)
-{
-    /* callback function passed to ap_vformatter to be called when
-     * vformatter needs to write into buff and buff.curpos > buff.endpos */
-
-    /* ap_vrprintf_data passed as a apr_vformatter_buff_t, which is then
-     * "downcast" to an ap_vrprintf_data */
-    struct ap_vrprintf_data *vd = (struct ap_vrprintf_data*)buff;
-
-    if (vd->r->connection->aborted)
-        return -1;
-
-    /* r_flush is called when vbuff is completely full */
-    if (buffer_output(vd->r, vd->buff, AP_IOBUFSIZE)) {
-        return -1;
-    }
-
-    /* reset the buffer position */
-    vd->vbuff.curpos = vd->buff;
-    vd->vbuff.endpos = vd->buff + AP_IOBUFSIZE;
-
-    return APR_SUCCESS;
-}
-
-AP_DECLARE(int) ap_vrprintf(request_rec *r, const char *fmt, va_list va)
-{
-    apr_size_t written;
-    struct ap_vrprintf_data vd;
-    char vrprintf_buf[AP_IOBUFSIZE];
-
-    vd.vbuff.curpos = vrprintf_buf;
-    vd.vbuff.endpos = vrprintf_buf + AP_IOBUFSIZE;
-    vd.r = r;
-    vd.buff = vrprintf_buf;
-
-    if (r->connection->aborted)
-        return -1;
-
-    written = apr_vformatter(r_flush, &vd.vbuff, fmt, va);
-
-    /* tack on null terminator on remaining string */
-    *(vd.vbuff.curpos) = '\0';
-
-    if (written != -1) {
-        int n = vd.vbuff.curpos - vrprintf_buf;
-
-        /* last call to buffer_output, to finish clearing the buffer */
-        if (buffer_output(r, vrprintf_buf,n) != APR_SUCCESS)
-            return -1;
-
-        written += n;
-    }
-
-    return written;
-}
-
-AP_DECLARE_NONSTD(int) ap_rprintf(request_rec *r, const char *fmt, ...)
-{
-    va_list va;
-    int n;
-
-    if (r->connection->aborted)
-        return -1;
-
-    va_start(va, fmt);
-    n = ap_vrprintf(r, fmt, va);
-    va_end(va);
-
-    return n;
-}
-
-AP_DECLARE_NONSTD(int) ap_rvputs(request_rec *r, ...)
-{
-    va_list va;
-    const char *s;
-    apr_size_t len;
-    apr_size_t written = 0;
-
-    if (r->connection->aborted)
-        return -1;
-
-    /* ### TODO: if the total output is large, put all the strings
-     * ### into a single brigade, rather than flushing each time we
-     * ### fill the buffer
-     */
-    va_start(va, r);
-    while (1) {
-        s = va_arg(va, const char *);
-        if (s == NULL)
-            break;
-
-        len = strlen(s);
-        if (buffer_output(r, s, len) != APR_SUCCESS) {
-            return -1;
-        }
-
-        written += len;
-    }
-    va_end(va);
-
-    return written;
-}
-
-AP_DECLARE(int) ap_rflush(request_rec *r)
-{
-    apr_bucket_brigade *bb;
-    apr_bucket *b;
-
-    bb = apr_brigade_create(r->pool);
-    b = apr_bucket_flush_create();
-    APR_BRIGADE_INSERT_TAIL(bb, b);
-    if (ap_pass_brigade(r->output_filters, bb) != APR_SUCCESS)
-        return -1;
-
-    return 0;
-}
-
-/*
- * This function sets the Last-Modified output header field to the value
- * of the mtime field in the request structure - rationalized to keep it from
- * being in the future.
- */
-AP_DECLARE(void) ap_set_last_modified(request_rec *r)
-{
-    if (!r->assbackwards) {
-        apr_time_t mod_time = ap_rationalize_mtime(r, r->mtime);
-        char *datestr = apr_palloc(r->pool, APR_RFC822_DATE_LEN);
-
-        apr_rfc822_date(datestr, mod_time);
-        apr_table_setn(r->headers_out, "Last-Modified", datestr);
-    }
-}
-
-AP_IMPLEMENT_HOOK_RUN_ALL(int,post_read_request,
-                          (request_rec *r), (r), OK, DECLINED)
-AP_IMPLEMENT_HOOK_RUN_ALL(int,log_transaction,
-                          (request_rec *r), (r), OK, DECLINED)
-AP_IMPLEMENT_HOOK_RUN_FIRST(const char *,http_method,
-                            (const request_rec *r), (r), NULL)
-AP_IMPLEMENT_HOOK_RUN_FIRST(unsigned short,default_port,
-                            (const request_rec *r), (r), 0)
diff --git a/server/request.c b/server/request.c
deleted file mode 100644
index ac37486..0000000
--- a/server/request.c
+++ /dev/null
@@ -1,1913 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-/*
- * http_request.c: functions to get and process requests
- *
- * Rob McCool 3/21/93
- *
- * Thoroughly revamped by rst for Apache.  NB this file reads
- * best from the bottom up.
- *
- */
-
-#include "apr_strings.h"
-#include "apr_file_io.h"
-#include "apr_fnmatch.h"
-
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-#define CORE_PRIVATE
-#include "ap_config.h"
-#include "httpd.h"
-#include "http_config.h"
-#include "http_request.h"
-#include "http_core.h"
-#include "http_protocol.h"
-#include "http_log.h"
-#include "http_main.h"
-#include "util_filter.h"
-#include "util_charset.h"
-#include "util_script.h"
-
-#include "mod_core.h"
-
-#if APR_HAVE_STDARG_H
-#include <stdarg.h>
-#endif
-
-APR_HOOK_STRUCT(
-    APR_HOOK_LINK(translate_name)
-    APR_HOOK_LINK(map_to_storage)
-    APR_HOOK_LINK(check_user_id)
-    APR_HOOK_LINK(fixups)
-    APR_HOOK_LINK(type_checker)
-    APR_HOOK_LINK(access_checker)
-    APR_HOOK_LINK(auth_checker)
-    APR_HOOK_LINK(insert_filter)
-    APR_HOOK_LINK(create_request)
-)
-
-AP_IMPLEMENT_HOOK_RUN_FIRST(int,translate_name,
-                            (request_rec *r), (r), DECLINED)
-AP_IMPLEMENT_HOOK_RUN_FIRST(int,map_to_storage,
-                            (request_rec *r), (r), DECLINED)
-AP_IMPLEMENT_HOOK_RUN_FIRST(int,check_user_id,
-                            (request_rec *r), (r), DECLINED)
-AP_IMPLEMENT_HOOK_RUN_ALL(int,fixups,
-                          (request_rec *r), (r), OK, DECLINED)
-AP_IMPLEMENT_HOOK_RUN_FIRST(int,type_checker,
-                            (request_rec *r), (r), DECLINED)
-AP_IMPLEMENT_HOOK_RUN_ALL(int,access_checker,
-                          (request_rec *r), (r), OK, DECLINED)
-AP_IMPLEMENT_HOOK_RUN_FIRST(int,auth_checker,
-                            (request_rec *r), (r), DECLINED)
-AP_IMPLEMENT_HOOK_VOID(insert_filter, (request_rec *r), (r))
-AP_IMPLEMENT_HOOK_RUN_ALL(int, create_request,
-                          (request_rec *r), (r), OK, DECLINED)
-
-
-static int decl_die(int status, char *phase, request_rec *r)
-{
-    if (status == DECLINED) {
-        ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_CRIT, 0, r,
-                      "configuration error:  couldn't %s: %s", phase, r->uri);
-        return HTTP_INTERNAL_SERVER_ERROR;
-    }
-    else {
-        return status;
-    }
-}
-
-/* This is the master logic for processing requests.  Do NOT duplicate
- * this logic elsewhere, or the security model will be broken by future
- * API changes.  Each phase must be individually optimized to pick up
- * redundant/duplicate calls by subrequests, and redirects.
- */
-AP_DECLARE(int) ap_process_request_internal(request_rec *r)
-{
-    int file_req = (r->main && r->filename);
-    int access_status;
-
-    /* Give quick handlers a shot at serving the request on the fast
-     * path, bypassing all of the other Apache hooks. Bypass the call
-     * for dirent subrequests (any other cases to bypass?)
-     *
-     * This hook was added to enable serving files out of a URI keyed 
-     * content cache ( e.g., Mike Abbott's Quick Shortcut Cache, 
-     * described here: http://oss.sgi.com/projects/apache/mod_qsc.html )
-     *
-     * It may have other uses as well, such as routing requests directly to
-     * content handlers that have the ability to grok HTTP and do their
-     * own access checking, etc (e.g. servlet engines). 
-     * 
-     * Use this hook with extreme care and only if you know what you are 
-     * doing. This hook is available to (non dirent) subrequests.
-     */
-    if (!(r->main && r->filename && r->finfo.filetype)) {
-        /* TODO?: Add a field to the request_rec explicitly identifying
-         * the type of subrequest?
-         */
-        access_status = ap_run_quick_handler(r);
-        if (access_status != DECLINED) {
-            if (access_status == OK) {
-                return DONE;
-            }
-            else  {
-                return access_status;
-            }
-        }
-    }
-
-    /* Ignore embedded %2F's in path for proxy requests */
-    if (!r->proxyreq && r->parsed_uri.path) {
-        access_status = ap_unescape_url(r->parsed_uri.path);
-        if (access_status) {
-            return access_status;
-        }
-    }
-
-    ap_getparents(r->uri);     /* OK --- shrinking transformations... */
-
-    /* All file subrequests are a huge pain... they cannot bubble through the
-     * next several steps.  Only file subrequests are allowed an empty uri,
-     * otherwise let translate_name kill the request.
-     */
-    if (!file_req) {
-        if ((access_status = ap_location_walk(r))) {
-            return access_status;
-        }
-
-        if ((access_status = ap_run_translate_name(r))) {
-            return decl_die(access_status, "translate", r);
-        }
-    }
-
-    /* Reset to the server default config prior to running map_to_storage
-     */
-    r->per_dir_config = r->server->lookup_defaults;
-
-    if ((access_status = ap_run_map_to_storage(r))) {
-        /* This request wasn't in storage (e.g. TRACE) */
-        return access_status;
-    }
-
-    /* Excluding file-specific requests with no 'true' URI...
-     */
-    if (!file_req) {
-        /* Rerun the location walk, which overrides any map_to_storage config.
-         */
-        if ((access_status = ap_location_walk(r))) {
-            return access_status;
-        }
-    }
-
-    /* Only on the main request! */
-    if (r->main == NULL) {
-        if ((access_status = ap_run_header_parser(r))) {
-            return access_status;
-        }
-    }
-
-    /* Skip authn/authz if the parent or prior request passed the authn/authz,
-     * and that configuration didn't change (this requires optimized _walk()
-     * functions in map_to_storage that use the same merge results given
-     * identical input.)  If the config changes, we must re-auth.
-     */
-    if (r->main && (r->main->per_dir_config == r->per_dir_config)) {
-        r->user = r->main->user;
-        r->ap_auth_type = r->main->ap_auth_type;
-    }
-    else if (r->prev && (r->prev->per_dir_config == r->per_dir_config)) {
-        r->user = r->prev->user;
-        r->ap_auth_type = r->prev->ap_auth_type;
-    }
-    else {
-        switch (ap_satisfies(r)) {
-        case SATISFY_ALL:
-        case SATISFY_NOSPEC:
-            if ((access_status = ap_run_access_checker(r)) != 0) {
-                return decl_die(access_status, "check access", r);
-            }
-
-            if (ap_some_auth_required(r)) {
-                if (((access_status = ap_run_check_user_id(r)) != 0)
-                    || !ap_auth_type(r)) {
-                    return decl_die(access_status, ap_auth_type(r)
-                                  ? "check user.  No user file?"
-                                  : "perform authentication. AuthType not set!",
-                                  r);
-                }
-
-                if (((access_status = ap_run_auth_checker(r)) != 0)
-                    || !ap_auth_type(r)) {
-                    return decl_die(access_status, ap_auth_type(r)
-                                  ? "check access.  No groups file?"
-                                  : "perform authentication. AuthType not set!",
-                                   r);
-                }
-            }
-            break;
-
-        case SATISFY_ANY:
-            if (((access_status = ap_run_access_checker(r)) != 0)
-                || !ap_auth_type(r)) {
-                if (!ap_some_auth_required(r)) {
-                    return decl_die(access_status, ap_auth_type(r)
-                                  ? "check access"
-                                  : "perform authentication. AuthType not set!",
-                                  r);
-                }
-
-                if (((access_status = ap_run_check_user_id(r)) != 0)
-                    || !ap_auth_type(r)) {
-                    return decl_die(access_status, ap_auth_type(r)
-                                  ? "check user.  No user file?"
-                                  : "perform authentication. AuthType not set!",
-                                  r);
-                }
-
-                if (((access_status = ap_run_auth_checker(r)) != 0)
-                    || !ap_auth_type(r)) {
-                    return decl_die(access_status, ap_auth_type(r)
-                                  ? "check access.  No groups file?"
-                                  : "perform authentication. AuthType not set!",
-                                  r);
-                }
-            }
-            break;
-        }
-    }
-    /* XXX Must make certain the ap_run_type_checker short circuits mime
-     * in mod-proxy for r->proxyreq && r->parsed_uri.scheme
-     *                              && !strcmp(r->parsed_uri.scheme, "http")
-     */
-    if ((access_status = ap_run_type_checker(r)) != 0) {
-        return decl_die(access_status, "find types", r);
-    }
-
-    if ((access_status = ap_run_fixups(r)) != 0) {
-        return access_status;
-    }
-
-    return OK;
-}
-
-
-/* Useful caching structures to repeat _walk/merge sequences as required
- * when a subrequest or redirect reuses substantially the same config.
- *
- * Directive order in the httpd.conf file and its Includes significantly
- * impact this optimization.  Grouping common blocks at the front of the
- * config that are less likely to change between a request and
- * its subrequests, or between a request and its redirects reduced
- * the work of these functions significantly.
- */
-
-typedef struct walk_walked_t {
-    ap_conf_vector_t *matched; /* A dir_conf sections we matched */
-    ap_conf_vector_t *merged;  /* The dir_conf merged result */
-} walk_walked_t;
-
-typedef struct walk_cache_t {
-    const char         *cached;          /* The identifier we matched */
-    ap_conf_vector_t  **dir_conf_tested; /* The sections we matched against */
-    ap_conf_vector_t   *dir_conf_merged; /* Base per_dir_config */
-    ap_conf_vector_t   *per_dir_result;  /* per_dir_config += walked result */
-    apr_array_header_t *walked;          /* The list of walk_walked_t results */
-} walk_cache_t;
-
-static walk_cache_t *prep_walk_cache(apr_size_t t, request_rec *r)
-{
-    walk_cache_t *cache;
-    void **note;
-
-    /* Find the most relevant, recent entry to work from.  That would be
-     * this request (on the second call), or the parent request of a
-     * subrequest, or the prior request of an internal redirect.  Provide
-     * this _walk()er with a copy it is allowed to munge.  If there is no
-     * parent or prior cached request, then create a new walk cache.
-     */
-    note = ap_get_request_note(r, t);
-    if (!note) {
-        return NULL;
-    }
-
-    if (!(cache = *note)) {
-        void **inherit_note;
-
-        if ((r->main
-             && ((inherit_note = ap_get_request_note(r->main, t)))
-             && *inherit_note)
-            || (r->prev
-                && ((inherit_note = ap_get_request_note(r->prev, t)))
-                && *inherit_note)) {
-            cache = apr_pmemdup(r->pool, *inherit_note,
-                                sizeof(*cache));
-            cache->walked = apr_array_copy(r->pool, cache->walked);
-        }
-        else {
-            cache = apr_pcalloc(r->pool, sizeof(*cache));
-            cache->walked = apr_array_make(r->pool, 4, sizeof(walk_walked_t));
-        }
-
-        *note = cache;
-    }
-    return cache;
-}
-
-/*****************************************************************
- *
- * Getting and checking directory configuration.  Also checks the
- * FollowSymlinks and FollowSymOwner stuff, since this is really the
- * only place that can happen (barring a new mid_dir_walk callout).
- *
- * We can't do it as an access_checker module function which gets
- * called with the final per_dir_config, since we could have a directory
- * with FollowSymLinks disabled, which contains a symlink to another
- * with a .htaccess file which turns FollowSymLinks back on --- and
- * access in such a case must be denied.  So, whatever it is that
- * checks FollowSymLinks needs to know the state of the options as
- * they change, all the way down.
- */
-
-/*
- * We don't want people able to serve up pipes, or unix sockets, or other
- * scary things.  Note that symlink tests are performed later.
- */
-static int check_safe_file(request_rec *r)
-{
-
-    if (r->finfo.filetype == 0      /* doesn't exist */
-        || r->finfo.filetype == APR_DIR
-        || r->finfo.filetype == APR_REG
-        || r->finfo.filetype == APR_LNK) {
-        return OK;
-    }
-
-    ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                  "object is not a file, directory or symlink: %s",
-                  r->filename);
-    return HTTP_FORBIDDEN;
-}
-
-/*
- * resolve_symlink must _always_ be called on an APR_LNK file type!
- * It will resolve the actual target file type, modification date, etc,
- * and provide any processing required for symlink evaluation.
- * Path must already be cleaned, no trailing slash, no multi-slashes,
- * and don't call this on the root!
- *
- * Simply, the number of times we deref a symlink are minimal compared
- * to the number of times we had an extra lstat() since we 'weren't sure'.
- *
- * To optimize, we stat() anything when given (opts & OPT_SYM_LINKS), otherwise
- * we start off with an lstat().  Every lstat() must be dereferenced in case
- * it points at a 'nasty' - we must always rerun check_safe_file (or similar.)
- */
-static int resolve_symlink(char *d, apr_finfo_t *lfi, int opts, apr_pool_t *p)
-{
-    apr_finfo_t fi;
-    int res;
-    const char *savename;
-
-    if (!(opts & (OPT_SYM_OWNER | OPT_SYM_LINKS))) {
-        return HTTP_FORBIDDEN;
-    }
-
-    /* Save the name from the valid bits. */
-    savename = (lfi->valid & APR_FINFO_NAME) ? lfi->name : NULL;
-
-    if (opts & OPT_SYM_LINKS) {
-        if ((res = apr_stat(&fi, d, lfi->valid & ~(APR_FINFO_NAME),
-                            p)) != APR_SUCCESS) {
-            return HTTP_FORBIDDEN;
-        }
-
-        /* Give back the target */
-        memcpy(lfi, &fi, sizeof(fi));
-        if (savename) {
-            lfi->name = savename;
-            lfi->valid |= APR_FINFO_NAME;
-        }
-
-        return OK;
-    }
-
-    /* OPT_SYM_OWNER only works if we can get the owner of
-     * both the file and symlink.  First fill in a missing
-     * owner of the symlink, then get the info of the target.
-     */
-    if (!(lfi->valid & APR_FINFO_OWNER)) {
-        if ((res = apr_lstat(&fi, d, lfi->valid | APR_FINFO_OWNER, p))
-            != APR_SUCCESS) {
-            return HTTP_FORBIDDEN;
-        }
-    }
-
-    if ((res = apr_stat(&fi, d, lfi->valid & ~(APR_FINFO_NAME), p))
-        != APR_SUCCESS) {
-        return HTTP_FORBIDDEN;
-    }
-
-    if (apr_compare_users(fi.user, lfi->user) != APR_SUCCESS) {
-        return HTTP_FORBIDDEN;
-    }
-
-    /* Give back the target */
-    memcpy(lfi, &fi, sizeof(fi));
-    if (savename) {
-        lfi->name = savename;
-        lfi->valid |= APR_FINFO_NAME;
-    }
-
-    return OK;
-}
-
-
-/*****************************************************************
- *
- * Getting and checking directory configuration.  Also checks the
- * FollowSymlinks and FollowSymOwner stuff, since this is really the
- * only place that can happen (barring a new mid_dir_walk callout).
- *
- * We can't do it as an access_checker module function which gets
- * called with the final per_dir_config, since we could have a directory
- * with FollowSymLinks disabled, which contains a symlink to another
- * with a .htaccess file which turns FollowSymLinks back on --- and
- * access in such a case must be denied.  So, whatever it is that
- * checks FollowSymLinks needs to know the state of the options as
- * they change, all the way down.
- */
-
-AP_DECLARE(int) ap_directory_walk(request_rec *r)
-{
-    ap_conf_vector_t *now_merged = NULL;
-    core_server_config *sconf = ap_get_module_config(r->server->module_config,
-                                                     &core_module);
-    ap_conf_vector_t **sec_ent = (ap_conf_vector_t **) sconf->sec_dir->elts;
-    int num_sec = sconf->sec_dir->nelts;
-    walk_cache_t *cache;
-    char *entry_dir;
-    apr_status_t rv;
-
-    /* XXX: Better (faster) tests needed!!!
-     *
-     * "OK" as a response to a real problem is not _OK_, but to allow broken
-     * modules to proceed, we will permit the not-a-path filename to pass the
-     * following two tests.  This behavior may be revoked in future versions
-     * of Apache.  We still must catch it later if it's heading for the core
-     * handler.  Leave INFO notes here for module debugging.
-     */
-    if (r->filename == NULL) {
-        ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_INFO, 0, r,
-                      "Module bug?  Request filename is missing for URI %s",
-                      r->uri);
-       return OK;
-    }
-
-    /* Canonicalize the file path without resolving filename case or aliases
-     * so we can begin by checking the cache for a recent directory walk.
-     * This call will ensure we have an absolute path in the same pass.
-     */
-    if ((rv = apr_filepath_merge(&entry_dir, NULL, r->filename,
-                                 APR_FILEPATH_NOTRELATIVE, r->pool))
-                  != APR_SUCCESS) {
-        ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_INFO, 0, r,
-                      "Module bug?  Request filename path %s is invalid or "
-                      "or not absolute for uri %s",
-                      r->filename, r->uri);
-        return OK;
-    }
-
-    /* XXX Notice that this forces path_info to be canonical.  That might
-     * not be desired by all apps.  However, some of those same apps likely
-     * have significant security holes.
-     */
-    r->filename = entry_dir;
-
-    cache = prep_walk_cache(AP_NOTE_DIRECTORY_WALK, r);
-
-    /* If this is not a dirent subrequest with a preconstructed
-     * r->finfo value, then we can simply stat the filename to
-     * save burning mega-cycles with unneeded stats - if this is
-     * an exact file match.  We don't care about failure... we
-     * will stat by component failing this meager attempt.
-     *
-     * It would be nice to distinguish APR_ENOENT from other
-     * types of failure, such as APR_ENOTDIR.  We can do something
-     * with APR_ENOENT, knowing that the path is good.
-     */
-    if (!r->finfo.filetype || r->finfo.filetype == APR_LNK) {
-        apr_stat(&r->finfo, r->filename, APR_FINFO_MIN, r->pool);
-
-        /* some OSs will return APR_SUCCESS/APR_REG if we stat
-         * a regular file but we have '/' at the end of the name;
-         *
-         * other OSs will return APR_ENOTDIR for that situation;
-         *
-         * handle it the same everywhere by simulating a failure
-         * if it looks like a directory but really isn't
-         */
-        if (r->finfo.filetype &&
-            r->finfo.filetype != APR_DIR &&
-            r->filename[strlen(r->filename) - 1] == '/') {
-            r->finfo.filetype = 0; /* forget what we learned */
-        }
-    }
-
-    if (r->finfo.filetype == APR_REG) {
-        entry_dir = ap_make_dirstr_parent(r->pool, entry_dir);
-    }
-    else if (r->filename[strlen(r->filename) - 1] != '/') {
-        entry_dir = apr_pstrcat(r->pool, r->filename, "/", NULL);
-    }
-
-    /* If we have a file already matches the path of r->filename,
-     * and the vhost's list of directory sections hasn't changed,
-     * we can skip rewalking the directory_walk entries.
-     */
-    if (cache->cached
-        && ((r->finfo.filetype == APR_REG)
-            || ((r->finfo.filetype == APR_DIR)
-                && (!r->path_info || !*r->path_info)))
-        && (cache->dir_conf_tested == sec_ent)
-        && (strcmp(entry_dir, cache->cached) == 0)) {
-        /* Well this looks really familiar!  If our end-result (per_dir_result)
-         * didn't change, we have absolutely nothing to do :)
-         * Otherwise (as is the case with most dir_merged/file_merged requests)
-         * we must merge our dir_conf_merged onto this new r->per_dir_config.
-         */
-        if (r->per_dir_config == cache->per_dir_result) {
-            return OK;
-        }
-
-        if (r->per_dir_config == cache->dir_conf_merged) {
-            r->per_dir_config = cache->per_dir_result;
-            return OK;
-        }
-
-        if (cache->walked->nelts) {
-            now_merged = ((walk_walked_t*)cache->walked->elts)
-                [cache->walked->nelts - 1].merged;
-        }
-    }
-    else {
-        /* We start now_merged from NULL since we want to build
-         * a locations list that can be merged to any vhost.
-         */
-        int sec_idx;
-        int matches = cache->walked->nelts;
-        walk_walked_t *last_walk = (walk_walked_t*)cache->walked->elts;
-        core_dir_config *this_dir;
-        allow_options_t opts;
-        allow_options_t opts_add;
-        allow_options_t opts_remove;
-        overrides_t override;
-
-        apr_finfo_t thisinfo;
-        char *save_path_info;
-        apr_size_t buflen;
-        char *buf;
-        unsigned int seg, startseg;
-
-        /* Invariant: from the first time filename_len is set until
-         * it goes out of scope, filename_len==strlen(r->filename)
-         */
-        apr_size_t filename_len;
-#ifdef CASE_BLIND_FILESYSTEM
-        apr_size_t canonical_len;
-#endif
-
-        /*
-         * We must play our own mimi-merge game here, for the few
-         * running dir_config values we care about within dir_walk.
-         * We didn't start the merge from r->per_dir_config, so we
-         * accumulate opts and override as we merge, from the globals.
-         */
-        this_dir = ap_get_module_config(r->per_dir_config, &core_module);
-        opts = this_dir->opts;
-        opts_add = this_dir->opts_add;
-        opts_remove = this_dir->opts_remove;
-        override = this_dir->override;
-
-        /* Set aside path_info to merge back onto path_info later.
-         * If r->filename is a directory, we must remerge the path_info,
-         * before we continue!  [Directories cannot, by defintion, have
-         * path info.  Either the next segment is not-found, or a file.]
-         *
-         * r->path_info tracks the unconsumed source path.
-         * r->filename  tracks the path as we process it
-         */
-        if ((r->finfo.filetype == APR_DIR) && r->path_info && *r->path_info)
-        {
-            if ((rv = apr_filepath_merge(&r->path_info, r->filename,
-                                         r->path_info,
-                                         APR_FILEPATH_NOTABOVEROOT, r->pool))
-                != APR_SUCCESS) {
-                ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
-                              "dir_walk error, path_info %s is not relative "
-                              "to the filename path %s for uri %s",
-                              r->path_info, r->filename, r->uri);
-                return HTTP_INTERNAL_SERVER_ERROR;
-            }
-
-            save_path_info = NULL;
-        }
-        else {
-            save_path_info = r->path_info;
-            r->path_info = r->filename;
-        }
-
-#ifdef CASE_BLIND_FILESYSTEM
-
-        canonical_len = 0;
-        while (r->canonical_filename && r->canonical_filename[canonical_len]
-               && (r->canonical_filename[canonical_len]
-                   == r->path_info[canonical_len])) {
-             ++canonical_len;
-        }
-
-        while (canonical_len
-               && ((r->canonical_filename[canonical_len - 1] != '/'
-                   && r->canonical_filename[canonical_len - 1])
-                   || (r->path_info[canonical_len - 1] != '/'
-                       && r->path_info[canonical_len - 1]))) {
-            --canonical_len;
-        }
-
-        /*
-         * Now build r->filename component by component, starting
-         * with the root (on Unix, simply "/").  We will make a huge
-         * assumption here for efficiency, that any canonical path
-         * already given included a canonical root.
-         */
-        rv = apr_filepath_root((const char **)&r->filename,
-                               (const char **)&r->path_info,
-                               canonical_len ? 0 : APR_FILEPATH_TRUENAME,
-                               r->pool);
-        filename_len = strlen(r->filename);
-
-        /*
-         * Bad assumption above?  If the root's length is longer
-         * than the canonical length, then it cannot be trusted as
-         * a truename.  So try again, this time more seriously.
-         */
-        if ((rv == APR_SUCCESS) && canonical_len
-            && (filename_len > canonical_len)) {
-            rv = apr_filepath_root((const char **)&r->filename,
-                                   (const char **)&r->path_info,
-                                   APR_FILEPATH_TRUENAME, r->pool);
-            filename_len = strlen(r->filename);
-            canonical_len = 0;
-        }
-
-#else /* ndef CASE_BLIND_FILESYSTEM, really this simple for Unix today; */
-
-        rv = apr_filepath_root((const char **)&r->filename,
-                               (const char **)&r->path_info,
-                               0, r->pool);
-        filename_len = strlen(r->filename);
-
-#endif
-
-        if (rv != APR_SUCCESS) {
-            ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
-                          "dir_walk error, could not determine the root "
-                          "path of filename %s%s for uri %s",
-                          r->filename, r->path_info, r->uri);
-            return HTTP_INTERNAL_SERVER_ERROR;
-        }
-
-        /* Working space for terminating null and an extra / is required.
-         */
-        buflen = filename_len + strlen(r->path_info) + 2;
-        buf = apr_palloc(r->pool, buflen);
-        memcpy(buf, r->filename, filename_len + 1);
-        r->filename = buf;
-        thisinfo.valid = APR_FINFO_TYPE;
-        thisinfo.filetype = APR_DIR; /* It's the root, of course it's a dir */
-
-        /*
-         * seg keeps track of which segment we've copied.
-         * sec_idx keeps track of which section we're on, since sections are
-         *     ordered by number of segments. See core_reorder_directories
-         */
-        startseg = seg = ap_count_dirs(r->filename);
-        sec_idx = 0;
-
-        /*
-         * Go down the directory hierarchy.  Where we have to check for
-         * symlinks, do so.  Where a .htaccess file has permission to
-         * override anything, try to find one.
-         */
-        do {
-            int res;
-            char *seg_name;
-            char *delim;
-            int temp_slash=0;
-
-            /* We have no trailing slash, but we sure would appreciate one.
-             * However, we don't want to append a / our first time through.
-             */
-            if ((seg > startseg) && r->filename[filename_len-1] != '/') {
-                r->filename[filename_len++] = '/';
-                r->filename[filename_len] = 0;
-                temp_slash=1;
-            }
-
-            /* Begin *this* level by looking for matching <Directory> sections
-             * from the server config.
-             */
-            for (; sec_idx < num_sec; ++sec_idx) {
-
-                ap_conf_vector_t *entry_config = sec_ent[sec_idx];
-                core_dir_config *entry_core;
-                entry_core = ap_get_module_config(entry_config, &core_module);
-
-                /* No more possible matches for this many segments?
-                 * We are done when we find relative/regex/longer components.
-                 */
-                if (entry_core->r || entry_core->d_components > seg) {
-                    break;
-                }
-
-                /* We will never skip '0' element components, e.g. plain old
-                 * <Directory >, and <Directory "/"> are classified as zero
-                 * so that Win32/Netware/OS2 etc all pick them up.
-                 * Otherwise, skip over the mismatches.
-                 */
-                if (entry_core->d_components
-                    && (entry_core->d_is_fnmatch
-                        ? (apr_fnmatch(entry_core->d, r->filename,
-                                       FNM_PATHNAME) != APR_SUCCESS)
-                        : (strcmp(r->filename, entry_core->d) != 0))) {
-                    continue;
-                }
-
-                /* If we merged this same section last time, reuse it
-                 */
-                if (matches) {
-                    if (last_walk->matched == sec_ent[sec_idx]) {
-                        now_merged = last_walk->merged;
-                        ++last_walk;
-                        --matches;
-                        goto minimerge;
-                    }
-
-                    /* We fell out of sync.  This is our own copy of walked,
-                     * so truncate the remaining matches and reset remaining.
-                     */
-                    cache->walked->nelts -= matches;
-                    matches = 0;
-                }
-
-                if (now_merged) {
-                    now_merged = ap_merge_per_dir_configs(r->pool,
-                                                          now_merged,
-                                                          sec_ent[sec_idx]);
-                }
-                else {
-                    now_merged = sec_ent[sec_idx];
-                }
-
-                last_walk = (walk_walked_t*)apr_array_push(cache->walked);
-                last_walk->matched = sec_ent[sec_idx];
-                last_walk->merged = now_merged;
-
-                /* Do a mini-merge to our globally-based running calculations of
-                 * core_dir->override and core_dir->opts, since now_merged
-                 * never considered the global config.  Of course, if there is
-                 * no core config at this level, continue without a thought.
-                 * See core.c::merge_core_dir_configs() for explanation.
-                 */
-minimerge:
-                this_dir = ap_get_module_config(sec_ent[sec_idx], &core_module);
-
-                if (!this_dir) {
-                    continue;
-                }
-
-                if (this_dir->opts & OPT_UNSET) {
-                    opts_add = (opts_add & ~this_dir->opts_remove)
-                               | this_dir->opts_add;
-                    opts_remove = (opts_remove & ~this_dir->opts_add)
-                                  | this_dir->opts_remove;
-                    opts = (opts & ~opts_remove) | opts_add;
-                }
-                else {
-                    opts = this_dir->opts;
-                    opts_add = this_dir->opts_add;
-                    opts_remove = this_dir->opts_remove;
-                }
-
-                if (!(this_dir->override & OR_UNSET)) {
-                    override = this_dir->override;
-                }
-            }
-
-            /* If .htaccess files are enabled, check for one, provided we
-             * have reached a real path.
-             */
-            if (seg >= startseg && override) {
-                ap_conf_vector_t *htaccess_conf = NULL;
-
-                res = ap_parse_htaccess(&htaccess_conf, r, override,
-                                        apr_pstrdup(r->pool, r->filename),
-                                        sconf->access_name);
-                if (res) {
-                    return res;
-                }
-
-                if (htaccess_conf) {
-
-                    /* If we merged this same htaccess last time, reuse it...
-                     * this wouldn't work except that we cache the htaccess
-                     * sections for the lifetime of the request, so we match
-                     * the same conf.  Good planning (no, pure luck ;)
-                     */
-                    if (matches) {
-                        if (last_walk->matched == htaccess_conf) {
-                            now_merged = last_walk->merged;
-                            ++last_walk;
-                            --matches;
-                            goto minimerge2;
-                        }
-
-                        /* We fell out of sync.  This is our own copy of walked,
-                         * so truncate the remaining matches and reset
-                         * remaining.
-                         */
-                        cache->walked->nelts -= matches;
-                        matches = 0;
-                    }
-
-                    if (now_merged) {
-                        now_merged = ap_merge_per_dir_configs(r->pool,
-                                                              now_merged,
-                                                              htaccess_conf);
-                    }
-                    else {
-                        now_merged = htaccess_conf;
-                    }
-
-                    last_walk = (walk_walked_t*)apr_array_push(cache->walked);
-                    last_walk->matched = htaccess_conf;
-                    last_walk->merged = now_merged;
-
-                    /* Do a mini-merge to our globally-based running
-                     * calculations of core_dir->override and core_dir->opts,
-                     * since now_merged never considered the global config.
-                     * Of course, if there is no core config at this level,
-                     * continue without a thought.
-                     * See core.c::merge_core_dir_configs() for explanation.
-                     */
-minimerge2:
-                    this_dir = ap_get_module_config(htaccess_conf,
-                                                    &core_module);
-
-                    if (this_dir) {
-                        if (this_dir->opts & OPT_UNSET) {
-                            opts_add = (opts_add & ~this_dir->opts_remove)
-                                       | this_dir->opts_add;
-                            opts_remove = (opts_remove & ~this_dir->opts_add)
-                                          | this_dir->opts_remove;
-                            opts = (opts & ~opts_remove) | opts_add;
-                        }
-                        else {
-                            opts = this_dir->opts;
-                            opts_add = this_dir->opts_add;
-                            opts_remove = this_dir->opts_remove;
-                        }
-
-                        if (!(this_dir->override & OR_UNSET)) {
-                            override = this_dir->override;
-                        }
-                    }
-                }
-            }
-
-            /* That temporary trailing slash was useful, now drop it.
-             */
-            if (temp_slash) {
-                r->filename[--filename_len] = '\0';
-            }
-
-            /* Time for all good things to come to an end?
-             */
-            if (!r->path_info || !*r->path_info) {
-                break;
-            }
-
-            /* Now it's time for the next segment...
-             * We will assume the next element is an end node, and fix it up
-             * below as necessary...
-             */
-
-            seg_name = r->filename + filename_len;
-            delim = strchr(r->path_info + (*r->path_info == '/' ? 1 : 0), '/');
-            if (delim) {
-                size_t path_info_len = delim - r->path_info;
-                *delim = '\0';
-                memcpy(seg_name, r->path_info, path_info_len + 1);
-                filename_len += path_info_len;
-                r->path_info = delim;
-                *delim = '/';
-            }
-            else {
-                size_t path_info_len = strlen(r->path_info);
-                memcpy(seg_name, r->path_info, path_info_len + 1);
-                filename_len += path_info_len;
-                r->path_info += path_info_len;
-            }
-            if (*seg_name == '/')
-                ++seg_name;
-
-            /* If nothing remained but a '/' string, we are finished
-             */
-            if (!*seg_name) {
-                break;
-            }
-
-            /* First optimization;
-             * If...we knew r->filename was a file, and
-             * if...we have strict (case-sensitive) filenames, or
-             *      we know the canonical_filename matches to _this_ name, and
-             * if...we have allowed symlinks
-             * skip the lstat and dummy up an APR_DIR value for thisinfo.
-             */
-            if (r->finfo.filetype
-#ifdef CASE_BLIND_FILESYSTEM
-                && (filename_len <= canonical_len)
-#endif
-                && ((opts & (OPT_SYM_OWNER | OPT_SYM_LINKS)) == OPT_SYM_LINKS))
-            {
-
-                thisinfo.filetype = APR_DIR;
-                ++seg;
-                continue;
-            }
-
-            /* We choose apr_lstat here, rather that apr_stat, so that we
-             * capture this path object rather than its target.  We will
-             * replace the info with our target's info below.  We especially
-             * want the name of this 'link' object, not the name of its
-             * target, if we are fixing the filename case/resolving aliases.
-             */
-            rv = apr_lstat(&thisinfo, r->filename,
-                           APR_FINFO_MIN | APR_FINFO_NAME, r->pool);
-
-            if (APR_STATUS_IS_ENOENT(rv)) {
-                /* Nothing?  That could be nice.  But our directory
-                 * walk is done.
-                 */
-                thisinfo.filetype = APR_NOFILE;
-                break;
-            }
-            else if (APR_STATUS_IS_EACCES(rv)) {
-                ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
-                              "access to %s denied", r->uri);
-                return r->status = HTTP_FORBIDDEN;
-            }
-            else if ((rv != APR_SUCCESS && rv != APR_INCOMPLETE)
-                     || !(thisinfo.valid & APR_FINFO_TYPE)) {
-                /* If we hit ENOTDIR, we must have over-optimized, deny
-                 * rather than assume not found.
-                 */
-                ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
-                              "access to %s failed", r->uri);
-                return r->status = HTTP_FORBIDDEN;
-            }
-
-            if ((res = check_safe_file(r))) {
-                r->status = res;
-                return res;
-            }
-
-            /* Fix up the path now if we have a name, and they don't agree
-             */
-            if ((thisinfo.valid & APR_FINFO_NAME)
-                && strcmp(seg_name, thisinfo.name)) {
-                /* TODO: provide users an option that an internal/external
-                 * redirect is required here?  We need to walk the URI and
-                 * filename in tandem to properly correlate these.
-                 */
-                strcpy(seg_name, thisinfo.name);
-                filename_len = strlen(r->filename);
-            }
-
-            if (thisinfo.filetype == APR_LNK) {
-                /* Is this a possibly acceptable symlink?
-                 */
-                if ((res = resolve_symlink(r->filename, &thisinfo,
-                                           opts, r->pool)) != OK) {
-                    ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                                  "Symbolic link not allowed: %s",
-                                  r->filename);
-                    return r->status = res;
-                }
-
-                /* Ok, we are done with the link's info, test the real target
-                 */
-                if (thisinfo.filetype == APR_REG) {
-                    /* That was fun, nothing left for us here
-                     */
-                    break;
-                }
-                else if (thisinfo.filetype != APR_DIR) {
-                    ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                                  "symlink doesn't point to a file or "
-                                  "directory: %s",
-                                  r->filename);
-                    return r->status = HTTP_FORBIDDEN;
-                }
-            }
-
-            ++seg;
-        } while (thisinfo.filetype == APR_DIR);
-
-        /* If we have _not_ optimized, this is the time to recover
-         * the final stat result.
-         */
-        if (!r->finfo.filetype || r->finfo.filetype == APR_LNK) {
-            r->finfo = thisinfo;
-        }
-
-        /* Now splice the saved path_info back onto any new path_info
-         */
-        if (save_path_info) {
-            if (r->path_info && *r->path_info) {
-                r->path_info = ap_make_full_path(r->pool, r->path_info,
-                                                 save_path_info);
-            }
-            else {
-                r->path_info = save_path_info;
-            }
-        }
-
-        /*
-         * Now we'll deal with the regexes, note we pick up sec_idx
-         * where we left off (we gave up after we hit entry_core->r)
-         */
-        for (; sec_idx < num_sec; ++sec_idx) {
-
-            core_dir_config *entry_core;
-            entry_core = ap_get_module_config(sec_ent[sec_idx], &core_module);
-
-            if (!entry_core->r) {
-                continue;
-            }
-
-            if (ap_regexec(entry_core->r, r->filename, 0, NULL, REG_NOTEOL)) {
-                continue;
-            }
-
-            /* If we merged this same section last time, reuse it
-             */
-            if (matches) {
-                if (last_walk->matched == sec_ent[sec_idx]) {
-                    now_merged = last_walk->merged;
-                    ++last_walk;
-                    --matches;
-                    goto minimerge;
-                }
-
-                /* We fell out of sync.  This is our own copy of walked,
-                 * so truncate the remaining matches and reset remaining.
-                 */
-                cache->walked->nelts -= matches;
-                matches = 0;
-            }
-
-            if (now_merged) {
-                now_merged = ap_merge_per_dir_configs(r->pool,
-                                                      now_merged,
-                                                      sec_ent[sec_idx]);
-            }
-            else {
-                now_merged = sec_ent[sec_idx];
-            }
-
-            last_walk = (walk_walked_t*)apr_array_push(cache->walked);
-            last_walk->matched = sec_ent[sec_idx];
-            last_walk->merged = now_merged;
-        }
-
-        /* Whoops - everything matched in sequence, but the original walk
-         * found some additional matches.  Truncate them.
-         */
-        if (matches) {
-            cache->walked->nelts -= matches;
-        }
-    }
-
-/* It seems this shouldn't be needed anymore.  We translated the
- x symlink above into a real resource, and should have died up there.
- x Even if we keep this, it needs more thought (maybe an r->file_is_symlink)
- x perhaps it should actually happen in file_walk, so we catch more
- x obscure cases in autoindex sub requests, etc.
- x
- x    * Symlink permissions are determined by the parent.  If the request is
- x    * for a directory then applying the symlink test here would use the
- x    * permissions of the directory as opposed to its parent.  Consider a
- x    * symlink pointing to a dir with a .htaccess disallowing symlinks.  If
- x    * you access /symlink (or /symlink/) you would get a 403 without this
- x    * APR_DIR test.  But if you accessed /symlink/index.html, for example,
- x    * you would *not* get the 403.
- x
- x   if (r->finfo.filetype != APR_DIR
- x       && (res = resolve_symlink(r->filename, r->info, ap_allow_options(r),
- x                                 r->pool))) {
- x       ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
- x                     "Symbolic link not allowed: %s", r->filename);
- x       return res;
- x   }
- */
-
-    /* Save future sub-requestors much angst in processing
-     * this subrequest.  If dir_walk couldn't canonicalize
-     * the file path, nothing can.
-     */
-    r->canonical_filename = r->filename;
-
-    if (r->finfo.filetype == APR_DIR) {
-        cache->cached = r->filename;
-    }
-    else {
-        cache->cached = ap_make_dirstr_parent(r->pool, r->filename);
-    }
-
-    cache->dir_conf_tested = sec_ent;
-    cache->dir_conf_merged = r->per_dir_config;
-
-    /* Merge our cache->dir_conf_merged construct with the r->per_dir_configs,
-     * and note the end result to (potentially) skip this step next time.
-     */
-    if (now_merged) {
-        r->per_dir_config = ap_merge_per_dir_configs(r->pool,
-                                                     r->per_dir_config,
-                                                     now_merged);
-    }
-    cache->per_dir_result = r->per_dir_config;
-
-    return OK;
-}
-
-
-AP_DECLARE(int) ap_location_walk(request_rec *r)
-{
-    ap_conf_vector_t *now_merged = NULL;
-    core_server_config *sconf = ap_get_module_config(r->server->module_config,
-                                                     &core_module);
-    ap_conf_vector_t **sec_ent = (ap_conf_vector_t **)sconf->sec_url->elts;
-    int num_sec = sconf->sec_url->nelts;
-    walk_cache_t *cache;
-    const char *entry_uri;
-
-    cache = prep_walk_cache(AP_NOTE_LOCATION_WALK, r);
-
-    /* No tricks here, there are no <Locations > to parse in this vhost.
-     * We won't destroy the cache, just in case _this_ redirect is later
-     * redirected again to a vhost with <Location > blocks to optimize.
-     */
-    if (!num_sec) {
-        return OK;
-    }
-
-    /* Location and LocationMatch differ on their behaviour w.r.t. multiple
-     * slashes.  Location matches multiple slashes with a single slash,
-     * LocationMatch doesn't.  An exception, for backwards brokenness is
-     * absoluteURIs... in which case neither match multiple slashes.
-     */
-    if (r->uri[0] != '/') {
-        entry_uri = r->uri;
-    }
-    else {
-        char *uri = apr_pstrdup(r->pool, r->uri);
-        ap_no2slash(uri);
-        entry_uri = uri;
-    }
-
-    /* If we have an cache->cached location that matches r->uri,
-     * and the vhost's list of locations hasn't changed, we can skip
-     * rewalking the location_walk entries.
-     */
-    if (cache->cached
-        && (cache->dir_conf_tested == sec_ent)
-        && (strcmp(entry_uri, cache->cached) == 0)) {
-        /* Well this looks really familiar!  If our end-result (per_dir_result)
-         * didn't change, we have absolutely nothing to do :)
-         * Otherwise (as is the case with most dir_merged/file_merged requests)
-         * we must merge our dir_conf_merged onto this new r->per_dir_config.
-         */
-        if (r->per_dir_config == cache->per_dir_result) {
-            return OK;
-        }
-
-        if (r->per_dir_config == cache->dir_conf_merged) {
-            r->per_dir_config = cache->per_dir_result;
-            return OK;
-        }
-
-        if (cache->walked->nelts) {
-            now_merged = ((walk_walked_t*)cache->walked->elts)
-                                            [cache->walked->nelts - 1].merged;
-        }
-    }
-    else {
-        /* We start now_merged from NULL since we want to build
-         * a locations list that can be merged to any vhost.
-         */
-        int len, sec_idx;
-        int matches = cache->walked->nelts;
-        walk_walked_t *last_walk = (walk_walked_t*)cache->walked->elts;
-        cache->cached = entry_uri;
-
-        /* Go through the location entries, and check for matches.
-         * We apply the directive sections in given order, we should
-         * really try them with the most general first.
-         */
-        for (sec_idx = 0; sec_idx < num_sec; ++sec_idx) {
-
-            core_dir_config *entry_core;
-            entry_core = ap_get_module_config(sec_ent[sec_idx], &core_module);
-
-            /* ### const strlen can be optimized in location config parsing */
-            len = strlen(entry_core->d);
-
-            /* Test the regex, fnmatch or string as appropriate.
-             * If it's a strcmp, and the <Location > pattern was
-             * not slash terminated, then this uri must be slash
-             * terminated (or at the end of the string) to match.
-             */
-            if (entry_core->r
-                ? ap_regexec(entry_core->r, r->uri, 0, NULL, 0)
-                : (entry_core->d_is_fnmatch
-                   ? apr_fnmatch(entry_core->d, cache->cached, FNM_PATHNAME)
-                   : (strncmp(entry_core->d, cache->cached, len)
-                      || (entry_core->d[len - 1] != '/'
-                          && cache->cached[len] != '/'
-                          && cache->cached[len] != '\0')))) {
-                continue;
-            }
-
-            /* If we merged this same section last time, reuse it
-             */
-            if (matches) {
-                if (last_walk->matched == sec_ent[sec_idx]) {
-                    now_merged = last_walk->merged;
-                    ++last_walk;
-                    --matches;
-                    continue;
-                }
-
-                /* We fell out of sync.  This is our own copy of walked,
-                 * so truncate the remaining matches and reset remaining.
-                 */
-                cache->walked->nelts -= matches;
-                matches = 0;
-            }
-
-            if (now_merged) {
-                now_merged = ap_merge_per_dir_configs(r->pool,
-                                                      now_merged,
-                                                      sec_ent[sec_idx]);
-            }
-            else {
-                now_merged = sec_ent[sec_idx];
-            }
-
-            last_walk = (walk_walked_t*)apr_array_push(cache->walked);
-            last_walk->matched = sec_ent[sec_idx];
-            last_walk->merged = now_merged;
-        }
-
-        /* Whoops - everything matched in sequence, but the original walk
-         * found some additional matches.  Truncate them.
-         */
-        if (matches) {
-            cache->walked->nelts -= matches;
-        }
-    }
-
-    cache->dir_conf_tested = sec_ent;
-    cache->dir_conf_merged = r->per_dir_config;
-
-    /* Merge our cache->dir_conf_merged construct with the r->per_dir_configs,
-     * and note the end result to (potentially) skip this step next time.
-     */
-    if (now_merged) {
-        r->per_dir_config = ap_merge_per_dir_configs(r->pool,
-                                                     r->per_dir_config,
-                                                     now_merged);
-    }
-    cache->per_dir_result = r->per_dir_config;
-
-    return OK;
-}
-
-AP_DECLARE(int) ap_file_walk(request_rec *r)
-{
-    ap_conf_vector_t *now_merged = NULL;
-    core_dir_config *dconf = ap_get_module_config(r->per_dir_config,
-                                                  &core_module);
-    ap_conf_vector_t **sec_ent = (ap_conf_vector_t **)dconf->sec_file->elts;
-    int num_sec = dconf->sec_file->nelts;
-    walk_cache_t *cache;
-    const char *test_file;
-
-    /* To allow broken modules to proceed, we allow missing filenames to pass.
-     * We will catch it later if it's heading for the core handler.
-     * directory_walk already posted an INFO note for module debugging.
-     */
-     if (r->filename == NULL) {
-        return OK;
-    }
-
-    cache = prep_walk_cache(AP_NOTE_FILE_WALK, r);
-
-    /* No tricks here, there are just no <Files > to parse in this context.
-     * We won't destroy the cache, just in case _this_ redirect is later
-     * redirected again to a context containing the same or similar <Files >.
-     */
-    if (!num_sec) {
-        return OK;
-    }
-
-    /* Get the basename .. and copy for the cache just
-     * in case r->filename is munged by another module
-     */
-    test_file = strrchr(r->filename, '/');
-    if (test_file == NULL) {
-        test_file = apr_pstrdup(r->pool, r->filename);
-    }
-    else {
-        test_file = apr_pstrdup(r->pool, ++test_file);
-    }
-
-    /* If we have an cache->cached file name that matches test_file,
-     * and the directory's list of file sections hasn't changed, we
-     * can skip rewalking the file_walk entries.
-     */
-    if (cache->cached
-        && (cache->dir_conf_tested == sec_ent)
-        && (strcmp(test_file, cache->cached) == 0)) {
-        /* Well this looks really familiar!  If our end-result (per_dir_result)
-         * didn't change, we have absolutely nothing to do :)
-         * Otherwise (as is the case with most dir_merged requests)
-         * we must merge our dir_conf_merged onto this new r->per_dir_config.
-         */
-        if (r->per_dir_config == cache->per_dir_result) {
-            return OK;
-        }
-
-        if (r->per_dir_config == cache->dir_conf_merged) {
-            r->per_dir_config = cache->per_dir_result;
-            return OK;
-        }
-
-        if (cache->walked->nelts) {
-            now_merged = ((walk_walked_t*)cache->walked->elts)
-                [cache->walked->nelts - 1].merged;
-        }
-    }
-    else {
-        /* We start now_merged from NULL since we want to build
-         * a file section list that can be merged to any dir_walk.
-         */
-        int sec_idx;
-        int matches = cache->walked->nelts;
-        walk_walked_t *last_walk = (walk_walked_t*)cache->walked->elts;
-        cache->cached = test_file;
-
-        /* Go through the location entries, and check for matches.
-         * We apply the directive sections in given order, we should
-         * really try them with the most general first.
-         */
-        for (sec_idx = 0; sec_idx < num_sec; ++sec_idx) {
-
-            core_dir_config *entry_core;
-            entry_core = ap_get_module_config(sec_ent[sec_idx], &core_module);
-
-            if (entry_core->r
-                ? ap_regexec(entry_core->r, cache->cached , 0, NULL, 0)
-                : (entry_core->d_is_fnmatch
-                   ? apr_fnmatch(entry_core->d, cache->cached, FNM_PATHNAME)
-                   : strcmp(entry_core->d, cache->cached))) {
-                continue;
-            }
-
-            /* If we merged this same section last time, reuse it
-             */
-            if (matches) {
-                if (last_walk->matched == sec_ent[sec_idx]) {
-                    now_merged = last_walk->merged;
-                    ++last_walk;
-                    --matches;
-                    continue;
-                }
-
-                /* We fell out of sync.  This is our own copy of walked,
-                 * so truncate the remaining matches and reset remaining.
-                 */
-                cache->walked->nelts -= matches;
-                matches = 0;
-            }
-
-            if (now_merged) {
-                now_merged = ap_merge_per_dir_configs(r->pool,
-                                                      now_merged,
-                                                      sec_ent[sec_idx]);
-            }
-            else {
-                now_merged = sec_ent[sec_idx];
-            }
-
-            last_walk = (walk_walked_t*)apr_array_push(cache->walked);
-            last_walk->matched = sec_ent[sec_idx];
-            last_walk->merged = now_merged;
-        }
-
-        /* Whoops - everything matched in sequence, but the original walk
-         * found some additional matches.  Truncate them.
-         */
-        if (matches) {
-            cache->walked->nelts -= matches;
-        }
-    }
-
-    cache->dir_conf_tested = sec_ent;
-    cache->dir_conf_merged = r->per_dir_config;
-
-    /* Merge our cache->dir_conf_merged construct with the r->per_dir_configs,
-     * and note the end result to (potentially) skip this step next time.
-     */
-    if (now_merged) {
-        r->per_dir_config = ap_merge_per_dir_configs(r->pool,
-                                                     r->per_dir_config,
-                                                     now_merged);
-    }
-    cache->per_dir_result = r->per_dir_config;
-
-    return OK;
-}
-
-/*****************************************************************
- *
- * The sub_request mechanism.
- *
- * Fns to look up a relative URI from, e.g., a map file or SSI document.
- * These do all access checks, etc., but don't actually run the transaction
- * ... use run_sub_req below for that.  Also, be sure to use destroy_sub_req
- * as appropriate if you're likely to be creating more than a few of these.
- * (An early Apache version didn't destroy the sub_reqs used in directory
- * indexing.  The result, when indexing a directory with 800-odd files in
- * it, was massively excessive storage allocation).
- *
- * Note more manipulation of protocol-specific vars in the request
- * structure...
- */
-
-static request_rec *make_sub_request(const request_rec *r,
-                                     ap_filter_t *next_filter)
-{
-    apr_pool_t *rrp;
-    request_rec *rnew;
-
-    apr_pool_create(&rrp, r->pool);
-    rnew = apr_pcalloc(rrp, sizeof(request_rec));
-    rnew->pool = rrp;
-
-    rnew->hostname       = r->hostname;
-    rnew->request_time   = r->request_time;
-    rnew->connection     = r->connection;
-    rnew->server         = r->server;
-
-    rnew->request_config = ap_create_request_config(rnew->pool);
-
-    /* Start a clean config from this subrequest's vhost.  Optimization in
-     * Location/File/Dir walks from the parent request assure that if the
-     * config blocks of the subrequest match the parent request, no merges
-     * will actually occur (and generally a minimal number of merges are
-     * required, even if the parent and subrequest aren't quite identical.)
-     */
-    rnew->per_dir_config = r->server->lookup_defaults;
-
-    rnew->htaccess = r->htaccess;
-    rnew->allowed_methods = ap_make_method_list(rnew->pool, 2);
-
-    /* make a copy of the allowed-methods list */
-    ap_copy_method_list(rnew->allowed_methods, r->allowed_methods);
-
-    /* start with the same set of output filters */
-    if (next_filter) {
-        /* while there are no input filters for a subrequest, we will
-         * try to insert some, so if we don't have valid data, the code
-         * will seg fault.
-         */
-        rnew->input_filters = r->input_filters;
-        rnew->proto_input_filters = r->proto_input_filters;
-        rnew->output_filters = next_filter;
-        rnew->proto_output_filters = r->proto_output_filters;
-        ap_add_output_filter_handle(ap_subreq_core_filter_handle,
-                                    NULL, rnew, rnew->connection);
-    }
-    else {
-        /* If NULL - we are expecting to be internal_fast_redirect'ed
-         * to this subrequest - or this request will never be invoked.
-         * Ignore the original request filter stack entirely, and
-         * drill the input and output stacks back to the connection.
-         */
-        rnew->proto_input_filters = r->proto_input_filters;
-        rnew->proto_output_filters = r->proto_output_filters;
-
-        rnew->input_filters = r->proto_input_filters;
-        rnew->output_filters = r->proto_output_filters;
-    }
-
-    /* no input filters for a subrequest */
-
-    ap_set_sub_req_protocol(rnew, r);
-
-    /* We have to run this after we fill in sub req vars,
-     * or the r->main pointer won't be setup
-     */
-    ap_run_create_request(rnew);
-
-    return rnew;
-}
-
-AP_CORE_DECLARE_NONSTD(apr_status_t) ap_sub_req_output_filter(ap_filter_t *f,
-                                                              apr_bucket_brigade *bb)
-{
-    apr_bucket *e = APR_BRIGADE_LAST(bb);
-
-    if (APR_BUCKET_IS_EOS(e)) {
-        apr_bucket_delete(e);
-    }
-
-    if (!APR_BRIGADE_EMPTY(bb)) {
-        return ap_pass_brigade(f->next, bb);
-    }
-
-    return APR_SUCCESS;
-}
-
-
-AP_DECLARE(int) ap_some_auth_required(request_rec *r)
-{
-    /* Is there a require line configured for the type of *this* req? */
-
-    const apr_array_header_t *reqs_arr = ap_requires(r);
-    require_line *reqs;
-    int i;
-
-    if (!reqs_arr) {
-        return 0;
-    }
-
-    reqs = (require_line *) reqs_arr->elts;
-
-    for (i = 0; i < reqs_arr->nelts; ++i) {
-        if (reqs[i].method_mask & (AP_METHOD_BIT << r->method_number)) {
-            return 1;
-        }
-    }
-
-    return 0;
-}
-
-
-AP_DECLARE(request_rec *) ap_sub_req_method_uri(const char *method,
-                                                const char *new_file,
-                                                const request_rec *r,
-                                                ap_filter_t *next_filter)
-{
-    request_rec *rnew;
-    int res;
-    char *udir;
-
-    rnew = make_sub_request(r, next_filter);
-
-    /* would be nicer to pass "method" to ap_set_sub_req_protocol */
-    rnew->method = method;
-    rnew->method_number = ap_method_number_of(method);
-
-    if (new_file[0] == '/') {
-        ap_parse_uri(rnew, new_file);
-    }
-    else {
-        udir = ap_make_dirstr_parent(rnew->pool, r->uri);
-        udir = ap_escape_uri(rnew->pool, udir);    /* re-escape it */
-        ap_parse_uri(rnew, ap_make_full_path(rnew->pool, udir, new_file));
-    }
-
-    if ((res = ap_process_request_internal(rnew))) {
-        rnew->status = res;
-    }
-
-    return rnew;
-}
-
-AP_DECLARE(request_rec *) ap_sub_req_lookup_uri(const char *new_file,
-                                                const request_rec *r,
-                                                ap_filter_t *next_filter)
-{
-    return ap_sub_req_method_uri("GET", new_file, r, next_filter);
-}
-
-AP_DECLARE(request_rec *) ap_sub_req_lookup_dirent(const apr_finfo_t *dirent,
-                                                   const request_rec *r,
-                                                   int subtype,
-                                                   ap_filter_t *next_filter)
-{
-    request_rec *rnew;
-    int res;
-    char *fdir;
-    char *udir;
-
-    rnew = make_sub_request(r, next_filter);
-
-    /* Special case: we are looking at a relative lookup in the same directory.
-     * This is 100% safe, since dirent->name just came from the filesystem.
-     */
-    if (r->path_info && *r->path_info) {
-        /* strip path_info off the end of the uri to keep it in sync
-         * with r->filename, which has already been stripped by directory_walk,
-         * merge the dirent->name, and then, if the caller wants us to remerge
-         * the original path info, do so.  Note we never fix the path_info back
-         * to r->filename, since dir_walk would do so (but we don't expect it
-         * to happen in the usual cases)
-         */
-        udir = apr_pstrdup(rnew->pool, r->uri);
-        udir[ap_find_path_info(udir, r->path_info)] = '\0';
-        udir = ap_make_dirstr_parent(rnew->pool, udir);
-
-        rnew->uri = ap_make_full_path(rnew->pool, udir, dirent->name);
-        if (subtype == AP_SUBREQ_MERGE_ARGS) {
-            rnew->uri = ap_make_full_path(rnew->pool, rnew->uri, r->path_info + 1);
-            rnew->path_info = apr_pstrdup(rnew->pool, r->path_info);
-        }
-    }
-    else {
-        udir = ap_make_dirstr_parent(rnew->pool, r->uri);
-        rnew->uri = ap_make_full_path(rnew->pool, udir, dirent->name);
-    }
-
-    fdir = ap_make_dirstr_parent(rnew->pool, r->filename);
-    rnew->filename = ap_make_full_path(rnew->pool, fdir, dirent->name);
-    if (r->canonical_filename == r->filename) {
-        rnew->canonical_filename = rnew->filename;
-    }
-
-    /* XXX This is now less relevant; we will do a full location walk
-     * these days for this case.  Preserve the apr_stat results, and
-     * perhaps we also tag that symlinks were tested and/or found for
-     * r->filename.
-     */
-    rnew->per_dir_config = r->server->lookup_defaults;
-
-    if ((dirent->valid & APR_FINFO_MIN) != APR_FINFO_MIN) {
-        /*
-         * apr_dir_read isn't very complete on this platform, so
-         * we need another apr_lstat (or simply apr_stat if we allow
-         * all symlinks here.)  If this is an APR_LNK that resolves
-         * to an APR_DIR, then we will rerun everything anyways...
-         * this should be safe.
-         */
-        apr_status_t rv;
-        if (ap_allow_options(rnew) & OPT_SYM_LINKS) {
-            if (((rv = apr_stat(&rnew->finfo, rnew->filename,
-                                APR_FINFO_MIN, rnew->pool)) != APR_SUCCESS)
-                && (rv != APR_INCOMPLETE)) {
-                rnew->finfo.filetype = 0;
-            }
-        }
-        else {
-            if (((rv = apr_lstat(&rnew->finfo, rnew->filename,
-                                 APR_FINFO_MIN, rnew->pool)) != APR_SUCCESS)
-                && (rv != APR_INCOMPLETE)) {
-                rnew->finfo.filetype = 0;
-            }
-        }
-    }
-    else {
-        memcpy(&rnew->finfo, dirent, sizeof(apr_finfo_t));
-    }
-
-    if (rnew->finfo.filetype == APR_LNK) {
-        /*
-         * Resolve this symlink.  We should tie this back to dir_walk's cache
-         */
-        if ((res = resolve_symlink(rnew->filename, &rnew->finfo,
-                                   ap_allow_options(rnew), rnew->pool))
-            != OK) {
-            rnew->status = res;
-            return rnew;
-        }
-    }
-
-    if (rnew->finfo.filetype == APR_DIR) {
-        /* ap_make_full_path overallocated the buffers
-         * by one character to help us out here.
-         */
-        strcpy(rnew->filename + strlen(rnew->filename), "/");
-        if (!rnew->path_info || !*rnew->path_info) {
-            strcpy(rnew->uri  + strlen(rnew->uri ), "/");
-        }
-    }
-
-    /* fill in parsed_uri values
-     */
-    if (r->args && *r->args && (subtype == AP_SUBREQ_MERGE_ARGS)) {
-        ap_parse_uri(rnew, apr_pstrcat(r->pool, rnew->uri, "?",
-                                       r->args, NULL));
-    }
-    else {
-        ap_parse_uri(rnew, rnew->uri);
-    }
-
-    if ((res = ap_process_request_internal(rnew))) {
-        rnew->status = res;
-    }
-
-    return rnew;
-}
-
-AP_DECLARE(request_rec *) ap_sub_req_lookup_file(const char *new_file,
-                                                 const request_rec *r,
-                                                 ap_filter_t *next_filter)
-{
-    request_rec *rnew;
-    int res;
-    char *fdir;
-    apr_size_t fdirlen;
-
-    rnew = make_sub_request(r, next_filter);
-
-    fdir = ap_make_dirstr_parent(rnew->pool, r->filename);
-    fdirlen = strlen(fdir);
-
-    /* Translate r->filename, if it was canonical, it stays canonical
-     */
-    if (r->canonical_filename == r->filename) {
-        rnew->canonical_filename = (char*)(1);
-    }
-
-    if (apr_filepath_merge(&rnew->filename, fdir, new_file,
-                           APR_FILEPATH_TRUENAME, rnew->pool) != APR_SUCCESS) {
-        rnew->status = HTTP_FORBIDDEN;
-        return rnew;
-    }
-
-    if (rnew->canonical_filename) {
-        rnew->canonical_filename = rnew->filename;
-    }
-
-    /*
-     * Check for a special case... if there are no '/' characters in new_file
-     * at all, and the path was the same, then we are looking at a relative
-     * lookup in the same directory.  Fixup the URI to match.
-     */
-
-    if (strncmp(rnew->filename, fdir, fdirlen) == 0
-        && rnew->filename[fdirlen]
-        && ap_strchr_c(rnew->filename + fdirlen, '/') == NULL) {
-        apr_status_t rv;
-        if (ap_allow_options(rnew) & OPT_SYM_LINKS) {
-            if (((rv = apr_stat(&rnew->finfo, rnew->filename,
-                                APR_FINFO_MIN, rnew->pool)) != APR_SUCCESS)
-                && (rv != APR_INCOMPLETE)) {
-                rnew->finfo.filetype = 0;
-            }
-        }
-        else {
-            if (((rv = apr_lstat(&rnew->finfo, rnew->filename,
-                                 APR_FINFO_MIN, rnew->pool)) != APR_SUCCESS)
-                && (rv != APR_INCOMPLETE)) {
-                rnew->finfo.filetype = 0;
-            }
-        }
-
-        if (r->uri && *r->uri) {
-            char *udir = ap_make_dirstr_parent(rnew->pool, r->uri);
-            rnew->uri = ap_make_full_path(rnew->pool, udir,
-                                          rnew->filename + fdirlen);
-            ap_parse_uri(rnew, rnew->uri);    /* fill in parsed_uri values */
-        }
-        else {
-            ap_parse_uri(rnew, new_file);        /* fill in parsed_uri values */
-            rnew->uri = apr_pstrdup(rnew->pool, "");
-        }
-    }
-    else {
-        /* XXX: @@@: What should be done with the parsed_uri values?
-         * We would be better off stripping down to the 'common' elements
-         * of the path, then reassembling the URI as best as we can.
-         */
-        ap_parse_uri(rnew, new_file);        /* fill in parsed_uri values */
-        /*
-         * XXX: this should be set properly like it is in the same-dir case
-         * but it's actually sometimes to impossible to do it... because the
-         * file may not have a uri associated with it -djg
-         */
-        rnew->uri = apr_pstrdup(rnew->pool, "");
-    }
-
-    if ((res = ap_process_request_internal(rnew))) {
-        rnew->status = res;
-    }
-
-    return rnew;
-}
-
-AP_DECLARE(int) ap_run_sub_req(request_rec *r)
-{
-    int retval;
-
-    retval = ap_invoke_handler(r);
-    ap_finalize_sub_req_protocol(r);
-    return retval;
-}
-
-AP_DECLARE(void) ap_destroy_sub_req(request_rec *r)
-{
-    /* Reclaim the space */
-    apr_pool_destroy(r->pool);
-}
-
-/*
- * Function to set the r->mtime field to the specified value if it's later
- * than what's already there.
- */
-AP_DECLARE(void) ap_update_mtime(request_rec *r, apr_time_t dependency_mtime)
-{
-    if (r->mtime < dependency_mtime) {
-        r->mtime = dependency_mtime;
-    }
-}
-
-/*
- * Is it the initial main request, which we only get *once* per HTTP request?
- */
-AP_DECLARE(int) ap_is_initial_req(request_rec *r)
-{
-    return (r->main == NULL)       /* otherwise, this is a sub-request */
-           && (r->prev == NULL);   /* otherwise, this is an internal redirect */
-}
diff --git a/server/rfc1413.c b/server/rfc1413.c
deleted file mode 100644
index 5c11187..0000000
--- a/server/rfc1413.c
+++ /dev/null
@@ -1,287 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-/* TODO - put timeouts back in */
-/*
- * rfc1413() speaks a common subset of the RFC 1413, AUTH, TAP and IDENT
- * protocols. The code queries an RFC 1413 etc. compatible daemon on a remote
- * host to look up the owner of a connection. The information should not be
- * used for authentication purposes. This routine intercepts alarm signals.
- * 
- * Diagnostics are reported through syslog(3).
- * 
- * Author: Wietse Venema, Eindhoven University of Technology,
- * The Netherlands.
- */
-
-/* Some small additions for Apache --- ditch the "sccsid" var if
- * compiling with gcc (it *has* changed), include ap_config.h for the
- * prototypes it defines on at least one system (SunlOSs) which has
- * them missing from the standard header files, and one minor change
- * below (extra parens around assign "if (foo = bar) ..." to shut up
- * gcc -Wall).
- */
-
-/* Rewritten by David Robinson */
-
-#include "apr.h"
-#include "apr_network_io.h"
-#include "apr_strings.h"
-#include "apr_lib.h"
-#include "apr_inherit.h"
-
-#define APR_WANT_STDIO
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-#include "ap_config.h"
-#include "httpd.h"		/* for server_rec, conn_rec, etc. */
-#include "http_log.h"		/* for aplog_error */
-#include "rfc1413.h"
-#include "http_main.h"		/* set_callback_and_alarm */
-#include "util_ebcdic.h"
-
-/* Local stuff. */
-/* Semi-well-known port */
-#define	RFC1413_PORT	113
-/* maximum allowed length of userid */
-#define RFC1413_USERLEN 512
-/* rough limit on the amount of data we accept. */
-#define RFC1413_MAXDATA 1000
-
-#ifndef RFC1413_TIMEOUT
-#define RFC1413_TIMEOUT	30
-#endif
-#define FROM_UNKNOWN  "unknown"
-
-int ap_rfc1413_timeout = RFC1413_TIMEOUT;	/* Global so it can be changed */
-
-static apr_status_t rfc1413_connect(apr_socket_t **newsock, conn_rec *conn,
-                                    server_rec *srv)
-{
-    apr_status_t rv;
-    apr_sockaddr_t *localsa, *destsa;
-
-    if ((rv = apr_sockaddr_info_get(&localsa, conn->local_ip, APR_UNSPEC, 
-                              0, /* ephemeral port */
-                              0, conn->pool)) != APR_SUCCESS) {
-        /* This should not fail since we have a numeric address string
-         * as the host. */
-        ap_log_error(APLOG_MARK, APLOG_CRIT, rv, srv,
-                     "rfc1413: apr_sockaddr_info_get(%s) failed",
-                     conn->local_ip);
-        return rv;
-    }
-    
-    if ((rv = apr_sockaddr_info_get(&destsa, conn->remote_ip, 
-                              localsa->family, /* has to match */
-                              RFC1413_PORT, 0, conn->pool)) != APR_SUCCESS) {
-        /* This should not fail since we have a numeric address string
-         * as the host. */
-        ap_log_error(APLOG_MARK, APLOG_CRIT, rv, srv,
-                     "rfc1413: apr_sockaddr_info_get(%s) failed",
-                     conn->remote_ip);
-        return rv;
-    }
-
-    if ((rv = apr_socket_create(newsock, 
-                                localsa->family, /* has to match */
-                                SOCK_STREAM, conn->pool)) != APR_SUCCESS) {
-	ap_log_error(APLOG_MARK, APLOG_CRIT, rv, srv,
-                     "rfc1413: error creating query socket");
-        return rv;
-    }
-
-    if ((rv = apr_setsocketopt(*newsock, APR_SO_TIMEOUT, 
-                               (apr_int32_t)(ap_rfc1413_timeout 
-                                              * APR_USEC_PER_SEC)))
-        != APR_SUCCESS) {
-        ap_log_error(APLOG_MARK, APLOG_CRIT, rv, srv,
-                     "rfc1413: error setting query socket timeout");
-        apr_socket_close(*newsock);
-        return rv;
-    }
-
-/*
- * Bind the local and remote ends of the query socket to the same
- * IP addresses as the connection under investigation. We go
- * through all this trouble because the local or remote system
- * might have more than one network address. The RFC1413 etc.
- * client sends only port numbers; the server takes the IP
- * addresses from the query socket.
- */
-
-    if ((rv = apr_bind(*newsock, localsa)) != APR_SUCCESS) {
-	ap_log_error(APLOG_MARK, APLOG_CRIT, rv, srv,
-                     "rfc1413: Error binding query socket to local port");
-        apr_socket_close(*newsock);
-	return rv;
-    }
-
-/*
- * errors from connect usually imply the remote machine doesn't support
- * the service; don't log such an error
- */
-    if ((rv = apr_connect(*newsock, destsa)) != APR_SUCCESS) {
-        apr_socket_close(*newsock);
-        return rv;
-    }
-
-    return APR_SUCCESS;
-}
-
-static apr_status_t rfc1413_query(apr_socket_t *sock, conn_rec *conn, 
-                                  server_rec *srv)
-{
-    apr_port_t rmt_port, our_port;
-    apr_port_t sav_rmt_port, sav_our_port;
-    apr_size_t i;
-    char *cp;
-    char buffer[RFC1413_MAXDATA + 1];
-    char user[RFC1413_USERLEN + 1];	/* XXX */
-    apr_size_t buflen;
-
-    apr_sockaddr_port_get(&sav_our_port, conn->local_addr);
-    apr_sockaddr_port_get(&sav_rmt_port, conn->remote_addr);
-
-    /* send the data */
-    buflen = apr_snprintf(buffer, sizeof(buffer), "%hu,%hu\r\n", sav_rmt_port,
-                          sav_our_port);
-    ap_xlate_proto_to_ascii(buffer, buflen);
-
-    /* send query to server. Handle short write. */
-    i = 0;
-    while (i < buflen) {
-        apr_size_t j = strlen(buffer + i);
-        apr_status_t status;
-	status  = apr_send(sock, buffer+i, &j);
-	if (status != APR_SUCCESS) {
-	    ap_log_error(APLOG_MARK, APLOG_CRIT, status, srv,
-		         "write: rfc1413: error sending request");
-	    return status;
-	}
-	else if (j > 0) {
-	    i+=j; 
-	}
-    }
-
-    /*
-     * Read response from server. - the response should be newline 
-     * terminated according to rfc - make sure it doesn't stomp its
-     * way out of the buffer.
-     */
-
-    i = 0;
-    memset(buffer, '\0', sizeof(buffer));
-    /*
-     * Note that the strchr function below checks for \012 instead of '\n'
-     * this allows it to work on both ASCII and EBCDIC machines.
-     */
-    while((cp = strchr(buffer, '\012')) == NULL && i < sizeof(buffer) - 1) {
-        apr_size_t j = sizeof(buffer) - 1 - i;
-        apr_status_t status;
-	status = apr_recv(sock, buffer+i, &j);
-	if (status != APR_SUCCESS) {
-	    ap_log_error(APLOG_MARK, APLOG_CRIT, status, srv,
-			"read: rfc1413: error reading response");
-	    return status;
-	}
-	else if (j > 0) {
-	    i+=j; 
-	}
-        else if (status == APR_SUCCESS && j == 0) {
-            /* Oops... we ran out of data before finding newline */
-            return APR_EINVAL;
-        }
-    }
-
-/* RFC1413_USERLEN = 512 */
-    ap_xlate_proto_from_ascii(buffer, i);
-    if (sscanf(buffer, "%hu , %hu : USERID :%*[^:]:%512s", &rmt_port, &our_port,
-	       user) != 3 || sav_rmt_port != rmt_port
-	|| sav_our_port != our_port)
-	return APR_EINVAL;
-
-    /*
-     * Strip trailing carriage return. It is part of the
-     * protocol, not part of the data.
-     */
-
-    if ((cp = strchr(user, '\r')))
-	*cp = '\0';
-
-    conn->remote_logname = apr_pstrdup(conn->pool, user);
-
-    return APR_SUCCESS;
-}
-
-char *ap_rfc1413(conn_rec *conn, server_rec *srv)
-{
-    apr_socket_t *sock;
-    apr_status_t rv;
-
-    rv = rfc1413_connect(&sock, conn, srv);
-    if (rv == APR_SUCCESS) {
-        rv = rfc1413_query(sock, conn, srv);
-        apr_socket_close(sock);
-    }
-    if (rv != APR_SUCCESS) {
-        conn->remote_logname = FROM_UNKNOWN;
-    }
-    return conn->remote_logname;
-}
diff --git a/server/scoreboard.c b/server/scoreboard.c
deleted file mode 100644
index b1f5b69..0000000
--- a/server/scoreboard.c
+++ /dev/null
@@ -1,525 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-#include "apr.h"
-#include "apr_strings.h"
-#include "apr_portable.h"
-#include "apr_lib.h"
-
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-#if APR_HAVE_SYS_TYPES_H
-#include <sys/types.h>
-#endif
-
-#include "ap_config.h"
-#include "httpd.h"
-#include "http_log.h"
-#include "http_main.h"
-#include "http_core.h"
-#include "http_config.h"
-#include "ap_mpm.h"
-
-#include "mpm.h"
-#include "scoreboard.h"
-
-AP_DECLARE_DATA scoreboard *ap_scoreboard_image = NULL;
-AP_DECLARE_DATA const char *ap_scoreboard_fname = NULL;
-AP_DECLARE_DATA int ap_extended_status = 0;
-
-#if APR_HAS_SHARED_MEMORY
-
-#include "apr_shm.h"
-
-#ifndef WIN32
-static /* but must be exported to mpm_winnt */
-#endif
-        apr_shm_t *ap_scoreboard_shm = NULL;
-
-#endif
-
-APR_HOOK_STRUCT(
-    APR_HOOK_LINK(pre_mpm)
-)
- 
-AP_IMPLEMENT_HOOK_RUN_ALL(int,pre_mpm,
-                          (apr_pool_t *p, ap_scoreboard_e sb_type),
-                          (p, sb_type),OK,DECLINED)
-
-struct ap_sb_handle_t {
-    int child_num;
-    int thread_num;
-};
-
-static int server_limit, thread_limit;
-static apr_size_t scoreboard_size;
-
-/*
- * ToDo:
- * This function should be renamed to cleanup_shared
- * and it should handle cleaning up a scoreboard shared
- * between processes using any form of IPC (file, shared memory
- * segment, etc.). Leave it as is now because it is being used
- * by various MPMs. 
- */
-static apr_status_t ap_cleanup_shared_mem(void *d)
-{
-#if APR_HAS_SHARED_MEMORY
-    free(ap_scoreboard_image);
-    ap_scoreboard_image = NULL;
-    apr_shm_destroy(ap_scoreboard_shm);
-#endif
-    return APR_SUCCESS;
-}
-
-AP_DECLARE(int) ap_calc_scoreboard_size(void)
-{
-    ap_mpm_query(AP_MPMQ_HARD_LIMIT_THREADS, &thread_limit);
-    ap_mpm_query(AP_MPMQ_HARD_LIMIT_DAEMONS, &server_limit);
-    scoreboard_size = sizeof(global_score);
-    scoreboard_size += sizeof(process_score) * server_limit;
-    scoreboard_size += sizeof(worker_score) * server_limit * thread_limit;
-    return scoreboard_size;
-}
-
-void ap_init_scoreboard(void *shared_score)
-{
-    char *more_storage;
-    int i;
-    
-    ap_calc_scoreboard_size();
-    ap_scoreboard_image = 
-        calloc(1, sizeof(scoreboard) + server_limit * sizeof(worker_score *));
-    more_storage = shared_score;
-    ap_scoreboard_image->global = (global_score *)more_storage;
-    more_storage += sizeof(global_score);
-    ap_scoreboard_image->parent = (process_score *)more_storage;
-    more_storage += sizeof(process_score) * server_limit;
-    ap_scoreboard_image->servers = 
-        (worker_score **)((char*)ap_scoreboard_image + sizeof(scoreboard));
-    for (i = 0; i < server_limit; i++) {
-        ap_scoreboard_image->servers[i] = (worker_score *)more_storage;
-        more_storage += thread_limit * sizeof(worker_score);
-    }
-    ap_assert(more_storage == (char*)shared_score + scoreboard_size);
-    ap_scoreboard_image->global->server_limit = server_limit;
-    ap_scoreboard_image->global->thread_limit = thread_limit;
-}
-
-/**
- * Create a name-based scoreboard in the given pool using the
- * given filename.
- */
-static apr_status_t create_namebased_scoreboard(apr_pool_t *pool,
-                                                const char *fname)
-{
-#if APR_HAS_SHARED_MEMORY
-    apr_status_t rv;
-
-    /* The shared memory file must not exist before we create the
-     * segment. */
-    apr_file_remove(fname, pool); /* ignore errors */
-
-    rv = apr_shm_create(&ap_scoreboard_shm, scoreboard_size, fname, pool);
-    if (rv != APR_SUCCESS) {
-        ap_log_error(APLOG_MARK, APLOG_CRIT, rv, NULL,
-                     "unable to create scoreboard "
-                     "(name-based shared memory failure)");
-        return rv;
-    }
-#endif /* APR_HAS_SHARED_MEMORY */
-    return APR_SUCCESS;
-}
-
-/* ToDo: This function should be made to handle setting up 
- * a scoreboard shared between processes using any IPC technique, 
- * not just a shared memory segment
- */
-static apr_status_t open_scoreboard(apr_pool_t *pconf)
-{
-#if APR_HAS_SHARED_MEMORY
-    apr_status_t rv;
-    char *fname = NULL;
-    apr_pool_t *global_pool;
-
-    /* We don't want to have to recreate the scoreboard after
-     * restarts, so we'll create a global pool and never clean it.
-     */
-    rv = apr_pool_create(&global_pool, NULL);
-    if (rv != APR_SUCCESS) {
-        ap_log_error(APLOG_MARK, APLOG_CRIT, rv, NULL,
-                     "Fatal error: unable to create global pool "
-                     "for use with by the scoreboard");
-        return rv;
-    }
-
-    /* The config says to create a name-based shmem */
-    if (ap_scoreboard_fname) {
-        /* make sure it's an absolute pathname */
-        fname = ap_server_root_relative(pconf, ap_scoreboard_fname);
-        if (!fname) {
-            ap_log_error(APLOG_MARK, APLOG_CRIT, APR_EBADPATH, NULL,
-                         "Fatal error: Invalid Scoreboard path %s",
-                         ap_scoreboard_fname);
-            return APR_EBADPATH;
-        }
-        return create_namebased_scoreboard(global_pool, fname);
-    }
-    else { /* config didn't specify, we get to choose shmem type */
-        rv = apr_shm_create(&ap_scoreboard_shm, scoreboard_size, NULL,
-                            global_pool); /* anonymous shared memory */
-        if ((rv != APR_SUCCESS) && (rv != APR_ENOTIMPL)) {
-            ap_log_error(APLOG_MARK, APLOG_CRIT, rv, NULL,
-                         "Unable to create scoreboard "
-                         "(anonymous shared memory failure)");
-            return rv;
-        }
-        /* Make up a filename and do name-based shmem */
-        else if (rv == APR_ENOTIMPL) {
-            /* Make sure it's an absolute pathname */
-            ap_scoreboard_fname = DEFAULT_SCOREBOARD;
-            fname = ap_server_root_relative(pconf, ap_scoreboard_fname);
-
-            return create_namebased_scoreboard(global_pool, fname);
-        }
-    }
-#endif /* APR_HAS_SHARED_MEMORY */
-    return APR_SUCCESS;
-}
-
-/* If detach is non-zero, this is a seperate child process,
- * if zero, it is a forked child.
- */
-apr_status_t ap_reopen_scoreboard(apr_pool_t *p, apr_shm_t **shm, int detached)
-{
-#if APR_HAS_SHARED_MEMORY
-    if (!detached) {
-        return APR_SUCCESS;
-    }
-    if (apr_shm_size_get(ap_scoreboard_shm) < scoreboard_size) {
-        ap_log_error(APLOG_MARK, APLOG_CRIT | APLOG_NOERRNO, 0, NULL,
-                     "Fatal error: shared scoreboard too small for child!");
-        apr_shm_detach(ap_scoreboard_shm);
-        ap_scoreboard_shm = NULL;
-        return APR_EINVAL;
-    }
-    /* everything will be cleared shortly */
-    if (*shm) {
-        *shm = ap_scoreboard_shm;
-    }
-#endif
-    return APR_SUCCESS;
-}
-
-apr_status_t ap_cleanup_scoreboard(void *d)
-{
-    if (ap_scoreboard_image == NULL) {
-        return APR_SUCCESS;
-    }
-    if (ap_scoreboard_image->global->sb_type == SB_SHARED) {
-        ap_cleanup_shared_mem(NULL);
-    }
-    else {
-        free(ap_scoreboard_image->global);
-        free(ap_scoreboard_image);
-        ap_scoreboard_image = NULL;
-    }
-    return APR_SUCCESS;
-}
-
-/* Create or reinit an existing scoreboard. The MPM can control whether
- * the scoreboard is shared across multiple processes or not
- */
-int ap_create_scoreboard(apr_pool_t *p, ap_scoreboard_e sb_type)
-{
-    int running_gen = 0;
-#if APR_HAS_SHARED_MEMORY
-    apr_status_t rv;
-#endif
-
-    if (ap_scoreboard_image) {
-        running_gen = ap_scoreboard_image->global->running_generation;
-    }
-
-    if (ap_scoreboard_image == NULL) {
-        ap_calc_scoreboard_size();
-#if APR_HAS_SHARED_MEMORY
-        if (sb_type == SB_SHARED) {
-            void *sb_shared;
-            rv = open_scoreboard(p);
-            if (rv || !(sb_shared = apr_shm_baseaddr_get(ap_scoreboard_shm))) {
-                return HTTP_INTERNAL_SERVER_ERROR;
-            }
-            memset(sb_shared, 0, scoreboard_size);
-            ap_init_scoreboard(sb_shared);
-        }
-        else 
-#endif
-        {
-            /* A simple malloc will suffice */
-            void *sb_mem = calloc(1, scoreboard_size);
-            if (sb_mem == NULL) {
-                ap_log_error(APLOG_MARK, APLOG_CRIT | APLOG_NOERRNO, 0, NULL,
-                             "(%d)%s: cannot allocate scoreboard",
-                             errno, strerror(errno));
-                return HTTP_INTERNAL_SERVER_ERROR;
-            }
-            ap_init_scoreboard(sb_mem);
-        }
-    }
-    ap_scoreboard_image->global->sb_type = sb_type;
-    ap_scoreboard_image->global->running_generation = running_gen;
-    ap_scoreboard_image->global->restart_time = apr_time_now();
-    apr_pool_cleanup_register(p, NULL, ap_cleanup_scoreboard, apr_pool_cleanup_null);
-    return OK;
-}
-
-/* Routines called to deal with the scoreboard image
- * --- note that we do *not* need write locks, since update_child_status
- * only updates a *single* record in place, and only one process writes to
- * a given scoreboard slot at a time (either the child process owning that
- * slot, or the parent, noting that the child has died).
- *
- * As a final note --- setting the score entry to getpid() is always safe,
- * since when the parent is writing an entry, it's only noting SERVER_DEAD
- * anyway.
- */
-
-void ap_sync_scoreboard_image(void)
-{
-}
-
-AP_DECLARE(int) ap_exists_scoreboard_image(void)
-{
-    return (ap_scoreboard_image ? 1 : 0);
-}
-
-static APR_INLINE void put_scoreboard_info(int child_num, int thread_num, 
-                                           worker_score *new_score_rec)
-{
-    /* XXX - needs to be fixed to account for threads */
-#ifdef SCOREBOARD_FILE
-    lseek(scoreboard_fd, sizeof(global_score) 
-                         + (long)child_num * sizeof(worker_score), 0);
-    force_write(scoreboard_fd, new_score_rec, sizeof(worker_score));
-#endif
-}
-
-void update_scoreboard_global(void)
-{
-#ifdef SCOREBOARD_FILE
-    lseek(scoreboard_fd, 0, 0);
-    force_write(scoreboard_fd, &ap_scoreboard_image->global,
-                sizeof ap_scoreboard_image->global);
-#endif
-}
-
-AP_DECLARE(void) ap_increment_counts(ap_sb_handle_t *sb, request_rec *r)
-{
-    worker_score *ws;
-
-    ws = &ap_scoreboard_image->servers[sb->child_num][sb->thread_num];
-
-#ifdef HAVE_TIMES
-    times(&ws->times);
-#endif
-    ws->access_count++;
-    ws->my_access_count++;
-    ws->conn_count++;
-    ws->bytes_served += r->bytes_sent;
-    ws->my_bytes_served += r->bytes_sent;
-    ws->conn_bytes += r->bytes_sent;
-
-    put_scoreboard_info(sb->child_num, sb->thread_num, ws);
-}
-
-AP_DECLARE(int) find_child_by_pid(apr_proc_t *pid)
-{
-    int i;
-    int max_daemons_limit;
-
-    ap_mpm_query(AP_MPMQ_MAX_DAEMONS, &max_daemons_limit);
-
-    for (i = 0; i < max_daemons_limit; ++i) {
-        if (ap_scoreboard_image->parent[i].pid == pid->pid) {
-            return i;
-        }
-    }
-
-    return -1;
-}
-
-AP_DECLARE(void) ap_create_sb_handle(ap_sb_handle_t **new_sbh, apr_pool_t *p,
-                                     int child_num, int thread_num)
-{
-    *new_sbh = (ap_sb_handle_t *)apr_palloc(p, sizeof(ap_sb_handle_t));
-    (*new_sbh)->child_num = child_num;
-    (*new_sbh)->thread_num = thread_num;
-}
-
-AP_DECLARE(int) ap_update_child_status_from_indexes(int child_num,
-                                                    int thread_num,
-                                                    int status,
-                                                    request_rec *r)
-{
-    int old_status;
-    worker_score *ws;
-    process_score *ps;
-
-    if (child_num < 0) {
-        return -1;
-    }
-
-    ws = &ap_scoreboard_image->servers[child_num][thread_num];
-    old_status = ws->status;
-    ws->status = status;
-
-    ps = &ap_scoreboard_image->parent[child_num];
-    
-    if (status == SERVER_READY
-        && old_status == SERVER_STARTING) {
-        ws->thread_num = child_num * thread_limit + thread_num;
-        ps->generation = ap_my_generation;
-    }
-
-    if (ap_extended_status) {
-        ws->last_used = apr_time_now();
-        if (status == SERVER_READY || status == SERVER_DEAD) {
-            /*
-             * Reset individual counters
-             */
-            if (status == SERVER_DEAD) {
-                ws->my_access_count = 0L;
-                ws->my_bytes_served = 0L;
-            }
-            ws->conn_count = (unsigned short)0;
-            ws->conn_bytes = (unsigned long)0;
-        }
-        if (r) {
-            conn_rec *c = r->connection;
-            apr_cpystrn(ws->client, ap_get_remote_host(c, r->per_dir_config,
-                        REMOTE_NOLOOKUP, NULL), sizeof(ws->client));
-            if (r->the_request == NULL) {
-                apr_cpystrn(ws->request, "NULL", sizeof(ws->request));
-            } else if (r->parsed_uri.password == NULL) {
-                apr_cpystrn(ws->request, r->the_request, sizeof(ws->request));
-            } else {
-                /* Don't reveal the password in the server-status view */
-                apr_cpystrn(ws->request, apr_pstrcat(r->pool, r->method, " ",
-                            apr_uri_unparse(r->pool, &r->parsed_uri,
-                            APR_URI_UNP_OMITPASSWORD),
-                            r->assbackwards ? NULL : " ", r->protocol, NULL),
-                            sizeof(ws->request));
-            }
-            apr_cpystrn(ws->vhost, r->server->server_hostname,
-                        sizeof(ws->vhost));
-        }
-    }
-    
-    put_scoreboard_info(child_num, thread_num, ws);
-    return old_status;
-}
-
-AP_DECLARE(int) ap_update_child_status(ap_sb_handle_t *sbh, int status,
-                                      request_rec *r)
-{
-    return ap_update_child_status_from_indexes(sbh->child_num, sbh->thread_num,
-                                               status, r);
-}
-
-void ap_time_process_request(int child_num, int thread_num, int status)
-{
-    worker_score *ws;
-
-    if (child_num < 0) {
-        return;
-    }
-
-    ws = &ap_scoreboard_image->servers[child_num][thread_num];
-
-    if (status == START_PREQUEST) {
-        ws->start_time = apr_time_now(); 
-    }
-    else if (status == STOP_PREQUEST) {
-        ws->stop_time = apr_time_now(); 
-    }
-    put_scoreboard_info(child_num, thread_num, ws);
-}
-
-AP_DECLARE(worker_score *) ap_get_scoreboard_worker(int x, int y)
-{
-    if (((x < 0) || (server_limit < x)) ||
-        ((y < 0) || (thread_limit < y))) {
-        return(NULL); /* Out of range */
-    }
-    return &ap_scoreboard_image->servers[x][y];
-}
-
-AP_DECLARE(process_score *) ap_get_scoreboard_process(int x)
-{
-    if ((x < 0) || (server_limit < x)) {
-        return(NULL); /* Out of range */
-    }
-    return &ap_scoreboard_image->parent[x];
-}
-
-AP_DECLARE(global_score *) ap_get_scoreboard_global()
-{
-    return ap_scoreboard_image->global;
-}
diff --git a/server/util.c b/server/util.c
deleted file mode 100644
index b60a3a7..0000000
--- a/server/util.c
+++ /dev/null
@@ -1,1932 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-/*
- * util.c: string utility things
- * 
- * 3/21/93 Rob McCool
- * 1995-96 Many changes by the Apache Software Foundation
- * 
- */
-
-/* Debugging aid:
- * #define DEBUG            to trace all cfg_open*()/cfg_closefile() calls
- * #define DEBUG_CFG_LINES  to trace every line read from the config files
- */
-
-#include "apr.h"
-#include "apr_strings.h"
-#include "apr_lib.h"
-
-#define APR_WANT_STDIO
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-#if APR_HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#if APR_HAVE_NETDB_H
-#include <netdb.h>              /* for gethostbyname() */
-#endif
-
-#define CORE_PRIVATE
-
-#include "ap_config.h"
-#include "apr_base64.h"
-#include "httpd.h"
-#include "http_main.h"
-#include "http_log.h"
-#include "http_protocol.h"
-#include "http_config.h"
-#include "util_ebcdic.h"
-
-#ifdef HAVE_PWD_H
-#include <pwd.h>
-#endif
-#ifdef HAVE_GRP_H
-#include <grp.h>
-#endif
-
-/* A bunch of functions in util.c scan strings looking for certain characters.
- * To make that more efficient we encode a lookup table.  The test_char_table
- * is generated automatically by gen_test_char.c.
- */
-#include "test_char.h"
-
-/* we assume the folks using this ensure 0 <= c < 256... which means
- * you need a cast to (unsigned char) first, you can't just plug a
- * char in here and get it to work, because if char is signed then it
- * will first be sign extended.
- */
-#define TEST_CHAR(c, f)	(test_char_table[(unsigned)(c)] & (f))
-
-/*
- * Examine a field value (such as a media-/content-type) string and return
- * it sans any parameters; e.g., strip off any ';charset=foo' and the like.
- */
-AP_DECLARE(char *) ap_field_noparam(apr_pool_t *p, const char *intype)
-{
-    const char *semi;
-
-    if (intype == NULL) return NULL;
-
-    semi = ap_strchr_c(intype, ';');
-    if (semi == NULL) {
-	return apr_pstrdup(p, intype);
-    } 
-    else {
-	while ((semi > intype) && apr_isspace(semi[-1])) {
-	    semi--;
-	}
-	return apr_pstrndup(p, intype, semi - intype);
-    }
-}
-
-AP_DECLARE(char *) ap_ht_time(apr_pool_t *p, apr_time_t t, const char *fmt, int gmt)
-{
-    apr_size_t retcode;
-    char ts[MAX_STRING_LEN];
-    char tf[MAX_STRING_LEN];
-    apr_time_exp_t xt;
-
-    if (gmt) {
-	const char *f;
-	char *strp;
-
-        apr_explode_gmt(&xt, t);
-	/* Convert %Z to "GMT" and %z to "+0000";
-	 * on hosts that do not have a time zone string in struct tm,
-	 * strftime must assume its argument is local time.
-	 */
-	for(strp = tf, f = fmt; strp < tf + sizeof(tf) - 6 && (*strp = *f)
-	    ; f++, strp++) {
-	    if (*f != '%') continue;
-	    switch (f[1]) {
-	    case '%':
-		*++strp = *++f;
-		break;
-	    case 'Z':
-		*strp++ = 'G';
-		*strp++ = 'M';
-		*strp = 'T';
-		f++;
-		break;
-	    case 'z': /* common extension */
-		*strp++ = '+';
-		*strp++ = '0';
-		*strp++ = '0';
-		*strp++ = '0';
-		*strp = '0';
-		f++;
-		break;
-	    }
-	}
-	*strp = '\0';
-	fmt = tf;
-    }
-    else {
-        apr_explode_localtime(&xt, t);
-    }
-
-    /* check return code? */
-    apr_strftime(ts, &retcode, MAX_STRING_LEN, fmt, &xt);
-    ts[MAX_STRING_LEN - 1] = '\0';
-    return apr_pstrdup(p, ts);
-}
-
-/* Roy owes Rob beer. */
-/* Rob owes Roy dinner. */
-
-/* These legacy comments would make a lot more sense if Roy hadn't
- * replaced the old later_than() routine with util_date.c.
- *
- * Well, okay, they still wouldn't make any sense.
- */
-
-/* Match = 0, NoMatch = 1, Abort = -1
- * Based loosely on sections of wildmat.c by Rich Salz
- * Hmmm... shouldn't this really go component by component?
- */
-AP_DECLARE(int) ap_strcmp_match(const char *str, const char *exp)
-{
-    int x, y;
-
-    for (x = 0, y = 0; exp[y]; ++y, ++x) {
-	if ((!str[x]) && (exp[y] != '*'))
-	    return -1;
-	if (exp[y] == '*') {
-	    while (exp[++y] == '*');
-	    if (!exp[y])
-		return 0;
-	    while (str[x]) {
-		int ret;
-		if ((ret = ap_strcmp_match(&str[x++], &exp[y])) != 1)
-		    return ret;
-	    }
-	    return -1;
-	}
-	else if ((exp[y] != '?') && (str[x] != exp[y]))
-	    return 1;
-    }
-    return (str[x] != '\0');
-}
-
-AP_DECLARE(int) ap_strcasecmp_match(const char *str, const char *exp)
-{
-    int x, y;
-
-    for (x = 0, y = 0; exp[y]; ++y, ++x) {
-	if ((!str[x]) && (exp[y] != '*'))
-	    return -1;
-	if (exp[y] == '*') {
-	    while (exp[++y] == '*');
-	    if (!exp[y])
-		return 0;
-	    while (str[x]) {
-		int ret;
-		if ((ret = ap_strcasecmp_match(&str[x++], &exp[y])) != 1)
-		    return ret;
-	    }
-	    return -1;
-	}
-	else if ((exp[y] != '?') && (apr_tolower(str[x]) != apr_tolower(exp[y])))
-	    return 1;
-    }
-    return (str[x] != '\0');
-}
-
-/* We actually compare the canonical root to this root, (but we don't
- * waste time checking the case), since every use of this function in 
- * httpd-2.0 tests if the path is 'proper', meaning we've already passed
- * it through apr_filepath_merge, or we haven't.
- */
-AP_DECLARE(int) ap_os_is_path_absolute(apr_pool_t *p, const char *dir) 
-{
-    const char *newpath;
-    const char *ourdir = dir;
-    if (apr_filepath_root(&newpath, &dir, 0, p) != APR_SUCCESS
-            || strncmp(newpath, ourdir, strlen(newpath)) != 0) {
-        return 0;
-    }
-    return 1;
-}
-
-AP_DECLARE(int) ap_is_matchexp(const char *str)
-{
-    register int x;
-
-    for (x = 0; str[x]; x++)
-	if ((str[x] == '*') || (str[x] == '?'))
-	    return 1;
-    return 0;
-}
-
-/*
- * Here's a pool-based interface to POSIX regex's regcomp().
- * Note that we return regex_t instead of being passed one.
- * The reason is that if you use an already-used regex_t structure,
- * the memory that you've already allocated gets forgotten, and
- * regfree() doesn't clear it. So we don't allow it.
- */
-
-static apr_status_t regex_cleanup(void *preg)
-{
-    regfree((regex_t *) preg);
-    return APR_SUCCESS;
-}
-
-AP_DECLARE(regex_t *) ap_pregcomp(apr_pool_t *p, const char *pattern,
-				   int cflags)
-{
-    regex_t *preg = apr_palloc(p, sizeof(regex_t));
-
-    if (regcomp(preg, pattern, cflags)) {
-	return NULL;
-    }
-
-    apr_pool_cleanup_register(p, (void *) preg, regex_cleanup, regex_cleanup);
-
-    return preg;
-}
-
-AP_DECLARE(void) ap_pregfree(apr_pool_t *p, regex_t * reg)
-{
-    regfree(reg);
-    apr_pool_cleanup_kill(p, (void *) reg, regex_cleanup);
-}
-
-/*
- * Similar to standard strstr() but we ignore case in this version.
- * Based on the strstr() implementation further below.
- */
-AP_DECLARE(char *) ap_strcasestr(const char *s1, const char *s2)
-{
-    char *p1, *p2;
-    if (*s2 == '\0') {
-	/* an empty s2 */
-        return((char *)s1);
-    }
-    while(1) {
-	for ( ; (*s1 != '\0') && (apr_tolower(*s1) != apr_tolower(*s2)); s1++);
-	if (*s1 == '\0') return(NULL);
-	/* found first character of s2, see if the rest matches */
-        p1 = (char *)s1;
-        p2 = (char *)s2;
-        while (apr_tolower(*++p1) == apr_tolower(*++p2)) {
-            if (*p1 == '\0') {
-                /* both strings ended together */
-                return((char *)s1);
-            }
-        }
-        if (*p2 == '\0') {
-            /* second string ended, a match */
-            break;
-        }
-	/* didn't find a match here, try starting at next character in s1 */
-        s1++;
-    }
-    return((char *)s1);
-}
-
-/*
- * Returns an offsetted pointer in bigstring immediately after
- * prefix. Returns bigstring if bigstring doesn't start with
- * prefix or if prefix is longer than bigstring while still matching.
- * NOTE: pointer returned is relative to bigstring, so we
- * can use standard pointer comparisons in the calling function
- * (eg: test if ap_stripprefix(a,b) == a)
- */
-AP_DECLARE(const char *) ap_stripprefix(const char *bigstring,
-                                        const char *prefix)
-{
-    const char *p1;
-
-    if (*prefix == '\0')
-        return bigstring;
-
-    p1 = bigstring;
-    while (*p1 && *prefix) {
-        if (*p1++ != *prefix++)
-            return bigstring;
-    }
-    if (*prefix == '\0')
-        return p1;
-
-    /* hit the end of bigstring! */
-    return bigstring;
-}
-
-/* 
- * Apache stub function for the regex libraries regexec() to make sure the
- * whole regex(3) API is available through the Apache (exported) namespace.
- * This is especially important for the DSO situations of modules.
- * DO NOT MAKE A MACRO OUT OF THIS FUNCTION!
- */
-AP_DECLARE(int) ap_regexec(regex_t *preg, const char *string,
-                           size_t nmatch, regmatch_t pmatch[], int eflags)
-{
-    return regexec(preg, string, nmatch, pmatch, eflags);
-}
-
-AP_DECLARE(size_t) ap_regerror(int errcode, const regex_t *preg, char *errbuf, size_t errbuf_size)
-{
-    return regerror(errcode, preg, errbuf, errbuf_size);
-}
-
-
-/* This function substitutes for $0-$9, filling in regular expression
- * submatches. Pass it the same nmatch and pmatch arguments that you
- * passed ap_regexec(). pmatch should not be greater than the maximum number
- * of subexpressions - i.e. one more than the re_nsub member of regex_t.
- *
- * input should be the string with the $-expressions, source should be the
- * string that was matched against.
- *
- * It returns the substituted string, or NULL on error.
- *
- * Parts of this code are based on Henry Spencer's regsub(), from his
- * AT&T V8 regexp package.
- */
-
-AP_DECLARE(char *) ap_pregsub(apr_pool_t *p, const char *input, const char *source,
-			   size_t nmatch, regmatch_t pmatch[])
-{
-    const char *src = input;
-    char *dest, *dst;
-    char c;
-    size_t no;
-    int len;
-
-    if (!source)
-	return NULL;
-    if (!nmatch)
-	return apr_pstrdup(p, src);
-
-    /* First pass, find the size */
-
-    len = 0;
-
-    while ((c = *src++) != '\0') {
-	if (c == '&')
-	    no = 0;
-	else if (c == '$' && apr_isdigit(*src))
-	    no = *src++ - '0';
-	else
-	    no = 10;
-
-	if (no > 9) {		/* Ordinary character. */
-	    if (c == '\\' && (*src == '$' || *src == '&'))
-		c = *src++;
-	    len++;
-	}
-	else if (no < nmatch && pmatch[no].rm_so < pmatch[no].rm_eo) {
-	    len += pmatch[no].rm_eo - pmatch[no].rm_so;
-	}
-
-    }
-
-    dest = dst = apr_pcalloc(p, len + 1);
-
-    /* Now actually fill in the string */
-
-    src = input;
-
-    while ((c = *src++) != '\0') {
-	if (c == '&')
-	    no = 0;
-	else if (c == '$' && apr_isdigit(*src))
-	    no = *src++ - '0';
-	else
-	    no = 10;
-
-	if (no > 9) {		/* Ordinary character. */
-	    if (c == '\\' && (*src == '$' || *src == '&'))
-		c = *src++;
-	    *dst++ = c;
-	}
-	else if (no < nmatch && pmatch[no].rm_so < pmatch[no].rm_eo) {
-	    len = pmatch[no].rm_eo - pmatch[no].rm_so;
-	    memcpy(dst, source + pmatch[no].rm_so, len);
-	    dst += len;
-	}
-
-    }
-    *dst = '\0';
-
-    return dest;
-}
-
-/*
- * Parse .. so we don't compromise security
- */
-AP_DECLARE(void) ap_getparents(char *name)
-{
-    char *next;
-    int l, w, first_dot;
-
-    /* Four paseses, as per RFC 1808 */
-    /* a) remove ./ path segments */
-    for (next = name; *next && (*next != '.'); next++) {
-    }
-    l = w = first_dot = next - name;
-    while (name[l] != '\0') {
-	if (name[l] == '.' && name[l + 1] == '/' && (l == 0 || name[l - 1] == '/'))
-	    l += 2;
-	else
-	    name[w++] = name[l++];
-    }
-
-    /* b) remove trailing . path, segment */
-    if (w == 1 && name[0] == '.')
-	w--;
-    else if (w > 1 && name[w - 1] == '.' && name[w - 2] == '/')
-	w--;
-    name[w] = '\0';
-
-    /* c) remove all xx/../ segments. (including leading ../ and /../) */
-    l = first_dot;
-
-    while (name[l] != '\0') {
-	if (name[l] == '.' && name[l + 1] == '.' && name[l + 2] == '/' &&
-	    (l == 0 || name[l - 1] == '/')) {
-	    register int m = l + 3, n;
-
-	    l = l - 2;
-	    if (l >= 0) {
-		while (l >= 0 && name[l] != '/')
-		    l--;
-		l++;
-	    }
-	    else
-		l = 0;
-	    n = l;
-	    while ((name[n] = name[m]))
-		(++n, ++m);
-	}
-	else
-	    ++l;
-    }
-
-    /* d) remove trailing xx/.. segment. */
-    if (l == 2 && name[0] == '.' && name[1] == '.')
-	name[0] = '\0';
-    else if (l > 2 && name[l - 1] == '.' && name[l - 2] == '.' && name[l - 3] == '/') {
-	l = l - 4;
-	if (l >= 0) {
-	    while (l >= 0 && name[l] != '/')
-		l--;
-	    l++;
-	}
-	else
-	    l = 0;
-	name[l] = '\0';
-    }
-}
-
-AP_DECLARE(void) ap_no2slash(char *name)
-{
-    char *d, *s;
-
-    s = d = name;
-
-#ifdef HAVE_UNC_PATHS
-    /* Check for UNC names.  Leave leading two slashes. */
-    if (s[0] == '/' && s[1] == '/')
-        *d++ = *s++;
-#endif
-
-    while (*s) {
-	if ((*d++ = *s) == '/') {
-	    do {
-		++s;
-	    } while (*s == '/');
-	}
-	else {
-	    ++s;
-	}
-    }
-    *d = '\0';
-}
-
-
-/*
- * copy at most n leading directories of s into d
- * d should be at least as large as s plus 1 extra byte
- * assumes n > 0
- * the return value is the ever useful pointer to the trailing \0 of d
- *
- * MODIFIED FOR HAVE_DRIVE_LETTERS and NETWARE environments, 
- * so that if n == 0, "/" is returned in d with n == 1 
- * and s == "e:/test.html", "e:/" is returned in d
- * *** See also directory_walk in modules/http/http_request.c
-
- * examples:
- *    /a/b, 0  ==> /  (true for all platforms)
- *    /a/b, 1  ==> /
- *    /a/b, 2  ==> /a/
- *    /a/b, 3  ==> /a/b/
- *    /a/b, 4  ==> /a/b/
- *
- *    c:/a/b 0 ==> /
- *    c:/a/b 1 ==> c:/
- *    c:/a/b 2 ==> c:/a/
- *    c:/a/b 3 ==> c:/a/b
- *    c:/a/b 4 ==> c:/a/b
- */
-AP_DECLARE(char *) ap_make_dirstr_prefix(char *d, const char *s, int n)
-{
-    if (n < 1) {
-        *d = '/';
-        *++d = '\0';
-        return (d);
-    }
-
-    for (;;) {
-	if (*s == '\0' || (*s == '/' && (--n) == 0)) {
-	    *d = '/';
-	    break;
-	}
-	*d++ = *s++;
-    }
-    *++d = 0;
-    return (d);
-}
-
-
-/*
- * return the parent directory name including trailing / of the file s
- */
-AP_DECLARE(char *) ap_make_dirstr_parent(apr_pool_t *p, const char *s)
-{
-    const char *last_slash = ap_strrchr_c(s, '/');
-    char *d;
-    int l;
-
-    if (last_slash == NULL) {
-	return apr_pstrdup(p, "");
-    }
-    l = (last_slash - s) + 1;
-    d = apr_palloc(p, l + 1);
-    memcpy(d, s, l);
-    d[l] = 0;
-    return (d);
-}
-
-
-AP_DECLARE(int) ap_count_dirs(const char *path)
-{
-    register int x, n;
-
-    for (x = 0, n = 0; path[x]; x++)
-	if (path[x] == '/')
-	    n++;
-    return n;
-}
-
-AP_DECLARE(char *) ap_getword_nc(apr_pool_t *atrans, char **line, char stop)
-{
-    return ap_getword(atrans, (const char **) line, stop);
-}
-
-AP_DECLARE(char *) ap_getword(apr_pool_t *atrans, const char **line, char stop)
-{
-    const char *pos = *line;
-    int len;
-    char *res;
-
-    while ((*pos != stop) && *pos) {
-        ++pos;
-    }
-
-    len = pos - *line;
-    res = (char *)apr_palloc(atrans, len + 1);
-    memcpy(res, *line, len);
-    res[len] = 0;
-
-    if (stop) {
-        while (*pos == stop) {
-            ++pos;
-        }
-    }
-    *line = pos;
-
-    return res;
-}
-
-AP_DECLARE(char *) ap_getword_white_nc(apr_pool_t *atrans, char **line)
-{
-    return ap_getword_white(atrans, (const char **) line);
-}
-
-AP_DECLARE(char *) ap_getword_white(apr_pool_t *atrans, const char **line)
-{
-    int pos = -1, x;
-    char *res;
-
-    for (x = 0; (*line)[x]; x++) {
-	if (apr_isspace((*line)[x])) {
-	    pos = x;
-	    break;
-	}
-    }
-
-    if (pos == -1) {
-	res = apr_pstrdup(atrans, *line);
-	*line += strlen(*line);
-	return res;
-    }
-
-    res = apr_palloc(atrans, pos + 1);
-    apr_cpystrn(res, *line, pos + 1);
-
-    while (apr_isspace((*line)[pos]))
-	++pos;
-
-    *line += pos;
-
-    return res;
-}
-
-AP_DECLARE(char *) ap_getword_nulls_nc(apr_pool_t *atrans, char **line, char stop)
-{
-    return ap_getword_nulls(atrans, (const char **) line, stop);
-}
-
-AP_DECLARE(char *) ap_getword_nulls(apr_pool_t *atrans, const char **line, char stop)
-{
-    const char *pos = ap_strchr_c(*line, stop);
-    char *res;
-
-    if (!pos) {
-	res = apr_pstrdup(atrans, *line);
-	*line += strlen(*line);
-	return res;
-    }
-
-    res = apr_pstrndup(atrans, *line, pos - *line);
-
-    ++pos;
-
-    *line = pos;
-
-    return res;
-}
-
-/* Get a word, (new) config-file style --- quoted strings and backslashes
- * all honored
- */
-
-static char *substring_conf(apr_pool_t *p, const char *start, int len, char quote)
-{
-    char *result = apr_palloc(p, len + 2);
-    char *resp = result;
-    int i;
-
-    for (i = 0; i < len; ++i) {
-	if (start[i] == '\\' && (start[i + 1] == '\\'
-				 || (quote && start[i + 1] == quote)))
-	    *resp++ = start[++i];
-	else
-	    *resp++ = start[i];
-    }
-
-    *resp++ = '\0';
-#if RESOLVE_ENV_PER_TOKEN
-    return ap_resolve_env(p,result);
-#else
-    return result;
-#endif
-}
-
-AP_DECLARE(char *) ap_getword_conf_nc(apr_pool_t *p, char **line)
-{
-    return ap_getword_conf(p, (const char **) line);
-}
-
-AP_DECLARE(char *) ap_getword_conf(apr_pool_t *p, const char **line)
-{
-    const char *str = *line, *strend;
-    char *res;
-    char quote;
-
-    while (*str && apr_isspace(*str))
-	++str;
-
-    if (!*str) {
-	*line = str;
-	return "";
-    }
-
-    if ((quote = *str) == '"' || quote == '\'') {
-	strend = str + 1;
-	while (*strend && *strend != quote) {
-	    if (*strend == '\\' && strend[1] && strend[1] == quote)
-		strend += 2;
-	    else
-		++strend;
-	}
-	res = substring_conf(p, str + 1, strend - str - 1, quote);
-
-	if (*strend == quote)
-	    ++strend;
-    }
-    else {
-	strend = str;
-	while (*strend && !apr_isspace(*strend))
-	    ++strend;
-
-	res = substring_conf(p, str, strend - str, 0);
-    }
-
-    while (*strend && apr_isspace(*strend))
-	++strend;
-    *line = strend;
-    return res;
-}
-
-/* Check a string for any ${ENV} environment variable
- * construct and replace each them by the value of
- * that environment variable, if it exists. If the
- * environment value does not exist, leave the ${ENV}
- * construct alone; it means something else.
- */
-AP_DECLARE(const char *) ap_resolve_env(apr_pool_t *p, const char * word)
-{
-       char tmp[ MAX_STRING_LEN ];
-       const char *s, *e;
-       tmp[0] = '\0';
-
-       if (!(s=ap_strchr_c(word,'$')))
-               return word;
-
-       do {
-               /* XXX - relies on strncat() to add '\0'
-                */
-	       strncat(tmp,word,s - word);
-               if ((s[1] == '{') && (e=ap_strchr_c(s,'}'))) {
-                       const char *e2 = e;
-                       word = e + 1;
-                       e = getenv(s+2);
-                       if (e) {
-                           strcat(tmp,e);
-                       } else {
-                           strncat(tmp, s, e2-s);
-                           strcat(tmp,"}");
-                       }
-               } else {
-                       /* ignore invalid strings */
-                       word = s+1;
-                       strcat(tmp,"$");
-               };
-       } while ((s=ap_strchr_c(word,'$')));
-       strcat(tmp,word);
-
-       return apr_pstrdup(p,tmp);
-}
-AP_DECLARE(int) ap_cfg_closefile(ap_configfile_t *cfp)
-{
-#ifdef DEBUG
-    ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, NULL, 
-        "Done with config file %s", cfp->name);
-#endif
-    return (cfp->close == NULL) ? 0 : cfp->close(cfp->param);
-}
-
-static apr_status_t cfg_close(void *param)
-{
-    apr_file_t *cfp = (apr_file_t *) param;
-    return (apr_file_close(cfp));
-}
-
-static int cfg_getch(void *param)
-{
-    char ch;
-    apr_file_t *cfp = (apr_file_t *) param;
-    if (apr_file_getc(&ch, cfp) == APR_SUCCESS)
-        return ch;
-    return (int)EOF;
-}
-
-static void *cfg_getstr(void *buf, size_t bufsiz, void *param)
-{
-    apr_file_t *cfp = (apr_file_t *) param;
-    apr_status_t rv;
-    rv = apr_file_gets(buf, bufsiz, cfp);
-    if (rv == APR_SUCCESS || (rv == APR_EOF && strcmp(buf, "")))
-        return buf;
-    return NULL;
-}
-
-/* Open a ap_configfile_t as FILE, return open ap_configfile_t struct pointer */
-AP_DECLARE(apr_status_t) ap_pcfg_openfile(ap_configfile_t **ret_cfg, apr_pool_t *p, const char *name)
-{
-    ap_configfile_t *new_cfg;
-    apr_file_t *file = NULL;
-    apr_finfo_t finfo;
-    apr_status_t status;
-#ifdef DEBUG
-    char buf[120];
-#endif
-
-    if (name == NULL) {
-        ap_log_error(APLOG_MARK, APLOG_ERR | APLOG_NOERRNO, 0, NULL,
-               "Internal error: pcfg_openfile() called with NULL filename");
-        return APR_EBADF;
-    }
-
-    status = apr_file_open(&file, name, APR_READ | APR_BUFFERED, APR_OS_DEFAULT, p);
-#ifdef DEBUG
-    ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, 0, NULL,
-                "Opening config file %s (%s)",
-                name, (status != APR_SUCCESS) ? 
-                apr_strerror(status, buf, sizeof(buf)) : "successful");
-#endif
-    if (status != APR_SUCCESS)
-        return status;
-
-    status = apr_file_info_get(&finfo, APR_FINFO_TYPE, file);
-    if (status != APR_SUCCESS)
-        return status;
-
-    if (finfo.filetype != APR_REG &&
-#if defined(WIN32) || defined(OS2) || defined(NETWARE)
-        strcasecmp(apr_filename_of_pathname(name), "nul") != 0) {
-#else
-        strcmp(name, "/dev/null") != 0) {
-#endif /* WIN32 || OS2 */
-        ap_log_error(APLOG_MARK, APLOG_ERR | APLOG_NOERRNO, 0, NULL,
-                    "Access to file %s denied by server: not a regular file",
-                    name);
-        apr_file_close(file);
-        return APR_EBADF;
-    }
-
-    new_cfg = apr_palloc(p, sizeof(*new_cfg));
-    new_cfg->param = file;
-    new_cfg->name = apr_pstrdup(p, name);
-    new_cfg->getch = (int (*)(void *)) cfg_getch;
-    new_cfg->getstr = (void *(*)(void *, size_t, void *)) cfg_getstr;
-    new_cfg->close = (int (*)(void *)) cfg_close;
-    new_cfg->line_number = 0;
-    *ret_cfg = new_cfg;
-    return APR_SUCCESS;
-}
-
-
-/* Allocate a ap_configfile_t handle with user defined functions and params */
-AP_DECLARE(ap_configfile_t *) ap_pcfg_open_custom(apr_pool_t *p, const char *descr,
-    void *param,
-    int(*getch)(void *param),
-    void *(*getstr) (void *buf, size_t bufsiz, void *param),
-    int(*close_func)(void *param))
-{
-    ap_configfile_t *new_cfg = apr_palloc(p, sizeof(*new_cfg));
-#ifdef DEBUG
-    ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, 0, NULL, "Opening config handler %s", descr);
-#endif
-    new_cfg->param = param;
-    new_cfg->name = descr;
-    new_cfg->getch = getch;
-    new_cfg->getstr = getstr;
-    new_cfg->close = close_func;
-    new_cfg->line_number = 0;
-    return new_cfg;
-}
-   
-/* Read one character from a configfile_t */
-AP_DECLARE(int) ap_cfg_getc(ap_configfile_t *cfp)
-{
-    register int ch = cfp->getch(cfp->param);
-    if (ch == LF) 
-        ++cfp->line_number;
-    return ch;
-}
-  
-/* Read one line from open ap_configfile_t, strip LF, increase line number */
-/* If custom handler does not define a getstr() function, read char by char */
-AP_DECLARE(int) ap_cfg_getline(char *buf, size_t bufsize, ap_configfile_t *cfp)
-{
-    /* If a "get string" function is defined, use it */
-    if (cfp->getstr != NULL) {
-	char *src, *dst;
-	char *cp;
-	char *cbuf = buf;
-	size_t cbufsize = bufsize;
-
-	while (1) {
-	    ++cfp->line_number;
-	    if (cfp->getstr(cbuf, cbufsize, cfp->param) == NULL)
-		return 1;
-
-	    /*
-	     *  check for line continuation,
-	     *  i.e. match [^\\]\\[\r]\n only
-	     */
-	    cp = cbuf;
-	    while (cp < cbuf+cbufsize && *cp != '\0')
-		cp++;
-	    if (cp > cbuf && cp[-1] == LF) {
-		cp--;
-		if (cp > cbuf && cp[-1] == CR)
-		    cp--;
-		if (cp > cbuf && cp[-1] == '\\') {
-		    cp--;
-		    if (!(cp > cbuf && cp[-1] == '\\')) {
-			/*
-			 * line continuation requested -
-			 * then remove backslash and continue
-			 */
-			cbufsize -= (cp-cbuf);
-			cbuf = cp;
-			continue;
-		    }
-		    else {
-			/* 
-			 * no real continuation because escaped -
-			 * then just remove escape character
-			 */
-			for ( ; cp < cbuf+cbufsize && *cp != '\0'; cp++)
-			    cp[0] = cp[1];
-		    }   
-		}
-	    }
-	    break;
-	}
-
-	/*
-	 * Leading and trailing white space is eliminated completely
-	 */
-	src = buf;
-	while (apr_isspace(*src))
-	    ++src;
-	/* blast trailing whitespace */
-	dst = &src[strlen(src)];
-	while (--dst >= src && apr_isspace(*dst))
-	    *dst = '\0';
-        /* Zap leading whitespace by shifting */
-        if (src != buf)
-	    for (dst = buf; (*dst++ = *src++) != '\0'; )
-	        ;
-
-#ifdef DEBUG_CFG_LINES
-	ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, NULL, "Read config: %s", buf);
-#endif
-	return 0;
-    } else {
-	/* No "get string" function defined; read character by character */
-	register int c;
-	register size_t i = 0;
-
-	buf[0] = '\0';
-	/* skip leading whitespace */
-	do {
-	    c = cfp->getch(cfp->param);
-	} while (c == '\t' || c == ' ');
-
-	if (c == EOF)
-	    return 1;
-	
-	if(bufsize < 2) {
-	    /* too small, assume caller is crazy */
-	    return 1;
-	}
-
-	while (1) {
-	    if ((c == '\t') || (c == ' ')) {
-		buf[i++] = ' ';
-		while ((c == '\t') || (c == ' '))
-		    c = cfp->getch(cfp->param);
-	    }
-	    if (c == CR) {
-		/* silently ignore CR (_assume_ that a LF follows) */
-		c = cfp->getch(cfp->param);
-	    }
-	    if (c == LF) {
-		/* increase line number and return on LF */
-		++cfp->line_number;
-	    }
-	    if (c == EOF || c == 0x4 || c == LF || i >= (bufsize - 2)) {
-		/* 
-		 *  check for line continuation
-		 */
-		if (i > 0 && buf[i-1] == '\\') {
-		    i--;
-		    if (!(i > 0 && buf[i-1] == '\\')) {
-			/* line is continued */
-			c = cfp->getch(cfp->param);
-			continue;
-		    }
-		    /* else nothing needs be done because
-		     * then the backslash is escaped and
-		     * we just strip to a single one
-		     */
-		}
-		/* blast trailing whitespace */
-		while (i > 0 && apr_isspace(buf[i - 1]))
-		    --i;
-		buf[i] = '\0';
-#ifdef DEBUG_CFG_LINES
-		ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, NULL, "Read config: %s", buf);
-#endif
-		return 0;
-	    }
-	    buf[i] = c;
-	    ++i;
-	    c = cfp->getch(cfp->param);
-	}
-    }
-}
-
-/* Size an HTTP header field list item, as separated by a comma.
- * The return value is a pointer to the beginning of the non-empty list item
- * within the original string (or NULL if there is none) and the address
- * of field is shifted to the next non-comma, non-whitespace character.
- * len is the length of the item excluding any beginning whitespace.
- */
-AP_DECLARE(const char *) ap_size_list_item(const char **field, int *len)
-{
-    const unsigned char *ptr = (const unsigned char *)*field;
-    const unsigned char *token;
-    int in_qpair, in_qstr, in_com;
-
-    /* Find first non-comma, non-whitespace byte */
-
-    while (*ptr == ',' || apr_isspace(*ptr))
-        ++ptr;
-
-    token = ptr;
-
-    /* Find the end of this item, skipping over dead bits */
-
-    for (in_qpair = in_qstr = in_com = 0;
-         *ptr && (in_qpair || in_qstr || in_com || *ptr != ',');
-         ++ptr) {
-
-        if (in_qpair) {
-            in_qpair = 0;
-        }
-        else {
-            switch (*ptr) {
-                case '\\': in_qpair = 1;      /* quoted-pair         */
-                           break;
-                case '"' : if (!in_com)       /* quoted string delim */
-                               in_qstr = !in_qstr;
-                           break;
-                case '(' : if (!in_qstr)      /* comment (may nest)  */
-                               ++in_com;
-                           break;
-                case ')' : if (in_com)        /* end comment         */
-                               --in_com;
-                           break;
-                default  : break;
-            }
-        }
-    }
-
-    if ((*len = (ptr - token)) == 0) {
-        *field = (const char *)ptr;
-        return NULL;
-    }
-
-    /* Advance field pointer to the next non-comma, non-white byte */
-
-    while (*ptr == ',' || apr_isspace(*ptr))
-	++ptr;
-
-    *field = (const char *)ptr;
-    return (const char *)token;
-}
-
-/* Retrieve an HTTP header field list item, as separated by a comma,
- * while stripping insignificant whitespace and lowercasing anything not in
- * a quoted string or comment.  The return value is a new string containing
- * the converted list item (or NULL if none) and the address pointed to by
- * field is shifted to the next non-comma, non-whitespace.
- */
-AP_DECLARE(char *) ap_get_list_item(apr_pool_t *p, const char **field)
-{
-    const char *tok_start;
-    const unsigned char *ptr;
-    unsigned char *pos;
-    char *token;
-    int addspace = 0, in_qpair = 0, in_qstr = 0, in_com = 0, tok_len = 0;
-
-    /* Find the beginning and maximum length of the list item so that
-     * we can allocate a buffer for the new string and reset the field.
-     */
-    if ((tok_start = ap_size_list_item(field, &tok_len)) == NULL) {
-        return NULL;
-    }
-    token = apr_palloc(p, tok_len + 1);
-
-    /* Scan the token again, but this time copy only the good bytes.
-     * We skip extra whitespace and any whitespace around a '=', '/',
-     * or ';' and lowercase normal characters not within a comment,
-     * quoted-string or quoted-pair.
-     */
-    for (ptr = (const unsigned char *)tok_start, pos = (unsigned char *)token;
-         *ptr && (in_qpair || in_qstr || in_com || *ptr != ',');
-         ++ptr) {
-
-        if (in_qpair) {
-            in_qpair = 0;
-            *pos++ = *ptr;
-        }
-        else {
-            switch (*ptr) {
-                case '\\': in_qpair = 1;
-                           if (addspace == 1)
-                               *pos++ = ' ';
-                           *pos++ = *ptr;
-                           addspace = 0;
-                           break;
-                case '"' : if (!in_com)
-                               in_qstr = !in_qstr;
-                           if (addspace == 1)
-                               *pos++ = ' ';
-                           *pos++ = *ptr;
-                           addspace = 0;
-                           break;
-                case '(' : if (!in_qstr)
-                               ++in_com;
-                           if (addspace == 1)
-                               *pos++ = ' ';
-                           *pos++ = *ptr;
-                           addspace = 0;
-                           break;
-                case ')' : if (in_com)
-                               --in_com;
-                           *pos++ = *ptr;
-                           addspace = 0;
-                           break;
-                case ' ' :
-                case '\t': if (addspace)
-                               break;
-                           if (in_com || in_qstr)
-                               *pos++ = *ptr;
-                           else
-                               addspace = 1;
-                           break;
-                case '=' :
-                case '/' :
-                case ';' : if (!(in_com || in_qstr))
-                               addspace = -1;
-                           *pos++ = *ptr;
-                           break;
-                default  : if (addspace == 1)
-                               *pos++ = ' ';
-                           *pos++ = (in_com || in_qstr) ? *ptr
-                                                        : apr_tolower(*ptr);
-                           addspace = 0;
-                           break;
-            }
-        }
-    }
-    *pos = '\0';
-
-    return token;
-}
-
-/* Find an item in canonical form (lowercase, no extra spaces) within
- * an HTTP field value list.  Returns 1 if found, 0 if not found.
- * This would be much more efficient if we stored header fields as
- * an array of list items as they are received instead of a plain string.
- */
-AP_DECLARE(int) ap_find_list_item(apr_pool_t *p, const char *line, const char *tok)
-{
-    const unsigned char *pos;
-    const unsigned char *ptr = (const unsigned char *)line;
-    int good = 0, addspace = 0, in_qpair = 0, in_qstr = 0, in_com = 0;
-
-    if (!line || !tok)
-        return 0;
-
-    do {  /* loop for each item in line's list */
-
-        /* Find first non-comma, non-whitespace byte */
-
-        while (*ptr == ',' || apr_isspace(*ptr))
-            ++ptr;
-
-        if (*ptr)
-            good = 1;  /* until proven otherwise for this item */
-        else
-            break;     /* no items left and nothing good found */
-
-        /* We skip extra whitespace and any whitespace around a '=', '/',
-         * or ';' and lowercase normal characters not within a comment,
-         * quoted-string or quoted-pair.
-         */
-        for (pos = (const unsigned char *)tok;
-             *ptr && (in_qpair || in_qstr || in_com || *ptr != ',');
-             ++ptr) {
-
-            if (in_qpair) {
-                in_qpair = 0;
-                if (good)
-                    good = (*pos++ == *ptr);
-            }
-            else {
-                switch (*ptr) {
-                    case '\\': in_qpair = 1;
-                               if (addspace == 1)
-                                   good = good && (*pos++ == ' ');
-                               good = good && (*pos++ == *ptr);
-                               addspace = 0;
-                               break;
-                    case '"' : if (!in_com)
-                                   in_qstr = !in_qstr;
-                               if (addspace == 1)
-                                   good = good && (*pos++ == ' ');
-                               good = good && (*pos++ == *ptr);
-                               addspace = 0;
-                               break;
-                    case '(' : if (!in_qstr)
-                                   ++in_com;
-                               if (addspace == 1)
-                                   good = good && (*pos++ == ' ');
-                               good = good && (*pos++ == *ptr);
-                               addspace = 0;
-                               break;
-                    case ')' : if (in_com)
-                                   --in_com;
-                               good = good && (*pos++ == *ptr);
-                               addspace = 0;
-                               break;
-                    case ' ' :
-                    case '\t': if (addspace || !good)
-                                   break;
-                               if (in_com || in_qstr)
-                                   good = (*pos++ == *ptr);
-                               else
-                                   addspace = 1;
-                               break;
-                    case '=' :
-                    case '/' :
-                    case ';' : if (!(in_com || in_qstr))
-                                   addspace = -1;
-                               good = good && (*pos++ == *ptr);
-                               break;
-                    default  : if (!good)
-                                   break;
-                               if (addspace == 1)
-                                   good = (*pos++ == ' ');
-                               if (in_com || in_qstr)
-                                   good = good && (*pos++ == *ptr);
-                               else
-                                   good = good && (*pos++ == apr_tolower(*ptr));
-                               addspace = 0;
-                               break;
-                }
-            }
-        }
-        if (good && *pos)
-            good = 0;          /* not good if only a prefix was matched */
-
-    } while (*ptr && !good);
-
-    return good;
-}
-
-
-/* Retrieve a token, spacing over it and returning a pointer to
- * the first non-white byte afterwards.  Note that these tokens
- * are delimited by semis and commas; and can also be delimited
- * by whitespace at the caller's option.
- */
-
-AP_DECLARE(char *) ap_get_token(apr_pool_t *p, const char **accept_line, int accept_white)
-{
-    const char *ptr = *accept_line;
-    const char *tok_start;
-    char *token;
-    int tok_len;
-
-    /* Find first non-white byte */
-
-    while (*ptr && apr_isspace(*ptr))
-	++ptr;
-
-    tok_start = ptr;
-
-    /* find token end, skipping over quoted strings.
-     * (comments are already gone).
-     */
-
-    while (*ptr && (accept_white || !apr_isspace(*ptr))
-	   && *ptr != ';' && *ptr != ',') {
-	if (*ptr++ == '"')
-	    while (*ptr)
-		if (*ptr++ == '"')
-		    break;
-    }
-
-    tok_len = ptr - tok_start;
-    token = apr_pstrndup(p, tok_start, tok_len);
-
-    /* Advance accept_line pointer to the next non-white byte */
-
-    while (*ptr && apr_isspace(*ptr))
-	++ptr;
-
-    *accept_line = ptr;
-    return token;
-}
-
-
-/* find http tokens, see the definition of token from RFC2068 */
-AP_DECLARE(int) ap_find_token(apr_pool_t *p, const char *line, const char *tok)
-{
-    const unsigned char *start_token;
-    const unsigned char *s;
-
-    if (!line)
-	return 0;
-
-    s = (const unsigned char *)line;
-    for (;;) {
-	/* find start of token, skip all stop characters, note NUL
-	 * isn't a token stop, so we don't need to test for it
-	 */
-	while (TEST_CHAR(*s, T_HTTP_TOKEN_STOP)) {
-	    ++s;
-	}
-	if (!*s) {
-	    return 0;
-	}
-	start_token = s;
-	/* find end of the token */
-	while (*s && !TEST_CHAR(*s, T_HTTP_TOKEN_STOP)) {
-	    ++s;
-	}
-	if (!strncasecmp((const char *)start_token, (const char *)tok, s - start_token)) {
-	    return 1;
-	}
-	if (!*s) {
-	    return 0;
-	}
-    }
-}
-
-
-AP_DECLARE(int) ap_find_last_token(apr_pool_t *p, const char *line, const char *tok)
-{
-    int llen, tlen, lidx;
-
-    if (!line)
-	return 0;
-
-    llen = strlen(line);
-    tlen = strlen(tok);
-    lidx = llen - tlen;
-
-    if ((lidx < 0) ||
-	((lidx > 0) && !(apr_isspace(line[lidx - 1]) || line[lidx - 1] == ',')))
-	return 0;
-
-    return (strncasecmp(&line[lidx], tok, tlen) == 0);
-}
-
-AP_DECLARE(char *) ap_escape_shell_cmd(apr_pool_t *p, const char *str)
-{
-    char *cmd;
-    unsigned char *d;
-    const unsigned char *s;
-
-    cmd = apr_palloc(p, 2 * strlen(str) + 1);	/* Be safe */
-    d = (unsigned char *)cmd;
-    s = (const unsigned char *)str;
-    for (; *s; ++s) {
-
-#if defined(OS2) || defined(WIN32)
-	/* Don't allow '&' in parameters under OS/2. */
-	/* This can be used to send commands to the shell. */
-	if (*s == '&') {
-	    *d++ = ' ';
-	    continue;
-	}
-#endif
-
-	if (TEST_CHAR(*s, T_ESCAPE_SHELL_CMD)) {
-	    *d++ = '\\';
-	}
-	*d++ = *s;
-    }
-    *d = '\0';
-
-    return cmd;
-}
-
-static char x2c(const char *what)
-{
-    register char digit;
-
-#if !APR_CHARSET_EBCDIC
-    digit = ((what[0] >= 'A') ? ((what[0] & 0xdf) - 'A') + 10 : (what[0] - '0'));
-    digit *= 16;
-    digit += (what[1] >= 'A' ? ((what[1] & 0xdf) - 'A') + 10 : (what[1] - '0'));
-#else /*APR_CHARSET_EBCDIC*/
-    char xstr[5];
-    xstr[0]='0';
-    xstr[1]='x';
-    xstr[2]=what[0];
-    xstr[3]=what[1];
-    xstr[4]='\0';
-    digit = apr_xlate_conv_byte(ap_hdrs_from_ascii, 0xFF & strtol(xstr, NULL, 16));
-#endif /*APR_CHARSET_EBCDIC*/
-    return (digit);
-}
-
-/*
- * Unescapes a URL.
- * Returns 0 on success, non-zero on error
- * Failure is due to
- *   bad % escape       returns HTTP_BAD_REQUEST
- *
- *   decoding %00 -> \0
- *   decoding %2f -> /   (a special character)
- *                      returns HTTP_NOT_FOUND
- */
-AP_DECLARE(int) ap_unescape_url(char *url)
-{
-    register int badesc, badpath;
-    char *x, *y;
-
-    badesc = 0;
-    badpath = 0;
-    /* Initial scan for first '%'. Don't bother writing values before
-     * seeing a '%' */
-    y = strchr(url, '%');
-    if (y == NULL) {
-        return OK;
-    }
-    for (x = y; *y; ++x, ++y) {
-	if (*y != '%')
-	    *x = *y;
-	else {
-	    if (!apr_isxdigit(*(y + 1)) || !apr_isxdigit(*(y + 2))) {
-		badesc = 1;
-		*x = '%';
-	    }
-	    else {
-		*x = x2c(y + 1);
-		y += 2;
-		if (*x == '/' || *x == '\0')
-		    badpath = 1;
-	    }
-	}
-    }
-    *x = '\0';
-    if (badesc)
-	return HTTP_BAD_REQUEST;
-    else if (badpath)
-	return HTTP_NOT_FOUND;
-    else
-	return OK;
-}
-
-AP_DECLARE(char *) ap_construct_server(apr_pool_t *p, const char *hostname,
-				    apr_port_t port, const request_rec *r)
-{
-    if (ap_is_default_port(port, r))
-	return apr_pstrdup(p, hostname);
-    else {
-	return apr_psprintf(p, "%s:%u", hostname, port);
-    }
-}
-
-/* c2x takes an unsigned, and expects the caller has guaranteed that
- * 0 <= what < 256... which usually means that you have to cast to
- * unsigned char first, because (unsigned)(char)(x) first goes through
- * signed extension to an int before the unsigned cast.
- *
- * The reason for this assumption is to assist gcc code generation --
- * the unsigned char -> unsigned extension is already done earlier in
- * both uses of this code, so there's no need to waste time doing it
- * again.
- */
-static const char c2x_table[] = "0123456789abcdef";
-
-static APR_INLINE unsigned char *c2x(unsigned what, unsigned char *where)
-{
-#if APR_CHARSET_EBCDIC
-    what = apr_xlate_conv_byte(ap_hdrs_to_ascii, (unsigned char)what);
-#endif /*APR_CHARSET_EBCDIC*/
-    *where++ = '%';
-    *where++ = c2x_table[what >> 4];
-    *where++ = c2x_table[what & 0xf];
-    return where;
-}
-
-/*
- * escape_path_segment() escapes a path segment, as defined in RFC 1808. This
- * routine is (should be) OS independent.
- *
- * os_escape_path() converts an OS path to a URL, in an OS dependent way. In all
- * cases if a ':' occurs before the first '/' in the URL, the URL should be
- * prefixed with "./" (or the ':' escaped). In the case of Unix, this means
- * leaving '/' alone, but otherwise doing what escape_path_segment() does. For
- * efficiency reasons, we don't use escape_path_segment(), which is provided for
- * reference. Again, RFC 1808 is where this stuff is defined.
- *
- * If partial is set, os_escape_path() assumes that the path will be appended to
- * something with a '/' in it (and thus does not prefix "./").
- */
-
-AP_DECLARE(char *) ap_escape_path_segment(apr_pool_t *p, const char *segment)
-{
-    char *copy = apr_palloc(p, 3 * strlen(segment) + 1);
-    const unsigned char *s = (const unsigned char *)segment;
-    unsigned char *d = (unsigned char *)copy;
-    unsigned c;
-
-    while ((c = *s)) {
-	if (TEST_CHAR(c, T_ESCAPE_PATH_SEGMENT)) {
-	    d = c2x(c, d);
-	}
-	else {
-	    *d++ = c;
-	}
-	++s;
-    }
-    *d = '\0';
-    return copy;
-}
-
-AP_DECLARE(char *) ap_os_escape_path(apr_pool_t *p, const char *path, int partial)
-{
-    char *copy = apr_palloc(p, 3 * strlen(path) + 3);
-    const unsigned char *s = (const unsigned char *)path;
-    unsigned char *d = (unsigned char *)copy;
-    unsigned c;
-
-    if (!partial) {
-	const char *colon = ap_strchr_c(path, ':');
-	const char *slash = ap_strchr_c(path, '/');
-
-	if (colon && (!slash || colon < slash)) {
-	    *d++ = '.';
-	    *d++ = '/';
-	}
-    }
-    while ((c = *s)) {
-	if (TEST_CHAR(c, T_OS_ESCAPE_PATH)) {
-	    d = c2x(c, d);
-	}
-	else {
-	    *d++ = c;
-	}
-	++s;
-    }
-    *d = '\0';
-    return copy;
-}
-
-/* ap_escape_uri is now a macro for os_escape_path */
-
-AP_DECLARE(char *) ap_escape_html(apr_pool_t *p, const char *s)
-{
-    int i, j;
-    char *x;
-
-    /* first, count the number of extra characters */
-    for (i = 0, j = 0; s[i] != '\0'; i++)
-	if (s[i] == '<' || s[i] == '>')
-	    j += 3;
-	else if (s[i] == '&')
-	    j += 4;
-
-    if (j == 0)
-	return apr_pstrmemdup(p, s, i);
-
-    x = apr_palloc(p, i + j + 1);
-    for (i = 0, j = 0; s[i] != '\0'; i++, j++)
-	if (s[i] == '<') {
-	    memcpy(&x[j], "&lt;", 4);
-	    j += 3;
-	}
-	else if (s[i] == '>') {
-	    memcpy(&x[j], "&gt;", 4);
-	    j += 3;
-	}
-	else if (s[i] == '&') {
-	    memcpy(&x[j], "&amp;", 5);
-	    j += 4;
-	}
-	else
-	    x[j] = s[i];
-
-    x[j] = '\0';
-    return x;
-}
-
-AP_DECLARE(int) ap_is_directory(apr_pool_t *p, const char *path)
-{
-    apr_finfo_t finfo;
-
-    if (apr_stat(&finfo, path, APR_FINFO_TYPE, p) != APR_SUCCESS)
-	return 0;		/* in error condition, just return no */
-
-    return (finfo.filetype == APR_DIR);
-}
-
-AP_DECLARE(int) ap_is_rdirectory(apr_pool_t *p, const char *path)
-{
-    apr_finfo_t finfo;
-
-    if (apr_lstat(&finfo, path, APR_FINFO_TYPE, p) != APR_SUCCESS)
-	return 0;		/* in error condition, just return no */
-
-    return (finfo.filetype == APR_DIR);
-}
-
-AP_DECLARE(char *) ap_make_full_path(apr_pool_t *a, const char *src1,
-				  const char *src2)
-{
-    apr_size_t len1, len2;
-    char *path;
-
-    len1 = strlen(src1);
-    len2 = strlen(src2);
-     /* allocate +3 for '/' delimiter, trailing NULL and overallocate
-      * one extra byte to allow the caller to add a trailing '/'
-      */
-    path = (char *)apr_palloc(a, len1 + len2 + 3);
-    if (len1 == 0) {
-        *path = '/';
-        memcpy(path + 1, src2, len2 + 1);
-    }
-    else {
-        char *next;
-        memcpy(path, src1, len1);
-        next = path + len1;
-        if (next[-1] != '/') {
-            *next++ = '/';
-        }
-        memcpy(next, src2, len2 + 1);
-    }
-    return path;
-}
-
-/*
- * Check for an absoluteURI syntax (see section 3.2 in RFC2068).
- */
-AP_DECLARE(int) ap_is_url(const char *u)
-{
-    register int x;
-
-    for (x = 0; u[x] != ':'; x++) {
-	if ((!u[x]) ||
-	    ((!apr_isalpha(u[x])) && (!apr_isdigit(u[x])) &&
-	     (u[x] != '+') && (u[x] != '-') && (u[x] != '.'))) {
-	    return 0;
-	}
-    }
-
-    return (x ? 1 : 0);		/* If the first character is ':', it's broken, too */
-}
-
-AP_DECLARE(int) ap_ind(const char *s, char c)
-{
-    const char *p = ap_strchr_c(s, c);
-
-    if (p == NULL)
-        return -1;
-    return p - s;
-}
-
-AP_DECLARE(int) ap_rind(const char *s, char c)
-{
-    const char *p = ap_strrchr_c(s, c);
-
-    if (p == NULL)
-        return -1;
-    return p - s;
-}
-
-AP_DECLARE(void) ap_str_tolower(char *str)
-{
-    while (*str) {
-	*str = apr_tolower(*str);
-	++str;
-    }
-}
-
-static char *find_fqdn(apr_pool_t *a, struct hostent *p)
-{
-    int x;
-
-    if (!strchr(p->h_name, '.')) {
-	for (x = 0; p->h_aliases[x]; ++x) {
-	    if (strchr(p->h_aliases[x], '.') &&
-		(!strncasecmp(p->h_aliases[x], p->h_name, strlen(p->h_name))))
-		return apr_pstrdup(a, p->h_aliases[x]);
-	}
-	return NULL;
-    }
-    return apr_pstrdup(a, (void *) p->h_name);
-}
-
-char *ap_get_local_host(apr_pool_t *a)
-{
-#ifndef MAXHOSTNAMELEN
-#define MAXHOSTNAMELEN 256
-#endif
-    char str[MAXHOSTNAMELEN + 1];
-    char *server_hostname = NULL;
-    struct hostent *p;
-
-#ifdef BEOS_R5
-    if (gethostname(str, sizeof(str) - 1) == 0)
-#else
-    if (gethostname(str, sizeof(str) - 1) != 0)
-#endif
-    {
-        ap_log_perror(APLOG_MARK, APLOG_STARTUP | APLOG_WARNING, 0, a,
-                     "%s: gethostname() failed to determine ServerName",
-                     ap_server_argv0);
-    }
-    else 
-    {
-        str[sizeof(str) - 1] = '\0';
-        if ((!(p = gethostbyname(str))) 
-            || (!(server_hostname = find_fqdn(a, p)))) {
-            /* Recovery - return the default servername by IP: */
-            if (p && p->h_addr_list[0]) {
-                apr_snprintf(str, sizeof(str), "%pA", p->h_addr_list[0]);
-	        server_hostname = apr_pstrdup(a, str);
-                /* We will drop through to report the IP-named server */
-            }
-        }
-        else {
-            /* Since we found a fdqn, return it with no logged message. */
-            return server_hostname;
-        }
-    }
-
-    if (!server_hostname) 
-        server_hostname = apr_pstrdup(a, "127.0.0.1");
-
-    ap_log_perror(APLOG_MARK, APLOG_ALERT|APLOG_NOERRNO|APLOG_STARTUP, 0, a,
-                 "%s: Could not determine the server's fully qualified "
-                 "domain name, using %s for ServerName",
-                 ap_server_argv0, server_hostname);
-             
-    return server_hostname;
-}
-
-/* simple 'pool' alloc()ing glue to apr_base64.c
- */
-AP_DECLARE(char *) ap_pbase64decode(apr_pool_t *p, const char *bufcoded)
-{
-    char *decoded;
-    int l;
-
-    decoded = (char *) apr_palloc(p, 1 + apr_base64_decode_len(bufcoded));
-    l = apr_base64_decode(decoded, bufcoded);
-    decoded[l] = '\0'; /* make binary sequence into string */
-
-    return decoded;
-}
-
-AP_DECLARE(char *) ap_pbase64encode(apr_pool_t *p, char *string) 
-{ 
-    char *encoded;
-    int l = strlen(string);
-
-    encoded = (char *) apr_palloc(p, 1 + apr_base64_encode_len(l));
-    l = apr_base64_encode(encoded, string, l);
-    encoded[l] = '\0'; /* make binary sequence into string */
-
-    return encoded;
-}
-
-/* we want to downcase the type/subtype for comparison purposes
- * but nothing else because ;parameter=foo values are case sensitive.
- * XXX: in truth we want to downcase parameter names... but really,
- * apache has never handled parameters and such correctly.  You
- * also need to compress spaces and such to be able to compare
- * properly. -djg
- */
-AP_DECLARE(void) ap_content_type_tolower(char *str)
-{
-    char *semi;
-
-    semi = strchr(str, ';');
-    if (semi) {
-	*semi = '\0';
-    }
-    while (*str) {
-	*str = apr_tolower(*str);
-	++str;
-    }
-    if (semi) {
-	*semi = ';';
-    }
-}
-
-/*
- * Given a string, replace any bare " with \" .
- */
-AP_DECLARE(char *) ap_escape_quotes (apr_pool_t *p, const char *instring)
-{
-    int newlen = 0;
-    const char *inchr = instring;
-    char *outchr, *outstring;
-
-    /*
-     * Look through the input string, jogging the length of the output
-     * string up by an extra byte each time we find an unescaped ".
-     */
-    while (*inchr != '\0') {
-	newlen++;
-        if (*inchr == '"') {
-	    newlen++;
-	}
-	/*
-	 * If we find a slosh, and it's not the last byte in the string,
-	 * it's escaping something - advance past both bytes.
-	 */
-	if ((*inchr == '\\') && (inchr[1] != '\0')) {
-	    inchr++;
-	    newlen++;
-	}
-	inchr++;
-    }
-    outstring = apr_palloc(p, newlen + 1);
-    inchr = instring;
-    outchr = outstring;
-    /*
-     * Now copy the input string to the output string, inserting a slosh
-     * in front of every " that doesn't already have one.
-     */
-    while (*inchr != '\0') {
-	if ((*inchr == '\\') && (inchr[1] != '\0')) {
-	    *outchr++ = *inchr++;
-	    *outchr++ = *inchr++;
-	}
-	if (*inchr == '"') {
-	    *outchr++ = '\\';
-	}
-	if (*inchr != '\0') {
-	    *outchr++ = *inchr++;
-	}
-    }
-    *outchr = '\0';
-    return outstring;
-}
diff --git a/server/util_cfgtree.c b/server/util_cfgtree.c
deleted file mode 100644
index df9158a..0000000
--- a/server/util_cfgtree.c
+++ /dev/null
@@ -1,89 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-#define CORE_PRIVATE
-#include "util_cfgtree.h"
-#include <stdlib.h>
-
-ap_directive_t *ap_add_node(ap_directive_t **parent, ap_directive_t *current, 
-                            ap_directive_t *toadd, int child)
-{
-    if (current == NULL) {
-        /* we just started a new parent */
-        if (*parent != NULL) {
-            (*parent)->first_child = toadd;
-            toadd->parent = *parent;
-        }
-        if (child) {
-            /* First item in config file or container is a container */
-            *parent = toadd;
-            return NULL;
-        }
-        return toadd;
-    }
-    current->next = toadd;
-    toadd->parent = *parent;
-    if (child) {
-        /* switch parents, navigate into child */
-        *parent = toadd;
-        return NULL;
-    }
-    return toadd;
-}
-
-
diff --git a/server/util_charset.c b/server/util_charset.c
deleted file mode 100644
index fb62c22..0000000
--- a/server/util_charset.c
+++ /dev/null
@@ -1,99 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-#include "ap_config.h"
-
-#ifdef APACHE_XLATE
-
-#include "httpd.h"
-#include "http_log.h"
-#include "http_core.h"
-#include "util_charset.h"
-
-/* ap_hdrs_to_ascii, ap_hdrs_from_ascii
- *
- * These are the translation handles used to translate between the network
- * format of protocol headers and the local machine format.
- *
- * For an EBCDIC machine, these are valid handles which are set up at
- * initialization to translate between ISO-8859-1 and the code page of
- * the source code.
- *
- * For an ASCII machine, these remain NULL so that when they are stored
- * in the BUFF via ap_bsetop(BO_RXLATE) it ensures that no translation is 
- * performed.
- */
- 
-apr_xlate_t *ap_hdrs_to_ascii, *ap_hdrs_from_ascii;
-
-/* ap_locale_to_ascii, ap_locale_from_ascii
- *
- * These handles are used for the translation of content, unless a
- * configuration module overrides them.
- *
- * For an EBCDIC machine, these are valid handles which are set up at
- * initialization to translate between ISO-8859-1 and the code page of
- * the httpd process's locale.
- *
- * For an ASCII machine, these remain NULL so that no translation is
- * performed (unless a configuration module does something, of course).
- */
-
-apr_xlate_t *ap_locale_to_ascii, *ap_locale_from_ascii;
-
-#endif /*APACHE_XLATE*/
diff --git a/server/util_debug.c b/server/util_debug.c
deleted file mode 100644
index 14f1e25..0000000
--- a/server/util_debug.c
+++ /dev/null
@@ -1,120 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-#include "httpd.h"
-#include "http_config.h"
-
-#ifdef AP_DEBUG
-
-/* get rid of the macros we defined in httpd.h */
-#undef strchr
-#undef strrchr
-#undef strstr
-
-char *ap_strchr(char *s, int c)
-{
-    return strchr(s,c);
-}
-const char *ap_strchr_c(const char *s, int c)
-{
-    return strchr(s,c);
-}
-char *ap_strrchr(char *s, int c)
-{
-    return strrchr(s,c);
-}
-const char *ap_strrchr_c(const char *s, int c)
-{
-    return strrchr(s,c);
-}
-char *ap_strstr(char *s, const char *c)
-{
-    return strstr(s,c);
-}
-const char *ap_strstr_c(const char *s, const char *c)
-{
-    return strstr(s,c);
-}
-
-
-AP_DECLARE(void *) ap_get_module_config(const ap_conf_vector_t *cv,
-                                        const module *m)
-{
-    return ((void **)cv)[m->module_index];
-}
-
-/**
- * Generic accessors for other modules to set at their own module-specific
- * data
- * @param conf_vector The vector in which the modules configuration is stored.
- *        usually r->per_dir_config or s->module_config
- * @param m The module to set the data for.
- * @param val The module-specific data to set
- * @deffunc void ap_set_module_config(ap_conf_vector_t *cv, const module *m, void *val)
- */
-AP_DECLARE(void) ap_set_module_config(ap_conf_vector_t *cv, const module *m,
-                                      void *val)
-{
-    ((void **)cv)[m->module_index] = val;
-}
-
-
-#endif /* AP_DEBUG */
diff --git a/server/util_ebcdic.c b/server/util_ebcdic.c
deleted file mode 100644
index d5c1db6..0000000
--- a/server/util_ebcdic.c
+++ /dev/null
@@ -1,168 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-#include "ap_config.h"
-
-#if APR_CHARSET_EBCDIC
-
-#include "apr_strings.h"
-#include "httpd.h"
-#include "http_log.h"
-#include "http_core.h"
-#include "util_ebcdic.h"
-
-apr_status_t ap_init_ebcdic(apr_pool_t *pool)
-{
-    apr_status_t rv;
-    char buf[80];
-
-    rv = apr_xlate_open(&ap_hdrs_to_ascii, "ISO8859-1", APR_DEFAULT_CHARSET, pool);
-    if (rv) {
-        ap_log_error(APLOG_MARK, APLOG_ERR, rv, NULL,
-                     "apr_xlate_open() failed");
-        return rv;
-    }
-
-    rv = apr_xlate_open(&ap_hdrs_from_ascii, APR_DEFAULT_CHARSET, "ISO8859-1", pool);
-    if (rv) {
-        ap_log_error(APLOG_MARK, APLOG_ERR, rv, NULL,
-                     "apr_xlate_open() failed");
-        return rv;
-    }
-
-    rv = apr_xlate_open(&ap_locale_to_ascii, "ISO8859-1", APR_LOCALE_CHARSET, pool);
-    if (rv) {
-        ap_log_error(APLOG_MARK, APLOG_ERR, rv, NULL,
-                     "apr_xlate_open() failed");
-        return rv;
-    }
-
-    rv = apr_xlate_open(&ap_locale_from_ascii, APR_LOCALE_CHARSET, "ISO8859-1", pool);
-    if (rv) {
-        ap_log_error(APLOG_MARK, APLOG_ERR, rv, NULL,
-                     "apr_xlate_open() failed");
-        return rv;
-    }
-
-    rv = apr_MD5InitEBCDIC(ap_hdrs_to_ascii);
-    if (rv) {
-        ap_log_error(APLOG_MARK, APLOG_ERR, rv, NULL,
-                     "apr_MD5InitEBCDIC() failed");
-        return rv;
-    }
-    
-    rv = apr_base64init_ebcdic(ap_hdrs_to_ascii, ap_hdrs_from_ascii);
-    if (rv) {
-        ap_log_error(APLOG_MARK, APLOG_ERR, rv, NULL,
-                     "apr_base64init_ebcdic() failed");
-        return rv;
-    }
-    
-    rv = apr_SHA1InitEBCDIC(ap_hdrs_to_ascii);
-    if (rv) {
-        ap_log_error(APLOG_MARK, APLOG_ERR, rv, NULL,
-                     "apr_SHA1InitEBCDIC() failed");
-        return rv;
-    }
-    
-    return APR_SUCCESS;
-}
-
-void ap_xlate_proto_to_ascii(char *buffer, apr_size_t len)
-{
-    apr_size_t inbytes_left, outbytes_left;
-
-    inbytes_left = outbytes_left = len;
-    apr_xlate_conv_buffer(ap_hdrs_to_ascii, buffer, &inbytes_left,
-                          buffer, &outbytes_left);
-}
-
-void ap_xlate_proto_from_ascii(char *buffer, apr_size_t len)
-{
-    apr_size_t inbytes_left, outbytes_left;
-
-    inbytes_left = outbytes_left = len;
-    apr_xlate_conv_buffer(ap_hdrs_from_ascii, buffer, &inbytes_left,
-                          buffer, &outbytes_left);
-}
-
-int ap_rvputs_proto_in_ascii(request_rec *r, ...)
-{
-    va_list va;
-    const char *s;
-    char *ascii_s;
-    apr_size_t len;
-    apr_size_t written = 0;
-
-    va_start(va, r);
-    while (1) {
-        s = va_arg(va, const char *);
-        if (s == NULL)
-            break;
-        len = strlen(s);
-        ascii_s = apr_pstrndup(r->pool, s, len);
-        ap_xlate_proto_to_ascii(ascii_s, len);
-        if (ap_rputs(ascii_s, r) < 0)
-            return -1;
-        written += len;
-    }
-    va_end(va);
- 
-    return written;
-}    
-#endif /* APR_CHARSET_EBCDIC */
diff --git a/server/util_filter.c b/server/util_filter.c
deleted file mode 100644
index 919e5a2..0000000
--- a/server/util_filter.c
+++ /dev/null
@@ -1,607 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-#include "apr_lib.h"
-#include "apr_hash.h"
-#include "apr_strings.h"
-
-#include "httpd.h"
-#include "http_log.h"
-#include "util_filter.h"
-
-/* NOTE: Apache's current design doesn't allow a pool to be passed thru,
-   so we depend on a global to hold the correct pool
-*/
-#define FILTER_POOL     apr_global_hook_pool
-#include "apr_hooks.h"   /* for apr_global_hook_pool */
-
-/*
-** This macro returns true/false if a given filter should be inserted BEFORE
-** another filter. This will happen when one of: 1) there isn't another
-** filter; 2) that filter has a higher filter type (class); 3) that filter
-** corresponds to a different request.
-*/
-#define INSERT_BEFORE(f, before_this) ((before_this) == NULL \
-                           || (before_this)->frec->ftype > (f)->frec->ftype \
-                           || (before_this)->r != (f)->r)
-
-/* Trie structure to hold the mapping from registered
- * filter names to filters
- */
-
-typedef struct filter_trie_node filter_trie_node;
-
-typedef struct {
-    int c;
-    filter_trie_node *child;
-} filter_trie_child_ptr;
-
-/* Each trie node has an array of pointers to its children.
- * The array is kept in sorted order so that add_any_filter()
- * can do a binary search
- */
-struct filter_trie_node {
-    ap_filter_rec_t *frec;
-    filter_trie_child_ptr *children;
-    int nchildren;
-    int size;
-};
-
-#define TRIE_INITIAL_SIZE 4
-
-/* Link a trie node to its parent
- */
-static void trie_node_link(apr_pool_t *p, filter_trie_node *parent,
-                           filter_trie_node *child, int c)
-{
-    int i, j;
-
-    if (parent->nchildren == parent->size) {
-        filter_trie_child_ptr *new;
-        parent->size *= 2;
-        new = (filter_trie_child_ptr *)apr_palloc(p, parent->size *
-                                             sizeof(filter_trie_child_ptr));
-        memcpy(new, parent->children, parent->nchildren *
-               sizeof(filter_trie_child_ptr));
-        parent->children = new;
-    }
-
-    for (i = 0; i < parent->nchildren; i++) {
-        if (c == parent->children[i].c) {
-            return;
-        }
-        else if (c < parent->children[i].c) {
-            break;
-        }
-    }
-    for (j = parent->nchildren; j > i; j--) {
-        parent->children[j].c = parent->children[j - 1].c;
-        parent->children[j].child = parent->children[j - 1].child;
-    }
-    parent->children[i].c = c;
-    parent->children[i].child = child;
-
-    parent->nchildren++;
-}
-
-/* Allocate a new node for a trie.
- * If parent is non-NULL, link the new node under the parent node with
- * key 'c' (or, if an existing child node matches, return that one)
- */
-static filter_trie_node *trie_node_alloc(apr_pool_t *p,
-                                         filter_trie_node *parent, char c)
-{
-    filter_trie_node *new_node;
-    if (parent) {
-        int i;
-        for (i = 0; i < parent->nchildren; i++) {
-            if (c == parent->children[i].c) {
-                return parent->children[i].child;
-            }
-            else if (c < parent->children[i].c) {
-                break;
-            }
-        }
-        new_node =
-            (filter_trie_node *)apr_palloc(p, sizeof(filter_trie_node));
-        trie_node_link(p, parent, new_node, c);
-    }
-    else { /* No parent node */
-        new_node = (filter_trie_node *)apr_palloc(p,
-                                                  sizeof(filter_trie_node));
-    }
-
-    new_node->frec = NULL;
-    new_node->nchildren = 0;
-    new_node->size = TRIE_INITIAL_SIZE;
-    new_node->children = (filter_trie_child_ptr *)apr_palloc(p,
-                             new_node->size * sizeof(filter_trie_child_ptr));
-    return new_node;
-}
-
-static filter_trie_node *registered_output_filters = NULL;
-static filter_trie_node *registered_input_filters = NULL;
-
-
-static apr_status_t filter_cleanup(void *ctx)
-{
-    registered_output_filters = NULL;
-    registered_input_filters = NULL;
-    return APR_SUCCESS;
-}
-
-static ap_filter_rec_t *get_filter_handle(const char *name,
-                                          const filter_trie_node *filter_set)
-{
-    if (filter_set) {
-        const char *n;
-        const filter_trie_node *node;
-
-        node = filter_set;
-        for (n = name; *n; n++) {
-            int start, end;
-            start = 0;
-            end = node->nchildren - 1;
-            while (end >= start) {
-                int middle = (end + start) / 2;
-                char ch = node->children[middle].c;
-                if (*n == ch) {
-                    node = node->children[middle].child;
-                    break;
-                }
-                else if (*n < ch) {
-                    end = middle - 1;
-                }
-                else {
-                    start = middle + 1;
-                }
-            }
-            if (end < start) {
-                node = NULL;
-                break;
-            }
-        }
-
-        if (node && node->frec) {
-            return node->frec;
-        }
-    }
-    return NULL;
-}
-
-AP_DECLARE(ap_filter_rec_t *)ap_get_output_filter_handle(const char *name)
-{
-    return get_filter_handle(name, registered_output_filters);
-}
-
-AP_DECLARE(ap_filter_rec_t *)ap_get_input_filter_handle(const char *name)
-{
-    return get_filter_handle(name, registered_input_filters);
-}
-
-static ap_filter_rec_t *register_filter(const char *name,
-                            ap_filter_func filter_func,
-                            ap_filter_type ftype,
-                            filter_trie_node **reg_filter_set)
-{
-    ap_filter_rec_t *frec;
-    char *normalized_name;
-    const char *n;
-    filter_trie_node *node;
-
-    if (!*reg_filter_set) {
-        *reg_filter_set = trie_node_alloc(FILTER_POOL, NULL, 0);
-    }
-
-    normalized_name = apr_pstrdup(FILTER_POOL, name);
-    ap_str_tolower(normalized_name);
-
-    node = *reg_filter_set;
-    for (n = normalized_name; *n; n++) {
-        filter_trie_node *child = trie_node_alloc(FILTER_POOL, node, *n);
-        if (apr_isalpha(*n)) {
-            trie_node_link(FILTER_POOL, node, child, apr_toupper(*n));
-        }
-        node = child;
-    }
-    if (node->frec) {
-        frec = node->frec;
-    }
-    else {
-        frec = apr_palloc(FILTER_POOL, sizeof(*frec));
-        node->frec = frec;
-        frec->name = normalized_name;
-    }
-    frec->filter_func = filter_func;
-    frec->ftype = ftype;
-    
-    apr_pool_cleanup_register(FILTER_POOL, NULL, filter_cleanup, 
-                              apr_pool_cleanup_null);
-    return frec;
-}
-
-AP_DECLARE(ap_filter_rec_t *) ap_register_input_filter(const char *name,
-                                          ap_in_filter_func filter_func,
-                                          ap_filter_type ftype)
-{
-    ap_filter_func f;
-    f.in_func = filter_func;
-    return register_filter(name, f, ftype, &registered_input_filters);
-}                                                                    
-
-AP_DECLARE(ap_filter_rec_t *) ap_register_output_filter(const char *name,
-                                           ap_out_filter_func filter_func,
-                                           ap_filter_type ftype)
-{
-    ap_filter_func f;
-    f.out_func = filter_func;
-    return register_filter(name, f, ftype, &registered_output_filters);
-}
-
-static ap_filter_t *add_any_filter_handle(ap_filter_rec_t *frec, void *ctx, 
-                                          request_rec *r, conn_rec *c, 
-                                          ap_filter_t **r_filters,
-                                          ap_filter_t **p_filters,
-                                          ap_filter_t **c_filters)
-{
-    apr_pool_t* p = r ? r->pool : c->pool;
-    ap_filter_t *f = apr_palloc(p, sizeof(*f));
-    ap_filter_t **outf;
-
-    if (frec->ftype < AP_FTYPE_PROTOCOL) {
-        if (r) {
-            outf = r_filters;
-        }
-        else {
-            ap_log_error(APLOG_MARK, APLOG_ERR|APLOG_NOERRNO, 0, NULL,
-                      "a content filter was added without a request: %s", frec->name);
-            return NULL;
-        }
-    }
-    else if (frec->ftype < AP_FTYPE_CONNECTION) {
-        if (r) {
-            outf = p_filters;
-        }
-        else {
-            ap_log_error(APLOG_MARK, APLOG_ERR|APLOG_NOERRNO, 0, NULL,
-                         "a protocol filter was added without a request: %s", frec->name);
-            return NULL;
-        }
-    }
-    else {
-        outf = c_filters;
-    }
-
-    f->frec = frec;
-    f->ctx = ctx;
-    f->r = r;
-    f->c = c;
-    f->next = NULL;
-
-    if (INSERT_BEFORE(f, *outf)) {
-        f->next = *outf;
-
-        if (*outf) {
-            ap_filter_t *first = NULL;
-
-            if (r) {
-                /* If we are adding our first non-connection filter,
-                 * Then don't try to find the right location, it is
-                 * automatically first.
-                 */
-                if (*r_filters != *c_filters) {
-                    first = *r_filters;
-                    while (first && (first->next != (*outf))) {
-                        first = first->next;
-                    }
-                }
-            }
-            if (first && first != (*outf)) {
-                first->next = f;
-            }
-        }
-        *outf = f;
-    }
-    else {
-        ap_filter_t *fscan = *outf;
-        while (!INSERT_BEFORE(f, fscan->next))
-            fscan = fscan->next;
-
-        f->next = fscan->next;
-	fscan->next = f;
-    }
-
-    if (frec->ftype < AP_FTYPE_CONNECTION && (*r_filters == *c_filters)) {
-        *r_filters = *p_filters;
-    }
-    return f;
-}
-
-static ap_filter_t *add_any_filter(const char *name, void *ctx, 
-                                   request_rec *r, conn_rec *c, 
-                                   const filter_trie_node *reg_filter_set,
-                                   ap_filter_t **r_filters, 
-                                   ap_filter_t **p_filters,
-                                   ap_filter_t **c_filters)
-{
-    if (reg_filter_set) {
-        const char *n;
-        const filter_trie_node *node;
-
-        node = reg_filter_set;
-        for (n = name; *n; n++) {
-            int start, end;
-            start = 0;
-            end = node->nchildren - 1;
-            while (end >= start) {
-                int middle = (end + start) / 2;
-                char ch = node->children[middle].c;
-                if (*n == ch) {
-                    node = node->children[middle].child;
-                    break;
-                }
-                else if (*n < ch) {
-                    end = middle - 1;
-                }
-                else {
-                    start = middle + 1;
-                }
-            }
-            if (end < start) {
-                node = NULL;
-                break;
-            }
-        }
-
-        if (node && node->frec) {
-            return add_any_filter_handle(node->frec, ctx, r, c, r_filters, 
-                                         p_filters, c_filters);
-        }
-    }
-
-    ap_log_error(APLOG_MARK, APLOG_ERR|APLOG_NOERRNO, 0, NULL,
-                 "an unknown filter was not added: %s", name);
-    return NULL;
-}
-
-AP_DECLARE(ap_filter_t *) ap_add_input_filter(const char *name, void *ctx,
-                                              request_rec *r, conn_rec *c)
-{
-    return add_any_filter(name, ctx, r, c, registered_input_filters,
-                          r ? &r->input_filters : NULL, 
-                          r ? &r->proto_input_filters : NULL, &c->input_filters);
-}
-
-AP_DECLARE(ap_filter_t *) ap_add_input_filter_handle(ap_filter_rec_t *f,
-                                                     void *ctx,
-                                                     request_rec *r,
-                                                     conn_rec *c)
-{
-    return add_any_filter_handle(f, ctx, r, c, r ? &r->input_filters : NULL,
-                                 r ? &r->proto_input_filters : NULL, 
-                                 &c->input_filters);
-}
-
-AP_DECLARE(ap_filter_t *) ap_add_output_filter(const char *name, void *ctx,
-                                               request_rec *r, conn_rec *c)
-{
-    return add_any_filter(name, ctx, r, c, registered_output_filters,
-                          r ? &r->output_filters : NULL, 
-                          r ? &r->proto_output_filters : NULL, &c->output_filters);
-}
-
-AP_DECLARE(ap_filter_t *) ap_add_output_filter_handle(ap_filter_rec_t *f,
-                                                      void *ctx,
-                                                      request_rec *r,
-                                                      conn_rec *c)
-{
-    return add_any_filter_handle(f, ctx, r, c, r ? &r->output_filters : NULL,
-                                 r ? &r->proto_output_filters : NULL,
-                                 &c->output_filters);
-}
-
-static void remove_any_filter(ap_filter_t *f, ap_filter_t **r_filt, ap_filter_t **p_filt,
-                              ap_filter_t **c_filt)
-{
-    ap_filter_t **curr = r_filt ? r_filt : c_filt;
-    ap_filter_t *fscan = *curr;
-
-    if (p_filt && *p_filt == f)
-        *p_filt = (*p_filt)->next;
-
-    if (*curr == f) {
-        *curr = (*curr)->next;
-        return;
-    }
-
-    while (fscan->next != f) {
-        if (!(fscan = fscan->next)) {
-            return;
-        }
-    }
-
-    fscan->next = f->next;
-}
-
-AP_DECLARE(void) ap_remove_input_filter(ap_filter_t *f)
-{
-    remove_any_filter(f, f->r ? &f->r->input_filters : NULL, 
-                      f->r ? &f->r->proto_input_filters : NULL, 
-                      &f->c->input_filters);
-}
-
-AP_DECLARE(void) ap_remove_output_filter(ap_filter_t *f)
-{
-    remove_any_filter(f, f->r ? &f->r->output_filters : NULL, 
-                      f->r ? &f->r->proto_output_filters : NULL, 
-                      &f->c->output_filters);
-}
-
-/* 
- * Read data from the next filter in the filter stack.  Data should be 
- * modified in the bucket brigade that is passed in.  The core allocates the
- * bucket brigade, modules that wish to replace large chunks of data or to
- * save data off to the side should probably create their own temporary
- * brigade especially for that use.
- */
-AP_DECLARE(apr_status_t) ap_get_brigade(ap_filter_t *next,
-                                        apr_bucket_brigade *bb, 
-                                        ap_input_mode_t mode,
-                                        apr_read_type_e block,
-                                        apr_off_t readbytes)
-{
-    if (next) {
-        return next->frec->filter_func.in_func(next, bb, mode, block, 
-                                               readbytes);
-    }
-    return AP_NOBODY_READ;
-}
-
-/* Pass the buckets to the next filter in the filter stack.  If the
- * current filter is a handler, we should get NULL passed in instead of
- * the current filter.  At that point, we can just call the first filter in
- * the stack, or r->output_filters.
- */
-AP_DECLARE(apr_status_t) ap_pass_brigade(ap_filter_t *next, 
-                                         apr_bucket_brigade *bb)
-{
-    if (next) {
-        apr_bucket *e;
-        if ((e = APR_BRIGADE_LAST(bb)) && APR_BUCKET_IS_EOS(e) && next->r) {
-            /* This is only safe because HTTP_HEADER filter is always in
-             * the filter stack.   This ensures that there is ALWAYS a
-             * request-based filter that we can attach this to.  If the
-             * HTTP_FILTER is removed, and another filter is not put in its
-             * place, then handlers like mod_cgi, which attach their own
-             * EOS bucket to the brigade will be broken, because we will
-             * get two EOS buckets on the same request.
-             */
-            next->r->eos_sent = 1;
-        }
-        return next->frec->filter_func.out_func(next, bb);
-    }
-    return AP_NOBODY_WROTE;
-}
-
-AP_DECLARE(apr_status_t) ap_save_brigade(ap_filter_t *f, 
-                                         apr_bucket_brigade **saveto,
-                                         apr_bucket_brigade **b, apr_pool_t *p)
-{
-    apr_bucket *e;
-    apr_status_t rv;
-
-    /* If have never stored any data in the filter, then we had better
-     * create an empty bucket brigade so that we can concat.
-     */
-    if (!(*saveto)) {
-        *saveto = apr_brigade_create(p);
-    }
-    
-    APR_RING_FOREACH(e, &(*b)->list, apr_bucket, link) {
-        rv = apr_bucket_setaside(e, p);
-        if (rv != APR_SUCCESS
-            /* ### this ENOTIMPL will go away once we implement setaside
-               ### for all bucket types. */
-            && rv != APR_ENOTIMPL) {
-            return rv;
-        }
-    }
-    APR_BRIGADE_CONCAT(*saveto, *b);
-    return APR_SUCCESS;
-}
-
-AP_DECLARE_NONSTD(apr_status_t) ap_filter_flush(apr_bucket_brigade *bb, 
-                                                void *ctx)
-{
-    ap_filter_t *f = ctx;
-
-    return ap_pass_brigade(f, bb);
-}
-
-AP_DECLARE(apr_status_t) ap_fflush(ap_filter_t *f, apr_bucket_brigade *bb)
-{
-    apr_bucket *b;
-
-    b = apr_bucket_flush_create();
-    APR_BRIGADE_INSERT_TAIL(bb, b);
-    return ap_pass_brigade(f, bb);
-}
-
-AP_DECLARE_NONSTD(apr_status_t) ap_fputstrs(ap_filter_t *f,
-                                            apr_bucket_brigade *bb, ...)
-{
-    va_list args;
-    apr_status_t rv;
-
-    va_start(args, bb);
-    rv = apr_brigade_vputstrs(bb, ap_filter_flush, f, args);
-    va_end(args);
-    return rv;
-}
-
-AP_DECLARE_NONSTD(apr_status_t) ap_fprintf(ap_filter_t *f,
-                                           apr_bucket_brigade *bb,
-                                           const char *fmt,
-                                           ...)
-{
-    va_list args;
-    apr_status_t rv;
-
-    va_start(args, fmt);
-    rv = apr_brigade_vprintf(bb, ap_filter_flush, f, fmt, args);
-    va_end(args);
-    return rv;
-}
diff --git a/server/util_md5.c b/server/util_md5.c
deleted file mode 100644
index 1a2435e..0000000
--- a/server/util_md5.c
+++ /dev/null
@@ -1,215 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-/************************************************************************
- * NCSA HTTPd Server
- * Software Development Group
- * National Center for Supercomputing Applications
- * University of Illinois at Urbana-Champaign
- * 605 E. Springfield, Champaign, IL 61820
- * httpd@ncsa.uiuc.edu
- *
- * Copyright  (C)  1995, Board of Trustees of the University of Illinois
- *
- ************************************************************************
- *
- * md5.c: NCSA HTTPd code which uses the md5c.c RSA Code
- *
- *  Original Code Copyright (C) 1994, Jeff Hostetler, Spyglass, Inc.
- *  Portions of Content-MD5 code Copyright (C) 1993, 1994 by Carnegie Mellon
- *     University (see Copyright below).
- *  Portions of Content-MD5 code Copyright (C) 1991 Bell Communications 
- *     Research, Inc. (Bellcore) (see Copyright below).
- *  Portions extracted from mpack, John G. Myers - jgm+@cmu.edu
- *  Content-MD5 Code contributed by Martin Hamilton (martin@net.lut.ac.uk)
- *
- */
-
-
-
-/* md5.c --Module Interface to MD5. */
-/* Jeff Hostetler, Spyglass, Inc., 1994. */
-
-#include "ap_config.h"
-#include "apr_portable.h"
-#include "apr_strings.h"
-#include "httpd.h"
-#include "util_md5.h"
-#include "util_ebcdic.h"
-
-AP_DECLARE(char *) ap_md5_binary(apr_pool_t *p, const unsigned char *buf, int length)
-{
-    const char *hex = "0123456789abcdef";
-    apr_md5_ctx_t my_md5;
-    unsigned char hash[MD5_DIGESTSIZE];
-    char *r, result[33]; /* (MD5_DIGESTSIZE * 2) + 1 */
-    int i;
-
-    /*
-     * Take the MD5 hash of the string argument.
-     */
-
-    apr_md5_init(&my_md5);
-#if APR_CHARSET_EBCDIC
-    apr_md5_set_xlate(&my_md5, ap_hdrs_to_ascii);
-#endif
-    apr_md5_update(&my_md5, buf, (unsigned int)length);
-    apr_md5_final(hash, &my_md5);
-
-    for (i = 0, r = result; i < MD5_DIGESTSIZE; i++) {
-	*r++ = hex[hash[i] >> 4];
-	*r++ = hex[hash[i] & 0xF];
-    }
-    *r = '\0';
-
-    return apr_pstrndup(p, result, MD5_DIGESTSIZE*2);
-}
-
-AP_DECLARE(char *) ap_md5(apr_pool_t *p, const unsigned char *string)
-{
-    return ap_md5_binary(p, string, (int) strlen((char *)string));
-}
-
-/* these portions extracted from mpack, John G. Myers - jgm+@cmu.edu */
-
-/* (C) Copyright 1993,1994 by Carnegie Mellon University
- * All Rights Reserved.
- *
- * Permission to use, copy, modify, distribute, and sell this software
- * and its documentation for any purpose is hereby granted without
- * fee, provided that the above copyright notice appear in all copies
- * and that both that copyright notice and this permission notice
- * appear in supporting documentation, and that the name of Carnegie
- * Mellon University not be used in advertising or publicity
- * pertaining to distribution of the software without specific,
- * written prior permission.  Carnegie Mellon University makes no
- * representations about the suitability of this software for any
- * purpose.  It is provided "as is" without express or implied
- * warranty.
- *
- * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO
- * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
- * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE
- * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
- * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
- * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
- * SOFTWARE.
- */
-
-/*
- * Copyright (c) 1991 Bell Communications Research, Inc. (Bellcore)
- *
- * Permission to use, copy, modify, and distribute this material
- * for any purpose and without fee is hereby granted, provided
- * that the above copyright notice and this permission notice
- * appear in all copies, and that the name of Bellcore not be
- * used in advertising or publicity pertaining to this
- * material without the specific, prior written permission
- * of an authorized representative of Bellcore.  BELLCORE
- * MAKES NO REPRESENTATIONS ABOUT THE ACCURACY OR SUITABILITY
- * OF THIS MATERIAL FOR ANY PURPOSE.  IT IS PROVIDED "AS IS",
- * WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES.  
- */
-
-static char basis_64[] =
-"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
-
-AP_DECLARE(char *) ap_md5contextTo64(apr_pool_t *a, apr_md5_ctx_t *context)
-{
-    unsigned char digest[18];
-    char *encodedDigest;
-    int i;
-    char *p;
-
-    encodedDigest = (char *) apr_pcalloc(a, 25 * sizeof(char));
-
-    apr_md5_final(digest, context);
-    digest[sizeof(digest) - 1] = digest[sizeof(digest) - 2] = 0;
-
-    p = encodedDigest;
-    for (i = 0; i < sizeof(digest); i += 3) {
-	*p++ = basis_64[digest[i] >> 2];
-	*p++ = basis_64[((digest[i] & 0x3) << 4) | ((int) (digest[i + 1] & 0xF0) >> 4)];
-	*p++ = basis_64[((digest[i + 1] & 0xF) << 2) | ((int) (digest[i + 2] & 0xC0) >> 6)];
-	*p++ = basis_64[digest[i + 2] & 0x3F];
-    }
-    *p-- = '\0';
-    *p-- = '=';
-    *p-- = '=';
-    return encodedDigest;
-}
-
-AP_DECLARE(char *) ap_md5digest(apr_pool_t *p, apr_file_t *infile)
-{
-    apr_md5_ctx_t context;
-    unsigned char buf[1000];
-    long length = 0;
-    apr_size_t nbytes;
-    apr_off_t offset = 0L;
-
-    apr_md5_init(&context);
-    nbytes = sizeof(buf);
-    while (apr_file_read(infile, buf, &nbytes) == APR_SUCCESS) {
-	length += nbytes;
-	apr_md5_update(&context, buf, nbytes);
-    }
-    apr_file_seek(infile, APR_SET, &offset);
-    return ap_md5contextTo64(p, &context);
-}
-
diff --git a/server/util_script.c b/server/util_script.c
deleted file mode 100644
index ba6d49c..0000000
--- a/server/util_script.c
+++ /dev/null
@@ -1,677 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-#include "apr.h"
-#include "apr_lib.h"
-#include "apr_strings.h"
-
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-#if APR_HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-
-#define CORE_PRIVATE
-#include "ap_config.h"
-#include "httpd.h"
-#include "http_config.h"
-#include "http_main.h"
-#include "http_log.h"
-#include "http_core.h"
-#include "http_protocol.h"
-#include "http_request.h"	/* for sub_req_lookup_uri() */
-#include "util_script.h"
-#include "apr_date.h"		/* For apr_date_parse_http() */
-#include "util_ebcdic.h"
-
-#ifdef OS2
-#define INCL_DOS
-#include <os2.h>
-#endif
-
-/*
- * Various utility functions which are common to a whole lot of
- * script-type extensions mechanisms, and might as well be gathered
- * in one place (if only to avoid creating inter-module dependancies
- * where there don't have to be).
- */
-
-#define MALFORMED_MESSAGE "malformed header from script. Bad header="
-#define MALFORMED_HEADER_LENGTH_TO_SHOW 30
-
-static char *http2env(apr_pool_t *a, const char *w)
-{
-    char *res = (char *)apr_palloc(a, sizeof("HTTP_") + strlen(w));
-    char *cp = res;
-    char c;
-
-    *cp++ = 'H';
-    *cp++ = 'T';
-    *cp++ = 'T';
-    *cp++ = 'P';
-    *cp++ = '_';
-
-    while ((c = *w++) != 0) {
-        if (!apr_isalnum(c)) {
-            *cp++ = '_';
-        }
-        else {
-            *cp++ = apr_toupper(c);
-        }
-    }
-    *cp = 0;
- 
-    return res;
-}
-
-AP_DECLARE(char **) ap_create_environment(apr_pool_t *p, apr_table_t *t)
-{
-    const apr_array_header_t *env_arr = apr_table_elts(t);
-    const apr_table_entry_t *elts = (const apr_table_entry_t *) env_arr->elts;
-    char **env = (char **) apr_palloc(p, (env_arr->nelts + 2) * sizeof(char *));
-    int i, j;
-    char *tz;
-    char *whack;
-
-    j = 0;
-    if (!apr_table_get(t, "TZ")) {
-	tz = getenv("TZ");
-	if (tz != NULL) {
-	    env[j++] = apr_pstrcat(p, "TZ=", tz, NULL);
-	}
-    }
-    for (i = 0; i < env_arr->nelts; ++i) {
-        if (!elts[i].key) {
-	    continue;
-	}
-	env[j] = apr_pstrcat(p, elts[i].key, "=", elts[i].val, NULL);
-	whack = env[j];
-	if (apr_isdigit(*whack)) {
-	    *whack++ = '_';
-	}
-	while (*whack != '=') {
-	    if (!apr_isalnum(*whack) && *whack != '_') {
-		*whack = '_';
-	    }
-	    ++whack;
-	}
-	++j;
-    }
-
-    env[j] = NULL;
-    return env;
-}
-
-AP_DECLARE(void) ap_add_common_vars(request_rec *r)
-{
-    apr_table_t *e;
-    server_rec *s = r->server;
-    conn_rec *c = r->connection;
-    const char *rem_logname;
-    char *env_path;
-#if defined(WIN32) || defined(OS2) || defined(BEOS)
-    char *env_temp;
-#endif
-    const char *host;
-    const apr_array_header_t *hdrs_arr = apr_table_elts(r->headers_in);
-    const apr_table_entry_t *hdrs = (const apr_table_entry_t *) hdrs_arr->elts;
-    int i;
-    apr_port_t rport;
-
-    /* use a temporary apr_table_t which we'll overlap onto
-     * r->subprocess_env later
-     * (exception: if r->subprocess_env is empty at the start,
-     * write directly into it)
-     */
-    if (apr_is_empty_table(r->subprocess_env)) {
-      e = r->subprocess_env;
-    }
-    else {
-      e = apr_table_make(r->pool, 25 + hdrs_arr->nelts);
-    }
-
-    /* First, add environment vars from headers... this is as per
-     * CGI specs, though other sorts of scripting interfaces see
-     * the same vars...
-     */
-
-    for (i = 0; i < hdrs_arr->nelts; ++i) {
-        if (!hdrs[i].key) {
-	    continue;
-	}
-
-	/* A few headers are special cased --- Authorization to prevent
-	 * rogue scripts from capturing passwords; content-type and -length
-	 * for no particular reason.
-	 */
-
-	if (!strcasecmp(hdrs[i].key, "Content-type")) {
-	    apr_table_addn(e, "CONTENT_TYPE", hdrs[i].val);
-	}
-	else if (!strcasecmp(hdrs[i].key, "Content-length")) {
-	    apr_table_addn(e, "CONTENT_LENGTH", hdrs[i].val);
-	}
-	/*
-	 * You really don't want to disable this check, since it leaves you
-	 * wide open to CGIs stealing passwords and people viewing them
-	 * in the environment with "ps -e".  But, if you must...
-	 */
-#ifndef SECURITY_HOLE_PASS_AUTHORIZATION
-	else if (!strcasecmp(hdrs[i].key, "Authorization") 
-		 || !strcasecmp(hdrs[i].key, "Proxy-Authorization")) {
-	    continue;
-	}
-#endif
-	else {
-	    apr_table_addn(e, http2env(r->pool, hdrs[i].key), hdrs[i].val);
-	}
-    }
-
-    if (!(env_path = getenv("PATH"))) {
-	env_path = DEFAULT_PATH;
-    }
-    apr_table_addn(e, "PATH", apr_pstrdup(r->pool, env_path));
-
-#ifdef WIN32
-    if (env_temp = getenv("SystemRoot")) {
-        apr_table_addn(e, "SystemRoot", env_temp);         
-    }
-    if (env_temp = getenv("COMSPEC")) {
-        apr_table_addn(e, "COMSPEC", env_temp);            
-    }
-    if (env_temp = getenv("PATHEXT")) {
-        apr_table_addn(e, "PATHEXT", env_temp);            
-    }
-    if (env_temp = getenv("WINDIR")) {
-        apr_table_addn(e, "WINDIR", env_temp);
-    }
-#endif
-
-#ifdef OS2
-    if ((env_temp = getenv("COMSPEC")) != NULL) {
-        apr_table_addn(e, "COMSPEC", env_temp);            
-    }
-    if ((env_temp = getenv("ETC")) != NULL) {
-        apr_table_addn(e, "ETC", env_temp);            
-    }
-    if ((env_temp = getenv("DPATH")) != NULL) {
-        apr_table_addn(e, "DPATH", env_temp);            
-    }
-    if ((env_temp = getenv("PERLLIB_PREFIX")) != NULL) {
-        apr_table_addn(e, "PERLLIB_PREFIX", env_temp);            
-    }
-#endif
-
-#ifdef BEOS
-    if ((env_temp = getenv("LIBRARY_PATH")) != NULL) {
-        apr_table_addn(e, "LIBRARY_PATH", env_temp);            
-    }
-#endif
-
-    apr_table_addn(e, "SERVER_SIGNATURE", ap_psignature("", r));
-    apr_table_addn(e, "SERVER_SOFTWARE", ap_get_server_version());
-    apr_table_addn(e, "SERVER_NAME", ap_get_server_name(r));
-    apr_table_addn(e, "SERVER_ADDR", r->connection->local_ip);	/* Apache */
-    apr_table_addn(e, "SERVER_PORT",
-		  apr_psprintf(r->pool, "%u", ap_get_server_port(r)));
-    host = ap_get_remote_host(c, r->per_dir_config, REMOTE_HOST, NULL);
-    if (host) {
-	apr_table_addn(e, "REMOTE_HOST", host);
-    }
-    apr_table_addn(e, "REMOTE_ADDR", c->remote_ip);
-    apr_table_addn(e, "DOCUMENT_ROOT", ap_document_root(r));	/* Apache */
-    apr_table_addn(e, "SERVER_ADMIN", s->server_admin);	/* Apache */
-    apr_table_addn(e, "SCRIPT_FILENAME", r->filename);	/* Apache */
-
-    apr_sockaddr_port_get(&rport, c->remote_addr);
-    apr_table_addn(e, "REMOTE_PORT", apr_itoa(r->pool, rport));
-
-    if (r->user) {
-	apr_table_addn(e, "REMOTE_USER", r->user);
-    }
-    if (r->ap_auth_type) {
-	apr_table_addn(e, "AUTH_TYPE", r->ap_auth_type);
-    }
-    rem_logname = ap_get_remote_logname(r);
-    if (rem_logname) {
-	apr_table_addn(e, "REMOTE_IDENT", apr_pstrdup(r->pool, rem_logname));
-    }
-
-    /* Apache custom error responses. If we have redirected set two new vars */
-
-    if (r->prev) {
-        if (r->prev->args) {
-	    apr_table_addn(e, "REDIRECT_QUERY_STRING", r->prev->args);
-	}
-	if (r->prev->uri) {
-	    apr_table_addn(e, "REDIRECT_URL", r->prev->uri);
-	}
-    }
-
-    if (e != r->subprocess_env) {
-      apr_table_overlap(r->subprocess_env, e, APR_OVERLAP_TABLES_SET);
-    }
-}
-
-/* This "cute" little function comes about because the path info on
- * filenames and URLs aren't always the same. So we take the two,
- * and find as much of the two that match as possible.
- */
-
-AP_DECLARE(int) ap_find_path_info(const char *uri, const char *path_info)
-{
-    int lu = strlen(uri);
-    int lp = strlen(path_info);
-
-    while (lu-- && lp-- && uri[lu] == path_info[lp]);
-
-    if (lu == -1) {
-	lu = 0;
-    }
-
-    while (uri[lu] != '\0' && uri[lu] != '/') {
-        lu++;
-    }
-    return lu;
-}
-
-/* Obtain the Request-URI from the original request-line, returning
- * a new string from the request pool containing the URI or "".
- */
-static char *original_uri(request_rec *r)
-{
-    char *first, *last;
-
-    if (r->the_request == NULL) {
-	return (char *) apr_pcalloc(r->pool, 1);
-    }
-
-    first = r->the_request;	/* use the request-line */
-
-    while (*first && !apr_isspace(*first)) {
-	++first;		/* skip over the method */
-    }
-    while (apr_isspace(*first)) {
-	++first;		/*   and the space(s)   */
-    }
-
-    last = first;
-    while (*last && !apr_isspace(*last)) {
-	++last;			/* end at next whitespace */
-    }
-
-    return apr_pstrmemdup(r->pool, first, last - first);
-}
-
-AP_DECLARE(void) ap_add_cgi_vars(request_rec *r)
-{
-    apr_table_t *e = r->subprocess_env;
-
-    apr_table_setn(e, "GATEWAY_INTERFACE", "CGI/1.1");
-    apr_table_setn(e, "SERVER_PROTOCOL", r->protocol);
-    apr_table_setn(e, "REQUEST_METHOD", r->method);
-    apr_table_setn(e, "QUERY_STRING", r->args ? r->args : "");
-    apr_table_setn(e, "REQUEST_URI", original_uri(r)); 
-
-    /* Note that the code below special-cases scripts run from includes,
-     * because it "knows" that the sub_request has been hacked to have the
-     * args and path_info of the original request, and not any that may have
-     * come with the script URI in the include command.  Ugh.
-     */
-
-    if (!strcmp(r->protocol, "INCLUDED")) {
-	apr_table_setn(e, "SCRIPT_NAME", r->uri);
-	if (r->path_info && *r->path_info) {
-	    apr_table_setn(e, "PATH_INFO", r->path_info);
-	}
-    }
-    else if (!r->path_info || !*r->path_info) {
-	apr_table_setn(e, "SCRIPT_NAME", r->uri);
-    }
-    else {
-	int path_info_start = ap_find_path_info(r->uri, r->path_info);
-
-	apr_table_setn(e, "SCRIPT_NAME",
-		      apr_pstrndup(r->pool, r->uri, path_info_start));
-
-	apr_table_setn(e, "PATH_INFO", r->path_info);
-    }
-
-    if (r->path_info && r->path_info[0]) {
-	/*
-	 * To get PATH_TRANSLATED, treat PATH_INFO as a URI path.
-	 * Need to re-escape it for this, since the entire URI was
-	 * un-escaped before we determined where the PATH_INFO began.
-	 */
-	request_rec *pa_req;
-
-	pa_req = ap_sub_req_lookup_uri(ap_escape_uri(r->pool, r->path_info), r,
-                                       NULL);
-
-	if (pa_req->filename) {
-	    char *pt = apr_pstrcat(r->pool, pa_req->filename, pa_req->path_info,
-				  NULL);
-#ifdef WIN32
-	    /* We need to make this a real Windows path name */
-	    apr_filepath_merge(&pt, "", pt, APR_FILEPATH_NATIVE, r->pool);
-#endif
-	    apr_table_setn(e, "PATH_TRANSLATED", pt);
-	}
-	ap_destroy_sub_req(pa_req);
-    }
-}
-
-
-static int set_cookie_doo_doo(void *v, const char *key, const char *val)
-{
-    apr_table_addn(v, key, val);
-    return 1;
-}
-
-AP_DECLARE(int) ap_scan_script_header_err_core(request_rec *r, char *buffer,
-				       int (*getsfunc) (char *, int, void *),
-				       void *getsfunc_data)
-{
-    char x[MAX_STRING_LEN];
-    char *w, *l;
-    int p;
-    int cgi_status = HTTP_OK;
-    apr_table_t *merge;
-    apr_table_t *cookie_table;
-
-    if (buffer) {
-	*buffer = '\0';
-    }
-    w = buffer ? buffer : x;
-
-    /* temporary place to hold headers to merge in later */
-    merge = apr_table_make(r->pool, 10);
-
-    /* The HTTP specification says that it is legal to merge duplicate
-     * headers into one.  Some browsers that support Cookies don't like
-     * merged headers and prefer that each Set-Cookie header is sent
-     * separately.  Lets humour those browsers by not merging.
-     * Oh what a pain it is.
-     */
-    cookie_table = apr_table_make(r->pool, 2);
-    apr_table_do(set_cookie_doo_doo, cookie_table, r->err_headers_out, "Set-Cookie", NULL);
-
-    while (1) {
-
-	if ((*getsfunc) (w, MAX_STRING_LEN - 1, getsfunc_data) == 0) {
-	    ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-			  "Premature end of script headers: %s", r->filename);
-	    return HTTP_INTERNAL_SERVER_ERROR;
-	}
-
-	/* Delete terminal (CR?)LF */
-
-	p = strlen(w);
-	     /* Indeed, the host's '\n':
-	        '\012' for UNIX; '\015' for MacOS; '\025' for OS/390
-	         -- whatever the script generates.
-	     */                                  
-	if (p > 0 && w[p - 1] == '\n') {
-	    if (p > 1 && w[p - 2] == CR) {
-		w[p - 2] = '\0';
-	    }
-	    else {
-		w[p - 1] = '\0';
-	    }
-	}
-
-	/*
-	 * If we've finished reading the headers, check to make sure any
-	 * HTTP/1.1 conditions are met.  If so, we're done; normal processing
-	 * will handle the script's output.  If not, just return the error.
-	 * The appropriate thing to do would be to send the script process a
-	 * SIGPIPE to let it know we're ignoring it, close the channel to the
-	 * script process, and *then* return the failed-to-meet-condition
-	 * error.  Otherwise we'd be waiting for the script to finish
-	 * blithering before telling the client the output was no good.
-	 * However, we don't have the information to do that, so we have to
-	 * leave it to an upper layer.
-	 */
-	if (w[0] == '\0') {
-	    int cond_status = OK;
-
-	    if ((cgi_status == HTTP_OK) && (r->method_number == M_GET)) {
-		cond_status = ap_meets_conditions(r);
-	    }
-	    apr_table_overlap(r->err_headers_out, merge,
-		APR_OVERLAP_TABLES_MERGE);
-	    if (!apr_is_empty_table(cookie_table)) {
-		/* the cookies have already been copied to the cookie_table */
-		apr_table_unset(r->err_headers_out, "Set-Cookie");
-		r->err_headers_out = apr_table_overlay(r->pool,
-		    r->err_headers_out, cookie_table);
-	    }
-	    return cond_status;
-	}
-
-	/* if we see a bogus header don't ignore it. Shout and scream */
-
-#if APR_CHARSET_EBCDIC
-	    /* Chances are that we received an ASCII header text instead of
-	     * the expected EBCDIC header lines. Try to auto-detect:
-	     */
-	if (!(l = strchr(w, ':'))) {
-	    int maybeASCII = 0, maybeEBCDIC = 0;
-	    unsigned char *cp, native;
-            apr_size_t inbytes_left, outbytes_left;
-
-	    for (cp = w; *cp != '\0'; ++cp) {
-                native = apr_xlate_conv_byte(ap_hdrs_from_ascii, *cp);
-		if (isprint(*cp) && !isprint(native))
-		    ++maybeEBCDIC;
-		if (!isprint(*cp) && isprint(native))
-		    ++maybeASCII;
-            }
-	    if (maybeASCII > maybeEBCDIC) {
-		ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r->server,
-                             "CGI Interface Error: Script headers apparently ASCII: (CGI = %s)",
-                             r->filename);
-                inbytes_left = outbytes_left = cp - w;
-                apr_xlate_conv_buffer(ap_hdrs_from_ascii,
-                                      w, &inbytes_left, w, &outbytes_left);
-	    }
-	}
-#endif /*APR_CHARSET_EBCDIC*/
-	if (!(l = strchr(w, ':'))) {
-	    char malformed[(sizeof MALFORMED_MESSAGE) + 1
-			   + MALFORMED_HEADER_LENGTH_TO_SHOW];
-
-	    strcpy(malformed, MALFORMED_MESSAGE);
-	    strncat(malformed, w, MALFORMED_HEADER_LENGTH_TO_SHOW);
-
-	    if (!buffer) {
-		/* Soak up all the script output - may save an outright kill */
-	        while ((*getsfunc) (w, MAX_STRING_LEN - 1, getsfunc_data)) {
-		    continue;
-		}
-	    }
-
-	    ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-			  "%s: %s", malformed, r->filename);
-	    return HTTP_INTERNAL_SERVER_ERROR;
-	}
-
-	*l++ = '\0';
-	while (*l && apr_isspace(*l)) {
-	    ++l;
-	}
-
-	if (!strcasecmp(w, "Content-type")) {
-	    char *tmp;
-
-	    /* Nuke trailing whitespace */
-
-	    char *endp = l + strlen(l) - 1;
-	    while (endp > l && apr_isspace(*endp)) {
-		*endp-- = '\0';
-	    }
-
-	    tmp = apr_pstrdup(r->pool, l);
-	    ap_content_type_tolower(tmp);
-	    r->content_type = tmp;
-	}
-	/*
-	 * If the script returned a specific status, that's what
-	 * we'll use - otherwise we assume 200 OK.
-	 */
-	else if (!strcasecmp(w, "Status")) {
-	    r->status = cgi_status = atoi(l);
-	    r->status_line = apr_pstrdup(r->pool, l);
-	}
-	else if (!strcasecmp(w, "Location")) {
-	    apr_table_set(r->headers_out, w, l);
-	}
-	else if (!strcasecmp(w, "Content-Length")) {
-	    apr_table_set(r->headers_out, w, l);
-	}
-	else if (!strcasecmp(w, "Transfer-Encoding")) {
-	    apr_table_set(r->headers_out, w, l);
-	}
-	/*
-	 * If the script gave us a Last-Modified header, we can't just
-	 * pass it on blindly because of restrictions on future values.
-	 */
-	else if (!strcasecmp(w, "Last-Modified")) {
-	    ap_update_mtime(r, apr_date_parse_http(l));
-	    ap_set_last_modified(r);
-	}
-	else if (!strcasecmp(w, "Set-Cookie")) {
-	    apr_table_add(cookie_table, w, l);
-	}
-	else {
-	    apr_table_add(merge, w, l);
-	}
-    }
-
-    return OK;
-}
-
-static int getsfunc_FILE(char *buf, int len, void *f)
-{
-    return apr_file_gets(buf, len, (apr_file_t *) f) == APR_SUCCESS;
-}
-
-AP_DECLARE(int) ap_scan_script_header_err(request_rec *r, apr_file_t *f,
-					  char *buffer)
-{
-    return ap_scan_script_header_err_core(r, buffer, getsfunc_FILE, f);
-}
-
-struct vastrs {
-    va_list args;
-    int arg;
-    const char *curpos;
-};
-
-static int getsfunc_STRING(char *w, int len, void *pvastrs)
-{
-    struct vastrs *strs = (struct vastrs*) pvastrs;
-    const char *p;
-    int t;
-    
-    if (!strs->curpos || !*strs->curpos) 
-        return 0;
-    p = ap_strchr_c(strs->curpos, '\n');
-    if (p)
-        ++p;
-    else
-        p = ap_strchr_c(strs->curpos, '\0');
-    t = p - strs->curpos;
-    if (t > len)
-        t = len;
-    strncpy (w, strs->curpos, t);
-    w[t] = '\0';
-    if (!strs->curpos[t]) {
-        ++strs->arg;
-        strs->curpos = va_arg(strs->args, const char *);
-    }
-    else
-        strs->curpos += t;
-    return t;    
-}
-
-/* ap_scan_script_header_err_strs() accepts additional const char* args...
- * each is treated as one or more header lines, and the first non-header
- * character is returned to **arg, **data.  (The first optional arg is
- * counted as 0.)
- */
-AP_DECLARE_NONSTD(int) ap_scan_script_header_err_strs(request_rec *r, 
-                                                      char *buffer, 
-                                                      const char **termch,
-                                                      int *termarg, ...)
-{
-    struct vastrs strs;
-    int res;
-
-    va_start(strs.args, termarg);
-    strs.arg = 0;
-    strs.curpos = va_arg(strs.args, char*);
-    res = ap_scan_script_header_err_core(r, buffer, getsfunc_STRING, (void *) &strs);
-    if (termch)
-        *termch = strs.curpos;
-    if (termarg)
-        *termarg = strs.arg;
-    va_end(strs.args);
-    return res;
-}
diff --git a/server/util_time.c b/server/util_time.c
deleted file mode 100644
index 5b33e3f..0000000
--- a/server/util_time.c
+++ /dev/null
@@ -1,220 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- */
-
-#include "util_time.h"
-
-/* Cache for exploded values of recent timestamps
- */
-
-struct exploded_time_cache_element {
-    apr_int64_t t;
-    apr_time_exp_t xt;
-    apr_int64_t t_validate; /* please see comments in cached_explode() */
-};
-
-/* the "+ 1" is for the current second: */
-#define TIME_CACHE_SIZE (AP_TIME_RECENT_THRESHOLD + 1)
-
-static struct exploded_time_cache_element exploded_cache_localtime[TIME_CACHE_SIZE];
-static struct exploded_time_cache_element exploded_cache_gmt[TIME_CACHE_SIZE];
-
-
-static apr_status_t cached_explode(apr_time_exp_t *xt, apr_time_t t,
-                                   struct exploded_time_cache_element *cache,
-                                   int use_gmt)
-{
-    apr_int64_t seconds = t / APR_USEC_PER_SEC;
-    struct exploded_time_cache_element *cache_element =
-        &(cache[seconds % TIME_CACHE_SIZE]);
-    struct exploded_time_cache_element cache_element_snapshot;
-
-    /* The cache is implemented as a ring buffer.  Each second,
-     * it uses a different element in the buffer.  The timestamp
-     * in the element indicates whether the element contains the
-     * exploded time for the current second (vs the time
-     * 'now - AP_TIME_RECENT_THRESHOLD' seconds ago).  If the
-     * cached value is for the current time, we use it.  Otherwise,
-     * we compute the apr_time_exp_t and store it in this
-     * cache element. Note that the timestamp in the cache
-     * element is updated only after the exploded time.  Thus
-     * if two threads hit this cache element simultaneously
-     * at the start of a new second, they'll both explode the
-     * time and store it.  I.e., the writers will collide, but
-     * they'll be writing the same value.
-     */
-    if (cache_element->t >= seconds) {
-        /* There is an intentional race condition in this design:
-         * in a multithreaded app, one thread might be reading
-         * from this cache_element to resolve a timestamp from
-         * TIME_CACHE_SIZE seconds ago at the same time that
-         * another thread is copying the exploded form of the
-         * current time into the same cache_element.  (I.e., the
-         * first thread might hit this element of the ring buffer
-         * just as the element is being recycled.)  This can
-         * also happen at the start of a new second, if a
-         * reader accesses the cache_element after a writer
-         * has updated cache_element.t but before the writer
-         * has finished updating the whole cache_element.
-         *
-         * Rather than trying to prevent this race condition
-         * with locks, we allow it to happen and then detect
-         * and correct it.  The detection works like this:
-         *   Step 1: Take a "snapshot" of the cache element by
-         *           copying it into a temporary buffer.
-         *   Step 2: Check whether the snapshot contains consistent
-         *           data: the timestamps at the start and end of
-         *           the cache_element should both match the 'seconds'
-         *           value that we computed from the input time.
-         *           If these three don't match, then the snapshot
-         *           shows the cache_element in the middle of an
-         *           update, and its contents are invalid.
-         *   Step 3: If the snapshot is valid, use it.  Otherwise,
-         *           just give up on the cache and explode the
-         *           input time.
-         */
-        memcpy(&cache_element_snapshot, cache_element,
-               sizeof(struct exploded_time_cache_element));
-        if ((seconds != cache_element_snapshot.t) ||
-            (seconds != cache_element_snapshot.t_validate)) {
-            /* Invalid snapshot */
-            if (use_gmt) {
-                return apr_explode_gmt(xt, t);
-            }
-            else {
-                return apr_explode_localtime(xt, t);
-            }
-        }
-        else {
-            /* Valid snapshot */
-            memcpy(xt, &(cache_element_snapshot.xt),
-                   sizeof(apr_time_exp_t));
-        }
-    }
-    else {
-        apr_status_t r;
-        if (use_gmt) {
-            r = apr_explode_gmt(xt, t);
-        }
-        else {
-            r = apr_explode_localtime(xt, t);
-        }
-        if (!APR_STATUS_IS_SUCCESS(r)) {
-            return r;
-        }
-        cache_element->t = seconds;
-        memcpy(&(cache_element->xt), xt, sizeof(apr_time_exp_t));
-        cache_element->t_validate = seconds;
-    }
-    xt->tm_usec = (int)(t % APR_USEC_PER_SEC);
-    return APR_SUCCESS;
-}
-
-
-AP_DECLARE(apr_status_t) ap_explode_recent_localtime(apr_time_exp_t * tm,
-                                                     apr_time_t t)
-{
-    return cached_explode(tm, t, exploded_cache_localtime, 0);
-}
-
-AP_DECLARE(apr_status_t) ap_explode_recent_gmt(apr_time_exp_t * tm,
-                                               apr_time_t t)
-{
-    return cached_explode(tm, t, exploded_cache_gmt, 1);
-}
-
-AP_DECLARE(apr_status_t) ap_recent_ctime(char *date_str, apr_time_t t)
-{
-    /* ### This code is a clone of apr_ctime(), except that it
-     * uses ap_explode_recent_localtime() instead of apr_explode_localtime().
-     */
-    apr_time_exp_t xt;
-    const char *s;
-    int real_year;
-
-    /* example: "Wed Jun 30 21:49:08 1993" */
-    /*           123456789012345678901234  */
-
-    ap_explode_recent_localtime(&xt, t);
-    s = &apr_day_snames[xt.tm_wday][0];
-    *date_str++ = *s++;
-    *date_str++ = *s++;
-    *date_str++ = *s++;
-    *date_str++ = ' ';
-    s = &apr_month_snames[xt.tm_mon][0];
-    *date_str++ = *s++;
-    *date_str++ = *s++;
-    *date_str++ = *s++;
-    *date_str++ = ' ';
-    *date_str++ = xt.tm_mday / 10 + '0';
-    *date_str++ = xt.tm_mday % 10 + '0';
-    *date_str++ = ' ';
-    *date_str++ = xt.tm_hour / 10 + '0';
-    *date_str++ = xt.tm_hour % 10 + '0';
-    *date_str++ = ':';
-    *date_str++ = xt.tm_min / 10 + '0';
-    *date_str++ = xt.tm_min % 10 + '0';
-    *date_str++ = ':';
-    *date_str++ = xt.tm_sec / 10 + '0';
-    *date_str++ = xt.tm_sec % 10 + '0';
-    *date_str++ = ' ';
-    real_year = 1900 + xt.tm_year;
-    *date_str++ = real_year / 1000 + '0';
-    *date_str++ = real_year % 1000 / 100 + '0';
-    *date_str++ = real_year % 100 / 10 + '0';
-    *date_str++ = real_year % 10 + '0';
-    *date_str++ = 0;
-
-    return APR_SUCCESS;
-}
diff --git a/server/util_xml.c b/server/util_xml.c
deleted file mode 100644
index 6b3a5e3..0000000
--- a/server/util_xml.c
+++ /dev/null
@@ -1,137 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-#include "apr_xml.h"
-
-#include "httpd.h"
-#include "http_protocol.h"
-#include "http_log.h"
-#include "http_core.h"
-
-#include "util_xml.h"
-
-
-#define READ_BLOCKSIZE	2048	/* used for reading input blocks */
-
-
-AP_DECLARE(int) ap_xml_parse_input(request_rec * r, apr_xml_doc **pdoc)
-{
-    apr_xml_parser *parser;
-    int result;
-    apr_status_t status;
-    char errbuf[200];
-
-    if ((result = ap_setup_client_block(r, REQUEST_CHUNKED_DECHUNK)) != OK)
-	return result;
-
-    if (r->remaining == 0) {
-	*pdoc = NULL;
-	return OK;
-    }
-
-    parser = apr_xml_parser_create(r->pool);
-
-    if (ap_should_client_block(r)) {
-	long len;
-	char *buffer;
-	apr_size_t total_read = 0;
-	apr_size_t limit_xml_body = ap_get_limit_xml_body(r);
-
-	/* allocate our working buffer */
-	buffer = apr_palloc(r->pool, READ_BLOCKSIZE);
-
-	/* read the body, stuffing it into the parser */
-	while ((len = ap_get_client_block(r, buffer, READ_BLOCKSIZE)) > 0) {
-	    total_read += len;
-	    if (limit_xml_body && total_read > limit_xml_body) {
-		ap_log_rerror(APLOG_MARK, APLOG_ERR | APLOG_NOERRNO, 0, r,
-			      "XML request body is larger than the configured "
-			      "limit of %lu", (unsigned long)limit_xml_body);
-		goto read_error;
-	    }
-
-            status = apr_xml_parser_feed(parser, buffer, len);
-	    if (status)
-		goto parser_error;
-	}
-	if (len == -1) {
-	    /* ap_get_client_block() has logged an error */
-	    goto read_error;
-	}
-    }
-
-    /* tell the parser that we're done */
-    status = apr_xml_parser_done(parser, pdoc);
-    if (status) {
-        ap_log_rerror(APLOG_MARK, APLOG_ERR | APLOG_NOERRNO, 0, r,
-                      "XML parser error (at end). status=%d", status);
-        return HTTP_BAD_REQUEST;
-    }
-
-    return OK;
-
-  parser_error:
-    (void) apr_xml_parser_geterror(parser, errbuf, sizeof(errbuf));
-    ap_log_rerror(APLOG_MARK, APLOG_ERR | APLOG_NOERRNO, 0, r,
-                  "%s", errbuf);
-
-    /* FALLTHRU */
-
-  read_error:
-    /* make sure the parser is terminated */
-    (void) apr_xml_parser_done(parser, NULL);
-
-    /* Apache will supply a default error, plus the error log above. */
-    return HTTP_BAD_REQUEST;
-}
diff --git a/server/vhost.c b/server/vhost.c
deleted file mode 100644
index 07ea8c4..0000000
--- a/server/vhost.c
+++ /dev/null
@@ -1,1049 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-/*
- * http_vhost.c: functions pertaining to virtual host addresses
- *      (configuration and run-time)
- */
-
-#include "apr.h"
-#include "apr_strings.h"
-#include "apr_lib.h"
-
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-#define CORE_PRIVATE
-#include "ap_config.h"
-#include "httpd.h"
-#include "http_config.h"
-#include "http_log.h"
-#include "http_vhost.h"
-#include "http_protocol.h"
-#include "http_core.h"
-
-#if APR_HAVE_ARPA_INET_H
-#include <arpa/inet.h>
-#endif
-
-/*
- * After all the definitions there's an explanation of how it's all put
- * together.
- */
-
-/* meta-list of name-vhosts.  Each server_rec can be in possibly multiple
- * lists of name-vhosts.
- */
-typedef struct name_chain name_chain;
-struct name_chain {
-    name_chain *next;
-    server_addr_rec *sar;       /* the record causing it to be in
-                                 * this chain (needed for port comparisons) */
-    server_rec *server;         /* the server to use on a match */
-};
-
-/* meta-list of ip addresses.  Each server_rec can be in possibly multiple
- * hash chains since it can have multiple ips.
- */
-typedef struct ipaddr_chain ipaddr_chain;
-struct ipaddr_chain {
-    ipaddr_chain *next;
-    server_addr_rec *sar;       /* the record causing it to be in
-                                 * this chain (need for both ip addr and port
-                                 * comparisons) */
-    server_rec *server;         /* the server to use if this matches */
-    name_chain *names;          /* if non-NULL then a list of name-vhosts
-                                 * sharing this address */
-};
-
-/* This defines the size of the hash apr_table_t used for hashing ip addresses
- * of virtual hosts.  It must be a power of two.
- */
-#ifndef IPHASH_TABLE_SIZE
-#define IPHASH_TABLE_SIZE 256
-#endif
-
-/* A (n) bucket hash table, each entry has a pointer to a server rec and
- * a pointer to the other entries in that bucket.  Each individual address,
- * even for virtualhosts with multiple addresses, has an entry in this hash
- * table.  There are extra buckets for _default_, and name-vhost entries.
- *
- * Note that after config time this is constant, so it is thread-safe.
- */
-static ipaddr_chain *iphash_table[IPHASH_TABLE_SIZE];
-
-/* dump out statistics about the hash function */
-/* #define IPHASH_STATISTICS */
-
-/* list of the _default_ servers */
-static ipaddr_chain *default_list;
-
-/* list of the NameVirtualHost addresses */
-static server_addr_rec *name_vhost_list;
-static server_addr_rec **name_vhost_list_tail;
-
-/*
- * How it's used:
- *
- * The ip address determines which chain in iphash_table is interesting, then
- * a comparison is done down that chain to find the first ipaddr_chain whose
- * sar matches the address:port pair.
- *
- * If that ipaddr_chain has names == NULL then you're done, it's an ip-vhost.
- *
- * Otherwise it's a name-vhost list, and the default is the server in the
- * ipaddr_chain record.  We tuck away the ipaddr_chain record in the
- * conn_rec field vhost_lookup_data.  Later on after the headers we get a
- * second chance, and we use the name_chain to figure out what name-vhost
- * matches the headers.
- *
- * If there was no ip address match in the iphash_table then do a lookup
- * in the default_list.
- *
- * How it's put together ... well you should be able to figure that out
- * from how it's used.  Or something like that.
- */
-
-
-/* called at the beginning of the config */
-AP_DECLARE(void) ap_init_vhost_config(apr_pool_t *p)
-{
-    memset(iphash_table, 0, sizeof(iphash_table));
-    default_list = NULL;
-    name_vhost_list = NULL;
-    name_vhost_list_tail = &name_vhost_list;
-}
-
-
-/*
- * Parses a host of the form <address>[:port]
- * paddr is used to create a list in the order of input
- * **paddr is the ->next pointer of the last entry (or s->addrs)
- * *paddr is the variable used to keep track of **paddr between calls
- * port is the default port to assume
- */
-static const char *get_addresses(apr_pool_t *p, const char *w_,
-                                 server_addr_rec ***paddr, 
-                                 apr_port_t default_port)
-{
-    apr_sockaddr_t *my_addr;
-    server_addr_rec *sar;
-    char *w, *host, *scope_id;
-    int wild_port;
-    size_t wlen;
-    apr_port_t port;
-    apr_status_t rv;
-
-    if (*w_ == '\0')
-        return NULL;
-
-    w = apr_pstrdup(p, w_);
-    /* apr_parse_addr_port() doesn't understand ":*" so handle that first. */
-    wlen = strlen(w);                    /* wlen must be > 0 at this point */
-    wild_port = 0;
-    if (w[wlen - 1] == '*') {
-        if (wlen < 2) {
-            wild_port = 1;
-        }
-        else if (w[wlen - 2] == ':') {
-            w[wlen - 2] = '\0';
-            wild_port = 1;
-        }
-    }
-    rv = apr_parse_addr_port(&host, &scope_id, &port, w, p);
-    /* If the string is "80", apr_parse_addr_port() will be happy and set
-     * host to NULL and port to 80, so watch out for that.
-     */
-    if (rv != APR_SUCCESS) {
-        return "The address or port is invalid";
-    }
-    if (!host) {
-        return "Missing address for VirtualHost";
-    }
-    if (scope_id) {
-        return "Scope ids are not supported";
-    }
-    if (!port && !wild_port) {
-        port = default_port;
-    }
-
-    if (strcmp(host, "*") == 0) {
-        rv = apr_sockaddr_info_get(&my_addr, "0.0.0.0", APR_INET, port, 0, p);
-        ap_assert(rv == APR_SUCCESS); /* must be bug or out of storage */
-    }
-    else if (strcasecmp(host, "_default_") == 0
-        || strcmp(host, "255.255.255.255") == 0) {
-        rv = apr_sockaddr_info_get(&my_addr, "255.255.255.255", APR_INET, port, 0, p);
-        ap_assert(rv == APR_SUCCESS); /* must be bug or out of storage */
-    }
-    else {
-        rv = apr_sockaddr_info_get(&my_addr, host, APR_UNSPEC, port, 0, p);
-        if (rv != APR_SUCCESS) {
-            ap_log_error(APLOG_MARK, APLOG_ERR, rv, NULL,
-                "Cannot resolve host name %s --- ignoring!", host);
-            return NULL;
-        }
-    }
-
-    /* XXX Gotta go through *all* addresses for the host name! 
-     * Fix apr_sockaddr_info_get() to save them! */
-
-    sar = apr_pcalloc(p, sizeof(server_addr_rec));
-    **paddr = sar;
-    *paddr = &sar->next;
-    sar->host_addr = my_addr;
-    sar->host_port = port;
-    sar->virthost = host;
-    return NULL;
-}
-
-
-/* parse the <VirtualHost> addresses */
-const char *ap_parse_vhost_addrs(apr_pool_t *p,
-                                 const char *hostname,
-                                 server_rec *s)
-{
-    server_addr_rec **addrs;
-    const char *err;
-
-    /* start the list of addreses */
-    addrs = &s->addrs;
-    while (hostname[0]) {
-        err = get_addresses(p, ap_getword_conf(p, &hostname), &addrs, s->port);
-        if (err) {
-            *addrs = NULL;
-            return err;
-        }
-    }
-    /* terminate the list */
-    *addrs = NULL;
-    if (s->addrs) {
-        if (s->addrs->host_port) {
-            /* override the default port which is inherited from main_server */
-            s->port = s->addrs->host_port;
-        }
-    }
-    return NULL;
-}
-
-
-const char *ap_set_name_virtual_host(cmd_parms *cmd, void *dummy,
-                                     const char *arg)
-{
-    /* use whatever port the main server has at this point */
-    return get_addresses(cmd->pool, arg, &name_vhost_list_tail,
-                         cmd->server->port);
-}
-
-
-/* hash apr_table_t statistics, keep this in here for the beta period so
- * we can find out if the hash function is ok
- */
-#ifdef IPHASH_STATISTICS
-static int iphash_compare(const void *a, const void *b)
-{
-    return (*(const int *) b - *(const int *) a);
-}
-
-
-static void dump_iphash_statistics(server_rec *main_s)
-{
-    unsigned count[IPHASH_TABLE_SIZE];
-    int i;
-    ipaddr_chain *src;
-    unsigned total;
-    char buf[HUGE_STRING_LEN];
-    char *p;
-
-    total = 0;
-    for (i = 0; i < IPHASH_TABLE_SIZE; ++i) {
-        count[i] = 0;
-        for (src = iphash_table[i]; src; src = src->next) {
-            ++count[i];
-            if (i < IPHASH_TABLE_SIZE) {
-                /* don't count the slop buckets in the total */
-                ++total;
-            }
-        }
-    }
-    qsort(count, IPHASH_TABLE_SIZE, sizeof(count[0]), iphash_compare);
-    p = buf + apr_snprintf(buf, sizeof(buf),
-                           "iphash: total hashed = %u, avg chain = %u, "
-                           "chain lengths (count x len):",
-                           total, total / IPHASH_TABLE_SIZE);
-    total = 1;
-    for (i = 1; i < IPHASH_TABLE_SIZE; ++i) {
-        if (count[i - 1] != count[i]) {
-            p += apr_snprintf(p, sizeof(buf) - (p - buf), " %ux%u",
-                              total, count[i - 1]);
-            total = 1;
-        }
-        else {
-            ++total;
-        }
-    }
-    p += apr_snprintf(p, sizeof(buf) - (p - buf), " %ux%u",
-                      total, count[IPHASH_TABLE_SIZE - 1]);
-    ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_DEBUG, main_s, buf);
-}
-#endif
-
-
-/* This hashing function is designed to get good distribution in the cases
- * where the server is handling entire "networks" of servers.  i.e. a
- * whack of /24s.  This is probably the most common configuration for
- * ISPs with large virtual servers.
- *
- * NOTE: This function is symmetric (i.e. collapses all 4 octets
- * into one), so machine byte order (big/little endianness) does not matter.
- *
- * Hash function provided by David Hankins.
- */
-static APR_INLINE unsigned hash_inaddr(unsigned key)
-{
-    key ^= (key >> 16);
-    return ((key >> 8) ^ key) % IPHASH_TABLE_SIZE;
-}
-
-static APR_INLINE unsigned hash_addr(struct apr_sockaddr_t *sa)
-{
-    unsigned key;
-
-    /* The key is the last four bytes of the IP address.
-     * For IPv4, this is the entire address, as always.
-     * For IPv6, this is usually part of the MAC address.
-     */
-    key = *(unsigned *)((char *)sa->ipaddr_ptr + sa->ipaddr_len - 4);
-    return hash_inaddr(key);
-}
-
-static ipaddr_chain *new_ipaddr_chain(apr_pool_t *p,
-                                      server_rec *s, server_addr_rec *sar)
-{
-    ipaddr_chain *new;
-
-    new = apr_palloc(p, sizeof(*new));
-    new->names = NULL;
-    new->server = s;
-    new->sar = sar;
-    new->next = NULL;
-    return new;
-}
-
-
-static name_chain *new_name_chain(apr_pool_t *p,
-                                  server_rec *s, server_addr_rec *sar)
-{
-    name_chain *new;
-
-    new = apr_palloc(p, sizeof(*new));
-    new->server = s;
-    new->sar = sar;
-    new->next = NULL;
-    return new;
-}
-
-
-static APR_INLINE ipaddr_chain *find_ipaddr(apr_sockaddr_t *sa)
-{
-    unsigned bucket;
-    ipaddr_chain *trav;
-
-    /* scan the hash apr_table_t for an exact match first */
-    bucket = hash_addr(sa);
-    for (trav = iphash_table[bucket]; trav; trav = trav->next) {
-        server_addr_rec *sar = trav->sar;
-        apr_sockaddr_t *cur = sar->host_addr;
-
-        if (cur->port == 0 || sa->port == 0 || cur->port == sa->port) {
-            if (apr_sockaddr_equal(cur, sa)) {
-                return trav;
-            }
-        }    
-    }
-    return NULL;
-}
-
-static ipaddr_chain *find_default_server(apr_port_t port)
-{
-    server_addr_rec *sar;
-    ipaddr_chain *trav;
-
-    for (trav = default_list; trav; trav = trav->next) {
-        sar = trav->sar;
-        if (sar->host_port == 0 || sar->host_port == port) {
-            /* match! */
-            return trav;
-        }
-    }
-    return NULL;
-}
-
-static void dump_a_vhost(apr_file_t *f, ipaddr_chain *ic)
-{
-    name_chain *nc;
-    int len;
-    char buf[MAX_STRING_LEN];
-    apr_sockaddr_t *ha = ic->sar->host_addr;
-
-    if (ha->family == APR_INET &&
-        ha->sa.sin.sin_addr.s_addr == DEFAULT_VHOST_ADDR) {
-        len = apr_snprintf(buf, sizeof(buf), "_default_:%u",
-                           ic->sar->host_port);
-    }
-    else if (ha->family == APR_INET &&
-             ha->sa.sin.sin_addr.s_addr == INADDR_ANY) {
-        len = apr_snprintf(buf, sizeof(buf), "*:%u",
-                           ic->sar->host_port);
-    }
-    else {
-        len = apr_snprintf(buf, sizeof(buf), "%pI", ha);
-    }
-    if (ic->sar->host_port == 0) {
-        buf[len-1] = '*';
-    }
-    if (ic->names == NULL) {
-        apr_file_printf(f, "%-22s %s (%s:%u)\n", buf,
-                        ic->server->server_hostname,
-                        ic->server->defn_name, ic->server->defn_line_number);
-        return;
-    }
-    apr_file_printf(f, "%-22s is a NameVirtualHost\n"
-                    "%8s default server %s (%s:%u)\n",
-                    buf, "", ic->server->server_hostname,
-                    ic->server->defn_name, ic->server->defn_line_number);
-    for (nc = ic->names; nc; nc = nc->next) {
-        if (nc->sar->host_port) {
-            apr_file_printf(f, "%8s port %u ", "", nc->sar->host_port);
-        }
-        else {
-            apr_file_printf(f, "%8s port * ", "");
-        }
-        apr_file_printf(f, "namevhost %s (%s:%u)\n",
-                        nc->server->server_hostname,
-                        nc->server->defn_name, nc->server->defn_line_number);
-    }
-}
-
-static void dump_vhost_config(apr_file_t *f)
-{
-    ipaddr_chain *ic;
-    int i;
-
-    apr_file_printf(f, "VirtualHost configuration:\n");
-    for (i = 0; i < IPHASH_TABLE_SIZE; ++i) {
-        for (ic = iphash_table[i]; ic; ic = ic->next) {
-            dump_a_vhost(f, ic);
-        }
-    }
-    if (default_list) {
-        apr_file_printf(f, "wildcard NameVirtualHosts and _default_ servers:\n");
-        for (ic = default_list; ic; ic = ic->next) {
-            dump_a_vhost(f, ic);
-        }
-    }
-}
-
-/*
- * Two helper functions for ap_fini_vhost_config()
- */
-static int add_name_vhost_config(apr_pool_t *p, server_rec *main_s,
-                                 server_rec *s, server_addr_rec *sar,
-                                 ipaddr_chain *ic)
-{
-    /* the first time we encounter a NameVirtualHost address
-     * ic->server will be NULL, on subsequent encounters
-     * ic->names will be non-NULL.
-     */
-    if (ic->names || ic->server == NULL) {
-        name_chain *nc = new_name_chain(p, s, sar);
-        nc->next = ic->names;
-        ic->names = nc;
-        ic->server = s;
-        if (sar->host_port != ic->sar->host_port) {
-            /* one of the two is a * port, the other isn't */
-            ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, main_s,
-                         "VirtualHost %s:%u -- mixing * "
-                         "ports and non-* ports with "
-                         "a NameVirtualHost address is not supported,"
-                         " proceeding with undefined results",
-                         sar->virthost, sar->host_port);
-        }
-        return 1;
-    }
-    else {
-        /* IP-based vhosts are handled by the caller */
-        return 0;
-    }
-}
-
-static void remove_unused_name_vhosts(server_rec *main_s, ipaddr_chain **pic)
-{
-    while (*pic) {
-        ipaddr_chain *ic = *pic;
-        
-        if (ic->server == NULL) {
-            ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_WARNING, 0, main_s,
-                         "NameVirtualHost %s:%u has no VirtualHosts",
-                         ic->sar->virthost, ic->sar->host_port);
-            *pic = ic->next;
-        }
-        else if (ic->names == NULL) {
-            /* if server != NULL and names == NULL then we're done
-             * looking at NameVirtualHosts
-             */
-            break;
-        }
-        else {
-            pic = &ic->next;
-        }
-    }
-}
-
-/* compile the tables and such we need to do the run-time vhost lookups */
-AP_DECLARE(void) ap_fini_vhost_config(apr_pool_t *p, server_rec *main_s)
-{
-    server_addr_rec *sar;
-    int has_default_vhost_addr;
-    server_rec *s;
-    int i;
-    ipaddr_chain **iphash_table_tail[IPHASH_TABLE_SIZE];
-
-    /* terminate the name_vhost list */
-    *name_vhost_list_tail = NULL;
-
-    /* Main host first */
-    s = main_s;
-
-    if (!s->server_hostname) {
-        s->server_hostname = ap_get_local_host(p);
-    }
-
-    /* initialize the tails */
-    for (i = 0; i < IPHASH_TABLE_SIZE; ++i) {
-        iphash_table_tail[i] = &iphash_table[i];
-    }
-
-    /* The first things to go into the hash apr_table_t are the NameVirtualHosts
-     * Since name_vhost_list is in the same order that the directives
-     * occured in the config file, we'll copy it in that order.
-     */
-    for (sar = name_vhost_list; sar; sar = sar->next) {
-        char inaddr_any[16] = {0}; /* big enough to handle IPv4 or IPv6 */
-        unsigned bucket = hash_addr(sar->host_addr);
-        ipaddr_chain *ic = new_ipaddr_chain(p, NULL, sar);
-
-        if (memcmp(sar->host_addr->ipaddr_ptr, inaddr_any, 
-                   sar->host_addr->ipaddr_len)) { /* not IN[6]ADDR_ANY */
-            *iphash_table_tail[bucket] = ic;
-            iphash_table_tail[bucket] = &ic->next;
-        }
-        else {
-            /* A wildcard NameVirtualHost goes on the default_list so
-             * that it can catch incoming requests on any address.
-             */
-            ic->next = default_list;
-            default_list = ic;
-        }
-        /* Notice that what we've done is insert an ipaddr_chain with
-         * both server and names NULL. This fact is used to spot name-
-         * based vhosts in add_name_vhost_config().
-         */
-    }
-
-    /* The next things to go into the hash apr_table_t are the virtual hosts
-     * themselves.  They're listed off of main_s->next in the reverse
-     * order they occured in the config file, so we insert them at
-     * the iphash_table_tail but don't advance the tail.
-     */
-
-    for (s = main_s->next; s; s = s->next) {
-        has_default_vhost_addr = 0;
-        for (sar = s->addrs; sar; sar = sar->next) {
-            ipaddr_chain *ic;
-            char inaddr_any[16] = {0}; /* big enough to handle IPv4 or IPv6 */
-
-            if ((sar->host_addr->family == AF_INET &&
-                 sar->host_addr->sa.sin.sin_addr.s_addr == DEFAULT_VHOST_ADDR)
-                || !memcmp(sar->host_addr->ipaddr_ptr, inaddr_any, sar->host_addr->ipaddr_len)) {
-                ic = find_default_server(sar->host_port);
-                if (!ic || !add_name_vhost_config(p, main_s, s, sar, ic)) {
-                    if (ic && ic->sar->host_port != 0) {
-                        ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_WARNING,
-                                     0, main_s, "_default_ VirtualHost "
-                                     "overlap on port %u, the first has "
-                                     "precedence", sar->host_port);
-                    }
-                    ic = new_ipaddr_chain(p, s, sar);
-                    ic->next = default_list;
-                    default_list = ic;
-                }
-                has_default_vhost_addr = 1;
-            }
-            else {
-                /* see if it matches something we've already got */
-                ic = find_ipaddr(sar->host_addr);
-
-                if (!ic) {
-                    unsigned bucket = hash_addr(sar->host_addr);
-
-                    ic = new_ipaddr_chain(p, s, sar);
-                    ic->next = *iphash_table_tail[bucket];
-                    *iphash_table_tail[bucket] = ic;
-                }
-                else if (!add_name_vhost_config(p, main_s, s, sar, ic)) {
-                    ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_WARNING,
-                                 0, main_s, "VirtualHost %s:%u overlaps "
-                                 "with VirtualHost %s:%u, the first has "
-                                 "precedence, perhaps you need a "
-                                 "NameVirtualHost directive",
-                                 sar->virthost, sar->host_port,
-                                 ic->sar->virthost, ic->sar->host_port);
-                    ic->sar = sar;
-                    ic->server = s;
-                }
-            }
-        }
-
-        /* Ok now we want to set up a server_hostname if the user was
-         * silly enough to forget one.
-         * XXX: This is silly we should just crash and burn.
-         */
-        if (!s->server_hostname) {
-            if (has_default_vhost_addr) {
-                s->server_hostname = main_s->server_hostname;
-            }
-            else if (!s->addrs) {
-                /* what else can we do?  at this point this vhost has
-                    no configured name, probably because they used
-                    DNS in the VirtualHost statement.  It's disabled
-                    anyhow by the host matching code.  -djg */
-                s->server_hostname =
-                    apr_pstrdup(p, "bogus_host_without_forward_dns");
-            }
-            else {
-                apr_status_t rv;
-                char *hostname;
-
-                rv = apr_getnameinfo(&hostname, s->addrs->host_addr, 0);
-                if (rv == APR_SUCCESS) {
-                    s->server_hostname = apr_pstrdup(p, hostname);
-                }
-                else {
-                    /* again, what can we do?  They didn't specify a
-                       ServerName, and their DNS isn't working. -djg */
-                    char *ipaddr_str;
-
-                    apr_sockaddr_ip_get(&ipaddr_str, s->addrs->host_addr);
-                    ap_log_error(APLOG_MARK, APLOG_ERR, rv, main_s,
-                                 "Failed to resolve server name "
-                                 "for %s (check DNS) -- or specify an explicit "
-                                 "ServerName",
-                                 ipaddr_str);
-                    s->server_hostname =
-                        apr_pstrdup(p, "bogus_host_without_reverse_dns");
-                }
-            }
-        }
-    }
-
-    /* now go through and delete any NameVirtualHosts that didn't have any
-     * hosts associated with them.  Lamers.
-     */
-    for (i = 0; i < IPHASH_TABLE_SIZE; ++i) {
-        remove_unused_name_vhosts(main_s, &iphash_table[i]);
-    }
-    remove_unused_name_vhosts(main_s, &default_list);
-
-#ifdef IPHASH_STATISTICS
-    dump_iphash_statistics(main_s);
-#endif
-    if (ap_exists_config_define("DUMP_VHOSTS")) {
-        apr_file_t *thefile = NULL;
-        apr_file_open_stderr(&thefile, p);
-        dump_vhost_config(thefile);
-    }
-}
-
-
-/*****************************************************************************
- * run-time vhost matching functions
- */
-
-/* Lowercase and remove any trailing dot and/or :port from the hostname,
- * and check that it is sane.
- *
- * In most configurations the exact syntax of the hostname isn't
- * important so strict sanity checking isn't necessary. However, in
- * mass hosting setups (using mod_vhost_alias or mod_rewrite) where
- * the hostname is interpolated into the filename, we need to be sure
- * that the interpolation doesn't expose parts of the filesystem.
- * We don't do strict RFC 952 / RFC 1123 syntax checking in order
- * to support iDNS and people who erroneously use underscores.
- * Instead we just check for filesystem metacharacters: directory
- * separators / and \ and sequences of more than one dot.
- */
-static void fix_hostname(request_rec *r)
-{
-    char *host, *scope_id;
-    char *dst;
-    apr_port_t port;
-    apr_status_t rv;
-
-    rv = apr_parse_addr_port(&host, &scope_id, &port, r->hostname, r->pool);
-    if (rv != APR_SUCCESS || scope_id) {
-        goto bad;
-    }
-
-    if (!host && port) {
-        /* silly looking host ("Host: 123") but that isn't our job
-         * here to judge; apr_parse_addr_port() would think we had a port
-         * but no address
-         */
-        host = apr_psprintf(r->pool, "%d", (int)port);
-    }
-    else if (port) {
-        /* Don't throw the Host: header's port number away:
-	   save it in parsed_uri -- ap_get_server_port() needs it! */
-        /* @@@ XXX there should be a better way to pass the port.
-	 *         Like r->hostname, there should be a r->portno
-	 */
-        r->parsed_uri.port = port;
-	r->parsed_uri.port_str = apr_psprintf(r->pool, "%d", (int)port);
-    }
-
-    /* if the hostname is an IPv6 numeric address string, it was validated 
-     * already; otherwise, further validation is needed 
-     */
-    if (r->hostname[0] != '[') {
-        for (dst = host; *dst; dst++) {
-            if (*dst == '.') {
-                if (*(dst + 1) == '.') {
-                    goto bad;
-                }
-            }
-            else if (*dst == '/' || *dst == '\\') {
-                goto bad;
-            }
-        }
-        /* strip trailing gubbins */
-        if (dst > host && dst[-1] == '.') {
-            dst[-1] = '\0';
-        }
-    }
-    r->hostname = host;
-    return;
-
-bad:
-    r->status = HTTP_BAD_REQUEST;
-    ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
-                  "Client sent malformed Host header");
-    return;
-}
-
-
-/* return 1 if host matches ServerName or ServerAliases */
-static int matches_aliases(server_rec *s, const char *host)
-{
-    int i;
-    apr_array_header_t *names;
-
-    /* match ServerName */
-    if (!strcasecmp(host, s->server_hostname)) {
-        return 1;
-    }
-
-    /* search all the aliases from ServerAlias directive */
-    names = s->names;
-    if (names) {
-        char **name = (char **) names->elts;
-        for (i = 0; i < names->nelts; ++i) {
-            if(!name[i]) continue;
-            if (!strcasecmp(host, name[i]))
-                return 1;
-        }
-    }
-    names = s->wild_names;
-    if (names) {
-        char **name = (char **) names->elts;
-        for (i = 0; i < names->nelts; ++i) {
-            if(!name[i]) continue;
-            if (!ap_strcasecmp_match(host, name[i]))
-                return 1;
-        }
-    }
-    return 0;
-}
-
-
-/* Suppose a request came in on the same socket as this r, and included
- * a header "Host: host:port", would it map to r->server?  It's more
- * than just that though.  When we do the normal matches for each request
- * we don't even bother considering Host: etc on non-namevirtualhosts,
- * we just call it a match.  But here we require the host:port to match
- * the ServerName and/or ServerAliases.
- */
-AP_DECLARE(int) ap_matches_request_vhost(request_rec *r, const char *host,
-                                         apr_port_t port)
-{
-    server_rec *s;
-    server_addr_rec *sar;
-
-    s = r->server;
-
-    /* search all the <VirtualHost> values */
-    /* XXX: If this is a NameVirtualHost then we may not be doing the Right Thing
-     * consider: 
-     *
-     *     NameVirtualHost 10.1.1.1
-     *     <VirtualHost 10.1.1.1>
-     *     ServerName v1
-     *     </VirtualHost>
-     *     <VirtualHost 10.1.1.1>
-     *     ServerName v2
-     *     </VirtualHost>
-     *
-     * Suppose r->server is v2, and we're asked to match "10.1.1.1".  We'll say
-     * "yup it's v2", when really it isn't... if a request came in for 10.1.1.1
-     * it would really go to v1.
-     */
-    for (sar = s->addrs; sar; sar = sar->next) {
-        if ((sar->host_port == 0 || port == sar->host_port)
-            && !strcasecmp(host, sar->virthost)) {
-            return 1;
-        }
-    }
-
-    /* the Port has to match now, because the rest don't have ports associated
-     * with them. */
-    if (port != s->port) {
-        return 0;
-    }
-
-    return matches_aliases(s, host);
-}
-
-
-static void check_hostalias(request_rec *r)
-{
-    /*
-     * Even if the request has a Host: header containing a port we ignore
-     * that port.  We always use the physical port of the socket.  There
-     * are a few reasons for this:
-     *
-     * - the default of 80 or 443 for SSL is easier to handle this way
-     * - there is less of a possibility of a security problem
-     * - it simplifies the data structure
-     * - the client may have no idea that a proxy somewhere along the way
-     *   translated the request to another ip:port
-     * - except for the addresses from the VirtualHost line, none of the other
-     *   names we'll match have ports associated with them
-     */
-    const char *host = r->hostname;
-    apr_port_t port;
-    server_rec *s;
-    server_rec *last_s;
-    name_chain *src;
-
-    last_s = NULL;
-
-    apr_sockaddr_port_get(&port, r->connection->local_addr);
-
-    /* Recall that the name_chain is a list of server_addr_recs, some of
-     * whose ports may not match.  Also each server may appear more than
-     * once in the chain -- specifically, it will appear once for each
-     * address from its VirtualHost line which matched.  We only want to
-     * do the full ServerName/ServerAlias comparisons once for each
-     * server, fortunately we know that all the VirtualHost addresses for
-     * a single server are adjacent to each other.
-     */
-
-    for (src = r->connection->vhost_lookup_data; src; src = src->next) {
-        server_addr_rec *sar;
-
-        /* We only consider addresses on the name_chain which have a matching
-         * port
-         */
-        sar = src->sar;
-        if (sar->host_port != 0 && port != sar->host_port) {
-            continue;
-        }
-
-        s = src->server;
-
-        /* does it match the virthost from the sar? */
-        if (!strcasecmp(host, sar->virthost)) {
-            goto found;
-        }
-
-        if (s == last_s) {
-            /* we've already done ServerName and ServerAlias checks for this
-             * vhost
-             */
-            continue;
-        }
-        last_s = s;
-
-        if (matches_aliases(s, host)) {
-            goto found;
-        }
-    }
-    return;
-
-found:
-    /* s is the first matching server, we're done */
-    r->server = s;
-}
-
-
-static void check_serverpath(request_rec *r)
-{
-    server_rec *s;
-    server_rec *last_s;
-    name_chain *src;
-    apr_port_t port;
-
-    apr_sockaddr_port_get(&port, r->connection->local_addr);
-
-    /*
-     * This is in conjunction with the ServerPath code in http_core, so we
-     * get the right host attached to a non- Host-sending request.
-     *
-     * See the comment in check_hostalias about how each vhost can be
-     * listed multiple times.
-     */
-
-    last_s = NULL;
-    for (src = r->connection->vhost_lookup_data; src; src = src->next) {
-        /* We only consider addresses on the name_chain which have a matching
-         * port
-         */
-        if (src->sar->host_port != 0 && port != src->sar->host_port) {
-            continue;
-        }
-
-        s = src->server;
-        if (s == last_s) {
-            continue;
-        }
-        last_s = s;
-
-        if (s->path && !strncmp(r->uri, s->path, s->pathlen) &&
-            (s->path[s->pathlen - 1] == '/' ||
-             r->uri[s->pathlen] == '/' ||
-             r->uri[s->pathlen] == '\0')) {
-            r->server = s;
-            return;
-        }
-    }
-}
-
-
-AP_DECLARE(void) ap_update_vhost_from_headers(request_rec *r)
-{
-    /* must set this for HTTP/1.1 support */
-    if (r->hostname || (r->hostname = apr_table_get(r->headers_in, "Host"))) {
-        fix_hostname(r);
-        if (r->status != HTTP_OK)
-            return;
-    }
-    /* check if we tucked away a name_chain */
-    if (r->connection->vhost_lookup_data) {
-        if (r->hostname)
-            check_hostalias(r);
-        else
-            check_serverpath(r);
-    }
-}
-
-
-/* Called for a new connection which has a known local_addr.  Note that the
- * new connection is assumed to have conn->server == main server.
- */
-AP_DECLARE(void) ap_update_vhost_given_ip(conn_rec *conn)
-{
-    ipaddr_chain *trav;
-    apr_port_t port;
-
-    /* scan the hash apr_table_t for an exact match first */
-    trav = find_ipaddr(conn->local_addr);
-
-    if (trav) {
-        /* save the name_chain for later in case this is a name-vhost */
-        conn->vhost_lookup_data = trav->names;
-        conn->base_server = trav->server;
-        return;
-    }
-
-    /* maybe there's a default server or wildcard name-based vhost
-     * matching this port
-     */
-    apr_sockaddr_port_get(&port, conn->local_addr);
-
-    trav = find_default_server(port);
-    if (trav) {
-        conn->vhost_lookup_data = trav->names;
-        conn->base_server = trav->server;
-        return;
-    }
-
-    /* otherwise we're stuck with just the main server
-     * and no name-based vhosts
-     */
-    conn->vhost_lookup_data = NULL;
-}
diff --git a/srclib/.cvsignore b/srclib/.cvsignore
deleted file mode 100644
index 78a5a12..0000000
--- a/srclib/.cvsignore
+++ /dev/null
@@ -1,4 +0,0 @@
-Makefile
-pth
-.deps
-openssl
diff --git a/srclib/Makefile.in b/srclib/Makefile.in
deleted file mode 100644
index 379ade4..0000000
--- a/srclib/Makefile.in
+++ /dev/null
@@ -1,6 +0,0 @@
-
-SUBDIRS = pcre
-BUILD_SUBDIRS = apr apr-util
-CLEAN_SUBDIRS = apr-util apr
-
-include $(top_builddir)/build/rules.mk
diff --git a/srclib/pcre/.cvsignore b/srclib/pcre/.cvsignore
deleted file mode 100644
index 2720bb2..0000000
--- a/srclib/pcre/.cvsignore
+++ /dev/null
@@ -1,24 +0,0 @@
-*.la
-*.lo
-.libs
-Makefile
-chartables.c
-config.h
-config.log
-config.status
-configure
-dftables
-dftables.exe
-Debug
-Release
-libtool
-pcre-config
-pcretest
-pgrep
-LibD
-LibR
-.deps
-pcre.h
-*.plg
-*.dep
-*.mak
diff --git a/srclib/pcre/AUTHORS b/srclib/pcre/AUTHORS
deleted file mode 100644
index bfe1b5d..0000000
--- a/srclib/pcre/AUTHORS
+++ /dev/null
@@ -1,6 +0,0 @@
-Written by: Philip Hazel <ph10@cam.ac.uk>
-
-University of Cambridge Computing Service,
-Cambridge, England. Phone: +44 1223 334714.
-
-Copyright (c) 1997-2000 University of Cambridge
diff --git a/srclib/pcre/COPYING b/srclib/pcre/COPYING
deleted file mode 100644
index f305033..0000000
--- a/srclib/pcre/COPYING
+++ /dev/null
@@ -1,32 +0,0 @@
-PCRE LICENCE
-------------
-
-PCRE is a library of functions to support regular expressions whose syntax
-and semantics are as close as possible to those of the Perl 5 language.
-
-Written by: Philip Hazel <ph10@cam.ac.uk>
-
-University of Cambridge Computing Service,
-Cambridge, England. Phone: +44 1223 334714.
-
-Copyright (c) 1997-2000 University of Cambridge
-
-Permission is granted to anyone to use this software for any purpose on any
-computer system, and to redistribute it freely, subject to the following
-restrictions:
-
-1. This software is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-
-2. The origin of this software must not be misrepresented, either by
-   explicit claim or by omission.
-
-3. Altered versions must be plainly marked as such, and must not be
-   misrepresented as being the original software.
-
-4. If PCRE is embedded in any software that is released under the GNU
-   General Purpose Licence (GPL), then the terms of that licence shall
-   supersede any condition above with which it is incompatible.
-
-End
diff --git a/srclib/pcre/ChangeLog b/srclib/pcre/ChangeLog
deleted file mode 100644
index 5bedd53..0000000
--- a/srclib/pcre/ChangeLog
+++ /dev/null
@@ -1,615 +0,0 @@
-ChangeLog for PCRE
-------------------
-
-
-Version 3.2 12-May-00
----------------------
-
-This is purely a bug fixing release.
-
-1. If the pattern /((Z)+|A)*/ was matched agained ZABCDEFG it matched Z instead
-of ZA. This was just one example of several cases that could provoke this bug,
-which was introduced by change 9 of version 2.00. The code for breaking
-infinite loops after an iteration that matches an empty string was't working
-correctly.
-
-2. The pcretest program was not imitating Perl correctly for the pattern /a*/g
-when matched against abbab (for example). After matching an empty string, it
-wasn't forcing anchoring when setting PCRE_NOTEMPTY for the next attempt; this
-caused it to match further down the string than it should.
-
-3. The code contained an inclusion of sys/types.h. It isn't clear why this
-was there because it doesn't seem to be needed, and it causes trouble on some
-systems, as it is not a Standard C header. It has been removed.
-
-4. Made 4 silly changes to the source to avoid stupid compiler warnings that
-were reported on the Macintosh. The changes were from
-
-  while ((c = *(++ptr)) != 0 && c != '\n');
-to
-  while ((c = *(++ptr)) != 0 && c != '\n') ;
-
-Totally extraordinary, but if that's what it takes...
-
-5. PCRE is being used in one environment where neither memmove() nor bcopy() is
-available. Added HAVE_BCOPY and an autoconf test for it; if neither
-HAVE_MEMMOVE nor HAVE_BCOPY is set, use a built-in emulation function which
-assumes the way PCRE uses memmove() (always moving upwards).
-
-6. PCRE is being used in one environment where strchr() is not available. There
-was only one use in pcre.c, and writing it out to avoid strchr() probably gives
-faster code anyway.
-
-
-Version 3.1 09-Feb-00
----------------------
-
-The only change in this release is the fixing of some bugs in Makefile.in for
-the "install" target:
-
-(1) It was failing to install pcreposix.h.
-
-(2) It was overwriting the pcre.3 man page with the pcreposix.3 man page.
-
-
-Version 3.0 01-Feb-00
----------------------
-
-1. Add support for the /+ modifier to perltest (to output $` like it does in
-pcretest).
-
-2. Add support for the /g modifier to perltest.
-
-3. Fix pcretest so that it behaves even more like Perl for /g when the pattern
-matches null strings.
-
-4. Fix perltest so that it doesn't do unwanted things when fed an empty
-pattern. Perl treats empty patterns specially - it reuses the most recent
-pattern, which is not what we want. Replace // by /(?#)/ in order to avoid this
-effect.
-
-5. The POSIX interface was broken in that it was just handing over the POSIX
-captured string vector to pcre_exec(), but (since release 2.00) PCRE has
-required a bigger vector, with some working space on the end. This means that
-the POSIX wrapper now has to get and free some memory, and copy the results.
-
-6. Added some simple autoconf support, placing the test data and the
-documentation in separate directories, re-organizing some of the
-information files, and making it build pcre-config (a GNU standard). Also added
-libtool support for building PCRE as a shared library, which is now the
-default.
-
-7. Got rid of the leading zero in the definition of PCRE_MINOR because 08 and
-09 are not valid octal constants. Single digits will be used for minor values
-less than 10.
-
-8. Defined REG_EXTENDED and REG_NOSUB as zero in the POSIX header, so that
-existing programs that set these in the POSIX interface can use PCRE without
-modification.
-
-9. Added a new function, pcre_fullinfo() with an extensible interface. It can
-return all that pcre_info() returns, plus additional data. The pcre_info()
-function is retained for compatibility, but is considered to be obsolete.
-
-10. Added experimental recursion feature (?R) to handle one common case that
-Perl 5.6 will be able to do with (?p{...}).
-
-11. Added support for POSIX character classes like [:alpha:], which Perl is
-adopting.
-
-
-Version 2.08 31-Aug-99
-----------------------
-
-1. When startoffset was not zero and the pattern began with ".*", PCRE was not
-trying to match at the startoffset position, but instead was moving forward to
-the next newline as if a previous match had failed.
-
-2. pcretest was not making use of PCRE_NOTEMPTY when repeating for /g and /G,
-and could get into a loop if a null string was matched other than at the start
-of the subject.
-
-3. Added definitions of PCRE_MAJOR and PCRE_MINOR to pcre.h so the version can
-be distinguished at compile time, and for completeness also added PCRE_DATE.
-
-5. Added Paul Sokolovsky's minor changes to make it easy to compile a Win32 DLL
-in GnuWin32 environments.
-
-
-Version 2.07 29-Jul-99
-----------------------
-
-1. The documentation is now supplied in plain text form and HTML as well as in
-the form of man page sources.
-
-2. C++ compilers don't like assigning (void *) values to other pointer types.
-In particular this affects malloc(). Although there is no problem in Standard
-C, I've put in casts to keep C++ compilers happy.
-
-3. Typo on pcretest.c; a cast of (unsigned char *) in the POSIX regexec() call
-should be (const char *).
-
-4. If NOPOSIX is defined, pcretest.c compiles without POSIX support. This may
-be useful for non-Unix systems who don't want to bother with the POSIX stuff.
-However, I haven't made this a standard facility. The documentation doesn't
-mention it, and the Makefile doesn't support it.
-
-5. The Makefile now contains an "install" target, with editable destinations at
-the top of the file. The pcretest program is not installed.
-
-6. pgrep -V now gives the PCRE version number and date.
-
-7. Fixed bug: a zero repetition after a literal string (e.g. /abcde{0}/) was
-causing the entire string to be ignored, instead of just the last character.
-
-8. If a pattern like /"([^\\"]+|\\.)*"/ is applied in the normal way to a
-non-matching string, it can take a very, very long time, even for strings of
-quite modest length, because of the nested recursion. PCRE now does better in
-some of these cases. It does this by remembering the last required literal
-character in the pattern, and pre-searching the subject to ensure it is present
-before running the real match. In other words, it applies a heuristic to detect
-some types of certain failure quickly, and in the above example, if presented
-with a string that has no trailing " it gives "no match" very quickly.
-
-9. A new runtime option PCRE_NOTEMPTY causes null string matches to be ignored;
-other alternatives are tried instead.
-
-
-Version 2.06 09-Jun-99
-----------------------
-
-1. Change pcretest's output for amount of store used to show just the code
-space, because the remainder (the data block) varies in size between 32-bit and
-64-bit systems.
-
-2. Added an extra argument to pcre_exec() to supply an offset in the subject to
-start matching at. This allows lookbehinds to work when searching for multiple
-occurrences in a string.
-
-3. Added additional options to pcretest for testing multiple occurrences:
-
-   /+   outputs the rest of the string that follows a match
-   /g   loops for multiple occurrences, using the new startoffset argument
-   /G   loops for multiple occurrences by passing an incremented pointer
-
-4. PCRE wasn't doing the "first character" optimization for patterns starting
-with \b or \B, though it was doing it for other lookbehind assertions. That is,
-it wasn't noticing that a match for a pattern such as /\bxyz/ has to start with
-the letter 'x'. On long subject strings, this gives a significant speed-up.
-
-
-Version 2.05 21-Apr-99
-----------------------
-
-1. Changed the type of magic_number from int to long int so that it works
-properly on 16-bit systems.
-
-2. Fixed a bug which caused patterns starting with .* not to work correctly
-when the subject string contained newline characters. PCRE was assuming
-anchoring for such patterns in all cases, which is not correct because .* will
-not pass a newline unless PCRE_DOTALL is set. It now assumes anchoring only if
-DOTALL is set at top level; otherwise it knows that patterns starting with .*
-must be retried after every newline in the subject.
-
-
-Version 2.04 18-Feb-99
-----------------------
-
-1. For parenthesized subpatterns with repeats whose minimum was zero, the
-computation of the store needed to hold the pattern was incorrect (too large).
-If such patterns were nested a few deep, this could multiply and become a real
-problem.
-
-2. Added /M option to pcretest to show the memory requirement of a specific
-pattern. Made -m a synonym of -s (which does this globally) for compatibility.
-
-3. Subpatterns of the form (regex){n,m} (i.e. limited maximum) were being
-compiled in such a way that the backtracking after subsequent failure was
-pessimal. Something like (a){0,3} was compiled as (a)?(a)?(a)? instead of
-((a)((a)(a)?)?)? with disastrous performance if the maximum was of any size.
-
-
-Version 2.03 02-Feb-99
-----------------------
-
-1. Fixed typo and small mistake in man page.
-
-2. Added 4th condition (GPL supersedes if conflict) and created separate
-LICENCE file containing the conditions.
-
-3. Updated pcretest so that patterns such as /abc\/def/ work like they do in
-Perl, that is the internal \ allows the delimiter to be included in the
-pattern. Locked out the use of \ as a delimiter. If \ immediately follows
-the final delimiter, add \ to the end of the pattern (to test the error).
-
-4. Added the convenience functions for extracting substrings after a successful
-match. Updated pcretest to make it able to test these functions.
-
-
-Version 2.02 14-Jan-99
-----------------------
-
-1. Initialized the working variables associated with each extraction so that
-their saving and restoring doesn't refer to uninitialized store.
-
-2. Put dummy code into study.c in order to trick the optimizer of the IBM C
-compiler for OS/2 into generating correct code. Apparently IBM isn't going to
-fix the problem.
-
-3. Pcretest: the timing code wasn't using LOOPREPEAT for timing execution
-calls, and wasn't printing the correct value for compiling calls. Increased the
-default value of LOOPREPEAT, and the number of significant figures in the
-times.
-
-4. Changed "/bin/rm" in the Makefile to "-rm" so it works on Windows NT.
-
-5. Renamed "deftables" as "dftables" to get it down to 8 characters, to avoid
-a building problem on Windows NT with a FAT file system.
-
-
-Version 2.01 21-Oct-98
-----------------------
-
-1. Changed the API for pcre_compile() to allow for the provision of a pointer
-to character tables built by pcre_maketables() in the current locale. If NULL
-is passed, the default tables are used.
-
-
-Version 2.00 24-Sep-98
-----------------------
-
-1. Since the (>?) facility is in Perl 5.005, don't require PCRE_EXTRA to enable
-it any more.
-
-2. Allow quantification of (?>) groups, and make it work correctly.
-
-3. The first character computation wasn't working for (?>) groups.
-
-4. Correct the implementation of \Z (it is permitted to match on the \n at the
-end of the subject) and add 5.005's \z, which really does match only at the
-very end of the subject.
-
-5. Remove the \X "cut" facility; Perl doesn't have it, and (?> is neater.
-
-6. Remove the ability to specify CASELESS, MULTILINE, DOTALL, and
-DOLLAR_END_ONLY at runtime, to make it possible to implement the Perl 5.005
-localized options. All options to pcre_study() were also removed.
-
-7. Add other new features from 5.005:
-
-   $(?<=           positive lookbehind
-   $(?<!           negative lookbehind
-   (?imsx-imsx)    added the unsetting capability
-                   such a setting is global if at outer level; local otherwise
-   (?imsx-imsx:)   non-capturing groups with option setting
-   (?(cond)re|re)  conditional pattern matching
-
-   A backreference to itself in a repeated group matches the previous
-   captured string.
-
-8. General tidying up of studying (both automatic and via "study")
-consequential on the addition of new assertions.
-
-9. As in 5.005, unlimited repeated groups that could match an empty substring
-are no longer faulted at compile time. Instead, the loop is forcibly broken at
-runtime if any iteration does actually match an empty substring.
-
-10. Include the RunTest script in the distribution.
-
-11. Added tests from the Perl 5.005_02 distribution. This showed up a few
-discrepancies, some of which were old and were also with respect to 5.004. They
-have now been fixed.
-
-
-Version 1.09 28-Apr-98
-----------------------
-
-1. A negated single character class followed by a quantifier with a minimum
-value of one (e.g.  [^x]{1,6}  ) was not compiled correctly. This could lead to
-program crashes, or just wrong answers. This did not apply to negated classes
-containing more than one character, or to minima other than one.
-
-
-Version 1.08 27-Mar-98
-----------------------
-
-1. Add PCRE_UNGREEDY to invert the greediness of quantifiers.
-
-2. Add (?U) and (?X) to set PCRE_UNGREEDY and PCRE_EXTRA respectively. The
-latter must appear before anything that relies on it in the pattern.
-
-
-Version 1.07 16-Feb-98
-----------------------
-
-1. A pattern such as /((a)*)*/ was not being diagnosed as in error (unlimited
-repeat of a potentially empty string).
-
-
-Version 1.06 23-Jan-98
-----------------------
-
-1. Added Markus Oberhumer's little patches for C++.
-
-2. Literal strings longer than 255 characters were broken.
-
-
-Version 1.05 23-Dec-97
-----------------------
-
-1. Negated character classes containing more than one character were failing if
-PCRE_CASELESS was set at run time.
-
-
-Version 1.04 19-Dec-97
-----------------------
-
-1. Corrected the man page, where some "const" qualifiers had been omitted.
-
-2. Made debugging output print "{0,xxx}" instead of just "{,xxx}" to agree with
-input syntax.
-
-3. Fixed memory leak which occurred when a regex with back references was
-matched with an offsets vector that wasn't big enough. The temporary memory
-that is used in this case wasn't being freed if the match failed.
-
-4. Tidied pcretest to ensure it frees memory that it gets.
-
-5. Temporary memory was being obtained in the case where the passed offsets
-vector was exactly big enough.
-
-6. Corrected definition of offsetof() from change 5 below.
-
-7. I had screwed up change 6 below and broken the rules for the use of
-setjmp(). Now fixed.
-
-
-Version 1.03 18-Dec-97
-----------------------
-
-1. A erroneous regex with a missing opening parenthesis was correctly
-diagnosed, but PCRE attempted to access brastack[-1], which could cause crashes
-on some systems.
-
-2. Replaced offsetof(real_pcre, code) by offsetof(real_pcre, code[0]) because
-it was reported that one broken compiler failed on the former because "code" is
-also an independent variable.
-
-3. The erroneous regex a[]b caused an array overrun reference.
-
-4. A regex ending with a one-character negative class (e.g. /[^k]$/) did not
-fail on data ending with that character. (It was going on too far, and checking
-the next character, typically a binary zero.) This was specific to the
-optimized code for single-character negative classes.
-
-5. Added a contributed patch from the TIN world which does the following:
-
-  + Add an undef for memmove, in case the the system defines a macro for it.
-
-  + Add a definition of offsetof(), in case there isn't one. (I don't know
-    the reason behind this - offsetof() is part of the ANSI standard - but
-    it does no harm).
-
-  + Reduce the ifdef's in pcre.c using macro DPRINTF, thereby eliminating
-    most of the places where whitespace preceded '#'. I have given up and
-    allowed the remaining 2 cases to be at the margin.
-
-  + Rename some variables in pcre to eliminate shadowing. This seems very
-    pedantic, but does no harm, of course.
-
-6. Moved the call to setjmp() into its own function, to get rid of warnings
-from gcc -Wall, and avoided calling it at all unless PCRE_EXTRA is used.
-
-7. Constructs such as \d{8,} were compiling into the equivalent of
-\d{8}\d{0,65527} instead of \d{8}\d* which didn't make much difference to the
-outcome, but in this particular case used more store than had been allocated,
-which caused the bug to be discovered because it threw up an internal error.
-
-8. The debugging code in both pcre and pcretest for outputting the compiled
-form of a regex was going wrong in the case of back references followed by
-curly-bracketed repeats.
-
-
-Version 1.02 12-Dec-97
-----------------------
-
-1. Typos in pcre.3 and comments in the source fixed.
-
-2. Applied a contributed patch to get rid of places where it used to remove
-'const' from variables, and fixed some signed/unsigned and uninitialized
-variable warnings.
-
-3. Added the "runtest" target to Makefile.
-
-4. Set default compiler flag to -O2 rather than just -O.
-
-
-Version 1.01 19-Nov-97
-----------------------
-
-1. PCRE was failing to diagnose unlimited repeat of empty string for patterns
-like /([ab]*)*/, that is, for classes with more than one character in them.
-
-2. Likewise, it wasn't diagnosing patterns with "once-only" subpatterns, such
-as /((?>a*))*/ (a PCRE_EXTRA facility).
-
-
-Version 1.00 18-Nov-97
-----------------------
-
-1. Added compile-time macros to support systems such as SunOS4 which don't have
-memmove() or strerror() but have other things that can be used instead.
-
-2. Arranged that "make clean" removes the executables.
-
-
-Version 0.99 27-Oct-97
-----------------------
-
-1. Fixed bug in code for optimizing classes with only one character. It was
-initializing a 32-byte map regardless, which could cause it to run off the end
-of the memory it had got.
-
-2. Added, conditional on PCRE_EXTRA, the proposed (?>REGEX) construction.
-
-
-Version 0.98 22-Oct-97
-----------------------
-
-1. Fixed bug in code for handling temporary memory usage when there are more
-back references than supplied space in the ovector. This could cause segfaults.
-
-
-Version 0.97 21-Oct-97
-----------------------
-
-1. Added the \X "cut" facility, conditional on PCRE_EXTRA.
-
-2. Optimized negated single characters not to use a bit map.
-
-3. Brought error texts together as macro definitions; clarified some of them;
-fixed one that was wrong - it said "range out of order" when it meant "invalid
-escape sequence".
-
-4. Changed some char * arguments to const char *.
-
-5. Added PCRE_NOTBOL and PCRE_NOTEOL (from POSIX).
-
-6. Added the POSIX-style API wrapper in pcreposix.a and testing facilities in
-pcretest.
-
-
-Version 0.96 16-Oct-97
-----------------------
-
-1. Added a simple "pgrep" utility to the distribution.
-
-2. Fixed an incompatibility with Perl: "{" is now treated as a normal character
-unless it appears in one of the precise forms "{ddd}", "{ddd,}", or "{ddd,ddd}"
-where "ddd" means "one or more decimal digits".
-
-3. Fixed serious bug. If a pattern had a back reference, but the call to
-pcre_exec() didn't supply a large enough ovector to record the related
-identifying subpattern, the match always failed. PCRE now remembers the number
-of the largest back reference, and gets some temporary memory in which to save
-the offsets during matching if necessary, in order to ensure that
-backreferences always work.
-
-4. Increased the compatibility with Perl in a number of ways:
-
-  (a) . no longer matches \n by default; an option PCRE_DOTALL is provided
-      to request this handling. The option can be set at compile or exec time.
-
-  (b) $ matches before a terminating newline by default; an option
-      PCRE_DOLLAR_ENDONLY is provided to override this (but not in multiline
-      mode). The option can be set at compile or exec time.
-
-  (c) The handling of \ followed by a digit other than 0 is now supposed to be
-      the same as Perl's. If the decimal number it represents is less than 10
-      or there aren't that many previous left capturing parentheses, an octal
-      escape is read. Inside a character class, it's always an octal escape,
-      even if it is a single digit.
-
-  (d) An escaped but undefined alphabetic character is taken as a literal,
-      unless PCRE_EXTRA is set. Currently this just reserves the remaining
-      escapes.
-
-  (e) {0} is now permitted. (The previous item is removed from the compiled
-      pattern).
-
-5. Changed all the names of code files so that the basic parts are no longer
-than 10 characters, and abolished the teeny "globals.c" file.
-
-6. Changed the handling of character classes; they are now done with a 32-byte
-bit map always.
-
-7. Added the -d and /D options to pcretest to make it possible to look at the
-internals of compilation without having to recompile pcre.
-
-
-Version 0.95 23-Sep-97
-----------------------
-
-1. Fixed bug in pre-pass concerning escaped "normal" characters such as \x5c or
-\x20 at the start of a run of normal characters. These were being treated as
-real characters, instead of the source characters being re-checked.
-
-
-Version 0.94 18-Sep-97
-----------------------
-
-1. The functions are now thread-safe, with the caveat that the global variables
-containing pointers to malloc() and free() or alternative functions are the
-same for all threads.
-
-2. Get pcre_study() to generate a bitmap of initial characters for non-
-anchored patterns when this is possible, and use it if passed to pcre_exec().
-
-
-Version 0.93 15-Sep-97
-----------------------
-
-1. /(b)|(:+)/ was computing an incorrect first character.
-
-2. Add pcre_study() to the API and the passing of pcre_extra to pcre_exec(),
-but not actually doing anything yet.
-
-3. Treat "-" characters in classes that cannot be part of ranges as literals,
-as Perl does (e.g. [-az] or [az-]).
-
-4. Set the anchored flag if a branch starts with .* or .*? because that tests
-all possible positions.
-
-5. Split up into different modules to avoid including unneeded functions in a
-compiled binary. However, compile and exec are still in one module. The "study"
-function is split off.
-
-6. The character tables are now in a separate module whose source is generated
-by an auxiliary program - but can then be edited by hand if required. There are
-now no calls to isalnum(), isspace(), isdigit(), isxdigit(), tolower() or
-toupper() in the code.
-
-7. Turn the malloc/free funtions variables into pcre_malloc and pcre_free and
-make them global. Abolish the function for setting them, as the caller can now
-set them directly.
-
-
-Version 0.92 11-Sep-97
-----------------------
-
-1. A repeat with a fixed maximum and a minimum of 1 for an ordinary character
-(e.g. /a{1,3}/) was broken (I mis-optimized it).
-
-2. Caseless matching was not working in character classes if the characters in
-the pattern were in upper case.
-
-3. Make ranges like [W-c] work in the same way as Perl for caseless matching.
-
-4. Make PCRE_ANCHORED public and accept as a compile option.
-
-5. Add an options word to pcre_exec() and accept PCRE_ANCHORED and
-PCRE_CASELESS at run time. Add escapes \A and \I to pcretest to cause it to
-pass them.
-
-6. Give an error if bad option bits passed at compile or run time.
-
-7. Add PCRE_MULTILINE at compile and exec time, and (?m) as well. Add \M to
-pcretest to cause it to pass that flag.
-
-8. Add pcre_info(), to get the number of identifying subpatterns, the stored
-options, and the first character, if set.
-
-9. Recognize C+ or C{n,m} where n >= 1 as providing a fixed starting character.
-
-
-Version 0.91 10-Sep-97
-----------------------
-
-1. PCRE was failing to diagnose unlimited repeats of subpatterns that could
-match the empty string as in /(a*)*/. It was looping and ultimately crashing.
-
-2. PCRE was looping on encountering an indefinitely repeated back reference to
-a subpattern that had matched an empty string, e.g. /(a|)\1*/. It now does what
-Perl does - treats the match as successful.
-
-****
diff --git a/srclib/pcre/INSTALL b/srclib/pcre/INSTALL
deleted file mode 100644
index d63a78f..0000000
--- a/srclib/pcre/INSTALL
+++ /dev/null
@@ -1,185 +0,0 @@
-Basic Installation
-==================
-
-   These are generic installation instructions that apply to systems that
-can run the `configure' shell script - Unix systems and any that imitate
-it. They are not specific to PCRE. There are PCRE-specific instructions
-for non-Unix systems in the file NON-UNIX.
-
-   The `configure' shell script attempts to guess correct values for
-various system-dependent variables used during compilation.  It uses
-those values to create a `Makefile' in each directory of the package.
-It may also create one or more `.h' files containing system-dependent
-definitions.  Finally, it creates a shell script `config.status' that
-you can run in the future to recreate the current configuration, a file
-`config.cache' that saves the results of its tests to speed up
-reconfiguring, and a file `config.log' containing compiler output
-(useful mainly for debugging `configure').
-
-   If you need to do unusual things to compile the package, please try
-to figure out how `configure' could check whether to do them, and mail
-diffs or instructions to the address given in the `README' so they can
-be considered for the next release.  If at some point `config.cache'
-contains results you don't want to keep, you may remove or edit it.
-
-   The file `configure.in' is used to create `configure' by a program
-called `autoconf'.  You only need `configure.in' if you want to change
-it or regenerate `configure' using a newer version of `autoconf'.
-
-The simplest way to compile this package is:
-
-  1. `cd' to the directory containing the package's source code and type
-     `./configure' to configure the package for your system.  If you're
-     using `csh' on an old version of System V, you might need to type
-     `sh ./configure' instead to prevent `csh' from trying to execute
-     `configure' itself.
-
-     Running `configure' takes awhile.  While running, it prints some
-     messages telling which features it is checking for.
-
-  2. Type `make' to compile the package.
-
-  3. Optionally, type `make check' to run any self-tests that come with
-     the package.
-
-  4. Type `make install' to install the programs and any data files and
-     documentation.
-
-  5. You can remove the program binaries and object files from the
-     source code directory by typing `make clean'.  To also remove the
-     files that `configure' created (so you can compile the package for
-     a different kind of computer), type `make distclean'.  There is
-     also a `make maintainer-clean' target, but that is intended mainly
-     for the package's developers.  If you use it, you may have to get
-     all sorts of other programs in order to regenerate files that came
-     with the distribution.
-
-Compilers and Options
-=====================
-
-   Some systems require unusual options for compilation or linking that
-the `configure' script does not know about.  You can give `configure'
-initial values for variables by setting them in the environment.  Using
-a Bourne-compatible shell, you can do that on the command line like
-this:
-     CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure
-
-Or on systems that have the `env' program, you can do it like this:
-     env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure
-
-Compiling For Multiple Architectures
-====================================
-
-   You can compile the package for more than one kind of computer at the
-same time, by placing the object files for each architecture in their
-own directory.  To do this, you must use a version of `make' that
-supports the `VPATH' variable, such as GNU `make'.  `cd' to the
-directory where you want the object files and executables to go and run
-the `configure' script.  `configure' automatically checks for the
-source code in the directory that `configure' is in and in `..'.
-
-   If you have to use a `make' that does not supports the `VPATH'
-variable, you have to compile the package for one architecture at a time
-in the source code directory.  After you have installed the package for
-one architecture, use `make distclean' before reconfiguring for another
-architecture.
-
-Installation Names
-==================
-
-   By default, `make install' will install the package's files in
-`/usr/local/bin', `/usr/local/man', etc.  You can specify an
-installation prefix other than `/usr/local' by giving `configure' the
-option `--prefix=PATH'.
-
-   You can specify separate installation prefixes for
-architecture-specific files and architecture-independent files.  If you
-give `configure' the option `--exec-prefix=PATH', the package will use
-PATH as the prefix for installing programs and libraries.
-Documentation and other data files will still use the regular prefix.
-
-   In addition, if you use an unusual directory layout you can give
-options like `--bindir=PATH' to specify different values for particular
-kinds of files.  Run `configure --help' for a list of the directories
-you can set and what kinds of files go in them.
-
-   If the package supports it, you can cause programs to be installed
-with an extra prefix or suffix on their names by giving `configure' the
-option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
-
-Optional Features
-=================
-
-   Some packages pay attention to `--enable-FEATURE' options to
-`configure', where FEATURE indicates an optional part of the package.
-They may also pay attention to `--with-PACKAGE' options, where PACKAGE
-is something like `gnu-as' or `x' (for the X Window System).  The
-`README' should mention any `--enable-' and `--with-' options that the
-package recognizes.
-
-   For packages that use the X Window System, `configure' can usually
-find the X include and library files automatically, but if it doesn't,
-you can use the `configure' options `--x-includes=DIR' and
-`--x-libraries=DIR' to specify their locations.
-
-Specifying the System Type
-==========================
-
-   There may be some features `configure' can not figure out
-automatically, but needs to determine by the type of host the package
-will run on.  Usually `configure' can figure that out, but if it prints
-a message saying it can not guess the host type, give it the
-`--host=TYPE' option.  TYPE can either be a short name for the system
-type, such as `sun4', or a canonical name with three fields:
-     CPU-COMPANY-SYSTEM
-
-See the file `config.sub' for the possible values of each field.  If
-`config.sub' isn't included in this package, then this package doesn't
-need to know the host type.
-
-   If you are building compiler tools for cross-compiling, you can also
-use the `--target=TYPE' option to select the type of system they will
-produce code for and the `--build=TYPE' option to select the type of
-system on which you are compiling the package.
-
-Sharing Defaults
-================
-
-   If you want to set default values for `configure' scripts to share,
-you can create a site shell script called `config.site' that gives
-default values for variables like `CC', `cache_file', and `prefix'.
-`configure' looks for `PREFIX/share/config.site' if it exists, then
-`PREFIX/etc/config.site' if it exists.  Or, you can set the
-`CONFIG_SITE' environment variable to the location of the site script.
-A warning: not all `configure' scripts look for a site script.
-
-Operation Controls
-==================
-
-   `configure' recognizes the following options to control how it
-operates.
-
-`--cache-file=FILE'
-     Use and save the results of the tests in FILE instead of
-     `./config.cache'.  Set FILE to `/dev/null' to disable caching, for
-     debugging `configure'.
-
-`--help'
-     Print a summary of the options to `configure', and exit.
-
-`--quiet'
-`--silent'
-`-q'
-     Do not print messages saying which checks are being made.  To
-     suppress all normal output, redirect it to `/dev/null' (any error
-     messages will still be shown).
-
-`--srcdir=DIR'
-     Look for the package's source code in directory DIR.  Usually
-     `configure' can determine that directory automatically.
-
-`--version'
-     Print the version of Autoconf used to generate the `configure'
-     script, and exit.
-
-`configure' also accepts some other, not widely useful, options.
diff --git a/srclib/pcre/LICENCE b/srclib/pcre/LICENCE
deleted file mode 100644
index 8422bd9..0000000
--- a/srclib/pcre/LICENCE
+++ /dev/null
@@ -1,44 +0,0 @@
-PCRE LICENCE
-------------
-
-PCRE is a library of functions to support regular expressions whose syntax
-and semantics are as close as possible to those of the Perl 5 language.
-
-Written by: Philip Hazel <ph10@cam.ac.uk>
-
-University of Cambridge Computing Service,
-Cambridge, England. Phone: +44 1223 334714.
-
-Copyright (c) 1997-2000 University of Cambridge
-
-Permission is granted to anyone to use this software for any purpose on any
-computer system, and to redistribute it freely, subject to the following
-restrictions:
-
-1. This software is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-
-2. The origin of this software must not be misrepresented, either by
-   explicit claim or by omission. In practice, this means you must put
-   a sentence like this
-
-     Regular expression support is provided by the PCRE library package,
-     which is open source software, copyright by the University of
-     Cambridge.
-
-   somewhere reasonably visible in your documentation and in any relevant
-   files. A reference to the ftp site for the source should also be given
-
-     ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/
-
-   in the documentation.
-
-3. Altered versions must be plainly marked as such, and must not be
-   misrepresented as being the original software.
-
-4. If PCRE is embedded in any software that is released under the GNU
-   General Purpose Licence (GPL), then the terms of that licence shall
-   supersede any condition above with which it is incompatible.
-
-End
diff --git a/srclib/pcre/Makefile.in b/srclib/pcre/Makefile.in
deleted file mode 100644
index 2473872..0000000
--- a/srclib/pcre/Makefile.in
+++ /dev/null
@@ -1,20 +0,0 @@
-LTLIBRARY_NAME = libpcre.la
-LTLIBRARY_SOURCES = maketables.c get.c study.c pcre.c pcreposix.c
-
-CLEAN_TARGETS = dftables chartables.c
-DISTCLEAN_TARGETS = pcre.h pcre-config config.h $(CLEAN_TARGETS)
-
-include $(top_srcdir)/build/ltlib.mk
-
-config.h:
-	touch $@
-
-$(LTLIBRARY_OBJECTS) dftables.lo: config.h
-
-dftables: dftables.lo
-	$(LINK) $(EXTRA_LDFLAGS) dftables.lo $(EXTRA_LIBS)
-
-$(srcdir)/chartables.c: dftables
-	./dftables > $@
-
-pcre.lo: $(srcdir)/chartables.c
diff --git a/srclib/pcre/NEWS b/srclib/pcre/NEWS
deleted file mode 100644
index 4c80bd6..0000000
--- a/srclib/pcre/NEWS
+++ /dev/null
@@ -1,46 +0,0 @@
-News about PCRE releases
-------------------------
-
-Release 3.0 01-Feb-00
----------------------
-
-1. A "configure" script is now used to configure PCRE for Unix systems. It
-builds a Makefile, a config.h file, and the pcre-config script.
-
-2. PCRE is built as a shared library by default.
-
-3. There is support for POSIX classes such as [:alpha:].
-
-5. There is an experimental recursion feature.
-
-----------------------------------------------------------------------------
-          IMPORTANT FOR THOSE UPGRADING FROM VERSIONS BEFORE 2.00
-
-Please note that there has been a change in the API such that a larger
-ovector is required at matching time, to provide some additional workspace.
-The new man page has details. This change was necessary in order to support
-some of the new functionality in Perl 5.005.
-
-          IMPORTANT FOR THOSE UPGRADING FROM VERSION 2.00
-
-Another (I hope this is the last!) change has been made to the API for the
-pcre_compile() function. An additional argument has been added to make it
-possible to pass over a pointer to character tables built in the current
-locale by pcre_maketables(). To use the default tables, this new arguement
-should be passed as NULL.
-
-          IMPORTANT FOR THOSE UPGRADING FROM VERSION 2.05
-
-Yet another (and again I hope this really is the last) change has been made
-to the API for the pcre_exec() function. An additional argument has been
-added to make it possible to start the match other than at the start of the
-subject string. This is important if there are lookbehinds. The new man
-page has the details, but you just want to convert existing programs, all
-you need to do is to stick in a new fifth argument to pcre_exec(), with a
-value of zero. For example, change
-
-  pcre_exec(pattern, extra, subject, length, options, ovec, ovecsize)
-to
-  pcre_exec(pattern, extra, subject, length, 0, options, ovec, ovecsize)
-
-****
diff --git a/srclib/pcre/NON-UNIX-USE b/srclib/pcre/NON-UNIX-USE
deleted file mode 100644
index 09a7432..0000000
--- a/srclib/pcre/NON-UNIX-USE
+++ /dev/null
@@ -1,50 +0,0 @@
-Compiling PCRE on non-Unix systems
-----------------------------------
-
-If you want to compile PCRE for a non-Unix system, note that it consists
-entirely of code written in Standard C, and so should compile successfully
-on any machine with a Standard C compiler and library, using normal compiling
-commands to do the following:
-
-(1) Copy or rename the file config.in as config.h, and change the macros that
-define HAVE_STRERROR and HAVE_MEMMOVE to define them as 1 rather than 0.
-Unfortunately, because of the way Unix autoconf works, the default setting has
-to be 0.
-
-(2) Copy or rename the file pcre.in as pcre.h, and change the macro definitions
-for PCRE_MAJOR, PCRE_MINOR, and PCRE_DATE near its start to the values set in
-configure.in.
-
-(3) Compile dftables.c as a stand-alone program, and then run it with
-the standard output sent to chartables.c. This generates a set of standard
-character tables.
-
-(4) Compile maketables.c, get.c, study.c and pcre.c and link them all
-together into an object library in whichever form your system keeps such
-libraries. This is the pcre library (chartables.c gets included by means of an
-#include directive).
-
-(5) Similarly, compile pcreposix.c and link it as the pcreposix library.
-
-(6) Compile the test program pcretest.c. This needs the functions in the
-pcre and pcreposix libraries when linking.
-
-(7) Run pcretest on the testinput files in the testdata directory, and check
-that the output matches the corresponding testoutput files. You must use the
--i option when checking testinput2.
-
-If you have a system without "configure" but where you can use a Makefile, edit
-Makefile.in to create Makefile, substituting suitable values for the variables
-at the head of the file.
-
-Some help in building a Win32 DLL of PCRE in GnuWin32 environments was
-contributed by Paul.Sokolovsky@technologist.com. These environments are
-Mingw32 (http://www.xraylith.wisc.edu/~khan/software/gnu-win32/) and
-CygWin  (http://sourceware.cygnus.com/cygwin/). Paul comments:
-
-  For CygWin, set CFLAGS=-mno-cygwin, and do 'make dll'. You'll get
-  pcre.dll (containing pcreposix also), libpcre.dll.a, and dynamically
-  linked pgrep and pcretest. If you have /bin/sh, run RunTest (three
-  main test go ok, locale not supported).
-
-****
diff --git a/srclib/pcre/README b/srclib/pcre/README
deleted file mode 100644
index 90aaf4d..0000000
--- a/srclib/pcre/README
+++ /dev/null
@@ -1,239 +0,0 @@
-README file for PCRE (Perl-compatible regular expression library)
------------------------------------------------------------------
-
-The latest release of PCRE is always available from
-
-  ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-xxx.tar.gz
-
-Please read the NEWS file if you are upgrading from a previous release.
-
-
-Building PCRE on a Unix system
-------------------------------
-
-To build PCRE on a Unix system, run the "configure" command in the PCRE
-distribution directory. This is a standard GNU "autoconf" configuration script,
-for which generic instructions are supplied in INSTALL. On many systems just
-running "./configure" is sufficient, but the usual methods of changing standard
-defaults are available. For example
-
-CFLAGS='-O2 -Wall' ./configure --prefix=/opt/local
-
-specifies that the C compiler should be run with the flags '-O2 -Wall' instead
-of the default, and that "make install" should install PCRE under /opt/local
-instead of the default /usr/local. The "configure" script builds thre files:
-
-. Makefile is built by copying Makefile.in and making substitutions.
-. config.h is built by copying config.in and making substitutions.
-. pcre-config is built by copying pcre-config.in and making substitutions.
-
-Once "configure" has run, you can run "make". It builds two libraries called
-libpcre and libpcreposix, a test program called pcretest, and the pgrep
-command. You can use "make install" to copy these, and the public header file
-pcre.h, to appropriate live directories on your system, in the normal way.
-
-Running "make install" also installs the command pcre-config, which can be used
-to recall information about the PCRE configuration and installation. For
-example,
-
-  pcre-config --version
-
-prints the version number, and
-
- pcre-config --libs
-
-outputs information about where the library is installed. This command can be
-included in makefiles for programs that use PCRE, saving the programmer from
-having to remember too many details.
-
-
-Shared libraries on Unix systems
---------------------------------
-
-The default distribution builds PCRE as two shared libraries. This support is
-new and experimental and may not work on all systems. It relies on the
-"libtool" scripts - these are distributed with PCRE. It should build a
-"libtool" script and use this to compile and link shared libraries, which are
-placed in a subdirectory called .libs. The programs pcretest and pgrep are
-built to use these uninstalled libraries by means of wrapper scripts. When you
-use "make install" to install shared libraries, pgrep and pcretest are
-automatically re-built to use the newly installed libraries. However, only
-pgrep is installed, as pcretest is really just a test program.
-
-To build PCRE using static libraries you must use --disable-shared when
-configuring it. For example
-
-./configure --prefix=/usr/gnu --disable-shared
-
-Then run "make" in the usual way.
-
-
-Building on non-Unix systems
-----------------------------
-
-For a non-Unix system, read the comments in the file NON-UNIX-USE. PCRE has
-been compiled on Windows systems and on Macintoshes, but I don't know the
-details because I don't use those systems. It should be straightforward to
-build PCRE on any system that has a Standard C compiler, because it uses only
-Standard C functions.
-
-
-Testing PCRE
-------------
-
-To test PCRE on a Unix system, run the RunTest script in the pcre directory.
-(This can also be run by "make runtest" or "make check".) For other systems,
-see the instruction in NON-UNIX-USE.
-
-The script runs the pcretest test program (which is documented in
-doc/pcretest.txt) on each of the testinput files (in the testdata directory) in
-turn, and compares the output with the contents of the corresponding testoutput
-file. A file called testtry is used to hold the output from pcretest. To run
-pcretest on just one of the test files, give its number as an argument to
-RunTest, for example:
-
-  RunTest 3
-
-The first and third test files can also be fed directly into the perltest
-script to check that Perl gives the same results. The third file requires the
-additional features of release 5.005, which is why it is kept separate from the
-main test input, which needs only Perl 5.004. In the long run, when 5.005 is
-widespread, these two test files may get amalgamated.
-
-The second set of tests check pcre_info(), pcre_study(), pcre_copy_substring(),
-pcre_get_substring(), pcre_get_substring_list(), error detection and run-time
-flags that are specific to PCRE, as well as the POSIX wrapper API.
-
-The fourth set of tests checks pcre_maketables(), the facility for building a
-set of character tables for a specific locale and using them instead of the
-default tables. The tests make use of the "fr" (French) locale. Before running
-the test, the script checks for the presence of this locale by running the
-"locale" command. If that command fails, or if it doesn't include "fr" in the
-list of available locales, the fourth test cannot be run, and a comment is
-output to say why. If running this test produces instances of the error
-
-  ** Failed to set locale "fr"
-
-in the comparison output, it means that locale is not available on your system,
-despite being listed by "locale". This does not mean that PCRE is broken.
-
-PCRE has its own native API, but a set of "wrapper" functions that are based on
-the POSIX API are also supplied in the library libpcreposix.a. Note that this
-just provides a POSIX calling interface to PCRE: the regular expressions
-themselves still follow Perl syntax and semantics. The header file
-for the POSIX-style functions is called pcreposix.h. The official POSIX name is
-regex.h, but I didn't want to risk possible problems with existing files of
-that name by distributing it that way. To use it with an existing program that
-uses the POSIX API, it will have to be renamed or pointed at by a link.
-
-
-Character tables
-----------------
-
-PCRE uses four tables for manipulating and identifying characters. The final
-argument of the pcre_compile() function is a pointer to a block of memory
-containing the concatenated tables. A call to pcre_maketables() can be used to
-generate a set of tables in the current locale. If the final argument for
-pcre_compile() is passed as NULL, a set of default tables that is built into
-the binary is used.
-
-The source file called chartables.c contains the default set of tables. This is
-not supplied in the distribution, but is built by the program dftables
-(compiled from dftables.c), which uses the ANSI C character handling functions
-such as isalnum(), isalpha(), isupper(), islower(), etc. to build the table
-sources. This means that the default C locale which is set for your system will
-control the contents of these default tables. You can change the default tables
-by editing chartables.c and then re-building PCRE. If you do this, you should
-probably also edit Makefile to ensure that the file doesn't ever get
-re-generated.
-
-The first two 256-byte tables provide lower casing and case flipping functions,
-respectively. The next table consists of three 32-byte bit maps which identify
-digits, "word" characters, and white space, respectively. These are used when
-building 32-byte bit maps that represent character classes.
-
-The final 256-byte table has bits indicating various character types, as
-follows:
-
-    1   white space character
-    2   letter
-    4   decimal digit
-    8   hexadecimal digit
-   16   alphanumeric or '_'
-  128   regular expression metacharacter or binary zero
-
-You should not alter the set of characters that contain the 128 bit, as that
-will cause PCRE to malfunction.
-
-
-Manifest
---------
-
-The distribution should contain the following files:
-
-(A) The actual source files of the PCRE library functions and their
-    headers:
-
-  dftables.c            auxiliary program for building chartables.c
-  get.c                 )
-  maketables.c          )
-  study.c               ) source of
-  pcre.c                )   the functions
-  pcreposix.c           )
-  pcre.in               "source" for the header for the external API; pcre.h
-                          is built from this by "configure"
-  pcreposix.h           header for the external POSIX wrapper API
-  internal.h            header for internal use
-  config.in             template for config.h, which is built by configure
-
-(B) Auxiliary files:
-
-  AUTHORS               information about the author of PCRE
-  ChangeLog             log of changes to the code
-  INSTALL               generic installation instructions
-  LICENCE               conditions for the use of PCRE
-  COPYING               the same, using GNU's standard name
-  Makefile.in           template for Unix Makefile, which is built by configure
-  NEWS                  important changes in this release
-  NON-UNIX-USE          notes on building PCRE on non-Unix systems
-  README                this file
-  RunTest               a Unix shell script for running tests
-  config.guess          ) files used by libtool,
-  config.sub            )   used only when building a shared library
-  configure             a configuring shell script (built by autoconf)
-  configure.in          the autoconf input used to build configure
-  doc/Tech.Notes        notes on the encoding
-  doc/pcre.3            man page source for the PCRE functions
-  doc/pcre.html         HTML version
-  doc/pcre.txt          plain text version
-  doc/pcreposix.3       man page source for the POSIX wrapper API
-  doc/pcreposix.html    HTML version
-  doc/pcreposix.txt     plain text version
-  doc/pcretest.txt      documentation of test program
-  doc/perltest.txt      documentation of Perl test program
-  doc/pgrep.1           man page source for the pgrep utility
-  doc/pgrep.html        HTML version
-  doc/pgrep.txt         plain text version
-  install-sh            a shell script for installing files
-  ltconfig              ) files used to build "libtool",
-  ltmain.sh             )   used only when building a shared library
-  pcretest.c            test program
-  perltest              Perl test program
-  pgrep.c               source of a grep utility that uses PCRE
-  pcre-config.in        source of script which retains PCRE information
-  testdata/testinput1   test data, compatible with Perl 5.004 and 5.005
-  testdata/testinput2   test data for error messages and non-Perl things
-  testdata/testinput3   test data, compatible with Perl 5.005
-  testdata/testinput4   test data for locale-specific tests
-  testdata/testoutput1  test results corresponding to testinput1
-  testdata/testoutput2  test results corresponding to testinput2
-  testdata/testoutput3  test results corresponding to testinput3
-  testdata/testoutput4  test results corresponding to testinput4
-
-(C) Auxiliary files for Win32 DLL
-
-  dll.mk
-  pcre.def
-
-Philip Hazel <ph10@cam.ac.uk>
-February 2000
diff --git a/srclib/pcre/RunTest b/srclib/pcre/RunTest
deleted file mode 100755
index 85eeb62..0000000
--- a/srclib/pcre/RunTest
+++ /dev/null
@@ -1,94 +0,0 @@
-#! /bin/sh
-
-# Run PCRE tests
-
-cf=diff
-
-# Select which tests to run; if no selection, run all
-
-do1=no
-do2=no
-do3=no
-do4=no
-
-while [ $# -gt 0 ] ; do
-  case $1 in
-    1) do1=yes;;
-    2) do2=yes;;
-    3) do3=yes;;
-    4) do4=yes;;
-    *) echo "Unknown test number $1"; exit 1;;
-  esac
-  shift
-done
-
-if [ $do1 = no -a $do2 = no -a $do3 = no -a $do4 = no ] ; then
-  do1=yes
-  do2=yes
-  do3=yes
-  do4=yes
-fi
-
-# Primary test, Perl-compatible
-
-if [ $do1 = yes ] ; then
-  echo "Testing main functionality (Perl compatible)"
-  ./pcretest testdata/testinput1 testtry
-  if [ $? = 0 ] ; then
-    $cf testtry testdata/testoutput1
-    if [ $? != 0 ] ; then exit 1; fi
-  else exit 1
-  fi
-fi
-
-# PCRE tests that are not Perl-compatible - API & error tests, mostly
-
-if [ $do2 = yes ] ; then
-  echo "Testing API and error handling (not Perl compatible)"
-  ./pcretest -i testdata/testinput2 testtry
-  if [ $? = 0 ] ; then
-    $cf testtry testdata/testoutput2
-    if [ $? != 0 ] ; then exit 1; fi
-  else exit 1
-  fi
-fi
-
-# Additional Perl-compatible tests for Perl 5.005's new features
-
-if [ $do3 = yes ] ; then
-  echo "Testing Perl 5.005 features (Perl 5.005 compatible)"
-  ./pcretest testdata/testinput3 testtry
-  if [ $? = 0 ] ; then
-    $cf testtry testdata/testoutput3
-    if [ $? != 0 ] ; then exit 1; fi
-  else exit 1
-  fi
-fi
-
-if [ $do1 = yes -a $do2 = yes -a $do3 = yes ] ; then
-  echo "The three main tests all ran OK"
-  echo " " 
-fi
-
-# Locale-specific tests, provided the "fr" locale is available
-
-if [ $do4 = yes ] ; then
-  locale -a | grep '^fr$' >/dev/null
-  if [ $? -eq 0 ] ; then
-    echo "Testing locale-specific features (using 'fr' locale)"
-    ./pcretest testdata/testinput4 testtry
-    if [ $? = 0 ] ; then
-      $cf testtry testdata/testoutput4
-      if [ $? != 0 ] ; then exit 1; fi
-      echo "Locale test ran OK" 
-      echo " " 
-    else exit 1
-    fi
-  else
-    echo "Cannot test locale-specific features - 'fr' locale not found,"
-    echo "or the \"locale\" command is not available to check for it."
-    echo " " 
-  fi
-fi
-
-# End
diff --git a/srclib/pcre/config.guess b/srclib/pcre/config.guess
deleted file mode 100644
index e1b5871..0000000
--- a/srclib/pcre/config.guess
+++ /dev/null
@@ -1,1121 +0,0 @@
-#! /bin/sh
-# Attempt to guess a canonical system name.
-#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999
-#   Free Software Foundation, Inc.
-#
-# This file is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-# Written by Per Bothner <bothner@cygnus.com>.
-# The master version of this file is at the FSF in /home/gd/gnu/lib.
-# Please send patches to <autoconf-patches@gnu.org>.
-#
-# This script attempts to guess a canonical system name similar to
-# config.sub.  If it succeeds, it prints the system name on stdout, and
-# exits with 0.  Otherwise, it exits with 1.
-#
-# The plan is that this can be called by configure scripts if you
-# don't specify an explicit system type (host/target name).
-#
-# Only a few systems have been added to this list; please add others
-# (but try to keep the structure clean).
-#
-
-# Use $HOST_CC if defined. $CC may point to a cross-compiler
-if test x"$CC_FOR_BUILD" = x; then
-  if test x"$HOST_CC" != x; then
-    CC_FOR_BUILD="$HOST_CC"
-  else
-    if test x"$CC" != x; then
-      CC_FOR_BUILD="$CC"
-    else
-      CC_FOR_BUILD=cc
-    fi
-  fi
-fi
-
-
-# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
-# (ghazi@noc.rutgers.edu 8/24/94.)
-if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
-	PATH=$PATH:/.attbin ; export PATH
-fi
-
-UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
-UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
-UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
-UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
-
-dummy=dummy-$$
-trap 'rm -f $dummy.c $dummy.o $dummy; exit 1' 1 2 15
-
-# Note: order is significant - the case branches are not exclusive.
-
-case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
-    alpha:OSF1:*:*)
-	if test $UNAME_RELEASE = "V4.0"; then
-		UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
-	fi
-	# A Vn.n version is a released version.
-	# A Tn.n version is a released field test version.
-	# A Xn.n version is an unreleased experimental baselevel.
-	# 1.2 uses "1.2" for uname -r.
-	cat <<EOF >$dummy.s
-	.globl main
-	.ent main
-main:
-	.frame \$30,0,\$26,0
-	.prologue 0
-	.long 0x47e03d80 # implver $0
-	lda \$2,259
-	.long 0x47e20c21 # amask $2,$1
-	srl \$1,8,\$2
-	sll \$2,2,\$2
-	sll \$0,3,\$0
-	addl \$1,\$0,\$0
-	addl \$2,\$0,\$0
-	ret \$31,(\$26),1
-	.end main
-EOF
-	$CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null
-	if test "$?" = 0 ; then
-		./$dummy
-		case "$?" in
-			7)
-				UNAME_MACHINE="alpha"
-				;;
-			15)
-				UNAME_MACHINE="alphaev5"
-				;;
-			14)
-				UNAME_MACHINE="alphaev56"
-				;;
-			10)
-				UNAME_MACHINE="alphapca56"
-				;;
-			16)
-				UNAME_MACHINE="alphaev6"
-				;;
-		esac
-	fi
-	rm -f $dummy.s $dummy
-	echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
-	exit 0 ;;
-    Alpha\ *:Windows_NT*:*)
-	# How do we know it's Interix rather than the generic POSIX subsystem?
-	# Should we change UNAME_MACHINE based on the output of uname instead
-	# of the specific Alpha model?
-	echo alpha-pc-interix
-	exit 0 ;;
-    21064:Windows_NT:50:3)
-	echo alpha-dec-winnt3.5
-	exit 0 ;;
-    Amiga*:UNIX_System_V:4.0:*)
-	echo m68k-cbm-sysv4
-	exit 0;;
-    amiga:NetBSD:*:*)
-      echo m68k-cbm-netbsd${UNAME_RELEASE}
-      exit 0 ;;
-    amiga:OpenBSD:*:*)
-	echo m68k-unknown-openbsd${UNAME_RELEASE}
-	exit 0 ;;
-    *:[Aa]miga[Oo][Ss]:*:*)
-	echo ${UNAME_MACHINE}-unknown-amigaos
-	exit 0 ;;
-    arc64:OpenBSD:*:*)
-	echo mips64el-unknown-openbsd${UNAME_RELEASE}
-	exit 0 ;;
-    arc:OpenBSD:*:*)
-	echo mipsel-unknown-openbsd${UNAME_RELEASE}
-	exit 0 ;;
-    hkmips:OpenBSD:*:*)
-	echo mips-unknown-openbsd${UNAME_RELEASE}
-	exit 0 ;;
-    pmax:OpenBSD:*:*)
-	echo mipsel-unknown-openbsd${UNAME_RELEASE}
-	exit 0 ;;
-    sgi:OpenBSD:*:*)
-	echo mips-unknown-openbsd${UNAME_RELEASE}
-	exit 0 ;;
-    wgrisc:OpenBSD:*:*)
-	echo mipsel-unknown-openbsd${UNAME_RELEASE}
-	exit 0 ;;
-    *:OS/390:*:*)
-	echo i370-ibm-openedition
-	exit 0 ;;
-    arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
-	echo arm-acorn-riscix${UNAME_RELEASE}
-	exit 0;;
-    arm32:NetBSD:*:*)
-	echo arm-unknown-netbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
-	exit 0 ;;
-    SR2?01:HI-UX/MPP:*:*)
-	echo hppa1.1-hitachi-hiuxmpp
-	exit 0;;
-    Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
-	# akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
-	if test "`(/bin/universe) 2>/dev/null`" = att ; then
-		echo pyramid-pyramid-sysv3
-	else
-		echo pyramid-pyramid-bsd
-	fi
-	exit 0 ;;
-    NILE*:*:*:dcosx)
-	echo pyramid-pyramid-svr4
-	exit 0 ;;
-    sun4H:SunOS:5.*:*)
-	echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-	exit 0 ;;
-    sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
-	echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-	exit 0 ;;
-    i86pc:SunOS:5.*:*)
-	echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-	exit 0 ;;
-    sun4*:SunOS:6*:*)
-	# According to config.sub, this is the proper way to canonicalize
-	# SunOS6.  Hard to guess exactly what SunOS6 will be like, but
-	# it's likely to be more like Solaris than SunOS4.
-	echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-	exit 0 ;;
-    sun4*:SunOS:*:*)
-	case "`/usr/bin/arch -k`" in
-	    Series*|S4*)
-		UNAME_RELEASE=`uname -v`
-		;;
-	esac
-	# Japanese Language versions have a version number like `4.1.3-JL'.
-	echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
-	exit 0 ;;
-    sun3*:SunOS:*:*)
-	echo m68k-sun-sunos${UNAME_RELEASE}
-	exit 0 ;;
-    sun*:*:4.2BSD:*)
-	UNAME_RELEASE=`(head -1 /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
-	test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
-	case "`/bin/arch`" in
-	    sun3)
-		echo m68k-sun-sunos${UNAME_RELEASE}
-		;;
-	    sun4)
-		echo sparc-sun-sunos${UNAME_RELEASE}
-		;;
-	esac
-	exit 0 ;;
-    aushp:SunOS:*:*)
-	echo sparc-auspex-sunos${UNAME_RELEASE}
-	exit 0 ;;
-    atari*:NetBSD:*:*)
-	echo m68k-atari-netbsd${UNAME_RELEASE}
-	exit 0 ;;
-    atari*:OpenBSD:*:*)
-	echo m68k-unknown-openbsd${UNAME_RELEASE}
-	exit 0 ;;
-    # The situation for MiNT is a little confusing.  The machine name
-    # can be virtually everything (everything which is not
-    # "atarist" or "atariste" at least should have a processor 
-    # > m68000).  The system name ranges from "MiNT" over "FreeMiNT"
-    # to the lowercase version "mint" (or "freemint").  Finally
-    # the system name "TOS" denotes a system which is actually not
-    # MiNT.  But MiNT is downward compatible to TOS, so this should
-    # be no problem.
-    atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
-        echo m68k-atari-mint${UNAME_RELEASE}
-	exit 0 ;;
-    atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
-	echo m68k-atari-mint${UNAME_RELEASE}
-        exit 0 ;;
-    *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
-        echo m68k-atari-mint${UNAME_RELEASE}
-	exit 0 ;;
-    milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
-        echo m68k-milan-mint${UNAME_RELEASE}
-        exit 0 ;;
-    hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
-        echo m68k-hades-mint${UNAME_RELEASE}
-        exit 0 ;;
-    *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
-        echo m68k-unknown-mint${UNAME_RELEASE}
-        exit 0 ;;
-    sun3*:NetBSD:*:*)
-	echo m68k-sun-netbsd${UNAME_RELEASE}
-	exit 0 ;;
-    sun3*:OpenBSD:*:*)
-	echo m68k-unknown-openbsd${UNAME_RELEASE}
-	exit 0 ;;
-    mac68k:NetBSD:*:*)
-	echo m68k-apple-netbsd${UNAME_RELEASE}
-	exit 0 ;;
-    mac68k:OpenBSD:*:*)
-	echo m68k-unknown-openbsd${UNAME_RELEASE}
-	exit 0 ;;
-    mvme68k:OpenBSD:*:*)
-	echo m68k-unknown-openbsd${UNAME_RELEASE}
-	exit 0 ;;
-    mvme88k:OpenBSD:*:*)
-	echo m88k-unknown-openbsd${UNAME_RELEASE}
-	exit 0 ;;
-    powerpc:machten:*:*)
-	echo powerpc-apple-machten${UNAME_RELEASE}
-	exit 0 ;;
-    macppc:NetBSD:*:*)
-        echo powerpc-apple-netbsd${UNAME_RELEASE}
-        exit 0 ;;
-    RISC*:Mach:*:*)
-	echo mips-dec-mach_bsd4.3
-	exit 0 ;;
-    RISC*:ULTRIX:*:*)
-	echo mips-dec-ultrix${UNAME_RELEASE}
-	exit 0 ;;
-    VAX*:ULTRIX*:*:*)
-	echo vax-dec-ultrix${UNAME_RELEASE}
-	exit 0 ;;
-    2020:CLIX:*:* | 2430:CLIX:*:*)
-	echo clipper-intergraph-clix${UNAME_RELEASE}
-	exit 0 ;;
-    mips:*:*:UMIPS | mips:*:*:RISCos)
-	sed 's/^	//' << EOF >$dummy.c
-#ifdef __cplusplus
-	int main (int argc, char *argv[]) {
-#else
-	int main (argc, argv) int argc; char *argv[]; {
-#endif
-	#if defined (host_mips) && defined (MIPSEB)
-	#if defined (SYSTYPE_SYSV)
-	  printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
-	#endif
-	#if defined (SYSTYPE_SVR4)
-	  printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
-	#endif
-	#if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
-	  printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
-	#endif
-	#endif
-	  exit (-1);
-	}
-EOF
-	$CC_FOR_BUILD $dummy.c -o $dummy \
-	  && ./$dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
-	  && rm $dummy.c $dummy && exit 0
-	rm -f $dummy.c $dummy
-	echo mips-mips-riscos${UNAME_RELEASE}
-	exit 0 ;;
-    Night_Hawk:Power_UNIX:*:*)
-	echo powerpc-harris-powerunix
-	exit 0 ;;
-    m88k:CX/UX:7*:*)
-	echo m88k-harris-cxux7
-	exit 0 ;;
-    m88k:*:4*:R4*)
-	echo m88k-motorola-sysv4
-	exit 0 ;;
-    m88k:*:3*:R3*)
-	echo m88k-motorola-sysv3
-	exit 0 ;;
-    AViiON:dgux:*:*)
-        # DG/UX returns AViiON for all architectures
-        UNAME_PROCESSOR=`/usr/bin/uname -p`
-	if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110]
-	then
-	    if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
-	       [ ${TARGET_BINARY_INTERFACE}x = x ]
-	    then
-		echo m88k-dg-dgux${UNAME_RELEASE}
-	    else
-		echo m88k-dg-dguxbcs${UNAME_RELEASE}
-	    fi
-	else
-	    echo i586-dg-dgux${UNAME_RELEASE}
-	fi
- 	exit 0 ;;
-    M88*:DolphinOS:*:*)	# DolphinOS (SVR3)
-	echo m88k-dolphin-sysv3
-	exit 0 ;;
-    M88*:*:R3*:*)
-	# Delta 88k system running SVR3
-	echo m88k-motorola-sysv3
-	exit 0 ;;
-    XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
-	echo m88k-tektronix-sysv3
-	exit 0 ;;
-    Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
-	echo m68k-tektronix-bsd
-	exit 0 ;;
-    *:IRIX*:*:*)
-	echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
-	exit 0 ;;
-    ????????:AIX?:[12].1:2)   # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
-	echo romp-ibm-aix      # uname -m gives an 8 hex-code CPU id
-	exit 0 ;;              # Note that: echo "'`uname -s`'" gives 'AIX '
-    i?86:AIX:*:*)
-	echo i386-ibm-aix
-	exit 0 ;;
-    *:AIX:2:3)
-	if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
-		sed 's/^		//' << EOF >$dummy.c
-		#include <sys/systemcfg.h>
-
-		main()
-			{
-			if (!__power_pc())
-				exit(1);
-			puts("powerpc-ibm-aix3.2.5");
-			exit(0);
-			}
-EOF
-		$CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm $dummy.c $dummy && exit 0
-		rm -f $dummy.c $dummy
-		echo rs6000-ibm-aix3.2.5
-	elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
-		echo rs6000-ibm-aix3.2.4
-	else
-		echo rs6000-ibm-aix3.2
-	fi
-	exit 0 ;;
-    *:AIX:*:4)
-	IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | head -1 | awk '{ print $1 }'`
-	if /usr/sbin/lsattr -EHl ${IBM_CPU_ID} | grep POWER >/dev/null 2>&1; then
-		IBM_ARCH=rs6000
-	else
-		IBM_ARCH=powerpc
-	fi
-	if [ -x /usr/bin/oslevel ] ; then
-		IBM_REV=`/usr/bin/oslevel`
-	else
-		IBM_REV=4.${UNAME_RELEASE}
-	fi
-	echo ${IBM_ARCH}-ibm-aix${IBM_REV}
-	exit 0 ;;
-    *:AIX:*:*)
-	echo rs6000-ibm-aix
-	exit 0 ;;
-    ibmrt:4.4BSD:*|romp-ibm:BSD:*)
-	echo romp-ibm-bsd4.4
-	exit 0 ;;
-    ibmrt:*BSD:*|romp-ibm:BSD:*)            # covers RT/PC NetBSD and
-	echo romp-ibm-bsd${UNAME_RELEASE}   # 4.3 with uname added to
-	exit 0 ;;                           # report: romp-ibm BSD 4.3
-    *:BOSX:*:*)
-	echo rs6000-bull-bosx
-	exit 0 ;;
-    DPX/2?00:B.O.S.:*:*)
-	echo m68k-bull-sysv3
-	exit 0 ;;
-    9000/[34]??:4.3bsd:1.*:*)
-	echo m68k-hp-bsd
-	exit 0 ;;
-    hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
-	echo m68k-hp-bsd4.4
-	exit 0 ;;
-    9000/[34678]??:HP-UX:*:*)
-	case "${UNAME_MACHINE}" in
-	    9000/31? )            HP_ARCH=m68000 ;;
-	    9000/[34]?? )         HP_ARCH=m68k ;;
-	    9000/[678][0-9][0-9])
-              sed 's/^              //' << EOF >$dummy.c
-              #include <stdlib.h>
-              #include <unistd.h>
-
-              int main ()
-              {
-              #if defined(_SC_KERNEL_BITS)
-                  long bits = sysconf(_SC_KERNEL_BITS);
-              #endif
-                  long cpu  = sysconf (_SC_CPU_VERSION);
-
-                  switch (cpu)
-              	{
-              	case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
-              	case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
-              	case CPU_PA_RISC2_0:
-              #if defined(_SC_KERNEL_BITS)
-              	    switch (bits)
-              		{
-              		case 64: puts ("hppa2.0w"); break;
-              		case 32: puts ("hppa2.0n"); break;
-              		default: puts ("hppa2.0"); break;
-              		} break;
-              #else  /* !defined(_SC_KERNEL_BITS) */
-              	    puts ("hppa2.0"); break;
-              #endif
-              	default: puts ("hppa1.0"); break;
-              	}
-                  exit (0);
-              }
-EOF
-	(CCOPTS= $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null ) && HP_ARCH=`./$dummy`
-	rm -f $dummy.c $dummy
-	esac
-	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
-	echo ${HP_ARCH}-hp-hpux${HPUX_REV}
-	exit 0 ;;
-    3050*:HI-UX:*:*)
-	sed 's/^	//' << EOF >$dummy.c
-	#include <unistd.h>
-	int
-	main ()
-	{
-	  long cpu = sysconf (_SC_CPU_VERSION);
-	  /* The order matters, because CPU_IS_HP_MC68K erroneously returns
-	     true for CPU_PA_RISC1_0.  CPU_IS_PA_RISC returns correct
-	     results, however.  */
-	  if (CPU_IS_PA_RISC (cpu))
-	    {
-	      switch (cpu)
-		{
-		  case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
-		  case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
-		  case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
-		  default: puts ("hppa-hitachi-hiuxwe2"); break;
-		}
-	    }
-	  else if (CPU_IS_HP_MC68K (cpu))
-	    puts ("m68k-hitachi-hiuxwe2");
-	  else puts ("unknown-hitachi-hiuxwe2");
-	  exit (0);
-	}
-EOF
-	$CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm $dummy.c $dummy && exit 0
-	rm -f $dummy.c $dummy
-	echo unknown-hitachi-hiuxwe2
-	exit 0 ;;
-    9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
-	echo hppa1.1-hp-bsd
-	exit 0 ;;
-    9000/8??:4.3bsd:*:*)
-	echo hppa1.0-hp-bsd
-	exit 0 ;;
-    *9??*:MPE/iX:*:*)
-	echo hppa1.0-hp-mpeix
-	exit 0 ;;
-    hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
-	echo hppa1.1-hp-osf
-	exit 0 ;;
-    hp8??:OSF1:*:*)
-	echo hppa1.0-hp-osf
-	exit 0 ;;
-    i?86:OSF1:*:*)
-	if [ -x /usr/sbin/sysversion ] ; then
-	    echo ${UNAME_MACHINE}-unknown-osf1mk
-	else
-	    echo ${UNAME_MACHINE}-unknown-osf1
-	fi
-	exit 0 ;;
-    parisc*:Lites*:*:*)
-	echo hppa1.1-hp-lites
-	exit 0 ;;
-    hppa*:OpenBSD:*:*)
-	echo hppa-unknown-openbsd
-	exit 0 ;;
-    C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
-	echo c1-convex-bsd
-        exit 0 ;;
-    C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
-	if getsysinfo -f scalar_acc
-	then echo c32-convex-bsd
-	else echo c2-convex-bsd
-	fi
-        exit 0 ;;
-    C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
-	echo c34-convex-bsd
-        exit 0 ;;
-    C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
-	echo c38-convex-bsd
-        exit 0 ;;
-    C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
-	echo c4-convex-bsd
-        exit 0 ;;
-    CRAY*X-MP:*:*:*)
-	echo xmp-cray-unicos
-        exit 0 ;;
-    CRAY*Y-MP:*:*:*)
-	echo ymp-cray-unicos${UNAME_RELEASE}
-	exit 0 ;;
-    CRAY*[A-Z]90:*:*:*)
-	echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
-	| sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
-	      -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/
-	exit 0 ;;
-    CRAY*TS:*:*:*)
-	echo t90-cray-unicos${UNAME_RELEASE}
-	exit 0 ;;
-    CRAY*T3E:*:*:*)
-	echo alpha-cray-unicosmk${UNAME_RELEASE}
-	exit 0 ;;
-    CRAY-2:*:*:*)
-	echo cray2-cray-unicos
-        exit 0 ;;
-    F300:UNIX_System_V:*:*)
-        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
-        FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
-        echo "f300-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
-        exit 0 ;;
-    F301:UNIX_System_V:*:*)
-       echo f301-fujitsu-uxpv`echo $UNAME_RELEASE | sed 's/ .*//'`
-       exit 0 ;;
-    hp3[0-9][05]:NetBSD:*:*)
-	echo m68k-hp-netbsd${UNAME_RELEASE}
-	exit 0 ;;
-    hp300:OpenBSD:*:*)
-	echo m68k-unknown-openbsd${UNAME_RELEASE}
-	exit 0 ;;
-    i?86:BSD/386:*:* | i?86:BSD/OS:*:*)
-	echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
-	exit 0 ;;
-    sparc*:BSD/OS:*:*)
-	echo sparc-unknown-bsdi${UNAME_RELEASE}
-	exit 0 ;;
-    *:BSD/OS:*:*)
-	echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
-	exit 0 ;;
-    *:FreeBSD:*:*)
-	if test -x /usr/bin/objformat; then
-	    if test "elf" = "`/usr/bin/objformat`"; then
-		echo ${UNAME_MACHINE}-unknown-freebsdelf`echo ${UNAME_RELEASE}|sed -e 's/[-_].*//'`
-		exit 0
-	    fi
-	fi
-	echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
-	exit 0 ;;
-    *:NetBSD:*:*)
-	echo ${UNAME_MACHINE}-unknown-netbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*//'`
-	exit 0 ;;
-    *:OpenBSD:*:*)
-	echo ${UNAME_MACHINE}-unknown-openbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
-	exit 0 ;;
-    i*:CYGWIN*:*)
-	echo ${UNAME_MACHINE}-pc-cygwin
-	exit 0 ;;
-    i*:MINGW*:*)
-	echo ${UNAME_MACHINE}-pc-mingw32
-	exit 0 ;;
-    i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
-	# How do we know it's Interix rather than the generic POSIX subsystem?
-	# It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
-	# UNAME_MACHINE based on the output of uname instead of i386?
-	echo i386-pc-interix
-	exit 0 ;;
-    i*:UWIN*:*)
-	echo ${UNAME_MACHINE}-pc-uwin
-	exit 0 ;;
-    p*:CYGWIN*:*)
-	echo powerpcle-unknown-cygwin
-	exit 0 ;;
-    prep*:SunOS:5.*:*)
-	echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-	exit 0 ;;
-    *:GNU:*:*)
-	echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
-	exit 0 ;;
-    *:Linux:*:*)
-
-	# The BFD linker knows what the default object file format is, so
-	# first see if it will tell us. cd to the root directory to prevent
-	# problems with other programs or directories called `ld' in the path.
-	ld_help_string=`cd /; ld --help 2>&1`
-	ld_supported_emulations=`echo $ld_help_string \
-			 | sed -ne '/supported emulations:/!d
-				    s/[ 	][ 	]*/ /g
-				    s/.*supported emulations: *//
-				    s/ .*//
-				    p'`
-        case "$ld_supported_emulations" in
-	  *ia64)
-		echo "${UNAME_MACHINE}-unknown-linux"
-		exit 0
-		;;
-	  i?86linux)
-		echo "${UNAME_MACHINE}-pc-linux-gnuaout"
-		exit 0
-		;;
-	  i?86coff)
-		echo "${UNAME_MACHINE}-pc-linux-gnucoff"
-		exit 0
-		;;
-	  sparclinux)
-		echo "${UNAME_MACHINE}-unknown-linux-gnuaout"
-		exit 0
-		;;
-	  armlinux)
-		echo "${UNAME_MACHINE}-unknown-linux-gnuaout"
-		exit 0
-		;;
-	  elf32arm*)
-		echo "${UNAME_MACHINE}-unknown-linux-gnu"
-		exit 0
-		;;
-	  armelf_linux*)
-		echo "${UNAME_MACHINE}-unknown-linux-gnu"
-		exit 0
-		;;
-	  m68klinux)
-		echo "${UNAME_MACHINE}-unknown-linux-gnuaout"
-		exit 0
-		;;
-	  elf32ppc)
-		# Determine Lib Version
-		cat >$dummy.c <<EOF
-#include <features.h>
-#if defined(__GLIBC__)
-extern char __libc_version[];
-extern char __libc_release[];
-#endif
-main(argc, argv)
-     int argc;
-     char *argv[];
-{
-#if defined(__GLIBC__)
-  printf("%s %s\n", __libc_version, __libc_release);
-#else
-  printf("unkown\n");
-#endif
-  return 0;
-}
-EOF
-		LIBC=""
-		$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null
-		if test "$?" = 0 ; then
-			./$dummy | grep 1\.99 > /dev/null
-			if test "$?" = 0 ; then
-				LIBC="libc1"
-			fi
-		fi	
-		rm -f $dummy.c $dummy
-		echo powerpc-unknown-linux-gnu${LIBC}
-		exit 0
-		;;
-	esac
-
-	if test "${UNAME_MACHINE}" = "alpha" ; then
-		sed 's/^	//'  <<EOF >$dummy.s
-		.globl main
-		.ent main
-	main:
-		.frame \$30,0,\$26,0
-		.prologue 0
-		.long 0x47e03d80 # implver $0
-		lda \$2,259
-		.long 0x47e20c21 # amask $2,$1
-		srl \$1,8,\$2
-		sll \$2,2,\$2
-		sll \$0,3,\$0
-		addl \$1,\$0,\$0
-		addl \$2,\$0,\$0
-		ret \$31,(\$26),1
-		.end main
-EOF
-		LIBC=""
-		$CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null
-		if test "$?" = 0 ; then
-			./$dummy
-			case "$?" in
-			7)
-				UNAME_MACHINE="alpha"
-				;;
-			15)
-				UNAME_MACHINE="alphaev5"
-				;;
-			14)
-				UNAME_MACHINE="alphaev56"
-				;;
-			10)
-				UNAME_MACHINE="alphapca56"
-				;;
-			16)
-				UNAME_MACHINE="alphaev6"
-				;;
-			esac
-
-			objdump --private-headers $dummy | \
-			  grep ld.so.1 > /dev/null
-			if test "$?" = 0 ; then
-				LIBC="libc1"
-			fi
-		fi
-		rm -f $dummy.s $dummy
-		echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} ; exit 0
-	elif test "${UNAME_MACHINE}" = "mips" ; then
-	  cat >$dummy.c <<EOF
-#ifdef __cplusplus
-	int main (int argc, char *argv[]) {
-#else
-	int main (argc, argv) int argc; char *argv[]; {
-#endif
-#ifdef __MIPSEB__
-  printf ("%s-unknown-linux-gnu\n", argv[1]);
-#endif
-#ifdef __MIPSEL__
-  printf ("%sel-unknown-linux-gnu\n", argv[1]);
-#endif
-  return 0;
-}
-EOF
-	  $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm $dummy.c $dummy && exit 0
-	  rm -f $dummy.c $dummy
-	else
-	  # Either a pre-BFD a.out linker (linux-gnuoldld)
-	  # or one that does not give us useful --help.
-	  # GCC wants to distinguish between linux-gnuoldld and linux-gnuaout.
-	  # If ld does not provide *any* "supported emulations:"
-	  # that means it is gnuoldld.
-	  echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations:"
-	  test $? != 0 && echo "${UNAME_MACHINE}-pc-linux-gnuoldld" && exit 0
-
-	  case "${UNAME_MACHINE}" in
-	  i?86)
-	    VENDOR=pc;
-	    ;;
-	  *)
-	    VENDOR=unknown;
-	    ;;
-	  esac
-	  # Determine whether the default compiler is a.out or elf
-	  cat >$dummy.c <<EOF
-#include <features.h>
-#ifdef __cplusplus
-	int main (int argc, char *argv[]) {
-#else
-	int main (argc, argv) int argc; char *argv[]; {
-#endif
-#ifdef __ELF__
-# ifdef __GLIBC__
-#  if __GLIBC__ >= 2
-    printf ("%s-${VENDOR}-linux-gnu\n", argv[1]);
-#  else
-    printf ("%s-${VENDOR}-linux-gnulibc1\n", argv[1]);
-#  endif
-# else
-   printf ("%s-${VENDOR}-linux-gnulibc1\n", argv[1]);
-# endif
-#else
-  printf ("%s-${VENDOR}-linux-gnuaout\n", argv[1]);
-#endif
-  return 0;
-}
-EOF
-	  $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm $dummy.c $dummy && exit 0
-	  rm -f $dummy.c $dummy
-	fi ;;
-# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.  earlier versions
-# are messed up and put the nodename in both sysname and nodename.
-    i?86:DYNIX/ptx:4*:*)
-	echo i386-sequent-sysv4
-	exit 0 ;;
-    i?86:UNIX_SV:4.2MP:2.*)
-        # Unixware is an offshoot of SVR4, but it has its own version
-        # number series starting with 2...
-        # I am not positive that other SVR4 systems won't match this,
-	# I just have to hope.  -- rms.
-        # Use sysv4.2uw... so that sysv4* matches it.
-	echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
-	exit 0 ;;
-    i?86:*:4.*:* | i?86:SYSTEM_V:4.*:*)
-	UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
-	if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
-		echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
-	else
-		echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
-	fi
-	exit 0 ;;
-    i?86:*:5:7*)
-        # Fixed at (any) Pentium or better
-        UNAME_MACHINE=i586
-        if [ ${UNAME_SYSTEM} = "UnixWare" ] ; then
-	    echo ${UNAME_MACHINE}-sco-sysv${UNAME_RELEASE}uw${UNAME_VERSION}
-	else
-	    echo ${UNAME_MACHINE}-pc-sysv${UNAME_RELEASE}
-	fi
-	exit 0 ;;
-    i?86:*:3.2:*)
-	if test -f /usr/options/cb.name; then
-		UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
-		echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
-	elif /bin/uname -X 2>/dev/null >/dev/null ; then
-		UNAME_REL=`(/bin/uname -X|egrep Release|sed -e 's/.*= //')`
-		(/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486
-		(/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \
-			&& UNAME_MACHINE=i586
-		(/bin/uname -X|egrep '^Machine.*Pent ?II' >/dev/null) \
-			&& UNAME_MACHINE=i686
-		(/bin/uname -X|egrep '^Machine.*Pentium Pro' >/dev/null) \
-			&& UNAME_MACHINE=i686
-		echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
-	else
-		echo ${UNAME_MACHINE}-pc-sysv32
-	fi
-	exit 0 ;;
-    pc:*:*:*)
-        # uname -m prints for DJGPP always 'pc', but it prints nothing about
-        # the processor, so we play safe by assuming i386.
-	echo i386-pc-msdosdjgpp
-        exit 0 ;;
-    Intel:Mach:3*:*)
-	echo i386-pc-mach3
-	exit 0 ;;
-    paragon:*:*:*)
-	echo i860-intel-osf1
-	exit 0 ;;
-    i860:*:4.*:*) # i860-SVR4
-	if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
-	  echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
-	else # Add other i860-SVR4 vendors below as they are discovered.
-	  echo i860-unknown-sysv${UNAME_RELEASE}  # Unknown i860-SVR4
-	fi
-	exit 0 ;;
-    mini*:CTIX:SYS*5:*)
-	# "miniframe"
-	echo m68010-convergent-sysv
-	exit 0 ;;
-    M68*:*:R3V[567]*:*)
-	test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
-    3[34]??:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 4850:*:4.0:3.0)
-	OS_REL=''
-	test -r /etc/.relid \
-	&& OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
-	/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
-	  && echo i486-ncr-sysv4.3${OS_REL} && exit 0
-	/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
-	  && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;;
-    3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
-        /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
-          && echo i486-ncr-sysv4 && exit 0 ;;
-    m68*:LynxOS:2.*:*)
-	echo m68k-unknown-lynxos${UNAME_RELEASE}
-	exit 0 ;;
-    mc68030:UNIX_System_V:4.*:*)
-	echo m68k-atari-sysv4
-	exit 0 ;;
-    i?86:LynxOS:2.*:* | i?86:LynxOS:3.[01]*:*)
-	echo i386-unknown-lynxos${UNAME_RELEASE}
-	exit 0 ;;
-    TSUNAMI:LynxOS:2.*:*)
-	echo sparc-unknown-lynxos${UNAME_RELEASE}
-	exit 0 ;;
-    rs6000:LynxOS:2.*:* | PowerPC:LynxOS:2.*:*)
-	echo rs6000-unknown-lynxos${UNAME_RELEASE}
-	exit 0 ;;
-    SM[BE]S:UNIX_SV:*:*)
-	echo mips-dde-sysv${UNAME_RELEASE}
-	exit 0 ;;
-    RM*:ReliantUNIX-*:*:*)
-	echo mips-sni-sysv4
-	exit 0 ;;
-    RM*:SINIX-*:*:*)
-	echo mips-sni-sysv4
-	exit 0 ;;
-    *:SINIX-*:*:*)
-	if uname -p 2>/dev/null >/dev/null ; then
-		UNAME_MACHINE=`(uname -p) 2>/dev/null`
-		echo ${UNAME_MACHINE}-sni-sysv4
-	else
-		echo ns32k-sni-sysv
-	fi
-	exit 0 ;;
-    PENTIUM:CPunix:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
-                           # says <Richard.M.Bartel@ccMail.Census.GOV>
-        echo i586-unisys-sysv4
-        exit 0 ;;
-    *:UNIX_System_V:4*:FTX*)
-	# From Gerald Hewes <hewes@openmarket.com>.
-	# How about differentiating between stratus architectures? -djm
-	echo hppa1.1-stratus-sysv4
-	exit 0 ;;
-    *:*:*:FTX*)
-	# From seanf@swdc.stratus.com.
-	echo i860-stratus-sysv4
-	exit 0 ;;
-    mc68*:A/UX:*:*)
-	echo m68k-apple-aux${UNAME_RELEASE}
-	exit 0 ;;
-    news*:NEWS-OS:*:6*)
-	echo mips-sony-newsos6
-	exit 0 ;;
-    R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
-	if [ -d /usr/nec ]; then
-	        echo mips-nec-sysv${UNAME_RELEASE}
-	else
-	        echo mips-unknown-sysv${UNAME_RELEASE}
-	fi
-        exit 0 ;;
-    BeBox:BeOS:*:*)	# BeOS running on hardware made by Be, PPC only.
-	echo powerpc-be-beos
-	exit 0 ;;
-    BeMac:BeOS:*:*)	# BeOS running on Mac or Mac clone, PPC only.
-	echo powerpc-apple-beos
-	exit 0 ;;
-    BePC:BeOS:*:*)	# BeOS running on Intel PC compatible.
-	echo i586-pc-beos
-	exit 0 ;;
-    SX-4:SUPER-UX:*:*)
-	echo sx4-nec-superux${UNAME_RELEASE}
-	exit 0 ;;
-    SX-5:SUPER-UX:*:*)
-	echo sx5-nec-superux${UNAME_RELEASE}
-	exit 0 ;;
-    Power*:Rhapsody:*:*)
-	echo powerpc-apple-rhapsody${UNAME_RELEASE}
-	exit 0 ;;
-    *:Rhapsody:*:*)
-	echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
-	exit 0 ;;
-    *:QNX:*:4*)
-	echo i386-qnx-qnx${UNAME_VERSION}
-	exit 0 ;;
-esac
-
-#echo '(No uname command or uname output not recognized.)' 1>&2
-#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
-
-cat >$dummy.c <<EOF
-#ifdef _SEQUENT_
-# include <sys/types.h>
-# include <sys/utsname.h>
-#endif
-main ()
-{
-#if defined (sony)
-#if defined (MIPSEB)
-  /* BFD wants "bsd" instead of "newsos".  Perhaps BFD should be changed,
-     I don't know....  */
-  printf ("mips-sony-bsd\n"); exit (0);
-#else
-#include <sys/param.h>
-  printf ("m68k-sony-newsos%s\n",
-#ifdef NEWSOS4
-          "4"
-#else
-	  ""
-#endif
-         ); exit (0);
-#endif
-#endif
-
-#if defined (__arm) && defined (__acorn) && defined (__unix)
-  printf ("arm-acorn-riscix"); exit (0);
-#endif
-
-#if defined (hp300) && !defined (hpux)
-  printf ("m68k-hp-bsd\n"); exit (0);
-#endif
-
-#if defined (NeXT)
-#if !defined (__ARCHITECTURE__)
-#define __ARCHITECTURE__ "m68k"
-#endif
-  int version;
-  version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
-  if (version < 4)
-    printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
-  else
-    printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
-  exit (0);
-#endif
-
-#if defined (MULTIMAX) || defined (n16)
-#if defined (UMAXV)
-  printf ("ns32k-encore-sysv\n"); exit (0);
-#else
-#if defined (CMU)
-  printf ("ns32k-encore-mach\n"); exit (0);
-#else
-  printf ("ns32k-encore-bsd\n"); exit (0);
-#endif
-#endif
-#endif
-
-#if defined (__386BSD__)
-  printf ("i386-pc-bsd\n"); exit (0);
-#endif
-
-#if defined (sequent)
-#if defined (i386)
-  printf ("i386-sequent-dynix\n"); exit (0);
-#endif
-#if defined (ns32000)
-  printf ("ns32k-sequent-dynix\n"); exit (0);
-#endif
-#endif
-
-#if defined (_SEQUENT_)
-    struct utsname un;
-
-    uname(&un);
-
-    if (strncmp(un.version, "V2", 2) == 0) {
-	printf ("i386-sequent-ptx2\n"); exit (0);
-    }
-    if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
-	printf ("i386-sequent-ptx1\n"); exit (0);
-    }
-    printf ("i386-sequent-ptx\n"); exit (0);
-
-#endif
-
-#if defined (vax)
-#if !defined (ultrix)
-  printf ("vax-dec-bsd\n"); exit (0);
-#else
-  printf ("vax-dec-ultrix\n"); exit (0);
-#endif
-#endif
-
-#if defined (alliant) && defined (i860)
-  printf ("i860-alliant-bsd\n"); exit (0);
-#endif
-
-  exit (1);
-}
-EOF
-
-$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy && rm $dummy.c $dummy && exit 0
-rm -f $dummy.c $dummy
-
-# Apollos put the system type in the environment.
-
-test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; }
-
-# Convex versions that predate uname can use getsysinfo(1)
-
-if [ -x /usr/convex/getsysinfo ]
-then
-    case `getsysinfo -f cpu_type` in
-    c1*)
-	echo c1-convex-bsd
-	exit 0 ;;
-    c2*)
-	if getsysinfo -f scalar_acc
-	then echo c32-convex-bsd
-	else echo c2-convex-bsd
-	fi
-	exit 0 ;;
-    c34*)
-	echo c34-convex-bsd
-	exit 0 ;;
-    c38*)
-	echo c38-convex-bsd
-	exit 0 ;;
-    c4*)
-	echo c4-convex-bsd
-	exit 0 ;;
-    esac
-fi
-
-#echo '(Unable to guess system type)' 1>&2
-
-exit 1
diff --git a/srclib/pcre/config.hw b/srclib/pcre/config.hw
deleted file mode 100644
index 124f5de..0000000
--- a/srclib/pcre/config.hw
+++ /dev/null
@@ -1,28 +0,0 @@
-
-/* On Unix systems config.in is converted by configure into config.h. PCRE is
-written in Standard C, but there are a few non-standard things it can cope
-with, allowing it to run on SunOS4 and other "close to standard" systems.
-
-On a non-Unix system you should just copy this file into config.h and change
-the definitions of HAVE_STRERROR and HAVE_MEMMOVE to 1. Unfortunately, because
-of the way autoconf works, these cannot be made the defaults. */
-
-/* Define to empty if the keyword does not work. */
-
-#undef const
-
-/* Define to `unsigned' if <stddef.h> doesn't define size_t. */
-
-#undef size_t
-
-/* The following two definitions are mainly for the benefit of SunOS4, which
-doesn't have the strerror() or memmove() functions that should be present in
-all Standard C libraries. The macros should normally be defined with the value
-1 for other systems, but unfortunately we can't make this the default because
-"configure" files generated by autoconf will only change 0 to 1; they won't
-change 1 to 0 if the functions are not found. */
-
-#define HAVE_STRERROR 1
-#define HAVE_MEMMOVE  1
-
-/* End */
diff --git a/srclib/pcre/config.in b/srclib/pcre/config.in
deleted file mode 100644
index 02f4259..0000000
--- a/srclib/pcre/config.in
+++ /dev/null
@@ -1,33 +0,0 @@
-
-/* On Unix systems config.in is converted by configure into config.h. PCRE is
-written in Standard C, but there are a few non-standard things it can cope
-with, allowing it to run on SunOS4 and other "close to standard" systems.
-
-On a non-Unix system you should just copy this file into config.h and change
-the definitions of HAVE_STRERROR and HAVE_MEMMOVE to 1. Unfortunately, because
-of the way autoconf works, these cannot be made the defaults. If your system
-has bcopy() and not memmove(), change the definition of HAVE_BCOPY instead of
-HAVE_MEMMOVE. If your system has neither bcopy() nor memmove(), leave them both
-as 0; an emulation function will be used. */
-
-/* Define to empty if the keyword does not work. */
-
-#undef const
-
-/* Define to `unsigned' if <stddef.h> doesn't define size_t. */
-
-#undef size_t
-
-/* The following two definitions are mainly for the benefit of SunOS4, which
-doesn't have the strerror() or memmove() functions that should be present in
-all Standard C libraries. The macros HAVE_STRERROR and HAVE_MEMMOVE should
-normally be defined with the value 1 for other systems, but unfortunately we
-can't make this the default because "configure" files generated by autoconf
-will only change 0 to 1; they won't change 1 to 0 if the functions are not
-found. If HAVE_MEMMOVE is set to 1, the value of HAVE_BCOPY is not relevant. */
-
-#define HAVE_STRERROR 0
-#define HAVE_MEMMOVE  0
-#define HAVE_BCOPY    0
-
-/* End */
diff --git a/srclib/pcre/config.sub b/srclib/pcre/config.sub
deleted file mode 100644
index 28426bb..0000000
--- a/srclib/pcre/config.sub
+++ /dev/null
@@ -1,1232 +0,0 @@
-#! /bin/sh
-# Configuration validation subroutine script, version 1.1.
-#   Copyright (C) 1991, 92-97, 1998, 1999 Free Software Foundation, Inc.
-# This file is (in principle) common to ALL GNU software.
-# The presence of a machine in this file suggests that SOME GNU software
-# can handle that machine.  It does not imply ALL GNU software can.
-#
-# This file is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330,
-# Boston, MA 02111-1307, USA.
-
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-# Configuration subroutine to validate and canonicalize a configuration type.
-# Supply the specified configuration type as an argument.
-# If it is invalid, we print an error message on stderr and exit with code 1.
-# Otherwise, we print the canonical config type on stdout and succeed.
-
-# This file is supposed to be the same for all GNU packages
-# and recognize all the CPU types, system types and aliases
-# that are meaningful with *any* GNU software.
-# Each package is responsible for reporting which valid configurations
-# it does not support.  The user should be able to distinguish
-# a failure to support a valid configuration from a meaningless
-# configuration.
-
-# The goal of this file is to map all the various variations of a given
-# machine specification into a single specification in the form:
-#	CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
-# or in some cases, the newer four-part form:
-#	CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
-# It is wrong to echo any other type of specification.
-
-if [ x$1 = x ]
-then
-	echo Configuration name missing. 1>&2
-	echo "Usage: $0 CPU-MFR-OPSYS" 1>&2
-	echo "or     $0 ALIAS" 1>&2
-	echo where ALIAS is a recognized configuration type. 1>&2
-	exit 1
-fi
-
-# First pass through any local machine types.
-case $1 in
-	*local*)
-		echo $1
-		exit 0
-		;;
-	*)
-	;;
-esac
-
-# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
-# Here we must recognize all the valid KERNEL-OS combinations.
-maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
-case $maybe_os in
-  linux-gnu*)
-    os=-$maybe_os
-    basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
-    ;;
-  *)
-    basic_machine=`echo $1 | sed 's/-[^-]*$//'`
-    if [ $basic_machine != $1 ]
-    then os=`echo $1 | sed 's/.*-/-/'`
-    else os=; fi
-    ;;
-esac
-
-### Let's recognize common machines as not being operating systems so
-### that things like config.sub decstation-3100 work.  We also
-### recognize some manufacturers as not being operating systems, so we
-### can provide default operating systems below.
-case $os in
-	-sun*os*)
-		# Prevent following clause from handling this invalid input.
-		;;
-	-dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
-	-att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
-	-unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
-	-convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
-	-c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
-	-harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
-	-apple)
-		os=
-		basic_machine=$1
-		;;
-	-sim | -cisco | -oki | -wec | -winbond)
-		os=
-		basic_machine=$1
-		;;
-	-scout)
-		;;
-	-wrs)
-		os=-vxworks
-		basic_machine=$1
-		;;
-	-hiux*)
-		os=-hiuxwe2
-		;;
-	-sco5)
-		os=-sco3.2v5
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-		;;
-	-sco4)
-		os=-sco3.2v4
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-		;;
-	-sco3.2.[4-9]*)
-		os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-		;;
-	-sco3.2v[4-9]*)
-		# Don't forget version if it is 3.2v4 or newer.
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-		;;
-	-sco*)
-		os=-sco3.2v2
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-		;;
-	-udk*)
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-		;;
-	-isc)
-		os=-isc2.2
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-		;;
-	-clix*)
-		basic_machine=clipper-intergraph
-		;;
-	-isc*)
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-		;;
-	-lynx*)
-		os=-lynxos
-		;;
-	-ptx*)
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
-		;;
-	-windowsnt*)
-		os=`echo $os | sed -e 's/windowsnt/winnt/'`
-		;;
-	-psos*)
-		os=-psos
-		;;
-	-mint | -mint[0-9]*)
-		basic_machine=m68k-atari
-		os=-mint
-		;;
-esac
-
-# Decode aliases for certain CPU-COMPANY combinations.
-case $basic_machine in
-	# Recognize the basic CPU types without company name.
-	# Some are omitted here because they have special meanings below.
-	tahoe | i860 | ia64 | m32r | m68k | m68000 | m88k | ns32k | arc | arm \
-		| arme[lb] | pyramid | mn10200 | mn10300 | tron | a29k \
-		| 580 | i960 | h8300 \
-		| hppa | hppa1.0 | hppa1.1 | hppa2.0 | hppa2.0w | hppa2.0n \
-		| alpha | alphaev[4-7] | alphaev56 | alphapca5[67] \
-		| we32k | ns16k | clipper | i370 | sh | powerpc | powerpcle \
-		| 1750a | dsp16xx | pdp11 | mips16 | mips64 | mipsel | mips64el \
-		| mips64orion | mips64orionel | mipstx39 | mipstx39el \
-		| mips64vr4300 | mips64vr4300el | mips64vr4100 | mips64vr4100el \
-		| mips64vr5000 | miprs64vr5000el | mcore \
-		| sparc | sparclet | sparclite | sparc64 | sparcv9 | v850 | c4x \
-		| thumb | d10v | fr30)
-		basic_machine=$basic_machine-unknown
-		;;
-	m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | z8k | v70 | h8500 | w65 | pj | pjl)
-		;;
-
-	# We use `pc' rather than `unknown'
-	# because (1) that's what they normally are, and
-	# (2) the word "unknown" tends to confuse beginning users.
-	i[34567]86)
-	  basic_machine=$basic_machine-pc
-	  ;;
-	# Object if more than one company name word.
-	*-*-*)
-		echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
-		exit 1
-		;;
-	# Recognize the basic CPU types with company name.
-	# FIXME: clean up the formatting here.
-	vax-* | tahoe-* | i[34567]86-* | i860-* | ia64-* | m32r-* | m68k-* | m68000-* \
-	      | m88k-* | sparc-* | ns32k-* | fx80-* | arc-* | arm-* | c[123]* \
-	      | mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* \
-	      | power-* | none-* | 580-* | cray2-* | h8300-* | h8500-* | i960-* \
-	      | xmp-* | ymp-* \
-	      | hppa-* | hppa1.0-* | hppa1.1-* | hppa2.0-* | hppa2.0w-* | hppa2.0n-* \
-	      | alpha-* | alphaev[4-7]-* | alphaev56-* | alphapca5[67]-* \
-	      | we32k-* | cydra-* | ns16k-* | pn-* | np1-* | xps100-* \
-	      | clipper-* | orion-* \
-	      | sparclite-* | pdp11-* | sh-* | powerpc-* | powerpcle-* \
-	      | sparc64-* | sparcv9-* | sparc86x-* | mips16-* | mips64-* | mipsel-* \
-	      | mips64el-* | mips64orion-* | mips64orionel-* \
-	      | mips64vr4100-* | mips64vr4100el-* | mips64vr4300-* | mips64vr4300el-* \
-	      | mipstx39-* | mipstx39el-* | mcore-* \
-	      | f301-* | armv*-* | t3e-* \
-	      | m88110-* | m680[01234]0-* | m683?2-* | m68360-* | z8k-* | d10v-* \
-	      | thumb-* | v850-* | d30v-* | tic30-* | c30-* | fr30-* )
-		;;
-	# Recognize the various machine names and aliases which stand
-	# for a CPU type and a company and sometimes even an OS.
-	386bsd)
-		basic_machine=i386-unknown
-		os=-bsd
-		;;
-	3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
-		basic_machine=m68000-att
-		;;
-	3b*)
-		basic_machine=we32k-att
-		;;
-	a29khif)
-		basic_machine=a29k-amd
-		os=-udi
-		;;
-	adobe68k)
-		basic_machine=m68010-adobe
-		os=-scout
-		;;
-	alliant | fx80)
-		basic_machine=fx80-alliant
-		;;
-	altos | altos3068)
-		basic_machine=m68k-altos
-		;;
-	am29k)
-		basic_machine=a29k-none
-		os=-bsd
-		;;
-	amdahl)
-		basic_machine=580-amdahl
-		os=-sysv
-		;;
-	amiga | amiga-*)
-		basic_machine=m68k-cbm
-		;;
-	amigaos | amigados)
-		basic_machine=m68k-cbm
-		os=-amigaos
-		;;
-	amigaunix | amix)
-		basic_machine=m68k-cbm
-		os=-sysv4
-		;;
-	apollo68)
-		basic_machine=m68k-apollo
-		os=-sysv
-		;;
-	apollo68bsd)
-		basic_machine=m68k-apollo
-		os=-bsd
-		;;
-	aux)
-		basic_machine=m68k-apple
-		os=-aux
-		;;
-	balance)
-		basic_machine=ns32k-sequent
-		os=-dynix
-		;;
-	convex-c1)
-		basic_machine=c1-convex
-		os=-bsd
-		;;
-	convex-c2)
-		basic_machine=c2-convex
-		os=-bsd
-		;;
-	convex-c32)
-		basic_machine=c32-convex
-		os=-bsd
-		;;
-	convex-c34)
-		basic_machine=c34-convex
-		os=-bsd
-		;;
-	convex-c38)
-		basic_machine=c38-convex
-		os=-bsd
-		;;
-	cray | ymp)
-		basic_machine=ymp-cray
-		os=-unicos
-		;;
-	cray2)
-		basic_machine=cray2-cray
-		os=-unicos
-		;;
-	[ctj]90-cray)
-		basic_machine=c90-cray
-		os=-unicos
-		;;
-	crds | unos)
-		basic_machine=m68k-crds
-		;;
-	da30 | da30-*)
-		basic_machine=m68k-da30
-		;;
-	decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
-		basic_machine=mips-dec
-		;;
-	delta | 3300 | motorola-3300 | motorola-delta \
-	      | 3300-motorola | delta-motorola)
-		basic_machine=m68k-motorola
-		;;
-	delta88)
-		basic_machine=m88k-motorola
-		os=-sysv3
-		;;
-	dpx20 | dpx20-*)
-		basic_machine=rs6000-bull
-		os=-bosx
-		;;
-	dpx2* | dpx2*-bull)
-		basic_machine=m68k-bull
-		os=-sysv3
-		;;
-	ebmon29k)
-		basic_machine=a29k-amd
-		os=-ebmon
-		;;
-	elxsi)
-		basic_machine=elxsi-elxsi
-		os=-bsd
-		;;
-	encore | umax | mmax)
-		basic_machine=ns32k-encore
-		;;
-	es1800 | OSE68k | ose68k | ose | OSE)
-		basic_machine=m68k-ericsson
-		os=-ose
-		;;
-	fx2800)
-		basic_machine=i860-alliant
-		;;
-	genix)
-		basic_machine=ns32k-ns
-		;;
-	gmicro)
-		basic_machine=tron-gmicro
-		os=-sysv
-		;;
-	h3050r* | hiux*)
-		basic_machine=hppa1.1-hitachi
-		os=-hiuxwe2
-		;;
-	h8300hms)
-		basic_machine=h8300-hitachi
-		os=-hms
-		;;
-	h8300xray)
-		basic_machine=h8300-hitachi
-		os=-xray
-		;;
-	h8500hms)
-		basic_machine=h8500-hitachi
-		os=-hms
-		;;
-	harris)
-		basic_machine=m88k-harris
-		os=-sysv3
-		;;
-	hp300-*)
-		basic_machine=m68k-hp
-		;;
-	hp300bsd)
-		basic_machine=m68k-hp
-		os=-bsd
-		;;
-	hp300hpux)
-		basic_machine=m68k-hp
-		os=-hpux
-		;;
-	hp3k9[0-9][0-9] | hp9[0-9][0-9])
-		basic_machine=hppa1.0-hp
-		;;
-	hp9k2[0-9][0-9] | hp9k31[0-9])
-		basic_machine=m68000-hp
-		;;
-	hp9k3[2-9][0-9])
-		basic_machine=m68k-hp
-		;;
-	hp9k6[0-9][0-9] | hp6[0-9][0-9])
-		basic_machine=hppa1.0-hp
-		;;
-	hp9k7[0-79][0-9] | hp7[0-79][0-9])
-		basic_machine=hppa1.1-hp
-		;;
-	hp9k78[0-9] | hp78[0-9])
-		# FIXME: really hppa2.0-hp
-		basic_machine=hppa1.1-hp
-		;;
-	hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
-		# FIXME: really hppa2.0-hp
-		basic_machine=hppa1.1-hp
-		;;
-	hp9k8[0-9][13679] | hp8[0-9][13679])
-		basic_machine=hppa1.1-hp
-		;;
-	hp9k8[0-9][0-9] | hp8[0-9][0-9])
-		basic_machine=hppa1.0-hp
-		;;
-	hppa-next)
-		os=-nextstep3
-		;;
-	hppaosf)
-		basic_machine=hppa1.1-hp
-		os=-osf
-		;;
-	hppro)
-		basic_machine=hppa1.1-hp
-		os=-proelf
-		;;
-	i370-ibm* | ibm*)
-		basic_machine=i370-ibm
-		;;
-# I'm not sure what "Sysv32" means.  Should this be sysv3.2?
-	i[34567]86v32)
-		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
-		os=-sysv32
-		;;
-	i[34567]86v4*)
-		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
-		os=-sysv4
-		;;
-	i[34567]86v)
-		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
-		os=-sysv
-		;;
-	i[34567]86sol2)
-		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
-		os=-solaris2
-		;;
-	i386mach)
-		basic_machine=i386-mach
-		os=-mach
-		;;
-	i386-vsta | vsta)
-		basic_machine=i386-unknown
-		os=-vsta
-		;;
-	i386-go32 | go32)
-		basic_machine=i386-unknown
-		os=-go32
-		;;
-	i386-mingw32 | mingw32)
-		basic_machine=i386-unknown
-		os=-mingw32
-		;;
-	i386-qnx | qnx)
-		basic_machine=i386-qnx
-		;;
-	iris | iris4d)
-		basic_machine=mips-sgi
-		case $os in
-		    -irix*)
-			;;
-		    *)
-			os=-irix4
-			;;
-		esac
-		;;
-	isi68 | isi)
-		basic_machine=m68k-isi
-		os=-sysv
-		;;
-	m88k-omron*)
-		basic_machine=m88k-omron
-		;;
-	magnum | m3230)
-		basic_machine=mips-mips
-		os=-sysv
-		;;
-	merlin)
-		basic_machine=ns32k-utek
-		os=-sysv
-		;;
-	miniframe)
-		basic_machine=m68000-convergent
-		;;
-	*mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
-		basic_machine=m68k-atari
-		os=-mint
-		;;
-	mipsel*-linux*)
-		basic_machine=mipsel-unknown
-		os=-linux-gnu
-		;;
-	mips*-linux*)
-		basic_machine=mips-unknown
-		os=-linux-gnu
-		;;
-	mips3*-*)
-		basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
-		;;
-	mips3*)
-		basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
-		;;
-	monitor)
-		basic_machine=m68k-rom68k
-		os=-coff
-		;;
-	msdos)
-		basic_machine=i386-unknown
-		os=-msdos
-		;;
-	mvs)
-		basic_machine=i370-ibm
-		os=-mvs
-		;;
-	ncr3000)
-		basic_machine=i486-ncr
-		os=-sysv4
-		;;
-	netbsd386)
-		basic_machine=i386-unknown
-		os=-netbsd
-		;;
-	netwinder)
-		basic_machine=armv4l-rebel
-		os=-linux
-		;;
-	news | news700 | news800 | news900)
-		basic_machine=m68k-sony
-		os=-newsos
-		;;
-	news1000)
-		basic_machine=m68030-sony
-		os=-newsos
-		;;
-	news-3600 | risc-news)
-		basic_machine=mips-sony
-		os=-newsos
-		;;
-	necv70)
-		basic_machine=v70-nec
-		os=-sysv
-		;;
-	next | m*-next )
-		basic_machine=m68k-next
-		case $os in
-		    -nextstep* )
-			;;
-		    -ns2*)
-		      os=-nextstep2
-			;;
-		    *)
-		      os=-nextstep3
-			;;
-		esac
-		;;
-	nh3000)
-		basic_machine=m68k-harris
-		os=-cxux
-		;;
-	nh[45]000)
-		basic_machine=m88k-harris
-		os=-cxux
-		;;
-	nindy960)
-		basic_machine=i960-intel
-		os=-nindy
-		;;
-	mon960)
-		basic_machine=i960-intel
-		os=-mon960
-		;;
-	np1)
-		basic_machine=np1-gould
-		;;
-	op50n-* | op60c-*)
-		basic_machine=hppa1.1-oki
-		os=-proelf
-		;;
-	OSE68000 | ose68000)
-		basic_machine=m68000-ericsson
-		os=-ose
-		;;
-	os68k)
-		basic_machine=m68k-none
-		os=-os68k
-		;;
-	pa-hitachi)
-		basic_machine=hppa1.1-hitachi
-		os=-hiuxwe2
-		;;
-	paragon)
-		basic_machine=i860-intel
-		os=-osf
-		;;
-	pbd)
-		basic_machine=sparc-tti
-		;;
-	pbb)
-		basic_machine=m68k-tti
-		;;
-        pc532 | pc532-*)
-		basic_machine=ns32k-pc532
-		;;
-	pentium | p5 | k5 | k6 | nexen)
-		basic_machine=i586-pc
-		;;
-	pentiumpro | p6 | 6x86)
-		basic_machine=i686-pc
-		;;
-	pentiumii | pentium2)
-		basic_machine=i786-pc
-		;;
-	pentium-* | p5-* | k5-* | k6-* | nexen-*)
-		basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
-		;;
-	pentiumpro-* | p6-* | 6x86-*)
-		basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
-		;;
-	pentiumii-* | pentium2-*)
-		basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
-		;;
-	pn)
-		basic_machine=pn-gould
-		;;
-	power)	basic_machine=rs6000-ibm
-		;;
-	ppc)	basic_machine=powerpc-unknown
-	        ;;
-	ppc-*)	basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
-		;;
-	ppcle | powerpclittle | ppc-le | powerpc-little)
-		basic_machine=powerpcle-unknown
-	        ;;
-	ppcle-* | powerpclittle-*)
-		basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
-		;;
-	ps2)
-		basic_machine=i386-ibm
-		;;
-	rom68k)
-		basic_machine=m68k-rom68k
-		os=-coff
-		;;
-	rm[46]00)
-		basic_machine=mips-siemens
-		;;
-	rtpc | rtpc-*)
-		basic_machine=romp-ibm
-		;;
-	sa29200)
-		basic_machine=a29k-amd
-		os=-udi
-		;;
-	sequent)
-		basic_machine=i386-sequent
-		;;
-	sh)
-		basic_machine=sh-hitachi
-		os=-hms
-		;;
-	sparclite-wrs)
-		basic_machine=sparclite-wrs
-		os=-vxworks
-		;;
-	sps7)
-		basic_machine=m68k-bull
-		os=-sysv2
-		;;
-	spur)
-		basic_machine=spur-unknown
-		;;
-	st2000)
-		basic_machine=m68k-tandem
-		;;
-	stratus)
-		basic_machine=i860-stratus
-		os=-sysv4
-		;;
-	sun2)
-		basic_machine=m68000-sun
-		;;
-	sun2os3)
-		basic_machine=m68000-sun
-		os=-sunos3
-		;;
-	sun2os4)
-		basic_machine=m68000-sun
-		os=-sunos4
-		;;
-	sun3os3)
-		basic_machine=m68k-sun
-		os=-sunos3
-		;;
-	sun3os4)
-		basic_machine=m68k-sun
-		os=-sunos4
-		;;
-	sun4os3)
-		basic_machine=sparc-sun
-		os=-sunos3
-		;;
-	sun4os4)
-		basic_machine=sparc-sun
-		os=-sunos4
-		;;
-	sun4sol2)
-		basic_machine=sparc-sun
-		os=-solaris2
-		;;
-	sun3 | sun3-*)
-		basic_machine=m68k-sun
-		;;
-	sun4)
-		basic_machine=sparc-sun
-		;;
-	sun386 | sun386i | roadrunner)
-		basic_machine=i386-sun
-		;;
-	symmetry)
-		basic_machine=i386-sequent
-		os=-dynix
-		;;
-	t3e)
-		basic_machine=t3e-cray
-		os=-unicos
-		;;
-	tx39)
-		basic_machine=mipstx39-unknown
-		;;
-	tx39el)
-		basic_machine=mipstx39el-unknown
-		;;
-	tower | tower-32)
-		basic_machine=m68k-ncr
-		;;
-	udi29k)
-		basic_machine=a29k-amd
-		os=-udi
-		;;
-	ultra3)
-		basic_machine=a29k-nyu
-		os=-sym1
-		;;
-	v810 | necv810)
-		basic_machine=v810-nec
-		os=-none
-		;;
-	vaxv)
-		basic_machine=vax-dec
-		os=-sysv
-		;;
-	vms)
-		basic_machine=vax-dec
-		os=-vms
-		;;
-	vpp*|vx|vx-*)
-               basic_machine=f301-fujitsu
-               ;;
-	vxworks960)
-		basic_machine=i960-wrs
-		os=-vxworks
-		;;
-	vxworks68)
-		basic_machine=m68k-wrs
-		os=-vxworks
-		;;
-	vxworks29k)
-		basic_machine=a29k-wrs
-		os=-vxworks
-		;;
-	w65*)
-		basic_machine=w65-wdc
-		os=-none
-		;;
-	w89k-*)
-		basic_machine=hppa1.1-winbond
-		os=-proelf
-		;;
-	xmp)
-		basic_machine=xmp-cray
-		os=-unicos
-		;;
-        xps | xps100)
-		basic_machine=xps100-honeywell
-		;;
-	z8k-*-coff)
-		basic_machine=z8k-unknown
-		os=-sim
-		;;
-	none)
-		basic_machine=none-none
-		os=-none
-		;;
-
-# Here we handle the default manufacturer of certain CPU types.  It is in
-# some cases the only manufacturer, in others, it is the most popular.
-	w89k)
-		basic_machine=hppa1.1-winbond
-		;;
-	op50n)
-		basic_machine=hppa1.1-oki
-		;;
-	op60c)
-		basic_machine=hppa1.1-oki
-		;;
-	mips)
-		if [ x$os = x-linux-gnu ]; then
-			basic_machine=mips-unknown
-		else
-			basic_machine=mips-mips
-		fi
-		;;
-	romp)
-		basic_machine=romp-ibm
-		;;
-	rs6000)
-		basic_machine=rs6000-ibm
-		;;
-	vax)
-		basic_machine=vax-dec
-		;;
-	pdp11)
-		basic_machine=pdp11-dec
-		;;
-	we32k)
-		basic_machine=we32k-att
-		;;
-	sparc | sparcv9)
-		basic_machine=sparc-sun
-		;;
-        cydra)
-		basic_machine=cydra-cydrome
-		;;
-	orion)
-		basic_machine=orion-highlevel
-		;;
-	orion105)
-		basic_machine=clipper-highlevel
-		;;
-	mac | mpw | mac-mpw)
-		basic_machine=m68k-apple
-		;;
-	pmac | pmac-mpw)
-		basic_machine=powerpc-apple
-		;;
-	c4x*)
-		basic_machine=c4x-none
-		os=-coff
-		;;
-	*)
-		echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
-		exit 1
-		;;
-esac
-
-# Here we canonicalize certain aliases for manufacturers.
-case $basic_machine in
-	*-digital*)
-		basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
-		;;
-	*-commodore*)
-		basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
-		;;
-	*)
-		;;
-esac
-
-# Decode manufacturer-specific aliases for certain operating systems.
-
-if [ x"$os" != x"" ]
-then
-case $os in
-        # First match some system type aliases
-        # that might get confused with valid system types.
-	# -solaris* is a basic system type, with this one exception.
-	-solaris1 | -solaris1.*)
-		os=`echo $os | sed -e 's|solaris1|sunos4|'`
-		;;
-	-solaris)
-		os=-solaris2
-		;;
-	-svr4*)
-		os=-sysv4
-		;;
-	-unixware*)
-		os=-sysv4.2uw
-		;;
-	-gnu/linux*)
-		os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
-		;;
-	# First accept the basic system types.
-	# The portable systems comes first.
-	# Each alternative MUST END IN A *, to match a version number.
-	# -sysv* is not here because it comes later, after sysvr4.
-	-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
-	      | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
-	      | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
-	      | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
-	      | -aos* \
-	      | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
-	      | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
-	      | -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \
-	      | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
-	      | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
-	      | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
-	      | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
-	      | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \
-	      | -interix* | -uwin* | -rhapsody* | -opened* | -openstep* | -oskit*)
-	# Remember, each alternative MUST END IN *, to match a version number.
-		;;
-	-sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
-	      | -windows* | -osx | -abug | -netware* | -os9* | -beos* \
-	      | -macos* | -mpw* | -magic* | -mon960* | -lnews*)
-		;;
-	-mac*)
-		os=`echo $os | sed -e 's|mac|macos|'`
-		;;
-	-linux*)
-		os=`echo $os | sed -e 's|linux|linux-gnu|'`
-		;;
-	-sunos5*)
-		os=`echo $os | sed -e 's|sunos5|solaris2|'`
-		;;
-	-sunos6*)
-		os=`echo $os | sed -e 's|sunos6|solaris3|'`
-		;;
-	-opened*)
-		os=-openedition
-		;;
-	-osfrose*)
-		os=-osfrose
-		;;
-	-osf*)
-		os=-osf
-		;;
-	-utek*)
-		os=-bsd
-		;;
-	-dynix*)
-		os=-bsd
-		;;
-	-acis*)
-		os=-aos
-		;;
-	-386bsd)
-		os=-bsd
-		;;
-	-ctix* | -uts*)
-		os=-sysv
-		;;
-	-ns2 )
-	        os=-nextstep2
-		;;
-	# Preserve the version number of sinix5.
-	-sinix5.*)
-		os=`echo $os | sed -e 's|sinix|sysv|'`
-		;;
-	-sinix*)
-		os=-sysv4
-		;;
-	-triton*)
-		os=-sysv3
-		;;
-	-oss*)
-		os=-sysv3
-		;;
-        -qnx)
-		os=-qnx4
-		;;
-	-svr4)
-		os=-sysv4
-		;;
-	-svr3)
-		os=-sysv3
-		;;
-	-sysvr4)
-		os=-sysv4
-		;;
-	# This must come after -sysvr4.
-	-sysv*)
-		;;
-	-ose*)
-		os=-ose
-		;;
-	-es1800*)
-		os=-ose
-		;;
-	-xenix)
-		os=-xenix
-		;;
-        -*mint | -*MiNT)
-	        os=-mint
-		;;
-	-none)
-		;;
-	*)
-		# Get rid of the `-' at the beginning of $os.
-		os=`echo $os | sed 's/[^-]*-//'`
-		echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
-		exit 1
-		;;
-esac
-else
-
-# Here we handle the default operating systems that come with various machines.
-# The value should be what the vendor currently ships out the door with their
-# machine or put another way, the most popular os provided with the machine.
-
-# Note that if you're going to try to match "-MANUFACTURER" here (say,
-# "-sun"), then you have to tell the case statement up towards the top
-# that MANUFACTURER isn't an operating system.  Otherwise, code above
-# will signal an error saying that MANUFACTURER isn't an operating
-# system, and we'll never get to this point.
-
-case $basic_machine in
-	*-acorn)
-		os=-riscix1.2
-		;;
-	arm*-rebel)
-		os=-linux
-		;;
-	arm*-semi)
-		os=-aout
-		;;
-        pdp11-*)
-		os=-none
-		;;
-	*-dec | vax-*)
-		os=-ultrix4.2
-		;;
-	m68*-apollo)
-		os=-domain
-		;;
-	i386-sun)
-		os=-sunos4.0.2
-		;;
-	m68000-sun)
-		os=-sunos3
-		# This also exists in the configure program, but was not the
-		# default.
-		# os=-sunos4
-		;;
-	m68*-cisco)
-		os=-aout
-		;;
-	mips*-cisco)
-		os=-elf
-		;;
-	mips*-*)
-		os=-elf
-		;;
-	*-tti)	# must be before sparc entry or we get the wrong os.
-		os=-sysv3
-		;;
-	sparc-* | *-sun)
-		os=-sunos4.1.1
-		;;
-	*-be)
-		os=-beos
-		;;
-	*-ibm)
-		os=-aix
-		;;
-	*-wec)
-		os=-proelf
-		;;
-	*-winbond)
-		os=-proelf
-		;;
-	*-oki)
-		os=-proelf
-		;;
-	*-hp)
-		os=-hpux
-		;;
-	*-hitachi)
-		os=-hiux
-		;;
-	i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
-		os=-sysv
-		;;
-	*-cbm)
-		os=-amigaos
-		;;
-	*-dg)
-		os=-dgux
-		;;
-	*-dolphin)
-		os=-sysv3
-		;;
-	m68k-ccur)
-		os=-rtu
-		;;
-	m88k-omron*)
-		os=-luna
-		;;
-	*-next )
-		os=-nextstep
-		;;
-	*-sequent)
-		os=-ptx
-		;;
-	*-crds)
-		os=-unos
-		;;
-	*-ns)
-		os=-genix
-		;;
-	i370-*)
-		os=-mvs
-		;;
-	*-next)
-		os=-nextstep3
-		;;
-        *-gould)
-		os=-sysv
-		;;
-        *-highlevel)
-		os=-bsd
-		;;
-	*-encore)
-		os=-bsd
-		;;
-        *-sgi)
-		os=-irix
-		;;
-        *-siemens)
-		os=-sysv4
-		;;
-	*-masscomp)
-		os=-rtu
-		;;
-	f301-fujitsu)
-		os=-uxpv
-		;;
-	*-rom68k)
-		os=-coff
-		;;
-	*-*bug)
-		os=-coff
-		;;
-	*-apple)
-		os=-macos
-		;;
-	*-atari*)
-		os=-mint
-		;;
-	*)
-		os=-none
-		;;
-esac
-fi
-
-# Here we handle the case where we know the os, and the CPU type, but not the
-# manufacturer.  We pick the logical manufacturer.
-vendor=unknown
-case $basic_machine in
-	*-unknown)
-		case $os in
-			-riscix*)
-				vendor=acorn
-				;;
-			-sunos*)
-				vendor=sun
-				;;
-			-aix*)
-				vendor=ibm
-				;;
-			-beos*)
-				vendor=be
-				;;
-			-hpux*)
-				vendor=hp
-				;;
-			-mpeix*)
-				vendor=hp
-				;;
-			-hiux*)
-				vendor=hitachi
-				;;
-			-unos*)
-				vendor=crds
-				;;
-			-dgux*)
-				vendor=dg
-				;;
-			-luna*)
-				vendor=omron
-				;;
-			-genix*)
-				vendor=ns
-				;;
-			-mvs* | -opened*)
-				vendor=ibm
-				;;
-			-ptx*)
-				vendor=sequent
-				;;
-			-vxsim* | -vxworks*)
-				vendor=wrs
-				;;
-			-aux*)
-				vendor=apple
-				;;
-			-hms*)
-				vendor=hitachi
-				;;
-			-mpw* | -macos*)
-				vendor=apple
-				;;
-			-*mint | -*MiNT)
-				vendor=atari
-				;;
-		esac
-		basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
-		;;
-esac
-
-echo $basic_machine$os
diff --git a/srclib/pcre/configure.in b/srclib/pcre/configure.in
deleted file mode 100644
index 0b15310..0000000
--- a/srclib/pcre/configure.in
+++ /dev/null
@@ -1,75 +0,0 @@
-dnl Process this file with autoconf to produce a configure script.
-
-dnl This is required at the start; the name is the name of a file
-dnl it should be seeing, to verify it is in the same directory.
-
-AC_INIT(dftables.c)
-
-dnl Arrange to build config.h from config.in. Note that pcre.h is
-dnl built differently, as it is just a "substitution" file.
-dnl Manual says this macro should come right after AC_INIT.
-AC_CONFIG_HEADER(config.h:config.in)
-
-dnl Provide the current PCRE version information. Do not use numbers
-dnl with leading zeros for the minor version, as they end up in a C
-dnl macro, and may be treated as octal constants. Stick to single
-dnl digits for minor numbers less than 10. There are unlikely to be
-dnl that many releases anyway.
-
-PCRE_MAJOR=3
-PCRE_MINOR=2
-PCRE_DATE=12-May-2000
-PCRE_VERSION=${PCRE_MAJOR}.${PCRE_MINOR}
-
-dnl Provide versioning information for libtool shared libraries that
-dnl are built by default on Unix systems.
-
-PCRE_LIB_VERSION=0:1:0
-PCRE_POSIXLIB_VERSION=0:0:0
-
-dnl Checks for programs.
-
-AC_PROG_CC
-AC_PROG_RANLIB
-
-dnl Checks for header files.
-
-AC_HEADER_STDC
-AC_CHECK_HEADERS(limits.h)
-
-dnl Checks for typedefs, structures, and compiler characteristics.
-
-AC_C_CONST
-AC_TYPE_SIZE_T
-
-dnl Checks for library functions.
-
-AC_CHECK_FUNCS(bcopy memmove strerror)
-
-dnl Handle --enable-shared-libraries
-
-LIBTOOL=./libtool
-LIBSUFFIX=la
-AC_ARG_ENABLE(shared,
-[  --disable-shared        build PCRE as a static library],
-if test "$enableval" = "no"; then
-  LIBTOOL=
-  LIBSUFFIX=a
-fi
-)
-
-dnl "Export" these variables
-
-AC_SUBST(HAVE_MEMMOVE)
-AC_SUBST(HAVE_STRERROR)
-AC_SUBST(LIBTOOL)
-AC_SUBST(LIBSUFFIX)
-AC_SUBST(PCRE_MAJOR)
-AC_SUBST(PCRE_MINOR)
-AC_SUBST(PCRE_DATE)
-AC_SUBST(PCRE_VERSION)
-AC_SUBST(PCRE_LIB_VERSION)
-AC_SUBST(PCRE_POSIXLIB_VERSION)
-
-dnl This must be last; it determines what files are written
-AC_OUTPUT(Makefile pcre.h:pcre.in pcre-config,[chmod a+x pcre-config])
diff --git a/srclib/pcre/dftables.c b/srclib/pcre/dftables.c
deleted file mode 100644
index d572dfd..0000000
--- a/srclib/pcre/dftables.c
+++ /dev/null
@@ -1,148 +0,0 @@
-/*************************************************
-*      Perl-Compatible Regular Expressions       *
-*************************************************/
-
-/*
-PCRE is a library of functions to support regular expressions whose syntax
-and semantics are as close as possible to those of the Perl 5 language.
-
-Written by: Philip Hazel <ph10@cam.ac.uk>
-
-           Copyright (c) 1997-2000 University of Cambridge
-
------------------------------------------------------------------------------
-Permission is granted to anyone to use this software for any purpose on any
-computer system, and to redistribute it freely, subject to the following
-restrictions:
-
-1. This software is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-
-2. The origin of this software must not be misrepresented, either by
-   explicit claim or by omission.
-
-3. Altered versions must be plainly marked as such, and must not be
-   misrepresented as being the original software.
-
-4. If PCRE is embedded in any software that is released under the GNU
-   General Purpose Licence (GPL), then the terms of that licence shall
-   supersede any condition above with which it is incompatible.
------------------------------------------------------------------------------
-
-See the file Tech.Notes for some information on the internals.
-*/
-
-
-/* This is a support program to generate the file chartables.c, containing
-character tables of various kinds. They are built according to the default C
-locale and used as the default tables by PCRE. Now that pcre_maketables is
-a function visible to the outside world, we make use of its code from here in
-order to be consistent. */
-
-#include <ctype.h>
-#include <stdio.h>
-#include <string.h>
-
-#include "internal.h"
-
-#define DFTABLES          /* maketables.c notices this */
-#include "maketables.c"
-
-
-int main(void)
-{
-int i;
-unsigned const char *tables = pcre_maketables();
-
-printf(
-  "/*************************************************\n"
-  "*      Perl-Compatible Regular Expressions       *\n"
-  "*************************************************/\n\n"
-  "/* This file is automatically written by the dftables auxiliary \n"
-  "program. If you edit it by hand, you might like to edit the Makefile to \n"
-  "prevent its ever being regenerated.\n\n"
-  "This file is #included in the compilation of pcre.c to build the default\n"
-  "character tables which are used when no tables are passed to the compile\n"
-  "function. */\n\n"
-  "static unsigned char pcre_default_tables[] = {\n\n"
-  "/* This table is a lower casing table. */\n\n");
-
-printf("  ");
-for (i = 0; i < 256; i++)
-  {
-  if ((i & 7) == 0 && i != 0) printf("\n  ");
-  printf("%3d", *tables++);
-  if (i != 255) printf(",");
-  }
-printf(",\n\n");
-
-printf("/* This table is a case flipping table. */\n\n");
-
-printf("  ");
-for (i = 0; i < 256; i++)
-  {
-  if ((i & 7) == 0 && i != 0) printf("\n  ");
-  printf("%3d", *tables++);
-  if (i != 255) printf(",");
-  }
-printf(",\n\n");
-
-printf(
-  "/* This table contains bit maps for various character classes.\n"
-  "Each map is 32 bytes long and the bits run from the least\n"
-  "significant end of each byte. The classes that have their own\n"
-  "maps are: space, xdigit, digit, upper, lower, word, graph\n"
-  "print, punct, and cntrl. Other classes are built from combinations. */\n\n");
-
-printf("  ");
-for (i = 0; i < cbit_length; i++)
-  {
-  if ((i & 7) == 0 && i != 0)
-    {
-    if ((i & 31) == 0) printf("\n");
-    printf("\n  ");
-    }
-  printf("0x%02x", *tables++);
-  if (i != cbit_length - 1) printf(",");
-  }
-printf(",\n\n");
-
-printf(
-  "/* This table identifies various classes of character by individual bits:\n"
-  "  0x%02x   white space character\n"
-  "  0x%02x   letter\n"
-  "  0x%02x   decimal digit\n"
-  "  0x%02x   hexadecimal digit\n"
-  "  0x%02x   alphanumeric or '_'\n"
-  "  0x%02x   regular expression metacharacter or binary zero\n*/\n\n",
-  ctype_space, ctype_letter, ctype_digit, ctype_xdigit, ctype_word,
-  ctype_meta);
-
-printf("  ");
-for (i = 0; i < 256; i++)
-  {
-  if ((i & 7) == 0 && i != 0)
-    {
-    printf(" /* ");
-    if (isprint(i-8)) printf(" %c -", i-8);
-      else printf("%3d-", i-8);
-    if (isprint(i-1)) printf(" %c ", i-1);
-      else printf("%3d", i-1);
-    printf(" */\n  ");
-    }
-  printf("0x%02x", *tables++);
-  if (i != 255) printf(",");
-  }
-
-printf("};/* ");
-if (isprint(i-8)) printf(" %c -", i-8);
-  else printf("%3d-", i-8);
-if (isprint(i-1)) printf(" %c ", i-1);
-  else printf("%3d", i-1);
-printf(" */\n\n/* End of chartables.c */\n");
-
-return 0;
-}
-
-/* End of dftables.c */
diff --git a/srclib/pcre/dftables.dsp b/srclib/pcre/dftables.dsp
deleted file mode 100644
index 46697f5..0000000
--- a/srclib/pcre/dftables.dsp
+++ /dev/null
@@ -1,169 +0,0 @@
-# Microsoft Developer Studio Project File - Name="dftables" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Console Application" 0x0103
-
-CFG=dftables - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "dftables.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "dftables.mak" CFG="dftables - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "dftables - Win32 Release" (based on "Win32 (x86) Console Application")
-!MESSAGE "dftables - Win32 Debug" (based on "Win32 (x86) Console Application")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "dftables - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir ""
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir ""
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "_WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /Fd"Release\dftables" /FD /c
-# ADD CPP /nologo /MD /W3 /O2 /D "_WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /Fd"Release\dftables" /FD /c
-# ADD BASE RSC /l 0x809 /d "NDEBUG"
-# ADD RSC /l 0x809 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:console /pdb:"Release\dftables.pdb" /map /machine:I386
-# SUBTRACT BASE LINK32 /pdb:none
-# ADD LINK32 kernel32.lib /nologo /subsystem:console /pdb:"Release\dftables.pdb" /map /machine:I386
-# SUBTRACT LINK32 /pdb:none
-
-!ELSEIF  "$(CFG)" == "dftables - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir ""
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir ""
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "_WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /Fd"Debug\dftables" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /D "_WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /Fd"Debug\dftables" /FD /c
-# ADD BASE RSC /l 0x809 /d "_DEBUG"
-# ADD RSC /l 0x809 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib /nologo /subsystem:console /incremental:no /pdb:"Debug\dftables.pdb" /map /debug /machine:I386 /pdbtype:sept
-# SUBTRACT BASE LINK32 /pdb:none
-# ADD LINK32 kernel32.lib /nologo /subsystem:console /incremental:no /pdb:"Debug\dftables.pdb" /map /debug /machine:I386
-# SUBTRACT LINK32 /pdb:none
-
-!ENDIF 
-
-# Begin Target
-
-# Name "dftables - Win32 Release"
-# Name "dftables - Win32 Debug"
-# Begin Group "Source Files"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\dftables.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hw"
-# Begin Source File
-
-SOURCE=.\config.hw
-
-!IF  "$(CFG)" == "dftables - Win32 Release"
-
-# Begin Custom Build
-InputPath=.\config.hw
-
-".\config.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	copy .\config.hw .\config.h >nul 
-	echo Created pcre config.h from config.hw 
-	
-# End Custom Build
-
-!ELSEIF  "$(CFG)" == "dftables - Win32 Debug"
-
-# Begin Custom Build
-InputPath=.\config.hw
-
-".\config.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	copy .\config.hw .\config.h >nul 
-	echo Created pcre config.h from config.hw 
-	
-# End Custom Build
-
-!ENDIF 
-
-# End Source File
-# Begin Source File
-
-SOURCE=.\internal.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\maketables.c
-# PROP Exclude_From_Build 1
-# End Source File
-# Begin Source File
-
-SOURCE=.\pcre.hw
-
-!IF  "$(CFG)" == "dftables - Win32 Release"
-
-# Begin Custom Build
-InputPath=.\pcre.hw
-
-".\pcre.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	copy .\pcre.hw .\pcre.h >nul 
-	echo Created pcre.h from pcre.hw 
-	
-# End Custom Build
-
-!ELSEIF  "$(CFG)" == "dftables - Win32 Debug"
-
-# Begin Custom Build
-InputPath=.\pcre.hw
-
-".\pcre.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	copy .\pcre.hw .\pcre.h >nul 
-	echo Created pcre.h from pcre.hw 
-	
-# End Custom Build
-
-!ENDIF 
-
-# End Source File
-# End Group
-# End Target
-# End Project
diff --git a/srclib/pcre/dll.mk b/srclib/pcre/dll.mk
deleted file mode 100644
index d8b728e..0000000
--- a/srclib/pcre/dll.mk
+++ /dev/null
@@ -1,60 +0,0 @@
-# dll.mk - auxilary Makefile to easy build dll's for mingw32 target
-# ver. 0.6 of 1999-03-25
-#
-# Homepage of this makefile - http://www.is.lg.ua/~paul/devel/
-# Homepage of original mingw32 project -
-#		      http://www.fu.is.saga-u.ac.jp/~colin/gcc.html
-#
-# How to use:
-# This makefile can:
-# 1. Create automatical .def file from list of objects
-# 2. Create .dll from objects and .def file, either automatical, or your
-#    hand-written (maybe) file, which must have same basename as dll
-# WARNING! There MUST be object, which name match dll's name. Make sux.
-# 3. Create import library from .def (as for .dll, only its name required,
-#    not dll itself)
-#    By convention implibs for dll have .dll.a suffix, e.g. libstuff.dll.a
-#    Why not just libstuff.a? 'Cos that's name for static lib, ok?
-# Process divided into 3 phases because:
-# 1. Pre-existent .def possible
-# 2. Generating implib is enough time-consuming
-#
-# Variables:
-#   DLL_LDLIBS  - libs for linking dll
-#   DLL_LDFLAGS - flags for linking dll
-#
-# By using $(DLL_SUFFIX) instead of 'dll', e.g. stuff.$(DLL_SUFFIX)
-# you may help porting makefiles to other platforms
-#
-# Put this file in your make's include path (e.g. main include dir, for
-# more information see include section in make doc). Put in the beginning
-# of your own Makefile line "include dll.mk". Specify dependences, e.g.:
-#
-# Do all stuff in one step
-# libstuff.dll.a: $(OBJECTS) stuff.def
-# stuff.def: $(OBJECTS)
-#
-# Steps separated, pre-provided .def, link with user32
-#
-# DLL_LDLIBS=-luser32
-# stuff.dll: $(OBJECTS)
-# libstuff.dll.a: $(OBJECTS)
-
-
-DLLWRAP=dllwrap
-DLLTOOL=dlltool
-
-DLL_SUFFIX=dll
-
-.SUFFIXES: .o .$(DLL_SUFFIX)
-
-_%.def: %.o
-      $(DLLTOOL) --export-all --output-def $@ $^
-
-%.$(DLL_SUFFIX): %.o
-      $(DLLWRAP) --dllname $(notdir $@) --driver-name $(CC) --def $*.def -o $@ $(filter %.o,$^) $(DLL_LDFLAGS) $(DLL_LDLIBS)
-
-lib%.$(DLL_SUFFIX).a:%.def
-      $(DLLTOOL) --dllname $(notdir $*.dll) --def $< --output-lib $@
-
-# End
diff --git a/srclib/pcre/doc/Tech.Notes b/srclib/pcre/doc/Tech.Notes
deleted file mode 100644
index 03904db..0000000
--- a/srclib/pcre/doc/Tech.Notes
+++ /dev/null
@@ -1,242 +0,0 @@
-Technical Notes about PCRE
---------------------------
-
-Many years ago I implemented some regular expression functions to an algorithm
-suggested by Martin Richards. These were not Unix-like in form, and were quite
-restricted in what they could do by comparison with Perl. The interesting part
-about the algorithm was that the amount of space required to hold the compiled
-form of an expression was known in advance. The code to apply an expression did
-not operate by backtracking, as the Henry Spencer and Perl code does, but
-instead checked all possibilities simultaneously by keeping a list of current
-states and checking all of them as it advanced through the subject string. (In
-the terminology of Jeffrey Friedl's book, it was a "DFA algorithm".) When the
-pattern was all used up, all remaining states were possible matches, and the
-one matching the longest subset of the subject string was chosen. This did not
-necessarily maximize the individual wild portions of the pattern, as is
-expected in Unix and Perl-style regular expressions.
-
-By contrast, the code originally written by Henry Spencer and subsequently
-heavily modified for Perl actually compiles the expression twice: once in a
-dummy mode in order to find out how much store will be needed, and then for
-real. The execution function operates by backtracking and maximizing (or,
-optionally, minimizing in Perl) the amount of the subject that matches
-individual wild portions of the pattern. This is an "NFA algorithm" in Friedl's
-terminology.
-
-For the set of functions that forms PCRE (which are unrelated to those
-mentioned above), I tried at first to invent an algorithm that used an amount
-of store bounded by a multiple of the number of characters in the pattern, to
-save on compiling time. However, because of the greater complexity in Perl
-regular expressions, I couldn't do this. In any case, a first pass through the
-pattern is needed, in order to find internal flag settings like (?i) at top
-level. So PCRE works by running a very degenerate first pass to calculate a
-maximum store size, and then a second pass to do the real compile - which may
-use a bit less than the predicted amount of store. The idea is that this is
-going to turn out faster because the first pass is degenerate and the second
-pass can just store stuff straight into the vector. It does make the compiling
-functions bigger, of course, but they have got quite big anyway to handle all
-the Perl stuff.
-
-The compiled form of a pattern is a vector of bytes, containing items of
-variable length. The first byte in an item is an opcode, and the length of the
-item is either implicit in the opcode or contained in the data bytes which
-follow it. A list of all the opcodes follows:
-
-Opcodes with no following data
-------------------------------
-
-These items are all just one byte long
-
-  OP_END                 end of pattern
-  OP_ANY                 match any character
-  OP_SOD                 match start of data: \A
-  OP_CIRC                ^ (start of data, or after \n in multiline)
-  OP_NOT_WORD_BOUNDARY   \W
-  OP_WORD_BOUNDARY       \w
-  OP_NOT_DIGIT           \D
-  OP_DIGIT               \d
-  OP_NOT_WHITESPACE      \S
-  OP_WHITESPACE          \s
-  OP_NOT_WORDCHAR        \W
-  OP_WORDCHAR            \w
-  OP_EODN                match end of data or \n at end: \Z
-  OP_EOD                 match end of data: \z
-  OP_DOLL                $ (end of data, or before \n in multiline)
-  OP_RECURSE             match the pattern recursively
-
-
-Repeating single characters
----------------------------
-
-The common repeats (*, +, ?) when applied to a single character appear as
-two-byte items using the following opcodes:
-
-  OP_STAR
-  OP_MINSTAR
-  OP_PLUS
-  OP_MINPLUS
-  OP_QUERY
-  OP_MINQUERY
-
-Those with "MIN" in their name are the minimizing versions. Each is followed by
-the character that is to be repeated. Other repeats make use of
-
-  OP_UPTO
-  OP_MINUPTO
-  OP_EXACT
-
-which are followed by a two-byte count (most significant first) and the
-repeated character. OP_UPTO matches from 0 to the given number. A repeat with a
-non-zero minimum and a fixed maximum is coded as an OP_EXACT followed by an
-OP_UPTO (or OP_MINUPTO).
-
-
-Repeating character types
--------------------------
-
-Repeats of things like \d are done exactly as for single characters, except
-that instead of a character, the opcode for the type is stored in the data
-byte. The opcodes are:
-
-  OP_TYPESTAR
-  OP_TYPEMINSTAR
-  OP_TYPEPLUS
-  OP_TYPEMINPLUS
-  OP_TYPEQUERY
-  OP_TYPEMINQUERY
-  OP_TYPEUPTO
-  OP_TYPEMINUPTO
-  OP_TYPEEXACT
-
-
-Matching a character string
----------------------------
-
-The OP_CHARS opcode is followed by a one-byte count and then that number of
-characters. If there are more than 255 characters in sequence, successive
-instances of OP_CHARS are used.
-
-
-Character classes
------------------
-
-OP_CLASS is used for a character class, provided there are at least two
-characters in the class. If there is only one character, OP_CHARS is used for a
-positive class, and OP_NOT for a negative one (that is, for something like
-[^a]). Another set of repeating opcodes (OP_NOTSTAR etc.) are used for a
-repeated, negated, single-character class. The normal ones (OP_STAR etc.) are
-used for a repeated positive single-character class.
-
-OP_CLASS is followed by a 32-byte bit map containing a 1 bit for every
-character that is acceptable. The bits are counted from the least significant
-end of each byte.
-
-
-Back references
----------------
-
-OP_REF is followed by a single byte containing the reference number.
-
-
-Repeating character classes and back references
------------------------------------------------
-
-Single-character classes are handled specially (see above). This applies to
-OP_CLASS and OP_REF. In both cases, the repeat information follows the base
-item. The matching code looks at the following opcode to see if it is one of
-
-  OP_CRSTAR
-  OP_CRMINSTAR
-  OP_CRPLUS
-  OP_CRMINPLUS
-  OP_CRQUERY
-  OP_CRMINQUERY
-  OP_CRRANGE
-  OP_CRMINRANGE
-
-All but the last two are just single-byte items. The others are followed by
-four bytes of data, comprising the minimum and maximum repeat counts.
-
-
-Brackets and alternation
-------------------------
-
-A pair of non-capturing (round) brackets is wrapped round each expression at
-compile time, so alternation always happens in the context of brackets.
-Non-capturing brackets use the opcode OP_BRA, while capturing brackets use
-OP_BRA+1, OP_BRA+2, etc. [Note for North Americans: "bracket" to some English
-speakers, including myself, can be round, square, curly, or pointy. Hence this
-usage.]
-
-A bracket opcode is followed by two bytes which give the offset to the next
-alternative OP_ALT or, if there aren't any branches, to the matching KET
-opcode. Each OP_ALT is followed by two bytes giving the offset to the next one,
-or to the KET opcode.
-
-OP_KET is used for subpatterns that do not repeat indefinitely, while
-OP_KETRMIN and OP_KETRMAX are used for indefinite repetitions, minimally or
-maximally respectively. All three are followed by two bytes giving (as a
-positive number) the offset back to the matching BRA opcode.
-
-If a subpattern is quantified such that it is permitted to match zero times, it
-is preceded by one of OP_BRAZERO or OP_BRAMINZERO. These are single-byte
-opcodes which tell the matcher that skipping this subpattern entirely is a
-valid branch.
-
-A subpattern with an indefinite maximum repetition is replicated in the
-compiled data its minimum number of times (or once with a BRAZERO if the
-minimum is zero), with the final copy terminating with a KETRMIN or KETRMAX as
-appropriate.
-
-A subpattern with a bounded maximum repetition is replicated in a nested
-fashion up to the maximum number of times, with BRAZERO or BRAMINZERO before
-each replication after the minimum, so that, for example, (abc){2,5} is
-compiled as (abc)(abc)((abc)((abc)(abc)?)?)?. The 200-bracket limit does not
-apply to these internally generated brackets.
-
-
-Assertions
-----------
-
-Forward assertions are just like other subpatterns, but starting with one of
-the opcodes OP_ASSERT or OP_ASSERT_NOT. Backward assertions use the opcodes
-OP_ASSERTBACK and OP_ASSERTBACK_NOT, and the first opcode inside the assertion
-is OP_REVERSE, followed by a two byte count of the number of characters to move
-back the pointer in the subject string. A separate count is present in each
-alternative of a lookbehind assertion, allowing them to have different fixed
-lengths.
-
-
-Once-only subpatterns
----------------------
-
-These are also just like other subpatterns, but they start with the opcode
-OP_ONCE.
-
-
-Conditional subpatterns
------------------------
-
-These are like other subpatterns, but they start with the opcode OP_COND. If
-the condition is a back reference, this is stored at the start of the
-subpattern using the opcode OP_CREF followed by one byte containing the
-reference number. Otherwise, a conditional subpattern will always start with
-one of the assertions.
-
-
-Changing options
-----------------
-
-If any of the /i, /m, or /s options are changed within a parenthesized group,
-an OP_OPT opcode is compiled, followed by one byte containing the new settings
-of these flags. If there are several alternatives in a group, there is an
-occurrence of OP_OPT at the start of all those following the first options
-change, to set appropriate options for the start of the alternative.
-Immediately after the end of the group there is another such item to reset the
-flags to their previous values. Other changes of flag within the pattern can be
-handled entirely at compile time, and so do not cause anything to be put into
-the compiled data.
-
-
-Philip Hazel
-February 2000
diff --git a/srclib/pcre/doc/pcre.3 b/srclib/pcre/doc/pcre.3
deleted file mode 100644
index 4334be2..0000000
--- a/srclib/pcre/doc/pcre.3
+++ /dev/null
@@ -1,1701 +0,0 @@
-.TH PCRE 3
-.SH NAME
-pcre - Perl-compatible regular expressions.
-.SH SYNOPSIS
-.B #include <pcre.h>
-.PP
-.SM
-.br
-.B pcre *pcre_compile(const char *\fIpattern\fR, int \fIoptions\fR,
-.ti +5n
-.B const char **\fIerrptr\fR, int *\fIerroffset\fR,
-.ti +5n
-.B const unsigned char *\fItableptr\fR);
-.PP
-.br
-.B pcre_extra *pcre_study(const pcre *\fIcode\fR, int \fIoptions\fR,
-.ti +5n
-.B const char **\fIerrptr\fR);
-.PP
-.br
-.B int pcre_exec(const pcre *\fIcode\fR, "const pcre_extra *\fIextra\fR,"
-.ti +5n
-.B "const char *\fIsubject\fR," int \fIlength\fR, int \fIstartoffset\fR,
-.ti +5n
-.B int \fIoptions\fR, int *\fIovector\fR, int \fIovecsize\fR);
-.PP
-.br
-.B int pcre_copy_substring(const char *\fIsubject\fR, int *\fIovector\fR,
-.ti +5n
-.B int \fIstringcount\fR, int \fIstringnumber\fR, char *\fIbuffer\fR,
-.ti +5n
-.B int \fIbuffersize\fR);
-.PP
-.br
-.B int pcre_get_substring(const char *\fIsubject\fR, int *\fIovector\fR,
-.ti +5n
-.B int \fIstringcount\fR, int \fIstringnumber\fR,
-.ti +5n
-.B const char **\fIstringptr\fR);
-.PP
-.br
-.B int pcre_get_substring_list(const char *\fIsubject\fR,
-.ti +5n
-.B int *\fIovector\fR, int \fIstringcount\fR, "const char ***\fIlistptr\fR);"
-.PP
-.br
-.B const unsigned char *pcre_maketables(void);
-.PP
-.br
-.B int pcre_fullinfo(const pcre *\fIcode\fR, "const pcre_extra *\fIextra\fR,"
-.ti +5n
-.B int \fIwhat\fR, void *\fIwhere\fR);
-.PP
-.br
-.B int pcre_info(const pcre *\fIcode\fR, int *\fIoptptr\fR, int
-.B *\fIfirstcharptr\fR);
-.PP
-.br
-.B char *pcre_version(void);
-.PP
-.br
-.B void *(*pcre_malloc)(size_t);
-.PP
-.br
-.B void (*pcre_free)(void *);
-
-
-
-.SH DESCRIPTION
-The PCRE library is a set of functions that implement regular expression
-pattern matching using the same syntax and semantics as Perl 5, with just a few
-differences (see below). The current implementation corresponds to Perl 5.005,
-with some additional features from the Perl development release.
-
-PCRE has its own native API, which is described in this document. There is also
-a set of wrapper functions that correspond to the POSIX regular expression API.
-These are described in the \fBpcreposix\fR documentation.
-
-The native API function prototypes are defined in the header file \fBpcre.h\fR,
-and on Unix systems the library itself is called \fBlibpcre.a\fR, so can be
-accessed by adding \fB-lpcre\fR to the command for linking an application which
-calls it. The header file defines the macros PCRE_MAJOR and PCRE_MINOR to
-contain the major and minor release numbers for the library. Applications can
-use these to include support for different releases.
-
-The functions \fBpcre_compile()\fR, \fBpcre_study()\fR, and \fBpcre_exec()\fR
-are used for compiling and matching regular expressions, while
-\fBpcre_copy_substring()\fR, \fBpcre_get_substring()\fR, and
-\fBpcre_get_substring_list()\fR are convenience functions for extracting
-captured substrings from a matched subject string. The function
-\fBpcre_maketables()\fR is used (optionally) to build a set of character tables
-in the current locale for passing to \fBpcre_compile()\fR.
-
-The function \fBpcre_fullinfo()\fR is used to find out information about a
-compiled pattern; \fBpcre_info()\fR is an obsolete version which returns only
-some of the available information, but is retained for backwards compatibility.
-The function \fBpcre_version()\fR returns a pointer to a string containing the
-version of PCRE and its date of release.
-
-The global variables \fBpcre_malloc\fR and \fBpcre_free\fR initially contain
-the entry points of the standard \fBmalloc()\fR and \fBfree()\fR functions
-respectively. PCRE calls the memory management functions via these variables,
-so a calling program can replace them if it wishes to intercept the calls. This
-should be done before calling any PCRE functions.
-
-
-.SH MULTI-THREADING
-The PCRE functions can be used in multi-threading applications, with the
-proviso that the memory management functions pointed to by \fBpcre_malloc\fR
-and \fBpcre_free\fR are shared by all threads.
-
-The compiled form of a regular expression is not altered during matching, so
-the same compiled pattern can safely be used by several threads at once.
-
-
-.SH COMPILING A PATTERN
-The function \fBpcre_compile()\fR is called to compile a pattern into an
-internal form. The pattern is a C string terminated by a binary zero, and
-is passed in the argument \fIpattern\fR. A pointer to a single block of memory
-that is obtained via \fBpcre_malloc\fR is returned. This contains the
-compiled code and related data. The \fBpcre\fR type is defined for this for
-convenience, but in fact \fBpcre\fR is just a typedef for \fBvoid\fR, since the
-contents of the block are not externally defined. It is up to the caller to
-free the memory when it is no longer required.
-.PP
-The size of a compiled pattern is roughly proportional to the length of the
-pattern string, except that each character class (other than those containing
-just a single character, negated or not) requires 33 bytes, and repeat
-quantifiers with a minimum greater than one or a bounded maximum cause the
-relevant portions of the compiled pattern to be replicated.
-.PP
-The \fIoptions\fR argument contains independent bits that affect the
-compilation. It should be zero if no options are required. Some of the options,
-in particular, those that are compatible with Perl, can also be set and unset
-from within the pattern (see the detailed description of regular expressions
-below). For these options, the contents of the \fIoptions\fR argument specifies
-their initial settings at the start of compilation and execution. The
-PCRE_ANCHORED option can be set at the time of matching as well as at compile
-time.
-.PP
-If \fIerrptr\fR is NULL, \fBpcre_compile()\fR returns NULL immediately.
-Otherwise, if compilation of a pattern fails, \fBpcre_compile()\fR returns
-NULL, and sets the variable pointed to by \fIerrptr\fR to point to a textual
-error message. The offset from the start of the pattern to the character where
-the error was discovered is placed in the variable pointed to by
-\fIerroffset\fR, which must not be NULL. If it is, an immediate error is given.
-.PP
-If the final argument, \fItableptr\fR, is NULL, PCRE uses a default set of
-character tables which are built when it is compiled, using the default C
-locale. Otherwise, \fItableptr\fR must be the result of a call to
-\fBpcre_maketables()\fR. See the section on locale support below.
-.PP
-The following option bits are defined in the header file:
-
-  PCRE_ANCHORED
-
-If this bit is set, the pattern is forced to be "anchored", that is, it is
-constrained to match only at the start of the string which is being searched
-(the "subject string"). This effect can also be achieved by appropriate
-constructs in the pattern itself, which is the only way to do it in Perl.
-
-  PCRE_CASELESS
-
-If this bit is set, letters in the pattern match both upper and lower case
-letters. It is equivalent to Perl's /i option.
-
-  PCRE_DOLLAR_ENDONLY
-
-If this bit is set, a dollar metacharacter in the pattern matches only at the
-end of the subject string. Without this option, a dollar also matches
-immediately before the final character if it is a newline (but not before any
-other newlines). The PCRE_DOLLAR_ENDONLY option is ignored if PCRE_MULTILINE is
-set. There is no equivalent to this option in Perl.
-
-  PCRE_DOTALL
-
-If this bit is set, a dot metacharater in the pattern matches all characters,
-including newlines. Without it, newlines are excluded. This option is
-equivalent to Perl's /s option. A negative class such as [^a] always matches a
-newline character, independent of the setting of this option.
-
-  PCRE_EXTENDED
-
-If this bit is set, whitespace data characters in the pattern are totally
-ignored except when escaped or inside a character class, and characters between
-an unescaped # outside a character class and the next newline character,
-inclusive, are also ignored. This is equivalent to Perl's /x option, and makes
-it possible to include comments inside complicated patterns. Note, however,
-that this applies only to data characters. Whitespace characters may never
-appear within special character sequences in a pattern, for example within the
-sequence (?( which introduces a conditional subpattern.
-
-  PCRE_EXTRA
-
-This option was invented in order to turn on additional functionality of PCRE
-that is incompatible with Perl, but it is currently of very little use. When
-set, any backslash in a pattern that is followed by a letter that has no
-special meaning causes an error, thus reserving these combinations for future
-expansion. By default, as in Perl, a backslash followed by a letter with no
-special meaning is treated as a literal. There are at present no other features
-controlled by this option. It can also be set by a (?X) option setting within a
-pattern.
-
-  PCRE_MULTILINE
-
-By default, PCRE treats the subject string as consisting of a single "line" of
-characters (even if it actually contains several newlines). The "start of line"
-metacharacter (^) matches only at the start of the string, while the "end of
-line" metacharacter ($) matches only at the end of the string, or before a
-terminating newline (unless PCRE_DOLLAR_ENDONLY is set). This is the same as
-Perl.
-
-When PCRE_MULTILINE it is set, the "start of line" and "end of line" constructs
-match immediately following or immediately before any newline in the subject
-string, respectively, as well as at the very start and end. This is equivalent
-to Perl's /m option. If there are no "\\n" characters in a subject string, or
-no occurrences of ^ or $ in a pattern, setting PCRE_MULTILINE has no
-effect.
-
-  PCRE_UNGREEDY
-
-This option inverts the "greediness" of the quantifiers so that they are not
-greedy by default, but become greedy if followed by "?". It is not compatible
-with Perl. It can also be set by a (?U) option setting within the pattern.
-
-
-.SH STUDYING A PATTERN
-When a pattern is going to be used several times, it is worth spending more
-time analyzing it in order to speed up the time taken for matching. The
-function \fBpcre_study()\fR takes a pointer to a compiled pattern as its first
-argument, and returns a pointer to a \fBpcre_extra\fR block (another \fBvoid\fR
-typedef) containing additional information about the pattern; this can be
-passed to \fBpcre_exec()\fR. If no additional information is available, NULL
-is returned.
-
-The second argument contains option bits. At present, no options are defined
-for \fBpcre_study()\fR, and this argument should always be zero.
-
-The third argument for \fBpcre_study()\fR is a pointer to an error message. If
-studying succeeds (even if no data is returned), the variable it points to is
-set to NULL. Otherwise it points to a textual error message.
-
-At present, studying a pattern is useful only for non-anchored patterns that do
-not have a single fixed starting character. A bitmap of possible starting
-characters is created.
-
-
-.SH LOCALE SUPPORT
-PCRE handles caseless matching, and determines whether characters are letters,
-digits, or whatever, by reference to a set of tables. The library contains a
-default set of tables which is created in the default C locale when PCRE is
-compiled. This is used when the final argument of \fBpcre_compile()\fR is NULL,
-and is sufficient for many applications.
-
-An alternative set of tables can, however, be supplied. Such tables are built
-by calling the \fBpcre_maketables()\fR function, which has no arguments, in the
-relevant locale. The result can then be passed to \fBpcre_compile()\fR as often
-as necessary. For example, to build and use tables that are appropriate for the
-French locale (where accented characters with codes greater than 128 are
-treated as letters), the following code could be used:
-
-  setlocale(LC_CTYPE, "fr");
-  tables = pcre_maketables();
-  re = pcre_compile(..., tables);
-
-The tables are built in memory that is obtained via \fBpcre_malloc\fR. The
-pointer that is passed to \fBpcre_compile\fR is saved with the compiled
-pattern, and the same tables are used via this pointer by \fBpcre_study()\fR
-and \fBpcre_exec()\fR. Thus for any single pattern, compilation, studying and
-matching all happen in the same locale, but different patterns can be compiled
-in different locales. It is the caller's responsibility to ensure that the
-memory containing the tables remains available for as long as it is needed.
-
-
-.SH INFORMATION ABOUT A PATTERN
-The \fBpcre_fullinfo()\fR function returns information about a compiled
-pattern. It replaces the obsolete \fBpcre_info()\fR function, which is
-nevertheless retained for backwards compability (and is documented below).
-
-The first argument for \fBpcre_fullinfo()\fR is a pointer to the compiled
-pattern. The second argument is the result of \fBpcre_study()\fR, or NULL if
-the pattern was not studied. The third argument specifies which piece of
-information is required, while the fourth argument is a pointer to a variable
-to receive the data. The yield of the function is zero for success, or one of
-the following negative numbers:
-
-  PCRE_ERROR_NULL       the argument \fIcode\fR was NULL
-                        the argument \fIwhere\fR was NULL
-  PCRE_ERROR_BADMAGIC   the "magic number" was not found
-  PCRE_ERROR_BADOPTION  the value of \fIwhat\fR was invalid
-
-The possible values for the third argument are defined in \fBpcre.h\fR, and are
-as follows:
-
-  PCRE_INFO_OPTIONS
-
-Return a copy of the options with which the pattern was compiled. The fourth
-argument should point to au \fBunsigned long int\fR variable. These option bits
-are those specified in the call to \fBpcre_compile()\fR, modified by any
-top-level option settings within the pattern itself, and with the PCRE_ANCHORED
-bit forcibly set if the form of the pattern implies that it can match only at
-the start of a subject string.
-
-  PCRE_INFO_SIZE
-
-Return the size of the compiled pattern, that is, the value that was passed as
-the argument to \fBpcre_malloc()\fR when PCRE was getting memory in which to
-place the compiled data. The fourth argument should point to a \fBsize_t\fR
-variable.
-
-  PCRE_INFO_CAPTURECOUNT
-
-Return the number of capturing subpatterns in the pattern. The fourth argument
-should point to an \fbint\fR variable.
-
-  PCRE_INFO_BACKREFMAX
-
-Return the number of the highest back reference in the pattern. The fourth
-argument should point to an \fBint\fR variable. Zero is returned if there are
-no back references.
-
-  PCRE_INFO_FIRSTCHAR
-
-Return information about the first character of any matched string, for a
-non-anchored pattern. If there is a fixed first character, e.g. from a pattern
-such as (cat|cow|coyote), it is returned in the integer pointed to by
-\fIwhere\fR. Otherwise, if either
-
-(a) the pattern was compiled with the PCRE_MULTILINE option, and every branch
-starts with "^", or
-
-(b) every branch of the pattern starts with ".*" and PCRE_DOTALL is not set
-(if it were set, the pattern would be anchored),
-
--1 is returned, indicating that the pattern matches only at the start of a
-subject string or after any "\\n" within the string. Otherwise -2 is returned.
-For anchored patterns, -2 is returned.
-
-  PCRE_INFO_FIRSTTABLE
-
-If the pattern was studied, and this resulted in the construction of a 256-bit
-table indicating a fixed set of characters for the first character in any
-matching string, a pointer to the table is returned. Otherwise NULL is
-returned. The fourth argument should point to an \fBunsigned char *\fR
-variable.
-
-  PCRE_INFO_LASTLITERAL
-
-For a non-anchored pattern, return the value of the rightmost literal character
-which must exist in any matched string, other than at its start. The fourth
-argument should point to an \fBint\fR variable. If there is no such character,
-or if the pattern is anchored, -1 is returned. For example, for the pattern
-/a\\d+z\\d+/ the returned value is 'z'.
-
-The \fBpcre_info()\fR function is now obsolete because its interface is too
-restrictive to return all the available data about a compiled pattern. New
-programs should use \fBpcre_fullinfo()\fR instead. The yield of
-\fBpcre_info()\fR is the number of capturing subpatterns, or one of the
-following negative numbers:
-
-  PCRE_ERROR_NULL       the argument \fIcode\fR was NULL
-  PCRE_ERROR_BADMAGIC   the "magic number" was not found
-
-If the \fIoptptr\fR argument is not NULL, a copy of the options with which the
-pattern was compiled is placed in the integer it points to (see
-PCRE_INFO_OPTIONS above).
-
-If the pattern is not anchored and the \fIfirstcharptr\fR argument is not NULL,
-it is used to pass back information about the first character of any matched
-string (see PCRE_INFO_FIRSTCHAR above).
-
-
-.SH MATCHING A PATTERN
-The function \fBpcre_exec()\fR is called to match a subject string against a
-pre-compiled pattern, which is passed in the \fIcode\fR argument. If the
-pattern has been studied, the result of the study should be passed in the
-\fIextra\fR argument. Otherwise this must be NULL.
-
-The PCRE_ANCHORED option can be passed in the \fIoptions\fR argument, whose
-unused bits must be zero. However, if a pattern was compiled with
-PCRE_ANCHORED, or turned out to be anchored by virtue of its contents, it
-cannot be made unachored at matching time.
-
-There are also three further options that can be set only at matching time:
-
-  PCRE_NOTBOL
-
-The first character of the string is not the beginning of a line, so the
-circumflex metacharacter should not match before it. Setting this without
-PCRE_MULTILINE (at compile time) causes circumflex never to match.
-
-  PCRE_NOTEOL
-
-The end of the string is not the end of a line, so the dollar metacharacter
-should not match it nor (except in multiline mode) a newline immediately before
-it. Setting this without PCRE_MULTILINE (at compile time) causes dollar never
-to match.
-
-  PCRE_NOTEMPTY
-
-An empty string is not considered to be a valid match if this option is set. If
-there are alternatives in the pattern, they are tried. If all the alternatives
-match the empty string, the entire match fails. For example, if the pattern
-
-  a?b?
-
-is applied to a string not beginning with "a" or "b", it matches the empty
-string at the start of the subject. With PCRE_NOTEMPTY set, this match is not
-valid, so PCRE searches further into the string for occurrences of "a" or "b".
-
-Perl has no direct equivalent of PCRE_NOTEMPTY, but it does make a special case
-of a pattern match of the empty string within its \fBsplit()\fR function, and
-when using the /g modifier. It is possible to emulate Perl's behaviour after
-matching a null string by first trying the match again at the same offset with
-PCRE_NOTEMPTY set, and then if that fails by advancing the starting offset (see
-below) and trying an ordinary match again.
-
-The subject string is passed as a pointer in \fIsubject\fR, a length in
-\fIlength\fR, and a starting offset in \fIstartoffset\fR. Unlike the pattern
-string, it may contain binary zero characters. When the starting offset is
-zero, the search for a match starts at the beginning of the subject, and this
-is by far the most common case.
-
-A non-zero starting offset is useful when searching for another match in the
-same subject by calling \fBpcre_exec()\fR again after a previous success.
-Setting \fIstartoffset\fR differs from just passing over a shortened string and
-setting PCRE_NOTBOL in the case of a pattern that begins with any kind of
-lookbehind. For example, consider the pattern
-
-  \\Biss\\B
-
-which finds occurrences of "iss" in the middle of words. (\\B matches only if
-the current position in the subject is not a word boundary.) When applied to
-the string "Mississipi" the first call to \fBpcre_exec()\fR finds the first
-occurrence. If \fBpcre_exec()\fR is called again with just the remainder of the
-subject, namely "issipi", it does not match, because \\B is always false at the
-start of the subject, which is deemed to be a word boundary. However, if
-\fBpcre_exec()\fR is passed the entire string again, but with \fIstartoffset\fR
-set to 4, it finds the second occurrence of "iss" because it is able to look
-behind the starting point to discover that it is preceded by a letter.
-
-If a non-zero starting offset is passed when the pattern is anchored, one
-attempt to match at the given offset is tried. This can only succeed if the
-pattern does not require the match to be at the start of the subject.
-
-In general, a pattern matches a certain portion of the subject, and in
-addition, further substrings from the subject may be picked out by parts of the
-pattern. Following the usage in Jeffrey Friedl's book, this is called
-"capturing" in what follows, and the phrase "capturing subpattern" is used for
-a fragment of a pattern that picks out a substring. PCRE supports several other
-kinds of parenthesized subpattern that do not cause substrings to be captured.
-
-Captured substrings are returned to the caller via a vector of integer offsets
-whose address is passed in \fIovector\fR. The number of elements in the vector
-is passed in \fIovecsize\fR. The first two-thirds of the vector is used to pass
-back captured substrings, each substring using a pair of integers. The
-remaining third of the vector is used as workspace by \fBpcre_exec()\fR while
-matching capturing subpatterns, and is not available for passing back
-information. The length passed in \fIovecsize\fR should always be a multiple of
-three. If it is not, it is rounded down.
-
-When a match has been successful, information about captured substrings is
-returned in pairs of integers, starting at the beginning of \fIovector\fR, and
-continuing up to two-thirds of its length at the most. The first element of a
-pair is set to the offset of the first character in a substring, and the second
-is set to the offset of the first character after the end of a substring. The
-first pair, \fIovector[0]\fR and \fIovector[1]\fR, identify the portion of the
-subject string matched by the entire pattern. The next pair is used for the
-first capturing subpattern, and so on. The value returned by \fBpcre_exec()\fR
-is the number of pairs that have been set. If there are no capturing
-subpatterns, the return value from a successful match is 1, indicating that
-just the first pair of offsets has been set.
-
-Some convenience functions are provided for extracting the captured substrings
-as separate strings. These are described in the following section.
-
-It is possible for an capturing subpattern number \fIn+1\fR to match some
-part of the subject when subpattern \fIn\fR has not been used at all. For
-example, if the string "abc" is matched against the pattern (a|(z))(bc)
-subpatterns 1 and 3 are matched, but 2 is not. When this happens, both offset
-values corresponding to the unused subpattern are set to -1.
-
-If a capturing subpattern is matched repeatedly, it is the last portion of the
-string that it matched that gets returned.
-
-If the vector is too small to hold all the captured substrings, it is used as
-far as possible (up to two-thirds of its length), and the function returns a
-value of zero. In particular, if the substring offsets are not of interest,
-\fBpcre_exec()\fR may be called with \fIovector\fR passed as NULL and
-\fIovecsize\fR as zero. However, if the pattern contains back references and
-the \fIovector\fR isn't big enough to remember the related substrings, PCRE has
-to get additional memory for use during matching. Thus it is usually advisable
-to supply an \fIovector\fR.
-
-Note that \fBpcre_info()\fR can be used to find out how many capturing
-subpatterns there are in a compiled pattern. The smallest size for
-\fIovector\fR that will allow for \fIn\fR captured substrings in addition to
-the offsets of the substring matched by the whole pattern is (\fIn\fR+1)*3.
-
-If \fBpcre_exec()\fR fails, it returns a negative number. The following are
-defined in the header file:
-
-  PCRE_ERROR_NOMATCH        (-1)
-
-The subject string did not match the pattern.
-
-  PCRE_ERROR_NULL           (-2)
-
-Either \fIcode\fR or \fIsubject\fR was passed as NULL, or \fIovector\fR was
-NULL and \fIovecsize\fR was not zero.
-
-  PCRE_ERROR_BADOPTION      (-3)
-
-An unrecognized bit was set in the \fIoptions\fR argument.
-
-  PCRE_ERROR_BADMAGIC       (-4)
-
-PCRE stores a 4-byte "magic number" at the start of the compiled code, to catch
-the case when it is passed a junk pointer. This is the error it gives when the
-magic number isn't present.
-
-  PCRE_ERROR_UNKNOWN_NODE   (-5)
-
-While running the pattern match, an unknown item was encountered in the
-compiled pattern. This error could be caused by a bug in PCRE or by overwriting
-of the compiled pattern.
-
-  PCRE_ERROR_NOMEMORY       (-6)
-
-If a pattern contains back references, but the \fIovector\fR that is passed to
-\fBpcre_exec()\fR is not big enough to remember the referenced substrings, PCRE
-gets a block of memory at the start of matching to use for this purpose. If the
-call via \fBpcre_malloc()\fR fails, this error is given. The memory is freed at
-the end of matching.
-
-
-.SH EXTRACTING CAPTURED SUBSTRINGS
-Captured substrings can be accessed directly by using the offsets returned by
-\fBpcre_exec()\fR in \fIovector\fR. For convenience, the functions
-\fBpcre_copy_substring()\fR, \fBpcre_get_substring()\fR, and
-\fBpcre_get_substring_list()\fR are provided for extracting captured substrings
-as new, separate, zero-terminated strings. A substring that contains a binary
-zero is correctly extracted and has a further zero added on the end, but the
-result does not, of course, function as a C string.
-
-The first three arguments are the same for all three functions: \fIsubject\fR
-is the subject string which has just been successfully matched, \fIovector\fR
-is a pointer to the vector of integer offsets that was passed to
-\fBpcre_exec()\fR, and \fIstringcount\fR is the number of substrings that
-were captured by the match, including the substring that matched the entire
-regular expression. This is the value returned by \fBpcre_exec\fR if it
-is greater than zero. If \fBpcre_exec()\fR returned zero, indicating that it
-ran out of space in \fIovector\fR, the value passed as \fIstringcount\fR should
-be the size of the vector divided by three.
-
-The functions \fBpcre_copy_substring()\fR and \fBpcre_get_substring()\fR
-extract a single substring, whose number is given as \fIstringnumber\fR. A
-value of zero extracts the substring that matched the entire pattern, while
-higher values extract the captured substrings. For \fBpcre_copy_substring()\fR,
-the string is placed in \fIbuffer\fR, whose length is given by
-\fIbuffersize\fR, while for \fBpcre_get_substring()\fR a new block of store is
-obtained via \fBpcre_malloc\fR, and its address is returned via
-\fIstringptr\fR. The yield of the function is the length of the string, not
-including the terminating zero, or one of
-
-  PCRE_ERROR_NOMEMORY       (-6)
-
-The buffer was too small for \fBpcre_copy_substring()\fR, or the attempt to get
-memory failed for \fBpcre_get_substring()\fR.
-
-  PCRE_ERROR_NOSUBSTRING    (-7)
-
-There is no substring whose number is \fIstringnumber\fR.
-
-The \fBpcre_get_substring_list()\fR function extracts all available substrings
-and builds a list of pointers to them. All this is done in a single block of
-memory which is obtained via \fBpcre_malloc\fR. The address of the memory block
-is returned via \fIlistptr\fR, which is also the start of the list of string
-pointers. The end of the list is marked by a NULL pointer. The yield of the
-function is zero if all went well, or
-
-  PCRE_ERROR_NOMEMORY       (-6)
-
-if the attempt to get the memory block failed.
-
-When any of these functions encounter a substring that is unset, which can
-happen when capturing subpattern number \fIn+1\fR matches some part of the
-subject, but subpattern \fIn\fR has not been used at all, they return an empty
-string. This can be distinguished from a genuine zero-length substring by
-inspecting the appropriate offset in \fIovector\fR, which is negative for unset
-substrings.
-
-
-
-.SH LIMITATIONS
-There are some size limitations in PCRE but it is hoped that they will never in
-practice be relevant.
-The maximum length of a compiled pattern is 65539 (sic) bytes.
-All values in repeating quantifiers must be less than 65536.
-The maximum number of capturing subpatterns is 99.
-The maximum number of all parenthesized subpatterns, including capturing
-subpatterns, assertions, and other types of subpattern, is 200.
-
-The maximum length of a subject string is the largest positive number that an
-integer variable can hold. However, PCRE uses recursion to handle subpatterns
-and indefinite repetition. This means that the available stack space may limit
-the size of a subject string that can be processed by certain patterns.
-
-
-.SH DIFFERENCES FROM PERL
-The differences described here are with respect to Perl 5.005.
-
-1. By default, a whitespace character is any character that the C library
-function \fBisspace()\fR recognizes, though it is possible to compile PCRE with
-alternative character type tables. Normally \fBisspace()\fR matches space,
-formfeed, newline, carriage return, horizontal tab, and vertical tab. Perl 5
-no longer includes vertical tab in its set of whitespace characters. The \\v
-escape that was in the Perl documentation for a long time was never in fact
-recognized. However, the character itself was treated as whitespace at least
-up to 5.002. In 5.004 and 5.005 it does not match \\s.
-
-2. PCRE does not allow repeat quantifiers on lookahead assertions. Perl permits
-them, but they do not mean what you might think. For example, (?!a){3} does
-not assert that the next three characters are not "a". It just asserts that the
-next character is not "a" three times.
-
-3. Capturing subpatterns that occur inside negative lookahead assertions are
-counted, but their entries in the offsets vector are never set. Perl sets its
-numerical variables from any such patterns that are matched before the
-assertion fails to match something (thereby succeeding), but only if the
-negative lookahead assertion contains just one branch.
-
-4. Though binary zero characters are supported in the subject string, they are
-not allowed in a pattern string because it is passed as a normal C string,
-terminated by zero. The escape sequence "\\0" can be used in the pattern to
-represent a binary zero.
-
-5. The following Perl escape sequences are not supported: \\l, \\u, \\L, \\U,
-\\E, \\Q. In fact these are implemented by Perl's general string-handling and
-are not part of its pattern matching engine.
-
-6. The Perl \\G assertion is not supported as it is not relevant to single
-pattern matches.
-
-7. Fairly obviously, PCRE does not support the (?{code}) and (?p{code})
-constructions. However, there is some experimental support for recursive
-patterns using the non-Perl item (?R).
-
-8. There are at the time of writing some oddities in Perl 5.005_02 concerned
-with the settings of captured strings when part of a pattern is repeated. For
-example, matching "aba" against the pattern /^(a(b)?)+$/ sets $2 to the value
-"b", but matching "aabbaa" against /^(aa(bb)?)+$/ leaves $2 unset. However, if
-the pattern is changed to /^(aa(b(b))?)+$/ then $2 (and $3) are set.
-
-In Perl 5.004 $2 is set in both cases, and that is also true of PCRE. If in the
-future Perl changes to a consistent state that is different, PCRE may change to
-follow.
-
-9. Another as yet unresolved discrepancy is that in Perl 5.005_02 the pattern
-/^(a)?(?(1)a|b)+$/ matches the string "a", whereas in PCRE it does not.
-However, in both Perl and PCRE /^(a)?a/ matched against "a" leaves $1 unset.
-
-10. PCRE provides some extensions to the Perl regular expression facilities:
-
-(a) Although lookbehind assertions must match fixed length strings, each
-alternative branch of a lookbehind assertion can match a different length of
-string. Perl 5.005 requires them all to have the same length.
-
-(b) If PCRE_DOLLAR_ENDONLY is set and PCRE_MULTILINE is not set, the $ meta-
-character matches only at the very end of the string.
-
-(c) If PCRE_EXTRA is set, a backslash followed by a letter with no special
-meaning is faulted.
-
-(d) If PCRE_UNGREEDY is set, the greediness of the repetition quantifiers is
-inverted, that is, by default they are not greedy, but if followed by a
-question mark they are.
-
-(e) PCRE_ANCHORED can be used to force a pattern to be tried only at the start
-of the subject.
-
-(f) The PCRE_NOTBOL, PCRE_NOTEOL, and PCRE_NOTEMPTY options for
-\fBpcre_exec()\fR have no Perl equivalents.
-
-(g) The (?R) construct allows for recursive pattern matching (Perl 5.6 can do
-this using the (?p{code}) construct, which PCRE cannot of course support.)
-
-
-.SH REGULAR EXPRESSION DETAILS
-The syntax and semantics of the regular expressions supported by PCRE are
-described below. Regular expressions are also described in the Perl
-documentation and in a number of other books, some of which have copious
-examples. Jeffrey Friedl's "Mastering Regular Expressions", published by
-O'Reilly (ISBN 1-56592-257), covers them in great detail. The description
-here is intended as reference documentation.
-
-A regular expression is a pattern that is matched against a subject string from
-left to right. Most characters stand for themselves in a pattern, and match the
-corresponding characters in the subject. As a trivial example, the pattern
-
-  The quick brown fox
-
-matches a portion of a subject string that is identical to itself. The power of
-regular expressions comes from the ability to include alternatives and
-repetitions in the pattern. These are encoded in the pattern by the use of
-\fImeta-characters\fR, which do not stand for themselves but instead are
-interpreted in some special way.
-
-There are two different sets of meta-characters: those that are recognized
-anywhere in the pattern except within square brackets, and those that are
-recognized in square brackets. Outside square brackets, the meta-characters are
-as follows:
-
-  \\      general escape character with several uses
-  ^      assert start of subject (or line, in multiline mode)
-  $      assert end of subject (or line, in multiline mode)
-  .      match any character except newline (by default)
-  [      start character class definition
-  |      start of alternative branch
-  (      start subpattern
-  )      end subpattern
-  ?      extends the meaning of (
-         also 0 or 1 quantifier
-         also quantifier minimizer
-  *      0 or more quantifier
-  +      1 or more quantifier
-  {      start min/max quantifier
-
-Part of a pattern that is in square brackets is called a "character class". In
-a character class the only meta-characters are:
-
-  \\      general escape character
-  ^      negate the class, but only if the first character
-  -      indicates character range
-  ]      terminates the character class
-
-The following sections describe the use of each of the meta-characters.
-
-
-.SH BACKSLASH
-The backslash character has several uses. Firstly, if it is followed by a
-non-alphameric character, it takes away any special meaning that character may
-have. This use of backslash as an escape character applies both inside and
-outside character classes.
-
-For example, if you want to match a "*" character, you write "\\*" in the
-pattern. This applies whether or not the following character would otherwise be
-interpreted as a meta-character, so it is always safe to precede a
-non-alphameric with "\\" to specify that it stands for itself. In particular,
-if you want to match a backslash, you write "\\\\".
-
-If a pattern is compiled with the PCRE_EXTENDED option, whitespace in the
-pattern (other than in a character class) and characters between a "#" outside
-a character class and the next newline character are ignored. An escaping
-backslash can be used to include a whitespace or "#" character as part of the
-pattern.
-
-A second use of backslash provides a way of encoding non-printing characters
-in patterns in a visible manner. There is no restriction on the appearance of
-non-printing characters, apart from the binary zero that terminates a pattern,
-but when a pattern is being prepared by text editing, it is usually easier to
-use one of the following escape sequences than the binary character it
-represents:
-
-  \\a     alarm, that is, the BEL character (hex 07)
-  \\cx    "control-x", where x is any character
-  \\e     escape (hex 1B)
-  \\f     formfeed (hex 0C)
-  \\n     newline (hex 0A)
-  \\r     carriage return (hex 0D)
-  \\t     tab (hex 09)
-  \\xhh   character with hex code hh
-  \\ddd   character with octal code ddd, or backreference
-
-The precise effect of "\\cx" is as follows: if "x" is a lower case letter, it
-is converted to upper case. Then bit 6 of the character (hex 40) is inverted.
-Thus "\\cz" becomes hex 1A, but "\\c{" becomes hex 3B, while "\\c;" becomes hex
-7B.
-
-After "\\x", up to two hexadecimal digits are read (letters can be in upper or
-lower case).
-
-After "\\0" up to two further octal digits are read. In both cases, if there
-are fewer than two digits, just those that are present are used. Thus the
-sequence "\\0\\x\\07" specifies two binary zeros followed by a BEL character.
-Make sure you supply two digits after the initial zero if the character that
-follows is itself an octal digit.
-
-The handling of a backslash followed by a digit other than 0 is complicated.
-Outside a character class, PCRE reads it and any following digits as a decimal
-number. If the number is less than 10, or if there have been at least that many
-previous capturing left parentheses in the expression, the entire sequence is
-taken as a \fIback reference\fR. A description of how this works is given
-later, following the discussion of parenthesized subpatterns.
-
-Inside a character class, or if the decimal number is greater than 9 and there
-have not been that many capturing subpatterns, PCRE re-reads up to three octal
-digits following the backslash, and generates a single byte from the least
-significant 8 bits of the value. Any subsequent digits stand for themselves.
-For example:
-
-  \\040   is another way of writing a space
-  \\40    is the same, provided there are fewer than 40
-            previous capturing subpatterns
-  \\7     is always a back reference
-  \\11    might be a back reference, or another way of
-            writing a tab
-  \\011   is always a tab
-  \\0113  is a tab followed by the character "3"
-  \\113   is the character with octal code 113 (since there
-            can be no more than 99 back references)
-  \\377   is a byte consisting entirely of 1 bits
-  \\81    is either a back reference, or a binary zero
-            followed by the two characters "8" and "1"
-
-Note that octal values of 100 or greater must not be introduced by a leading
-zero, because no more than three octal digits are ever read.
-
-All the sequences that define a single byte value can be used both inside and
-outside character classes. In addition, inside a character class, the sequence
-"\\b" is interpreted as the backspace character (hex 08). Outside a character
-class it has a different meaning (see below).
-
-The third use of backslash is for specifying generic character types:
-
-  \\d     any decimal digit
-  \\D     any character that is not a decimal digit
-  \\s     any whitespace character
-  \\S     any character that is not a whitespace character
-  \\w     any "word" character
-  \\W     any "non-word" character
-
-Each pair of escape sequences partitions the complete set of characters into
-two disjoint sets. Any given character matches one, and only one, of each pair.
-
-A "word" character is any letter or digit or the underscore character, that is,
-any character which can be part of a Perl "word". The definition of letters and
-digits is controlled by PCRE's character tables, and may vary if locale-
-specific matching is taking place (see "Locale support" above). For example, in
-the "fr" (French) locale, some character codes greater than 128 are used for
-accented letters, and these are matched by \\w.
-
-These character type sequences can appear both inside and outside character
-classes. They each match one character of the appropriate type. If the current
-matching point is at the end of the subject string, all of them fail, since
-there is no character to match.
-
-The fourth use of backslash is for certain simple assertions. An assertion
-specifies a condition that has to be met at a particular point in a match,
-without consuming any characters from the subject string. The use of
-subpatterns for more complicated assertions is described below. The backslashed
-assertions are
-
-  \\b     word boundary
-  \\B     not a word boundary
-  \\A     start of subject (independent of multiline mode)
-  \\Z     end of subject or newline at end (independent of multiline mode)
-  \\z     end of subject (independent of multiline mode)
-
-These assertions may not appear in character classes (but note that "\\b" has a
-different meaning, namely the backspace character, inside a character class).
-
-A word boundary is a position in the subject string where the current character
-and the previous character do not both match \\w or \\W (i.e. one matches
-\\w and the other matches \\W), or the start or end of the string if the
-first or last character matches \\w, respectively.
-
-The \\A, \\Z, and \\z assertions differ from the traditional circumflex and
-dollar (described below) in that they only ever match at the very start and end
-of the subject string, whatever options are set. They are not affected by the
-PCRE_NOTBOL or PCRE_NOTEOL options. If the \fIstartoffset\fR argument of
-\fBpcre_exec()\fR is non-zero, \\A can never match. The difference between \\Z
-and \\z is that \\Z matches before a newline that is the last character of the
-string as well as at the end of the string, whereas \\z matches only at the
-end.
-
-
-.SH CIRCUMFLEX AND DOLLAR
-Outside a character class, in the default matching mode, the circumflex
-character is an assertion which is true only if the current matching point is
-at the start of the subject string. If the \fIstartoffset\fR argument of
-\fBpcre_exec()\fR is non-zero, circumflex can never match. Inside a character
-class, circumflex has an entirely different meaning (see below).
-
-Circumflex need not be the first character of the pattern if a number of
-alternatives are involved, but it should be the first thing in each alternative
-in which it appears if the pattern is ever to match that branch. If all
-possible alternatives start with a circumflex, that is, if the pattern is
-constrained to match only at the start of the subject, it is said to be an
-"anchored" pattern. (There are also other constructs that can cause a pattern
-to be anchored.)
-
-A dollar character is an assertion which is true only if the current matching
-point is at the end of the subject string, or immediately before a newline
-character that is the last character in the string (by default). Dollar need
-not be the last character of the pattern if a number of alternatives are
-involved, but it should be the last item in any branch in which it appears.
-Dollar has no special meaning in a character class.
-
-The meaning of dollar can be changed so that it matches only at the very end of
-the string, by setting the PCRE_DOLLAR_ENDONLY option at compile or matching
-time. This does not affect the \\Z assertion.
-
-The meanings of the circumflex and dollar characters are changed if the
-PCRE_MULTILINE option is set. When this is the case, they match immediately
-after and immediately before an internal "\\n" character, respectively, in
-addition to matching at the start and end of the subject string. For example,
-the pattern /^abc$/ matches the subject string "def\\nabc" in multiline mode,
-but not otherwise. Consequently, patterns that are anchored in single line mode
-because all branches start with "^" are not anchored in multiline mode, and a
-match for circumflex is possible when the \fIstartoffset\fR argument of
-\fBpcre_exec()\fR is non-zero. The PCRE_DOLLAR_ENDONLY option is ignored if
-PCRE_MULTILINE is set.
-
-Note that the sequences \\A, \\Z, and \\z can be used to match the start and
-end of the subject in both modes, and if all branches of a pattern start with
-\\A is it always anchored, whether PCRE_MULTILINE is set or not.
-
-
-.SH FULL STOP (PERIOD, DOT)
-Outside a character class, a dot in the pattern matches any one character in
-the subject, including a non-printing character, but not (by default) newline.
-If the PCRE_DOTALL option is set, dots match newlines as well. The handling of
-dot is entirely independent of the handling of circumflex and dollar, the only
-relationship being that they both involve newline characters. Dot has no
-special meaning in a character class.
-
-
-.SH SQUARE BRACKETS
-An opening square bracket introduces a character class, terminated by a closing
-square bracket. A closing square bracket on its own is not special. If a
-closing square bracket is required as a member of the class, it should be the
-first data character in the class (after an initial circumflex, if present) or
-escaped with a backslash.
-
-A character class matches a single character in the subject; the character must
-be in the set of characters defined by the class, unless the first character in
-the class is a circumflex, in which case the subject character must not be in
-the set defined by the class. If a circumflex is actually required as a member
-of the class, ensure it is not the first character, or escape it with a
-backslash.
-
-For example, the character class [aeiou] matches any lower case vowel, while
-[^aeiou] matches any character that is not a lower case vowel. Note that a
-circumflex is just a convenient notation for specifying the characters which
-are in the class by enumerating those that are not. It is not an assertion: it
-still consumes a character from the subject string, and fails if the current
-pointer is at the end of the string.
-
-When caseless matching is set, any letters in a class represent both their
-upper case and lower case versions, so for example, a caseless [aeiou] matches
-"A" as well as "a", and a caseless [^aeiou] does not match "A", whereas a
-caseful version would.
-
-The newline character is never treated in any special way in character classes,
-whatever the setting of the PCRE_DOTALL or PCRE_MULTILINE options is. A class
-such as [^a] will always match a newline.
-
-The minus (hyphen) character can be used to specify a range of characters in a
-character class. For example, [d-m] matches any letter between d and m,
-inclusive. If a minus character is required in a class, it must be escaped with
-a backslash or appear in a position where it cannot be interpreted as
-indicating a range, typically as the first or last character in the class.
-
-It is not possible to have the literal character "]" as the end character of a
-range. A pattern such as [W-]46] is interpreted as a class of two characters
-("W" and "-") followed by a literal string "46]", so it would match "W46]" or
-"-46]". However, if the "]" is escaped with a backslash it is interpreted as
-the end of range, so [W-\\]46] is interpreted as a single class containing a
-range followed by two separate characters. The octal or hexadecimal
-representation of "]" can also be used to end a range.
-
-Ranges operate in ASCII collating sequence. They can also be used for
-characters specified numerically, for example [\\000-\\037]. If a range that
-includes letters is used when caseless matching is set, it matches the letters
-in either case. For example, [W-c] is equivalent to [][\\^_`wxyzabc], matched
-caselessly, and if character tables for the "fr" locale are in use,
-[\\xc8-\\xcb] matches accented E characters in both cases.
-
-The character types \\d, \\D, \\s, \\S, \\w, and \\W may also appear in a
-character class, and add the characters that they match to the class. For
-example, [\\dABCDEF] matches any hexadecimal digit. A circumflex can
-conveniently be used with the upper case character types to specify a more
-restricted set of characters than the matching lower case type. For example,
-the class [^\\W_] matches any letter or digit, but not underscore.
-
-All non-alphameric characters other than \\, -, ^ (at the start) and the
-terminating ] are non-special in character classes, but it does no harm if they
-are escaped.
-
-
-.SH POSIX CHARACTER CLASSES
-Perl 5.6 (not yet released at the time of writing) is going to support the
-POSIX notation for character classes, which uses names enclosed by [: and :]
-within the enclosing square brackets. PCRE supports this notation. For example,
-
-  [01[:alpha:]%]
-
-matches "0", "1", any alphabetic character, or "%". The supported class names
-are
-
-  alnum    letters and digits
-  alpha    letters
-  ascii    character codes 0 - 127
-  cntrl    control characters
-  digit    decimal digits (same as \\d)
-  graph    printing characters, excluding space
-  lower    lower case letters
-  print    printing characters, including space
-  punct    printing characters, excluding letters and digits
-  space    white space (same as \\s)
-  upper    upper case letters
-  word     "word" characters (same as \\w)
-  xdigit   hexadecimal digits
-
-The names "ascii" and "word" are Perl extensions. Another Perl extension is
-negation, which is indicated by a ^ character after the colon. For example,
-
-  [12[:^digit:]]
-
-matches "1", "2", or any non-digit. PCRE (and Perl) also recogize the POSIX
-syntax [.ch.] and [=ch=] where "ch" is a "collating element", but these are not
-supported, and an error is given if they are encountered.
-
-
-.SH VERTICAL BAR
-Vertical bar characters are used to separate alternative patterns. For example,
-the pattern
-
-  gilbert|sullivan
-
-matches either "gilbert" or "sullivan". Any number of alternatives may appear,
-and an empty alternative is permitted (matching the empty string).
-The matching process tries each alternative in turn, from left to right,
-and the first one that succeeds is used. If the alternatives are within a
-subpattern (defined below), "succeeds" means matching the rest of the main
-pattern as well as the alternative in the subpattern.
-
-
-.SH INTERNAL OPTION SETTING
-The settings of PCRE_CASELESS, PCRE_MULTILINE, PCRE_DOTALL, and PCRE_EXTENDED
-can be changed from within the pattern by a sequence of Perl option letters
-enclosed between "(?" and ")". The option letters are
-
-  i  for PCRE_CASELESS
-  m  for PCRE_MULTILINE
-  s  for PCRE_DOTALL
-  x  for PCRE_EXTENDED
-
-For example, (?im) sets caseless, multiline matching. It is also possible to
-unset these options by preceding the letter with a hyphen, and a combined
-setting and unsetting such as (?im-sx), which sets PCRE_CASELESS and
-PCRE_MULTILINE while unsetting PCRE_DOTALL and PCRE_EXTENDED, is also
-permitted. If a letter appears both before and after the hyphen, the option is
-unset.
-
-The scope of these option changes depends on where in the pattern the setting
-occurs. For settings that are outside any subpattern (defined below), the
-effect is the same as if the options were set or unset at the start of
-matching. The following patterns all behave in exactly the same way:
-
-  (?i)abc
-  a(?i)bc
-  ab(?i)c
-  abc(?i)
-
-which in turn is the same as compiling the pattern abc with PCRE_CASELESS set.
-In other words, such "top level" settings apply to the whole pattern (unless
-there are other changes inside subpatterns). If there is more than one setting
-of the same option at top level, the rightmost setting is used.
-
-If an option change occurs inside a subpattern, the effect is different. This
-is a change of behaviour in Perl 5.005. An option change inside a subpattern
-affects only that part of the subpattern that follows it, so
-
-  (a(?i)b)c
-
-matches abc and aBc and no other strings (assuming PCRE_CASELESS is not used).
-By this means, options can be made to have different settings in different
-parts of the pattern. Any changes made in one alternative do carry on
-into subsequent branches within the same subpattern. For example,
-
-  (a(?i)b|c)
-
-matches "ab", "aB", "c", and "C", even though when matching "C" the first
-branch is abandoned before the option setting. This is because the effects of
-option settings happen at compile time. There would be some very weird
-behaviour otherwise.
-
-The PCRE-specific options PCRE_UNGREEDY and PCRE_EXTRA can be changed in the
-same way as the Perl-compatible options by using the characters U and X
-respectively. The (?X) flag setting is special in that it must always occur
-earlier in the pattern than any of the additional features it turns on, even
-when it is at top level. It is best put at the start.
-
-
-.SH SUBPATTERNS
-Subpatterns are delimited by parentheses (round brackets), which can be nested.
-Marking part of a pattern as a subpattern does two things:
-
-1. It localizes a set of alternatives. For example, the pattern
-
-  cat(aract|erpillar|)
-
-matches one of the words "cat", "cataract", or "caterpillar". Without the
-parentheses, it would match "cataract", "erpillar" or the empty string.
-
-2. It sets up the subpattern as a capturing subpattern (as defined above).
-When the whole pattern matches, that portion of the subject string that matched
-the subpattern is passed back to the caller via the \fIovector\fR argument of
-\fBpcre_exec()\fR. Opening parentheses are counted from left to right (starting
-from 1) to obtain the numbers of the capturing subpatterns.
-
-For example, if the string "the red king" is matched against the pattern
-
-  the ((red|white) (king|queen))
-
-the captured substrings are "red king", "red", and "king", and are numbered 1,
-2, and 3.
-
-The fact that plain parentheses fulfil two functions is not always helpful.
-There are often times when a grouping subpattern is required without a
-capturing requirement. If an opening parenthesis is followed by "?:", the
-subpattern does not do any capturing, and is not counted when computing the
-number of any subsequent capturing subpatterns. For example, if the string "the
-white queen" is matched against the pattern
-
-  the ((?:red|white) (king|queen))
-
-the captured substrings are "white queen" and "queen", and are numbered 1 and
-2. The maximum number of captured substrings is 99, and the maximum number of
-all subpatterns, both capturing and non-capturing, is 200.
-
-As a convenient shorthand, if any option settings are required at the start of
-a non-capturing subpattern, the option letters may appear between the "?" and
-the ":". Thus the two patterns
-
-  (?i:saturday|sunday)
-  (?:(?i)saturday|sunday)
-
-match exactly the same set of strings. Because alternative branches are tried
-from left to right, and options are not reset until the end of the subpattern
-is reached, an option setting in one branch does affect subsequent branches, so
-the above patterns match "SUNDAY" as well as "Saturday".
-
-
-.SH REPETITION
-Repetition is specified by quantifiers, which can follow any of the following
-items:
-
-  a single character, possibly escaped
-  the . metacharacter
-  a character class
-  a back reference (see next section)
-  a parenthesized subpattern (unless it is an assertion - see below)
-
-The general repetition quantifier specifies a minimum and maximum number of
-permitted matches, by giving the two numbers in curly brackets (braces),
-separated by a comma. The numbers must be less than 65536, and the first must
-be less than or equal to the second. For example:
-
-  z{2,4}
-
-matches "zz", "zzz", or "zzzz". A closing brace on its own is not a special
-character. If the second number is omitted, but the comma is present, there is
-no upper limit; if the second number and the comma are both omitted, the
-quantifier specifies an exact number of required matches. Thus
-
-  [aeiou]{3,}
-
-matches at least 3 successive vowels, but may match many more, while
-
-  \\d{8}
-
-matches exactly 8 digits. An opening curly bracket that appears in a position
-where a quantifier is not allowed, or one that does not match the syntax of a
-quantifier, is taken as a literal character. For example, {,6} is not a
-quantifier, but a literal string of four characters.
-
-The quantifier {0} is permitted, causing the expression to behave as if the
-previous item and the quantifier were not present.
-
-For convenience (and historical compatibility) the three most common
-quantifiers have single-character abbreviations:
-
-  *    is equivalent to {0,}
-  +    is equivalent to {1,}
-  ?    is equivalent to {0,1}
-
-It is possible to construct infinite loops by following a subpattern that can
-match no characters with a quantifier that has no upper limit, for example:
-
-  (a?)*
-
-Earlier versions of Perl and PCRE used to give an error at compile time for
-such patterns. However, because there are cases where this can be useful, such
-patterns are now accepted, but if any repetition of the subpattern does in fact
-match no characters, the loop is forcibly broken.
-
-By default, the quantifiers are "greedy", that is, they match as much as
-possible (up to the maximum number of permitted times), without causing the
-rest of the pattern to fail. The classic example of where this gives problems
-is in trying to match comments in C programs. These appear between the
-sequences /* and */ and within the sequence, individual * and / characters may
-appear. An attempt to match C comments by applying the pattern
-
-  /\\*.*\\*/
-
-to the string
-
-  /* first command */  not comment  /* second comment */
-
-fails, because it matches the entire string due to the greediness of the .*
-item.
-
-However, if a quantifier is followed by a question mark, it ceases to be
-greedy, and instead matches the minimum number of times possible, so the
-pattern
-
-  /\\*.*?\\*/
-
-does the right thing with the C comments. The meaning of the various
-quantifiers is not otherwise changed, just the preferred number of matches.
-Do not confuse this use of question mark with its use as a quantifier in its
-own right. Because it has two uses, it can sometimes appear doubled, as in
-
-  \\d??\\d
-
-which matches one digit by preference, but can match two if that is the only
-way the rest of the pattern matches.
-
-If the PCRE_UNGREEDY option is set (an option which is not available in Perl),
-the quantifiers are not greedy by default, but individual ones can be made
-greedy by following them with a question mark. In other words, it inverts the
-default behaviour.
-
-When a parenthesized subpattern is quantified with a minimum repeat count that
-is greater than 1 or with a limited maximum, more store is required for the
-compiled pattern, in proportion to the size of the minimum or maximum.
-
-If a pattern starts with .* or .{0,} and the PCRE_DOTALL option (equivalent
-to Perl's /s) is set, thus allowing the . to match newlines, the pattern is
-implicitly anchored, because whatever follows will be tried against every
-character position in the subject string, so there is no point in retrying the
-overall match at any position after the first. PCRE treats such a pattern as
-though it were preceded by \\A. In cases where it is known that the subject
-string contains no newlines, it is worth setting PCRE_DOTALL when the pattern
-begins with .* in order to obtain this optimization, or alternatively using ^
-to indicate anchoring explicitly.
-
-When a capturing subpattern is repeated, the value captured is the substring
-that matched the final iteration. For example, after
-
-  (tweedle[dume]{3}\\s*)+
-
-has matched "tweedledum tweedledee" the value of the captured substring is
-"tweedledee". However, if there are nested capturing subpatterns, the
-corresponding captured values may have been set in previous iterations. For
-example, after
-
-  /(a|(b))+/
-
-matches "aba" the value of the second captured substring is "b".
-
-
-.SH BACK REFERENCES
-Outside a character class, a backslash followed by a digit greater than 0 (and
-possibly further digits) is a back reference to a capturing subpattern earlier
-(i.e. to its left) in the pattern, provided there have been that many previous
-capturing left parentheses.
-
-However, if the decimal number following the backslash is less than 10, it is
-always taken as a back reference, and causes an error only if there are not
-that many capturing left parentheses in the entire pattern. In other words, the
-parentheses that are referenced need not be to the left of the reference for
-numbers less than 10. See the section entitled "Backslash" above for further
-details of the handling of digits following a backslash.
-
-A back reference matches whatever actually matched the capturing subpattern in
-the current subject string, rather than anything matching the subpattern
-itself. So the pattern
-
-  (sens|respons)e and \\1ibility
-
-matches "sense and sensibility" and "response and responsibility", but not
-"sense and responsibility". If caseful matching is in force at the time of the
-back reference, the case of letters is relevant. For example,
-
-  ((?i)rah)\\s+\\1
-
-matches "rah rah" and "RAH RAH", but not "RAH rah", even though the original
-capturing subpattern is matched caselessly.
-
-There may be more than one back reference to the same subpattern. If a
-subpattern has not actually been used in a particular match, any back
-references to it always fail. For example, the pattern
-
-  (a|(bc))\\2
-
-always fails if it starts to match "a" rather than "bc". Because there may be
-up to 99 back references, all digits following the backslash are taken
-as part of a potential back reference number. If the pattern continues with a
-digit character, some delimiter must be used to terminate the back reference.
-If the PCRE_EXTENDED option is set, this can be whitespace. Otherwise an empty
-comment can be used.
-
-A back reference that occurs inside the parentheses to which it refers fails
-when the subpattern is first used, so, for example, (a\\1) never matches.
-However, such references can be useful inside repeated subpatterns. For
-example, the pattern
-
-  (a|b\\1)+
-
-matches any number of "a"s and also "aba", "ababaa" etc. At each iteration of
-the subpattern, the back reference matches the character string corresponding
-to the previous iteration. In order for this to work, the pattern must be such
-that the first iteration does not need to match the back reference. This can be
-done using alternation, as in the example above, or by a quantifier with a
-minimum of zero.
-
-
-.SH ASSERTIONS
-An assertion is a test on the characters following or preceding the current
-matching point that does not actually consume any characters. The simple
-assertions coded as \\b, \\B, \\A, \\Z, \\z, ^ and $ are described above. More
-complicated assertions are coded as subpatterns. There are two kinds: those
-that look ahead of the current position in the subject string, and those that
-look behind it.
-
-An assertion subpattern is matched in the normal way, except that it does not
-cause the current matching position to be changed. Lookahead assertions start
-with (?= for positive assertions and (?! for negative assertions. For example,
-
-  \\w+(?=;)
-
-matches a word followed by a semicolon, but does not include the semicolon in
-the match, and
-
-  foo(?!bar)
-
-matches any occurrence of "foo" that is not followed by "bar". Note that the
-apparently similar pattern
-
-  (?!foo)bar
-
-does not find an occurrence of "bar" that is preceded by something other than
-"foo"; it finds any occurrence of "bar" whatsoever, because the assertion
-(?!foo) is always true when the next three characters are "bar". A
-lookbehind assertion is needed to achieve this effect.
-
-Lookbehind assertions start with (?<= for positive assertions and (?<! for
-negative assertions. For example,
-
-  (?<!foo)bar
-
-does find an occurrence of "bar" that is not preceded by "foo". The contents of
-a lookbehind assertion are restricted such that all the strings it matches must
-have a fixed length. However, if there are several alternatives, they do not
-all have to have the same fixed length. Thus
-
-  (?<=bullock|donkey)
-
-is permitted, but
-
-  (?<!dogs?|cats?)
-
-causes an error at compile time. Branches that match different length strings
-are permitted only at the top level of a lookbehind assertion. This is an
-extension compared with Perl 5.005, which requires all branches to match the
-same length of string. An assertion such as
-
-  (?<=ab(c|de))
-
-is not permitted, because its single top-level branch can match two different
-lengths, but it is acceptable if rewritten to use two top-level branches:
-
-  (?<=abc|abde)
-
-The implementation of lookbehind assertions is, for each alternative, to
-temporarily move the current position back by the fixed width and then try to
-match. If there are insufficient characters before the current position, the
-match is deemed to fail. Lookbehinds in conjunction with once-only subpatterns
-can be particularly useful for matching at the ends of strings; an example is
-given at the end of the section on once-only subpatterns.
-
-Several assertions (of any sort) may occur in succession. For example,
-
-  (?<=\\d{3})(?<!999)foo
-
-matches "foo" preceded by three digits that are not "999". Notice that each of
-the assertions is applied independently at the same point in the subject
-string. First there is a check that the previous three characters are all
-digits, and then there is a check that the same three characters are not "999".
-This pattern does \fInot\fR match "foo" preceded by six characters, the first
-of which are digits and the last three of which are not "999". For example, it
-doesn't match "123abcfoo". A pattern to do that is
-
-  (?<=\\d{3}...)(?<!999)foo
-
-This time the first assertion looks at the preceding six characters, checking
-that the first three are digits, and then the second assertion checks that the
-preceding three characters are not "999".
-
-Assertions can be nested in any combination. For example,
-
-  (?<=(?<!foo)bar)baz
-
-matches an occurrence of "baz" that is preceded by "bar" which in turn is not
-preceded by "foo", while
-
-  (?<=\\d{3}(?!999)...)foo
-
-is another pattern which matches "foo" preceded by three digits and any three
-characters that are not "999".
-
-Assertion subpatterns are not capturing subpatterns, and may not be repeated,
-because it makes no sense to assert the same thing several times. If any kind
-of assertion contains capturing subpatterns within it, these are counted for
-the purposes of numbering the capturing subpatterns in the whole pattern.
-However, substring capturing is carried out only for positive assertions,
-because it does not make sense for negative assertions.
-
-Assertions count towards the maximum of 200 parenthesized subpatterns.
-
-
-.SH ONCE-ONLY SUBPATTERNS
-With both maximizing and minimizing repetition, failure of what follows
-normally causes the repeated item to be re-evaluated to see if a different
-number of repeats allows the rest of the pattern to match. Sometimes it is
-useful to prevent this, either to change the nature of the match, or to cause
-it fail earlier than it otherwise might, when the author of the pattern knows
-there is no point in carrying on.
-
-Consider, for example, the pattern \\d+foo when applied to the subject line
-
-  123456bar
-
-After matching all 6 digits and then failing to match "foo", the normal
-action of the matcher is to try again with only 5 digits matching the \\d+
-item, and then with 4, and so on, before ultimately failing. Once-only
-subpatterns provide the means for specifying that once a portion of the pattern
-has matched, it is not to be re-evaluated in this way, so the matcher would
-give up immediately on failing to match "foo" the first time. The notation is
-another kind of special parenthesis, starting with (?> as in this example:
-
-  (?>\\d+)bar
-
-This kind of parenthesis "locks up" the  part of the pattern it contains once
-it has matched, and a failure further into the pattern is prevented from
-backtracking into it. Backtracking past it to previous items, however, works as
-normal.
-
-An alternative description is that a subpattern of this type matches the string
-of characters that an identical standalone pattern would match, if anchored at
-the current point in the subject string.
-
-Once-only subpatterns are not capturing subpatterns. Simple cases such as the
-above example can be thought of as a maximizing repeat that must swallow
-everything it can. So, while both \\d+ and \\d+? are prepared to adjust the
-number of digits they match in order to make the rest of the pattern match,
-(?>\\d+) can only match an entire sequence of digits.
-
-This construction can of course contain arbitrarily complicated subpatterns,
-and it can be nested.
-
-Once-only subpatterns can be used in conjunction with lookbehind assertions to
-specify efficient matching at the end of the subject string. Consider a simple
-pattern such as
-
-  abcd$
-
-when applied to a long string which does not match. Because matching proceeds
-from left to right, PCRE will look for each "a" in the subject and then see if
-what follows matches the rest of the pattern. If the pattern is specified as
-
-  ^.*abcd$
-
-the initial .* matches the entire string at first, but when this fails (because
-there is no following "a"), it backtracks to match all but the last character,
-then all but the last two characters, and so on. Once again the search for "a"
-covers the entire string, from right to left, so we are no better off. However,
-if the pattern is written as
-
-  ^(?>.*)(?<=abcd)
-
-there can be no backtracking for the .* item; it can match only the entire
-string. The subsequent lookbehind assertion does a single test on the last four
-characters. If it fails, the match fails immediately. For long strings, this
-approach makes a significant difference to the processing time.
-
-When a pattern contains an unlimited repeat inside a subpattern that can itself
-be repeated an unlimited number of times, the use of a once-only subpattern is
-the only way to avoid some failing matches taking a very long time indeed.
-The pattern
-
-  (\\D+|<\\d+>)*[!?]
-
-matches an unlimited number of substrings that either consist of non-digits, or
-digits enclosed in <>, followed by either ! or ?. When it matches, it runs
-quickly. However, if it is applied to
-
-  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-
-it takes a long time before reporting failure. This is because the string can
-be divided between the two repeats in a large number of ways, and all have to
-be tried. (The example used [!?] rather than a single character at the end,
-because both PCRE and Perl have an optimization that allows for fast failure
-when a single character is used. They remember the last single character that
-is required for a match, and fail early if it is not present in the string.)
-If the pattern is changed to
-
-  ((?>\\D+)|<\\d+>)*[!?]
-
-sequences of non-digits cannot be broken, and failure happens quickly.
-
-
-.SH CONDITIONAL SUBPATTERNS
-It is possible to cause the matching process to obey a subpattern
-conditionally or to choose between two alternative subpatterns, depending on
-the result of an assertion, or whether a previous capturing subpattern matched
-or not. The two possible forms of conditional subpattern are
-
-  (?(condition)yes-pattern)
-  (?(condition)yes-pattern|no-pattern)
-
-If the condition is satisfied, the yes-pattern is used; otherwise the
-no-pattern (if present) is used. If there are more than two alternatives in the
-subpattern, a compile-time error occurs.
-
-There are two kinds of condition. If the text between the parentheses consists
-of a sequence of digits, the condition is satisfied if the capturing subpattern
-of that number has previously matched. Consider the following pattern, which
-contains non-significant white space to make it more readable (assume the
-PCRE_EXTENDED option) and to divide it into three parts for ease of discussion:
-
-  ( \\( )?    [^()]+    (?(1) \\) )
-
-The first part matches an optional opening parenthesis, and if that
-character is present, sets it as the first captured substring. The second part
-matches one or more characters that are not parentheses. The third part is a
-conditional subpattern that tests whether the first set of parentheses matched
-or not. If they did, that is, if subject started with an opening parenthesis,
-the condition is true, and so the yes-pattern is executed and a closing
-parenthesis is required. Otherwise, since no-pattern is not present, the
-subpattern matches nothing. In other words, this pattern matches a sequence of
-non-parentheses, optionally enclosed in parentheses.
-
-If the condition is not a sequence of digits, it must be an assertion. This may
-be a positive or negative lookahead or lookbehind assertion. Consider this
-pattern, again containing non-significant white space, and with the two
-alternatives on the second line:
-
-  (?(?=[^a-z]*[a-z])
-  \\d{2}-[a-z]{3}-\\d{2}  |  \\d{2}-\\d{2}-\\d{2} )
-
-The condition is a positive lookahead assertion that matches an optional
-sequence of non-letters followed by a letter. In other words, it tests for the
-presence of at least one letter in the subject. If a letter is found, the
-subject is matched against the first alternative; otherwise it is matched
-against the second. This pattern matches strings in one of the two forms
-dd-aaa-dd or dd-dd-dd, where aaa are letters and dd are digits.
-
-
-.SH COMMENTS
-The sequence (?# marks the start of a comment which continues up to the next
-closing parenthesis. Nested parentheses are not permitted. The characters
-that make up a comment play no part in the pattern matching at all.
-
-If the PCRE_EXTENDED option is set, an unescaped # character outside a
-character class introduces a comment that continues up to the next newline
-character in the pattern.
-
-
-.SH RECURSIVE PATTERNS
-Consider the problem of matching a string in parentheses, allowing for
-unlimited nested parentheses. Without the use of recursion, the best that can
-be done is to use a pattern that matches up to some fixed depth of nesting. It
-is not possible to handle an arbitrary nesting depth. Perl 5.6 has provided an
-experimental facility that allows regular expressions to recurse (amongst other
-things). It does this by interpolating Perl code in the expression at run time,
-and the code can refer to the expression itself. A Perl pattern to solve the
-parentheses problem can be created like this:
-
-  $re = qr{\\( (?: (?>[^()]+) | (?p{$re}) )* \\)}x;
-
-The (?p{...}) item interpolates Perl code at run time, and in this case refers
-recursively to the pattern in which it appears. Obviously, PCRE cannot support
-the interpolation of Perl code. Instead, the special item (?R) is provided for
-the specific case of recursion. This PCRE pattern solves the parentheses
-problem (assume the PCRE_EXTENDED option is set so that white space is
-ignored):
-
-  \\( ( (?>[^()]+) | (?R) )* \\)
-
-First it matches an opening parenthesis. Then it matches any number of
-substrings which can either be a sequence of non-parentheses, or a recursive
-match of the pattern itself (i.e. a correctly parenthesized substring). Finally
-there is a closing parenthesis.
-
-This particular example pattern contains nested unlimited repeats, and so the
-use of a once-only subpattern for matching strings of non-parentheses is
-important when applying the pattern to strings that do not match. For example,
-when it is applied to
-
-  (aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa()
-
-it yields "no match" quickly. However, if a once-only subpattern is not used,
-the match runs for a very long time indeed because there are so many different
-ways the + and * repeats can carve up the subject, and all have to be tested
-before failure can be reported.
-
-The values set for any capturing subpatterns are those from the outermost level
-of the recursion at which the subpattern value is set. If the pattern above is
-matched against
-
-  (ab(cd)ef)
-
-the value for the capturing parentheses is "ef", which is the last value taken
-on at the top level. If additional parentheses are added, giving
-
-  \\( ( ( (?>[^()]+) | (?R) )* ) \\)
-     ^                        ^
-     ^                        ^
-the string they capture is "ab(cd)ef", the contents of the top level
-parentheses. If there are more than 15 capturing parentheses in a pattern, PCRE
-has to obtain extra memory to store data during a recursion, which it does by
-using \fBpcre_malloc\fR, freeing it via \fBpcre_free\fR afterwards. If no
-memory can be obtained, it saves data for the first 15 capturing parentheses
-only, as there is no way to give an out-of-memory error from within a
-recursion.
-
-
-.SH PERFORMANCE
-Certain items that may appear in patterns are more efficient than others. It is
-more efficient to use a character class like [aeiou] than a set of alternatives
-such as (a|e|i|o|u). In general, the simplest construction that provides the
-required behaviour is usually the most efficient. Jeffrey Friedl's book
-contains a lot of discussion about optimizing regular expressions for efficient
-performance.
-
-When a pattern begins with .* and the PCRE_DOTALL option is set, the pattern is
-implicitly anchored by PCRE, since it can match only at the start of a subject
-string. However, if PCRE_DOTALL is not set, PCRE cannot make this optimization,
-because the . metacharacter does not then match a newline, and if the subject
-string contains newlines, the pattern may match from the character immediately
-following one of them instead of from the very start. For example, the pattern
-
-  (.*) second
-
-matches the subject "first\\nand second" (where \\n stands for a newline
-character) with the first captured substring being "and". In order to do this,
-PCRE has to retry the match starting after every newline in the subject.
-
-If you are using such a pattern with subject strings that do not contain
-newlines, the best performance is obtained by setting PCRE_DOTALL, or starting
-the pattern with ^.* to indicate explicit anchoring. That saves PCRE from
-having to scan along the subject looking for a newline to restart at.
-
-Beware of patterns that contain nested indefinite repeats. These can take a
-long time to run when applied to a string that does not match. Consider the
-pattern fragment
-
-  (a+)*
-
-This can match "aaaa" in 33 different ways, and this number increases very
-rapidly as the string gets longer. (The * repeat can match 0, 1, 2, 3, or 4
-times, and for each of those cases other than 0, the + repeats can match
-different numbers of times.) When the remainder of the pattern is such that the
-entire match is going to fail, PCRE has in principle to try every possible
-variation, and this can take an extremely long time.
-
-An optimization catches some of the more simple cases such as
-
-  (a+)*b
-
-where a literal character follows. Before embarking on the standard matching
-procedure, PCRE checks that there is a "b" later in the subject string, and if
-there is not, it fails the match immediately. However, when there is no
-following literal this optimization cannot be used. You can see the difference
-by comparing the behaviour of
-
-  (a+)*\\d
-
-with the pattern above. The former gives a failure almost instantly when
-applied to a whole line of "a" characters, whereas the latter takes an
-appreciable time with strings longer than about 20 characters.
-
-.SH AUTHOR
-Philip Hazel <ph10@cam.ac.uk>
-.br
-University Computing Service,
-.br
-New Museums Site,
-.br
-Cambridge CB2 3QG, England.
-.br
-Phone: +44 1223 334714
-
-Last updated: 27 January 2000
-.br
-Copyright (c) 1997-2000 University of Cambridge.
diff --git a/srclib/pcre/doc/pcre.html b/srclib/pcre/doc/pcre.html
deleted file mode 100644
index 7eba9c3..0000000
--- a/srclib/pcre/doc/pcre.html
+++ /dev/null
@@ -1,2258 +0,0 @@
-<HTML>
-<HEAD>
-<TITLE>pcre specification</TITLE>
-</HEAD>
-<body bgcolor="#FFFFFF" text="#00005A">
-<H1>pcre specification</H1>
-This HTML document has been generated automatically from the original man page.
-If there is any nonsense in it, please consult the man page in case the
-conversion went wrong.
-<UL>
-<LI><A NAME="TOC1" HREF="#SEC1">NAME</A>
-<LI><A NAME="TOC2" HREF="#SEC2">SYNOPSIS</A>
-<LI><A NAME="TOC3" HREF="#SEC3">DESCRIPTION</A>
-<LI><A NAME="TOC4" HREF="#SEC4">MULTI-THREADING</A>
-<LI><A NAME="TOC5" HREF="#SEC5">COMPILING A PATTERN</A>
-<LI><A NAME="TOC6" HREF="#SEC6">STUDYING A PATTERN</A>
-<LI><A NAME="TOC7" HREF="#SEC7">LOCALE SUPPORT</A>
-<LI><A NAME="TOC8" HREF="#SEC8">INFORMATION ABOUT A PATTERN</A>
-<LI><A NAME="TOC9" HREF="#SEC9">MATCHING A PATTERN</A>
-<LI><A NAME="TOC10" HREF="#SEC10">EXTRACTING CAPTURED SUBSTRINGS</A>
-<LI><A NAME="TOC11" HREF="#SEC11">LIMITATIONS</A>
-<LI><A NAME="TOC12" HREF="#SEC12">DIFFERENCES FROM PERL</A>
-<LI><A NAME="TOC13" HREF="#SEC13">REGULAR EXPRESSION DETAILS</A>
-<LI><A NAME="TOC14" HREF="#SEC14">BACKSLASH</A>
-<LI><A NAME="TOC15" HREF="#SEC15">CIRCUMFLEX AND DOLLAR</A>
-<LI><A NAME="TOC16" HREF="#SEC16">FULL STOP (PERIOD, DOT)</A>
-<LI><A NAME="TOC17" HREF="#SEC17">SQUARE BRACKETS</A>
-<LI><A NAME="TOC18" HREF="#SEC18">POSIX CHARACTER CLASSES</A>
-<LI><A NAME="TOC19" HREF="#SEC19">VERTICAL BAR</A>
-<LI><A NAME="TOC20" HREF="#SEC20">INTERNAL OPTION SETTING</A>
-<LI><A NAME="TOC21" HREF="#SEC21">SUBPATTERNS</A>
-<LI><A NAME="TOC22" HREF="#SEC22">REPETITION</A>
-<LI><A NAME="TOC23" HREF="#SEC23">BACK REFERENCES</A>
-<LI><A NAME="TOC24" HREF="#SEC24">ASSERTIONS</A>
-<LI><A NAME="TOC25" HREF="#SEC25">ONCE-ONLY SUBPATTERNS</A>
-<LI><A NAME="TOC26" HREF="#SEC26">CONDITIONAL SUBPATTERNS</A>
-<LI><A NAME="TOC27" HREF="#SEC27">COMMENTS</A>
-<LI><A NAME="TOC28" HREF="#SEC28">RECURSIVE PATTERNS</A>
-<LI><A NAME="TOC29" HREF="#SEC29">PERFORMANCE</A>
-<LI><A NAME="TOC30" HREF="#SEC30">AUTHOR</A>
-</UL>
-<LI><A NAME="SEC1" HREF="#TOC1">NAME</A>
-<P>
-pcre - Perl-compatible regular expressions.
-</P>
-<LI><A NAME="SEC2" HREF="#TOC1">SYNOPSIS</A>
-<P>
-<B>#include &#60;pcre.h&#62;</B>
-</P>
-<P>
-<B>pcre *pcre_compile(const char *<I>pattern</I>, int <I>options</I>,</B>
-<B>const char **<I>errptr</I>, int *<I>erroffset</I>,</B>
-<B>const unsigned char *<I>tableptr</I>);</B>
-</P>
-<P>
-<B>pcre_extra *pcre_study(const pcre *<I>code</I>, int <I>options</I>,</B>
-<B>const char **<I>errptr</I>);</B>
-</P>
-<P>
-<B>int pcre_exec(const pcre *<I>code</I>, const pcre_extra *<I>extra</I>,</B>
-<B>const char *<I>subject</I>, int <I>length</I>, int <I>startoffset</I>,</B>
-<B>int <I>options</I>, int *<I>ovector</I>, int <I>ovecsize</I>);</B>
-</P>
-<P>
-<B>int pcre_copy_substring(const char *<I>subject</I>, int *<I>ovector</I>,</B>
-<B>int <I>stringcount</I>, int <I>stringnumber</I>, char *<I>buffer</I>,</B>
-<B>int <I>buffersize</I>);</B>
-</P>
-<P>
-<B>int pcre_get_substring(const char *<I>subject</I>, int *<I>ovector</I>,</B>
-<B>int <I>stringcount</I>, int <I>stringnumber</I>,</B>
-<B>const char **<I>stringptr</I>);</B>
-</P>
-<P>
-<B>int pcre_get_substring_list(const char *<I>subject</I>,</B>
-<B>int *<I>ovector</I>, int <I>stringcount</I>, const char ***<I>listptr</I>);</B>
-</P>
-<P>
-<B>const unsigned char *pcre_maketables(void);</B>
-</P>
-<P>
-<B>int pcre_fullinfo(const pcre *<I>code</I>, const pcre_extra *<I>extra</I>,</B>
-<B>int <I>what</I>, void *<I>where</I>);</B>
-</P>
-<P>
-<B>int pcre_info(const pcre *<I>code</I>, int *<I>optptr</I>, int</B>
-<B>*<I>firstcharptr</I>);</B>
-</P>
-<P>
-<B>char *pcre_version(void);</B>
-</P>
-<P>
-<B>void *(*pcre_malloc)(size_t);</B>
-</P>
-<P>
-<B>void (*pcre_free)(void *);</B>
-</P>
-<LI><A NAME="SEC3" HREF="#TOC1">DESCRIPTION</A>
-<P>
-The PCRE library is a set of functions that implement regular expression
-pattern matching using the same syntax and semantics as Perl 5, with just a few
-differences (see below). The current implementation corresponds to Perl 5.005,
-with some additional features from the Perl development release.
-</P>
-<P>
-PCRE has its own native API, which is described in this document. There is also
-a set of wrapper functions that correspond to the POSIX regular expression API.
-These are described in the <B>pcreposix</B> documentation.
-</P>
-<P>
-The native API function prototypes are defined in the header file <B>pcre.h</B>,
-and on Unix systems the library itself is called <B>libpcre.a</B>, so can be
-accessed by adding <B>-lpcre</B> to the command for linking an application which
-calls it. The header file defines the macros PCRE_MAJOR and PCRE_MINOR to
-contain the major and minor release numbers for the library. Applications can
-use these to include support for different releases.
-</P>
-<P>
-The functions <B>pcre_compile()</B>, <B>pcre_study()</B>, and <B>pcre_exec()</B>
-are used for compiling and matching regular expressions, while
-<B>pcre_copy_substring()</B>, <B>pcre_get_substring()</B>, and
-<B>pcre_get_substring_list()</B> are convenience functions for extracting
-captured substrings from a matched subject string. The function
-<B>pcre_maketables()</B> is used (optionally) to build a set of character tables
-in the current locale for passing to <B>pcre_compile()</B>.
-</P>
-<P>
-The function <B>pcre_fullinfo()</B> is used to find out information about a
-compiled pattern; <B>pcre_info()</B> is an obsolete version which returns only
-some of the available information, but is retained for backwards compatibility.
-The function <B>pcre_version()</B> returns a pointer to a string containing the
-version of PCRE and its date of release.
-</P>
-<P>
-The global variables <B>pcre_malloc</B> and <B>pcre_free</B> initially contain
-the entry points of the standard <B>malloc()</B> and <B>free()</B> functions
-respectively. PCRE calls the memory management functions via these variables,
-so a calling program can replace them if it wishes to intercept the calls. This
-should be done before calling any PCRE functions.
-</P>
-<LI><A NAME="SEC4" HREF="#TOC1">MULTI-THREADING</A>
-<P>
-The PCRE functions can be used in multi-threading applications, with the
-proviso that the memory management functions pointed to by <B>pcre_malloc</B>
-and <B>pcre_free</B> are shared by all threads.
-</P>
-<P>
-The compiled form of a regular expression is not altered during matching, so
-the same compiled pattern can safely be used by several threads at once.
-</P>
-<LI><A NAME="SEC5" HREF="#TOC1">COMPILING A PATTERN</A>
-<P>
-The function <B>pcre_compile()</B> is called to compile a pattern into an
-internal form. The pattern is a C string terminated by a binary zero, and
-is passed in the argument <I>pattern</I>. A pointer to a single block of memory
-that is obtained via <B>pcre_malloc</B> is returned. This contains the
-compiled code and related data. The <B>pcre</B> type is defined for this for
-convenience, but in fact <B>pcre</B> is just a typedef for <B>void</B>, since the
-contents of the block are not externally defined. It is up to the caller to
-free the memory when it is no longer required.
-</P>
-<P>
-The size of a compiled pattern is roughly proportional to the length of the
-pattern string, except that each character class (other than those containing
-just a single character, negated or not) requires 33 bytes, and repeat
-quantifiers with a minimum greater than one or a bounded maximum cause the
-relevant portions of the compiled pattern to be replicated.
-</P>
-<P>
-The <I>options</I> argument contains independent bits that affect the
-compilation. It should be zero if no options are required. Some of the options,
-in particular, those that are compatible with Perl, can also be set and unset
-from within the pattern (see the detailed description of regular expressions
-below). For these options, the contents of the <I>options</I> argument specifies
-their initial settings at the start of compilation and execution. The
-PCRE_ANCHORED option can be set at the time of matching as well as at compile
-time.
-</P>
-<P>
-If <I>errptr</I> is NULL, <B>pcre_compile()</B> returns NULL immediately.
-Otherwise, if compilation of a pattern fails, <B>pcre_compile()</B> returns
-NULL, and sets the variable pointed to by <I>errptr</I> to point to a textual
-error message. The offset from the start of the pattern to the character where
-the error was discovered is placed in the variable pointed to by
-<I>erroffset</I>, which must not be NULL. If it is, an immediate error is given.
-</P>
-<P>
-If the final argument, <I>tableptr</I>, is NULL, PCRE uses a default set of
-character tables which are built when it is compiled, using the default C
-locale. Otherwise, <I>tableptr</I> must be the result of a call to
-<B>pcre_maketables()</B>. See the section on locale support below.
-</P>
-<P>
-The following option bits are defined in the header file:
-</P>
-<P>
-<PRE>
-  PCRE_ANCHORED
-</PRE>
-</P>
-<P>
-If this bit is set, the pattern is forced to be "anchored", that is, it is
-constrained to match only at the start of the string which is being searched
-(the "subject string"). This effect can also be achieved by appropriate
-constructs in the pattern itself, which is the only way to do it in Perl.
-</P>
-<P>
-<PRE>
-  PCRE_CASELESS
-</PRE>
-</P>
-<P>
-If this bit is set, letters in the pattern match both upper and lower case
-letters. It is equivalent to Perl's /i option.
-</P>
-<P>
-<PRE>
-  PCRE_DOLLAR_ENDONLY
-</PRE>
-</P>
-<P>
-If this bit is set, a dollar metacharacter in the pattern matches only at the
-end of the subject string. Without this option, a dollar also matches
-immediately before the final character if it is a newline (but not before any
-other newlines). The PCRE_DOLLAR_ENDONLY option is ignored if PCRE_MULTILINE is
-set. There is no equivalent to this option in Perl.
-</P>
-<P>
-<PRE>
-  PCRE_DOTALL
-</PRE>
-</P>
-<P>
-If this bit is set, a dot metacharater in the pattern matches all characters,
-including newlines. Without it, newlines are excluded. This option is
-equivalent to Perl's /s option. A negative class such as [^a] always matches a
-newline character, independent of the setting of this option.
-</P>
-<P>
-<PRE>
-  PCRE_EXTENDED
-</PRE>
-</P>
-<P>
-If this bit is set, whitespace data characters in the pattern are totally
-ignored except when escaped or inside a character class, and characters between
-an unescaped # outside a character class and the next newline character,
-inclusive, are also ignored. This is equivalent to Perl's /x option, and makes
-it possible to include comments inside complicated patterns. Note, however,
-that this applies only to data characters. Whitespace characters may never
-appear within special character sequences in a pattern, for example within the
-sequence (?( which introduces a conditional subpattern.
-</P>
-<P>
-<PRE>
-  PCRE_EXTRA
-</PRE>
-</P>
-<P>
-This option was invented in order to turn on additional functionality of PCRE
-that is incompatible with Perl, but it is currently of very little use. When
-set, any backslash in a pattern that is followed by a letter that has no
-special meaning causes an error, thus reserving these combinations for future
-expansion. By default, as in Perl, a backslash followed by a letter with no
-special meaning is treated as a literal. There are at present no other features
-controlled by this option. It can also be set by a (?X) option setting within a
-pattern.
-</P>
-<P>
-<PRE>
-  PCRE_MULTILINE
-</PRE>
-</P>
-<P>
-By default, PCRE treats the subject string as consisting of a single "line" of
-characters (even if it actually contains several newlines). The "start of line"
-metacharacter (^) matches only at the start of the string, while the "end of
-line" metacharacter ($) matches only at the end of the string, or before a
-terminating newline (unless PCRE_DOLLAR_ENDONLY is set). This is the same as
-Perl.
-</P>
-<P>
-When PCRE_MULTILINE it is set, the "start of line" and "end of line" constructs
-match immediately following or immediately before any newline in the subject
-string, respectively, as well as at the very start and end. This is equivalent
-to Perl's /m option. If there are no "\n" characters in a subject string, or
-no occurrences of ^ or $ in a pattern, setting PCRE_MULTILINE has no
-effect.
-</P>
-<P>
-<PRE>
-  PCRE_UNGREEDY
-</PRE>
-</P>
-<P>
-This option inverts the "greediness" of the quantifiers so that they are not
-greedy by default, but become greedy if followed by "?". It is not compatible
-with Perl. It can also be set by a (?U) option setting within the pattern.
-</P>
-<LI><A NAME="SEC6" HREF="#TOC1">STUDYING A PATTERN</A>
-<P>
-When a pattern is going to be used several times, it is worth spending more
-time analyzing it in order to speed up the time taken for matching. The
-function <B>pcre_study()</B> takes a pointer to a compiled pattern as its first
-argument, and returns a pointer to a <B>pcre_extra</B> block (another <B>void</B>
-typedef) containing additional information about the pattern; this can be
-passed to <B>pcre_exec()</B>. If no additional information is available, NULL
-is returned.
-</P>
-<P>
-The second argument contains option bits. At present, no options are defined
-for <B>pcre_study()</B>, and this argument should always be zero.
-</P>
-<P>
-The third argument for <B>pcre_study()</B> is a pointer to an error message. If
-studying succeeds (even if no data is returned), the variable it points to is
-set to NULL. Otherwise it points to a textual error message.
-</P>
-<P>
-At present, studying a pattern is useful only for non-anchored patterns that do
-not have a single fixed starting character. A bitmap of possible starting
-characters is created.
-</P>
-<LI><A NAME="SEC7" HREF="#TOC1">LOCALE SUPPORT</A>
-<P>
-PCRE handles caseless matching, and determines whether characters are letters,
-digits, or whatever, by reference to a set of tables. The library contains a
-default set of tables which is created in the default C locale when PCRE is
-compiled. This is used when the final argument of <B>pcre_compile()</B> is NULL,
-and is sufficient for many applications.
-</P>
-<P>
-An alternative set of tables can, however, be supplied. Such tables are built
-by calling the <B>pcre_maketables()</B> function, which has no arguments, in the
-relevant locale. The result can then be passed to <B>pcre_compile()</B> as often
-as necessary. For example, to build and use tables that are appropriate for the
-French locale (where accented characters with codes greater than 128 are
-treated as letters), the following code could be used:
-</P>
-<P>
-<PRE>
-  setlocale(LC_CTYPE, "fr");
-  tables = pcre_maketables();
-  re = pcre_compile(..., tables);
-</PRE>
-</P>
-<P>
-The tables are built in memory that is obtained via <B>pcre_malloc</B>. The
-pointer that is passed to <B>pcre_compile</B> is saved with the compiled
-pattern, and the same tables are used via this pointer by <B>pcre_study()</B>
-and <B>pcre_exec()</B>. Thus for any single pattern, compilation, studying and
-matching all happen in the same locale, but different patterns can be compiled
-in different locales. It is the caller's responsibility to ensure that the
-memory containing the tables remains available for as long as it is needed.
-</P>
-<LI><A NAME="SEC8" HREF="#TOC1">INFORMATION ABOUT A PATTERN</A>
-<P>
-The <B>pcre_fullinfo()</B> function returns information about a compiled
-pattern. It replaces the obsolete <B>pcre_info()</B> function, which is
-nevertheless retained for backwards compability (and is documented below).
-</P>
-<P>
-The first argument for <B>pcre_fullinfo()</B> is a pointer to the compiled
-pattern. The second argument is the result of <B>pcre_study()</B>, or NULL if
-the pattern was not studied. The third argument specifies which piece of
-information is required, while the fourth argument is a pointer to a variable
-to receive the data. The yield of the function is zero for success, or one of
-the following negative numbers:
-</P>
-<P>
-<PRE>
-  PCRE_ERROR_NULL       the argument <I>code</I> was NULL
-                        the argument <I>where</I> was NULL
-  PCRE_ERROR_BADMAGIC   the "magic number" was not found
-  PCRE_ERROR_BADOPTION  the value of <I>what</I> was invalid
-</PRE>
-</P>
-<P>
-The possible values for the third argument are defined in <B>pcre.h</B>, and are
-as follows:
-</P>
-<P>
-<PRE>
-  PCRE_INFO_OPTIONS
-</PRE>
-</P>
-<P>
-Return a copy of the options with which the pattern was compiled. The fourth
-argument should point to au <B>unsigned long int</B> variable. These option bits
-are those specified in the call to <B>pcre_compile()</B>, modified by any
-top-level option settings within the pattern itself, and with the PCRE_ANCHORED
-bit forcibly set if the form of the pattern implies that it can match only at
-the start of a subject string.
-</P>
-<P>
-<PRE>
-  PCRE_INFO_SIZE
-</PRE>
-</P>
-<P>
-Return the size of the compiled pattern, that is, the value that was passed as
-the argument to <B>pcre_malloc()</B> when PCRE was getting memory in which to
-place the compiled data. The fourth argument should point to a <B>size_t</B>
-variable.
-</P>
-<P>
-<PRE>
-  PCRE_INFO_CAPTURECOUNT
-</PRE>
-</P>
-<P>
-Return the number of capturing subpatterns in the pattern. The fourth argument
-should point to an \fbint\fR variable.
-</P>
-<P>
-<PRE>
-  PCRE_INFO_BACKREFMAX
-</PRE>
-</P>
-<P>
-Return the number of the highest back reference in the pattern. The fourth
-argument should point to an <B>int</B> variable. Zero is returned if there are
-no back references.
-</P>
-<P>
-<PRE>
-  PCRE_INFO_FIRSTCHAR
-</PRE>
-</P>
-<P>
-Return information about the first character of any matched string, for a
-non-anchored pattern. If there is a fixed first character, e.g. from a pattern
-such as (cat|cow|coyote), it is returned in the integer pointed to by
-<I>where</I>. Otherwise, if either
-</P>
-<P>
-(a) the pattern was compiled with the PCRE_MULTILINE option, and every branch
-starts with "^", or
-</P>
-<P>
-(b) every branch of the pattern starts with ".*" and PCRE_DOTALL is not set
-(if it were set, the pattern would be anchored),
-</P>
-<P>
--1 is returned, indicating that the pattern matches only at the start of a
-subject string or after any "\n" within the string. Otherwise -2 is returned.
-For anchored patterns, -2 is returned.
-</P>
-<P>
-<PRE>
-  PCRE_INFO_FIRSTTABLE
-</PRE>
-</P>
-<P>
-If the pattern was studied, and this resulted in the construction of a 256-bit
-table indicating a fixed set of characters for the first character in any
-matching string, a pointer to the table is returned. Otherwise NULL is
-returned. The fourth argument should point to an <B>unsigned char *</B>
-variable.
-</P>
-<P>
-<PRE>
-  PCRE_INFO_LASTLITERAL
-</PRE>
-</P>
-<P>
-For a non-anchored pattern, return the value of the rightmost literal character
-which must exist in any matched string, other than at its start. The fourth
-argument should point to an <B>int</B> variable. If there is no such character,
-or if the pattern is anchored, -1 is returned. For example, for the pattern
-/a\d+z\d+/ the returned value is 'z'.
-</P>
-<P>
-The <B>pcre_info()</B> function is now obsolete because its interface is too
-restrictive to return all the available data about a compiled pattern. New
-programs should use <B>pcre_fullinfo()</B> instead. The yield of
-<B>pcre_info()</B> is the number of capturing subpatterns, or one of the
-following negative numbers:
-</P>
-<P>
-<PRE>
-  PCRE_ERROR_NULL       the argument <I>code</I> was NULL
-  PCRE_ERROR_BADMAGIC   the "magic number" was not found
-</PRE>
-</P>
-<P>
-If the <I>optptr</I> argument is not NULL, a copy of the options with which the
-pattern was compiled is placed in the integer it points to (see
-PCRE_INFO_OPTIONS above).
-</P>
-<P>
-If the pattern is not anchored and the <I>firstcharptr</I> argument is not NULL,
-it is used to pass back information about the first character of any matched
-string (see PCRE_INFO_FIRSTCHAR above).
-</P>
-<LI><A NAME="SEC9" HREF="#TOC1">MATCHING A PATTERN</A>
-<P>
-The function <B>pcre_exec()</B> is called to match a subject string against a
-pre-compiled pattern, which is passed in the <I>code</I> argument. If the
-pattern has been studied, the result of the study should be passed in the
-<I>extra</I> argument. Otherwise this must be NULL.
-</P>
-<P>
-The PCRE_ANCHORED option can be passed in the <I>options</I> argument, whose
-unused bits must be zero. However, if a pattern was compiled with
-PCRE_ANCHORED, or turned out to be anchored by virtue of its contents, it
-cannot be made unachored at matching time.
-</P>
-<P>
-There are also three further options that can be set only at matching time:
-</P>
-<P>
-<PRE>
-  PCRE_NOTBOL
-</PRE>
-</P>
-<P>
-The first character of the string is not the beginning of a line, so the
-circumflex metacharacter should not match before it. Setting this without
-PCRE_MULTILINE (at compile time) causes circumflex never to match.
-</P>
-<P>
-<PRE>
-  PCRE_NOTEOL
-</PRE>
-</P>
-<P>
-The end of the string is not the end of a line, so the dollar metacharacter
-should not match it nor (except in multiline mode) a newline immediately before
-it. Setting this without PCRE_MULTILINE (at compile time) causes dollar never
-to match.
-</P>
-<P>
-<PRE>
-  PCRE_NOTEMPTY
-</PRE>
-</P>
-<P>
-An empty string is not considered to be a valid match if this option is set. If
-there are alternatives in the pattern, they are tried. If all the alternatives
-match the empty string, the entire match fails. For example, if the pattern
-</P>
-<P>
-<PRE>
-  a?b?
-</PRE>
-</P>
-<P>
-is applied to a string not beginning with "a" or "b", it matches the empty
-string at the start of the subject. With PCRE_NOTEMPTY set, this match is not
-valid, so PCRE searches further into the string for occurrences of "a" or "b".
-</P>
-<P>
-Perl has no direct equivalent of PCRE_NOTEMPTY, but it does make a special case
-of a pattern match of the empty string within its <B>split()</B> function, and
-when using the /g modifier. It is possible to emulate Perl's behaviour after
-matching a null string by first trying the match again at the same offset with
-PCRE_NOTEMPTY set, and then if that fails by advancing the starting offset (see
-below) and trying an ordinary match again.
-</P>
-<P>
-The subject string is passed as a pointer in <I>subject</I>, a length in
-<I>length</I>, and a starting offset in <I>startoffset</I>. Unlike the pattern
-string, it may contain binary zero characters. When the starting offset is
-zero, the search for a match starts at the beginning of the subject, and this
-is by far the most common case.
-</P>
-<P>
-A non-zero starting offset is useful when searching for another match in the
-same subject by calling <B>pcre_exec()</B> again after a previous success.
-Setting <I>startoffset</I> differs from just passing over a shortened string and
-setting PCRE_NOTBOL in the case of a pattern that begins with any kind of
-lookbehind. For example, consider the pattern
-</P>
-<P>
-<PRE>
-  \Biss\B
-</PRE>
-</P>
-<P>
-which finds occurrences of "iss" in the middle of words. (\B matches only if
-the current position in the subject is not a word boundary.) When applied to
-the string "Mississipi" the first call to <B>pcre_exec()</B> finds the first
-occurrence. If <B>pcre_exec()</B> is called again with just the remainder of the
-subject, namely "issipi", it does not match, because \B is always false at the
-start of the subject, which is deemed to be a word boundary. However, if
-<B>pcre_exec()</B> is passed the entire string again, but with <I>startoffset</I>
-set to 4, it finds the second occurrence of "iss" because it is able to look
-behind the starting point to discover that it is preceded by a letter.
-</P>
-<P>
-If a non-zero starting offset is passed when the pattern is anchored, one
-attempt to match at the given offset is tried. This can only succeed if the
-pattern does not require the match to be at the start of the subject.
-</P>
-<P>
-In general, a pattern matches a certain portion of the subject, and in
-addition, further substrings from the subject may be picked out by parts of the
-pattern. Following the usage in Jeffrey Friedl's book, this is called
-"capturing" in what follows, and the phrase "capturing subpattern" is used for
-a fragment of a pattern that picks out a substring. PCRE supports several other
-kinds of parenthesized subpattern that do not cause substrings to be captured.
-</P>
-<P>
-Captured substrings are returned to the caller via a vector of integer offsets
-whose address is passed in <I>ovector</I>. The number of elements in the vector
-is passed in <I>ovecsize</I>. The first two-thirds of the vector is used to pass
-back captured substrings, each substring using a pair of integers. The
-remaining third of the vector is used as workspace by <B>pcre_exec()</B> while
-matching capturing subpatterns, and is not available for passing back
-information. The length passed in <I>ovecsize</I> should always be a multiple of
-three. If it is not, it is rounded down.
-</P>
-<P>
-When a match has been successful, information about captured substrings is
-returned in pairs of integers, starting at the beginning of <I>ovector</I>, and
-continuing up to two-thirds of its length at the most. The first element of a
-pair is set to the offset of the first character in a substring, and the second
-is set to the offset of the first character after the end of a substring. The
-first pair, <I>ovector[0]</I> and <I>ovector[1]</I>, identify the portion of the
-subject string matched by the entire pattern. The next pair is used for the
-first capturing subpattern, and so on. The value returned by <B>pcre_exec()</B>
-is the number of pairs that have been set. If there are no capturing
-subpatterns, the return value from a successful match is 1, indicating that
-just the first pair of offsets has been set.
-</P>
-<P>
-Some convenience functions are provided for extracting the captured substrings
-as separate strings. These are described in the following section.
-</P>
-<P>
-It is possible for an capturing subpattern number <I>n+1</I> to match some
-part of the subject when subpattern <I>n</I> has not been used at all. For
-example, if the string "abc" is matched against the pattern (a|(z))(bc)
-subpatterns 1 and 3 are matched, but 2 is not. When this happens, both offset
-values corresponding to the unused subpattern are set to -1.
-</P>
-<P>
-If a capturing subpattern is matched repeatedly, it is the last portion of the
-string that it matched that gets returned.
-</P>
-<P>
-If the vector is too small to hold all the captured substrings, it is used as
-far as possible (up to two-thirds of its length), and the function returns a
-value of zero. In particular, if the substring offsets are not of interest,
-<B>pcre_exec()</B> may be called with <I>ovector</I> passed as NULL and
-<I>ovecsize</I> as zero. However, if the pattern contains back references and
-the <I>ovector</I> isn't big enough to remember the related substrings, PCRE has
-to get additional memory for use during matching. Thus it is usually advisable
-to supply an <I>ovector</I>.
-</P>
-<P>
-Note that <B>pcre_info()</B> can be used to find out how many capturing
-subpatterns there are in a compiled pattern. The smallest size for
-<I>ovector</I> that will allow for <I>n</I> captured substrings in addition to
-the offsets of the substring matched by the whole pattern is (<I>n</I>+1)*3.
-</P>
-<P>
-If <B>pcre_exec()</B> fails, it returns a negative number. The following are
-defined in the header file:
-</P>
-<P>
-<PRE>
-  PCRE_ERROR_NOMATCH        (-1)
-</PRE>
-</P>
-<P>
-The subject string did not match the pattern.
-</P>
-<P>
-<PRE>
-  PCRE_ERROR_NULL           (-2)
-</PRE>
-</P>
-<P>
-Either <I>code</I> or <I>subject</I> was passed as NULL, or <I>ovector</I> was
-NULL and <I>ovecsize</I> was not zero.
-</P>
-<P>
-<PRE>
-  PCRE_ERROR_BADOPTION      (-3)
-</PRE>
-</P>
-<P>
-An unrecognized bit was set in the <I>options</I> argument.
-</P>
-<P>
-<PRE>
-  PCRE_ERROR_BADMAGIC       (-4)
-</PRE>
-</P>
-<P>
-PCRE stores a 4-byte "magic number" at the start of the compiled code, to catch
-the case when it is passed a junk pointer. This is the error it gives when the
-magic number isn't present.
-</P>
-<P>
-<PRE>
-  PCRE_ERROR_UNKNOWN_NODE   (-5)
-</PRE>
-</P>
-<P>
-While running the pattern match, an unknown item was encountered in the
-compiled pattern. This error could be caused by a bug in PCRE or by overwriting
-of the compiled pattern.
-</P>
-<P>
-<PRE>
-  PCRE_ERROR_NOMEMORY       (-6)
-</PRE>
-</P>
-<P>
-If a pattern contains back references, but the <I>ovector</I> that is passed to
-<B>pcre_exec()</B> is not big enough to remember the referenced substrings, PCRE
-gets a block of memory at the start of matching to use for this purpose. If the
-call via <B>pcre_malloc()</B> fails, this error is given. The memory is freed at
-the end of matching.
-</P>
-<LI><A NAME="SEC10" HREF="#TOC1">EXTRACTING CAPTURED SUBSTRINGS</A>
-<P>
-Captured substrings can be accessed directly by using the offsets returned by
-<B>pcre_exec()</B> in <I>ovector</I>. For convenience, the functions
-<B>pcre_copy_substring()</B>, <B>pcre_get_substring()</B>, and
-<B>pcre_get_substring_list()</B> are provided for extracting captured substrings
-as new, separate, zero-terminated strings. A substring that contains a binary
-zero is correctly extracted and has a further zero added on the end, but the
-result does not, of course, function as a C string.
-</P>
-<P>
-The first three arguments are the same for all three functions: <I>subject</I>
-is the subject string which has just been successfully matched, <I>ovector</I>
-is a pointer to the vector of integer offsets that was passed to
-<B>pcre_exec()</B>, and <I>stringcount</I> is the number of substrings that
-were captured by the match, including the substring that matched the entire
-regular expression. This is the value returned by <B>pcre_exec</B> if it
-is greater than zero. If <B>pcre_exec()</B> returned zero, indicating that it
-ran out of space in <I>ovector</I>, the value passed as <I>stringcount</I> should
-be the size of the vector divided by three.
-</P>
-<P>
-The functions <B>pcre_copy_substring()</B> and <B>pcre_get_substring()</B>
-extract a single substring, whose number is given as <I>stringnumber</I>. A
-value of zero extracts the substring that matched the entire pattern, while
-higher values extract the captured substrings. For <B>pcre_copy_substring()</B>,
-the string is placed in <I>buffer</I>, whose length is given by
-<I>buffersize</I>, while for <B>pcre_get_substring()</B> a new block of store is
-obtained via <B>pcre_malloc</B>, and its address is returned via
-<I>stringptr</I>. The yield of the function is the length of the string, not
-including the terminating zero, or one of
-</P>
-<P>
-<PRE>
-  PCRE_ERROR_NOMEMORY       (-6)
-</PRE>
-</P>
-<P>
-The buffer was too small for <B>pcre_copy_substring()</B>, or the attempt to get
-memory failed for <B>pcre_get_substring()</B>.
-</P>
-<P>
-<PRE>
-  PCRE_ERROR_NOSUBSTRING    (-7)
-</PRE>
-</P>
-<P>
-There is no substring whose number is <I>stringnumber</I>.
-</P>
-<P>
-The <B>pcre_get_substring_list()</B> function extracts all available substrings
-and builds a list of pointers to them. All this is done in a single block of
-memory which is obtained via <B>pcre_malloc</B>. The address of the memory block
-is returned via <I>listptr</I>, which is also the start of the list of string
-pointers. The end of the list is marked by a NULL pointer. The yield of the
-function is zero if all went well, or
-</P>
-<P>
-<PRE>
-  PCRE_ERROR_NOMEMORY       (-6)
-</PRE>
-</P>
-<P>
-if the attempt to get the memory block failed.
-</P>
-<P>
-When any of these functions encounter a substring that is unset, which can
-happen when capturing subpattern number <I>n+1</I> matches some part of the
-subject, but subpattern <I>n</I> has not been used at all, they return an empty
-string. This can be distinguished from a genuine zero-length substring by
-inspecting the appropriate offset in <I>ovector</I>, which is negative for unset
-substrings.
-</P>
-<LI><A NAME="SEC11" HREF="#TOC1">LIMITATIONS</A>
-<P>
-There are some size limitations in PCRE but it is hoped that they will never in
-practice be relevant.
-The maximum length of a compiled pattern is 65539 (sic) bytes.
-All values in repeating quantifiers must be less than 65536.
-The maximum number of capturing subpatterns is 99.
-The maximum number of all parenthesized subpatterns, including capturing
-subpatterns, assertions, and other types of subpattern, is 200.
-</P>
-<P>
-The maximum length of a subject string is the largest positive number that an
-integer variable can hold. However, PCRE uses recursion to handle subpatterns
-and indefinite repetition. This means that the available stack space may limit
-the size of a subject string that can be processed by certain patterns.
-</P>
-<LI><A NAME="SEC12" HREF="#TOC1">DIFFERENCES FROM PERL</A>
-<P>
-The differences described here are with respect to Perl 5.005.
-</P>
-<P>
-1. By default, a whitespace character is any character that the C library
-function <B>isspace()</B> recognizes, though it is possible to compile PCRE with
-alternative character type tables. Normally <B>isspace()</B> matches space,
-formfeed, newline, carriage return, horizontal tab, and vertical tab. Perl 5
-no longer includes vertical tab in its set of whitespace characters. The \v
-escape that was in the Perl documentation for a long time was never in fact
-recognized. However, the character itself was treated as whitespace at least
-up to 5.002. In 5.004 and 5.005 it does not match \s.
-</P>
-<P>
-2. PCRE does not allow repeat quantifiers on lookahead assertions. Perl permits
-them, but they do not mean what you might think. For example, (?!a){3} does
-not assert that the next three characters are not "a". It just asserts that the
-next character is not "a" three times.
-</P>
-<P>
-3. Capturing subpatterns that occur inside negative lookahead assertions are
-counted, but their entries in the offsets vector are never set. Perl sets its
-numerical variables from any such patterns that are matched before the
-assertion fails to match something (thereby succeeding), but only if the
-negative lookahead assertion contains just one branch.
-</P>
-<P>
-4. Though binary zero characters are supported in the subject string, they are
-not allowed in a pattern string because it is passed as a normal C string,
-terminated by zero. The escape sequence "\0" can be used in the pattern to
-represent a binary zero.
-</P>
-<P>
-5. The following Perl escape sequences are not supported: \l, \u, \L, \U,
-\E, \Q. In fact these are implemented by Perl's general string-handling and
-are not part of its pattern matching engine.
-</P>
-<P>
-6. The Perl \G assertion is not supported as it is not relevant to single
-pattern matches.
-</P>
-<P>
-7. Fairly obviously, PCRE does not support the (?{code}) and (?p{code})
-constructions. However, there is some experimental support for recursive
-patterns using the non-Perl item (?R).
-</P>
-<P>
-8. There are at the time of writing some oddities in Perl 5.005_02 concerned
-with the settings of captured strings when part of a pattern is repeated. For
-example, matching "aba" against the pattern /^(a(b)?)+$/ sets $2 to the value
-"b", but matching "aabbaa" against /^(aa(bb)?)+$/ leaves $2 unset. However, if
-the pattern is changed to /^(aa(b(b))?)+$/ then $2 (and $3) are set.
-</P>
-<P>
-In Perl 5.004 $2 is set in both cases, and that is also true of PCRE. If in the
-future Perl changes to a consistent state that is different, PCRE may change to
-follow.
-</P>
-<P>
-9. Another as yet unresolved discrepancy is that in Perl 5.005_02 the pattern
-/^(a)?(?(1)a|b)+$/ matches the string "a", whereas in PCRE it does not.
-However, in both Perl and PCRE /^(a)?a/ matched against "a" leaves $1 unset.
-</P>
-<P>
-10. PCRE provides some extensions to the Perl regular expression facilities:
-</P>
-<P>
-(a) Although lookbehind assertions must match fixed length strings, each
-alternative branch of a lookbehind assertion can match a different length of
-string. Perl 5.005 requires them all to have the same length.
-</P>
-<P>
-(b) If PCRE_DOLLAR_ENDONLY is set and PCRE_MULTILINE is not set, the $ meta-
-character matches only at the very end of the string.
-</P>
-<P>
-(c) If PCRE_EXTRA is set, a backslash followed by a letter with no special
-meaning is faulted.
-</P>
-<P>
-(d) If PCRE_UNGREEDY is set, the greediness of the repetition quantifiers is
-inverted, that is, by default they are not greedy, but if followed by a
-question mark they are.
-</P>
-<P>
-(e) PCRE_ANCHORED can be used to force a pattern to be tried only at the start
-of the subject.
-</P>
-<P>
-(f) The PCRE_NOTBOL, PCRE_NOTEOL, and PCRE_NOTEMPTY options for
-<B>pcre_exec()</B> have no Perl equivalents.
-</P>
-<P>
-(g) The (?R) construct allows for recursive pattern matching (Perl 5.6 can do
-this using the (?p{code}) construct, which PCRE cannot of course support.)
-</P>
-<LI><A NAME="SEC13" HREF="#TOC1">REGULAR EXPRESSION DETAILS</A>
-<P>
-The syntax and semantics of the regular expressions supported by PCRE are
-described below. Regular expressions are also described in the Perl
-documentation and in a number of other books, some of which have copious
-examples. Jeffrey Friedl's "Mastering Regular Expressions", published by
-O'Reilly (ISBN 1-56592-257), covers them in great detail. The description
-here is intended as reference documentation.
-</P>
-<P>
-A regular expression is a pattern that is matched against a subject string from
-left to right. Most characters stand for themselves in a pattern, and match the
-corresponding characters in the subject. As a trivial example, the pattern
-</P>
-<P>
-<PRE>
-  The quick brown fox
-</PRE>
-</P>
-<P>
-matches a portion of a subject string that is identical to itself. The power of
-regular expressions comes from the ability to include alternatives and
-repetitions in the pattern. These are encoded in the pattern by the use of
-<I>meta-characters</I>, which do not stand for themselves but instead are
-interpreted in some special way.
-</P>
-<P>
-There are two different sets of meta-characters: those that are recognized
-anywhere in the pattern except within square brackets, and those that are
-recognized in square brackets. Outside square brackets, the meta-characters are
-as follows:
-</P>
-<P>
-<PRE>
-  \      general escape character with several uses
-  ^      assert start of subject (or line, in multiline mode)
-  $      assert end of subject (or line, in multiline mode)
-  .      match any character except newline (by default)
-  [      start character class definition
-  |      start of alternative branch
-  (      start subpattern
-  )      end subpattern
-  ?      extends the meaning of (
-         also 0 or 1 quantifier
-         also quantifier minimizer
-  *      0 or more quantifier
-  +      1 or more quantifier
-  {      start min/max quantifier
-</PRE>
-</P>
-<P>
-Part of a pattern that is in square brackets is called a "character class". In
-a character class the only meta-characters are:
-</P>
-<P>
-<PRE>
-  \      general escape character
-  ^      negate the class, but only if the first character
-  -      indicates character range
-  ]      terminates the character class
-</PRE>
-</P>
-<P>
-The following sections describe the use of each of the meta-characters.
-</P>
-<LI><A NAME="SEC14" HREF="#TOC1">BACKSLASH</A>
-<P>
-The backslash character has several uses. Firstly, if it is followed by a
-non-alphameric character, it takes away any special meaning that character may
-have. This use of backslash as an escape character applies both inside and
-outside character classes.
-</P>
-<P>
-For example, if you want to match a "*" character, you write "\*" in the
-pattern. This applies whether or not the following character would otherwise be
-interpreted as a meta-character, so it is always safe to precede a
-non-alphameric with "\" to specify that it stands for itself. In particular,
-if you want to match a backslash, you write "\\".
-</P>
-<P>
-If a pattern is compiled with the PCRE_EXTENDED option, whitespace in the
-pattern (other than in a character class) and characters between a "#" outside
-a character class and the next newline character are ignored. An escaping
-backslash can be used to include a whitespace or "#" character as part of the
-pattern.
-</P>
-<P>
-A second use of backslash provides a way of encoding non-printing characters
-in patterns in a visible manner. There is no restriction on the appearance of
-non-printing characters, apart from the binary zero that terminates a pattern,
-but when a pattern is being prepared by text editing, it is usually easier to
-use one of the following escape sequences than the binary character it
-represents:
-</P>
-<P>
-<PRE>
-  \a     alarm, that is, the BEL character (hex 07)
-  \cx    "control-x", where x is any character
-  \e     escape (hex 1B)
-  \f     formfeed (hex 0C)
-  \n     newline (hex 0A)
-  \r     carriage return (hex 0D)
-  \t     tab (hex 09)
-  \xhh   character with hex code hh
-  \ddd   character with octal code ddd, or backreference
-</PRE>
-</P>
-<P>
-The precise effect of "\cx" is as follows: if "x" is a lower case letter, it
-is converted to upper case. Then bit 6 of the character (hex 40) is inverted.
-Thus "\cz" becomes hex 1A, but "\c{" becomes hex 3B, while "\c;" becomes hex
-7B.
-</P>
-<P>
-After "\x", up to two hexadecimal digits are read (letters can be in upper or
-lower case).
-</P>
-<P>
-After "\0" up to two further octal digits are read. In both cases, if there
-are fewer than two digits, just those that are present are used. Thus the
-sequence "\0\x\07" specifies two binary zeros followed by a BEL character.
-Make sure you supply two digits after the initial zero if the character that
-follows is itself an octal digit.
-</P>
-<P>
-The handling of a backslash followed by a digit other than 0 is complicated.
-Outside a character class, PCRE reads it and any following digits as a decimal
-number. If the number is less than 10, or if there have been at least that many
-previous capturing left parentheses in the expression, the entire sequence is
-taken as a <I>back reference</I>. A description of how this works is given
-later, following the discussion of parenthesized subpatterns.
-</P>
-<P>
-Inside a character class, or if the decimal number is greater than 9 and there
-have not been that many capturing subpatterns, PCRE re-reads up to three octal
-digits following the backslash, and generates a single byte from the least
-significant 8 bits of the value. Any subsequent digits stand for themselves.
-For example:
-</P>
-<P>
-<PRE>
-  \040   is another way of writing a space
-  \40    is the same, provided there are fewer than 40
-            previous capturing subpatterns
-  \7     is always a back reference
-  \11    might be a back reference, or another way of
-            writing a tab
-  \011   is always a tab
-  \0113  is a tab followed by the character "3"
-  \113   is the character with octal code 113 (since there
-            can be no more than 99 back references)
-  \377   is a byte consisting entirely of 1 bits
-  \81    is either a back reference, or a binary zero
-            followed by the two characters "8" and "1"
-</PRE>
-</P>
-<P>
-Note that octal values of 100 or greater must not be introduced by a leading
-zero, because no more than three octal digits are ever read.
-</P>
-<P>
-All the sequences that define a single byte value can be used both inside and
-outside character classes. In addition, inside a character class, the sequence
-"\b" is interpreted as the backspace character (hex 08). Outside a character
-class it has a different meaning (see below).
-</P>
-<P>
-The third use of backslash is for specifying generic character types:
-</P>
-<P>
-<PRE>
-  \d     any decimal digit
-  \D     any character that is not a decimal digit
-  \s     any whitespace character
-  \S     any character that is not a whitespace character
-  \w     any "word" character
-  \W     any "non-word" character
-</PRE>
-</P>
-<P>
-Each pair of escape sequences partitions the complete set of characters into
-two disjoint sets. Any given character matches one, and only one, of each pair.
-</P>
-<P>
-A "word" character is any letter or digit or the underscore character, that is,
-any character which can be part of a Perl "word". The definition of letters and
-digits is controlled by PCRE's character tables, and may vary if locale-
-specific matching is taking place (see "Locale support" above). For example, in
-the "fr" (French) locale, some character codes greater than 128 are used for
-accented letters, and these are matched by \w.
-</P>
-<P>
-These character type sequences can appear both inside and outside character
-classes. They each match one character of the appropriate type. If the current
-matching point is at the end of the subject string, all of them fail, since
-there is no character to match.
-</P>
-<P>
-The fourth use of backslash is for certain simple assertions. An assertion
-specifies a condition that has to be met at a particular point in a match,
-without consuming any characters from the subject string. The use of
-subpatterns for more complicated assertions is described below. The backslashed
-assertions are
-</P>
-<P>
-<PRE>
-  \b     word boundary
-  \B     not a word boundary
-  \A     start of subject (independent of multiline mode)
-  \Z     end of subject or newline at end (independent of multiline mode)
-  \z     end of subject (independent of multiline mode)
-</PRE>
-</P>
-<P>
-These assertions may not appear in character classes (but note that "\b" has a
-different meaning, namely the backspace character, inside a character class).
-</P>
-<P>
-A word boundary is a position in the subject string where the current character
-and the previous character do not both match \w or \W (i.e. one matches
-\w and the other matches \W), or the start or end of the string if the
-first or last character matches \w, respectively.
-</P>
-<P>
-The \A, \Z, and \z assertions differ from the traditional circumflex and
-dollar (described below) in that they only ever match at the very start and end
-of the subject string, whatever options are set. They are not affected by the
-PCRE_NOTBOL or PCRE_NOTEOL options. If the <I>startoffset</I> argument of
-<B>pcre_exec()</B> is non-zero, \A can never match. The difference between \Z
-and \z is that \Z matches before a newline that is the last character of the
-string as well as at the end of the string, whereas \z matches only at the
-end.
-</P>
-<LI><A NAME="SEC15" HREF="#TOC1">CIRCUMFLEX AND DOLLAR</A>
-<P>
-Outside a character class, in the default matching mode, the circumflex
-character is an assertion which is true only if the current matching point is
-at the start of the subject string. If the <I>startoffset</I> argument of
-<B>pcre_exec()</B> is non-zero, circumflex can never match. Inside a character
-class, circumflex has an entirely different meaning (see below).
-</P>
-<P>
-Circumflex need not be the first character of the pattern if a number of
-alternatives are involved, but it should be the first thing in each alternative
-in which it appears if the pattern is ever to match that branch. If all
-possible alternatives start with a circumflex, that is, if the pattern is
-constrained to match only at the start of the subject, it is said to be an
-"anchored" pattern. (There are also other constructs that can cause a pattern
-to be anchored.)
-</P>
-<P>
-A dollar character is an assertion which is true only if the current matching
-point is at the end of the subject string, or immediately before a newline
-character that is the last character in the string (by default). Dollar need
-not be the last character of the pattern if a number of alternatives are
-involved, but it should be the last item in any branch in which it appears.
-Dollar has no special meaning in a character class.
-</P>
-<P>
-The meaning of dollar can be changed so that it matches only at the very end of
-the string, by setting the PCRE_DOLLAR_ENDONLY option at compile or matching
-time. This does not affect the \Z assertion.
-</P>
-<P>
-The meanings of the circumflex and dollar characters are changed if the
-PCRE_MULTILINE option is set. When this is the case, they match immediately
-after and immediately before an internal "\n" character, respectively, in
-addition to matching at the start and end of the subject string. For example,
-the pattern /^abc$/ matches the subject string "def\nabc" in multiline mode,
-but not otherwise. Consequently, patterns that are anchored in single line mode
-because all branches start with "^" are not anchored in multiline mode, and a
-match for circumflex is possible when the <I>startoffset</I> argument of
-<B>pcre_exec()</B> is non-zero. The PCRE_DOLLAR_ENDONLY option is ignored if
-PCRE_MULTILINE is set.
-</P>
-<P>
-Note that the sequences \A, \Z, and \z can be used to match the start and
-end of the subject in both modes, and if all branches of a pattern start with
-\A is it always anchored, whether PCRE_MULTILINE is set or not.
-</P>
-<LI><A NAME="SEC16" HREF="#TOC1">FULL STOP (PERIOD, DOT)</A>
-<P>
-Outside a character class, a dot in the pattern matches any one character in
-the subject, including a non-printing character, but not (by default) newline.
-If the PCRE_DOTALL option is set, dots match newlines as well. The handling of
-dot is entirely independent of the handling of circumflex and dollar, the only
-relationship being that they both involve newline characters. Dot has no
-special meaning in a character class.
-</P>
-<LI><A NAME="SEC17" HREF="#TOC1">SQUARE BRACKETS</A>
-<P>
-An opening square bracket introduces a character class, terminated by a closing
-square bracket. A closing square bracket on its own is not special. If a
-closing square bracket is required as a member of the class, it should be the
-first data character in the class (after an initial circumflex, if present) or
-escaped with a backslash.
-</P>
-<P>
-A character class matches a single character in the subject; the character must
-be in the set of characters defined by the class, unless the first character in
-the class is a circumflex, in which case the subject character must not be in
-the set defined by the class. If a circumflex is actually required as a member
-of the class, ensure it is not the first character, or escape it with a
-backslash.
-</P>
-<P>
-For example, the character class [aeiou] matches any lower case vowel, while
-[^aeiou] matches any character that is not a lower case vowel. Note that a
-circumflex is just a convenient notation for specifying the characters which
-are in the class by enumerating those that are not. It is not an assertion: it
-still consumes a character from the subject string, and fails if the current
-pointer is at the end of the string.
-</P>
-<P>
-When caseless matching is set, any letters in a class represent both their
-upper case and lower case versions, so for example, a caseless [aeiou] matches
-"A" as well as "a", and a caseless [^aeiou] does not match "A", whereas a
-caseful version would.
-</P>
-<P>
-The newline character is never treated in any special way in character classes,
-whatever the setting of the PCRE_DOTALL or PCRE_MULTILINE options is. A class
-such as [^a] will always match a newline.
-</P>
-<P>
-The minus (hyphen) character can be used to specify a range of characters in a
-character class. For example, [d-m] matches any letter between d and m,
-inclusive. If a minus character is required in a class, it must be escaped with
-a backslash or appear in a position where it cannot be interpreted as
-indicating a range, typically as the first or last character in the class.
-</P>
-<P>
-It is not possible to have the literal character "]" as the end character of a
-range. A pattern such as [W-]46] is interpreted as a class of two characters
-("W" and "-") followed by a literal string "46]", so it would match "W46]" or
-"-46]". However, if the "]" is escaped with a backslash it is interpreted as
-the end of range, so [W-\]46] is interpreted as a single class containing a
-range followed by two separate characters. The octal or hexadecimal
-representation of "]" can also be used to end a range.
-</P>
-<P>
-Ranges operate in ASCII collating sequence. They can also be used for
-characters specified numerically, for example [\000-\037]. If a range that
-includes letters is used when caseless matching is set, it matches the letters
-in either case. For example, [W-c] is equivalent to [][\^_`wxyzabc], matched
-caselessly, and if character tables for the "fr" locale are in use,
-[\xc8-\xcb] matches accented E characters in both cases.
-</P>
-<P>
-The character types \d, \D, \s, \S, \w, and \W may also appear in a
-character class, and add the characters that they match to the class. For
-example, [\dABCDEF] matches any hexadecimal digit. A circumflex can
-conveniently be used with the upper case character types to specify a more
-restricted set of characters than the matching lower case type. For example,
-the class [^\W_] matches any letter or digit, but not underscore.
-</P>
-<P>
-All non-alphameric characters other than \, -, ^ (at the start) and the
-terminating ] are non-special in character classes, but it does no harm if they
-are escaped.
-</P>
-<LI><A NAME="SEC18" HREF="#TOC1">POSIX CHARACTER CLASSES</A>
-<P>
-Perl 5.6 (not yet released at the time of writing) is going to support the
-POSIX notation for character classes, which uses names enclosed by [: and :]
-within the enclosing square brackets. PCRE supports this notation. For example,
-</P>
-<P>
-<PRE>
-  [01[:alpha:]%]
-</PRE>
-</P>
-<P>
-matches "0", "1", any alphabetic character, or "%". The supported class names
-are
-</P>
-<P>
-<PRE>
-  alnum    letters and digits
-  alpha    letters
-  ascii    character codes 0 - 127
-  cntrl    control characters
-  digit    decimal digits (same as \d)
-  graph    printing characters, excluding space
-  lower    lower case letters
-  print    printing characters, including space
-  punct    printing characters, excluding letters and digits
-  space    white space (same as \s)
-  upper    upper case letters
-  word     "word" characters (same as \w)
-  xdigit   hexadecimal digits
-</PRE>
-</P>
-<P>
-The names "ascii" and "word" are Perl extensions. Another Perl extension is
-negation, which is indicated by a ^ character after the colon. For example,
-</P>
-<P>
-<PRE>
-  [12[:^digit:]]
-</PRE>
-</P>
-<P>
-matches "1", "2", or any non-digit. PCRE (and Perl) also recogize the POSIX
-syntax [.ch.] and [=ch=] where "ch" is a "collating element", but these are not
-supported, and an error is given if they are encountered.
-</P>
-<LI><A NAME="SEC19" HREF="#TOC1">VERTICAL BAR</A>
-<P>
-Vertical bar characters are used to separate alternative patterns. For example,
-the pattern
-</P>
-<P>
-<PRE>
-  gilbert|sullivan
-</PRE>
-</P>
-<P>
-matches either "gilbert" or "sullivan". Any number of alternatives may appear,
-and an empty alternative is permitted (matching the empty string).
-The matching process tries each alternative in turn, from left to right,
-and the first one that succeeds is used. If the alternatives are within a
-subpattern (defined below), "succeeds" means matching the rest of the main
-pattern as well as the alternative in the subpattern.
-</P>
-<LI><A NAME="SEC20" HREF="#TOC1">INTERNAL OPTION SETTING</A>
-<P>
-The settings of PCRE_CASELESS, PCRE_MULTILINE, PCRE_DOTALL, and PCRE_EXTENDED
-can be changed from within the pattern by a sequence of Perl option letters
-enclosed between "(?" and ")". The option letters are
-</P>
-<P>
-<PRE>
-  i  for PCRE_CASELESS
-  m  for PCRE_MULTILINE
-  s  for PCRE_DOTALL
-  x  for PCRE_EXTENDED
-</PRE>
-</P>
-<P>
-For example, (?im) sets caseless, multiline matching. It is also possible to
-unset these options by preceding the letter with a hyphen, and a combined
-setting and unsetting such as (?im-sx), which sets PCRE_CASELESS and
-PCRE_MULTILINE while unsetting PCRE_DOTALL and PCRE_EXTENDED, is also
-permitted. If a letter appears both before and after the hyphen, the option is
-unset.
-</P>
-<P>
-The scope of these option changes depends on where in the pattern the setting
-occurs. For settings that are outside any subpattern (defined below), the
-effect is the same as if the options were set or unset at the start of
-matching. The following patterns all behave in exactly the same way:
-</P>
-<P>
-<PRE>
-  (?i)abc
-  a(?i)bc
-  ab(?i)c
-  abc(?i)
-</PRE>
-</P>
-<P>
-which in turn is the same as compiling the pattern abc with PCRE_CASELESS set.
-In other words, such "top level" settings apply to the whole pattern (unless
-there are other changes inside subpatterns). If there is more than one setting
-of the same option at top level, the rightmost setting is used.
-</P>
-<P>
-If an option change occurs inside a subpattern, the effect is different. This
-is a change of behaviour in Perl 5.005. An option change inside a subpattern
-affects only that part of the subpattern that follows it, so
-</P>
-<P>
-<PRE>
-  (a(?i)b)c
-</PRE>
-</P>
-<P>
-matches abc and aBc and no other strings (assuming PCRE_CASELESS is not used).
-By this means, options can be made to have different settings in different
-parts of the pattern. Any changes made in one alternative do carry on
-into subsequent branches within the same subpattern. For example,
-</P>
-<P>
-<PRE>
-  (a(?i)b|c)
-</PRE>
-</P>
-<P>
-matches "ab", "aB", "c", and "C", even though when matching "C" the first
-branch is abandoned before the option setting. This is because the effects of
-option settings happen at compile time. There would be some very weird
-behaviour otherwise.
-</P>
-<P>
-The PCRE-specific options PCRE_UNGREEDY and PCRE_EXTRA can be changed in the
-same way as the Perl-compatible options by using the characters U and X
-respectively. The (?X) flag setting is special in that it must always occur
-earlier in the pattern than any of the additional features it turns on, even
-when it is at top level. It is best put at the start.
-</P>
-<LI><A NAME="SEC21" HREF="#TOC1">SUBPATTERNS</A>
-<P>
-Subpatterns are delimited by parentheses (round brackets), which can be nested.
-Marking part of a pattern as a subpattern does two things:
-</P>
-<P>
-1. It localizes a set of alternatives. For example, the pattern
-</P>
-<P>
-<PRE>
-  cat(aract|erpillar|)
-</PRE>
-</P>
-<P>
-matches one of the words "cat", "cataract", or "caterpillar". Without the
-parentheses, it would match "cataract", "erpillar" or the empty string.
-</P>
-<P>
-2. It sets up the subpattern as a capturing subpattern (as defined above).
-When the whole pattern matches, that portion of the subject string that matched
-the subpattern is passed back to the caller via the <I>ovector</I> argument of
-<B>pcre_exec()</B>. Opening parentheses are counted from left to right (starting
-from 1) to obtain the numbers of the capturing subpatterns.
-</P>
-<P>
-For example, if the string "the red king" is matched against the pattern
-</P>
-<P>
-<PRE>
-  the ((red|white) (king|queen))
-</PRE>
-</P>
-<P>
-the captured substrings are "red king", "red", and "king", and are numbered 1,
-2, and 3.
-</P>
-<P>
-The fact that plain parentheses fulfil two functions is not always helpful.
-There are often times when a grouping subpattern is required without a
-capturing requirement. If an opening parenthesis is followed by "?:", the
-subpattern does not do any capturing, and is not counted when computing the
-number of any subsequent capturing subpatterns. For example, if the string "the
-white queen" is matched against the pattern
-</P>
-<P>
-<PRE>
-  the ((?:red|white) (king|queen))
-</PRE>
-</P>
-<P>
-the captured substrings are "white queen" and "queen", and are numbered 1 and
-2. The maximum number of captured substrings is 99, and the maximum number of
-all subpatterns, both capturing and non-capturing, is 200.
-</P>
-<P>
-As a convenient shorthand, if any option settings are required at the start of
-a non-capturing subpattern, the option letters may appear between the "?" and
-the ":". Thus the two patterns
-</P>
-<P>
-<PRE>
-  (?i:saturday|sunday)
-  (?:(?i)saturday|sunday)
-</PRE>
-</P>
-<P>
-match exactly the same set of strings. Because alternative branches are tried
-from left to right, and options are not reset until the end of the subpattern
-is reached, an option setting in one branch does affect subsequent branches, so
-the above patterns match "SUNDAY" as well as "Saturday".
-</P>
-<LI><A NAME="SEC22" HREF="#TOC1">REPETITION</A>
-<P>
-Repetition is specified by quantifiers, which can follow any of the following
-items:
-</P>
-<P>
-<PRE>
-  a single character, possibly escaped
-  the . metacharacter
-  a character class
-  a back reference (see next section)
-  a parenthesized subpattern (unless it is an assertion - see below)
-</PRE>
-</P>
-<P>
-The general repetition quantifier specifies a minimum and maximum number of
-permitted matches, by giving the two numbers in curly brackets (braces),
-separated by a comma. The numbers must be less than 65536, and the first must
-be less than or equal to the second. For example:
-</P>
-<P>
-<PRE>
-  z{2,4}
-</PRE>
-</P>
-<P>
-matches "zz", "zzz", or "zzzz". A closing brace on its own is not a special
-character. If the second number is omitted, but the comma is present, there is
-no upper limit; if the second number and the comma are both omitted, the
-quantifier specifies an exact number of required matches. Thus
-</P>
-<P>
-<PRE>
-  [aeiou]{3,}
-</PRE>
-</P>
-<P>
-matches at least 3 successive vowels, but may match many more, while
-</P>
-<P>
-<PRE>
-  \d{8}
-</PRE>
-</P>
-<P>
-matches exactly 8 digits. An opening curly bracket that appears in a position
-where a quantifier is not allowed, or one that does not match the syntax of a
-quantifier, is taken as a literal character. For example, {,6} is not a
-quantifier, but a literal string of four characters.
-</P>
-<P>
-The quantifier {0} is permitted, causing the expression to behave as if the
-previous item and the quantifier were not present.
-</P>
-<P>
-For convenience (and historical compatibility) the three most common
-quantifiers have single-character abbreviations:
-</P>
-<P>
-<PRE>
-  *    is equivalent to {0,}
-  +    is equivalent to {1,}
-  ?    is equivalent to {0,1}
-</PRE>
-</P>
-<P>
-It is possible to construct infinite loops by following a subpattern that can
-match no characters with a quantifier that has no upper limit, for example:
-</P>
-<P>
-<PRE>
-  (a?)*
-</PRE>
-</P>
-<P>
-Earlier versions of Perl and PCRE used to give an error at compile time for
-such patterns. However, because there are cases where this can be useful, such
-patterns are now accepted, but if any repetition of the subpattern does in fact
-match no characters, the loop is forcibly broken.
-</P>
-<P>
-By default, the quantifiers are "greedy", that is, they match as much as
-possible (up to the maximum number of permitted times), without causing the
-rest of the pattern to fail. The classic example of where this gives problems
-is in trying to match comments in C programs. These appear between the
-sequences /* and */ and within the sequence, individual * and / characters may
-appear. An attempt to match C comments by applying the pattern
-</P>
-<P>
-<PRE>
-  /\*.*\*/
-</PRE>
-</P>
-<P>
-to the string
-</P>
-<P>
-<PRE>
-  /* first command */  not comment  /* second comment */
-</PRE>
-</P>
-<P>
-fails, because it matches the entire string due to the greediness of the .*
-item.
-</P>
-<P>
-However, if a quantifier is followed by a question mark, it ceases to be
-greedy, and instead matches the minimum number of times possible, so the
-pattern
-</P>
-<P>
-<PRE>
-  /\*.*?\*/
-</PRE>
-</P>
-<P>
-does the right thing with the C comments. The meaning of the various
-quantifiers is not otherwise changed, just the preferred number of matches.
-Do not confuse this use of question mark with its use as a quantifier in its
-own right. Because it has two uses, it can sometimes appear doubled, as in
-</P>
-<P>
-<PRE>
-  \d??\d
-</PRE>
-</P>
-<P>
-which matches one digit by preference, but can match two if that is the only
-way the rest of the pattern matches.
-</P>
-<P>
-If the PCRE_UNGREEDY option is set (an option which is not available in Perl),
-the quantifiers are not greedy by default, but individual ones can be made
-greedy by following them with a question mark. In other words, it inverts the
-default behaviour.
-</P>
-<P>
-When a parenthesized subpattern is quantified with a minimum repeat count that
-is greater than 1 or with a limited maximum, more store is required for the
-compiled pattern, in proportion to the size of the minimum or maximum.
-</P>
-<P>
-If a pattern starts with .* or .{0,} and the PCRE_DOTALL option (equivalent
-to Perl's /s) is set, thus allowing the . to match newlines, the pattern is
-implicitly anchored, because whatever follows will be tried against every
-character position in the subject string, so there is no point in retrying the
-overall match at any position after the first. PCRE treats such a pattern as
-though it were preceded by \A. In cases where it is known that the subject
-string contains no newlines, it is worth setting PCRE_DOTALL when the pattern
-begins with .* in order to obtain this optimization, or alternatively using ^
-to indicate anchoring explicitly.
-</P>
-<P>
-When a capturing subpattern is repeated, the value captured is the substring
-that matched the final iteration. For example, after
-</P>
-<P>
-<PRE>
-  (tweedle[dume]{3}\s*)+
-</PRE>
-</P>
-<P>
-has matched "tweedledum tweedledee" the value of the captured substring is
-"tweedledee". However, if there are nested capturing subpatterns, the
-corresponding captured values may have been set in previous iterations. For
-example, after
-</P>
-<P>
-<PRE>
-  /(a|(b))+/
-</PRE>
-</P>
-<P>
-matches "aba" the value of the second captured substring is "b".
-</P>
-<LI><A NAME="SEC23" HREF="#TOC1">BACK REFERENCES</A>
-<P>
-Outside a character class, a backslash followed by a digit greater than 0 (and
-possibly further digits) is a back reference to a capturing subpattern earlier
-(i.e. to its left) in the pattern, provided there have been that many previous
-capturing left parentheses.
-</P>
-<P>
-However, if the decimal number following the backslash is less than 10, it is
-always taken as a back reference, and causes an error only if there are not
-that many capturing left parentheses in the entire pattern. In other words, the
-parentheses that are referenced need not be to the left of the reference for
-numbers less than 10. See the section entitled "Backslash" above for further
-details of the handling of digits following a backslash.
-</P>
-<P>
-A back reference matches whatever actually matched the capturing subpattern in
-the current subject string, rather than anything matching the subpattern
-itself. So the pattern
-</P>
-<P>
-<PRE>
-  (sens|respons)e and \1ibility
-</PRE>
-</P>
-<P>
-matches "sense and sensibility" and "response and responsibility", but not
-"sense and responsibility". If caseful matching is in force at the time of the
-back reference, the case of letters is relevant. For example,
-</P>
-<P>
-<PRE>
-  ((?i)rah)\s+\1
-</PRE>
-</P>
-<P>
-matches "rah rah" and "RAH RAH", but not "RAH rah", even though the original
-capturing subpattern is matched caselessly.
-</P>
-<P>
-There may be more than one back reference to the same subpattern. If a
-subpattern has not actually been used in a particular match, any back
-references to it always fail. For example, the pattern
-</P>
-<P>
-<PRE>
-  (a|(bc))\2
-</PRE>
-</P>
-<P>
-always fails if it starts to match "a" rather than "bc". Because there may be
-up to 99 back references, all digits following the backslash are taken
-as part of a potential back reference number. If the pattern continues with a
-digit character, some delimiter must be used to terminate the back reference.
-If the PCRE_EXTENDED option is set, this can be whitespace. Otherwise an empty
-comment can be used.
-</P>
-<P>
-A back reference that occurs inside the parentheses to which it refers fails
-when the subpattern is first used, so, for example, (a\1) never matches.
-However, such references can be useful inside repeated subpatterns. For
-example, the pattern
-</P>
-<P>
-<PRE>
-  (a|b\1)+
-</PRE>
-</P>
-<P>
-matches any number of "a"s and also "aba", "ababaa" etc. At each iteration of
-the subpattern, the back reference matches the character string corresponding
-to the previous iteration. In order for this to work, the pattern must be such
-that the first iteration does not need to match the back reference. This can be
-done using alternation, as in the example above, or by a quantifier with a
-minimum of zero.
-</P>
-<LI><A NAME="SEC24" HREF="#TOC1">ASSERTIONS</A>
-<P>
-An assertion is a test on the characters following or preceding the current
-matching point that does not actually consume any characters. The simple
-assertions coded as \b, \B, \A, \Z, \z, ^ and $ are described above. More
-complicated assertions are coded as subpatterns. There are two kinds: those
-that look ahead of the current position in the subject string, and those that
-look behind it.
-</P>
-<P>
-An assertion subpattern is matched in the normal way, except that it does not
-cause the current matching position to be changed. Lookahead assertions start
-with (?= for positive assertions and (?! for negative assertions. For example,
-</P>
-<P>
-<PRE>
-  \w+(?=;)
-</PRE>
-</P>
-<P>
-matches a word followed by a semicolon, but does not include the semicolon in
-the match, and
-</P>
-<P>
-<PRE>
-  foo(?!bar)
-</PRE>
-</P>
-<P>
-matches any occurrence of "foo" that is not followed by "bar". Note that the
-apparently similar pattern
-</P>
-<P>
-<PRE>
-  (?!foo)bar
-</PRE>
-</P>
-<P>
-does not find an occurrence of "bar" that is preceded by something other than
-"foo"; it finds any occurrence of "bar" whatsoever, because the assertion
-(?!foo) is always true when the next three characters are "bar". A
-lookbehind assertion is needed to achieve this effect.
-</P>
-<P>
-Lookbehind assertions start with (?&#60;= for positive assertions and (?&#60;! for
-negative assertions. For example,
-</P>
-<P>
-<PRE>
-  (?&#60;!foo)bar
-</PRE>
-</P>
-<P>
-does find an occurrence of "bar" that is not preceded by "foo". The contents of
-a lookbehind assertion are restricted such that all the strings it matches must
-have a fixed length. However, if there are several alternatives, they do not
-all have to have the same fixed length. Thus
-</P>
-<P>
-<PRE>
-  (?&#60;=bullock|donkey)
-</PRE>
-</P>
-<P>
-is permitted, but
-</P>
-<P>
-<PRE>
-  (?&#60;!dogs?|cats?)
-</PRE>
-</P>
-<P>
-causes an error at compile time. Branches that match different length strings
-are permitted only at the top level of a lookbehind assertion. This is an
-extension compared with Perl 5.005, which requires all branches to match the
-same length of string. An assertion such as
-</P>
-<P>
-<PRE>
-  (?&#60;=ab(c|de))
-</PRE>
-</P>
-<P>
-is not permitted, because its single top-level branch can match two different
-lengths, but it is acceptable if rewritten to use two top-level branches:
-</P>
-<P>
-<PRE>
-  (?&#60;=abc|abde)
-</PRE>
-</P>
-<P>
-The implementation of lookbehind assertions is, for each alternative, to
-temporarily move the current position back by the fixed width and then try to
-match. If there are insufficient characters before the current position, the
-match is deemed to fail. Lookbehinds in conjunction with once-only subpatterns
-can be particularly useful for matching at the ends of strings; an example is
-given at the end of the section on once-only subpatterns.
-</P>
-<P>
-Several assertions (of any sort) may occur in succession. For example,
-</P>
-<P>
-<PRE>
-  (?&#60;=\d{3})(?&#60;!999)foo
-</PRE>
-</P>
-<P>
-matches "foo" preceded by three digits that are not "999". Notice that each of
-the assertions is applied independently at the same point in the subject
-string. First there is a check that the previous three characters are all
-digits, and then there is a check that the same three characters are not "999".
-This pattern does <I>not</I> match "foo" preceded by six characters, the first
-of which are digits and the last three of which are not "999". For example, it
-doesn't match "123abcfoo". A pattern to do that is
-</P>
-<P>
-<PRE>
-  (?&#60;=\d{3}...)(?&#60;!999)foo
-</PRE>
-</P>
-<P>
-This time the first assertion looks at the preceding six characters, checking
-that the first three are digits, and then the second assertion checks that the
-preceding three characters are not "999".
-</P>
-<P>
-Assertions can be nested in any combination. For example,
-</P>
-<P>
-<PRE>
-  (?&#60;=(?&#60;!foo)bar)baz
-</PRE>
-</P>
-<P>
-matches an occurrence of "baz" that is preceded by "bar" which in turn is not
-preceded by "foo", while
-</P>
-<P>
-<PRE>
-  (?&#60;=\d{3}(?!999)...)foo
-</PRE>
-</P>
-<P>
-is another pattern which matches "foo" preceded by three digits and any three
-characters that are not "999".
-</P>
-<P>
-Assertion subpatterns are not capturing subpatterns, and may not be repeated,
-because it makes no sense to assert the same thing several times. If any kind
-of assertion contains capturing subpatterns within it, these are counted for
-the purposes of numbering the capturing subpatterns in the whole pattern.
-However, substring capturing is carried out only for positive assertions,
-because it does not make sense for negative assertions.
-</P>
-<P>
-Assertions count towards the maximum of 200 parenthesized subpatterns.
-</P>
-<LI><A NAME="SEC25" HREF="#TOC1">ONCE-ONLY SUBPATTERNS</A>
-<P>
-With both maximizing and minimizing repetition, failure of what follows
-normally causes the repeated item to be re-evaluated to see if a different
-number of repeats allows the rest of the pattern to match. Sometimes it is
-useful to prevent this, either to change the nature of the match, or to cause
-it fail earlier than it otherwise might, when the author of the pattern knows
-there is no point in carrying on.
-</P>
-<P>
-Consider, for example, the pattern \d+foo when applied to the subject line
-</P>
-<P>
-<PRE>
-  123456bar
-</PRE>
-</P>
-<P>
-After matching all 6 digits and then failing to match "foo", the normal
-action of the matcher is to try again with only 5 digits matching the \d+
-item, and then with 4, and so on, before ultimately failing. Once-only
-subpatterns provide the means for specifying that once a portion of the pattern
-has matched, it is not to be re-evaluated in this way, so the matcher would
-give up immediately on failing to match "foo" the first time. The notation is
-another kind of special parenthesis, starting with (?&#62; as in this example:
-</P>
-<P>
-<PRE>
-  (?&#62;\d+)bar
-</PRE>
-</P>
-<P>
-This kind of parenthesis "locks up" the  part of the pattern it contains once
-it has matched, and a failure further into the pattern is prevented from
-backtracking into it. Backtracking past it to previous items, however, works as
-normal.
-</P>
-<P>
-An alternative description is that a subpattern of this type matches the string
-of characters that an identical standalone pattern would match, if anchored at
-the current point in the subject string.
-</P>
-<P>
-Once-only subpatterns are not capturing subpatterns. Simple cases such as the
-above example can be thought of as a maximizing repeat that must swallow
-everything it can. So, while both \d+ and \d+? are prepared to adjust the
-number of digits they match in order to make the rest of the pattern match,
-(?&#62;\d+) can only match an entire sequence of digits.
-</P>
-<P>
-This construction can of course contain arbitrarily complicated subpatterns,
-and it can be nested.
-</P>
-<P>
-Once-only subpatterns can be used in conjunction with lookbehind assertions to
-specify efficient matching at the end of the subject string. Consider a simple
-pattern such as
-</P>
-<P>
-<PRE>
-  abcd$
-</PRE>
-</P>
-<P>
-when applied to a long string which does not match. Because matching proceeds
-from left to right, PCRE will look for each "a" in the subject and then see if
-what follows matches the rest of the pattern. If the pattern is specified as
-</P>
-<P>
-<PRE>
-  ^.*abcd$
-</PRE>
-</P>
-<P>
-the initial .* matches the entire string at first, but when this fails (because
-there is no following "a"), it backtracks to match all but the last character,
-then all but the last two characters, and so on. Once again the search for "a"
-covers the entire string, from right to left, so we are no better off. However,
-if the pattern is written as
-</P>
-<P>
-<PRE>
-  ^(?&#62;.*)(?&#60;=abcd)
-</PRE>
-</P>
-<P>
-there can be no backtracking for the .* item; it can match only the entire
-string. The subsequent lookbehind assertion does a single test on the last four
-characters. If it fails, the match fails immediately. For long strings, this
-approach makes a significant difference to the processing time.
-</P>
-<P>
-When a pattern contains an unlimited repeat inside a subpattern that can itself
-be repeated an unlimited number of times, the use of a once-only subpattern is
-the only way to avoid some failing matches taking a very long time indeed.
-The pattern
-</P>
-<P>
-<PRE>
-  (\D+|&#60;\d+&#62;)*[!?]
-</PRE>
-</P>
-<P>
-matches an unlimited number of substrings that either consist of non-digits, or
-digits enclosed in &#60;&#62;, followed by either ! or ?. When it matches, it runs
-quickly. However, if it is applied to
-</P>
-<P>
-<PRE>
-  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-</PRE>
-</P>
-<P>
-it takes a long time before reporting failure. This is because the string can
-be divided between the two repeats in a large number of ways, and all have to
-be tried. (The example used [!?] rather than a single character at the end,
-because both PCRE and Perl have an optimization that allows for fast failure
-when a single character is used. They remember the last single character that
-is required for a match, and fail early if it is not present in the string.)
-If the pattern is changed to
-</P>
-<P>
-<PRE>
-  ((?&#62;\D+)|&#60;\d+&#62;)*[!?]
-</PRE>
-</P>
-<P>
-sequences of non-digits cannot be broken, and failure happens quickly.
-</P>
-<LI><A NAME="SEC26" HREF="#TOC1">CONDITIONAL SUBPATTERNS</A>
-<P>
-It is possible to cause the matching process to obey a subpattern
-conditionally or to choose between two alternative subpatterns, depending on
-the result of an assertion, or whether a previous capturing subpattern matched
-or not. The two possible forms of conditional subpattern are
-</P>
-<P>
-<PRE>
-  (?(condition)yes-pattern)
-  (?(condition)yes-pattern|no-pattern)
-</PRE>
-</P>
-<P>
-If the condition is satisfied, the yes-pattern is used; otherwise the
-no-pattern (if present) is used. If there are more than two alternatives in the
-subpattern, a compile-time error occurs.
-</P>
-<P>
-There are two kinds of condition. If the text between the parentheses consists
-of a sequence of digits, the condition is satisfied if the capturing subpattern
-of that number has previously matched. Consider the following pattern, which
-contains non-significant white space to make it more readable (assume the
-PCRE_EXTENDED option) and to divide it into three parts for ease of discussion:
-</P>
-<P>
-<PRE>
-  ( \( )?    [^()]+    (?(1) \) )
-</PRE>
-</P>
-<P>
-The first part matches an optional opening parenthesis, and if that
-character is present, sets it as the first captured substring. The second part
-matches one or more characters that are not parentheses. The third part is a
-conditional subpattern that tests whether the first set of parentheses matched
-or not. If they did, that is, if subject started with an opening parenthesis,
-the condition is true, and so the yes-pattern is executed and a closing
-parenthesis is required. Otherwise, since no-pattern is not present, the
-subpattern matches nothing. In other words, this pattern matches a sequence of
-non-parentheses, optionally enclosed in parentheses.
-</P>
-<P>
-If the condition is not a sequence of digits, it must be an assertion. This may
-be a positive or negative lookahead or lookbehind assertion. Consider this
-pattern, again containing non-significant white space, and with the two
-alternatives on the second line:
-</P>
-<P>
-<PRE>
-  (?(?=[^a-z]*[a-z])
-  \d{2}-[a-z]{3}-\d{2}  |  \d{2}-\d{2}-\d{2} )
-</PRE>
-</P>
-<P>
-The condition is a positive lookahead assertion that matches an optional
-sequence of non-letters followed by a letter. In other words, it tests for the
-presence of at least one letter in the subject. If a letter is found, the
-subject is matched against the first alternative; otherwise it is matched
-against the second. This pattern matches strings in one of the two forms
-dd-aaa-dd or dd-dd-dd, where aaa are letters and dd are digits.
-</P>
-<LI><A NAME="SEC27" HREF="#TOC1">COMMENTS</A>
-<P>
-The sequence (?# marks the start of a comment which continues up to the next
-closing parenthesis. Nested parentheses are not permitted. The characters
-that make up a comment play no part in the pattern matching at all.
-</P>
-<P>
-If the PCRE_EXTENDED option is set, an unescaped # character outside a
-character class introduces a comment that continues up to the next newline
-character in the pattern.
-</P>
-<LI><A NAME="SEC28" HREF="#TOC1">RECURSIVE PATTERNS</A>
-<P>
-Consider the problem of matching a string in parentheses, allowing for
-unlimited nested parentheses. Without the use of recursion, the best that can
-be done is to use a pattern that matches up to some fixed depth of nesting. It
-is not possible to handle an arbitrary nesting depth. Perl 5.6 has provided an
-experimental facility that allows regular expressions to recurse (amongst other
-things). It does this by interpolating Perl code in the expression at run time,
-and the code can refer to the expression itself. A Perl pattern to solve the
-parentheses problem can be created like this:
-</P>
-<P>
-<PRE>
-  $re = qr{\( (?: (?&#62;[^()]+) | (?p{$re}) )* \)}x;
-</PRE>
-</P>
-<P>
-The (?p{...}) item interpolates Perl code at run time, and in this case refers
-recursively to the pattern in which it appears. Obviously, PCRE cannot support
-the interpolation of Perl code. Instead, the special item (?R) is provided for
-the specific case of recursion. This PCRE pattern solves the parentheses
-problem (assume the PCRE_EXTENDED option is set so that white space is
-ignored):
-</P>
-<P>
-<PRE>
-  \( ( (?&#62;[^()]+) | (?R) )* \)
-</PRE>
-</P>
-<P>
-First it matches an opening parenthesis. Then it matches any number of
-substrings which can either be a sequence of non-parentheses, or a recursive
-match of the pattern itself (i.e. a correctly parenthesized substring). Finally
-there is a closing parenthesis.
-</P>
-<P>
-This particular example pattern contains nested unlimited repeats, and so the
-use of a once-only subpattern for matching strings of non-parentheses is
-important when applying the pattern to strings that do not match. For example,
-when it is applied to
-</P>
-<P>
-<PRE>
-  (aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa()
-</PRE>
-</P>
-<P>
-it yields "no match" quickly. However, if a once-only subpattern is not used,
-the match runs for a very long time indeed because there are so many different
-ways the + and * repeats can carve up the subject, and all have to be tested
-before failure can be reported.
-</P>
-<P>
-The values set for any capturing subpatterns are those from the outermost level
-of the recursion at which the subpattern value is set. If the pattern above is
-matched against
-</P>
-<P>
-<PRE>
-  (ab(cd)ef)
-</PRE>
-</P>
-<P>
-the value for the capturing parentheses is "ef", which is the last value taken
-on at the top level. If additional parentheses are added, giving
-</P>
-<P>
-<PRE>
-  \( ( ( (?&#62;[^()]+) | (?R) )* ) \)
-     ^                        ^
-     ^                        ^
-</PRE>
-the string they capture is "ab(cd)ef", the contents of the top level
-parentheses. If there are more than 15 capturing parentheses in a pattern, PCRE
-has to obtain extra memory to store data during a recursion, which it does by
-using <B>pcre_malloc</B>, freeing it via <B>pcre_free</B> afterwards. If no
-memory can be obtained, it saves data for the first 15 capturing parentheses
-only, as there is no way to give an out-of-memory error from within a
-recursion.
-</P>
-<LI><A NAME="SEC29" HREF="#TOC1">PERFORMANCE</A>
-<P>
-Certain items that may appear in patterns are more efficient than others. It is
-more efficient to use a character class like [aeiou] than a set of alternatives
-such as (a|e|i|o|u). In general, the simplest construction that provides the
-required behaviour is usually the most efficient. Jeffrey Friedl's book
-contains a lot of discussion about optimizing regular expressions for efficient
-performance.
-</P>
-<P>
-When a pattern begins with .* and the PCRE_DOTALL option is set, the pattern is
-implicitly anchored by PCRE, since it can match only at the start of a subject
-string. However, if PCRE_DOTALL is not set, PCRE cannot make this optimization,
-because the . metacharacter does not then match a newline, and if the subject
-string contains newlines, the pattern may match from the character immediately
-following one of them instead of from the very start. For example, the pattern
-</P>
-<P>
-<PRE>
-  (.*) second
-</PRE>
-</P>
-<P>
-matches the subject "first\nand second" (where \n stands for a newline
-character) with the first captured substring being "and". In order to do this,
-PCRE has to retry the match starting after every newline in the subject.
-</P>
-<P>
-If you are using such a pattern with subject strings that do not contain
-newlines, the best performance is obtained by setting PCRE_DOTALL, or starting
-the pattern with ^.* to indicate explicit anchoring. That saves PCRE from
-having to scan along the subject looking for a newline to restart at.
-</P>
-<P>
-Beware of patterns that contain nested indefinite repeats. These can take a
-long time to run when applied to a string that does not match. Consider the
-pattern fragment
-</P>
-<P>
-<PRE>
-  (a+)*
-</PRE>
-</P>
-<P>
-This can match "aaaa" in 33 different ways, and this number increases very
-rapidly as the string gets longer. (The * repeat can match 0, 1, 2, 3, or 4
-times, and for each of those cases other than 0, the + repeats can match
-different numbers of times.) When the remainder of the pattern is such that the
-entire match is going to fail, PCRE has in principle to try every possible
-variation, and this can take an extremely long time.
-</P>
-<P>
-An optimization catches some of the more simple cases such as
-</P>
-<P>
-<PRE>
-  (a+)*b
-</PRE>
-</P>
-<P>
-where a literal character follows. Before embarking on the standard matching
-procedure, PCRE checks that there is a "b" later in the subject string, and if
-there is not, it fails the match immediately. However, when there is no
-following literal this optimization cannot be used. You can see the difference
-by comparing the behaviour of
-</P>
-<P>
-<PRE>
-  (a+)*\d
-</PRE>
-</P>
-<P>
-with the pattern above. The former gives a failure almost instantly when
-applied to a whole line of "a" characters, whereas the latter takes an
-appreciable time with strings longer than about 20 characters.
-</P>
-<LI><A NAME="SEC30" HREF="#TOC1">AUTHOR</A>
-<P>
-Philip Hazel &#60;ph10@cam.ac.uk&#62;
-<BR>
-University Computing Service,
-<BR>
-New Museums Site,
-<BR>
-Cambridge CB2 3QG, England.
-<BR>
-Phone: +44 1223 334714
-</P>
-<P>
-Last updated: 27 January 2000
-<BR>
-Copyright (c) 1997-2000 University of Cambridge.
diff --git a/srclib/pcre/doc/pcre.txt b/srclib/pcre/doc/pcre.txt
deleted file mode 100644
index b8106e4..0000000
--- a/srclib/pcre/doc/pcre.txt
+++ /dev/null
@@ -1,1977 +0,0 @@
-NAME
-     pcre - Perl-compatible regular expressions.
-
-
-
-SYNOPSIS
-     #include <pcre.h>
-
-     pcre *pcre_compile(const char *pattern, int options,
-          const char **errptr, int *erroffset,
-          const unsigned char *tableptr);
-
-     pcre_extra *pcre_study(const pcre *code, int options,
-          const char **errptr);
-
-     int pcre_exec(const pcre *code, const pcre_extra *extra,
-          const char *subject, int length, int startoffset,
-          int options, int *ovector, int ovecsize);
-
-     int pcre_copy_substring(const char *subject, int *ovector,
-          int stringcount, int stringnumber, char *buffer,
-          int buffersize);
-
-     int pcre_get_substring(const char *subject, int *ovector,
-          int stringcount, int stringnumber,
-          const char **stringptr);
-
-     int pcre_get_substring_list(const char *subject,
-          int *ovector, int stringcount, const char ***listptr);
-
-     const unsigned char *pcre_maketables(void);
-
-     int pcre_fullinfo(const pcre *code, const pcre_extra *extra,
-          int what, void *where);
-
-     int pcre_info(const pcre *code, int *optptr, *firstcharptr);
-
-     char *pcre_version(void);
-
-     void *(*pcre_malloc)(size_t);
-
-     void (*pcre_free)(void *);
-
-
-
-
-DESCRIPTION
-     The PCRE library is a set of functions that implement  regu-
-     lar  expression  pattern  matching using the same syntax and
-     semantics as Perl  5,  with  just  a  few  differences  (see
-     below).  The  current  implementation  corresponds  to  Perl
-     5.005, with some additional features from the Perl  develop-
-     ment release.
-
-     PCRE has its own native API,  which  is  described  in  this
-     document.  There  is  also  a  set of wrapper functions that
-     correspond to the POSIX regular expression API.   These  are
-     described in the pcreposix documentation.
-
-     The native API function prototypes are defined in the header
-     file  pcre.h,  and  on  Unix  systems  the library itself is
-     called libpcre.a, so can be accessed by adding -lpcre to the
-     command  for  linking  an  application  which  calls it. The
-     header file defines the macros PCRE_MAJOR and PCRE_MINOR  to
-     contain the major and minor release numbers for the library.
-     Applications can use these to include support for  different
-     releases.
-
-     The functions pcre_compile(), pcre_study(), and  pcre_exec()
-     are  used  for  compiling  and matching regular expressions,
-     while   pcre_copy_substring(),   pcre_get_substring(),   and
-     pcre_get_substring_list()   are  convenience  functions  for
-     extracting  captured  substrings  from  a  matched   subject
-     string.  The function pcre_maketables() is used (optionally)
-     to build a set of character tables in the current locale for
-     passing to pcre_compile().
-
-     The function pcre_fullinfo() is used to find out information
-     about a compiled pattern; pcre_info() is an obsolete version
-     which returns only some of the available information, but is
-     retained   for   backwards   compatibility.    The  function
-     pcre_version() returns a pointer to a string containing  the
-     version of PCRE and its date of release.
-
-     The global variables  pcre_malloc  and  pcre_free  initially
-     contain the entry points of the standard malloc() and free()
-     functions respectively. PCRE  calls  the  memory  management
-     functions  via  these  variables,  so  a calling program can
-     replace them if it  wishes  to  intercept  the  calls.  This
-     should be done before calling any PCRE functions.
-
-
-
-MULTI-THREADING
-     The PCRE functions can be used in  multi-threading  applica-
-     tions, with the proviso that the memory management functions
-     pointed to by pcre_malloc and pcre_free are  shared  by  all
-     threads.
-
-     The compiled form of a regular  expression  is  not  altered
-     during  matching, so the same compiled pattern can safely be
-     used by several threads at once.
-
-
-
-
-COMPILING A PATTERN
-     The function pcre_compile() is called to compile  a  pattern
-     into  an internal form. The pattern is a C string terminated
-     by a binary zero, and is passed in the argument  pattern.  A
-     pointer  to  a  single  block of memory that is obtained via
-     pcre_malloc is returned. This contains the compiled code and
-     related data. The pcre type is defined for this for conveni-
-     ence, but in fact pcre is just a typedef for void, since the
-     contents  of  the block are not externally defined. It is up
-     to the caller to free  the  memory  when  it  is  no  longer
-     required.
-
-     The size of a compiled pattern is  roughly  proportional  to
-     the length of the pattern string, except that each character
-     class (other than those containing just a single  character,
-     negated  or  not)  requires 33 bytes, and repeat quantifiers
-     with a minimum greater than one or a bounded  maximum  cause
-     the  relevant  portions of the compiled pattern to be repli-
-     cated.
-
-     The options argument contains independent bits  that  affect
-     the  compilation.  It  should  be  zero  if  no  options are
-     required. Some of the options, in particular, those that are
-     compatible  with Perl, can also be set and unset from within
-     the pattern (see the detailed description of regular expres-
-     sions below). For these options, the contents of the options
-     argument specifies their initial settings at  the  start  of
-     compilation  and  execution. The PCRE_ANCHORED option can be
-     set at the time of matching as well as at compile time.
-
-     If errptr is NULL, pcre_compile() returns NULL  immediately.
-     Otherwise, if compilation of a pattern fails, pcre_compile()
-     returns NULL, and sets the variable pointed to by errptr  to
-     point  to a textual error message. The offset from the start
-     of  the  pattern  to  the  character  where  the  error  was
-     discovered   is   placed  in  the  variable  pointed  to  by
-     erroffset, which must not be NULL. If it  is,  an  immediate
-     error is given.
-
-     If the final  argument,  tableptr,  is  NULL,  PCRE  uses  a
-     default  set  of character tables which are built when it is
-     compiled, using the default C  locale.  Otherwise,  tableptr
-     must  be  the result of a call to pcre_maketables(). See the
-     section on locale support below.
-
-     The following option bits are defined in the header file:
-
-       PCRE_ANCHORED
-
-     If this bit is set, the pattern is forced to be  "anchored",
-     that is, it is constrained to match only at the start of the
-     string which is being searched (the "subject string").  This
-     effect can also be achieved by appropriate constructs in the
-     pattern itself, which is the only way to do it in Perl.
-
-       PCRE_CASELESS
-
-     If this bit is set, letters in the pattern match both  upper
-     and  lower  case  letters.  It  is  equivalent  to Perl's /i
-     option.
-
-       PCRE_DOLLAR_ENDONLY
-
-     If this bit is set, a dollar metacharacter  in  the  pattern
-     matches  only at the end of the subject string. Without this
-     option, a dollar also matches immediately before  the  final
-     character  if it is a newline (but not before any other new-
-     lines).  The  PCRE_DOLLAR_ENDONLY  option  is   ignored   if
-     PCRE_MULTILINE is set. There is no equivalent to this option
-     in Perl.
-
-       PCRE_DOTALL
-
-     If this bit is  set,  a  dot  metacharater  in  the  pattern
-     matches all characters, including newlines. Without it, new-
-     lines are excluded. This option is equivalent to  Perl's  /s
-     option.  A negative class such as [^a] always matches a new-
-     line character, independent of the setting of this option.
-
-       PCRE_EXTENDED
-
-     If this bit is set, whitespace data characters in  the  pat-
-     tern  are  totally  ignored  except when escaped or inside a
-     character class, and characters between an unescaped #  out-
-     side  a  character  class  and  the  next newline character,
-     inclusive, are also ignored. This is equivalent to Perl's /x
-     option,  and  makes  it  possible to include comments inside
-     complicated patterns. Note, however, that this applies  only
-     to  data  characters. Whitespace characters may never appear
-     within special character sequences in a pattern, for example
-     within  the sequence (?( which introduces a conditional sub-
-     pattern.
-
-       PCRE_EXTRA
-
-     This option was invented in  order  to  turn  on  additional
-     functionality of PCRE that is incompatible with Perl, but it
-     is currently of very little use. When set, any backslash  in
-     a  pattern  that is followed by a letter that has no special
-     meaning causes an error, thus reserving  these  combinations
-     for  future  expansion.  By default, as in Perl, a backslash
-     followed by a letter with no special meaning is treated as a
-     literal.  There  are at present no other features controlled
-     by this option. It can also be set by a (?X) option  setting
-     within a pattern.
-
-       PCRE_MULTILINE
-
-     By default, PCRE treats the subject string as consisting  of
-     a  single "line" of characters (even if it actually contains
-     several newlines). The "start  of  line"  metacharacter  (^)
-     matches  only  at the start of the string, while the "end of
-     line" metacharacter ($) matches  only  at  the  end  of  the
-     string,    or   before   a   terminating   newline   (unless
-     PCRE_DOLLAR_ENDONLY is set). This is the same as Perl.
-
-     When PCRE_MULTILINE it is set, the "start of line" and  "end
-     of  line"  constructs match immediately following or immedi-
-     ately before any newline  in  the  subject  string,  respec-
-     tively,  as  well  as  at  the  very  start and end. This is
-     equivalent to Perl's /m option. If there are no "\n" charac-
-     ters  in  a subject string, or no occurrences of ^ or $ in a
-     pattern, setting PCRE_MULTILINE has no effect.
-
-       PCRE_UNGREEDY
-
-     This option inverts the "greediness" of the  quantifiers  so
-     that  they  are  not greedy by default, but become greedy if
-     followed by "?". It is not compatible with Perl. It can also
-     be set by a (?U) option setting within the pattern.
-
-
-
-STUDYING A PATTERN
-     When a pattern is going to be  used  several  times,  it  is
-     worth  spending  more time analyzing it in order to speed up
-     the time taken for matching. The function pcre_study() takes
-     a  pointer  to a compiled pattern as its first argument, and
-     returns a  pointer  to  a  pcre_extra  block  (another  void
-     typedef)  containing  additional  information about the pat-
-     tern; this can be passed to pcre_exec().  If  no  additional
-     information is available, NULL is returned.
-
-     The second argument contains option  bits.  At  present,  no
-     options  are  defined  for  pcre_study(),  and this argument
-     should always be zero.
-
-     The third argument for pcre_study() is a pointer to an error
-     message. If studying succeeds (even if no data is returned),
-     the variable it points to  is  set  to  NULL.  Otherwise  it
-     points to a textual error message.
-
-     At present, studying a  pattern  is  useful  only  for  non-
-     anchored  patterns  that do not have a single fixed starting
-     character. A  bitmap  of  possible  starting  characters  is
-     created.
-
-
-
-LOCALE SUPPORT
-     PCRE handles caseless matching, and determines whether char-
-     acters  are  letters, digits, or whatever, by reference to a
-     set of tables. The library contains a default set of  tables
-     which  is  created in the default C locale when PCRE is com-
-     piled.  This  is   used   when   the   final   argument   of
-     pcre_compile()  is NULL, and is sufficient for many applica-
-     tions.
-
-     An alternative set of tables can, however, be supplied. Such
-     tables  are built by calling the pcre_maketables() function,
-     which has no arguments, in the relevant locale.  The  result
-     can  then be passed to pcre_compile() as often as necessary.
-     For example, to build and use tables  that  are  appropriate
-     for  the French locale (where accented characters with codes
-     greater than 128 are treated as letters), the following code
-     could be used:
-
-       setlocale(LC_CTYPE, "fr");
-       tables = pcre_maketables();
-       re = pcre_compile(..., tables);
-
-     The  tables  are  built  in  memory  that  is  obtained  via
-     pcre_malloc.  The  pointer that is passed to pcre_compile is
-     saved with the compiled pattern, and  the  same  tables  are
-     used  via this pointer by pcre_study() and pcre_exec(). Thus
-     for any single pattern, compilation, studying  and  matching
-     all happen in the same locale, but different patterns can be
-     compiled in different locales. It is the caller's  responsi-
-     bility  to  ensure  that  the  memory  containing the tables
-     remains available for as long as it is needed.
-
-
-
-INFORMATION ABOUT A PATTERN
-     The pcre_fullinfo() function  returns  information  about  a
-     compiled pattern. It replaces the obsolete pcre_info() func-
-     tion, which is nevertheless retained for backwards compabil-
-     ity (and is documented below).
-
-     The first argument for pcre_fullinfo() is a pointer  to  the
-     compiled  pattern.  The  second  argument  is  the result of
-     pcre_study(), or NULL if the pattern was  not  studied.  The
-     third  argument  specifies  which  piece  of  information is
-     required, while the fourth argument is a pointer to a  vari-
-     able  to receive the data. The yield of the function is zero
-     for success, or one of the following negative numbers:
-
-       PCRE_ERROR_NULL       the argument code was NULL
-                             the argument where was NULL
-       PCRE_ERROR_BADMAGIC   the "magic number" was not found
-       PCRE_ERROR_BADOPTION  the value of what was invalid
-
-     The possible values for the third argument  are  defined  in
-     pcre.h, and are as follows:
-
-       PCRE_INFO_OPTIONS
-
-     Return a copy of the options with which the pattern was com-
-     piled.  The fourth argument should point to au unsigned long
-     int variable. These option bits are those specified  in  the
-     call  to  pcre_compile(),  modified  by any top-level option
-     settings  within  the   pattern   itself,   and   with   the
-     PCRE_ANCHORED  bit  forcibly  set if the form of the pattern
-     implies that it can match only at the  start  of  a  subject
-     string.
-
-       PCRE_INFO_SIZE
-
-     Return the size of the compiled pattern, that is, the  value
-     that  was  passed as the argument to pcre_malloc() when PCRE
-     was getting memory in which to place the compiled data.  The
-     fourth argument should point to a size_t variable.
-
-       PCRE_INFO_CAPTURECOUNT
-
-     Return the number of capturing subpatterns in  the  pattern.
-     The fourth argument should point to an int variable.
-
-       PCRE_INFO_BACKREFMAX
-
-     Return the number of the highest back reference in the  pat-
-     tern.  The  fourth argument should point to an int variable.
-     Zero is returned if there are no back references.
-
-       PCRE_INFO_FIRSTCHAR
-
-     Return information about the first character of any  matched
-     string,  for  a  non-anchored  pattern.  If there is a fixed
-     first   character,   e.g.   from   a   pattern    such    as
-     (cat|cow|coyote),  it  is returned in the integer pointed to
-     by where. Otherwise, if either
-
-     (a) the pattern was compiled with the PCRE_MULTILINE option,
-     and every branch starts with "^", or
-
-     (b) every  branch  of  the  pattern  starts  with  ".*"  and
-     PCRE_DOTALL is not set (if it were set, the pattern would be
-     anchored),
-
-     -1 is returned, indicating that the pattern matches only  at
-     the  start  of a subject string or after any "\n" within the
-     string. Otherwise -2 is returned.  For anchored patterns, -2
-     is returned.
-
-       PCRE_INFO_FIRSTTABLE
-
-     If the pattern was studied, and this resulted  in  the  con-
-     struction of a 256-bit table indicating a fixed set of char-
-     acters for the first character in  any  matching  string,  a
-     pointer   to  the  table  is  returned.  Otherwise  NULL  is
-     returned. The fourth argument should point  to  an  unsigned
-     char * variable.
-
-       PCRE_INFO_LASTLITERAL
-
-     For a non-anchored pattern, return the value of  the  right-
-     most  literal  character  which  must  exist  in any matched
-     string, other than at its start. The fourth argument  should
-     point  to an int variable. If there is no such character, or
-     if the pattern is anchored, -1 is returned. For example, for
-     the pattern /a\d+z\d+/ the returned value is 'z'.
-
-     The pcre_info() function is now obsolete because its  inter-
-     face  is  too  restrictive  to return all the available data
-     about  a  compiled  pattern.   New   programs   should   use
-     pcre_fullinfo()  instead.  The  yield  of pcre_info() is the
-     number of capturing subpatterns, or  one  of  the  following
-     negative numbers:
-
-       PCRE_ERROR_NULL       the argument code was NULL
-       PCRE_ERROR_BADMAGIC   the "magic number" was not found
-
-     If the optptr argument is not NULL, a copy  of  the  options
-     with which the pattern was compiled is placed in the integer
-     it points to (see PCRE_INFO_OPTIONS above).
-
-     If the pattern is not anchored and the firstcharptr argument
-     is  not  NULL, it is used to pass back information about the
-     first    character    of    any    matched    string    (see
-     PCRE_INFO_FIRSTCHAR above).
-
-
-
-MATCHING A PATTERN
-     The function pcre_exec() is called to match a subject string
-     against  a pre-compiled pattern, which is passed in the code
-     argument. If the pattern has been studied, the result of the
-     study should be passed in the extra argument. Otherwise this
-     must be NULL.
-
-     The PCRE_ANCHORED option can be passed in the options  argu-
-     ment,  whose unused bits must be zero. However, if a pattern
-     was  compiled  with  PCRE_ANCHORED,  or  turned  out  to  be
-     anchored  by  virtue  of  its  contents,  it  cannot be made
-     unachored at matching time.
-
-     There are also three further options that can be set only at
-     matching time:
-
-       PCRE_NOTBOL
-
-     The first character of the string is not the beginning of  a
-     line,  so  the  circumflex  metacharacter  should  not match
-     before it. Setting this without PCRE_MULTILINE  (at  compile
-     time) causes circumflex never to match.
-
-       PCRE_NOTEOL
-
-     The end of the string is not the end of a line, so the  dol-
-     lar  metacharacter should not match it nor (except in multi-
-     line mode) a newline immediately  before  it.  Setting  this
-     without PCRE_MULTILINE (at compile time) causes dollar never
-     to match.
-
-       PCRE_NOTEMPTY
-
-     An empty string is not considered to be  a  valid  match  if
-     this  option  is  set. If there are alternatives in the pat-
-     tern, they are tried. If  all  the  alternatives  match  the
-     empty  string,  the  entire match fails. For example, if the
-     pattern
-
-       a?b?
-
-     is applied to a string not beginning with  "a"  or  "b",  it
-     matches  the  empty string at the start of the subject. With
-     PCRE_NOTEMPTY set, this match is not valid, so PCRE searches
-     further into the string for occurrences of "a" or "b".
-
-     Perl has no direct equivalent of PCRE_NOTEMPTY, but it  does
-     make  a  special case of a pattern match of the empty string
-     within its split() function, and when using the /g modifier.
-     It  is possible to emulate Perl's behaviour after matching a
-     null string by first trying the  match  again  at  the  same
-     offset  with  PCRE_NOTEMPTY  set,  and then if that fails by
-     advancing the starting offset  (see  below)  and  trying  an
-     ordinary match again.
-
-     The subject string is passed as  a  pointer  in  subject,  a
-     length  in  length,  and  a  starting offset in startoffset.
-     Unlike the pattern string, it may contain binary zero  char-
-     acters.  When  the starting offset is zero, the search for a
-     match starts at the beginning of the subject, and this is by
-     far the most common case.
-
-     A non-zero starting offset  is  useful  when  searching  for
-     another  match  in  the  same subject by calling pcre_exec()
-     again after a previous success.  Setting startoffset differs
-     from  just  passing  over  a  shortened  string  and setting
-     PCRE_NOTBOL in the case of a pattern that  begins  with  any
-     kind of lookbehind. For example, consider the pattern
-
-       \Biss\B
-
-     which finds occurrences of "iss" in the middle of words. (\B
-     matches only if the current position in the subject is not a
-     word boundary.) When applied to the string "Mississipi"  the
-     first  call  to  pcre_exec()  finds the first occurrence. If
-     pcre_exec() is called again with just the remainder  of  the
-     subject,  namely  "issipi", it does not match, because \B is
-     always false at the start of the subject, which is deemed to
-     be  a  word  boundary. However, if pcre_exec() is passed the
-     entire string again, but with startoffset set to 4, it finds
-     the  second  occurrence  of "iss" because it is able to look
-     behind the starting point to discover that it is preceded by
-     a letter.
-
-     If a non-zero starting offset is passed when the pattern  is
-     anchored, one attempt to match at the given offset is tried.
-     This can only succeed if the pattern does  not  require  the
-     match to be at the start of the subject.
-
-     In general, a pattern matches a certain portion of the  sub-
-     ject,  and  in addition, further substrings from the subject
-     may be picked out by parts of  the  pattern.  Following  the
-     usage  in  Jeffrey Friedl's book, this is called "capturing"
-     in what follows, and the phrase  "capturing  subpattern"  is
-     used for a fragment of a pattern that picks out a substring.
-     PCRE supports several other kinds of  parenthesized  subpat-
-     tern that do not cause substrings to be captured.
-
-     Captured substrings are returned to the caller via a  vector
-     of  integer  offsets whose address is passed in ovector. The
-     number of elements in the vector is passed in ovecsize.  The
-     first two-thirds of the vector is used to pass back captured
-     substrings, each substring using a  pair  of  integers.  The
-     remaining  third  of  the  vector  is  used  as workspace by
-     pcre_exec() while matching capturing subpatterns, and is not
-     available for passing back information. The length passed in
-     ovecsize should always be a multiple of three. If it is not,
-     it is rounded down.
-
-     When a match has been successful, information about captured
-     substrings is returned in pairs of integers, starting at the
-     beginning of ovector, and continuing up to two-thirds of its
-     length  at  the  most. The first element of a pair is set to
-     the offset of the first character in a  substring,  and  the
-     second is set to the offset of the first character after the
-     end of a substring. The first  pair,  ovector[0]  and  ovec-
-     tor[1],  identify  the portion of the subject string matched
-     by the entire pattern. The next pair is used for  the  first
-     capturing  subpattern,  and  so  on.  The  value returned by
-     pcre_exec() is the number of pairs that have  been  set.  If
-     there  are no capturing subpatterns, the return value from a
-     successful match is 1, indicating that just the  first  pair
-     of offsets has been set.
-
-     Some convenience functions are provided for  extracting  the
-     captured substrings as separate strings. These are described
-     in the following section.
-
-     It is possible for an capturing  subpattern  number  n+1  to
-     match  some  part  of  the subject when subpattern n has not
-     been used at all.  For  example,  if  the  string  "abc"  is
-     matched  against the pattern (a|(z))(bc) subpatterns 1 and 3
-     are matched, but 2 is not. When this  happens,  both  offset
-     values corresponding to the unused subpattern are set to -1.
-
-     If a capturing subpattern is matched repeatedly, it  is  the
-     last  portion  of  the  string  that  it  matched  that gets
-     returned.
-
-     If the vector is too small to hold  all  the  captured  sub-
-     strings,  it is used as far as possible (up to two-thirds of
-     its length), and the function returns a value  of  zero.  In
-     particular,  if  the  substring offsets are not of interest,
-     pcre_exec() may be called with ovector passed  as  NULL  and
-     ovecsize  as  zero.  However,  if  the pattern contains back
-     references and the ovector isn't big enough to remember  the
-     related  substrings,  PCRE  has to get additional memory for
-     use during matching. Thus it is usually advisable to  supply
-     an ovector.
-
-     Note that pcre_info() can be used to find out how many  cap-
-     turing  subpatterns  there  are  in  a compiled pattern. The
-     smallest size for ovector that will  allow  for  n  captured
-     substrings  in  addition  to  the  offsets  of the substring
-     matched by the whole pattern is (n+1)*3.
-
-     If pcre_exec() fails, it returns a negative number. The fol-
-     lowing are defined in the header file:
-
-       PCRE_ERROR_NOMATCH        (-1)
-
-     The subject string did not match the pattern.
-
-       PCRE_ERROR_NULL           (-2)
-
-     Either code or subject was passed as NULL,  or  ovector  was
-     NULL and ovecsize was not zero.
-
-       PCRE_ERROR_BADOPTION      (-3)
-
-     An unrecognized bit was set in the options argument.
-
-       PCRE_ERROR_BADMAGIC       (-4)
-
-     PCRE stores a 4-byte "magic number" at the start of the com-
-     piled  code,  to  catch  the  case  when it is passed a junk
-     pointer. This is the error it gives when  the  magic  number
-     isn't present.
-
-       PCRE_ERROR_UNKNOWN_NODE   (-5)
-
-     While running the pattern match, an unknown item was encoun-
-     tered in the compiled pattern. This error could be caused by
-     a bug in PCRE or by overwriting of the compiled pattern.
-
-       PCRE_ERROR_NOMEMORY       (-6)
-
-     If a pattern contains back references, but the ovector  that
-     is  passed  to pcre_exec() is not big enough to remember the
-     referenced substrings, PCRE gets a block of  memory  at  the
-     start  of  matching to use for this purpose. If the call via
-     pcre_malloc() fails, this error  is  given.  The  memory  is
-     freed at the end of matching.
-
-
-
-EXTRACTING CAPTURED SUBSTRINGS
-     Captured substrings can be accessed directly  by  using  the
-     offsets returned by pcre_exec() in ovector. For convenience,
-     the functions  pcre_copy_substring(),  pcre_get_substring(),
-     and  pcre_get_substring_list()  are  provided for extracting
-     captured  substrings  as  new,   separate,   zero-terminated
-     strings.   A  substring  that  contains  a  binary  zero  is
-     correctly extracted and has a further zero added on the end,
-     but the result does not, of course, function as a C string.
-
-     The first three arguments are the same for all  three  func-
-     tions:  subject  is  the  subject string which has just been
-     successfully matched, ovector is a pointer to the vector  of
-     integer   offsets   that  was  passed  to  pcre_exec(),  and
-     stringcount is the number of substrings that  were  captured
-     by  the  match,  including  the  substring  that matched the
-     entire regular expression. This is  the  value  returned  by
-     pcre_exec  if  it  is  greater  than  zero.  If  pcre_exec()
-     returned zero, indicating that it ran out of space in  ovec-
-     tor,  the  value passed as stringcount should be the size of
-     the vector divided by three.
-
-     The functions pcre_copy_substring() and pcre_get_substring()
-     extract a single substring, whose number is given as string-
-     number. A value of zero extracts the substring that  matched
-     the entire pattern, while higher values extract the captured
-     substrings. For pcre_copy_substring(), the string is  placed
-     in  buffer,  whose  length is given by buffersize, while for
-     pcre_get_substring() a new block of store  is  obtained  via
-     pcre_malloc,  and its address is returned via stringptr. The
-     yield of the function is  the  length  of  the  string,  not
-     including the terminating zero, or one of
-
-       PCRE_ERROR_NOMEMORY       (-6)
-
-     The buffer was too small for pcre_copy_substring(),  or  the
-     attempt to get memory failed for pcre_get_substring().
-
-       PCRE_ERROR_NOSUBSTRING    (-7)
-
-     There is no substring whose number is stringnumber.
-
-     The pcre_get_substring_list() function extracts  all  avail-
-     able  substrings  and builds a list of pointers to them. All
-     this is done in a single block of memory which  is  obtained
-     via pcre_malloc. The address of the memory block is returned
-     via listptr, which is also the start of the list  of  string
-     pointers.  The  end of the list is marked by a NULL pointer.
-     The yield of the function is zero if all went well, or
-
-       PCRE_ERROR_NOMEMORY       (-6)
-
-     if the attempt to get the memory block failed.
-
-     When any of these functions encounter a  substring  that  is
-     unset, which can happen when capturing subpattern number n+1
-     matches some part of the subject, but subpattern n  has  not
-     been  used  at all, they return an empty string. This can be
-     distinguished  from  a  genuine  zero-length  substring   by
-     inspecting the appropriate offset in ovector, which is nega-
-     tive for unset substrings.
-
-
-
-
-LIMITATIONS
-     There are some size limitations in PCRE but it is hoped that
-     they will never in practice be relevant.  The maximum length
-     of a compiled pattern is 65539 (sic) bytes.  All  values  in
-     repeating  quantifiers must be less than 65536.  The maximum
-     number of capturing subpatterns is 99.  The  maximum  number
-     of  all  parenthesized subpatterns, including capturing sub-
-     patterns, assertions, and other types of subpattern, is 200.
-
-     The maximum length of a subject string is the largest  posi-
-     tive number that an integer variable can hold. However, PCRE
-     uses recursion to handle subpatterns and indefinite  repeti-
-     tion.  This  means  that the available stack space may limit
-     the size of a subject string that can be processed  by  cer-
-     tain patterns.
-
-
-
-DIFFERENCES FROM PERL
-     The differences described here  are  with  respect  to  Perl
-     5.005.
-
-     1. By default, a whitespace character is any character  that
-     the  C  library  function isspace() recognizes, though it is
-     possible to compile PCRE  with  alternative  character  type
-     tables. Normally isspace() matches space, formfeed, newline,
-     carriage return, horizontal tab, and vertical tab. Perl 5 no
-     longer  includes vertical tab in its set of whitespace char-
-     acters. The \v escape that was in the Perl documentation for
-     a long time was never in fact recognized. However, the char-
-     acter itself was treated as whitespace at least up to 5.002.
-     In 5.004 and 5.005 it does not match \s.
-
-     2. PCRE does  not  allow  repeat  quantifiers  on  lookahead
-     assertions. Perl permits them, but they do not mean what you
-     might think. For example, (?!a){3} does not assert that  the
-     next  three characters are not "a". It just asserts that the
-     next character is not "a" three times.
-
-     3. Capturing subpatterns that occur inside  negative  looka-
-     head  assertions  are  counted,  but  their  entries  in the
-     offsets vector are never set. Perl sets its numerical  vari-
-     ables  from  any  such  patterns that are matched before the
-     assertion fails to match something (thereby succeeding), but
-     only  if  the negative lookahead assertion contains just one
-     branch.
-
-     4. Though binary zero characters are supported in  the  sub-
-     ject  string,  they  are  not  allowed  in  a pattern string
-     because it is passed as a normal  C  string,  terminated  by
-     zero. The escape sequence "\0" can be used in the pattern to
-     represent a binary zero.
-
-     5. The following Perl escape sequences  are  not  supported:
-     \l,  \u,  \L,  \U,  \E, \Q. In fact these are implemented by
-     Perl's general string-handling and are not part of its  pat-
-     tern matching engine.
-
-     6. The Perl \G assertion is  not  supported  as  it  is  not
-     relevant to single pattern matches.
-
-     7. Fairly obviously, PCRE does not support the (?{code}) and
-     (?p{code})  constructions. However, there is some experimen-
-     tal support for recursive patterns using the  non-Perl  item
-     (?R).
-     8. There are at the time of writing some  oddities  in  Perl
-     5.005_02  concerned  with  the  settings of captured strings
-     when part of a pattern is repeated.  For  example,  matching
-     "aba"  against the pattern /^(a(b)?)+$/ sets $2 to the value
-     "b", but matching "aabbaa" against /^(aa(bb)?)+$/ leaves  $2
-     unset.    However,    if   the   pattern   is   changed   to
-     /^(aa(b(b))?)+$/ then $2 (and $3) are set.
-
-     In Perl 5.004 $2 is set in both cases, and that is also true
-     of PCRE. If in the future Perl changes to a consistent state
-     that is different, PCRE may change to follow.
-
-     9. Another as yet unresolved discrepancy  is  that  in  Perl
-     5.005_02  the  pattern /^(a)?(?(1)a|b)+$/ matches the string
-     "a", whereas in PCRE it does not.  However, in both Perl and
-     PCRE /^(a)?a/ matched against "a" leaves $1 unset.
-
-     10. PCRE  provides  some  extensions  to  the  Perl  regular
-     expression facilities:
-
-     (a) Although lookbehind assertions must match  fixed  length
-     strings,  each  alternative branch of a lookbehind assertion
-     can match a different length of string. Perl 5.005  requires
-     them all to have the same length.
-
-     (b) If PCRE_DOLLAR_ENDONLY is set and PCRE_MULTILINE is  not
-     set,  the  $ meta- character matches only at the very end of
-     the string.
-
-     (c) If PCRE_EXTRA is set, a backslash followed by  a  letter
-     with no special meaning is faulted.
-
-     (d) If PCRE_UNGREEDY is set, the greediness of  the  repeti-
-     tion  quantifiers  is inverted, that is, by default they are
-     not greedy, but if followed by a question mark they are.
-
-     (e) PCRE_ANCHORED can be used to force a pattern to be tried
-     only at the start of the subject.
-
-     (f) The PCRE_NOTBOL, PCRE_NOTEOL, and PCRE_NOTEMPTY  options
-     for pcre_exec() have no Perl equivalents.
-
-     (g) The (?R) construct allows for recursive pattern matching
-     (Perl  5.6 can do this using the (?p{code}) construct, which
-     PCRE cannot of course support.)
-
-
-
-REGULAR EXPRESSION DETAILS
-     The syntax and semantics of  the  regular  expressions  sup-
-     ported  by PCRE are described below. Regular expressions are
-     also described in the Perl documentation and in a number  of
-
-     other  books,  some  of which have copious examples. Jeffrey
-     Friedl's  "Mastering  Regular  Expressions",  published   by
-     O'Reilly  (ISBN  1-56592-257),  covers them in great detail.
-     The description here is intended as reference documentation.
-
-     A regular expression is a pattern that is matched against  a
-     subject string from left to right. Most characters stand for
-     themselves in a pattern, and match the corresponding charac-
-     ters in the subject. As a trivial example, the pattern
-
-       The quick brown fox
-
-     matches a portion of a subject string that is  identical  to
-     itself.  The  power  of  regular  expressions comes from the
-     ability to include alternatives and repetitions in the  pat-
-     tern.  These  are encoded in the pattern by the use of meta-
-     characters, which do not stand for  themselves  but  instead
-     are interpreted in some special way.
-
-     There are two different sets of meta-characters: those  that
-     are  recognized anywhere in the pattern except within square
-     brackets, and those that are recognized in square  brackets.
-     Outside square brackets, the meta-characters are as follows:
-
-       \      general escape character with several uses
-       ^      assert start of  subject  (or  line,  in  multiline
-     mode)
-       $      assert end of subject (or line, in multiline mode)
-       .      match any character except newline (by default)
-       [      start character class definition
-       |      start of alternative branch
-       (      start subpattern
-       )      end subpattern
-       ?      extends the meaning of (
-              also 0 or 1 quantifier
-              also quantifier minimizer
-       *      0 or more quantifier
-       +      1 or more quantifier
-       {      start min/max quantifier
-
-     Part of a pattern that is in square  brackets  is  called  a
-     "character  class".  In  a  character  class  the only meta-
-     characters are:
-
-       \      general escape character
-       ^      negate the class, but only if the first character
-       -      indicates character range
-       ]      terminates the character class
-
-     The following sections describe  the  use  of  each  of  the
-     meta-characters.
-
-
-
-BACKSLASH
-     The backslash character has several uses. Firstly, if it  is
-     followed  by  a  non-alphameric character, it takes away any
-     special  meaning  that  character  may  have.  This  use  of
-     backslash  as  an  escape  character applies both inside and
-     outside character classes.
-
-     For example, if you want to match a "*" character, you write
-     "\*" in the pattern. This applies whether or not the follow-
-     ing character would otherwise  be  interpreted  as  a  meta-
-     character,  so it is always safe to precede a non-alphameric
-     with "\" to specify that it stands for itself.  In  particu-
-     lar, if you want to match a backslash, you write "\\".
-
-     If a pattern is compiled with the PCRE_EXTENDED option, whi-
-     tespace in the pattern (other than in a character class) and
-     characters between a "#" outside a character class  and  the
-     next  newline  character  are ignored. An escaping backslash
-     can be used to include a whitespace or "#" character as part
-     of the pattern.
-
-     A second use of backslash provides a way  of  encoding  non-
-     printing  characters  in patterns in a visible manner. There
-     is no restriction on the appearance of non-printing  charac-
-     ters,  apart from the binary zero that terminates a pattern,
-     but when a pattern is being prepared by text editing, it  is
-     usually  easier to use one of the following escape sequences
-     than the binary character it represents:
-
-       \a     alarm, that is, the BEL character (hex 07)
-       \cx    "control-x", where x is any character
-       \e     escape (hex 1B)
-       \f     formfeed (hex 0C)
-       \n     newline (hex 0A)
-       \r     carriage return (hex 0D)
-       \t     tab (hex 09)
-       \xhh   character with hex code hh
-       \ddd   character with octal code ddd, or backreference
-
-     The precise effect of "\cx" is as follows: if "x" is a lower
-     case  letter,  it  is converted to upper case. Then bit 6 of
-     the character (hex 40) is inverted.  Thus "\cz" becomes  hex
-     1A, but "\c{" becomes hex 3B, while "\c;" becomes hex 7B.
-
-     After "\x", up to two hexadecimal digits are  read  (letters
-     can be in upper or lower case).
-
-     After "\0" up to two further octal digits are read. In  both
-     cases,  if  there are fewer than two digits, just those that
-     are present are used. Thus the sequence "\0\x\07"  specifies
-     two binary zeros followed by a BEL character.  Make sure you
-     supply two digits after the initial zero  if  the  character
-     that follows is itself an octal digit.
-
-     The handling of a backslash followed by a digit other than 0
-     is  complicated.   Outside  a character class, PCRE reads it
-     and any following digits as a decimal number. If the  number
-     is  less  than  10, or if there have been at least that many
-     previous capturing left parentheses in the  expression,  the
-     entire  sequence is taken as a back reference. A description
-     of how this works is given later, following  the  discussion
-     of parenthesized subpatterns.
-
-     Inside a character  class,  or  if  the  decimal  number  is
-     greater  than  9 and there have not been that many capturing
-     subpatterns, PCRE re-reads up to three octal digits  follow-
-     ing  the  backslash,  and  generates  a single byte from the
-     least significant 8 bits of the value. Any subsequent digits
-     stand for themselves.  For example:
-
-       \040   is another way of writing a space
-       \40    is the same, provided there are fewer than 40
-                 previous capturing subpatterns
-       \7     is always a back reference
-       \11    might be a back reference, or another way of
-                 writing a tab
-       \011   is always a tab
-       \0113  is a tab followed by the character "3"
-       \113   is the character with octal code 113 (since there
-                 can be no more than 99 back references)
-       \377   is a byte consisting entirely of 1 bits
-       \81    is either a back reference, or a binary zero
-                 followed by the two characters "8" and "1"
-
-     Note that octal values of 100 or greater must not be  intro-
-     duced  by  a  leading zero, because no more than three octal
-     digits are ever read.
-
-     All the sequences that define a single  byte  value  can  be
-     used both inside and outside character classes. In addition,
-     inside a character class, the sequence "\b"  is  interpreted
-     as  the  backspace  character  (hex 08). Outside a character
-     class it has a different meaning (see below).
-
-     The third use of backslash is for specifying generic charac-
-     ter types:
-
-       \d     any decimal digit
-       \D     any character that is not a decimal digit
-       \s     any whitespace character
-       \S     any character that is not a whitespace character
-       \w     any "word" character
-       \W     any "non-word" character
-
-     Each pair of escape sequences partitions the complete set of
-     characters  into  two  disjoint  sets.  Any  given character
-     matches one, and only one, of each pair.
-
-     A "word" character is any letter or digit or the  underscore
-     character,  that  is,  any  character which can be part of a
-     Perl "word". The definition of letters and  digits  is  con-
-     trolled  by PCRE's character tables, and may vary if locale-
-     specific matching is  taking  place  (see  "Locale  support"
-     above). For example, in the "fr" (French) locale, some char-
-     acter codes greater than 128 are used for accented  letters,
-     and these are matched by \w.
-
-     These character type sequences can appear  both  inside  and
-     outside  character classes. They each match one character of
-     the appropriate type. If the current matching  point  is  at
-     the end of the subject string, all of them fail, since there
-     is no character to match.
-
-     The fourth use of backslash is  for  certain  simple  asser-
-     tions. An assertion specifies a condition that has to be met
-     at a particular point in  a  match,  without  consuming  any
-     characters  from  the subject string. The use of subpatterns
-     for more complicated  assertions  is  described  below.  The
-     backslashed assertions are
-
-       \b     word boundary
-       \B     not a word boundary
-       \A     start of subject (independent of multiline mode)
-       \Z     end of subject or newline at  end  (independent  of
-     multiline mode)
-       \z     end of subject (independent of multiline mode)
-
-     These assertions may not appear in  character  classes  (but
-     note that "\b" has a different meaning, namely the backspace
-     character, inside a character class).
-
-     A word boundary is a position in the  subject  string  where
-     the current character and the previous character do not both
-     match \w or \W (i.e. one matches \w and  the  other  matches
-     \W),  or the start or end of the string if the first or last
-     character matches \w, respectively.
-
-     The \A, \Z, and \z assertions differ  from  the  traditional
-     circumflex  and  dollar  (described below) in that they only
-     ever match at the very start and end of the subject  string,
-     whatever  options  are  set.  They  are  not affected by the
-     PCRE_NOTBOL or PCRE_NOTEOL options. If the startoffset argu-
-     ment  of  pcre_exec()  is  non-zero, \A can never match. The
-     difference between \Z and \z is that  \Z  matches  before  a
-     newline  that is the last character of the string as well as
-     at the end of the string, whereas \z  matches  only  at  the
-     end.
-
-
-
-CIRCUMFLEX AND DOLLAR
-     Outside a character class, in the default matching mode, the
-     circumflex  character  is an assertion which is true only if
-     the current matching point is at the start  of  the  subject
-     string.  If  the startoffset argument of pcre_exec() is non-
-     zero, circumflex can never match. Inside a character  class,
-     circumflex has an entirely different meaning (see below).
-
-     Circumflex need not be the first character of the pattern if
-     a  number of alternatives are involved, but it should be the
-     first thing in each alternative in which it appears  if  the
-     pattern is ever to match that branch. If all possible alter-
-     natives start with a circumflex, that is, if the pattern  is
-     constrained to match only at the start of the subject, it is
-     said to be an "anchored" pattern. (There are also other con-
-     structs that can cause a pattern to be anchored.)
-
-     A dollar character is an assertion which is true only if the
-     current  matching point is at the end of the subject string,
-     or immediately before a newline character that is  the  last
-     character in the string (by default). Dollar need not be the
-     last character of the pattern if a  number  of  alternatives
-     are  involved,  but it should be the last item in any branch
-     in which it appears.  Dollar has no  special  meaning  in  a
-     character class.
-
-     The meaning of dollar can be changed so that it matches only
-     at   the   very   end   of   the   string,  by  setting  the
-     PCRE_DOLLAR_ENDONLY option at compile or matching time. This
-     does not affect the \Z assertion.
-
-     The meanings of the circumflex  and  dollar  characters  are
-     changed  if  the  PCRE_MULTILINE option is set. When this is
-     the case,  they  match  immediately  after  and  immediately
-     before an internal "\n" character, respectively, in addition
-     to matching at the start and end of the subject string.  For
-     example,  the  pattern  /^abc$/  matches  the subject string
-     "def\nabc" in multiline  mode,  but  not  otherwise.  Conse-
-     quently,  patterns  that  are  anchored  in single line mode
-     because all branches start with "^" are not anchored in mul-
-     tiline mode, and a match for circumflex is possible when the
-     startoffset  argument  of  pcre_exec()  is   non-zero.   The
-     PCRE_DOLLAR_ENDONLY  option  is ignored if PCRE_MULTILINE is
-     set.
-
-     Note that the sequences \A, \Z, and \z can be used to  match
-     the  start  and end of the subject in both modes, and if all
-     branches of a pattern start with \A is it  always  anchored,
-     whether PCRE_MULTILINE is set or not.
-
-
-
-FULL STOP (PERIOD, DOT)
-     Outside a character class, a dot in the pattern matches  any
-     one character in the subject, including a non-printing char-
-     acter, but not (by default)  newline.   If  the  PCRE_DOTALL
-     option  is set, dots match newlines as well. The handling of
-     dot is entirely independent of the  handling  of  circumflex
-     and  dollar,  the  only  relationship  being  that they both
-     involve newline characters. Dot has no special meaning in  a
-     character class.
-
-
-
-SQUARE BRACKETS
-     An opening square bracket introduces a character class, ter-
-     minated  by  a  closing  square  bracket.  A  closing square
-     bracket on its own is  not  special.  If  a  closing  square
-     bracket  is  required as a member of the class, it should be
-     the first data character in the class (after an initial cir-
-     cumflex, if present) or escaped with a backslash.
-
-     A character class matches a single character in the subject;
-     the  character  must  be in the set of characters defined by
-     the class, unless the first character in the class is a cir-
-     cumflex,  in which case the subject character must not be in
-     the set defined by the class. If a  circumflex  is  actually
-     required  as  a  member  of  the class, ensure it is not the
-     first character, or escape it with a backslash.
-
-     For example, the character class [aeiou] matches  any  lower
-     case vowel, while [^aeiou] matches any character that is not
-     a lower case vowel. Note that a circumflex is  just  a  con-
-     venient  notation for specifying the characters which are in
-     the class by enumerating those that are not. It  is  not  an
-     assertion:  it  still  consumes a character from the subject
-     string, and fails if the current pointer is at  the  end  of
-     the string.
-
-     When caseless matching  is  set,  any  letters  in  a  class
-     represent  both their upper case and lower case versions, so
-     for example, a caseless [aeiou] matches "A" as well as  "a",
-     and  a caseless [^aeiou] does not match "A", whereas a case-
-     ful version would.
-
-     The newline character is never treated in any special way in
-     character  classes,  whatever the setting of the PCRE_DOTALL
-     or PCRE_MULTILINE options is. A  class  such  as  [^a]  will
-     always match a newline.
-
-     The minus (hyphen) character can be used to specify a  range
-     of  characters  in  a  character  class.  For example, [d-m]
-     matches any letter between d and m, inclusive.  If  a  minus
-     character  is required in a class, it must be escaped with a
-     backslash or appear in a position where it cannot be  inter-
-     preted as indicating a range, typically as the first or last
-     character in the class.
-
-     It is not possible to have the literal character "]" as  the
-     end  character  of  a  range.  A  pattern such as [W-]46] is
-     interpreted as a class of two characters ("W" and "-")  fol-
-     lowed by a literal string "46]", so it would match "W46]" or
-     "-46]". However, if the "]" is escaped with a  backslash  it
-     is  interpreted  as  the end of range, so [W-\]46] is inter-
-     preted as a single class containing a range followed by  two
-     separate characters. The octal or hexadecimal representation
-     of "]" can also be used to end a range.
-
-     Ranges operate in ASCII collating sequence. They can also be
-     used  for  characters  specified  numerically,  for  example
-     [\000-\037]. If a range that includes letters is  used  when
-     caseless  matching  is set, it matches the letters in either
-     case. For example, [W-c] is equivalent  to  [][\^_`wxyzabc],
-     matched  caselessly,  and  if  character tables for the "fr"
-     locale are in use, [\xc8-\xcb] matches accented E characters
-     in both cases.
-
-     The character types \d, \D, \s, \S,  \w,  and  \W  may  also
-     appear  in  a  character  class, and add the characters that
-     they match to the class. For example, [\dABCDEF] matches any
-     hexadecimal  digit.  A  circumflex  can conveniently be used
-     with the upper case character types to specify a  more  res-
-     tricted set of characters than the matching lower case type.
-     For example, the class [^\W_] matches any letter  or  digit,
-     but not underscore.
-
-     All non-alphameric characters other than \,  -,  ^  (at  the
-     start)  and  the  terminating ] are non-special in character
-     classes, but it does no harm if they are escaped.
-
-
-
-POSIX CHARACTER CLASSES
-     Perl 5.6 (not yet released at the time of writing) is  going
-     to  support  the POSIX notation for character classes, which
-     uses names enclosed by  [:  and  :]   within  the  enclosing
-     square brackets. PCRE supports this notation. For example,
-
-       [01[:alpha:]%]
-
-     matches "0", "1", any alphabetic character, or "%". The sup-
-     ported class names are
-
-       alnum    letters and digits
-       alpha    letters
-       ascii    character codes 0 - 127
-       cntrl    control characters
-       digit    decimal digits (same as \d)
-       graph    printing characters, excluding space
-       lower    lower case letters
-       print    printing characters, including space
-       punct    printing characters, excluding letters and digits
-       space    white space (same as \s)
-       upper    upper case letters
-       word     "word" characters (same as \w)
-       xdigit   hexadecimal digits
-
-     The names "ascii" and "word" are  Perl  extensions.  Another
-     Perl  extension is negation, which is indicated by a ^ char-
-     acter after the colon. For example,
-
-       [12[:^digit:]]
-
-     matches "1", "2", or any non-digit.  PCRE  (and  Perl)  also
-     recogize  the POSIX syntax [.ch.] and [=ch=] where "ch" is a
-     "collating element", but these are  not  supported,  and  an
-     error is given if they are encountered.
-
-
-
-VERTICAL BAR
-     Vertical bar characters are  used  to  separate  alternative
-     patterns. For example, the pattern
-
-       gilbert|sullivan
-
-     matches either "gilbert" or "sullivan". Any number of alter-
-     natives  may  appear,  and an empty alternative is permitted
-     (matching the empty string).   The  matching  process  tries
-     each  alternative in turn, from left to right, and the first
-     one that succeeds is used. If the alternatives are within  a
-     subpattern  (defined  below),  "succeeds" means matching the
-     rest of the main pattern as well as the alternative  in  the
-     subpattern.
-
-
-
-INTERNAL OPTION SETTING
-     The settings of PCRE_CASELESS, PCRE_MULTILINE,  PCRE_DOTALL,
-     and  PCRE_EXTENDED can be changed from within the pattern by
-     a sequence of Perl option letters enclosed between "(?"  and
-     ")". The option letters are
-
-       i  for PCRE_CASELESS
-       m  for PCRE_MULTILINE
-       s  for PCRE_DOTALL
-       x  for PCRE_EXTENDED
-
-     For example, (?im) sets caseless, multiline matching. It  is
-     also possible to unset these options by preceding the letter
-     with a hyphen, and a combined setting and unsetting such  as
-     (?im-sx),  which sets PCRE_CASELESS and PCRE_MULTILINE while
-     unsetting PCRE_DOTALL and PCRE_EXTENDED, is also  permitted.
-     If  a  letter  appears both before and after the hyphen, the
-     option is unset.
-
-     The scope of these option changes depends on  where  in  the
-     pattern  the  setting  occurs. For settings that are outside
-     any subpattern (defined below), the effect is the same as if
-     the  options were set or unset at the start of matching. The
-     following patterns all behave in exactly the same way:
-
-       (?i)abc
-       a(?i)bc
-       ab(?i)c
-       abc(?i)
-
-     which in turn is the same as compiling the pattern abc  with
-     PCRE_CASELESS  set.   In  other words, such "top level" set-
-     tings apply to the whole pattern  (unless  there  are  other
-     changes  inside subpatterns). If there is more than one set-
-     ting of the same option at top level, the rightmost  setting
-     is used.
-
-     If an option change occurs inside a subpattern,  the  effect
-     is  different.  This is a change of behaviour in Perl 5.005.
-     An option change inside a subpattern affects only that  part
-     of the subpattern that follows it, so
-
-       (a(?i)b)c
-
-     matches  abc  and  aBc  and  no  other   strings   (assuming
-     PCRE_CASELESS  is  not used).  By this means, options can be
-     made to have different settings in different  parts  of  the
-     pattern.  Any  changes  made  in one alternative do carry on
-     into subsequent branches within  the  same  subpattern.  For
-     example,
-
-       (a(?i)b|c)
-
-     matches "ab", "aB", "c", and "C", even though when  matching
-     "C" the first branch is abandoned before the option setting.
-     This is because the effects of  option  settings  happen  at
-     compile  time. There would be some very weird behaviour oth-
-     erwise.
-
-     The PCRE-specific options PCRE_UNGREEDY and  PCRE_EXTRA  can
-     be changed in the same way as the Perl-compatible options by
-     using the characters U and X  respectively.  The  (?X)  flag
-     setting  is  special in that it must always occur earlier in
-     the pattern than any of the additional features it turns on,
-     even when it is at top level. It is best put at the start.
-
-
-
-SUBPATTERNS
-     Subpatterns are delimited by parentheses  (round  brackets),
-     which can be nested.  Marking part of a pattern as a subpat-
-     tern does two things:
-
-     1. It localizes a set of alternatives. For example, the pat-
-     tern
-
-       cat(aract|erpillar|)
-
-     matches one of the words "cat",  "cataract",  or  "caterpil-
-     lar".  Without  the  parentheses, it would match "cataract",
-     "erpillar" or the empty string.
-
-     2. It sets up the subpattern as a capturing  subpattern  (as
-     defined  above).   When the whole pattern matches, that por-
-     tion of the subject string that matched  the  subpattern  is
-     passed  back  to  the  caller  via  the  ovector argument of
-     pcre_exec(). Opening parentheses are counted  from  left  to
-     right (starting from 1) to obtain the numbers of the captur-
-     ing subpatterns.
-
-     For example, if the string "the red king" is matched against
-     the pattern
-
-       the ((red|white) (king|queen))
-
-     the captured substrings are "red king", "red",  and  "king",
-     and are numbered 1, 2, and 3.
-
-     The fact that plain parentheses fulfil two functions is  not
-     always  helpful.  There are often times when a grouping sub-
-     pattern is required without a capturing requirement.  If  an
-     opening parenthesis is followed by "?:", the subpattern does
-     not do any capturing, and is not counted when computing  the
-     number of any subsequent capturing subpatterns. For example,
-     if the string "the white queen" is matched against the  pat-
-     tern
-
-       the ((?:red|white) (king|queen))
-
-     the captured substrings are "white queen" and  "queen",  and
-     are  numbered  1  and 2. The maximum number of captured sub-
-     strings is 99, and the maximum number  of  all  subpatterns,
-     both capturing and non-capturing, is 200.
-
-     As a  convenient  shorthand,  if  any  option  settings  are
-     required  at  the  start  of a non-capturing subpattern, the
-     option letters may appear between the "?" and the ":".  Thus
-     the two patterns
-
-       (?i:saturday|sunday)
-       (?:(?i)saturday|sunday)
-
-     match exactly the same set of strings.  Because  alternative
-     branches  are  tried from left to right, and options are not
-     reset until the end of the subpattern is reached, an  option
-     setting  in  one  branch does affect subsequent branches, so
-     the above patterns match "SUNDAY" as well as "Saturday".
-
-
-
-REPETITION
-     Repetition is specified by quantifiers, which can follow any
-     of the following items:
-
-       a single character, possibly escaped
-       the . metacharacter
-       a character class
-       a back reference (see next section)
-       a parenthesized subpattern (unless it is  an  assertion  -
-     see below)
-
-     The general repetition quantifier specifies  a  minimum  and
-     maximum  number  of  permitted  matches,  by  giving the two
-     numbers in curly brackets (braces), separated  by  a  comma.
-     The  numbers  must be less than 65536, and the first must be
-     less than or equal to the second. For example:
-
-       z{2,4}
-
-     matches "zz", "zzz", or "zzzz". A closing brace on  its  own
-     is not a special character. If the second number is omitted,
-     but the comma is present, there is no upper  limit;  if  the
-     second number and the comma are both omitted, the quantifier
-     specifies an exact number of required matches. Thus
-
-       [aeiou]{3,}
-
-     matches at least 3 successive vowels,  but  may  match  many
-     more, while
-
-       \d{8}
-
-     matches exactly 8 digits.  An  opening  curly  bracket  that
-     appears  in a position where a quantifier is not allowed, or
-     one that does not match the syntax of a quantifier, is taken
-     as  a literal character. For example, {,6} is not a quantif-
-     ier, but a literal string of four characters.
-
-     The quantifier {0} is permitted, causing the  expression  to
-     behave  as  if the previous item and the quantifier were not
-     present.
-
-     For convenience (and  historical  compatibility)  the  three
-     most common quantifiers have single-character abbreviations:
-
-       *    is equivalent to {0,}
-       +    is equivalent to {1,}
-       ?    is equivalent to {0,1}
-
-     It is possible to construct infinite loops  by  following  a
-     subpattern  that  can  match no characters with a quantifier
-     that has no upper limit, for example:
-
-       (a?)*
-
-     Earlier versions of Perl and PCRE used to give an  error  at
-     compile  time  for such patterns. However, because there are
-     cases where this  can  be  useful,  such  patterns  are  now
-     accepted,  but  if  any repetition of the subpattern does in
-     fact match no characters, the loop is forcibly broken.
-
-     By default, the quantifiers  are  "greedy",  that  is,  they
-     match  as much as possible (up to the maximum number of per-
-     mitted times), without causing the rest of  the  pattern  to
-     fail. The classic example of where this gives problems is in
-     trying to match comments in C programs. These appear between
-     the  sequences /* and */ and within the sequence, individual
-     * and / characters may appear. An attempt to  match  C  com-
-     ments by applying the pattern
-
-       /\*.*\*/
-
-     to the string
-
-       /* first command */  not comment  /* second comment */
-
-     fails, because it matches  the  entire  string  due  to  the
-     greediness of the .*  item.
-
-     However, if a quantifier is followed by a question mark,  it
-     ceases  to be greedy, and instead matches the minimum number
-     of times possible, so the pattern
-
-       /\*.*?\*/
-
-     does the right thing with the C comments. The meaning of the
-     various  quantifiers is not otherwise changed, just the pre-
-     ferred number of matches.  Do not confuse this use of  ques-
-     tion  mark  with  its  use as a quantifier in its own right.
-     Because it has two uses, it can sometimes appear doubled, as
-     in
-
-       \d??\d
-
-     which matches one digit by preference, but can match two  if
-     that is the only way the rest of the pattern matches.
-
-     If the PCRE_UNGREEDY option is set (an option which  is  not
-     available  in  Perl),  the  quantifiers  are  not  greedy by
-     default, but individual ones can be made greedy by following
-     them  with  a  question mark. In other words, it inverts the
-     default behaviour.
-
-     When a parenthesized subpattern is quantified with a minimum
-     repeat  count  that is greater than 1 or with a limited max-
-     imum, more store is required for the  compiled  pattern,  in
-     proportion to the size of the minimum or maximum.
-
-     If a pattern starts with .* or  .{0,}  and  the  PCRE_DOTALL
-     option (equivalent to Perl's /s) is set, thus allowing the .
-     to match  newlines,  the  pattern  is  implicitly  anchored,
-     because whatever follows will be tried against every charac-
-     ter position in the subject string, so there is no point  in
-     retrying  the overall match at any position after the first.
-     PCRE treats such a pattern as though it were preceded by \A.
-     In  cases where it is known that the subject string contains
-     no newlines, it is worth setting PCRE_DOTALL when  the  pat-
-     tern begins with .* in order to obtain this optimization, or
-     alternatively using ^ to indicate anchoring explicitly.
-
-     When a capturing subpattern is repeated, the value  captured
-     is the substring that matched the final iteration. For exam-
-     ple, after
-
-       (tweedle[dume]{3}\s*)+
-
-     has matched "tweedledum tweedledee" the value  of  the  cap-
-     tured  substring  is  "tweedledee".  However,  if  there are
-     nested capturing  subpatterns,  the  corresponding  captured
-     values  may  have been set in previous iterations. For exam-
-     ple, after
-
-       /(a|(b))+/
-
-     matches "aba" the value of the second captured substring  is
-     "b".
-
-
-
-BACK REFERENCES
-     Outside a character class, a backslash followed by  a  digit
-     greater  than  0  (and  possibly  further  digits) is a back
-     reference to a capturing subpattern  earlier  (i.e.  to  its
-     left)  in  the  pattern,  provided there have been that many
-     previous capturing left parentheses.
-
-     However, if the decimal number following  the  backslash  is
-     less  than  10,  it is always taken as a back reference, and
-     causes an error only if there are not  that  many  capturing
-     left  parentheses in the entire pattern. In other words, the
-     parentheses that are referenced need not be to the  left  of
-     the  reference  for  numbers  less  than 10. See the section
-     entitled "Backslash" above for further details of  the  han-
-     dling of digits following a backslash.
-
-     A back reference matches whatever actually matched the  cap-
-     turing subpattern in the current subject string, rather than
-     anything matching the subpattern itself. So the pattern
-
-       (sens|respons)e and \1ibility
-
-     matches "sense and sensibility" and "response and  responsi-
-     bility",  but  not  "sense  and  responsibility". If caseful
-     matching is in force at the time of the back reference,  the
-     case of letters is relevant. For example,
-
-       ((?i)rah)\s+\1
-
-     matches "rah rah" and "RAH RAH", but  not  "RAH  rah",  even
-     though  the  original  capturing subpattern is matched case-
-     lessly.
-
-     There may be more than one back reference to the  same  sub-
-     pattern.  If  a  subpattern  has not actually been used in a
-     particular match, any back references to it always fail. For
-     example, the pattern
-
-       (a|(bc))\2
-
-     always fails if it starts to match  "a"  rather  than  "bc".
-     Because  there  may  be up to 99 back references, all digits
-     following the backslash are taken as  part  of  a  potential
-     back reference number. If the pattern continues with a digit
-     character, some delimiter must be used to terminate the back
-     reference.   If the PCRE_EXTENDED option is set, this can be
-     whitespace. Otherwise an empty comment can be used.
-
-     A back reference that occurs inside the parentheses to which
-     it  refers  fails when the subpattern is first used, so, for
-     example, (a\1) never matches.  However, such references  can
-     be  useful  inside  repeated  subpatterns.  For example, the
-     pattern
-
-       (a|b\1)+
-
-     matches any number of "a"s and also "aba", "ababaa" etc.  At
-     each iteration of the subpattern, the back reference matches
-     the character string corresponding to  the  previous  itera-
-     tion.  In  order  for this to work, the pattern must be such
-     that the first iteration does not need  to  match  the  back
-     reference.  This  can  be  done using alternation, as in the
-     example above, or by a quantifier with a minimum of zero.
-
-
-
-ASSERTIONS
-     An assertion is  a  test  on  the  characters  following  or
-     preceding  the current matching point that does not actually
-     consume any characters. The simple assertions coded  as  \b,
-     \B,  \A,  \Z,  \z, ^ and $ are described above. More compli-
-     cated assertions are coded as  subpatterns.  There  are  two
-     kinds:  those that look ahead of the current position in the
-     subject string, and those that look behind it.
-
-     An assertion subpattern is matched in the normal way, except
-     that  it  does not cause the current matching position to be
-     changed. Lookahead assertions start with  (?=  for  positive
-     assertions and (?! for negative assertions. For example,
-
-       \w+(?=;)
-
-     matches a word followed by a semicolon, but does not include
-     the semicolon in the match, and
-
-       foo(?!bar)
-
-     matches any occurrence of "foo"  that  is  not  followed  by
-     "bar". Note that the apparently similar pattern
-
-       (?!foo)bar
-
-     does not find an occurrence of "bar"  that  is  preceded  by
-     something other than "foo"; it finds any occurrence of "bar"
-     whatsoever, because the assertion  (?!foo)  is  always  true
-     when  the  next  three  characters  are  "bar". A lookbehind
-     assertion is needed to achieve this effect.
-
-     Lookbehind assertions start with (?<=  for  positive  asser-
-     tions and (?<! for negative assertions. For example,
-
-       (?<!foo)bar
-
-     does find an occurrence of "bar" that  is  not  preceded  by
-     "foo". The contents of a lookbehind assertion are restricted
-     such that all the strings  it  matches  must  have  a  fixed
-     length.  However, if there are several alternatives, they do
-     not all have to have the same fixed length. Thus
-
-       (?<=bullock|donkey)
-
-     is permitted, but
-
-       (?<!dogs?|cats?)
-
-     causes an error at compile time. Branches  that  match  dif-
-     ferent length strings are permitted only at the top level of
-     a lookbehind assertion. This is an extension  compared  with
-     Perl  5.005,  which  requires all branches to match the same
-     length of string. An assertion such as
-
-       (?<=ab(c|de))
-
-     is not permitted, because its single  top-level  branch  can
-     match two different lengths, but it is acceptable if rewrit-
-     ten to use two top-level branches:
-
-       (?<=abc|abde)
-
-     The implementation of lookbehind  assertions  is,  for  each
-     alternative,  to  temporarily move the current position back
-     by the fixed width and then  try  to  match.  If  there  are
-     insufficient  characters  before  the  current position, the
-     match is deemed to fail.  Lookbehinds  in  conjunction  with
-     once-only  subpatterns can be particularly useful for match-
-     ing at the ends of strings; an example is given at  the  end
-     of the section on once-only subpatterns.
-
-     Several assertions (of any sort) may  occur  in  succession.
-     For example,
-
-       (?<=\d{3})(?<!999)foo
-
-     matches "foo" preceded by three digits that are  not  "999".
-     Notice  that each of the assertions is applied independently
-     at the same point in the subject string. First  there  is  a
-     check that the previous three characters are all digits, and
-     then there is a check that the same three characters are not
-     "999".   This  pattern  does not match "foo" preceded by six
-     characters, the first of which are digits and the last three
-     of  which  are  not  "999".  For  example,  it doesn't match
-     "123abcfoo". A pattern to do that is
-
-       (?<=\d{3}...)(?<!999)foo
-
-     This time the first assertion looks  at  the  preceding  six
-     characters,  checking  that  the first three are digits, and
-     then the second assertion checks that  the  preceding  three
-     characters are not "999".
-
-     Assertions can be nested in any combination. For example,
-
-       (?<=(?<!foo)bar)baz
-
-     matches an occurrence of "baz" that  is  preceded  by  "bar"
-     which in turn is not preceded by "foo", while
-
-       (?<=\d{3}(?!999)...)foo
-
-     is another pattern which matches  "foo"  preceded  by  three
-     digits and any three characters that are not "999".
-
-     Assertion subpatterns are not capturing subpatterns, and may
-     not  be  repeated,  because  it makes no sense to assert the
-     same thing several times. If any kind of assertion  contains
-     capturing  subpatterns  within it, these are counted for the
-     purposes of numbering the capturing subpatterns in the whole
-     pattern.   However,  substring capturing is carried out only
-     for positive assertions, because it does not make sense  for
-     negative assertions.
-
-     Assertions count towards the maximum  of  200  parenthesized
-     subpatterns.
-
-
-
-ONCE-ONLY SUBPATTERNS
-     With both maximizing and minimizing repetition,  failure  of
-     what  follows  normally  causes  the repeated item to be re-
-     evaluated to see if a different number of repeats allows the
-     rest  of  the  pattern  to  match. Sometimes it is useful to
-     prevent this, either to change the nature of the  match,  or
-     to  cause  it fail earlier than it otherwise might, when the
-     author of the pattern knows there is no  point  in  carrying
-     on.
-
-     Consider, for example, the pattern \d+foo  when  applied  to
-     the subject line
-
-       123456bar
-
-     After matching all 6 digits and then failing to match "foo",
-     the normal action of the matcher is to try again with only 5
-     digits matching the \d+ item, and then with 4,  and  so  on,
-     before ultimately failing. Once-only subpatterns provide the
-     means for specifying that once a portion of the pattern  has
-     matched,  it  is  not to be re-evaluated in this way, so the
-     matcher would give up immediately on failing to match  "foo"
-     the  first  time.  The  notation  is another kind of special
-     parenthesis, starting with (?> as in this example:
-
-       (?>\d+)bar
-
-     This kind of parenthesis "locks up" the  part of the pattern
-     it  contains once it has matched, and a failure further into
-     the pattern is prevented from backtracking  into  it.  Back-
-     tracking  past  it to previous items, however, works as nor-
-     mal.
-
-     An alternative description is that a subpattern of this type
-     matches  the  string  of  characters that an identical stan-
-     dalone pattern would match, if anchored at the current point
-     in the subject string.
-
-     Once-only subpatterns are not capturing subpatterns.  Simple
-     cases  such as the above example can be thought of as a max-
-     imizing repeat that must  swallow  everything  it  can.  So,
-     while both \d+ and \d+? are prepared to adjust the number of
-     digits they match in order to make the rest of  the  pattern
-     match, (?>\d+) can only match an entire sequence of digits.
-
-     This construction can of course contain arbitrarily  compli-
-     cated subpatterns, and it can be nested.
-
-     Once-only subpatterns can be used in conjunction with  look-
-     behind  assertions  to specify efficient matching at the end
-     of the subject string. Consider a simple pattern such as
-
-       abcd$
-
-     when applied to a long string which does not match.  Because
-     matching  proceeds  from  left  to right, PCRE will look for
-     each "a" in the subject and then see if what follows matches
-     the rest of the pattern. If the pattern is specified as
-
-       ^.*abcd$
-
-     the initial .* matches the entire string at first, but  when
-     this  fails  (because  there  is no following "a"), it back-
-     tracks to match all but the last character, then all but the
-     last  two  characters,  and so on. Once again the search for
-     "a" covers the entire string, from right to left, so we  are
-     no better off. However, if the pattern is written as
-
-       ^(?>.*)(?<=abcd)
-
-     there can be no backtracking for the .* item; it  can  match
-     only  the entire string. The subsequent lookbehind assertion
-     does a single test on the last four characters. If it fails,
-     the match fails immediately. For long strings, this approach
-     makes a significant difference to the processing time.
-
-     When a pattern contains an unlimited repeat inside a subpat-
-     tern  that  can  itself  be  repeated an unlimited number of
-     times, the use of a once-only subpattern is the only way  to
-     avoid  some  failing matches taking a very long time indeed.
-     The pattern
-
-       (\D+|<\d+>)*[!?]
-
-     matches an unlimited number of substrings that  either  con-
-     sist  of  non-digits,  or digits enclosed in <>, followed by
-     either ! or ?. When it matches, it runs quickly. However, if
-     it is applied to
-
-       aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-
-     it takes a long  time  before  reporting  failure.  This  is
-     because the string can be divided between the two repeats in
-     a large number of ways, and all have to be tried. (The exam-
-     ple  used  [!?]  rather  than a single character at the end,
-     because both PCRE and Perl have an optimization that  allows
-     for  fast  failure  when  a  single  character is used. They
-     remember the last single character that is  required  for  a
-     match,  and  fail early if it is not present in the string.)
-     If the pattern is changed to
-
-       ((?>\D+)|<\d+>)*[!?]
-
-     sequences of non-digits cannot be broken, and  failure  hap-
-     pens quickly.
-
-
-
-CONDITIONAL SUBPATTERNS
-     It is possible to cause the matching process to obey a  sub-
-     pattern  conditionally  or to choose between two alternative
-     subpatterns, depending on the result  of  an  assertion,  or
-     whether  a previous capturing subpattern matched or not. The
-     two possible forms of conditional subpattern are
-
-       (?(condition)yes-pattern)
-       (?(condition)yes-pattern|no-pattern)
-
-     If the condition is satisfied, the yes-pattern is used; oth-
-     erwise  the  no-pattern  (if  present) is used. If there are
-     more than two alternatives in the subpattern, a compile-time
-     error occurs.
-
-     There are two kinds of condition. If the  text  between  the
-     parentheses  consists of a sequence of digits, the condition
-     is satisfied if the capturing subpattern of that number  has
-     previously  matched.  Consider  the following pattern, which
-     contains non-significant white space to make it  more  read-
-     able (assume the PCRE_EXTENDED option) and to divide it into
-     three parts for ease of discussion:
-
-       ( \( )?    [^()]+    (?(1) \) )
-
-     The first part matches an optional opening parenthesis,  and
-     if  that character is present, sets it as the first captured
-     substring. The second part matches one  or  more  characters
-     that  are  not  parentheses. The third part is a conditional
-     subpattern that tests whether the first set  of  parentheses
-     matched  or  not.  If  they did, that is, if subject started
-     with an opening parenthesis, the condition is true,  and  so
-     the  yes-pattern  is  executed  and a closing parenthesis is
-     required. Otherwise, since no-pattern is  not  present,  the
-     subpattern  matches  nothing.  In  other words, this pattern
-     matches a sequence of non-parentheses,  optionally  enclosed
-     in parentheses.
-
-     If the condition is not a sequence of digits, it must be  an
-     assertion.  This  may be a positive or negative lookahead or
-     lookbehind assertion. Consider this pattern, again  contain-
-     ing  non-significant  white space, and with the two alterna-
-     tives on the second line:
-
-       (?(?=[^a-z]*[a-z])
-       \d{2}-[a-z]{3}-\d{2}  |  \d{2}-\d{2}-\d{2} )
-
-     The condition is a positive lookahead assertion that matches
-     an optional sequence of non-letters followed by a letter. In
-     other words, it tests for  the  presence  of  at  least  one
-     letter  in the subject. If a letter is found, the subject is
-     matched against  the  first  alternative;  otherwise  it  is
-     matched  against the second. This pattern matches strings in
-     one of the two forms dd-aaa-dd or dd-dd-dd,  where  aaa  are
-     letters and dd are digits.
-
-
-
-COMMENTS
-     The sequence (?# marks the start of a comment which  contin-
-     ues  up  to the next closing parenthesis. Nested parentheses
-     are not permitted. The characters that  make  up  a  comment
-     play no part in the pattern matching at all.
-
-     If the PCRE_EXTENDED option is set, an unescaped # character
-     outside  a character class introduces a comment that contin-
-     ues up to the next newline character in the pattern.
-
-
-
-RECURSIVE PATTERNS
-     Consider the problem of matching a  string  in  parentheses,
-     allowing  for  unlimited nested parentheses. Without the use
-     of recursion, the best that can be done is to use a  pattern
-     that  matches  up  to some fixed depth of nesting. It is not
-     possible to handle an arbitrary nesting depth. Perl 5.6  has
-     provided   an  experimental  facility  that  allows  regular
-     expressions to recurse (amongst other things). It does  this
-     by  interpolating  Perl  code in the expression at run time,
-     and the code can refer to the expression itself. A Perl pat-
-     tern  to  solve  the parentheses problem can be created like
-     this:
-
-       $re = qr{\( (?: (?>[^()]+) | (?p{$re}) )* \)}x;
-
-     The (?p{...}) item interpolates Perl code at run  time,  and
-     in  this  case refers recursively to the pattern in which it
-     appears. Obviously, PCRE cannot support the interpolation of
-     Perl  code.  Instead,  the special item (?R) is provided for
-     the specific case of recursion. This PCRE pattern solves the
-     parentheses  problem (assume the PCRE_EXTENDED option is set
-     so that white space is ignored):
-
-       \( ( (?>[^()]+) | (?R) )* \)
-
-     First it matches an opening parenthesis. Then it matches any
-     number  of substrings which can either be a sequence of non-
-     parentheses, or a recursive  match  of  the  pattern  itself
-     (i.e. a correctly parenthesized substring). Finally there is
-     a closing parenthesis.
-
-     This particular example pattern  contains  nested  unlimited
-     repeats, and so the use of a once-only subpattern for match-
-     ing strings of non-parentheses is  important  when  applying
-     the  pattern to strings that do not match. For example, when
-     it is applied to
-
-       (aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa()
-
-     it yields "no match" quickly. However, if a  once-only  sub-
-     pattern  is  not  used,  the match runs for a very long time
-     indeed because there are so many different ways the + and  *
-     repeats  can carve up the subject, and all have to be tested
-     before failure can be reported.
-
-     The values set for any capturing subpatterns are those  from
-     the outermost level of the recursion at which the subpattern
-     value is set. If the pattern above is matched against
-
-       (ab(cd)ef)
-
-     the value for the capturing parentheses is  "ef",  which  is
-     the  last  value  taken  on  at the top level. If additional
-     parentheses are added, giving
-
-       \( ( ( (?>[^()]+) | (?R) )* ) \)
-          ^                        ^
-          ^                        ^ the string they  capture  is
-     "ab(cd)ef",  the  contents  of the top level parentheses. If
-     there are more than 15 capturing parentheses in  a  pattern,
-     PCRE  has  to  obtain  extra  memory  to store data during a
-     recursion, which it does by using  pcre_malloc,  freeing  it
-     via  pcre_free  afterwards. If no memory can be obtained, it
-     saves data for the first 15 capturing parentheses  only,  as
-     there is no way to give an out-of-memory error from within a
-     recursion.
-
-
-
-PERFORMANCE
-     Certain items that may appear in patterns are more efficient
-     than  others.  It is more efficient to use a character class
-     like [aeiou] than a set of alternatives such as (a|e|i|o|u).
-     In  general,  the  simplest  construction  that provides the
-     required behaviour is usually the  most  efficient.  Jeffrey
-     Friedl's  book contains a lot of discussion about optimizing
-     regular expressions for efficient performance.
-
-     When a pattern begins with .* and the PCRE_DOTALL option  is
-     set,  the  pattern  is implicitly anchored by PCRE, since it
-     can match only at the start of a subject string. However, if
-     PCRE_DOTALL  is not set, PCRE cannot make this optimization,
-     because the . metacharacter does not then match  a  newline,
-     and if the subject string contains newlines, the pattern may
-     match from the character immediately following one  of  them
-     instead of from the very start. For example, the pattern
-
-       (.*) second
-
-     matches the subject "first\nand second" (where \n stands for
-     a newline character) with the first captured substring being
-     "and". In order to do this, PCRE  has  to  retry  the  match
-     starting after every newline in the subject.
-
-     If you are using such a pattern with subject strings that do
-     not  contain  newlines,  the best performance is obtained by
-     setting PCRE_DOTALL, or starting the  pattern  with  ^.*  to
-     indicate  explicit anchoring. That saves PCRE from having to
-     scan along the subject looking for a newline to restart at.
-
-     Beware of patterns that contain nested  indefinite  repeats.
-     These  can  take a long time to run when applied to a string
-     that does not match. Consider the pattern fragment
-
-       (a+)*
-
-     This can match "aaaa" in 33 different ways, and this  number
-     increases  very  rapidly  as  the string gets longer. (The *
-     repeat can match 0, 1, 2, 3, or 4 times,  and  for  each  of
-     those  cases other than 0, the + repeats can match different
-     numbers of times.) When the remainder of the pattern is such
-     that  the entire match is going to fail, PCRE has in princi-
-     ple to try every possible variation, and this  can  take  an
-     extremely long time.
-
-     An optimization catches some of the more simple  cases  such
-     as
-
-       (a+)*b
-
-     where a literal character follows. Before embarking  on  the
-     standard matching procedure, PCRE checks that there is a "b"
-     later in the subject string, and if there is not,  it  fails
-     the  match  immediately. However, when there is no following
-     literal this optimization cannot be used. You  can  see  the
-     difference by comparing the behaviour of
-
-       (a+)*\d
-
-     with the pattern above. The former gives  a  failure  almost
-     instantly  when  applied  to a whole line of "a" characters,
-     whereas the latter takes an appreciable  time  with  strings
-     longer than about 20 characters.
-
-
-
-AUTHOR
-     Philip Hazel <ph10@cam.ac.uk>
-     University Computing Service,
-     New Museums Site,
-     Cambridge CB2 3QG, England.
-     Phone: +44 1223 334714
-
-     Last updated: 27 January 2000
-     Copyright (c) 1997-2000 University of Cambridge.
diff --git a/srclib/pcre/doc/pcreposix.3 b/srclib/pcre/doc/pcreposix.3
deleted file mode 100644
index 1be5d9a..0000000
--- a/srclib/pcre/doc/pcreposix.3
+++ /dev/null
@@ -1,141 +0,0 @@
-.TH PCRE 3
-.SH NAME
-pcreposix - POSIX API for Perl-compatible regular expressions.
-.SH SYNOPSIS
-.B #include <pcreposix.h>
-.PP
-.SM
-.br
-.B int regcomp(regex_t *\fIpreg\fR, const char *\fIpattern\fR,
-.ti +5n
-.B int \fIcflags\fR);
-.PP
-.br
-.B int regexec(regex_t *\fIpreg\fR, const char *\fIstring\fR,
-.ti +5n
-.B size_t \fInmatch\fR, regmatch_t \fIpmatch\fR[], int \fIeflags\fR);
-.PP
-.br
-.B size_t regerror(int \fIerrcode\fR, const regex_t *\fIpreg\fR,
-.ti +5n
-.B char *\fIerrbuf\fR, size_t \fIerrbuf_size\fR);
-.PP
-.br
-.B void regfree(regex_t *\fIpreg\fR);
-
-
-.SH DESCRIPTION
-This set of functions provides a POSIX-style API to the PCRE regular expression
-package. See the \fBpcre\fR documentation for a description of the native API,
-which contains additional functionality.
-
-The functions described here are just wrapper functions that ultimately call
-the native API. Their prototypes are defined in the \fBpcreposix.h\fR header
-file, and on Unix systems the library itself is called \fBpcreposix.a\fR, so
-can be accessed by adding \fB-lpcreposix\fR to the command for linking an
-application which uses them. Because the POSIX functions call the native ones,
-it is also necessary to add \fR-lpcre\fR.
-
-I have implemented only those option bits that can be reasonably mapped to PCRE
-native options. In addition, the options REG_EXTENDED and REG_NOSUB are defined
-with the value zero. They have no effect, but since programs that are written
-to the POSIX interface often use them, this makes it easier to slot in PCRE as
-a replacement library. Other POSIX options are not even defined.
-
-When PCRE is called via these functions, it is only the API that is POSIX-like
-in style. The syntax and semantics of the regular expressions themselves are
-still those of Perl, subject to the setting of various PCRE options, as
-described below.
-
-The header for these functions is supplied as \fBpcreposix.h\fR to avoid any
-potential clash with other POSIX libraries. It can, of course, be renamed or
-aliased as \fBregex.h\fR, which is the "correct" name. It provides two
-structure types, \fIregex_t\fR for compiled internal forms, and
-\fIregmatch_t\fR for returning captured substrings. It also defines some
-constants whose names start with "REG_"; these are used for setting options and
-identifying error codes.
-
-
-.SH COMPILING A PATTERN
-
-The function \fBregcomp()\fR is called to compile a pattern into an
-internal form. The pattern is a C string terminated by a binary zero, and
-is passed in the argument \fIpattern\fR. The \fIpreg\fR argument is a pointer
-to a regex_t structure which is used as a base for storing information about
-the compiled expression.
-
-The argument \fIcflags\fR is either zero, or contains one or more of the bits
-defined by the following macros:
-
-  REG_ICASE
-
-The PCRE_CASELESS option is set when the expression is passed for compilation
-to the native function.
-
-  REG_NEWLINE
-
-The PCRE_MULTILINE option is set when the expression is passed for compilation
-to the native function.
-
-The yield of \fBregcomp()\fR is zero on success, and non-zero otherwise. The
-\fIpreg\fR structure is filled in on success, and one member of the structure
-is publicized: \fIre_nsub\fR contains the number of capturing subpatterns in
-the regular expression. Various error codes are defined in the header file.
-
-
-.SH MATCHING A PATTERN
-The function \fBregexec()\fR is called to match a pre-compiled pattern
-\fIpreg\fR against a given \fIstring\fR, which is terminated by a zero byte,
-subject to the options in \fIeflags\fR. These can be:
-
-  REG_NOTBOL
-
-The PCRE_NOTBOL option is set when calling the underlying PCRE matching
-function.
-
-  REG_NOTEOL
-
-The PCRE_NOTEOL option is set when calling the underlying PCRE matching
-function.
-
-The portion of the string that was matched, and also any captured substrings,
-are returned via the \fIpmatch\fR argument, which points to an array of
-\fInmatch\fR structures of type \fIregmatch_t\fR, containing the members
-\fIrm_so\fR and \fIrm_eo\fR. These contain the offset to the first character of
-each substring and the offset to the first character after the end of each
-substring, respectively. The 0th element of the vector relates to the entire
-portion of \fIstring\fR that was matched; subsequent elements relate to the
-capturing subpatterns of the regular expression. Unused entries in the array
-have both structure members set to -1.
-
-A successful match yields a zero return; various error codes are defined in the
-header file, of which REG_NOMATCH is the "expected" failure code.
-
-
-.SH ERROR MESSAGES
-The \fBregerror()\fR function maps a non-zero errorcode from either
-\fBregcomp\fR or \fBregexec\fR to a printable message. If \fIpreg\fR is not
-NULL, the error should have arisen from the use of that structure. A message
-terminated by a binary zero is placed in \fIerrbuf\fR. The length of the
-message, including the zero, is limited to \fIerrbuf_size\fR. The yield of the
-function is the size of buffer needed to hold the whole message.
-
-
-.SH STORAGE
-Compiling a regular expression causes memory to be allocated and associated
-with the \fIpreg\fR structure. The function \fBregfree()\fR frees all such
-memory, after which \fIpreg\fR may no longer be used as a compiled expression.
-
-
-.SH AUTHOR
-Philip Hazel <ph10@cam.ac.uk>
-.br
-University Computing Service,
-.br
-New Museums Site,
-.br
-Cambridge CB2 3QG, England.
-.br
-Phone: +44 1223 334714
-
-Copyright (c) 1997-1999 University of Cambridge.
diff --git a/srclib/pcre/doc/pcreposix.html b/srclib/pcre/doc/pcreposix.html
deleted file mode 100644
index 121d90f..0000000
--- a/srclib/pcre/doc/pcreposix.html
+++ /dev/null
@@ -1,182 +0,0 @@
-<HTML>
-<HEAD>
-<TITLE>pcreposix specification</TITLE>
-</HEAD>
-<body bgcolor="#FFFFFF" text="#00005A">
-<H1>pcreposix specification</H1>
-This HTML document has been generated automatically from the original man page.
-If there is any nonsense in it, please consult the man page in case the
-conversion went wrong.
-<UL>
-<LI><A NAME="TOC1" HREF="#SEC1">NAME</A>
-<LI><A NAME="TOC2" HREF="#SEC2">SYNOPSIS</A>
-<LI><A NAME="TOC3" HREF="#SEC3">DESCRIPTION</A>
-<LI><A NAME="TOC4" HREF="#SEC4">COMPILING A PATTERN</A>
-<LI><A NAME="TOC5" HREF="#SEC5">MATCHING A PATTERN</A>
-<LI><A NAME="TOC6" HREF="#SEC6">ERROR MESSAGES</A>
-<LI><A NAME="TOC7" HREF="#SEC7">STORAGE</A>
-<LI><A NAME="TOC8" HREF="#SEC8">AUTHOR</A>
-</UL>
-<LI><A NAME="SEC1" HREF="#TOC1">NAME</A>
-<P>
-pcreposix - POSIX API for Perl-compatible regular expressions.
-</P>
-<LI><A NAME="SEC2" HREF="#TOC1">SYNOPSIS</A>
-<P>
-<B>#include &#60;pcreposix.h&#62;</B>
-</P>
-<P>
-<B>int regcomp(regex_t *<I>preg</I>, const char *<I>pattern</I>,</B>
-<B>int <I>cflags</I>);</B>
-</P>
-<P>
-<B>int regexec(regex_t *<I>preg</I>, const char *<I>string</I>,</B>
-<B>size_t <I>nmatch</I>, regmatch_t <I>pmatch</I>[], int <I>eflags</I>);</B>
-</P>
-<P>
-<B>size_t regerror(int <I>errcode</I>, const regex_t *<I>preg</I>,</B>
-<B>char *<I>errbuf</I>, size_t <I>errbuf_size</I>);</B>
-</P>
-<P>
-<B>void regfree(regex_t *<I>preg</I>);</B>
-</P>
-<LI><A NAME="SEC3" HREF="#TOC1">DESCRIPTION</A>
-<P>
-This set of functions provides a POSIX-style API to the PCRE regular expression
-package. See the <B>pcre</B> documentation for a description of the native API,
-which contains additional functionality.
-</P>
-<P>
-The functions described here are just wrapper functions that ultimately call
-the native API. Their prototypes are defined in the <B>pcreposix.h</B> header
-file, and on Unix systems the library itself is called <B>pcreposix.a</B>, so
-can be accessed by adding <B>-lpcreposix</B> to the command for linking an
-application which uses them. Because the POSIX functions call the native ones,
-it is also necessary to add \fR-lpcre\fR.
-</P>
-<P>
-I have implemented only those option bits that can be reasonably mapped to PCRE
-native options. In addition, the options REG_EXTENDED and REG_NOSUB are defined
-with the value zero. They have no effect, but since programs that are written
-to the POSIX interface often use them, this makes it easier to slot in PCRE as
-a replacement library. Other POSIX options are not even defined.
-</P>
-<P>
-When PCRE is called via these functions, it is only the API that is POSIX-like
-in style. The syntax and semantics of the regular expressions themselves are
-still those of Perl, subject to the setting of various PCRE options, as
-described below.
-</P>
-<P>
-The header for these functions is supplied as <B>pcreposix.h</B> to avoid any
-potential clash with other POSIX libraries. It can, of course, be renamed or
-aliased as <B>regex.h</B>, which is the "correct" name. It provides two
-structure types, <I>regex_t</I> for compiled internal forms, and
-<I>regmatch_t</I> for returning captured substrings. It also defines some
-constants whose names start with "REG_"; these are used for setting options and
-identifying error codes.
-</P>
-<LI><A NAME="SEC4" HREF="#TOC1">COMPILING A PATTERN</A>
-<P>
-The function <B>regcomp()</B> is called to compile a pattern into an
-internal form. The pattern is a C string terminated by a binary zero, and
-is passed in the argument <I>pattern</I>. The <I>preg</I> argument is a pointer
-to a regex_t structure which is used as a base for storing information about
-the compiled expression.
-</P>
-<P>
-The argument <I>cflags</I> is either zero, or contains one or more of the bits
-defined by the following macros:
-</P>
-<P>
-<PRE>
-  REG_ICASE
-</PRE>
-</P>
-<P>
-The PCRE_CASELESS option is set when the expression is passed for compilation
-to the native function.
-</P>
-<P>
-<PRE>
-  REG_NEWLINE
-</PRE>
-</P>
-<P>
-The PCRE_MULTILINE option is set when the expression is passed for compilation
-to the native function.
-</P>
-<P>
-The yield of <B>regcomp()</B> is zero on success, and non-zero otherwise. The
-<I>preg</I> structure is filled in on success, and one member of the structure
-is publicized: <I>re_nsub</I> contains the number of capturing subpatterns in
-the regular expression. Various error codes are defined in the header file.
-</P>
-<LI><A NAME="SEC5" HREF="#TOC1">MATCHING A PATTERN</A>
-<P>
-The function <B>regexec()</B> is called to match a pre-compiled pattern
-<I>preg</I> against a given <I>string</I>, which is terminated by a zero byte,
-subject to the options in <I>eflags</I>. These can be:
-</P>
-<P>
-<PRE>
-  REG_NOTBOL
-</PRE>
-</P>
-<P>
-The PCRE_NOTBOL option is set when calling the underlying PCRE matching
-function.
-</P>
-<P>
-<PRE>
-  REG_NOTEOL
-</PRE>
-</P>
-<P>
-The PCRE_NOTEOL option is set when calling the underlying PCRE matching
-function.
-</P>
-<P>
-The portion of the string that was matched, and also any captured substrings,
-are returned via the <I>pmatch</I> argument, which points to an array of
-<I>nmatch</I> structures of type <I>regmatch_t</I>, containing the members
-<I>rm_so</I> and <I>rm_eo</I>. These contain the offset to the first character of
-each substring and the offset to the first character after the end of each
-substring, respectively. The 0th element of the vector relates to the entire
-portion of <I>string</I> that was matched; subsequent elements relate to the
-capturing subpatterns of the regular expression. Unused entries in the array
-have both structure members set to -1.
-</P>
-<P>
-A successful match yields a zero return; various error codes are defined in the
-header file, of which REG_NOMATCH is the "expected" failure code.
-</P>
-<LI><A NAME="SEC6" HREF="#TOC1">ERROR MESSAGES</A>
-<P>
-The <B>regerror()</B> function maps a non-zero errorcode from either
-<B>regcomp</B> or <B>regexec</B> to a printable message. If <I>preg</I> is not
-NULL, the error should have arisen from the use of that structure. A message
-terminated by a binary zero is placed in <I>errbuf</I>. The length of the
-message, including the zero, is limited to <I>errbuf_size</I>. The yield of the
-function is the size of buffer needed to hold the whole message.
-</P>
-<LI><A NAME="SEC7" HREF="#TOC1">STORAGE</A>
-<P>
-Compiling a regular expression causes memory to be allocated and associated
-with the <I>preg</I> structure. The function <B>regfree()</B> frees all such
-memory, after which <I>preg</I> may no longer be used as a compiled expression.
-</P>
-<LI><A NAME="SEC8" HREF="#TOC1">AUTHOR</A>
-<P>
-Philip Hazel &#60;ph10@cam.ac.uk&#62;
-<BR>
-University Computing Service,
-<BR>
-New Museums Site,
-<BR>
-Cambridge CB2 3QG, England.
-<BR>
-Phone: +44 1223 334714
-</P>
-<P>
-Copyright (c) 1997-1999 University of Cambridge.
diff --git a/srclib/pcre/doc/pcreposix.txt b/srclib/pcre/doc/pcreposix.txt
deleted file mode 100644
index 4a7036f..0000000
--- a/srclib/pcre/doc/pcreposix.txt
+++ /dev/null
@@ -1,150 +0,0 @@
-NAME
-     pcreposix - POSIX API for  Perl-compatible  regular  expres-
-     sions.
-
-
-
-SYNOPSIS
-     #include <pcreposix.h>
-
-     int regcomp(regex_t *preg, const char *pattern,
-          int cflags);
-
-     int regexec(regex_t *preg, const char *string,
-          size_t nmatch, regmatch_t pmatch[], int eflags);
-
-     size_t regerror(int errcode, const regex_t *preg,
-          char *errbuf, size_t errbuf_size);
-
-     void regfree(regex_t *preg);
-
-
-
-DESCRIPTION
-     This set of functions provides a POSIX-style API to the PCRE
-     regular expression package. See the pcre documentation for a
-     description of the native  API,  which  contains  additional
-     functionality.
-
-     The functions described here are just wrapper functions that
-     ultimately call the native API. Their prototypes are defined
-     in the pcreposix.h header file,  and  on  Unix  systems  the
-     library  itself is called pcreposix.a, so can be accessed by
-     adding -lpcreposix to the command for linking an application
-     which uses them. Because the POSIX functions call the native
-     ones, it is also necessary to add -lpcre.
-
-     I have implemented only those option bits that can  be  rea-
-     sonably  mapped  to  PCRE  native  options. In addition, the
-     options REG_EXTENDED and  REG_NOSUB  are  defined  with  the
-     value zero. They have no effect, but since programs that are
-     written to the POSIX interface often use them, this makes it
-     easier to slot in PCRE as a replacement library. Other POSIX
-     options are not even defined.
-
-     When PCRE is called via these functions, it is only the  API
-     that is POSIX-like in style. The syntax and semantics of the
-     regular expressions themselves are still those of Perl, sub-
-     ject  to  the  setting of various PCRE options, as described
-     below.
-
-     The header for these functions is supplied as pcreposix.h to
-     avoid  any  potential  clash  with other POSIX libraries. It
-     can, of course, be renamed or aliased as regex.h,  which  is
-     the "correct" name. It provides two structure types, regex_t
-     for compiled internal forms, and  regmatch_t  for  returning
-     captured  substrings.  It  also defines some constants whose
-     names start with "REG_"; these are used for setting  options
-     and identifying error codes.
-
-
-
-COMPILING A PATTERN
-     The function regcomp() is called to compile a  pattern  into
-     an  internal form. The pattern is a C string terminated by a
-     binary zero, and is passed in the argument pattern. The preg
-     argument  is  a pointer to a regex_t structure which is used
-     as a base for storing information about the compiled expres-
-     sion.
-
-     The argument cflags is either zero, or contains one or  more
-     of the bits defined by the following macros:
-
-       REG_ICASE
-
-     The PCRE_CASELESS option  is  set  when  the  expression  is
-     passed for compilation to the native function.
-
-       REG_NEWLINE
-
-     The PCRE_MULTILINE option is  set  when  the  expression  is
-     passed for compilation to the native function.
-
-     The yield of regcomp() is zero on success, and non-zero oth-
-     erwise.  The preg structure is filled in on success, and one
-     member of the structure is publicized: re_nsub contains  the
-     number  of  capturing subpatterns in the regular expression.
-     Various error codes are defined in the header file.
-
-
-
-MATCHING A PATTERN
-     The function regexec() is called  to  match  a  pre-compiled
-     pattern  preg against a given string, which is terminated by
-     a zero byte, subject to the options in eflags. These can be:
-
-       REG_NOTBOL
-
-     The PCRE_NOTBOL option is set when  calling  the  underlying
-     PCRE matching function.
-
-       REG_NOTEOL
-
-     The PCRE_NOTEOL option is set when  calling  the  underlying
-     PCRE matching function.
-
-     The portion of the string that was  matched,  and  also  any
-     captured  substrings,  are returned via the pmatch argument,
-     which points to  an  array  of  nmatch  structures  of  type
-     regmatch_t,  containing  the  members rm_so and rm_eo. These
-     contain the offset to the first character of each  substring
-     and  the offset to the first character after the end of each
-     substring, respectively.  The  0th  element  of  the  vector
-     relates  to  the  entire portion of string that was matched;
-     subsequent elements relate to the capturing  subpatterns  of
-     the  regular  expression.  Unused  entries in the array have
-     both structure members set to -1.
-
-     A successful match yields a zero return; various error codes
-     are  defined in the header file, of which REG_NOMATCH is the
-     "expected" failure code.
-
-
-
-ERROR MESSAGES
-     The regerror()  function  maps  a  non-zero  errorcode  from
-     either regcomp or regexec to a printable message. If preg is
-     not NULL, the error should have arisen from the use of  that
-     structure.  A  message terminated by a binary zero is placed
-     in errbuf. The length of the message, including the zero, is
-     limited  to  errbuf_size.  The  yield of the function is the
-     size of buffer needed to hold the whole message.
-
-
-
-STORAGE
-     Compiling a regular expression causes memory to be allocated
-     and  associated  with  the preg structure. The function reg-
-     free() frees all such memory, after which preg may no longer
-     be used as a compiled expression.
-
-
-
-AUTHOR
-     Philip Hazel <ph10@cam.ac.uk>
-     University Computing Service,
-     New Museums Site,
-     Cambridge CB2 3QG, England.
-     Phone: +44 1223 334714
-
-     Copyright (c) 1997-1999 University of Cambridge.
diff --git a/srclib/pcre/doc/pcretest.txt b/srclib/pcre/doc/pcretest.txt
deleted file mode 100644
index 0e6783a..0000000
--- a/srclib/pcre/doc/pcretest.txt
+++ /dev/null
@@ -1,217 +0,0 @@
-The pcretest program
---------------------
-
-This program is intended for testing PCRE, but it can also be used for
-experimenting with regular expressions.
-
-If it is given two filename arguments, it reads from the first and writes to
-the second. If it is given only one filename argument, it reads from that file
-and writes to stdout. Otherwise, it reads from stdin and writes to stdout, and
-prompts for each line of input, using "re>" to prompt for regular expressions,
-and "data>" to prompt for data lines.
-
-The program handles any number of sets of input on a single input file. Each
-set starts with a regular expression, and continues with any number of data
-lines to be matched against the pattern. An empty line signals the end of the
-data lines, at which point a new regular expression is read. The regular
-expressions are given enclosed in any non-alphameric delimiters other than
-backslash, for example
-
-  /(a|bc)x+yz/
-
-White space before the initial delimiter is ignored. A regular expression may
-be continued over several input lines, in which case the newline characters are
-included within it. See the test input files in the testdata directory for many
-examples. It is possible to include the delimiter within the pattern by
-escaping it, for example
-
-  /abc\/def/
-
-If you do so, the escape and the delimiter form part of the pattern, but since
-delimiters are always non-alphameric, this does not affect its interpretation.
-If the terminating delimiter is immediately followed by a backslash, for
-example,
-
-  /abc/\
-
-then a backslash is added to the end of the pattern. This is done to provide a
-way of testing the error condition that arises if a pattern finishes with a
-backslash, because
-
-  /abc\/
-
-is interpreted as the first line of a pattern that starts with "abc/", causing
-pcretest to read the next line as a continuation of the regular expression.
-
-The pattern may be followed by i, m, s, or x to set the PCRE_CASELESS,
-PCRE_MULTILINE, PCRE_DOTALL, or PCRE_EXTENDED options, respectively. For
-example:
-
-  /caseless/i
-
-These modifier letters have the same effect as they do in Perl. There are
-others which set PCRE options that do not correspond to anything in Perl: /A,
-/E, and /X set PCRE_ANCHORED, PCRE_DOLLAR_ENDONLY, and PCRE_EXTRA respectively.
-
-Searching for all possible matches within each subject string can be requested
-by the /g or /G modifier. After finding a match, PCRE is called again to search
-the remainder of the subject string. The difference between /g and /G is that
-the former uses the startoffset argument to pcre_exec() to start searching at
-a new point within the entire string (which is in effect what Perl does),
-whereas the latter passes over a shortened substring. This makes a difference
-to the matching process if the pattern begins with a lookbehind assertion
-(including \b or \B).
-
-If any call to pcre_exec() in a /g or /G sequence matches an empty string, the
-next call is done with the PCRE_NOTEMPTY and PCRE_ANCHORED flags set in order
-to search for another, non-empty, match at the same point. If this second match
-fails, the start offset is advanced by one, and the normal match is retried.
-This imitates the way Perl handles such cases when using the /g modifier or the
-split() function.
-
-There are a number of other modifiers for controlling the way pcretest
-operates.
-
-The /+ modifier requests that as well as outputting the substring that matched
-the entire pattern, pcretest should in addition output the remainder of the
-subject string. This is useful for tests where the subject contains multiple
-copies of the same substring.
-
-The /L modifier must be followed directly by the name of a locale, for example,
-
-  /pattern/Lfr
-
-For this reason, it must be the last modifier letter. The given locale is set,
-pcre_maketables() is called to build a set of character tables for the locale,
-and this is then passed to pcre_compile() when compiling the regular
-expression. Without an /L modifier, NULL is passed as the tables pointer; that
-is, /L applies only to the expression on which it appears.
-
-The /I modifier requests that pcretest output information about the compiled
-expression (whether it is anchored, has a fixed first character, and so on). It
-does this by calling pcre_fullinfo() after compiling an expression, and
-outputting the information it gets back. If the pattern is studied, the results
-of that are also output.
-
-The /D modifier is a PCRE debugging feature, which also assumes /I. It causes
-the internal form of compiled regular expressions to be output after
-compilation.
-
-The /S modifier causes pcre_study() to be called after the expression has been
-compiled, and the results used when the expression is matched.
-
-The /M modifier causes the size of memory block used to hold the compiled
-pattern to be output.
-
-Finally, the /P modifier causes pcretest to call PCRE via the POSIX wrapper API
-rather than its native API. When this is done, all other modifiers except /i,
-/m, and /+ are ignored. REG_ICASE is set if /i is present, and REG_NEWLINE is
-set if /m is present. The wrapper functions force PCRE_DOLLAR_ENDONLY always,
-and PCRE_DOTALL unless REG_NEWLINE is set.
-
-Before each data line is passed to pcre_exec(), leading and trailing whitespace
-is removed, and it is then scanned for \ escapes. The following are recognized:
-
-  \a     alarm (= BEL)
-  \b     backspace
-  \e     escape
-  \f     formfeed
-  \n     newline
-  \r     carriage return
-  \t     tab
-  \v     vertical tab
-  \nnn   octal character (up to 3 octal digits)
-  \xhh   hexadecimal character (up to 2 hex digits)
-
-  \A     pass the PCRE_ANCHORED option to pcre_exec()
-  \B     pass the PCRE_NOTBOL option to pcre_exec()
-  \Cdd   call pcre_copy_substring() for substring dd after a successful match
-           (any decimal number less than 32)
-  \Gdd   call pcre_get_substring() for substring dd after a successful match
-           (any decimal number less than 32)
-  \L     call pcre_get_substringlist() after a successful match
-  \N     pass the PCRE_NOTEMPTY option to pcre_exec()
-  \Odd   set the size of the output vector passed to pcre_exec() to dd
-           (any number of decimal digits)
-  \Z     pass the PCRE_NOTEOL option to pcre_exec()
-
-A backslash followed by anything else just escapes the anything else. If the
-very last character is a backslash, it is ignored. This gives a way of passing
-an empty line as data, since a real empty line terminates the data input.
-
-If /P was present on the regex, causing the POSIX wrapper API to be used, only
-\B, and \Z have any effect, causing REG_NOTBOL and REG_NOTEOL to be passed to
-regexec() respectively.
-
-When a match succeeds, pcretest outputs the list of captured substrings that
-pcre_exec() returns, starting with number 0 for the string that matched the
-whole pattern. Here is an example of an interactive pcretest run.
-
-  $ pcretest
-  PCRE version 2.06 08-Jun-1999
-
-    re> /^abc(\d+)/
-  data> abc123
-   0: abc123
-   1: 123
-  data> xyz
-  No match
-
-If the strings contain any non-printing characters, they are output as \0x
-escapes. If the pattern has the /+ modifier, then the output for substring 0 is
-followed by the the rest of the subject string, identified by "0+" like this:
-
-    re> /cat/+
-  data> cataract
-   0: cat
-   0+ aract
-
-If the pattern has the /g or /G modifier, the results of successive matching
-attempts are output in sequence, like this:
-
-    re> /\Bi(\w\w)/g
-  data> Mississippi
-   0: iss
-   1: ss
-   0: iss
-   1: ss
-   0: ipp
-   1: pp
-
-"No match" is output only if the first match attempt fails.
-
-If any of \C, \G, or \L are present in a data line that is successfully
-matched, the substrings extracted by the convenience functions are output with
-C, G, or L after the string number instead of a colon. This is in addition to
-the normal full list. The string length (that is, the return from the
-extraction function) is given in parentheses after each string for \C and \G.
-
-Note that while patterns can be continued over several lines (a plain ">"
-prompt is used for continuations), data lines may not. However newlines can be
-included in data by means of the \n escape.
-
-If the -p option is given to pcretest, it is equivalent to adding /P to each
-regular expression: the POSIX wrapper API is used to call PCRE. None of the
-following flags has any effect in this case.
-
-If the option -d is given to pcretest, it is equivalent to adding /D to each
-regular expression: the internal form is output after compilation.
-
-If the option -i is given to pcretest, it is equivalent to adding /I to each
-regular expression: information about the compiled pattern is given after
-compilation.
-
-If the option -m is given to pcretest, it outputs the size of each compiled
-pattern after it has been compiled. It is equivalent to adding /M to each
-regular expression. For compatibility with earlier versions of pcretest, -s is
-a synonym for -m.
-
-If the -t option is given, each compile, study, and match is run 20000 times
-while being timed, and the resulting time per compile or match is output in
-milliseconds. Do not set -t with -s, because you will then get the size output
-20000 times and the timing will be distorted. If you want to change the number
-of repetitions used for timing, edit the definition of LOOPREPEAT at the top of
-pcretest.c
-
-Philip Hazel <ph10@cam.ac.uk>
-January 2000
diff --git a/srclib/pcre/doc/perltest.txt b/srclib/pcre/doc/perltest.txt
deleted file mode 100644
index 6c38ebe..0000000
--- a/srclib/pcre/doc/perltest.txt
+++ /dev/null
@@ -1,23 +0,0 @@
-The perltest program
---------------------
-
-The perltest program tests Perl's regular expressions; it has the same
-specification as pcretest, and so can be given identical input, except that
-input patterns can be followed only by Perl's lower case modifiers and /+ (as
-used by pcretest), which is recognized and handled by the program.
-
-The data lines are processed as Perl double-quoted strings, so if they contain
-" \ $ or @ characters, these have to be escaped. For this reason, all such
-characters in testinput1 and testinput3 are escaped so that they can be used
-for perltest as well as for pcretest, and the special upper case modifiers such
-as /A that pcretest recognizes are not used in these files. The output should
-be identical, apart from the initial identifying banner.
-
-The testinput2 and testinput4 files are not suitable for feeding to perltest,
-since they do make use of the special upper case modifiers and escapes that
-pcretest uses to test some features of PCRE. The first of these files also
-contains malformed regular expressions, in order to check that PCRE diagnoses
-them correctly.
-
-Philip Hazel <ph10@cam.ac.uk>
-January 2000
diff --git a/srclib/pcre/doc/pgrep.1 b/srclib/pcre/doc/pgrep.1
deleted file mode 100644
index d9e9b57..0000000
--- a/srclib/pcre/doc/pgrep.1
+++ /dev/null
@@ -1,76 +0,0 @@
-.TH PGREP 1
-.SH NAME
-pgrep - a grep with Perl-compatible regular expressions.
-.SH SYNOPSIS
-.B pgrep [-Vchilnsvx] pattern [file] ...
-
-
-.SH DESCRIPTION
-\fBpgrep\fR searches files for character patterns, in the same way as other
-grep commands do, but it uses the PCRE regular expression library to support
-patterns that are compatible with the regular expressions of Perl 5. See
-\fBpcre(3)\fR for a full description of syntax and semantics.
-
-If no files are specified, \fBpgrep\fR reads the standard input. By default,
-each line that matches the pattern is copied to the standard output, and if
-there is more than one file, the file name is printed before each line of
-output. However, there are options that can change how \fBpgrep\fR behaves.
-
-Lines are limited to BUFSIZ characters. BUFSIZ is defined in \fB<stdio.h>\fR.
-The newline character is removed from the end of each line before it is matched
-against the pattern.
-
-
-.SH OPTIONS
-.TP 10
-\fB-V\fR
-Write the version number of the PCRE library being used to the standard error
-stream.
-.TP
-\fB-c\fR
-Do not print individual lines; instead just print a count of the number of
-lines that would otherwise have been printed. If several files are given, a
-count is printed for each of them.
-.TP
-\fB-h\fR
-Suppress printing of filenames when searching multiple files.
-.TP
-\fB-i\fR
-Ignore upper/lower case distinctions during comparisons.
-.TP
-\fB-l\fR
-Instead of printing lines from the files, just print the names of the files
-containing lines that would have been printed. Each file name is printed
-once, on a separate line.
-.TP
-\fB-n\fR
-Precede each line by its line number in the file.
-.TP
-\fB-s\fR
-Work silently, that is, display nothing except error messages.
-The exit status indicates whether any matches were found.
-.TP
-\fB-v\fR
-Invert the sense of the match, so that lines which do \fInot\fR match the
-pattern are now the ones that are found.
-.TP
-\fB-x\fR
-Force the pattern to be anchored (it must start matching at the beginning of
-the line) and in addition, require it to match the entire line. This is
-equivalent to having ^ and $ characters at the start and end of each
-alternative branch in the regular expression.
-
-
-.SH SEE ALSO
-\fBpcre(3)\fR, Perl 5 documentation
-
-
-.SH DIAGNOSTICS
-Exit status is 0 if any matches were found, 1 if no matches were found, and 2
-for syntax errors or inacessible files (even if matches were found).
-
-
-.SH AUTHOR
-Philip Hazel <ph10@cam.ac.uk>
-.br
-Copyright (c) 1997-1999 University of Cambridge.
diff --git a/srclib/pcre/doc/pgrep.html b/srclib/pcre/doc/pgrep.html
deleted file mode 100644
index 54efed6..0000000
--- a/srclib/pcre/doc/pgrep.html
+++ /dev/null
@@ -1,105 +0,0 @@
-<HTML>
-<HEAD>
-<TITLE>pgrep specification</TITLE>
-</HEAD>
-<body bgcolor="#FFFFFF" text="#00005A">
-<H1>pgrep specification</H1>
-This HTML document has been generated automatically from the original man page.
-If there is any nonsense in it, please consult the man page in case the
-conversion went wrong.
-<UL>
-<LI><A NAME="TOC1" HREF="#SEC1">NAME</A>
-<LI><A NAME="TOC2" HREF="#SEC2">SYNOPSIS</A>
-<LI><A NAME="TOC3" HREF="#SEC3">DESCRIPTION</A>
-<LI><A NAME="TOC4" HREF="#SEC4">OPTIONS</A>
-<LI><A NAME="TOC5" HREF="#SEC5">SEE ALSO</A>
-<LI><A NAME="TOC6" HREF="#SEC6">DIAGNOSTICS</A>
-<LI><A NAME="TOC7" HREF="#SEC7">AUTHOR</A>
-</UL>
-<LI><A NAME="SEC1" HREF="#TOC1">NAME</A>
-<P>
-pgrep - a grep with Perl-compatible regular expressions.
-</P>
-<LI><A NAME="SEC2" HREF="#TOC1">SYNOPSIS</A>
-<P>
-<B>pgrep [-Vchilnsvx] pattern [file] ...</B>
-</P>
-<LI><A NAME="SEC3" HREF="#TOC1">DESCRIPTION</A>
-<P>
-<B>pgrep</B> searches files for character patterns, in the same way as other
-grep commands do, but it uses the PCRE regular expression library to support
-patterns that are compatible with the regular expressions of Perl 5. See
-<B>pcre(3)</B> for a full description of syntax and semantics.
-</P>
-<P>
-If no files are specified, <B>pgrep</B> reads the standard input. By default,
-each line that matches the pattern is copied to the standard output, and if
-there is more than one file, the file name is printed before each line of
-output. However, there are options that can change how <B>pgrep</B> behaves.
-</P>
-<P>
-Lines are limited to BUFSIZ characters. BUFSIZ is defined in <B>&#60;stdio.h&#62;</B>.
-The newline character is removed from the end of each line before it is matched
-against the pattern.
-</P>
-<LI><A NAME="SEC4" HREF="#TOC1">OPTIONS</A>
-<P>
-<B>-V</B>
-Write the version number of the PCRE library being used to the standard error
-stream.
-</P>
-<P>
-<B>-c</B>
-Do not print individual lines; instead just print a count of the number of
-lines that would otherwise have been printed. If several files are given, a
-count is printed for each of them.
-</P>
-<P>
-<B>-h</B>
-Suppress printing of filenames when searching multiple files.
-</P>
-<P>
-<B>-i</B>
-Ignore upper/lower case distinctions during comparisons.
-</P>
-<P>
-<B>-l</B>
-Instead of printing lines from the files, just print the names of the files
-containing lines that would have been printed. Each file name is printed
-once, on a separate line.
-</P>
-<P>
-<B>-n</B>
-Precede each line by its line number in the file.
-</P>
-<P>
-<B>-s</B>
-Work silently, that is, display nothing except error messages.
-The exit status indicates whether any matches were found.
-</P>
-<P>
-<B>-v</B>
-Invert the sense of the match, so that lines which do <I>not</I> match the
-pattern are now the ones that are found.
-</P>
-<P>
-<B>-x</B>
-Force the pattern to be anchored (it must start matching at the beginning of
-the line) and in addition, require it to match the entire line. This is
-equivalent to having ^ and $ characters at the start and end of each
-alternative branch in the regular expression.
-</P>
-<LI><A NAME="SEC5" HREF="#TOC1">SEE ALSO</A>
-<P>
-<B>pcre(3)</B>, Perl 5 documentation
-</P>
-<LI><A NAME="SEC6" HREF="#TOC1">DIAGNOSTICS</A>
-<P>
-Exit status is 0 if any matches were found, 1 if no matches were found, and 2
-for syntax errors or inacessible files (even if matches were found).
-</P>
-<LI><A NAME="SEC7" HREF="#TOC1">AUTHOR</A>
-<P>
-Philip Hazel &#60;ph10@cam.ac.uk&#62;
-<BR>
-Copyright (c) 1997-1999 University of Cambridge.
diff --git a/srclib/pcre/doc/pgrep.txt b/srclib/pcre/doc/pgrep.txt
deleted file mode 100644
index bcd08c0..0000000
--- a/srclib/pcre/doc/pgrep.txt
+++ /dev/null
@@ -1,86 +0,0 @@
-NAME
-     pgrep - a grep with Perl-compatible regular expressions.
-
-
-
-SYNOPSIS
-     pgrep [-Vchilnsvx] pattern [file] ...
-
-
-
-DESCRIPTION
-     pgrep searches files for character patterns, in the same way
-     as  other  grep  commands  do,  but it uses the PCRE regular
-     expression library to support patterns that  are  compatible
-     with  the  regular  expressions of Perl 5. See pcre(3) for a
-     full description of syntax and semantics.
-
-     If no files are specified, pgrep reads the  standard  input.
-     By  default, each line that matches the pattern is copied to
-     the standard output, and if there is more than one file, the
-     file  name  is  printed before each line of output. However,
-     there are options that can change how pgrep behaves.
-
-     Lines are limited to BUFSIZ characters. BUFSIZ is defined in
-     <stdio.h>.  The newline character is removed from the end of
-     each line before it is matched against the pattern.
-
-
-
-OPTIONS
-     -V        Write the version number of the PCRE library being
-               used to the standard error stream.
-
-     -c        Do not print individual lines; instead just  print
-               a  count  of the number of lines that would other-
-               wise have  been  printed.  If  several  files  are
-               given, a count is printed for each of them.
-
-     -h        Suppress printing of filenames when searching mul-
-               tiple files.
-
-     -i        Ignore upper/lower case distinctions  during  com-
-               parisons.
-
-     -l        Instead of printing lines  from  the  files,  just
-               print the names of the files containing lines that
-               would have been printed. Each file name is printed
-               once, on a separate line.
-
-     -n        Precede each line by its line number in the file.
-
-     -s        Work silently, that  is,  display  nothing  except
-               error messages.  The exit status indicates whether
-               any matches were found.
-
-     -v        Invert the sense of the match, so that lines which
-               do not match the pattern are now the ones that are
-               found.
-
-     -x        Force the pattern to be anchored  (it  must  start
-               matching  at  the  beginning  of  the line) and in
-               addition, require it to  match  the  entire  line.
-               This is equivalent to having ^ and $ characters at
-               the start and end of each  alternative  branch  in
-               the regular expression.
-
-
-
-SEE ALSO
-     pcre(3), Perl 5 documentation
-
-
-
-
-
-DIAGNOSTICS
-     Exit status is 0 if any matches were found, 1 if no  matches
-     were  found,  and  2  for syntax errors or inacessible files
-     (even if matches were found).
-
-
-
-AUTHOR
-     Philip Hazel <ph10@cam.ac.uk>
-     Copyright (c) 1997-1999 University of Cambridge.
-
diff --git a/srclib/pcre/get.c b/srclib/pcre/get.c
deleted file mode 100644
index 035668e..0000000
--- a/srclib/pcre/get.c
+++ /dev/null
@@ -1,189 +0,0 @@
-/*************************************************
-*      Perl-Compatible Regular Expressions       *
-*************************************************/
-
-/*
-This is a library of functions to support regular expressions whose syntax
-and semantics are as close as possible to those of the Perl 5 language. See
-the file Tech.Notes for some information on the internals.
-
-Written by: Philip Hazel <ph10@cam.ac.uk>
-
-           Copyright (c) 1997-1999 University of Cambridge
-
------------------------------------------------------------------------------
-Permission is granted to anyone to use this software for any purpose on any
-computer system, and to redistribute it freely, subject to the following
-restrictions:
-
-1. This software is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-
-2. The origin of this software must not be misrepresented, either by
-   explicit claim or by omission.
-
-3. Altered versions must be plainly marked as such, and must not be
-   misrepresented as being the original software.
-
-4. If PCRE is embedded in any software that is released under the GNU
-   General Purpose Licence (GPL), then the terms of that licence shall
-   supersede any condition above with which it is incompatible.
------------------------------------------------------------------------------
-*/
-
-/* This module contains some convenience functions for extracting substrings
-from the subject string after a regex match has succeeded. The original idea
-for these functions came from Scott Wimer <scottw@cgibuilder.com>. */
-
-
-/* Include the internals header, which itself includes Standard C headers plus
-the external pcre header. */
-
-#include "internal.h"
-
-
-
-/*************************************************
-*      Copy captured string to given buffer      *
-*************************************************/
-
-/* This function copies a single captured substring into a given buffer.
-Note that we use memcpy() rather than strncpy() in case there are binary zeros
-in the string.
-
-Arguments:
-  subject        the subject string that was matched
-  ovector        pointer to the offsets table
-  stringcount    the number of substrings that were captured
-                   (i.e. the yield of the pcre_exec call, unless
-                   that was zero, in which case it should be 1/3
-                   of the offset table size)
-  stringnumber   the number of the required substring
-  buffer         where to put the substring
-  size           the size of the buffer
-
-Returns:         if successful:
-                   the length of the copied string, not including the zero
-                   that is put on the end; can be zero
-                 if not successful:
-                   PCRE_ERROR_NOMEMORY (-6) buffer too small
-                   PCRE_ERROR_NOSUBSTRING (-7) no such captured substring
-*/
-
-int
-pcre_copy_substring(const char *subject, int *ovector, int stringcount,
-  int stringnumber, char *buffer, int size)
-{
-int yield;
-if (stringnumber < 0 || stringnumber >= stringcount)
-  return PCRE_ERROR_NOSUBSTRING;
-stringnumber *= 2;
-yield = ovector[stringnumber+1] - ovector[stringnumber];
-if (size < yield + 1) return PCRE_ERROR_NOMEMORY;
-memcpy(buffer, subject + ovector[stringnumber], yield);
-buffer[yield] = 0;
-return yield;
-}
-
-
-
-/*************************************************
-*      Copy all captured strings to new store    *
-*************************************************/
-
-/* This function gets one chunk of store and builds a list of pointers and all
-of the captured substrings in it. A NULL pointer is put on the end of the list.
-
-Arguments:
-  subject        the subject string that was matched
-  ovector        pointer to the offsets table
-  stringcount    the number of substrings that were captured
-                   (i.e. the yield of the pcre_exec call, unless
-                   that was zero, in which case it should be 1/3
-                   of the offset table size)
-  listptr        set to point to the list of pointers
-
-Returns:         if successful: 0
-                 if not successful:
-                   PCRE_ERROR_NOMEMORY (-6) failed to get store
-*/
-
-int
-pcre_get_substring_list(const char *subject, int *ovector, int stringcount,
-  const char ***listptr)
-{
-int i;
-int size = sizeof(char *);
-int double_count = stringcount * 2;
-char **stringlist;
-char *p;
-
-for (i = 0; i < double_count; i += 2)
-  size += sizeof(char *) + ovector[i+1] - ovector[i] + 1;
-
-stringlist = (char **)(pcre_malloc)(size);
-if (stringlist == NULL) return PCRE_ERROR_NOMEMORY;
-
-*listptr = (const char **)stringlist;
-p = (char *)(stringlist + stringcount + 1);
-
-for (i = 0; i < double_count; i += 2)
-  {
-  int len = ovector[i+1] - ovector[i];
-  memcpy(p, subject + ovector[i], len);
-  *stringlist++ = p;
-  p += len;
-  *p++ = 0;
-  }
-
-*stringlist = NULL;
-return 0;
-}
-
-
-
-/*************************************************
-*      Copy captured string to new store         *
-*************************************************/
-
-/* This function copies a single captured substring into a piece of new
-store
-
-Arguments:
-  subject        the subject string that was matched
-  ovector        pointer to the offsets table
-  stringcount    the number of substrings that were captured
-                   (i.e. the yield of the pcre_exec call, unless
-                   that was zero, in which case it should be 1/3
-                   of the offset table size)
-  stringnumber   the number of the required substring
-  stringptr      where to put a pointer to the substring
-
-Returns:         if successful:
-                   the length of the string, not including the zero that
-                   is put on the end; can be zero
-                 if not successful:
-                   PCRE_ERROR_NOMEMORY (-6) failed to get store
-                   PCRE_ERROR_NOSUBSTRING (-7) substring not present
-*/
-
-int
-pcre_get_substring(const char *subject, int *ovector, int stringcount,
-  int stringnumber, const char **stringptr)
-{
-int yield;
-char *substring;
-if (stringnumber < 0 || stringnumber >= stringcount)
-  return PCRE_ERROR_NOSUBSTRING;
-stringnumber *= 2;
-yield = ovector[stringnumber+1] - ovector[stringnumber];
-substring = (char *)(pcre_malloc)(yield + 1);
-if (substring == NULL) return PCRE_ERROR_NOMEMORY;
-memcpy(substring, subject + ovector[stringnumber], yield);
-substring[yield] = 0;
-*stringptr = substring;
-return yield;
-}
-
-/* End of get.c */
diff --git a/srclib/pcre/install-sh b/srclib/pcre/install-sh
deleted file mode 100755
index e9de238..0000000
--- a/srclib/pcre/install-sh
+++ /dev/null
@@ -1,251 +0,0 @@
-#!/bin/sh
-#
-# install - install a program, script, or datafile
-# This comes from X11R5 (mit/util/scripts/install.sh).
-#
-# Copyright 1991 by the Massachusetts Institute of Technology
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of M.I.T. not be used in advertising or
-# publicity pertaining to distribution of the software without specific,
-# written prior permission.  M.I.T. makes no representations about the
-# suitability of this software for any purpose.  It is provided "as is"
-# without express or implied warranty.
-#
-# Calling this script install-sh is preferred over install.sh, to prevent
-# `make' implicit rules from creating a file called install from it
-# when there is no Makefile.
-#
-# This script is compatible with the BSD install script, but was written
-# from scratch.  It can only install one file at a time, a restriction
-# shared with many OS's install programs.
-
-
-# set DOITPROG to echo to test this script
-
-# Don't use :- since 4.3BSD and earlier shells don't like it.
-doit="${DOITPROG-}"
-
-
-# put in absolute paths if you don't have them in your path; or use env. vars.
-
-mvprog="${MVPROG-mv}"
-cpprog="${CPPROG-cp}"
-chmodprog="${CHMODPROG-chmod}"
-chownprog="${CHOWNPROG-chown}"
-chgrpprog="${CHGRPPROG-chgrp}"
-stripprog="${STRIPPROG-strip}"
-rmprog="${RMPROG-rm}"
-mkdirprog="${MKDIRPROG-mkdir}"
-
-transformbasename=""
-transform_arg=""
-instcmd="$mvprog"
-chmodcmd="$chmodprog 0755"
-chowncmd=""
-chgrpcmd=""
-stripcmd=""
-rmcmd="$rmprog -f"
-mvcmd="$mvprog"
-src=""
-dst=""
-dir_arg=""
-
-while [ x"$1" != x ]; do
-    case $1 in
-	-c) instcmd="$cpprog"
-	    shift
-	    continue;;
-
-	-d) dir_arg=true
-	    shift
-	    continue;;
-
-	-m) chmodcmd="$chmodprog $2"
-	    shift
-	    shift
-	    continue;;
-
-	-o) chowncmd="$chownprog $2"
-	    shift
-	    shift
-	    continue;;
-
-	-g) chgrpcmd="$chgrpprog $2"
-	    shift
-	    shift
-	    continue;;
-
-	-s) stripcmd="$stripprog"
-	    shift
-	    continue;;
-
-	-t=*) transformarg=`echo $1 | sed 's/-t=//'`
-	    shift
-	    continue;;
-
-	-b=*) transformbasename=`echo $1 | sed 's/-b=//'`
-	    shift
-	    continue;;
-
-	*)  if [ x"$src" = x ]
-	    then
-		src=$1
-	    else
-		# this colon is to work around a 386BSD /bin/sh bug
-		:
-		dst=$1
-	    fi
-	    shift
-	    continue;;
-    esac
-done
-
-if [ x"$src" = x ]
-then
-	echo "install:	no input file specified"
-	exit 1
-else
-	true
-fi
-
-if [ x"$dir_arg" != x ]; then
-	dst=$src
-	src=""
-	
-	if [ -d $dst ]; then
-		instcmd=:
-		chmodcmd=""
-	else
-		instcmd=mkdir
-	fi
-else
-
-# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
-# might cause directories to be created, which would be especially bad 
-# if $src (and thus $dsttmp) contains '*'.
-
-	if [ -f $src -o -d $src ]
-	then
-		true
-	else
-		echo "install:  $src does not exist"
-		exit 1
-	fi
-	
-	if [ x"$dst" = x ]
-	then
-		echo "install:	no destination specified"
-		exit 1
-	else
-		true
-	fi
-
-# If destination is a directory, append the input filename; if your system
-# does not like double slashes in filenames, you may need to add some logic
-
-	if [ -d $dst ]
-	then
-		dst="$dst"/`basename $src`
-	else
-		true
-	fi
-fi
-
-## this sed command emulates the dirname command
-dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
-
-# Make sure that the destination directory exists.
-#  this part is taken from Noah Friedman's mkinstalldirs script
-
-# Skip lots of stat calls in the usual case.
-if [ ! -d "$dstdir" ]; then
-defaultIFS='	
-'
-IFS="${IFS-${defaultIFS}}"
-
-oIFS="${IFS}"
-# Some sh's can't handle IFS=/ for some reason.
-IFS='%'
-set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'`
-IFS="${oIFS}"
-
-pathcomp=''
-
-while [ $# -ne 0 ] ; do
-	pathcomp="${pathcomp}${1}"
-	shift
-
-	if [ ! -d "${pathcomp}" ] ;
-        then
-		$mkdirprog "${pathcomp}"
-	else
-		true
-	fi
-
-	pathcomp="${pathcomp}/"
-done
-fi
-
-if [ x"$dir_arg" != x ]
-then
-	$doit $instcmd $dst &&
-
-	if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi &&
-	if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi &&
-	if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi &&
-	if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi
-else
-
-# If we're going to rename the final executable, determine the name now.
-
-	if [ x"$transformarg" = x ] 
-	then
-		dstfile=`basename $dst`
-	else
-		dstfile=`basename $dst $transformbasename | 
-			sed $transformarg`$transformbasename
-	fi
-
-# don't allow the sed command to completely eliminate the filename
-
-	if [ x"$dstfile" = x ] 
-	then
-		dstfile=`basename $dst`
-	else
-		true
-	fi
-
-# Make a temp file name in the proper directory.
-
-	dsttmp=$dstdir/#inst.$$#
-
-# Move or copy the file name to the temp name
-
-	$doit $instcmd $src $dsttmp &&
-
-	trap "rm -f ${dsttmp}" 0 &&
-
-# and set any options; do chmod last to preserve setuid bits
-
-# If any of these fail, we abort the whole thing.  If we want to
-# ignore errors from any of these, just make sure not to ignore
-# errors from the above "$doit $instcmd $src $dsttmp" command.
-
-	if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi &&
-	if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi &&
-	if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi &&
-	if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi &&
-
-# Now rename the file to the real destination.
-
-	$doit $rmcmd -f $dstdir/$dstfile &&
-	$doit $mvcmd $dsttmp $dstdir/$dstfile 
-
-fi &&
-
-
-exit 0
diff --git a/srclib/pcre/internal.h b/srclib/pcre/internal.h
deleted file mode 100644
index b4b750f..0000000
--- a/srclib/pcre/internal.h
+++ /dev/null
@@ -1,376 +0,0 @@
-/*************************************************
-*      Perl-Compatible Regular Expressions       *
-*************************************************/
-
-
-/* This is a library of functions to support regular expressions whose syntax
-and semantics are as close as possible to those of the Perl 5 language. See
-the file Tech.Notes for some information on the internals.
-
-Written by: Philip Hazel <ph10@cam.ac.uk>
-
-           Copyright (c) 1997-2000 University of Cambridge
-
------------------------------------------------------------------------------
-Permission is granted to anyone to use this software for any purpose on any
-computer system, and to redistribute it freely, subject to the following
-restrictions:
-
-1. This software is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-
-2. The origin of this software must not be misrepresented, either by
-   explicit claim or by omission.
-
-3. Altered versions must be plainly marked as such, and must not be
-   misrepresented as being the original software.
-
-4. If PCRE is embedded in any software that is released under the GNU
-   General Purpose Licence (GPL), then the terms of that licence shall
-   supersede any condition above with which it is incompatible.
------------------------------------------------------------------------------
-*/
-
-/* This header contains definitions that are shared between the different
-modules, but which are not relevant to the outside. */
-
-/* Get the definitions provided by running "configure" */
-
-#include "config.h"
-
-/* To cope with SunOS4 and other systems that lack memmove() but have bcopy(),
-define a macro for memmove() if HAVE_MEMMOVE is false, provided that HAVE_BCOPY
-is set. Otherwise, include an emulating function for those systems that have
-neither (there some non-Unix environments where this is the case). This assumes
-that all calls to memmove are moving strings upwards in store, which is the
-case in PCRE. */
-
-#if ! HAVE_MEMMOVE
-#undef  memmove        /* some systems may have a macro */
-#if HAVE_BCOPY
-#define memmove(a, b, c) bcopy(b, a, c)
-#else
-void *
-pcre_memmove(unsigned char *dest, const unsigned char *src, size_t n)
-{
-int i;
-dest += n;
-src += n;
-for (i = 0; i < n; ++i) *(--dest) =  *(--src);
-}
-#define memmove(a, b, c) pcre_memmove(a, b, c)
-#endif
-#endif
-
-/* Standard C headers plus the external interface definition */
-
-#include <ctype.h>
-#include <limits.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include "pcre.h"
-
-/* In case there is no definition of offsetof() provided - though any proper
-Standard C system should have one. */
-
-#ifndef offsetof
-#define offsetof(p_type,field) ((size_t)&(((p_type *)0)->field))
-#endif
-
-/* These are the public options that can change during matching. */
-
-#define PCRE_IMS (PCRE_CASELESS|PCRE_MULTILINE|PCRE_DOTALL)
-
-/* Private options flags start at the most significant end of the four bytes,
-but skip the top bit so we can use ints for convenience without getting tangled
-with negative values. The public options defined in pcre.h start at the least
-significant end. Make sure they don't overlap, though now that we have expanded
-to four bytes there is plenty of space. */
-
-#define PCRE_FIRSTSET      0x40000000  /* first_char is set */
-#define PCRE_REQCHSET      0x20000000  /* req_char is set */
-#define PCRE_STARTLINE     0x10000000  /* start after \n for multiline */
-#define PCRE_INGROUP       0x08000000  /* compiling inside a group */
-#define PCRE_ICHANGED      0x04000000  /* i option changes within regex */
-
-/* Options for the "extra" block produced by pcre_study(). */
-
-#define PCRE_STUDY_MAPPED   0x01     /* a map of starting chars exists */
-
-/* Masks for identifying the public options which are permitted at compile
-time, run time or study time, respectively. */
-
-#define PUBLIC_OPTIONS \
-  (PCRE_CASELESS|PCRE_EXTENDED|PCRE_ANCHORED|PCRE_MULTILINE| \
-   PCRE_DOTALL|PCRE_DOLLAR_ENDONLY|PCRE_EXTRA|PCRE_UNGREEDY)
-
-#define PUBLIC_EXEC_OPTIONS \
-  (PCRE_ANCHORED|PCRE_NOTBOL|PCRE_NOTEOL|PCRE_NOTEMPTY)
-
-#define PUBLIC_STUDY_OPTIONS 0   /* None defined */
-
-/* Magic number to provide a small check against being handed junk. */
-
-#define MAGIC_NUMBER  0x50435245UL   /* 'PCRE' */
-
-/* Miscellaneous definitions */
-
-typedef int BOOL;
-
-#define FALSE   0
-#define TRUE    1
-
-/* These are escaped items that aren't just an encoding of a particular data
-value such as \n. They must have non-zero values, as check_escape() returns
-their negation. Also, they must appear in the same order as in the opcode
-definitions below, up to ESC_z. The final one must be ESC_REF as subsequent
-values are used for \1, \2, \3, etc. There is a test in the code for an escape
-greater than ESC_b and less than ESC_X to detect the types that may be
-repeated. If any new escapes are put in-between that don't consume a character,
-that code will have to change. */
-
-enum { ESC_A = 1, ESC_B, ESC_b, ESC_D, ESC_d, ESC_S, ESC_s, ESC_W, ESC_w,
-       ESC_Z, ESC_z, ESC_REF };
-
-/* Opcode table: OP_BRA must be last, as all values >= it are used for brackets
-that extract substrings. Starting from 1 (i.e. after OP_END), the values up to
-OP_EOD must correspond in order to the list of escapes immediately above. */
-
-enum {
-  OP_END,            /* End of pattern */
-
-  /* Values corresponding to backslashed metacharacters */
-
-  OP_SOD,            /* Start of data: \A */
-  OP_NOT_WORD_BOUNDARY,  /* \B */
-  OP_WORD_BOUNDARY,      /* \b */
-  OP_NOT_DIGIT,          /* \D */
-  OP_DIGIT,              /* \d */
-  OP_NOT_WHITESPACE,     /* \S */
-  OP_WHITESPACE,         /* \s */
-  OP_NOT_WORDCHAR,       /* \W */
-  OP_WORDCHAR,           /* \w */
-  OP_EODN,           /* End of data or \n at end of data: \Z. */
-  OP_EOD,            /* End of data: \z */
-
-  OP_OPT,            /* Set runtime options */
-  OP_CIRC,           /* Start of line - varies with multiline switch */
-  OP_DOLL,           /* End of line - varies with multiline switch */
-  OP_ANY,            /* Match any character */
-  OP_CHARS,          /* Match string of characters */
-  OP_NOT,            /* Match anything but the following char */
-
-  OP_STAR,           /* The maximizing and minimizing versions of */
-  OP_MINSTAR,        /* all these opcodes must come in pairs, with */
-  OP_PLUS,           /* the minimizing one second. */
-  OP_MINPLUS,        /* This first set applies to single characters */
-  OP_QUERY,
-  OP_MINQUERY,
-  OP_UPTO,           /* From 0 to n matches */
-  OP_MINUPTO,
-  OP_EXACT,          /* Exactly n matches */
-
-  OP_NOTSTAR,        /* The maximizing and minimizing versions of */
-  OP_NOTMINSTAR,     /* all these opcodes must come in pairs, with */
-  OP_NOTPLUS,        /* the minimizing one second. */
-  OP_NOTMINPLUS,     /* This first set applies to "not" single characters */
-  OP_NOTQUERY,
-  OP_NOTMINQUERY,
-  OP_NOTUPTO,        /* From 0 to n matches */
-  OP_NOTMINUPTO,
-  OP_NOTEXACT,       /* Exactly n matches */
-
-  OP_TYPESTAR,       /* The maximizing and minimizing versions of */
-  OP_TYPEMINSTAR,    /* all these opcodes must come in pairs, with */
-  OP_TYPEPLUS,       /* the minimizing one second. These codes must */
-  OP_TYPEMINPLUS,    /* be in exactly the same order as those above. */
-  OP_TYPEQUERY,      /* This set applies to character types such as \d */
-  OP_TYPEMINQUERY,
-  OP_TYPEUPTO,       /* From 0 to n matches */
-  OP_TYPEMINUPTO,
-  OP_TYPEEXACT,      /* Exactly n matches */
-
-  OP_CRSTAR,         /* The maximizing and minimizing versions of */
-  OP_CRMINSTAR,      /* all these opcodes must come in pairs, with */
-  OP_CRPLUS,         /* the minimizing one second. These codes must */
-  OP_CRMINPLUS,      /* be in exactly the same order as those above. */
-  OP_CRQUERY,        /* These are for character classes and back refs */
-  OP_CRMINQUERY,
-  OP_CRRANGE,        /* These are different to the three seta above. */
-  OP_CRMINRANGE,
-
-  OP_CLASS,          /* Match a character class */
-  OP_REF,            /* Match a back reference */
-  OP_RECURSE,        /* Match this pattern recursively */
-
-  OP_ALT,            /* Start of alternation */
-  OP_KET,            /* End of group that doesn't have an unbounded repeat */
-  OP_KETRMAX,        /* These two must remain together and in this */
-  OP_KETRMIN,        /* order. They are for groups the repeat for ever. */
-
-  /* The assertions must come before ONCE and COND */
-
-  OP_ASSERT,         /* Positive lookahead */
-  OP_ASSERT_NOT,     /* Negative lookahead */
-  OP_ASSERTBACK,     /* Positive lookbehind */
-  OP_ASSERTBACK_NOT, /* Negative lookbehind */
-  OP_REVERSE,        /* Move pointer back - used in lookbehind assertions */
-
-  /* ONCE and COND must come after the assertions, with ONCE first, as there's
-  a test for >= ONCE for a subpattern that isn't an assertion. */
-
-  OP_ONCE,           /* Once matched, don't back up into the subpattern */
-  OP_COND,           /* Conditional group */
-  OP_CREF,           /* Used to hold an extraction string number */
-
-  OP_BRAZERO,        /* These two must remain together and in this */
-  OP_BRAMINZERO,     /* order. */
-
-  OP_BRA             /* This and greater values are used for brackets that
-                        extract substrings. */
-};
-
-/* The highest extraction number. This is limited by the number of opcodes
-left after OP_BRA, i.e. 255 - OP_BRA. We actually set it somewhat lower. */
-
-#define EXTRACT_MAX  99
-
-/* The texts of compile-time error messages are defined as macros here so that
-they can be accessed by the POSIX wrapper and converted into error codes.  Yes,
-I could have used error codes in the first place, but didn't feel like changing
-just to accommodate the POSIX wrapper. */
-
-#define ERR1  "\\ at end of pattern"
-#define ERR2  "\\c at end of pattern"
-#define ERR3  "unrecognized character follows \\"
-#define ERR4  "numbers out of order in {} quantifier"
-#define ERR5  "number too big in {} quantifier"
-#define ERR6  "missing terminating ] for character class"
-#define ERR7  "invalid escape sequence in character class"
-#define ERR8  "range out of order in character class"
-#define ERR9  "nothing to repeat"
-#define ERR10 "operand of unlimited repeat could match the empty string"
-#define ERR11 "internal error: unexpected repeat"
-#define ERR12 "unrecognized character after (?"
-#define ERR13 "too many capturing parenthesized sub-patterns"
-#define ERR14 "missing )"
-#define ERR15 "back reference to non-existent subpattern"
-#define ERR16 "erroffset passed as NULL"
-#define ERR17 "unknown option bit(s) set"
-#define ERR18 "missing ) after comment"
-#define ERR19 "too many sets of parentheses"
-#define ERR20 "regular expression too large"
-#define ERR21 "failed to get memory"
-#define ERR22 "unmatched parentheses"
-#define ERR23 "internal error: code overflow"
-#define ERR24 "unrecognized character after (?<"
-#define ERR25 "lookbehind assertion is not fixed length"
-#define ERR26 "malformed number after (?("
-#define ERR27 "conditional group contains more than two branches"
-#define ERR28 "assertion expected after (?("
-#define ERR29 "(?p must be followed by )"
-#define ERR30 "unknown POSIX class name"
-#define ERR31 "POSIX collating elements are not supported"
-
-/* All character handling must be done as unsigned characters. Otherwise there
-are problems with top-bit-set characters and functions such as isspace().
-However, we leave the interface to the outside world as char *, because that
-should make things easier for callers. We define a short type for unsigned char
-to save lots of typing. I tried "uchar", but it causes problems on Digital
-Unix, where it is defined in sys/types, so use "uschar" instead. */
-
-typedef unsigned char uschar;
-
-/* The real format of the start of the pcre block; the actual code vector
-runs on as long as necessary after the end. */
-
-typedef struct real_pcre {
-  unsigned long int magic_number;
-  size_t size;
-  const unsigned char *tables;
-  unsigned long int options;
-  uschar top_bracket;
-  uschar top_backref;
-  uschar first_char;
-  uschar req_char;
-  uschar code[1];
-} real_pcre;
-
-/* The real format of the extra block returned by pcre_study(). */
-
-typedef struct real_pcre_extra {
-  uschar options;
-  uschar start_bits[32];
-} real_pcre_extra;
-
-
-/* Structure for passing "static" information around between the functions
-doing the compiling, so that they are thread-safe. */
-
-typedef struct compile_data {
-  const uschar *lcc;            /* Points to lower casing table */
-  const uschar *fcc;            /* Points to case-flipping table */
-  const uschar *cbits;          /* Points to character type table */
-  const uschar *ctypes;         /* Points to table of type maps */
-} compile_data;
-
-/* Structure for passing "static" information around between the functions
-doing the matching, so that they are thread-safe. */
-
-typedef struct match_data {
-  int    errorcode;             /* As it says */
-  int   *offset_vector;         /* Offset vector */
-  int    offset_end;            /* One past the end */
-  int    offset_max;            /* The maximum usable for return data */
-  const uschar *lcc;            /* Points to lower casing table */
-  const uschar *ctypes;         /* Points to table of type maps */
-  BOOL   offset_overflow;       /* Set if too many extractions */
-  BOOL   notbol;                /* NOTBOL flag */
-  BOOL   noteol;                /* NOTEOL flag */
-  BOOL   endonly;               /* Dollar not before final \n */
-  BOOL   notempty;              /* Empty string match not wanted */
-  const uschar *start_pattern;  /* For use when recursing */
-  const uschar *start_subject;  /* Start of the subject string */
-  const uschar *end_subject;    /* End of the subject string */
-  const uschar *start_match;    /* Start of this match attempt */
-  const uschar *end_match_ptr;  /* Subject position at end match */
-  int    end_offset_top;        /* Highwater mark at end of match */
-} match_data;
-
-/* Bit definitions for entries in the pcre_ctypes table. */
-
-#define ctype_space   0x01
-#define ctype_letter  0x02
-#define ctype_digit   0x04
-#define ctype_xdigit  0x08
-#define ctype_word    0x10   /* alphameric or '_' */
-#define ctype_meta    0x80   /* regexp meta char or zero (end pattern) */
-
-/* Offsets for the bitmap tables in pcre_cbits. Each table contains a set
-of bits for a class map. Some classes are built by combining these tables. */
-
-#define cbit_space     0      /* [:space:] or \s */
-#define cbit_xdigit   32      /* [:xdigit:] */
-#define cbit_digit    64      /* [:digit:] or \d */
-#define cbit_upper    96      /* [:upper:] */
-#define cbit_lower   128      /* [:lower:] */
-#define cbit_word    160      /* [:word:] or \w */
-#define cbit_graph   192      /* [:graph:] */
-#define cbit_print   224      /* [:print:] */
-#define cbit_punct   256      /* [:punct:] */
-#define cbit_cntrl   288      /* [:cntrl:] */
-#define cbit_length  320      /* Length of the cbits table */
-
-/* Offsets of the various tables from the base tables pointer, and
-total length. */
-
-#define lcc_offset      0
-#define fcc_offset    256
-#define cbits_offset  512
-#define ctypes_offset (cbits_offset + cbit_length)
-#define tables_length (ctypes_offset + 256)
-
-/* End of internal.h */
diff --git a/srclib/pcre/ltconfig b/srclib/pcre/ltconfig
deleted file mode 100755
index a01334f..0000000
--- a/srclib/pcre/ltconfig
+++ /dev/null
@@ -1,3078 +0,0 @@
-#! /bin/sh
-
-# ltconfig - Create a system-specific libtool.
-# Copyright (C) 1996-1999 Free Software Foundation, Inc.
-# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
-#
-# This file is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-# A lot of this script is taken from autoconf-2.10.
-
-# Check that we are running under the correct shell.
-SHELL=${CONFIG_SHELL-/bin/sh}
-echo=echo
-if test "X$1" = X--no-reexec; then
-  # Discard the --no-reexec flag, and continue.
-  shift
-elif test "X$1" = X--fallback-echo; then
-  # Avoid inline document here, it may be left over
-  :
-elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then
-  # Yippee, $echo works!
-  :
-else
-  # Restart under the correct shell.
-  exec "$SHELL" "$0" --no-reexec ${1+"$@"}
-fi
-
-if test "X$1" = X--fallback-echo; then
-  # used as fallback echo
-  shift
-  cat <<EOF
-$*
-EOF
-  exit 0
-fi
-
-# Find the correct PATH separator.  Usually this is `:', but
-# DJGPP uses `;' like DOS.
-if test "X${PATH_SEPARATOR+set}" != Xset; then
-  UNAME=${UNAME-`uname 2>/dev/null`}
-  case X$UNAME in
-    *-DOS) PATH_SEPARATOR=';' ;;
-    *)     PATH_SEPARATOR=':' ;;
-  esac
-fi
-
-# The HP-UX ksh and POSIX shell print the target directory to stdout
-# if CDPATH is set.
-if test "X${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi
-
-if test "X${echo_test_string+set}" != Xset; then
-  # find a string as large as possible, as long as the shell can cope with it
-  for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do
-    # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
-    if (echo_test_string="`eval $cmd`") 2>/dev/null &&
-       echo_test_string="`eval $cmd`" &&
-       (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null; then
-      break
-    fi
-  done
-fi
-
-if test "X`($echo '\t') 2>/dev/null`" != 'X\t' ||
-   test "X`($echo "$echo_test_string") 2>/dev/null`" != X"$echo_test_string"; then
-  # The Solaris, AIX, and Digital Unix default echo programs unquote
-  # backslashes.  This makes it impossible to quote backslashes using
-  #   echo "$something" | sed 's/\\/\\\\/g'
-  #
-  # So, first we look for a working echo in the user's PATH.
-
-  IFS="${IFS= 	}"; save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}"
-  for dir in $PATH /usr/ucb; do
-    if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
-       test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
-       test "X`($dir/echo "$echo_test_string") 2>/dev/null`" = X"$echo_test_string"; then
-      echo="$dir/echo"
-      break
-    fi
-  done
-  IFS="$save_ifs"
-
-  if test "X$echo" = Xecho; then
-    # We didn't find a better echo, so look for alternatives.
-    if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' &&
-       test "X`(print -r "$echo_test_string") 2>/dev/null`" = X"$echo_test_string"; then
-      # This shell has a builtin print -r that does the trick.
-      echo='print -r'
-    elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) &&
-	 test "X$CONFIG_SHELL" != X/bin/ksh; then
-      # If we have ksh, try running ltconfig again with it.
-      ORIGINAL_CONFIG_SHELL="${CONFIG_SHELL-/bin/sh}"
-      export ORIGINAL_CONFIG_SHELL
-      CONFIG_SHELL=/bin/ksh
-      export CONFIG_SHELL
-      exec "$CONFIG_SHELL" "$0" --no-reexec ${1+"$@"}
-    else
-      # Try using printf.
-      echo='printf "%s\n"'
-      if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
-	 test "X`($echo "$echo_test_string") 2>/dev/null`" = X"$echo_test_string"; then
-	# Cool, printf works
-	:
-      elif test "X`("$ORIGINAL_CONFIG_SHELL" "$0" --fallback-echo '\t') 2>/dev/null`" = 'X\t' &&
-	   test "X`("$ORIGINAL_CONFIG_SHELL" "$0" --fallback-echo "$echo_test_string") 2>/dev/null`" = X"$echo_test_string"; then
-	CONFIG_SHELL="$ORIGINAL_CONFIG_SHELL"
-	export CONFIG_SHELL
-	SHELL="$CONFIG_SHELL"
-	export SHELL
-	echo="$CONFIG_SHELL $0 --fallback-echo"
-      elif test "X`("$CONFIG_SHELL" "$0" --fallback-echo '\t') 2>/dev/null`" = 'X\t' &&
-	   test "X`("$CONFIG_SHELL" "$0" --fallback-echo "$echo_test_string") 2>/dev/null`" = X"$echo_test_string"; then
-	echo="$CONFIG_SHELL $0 --fallback-echo"
-      else
-	# maybe with a smaller string...
-	prev=:
-
-	for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do
-	  if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null; then
-	    break
-	  fi
-	  prev="$cmd"
-	done
-
-	if test "$prev" != 'sed 50q "$0"'; then
-	  echo_test_string=`eval $prev`
-	  export echo_test_string
-	  exec "${ORIGINAL_CONFIG_SHELL}" "$0" ${1+"$@"}
-	else
-	  # Oops.  We lost completely, so just stick with echo.
-	  echo=echo
-	fi
-      fi
-    fi
-  fi
-fi
-
-# Sed substitution that helps us do robust quoting.  It backslashifies
-# metacharacters that are still active within double-quoted strings.
-Xsed='sed -e s/^X//'
-sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g'
-
-# Same as above, but do not quote variable references.
-double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g'
-
-# Sed substitution to delay expansion of an escaped shell variable in a
-# double_quote_subst'ed string.
-delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
-
-# The name of this program.
-progname=`$echo "X$0" | $Xsed -e 's%^.*/%%'`
-
-# Constants:
-PROGRAM=ltconfig
-PACKAGE=libtool
-VERSION=1.3.4
-TIMESTAMP=" (1.385.2.196 1999/12/07 21:47:57)"
-ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
-ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
-rm="rm -f"
-
-help="Try \`$progname --help' for more information."
-
-# Global variables:
-default_ofile=libtool
-can_build_shared=yes
-enable_shared=yes
-# All known linkers require a `.a' archive for static linking (except M$VC,
-# which needs '.lib').
-enable_static=yes
-enable_fast_install=yes
-enable_dlopen=unknown
-enable_win32_dll=no
-ltmain=
-silent=
-srcdir=
-ac_config_guess=
-ac_config_sub=
-host=
-nonopt=
-ofile="$default_ofile"
-verify_host=yes
-with_gcc=no
-with_gnu_ld=no
-need_locks=yes
-ac_ext=c
-objext=o
-libext=a
-exeext=
-cache_file=
-
-old_AR="$AR"
-old_CC="$CC"
-old_CFLAGS="$CFLAGS"
-old_CPPFLAGS="$CPPFLAGS"
-old_LDFLAGS="$LDFLAGS"
-old_LD="$LD"
-old_LN_S="$LN_S"
-old_LIBS="$LIBS"
-old_NM="$NM"
-old_RANLIB="$RANLIB"
-old_DLLTOOL="$DLLTOOL"
-old_OBJDUMP="$OBJDUMP"
-old_AS="$AS"
-
-# Parse the command line options.
-args=
-prev=
-for option
-do
-  case "$option" in
-  -*=*) optarg=`echo "$option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
-  *) optarg= ;;
-  esac
-
-  # If the previous option needs an argument, assign it.
-  if test -n "$prev"; then
-    eval "$prev=\$option"
-    prev=
-    continue
-  fi
-
-  case "$option" in
-  --help) cat <<EOM
-Usage: $progname [OPTION]... [HOST [LTMAIN]]
-
-Generate a system-specific libtool script.
-
-    --debug                enable verbose shell tracing
-    --disable-shared       do not build shared libraries
-    --disable-static       do not build static libraries
-    --disable-fast-install do not optimize for fast installation
-    --enable-dlopen        enable dlopen support
-    --enable-win32-dll     enable building dlls on win32 hosts
-    --help                 display this help and exit
-    --no-verify            do not verify that HOST is a valid host type
--o, --output=FILE          specify the output file [default=$default_ofile]
-    --quiet                same as \`--silent'
-    --silent               do not print informational messages
-    --srcdir=DIR           find \`config.guess' in DIR
-    --version              output version information and exit
-    --with-gcc             assume that the GNU C compiler will be used
-    --with-gnu-ld          assume that the C compiler uses the GNU linker
-    --disable-lock         disable file locking
-    --cache-file=FILE      configure cache file
-
-LTMAIN is the \`ltmain.sh' shell script fragment or \`ltmain.c' program
-that provides basic libtool functionality.
-
-HOST is the canonical host system name [default=guessed].
-EOM
-  exit 0
-  ;;
-
-  --debug)
-    echo "$progname: enabling shell trace mode"
-    set -x
-    ;;
-
-  --disable-shared) enable_shared=no ;;
-
-  --disable-static) enable_static=no ;;
-
-  --disable-fast-install) enable_fast_install=no ;;
-
-  --enable-dlopen) enable_dlopen=yes ;;
-
-  --enable-win32-dll) enable_win32_dll=yes ;;
-
-  --quiet | --silent) silent=yes ;;
-
-  --srcdir) prev=srcdir ;;
-  --srcdir=*) srcdir="$optarg" ;;
-
-  --no-verify) verify_host=no ;;
-
-  --output | -o) prev=ofile ;;
-  --output=*) ofile="$optarg" ;;
-
-  --version) echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP"; exit 0 ;;
-
-  --with-gcc) with_gcc=yes ;;
-  --with-gnu-ld) with_gnu_ld=yes ;;
-
-  --disable-lock) need_locks=no ;;
-
-  --cache-file=*) cache_file="$optarg" ;;
-
-  -*)
-    echo "$progname: unrecognized option \`$option'" 1>&2
-    echo "$help" 1>&2
-    exit 1
-    ;;
-
-  *)
-    if test -z "$ltmain"; then
-      ltmain="$option"
-    elif test -z "$host"; then
-# This generates an unnecessary warning for sparc-sun-solaris4.1.3_U1
-#      if test -n "`echo $option| sed 's/[-a-z0-9.]//g'`"; then
-#        echo "$progname: warning \`$option' is not a valid host type" 1>&2
-#      fi
-      host="$option"
-    else
-      echo "$progname: too many arguments" 1>&2
-      echo "$help" 1>&2
-      exit 1
-    fi ;;
-  esac
-done
-
-if test -z "$ltmain"; then
-  echo "$progname: you must specify a LTMAIN file" 1>&2
-  echo "$help" 1>&2
-  exit 1
-fi
-
-if test ! -f "$ltmain"; then
-  echo "$progname: \`$ltmain' does not exist" 1>&2
-  echo "$help" 1>&2
-  exit 1
-fi
-
-# Quote any args containing shell metacharacters.
-ltconfig_args=
-for arg
-do
-  case "$arg" in
-  *" "*|*"	"*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*)
-  ltconfig_args="$ltconfig_args '$arg'" ;;
-  *) ltconfig_args="$ltconfig_args $arg" ;;
-  esac
-done
-
-# A relevant subset of AC_INIT.
-
-# File descriptor usage:
-# 0 standard input
-# 1 file creation
-# 2 errors and warnings
-# 3 some systems may open it to /dev/tty
-# 4 used on the Kubota Titan
-# 5 compiler messages saved in config.log
-# 6 checking for... messages and results
-if test "$silent" = yes; then
-  exec 6>/dev/null
-else
-  exec 6>&1
-fi
-exec 5>>./config.log
-
-# NLS nuisances.
-# Only set LANG and LC_ALL to C if already set.
-# These must not be set unconditionally because not all systems understand
-# e.g. LANG=C (notably SCO).
-if test "X${LC_ALL+set}" = Xset; then LC_ALL=C; export LC_ALL; fi
-if test "X${LANG+set}"   = Xset; then LANG=C;   export LANG;   fi
-
-if test -n "$cache_file" && test -r "$cache_file"; then
-  echo "loading cache $cache_file within ltconfig"
-  . $cache_file
-fi
-
-if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
-  # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu.
-  if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then
-    ac_n= ac_c='
-' ac_t='	'
-  else
-    ac_n=-n ac_c= ac_t=
-  fi
-else
-  ac_n= ac_c='\c' ac_t=
-fi
-
-if test -z "$srcdir"; then
-  # Assume the source directory is the same one as the path to LTMAIN.
-  srcdir=`$echo "X$ltmain" | $Xsed -e 's%/[^/]*$%%'`
-  test "$srcdir" = "$ltmain" && srcdir=.
-fi
-
-trap "$rm conftest*; exit 1" 1 2 15
-if test "$verify_host" = yes; then
-  # Check for config.guess and config.sub.
-  ac_aux_dir=
-  for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
-    if test -f $ac_dir/config.guess; then
-      ac_aux_dir=$ac_dir
-      break
-    fi
-  done
-  if test -z "$ac_aux_dir"; then
-    echo "$progname: cannot find config.guess in $srcdir $srcdir/.. $srcdir/../.." 1>&2
-    echo "$help" 1>&2
-    exit 1
-  fi
-  ac_config_guess=$ac_aux_dir/config.guess
-  ac_config_sub=$ac_aux_dir/config.sub
-
-  # Make sure we can run config.sub.
-  if $SHELL $ac_config_sub sun4 >/dev/null 2>&1; then :
-  else
-    echo "$progname: cannot run $ac_config_sub" 1>&2
-    echo "$help" 1>&2
-    exit 1
-  fi
-
-  echo $ac_n "checking host system type""... $ac_c" 1>&6
-
-  host_alias=$host
-  case "$host_alias" in
-  "")
-    if host_alias=`$SHELL $ac_config_guess`; then :
-    else
-      echo "$progname: cannot guess host type; you must specify one" 1>&2
-      echo "$help" 1>&2
-      exit 1
-    fi ;;
-  esac
-  host=`$SHELL $ac_config_sub $host_alias`
-  echo "$ac_t$host" 1>&6
-
-  # Make sure the host verified.
-  test -z "$host" && exit 1
-
-elif test -z "$host"; then
-  echo "$progname: you must specify a host type if you use \`--no-verify'" 1>&2
-  echo "$help" 1>&2
-  exit 1
-else
-  host_alias=$host
-fi
-
-# Transform linux* to *-*-linux-gnu*, to support old configure scripts.
-case "$host_os" in
-linux-gnu*) ;;
-linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'`
-esac
-
-host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
-host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
-host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
-
-case "$host_os" in
-aix3*)
-  # AIX sometimes has problems with the GCC collect2 program.  For some
-  # reason, if we set the COLLECT_NAMES environment variable, the problems
-  # vanish in a puff of smoke.
-  if test "X${COLLECT_NAMES+set}" != Xset; then
-    COLLECT_NAMES=
-    export COLLECT_NAMES
-  fi
-  ;;
-esac
-
-# Determine commands to create old-style static archives.
-old_archive_cmds='$AR cru $oldlib$oldobjs'
-old_postinstall_cmds='chmod 644 $oldlib'
-old_postuninstall_cmds=
-
-# Set a sane default for `AR'.
-test -z "$AR" && AR=ar
-
-# Set a sane default for `OBJDUMP'.
-test -z "$OBJDUMP" && OBJDUMP=objdump
-
-# If RANLIB is not set, then run the test.
-if test "${RANLIB+set}" != "set"; then
-  result=no
-
-  echo $ac_n "checking for ranlib... $ac_c" 1>&6
-  IFS="${IFS= 	}"; save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}"
-  for dir in $PATH; do
-    test -z "$dir" && dir=.
-    if test -f $dir/ranlib || test -f $dir/ranlib$ac_exeext; then
-      RANLIB="ranlib"
-      result="ranlib"
-      break
-    fi
-  done
-  IFS="$save_ifs"
-
-  echo "$ac_t$result" 1>&6
-fi
-
-if test -n "$RANLIB"; then
-  old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
-  old_postinstall_cmds="\$RANLIB \$oldlib~$old_postinstall_cmds"
-fi
-
-# Set sane defaults for `DLLTOOL', `OBJDUMP', and `AS', used on cygwin.
-test -z "$DLLTOOL" && DLLTOOL=dlltool
-test -z "$OBJDUMP" && OBJDUMP=objdump
-test -z "$AS" && AS=as
-
-# Check to see if we are using GCC.
-if test "$with_gcc" != yes || test -z "$CC"; then
-  # If CC is not set, then try to find GCC or a usable CC.
-  if test -z "$CC"; then
-    echo $ac_n "checking for gcc... $ac_c" 1>&6
-    IFS="${IFS= 	}"; save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}"
-    for dir in $PATH; do
-      test -z "$dir" && dir=.
-      if test -f $dir/gcc || test -f $dir/gcc$ac_exeext; then
-	CC="gcc"
-	break
-      fi
-    done
-    IFS="$save_ifs"
-
-    if test -n "$CC"; then
-      echo "$ac_t$CC" 1>&6
-    else
-      echo "$ac_t"no 1>&6
-    fi
-  fi
-
-  # Not "gcc", so try "cc", rejecting "/usr/ucb/cc".
-  if test -z "$CC"; then
-    echo $ac_n "checking for cc... $ac_c" 1>&6
-    IFS="${IFS= 	}"; save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}"
-    cc_rejected=no
-    for dir in $PATH; do
-      test -z "$dir" && dir=.
-      if test -f $dir/cc || test -f $dir/cc$ac_exeext; then
-	if test "$dir/cc" = "/usr/ucb/cc"; then
-	  cc_rejected=yes
-	  continue
-	fi
-	CC="cc"
-	break
-      fi
-    done
-    IFS="$save_ifs"
-    if test $cc_rejected = yes; then
-      # We found a bogon in the path, so make sure we never use it.
-      set dummy $CC
-      shift
-      if test $# -gt 0; then
-	# We chose a different compiler from the bogus one.
-	# However, it has the same name, so the bogon will be chosen
-	# first if we set CC to just the name; use the full file name.
-	shift
-	set dummy "$dir/cc" "$@"
-	shift
-	CC="$@"
-      fi
-    fi
-
-    if test -n "$CC"; then
-      echo "$ac_t$CC" 1>&6
-    else
-      echo "$ac_t"no 1>&6
-    fi
-
-    if test -z "$CC"; then
-      echo "$progname: error: no acceptable cc found in \$PATH" 1>&2
-      exit 1
-    fi
-  fi
-
-  # Now see if the compiler is really GCC.
-  with_gcc=no
-  echo $ac_n "checking whether we are using GNU C... $ac_c" 1>&6
-  echo "$progname:581: checking whether we are using GNU C" >&5
-
-  $rm conftest.c
-  cat > conftest.c <<EOF
-#ifdef __GNUC__
-  yes;
-#endif
-EOF
-  if { ac_try='${CC-cc} -E conftest.c'; { (eval echo $progname:589: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
-    with_gcc=yes
-  fi
-  $rm conftest.c
-  echo "$ac_t$with_gcc" 1>&6
-fi
-
-# Allow CC to be a program name with arguments.
-set dummy $CC
-compiler="$2"
-
-echo $ac_n "checking for object suffix... $ac_c" 1>&6
-$rm conftest*
-echo 'int i = 1;' > conftest.c
-echo "$progname:603: checking for object suffix" >& 5
-if { (eval echo $progname:604: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>conftest.err; }; then
-  # Append any warnings to the config.log.
-  cat conftest.err 1>&5
-
-  for ac_file in conftest.*; do
-    case $ac_file in
-    *.c) ;;
-    *) objext=`echo $ac_file | sed -e s/conftest.//` ;;
-    esac
-  done
-else
-  cat conftest.err 1>&5
-  echo "$progname: failed program was:" >&5
-  cat conftest.c >&5
-fi
-$rm conftest*
-echo "$ac_t$objext" 1>&6
-
-echo $ac_n "checking for executable suffix... $ac_c" 1>&6
-if eval "test \"`echo '$''{'ac_cv_exeext'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
-else
-  ac_cv_exeext="no"
-  $rm conftest*
-  echo 'main () { return 0; }' > conftest.c
-  echo "$progname:629: checking for executable suffix" >& 5
-  if { (eval echo $progname:630: \"$ac_link\") 1>&5; (eval $ac_link) 2>conftest.err; }; then
-    # Append any warnings to the config.log.
-    cat conftest.err 1>&5
-
-    for ac_file in conftest.*; do
-      case $ac_file in
-      *.c | *.err | *.$objext ) ;;
-      *) ac_cv_exeext=.`echo $ac_file | sed -e s/conftest.//` ;;
-      esac
-    done
-  else
-    cat conftest.err 1>&5
-    echo "$progname: failed program was:" >&5
-    cat conftest.c >&5
-  fi
-  $rm conftest*
-fi
-if test "X$ac_cv_exeext" = Xno; then
-  exeext=""
-else
-  exeext="$ac_cv_exeext"
-fi
-echo "$ac_t$ac_cv_exeext" 1>&6
-
-echo $ac_n "checking for $compiler option to produce PIC... $ac_c" 1>&6
-pic_flag=
-special_shlib_compile_flags=
-wl=
-link_static_flag=
-no_builtin_flag=
-
-if test "$with_gcc" = yes; then
-  wl='-Wl,'
-  link_static_flag='-static'
-
-  case "$host_os" in
-  beos* | irix5* | irix6* | osf3* | osf4* | osf5*)
-    # PIC is the default for these OSes.
-    ;;
-  aix*)
-    # Below there is a dirty hack to force normal static linking with -ldl
-    # The problem is because libdl dynamically linked with both libc and
-    # libC (AIX C++ library), which obviously doesn't included in libraries
-    # list by gcc. This cause undefined symbols with -static flags.
-    # This hack allows C programs to be linked with "-static -ldl", but
-    # we not sure about C++ programs.
-    link_static_flag="$link_static_flag ${wl}-lC"
-    ;;
-  cygwin* | mingw* | os2*)
-    # We can build DLLs from non-PIC.
-    ;;
-  amigaos*)
-    # FIXME: we need at least 68020 code to build shared libraries, but
-    # adding the `-m68020' flag to GCC prevents building anything better,
-    # like `-m68040'.
-    pic_flag='-m68020 -resident32 -malways-restore-a4'
-    ;;
-  sysv4*MP*)
-    if test -d /usr/nec; then
-       pic_flag=-Kconform_pic
-    fi
-    ;;
-  *)
-    pic_flag='-fPIC'
-    ;;
-  esac
-else
-  # PORTME Check for PIC flags for the system compiler.
-  case "$host_os" in
-  aix3* | aix4*)
-    # All AIX code is PIC.
-    link_static_flag='-bnso -bI:/lib/syscalls.exp'
-    ;;
-
-  hpux9* | hpux10* | hpux11*)
-    # Is there a better link_static_flag that works with the bundled CC?
-    wl='-Wl,'
-    link_static_flag="${wl}-a ${wl}archive"
-    pic_flag='+Z'
-    ;;
-
-  irix5* | irix6*)
-    wl='-Wl,'
-    link_static_flag='-non_shared'
-    # PIC (with -KPIC) is the default.
-    ;;
-
-  cygwin* | mingw* | os2*)
-    # We can build DLLs from non-PIC.
-    ;;
-
-  osf3* | osf4* | osf5*)
-    # All OSF/1 code is PIC.
-    wl='-Wl,'
-    link_static_flag='-non_shared'
-    ;;
-
-  sco3.2v5*)
-    pic_flag='-Kpic'
-    link_static_flag='-dn'
-    special_shlib_compile_flags='-belf'
-    ;;
-
-  solaris*)
-    pic_flag='-KPIC'
-    link_static_flag='-Bstatic'
-    wl='-Wl,'
-    ;;
-
-  sunos4*)
-    pic_flag='-PIC'
-    link_static_flag='-Bstatic'
-    wl='-Qoption ld '
-    ;;
-
-  sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
-    pic_flag='-KPIC'
-    link_static_flag='-Bstatic'
-    wl='-Wl,'
-    ;;
-
-  uts4*)
-    pic_flag='-pic'
-    link_static_flag='-Bstatic'
-    ;;
-  sysv4*MP*)
-    if test -d /usr/nec ;then
-      pic_flag='-Kconform_pic'
-      link_static_flag='-Bstatic'
-    fi
-    ;;
-  *)
-    can_build_shared=no
-    ;;
-  esac
-fi
-
-if test -n "$pic_flag"; then
-  echo "$ac_t$pic_flag" 1>&6
-
-  # Check to make sure the pic_flag actually works.
-  echo $ac_n "checking if $compiler PIC flag $pic_flag works... $ac_c" 1>&6
-  $rm conftest*
-  echo "int some_variable = 0;" > conftest.c
-  save_CFLAGS="$CFLAGS"
-  CFLAGS="$CFLAGS $pic_flag -DPIC"
-  echo "$progname:776: checking if $compiler PIC flag $pic_flag works" >&5
-  if { (eval echo $progname:777: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>conftest.err; } && test -s conftest.$objext; then
-    # Append any warnings to the config.log.
-    cat conftest.err 1>&5
-    
-    case "$host_os" in
-    hpux9* | hpux10* | hpux11*)
-      # On HP-UX, both CC and GCC only warn that PIC is supported... then they
-      # create non-PIC objects.  So, if there were any warnings, we assume that
-      # PIC is not supported.
-      if test -s conftest.err; then
-	echo "$ac_t"no 1>&6
-	can_build_shared=no
-	pic_flag=
-      else
-	echo "$ac_t"yes 1>&6
-	pic_flag=" $pic_flag"
-      fi
-      ;;
-    *)
-      echo "$ac_t"yes 1>&6
-      pic_flag=" $pic_flag"
-      ;;
-    esac
-  else
-    # Append any errors to the config.log.
-    cat conftest.err 1>&5
-    can_build_shared=no
-    pic_flag=
-    echo "$ac_t"no 1>&6
-  fi
-  CFLAGS="$save_CFLAGS"
-  $rm conftest*
-else
-  echo "$ac_t"none 1>&6
-fi
-
-# Check to see if options -o and -c are simultaneously supported by compiler
-echo $ac_n "checking if $compiler supports -c -o file.o... $ac_c" 1>&6
-$rm -r conftest 2>/dev/null
-mkdir conftest
-cd conftest
-$rm conftest*
-echo "int some_variable = 0;" > conftest.c
-mkdir out
-# According to Tom Tromey, Ian Lance Taylor reported there are C compilers
-# that will create temporary files in the current directory regardless of
-# the output directory.  Thus, making CWD read-only will cause this test
-# to fail, enabling locking or at least warning the user not to do parallel
-# builds.
-chmod -w .
-save_CFLAGS="$CFLAGS"
-CFLAGS="$CFLAGS -o out/conftest2.o"
-echo "$progname:829: checking if $compiler supports -c -o file.o" >&5
-if { (eval echo $progname:830: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>out/conftest.err; } && test -s out/conftest2.o; then
-
-  # The compiler can only warn and ignore the option if not recognized
-  # So say no if there are warnings
-    if test -s out/conftest.err; then
-      echo "$ac_t"no 1>&6
-      compiler_c_o=no
-    else
-      echo "$ac_t"yes 1>&6
-      compiler_c_o=yes
-    fi
-else
-  # Append any errors to the config.log.
-  cat out/conftest.err 1>&5
-  compiler_c_o=no
-  echo "$ac_t"no 1>&6
-fi
-CFLAGS="$save_CFLAGS"
-chmod u+w .
-$rm conftest* out/*
-rmdir out
-cd ..
-rmdir conftest
-$rm -r conftest 2>/dev/null
-
-if test x"$compiler_c_o" = x"yes"; then
-  # Check to see if we can write to a .lo
-  echo $ac_n "checking if $compiler supports -c -o file.lo... $ac_c" 1>&6
-  $rm conftest*
-  echo "int some_variable = 0;" > conftest.c
-  save_CFLAGS="$CFLAGS"
-  CFLAGS="$CFLAGS -c -o conftest.lo"
-  echo "$progname:862: checking if $compiler supports -c -o file.lo" >&5
-if { (eval echo $progname:863: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>conftest.err; } && test -s conftest.lo; then
-
-    # The compiler can only warn and ignore the option if not recognized
-    # So say no if there are warnings
-      if test -s conftest.err; then
-	echo "$ac_t"no 1>&6
-	compiler_o_lo=no
-      else
-	echo "$ac_t"yes 1>&6
-	compiler_o_lo=yes
-      fi
-  else
-    # Append any errors to the config.log.
-    cat conftest.err 1>&5
-    compiler_o_lo=no
-    echo "$ac_t"no 1>&6
-  fi
-  CFLAGS="$save_CFLAGS"
-  $rm conftest*
-else
-  compiler_o_lo=no
-fi
-
-# Check to see if we can do hard links to lock some files if needed
-hard_links="nottested"
-if test "$compiler_c_o" = no && test "$need_locks" != no; then
-  # do not overwrite the value of need_locks provided by the user
-  echo $ac_n "checking if we can lock with hard links... $ac_c" 1>&6
-  hard_links=yes
-  $rm conftest*
-  ln conftest.a conftest.b 2>/dev/null && hard_links=no
-  touch conftest.a
-  ln conftest.a conftest.b 2>&5 || hard_links=no
-  ln conftest.a conftest.b 2>/dev/null && hard_links=no
-  echo "$ac_t$hard_links" 1>&6
-  $rm conftest*
-  if test "$hard_links" = no; then
-    echo "*** WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2
-    need_locks=warn
-  fi
-else
-  need_locks=no
-fi
-
-if test "$with_gcc" = yes; then
-  # Check to see if options -fno-rtti -fno-exceptions are supported by compiler
-  echo $ac_n "checking if $compiler supports -fno-rtti -fno-exceptions ... $ac_c" 1>&6
-  $rm conftest*
-  echo "int some_variable = 0;" > conftest.c
-  save_CFLAGS="$CFLAGS"
-  CFLAGS="$CFLAGS -fno-rtti -fno-exceptions -c conftest.c"
-  echo "$progname:914: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
-  if { (eval echo $progname:915: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>conftest.err; } && test -s conftest.o; then
-
-    # The compiler can only warn and ignore the option if not recognized
-    # So say no if there are warnings
-      if test -s conftest.err; then
-	echo "$ac_t"no 1>&6
-	compiler_rtti_exceptions=no
-      else
-	echo "$ac_t"yes 1>&6
-	compiler_rtti_exceptions=yes
-      fi
-  else
-    # Append any errors to the config.log.
-    cat conftest.err 1>&5
-    compiler_rtti_exceptions=no
-    echo "$ac_t"no 1>&6
-  fi
-  CFLAGS="$save_CFLAGS"
-  $rm conftest*
-
-  if test "$compiler_rtti_exceptions" = "yes"; then
-    no_builtin_flag=' -fno-builtin -fno-rtti -fno-exceptions'
-  else
-    no_builtin_flag=' -fno-builtin'
-  fi
-  
-fi
-
-# Check for any special shared library compilation flags.
-if test -n "$special_shlib_compile_flags"; then
-  echo "$progname: warning: \`$CC' requires \`$special_shlib_compile_flags' to build shared libraries" 1>&2
-  if echo "$old_CC $old_CFLAGS " | egrep -e "[ 	]$special_shlib_compile_flags[ 	]" >/dev/null; then :
-  else
-    echo "$progname: add \`$special_shlib_compile_flags' to the CC or CFLAGS env variable and reconfigure" 1>&2
-    can_build_shared=no
-  fi
-fi
-
-echo $ac_n "checking if $compiler static flag $link_static_flag works... $ac_c" 1>&6
-$rm conftest*
-echo 'main(){return(0);}' > conftest.c
-save_LDFLAGS="$LDFLAGS"
-LDFLAGS="$LDFLAGS $link_static_flag"
-echo "$progname:958: checking if $compiler static flag $link_static_flag works" >&5
-if { (eval echo $progname:959: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
-  echo "$ac_t$link_static_flag" 1>&6
-else
-  echo "$ac_t"none 1>&6
-  link_static_flag=
-fi
-LDFLAGS="$save_LDFLAGS"
-$rm conftest*
-
-if test -z "$LN_S"; then
-  # Check to see if we can use ln -s, or we need hard links.
-  echo $ac_n "checking whether ln -s works... $ac_c" 1>&6
-  $rm conftest.dat
-  if ln -s X conftest.dat 2>/dev/null; then
-    $rm conftest.dat
-    LN_S="ln -s"
-  else
-    LN_S=ln
-  fi
-  if test "$LN_S" = "ln -s"; then
-    echo "$ac_t"yes 1>&6
-  else
-    echo "$ac_t"no 1>&6
-  fi
-fi
-
-# Make sure LD is an absolute path.
-if test -z "$LD"; then
-  ac_prog=ld
-  if test "$with_gcc" = yes; then
-    # Check if gcc -print-prog-name=ld gives a path.
-    echo $ac_n "checking for ld used by GCC... $ac_c" 1>&6
-    echo "$progname:991: checking for ld used by GCC" >&5
-    ac_prog=`($CC -print-prog-name=ld) 2>&5`
-    case "$ac_prog" in
-    # Accept absolute paths.
-    [\\/]* | [A-Za-z]:[\\/]*)
-      re_direlt='/[^/][^/]*/\.\./'
-      # Canonicalize the path of ld
-      ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'`
-      while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
-	ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
-      done
-      test -z "$LD" && LD="$ac_prog"
-      ;;
-    "")
-      # If it fails, then pretend we are not using GCC.
-      ac_prog=ld
-      ;;
-    *)
-      # If it is relative, then search for the first ld in PATH.
-      with_gnu_ld=unknown
-      ;;
-    esac
-  elif test "$with_gnu_ld" = yes; then
-    echo $ac_n "checking for GNU ld... $ac_c" 1>&6
-    echo "$progname:1015: checking for GNU ld" >&5
-  else
-    echo $ac_n "checking for non-GNU ld""... $ac_c" 1>&6
-    echo "$progname:1018: checking for non-GNU ld" >&5
-  fi
-
-  if test -z "$LD"; then
-    IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}"
-    for ac_dir in $PATH; do
-      test -z "$ac_dir" && ac_dir=.
-      if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
-	LD="$ac_dir/$ac_prog"
-	# Check to see if the program is GNU ld.  I'd rather use --version,
-	# but apparently some GNU ld's only accept -v.
-	# Break only if it was the GNU/non-GNU ld that we prefer.
-	if "$LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then
-	  test "$with_gnu_ld" != no && break
-	else
-	  test "$with_gnu_ld" != yes && break
-	fi
-      fi
-    done
-    IFS="$ac_save_ifs"
-  fi
-
-  if test -n "$LD"; then
-    echo "$ac_t$LD" 1>&6
-  else
-    echo "$ac_t"no 1>&6
-  fi
-
-  if test -z "$LD"; then
-    echo "$progname: error: no acceptable ld found in \$PATH" 1>&2
-    exit 1
-  fi
-fi
-
-# Check to see if it really is or is not GNU ld.
-echo $ac_n "checking if the linker ($LD) is GNU ld... $ac_c" 1>&6
-# I'd rather use --version here, but apparently some GNU ld's only accept -v.
-if $LD -v 2>&1 </dev/null | egrep '(GNU|with BFD)' 1>&5; then
-  with_gnu_ld=yes
-else
-  with_gnu_ld=no
-fi
-echo "$ac_t$with_gnu_ld" 1>&6
-
-# See if the linker supports building shared libraries.
-echo $ac_n "checking whether the linker ($LD) supports shared libraries... $ac_c" 1>&6
-
-allow_undefined_flag=
-no_undefined_flag=
-need_lib_prefix=unknown
-need_version=unknown
-# when you set need_version to no, make sure it does not cause -set_version
-# flags to be left without arguments
-archive_cmds=
-archive_expsym_cmds=
-old_archive_from_new_cmds=
-export_dynamic_flag_spec=
-whole_archive_flag_spec=
-thread_safe_flag_spec=
-hardcode_libdir_flag_spec=
-hardcode_libdir_separator=
-hardcode_direct=no
-hardcode_minus_L=no
-hardcode_shlibpath_var=unsupported
-runpath_var=
-always_export_symbols=no
-export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | sed '\''s/.* //'\'' | sort | uniq > $export_symbols'
-# include_expsyms should be a list of space-separated symbols to be *always*
-# included in the symbol list
-include_expsyms=
-# exclude_expsyms can be an egrep regular expression of symbols to exclude
-# it will be wrapped by ` (' and `)$', so one must not match beginning or
-# end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
-# as well as any symbol that contains `d'.
-exclude_expsyms="_GLOBAL_OFFSET_TABLE_"
-# Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
-# platforms (ab)use it in PIC code, but their linkers get confused if
-# the symbol is explicitly referenced.  Since portable code cannot
-# rely on this symbol name, it's probably fine to never include it in
-# preloaded symbol tables.
-
-case "$host_os" in
-cygwin* | mingw*)
-  # FIXME: the MSVC++ port hasn't been tested in a loooong time
-  # When not using gcc, we currently assume that we are using
-  # Microsoft Visual C++.
-  if test "$with_gcc" != yes; then
-    with_gnu_ld=no
-  fi
-  ;;
-
-esac
-
-ld_shlibs=yes
-if test "$with_gnu_ld" = yes; then
-  # If archive_cmds runs LD, not CC, wlarc should be empty
-  wlarc='${wl}'
-
-  # See if GNU ld supports shared libraries.
-  case "$host_os" in
-  aix3* | aix4*)
-    # On AIX, the GNU linker is very broken
-    ld_shlibs=no
-    cat <<EOF 1>&2
-
-*** Warning: the GNU linker, at least up to release 2.9.1, is reported
-*** to be unable to reliably create shared libraries on AIX.
-*** Therefore, libtool is disabling shared libraries support.  If you
-*** really care for shared libraries, you may want to modify your PATH
-*** so that a non-GNU linker is found, and then restart.
-
-EOF
-    ;;
-
-  amigaos*)
-    archive_cmds='$rm $objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $objdir/a2ixlibrary.data~$AR cru $lib $libobjs~$RANLIB $lib~(cd $objdir && a2ixlibrary -32)'
-    hardcode_libdir_flag_spec='-L$libdir'
-    hardcode_minus_L=yes
-
-    # Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports
-    # that the semantics of dynamic libraries on AmigaOS, at least up
-    # to version 4, is to share data among multiple programs linked
-    # with the same dynamic library.  Since this doesn't match the
-    # behavior of shared libraries on other platforms, we can use
-    # them.
-    ld_shlibs=no
-    ;;
-
-  beos*)
-    if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
-      allow_undefined_flag=unsupported
-      # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
-      # support --undefined.  This deserves some investigation.  FIXME
-      archive_cmds='$CC -nostart $libobjs $deplibs $linkopts ${wl}-soname $wl$soname -o $lib'
-    else
-      ld_shlibs=no
-    fi
-    ;;
-
-  cygwin* | mingw*)
-    # hardcode_libdir_flag_spec is actually meaningless, as there is
-    # no search path for DLLs.
-    hardcode_libdir_flag_spec='-L$libdir'
-    allow_undefined_flag=unsupported
-    always_export_symbols=yes
-
-    # Extract the symbol export list from an `--export-all' def file,
-    # then regenerate the def file from the symbol export list, so that
-    # the compiled dll only exports the symbol export list.
-    export_symbols_cmds='test -f $objdir/$soname-ltdll.c || sed -e "/^# \/\* ltdll\.c starts here \*\//,/^# \/\* ltdll.c ends here \*\// { s/^# //; p; }" -e d < $0 > $objdir/$soname-ltdll.c~
-      test -f $objdir/$soname-ltdll.$objext || (cd $objdir && $CC -c $soname-ltdll.c)~
-      $DLLTOOL --export-all --exclude-symbols DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12 --output-def $objdir/$soname-def  $objdir/$soname-ltdll.$objext $libobjs $convenience~
-      sed -e "1,/EXPORTS/d" -e "s/ @ [0-9]* ; *//" < $objdir/$soname-def > $export_symbols'
-
-    archive_expsym_cmds='echo EXPORTS > $objdir/$soname-def~
-      _lt_hint=1;
-      for symbol in `cat $export_symbols`; do
-	echo "	\$symbol @ \$_lt_hint ; " >> $objdir/$soname-def;
-	_lt_hint=`expr 1 + \$_lt_hint`;
-      done~
-      test -f $objdir/$soname-ltdll.c || sed -e "/^# \/\* ltdll\.c starts here \*\//,/^# \/\* ltdll.c ends here \*\// { s/^# //; p; }" -e d < $0 > $objdir/$soname-ltdll.c~
-      test -f $objdir/$soname-ltdll.$objext || (cd $objdir && $CC -c $soname-ltdll.c)~
-      $CC -Wl,--base-file,$objdir/$soname-base -Wl,--dll -nostartfiles -Wl,-e,__cygwin_dll_entry@12 -o $lib $objdir/$soname-ltdll.$objext $libobjs $deplibs $linkopts~
-      $DLLTOOL --as=$AS --dllname $soname --exclude-symbols DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12 --def $objdir/$soname-def --base-file $objdir/$soname-base --output-exp $objdir/$soname-exp~
-      $CC -Wl,--base-file,$objdir/$soname-base $objdir/$soname-exp -Wl,--dll -nostartfiles -Wl,-e,__cygwin_dll_entry@12 -o $lib $objdir/$soname-ltdll.$objext $libobjs $deplibs $linkopts~
-      $DLLTOOL --as=$AS --dllname $soname --exclude-symbols DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12 --def $objdir/$soname-def --base-file $objdir/$soname-base --output-exp $objdir/$soname-exp~
-      $CC $objdir/$soname-exp -Wl,--dll -nostartfiles -Wl,-e,__cygwin_dll_entry@12 -o $lib $objdir/$soname-ltdll.$objext $libobjs $deplibs $linkopts'
-
-      old_archive_from_new_cmds='$DLLTOOL --as=$AS --dllname $soname --def $objdir/$soname-def --output-lib $objdir/$libname.a' 
-    ;;
-
-  netbsd*)
-    if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
-      archive_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname -o $lib'
-      archive_expsym_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-    else
-      archive_cmds='$LD -Bshareable $libobjs $deplibs $linkopts -o $lib'
-      # can we support soname and/or expsyms with a.out? -oliva
-    fi
-    ;;
-
-  solaris* | sysv5*)
-    if $LD -v 2>&1 | egrep 'BFD 2\.8' > /dev/null; then
-      ld_shlibs=no
-      cat <<EOF 1>&2
-
-*** Warning: The releases 2.8.* of the GNU linker cannot reliably
-*** create shared libraries on Solaris systems.  Therefore, libtool
-*** is disabling shared libraries support.  We urge you to upgrade GNU
-*** binutils to release 2.9.1 or newer.  Another option is to modify
-*** your PATH or compiler configuration so that the native linker is
-*** used, and then restart.
-
-EOF
-    elif $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
-      archive_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname -o $lib'
-      archive_expsym_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-    else
-      ld_shlibs=no
-    fi
-    ;;      
-
-  sunos4*)
-    archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linkopts'
-    wlarc=
-    hardcode_direct=yes
-    hardcode_shlibpath_var=no
-    ;;
-
-  *)
-    if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
-      archive_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname -o $lib'
-      archive_expsym_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-    else
-      ld_shlibs=no
-    fi
-    ;;
-  esac
-
-  if test "$ld_shlibs" = yes; then
-    runpath_var=LD_RUN_PATH
-    hardcode_libdir_flag_spec='${wl}--rpath ${wl}$libdir'
-    export_dynamic_flag_spec='${wl}--export-dynamic'
-    case $host_os in
-    cygwin* | mingw*)
-      # dlltool doesn't understand --whole-archive et. al.
-      whole_archive_flag_spec=
-      ;;
-    *)
-      # ancient GNU ld didn't support --whole-archive et. al.
-      if $LD --help 2>&1 | egrep 'no-whole-archive' > /dev/null; then
-        whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
-      else
-        whole_archive_flag_spec=
-      fi
-      ;;
-    esac
-  fi
-else
-  # PORTME fill in a description of your system's linker (not GNU ld)
-  case "$host_os" in
-  aix3*)
-    allow_undefined_flag=unsupported
-    always_export_symbols=yes
-    archive_expsym_cmds='$LD -o $objdir/$soname $libobjs $deplibs $linkopts -bE:$export_symbols -T512 -H512 -bM:SRE~$AR cru $lib $objdir/$soname'
-    # Note: this linker hardcodes the directories in LIBPATH if there
-    # are no directories specified by -L.
-    hardcode_minus_L=yes
-    if test "$with_gcc" = yes && test -z "$link_static_flag"; then
-      # Neither direct hardcoding nor static linking is supported with a
-      # broken collect2.
-      hardcode_direct=unsupported
-    fi
-    ;;
-
-  aix4*)
-    hardcode_libdir_flag_spec='${wl}-b ${wl}nolibpath ${wl}-b ${wl}libpath:$libdir:/usr/lib:/lib'
-    hardcode_libdir_separator=':'
-    if test "$with_gcc" = yes; then
-      collect2name=`${CC} -print-prog-name=collect2`
-      if test -f "$collect2name" && \
-	 strings "$collect2name" | grep resolve_lib_name >/dev/null
-      then
-	# We have reworked collect2
-	hardcode_direct=yes
-      else
-	# We have old collect2
-	hardcode_direct=unsupported
-	# It fails to find uninstalled libraries when the uninstalled
-	# path is not listed in the libpath.  Setting hardcode_minus_L
-	# to unsupported forces relinking
-	hardcode_minus_L=yes
-	hardcode_libdir_flag_spec='-L$libdir'
-	hardcode_libdir_separator=
-      fi
-      shared_flag='-shared'
-    else
-      shared_flag='${wl}-bM:SRE'
-      hardcode_direct=yes
-    fi
-    allow_undefined_flag=' ${wl}-berok'
-    archive_cmds="\$CC $shared_flag"' -o $objdir/$soname $libobjs $deplibs $linkopts ${wl}-bexpall ${wl}-bnoentry${allow_undefined_flag}'
-    archive_expsym_cmds="\$CC $shared_flag"' -o $objdir/$soname $libobjs $deplibs $linkopts ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}'
-    case "$host_os" in aix4.[01]|aix4.[01].*)
-      # According to Greg Wooledge, -bexpall is only supported from AIX 4.2 on
-      always_export_symbols=yes ;;
-    esac
-   ;;
-
-  amigaos*)
-    archive_cmds='$rm $objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $objdir/a2ixlibrary.data~$AR cru $lib $libobjs~$RANLIB $lib~(cd $objdir && a2ixlibrary -32)'
-    hardcode_libdir_flag_spec='-L$libdir'
-    hardcode_minus_L=yes
-    # see comment about different semantics on the GNU ld section
-    ld_shlibs=no
-    ;;
-
-  cygwin* | mingw*)
-    # When not using gcc, we currently assume that we are using
-    # Microsoft Visual C++.
-    # hardcode_libdir_flag_spec is actually meaningless, as there is
-    # no search path for DLLs.
-    hardcode_libdir_flag_spec=' '
-    allow_undefined_flag=unsupported
-    # Tell ltmain to make .lib files, not .a files.
-    libext=lib
-    # FIXME: Setting linknames here is a bad hack.
-    archive_cmds='$CC -o $lib $libobjs $linkopts `echo "$deplibs" | sed -e '\''s/ -lc$//'\''` -link -dll~linknames='
-    # The linker will automatically build a .lib file if we build a DLL.
-    old_archive_from_new_cmds='true'
-    # FIXME: Should let the user specify the lib program.
-    old_archive_cmds='lib /OUT:$oldlib$oldobjs'
-    fix_srcfile_path='`cygpath -w $srcfile`'
-    ;;
-
-  freebsd1*)
-    ld_shlibs=no
-    ;;
-
-  # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
-  # support.  Future versions do this automatically, but an explicit c++rt0.o
-  # does not break anything, and helps significantly (at the cost of a little
-  # extra space).
-  freebsd2.2*)
-    archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linkopts /usr/lib/c++rt0.o'
-    hardcode_libdir_flag_spec='-R$libdir'
-    hardcode_direct=yes
-    hardcode_shlibpath_var=no
-    ;;
-
-  # Unfortunately, older versions of FreeBSD 2 do not have this feature.
-  freebsd2*)
-    archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linkopts'
-    hardcode_direct=yes
-    hardcode_minus_L=yes
-    hardcode_shlibpath_var=no
-    ;;
-
-  # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
-  freebsd*)
-    archive_cmds='$CC -shared -o $lib $libobjs $deplibs $linkopts'
-    hardcode_libdir_flag_spec='-R$libdir'
-    hardcode_direct=yes
-    hardcode_shlibpath_var=no
-    ;;
-
-  hpux9* | hpux10* | hpux11*)
-    case "$host_os" in
-    hpux9*) archive_cmds='$rm $objdir/$soname~$LD -b +b $install_libdir -o $objdir/$soname $libobjs $deplibs $linkopts~test $objdir/$soname = $lib || mv $objdir/$soname $lib' ;;
-    *) archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linkopts' ;;
-    esac
-    hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
-    hardcode_libdir_separator=:
-    hardcode_direct=yes
-    hardcode_minus_L=yes # Not in the search PATH, but as the default
-			 # location of the library.
-    export_dynamic_flag_spec='${wl}-E'
-    ;;
-
-  irix5* | irix6*)
-    if test "$with_gcc" = yes; then
-      archive_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
-    else
-      archive_cmds='$LD -shared $libobjs $deplibs $linkopts -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
-    fi
-    hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
-    hardcode_libdir_separator=:
-    ;;
-
-  netbsd*)
-    if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
-      archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linkopts'  # a.out
-    else
-      archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linkopts'      # ELF
-    fi
-    hardcode_libdir_flag_spec='${wl}-R$libdir'
-    hardcode_direct=yes
-    hardcode_shlibpath_var=no
-    ;;
-
-  openbsd*)
-    archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linkopts'
-    hardcode_libdir_flag_spec='-R$libdir'
-    hardcode_direct=yes
-    hardcode_shlibpath_var=no
-    ;;
-
-  os2*)
-    hardcode_libdir_flag_spec='-L$libdir'
-    hardcode_minus_L=yes
-    allow_undefined_flag=unsupported
-    archive_cmds='$echo "LIBRARY $libname INITINSTANCE" > $objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $objdir/$libname.def~$echo DATA >> $objdir/$libname.def~$echo " SINGLE NONSHARED" >> $objdir/$libname.def~$echo EXPORTS >> $objdir/$libname.def~emxexp $libobjs >> $objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $linkopts $objdir/$libname.def'
-    old_archive_from_new_cmds='emximp -o $objdir/$libname.a $objdir/$libname.def'
-    ;;
-
-  osf3*)
-    if test "$with_gcc" = yes; then
-      allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
-      archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $linkopts ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
-    else
-      allow_undefined_flag=' -expect_unresolved \*'
-      archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linkopts -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
-    fi
-    hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
-    hardcode_libdir_separator=:
-    ;;
-
-  osf4* | osf5*)  # As osf3* with the addition of the -msym flag
-    if test "$with_gcc" = yes; then
-      allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
-      archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $linkopts ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
-    else
-      allow_undefined_flag=' -expect_unresolved \*'
-      archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linkopts -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
-    fi
-    hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
-    hardcode_libdir_separator=:
-    ;;
-
-  sco3.2v5*)
-    archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts'
-    hardcode_shlibpath_var=no
-    runpath_var=LD_RUN_PATH
-    hardcode_runpath_var=yes
-    ;;
-
-  solaris*)
-    no_undefined_flag=' -z text'
-    # $CC -shared without GNU ld will not create a library from C++
-    # object files and a static libstdc++, better avoid it by now
-    archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linkopts'
-    archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
-		$LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linkopts~$rm $lib.exp'
-    hardcode_libdir_flag_spec='-R$libdir'
-    hardcode_shlibpath_var=no
-    case "$host_os" in
-    solaris2.[0-5] | solaris2.[0-5].*) ;;
-    *) # Supported since Solaris 2.6 (maybe 2.5.1?)
-      whole_archive_flag_spec='-z allextract$convenience -z defaultextract' ;;
-    esac
-    ;;
-
-  sunos4*)
-    archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linkopts'
-    hardcode_libdir_flag_spec='-L$libdir'
-    hardcode_direct=yes
-    hardcode_minus_L=yes
-    hardcode_shlibpath_var=no
-    ;;
-
-  sysv4)
-    archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts'
-    runpath_var='LD_RUN_PATH'
-    hardcode_shlibpath_var=no
-    hardcode_direct=no #Motorola manual says yes, but my tests say they lie 
-    ;;  
-
-  sysv4.3*)
-    archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts'
-    hardcode_shlibpath_var=no
-    export_dynamic_flag_spec='-Bexport'
-    ;;
-
-  sysv5*)
-    no_undefined_flag=' -z text'
-    # $CC -shared without GNU ld will not create a library from C++
-    # object files and a static libstdc++, better avoid it by now
-    archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linkopts'
-    archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
-		$LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linkopts~$rm $lib.exp'
-    hardcode_libdir_flag_spec=
-    hardcode_shlibpath_var=no
-    runpath_var='LD_RUN_PATH'
-    ;;
-
-  uts4*)
-    archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts'
-    hardcode_libdir_flag_spec='-L$libdir'
-    hardcode_shlibpath_var=no
-    ;;
-
-  dgux*)
-    archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts'
-    hardcode_libdir_flag_spec='-L$libdir'
-    hardcode_shlibpath_var=no
-    ;;
-
-  sysv4*MP*)
-    if test -d /usr/nec; then
-      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts'
-      hardcode_shlibpath_var=no
-      runpath_var=LD_RUN_PATH
-      hardcode_runpath_var=yes
-      ld_shlibs=yes
-    fi
-    ;;
-
-  sysv4.2uw2*)
-    archive_cmds='$LD -G -o $lib $libobjs $deplibs $linkopts'
-    hardcode_direct=yes
-    hardcode_minus_L=no
-    hardcode_shlibpath_var=no
-    hardcode_runpath_var=yes
-    runpath_var=LD_RUN_PATH
-    ;;
-
-  unixware7*)
-    archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts'
-    runpath_var='LD_RUN_PATH'
-    hardcode_shlibpath_var=no
-    ;;
-
-  *)
-    ld_shlibs=no
-    ;;
-  esac
-fi
-echo "$ac_t$ld_shlibs" 1>&6
-test "$ld_shlibs" = no && can_build_shared=no
-
-if test -z "$NM"; then
-  echo $ac_n "checking for BSD-compatible nm... $ac_c" 1>&6
-  case "$NM" in
-  [\\/]* | [A-Za-z]:[\\/]*) ;; # Let the user override the test with a path.
-  *)
-    IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}"
-    for ac_dir in $PATH /usr/ucb /usr/ccs/bin /bin; do
-      test -z "$ac_dir" && ac_dir=.
-      if test -f $ac_dir/nm || test -f $ac_dir/nm$ac_exeext; then
-	# Check to see if the nm accepts a BSD-compat flag.
-	# Adding the `sed 1q' prevents false positives on HP-UX, which says:
-	#   nm: unknown option "B" ignored
-	if ($ac_dir/nm -B /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then
-	  NM="$ac_dir/nm -B"
-	  break
-	elif ($ac_dir/nm -p /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then
-	  NM="$ac_dir/nm -p"
-	  break
-	else
-	  NM=${NM="$ac_dir/nm"} # keep the first match, but
-	  continue # so that we can try to find one that supports BSD flags
-	fi
-      fi
-    done
-    IFS="$ac_save_ifs"
-    test -z "$NM" && NM=nm
-    ;;
-  esac
-  echo "$ac_t$NM" 1>&6
-fi
-
-# Check for command to grab the raw symbol name followed by C symbol from nm.
-echo $ac_n "checking command to parse $NM output... $ac_c" 1>&6
-
-# These are sane defaults that work on at least a few old systems.
-# [They come from Ultrix.  What could be older than Ultrix?!! ;)]
-
-# Character class describing NM global symbol codes.
-symcode='[BCDEGRST]'
-
-# Regexp to match symbols that can be accessed directly from C.
-sympat='\([_A-Za-z][_A-Za-z0-9]*\)'
-
-# Transform the above into a raw symbol and a C symbol.
-symxfrm='\1 \2\3 \3'
-
-# Transform an extracted symbol line into a proper C declaration
-global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern char \1;/p'"
-
-# Define system-specific variables.
-case "$host_os" in
-aix*)
-  symcode='[BCDT]'
-  ;;
-cygwin* | mingw*)
-  symcode='[ABCDGISTW]'
-  ;;
-hpux*) # Its linker distinguishes data from code symbols
-  global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern char \1();/p' -e 's/^. .* \(.*\)$/extern char \1;/p'"
-  ;;
-irix*)
-  symcode='[BCDEGRST]'
-  ;;
-solaris*)
-  symcode='[BDT]'
-  ;;
-sysv4)
-  symcode='[DFNSTU]'
-  ;;
-esac
-
-# If we're using GNU nm, then use its standard symbol codes.
-if $NM -V 2>&1 | egrep '(GNU|with BFD)' > /dev/null; then
-  symcode='[ABCDGISTW]'
-fi
-
-# Try without a prefix undercore, then with it.
-for ac_symprfx in "" "_"; do
-
-  # Write the raw and C identifiers.
-  global_symbol_pipe="sed -n -e 's/^.*[ 	]\($symcode\)[ 	][ 	]*\($ac_symprfx\)$sympat$/$symxfrm/p'"
-
-  # Check to see that the pipe works correctly.
-  pipe_works=no
-  $rm conftest*
-  cat > conftest.c <<EOF
-#ifdef __cplusplus
-extern "C" {
-#endif
-char nm_test_var;
-void nm_test_func(){}
-#ifdef __cplusplus
-}
-#endif
-main(){nm_test_var='a';nm_test_func();return(0);}
-EOF
-
-  echo "$progname:1635: checking if global_symbol_pipe works" >&5
-  if { (eval echo $progname:1636: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; } && test -s conftest.$objext; then
-    # Now try to grab the symbols.
-    nlist=conftest.nm
-    if { echo "$progname:1639: eval \"$NM conftest.$objext | $global_symbol_pipe > $nlist\"" >&5; eval "$NM conftest.$objext | $global_symbol_pipe > $nlist 2>&5"; } && test -s "$nlist"; then
-
-      # Try sorting and uniquifying the output.
-      if sort "$nlist" | uniq > "$nlist"T; then
-	mv -f "$nlist"T "$nlist"
-      else
-	rm -f "$nlist"T
-      fi
-
-      # Make sure that we snagged all the symbols we need.
-      if egrep ' nm_test_var$' "$nlist" >/dev/null; then
-	if egrep ' nm_test_func$' "$nlist" >/dev/null; then
-	  cat <<EOF > conftest.c
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-EOF
-	  # Now generate the symbol file.
-	  eval "$global_symbol_to_cdecl"' < "$nlist" >> conftest.c'
-
-	  cat <<EOF >> conftest.c
-#if defined (__STDC__) && __STDC__
-# define lt_ptr_t void *
-#else
-# define lt_ptr_t char *
-# define const
-#endif
-
-/* The mapping between symbol names and symbols. */
-const struct {
-  const char *name;
-  lt_ptr_t address;
-}
-lt_preloaded_symbols[] =
-{
-EOF
-	  sed 's/^. \(.*\) \(.*\)$/  {"\2", (lt_ptr_t) \&\2},/' < "$nlist" >> conftest.c
-	  cat <<\EOF >> conftest.c
-  {0, (lt_ptr_t) 0}
-};
-
-#ifdef __cplusplus
-}
-#endif
-EOF
-	  # Now try linking the two files.
-	  mv conftest.$objext conftstm.$objext
-	  save_LIBS="$LIBS"
-	  save_CFLAGS="$CFLAGS"
-	  LIBS="conftstm.$objext"
-	  CFLAGS="$CFLAGS$no_builtin_flag"
-	  if { (eval echo $progname:1691: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
-	    pipe_works=yes
-	  else
-	    echo "$progname: failed program was:" >&5
-	    cat conftest.c >&5
-	  fi
-	  LIBS="$save_LIBS"
-	else
-	  echo "cannot find nm_test_func in $nlist" >&5
-	fi
-      else
-	echo "cannot find nm_test_var in $nlist" >&5
-      fi
-    else
-      echo "cannot run $global_symbol_pipe" >&5
-    fi
-  else
-    echo "$progname: failed program was:" >&5
-    cat conftest.c >&5
-  fi
-  $rm conftest* conftst*
-
-  # Do not use the global_symbol_pipe unless it works.
-  if test "$pipe_works" = yes; then
-    break
-  else
-    global_symbol_pipe=
-  fi
-done
-if test "$pipe_works" = yes; then
-  echo "${ac_t}ok" 1>&6
-else
-  echo "${ac_t}failed" 1>&6
-fi
-
-if test -z "$global_symbol_pipe"; then
-  global_symbol_to_cdecl=
-fi
-
-# Check hardcoding attributes.
-echo $ac_n "checking how to hardcode library paths into programs... $ac_c" 1>&6
-hardcode_action=
-if test -n "$hardcode_libdir_flag_spec" || \
-   test -n "$runpath_var"; then
-
-  # We can hardcode non-existant directories.
-  if test "$hardcode_direct" != no &&
-     # If the only mechanism to avoid hardcoding is shlibpath_var, we
-     # have to relink, otherwise we might link with an installed library
-     # when we should be linking with a yet-to-be-installed one
-     ## test "$hardcode_shlibpath_var" != no &&
-     test "$hardcode_minus_L" != no; then
-    # Linking always hardcodes the temporary library directory.
-    hardcode_action=relink
-  else
-    # We can link without hardcoding, and we can hardcode nonexisting dirs.
-    hardcode_action=immediate
-  fi
-else
-  # We cannot hardcode anything, or else we can only hardcode existing
-  # directories.
-  hardcode_action=unsupported
-fi
-echo "$ac_t$hardcode_action" 1>&6
-
-
-reload_flag=
-reload_cmds='$LD$reload_flag -o $output$reload_objs'
-echo $ac_n "checking for $LD option to reload object files... $ac_c" 1>&6
-# PORTME Some linkers may need a different reload flag.
-reload_flag='-r'
-echo "$ac_t$reload_flag" 1>&6
-test -n "$reload_flag" && reload_flag=" $reload_flag"
-
-# PORTME Fill in your ld.so characteristics
-library_names_spec=
-libname_spec='lib$name'
-soname_spec=
-postinstall_cmds=
-postuninstall_cmds=
-finish_cmds=
-finish_eval=
-shlibpath_var=
-shlibpath_overrides_runpath=unknown
-version_type=none
-dynamic_linker="$host_os ld.so"
-sys_lib_dlsearch_path_spec="/lib /usr/lib"
-sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
-file_magic_cmd=
-file_magic_test_file=
-deplibs_check_method='unknown'
-# Need to set the preceding variable on all platforms that support
-# interlibrary dependencies.
-# 'none' -- dependencies not supported.
-# `unknown' -- same as none, but documents that we really don't know.
-# 'pass_all' -- all dependencies passed with no checks.
-# 'test_compile' -- check by making test program.
-# 'file_magic [regex]' -- check by looking for files in library path
-# which responds to the $file_magic_cmd with a given egrep regex.
-# If you have `file' or equivalent on your system and you're not sure
-# whether `pass_all' will *always* work, you probably want this one.
-echo $ac_n "checking dynamic linker characteristics... $ac_c" 1>&6
-case "$host_os" in
-aix3*)
-  version_type=linux
-  library_names_spec='${libname}${release}.so$versuffix $libname.a'
-  shlibpath_var=LIBPATH
-
-  # AIX has no versioning support, so we append a major version to the name.
-  soname_spec='${libname}${release}.so$major'
-  ;;
-
-aix4*)
-  version_type=linux
-  # AIX has no versioning support, so currently we can not hardcode correct
-  # soname into executable. Probably we can add versioning support to
-  # collect2, so additional links can be useful in future.
-  # We preserve .a as extension for shared libraries though AIX4.2
-  # and later linker supports .so
-  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.a'
-  shlibpath_var=LIBPATH
-  deplibs_check_method=pass_all
-  ;;
-
-amigaos*)
-  library_names_spec='$libname.ixlibrary $libname.a'
-  # Create ${libname}_ixlibrary.a entries in /sys/libs.
-  finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "(cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a)"; (cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a) || exit 1; done'
-  ;;
-
-beos*)
-  library_names_spec='${libname}.so'
-  dynamic_linker="$host_os ld.so"
-  shlibpath_var=LIBRARY_PATH
-  deplibs_check_method=pass_all
-  lt_cv_dlopen="load_add_on"
-  lt_cv_dlopen_libs=
-  lt_cv_dlopen_self=yes
-  ;;
-
-bsdi4*)
-  version_type=linux
-  need_version=no
-  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
-  soname_spec='${libname}${release}.so$major'
-  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
-  shlibpath_var=LD_LIBRARY_PATH
-  deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)'
-  file_magic_cmd=/usr/bin/file
-  file_magic_test_file=/shlib/libc.so
-  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
-  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
-  export_dynamic_flag_spec=-rdynamic
-  # the default ld.so.conf also contains /usr/contrib/lib and
-  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
-  # libtool to hard-code these into programs
-  ;;
-
-cygwin* | mingw*)
-  version_type=windows
-  need_version=no
-  need_lib_prefix=no
-  if test "$with_gcc" = yes; then
-    library_names_spec='${libname}`echo ${release} | sed -e 's/[.]/-/g'`${versuffix}.dll $libname.a'
-  else
-    library_names_spec='${libname}`echo ${release} | sed -e 's/[.]/-/g'`${versuffix}.dll $libname.lib'
-  fi
-  dynamic_linker='Win32 ld.exe'
-  deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
-  file_magic_cmd='${OBJDUMP} -f'
-  # FIXME: first we should search . and the directory the executable is in
-  shlibpath_var=PATH
-  lt_cv_dlopen="LoadLibrary"
-  lt_cv_dlopen_libs=
-  ;;
-
-freebsd1*)
-  dynamic_linker=no
-  ;;
-  
-freebsd*)
-  objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout`
-  version_type=freebsd-$objformat
-  case "$version_type" in
-    freebsd-elf*)
-      deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB shared object'
-      file_magic_cmd=/usr/bin/file
-      file_magic_test_file=`echo /usr/lib/libc.so*`
-      library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so $libname.so'
-      need_version=no
-      need_lib_prefix=no
-      ;;
-    freebsd-*)
-      deplibs_check_method=unknown
-      library_names_spec='${libname}${release}.so$versuffix $libname.so$versuffix'
-      need_version=yes
-      ;;
-  esac
-  shlibpath_var=LD_LIBRARY_PATH
-  case "$host_os" in
-  freebsd2* | freebsd3.[01]* | freebsdelf3.[01]*)
-    shlibpath_overrides_runpath=yes
-    ;;
-  *) # from 3.2 on
-    shlibpath_overrides_runpath=no
-    ;;
-  esac
-  ;;
-
-gnu*)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so${major} ${libname}.so'
-  soname_spec='${libname}${release}.so$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  ;;
-
-hpux9* | hpux10* | hpux11*)
-  # Give a soname corresponding to the major version so that dld.sl refuses to
-  # link against other versions.
-  dynamic_linker="$host_os dld.sl"
-  version_type=sunos
-  need_lib_prefix=no
-  need_version=no
-  shlibpath_var=SHLIB_PATH
-  shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
-  library_names_spec='${libname}${release}.sl$versuffix ${libname}${release}.sl$major $libname.sl'
-  soname_spec='${libname}${release}.sl$major'
-  # HP-UX runs *really* slowly unless shared libraries are mode 555.
-  postinstall_cmds='chmod 555 $lib'
-  ;;
-
-irix5* | irix6*)
-  version_type=irix
-  need_lib_prefix=no
-  need_version=no
-  soname_spec='${libname}${release}.so.$major'
-  library_names_spec='${libname}${release}.so.$versuffix ${libname}${release}.so.$major ${libname}${release}.so $libname.so'
-  case "$host_os" in
-  irix5*)
-    libsuff= shlibsuff=
-    # this will be overridden with pass_all, but let us keep it just in case
-    deplibs_check_method="file_magic ELF 32-bit MSB dynamic lib MIPS - version 1"
-    ;;
-  *)
-    case "$LD" in # libtool.m4 will add one of these switches to LD
-    *-32|*"-32 ") libsuff= shlibsuff= libmagic=32-bit;;
-    *-n32|*"-n32 ") libsuff=32 shlibsuff=N32 libmagic=N32;;
-    *-64|*"-64 ") libsuff=64 shlibsuff=64 libmagic=64-bit;;
-    *) libsuff= shlibsuff= libmagic=never-match;;
-    esac
-    ;;
-  esac
-  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
-  shlibpath_overrides_runpath=no
-  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
-  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
-  file_magic_cmd=/usr/bin/file
-  file_magic_test_file=`echo /lib${libsuff}/libc.so*`
-  deplibs_check_method='pass_all'
-  ;;
-
-# No shared lib support for Linux oldld, aout, or coff.
-linux-gnuoldld* | linux-gnuaout* | linux-gnucoff*)
-  dynamic_linker=no
-  ;;
-
-# This must be Linux ELF.
-linux-gnu*)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
-  soname_spec='${libname}${release}.so$major'
-  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=no
-  deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )'
-  file_magic_cmd=/usr/bin/file
-  file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
-
-  if test -f /lib/ld.so.1; then
-    dynamic_linker='GNU ld.so'
-  else
-    # Only the GNU ld.so supports shared libraries on MkLinux.
-    case "$host_cpu" in
-    powerpc*) dynamic_linker=no ;;
-    *) dynamic_linker='Linux ld.so' ;;
-    esac
-  fi
-  ;;
-
-netbsd*)
-  version_type=sunos
-  if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
-    library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix'
-    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
-    dynamic_linker='NetBSD (a.out) ld.so'
-  else
-    library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major ${libname}${release}.so ${libname}.so'
-    soname_spec='${libname}${release}.so$major'
-    dynamic_linker='NetBSD ld.elf_so'
-  fi
-  shlibpath_var=LD_LIBRARY_PATH
-  ;;
-
-openbsd*)
-  version_type=sunos
-  if test "$with_gnu_ld" = yes; then
-    need_lib_prefix=no
-    need_version=no
-  fi
-  library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix'
-  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
-  shlibpath_var=LD_LIBRARY_PATH
-  ;;
-
-os2*)
-  libname_spec='$name'
-  need_lib_prefix=no
-  library_names_spec='$libname.dll $libname.a'
-  dynamic_linker='OS/2 ld.exe'
-  shlibpath_var=LIBPATH
-  ;;
-
-osf3* | osf4* | osf5*)
-  version_type=osf
-  need_version=no
-  soname_spec='${libname}${release}.so'
-  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so $libname.so'
-  shlibpath_var=LD_LIBRARY_PATH
-  # this will be overridden with pass_all, but let us keep it just in case
-  deplibs_check_method='file_magic COFF format alpha shared library'
-  file_magic_cmd=/usr/bin/file
-  file_magic_test_file=/shlib/libc.so
-  deplibs_check_method='pass_all'
-  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
-  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
-  ;;
-
-sco3.2v5*)
-  version_type=osf
-  soname_spec='${libname}${release}.so$major'
-  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
-  shlibpath_var=LD_LIBRARY_PATH
-  ;;
-
-solaris*)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
-  soname_spec='${libname}${release}.so$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=yes
-  # ldd complains unless libraries are executable
-  postinstall_cmds='chmod +x $lib'
-  deplibs_check_method="file_magic ELF [0-9][0-9]-bit [LM]SB dynamic lib"
-  file_magic_cmd=/usr/bin/file
-  file_magic_test_file=/lib/libc.so
-  ;;
-
-sunos4*)
-  version_type=sunos
-  library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix'
-  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=yes
-  if test "$with_gnu_ld" = yes; then
-    need_lib_prefix=no
-  fi
-  need_version=yes
-  ;;
-
-sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
-  version_type=linux
-  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
-  soname_spec='${libname}${release}.so$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  case "$host_vendor" in
-    ncr)
-      deplibs_check_method='pass_all'
-      ;;
-    motorola)
-      need_lib_prefix=no
-      need_version=no
-      shlibpath_overrides_runpath=no
-      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
-      deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]'
-      file_magic_cmd=/usr/bin/file
-      file_magic_test_file=`echo /usr/lib/libc.so*`
-      ;;
-  esac
-  ;;
-
-uts4*)
-  version_type=linux
-  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
-  soname_spec='${libname}${release}.so$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  ;;
-
-dgux*)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
-  soname_spec='${libname}${release}.so$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  ;;
-
-sysv4*MP*)
-  if test -d /usr/nec ;then
-    version_type=linux
-    library_names_spec='$libname.so.$versuffix $libname.so.$major $libname.so'
-    soname_spec='$libname.so.$major'
-    shlibpath_var=LD_LIBRARY_PATH
-  fi
-  ;;
-
-*)
-  dynamic_linker=no
-  ;;
-esac
-echo "$ac_t$dynamic_linker" 1>&6
-test "$dynamic_linker" = no && can_build_shared=no
-
-# Report the final consequences.
-echo "checking if libtool supports shared libraries... $can_build_shared" 1>&6
-
-# Only try to build win32 dlls if AC_LIBTOOL_WIN32_DLL was used in
-# configure.in, otherwise build static only libraries.
-case "$host_os" in
-cygwin* | mingw* | os2*)
-  if test x$can_build_shared = xyes; then
-    test x$enable_win32_dll = xno && can_build_shared=no
-    echo "checking if package supports dlls... $can_build_shared" 1>&6
-  fi
-;;
-esac
-
-if test -n "$file_magic_test_file" && test -n "$file_magic_cmd"; then
-  case "$deplibs_check_method" in
-  "file_magic "*)
-    file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`"
-    if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
-       egrep "$file_magic_regex" > /dev/null; then
-      :
-    else
-      cat <<EOF 1>&2
-
-*** Warning: the command libtool uses to detect shared libraries,
-*** $file_magic_cmd, produces output that libtool cannot recognize.
-*** The result is that libtool may fail to recognize shared libraries
-*** as such.  This will affect the creation of libtool libraries that
-*** depend on shared libraries, but programs linked with such libtool
-*** libraries will work regardless of this problem.  Nevertheless, you
-*** may want to report the problem to your system manager and/or to
-*** bug-libtool@gnu.org
-
-EOF
-    fi ;;
-  esac
-fi
-
-echo $ac_n "checking whether to build shared libraries... $ac_c" 1>&6
-test "$can_build_shared" = "no" && enable_shared=no
-
-# On AIX, shared libraries and static libraries use the same namespace, and
-# are all built from PIC.
-case "$host_os" in
-aix3*)
-  test "$enable_shared" = yes && enable_static=no
-  if test -n "$RANLIB"; then
-    archive_cmds="$archive_cmds~\$RANLIB \$lib"
-    postinstall_cmds='$RANLIB $lib'
-  fi
-  ;;
-
-aix4*)
-  test "$enable_shared" = yes && enable_static=no
-  ;;
-esac
-
-echo "$ac_t$enable_shared" 1>&6
-
-# Make sure either enable_shared or enable_static is yes.
-test "$enable_shared" = yes || enable_static=yes
-
-echo "checking whether to build static libraries... $enable_static" 1>&6
-
-if test "$hardcode_action" = relink; then
-  # Fast installation is not supported
-  enable_fast_install=no
-elif test "$shlibpath_overrides_runpath" = yes ||
-     test "$enable_shared" = no; then
-  # Fast installation is not necessary
-  enable_fast_install=needless
-fi
-
-echo $ac_n "checking for objdir... $ac_c" 1>&6
-rm -f .libs 2>/dev/null
-mkdir .libs 2>/dev/null
-if test -d .libs; then
-  objdir=.libs
-else
-  # MS-DOS does not allow filenames that begin with a dot.
-  objdir=_libs
-fi
-rmdir .libs 2>/dev/null
-echo "$ac_t$objdir" 1>&6
-
-if test "x$enable_dlopen" != xyes; then
-  enable_dlopen=unknown
-  enable_dlopen_self=unknown
-  enable_dlopen_self_static=unknown
-else
-if eval "test \"`echo '$''{'lt_cv_dlopen'+set}'`\" != set"; then
-  lt_cv_dlopen=no lt_cv_dlopen_libs=
-echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6
-echo "$progname:2212: checking for dlopen in -ldl" >&5
-ac_lib_var=`echo dl'_'dlopen | sed 'y%./+-%__p_%'`
-if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
-else
-  ac_save_LIBS="$LIBS"
-LIBS="-ldl  $LIBS"
-cat > conftest.$ac_ext <<EOF
-#line 2220 "ltconfig"
-/* Override any gcc2 internal prototype to avoid an error.  */
-/* We use char because int might match the return type of a gcc2
-    builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char dlopen();
-
-int main() {
-dlopen()
-; return 0; }
-EOF
-if { (eval echo $progname:2233: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-  rm -rf conftest*
-  eval "ac_cv_lib_$ac_lib_var=yes"
-else
-  echo "$progname: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  eval "ac_cv_lib_$ac_lib_var=no"
-fi
-rm -f conftest*
-LIBS="$ac_save_LIBS"
-
-fi
-if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
-  echo "$ac_t""yes" 1>&6
-  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
-else
-  echo "$ac_t""no" 1>&6
-echo $ac_n "checking for dlopen""... $ac_c" 1>&6
-echo "$progname:2252: checking for dlopen" >&5
-if eval "test \"`echo '$''{'ac_cv_func_dlopen'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
-else
-  cat > conftest.$ac_ext <<EOF
-#line 2257 "ltconfig"
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char dlopen(); below.  */
-#include <assert.h>
-/* Override any gcc2 internal prototype to avoid an error.  */
-/* We use char because int might match the return type of a gcc2
-    builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char dlopen();
-
-int main() {
-
-/* The GNU C library defines this for functions which it implements
-    to always fail with ENOSYS.  Some functions are actually named
-    something starting with __ and the normal name is an alias.  */
-#if defined (__stub_dlopen) || defined (__stub___dlopen)
-choke me
-#else
-dlopen();
-#endif
-
-; return 0; }
-EOF
-if { (eval echo $progname:2282: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-  rm -rf conftest*
-  eval "ac_cv_func_dlopen=yes"
-else
-  echo "$progname: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  eval "ac_cv_func_dlopen=no"
-fi
-rm -f conftest*
-fi
-if eval "test \"`echo '$ac_cv_func_'dlopen`\" = yes"; then
-  echo "$ac_t""yes" 1>&6
-  lt_cv_dlopen="dlopen"
-else
-  echo "$ac_t""no" 1>&6
-echo $ac_n "checking for dld_link in -ldld""... $ac_c" 1>&6
-echo "$progname:2299: checking for dld_link in -ldld" >&5
-ac_lib_var=`echo dld'_'dld_link | sed 'y%./+-%__p_%'`
-if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
-else
-  ac_save_LIBS="$LIBS"
-LIBS="-ldld  $LIBS"
-cat > conftest.$ac_ext <<EOF
-#line 2307 "ltconfig"
-/* Override any gcc2 internal prototype to avoid an error.  */
-/* We use char because int might match the return type of a gcc2
-    builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char dld_link();
-
-int main() {
-dld_link()
-; return 0; }
-EOF
-if { (eval echo $progname:2320: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-  rm -rf conftest*
-  eval "ac_cv_lib_$ac_lib_var=yes"
-else
-  echo "$progname: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  eval "ac_cv_lib_$ac_lib_var=no"
-fi
-rm -f conftest*
-LIBS="$ac_save_LIBS"
-
-fi
-if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
-  echo "$ac_t""yes" 1>&6
-  lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"
-else
-  echo "$ac_t""no" 1>&6
-echo $ac_n "checking for shl_load""... $ac_c" 1>&6
-echo "$progname:2339: checking for shl_load" >&5
-if eval "test \"`echo '$''{'ac_cv_func_shl_load'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
-else
-  cat > conftest.$ac_ext <<EOF
-#line 2344 "ltconfig"
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char shl_load(); below.  */
-#include <assert.h>
-/* Override any gcc2 internal prototype to avoid an error.  */
-/* We use char because int might match the return type of a gcc2
-    builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char shl_load();
-
-int main() {
-
-/* The GNU C library defines this for functions which it implements
-    to always fail with ENOSYS.  Some functions are actually named
-    something starting with __ and the normal name is an alias.  */
-#if defined (__stub_shl_load) || defined (__stub___shl_load)
-choke me
-#else
-shl_load();
-#endif
-
-; return 0; }
-EOF
-if { (eval echo $progname:2369: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-  rm -rf conftest*
-  eval "ac_cv_func_shl_load=yes"
-else
-  echo "$progname: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  eval "ac_cv_func_shl_load=no"
-fi
-rm -f conftest*
-fi
-
-if eval "test \"`echo '$ac_cv_func_'shl_load`\" = yes"; then
-  echo "$ac_t""yes" 1>&6
-  lt_cv_dlopen="shl_load"
-else
-  echo "$ac_t""no" 1>&6
-echo $ac_n "checking for shl_load in -ldld""... $ac_c" 1>&6
-echo "$progname:2387: checking for shl_load in -ldld" >&5
-ac_lib_var=`echo dld'_'shl_load | sed 'y%./+-%__p_%'`
-if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
-else
-  ac_save_LIBS="$LIBS"
-LIBS="-ldld  $LIBS"
-cat > conftest.$ac_ext <<EOF
-#line 2395 "ltconfig"
-#include "confdefs.h"
-/* Override any gcc2 internal prototype to avoid an error.  */
-/* We use char because int might match the return type of a gcc2
-    builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char shl_load();
-
-int main() {
-shl_load()
-; return 0; }
-EOF
-if { (eval echo $progname:2409: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-  rm -rf conftest*
-  eval "ac_cv_lib_$ac_lib_var=yes"
-else
-  echo "$progname: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  eval "ac_cv_lib_$ac_lib_var=no"
-fi
-rm -f conftest*
-LIBS="$ac_save_LIBS"
-
-fi
-if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
-  echo "$ac_t""yes" 1>&6
-  lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"
-else
-  echo "$ac_t""no" 1>&6
-fi
-
-
-fi
-
-    
-fi
-
-  
-fi
-
-
-fi
-
-fi
-
-  if test "x$lt_cv_dlopen" != xno; then
-    enable_dlopen=yes
-  fi
-
-  case "$lt_cv_dlopen" in
-  dlopen)
-for ac_hdr in dlfcn.h; do
-ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
-echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "$progname:2452: checking for $ac_hdr" >&5
-if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
-else
-  cat > conftest.$ac_ext <<EOF
-#line 2457 "ltconfig"
-#include <$ac_hdr>
-int fnord = 0;
-EOF
-ac_try="$ac_compile >/dev/null 2>conftest.out"
-{ (eval echo $progname:2462: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
-if test -z "$ac_err"; then
-  rm -rf conftest*
-  eval "ac_cv_header_$ac_safe=yes"
-else
-  echo "$ac_err" >&5
-  echo "$progname: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  eval "ac_cv_header_$ac_safe=no"
-fi
-rm -f conftest*
-fi
-if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
-  echo "$ac_t""yes" 1>&6
-else
-  echo "$ac_t""no" 1>&6
-fi
-done
-
-    if test "x$ac_cv_header_dlfcn_h" = xyes; then
-      CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
-    fi
-    eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
-    LIBS="$lt_cv_dlopen_libs $LIBS"
-
-  echo $ac_n "checking whether a program can dlopen itself""... $ac_c" 1>&6
-echo "$progname:2490: checking whether a program can dlopen itself" >&5
-if test "${lt_cv_dlopen_self+set}" = set; then
-  echo $ac_n "(cached) $ac_c" 1>&6
-else
-  if test "$cross_compiling" = yes; then
-    lt_cv_dlopen_self=cross
-  else
-    cat > conftest.c <<EOF
-#line 2498 "ltconfig"
-
-#if HAVE_DLFCN_H
-#include <dlfcn.h>
-#endif
-
-#include <stdio.h>
-
-#ifdef RTLD_GLOBAL
-# define LTDL_GLOBAL	RTLD_GLOBAL
-#else
-# ifdef DL_GLOBAL
-#  define LTDL_GLOBAL	DL_GLOBAL
-# else
-#  define LTDL_GLOBAL	0
-# endif
-#endif
-
-/* We may have to define LTDL_LAZY_OR_NOW in the command line if we
-   find out it does not work in some platform. */
-#ifndef LTDL_LAZY_OR_NOW
-# ifdef RTLD_LAZY
-#  define LTDL_LAZY_OR_NOW	RTLD_LAZY
-# else
-#  ifdef DL_LAZY
-#   define LTDL_LAZY_OR_NOW	DL_LAZY
-#  else
-#   ifdef RTLD_NOW
-#    define LTDL_LAZY_OR_NOW	RTLD_NOW
-#   else
-#    ifdef DL_NOW
-#     define LTDL_LAZY_OR_NOW	DL_NOW
-#    else
-#     define LTDL_LAZY_OR_NOW	0
-#    endif
-#   endif
-#  endif
-# endif
-#endif
-
-fnord() { int i=42;}
-main() { void *self, *ptr1, *ptr2; self=dlopen(0,LTDL_GLOBAL|LTDL_LAZY_OR_NOW);
-    if(self) { ptr1=dlsym(self,"fnord"); ptr2=dlsym(self,"_fnord");
-	       if(ptr1 || ptr2) { dlclose(self); exit(0); } } exit(1); } 
-
-EOF
-if { (eval echo $progname:2544: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
-then
-  lt_cv_dlopen_self=yes
-else
-  echo "$progname: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -fr conftest*
-  lt_cv_dlopen_self=no
-fi
-rm -fr conftest*
-fi
-
-fi
-
-echo "$ac_t""$lt_cv_dlopen_self" 1>&6
-
-  if test "$lt_cv_dlopen_self" = yes; then
-    LDFLAGS="$LDFLAGS $link_static_flag"
-  echo $ac_n "checking whether a statically linked program can dlopen itself""... $ac_c" 1>&6
-echo "$progname:2563: checking whether a statically linked program can dlopen itself" >&5
-if test "${lt_cv_dlopen_self_static+set}" = set; then
-  echo $ac_n "(cached) $ac_c" 1>&6
-else
-  if test "$cross_compiling" = yes; then
-    lt_cv_dlopen_self_static=cross
-  else
-    cat > conftest.c <<EOF
-#line 2571 "ltconfig"
-
-#if HAVE_DLFCN_H
-#include <dlfcn.h>
-#endif
-
-#include <stdio.h>
-
-#ifdef RTLD_GLOBAL
-# define LTDL_GLOBAL	RTLD_GLOBAL
-#else
-# ifdef DL_GLOBAL
-#  define LTDL_GLOBAL	DL_GLOBAL
-# else
-#  define LTDL_GLOBAL	0
-# endif
-#endif
-
-/* We may have to define LTDL_LAZY_OR_NOW in the command line if we
-   find out it does not work in some platform. */
-#ifndef LTDL_LAZY_OR_NOW
-# ifdef RTLD_LAZY
-#  define LTDL_LAZY_OR_NOW	RTLD_LAZY
-# else
-#  ifdef DL_LAZY
-#   define LTDL_LAZY_OR_NOW	DL_LAZY
-#  else
-#   ifdef RTLD_NOW
-#    define LTDL_LAZY_OR_NOW	RTLD_NOW
-#   else
-#    ifdef DL_NOW
-#     define LTDL_LAZY_OR_NOW	DL_NOW
-#    else
-#     define LTDL_LAZY_OR_NOW	0
-#    endif
-#   endif
-#  endif
-# endif
-#endif
-
-fnord() { int i=42;}
-main() { void *self, *ptr1, *ptr2; self=dlopen(0,LTDL_GLOBAL|LTDL_LAZY_OR_NOW);
-    if(self) { ptr1=dlsym(self,"fnord"); ptr2=dlsym(self,"_fnord");
-    if(ptr1 || ptr2) { dlclose(self); exit(0); } } exit(1); } 
-
-EOF
-if { (eval echo $progname:2617: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
-then
-  lt_cv_dlopen_self_static=yes
-else
-  echo "$progname: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -fr conftest*
-  lt_cv_dlopen_self_static=no
-fi
-rm -fr conftest*
-fi
-
-fi
-
-echo "$ac_t""$lt_cv_dlopen_self_static" 1>&6
-fi
-    ;;
-  esac
-
-  case "$lt_cv_dlopen_self" in
-  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
-  *) enable_dlopen_self=unknown ;;
-  esac
-
-  case "$lt_cv_dlopen_self_static" in
-  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
-  *) enable_dlopen_self_static=unknown ;;
-  esac
-fi
-
-# Copy echo and quote the copy, instead of the original, because it is
-# used later.
-ltecho="$echo"
-if test "X$ltecho" = "X$CONFIG_SHELL $0 --fallback-echo"; then
-   ltecho="$CONFIG_SHELL \$0 --fallback-echo"
-fi
-LTSHELL="$SHELL"
-
-LTCONFIG_VERSION="$VERSION"
-
-# Only quote variables if we're using ltmain.sh.
-case "$ltmain" in
-*.sh)
-  # Now quote all the things that may contain metacharacters.
-  for var in ltecho old_CC old_CFLAGS old_CPPFLAGS \
-    old_LD old_LDFLAGS old_LIBS \
-    old_NM old_RANLIB old_LN_S old_DLLTOOL old_OBJDUMP old_AS \
-    AR CC LD LN_S NM LTSHELL LTCONFIG_VERSION \
-    reload_flag reload_cmds wl \
-    pic_flag link_static_flag no_builtin_flag export_dynamic_flag_spec \
-    thread_safe_flag_spec whole_archive_flag_spec libname_spec \
-    library_names_spec soname_spec \
-    RANLIB old_archive_cmds old_archive_from_new_cmds old_postinstall_cmds \
-    old_postuninstall_cmds archive_cmds archive_expsym_cmds postinstall_cmds postuninstall_cmds \
-    file_magic_cmd export_symbols_cmds deplibs_check_method allow_undefined_flag no_undefined_flag \
-    finish_cmds finish_eval global_symbol_pipe global_symbol_to_cdecl \
-    hardcode_libdir_flag_spec hardcode_libdir_separator  \
-    sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
-    compiler_c_o compiler_o_lo need_locks exclude_expsyms include_expsyms; do
-
-    case "$var" in
-    reload_cmds | old_archive_cmds | old_archive_from_new_cmds | \
-    old_postinstall_cmds | old_postuninstall_cmds | \
-    export_symbols_cmds | archive_cmds | archive_expsym_cmds | \
-    postinstall_cmds | postuninstall_cmds | \
-    finish_cmds | sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
-      # Double-quote double-evaled strings.
-      eval "$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
-      ;;
-    *)
-      eval "$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
-      ;;
-    esac
-  done
-
-  case "$ltecho" in
-  *'\$0 --fallback-echo"')
-    ltecho=`$echo "X$ltecho" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'`
-    ;;
-  esac
-
-  trap "$rm \"$ofile\"; exit 1" 1 2 15
-  echo "creating $ofile"
-  $rm "$ofile"
-  cat <<EOF > "$ofile"
-#! $SHELL
-
-# `$echo "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
-# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP)
-# NOTE: Changes made to this file will be lost: look at ltconfig or ltmain.sh.
-#
-# Copyright (C) 1996-1999 Free Software Foundation, Inc.
-# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-# Sed that helps us avoid accidentally triggering echo(1) options like -n.
-Xsed="sed -e s/^X//"
-
-# The HP-UX ksh and POSIX shell print the target directory to stdout
-# if CDPATH is set.
-if test "X\${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi
-
-### BEGIN LIBTOOL CONFIG
-EOF
-  cfgfile="$ofile"
-  ;;
-
-*)
-  # Double-quote the variables that need it (for aesthetics).
-  for var in old_CC old_CFLAGS old_CPPFLAGS \
-    old_LD old_LDFLAGS old_LIBS \
-    old_NM old_RANLIB old_LN_S old_DLLTOOL old_OBJDUMP old_AS; do
-    eval "$var=\\\"\$var\\\""
-  done
-
-  # Just create a config file.
-  cfgfile="$ofile.cfg"
-  trap "$rm \"$cfgfile\"; exit 1" 1 2 15
-  echo "creating $cfgfile"
-  $rm "$cfgfile"
-  cat <<EOF > "$cfgfile"
-# `$echo "$cfgfile" | sed 's%^.*/%%'` - Libtool configuration file.
-# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP)
-EOF
-  ;;
-esac
-
-cat <<EOF >> "$cfgfile"
-# Libtool was configured as follows, on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
-#
-# CC=$old_CC CFLAGS=$old_CFLAGS CPPFLAGS=$old_CPPFLAGS \\
-# LD=$old_LD LDFLAGS=$old_LDFLAGS LIBS=$old_LIBS \\
-# NM=$old_NM RANLIB=$old_RANLIB LN_S=$old_LN_S \\
-# DLLTOOL=$old_DLLTOOL OBJDUMP=$old_OBJDUMP AS=$old_AS \\
-#   $0$ltconfig_args
-#
-# Compiler and other test output produced by $progname, useful for
-# debugging $progname, is in ./config.log if it exists.
-
-# The version of $progname that generated this script.
-LTCONFIG_VERSION=$LTCONFIG_VERSION
-
-# Shell to use when invoking shell scripts.
-SHELL=$LTSHELL
-
-# Whether or not to build shared libraries.
-build_libtool_libs=$enable_shared
-
-# Whether or not to build static libraries.
-build_old_libs=$enable_static
-
-# Whether or not to optimize for fast installation.
-fast_install=$enable_fast_install
-
-# The host system.
-host_alias=$host_alias
-host=$host
-
-# An echo program that does not interpret backslashes.
-echo=$ltecho
-
-# The archiver.
-AR=$AR
-
-# The default C compiler.
-CC=$CC
-
-# The linker used to build libraries.
-LD=$LD
-
-# Whether we need hard or soft links.
-LN_S=$LN_S
-
-# A BSD-compatible nm program.
-NM=$NM
-
-# Used on cygwin: DLL creation program.
-DLLTOOL="$DLLTOOL"
-
-# Used on cygwin: object dumper.
-OBJDUMP="$OBJDUMP"
-
-# Used on cygwin: assembler.
-AS="$AS"
-
-# The name of the directory that contains temporary libtool files.
-objdir=$objdir
-
-# How to create reloadable object files.
-reload_flag=$reload_flag
-reload_cmds=$reload_cmds
-
-# How to pass a linker flag through the compiler.
-wl=$wl
-
-# Object file suffix (normally "o").
-objext="$objext"
-
-# Old archive suffix (normally "a").
-libext="$libext"
-
-# Executable file suffix (normally "").
-exeext="$exeext"
-
-# Additional compiler flags for building library objects.
-pic_flag=$pic_flag
-
-# Does compiler simultaneously support -c and -o options?
-compiler_c_o=$compiler_c_o
-
-# Can we write directly to a .lo ?
-compiler_o_lo=$compiler_o_lo
-
-# Must we lock files when doing compilation ?
-need_locks=$need_locks
-
-# Do we need the lib prefix for modules?
-need_lib_prefix=$need_lib_prefix
-
-# Do we need a version for libraries?
-need_version=$need_version
-
-# Whether dlopen is supported.
-dlopen=$enable_dlopen
-
-# Whether dlopen of programs is supported.
-dlopen_self=$enable_dlopen_self
-
-# Whether dlopen of statically linked programs is supported.
-dlopen_self_static=$enable_dlopen_self_static
-
-# Compiler flag to prevent dynamic linking.
-link_static_flag=$link_static_flag
-
-# Compiler flag to turn off builtin functions.
-no_builtin_flag=$no_builtin_flag
-
-# Compiler flag to allow reflexive dlopens.
-export_dynamic_flag_spec=$export_dynamic_flag_spec
-
-# Compiler flag to generate shared objects directly from archives.
-whole_archive_flag_spec=$whole_archive_flag_spec
-
-# Compiler flag to generate thread-safe objects.
-thread_safe_flag_spec=$thread_safe_flag_spec
-
-# Library versioning type.
-version_type=$version_type
-
-# Format of library name prefix.
-libname_spec=$libname_spec
-
-# List of archive names.  First name is the real one, the rest are links.
-# The last name is the one that the linker finds with -lNAME.
-library_names_spec=$library_names_spec
-
-# The coded name of the library, if different from the real name.
-soname_spec=$soname_spec
-
-# Commands used to build and install an old-style archive.
-RANLIB=$RANLIB
-old_archive_cmds=$old_archive_cmds
-old_postinstall_cmds=$old_postinstall_cmds
-old_postuninstall_cmds=$old_postuninstall_cmds
-
-# Create an old-style archive from a shared archive.
-old_archive_from_new_cmds=$old_archive_from_new_cmds
-
-# Commands used to build and install a shared archive.
-archive_cmds=$archive_cmds
-archive_expsym_cmds=$archive_expsym_cmds
-postinstall_cmds=$postinstall_cmds
-postuninstall_cmds=$postuninstall_cmds
-
-# Method to check whether dependent libraries are shared objects.
-deplibs_check_method=$deplibs_check_method
-
-# Command to use when deplibs_check_method == file_magic.
-file_magic_cmd=$file_magic_cmd
-
-# Flag that allows shared libraries with undefined symbols to be built.
-allow_undefined_flag=$allow_undefined_flag
-
-# Flag that forces no undefined symbols.
-no_undefined_flag=$no_undefined_flag
-
-# Commands used to finish a libtool library installation in a directory.
-finish_cmds=$finish_cmds
-
-# Same as above, but a single script fragment to be evaled but not shown.
-finish_eval=$finish_eval
-
-# Take the output of nm and produce a listing of raw symbols and C names.
-global_symbol_pipe=$global_symbol_pipe
-
-# Transform the output of nm in a proper C declaration
-global_symbol_to_cdecl=$global_symbol_to_cdecl
-
-# This is the shared library runtime path variable.
-runpath_var=$runpath_var
-
-# This is the shared library path variable.
-shlibpath_var=$shlibpath_var
-
-# Is shlibpath searched before the hard-coded library search path?
-shlibpath_overrides_runpath=$shlibpath_overrides_runpath
-
-# How to hardcode a shared library path into an executable.
-hardcode_action=$hardcode_action
-
-# Flag to hardcode \$libdir into a binary during linking.
-# This must work even if \$libdir does not exist.
-hardcode_libdir_flag_spec=$hardcode_libdir_flag_spec
-
-# Whether we need a single -rpath flag with a separated argument.
-hardcode_libdir_separator=$hardcode_libdir_separator
-
-# Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the
-# resulting binary.
-hardcode_direct=$hardcode_direct
-
-# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
-# resulting binary.
-hardcode_minus_L=$hardcode_minus_L
-
-# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
-# the resulting binary.
-hardcode_shlibpath_var=$hardcode_shlibpath_var
-
-# Compile-time system search path for libraries
-sys_lib_search_path_spec=$sys_lib_search_path_spec
-
-# Run-time system search path for libraries
-sys_lib_dlsearch_path_spec=$sys_lib_dlsearch_path_spec
-
-# Fix the shell variable \$srcfile for the compiler.
-fix_srcfile_path="$fix_srcfile_path"
-
-# Set to yes if exported symbols are required.
-always_export_symbols=$always_export_symbols
-
-# The commands to list exported symbols.
-export_symbols_cmds=$export_symbols_cmds
-
-# Symbols that should not be listed in the preloaded symbols.
-exclude_expsyms=$exclude_expsyms
-
-# Symbols that must always be exported.
-include_expsyms=$include_expsyms
-
-EOF
-
-case "$ltmain" in
-*.sh)
-  echo '### END LIBTOOL CONFIG' >> "$ofile"
-  echo >> "$ofile"
-  case "$host_os" in
-  aix3*)
-    cat <<\EOF >> "$ofile"
-
-# AIX sometimes has problems with the GCC collect2 program.  For some
-# reason, if we set the COLLECT_NAMES environment variable, the problems
-# vanish in a puff of smoke.
-if test "X${COLLECT_NAMES+set}" != Xset; then
-  COLLECT_NAMES=
-  export COLLECT_NAMES
-fi
-EOF
-    ;;
-  esac
-
-  # Append the ltmain.sh script.
-  sed '$q' "$ltmain" >> "$ofile" || (rm -f "$ofile"; exit 1)
-  # We use sed instead of cat because bash on DJGPP gets confused if
-  # if finds mixed CR/LF and LF-only lines.  Since sed operates in
-  # text mode, it properly converts lines to CR/LF.  This bash problem
-  # is reportedly fixed, but why not run on old versions too?
-
-  chmod +x "$ofile"
-  ;;
-
-*)
-  # Compile the libtool program.
-  echo "FIXME: would compile $ltmain"
-  ;;
-esac
-
-test -n "$cache_file" || exit 0
-
-# AC_CACHE_SAVE
-trap '' 1 2 15
-cat > confcache <<\EOF
-# This file is a shell script that caches the results of configure
-# tests run on this system so they can be shared between configure
-# scripts and configure runs.  It is not useful on other systems.
-# If it contains results you don't want to keep, you may remove or edit it.
-#
-# By default, configure uses ./config.cache as the cache file,
-# creating it if it does not exist already.  You can give configure
-# the --cache-file=FILE option to use a different cache file; that is
-# what configure does when it calls configure scripts in
-# subdirectories, so they share the cache.
-# Giving --cache-file=/dev/null disables caching, for debugging configure.
-# config.status only pays attention to the cache file if you give it the
-# --recheck option to rerun configure.
-#
-EOF
-# The following way of writing the cache mishandles newlines in values,
-# but we know of no workaround that is simple, portable, and efficient.
-# So, don't put newlines in cache variables' values.
-# Ultrix sh set writes to stderr and can't be redirected directly,
-# and sets the high bit in the cache file unless we assign to the vars.
-(set) 2>&1 |
-  case `(ac_space=' '; set | grep ac_space) 2>&1` in
-  *ac_space=\ *)
-    # `set' does not quote correctly, so add quotes (double-quote substitution
-    # turns \\\\ into \\, and sed turns \\ into \).
-    sed -n \
-      -e "s/'/'\\\\''/g" \
-      -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p"
-    ;;
-  *)
-    # `set' quotes correctly as required by POSIX, so do not add quotes.
-    sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p'
-    ;;
-  esac >> confcache
-if cmp -s $cache_file confcache; then
-  :
-else
-  if test -w $cache_file; then
-    echo "updating cache $cache_file"
-    cat confcache > $cache_file
-  else
-    echo "not updating unwritable cache $cache_file"
-  fi
-fi
-rm -f confcache
-
-exit 0
-
-# Local Variables:
-# mode:shell-script
-# sh-indentation:2
-# End:
diff --git a/srclib/pcre/ltmain.sh b/srclib/pcre/ltmain.sh
deleted file mode 100644
index 50515ad..0000000
--- a/srclib/pcre/ltmain.sh
+++ /dev/null
@@ -1,4012 +0,0 @@
-# ltmain.sh - Provide generalized library-building support services.
-# NOTE: Changing this file will not affect anything until you rerun ltconfig.
-#
-# Copyright (C) 1996-1999 Free Software Foundation, Inc.
-# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-# Check that we have a working $echo.
-if test "X$1" = X--no-reexec; then
-  # Discard the --no-reexec flag, and continue.
-  shift
-elif test "X$1" = X--fallback-echo; then
-  # Avoid inline document here, it may be left over
-  :
-elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then
-  # Yippee, $echo works!
-  :
-else
-  # Restart under the correct shell, and then maybe $echo will work.
-  exec $SHELL "$0" --no-reexec ${1+"$@"}
-fi
-
-if test "X$1" = X--fallback-echo; then
-  # used as fallback echo
-  shift
-  cat <<EOF
-$*
-EOF
-  exit 0
-fi
-
-# The name of this program.
-progname=`$echo "$0" | sed 's%^.*/%%'`
-modename="$progname"
-
-# Constants.
-PROGRAM=ltmain.sh
-PACKAGE=libtool
-VERSION=1.3.4
-TIMESTAMP=" (1.385.2.196 1999/12/07 21:47:57)"
-
-default_mode=
-help="Try \`$progname --help' for more information."
-magic="%%%MAGIC variable%%%"
-mkdir="mkdir"
-mv="mv -f"
-rm="rm -f"
-
-# Sed substitution that helps us do robust quoting.  It backslashifies
-# metacharacters that are still active within double-quoted strings.
-Xsed='sed -e 1s/^X//'
-sed_quote_subst='s/\([\\`\\"$\\\\]\)/\\\1/g'
-SP2NL='tr \040 \012'
-NL2SP='tr \015\012 \040\040'
-
-# NLS nuisances.
-# Only set LANG and LC_ALL to C if already set.
-# These must not be set unconditionally because not all systems understand
-# e.g. LANG=C (notably SCO).
-# We save the old values to restore during execute mode.
-if test "${LC_ALL+set}" = set; then
-  save_LC_ALL="$LC_ALL"; LC_ALL=C; export LC_ALL
-fi
-if test "${LANG+set}" = set; then
-  save_LANG="$LANG"; LANG=C; export LANG
-fi
-
-if test "$LTCONFIG_VERSION" != "$VERSION"; then
-  echo "$modename: ltconfig version \`$LTCONFIG_VERSION' does not match $PROGRAM version \`$VERSION'" 1>&2
-  echo "Fatal configuration error.  See the $PACKAGE docs for more information." 1>&2
-  exit 1
-fi
-
-if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
-  echo "$modename: not configured to build any kind of library" 1>&2
-  echo "Fatal configuration error.  See the $PACKAGE docs for more information." 1>&2
-  exit 1
-fi
-
-# Global variables.
-mode=$default_mode
-nonopt=
-prev=
-prevopt=
-run=
-show="$echo"
-show_help=
-execute_dlfiles=
-lo2o="s/\\.lo\$/.${objext}/"
-o2lo="s/\\.${objext}\$/.lo/"
-
-# Parse our command line options once, thoroughly.
-while test $# -gt 0
-do
-  arg="$1"
-  shift
-
-  case "$arg" in
-  -*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;;
-  *) optarg= ;;
-  esac
-
-  # If the previous option needs an argument, assign it.
-  if test -n "$prev"; then
-    case "$prev" in
-    execute_dlfiles)
-      eval "$prev=\"\$$prev \$arg\""
-      ;;
-    *)
-      eval "$prev=\$arg"
-      ;;
-    esac
-
-    prev=
-    prevopt=
-    continue
-  fi
-
-  # Have we seen a non-optional argument yet?
-  case "$arg" in
-  --help)
-    show_help=yes
-    ;;
-
-  --version)
-    echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP"
-    exit 0
-    ;;
-
-  --config)
-    sed -e '1,/^### BEGIN LIBTOOL CONFIG/d' -e '/^### END LIBTOOL CONFIG/,$d' $0
-    exit 0
-    ;;
-
-  --debug)
-    echo "$progname: enabling shell trace mode"
-    set -x
-    ;;
-
-  --dry-run | -n)
-    run=:
-    ;;
-
-  --features)
-    echo "host: $host"
-    if test "$build_libtool_libs" = yes; then
-      echo "enable shared libraries"
-    else
-      echo "disable shared libraries"
-    fi
-    if test "$build_old_libs" = yes; then
-      echo "enable static libraries"
-    else
-      echo "disable static libraries"
-    fi
-    exit 0
-    ;;
-
-  --finish) mode="finish" ;;
-
-  --mode) prevopt="--mode" prev=mode ;;
-  --mode=*) mode="$optarg" ;;
-
-  --quiet | --silent)
-    show=:
-    ;;
-
-  -dlopen)
-    prevopt="-dlopen"
-    prev=execute_dlfiles
-    ;;
-
-  -*)
-    $echo "$modename: unrecognized option \`$arg'" 1>&2
-    $echo "$help" 1>&2
-    exit 1
-    ;;
-
-  *)
-    nonopt="$arg"
-    break
-    ;;
-  esac
-done
-
-if test -n "$prevopt"; then
-  $echo "$modename: option \`$prevopt' requires an argument" 1>&2
-  $echo "$help" 1>&2
-  exit 1
-fi
-
-if test -z "$show_help"; then
-
-  # Infer the operation mode.
-  if test -z "$mode"; then
-    case "$nonopt" in
-    *cc | *++ | gcc* | *-gcc*)
-      mode=link
-      for arg
-      do
-	case "$arg" in
-	-c)
-	   mode=compile
-	   break
-	   ;;
-	esac
-      done
-      ;;
-    *db | *dbx | *strace | *truss)
-      mode=execute
-      ;;
-    *install*|cp|mv)
-      mode=install
-      ;;
-    *rm)
-      mode=uninstall
-      ;;
-    *)
-      # If we have no mode, but dlfiles were specified, then do execute mode.
-      test -n "$execute_dlfiles" && mode=execute
-
-      # Just use the default operation mode.
-      if test -z "$mode"; then
-	if test -n "$nonopt"; then
-	  $echo "$modename: warning: cannot infer operation mode from \`$nonopt'" 1>&2
-	else
-	  $echo "$modename: warning: cannot infer operation mode without MODE-ARGS" 1>&2
-	fi
-      fi
-      ;;
-    esac
-  fi
-
-  # Only execute mode is allowed to have -dlopen flags.
-  if test -n "$execute_dlfiles" && test "$mode" != execute; then
-    $echo "$modename: unrecognized option \`-dlopen'" 1>&2
-    $echo "$help" 1>&2
-    exit 1
-  fi
-
-  # Change the help message to a mode-specific one.
-  generic_help="$help"
-  help="Try \`$modename --help --mode=$mode' for more information."
-
-  # These modes are in order of execution frequency so that they run quickly.
-  case "$mode" in
-  # libtool compile mode
-  compile)
-    modename="$modename: compile"
-    # Get the compilation command and the source file.
-    base_compile=
-    lastarg=
-    srcfile="$nonopt"
-    suppress_output=
-
-    user_target=no
-    for arg
-    do
-      # Accept any command-line options.
-      case "$arg" in
-      -o)
-	if test "$user_target" != "no"; then
-	  $echo "$modename: you cannot specify \`-o' more than once" 1>&2
-	  exit 1
-	fi
-	user_target=next
-	;;
-
-      -static)
-	build_old_libs=yes
-	continue
-	;;
-      esac
-
-      case "$user_target" in
-      next)
-	# The next one is the -o target name
-	user_target=yes
-	continue
-	;;
-      yes)
-	# We got the output file
-	user_target=set
-	libobj="$arg"
-	continue
-	;;
-      esac
-
-      # Accept the current argument as the source file.
-      lastarg="$srcfile"
-      srcfile="$arg"
-
-      # Aesthetically quote the previous argument.
-
-      # Backslashify any backslashes, double quotes, and dollar signs.
-      # These are the only characters that are still specially
-      # interpreted inside of double-quoted scrings.
-      lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"`
-
-      # Double-quote args containing other shell metacharacters.
-      # Many Bourne shells cannot handle close brackets correctly in scan
-      # sets, so we specify it separately.
-      case "$lastarg" in
-      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*)
-	lastarg="\"$lastarg\""
-	;;
-      esac
-
-      # Add the previous argument to base_compile.
-      if test -z "$base_compile"; then
-	base_compile="$lastarg"
-      else
-	base_compile="$base_compile $lastarg"
-      fi
-    done
-
-    case "$user_target" in
-    set)
-      ;;
-    no)
-      # Get the name of the library object.
-      libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'`
-      ;;
-    *)
-      $echo "$modename: you must specify a target with \`-o'" 1>&2
-      exit 1
-      ;;
-    esac
-
-    # Recognize several different file suffixes.
-    # If the user specifies -o file.o, it is replaced with file.lo
-    xform='[cCFSfmso]'
-    case "$libobj" in
-    *.ada) xform=ada ;;
-    *.adb) xform=adb ;;
-    *.ads) xform=ads ;;
-    *.asm) xform=asm ;;
-    *.c++) xform=c++ ;;
-    *.cc) xform=cc ;;
-    *.cpp) xform=cpp ;;
-    *.cxx) xform=cxx ;;
-    *.f90) xform=f90 ;;
-    *.for) xform=for ;;
-    esac
-
-    libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"`
-
-    case "$libobj" in
-    *.lo) obj=`$echo "X$libobj" | $Xsed -e "$lo2o"` ;;
-    *)
-      $echo "$modename: cannot determine name of library object from \`$libobj'" 1>&2
-      exit 1
-      ;;
-    esac
-
-    if test -z "$base_compile"; then
-      $echo "$modename: you must specify a compilation command" 1>&2
-      $echo "$help" 1>&2
-      exit 1
-    fi
-
-    # Delete any leftover library objects.
-    if test "$build_old_libs" = yes; then
-      removelist="$obj $libobj"
-    else
-      removelist="$libobj"
-    fi
-
-    $run $rm $removelist
-    trap "$run $rm $removelist; exit 1" 1 2 15
-
-    # Calculate the filename of the output object if compiler does
-    # not support -o with -c
-    if test "$compiler_c_o" = no; then
-      output_obj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\..*$%%'`.${objext}
-      lockfile="$output_obj.lock"
-      removelist="$removelist $output_obj $lockfile"
-      trap "$run $rm $removelist; exit 1" 1 2 15
-    else
-      need_locks=no
-      lockfile=
-    fi
-
-    # Lock this critical section if it is needed
-    # We use this script file to make the link, it avoids creating a new file
-    if test "$need_locks" = yes; then
-      until ln "$0" "$lockfile" 2>/dev/null; do
-	$show "Waiting for $lockfile to be removed"
-	sleep 2
-      done
-    elif test "$need_locks" = warn; then
-      if test -f "$lockfile"; then
-	echo "\
-*** ERROR, $lockfile exists and contains:
-`cat $lockfile 2>/dev/null`
-
-This indicates that another process is trying to use the same
-temporary object file, and libtool could not work around it because
-your compiler does not support \`-c' and \`-o' together.  If you
-repeat this compilation, it may succeed, by chance, but you had better
-avoid parallel builds (make -j) in this platform, or get a better
-compiler."
-
-	$run $rm $removelist
-	exit 1
-      fi
-      echo $srcfile > "$lockfile"
-    fi
-
-    if test -n "$fix_srcfile_path"; then
-      eval srcfile=\"$fix_srcfile_path\"
-    fi
-
-    # Only build a PIC object if we are building libtool libraries.
-    if test "$build_libtool_libs" = yes; then
-      # Without this assignment, base_compile gets emptied.
-      fbsd_hideous_sh_bug=$base_compile
-
-      # All platforms use -DPIC, to notify preprocessed assembler code.
-      command="$base_compile $srcfile $pic_flag -DPIC"
-      if test "$build_old_libs" = yes; then
-	lo_libobj="$libobj"
-	dir=`$echo "X$libobj" | $Xsed -e 's%/[^/]*$%%'`
-	if test "X$dir" = "X$libobj"; then
-	  dir="$objdir"
-	else
-	  dir="$dir/$objdir"
-	fi
-	libobj="$dir/"`$echo "X$libobj" | $Xsed -e 's%^.*/%%'`
-
-	if test -d "$dir"; then
-	  $show "$rm $libobj"
-	  $run $rm $libobj
-	else
-	  $show "$mkdir $dir"
-	  $run $mkdir $dir
-	  status=$?
-	  if test $status -ne 0 && test ! -d $dir; then
-	    exit $status
-	  fi
-	fi
-      fi
-      if test "$compiler_o_lo" = yes; then
-	output_obj="$libobj"
-	command="$command -o $output_obj"
-      elif test "$compiler_c_o" = yes; then
-	output_obj="$obj"
-	command="$command -o $output_obj"
-      fi
-
-      $run $rm "$output_obj"
-      $show "$command"
-      if $run eval "$command"; then :
-      else
-	test -n "$output_obj" && $run $rm $removelist
-	exit 1
-      fi
-
-      if test "$need_locks" = warn &&
-	 test x"`cat $lockfile 2>/dev/null`" != x"$srcfile"; then
-	echo "\
-*** ERROR, $lockfile contains:
-`cat $lockfile 2>/dev/null`
-
-but it should contain:
-$srcfile
-
-This indicates that another process is trying to use the same
-temporary object file, and libtool could not work around it because
-your compiler does not support \`-c' and \`-o' together.  If you
-repeat this compilation, it may succeed, by chance, but you had better
-avoid parallel builds (make -j) in this platform, or get a better
-compiler."
-
-	$run $rm $removelist
-	exit 1
-      fi
-
-      # Just move the object if needed, then go on to compile the next one
-      if test x"$output_obj" != x"$libobj"; then
-	$show "$mv $output_obj $libobj"
-	if $run $mv $output_obj $libobj; then :
-	else
-	  error=$?
-	  $run $rm $removelist
-	  exit $error
-	fi
-      fi
-
-      # If we have no pic_flag, then copy the object into place and finish.
-      if test -z "$pic_flag" && test "$build_old_libs" = yes; then
-	# Rename the .lo from within objdir to obj
-	if test -f $obj; then
-	  $show $rm $obj
-	  $run $rm $obj
-	fi
-
-	$show "$mv $libobj $obj"
-	if $run $mv $libobj $obj; then :
-	else
-	  error=$?
-	  $run $rm $removelist
-	  exit $error
-	fi
-
-	xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'`
-	if test "X$xdir" = "X$obj"; then
-	  xdir="."
-	else
-	  xdir="$xdir"
-	fi
-	baseobj=`$echo "X$obj" | $Xsed -e "s%.*/%%"`
-	libobj=`$echo "X$baseobj" | $Xsed -e "$o2lo"`
-	# Now arrange that obj and lo_libobj become the same file
-	$show "(cd $xdir && $LN_S $baseobj $libobj)"
-	if $run eval '(cd $xdir && $LN_S $baseobj $libobj)'; then
-	  exit 0
-	else
-	  error=$?
-	  $run $rm $removelist
-	  exit $error
-	fi
-      fi
-
-      # Allow error messages only from the first compilation.
-      suppress_output=' >/dev/null 2>&1'
-    fi
-
-    # Only build a position-dependent object if we build old libraries.
-    if test "$build_old_libs" = yes; then
-      command="$base_compile $srcfile"
-      if test "$compiler_c_o" = yes; then
-	command="$command -o $obj"
-	output_obj="$obj"
-      fi
-
-      # Suppress compiler output if we already did a PIC compilation.
-      command="$command$suppress_output"
-      $run $rm "$output_obj"
-      $show "$command"
-      if $run eval "$command"; then :
-      else
-	$run $rm $removelist
-	exit 1
-      fi
-
-      if test "$need_locks" = warn &&
-	 test x"`cat $lockfile 2>/dev/null`" != x"$srcfile"; then
-	echo "\
-*** ERROR, $lockfile contains:
-`cat $lockfile 2>/dev/null`
-
-but it should contain:
-$srcfile
-
-This indicates that another process is trying to use the same
-temporary object file, and libtool could not work around it because
-your compiler does not support \`-c' and \`-o' together.  If you
-repeat this compilation, it may succeed, by chance, but you had better
-avoid parallel builds (make -j) in this platform, or get a better
-compiler."
-
-	$run $rm $removelist
-	exit 1
-      fi
-
-      # Just move the object if needed
-      if test x"$output_obj" != x"$obj"; then
-	$show "$mv $output_obj $obj"
-	if $run $mv $output_obj $obj; then :
-	else
-	  error=$?
-	  $run $rm $removelist
-	  exit $error
-	fi
-      fi
-
-      # Create an invalid libtool object if no PIC, so that we do not
-      # accidentally link it into a program.
-      if test "$build_libtool_libs" != yes; then
-	$show "echo timestamp > $libobj"
-	$run eval "echo timestamp > \$libobj" || exit $?
-      else
-	# Move the .lo from within objdir
-	$show "$mv $libobj $lo_libobj"
-	if $run $mv $libobj $lo_libobj; then :
-	else
-	  error=$?
-	  $run $rm $removelist
-	  exit $error
-	fi
-      fi
-    fi
-
-    # Unlock the critical section if it was locked
-    if test "$need_locks" != no; then
-      $rm "$lockfile"
-    fi
-
-    exit 0
-    ;;
-
-  # libtool link mode
-  link)
-    modename="$modename: link"
-    case "$host" in
-    *-*-cygwin* | *-*-mingw* | *-*-os2*)
-      # It is impossible to link a dll without this setting, and
-      # we shouldn't force the makefile maintainer to figure out
-      # which system we are compiling for in order to pass an extra
-      # flag for every libtool invokation.
-      # allow_undefined=no
-
-      # FIXME: Unfortunately, there are problems with the above when trying
-      # to make a dll which has undefined symbols, in which case not
-      # even a static library is built.  For now, we need to specify
-      # -no-undefined on the libtool link line when we can be certain
-      # that all symbols are satisfied, otherwise we get a static library.
-      allow_undefined=yes
-
-      # This is a source program that is used to create dlls on Windows
-      # Don't remove nor modify the starting and closing comments
-# /* ltdll.c starts here */
-# #define WIN32_LEAN_AND_MEAN
-# #include <windows.h>
-# #undef WIN32_LEAN_AND_MEAN
-# #include <stdio.h>
-#
-# #ifndef __CYGWIN__
-# #  ifdef __CYGWIN32__
-# #    define __CYGWIN__ __CYGWIN32__
-# #  endif
-# #endif
-#
-# #ifdef __cplusplus
-# extern "C" {
-# #endif
-# BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved);
-# #ifdef __cplusplus
-# }
-# #endif
-#
-# #ifdef __CYGWIN__
-# #include <cygwin/cygwin_dll.h>
-# DECLARE_CYGWIN_DLL( DllMain );
-# #endif
-# HINSTANCE __hDllInstance_base;
-#
-# BOOL APIENTRY
-# DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved)
-# {
-#   __hDllInstance_base = hInst;
-#   return TRUE;
-# }
-# /* ltdll.c ends here */
-      # This is a source program that is used to create import libraries
-      # on Windows for dlls which lack them. Don't remove nor modify the
-      # starting and closing comments
-# /* impgen.c starts here */
-# /*   Copyright (C) 1999 Free Software Foundation, Inc.
-# 
-#  This file is part of GNU libtool.
-# 
-#  This program is free software; you can redistribute it and/or modify
-#  it under the terms of the GNU General Public License as published by
-#  the Free Software Foundation; either version 2 of the License, or
-#  (at your option) any later version.
-# 
-#  This program is distributed in the hope that it will be useful,
-#  but WITHOUT ANY WARRANTY; without even the implied warranty of
-#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-#  GNU General Public License for more details.
-# 
-#  You should have received a copy of the GNU General Public License
-#  along with this program; if not, write to the Free Software
-#  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#  */
-# 
-#  #include <stdio.h>		/* for printf() */
-#  #include <unistd.h>		/* for open(), lseek(), read() */
-#  #include <fcntl.h>		/* for O_RDONLY, O_BINARY */
-#  #include <string.h>		/* for strdup() */
-# 
-#  static unsigned int
-#  pe_get16 (fd, offset)
-#       int fd;
-#       int offset;
-#  {
-#    unsigned char b[2];
-#    lseek (fd, offset, SEEK_SET);
-#    read (fd, b, 2);
-#    return b[0] + (b[1]<<8);
-#  }
-# 
-#  static unsigned int
-#  pe_get32 (fd, offset)
-#      int fd;
-#      int offset;
-#  {
-#    unsigned char b[4];
-#    lseek (fd, offset, SEEK_SET);
-#    read (fd, b, 4);
-#    return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24);
-#  }
-# 
-#  static unsigned int
-#  pe_as32 (ptr)
-#       void *ptr;
-#  {
-#    unsigned char *b = ptr;
-#    return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24);
-#  }
-# 
-#  int
-#  main (argc, argv)
-#      int argc;
-#      char *argv[];
-#  {
-#      int dll;
-#      unsigned long pe_header_offset, opthdr_ofs, num_entries, i;
-#      unsigned long export_rva, export_size, nsections, secptr, expptr;
-#      unsigned long name_rvas, nexp;
-#      unsigned char *expdata, *erva;
-#      char *filename, *dll_name;
-# 
-#      filename = argv[1];
-# 
-#      dll = open(filename, O_RDONLY|O_BINARY);
-#      if (!dll)
-#  	return 1;
-# 
-#      dll_name = filename;
-#    
-#      for (i=0; filename[i]; i++)
-#  	if (filename[i] == '/' || filename[i] == '\\'  || filename[i] == ':')
-#  	    dll_name = filename + i +1;
-# 
-#      pe_header_offset = pe_get32 (dll, 0x3c);
-#      opthdr_ofs = pe_header_offset + 4 + 20;
-#      num_entries = pe_get32 (dll, opthdr_ofs + 92);
-# 
-#      if (num_entries < 1) /* no exports */
-#  	return 1;
-# 
-#      export_rva = pe_get32 (dll, opthdr_ofs + 96);
-#      export_size = pe_get32 (dll, opthdr_ofs + 100);
-#      nsections = pe_get16 (dll, pe_header_offset + 4 +2);
-#      secptr = (pe_header_offset + 4 + 20 +
-#  	      pe_get16 (dll, pe_header_offset + 4 + 16));
-# 
-#      expptr = 0;
-#      for (i = 0; i < nsections; i++)
-#      {
-#  	char sname[8];
-#  	unsigned long secptr1 = secptr + 40 * i;
-#  	unsigned long vaddr = pe_get32 (dll, secptr1 + 12);
-#  	unsigned long vsize = pe_get32 (dll, secptr1 + 16);
-#  	unsigned long fptr = pe_get32 (dll, secptr1 + 20);
-#  	lseek(dll, secptr1, SEEK_SET);
-#  	read(dll, sname, 8);
-#  	if (vaddr <= export_rva && vaddr+vsize > export_rva)
-#  	{
-#  	    expptr = fptr + (export_rva - vaddr);
-#  	    if (export_rva + export_size > vaddr + vsize)
-#  		export_size = vsize - (export_rva - vaddr);
-#  	    break;
-#  	}
-#      }
-# 
-#      expdata = (unsigned char*)malloc(export_size);
-#      lseek (dll, expptr, SEEK_SET);
-#      read (dll, expdata, export_size);
-#      erva = expdata - export_rva;
-# 
-#      nexp = pe_as32 (expdata+24);
-#      name_rvas = pe_as32 (expdata+32);
-# 
-#      printf ("EXPORTS\n");
-#      for (i = 0; i<nexp; i++)
-#      {
-#  	unsigned long name_rva = pe_as32 (erva+name_rvas+i*4);
-#  	printf ("\t%s @ %ld ;\n", erva+name_rva, 1+ i);
-#      }
-# 
-#      return 0;
-#  }
-# /* impgen.c ends here */
-      ;;
-    *)
-      allow_undefined=yes
-      ;;
-    esac
-    compile_command="$nonopt"
-    finalize_command="$nonopt"
-
-    compile_rpath=
-    finalize_rpath=
-    compile_shlibpath=
-    finalize_shlibpath=
-    convenience=
-    old_convenience=
-    deplibs=
-    linkopts=
-
-    if test -n "$shlibpath_var"; then
-      # get the directories listed in $shlibpath_var
-      eval lib_search_path=\`\$echo \"X \${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\`
-    else
-      lib_search_path=
-    fi
-    # now prepend the system-specific ones
-    eval lib_search_path=\"$sys_lib_search_path_spec\$lib_search_path\"
-    eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
-    
-    avoid_version=no
-    dlfiles=
-    dlprefiles=
-    dlself=no
-    export_dynamic=no
-    export_symbols=
-    export_symbols_regex=
-    generated=
-    libobjs=
-    link_against_libtool_libs=
-    ltlibs=
-    module=no
-    objs=
-    prefer_static_libs=no
-    preload=no
-    prev=
-    prevarg=
-    release=
-    rpath=
-    xrpath=
-    perm_rpath=
-    temp_rpath=
-    thread_safe=no
-    vinfo=
-
-    # We need to know -static, to get the right output filenames.
-    for arg
-    do
-      case "$arg" in
-      -all-static | -static)
-	if test "X$arg" = "X-all-static"; then
-	  if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then
-	    $echo "$modename: warning: complete static linking is impossible in this configuration" 1>&2
-	  fi
-	  if test -n "$link_static_flag"; then
-	    dlopen_self=$dlopen_self_static
-	  fi
-	else
-	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
-	    dlopen_self=$dlopen_self_static
-	  fi
-	fi
-	build_libtool_libs=no
-	build_old_libs=yes
-	prefer_static_libs=yes
-	break
-	;;
-      esac
-    done
-
-    # See if our shared archives depend on static archives.
-    test -n "$old_archive_from_new_cmds" && build_old_libs=yes
-
-    # Go through the arguments, transforming them on the way.
-    while test $# -gt 0; do
-      arg="$1"
-      shift
-
-      # If the previous option needs an argument, assign it.
-      if test -n "$prev"; then
-	case "$prev" in
-	output)
-	  compile_command="$compile_command @OUTPUT@"
-	  finalize_command="$finalize_command @OUTPUT@"
-	  ;;
-	esac
-
-	case "$prev" in
-	dlfiles|dlprefiles)
-	  if test "$preload" = no; then
-	    # Add the symbol object into the linking commands.
-	    compile_command="$compile_command @SYMFILE@"
-	    finalize_command="$finalize_command @SYMFILE@"
-	    preload=yes
-	  fi
-	  case "$arg" in
-	  *.la | *.lo) ;;  # We handle these cases below.
-	  force)
-	    if test "$dlself" = no; then
-	      dlself=needless
-	      export_dynamic=yes
-	    fi
-	    prev=
-	    continue
-	    ;;
-	  self)
-	    if test "$prev" = dlprefiles; then
-	      dlself=yes
-	    elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then
-	      dlself=yes
-	    else
-	      dlself=needless
-	      export_dynamic=yes
-	    fi
-	    prev=
-	    continue
-	    ;;
-	  *)
-	    if test "$prev" = dlfiles; then
-	      dlfiles="$dlfiles $arg"
-	    else
-	      dlprefiles="$dlprefiles $arg"
-	    fi
-	    prev=
-	    ;;
-	  esac
-	  ;;
-	expsyms)
-	  export_symbols="$arg"
-	  if test ! -f "$arg"; then
-	    $echo "$modename: symbol file \`$arg' does not exist"
-	    exit 1
-	  fi
-	  prev=
-	  continue
-	  ;;
-	expsyms_regex)
-	  export_symbols_regex="$arg"
-	  prev=
-	  continue
-	  ;;
-	release)
-	  release="-$arg"
-	  prev=
-	  continue
-	  ;;
-	rpath | xrpath)
-	  # We need an absolute path.
-	  case "$arg" in
-	  [\\/]* | [A-Za-z]:[\\/]*) ;;
-	  *)
-	    $echo "$modename: only absolute run-paths are allowed" 1>&2
-	    exit 1
-	    ;;
-	  esac
-	  if test "$prev" = rpath; then
-	    case "$rpath " in
-	    *" $arg "*) ;;
-	    *) rpath="$rpath $arg" ;;
-	    esac
-	  else
-	    case "$xrpath " in
-	    *" $arg "*) ;;
-	    *) xrpath="$xrpath $arg" ;;
-	    esac
-	  fi
-	  prev=
-	  continue
-	  ;;
-	*)
-	  eval "$prev=\"\$arg\""
-	  prev=
-	  continue
-	  ;;
-	esac
-      fi
-
-      prevarg="$arg"
-
-      case "$arg" in
-      -all-static)
-	if test -n "$link_static_flag"; then
-	  compile_command="$compile_command $link_static_flag"
-	  finalize_command="$finalize_command $link_static_flag"
-	fi
-	continue
-	;;
-
-      -allow-undefined)
-	# FIXME: remove this flag sometime in the future.
-	$echo "$modename: \`-allow-undefined' is deprecated because it is the default" 1>&2
-	continue
-	;;
-
-      -avoid-version)
-	avoid_version=yes
-	continue
-	;;
-
-      -dlopen)
-	prev=dlfiles
-	continue
-	;;
-
-      -dlpreopen)
-	prev=dlprefiles
-	continue
-	;;
-
-      -export-dynamic)
-	export_dynamic=yes
-	continue
-	;;
-
-      -export-symbols | -export-symbols-regex)
-	if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
-	  $echo "$modename: not more than one -exported-symbols argument allowed"
-	  exit 1
-	fi
-	if test "X$arg" = "X-export-symbols"; then
-	  prev=expsyms
-	else
-	  prev=expsyms_regex
-	fi
-	continue
-	;;
-
-      -L*)
-	dir=`$echo "X$arg" | $Xsed -e 's/^-L//'`
-	# We need an absolute path.
-	case "$dir" in
-	[\\/]* | [A-Za-z]:[\\/]*) ;;
-	*)
-	  absdir=`cd "$dir" && pwd`
-	  if test -z "$absdir"; then
-	    $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2
-	    $echo "$modename: passing it literally to the linker, although it might fail" 1>&2
-	    absdir="$dir"
-	  fi
-	  dir="$absdir"
-	  ;;
-	esac
-	case " $deplibs " in
-	*" $arg "*) ;;
-	*) deplibs="$deplibs $arg";;
-	esac
-	case " $lib_search_path " in
-	*" $dir "*) ;;
-	*) lib_search_path="$lib_search_path $dir";;
-	esac
-	case "$host" in
-	*-*-cygwin* | *-*-mingw* | *-*-os2*)
-	  dllsearchdir=`cd "$dir" && pwd || echo "$dir"`
-	  case ":$dllsearchpath:" in
-	  ::) dllsearchpath="$dllsearchdir";;
-	  *":$dllsearchdir:"*) ;;
-	  *) dllsearchpath="$dllsearchpath:$dllsearchdir";;
-	  esac
-	  ;;
-	esac
-	;;
-
-      -l*)
-	if test "$arg" = "-lc"; then
-	  case "$host" in
-	  *-*-cygwin* | *-*-mingw* | *-*-os2* | *-*-beos*)
-	    # These systems don't actually have c library (as such)
-	    continue
-	    ;;
-	  esac
-	elif test "$arg" = "-lm"; then
-	  case "$host" in
-	  *-*-cygwin* | *-*-beos*)
-	    # These systems don't actually have math library (as such)
-	    continue
-	    ;;
-	  esac
-	fi
-	deplibs="$deplibs $arg"
-	;;
-
-      -module)
-	module=yes
-	continue
-	;;
-
-      -no-undefined)
-	allow_undefined=no
-	continue
-	;;
-
-      -o) prev=output ;;
-
-      -release)
-	prev=release
-	continue
-	;;
-
-      -rpath)
-	prev=rpath
-	continue
-	;;
-
-      -R)
-	prev=xrpath
-	continue
-	;;
-
-      -R*)
-	dir=`$echo "X$arg" | $Xsed -e 's/^-R//'`
-	# We need an absolute path.
-	case "$dir" in
-	[\\/]* | [A-Za-z]:[\\/]*) ;;
-	*)
-	  $echo "$modename: only absolute run-paths are allowed" 1>&2
-	  exit 1
-	  ;;
-	esac
-	case "$xrpath " in
-	*" $dir "*) ;;
-	*) xrpath="$xrpath $dir" ;;
-	esac
-	continue
-	;;
-
-      -static)
-	# If we have no pic_flag, then this is the same as -all-static.
-	if test -z "$pic_flag" && test -n "$link_static_flag"; then
-	  compile_command="$compile_command $link_static_flag"
-	  finalize_command="$finalize_command $link_static_flag"
-	fi
-	continue
-	;;
-
-      -thread-safe)
-	thread_safe=yes
-	continue
-	;;
-
-      -version-info)
-	prev=vinfo
-	continue
-	;;
-
-      # Some other compiler flag.
-      -* | +*)
-	# Unknown arguments in both finalize_command and compile_command need
-	# to be aesthetically quoted because they are evaled later.
-	arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
-	case "$arg" in
-	*[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*)
-	  arg="\"$arg\""
-	  ;;
-	esac
-	;;
-
-      *.o | *.obj | *.a | *.lib)
-	# A standard object.
-	objs="$objs $arg"
-	;;
-
-      *.lo)
-	# A library object.
-	if test "$prev" = dlfiles; then
-	  dlfiles="$dlfiles $arg"
-	  if test "$build_libtool_libs" = yes && test "$dlopen" = yes; then
-	    prev=
-	    continue
-	  else
-	    # If libtool objects are unsupported, then we need to preload.
-	    prev=dlprefiles
-	  fi
-	fi
-
-	if test "$prev" = dlprefiles; then
-	  # Preload the old-style object.
-	  dlprefiles="$dlprefiles "`$echo "X$arg" | $Xsed -e "$lo2o"`
-	  prev=
-	fi
-	libobjs="$libobjs $arg"
-	;;
-
-      *.la)
-	# A libtool-controlled library.
-
-	dlname=
-	libdir=
-	library_names=
-	old_library=
-
-	# Check to see that this really is a libtool archive.
-	if (sed -e '2q' $arg | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
-	else
-	  $echo "$modename: \`$arg' is not a valid libtool archive" 1>&2
-	  exit 1
-	fi
-
-	# If the library was installed with an old release of libtool,
-	# it will not redefine variable installed.
-	installed=yes
-
-	# Read the .la file
-	# If there is no directory component, then add one.
-	case "$arg" in
-	*/* | *\\*) . $arg ;;
-	*) . ./$arg ;;
-	esac
-
-	# Get the name of the library we link against.
-	linklib=
-	for l in $old_library $library_names; do
-	  linklib="$l"
-	done
-
-	if test -z "$linklib"; then
-	  $echo "$modename: cannot find name of link library for \`$arg'" 1>&2
-	  exit 1
-	fi
-
-	# Find the relevant object directory and library name.
-	name=`$echo "X$arg" | $Xsed -e 's%^.*/%%' -e 's/\.la$//' -e 's/^lib//'`
-
-	if test "X$installed" = Xyes; then
-	  dir="$libdir"
-	else
-	  dir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
-	  if test "X$dir" = "X$arg"; then
-	    dir="$objdir"
-	  else
-	    dir="$dir/$objdir"
-	  fi
-	fi
-
-	if test -n "$dependency_libs"; then
-	  # Extract -R and -L from dependency_libs
-	  temp_deplibs=
-	  for deplib in $dependency_libs; do
-	    case "$deplib" in
-	    -R*) temp_xrpath=`$echo "X$deplib" | $Xsed -e 's/^-R//'`
-		 case " $rpath $xrpath " in
-		 *" $temp_xrpath "*) ;;
-		 *) xrpath="$xrpath $temp_xrpath";;
-		 esac;;
-	    -L*) case "$compile_command $temp_deplibs " in
-		 *" $deplib "*) ;;
-		 *) temp_deplibs="$temp_deplibs $deplib";;
-		 esac
-		 temp_dir=`$echo "X$deplib" | $Xsed -e 's/^-L//'`
-		 case " $lib_search_path " in
-		 *" $temp_dir "*) ;;
-		 *) lib_search_path="$lib_search_path $temp_dir";;
-		 esac
-		 ;;
-	    *) temp_deplibs="$temp_deplibs $deplib";;
-	    esac
-	  done
-	  dependency_libs="$temp_deplibs"
-	fi
-
-	if test -z "$libdir"; then
-	  # It is a libtool convenience library, so add in its objects.
-	  convenience="$convenience $dir/$old_library"
-	  old_convenience="$old_convenience $dir/$old_library"
-	  deplibs="$deplibs$dependency_libs"
-	  compile_command="$compile_command $dir/$old_library$dependency_libs"
-	  finalize_command="$finalize_command $dir/$old_library$dependency_libs"
-	  continue
-	fi
-
-	# This library was specified with -dlopen.
-	if test "$prev" = dlfiles; then
-	  dlfiles="$dlfiles $arg"
-	  if test -z "$dlname" || test "$dlopen" != yes || test "$build_libtool_libs" = no; then
-	    # If there is no dlname, no dlopen support or we're linking statically,
-	    # we need to preload.
-	    prev=dlprefiles
-	  else
-	    # We should not create a dependency on this library, but we
-	    # may need any libraries it requires.
-	    compile_command="$compile_command$dependency_libs"
-	    finalize_command="$finalize_command$dependency_libs"
-	    prev=
-	    continue
-	  fi
-	fi
-
-	# The library was specified with -dlpreopen.
-	if test "$prev" = dlprefiles; then
-	  # Prefer using a static library (so that no silly _DYNAMIC symbols
-	  # are required to link).
-	  if test -n "$old_library"; then
-	    dlprefiles="$dlprefiles $dir/$old_library"
-	  else
-	    dlprefiles="$dlprefiles $dir/$linklib"
-	  fi
-	  prev=
-	fi
-
-	if test -n "$library_names" &&
-	   { test "$prefer_static_libs" = no || test -z "$old_library"; }; then
-	  link_against_libtool_libs="$link_against_libtool_libs $arg"
-	  if test -n "$shlibpath_var"; then
-	    # Make sure the rpath contains only unique directories.
-	    case "$temp_rpath " in
-	    *" $dir "*) ;;
-	    *) temp_rpath="$temp_rpath $dir" ;;
-	    esac
-	  fi
-
-	  # We need an absolute path.
-	  case "$dir" in
-	  [\\/] | [A-Za-z]:[\\/]*) absdir="$dir" ;;
-	  *)
-	    absdir=`cd "$dir" && pwd`
-	    if test -z "$absdir"; then
-	      $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2
-	      $echo "$modename: passing it literally to the linker, although it might fail" 1>&2
-	      absdir="$dir"
-	    fi
-	    ;;
-	  esac
-	  
-	  # This is the magic to use -rpath.
-	  # Skip directories that are in the system default run-time
-	  # search path, unless they have been requested with -R.
-	  case " $sys_lib_dlsearch_path " in
-	  *" $absdir "*) ;;
-	  *)
-	    case "$compile_rpath " in
-	    *" $absdir "*) ;;
-	    *) compile_rpath="$compile_rpath $absdir" 
-	    esac
-	    ;;
-	  esac
-
-	  case " $sys_lib_dlsearch_path " in
-	  *" $libdir "*) ;;
-	  *)
-	    case "$finalize_rpath " in
-	    *" $libdir "*) ;;
-	    *) finalize_rpath="$finalize_rpath $libdir"
-	    esac
-	    ;;
-	  esac
-
-	  lib_linked=yes
-	  case "$hardcode_action" in
-	  immediate | unsupported)
-	    if test "$hardcode_direct" = no; then
-	      compile_command="$compile_command $dir/$linklib"
-	      deplibs="$deplibs $dir/$linklib"
-	      case "$host" in
-	      *-*-cygwin* | *-*-mingw* | *-*-os2*)
-		dllsearchdir=`cd "$dir" && pwd || echo "$dir"`
-		if test -n "$dllsearchpath"; then
-		  dllsearchpath="$dllsearchpath:$dllsearchdir"
-		else
-		  dllsearchpath="$dllsearchdir"
-		fi
-		;;
-	      esac
-	    elif test "$hardcode_minus_L" = no; then
-	      case "$host" in
-	      *-*-sunos*)
-		compile_shlibpath="$compile_shlibpath$dir:"
-		;;
-	      esac
-	      case "$compile_command " in
-	      *" -L$dir "*) ;;
-	      *) compile_command="$compile_command -L$dir";;
-	      esac
-	      compile_command="$compile_command -l$name"
-	      deplibs="$deplibs -L$dir -l$name"
-	    elif test "$hardcode_shlibpath_var" = no; then
-	      case ":$compile_shlibpath:" in
-	      *":$dir:"*) ;;
-	      *) compile_shlibpath="$compile_shlibpath$dir:";;
-	      esac
-	      compile_command="$compile_command -l$name"
-	      deplibs="$deplibs -l$name"
-	    else
-	      lib_linked=no
-	    fi
-	    ;;
-
-	  relink)
-	    if test "$hardcode_direct" = yes; then
-	      compile_command="$compile_command $absdir/$linklib"
-	      deplibs="$deplibs $absdir/$linklib"
-	    elif test "$hardcode_minus_L" = yes; then
-	      case "$compile_command " in
-	      *" -L$absdir "*) ;;
-	      *) compile_command="$compile_command -L$absdir";;
-	      esac
-	      compile_command="$compile_command -l$name"
-	      deplibs="$deplibs -L$absdir -l$name"
-	    elif test "$hardcode_shlibpath_var" = yes; then
-	      case ":$compile_shlibpath:" in
-	      *":$absdir:"*) ;;
-	      *) compile_shlibpath="$compile_shlibpath$absdir:";;
-	      esac
-	      compile_command="$compile_command -l$name"
-	      deplibs="$deplibs -l$name"
-	    else
-	      lib_linked=no
-	    fi
-	    ;;
-
-	  *)
-	    lib_linked=no
-	    ;;
-	  esac
-
-	  if test "$lib_linked" != yes; then
-	    $echo "$modename: configuration error: unsupported hardcode properties"
-	    exit 1
-	  fi
-
-	  # Finalize command for both is simple: just hardcode it.
-	  if test "$hardcode_direct" = yes; then
-	    finalize_command="$finalize_command $libdir/$linklib"
-	  elif test "$hardcode_minus_L" = yes; then
-	    case "$finalize_command " in
-	    *" -L$libdir "*) ;;
-	    *) finalize_command="$finalize_command -L$libdir";;
-	    esac
-	    finalize_command="$finalize_command -l$name"
-	  elif test "$hardcode_shlibpath_var" = yes; then
-	    case ":$finalize_shlibpath:" in
-	    *":$libdir:"*) ;;
-	    *) finalize_shlibpath="$finalize_shlibpath$libdir:";;
-	    esac
-	    finalize_command="$finalize_command -l$name"
-	  else
-	    # We cannot seem to hardcode it, guess we'll fake it.
-	    case "$finalize_command " in
-	    *" -L$dir "*) ;;
-	    *) finalize_command="$finalize_command -L$libdir";;
-	    esac
-	    finalize_command="$finalize_command -l$name"
-	  fi
-	else
-	  # Transform directly to old archives if we don't build new libraries.
-	  if test -n "$pic_flag" && test -z "$old_library"; then
-	    $echo "$modename: cannot find static library for \`$arg'" 1>&2
-	    exit 1
-	  fi
-
-	  # Here we assume that one of hardcode_direct or hardcode_minus_L
-	  # is not unsupported.  This is valid on all known static and
-	  # shared platforms.
-	  if test "$hardcode_direct" != unsupported; then
-	    test -n "$old_library" && linklib="$old_library"
-	    compile_command="$compile_command $dir/$linklib"
-	    finalize_command="$finalize_command $dir/$linklib"
-	  else
-	    case "$compile_command " in
-	    *" -L$dir "*) ;;
-	    *) compile_command="$compile_command -L$dir";;
-	    esac
-	    compile_command="$compile_command -l$name"
-	    case "$finalize_command " in
-	    *" -L$dir "*) ;;
-	    *) finalize_command="$finalize_command -L$dir";;
-	    esac
-	    finalize_command="$finalize_command -l$name"
-	  fi
-	fi
-
-	# Add in any libraries that this one depends upon.
-	compile_command="$compile_command$dependency_libs"
-	finalize_command="$finalize_command$dependency_libs"
-	continue
-	;;
-
-      # Some other compiler argument.
-      *)
-	# Unknown arguments in both finalize_command and compile_command need
-	# to be aesthetically quoted because they are evaled later.
-	arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
-	case "$arg" in
-	*[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*)
-	  arg="\"$arg\""
-	  ;;
-	esac
-	;;
-      esac
-
-      # Now actually substitute the argument into the commands.
-      if test -n "$arg"; then
-	compile_command="$compile_command $arg"
-	finalize_command="$finalize_command $arg"
-      fi
-    done
-
-    if test -n "$prev"; then
-      $echo "$modename: the \`$prevarg' option requires an argument" 1>&2
-      $echo "$help" 1>&2
-      exit 1
-    fi
-
-    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then
-      eval arg=\"$export_dynamic_flag_spec\"
-      compile_command="$compile_command $arg"
-      finalize_command="$finalize_command $arg"
-    fi
-
-    oldlibs=
-    # calculate the name of the file, without its directory
-    outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'`
-    libobjs_save="$libobjs"
-
-    case "$output" in
-    "")
-      $echo "$modename: you must specify an output file" 1>&2
-      $echo "$help" 1>&2
-      exit 1
-      ;;
-
-    *.a | *.lib)
-      if test -n "$link_against_libtool_libs"; then
-	$echo "$modename: error: cannot link libtool libraries into archives" 1>&2
-	exit 1
-      fi
-
-      if test -n "$deplibs"; then
-	$echo "$modename: warning: \`-l' and \`-L' are ignored for archives" 1>&2
-      fi
-
-      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
-	$echo "$modename: warning: \`-dlopen' is ignored for archives" 1>&2
-      fi
-
-      if test -n "$rpath"; then
-	$echo "$modename: warning: \`-rpath' is ignored for archives" 1>&2
-      fi
-
-      if test -n "$xrpath"; then
-	$echo "$modename: warning: \`-R' is ignored for archives" 1>&2
-      fi
-
-      if test -n "$vinfo"; then
-	$echo "$modename: warning: \`-version-info' is ignored for archives" 1>&2
-      fi
-
-      if test -n "$release"; then
-	$echo "$modename: warning: \`-release' is ignored for archives" 1>&2
-      fi
-
-      if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
-	$echo "$modename: warning: \`-export-symbols' is ignored for archives" 1>&2
-      fi
-
-      # Now set the variables for building old libraries.
-      build_libtool_libs=no
-      oldlibs="$output"
-      ;;
-
-    *.la)
-      # Make sure we only generate libraries of the form `libNAME.la'.
-      case "$outputname" in
-      lib*)
-	name=`$echo "X$outputname" | $Xsed -e 's/\.la$//' -e 's/^lib//'`
-	eval libname=\"$libname_spec\"
-	;;
-      *)
-	if test "$module" = no; then
-	  $echo "$modename: libtool library \`$output' must begin with \`lib'" 1>&2
-	  $echo "$help" 1>&2
-	  exit 1
-	fi
-	if test "$need_lib_prefix" != no; then
-	  # Add the "lib" prefix for modules if required
-	  name=`$echo "X$outputname" | $Xsed -e 's/\.la$//'`
-	  eval libname=\"$libname_spec\"
-	else
-	  libname=`$echo "X$outputname" | $Xsed -e 's/\.la$//'`
-	fi
-	;;
-      esac
-
-      output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'`
-      if test "X$output_objdir" = "X$output"; then
-	output_objdir="$objdir"
-      else
-	output_objdir="$output_objdir/$objdir"
-      fi
-
-      if test -n "$objs"; then
-	$echo "$modename: cannot build libtool library \`$output' from non-libtool objects:$objs" 2>&1
-	exit 1
-      fi
-
-      # How the heck are we supposed to write a wrapper for a shared library?
-      if test -n "$link_against_libtool_libs"; then
-	 $echo "$modename: error: cannot link shared libraries into libtool libraries" 1>&2
-	 exit 1
-      fi
-
-      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
-	$echo "$modename: warning: \`-dlopen' is ignored for libtool libraries" 1>&2
-      fi
-
-      set dummy $rpath
-      if test $# -gt 2; then
-	$echo "$modename: warning: ignoring multiple \`-rpath's for a libtool library" 1>&2
-      fi
-      install_libdir="$2"
-
-      oldlibs=
-      if test -z "$rpath"; then
-	if test "$build_libtool_libs" = yes; then
-	  # Building a libtool convenience library.
-	  libext=al
-	  oldlibs="$output_objdir/$libname.$libext $oldlibs"
-	  build_libtool_libs=convenience
-	  build_old_libs=yes
-	fi
-	dependency_libs="$deplibs"
-
-	if test -n "$vinfo"; then
-	  $echo "$modename: warning: \`-version-info' is ignored for convenience libraries" 1>&2
-	fi
-
-	if test -n "$release"; then
-	  $echo "$modename: warning: \`-release' is ignored for convenience libraries" 1>&2
-	fi
-      else
-
-	# Parse the version information argument.
-	IFS="${IFS= 	}"; save_ifs="$IFS"; IFS=':'
-	set dummy $vinfo 0 0 0
-	IFS="$save_ifs"
-
-	if test -n "$8"; then
-	  $echo "$modename: too many parameters to \`-version-info'" 1>&2
-	  $echo "$help" 1>&2
-	  exit 1
-	fi
-
-	current="$2"
-	revision="$3"
-	age="$4"
-
-	# Check that each of the things are valid numbers.
-	case "$current" in
-	0 | [1-9] | [1-9][0-9]*) ;;
-	*)
-	  $echo "$modename: CURRENT \`$current' is not a nonnegative integer" 1>&2
-	  $echo "$modename: \`$vinfo' is not valid version information" 1>&2
-	  exit 1
-	  ;;
-	esac
-
-	case "$revision" in
-	0 | [1-9] | [1-9][0-9]*) ;;
-	*)
-	  $echo "$modename: REVISION \`$revision' is not a nonnegative integer" 1>&2
-	  $echo "$modename: \`$vinfo' is not valid version information" 1>&2
-	  exit 1
-	  ;;
-	esac
-
-	case "$age" in
-	0 | [1-9] | [1-9][0-9]*) ;;
-	*)
-	  $echo "$modename: AGE \`$age' is not a nonnegative integer" 1>&2
-	  $echo "$modename: \`$vinfo' is not valid version information" 1>&2
-	  exit 1
-	  ;;
-	esac
-
-	if test $age -gt $current; then
-	  $echo "$modename: AGE \`$age' is greater than the current interface number \`$current'" 1>&2
-	  $echo "$modename: \`$vinfo' is not valid version information" 1>&2
-	  exit 1
-	fi
-
-	# Calculate the version variables.
-	major=
-	versuffix=
-	verstring=
-	case "$version_type" in
-	none) ;;
-
-	irix)
-	  major=`expr $current - $age + 1`
-	  versuffix="$major.$revision"
-	  verstring="sgi$major.$revision"
-
-	  # Add in all the interfaces that we are compatible with.
-	  loop=$revision
-	  while test $loop != 0; do
-	    iface=`expr $revision - $loop`
-	    loop=`expr $loop - 1`
-	    verstring="sgi$major.$iface:$verstring"
-	  done
-	  ;;
-
-	linux)
-	  major=.`expr $current - $age`
-	  versuffix="$major.$age.$revision"
-	  ;;
-
-	osf)
-	  major=`expr $current - $age`
-	  versuffix=".$current.$age.$revision"
-	  verstring="$current.$age.$revision"
-
-	  # Add in all the interfaces that we are compatible with.
-	  loop=$age
-	  while test $loop != 0; do
-	    iface=`expr $current - $loop`
-	    loop=`expr $loop - 1`
-	    verstring="$verstring:${iface}.0"
-	  done
-
-	  # Make executables depend on our current version.
-	  verstring="$verstring:${current}.0"
-	  ;;
-
-	sunos)
-	  major=".$current"
-	  versuffix=".$current.$revision"
-	  ;;
-
-	freebsd-aout)
-	  major=".$current"
-	  versuffix=".$current.$revision";
-	  ;;
-
-	freebsd-elf)
-	  major=".$current"
-	  versuffix=".$current";
-	  ;;
-
-	windows)
-	  # Like Linux, but with '-' rather than '.', since we only
-	  # want one extension on Windows 95.
-	  major=`expr $current - $age`
-	  versuffix="-$major-$age-$revision"
-	  ;;
-
-	*)
-	  $echo "$modename: unknown library version type \`$version_type'" 1>&2
-	  echo "Fatal configuration error.  See the $PACKAGE docs for more information." 1>&2
-	  exit 1
-	  ;;
-	esac
-
-	# Clear the version info if we defaulted, and they specified a release.
-	if test -z "$vinfo" && test -n "$release"; then
-	  major=
-	  verstring="0.0"
-	  if test "$need_version" = no; then
-	    versuffix=
-	  else
-	    versuffix=".0.0"
-	  fi
-	fi
-
-	# Remove version info from name if versioning should be avoided
-	if test "$avoid_version" = yes && test "$need_version" = no; then
-	  major=
-	  versuffix=
-	  verstring=""
-	fi
-	
-	# Check to see if the archive will have undefined symbols.
-	if test "$allow_undefined" = yes; then
-	  if test "$allow_undefined_flag" = unsupported; then
-	    $echo "$modename: warning: undefined symbols not allowed in $host shared libraries" 1>&2
-	    build_libtool_libs=no
-	    build_old_libs=yes
-	  fi
-	else
-	  # Don't allow undefined symbols.
-	  allow_undefined_flag="$no_undefined_flag"
-	fi
-
-	dependency_libs="$deplibs"
-	case "$host" in
-	*-*-cygwin* | *-*-mingw* | *-*-os2* | *-*-beos*)
-	  # these systems don't actually have a c library (as such)!
-	  ;;
-	*)
-	  # Add libc to deplibs on all other systems.
-	  deplibs="$deplibs -lc"
-	  ;;
-	esac
-      fi
-
-      # Create the output directory, or remove our outputs if we need to.
-      if test -d $output_objdir; then
-	$show "${rm}r $output_objdir/$outputname $output_objdir/$libname.* $output_objdir/${libname}${release}.*"
-	$run ${rm}r $output_objdir/$outputname $output_objdir/$libname.* $output_objdir/${libname}${release}.*
-      else
-	$show "$mkdir $output_objdir"
-	$run $mkdir $output_objdir
-	status=$?
-	if test $status -ne 0 && test ! -d $output_objdir; then
-	  exit $status
-	fi
-      fi
-
-      # Now set the variables for building old libraries.
-      if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then
-	oldlibs="$oldlibs $output_objdir/$libname.$libext"
-
-	# Transform .lo files to .o files.
-	oldobjs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP`
-      fi
-
-      if test "$build_libtool_libs" = yes; then
-	# Transform deplibs into only deplibs that can be linked in shared.
-	name_save=$name
-	libname_save=$libname
-	release_save=$release
-	versuffix_save=$versuffix
-	major_save=$major
-	# I'm not sure if I'm treating the release correctly.  I think
-	# release should show up in the -l (ie -lgmp5) so we don't want to
-	# add it in twice.  Is that correct?
-	release=""
-	versuffix=""
-	major=""
-	newdeplibs=
-	droppeddeps=no
-	case "$deplibs_check_method" in
-	pass_all)
-	  # Don't check for shared/static.  Everything works.
-	  # This might be a little naive.  We might want to check
-	  # whether the library exists or not.  But this is on
-	  # osf3 & osf4 and I'm not really sure... Just
-	  # implementing what was already the behaviour.
-	  newdeplibs=$deplibs
-	  ;;
-	test_compile)
-	  # This code stresses the "libraries are programs" paradigm to its
-	  # limits. Maybe even breaks it.  We compile a program, linking it
-	  # against the deplibs as a proxy for the library.  Then we can check
-	  # whether they linked in statically or dynamically with ldd.
-	  $rm conftest.c
-	  cat > conftest.c <<EOF
-	  int main() { return 0; }
-EOF
-	  $rm conftest
-	  $CC -o conftest conftest.c $deplibs
-	  if test $? -eq 0 ; then
-	    ldd_output=`ldd conftest`
-	    for i in $deplibs; do
-	      name="`expr $i : '-l\(.*\)'`"
-	      # If $name is empty we are operating on a -L argument.
-	      if test "$name" != "" ; then
-		libname=`eval \\$echo \"$libname_spec\"`
-		deplib_matches=`eval \\$echo \"$library_names_spec\"`
-		set dummy $deplib_matches
-		deplib_match=$2
-		if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
-		  newdeplibs="$newdeplibs $i"
-		else
-		  droppeddeps=yes
-		  echo
-		  echo "*** Warning: This library needs some functionality provided by $i."
-		  echo "*** I have the capability to make that library automatically link in when"
-		  echo "*** you link to this library.  But I can only do this if you have a"
-		  echo "*** shared version of the library, which you do not appear to have."
-		fi
-	      else
-		newdeplibs="$newdeplibs $i"
-	      fi
-	    done
-	  else
-	    # Error occured in the first compile.  Let's try to salvage the situation:
-	    # Compile a seperate program for each library.
-	    for i in $deplibs; do
-	      name="`expr $i : '-l\(.*\)'`"
-	     # If $name is empty we are operating on a -L argument.
-	      if test "$name" != "" ; then
-		$rm conftest
-		$CC -o conftest conftest.c $i
-		# Did it work?
-		if test $? -eq 0 ; then
-		  ldd_output=`ldd conftest`
-		  libname=`eval \\$echo \"$libname_spec\"`
-		  deplib_matches=`eval \\$echo \"$library_names_spec\"`
-		  set dummy $deplib_matches
-		  deplib_match=$2
-		  if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
-		    newdeplibs="$newdeplibs $i"
-		  else
-		    droppeddeps=yes
-		    echo
-		    echo "*** Warning: This library needs some functionality provided by $i."
-		    echo "*** I have the capability to make that library automatically link in when"
-		    echo "*** you link to this library.  But I can only do this if you have a"
-		    echo "*** shared version of the library, which you do not appear to have."
-		  fi
-		else
-		  droppeddeps=yes
-		  echo
-		  echo "*** Warning!  Library $i is needed by this library but I was not able to"
-		  echo "***  make it link in!  You will probably need to install it or some"
-		  echo "*** library that it depends on before this library will be fully"
-		  echo "*** functional.  Installing it before continuing would be even better."
-		fi
-	      else
-		newdeplibs="$newdeplibs $i"
-	      fi
-	    done
-	  fi
-	  ;;
-	file_magic*)
-	  set dummy $deplibs_check_method
-	  file_magic_regex="`expr \"$deplibs_check_method\" : \"$2 \(.*\)\"`"
-	  for a_deplib in $deplibs; do
-	    name="`expr $a_deplib : '-l\(.*\)'`"
-	    # If $name is empty we are operating on a -L argument.
-	    if test "$name" != "" ; then
-	      libname=`eval \\$echo \"$libname_spec\"`
-	      for i in $lib_search_path; do
-		    potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
-		    for potent_lib in $potential_libs; do
-		      # Follow soft links.
-		      if ls -lLd "$potent_lib" 2>/dev/null \
-			 | grep " -> " >/dev/null; then
-			continue 
-		      fi
-		      # The statement above tries to avoid entering an
-		      # endless loop below, in case of cyclic links.
-		      # We might still enter an endless loop, since a link
-		      # loop can be closed while we follow links,
-		      # but so what?
-		      potlib="$potent_lib"
-		      while test -h "$potlib" 2>/dev/null; do
-			potliblink=`ls -ld $potlib | sed 's/.* -> //'`
-			case "$potliblink" in
-			[\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";;
-			*) potlib=`$echo "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";;
-			esac
-		      done
-		      if eval $file_magic_cmd \"\$potlib\" 2>/dev/null \
-			 | sed 10q \
-			 | egrep "$file_magic_regex" > /dev/null; then
-			newdeplibs="$newdeplibs $a_deplib"
-			a_deplib=""
-			break 2
-		      fi
-		    done
-	      done
-	      if test -n "$a_deplib" ; then
-		droppeddeps=yes
-		echo
-		echo "*** Warning: This library needs some functionality provided by $a_deplib."
-		echo "*** I have the capability to make that library automatically link in when"
-		echo "*** you link to this library.  But I can only do this if you have a"
-		echo "*** shared version of the library, which you do not appear to have."
-	      fi
-	    else
-	      # Add a -L argument.
-	      newdeplibs="$newdeplibs $a_deplib"
-	    fi
-	  done # Gone through all deplibs.
-	  ;;
-	none | unknown | *)
-	  newdeplibs=""
-	  if $echo "X $deplibs" | $Xsed -e 's/ -lc$//' \
-	       -e 's/ -[LR][^ ]*//g' -e 's/[ 	]//g' |
-	     grep . >/dev/null; then
-	    echo
-	    if test "X$deplibs_check_method" = "Xnone"; then
-	      echo "*** Warning: inter-library dependencies are not supported in this platform."
-	    else
-	      echo "*** Warning: inter-library dependencies are not known to be supported."
-	    fi
-	    echo "*** All declared inter-library dependencies are being dropped."
-	    droppeddeps=yes
-	  fi
-	  ;;
-	esac
-	versuffix=$versuffix_save
-	major=$major_save
-	release=$release_save
-	libname=$libname_save
-	name=$name_save
-
-	if test "$droppeddeps" = yes; then
-	  if test "$module" = yes; then
-	    echo
-	    echo "*** Warning: libtool could not satisfy all declared inter-library"
-	    echo "*** dependencies of module $libname.  Therefore, libtool will create"
-	    echo "*** a static module, that should work as long as the dlopening"
-	    echo "*** application is linked with the -dlopen flag."
-	    if test -z "$global_symbol_pipe"; then
-	      echo
-	      echo "*** However, this would only work if libtool was able to extract symbol"
-	      echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
-	      echo "*** not find such a program.  So, this module is probably useless."
-	      echo "*** \`nm' from GNU binutils and a full rebuild may help."
-	    fi
-	    if test "$build_old_libs" = no; then
-	      oldlibs="$output_objdir/$libname.$libext"
-	      build_libtool_libs=module
-	      build_old_libs=yes
-	    else
-	      build_libtool_libs=no
-	    fi
-	  else
-	    echo "*** The inter-library dependencies that have been dropped here will be"
-	    echo "*** automatically added whenever a program is linked with this library"
-	    echo "*** or is declared to -dlopen it."
-	  fi
-	fi
-	# Done checking deplibs!
-	deplibs=$newdeplibs
-      fi
-
-      # All the library-specific variables (install_libdir is set above).
-      library_names=
-      old_library=
-      dlname=
-      
-      # Test again, we may have decided not to build it any more
-      if test "$build_libtool_libs" = yes; then
-	# Get the real and link names of the library.
-	eval library_names=\"$library_names_spec\"
-	set dummy $library_names
-	realname="$2"
-	shift; shift
-
-	if test -n "$soname_spec"; then
-	  eval soname=\"$soname_spec\"
-	else
-	  soname="$realname"
-	fi
-
-	lib="$output_objdir/$realname"
-	for link
-	do
-	  linknames="$linknames $link"
-	done
-
-	# Ensure that we have .o objects for linkers which dislike .lo
-	# (e.g. aix) in case we are running --disable-static
-	for obj in $libobjs; do
-	  xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'`
-	  if test "X$xdir" = "X$obj"; then
-	    xdir="."
-	  else
-	    xdir="$xdir"
-	  fi
-	  baseobj=`$echo "X$obj" | $Xsed -e 's%^.*/%%'`
-	  oldobj=`$echo "X$baseobj" | $Xsed -e "$lo2o"`
-	  if test ! -f $xdir/$oldobj; then
-	    $show "(cd $xdir && ${LN_S} $baseobj $oldobj)"
-	    $run eval '(cd $xdir && ${LN_S} $baseobj $oldobj)' || exit $?
-	  fi
-	done
-
-	# Use standard objects if they are pic
-	test -z "$pic_flag" && libobjs=`$echo "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
-
-	# Prepare the list of exported symbols
-	if test -z "$export_symbols"; then
-	  if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then
-	    $show "generating symbol list for \`$libname.la'"
-	    export_symbols="$output_objdir/$libname.exp"
-	    $run $rm $export_symbols
-	    eval cmds=\"$export_symbols_cmds\"
-	    IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
-	    for cmd in $cmds; do
-	      IFS="$save_ifs"
-	      $show "$cmd"
-	      $run eval "$cmd" || exit $?
-	    done
-	    IFS="$save_ifs"
-	    if test -n "$export_symbols_regex"; then
-	      $show "egrep -e \"$export_symbols_regex\" \"$export_symbols\" > \"${export_symbols}T\""
-	      $run eval 'egrep -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
-	      $show "$mv \"${export_symbols}T\" \"$export_symbols\""
-	      $run eval '$mv "${export_symbols}T" "$export_symbols"'
-	    fi
-	  fi
-	fi
-
-	if test -n "$export_symbols" && test -n "$include_expsyms"; then
-	  $run eval '$echo "X$include_expsyms" | $SP2NL >> "$export_symbols"'
-	fi
-
-	if test -n "$convenience"; then
-	  if test -n "$whole_archive_flag_spec"; then
-	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
-	  else
-	    gentop="$output_objdir/${outputname}x"
-	    $show "${rm}r $gentop"
-	    $run ${rm}r "$gentop"
-	    $show "mkdir $gentop"
-	    $run mkdir "$gentop"
-	    status=$?
-	    if test $status -ne 0 && test ! -d "$gentop"; then
-	      exit $status
-	    fi
-	    generated="$generated $gentop"
-
-	    for xlib in $convenience; do
-	      # Extract the objects.
-	      case "$xlib" in
-	      [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;;
-	      *) xabs=`pwd`"/$xlib" ;;
-	      esac
-	      xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'`
-	      xdir="$gentop/$xlib"
-
-	      $show "${rm}r $xdir"
-	      $run ${rm}r "$xdir"
-	      $show "mkdir $xdir"
-	      $run mkdir "$xdir"
-	      status=$?
-	      if test $status -ne 0 && test ! -d "$xdir"; then
-		exit $status
-	      fi
-	      $show "(cd $xdir && $AR x $xabs)"
-	      $run eval "(cd \$xdir && $AR x \$xabs)" || exit $?
-
-	      libobjs="$libobjs "`find $xdir -name \*.o -print -o -name \*.lo -print | $NL2SP`
-	    done
-	  fi
-	fi
-
-	if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then
-	  eval flag=\"$thread_safe_flag_spec\"
-	  linkopts="$linkopts $flag"
-	fi
-
-	# Do each of the archive commands.
-	if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
-	  eval cmds=\"$archive_expsym_cmds\"
-	else
-	  eval cmds=\"$archive_cmds\"
-	fi
-	IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
-	for cmd in $cmds; do
-	  IFS="$save_ifs"
-	  $show "$cmd"
-	  $run eval "$cmd" || exit $?
-	done
-	IFS="$save_ifs"
-
-	# Create links to the real library.
-	for linkname in $linknames; do
-	  if test "$realname" != "$linkname"; then
-	    $show "(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)"
-	    $run eval '(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)' || exit $?
-	  fi
-	done
-
-	# If -module or -export-dynamic was specified, set the dlname.
-	if test "$module" = yes || test "$export_dynamic" = yes; then
-	  # On all known operating systems, these are identical.
-	  dlname="$soname"
-	fi
-      fi
-      ;;
-
-    *.lo | *.o | *.obj)
-      if test -n "$link_against_libtool_libs"; then
-	$echo "$modename: error: cannot link libtool libraries into objects" 1>&2
-	exit 1
-      fi
-
-      if test -n "$deplibs"; then
-	$echo "$modename: warning: \`-l' and \`-L' are ignored for objects" 1>&2
-      fi
-
-      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
-	$echo "$modename: warning: \`-dlopen' is ignored for objects" 1>&2
-      fi
-
-      if test -n "$rpath"; then
-	$echo "$modename: warning: \`-rpath' is ignored for objects" 1>&2
-      fi
-
-      if test -n "$xrpath"; then
-	$echo "$modename: warning: \`-R' is ignored for objects" 1>&2
-      fi
-
-      if test -n "$vinfo"; then
-	$echo "$modename: warning: \`-version-info' is ignored for objects" 1>&2
-      fi
-
-      if test -n "$release"; then
-	$echo "$modename: warning: \`-release' is ignored for objects" 1>&2
-      fi
-
-      case "$output" in
-      *.lo)
-	if test -n "$objs"; then
-	  $echo "$modename: cannot build library object \`$output' from non-libtool objects" 1>&2
-	  exit 1
-	fi
-	libobj="$output"
-	obj=`$echo "X$output" | $Xsed -e "$lo2o"`
-	;;
-      *)
-	libobj=
-	obj="$output"
-	;;
-      esac
-
-      # Delete the old objects.
-      $run $rm $obj $libobj
-
-      # Objects from convenience libraries.  This assumes
-      # single-version convenience libraries.  Whenever we create
-      # different ones for PIC/non-PIC, this we'll have to duplicate
-      # the extraction.
-      reload_conv_objs=
-      gentop=
-      # reload_cmds runs $LD directly, so let us get rid of
-      # -Wl from whole_archive_flag_spec
-      wl= 
-
-      if test -n "$convenience"; then
-	if test -n "$whole_archive_flag_spec"; then
-	  eval reload_conv_objs=\"\$reload_objs $whole_archive_flag_spec\"
-	else
-	  gentop="$output_objdir/${obj}x"
-	  $show "${rm}r $gentop"
-	  $run ${rm}r "$gentop"
-	  $show "mkdir $gentop"
-	  $run mkdir "$gentop"
-	  status=$?
-	  if test $status -ne 0 && test ! -d "$gentop"; then
-	    exit $status
-	  fi
-	  generated="$generated $gentop"
-
-	  for xlib in $convenience; do
-	    # Extract the objects.
-	    case "$xlib" in
-	    [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;;
-	    *) xabs=`pwd`"/$xlib" ;;
-	    esac
-	    xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'`
-	    xdir="$gentop/$xlib"
-
-	    $show "${rm}r $xdir"
-	    $run ${rm}r "$xdir"
-	    $show "mkdir $xdir"
-	    $run mkdir "$xdir"
-	    status=$?
-	    if test $status -ne 0 && test ! -d "$xdir"; then
-	      exit $status
-	    fi
-	    $show "(cd $xdir && $AR x $xabs)"
-	    $run eval "(cd \$xdir && $AR x \$xabs)" || exit $?
-
-	    reload_conv_objs="$reload_objs "`find $xdir -name \*.o -print -o -name \*.lo -print | $NL2SP`
-	  done
-	fi
-      fi
-
-      # Create the old-style object.
-      reload_objs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs"
-
-      output="$obj"
-      eval cmds=\"$reload_cmds\"
-      IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
-      for cmd in $cmds; do
-	IFS="$save_ifs"
-	$show "$cmd"
-	$run eval "$cmd" || exit $?
-      done
-      IFS="$save_ifs"
-
-      # Exit if we aren't doing a library object file.
-      if test -z "$libobj"; then
-	if test -n "$gentop"; then
-	  $show "${rm}r $gentop"
-	  $run ${rm}r $gentop
-	fi
-
-	exit 0
-      fi
-
-      if test "$build_libtool_libs" != yes; then
-	if test -n "$gentop"; then
-	  $show "${rm}r $gentop"
-	  $run ${rm}r $gentop
-	fi
-
-	# Create an invalid libtool object if no PIC, so that we don't
-	# accidentally link it into a program.
-	$show "echo timestamp > $libobj"
-	$run eval "echo timestamp > $libobj" || exit $?
-	exit 0
-      fi
-
-      if test -n "$pic_flag"; then
-	# Only do commands if we really have different PIC objects.
-	reload_objs="$libobjs $reload_conv_objs"
-	output="$libobj"
-	eval cmds=\"$reload_cmds\"
-	IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
-	for cmd in $cmds; do
-	  IFS="$save_ifs"
-	  $show "$cmd"
-	  $run eval "$cmd" || exit $?
-	done
-	IFS="$save_ifs"
-      else
-	# Just create a symlink.
-	$show $rm $libobj
-	$run $rm $libobj
-	xdir=`$echo "X$libobj" | $Xsed -e 's%/[^/]*$%%'`
-	if test "X$xdir" = "X$libobj"; then
-	  xdir="."
-	else
-	  xdir="$xdir"
-	fi
-	baseobj=`$echo "X$libobj" | $Xsed -e 's%^.*/%%'`
-	oldobj=`$echo "X$baseobj" | $Xsed -e "$lo2o"`
-	$show "(cd $xdir && $LN_S $oldobj $baseobj)"
-	$run eval '(cd $xdir && $LN_S $oldobj $baseobj)' || exit $?
-      fi
-
-      if test -n "$gentop"; then
-	$show "${rm}r $gentop"
-	$run ${rm}r $gentop
-      fi
-
-      exit 0
-      ;;
-
-    # Anything else should be a program.
-    *)
-      if test -n "$vinfo"; then
-	$echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2
-      fi
-
-      if test -n "$release"; then
-	$echo "$modename: warning: \`-release' is ignored for programs" 1>&2
-      fi
-
-      if test "$preload" = yes; then
-	if test "$dlopen" = unknown && test "$dlopen_self" = unknown &&
-	   test "$dlopen_self_static" = unknown; then
-	  $echo "$modename: warning: \`AC_LIBTOOL_DLOPEN' not used. Assuming no dlopen support."
-	fi 
-      fi
-    
-      if test -n "$rpath$xrpath"; then
-	# If the user specified any rpath flags, then add them.
-	for libdir in $rpath $xrpath; do
-	  # This is the magic to use -rpath.
-	  case "$compile_rpath " in
-	  *" $libdir "*) ;;
-	  *) compile_rpath="$compile_rpath $libdir" ;;
-	  esac
-	  case "$finalize_rpath " in
-	  *" $libdir "*) ;;
-	  *) finalize_rpath="$finalize_rpath $libdir" ;;
-	  esac
-	done
-      fi
-
-      # Now hardcode the library paths
-      rpath=
-      hardcode_libdirs=
-      for libdir in $compile_rpath $finalize_rpath; do
-	if test -n "$hardcode_libdir_flag_spec"; then
-	  if test -n "$hardcode_libdir_separator"; then
-	    if test -z "$hardcode_libdirs"; then
-	      hardcode_libdirs="$libdir"
-	    else
-	      # Just accumulate the unique libdirs.
-	      case "$hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator" in
-	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
-		;;
-	      *)
-		hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
-		;;
-	      esac
-	    fi
-	  else
-	    eval flag=\"$hardcode_libdir_flag_spec\"
-	    rpath="$rpath $flag"
-	  fi
-	elif test -n "$runpath_var"; then
-	  case "$perm_rpath " in
-	  *" $libdir "*) ;;
-	  *) perm_rpath="$perm_rpath $libdir" ;;
-	  esac
-	fi
-      done
-      # Substitute the hardcoded libdirs into the rpath.
-      if test -n "$hardcode_libdir_separator" &&
-	 test -n "$hardcode_libdirs"; then
-	libdir="$hardcode_libdirs"
-	eval rpath=\" $hardcode_libdir_flag_spec\"
-      fi
-      compile_rpath="$rpath"
-
-      rpath=
-      hardcode_libdirs=
-      for libdir in $finalize_rpath; do
-	if test -n "$hardcode_libdir_flag_spec"; then
-	  if test -n "$hardcode_libdir_separator"; then
-	    if test -z "$hardcode_libdirs"; then
-	      hardcode_libdirs="$libdir"
-	    else
-	      # Just accumulate the unique libdirs.
-	      case "$hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator" in
-	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
-		;;
-	      *)
-		hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
-		;;
-	      esac
-	    fi
-	  else
-	    eval flag=\"$hardcode_libdir_flag_spec\"
-	    rpath="$rpath $flag"
-	  fi
-	elif test -n "$runpath_var"; then
-	  case "$finalize_perm_rpath " in
-	  *" $libdir "*) ;;
-	  *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;;
-	  esac
-	fi
-      done
-      # Substitute the hardcoded libdirs into the rpath.
-      if test -n "$hardcode_libdir_separator" &&
-	 test -n "$hardcode_libdirs"; then
-	libdir="$hardcode_libdirs"
-	eval rpath=\" $hardcode_libdir_flag_spec\"
-      fi
-      finalize_rpath="$rpath"
-
-      output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'`
-      if test "X$output_objdir" = "X$output"; then
-	output_objdir="$objdir"
-      else
-	output_objdir="$output_objdir/$objdir"
-      fi
-
-      # Create the binary in the object directory, then wrap it.
-      if test ! -d $output_objdir; then
-	$show "$mkdir $output_objdir"
-	$run $mkdir $output_objdir
-	status=$?
-	if test $status -ne 0 && test ! -d $output_objdir; then
-	  exit $status
-	fi
-      fi
-
-      if test -n "$libobjs" && test "$build_old_libs" = yes; then
-	# Transform all the library objects into standard objects.
-	compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
-	finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
-      fi
-
-      dlsyms=
-      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
-	if test -n "$NM" && test -n "$global_symbol_pipe"; then
-	  dlsyms="${outputname}S.c"
-	else
-	  $echo "$modename: not configured to extract global symbols from dlpreopened files" 1>&2
-	fi
-      fi
-
-      if test -n "$dlsyms"; then
-	case "$dlsyms" in
-	"") ;;
-	*.c)
-	  # Discover the nlist of each of the dlfiles.
-	  nlist="$output_objdir/${outputname}.nm"
-
-	  $show "$rm $nlist ${nlist}S ${nlist}T"
-	  $run $rm "$nlist" "${nlist}S" "${nlist}T"
-
-	  # Parse the name list into a source file.
-	  $show "creating $output_objdir/$dlsyms"
-
-	  test -z "$run" && $echo > "$output_objdir/$dlsyms" "\
-/* $dlsyms - symbol resolution table for \`$outputname' dlsym emulation. */
-/* Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP */
-
-#ifdef __cplusplus
-extern \"C\" {
-#endif
-
-/* Prevent the only kind of declaration conflicts we can make. */
-#define lt_preloaded_symbols some_other_symbol
-
-/* External symbol declarations for the compiler. */\
-"
-
-	  if test "$dlself" = yes; then
-	    $show "generating symbol list for \`$output'"
-
-	    test -z "$run" && $echo ': @PROGRAM@ ' > "$nlist"
-
-	    # Add our own program objects to the symbol list.
-	    progfiles=`$echo "X$objs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
-	    for arg in $progfiles; do
-	      $show "extracting global C symbols from \`$arg'"
-	      $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'"
-	    done
-
-	    if test -n "$exclude_expsyms"; then
-	      $run eval 'egrep -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
-	      $run eval '$mv "$nlist"T "$nlist"'
-	    fi
-	    
-	    if test -n "$export_symbols_regex"; then
-	      $run eval 'egrep -e "$export_symbols_regex" "$nlist" > "$nlist"T'
-	      $run eval '$mv "$nlist"T "$nlist"'
-	    fi
-
-	    # Prepare the list of exported symbols
-	    if test -z "$export_symbols"; then
-	      export_symbols="$output_objdir/$output.exp"
-	      $run $rm $export_symbols
-	      $run eval "sed -n -e '/^: @PROGRAM@$/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
-	    else
-	      $run eval "sed -e 's/\([][.*^$]\)/\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$output.exp"'
-	      $run eval 'grep -f "$output_objdir/$output.exp" < "$nlist" > "$nlist"T'
-	      $run eval 'mv "$nlist"T "$nlist"'
-	    fi
-	  fi
-
-	  for arg in $dlprefiles; do
-	    $show "extracting global C symbols from \`$arg'"
-	    name=`echo "$arg" | sed -e 's%^.*/%%'`
-	    $run eval 'echo ": $name " >> "$nlist"'
-	    $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'"
-	  done
-
-	  if test -z "$run"; then
-	    # Make sure we have at least an empty file.
-	    test -f "$nlist" || : > "$nlist"
-
-	    if test -n "$exclude_expsyms"; then
-	      egrep -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
-	      $mv "$nlist"T "$nlist"
-	    fi
-
-	    # Try sorting and uniquifying the output.
-	    if grep -v "^: " < "$nlist" | sort +2 | uniq > "$nlist"S; then
-	      :
-	    else
-	      grep -v "^: " < "$nlist" > "$nlist"S
-	    fi
-
-	    if test -f "$nlist"S; then
-	      eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$dlsyms"'
-	    else
-	      echo '/* NONE */' >> "$output_objdir/$dlsyms"
-	    fi
-
-	    $echo >> "$output_objdir/$dlsyms" "\
-
-#undef lt_preloaded_symbols
-
-#if defined (__STDC__) && __STDC__
-# define lt_ptr_t void *
-#else
-# define lt_ptr_t char *
-# define const
-#endif
-
-/* The mapping between symbol names and symbols. */
-const struct {
-  const char *name;
-  lt_ptr_t address;
-}
-lt_preloaded_symbols[] =
-{\
-"
-
-	    sed -n -e 's/^: \([^ ]*\) $/  {\"\1\", (lt_ptr_t) 0},/p' \
-		-e 's/^. \([^ ]*\) \([^ ]*\)$/  {"\2", (lt_ptr_t) \&\2},/p' \
-		  < "$nlist" >> "$output_objdir/$dlsyms"
-
-	    $echo >> "$output_objdir/$dlsyms" "\
-  {0, (lt_ptr_t) 0}
-};
-
-/* This works around a problem in FreeBSD linker */
-#ifdef FREEBSD_WORKAROUND
-static const void *lt_preloaded_setup() {
-  return lt_preloaded_symbols;
-}
-#endif
-
-#ifdef __cplusplus
-}
-#endif\
-"
-	  fi
-
-	  pic_flag_for_symtable=
-	  case "$host" in
-	  # compiling the symbol table file with pic_flag works around
-	  # a FreeBSD bug that causes programs to crash when -lm is
-	  # linked before any other PIC object.  But we must not use
-	  # pic_flag when linking with -static.  The problem exists in
-	  # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
-	  *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)

-	    case "$compile_command " in
-	    *" -static "*) ;;
-	    *) pic_flag_for_symtable=" $pic_flag -DPIC -DFREEBSD_WORKAROUND";;
-	    esac;;
-	  *-*-hpux*)
-	    case "$compile_command " in
-	    *" -static "*) ;;
-	    *) pic_flag_for_symtable=" $pic_flag -DPIC";;
-	    esac
-	  esac
-
-	  # Now compile the dynamic symbol file.
-	  $show "(cd $output_objdir && $CC -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")"
-	  $run eval '(cd $output_objdir && $CC -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $?
-
-	  # Clean up the generated files.
-	  $show "$rm $output_objdir/$dlsyms $nlist ${nlist}S ${nlist}T"
-	  $run $rm "$output_objdir/$dlsyms" "$nlist" "${nlist}S" "${nlist}T"
-
-	  # Transform the symbol file into the correct name.
-	  compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"`
-	  finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"`
-	  ;;
-	*)
-	  $echo "$modename: unknown suffix for \`$dlsyms'" 1>&2
-	  exit 1
-	  ;;
-	esac
-      else
-	# We keep going just in case the user didn't refer to
-	# lt_preloaded_symbols.  The linker will fail if global_symbol_pipe
-	# really was required.
-
-	# Nullify the symbol file.
-	compile_command=`$echo "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"`
-	finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"`
-      fi
-
-      if test -z "$link_against_libtool_libs" || test "$build_libtool_libs" != yes; then
-	# Replace the output file specification.
-	compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
-	link_command="$compile_command$compile_rpath"
-
-	# We have no uninstalled library dependencies, so finalize right now.
-	$show "$link_command"
-	$run eval "$link_command"
-	status=$?
-	
-	# Delete the generated files.
-	if test -n "$dlsyms"; then
-	  $show "$rm $output_objdir/${outputname}S.${objext}"
-	  $run $rm "$output_objdir/${outputname}S.${objext}"
-	fi
-
-	exit $status
-      fi
-
-      if test -n "$shlibpath_var"; then
-	# We should set the shlibpath_var
-	rpath=
-	for dir in $temp_rpath; do
-	  case "$dir" in
-	  [\\/]* | [A-Za-z]:[\\/]*)
-	    # Absolute path.
-	    rpath="$rpath$dir:"
-	    ;;
-	  *)
-	    # Relative path: add a thisdir entry.
-	    rpath="$rpath\$thisdir/$dir:"
-	    ;;
-	  esac
-	done
-	temp_rpath="$rpath"
-      fi
-
-      if test -n "$compile_shlibpath$finalize_shlibpath"; then
-	compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
-      fi
-      if test -n "$finalize_shlibpath"; then
-	finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
-      fi
-
-      compile_var=
-      finalize_var=
-      if test -n "$runpath_var"; then
-	if test -n "$perm_rpath"; then
-	  # We should set the runpath_var.
-	  rpath=
-	  for dir in $perm_rpath; do
-	    rpath="$rpath$dir:"
-	  done
-	  compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
-	fi
-	if test -n "$finalize_perm_rpath"; then
-	  # We should set the runpath_var.
-	  rpath=
-	  for dir in $finalize_perm_rpath; do
-	    rpath="$rpath$dir:"
-	  done
-	  finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
-	fi
-      fi
-
-      if test "$hardcode_action" = relink; then
-	# Fast installation is not supported
-	link_command="$compile_var$compile_command$compile_rpath"
-	relink_command="$finalize_var$finalize_command$finalize_rpath"
-	
-	$echo "$modename: warning: this platform does not like uninstalled shared libraries" 1>&2
-	$echo "$modename: \`$output' will be relinked during installation" 1>&2
-      else
-	if test "$fast_install" != no; then
-	  link_command="$finalize_var$compile_command$finalize_rpath"
-	  if test "$fast_install" = yes; then
-	    relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'`
-	  else
-	    # fast_install is set to needless
-	    relink_command=
-	  fi
-	else
-	  link_command="$compile_var$compile_command$compile_rpath"
-	  relink_command="$finalize_var$finalize_command$finalize_rpath"
-	fi
-      fi
-
-      # Replace the output file specification.
-      link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
-      
-      # Delete the old output files.
-      $run $rm $output $output_objdir/$outputname $output_objdir/lt-$outputname
-
-      $show "$link_command"
-      $run eval "$link_command" || exit $?
-
-      # Now create the wrapper script.
-      $show "creating $output"
-
-      # Quote the relink command for shipping.
-      if test -n "$relink_command"; then
-	relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"`
-      fi
-
-      # Quote $echo for shipping.
-      if test "X$echo" = "X$SHELL $0 --fallback-echo"; then
-	case "$0" in
-	[\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $0 --fallback-echo";;
-	*) qecho="$SHELL `pwd`/$0 --fallback-echo";;
-	esac
-	qecho=`$echo "X$qecho" | $Xsed -e "$sed_quote_subst"`
-      else
-	qecho=`$echo "X$echo" | $Xsed -e "$sed_quote_subst"`
-      fi
-
-      # Only actually do things if our run command is non-null.
-      if test -z "$run"; then
-	# win32 will think the script is a binary if it has
-	# a .exe suffix, so we strip it off here.
-	case $output in
-	  *.exe) output=`echo $output|sed 's,.exe$,,'` ;;
-	esac
-	$rm $output
-	trap "$rm $output; exit 1" 1 2 15
-
-	$echo > $output "\
-#! $SHELL
-
-# $output - temporary wrapper script for $objdir/$outputname
-# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
-#
-# The $output program cannot be directly executed until all the libtool
-# libraries that it depends on are installed.
-#
-# This wrapper script should never be moved out of the build directory.
-# If it is, it will not operate correctly.
-
-# Sed substitution that helps us do robust quoting.  It backslashifies
-# metacharacters that are still active within double-quoted strings.
-Xsed='sed -e 1s/^X//'
-sed_quote_subst='$sed_quote_subst'
-
-# The HP-UX ksh and POSIX shell print the target directory to stdout
-# if CDPATH is set.
-if test \"\${CDPATH+set}\" = set; then CDPATH=:; export CDPATH; fi
-
-relink_command=\"$relink_command\"
-
-# This environment variable determines our operation mode.
-if test \"\$libtool_install_magic\" = \"$magic\"; then
-  # install mode needs the following variable:
-  link_against_libtool_libs='$link_against_libtool_libs'
-else
-  # When we are sourced in execute mode, \$file and \$echo are already set.
-  if test \"\$libtool_execute_magic\" != \"$magic\"; then
-    echo=\"$qecho\"
-    file=\"\$0\"
-    # Make sure echo works.
-    if test \"X\$1\" = X--no-reexec; then
-      # Discard the --no-reexec flag, and continue.
-      shift
-    elif test \"X\`(\$echo '\t') 2>/dev/null\`\" = 'X\t'; then
-      # Yippee, \$echo works!
-      :
-    else
-      # Restart under the correct shell, and then maybe \$echo will work.
-      exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"}
-    fi
-  fi\
-"
-	$echo >> $output "\
-
-  # Find the directory that this script lives in.
-  thisdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\`
-  test \"x\$thisdir\" = \"x\$file\" && thisdir=.
-
-  # Follow symbolic links until we get to the real thisdir.
-  file=\`ls -ld \"\$file\" | sed -n 's/.*-> //p'\`
-  while test -n \"\$file\"; do
-    destdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\`
-
-    # If there was a directory component, then change thisdir.
-    if test \"x\$destdir\" != \"x\$file\"; then
-      case \"\$destdir\" in
-      [\\/]* | [A-Za-z]:[\\/]*) thisdir=\"\$destdir\" ;;
-      *) thisdir=\"\$thisdir/\$destdir\" ;;
-      esac
-    fi
-
-    file=\`\$echo \"X\$file\" | \$Xsed -e 's%^.*/%%'\`
-    file=\`ls -ld \"\$thisdir/\$file\" | sed -n 's/.*-> //p'\`
-  done
-
-  # Try to get the absolute directory name.
-  absdir=\`cd \"\$thisdir\" && pwd\`
-  test -n \"\$absdir\" && thisdir=\"\$absdir\"
-"
-
-	if test "$fast_install" = yes; then
-	  echo >> $output "\
-  program=lt-'$outputname'
-  progdir=\"\$thisdir/$objdir\"
-  
-  if test ! -f \"\$progdir/\$program\" || \\
-     { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | sed 1q\`; \\
-       test \"X\$file\" != \"X\$progdir/\$program\"; }; then
-
-    file=\"\$\$-\$program\"
-
-    if test ! -d \"\$progdir\"; then
-      $mkdir \"\$progdir\"
-    else
-      $rm \"\$progdir/\$file\"
-    fi"
-
-	  echo >> $output "\
-
-    # relink executable if necessary
-    if test -n \"\$relink_command\"; then
-      if (cd \"\$thisdir\" && eval \$relink_command); then :
-      else
-	$rm \"\$progdir/\$file\"
-	exit 1
-      fi
-    fi
-
-    $mv \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
-    { $rm \"\$progdir/\$program\";
-      $mv \"\$progdir/\$file\" \"\$progdir/\$program\"; }
-    $rm \"\$progdir/\$file\"
-  fi"
-	else
-	  echo >> $output "\
-  program='$outputname'
-  progdir=\"\$thisdir/$objdir\"
-"
-	fi
-
-	echo >> $output "\
-
-  if test -f \"\$progdir/\$program\"; then"
-
-	# Export our shlibpath_var if we have one.
-	if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
-	  $echo >> $output "\
-    # Add our own library path to $shlibpath_var
-    $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
-
-    # Some systems cannot cope with colon-terminated $shlibpath_var
-    # The second colon is a workaround for a bug in BeOS R4 sed
-    $shlibpath_var=\`\$echo \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\`
-
-    export $shlibpath_var
-"
-	fi
-
-	# fixup the dll searchpath if we need to.
-	if test -n "$dllsearchpath"; then
-	  $echo >> $output "\
-    # Add the dll search path components to the executable PATH
-    PATH=$dllsearchpath:\$PATH
-"
-	fi
-
-	$echo >> $output "\
-    if test \"\$libtool_execute_magic\" != \"$magic\"; then
-      # Run the actual program with our arguments.
-"
-	case $host in
-	*-*-cygwin* | *-*-mingw | *-*-os2*)
-	  # win32 systems need to use the prog path for dll
-	  # lookup to work
-	  $echo >> $output "\
-      exec \$progdir\\\\\$program \${1+\"\$@\"}
-"
-	  ;;
-	*)
-	  $echo >> $output "\
-      # Export the path to the program.
-      PATH=\"\$progdir:\$PATH\"
-      export PATH
-
-      exec \$program \${1+\"\$@\"}
-"
-	  ;;
-	esac
-	$echo >> $output "\
-      \$echo \"\$0: cannot exec \$program \${1+\"\$@\"}\"
-      exit 1
-    fi
-  else
-    # The program doesn't exist.
-    \$echo \"\$0: error: \$progdir/\$program does not exist\" 1>&2
-    \$echo \"This script is just a wrapper for \$program.\" 1>&2
-    echo \"See the $PACKAGE documentation for more information.\" 1>&2
-    exit 1
-  fi
-fi\
-"
-	chmod +x $output
-      fi
-      exit 0
-      ;;
-    esac
-
-    # See if we need to build an old-fashioned archive.
-    for oldlib in $oldlibs; do
-
-      if test "$build_libtool_libs" = convenience; then
-	oldobjs="$libobjs_save"
-	addlibs="$convenience"
-	build_libtool_libs=no
-      else
-	if test "$build_libtool_libs" = module; then
-	  oldobjs="$libobjs_save"
-	  build_libtool_libs=no
-	else
-	  oldobjs="$objs "`$echo "X$libobjs_save" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`
-	fi
-	addlibs="$old_convenience"
-      fi
-
-      if test -n "$addlibs"; then
-	gentop="$output_objdir/${outputname}x"
-	$show "${rm}r $gentop"
-	$run ${rm}r "$gentop"
-	$show "mkdir $gentop"
-	$run mkdir "$gentop"
-	status=$?
-	if test $status -ne 0 && test ! -d "$gentop"; then
-	  exit $status
-	fi
-	generated="$generated $gentop"
-	  
-	# Add in members from convenience archives.
-	for xlib in $addlibs; do
-	  # Extract the objects.
-	  case "$xlib" in
-	  [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;;
-	  *) xabs=`pwd`"/$xlib" ;;
-	  esac
-	  xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'`
-	  xdir="$gentop/$xlib"
-
-	  $show "${rm}r $xdir"
-	  $run ${rm}r "$xdir"
-	  $show "mkdir $xdir"
-	  $run mkdir "$xdir"
-	  status=$?
-	  if test $status -ne 0 && test ! -d "$xdir"; then
-	    exit $status
-	  fi
-	  $show "(cd $xdir && $AR x $xabs)"
-	  $run eval "(cd \$xdir && $AR x \$xabs)" || exit $?
-
-	  oldobjs="$oldobjs "`find $xdir -name \*.${objext} -print -o -name \*.lo -print | $NL2SP`
-	done
-      fi
-
-      # Do each command in the archive commands.
-      if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then
-	eval cmds=\"$old_archive_from_new_cmds\"
-      else
-	# Ensure that we have .o objects in place in case we decided
-	# not to build a shared library, and have fallen back to building
-	# static libs even though --disable-static was passed!
-	for oldobj in $oldobjs; do
-	  if test ! -f $oldobj; then
-	    xdir=`$echo "X$oldobj" | $Xsed -e 's%/[^/]*$%%'`
-	    if test "X$xdir" = "X$oldobj"; then
-	      xdir="."
-	    else
-	      xdir="$xdir"
-	    fi
-	    baseobj=`$echo "X$oldobj" | $Xsed -e 's%^.*/%%'`
-	    obj=`$echo "X$baseobj" | $Xsed -e "$o2lo"`
-	    $show "(cd $xdir && ${LN_S} $obj $baseobj)"
-	    $run eval '(cd $xdir && ${LN_S} $obj $baseobj)' || exit $?
-	  fi
-	done
-
-	eval cmds=\"$old_archive_cmds\"
-      fi
-      IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
-      for cmd in $cmds; do
-	IFS="$save_ifs"
-	$show "$cmd"
-	$run eval "$cmd" || exit $?
-      done
-      IFS="$save_ifs"
-    done
-
-    if test -n "$generated"; then
-      $show "${rm}r$generated"
-      $run ${rm}r$generated
-    fi
-
-    # Now create the libtool archive.
-    case "$output" in
-    *.la)
-      old_library=
-      test "$build_old_libs" = yes && old_library="$libname.$libext"
-      $show "creating $output"
-
-      if test -n "$xrpath"; then
-	temp_xrpath=
-	for libdir in $xrpath; do
-	  temp_xrpath="$temp_xrpath -R$libdir"
-	done
-	dependency_libs="$temp_xrpath $dependency_libs"
-      fi
-
-      # Only create the output if not a dry run.
-      if test -z "$run"; then
-	for installed in no yes; do
-	  if test "$installed" = yes; then
-	    if test -z "$install_libdir"; then
-	      break
-	    fi
-	    output="$output_objdir/$outputname"i
-	  fi
-	  $rm $output
-	  $echo > $output "\
-# $outputname - a libtool library file
-# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
-#
-# Please DO NOT delete this file!
-# It is necessary for linking the library.
-
-# The name that we can dlopen(3).
-dlname='$dlname'
-
-# Names of this library.
-library_names='$library_names'
-
-# The name of the static archive.
-old_library='$old_library'
-
-# Libraries that this one depends upon.
-dependency_libs='$dependency_libs'
-
-# Version information for $libname.
-current=$current
-age=$age
-revision=$revision
-
-# Is this an already installed library?
-installed=$installed
-
-# Directory that this library needs to be installed in:
-libdir='$install_libdir'\
-"
-	done
-      fi
-
-      # Do a symbolic link so that the libtool archive can be found in
-      # LD_LIBRARY_PATH before the program is installed.
-      $show "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)"
-      $run eval "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)" || exit $?
-      ;;
-    esac
-    exit 0
-    ;;
-
-  # libtool install mode
-  install)
-    modename="$modename: install"
-
-    # There may be an optional sh(1) argument at the beginning of
-    # install_prog (especially on Windows NT).
-    if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh; then
-      # Aesthetically quote it.
-      arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"`
-      case "$arg" in
-      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*)
-	arg="\"$arg\""
-	;;
-      esac
-      install_prog="$arg "
-      arg="$1"
-      shift
-    else
-      install_prog=
-      arg="$nonopt"
-    fi
-
-    # The real first argument should be the name of the installation program.
-    # Aesthetically quote it.
-    arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
-    case "$arg" in
-    *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*)
-      arg="\"$arg\""
-      ;;
-    esac
-    install_prog="$install_prog$arg"
-
-    # We need to accept at least all the BSD install flags.
-    dest=
-    files=
-    opts=
-    prev=
-    install_type=
-    isdir=no
-    stripme=
-    for arg
-    do
-      if test -n "$dest"; then
-	files="$files $dest"
-	dest="$arg"
-	continue
-      fi
-
-      case "$arg" in
-      -d) isdir=yes ;;
-      -f) prev="-f" ;;
-      -g) prev="-g" ;;
-      -m) prev="-m" ;;
-      -o) prev="-o" ;;
-      -s)
-	stripme=" -s"
-	continue
-	;;
-      -*) ;;
-
-      *)
-	# If the previous option needed an argument, then skip it.
-	if test -n "$prev"; then
-	  prev=
-	else
-	  dest="$arg"
-	  continue
-	fi
-	;;
-      esac
-
-      # Aesthetically quote the argument.
-      arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
-      case "$arg" in
-      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*)
-	arg="\"$arg\""
-	;;
-      esac
-      install_prog="$install_prog $arg"
-    done
-
-    if test -z "$install_prog"; then
-      $echo "$modename: you must specify an install program" 1>&2
-      $echo "$help" 1>&2
-      exit 1
-    fi
-
-    if test -n "$prev"; then
-      $echo "$modename: the \`$prev' option requires an argument" 1>&2
-      $echo "$help" 1>&2
-      exit 1
-    fi
-
-    if test -z "$files"; then
-      if test -z "$dest"; then
-	$echo "$modename: no file or destination specified" 1>&2
-      else
-	$echo "$modename: you must specify a destination" 1>&2
-      fi
-      $echo "$help" 1>&2
-      exit 1
-    fi
-
-    # Strip any trailing slash from the destination.
-    dest=`$echo "X$dest" | $Xsed -e 's%/$%%'`
-
-    # Check to see that the destination is a directory.
-    test -d "$dest" && isdir=yes
-    if test "$isdir" = yes; then
-      destdir="$dest"
-      destname=
-    else
-      destdir=`$echo "X$dest" | $Xsed -e 's%/[^/]*$%%'`
-      test "X$destdir" = "X$dest" && destdir=.
-      destname=`$echo "X$dest" | $Xsed -e 's%^.*/%%'`
-
-      # Not a directory, so check to see that there is only one file specified.
-      set dummy $files
-      if test $# -gt 2; then
-	$echo "$modename: \`$dest' is not a directory" 1>&2
-	$echo "$help" 1>&2
-	exit 1
-      fi
-    fi
-    case "$destdir" in
-    [\\/]* | [A-Za-z]:[\\/]*) ;;
-    *)
-      for file in $files; do
-	case "$file" in
-	*.lo) ;;
-	*)
-	  $echo "$modename: \`$destdir' must be an absolute directory name" 1>&2
-	  $echo "$help" 1>&2
-	  exit 1
-	  ;;
-	esac
-      done
-      ;;
-    esac
-
-    # This variable tells wrapper scripts just to set variables rather
-    # than running their programs.
-    libtool_install_magic="$magic"
-
-    staticlibs=
-    future_libdirs=
-    current_libdirs=
-    for file in $files; do
-
-      # Do each installation.
-      case "$file" in
-      *.a | *.lib)
-	# Do the static libraries later.
-	staticlibs="$staticlibs $file"
-	;;
-
-      *.la)
-	# Check to see that this really is a libtool archive.
-	if (sed -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
-	else
-	  $echo "$modename: \`$file' is not a valid libtool archive" 1>&2
-	  $echo "$help" 1>&2
-	  exit 1
-	fi
-
-	library_names=
-	old_library=
-	# If there is no directory component, then add one.
-	case "$file" in
-	*/* | *\\*) . $file ;;
-	*) . ./$file ;;
-	esac
-
-	# Add the libdir to current_libdirs if it is the destination.
-	if test "X$destdir" = "X$libdir"; then
-	  case "$current_libdirs " in
-	  *" $libdir "*) ;;
-	  *) current_libdirs="$current_libdirs $libdir" ;;
-	  esac
-	else
-	  # Note the libdir as a future libdir.
-	  case "$future_libdirs " in
-	  *" $libdir "*) ;;
-	  *) future_libdirs="$future_libdirs $libdir" ;;
-	  esac
-	fi
-
-	dir="`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/"
-	test "X$dir" = "X$file/" && dir=
-	dir="$dir$objdir"
-
-	# See the names of the shared library.
-	set dummy $library_names
-	if test -n "$2"; then
-	  realname="$2"
-	  shift
-	  shift
-
-	  # Install the shared library and build the symlinks.
-	  $show "$install_prog $dir/$realname $destdir/$realname"
-	  $run eval "$install_prog $dir/$realname $destdir/$realname" || exit $?
-
-	  if test $# -gt 0; then
-	    # Delete the old symlinks, and create new ones.
-	    for linkname
-	    do
-	      if test "$linkname" != "$realname"; then
-		$show "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)"
-		$run eval "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)"
-	      fi
-	    done
-	  fi
-
-	  # Do each command in the postinstall commands.
-	  lib="$destdir/$realname"
-	  eval cmds=\"$postinstall_cmds\"
-	  IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
-	  for cmd in $cmds; do
-	    IFS="$save_ifs"
-	    $show "$cmd"
-	    $run eval "$cmd" || exit $?
-	  done
-	  IFS="$save_ifs"
-	fi
-
-	# Install the pseudo-library for information purposes.
-	name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
-	instname="$dir/$name"i
-	$show "$install_prog $instname $destdir/$name"
-	$run eval "$install_prog $instname $destdir/$name" || exit $?
-
-	# Maybe install the static library, too.
-	test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library"
-	;;
-
-      *.lo)
-	# Install (i.e. copy) a libtool object.
-
-	# Figure out destination file name, if it wasn't already specified.
-	if test -n "$destname"; then
-	  destfile="$destdir/$destname"
-	else
-	  destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
-	  destfile="$destdir/$destfile"
-	fi
-
-	# Deduce the name of the destination old-style object file.
-	case "$destfile" in
-	*.lo)
-	  staticdest=`$echo "X$destfile" | $Xsed -e "$lo2o"`
-	  ;;
-	*.o | *.obj)
-	  staticdest="$destfile"
-	  destfile=
-	  ;;
-	*)
-	  $echo "$modename: cannot copy a libtool object to \`$destfile'" 1>&2
-	  $echo "$help" 1>&2
-	  exit 1
-	  ;;
-	esac
-
-	# Install the libtool object if requested.
-	if test -n "$destfile"; then
-	  $show "$install_prog $file $destfile"
-	  $run eval "$install_prog $file $destfile" || exit $?
-	fi
-
-	# Install the old object if enabled.
-	if test "$build_old_libs" = yes; then
-	  # Deduce the name of the old-style object file.
-	  staticobj=`$echo "X$file" | $Xsed -e "$lo2o"`
-
-	  $show "$install_prog $staticobj $staticdest"
-	  $run eval "$install_prog \$staticobj \$staticdest" || exit $?
-	fi
-	exit 0
-	;;
-
-      *)
-	# Figure out destination file name, if it wasn't already specified.
-	if test -n "$destname"; then
-	  destfile="$destdir/$destname"
-	else
-	  destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
-	  destfile="$destdir/$destfile"
-	fi
-
-	# Do a test to see if this is really a libtool program.
-	if (sed -e '4q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
-	  link_against_libtool_libs=
-	  relink_command=
-
-	  # If there is no directory component, then add one.
-	  case "$file" in
-	  */* | *\\*) . $file ;;
-	  *) . ./$file ;;
-	  esac
-
-	  # Check the variables that should have been set.
-	  if test -z "$link_against_libtool_libs"; then
-	    $echo "$modename: invalid libtool wrapper script \`$file'" 1>&2
-	    exit 1
-	  fi
-
-	  finalize=yes
-	  for lib in $link_against_libtool_libs; do
-	    # Check to see that each library is installed.
-	    libdir=
-	    if test -f "$lib"; then
-	      # If there is no directory component, then add one.
-	      case "$lib" in
-	      */* | *\\*) . $lib ;;
-	      *) . ./$lib ;;
-	      esac
-	    fi
-	    libfile="$libdir/`$echo "X$lib" | $Xsed -e 's%^.*/%%g'`"
-	    if test -n "$libdir" && test ! -f "$libfile"; then
-	      $echo "$modename: warning: \`$lib' has not been installed in \`$libdir'" 1>&2
-	      finalize=no
-	    fi
-	  done
-
-	  outputname=
-	  if test "$fast_install" = no && test -n "$relink_command"; then
-	    if test "$finalize" = yes && test -z "$run"; then
-	      tmpdir="/tmp"
-	      test -n "$TMPDIR" && tmpdir="$TMPDIR"
-	      tmpdir="$tmpdir/libtool-$$"
-	      if $mkdir -p "$tmpdir" && chmod 700 "$tmpdir"; then :
-	      else
-		$echo "$modename: error: cannot create temporary directory \`$tmpdir'" 1>&2
-		continue
-	      fi
-	      outputname="$tmpdir/$file"
-	      # Replace the output file specification.
-	      relink_command=`$echo "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'`
-
-	      $show "$relink_command"
-	      if $run eval "$relink_command"; then :
-	      else
-		$echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2
-		${rm}r "$tmpdir"
-		continue
-	      fi
-	      file="$outputname"
-	    else
-	      $echo "$modename: warning: cannot relink \`$file'" 1>&2
-	    fi
-	  else
-	    # Install the binary that we compiled earlier.
-	    file=`$echo "X$file" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"`
-	  fi
-	fi
-
-	$show "$install_prog$stripme $file $destfile"
-	$run eval "$install_prog\$stripme \$file \$destfile" || exit $?
-	test -n "$outputname" && ${rm}r "$tmpdir"
-	;;
-      esac
-    done
-
-    for file in $staticlibs; do
-      name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
-
-      # Set up the ranlib parameters.
-      oldlib="$destdir/$name"
-
-      $show "$install_prog $file $oldlib"
-      $run eval "$install_prog \$file \$oldlib" || exit $?
-
-      # Do each command in the postinstall commands.
-      eval cmds=\"$old_postinstall_cmds\"
-      IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
-      for cmd in $cmds; do
-	IFS="$save_ifs"
-	$show "$cmd"
-	$run eval "$cmd" || exit $?
-      done
-      IFS="$save_ifs"
-    done
-
-    if test -n "$future_libdirs"; then
-      $echo "$modename: warning: remember to run \`$progname --finish$future_libdirs'" 1>&2
-    fi
-
-    if test -n "$current_libdirs"; then
-      # Maybe just do a dry run.
-      test -n "$run" && current_libdirs=" -n$current_libdirs"
-      exec $SHELL $0 --finish$current_libdirs
-      exit 1
-    fi
-
-    exit 0
-    ;;
-
-  # libtool finish mode
-  finish)
-    modename="$modename: finish"
-    libdirs="$nonopt"
-    admincmds=
-
-    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
-      for dir
-      do
-	libdirs="$libdirs $dir"
-      done
-
-      for libdir in $libdirs; do
-	if test -n "$finish_cmds"; then
-	  # Do each command in the finish commands.
-	  eval cmds=\"$finish_cmds\"
-	  IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
-	  for cmd in $cmds; do
-	    IFS="$save_ifs"
-	    $show "$cmd"
-	    $run eval "$cmd" || admincmds="$admincmds
-       $cmd"
-	  done
-	  IFS="$save_ifs"
-	fi
-	if test -n "$finish_eval"; then
-	  # Do the single finish_eval.
-	  eval cmds=\"$finish_eval\"
-	  $run eval "$cmds" || admincmds="$admincmds
-       $cmds"
-	fi
-      done
-    fi
-
-    # Exit here if they wanted silent mode.
-    test "$show" = : && exit 0
-
-    echo "----------------------------------------------------------------------"
-    echo "Libraries have been installed in:"
-    for libdir in $libdirs; do
-      echo "   $libdir"
-    done
-    echo
-    echo "If you ever happen to want to link against installed libraries"
-    echo "in a given directory, LIBDIR, you must either use libtool, and"
-    echo "specify the full pathname of the library, or use \`-LLIBDIR'"
-    echo "flag during linking and do at least one of the following:"
-    if test -n "$shlibpath_var"; then
-      echo "   - add LIBDIR to the \`$shlibpath_var' environment variable"
-      echo "     during execution"
-    fi
-    if test -n "$runpath_var"; then
-      echo "   - add LIBDIR to the \`$runpath_var' environment variable"
-      echo "     during linking"
-    fi
-    if test -n "$hardcode_libdir_flag_spec"; then
-      libdir=LIBDIR
-      eval flag=\"$hardcode_libdir_flag_spec\"
-
-      echo "   - use the \`$flag' linker flag"
-    fi
-    if test -n "$admincmds"; then
-      echo "   - have your system administrator run these commands:$admincmds"
-    fi
-    if test -f /etc/ld.so.conf; then
-      echo "   - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
-    fi
-    echo
-    echo "See any operating system documentation about shared libraries for"
-    echo "more information, such as the ld(1) and ld.so(8) manual pages."
-    echo "----------------------------------------------------------------------"
-    exit 0
-    ;;
-
-  # libtool execute mode
-  execute)
-    modename="$modename: execute"
-
-    # The first argument is the command name.
-    cmd="$nonopt"
-    if test -z "$cmd"; then
-      $echo "$modename: you must specify a COMMAND" 1>&2
-      $echo "$help"
-      exit 1
-    fi
-
-    # Handle -dlopen flags immediately.
-    for file in $execute_dlfiles; do
-      if test ! -f "$file"; then
-	$echo "$modename: \`$file' is not a file" 1>&2
-	$echo "$help" 1>&2
-	exit 1
-      fi
-
-      dir=
-      case "$file" in
-      *.la)
-	# Check to see that this really is a libtool archive.
-	if (sed -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
-	else
-	  $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
-	  $echo "$help" 1>&2
-	  exit 1
-	fi
-
-	# Read the libtool library.
-	dlname=
-	library_names=
-
-	# If there is no directory component, then add one.
-	case "$file" in
-	*/* | *\\*) . $file ;;
-	*) . ./$file ;;
-	esac
-
-	# Skip this library if it cannot be dlopened.
-	if test -z "$dlname"; then
-	  # Warn if it was a shared library.
-	  test -n "$library_names" && $echo "$modename: warning: \`$file' was not linked with \`-export-dynamic'"
-	  continue
-	fi
-
-	dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`
-	test "X$dir" = "X$file" && dir=.
-
-	if test -f "$dir/$objdir/$dlname"; then
-	  dir="$dir/$objdir"
-	else
-	  $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2
-	  exit 1
-	fi
-	;;
-
-      *.lo)
-	# Just add the directory containing the .lo file.
-	dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`
-	test "X$dir" = "X$file" && dir=.
-	;;
-
-      *)
-	$echo "$modename: warning \`-dlopen' is ignored for non-libtool libraries and objects" 1>&2
-	continue
-	;;
-      esac
-
-      # Get the absolute pathname.
-      absdir=`cd "$dir" && pwd`
-      test -n "$absdir" && dir="$absdir"
-
-      # Now add the directory to shlibpath_var.
-      if eval "test -z \"\$$shlibpath_var\""; then
-	eval "$shlibpath_var=\"\$dir\""
-      else
-	eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
-      fi
-    done
-
-    # This variable tells wrapper scripts just to set shlibpath_var
-    # rather than running their programs.
-    libtool_execute_magic="$magic"
-
-    # Check if any of the arguments is a wrapper script.
-    args=
-    for file
-    do
-      case "$file" in
-      -*) ;;
-      *)
-	# Do a test to see if this is really a libtool program.
-	if (sed -e '4q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
-	  # If there is no directory component, then add one.
-	  case "$file" in
-	  */* | *\\*) . $file ;;
-	  *) . ./$file ;;
-	  esac
-
-	  # Transform arg to wrapped name.
-	  file="$progdir/$program"
-	fi
-	;;
-      esac
-      # Quote arguments (to preserve shell metacharacters).
-      file=`$echo "X$file" | $Xsed -e "$sed_quote_subst"`
-      args="$args \"$file\""
-    done
-
-    if test -z "$run"; then
-      if test -n "$shlibpath_var"; then
-        # Export the shlibpath_var.
-        eval "export $shlibpath_var"
-      fi
-
-      # Restore saved enviroment variables
-      if test "${save_LC_ALL+set}" = set; then
-	LC_ALL="$save_LC_ALL"; export LC_ALL
-      fi
-      if test "${save_LANG+set}" = set; then
-	LANG="$save_LANG"; export LANG
-      fi
-
-      # Now actually exec the command.
-      eval "exec \$cmd$args"
-
-      $echo "$modename: cannot exec \$cmd$args"
-      exit 1
-    else
-      # Display what would be done.
-      if test -n "$shlibpath_var"; then
-        eval "\$echo \"\$shlibpath_var=\$$shlibpath_var\""
-        $echo "export $shlibpath_var"
-      fi
-      $echo "$cmd$args"
-      exit 0
-    fi
-    ;;
-
-  # libtool uninstall mode
-  uninstall)
-    modename="$modename: uninstall"
-    rm="$nonopt"
-    files=
-
-    for arg
-    do
-      case "$arg" in
-      -*) rm="$rm $arg" ;;
-      *) files="$files $arg" ;;
-      esac
-    done
-
-    if test -z "$rm"; then
-      $echo "$modename: you must specify an RM program" 1>&2
-      $echo "$help" 1>&2
-      exit 1
-    fi
-
-    for file in $files; do
-      dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`
-      test "X$dir" = "X$file" && dir=.
-      name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
-
-      rmfiles="$file"
-
-      case "$name" in
-      *.la)
-	# Possibly a libtool archive, so verify it.
-	if (sed -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
-	  . $dir/$name
-
-	  # Delete the libtool libraries and symlinks.
-	  for n in $library_names; do
-	    rmfiles="$rmfiles $dir/$n"
-	  done
-	  test -n "$old_library" && rmfiles="$rmfiles $dir/$old_library"
-
-	  $show "$rm $rmfiles"
-	  $run $rm $rmfiles
-
-	  if test -n "$library_names"; then
-	    # Do each command in the postuninstall commands.
-	    eval cmds=\"$postuninstall_cmds\"
-	    IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
-	    for cmd in $cmds; do
-	      IFS="$save_ifs"
-	      $show "$cmd"
-	      $run eval "$cmd"
-	    done
-	    IFS="$save_ifs"
-	  fi
-
-	  if test -n "$old_library"; then
-	    # Do each command in the old_postuninstall commands.
-	    eval cmds=\"$old_postuninstall_cmds\"
-	    IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
-	    for cmd in $cmds; do
-	      IFS="$save_ifs"
-	      $show "$cmd"
-	      $run eval "$cmd"
-	    done
-	    IFS="$save_ifs"
-	  fi
-
-	  # FIXME: should reinstall the best remaining shared library.
-	fi
-	;;
-
-      *.lo)
-	if test "$build_old_libs" = yes; then
-	  oldobj=`$echo "X$name" | $Xsed -e "$lo2o"`
-	  rmfiles="$rmfiles $dir/$oldobj"
-	fi
-	$show "$rm $rmfiles"
-	$run $rm $rmfiles
-	;;
-
-      *)
-	$show "$rm $rmfiles"
-	$run $rm $rmfiles
-	;;
-      esac
-    done
-    exit 0
-    ;;
-
-  "")
-    $echo "$modename: you must specify a MODE" 1>&2
-    $echo "$generic_help" 1>&2
-    exit 1
-    ;;
-  esac
-
-  $echo "$modename: invalid operation mode \`$mode'" 1>&2
-  $echo "$generic_help" 1>&2
-  exit 1
-fi # test -z "$show_help"
-
-# We need to display help for each of the modes.
-case "$mode" in
-"") $echo \
-"Usage: $modename [OPTION]... [MODE-ARG]...
-
-Provide generalized library-building support services.
-
-    --config          show all configuration variables
-    --debug           enable verbose shell tracing
--n, --dry-run         display commands without modifying any files
-    --features        display basic configuration information and exit
-    --finish          same as \`--mode=finish'
-    --help            display this help message and exit
-    --mode=MODE       use operation mode MODE [default=inferred from MODE-ARGS]
-    --quiet           same as \`--silent'
-    --silent          don't print informational messages
-    --version         print version information
-
-MODE must be one of the following:
-
-      compile         compile a source file into a libtool object
-      execute         automatically set library path, then run a program
-      finish          complete the installation of libtool libraries
-      install         install libraries or executables
-      link            create a library or an executable
-      uninstall       remove libraries from an installed directory
-
-MODE-ARGS vary depending on the MODE.  Try \`$modename --help --mode=MODE' for
-a more detailed description of MODE."
-  exit 0
-  ;;
-
-compile)
-  $echo \
-"Usage: $modename [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
-
-Compile a source file into a libtool library object.
-
-This mode accepts the following additional options:
-
-  -o OUTPUT-FILE    set the output file name to OUTPUT-FILE
-  -static           always build a \`.o' file suitable for static linking
-
-COMPILE-COMMAND is a command to be used in creating a \`standard' object file
-from the given SOURCEFILE.
-
-The output file name is determined by removing the directory component from
-SOURCEFILE, then substituting the C source code suffix \`.c' with the
-library object suffix, \`.lo'."
-  ;;
-
-execute)
-  $echo \
-"Usage: $modename [OPTION]... --mode=execute COMMAND [ARGS]...
-
-Automatically set library path, then run a program.
-
-This mode accepts the following additional options:
-
-  -dlopen FILE      add the directory containing FILE to the library path
-
-This mode sets the library path environment variable according to \`-dlopen'
-flags.
-
-If any of the ARGS are libtool executable wrappers, then they are translated
-into their corresponding uninstalled binary, and any of their required library
-directories are added to the library path.
-
-Then, COMMAND is executed, with ARGS as arguments."
-  ;;
-
-finish)
-  $echo \
-"Usage: $modename [OPTION]... --mode=finish [LIBDIR]...
-
-Complete the installation of libtool libraries.
-
-Each LIBDIR is a directory that contains libtool libraries.
-
-The commands that this mode executes may require superuser privileges.  Use
-the \`--dry-run' option if you just want to see what would be executed."
-  ;;
-
-install)
-  $echo \
-"Usage: $modename [OPTION]... --mode=install INSTALL-COMMAND...
-
-Install executables or libraries.
-
-INSTALL-COMMAND is the installation command.  The first component should be
-either the \`install' or \`cp' program.
-
-The rest of the components are interpreted as arguments to that command (only
-BSD-compatible install options are recognized)."
-  ;;
-
-link)
-  $echo \
-"Usage: $modename [OPTION]... --mode=link LINK-COMMAND...
-
-Link object files or libraries together to form another library, or to
-create an executable program.
-
-LINK-COMMAND is a command using the C compiler that you would use to create
-a program from several object files.
-
-The following components of LINK-COMMAND are treated specially:
-
-  -all-static       do not do any dynamic linking at all
-  -avoid-version    do not add a version suffix if possible
-  -dlopen FILE      \`-dlpreopen' FILE if it cannot be dlopened at runtime
-  -dlpreopen FILE   link in FILE and add its symbols to lt_preloaded_symbols
-  -export-dynamic   allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
-  -export-symbols SYMFILE
-		    try to export only the symbols listed in SYMFILE
-  -export-symbols-regex REGEX
-		    try to export only the symbols matching REGEX
-  -LLIBDIR          search LIBDIR for required installed libraries
-  -lNAME            OUTPUT-FILE requires the installed library libNAME
-  -module           build a library that can dlopened
-  -no-undefined     declare that a library does not refer to external symbols
-  -o OUTPUT-FILE    create OUTPUT-FILE from the specified objects
-  -release RELEASE  specify package release information
-  -rpath LIBDIR     the created library will eventually be installed in LIBDIR
-  -R[ ]LIBDIR       add LIBDIR to the runtime path of programs and libraries
-  -static           do not do any dynamic linking of libtool libraries
-  -version-info CURRENT[:REVISION[:AGE]]
-		    specify library version info [each variable defaults to 0]
-
-All other options (arguments beginning with \`-') are ignored.
-
-Every other argument is treated as a filename.  Files ending in \`.la' are
-treated as uninstalled libtool libraries, other files are standard or library
-object files.
-
-If the OUTPUT-FILE ends in \`.la', then a libtool library is created,
-only library objects (\`.lo' files) may be specified, and \`-rpath' is
-required, except when creating a convenience library.
-
-If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created
-using \`ar' and \`ranlib', or on Windows using \`lib'.
-
-If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file
-is created, otherwise an executable program is created."
-  ;;
-
-uninstall)
-  $echo \
-"Usage: $modename [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
-
-Remove libraries from an installation directory.
-
-RM is the name of the program to use to delete files associated with each FILE
-(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
-to RM.
-
-If FILE is a libtool library, all the files associated with it are deleted.
-Otherwise, only FILE itself is deleted using RM."
-  ;;
-
-*)
-  $echo "$modename: invalid operation mode \`$mode'" 1>&2
-  $echo "$help" 1>&2
-  exit 1
-  ;;
-esac
-
-echo
-$echo "Try \`$modename --help' for more information about other modes."
-
-exit 0
-
-# Local Variables:
-# mode:shell-script
-# sh-indentation:2
-# End:
diff --git a/srclib/pcre/maketables.c b/srclib/pcre/maketables.c
deleted file mode 100644
index c0f06c0..0000000
--- a/srclib/pcre/maketables.c
+++ /dev/null
@@ -1,132 +0,0 @@
-/*************************************************
-*      Perl-Compatible Regular Expressions       *
-*************************************************/
-
-/*
-PCRE is a library of functions to support regular expressions whose syntax
-and semantics are as close as possible to those of the Perl 5 language.
-
-Written by: Philip Hazel <ph10@cam.ac.uk>
-
-           Copyright (c) 1997-2000 University of Cambridge
-
------------------------------------------------------------------------------
-Permission is granted to anyone to use this software for any purpose on any
-computer system, and to redistribute it freely, subject to the following
-restrictions:
-
-1. This software is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-
-2. The origin of this software must not be misrepresented, either by
-   explicit claim or by omission.
-
-3. Altered versions must be plainly marked as such, and must not be
-   misrepresented as being the original software.
-
-4. If PCRE is embedded in any software that is released under the GNU
-   General Purpose Licence (GPL), then the terms of that licence shall
-   supersede any condition above with which it is incompatible.
------------------------------------------------------------------------------
-
-See the file Tech.Notes for some information on the internals.
-*/
-
-
-/* This file is compiled on its own as part of the PCRE library. However,
-it is also included in the compilation of dftables.c, in which case the macro
-DFTABLES is defined. */
-
-#ifndef DFTABLES
-#include "internal.h"
-#endif
-
-
-
-/*************************************************
-*           Create PCRE character tables         *
-*************************************************/
-
-/* This function builds a set of character tables for use by PCRE and returns
-a pointer to them. They are build using the ctype functions, and consequently
-their contents will depend upon the current locale setting. When compiled as
-part of the library, the store is obtained via pcre_malloc(), but when compiled
-inside dftables, use malloc().
-
-Arguments:   none
-Returns:     pointer to the contiguous block of data
-*/
-
-unsigned const char *
-pcre_maketables(void)
-{
-unsigned char *yield, *p;
-int i;
-
-#ifndef DFTABLES
-yield = (unsigned char*)(pcre_malloc)(tables_length);
-#else
-yield = (unsigned char*)malloc(tables_length);
-#endif
-
-if (yield == NULL) return NULL;
-p = yield;
-
-/* First comes the lower casing table */
-
-for (i = 0; i < 256; i++) *p++ = tolower(i);
-
-/* Next the case-flipping table */
-
-for (i = 0; i < 256; i++) *p++ = islower(i)? toupper(i) : tolower(i);
-
-/* Then the character class tables. Don't try to be clever and save effort
-on exclusive ones - in some locales things may be different. */
-
-memset(p, 0, cbit_length);
-for (i = 0; i < 256; i++)
-  {
-  if (isdigit(i))
-    {
-    p[cbit_digit  + i/8] |= 1 << (i&7);
-    p[cbit_word   + i/8] |= 1 << (i&7);
-    }
-  if (isupper(i))
-    {
-    p[cbit_upper  + i/8] |= 1 << (i&7);
-    p[cbit_word   + i/8] |= 1 << (i&7);
-    }
-  if (islower(i))
-    {
-    p[cbit_lower  + i/8] |= 1 << (i&7);
-    p[cbit_word   + i/8] |= 1 << (i&7);
-    }
-  if (i == '_')   p[cbit_word   + i/8] |= 1 << (i&7);
-  if (isspace(i)) p[cbit_space  + i/8] |= 1 << (i&7);
-  if (isxdigit(i))p[cbit_xdigit + i/8] |= 1 << (i&7);
-  if (isgraph(i)) p[cbit_graph  + i/8] |= 1 << (i&7);
-  if (isprint(i)) p[cbit_print  + i/8] |= 1 << (i&7);
-  if (ispunct(i)) p[cbit_punct  + i/8] |= 1 << (i&7);
-  if (iscntrl(i)) p[cbit_cntrl  + i/8] |= 1 << (i&7);
-  }
-p += cbit_length;
-
-/* Finally, the character type table */
-
-for (i = 0; i < 256; i++)
-  {
-  int x = 0;
-  if (isspace(i)) x += ctype_space;
-  if (isalpha(i)) x += ctype_letter;
-  if (isdigit(i)) x += ctype_digit;
-  if (isxdigit(i)) x += ctype_xdigit;
-  if (isalnum(i) || i == '_') x += ctype_word;
-  if (strchr("*+?{^.$|()[", i) != 0) x += ctype_meta;
-  *p++ = x;
-  }
-
-return yield;
-}
-
-/* End of maketables.c */
diff --git a/srclib/pcre/pcre-config.in b/srclib/pcre/pcre-config.in
deleted file mode 100644
index 8daded9..0000000
--- a/srclib/pcre/pcre-config.in
+++ /dev/null
@@ -1,59 +0,0 @@
-#!/bin/sh
-
-prefix=@prefix@
-exec_prefix=@exec_prefix@
-exec_prefix_set=no
-
-usage="\
-Usage: pcre-config [--prefix] [--exec-prefix] [--version] [--libs] [--libs-posix] [--cflags] [--cflags-posix]"
-
-if test $# -eq 0; then
-      echo "${usage}" 1>&2
-      exit 1
-fi
-
-while test $# -gt 0; do
-  case "$1" in
-  -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
-  *) optarg= ;;
-  esac
-
-  case $1 in
-    --prefix=*)
-      prefix=$optarg
-      if test $exec_prefix_set = no ; then
-        exec_prefix=$optarg
-      fi
-      ;;
-    --prefix)
-      echo $prefix
-      ;;
-    --exec-prefix=*)
-      exec_prefix=$optarg
-      exec_prefix_set=yes
-      ;;
-    --exec-prefix)
-      echo $exec_prefix
-      ;;
-    --version)
-      echo @PCRE_VERSION@
-      ;;
-    --cflags | --cflags-posix)
-      if test @includedir@ != /usr/include ; then
-        includes=-I@includedir@
-      fi
-      echo $includes
-      ;;
-    --libs-posix)
-      echo -L@libdir@ -lpcreposix -lpcre
-      ;;
-    --libs)
-      echo -L@libdir@ -lpcre
-      ;;
-    *)
-      echo "${usage}" 1>&2
-      exit 1
-      ;;
-  esac
-  shift
-done
diff --git a/srclib/pcre/pcre.c b/srclib/pcre/pcre.c
deleted file mode 100644
index e3fdde9..0000000
--- a/srclib/pcre/pcre.c
+++ /dev/null
@@ -1,4828 +0,0 @@
-/*************************************************
-*      Perl-Compatible Regular Expressions       *
-*************************************************/
-
-/*
-This is a library of functions to support regular expressions whose syntax
-and semantics are as close as possible to those of the Perl 5 language. See
-the file Tech.Notes for some information on the internals.
-
-Written by: Philip Hazel <ph10@cam.ac.uk>
-
-           Copyright (c) 1997-2000 University of Cambridge
-
------------------------------------------------------------------------------
-Permission is granted to anyone to use this software for any purpose on any
-computer system, and to redistribute it freely, subject to the following
-restrictions:
-
-1. This software is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-
-2. The origin of this software must not be misrepresented, either by
-   explicit claim or by omission.
-
-3. Altered versions must be plainly marked as such, and must not be
-   misrepresented as being the original software.
-
-4. If PCRE is embedded in any software that is released under the GNU
-   General Purpose Licence (GPL), then the terms of that licence shall
-   supersede any condition above with which it is incompatible.
------------------------------------------------------------------------------
-*/
-
-
-/* Define DEBUG to get debugging output on stdout. */
-
-/* #define DEBUG */
-
-/* Use a macro for debugging printing, 'cause that eliminates the use of #ifdef
-inline, and there are *still* stupid compilers about that don't like indented
-pre-processor statements. I suppose it's only been 10 years... */
-
-#ifdef DEBUG
-#define DPRINTF(p) printf p
-#else
-#define DPRINTF(p) /*nothing*/
-#endif
-
-/* Include the internals header, which itself includes Standard C headers plus
-the external pcre header. */
-
-#include "internal.h"
-
-
-/* Allow compilation as C++ source code, should anybody want to do that. */
-
-#ifdef __cplusplus
-#define class pcre_class
-#endif
-
-
-/* Number of items on the nested bracket stacks at compile time. This should
-not be set greater than 200. */
-
-#define BRASTACK_SIZE 200
-
-
-/* Min and max values for the common repeats; for the maxima, 0 => infinity */
-
-static const char rep_min[] = { 0, 0, 1, 1, 0, 0 };
-static const char rep_max[] = { 0, 0, 0, 0, 1, 1 };
-
-/* Text forms of OP_ values and things, for debugging (not all used) */
-
-#ifdef DEBUG
-static const char *OP_names[] = {
-  "End", "\\A", "\\B", "\\b", "\\D", "\\d",
-  "\\S", "\\s", "\\W", "\\w", "\\Z", "\\z",
-  "Opt", "^", "$", "Any", "chars", "not",
-  "*", "*?", "+", "+?", "?", "??", "{", "{", "{",
-  "*", "*?", "+", "+?", "?", "??", "{", "{", "{",
-  "*", "*?", "+", "+?", "?", "??", "{", "{", "{",
-  "*", "*?", "+", "+?", "?", "??", "{", "{",
-  "class", "Ref", "Recurse",
-  "Alt", "Ket", "KetRmax", "KetRmin", "Assert", "Assert not",
-  "AssertB", "AssertB not", "Reverse", "Once", "Cond", "Cref",
-  "Brazero", "Braminzero", "Bra"
-};
-#endif
-
-/* Table for handling escaped characters in the range '0'-'z'. Positive returns
-are simple data values; negative values are for special things like \d and so
-on. Zero means further processing is needed (for things like \x), or the escape
-is invalid. */
-
-static const short int escapes[] = {
-    0,      0,      0,      0,      0,      0,      0,      0,   /* 0 - 7 */
-    0,      0,    ':',    ';',    '<',    '=',    '>',    '?',   /* 8 - ? */
-  '@', -ESC_A, -ESC_B,      0, -ESC_D,      0,      0,      0,   /* @ - G */
-    0,      0,      0,      0,      0,      0,      0,      0,   /* H - O */
-    0,      0,      0, -ESC_S,      0,      0,      0, -ESC_W,   /* P - W */
-    0,      0, -ESC_Z,    '[',   '\\',    ']',    '^',    '_',   /* X - _ */
-  '`',      7, -ESC_b,      0, -ESC_d,     27,   '\f',      0,   /* ` - g */
-    0,      0,      0,      0,      0,      0,   '\n',      0,   /* h - o */
-    0,      0,   '\r', -ESC_s,   '\t',      0,      0, -ESC_w,   /* p - w */
-    0,      0, -ESC_z                                            /* x - z */
-};
-
-/* Tables of names of POSIX character classes and their lengths. The list is
-terminated by a zero length entry. The first three must be alpha, upper, lower,
-as this is assumed for handling case independence. */
-
-static const char *posix_names[] = {
-  "alpha", "lower", "upper",
-  "alnum", "ascii", "cntrl", "digit", "graph",
-  "print", "punct", "space", "word",  "xdigit" };
-
-static const uschar posix_name_lengths[] = {
-  5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 6, 0 };
-
-/* Table of class bit maps for each POSIX class; up to three may be combined
-to form the class. */
-
-static const int posix_class_maps[] = {
-  cbit_lower, cbit_upper, -1,             /* alpha */
-  cbit_lower, -1,         -1,             /* lower */
-  cbit_upper, -1,         -1,             /* upper */
-  cbit_digit, cbit_lower, cbit_upper,     /* alnum */
-  cbit_print, cbit_cntrl, -1,             /* ascii */
-  cbit_cntrl, -1,         -1,             /* cntrl */
-  cbit_digit, -1,         -1,             /* digit */
-  cbit_graph, -1,         -1,             /* graph */
-  cbit_print, -1,         -1,             /* print */
-  cbit_punct, -1,         -1,             /* punct */
-  cbit_space, -1,         -1,             /* space */
-  cbit_word,  -1,         -1,             /* word */
-  cbit_xdigit,-1,         -1              /* xdigit */
-};
-
-
-/* Definition to allow mutual recursion */
-
-static BOOL
-  compile_regex(int, int, int *, uschar **, const uschar **, const char **,
-    BOOL, int, int *, int *, compile_data *);
-
-/* Structure for building a chain of data that actually lives on the
-stack, for holding the values of the subject pointer at the start of each
-subpattern, so as to detect when an empty string has been matched by a
-subpattern - to break infinite loops. */
-
-typedef struct eptrblock {
-  struct eptrblock *prev;
-  const uschar *saved_eptr;
-} eptrblock;
-
-/* Flag bits for the match() function */
-
-#define match_condassert   0x01    /* Called to check a condition assertion */
-#define match_isgroup      0x02    /* Set if start of bracketed group */
-
-
-
-/*************************************************
-*               Global variables                 *
-*************************************************/
-
-/* PCRE is thread-clean and doesn't use any global variables in the normal
-sense. However, it calls memory allocation and free functions via the two
-indirections below, which are can be changed by the caller, but are shared
-between all threads. */
-
-void *(*pcre_malloc)(size_t) = malloc;
-void  (*pcre_free)(void *) = free;
-
-
-
-
-/*************************************************
-*             Default character tables           *
-*************************************************/
-
-/* A default set of character tables is included in the PCRE binary. Its source
-is built by the maketables auxiliary program, which uses the default C ctypes
-functions, and put in the file chartables.c. These tables are used by PCRE
-whenever the caller of pcre_compile() does not provide an alternate set of
-tables. */
-
-#include "chartables.c"
-
-
-
-/*************************************************
-*          Return version string                 *
-*************************************************/
-
-#define STRING(a)  # a
-#define XSTRING(s) STRING(s)
-
-const char *
-pcre_version(void)
-{
-return XSTRING(PCRE_MAJOR) "." XSTRING(PCRE_MINOR) " " XSTRING(PCRE_DATE);
-}
-
-
-
-
-/*************************************************
-* (Obsolete) Return info about compiled pattern  *
-*************************************************/
-
-/* This is the original "info" function. It picks potentially useful data out
-of the private structure, but its interface was too rigid. It remains for
-backwards compatibility. The public options are passed back in an int - though
-the re->options field has been expanded to a long int, all the public options
-at the low end of it, and so even on 16-bit systems this will still be OK.
-Therefore, I haven't changed the API for pcre_info().
-
-Arguments:
-  external_re   points to compiled code
-  optptr        where to pass back the options
-  first_char    where to pass back the first character,
-                or -1 if multiline and all branches start ^,
-                or -2 otherwise
-
-Returns:        number of capturing subpatterns
-                or negative values on error
-*/
-
-int
-pcre_info(const pcre *external_re, int *optptr, int *first_char)
-{
-const real_pcre *re = (const real_pcre *)external_re;
-if (re == NULL) return PCRE_ERROR_NULL;
-if (re->magic_number != MAGIC_NUMBER) return PCRE_ERROR_BADMAGIC;
-if (optptr != NULL) *optptr = (int)(re->options & PUBLIC_OPTIONS);
-if (first_char != NULL)
-  *first_char = ((re->options & PCRE_FIRSTSET) != 0)? re->first_char :
-     ((re->options & PCRE_STARTLINE) != 0)? -1 : -2;
-return re->top_bracket;
-}
-
-
-
-/*************************************************
-*        Return info about compiled pattern      *
-*************************************************/
-
-/* This is a newer "info" function which has an extensible interface so
-that additional items can be added compatibly.
-
-Arguments:
-  external_re      points to compiled code
-  external_study   points to study data, or NULL
-  what             what information is required
-  where            where to put the information
-
-Returns:           0 if data returned, negative on error
-*/
-
-int
-pcre_fullinfo(const pcre *external_re, const pcre_extra *study_data, int what,
-  void *where)
-{
-const real_pcre *re = (const real_pcre *)external_re;
-const real_pcre_extra *study = (const real_pcre_extra *)study_data;
-
-if (re == NULL || where == NULL) return PCRE_ERROR_NULL;
-if (re->magic_number != MAGIC_NUMBER) return PCRE_ERROR_BADMAGIC;
-
-switch (what)
-  {
-  case PCRE_INFO_OPTIONS:
-  *((unsigned long int *)where) = re->options & PUBLIC_OPTIONS;
-  break;
-
-  case PCRE_INFO_SIZE:
-  *((size_t *)where) = re->size;
-  break;
-
-  case PCRE_INFO_CAPTURECOUNT:
-  *((int *)where) = re->top_bracket;
-  break;
-
-  case PCRE_INFO_BACKREFMAX:
-  *((int *)where) = re->top_backref;
-  break;
-
-  case PCRE_INFO_FIRSTCHAR:
-  *((int *)where) =
-    ((re->options & PCRE_FIRSTSET) != 0)? re->first_char :
-    ((re->options & PCRE_STARTLINE) != 0)? -1 : -2;
-  break;
-
-  case PCRE_INFO_FIRSTTABLE:
-  *((const uschar **)where) =
-    (study != NULL && (study->options & PCRE_STUDY_MAPPED) != 0)?
-      study->start_bits : NULL;
-  break;
-
-  case PCRE_INFO_LASTLITERAL:
-  *((int *)where) =
-    ((re->options & PCRE_REQCHSET) != 0)? re->req_char : -1;
-  break;
-
-  default: return PCRE_ERROR_BADOPTION;
-  }
-
-return 0;
-}
-
-
-
-#ifdef DEBUG
-/*************************************************
-*        Debugging function to print chars       *
-*************************************************/
-
-/* Print a sequence of chars in printable format, stopping at the end of the
-subject if the requested.
-
-Arguments:
-  p           points to characters
-  length      number to print
-  is_subject  TRUE if printing from within md->start_subject
-  md          pointer to matching data block, if is_subject is TRUE
-
-Returns:     nothing
-*/
-
-static void
-pchars(const uschar *p, int length, BOOL is_subject, match_data *md)
-{
-int c;
-if (is_subject && length > md->end_subject - p) length = md->end_subject - p;
-while (length-- > 0)
-  if (isprint(c = *(p++))) printf("%c", c); else printf("\\x%02x", c);
-}
-#endif
-
-
-
-
-/*************************************************
-*            Handle escapes                      *
-*************************************************/
-
-/* This function is called when a \ has been encountered. It either returns a
-positive value for a simple escape such as \n, or a negative value which
-encodes one of the more complicated things such as \d. On entry, ptr is
-pointing at the \. On exit, it is on the final character of the escape
-sequence.
-
-Arguments:
-  ptrptr     points to the pattern position pointer
-  errorptr   points to the pointer to the error message
-  bracount   number of previous extracting brackets
-  options    the options bits
-  isclass    TRUE if inside a character class
-  cd         pointer to char tables block
-
-Returns:     zero or positive => a data character
-             negative => a special escape sequence
-             on error, errorptr is set
-*/
-
-static int
-check_escape(const uschar **ptrptr, const char **errorptr, int bracount,
-  int options, BOOL isclass, compile_data *cd)
-{
-const uschar *ptr = *ptrptr;
-int c, i;
-
-c = *(++ptr) & 255;   /* Ensure > 0 on signed-char systems */
-if (c == 0) *errorptr = ERR1;
-
-/* Digits or letters may have special meaning; all others are literals. */
-
-else if (c < '0' || c > 'z') {}
-
-/* Do an initial lookup in a table. A non-zero result is something that can be
-returned immediately. Otherwise further processing may be required. */
-
-else if ((i = escapes[c - '0']) != 0) c = i;
-
-/* Escapes that need further processing, or are illegal. */
-
-else
-  {
-  const uschar *oldptr;
-  switch (c)
-    {
-    /* The handling of escape sequences consisting of a string of digits
-    starting with one that is not zero is not straightforward. By experiment,
-    the way Perl works seems to be as follows:
-
-    Outside a character class, the digits are read as a decimal number. If the
-    number is less than 10, or if there are that many previous extracting
-    left brackets, then it is a back reference. Otherwise, up to three octal
-    digits are read to form an escaped byte. Thus \123 is likely to be octal
-    123 (cf \0123, which is octal 012 followed by the literal 3). If the octal
-    value is greater than 377, the least significant 8 bits are taken. Inside a
-    character class, \ followed by a digit is always an octal number. */
-
-    case '1': case '2': case '3': case '4': case '5':
-    case '6': case '7': case '8': case '9':
-
-    if (!isclass)
-      {
-      oldptr = ptr;
-      c -= '0';
-      while ((cd->ctypes[ptr[1]] & ctype_digit) != 0)
-        c = c * 10 + *(++ptr) - '0';
-      if (c < 10 || c <= bracount)
-        {
-        c = -(ESC_REF + c);
-        break;
-        }
-      ptr = oldptr;      /* Put the pointer back and fall through */
-      }
-
-    /* Handle an octal number following \. If the first digit is 8 or 9, Perl
-    generates a binary zero byte and treats the digit as a following literal.
-    Thus we have to pull back the pointer by one. */
-
-    if ((c = *ptr) >= '8')
-      {
-      ptr--;
-      c = 0;
-      break;
-      }
-
-    /* \0 always starts an octal number, but we may drop through to here with a
-    larger first octal digit */
-
-    case '0':
-    c -= '0';
-    while(i++ < 2 && (cd->ctypes[ptr[1]] & ctype_digit) != 0 &&
-      ptr[1] != '8' && ptr[1] != '9')
-        c = c * 8 + *(++ptr) - '0';
-    break;
-
-    /* Special escapes not starting with a digit are straightforward */
-
-    case 'x':
-    c = 0;
-    while (i++ < 2 && (cd->ctypes[ptr[1]] & ctype_xdigit) != 0)
-      {
-      ptr++;
-      c = c * 16 + cd->lcc[*ptr] -
-        (((cd->ctypes[*ptr] & ctype_digit) != 0)? '0' : 'W');
-      }
-    break;
-
-    case 'c':
-    c = *(++ptr);
-    if (c == 0)
-      {
-      *errorptr = ERR2;
-      return 0;
-      }
-
-    /* A letter is upper-cased; then the 0x40 bit is flipped */
-
-    if (c >= 'a' && c <= 'z') c = cd->fcc[c];
-    c ^= 0x40;
-    break;
-
-    /* PCRE_EXTRA enables extensions to Perl in the matter of escapes. Any
-    other alphameric following \ is an error if PCRE_EXTRA was set; otherwise,
-    for Perl compatibility, it is a literal. This code looks a bit odd, but
-    there used to be some cases other than the default, and there may be again
-    in future, so I haven't "optimized" it. */
-
-    default:
-    if ((options & PCRE_EXTRA) != 0) switch(c)
-      {
-      default:
-      *errorptr = ERR3;
-      break;
-      }
-    break;
-    }
-  }
-
-*ptrptr = ptr;
-return c;
-}
-
-
-
-/*************************************************
-*            Check for counted repeat            *
-*************************************************/
-
-/* This function is called when a '{' is encountered in a place where it might
-start a quantifier. It looks ahead to see if it really is a quantifier or not.
-It is only a quantifier if it is one of the forms {ddd} {ddd,} or {ddd,ddd}
-where the ddds are digits.
-
-Arguments:
-  p         pointer to the first char after '{'
-  cd        pointer to char tables block
-
-Returns:    TRUE or FALSE
-*/
-
-static BOOL
-is_counted_repeat(const uschar *p, compile_data *cd)
-{
-if ((cd->ctypes[*p++] & ctype_digit) == 0) return FALSE;
-while ((cd->ctypes[*p] & ctype_digit) != 0) p++;
-if (*p == '}') return TRUE;
-
-if (*p++ != ',') return FALSE;
-if (*p == '}') return TRUE;
-
-if ((cd->ctypes[*p++] & ctype_digit) == 0) return FALSE;
-while ((cd->ctypes[*p] & ctype_digit) != 0) p++;
-return (*p == '}');
-}
-
-
-
-/*************************************************
-*         Read repeat counts                     *
-*************************************************/
-
-/* Read an item of the form {n,m} and return the values. This is called only
-after is_counted_repeat() has confirmed that a repeat-count quantifier exists,
-so the syntax is guaranteed to be correct, but we need to check the values.
-
-Arguments:
-  p          pointer to first char after '{'
-  minp       pointer to int for min
-  maxp       pointer to int for max
-             returned as -1 if no max
-  errorptr   points to pointer to error message
-  cd         pointer to character tables clock
-
-Returns:     pointer to '}' on success;
-             current ptr on error, with errorptr set
-*/
-
-static const uschar *
-read_repeat_counts(const uschar *p, int *minp, int *maxp,
-  const char **errorptr, compile_data *cd)
-{
-int min = 0;
-int max = -1;
-
-while ((cd->ctypes[*p] & ctype_digit) != 0) min = min * 10 + *p++ - '0';
-
-if (*p == '}') max = min; else
-  {
-  if (*(++p) != '}')
-    {
-    max = 0;
-    while((cd->ctypes[*p] & ctype_digit) != 0) max = max * 10 + *p++ - '0';
-    if (max < min)
-      {
-      *errorptr = ERR4;
-      return p;
-      }
-    }
-  }
-
-/* Do paranoid checks, then fill in the required variables, and pass back the
-pointer to the terminating '}'. */
-
-if (min > 65535 || max > 65535)
-  *errorptr = ERR5;
-else
-  {
-  *minp = min;
-  *maxp = max;
-  }
-return p;
-}
-
-
-
-/*************************************************
-*        Find the fixed length of a pattern      *
-*************************************************/
-
-/* Scan a pattern and compute the fixed length of subject that will match it,
-if the length is fixed. This is needed for dealing with backward assertions.
-
-Arguments:
-  code     points to the start of the pattern (the bracket)
-
-Returns:   the fixed length, or -1 if there is no fixed length
-*/
-
-static int
-find_fixedlength(uschar *code)
-{
-int length = -1;
-
-register int branchlength = 0;
-register uschar *cc = code + 3;
-
-/* Scan along the opcodes for this branch. If we get to the end of the
-branch, check the length against that of the other branches. */
-
-for (;;)
-  {
-  int d;
-  register int op = *cc;
-  if (op >= OP_BRA) op = OP_BRA;
-
-  switch (op)
-    {
-    case OP_BRA:
-    case OP_ONCE:
-    case OP_COND:
-    d = find_fixedlength(cc);
-    if (d < 0) return -1;
-    branchlength += d;
-    do cc += (cc[1] << 8) + cc[2]; while (*cc == OP_ALT);
-    cc += 3;
-    break;
-
-    /* Reached end of a branch; if it's a ket it is the end of a nested
-    call. If it's ALT it is an alternation in a nested call. If it is
-    END it's the end of the outer call. All can be handled by the same code. */
-
-    case OP_ALT:
-    case OP_KET:
-    case OP_KETRMAX:
-    case OP_KETRMIN:
-    case OP_END:
-    if (length < 0) length = branchlength;
-      else if (length != branchlength) return -1;
-    if (*cc != OP_ALT) return length;
-    cc += 3;
-    branchlength = 0;
-    break;
-
-    /* Skip over assertive subpatterns */
-
-    case OP_ASSERT:
-    case OP_ASSERT_NOT:
-    case OP_ASSERTBACK:
-    case OP_ASSERTBACK_NOT:
-    do cc += (cc[1] << 8) + cc[2]; while (*cc == OP_ALT);
-    cc += 3;
-    break;
-
-    /* Skip over things that don't match chars */
-
-    case OP_REVERSE:
-    cc++;
-    /* Fall through */
-
-    case OP_CREF:
-    case OP_OPT:
-    cc++;
-    /* Fall through */
-
-    case OP_SOD:
-    case OP_EOD:
-    case OP_EODN:
-    case OP_CIRC:
-    case OP_DOLL:
-    case OP_NOT_WORD_BOUNDARY:
-    case OP_WORD_BOUNDARY:
-    cc++;
-    break;
-
-    /* Handle char strings */
-
-    case OP_CHARS:
-    branchlength += *(++cc);
-    cc += *cc + 1;
-    break;
-
-    /* Handle exact repetitions */
-
-    case OP_EXACT:
-    case OP_TYPEEXACT:
-    branchlength += (cc[1] << 8) + cc[2];
-    cc += 4;
-    break;
-
-    /* Handle single-char matchers */
-
-    case OP_NOT_DIGIT:
-    case OP_DIGIT:
-    case OP_NOT_WHITESPACE:
-    case OP_WHITESPACE:
-    case OP_NOT_WORDCHAR:
-    case OP_WORDCHAR:
-    case OP_ANY:
-    branchlength++;
-    cc++;
-    break;
-
-
-    /* Check a class for variable quantification */
-
-    case OP_CLASS:
-    cc += (*cc == OP_REF)? 2 : 33;
-
-    switch (*cc)
-      {
-      case OP_CRSTAR:
-      case OP_CRMINSTAR:
-      case OP_CRQUERY:
-      case OP_CRMINQUERY:
-      return -1;
-
-      case OP_CRRANGE:
-      case OP_CRMINRANGE:
-      if ((cc[1] << 8) + cc[2] != (cc[3] << 8) + cc[4]) return -1;
-      branchlength += (cc[1] << 8) + cc[2];
-      cc += 5;
-      break;
-
-      default:
-      branchlength++;
-      }
-    break;
-
-    /* Anything else is variable length */
-
-    default:
-    return -1;
-    }
-  }
-/* Control never gets here */
-}
-
-
-
-
-/*************************************************
-*           Check for POSIX class syntax         *
-*************************************************/
-
-/* This function is called when the sequence "[:" or "[." or "[=" is
-encountered in a character class. It checks whether this is followed by an
-optional ^ and then a sequence of letters, terminated by a matching ":]" or
-".]" or "=]".
-
-Argument:
-  ptr      pointer to the initial [
-  endptr   where to return the end pointer
-  cd       pointer to compile data
-
-Returns:   TRUE or FALSE
-*/
-
-static BOOL
-check_posix_syntax(const uschar *ptr, const uschar **endptr, compile_data *cd)
-{
-int terminator;          /* Don't combine these lines; the Solaris cc */
-terminator = *(++ptr);   /* compiler warns about "non-constant" initializer. */
-if (*(++ptr) == '^') ptr++;
-while ((cd->ctypes[*ptr] & ctype_letter) != 0) ptr++;
-if (*ptr == terminator && ptr[1] == ']')
-  {
-  *endptr = ptr;
-  return TRUE;
-  }
-return FALSE;
-}
-
-
-
-
-/*************************************************
-*          Check POSIX class name                *
-*************************************************/
-
-/* This function is called to check the name given in a POSIX-style class entry
-such as [:alnum:].
-
-Arguments:
-  ptr        points to the first letter
-  len        the length of the name
-
-Returns:     a value representing the name, or -1 if unknown
-*/
-
-static int
-check_posix_name(const uschar *ptr, int len)
-{
-register int yield = 0;
-while (posix_name_lengths[yield] != 0)
-  {
-  if (len == posix_name_lengths[yield] &&
-    strncmp((const char *)ptr, posix_names[yield], len) == 0) return yield;
-  yield++;
-  }
-return -1;
-}
-
-
-
-
-/*************************************************
-*           Compile one branch                   *
-*************************************************/
-
-/* Scan the pattern, compiling it into the code vector.
-
-Arguments:
-  options      the option bits
-  brackets     points to number of brackets used
-  code         points to the pointer to the current code point
-  ptrptr       points to the current pattern pointer
-  errorptr     points to pointer to error message
-  optchanged   set to the value of the last OP_OPT item compiled
-  reqchar      set to the last literal character required, else -1
-  countlits    set to count of mandatory literal characters
-  cd           contains pointers to tables
-
-Returns:       TRUE on success
-               FALSE, with *errorptr set on error
-*/
-
-static BOOL
-compile_branch(int options, int *brackets, uschar **codeptr,
-  const uschar **ptrptr, const char **errorptr, int *optchanged,
-  int *reqchar, int *countlits, compile_data *cd)
-{
-int repeat_type, op_type;
-int repeat_min, repeat_max;
-int bravalue, length;
-int greedy_default, greedy_non_default;
-int prevreqchar;
-int condcount = 0;
-int subcountlits = 0;
-register int c;
-register uschar *code = *codeptr;
-uschar *tempcode;
-const uschar *ptr = *ptrptr;
-const uschar *tempptr;
-uschar *previous = NULL;
-uschar class[32];
-
-/* Set up the default and non-default settings for greediness */
-
-greedy_default = ((options & PCRE_UNGREEDY) != 0);
-greedy_non_default = greedy_default ^ 1;
-
-/* Initialize no required char, and count of literals */
-
-*reqchar = prevreqchar = -1;
-*countlits = 0;
-
-/* Switch on next character until the end of the branch */
-
-for (;; ptr++)
-  {
-  BOOL negate_class;
-  int class_charcount;
-  int class_lastchar;
-  int newoptions;
-  int condref;
-  int subreqchar;
-
-  c = *ptr;
-  if ((options & PCRE_EXTENDED) != 0)
-    {
-    if ((cd->ctypes[c] & ctype_space) != 0) continue;
-    if (c == '#')
-      {
-      /* The space before the ; is to avoid a warning on a silly compiler
-      on the Macintosh. */
-      while ((c = *(++ptr)) != 0 && c != '\n') ;
-      continue;
-      }
-    }
-
-  switch(c)
-    {
-    /* The branch terminates at end of string, |, or ). */
-
-    case 0:
-    case '|':
-    case ')':
-    *codeptr = code;
-    *ptrptr = ptr;
-    return TRUE;
-
-    /* Handle single-character metacharacters */
-
-    case '^':
-    previous = NULL;
-    *code++ = OP_CIRC;
-    break;
-
-    case '$':
-    previous = NULL;
-    *code++ = OP_DOLL;
-    break;
-
-    case '.':
-    previous = code;
-    *code++ = OP_ANY;
-    break;
-
-    /* Character classes. These always build a 32-byte bitmap of the permitted
-    characters, except in the special case where there is only one character.
-    For negated classes, we build the map as usual, then invert it at the end.
-    */
-
-    case '[':
-    previous = code;
-    *code++ = OP_CLASS;
-
-    /* If the first character is '^', set the negation flag and skip it. */
-
-    if ((c = *(++ptr)) == '^')
-      {
-      negate_class = TRUE;
-      c = *(++ptr);
-      }
-    else negate_class = FALSE;
-
-    /* Keep a count of chars so that we can optimize the case of just a single
-    character. */
-
-    class_charcount = 0;
-    class_lastchar = -1;
-
-    /* Initialize the 32-char bit map to all zeros. We have to build the
-    map in a temporary bit of store, in case the class contains only 1
-    character, because in that case the compiled code doesn't use the
-    bit map. */
-
-    memset(class, 0, 32 * sizeof(uschar));
-
-    /* Process characters until ] is reached. By writing this as a "do" it
-    means that an initial ] is taken as a data character. */
-
-    do
-      {
-      if (c == 0)
-        {
-        *errorptr = ERR6;
-        goto FAILED;
-        }
-
-      /* Handle POSIX class names. Perl allows a negation extension of the
-      form [:^name]. A square bracket that doesn't match the syntax is
-      treated as a literal. We also recognize the POSIX constructions
-      [.ch.] and [=ch=] ("collating elements") and fault them, as Perl
-      5.6 does. */
-
-      if (c == '[' &&
-          (ptr[1] == ':' || ptr[1] == '.' || ptr[1] == '=') &&
-          check_posix_syntax(ptr, &tempptr, cd))
-        {
-        BOOL local_negate = FALSE;
-        int posix_class, i;
-        register const uschar *cbits = cd->cbits;
-
-        if (ptr[1] != ':')
-          {
-          *errorptr = ERR31;
-          goto FAILED;
-          }
-
-        ptr += 2;
-        if (*ptr == '^')
-          {
-          local_negate = TRUE;
-          ptr++;
-          }
-
-        posix_class = check_posix_name(ptr, tempptr - ptr);
-        if (posix_class < 0)
-          {
-          *errorptr = ERR30;
-          goto FAILED;
-          }
-
-        /* If matching is caseless, upper and lower are converted to
-        alpha. This relies on the fact that the class table starts with
-        alpha, lower, upper as the first 3 entries. */
-
-        if ((options & PCRE_CASELESS) != 0 && posix_class <= 2)
-          posix_class = 0;
-
-        /* Or into the map we are building up to 3 of the static class
-        tables, or their negations. */
-
-        posix_class *= 3;
-        for (i = 0; i < 3; i++)
-          {
-          int taboffset = posix_class_maps[posix_class + i];
-          if (taboffset < 0) break;
-          if (local_negate)
-            for (c = 0; c < 32; c++) class[c] |= ~cbits[c+taboffset];
-          else
-            for (c = 0; c < 32; c++) class[c] |= cbits[c+taboffset];
-          }
-
-        ptr = tempptr + 1;
-        class_charcount = 10;  /* Set > 1; assumes more than 1 per class */
-        continue;
-        }
-
-      /* Backslash may introduce a single character, or it may introduce one
-      of the specials, which just set a flag. Escaped items are checked for
-      validity in the pre-compiling pass. The sequence \b is a special case.
-      Inside a class (and only there) it is treated as backspace. Elsewhere
-      it marks a word boundary. Other escapes have preset maps ready to
-      or into the one we are building. We assume they have more than one
-      character in them, so set class_count bigger than one. */
-
-      if (c == '\\')
-        {
-        c = check_escape(&ptr, errorptr, *brackets, options, TRUE, cd);
-        if (-c == ESC_b) c = '\b';
-        else if (c < 0)
-          {
-          register const uschar *cbits = cd->cbits;
-          class_charcount = 10;
-          switch (-c)
-            {
-            case ESC_d:
-            for (c = 0; c < 32; c++) class[c] |= cbits[c+cbit_digit];
-            continue;
-
-            case ESC_D:
-            for (c = 0; c < 32; c++) class[c] |= ~cbits[c+cbit_digit];
-            continue;
-
-            case ESC_w:
-            for (c = 0; c < 32; c++) class[c] |= cbits[c+cbit_word];
-            continue;
-
-            case ESC_W:
-            for (c = 0; c < 32; c++) class[c] |= ~cbits[c+cbit_word];
-            continue;
-
-            case ESC_s:
-            for (c = 0; c < 32; c++) class[c] |= cbits[c+cbit_space];
-            continue;
-
-            case ESC_S:
-            for (c = 0; c < 32; c++) class[c] |= ~cbits[c+cbit_space];
-            continue;
-
-            default:
-            *errorptr = ERR7;
-            goto FAILED;
-            }
-          }
-        /* Fall through if single character */
-        }
-
-      /* A single character may be followed by '-' to form a range. However,
-      Perl does not permit ']' to be the end of the range. A '-' character
-      here is treated as a literal. */
-
-      if (ptr[1] == '-' && ptr[2] != ']')
-        {
-        int d;
-        ptr += 2;
-        d = *ptr;
-
-        if (d == 0)
-          {
-          *errorptr = ERR6;
-          goto FAILED;
-          }
-
-        /* The second part of a range can be a single-character escape, but
-        not any of the other escapes. */
-
-        if (d == '\\')
-          {
-          d = check_escape(&ptr, errorptr, *brackets, options, TRUE, cd);
-          if (d < 0)
-            {
-            if (d == -ESC_b) d = '\b'; else
-              {
-              *errorptr = ERR7;
-              goto FAILED;
-              }
-            }
-          }
-
-        if (d < c)
-          {
-          *errorptr = ERR8;
-          goto FAILED;
-          }
-
-        for (; c <= d; c++)
-          {
-          class[c/8] |= (1 << (c&7));
-          if ((options & PCRE_CASELESS) != 0)
-            {
-            int uc = cd->fcc[c];           /* flip case */
-            class[uc/8] |= (1 << (uc&7));
-            }
-          class_charcount++;                /* in case a one-char range */
-          class_lastchar = c;
-          }
-        continue;   /* Go get the next char in the class */
-        }
-
-      /* Handle a lone single character - we can get here for a normal
-      non-escape char, or after \ that introduces a single character. */
-
-      class [c/8] |= (1 << (c&7));
-      if ((options & PCRE_CASELESS) != 0)
-        {
-        c = cd->fcc[c];   /* flip case */
-        class[c/8] |= (1 << (c&7));
-        }
-      class_charcount++;
-      class_lastchar = c;
-      }
-
-    /* Loop until ']' reached; the check for end of string happens inside the
-    loop. This "while" is the end of the "do" above. */
-
-    while ((c = *(++ptr)) != ']');
-
-    /* If class_charcount is 1 and class_lastchar is not negative, we saw
-    precisely one character. This doesn't need the whole 32-byte bit map.
-    We turn it into a 1-character OP_CHAR if it's positive, or OP_NOT if
-    it's negative. */
-
-    if (class_charcount == 1 && class_lastchar >= 0)
-      {
-      if (negate_class)
-        {
-        code[-1] = OP_NOT;
-        }
-      else
-        {
-        code[-1] = OP_CHARS;
-        *code++ = 1;
-        }
-      *code++ = class_lastchar;
-      }
-
-    /* Otherwise, negate the 32-byte map if necessary, and copy it into
-    the code vector. */
-
-    else
-      {
-      if (negate_class)
-        for (c = 0; c < 32; c++) code[c] = ~class[c];
-      else
-        memcpy(code, class, 32);
-      code += 32;
-      }
-    break;
-
-    /* Various kinds of repeat */
-
-    case '{':
-    if (!is_counted_repeat(ptr+1, cd)) goto NORMAL_CHAR;
-    ptr = read_repeat_counts(ptr+1, &repeat_min, &repeat_max, errorptr, cd);
-    if (*errorptr != NULL) goto FAILED;
-    goto REPEAT;
-
-    case '*':
-    repeat_min = 0;
-    repeat_max = -1;
-    goto REPEAT;
-
-    case '+':
-    repeat_min = 1;
-    repeat_max = -1;
-    goto REPEAT;
-
-    case '?':
-    repeat_min = 0;
-    repeat_max = 1;
-
-    REPEAT:
-    if (previous == NULL)
-      {
-      *errorptr = ERR9;
-      goto FAILED;
-      }
-
-    /* If the next character is '?' this is a minimizing repeat, by default,
-    but if PCRE_UNGREEDY is set, it works the other way round. Advance to the
-    next character. */
-
-    if (ptr[1] == '?')
-      { repeat_type = greedy_non_default; ptr++; }
-    else repeat_type = greedy_default;
-
-    /* If previous was a string of characters, chop off the last one and use it
-    as the subject of the repeat. If there was only one character, we can
-    abolish the previous item altogether. A repeat with a zero minimum wipes
-    out any reqchar setting, backing up to the previous value. We must also
-    adjust the countlits value. */
-
-    if (*previous == OP_CHARS)
-      {
-      int len = previous[1];
-
-      if (repeat_min == 0) *reqchar = prevreqchar;
-      *countlits += repeat_min - 1;
-
-      if (len == 1)
-        {
-        c = previous[2];
-        code = previous;
-        }
-      else
-        {
-        c = previous[len+1];
-        previous[1]--;
-        code--;
-        }
-      op_type = 0;                 /* Use single-char op codes */
-      goto OUTPUT_SINGLE_REPEAT;   /* Code shared with single character types */
-      }
-
-    /* If previous was a single negated character ([^a] or similar), we use
-    one of the special opcodes, replacing it. The code is shared with single-
-    character repeats by adding a suitable offset into repeat_type. */
-
-    else if ((int)*previous == OP_NOT)
-      {
-      op_type = OP_NOTSTAR - OP_STAR;  /* Use "not" opcodes */
-      c = previous[1];
-      code = previous;
-      goto OUTPUT_SINGLE_REPEAT;
-      }
-
-    /* If previous was a character type match (\d or similar), abolish it and
-    create a suitable repeat item. The code is shared with single-character
-    repeats by adding a suitable offset into repeat_type. */
-
-    else if ((int)*previous < OP_EODN || *previous == OP_ANY)
-      {
-      op_type = OP_TYPESTAR - OP_STAR;  /* Use type opcodes */
-      c = *previous;
-      code = previous;
-
-      OUTPUT_SINGLE_REPEAT:
-
-      /* If the maximum is zero then the minimum must also be zero; Perl allows
-      this case, so we do too - by simply omitting the item altogether. */
-
-      if (repeat_max == 0) goto END_REPEAT;
-
-      /* Combine the op_type with the repeat_type */
-
-      repeat_type += op_type;
-
-      /* A minimum of zero is handled either as the special case * or ?, or as
-      an UPTO, with the maximum given. */
-
-      if (repeat_min == 0)
-        {
-        if (repeat_max == -1) *code++ = OP_STAR + repeat_type;
-          else if (repeat_max == 1) *code++ = OP_QUERY + repeat_type;
-        else
-          {
-          *code++ = OP_UPTO + repeat_type;
-          *code++ = repeat_max >> 8;
-          *code++ = (repeat_max & 255);
-          }
-        }
-
-      /* The case {1,} is handled as the special case + */
-
-      else if (repeat_min == 1 && repeat_max == -1)
-        *code++ = OP_PLUS + repeat_type;
-
-      /* The case {n,n} is just an EXACT, while the general case {n,m} is
-      handled as an EXACT followed by an UPTO. An EXACT of 1 is optimized. */
-
-      else
-        {
-        if (repeat_min != 1)
-          {
-          *code++ = OP_EXACT + op_type;  /* NB EXACT doesn't have repeat_type */
-          *code++ = repeat_min >> 8;
-          *code++ = (repeat_min & 255);
-          }
-
-        /* If the mininum is 1 and the previous item was a character string,
-        we either have to put back the item that got cancelled if the string
-        length was 1, or add the character back onto the end of a longer
-        string. For a character type nothing need be done; it will just get
-        put back naturally. Note that the final character is always going to
-        get added below. */
-
-        else if (*previous == OP_CHARS)
-          {
-          if (code == previous) code += 2; else previous[1]++;
-          }
-
-        /*  For a single negated character we also have to put back the
-        item that got cancelled. */
-
-        else if (*previous == OP_NOT) code++;
-
-        /* If the maximum is unlimited, insert an OP_STAR. */
-
-        if (repeat_max < 0)
-          {
-          *code++ = c;
-          *code++ = OP_STAR + repeat_type;
-          }
-
-        /* Else insert an UPTO if the max is greater than the min. */
-
-        else if (repeat_max != repeat_min)
-          {
-          *code++ = c;
-          repeat_max -= repeat_min;
-          *code++ = OP_UPTO + repeat_type;
-          *code++ = repeat_max >> 8;
-          *code++ = (repeat_max & 255);
-          }
-        }
-
-      /* The character or character type itself comes last in all cases. */
-
-      *code++ = c;
-      }
-
-    /* If previous was a character class or a back reference, we put the repeat
-    stuff after it, but just skip the item if the repeat was {0,0}. */
-
-    else if (*previous == OP_CLASS || *previous == OP_REF)
-      {
-      if (repeat_max == 0)
-        {
-        code = previous;
-        goto END_REPEAT;
-        }
-      if (repeat_min == 0 && repeat_max == -1)
-        *code++ = OP_CRSTAR + repeat_type;
-      else if (repeat_min == 1 && repeat_max == -1)
-        *code++ = OP_CRPLUS + repeat_type;
-      else if (repeat_min == 0 && repeat_max == 1)
-        *code++ = OP_CRQUERY + repeat_type;
-      else
-        {
-        *code++ = OP_CRRANGE + repeat_type;
-        *code++ = repeat_min >> 8;
-        *code++ = repeat_min & 255;
-        if (repeat_max == -1) repeat_max = 0;  /* 2-byte encoding for max */
-        *code++ = repeat_max >> 8;
-        *code++ = repeat_max & 255;
-        }
-      }
-
-    /* If previous was a bracket group, we may have to replicate it in certain
-    cases. */
-
-    else if ((int)*previous >= OP_BRA || (int)*previous == OP_ONCE ||
-             (int)*previous == OP_COND)
-      {
-      register int i;
-      int ketoffset = 0;
-      int len = code - previous;
-      uschar *bralink = NULL;
-
-      /* If the maximum repeat count is unlimited, find the end of the bracket
-      by scanning through from the start, and compute the offset back to it
-      from the current code pointer. There may be an OP_OPT setting following
-      the final KET, so we can't find the end just by going back from the code
-      pointer. */
-
-      if (repeat_max == -1)
-        {
-        register uschar *ket = previous;
-        do ket += (ket[1] << 8) + ket[2]; while (*ket != OP_KET);
-        ketoffset = code - ket;
-        }
-
-      /* The case of a zero minimum is special because of the need to stick
-      OP_BRAZERO in front of it, and because the group appears once in the
-      data, whereas in other cases it appears the minimum number of times. For
-      this reason, it is simplest to treat this case separately, as otherwise
-      the code gets far too mess. There are several special subcases when the
-      minimum is zero. */
-
-      if (repeat_min == 0)
-        {
-        /* If we set up a required char from the bracket, we must back off
-        to the previous value and reset the countlits value too. */
-
-        if (subcountlits > 0)
-          {
-          *reqchar = prevreqchar;
-          *countlits -= subcountlits;
-          }
-
-        /* If the maximum is also zero, we just omit the group from the output
-        altogether. */
-
-        if (repeat_max == 0)
-          {
-          code = previous;
-          goto END_REPEAT;
-          }
-
-        /* If the maximum is 1 or unlimited, we just have to stick in the
-        BRAZERO and do no more at this point. */
-
-        if (repeat_max <= 1)
-          {
-          memmove(previous+1, previous, len);
-          code++;
-          *previous++ = OP_BRAZERO + repeat_type;
-          }
-
-        /* If the maximum is greater than 1 and limited, we have to replicate
-        in a nested fashion, sticking OP_BRAZERO before each set of brackets.
-        The first one has to be handled carefully because it's the original
-        copy, which has to be moved up. The remainder can be handled by code
-        that is common with the non-zero minimum case below. We just have to
-        adjust the value or repeat_max, since one less copy is required. */
-
-        else
-          {
-          int offset;
-          memmove(previous+4, previous, len);
-          code += 4;
-          *previous++ = OP_BRAZERO + repeat_type;
-          *previous++ = OP_BRA;
-
-          /* We chain together the bracket offset fields that have to be
-          filled in later when the ends of the brackets are reached. */
-
-          offset = (bralink == NULL)? 0 : previous - bralink;
-          bralink = previous;
-          *previous++ = offset >> 8;
-          *previous++ = offset & 255;
-          }
-
-        repeat_max--;
-        }
-
-      /* If the minimum is greater than zero, replicate the group as many
-      times as necessary, and adjust the maximum to the number of subsequent
-      copies that we need. */
-
-      else
-        {
-        for (i = 1; i < repeat_min; i++)
-          {
-          memcpy(code, previous, len);
-          code += len;
-          }
-        if (repeat_max > 0) repeat_max -= repeat_min;
-        }
-
-      /* This code is common to both the zero and non-zero minimum cases. If
-      the maximum is limited, it replicates the group in a nested fashion,
-      remembering the bracket starts on a stack. In the case of a zero minimum,
-      the first one was set up above. In all cases the repeat_max now specifies
-      the number of additional copies needed. */
-
-      if (repeat_max >= 0)
-        {
-        for (i = repeat_max - 1; i >= 0; i--)
-          {
-          *code++ = OP_BRAZERO + repeat_type;
-
-          /* All but the final copy start a new nesting, maintaining the
-          chain of brackets outstanding. */
-
-          if (i != 0)
-            {
-            int offset;
-            *code++ = OP_BRA;
-            offset = (bralink == NULL)? 0 : code - bralink;
-            bralink = code;
-            *code++ = offset >> 8;
-            *code++ = offset & 255;
-            }
-
-          memcpy(code, previous, len);
-          code += len;
-          }
-
-        /* Now chain through the pending brackets, and fill in their length
-        fields (which are holding the chain links pro tem). */
-
-        while (bralink != NULL)
-          {
-          int oldlinkoffset;
-          int offset = code - bralink + 1;
-          uschar *bra = code - offset;
-          oldlinkoffset = (bra[1] << 8) + bra[2];
-          bralink = (oldlinkoffset == 0)? NULL : bralink - oldlinkoffset;
-          *code++ = OP_KET;
-          *code++ = bra[1] = offset >> 8;
-          *code++ = bra[2] = (offset & 255);
-          }
-        }
-
-      /* If the maximum is unlimited, set a repeater in the final copy. We
-      can't just offset backwards from the current code point, because we
-      don't know if there's been an options resetting after the ket. The
-      correct offset was computed above. */
-
-      else code[-ketoffset] = OP_KETRMAX + repeat_type;
-      }
-
-    /* Else there's some kind of shambles */
-
-    else
-      {
-      *errorptr = ERR11;
-      goto FAILED;
-      }
-
-    /* In all case we no longer have a previous item. */
-
-    END_REPEAT:
-    previous = NULL;
-    break;
-
-
-    /* Start of nested bracket sub-expression, or comment or lookahead or
-    lookbehind or option setting or condition. First deal with special things
-    that can come after a bracket; all are introduced by ?, and the appearance
-    of any of them means that this is not a referencing group. They were
-    checked for validity in the first pass over the string, so we don't have to
-    check for syntax errors here.  */
-
-    case '(':
-    newoptions = options;
-    condref = -1;
-
-    if (*(++ptr) == '?')
-      {
-      int set, unset;
-      int *optset;
-
-      switch (*(++ptr))
-        {
-        case '#':                 /* Comment; skip to ket */
-        ptr++;
-        while (*ptr != ')') ptr++;
-        continue;
-
-        case ':':                 /* Non-extracting bracket */
-        bravalue = OP_BRA;
-        ptr++;
-        break;
-
-        case '(':
-        bravalue = OP_COND;       /* Conditional group */
-        if ((cd->ctypes[*(++ptr)] & ctype_digit) != 0)
-          {
-          condref = *ptr - '0';
-          while (*(++ptr) != ')') condref = condref*10 + *ptr - '0';
-          ptr++;
-          }
-        else ptr--;
-        break;
-
-        case '=':                 /* Positive lookahead */
-        bravalue = OP_ASSERT;
-        ptr++;
-        break;
-
-        case '!':                 /* Negative lookahead */
-        bravalue = OP_ASSERT_NOT;
-        ptr++;
-        break;
-
-        case '<':                 /* Lookbehinds */
-        switch (*(++ptr))
-          {
-          case '=':               /* Positive lookbehind */
-          bravalue = OP_ASSERTBACK;
-          ptr++;
-          break;
-
-          case '!':               /* Negative lookbehind */
-          bravalue = OP_ASSERTBACK_NOT;
-          ptr++;
-          break;
-
-          default:                /* Syntax error */
-          *errorptr = ERR24;
-          goto FAILED;
-          }
-        break;
-
-        case '>':                 /* One-time brackets */
-        bravalue = OP_ONCE;
-        ptr++;
-        break;
-
-        case 'R':                 /* Pattern recursion */
-        *code++ = OP_RECURSE;
-        ptr++;
-        continue;
-
-        default:                  /* Option setting */
-        set = unset = 0;
-        optset = &set;
-
-        while (*ptr != ')' && *ptr != ':')
-          {
-          switch (*ptr++)
-            {
-            case '-': optset = &unset; break;
-
-            case 'i': *optset |= PCRE_CASELESS; break;
-            case 'm': *optset |= PCRE_MULTILINE; break;
-            case 's': *optset |= PCRE_DOTALL; break;
-            case 'x': *optset |= PCRE_EXTENDED; break;
-            case 'U': *optset |= PCRE_UNGREEDY; break;
-            case 'X': *optset |= PCRE_EXTRA; break;
-
-            default:
-            *errorptr = ERR12;
-            goto FAILED;
-            }
-          }
-
-        /* Set up the changed option bits, but don't change anything yet. */
-
-        newoptions = (options | set) & (~unset);
-
-        /* If the options ended with ')' this is not the start of a nested
-        group with option changes, so the options change at this level. At top
-        level there is nothing else to be done (the options will in fact have
-        been set from the start of compiling as a result of the first pass) but
-        at an inner level we must compile code to change the ims options if
-        necessary, and pass the new setting back so that it can be put at the
-        start of any following branches, and when this group ends, a resetting
-        item can be compiled. */
-
-        if (*ptr == ')')
-          {
-          if ((options & PCRE_INGROUP) != 0 &&
-              (options & PCRE_IMS) != (newoptions & PCRE_IMS))
-            {
-            *code++ = OP_OPT;
-            *code++ = *optchanged = newoptions & PCRE_IMS;
-            }
-          options = newoptions;  /* Change options at this level */
-          previous = NULL;       /* This item can't be repeated */
-          continue;              /* It is complete */
-          }
-
-        /* If the options ended with ':' we are heading into a nested group
-        with possible change of options. Such groups are non-capturing and are
-        not assertions of any kind. All we need to do is skip over the ':';
-        the newoptions value is handled below. */
-
-        bravalue = OP_BRA;
-        ptr++;
-        }
-      }
-
-    /* Else we have a referencing group; adjust the opcode. */
-
-    else
-      {
-      if (++(*brackets) > EXTRACT_MAX)
-        {
-        *errorptr = ERR13;
-        goto FAILED;
-        }
-      bravalue = OP_BRA + *brackets;
-      }
-
-    /* Process nested bracketed re. Assertions may not be repeated, but other
-    kinds can be. We copy code into a non-register variable in order to be able
-    to pass its address because some compilers complain otherwise. Pass in a
-    new setting for the ims options if they have changed. */
-
-    previous = (bravalue >= OP_ONCE)? code : NULL;
-    *code = bravalue;
-    tempcode = code;
-
-    if (!compile_regex(
-         options | PCRE_INGROUP,       /* Set for all nested groups */
-         ((options & PCRE_IMS) != (newoptions & PCRE_IMS))?
-           newoptions & PCRE_IMS : -1, /* Pass ims options if changed */
-         brackets,                     /* Bracket level */
-         &tempcode,                    /* Where to put code (updated) */
-         &ptr,                         /* Input pointer (updated) */
-         errorptr,                     /* Where to put an error message */
-         (bravalue == OP_ASSERTBACK ||
-          bravalue == OP_ASSERTBACK_NOT), /* TRUE if back assert */
-         condref,                      /* Condition reference number */
-         &subreqchar,                  /* For possible last char */
-         &subcountlits,                /* For literal count */
-         cd))                          /* Tables block */
-      goto FAILED;
-
-    /* At the end of compiling, code is still pointing to the start of the
-    group, while tempcode has been updated to point past the end of the group
-    and any option resetting that may follow it. The pattern pointer (ptr)
-    is on the bracket. */
-
-    /* If this is a conditional bracket, check that there are no more than
-    two branches in the group. */
-
-    if (bravalue == OP_COND)
-      {
-      uschar *tc = code;
-      condcount = 0;
-
-      do {
-         condcount++;
-         tc += (tc[1] << 8) | tc[2];
-         }
-      while (*tc != OP_KET);
-
-      if (condcount > 2)
-        {
-        *errorptr = ERR27;
-        goto FAILED;
-        }
-      }
-
-    /* Handle updating of the required character. If the subpattern didn't
-    set one, leave it as it was. Otherwise, update it for normal brackets of
-    all kinds, forward assertions, and conditions with two branches. Don't
-    update the literal count for forward assertions, however. If the bracket
-    is followed by a quantifier with zero repeat, we have to back off. Hence
-    the definition of prevreqchar and subcountlits outside the main loop so
-    that they can be accessed for the back off. */
-
-    if (subreqchar > 0 &&
-         (bravalue >= OP_BRA || bravalue == OP_ONCE || bravalue == OP_ASSERT ||
-         (bravalue == OP_COND && condcount == 2)))
-      {
-      prevreqchar = *reqchar;
-      *reqchar = subreqchar;
-      if (bravalue != OP_ASSERT) *countlits += subcountlits;
-      }
-
-    /* Now update the main code pointer to the end of the group. */
-
-    code = tempcode;
-
-    /* Error if hit end of pattern */
-
-    if (*ptr != ')')
-      {
-      *errorptr = ERR14;
-      goto FAILED;
-      }
-    break;
-
-    /* Check \ for being a real metacharacter; if not, fall through and handle
-    it as a data character at the start of a string. Escape items are checked
-    for validity in the pre-compiling pass. */
-
-    case '\\':
-    tempptr = ptr;
-    c = check_escape(&ptr, errorptr, *brackets, options, FALSE, cd);
-
-    /* Handle metacharacters introduced by \. For ones like \d, the ESC_ values
-    are arranged to be the negation of the corresponding OP_values. For the
-    back references, the values are ESC_REF plus the reference number. Only
-    back references and those types that consume a character may be repeated.
-    We can test for values between ESC_b and ESC_Z for the latter; this may
-    have to change if any new ones are ever created. */
-
-    if (c < 0)
-      {
-      if (-c >= ESC_REF)
-        {
-        previous = code;
-        *code++ = OP_REF;
-        *code++ = -c - ESC_REF;
-        }
-      else
-        {
-        previous = (-c > ESC_b && -c < ESC_Z)? code : NULL;
-        *code++ = -c;
-        }
-      continue;
-      }
-
-    /* Data character: reset and fall through */
-
-    ptr = tempptr;
-    c = '\\';
-
-    /* Handle a run of data characters until a metacharacter is encountered.
-    The first character is guaranteed not to be whitespace or # when the
-    extended flag is set. */
-
-    NORMAL_CHAR:
-    default:
-    previous = code;
-    *code = OP_CHARS;
-    code += 2;
-    length = 0;
-
-    do
-      {
-      if ((options & PCRE_EXTENDED) != 0)
-        {
-        if ((cd->ctypes[c] & ctype_space) != 0) continue;
-        if (c == '#')
-          {
-          /* The space before the ; is to avoid a warning on a silly compiler
-          on the Macintosh. */
-          while ((c = *(++ptr)) != 0 && c != '\n') ;
-          if (c == 0) break;
-          continue;
-          }
-        }
-
-      /* Backslash may introduce a data char or a metacharacter. Escaped items
-      are checked for validity in the pre-compiling pass. Stop the string
-      before a metaitem. */
-
-      if (c == '\\')
-        {
-        tempptr = ptr;
-        c = check_escape(&ptr, errorptr, *brackets, options, FALSE, cd);
-        if (c < 0) { ptr = tempptr; break; }
-        }
-
-      /* Ordinary character or single-char escape */
-
-      *code++ = c;
-      length++;
-      }
-
-    /* This "while" is the end of the "do" above. */
-
-    while (length < 255 && (cd->ctypes[c = *(++ptr)] & ctype_meta) == 0);
-
-    /* Update the last character and the count of literals */
-
-    prevreqchar = (length > 1)? code[-2] : *reqchar;
-    *reqchar = code[-1];
-    *countlits += length;
-
-    /* Compute the length and set it in the data vector, and advance to
-    the next state. */
-
-    previous[1] = length;
-    if (length < 255) ptr--;
-    break;
-    }
-  }                   /* end of big loop */
-
-/* Control never reaches here by falling through, only by a goto for all the
-error states. Pass back the position in the pattern so that it can be displayed
-to the user for diagnosing the error. */
-
-FAILED:
-*ptrptr = ptr;
-return FALSE;
-}
-
-
-
-
-/*************************************************
-*     Compile sequence of alternatives           *
-*************************************************/
-
-/* On entry, ptr is pointing past the bracket character, but on return
-it points to the closing bracket, or vertical bar, or end of string.
-The code variable is pointing at the byte into which the BRA operator has been
-stored. If the ims options are changed at the start (for a (?ims: group) or
-during any branch, we need to insert an OP_OPT item at the start of every
-following branch to ensure they get set correctly at run time, and also pass
-the new options into every subsequent branch compile.
-
-Argument:
-  options     the option bits
-  optchanged  new ims options to set as if (?ims) were at the start, or -1
-               for no change
-  brackets    -> int containing the number of extracting brackets used
-  codeptr     -> the address of the current code pointer
-  ptrptr      -> the address of the current pattern pointer
-  errorptr    -> pointer to error message
-  lookbehind  TRUE if this is a lookbehind assertion
-  condref     > 0 for OPT_CREF setting at start of conditional group
-  reqchar     -> place to put the last required character, or a negative number
-  countlits   -> place to put the shortest literal count of any branch
-  cd          points to the data block with tables pointers
-
-Returns:      TRUE on success
-*/
-
-static BOOL
-compile_regex(int options, int optchanged, int *brackets, uschar **codeptr,
-  const uschar **ptrptr, const char **errorptr, BOOL lookbehind, int condref,
-  int *reqchar, int *countlits, compile_data *cd)
-{
-const uschar *ptr = *ptrptr;
-uschar *code = *codeptr;
-uschar *last_branch = code;
-uschar *start_bracket = code;
-uschar *reverse_count = NULL;
-int oldoptions = options & PCRE_IMS;
-int branchreqchar, branchcountlits;
-
-*reqchar = -1;
-*countlits = INT_MAX;
-code += 3;
-
-/* At the start of a reference-based conditional group, insert the reference
-number as an OP_CREF item. */
-
-if (condref > 0)
-  {
-  *code++ = OP_CREF;
-  *code++ = condref;
-  }
-
-/* Loop for each alternative branch */
-
-for (;;)
-  {
-  int length;
-
-  /* Handle change of options */
-
-  if (optchanged >= 0)
-    {
-    *code++ = OP_OPT;
-    *code++ = optchanged;
-    options = (options & ~PCRE_IMS) | optchanged;
-    }
-
-  /* Set up dummy OP_REVERSE if lookbehind assertion */
-
-  if (lookbehind)
-    {
-    *code++ = OP_REVERSE;
-    reverse_count = code;
-    *code++ = 0;
-    *code++ = 0;
-    }
-
-  /* Now compile the branch */
-
-  if (!compile_branch(options, brackets, &code, &ptr, errorptr, &optchanged,
-      &branchreqchar, &branchcountlits, cd))
-    {
-    *ptrptr = ptr;
-    return FALSE;
-    }
-
-  /* Fill in the length of the last branch */
-
-  length = code - last_branch;
-  last_branch[1] = length >> 8;
-  last_branch[2] = length & 255;
-
-  /* Save the last required character if all branches have the same; a current
-  value of -1 means unset, while -2 means "previous branch had no last required
-  char".  */
-
-  if (*reqchar != -2)
-    {
-    if (branchreqchar >= 0)
-      {
-      if (*reqchar == -1) *reqchar = branchreqchar;
-      else if (*reqchar != branchreqchar) *reqchar = -2;
-      }
-    else *reqchar = -2;
-    }
-
-  /* Keep the shortest literal count */
-
-  if (branchcountlits < *countlits) *countlits = branchcountlits;
-  DPRINTF(("literal count = %d min=%d\n", branchcountlits, *countlits));
-
-  /* If lookbehind, check that this branch matches a fixed-length string,
-  and put the length into the OP_REVERSE item. Temporarily mark the end of
-  the branch with OP_END. */
-
-  if (lookbehind)
-    {
-    *code = OP_END;
-    length = find_fixedlength(last_branch);
-    DPRINTF(("fixed length = %d\n", length));
-    if (length < 0)
-      {
-      *errorptr = ERR25;
-      *ptrptr = ptr;
-      return FALSE;
-      }
-    reverse_count[0] = (length >> 8);
-    reverse_count[1] = length & 255;
-    }
-
-  /* Reached end of expression, either ')' or end of pattern. Insert a
-  terminating ket and the length of the whole bracketed item, and return,
-  leaving the pointer at the terminating char. If any of the ims options
-  were changed inside the group, compile a resetting op-code following. */
-
-  if (*ptr != '|')
-    {
-    length = code - start_bracket;
-    *code++ = OP_KET;
-    *code++ = length >> 8;
-    *code++ = length & 255;
-    if (optchanged >= 0)
-      {
-      *code++ = OP_OPT;
-      *code++ = oldoptions;
-      }
-    *codeptr = code;
-    *ptrptr = ptr;
-    return TRUE;
-    }
-
-  /* Another branch follows; insert an "or" node and advance the pointer. */
-
-  *code = OP_ALT;
-  last_branch = code;
-  code += 3;
-  ptr++;
-  }
-/* Control never reaches here */
-}
-
-
-
-
-/*************************************************
-*      Find first significant op code            *
-*************************************************/
-
-/* This is called by several functions that scan a compiled expression looking
-for a fixed first character, or an anchoring op code etc. It skips over things
-that do not influence this. For one application, a change of caseless option is
-important.
-
-Arguments:
-  code       pointer to the start of the group
-  options    pointer to external options
-  optbit     the option bit whose changing is significant, or
-             zero if none are
-  optstop    TRUE to return on option change, otherwise change the options
-               value and continue
-
-Returns:     pointer to the first significant opcode
-*/
-
-static const uschar*
-first_significant_code(const uschar *code, int *options, int optbit,
-  BOOL optstop)
-{
-for (;;)
-  {
-  switch ((int)*code)
-    {
-    case OP_OPT:
-    if (optbit > 0 && ((int)code[1] & optbit) != (*options & optbit))
-      {
-      if (optstop) return code;
-      *options = (int)code[1];
-      }
-    code += 2;
-    break;
-
-    case OP_CREF:
-    code += 2;
-    break;
-
-    case OP_WORD_BOUNDARY:
-    case OP_NOT_WORD_BOUNDARY:
-    code++;
-    break;
-
-    case OP_ASSERT_NOT:
-    case OP_ASSERTBACK:
-    case OP_ASSERTBACK_NOT:
-    do code += (code[1] << 8) + code[2]; while (*code == OP_ALT);
-    code += 3;
-    break;
-
-    default:
-    return code;
-    }
-  }
-/* Control never reaches here */
-}
-
-
-
-
-/*************************************************
-*          Check for anchored expression         *
-*************************************************/
-
-/* Try to find out if this is an anchored regular expression. Consider each
-alternative branch. If they all start with OP_SOD or OP_CIRC, or with a bracket
-all of whose alternatives start with OP_SOD or OP_CIRC (recurse ad lib), then
-it's anchored. However, if this is a multiline pattern, then only OP_SOD
-counts, since OP_CIRC can match in the middle.
-
-A branch is also implicitly anchored if it starts with .* and DOTALL is set,
-because that will try the rest of the pattern at all possible matching points,
-so there is no point trying them again.
-
-Arguments:
-  code       points to start of expression (the bracket)
-  options    points to the options setting
-
-Returns:     TRUE or FALSE
-*/
-
-static BOOL
-is_anchored(register const uschar *code, int *options)
-{
-do {
-   const uschar *scode = first_significant_code(code + 3, options,
-     PCRE_MULTILINE, FALSE);
-   register int op = *scode;
-   if (op >= OP_BRA || op == OP_ASSERT || op == OP_ONCE || op == OP_COND)
-     { if (!is_anchored(scode, options)) return FALSE; }
-   else if ((op == OP_TYPESTAR || op == OP_TYPEMINSTAR) &&
-            (*options & PCRE_DOTALL) != 0)
-     { if (scode[1] != OP_ANY) return FALSE; }
-   else if (op != OP_SOD &&
-           ((*options & PCRE_MULTILINE) != 0 || op != OP_CIRC))
-     return FALSE;
-   code += (code[1] << 8) + code[2];
-   }
-while (*code == OP_ALT);
-return TRUE;
-}
-
-
-
-/*************************************************
-*         Check for starting with ^ or .*        *
-*************************************************/
-
-/* This is called to find out if every branch starts with ^ or .* so that
-"first char" processing can be done to speed things up in multiline
-matching and for non-DOTALL patterns that start with .* (which must start at
-the beginning or after \n).
-
-Argument:  points to start of expression (the bracket)
-Returns:   TRUE or FALSE
-*/
-
-static BOOL
-is_startline(const uschar *code)
-{
-do {
-   const uschar *scode = first_significant_code(code + 3, NULL, 0, FALSE);
-   register int op = *scode;
-   if (op >= OP_BRA || op == OP_ASSERT || op == OP_ONCE || op == OP_COND)
-     { if (!is_startline(scode)) return FALSE; }
-   else if (op == OP_TYPESTAR || op == OP_TYPEMINSTAR)
-     { if (scode[1] != OP_ANY) return FALSE; }
-   else if (op != OP_CIRC) return FALSE;
-   code += (code[1] << 8) + code[2];
-   }
-while (*code == OP_ALT);
-return TRUE;
-}
-
-
-
-/*************************************************
-*          Check for fixed first char            *
-*************************************************/
-
-/* Try to find out if there is a fixed first character. This is called for
-unanchored expressions, as it speeds up their processing quite considerably.
-Consider each alternative branch. If they all start with the same char, or with
-a bracket all of whose alternatives start with the same char (recurse ad lib),
-then we return that char, otherwise -1.
-
-Arguments:
-  code       points to start of expression (the bracket)
-  options    pointer to the options (used to check casing changes)
-
-Returns:     -1 or the fixed first char
-*/
-
-static int
-find_firstchar(const uschar *code, int *options)
-{
-register int c = -1;
-do {
-   int d;
-   const uschar *scode = first_significant_code(code + 3, options,
-     PCRE_CASELESS, TRUE);
-   register int op = *scode;
-
-   if (op >= OP_BRA) op = OP_BRA;
-
-   switch(op)
-     {
-     default:
-     return -1;
-
-     case OP_BRA:
-     case OP_ASSERT:
-     case OP_ONCE:
-     case OP_COND:
-     if ((d = find_firstchar(scode, options)) < 0) return -1;
-     if (c < 0) c = d; else if (c != d) return -1;
-     break;
-
-     case OP_EXACT:       /* Fall through */
-     scode++;
-
-     case OP_CHARS:       /* Fall through */
-     scode++;
-
-     case OP_PLUS:
-     case OP_MINPLUS:
-     if (c < 0) c = scode[1]; else if (c != scode[1]) return -1;
-     break;
-     }
-
-   code += (code[1] << 8) + code[2];
-   }
-while (*code == OP_ALT);
-return c;
-}
-
-
-
-
-
-/*************************************************
-*        Compile a Regular Expression            *
-*************************************************/
-
-/* This function takes a string and returns a pointer to a block of store
-holding a compiled version of the expression.
-
-Arguments:
-  pattern      the regular expression
-  options      various option bits
-  errorptr     pointer to pointer to error text
-  erroroffset  ptr offset in pattern where error was detected
-  tables       pointer to character tables or NULL
-
-Returns:       pointer to compiled data block, or NULL on error,
-               with errorptr and erroroffset set
-*/
-
-pcre *
-pcre_compile(const char *pattern, int options, const char **errorptr,
-  int *erroroffset, const unsigned char *tables)
-{
-real_pcre *re;
-int length = 3;      /* For initial BRA plus length */
-int runlength;
-int c, reqchar, countlits;
-int bracount = 0;
-int top_backref = 0;
-int branch_extra = 0;
-int branch_newextra;
-unsigned int brastackptr = 0;
-size_t size;
-uschar *code;
-const uschar *ptr;
-compile_data compile_block;
-int brastack[BRASTACK_SIZE];
-uschar bralenstack[BRASTACK_SIZE];
-
-#ifdef DEBUG
-uschar *code_base, *code_end;
-#endif
-
-/* We can't pass back an error message if errorptr is NULL; I guess the best we
-can do is just return NULL. */
-
-if (errorptr == NULL) return NULL;
-*errorptr = NULL;
-
-/* However, we can give a message for this error */
-
-if (erroroffset == NULL)
-  {
-  *errorptr = ERR16;
-  return NULL;
-  }
-*erroroffset = 0;
-
-if ((options & ~PUBLIC_OPTIONS) != 0)
-  {
-  *errorptr = ERR17;
-  return NULL;
-  }
-
-/* Set up pointers to the individual character tables */
-
-if (tables == NULL) tables = pcre_default_tables;
-compile_block.lcc = tables + lcc_offset;
-compile_block.fcc = tables + fcc_offset;
-compile_block.cbits = tables + cbits_offset;
-compile_block.ctypes = tables + ctypes_offset;
-
-/* Reflect pattern for debugging output */
-
-DPRINTF(("------------------------------------------------------------------\n"));
-DPRINTF(("%s\n", pattern));
-
-/* The first thing to do is to make a pass over the pattern to compute the
-amount of store required to hold the compiled code. This does not have to be
-perfect as long as errors are overestimates. At the same time we can detect any
-internal flag settings. Make an attempt to correct for any counted white space
-if an "extended" flag setting appears late in the pattern. We can't be so
-clever for #-comments. */
-
-ptr = (const uschar *)(pattern - 1);
-while ((c = *(++ptr)) != 0)
-  {
-  int min, max;
-  int class_charcount;
-
-  if ((options & PCRE_EXTENDED) != 0)
-    {
-    if ((compile_block.ctypes[c] & ctype_space) != 0) continue;
-    if (c == '#')
-      {
-      /* The space before the ; is to avoid a warning on a silly compiler
-      on the Macintosh. */
-      while ((c = *(++ptr)) != 0 && c != '\n') ;
-      continue;
-      }
-    }
-
-  switch(c)
-    {
-    /* A backslashed item may be an escaped "normal" character or a
-    character type. For a "normal" character, put the pointers and
-    character back so that tests for whitespace etc. in the input
-    are done correctly. */
-
-    case '\\':
-      {
-      const uschar *save_ptr = ptr;
-      c = check_escape(&ptr, errorptr, bracount, options, FALSE, &compile_block);
-      if (*errorptr != NULL) goto PCRE_ERROR_RETURN;
-      if (c >= 0)
-        {
-        ptr = save_ptr;
-        c = '\\';
-        goto NORMAL_CHAR;
-        }
-      }
-    length++;
-
-    /* A back reference needs an additional char, plus either one or 5
-    bytes for a repeat. We also need to keep the value of the highest
-    back reference. */
-
-    if (c <= -ESC_REF)
-      {
-      int refnum = -c - ESC_REF;
-      if (refnum > top_backref) top_backref = refnum;
-      length++;   /* For single back reference */
-      if (ptr[1] == '{' && is_counted_repeat(ptr+2, &compile_block))
-        {
-        ptr = read_repeat_counts(ptr+2, &min, &max, errorptr, &compile_block);
-        if (*errorptr != NULL) goto PCRE_ERROR_RETURN;
-        if ((min == 0 && (max == 1 || max == -1)) ||
-          (min == 1 && max == -1))
-            length++;
-        else length += 5;
-        if (ptr[1] == '?') ptr++;
-        }
-      }
-    continue;
-
-    case '^':
-    case '.':
-    case '$':
-    case '*':     /* These repeats won't be after brackets; */
-    case '+':     /* those are handled separately */
-    case '?':
-    length++;
-    continue;
-
-    /* This covers the cases of repeats after a single char, metachar, class,
-    or back reference. */
-
-    case '{':
-    if (!is_counted_repeat(ptr+1, &compile_block)) goto NORMAL_CHAR;
-    ptr = read_repeat_counts(ptr+1, &min, &max, errorptr, &compile_block);
-    if (*errorptr != NULL) goto PCRE_ERROR_RETURN;
-    if ((min == 0 && (max == 1 || max == -1)) ||
-      (min == 1 && max == -1))
-        length++;
-    else
-      {
-      length--;   /* Uncount the original char or metachar */
-      if (min == 1) length++; else if (min > 0) length += 4;
-      if (max > 0) length += 4; else length += 2;
-      }
-    if (ptr[1] == '?') ptr++;
-    continue;
-
-    /* An alternation contains an offset to the next branch or ket. If any ims
-    options changed in the previous branch(es), and/or if we are in a
-    lookbehind assertion, extra space will be needed at the start of the
-    branch. This is handled by branch_extra. */
-
-    case '|':
-    length += 3 + branch_extra;
-    continue;
-
-    /* A character class uses 33 characters. Don't worry about character types
-    that aren't allowed in classes - they'll get picked up during the compile.
-    A character class that contains only one character uses 2 or 3 bytes,
-    depending on whether it is negated or not. Notice this where we can. */
-
-    case '[':
-    class_charcount = 0;
-    if (*(++ptr) == '^') ptr++;
-    do
-      {
-      if (*ptr == '\\')
-        {
-        int ch = check_escape(&ptr, errorptr, bracount, options, TRUE,
-          &compile_block);
-        if (*errorptr != NULL) goto PCRE_ERROR_RETURN;
-        if (-ch == ESC_b) class_charcount++; else class_charcount = 10;
-        }
-      else class_charcount++;
-      ptr++;
-      }
-    while (*ptr != 0 && *ptr != ']');
-
-    /* Repeats for negated single chars are handled by the general code */
-
-    if (class_charcount == 1) length += 3; else
-      {
-      length += 33;
-
-      /* A repeat needs either 1 or 5 bytes. */
-
-      if (*ptr != 0 && ptr[1] == '{' && is_counted_repeat(ptr+2, &compile_block))
-        {
-        ptr = read_repeat_counts(ptr+2, &min, &max, errorptr, &compile_block);
-        if (*errorptr != NULL) goto PCRE_ERROR_RETURN;
-        if ((min == 0 && (max == 1 || max == -1)) ||
-          (min == 1 && max == -1))
-            length++;
-        else length += 5;
-        if (ptr[1] == '?') ptr++;
-        }
-      }
-    continue;
-
-    /* Brackets may be genuine groups or special things */
-
-    case '(':
-    branch_newextra = 0;
-
-    /* Handle special forms of bracket, which all start (? */
-
-    if (ptr[1] == '?')
-      {
-      int set, unset;
-      int *optset;
-
-      switch (c = ptr[2])
-        {
-        /* Skip over comments entirely */
-        case '#':
-        ptr += 3;
-        while (*ptr != 0 && *ptr != ')') ptr++;
-        if (*ptr == 0)
-          {
-          *errorptr = ERR18;
-          goto PCRE_ERROR_RETURN;
-          }
-        continue;
-
-        /* Non-referencing groups and lookaheads just move the pointer on, and
-        then behave like a non-special bracket, except that they don't increment
-        the count of extracting brackets. Ditto for the "once only" bracket,
-        which is in Perl from version 5.005. */
-
-        case ':':
-        case '=':
-        case '!':
-        case '>':
-        ptr += 2;
-        break;
-
-        /* A recursive call to the regex is an extension, to provide the
-        facility which can be obtained by $(?p{perl-code}) in Perl 5.6. */
-
-        case 'R':
-        if (ptr[3] != ')')
-          {
-          *errorptr = ERR29;
-          goto PCRE_ERROR_RETURN;
-          }
-        ptr += 3;
-        length += 1;
-        break;
-
-        /* Lookbehinds are in Perl from version 5.005 */
-
-        case '<':
-        if (ptr[3] == '=' || ptr[3] == '!')
-          {
-          ptr += 3;
-          branch_newextra = 3;
-          length += 3;         /* For the first branch */
-          break;
-          }
-        *errorptr = ERR24;
-        goto PCRE_ERROR_RETURN;
-
-        /* Conditionals are in Perl from version 5.005. The bracket must either
-        be followed by a number (for bracket reference) or by an assertion
-        group. */
-
-        case '(':
-        if ((compile_block.ctypes[ptr[3]] & ctype_digit) != 0)
-          {
-          ptr += 4;
-          length += 2;
-          while ((compile_block.ctypes[*ptr] & ctype_digit) != 0) ptr++;
-          if (*ptr != ')')
-            {
-            *errorptr = ERR26;
-            goto PCRE_ERROR_RETURN;
-            }
-          }
-        else   /* An assertion must follow */
-          {
-          ptr++;   /* Can treat like ':' as far as spacing is concerned */
-          if (ptr[2] != '?' ||
-             (ptr[3] != '=' && ptr[3] != '!' && ptr[3] != '<') )
-            {
-            ptr += 2;    /* To get right offset in message */
-            *errorptr = ERR28;
-            goto PCRE_ERROR_RETURN;
-            }
-          }
-        break;
-
-        /* Else loop checking valid options until ) is met. Anything else is an
-        error. If we are without any brackets, i.e. at top level, the settings
-        act as if specified in the options, so massage the options immediately.
-        This is for backward compatibility with Perl 5.004. */
-
-        default:
-        set = unset = 0;
-        optset = &set;
-        ptr += 2;
-
-        for (;; ptr++)
-          {
-          c = *ptr;
-          switch (c)
-            {
-            case 'i':
-            *optset |= PCRE_CASELESS;
-            continue;
-
-            case 'm':
-            *optset |= PCRE_MULTILINE;
-            continue;
-
-            case 's':
-            *optset |= PCRE_DOTALL;
-            continue;
-
-            case 'x':
-            *optset |= PCRE_EXTENDED;
-            continue;
-
-            case 'X':
-            *optset |= PCRE_EXTRA;
-            continue;
-
-            case 'U':
-            *optset |= PCRE_UNGREEDY;
-            continue;
-
-            case '-':
-            optset = &unset;
-            continue;
-
-            /* A termination by ')' indicates an options-setting-only item;
-            this is global at top level; otherwise nothing is done here and
-            it is handled during the compiling process on a per-bracket-group
-            basis. */
-
-            case ')':
-            if (brastackptr == 0)
-              {
-              options = (options | set) & (~unset);
-              set = unset = 0;     /* To save length */
-              }
-            /* Fall through */
-
-            /* A termination by ':' indicates the start of a nested group with
-            the given options set. This is again handled at compile time, but
-            we must allow for compiled space if any of the ims options are
-            set. We also have to allow for resetting space at the end of
-            the group, which is why 4 is added to the length and not just 2.
-            If there are several changes of options within the same group, this
-            will lead to an over-estimate on the length, but this shouldn't
-            matter very much. We also have to allow for resetting options at
-            the start of any alternations, which we do by setting
-            branch_newextra to 2. Finally, we record whether the case-dependent
-            flag ever changes within the regex. This is used by the "required
-            character" code. */
-
-            case ':':
-            if (((set|unset) & PCRE_IMS) != 0)
-              {
-              length += 4;
-              branch_newextra = 2;
-              if (((set|unset) & PCRE_CASELESS) != 0) options |= PCRE_ICHANGED;
-              }
-            goto END_OPTIONS;
-
-            /* Unrecognized option character */
-
-            default:
-            *errorptr = ERR12;
-            goto PCRE_ERROR_RETURN;
-            }
-          }
-
-        /* If we hit a closing bracket, that's it - this is a freestanding
-        option-setting. We need to ensure that branch_extra is updated if
-        necessary. The only values branch_newextra can have here are 0 or 2.
-        If the value is 2, then branch_extra must either be 2 or 5, depending
-        on whether this is a lookbehind group or not. */
-
-        END_OPTIONS:
-        if (c == ')')
-          {
-          if (branch_newextra == 2 && (branch_extra == 0 || branch_extra == 3))
-            branch_extra += branch_newextra;
-          continue;
-          }
-
-        /* If options were terminated by ':' control comes here. Fall through
-        to handle the group below. */
-        }
-      }
-
-    /* Extracting brackets must be counted so we can process escapes in a
-    Perlish way. */
-
-    else bracount++;
-
-    /* Non-special forms of bracket. Save length for computing whole length
-    at end if there's a repeat that requires duplication of the group. Also
-    save the current value of branch_extra, and start the new group with
-    the new value. If non-zero, this will either be 2 for a (?imsx: group, or 3
-    for a lookbehind assertion. */
-
-    if (brastackptr >= sizeof(brastack)/sizeof(int))
-      {
-      *errorptr = ERR19;
-      goto PCRE_ERROR_RETURN;
-      }
-
-    bralenstack[brastackptr] = branch_extra;
-    branch_extra = branch_newextra;
-
-    brastack[brastackptr++] = length;
-    length += 3;
-    continue;
-
-    /* Handle ket. Look for subsequent max/min; for certain sets of values we
-    have to replicate this bracket up to that many times. If brastackptr is
-    0 this is an unmatched bracket which will generate an error, but take care
-    not to try to access brastack[-1] when computing the length and restoring
-    the branch_extra value. */
-
-    case ')':
-    length += 3;
-      {
-      int minval = 1;
-      int maxval = 1;
-      int duplength;
-
-      if (brastackptr > 0)
-        {
-        duplength = length - brastack[--brastackptr];
-        branch_extra = bralenstack[brastackptr];
-        }
-      else duplength = 0;
-
-      /* Leave ptr at the final char; for read_repeat_counts this happens
-      automatically; for the others we need an increment. */
-
-      if ((c = ptr[1]) == '{' && is_counted_repeat(ptr+2, &compile_block))
-        {
-        ptr = read_repeat_counts(ptr+2, &minval, &maxval, errorptr,
-          &compile_block);
-        if (*errorptr != NULL) goto PCRE_ERROR_RETURN;
-        }
-      else if (c == '*') { minval = 0; maxval = -1; ptr++; }
-      else if (c == '+') { maxval = -1; ptr++; }
-      else if (c == '?') { minval = 0; ptr++; }
-
-      /* If the minimum is zero, we have to allow for an OP_BRAZERO before the
-      group, and if the maximum is greater than zero, we have to replicate
-      maxval-1 times; each replication acquires an OP_BRAZERO plus a nesting
-      bracket set - hence the 7. */
-
-      if (minval == 0)
-        {
-        length++;
-        if (maxval > 0) length += (maxval - 1) * (duplength + 7);
-        }
-
-      /* When the minimum is greater than zero, 1 we have to replicate up to
-      minval-1 times, with no additions required in the copies. Then, if
-      there is a limited maximum we have to replicate up to maxval-1 times
-      allowing for a BRAZERO item before each optional copy and nesting
-      brackets for all but one of the optional copies. */
-
-      else
-        {
-        length += (minval - 1) * duplength;
-        if (maxval > minval)   /* Need this test as maxval=-1 means no limit */
-          length += (maxval - minval) * (duplength + 7) - 6;
-        }
-      }
-    continue;
-
-    /* Non-special character. For a run of such characters the length required
-    is the number of characters + 2, except that the maximum run length is 255.
-    We won't get a skipped space or a non-data escape or the start of a #
-    comment as the first character, so the length can't be zero. */
-
-    NORMAL_CHAR:
-    default:
-    length += 2;
-    runlength = 0;
-    do
-      {
-      if ((options & PCRE_EXTENDED) != 0)
-        {
-        if ((compile_block.ctypes[c] & ctype_space) != 0) continue;
-        if (c == '#')
-          {
-          /* The space before the ; is to avoid a warning on a silly compiler
-          on the Macintosh. */
-          while ((c = *(++ptr)) != 0 && c != '\n') ;
-          continue;
-          }
-        }
-
-      /* Backslash may introduce a data char or a metacharacter; stop the
-      string before the latter. */
-
-      if (c == '\\')
-        {
-        const uschar *saveptr = ptr;
-        c = check_escape(&ptr, errorptr, bracount, options, FALSE,
-          &compile_block);
-        if (*errorptr != NULL) goto PCRE_ERROR_RETURN;
-        if (c < 0) { ptr = saveptr; break; }
-        }
-
-      /* Ordinary character or single-char escape */
-
-      runlength++;
-      }
-
-    /* This "while" is the end of the "do" above. */
-
-    while (runlength < 255 &&
-      (compile_block.ctypes[c = *(++ptr)] & ctype_meta) == 0);
-
-    ptr--;
-    length += runlength;
-    continue;
-    }
-  }
-
-length += 4;    /* For final KET and END */
-
-if (length > 65539)
-  {
-  *errorptr = ERR20;
-  return NULL;
-  }
-
-/* Compute the size of data block needed and get it, either from malloc or
-externally provided function. We specify "code[0]" in the offsetof() expression
-rather than just "code", because it has been reported that one broken compiler
-fails on "code" because it is also an independent variable. It should make no
-difference to the value of the offsetof(). */
-
-size = length + offsetof(real_pcre, code[0]);
-re = (real_pcre *)(pcre_malloc)(size);
-
-if (re == NULL)
-  {
-  *errorptr = ERR21;
-  return NULL;
-  }
-
-/* Put in the magic number, and save the size, options, and table pointer */
-
-re->magic_number = MAGIC_NUMBER;
-re->size = size;
-re->options = options;
-re->tables = tables;
-
-/* Set up a starting, non-extracting bracket, then compile the expression. On
-error, *errorptr will be set non-NULL, so we don't need to look at the result
-of the function here. */
-
-ptr = (const uschar *)pattern;
-code = re->code;
-*code = OP_BRA;
-bracount = 0;
-(void)compile_regex(options, -1, &bracount, &code, &ptr, errorptr, FALSE, -1,
-  &reqchar, &countlits, &compile_block);
-re->top_bracket = bracount;
-re->top_backref = top_backref;
-
-/* If not reached end of pattern on success, there's an excess bracket. */
-
-if (*errorptr == NULL && *ptr != 0) *errorptr = ERR22;
-
-/* Fill in the terminating state and check for disastrous overflow, but
-if debugging, leave the test till after things are printed out. */
-
-*code++ = OP_END;
-
-#ifndef DEBUG
-if (code - re->code > length) *errorptr = ERR23;
-#endif
-
-/* Give an error if there's back reference to a non-existent capturing
-subpattern. */
-
-if (top_backref > re->top_bracket) *errorptr = ERR15;
-
-/* Failed to compile */
-
-if (*errorptr != NULL)
-  {
-  (pcre_free)(re);
-  PCRE_ERROR_RETURN:
-  *erroroffset = ptr - (const uschar *)pattern;
-  return NULL;
-  }
-
-/* If the anchored option was not passed, set flag if we can determine that the
-pattern is anchored by virtue of ^ characters or \A or anything else (such as
-starting with .* when DOTALL is set).
-
-Otherwise, see if we can determine what the first character has to be, because
-that speeds up unanchored matches no end. If not, see if we can set the
-PCRE_STARTLINE flag. This is helpful for multiline matches when all branches
-start with ^. and also when all branches start with .* for non-DOTALL matches.
-*/
-
-if ((options & PCRE_ANCHORED) == 0)
-  {
-  int temp_options = options;
-  if (is_anchored(re->code, &temp_options))
-    re->options |= PCRE_ANCHORED;
-  else
-    {
-    int ch = find_firstchar(re->code, &temp_options);
-    if (ch >= 0)
-      {
-      re->first_char = ch;
-      re->options |= PCRE_FIRSTSET;
-      }
-    else if (is_startline(re->code))
-      re->options |= PCRE_STARTLINE;
-    }
-  }
-
-/* Save the last required character if there are at least two literal
-characters on all paths, or if there is no first character setting. */
-
-if (reqchar >= 0 && (countlits > 1 || (re->options & PCRE_FIRSTSET) == 0))
-  {
-  re->req_char = reqchar;
-  re->options |= PCRE_REQCHSET;
-  }
-
-/* Print out the compiled data for debugging */
-
-#ifdef DEBUG
-
-printf("Length = %d top_bracket = %d top_backref = %d\n",
-  length, re->top_bracket, re->top_backref);
-
-if (re->options != 0)
-  {
-  printf("%s%s%s%s%s%s%s%s%s\n",
-    ((re->options & PCRE_ANCHORED) != 0)? "anchored " : "",
-    ((re->options & PCRE_CASELESS) != 0)? "caseless " : "",
-    ((re->options & PCRE_ICHANGED) != 0)? "case state changed " : "",
-    ((re->options & PCRE_EXTENDED) != 0)? "extended " : "",
-    ((re->options & PCRE_MULTILINE) != 0)? "multiline " : "",
-    ((re->options & PCRE_DOTALL) != 0)? "dotall " : "",
-    ((re->options & PCRE_DOLLAR_ENDONLY) != 0)? "endonly " : "",
-    ((re->options & PCRE_EXTRA) != 0)? "extra " : "",
-    ((re->options & PCRE_UNGREEDY) != 0)? "ungreedy " : "");
-  }
-
-if ((re->options & PCRE_FIRSTSET) != 0)
-  {
-  if (isprint(re->first_char)) printf("First char = %c\n", re->first_char);
-    else printf("First char = \\x%02x\n", re->first_char);
-  }
-
-if ((re->options & PCRE_REQCHSET) != 0)
-  {
-  if (isprint(re->req_char)) printf("Req char = %c\n", re->req_char);
-    else printf("Req char = \\x%02x\n", re->req_char);
-  }
-
-code_end = code;
-code_base = code = re->code;
-
-while (code < code_end)
-  {
-  int charlength;
-
-  printf("%3d ", code - code_base);
-
-  if (*code >= OP_BRA)
-    {
-    printf("%3d Bra %d", (code[1] << 8) + code[2], *code - OP_BRA);
-    code += 2;
-    }
-
-  else switch(*code)
-    {
-    case OP_OPT:
-    printf(" %.2x %s", code[1], OP_names[*code]);
-    code++;
-    break;
-
-    case OP_COND:
-    printf("%3d Cond", (code[1] << 8) + code[2]);
-    code += 2;
-    break;
-
-    case OP_CREF:
-    printf(" %.2d %s", code[1], OP_names[*code]);
-    code++;
-    break;
-
-    case OP_CHARS:
-    charlength = *(++code);
-    printf("%3d ", charlength);
-    while (charlength-- > 0)
-      if (isprint(c = *(++code))) printf("%c", c); else printf("\\x%02x", c);
-    break;
-
-    case OP_KETRMAX:
-    case OP_KETRMIN:
-    case OP_ALT:
-    case OP_KET:
-    case OP_ASSERT:
-    case OP_ASSERT_NOT:
-    case OP_ASSERTBACK:
-    case OP_ASSERTBACK_NOT:
-    case OP_ONCE:
-    printf("%3d %s", (code[1] << 8) + code[2], OP_names[*code]);
-    code += 2;
-    break;
-
-    case OP_REVERSE:
-    printf("%3d %s", (code[1] << 8) + code[2], OP_names[*code]);
-    code += 2;
-    break;
-
-    case OP_STAR:
-    case OP_MINSTAR:
-    case OP_PLUS:
-    case OP_MINPLUS:
-    case OP_QUERY:
-    case OP_MINQUERY:
-    case OP_TYPESTAR:
-    case OP_TYPEMINSTAR:
-    case OP_TYPEPLUS:
-    case OP_TYPEMINPLUS:
-    case OP_TYPEQUERY:
-    case OP_TYPEMINQUERY:
-    if (*code >= OP_TYPESTAR)
-      printf("    %s", OP_names[code[1]]);
-    else if (isprint(c = code[1])) printf("    %c", c);
-      else printf("    \\x%02x", c);
-    printf("%s", OP_names[*code++]);
-    break;
-
-    case OP_EXACT:
-    case OP_UPTO:
-    case OP_MINUPTO:
-    if (isprint(c = code[3])) printf("    %c{", c);
-      else printf("    \\x%02x{", c);
-    if (*code != OP_EXACT) printf("0,");
-    printf("%d}", (code[1] << 8) + code[2]);
-    if (*code == OP_MINUPTO) printf("?");
-    code += 3;
-    break;
-
-    case OP_TYPEEXACT:
-    case OP_TYPEUPTO:
-    case OP_TYPEMINUPTO:
-    printf("    %s{", OP_names[code[3]]);
-    if (*code != OP_TYPEEXACT) printf(",");
-    printf("%d}", (code[1] << 8) + code[2]);
-    if (*code == OP_TYPEMINUPTO) printf("?");
-    code += 3;
-    break;
-
-    case OP_NOT:
-    if (isprint(c = *(++code))) printf("    [^%c]", c);
-      else printf("    [^\\x%02x]", c);
-    break;
-
-    case OP_NOTSTAR:
-    case OP_NOTMINSTAR:
-    case OP_NOTPLUS:
-    case OP_NOTMINPLUS:
-    case OP_NOTQUERY:
-    case OP_NOTMINQUERY:
-    if (isprint(c = code[1])) printf("    [^%c]", c);
-      else printf("    [^\\x%02x]", c);
-    printf("%s", OP_names[*code++]);
-    break;
-
-    case OP_NOTEXACT:
-    case OP_NOTUPTO:
-    case OP_NOTMINUPTO:
-    if (isprint(c = code[3])) printf("    [^%c]{", c);
-      else printf("    [^\\x%02x]{", c);
-    if (*code != OP_NOTEXACT) printf(",");
-    printf("%d}", (code[1] << 8) + code[2]);
-    if (*code == OP_NOTMINUPTO) printf("?");
-    code += 3;
-    break;
-
-    case OP_REF:
-    printf("    \\%d", *(++code));
-    code ++;
-    goto CLASS_REF_REPEAT;
-
-    case OP_CLASS:
-      {
-      int i, min, max;
-      code++;
-      printf("    [");
-
-      for (i = 0; i < 256; i++)
-        {
-        if ((code[i/8] & (1 << (i&7))) != 0)
-          {
-          int j;
-          for (j = i+1; j < 256; j++)
-            if ((code[j/8] & (1 << (j&7))) == 0) break;
-          if (i == '-' || i == ']') printf("\\");
-          if (isprint(i)) printf("%c", i); else printf("\\x%02x", i);
-          if (--j > i)
-            {
-            printf("-");
-            if (j == '-' || j == ']') printf("\\");
-            if (isprint(j)) printf("%c", j); else printf("\\x%02x", j);
-            }
-          i = j;
-          }
-        }
-      printf("]");
-      code += 32;
-
-      CLASS_REF_REPEAT:
-
-      switch(*code)
-        {
-        case OP_CRSTAR:
-        case OP_CRMINSTAR:
-        case OP_CRPLUS:
-        case OP_CRMINPLUS:
-        case OP_CRQUERY:
-        case OP_CRMINQUERY:
-        printf("%s", OP_names[*code]);
-        break;
-
-        case OP_CRRANGE:
-        case OP_CRMINRANGE:
-        min = (code[1] << 8) + code[2];
-        max = (code[3] << 8) + code[4];
-        if (max == 0) printf("{%d,}", min);
-        else printf("{%d,%d}", min, max);
-        if (*code == OP_CRMINRANGE) printf("?");
-        code += 4;
-        break;
-
-        default:
-        code--;
-        }
-      }
-    break;
-
-    /* Anything else is just a one-node item */
-
-    default:
-    printf("    %s", OP_names[*code]);
-    break;
-    }
-
-  code++;
-  printf("\n");
-  }
-printf("------------------------------------------------------------------\n");
-
-/* This check is done here in the debugging case so that the code that
-was compiled can be seen. */
-
-if (code - re->code > length)
-  {
-  *errorptr = ERR23;
-  (pcre_free)(re);
-  *erroroffset = ptr - (uschar *)pattern;
-  return NULL;
-  }
-#endif
-
-return (pcre *)re;
-}
-
-
-
-/*************************************************
-*          Match a back-reference                *
-*************************************************/
-
-/* If a back reference hasn't been set, the length that is passed is greater
-than the number of characters left in the string, so the match fails.
-
-Arguments:
-  offset      index into the offset vector
-  eptr        points into the subject
-  length      length to be matched
-  md          points to match data block
-  ims         the ims flags
-
-Returns:      TRUE if matched
-*/
-
-static BOOL
-match_ref(int offset, register const uschar *eptr, int length, match_data *md,
-  unsigned long int ims)
-{
-const uschar *p = md->start_subject + md->offset_vector[offset];
-
-#ifdef DEBUG
-if (eptr >= md->end_subject)
-  printf("matching subject <null>");
-else
-  {
-  printf("matching subject ");
-  pchars(eptr, length, TRUE, md);
-  }
-printf(" against backref ");
-pchars(p, length, FALSE, md);
-printf("\n");
-#endif
-
-/* Always fail if not enough characters left */
-
-if (length > md->end_subject - eptr) return FALSE;
-
-/* Separate the caselesss case for speed */
-
-if ((ims & PCRE_CASELESS) != 0)
-  {
-  while (length-- > 0)
-    if (md->lcc[*p++] != md->lcc[*eptr++]) return FALSE;
-  }
-else
-  { while (length-- > 0) if (*p++ != *eptr++) return FALSE; }
-
-return TRUE;
-}
-
-
-
-/*************************************************
-*         Match from current position            *
-*************************************************/
-
-/* On entry ecode points to the first opcode, and eptr to the first character
-in the subject string, while eptrb holds the value of eptr at the start of the
-last bracketed group - used for breaking infinite loops matching zero-length
-strings.
-
-Arguments:
-   eptr        pointer in subject
-   ecode       position in code
-   offset_top  current top pointer
-   md          pointer to "static" info for the match
-   ims         current /i, /m, and /s options
-   eptrb       pointer to chain of blocks containing eptr at start of
-                 brackets - for testing for empty matches
-   flags       can contain
-                 match_condassert - this is an assertion condition
-                 match_isgroup - this is the start of a bracketed group
-
-Returns:       TRUE if matched
-*/
-
-static BOOL
-match(register const uschar *eptr, register const uschar *ecode,
-  int offset_top, match_data *md, unsigned long int ims, eptrblock *eptrb,
-  int flags)
-{
-unsigned long int original_ims = ims;   /* Save for resetting on ')' */
-eptrblock newptrb;
-
-/* At the start of a bracketed group, add the current subject pointer to the
-stack of such pointers, to be re-instated at the end of the group when we hit
-the closing ket. When match() is called in other circumstances, we don't add to
-the stack. */
-
-if ((flags & match_isgroup) != 0)
-  {
-  newptrb.prev = eptrb;
-  newptrb.saved_eptr = eptr;
-  eptrb = &newptrb;
-  }
-
-/* Now start processing the operations. */
-
-for (;;)
-  {
-  int op = (int)*ecode;
-  int min, max, ctype;
-  register int i;
-  register int c;
-  BOOL minimize = FALSE;
-
-  /* Opening capturing bracket. If there is space in the offset vector, save
-  the current subject position in the working slot at the top of the vector. We
-  mustn't change the current values of the data slot, because they may be set
-  from a previous iteration of this group, and be referred to by a reference
-  inside the group.
-
-  If the bracket fails to match, we need to restore this value and also the
-  values of the final offsets, in case they were set by a previous iteration of
-  the same bracket.
-
-  If there isn't enough space in the offset vector, treat this as if it were a
-  non-capturing bracket. Don't worry about setting the flag for the error case
-  here; that is handled in the code for KET. */
-
-  if (op > OP_BRA)
-    {
-    int number = op - OP_BRA;
-    int offset = number << 1;
-
-#ifdef DEBUG
-    printf("start bracket %d subject=", number);
-    pchars(eptr, 16, TRUE, md);
-    printf("\n");
-#endif
-
-    if (offset < md->offset_max)
-      {
-      int save_offset1 = md->offset_vector[offset];
-      int save_offset2 = md->offset_vector[offset+1];
-      int save_offset3 = md->offset_vector[md->offset_end - number];
-
-      DPRINTF(("saving %d %d %d\n", save_offset1, save_offset2, save_offset3));
-      md->offset_vector[md->offset_end - number] = eptr - md->start_subject;
-
-      do
-        {
-        if (match(eptr, ecode+3, offset_top, md, ims, eptrb, match_isgroup))
-          return TRUE;
-        ecode += (ecode[1] << 8) + ecode[2];
-        }
-      while (*ecode == OP_ALT);
-
-      DPRINTF(("bracket %d failed\n", number));
-
-      md->offset_vector[offset] = save_offset1;
-      md->offset_vector[offset+1] = save_offset2;
-      md->offset_vector[md->offset_end - number] = save_offset3;
-      return FALSE;
-      }
-
-    /* Insufficient room for saving captured contents */
-
-    else op = OP_BRA;
-    }
-
-  /* Other types of node can be handled by a switch */
-
-  switch(op)
-    {
-    case OP_BRA:     /* Non-capturing bracket: optimized */
-    DPRINTF(("start bracket 0\n"));
-    do
-      {
-      if (match(eptr, ecode+3, offset_top, md, ims, eptrb, match_isgroup))
-        return TRUE;
-      ecode += (ecode[1] << 8) + ecode[2];
-      }
-    while (*ecode == OP_ALT);
-    DPRINTF(("bracket 0 failed\n"));
-    return FALSE;
-
-    /* Conditional group: compilation checked that there are no more than
-    two branches. If the condition is false, skipping the first branch takes us
-    past the end if there is only one branch, but that's OK because that is
-    exactly what going to the ket would do. */
-
-    case OP_COND:
-    if (ecode[3] == OP_CREF)         /* Condition is extraction test */
-      {
-      int offset = ecode[4] << 1;    /* Doubled reference number */
-      return match(eptr,
-        ecode + ((offset < offset_top && md->offset_vector[offset] >= 0)?
-          5 : 3 + (ecode[1] << 8) + ecode[2]),
-        offset_top, md, ims, eptrb, match_isgroup);
-      }
-
-    /* The condition is an assertion. Call match() to evaluate it - setting
-    the final argument TRUE causes it to stop at the end of an assertion. */
-
-    else
-      {
-      if (match(eptr, ecode+3, offset_top, md, ims, NULL,
-          match_condassert | match_isgroup))
-        {
-        ecode += 3 + (ecode[4] << 8) + ecode[5];
-        while (*ecode == OP_ALT) ecode += (ecode[1] << 8) + ecode[2];
-        }
-      else ecode += (ecode[1] << 8) + ecode[2];
-      return match(eptr, ecode+3, offset_top, md, ims, eptrb, match_isgroup);
-      }
-    /* Control never reaches here */
-
-    /* Skip over conditional reference data if encountered (should not be) */
-
-    case OP_CREF:
-    ecode += 2;
-    break;
-
-    /* End of the pattern. If PCRE_NOTEMPTY is set, fail if we have matched
-    an empty string - recursion will then try other alternatives, if any. */
-
-    case OP_END:
-    if (md->notempty && eptr == md->start_match) return FALSE;
-    md->end_match_ptr = eptr;          /* Record where we ended */
-    md->end_offset_top = offset_top;   /* and how many extracts were taken */
-    return TRUE;
-
-    /* Change option settings */
-
-    case OP_OPT:
-    ims = ecode[1];
-    ecode += 2;
-    DPRINTF(("ims set to %02lx\n", ims));
-    break;
-
-    /* Assertion brackets. Check the alternative branches in turn - the
-    matching won't pass the KET for an assertion. If any one branch matches,
-    the assertion is true. Lookbehind assertions have an OP_REVERSE item at the
-    start of each branch to move the current point backwards, so the code at
-    this level is identical to the lookahead case. */
-
-    case OP_ASSERT:
-    case OP_ASSERTBACK:
-    do
-      {
-      if (match(eptr, ecode+3, offset_top, md, ims, NULL, match_isgroup)) break;
-      ecode += (ecode[1] << 8) + ecode[2];
-      }
-    while (*ecode == OP_ALT);
-    if (*ecode == OP_KET) return FALSE;
-
-    /* If checking an assertion for a condition, return TRUE. */
-
-    if ((flags & match_condassert) != 0) return TRUE;
-
-    /* Continue from after the assertion, updating the offsets high water
-    mark, since extracts may have been taken during the assertion. */
-
-    do ecode += (ecode[1] << 8) + ecode[2]; while (*ecode == OP_ALT);
-    ecode += 3;
-    offset_top = md->end_offset_top;
-    continue;
-
-    /* Negative assertion: all branches must fail to match */
-
-    case OP_ASSERT_NOT:
-    case OP_ASSERTBACK_NOT:
-    do
-      {
-      if (match(eptr, ecode+3, offset_top, md, ims, NULL, match_isgroup))
-        return FALSE;
-      ecode += (ecode[1] << 8) + ecode[2];
-      }
-    while (*ecode == OP_ALT);
-
-    if ((flags & match_condassert) != 0) return TRUE;
-
-    ecode += 3;
-    continue;
-
-    /* Move the subject pointer back. This occurs only at the start of
-    each branch of a lookbehind assertion. If we are too close to the start to
-    move back, this match function fails. */
-
-    case OP_REVERSE:
-    eptr -= (ecode[1] << 8) + ecode[2];
-    if (eptr < md->start_subject) return FALSE;
-    ecode += 3;
-    break;
-
-    /* Recursion matches the current regex, nested. If there are any capturing
-    brackets started but not finished, we have to save their starting points
-    and reinstate them after the recursion. However, we don't know how many
-    such there are (offset_top records the completed total) so we just have
-    to save all the potential data. There may be up to 99 such values, which
-    is a bit large to put on the stack, but using malloc for small numbers
-    seems expensive. As a compromise, the stack is used when there are fewer
-    than 16 values to store; otherwise malloc is used. A problem is what to do
-    if the malloc fails ... there is no way of returning to the top level with
-    an error. Save the top 15 values on the stack, and accept that the rest
-    may be wrong. */
-
-    case OP_RECURSE:
-      {
-      BOOL rc;
-      int *save;
-      int stacksave[15];
-
-      c = md->offset_max;
-
-      if (c < 16) save = stacksave; else
-        {
-        save = (int *)(pcre_malloc)((c+1) * sizeof(int));
-        if (save == NULL)
-          {
-          save = stacksave;
-          c = 15;
-          }
-        }
-
-      for (i = 1; i <= c; i++)
-        save[i] = md->offset_vector[md->offset_end - i];
-      rc = match(eptr, md->start_pattern, offset_top, md, ims, eptrb,
-        match_isgroup);
-      for (i = 1; i <= c; i++)
-        md->offset_vector[md->offset_end - i] = save[i];
-      if (save != stacksave) (pcre_free)(save);
-      if (!rc) return FALSE;
-
-      /* In case the recursion has set more capturing values, save the final
-      number, then move along the subject till after the recursive match,
-      and advance one byte in the pattern code. */
-
-      offset_top = md->end_offset_top;
-      eptr = md->end_match_ptr;
-      ecode++;
-      }
-    break;
-
-    /* "Once" brackets are like assertion brackets except that after a match,
-    the point in the subject string is not moved back. Thus there can never be
-    a move back into the brackets. Check the alternative branches in turn - the
-    matching won't pass the KET for this kind of subpattern. If any one branch
-    matches, we carry on as at the end of a normal bracket, leaving the subject
-    pointer. */
-
-    case OP_ONCE:
-      {
-      const uschar *prev = ecode;
-      const uschar *saved_eptr = eptr;
-
-      do
-        {
-        if (match(eptr, ecode+3, offset_top, md, ims, eptrb, match_isgroup))
-          break;
-        ecode += (ecode[1] << 8) + ecode[2];
-        }
-      while (*ecode == OP_ALT);
-
-      /* If hit the end of the group (which could be repeated), fail */
-
-      if (*ecode != OP_ONCE && *ecode != OP_ALT) return FALSE;
-
-      /* Continue as from after the assertion, updating the offsets high water
-      mark, since extracts may have been taken. */
-
-      do ecode += (ecode[1] << 8) + ecode[2]; while (*ecode == OP_ALT);
-
-      offset_top = md->end_offset_top;
-      eptr = md->end_match_ptr;
-
-      /* For a non-repeating ket, just continue at this level. This also
-      happens for a repeating ket if no characters were matched in the group.
-      This is the forcible breaking of infinite loops as implemented in Perl
-      5.005. If there is an options reset, it will get obeyed in the normal
-      course of events. */
-
-      if (*ecode == OP_KET || eptr == saved_eptr)
-        {
-        ecode += 3;
-        break;
-        }
-
-      /* The repeating kets try the rest of the pattern or restart from the
-      preceding bracket, in the appropriate order. We need to reset any options
-      that changed within the bracket before re-running it, so check the next
-      opcode. */
-
-      if (ecode[3] == OP_OPT)
-        {
-        ims = (ims & ~PCRE_IMS) | ecode[4];
-        DPRINTF(("ims set to %02lx at group repeat\n", ims));
-        }
-
-      if (*ecode == OP_KETRMIN)
-        {
-        if (match(eptr, ecode+3, offset_top, md, ims, eptrb, 0) ||
-            match(eptr, prev, offset_top, md, ims, eptrb, match_isgroup))
-              return TRUE;
-        }
-      else  /* OP_KETRMAX */
-        {
-        if (match(eptr, prev, offset_top, md, ims, eptrb, match_isgroup) ||
-            match(eptr, ecode+3, offset_top, md, ims, eptrb, 0)) return TRUE;
-        }
-      }
-    return FALSE;
-
-    /* An alternation is the end of a branch; scan along to find the end of the
-    bracketed group and go to there. */
-
-    case OP_ALT:
-    do ecode += (ecode[1] << 8) + ecode[2]; while (*ecode == OP_ALT);
-    break;
-
-    /* BRAZERO and BRAMINZERO occur just before a bracket group, indicating
-    that it may occur zero times. It may repeat infinitely, or not at all -
-    i.e. it could be ()* or ()? in the pattern. Brackets with fixed upper
-    repeat limits are compiled as a number of copies, with the optional ones
-    preceded by BRAZERO or BRAMINZERO. */
-
-    case OP_BRAZERO:
-      {
-      const uschar *next = ecode+1;
-      if (match(eptr, next, offset_top, md, ims, eptrb, match_isgroup))
-        return TRUE;
-      do next += (next[1] << 8) + next[2]; while (*next == OP_ALT);
-      ecode = next + 3;
-      }
-    break;
-
-    case OP_BRAMINZERO:
-      {
-      const uschar *next = ecode+1;
-      do next += (next[1] << 8) + next[2]; while (*next == OP_ALT);
-      if (match(eptr, next+3, offset_top, md, ims, eptrb, match_isgroup))
-        return TRUE;
-      ecode++;
-      }
-    break;
-
-    /* End of a group, repeated or non-repeating. If we are at the end of
-    an assertion "group", stop matching and return TRUE, but record the
-    current high water mark for use by positive assertions. Do this also
-    for the "once" (not-backup up) groups. */
-
-    case OP_KET:
-    case OP_KETRMIN:
-    case OP_KETRMAX:
-      {
-      const uschar *prev = ecode - (ecode[1] << 8) - ecode[2];
-      const uschar *saved_eptr = eptrb->saved_eptr;
-
-      eptrb = eptrb->prev;    /* Back up the stack of bracket start pointers */
-
-      if (*prev == OP_ASSERT || *prev == OP_ASSERT_NOT ||
-          *prev == OP_ASSERTBACK || *prev == OP_ASSERTBACK_NOT ||
-          *prev == OP_ONCE)
-        {
-        md->end_match_ptr = eptr;      /* For ONCE */
-        md->end_offset_top = offset_top;
-        return TRUE;
-        }
-
-      /* In all other cases except a conditional group we have to check the
-      group number back at the start and if necessary complete handling an
-      extraction by setting the offsets and bumping the high water mark. */
-
-      if (*prev != OP_COND)
-        {
-        int number = *prev - OP_BRA;
-        int offset = number << 1;
-
-#ifdef DEBUG
-        printf("end bracket %d", number);
-        printf("\n");
-#endif
-
-        if (number > 0)
-          {
-          if (offset >= md->offset_max) md->offset_overflow = TRUE; else
-            {
-            md->offset_vector[offset] =
-              md->offset_vector[md->offset_end - number];
-            md->offset_vector[offset+1] = eptr - md->start_subject;
-            if (offset_top <= offset) offset_top = offset + 2;
-            }
-          }
-        }
-
-      /* Reset the value of the ims flags, in case they got changed during
-      the group. */
-
-      ims = original_ims;
-      DPRINTF(("ims reset to %02lx\n", ims));
-
-      /* For a non-repeating ket, just continue at this level. This also
-      happens for a repeating ket if no characters were matched in the group.
-      This is the forcible breaking of infinite loops as implemented in Perl
-      5.005. If there is an options reset, it will get obeyed in the normal
-      course of events. */
-
-      if (*ecode == OP_KET || eptr == saved_eptr)
-        {
-        ecode += 3;
-        break;
-        }
-
-      /* The repeating kets try the rest of the pattern or restart from the
-      preceding bracket, in the appropriate order. */
-
-      if (*ecode == OP_KETRMIN)
-        {
-        if (match(eptr, ecode+3, offset_top, md, ims, eptrb, 0) ||
-            match(eptr, prev, offset_top, md, ims, eptrb, match_isgroup))
-              return TRUE;
-        }
-      else  /* OP_KETRMAX */
-        {
-        if (match(eptr, prev, offset_top, md, ims, eptrb, match_isgroup) ||
-            match(eptr, ecode+3, offset_top, md, ims, eptrb, 0)) return TRUE;
-        }
-      }
-    return FALSE;
-
-    /* Start of subject unless notbol, or after internal newline if multiline */
-
-    case OP_CIRC:
-    if (md->notbol && eptr == md->start_subject) return FALSE;
-    if ((ims & PCRE_MULTILINE) != 0)
-      {
-      if (eptr != md->start_subject && eptr[-1] != '\n') return FALSE;
-      ecode++;
-      break;
-      }
-    /* ... else fall through */
-
-    /* Start of subject assertion */
-
-    case OP_SOD:
-    if (eptr != md->start_subject) return FALSE;
-    ecode++;
-    break;
-
-    /* Assert before internal newline if multiline, or before a terminating
-    newline unless endonly is set, else end of subject unless noteol is set. */
-
-    case OP_DOLL:
-    if ((ims & PCRE_MULTILINE) != 0)
-      {
-      if (eptr < md->end_subject) { if (*eptr != '\n') return FALSE; }
-        else { if (md->noteol) return FALSE; }
-      ecode++;
-      break;
-      }
-    else
-      {
-      if (md->noteol) return FALSE;
-      if (!md->endonly)
-        {
-        if (eptr < md->end_subject - 1 ||
-           (eptr == md->end_subject - 1 && *eptr != '\n')) return FALSE;
-
-        ecode++;
-        break;
-        }
-      }
-    /* ... else fall through */
-
-    /* End of subject assertion (\z) */
-
-    case OP_EOD:
-    if (eptr < md->end_subject) return FALSE;
-    ecode++;
-    break;
-
-    /* End of subject or ending \n assertion (\Z) */
-
-    case OP_EODN:
-    if (eptr < md->end_subject - 1 ||
-       (eptr == md->end_subject - 1 && *eptr != '\n')) return FALSE;
-    ecode++;
-    break;
-
-    /* Word boundary assertions */
-
-    case OP_NOT_WORD_BOUNDARY:
-    case OP_WORD_BOUNDARY:
-      {
-      BOOL prev_is_word = (eptr != md->start_subject) &&
-        ((md->ctypes[eptr[-1]] & ctype_word) != 0);
-      BOOL cur_is_word = (eptr < md->end_subject) &&
-        ((md->ctypes[*eptr] & ctype_word) != 0);
-      if ((*ecode++ == OP_WORD_BOUNDARY)?
-           cur_is_word == prev_is_word : cur_is_word != prev_is_word)
-        return FALSE;
-      }
-    break;
-
-    /* Match a single character type; inline for speed */
-
-    case OP_ANY:
-    if ((ims & PCRE_DOTALL) == 0 && eptr < md->end_subject && *eptr == '\n')
-      return FALSE;
-    if (eptr++ >= md->end_subject) return FALSE;
-    ecode++;
-    break;
-
-    case OP_NOT_DIGIT:
-    if (eptr >= md->end_subject ||
-       (md->ctypes[*eptr++] & ctype_digit) != 0)
-      return FALSE;
-    ecode++;
-    break;
-
-    case OP_DIGIT:
-    if (eptr >= md->end_subject ||
-       (md->ctypes[*eptr++] & ctype_digit) == 0)
-      return FALSE;
-    ecode++;
-    break;
-
-    case OP_NOT_WHITESPACE:
-    if (eptr >= md->end_subject ||
-       (md->ctypes[*eptr++] & ctype_space) != 0)
-      return FALSE;
-    ecode++;
-    break;
-
-    case OP_WHITESPACE:
-    if (eptr >= md->end_subject ||
-       (md->ctypes[*eptr++] & ctype_space) == 0)
-      return FALSE;
-    ecode++;
-    break;
-
-    case OP_NOT_WORDCHAR:
-    if (eptr >= md->end_subject ||
-       (md->ctypes[*eptr++] & ctype_word) != 0)
-      return FALSE;
-    ecode++;
-    break;
-
-    case OP_WORDCHAR:
-    if (eptr >= md->end_subject ||
-       (md->ctypes[*eptr++] & ctype_word) == 0)
-      return FALSE;
-    ecode++;
-    break;
-
-    /* Match a back reference, possibly repeatedly. Look past the end of the
-    item to see if there is repeat information following. The code is similar
-    to that for character classes, but repeated for efficiency. Then obey
-    similar code to character type repeats - written out again for speed.
-    However, if the referenced string is the empty string, always treat
-    it as matched, any number of times (otherwise there could be infinite
-    loops). */
-
-    case OP_REF:
-      {
-      int length;
-      int offset = ecode[1] << 1;                /* Doubled reference number */
-      ecode += 2;                                /* Advance past the item */
-
-      /* If the reference is unset, set the length to be longer than the amount
-      of subject left; this ensures that every attempt at a match fails. We
-      can't just fail here, because of the possibility of quantifiers with zero
-      minima. */
-
-      length = (offset >= offset_top || md->offset_vector[offset] < 0)?
-        md->end_subject - eptr + 1 :
-        md->offset_vector[offset+1] - md->offset_vector[offset];
-
-      /* Set up for repetition, or handle the non-repeated case */
-
-      switch (*ecode)
-        {
-        case OP_CRSTAR:
-        case OP_CRMINSTAR:
-        case OP_CRPLUS:
-        case OP_CRMINPLUS:
-        case OP_CRQUERY:
-        case OP_CRMINQUERY:
-        c = *ecode++ - OP_CRSTAR;
-        minimize = (c & 1) != 0;
-        min = rep_min[c];                 /* Pick up values from tables; */
-        max = rep_max[c];                 /* zero for max => infinity */
-        if (max == 0) max = INT_MAX;
-        break;
-
-        case OP_CRRANGE:
-        case OP_CRMINRANGE:
-        minimize = (*ecode == OP_CRMINRANGE);
-        min = (ecode[1] << 8) + ecode[2];
-        max = (ecode[3] << 8) + ecode[4];
-        if (max == 0) max = INT_MAX;
-        ecode += 5;
-        break;
-
-        default:               /* No repeat follows */
-        if (!match_ref(offset, eptr, length, md, ims)) return FALSE;
-        eptr += length;
-        continue;              /* With the main loop */
-        }
-
-      /* If the length of the reference is zero, just continue with the
-      main loop. */
-
-      if (length == 0) continue;
-
-      /* First, ensure the minimum number of matches are present. We get back
-      the length of the reference string explicitly rather than passing the
-      address of eptr, so that eptr can be a register variable. */
-
-      for (i = 1; i <= min; i++)
-        {
-        if (!match_ref(offset, eptr, length, md, ims)) return FALSE;
-        eptr += length;
-        }
-
-      /* If min = max, continue at the same level without recursion.
-      They are not both allowed to be zero. */
-
-      if (min == max) continue;
-
-      /* If minimizing, keep trying and advancing the pointer */
-
-      if (minimize)
-        {
-        for (i = min;; i++)
-          {
-          if (match(eptr, ecode, offset_top, md, ims, eptrb, 0))
-            return TRUE;
-          if (i >= max || !match_ref(offset, eptr, length, md, ims))
-            return FALSE;
-          eptr += length;
-          }
-        /* Control never gets here */
-        }
-
-      /* If maximizing, find the longest string and work backwards */
-
-      else
-        {
-        const uschar *pp = eptr;
-        for (i = min; i < max; i++)
-          {
-          if (!match_ref(offset, eptr, length, md, ims)) break;
-          eptr += length;
-          }
-        while (eptr >= pp)
-          {
-          if (match(eptr, ecode, offset_top, md, ims, eptrb, 0))
-            return TRUE;
-          eptr -= length;
-          }
-        return FALSE;
-        }
-      }
-    /* Control never gets here */
-
-
-
-    /* Match a character class, possibly repeatedly. Look past the end of the
-    item to see if there is repeat information following. Then obey similar
-    code to character type repeats - written out again for speed. */
-
-    case OP_CLASS:
-      {
-      const uschar *data = ecode + 1;  /* Save for matching */
-      ecode += 33;                     /* Advance past the item */
-
-      switch (*ecode)
-        {
-        case OP_CRSTAR:
-        case OP_CRMINSTAR:
-        case OP_CRPLUS:
-        case OP_CRMINPLUS:
-        case OP_CRQUERY:
-        case OP_CRMINQUERY:
-        c = *ecode++ - OP_CRSTAR;
-        minimize = (c & 1) != 0;
-        min = rep_min[c];                 /* Pick up values from tables; */
-        max = rep_max[c];                 /* zero for max => infinity */
-        if (max == 0) max = INT_MAX;
-        break;
-
-        case OP_CRRANGE:
-        case OP_CRMINRANGE:
-        minimize = (*ecode == OP_CRMINRANGE);
-        min = (ecode[1] << 8) + ecode[2];
-        max = (ecode[3] << 8) + ecode[4];
-        if (max == 0) max = INT_MAX;
-        ecode += 5;
-        break;
-
-        default:               /* No repeat follows */
-        min = max = 1;
-        break;
-        }
-
-      /* First, ensure the minimum number of matches are present. */
-
-      for (i = 1; i <= min; i++)
-        {
-        if (eptr >= md->end_subject) return FALSE;
-        c = *eptr++;
-        if ((data[c/8] & (1 << (c&7))) != 0) continue;
-        return FALSE;
-        }
-
-      /* If max == min we can continue with the main loop without the
-      need to recurse. */
-
-      if (min == max) continue;
-
-      /* If minimizing, keep testing the rest of the expression and advancing
-      the pointer while it matches the class. */
-
-      if (minimize)
-        {
-        for (i = min;; i++)
-          {
-          if (match(eptr, ecode, offset_top, md, ims, eptrb, 0))
-            return TRUE;
-          if (i >= max || eptr >= md->end_subject) return FALSE;
-          c = *eptr++;
-          if ((data[c/8] & (1 << (c&7))) != 0) continue;
-          return FALSE;
-          }
-        /* Control never gets here */
-        }
-
-      /* If maximizing, find the longest possible run, then work backwards. */
-
-      else
-        {
-        const uschar *pp = eptr;
-        for (i = min; i < max; eptr++, i++)
-          {
-          if (eptr >= md->end_subject) break;
-          c = *eptr;
-          if ((data[c/8] & (1 << (c&7))) != 0) continue;
-          break;
-          }
-
-        while (eptr >= pp)
-          if (match(eptr--, ecode, offset_top, md, ims, eptrb, 0))
-            return TRUE;
-        return FALSE;
-        }
-      }
-    /* Control never gets here */
-
-    /* Match a run of characters */
-
-    case OP_CHARS:
-      {
-      register int length = ecode[1];
-      ecode += 2;
-
-#ifdef DEBUG    /* Sigh. Some compilers never learn. */
-      if (eptr >= md->end_subject)
-        printf("matching subject <null> against pattern ");
-      else
-        {
-        printf("matching subject ");
-        pchars(eptr, length, TRUE, md);
-        printf(" against pattern ");
-        }
-      pchars(ecode, length, FALSE, md);
-      printf("\n");
-#endif
-
-      if (length > md->end_subject - eptr) return FALSE;
-      if ((ims & PCRE_CASELESS) != 0)
-        {
-        while (length-- > 0)
-          if (md->lcc[*ecode++] != md->lcc[*eptr++])
-            return FALSE;
-        }
-      else
-        {
-        while (length-- > 0) if (*ecode++ != *eptr++) return FALSE;
-        }
-      }
-    break;
-
-    /* Match a single character repeatedly; different opcodes share code. */
-
-    case OP_EXACT:
-    min = max = (ecode[1] << 8) + ecode[2];
-    ecode += 3;
-    goto REPEATCHAR;
-
-    case OP_UPTO:
-    case OP_MINUPTO:
-    min = 0;
-    max = (ecode[1] << 8) + ecode[2];
-    minimize = *ecode == OP_MINUPTO;
-    ecode += 3;
-    goto REPEATCHAR;
-
-    case OP_STAR:
-    case OP_MINSTAR:
-    case OP_PLUS:
-    case OP_MINPLUS:
-    case OP_QUERY:
-    case OP_MINQUERY:
-    c = *ecode++ - OP_STAR;
-    minimize = (c & 1) != 0;
-    min = rep_min[c];                 /* Pick up values from tables; */
-    max = rep_max[c];                 /* zero for max => infinity */
-    if (max == 0) max = INT_MAX;
-
-    /* Common code for all repeated single-character matches. We can give
-    up quickly if there are fewer than the minimum number of characters left in
-    the subject. */
-
-    REPEATCHAR:
-    if (min > md->end_subject - eptr) return FALSE;
-    c = *ecode++;
-
-    /* The code is duplicated for the caseless and caseful cases, for speed,
-    since matching characters is likely to be quite common. First, ensure the
-    minimum number of matches are present. If min = max, continue at the same
-    level without recursing. Otherwise, if minimizing, keep trying the rest of
-    the expression and advancing one matching character if failing, up to the
-    maximum. Alternatively, if maximizing, find the maximum number of
-    characters and work backwards. */
-
-    DPRINTF(("matching %c{%d,%d} against subject %.*s\n", c, min, max,
-      max, eptr));
-
-    if ((ims & PCRE_CASELESS) != 0)
-      {
-      c = md->lcc[c];
-      for (i = 1; i <= min; i++)
-        if (c != md->lcc[*eptr++]) return FALSE;
-      if (min == max) continue;
-      if (minimize)
-        {
-        for (i = min;; i++)
-          {
-          if (match(eptr, ecode, offset_top, md, ims, eptrb, 0))
-            return TRUE;
-          if (i >= max || eptr >= md->end_subject ||
-              c != md->lcc[*eptr++])
-            return FALSE;
-          }
-        /* Control never gets here */
-        }
-      else
-        {
-        const uschar *pp = eptr;
-        for (i = min; i < max; i++)
-          {
-          if (eptr >= md->end_subject || c != md->lcc[*eptr]) break;
-          eptr++;
-          }
-        while (eptr >= pp)
-          if (match(eptr--, ecode, offset_top, md, ims, eptrb, 0))
-            return TRUE;
-        return FALSE;
-        }
-      /* Control never gets here */
-      }
-
-    /* Caseful comparisons */
-
-    else
-      {
-      for (i = 1; i <= min; i++) if (c != *eptr++) return FALSE;
-      if (min == max) continue;
-      if (minimize)
-        {
-        for (i = min;; i++)
-          {
-          if (match(eptr, ecode, offset_top, md, ims, eptrb, 0))
-            return TRUE;
-          if (i >= max || eptr >= md->end_subject || c != *eptr++) return FALSE;
-          }
-        /* Control never gets here */
-        }
-      else
-        {
-        const uschar *pp = eptr;
-        for (i = min; i < max; i++)
-          {
-          if (eptr >= md->end_subject || c != *eptr) break;
-          eptr++;
-          }
-        while (eptr >= pp)
-         if (match(eptr--, ecode, offset_top, md, ims, eptrb, 0))
-           return TRUE;
-        return FALSE;
-        }
-      }
-    /* Control never gets here */
-
-    /* Match a negated single character */
-
-    case OP_NOT:
-    if (eptr >= md->end_subject) return FALSE;
-    ecode++;
-    if ((ims & PCRE_CASELESS) != 0)
-      {
-      if (md->lcc[*ecode++] == md->lcc[*eptr++]) return FALSE;
-      }
-    else
-      {
-      if (*ecode++ == *eptr++) return FALSE;
-      }
-    break;
-
-    /* Match a negated single character repeatedly. This is almost a repeat of
-    the code for a repeated single character, but I haven't found a nice way of
-    commoning these up that doesn't require a test of the positive/negative
-    option for each character match. Maybe that wouldn't add very much to the
-    time taken, but character matching *is* what this is all about... */
-
-    case OP_NOTEXACT:
-    min = max = (ecode[1] << 8) + ecode[2];
-    ecode += 3;
-    goto REPEATNOTCHAR;
-
-    case OP_NOTUPTO:
-    case OP_NOTMINUPTO:
-    min = 0;
-    max = (ecode[1] << 8) + ecode[2];
-    minimize = *ecode == OP_NOTMINUPTO;
-    ecode += 3;
-    goto REPEATNOTCHAR;
-
-    case OP_NOTSTAR:
-    case OP_NOTMINSTAR:
-    case OP_NOTPLUS:
-    case OP_NOTMINPLUS:
-    case OP_NOTQUERY:
-    case OP_NOTMINQUERY:
-    c = *ecode++ - OP_NOTSTAR;
-    minimize = (c & 1) != 0;
-    min = rep_min[c];                 /* Pick up values from tables; */
-    max = rep_max[c];                 /* zero for max => infinity */
-    if (max == 0) max = INT_MAX;
-
-    /* Common code for all repeated single-character matches. We can give
-    up quickly if there are fewer than the minimum number of characters left in
-    the subject. */
-
-    REPEATNOTCHAR:
-    if (min > md->end_subject - eptr) return FALSE;
-    c = *ecode++;
-
-    /* The code is duplicated for the caseless and caseful cases, for speed,
-    since matching characters is likely to be quite common. First, ensure the
-    minimum number of matches are present. If min = max, continue at the same
-    level without recursing. Otherwise, if minimizing, keep trying the rest of
-    the expression and advancing one matching character if failing, up to the
-    maximum. Alternatively, if maximizing, find the maximum number of
-    characters and work backwards. */
-
-    DPRINTF(("negative matching %c{%d,%d} against subject %.*s\n", c, min, max,
-      max, eptr));
-
-    if ((ims & PCRE_CASELESS) != 0)
-      {
-      c = md->lcc[c];
-      for (i = 1; i <= min; i++)
-        if (c == md->lcc[*eptr++]) return FALSE;
-      if (min == max) continue;
-      if (minimize)
-        {
-        for (i = min;; i++)
-          {
-          if (match(eptr, ecode, offset_top, md, ims, eptrb, 0))
-            return TRUE;
-          if (i >= max || eptr >= md->end_subject ||
-              c == md->lcc[*eptr++])
-            return FALSE;
-          }
-        /* Control never gets here */
-        }
-      else
-        {
-        const uschar *pp = eptr;
-        for (i = min; i < max; i++)
-          {
-          if (eptr >= md->end_subject || c == md->lcc[*eptr]) break;
-          eptr++;
-          }
-        while (eptr >= pp)
-          if (match(eptr--, ecode, offset_top, md, ims, eptrb, 0))
-            return TRUE;
-        return FALSE;
-        }
-      /* Control never gets here */
-      }
-
-    /* Caseful comparisons */
-
-    else
-      {
-      for (i = 1; i <= min; i++) if (c == *eptr++) return FALSE;
-      if (min == max) continue;
-      if (minimize)
-        {
-        for (i = min;; i++)
-          {
-          if (match(eptr, ecode, offset_top, md, ims, eptrb, 0))
-            return TRUE;
-          if (i >= max || eptr >= md->end_subject || c == *eptr++) return FALSE;
-          }
-        /* Control never gets here */
-        }
-      else
-        {
-        const uschar *pp = eptr;
-        for (i = min; i < max; i++)
-          {
-          if (eptr >= md->end_subject || c == *eptr) break;
-          eptr++;
-          }
-        while (eptr >= pp)
-         if (match(eptr--, ecode, offset_top, md, ims, eptrb, 0))
-           return TRUE;
-        return FALSE;
-        }
-      }
-    /* Control never gets here */
-
-    /* Match a single character type repeatedly; several different opcodes
-    share code. This is very similar to the code for single characters, but we
-    repeat it in the interests of efficiency. */
-
-    case OP_TYPEEXACT:
-    min = max = (ecode[1] << 8) + ecode[2];
-    minimize = TRUE;
-    ecode += 3;
-    goto REPEATTYPE;
-
-    case OP_TYPEUPTO:
-    case OP_TYPEMINUPTO:
-    min = 0;
-    max = (ecode[1] << 8) + ecode[2];
-    minimize = *ecode == OP_TYPEMINUPTO;
-    ecode += 3;
-    goto REPEATTYPE;
-
-    case OP_TYPESTAR:
-    case OP_TYPEMINSTAR:
-    case OP_TYPEPLUS:
-    case OP_TYPEMINPLUS:
-    case OP_TYPEQUERY:
-    case OP_TYPEMINQUERY:
-    c = *ecode++ - OP_TYPESTAR;
-    minimize = (c & 1) != 0;
-    min = rep_min[c];                 /* Pick up values from tables; */
-    max = rep_max[c];                 /* zero for max => infinity */
-    if (max == 0) max = INT_MAX;
-
-    /* Common code for all repeated single character type matches */
-
-    REPEATTYPE:
-    ctype = *ecode++;      /* Code for the character type */
-
-    /* First, ensure the minimum number of matches are present. Use inline
-    code for maximizing the speed, and do the type test once at the start
-    (i.e. keep it out of the loop). Also test that there are at least the
-    minimum number of characters before we start. */
-
-    if (min > md->end_subject - eptr) return FALSE;
-    if (min > 0) switch(ctype)
-      {
-      case OP_ANY:
-      if ((ims & PCRE_DOTALL) == 0)
-        { for (i = 1; i <= min; i++) if (*eptr++ == '\n') return FALSE; }
-      else eptr += min;
-      break;
-
-      case OP_NOT_DIGIT:
-      for (i = 1; i <= min; i++)
-        if ((md->ctypes[*eptr++] & ctype_digit) != 0) return FALSE;
-      break;
-
-      case OP_DIGIT:
-      for (i = 1; i <= min; i++)
-        if ((md->ctypes[*eptr++] & ctype_digit) == 0) return FALSE;
-      break;
-
-      case OP_NOT_WHITESPACE:
-      for (i = 1; i <= min; i++)
-        if ((md->ctypes[*eptr++] & ctype_space) != 0) return FALSE;
-      break;
-
-      case OP_WHITESPACE:
-      for (i = 1; i <= min; i++)
-        if ((md->ctypes[*eptr++] & ctype_space) == 0) return FALSE;
-      break;
-
-      case OP_NOT_WORDCHAR:
-      for (i = 1; i <= min; i++)
-        if ((md->ctypes[*eptr++] & ctype_word) != 0)
-          return FALSE;
-      break;
-
-      case OP_WORDCHAR:
-      for (i = 1; i <= min; i++)
-        if ((md->ctypes[*eptr++] & ctype_word) == 0)
-          return FALSE;
-      break;
-      }
-
-    /* If min = max, continue at the same level without recursing */
-
-    if (min == max) continue;
-
-    /* If minimizing, we have to test the rest of the pattern before each
-    subsequent match. */
-
-    if (minimize)
-      {
-      for (i = min;; i++)
-        {
-        if (match(eptr, ecode, offset_top, md, ims, eptrb, 0)) return TRUE;
-        if (i >= max || eptr >= md->end_subject) return FALSE;
-
-        c = *eptr++;
-        switch(ctype)
-          {
-          case OP_ANY:
-          if ((ims & PCRE_DOTALL) == 0 && c == '\n') return FALSE;
-          break;
-
-          case OP_NOT_DIGIT:
-          if ((md->ctypes[c] & ctype_digit) != 0) return FALSE;
-          break;
-
-          case OP_DIGIT:
-          if ((md->ctypes[c] & ctype_digit) == 0) return FALSE;
-          break;
-
-          case OP_NOT_WHITESPACE:
-          if ((md->ctypes[c] & ctype_space) != 0) return FALSE;
-          break;
-
-          case OP_WHITESPACE:
-          if  ((md->ctypes[c] & ctype_space) == 0) return FALSE;
-          break;
-
-          case OP_NOT_WORDCHAR:
-          if ((md->ctypes[c] & ctype_word) != 0) return FALSE;
-          break;
-
-          case OP_WORDCHAR:
-          if ((md->ctypes[c] & ctype_word) == 0) return FALSE;
-          break;
-          }
-        }
-      /* Control never gets here */
-      }
-
-    /* If maximizing it is worth using inline code for speed, doing the type
-    test once at the start (i.e. keep it out of the loop). */
-
-    else
-      {
-      const uschar *pp = eptr;
-      switch(ctype)
-        {
-        case OP_ANY:
-        if ((ims & PCRE_DOTALL) == 0)
-          {
-          for (i = min; i < max; i++)
-            {
-            if (eptr >= md->end_subject || *eptr == '\n') break;
-            eptr++;
-            }
-          }
-        else
-          {
-          c = max - min;
-          if (c > md->end_subject - eptr) c = md->end_subject - eptr;
-          eptr += c;
-          }
-        break;
-
-        case OP_NOT_DIGIT:
-        for (i = min; i < max; i++)
-          {
-          if (eptr >= md->end_subject || (md->ctypes[*eptr] & ctype_digit) != 0)
-            break;
-          eptr++;
-          }
-        break;
-
-        case OP_DIGIT:
-        for (i = min; i < max; i++)
-          {
-          if (eptr >= md->end_subject || (md->ctypes[*eptr] & ctype_digit) == 0)
-            break;
-          eptr++;
-          }
-        break;
-
-        case OP_NOT_WHITESPACE:
-        for (i = min; i < max; i++)
-          {
-          if (eptr >= md->end_subject || (md->ctypes[*eptr] & ctype_space) != 0)
-            break;
-          eptr++;
-          }
-        break;
-
-        case OP_WHITESPACE:
-        for (i = min; i < max; i++)
-          {
-          if (eptr >= md->end_subject || (md->ctypes[*eptr] & ctype_space) == 0)
-            break;
-          eptr++;
-          }
-        break;
-
-        case OP_NOT_WORDCHAR:
-        for (i = min; i < max; i++)
-          {
-          if (eptr >= md->end_subject || (md->ctypes[*eptr] & ctype_word) != 0)
-            break;
-          eptr++;
-          }
-        break;
-
-        case OP_WORDCHAR:
-        for (i = min; i < max; i++)
-          {
-          if (eptr >= md->end_subject || (md->ctypes[*eptr] & ctype_word) == 0)
-            break;
-          eptr++;
-          }
-        break;
-        }
-
-      while (eptr >= pp)
-        if (match(eptr--, ecode, offset_top, md, ims, eptrb, 0))
-          return TRUE;
-      return FALSE;
-      }
-    /* Control never gets here */
-
-    /* There's been some horrible disaster. */
-
-    default:
-    DPRINTF(("Unknown opcode %d\n", *ecode));
-    md->errorcode = PCRE_ERROR_UNKNOWN_NODE;
-    return FALSE;
-    }
-
-  /* Do not stick any code in here without much thought; it is assumed
-  that "continue" in the code above comes out to here to repeat the main
-  loop. */
-
-  }             /* End of main loop */
-/* Control never reaches here */
-}
-
-
-
-
-/*************************************************
-*         Execute a Regular Expression           *
-*************************************************/
-
-/* This function applies a compiled re to a subject string and picks out
-portions of the string if it matches. Two elements in the vector are set for
-each substring: the offsets to the start and end of the substring.
-
-Arguments:
-  external_re     points to the compiled expression
-  external_extra  points to "hints" from pcre_study() or is NULL
-  subject         points to the subject string
-  length          length of subject string (may contain binary zeros)
-  start_offset    where to start in the subject string
-  options         option bits
-  offsets         points to a vector of ints to be filled in with offsets
-  offsetcount     the number of elements in the vector
-
-Returns:          > 0 => success; value is the number of elements filled in
-                  = 0 => success, but offsets is not big enough
-                   -1 => failed to match
-                 < -1 => some kind of unexpected problem
-*/
-
-int
-pcre_exec(const pcre *external_re, const pcre_extra *external_extra,
-  const char *subject, int length, int start_offset, int options, int *offsets,
-  int offsetcount)
-{
-int resetcount, ocount;
-int first_char = -1;
-int req_char = -1;
-int req_char2 = -1;
-unsigned long int ims = 0;
-match_data match_block;
-const uschar *start_bits = NULL;
-const uschar *start_match = (const uschar *)subject + start_offset;
-const uschar *end_subject;
-const uschar *req_char_ptr = start_match - 1;
-const real_pcre *re = (const real_pcre *)external_re;
-const real_pcre_extra *extra = (const real_pcre_extra *)external_extra;
-BOOL using_temporary_offsets = FALSE;
-BOOL anchored = ((re->options | options) & PCRE_ANCHORED) != 0;
-BOOL startline = (re->options & PCRE_STARTLINE) != 0;
-
-if ((options & ~PUBLIC_EXEC_OPTIONS) != 0) return PCRE_ERROR_BADOPTION;
-
-if (re == NULL || subject == NULL ||
-   (offsets == NULL && offsetcount > 0)) return PCRE_ERROR_NULL;
-if (re->magic_number != MAGIC_NUMBER) return PCRE_ERROR_BADMAGIC;
-
-match_block.start_pattern = re->code;
-match_block.start_subject = (const uschar *)subject;
-match_block.end_subject = match_block.start_subject + length;
-end_subject = match_block.end_subject;
-
-match_block.endonly = (re->options & PCRE_DOLLAR_ENDONLY) != 0;
-
-match_block.notbol = (options & PCRE_NOTBOL) != 0;
-match_block.noteol = (options & PCRE_NOTEOL) != 0;
-match_block.notempty = (options & PCRE_NOTEMPTY) != 0;
-
-match_block.errorcode = PCRE_ERROR_NOMATCH;     /* Default error */
-
-match_block.lcc = re->tables + lcc_offset;
-match_block.ctypes = re->tables + ctypes_offset;
-
-/* The ims options can vary during the matching as a result of the presence
-of (?ims) items in the pattern. They are kept in a local variable so that
-restoring at the exit of a group is easy. */
-
-ims = re->options & (PCRE_CASELESS|PCRE_MULTILINE|PCRE_DOTALL);
-
-/* If the expression has got more back references than the offsets supplied can
-hold, we get a temporary bit of working store to use during the matching.
-Otherwise, we can use the vector supplied, rounding down its size to a multiple
-of 3. */
-
-ocount = offsetcount - (offsetcount % 3);
-
-if (re->top_backref > 0 && re->top_backref >= ocount/3)
-  {
-  ocount = re->top_backref * 3 + 3;
-  match_block.offset_vector = (int *)(pcre_malloc)(ocount * sizeof(int));
-  if (match_block.offset_vector == NULL) return PCRE_ERROR_NOMEMORY;
-  using_temporary_offsets = TRUE;
-  DPRINTF(("Got memory to hold back references\n"));
-  }
-else match_block.offset_vector = offsets;
-
-match_block.offset_end = ocount;
-match_block.offset_max = (2*ocount)/3;
-match_block.offset_overflow = FALSE;
-
-/* Compute the minimum number of offsets that we need to reset each time. Doing
-this makes a huge difference to execution time when there aren't many brackets
-in the pattern. */
-
-resetcount = 2 + re->top_bracket * 2;
-if (resetcount > offsetcount) resetcount = ocount;
-
-/* Reset the working variable associated with each extraction. These should
-never be used unless previously set, but they get saved and restored, and so we
-initialize them to avoid reading uninitialized locations. */
-
-if (match_block.offset_vector != NULL)
-  {
-  register int *iptr = match_block.offset_vector + ocount;
-  register int *iend = iptr - resetcount/2 + 1;
-  while (--iptr >= iend) *iptr = -1;
-  }
-
-/* Set up the first character to match, if available. The first_char value is
-never set for an anchored regular expression, but the anchoring may be forced
-at run time, so we have to test for anchoring. The first char may be unset for
-an unanchored pattern, of course. If there's no first char and the pattern was
-studied, there may be a bitmap of possible first characters. */
-
-if (!anchored)
-  {
-  if ((re->options & PCRE_FIRSTSET) != 0)
-    {
-    first_char = re->first_char;
-    if ((ims & PCRE_CASELESS) != 0) first_char = match_block.lcc[first_char];
-    }
-  else
-    if (!startline && extra != NULL &&
-      (extra->options & PCRE_STUDY_MAPPED) != 0)
-        start_bits = extra->start_bits;
-  }
-
-/* For anchored or unanchored matches, there may be a "last known required
-character" set. If the PCRE_CASELESS is set, implying that the match starts
-caselessly, or if there are any changes of this flag within the regex, set up
-both cases of the character. Otherwise set the two values the same, which will
-avoid duplicate testing (which takes significant time). This covers the vast
-majority of cases. It will be suboptimal when the case flag changes in a regex
-and the required character in fact is caseful. */
-
-if ((re->options & PCRE_REQCHSET) != 0)
-  {
-  req_char = re->req_char;
-  req_char2 = ((re->options & (PCRE_CASELESS | PCRE_ICHANGED)) != 0)?
-    (re->tables + fcc_offset)[req_char] : req_char;
-  }
-
-/* Loop for handling unanchored repeated matching attempts; for anchored regexs
-the loop runs just once. */
-
-do
-  {
-  int rc;
-  register int *iptr = match_block.offset_vector;
-  register int *iend = iptr + resetcount;
-
-  /* Reset the maximum number of extractions we might see. */
-
-  while (iptr < iend) *iptr++ = -1;
-
-  /* Advance to a unique first char if possible */
-
-  if (first_char >= 0)
-    {
-    if ((ims & PCRE_CASELESS) != 0)
-      while (start_match < end_subject &&
-             match_block.lcc[*start_match] != first_char)
-        start_match++;
-    else
-      while (start_match < end_subject && *start_match != first_char)
-        start_match++;
-    }
-
-  /* Or to just after \n for a multiline match if possible */
-
-  else if (startline)
-    {
-    if (start_match > match_block.start_subject + start_offset)
-      {
-      while (start_match < end_subject && start_match[-1] != '\n')
-        start_match++;
-      }
-    }
-
-  /* Or to a non-unique first char after study */
-
-  else if (start_bits != NULL)
-    {
-    while (start_match < end_subject)
-      {
-      register int c = *start_match;
-      if ((start_bits[c/8] & (1 << (c&7))) == 0) start_match++; else break;
-      }
-    }
-
-#ifdef DEBUG  /* Sigh. Some compilers never learn. */
-  printf(">>>> Match against: ");
-  pchars(start_match, end_subject - start_match, TRUE, &match_block);
-  printf("\n");
-#endif
-
-  /* If req_char is set, we know that that character must appear in the subject
-  for the match to succeed. If the first character is set, req_char must be
-  later in the subject; otherwise the test starts at the match point. This
-  optimization can save a huge amount of backtracking in patterns with nested
-  unlimited repeats that aren't going to match. We don't know what the state of
-  case matching may be when this character is hit, so test for it in both its
-  cases if necessary. However, the different cased versions will not be set up
-  unless PCRE_CASELESS was given or the casing state changes within the regex.
-  Writing separate code makes it go faster, as does using an autoincrement and
-  backing off on a match. */
-
-  if (req_char >= 0)
-    {
-    register const uschar *p = start_match + ((first_char >= 0)? 1 : 0);
-
-    /* We don't need to repeat the search if we haven't yet reached the
-    place we found it at last time. */
-
-    if (p > req_char_ptr)
-      {
-      /* Do a single test if no case difference is set up */
-
-      if (req_char == req_char2)
-        {
-        while (p < end_subject)
-          {
-          if (*p++ == req_char) { p--; break; }
-          }
-        }
-
-      /* Otherwise test for either case */
-
-      else
-        {
-        while (p < end_subject)
-          {
-          register int pp = *p++;
-          if (pp == req_char || pp == req_char2) { p--; break; }
-          }
-        }
-
-      /* If we can't find the required character, break the matching loop */
-
-      if (p >= end_subject) break;
-
-      /* If we have found the required character, save the point where we
-      found it, so that we don't search again next time round the loop if
-      the start hasn't passed this character yet. */
-
-      req_char_ptr = p;
-      }
-    }
-
-  /* When a match occurs, substrings will be set for all internal extractions;
-  we just need to set up the whole thing as substring 0 before returning. If
-  there were too many extractions, set the return code to zero. In the case
-  where we had to get some local store to hold offsets for backreferences, copy
-  those back references that we can. In this case there need not be overflow
-  if certain parts of the pattern were not used. */
-
-  match_block.start_match = start_match;
-  if (!match(start_match, re->code, 2, &match_block, ims, NULL, match_isgroup))
-    continue;
-
-  /* Copy the offset information from temporary store if necessary */
-
-  if (using_temporary_offsets)
-    {
-    if (offsetcount >= 4)
-      {
-      memcpy(offsets + 2, match_block.offset_vector + 2,
-        (offsetcount - 2) * sizeof(int));
-      DPRINTF(("Copied offsets from temporary memory\n"));
-      }
-    if (match_block.end_offset_top > offsetcount)
-      match_block.offset_overflow = TRUE;
-
-    DPRINTF(("Freeing temporary memory\n"));
-    (pcre_free)(match_block.offset_vector);
-    }
-
-  rc = match_block.offset_overflow? 0 : match_block.end_offset_top/2;
-
-  if (match_block.offset_end < 2) rc = 0; else
-    {
-    offsets[0] = start_match - match_block.start_subject;
-    offsets[1] = match_block.end_match_ptr - match_block.start_subject;
-    }
-
-  DPRINTF((">>>> returning %d\n", rc));
-  return rc;
-  }
-
-/* This "while" is the end of the "do" above */
-
-while (!anchored &&
-       match_block.errorcode == PCRE_ERROR_NOMATCH &&
-       start_match++ < end_subject);
-
-if (using_temporary_offsets)
-  {
-  DPRINTF(("Freeing temporary memory\n"));
-  (pcre_free)(match_block.offset_vector);
-  }
-
-DPRINTF((">>>> returning %d\n", match_block.errorcode));
-
-return match_block.errorcode;
-}
-
-/* End of pcre.c */
diff --git a/srclib/pcre/pcre.def b/srclib/pcre/pcre.def
deleted file mode 100644
index 0e8cf3f..0000000
--- a/srclib/pcre/pcre.def
+++ /dev/null
@@ -1,19 +0,0 @@
-EXPORTS
-
-pcre_malloc DATA
-pcre_free DATA
-
-pcre_compile
-pcre_copy_substring
-pcre_exec
-pcre_get_substring
-pcre_get_substring_list
-pcre_info
-pcre_maketables
-pcre_study
-pcre_version
-
-regcomp
-regexec
-regerror
-regfree
diff --git a/srclib/pcre/pcre.dsp b/srclib/pcre/pcre.dsp
deleted file mode 100644
index 039a3b7..0000000
--- a/srclib/pcre/pcre.dsp
+++ /dev/null
@@ -1,199 +0,0 @@
-# Microsoft Developer Studio Project File - Name="pcre" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Static Library" 0x0104
-
-CFG=pcre - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "pcre.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "pcre.mak" CFG="pcre - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "pcre - Win32 Release" (based on "Win32 (x86) Static Library")
-!MESSAGE "pcre - Win32 Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "pcre - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "LibR"
-# PROP Intermediate_Dir "LibR"
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "_WIN32" /D "NDEBUG" /D "_WINDOWS" /D "STATIC" /Fd"LibR/pcre" /FD /c
-# ADD CPP /nologo /MD /W3 /O2 /D "_WIN32" /D "NDEBUG" /D "_WINDOWS" /D "STATIC" /Fd"LibR/pcre" /FD /c
-# ADD BASE RSC /l 0x409
-# ADD RSC /l 0x409
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ELSEIF  "$(CFG)" == "pcre - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "LibD"
-# PROP Intermediate_Dir "LibD"
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "_WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STATIC" /Fd"LibD/pcre" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /D "_WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STATIC" /Fd"LibD/pcre" /FD /c
-# ADD BASE RSC /l 0x409
-# ADD RSC /l 0x409
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ENDIF 
-
-# Begin Target
-
-# Name "pcre - Win32 Release"
-# Name "pcre - Win32 Debug"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "*.c"
-# Begin Source File
-
-SOURCE=.\dftables.exe
-
-!IF  "$(CFG)" == "pcre - Win32 Release"
-
-# Begin Custom Build
-InputPath=.\dftables.exe
-
-".\chartables.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	.\dftables.exe >.\chartables.c 
-	Echo Creating pcre chartables.c from dftables 
-	
-# End Custom Build
-
-!ELSEIF  "$(CFG)" == "pcre - Win32 Debug"
-
-# Begin Custom Build
-InputPath=.\dftables.exe
-
-".\chartables.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	.\dftables.exe >.\chartables.c 
-	Echo Creating pcre chartables.c from dftables 
-	
-# End Custom Build
-
-!ENDIF 
-
-# End Source File
-# Begin Source File
-
-SOURCE=.\get.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\maketables.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\pcre.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\study.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "*.h"
-# Begin Source File
-
-SOURCE=.\config.hw
-
-!IF  "$(CFG)" == "pcre - Win32 Release"
-
-# Begin Custom Build
-InputPath=.\config.hw
-
-".\config.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	copy .\config.hw .\config.h >nul 
-	echo Created pcre config.h from config.hw 
-	
-# End Custom Build
-
-!ELSEIF  "$(CFG)" == "pcre - Win32 Debug"
-
-# Begin Custom Build
-InputPath=.\config.hw
-
-".\config.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	copy .\config.hw .\config.h >nul 
-	echo Created pcre config.h from config.hw 
-	
-# End Custom Build
-
-!ENDIF 
-
-# End Source File
-# Begin Source File
-
-SOURCE=.\internal.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\pcre.hw
-
-!IF  "$(CFG)" == "pcre - Win32 Release"
-
-# Begin Custom Build
-InputPath=.\pcre.hw
-
-".\pcre.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	copy .\pcre.hw .\pcre.h >nul 
-	echo Created pcre.h from pcre.hw 
-	
-# End Custom Build
-
-!ELSEIF  "$(CFG)" == "pcre - Win32 Debug"
-
-# Begin Custom Build
-InputPath=.\pcre.hw
-
-".\pcre.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	copy .\pcre.hw .\pcre.h >nul 
-	echo Created pcre.h from pcre.hw 
-	
-# End Custom Build
-
-!ENDIF 
-
-# End Source File
-# End Group
-# End Target
-# End Project
diff --git a/srclib/pcre/pcre.hw b/srclib/pcre/pcre.hw
deleted file mode 100644
index eb6d3bb..0000000
--- a/srclib/pcre/pcre.hw
+++ /dev/null
@@ -1,107 +0,0 @@
-/*************************************************
-*       Perl-Compatible Regular Expressions      *
-*************************************************/
-
-/* Copyright (c) 1997-2000 University of Cambridge */
-
-#ifndef _PCRE_H
-#define _PCRE_H
-
-/* The file pcre.h is build by "configure" or copied from pcre.hw
-Do not edit it; instead make changes to pcre.in and/or pcre.hw */
-
-#define PCRE_MAJOR 3
-#define PCRE_MINOR 2
-#define PCRE_DATE  12-May-2000
-
-/* Win32 uses DLL by default */
-
-#ifdef _WIN32
-# ifdef STATIC
-#  define PCRE_DL_IMPORT
-# else
-#  define PCRE_DL_IMPORT __declspec(dllimport)
-# endif
-#else
-# define PCRE_DL_IMPORT
-#endif
-
-/* Have to include stdlib.h in order to ensure that size_t is defined;
-it is needed here for malloc. */
-
-#include <stdlib.h>
-
-/* Allow for C++ users */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Options */
-
-#define PCRE_CASELESS        0x0001
-#define PCRE_MULTILINE       0x0002
-#define PCRE_DOTALL          0x0004
-#define PCRE_EXTENDED        0x0008
-#define PCRE_ANCHORED        0x0010
-#define PCRE_DOLLAR_ENDONLY  0x0020
-#define PCRE_EXTRA           0x0040
-#define PCRE_NOTBOL          0x0080
-#define PCRE_NOTEOL          0x0100
-#define PCRE_UNGREEDY        0x0200
-#define PCRE_NOTEMPTY        0x0400
-
-/* Exec-time and get-time error codes */
-
-#define PCRE_ERROR_NOMATCH        (-1)
-#define PCRE_ERROR_NULL           (-2)
-#define PCRE_ERROR_BADOPTION      (-3)
-#define PCRE_ERROR_BADMAGIC       (-4)
-#define PCRE_ERROR_UNKNOWN_NODE   (-5)
-#define PCRE_ERROR_NOMEMORY       (-6)
-#define PCRE_ERROR_NOSUBSTRING    (-7)
-
-/* Request types for pcre_fullinfo() */
-
-#define PCRE_INFO_OPTIONS         0
-#define PCRE_INFO_SIZE            1
-#define PCRE_INFO_CAPTURECOUNT    2
-#define PCRE_INFO_BACKREFMAX      3
-#define PCRE_INFO_FIRSTCHAR       4
-#define PCRE_INFO_FIRSTTABLE      5
-#define PCRE_INFO_LASTLITERAL     6
-
-/* Types */
-
-typedef void pcre;
-typedef void pcre_extra;
-
-/* Store get and free functions. These can be set to alternative malloc/free
-functions if required. Some magic is required for Win32 DLL; it is null on
-other OS. */
-
-PCRE_DL_IMPORT extern void *(*pcre_malloc)(size_t);
-PCRE_DL_IMPORT extern void  (*pcre_free)(void *);
-
-#undef PCRE_DL_IMPORT
-
-/* Functions */
-
-extern pcre *pcre_compile(const char *, int, const char **, int *,
-  const unsigned char *);
-extern int pcre_copy_substring(const char *, int *, int, int, char *, int);
-extern int pcre_exec(const pcre *, const pcre_extra *, const char *,
-  int, int, int, int *, int);
-extern int pcre_get_substring(const char *, int *, int, int, const char **);
-extern int pcre_get_substring_list(const char *, int *, int, const char ***);
-extern int pcre_info(const pcre *, int *, int *);
-extern int pcre_fullinfo(const pcre *, const pcre_extra *, int, void *);
-extern unsigned const char *pcre_maketables(void);
-extern pcre_extra *pcre_study(const pcre *, int, const char **);
-extern const char *pcre_version(void);
-
-#ifdef __cplusplus
-}  /* extern "C" */
-#endif
-
-#endif /* End of pcre.h */
diff --git a/srclib/pcre/pcre.in b/srclib/pcre/pcre.in
deleted file mode 100644
index 020dba7..0000000
--- a/srclib/pcre/pcre.in
+++ /dev/null
@@ -1,107 +0,0 @@
-/*************************************************
-*       Perl-Compatible Regular Expressions      *
-*************************************************/
-
-/* Copyright (c) 1997-2000 University of Cambridge */
-
-#ifndef _PCRE_H
-#define _PCRE_H
-
-/* The file pcre.h is build by "configure" or copied from pcre.hw
-Do not edit it; instead make changes to pcre.in and/or pcre.hw */
-
-#define PCRE_MAJOR @PCRE_MAJOR@
-#define PCRE_MINOR @PCRE_MINOR@
-#define PCRE_DATE  @PCRE_DATE@
-
-/* Win32 uses DLL by default */
-
-#ifdef _WIN32
-# ifdef STATIC
-#  define PCRE_DL_IMPORT
-# else
-#  define PCRE_DL_IMPORT __declspec(dllimport)
-# endif
-#else
-# define PCRE_DL_IMPORT
-#endif
-
-/* Have to include stdlib.h in order to ensure that size_t is defined;
-it is needed here for malloc. */
-
-#include <stdlib.h>
-
-/* Allow for C++ users */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Options */
-
-#define PCRE_CASELESS        0x0001
-#define PCRE_MULTILINE       0x0002
-#define PCRE_DOTALL          0x0004
-#define PCRE_EXTENDED        0x0008
-#define PCRE_ANCHORED        0x0010
-#define PCRE_DOLLAR_ENDONLY  0x0020
-#define PCRE_EXTRA           0x0040
-#define PCRE_NOTBOL          0x0080
-#define PCRE_NOTEOL          0x0100
-#define PCRE_UNGREEDY        0x0200
-#define PCRE_NOTEMPTY        0x0400
-
-/* Exec-time and get-time error codes */
-
-#define PCRE_ERROR_NOMATCH        (-1)
-#define PCRE_ERROR_NULL           (-2)
-#define PCRE_ERROR_BADOPTION      (-3)
-#define PCRE_ERROR_BADMAGIC       (-4)
-#define PCRE_ERROR_UNKNOWN_NODE   (-5)
-#define PCRE_ERROR_NOMEMORY       (-6)
-#define PCRE_ERROR_NOSUBSTRING    (-7)
-
-/* Request types for pcre_fullinfo() */
-
-#define PCRE_INFO_OPTIONS         0
-#define PCRE_INFO_SIZE            1
-#define PCRE_INFO_CAPTURECOUNT    2
-#define PCRE_INFO_BACKREFMAX      3
-#define PCRE_INFO_FIRSTCHAR       4
-#define PCRE_INFO_FIRSTTABLE      5
-#define PCRE_INFO_LASTLITERAL     6
-
-/* Types */
-
-typedef void pcre;
-typedef void pcre_extra;
-
-/* Store get and free functions. These can be set to alternative malloc/free
-functions if required. Some magic is required for Win32 DLL; it is null on
-other OS. */
-
-PCRE_DL_IMPORT extern void *(*pcre_malloc)(size_t);
-PCRE_DL_IMPORT extern void  (*pcre_free)(void *);
-
-#undef PCRE_DL_IMPORT
-
-/* Functions */
-
-extern pcre *pcre_compile(const char *, int, const char **, int *,
-  const unsigned char *);
-extern int pcre_copy_substring(const char *, int *, int, int, char *, int);
-extern int pcre_exec(const pcre *, const pcre_extra *, const char *,
-  int, int, int, int *, int);
-extern int pcre_get_substring(const char *, int *, int, int, const char **);
-extern int pcre_get_substring_list(const char *, int *, int, const char ***);
-extern int pcre_info(const pcre *, int *, int *);
-extern int pcre_fullinfo(const pcre *, const pcre_extra *, int, void *);
-extern unsigned const char *pcre_maketables(void);
-extern pcre_extra *pcre_study(const pcre *, int, const char **);
-extern const char *pcre_version(void);
-
-#ifdef __cplusplus
-}  /* extern "C" */
-#endif
-
-#endif /* End of pcre.h */
diff --git a/srclib/pcre/pcreposix.c b/srclib/pcre/pcreposix.c
deleted file mode 100644
index e48d93e..0000000
--- a/srclib/pcre/pcreposix.c
+++ /dev/null
@@ -1,281 +0,0 @@
-/*************************************************
-*      Perl-Compatible Regular Expressions       *
-*************************************************/
-
-/*
-This is a library of functions to support regular expressions whose syntax
-and semantics are as close as possible to those of the Perl 5 language. See
-the file Tech.Notes for some information on the internals.
-
-This module is a wrapper that provides a POSIX API to the underlying PCRE
-functions.
-
-Written by: Philip Hazel <ph10@cam.ac.uk>
-
-           Copyright (c) 1997-2000 University of Cambridge
-
------------------------------------------------------------------------------
-Permission is granted to anyone to use this software for any purpose on any
-computer system, and to redistribute it freely, subject to the following
-restrictions:
-
-1. This software is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-
-2. The origin of this software must not be misrepresented, either by
-   explicit claim or by omission.
-
-3. Altered versions must be plainly marked as such, and must not be
-   misrepresented as being the original software.
-
-4. If PCRE is embedded in any software that is released under the GNU
-   General Purpose Licence (GPL), then the terms of that licence shall
-   supersede any condition above with which it is incompatible.
------------------------------------------------------------------------------
-*/
-
-#include "internal.h"
-#include "pcreposix.h"
-#include "stdlib.h"
-
-
-
-/* Corresponding tables of PCRE error messages and POSIX error codes. */
-
-static const char *estring[] = {
-  ERR1,  ERR2,  ERR3,  ERR4,  ERR5,  ERR6,  ERR7,  ERR8,  ERR9,  ERR10,
-  ERR11, ERR12, ERR13, ERR14, ERR15, ERR16, ERR17, ERR18, ERR19, ERR20,
-  ERR21, ERR22, ERR23, ERR24, ERR25, ERR26, ERR27, ERR29, ERR29, ERR30,
-  ERR31 };
-
-static int eint[] = {
-  REG_EESCAPE, /* "\\ at end of pattern" */
-  REG_EESCAPE, /* "\\c at end of pattern" */
-  REG_EESCAPE, /* "unrecognized character follows \\" */
-  REG_BADBR,   /* "numbers out of order in {} quantifier" */
-  REG_BADBR,   /* "number too big in {} quantifier" */
-  REG_EBRACK,  /* "missing terminating ] for character class" */
-  REG_ECTYPE,  /* "invalid escape sequence in character class" */
-  REG_ERANGE,  /* "range out of order in character class" */
-  REG_BADRPT,  /* "nothing to repeat" */
-  REG_BADRPT,  /* "operand of unlimited repeat could match the empty string" */
-  REG_ASSERT,  /* "internal error: unexpected repeat" */
-  REG_BADPAT,  /* "unrecognized character after (?" */
-  REG_ESIZE,   /* "too many capturing parenthesized sub-patterns" */
-  REG_EPAREN,  /* "missing )" */
-  REG_ESUBREG, /* "back reference to non-existent subpattern" */
-  REG_INVARG,  /* "erroffset passed as NULL" */
-  REG_INVARG,  /* "unknown option bit(s) set" */
-  REG_EPAREN,  /* "missing ) after comment" */
-  REG_ESIZE,   /* "too many sets of parentheses" */
-  REG_ESIZE,   /* "regular expression too large" */
-  REG_ESPACE,  /* "failed to get memory" */
-  REG_EPAREN,  /* "unmatched brackets" */
-  REG_ASSERT,  /* "internal error: code overflow" */
-  REG_BADPAT,  /* "unrecognized character after (?<" */
-  REG_BADPAT,  /* "lookbehind assertion is not fixed length" */
-  REG_BADPAT,  /* "malformed number after (?(" */
-  REG_BADPAT,  /* "conditional group containe more than two branches" */
-  REG_BADPAT,  /* "assertion expected after (?(" */
-  REG_BADPAT,  /* "(?p must be followed by )" */
-  REG_ECTYPE,  /* "unknown POSIX class name" */
-  REG_BADPAT   /* "POSIX collating elements are not supported" */
-};
-
-/* Table of texts corresponding to POSIX error codes */
-
-static const char *pstring[] = {
-  "",                                /* Dummy for value 0 */
-  "internal error",                  /* REG_ASSERT */
-  "invalid repeat counts in {}",     /* BADBR      */
-  "pattern error",                   /* BADPAT     */
-  "? * + invalid",                   /* BADRPT     */
-  "unbalanced {}",                   /* EBRACE     */
-  "unbalanced []",                   /* EBRACK     */
-  "collation error - not relevant",  /* ECOLLATE   */
-  "bad class",                       /* ECTYPE     */
-  "bad escape sequence",             /* EESCAPE    */
-  "empty expression",                /* EMPTY      */
-  "unbalanced ()",                   /* EPAREN     */
-  "bad range inside []",             /* ERANGE     */
-  "expression too big",              /* ESIZE      */
-  "failed to get memory",            /* ESPACE     */
-  "bad back reference",              /* ESUBREG    */
-  "bad argument",                    /* INVARG     */
-  "match failed"                     /* NOMATCH    */
-};
-
-
-
-
-/*************************************************
-*          Translate PCRE text code to int       *
-*************************************************/
-
-/* PCRE compile-time errors are given as strings defined as macros. We can just
-look them up in a table to turn them into POSIX-style error codes. */
-
-static int
-pcre_posix_error_code(const char *s)
-{
-size_t i;
-for (i = 0; i < sizeof(estring)/sizeof(char *); i++)
-  if (strcmp(s, estring[i]) == 0) return eint[i];
-return REG_ASSERT;
-}
-
-
-
-/*************************************************
-*          Translate error code to string        *
-*************************************************/
-
-size_t
-regerror(int errcode, const regex_t *preg, char *errbuf, size_t errbuf_size)
-{
-const char *message, *addmessage;
-size_t length, addlength;
-
-message = (errcode >= (int)(sizeof(pstring)/sizeof(char *)))?
-  "unknown error code" : pstring[errcode];
-length = strlen(message) + 1;
-
-addmessage = " at offset ";
-addlength = (preg != NULL && (int)preg->re_erroffset != -1)?
-  strlen(addmessage) + 6 : 0;
-
-if (errbuf_size > 0)
-  {
-  if (addlength > 0 && errbuf_size >= length + addlength)
-    sprintf(errbuf, "%s%s%-6d", message, addmessage, (int)preg->re_erroffset);
-  else
-    {
-    strncpy(errbuf, message, errbuf_size - 1);
-    errbuf[errbuf_size-1] = 0;
-    }
-  }
-
-return length + addlength;
-}
-
-
-
-
-/*************************************************
-*           Free store held by a regex           *
-*************************************************/
-
-void
-regfree(regex_t *preg)
-{
-(pcre_free)(preg->re_pcre);
-}
-
-
-
-
-/*************************************************
-*            Compile a regular expression        *
-*************************************************/
-
-/*
-Arguments:
-  preg        points to a structure for recording the compiled expression
-  pattern     the pattern to compile
-  cflags      compilation flags
-
-Returns:      0 on success
-              various non-zero codes on failure
-*/
-
-int
-regcomp(regex_t *preg, const char *pattern, int cflags)
-{
-const char *errorptr;
-int erroffset;
-int options = 0;
-
-if ((cflags & REG_ICASE) != 0) options |= PCRE_CASELESS;
-if ((cflags & REG_NEWLINE) != 0) options |= PCRE_MULTILINE;
-
-preg->re_pcre = pcre_compile(pattern, options, &errorptr, &erroffset, NULL);
-preg->re_erroffset = erroffset;
-
-if (preg->re_pcre == NULL) return pcre_posix_error_code(errorptr);
-
-preg->re_nsub = pcre_info(preg->re_pcre, NULL, NULL);
-return 0;
-}
-
-
-
-
-/*************************************************
-*              Match a regular expression        *
-*************************************************/
-
-/* Unfortunately, PCRE requires 3 ints of working space for each captured
-substring, so we have to get and release working store instead of just using
-the POSIX structures as was done in earlier releases when PCRE needed only 2
-ints. */
-
-int
-regexec(regex_t *preg, const char *string, size_t nmatch,
-  regmatch_t pmatch[], int eflags)
-{
-int rc;
-int options = 0;
-int *ovector = NULL;
-
-if ((eflags & REG_NOTBOL) != 0) options |= PCRE_NOTBOL;
-if ((eflags & REG_NOTEOL) != 0) options |= PCRE_NOTEOL;
-
-#if 0
-/* This causes a memory segfault after locking the const, thread-shared *preg 
- * generated at compile time, and is entirely unnecessary.
- */
-preg->re_erroffset = (size_t)(-1);   /* Only has meaning after compile */
-#endif
-
-if (nmatch > 0)
-  {
-  ovector = (int *)malloc(sizeof(int) * nmatch * 3);
-  if (ovector == NULL) return REG_ESPACE;
-  }
-
-rc = pcre_exec(preg->re_pcre, NULL, string, (int)strlen(string), 0, options,
-  ovector, nmatch * 3);
-
-if (rc == 0) rc = nmatch;    /* All captured slots were filled in */
-
-if (rc >= 0)
-  {
-  size_t i;
-  for (i = 0; i < (size_t) rc; i++)
-    {
-    pmatch[i].rm_so = ovector[i*2];
-    pmatch[i].rm_eo = ovector[i*2+1];
-    }
-  if (ovector != NULL) free(ovector);
-  for (; i < nmatch; i++) pmatch[i].rm_so = pmatch[i].rm_eo = -1;
-  return 0;
-  }
-
-else
-  {
-  if (ovector != NULL) free(ovector);
-  switch(rc)
-    {
-    case PCRE_ERROR_NOMATCH: return REG_NOMATCH;
-    case PCRE_ERROR_NULL: return REG_INVARG;
-    case PCRE_ERROR_BADOPTION: return REG_INVARG;
-    case PCRE_ERROR_BADMAGIC: return REG_INVARG;
-    case PCRE_ERROR_UNKNOWN_NODE: return REG_ASSERT;
-    case PCRE_ERROR_NOMEMORY: return REG_ESPACE;
-    default: return REG_ASSERT;
-    }
-  }
-}
-
-/* End of pcreposix.c */
diff --git a/srclib/pcre/pcreposix.dsp b/srclib/pcre/pcreposix.dsp
deleted file mode 100644
index f8e193a..0000000
--- a/srclib/pcre/pcreposix.dsp
+++ /dev/null
@@ -1,158 +0,0 @@
-# Microsoft Developer Studio Project File - Name="pcreposix" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Static Library" 0x0104
-
-CFG=pcreposix - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "pcreposix.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "pcreposix.mak" CFG="pcreposix - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "pcreposix - Win32 Release" (based on "Win32 (x86) Static Library")
-!MESSAGE "pcreposix - Win32 Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "pcreposix - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "LibR"
-# PROP Intermediate_Dir "LibR"
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "_WIN32" /D "NDEBUG" /D "_WINDOWS" /D "STATIC" /Fd"LibR/pcreposix" /FD /c
-# ADD CPP /nologo /MD /W3 /O2 /D "_WIN32" /D "NDEBUG" /D "_WINDOWS" /D "STATIC" /Fd"LibR/pcreposix" /FD /c
-# ADD BASE RSC /l 0x409
-# ADD RSC /l 0x409
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ELSEIF  "$(CFG)" == "pcreposix - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "LibD"
-# PROP Intermediate_Dir "LibD"
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "_WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STATIC" /Fd"LibD/pcreposix" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /D "_WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STATIC" /Fd"LibD/pcreposix" /FD /c
-# ADD BASE RSC /l 0x409
-# ADD RSC /l 0x409
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ENDIF 
-
-# Begin Target
-
-# Name "pcreposix - Win32 Release"
-# Name "pcreposix - Win32 Debug"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "*.c"
-# Begin Source File
-
-SOURCE=.\pcreposix.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "*.h"
-# Begin Source File
-
-SOURCE=.\config.hw
-
-!IF  "$(CFG)" == "pcreposix - Win32 Release"
-
-# Begin Custom Build
-InputPath=.\config.hw
-
-".\config.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	copy .\config.hw .\config.h >nul 
-	echo Created pcre config.h from config.hw 
-	
-# End Custom Build
-
-!ELSEIF  "$(CFG)" == "pcreposix - Win32 Debug"
-
-# Begin Custom Build
-InputPath=.\config.hw
-
-".\config.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	copy .\config.hw .\config.h >nul 
-	echo Created pcre config.h from config.hw 
-	
-# End Custom Build
-
-!ENDIF 
-
-# End Source File
-# Begin Source File
-
-SOURCE=.\pcre.hw
-
-!IF  "$(CFG)" == "pcreposix - Win32 Release"
-
-# Begin Custom Build
-InputPath=.\pcre.hw
-
-".\pcre.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	copy .\pcre.hw .\pcre.h >nul 
-	echo Created pcre.h from pcre.hw 
-	
-# End Custom Build
-
-!ELSEIF  "$(CFG)" == "pcreposix - Win32 Debug"
-
-# Begin Custom Build
-InputPath=.\pcre.hw
-
-".\pcre.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	copy .\pcre.hw .\pcre.h >nul 
-	echo Created pcre.h from pcre.hw 
-	
-# End Custom Build
-
-!ENDIF 
-
-# End Source File
-# Begin Source File
-
-SOURCE=.\pcreposix.h
-# End Source File
-# End Group
-# End Target
-# End Project
diff --git a/srclib/pcre/pcreposix.h b/srclib/pcre/pcreposix.h
deleted file mode 100644
index 7660acb..0000000
--- a/srclib/pcre/pcreposix.h
+++ /dev/null
@@ -1,88 +0,0 @@
-/*************************************************
-*       Perl-Compatible Regular Expressions      *
-*************************************************/
-
-/* Copyright (c) 1997-2000 University of Cambridge */
-
-#ifndef _PCREPOSIX_H
-#define _PCREPOSIX_H
-
-/* This is the header for the POSIX wrapper interface to the PCRE Perl-
-Compatible Regular Expression library. It defines the things POSIX says should
-be there. I hope. */
-
-/* Have to include stdlib.h in order to ensure that size_t is defined. */
-
-#include <stdlib.h>
-
-/* Allow for C++ users */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Options defined by POSIX. */
-
-#define REG_ICASE     0x01
-#define REG_NEWLINE   0x02
-#define REG_NOTBOL    0x04
-#define REG_NOTEOL    0x08
-
-/* These are not used by PCRE, but by defining them we make it easier
-to slot PCRE into existing programs that make POSIX calls. */
-
-#define REG_EXTENDED  0
-#define REG_NOSUB     0
-
-/* Error values. Not all these are relevant or used by the wrapper. */
-
-enum {
-  REG_ASSERT = 1,  /* internal error ? */
-  REG_BADBR,       /* invalid repeat counts in {} */
-  REG_BADPAT,      /* pattern error */
-  REG_BADRPT,      /* ? * + invalid */
-  REG_EBRACE,      /* unbalanced {} */
-  REG_EBRACK,      /* unbalanced [] */
-  REG_ECOLLATE,    /* collation error - not relevant */
-  REG_ECTYPE,      /* bad class */
-  REG_EESCAPE,     /* bad escape sequence */
-  REG_EMPTY,       /* empty expression */
-  REG_EPAREN,      /* unbalanced () */
-  REG_ERANGE,      /* bad range inside [] */
-  REG_ESIZE,       /* expression too big */
-  REG_ESPACE,      /* failed to get memory */
-  REG_ESUBREG,     /* bad back reference */
-  REG_INVARG,      /* bad argument */
-  REG_NOMATCH      /* match failed */
-};
-
-
-/* The structure representing a compiled regular expression. */
-
-typedef struct {
-  void *re_pcre;
-  size_t re_nsub;
-  size_t re_erroffset;
-} regex_t;
-
-/* The structure in which a captured offset is returned. */
-
-typedef int regoff_t;
-
-typedef struct {
-  regoff_t rm_so;
-  regoff_t rm_eo;
-} regmatch_t;
-
-/* The functions */
-
-extern int regcomp(regex_t *, const char *, int);
-extern int regexec(regex_t *, const char *, size_t, regmatch_t *, int);
-extern size_t regerror(int, const regex_t *, char *, size_t);
-extern void regfree(regex_t *);
-
-#ifdef __cplusplus
-}   /* extern "C" */
-#endif
-
-#endif /* End of pcreposix.h */
diff --git a/srclib/pcre/pcretest.c b/srclib/pcre/pcretest.c
deleted file mode 100644
index bbe9bdd..0000000
--- a/srclib/pcre/pcretest.c
+++ /dev/null
@@ -1,1072 +0,0 @@
-/*************************************************
-*             PCRE testing program               *
-*************************************************/
-
-#include <ctype.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <time.h>
-#include <locale.h>
-
-/* Use the internal info for displaying the results of pcre_study(). */
-
-#include "internal.h"
-
-/* It is possible to compile this test program without including support for
-testing the POSIX interface, though this is not available via the standard
-Makefile. */
-
-#if !defined NOPOSIX
-#include "pcreposix.h"
-#endif
-
-#ifndef CLOCKS_PER_SEC
-#ifdef CLK_TCK
-#define CLOCKS_PER_SEC CLK_TCK
-#else
-#define CLOCKS_PER_SEC 100
-#endif
-#endif
-
-#define LOOPREPEAT 20000
-
-
-static FILE *outfile;
-static int log_store = 0;
-static size_t gotten_store;
-
-
-
-/* Debugging function to print the internal form of the regex. This is the same
-code as contained in pcre.c under the DEBUG macro. */
-
-static const char *OP_names[] = {
-  "End", "\\A", "\\B", "\\b", "\\D", "\\d",
-  "\\S", "\\s", "\\W", "\\w", "\\Z", "\\z",
-  "Opt", "^", "$", "Any", "chars", "not",
-  "*", "*?", "+", "+?", "?", "??", "{", "{", "{",
-  "*", "*?", "+", "+?", "?", "??", "{", "{", "{",
-  "*", "*?", "+", "+?", "?", "??", "{", "{", "{",
-  "*", "*?", "+", "+?", "?", "??", "{", "{",
-  "class", "Ref", "Recurse",
-  "Alt", "Ket", "KetRmax", "KetRmin", "Assert", "Assert not",
-  "AssertB", "AssertB not", "Reverse", "Once", "Cond", "Cref",
-  "Brazero", "Braminzero", "Bra"
-};
-
-
-static void print_internals(pcre *re)
-{
-unsigned char *code = ((real_pcre *)re)->code;
-
-fprintf(outfile, "------------------------------------------------------------------\n");
-
-for(;;)
-  {
-  int c;
-  int charlength;
-
-  fprintf(outfile, "%3d ", (int)(code - ((real_pcre *)re)->code));
-
-  if (*code >= OP_BRA)
-    {
-    fprintf(outfile, "%3d Bra %d", (code[1] << 8) + code[2], *code - OP_BRA);
-    code += 2;
-    }
-
-  else switch(*code)
-    {
-    case OP_END:
-    fprintf(outfile, "    %s\n", OP_names[*code]);
-    fprintf(outfile, "------------------------------------------------------------------\n");
-    return;
-
-    case OP_OPT:
-    fprintf(outfile, " %.2x %s", code[1], OP_names[*code]);
-    code++;
-    break;
-
-    case OP_COND:
-    fprintf(outfile, "%3d Cond", (code[1] << 8) + code[2]);
-    code += 2;
-    break;
-
-    case OP_CREF:
-    fprintf(outfile, " %.2d %s", code[1], OP_names[*code]);
-    code++;
-    break;
-
-    case OP_CHARS:
-    charlength = *(++code);
-    fprintf(outfile, "%3d ", charlength);
-    while (charlength-- > 0)
-      if (isprint(c = *(++code))) fprintf(outfile, "%c", c);
-        else fprintf(outfile, "\\x%02x", c);
-    break;
-
-    case OP_KETRMAX:
-    case OP_KETRMIN:
-    case OP_ALT:
-    case OP_KET:
-    case OP_ASSERT:
-    case OP_ASSERT_NOT:
-    case OP_ASSERTBACK:
-    case OP_ASSERTBACK_NOT:
-    case OP_ONCE:
-    fprintf(outfile, "%3d %s", (code[1] << 8) + code[2], OP_names[*code]);
-    code += 2;
-    break;
-
-    case OP_REVERSE:
-    fprintf(outfile, "%3d %s", (code[1] << 8) + code[2], OP_names[*code]);
-    code += 2;
-    break;
-
-    case OP_STAR:
-    case OP_MINSTAR:
-    case OP_PLUS:
-    case OP_MINPLUS:
-    case OP_QUERY:
-    case OP_MINQUERY:
-    case OP_TYPESTAR:
-    case OP_TYPEMINSTAR:
-    case OP_TYPEPLUS:
-    case OP_TYPEMINPLUS:
-    case OP_TYPEQUERY:
-    case OP_TYPEMINQUERY:
-    if (*code >= OP_TYPESTAR)
-      fprintf(outfile, "    %s", OP_names[code[1]]);
-    else if (isprint(c = code[1])) fprintf(outfile, "    %c", c);
-      else fprintf(outfile, "    \\x%02x", c);
-    fprintf(outfile, "%s", OP_names[*code++]);
-    break;
-
-    case OP_EXACT:
-    case OP_UPTO:
-    case OP_MINUPTO:
-    if (isprint(c = code[3])) fprintf(outfile, "    %c{", c);
-      else fprintf(outfile, "    \\x%02x{", c);
-    if (*code != OP_EXACT) fprintf(outfile, ",");
-    fprintf(outfile, "%d}", (code[1] << 8) + code[2]);
-    if (*code == OP_MINUPTO) fprintf(outfile, "?");
-    code += 3;
-    break;
-
-    case OP_TYPEEXACT:
-    case OP_TYPEUPTO:
-    case OP_TYPEMINUPTO:
-    fprintf(outfile, "    %s{", OP_names[code[3]]);
-    if (*code != OP_TYPEEXACT) fprintf(outfile, "0,");
-    fprintf(outfile, "%d}", (code[1] << 8) + code[2]);
-    if (*code == OP_TYPEMINUPTO) fprintf(outfile, "?");
-    code += 3;
-    break;
-
-    case OP_NOT:
-    if (isprint(c = *(++code))) fprintf(outfile, "    [^%c]", c);
-      else fprintf(outfile, "    [^\\x%02x]", c);
-    break;
-
-    case OP_NOTSTAR:
-    case OP_NOTMINSTAR:
-    case OP_NOTPLUS:
-    case OP_NOTMINPLUS:
-    case OP_NOTQUERY:
-    case OP_NOTMINQUERY:
-    if (isprint(c = code[1])) fprintf(outfile, "    [^%c]", c);
-      else fprintf(outfile, "    [^\\x%02x]", c);
-    fprintf(outfile, "%s", OP_names[*code++]);
-    break;
-
-    case OP_NOTEXACT:
-    case OP_NOTUPTO:
-    case OP_NOTMINUPTO:
-    if (isprint(c = code[3])) fprintf(outfile, "    [^%c]{", c);
-      else fprintf(outfile, "    [^\\x%02x]{", c);
-    if (*code != OP_NOTEXACT) fprintf(outfile, ",");
-    fprintf(outfile, "%d}", (code[1] << 8) + code[2]);
-    if (*code == OP_NOTMINUPTO) fprintf(outfile, "?");
-    code += 3;
-    break;
-
-    case OP_REF:
-    fprintf(outfile, "    \\%d", *(++code));
-    code++;
-    goto CLASS_REF_REPEAT;
-
-    case OP_CLASS:
-      {
-      int i, min, max;
-      code++;
-      fprintf(outfile, "    [");
-
-      for (i = 0; i < 256; i++)
-        {
-        if ((code[i/8] & (1 << (i&7))) != 0)
-          {
-          int j;
-          for (j = i+1; j < 256; j++)
-            if ((code[j/8] & (1 << (j&7))) == 0) break;
-          if (i == '-' || i == ']') fprintf(outfile, "\\");
-          if (isprint(i)) fprintf(outfile, "%c", i); else fprintf(outfile, "\\x%02x", i);
-          if (--j > i)
-            {
-            fprintf(outfile, "-");
-            if (j == '-' || j == ']') fprintf(outfile, "\\");
-            if (isprint(j)) fprintf(outfile, "%c", j); else fprintf(outfile, "\\x%02x", j);
-            }
-          i = j;
-          }
-        }
-      fprintf(outfile, "]");
-      code += 32;
-
-      CLASS_REF_REPEAT:
-
-      switch(*code)
-        {
-        case OP_CRSTAR:
-        case OP_CRMINSTAR:
-        case OP_CRPLUS:
-        case OP_CRMINPLUS:
-        case OP_CRQUERY:
-        case OP_CRMINQUERY:
-        fprintf(outfile, "%s", OP_names[*code]);
-        break;
-
-        case OP_CRRANGE:
-        case OP_CRMINRANGE:
-        min = (code[1] << 8) + code[2];
-        max = (code[3] << 8) + code[4];
-        if (max == 0) fprintf(outfile, "{%d,}", min);
-        else fprintf(outfile, "{%d,%d}", min, max);
-        if (*code == OP_CRMINRANGE) fprintf(outfile, "?");
-        code += 4;
-        break;
-
-        default:
-        code--;
-        }
-      }
-    break;
-
-    /* Anything else is just a one-node item */
-
-    default:
-    fprintf(outfile, "    %s", OP_names[*code]);
-    break;
-    }
-
-  code++;
-  fprintf(outfile, "\n");
-  }
-}
-
-
-
-/* Character string printing function. */
-
-static void pchars(unsigned char *p, int length)
-{
-int c;
-while (length-- > 0)
-  if (isprint(c = *(p++))) fprintf(outfile, "%c", c);
-    else fprintf(outfile, "\\x%02x", c);
-}
-
-
-
-/* Alternative malloc function, to test functionality and show the size of the
-compiled re. */
-
-static void *new_malloc(size_t size)
-{
-gotten_store = size;
-if (log_store)
-  fprintf(outfile, "Memory allocation (code space): %d\n",
-    (int)((int)size - offsetof(real_pcre, code[0])));
-return malloc(size);
-}
-
-
-
-
-/* Get one piece of information from the pcre_fullinfo() function */
-
-static void new_info(pcre *re, pcre_extra *study, int option, void *ptr)
-{
-int rc;
-if ((rc = pcre_fullinfo(re, study, option, ptr)) < 0)
-  fprintf(outfile, "Error %d from pcre_fullinfo(%d)\n", rc, option);
-}
-
-
-
-
-/* Read lines from named file or stdin and write to named file or stdout; lines
-consist of a regular expression, in delimiters and optionally followed by
-options, followed by a set of test data, terminated by an empty line. */
-
-int main(int argc, char **argv)
-{
-FILE *infile = stdin;
-int options = 0;
-int study_options = 0;
-int op = 1;
-int timeit = 0;
-int showinfo = 0;
-int showstore = 0;
-int posix = 0;
-int debug = 0;
-int done = 0;
-unsigned char buffer[30000];
-unsigned char dbuffer[1024];
-
-/* Static so that new_malloc can use it. */
-
-outfile = stdout;
-
-/* Scan options */
-
-while (argc > 1 && argv[op][0] == '-')
-  {
-  if (strcmp(argv[op], "-s") == 0 || strcmp(argv[op], "-m") == 0)
-    showstore = 1;
-  else if (strcmp(argv[op], "-t") == 0) timeit = 1;
-  else if (strcmp(argv[op], "-i") == 0) showinfo = 1;
-  else if (strcmp(argv[op], "-d") == 0) showinfo = debug = 1;
-  else if (strcmp(argv[op], "-p") == 0) posix = 1;
-  else
-    {
-    printf("*** Unknown option %s\n", argv[op]);
-    printf("Usage: pcretest [-d] [-i] [-p] [-s] [-t] [<input> [<output>]]\n");
-    printf("  -d   debug: show compiled code; implies -i\n"
-           "  -i   show information about compiled pattern\n"
-           "  -p   use POSIX interface\n"
-           "  -s   output store information\n"
-           "  -t   time compilation and execution\n");
-    return 1;
-    }
-  op++;
-  argc--;
-  }
-
-/* Sort out the input and output files */
-
-if (argc > 1)
-  {
-  infile = fopen(argv[op], "r");
-  if (infile == NULL)
-    {
-    printf("** Failed to open %s\n", argv[op]);
-    return 1;
-    }
-  }
-
-if (argc > 2)
-  {
-  outfile = fopen(argv[op+1], "w");
-  if (outfile == NULL)
-    {
-    printf("** Failed to open %s\n", argv[op+1]);
-    return 1;
-    }
-  }
-
-/* Set alternative malloc function */
-
-pcre_malloc = new_malloc;
-
-/* Heading line, then prompt for first regex if stdin */
-
-fprintf(outfile, "PCRE version %s\n\n", pcre_version());
-
-/* Main loop */
-
-while (!done)
-  {
-  pcre *re = NULL;
-  pcre_extra *extra = NULL;
-
-#if !defined NOPOSIX  /* There are still compilers that require no indent */
-  regex_t preg;
-  int do_posix = 0;
-#endif
-
-  const char *error;
-  unsigned char *p, *pp, *ppp;
-  unsigned const char *tables = NULL;
-  int do_study = 0;
-  int do_debug = debug;
-  int do_G = 0;
-  int do_g = 0;
-  int do_showinfo = showinfo;
-  int do_showrest = 0;
-  int erroroffset, len, delimiter;
-
-  if (infile == stdin) printf("  re> ");
-  if (fgets((char *)buffer, sizeof(buffer), infile) == NULL) break;
-  if (infile != stdin) fprintf(outfile, "%s", (char *)buffer);
-
-  p = buffer;
-  while (isspace(*p)) p++;
-  if (*p == 0) continue;
-
-  /* Get the delimiter and seek the end of the pattern; if is isn't
-  complete, read more. */
-
-  delimiter = *p++;
-
-  if (isalnum(delimiter) || delimiter == '\\')
-    {
-    fprintf(outfile, "** Delimiter must not be alphameric or \\\n");
-    goto SKIP_DATA;
-    }
-
-  pp = p;
-
-  for(;;)
-    {
-    while (*pp != 0)
-      {
-      if (*pp == '\\' && pp[1] != 0) pp++;
-        else if (*pp == delimiter) break;
-      pp++;
-      }
-    if (*pp != 0) break;
-
-    len = sizeof(buffer) - (pp - buffer);
-    if (len < 256)
-      {
-      fprintf(outfile, "** Expression too long - missing delimiter?\n");
-      goto SKIP_DATA;
-      }
-
-    if (infile == stdin) printf("    > ");
-    if (fgets((char *)pp, len, infile) == NULL)
-      {
-      fprintf(outfile, "** Unexpected EOF\n");
-      done = 1;
-      goto CONTINUE;
-      }
-    if (infile != stdin) fprintf(outfile, "%s", (char *)pp);
-    }
-
-  /* If the first character after the delimiter is backslash, make
-  the pattern end with backslash. This is purely to provide a way
-  of testing for the error message when a pattern ends with backslash. */
-
-  if (pp[1] == '\\') *pp++ = '\\';
-
-  /* Terminate the pattern at the delimiter */
-
-  *pp++ = 0;
-
-  /* Look for options after final delimiter */
-
-  options = 0;
-  study_options = 0;
-  log_store = showstore;  /* default from command line */
-
-  while (*pp != 0)
-    {
-    switch (*pp++)
-      {
-      case 'g': do_g = 1; break;
-      case 'i': options |= PCRE_CASELESS; break;
-      case 'm': options |= PCRE_MULTILINE; break;
-      case 's': options |= PCRE_DOTALL; break;
-      case 'x': options |= PCRE_EXTENDED; break;
-
-      case '+': do_showrest = 1; break;
-      case 'A': options |= PCRE_ANCHORED; break;
-      case 'D': do_debug = do_showinfo = 1; break;
-      case 'E': options |= PCRE_DOLLAR_ENDONLY; break;
-      case 'G': do_G = 1; break;
-      case 'I': do_showinfo = 1; break;
-      case 'M': log_store = 1; break;
-
-#if !defined NOPOSIX
-      case 'P': do_posix = 1; break;
-#endif
-
-      case 'S': do_study = 1; break;
-      case 'U': options |= PCRE_UNGREEDY; break;
-      case 'X': options |= PCRE_EXTRA; break;
-
-      case 'L':
-      ppp = pp;
-      while (*ppp != '\n' && *ppp != ' ') ppp++;
-      *ppp = 0;
-      if (setlocale(LC_CTYPE, (const char *)pp) == NULL)
-        {
-        fprintf(outfile, "** Failed to set locale \"%s\"\n", pp);
-        goto SKIP_DATA;
-        }
-      tables = pcre_maketables();
-      pp = ppp;
-      break;
-
-      case '\n': case ' ': break;
-      default:
-      fprintf(outfile, "** Unknown option '%c'\n", pp[-1]);
-      goto SKIP_DATA;
-      }
-    }
-
-  /* Handle compiling via the POSIX interface, which doesn't support the
-  timing, showing, or debugging options, nor the ability to pass over
-  local character tables. */
-
-#if !defined NOPOSIX
-  if (posix || do_posix)
-    {
-    int rc;
-    int cflags = 0;
-    if ((options & PCRE_CASELESS) != 0) cflags |= REG_ICASE;
-    if ((options & PCRE_MULTILINE) != 0) cflags |= REG_NEWLINE;
-    rc = regcomp(&preg, (char *)p, cflags);
-
-    /* Compilation failed; go back for another re, skipping to blank line
-    if non-interactive. */
-
-    if (rc != 0)
-      {
-      (void)regerror(rc, &preg, (char *)buffer, sizeof(buffer));
-      fprintf(outfile, "Failed: POSIX code %d: %s\n", rc, buffer);
-      goto SKIP_DATA;
-      }
-    }
-
-  /* Handle compiling via the native interface */
-
-  else
-#endif  /* !defined NOPOSIX */
-
-    {
-    if (timeit)
-      {
-      register int i;
-      clock_t time_taken;
-      clock_t start_time = clock();
-      for (i = 0; i < LOOPREPEAT; i++)
-        {
-        re = pcre_compile((char *)p, options, &error, &erroroffset, tables);
-        if (re != NULL) free(re);
-        }
-      time_taken = clock() - start_time;
-      fprintf(outfile, "Compile time %.3f milliseconds\n",
-        ((double)time_taken * 1000.0) /
-        ((double)LOOPREPEAT * (double)CLOCKS_PER_SEC));
-      }
-
-    re = pcre_compile((char *)p, options, &error, &erroroffset, tables);
-
-    /* Compilation failed; go back for another re, skipping to blank line
-    if non-interactive. */
-
-    if (re == NULL)
-      {
-      fprintf(outfile, "Failed: %s at offset %d\n", error, erroroffset);
-      SKIP_DATA:
-      if (infile != stdin)
-        {
-        for (;;)
-          {
-          if (fgets((char *)buffer, sizeof(buffer), infile) == NULL)
-            {
-            done = 1;
-            goto CONTINUE;
-            }
-          len = (int)strlen((char *)buffer);
-          while (len > 0 && isspace(buffer[len-1])) len--;
-          if (len == 0) break;
-          }
-        fprintf(outfile, "\n");
-        }
-      goto CONTINUE;
-      }
-
-    /* Compilation succeeded; print data if required. There are now two
-    info-returning functions. The old one has a limited interface and
-    returns only limited data. Check that it agrees with the newer one. */
-
-    if (do_showinfo)
-      {
-      int old_first_char, old_options, old_count;
-      int count, backrefmax, first_char, need_char;
-      size_t size;
-
-      if (do_debug) print_internals(re);
-
-      new_info(re, NULL, PCRE_INFO_OPTIONS, &options);
-      new_info(re, NULL, PCRE_INFO_SIZE, &size);
-      new_info(re, NULL, PCRE_INFO_CAPTURECOUNT, &count);
-      new_info(re, NULL, PCRE_INFO_BACKREFMAX, &backrefmax);
-      new_info(re, NULL, PCRE_INFO_FIRSTCHAR, &first_char);
-      new_info(re, NULL, PCRE_INFO_LASTLITERAL, &need_char);
-
-      old_count = pcre_info(re, &old_options, &old_first_char);
-      if (count < 0) fprintf(outfile,
-        "Error %d from pcre_info()\n", count);
-      else
-        {
-        if (old_count != count) fprintf(outfile,
-          "Count disagreement: pcre_fullinfo=%d pcre_info=%d\n", count,
-            old_count);
-
-        if (old_first_char != first_char) fprintf(outfile,
-          "First char disagreement: pcre_fullinfo=%d pcre_info=%d\n",
-            first_char, old_first_char);
-
-        if (old_options != options) fprintf(outfile,
-          "Options disagreement: pcre_fullinfo=%d pcre_info=%d\n", options,
-            old_options);
-        }
-
-      if (size != gotten_store) fprintf(outfile,
-        "Size disagreement: pcre_fullinfo=%d call to malloc for %d\n",
-        size, gotten_store);
-
-      fprintf(outfile, "Capturing subpattern count = %d\n", count);
-      if (backrefmax > 0)
-        fprintf(outfile, "Max back reference = %d\n", backrefmax);
-      if (options == 0) fprintf(outfile, "No options\n");
-        else fprintf(outfile, "Options:%s%s%s%s%s%s%s%s\n",
-          ((options & PCRE_ANCHORED) != 0)? " anchored" : "",
-          ((options & PCRE_CASELESS) != 0)? " caseless" : "",
-          ((options & PCRE_EXTENDED) != 0)? " extended" : "",
-          ((options & PCRE_MULTILINE) != 0)? " multiline" : "",
-          ((options & PCRE_DOTALL) != 0)? " dotall" : "",
-          ((options & PCRE_DOLLAR_ENDONLY) != 0)? " dollar_endonly" : "",
-          ((options & PCRE_EXTRA) != 0)? " extra" : "",
-          ((options & PCRE_UNGREEDY) != 0)? " ungreedy" : "");
-
-      if (((((real_pcre *)re)->options) & PCRE_ICHANGED) != 0)
-        fprintf(outfile, "Case state changes\n");
-
-      if (first_char == -1)
-        {
-        fprintf(outfile, "First char at start or follows \\n\n");
-        }
-      else if (first_char < 0)
-        {
-        fprintf(outfile, "No first char\n");
-        }
-      else
-        {
-        if (isprint(first_char))
-          fprintf(outfile, "First char = \'%c\'\n", first_char);
-        else
-          fprintf(outfile, "First char = %d\n", first_char);
-        }
-
-      if (need_char < 0)
-        {
-        fprintf(outfile, "No need char\n");
-        }
-      else
-        {
-        if (isprint(need_char))
-          fprintf(outfile, "Need char = \'%c\'\n", need_char);
-        else
-          fprintf(outfile, "Need char = %d\n", need_char);
-        }
-      }
-
-    /* If /S was present, study the regexp to generate additional info to
-    help with the matching. */
-
-    if (do_study)
-      {
-      if (timeit)
-        {
-        register int i;
-        clock_t time_taken;
-        clock_t start_time = clock();
-        for (i = 0; i < LOOPREPEAT; i++)
-          extra = pcre_study(re, study_options, &error);
-        time_taken = clock() - start_time;
-        if (extra != NULL) free(extra);
-        fprintf(outfile, "  Study time %.3f milliseconds\n",
-          ((double)time_taken * 1000.0)/
-          ((double)LOOPREPEAT * (double)CLOCKS_PER_SEC));
-        }
-
-      extra = pcre_study(re, study_options, &error);
-      if (error != NULL)
-        fprintf(outfile, "Failed to study: %s\n", error);
-      else if (extra == NULL)
-        fprintf(outfile, "Study returned NULL\n");
-
-      else if (do_showinfo)
-        {
-        uschar *start_bits = NULL;
-        new_info(re, extra, PCRE_INFO_FIRSTTABLE, &start_bits);
-        if (start_bits == NULL)
-          fprintf(outfile, "No starting character set\n");
-        else
-          {
-          int i;
-          int c = 24;
-          fprintf(outfile, "Starting character set: ");
-          for (i = 0; i < 256; i++)
-            {
-            if ((start_bits[i/8] & (1<<(i%8))) != 0)
-              {
-              if (c > 75)
-                {
-                fprintf(outfile, "\n  ");
-                c = 2;
-                }
-              if (isprint(i) && i != ' ')
-                {
-                fprintf(outfile, "%c ", i);
-                c += 2;
-                }
-              else
-                {
-                fprintf(outfile, "\\x%02x ", i);
-                c += 5;
-                }
-              }
-            }
-          fprintf(outfile, "\n");
-          }
-        }
-      }
-    }
-
-  /* Read data lines and test them */
-
-  for (;;)
-    {
-    unsigned char *q;
-    unsigned char *bptr = dbuffer;
-    int count, c;
-    int copystrings = 0;
-    int getstrings = 0;
-    int getlist = 0;
-    int gmatched = 0;
-    int start_offset = 0;
-    int g_notempty = 0;
-    int offsets[45];
-    int size_offsets = sizeof(offsets)/sizeof(int);
-
-    options = 0;
-
-    if (infile == stdin) printf("data> ");
-    if (fgets((char *)buffer, sizeof(buffer), infile) == NULL)
-      {
-      done = 1;
-      goto CONTINUE;
-      }
-    if (infile != stdin) fprintf(outfile, "%s", (char *)buffer);
-
-    len = (int)strlen((char *)buffer);
-    while (len > 0 && isspace(buffer[len-1])) len--;
-    buffer[len] = 0;
-    if (len == 0) break;
-
-    p = buffer;
-    while (isspace(*p)) p++;
-
-    q = dbuffer;
-    while ((c = *p++) != 0)
-      {
-      int i = 0;
-      int n = 0;
-      if (c == '\\') switch ((c = *p++))
-        {
-        case 'a': c =    7; break;
-        case 'b': c = '\b'; break;
-        case 'e': c =   27; break;
-        case 'f': c = '\f'; break;
-        case 'n': c = '\n'; break;
-        case 'r': c = '\r'; break;
-        case 't': c = '\t'; break;
-        case 'v': c = '\v'; break;
-
-        case '0': case '1': case '2': case '3':
-        case '4': case '5': case '6': case '7':
-        c -= '0';
-        while (i++ < 2 && isdigit(*p) && *p != '8' && *p != '9')
-          c = c * 8 + *p++ - '0';
-        break;
-
-        case 'x':
-        c = 0;
-        while (i++ < 2 && isxdigit(*p))
-          {
-          c = c * 16 + tolower(*p) - ((isdigit(*p))? '0' : 'W');
-          p++;
-          }
-        break;
-
-        case 0:   /* Allows for an empty line */
-        p--;
-        continue;
-
-        case 'A':  /* Option setting */
-        options |= PCRE_ANCHORED;
-        continue;
-
-        case 'B':
-        options |= PCRE_NOTBOL;
-        continue;
-
-        case 'C':
-        while(isdigit(*p)) n = n * 10 + *p++ - '0';
-        copystrings |= 1 << n;
-        continue;
-
-        case 'G':
-        while(isdigit(*p)) n = n * 10 + *p++ - '0';
-        getstrings |= 1 << n;
-        continue;
-
-        case 'L':
-        getlist = 1;
-        continue;
-
-        case 'N':
-        options |= PCRE_NOTEMPTY;
-        continue;
-
-        case 'O':
-        while(isdigit(*p)) n = n * 10 + *p++ - '0';
-        if (n <= (int)(sizeof(offsets)/sizeof(int))) size_offsets = n;
-        continue;
-
-        case 'Z':
-        options |= PCRE_NOTEOL;
-        continue;
-        }
-      *q++ = c;
-      }
-    *q = 0;
-    len = q - dbuffer;
-
-    /* Handle matching via the POSIX interface, which does not
-    support timing. */
-
-#if !defined NOPOSIX
-    if (posix || do_posix)
-      {
-      int rc;
-      int eflags = 0;
-      regmatch_t pmatch[sizeof(offsets)/sizeof(int)];
-      if ((options & PCRE_NOTBOL) != 0) eflags |= REG_NOTBOL;
-      if ((options & PCRE_NOTEOL) != 0) eflags |= REG_NOTEOL;
-
-      rc = regexec(&preg, (const char *)bptr, size_offsets, pmatch, eflags);
-
-      if (rc != 0)
-        {
-        (void)regerror(rc, &preg, (char *)buffer, sizeof(buffer));
-        fprintf(outfile, "No match: POSIX code %d: %s\n", rc, buffer);
-        }
-      else
-        {
-        size_t i;
-        for (i = 0; i < size_offsets; i++)
-          {
-          if (pmatch[i].rm_so >= 0)
-            {
-            fprintf(outfile, "%2d: ", (int)i);
-            pchars(dbuffer + pmatch[i].rm_so,
-              pmatch[i].rm_eo - pmatch[i].rm_so);
-            fprintf(outfile, "\n");
-            if (i == 0 && do_showrest)
-              {
-              fprintf(outfile, " 0+ ");
-              pchars(dbuffer + pmatch[i].rm_eo, len - pmatch[i].rm_eo);
-              fprintf(outfile, "\n");
-              }
-            }
-          }
-        }
-      }
-
-    /* Handle matching via the native interface - repeats for /g and /G */
-
-    else
-#endif  /* !defined NOPOSIX */
-
-    for (;; gmatched++)    /* Loop for /g or /G */
-      {
-      if (timeit)
-        {
-        register int i;
-        clock_t time_taken;
-        clock_t start_time = clock();
-        for (i = 0; i < LOOPREPEAT; i++)
-          count = pcre_exec(re, extra, (char *)bptr, len,
-            start_offset, options | g_notempty, offsets, size_offsets);
-        time_taken = clock() - start_time;
-        fprintf(outfile, "Execute time %.3f milliseconds\n",
-          ((double)time_taken * 1000.0)/
-          ((double)LOOPREPEAT * (double)CLOCKS_PER_SEC));
-        }
-
-      count = pcre_exec(re, extra, (char *)bptr, len,
-        start_offset, options | g_notempty, offsets, size_offsets);
-
-      if (count == 0)
-        {
-        fprintf(outfile, "Matched, but too many substrings\n");
-        count = size_offsets/3;
-        }
-
-      /* Matched */
-
-      if (count >= 0)
-        {
-        int i;
-        for (i = 0; i < count * 2; i += 2)
-          {
-          if (offsets[i] < 0)
-            fprintf(outfile, "%2d: <unset>\n", i/2);
-          else
-            {
-            fprintf(outfile, "%2d: ", i/2);
-            pchars(bptr + offsets[i], offsets[i+1] - offsets[i]);
-            fprintf(outfile, "\n");
-            if (i == 0)
-              {
-              if (do_showrest)
-                {
-                fprintf(outfile, " 0+ ");
-                pchars(bptr + offsets[i+1], len - offsets[i+1]);
-                fprintf(outfile, "\n");
-                }
-              }
-            }
-          }
-
-        for (i = 0; i < 32; i++)
-          {
-          if ((copystrings & (1 << i)) != 0)
-            {
-            char copybuffer[16];
-            int rc = pcre_copy_substring((char *)bptr, offsets, count,
-              i, copybuffer, sizeof(copybuffer));
-            if (rc < 0)
-              fprintf(outfile, "copy substring %d failed %d\n", i, rc);
-            else
-              fprintf(outfile, "%2dC %s (%d)\n", i, copybuffer, rc);
-            }
-          }
-
-        for (i = 0; i < 32; i++)
-          {
-          if ((getstrings & (1 << i)) != 0)
-            {
-            const char *substring;
-            int rc = pcre_get_substring((char *)bptr, offsets, count,
-              i, &substring);
-            if (rc < 0)
-              fprintf(outfile, "get substring %d failed %d\n", i, rc);
-            else
-              {
-              fprintf(outfile, "%2dG %s (%d)\n", i, substring, rc);
-              free((void *)substring);
-              }
-            }
-          }
-
-        if (getlist)
-          {
-          const char **stringlist;
-          int rc = pcre_get_substring_list((char *)bptr, offsets, count,
-            &stringlist);
-          if (rc < 0)
-            fprintf(outfile, "get substring list failed %d\n", rc);
-          else
-            {
-            for (i = 0; i < count; i++)
-              fprintf(outfile, "%2dL %s\n", i, stringlist[i]);
-            if (stringlist[i] != NULL)
-              fprintf(outfile, "string list not terminated by NULL\n");
-            free((void *)stringlist);
-            }
-          }
-        }
-
-      /* Failed to match. If this is a /g or /G loop and we previously set
-      g_notempty after a null match, this is not necessarily the end.
-      We want to advance the start offset, and continue. Fudge the offset
-      values to achieve this. We won't be at the end of the string - that
-      was checked before setting g_notempty. */
-
-      else
-        {
-        if (g_notempty != 0)
-          {
-          offsets[0] = start_offset;
-          offsets[1] = start_offset + 1;
-          }
-        else
-          {
-          if (gmatched == 0)   /* Error if no previous matches */
-            {
-            if (count == -1) fprintf(outfile, "No match\n");
-              else fprintf(outfile, "Error %d\n", count);
-            }
-          break;  /* Out of the /g loop */
-          }
-        }
-
-      /* If not /g or /G we are done */
-
-      if (!do_g && !do_G) break;
-
-      /* If we have matched an empty string, first check to see if we are at
-      the end of the subject. If so, the /g loop is over. Otherwise, mimic
-      what Perl's /g options does. This turns out to be rather cunning. First
-      we set PCRE_NOTEMPTY and PCRE_ANCHORED and try the match again at the
-      same point. If this fails (picked up above) we advance to the next
-      character. */
-
-      g_notempty = 0;
-      if (offsets[0] == offsets[1])
-        {
-        if (offsets[0] == len) break;
-        g_notempty = PCRE_NOTEMPTY | PCRE_ANCHORED;
-        }
-
-      /* For /g, update the start offset, leaving the rest alone */
-
-      if (do_g) start_offset = offsets[1];
-
-      /* For /G, update the pointer and length */
-
-      else
-        {
-        bptr += offsets[1];
-        len -= offsets[1];
-        }
-      }  /* End of loop for /g and /G */
-    }    /* End of loop for data lines */
-
-  CONTINUE:
-
-#if !defined NOPOSIX
-  if (posix || do_posix) regfree(&preg);
-#endif
-
-  if (re != NULL) free(re);
-  if (extra != NULL) free(extra);
-  if (tables != NULL)
-    {
-    free((void *)tables);
-    setlocale(LC_CTYPE, "C");
-    }
-  }
-
-fprintf(outfile, "\n");
-return 0;
-}
-
-/* End */
diff --git a/srclib/pcre/perltest b/srclib/pcre/perltest
deleted file mode 100755
index 1e96c79..0000000
--- a/srclib/pcre/perltest
+++ /dev/null
@@ -1,169 +0,0 @@
-#! /usr/bin/perl
-
-# Program for testing regular expressions with perl to check that PCRE handles
-# them the same.
-
-
-# Function for turning a string into a string of printing chars
-
-sub pchars {
-my($t) = "";
-
-foreach $c (split(//, @_[0]))
-  {
-  if (ord $c >= 32 && ord $c < 127) { $t .= $c; }
-    else { $t .= sprintf("\\x%02x", ord $c); }
-  }
-$t;
-}
-
-
-
-# Read lines from named file or stdin and write to named file or stdout; lines
-# consist of a regular expression, in delimiters and optionally followed by
-# options, followed by a set of test data, terminated by an empty line.
-
-# Sort out the input and output files
-
-if (@ARGV > 0)
-  {
-  open(INFILE, "<$ARGV[0]") || die "Failed to open $ARGV[0]\n";
-  $infile = "INFILE";
-  }
-else { $infile = "STDIN"; }
-
-if (@ARGV > 1)
-  {
-  open(OUTFILE, ">$ARGV[1]") || die "Failed to open $ARGV[1]\n";
-  $outfile = "OUTFILE";
-  }
-else { $outfile = "STDOUT"; }
-
-printf($outfile "Perl $] Regular Expressions\n\n");
-
-# Main loop
-
-NEXT_RE:
-for (;;)
-  {
-  printf "  re> " if $infile eq "STDIN";
-  last if ! ($_ = <$infile>);
-  printf $outfile "$_" if $infile ne "STDIN";
-  next if ($_ eq "");
-
-  $pattern = $_;
-
-  while ($pattern !~ /^\s*(.).*\1/s)
-    {
-    printf "    > " if $infile eq "STDIN";
-    last if ! ($_ = <$infile>);
-    printf $outfile "$_" if $infile ne "STDIN";
-    $pattern .= $_;
-    }
-
-   chomp($pattern);
-   $pattern =~ s/\s+$//;
-
-  # The private /+ modifier means "print $' afterwards". We use it
-  # only on the end of patterns to make it easy to chop off here.
-
-  $showrest = ($pattern =~ s/\+(?=[a-z]*$)//);
-
-  # Check that the pattern is valid
-
-  eval "\$_ =~ ${pattern}";
-  if ($@)
-    {
-    printf $outfile "Error: $@";
-    next NEXT_RE;
-    }
-
-  # If the /g modifier is present, we want to put a loop round the matching;
-  # otherwise just a single "if".
-
-  $cmd = ($pattern =~ /g[a-z]*$/)? "while" : "if";
-
-  # If the pattern is actually the null string, Perl uses the most recently
-  # executed (and successfully compiled) regex is used instead. This is a
-  # nasty trap for the unwary! The PCRE test suite does contain null strings
-  # in places - if they are allowed through here all sorts of weird and
-  # unexpected effects happen. To avoid this, we replace such patterns with
-  # a non-null pattern that has the same effect.
-
-  $pattern = "/(?#)/$2" if ($pattern =~ /^(.)\1(.*)$/);
-
-  # Read data lines and test them
-
-  for (;;)
-    {
-    printf "data> " if $infile eq "STDIN";
-    last NEXT_RE if ! ($_ = <$infile>);
-    chomp;
-    printf $outfile "$_\n" if $infile ne "STDIN";
-
-    s/\s+$//;
-    s/^\s+//;
-
-    last if ($_ eq "");
-
-    $x = eval "\"$_\"";   # To get escapes processed
-
-    # Empty array for holding results, then do the matching.
-
-    @subs = ();
-
-    eval "${cmd} (\$x =~ ${pattern}) {" .
-         "push \@subs,\$&;" .
-         "push \@subs,\$1;" .
-         "push \@subs,\$2;" .
-         "push \@subs,\$3;" .
-         "push \@subs,\$4;" .
-         "push \@subs,\$5;" .
-         "push \@subs,\$6;" .
-         "push \@subs,\$7;" .
-         "push \@subs,\$8;" .
-         "push \@subs,\$9;" .
-         "push \@subs,\$10;" .
-         "push \@subs,\$11;" .
-         "push \@subs,\$12;" .
-         "push \@subs,\$13;" .
-         "push \@subs,\$14;" .
-         "push \@subs,\$15;" .
-         "push \@subs,\$16;" .
-         "push \@subs,\$'; }";
-
-    if ($@)
-      {
-      printf $outfile "Error: $@\n";
-      next NEXT_RE;
-      }
-    elsif (scalar(@subs) == 0)
-      {
-      printf $outfile "No match\n";
-      }
-    else
-      {
-      while (scalar(@subs) != 0)
-        {
-        printf $outfile (" 0: %s\n", &pchars($subs[0]));
-        printf $outfile (" 0+ %s\n", &pchars($subs[17])) if $showrest;
-        $last_printed = 0;
-        for ($i = 1; $i <= 16; $i++)
-          {
-          if (defined $subs[$i])
-            {
-            while ($last_printed++ < $i-1)
-              { printf $outfile ("%2d: <unset>\n", $last_printed); }
-            printf $outfile ("%2d: %s\n", $i, &pchars($subs[$i]));
-            $last_printed = $i;
-            }
-          }
-        splice(@subs, 0, 18);
-        }
-      }
-    }
-  }
-
-printf $outfile "\n";
-
-# End
diff --git a/srclib/pcre/pgrep.c b/srclib/pcre/pgrep.c
deleted file mode 100644
index ad1b87e..0000000
--- a/srclib/pcre/pgrep.c
+++ /dev/null
@@ -1,225 +0,0 @@
-/*************************************************
-*               PCRE grep program                *
-*************************************************/
-
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <errno.h>
-#include "config.h"
-#include "pcre.h"
-
-#define FALSE 0
-#define TRUE 1
-
-typedef int BOOL;
-
-
-
-/*************************************************
-*               Global variables                 *
-*************************************************/
-
-static pcre *pattern;
-static pcre_extra *hints;
-
-static BOOL count_only = FALSE;
-static BOOL filenames_only = FALSE;
-static BOOL invert = FALSE;
-static BOOL number = FALSE;
-static BOOL silent = FALSE;
-static BOOL whole_lines = FALSE;
-
-
-
-#if ! HAVE_STRERROR
-/*************************************************
-*     Provide strerror() for non-ANSI libraries  *
-*************************************************/
-
-/* Some old-fashioned systems still around (e.g. SunOS4) don't have strerror()
-in their libraries, but can provide the same facility by this simple
-alternative function. */
-
-extern int   sys_nerr;
-extern char *sys_errlist[];
-
-char *
-strerror(int n)
-{
-if (n < 0 || n >= sys_nerr) return "unknown error number";
-return sys_errlist[n];
-}
-#endif /* HAVE_STRERROR */
-
-
-
-/*************************************************
-*              Grep an individual file           *
-*************************************************/
-
-static int
-pgrep(FILE *in, char *name)
-{
-int rc = 1;
-int linenumber = 0;
-int count = 0;
-int offsets[99];
-char buffer[BUFSIZ];
-
-while (fgets(buffer, sizeof(buffer), in) != NULL)
-  {
-  BOOL match;
-  int length = (int)strlen(buffer);
-  if (length > 0 && buffer[length-1] == '\n') buffer[--length] = 0;
-  linenumber++;
-
-  match = pcre_exec(pattern, hints, buffer, length, 0, 0, offsets, 99) >= 0;
-  if (match && whole_lines && offsets[1] != length) match = FALSE;
-
-  if (match != invert)
-    {
-    if (count_only) count++;
-
-    else if (filenames_only)
-      {
-      fprintf(stdout, "%s\n", (name == NULL)? "<stdin>" : name);
-      return 0;
-      }
-
-    else if (silent) return 0;
-
-    else
-      {
-      if (name != NULL) fprintf(stdout, "%s:", name);
-      if (number) fprintf(stdout, "%d:", linenumber);
-      fprintf(stdout, "%s\n", buffer);
-      }
-
-    rc = 0;
-    }
-  }
-
-if (count_only)
-  {
-  if (name != NULL) fprintf(stdout, "%s:", name);
-  fprintf(stdout, "%d\n", count);
-  }
-
-return rc;
-}
-
-
-
-
-/*************************************************
-*                Usage function                  *
-*************************************************/
-
-static int
-usage(int rc)
-{
-fprintf(stderr, "Usage: pgrep [-Vchilnsvx] pattern [file] ...\n");
-return rc;
-}
-
-
-
-
-/*************************************************
-*                Main program                    *
-*************************************************/
-
-int
-main(int argc, char **argv)
-{
-int i;
-int rc = 1;
-int options = 0;
-int errptr;
-const char *error;
-BOOL filenames = TRUE;
-
-/* Process the options */
-
-for (i = 1; i < argc; i++)
-  {
-  char *s;
-  if (argv[i][0] != '-') break;
-  s = argv[i] + 1;
-  while (*s != 0)
-    {
-    switch (*s++)
-      {
-      case 'c': count_only = TRUE; break;
-      case 'h': filenames = FALSE; break;
-      case 'i': options |= PCRE_CASELESS; break;
-      case 'l': filenames_only = TRUE;
-      case 'n': number = TRUE; break;
-      case 's': silent = TRUE; break;
-      case 'v': invert = TRUE; break;
-      case 'x': whole_lines = TRUE; options |= PCRE_ANCHORED; break;
-
-      case 'V':
-      fprintf(stderr, "PCRE version %s\n", pcre_version());
-      break;
-
-      default:
-      fprintf(stderr, "pgrep: unknown option %c\n", s[-1]);
-      return usage(2);
-      }
-    }
-  }
-
-/* There must be at least a regexp argument */
-
-if (i >= argc) return usage(0);
-
-/* Compile the regular expression. */
-
-pattern = pcre_compile(argv[i++], options, &error, &errptr, NULL);
-if (pattern == NULL)
-  {
-  fprintf(stderr, "pgrep: error in regex at offset %d: %s\n", errptr, error);
-  return 2;
-  }
-
-/* Study the regular expression, as we will be running it may times */
-
-hints = pcre_study(pattern, 0, &error);
-if (error != NULL)
-  {
-  fprintf(stderr, "pgrep: error while studing regex: %s\n", error);
-  return 2;
-  }
-
-/* If there are no further arguments, do the business on stdin and exit */
-
-if (i >= argc) return pgrep(stdin, NULL);
-
-/* Otherwise, work through the remaining arguments as files. If there is only
-one, don't give its name on the output. */
-
-if (i == argc - 1) filenames = FALSE;
-if (filenames_only) filenames = TRUE;
-
-for (; i < argc; i++)
-  {
-  FILE *in = fopen(argv[i], "r");
-  if (in == NULL)
-    {
-    fprintf(stderr, "%s: failed to open: %s\n", argv[i], strerror(errno));
-    rc = 2;
-    }
-  else
-    {
-    int frc = pgrep(in, filenames? argv[i] : NULL);
-    if (frc == 0 && rc == 1) rc = 0;
-    fclose(in);
-    }
-  }
-
-return rc;
-}
-
-/* End */
diff --git a/srclib/pcre/study.c b/srclib/pcre/study.c
deleted file mode 100644
index 676db94..0000000
--- a/srclib/pcre/study.c
+++ /dev/null
@@ -1,397 +0,0 @@
-/*************************************************
-*      Perl-Compatible Regular Expressions       *
-*************************************************/
-
-/*
-This is a library of functions to support regular expressions whose syntax
-and semantics are as close as possible to those of the Perl 5 language. See
-the file Tech.Notes for some information on the internals.
-
-Written by: Philip Hazel <ph10@cam.ac.uk>
-
-           Copyright (c) 1997-2000 University of Cambridge
-
------------------------------------------------------------------------------
-Permission is granted to anyone to use this software for any purpose on any
-computer system, and to redistribute it freely, subject to the following
-restrictions:
-
-1. This software is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-
-2. The origin of this software must not be misrepresented, either by
-   explicit claim or by omission.
-
-3. Altered versions must be plainly marked as such, and must not be
-   misrepresented as being the original software.
-
-4. If PCRE is embedded in any software that is released under the GNU
-   General Purpose Licence (GPL), then the terms of that licence shall
-   supersede any condition above with which it is incompatible.
------------------------------------------------------------------------------
-*/
-
-
-/* Include the internals header, which itself includes Standard C headers plus
-the external pcre header. */
-
-#include "internal.h"
-
-
-
-/*************************************************
-*      Set a bit and maybe its alternate case    *
-*************************************************/
-
-/* Given a character, set its bit in the table, and also the bit for the other
-version of a letter if we are caseless.
-
-Arguments:
-  start_bits    points to the bit map
-  c             is the character
-  caseless      the caseless flag
-  cd            the block with char table pointers
-
-Returns:        nothing
-*/
-
-static void
-set_bit(uschar *start_bits, int c, BOOL caseless, compile_data *cd)
-{
-start_bits[c/8] |= (1 << (c&7));
-if (caseless && (cd->ctypes[c] & ctype_letter) != 0)
-  start_bits[cd->fcc[c]/8] |= (1 << (cd->fcc[c]&7));
-}
-
-
-
-/*************************************************
-*          Create bitmap of starting chars       *
-*************************************************/
-
-/* This function scans a compiled unanchored expression and attempts to build a
-bitmap of the set of initial characters. If it can't, it returns FALSE. As time
-goes by, we may be able to get more clever at doing this.
-
-Arguments:
-  code         points to an expression
-  start_bits   points to a 32-byte table, initialized to 0
-  caseless     the current state of the caseless flag
-  cd           the block with char table pointers
-
-Returns:       TRUE if table built, FALSE otherwise
-*/
-
-static BOOL
-set_start_bits(const uschar *code, uschar *start_bits, BOOL caseless,
-  compile_data *cd)
-{
-register int c;
-
-/* This next statement and the later reference to dummy are here in order to
-trick the optimizer of the IBM C compiler for OS/2 into generating correct
-code. Apparently IBM isn't going to fix the problem, and we would rather not
-disable optimization (in this module it actually makes a big difference, and
-the pcre module can use all the optimization it can get). */
-
-volatile int dummy;
-
-do
-  {
-  const uschar *tcode = code + 3;
-  BOOL try_next = TRUE;
-
-  while (try_next)
-    {
-    try_next = FALSE;
-
-    /* If a branch starts with a bracket or a positive lookahead assertion,
-    recurse to set bits from within them. That's all for this branch. */
-
-    if ((int)*tcode >= OP_BRA || *tcode == OP_ASSERT)
-      {
-      if (!set_start_bits(tcode, start_bits, caseless, cd))
-        return FALSE;
-      }
-
-    else switch(*tcode)
-      {
-      default:
-      return FALSE;
-
-      /* Skip over lookbehind and negative lookahead assertions */
-
-      case OP_ASSERT_NOT:
-      case OP_ASSERTBACK:
-      case OP_ASSERTBACK_NOT:
-      try_next = TRUE;
-      do tcode += (tcode[1] << 8) + tcode[2]; while (*tcode == OP_ALT);
-      tcode += 3;
-      break;
-
-      /* Skip over an option setting, changing the caseless flag */
-
-      case OP_OPT:
-      caseless = (tcode[1] & PCRE_CASELESS) != 0;
-      tcode += 2;
-      try_next = TRUE;
-      break;
-
-      /* BRAZERO does the bracket, but carries on. */
-
-      case OP_BRAZERO:
-      case OP_BRAMINZERO:
-      if (!set_start_bits(++tcode, start_bits, caseless, cd))
-        return FALSE;
-      dummy = 1;
-      do tcode += (tcode[1] << 8) + tcode[2]; while (*tcode == OP_ALT);
-      tcode += 3;
-      try_next = TRUE;
-      break;
-
-      /* Single-char * or ? sets the bit and tries the next item */
-
-      case OP_STAR:
-      case OP_MINSTAR:
-      case OP_QUERY:
-      case OP_MINQUERY:
-      set_bit(start_bits, tcode[1], caseless, cd);
-      tcode += 2;
-      try_next = TRUE;
-      break;
-
-      /* Single-char upto sets the bit and tries the next */
-
-      case OP_UPTO:
-      case OP_MINUPTO:
-      set_bit(start_bits, tcode[3], caseless, cd);
-      tcode += 4;
-      try_next = TRUE;
-      break;
-
-      /* At least one single char sets the bit and stops */
-
-      case OP_EXACT:       /* Fall through */
-      tcode++;
-
-      case OP_CHARS:       /* Fall through */
-      tcode++;
-
-      case OP_PLUS:
-      case OP_MINPLUS:
-      set_bit(start_bits, tcode[1], caseless, cd);
-      break;
-
-      /* Single character type sets the bits and stops */
-
-      case OP_NOT_DIGIT:
-      for (c = 0; c < 32; c++)
-        start_bits[c] |= ~cd->cbits[c+cbit_digit];
-      break;
-
-      case OP_DIGIT:
-      for (c = 0; c < 32; c++)
-        start_bits[c] |= cd->cbits[c+cbit_digit];
-      break;
-
-      case OP_NOT_WHITESPACE:
-      for (c = 0; c < 32; c++)
-        start_bits[c] |= ~cd->cbits[c+cbit_space];
-      break;
-
-      case OP_WHITESPACE:
-      for (c = 0; c < 32; c++)
-        start_bits[c] |= cd->cbits[c+cbit_space];
-      break;
-
-      case OP_NOT_WORDCHAR:
-      for (c = 0; c < 32; c++)
-        start_bits[c] |= ~cd->cbits[c+cbit_word];
-      break;
-
-      case OP_WORDCHAR:
-      for (c = 0; c < 32; c++)
-        start_bits[c] |= cd->cbits[c+cbit_word];
-      break;
-
-      /* One or more character type fudges the pointer and restarts, knowing
-      it will hit a single character type and stop there. */
-
-      case OP_TYPEPLUS:
-      case OP_TYPEMINPLUS:
-      tcode++;
-      try_next = TRUE;
-      break;
-
-      case OP_TYPEEXACT:
-      tcode += 3;
-      try_next = TRUE;
-      break;
-
-      /* Zero or more repeats of character types set the bits and then
-      try again. */
-
-      case OP_TYPEUPTO:
-      case OP_TYPEMINUPTO:
-      tcode += 2;               /* Fall through */
-
-      case OP_TYPESTAR:
-      case OP_TYPEMINSTAR:
-      case OP_TYPEQUERY:
-      case OP_TYPEMINQUERY:
-      switch(tcode[1])
-        {
-        case OP_NOT_DIGIT:
-        for (c = 0; c < 32; c++)
-          start_bits[c] |= ~cd->cbits[c+cbit_digit];
-        break;
-
-        case OP_DIGIT:
-        for (c = 0; c < 32; c++)
-          start_bits[c] |= cd->cbits[c+cbit_digit];
-        break;
-
-        case OP_NOT_WHITESPACE:
-        for (c = 0; c < 32; c++)
-          start_bits[c] |= ~cd->cbits[c+cbit_space];
-        break;
-
-        case OP_WHITESPACE:
-        for (c = 0; c < 32; c++)
-          start_bits[c] |= cd->cbits[c+cbit_space];
-        break;
-
-        case OP_NOT_WORDCHAR:
-        for (c = 0; c < 32; c++)
-          start_bits[c] |= ~cd->cbits[c+cbit_word];
-        break;
-
-        case OP_WORDCHAR:
-        for (c = 0; c < 32; c++)
-          start_bits[c] |= cd->cbits[c+cbit_word];
-        break;
-        }
-
-      tcode += 2;
-      try_next = TRUE;
-      break;
-
-      /* Character class: set the bits and either carry on or not,
-      according to the repeat count. */
-
-      case OP_CLASS:
-        {
-        tcode++;
-        for (c = 0; c < 32; c++) start_bits[c] |= tcode[c];
-        tcode += 32;
-        switch (*tcode)
-          {
-          case OP_CRSTAR:
-          case OP_CRMINSTAR:
-          case OP_CRQUERY:
-          case OP_CRMINQUERY:
-          tcode++;
-          try_next = TRUE;
-          break;
-
-          case OP_CRRANGE:
-          case OP_CRMINRANGE:
-          if (((tcode[1] << 8) + tcode[2]) == 0)
-            {
-            tcode += 5;
-            try_next = TRUE;
-            }
-          break;
-          }
-        }
-      break; /* End of class handling */
-
-      }      /* End of switch */
-    }        /* End of try_next loop */
-
-  code += (code[1] << 8) + code[2];   /* Advance to next branch */
-  }
-while (*code == OP_ALT);
-return TRUE;
-}
-
-
-
-/*************************************************
-*          Study a compiled expression           *
-*************************************************/
-
-/* This function is handed a compiled expression that it must study to produce
-information that will speed up the matching. It returns a pcre_extra block
-which then gets handed back to pcre_exec().
-
-Arguments:
-  re        points to the compiled expression
-  options   contains option bits
-  errorptr  points to where to place error messages;
-            set NULL unless error
-
-Returns:    pointer to a pcre_extra block,
-            NULL on error or if no optimization possible
-*/
-
-pcre_extra *
-pcre_study(const pcre *external_re, int options, const char **errorptr)
-{
-uschar start_bits[32];
-real_pcre_extra *extra;
-const real_pcre *re = (const real_pcre *)external_re;
-compile_data compile_block;
-
-*errorptr = NULL;
-
-if (re == NULL || re->magic_number != MAGIC_NUMBER)
-  {
-  *errorptr = "argument is not a compiled regular expression";
-  return NULL;
-  }
-
-if ((options & ~PUBLIC_STUDY_OPTIONS) != 0)
-  {
-  *errorptr = "unknown or incorrect option bit(s) set";
-  return NULL;
-  }
-
-/* For an anchored pattern, or an unchored pattern that has a first char, or a
-multiline pattern that matches only at "line starts", no further processing at
-present. */
-
-if ((re->options & (PCRE_ANCHORED|PCRE_FIRSTSET|PCRE_STARTLINE)) != 0)
-  return NULL;
-
-/* Set the character tables in the block which is passed around */
-
-compile_block.lcc = re->tables + lcc_offset;
-compile_block.fcc = re->tables + fcc_offset;
-compile_block.cbits = re->tables + cbits_offset;
-compile_block.ctypes = re->tables + ctypes_offset;
-
-/* See if we can find a fixed set of initial characters for the pattern. */
-
-memset(start_bits, 0, 32 * sizeof(uschar));
-if (!set_start_bits(re->code, start_bits, (re->options & PCRE_CASELESS) != 0,
-  &compile_block)) return NULL;
-
-/* Get an "extra" block and put the information therein. */
-
-extra = (real_pcre_extra *)(pcre_malloc)(sizeof(real_pcre_extra));
-
-if (extra == NULL)
-  {
-  *errorptr = "failed to get memory";
-  return NULL;
-  }
-
-extra->options = PCRE_STUDY_MAPPED;
-memcpy(extra->start_bits, start_bits, sizeof(start_bits));
-
-return (pcre_extra *)extra;
-}
-
-/* End of study.c */
diff --git a/srclib/pcre/testdata/testinput1 b/srclib/pcre/testdata/testinput1
deleted file mode 100644
index d72a2c5..0000000
--- a/srclib/pcre/testdata/testinput1
+++ /dev/null
Binary files differ
diff --git a/srclib/pcre/testdata/testinput2 b/srclib/pcre/testdata/testinput2
deleted file mode 100644
index 1d9504c..0000000
--- a/srclib/pcre/testdata/testinput2
+++ /dev/null
@@ -1,710 +0,0 @@
-/(a)b|/
-
-/abc/
-    abc
-    defabc
-    \Aabc
-    *** Failers
-    \Adefabc
-    ABC
-
-/^abc/
-    abc
-    \Aabc
-    *** Failers
-    defabc
-    \Adefabc
-
-/a+bc/
-
-/a*bc/
-
-/a{3}bc/
-
-/(abc|a+z)/
-
-/^abc$/
-    abc
-    *** Failers
-    def\nabc
-
-/ab\gdef/X
-
-/(?X)ab\gdef/X
-
-/x{5,4}/
-
-/z{65536}/
-
-/[abcd/
-
-/[\B]/
-
-/[a-\w]/
-
-/[z-a]/
-
-/^*/
-
-/(abc/
-
-/(?# abc/
-
-/(?z)abc/
-
-/.*b/
-
-/.*?b/
-
-/cat|dog|elephant/
-    this sentence eventually mentions a cat
-    this sentences rambles on and on for a while and then reaches elephant
-
-/cat|dog|elephant/S
-    this sentence eventually mentions a cat
-    this sentences rambles on and on for a while and then reaches elephant
-
-/cat|dog|elephant/iS
-    this sentence eventually mentions a CAT cat
-    this sentences rambles on and on for a while to elephant ElePhant
-
-/a|[bcd]/S
-
-/(a|[^\dZ])/S
-
-/(a|b)*[\s]/S
-
-/(ab\2)/
-
-/{4,5}abc/
-
-/(a)(b)(c)\2/
-    abcb
-    \O0abcb
-    \O3abcb
-    \O6abcb
-    \O9abcb
-    \O12abcb 
-
-/(a)bc|(a)(b)\2/
-    abc
-    \O0abc
-    \O3abc
-    \O6abc
-    aba
-    \O0aba
-    \O3aba
-    \O6aba
-    \O9aba
-    \O12aba
-
-/abc$/E
-    abc
-    *** Failers
-    abc\n
-    abc\ndef
-
-/(a)(b)(c)(d)(e)\6/
-
-/the quick brown fox/
-    the quick brown fox
-    this is a line with the quick brown fox
-
-/the quick brown fox/A
-    the quick brown fox
-    *** Failers
-    this is a line with the quick brown fox
-
-/ab(?z)cd/
-
-/^abc|def/
-    abcdef
-    abcdef\B
-
-/.*((abc)$|(def))/
-    defabc
-    \Zdefabc
-
-/abc/P
-    abc
-    *** Failers
-    
-/^abc|def/P
-    abcdef
-    abcdef\B
-
-/.*((abc)$|(def))/P
-    defabc
-    \Zdefabc
-  
-/the quick brown fox/P
-    the quick brown fox
-    *** Failers 
-    The Quick Brown Fox 
-
-/the quick brown fox/Pi
-    the quick brown fox
-    The Quick Brown Fox 
-
-/abc.def/P
-    *** Failers
-    abc\ndef
-    
-/abc$/P
-    abc
-    abc\n 
-
-/(abc)\2/P
-
-/(abc\1)/P
-    abc
-
-/)/
-
-/a[]b/
-
-/[^aeiou ]{3,}/
-    co-processors, and for 
-    
-/<.*>/
-    abc<def>ghi<klm>nop
-
-/<.*?>/
-    abc<def>ghi<klm>nop
-
-/<.*>/U
-    abc<def>ghi<klm>nop
-    
-/<.*>(?U)/
-    abc<def>ghi<klm>nop
-
-/<.*?>/U
-    abc<def>ghi<klm>nop
-    
-/={3,}/U
-    abc========def
-    
-/(?U)={3,}?/
-    abc========def
-    
-/(?<!bar|cattle)foo/
-    foo
-    catfoo 
-    *** Failers
-    the barfoo
-    and cattlefoo   
-
-/(?<=a+)b/
-
-/(?<=aaa|b{0,3})b/
-
-/(?<!(foo)a\1)bar/
-
-/(?i)abc/
-
-/(a|(?m)a)/
-
-/(?i)^1234/
-
-/(^b|(?i)^d)/
-
-/(?s).*/
-
-/[abcd]/S
-
-/(?i)[abcd]/S
-
-/(?m)[xy]|(b|c)/S
-
-/(^a|^b)/m
-
-/(?i)(^a|^b)/m
-
-/(a)(?(1)a|b|c)/
-
-/(?(?=a)a|b|c)/
-
-/(?(1a)/
-
-/(?(?i))/
-
-/(?(abc))/
-
-/(?(?<ab))/
-
-/((?s)blah)\s+\1/
-
-/((?i)blah)\s+\1/
-
-/((?i)b)/DS
-
-/(a*b|(?i:c*(?-i)d))/S
-
-/a$/
-    a
-    a\n
-    *** Failers 
-    \Za
-    \Za\n   
-
-/a$/m
-    a
-    a\n
-    \Za\n   
-    *** Failers 
-    \Za
-    
-/\Aabc/m
-
-/^abc/m 
-
-/^((a+)(?U)([ab]+)(?-U)([bc]+)(\w*))/
-  aaaaabbbbbcccccdef
-
-/(?<=foo)[ab]/S
-
-/(?<!foo)(alpha|omega)/S
-
-/(?!alphabet)[ab]/S
-
-/(?<=foo\n)^bar/m
-
-/(?>^abc)/m
-    abc
-    def\nabc
-    *** Failers
-    defabc   
-
-/(?<=ab(c+)d)ef/
-
-/(?<=ab(?<=c+)d)ef/
-
-/(?<=ab(c|de)f)g/
-
-/The next three are in testinput2 because they have variable length branches/
-
-/(?<=bullock|donkey)-cart/
-    the bullock-cart
-    a donkey-cart race
-    *** Failers
-    cart
-    horse-and-cart    
-      
-/(?<=ab(?i)x|y|z)/
-
-/(?>.*)(?<=(abcd)|(xyz))/
-    alphabetabcd
-    endingxyz
-
-/(?<=ab(?i)x(?-i)y|(?i)z|b)ZZ/
-    abxyZZ
-    abXyZZ
-    ZZZ
-    zZZ
-    bZZ
-    BZZ     
-    *** Failers
-    ZZ 
-    abXYZZ 
-    zzz
-    bzz  
-
-/(?<!(foo)a)bar/
-    bar
-    foobbar 
-    *** Failers
-    fooabar  
-
-/This one is here because Perl 5.005_02 doesn't fail it/
-
-/^(a)?(?(1)a|b)+$/
-    *** Failers
-    a 
-
-/This one is here because I think Perl 5.005_02 gets the setting of $1 wrong/
-
-/^(a\1?){4}$/
-    aaaaaa
-    
-/These are syntax tests from Perl 5.005/
-
-/a[b-a]/
-
-/a[]b/
-
-/a[/
-
-/*a/
-
-/(*)b/
-
-/abc)/
-
-/(abc/
-
-/a**/
-
-/)(/
-
-/\1/
-
-/\2/
-
-/(a)|\2/
-
-/a[b-a]/i
-
-/a[]b/i
-
-/a[/i
-
-/*a/i
-
-/(*)b/i
-
-/abc)/i
-
-/(abc/i
-
-/a**/i
-
-/)(/i
-
-/:(?:/
-
-/(?<%)b/
-
-/a(?{)b/
-
-/a(?{{})b/
-
-/a(?{}})b/
-
-/a(?{"{"})b/
-
-/a(?{"{"}})b/
-
-/(?(1?)a|b)/
-
-/(?(1)a|b|c)/
-
-/[a[:xyz:/
-
-/(?<=x+)y/
-
-/a{37,17}/
-
-/abc/\
-
-/abc/\P
-
-/abc/\i
-
-/(a)bc(d)/
-    abcd
-    abcd\C2
-    abcd\C5
-     
-/(.{20})/
-    abcdefghijklmnopqrstuvwxyz
-    abcdefghijklmnopqrstuvwxyz\C1
-    abcdefghijklmnopqrstuvwxyz\G1
-     
-/(.{15})/
-    abcdefghijklmnopqrstuvwxyz
-    abcdefghijklmnopqrstuvwxyz\C1\G1
-
-/(.{16})/
-    abcdefghijklmnopqrstuvwxyz
-    abcdefghijklmnopqrstuvwxyz\C1\G1\L
-    
-/^(a|(bc))de(f)/
-    adef\G1\G2\G3\G4\L 
-    bcdef\G1\G2\G3\G4\L 
-    adefghijk\C0 
-    
-/^abc\00def/
-    abc\00def\L\C0 
-    
-/word ((?:[a-zA-Z0-9]+ )((?:[a-zA-Z0-9]+ )((?:[a-zA-Z0-9]+ )((?:[a-zA-Z0-9]+ 
-)((?:[a-zA-Z0-9]+ )((?:[a-zA-Z0-9]+ )((?:[a-zA-Z0-9]+ )((?:[a-zA-Z0-9]+ 
-)?)?)?)?)?)?)?)?)?otherword/M
-
-/.*X/D
-
-/.*X/Ds
-
-/(.*X|^B)/D
-
-/(.*X|^B)/Ds
-    
-/(?s)(.*X|^B)/D
-
-/(?s:.*X|^B)/D
-
-/\Biss\B/+
-    Mississippi
-
-/\Biss\B/+P
-    Mississippi
-
-/iss/G+
-    Mississippi
-
-/\Biss\B/G+
-    Mississippi
-
-/\Biss\B/g+
-    Mississippi
-    *** Failers
-    Mississippi\A
-
-/(?<=[Ms])iss/g+
-    Mississippi
-
-/(?<=[Ms])iss/G+
-    Mississippi
-
-/^iss/g+
-    ississippi
-    
-/.*iss/g+
-    abciss\nxyzisspqr 
-
-/.i./+g
-    Mississippi
-    Mississippi\A
-    Missouri river
-    Missouri river\A  
-
-/^.is/+g
-    Mississippi
-
-/^ab\n/g+
-    ab\nab\ncd
-
-/^ab\n/mg+
-    ab\nab\ncd
-
-/abc/
-
-/abc|bac/
-
-/(abc|bac)/
-
-/(abc|(c|dc))/
-
-/(abc|(d|de)c)/
-
-/a*/
-
-/a+/
-
-/(baa|a+)/
-
-/a{0,3}/
-
-/baa{3,}/
-
-/"([^\\"]+|\\.)*"/
-
-/(abc|ab[cd])/
-
-/(a|.)/
-
-/a|ba|\w/
-
-/abc(?=pqr)/
-
-/...(?<=abc)/
-
-/abc(?!pqr)/
-
-/ab./
-
-/ab[xyz]/
-
-/abc*/
-
-/ab.c*/
-
-/a.c*/
-
-/.c*/
-
-/ac*/
-
-/(a.c*|b.c*)/
-
-/a.c*|aba/
-
-/.+a/
-
-/(?=abcda)a.*/
-
-/(?=a)a.*/
-
-/a(b)*/
-
-/a\d*/
-
-/ab\d*/
-
-/a(\d)*/
-
-/abcde{0,0}/
-
-/ab\d+/
-
-/a(?(1)b)/
-
-/a(?(1)bag|big)/
-
-/a(?(1)bag|big)*/
-
-/a(?(1)bag|big)+/
-
-/a(?(1)b..|b..)/
-
-/ab\d{0}e/
-
-/a?b?/
-    a
-    b
-    ab
-    \
-    *** Failers
-    \N     
-    
-/|-/
-    abcd
-    -abc
-    \Nab-c
-    *** Failers
-    \Nabc     
-
-/a*(b+)(z)(z)/P
-    aaaabbbbzzzz
-    aaaabbbbzzzz\O0
-    aaaabbbbzzzz\O1
-    aaaabbbbzzzz\O2
-    aaaabbbbzzzz\O3
-    aaaabbbbzzzz\O4
-    aaaabbbbzzzz\O5
-    
-/^.?abcd/S 
-
-/\(             # ( at start
-  (?:           # Non-capturing bracket
-  (?>[^()]+)    # Either a sequence of non-brackets (no backtracking)
-  |             # Or
-  (?R)          # Recurse - i.e. nested bracketed string
-  )*            # Zero or more contents
-  \)            # Closing )
-  /x
-    (abcd)
-    (abcd)xyz
-    xyz(abcd)
-    (ab(xy)cd)pqr 
-    (ab(xycd)pqr 
-    () abc () 
-    12(abcde(fsh)xyz(foo(bar))lmno)89
-    *** Failers
-    abcd 
-    abcd)
-    (abcd  
-
-/\(  ( (?>[^()]+) | (?R) )* \) /xg
-    (ab(xy)cd)pqr 
-    1(abcd)(x(y)z)pqr
-
-/\(  (?: (?>[^()]+) | (?R) ) \) /x
-    (abcd)
-    (ab(xy)cd)
-    (a(b(c)d)e) 
-    ((ab)) 
-    *** Failers
-    ()   
-
-/\(  (?: (?>[^()]+) | (?R) )? \) /x
-    ()
-    12(abcde(fsh)xyz(foo(bar))lmno)89
-
-/\(  ( (?>[^()]+) | (?R) )* \) /x
-    (ab(xy)cd)
-
-/\( ( ( (?>[^()]+) | (?R) )* ) \) /x
-    (ab(xy)cd)
-
-/\( (123)? ( ( (?>[^()]+) | (?R) )* ) \) /x
-    (ab(xy)cd)
-    (123ab(xy)cd)
-
-/\( ( (123)? ( (?>[^()]+) | (?R) )* ) \) /x
-    (ab(xy)cd)
-    (123ab(xy)cd)
-
-/\( (((((((((( ( (?>[^()]+) | (?R) )* )))))))))) \) /x
-    (ab(xy)cd)
-
-/\( ( ( (?>[^()<>]+) | ((?>[^()]+)) | (?R) )* ) \) /x
-    (abcd(xyz<p>qrs)123)
-
-/\( ( ( (?>[^()]+) | ((?R)) )* ) \) /x
-    (ab(cd)ef)
-    (ab(cd(ef)gh)ij)
-
-/^[[:alnum:]]/D
-
-/^[[:alpha:]]/D
-             
-/^[[:ascii:]]/D
-
-/^[[:cntrl:]]/D
-
-/^[[:digit:]]/D
-
-/^[[:graph:]]/D
-
-/^[[:lower:]]/D
-
-/^[[:print:]]/D
-
-/^[[:punct:]]/D
-
-/^[[:space:]]/D
-
-/^[[:upper:]]/D
-
-/^[[:xdigit:]]/D
-
-/^[[:word:]]/D
-
-/^[[:^cntrl:]]/D
-
-/^[12[:^digit:]]/D
-
-/[01[:alpha:]%]/D
-
-/[[.ch.]]/
-
-/[[=ch=]]/
-
-/[[:rhubarb:]]/
-
-/[[:upper:]]/i
-    A
-    a 
-    
-/[[:lower:]]/i
-    A
-    a 
-
-/((?-i)[[:lower:]])[[:lower:]]/i
-    ab
-    aB
-    *** Failers
-    Ab
-    AB        
-
-/ End of test input /
diff --git a/srclib/pcre/testdata/testinput3 b/srclib/pcre/testdata/testinput3
deleted file mode 100644
index 67d39f3..0000000
--- a/srclib/pcre/testdata/testinput3
+++ /dev/null
@@ -1,1710 +0,0 @@
-/(?<!bar)foo/
-    foo
-    catfood
-    arfootle
-    rfoosh
-    *** Failers
-    barfoo
-    towbarfoo
-
-/\w{3}(?<!bar)foo/
-    catfood
-    *** Failers
-    foo
-    barfoo
-    towbarfoo
-
-/(?<=(foo)a)bar/
-    fooabar
-    *** Failers
-    bar
-    foobbar
-      
-/\Aabc\z/m
-    abc
-    *** Failers
-    abc\n   
-    qqq\nabc
-    abc\nzzz
-    qqq\nabc\nzzz
-
-"(?>.*/)foo"
-    /this/is/a/very/long/line/in/deed/with/very/many/slashes/in/it/you/see/
-
-"(?>.*/)foo"
-    /this/is/a/very/long/line/in/deed/with/very/many/slashes/in/and/foo
-
-/(?>(\.\d\d[1-9]?))\d+/
-    1.230003938
-    1.875000282
-    *** Failers 
-    1.235 
-
-/^((?>\w+)|(?>\s+))*$/
-    now is the time for all good men to come to the aid of the party
-    *** Failers
-    this is not a line with only words and spaces!
-    
-/(\d+)(\w)/
-    12345a
-    12345+ 
-
-/((?>\d+))(\w)/
-    12345a
-    *** Failers
-    12345+ 
-
-/(?>a+)b/
-    aaab
-
-/((?>a+)b)/
-    aaab
-
-/(?>(a+))b/
-    aaab
-
-/(?>b)+/
-    aaabbbccc
-
-/(?>a+|b+|c+)*c/
-    aaabbbbccccd
-
-/((?>[^()]+)|\([^()]*\))+/
-    ((abc(ade)ufh()()x
-    
-/\(((?>[^()]+)|\([^()]+\))+\)/ 
-    (abc)
-    (abc(def)xyz)
-    *** Failers
-    ((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa   
-
-/a(?-i)b/i
-    ab
-    *** Failers 
-    Ab
-    aB
-    AB
-        
-/(a (?x)b c)d e/
-    a bcd e
-    *** Failers
-    a b cd e
-    abcd e   
-    a bcde 
- 
-/(a b(?x)c d (?-x)e f)/
-    a bcde f
-    *** Failers
-    abcdef  
-
-/(a(?i)b)c/
-    abc
-    aBc
-    *** Failers
-    abC
-    aBC  
-    Abc
-    ABc
-    ABC
-    AbC
-    
-/a(?i:b)c/
-    abc
-    aBc
-    *** Failers 
-    ABC
-    abC
-    aBC
-    
-/a(?i:b)*c/
-    aBc
-    aBBc
-    *** Failers 
-    aBC
-    aBBC
-    
-/a(?=b(?i)c)\w\wd/
-    abcd
-    abCd
-    *** Failers
-    aBCd
-    abcD     
-    
-/(?s-i:more.*than).*million/i
-    more than million
-    more than MILLION
-    more \n than Million 
-    *** Failers
-    MORE THAN MILLION    
-    more \n than \n million 
-
-/(?:(?s-i)more.*than).*million/i
-    more than million
-    more than MILLION
-    more \n than Million 
-    *** Failers
-    MORE THAN MILLION    
-    more \n than \n million 
-    
-/(?>a(?i)b+)+c/ 
-    abc
-    aBbc
-    aBBc 
-    *** Failers
-    Abc
-    abAb    
-    abbC 
-    
-/(?=a(?i)b)\w\wc/
-    abc
-    aBc
-    *** Failers
-    Ab 
-    abC
-    aBC     
-    
-/(?<=a(?i)b)(\w\w)c/
-    abxxc
-    aBxxc
-    *** Failers
-    Abxxc
-    ABxxc
-    abxxC      
-
-/(?:(a)|b)(?(1)A|B)/
-    aA
-    bB
-    *** Failers
-    aB
-    bA    
-
-/^(a)?(?(1)a|b)+$/
-    aa
-    b
-    bb  
-    *** Failers
-    ab   
-
-/^(?(?=abc)\w{3}:|\d\d)$/
-    abc:
-    12
-    *** Failers
-    123
-    xyz    
-
-/^(?(?!abc)\d\d|\w{3}:)$/
-    abc:
-    12
-    *** Failers
-    123
-    xyz    
-    
-/(?(?<=foo)bar|cat)/
-    foobar
-    cat
-    fcat
-    focat   
-    *** Failers
-    foocat  
-
-/(?(?<!foo)cat|bar)/
-    foobar
-    cat
-    fcat
-    focat   
-    *** Failers
-    foocat  
-
-/( \( )? [^()]+ (?(1) \) |) /x
-    abcd
-    (abcd)
-    the quick (abcd) fox
-    (abcd   
-
-/( \( )? [^()]+ (?(1) \) ) /x
-    abcd
-    (abcd)
-    the quick (abcd) fox
-    (abcd   
-
-/^(?(2)a|(1)(2))+$/
-    12
-    12a
-    12aa
-    *** Failers
-    1234    
-
-/((?i)blah)\s+\1/
-    blah blah
-    BLAH BLAH
-    Blah Blah
-    blaH blaH
-    *** Failers
-    blah BLAH
-    Blah blah      
-    blaH blah 
-
-/((?i)blah)\s+(?i:\1)/
-    blah blah
-    BLAH BLAH
-    Blah Blah
-    blaH blaH
-    blah BLAH
-    Blah blah      
-    blaH blah 
-
-/(?>a*)*/
-    a
-    aa
-    aaaa
-    
-/(abc|)+/
-    abc
-    abcabc
-    abcabcabc
-    xyz      
-
-/([a]*)*/
-    a
-    aaaaa 
- 
-/([ab]*)*/
-    a
-    b
-    ababab
-    aaaabcde
-    bbbb    
- 
-/([^a]*)*/
-    b
-    bbbb
-    aaa   
- 
-/([^ab]*)*/
-    cccc
-    abab  
- 
-/([a]*?)*/
-    a
-    aaaa 
- 
-/([ab]*?)*/
-    a
-    b
-    abab
-    baba   
- 
-/([^a]*?)*/
-    b
-    bbbb
-    aaa   
- 
-/([^ab]*?)*/
-    c
-    cccc
-    baba   
- 
-/(?>a*)*/
-    a
-    aaabcde 
- 
-/((?>a*))*/
-    aaaaa
-    aabbaa 
- 
-/((?>a*?))*/
-    aaaaa
-    aabbaa 
-
-/(?(?=[^a-z]+[a-z])  \d{2}-[a-z]{3}-\d{2}  |  \d{2}-\d{2}-\d{2} ) /x
-    12-sep-98
-    12-09-98
-    *** Failers
-    sep-12-98
-        
-/(?<=(foo))bar\1/
-    foobarfoo
-    foobarfootling 
-    *** Failers
-    foobar
-    barfoo   
-
-/(?i:saturday|sunday)/
-    saturday
-    sunday
-    Saturday
-    Sunday
-    SATURDAY
-    SUNDAY
-    SunDay
-    
-/(a(?i)bc|BB)x/
-    abcx
-    aBCx
-    bbx
-    BBx
-    *** Failers
-    abcX
-    aBCX
-    bbX
-    BBX               
-
-/^([ab](?i)[cd]|[ef])/
-    ac
-    aC
-    bD
-    elephant
-    Europe 
-    frog
-    France
-    *** Failers
-    Africa     
-
-/^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)/
-    ab
-    aBd
-    xy
-    xY
-    zebra
-    Zambesi
-    *** Failers
-    aCD  
-    XY  
-
-/(?<=foo\n)^bar/m
-    foo\nbar
-    *** Failers
-    bar
-    baz\nbar   
-
-/(?<=(?<!foo)bar)baz/
-    barbaz
-    barbarbaz 
-    koobarbaz 
-    *** Failers
-    baz
-    foobarbaz 
-
-/The case of aaaaaa is missed out below because I think Perl 5.005_02 gets/
-/it wrong; it sets $1 to aaa rather than aa. Compare the following test,/
-/where it does set $1 to aa when matching aaaaaa./
-
-/^(a\1?){4}$/
-    a
-    aa
-    aaa
-    aaaa
-    aaaaa
-    aaaaaaa
-    aaaaaaaa
-    aaaaaaaaa
-    aaaaaaaaaa
-    aaaaaaaaaaa
-    aaaaaaaaaaaa
-    aaaaaaaaaaaaa
-    aaaaaaaaaaaaaa
-    aaaaaaaaaaaaaaa
-    aaaaaaaaaaaaaaaa               
-
-/^(a\1?)(a\1?)(a\2?)(a\3?)$/
-    a
-    aa
-    aaa
-    aaaa
-    aaaaa
-    aaaaaa
-    aaaaaaa
-    aaaaaaaa
-    aaaaaaaaa
-    aaaaaaaaaa
-    aaaaaaaaaaa
-    aaaaaaaaaaaa
-    aaaaaaaaaaaaa
-    aaaaaaaaaaaaaa
-    aaaaaaaaaaaaaaa
-    aaaaaaaaaaaaaaaa               
-
-/The following tests are taken from the Perl 5.005 test suite; some of them/
-/are compatible with 5.004, but I'd rather not have to sort them out./
-
-/abc/
-    abc
-    xabcy
-    ababc
-    *** Failers
-    xbc
-    axc
-    abx
-
-/ab*c/
-    abc
-
-/ab*bc/
-    abc
-    abbc
-    abbbbc
-
-/.{1}/
-    abbbbc
-
-/.{3,4}/
-    abbbbc
-
-/ab{0,}bc/
-    abbbbc
-
-/ab+bc/
-    abbc
-    *** Failers
-    abc
-    abq
-
-/ab{1,}bc/
-
-/ab+bc/
-    abbbbc
-
-/ab{1,}bc/
-    abbbbc
-
-/ab{1,3}bc/
-    abbbbc
-
-/ab{3,4}bc/
-    abbbbc
-
-/ab{4,5}bc/
-    *** Failers
-    abq
-    abbbbc
-
-/ab?bc/
-    abbc
-    abc
-
-/ab{0,1}bc/
-    abc
-
-/ab?bc/
-
-/ab?c/
-    abc
-
-/ab{0,1}c/
-    abc
-
-/^abc$/
-    abc
-    *** Failers
-    abbbbc
-    abcc
-
-/^abc/
-    abcc
-
-/^abc$/
-
-/abc$/
-    aabc
-    *** Failers
-    aabc
-    aabcd
-
-/^/
-    abc
-
-/$/
-    abc
-
-/a.c/
-    abc
-    axc
-
-/a.*c/
-    axyzc
-
-/a[bc]d/
-    abd
-    *** Failers
-    axyzd
-    abc
-
-/a[b-d]e/
-    ace
-
-/a[b-d]/
-    aac
-
-/a[-b]/
-    a-
-
-/a[b-]/
-    a-
-
-/a]/
-    a]
-
-/a[]]b/
-    a]b
-
-/a[^bc]d/
-    aed
-    *** Failers
-    abd
-    abd
-
-/a[^-b]c/
-    adc
-
-/a[^]b]c/
-    adc
-    *** Failers
-    a-c
-    a]c
-
-/\ba\b/
-    a-
-    -a
-    -a-
-
-/\by\b/
-    *** Failers
-    xy
-    yz
-    xyz
-
-/\Ba\B/
-    *** Failers
-    a-
-    -a
-    -a-
-
-/\By\b/
-    xy
-
-/\by\B/
-    yz
-
-/\By\B/
-    xyz
-
-/\w/
-    a
-
-/\W/
-    -
-    *** Failers
-    -
-    a
-
-/a\sb/
-    a b
-
-/a\Sb/
-    a-b
-    *** Failers
-    a-b
-    a b
-
-/\d/
-    1
-
-/\D/
-    -
-    *** Failers
-    -
-    1
-
-/[\w]/
-    a
-
-/[\W]/
-    -
-    *** Failers
-    -
-    a
-
-/a[\s]b/
-    a b
-
-/a[\S]b/
-    a-b
-    *** Failers
-    a-b
-    a b
-
-/[\d]/
-    1
-
-/[\D]/
-    -
-    *** Failers
-    -
-    1
-
-/ab|cd/
-    abc
-    abcd
-
-/()ef/
-    def
-
-/$b/
-
-/a\(b/
-    a(b
-
-/a\(*b/
-    ab
-    a((b
-
-/a\\b/
-    a\b
-
-/((a))/
-    abc
-
-/(a)b(c)/
-    abc
-
-/a+b+c/
-    aabbabc
-
-/a{1,}b{1,}c/
-    aabbabc
-
-/a.+?c/
-    abcabc
-
-/(a+|b)*/
-    ab
-
-/(a+|b){0,}/
-    ab
-
-/(a+|b)+/
-    ab
-
-/(a+|b){1,}/
-    ab
-
-/(a+|b)?/
-    ab
-
-/(a+|b){0,1}/
-    ab
-
-/[^ab]*/
-    cde
-
-/abc/
-    *** Failers
-    b
-    
-
-/a*/
-    
-
-/([abc])*d/
-    abbbcd
-
-/([abc])*bcd/
-    abcd
-
-/a|b|c|d|e/
-    e
-
-/(a|b|c|d|e)f/
-    ef
-
-/abcd*efg/
-    abcdefg
-
-/ab*/
-    xabyabbbz
-    xayabbbz
-
-/(ab|cd)e/
-    abcde
-
-/[abhgefdc]ij/
-    hij
-
-/^(ab|cd)e/
-
-/(abc|)ef/
-    abcdef
-
-/(a|b)c*d/
-    abcd
-
-/(ab|ab*)bc/
-    abc
-
-/a([bc]*)c*/
-    abc
-
-/a([bc]*)(c*d)/
-    abcd
-
-/a([bc]+)(c*d)/
-    abcd
-
-/a([bc]*)(c+d)/
-    abcd
-
-/a[bcd]*dcdcde/
-    adcdcde
-
-/a[bcd]+dcdcde/
-    *** Failers
-    abcde
-    adcdcde
-
-/(ab|a)b*c/
-    abc
-
-/((a)(b)c)(d)/
-    abcd
-
-/[a-zA-Z_][a-zA-Z0-9_]*/
-    alpha
-
-/^a(bc+|b[eh])g|.h$/
-    abh
-
-/(bc+d$|ef*g.|h?i(j|k))/
-    effgz
-    ij
-    reffgz
-    *** Failers
-    effg
-    bcdd
-
-/((((((((((a))))))))))/
-    a
-
-/((((((((((a))))))))))\10/
-    aa
-
-/(((((((((a)))))))))/
-    a
-
-/multiple words of text/
-    *** Failers
-    aa
-    uh-uh
-
-/multiple words/
-    multiple words, yeah
-
-/(.*)c(.*)/
-    abcde
-
-/\((.*), (.*)\)/
-    (a, b)
-
-/[k]/
-
-/abcd/
-    abcd
-
-/a(bc)d/
-    abcd
-
-/a[-]?c/
-    ac
-
-/(abc)\1/
-    abcabc
-
-/([a-c]*)\1/
-    abcabc
-
-/(a)|\1/
-    a
-    *** Failers
-    ab
-    x
-
-/(([a-c])b*?\2)*/
-    ababbbcbc
-
-/(([a-c])b*?\2){3}/
-    ababbbcbc
-
-/((\3|b)\2(a)x)+/
-    aaaxabaxbaaxbbax
-
-/((\3|b)\2(a)){2,}/
-    bbaababbabaaaaabbaaaabba
-
-/abc/i
-    ABC
-    XABCY
-    ABABC
-    *** Failers
-    aaxabxbaxbbx
-    XBC
-    AXC
-    ABX
-
-/ab*c/i
-    ABC
-
-/ab*bc/i
-    ABC
-    ABBC
-
-/ab*?bc/i
-    ABBBBC
-
-/ab{0,}?bc/i
-    ABBBBC
-
-/ab+?bc/i
-    ABBC
-
-/ab+bc/i
-    *** Failers
-    ABC
-    ABQ
-
-/ab{1,}bc/i
-
-/ab+bc/i
-    ABBBBC
-
-/ab{1,}?bc/i
-    ABBBBC
-
-/ab{1,3}?bc/i
-    ABBBBC
-
-/ab{3,4}?bc/i
-    ABBBBC
-
-/ab{4,5}?bc/i
-    *** Failers
-    ABQ
-    ABBBBC
-
-/ab??bc/i
-    ABBC
-    ABC
-
-/ab{0,1}?bc/i
-    ABC
-
-/ab??bc/i
-
-/ab??c/i
-    ABC
-
-/ab{0,1}?c/i
-    ABC
-
-/^abc$/i
-    ABC
-    *** Failers
-    ABBBBC
-    ABCC
-
-/^abc/i
-    ABCC
-
-/^abc$/i
-
-/abc$/i
-    AABC
-
-/^/i
-    ABC
-
-/$/i
-    ABC
-
-/a.c/i
-    ABC
-    AXC
-
-/a.*?c/i
-    AXYZC
-
-/a.*c/i
-    *** Failers
-    AABC
-    AXYZD
-
-/a[bc]d/i
-    ABD
-
-/a[b-d]e/i
-    ACE
-    *** Failers
-    ABC
-    ABD
-
-/a[b-d]/i
-    AAC
-
-/a[-b]/i
-    A-
-
-/a[b-]/i
-    A-
-
-/a]/i
-    A]
-
-/a[]]b/i
-    A]B
-
-/a[^bc]d/i
-    AED
-
-/a[^-b]c/i
-    ADC
-    *** Failers
-    ABD
-    A-C
-
-/a[^]b]c/i
-    ADC
-
-/ab|cd/i
-    ABC
-    ABCD
-
-/()ef/i
-    DEF
-
-/$b/i
-    *** Failers
-    A]C
-    B
-
-/a\(b/i
-    A(B
-
-/a\(*b/i
-    AB
-    A((B
-
-/a\\b/i
-    A\B
-
-/((a))/i
-    ABC
-
-/(a)b(c)/i
-    ABC
-
-/a+b+c/i
-    AABBABC
-
-/a{1,}b{1,}c/i
-    AABBABC
-
-/a.+?c/i
-    ABCABC
-
-/a.*?c/i
-    ABCABC
-
-/a.{0,5}?c/i
-    ABCABC
-
-/(a+|b)*/i
-    AB
-
-/(a+|b){0,}/i
-    AB
-
-/(a+|b)+/i
-    AB
-
-/(a+|b){1,}/i
-    AB
-
-/(a+|b)?/i
-    AB
-
-/(a+|b){0,1}/i
-    AB
-
-/(a+|b){0,1}?/i
-    AB
-
-/[^ab]*/i
-    CDE
-
-/abc/i
-
-/a*/i
-    
-
-/([abc])*d/i
-    ABBBCD
-
-/([abc])*bcd/i
-    ABCD
-
-/a|b|c|d|e/i
-    E
-
-/(a|b|c|d|e)f/i
-    EF
-
-/abcd*efg/i
-    ABCDEFG
-
-/ab*/i
-    XABYABBBZ
-    XAYABBBZ
-
-/(ab|cd)e/i
-    ABCDE
-
-/[abhgefdc]ij/i
-    HIJ
-
-/^(ab|cd)e/i
-    ABCDE
-
-/(abc|)ef/i
-    ABCDEF
-
-/(a|b)c*d/i
-    ABCD
-
-/(ab|ab*)bc/i
-    ABC
-
-/a([bc]*)c*/i
-    ABC
-
-/a([bc]*)(c*d)/i
-    ABCD
-
-/a([bc]+)(c*d)/i
-    ABCD
-
-/a([bc]*)(c+d)/i
-    ABCD
-
-/a[bcd]*dcdcde/i
-    ADCDCDE
-
-/a[bcd]+dcdcde/i
-
-/(ab|a)b*c/i
-    ABC
-
-/((a)(b)c)(d)/i
-    ABCD
-
-/[a-zA-Z_][a-zA-Z0-9_]*/i
-    ALPHA
-
-/^a(bc+|b[eh])g|.h$/i
-    ABH
-
-/(bc+d$|ef*g.|h?i(j|k))/i
-    EFFGZ
-    IJ
-    REFFGZ
-    *** Failers
-    ADCDCDE
-    EFFG
-    BCDD
-
-/((((((((((a))))))))))/i
-    A
-
-/((((((((((a))))))))))\10/i
-    AA
-
-/(((((((((a)))))))))/i
-    A
-
-/(?:(?:(?:(?:(?:(?:(?:(?:(?:(a))))))))))/i
-    A
-
-/(?:(?:(?:(?:(?:(?:(?:(?:(?:(a|b|c))))))))))/i
-    C
-
-/multiple words of text/i
-    *** Failers
-    AA
-    UH-UH
-
-/multiple words/i
-    MULTIPLE WORDS, YEAH
-
-/(.*)c(.*)/i
-    ABCDE
-
-/\((.*), (.*)\)/i
-    (A, B)
-
-/[k]/i
-
-/abcd/i
-    ABCD
-
-/a(bc)d/i
-    ABCD
-
-/a[-]?c/i
-    AC
-
-/(abc)\1/i
-    ABCABC
-
-/([a-c]*)\1/i
-    ABCABC
-
-/a(?!b)./
-    abad
-
-/a(?=d)./
-    abad
-
-/a(?=c|d)./
-    abad
-
-/a(?:b|c|d)(.)/
-    ace
-
-/a(?:b|c|d)*(.)/
-    ace
-
-/a(?:b|c|d)+?(.)/
-    ace
-    acdbcdbe
-
-/a(?:b|c|d)+(.)/
-    acdbcdbe
-
-/a(?:b|c|d){2}(.)/
-    acdbcdbe
-
-/a(?:b|c|d){4,5}(.)/
-    acdbcdbe
-
-/a(?:b|c|d){4,5}?(.)/
-    acdbcdbe
-
-/((foo)|(bar))*/
-    foobar
-
-/a(?:b|c|d){6,7}(.)/
-    acdbcdbe
-
-/a(?:b|c|d){6,7}?(.)/
-    acdbcdbe
-
-/a(?:b|c|d){5,6}(.)/
-    acdbcdbe
-
-/a(?:b|c|d){5,6}?(.)/
-    acdbcdbe
-
-/a(?:b|c|d){5,7}(.)/
-    acdbcdbe
-
-/a(?:b|c|d){5,7}?(.)/
-    acdbcdbe
-
-/a(?:b|(c|e){1,2}?|d)+?(.)/
-    ace
-
-/^(.+)?B/
-    AB
-
-/^([^a-z])|(\^)$/
-    .
-
-/^[<>]&/
-    <&OUT
-
-/^(a\1?){4}$/
-    aaaaaaaaaa
-    *** Failers
-    AB
-    aaaaaaaaa
-    aaaaaaaaaaa
-
-/^(a(?(1)\1)){4}$/
-    aaaaaaaaaa
-    *** Failers
-    aaaaaaaaa
-    aaaaaaaaaaa
-
-/(?:(f)(o)(o)|(b)(a)(r))*/
-    foobar
-
-/(?<=a)b/
-    ab
-    *** Failers
-    cb
-    b
-
-/(?<!c)b/
-    ab
-    b
-    b
-
-/(?:..)*a/
-    aba
-
-/(?:..)*?a/
-    aba
-
-/^(?:b|a(?=(.)))*\1/
-    abc
-
-/^(){3,5}/
-    abc
-
-/^(a+)*ax/
-    aax
-
-/^((a|b)+)*ax/
-    aax
-
-/^((a|bc)+)*ax/
-    aax
-
-/(a|x)*ab/
-    cab
-
-/(a)*ab/
-    cab
-
-/(?:(?i)a)b/
-    ab
-
-/((?i)a)b/
-    ab
-
-/(?:(?i)a)b/
-    Ab
-
-/((?i)a)b/
-    Ab
-
-/(?:(?i)a)b/
-    *** Failers
-    cb
-    aB
-
-/((?i)a)b/
-
-/(?i:a)b/
-    ab
-
-/((?i:a))b/
-    ab
-
-/(?i:a)b/
-    Ab
-
-/((?i:a))b/
-    Ab
-
-/(?i:a)b/
-    *** Failers
-    aB
-    aB
-
-/((?i:a))b/
-
-/(?:(?-i)a)b/i
-    ab
-
-/((?-i)a)b/i
-    ab
-
-/(?:(?-i)a)b/i
-    aB
-
-/((?-i)a)b/i
-    aB
-
-/(?:(?-i)a)b/i
-    *** Failers
-    aB
-    Ab
-
-/((?-i)a)b/i
-
-/(?:(?-i)a)b/i
-    aB
-
-/((?-i)a)b/i
-    aB
-
-/(?:(?-i)a)b/i
-    *** Failers
-    Ab
-    AB
-
-/((?-i)a)b/i
-
-/(?-i:a)b/i
-    ab
-
-/((?-i:a))b/i
-    ab
-
-/(?-i:a)b/i
-    aB
-
-/((?-i:a))b/i
-    aB
-
-/(?-i:a)b/i
-    *** Failers
-    AB
-    Ab
-
-/((?-i:a))b/i
-
-/(?-i:a)b/i
-    aB
-
-/((?-i:a))b/i
-    aB
-
-/(?-i:a)b/i
-    *** Failers
-    Ab
-    AB
-
-/((?-i:a))b/i
-
-/((?-i:a.))b/i
-    *** Failers
-    AB
-    a\nB
-
-/((?s-i:a.))b/i
-    a\nB
-
-/(?:c|d)(?:)(?:a(?:)(?:b)(?:b(?:))(?:b(?:)(?:b)))/
-    cabbbb
-
-/(?:c|d)(?:)(?:aaaaaaaa(?:)(?:bbbbbbbb)(?:bbbbbbbb(?:))(?:bbbbbbbb(?:)(?:bbbbbbbb)))/
-    caaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
-
-/(ab)\d\1/i
-    Ab4ab
-    ab4Ab
-
-/foo\w*\d{4}baz/
-    foobar1234baz
-
-/x(~~)*(?:(?:F)?)?/
-    x~~
-
-/^a(?#xxx){3}c/
-    aaac
-
-/^a (?#xxx) (?#yyy) {3}c/x
-    aaac
-
-/(?<![cd])b/
-    *** Failers
-    B\nB
-    dbcb
-
-/(?<![cd])[ab]/
-    dbaacb
-
-/(?<!(c|d))b/
-
-/(?<!(c|d))[ab]/
-    dbaacb
-
-/(?<!cd)[ab]/
-    cdaccb
-
-/^(?:a?b?)*$/
-    *** Failers
-    dbcb
-    a--
-
-/((?s)^a(.))((?m)^b$)/
-    a\nb\nc\n
-
-/((?m)^b$)/
-    a\nb\nc\n
-
-/(?m)^b/
-    a\nb\n
-
-/(?m)^(b)/
-    a\nb\n
-
-/((?m)^b)/
-    a\nb\n
-
-/\n((?m)^b)/
-    a\nb\n
-
-/((?s).)c(?!.)/
-    a\nb\nc\n
-    a\nb\nc\n
-
-/((?s)b.)c(?!.)/
-    a\nb\nc\n
-    a\nb\nc\n
-
-/^b/
-
-/()^b/
-    *** Failers
-    a\nb\nc\n
-    a\nb\nc\n
-
-/((?m)^b)/
-    a\nb\nc\n
-
-/(?(1)a|b)/
-
-/(?(1)b|a)/
-    a
-
-/(x)?(?(1)a|b)/
-    *** Failers
-    a
-    a
-
-/(x)?(?(1)b|a)/
-    a
-
-/()?(?(1)b|a)/
-    a
-
-/()(?(1)b|a)/
-
-/()?(?(1)a|b)/
-    a
-
-/^(\()?blah(?(1)(\)))$/
-    (blah)
-    blah
-    *** Failers
-    a
-    blah)
-    (blah
-
-/^(\(+)?blah(?(1)(\)))$/
-    (blah)
-    blah
-    *** Failers
-    blah)
-    (blah
-
-/(?(?!a)a|b)/
-
-/(?(?!a)b|a)/
-    a
-
-/(?(?=a)b|a)/
-    *** Failers
-    a
-    a
-
-/(?(?=a)a|b)/
-    a
-
-/(?=(a+?))(\1ab)/
-    aaab
-
-/^(?=(a+?))\1ab/
-
-/(\w+:)+/
-    one:
-
-/$(?<=^(a))/
-    a
-
-/(?=(a+?))(\1ab)/
-    aaab
-
-/^(?=(a+?))\1ab/
-    *** Failers
-    aaab
-    aaab
-
-/([\w:]+::)?(\w+)$/
-    abcd
-    xy:z:::abcd
-
-/^[^bcd]*(c+)/
-    aexycd
-
-/(a*)b+/
-    caab
-
-/([\w:]+::)?(\w+)$/
-    abcd
-    xy:z:::abcd
-    *** Failers
-    abcd:
-    abcd:
-
-/^[^bcd]*(c+)/
-    aexycd
-
-/(>a+)ab/
-
-/(?>a+)b/
-    aaab
-
-/([[:]+)/
-    a:[b]:
-
-/([[=]+)/
-    a=[b]=
-
-/([[.]+)/
-    a.[b].
-
-/((?>a+)b)/
-    aaab
-
-/(?>(a+))b/
-    aaab
-
-/((?>[^()]+)|\([^()]*\))+/
-    ((abc(ade)ufh()()x
-
-/a\Z/
-    *** Failers
-    aaab
-    a\nb\n
-
-/b\Z/
-    a\nb\n
-
-/b\z/
-
-/b\Z/
-    a\nb
-
-/b\z/
-    a\nb
-    *** Failers
-    
-/^(?>(?(1)\.|())[^\W_](?>[a-z0-9-]*[^\W_])?)+$/
-    a
-    abc
-    a-b
-    0-9 
-    a.b
-    5.6.7  
-    the.quick.brown.fox
-    a100.b200.300c  
-    12-ab.1245 
-    ***Failers
-    \
-    .a
-    -a
-    a-
-    a.  
-    a_b 
-    a.-
-    a..  
-    ab..bc 
-    the.quick.brown.fox-
-    the.quick.brown.fox.
-    the.quick.brown.fox_
-    the.quick.brown.fox+       
-
-/(?>.*)(?<=(abcd|wxyz))/
-    alphabetabcd
-    endingwxyz
-    *** Failers
-    a rather long string that doesn't end with one of them
-
-/word (?>(?:(?!otherword)[a-zA-Z0-9]+ ){0,30})otherword/
-    word cat dog elephant mussel cow horse canary baboon snake shark otherword
-    word cat dog elephant mussel cow horse canary baboon snake shark
-  
-/word (?>[a-zA-Z0-9]+ ){0,30}otherword/
-    word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope
-
-/(?<=\d{3}(?!999))foo/
-    999foo
-    123999foo 
-    *** Failers
-    123abcfoo
-    
-/(?<=(?!...999)\d{3})foo/
-    999foo
-    123999foo 
-    *** Failers
-    123abcfoo
-
-/(?<=\d{3}(?!999)...)foo/
-    123abcfoo
-    123456foo 
-    *** Failers
-    123999foo  
-    
-/(?<=\d{3}...)(?<!999)foo/
-    123abcfoo   
-    123456foo 
-    *** Failers
-    123999foo  
-
-/<a[\s]+href[\s]*=[\s]*          # find <a href=
- ([\"\'])?                       # find single or double quote
- (?(1) (.*?)\1 | ([^\s]+))       # if quote found, match up to next matching
-                                 # quote, otherwise match up to next space
-/isx
-    <a href=abcd xyz
-    <a href=\"abcd xyz pqr\" cats
-    <a href=\'abcd xyz pqr\' cats
-
-/<a\s+href\s*=\s*                # find <a href=
- (["'])?                         # find single or double quote
- (?(1) (.*?)\1 | (\S+))          # if quote found, match up to next matching
-                                 # quote, otherwise match up to next space
-/isx
-    <a href=abcd xyz
-    <a href=\"abcd xyz pqr\" cats
-    <a href       =       \'abcd xyz pqr\' cats
-
-/<a\s+href(?>\s*)=(?>\s*)        # find <a href=
- (["'])?                         # find single or double quote
- (?(1) (.*?)\1 | (\S+))          # if quote found, match up to next matching
-                                 # quote, otherwise match up to next space
-/isx
-    <a href=abcd xyz
-    <a href=\"abcd xyz pqr\" cats
-    <a href       =       \'abcd xyz pqr\' cats
-
-/((Z)+|A)*/
-    ZABCDEFG
-
-/(Z()|A)*/
-    ZABCDEFG
-
-/(Z(())|A)*/
-    ZABCDEFG
-
-/((?>Z)+|A)*/
-    ZABCDEFG
-
-/((?>)+|A)*/
-    ZABCDEFG
-
-/a*/g
-    abbab
-
-/ End of test input /       
diff --git a/srclib/pcre/testdata/testinput4 b/srclib/pcre/testdata/testinput4
deleted file mode 100644
index c23b52a..0000000
--- a/srclib/pcre/testdata/testinput4
+++ /dev/null
@@ -1,64 +0,0 @@
-/^[\w]+/
-    *** Failers
-    École
-
-/^[\w]+/Lfr
-    École
-
-/^[\w]+/
-    *** Failers
-    École
-
-/^[\W]+/
-    École
-
-/^[\W]+/Lfr
-    *** Failers
-    École
-
-/[\b]/
-    \b
-    *** Failers
-    a
-
-/[\b]/Lfr
-    \b
-    *** Failers
-    a
-
-/^\w+/
-    *** Failers
-    École
-
-/^\w+/Lfr
-    École
-
-/(.+)\b(.+)/
-    École
-
-/(.+)\b(.+)/Lfr
-    *** Failers
-    École
-
-/École/i
-    École
-    *** Failers
-    école
-
-/École/iLfr
-    École
-    école
-
-/\w/IS
-
-/\w/ISLfr
-
-/^[\xc8-\xc9]/iLfr
-    École
-    école
-
-/^[\xc8-\xc9]/Lfr
-    École
-    *** Failers 
-    école
-
diff --git a/srclib/pcre/testdata/testoutput1 b/srclib/pcre/testdata/testoutput1
deleted file mode 100644
index 3ead056..0000000
--- a/srclib/pcre/testdata/testoutput1
+++ /dev/null
Binary files differ
diff --git a/srclib/pcre/testdata/testoutput2 b/srclib/pcre/testdata/testoutput2
deleted file mode 100644
index ba8cf0e..0000000
--- a/srclib/pcre/testdata/testoutput2
+++ /dev/null
@@ -1,2072 +0,0 @@
-PCRE version 3.2 12-May-2000
-
-/(a)b|/
-Capturing subpattern count = 1
-No options
-No first char
-No need char
-
-/abc/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-Need char = 'c'
-    abc
- 0: abc
-    defabc
- 0: abc
-    \Aabc
- 0: abc
-    *** Failers
-No match
-    \Adefabc
-No match
-    ABC
-No match
-
-/^abc/
-Capturing subpattern count = 0
-Options: anchored
-No first char
-Need char = 'c'
-    abc
- 0: abc
-    \Aabc
- 0: abc
-    *** Failers
-No match
-    defabc
-No match
-    \Adefabc
-No match
-
-/a+bc/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-Need char = 'c'
-
-/a*bc/
-Capturing subpattern count = 0
-No options
-No first char
-Need char = 'c'
-
-/a{3}bc/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-Need char = 'c'
-
-/(abc|a+z)/
-Capturing subpattern count = 1
-No options
-First char = 'a'
-No need char
-
-/^abc$/
-Capturing subpattern count = 0
-Options: anchored
-No first char
-Need char = 'c'
-    abc
- 0: abc
-    *** Failers
-No match
-    def\nabc
-No match
-
-/ab\gdef/X
-Failed: unrecognized character follows \ at offset 3
-
-/(?X)ab\gdef/X
-Failed: unrecognized character follows \ at offset 7
-
-/x{5,4}/
-Failed: numbers out of order in {} quantifier at offset 5
-
-/z{65536}/
-Failed: number too big in {} quantifier at offset 7
-
-/[abcd/
-Failed: missing terminating ] for character class at offset 5
-
-/[\B]/
-Failed: invalid escape sequence in character class at offset 2
-
-/[a-\w]/
-Failed: invalid escape sequence in character class at offset 4
-
-/[z-a]/
-Failed: range out of order in character class at offset 3
-
-/^*/
-Failed: nothing to repeat at offset 1
-
-/(abc/
-Failed: missing ) at offset 4
-
-/(?# abc/
-Failed: missing ) after comment at offset 7
-
-/(?z)abc/
-Failed: unrecognized character after (? at offset 2
-
-/.*b/
-Capturing subpattern count = 0
-No options
-First char at start or follows \n
-Need char = 'b'
-
-/.*?b/
-Capturing subpattern count = 0
-No options
-First char at start or follows \n
-Need char = 'b'
-
-/cat|dog|elephant/
-Capturing subpattern count = 0
-No options
-No first char
-No need char
-    this sentence eventually mentions a cat
- 0: cat
-    this sentences rambles on and on for a while and then reaches elephant
- 0: elephant
-
-/cat|dog|elephant/S
-Capturing subpattern count = 0
-No options
-No first char
-No need char
-Starting character set: c d e 
-    this sentence eventually mentions a cat
- 0: cat
-    this sentences rambles on and on for a while and then reaches elephant
- 0: elephant
-
-/cat|dog|elephant/iS
-Capturing subpattern count = 0
-Options: caseless
-No first char
-No need char
-Starting character set: C D E c d e 
-    this sentence eventually mentions a CAT cat
- 0: CAT
-    this sentences rambles on and on for a while to elephant ElePhant
- 0: elephant
-
-/a|[bcd]/S
-Capturing subpattern count = 0
-No options
-No first char
-No need char
-Starting character set: a b c d 
-
-/(a|[^\dZ])/S
-Capturing subpattern count = 1
-No options
-No first char
-No need char
-Starting character set: \x00 \x01 \x02 \x03 \x04 \x05 \x06 \x07 \x08 \x09 \x0a 
-  \x0b \x0c \x0d \x0e \x0f \x10 \x11 \x12 \x13 \x14 \x15 \x16 \x17 \x18 \x19 
-  \x1a \x1b \x1c \x1d \x1e \x1f \x20 ! " # $ % & ' ( ) * + , - . / : ; < = > 
-  ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y [ \ ] ^ _ ` a b c d 
-  e f g h i j k l m n o p q r s t u v w x y z { | } ~ \x7f \x80 \x81 \x82 \x83 
-  \x84 \x85 \x86 \x87 \x88 \x89 \x8a \x8b \x8c \x8d \x8e \x8f \x90 \x91 \x92 
-  \x93 \x94 \x95 \x96 \x97 \x98 \x99 \x9a \x9b \x9c \x9d \x9e \x9f \xa0 \xa1 
-  \xa2 \xa3 \xa4 \xa5 \xa6 \xa7 \xa8 \xa9 \xaa \xab \xac \xad \xae \xaf \xb0 
-  \xb1 \xb2 \xb3 \xb4 \xb5 \xb6 \xb7 \xb8 \xb9 \xba \xbb \xbc \xbd \xbe \xbf 
-  \xc0 \xc1 \xc2 \xc3 \xc4 \xc5 \xc6 \xc7 \xc8 \xc9 \xca \xcb \xcc \xcd \xce 
-  \xcf \xd0 \xd1 \xd2 \xd3 \xd4 \xd5 \xd6 \xd7 \xd8 \xd9 \xda \xdb \xdc \xdd 
-  \xde \xdf \xe0 \xe1 \xe2 \xe3 \xe4 \xe5 \xe6 \xe7 \xe8 \xe9 \xea \xeb \xec 
-  \xed \xee \xef \xf0 \xf1 \xf2 \xf3 \xf4 \xf5 \xf6 \xf7 \xf8 \xf9 \xfa \xfb 
-  \xfc \xfd \xfe \xff 
-
-/(a|b)*[\s]/S
-Capturing subpattern count = 1
-No options
-No first char
-No need char
-Starting character set: \x09 \x0a \x0b \x0c \x0d \x20 a b 
-
-/(ab\2)/
-Failed: back reference to non-existent subpattern at offset 6
-
-/{4,5}abc/
-Failed: nothing to repeat at offset 4
-
-/(a)(b)(c)\2/
-Capturing subpattern count = 3
-Max back reference = 2
-No options
-First char = 'a'
-Need char = 'c'
-    abcb
- 0: abcb
- 1: a
- 2: b
- 3: c
-    \O0abcb
-Matched, but too many substrings
-    \O3abcb
-Matched, but too many substrings
- 0: abcb
-    \O6abcb
-Matched, but too many substrings
- 0: abcb
- 1: a
-    \O9abcb
-Matched, but too many substrings
- 0: abcb
- 1: a
- 2: b
-    \O12abcb 
- 0: abcb
- 1: a
- 2: b
- 3: c
-
-/(a)bc|(a)(b)\2/
-Capturing subpattern count = 3
-Max back reference = 2
-No options
-First char = 'a'
-No need char
-    abc
- 0: abc
- 1: a
-    \O0abc
-Matched, but too many substrings
-    \O3abc
-Matched, but too many substrings
- 0: abc
-    \O6abc
- 0: abc
- 1: a
-    aba
- 0: aba
- 1: <unset>
- 2: a
- 3: b
-    \O0aba
-Matched, but too many substrings
-    \O3aba
-Matched, but too many substrings
- 0: aba
-    \O6aba
-Matched, but too many substrings
- 0: aba
- 1: <unset>
-    \O9aba
-Matched, but too many substrings
- 0: aba
- 1: <unset>
- 2: a
-    \O12aba
- 0: aba
- 1: <unset>
- 2: a
- 3: b
-
-/abc$/E
-Capturing subpattern count = 0
-Options: dollar_endonly
-First char = 'a'
-Need char = 'c'
-    abc
- 0: abc
-    *** Failers
-No match
-    abc\n
-No match
-    abc\ndef
-No match
-
-/(a)(b)(c)(d)(e)\6/
-Failed: back reference to non-existent subpattern at offset 17
-
-/the quick brown fox/
-Capturing subpattern count = 0
-No options
-First char = 't'
-Need char = 'x'
-    the quick brown fox
- 0: the quick brown fox
-    this is a line with the quick brown fox
- 0: the quick brown fox
-
-/the quick brown fox/A
-Capturing subpattern count = 0
-Options: anchored
-No first char
-Need char = 'x'
-    the quick brown fox
- 0: the quick brown fox
-    *** Failers
-No match
-    this is a line with the quick brown fox
-No match
-
-/ab(?z)cd/
-Failed: unrecognized character after (? at offset 4
-
-/^abc|def/
-Capturing subpattern count = 0
-No options
-No first char
-No need char
-    abcdef
- 0: abc
-    abcdef\B
- 0: def
-
-/.*((abc)$|(def))/
-Capturing subpattern count = 3
-No options
-First char at start or follows \n
-No need char
-    defabc
- 0: defabc
- 1: abc
- 2: abc
-    \Zdefabc
- 0: def
- 1: def
- 2: <unset>
- 3: def
-
-/abc/P
-    abc
- 0: abc
-    *** Failers
-No match: POSIX code 17: match failed
-    
-/^abc|def/P
-    abcdef
- 0: abc
-    abcdef\B
- 0: def
-
-/.*((abc)$|(def))/P
-    defabc
- 0: defabc
- 1: abc
- 2: abc
-    \Zdefabc
- 0: def
- 1: def
- 3: def
-  
-/the quick brown fox/P
-    the quick brown fox
- 0: the quick brown fox
-    *** Failers 
-No match: POSIX code 17: match failed
-    The Quick Brown Fox 
-No match: POSIX code 17: match failed
-
-/the quick brown fox/Pi
-    the quick brown fox
- 0: the quick brown fox
-    The Quick Brown Fox 
- 0: The Quick Brown Fox
-
-/abc.def/P
-    *** Failers
-No match: POSIX code 17: match failed
-    abc\ndef
-No match: POSIX code 17: match failed
-    
-/abc$/P
-    abc
- 0: abc
-    abc\n 
- 0: abc
-
-/(abc)\2/P
-Failed: POSIX code 15: bad back reference at offset 7     
-
-/(abc\1)/P
-    abc
-No match: POSIX code 17: match failed
-
-/)/
-Failed: unmatched parentheses at offset 0
-
-/a[]b/
-Failed: missing terminating ] for character class at offset 4
-
-/[^aeiou ]{3,}/
-Capturing subpattern count = 0
-No options
-No first char
-No need char
-    co-processors, and for 
- 0: -pr
-    
-/<.*>/
-Capturing subpattern count = 0
-No options
-First char = '<'
-Need char = '>'
-    abc<def>ghi<klm>nop
- 0: <def>ghi<klm>
-
-/<.*?>/
-Capturing subpattern count = 0
-No options
-First char = '<'
-Need char = '>'
-    abc<def>ghi<klm>nop
- 0: <def>
-
-/<.*>/U
-Capturing subpattern count = 0
-Options: ungreedy
-First char = '<'
-Need char = '>'
-    abc<def>ghi<klm>nop
- 0: <def>
-    
-/<.*>(?U)/
-Capturing subpattern count = 0
-Options: ungreedy
-First char = '<'
-Need char = '>'
-    abc<def>ghi<klm>nop
- 0: <def>
-
-/<.*?>/U
-Capturing subpattern count = 0
-Options: ungreedy
-First char = '<'
-Need char = '>'
-    abc<def>ghi<klm>nop
- 0: <def>ghi<klm>
-    
-/={3,}/U
-Capturing subpattern count = 0
-Options: ungreedy
-First char = '='
-Need char = '='
-    abc========def
- 0: ===
-    
-/(?U)={3,}?/
-Capturing subpattern count = 0
-Options: ungreedy
-First char = '='
-Need char = '='
-    abc========def
- 0: ========
-    
-/(?<!bar|cattle)foo/
-Capturing subpattern count = 0
-No options
-First char = 'f'
-Need char = 'o'
-    foo
- 0: foo
-    catfoo 
- 0: foo
-    *** Failers
-No match
-    the barfoo
-No match
-    and cattlefoo   
-No match
-
-/(?<=a+)b/
-Failed: lookbehind assertion is not fixed length at offset 6
-
-/(?<=aaa|b{0,3})b/
-Failed: lookbehind assertion is not fixed length at offset 14
-
-/(?<!(foo)a\1)bar/
-Failed: lookbehind assertion is not fixed length at offset 12
-
-/(?i)abc/
-Capturing subpattern count = 0
-Options: caseless
-First char = 'a'
-Need char = 'c'
-
-/(a|(?m)a)/
-Capturing subpattern count = 1
-No options
-First char = 'a'
-No need char
-
-/(?i)^1234/
-Capturing subpattern count = 0
-Options: anchored caseless
-No first char
-Need char = '4'
-
-/(^b|(?i)^d)/
-Capturing subpattern count = 1
-Options: anchored
-Case state changes
-No first char
-No need char
-
-/(?s).*/
-Capturing subpattern count = 0
-Options: anchored dotall
-No first char
-No need char
-
-/[abcd]/S
-Capturing subpattern count = 0
-No options
-No first char
-No need char
-Starting character set: a b c d 
-
-/(?i)[abcd]/S
-Capturing subpattern count = 0
-Options: caseless
-No first char
-No need char
-Starting character set: A B C D a b c d 
-
-/(?m)[xy]|(b|c)/S
-Capturing subpattern count = 1
-Options: multiline
-No first char
-No need char
-Starting character set: b c x y 
-
-/(^a|^b)/m
-Capturing subpattern count = 1
-Options: multiline
-First char at start or follows \n
-No need char
-
-/(?i)(^a|^b)/m
-Capturing subpattern count = 1
-Options: caseless multiline
-First char at start or follows \n
-No need char
-
-/(a)(?(1)a|b|c)/
-Failed: conditional group contains more than two branches at offset 13
-
-/(?(?=a)a|b|c)/
-Failed: conditional group contains more than two branches at offset 12
-
-/(?(1a)/
-Failed: malformed number after (?( at offset 4
-
-/(?(?i))/
-Failed: assertion expected after (?( at offset 3
-
-/(?(abc))/
-Failed: assertion expected after (?( at offset 3
-
-/(?(?<ab))/
-Failed: unrecognized character after (?< at offset 2
-
-/((?s)blah)\s+\1/
-Capturing subpattern count = 1
-Max back reference = 1
-No options
-First char = 'b'
-Need char = 'h'
-
-/((?i)blah)\s+\1/
-Capturing subpattern count = 1
-Max back reference = 1
-No options
-Case state changes
-No first char
-Need char = 'h'
-
-/((?i)b)/DS
-------------------------------------------------------------------
-  0  16 Bra 0
-  3   8 Bra 1
-  6  01 Opt
-  8   1 b
- 11   8 Ket
- 14  00 Opt
- 16  16 Ket
- 19     End
-------------------------------------------------------------------
-Capturing subpattern count = 1
-No options
-Case state changes
-No first char
-Need char = 'b'
-Starting character set: B b 
-
-/(a*b|(?i:c*(?-i)d))/S
-Capturing subpattern count = 1
-No options
-Case state changes
-No first char
-No need char
-Starting character set: C a b c d 
-
-/a$/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-No need char
-    a
- 0: a
-    a\n
- 0: a
-    *** Failers 
-No match
-    \Za
-No match
-    \Za\n   
-No match
-
-/a$/m
-Capturing subpattern count = 0
-Options: multiline
-First char = 'a'
-No need char
-    a
- 0: a
-    a\n
- 0: a
-    \Za\n   
- 0: a
-    *** Failers 
-No match
-    \Za
-No match
-    
-/\Aabc/m
-Capturing subpattern count = 0
-Options: anchored multiline
-No first char
-Need char = 'c'
-
-/^abc/m 
-Capturing subpattern count = 0
-Options: multiline
-First char at start or follows \n
-Need char = 'c'
-
-/^((a+)(?U)([ab]+)(?-U)([bc]+)(\w*))/
-Capturing subpattern count = 5
-Options: anchored
-No first char
-Need char = 'a'
-  aaaaabbbbbcccccdef
- 0: aaaaabbbbbcccccdef
- 1: aaaaabbbbbcccccdef
- 2: aaaaa
- 3: b
- 4: bbbbccccc
- 5: def
-
-/(?<=foo)[ab]/S
-Capturing subpattern count = 0
-No options
-No first char
-No need char
-Starting character set: a b 
-
-/(?<!foo)(alpha|omega)/S
-Capturing subpattern count = 1
-No options
-No first char
-Need char = 'a'
-Starting character set: a o 
-
-/(?!alphabet)[ab]/S
-Capturing subpattern count = 0
-No options
-No first char
-No need char
-Starting character set: a b 
-
-/(?<=foo\n)^bar/m
-Capturing subpattern count = 0
-Options: multiline
-First char at start or follows \n
-Need char = 'r'
-
-/(?>^abc)/m
-Capturing subpattern count = 0
-Options: multiline
-First char at start or follows \n
-Need char = 'c'
-    abc
- 0: abc
-    def\nabc
- 0: abc
-    *** Failers
-No match
-    defabc   
-No match
-
-/(?<=ab(c+)d)ef/
-Failed: lookbehind assertion is not fixed length at offset 11
-
-/(?<=ab(?<=c+)d)ef/
-Failed: lookbehind assertion is not fixed length at offset 12
-
-/(?<=ab(c|de)f)g/
-Failed: lookbehind assertion is not fixed length at offset 13
-
-/The next three are in testinput2 because they have variable length branches/
-Capturing subpattern count = 0
-No options
-First char = 'T'
-Need char = 's'
-
-/(?<=bullock|donkey)-cart/
-Capturing subpattern count = 0
-No options
-First char = '-'
-Need char = 't'
-    the bullock-cart
- 0: -cart
-    a donkey-cart race
- 0: -cart
-    *** Failers
-No match
-    cart
-No match
-    horse-and-cart    
-No match
-      
-/(?<=ab(?i)x|y|z)/
-Capturing subpattern count = 0
-No options
-Case state changes
-No first char
-No need char
-
-/(?>.*)(?<=(abcd)|(xyz))/
-Capturing subpattern count = 2
-No options
-First char at start or follows \n
-No need char
-    alphabetabcd
- 0: alphabetabcd
- 1: abcd
-    endingxyz
- 0: endingxyz
- 1: <unset>
- 2: xyz
-
-/(?<=ab(?i)x(?-i)y|(?i)z|b)ZZ/
-Capturing subpattern count = 0
-No options
-Case state changes
-First char = 'Z'
-Need char = 'Z'
-    abxyZZ
- 0: ZZ
-    abXyZZ
- 0: ZZ
-    ZZZ
- 0: ZZ
-    zZZ
- 0: ZZ
-    bZZ
- 0: ZZ
-    BZZ     
- 0: ZZ
-    *** Failers
-No match
-    ZZ 
-No match
-    abXYZZ 
-No match
-    zzz
-No match
-    bzz  
-No match
-
-/(?<!(foo)a)bar/
-Capturing subpattern count = 1
-No options
-First char = 'b'
-Need char = 'r'
-    bar
- 0: bar
-    foobbar 
- 0: bar
-    *** Failers
-No match
-    fooabar  
-No match
-
-/This one is here because Perl 5.005_02 doesn't fail it/
-Capturing subpattern count = 0
-No options
-First char = 'T'
-Need char = 't'
-
-/^(a)?(?(1)a|b)+$/
-Capturing subpattern count = 1
-Options: anchored
-No first char
-No need char
-    *** Failers
-No match
-    a 
-No match
-
-/This one is here because I think Perl 5.005_02 gets the setting of $1 wrong/
-Capturing subpattern count = 0
-No options
-First char = 'T'
-Need char = 'g'
-
-/^(a\1?){4}$/
-Capturing subpattern count = 1
-Max back reference = 1
-Options: anchored
-No first char
-Need char = 'a'
-    aaaaaa
- 0: aaaaaa
- 1: aa
-    
-/These are syntax tests from Perl 5.005/
-Capturing subpattern count = 0
-No options
-First char = 'T'
-Need char = '5'
-
-/a[b-a]/
-Failed: range out of order in character class at offset 4
-
-/a[]b/
-Failed: missing terminating ] for character class at offset 4
-
-/a[/
-Failed: missing terminating ] for character class at offset 2
-
-/*a/
-Failed: nothing to repeat at offset 0
-
-/(*)b/
-Failed: nothing to repeat at offset 1
-
-/abc)/
-Failed: unmatched parentheses at offset 3
-
-/(abc/
-Failed: missing ) at offset 4
-
-/a**/
-Failed: nothing to repeat at offset 2
-
-/)(/
-Failed: unmatched parentheses at offset 0
-
-/\1/
-Failed: back reference to non-existent subpattern at offset 2
-
-/\2/
-Failed: back reference to non-existent subpattern at offset 2
-
-/(a)|\2/
-Failed: back reference to non-existent subpattern at offset 6
-
-/a[b-a]/i
-Failed: range out of order in character class at offset 4
-
-/a[]b/i
-Failed: missing terminating ] for character class at offset 4
-
-/a[/i
-Failed: missing terminating ] for character class at offset 2
-
-/*a/i
-Failed: nothing to repeat at offset 0
-
-/(*)b/i
-Failed: nothing to repeat at offset 1
-
-/abc)/i
-Failed: unmatched parentheses at offset 3
-
-/(abc/i
-Failed: missing ) at offset 4
-
-/a**/i
-Failed: nothing to repeat at offset 2
-
-/)(/i
-Failed: unmatched parentheses at offset 0
-
-/:(?:/
-Failed: missing ) at offset 4
-
-/(?<%)b/
-Failed: unrecognized character after (?< at offset 0
-
-/a(?{)b/
-Failed: unrecognized character after (? at offset 3
-
-/a(?{{})b/
-Failed: unrecognized character after (? at offset 3
-
-/a(?{}})b/
-Failed: unrecognized character after (? at offset 3
-
-/a(?{"{"})b/
-Failed: unrecognized character after (? at offset 3
-
-/a(?{"{"}})b/
-Failed: unrecognized character after (? at offset 3
-
-/(?(1?)a|b)/
-Failed: malformed number after (?( at offset 4
-
-/(?(1)a|b|c)/
-Failed: conditional group contains more than two branches at offset 10
-
-/[a[:xyz:/
-Failed: missing terminating ] for character class at offset 8
-
-/(?<=x+)y/
-Failed: lookbehind assertion is not fixed length at offset 6
-
-/a{37,17}/
-Failed: numbers out of order in {} quantifier at offset 7
-
-/abc/\
-Failed: \ at end of pattern at offset 4
-
-/abc/\P
-Failed: POSIX code 9: bad escape sequence at offset 4     
-
-/abc/\i
-Failed: \ at end of pattern at offset 4
-
-/(a)bc(d)/
-Capturing subpattern count = 2
-No options
-First char = 'a'
-Need char = 'd'
-    abcd
- 0: abcd
- 1: a
- 2: d
-    abcd\C2
- 0: abcd
- 1: a
- 2: d
- 2C d (1)
-    abcd\C5
- 0: abcd
- 1: a
- 2: d
-copy substring 5 failed -7
-     
-/(.{20})/
-Capturing subpattern count = 1
-No options
-No first char
-No need char
-    abcdefghijklmnopqrstuvwxyz
- 0: abcdefghijklmnopqrst
- 1: abcdefghijklmnopqrst
-    abcdefghijklmnopqrstuvwxyz\C1
- 0: abcdefghijklmnopqrst
- 1: abcdefghijklmnopqrst
-copy substring 1 failed -6
-    abcdefghijklmnopqrstuvwxyz\G1
- 0: abcdefghijklmnopqrst
- 1: abcdefghijklmnopqrst
- 1G abcdefghijklmnopqrst (20)
-     
-/(.{15})/
-Capturing subpattern count = 1
-No options
-No first char
-No need char
-    abcdefghijklmnopqrstuvwxyz
- 0: abcdefghijklmno
- 1: abcdefghijklmno
-    abcdefghijklmnopqrstuvwxyz\C1\G1
- 0: abcdefghijklmno
- 1: abcdefghijklmno
- 1C abcdefghijklmno (15)
- 1G abcdefghijklmno (15)
-
-/(.{16})/
-Capturing subpattern count = 1
-No options
-No first char
-No need char
-    abcdefghijklmnopqrstuvwxyz
- 0: abcdefghijklmnop
- 1: abcdefghijklmnop
-    abcdefghijklmnopqrstuvwxyz\C1\G1\L
- 0: abcdefghijklmnop
- 1: abcdefghijklmnop
-copy substring 1 failed -6
- 1G abcdefghijklmnop (16)
- 0L abcdefghijklmnop
- 1L abcdefghijklmnop
-    
-/^(a|(bc))de(f)/
-Capturing subpattern count = 3
-Options: anchored
-No first char
-Need char = 'f'
-    adef\G1\G2\G3\G4\L 
- 0: adef
- 1: a
- 2: <unset>
- 3: f
- 1G a (1)
- 2G  (0)
- 3G f (1)
-get substring 4 failed -7
- 0L adef
- 1L a
- 2L 
- 3L f
-    bcdef\G1\G2\G3\G4\L 
- 0: bcdef
- 1: bc
- 2: bc
- 3: f
- 1G bc (2)
- 2G bc (2)
- 3G f (1)
-get substring 4 failed -7
- 0L bcdef
- 1L bc
- 2L bc
- 3L f
-    adefghijk\C0 
- 0: adef
- 1: a
- 2: <unset>
- 3: f
- 0C adef (4)
-    
-/^abc\00def/
-Capturing subpattern count = 0
-Options: anchored
-No first char
-Need char = 'f'
-    abc\00def\L\C0 
- 0: abc\x00def
- 0C abc (7)
- 0L abc
-    
-/word ((?:[a-zA-Z0-9]+ )((?:[a-zA-Z0-9]+ )((?:[a-zA-Z0-9]+ )((?:[a-zA-Z0-9]+ 
-)((?:[a-zA-Z0-9]+ )((?:[a-zA-Z0-9]+ )((?:[a-zA-Z0-9]+ )((?:[a-zA-Z0-9]+ 
-)?)?)?)?)?)?)?)?)?otherword/M
-Memory allocation (code space): 428
-Capturing subpattern count = 8
-No options
-First char = 'w'
-Need char = 'd'
-
-/.*X/D
-------------------------------------------------------------------
-  0   8 Bra 0
-  3     Any*
-  5   1 X
-  8   8 Ket
- 11     End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-No options
-First char at start or follows \n
-Need char = 'X'
-
-/.*X/Ds
-------------------------------------------------------------------
-  0   8 Bra 0
-  3     Any*
-  5   1 X
-  8   8 Ket
- 11     End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: anchored dotall
-No first char
-Need char = 'X'
-
-/(.*X|^B)/D
-------------------------------------------------------------------
-  0  21 Bra 0
-  3   8 Bra 1
-  6     Any*
-  8   1 X
- 11   7 Alt
- 14     ^
- 15   1 B
- 18  15 Ket
- 21  21 Ket
- 24     End
-------------------------------------------------------------------
-Capturing subpattern count = 1
-No options
-First char at start or follows \n
-No need char
-
-/(.*X|^B)/Ds
-------------------------------------------------------------------
-  0  21 Bra 0
-  3   8 Bra 1
-  6     Any*
-  8   1 X
- 11   7 Alt
- 14     ^
- 15   1 B
- 18  15 Ket
- 21  21 Ket
- 24     End
-------------------------------------------------------------------
-Capturing subpattern count = 1
-Options: anchored dotall
-No first char
-No need char
-    
-/(?s)(.*X|^B)/D
-------------------------------------------------------------------
-  0  21 Bra 0
-  3   8 Bra 1
-  6     Any*
-  8   1 X
- 11   7 Alt
- 14     ^
- 15   1 B
- 18  15 Ket
- 21  21 Ket
- 24     End
-------------------------------------------------------------------
-Capturing subpattern count = 1
-Options: anchored dotall
-No first char
-No need char
-
-/(?s:.*X|^B)/D
-------------------------------------------------------------------
-  0  27 Bra 0
-  3  10 Bra 0
-  6  04 Opt
-  8     Any*
- 10   1 X
- 13   9 Alt
- 16  04 Opt
- 18     ^
- 19   1 B
- 22  19 Ket
- 25  00 Opt
- 27  27 Ket
- 30     End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-No options
-First char at start or follows \n
-No need char
-
-/\Biss\B/+
-Capturing subpattern count = 0
-No options
-First char = 'i'
-Need char = 's'
-    Mississippi
- 0: iss
- 0+ issippi
-
-/\Biss\B/+P
-    Mississippi
- 0: iss
- 0+ issippi
-
-/iss/G+
-Capturing subpattern count = 0
-No options
-First char = 'i'
-Need char = 's'
-    Mississippi
- 0: iss
- 0+ issippi
- 0: iss
- 0+ ippi
-
-/\Biss\B/G+
-Capturing subpattern count = 0
-No options
-First char = 'i'
-Need char = 's'
-    Mississippi
- 0: iss
- 0+ issippi
-
-/\Biss\B/g+
-Capturing subpattern count = 0
-No options
-First char = 'i'
-Need char = 's'
-    Mississippi
- 0: iss
- 0+ issippi
- 0: iss
- 0+ ippi
-    *** Failers
-No match
-    Mississippi\A
-No match
-
-/(?<=[Ms])iss/g+
-Capturing subpattern count = 0
-No options
-First char = 'i'
-Need char = 's'
-    Mississippi
- 0: iss
- 0+ issippi
- 0: iss
- 0+ ippi
-
-/(?<=[Ms])iss/G+
-Capturing subpattern count = 0
-No options
-First char = 'i'
-Need char = 's'
-    Mississippi
- 0: iss
- 0+ issippi
-
-/^iss/g+
-Capturing subpattern count = 0
-Options: anchored
-No first char
-Need char = 's'
-    ississippi
- 0: iss
- 0+ issippi
-    
-/.*iss/g+
-Capturing subpattern count = 0
-No options
-First char at start or follows \n
-Need char = 's'
-    abciss\nxyzisspqr 
- 0: abciss
- 0+ \x0axyzisspqr
- 0: xyziss
- 0+ pqr
-
-/.i./+g
-Capturing subpattern count = 0
-No options
-No first char
-Need char = 'i'
-    Mississippi
- 0: Mis
- 0+ sissippi
- 0: sis
- 0+ sippi
- 0: sip
- 0+ pi
-    Mississippi\A
- 0: Mis
- 0+ sissippi
- 0: sis
- 0+ sippi
- 0: sip
- 0+ pi
-    Missouri river
- 0: Mis
- 0+ souri river
- 0: ri 
- 0+ river
- 0: riv
- 0+ er
-    Missouri river\A  
- 0: Mis
- 0+ souri river
-
-/^.is/+g
-Capturing subpattern count = 0
-Options: anchored
-No first char
-Need char = 's'
-    Mississippi
- 0: Mis
- 0+ sissippi
-
-/^ab\n/g+
-Capturing subpattern count = 0
-Options: anchored
-No first char
-Need char = 10
-    ab\nab\ncd
- 0: ab\x0a
- 0+ ab\x0acd
-
-/^ab\n/mg+
-Capturing subpattern count = 0
-Options: multiline
-First char at start or follows \n
-Need char = 10
-    ab\nab\ncd
- 0: ab\x0a
- 0+ ab\x0acd
- 0: ab\x0a
- 0+ cd
-
-/abc/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-Need char = 'c'
-
-/abc|bac/
-Capturing subpattern count = 0
-No options
-No first char
-Need char = 'c'
-
-/(abc|bac)/
-Capturing subpattern count = 1
-No options
-No first char
-Need char = 'c'
-
-/(abc|(c|dc))/
-Capturing subpattern count = 2
-No options
-No first char
-Need char = 'c'
-
-/(abc|(d|de)c)/
-Capturing subpattern count = 2
-No options
-No first char
-Need char = 'c'
-
-/a*/
-Capturing subpattern count = 0
-No options
-No first char
-No need char
-
-/a+/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-No need char
-
-/(baa|a+)/
-Capturing subpattern count = 1
-No options
-No first char
-Need char = 'a'
-
-/a{0,3}/
-Capturing subpattern count = 0
-No options
-No first char
-No need char
-
-/baa{3,}/
-Capturing subpattern count = 0
-No options
-First char = 'b'
-Need char = 'a'
-
-/"([^\\"]+|\\.)*"/
-Capturing subpattern count = 1
-No options
-First char = '"'
-Need char = '"'
-
-/(abc|ab[cd])/
-Capturing subpattern count = 1
-No options
-First char = 'a'
-No need char
-
-/(a|.)/
-Capturing subpattern count = 1
-No options
-No first char
-No need char
-
-/a|ba|\w/
-Capturing subpattern count = 0
-No options
-No first char
-No need char
-
-/abc(?=pqr)/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-Need char = 'r'
-
-/...(?<=abc)/
-Capturing subpattern count = 0
-No options
-No first char
-No need char
-
-/abc(?!pqr)/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-Need char = 'c'
-
-/ab./
-Capturing subpattern count = 0
-No options
-First char = 'a'
-Need char = 'b'
-
-/ab[xyz]/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-Need char = 'b'
-
-/abc*/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-Need char = 'b'
-
-/ab.c*/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-Need char = 'b'
-
-/a.c*/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-No need char
-
-/.c*/
-Capturing subpattern count = 0
-No options
-No first char
-No need char
-
-/ac*/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-No need char
-
-/(a.c*|b.c*)/
-Capturing subpattern count = 1
-No options
-No first char
-No need char
-
-/a.c*|aba/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-No need char
-
-/.+a/
-Capturing subpattern count = 0
-No options
-No first char
-Need char = 'a'
-
-/(?=abcda)a.*/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-No need char
-
-/(?=a)a.*/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-No need char
-
-/a(b)*/
-Capturing subpattern count = 1
-No options
-First char = 'a'
-No need char
-
-/a\d*/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-No need char
-
-/ab\d*/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-Need char = 'b'
-
-/a(\d)*/
-Capturing subpattern count = 1
-No options
-First char = 'a'
-No need char
-
-/abcde{0,0}/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-Need char = 'd'
-
-/ab\d+/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-Need char = 'b'
-
-/a(?(1)b)/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-No need char
-
-/a(?(1)bag|big)/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-Need char = 'g'
-
-/a(?(1)bag|big)*/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-No need char
-
-/a(?(1)bag|big)+/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-Need char = 'g'
-
-/a(?(1)b..|b..)/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-Need char = 'b'
-
-/ab\d{0}e/
-Capturing subpattern count = 0
-No options
-First char = 'a'
-Need char = 'e'
-
-/a?b?/
-Capturing subpattern count = 0
-No options
-No first char
-No need char
-    a
- 0: a
-    b
- 0: b
-    ab
- 0: ab
-    \
- 0: 
-    *** Failers
- 0: 
-    \N     
-No match
-    
-/|-/
-Capturing subpattern count = 0
-No options
-No first char
-No need char
-    abcd
- 0: 
-    -abc
- 0: 
-    \Nab-c
- 0: -
-    *** Failers
- 0: 
-    \Nabc     
-No match
-
-/a*(b+)(z)(z)/P
-    aaaabbbbzzzz
- 0: aaaabbbbzz
- 1: bbbb
- 2: z
- 3: z
-    aaaabbbbzzzz\O0
-    aaaabbbbzzzz\O1
- 0: aaaabbbbzz
-    aaaabbbbzzzz\O2
- 0: aaaabbbbzz
- 1: bbbb
-    aaaabbbbzzzz\O3
- 0: aaaabbbbzz
- 1: bbbb
- 2: z
-    aaaabbbbzzzz\O4
- 0: aaaabbbbzz
- 1: bbbb
- 2: z
- 3: z
-    aaaabbbbzzzz\O5
- 0: aaaabbbbzz
- 1: bbbb
- 2: z
- 3: z
-    
-/^.?abcd/S 
-Capturing subpattern count = 0
-Options: anchored
-No first char
-Need char = 'd'
-Study returned NULL
-
-/\(             # ( at start
-  (?:           # Non-capturing bracket
-  (?>[^()]+)    # Either a sequence of non-brackets (no backtracking)
-  |             # Or
-  (?R)          # Recurse - i.e. nested bracketed string
-  )*            # Zero or more contents
-  \)            # Closing )
-  /x
-Capturing subpattern count = 0
-Options: extended
-First char = '('
-Need char = ')'
-    (abcd)
- 0: (abcd)
-    (abcd)xyz
- 0: (abcd)
-    xyz(abcd)
- 0: (abcd)
-    (ab(xy)cd)pqr 
- 0: (ab(xy)cd)
-    (ab(xycd)pqr 
- 0: (xycd)
-    () abc () 
- 0: ()
-    12(abcde(fsh)xyz(foo(bar))lmno)89
- 0: (abcde(fsh)xyz(foo(bar))lmno)
-    *** Failers
-No match
-    abcd 
-No match
-    abcd)
-No match
-    (abcd  
-No match
-
-/\(  ( (?>[^()]+) | (?R) )* \) /xg
-Capturing subpattern count = 1
-Options: extended
-First char = '('
-Need char = ')'
-    (ab(xy)cd)pqr 
- 0: (ab(xy)cd)
- 1: cd
-    1(abcd)(x(y)z)pqr
- 0: (abcd)
- 1: abcd
- 0: (x(y)z)
- 1: z
-
-/\(  (?: (?>[^()]+) | (?R) ) \) /x
-Capturing subpattern count = 0
-Options: extended
-First char = '('
-Need char = ')'
-    (abcd)
- 0: (abcd)
-    (ab(xy)cd)
- 0: (xy)
-    (a(b(c)d)e) 
- 0: (c)
-    ((ab)) 
- 0: ((ab))
-    *** Failers
-No match
-    ()   
-No match
-
-/\(  (?: (?>[^()]+) | (?R) )? \) /x
-Capturing subpattern count = 0
-Options: extended
-First char = '('
-Need char = ')'
-    ()
- 0: ()
-    12(abcde(fsh)xyz(foo(bar))lmno)89
- 0: (fsh)
-
-/\(  ( (?>[^()]+) | (?R) )* \) /x
-Capturing subpattern count = 1
-Options: extended
-First char = '('
-Need char = ')'
-    (ab(xy)cd)
- 0: (ab(xy)cd)
- 1: cd
-
-/\( ( ( (?>[^()]+) | (?R) )* ) \) /x
-Capturing subpattern count = 2
-Options: extended
-First char = '('
-Need char = ')'
-    (ab(xy)cd)
- 0: (ab(xy)cd)
- 1: ab(xy)cd
- 2: cd
-
-/\( (123)? ( ( (?>[^()]+) | (?R) )* ) \) /x
-Capturing subpattern count = 3
-Options: extended
-First char = '('
-Need char = ')'
-    (ab(xy)cd)
- 0: (ab(xy)cd)
- 1: <unset>
- 2: ab(xy)cd
- 3: cd
-    (123ab(xy)cd)
- 0: (123ab(xy)cd)
- 1: 123
- 2: ab(xy)cd
- 3: cd
-
-/\( ( (123)? ( (?>[^()]+) | (?R) )* ) \) /x
-Capturing subpattern count = 3
-Options: extended
-First char = '('
-Need char = ')'
-    (ab(xy)cd)
- 0: (ab(xy)cd)
- 1: ab(xy)cd
- 2: <unset>
- 3: cd
-    (123ab(xy)cd)
- 0: (123ab(xy)cd)
- 1: 123ab(xy)cd
- 2: 123
- 3: cd
-
-/\( (((((((((( ( (?>[^()]+) | (?R) )* )))))))))) \) /x
-Capturing subpattern count = 11
-Options: extended
-First char = '('
-Need char = ')'
-    (ab(xy)cd)
- 0: (ab(xy)cd)
- 1: ab(xy)cd
- 2: ab(xy)cd
- 3: ab(xy)cd
- 4: ab(xy)cd
- 5: ab(xy)cd
- 6: ab(xy)cd
- 7: ab(xy)cd
- 8: ab(xy)cd
- 9: ab(xy)cd
-10: ab(xy)cd
-11: cd
-
-/\( ( ( (?>[^()<>]+) | ((?>[^()]+)) | (?R) )* ) \) /x
-Capturing subpattern count = 3
-Options: extended
-First char = '('
-Need char = ')'
-    (abcd(xyz<p>qrs)123)
- 0: (abcd(xyz<p>qrs)123)
- 1: abcd(xyz<p>qrs)123
- 2: 123
- 3: <p>qrs
-
-/\( ( ( (?>[^()]+) | ((?R)) )* ) \) /x
-Capturing subpattern count = 3
-Options: extended
-First char = '('
-Need char = ')'
-    (ab(cd)ef)
- 0: (ab(cd)ef)
- 1: ab(cd)ef
- 2: ef
- 3: (cd)
-    (ab(cd(ef)gh)ij)
- 0: (ab(cd(ef)gh)ij)
- 1: ab(cd(ef)gh)ij
- 2: ij
- 3: (cd(ef)gh)
-
-/^[[:alnum:]]/D
-------------------------------------------------------------------
-  0  37 Bra 0
-  3     ^
-  4     [0-9A-Za-z]
- 37  37 Ket
- 40     End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: anchored
-No first char
-No need char
-
-/^[[:alpha:]]/D
-------------------------------------------------------------------
-  0  37 Bra 0
-  3     ^
-  4     [A-Za-z]
- 37  37 Ket
- 40     End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: anchored
-No first char
-No need char
-             
-/^[[:ascii:]]/D
-------------------------------------------------------------------
-  0  37 Bra 0
-  3     ^
-  4     [\x00-\x7f]
- 37  37 Ket
- 40     End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: anchored
-No first char
-No need char
-
-/^[[:cntrl:]]/D
-------------------------------------------------------------------
-  0  37 Bra 0
-  3     ^
-  4     [\x00-\x1f\x7f]
- 37  37 Ket
- 40     End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: anchored
-No first char
-No need char
-
-/^[[:digit:]]/D
-------------------------------------------------------------------
-  0  37 Bra 0
-  3     ^
-  4     [0-9]
- 37  37 Ket
- 40     End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: anchored
-No first char
-No need char
-
-/^[[:graph:]]/D
-------------------------------------------------------------------
-  0  37 Bra 0
-  3     ^
-  4     [!-~]
- 37  37 Ket
- 40     End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: anchored
-No first char
-No need char
-
-/^[[:lower:]]/D
-------------------------------------------------------------------
-  0  37 Bra 0
-  3     ^
-  4     [a-z]
- 37  37 Ket
- 40     End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: anchored
-No first char
-No need char
-
-/^[[:print:]]/D
-------------------------------------------------------------------
-  0  37 Bra 0
-  3     ^
-  4     [ -~]
- 37  37 Ket
- 40     End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: anchored
-No first char
-No need char
-
-/^[[:punct:]]/D
-------------------------------------------------------------------
-  0  37 Bra 0
-  3     ^
-  4     [!-/:-@[-`{-~]
- 37  37 Ket
- 40     End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: anchored
-No first char
-No need char
-
-/^[[:space:]]/D
-------------------------------------------------------------------
-  0  37 Bra 0
-  3     ^
-  4     [\x09-\x0d ]
- 37  37 Ket
- 40     End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: anchored
-No first char
-No need char
-
-/^[[:upper:]]/D
-------------------------------------------------------------------
-  0  37 Bra 0
-  3     ^
-  4     [A-Z]
- 37  37 Ket
- 40     End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: anchored
-No first char
-No need char
-
-/^[[:xdigit:]]/D
-------------------------------------------------------------------
-  0  37 Bra 0
-  3     ^
-  4     [0-9A-Fa-f]
- 37  37 Ket
- 40     End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: anchored
-No first char
-No need char
-
-/^[[:word:]]/D
-------------------------------------------------------------------
-  0  37 Bra 0
-  3     ^
-  4     [0-9A-Z_a-z]
- 37  37 Ket
- 40     End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: anchored
-No first char
-No need char
-
-/^[[:^cntrl:]]/D
-------------------------------------------------------------------
-  0  37 Bra 0
-  3     ^
-  4     [ -~\x80-\xff]
- 37  37 Ket
- 40     End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: anchored
-No first char
-No need char
-
-/^[12[:^digit:]]/D
-------------------------------------------------------------------
-  0  37 Bra 0
-  3     ^
-  4     [\x00-/1-2:-\xff]
- 37  37 Ket
- 40     End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-Options: anchored
-No first char
-No need char
-
-/[01[:alpha:]%]/D
-------------------------------------------------------------------
-  0  36 Bra 0
-  3     [%0-1A-Za-z]
- 36  36 Ket
- 39     End
-------------------------------------------------------------------
-Capturing subpattern count = 0
-No options
-No first char
-No need char
-
-/[[.ch.]]/
-Failed: POSIX collating elements are not supported at offset 1
-
-/[[=ch=]]/
-Failed: POSIX collating elements are not supported at offset 1
-
-/[[:rhubarb:]]/
-Failed: unknown POSIX class name at offset 3
-
-/[[:upper:]]/i
-Capturing subpattern count = 0
-Options: caseless
-No first char
-No need char
-    A
- 0: A
-    a 
- 0: a
-    
-/[[:lower:]]/i
-Capturing subpattern count = 0
-Options: caseless
-No first char
-No need char
-    A
- 0: A
-    a 
- 0: a
-
-/((?-i)[[:lower:]])[[:lower:]]/i
-Capturing subpattern count = 1
-Options: caseless
-Case state changes
-No first char
-No need char
-    ab
- 0: ab
- 1: a
-    aB
- 0: aB
- 1: a
-    *** Failers
- 0: ai
- 1: a
-    Ab
-No match
-    AB        
-No match
-
-/ End of test input /
-Capturing subpattern count = 0
-No options
-First char = ' '
-Need char = ' '
-
diff --git a/srclib/pcre/testdata/testoutput3 b/srclib/pcre/testdata/testoutput3
deleted file mode 100644
index 0269f87..0000000
--- a/srclib/pcre/testdata/testoutput3
+++ /dev/null
@@ -1,2967 +0,0 @@
-PCRE version 3.2 12-May-2000
-
-/(?<!bar)foo/
-    foo
- 0: foo
-    catfood
- 0: foo
-    arfootle
- 0: foo
-    rfoosh
- 0: foo
-    *** Failers
-No match
-    barfoo
-No match
-    towbarfoo
-No match
-
-/\w{3}(?<!bar)foo/
-    catfood
- 0: catfoo
-    *** Failers
-No match
-    foo
-No match
-    barfoo
-No match
-    towbarfoo
-No match
-
-/(?<=(foo)a)bar/
-    fooabar
- 0: bar
- 1: foo
-    *** Failers
-No match
-    bar
-No match
-    foobbar
-No match
-      
-/\Aabc\z/m
-    abc
- 0: abc
-    *** Failers
-No match
-    abc\n   
-No match
-    qqq\nabc
-No match
-    abc\nzzz
-No match
-    qqq\nabc\nzzz
-No match
-
-"(?>.*/)foo"
-    /this/is/a/very/long/line/in/deed/with/very/many/slashes/in/it/you/see/
-No match
-
-"(?>.*/)foo"
-    /this/is/a/very/long/line/in/deed/with/very/many/slashes/in/and/foo
- 0: /this/is/a/very/long/line/in/deed/with/very/many/slashes/in/and/foo
-
-/(?>(\.\d\d[1-9]?))\d+/
-    1.230003938
- 0: .230003938
- 1: .23
-    1.875000282
- 0: .875000282
- 1: .875
-    *** Failers 
-No match
-    1.235 
-No match
-
-/^((?>\w+)|(?>\s+))*$/
-    now is the time for all good men to come to the aid of the party
- 0: now is the time for all good men to come to the aid of the party
- 1: party
-    *** Failers
-No match
-    this is not a line with only words and spaces!
-No match
-    
-/(\d+)(\w)/
-    12345a
- 0: 12345a
- 1: 12345
- 2: a
-    12345+ 
- 0: 12345
- 1: 1234
- 2: 5
-
-/((?>\d+))(\w)/
-    12345a
- 0: 12345a
- 1: 12345
- 2: a
-    *** Failers
-No match
-    12345+ 
-No match
-
-/(?>a+)b/
-    aaab
- 0: aaab
-
-/((?>a+)b)/
-    aaab
- 0: aaab
- 1: aaab
-
-/(?>(a+))b/
-    aaab
- 0: aaab
- 1: aaa
-
-/(?>b)+/
-    aaabbbccc
- 0: bbb
-
-/(?>a+|b+|c+)*c/
-    aaabbbbccccd
- 0: aaabbbbc
-
-/((?>[^()]+)|\([^()]*\))+/
-    ((abc(ade)ufh()()x
- 0: abc(ade)ufh()()x
- 1: x
-    
-/\(((?>[^()]+)|\([^()]+\))+\)/ 
-    (abc)
- 0: (abc)
- 1: abc
-    (abc(def)xyz)
- 0: (abc(def)xyz)
- 1: xyz
-    *** Failers
-No match
-    ((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa   
-No match
-
-/a(?-i)b/i
-    ab
- 0: ab
-    *** Failers 
-No match
-    Ab
-No match
-    aB
-No match
-    AB
-No match
-        
-/(a (?x)b c)d e/
-    a bcd e
- 0: a bcd e
- 1: a bc
-    *** Failers
-No match
-    a b cd e
-No match
-    abcd e   
-No match
-    a bcde 
-No match
- 
-/(a b(?x)c d (?-x)e f)/
-    a bcde f
- 0: a bcde f
- 1: a bcde f
-    *** Failers
-No match
-    abcdef  
-No match
-
-/(a(?i)b)c/
-    abc
- 0: abc
- 1: ab
-    aBc
- 0: aBc
- 1: aB
-    *** Failers
-No match
-    abC
-No match
-    aBC  
-No match
-    Abc
-No match
-    ABc
-No match
-    ABC
-No match
-    AbC
-No match
-    
-/a(?i:b)c/
-    abc
- 0: abc
-    aBc
- 0: aBc
-    *** Failers 
-No match
-    ABC
-No match
-    abC
-No match
-    aBC
-No match
-    
-/a(?i:b)*c/
-    aBc
- 0: aBc
-    aBBc
- 0: aBBc
-    *** Failers 
-No match
-    aBC
-No match
-    aBBC
-No match
-    
-/a(?=b(?i)c)\w\wd/
-    abcd
- 0: abcd
-    abCd
- 0: abCd
-    *** Failers
-No match
-    aBCd
-No match
-    abcD     
-No match
-    
-/(?s-i:more.*than).*million/i
-    more than million
- 0: more than million
-    more than MILLION
- 0: more than MILLION
-    more \n than Million 
- 0: more \x0a than Million
-    *** Failers
-No match
-    MORE THAN MILLION    
-No match
-    more \n than \n million 
-No match
-
-/(?:(?s-i)more.*than).*million/i
-    more than million
- 0: more than million
-    more than MILLION
- 0: more than MILLION
-    more \n than Million 
- 0: more \x0a than Million
-    *** Failers
-No match
-    MORE THAN MILLION    
-No match
-    more \n than \n million 
-No match
-    
-/(?>a(?i)b+)+c/ 
-    abc
- 0: abc
-    aBbc
- 0: aBbc
-    aBBc 
- 0: aBBc
-    *** Failers
-No match
-    Abc
-No match
-    abAb    
-No match
-    abbC 
-No match
-    
-/(?=a(?i)b)\w\wc/
-    abc
- 0: abc
-    aBc
- 0: aBc
-    *** Failers
-No match
-    Ab 
-No match
-    abC
-No match
-    aBC     
-No match
-    
-/(?<=a(?i)b)(\w\w)c/
-    abxxc
- 0: xxc
- 1: xx
-    aBxxc
- 0: xxc
- 1: xx
-    *** Failers
-No match
-    Abxxc
-No match
-    ABxxc
-No match
-    abxxC      
-No match
-
-/(?:(a)|b)(?(1)A|B)/
-    aA
- 0: aA
- 1: a
-    bB
- 0: bB
-    *** Failers
-No match
-    aB
-No match
-    bA    
-No match
-
-/^(a)?(?(1)a|b)+$/
-    aa
- 0: aa
- 1: a
-    b
- 0: b
-    bb  
- 0: bb
-    *** Failers
-No match
-    ab   
-No match
-
-/^(?(?=abc)\w{3}:|\d\d)$/
-    abc:
- 0: abc:
-    12
- 0: 12
-    *** Failers
-No match
-    123
-No match
-    xyz    
-No match
-
-/^(?(?!abc)\d\d|\w{3}:)$/
-    abc:
- 0: abc:
-    12
- 0: 12
-    *** Failers
-No match
-    123
-No match
-    xyz    
-No match
-    
-/(?(?<=foo)bar|cat)/
-    foobar
- 0: bar
-    cat
- 0: cat
-    fcat
- 0: cat
-    focat   
- 0: cat
-    *** Failers
-No match
-    foocat  
-No match
-
-/(?(?<!foo)cat|bar)/
-    foobar
- 0: bar
-    cat
- 0: cat
-    fcat
- 0: cat
-    focat   
- 0: cat
-    *** Failers
-No match
-    foocat  
-No match
-
-/( \( )? [^()]+ (?(1) \) |) /x
-    abcd
- 0: abcd
-    (abcd)
- 0: (abcd)
- 1: (
-    the quick (abcd) fox
- 0: the quick 
-    (abcd   
- 0: abcd
-
-/( \( )? [^()]+ (?(1) \) ) /x
-    abcd
- 0: abcd
-    (abcd)
- 0: (abcd)
- 1: (
-    the quick (abcd) fox
- 0: the quick 
-    (abcd   
- 0: abcd
-
-/^(?(2)a|(1)(2))+$/
-    12
- 0: 12
- 1: 1
- 2: 2
-    12a
- 0: 12a
- 1: 1
- 2: 2
-    12aa
- 0: 12aa
- 1: 1
- 2: 2
-    *** Failers
-No match
-    1234    
-No match
-
-/((?i)blah)\s+\1/
-    blah blah
- 0: blah blah
- 1: blah
-    BLAH BLAH
- 0: BLAH BLAH
- 1: BLAH
-    Blah Blah
- 0: Blah Blah
- 1: Blah
-    blaH blaH
- 0: blaH blaH
- 1: blaH
-    *** Failers
-No match
-    blah BLAH
-No match
-    Blah blah      
-No match
-    blaH blah 
-No match
-
-/((?i)blah)\s+(?i:\1)/
-    blah blah
- 0: blah blah
- 1: blah
-    BLAH BLAH
- 0: BLAH BLAH
- 1: BLAH
-    Blah Blah
- 0: Blah Blah
- 1: Blah
-    blaH blaH
- 0: blaH blaH
- 1: blaH
-    blah BLAH
- 0: blah BLAH
- 1: blah
-    Blah blah      
- 0: Blah blah
- 1: Blah
-    blaH blah 
- 0: blaH blah
- 1: blaH
-
-/(?>a*)*/
-    a
- 0: a
-    aa
- 0: aa
-    aaaa
- 0: aaaa
-    
-/(abc|)+/
-    abc
- 0: abc
- 1: 
-    abcabc
- 0: abcabc
- 1: 
-    abcabcabc
- 0: abcabcabc
- 1: 
-    xyz      
- 0: 
- 1: 
-
-/([a]*)*/
-    a
- 0: a
- 1: 
-    aaaaa 
- 0: aaaaa
- 1: 
- 
-/([ab]*)*/
-    a
- 0: a
- 1: 
-    b
- 0: b
- 1: 
-    ababab
- 0: ababab
- 1: 
-    aaaabcde
- 0: aaaab
- 1: 
-    bbbb    
- 0: bbbb
- 1: 
- 
-/([^a]*)*/
-    b
- 0: b
- 1: 
-    bbbb
- 0: bbbb
- 1: 
-    aaa   
- 0: 
- 1: 
- 
-/([^ab]*)*/
-    cccc
- 0: cccc
- 1: 
-    abab  
- 0: 
- 1: 
- 
-/([a]*?)*/
-    a
- 0: 
- 1: 
-    aaaa 
- 0: 
- 1: 
- 
-/([ab]*?)*/
-    a
- 0: 
- 1: 
-    b
- 0: 
- 1: 
-    abab
- 0: 
- 1: 
-    baba   
- 0: 
- 1: 
- 
-/([^a]*?)*/
-    b
- 0: 
- 1: 
-    bbbb
- 0: 
- 1: 
-    aaa   
- 0: 
- 1: 
- 
-/([^ab]*?)*/
-    c
- 0: 
- 1: 
-    cccc
- 0: 
- 1: 
-    baba   
- 0: 
- 1: 
- 
-/(?>a*)*/
-    a
- 0: a
-    aaabcde 
- 0: aaa
- 
-/((?>a*))*/
-    aaaaa
- 0: aaaaa
- 1: 
-    aabbaa 
- 0: aa
- 1: 
- 
-/((?>a*?))*/
-    aaaaa
- 0: 
- 1: 
-    aabbaa 
- 0: 
- 1: 
-
-/(?(?=[^a-z]+[a-z])  \d{2}-[a-z]{3}-\d{2}  |  \d{2}-\d{2}-\d{2} ) /x
-    12-sep-98
- 0: 12-sep-98
-    12-09-98
- 0: 12-09-98
-    *** Failers
-No match
-    sep-12-98
-No match
-        
-/(?<=(foo))bar\1/
-    foobarfoo
- 0: barfoo
- 1: foo
-    foobarfootling 
- 0: barfoo
- 1: foo
-    *** Failers
-No match
-    foobar
-No match
-    barfoo   
-No match
-
-/(?i:saturday|sunday)/
-    saturday
- 0: saturday
-    sunday
- 0: sunday
-    Saturday
- 0: Saturday
-    Sunday
- 0: Sunday
-    SATURDAY
- 0: SATURDAY
-    SUNDAY
- 0: SUNDAY
-    SunDay
- 0: SunDay
-    
-/(a(?i)bc|BB)x/
-    abcx
- 0: abcx
- 1: abc
-    aBCx
- 0: aBCx
- 1: aBC
-    bbx
- 0: bbx
- 1: bb
-    BBx
- 0: BBx
- 1: BB
-    *** Failers
-No match
-    abcX
-No match
-    aBCX
-No match
-    bbX
-No match
-    BBX               
-No match
-
-/^([ab](?i)[cd]|[ef])/
-    ac
- 0: ac
- 1: ac
-    aC
- 0: aC
- 1: aC
-    bD
- 0: bD
- 1: bD
-    elephant
- 0: e
- 1: e
-    Europe 
- 0: E
- 1: E
-    frog
- 0: f
- 1: f
-    France
- 0: F
- 1: F
-    *** Failers
-No match
-    Africa     
-No match
-
-/^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)/
-    ab
- 0: ab
- 1: ab
-    aBd
- 0: aBd
- 1: aBd
-    xy
- 0: xy
- 1: xy
-    xY
- 0: xY
- 1: xY
-    zebra
- 0: z
- 1: z
-    Zambesi
- 0: Z
- 1: Z
-    *** Failers
-No match
-    aCD  
-No match
-    XY  
-No match
-
-/(?<=foo\n)^bar/m
-    foo\nbar
- 0: bar
-    *** Failers
-No match
-    bar
-No match
-    baz\nbar   
-No match
-
-/(?<=(?<!foo)bar)baz/
-    barbaz
- 0: baz
-    barbarbaz 
- 0: baz
-    koobarbaz 
- 0: baz
-    *** Failers
-No match
-    baz
-No match
-    foobarbaz 
-No match
-
-/The case of aaaaaa is missed out below because I think Perl 5.005_02 gets/
-/it wrong; it sets $1 to aaa rather than aa. Compare the following test,/
-No match
-/where it does set $1 to aa when matching aaaaaa./
-No match
-
-/^(a\1?){4}$/
-    a
-No match
-    aa
-No match
-    aaa
-No match
-    aaaa
- 0: aaaa
- 1: a
-    aaaaa
- 0: aaaaa
- 1: a
-    aaaaaaa
- 0: aaaaaaa
- 1: a
-    aaaaaaaa
-No match
-    aaaaaaaaa
-No match
-    aaaaaaaaaa
- 0: aaaaaaaaaa
- 1: aaaa
-    aaaaaaaaaaa
-No match
-    aaaaaaaaaaaa
-No match
-    aaaaaaaaaaaaa
-No match
-    aaaaaaaaaaaaaa
-No match
-    aaaaaaaaaaaaaaa
-No match
-    aaaaaaaaaaaaaaaa               
-No match
-
-/^(a\1?)(a\1?)(a\2?)(a\3?)$/
-    a
-No match
-    aa
-No match
-    aaa
-No match
-    aaaa
- 0: aaaa
- 1: a
- 2: a
- 3: a
- 4: a
-    aaaaa
- 0: aaaaa
- 1: a
- 2: aa
- 3: a
- 4: a
-    aaaaaa
- 0: aaaaaa
- 1: a
- 2: aa
- 3: a
- 4: aa
-    aaaaaaa
- 0: aaaaaaa
- 1: a
- 2: aa
- 3: aaa
- 4: a
-    aaaaaaaa
-No match
-    aaaaaaaaa
-No match
-    aaaaaaaaaa
- 0: aaaaaaaaaa
- 1: a
- 2: aa
- 3: aaa
- 4: aaaa
-    aaaaaaaaaaa
-No match
-    aaaaaaaaaaaa
-No match
-    aaaaaaaaaaaaa
-No match
-    aaaaaaaaaaaaaa
-No match
-    aaaaaaaaaaaaaaa
-No match
-    aaaaaaaaaaaaaaaa               
-No match
-
-/The following tests are taken from the Perl 5.005 test suite; some of them/
-/are compatible with 5.004, but I'd rather not have to sort them out./
-No match
-
-/abc/
-    abc
- 0: abc
-    xabcy
- 0: abc
-    ababc
- 0: abc
-    *** Failers
-No match
-    xbc
-No match
-    axc
-No match
-    abx
-No match
-
-/ab*c/
-    abc
- 0: abc
-
-/ab*bc/
-    abc
- 0: abc
-    abbc
- 0: abbc
-    abbbbc
- 0: abbbbc
-
-/.{1}/
-    abbbbc
- 0: a
-
-/.{3,4}/
-    abbbbc
- 0: abbb
-
-/ab{0,}bc/
-    abbbbc
- 0: abbbbc
-
-/ab+bc/
-    abbc
- 0: abbc
-    *** Failers
-No match
-    abc
-No match
-    abq
-No match
-
-/ab{1,}bc/
-
-/ab+bc/
-    abbbbc
- 0: abbbbc
-
-/ab{1,}bc/
-    abbbbc
- 0: abbbbc
-
-/ab{1,3}bc/
-    abbbbc
- 0: abbbbc
-
-/ab{3,4}bc/
-    abbbbc
- 0: abbbbc
-
-/ab{4,5}bc/
-    *** Failers
-No match
-    abq
-No match
-    abbbbc
-No match
-
-/ab?bc/
-    abbc
- 0: abbc
-    abc
- 0: abc
-
-/ab{0,1}bc/
-    abc
- 0: abc
-
-/ab?bc/
-
-/ab?c/
-    abc
- 0: abc
-
-/ab{0,1}c/
-    abc
- 0: abc
-
-/^abc$/
-    abc
- 0: abc
-    *** Failers
-No match
-    abbbbc
-No match
-    abcc
-No match
-
-/^abc/
-    abcc
- 0: abc
-
-/^abc$/
-
-/abc$/
-    aabc
- 0: abc
-    *** Failers
-No match
-    aabc
- 0: abc
-    aabcd
-No match
-
-/^/
-    abc
- 0: 
-
-/$/
-    abc
- 0: 
-
-/a.c/
-    abc
- 0: abc
-    axc
- 0: axc
-
-/a.*c/
-    axyzc
- 0: axyzc
-
-/a[bc]d/
-    abd
- 0: abd
-    *** Failers
-No match
-    axyzd
-No match
-    abc
-No match
-
-/a[b-d]e/
-    ace
- 0: ace
-
-/a[b-d]/
-    aac
- 0: ac
-
-/a[-b]/
-    a-
- 0: a-
-
-/a[b-]/
-    a-
- 0: a-
-
-/a]/
-    a]
- 0: a]
-
-/a[]]b/
-    a]b
- 0: a]b
-
-/a[^bc]d/
-    aed
- 0: aed
-    *** Failers
-No match
-    abd
-No match
-    abd
-No match
-
-/a[^-b]c/
-    adc
- 0: adc
-
-/a[^]b]c/
-    adc
- 0: adc
-    *** Failers
-No match
-    a-c
- 0: a-c
-    a]c
-No match
-
-/\ba\b/
-    a-
- 0: a
-    -a
- 0: a
-    -a-
- 0: a
-
-/\by\b/
-    *** Failers
-No match
-    xy
-No match
-    yz
-No match
-    xyz
-No match
-
-/\Ba\B/
-    *** Failers
- 0: a
-    a-
-No match
-    -a
-No match
-    -a-
-No match
-
-/\By\b/
-    xy
- 0: y
-
-/\by\B/
-    yz
- 0: y
-
-/\By\B/
-    xyz
- 0: y
-
-/\w/
-    a
- 0: a
-
-/\W/
-    -
- 0: -
-    *** Failers
- 0: *
-    -
- 0: -
-    a
-No match
-
-/a\sb/
-    a b
- 0: a b
-
-/a\Sb/
-    a-b
- 0: a-b
-    *** Failers
-No match
-    a-b
- 0: a-b
-    a b
-No match
-
-/\d/
-    1
- 0: 1
-
-/\D/
-    -
- 0: -
-    *** Failers
- 0: *
-    -
- 0: -
-    1
-No match
-
-/[\w]/
-    a
- 0: a
-
-/[\W]/
-    -
- 0: -
-    *** Failers
- 0: *
-    -
- 0: -
-    a
-No match
-
-/a[\s]b/
-    a b
- 0: a b
-
-/a[\S]b/
-    a-b
- 0: a-b
-    *** Failers
-No match
-    a-b
- 0: a-b
-    a b
-No match
-
-/[\d]/
-    1
- 0: 1
-
-/[\D]/
-    -
- 0: -
-    *** Failers
- 0: *
-    -
- 0: -
-    1
-No match
-
-/ab|cd/
-    abc
- 0: ab
-    abcd
- 0: ab
-
-/()ef/
-    def
- 0: ef
- 1: 
-
-/$b/
-
-/a\(b/
-    a(b
- 0: a(b
-
-/a\(*b/
-    ab
- 0: ab
-    a((b
- 0: a((b
-
-/a\\b/
-    a\b
-No match
-
-/((a))/
-    abc
- 0: a
- 1: a
- 2: a
-
-/(a)b(c)/
-    abc
- 0: abc
- 1: a
- 2: c
-
-/a+b+c/
-    aabbabc
- 0: abc
-
-/a{1,}b{1,}c/
-    aabbabc
- 0: abc
-
-/a.+?c/
-    abcabc
- 0: abc
-
-/(a+|b)*/
-    ab
- 0: ab
- 1: b
-
-/(a+|b){0,}/
-    ab
- 0: ab
- 1: b
-
-/(a+|b)+/
-    ab
- 0: ab
- 1: b
-
-/(a+|b){1,}/
-    ab
- 0: ab
- 1: b
-
-/(a+|b)?/
-    ab
- 0: a
- 1: a
-
-/(a+|b){0,1}/
-    ab
- 0: a
- 1: a
-
-/[^ab]*/
-    cde
- 0: cde
-
-/abc/
-    *** Failers
-No match
-    b
-No match
-    
-
-/a*/
-    
-
-/([abc])*d/
-    abbbcd
- 0: abbbcd
- 1: c
-
-/([abc])*bcd/
-    abcd
- 0: abcd
- 1: a
-
-/a|b|c|d|e/
-    e
- 0: e
-
-/(a|b|c|d|e)f/
-    ef
- 0: ef
- 1: e
-
-/abcd*efg/
-    abcdefg
- 0: abcdefg
-
-/ab*/
-    xabyabbbz
- 0: ab
-    xayabbbz
- 0: a
-
-/(ab|cd)e/
-    abcde
- 0: cde
- 1: cd
-
-/[abhgefdc]ij/
-    hij
- 0: hij
-
-/^(ab|cd)e/
-
-/(abc|)ef/
-    abcdef
- 0: ef
- 1: 
-
-/(a|b)c*d/
-    abcd
- 0: bcd
- 1: b
-
-/(ab|ab*)bc/
-    abc
- 0: abc
- 1: a
-
-/a([bc]*)c*/
-    abc
- 0: abc
- 1: bc
-
-/a([bc]*)(c*d)/
-    abcd
- 0: abcd
- 1: bc
- 2: d
-
-/a([bc]+)(c*d)/
-    abcd
- 0: abcd
- 1: bc
- 2: d
-
-/a([bc]*)(c+d)/
-    abcd
- 0: abcd
- 1: b
- 2: cd
-
-/a[bcd]*dcdcde/
-    adcdcde
- 0: adcdcde
-
-/a[bcd]+dcdcde/
-    *** Failers
-No match
-    abcde
-No match
-    adcdcde
-No match
-
-/(ab|a)b*c/
-    abc
- 0: abc
- 1: ab
-
-/((a)(b)c)(d)/
-    abcd
- 0: abcd
- 1: abc
- 2: a
- 3: b
- 4: d
-
-/[a-zA-Z_][a-zA-Z0-9_]*/
-    alpha
- 0: alpha
-
-/^a(bc+|b[eh])g|.h$/
-    abh
- 0: bh
-
-/(bc+d$|ef*g.|h?i(j|k))/
-    effgz
- 0: effgz
- 1: effgz
-    ij
- 0: ij
- 1: ij
- 2: j
-    reffgz
- 0: effgz
- 1: effgz
-    *** Failers
-No match
-    effg
-No match
-    bcdd
-No match
-
-/((((((((((a))))))))))/
-    a
- 0: a
- 1: a
- 2: a
- 3: a
- 4: a
- 5: a
- 6: a
- 7: a
- 8: a
- 9: a
-10: a
-
-/((((((((((a))))))))))\10/
-    aa
- 0: aa
- 1: a
- 2: a
- 3: a
- 4: a
- 5: a
- 6: a
- 7: a
- 8: a
- 9: a
-10: a
-
-/(((((((((a)))))))))/
-    a
- 0: a
- 1: a
- 2: a
- 3: a
- 4: a
- 5: a
- 6: a
- 7: a
- 8: a
- 9: a
-
-/multiple words of text/
-    *** Failers
-No match
-    aa
-No match
-    uh-uh
-No match
-
-/multiple words/
-    multiple words, yeah
- 0: multiple words
-
-/(.*)c(.*)/
-    abcde
- 0: abcde
- 1: ab
- 2: de
-
-/\((.*), (.*)\)/
-    (a, b)
- 0: (a, b)
- 1: a
- 2: b
-
-/[k]/
-
-/abcd/
-    abcd
- 0: abcd
-
-/a(bc)d/
-    abcd
- 0: abcd
- 1: bc
-
-/a[-]?c/
-    ac
- 0: ac
-
-/(abc)\1/
-    abcabc
- 0: abcabc
- 1: abc
-
-/([a-c]*)\1/
-    abcabc
- 0: abcabc
- 1: abc
-
-/(a)|\1/
-    a
- 0: a
- 1: a
-    *** Failers
- 0: a
- 1: a
-    ab
- 0: a
- 1: a
-    x
-No match
-
-/(([a-c])b*?\2)*/
-    ababbbcbc
- 0: ababb
- 1: bb
- 2: b
-
-/(([a-c])b*?\2){3}/
-    ababbbcbc
- 0: ababbbcbc
- 1: cbc
- 2: c
-
-/((\3|b)\2(a)x)+/
-    aaaxabaxbaaxbbax
- 0: bbax
- 1: bbax
- 2: b
- 3: a
-
-/((\3|b)\2(a)){2,}/
-    bbaababbabaaaaabbaaaabba
- 0: bbaaaabba
- 1: bba
- 2: b
- 3: a
-
-/abc/i
-    ABC
- 0: ABC
-    XABCY
- 0: ABC
-    ABABC
- 0: ABC
-    *** Failers
-No match
-    aaxabxbaxbbx
-No match
-    XBC
-No match
-    AXC
-No match
-    ABX
-No match
-
-/ab*c/i
-    ABC
- 0: ABC
-
-/ab*bc/i
-    ABC
- 0: ABC
-    ABBC
- 0: ABBC
-
-/ab*?bc/i
-    ABBBBC
- 0: ABBBBC
-
-/ab{0,}?bc/i
-    ABBBBC
- 0: ABBBBC
-
-/ab+?bc/i
-    ABBC
- 0: ABBC
-
-/ab+bc/i
-    *** Failers
-No match
-    ABC
-No match
-    ABQ
-No match
-
-/ab{1,}bc/i
-
-/ab+bc/i
-    ABBBBC
- 0: ABBBBC
-
-/ab{1,}?bc/i
-    ABBBBC
- 0: ABBBBC
-
-/ab{1,3}?bc/i
-    ABBBBC
- 0: ABBBBC
-
-/ab{3,4}?bc/i
-    ABBBBC
- 0: ABBBBC
-
-/ab{4,5}?bc/i
-    *** Failers
-No match
-    ABQ
-No match
-    ABBBBC
-No match
-
-/ab??bc/i
-    ABBC
- 0: ABBC
-    ABC
- 0: ABC
-
-/ab{0,1}?bc/i
-    ABC
- 0: ABC
-
-/ab??bc/i
-
-/ab??c/i
-    ABC
- 0: ABC
-
-/ab{0,1}?c/i
-    ABC
- 0: ABC
-
-/^abc$/i
-    ABC
- 0: ABC
-    *** Failers
-No match
-    ABBBBC
-No match
-    ABCC
-No match
-
-/^abc/i
-    ABCC
- 0: ABC
-
-/^abc$/i
-
-/abc$/i
-    AABC
- 0: ABC
-
-/^/i
-    ABC
- 0: 
-
-/$/i
-    ABC
- 0: 
-
-/a.c/i
-    ABC
- 0: ABC
-    AXC
- 0: AXC
-
-/a.*?c/i
-    AXYZC
- 0: AXYZC
-
-/a.*c/i
-    *** Failers
-No match
-    AABC
- 0: AABC
-    AXYZD
-No match
-
-/a[bc]d/i
-    ABD
- 0: ABD
-
-/a[b-d]e/i
-    ACE
- 0: ACE
-    *** Failers
-No match
-    ABC
-No match
-    ABD
-No match
-
-/a[b-d]/i
-    AAC
- 0: AC
-
-/a[-b]/i
-    A-
- 0: A-
-
-/a[b-]/i
-    A-
- 0: A-
-
-/a]/i
-    A]
- 0: A]
-
-/a[]]b/i
-    A]B
- 0: A]B
-
-/a[^bc]d/i
-    AED
- 0: AED
-
-/a[^-b]c/i
-    ADC
- 0: ADC
-    *** Failers
-No match
-    ABD
-No match
-    A-C
-No match
-
-/a[^]b]c/i
-    ADC
- 0: ADC
-
-/ab|cd/i
-    ABC
- 0: AB
-    ABCD
- 0: AB
-
-/()ef/i
-    DEF
- 0: EF
- 1: 
-
-/$b/i
-    *** Failers
-No match
-    A]C
-No match
-    B
-No match
-
-/a\(b/i
-    A(B
- 0: A(B
-
-/a\(*b/i
-    AB
- 0: AB
-    A((B
- 0: A((B
-
-/a\\b/i
-    A\B
-No match
-
-/((a))/i
-    ABC
- 0: A
- 1: A
- 2: A
-
-/(a)b(c)/i
-    ABC
- 0: ABC
- 1: A
- 2: C
-
-/a+b+c/i
-    AABBABC
- 0: ABC
-
-/a{1,}b{1,}c/i
-    AABBABC
- 0: ABC
-
-/a.+?c/i
-    ABCABC
- 0: ABC
-
-/a.*?c/i
-    ABCABC
- 0: ABC
-
-/a.{0,5}?c/i
-    ABCABC
- 0: ABC
-
-/(a+|b)*/i
-    AB
- 0: AB
- 1: B
-
-/(a+|b){0,}/i
-    AB
- 0: AB
- 1: B
-
-/(a+|b)+/i
-    AB
- 0: AB
- 1: B
-
-/(a+|b){1,}/i
-    AB
- 0: AB
- 1: B
-
-/(a+|b)?/i
-    AB
- 0: A
- 1: A
-
-/(a+|b){0,1}/i
-    AB
- 0: A
- 1: A
-
-/(a+|b){0,1}?/i
-    AB
- 0: 
-
-/[^ab]*/i
-    CDE
- 0: CDE
-
-/abc/i
-
-/a*/i
-    
-
-/([abc])*d/i
-    ABBBCD
- 0: ABBBCD
- 1: C
-
-/([abc])*bcd/i
-    ABCD
- 0: ABCD
- 1: A
-
-/a|b|c|d|e/i
-    E
- 0: E
-
-/(a|b|c|d|e)f/i
-    EF
- 0: EF
- 1: E
-
-/abcd*efg/i
-    ABCDEFG
- 0: ABCDEFG
-
-/ab*/i
-    XABYABBBZ
- 0: AB
-    XAYABBBZ
- 0: A
-
-/(ab|cd)e/i
-    ABCDE
- 0: CDE
- 1: CD
-
-/[abhgefdc]ij/i
-    HIJ
- 0: HIJ
-
-/^(ab|cd)e/i
-    ABCDE
-No match
-
-/(abc|)ef/i
-    ABCDEF
- 0: EF
- 1: 
-
-/(a|b)c*d/i
-    ABCD
- 0: BCD
- 1: B
-
-/(ab|ab*)bc/i
-    ABC
- 0: ABC
- 1: A
-
-/a([bc]*)c*/i
-    ABC
- 0: ABC
- 1: BC
-
-/a([bc]*)(c*d)/i
-    ABCD
- 0: ABCD
- 1: BC
- 2: D
-
-/a([bc]+)(c*d)/i
-    ABCD
- 0: ABCD
- 1: BC
- 2: D
-
-/a([bc]*)(c+d)/i
-    ABCD
- 0: ABCD
- 1: B
- 2: CD
-
-/a[bcd]*dcdcde/i
-    ADCDCDE
- 0: ADCDCDE
-
-/a[bcd]+dcdcde/i
-
-/(ab|a)b*c/i
-    ABC
- 0: ABC
- 1: AB
-
-/((a)(b)c)(d)/i
-    ABCD
- 0: ABCD
- 1: ABC
- 2: A
- 3: B
- 4: D
-
-/[a-zA-Z_][a-zA-Z0-9_]*/i
-    ALPHA
- 0: ALPHA
-
-/^a(bc+|b[eh])g|.h$/i
-    ABH
- 0: BH
-
-/(bc+d$|ef*g.|h?i(j|k))/i
-    EFFGZ
- 0: EFFGZ
- 1: EFFGZ
-    IJ
- 0: IJ
- 1: IJ
- 2: J
-    REFFGZ
- 0: EFFGZ
- 1: EFFGZ
-    *** Failers
-No match
-    ADCDCDE
-No match
-    EFFG
-No match
-    BCDD
-No match
-
-/((((((((((a))))))))))/i
-    A
- 0: A
- 1: A
- 2: A
- 3: A
- 4: A
- 5: A
- 6: A
- 7: A
- 8: A
- 9: A
-10: A
-
-/((((((((((a))))))))))\10/i
-    AA
- 0: AA
- 1: A
- 2: A
- 3: A
- 4: A
- 5: A
- 6: A
- 7: A
- 8: A
- 9: A
-10: A
-
-/(((((((((a)))))))))/i
-    A
- 0: A
- 1: A
- 2: A
- 3: A
- 4: A
- 5: A
- 6: A
- 7: A
- 8: A
- 9: A
-
-/(?:(?:(?:(?:(?:(?:(?:(?:(?:(a))))))))))/i
-    A
- 0: A
- 1: A
-
-/(?:(?:(?:(?:(?:(?:(?:(?:(?:(a|b|c))))))))))/i
-    C
- 0: C
- 1: C
-
-/multiple words of text/i
-    *** Failers
-No match
-    AA
-No match
-    UH-UH
-No match
-
-/multiple words/i
-    MULTIPLE WORDS, YEAH
- 0: MULTIPLE WORDS
-
-/(.*)c(.*)/i
-    ABCDE
- 0: ABCDE
- 1: AB
- 2: DE
-
-/\((.*), (.*)\)/i
-    (A, B)
- 0: (A, B)
- 1: A
- 2: B
-
-/[k]/i
-
-/abcd/i
-    ABCD
- 0: ABCD
-
-/a(bc)d/i
-    ABCD
- 0: ABCD
- 1: BC
-
-/a[-]?c/i
-    AC
- 0: AC
-
-/(abc)\1/i
-    ABCABC
- 0: ABCABC
- 1: ABC
-
-/([a-c]*)\1/i
-    ABCABC
- 0: ABCABC
- 1: ABC
-
-/a(?!b)./
-    abad
- 0: ad
-
-/a(?=d)./
-    abad
- 0: ad
-
-/a(?=c|d)./
-    abad
- 0: ad
-
-/a(?:b|c|d)(.)/
-    ace
- 0: ace
- 1: e
-
-/a(?:b|c|d)*(.)/
-    ace
- 0: ace
- 1: e
-
-/a(?:b|c|d)+?(.)/
-    ace
- 0: ace
- 1: e
-    acdbcdbe
- 0: acd
- 1: d
-
-/a(?:b|c|d)+(.)/
-    acdbcdbe
- 0: acdbcdbe
- 1: e
-
-/a(?:b|c|d){2}(.)/
-    acdbcdbe
- 0: acdb
- 1: b
-
-/a(?:b|c|d){4,5}(.)/
-    acdbcdbe
- 0: acdbcdb
- 1: b
-
-/a(?:b|c|d){4,5}?(.)/
-    acdbcdbe
- 0: acdbcd
- 1: d
-
-/((foo)|(bar))*/
-    foobar
- 0: foobar
- 1: bar
- 2: foo
- 3: bar
-
-/a(?:b|c|d){6,7}(.)/
-    acdbcdbe
- 0: acdbcdbe
- 1: e
-
-/a(?:b|c|d){6,7}?(.)/
-    acdbcdbe
- 0: acdbcdbe
- 1: e
-
-/a(?:b|c|d){5,6}(.)/
-    acdbcdbe
- 0: acdbcdbe
- 1: e
-
-/a(?:b|c|d){5,6}?(.)/
-    acdbcdbe
- 0: acdbcdb
- 1: b
-
-/a(?:b|c|d){5,7}(.)/
-    acdbcdbe
- 0: acdbcdbe
- 1: e
-
-/a(?:b|c|d){5,7}?(.)/
-    acdbcdbe
- 0: acdbcdb
- 1: b
-
-/a(?:b|(c|e){1,2}?|d)+?(.)/
-    ace
- 0: ace
- 1: c
- 2: e
-
-/^(.+)?B/
-    AB
- 0: AB
- 1: A
-
-/^([^a-z])|(\^)$/
-    .
- 0: .
- 1: .
-
-/^[<>]&/
-    <&OUT
- 0: <&
-
-/^(a\1?){4}$/
-    aaaaaaaaaa
- 0: aaaaaaaaaa
- 1: aaaa
-    *** Failers
-No match
-    AB
-No match
-    aaaaaaaaa
-No match
-    aaaaaaaaaaa
-No match
-
-/^(a(?(1)\1)){4}$/
-    aaaaaaaaaa
- 0: aaaaaaaaaa
- 1: aaaa
-    *** Failers
-No match
-    aaaaaaaaa
-No match
-    aaaaaaaaaaa
-No match
-
-/(?:(f)(o)(o)|(b)(a)(r))*/
-    foobar
- 0: foobar
- 1: f
- 2: o
- 3: o
- 4: b
- 5: a
- 6: r
-
-/(?<=a)b/
-    ab
- 0: b
-    *** Failers
-No match
-    cb
-No match
-    b
-No match
-
-/(?<!c)b/
-    ab
- 0: b
-    b
- 0: b
-    b
- 0: b
-
-/(?:..)*a/
-    aba
- 0: aba
-
-/(?:..)*?a/
-    aba
- 0: a
-
-/^(?:b|a(?=(.)))*\1/
-    abc
- 0: ab
- 1: b
-
-/^(){3,5}/
-    abc
- 0: 
- 1: 
-
-/^(a+)*ax/
-    aax
- 0: aax
- 1: a
-
-/^((a|b)+)*ax/
-    aax
- 0: aax
- 1: a
- 2: a
-
-/^((a|bc)+)*ax/
-    aax
- 0: aax
- 1: a
- 2: a
-
-/(a|x)*ab/
-    cab
- 0: ab
-
-/(a)*ab/
-    cab
- 0: ab
-
-/(?:(?i)a)b/
-    ab
- 0: ab
-
-/((?i)a)b/
-    ab
- 0: ab
- 1: a
-
-/(?:(?i)a)b/
-    Ab
- 0: Ab
-
-/((?i)a)b/
-    Ab
- 0: Ab
- 1: A
-
-/(?:(?i)a)b/
-    *** Failers
-No match
-    cb
-No match
-    aB
-No match
-
-/((?i)a)b/
-
-/(?i:a)b/
-    ab
- 0: ab
-
-/((?i:a))b/
-    ab
- 0: ab
- 1: a
-
-/(?i:a)b/
-    Ab
- 0: Ab
-
-/((?i:a))b/
-    Ab
- 0: Ab
- 1: A
-
-/(?i:a)b/
-    *** Failers
-No match
-    aB
-No match
-    aB
-No match
-
-/((?i:a))b/
-
-/(?:(?-i)a)b/i
-    ab
- 0: ab
-
-/((?-i)a)b/i
-    ab
- 0: ab
- 1: a
-
-/(?:(?-i)a)b/i
-    aB
- 0: aB
-
-/((?-i)a)b/i
-    aB
- 0: aB
- 1: a
-
-/(?:(?-i)a)b/i
-    *** Failers
-No match
-    aB
- 0: aB
-    Ab
-No match
-
-/((?-i)a)b/i
-
-/(?:(?-i)a)b/i
-    aB
- 0: aB
-
-/((?-i)a)b/i
-    aB
- 0: aB
- 1: a
-
-/(?:(?-i)a)b/i
-    *** Failers
-No match
-    Ab
-No match
-    AB
-No match
-
-/((?-i)a)b/i
-
-/(?-i:a)b/i
-    ab
- 0: ab
-
-/((?-i:a))b/i
-    ab
- 0: ab
- 1: a
-
-/(?-i:a)b/i
-    aB
- 0: aB
-
-/((?-i:a))b/i
-    aB
- 0: aB
- 1: a
-
-/(?-i:a)b/i
-    *** Failers
-No match
-    AB
-No match
-    Ab
-No match
-
-/((?-i:a))b/i
-
-/(?-i:a)b/i
-    aB
- 0: aB
-
-/((?-i:a))b/i
-    aB
- 0: aB
- 1: a
-
-/(?-i:a)b/i
-    *** Failers
-No match
-    Ab
-No match
-    AB
-No match
-
-/((?-i:a))b/i
-
-/((?-i:a.))b/i
-    *** Failers
-No match
-    AB
-No match
-    a\nB
-No match
-
-/((?s-i:a.))b/i
-    a\nB
- 0: a\x0aB
- 1: a\x0a
-
-/(?:c|d)(?:)(?:a(?:)(?:b)(?:b(?:))(?:b(?:)(?:b)))/
-    cabbbb
- 0: cabbbb
-
-/(?:c|d)(?:)(?:aaaaaaaa(?:)(?:bbbbbbbb)(?:bbbbbbbb(?:))(?:bbbbbbbb(?:)(?:bbbbbbbb)))/
-    caaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
- 0: caaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
-
-/(ab)\d\1/i
-    Ab4ab
- 0: Ab4ab
- 1: Ab
-    ab4Ab
- 0: ab4Ab
- 1: ab
-
-/foo\w*\d{4}baz/
-    foobar1234baz
- 0: foobar1234baz
-
-/x(~~)*(?:(?:F)?)?/
-    x~~
- 0: x~~
- 1: ~~
-
-/^a(?#xxx){3}c/
-    aaac
- 0: aaac
-
-/^a (?#xxx) (?#yyy) {3}c/x
-    aaac
- 0: aaac
-
-/(?<![cd])b/
-    *** Failers
-No match
-    B\nB
-No match
-    dbcb
-No match
-
-/(?<![cd])[ab]/
-    dbaacb
- 0: a
-
-/(?<!(c|d))b/
-
-/(?<!(c|d))[ab]/
-    dbaacb
- 0: a
-
-/(?<!cd)[ab]/
-    cdaccb
- 0: b
-
-/^(?:a?b?)*$/
-    *** Failers
-No match
-    dbcb
-No match
-    a--
-No match
-
-/((?s)^a(.))((?m)^b$)/
-    a\nb\nc\n
- 0: a\x0ab
- 1: a\x0a
- 2: \x0a
- 3: b
-
-/((?m)^b$)/
-    a\nb\nc\n
- 0: b
- 1: b
-
-/(?m)^b/
-    a\nb\n
- 0: b
-
-/(?m)^(b)/
-    a\nb\n
- 0: b
- 1: b
-
-/((?m)^b)/
-    a\nb\n
- 0: b
- 1: b
-
-/\n((?m)^b)/
-    a\nb\n
- 0: \x0ab
- 1: b
-
-/((?s).)c(?!.)/
-    a\nb\nc\n
- 0: \x0ac
- 1: \x0a
-    a\nb\nc\n
- 0: \x0ac
- 1: \x0a
-
-/((?s)b.)c(?!.)/
-    a\nb\nc\n
- 0: b\x0ac
- 1: b\x0a
-    a\nb\nc\n
- 0: b\x0ac
- 1: b\x0a
-
-/^b/
-
-/()^b/
-    *** Failers
-No match
-    a\nb\nc\n
-No match
-    a\nb\nc\n
-No match
-
-/((?m)^b)/
-    a\nb\nc\n
- 0: b
- 1: b
-
-/(?(1)a|b)/
-
-/(?(1)b|a)/
-    a
- 0: a
-
-/(x)?(?(1)a|b)/
-    *** Failers
-No match
-    a
-No match
-    a
-No match
-
-/(x)?(?(1)b|a)/
-    a
- 0: a
-
-/()?(?(1)b|a)/
-    a
- 0: a
-
-/()(?(1)b|a)/
-
-/()?(?(1)a|b)/
-    a
- 0: a
- 1: 
-
-/^(\()?blah(?(1)(\)))$/
-    (blah)
- 0: (blah)
- 1: (
- 2: )
-    blah
- 0: blah
-    *** Failers
-No match
-    a
-No match
-    blah)
-No match
-    (blah
-No match
-
-/^(\(+)?blah(?(1)(\)))$/
-    (blah)
- 0: (blah)
- 1: (
- 2: )
-    blah
- 0: blah
-    *** Failers
-No match
-    blah)
-No match
-    (blah
-No match
-
-/(?(?!a)a|b)/
-
-/(?(?!a)b|a)/
-    a
- 0: a
-
-/(?(?=a)b|a)/
-    *** Failers
-No match
-    a
-No match
-    a
-No match
-
-/(?(?=a)a|b)/
-    a
- 0: a
-
-/(?=(a+?))(\1ab)/
-    aaab
- 0: aab
- 1: a
- 2: aab
-
-/^(?=(a+?))\1ab/
-
-/(\w+:)+/
-    one:
- 0: one:
- 1: one:
-
-/$(?<=^(a))/
-    a
- 0: 
- 1: a
-
-/(?=(a+?))(\1ab)/
-    aaab
- 0: aab
- 1: a
- 2: aab
-
-/^(?=(a+?))\1ab/
-    *** Failers
-No match
-    aaab
-No match
-    aaab
-No match
-
-/([\w:]+::)?(\w+)$/
-    abcd
- 0: abcd
- 1: <unset>
- 2: abcd
-    xy:z:::abcd
- 0: xy:z:::abcd
- 1: xy:z:::
- 2: abcd
-
-/^[^bcd]*(c+)/
-    aexycd
- 0: aexyc
- 1: c
-
-/(a*)b+/
-    caab
- 0: aab
- 1: aa
-
-/([\w:]+::)?(\w+)$/
-    abcd
- 0: abcd
- 1: <unset>
- 2: abcd
-    xy:z:::abcd
- 0: xy:z:::abcd
- 1: xy:z:::
- 2: abcd
-    *** Failers
- 0: Failers
- 1: <unset>
- 2: Failers
-    abcd:
-No match
-    abcd:
-No match
-
-/^[^bcd]*(c+)/
-    aexycd
- 0: aexyc
- 1: c
-
-/(>a+)ab/
-
-/(?>a+)b/
-    aaab
- 0: aaab
-
-/([[:]+)/
-    a:[b]:
- 0: :[
- 1: :[
-
-/([[=]+)/
-    a=[b]=
- 0: =[
- 1: =[
-
-/([[.]+)/
-    a.[b].
- 0: .[
- 1: .[
-
-/((?>a+)b)/
-    aaab
- 0: aaab
- 1: aaab
-
-/(?>(a+))b/
-    aaab
- 0: aaab
- 1: aaa
-
-/((?>[^()]+)|\([^()]*\))+/
-    ((abc(ade)ufh()()x
- 0: abc(ade)ufh()()x
- 1: x
-
-/a\Z/
-    *** Failers
-No match
-    aaab
-No match
-    a\nb\n
-No match
-
-/b\Z/
-    a\nb\n
- 0: b
-
-/b\z/
-
-/b\Z/
-    a\nb
- 0: b
-
-/b\z/
-    a\nb
- 0: b
-    *** Failers
-No match
-    
-/^(?>(?(1)\.|())[^\W_](?>[a-z0-9-]*[^\W_])?)+$/
-    a
- 0: a
- 1: 
-    abc
- 0: abc
- 1: 
-    a-b
- 0: a-b
- 1: 
-    0-9 
- 0: 0-9
- 1: 
-    a.b
- 0: a.b
- 1: 
-    5.6.7  
- 0: 5.6.7
- 1: 
-    the.quick.brown.fox
- 0: the.quick.brown.fox
- 1: 
-    a100.b200.300c  
- 0: a100.b200.300c
- 1: 
-    12-ab.1245 
- 0: 12-ab.1245
- 1: 
-    ***Failers
-No match
-    \
-No match
-    .a
-No match
-    -a
-No match
-    a-
-No match
-    a.  
-No match
-    a_b 
-No match
-    a.-
-No match
-    a..  
-No match
-    ab..bc 
-No match
-    the.quick.brown.fox-
-No match
-    the.quick.brown.fox.
-No match
-    the.quick.brown.fox_
-No match
-    the.quick.brown.fox+       
-No match
-
-/(?>.*)(?<=(abcd|wxyz))/
-    alphabetabcd
- 0: alphabetabcd
- 1: abcd
-    endingwxyz
- 0: endingwxyz
- 1: wxyz
-    *** Failers
-No match
-    a rather long string that doesn't end with one of them
-No match
-
-/word (?>(?:(?!otherword)[a-zA-Z0-9]+ ){0,30})otherword/
-    word cat dog elephant mussel cow horse canary baboon snake shark otherword
- 0: word cat dog elephant mussel cow horse canary baboon snake shark otherword
-    word cat dog elephant mussel cow horse canary baboon snake shark
-No match
-  
-/word (?>[a-zA-Z0-9]+ ){0,30}otherword/
-    word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope
-No match
-
-/(?<=\d{3}(?!999))foo/
-    999foo
- 0: foo
-    123999foo 
- 0: foo
-    *** Failers
-No match
-    123abcfoo
-No match
-    
-/(?<=(?!...999)\d{3})foo/
-    999foo
- 0: foo
-    123999foo 
- 0: foo
-    *** Failers
-No match
-    123abcfoo
-No match
-
-/(?<=\d{3}(?!999)...)foo/
-    123abcfoo
- 0: foo
-    123456foo 
- 0: foo
-    *** Failers
-No match
-    123999foo  
-No match
-    
-/(?<=\d{3}...)(?<!999)foo/
-    123abcfoo   
- 0: foo
-    123456foo 
- 0: foo
-    *** Failers
-No match
-    123999foo  
-No match
-
-/<a[\s]+href[\s]*=[\s]*          # find <a href=
- ([\"\'])?                       # find single or double quote
- (?(1) (.*?)\1 | ([^\s]+))       # if quote found, match up to next matching
-                                 # quote, otherwise match up to next space
-/isx
-    <a href=abcd xyz
- 0: <a href=abcd
- 1: <unset>
- 2: <unset>
- 3: abcd
-    <a href=\"abcd xyz pqr\" cats
- 0: <a href="abcd xyz pqr"
- 1: "
- 2: abcd xyz pqr
-    <a href=\'abcd xyz pqr\' cats
- 0: <a href='abcd xyz pqr'
- 1: '
- 2: abcd xyz pqr
-
-/<a\s+href\s*=\s*                # find <a href=
- (["'])?                         # find single or double quote
- (?(1) (.*?)\1 | (\S+))          # if quote found, match up to next matching
-                                 # quote, otherwise match up to next space
-/isx
-    <a href=abcd xyz
- 0: <a href=abcd
- 1: <unset>
- 2: <unset>
- 3: abcd
-    <a href=\"abcd xyz pqr\" cats
- 0: <a href="abcd xyz pqr"
- 1: "
- 2: abcd xyz pqr
-    <a href       =       \'abcd xyz pqr\' cats
- 0: <a href       =       'abcd xyz pqr'
- 1: '
- 2: abcd xyz pqr
-
-/<a\s+href(?>\s*)=(?>\s*)        # find <a href=
- (["'])?                         # find single or double quote
- (?(1) (.*?)\1 | (\S+))          # if quote found, match up to next matching
-                                 # quote, otherwise match up to next space
-/isx
-    <a href=abcd xyz
- 0: <a href=abcd
- 1: <unset>
- 2: <unset>
- 3: abcd
-    <a href=\"abcd xyz pqr\" cats
- 0: <a href="abcd xyz pqr"
- 1: "
- 2: abcd xyz pqr
-    <a href       =       \'abcd xyz pqr\' cats
- 0: <a href       =       'abcd xyz pqr'
- 1: '
- 2: abcd xyz pqr
-
-/((Z)+|A)*/
-    ZABCDEFG
- 0: ZA
- 1: A
- 2: Z
-
-/(Z()|A)*/
-    ZABCDEFG
- 0: ZA
- 1: A
- 2: 
-
-/(Z(())|A)*/
-    ZABCDEFG
- 0: ZA
- 1: A
- 2: 
- 3: 
-
-/((?>Z)+|A)*/
-    ZABCDEFG
- 0: ZA
- 1: A
-
-/((?>)+|A)*/
-    ZABCDEFG
- 0: 
- 1: 
-
-/a*/g
-    abbab
- 0: a
- 0: 
- 0: 
- 0: a
- 0: 
- 0: 
-
-/ End of test input /       
-
diff --git a/srclib/pcre/testdata/testoutput4 b/srclib/pcre/testdata/testoutput4
deleted file mode 100644
index d285224..0000000
--- a/srclib/pcre/testdata/testoutput4
+++ /dev/null
@@ -1,115 +0,0 @@
-PCRE version 3.2 12-May-2000
-
-/^[\w]+/
-    *** Failers
-No match
-    École
-No match
-
-/^[\w]+/Lfr
-    École
- 0: École
-
-/^[\w]+/
-    *** Failers
-No match
-    École
-No match
-
-/^[\W]+/
-    École
- 0: \xc9
-
-/^[\W]+/Lfr
-    *** Failers
- 0: *** 
-    École
-No match
-
-/[\b]/
-    \b
- 0: \x08
-    *** Failers
-No match
-    a
-No match
-
-/[\b]/Lfr
-    \b
- 0: \x08
-    *** Failers
-No match
-    a
-No match
-
-/^\w+/
-    *** Failers
-No match
-    École
-No match
-
-/^\w+/Lfr
-    École
- 0: École
-
-/(.+)\b(.+)/
-    École
- 0: \xc9cole
- 1: \xc9
- 2: cole
-
-/(.+)\b(.+)/Lfr
-    *** Failers
- 0: *** Failers
- 1: *** 
- 2: Failers
-    École
-No match
-
-/École/i
-    École
- 0: \xc9cole
-    *** Failers
-No match
-    école
-No match
-
-/École/iLfr
-    École
- 0: École
-    école
- 0: école
-
-/\w/IS
-Capturing subpattern count = 0
-No options
-No first char
-No need char
-Starting character set: 0 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N O P 
-  Q R S T U V W X Y Z _ a b c d e f g h i j k l m n o p q r s t u v w x y z 
-
-/\w/ISLfr
-Capturing subpattern count = 0
-No options
-No first char
-No need char
-Starting character set: 0 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N O P 
-  Q R S T U V W X Y Z _ a b c d e f g h i j k l m n o p q r s t u v w x y z 
-  À Á Â Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï Ð Ñ Ò Ó Ô Õ Ö Ø Ù Ú Û Ü Ý Þ ß à á â ã ä å 
-  æ ç è é ê ë ì í î ï ð ñ ò ó ô õ ö ø ù ú û ü ý þ ÿ 
-
-/^[\xc8-\xc9]/iLfr
-    École
- 0: É
-    école
- 0: é
-
-/^[\xc8-\xc9]/Lfr
-    École
- 0: É
-    *** Failers 
-No match
-    école
-No match
-
-
diff --git a/support/.cvsignore b/support/.cvsignore
deleted file mode 100644
index 18ec8a6..0000000
--- a/support/.cvsignore
+++ /dev/null
@@ -1,31 +0,0 @@
-.libs
-*.lo
-.deps
-Makefile
-*.mak
-rotatelogs
-htpasswd
-htdbm
-htdigest
-unescape
-inc2shtml
-httpd_monitor
-suexec
-logresolve
-ab
-apxs
-Debug
-Release
-apachectl
-checkgid
-dbmmanage
-envvars-std
-log_server_status
-logresolve.pl
-split-logfile
-phf_abuse_log.cgi
-*.plg
-*.aps
-*.dep
-*.mak
-*.rc
diff --git a/support/.indent.pro b/support/.indent.pro
deleted file mode 100644
index a9fbe9f..0000000
--- a/support/.indent.pro
+++ /dev/null
@@ -1,54 +0,0 @@
--i4 -npsl -di0 -br -nce -d0 -cli0 -npcs -nfc1
--TBUFF
--TFILE
--TTRANS
--TUINT4
--T_trans
--Tallow_options_t
--Tapache_sfio
--Tarray_header
--Tbool_int
--Tbuf_area
--Tbuff_struct
--Tbuffy
--Tcmd_how
--Tcmd_parms
--Tcommand_rec
--Tcommand_struct
--Tconn_rec
--Tcore_dir_config
--Tcore_server_config
--Tdir_maker_func
--Tevent
--Tglobals_s
--Thandler_func
--Thandler_rec
--Tjoblist_s
--Tlisten_rec
--Tmerger_func
--Tmode_t
--Tmodule
--Tmodule_struct
--Tmutex
--Tn_long
--Tother_child_rec
--Toverrides_t
--Tparent_score
--Tpid_t
--Tpiped_log
--Tpool
--Trequest_rec
--Trequire_line
--Trlim_t
--Tscoreboard
--Tsemaphore
--Tserver_addr_rec
--Tserver_rec
--Tserver_rec_chain
--Tshort_score
--Ttable
--Ttable_entry
--Tthread
--Tu_wide_int
--Tvtime_t
--Twide_int
diff --git a/support/Makefile.in b/support/Makefile.in
deleted file mode 100644
index 57da22f..0000000
--- a/support/Makefile.in
+++ /dev/null
@@ -1,64 +0,0 @@
-DISTCLEAN_TARGETS = apxs apachectl dbmmanage log_server_status \
-	logresolve.pl phf_abuse_log.cgi split-logfile
-
-PROGRAMS = htpasswd htdigest rotatelogs logresolve ab checkgid htdbm
-TARGETS  = $(PROGRAMS)
-
-PROGRAM_LDADD        = $(EXTRA_LDFLAGS) $(UTIL_LDFLAGS) $(PROGRAM_DEPENDENCIES) $(EXTRA_LIBS)
-PROGRAM_DEPENDENCIES = \
-	$(top_builddir)/srclib/apr-util/libaprutil.la \
-	$(top_builddir)/srclib/apr/libapr.la
-
-include $(top_builddir)/build/rules.mk
-
-install:
-	@test -d $(bindir) || $(MKINSTALLDIRS) $(bindir)
-	@test -d $(libexecdir) || $(MKINSTALLDIRS) $(libexecdir)
-	@cp -p $(top_builddir)/server/httpd.exp $(libexecdir)
-	@for i in apxs apachectl dbmmanage; do \
-	    if test -f "$(builddir)/$$i"; then \
-	        cp -p $$i $(sbindir); \
-	        chmod 755 $(sbindir)/$$i; \
-	    fi ; \
-	done
-	@if test -f "$(builddir)/envvars-std"; then \
-	    cp -p envvars-std $(sbindir); \
-	    if test ! -f $(sbindir)/envvars; then \
-	        cp -p envvars-std $(sbindir)/envvars ; \
-	    fi ; \
-	fi
-
-htpasswd_OBJECTS = htpasswd.lo
-htpasswd: $(htpasswd_OBJECTS)
-	$(LINK) $(htpasswd_LTFLAGS) $(htpasswd_OBJECTS) $(PROGRAM_LDADD)
-
-htdigest_OBJECTS = htdigest.lo
-htdigest: $(htdigest_OBJECTS)
-	$(LINK) $(htdigest_LTFLAGS) $(htdigest_OBJECTS) $(PROGRAM_LDADD)
-
-rotatelogs_OBJECTS = rotatelogs.lo
-rotatelogs: $(rotatelogs_OBJECTS)
-	$(LINK) $(rotatelogs_LTFLAGS) $(rotatelogs_OBJECTS) $(PROGRAM_LDADD)
-
-logresolve_OBJECTS = logresolve.lo
-logresolve: $(logresolve_OBJECTS)
-	$(LINK) $(logresolve_LTFLAGS) $(logresolve_OBJECTS) $(PROGRAM_LDADD)
-
-htdbm_OBJECTS = htdbm.lo
-htdbm: $(htdbm_OBJECTS)
-	$(LINK) $(htdbm_LTFLAGS) $(htdbm_OBJECTS) $(PROGRAM_LDADD)
-
-ab_OBJECTS = ab.lo
-ab: $(ab_OBJECTS)
-	$(LINK) $(ab_LTFLAGS) $(ab_OBJECTS) $(PROGRAM_LDADD)
-
-checkgid_OBJECTS = checkgid.lo
-checkgid: $(checkgid_OBJECTS)
-	$(LINK) $(checkgid_LTFLAGS) $(checkgid_OBJECTS) $(PROGRAM_LDADD)
-
-# suexec must be statically compiled. Otherwise it is not relocatable,
-# since LD_* environment variables are ignored in setuid programs.
-suexec_OBJECTS = suexec.lo
-suexec: $(suexec_OBJECTS)
-	$(LINK) -static $(suexec_OBJECTS) $(PROGRAM_LDADD)
-
diff --git a/support/NWGNUhtdigest b/support/NWGNUhtdigest
deleted file mode 100644
index 1cc1c96..0000000
--- a/support/NWGNUhtdigest
+++ /dev/null
@@ -1,246 +0,0 @@
-#
-# Make sure all needed macro's are defined
-#
-
-#
-# Get the 'head' of the build environment if necessary.  This includes default
-# targets and paths to tools
-#
-
-ifndef EnvironmentDefined
-include $(AP_WORK)\build\NWGNUhead.inc
-endif
-
-#
-# These directories will be at the beginning of the include list, followed by
-# INCDIRS
-#
-XINCDIRS	+= \
-			$(NWOS) \
-			$(AP_WORK)/srclib/apr/include \
-			$(AP_WORK)/srclib/apr-util/include \
-			$(AP_WORK)/srclib/apr/misc/netware \
-			$(AP_WORK)/srclib/apr \
-			$(EOLIST)
-
-#
-# These flags will come after CFLAGS
-#
-XCFLAGS		+= \
-			$(EOLIST)
-
-#
-# These defines will come after DEFINES
-#
-XDEFINES	+= \
-			$(EOLIST)
-
-#
-# These flags will be added to the link.opt file
-#
-XLFLAGS		+= \
-			$(EOLIST)
-
-#
-# These values will be appended to the correct variables based on the value of
-# RELEASE
-#
-ifeq "$(RELEASE)" "debug"
-XINCDIRS	+= \
-			$(EOLIST)
-
-XCFLAGS		+= \
-			$(EOLIST)
-
-XDEFINES	+= \
-			$(EOLIST)
-
-XLFLAGS		+= \
-		   	$(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "noopt"
-XINCDIRS	+= \
-			$(EOLIST)
-
-XCFLAGS		+= \
-			$(EOLIST)
-
-XDEFINES	+= \
-			$(EOLIST)
-
-XLFLAGS		+= \
-		   	$(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "release"
-XINCDIRS	+= \
-			$(EOLIST)
-
-XCFLAGS		+= \
-			$(EOLIST)
-
-XDEFINES	+= \
-			$(EOLIST)
-
-XLFLAGS		+= \
-			$(EOLIST)
-endif
-
-#
-# These are used by the link target if an NLM is being generated
-# This is used by the link 'name' directive to name the nlm.  If left blank
-# TARGET_nlm (see below) will be used.
-#
-NLM_NAME		= htdigest
-
-#
-# This is used by the link '-desc ' directive. 
-# If left blank, NLM_NAME will be used.
-#
-NLM_DESCRIPTION	= HT Digest Utility for NetWare
-
-#
-# This is used by the '-threadname' directive.  If left blank,
-# NLM_NAME Thread will be used.
-#
-NLM_THREAD_NAME	= htdigest
-
-#
-# If this is specified, it will override VERSION value in 
-# $(AP_WORK)\build\NWGNUenvironment.inc
-#
-NLM_VERSION		=
-
-#
-# If this is specified, it will override the default of 64K
-#
-NLM_STACK_SIZE	= 8192
-
-
-#
-# If this is specified it will be used by the link '-entry' directive
-#
-NLM_ENTRY_SYM	= _LibCPrelude
-
-#
-# If this is specified it will be used by the link '-exit' directive
-#
-NLM_EXIT_SYM	= _LibCPostlude
-
-#
-# If this is specified it will be used by the link '-check' directive
-#
-NLM_CHECK_SYM	=
-
-#
-# If these are specified it will be used by the link '-flags' directive
-#
-NLM_FLAGS		= AUTOUNLOAD, PSEUDOPREEMPTION
-
-#
-# If this is specified it will be linked in with the XDCData option in the def 
-# file instead of the default of $(NWOS)/apache.xdc.  XDCData can be disabled
-# by setting APACHE_UNIPROC in the environment
-#
-XDCDATA         = 
-
-#
-# If there is an NLM target, put it here
-#
-TARGET_nlm = \
-	$(OBJDIR)/htdigest.nlm \
-	$(EOLIST)
-
-#
-# If there is an LIB target, put it here
-#
-TARGET_lib = \
-	$(EOLIST)
-
-#
-# These are the OBJ files needed to create the NLM target above.
-# Paths must all use the '/' character
-#
-FILES_nlm_objs = \
-	$(OBJDIR)/htdigest.o \
-	$(EOLIST)
-
-#
-# These are the LIB files needed to create the NLM target above.
-# These will be added as a library command in the link.opt file.
-#
-FILES_nlm_libs = \
-   	libcpre.o \
-	$(EOLIST)
-
-#
-# These are the modules that the above NLM target depends on to load.
-# These will be added as a module command in the link.opt file.
-#
-FILES_nlm_modules = \
-	aprlib \
-	libc \
-	$(EOLIST)
-
-#
-# If the nlm has a msg file, put it's path here
-#
-FILE_nlm_msg =
- 
-#
-# If the nlm has a hlp file put it's path here
-#
-FILE_nlm_hlp =
-
-#
-# If this is specified, it will override $(NWOS)\copyright.txt.
-#
-FILE_nlm_copyright =
-
-#
-# Any additional imports go here
-#
-FILES_nlm_Ximports = \
-	@$(APR)/aprlib.imp \
-	@libc.imp \
-	$(EOLIST)
- 
-#   
-# Any symbols exported to here
-#
-FILES_nlm_exports = \
-	$(EOLIST)
-	
-#   
-# These are the OBJ files needed to create the LIB target above.
-# Paths must all use the '/' character
-#
-FILES_lib_objs = \
-		$(EOLIST)
-
-#
-# implement targets and dependancies (leave this section alone)
-#
-
-libs :: $(OBJDIR) $(TARGET_lib)
-
-nlms :: libs $(TARGET_nlm)
-
-#
-# Updated this target to create necessary directories and copy files to the 
-# correct place.  (See $(AP_WORK)\build\NWGNUhead.inc for examples)
-#
-install :: nlms FORCE
-
-#
-# Any specialized rules here
-#
-
-#
-# Include the 'tail' makefile that has targets that depend on variables defined
-# in this makefile
-#
-
-include $(AP_WORK)\build\NWGNUtail.inc
-
diff --git a/support/NWGNUhtpasswd b/support/NWGNUhtpasswd
deleted file mode 100644
index 7000529..0000000
--- a/support/NWGNUhtpasswd
+++ /dev/null
@@ -1,246 +0,0 @@
-#
-# Make sure all needed macro's are defined
-#
-
-#
-# Get the 'head' of the build environment if necessary.  This includes default
-# targets and paths to tools
-#
-
-ifndef EnvironmentDefined
-include $(AP_WORK)\build\NWGNUhead.inc
-endif
-
-#
-# These directories will be at the beginning of the include list, followed by
-# INCDIRS
-#
-XINCDIRS	+= \
-			$(NWOS) \
-			$(AP_WORK)/srclib/apr/include \
-			$(AP_WORK)/srclib/apr-util/include \
-			$(AP_WORK)/srclib/apr/misc/netware \
-			$(AP_WORK)/srclib/apr \
-			$(EOLIST)
-
-#
-# These flags will come after CFLAGS
-#
-XCFLAGS		+= \
-			$(EOLIST)
-
-#
-# These defines will come after DEFINES
-#
-XDEFINES	+= \
-			$(EOLIST)
-
-#
-# These flags will be added to the link.opt file
-#
-XLFLAGS		+= \
-			$(EOLIST)
-
-#
-# These values will be appended to the correct variables based on the value of
-# RELEASE
-#
-ifeq "$(RELEASE)" "debug"
-XINCDIRS	+= \
-			$(EOLIST)
-
-XCFLAGS		+= \
-			$(EOLIST)
-
-XDEFINES	+= \
-			$(EOLIST)
-
-XLFLAGS		+= \
-		   	$(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "noopt"
-XINCDIRS	+= \
-			$(EOLIST)
-
-XCFLAGS		+= \
-			$(EOLIST)
-
-XDEFINES	+= \
-			$(EOLIST)
-
-XLFLAGS		+= \
-		   	$(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "release"
-XINCDIRS	+= \
-			$(EOLIST)
-
-XCFLAGS		+= \
-			$(EOLIST)
-
-XDEFINES	+= \
-			$(EOLIST)
-
-XLFLAGS		+= \
-			$(EOLIST)
-endif
-
-#
-# These are used by the link target if an NLM is being generated
-# This is used by the link 'name' directive to name the nlm.  If left blank
-# TARGET_nlm (see below) will be used.
-#
-NLM_NAME		= htpasswd
-
-#
-# This is used by the link '-desc ' directive. 
-# If left blank, NLM_NAME will be used.
-#
-NLM_DESCRIPTION	= HT Password Utility for NetWare
-
-#
-# This is used by the '-threadname' directive.  If left blank,
-# NLM_NAME Thread will be used.
-#
-NLM_THREAD_NAME	= htpasswd
-
-#
-# If this is specified, it will override VERSION value in 
-# $(AP_WORK)\build\NWGNUenvironment.inc
-#
-NLM_VERSION		=
-
-#
-# If this is specified, it will override the default of 64K
-#
-NLM_STACK_SIZE	= 8192
-
-
-#
-# If this is specified it will be used by the link '-entry' directive
-#
-NLM_ENTRY_SYM	= _LibCPrelude
-
-#
-# If this is specified it will be used by the link '-exit' directive
-#
-NLM_EXIT_SYM	= _LibCPostlude
-
-#
-# If this is specified it will be used by the link '-check' directive
-#
-NLM_CHECK_SYM	=
-
-#
-# If these are specified it will be used by the link '-flags' directive
-#
-NLM_FLAGS		=  AUTOUNLOAD, PSEUDOPREEMPTION
-
-#
-# If this is specified it will be linked in with the XDCData option in the def 
-# file instead of the default of $(NWOS)/apache.xdc.  XDCData can be disabled
-# by setting APACHE_UNIPROC in the environment
-#
-XDCDATA         = 
-
-#
-# If there is an NLM target, put it here
-#
-TARGET_nlm = \
-	$(OBJDIR)/htpasswd.nlm \
-	$(EOLIST)
-
-#
-# If there is an LIB target, put it here
-#
-TARGET_lib = \
-	$(EOLIST)
-
-#
-# These are the OBJ files needed to create the NLM target above.
-# Paths must all use the '/' character
-#
-FILES_nlm_objs = \
-	$(OBJDIR)/htpasswd.o \
-	$(EOLIST)
-
-#
-# These are the LIB files needed to create the NLM target above.
-# These will be added as a library command in the link.opt file.
-#
-FILES_nlm_libs = \
-   	libcpre.o \
-	$(EOLIST)
-
-#
-# These are the modules that the above NLM target depends on to load.
-# These will be added as a module command in the link.opt file.
-#
-FILES_nlm_modules = \
-	aprlib \
-	libc \
-	$(EOLIST)
-
-#
-# If the nlm has a msg file, put it's path here
-#
-FILE_nlm_msg =
- 
-#
-# If the nlm has a hlp file put it's path here
-#
-FILE_nlm_hlp =
-
-#
-# If this is specified, it will override $(NWOS)\copyright.txt.
-#
-FILE_nlm_copyright =
-
-#
-# Any additional imports go here
-#
-FILES_nlm_Ximports = \
-	@$(APR)/aprlib.imp \
-	@libc.imp \
-	$(EOLIST)
- 
-#   
-# Any symbols exported to here
-#
-FILES_nlm_exports = \
-	$(EOLIST)
-	
-#   
-# These are the OBJ files needed to create the LIB target above.
-# Paths must all use the '/' character
-#
-FILES_lib_objs = \
-		$(EOLIST)
-
-#
-# implement targets and dependancies (leave this section alone)
-#
-
-libs :: $(OBJDIR) $(TARGET_lib)
-
-nlms :: libs $(TARGET_nlm)
-
-#
-# Updated this target to create necessary directories and copy files to the 
-# correct place.  (See $(AP_WORK)\build\NWGNUhead.inc for examples)
-#
-install :: nlms FORCE
-
-#
-# Any specialized rules here
-#
-
-#
-# Include the 'tail' makefile that has targets that depend on variables defined
-# in this makefile
-#
-
-include $(AP_WORK)\build\NWGNUtail.inc
-
diff --git a/support/NWGNUmakefile b/support/NWGNUmakefile
deleted file mode 100644
index 8a1aef5..0000000
--- a/support/NWGNUmakefile
+++ /dev/null
@@ -1,245 +0,0 @@
-#
-# Declare the sub-directories to be built here
-#
-
-SUBDIRS = \
-	$(EOLIST) 
-
-#
-# Get the 'head' of the build environment.  This includes default targets and
-# paths to tools
-#
-
-include $(AP_WORK)\build\NWGNUhead.inc
-
-#
-# build this level's files
-
-#
-# Make sure all needed macro's are defined
-#
-
-# These directories will be at the beginning of the include list, followed by
-# INCDIRS
-#
-XINCDIRS	+= \
-			$(EOLIST)
-
-#
-# These flags will come after CFLAGS
-#
-XCFLAGS		+= \
-			$(EOLIST)
-
-#
-# These defines will come after DEFINES
-#
-XDEFINES	+= \
-			$(EOLIST)
-
-#
-# These flags will be added to the link.opt file
-#
-XLFLAGS		+= \
-			$(EOLIST)
-
-#
-# These values will be appended to the correct variables based on the value of
-# RELEASE
-#
-ifeq "$(RELEASE)" "debug"
-XINCDIRS	+= \
-			$(EOLIST)
-
-XCFLAGS		+= \
-			$(EOLIST)
-
-XDEFINES	+= \
-			$(EOLIST)
-
-XLFLAGS		+= \
-		   	$(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "noopt"
-XINCDIRS	+= \
-			$(EOLIST)
-
-XCFLAGS		+= \
-			$(EOLIST)
-
-XDEFINES	+= \
-			$(EOLIST)
-
-XLFLAGS		+= \
-		   	$(EOLIST)
-endif
-
-ifeq "$(RELEASE)" "release"
-XINCDIRS	+= \
-			$(EOLIST)
-
-XCFLAGS		+= \
-			$(EOLIST)
-
-XDEFINES	+= \
-			$(EOLIST)
-
-XLFLAGS		+= \
-			$(EOLIST)
-endif
-
-#
-# These are used by the link target if an NLM is being generated
-# This is used by the link 'name' directive to name the nlm.  If left blank
-# TARGET_nlm (see below) will be used.
-#
-NLM_NAME		=
-
-#
-# This is used by the link '-desc ' directive. 
-# If left blank, NLM_NAME will be used.
-#
-NLM_DESCRIPTION	=
-
-#
-# This is used by the '-threadname' directive.  If left blank,
-# NLM_NAME Thread will be used.
-#
-NLM_THREAD_NAME	=
-
-#
-# If this is specified, it will override VERSION value in 
-# $(AP_WORK)\build\NWGNUenvironment.inc
-#
-NLM_VERSION		=
-
-#
-# If this is specified, it will override the default of 64K
-#
-NLM_STACK_SIZE	=
-
-
-#
-# If this is specified it will be used by the link '-entry' directive
-#
-NLM_ENTRY_SYM	=
-
-#
-# If this is specified it will be used by the link '-exit' directive
-#
-NLM_EXIT_SYM	=
-
-#
-# If this is specified it will be used by the link '-check' directive
-#
-NLM_CHECK_SYM	=
-
-#
-# If these are specified it will be used by the link '-flags' directive
-#
-NLM_FLAGS		=
-
-#
-# If this is specified it will be linked in with the XDCData option in the def 
-# file instead of the default of $(NWOS)/apache.xdc.  XDCData can be disabled
-# by setting APACHE_UNIPROC in the environment
-#
-XDCDATA         = 
-
-#
-# If there is an NLM target, put it here
-#
-TARGET_nlm = \
-	$(OBJDIR)/htpasswd.nlm \
-	$(OBJDIR)/htdigest.nlm \
-	$(EOLIST)
-
-#
-# If there is an LIB target, put it here
-#
-TARGET_lib = \
-	$(EOLIST)
-
-#
-# These are the OBJ files needed to create the NLM target above.
-# Paths must all use the '/' character
-#
-FILES_nlm_objs = \
-	$(EOLIST)
-
-#
-# These are the LIB files needed to create the NLM target above.
-# These will be added as a library command in the link.opt file.
-#
-FILES_nlm_libs = \
-	$(EOLIST)
-
-#
-# These are the modules that the above NLM target depends on to load.
-# These will be added as a module command in the link.opt file.
-#
-FILES_nlm_modules = \
-	$(EOLIST)
-
-#
-# If the nlm has a msg file, put it's path here
-#
-FILE_nlm_msg =
- 
-#
-# If the nlm has a hlp file put it's path here
-#
-FILE_nlm_hlp =
-
-#
-# If this is specified, it will override $(NWOS)\copyright.txt.
-#
-FILE_nlm_copyright =
-
-#
-# Any additional imports go here
-#
-FILES_nlm_Ximports = \
-	$(EOLIST)
- 
-#   
-# Any symbols exported to here
-#
-FILES_nlm_exports = \
-	$(EOLIST)
-	
-#   
-# These are the OBJ files needed to create the LIB target above.
-# Paths must all use the '/' character
-#
-FILES_lib_objs = \
-		$(EOLIST)
-
-#
-# implement targets and dependancies (leave this section alone)
-#
-
-libs :: $(OBJDIR) $(TARGET_lib)
-
-nlms :: libs $(TARGET_nlm)
-
-#
-# Updated this target to create necessary directories and copy files to the 
-# correct place.  (See $(AP_WORK)\build\NWGNUhead.inc for examples)
-#
-install :: nlms FORCE
-	copy $(OBJDIR)\*.nlm $(INSTALL)\Apache2\*.*
-
-#
-# Any specialized rules here
-#
-
-#
-# Include the 'tail' makefile that has targets that depend on variables defined
-# in this makefile
-#
-
-include $(AP_WORK)\build\NWGNUtail.inc
-
-
diff --git a/support/README b/support/README
deleted file mode 100644
index 80e9caf..0000000
--- a/support/README
+++ /dev/null
@@ -1,62 +0,0 @@
-Support files:
-
-ab
-	ABuse your server with this benchmarker. Rudimentary
-	command line testing tool.
-
-apachectl
-	Apache run-time Control script. To facilitate the
-	administrator and/or your rc.d scripts to control the 
-	functioning of the Apache httpd daemon.
-
-apxs
-	APache eXtenSion tool. Eases building and installing
-	DSO style modules.
-
-dbmmanage
-	Create and update user authentication files in the faster
-	DBM format used by mod_auth_db.
-
-htdigest
-	Create and update user authentication files used in
-	DIGEST authentification. See mod_auth_digest.
-
-htpasswd 
-	Create and update user authentication files used in
-	BASIC authentification. I.e. the htpasswd files.
-	See mod_auth.
-
-httpd.8
-	General apache man page.
-
-log_server_status
-	This script is designed to be run at a frequent interval by something
-	like cron.  It connects to the server and downloads the status
-	information.  It reformats the information to a single line and logs
-	it to a file. 
-
-logresolve
-	resolve hostnames for IP-adresses in Apache logfiles
-
-phf_abuse_log.cgi
-	This script can be used to detect people trying to abuse an ancient
-	and long plugged security hole which existed in a CGI script distributed
-	with Apache 1.0.3 and earlier versions.
-
-rotatelogs
-	rotate Apache logs without having to kill the server.
-
-split-logfile
-	This script will take a combined virtual hosts access
-	log file and break its contents into separate files.
-
-suexec
-	Switch User For Exec. Used internally by apache, 
-        see  the  document  `Apache  suEXEC  Support'
-	under http://www.apache.org/docs/suexec.html .
-
-SHA1
-	This directory includes some utilities to allow Apache 1.3.6 to 
-	recognize passwords in SHA1 format, as used by Netscape web 
-	servers. It is not installed by default.
-
diff --git a/support/SHA1/README.sha1 b/support/SHA1/README.sha1
deleted file mode 100644
index 3998e1f..0000000
--- a/support/SHA1/README.sha1
+++ /dev/null
@@ -1,34 +0,0 @@
-This directory includes some utilities to allow Apache 1.3.6 to 
-recognize passwords in SHA1 format, as used by Netscape web servers.  
-
-From Netscape's admin interface, export the password database to an 
-ldif file and then use convert.pl in this distribution to generate 
-apache style password files.  
-
-Note: SHA1 support is useful for migration purposes, but is less
-      secure than Apache's password format, since Apache's (MD5)
-      password format uses a random eight character salt to generate
-      one of many possible hashes for the same password.  Netscape
-      uses plain SHA1 without a salt, so the same password
-      will always generate the same hash, making it easier
-      to break since the search space is smaller.
-
-This code was contributed by Clinton Wong <clintdw@netcom.com>.
-
-README.sha1 
-	this file
-
-convert-sha1.pl 
-	takes an ldif dump from Netscape's web server on
-        standard in, outputs apache htpasswd format on standard out.
-
-        Usage: convert.pl < ldif > passwords
-
-htpasswd-sha1.pl
-	perl script to generate entries in apache htpasswd format.
-
-       	Usage: htpasswd-sha1.pl some_user some_password
-
-ldif-sha1.example
-	sample ldif dump with one sha1 password and one crypt password.
-
diff --git a/support/SHA1/convert-sha1.pl b/support/SHA1/convert-sha1.pl
deleted file mode 100644
index 3522802..0000000
--- a/support/SHA1/convert-sha1.pl
+++ /dev/null
@@ -1,36 +0,0 @@
-#!/usr/bin/perl -w
-use strict;
-
-# This is public domain code.  Do whatever you want with it.
-# It was originally included in Clinton Wong's Apache 1.3.6 SHA1/ldif
-# patch distribution as sample code for converting accounts from
-# ldif format (as used by Netscape web servers) to Apache password format.
-
-my $uid='';
-my $passwd='';
-
-while (my $line = <>) {
-  chomp $line;
-  if ( $line =~ /uid:\s*(.+)/) { $uid = $1 }
-  if ( $line =~ /userpassword:\s*(\{\w+\}.+)/) {
-    $passwd = $1;
-    $passwd =~ s/^\{crypt\}//i;  # Apache stores crypt without a magic string
-  }
-
-  if (length($line)==0) {
-
-    if (length $uid and length $passwd) {
-      print $uid, ':', $passwd, "\n";
-    } # output if we have something to print
-
-    $uid = '';
-    $passwd = '';
-
-  } # if newline
-} # while something to read
-
-# handle last entry if there isn't a newline before EOF
-    if (length $uid and length $passwd) {
-  print $uid, ':', $passwd, "\n";
-}
-
diff --git a/support/SHA1/htpasswd-sha1.pl b/support/SHA1/htpasswd-sha1.pl
deleted file mode 100644
index ad624d1..0000000
--- a/support/SHA1/htpasswd-sha1.pl
+++ /dev/null
@@ -1,22 +0,0 @@
-#!/usr/bin/perl -w
-use strict;
-#
-# Utility which takes a username and password
-# on the command line and generates a username
-# sha1-encrytped password on the stdout.
-# 
-# Typical useage:
-# 	./htpasswd-sha1.pl dirkx MySecret >> sha1-passwd
-#
-# This is public domain code.  Do whatever you want with it.
-# It was originally included in Clinton Wong's Apache 1.3.6 SHA1/ldif
-# patch distribution as sample code for generating entries for
-# Apache password files using SHA1.
-
-use MIME::Base64;  # http://www.cpan.org/modules/by-module/MIME/
-use Digest::SHA1;  # http://www.cpan.org/modules/by-module/MD5/
-
-if ($#ARGV!=1) { die "Usage $0: user password\n" }
-
-print $ARGV[0], ':{SHA}', encode_base64( Digest::SHA1::sha1($ARGV[1]) );
-
diff --git a/support/SHA1/ldif-sha1.example b/support/SHA1/ldif-sha1.example
deleted file mode 100644
index b8fe917..0000000
--- a/support/SHA1/ldif-sha1.example
+++ /dev/null
@@ -1,19 +0,0 @@
-dn: cn=someuser
-cn: someuser
-sn: someuser
-objectclass: top
-objectclass: person
-objectclass: organizationalPerson
-objectclass: inetOrgPerson
-uid: someuser
-userpassword: {SHA}GvF+c3IdvgxAARuC7Uuxp9vjzik=
-
-dn: cn=anotheruser
-cn: anotheruser
-sn: anotheruser
-objectclass: top
-objectclass: person
-objectclass: organizationalPerson
-objectclass: inetOrgPerson
-uid: anotheruser
-userpassword: {crypt}eFnp.4sz5XnH6
diff --git a/support/ab.c b/support/ab.c
deleted file mode 100644
index 8063e09..0000000
--- a/support/ab.c
+++ /dev/null
@@ -1,1682 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-/*
-   ** This program is based on ZeusBench V1.0 written by Adam Twiss
-   ** which is Copyright (c) 1996 by Zeus Technology Ltd. http://www.zeustech.net/
-   **
-   ** This software is provided "as is" and any express or implied waranties,
-   ** including but not limited to, the implied warranties of merchantability and
-   ** fitness for a particular purpose are disclaimed.  In no event shall
-   ** Zeus Technology Ltd. be liable for any direct, indirect, incidental, special,
-   ** exemplary, or consequential damaged (including, but not limited to,
-   ** procurement of substitute good or services; loss of use, data, or profits;
-   ** or business interruption) however caused and on theory of liability.  Whether
-   ** in contract, strict liability or tort (including negligence or otherwise)
-   ** arising in any way out of the use of this software, even if advised of the
-   ** possibility of such damage.
-   **
- */
-
-/*
-   ** HISTORY:
-   **    - Originally written by Adam Twiss <adam@zeus.co.uk>, March 1996
-   **      with input from Mike Belshe <mbelshe@netscape.com> and
-   **      Michael Campanella <campanella@stevms.enet.dec.com>
-   **    - Enhanced by Dean Gaudet <dgaudet@apache.org>, November 1997
-   **    - Cleaned up by Ralf S. Engelschall <rse@apache.org>, March 1998
-   **    - POST and verbosity by Kurt Sussman <kls@merlot.com>, August 1998
-   **    - HTML table output added by David N. Welton <davidw@prosa.it>, January 1999
-   **    - Added Cookie, Arbitrary header and auth support. <dirkx@webweaving.org>, April 1999
-   ** Version 1.3d
-   **    - Increased version number - as some of the socket/error handling has
-   **      fundamentally changed - and will give fundamentally different results
-   **      in situations where a server is dropping requests. Therefore you can
-   **      no longer compare results of AB as easily. Hence the inc of the version.
-   **      They should be closer to the truth though. Sander & <dirkx@covalent.net>, End 2000.
-   **    - Fixed proxy functionality, added median/mean statistics, added gnuplot
-   **      output option, added _experimental/rudimentary_ SSL support. Added
-   **      confidence guestimators and warnings. Sander & <dirkx@covalent.net>, End 2000
-   **    - Fixed serious int overflow issues which would cause realistic (longer
-   **      than a few minutes) run's to have wrong (but believable) results. Added
-   **      trapping of connection errors which influenced measurements.
-   **      Contributed by Sander Temme - <sctemme@covalent.net>, Early 2001
-   ** Version 1.3e
-   **    - Changed timeout behavour during write to work whilst the sockets
-   **      are filling up and apr_write() does writes a few - but not all.
-   **      This will potentially change results. <dirkx@webweaving.org>, April 2001
-   **
- */
-
-/*
- * BUGS:
- *
- * - uses strcpy/etc.
- * - has various other poor buffer attacks related to the lazy parsing of
- *   response headers from the server
- * - doesn't implement much of HTTP/1.x, only accepts certain forms of
- *   responses
- * - (performance problem) heavy use of strstr shows up top in profile
- *   only an issue for loopback usage
- */
-
-/*  -------------------------------------------------------------------- */
-
-#if 'A' != 0x41
-/* Hmmm... This source code isn't being compiled in ASCII.
- * In order for data that flows over the network to make
- * sense, we need to translate to/from ASCII.
- */
-#define NOT_ASCII
-#endif
-
-/* affects include files on Solaris */
-#define BSD_COMP
-
-#include "apr.h"
-#include "apr_strings.h"
-#include "apr_network_io.h"
-#include "apr_file_io.h"
-#include "apr_time.h"
-#include "apr_getopt.h"
-#include "apr_general.h"
-#include <signal.h>
-#include "apr_lib.h"
-#include "ap_release.h"
-
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-#if APR_HAVE_STDIO_H
-#include <stdio.h>		/* for EOF */
-#endif
-#if APR_HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-
-#include "apr_base64.h"
-#ifdef NOT_ASCII
-#include "apr_xlate.h"
-#endif
-#if APR_HAVE_STDIO_H
-#include <stdio.h>
-#endif
-#if APR_HAVE_STDLIB_H
-#include <stdlib.h>
-
-#ifdef	USE_SSL
-#if ((!(RSAREF)) && (!(SYSSSL)))
-/* Libraries on most systems.. */
-#include <openssl/rsa.h>
-#include <openssl/crypto.h>
-#include <openssl/x509.h>
-#include <openssl/pem.h>
-#include <openssl/err.h>
-#include <openssl/ssl.h>
-#else
-/* Libraries for RSAref and SYSSSL */
-#include <rsa.h>
-#include <crypto.h>
-#include <x509.h>
-#include <pem.h>
-#include <err.h>
-#include <ssl.h>
-#endif
-#endif
-
-#include <math.h>
-#endif
-#if APR_HAVE_CTYPE_H
-#include <ctype.h>
-#endif
-
-/* ------------------- DEFINITIONS -------------------------- */
-
-#ifndef LLONG_MAX
-#define AB_MAX APR_INT64_C(0x7fffffffffffffff)
-#else
-#define AB_MAX LLONG_MAX
-#endif
-
-/* maximum number of requests on a time limited test */
-#define MAX_REQUESTS 50000
-
-/* good old state hostname */
-#define STATE_UNCONNECTED 0
-#define STATE_CONNECTING  1
-#define STATE_READ        2
-
-#define CBUFFSIZE (2048)
-
-struct connection {
-    apr_pool_t *ctx;
-    apr_socket_t *aprsock;
-    int state;
-    apr_size_t read;		/* amount of bytes read */
-    apr_size_t bread;		/* amount of body read */
-    apr_size_t rwrite, rwrote;	/* keep pointers in what we write - across
-				 * EAGAINs */
-    apr_size_t length;	        /* Content-Length value used for keep-alive */
-    char cbuff[CBUFFSIZE];	/* a buffer to store server response header */
-    int cbx;			/* offset in cbuffer */
-    int keepalive;		/* non-zero if a keep-alive request */
-    int gotheader;		/* non-zero if we have the entire header in
-				 * cbuff */
-    apr_time_t start,		/* Start of connection */
-               connect,		/* Connected, start writing */
-               endwrite,	/* Request written */
-               beginread,	/* First byte of input */
-               done;		/* Connection closed */
-
-    int socknum;
-#ifdef USE_SSL
-    SSL *ssl;
-#endif
-};
-
-struct data {
-#ifdef USE_SSL
-    /* XXXX insert SSL timings */
-#endif
-    int read;              /* number of bytes read */
-    apr_time_t starttime;  /* start time of connection in seconds since
-                            * Jan. 1, 1970 */
-    apr_interval_time_t waittime;   /* Between writing request and reading
-                                     * response */
-    apr_interval_time_t ctime;      /* time in ms to connect */
-    apr_interval_time_t time;       /* time in ms for connection */
-};
-
-#define ap_min(a,b) ((a)<(b))?(a):(b)
-#define ap_max(a,b) ((a)>(b))?(a):(b)
-
-/* --------------------- GLOBALS ---------------------------- */
-
-int verbosity = 0;		/* no verbosity by default */
-int posting = 0;		/* GET by default */
-int requests = 1;		/* Number of requests to make */
-int heartbeatres = 100;		/* How often do we say we're alive */
-int concurrency = 1;		/* Number of multiple requests to make */
-int percentile = 1;		/* Show percentile served */
-int confidence = 1;		/* Show confidence estimator and warnings */
-int tlimit = 0;			/* time limit in cs */
-int keepalive = 0;		/* try and do keepalive connections */
-char servername[1024];		/* name that server reports */
-char *hostname;			/* host name from URL */
-char *host_field;		/* value of "Host:" header field */
-char path[1024];		/* path name */
-char postfile[1024];		/* name of file containing post data */
-char *postdata;			/* *buffer containing data from postfile */
-apr_size_t postlen = 0;		/* length of data to be POSTed */
-char content_type[1024];	/* content type to put in POST header */
-char cookie[1024],		/* optional cookie line */
-     auth[1024],		/* optional (basic/uuencoded)
-				 * authentification */
-     hdrs[4096];		/* optional arbitrary headers */
-apr_port_t port;		/* port number */
-char proxyhost[1024];		/* proxy host name */
-int proxyport = 0;		/* proxy port */
-char connecthost[1024];
-apr_port_t connectport;
-char *gnuplot;			/* GNUplot file */
-char *csvperc;			/* CSV Percentile file */
-char url[1024];
-char fullurl[1024];
-int isproxy = 0;
-apr_short_interval_time_t aprtimeout = 30 * APR_USEC_PER_SEC;	/* timeout value */
- /*
-  * XXX - this is now a per read/write transact type of value
-  */
-
-int use_html = 0;		/* use html in the report */
-const char *tablestring;
-const char *trstring;
-const char *tdstring;
-
-apr_size_t doclen = 0;		/* the length the document should be */
-long started = 0;		/* number of requests started, so no excess */
-long totalread = 0;		/* total number of bytes read */
-long totalbread = 0;		/* totoal amount of entity body read */
-long totalposted = 0;		/* total number of bytes posted, inc. headers */
-long done = 0;			/* number of requests we have done */
-long doneka = 0;		/* number of keep alive connections done */
-long good = 0, bad = 0;		/* number of good and bad requests */
-long epipe = 0;			/* number of broken pipe writes */
-
-#ifdef USE_SSL
-int ssl = 0;
-SSL_CTX *ctx;
-#endif
-
-/* store error cases */
-int err_length = 0, err_conn = 0, err_except = 0;
-int err_response = 0;
-
-apr_time_t start, endtime;
-
-/* global request (and its length) */
-char _request[512];
-char *request = _request;
-apr_size_t reqlen;
-
-/* one global throw-away buffer to read stuff into */
-char buffer[8192];
-
-/* interesting percentiles */
-int percs[] = {50, 66, 75, 80, 90, 95, 98, 99, 100};
-
-struct connection *con;		/* connection array */
-struct data *stats;		/* date for each request */
-apr_pool_t *cntxt;
-
-apr_pollfd_t *readbits;
-
-apr_sockaddr_t *destsa;
-
-#ifdef NOT_ASCII
-apr_xlate_t *from_ascii, *to_ascii;
-#endif
-
-static void close_connection(struct connection * c);
-/* --------------------------------------------------------- */
-
-/* simple little function to write an error string and exit */
-
-static void err(char *s)
-{
-    fprintf(stderr, "%s\n", s);
-    if (done)
-        printf("Total of %ld requests completed\n" , done);
-    exit(1);
-}
-
-/* simple little function to write an APR error string and exit */
-
-static void apr_err(char *s, apr_status_t rv)
-{
-    char buf[120];
-
-    fprintf(stderr,
-	    "%s: %s (%d)\n",
-	    s, apr_strerror(rv, buf, sizeof buf), rv);
-    if (done)
-        printf("Total of %ld requests completed\n" , done);
-    exit(rv);
-}
-
-/* --------------------------------------------------------- */
-/* write out request to a connection - assumes we can write
- * (small) request out in one go into our new socket buffer
- *
- */
-static void write_request(struct connection * c)
-{
-    do {
-	apr_time_t tnow = apr_time_now();
-	apr_size_t l = c->rwrite;
-	apr_status_t e;
-
-	/*
-	 * First time round ?
-	 */
-	if (c->rwrite == 0) {
-	    apr_setsocketopt(c->aprsock, APR_SO_TIMEOUT, 0);
-	    c->connect = tnow;
-	    c->rwrite = reqlen;
-	    c->rwrote = 0;
-	    if (posting)
-		c->rwrite += postlen;
-	}
-	else if (tnow > c->connect + aprtimeout) {
-	    printf("Send request timed out!\n");
-	    close_connection(c);
-	    return;
-	}
-
-	e = apr_send(c->aprsock, request + c->rwrote, &l);
-
-	/*
-	 * Bail early on the most common case
-	 */
-	if (l == c->rwrite)
-	    break;
-
-	if (e != APR_SUCCESS) {
-	    /*
-	     * Let's hope this traps EWOULDBLOCK too !
-	     */
-	    if (!APR_STATUS_IS_EAGAIN(e)) {
-		epipe++;
-		printf("Send request failed!\n");
-		close_connection(c);
-	    }
-	    return;
-	}
-	c->rwrote += l;
-	c->rwrite -= l;
-    } while (1);
-
-    totalposted += c->rwrite;
-    c->state = STATE_READ;
-    c->endwrite = apr_time_now();
-    apr_poll_socket_add(readbits, c->aprsock, APR_POLLIN);
-}
-
-/* --------------------------------------------------------- */
-
-/* calculate and output results */
-
-static int compradre(struct data * a, struct data * b)
-{
-    if ((a->ctime) < (b->ctime))
-	return -1;
-    if ((a->ctime) > (b->ctime))
-	return +1;
-    return 0;
-}
-
-static int comprando(struct data * a, struct data * b)
-{
-    if ((a->time) < (b->time))
-	return -1;
-    if ((a->time) > (b->time))
-	return +1;
-    return 0;
-}
-
-static int compri(struct data * a, struct data * b)
-{
-    apr_interval_time_t p = a->time - a->ctime;
-    apr_interval_time_t q = b->time - b->ctime;
-    if (p < q)
-	return -1;
-    if (p > q)
-	return +1;
-    return 0;
-}
-
-static int compwait(struct data * a, struct data * b)
-{
-    if ((a->waittime) < (b->waittime))
-	return -1;
-    if ((a->waittime) > (b->waittime))
-	return 1;
-    return 0;
-}
-
-static void output_results(void)
-{
-    apr_interval_time_t timetakenusec;
-    float timetaken;
-
-    endtime = apr_time_now();
-    timetakenusec = endtime - start;
-    timetaken = (float) timetakenusec / APR_USEC_PER_SEC;
-    
-    printf("\r                                                                           \r");
-    printf("Server Software:        %s\n", servername);
-    printf("Server Hostname:        %s\n", hostname);
-    printf("Server Port:            %hd\n", port);
-    printf("\n");
-    printf("Document Path:          %s\n", path);
-    printf("Document Length:        %" APR_SIZE_T_FMT " bytes\n", doclen);
-    printf("\n");
-    printf("Concurrency Level:      %d\n", concurrency);
-    printf("Time taken for tests:   %ld.%03ld seconds\n",
-           (long) (timetakenusec / APR_USEC_PER_SEC),
-           (long) (timetakenusec % APR_USEC_PER_SEC));
-    printf("Complete requests:      %ld\n", done);
-    printf("Failed requests:        %ld\n", bad);
-    if (bad)
-	printf("   (Connect: %d, Length: %d, Exceptions: %d)\n",
-	       err_conn, err_length, err_except);
-    printf("Write errors:           %ld\n", epipe);
-    if (err_response)
-	printf("Non-2xx responses:      %d\n", err_response);
-    if (keepalive)
-	printf("Keep-Alive requests:    %ld\n", doneka);
-    printf("Total transferred:      %ld bytes\n", totalread);
-    if (posting > 0)
-	printf("Total POSTed:           %ld\n", totalposted);
-    printf("HTML transferred:       %ld bytes\n", totalbread);
-
-    /* avoid divide by zero */
-    if (timetaken) {
-	printf("Requests per second:    %.2f [#/sec] (mean)\n", 
-               (float) (done / timetaken));
-	printf("Time per request:       %.3f [ms] (mean)\n", 
-               (float) (concurrency * timetaken / done));
-	printf("Time per request:       %.3f [ms] (mean, across all concurrent requests)\n",
-	       (float) (timetaken / done));
-	printf("Transfer rate:          %.2f [Kbytes/sec] received\n",
-	       (float) (totalread / 1024 / timetaken));
-	if (posting > 0) {
-	    printf("                        %.2f kb/s sent\n",
-		   (float) (totalposted / timetaken / 1024));
-	    printf("                        %.2f kb/s total\n",
-		   (float) ((totalread + totalposted) / timetaken / 1024));
-	}
-    }
-
-    if (requests) {
-	/* work out connection times */
-	long i;
-	apr_time_t totalcon = 0, total = 0, totald = 0, totalwait = 0;
-        apr_interval_time_t mincon = AB_MAX, mintot = AB_MAX, mind = AB_MAX, 
-                            minwait = AB_MAX;
-        apr_interval_time_t maxcon = 0, maxtot = 0, maxd = 0, maxwait = 0;
-        apr_interval_time_t meancon = 0, meantot = 0, meand = 0, meanwait = 0;
-        double sdtot = 0, sdcon = 0, sdd = 0, sdwait = 0;
-
-	for (i = 0; i < requests; i++) {
-	    struct data s = stats[i];
-	    mincon = ap_min(mincon, s.ctime);
-	    mintot = ap_min(mintot, s.time);
-	    mind = ap_min(mind, s.time - s.ctime);
-	    minwait = ap_min(minwait, s.waittime);
-
-	    maxcon = ap_max(maxcon, s.ctime);
-	    maxtot = ap_max(maxtot, s.time);
-	    maxd = ap_max(maxd, s.time - s.ctime);
-	    maxwait = ap_max(maxwait, s.waittime);
-
-	    totalcon += s.ctime;
-	    total += s.time;
-	    totald += s.time - s.ctime;
-	    totalwait += s.waittime;
-	}
-	totalcon /= requests;
-	total /= requests;
-	totald /= requests;
-	totalwait /= requests;
-
-	for (i = 0; i < requests; i++) {
-	    struct data s = stats[i];
-            double a;
-            a = ((double)s.time - total);
-            sdtot += a * a;
-	    a = ((double)s.ctime - totalcon);
-	    sdcon += a * a;
-	    a = ((double)s.time - (double)s.ctime - totald);
-	    sdd += a * a;
-	    a = ((double)s.waittime - totalwait);
-	    sdwait += a * a;
-	}
-
-	sdtot = (requests > 1) ? sqrt(sdtot / (requests - 1)) : 0;
-	sdcon = (requests > 1) ? sqrt(sdcon / (requests - 1)) : 0;
-	sdd = (requests > 1) ? sqrt(sdd / (requests - 1)) : 0;
-	sdwait = (requests > 1) ? sqrt(sdwait / (requests - 1)) : 0;
-
-	if (gnuplot) {
-	    FILE *out = fopen(gnuplot, "w");
-	    long i;
-	    apr_time_t sttime;
-	    char tmstring[1024];/* XXXX */
-	    if (!out) {
-		perror("Cannot open gnuplot output file");
-		exit(1);
-	    }
-	    fprintf(out, "starttime\tseconds\tctime\tdtime\tttime\twait\n");
-	    for (i = 0; i < requests; i++) {
-                apr_time_t diff = stats[i].time - stats[i].ctime;
-
-		sttime = stats[i].starttime;
-		(void) apr_ctime(tmstring, sttime);
-		tmstring[strlen(tmstring) - 1] = '\0';	/* ctime returns a
-							 * string with a
-							 * trailing newline */
-		fprintf(out, "%s\t%" APR_TIME_T_FMT "\t%" APR_TIME_T_FMT "\t%" APR_TIME_T_FMT "\t%" APR_TIME_T_FMT "\t%" APR_TIME_T_FMT "\n",
-			tmstring,
-			sttime,
-			stats[i].ctime,
-			diff,
-			stats[i].time,
-			stats[i].waittime);
-	    }
-	    fclose(out);
-	}
-    /*
-     * XXX: what is better; this hideous cast of the compradre function; or
-     * the four warnings during compile ? dirkx just does not know and
-     * hates both/
-     */
-	qsort(stats, requests, sizeof(struct data),
-	      (int (*) (const void *, const void *)) compradre);
-	if ((requests > 1) && (requests % 2))
-	    meancon = (stats[requests / 2].ctime + stats[requests / 2 + 1].ctime) / 2;
-	else
-	    meancon = stats[requests / 2].ctime;
-
-	qsort(stats, requests, sizeof(struct data),
-	      (int (*) (const void *, const void *)) compri);
-	if ((requests > 1) && (requests % 2))
-	    meand = (stats[requests / 2].time + stats[requests / 2 + 1].time \
-	    -stats[requests / 2].ctime - stats[requests / 2 + 1].ctime) / 2;
-	else
-	    meand = stats[requests / 2].time - stats[requests / 2].ctime;
-
-	qsort(stats, requests, sizeof(struct data),
-	      (int (*) (const void *, const void *)) compwait);
-	if ((requests > 1) && (requests % 2))
-	    meanwait = (stats[requests / 2].waittime + stats[requests / 2 + 1].waittime) / 2;
-	else
-	    meanwait = stats[requests / 2].waittime;
-
-	qsort(stats, requests, sizeof(struct data),
-	      (int (*) (const void *, const void *)) comprando);
-	if ((requests > 1) && (requests % 2))
-	    meantot = (stats[requests / 2].time + stats[requests / 2 + 1].time) / 2;
-	else
-	    meantot = stats[requests / 2].time;
-
-	printf("\nConnection Times (ms)\n");
-
-	if (confidence) {
-#define CONF_FMT_STRING "%" APR_TIME_T_FMT " %5d %6.1f %" APR_TIME_T_FMT " %" APR_TIME_T_FMT "\n"
-	    printf("            min  mean[+/-sd] median   max\n");
-	    printf("Connect:    " CONF_FMT_STRING, 
-                   mincon, (int) (totalcon + 0.5), sdcon, meancon, maxcon);
-	    printf("Processing: " CONF_FMT_STRING,
-		   mind, (int) (totald + 0.5), sdd, meand, maxd);
-	    printf("Waiting:    " CONF_FMT_STRING,
-	           minwait, (int) (totalwait + 0.5), sdwait, meanwait, maxwait);
-	    printf("Total:      " CONF_FMT_STRING,
-		   mintot, (int) (total + 0.5), sdtot, meantot, maxtot);
-#undef CONF_FMT_STRING
-
-#define     SANE(what,avg,mean,sd) \
-              { \
-                double d = (double)avg - mean; \
-                if (d < 0) d = -d; \
-                if (d > 2 * sd ) \
-                    printf("ERROR: The median and mean for " what " are more than twice the standard\n" \
-                           "       deviation apart. These results are NOT reliable.\n"); \
-                else if (d > sd ) \
-                    printf("WARING: The median and mean for " what " are not within a normal deviation\n" \
-                           "        These results are propably not that reliable.\n"); \
-            }
-	    SANE("the initial connection time", totalcon, meancon, sdcon);
-	    SANE("the processing time", totald, meand, sdd);
-	    SANE("the waiting time", totalwait, meanwait, sdwait);
-	    SANE("the total time", total, meantot, sdtot);
-	}
-	else {
-	    printf("              min   avg   max\n");
-#define CONF_FMT_STRING "%5" APR_TIME_T_FMT " %5" APR_TIME_T_FMT "%5" APR_TIME_T_FMT "\n"
-	    printf("Connect:    " CONF_FMT_STRING, 
-                   mincon, totalcon / requests, maxcon);
-	    printf("Processing: " CONF_FMT_STRING, mintot - mincon, 
-                   (total / requests) - (totalcon / requests), 
-                   maxtot - maxcon);
-	    printf("Total:      " CONF_FMT_STRING, 
-                   mintot, total / requests, maxtot);
-#undef CONF_FMT_STRING
-	}
-
-
-	/* Sorted on total connect times */
-	if (percentile && (requests > 1)) {
-	    printf("\nPercentage of the requests served within a certain time (ms)\n");
-	    for (i = 0; i < sizeof(percs) / sizeof(int); i++)
-		if (percs[i] <= 0)
-		    printf(" 0%%  <0> (never)\n");
-                else if (percs[i] >= 100)
-		    printf(" 100%%  %5" APR_TIME_T_FMT " (longest request)\n",
-                           stats[requests - 1].time);
-                else
-		    printf("  %d%%  %5" APR_TIME_T_FMT "\n", percs[i], 
-                           stats[(int) (requests * percs[i] / 100)].time);
-	}
-	if (csvperc) {
-	    FILE *out = fopen(csvperc, "w");
-	    int i;
-	    if (!out) {
-		perror("Cannot open CSV output file");
-		exit(1);
-	    }
-	    fprintf(out, "" "Percentage served" "," "Time in ms" "\n");
-	    for (i = 0; i < 100; i++) {
-		apr_time_t t;
-		if (i == 0)
-		    t = stats[0].time;
-		else if (i == 100)
-		    t = stats[requests - 1].time;
-		else
-		    t = stats[(int) (0.5 + requests * i / 100.0)].time;
-		fprintf(out, "%d,%e\n", i, (double)t);
-	    }
-	    fclose(out);
-        }
-
-    }
-}
-
-/* --------------------------------------------------------- */
-
-/* calculate and output results in HTML  */
-
-static void output_html_results(void)
-{
-    long timetaken;
-
-    endtime = apr_time_now();
-    timetaken = (long)((endtime - start) / 1000);
-
-    printf("\n\n<table %s>\n", tablestring);
-    printf("<tr %s><th colspan=2 %s>Server Software:</th>"
-	   "<td colspan=2 %s>%s</td></tr>\n",
-	   trstring, tdstring, tdstring, servername);
-    printf("<tr %s><th colspan=2 %s>Server Hostname:</th>"
-	   "<td colspan=2 %s>%s</td></tr>\n",
-	   trstring, tdstring, tdstring, hostname);
-    printf("<tr %s><th colspan=2 %s>Server Port:</th>"
-	   "<td colspan=2 %s>%hd</td></tr>\n",
-	   trstring, tdstring, tdstring, port);
-    printf("<tr %s><th colspan=2 %s>Document Path:</th>"
-	   "<td colspan=2 %s>%s</td></tr>\n",
-	   trstring, tdstring, tdstring, path);
-    printf("<tr %s><th colspan=2 %s>Document Length:</th>"
-	   "<td colspan=2 %s>%" APR_SIZE_T_FMT " bytes</td></tr>\n",
-	   trstring, tdstring, tdstring, doclen);
-    printf("<tr %s><th colspan=2 %s>Concurrency Level:</th>"
-	   "<td colspan=2 %s>%d</td></tr>\n",
-	   trstring, tdstring, tdstring, concurrency);
-    printf("<tr %s><th colspan=2 %s>Time taken for tests:</th>"
-	   "<td colspan=2 %s>%qd.%03qd seconds</td></tr>\n",
-	   trstring, tdstring, tdstring, timetaken / APR_USEC_PER_SEC, timetaken % APR_USEC_PER_SEC);
-    printf("<tr %s><th colspan=2 %s>Complete requests:</th>"
-	   "<td colspan=2 %s>%ld</td></tr>\n",
-	   trstring, tdstring, tdstring, done);
-    printf("<tr %s><th colspan=2 %s>Failed requests:</th>"
-	   "<td colspan=2 %s>%ld</td></tr>\n",
-	   trstring, tdstring, tdstring, bad);
-    if (bad)
-	printf("<tr %s><td colspan=4 %s >   (Connect: %d, Length: %d, Exceptions: %d)</td></tr>\n",
-	       trstring, tdstring, err_conn, err_length, err_except);
-    if (err_response)
-	printf("<tr %s><th colspan=2 %s>Non-2xx responses:</th>"
-	       "<td colspan=2 %s>%d</td></tr>\n",
-	       trstring, tdstring, tdstring, err_response);
-    if (keepalive)
-	printf("<tr %s><th colspan=2 %s>Keep-Alive requests:</th>"
-	       "<td colspan=2 %s>%ld</td></tr>\n",
-	       trstring, tdstring, tdstring, doneka);
-    printf("<tr %s><th colspan=2 %s>Total transferred:</th>"
-	   "<td colspan=2 %s>%ld bytes</td></tr>\n",
-	   trstring, tdstring, tdstring, totalread);
-    if (posting > 0)
-	printf("<tr %s><th colspan=2 %s>Total POSTed:</th>"
-	       "<td colspan=2 %s>%ld</td></tr>\n",
-	       trstring, tdstring, tdstring, totalposted);
-    printf("<tr %s><th colspan=2 %s>HTML transferred:</th>"
-	   "<td colspan=2 %s>%ld bytes</td></tr>\n",
-	   trstring, tdstring, tdstring, totalbread);
-
-    /* avoid divide by zero */
-    if (timetaken) {
-	printf("<tr %s><th colspan=2 %s>Requests per second:</th>"
-	       "<td colspan=2 %s>%.2f</td></tr>\n",
-	   trstring, tdstring, tdstring, 1000 * (float) (done) / timetaken);
-	printf("<tr %s><th colspan=2 %s>Transfer rate:</th>"
-	       "<td colspan=2 %s>%.2f kb/s received</td></tr>\n",
-	     trstring, tdstring, tdstring, (float) (totalread) / timetaken);
-	if (posting > 0) {
-	    printf("<tr %s><td colspan=2 %s>&nbsp;</td>"
-		   "<td colspan=2 %s>%.2f kb/s sent</td></tr>\n",
-		   trstring, tdstring, tdstring,
-		   (float) (totalposted) / timetaken);
-	    printf("<tr %s><td colspan=2 %s>&nbsp;</td>"
-		   "<td colspan=2 %s>%.2f kb/s total</td></tr>\n",
-		   trstring, tdstring, tdstring,
-		   (float) (totalread + totalposted) / timetaken);
-	}
-    } {
-	/* work out connection times */
-	long i;
-	apr_interval_time_t totalcon = 0, total = 0;
-	apr_interval_time_t mincon = AB_MAX, mintot = AB_MAX;
-	apr_interval_time_t maxcon = 0, maxtot = 0;
-
-	for (i = 0; i < requests; i++) {
-	    struct data s = stats[i];
-	    mincon = ap_min(mincon, s.ctime);
-	    mintot = ap_min(mintot, s.time);
-	    maxcon = ap_max(maxcon, s.ctime);
-	    maxtot = ap_max(maxtot, s.time);
-	    totalcon += s.ctime;
-	    total += s.time;
-	}
-
-	if (requests > 0) {	/* avoid division by zero (if 0 requests) */
-	    printf("<tr %s><th %s colspan=4>Connnection Times (ms)</th></tr>\n",
-		   trstring, tdstring);
-	    printf("<tr %s><th %s>&nbsp;</th> <th %s>min</th>   <th %s>avg</th>   <th %s>max</th></tr>\n",
-		   trstring, tdstring, tdstring, tdstring, tdstring);
-	    printf("<tr %s><th %s>Connect:</th>"
-		   "<td %s>%5" APR_TIME_T_FMT "</td>"
-		   "<td %s>%5" APR_TIME_T_FMT "</td>"
-		   "<td %s>%5" APR_TIME_T_FMT "</td></tr>\n",
-		   trstring, tdstring, tdstring, mincon, tdstring, totalcon / requests, tdstring, maxcon);
-	    printf("<tr %s><th %s>Processing:</th>"
-		   "<td %s>%5" APR_TIME_T_FMT "</td>"
-		   "<td %s>%5" APR_TIME_T_FMT "</td>"
-		   "<td %s>%5" APR_TIME_T_FMT "</td></tr>\n",
-		   trstring, tdstring, tdstring, mintot - mincon, tdstring,
-		   (total / requests) - (totalcon / requests), tdstring, maxtot - maxcon);
-	    printf("<tr %s><th %s>Total:</th>"
-		   "<td %s>%5" APR_TIME_T_FMT "</td>"
-		   "<td %s>%5" APR_TIME_T_FMT "</td>"
-		   "<td %s>%5" APR_TIME_T_FMT "</td></tr>\n",
-		   trstring, tdstring, tdstring, mintot, tdstring, total / requests, tdstring, maxtot);
-	}
-	printf("</table>\n");
-    }
-}
-
-/* --------------------------------------------------------- */
-
-/* start asnchronous non-blocking connection */
-
-static void start_connect(struct connection * c)
-{
-    apr_status_t rv;
-    
-    if (!(started < requests))
-	return;
-
-    c->read = 0;
-    c->bread = 0;
-    c->keepalive = 0;
-    c->cbx = 0;
-    c->gotheader = 0;
-    c->rwrite = 0;
-    if (c->ctx)
-        apr_pool_destroy(c->ctx);
-    apr_pool_create(&c->ctx, cntxt);
-
-    if ((rv = apr_socket_create(&c->aprsock, destsa->family,
-				SOCK_STREAM, c->ctx)) != APR_SUCCESS) {
-	apr_err("socket", rv);
-    }
-    c->start = apr_time_now();
-    if ((rv = apr_connect(c->aprsock, destsa)) != APR_SUCCESS) {
-	if (APR_STATUS_IS_EINPROGRESS(rv)) {
-	    c->state = STATE_CONNECTING;
-	    c->rwrite = 0;
-	    apr_poll_socket_add(readbits, c->aprsock, APR_POLLOUT);
-	    return;
-	}
-	else {
-	    apr_poll_socket_remove(readbits, c->aprsock);
-	    apr_socket_close(c->aprsock);
-	    err_conn++;
-	    if (bad++ > 10) {
-		fprintf(stderr,
-			"\nTest aborted after 10 failures\n\n");
-		apr_err("apr_connect()", rv);
-	    }
-	    c->state = STATE_UNCONNECTED;
-	    start_connect(c);
-	    return;
-	}
-    }
-
-    /* connected first time */
-    started++;
-    write_request(c);
-}
-
-/* --------------------------------------------------------- */
-
-/* close down connection and save stats */
-
-static void close_connection(struct connection * c)
-{
-    if (c->read == 0 && c->keepalive) {
-	/*
-	 * server has legitimately shut down an idle keep alive request
-	 */
-	if (good)
-	    good--;		/* connection never happened */
-    }
-    else {
-	if (good == 1) {
-	    /* first time here */
-	    doclen = c->bread;
-	}
-	else if (c->bread != doclen) {
-	    bad++;
-	    err_length++;
-	}
-	/* save out time */
-	if (done < requests) {
-	    struct data s;
-	    if ((done) && heartbeatres && !(done % heartbeatres)) {
-		fprintf(stderr, "Completed %ld requests\n", done);
-		fflush(stderr);
-	    }
-	    c->done = apr_time_now();
-	    s.read = c->read;
-	    s.starttime = c->start;
-	    s.ctime = (c->connect - c->start) / 1000;
-	    s.time = (c->done - c->start) / 1000;
-	    s.waittime = (c->beginread - c->endwrite) / 1000;
-	    stats[done++] = s;
-	}
-    }
-
-    apr_poll_socket_remove(readbits, c->aprsock);
-    apr_socket_close(c->aprsock);
-    c->state = STATE_UNCONNECTED;
-
-    /* connect again */
-    start_connect(c);
-    return;
-}
-
-/* --------------------------------------------------------- */
-
-/* read data from connection */
-
-static void read_connection(struct connection * c)
-{
-    apr_size_t r;
-    apr_status_t status;
-    char *part;
-    char respcode[4];		/* 3 digits and null */
-
-    r = sizeof(buffer);
-    apr_setsocketopt(c->aprsock, APR_SO_TIMEOUT, aprtimeout);
-    status = apr_recv(c->aprsock, buffer, &r);
-    if (r == 0 || (status != APR_SUCCESS && !APR_STATUS_IS_EAGAIN(status))) {
-	good++;
-	close_connection(c);
-	return;
-    }
-
-    if (APR_STATUS_IS_EAGAIN(status))
-	return;
-
-    totalread += r;
-    if (c->read == 0) {
-	c->beginread = apr_time_now();
-    }
-    c->read += r;
-
-
-    if (!c->gotheader) {
-	char *s;
-	int l = 4;
-	apr_size_t space = CBUFFSIZE - c->cbx - 1; /* -1 allows for \0 term */
-	int tocopy = (space < r) ? space : r;
-#ifdef NOT_ASCII
-	apr_size_t inbytes_left = space, outbytes_left = space;
-
-	status = apr_xlate_conv_buffer(from_ascii, buffer, &inbytes_left,
-				       c->cbuff + c->cbx, &outbytes_left);
-	if (status || inbytes_left || outbytes_left) {
-	    fprintf(stderr, "only simple translation is supported (%d/%u/%u)\n",
-		    status, inbytes_left, outbytes_left);
-	    exit(1);
-	}
-#else
-	memcpy(c->cbuff + c->cbx, buffer, space);
-#endif				/* NOT_ASCII */
-	c->cbx += tocopy;
-	space -= tocopy;
-	c->cbuff[c->cbx] = 0;	/* terminate for benefit of strstr */
-	if (verbosity >= 4) {
-	    printf("LOG: header received:\n%s\n", c->cbuff);
-	}
-	s = strstr(c->cbuff, "\r\n\r\n");
-	/*
-	 * this next line is so that we talk to NCSA 1.5 which blatantly
-	 * breaks the http specifaction
-	 */
-	if (!s) {
-	    s = strstr(c->cbuff, "\n\n");
-	    l = 2;
-	}
-
-	if (!s) {
-	    /* read rest next time */
-	    if (space) {
-		return;
-	    }
-	    else {
-		/* header is in invalid or too big - close connection */
-		apr_poll_socket_remove(readbits, c->aprsock);
-		apr_socket_close(c->aprsock);
-		err_response++;
-		if (bad++ > 10) {
-		    err("\nTest aborted after 10 failures\n\n");
-		}
-		start_connect(c);
-	    }
-	}
-	else {
-	    /* have full header */
-	    if (!good) {
-		/*
-		 * this is first time, extract some interesting info
-		 */
-		char *p, *q;
-		p = strstr(c->cbuff, "Server:");
-		q = servername;
-		if (p) {
-		    p += 8;
-		    while (*p > 32)
-			*q++ = *p++;
-		}
-		*q = 0;
-	    }
-	    /*
-	     * XXX: this parsing isn't even remotely HTTP compliant... but in
-	     * the interest of speed it doesn't totally have to be, it just
-	     * needs to be extended to handle whatever servers folks want to
-	     * test against. -djg
-	     */
-
-	    /* check response code */
-	    part = strstr(c->cbuff, "HTTP");	/* really HTTP/1.x_ */
-	    strncpy(respcode, (part + strlen("HTTP/1.x_")), 3);
-	    respcode[3] = '\0';
-	    if (respcode[0] != '2') {
-		err_response++;
-		if (verbosity >= 2)
-		    printf("WARNING: Response code not 2xx (%s)\n", respcode);
-	    }
-	    else if (verbosity >= 3) {
-		printf("LOG: Response code = %s\n", respcode);
-	    }
-	    c->gotheader = 1;
-	    *s = 0;		/* terminate at end of header */
-	    if (keepalive &&
-		(strstr(c->cbuff, "Keep-Alive")
-		 || strstr(c->cbuff, "keep-alive"))) {	/* for benefit of MSIIS */
-		char *cl;
-		cl = strstr(c->cbuff, "Content-Length:");
-		/* handle NCSA, which sends Content-length: */
-		if (!cl)
-		    cl = strstr(c->cbuff, "Content-length:");
-		if (cl) {
-		    c->keepalive = 1;
-		    c->length = atoi(cl + 16);
-		}
-	    }
-	    c->bread += c->cbx - (s + l - c->cbuff) + r - tocopy;
-	    totalbread += c->bread;
-	}
-    }
-    else {
-	/* outside header, everything we have read is entity body */
-	c->bread += r;
-	totalbread += r;
-    }
-
-    if (c->keepalive && (c->bread >= c->length)) {
-	/* finished a keep-alive connection */
-	good++;
-	doneka++;
-	/* save out time */
-	if (good == 1) {
-	    /* first time here */
-	    doclen = c->bread;
-	}
-	else if (c->bread != doclen) {
-	    bad++;
-	    err_length++;
-	}
-	if (done < requests) {
-	    struct data s;
-	    if (done && heartbeatres && !(done % heartbeatres)) {
-		fprintf(stderr, "Completed %ld requests\n", done);
-		fflush(stderr);
-	    }
-	    c->done = apr_time_now();
-	    s.read = c->read;
-	    s.starttime = c->start;
-	    s.ctime = (c->connect - c->start) / 1000;
-	    s.waittime = (c->beginread - c->endwrite) / 1000;
-	    s.time = (c->done - c->start) / 1000;
-	    stats[done++] = s;
-	}
-	c->keepalive = 0;
-	c->length = 0;
-	c->gotheader = 0;
-	c->cbx = 0;
-	c->read = c->bread = 0;
-	write_request(c);
-	c->start = c->connect;	/* zero connect time with keep-alive */
-    }
-}
-
-/* --------------------------------------------------------- */
-
-/* run the tests */
-
-static void test(void)
-{
-    apr_time_t now;
-    apr_int16_t rv;
-    long i;
-    apr_status_t status;
-#ifdef NOT_ASCII
-    apr_size_t inbytes_left, outbytes_left;
-#endif
-
-    if (isproxy) {
-	strcpy(connecthost, proxyhost);
-	connectport = proxyport;
-    }
-    else {
-	strcpy(connecthost, hostname);
-	connectport = port;
-    }
-
-    if (!use_html) {
-	printf("Benchmarking %s ", hostname);
-	if (isproxy)
-	    printf("[through %s:%d] ", proxyhost, proxyport);
-	printf("(be patient)%s",
-	       (heartbeatres ? "\n" : "..."));
-	fflush(stdout);
-    }
-
-    now = apr_time_now();
-
-    con = calloc(concurrency * sizeof(struct connection), 1);
-    
-    stats = calloc(requests * sizeof(struct data), 1);
-    apr_poll_setup(&readbits, concurrency, cntxt);
-
-    /* setup request */
-    if (posting <= 0) {
-	sprintf(request, "%s %s HTTP/1.0\r\n"
-		"User-Agent: ApacheBench/%s\r\n"
-		"%s" "%s" "%s"
-		"Host: %s\r\n"
-		"Accept: */*\r\n"
-		"%s" "\r\n",
-		(posting == 0) ? "GET" : "HEAD",
-		(isproxy) ? fullurl : path,
-		AP_SERVER_BASEREVISION,
-		keepalive ? "Connection: Keep-Alive\r\n" : "",
-		cookie, auth, host_field, hdrs);
-    }
-    else {
-	sprintf(request, "POST %s HTTP/1.0\r\n"
-		"User-Agent: ApacheBench/%s\r\n"
-		"%s" "%s" "%s"
-		"Host: %s\r\n"
-		"Accept: */*\r\n"
-		"Content-length: %" APR_SIZE_T_FMT "\r\n"
-		"Content-type: %s\r\n"
-		"%s"
-		"\r\n",
-		(isproxy) ? fullurl : path,
-		AP_SERVER_BASEREVISION,
-		keepalive ? "Connection: Keep-Alive\r\n" : "",
-		cookie, auth,
-		host_field, postlen,
-		(content_type[0]) ? content_type : "text/plain", hdrs);
-    }
-
-    if (verbosity >= 2)
-	printf("INFO: POST header == \n---\n%s\n---\n", request);
-
-    reqlen = strlen(request);
-
-    /*
-     * Combine headers and (optional) post file into one contineous buffer
-     */
-    if (posting == 1) {
-	char *buff = (char *) malloc(postlen + reqlen + 1);
-	strcpy(buff, request);
-	strcpy(buff + reqlen, postdata);
-	request = buff;
-    }
-
-#ifdef NOT_ASCII
-    inbytes_left = outbytes_left = reqlen;
-    status = apr_xlate_conv_buffer(to_ascii, request, &inbytes_left,
-				   request, &outbytes_left);
-    if (status || inbytes_left || outbytes_left) {
-	fprintf(stderr, "only simple translation is supported (%d/%u/%u)\n",
-		status, inbytes_left, outbytes_left);
-	exit(1);
-    }
-#endif				/* NOT_ASCII */
-
-    /* This only needs to be done once */
-    if ((rv = apr_sockaddr_info_get(&destsa, connecthost, APR_UNSPEC, connectport, 0, cntxt))
-	!= APR_SUCCESS) {
-	char buf[120];
-	apr_snprintf(buf, sizeof(buf),
-		     "apr_sockaddr_info_get() for %s", connecthost);
-	apr_err(buf, rv);
-    }
-
-    /* ok - lets start */
-    start = apr_time_now();
-
-    /* initialise lots of requests */
-    for (i = 0; i < concurrency; i++) {
-	con[i].socknum = i;
-	start_connect(&con[i]);
-    }
-
-    while (done < requests) {
-	apr_int32_t n;
-	apr_int32_t timed;
-
-	/* check for time limit expiry */
-	now = apr_time_now();
-	timed = (apr_int32_t)((now - start) / APR_USEC_PER_SEC);
-	if (tlimit && timed > (tlimit * 1000)) {
-	    requests = done;	/* so stats are correct */
-	}
-
-	n = concurrency;
-	status = apr_poll(readbits, &n, aprtimeout);
-	if (status != APR_SUCCESS)
-	    apr_err("apr_poll", status);
-
-	if (!n) {
-	    err("\nServer timed out\n\n");
-	}
-
-	for (i = 0; i < concurrency; i++) {
-	    /*
-	     * If the connection isn't connected how can we check it?
-	     */
-	    if (con[i].state == STATE_UNCONNECTED)
-		continue;
-
-	    apr_poll_revents_get(&rv, con[i].aprsock, readbits);
-	    /*
-	     * Notes: APR_POLLHUP is set after FIN is received on some
-	     * systems, so treat that like APR_POLLIN so that we try to read
-	     * again.
-	     *
-	     * Some systems return APR_POLLERR with APR_POLLHUP.  We need to
-	     * call read_connection() for APR_POLLHUP, so check for
-	     * APR_POLLHUP first so that a closed connection isn't treated
-	     * like an I/O error.  If it is, we never figure out that the
-	     * connection is done and we loop here endlessly calling
-	     * apr_poll().
-	     */
-	    if ((rv & APR_POLLIN) || (rv & APR_POLLPRI) || (rv & APR_POLLHUP))
-		read_connection(&con[i]);
-	    if ((rv & APR_POLLERR) || (rv & APR_POLLNVAL)) {
-		bad++;
-		err_except++;
-		start_connect(&con[i]);
-		continue;
-	    }
-	    if (rv & APR_POLLOUT)
-		write_request(&con[i]);
-
-	    /*
-	     * When using a select based poll every time we check the bits
-	     * are reset. In 1.3's ab we copied the FD_SET's each time
-	     * through, but here we're going to check the state and if the
-	     * connection is in STATE_READ or STATE_CONNECTING we'll add the
-	     * socket back in as APR_POLLIN.
-	     */
-	    if (con[i].state == STATE_READ || con[i].state == STATE_CONNECTING)
-		apr_poll_socket_add(readbits, con[i].aprsock, APR_POLLIN);
-
-	}
-    }
-
-    if (heartbeatres)
-	fprintf(stderr, "Finished %ld requests\n", done);
-    else
-	printf("..done\n");
-
-    if (use_html)
-	output_html_results();
-    else
-	output_results();
-}
-
-/* ------------------------------------------------------- */
-
-/* display copyright information */
-static void copyright(void)
-{
-    if (!use_html) {
-	printf("This is ApacheBench, Version %s\n", AP_SERVER_BASEREVISION " <$Revision: 1.89 $> apache-2.0");
-	printf("Copyright (c) 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/\n");
-	printf("Copyright (c) 1998-2002 The Apache Software Foundation, http://www.apache.org/\n");
-	printf("\n");
-    }
-    else {
-	printf("<p>\n");
-	printf(" This is ApacheBench, Version %s <i>&lt;%s&gt;</i> apache-2.0<br>\n", AP_SERVER_BASEREVISION, "$Revision: 1.89 $");
-	printf(" Copyright (c) 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/<br>\n");
-	printf(" Copyright (c) 1998-2002 The Apache Software Foundation, http://www.apache.org/<br>\n");
-	printf("</p>\n<p>\n");
-    }
-}
-
-/* display usage information */
-static void usage(const char *progname)
-{
-    fprintf(stderr, "Usage: %s [options] [http"
-#if USE_SSL
-	    "[s]"
-#endif
-	    "://]hostname[:port]/path\n", progname);
-    fprintf(stderr, "Options are:\n");
-    fprintf(stderr, "    -n requests     Number of requests to perform\n");
-    fprintf(stderr, "    -c concurrency  Number of multiple requests to make\n");
-    fprintf(stderr, "    -t timelimit    Seconds to max. wait for responses\n");
-    fprintf(stderr, "    -p postfile     File containing data to POST\n");
-    fprintf(stderr, "    -T content-type Content-type header for POSTing\n");
-    fprintf(stderr, "    -v verbosity    How much troubleshooting info to print\n");
-    fprintf(stderr, "    -w              Print out results in HTML tables\n");
-    fprintf(stderr, "    -i              Use HEAD instead of GET\n");
-    fprintf(stderr, "    -x attributes   String to insert as table attributes\n");
-    fprintf(stderr, "    -y attributes   String to insert as tr attributes\n");
-    fprintf(stderr, "    -z attributes   String to insert as td or th attributes\n");
-    fprintf(stderr, "    -C attribute    Add cookie, eg. 'Apache=1234. (repeatable)\n");
-    fprintf(stderr, "    -H attribute    Add Arbitrary header line, eg. 'Accept-Encoding: zop'\n");
-    fprintf(stderr, "                    Inserted after all normal header lines. (repeatable)\n");
-    fprintf(stderr, "    -A attribute    Add Basic WWW Authentication, the attributes\n");
-    fprintf(stderr, "                    are a colon separated username and password.\n");
-    fprintf(stderr, "    -P attribute    Add Basic Proxy Authentication, the attributes\n");
-    fprintf(stderr, "                    are a colon separated username and password.\n");
-    fprintf(stderr, "    -X proxy:port   Proxyserver and port number to use\n");
-    fprintf(stderr, "    -V              Print version number and exit\n");
-    fprintf(stderr, "    -k              Use HTTP KeepAlive feature\n");
-    fprintf(stderr, "    -d              Do not show percentiles served table.\n");
-    fprintf(stderr, "    -S              Do not show confidence estimators and warnings.\n");
-    fprintf(stderr, "    -g filename     Output collected data to gnuplot format file.\n");
-    fprintf(stderr, "    -e filename     Output CSV file with percentages served\n");
-#if USE_SSL
-    fprintf(stderr, "    -s              Use httpS instead of HTTP (SSL)\n");
-#endif
-    fprintf(stderr, "    -h              Display usage information (this message)\n");
-    exit(EINVAL);
-}
-
-/* ------------------------------------------------------- */
-
-/* split URL into parts */
-
-static int parse_url(char *url)
-{
-    char *cp;
-    char *h;
-    char *scope_id;
-    apr_status_t rv;
-
-    if (strlen(url) > 7 && strncmp(url, "http://", 7) == 0)
-	url += 7;
-    else
-#if USE_SSL
-    if (strlen(url) > 8 && strncmp(url, "https://", 8) == 0) {
-	url += 8;
-	ssl = 1;
-	port = 443;
-    }
-#else
-    if (strlen(url) > 8 && strncmp(url, "https://", 8) == 0) {
-	fprintf(stderr, "SSL not compiled in; no https support\n");
-	exit(1);
-    }
-#endif
-
-    if ((cp = strchr(url, '/')) == NULL)
-	return 1;
-    h = apr_palloc(cntxt, cp - url + 1);
-    memcpy(h, url, cp - url);
-    h[cp - url] = '\0';
-    rv = apr_parse_addr_port(&hostname, &scope_id, &port, h, cntxt);
-    if (rv != APR_SUCCESS || !hostname || scope_id) {
-	return 1;
-    }
-    strcpy(path, cp);
-    *cp = '\0';
-    if (*url == '[') {		/* IPv6 numeric address string */
-	host_field = apr_psprintf(cntxt, "[%s]", hostname);
-    }
-    else {
-	host_field = hostname;
-    }
-    if (port == 0) {		/* no port specified */
-	port = 80;
-    }
-    return 0;
-}
-
-/* ------------------------------------------------------- */
-
-/* read data to POST from file, save contents and length */
-
-static int open_postfile(const char *pfile)
-{
-    apr_file_t *postfd = NULL;
-    apr_finfo_t finfo;
-    apr_fileperms_t mode = APR_OS_DEFAULT;
-    apr_size_t length;
-    apr_status_t rv;
-    char errmsg[120];
-
-    rv = apr_file_open(&postfd, pfile, APR_READ, mode, cntxt);
-    if (rv != APR_SUCCESS) {
-	printf("Invalid postfile name (%s): %s\n", pfile,
-	       apr_strerror(rv, errmsg, sizeof errmsg));
-	return rv;
-    }
-
-    apr_file_info_get(&finfo, APR_FINFO_NORM, postfd);
-    postlen = (apr_size_t)finfo.size;
-    postdata = (char *) malloc(postlen);
-    if (!postdata) {
-	printf("Can\'t alloc postfile buffer\n");
-	return APR_ENOMEM;
-    }
-    length = postlen;
-    rv = apr_file_read(postfd, postdata, &length);
-    if (rv != APR_SUCCESS) {
-	printf("error reading postfile: %s\n",
-	       apr_strerror(rv, errmsg, sizeof errmsg));
-	return rv;
-    }
-    if (length != postlen) {
-	printf("error reading postfile: read only %"
-	       APR_SIZE_T_FMT " bytes",
-	       length);
-	return APR_EINVAL;
-    }
-    apr_file_close(postfd);
-    return 0;
-}
-
-/* ------------------------------------------------------- */
-
-/* sort out command-line args and call test */
-int main(int argc, const char *const argv[])
-{
-    int r, l;
-    char tmp[1024];
-    apr_status_t status;
-    apr_getopt_t *opt;
-    const char *optarg;
-    char c;
-
-    /* table defaults  */
-    tablestring = "";
-    trstring = "";
-    tdstring = "bgcolor=white";
-    cookie[0] = '\0';
-    auth[0] = '\0';
-    proxyhost[0] = '\0';
-    hdrs[0] = '\0';
-
-    apr_initialize();
-    atexit(apr_terminate);
-    apr_pool_create(&cntxt, NULL);
-
-#ifdef NOT_ASCII
-    status = apr_xlate_open(&to_ascii, "ISO8859-1", APR_DEFAULT_CHARSET, cntxt);
-    if (status) {
-	fprintf(stderr, "apr_xlate_open(to ASCII)->%d\n", status);
-	exit(1);
-    }
-    status = apr_xlate_open(&from_ascii, APR_DEFAULT_CHARSET, "ISO8859-1", cntxt);
-    if (status) {
-	fprintf(stderr, "apr_xlate_open(from ASCII)->%d\n", status);
-	exit(1);
-    }
-    status = apr_base64init_ebcdic(to_ascii, from_ascii);
-    if (status) {
-	fprintf(stderr, "apr_base64init_ebcdic()->%d\n", status);
-	exit(1);
-    }
-#endif
-
-    apr_getopt_init(&opt, cntxt, argc, argv);
-    while ((status = apr_getopt(opt, "n:c:t:T:p:v:kVhwix:y:z:C:H:P:A:g:X:de:Sq"
-#if USE_SSL
-				"s"
-#endif
-				,&c, &optarg)) == APR_SUCCESS) {
-	switch (c) {
-	case 's':
-#if USE_SSL
-        ssl = 1;
-        break;
-#else
-        fprintf(stderr, "SSL not compiled in; no https support\n");
-        exit(1);
-#endif
-	case 'n':
-	    requests = atoi(optarg);
-	    if (!requests) {
-		err("Invalid number of requests\n");
-	    }
-	    break;
-	case 'k':
-	    keepalive = 1;
-	    break;
-	case 'q':
-	    heartbeatres = 0;
-	    break;
-	case 'c':
-	    concurrency = atoi(optarg);
-	    break;
-	case 'i':
-	    if (posting == 1)
-		err("Cannot mix POST and HEAD\n");
-	    posting = -1;
-	    break;
-	case 'g':
-	    gnuplot = strdup(optarg);
-	    break;
-	case 'd':
-	    percentile = 0;
-	    break;
-	case 'e':
-	    csvperc = strdup(optarg);
-	    break;
-	case 'S':
-	    confidence = 0;
-	    break;
-	case 'p':
-	    if (posting != 0)
-		err("Cannot mix POST and HEAD\n");
-
-	    if (0 == (r = open_postfile(optarg))) {
-		posting = 1;
-	    }
-	    else if (postdata) {
-		exit(r);
-	    }
-	    break;
-	case 'v':
-	    verbosity = atoi(optarg);
-	    break;
-	case 't':
-	    tlimit = atoi(optarg);
-	    requests = MAX_REQUESTS;	/* need to size data array on
-					 * something */
-	    break;
-	case 'T':
-	    strcpy(content_type, optarg);
-	    break;
-	case 'C':
-	    strncat(cookie, "Cookie: ", sizeof(cookie));
-	    strncat(cookie, optarg, sizeof(cookie));
-	    strncat(cookie, "\r\n", sizeof(cookie));
-	    break;
-	case 'A':
-	    /*
-	     * assume username passwd already to be in colon separated form.
-	     * Ready to be uu-encoded.
-	     */
-	    while (apr_isspace(*optarg))
-		optarg++;
-	    l = apr_base64_encode(tmp, optarg, strlen(optarg));
-	    tmp[l] = '\0';
-
-	    strncat(auth, "Authorization: Basic ", sizeof(auth));
-	    strncat(auth, tmp, sizeof(auth));
-	    strncat(auth, "\r\n", sizeof(auth));
-	    break;
-	case 'P':
-	    /*
-             * assume username passwd already to be in colon separated form.
-             */
-	    while (apr_isspace(*optarg))
-		optarg++;
-	    l = apr_base64_encode(tmp, optarg, strlen(optarg));
-	    tmp[l] = '\0';
-
-	    strncat(auth, "Proxy-Authorization: Basic ", sizeof(auth));
-	    strncat(auth, tmp, sizeof(auth));
-	    strncat(auth, "\r\n", sizeof(auth));
-	    break;
-	case 'H':
-	    strncat(hdrs, optarg, sizeof(hdrs));
-	    strncat(hdrs, "\r\n", sizeof(hdrs));
-	    break;
-	case 'w':
-	    use_html = 1;
-	    break;
-	    /*
-	     * if any of the following three are used, turn on html output
-	     * automatically
-	     */
-	case 'x':
-	    use_html = 1;
-	    tablestring = optarg;
-	    break;
-	case 'X':
-	    {
-		char *p;
-		/*
-                 * assume proxy-name[:port]
-                 */
-		if ((p = strchr(optarg, ':'))) {
-		    *p = '\0';
-		    p++;
-		    proxyport = atoi(p);
-		}
-		strcpy(proxyhost, optarg);
-		isproxy = 1;
-	    }
-	    break;
-	case 'y':
-	    use_html = 1;
-	    trstring = optarg;
-	    break;
-	case 'z':
-	    use_html = 1;
-	    tdstring = optarg;
-	    break;
-	case 'h':
-	    usage(argv[0]);
-	    break;
-	case 'V':
-	    copyright();
-	    return 0;
-	}
-    }
-
-    if (opt->ind != argc - 1) {
-	fprintf(stderr, "%s: wrong number of arguments\n", argv[0]);
-	usage(argv[0]);
-    }
-
-    if (parse_url(apr_pstrdup(cntxt, opt->argv[opt->ind++]))) {
-	fprintf(stderr, "%s: invalid URL\n", argv[0]);
-	usage(argv[0]);
-    }
-
-
-    if ((heartbeatres) && (requests > 150)) {
-	heartbeatres = requests / 10;	/* Print line every 10% of requests */
-	if (heartbeatres < 100)
-	    heartbeatres = 100;	/* but never more often than once every 100
-				 * connections. */
-    }
-    else
-	heartbeatres = 0;
-
-#ifdef USE_SSL
-    SSL_library_init();
-    if (!(ctx = SSL_CTX_new(SSLv2_client_method()))) {
-	fprintf(stderr, "Could not init SSL CTX");
-	ERR_print_errors_fp(stderr);
-	exit(1);
-    }
-#endif
-#if SIGPIPE
-    signal(SIGPIPE, SIG_IGN);	        /* Ignore writes to connections that
-					 * have been closed at the other end. */
-#endif
-    copyright();
-    test();
-    apr_pool_destroy(cntxt);
-
-    return 0;
-}
diff --git a/support/ab.dsp b/support/ab.dsp
deleted file mode 100644
index 9233fc8..0000000
--- a/support/ab.dsp
+++ /dev/null
@@ -1,123 +0,0 @@
-# Microsoft Developer Studio Project File - Name="ab" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Console Application" 0x0103
-
-CFG=ab - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "ab.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "ab.mak" CFG="ab - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "ab - Win32 Release" (based on "Win32 (x86) Console Application")
-!MESSAGE "ab - Win32 Debug" (based on "Win32 (x86) Console Application")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "ab - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "APR_DECLARE_STATIC" /D "APU_DECLARE_STATIC" /FD /c
-# ADD CPP /nologo /MD /W3 /O2 /I "../srclib/apr/include" /I "../srclib/apr-util/include" /I "../include" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "APR_DECLARE_STATIC" /D "APU_DECLARE_STATIC" /Fd"Release/ab" /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib wsock32.lib ws2_32.lib /nologo /subsystem:console /map /machine:I386
-# ADD LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib /nologo /subsystem:console /map /machine:I386
-
-!ELSEIF  "$(CFG)" == "ab - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "APR_DECLARE_STATIC" /D "APU_DECLARE_STATIC" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../srclib/apr/include" /I "../srclib/apr-util/include" /I "../include" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "APR_DECLARE_STATIC" /D "APU_DECLARE_STATIC" /Fd"Debug/ab" /FD /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib /nologo /subsystem:console /incremental:no /map /debug /machine:I386
-# ADD LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib /nologo /subsystem:console /incremental:no /map /debug /machine:I386
-
-!ENDIF 
-
-# Begin Target
-
-# Name "ab - Win32 Release"
-# Name "ab - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\ab.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\ab.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\build\win32\win32ver.awk
-
-!IF  "$(CFG)" == "ab - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\build\win32\win32ver.awk
-
-".\ab.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ../build/win32/win32ver.awk ab "ApacheBench Utility"  ../include/ap_release.h > .\ab.rc
-
-# End Custom Build
-
-!ELSEIF  "$(CFG)" == "ab - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\build\win32\win32ver.awk
-
-".\ab.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ../build/win32/win32ver.awk ab "ApacheBench Utility"  ../include/ap_release.h > .\ab.rc
-
-# End Custom Build
-
-!ENDIF 
-
-# End Source File
-# End Target
-# End Project
diff --git a/support/abs.dsp b/support/abs.dsp
deleted file mode 100644
index 7e880d2..0000000
--- a/support/abs.dsp
+++ /dev/null
@@ -1,131 +0,0 @@
-# Microsoft Developer Studio Project File - Name="abs" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Console Application" 0x0103
-
-CFG=abs - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "abs.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "abs.mak" CFG="abs - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "abs - Win32 Release" (based on "Win32 (x86) Console Application")
-!MESSAGE "abs - Win32 Debug" (based on "Win32 (x86) Console Application")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "abs - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "APR_DECLARE_STATIC" /D "APU_DECLARE_STATIC" /D "SSL" /FD /c
-# ADD CPP /nologo /MD /W3 /O2 /I "../srclib/apr/include" /I "../srclib/apr-util/include" /I "../include" /I "../srclib/openssl/inc32/openssl" /I "../srclib/openssl/inc32" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "APR_DECLARE_STATIC" /D "APU_DECLARE_STATIC" /D "USE_SSL" /D "WIN32_LEAN_AND_MEAN" /D "NO_IDEA" /D "NO_RC5" /D "NO_MDC2" /Fd"Release/abs" /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib wsock32.lib ws2_32.lib ssleay32.lib libeay32.lib /nologo /subsystem:console /map /machine:I386 /libpath:"../srclib/openssl/out32dll"
-# ADD LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib ssleay32.lib libeay32.lib /nologo /subsystem:console /map /machine:I386 /libpath:"../srclib/openssl/out32dll"
-
-!ELSEIF  "$(CFG)" == "abs - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "APR_DECLARE_STATIC" /D "APU_DECLARE_STATIC" /D "SSL" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../srclib/apr/include" /I "../srclib/apr-util/include" /I "../include" /I "../srclib/openssl/inc32/openssl" /I "../srclib/openssl/inc32" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "APR_DECLARE_STATIC" /D "APU_DECLARE_STATIC" /D "USE_SSL" /D "WIN32_LEAN_AND_MEAN" /D "NO_IDEA" /D "NO_RC5" /D "NO_MDC2" /Fd"Debug/abs" /FD /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib ssleay32.lib libeay32.lib /nologo /subsystem:console /incremental:no /map /debug /machine:I386 /libpath:"../srclib/openssl/out32dll"
-# ADD LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib ssleay32.lib libeay32.lib /nologo /subsystem:console /incremental:no /map /debug /machine:I386 /libpath:"../srclib/openssl/out32dll"
-
-!ENDIF 
-
-# Begin Target
-
-# Name "abs - Win32 Release"
-# Name "abs - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\ab.c
-
-!IF  "$(CFG)" == "abs - Win32 Release"
-# ADD CPP /Fo"Release/abs.obj"
-
-!ELSEIF  "$(CFG)" == "abs - Win32 Debug"
-# ADD CPP /Fo"Debug/abs.obj"
-
-!ENDIF 
-# End Source File
-# Begin Source File
-
-SOURCE=.\abs.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\build\win32\win32ver.awk
-
-!IF  "$(CFG)" == "abs - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\build\win32\win32ver.awk
-
-".\abs.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ../build/win32/win32ver.awk ab "ApacheBench/SSL Utility"  ../include/ap_release.h > .\abs.rc
-
-# End Custom Build
-
-!ELSEIF  "$(CFG)" == "abs - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\build\win32\win32ver.awk
-
-".\abs.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ../build/win32/win32ver.awk ab "ApacheBench/SSL Utility"  ../include/ap_release.h > .\abs.rc
-
-# End Custom Build
-
-!ENDIF 
-
-# End Source File
-# End Target
-# End Project
diff --git a/support/apachectl.in b/support/apachectl.in
deleted file mode 100644
index e4496a1..0000000
--- a/support/apachectl.in
+++ /dev/null
@@ -1,252 +0,0 @@
-#!/bin/sh
-#
-# Copyright (c) 2000-2002 The Apache Software Foundation.
-# See license at the end of this file.
-#
-# Apache control script designed to allow an easy command line interface
-# to controlling Apache.  Written by Marc Slemko, 1997/08/23
-# 
-# The exit codes returned are:
-#	0 - operation completed successfully
-#	1 - 
-#	2 - usage error
-#	3 - httpd could not be started
-#	4 - httpd could not be stopped
-#	5 - httpd could not be started during a restart
-#	6 - httpd could not be restarted during a restart
-#	7 - httpd could not be restarted during a graceful restart
-#	8 - configuration syntax error
-#
-# When multiple arguments are given, only the error from the _last_
-# one is reported.  Run "apachectl help" for usage info
-#
-ARGV="$@"
-#
-# |||||||||||||||||||| START CONFIGURATION SECTION  ||||||||||||||||||||
-# --------------------                              --------------------
-# 
-# the path to your PID file
-PIDFILE=@prefix@/logs/@progname@.pid
-#
-# the path to your httpd binary, including options if necessary
-HTTPD='@prefix@/bin/@progname@'
-#
-# pick up any necessary environment variables
-if test -f @prefix@/bin/envvars; then
-  . @prefix@/bin/envvars
-fi
-#
-# a command that outputs a formatted text version of the HTML at the
-# url given on the command line.  Designed for lynx, however other
-# programs may work.  
-LYNX="lynx -dump"
-#
-# the URL to your server's mod_status status page.  If you do not
-# have one, then status and fullstatus will not work.
-STATUSURL="http://localhost:@PORT@/server-status"
-#
-# --------------------                              --------------------
-# ||||||||||||||||||||   END CONFIGURATION SECTION  ||||||||||||||||||||
-
-ERROR=0
-if [ "x$ARGV" = "x" ] ; then 
-    ARGS="help"
-fi
-
-for ARG in $ARGV $ARGS
-do
-    # check for pidfile
-    if [ -f $PIDFILE ] ; then
-	PID=`cat $PIDFILE`
-	if [ "x$PID" != "x" ] && kill -0 $PID 2>/dev/null ; then
-	    STATUS="@progname@ (pid $PID) running"
-	    RUNNING=1
-	else
-	    STATUS="@progname@ (pid $PID?) not running"
-	    RUNNING=0
-	fi
-    else
-	STATUS="@progname@ (no pid file) not running"
-	RUNNING=0
-    fi
-
-    case $ARG in
-    start)
-	if [ $RUNNING -eq 1 ]; then
-	    echo "$0 $ARG: @progname@ (pid $PID) already running"
-	    continue
-	fi
-	if $HTTPD ; then
-	    echo "$0 $ARG: @progname@ started"
-	else
-	    echo "$0 $ARG: @progname@ could not be started"
-	    ERROR=3
-	fi
-	;;
-    startssl|sslstart|start-SSL)
-        if [ $RUNNING -eq 1 ]; then
-            echo "$0 $ARG: @progname@ (pid $PID) already running"
-            continue
-        fi
-        if $HTTPD -DSSL; then
-            echo "$0 $ARG: @progname@ started"
-        else
-            echo "$0 $ARG: @progname@ could not be started"
-            ERROR=3
-        fi
-        ;;
-    stop)
-	if [ $RUNNING -eq 0 ]; then
-	    echo "$0 $ARG: $STATUS"
-	    continue
-	fi
-	if kill $PID ; then
-	    echo "$0 $ARG: @progname@ stopped"
-	else
-	    echo "$0 $ARG: @progname@ could not be stopped"
-	    ERROR=4
-	fi
-	;;
-    restart)
-	if [ $RUNNING -eq 0 ]; then
-	    echo "$0 $ARG: @progname@ not running, trying to start"
-	    if $HTTPD ; then
-		echo "$0 $ARG: @progname@ started"
-	    else
-		echo "$0 $ARG: @progname@ could not be started"
-		ERROR=5
-	    fi
-	else
-	    if $HTTPD -t >/dev/null 2>&1; then
-		if kill -HUP $PID ; then
-		    echo "$0 $ARG: @progname@ restarted"
-		else
-		    echo "$0 $ARG: @progname@ could not be restarted"
-		    ERROR=6
-		fi
-	    else
-		echo "$0 $ARG: configuration broken, ignoring restart"
-		echo "$0 $ARG: (run 'apachectl configtest' for details)"
-		ERROR=6
-	    fi
-	fi
-	;;
-    graceful)
-	if [ $RUNNING -eq 0 ]; then
-	    echo "$0 $ARG: @progname@ not running, trying to start"
-	    if $HTTPD ; then
-		echo "$0 $ARG: @progname@ started"
-	    else
-		echo "$0 $ARG: @progname@ could not be started"
-		ERROR=5
-	    fi
-	else
-	    if $HTTPD -t >/dev/null 2>&1; then
-		if kill -@AP_SIG_GRACEFUL_SHORT@ $PID ; then
-		    echo "$0 $ARG: @progname@ gracefully restarted"
-		else
-		    echo "$0 $ARG: @progname@ could not be restarted"
-		    ERROR=7
-		fi
-	    else
-		echo "$0 $ARG: configuration broken, ignoring restart"
-		echo "$0 $ARG: (run 'apachectl configtest' for details)"
-		ERROR=7
-	    fi
-	fi
-	;;
-    status)
-	$LYNX $STATUSURL | awk ' /process$/ { print; exit } { print } '
-	;;
-    fullstatus)
-	$LYNX $STATUSURL
-	;;
-    configtest)
-	if $HTTPD -t; then
-	    :
-	else
-	    ERROR=8
-	fi
-	;;
-    *)
-	echo "usage: $0 (start|stop|restart|fullstatus|status|graceful|configtest|help)"
-	cat <<EOF
-
-start      - start @progname@
-startssl   - start @progname@ with SSL enabled
-stop       - stop @progname@
-restart    - restart @progname@ if running by sending a SIGHUP or start if 
-             not running
-fullstatus - dump a full status screen; requires lynx and mod_status enabled
-status     - dump a short status screen; requires lynx and mod_status enabled
-graceful   - do a graceful restart by sending a @AP_SIG_GRACEFUL@ or start if not running
-configtest - do a configuration syntax test
-help       - this screen
-
-EOF
-	ERROR=2
-    ;;
-
-    esac
-
-done
-
-exit $ERROR
-
-# ====================================================================
-# The Apache Software License, Version 1.1
-#
-# Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
-# reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# 1. Redistributions of source code must retain the above copyright
-#    notice, this list of conditions and the following disclaimer.
-#
-# 2. Redistributions in binary form must reproduce the above copyright
-#    notice, this list of conditions and the following disclaimer in
-#    the documentation and/or other materials provided with the
-#    distribution.
-#
-# 3. The end-user documentation included with the redistribution,
-#    if any, must include the following acknowledgment:
-#       "This product includes software developed by the
-#        Apache Software Foundation (http://www.apache.org/)."
-#    Alternately, this acknowledgment may appear in the software itself,
-#    if and wherever such third-party acknowledgments normally appear.
-#
-# 4. The names "Apache" and "Apache Software Foundation" must
-#    not be used to endorse or promote products derived from this
-#    software without prior written permission. For written
-#    permission, please contact apache@apache.org.
-#
-# 5. Products derived from this software may not be called "Apache",
-#    nor may "Apache" appear in their name, without prior written
-#    permission of the Apache Software Foundation.
-#
-# THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
-# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-# DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
-# ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
-# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
-# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-# SUCH DAMAGE.
-# ====================================================================
-#
-# This software consists of voluntary contributions made by many
-# individuals on behalf of the Apache Software Foundation.  For more
-# information on the Apache Software Foundation, please see
-# <http://www.apache.org/>.
-#
-# Portions of this software are based upon public domain software
-# originally written at the National Center for Supercomputing Applications,
-# University of Illinois, Urbana-Champaign.
-#
diff --git a/support/apxs.in b/support/apxs.in
deleted file mode 100644
index e412f22..0000000
--- a/support/apxs.in
+++ /dev/null
@@ -1,708 +0,0 @@
-#!@perlbin@ -w
-# ====================================================================
-# The Apache Software License, Version 1.1
-#
-# Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
-# reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# 1. Redistributions of source code must retain the above copyright
-#    notice, this list of conditions and the following disclaimer.
-#
-# 2. Redistributions in binary form must reproduce the above copyright
-#    notice, this list of conditions and the following disclaimer in
-#    the documentation and/or other materials provided with the
-#    distribution.
-#
-# 3. The end-user documentation included with the redistribution,
-#    if any, must include the following acknowledgment:
-#       "This product includes software developed by the
-#        Apache Software Foundation (http://www.apache.org/)."
-#    Alternately, this acknowledgment may appear in the software itself,
-#    if and wherever such third-party acknowledgments normally appear.
-#
-# 4. The names "Apache" and "Apache Software Foundation" must
-#    not be used to endorse or promote products derived from this
-#    software without prior written permission. For written
-#    permission, please contact apache@apache.org.
-#
-# 5. Products derived from this software may not be called "Apache",
-#    nor may "Apache" appear in their name, without prior written
-#    permission of the Apache Software Foundation.
-#
-# THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
-# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-# DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
-# ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
-# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
-# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-# SUCH DAMAGE.
-# ====================================================================
-#
-# This software consists of voluntary contributions made by many
-# individuals on behalf of the Apache Software Foundation.  For more
-# information on the Apache Software Foundation, please see
-# <http://www.apache.org/>.
-#
-
-require 5.003;
-use strict;
-package apxs;
-
-##
-##  Configuration
-##
-
-my $prefix         = "@prefix@";
-my $CFG_PREFIX     = $prefix;
-
-# read the configuration variables once
-my %config_vars = ();
-get_config_vars("$prefix/build/config_vars.mk",\%config_vars);
-
-my $exec_prefix    = get_vars("exec_prefix");
-my $CFG_TARGET     = get_vars("progname");
-my $CFG_SYSCONFDIR = get_vars("sysconfdir");
-my $CFG_CFLAGS     = join ' ', map { get_vars($_) }
-  qw(SHLTCFLAGS CFLAGS NOTEST_CPPFLAGS EXTRA_CPPFLAGS EXTRA_CFLAGS);
-my $includedir     = get_vars("includedir");
-my $CFG_INCLUDEDIR = eval qq("$includedir");
-my $CFG_CC         = get_vars("CC");
-my $libexecdir     = get_vars("libexecdir");
-my $CFG_LIBEXECDIR = eval qq("$libexecdir");
-my $sbindir        = get_vars("sbindir");
-my $CFG_SBINDIR    = eval qq("$sbindir");
-my $ltflags        = $ENV{'LTFLAGS'};
-$ltflags or $ltflags = "--silent";
-
-my %internal_vars = map {$_ => 1}
-    qw(TARGET CC CFLAGS CFLAGS_SHLIB LD_SHLIB LDFLAGS_SHLIB LIBS_SHLIB
-       PREFIX SBINDIR INCLUDEDIR LIBEXECDIR SYSCONFDIR);
-
-##
-##  parse argument line
-##
-
-#   defaults for parameters
-my $opt_n = '';
-my $opt_g = '';
-my $opt_c = 0;
-my $opt_o = '';
-my @opt_D = ();
-my @opt_I = ();
-my @opt_L = ();
-my @opt_l = ();
-my @opt_W = ();
-my @opt_S = ();
-my $opt_e = 0;
-my $opt_i = 0;
-my $opt_a = 0;
-my $opt_A = 0;
-my $opt_q = 0;
-my $opt_h = 0;
-
-#   this subroutine is derived from Perl's getopts.pl with the enhancement of
-#   the "+" metacharacter at the format string to allow a list to be built by
-#   subsequent occurrences of the same option.
-sub Getopts {
-    my ($argumentative, @ARGV) = @_;
-    my $errs = 0;
-    local $_;
-    local $[ = 0;
-
-    my @args = split / */, $argumentative;
-    while (@ARGV && ($_ = $ARGV[0]) =~ /^-(.)(.*)/) {
-        my ($first, $rest) = ($1,$2);
-        if ($_ =~ m|^--$|) {
-            shift @ARGV;
-            last;
-        }
-        my $pos = index($argumentative,$first);
-        if ($pos >= $[) {
-            if ($args[$pos+1] eq ':') {
-                shift @ARGV;
-                if ($rest eq '') {
-                    unless (@ARGV) {
-                        error("Incomplete option: $first (needs an argument)");
-                        $errs++;
-                    }
-                    $rest = shift(@ARGV);
-                }
-                eval "\$opt_$first = \$rest;";
-            }
-            elsif ($args[$pos+1] eq '+') {
-                shift @ARGV;
-                if ($rest eq '') {
-                    unless (@ARGV) {
-                        error("Incomplete option: $first (needs an argument)");
-                        $errs++;
-                    }
-                    $rest = shift(@ARGV);
-                }
-                eval "push(\@opt_$first, \$rest);";
-            }
-            else {
-                eval "\$opt_$first = 1";
-                if ($rest eq '') {
-                    shift(@ARGV);
-                }
-                else {
-                    $ARGV[0] = "-$rest";
-                }
-            }
-        }
-        else {
-            error("Unknown option: $first");
-            $errs++;
-            if ($rest ne '') {
-                $ARGV[0] = "-$rest";
-            }
-            else {
-                shift(@ARGV);
-            }
-        }
-    }
-    return ($errs == 0, @ARGV);
-}
-
-sub usage {
-    print STDERR "Usage: apxs -g [-S <var>=<val>] -n <modname>\n";
-    print STDERR "       apxs -q [-S <var>=<val>] <query> ...\n";
-    print STDERR "       apxs -c [-S <var>=<val>] [-o <dsofile>] [-D <name>[=<value>]]\n";
-    print STDERR "               [-I <incdir>] [-L <libdir>] [-l <libname>] [-Wc,<flags>]\n";
-    print STDERR "               [-Wl,<flags>] <files> ...\n";
-    print STDERR "       apxs -i [-S <var>=<val>] [-a] [-A] [-n <modname>] <dsofile> ...\n";
-    print STDERR "       apxs -e [-S <var>=<val>] [-a] [-A] [-n <modname>] <dsofile> ...\n";
-    exit(1);
-}
-
-#   option handling
-my $rc;
-($rc, @ARGV) = &Getopts("qn:gco:I+D+L+l+W+S+eiaA", @ARGV);
-&usage if ($rc == 0);
-&usage if ($#ARGV == -1 and not $opt_g);
-&usage if (not $opt_q and not ($opt_g and $opt_n) and not $opt_i and not $opt_c and not $opt_e);
-
-#   argument handling
-my @args = @ARGV;
-my $name = 'unknown';
-$name = $opt_n if ($opt_n ne '');
-
-if (@opt_S) {
-    my ($opt_S);
-    foreach $opt_S (@opt_S) {
-	if ($opt_S =~ m/^([^=]+)=(.*)$/) {
-	    my ($var) = $1;
-	    my ($val) = $2;
-	    my $oldval = eval "\$CFG_$var";
-
-	    unless ($var and $oldval) {
-		print STDERR "apxs:Error: no config variable $var\n";
-		&usage;
-	    }
-
-	    eval "\$CFG_${var}=\"${val}\"";
-	} else {
-	    print STDERR "apxs:Error: malformatted -S option\n";
-	    &usage;
-	}	
-    }
-}
-
-##
-##  Initial shared object support check
-##
-my $httpd = get_vars("sbindir") . "/" . get_vars("progname");
-$httpd = eval qq("$httpd");
-$httpd = eval qq("$httpd");
-
-#allow apxs to be run from the source tree, before installation
-if ($0 =~ m:support/apxs$:) {
-    ($httpd = $0) =~ s:support/apxs$::;
-}
-
-unless (-x "$httpd") {
-	error("$httpd not found or not executable");
-	exit 1;
-}
-
-unless (grep /mod_so/, `$httpd -l`) {
-    error("Sorry, no shared object support for Apache");
-    error("available under your platform. Make sure");
-    error("the Apache module mod_so is compiled into");
-    error("your server binary `$httpd'.");
-    exit 1;
-}
-
-sub get_config_vars{
-    my ($file, $rh_config) = @_;
-
-    open IN, $file or die "cannot open $file: $!";
-    while (<IN>){
-        if (/^\s*(.*?)\s*=\s*(.*)$/){
-            $rh_config->{$1} = $2;
-        }
-    }
-    close IN;
-}
-
-sub get_vars {
-    my $result = '';
-    my $ok = 0;
-    my $arg;
-    foreach $arg (@_) {
-        if (exists $config_vars{$arg} or exists $config_vars{lc $arg}) {
-            my $val = exists $config_vars{$arg}
-                ? $config_vars{$arg}
-                : $config_vars{lc $arg};
-            $val =~ s/[()]//g;
-            $result .= eval "qq($val)";
-            $result .= ";;";
-            $ok = 1;
-        }
-        if (not $ok) {
-            if (exists $internal_vars{$arg} or exists $internal_vars{lc $arg}) {
-                my $val = exists $internal_vars{$arg} ? $arg : lc $arg;
-                $val = eval "\$CFG_$val";
-                $result .= eval "qq($val)";
-                $result .= ";;";
-                $ok = 1;
-            }
-            if (not $ok) {
-                error("Invalid query string `$arg'");
-                exit(1);
-            }
-        }
-    }
-    $result =~ s|;;$||;
-    $result =~ s|:| |;
-    return $result;
-}
-
-##
-##  Operation
-##
-
-#   helper function for executing a list of
-#   system command with return code checks
-sub execute_cmds {
-    my (@cmds) = @_;
-    my ($cmd, $rc);
-
-    foreach $cmd (@cmds) {
-        notice($cmd);
-        $rc = system $cmd;
-        if ($rc) {
-            error(sprintf "Command failed with rc=%d\n", $rc << 8);
-            exit 1 ;
-        }
-    }
-}
-
-if ($opt_g) {
-    ##
-    ##  SAMPLE MODULE SOURCE GENERATION
-    ##
-
-    if (-d $name) {
-        error("Directory `$name' already exists. Remove first");
-        exit(1);
-    }
-
-    my $data = join('', <DATA>);
-    $data =~ s|%NAME%|$name|sg;
-    $data =~ s|%TARGET%|$CFG_TARGET|sg;
-    $data =~ s|%PREFIX%|$prefix|sg;
-
-    my ($mkf, $mods, $src) = ($data =~ m|^(.+)-=#=-\n(.+)-=#=-\n(.+)|s);
-
-    notice("Creating [DIR]  $name");
-    system("mkdir $name");
-    notice("Creating [FILE] $name/Makefile");
-    open(FP, ">${name}/Makefile") || die;
-    print FP $mkf;
-    close(FP);
-    notice("Creating [FILE] $name/modules.mk");
-    open(FP, ">${name}/modules.mk") || die;
-    print FP $mods;
-    close(FP);
-    notice("Creating [FILE] $name/mod_$name.c");
-    open(FP, ">${name}/mod_${name}.c") || die;
-    print FP $src;
-    close(FP);
-    notice("Creating [FILE] $name/.deps");
-    system("touch ${name}/.deps");
-
-    exit(0);
-}
-
-
-if ($opt_q) {
-    ##
-    ##  QUERY INFORMATION 
-    ##
-    my $result = get_vars(@args);
-    print "$result";
-}
-
-if ($opt_c) {
-    ##
-    ##  SHARED OBJECT COMPILATION
-    ##
-
-    #   split files into sources and objects
-    my @srcs = ();
-    my @objs = ();
-    my $f;
-    foreach $f (@args) {
-        if ($f =~ m|\.c$|) {
-            push(@srcs, $f);
-        }
-        else {
-            push(@objs, $f);
-        }
-    }
-
-    #   determine output file
-    my $dso_file;
-    if ($opt_o eq '') {
-        if ($#srcs > -1) {
-            $dso_file = $srcs[0];
-            $dso_file =~ s|\.[^.]+$|.la|;
-        }
-        elsif ($#objs > -1) {
-            $dso_file = $objs[0];
-            $dso_file =~ s|\.[^.]+$|.la|;
-        }
-        else {
-            $dso_file = "mod_unknown.so";
-        }
-    }
-    else {
-        $dso_file = $opt_o;
-    }
-
-    #   create compilation commands
-    my @cmds = ();
-    my $opt = '';
-    my ($opt_Wc, $opt_I, $opt_D);
-    foreach $opt_Wc (@opt_W) {
-        $opt .= "$1 " if ($opt_Wc =~ m|^\s*c,(.*)$|);
-    }
-    foreach $opt_I (@opt_I) {
-        $opt .= "-I$opt_I ";
-    }
-    foreach $opt_D (@opt_D) {
-        $opt .= "-D$opt_D ";
-    }
-    my $cflags = "$CFG_CFLAGS";
-    my $s;
-    my $mod;
-    foreach $s (@srcs) {
-        my $slo = $s;
-        $slo =~ s|\.c$|.slo|;
-        my $lo = $s;
-        $lo =~ s|\.c$|.lo|;
-        my $la = $s;
-        $la =~ s|\.c$|.la|;
-        my $o = $s;
-        $o =~ s|\.c$|.o|;
-        push(@cmds, "$prefix/build/libtool $ltflags --mode=compile $CFG_CC $cflags -I$CFG_INCLUDEDIR $opt -c -o $lo $s && touch $slo");
-        unshift(@objs, $lo);
-    }
-
-    #   create link command
-    my $o;
-    my $lo;	
-    foreach $o (@objs) {
-        $lo .= " $o";
-    }
-    my ($opt_Wl, $opt_L, $opt_l);
-    foreach $opt_Wl (@opt_W) {
-        if ($CFG_CC !~ m/gcc$/) {
-            $opt .= " $1" if ($opt_Wl =~ m|^\s*l,(.*)$|);
-        } else {
-            $opt .= " -W$opt_Wl";
-        }
-    }
-    foreach $opt_L (@opt_L) {
-        $opt .= " -L$opt_L";
-    }
-    foreach $opt_l (@opt_l) {
-        $opt .= " -l$opt_l";
-    }
-
-    push(@cmds, "$prefix/build/libtool $ltflags --mode=link $CFG_CC -o $dso_file -rpath $CFG_LIBEXECDIR -module -avoid-version $opt $lo");
-
-    #   execute the commands
-    &execute_cmds(@cmds);
-
-    #   allow one-step compilation and installation
-    if ($opt_i or $opt_e) {
-        @args = ( $dso_file );
-    }
-}
-
-if ($opt_i or $opt_e) {
-    ##
-    ##  SHARED OBJECT INSTALLATION
-    ##
-
-    #   determine installation commands
-    #   and corresponding LoadModule/AddModule directives
-    my @lmd = ();
-    my @amd = ();
-    my @cmds = ();
-    my $f;
-    foreach $f (@args) {
-        if ($f !~ m#(\.so$|\.la$)#) {
-            error("file $f is not a shared object");
-            exit(1);
-        }
-        my $t = $f;
-        $t =~ s|^.+/([^/]+)$|$1|;
-        $t =~ s|\.la$|\.so|;
-        if ($opt_i) {
-	    push(@cmds, "$prefix/build/instdso.sh SH_LIBTOOL='" .
-                 "$prefix/build/libtool' $f $CFG_LIBEXECDIR");
-	    push(@cmds, "chmod 755 $CFG_LIBEXECDIR/$t");
-        }
-
-        #   determine module symbolname and filename
-        my $filename = '';
-        if ($name eq 'unknown') {
-            $name = '';
-            my $base = $f;
-            $base =~ s|\.[^.]+$||;
-            if (-f "$base.c") {
-                open(FP, "<$base.c");
-                my $content = join('', <FP>);
-                close(FP);
-                if ($content =~ m|.*module\s+(?:AP_MODULE_DECLARE_DATA\s+)?([a-zA-Z0-9_]+)_module\s*=\s*.*|s) {
-                    $name = "$1";
-                    $filename = "$base.c";
-                    $filename =~ s|^[^/]+/||;
-                }
-            }
-            if ($name eq '') {
-                if ($base =~ m|.*mod_([a-zA-Z0-9_]+)\..+|) {
-                    $name = "$1";
-                    $filename = $base;
-                    $filename =~ s|^[^/]+/||;
-                }
-            }
-            if ($name eq '') {
-                error("Sorry, cannot determine bootstrap symbol name");
-                error("Please specify one with option `-n'");
-                exit(1);
-            }
-        }
-        if ($filename eq '') {
-            $filename = "mod_${name}.c";
-        }
-        my $dir = $CFG_LIBEXECDIR;
-        $dir =~ s|^$CFG_PREFIX/?||;
-        $dir =~ s|(.)$|$1/|;
-	$t =~ s|\.la$|.so|;
-        push(@lmd, sprintf("LoadModule %-18s %s", "${name}_module", "$dir$t"));
-        push(@amd, sprintf("AddModule %s", $filename));
-    }
-
-    #   execute the commands
-    &execute_cmds(@cmds);
-
-    #   activate module via LoadModule/AddModule directive
-    if ($opt_a or $opt_A) {
-        if (not -f "$CFG_SYSCONFDIR/$CFG_TARGET.conf") {
-            error("Config file $CFG_SYSCONFDIR/$CFG_TARGET.conf not found");
-            exit(1);
-        }
-
-        open(FP, "<$CFG_SYSCONFDIR/$CFG_TARGET.conf") || die;
-        my $content = join('', <FP>);
-        close(FP);
-
-        if ($content !~ m|\n#?\s*LoadModule\s+|) {
-            error("Activation failed for custom $CFG_SYSCONFDIR/$CFG_TARGET.conf file.");
-            error("At least one `LoadModule' directive already has to exist.");
-            exit(1);
-        }
-
-        my $lmd;
-        my $c = '';
-        $c = '#' if ($opt_A);
-        foreach $lmd (@lmd) {
-            my $what = $opt_A ? "preparing" : "activating";
-            if ($content !~ m|\n#?\s*$lmd|) {
-                 $content =~ s|^(.*\n#?\s*LoadModule\s+[^\n]+\n)|$1$c$lmd\n|sg;
-            } else {
-                 $content =~ s|^(.*\n)#?\s*$lmd[^\n]*\n|$1$c$lmd\n|sg;
-            }
-            $lmd =~ m|LoadModule\s+(.+?)_module.*|;
-            notice("[$what module `$1' in $CFG_SYSCONFDIR/$CFG_TARGET.conf]");
-        }
-        my $amd;
-        foreach $amd (@amd) {
-            if ($content !~ m|\n#?\s*$amd|) {
-                 $content =~ s|^(.*\n#?\s*AddModule\s+[^\n]+\n)|$1$c$amd\n|sg;
-            } else {
-                 $content =~ s|^(.*\n)#?\s*$amd[^\n]*\n|$1$c$amd\n|sg;
-            }
-        }
-        if (@lmd or @amd) {
-            if (open(FP, ">$CFG_SYSCONFDIR/$CFG_TARGET.conf.new")) {
-                print FP $content;
-                close(FP);
-                system("cp $CFG_SYSCONFDIR/$CFG_TARGET.conf $CFG_SYSCONFDIR/$CFG_TARGET.conf.bak && " .
-                       "cp $CFG_SYSCONFDIR/$CFG_TARGET.conf.new $CFG_SYSCONFDIR/$CFG_TARGET.conf && " .
-                       "rm $CFG_SYSCONFDIR/$CFG_TARGET.conf.new");
-            } else {
-                notice("unable to open configuration file");
-            }
-	}
-    }
-}
-
-sub error{
-    print STDERR "apxs:Error: $_[0].\n";
-}
-
-sub notice{
-    print STDERR "$_[0]\n";
-}
-
-##EOF##
-__DATA__
-##
-##  Makefile -- Build procedure for sample %NAME% Apache module
-##  Autogenerated via ``apxs -n %NAME% -g''.
-##
-
-builddir=$(shell pwd)
-top_srcdir=%PREFIX%
-top_builddir=%PREFIX%
-include %PREFIX%/build/special.mk
-
-#   the used tools
-APXS=apxs
-APACHECTL=apachectl
-
-#   additional defines, includes and libraries
-#DEF=-Dmy_define=my_value
-#INC=-Imy/include/dir
-#LIB=-Lmy/lib/dir -lmylib
-
-#   the default target
-all: local-shared-build
-
-#   install the shared object file into Apache 
-install: install-modules
-
-#   cleanup
-clean:
-	-rm -f mod_%NAME%.o mod_%NAME%.lo mod_%NAME%.slo mod_%NAME%.la 
-
-#   simple test
-test: reload
-	lynx -mime_header http://localhost/%NAME%
-
-#   install and activate shared object by reloading Apache to
-#   force a reload of the shared object file
-reload: install restart
-
-#   the general Apache start/restart/stop
-#   procedures
-start:
-	$(APACHECTL) start
-restart:
-	$(APACHECTL) restart
-stop:
-	$(APACHECTL) stop
-
--=#=-
-mod_%NAME%.la: mod_%NAME%.slo
-	$(SH_LINK) -rpath $(libexecdir) -module -avoid-version  mod_%NAME%.lo
-DISTCLEAN_TARGETS = modules.mk
-shared =  mod_%NAME%.la
--=#=-
-/* 
-**  mod_%NAME%.c -- Apache sample %NAME% module
-**  [Autogenerated via ``apxs -n %NAME% -g'']
-**
-**  To play with this sample module first compile it into a
-**  DSO file and install it into Apache's modules directory 
-**  by running:
-**
-**    $ apxs -c -i mod_%NAME%.c
-**
-**  Then activate it in Apache's %TARGET%.conf file for instance
-**  for the URL /%NAME% in as follows:
-**
-**    #   %TARGET%.conf
-**    LoadModule %NAME%_module modules/mod_%NAME%.so
-**    <Location /%NAME%>
-**    SetHandler %NAME%
-**    </Location>
-**
-**  Then after restarting Apache via
-**
-**    $ apachectl restart
-**
-**  you immediately can request the URL /%NAME% and watch for the
-**  output of this module. This can be achieved for instance via:
-**
-**    $ lynx -mime_header http://localhost/%NAME% 
-**
-**  The output should be similar to the following one:
-**
-**    HTTP/1.1 200 OK
-**    Date: Tue, 31 Mar 1998 14:42:22 GMT
-**    Server: Apache/1.3.4 (Unix)
-**    Connection: close
-**    Content-Type: text/html
-**  
-**    The sample page from mod_%NAME%.c
-*/ 
-
-#include "httpd.h"
-#include "http_config.h"
-#include "http_protocol.h"
-#include "ap_config.h"
-
-/* The sample content handler */
-static int %NAME%_handler(request_rec *r)
-{
-    if (strcmp(r->handler, "%NAME%")) {
-        return DECLINED;
-    }
-    r->content_type = "text/html";      
-
-    if (!r->header_only)
-        ap_rputs("The sample page from mod_%NAME%.c\n", r);
-    return OK;
-}
-
-static void %NAME%_register_hooks(apr_pool_t *p)
-{
-    ap_hook_handler(%NAME%_handler, NULL, NULL, APR_HOOK_MIDDLE);
-}
-
-/* Dispatch list for API hooks */
-module AP_MODULE_DECLARE_DATA %NAME%_module = {
-    STANDARD20_MODULE_STUFF, 
-    NULL,                  /* create per-dir    config structures */
-    NULL,                  /* merge  per-dir    config structures */
-    NULL,                  /* create per-server config structures */
-    NULL,                  /* merge  per-server config structures */
-    NULL,                  /* table of config file commands       */
-    %NAME%_register_hooks  /* register hooks                      */
-};
-
diff --git a/support/checkgid.c b/support/checkgid.c
deleted file mode 100644
index 75b7859..0000000
--- a/support/checkgid.c
+++ /dev/null
@@ -1,148 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-/*
- * Given one or more group identifers on the command line (e.g.,
- * "httpd" or "#-1"), figure out whether they'll be valid for
- * the server to use at run-time.
- *
- * If a groupname isn't found, or we can't setgid() to it, return
- * -1.  If all groups are valid, return 0.
- *
- * This may need to be run as the superuser for the setgid() to
- * succeed; running it as any other user may result in a false
- * negative.
- */
-
-#include "ap_config.h"
-#if APR_HAVE_STDIO_H
-#include <stdio.h>
-#endif
-#if APR_HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#if APR_HAVE_SYS_TYPES_H
-#include <sys/types.h>
-#endif
-#if HAVE_GRP_H
-#include <grp.h>
-#endif
-#if APR_HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-int main(int argc, char *argv[])
-{
-    int i;
-    int result;
-    gid_t gid;
-    struct group *grent;
-    struct group fake_grent;
-
-    /*
-     * Assume success. :-)
-     */
-    result = 0;
-    for (i = 1; i < argc; ++i) {
-        char *arg;
-        arg = argv[i];
-
-        /*
-         * If it's from a 'Group #-1' statement, get the numeric value
-         * and skip the group lookup stuff.
-         */
-        if (*arg == '#') {
-            gid = atoi(&arg[1]);
-            fake_grent.gr_gid = gid;
-            grent = &fake_grent;
-        }
-        else {
-            grent = getgrnam(arg);
-        }
-
-        /*
-         * A NULL return means no such group was found, so we're done
-         * with this one.
-         */
-        if (grent == NULL) {
-            fprintf(stderr, "%s: group '%s' not found\n", argv[0], arg);
-            result = -1;
-        }
-        else {
-            int check;
-
-            /*
-             * See if we can switch to the numeric GID we have. If so,
-             * all well and good; if not, well..
-             */
-            gid = grent->gr_gid;
-            check = setgid(gid);
-            if (check != 0) {
-                fprintf(stderr, "%s: invalid group '%s'\n", argv[0], arg);
-                perror(argv[0]);
-                result = -1;
-            }
-        }
-    }
-    /*
-     * Worst-case return value.
-     */
-    return result;
-}
-/*
- * Local Variables:
- * mode: C
- * c-file-style: "bsd"
- * End:
- */
diff --git a/support/config.m4 b/support/config.m4
deleted file mode 100644
index 5dd691f..0000000
--- a/support/config.m4
+++ /dev/null
@@ -1,83 +0,0 @@
-htpasswd_LTFLAGS=""
-htdigest_LTFLAGS=""
-rotatelogs_LTFLAGS=""
-logresolve_LTFLAGS=""
-htdbm_LTFLAGS=""
-ab_LTFLAGS=""
-checkgid_LTFLAGS=""
-
-AC_ARG_ENABLE(static-support,APACHE_HELP_STRING(--enable-static-support,Build a statically linked version the support binaries),[
-if test "$enableval" = "yes" ; then
-  APR_ADDTO(htpasswd_LTFLAGS, [-static])
-  APR_ADDTO(htdigest_LTFLAGS, [-static])
-  APR_ADDTO(rotatelogs_LTFLAGS, [-static])
-  APR_ADDTO(logresolve_LTFLAGS, [-static])
-  APR_ADDTO(htdbm_LTFLAGS, [-static])
-  APR_ADDTO(ab_LTFLAGS, [-static])
-  APR_ADDTO(checkgid_LTFLAGS, [-static])
-fi
-])
-
-AC_ARG_ENABLE(static-htpasswd,APACHE_HELP_STRING(--enable-static-htpasswd,Build a statically linked version of htpasswd),[
-if test "$enableval" = "yes" ; then
-  APR_ADDTO(htpasswd_LTFLAGS, [-static])
-else
-  APR_REMOVEFROM(htpasswd_LTFLAGS, [-static])
-fi
-])
-APACHE_SUBST(htpasswd_LTFLAGS)
-
-AC_ARG_ENABLE(static-htdigest,APACHE_HELP_STRING(--enable-static-htdigest,Build a statically linked version of htdigest),[
-if test "$enableval" = "yes" ; then
-  APR_ADDTO(htdigest_LTFLAGS, [-static])
-else
-  APR_REMOVEFROM(htdigest_LTFLAGS, [-static])
-fi
-])
-APACHE_SUBST(htdigest_LTFLAGS)
-
-AC_ARG_ENABLE(static-rotatelogs,APACHE_HELP_STRING(--enable-static-rotatelogs,Build a statically linked version of rotatelogs),[
-if test "$enableval" = "yes" ; then
-  APR_ADDTO(rotatelogs_LTFLAGS, [-static])
-else
-  APR_REMOVEFROM(rotatelogs_LTFLAGS, [-static])
-fi
-])
-APACHE_SUBST(rotatelogs_LTFLAGS)
-
-AC_ARG_ENABLE(static-logresolve,APACHE_HELP_STRING(--enable-static-logresolve,Build a statically linked version of logresolve),[
-if test "$enableval" = "yes" ; then
-  APR_ADDTO(logresolve_LTFLAGS, [-static])
-else
-  APR_REMOVEFROM(logresolve_LTFLAGS, [-static])
-fi
-])
-APACHE_SUBST(logresolve_LTFLAGS)
-
-AC_ARG_ENABLE(static-htdbm,APACHE_HELP_STRING(--enable-static-htdbm,Build a statically linked version of htdbm),[
-if test "$enableval" = "yes" ; then
-  APR_ADDTO(htdbm_LTFLAGS, [-static])
-else
-  APR_REMOVEFROM(htdbm_LTFLAGS, [-static])
-fi
-])
-APACHE_SUBST(htdbm_LTFLAGS)
-
-AC_ARG_ENABLE(static-ab,APACHE_HELP_STRING(--enable-static-ab,Build a statically linked version of ab),[
-if test "$enableval" = "yes" ; then
-  APR_ADDTO(ab_LTFLAGS, [-static])
-else
-  APR_REMOVEFROM(ab_LTFLAGS, [-static])
-fi
-])
-APACHE_SUBST(ab_LTFLAGS)
-
-AC_ARG_ENABLE(static-checkgid,APACHE_HELP_STRING(--enable-static-checkgid,Build a statically linked version of checkgid),[
-if test "$enableval" = "yes" ; then
-  APR_ADDTO(checkgid_LTFLAGS, [-static])
-else
-  APR_REMOVEFROM(checkgid_LTFLAGS, [-static])
-fi
-])
-APACHE_SUBST(checkgid_LTFLAGS)
-
diff --git a/support/dbmmanage b/support/dbmmanage
deleted file mode 100644
index ad9a4ac..0000000
--- a/support/dbmmanage
+++ /dev/null
@@ -1,350 +0,0 @@
-#!/usr/bin/perl
-# ====================================================================
-# The Apache Software License, Version 1.1
-#
-# Copyright (c) 2000-2001 The Apache Software Foundation.  All rights
-# reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# 1. Redistributions of source code must retain the above copyright
-#    notice, this list of conditions and the following disclaimer.
-#
-# 2. Redistributions in binary form must reproduce the above copyright
-#    notice, this list of conditions and the following disclaimer in
-#    the documentation and/or other materials provided with the
-#    distribution.
-#
-# 3. The end-user documentation included with the redistribution,
-#    if any, must include the following acknowledgment:
-#       "This product includes software developed by the
-#        Apache Software Foundation (http://www.apache.org/)."
-#    Alternately, this acknowledgment may appear in the software itself,
-#    if and wherever such third-party acknowledgments normally appear.
-#
-# 4. The names "Apache" and "Apache Software Foundation" must
-#    not be used to endorse or promote products derived from this
-#    software without prior written permission. For written
-#    permission, please contact apache@apache.org.
-#
-# 5. Products derived from this software may not be called "Apache",
-#    nor may "Apache" appear in their name, without prior written
-#    permission of the Apache Software Foundation.
-#
-# THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
-# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-# DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
-# ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
-# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
-# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-# SUCH DAMAGE.
-# ====================================================================
-#
-# This software consists of voluntary contributions made by many
-# individuals on behalf of the Apache Software Foundation.  For more
-# information on the Apache Software Foundation, please see
-# <http://www.apache.org/>.
-#
-
-#for more functionality see the HTTPD::UserAdmin module:
-# http://www.perl.com/CPAN/modules/by-module/HTTPD/HTTPD-Tools-x.xx.tar.gz
-#
-# usage: dbmmanage <DBMfile> <command> <user> <password> <groups> <comment>
-
-package dbmmanage;
-#                               -ldb    -lndbm    -lgdbm    -lsdbm
-BEGIN { @AnyDBM_File::ISA = qw(DB_File NDBM_File GDBM_File SDBM_File) }
-use strict;
-use Fcntl;
-use AnyDBM_File ();
-
-sub usage {
-    my $cmds = join "|", sort keys %dbmc::;
-    die <<SYNTAX;
-Usage: dbmmanage [enc] dbname command [username [pw [group[,group] [comment]]]]
-
-    where enc is  -d for crypt encryption (default except on Win32, Netware)
-                  -m for MD5 encryption (default on Win32, Netware)
-                  -s for SHA1 encryption
-                  -p for plaintext
-
-    command is one of: $cmds
-
-    pw of . for update command retains the old password
-    pw of - (or blank) for update command prompts for the password
-
-    groups or comment of . (or blank) for update command retains old values
-    groups or comment of - for update command clears the existing value
-    groups or comment of - for add and adduser commands is the empty value
-SYNTAX
-}
-
-sub need_sha1_crypt {
-    if (!eval ('require "Digest/SHA1.pm";')) {
-        print STDERR <<SHAERR;
-dbmmanage SHA1 passwords require the interface or the module Digest::SHA1
-available from CPAN:
- 
-    http://www.cpan.org/modules/by-module/Digest/Digest-MD5-2.12.tar.gz
- 
-Please install Digest::SHA1 and try again, or use a different crypt option:
-
-SHAERR
-        usage();
-    }
-}
-
-sub need_md5_crypt {
-    if (!eval ('require "Crypt/PasswdMD5.pm";')) {
-        print STDERR <<MD5ERR;
-dbmmanage MD5 passwords require the module Crypt::PasswdMD5 available from CPAN
- 
-    http://www.cpan.org/modules/by-module/Crypt/Crypt-PasswdMD5-1.1.tar.gz
- 
-Please install Crypt::PasswdMD5 and try again, or use a different crypt option:
-
-MD5ERR
-        usage();
-    }
-}
-
-# if your osname is in $newstyle_salt, then use new style salt (starts with '_' and contains
-# four bytes of iteration count and four bytes of salt).  Otherwise, just use
-# the traditional two-byte salt.
-# see the man page on your system to decide if you have a newer crypt() lib.
-# I believe that 4.4BSD derived systems do (at least BSD/OS 2.0 does).
-# The new style crypt() allows up to 20 characters of the password to be
-# significant rather than only 8.
-#
-my $newstyle_salt_platforms = join '|', qw{bsdos}; #others?
-my $newstyle_salt = $^O =~ /(?:$newstyle_salt_platforms)/;
-
-# Some platforms just can't crypt() for Apache
-#
-my $crypt_not_supported_platforms = join '|', qw{MSWin32 NetWare}; #others?
-my $crypt_not_supported = $^O =~ /(?:$crypt_not_supported_platforms)/;
-
-my $crypt_method = "crypt";
-
-if ($crypt_not_supported) {
-    $crypt_method = "md5";
-}
-
-# Some platforms won't jump through our favorite hoops
-#
-my $not_unix_platforms = join '|', qw{MSWin32 NetWare}; #others?
-my $not_unix = $^O =~ /(?:$not_unix_platforms)/;
-
-if ($crypt_not_supported) {
-    $crypt_method = "md5";
-}
-
-if (@ARGV[0] eq "-d") {
-    shift @ARGV;
-    if ($crypt_not_supported) {
-        print STDERR 
-              "Warning: Apache/$^O does not support crypt()ed passwords!\n\n";
-    }
-    $crypt_method = "crypt";
-}
-
-if (@ARGV[0] eq "-m") {
-    shift @ARGV;
-    $crypt_method = "md5";
-}
-
-if (@ARGV[0] eq "-p") {
-    shift @ARGV;
-    if (!$crypt_not_supported) {
-        print STDERR 
-              "Warning: Apache/$^O does not support plaintext passwords!\n\n";
-    }
-    $crypt_method = "plain";
-}
-
-if (@ARGV[0] eq "-s") {
-    shift @ARGV;
-    need_sha1_crypt();
-    $crypt_method = "sha1";
-}
-
-if ($crypt_method eq "md5") {
-    need_md5_crypt();
-}
-
-my($file,$command,$key,$crypted_pwd,$groups,$comment) = @ARGV;
-
-usage() unless $file and $command and defined &{$dbmc::{$command}};
-
-# remove extension if any
-my $chop = join '|', qw{db.? pag dir};
-$file =~ s/\.($chop)$//;
-
-my $is_update = $command eq "update";
-my %DB = ();
-my @range = ();
-my($mode, $flags) = $command =~ 
-    /^(?:view|check)$/ ? (0644, O_RDONLY) : (0644, O_RDWR|O_CREAT);
-
-tie (%DB, "AnyDBM_File", $file, $flags, $mode) || die "Can't tie $file: $!";
-dbmc->$command();
-untie %DB;
-
-
-my $x;
-sub genseed {
-    my $psf;
-    if ($not_unix) {
-	srand (time ^ $$ or time ^ ($$ + ($$ << 15)));
-    }
-    else {
-        for (qw(-xlwwa -le)) { 
-	    `ps $_ 2>/dev/null`;
-            $psf = $_, last unless $?;
-        }
-        srand (time ^ $$ ^ unpack("%L*", `ps $psf | gzip -f`));
-    }
-    @range = (qw(. /), '0'..'9','a'..'z','A'..'Z');
-    $x = int scalar @range;
-}
-
-sub randchar { 
-    join '', map $range[rand $x], 1..shift||1;
-}
-
-sub saltpw_crypt {
-    genseed() unless @range; 
-    return $newstyle_salt ? 
-	join '', "_", randchar, "a..", randchar(4) :
-        randchar(2);
-}
-
-sub cryptpw_crypt {
-    my ($pw, $salt) = @_;
-    $salt = saltpw_crypt unless $salt;
-    crypt $pw, $salt;
-}
-
-sub saltpw_md5 {
-    genseed() unless @range; 
-    randchar(8);
-}
-
-sub cryptpw_md5 {
-    my($pw, $salt) = @_;
-    $salt = saltpw_md5 unless $salt;
-    Crypt::PasswdMD5::apache_md5_crypt($pw, $salt);
-}
-
-sub cryptpw_sha1 {
-    my($pw, $salt) = @_;
-    '{SHA}' . Digest::SHA1::sha1_base64($pw) . "=";
-}
-
-sub cryptpw {
-    if ($crypt_method eq "md5") {
-        return cryptpw_md5(@_);
-    } elsif ($crypt_method eq "sha1") {
-        return cryptpw_sha1(@_);
-    } elsif ($crypt_method eq "crypt") {
-        return cryptpw_crypt(@_);
-    }
-    @_[0]; # otherwise return plaintext
-}
-
-sub getpass {
-    my $prompt = shift || "Enter password:";
-
-    unless($not_unix) { 
-	open STDIN, "/dev/tty" or warn "couldn't open /dev/tty $!\n";
-	system "stty -echo;";
-    }
-
-    my($c,$pwd);
-    print STDERR $prompt;
-    while (($c = getc(STDIN)) ne '' and $c ne "\n" and $c ne "\r") {
-	$pwd .= $c;
-    }
-
-    system "stty echo" unless $not_unix;
-    print STDERR "\n";
-    die "Can't use empty password!\n" unless length $pwd;
-    return $pwd;
-}
-
-sub dbmc::update {
-    die "Sorry, user `$key' doesn't exist!\n" unless $DB{$key};
-    $crypted_pwd = (split /:/, $DB{$key}, 3)[0] if $crypted_pwd eq '.';
-    $groups = (split /:/, $DB{$key}, 3)[1] if !$groups || $groups eq '.';
-    $comment = (split /:/, $DB{$key}, 3)[2] if !$comment || $comment eq '.';
-    if (!$crypted_pwd || $crypted_pwd eq '-') {
-        dbmc->adduser;
-    }
-    else {
-        dbmc->add;
-    }
-}
-
-sub dbmc::add {
-    die "Can't use empty password!\n" unless $crypted_pwd;
-    unless($is_update) {
-	die "Sorry, user `$key' already exists!\n" if $DB{$key};
-    }
-    $groups = '' if $groups eq '-';
-    $comment = '' if $comment eq '-';
-    $groups .= ":" . $comment if $comment;
-    $crypted_pwd .= ":" . $groups if $groups;
-    $DB{$key} = $crypted_pwd;
-    my $action = $is_update ? "updated" : "added";
-    print "User $key $action with password encrypted to $DB{$key} using $crypt_method\n";
-}
-
-sub dbmc::adduser {
-    my $value = getpass "New password:";
-    die "They don't match, sorry.\n" unless getpass("Re-type new password:") eq $value;
-    $crypted_pwd = cryptpw $value;
-    dbmc->add;
-}
-
-sub dbmc::delete {
-    die "Sorry, user `$key' doesn't exist!\n" unless $DB{$key};
-    delete $DB{$key}, print "`$key' deleted\n";
-}
-
-sub dbmc::view {
-    print $key ? "$key:$DB{$key}\n" : map { "$_:$DB{$_}\n" if $DB{$_} } keys %DB;
-}
-
-sub dbmc::check {
-    die "Sorry, user `$key' doesn't exist!\n" unless $DB{$key};
-    my $chkpass = (split /:/, $DB{$key}, 3)[0];
-    my $testpass = getpass();
-    if (substr($chkpass, 0, 6) eq '$apr1$') {
-        need_md5_crypt;
-        $crypt_method = "md5";
-    } elsif (substr($chkpass, 0, 5) eq '{SHA}') {
-        need_sha1_crypt;
-        $crypt_method = "sha1";
-    } elsif (length($chkpass) == 13 && $chkpass ne $testpass) {
-        $crypt_method = "crypt";
-    } else {
-        $crypt_method = "plain";
-    }
-    print $crypt_method . (cryptpw($testpass, $chkpass) eq $chkpass 
-                           ? " password ok\n" : " password mismatch\n");
-}
-
-sub dbmc::import {
-    while(defined($_ = <STDIN>) and chomp) {
-	($key,$crypted_pwd,$groups,$comment) = split /:/, $_, 4;
-	dbmc->add;
-    }
-}
-
diff --git a/support/dbmmanage.in b/support/dbmmanage.in
deleted file mode 100644
index f468199..0000000
--- a/support/dbmmanage.in
+++ /dev/null
@@ -1,350 +0,0 @@
-#!@perlbin@
-# ====================================================================
-# The Apache Software License, Version 1.1
-#
-# Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
-# reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# 1. Redistributions of source code must retain the above copyright
-#    notice, this list of conditions and the following disclaimer.
-#
-# 2. Redistributions in binary form must reproduce the above copyright
-#    notice, this list of conditions and the following disclaimer in
-#    the documentation and/or other materials provided with the
-#    distribution.
-#
-# 3. The end-user documentation included with the redistribution,
-#    if any, must include the following acknowledgment:
-#       "This product includes software developed by the
-#        Apache Software Foundation (http://www.apache.org/)."
-#    Alternately, this acknowledgment may appear in the software itself,
-#    if and wherever such third-party acknowledgments normally appear.
-#
-# 4. The names "Apache" and "Apache Software Foundation" must
-#    not be used to endorse or promote products derived from this
-#    software without prior written permission. For written
-#    permission, please contact apache@apache.org.
-#
-# 5. Products derived from this software may not be called "Apache",
-#    nor may "Apache" appear in their name, without prior written
-#    permission of the Apache Software Foundation.
-#
-# THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
-# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-# DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
-# ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
-# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
-# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-# SUCH DAMAGE.
-# ====================================================================
-#
-# This software consists of voluntary contributions made by many
-# individuals on behalf of the Apache Software Foundation.  For more
-# information on the Apache Software Foundation, please see
-# <http://www.apache.org/>.
-#
-
-#for more functionality see the HTTPD::UserAdmin module:
-# http://www.perl.com/CPAN/modules/by-module/HTTPD/HTTPD-Tools-x.xx.tar.gz
-#
-# usage: dbmmanage <DBMfile> <command> <user> <password> <groups> <comment>
-
-package dbmmanage;
-#                               -ldb    -lndbm    -lgdbm    -lsdbm
-BEGIN { @AnyDBM_File::ISA = qw(DB_File NDBM_File GDBM_File SDBM_File) }
-use strict;
-use Fcntl;
-use AnyDBM_File ();
-
-sub usage {
-    my $cmds = join "|", sort keys %dbmc::;
-    die <<SYNTAX;
-Usage: dbmmanage [enc] dbname command [username [pw [group[,group] [comment]]]]
-
-    where enc is  -d for crypt encryption (default except on Win32, Netware)
-                  -m for MD5 encryption (default on Win32, Netware)
-                  -s for SHA1 encryption
-                  -p for plaintext
-
-    command is one of: $cmds
-
-    pw of . for update command retains the old password
-    pw of - (or blank) for update command prompts for the password
-
-    groups or comment of . (or blank) for update command retains old values
-    groups or comment of - for update command clears the existing value
-    groups or comment of - for add and adduser commands is the empty value
-SYNTAX
-}
-
-sub need_sha1_crypt {
-    if (!eval ('require "Digest/SHA1.pm";')) {
-        print STDERR <<SHAERR;
-dbmmanage SHA1 passwords require the interface or the module Digest::SHA1
-available from CPAN:
- 
-    http://www.cpan.org/modules/by-module/Digest/Digest-MD5-2.12.tar.gz
- 
-Please install Digest::SHA1 and try again, or use a different crypt option:
-
-SHAERR
-        usage();
-    }
-}
-
-sub need_md5_crypt {
-    if (!eval ('require "Crypt/PasswdMD5.pm";')) {
-        print STDERR <<MD5ERR;
-dbmmanage MD5 passwords require the module Crypt::PasswdMD5 available from CPAN
- 
-    http://www.cpan.org/modules/by-module/Crypt/Crypt-PasswdMD5-1.1.tar.gz
- 
-Please install Crypt::PasswdMD5 and try again, or use a different crypt option:
-
-MD5ERR
-        usage();
-    }
-}
-
-# if your osname is in $newstyle_salt, then use new style salt (starts with '_' and contains
-# four bytes of iteration count and four bytes of salt).  Otherwise, just use
-# the traditional two-byte salt.
-# see the man page on your system to decide if you have a newer crypt() lib.
-# I believe that 4.4BSD derived systems do (at least BSD/OS 2.0 does).
-# The new style crypt() allows up to 20 characters of the password to be
-# significant rather than only 8.
-#
-my $newstyle_salt_platforms = join '|', qw{bsdos}; #others?
-my $newstyle_salt = $^O =~ /(?:$newstyle_salt_platforms)/;
-
-# Some platforms just can't crypt() for Apache
-#
-my $crypt_not_supported_platforms = join '|', qw{MSWin32 NetWare}; #others?
-my $crypt_not_supported = $^O =~ /(?:$crypt_not_supported_platforms)/;
-
-my $crypt_method = "crypt";
-
-if ($crypt_not_supported) {
-    $crypt_method = "md5";
-}
-
-# Some platforms won't jump through our favorite hoops
-#
-my $not_unix_platforms = join '|', qw{MSWin32 NetWare}; #others?
-my $not_unix = $^O =~ /(?:$not_unix_platforms)/;
-
-if ($crypt_not_supported) {
-    $crypt_method = "md5";
-}
-
-if (@ARGV[0] eq "-d") {
-    shift @ARGV;
-    if ($crypt_not_supported) {
-        print STDERR 
-              "Warning: Apache/$^O does not support crypt()ed passwords!\n\n";
-    }
-    $crypt_method = "crypt";
-}
-
-if (@ARGV[0] eq "-m") {
-    shift @ARGV;
-    $crypt_method = "md5";
-}
-
-if (@ARGV[0] eq "-p") {
-    shift @ARGV;
-    if (!$crypt_not_supported) {
-        print STDERR 
-              "Warning: Apache/$^O does not support plaintext passwords!\n\n";
-    }
-    $crypt_method = "plain";
-}
-
-if (@ARGV[0] eq "-s") {
-    shift @ARGV;
-    need_sha1_crypt();
-    $crypt_method = "sha1";
-}
-
-if ($crypt_method eq "md5") {
-    need_md5_crypt();
-}
-
-my($file,$command,$key,$crypted_pwd,$groups,$comment) = @ARGV;
-
-usage() unless $file and $command and defined &{$dbmc::{$command}};
-
-# remove extension if any
-my $chop = join '|', qw{db.? pag dir};
-$file =~ s/\.($chop)$//;
-
-my $is_update = $command eq "update";
-my %DB = ();
-my @range = ();
-my($mode, $flags) = $command =~ 
-    /^(?:view|check)$/ ? (0644, O_RDONLY) : (0644, O_RDWR|O_CREAT);
-
-tie (%DB, "AnyDBM_File", $file, $flags, $mode) || die "Can't tie $file: $!";
-dbmc->$command();
-untie %DB;
-
-
-my $x;
-sub genseed {
-    my $psf;
-    if ($not_unix) {
-	srand (time ^ $$ or time ^ ($$ + ($$ << 15)));
-    }
-    else {
-        for (qw(-xlwwa -le)) { 
-	    `ps $_ 2>/dev/null`;
-            $psf = $_, last unless $?;
-        }
-        srand (time ^ $$ ^ unpack("%L*", `ps $psf | gzip -f`));
-    }
-    @range = (qw(. /), '0'..'9','a'..'z','A'..'Z');
-    $x = int scalar @range;
-}
-
-sub randchar { 
-    join '', map $range[rand $x], 1..shift||1;
-}
-
-sub saltpw_crypt {
-    genseed() unless @range; 
-    return $newstyle_salt ? 
-	join '', "_", randchar, "a..", randchar(4) :
-        randchar(2);
-}
-
-sub cryptpw_crypt {
-    my ($pw, $salt) = @_;
-    $salt = saltpw_crypt unless $salt;
-    crypt $pw, $salt;
-}
-
-sub saltpw_md5 {
-    genseed() unless @range; 
-    randchar(8);
-}
-
-sub cryptpw_md5 {
-    my($pw, $salt) = @_;
-    $salt = saltpw_md5 unless $salt;
-    Crypt::PasswdMD5::apache_md5_crypt($pw, $salt);
-}
-
-sub cryptpw_sha1 {
-    my($pw, $salt) = @_;
-    '{SHA}' . Digest::SHA1::sha1_base64($pw) . "=";
-}
-
-sub cryptpw {
-    if ($crypt_method eq "md5") {
-        return cryptpw_md5(@_);
-    } elsif ($crypt_method eq "sha1") {
-        return cryptpw_sha1(@_);
-    } elsif ($crypt_method eq "crypt") {
-        return cryptpw_crypt(@_);
-    }
-    @_[0]; # otherwise return plaintext
-}
-
-sub getpass {
-    my $prompt = shift || "Enter password:";
-
-    unless($not_unix) { 
-	open STDIN, "/dev/tty" or warn "couldn't open /dev/tty $!\n";
-	system "stty -echo;";
-    }
-
-    my($c,$pwd);
-    print STDERR $prompt;
-    while (($c = getc(STDIN)) ne '' and $c ne "\n" and $c ne "\r") {
-	$pwd .= $c;
-    }
-
-    system "stty echo" unless $not_unix;
-    print STDERR "\n";
-    die "Can't use empty password!\n" unless length $pwd;
-    return $pwd;
-}
-
-sub dbmc::update {
-    die "Sorry, user `$key' doesn't exist!\n" unless $DB{$key};
-    $crypted_pwd = (split /:/, $DB{$key}, 3)[0] if $crypted_pwd eq '.';
-    $groups = (split /:/, $DB{$key}, 3)[1] if !$groups || $groups eq '.';
-    $comment = (split /:/, $DB{$key}, 3)[2] if !$comment || $comment eq '.';
-    if (!$crypted_pwd || $crypted_pwd eq '-') {
-        dbmc->adduser;
-    }
-    else {
-        dbmc->add;
-    }
-}
-
-sub dbmc::add {
-    die "Can't use empty password!\n" unless $crypted_pwd;
-    unless($is_update) {
-	die "Sorry, user `$key' already exists!\n" if $DB{$key};
-    }
-    $groups = '' if $groups eq '-';
-    $comment = '' if $comment eq '-';
-    $groups .= ":" . $comment if $comment;
-    $crypted_pwd .= ":" . $groups if $groups;
-    $DB{$key} = $crypted_pwd;
-    my $action = $is_update ? "updated" : "added";
-    print "User $key $action with password encrypted to $DB{$key} using $crypt_method\n";
-}
-
-sub dbmc::adduser {
-    my $value = getpass "New password:";
-    die "They don't match, sorry.\n" unless getpass("Re-type new password:") eq $value;
-    $crypted_pwd = cryptpw $value;
-    dbmc->add;
-}
-
-sub dbmc::delete {
-    die "Sorry, user `$key' doesn't exist!\n" unless $DB{$key};
-    delete $DB{$key}, print "`$key' deleted\n";
-}
-
-sub dbmc::view {
-    print $key ? "$key:$DB{$key}\n" : map { "$_:$DB{$_}\n" if $DB{$_} } keys %DB;
-}
-
-sub dbmc::check {
-    die "Sorry, user `$key' doesn't exist!\n" unless $DB{$key};
-    my $chkpass = (split /:/, $DB{$key}, 3)[0];
-    my $testpass = getpass();
-    if (substr($chkpass, 0, 6) eq '$apr1$') {
-        need_md5_crypt;
-        $crypt_method = "md5";
-    } elsif (substr($chkpass, 0, 5) eq '{SHA}') {
-        need_sha1_crypt;
-        $crypt_method = "sha1";
-    } elsif (length($chkpass) == 13 && $chkpass ne $testpass) {
-        $crypt_method = "crypt";
-    } else {
-        $crypt_method = "plain";
-    }
-    print $crypt_method . (cryptpw($testpass, $chkpass) eq $chkpass 
-                           ? " password ok\n" : " password mismatch\n");
-}
-
-sub dbmc::import {
-    while(defined($_ = <STDIN>) and chomp) {
-	($key,$crypted_pwd,$groups,$comment) = split /:/, $_, 4;
-	dbmc->add;
-    }
-}
-
diff --git a/support/envvars-std.in b/support/envvars-std.in
deleted file mode 100644
index 831d873..0000000
--- a/support/envvars-std.in
+++ /dev/null
@@ -1,10 +0,0 @@
-# envvars-std - default environment variables for apachectl
-#
-# This file is generated from envvars-std.in
-#
-# the following lines are automatically uncommented for
-# binary builds
-#binbuild @SHLIBPATH_VAR@="@prefix@/lib/:$@SHLIBPATH_VAR@"
-#binbuild export @SHLIBPATH_VAR@
-#
-@OS_SPECIFIC_VARS@
diff --git a/support/htdbm.c b/support/htdbm.c
deleted file mode 100644
index 1a16b1d..0000000
--- a/support/htdbm.c
+++ /dev/null
@@ -1,610 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-/*
- * htdbm.c: simple program for manipulating DBM
- * password databases for the Apache HTTP server
- *
- * Contributed by Mladen Turk <mturk@mappingsoft.com>
- * 12 Oct 2001
- */
-
-#include "apr.h"
-#include "apr_lib.h"
-#include "apr_strings.h"
-#include "apr_file_io.h"
-#include "apr_file_info.h"
-#include "apr_pools.h"
-#include "apr_signal.h"
-#include "apr_md5.h"
-#include "apr_sha1.h"
-#include "apr_dbm.h"
-
-#if APR_HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#if APR_HAVE_STRING_H
-#include <string.h>
-#endif
-#if APR_HAVE_STRINGS_H
-#include <strings.h>
-#endif
-#include <time.h>
-
-#if APR_CHARSET_EBCDIC
-#include "apr_xlate.h"
-#endif /*APR_CHARSET_EBCDIC*/
-
-#if APR_HAVE_CRYPT_H
-#include <crypt.h>
-#endif
-
-
-#if !APR_CHARSET_EBCDIC
-#define LF 10
-#define CR 13
-#else /*APR_CHARSET_EBCDIC*/
-#define LF '\n'
-#define CR '\r'
-#endif /*APR_CHARSET_EBCDIC*/
-
-#define MAX_STRING_LEN 256
-#define ALG_PLAIN 0
-#define ALG_APMD5 1
-#define ALG_APSHA 2
- 
-#if APR_HAVE_CRYPT_H
-#define ALG_CRYPT 3
-#endif
-
-
-#define ERR_FILEPERM    1
-#define ERR_SYNTAX      2
-#define ERR_PWMISMATCH  3
-#define ERR_INTERRUPTED 4
-#define ERR_OVERFLOW    5
-#define ERR_BADUSER     6
-#define ERR_EMPTY       7
-
-
-typedef struct htdbm_t htdbm_t;
-
-struct htdbm_t {
-    apr_dbm_t               *dbm;
-    apr_pool_t              *pool;
-#if APR_CHARSET_EBCDIC
-    apr_xlate_t             *to_ascii;
-#endif
-    char                    *filename;
-    char                    *username;
-    char                    *userpass;
-    char                    *comment;
-    char                    *type;
-    int                     create;
-    int                     rdonly;
-    int                     alg;
-};
-
-
-#define HTDBM_MAKE   0
-#define HTDBM_DELETE 1
-#define HTDBM_VERIFY 2
-#define HTDBM_LIST   3
-#define HTDBM_NOFILE 4
-#define HTDBM_STDIN  5
-
-static void htdbm_terminate(htdbm_t *htdbm) 
-{
-    
-    if (htdbm->dbm)
-        apr_dbm_close(htdbm->dbm);
-    htdbm->dbm = NULL;
-}
-
-static htdbm_t *h;
-  
-static void htdbm_interrupted(void) 
-{
-    htdbm_terminate(h);
-    fprintf(stderr, "htdbm Interrupted !\n");
-    exit(ERR_INTERRUPTED);
-}
-
-static apr_status_t htdbm_init(apr_pool_t **pool, htdbm_t **hdbm) 
-{
-
-#if APR_CHARSET_EBCDIC
-    apr_status_t rv;
-#endif
-
-    apr_initialize();
-    atexit(apr_terminate);
-    apr_pool_create( pool, NULL);
-    apr_signal(SIGINT, (void (*)(int)) htdbm_interrupted);
-
-    (*hdbm) = (htdbm_t *)apr_pcalloc(*pool, sizeof(htdbm_t));
-    (*hdbm)->pool = *pool;
-
-#if APR_CHARSET_EBCDIC
-    rv = apr_xlate_open(&((*hdbm)->to_ascii), "ISO8859-1", APR_DEFAULT_CHARSET, (*hdbm)->pool);
-    if (rv) {
-        fprintf(stderr, "apr_xlate_open(to ASCII)->%d\n", rv);
-        return APR_EGENERAL;
-    }
-    rv = apr_SHA1InitEBCDIC((*hdbm)->to_ascii);
-    if (rv) {
-        fprintf(stderr, "apr_SHA1InitEBCDIC()->%d\n", rv);
-        return APR_EGENERAL;
-    }
-    rv = apr_MD5InitEBCDIC((*hdbm)->to_ascii);
-    if (rv) {
-        fprintf(stderr, "apr_MD5InitEBCDIC()->%d\n", rv);
-        return APR_EGENERAL;
-    }
-#endif /*APR_CHARSET_EBCDIC*/
-
-    /* Set MD5 as default */
-    (*hdbm)->alg = ALG_APMD5;
-    (*hdbm)->type = "default";
-    return APR_SUCCESS;
-}
-
-static apr_status_t htdbm_open(htdbm_t *htdbm) 
-{
-    if (htdbm->create)
-        return apr_dbm_open_ex(&htdbm->dbm, htdbm->type, htdbm->filename, APR_DBM_RWCREATE, 
-                            APR_OS_DEFAULT, htdbm->pool);
-    else
-        return apr_dbm_open_ex(&htdbm->dbm, htdbm->type, htdbm->filename, 
-                            htdbm->rdonly ? APR_DBM_READONLY : APR_DBM_READWRITE, 
-                            APR_OS_DEFAULT, htdbm->pool);
-}
-
-static apr_status_t htdbm_save(htdbm_t *htdbm, int *changed) 
-{
-    apr_datum_t key, val;
-
-    if (!htdbm->username)
-        return APR_SUCCESS;
-
-    key.dptr = htdbm->username;
-    key.dsize = strlen(htdbm->username);
-    if (apr_dbm_exists(htdbm->dbm, key))
-        *changed = 1;
-
-    val.dsize = strlen(htdbm->userpass);
-    if (!htdbm->comment)
-        val.dptr  = htdbm->userpass;
-    else {
-        val.dptr = apr_pstrcat(htdbm->pool, htdbm->userpass, ";",
-                               htdbm->comment, NULL);
-        val.dsize += (strlen(htdbm->comment) + 1);
-    }
-    return apr_dbm_store(htdbm->dbm, key, val);
-}
-
-static apr_status_t htdbm_del(htdbm_t *htdbm) 
-{
-    apr_datum_t key;
-
-    key.dptr = htdbm->username;
-    key.dsize = strlen(htdbm->username);
-    if (!apr_dbm_exists(htdbm->dbm, key))
-        return APR_ENOENT;
-
-    return apr_dbm_delete(htdbm->dbm, key);
-}
-
-static apr_status_t htdbm_verify(htdbm_t *htdbm) 
-{
-    apr_datum_t key, val;
-    char pwd[MAX_STRING_LEN] = {0};
-    char *rec, *cmnt;
-
-    key.dptr = htdbm->username;
-    key.dsize = strlen(htdbm->username);
-    if (!apr_dbm_exists(htdbm->dbm, key))
-        return APR_ENOENT;    
-    if (apr_dbm_fetch(htdbm->dbm, key, &val) != APR_SUCCESS)
-        return APR_ENOENT;
-    rec = apr_pstrndup(htdbm->pool, val.dptr, val.dsize);
-    cmnt = strchr(rec, ';');
-    if (cmnt)
-        strncpy(pwd, rec, cmnt - rec);
-    else
-        strcpy(pwd, rec);
-    return apr_password_validate(htdbm->userpass, pwd);
-}
-
-static apr_status_t htdbm_list(htdbm_t *htdbm) 
-{
-    apr_status_t rv;
-    apr_datum_t key, val;
-    char *rec, *cmnt;
-    char kb[MAX_STRING_LEN];
-    int i = 0;
-
-    rv = apr_dbm_firstkey(htdbm->dbm, &key);
-    if (rv != APR_SUCCESS) {
-        fprintf(stderr, "Empty database -- %s\n", htdbm->filename); 
-        return APR_ENOENT;
-    }
-    rec = apr_pcalloc(htdbm->pool, HUGE_STRING_LEN);
-
-    fprintf(stderr, "Dumping records from database -- %s\n", htdbm->filename); 
-    fprintf(stderr, "    %-32sComment\n", "Username");    
-    while (key.dptr != NULL) {
-        rv = apr_dbm_fetch(htdbm->dbm, key, &val);
-        if (rv != APR_SUCCESS) {
-            fprintf(stderr, "Failed getting data from %s\n", htdbm->filename);
-            return APR_EGENERAL;
-        }
-        strncpy(kb, key.dptr, key.dsize);
-        kb[key.dsize] = '\0';
-        fprintf(stderr, "    %-32s", kb);
-        strncpy(rec, val.dptr, val.dsize);
-        rec[val.dsize] = '\0';
-        cmnt = strchr(rec, ';');
-        if (cmnt)
-            fprintf(stderr, cmnt + 1);
-        fprintf(stderr, "\n");
-        rv = apr_dbm_nextkey(htdbm->dbm, &key);
-        if (rv != APR_SUCCESS)
-            fprintf(stderr, "Failed getting NextKey\n");
-        ++i;
-    }
-
-    fprintf(stderr, "Total #records : %d\n", i);
-    return APR_SUCCESS;
-}
-
-static void to64(char *s, unsigned long v, int n)
-{
-    static unsigned char itoa64[] =         /* 0 ... 63 => ASCII - 64 */
-    "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
-
-    while (--n >= 0) {
-        *s++ = itoa64[v&0x3f];
-        v >>= 6;
-    }
-}
-
-static apr_status_t htdbm_make(htdbm_t *htdbm) 
-{
-    char cpw[MAX_STRING_LEN];
-    char salt[9];
-
-    switch (htdbm->alg) {
-        case ALG_APSHA:
-            /* XXX cpw >= 28 + strlen(sha1) chars - fixed len SHA */
-            apr_sha1_base64(htdbm->userpass,strlen(htdbm->userpass),cpw);
-        break;
-
-        case ALG_APMD5: 
-            (void) srand((int) time((time_t *) NULL));
-            to64(&salt[0], rand(), 8);
-            salt[8] = '\0';
-            apr_md5_encode((const char *)htdbm->userpass, (const char *)salt,
-                            cpw, sizeof(cpw));
-        break;
-        case ALG_PLAIN:
-            /* XXX this len limitation is not in sync with any HTTPd len. */
-            apr_cpystrn(cpw,htdbm->userpass,sizeof(cpw));
-        break;
-#if APR_HAVE_CRYPT_H
-        case ALG_CRYPT:
-            (void) srand((int) time((time_t *) NULL));
-            to64(&salt[0], rand(), 8);
-            salt[8] = '\0';
-            apr_cpystrn(cpw, (char *)crypt(htdbm->userpass, salt), sizeof(cpw) - 1);
-            fprintf(stderr, "CRYPT is now deprecated, use MD5 instead!\n");
-#endif
-        default:
-        break;
-    }
-    htdbm->userpass = apr_pstrdup(htdbm->pool, cpw);
-    return APR_SUCCESS;
-}
-
-static apr_status_t htdbm_valid_username(htdbm_t *htdbm)
-{
-    if (!htdbm->username || (strlen(htdbm->username) > 64) || (strlen(htdbm->username) < 1)) {
-        fprintf(stderr, "Invalid username length\n");
-        return APR_EINVAL;
-    }
-    if (strchr(htdbm->username, ':')) {
-        fprintf(stderr, "Username contains invalid characters\n");
-        return APR_EINVAL;
-    }
-    return APR_SUCCESS;
-}
-
-static void htdbm_usage(void)
-{
-
-#if APR_HAVE_CRYPT_H
-#define CRYPT_OPTION "d"
-#else
-#define CRYPT_OPTION ""
-#endif
-    fprintf(stderr, "htdbm -- program for manipulating DBM password databases.\n\n");
-    fprintf(stderr, "Usage: htdbm    [-cm"CRYPT_OPTION"pstvx] [-TDBTYPE] database username\n");
-    fprintf(stderr, "                -b[cm"CRYPT_OPTION"ptsv] [-TDBTYPE] database username password\n");
-    fprintf(stderr, "                -n[m"CRYPT_OPTION"pst]   username\n");
-    fprintf(stderr, "                -nb[m"CRYPT_OPTION"pst]  username password\n");
-    fprintf(stderr, "                -v[m"CRYPT_OPTION"ps]    [-TDBTYPE] database username\n");
-    fprintf(stderr, "                -vb[m"CRYPT_OPTION"ps]   [-TDBTYPE] database username password\n");
-    fprintf(stderr, "                -x[m"CRYPT_OPTION"ps]    [-TDBTYPE] database username\n");
-    fprintf(stderr, "                -l                       [-TDBTYPE] database\n");
-    fprintf(stderr, "Options:\n");
-    fprintf(stderr, "   -b   Use the password from the command line rather "
-                    "than prompting for it.\n");
-    fprintf(stderr, "   -c   Create a new database.\n");
-    fprintf(stderr, "   -n   Don't update database; display results on stdout.\n");
-    fprintf(stderr, "   -m   Force MD5 encryption of the password (default).\n");
-#if APR_HAVE_CRYPT_H
-    fprintf(stderr, "   -d   Force CRYPT encryption of the password (now deprecated).\n");
-#endif
-    fprintf(stderr, "   -p   Do not encrypt the password (plaintext).\n");
-    fprintf(stderr, "   -s   Force SHA encryption of the password.\n");
-    fprintf(stderr, "   -T   DBM Type (SDBM|GDBM|DB|default).\n");
-    fprintf(stderr, "   -l   Display usernames from database on stdout.\n");
-    fprintf(stderr, "   -t   The last param is username comment.\n");
-    fprintf(stderr, "   -v   Verify the username/password.\n");
-    fprintf(stderr, "   -x   Remove the username record from database.\n");
-    exit(ERR_SYNTAX);
-
-}
-
-
-int main(int argc, const char *argv[])
-{
-    apr_pool_t *pool;
-    apr_status_t rv;
-    apr_size_t l;
-    char pwi[MAX_STRING_LEN];
-    char pwc[MAX_STRING_LEN];
-    char errbuf[MAX_STRING_LEN];
-    const char *arg;
-    int  need_file = 1;
-    int  need_user = 1;
-    int  need_pwd  = 1;
-    int  need_cmnt = 0;
-    int  pwd_supplied = 0;
-    int  changed;
-    int  cmd = HTDBM_MAKE;
-    int  i;
-    int args_left = 2;
-
-    if ((rv = htdbm_init(&pool, &h)) != APR_SUCCESS) {
-        fprintf(stderr, "Unable to initialize htdbm terminating!\n");
-        apr_strerror(rv, errbuf, sizeof(errbuf));
-        exit(1);
-    }
-    /*
-     * Preliminary check to make sure they provided at least
-     * three arguments, we'll do better argument checking as 
-     * we parse the command line.
-     */
-    if (argc < 3)
-       htdbm_usage();
-    /*
-     * Go through the argument list and pick out any options.  They
-     * have to precede any other arguments.
-     */
-    for (i = 1; i < argc; i++) {
-        arg = argv[i];
-        if (*arg != '-')
-            break;
-        
-        while (*++arg != '\0') {
-            switch (*arg) {
-            case 'b':
-                pwd_supplied = 1;
-                need_pwd = 0;
-                args_left++;
-                break;
-            case 'c':
-                h->create = 1;
-                break;
-            case 'n':
-                need_file = 0;
-                cmd = HTDBM_NOFILE;
-                    args_left--;
-                break;
-            case 'l':
-                need_pwd = 0;
-                need_user = 0;
-                cmd = HTDBM_LIST;
-                h->rdonly = 1;
-                args_left--;
-                break;
-            case 't':
-                need_cmnt = 1;
-                args_left++;
-                break;
-            case 'T':
-                h->type = apr_pstrdup(h->pool, ++arg);
-                while (*arg != '\0')
-                    ++arg;
-                --arg; /* so incrementing this in the loop with find a null */
-                break;
-            case 'v':
-                h->rdonly = 1;
-                cmd = HTDBM_VERIFY;
-                break;
-            case 'x':
-                need_pwd = 0;
-                cmd = HTDBM_DELETE;
-                break;
-            case 'm':
-                h->alg = ALG_APMD5;
-                break;
-            case 'p':
-                h->alg = ALG_PLAIN;
-                break;
-            case 's':
-                h->alg = ALG_APSHA;
-                break;
-#if APR_HAVE_CRYPT_H
-            case 'd':
-                h->alg = ALG_CRYPT;
-                break;
-#endif
-            default:
-                htdbm_usage();
-                break;
-            }
-        }
-    }
-    /*
-     * Make sure we still have exactly the right number of arguments left
-     * (the filename, the username, and possibly the password if -b was
-     * specified).
-     */
-    if ((argc - i) != args_left)
-        htdbm_usage();
-
-    if (!need_file)
-        i--;
-    else {
-        h->filename = apr_pstrdup(h->pool, argv[i]);
-            if ((rv = htdbm_open(h)) != APR_SUCCESS) {
-            fprintf(stderr, "Error opening database %s\n", argv[i]);
-            apr_strerror(rv, errbuf, sizeof(errbuf));
-            fprintf(stderr,"%s\n",errbuf);
-            exit(ERR_FILEPERM);
-        }
-    }
-    if (need_user) {
-        h->username = apr_pstrdup(pool, argv[i+1]);
-        if (htdbm_valid_username(h) != APR_SUCCESS)
-            exit(ERR_BADUSER);
-    }
-    if (pwd_supplied)
-        h->userpass = apr_pstrdup(pool, argv[i+2]);
-
-    if (need_pwd) {
-        l = sizeof(pwc);
-        if (apr_password_get("Enter password        : ", pwi, &l) != APR_SUCCESS) {
-            fprintf(stderr, "Password too long\n");
-            exit(ERR_OVERFLOW);
-        }
-        l = sizeof(pwc);
-        if (apr_password_get("Re-type password      : ", pwc, &l) != APR_SUCCESS) {
-            fprintf(stderr, "Password too long\n");
-            exit(ERR_OVERFLOW);
-        }
-        if (strcmp(pwi, pwc) != 0) {
-            fprintf(stderr, "Password verification error\n");
-            exit(ERR_PWMISMATCH);
-        }
-            
-        h->userpass = apr_pstrdup(pool,  pwi);
-    }
-    if (need_cmnt && pwd_supplied)
-        h->comment = apr_pstrdup(pool, argv[i+3]);
-    else if (need_cmnt)
-        h->comment = apr_pstrdup(pool, argv[i+2]);
-
-    switch (cmd) {
-        case HTDBM_VERIFY:
-            if ((rv = htdbm_verify(h)) != APR_SUCCESS) {
-                if(rv == APR_ENOENT) {
-                    fprintf(stderr, "The user '%s' could not be found in database\n", h->username);
-                    exit(ERR_BADUSER);
-                }
-                else {
-                    fprintf(stderr, "Password mismatch for user '%s'\n", h->username);
-                    exit(ERR_PWMISMATCH);
-                }
-            }
-            else
-                fprintf(stderr, "Password validated for user '%s'\n", h->username);
-            break;
-        case HTDBM_DELETE:
-            if (htdbm_del(h) != APR_SUCCESS) {
-                fprintf(stderr, "Cannot find user '%s' in database\n", h->username);
-                exit(ERR_BADUSER);
-            }
-            h->username = NULL;
-            changed = 1;
-            break;
-        case HTDBM_LIST:
-            htdbm_list(h);
-            break;
-        default:
-            htdbm_make(h);
-            break;
-
-    }    
-    if (need_file && !h->rdonly) {
-        if ((rv = htdbm_save(h, &changed)) != APR_SUCCESS) {
-            apr_strerror(rv, errbuf, sizeof(errbuf));
-            exit(ERR_FILEPERM);
-        }
-        fprintf(stdout, "Database %s %s.\n", h->filename, 
-                h->create ? "created" : (changed ? "modified" : "updated"));
-    }
-    if (cmd == HTDBM_NOFILE)
-        fprintf(stderr, "%s:%s\n", h->username, h->userpass);
-    htdbm_terminate(h);
-    apr_terminate();
-    
-    return 0; /* Suppress compiler warning. */
-}
diff --git a/support/htdbm.dsp b/support/htdbm.dsp
deleted file mode 100644
index 613c52f..0000000
--- a/support/htdbm.dsp
+++ /dev/null
@@ -1,123 +0,0 @@
-# Microsoft Developer Studio Project File - Name="htdbm" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Console Application" 0x0103
-
-CFG=htdbm - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "htdbm.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "htdbm.mak" CFG="htdbm - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "htdbm - Win32 Release" (based on "Win32 (x86) Console Application")
-!MESSAGE "htdbm - Win32 Debug" (based on "Win32 (x86) Console Application")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "htdbm - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "APR_DECLARE_STATIC" /D "APU_DECLARE_STATIC" /FD /c
-# ADD CPP /nologo /MD /W3 /O2 /I "../srclib/apr/include" /I "../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "APR_DECLARE_STATIC" /D "APU_DECLARE_STATIC" /Fd"Release/htdbm" /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib /nologo /subsystem:console /map /machine:I386
-# ADD LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib /nologo /subsystem:console /map /machine:I386
-
-!ELSEIF  "$(CFG)" == "htdbm - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "APR_DECLARE_STATIC" /D "APU_DECLARE_STATIC" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../srclib/apr/include" /I "../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "APR_DECLARE_STATIC" /D "APU_DECLARE_STATIC" /Fd"Debug/htdbm" /FD /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib /nologo /subsystem:console /incremental:no /map /debug /machine:I386
-# ADD LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib /nologo /subsystem:console /incremental:no /map /debug /machine:I386
-
-!ENDIF 
-
-# Begin Target
-
-# Name "htdbm - Win32 Release"
-# Name "htdbm - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\htdbm.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\htdbm.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\build\win32\win32ver.awk
-
-!IF  "$(CFG)" == "htdbm - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\build\win32\win32ver.awk
-
-".\htdbm.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ../build/win32/win32ver.awk htdbm "htdbm Utility"  ../include/ap_release.h > .\htdbm.rc
-
-# End Custom Build
-
-!ELSEIF  "$(CFG)" == "htdbm - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\build\win32\win32ver.awk
-
-".\htdbm.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ../build/win32/win32ver.awk htdbm "htdbm Utility"  ../include/ap_release.h > .\htdbm.rc
-
-# End Custom Build
-
-!ENDIF 
-
-# End Source File
-# End Target
-# End Project
diff --git a/support/htdigest.c b/support/htdigest.c
deleted file mode 100644
index eff88e4..0000000
--- a/support/htdigest.c
+++ /dev/null
@@ -1,316 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-/******************************************************************************
- ******************************************************************************
- * NOTE! This program is not safe as a setuid executable!  Do not make it
- * setuid!
- ******************************************************************************
- *****************************************************************************/
-/*
- * htdigest.c: simple program for manipulating digest passwd file for Apache
- *
- * by Alexei Kosut, based on htpasswd.c, by Rob McCool
- */
-
-#include "apr.h"
-#include "apr_file_io.h"
-#include "apr_md5.h"
-#include "apr_lib.h"            /* for apr_getpass() */
-#include "apr_general.h"
-#include "apr_signal.h"
-
-#define APR_WANT_STDIO
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-#if APR_HAVE_SYS_TYPES_H
-#include <sys/types.h>
-#endif
-#if APR_HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-
-#ifdef WIN32
-#include <conio.h>
-#endif
-
-
-#if APR_CHARSET_EBCDIC
-#define LF '\n'
-#define CR '\r'
-#else
-#define LF 10
-#define CR 13
-#endif /* APR_CHARSET_EBCDIC */
-
-#define MAX_STRING_LEN 256
-
-apr_file_t *tfp = NULL;
-apr_pool_t *cntxt;
-#if APR_CHARSET_EBCDIC
-apr_xlate_t *to_ascii;
-#endif
-
-static void getword(char *word, char *line, char stop)
-{
-    int x = 0, y;
-
-    for (x = 0; ((line[x]) && (line[x] != stop)); x++)
-	word[x] = line[x];
-
-    word[x] = '\0';
-    if (line[x])
-	++x;
-    y = 0;
-
-    while ((line[y++] = line[x++]));
-}
-
-static int getline(char *s, int n, apr_file_t *f)
-{
-    register int i = 0;
-    char ch;
-    apr_status_t rv = APR_EINVAL;
-
-    while (i < (n - 1) && 
-           ((rv = apr_file_getc(&ch, f)) == APR_SUCCESS) && (ch != '\n')) {
-        s[i++] = ch;
-    }
-    if (ch == '\n')
-        s[i++] = ch;
-    s[i] = '\0';
-
-    if (rv != APR_SUCCESS) 
-        return 1;
-
-    return 0;
-}
-
-static void putline(apr_file_t *f, char *l)
-{
-    int x;
-
-    for (x = 0; l[x]; x++)
-	apr_file_putc(l[x], f);
-}
-
-
-static void add_password(char *user, char *realm, apr_file_t *f)
-{
-    char *pw;
-    apr_md5_ctx_t context;
-    unsigned char digest[16];
-    char string[MAX_STRING_LEN];
-    char pwin[MAX_STRING_LEN];
-    char pwv[MAX_STRING_LEN];
-    unsigned int i;
-    size_t len = sizeof(pwin);
-
-    if (apr_password_get("New password: ", pwin, &len) != APR_SUCCESS) {
-	fprintf(stderr, "password too long");
-	exit(5);
-    }
-    len = sizeof(pwin);
-    apr_password_get("Re-type new password: ", pwv, &len);
-    if (strcmp(pwin, pwv) != 0) {
-	fprintf(stderr, "They don't match, sorry.\n");
-	if (tfp) {
-	    apr_file_close(tfp);
-	}
-	exit(1);
-    }
-    pw = pwin;
-    apr_file_printf(f, "%s:%s:", user, realm);
-
-    /* Do MD5 stuff */
-    sprintf(string, "%s:%s:%s", user, realm, pw);
-
-    apr_md5_init(&context);
-#if APR_CHARSET_EBCDIC
-    apr_md5_set_xlate(&context, to_ascii);
-#endif
-    apr_md5_update(&context, (unsigned char *) string, strlen(string));
-    apr_md5_final(digest, &context);
-
-    for (i = 0; i < 16; i++)
-	apr_file_printf(f, "%02x", digest[i]);
-
-    apr_file_printf(f, "\n");
-}
-
-static void usage(void)
-{
-    fprintf(stderr, "Usage: htdigest [-c] passwordfile realm username\n");
-    fprintf(stderr, "The -c flag creates a new file.\n");
-    exit(1);
-}
-
-static void interrupted(void)
-{
-    fprintf(stderr, "Interrupted.\n");
-    if (tfp) {
-        apr_file_close(tfp);
-    }
-    exit(1);
-}
-
-static void terminate(void)
-{
-#ifdef NETWARE
-    pressanykey();
-#endif
-    apr_terminate();
-}
-
-int main(int argc, char *argv[])
-{
-    apr_file_t *f;
-    apr_status_t rv;
-    char tn[] = "htdigest.tmp.XXXXXX";
-    char user[MAX_STRING_LEN];
-    char realm[MAX_STRING_LEN];
-    char line[MAX_STRING_LEN];
-    char l[MAX_STRING_LEN];
-    char w[MAX_STRING_LEN];
-    char x[MAX_STRING_LEN];
-    char command[MAX_STRING_LEN];
-    int found;
-   
-    rv = apr_initialize();
-    if (rv) {
-        fprintf(stderr, "apr_initialize(): %s (%d)\n",
-                apr_strerror(rv, line, sizeof(line)), rv);
-        exit(1);
-    }
-    atexit(terminate); 
-    apr_pool_create(&cntxt, NULL);
-
-#if APR_CHARSET_EBCDIC
-    rv = apr_xlate_open(&to_ascii, "ISO8859-1", APR_DEFAULT_CHARSET, cntxt);
-    if (rv) {
-        fprintf(stderr, "apr_xlate_open(): %s (%d)\n",
-                apr_strerror(rv, line, sizeof(line)), rv);
-        exit(1);
-    }
-#endif
-    
-    apr_signal(SIGINT, (void (*)(int)) interrupted);
-    if (argc == 5) {
-	if (strcmp(argv[1], "-c"))
-	    usage();
-	rv = apr_file_open(&f, argv[2], APR_WRITE | APR_CREATE, -1, cntxt);
-        if (rv != APR_SUCCESS) {
-            char errmsg[120];
-
-	    fprintf(stderr, "Could not open passwd file %s for writing: %s\n",
-		    argv[2],
-                    apr_strerror(rv, errmsg, sizeof errmsg));
-	    exit(1);
-	}
-	printf("Adding password for %s in realm %s.\n", argv[4], argv[3]);
-	add_password(argv[4], argv[3], f);
-	apr_file_close(f);
-	exit(0);
-    }
-    else if (argc != 4)
-	usage();
-
-    if (apr_file_mktemp(&tfp, tn, 0, cntxt) != APR_SUCCESS) {
-	fprintf(stderr, "Could not open temp file.\n");
-	exit(1);
-    }
-
-    if (apr_file_open(&f, argv[1], APR_READ, -1, cntxt) != APR_SUCCESS) {
-	fprintf(stderr,
-		"Could not open passwd file %s for reading.\n", argv[1]);
-	fprintf(stderr, "Use -c option to create new one.\n");
-	exit(1);
-    }
-    strcpy(user, argv[3]);
-    strcpy(realm, argv[2]);
-
-    found = 0;
-    while (!(getline(line, MAX_STRING_LEN, f))) {
-	if (found || (line[0] == '#') || (!line[0])) {
-	    putline(tfp, line);
-	    continue;
-	}
-	strcpy(l, line);
-	getword(w, l, ':');
-	getword(x, l, ':');
-	if (strcmp(user, w) || strcmp(realm, x)) {
-	    putline(tfp, line);
-	    continue;
-	}
-	else {
-	    printf("Changing password for user %s in realm %s\n", user, realm);
-	    add_password(user, realm, tfp);
-	    found = 1;
-	}
-    }
-    if (!found) {
-	printf("Adding user %s in realm %s\n", user, realm);
-	add_password(user, realm, tfp);
-    }
-    apr_file_close(f);
-#if defined(OS2) || defined(WIN32)
-    sprintf(command, "copy \"%s\" \"%s\"", tn, argv[1]);
-#else
-    sprintf(command, "cp %s %s", tn, argv[1]);
-#endif
-    system(command);
-    apr_file_close(tfp);
-    return 0;
-}
diff --git a/support/htdigest.dsp b/support/htdigest.dsp
deleted file mode 100644
index 8672b85..0000000
--- a/support/htdigest.dsp
+++ /dev/null
@@ -1,123 +0,0 @@
-# Microsoft Developer Studio Project File - Name="htdigest" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Console Application" 0x0103
-
-CFG=htdigest - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "htdigest.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "htdigest.mak" CFG="htdigest - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "htdigest - Win32 Release" (based on "Win32 (x86) Console Application")
-!MESSAGE "htdigest - Win32 Debug" (based on "Win32 (x86) Console Application")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "htdigest - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "APR_DECLARE_STATIC" /D "APU_DECLARE_STATIC" /FD /c
-# ADD CPP /nologo /MD /W3 /O2 /I "../srclib/apr/include" /I "../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "APR_DECLARE_STATIC" /D "APU_DECLARE_STATIC" /Fd"Release/htdigest" /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib /nologo /subsystem:console /map /machine:I386
-# ADD LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib /nologo /subsystem:console /map /machine:I386
-
-!ELSEIF  "$(CFG)" == "htdigest - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "APR_DECLARE_STATIC" /D "APU_DECLARE_STATIC" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../srclib/apr/include" /I "../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "APR_DECLARE_STATIC" /D "APU_DECLARE_STATIC" /Fd"Debug/htdigest" /FD /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib /nologo /subsystem:console /incremental:no /map /debug /machine:I386
-# ADD LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib /nologo /subsystem:console /incremental:no /map /debug /machine:I386
-
-!ENDIF 
-
-# Begin Target
-
-# Name "htdigest - Win32 Release"
-# Name "htdigest - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\htdigest.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\htdigest.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\build\win32\win32ver.awk
-
-!IF  "$(CFG)" == "htdigest - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\build\win32\win32ver.awk
-
-".\htdigest.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ../build/win32/win32ver.awk htdigest "htdigest Utility"  ../include/ap_release.h > .\htdigest.rc
-
-# End Custom Build
-
-!ELSEIF  "$(CFG)" == "htdigest - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\build\win32\win32ver.awk
-
-".\htdigest.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ../build/win32/win32ver.awk htdigest "htdigest Utility"  ../include/ap_release.h > .\htdigest.rc
-
-# End Custom Build
-
-!ENDIF 
-
-# End Source File
-# End Target
-# End Project
diff --git a/support/htpasswd.c b/support/htpasswd.c
deleted file mode 100644
index d42ecf9..0000000
--- a/support/htpasswd.c
+++ /dev/null
@@ -1,693 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-/******************************************************************************
- ******************************************************************************
- * NOTE! This program is not safe as a setuid executable!  Do not make it
- * setuid!
- ******************************************************************************
- *****************************************************************************/
-/*
- * htpasswd.c: simple program for manipulating password file for
- * the Apache HTTP server
- * 
- * Originally by Rob McCool
- *
- * Exit values:
- *  0: Success
- *  1: Failure; file access/permission problem
- *  2: Failure; command line syntax problem (usage message issued)
- *  3: Failure; password verification failure
- *  4: Failure; operation interrupted (such as with CTRL/C)
- *  5: Failure; buffer would overflow (username, filename, or computed
- *     record too long)
- *  6: Failure; username contains illegal or reserved characters
- */
-
-#include "apr.h"
-#include "apr_lib.h"
-#include "apr_strings.h"
-#include "apr_errno.h"
-#include "apr_file_io.h"
-#include "apr_general.h"
-#include "apr_signal.h"
-
-#if APR_HAVE_STDIO_H
-#include <stdio.h>
-#endif
-
-#include "apr_md5.h"
-#include "apr_sha1.h"
-#include <time.h>
-
-#if APR_HAVE_CRYPT_H
-#include <crypt.h>
-#endif
-#if APR_HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#if APR_HAVE_STRING_H
-#include <string.h>
-#endif
-#if APR_HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#ifdef WIN32
-#include <conio.h>
-#define unlink _unlink
-#endif
-
-#if !APR_CHARSET_EBCDIC
-#define LF 10
-#define CR 13
-#else /*APR_CHARSET_EBCDIC*/
-#define LF '\n'
-#define CR '\r'
-#endif /*APR_CHARSET_EBCDIC*/
-
-#define MAX_STRING_LEN 256
-#define ALG_PLAIN 0
-#define ALG_CRYPT 1
-#define ALG_APMD5 2
-#define ALG_APSHA 3 
-
-#define ERR_FILEPERM 1
-#define ERR_SYNTAX 2
-#define ERR_PWMISMATCH 3
-#define ERR_INTERRUPTED 4
-#define ERR_OVERFLOW 5
-#define ERR_BADUSER 6
-
-/*
- * This needs to be declared statically so the signal handler can
- * access it.
- */
-static char *tempfilename;
-/*
- * If our platform knows about the tmpnam() external buffer size, create
- * a buffer to pass in.  This is needed in a threaded environment, or
- * one that thinks it is (like HP-UX).
- */
-#ifdef L_tmpnam
-static char tname_buf[L_tmpnam];
-#else
-static char *tname_buf = NULL;
-#endif
-
-/*
- * Get a line of input from the user, not including any terminating
- * newline.
- */
-static int getline(char *s, int n, FILE *f)
-{
-    register int i = 0;
-
-    while (1) {
-	s[i] = (char) fgetc(f);
-
-	if (s[i] == CR) {
-	    s[i] = fgetc(f);
-	}
-
-	if ((s[i] == 0x4) || (s[i] == LF) || (i == (n - 1))) {
-	    s[i] = '\0';
-	    return (feof(f) ? 1 : 0);
-	}
-	++i;
-    }
-}
-
-static void putline(FILE *f, char *l)
-{
-    int x;
-
-    for (x = 0; l[x]; x++) {
-	fputc(l[x], f);
-    }
-    fputc('\n', f);
-}
-
-static void to64(char *s, unsigned long v, int n)
-{
-    static unsigned char itoa64[] =         /* 0 ... 63 => ASCII - 64 */
-	"./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
-
-    while (--n >= 0) {
-	*s++ = itoa64[v&0x3f];
-	v >>= 6;
-    }
-}
-
-/*
- * Make a password record from the given information.  A zero return
- * indicates success; failure means that the output buffer contains an
- * error message instead.
- */
-static int mkrecord(char *user, char *record, size_t rlen, char *passwd,
-		    int alg)
-{
-    char *pw;
-    char cpw[120];
-    char pwin[MAX_STRING_LEN];
-    char pwv[MAX_STRING_LEN];
-    char salt[9];
-    size_t bufsize;
-
-    if (passwd != NULL) {
-	pw = passwd;
-    }
-    else {
-        bufsize = sizeof(pwin);
-	if (apr_password_get("New password: ", pwin, &bufsize) != 0) {
-	    apr_snprintf(record, (rlen - 1), "password too long (>%" APR_SIZE_T_FMT
-	        ")", sizeof(pwin) - 1);
-	    return ERR_OVERFLOW;
-	}
-        bufsize = sizeof(pwv);
-	apr_password_get("Re-type new password: ", pwv, &bufsize);
-	if (strcmp(pwin, pwv) != 0) {
-	    apr_cpystrn(record, "password verification error", (rlen - 1));
-	    return ERR_PWMISMATCH;
-	}
-	pw = pwin;
-        memset(pwv, '\0', sizeof(pwin));
-    }
-    switch (alg) {
-
-    case ALG_APSHA:
-	/* XXX cpw >= 28 + strlen(sha1) chars - fixed len SHA */
- 	apr_sha1_base64(pw,strlen(pw),cpw);
-	break;
-
-    case ALG_APMD5: 
-        (void) srand((int) time((time_t *) NULL));
-        to64(&salt[0], rand(), 8);
-        salt[8] = '\0';
-
-	apr_md5_encode((const char *)pw, (const char *)salt,
-		     cpw, sizeof(cpw));
-	break;
-
-    case ALG_PLAIN:
-	/* XXX this len limitation is not in sync with any HTTPd len. */
-	apr_cpystrn(cpw,pw,sizeof(cpw));
-	break;
-
-#if !(defined(WIN32) || defined(NETWARE))
-    case ALG_CRYPT:
-    default:
-        (void) srand((int) time((time_t *) NULL));
-        to64(&salt[0], rand(), 8);
-        salt[8] = '\0';
-
-	apr_cpystrn(cpw, (char *)crypt(pw, salt), sizeof(cpw) - 1);
-	break;
-#endif
-    }
-    memset(pw, '\0', strlen(pw));
-
-    /*
-     * Check to see if the buffer is large enough to hold the username,
-     * hash, and delimiters.
-     */
-    if ((strlen(user) + 1 + strlen(cpw)) > (rlen - 1)) {
-	apr_cpystrn(record, "resultant record too long", (rlen - 1));
-	return ERR_OVERFLOW;
-    }
-    strcpy(record, user);
-    strcat(record, ":");
-    strcat(record, cpw);
-    return 0;
-}
-
-static int usage(void)
-{
-    fprintf(stderr, "Usage:\n");
-    fprintf(stderr, "\thtpasswd [-cmdps] passwordfile username\n");
-    fprintf(stderr, "\thtpasswd -b[cmdps] passwordfile username password\n\n");
-    fprintf(stderr, "\thtpasswd -n[mdps] username\n");
-    fprintf(stderr, "\thtpasswd -nb[mdps] username password\n");
-    fprintf(stderr, " -c  Create a new file.\n");
-    fprintf(stderr, " -n  Don't update file; display results on stdout.\n");
-    fprintf(stderr, " -m  Force MD5 encryption of the password"
-#if defined(WIN32) || defined(TPF) || defined(NETWARE)
-	" (default)"
-#endif
-	".\n");
-    fprintf(stderr, " -d  Force CRYPT encryption of the password"
-#if (!(defined(WIN32) || defined(TPF) || defined(NETWARE)))
-	    " (default)"
-#endif
-	    ".\n");
-    fprintf(stderr, " -p  Do not encrypt the password (plaintext).\n");
-    fprintf(stderr, " -s  Force SHA encryption of the password.\n");
-    fprintf(stderr, " -b  Use the password from the command line rather "
-	    "than prompting for it.\n");
-    fprintf(stderr,
-	    "On Windows, NetWare and TPF systems the '-m' flag is used by default.\n");
-    fprintf(stderr,
-	    "On all other systems, the '-p' flag will probably not work.\n");
-    return ERR_SYNTAX;
-}
-
-static void interrupted(void)
-{
-    fprintf(stderr, "Interrupted.\n");
-    if (tempfilename != NULL) {
-	unlink(tempfilename);
-    }
-    exit(ERR_INTERRUPTED);
-}
-
-/*
- * Check to see if the specified file can be opened for the given
- * access.
- */
-static int accessible(char *fname, char *mode)
-{
-    FILE *s;
-
-    s = fopen(fname, mode);
-    if (s == NULL) {
-	return 0;
-    }
-    fclose(s);
-    return 1;
-}
-
-/*
- * Return true if a file is readable.
- */
-static int readable(char *fname)
-{
-    return accessible(fname, "r");
-}
-
-/*
- * Return true if the specified file can be opened for write access.
- */
-static int writable(char *fname)
-{
-    return accessible(fname, "a");
-}
-
-/*
- * Return true if the named file exists, regardless of permissions.
- */
-static int exists(char *fname, apr_pool_t *pool)
-{
-    apr_finfo_t sbuf;
-    apr_status_t check;
-
-    check = apr_stat(&sbuf, fname, APR_FINFO_TYPE, pool);
-    return ((check || sbuf.filetype != APR_REG) ? 0 : 1);
-}
-
-/*
- * Copy from the current position of one file to the current position
- * of another.
- */
-static void copy_file(FILE *target, FILE *source)
-{
-    static char line[MAX_STRING_LEN];
-
-    while (fgets(line, sizeof(line), source) != NULL) {
-	fputs(line, target);
-    }
-}
-
-#ifdef NETWARE
-void nwTerminate()
-{
-    pressanykey();
-    apr_terminate();
-}
-#endif
-
-/*
- * Let's do it.  We end up doing a lot of file opening and closing,
- * but what do we care?  This application isn't run constantly.
- */
-int main(int argc, char *argv[])
-{
-    FILE *ftemp = NULL;
-    FILE *fpw = NULL;
-    char user[MAX_STRING_LEN];
-    char password[MAX_STRING_LEN];
-    char record[MAX_STRING_LEN];
-    char line[MAX_STRING_LEN];
-    char pwfilename[MAX_STRING_LEN];
-    char *arg;
-    int found = 0;
-    int alg = ALG_CRYPT;
-    int newfile = 0;
-    int nofile = 0;
-    int noninteractive = 0;
-    int i;
-    int args_left = 2;
-    apr_pool_t *pool;
-#if APR_CHARSET_EBCDIC
-    apr_status_t rv;
-    apr_xlate_t *to_ascii;
-#endif
-
-    apr_initialize();
-#ifdef NETWARE
-    atexit(nwTerminate);
-#else
-    atexit(apr_terminate);
-#endif
-    apr_pool_create(&pool, NULL);
-
-#if APR_CHARSET_EBCDIC
-    rv = apr_xlate_open(&to_ascii, "ISO8859-1", APR_DEFAULT_CHARSET, pool);
-    if (rv) {
-        fprintf(stderr, "apr_xlate_open(to ASCII)->%d\n", rv);
-        exit(1);
-    }
-    rv = apr_SHA1InitEBCDIC(to_ascii);
-    if (rv) {
-        fprintf(stderr, "apr_SHA1InitEBCDIC()->%d\n", rv);
-        exit(1);
-    }
-    rv = apr_MD5InitEBCDIC(to_ascii);
-    if (rv) {
-        fprintf(stderr, "apr_MD5InitEBCDIC()->%d\n", rv);
-        exit(1);
-    }
-#endif /*APR_CHARSET_EBCDIC*/
-
-    tempfilename = NULL;
-    apr_signal(SIGINT, (void (*)(int)) interrupted);
-
-    /*
-     * Preliminary check to make sure they provided at least
-     * three arguments, we'll do better argument checking as 
-     * we parse the command line.
-     */
-    if (argc < 3) {
-        return usage();
-    }
-
-    /*
-     * Go through the argument list and pick out any options.  They
-     * have to precede any other arguments.
-     */
-    for (i = 1; i < argc; i++) {
-	arg = argv[i];
-	if (*arg != '-') {
-	    break;
-	}
-	while (*++arg != '\0') {
-	    if (*arg == 'c') {
-		newfile++;
-	    }
-	    else if (*arg == 'n') {
-		nofile++;
-		args_left--;
-	    }
-	    else if (*arg == 'm') {
-		alg = ALG_APMD5;
-	    }
-	    else if (*arg == 's') {
-		alg = ALG_APSHA;
-	    }
-	    else if (*arg == 'p') {
-		alg = ALG_PLAIN;
-	    }
-	    else if (*arg == 'd') {
-		alg = ALG_CRYPT;
-	    }
-	    else if (*arg == 'b') {
-		noninteractive++;
-		args_left++;
-	    }
-	    else {
-		return usage();
-	    }
-	}
-    }
-
-    /*
-     * Make sure we still have exactly the right number of arguments left
-     * (the filename, the username, and possibly the password if -b was
-     * specified).
-     */
-    if ((argc - i) != args_left) {
-	return usage();
-    }
-    if (newfile && nofile) {
-	fprintf(stderr, "%s: -c and -n options conflict\n", argv[0]);
-	return ERR_SYNTAX;
-    }
-    if (nofile) {
-	i--;
-    }
-    else {
-	if (strlen(argv[i]) > (sizeof(pwfilename) - 1)) {
-	    fprintf(stderr, "%s: filename too long\n", argv[0]);
-	    return ERR_OVERFLOW;
-	}
-	strcpy(pwfilename, argv[i]);
-	if (strlen(argv[i + 1]) > (sizeof(user) - 1)) {
-	    fprintf(stderr, "%s: username too long (>%" APR_SIZE_T_FMT ")\n",
-	        argv[0], sizeof(user) - 1);
-	    return ERR_OVERFLOW;
-	}
-    }
-    strcpy(user, argv[i + 1]);
-    if ((arg = strchr(user, ':')) != NULL) {
-	fprintf(stderr, "%s: username contains illegal character '%c'\n",
-		argv[0], *arg);
-	return ERR_BADUSER;
-    }
-    if (noninteractive) {
-	if (strlen(argv[i + 2]) > (sizeof(password) - 1)) {
-	    fprintf(stderr, "%s: password too long (>%" APR_SIZE_T_FMT ")\n",
-	        argv[0], sizeof(password) - 1);
-	    return ERR_OVERFLOW;
-	}
-	strcpy(password, argv[i + 2]);
-    }
-
-#if defined(WIN32) || defined(NETWARE)
-    if (alg == ALG_CRYPT) {
-	alg = ALG_APMD5;
-	fprintf(stderr, "Automatically using MD5 format.\n");
-    }
-#endif
-
-#if (!(defined(WIN32) || defined(TPF) || defined(NETWARE)))
-    if (alg == ALG_PLAIN) {
-	fprintf(stderr,"Warning: storing passwords as plain text might "
-		"just not work on this platform.\n");
-    }
-#endif
-    if (! nofile) {
-	/*
-	 * Only do the file checks if we're supposed to frob it.
-	 *
-	 * Verify that the file exists if -c was omitted.  We give a special
-	 * message if it doesn't.
-	 */
-	if ((! newfile) && (! exists(pwfilename, pool))) {
-	    fprintf(stderr,
-		    "%s: cannot modify file %s; use '-c' to create it\n",
-		    argv[0], pwfilename);
-	    perror("fopen");
-	    exit(ERR_FILEPERM);
-	}
-	/*
-	 * Verify that we can read the existing file in the case of an update
-	 * to it (rather than creation of a new one).
-	 */
-	if ((! newfile) && (! readable(pwfilename))) {
-	    fprintf(stderr, "%s: cannot open file %s for read access\n",
-		    argv[0], pwfilename);
-	    perror("fopen");
-	    exit(ERR_FILEPERM);
-	}
-	/*
-	 * Now check to see if we can preserve an existing file in case
-	 * of password verification errors on a -c operation.
-	 */
-	if (newfile && exists(pwfilename, pool) && (! readable(pwfilename))) {
-	    fprintf(stderr, "%s: cannot open file %s for read access\n"
-		    "%s: existing auth data would be lost on "
-		    "password mismatch",
-		    argv[0], pwfilename, argv[0]);
-	    perror("fopen");
-	    exit(ERR_FILEPERM);
-	}
-	/*
-	 * Now verify that the file is writable!
-	 */
-	if (! writable(pwfilename)) {
-	    fprintf(stderr, "%s: cannot open file %s for write access\n",
-		    argv[0], pwfilename);
-	    perror("fopen");
-	    exit(ERR_FILEPERM);
-	}
-    }
-
-    /*
-     * All the file access checks (if any) have been made.  Time to go to work;
-     * try to create the record for the username in question.  If that
-     * fails, there's no need to waste any time on file manipulations.
-     * Any error message text is returned in the record buffer, since
-     * the mkrecord() routine doesn't have access to argv[].
-     */
-    i = mkrecord(user, record, sizeof(record) - 1,
-		 noninteractive ? password : NULL,
-		 alg);
-    if (i != 0) {
-	fprintf(stderr, "%s: %s\n", argv[0], record);
-	exit(i);
-    }
-    if (nofile) {
-	printf("%s\n", record);
-	exit(0);
-    }
-
-    /*
-     * We can access the files the right way, and we have a record
-     * to add or update.  Let's do it..
-     */
-    errno = 0;
-    tempfilename = tmpnam(tname_buf);
-    if ((tempfilename == NULL) || (*tempfilename == '\0')) {
-	fprintf(stderr, "%s: unable to generate temporary filename\n",
-		argv[0]);
-	if (errno == 0) {
-	    errno = ENOENT;
-	}
-	perror("tmpnam");
-	exit(ERR_FILEPERM);
-    }
-    ftemp = fopen(tempfilename, "w+");
-    if (ftemp == NULL) {
-	fprintf(stderr, "%s: unable to create temporary file '%s'\n", argv[0],
-		tempfilename);
-	perror("fopen");
-	exit(ERR_FILEPERM);
-    }
-    /*
-     * If we're not creating a new file, copy records from the existing
-     * one to the temporary file until we find the specified user.
-     */
-    if (! newfile) {
-	char scratch[MAX_STRING_LEN];
-
-	fpw = fopen(pwfilename, "r");
-	while (! (getline(line, sizeof(line), fpw))) {
-	    char *colon;
-
-	    if ((line[0] == '#') || (line[0] == '\0')) {
-		putline(ftemp, line);
-		continue;
-	    }
-	    strcpy(scratch, line);
-	    /*
-	     * See if this is our user.
-	     */
-	    colon = strchr(scratch, ':');
-	    if (colon != NULL) {
-		*colon = '\0';
-	    }
-	    if (strcmp(user, scratch) != 0) {
-		putline(ftemp, line);
-		continue;
-	    }
-	    found++;
-	    break;
-	}
-    }
-    if (found) {
-	fprintf(stderr, "Updating ");
-    }
-    else {
-	fprintf(stderr, "Adding ");
-    }
-    fprintf(stderr, "password for user %s\n", user);
-    /*
-     * Now add the user record we created.
-     */
-    putline(ftemp, record);
-    /*
-     * If we're updating an existing file, there may be additional
-     * records beyond the one we're updating, so copy them.
-     */
-    if (! newfile) {
-	copy_file(ftemp, fpw);
-	fclose(fpw);
-    }
-    /*
-     * The temporary file now contains the information that should be
-     * in the actual password file.  Close the open files, re-open them
-     * in the appropriate mode, and copy them file to the real one.
-     */
-    fclose(ftemp);
-    fpw = fopen(pwfilename, "w+");
-    ftemp = fopen(tempfilename, "r");
-    copy_file(fpw, ftemp);
-    fclose(fpw);
-    fclose(ftemp);
-    unlink(tempfilename);
-    return 0;
-}
diff --git a/support/htpasswd.dsp b/support/htpasswd.dsp
deleted file mode 100644
index f11383d..0000000
--- a/support/htpasswd.dsp
+++ /dev/null
@@ -1,123 +0,0 @@
-# Microsoft Developer Studio Project File - Name="htpasswd" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Console Application" 0x0103
-
-CFG=htpasswd - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "htpasswd.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "htpasswd.mak" CFG="htpasswd - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "htpasswd - Win32 Release" (based on "Win32 (x86) Console Application")
-!MESSAGE "htpasswd - Win32 Debug" (based on "Win32 (x86) Console Application")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "htpasswd - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "APR_DECLARE_STATIC" /D "APU_DECLARE_STATIC" /FD /c
-# ADD CPP /nologo /MD /W3 /O2 /I "../srclib/apr/include" /I "../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "APR_DECLARE_STATIC" /D "APU_DECLARE_STATIC" /Fd"Release/htpasswd" /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib /nologo /subsystem:console /map /machine:I386
-# ADD LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib /nologo /subsystem:console /map /machine:I386
-
-!ELSEIF  "$(CFG)" == "htpasswd - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "APR_DECLARE_STATIC" /D "APU_DECLARE_STATIC" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../srclib/apr/include" /I "../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "APR_DECLARE_STATIC" /D "APU_DECLARE_STATIC" /Fd"Debug/htpasswd" /FD /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib /nologo /subsystem:console /incremental:no /map /debug /machine:I386
-# ADD LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib /nologo /subsystem:console /incremental:no /map /debug /machine:I386
-
-!ENDIF 
-
-# Begin Target
-
-# Name "htpasswd - Win32 Release"
-# Name "htpasswd - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\htpasswd.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\htpasswd.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\build\win32\win32ver.awk
-
-!IF  "$(CFG)" == "htpasswd - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\build\win32\win32ver.awk
-
-".\htpasswd.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ../build/win32/win32ver.awk htpasswd "htpasswd Utility"  ../include/ap_release.h > .\htpasswd.rc
-
-# End Custom Build
-
-!ELSEIF  "$(CFG)" == "htpasswd - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\build\win32\win32ver.awk
-
-".\htpasswd.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ../build/win32/win32ver.awk htpasswd "htpasswd Utility"  ../include/ap_release.h > .\htpasswd.rc
-
-# End Custom Build
-
-!ENDIF 
-
-# End Source File
-# End Target
-# End Project
diff --git a/support/list_hooks.pl b/support/list_hooks.pl
deleted file mode 100755
index c52c567..0000000
--- a/support/list_hooks.pl
+++ /dev/null
@@ -1,77 +0,0 @@
-#!/usr/bin/perl -w
-
-use strict;
-
-use Carp;
-
-my $path=shift;
-
-findInDir($path);
-
-foreach my $hook (sort keys %::Hooks) {
-    my $h=$::Hooks{$hook};
-    for my $x (qw(declared implemented type args)) {
-	croak "$hook datum '$x' missing" if !exists $h->{$x};
-    }
-    print "$hook\n";
-    print "  declared in $h->{declared}\n";
-    print "  implemented in $h->{implemented}\n";
-    print "  type is $h->{type}\n";
-    print "  $h->{ret} $hook($h->{args})\n";
-    print "\n";
-}
-
-sub findInDir {
-    my $path=shift;
-
-    local(*D);
-    opendir(D,$path) || croak "Can't open $path: $!";
-    while(my $f=readdir D) {
-	next if $f=~/^\./;
-	my $file="$path/$f";
-
-	if(-d $file) {
-	    findInDir($file);
-	    next;
-	}
-	next if $file !~ /\.[ch]$/;
-
-	scanFile($file);
-    }
-    closedir D;
-}
-
-sub scanFile {
-    my $file=shift;
-
-#    print "scanning $file\n";
-
-    open(F,$file) || croak "Can't open $file: $!";
-    while(<F>) {
-	next if /\#define/;
-	next if /\@deffunc/;
-	if(/AP_DECLARE_HOOK\((.*)\)/) {
-	    my $def=$1;
-	    my($ret,$name,$args)=$def=~/([^,\s]+)\s*,\s*([^,\s]+)\s*,\s*\((.*)\)/;
-	    croak "Don't understand $def in $file" if !defined $args;
-#	    print "found $ret $name($args) in $file\n";
-
-	    croak "$name declared twice! ($_)"
-		if exists $::Hooks{$name}->{declared};
-	    $::Hooks{$name}->{declared}=$file;
-	    $::Hooks{$name}->{ret}=$ret;
-	    $::Hooks{$name}->{args}=$args;
-	}
-	if(/AP_IMPLEMENT_HOOK_()(VOID)\(([^,\s]+)/
-	   || /AP_IMPLEMENT(_OPTIONAL|)_HOOK_(.*?)\([^,]+?\s*,\s*([^,\s]+)/) {
-	    my($type,$name)=($1 ? "OPTIONAL $2" : $2,$3);
-
-#	    print "found $name $type in $file\n";
-
-	    croak "$name implemented twice ($::Hooks{$name}->{implemented} and $file) ($_)"
-		if exists $::Hooks{$name}->{implemented};
-	    $::Hooks{$name}->{implemented}=$file;
-	    $::Hooks{$name}->{type}=$type;
-	}
-    }
-}
diff --git a/support/log_server_status b/support/log_server_status
deleted file mode 100644
index e32280c..0000000
--- a/support/log_server_status
+++ /dev/null
@@ -1,114 +0,0 @@
-#!/usr/bin/perl
-# ====================================================================
-# The Apache Software License, Version 1.1
-#
-# Copyright (c) 2000-2001 The Apache Software Foundation.  All rights
-# reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# 1. Redistributions of source code must retain the above copyright
-#    notice, this list of conditions and the following disclaimer.
-#
-# 2. Redistributions in binary form must reproduce the above copyright
-#    notice, this list of conditions and the following disclaimer in
-#    the documentation and/or other materials provided with the
-#    distribution.
-#
-# 3. The end-user documentation included with the redistribution,
-#    if any, must include the following acknowledgment:
-#       "This product includes software developed by the
-#        Apache Software Foundation (http://www.apache.org/)."
-#    Alternately, this acknowledgment may appear in the software itself,
-#    if and wherever such third-party acknowledgments normally appear.
-#
-# 4. The names "Apache" and "Apache Software Foundation" must
-#    not be used to endorse or promote products derived from this
-#    software without prior written permission. For written
-#    permission, please contact apache@apache.org.
-#
-# 5. Products derived from this software may not be called "Apache",
-#    nor may "Apache" appear in their name, without prior written
-#    permission of the Apache Software Foundation.
-#
-# THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
-# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-# DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
-# ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
-# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
-# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-# SUCH DAMAGE.
-# ====================================================================
-#
-# This software consists of voluntary contributions made by many
-# individuals on behalf of the Apache Software Foundation.  For more
-# information on the Apache Software Foundation, please see
-# <http://www.apache.org/>.
-#
-# Log Server Status
-# Mark J Cox, UK Web Ltd 1996, mark@ukweb.com
-#
-# This script is designed to be run at a frequent interval by something
-# like cron.  It connects to the server and downloads the status
-# information.  It reformats the information to a single line and logs
-# it to a file.  Make sure the directory $wherelog is writable by the
-# user who runs this script.
-#
-require 'sys/socket.ph';
-
-$wherelog = "/var/log/graph/";  # Logs will be like "/var/log/graph/19960312"
-$server = "localhost";          # Name of server, could be "www.foo.com"
-$port = "80";                   # Port on server
-$request = "/status/?auto";     # Request to send
-
-sub tcp_connect
-{
-	local($host,$port) =@_;
-        $sockaddr='S n a4 x8';
-        chop($hostname=`hostname`);
-        $port=(getservbyname($port, 'tcp'))[2]  unless $port =~ /^\d+$/;
-        $me=pack($sockaddr,&AF_INET,0,(gethostbyname($hostname))[4]);
-        $them=pack($sockaddr,&AF_INET,$port,(gethostbyname($host))[4]);
-        socket(S,&PF_INET,&SOCK_STREAM,(getprotobyname('tcp'))[2]) || 
-		die "socket: $!";
-        bind(S,$me) || return "bind: $!";
-        connect(S,$them) || return "connect: $!";
-        select(S); 
-	$| = 1; 
-	select(stdout);
-	return "";
-}
-
-### Main
-
-{
-        $year=`date +%y`;
-	chomp($year);
-	$year += ($year < 70) ? 2000 : 1900;
-	$date = $year . `date +%m%d:%H%M%S`;
-	chomp($date);
-	($day,$time)=split(/:/,$date);
-	$res=&tcp_connect($server,$port);
-	open(OUT,">>$wherelog$day");
-	if ($res) {
-		print OUT "$time:-1:-1:-1:-1:$res\n";
-		exit 1;
-	}
-	print S "GET $request\n";
-	while (<S>) {
-		$requests=$1 if ( m|^BusyServers:\ (\S+)|);
-		$idle=$1 if ( m|^IdleServers:\ (\S+)|);
-		$number=$1 if ( m|sses:\ (\S+)|);
-		$cpu=$1 if (m|^CPULoad:\ (\S+)|);
-	}
-	print OUT "$time:$requests:$idle:$number:$cpu\n";
-}
-
-
diff --git a/support/log_server_status.in b/support/log_server_status.in
deleted file mode 100644
index e320792..0000000
--- a/support/log_server_status.in
+++ /dev/null
@@ -1,114 +0,0 @@
-#!@perlbin@
-# ====================================================================
-# The Apache Software License, Version 1.1
-#
-# Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
-# reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# 1. Redistributions of source code must retain the above copyright
-#    notice, this list of conditions and the following disclaimer.
-#
-# 2. Redistributions in binary form must reproduce the above copyright
-#    notice, this list of conditions and the following disclaimer in
-#    the documentation and/or other materials provided with the
-#    distribution.
-#
-# 3. The end-user documentation included with the redistribution,
-#    if any, must include the following acknowledgment:
-#       "This product includes software developed by the
-#        Apache Software Foundation (http://www.apache.org/)."
-#    Alternately, this acknowledgment may appear in the software itself,
-#    if and wherever such third-party acknowledgments normally appear.
-#
-# 4. The names "Apache" and "Apache Software Foundation" must
-#    not be used to endorse or promote products derived from this
-#    software without prior written permission. For written
-#    permission, please contact apache@apache.org.
-#
-# 5. Products derived from this software may not be called "Apache",
-#    nor may "Apache" appear in their name, without prior written
-#    permission of the Apache Software Foundation.
-#
-# THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
-# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-# DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
-# ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
-# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
-# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-# SUCH DAMAGE.
-# ====================================================================
-#
-# This software consists of voluntary contributions made by many
-# individuals on behalf of the Apache Software Foundation.  For more
-# information on the Apache Software Foundation, please see
-# <http://www.apache.org/>.
-#
-# Log Server Status
-# Mark J Cox, UK Web Ltd 1996, mark@ukweb.com
-#
-# This script is designed to be run at a frequent interval by something
-# like cron.  It connects to the server and downloads the status
-# information.  It reformats the information to a single line and logs
-# it to a file.  Make sure the directory $wherelog is writable by the
-# user who runs this script.
-#
-require 'sys/socket.ph';
-
-$wherelog = "/var/log/graph/";  # Logs will be like "/var/log/graph/19960312"
-$server = "localhost";          # Name of server, could be "www.foo.com"
-$port = "80";                   # Port on server
-$request = "/status/?auto";     # Request to send
-
-sub tcp_connect
-{
-	local($host,$port) =@_;
-        $sockaddr='S n a4 x8';
-        chop($hostname=`hostname`);
-        $port=(getservbyname($port, 'tcp'))[2]  unless $port =~ /^\d+$/;
-        $me=pack($sockaddr,&AF_INET,0,(gethostbyname($hostname))[4]);
-        $them=pack($sockaddr,&AF_INET,$port,(gethostbyname($host))[4]);
-        socket(S,&PF_INET,&SOCK_STREAM,(getprotobyname('tcp'))[2]) || 
-		die "socket: $!";
-        bind(S,$me) || return "bind: $!";
-        connect(S,$them) || return "connect: $!";
-        select(S); 
-	$| = 1; 
-	select(stdout);
-	return "";
-}
-
-### Main
-
-{
-        $year=`date +%y`;
-	chomp($year);
-	$year += ($year < 70) ? 2000 : 1900;
-	$date = $year . `date +%m%d:%H%M%S`;
-	chomp($date);
-	($day,$time)=split(/:/,$date);
-	$res=&tcp_connect($server,$port);
-	open(OUT,">>$wherelog$day");
-	if ($res) {
-		print OUT "$time:-1:-1:-1:-1:$res\n";
-		exit 1;
-	}
-	print S "GET $request\n";
-	while (<S>) {
-		$requests=$1 if ( m|^BusyServers:\ (\S+)|);
-		$idle=$1 if ( m|^IdleServers:\ (\S+)|);
-		$number=$1 if ( m|sses:\ (\S+)|);
-		$cpu=$1 if (m|^CPULoad:\ (\S+)|);
-	}
-	print OUT "$time:$requests:$idle:$number:$cpu\n";
-}
-
-
diff --git a/support/logresolve.c b/support/logresolve.c
deleted file mode 100644
index 1971814..0000000
--- a/support/logresolve.c
+++ /dev/null
@@ -1,382 +0,0 @@
-/*
- * logresolve 1.1
- *
- * Tom Rathborne - tomr@uunet.ca - http://www.uunet.ca/~tomr/
- * UUNET Canada, April 16, 1995
- *
- * Rewritten by David Robinson. (drtr@ast.cam.ac.uk)
- *
- * Usage: logresolve [-s filename] [-c] < access_log > new_log
- *
- * Arguments:
- *    -s filename     name of a file to record statistics
- *    -c              check the DNS for a matching A record for the host.
- *
- * Notes:
- *
- * To generate meaningful statistics from an HTTPD log file, it's good
- * to have the domain name of each machine that accessed your site, but
- * doing this on the fly can slow HTTPD down.
- *
- * Compiling NCSA HTTPD with the -DMINIMAL_DNS flag turns IP#->hostname
- * resolution off. Before running your stats program, just run your log
- * file through this program (logresolve) and all of your IP numbers will
- * be resolved into hostnames (where possible).
- *
- * logresolve takes an HTTPD access log (in the COMMON log file format,
- * or any other format that has the IP number/domain name as the first
- * field for that matter), and outputs the same file with all of the
- * domain names looked up. Where no domain name can be found, the IP
- * number is left in.
- *
- * To minimize impact on your nameserver, logresolve has its very own
- * internal hash-table cache. This means that each IP number will only
- * be looked up the first time it is found in the log file.
- *
- * The -c option causes logresolve to apply the same check as httpd
- * compiled with -DMAXIMUM_DNS; after finding the hostname from the IP
- * address, it looks up the IP addresses for the hostname and checks
- * that one of these matches the original address.
- */
-
-#include "apr_lib.h"
-#if APR_HAVE_STDIO_H
-#include <stdio.h>
-#endif
-#if APR_HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#if APR_HAVE_CTYPE_H
-#include <ctype.h>
-#endif
-#if APR_HAVE_NETDB_H
-#include <netdb.h>
-#endif
-#if APR_HAVE_NETINET_IN_H
-#include <netinet/in.h>
-#endif
-#if APR_HAVE_STRING_H
-#include <string.h>
-#endif
-#if APR_HAVE_SYS_SOCKET_H
-#include <sys/socket.h>
-#endif
-#if APR_HAVE_ARPA_INET_H
-#include <arpa/inet.h>
-#endif
-
-static void cgethost(struct in_addr ipnum, char *string, int check);
-static int getline(char *s, int n);
-static void stats(FILE *output);
-
-#ifdef BEOS
-#define NO_ADDRESS NO_DATA
-#endif
-
-
-/* maximum line length */
-#define MAXLINE 1024
-
-/* maximum length of a domain name */
-#ifndef MAXDNAME
-#define MAXDNAME 256
-#endif
-
-/* number of buckets in cache hash apr_table_t */
-#define BUCKETS 256
-
-#if !APR_HAVE_STRDUP
-char *strdup (const char *str)
-{
-    char *dup;
-
-    if (!(dup = (char *) malloc(strlen(str) + 1)))
-	return NULL;
-    dup = strcpy(dup, str);
-
-    return dup;
-}
-#endif
-
-/*
- * struct nsrec - record of nameservice for cache linked list
- * 
- * ipnum - IP number hostname - hostname noname - nonzero if IP number has no
- * hostname, i.e. hostname=IP number
- */
-
-struct nsrec {
-    struct in_addr ipnum;
-    char *hostname;
-    int noname;
-    struct nsrec *next;
-}    *nscache[BUCKETS];
-
-/*
- * statistics - obvious
- */
-
-#ifndef h_errno
-#ifdef __CYGWIN__
-extern __declspec(dllimport) int h_errno;
-#else
-extern int h_errno; /* some machines don't have this in their headers */
-#endif
-#endif
-
-/* largest value for h_errno */
-
-#define MAX_ERR (NO_ADDRESS)
-#define UNKNOWN_ERR (MAX_ERR+1)
-#define NO_REVERSE  (MAX_ERR+2)
-
-static int cachehits = 0;
-static int cachesize = 0;
-static int entries = 0;
-static int resolves = 0;
-static int withname = 0;
-static int errors[MAX_ERR + 3];
-
-/*
- * cgethost - gets hostname by IP address, caching, and adding unresolvable
- * IP numbers with their IP number as hostname, setting noname flag
- */
-
-static void cgethost (struct in_addr ipnum, char *string, int check)
-{
-    struct nsrec **current, *new;
-    struct hostent *hostdata;
-    char *name;
-
-    current = &nscache[((ipnum.s_addr + (ipnum.s_addr >> 8) +
-			 (ipnum.s_addr >> 16) + (ipnum.s_addr >> 24)) % BUCKETS)];
-
-    while (*current != NULL && ipnum.s_addr != (*current)->ipnum.s_addr)
-	current = &(*current)->next;
-
-    if (*current == NULL) {
-	cachesize++;
-	new = (struct nsrec *) malloc(sizeof(struct nsrec));
-	if (new == NULL) {
-	    perror("malloc");
-	    fprintf(stderr, "Insufficient memory\n");
-	    exit(1);
-	}
-	*current = new;
-	new->next = NULL;
-
-	new->ipnum = ipnum;
-
-	hostdata = gethostbyaddr((const char *) &ipnum, sizeof(struct in_addr),
-				 AF_INET);
-	if (hostdata == NULL) {
-	    if (h_errno > MAX_ERR)
-		errors[UNKNOWN_ERR]++;
-	    else
-		errors[h_errno]++;
-	    new->noname = h_errno;
-	    name = strdup(inet_ntoa(ipnum));
-	}
-	else {
-	    new->noname = 0;
-	    name = strdup(hostdata->h_name);
-	    if (check) {
-		if (name == NULL) {
-		    perror("strdup");
-		    fprintf(stderr, "Insufficient memory\n");
-		    exit(1);
-		}
-		hostdata = gethostbyname(name);
-		if (hostdata != NULL) {
-		    char **hptr;
-
-		    for (hptr = hostdata->h_addr_list; *hptr != NULL; hptr++)
-			if (((struct in_addr *) (*hptr))->s_addr == ipnum.s_addr)
-			    break;
-		    if (*hptr == NULL)
-			hostdata = NULL;
-		}
-		if (hostdata == NULL) {
-		    fprintf(stderr, "Bad host: %s != %s\n", name,
-			    inet_ntoa(ipnum));
-		    new->noname = NO_REVERSE;
-		    free(name);
-		    name = strdup(inet_ntoa(ipnum));
-		    errors[NO_REVERSE]++;
-		}
-	    }
-	}
-	new->hostname = name;
-	if (new->hostname == NULL) {
-	    perror("strdup");
-	    fprintf(stderr, "Insufficient memory\n");
-	    exit(1);
-	}
-    }
-    else
-	cachehits++;
-
-    /* size of string == MAXDNAME +1 */
-    strncpy(string, (*current)->hostname, MAXDNAME);
-    string[MAXDNAME] = '\0';
-}
-
-/*
- * prints various statistics to output
- */
-
-static void stats (FILE *output)
-{
-    int i;
-    char *ipstring;
-    struct nsrec *current;
-    char *errstring[MAX_ERR + 3];
-
-    for (i = 0; i < MAX_ERR + 3; i++)
-	errstring[i] = "Unknown error";
-    errstring[HOST_NOT_FOUND] = "Host not found";
-    errstring[TRY_AGAIN] = "Try again";
-    errstring[NO_RECOVERY] = "Non recoverable error";
-    errstring[NO_DATA] = "No data record";
-    errstring[NO_ADDRESS] = "No address";
-    errstring[NO_REVERSE] = "No reverse entry";
-
-    fprintf(output, "logresolve Statistics:\n");
-
-    fprintf(output, "Entries: %d\n", entries);
-    fprintf(output, "    With name   : %d\n", withname);
-    fprintf(output, "    Resolves    : %d\n", resolves);
-    if (errors[HOST_NOT_FOUND])
-	fprintf(output, "    - Not found : %d\n", errors[HOST_NOT_FOUND]);
-    if (errors[TRY_AGAIN])
-	fprintf(output, "    - Try again : %d\n", errors[TRY_AGAIN]);
-    if (errors[NO_DATA])
-	fprintf(output, "    - No data   : %d\n", errors[NO_DATA]);
-    if (errors[NO_ADDRESS])
-	fprintf(output, "    - No address: %d\n", errors[NO_ADDRESS]);
-    if (errors[NO_REVERSE])
-	fprintf(output, "    - No reverse: %d\n", errors[NO_REVERSE]);
-    fprintf(output, "Cache hits      : %d\n", cachehits);
-    fprintf(output, "Cache size      : %d\n", cachesize);
-    fprintf(output, "Cache buckets   :     IP number * hostname\n");
-
-    for (i = 0; i < BUCKETS; i++)
-	for (current = nscache[i]; current != NULL; current = current->next) {
-	    ipstring = inet_ntoa(current->ipnum);
-	    if (current->noname == 0)
-		fprintf(output, "  %3d  %15s - %s\n", i, ipstring,
-			current->hostname);
-	    else {
-		if (current->noname > MAX_ERR + 2)
-		    fprintf(output, "  %3d  %15s : Unknown error\n", i,
-			    ipstring);
-		else
-		    fprintf(output, "  %3d  %15s : %s\n", i, ipstring,
-			    errstring[current->noname]);
-	    }
-	}
-}
-
-
-/*
- * gets a line from stdin
- */
-
-static int getline (char *s, int n)
-{
-    char *cp;
-
-    if (!fgets(s, n, stdin))
-	return (0);
-    cp = strchr(s, '\n');
-    if (cp)
-	*cp = '\0';
-    return (1);
-}
-
-int main (int argc, char *argv[])
-{
-    struct in_addr ipnum;
-    char *bar, hoststring[MAXDNAME + 1], line[MAXLINE], *statfile;
-    int i, check;
-
-#ifdef WIN32
-    /*  If we apr'ify this code, apr_pool_create/apr_pool_destroy
-     *  should perform the WSAStartup/WSACleanup for us. 
-     */
-    WSADATA wsaData;
-    WSAStartup(0x101, &wsaData);
-#endif
-
-    check = 0;
-    statfile = NULL;
-    for (i = 1; i < argc; i++) {
-	if (strcmp(argv[i], "-c") == 0)
-	    check = 1;
-	else if (strcmp(argv[i], "-s") == 0) {
-	    if (i == argc - 1) {
-		fprintf(stderr, "logresolve: missing filename to -s\n");
-		exit(1);
-	    }
-	    i++;
-	    statfile = argv[i];
-	}
-	else {
-	    fprintf(stderr, "Usage: logresolve [-s statfile] [-c] < input > output\n");
-	    exit(0);
-	}
-    }
-
-    for (i = 0; i < BUCKETS; i++)
-	nscache[i] = NULL;
-    for (i = 0; i < MAX_ERR + 2; i++)
-	errors[i] = 0;
-
-    while (getline(line, MAXLINE)) {
-	if (line[0] == '\0')
-	    continue;
-	entries++;
-	if (!apr_isdigit(line[0])) {	/* short cut */
-	    puts(line);
-	    withname++;
-	    continue;
-	}
-	bar = strchr(line, ' ');
-	if (bar != NULL)
-	    *bar = '\0';
-	ipnum.s_addr = inet_addr(line);
-	if (ipnum.s_addr == 0xffffffffu) {
-	    if (bar != NULL)
-		*bar = ' ';
-	    puts(line);
-	    withname++;
-	    continue;
-	}
-
-	resolves++;
-
-	cgethost(ipnum, hoststring, check);
-	if (bar != NULL)
-	    printf("%s %s\n", hoststring, bar + 1);
-	else
-	    puts(hoststring);
-    }
-
-#ifdef WIN32
-     WSACleanup();
-#endif
-
-    if (statfile != NULL) {
-	FILE *fp;
-	fp = fopen(statfile, "w");
-	if (fp == NULL) {
-	    fprintf(stderr, "logresolve: could not open statistics file '%s'\n"
-		    ,statfile);
-	    exit(1);
-	}
-	stats(fp);
-	fclose(fp);
-    }
-
-    return (0);
-}
diff --git a/support/logresolve.dsp b/support/logresolve.dsp
deleted file mode 100644
index e0c8ea0..0000000
--- a/support/logresolve.dsp
+++ /dev/null
@@ -1,123 +0,0 @@
-# Microsoft Developer Studio Project File - Name="logresolve" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Console Application" 0x0103
-
-CFG=logresolve - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "logresolve.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "logresolve.mak" CFG="logresolve - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "logresolve - Win32 Release" (based on "Win32 (x86) Console Application")
-!MESSAGE "logresolve - Win32 Debug" (based on "Win32 (x86) Console Application")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "logresolve - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "APR_DECLARE_STATIC" /D "APU_DECLARE_STATIC" /FD /c
-# ADD CPP /nologo /MD /W3 /O2 /I "../srclib/apr/include" /I "../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "APR_DECLARE_STATIC" /D "APU_DECLARE_STATIC" /Fd"Release/logresolve" /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib /nologo /subsystem:console /map /machine:I386
-# ADD LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib /nologo /subsystem:console /map /machine:I386
-
-!ELSEIF  "$(CFG)" == "logresolve - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "APR_DECLARE_STATIC" /D "APU_DECLARE_STATIC" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../srclib/apr/include" /I "../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "APR_DECLARE_STATIC" /D "APU_DECLARE_STATIC" /Fd"Debug/logresolve" /FD /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib /nologo /subsystem:console /incremental:no /map /debug /machine:I386
-# ADD LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib /nologo /subsystem:console /incremental:no /map /debug /machine:I386
-
-!ENDIF 
-
-# Begin Target
-
-# Name "logresolve - Win32 Release"
-# Name "logresolve - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\logresolve.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\logresolve.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\build\win32\win32ver.awk
-
-!IF  "$(CFG)" == "logresolve - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\build\win32\win32ver.awk
-
-".\logresolve.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ../build/win32/win32ver.awk logresolve "logresolve Utility"  ../include/ap_release.h > .\logresolve.rc
-
-# End Custom Build
-
-!ELSEIF  "$(CFG)" == "logresolve - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\build\win32\win32ver.awk
-
-".\logresolve.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ../build/win32/win32ver.awk logresolve "logresolve Utility"  ../include/ap_release.h > .\logresolve.rc
-
-# End Custom Build
-
-!ENDIF 
-
-# End Source File
-# End Target
-# End Project
diff --git a/support/logresolve.pl b/support/logresolve.pl
deleted file mode 100644
index ab5a732..0000000
--- a/support/logresolve.pl
+++ /dev/null
@@ -1,261 +0,0 @@
-#!/usr/bin/perl
-# ====================================================================
-# The Apache Software License, Version 1.1
-#
-# Copyright (c) 2000-2001 The Apache Software Foundation.  All rights
-# reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# 1. Redistributions of source code must retain the above copyright
-#    notice, this list of conditions and the following disclaimer.
-#
-# 2. Redistributions in binary form must reproduce the above copyright
-#    notice, this list of conditions and the following disclaimer in
-#    the documentation and/or other materials provided with the
-#    distribution.
-#
-# 3. The end-user documentation included with the redistribution,
-#    if any, must include the following acknowledgment:
-#       "This product includes software developed by the
-#        Apache Software Foundation (http://www.apache.org/)."
-#    Alternately, this acknowledgment may appear in the software itself,
-#    if and wherever such third-party acknowledgments normally appear.
-#
-# 4. The names "Apache" and "Apache Software Foundation" must
-#    not be used to endorse or promote products derived from this
-#    software without prior written permission. For written
-#    permission, please contact apache@apache.org.
-#
-# 5. Products derived from this software may not be called "Apache",
-#    nor may "Apache" appear in their name, without prior written
-#    permission of the Apache Software Foundation.
-#
-# THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
-# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-# DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
-# ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
-# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
-# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-# SUCH DAMAGE.
-# ====================================================================
-#
-# This software consists of voluntary contributions made by many
-# individuals on behalf of the Apache Software Foundation.  For more
-# information on the Apache Software Foundation, please see
-# <http://www.apache.org/>.
-#
-# logresolve.pl
-#
-# v 1.2 by robh @ imdb.com
-# 
-# usage: logresolve.pl <infile >outfile
-#
-# input = Apache/NCSA/.. logfile with IP numbers at start of lines
-# output = same logfile with IP addresses resolved to hostnames where
-#  name lookups succeeded.
-#
-# this differs from the C based 'logresolve' in that this script
-# spawns a number ($CHILDREN) of subprocesses to resolve addresses
-# concurrently and sets a short timeout ($TIMEOUT) for each lookup in
-# order to keep things moving quickly.
-#
-# the parent process handles caching of IP->hostnames using a Perl hash
-# it also avoids sending the same IP to multiple child processes to be
-# resolved multiple times concurrently.
-#
-# Depending on the settings of $CHILDREN and $TIMEOUT you should see
-# significant reductions in the overall time taken to resolve your
-# logfiles. With $CHILDREN=40 and $TIMEOUT=5 I've seen 200,000 - 300,000
-# logfile lines processed per hour compared to ~45,000 per hour
-# with 'logresolve'.
-#
-# I haven't yet seen any noticable reduction in the percentage of IPs
-# that fail to get resolved. Your mileage will no doubt vary. 5s is long
-# enough to wait IMO.
-#
-# Known to work with FreeBSD 2.2
-# Known to have problems with Solaris
-#
-# 980417 - use 'sockaddr_un' for bind/connect to make the script work
-#  with linux. Fix from Luuk de Boer <luuk_de_boer@pi.net>
-
-require 5.004;
-
-$|=1;
-
-use FileHandle;
-use Socket;
-
-use strict;
-no strict 'refs';
-
-use vars qw($PROTOCOL);
-$PROTOCOL = 0;
-
-my $CHILDREN = 40;
-my $TIMEOUT  = 5;
-
-my $filename;
-my %hash = ();
-my $parent = $$;
-
-my @children = ();
-for (my $child = 1; $child <=$CHILDREN; $child++) {
-	my $f = fork();	
-	if (!$f) {
-		$filename = "./.socket.$parent.$child";
-		if (-e $filename) { unlink($filename) || warn "$filename .. $!\n";}
-		&child($child);
-		exit(0);
-	}
-	push(@children, $f);
-}
-
-&parent;
-&cleanup;
-
-## remove all temporary files before shutting down
-sub cleanup {
-	 # die kiddies, die
-	kill(15, @children);
-	for (my $child = 1; $child <=$CHILDREN; $child++) {
-		if (-e "./.socket.$parent.$child") {
-			unlink("./.socket.$parent.$child")
-				|| warn ".socket.$parent.$child $!";
-		}
-	}
-}
-	
-sub parent {
-	# Trap some possible signals to trigger temp file cleanup
-	$SIG{'KILL'} = $SIG{'INT'} = $SIG{'PIPE'} = \&cleanup;
-
-	my %CHILDSOCK;
-	my $filename;
- 
-	 ## fork child processes. Each child will create a socket connection
-	 ## to this parent and use an unique temp filename to do so.
-	for (my $child = 1; $child <=$CHILDREN; $child++) {
-		$CHILDSOCK{$child}= FileHandle->new;
-
-		if (!socket($CHILDSOCK{$child}, AF_UNIX, SOCK_STREAM, $PROTOCOL)) {
-			warn "parent socket to child failed $!";
-		}
-		$filename = "./.socket.$parent.$child";
-		my $response;
-		do {
-			$response = connect($CHILDSOCK{$child}, sockaddr_un($filename));
-			if ($response != 1) {
-				sleep(1);
-			}                       
-		} while ($response != 1);
-		$CHILDSOCK{$child}->autoflush;
-	}
-	## All child processes should now be ready or at worst warming up 
-
-	my (@buffer, $child, $ip, $rest, $hostname, $response);
-	 ## read the logfile lines from STDIN
-	while(<STDIN>) {
-		@buffer = ();	# empty the logfile line buffer array.
-		$child = 1;		# children are numbered 1..N, start with #1
-
-		# while we have a child to talk to and data to give it..
-		do {
-			push(@buffer, $_);					# buffer the line
-			($ip, $rest) = split(/ /, $_, 2);	# separate IP form rest
-
-			unless ($hash{$ip}) {				# resolve if unseen IP
-				$CHILDSOCK{$child}->print("$ip\n"); # pass IP to next child
-				$hash{$ip} = $ip;				# don't look it up again.
-				$child++;
-			}
-		} while (($child < ($CHILDREN-1)) and ($_ = <STDIN>));
-
-		 ## now poll each child for a response
-		while (--$child > 0) { 
-			$response = $CHILDSOCK{$child}->getline;
-			chomp($response);
-			 # child sends us back both the IP and HOSTNAME, no need for us
-			 # to remember what child received any given IP, and no worries
-			 # what order we talk to the children
-			($ip, $hostname) = split(/\|/, $response, 2);
-			$hash{$ip} = $hostname;
-		}
-
-		 # resolve all the logfiles lines held in the log buffer array..
-		for (my $line = 0; $line <=$#buffer; $line++) {
-			 # get next buffered line
-			($ip, $rest) = split(/ /, $buffer[$line], 2);
-			 # separate IP from rest and replace with cached hostname
-			printf STDOUT ("%s %s", $hash{$ip}, $rest);
-		}
-	}
-}
-
-########################################
-
-sub child {
-	 # arg = numeric ID - how the parent refers to me
-	my $me = shift;
-
-	 # add trap for alarm signals.
-	$SIG{'ALRM'} = sub { die "alarmed"; };
-
-	 # create a socket to communicate with parent
-	socket(INBOUND, AF_UNIX, SOCK_STREAM, $PROTOCOL)
-		|| die "Error with Socket: !$\n";
-	$filename = "./.socket.$parent.$me";
-	bind(INBOUND, sockaddr_un($filename))
-		|| die "Error Binding $filename: $!\n";
-	listen(INBOUND, 5) || die "Error Listening: $!\n";
-
-	my ($ip, $send_back);
-	my $talk = FileHandle->new;
-
-	 # accept a connection from the parent process. We only ever have
-	 # have one connection where we exchange 1 line of info with the
-	 # parent.. 1 line in (IP address), 1 line out (IP + hostname).
-	accept($talk, INBOUND) || die "Error Accepting: $!\n";
-	 # disable I/O buffering just in case
-	$talk->autoflush;
-	 # while the parent keeps sending data, we keep responding..
-	while(($ip = $talk->getline)) {
-		chomp($ip);
-		 # resolve the IP if time permits and send back what we found..
-		$send_back = sprintf("%s|%s", $ip, &nslookup($ip));
-		$talk->print($send_back."\n");
-	}
-}
-
-# perform a time restricted hostname lookup.
-sub nslookup {
-	 # get the IP as an arg
-	my $ip = shift;
-	my $hostname = undef;
-
-	 # do the hostname lookup inside an eval. The eval will use the
-	 # already configured SIGnal handler and drop out of the {} block
-	 # regardless of whether the alarm occured or not.
-	eval {
-		alarm($TIMEOUT);
-		$hostname = gethostbyaddr(gethostbyname($ip), AF_INET);
-		alarm(0);
-	};
-	if ($@ =~ /alarm/) {
-		 # useful for debugging perhaps..
-		# print "alarming, isn't it? ($ip)";
-	}
-
-	 # return the hostname or the IP address itself if there is no hostname
-	$hostname ne "" ? $hostname : $ip;
-}
-
-
diff --git a/support/logresolve.pl.in b/support/logresolve.pl.in
deleted file mode 100644
index 4402b9a..0000000
--- a/support/logresolve.pl.in
+++ /dev/null
@@ -1,261 +0,0 @@
-#!@perlbin@
-# ====================================================================
-# The Apache Software License, Version 1.1
-#
-# Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
-# reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# 1. Redistributions of source code must retain the above copyright
-#    notice, this list of conditions and the following disclaimer.
-#
-# 2. Redistributions in binary form must reproduce the above copyright
-#    notice, this list of conditions and the following disclaimer in
-#    the documentation and/or other materials provided with the
-#    distribution.
-#
-# 3. The end-user documentation included with the redistribution,
-#    if any, must include the following acknowledgment:
-#       "This product includes software developed by the
-#        Apache Software Foundation (http://www.apache.org/)."
-#    Alternately, this acknowledgment may appear in the software itself,
-#    if and wherever such third-party acknowledgments normally appear.
-#
-# 4. The names "Apache" and "Apache Software Foundation" must
-#    not be used to endorse or promote products derived from this
-#    software without prior written permission. For written
-#    permission, please contact apache@apache.org.
-#
-# 5. Products derived from this software may not be called "Apache",
-#    nor may "Apache" appear in their name, without prior written
-#    permission of the Apache Software Foundation.
-#
-# THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
-# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-# DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
-# ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
-# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
-# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-# SUCH DAMAGE.
-# ====================================================================
-#
-# This software consists of voluntary contributions made by many
-# individuals on behalf of the Apache Software Foundation.  For more
-# information on the Apache Software Foundation, please see
-# <http://www.apache.org/>.
-#
-# logresolve.pl
-#
-# v 1.2 by robh @ imdb.com
-# 
-# usage: logresolve.pl <infile >outfile
-#
-# input = Apache/NCSA/.. logfile with IP numbers at start of lines
-# output = same logfile with IP addresses resolved to hostnames where
-#  name lookups succeeded.
-#
-# this differs from the C based 'logresolve' in that this script
-# spawns a number ($CHILDREN) of subprocesses to resolve addresses
-# concurrently and sets a short timeout ($TIMEOUT) for each lookup in
-# order to keep things moving quickly.
-#
-# the parent process handles caching of IP->hostnames using a Perl hash
-# it also avoids sending the same IP to multiple child processes to be
-# resolved multiple times concurrently.
-#
-# Depending on the settings of $CHILDREN and $TIMEOUT you should see
-# significant reductions in the overall time taken to resolve your
-# logfiles. With $CHILDREN=40 and $TIMEOUT=5 I've seen 200,000 - 300,000
-# logfile lines processed per hour compared to ~45,000 per hour
-# with 'logresolve'.
-#
-# I haven't yet seen any noticable reduction in the percentage of IPs
-# that fail to get resolved. Your mileage will no doubt vary. 5s is long
-# enough to wait IMO.
-#
-# Known to work with FreeBSD 2.2
-# Known to have problems with Solaris
-#
-# 980417 - use 'sockaddr_un' for bind/connect to make the script work
-#  with linux. Fix from Luuk de Boer <luuk_de_boer@pi.net>
-
-require 5.004;
-
-$|=1;
-
-use FileHandle;
-use Socket;
-
-use strict;
-no strict 'refs';
-
-use vars qw($PROTOCOL);
-$PROTOCOL = 0;
-
-my $CHILDREN = 40;
-my $TIMEOUT  = 5;
-
-my $filename;
-my %hash = ();
-my $parent = $$;
-
-my @children = ();
-for (my $child = 1; $child <=$CHILDREN; $child++) {
-	my $f = fork();	
-	if (!$f) {
-		$filename = "./.socket.$parent.$child";
-		if (-e $filename) { unlink($filename) || warn "$filename .. $!\n";}
-		&child($child);
-		exit(0);
-	}
-	push(@children, $f);
-}
-
-&parent;
-&cleanup;
-
-## remove all temporary files before shutting down
-sub cleanup {
-	 # die kiddies, die
-	kill(15, @children);
-	for (my $child = 1; $child <=$CHILDREN; $child++) {
-		if (-e "./.socket.$parent.$child") {
-			unlink("./.socket.$parent.$child")
-				|| warn ".socket.$parent.$child $!";
-		}
-	}
-}
-	
-sub parent {
-	# Trap some possible signals to trigger temp file cleanup
-	$SIG{'KILL'} = $SIG{'INT'} = $SIG{'PIPE'} = \&cleanup;
-
-	my %CHILDSOCK;
-	my $filename;
- 
-	 ## fork child processes. Each child will create a socket connection
-	 ## to this parent and use an unique temp filename to do so.
-	for (my $child = 1; $child <=$CHILDREN; $child++) {
-		$CHILDSOCK{$child}= FileHandle->new;
-
-		if (!socket($CHILDSOCK{$child}, AF_UNIX, SOCK_STREAM, $PROTOCOL)) {
-			warn "parent socket to child failed $!";
-		}
-		$filename = "./.socket.$parent.$child";
-		my $response;
-		do {
-			$response = connect($CHILDSOCK{$child}, sockaddr_un($filename));
-			if ($response != 1) {
-				sleep(1);
-			}                       
-		} while ($response != 1);
-		$CHILDSOCK{$child}->autoflush;
-	}
-	## All child processes should now be ready or at worst warming up 
-
-	my (@buffer, $child, $ip, $rest, $hostname, $response);
-	 ## read the logfile lines from STDIN
-	while(<STDIN>) {
-		@buffer = ();	# empty the logfile line buffer array.
-		$child = 1;		# children are numbered 1..N, start with #1
-
-		# while we have a child to talk to and data to give it..
-		do {
-			push(@buffer, $_);					# buffer the line
-			($ip, $rest) = split(/ /, $_, 2);	# separate IP form rest
-
-			unless ($hash{$ip}) {				# resolve if unseen IP
-				$CHILDSOCK{$child}->print("$ip\n"); # pass IP to next child
-				$hash{$ip} = $ip;				# don't look it up again.
-				$child++;
-			}
-		} while (($child < ($CHILDREN-1)) and ($_ = <STDIN>));
-
-		 ## now poll each child for a response
-		while (--$child > 0) { 
-			$response = $CHILDSOCK{$child}->getline;
-			chomp($response);
-			 # child sends us back both the IP and HOSTNAME, no need for us
-			 # to remember what child received any given IP, and no worries
-			 # what order we talk to the children
-			($ip, $hostname) = split(/\|/, $response, 2);
-			$hash{$ip} = $hostname;
-		}
-
-		 # resolve all the logfiles lines held in the log buffer array..
-		for (my $line = 0; $line <=$#buffer; $line++) {
-			 # get next buffered line
-			($ip, $rest) = split(/ /, $buffer[$line], 2);
-			 # separate IP from rest and replace with cached hostname
-			printf STDOUT ("%s %s", $hash{$ip}, $rest);
-		}
-	}
-}
-
-########################################
-
-sub child {
-	 # arg = numeric ID - how the parent refers to me
-	my $me = shift;
-
-	 # add trap for alarm signals.
-	$SIG{'ALRM'} = sub { die "alarmed"; };
-
-	 # create a socket to communicate with parent
-	socket(INBOUND, AF_UNIX, SOCK_STREAM, $PROTOCOL)
-		|| die "Error with Socket: !$\n";
-	$filename = "./.socket.$parent.$me";
-	bind(INBOUND, sockaddr_un($filename))
-		|| die "Error Binding $filename: $!\n";
-	listen(INBOUND, 5) || die "Error Listening: $!\n";
-
-	my ($ip, $send_back);
-	my $talk = FileHandle->new;
-
-	 # accept a connection from the parent process. We only ever have
-	 # have one connection where we exchange 1 line of info with the
-	 # parent.. 1 line in (IP address), 1 line out (IP + hostname).
-	accept($talk, INBOUND) || die "Error Accepting: $!\n";
-	 # disable I/O buffering just in case
-	$talk->autoflush;
-	 # while the parent keeps sending data, we keep responding..
-	while(($ip = $talk->getline)) {
-		chomp($ip);
-		 # resolve the IP if time permits and send back what we found..
-		$send_back = sprintf("%s|%s", $ip, &nslookup($ip));
-		$talk->print($send_back."\n");
-	}
-}
-
-# perform a time restricted hostname lookup.
-sub nslookup {
-	 # get the IP as an arg
-	my $ip = shift;
-	my $hostname = undef;
-
-	 # do the hostname lookup inside an eval. The eval will use the
-	 # already configured SIGnal handler and drop out of the {} block
-	 # regardless of whether the alarm occured or not.
-	eval {
-		alarm($TIMEOUT);
-		$hostname = gethostbyaddr(gethostbyname($ip), AF_INET);
-		alarm(0);
-	};
-	if ($@ =~ /alarm/) {
-		 # useful for debugging perhaps..
-		# print "alarming, isn't it? ($ip)";
-	}
-
-	 # return the hostname or the IP address itself if there is no hostname
-	$hostname ne "" ? $hostname : $ip;
-}
-
-
diff --git a/support/phf_abuse_log.cgi b/support/phf_abuse_log.cgi
deleted file mode 100644
index 87543ce..0000000
--- a/support/phf_abuse_log.cgi
+++ /dev/null
@@ -1,22 +0,0 @@
-#!/usr/bin/perl
-
-# This script is used to detect people trying to abuse the security hole which
-# existed in A CGI script direstributed with Apache 1.0.3 and earlier versions.
-# You can redirect them to here using the "<Location /cgi-bin/phf*>" suggestion
-# in httpd.conf.  
-#
-# The format logged to is
-#    "[date] remote_addr remote_host [date] referrer user_agent".
-
-$LOG = "/var/log/phf_log";
-
-require "ctime.pl";
-$when = &ctime(time);
-$when =~ s/\n//go;
-$ENV{HTTP_USER_AGENT} .= " via $ENV{HTTP_VIA}" if($ENV{HTTP_VIA});
-
-open(LOG, ">>$LOG") || die "boo hoo, phf_log $!";
-print LOG "[$when] $ENV{REMOTE_ADDR} $ENV{REMOTE_HOST} $ENV{$HTTP_REFERER} $ENV{HTTP_USER_AGENT}\n";
-close(LOG);
-
-print "Content-type: text/html\r\n\r\n<BLINK>Smile, you're on Candid Camera.</BLINK>\n";
diff --git a/support/phf_abuse_log.cgi.in b/support/phf_abuse_log.cgi.in
deleted file mode 100644
index 723f553..0000000
--- a/support/phf_abuse_log.cgi.in
+++ /dev/null
@@ -1,22 +0,0 @@
-#!@perlbin@
-
-# This script is used to detect people trying to abuse the security hole which
-# existed in A CGI script direstributed with Apache 1.0.3 and earlier versions.
-# You can redirect them to here using the "<Location /cgi-bin/phf*>" suggestion
-# in httpd.conf.  
-#
-# The format logged to is
-#    "[date] remote_addr remote_host [date] referrer user_agent".
-
-$LOG = "/var/log/phf_log";
-
-require "ctime.pl";
-$when = &ctime(time);
-$when =~ s/\n//go;
-$ENV{HTTP_USER_AGENT} .= " via $ENV{HTTP_VIA}" if($ENV{HTTP_VIA});
-
-open(LOG, ">>$LOG") || die "boo hoo, phf_log $!";
-print LOG "[$when] $ENV{REMOTE_ADDR} $ENV{REMOTE_HOST} $ENV{$HTTP_REFERER} $ENV{HTTP_USER_AGENT}\n";
-close(LOG);
-
-print "Content-type: text/html\r\n\r\n<BLINK>Smile, you're on Candid Camera.</BLINK>\n";
diff --git a/support/rotatelogs.c b/support/rotatelogs.c
deleted file mode 100644
index b71e445..0000000
--- a/support/rotatelogs.c
+++ /dev/null
@@ -1,226 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-/*
- * Simple program to rotate Apache logs without having to kill the server.
- *
- * Contributed by Ben Laurie <ben@algroup.co.uk>
- *
- * 12 Mar 1996
- *
- * Ported to APR by Mladen Turk <mturk@mappingsoft.com>
- *
- * 23 Sep 2001
- */
-
-
-#include "apr.h"
-#include "apr_lib.h"
-#include "apr_strings.h"
-#include "apr_errno.h"
-#include "apr_file_io.h"
-#include "apr_file_info.h"
-#include "apr_general.h"
-#include "apr_time.h"
-
-#if APR_HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#if APR_HAVE_STRING_H
-#include <string.h>
-#endif
-#if APR_HAVE_STRINGS_H
-#include <strings.h>
-#endif
-
-#define BUFSIZE         65536
-#define ERRMSGSZ        82
-
-#ifndef MAX_PATH
-#define MAX_PATH        1024
-#endif
-
-int main (int argc, char *argv[])
-{
-    char buf[BUFSIZE], buf2[MAX_PATH], errbuf[ERRMSGSZ];
-    int tLogEnd = 0, tRotation, utc_offset = 0;
-    int nMessCount = 0;
-    apr_size_t nRead, nWrite;
-    int use_strftime = 0;
-    int now;
-    char *szLogRoot;
-    apr_file_t *f_stdin, *nLogFD = NULL, *nLogFDprev = NULL;
-    apr_pool_t *pool;
-
-    apr_initialize();
-    atexit(apr_terminate);
-
-    apr_pool_create(&pool, NULL);
-    if (argc < 3 || argc > 4) {
-        fprintf(stderr,
-                "Usage: %s <logfile> <rotation time in seconds> "
-                "[offset minutes from UTC]\n\n",
-                argv[0]);
-#ifdef OS2
-        fprintf(stderr,
-                "Add this:\n\nTransferLog \"|%s.exe /some/where 86400\"\n\n",
-                argv[0]);
-#else
-        fprintf(stderr,
-                "Add this:\n\nTransferLog \"|%s /some/where 86400\"\n\n",
-                argv[0]);
-#endif
-        fprintf(stderr,
-                "to httpd.conf. The generated name will be /some/where.nnnn "
-                "where nnnn is the\nsystem time at which the log nominally "
-                "starts (N.B. this time will always be a\nmultiple of the "
-                "rotation time, so you can synchronize cron scripts with it).\n"
-                "At the end of each rotation time a new log is started.\n");
-        exit(1);
-    }
-
-    szLogRoot = argv[1];
-    if (argc >= 4) {
-        utc_offset = atoi(argv[3]) * 60;
-    }
-    tRotation = atoi(argv[2]);
-    if (tRotation <= 0) {
-        fprintf(stderr, "Rotation time must be > 0\n");
-        exit(6);
-    }
-
-    use_strftime = (strchr(szLogRoot, '%') != NULL);
-    if (apr_file_open_stdin(&f_stdin, pool) != APR_SUCCESS) {
-        fprintf(stderr, "Unable to open stdin\n");
-        exit(1);
-    }
-
-    for (;;) {
-        nRead = sizeof(buf);
-        if (apr_file_read(f_stdin, buf, &nRead) != APR_SUCCESS)
-            exit(3);
-        now = (int)(apr_time_now() / APR_USEC_PER_SEC) + utc_offset;
-        if (nRead == 0)
-            exit(3);
-        if (nLogFD != NULL && (now >= tLogEnd || nRead < 0)) {
-            nLogFDprev = nLogFD;
-            nLogFD = NULL;
-        }
-        if (nLogFD == NULL) {
-            int tLogStart = (now / tRotation) * tRotation;
-            if (use_strftime) {
-		apr_time_t tNow = tLogStart * APR_USEC_PER_SEC;
-                apr_time_exp_t e;
-                apr_size_t rs;
-
-                apr_explode_gmt(&e, tNow);
-                apr_strftime(buf2, &rs, sizeof(buf2), szLogRoot, &e);
-            }
-            else {
-                sprintf(buf2, "%s.%010d", szLogRoot, tLogStart);
-            }
-            tLogEnd = tLogStart + tRotation;
-            apr_file_open(&nLogFD, buf2, APR_READ | APR_WRITE | APR_CREATE | APR_APPEND,
-                          APR_OS_DEFAULT, pool);
-            if (nLogFD == NULL) {
-                /* Uh-oh. Failed to open the new log file. Try to clear
-                 * the previous log file, note the lost log entries,
-                 * and keep on truckin'. */
-                if (nLogFDprev == NULL) {
-                    fprintf(stderr, "1 Previous file handle doesn't exists %s\n", buf2);
-                    exit(2);
-                }
-                else {
-                    nLogFD = nLogFDprev;
-                    sprintf(errbuf,
-                            "Resetting log file due to error opening "
-                            "new log file. %10d messages lost.\n",
-                            nMessCount);
-                    nWrite = strlen(errbuf);
-                    apr_file_trunc(nLogFD, 0);
-                    if (apr_file_write(nLogFD, errbuf, &nWrite) != APR_SUCCESS) {
-                        fprintf(stderr, "Error witing to the file %s\n", buf2);
-                        exit(2);
-                    }
-                }
-            }
-            else if (nLogFDprev) {
-                apr_file_close(nLogFDprev);
-            }
-            nMessCount = 0;
-        }
-        do {
-            nWrite = nRead;
-            apr_file_write(nLogFD, buf, &nWrite);
-        } while (nWrite < 0 && errno == EINTR);
-        if (nWrite != nRead) {
-            nMessCount++;
-            sprintf(errbuf,
-                    "Error writing to log file. "
-                    "%10d messages lost.\n",
-                    nMessCount);
-            nWrite = strlen(errbuf);
-            apr_file_trunc(nLogFD, 0);
-            if (apr_file_write(nLogFD, errbuf, &nWrite) != APR_SUCCESS) {
-                fprintf(stderr, "Error witing to the file %s\n", buf2);
-                exit(2);
-            }
-        }
-        else {
-            nMessCount++;
-        }
-    }
-    /* Of course we never, but prevent compiler warnings */
-    return 0;
-}
diff --git a/support/rotatelogs.dsp b/support/rotatelogs.dsp
deleted file mode 100644
index 1ae69c9..0000000
--- a/support/rotatelogs.dsp
+++ /dev/null
@@ -1,123 +0,0 @@
-# Microsoft Developer Studio Project File - Name="rotatelogs" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Console Application" 0x0103
-
-CFG=rotatelogs - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "rotatelogs.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "rotatelogs.mak" CFG="rotatelogs - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "rotatelogs - Win32 Release" (based on "Win32 (x86) Console Application")
-!MESSAGE "rotatelogs - Win32 Debug" (based on "Win32 (x86) Console Application")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "rotatelogs - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "APR_DECLARE_STATIC" /D "APU_DECLARE_STATIC" /FD /c
-# ADD CPP /nologo /MD /W3 /O2 /I "../srclib/apr/include" /I "../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "APR_DECLARE_STATIC" /D "APU_DECLARE_STATIC" /Fd"Release/rotatelogs" /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib /nologo /subsystem:console /map /machine:I386
-
-!ELSEIF  "$(CFG)" == "rotatelogs - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "APR_DECLARE_STATIC" /D "APU_DECLARE_STATIC" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../srclib/apr/include" /I "../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "APR_DECLARE_STATIC" /D "APU_DECLARE_STATIC" /Fd"Debug/rotatelogs" /FD /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib /nologo /subsystem:console /incremental:no /map /debug /machine:I386
-# ADD LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib /nologo /subsystem:console /incremental:no /map /debug /machine:I386
-
-!ENDIF 
-
-# Begin Target
-
-# Name "rotatelogs - Win32 Release"
-# Name "rotatelogs - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\rotatelogs.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\rotatelogs.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\build\win32\win32ver.awk
-
-!IF  "$(CFG)" == "rotatelogs - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\build\win32\win32ver.awk
-
-".\rotatelogs.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ../build/win32/win32ver.awk rotatelogs "rotatelogs Utility"  ../include/ap_release.h > .\rotatelogs.rc
-
-# End Custom Build
-
-!ELSEIF  "$(CFG)" == "rotatelogs - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\build\win32\win32ver.awk
-
-".\rotatelogs.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ../build/win32/win32ver.awk rotatelogs "rotatelogs Utility"  ../include/ap_release.h > .\rotatelogs.rc
-
-# End Custom Build
-
-!ENDIF 
-
-# End Source File
-# End Target
-# End Project
diff --git a/support/split-logfile b/support/split-logfile
deleted file mode 100644
index c0f3486..0000000
--- a/support/split-logfile
+++ /dev/null
@@ -1,98 +0,0 @@
-#!/usr/bin/perl
-# ====================================================================
-# The Apache Software License, Version 1.1
-#
-# Copyright (c) 2000-2001 The Apache Software Foundation.  All rights
-# reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# 1. Redistributions of source code must retain the above copyright
-#    notice, this list of conditions and the following disclaimer.
-#
-# 2. Redistributions in binary form must reproduce the above copyright
-#    notice, this list of conditions and the following disclaimer in
-#    the documentation and/or other materials provided with the
-#    distribution.
-#
-# 3. The end-user documentation included with the redistribution,
-#    if any, must include the following acknowledgment:
-#       "This product includes software developed by the
-#        Apache Software Foundation (http://www.apache.org/)."
-#    Alternately, this acknowledgment may appear in the software itself,
-#    if and wherever such third-party acknowledgments normally appear.
-#
-# 4. The names "Apache" and "Apache Software Foundation" must
-#    not be used to endorse or promote products derived from this
-#    software without prior written permission. For written
-#    permission, please contact apache@apache.org.
-#
-# 5. Products derived from this software may not be called "Apache",
-#    nor may "Apache" appear in their name, without prior written
-#    permission of the Apache Software Foundation.
-#
-# THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
-# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-# DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
-# ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
-# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
-# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-# SUCH DAMAGE.
-# ====================================================================
-#
-# This software consists of voluntary contributions made by many
-# individuals on behalf of the Apache Software Foundation.  For more
-# information on the Apache Software Foundation, please see
-# <http://www.apache.org/>.
-
-# This script will take a combined Web server access
-# log file and break its contents into separate files.
-# It assumes that the first field of each line is the
-# virtual host identity (put there by "%v"), and that
-# the logfiles should be named that+".log" in the current
-# directory.
-#
-# The combined log file is read from stdin. Records read
-# will be appended to any existing log files.
-#
-%is_open = ();
-
-while ($log_line = <STDIN>) {
-    #
-    # Get the first token from the log record; it's the
-    # identity of the virtual host to which the record
-    # applies.
-    #
-    ($vhost) = split (/\s/, $log_line);
-    #
-    # Normalize the virtual host name to all lowercase.
-    # If it's blank, the request was handled by the default
-    # server, so supply a default name.  This shouldn't
-    # happen, but caution rocks.
-    #
-    $vhost = lc ($vhost) or "access";
-    #
-    # If the log file for this virtual host isn't opened
-    # yet, do it now.
-    #
-    if (! $is_open{$vhost}) {
-        open $vhost, ">>${vhost}.log"
-            or die ("Can't open ${vhost}.log");
-        $is_open{$vhost} = 1;
-    }
-    #
-    # Strip off the first token (which may be null in the
-    # case of the default server), and write the edited
-    # record to the current log file.
-    #
-    $log_line =~ s/^\S*\s+//;
-    printf $vhost "%s", $log_line;
-}
-exit 0;
diff --git a/support/split-logfile.in b/support/split-logfile.in
deleted file mode 100644
index 038ce7c..0000000
--- a/support/split-logfile.in
+++ /dev/null
@@ -1,98 +0,0 @@
-#!@perlbin@
-# ====================================================================
-# The Apache Software License, Version 1.1
-#
-# Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
-# reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# 1. Redistributions of source code must retain the above copyright
-#    notice, this list of conditions and the following disclaimer.
-#
-# 2. Redistributions in binary form must reproduce the above copyright
-#    notice, this list of conditions and the following disclaimer in
-#    the documentation and/or other materials provided with the
-#    distribution.
-#
-# 3. The end-user documentation included with the redistribution,
-#    if any, must include the following acknowledgment:
-#       "This product includes software developed by the
-#        Apache Software Foundation (http://www.apache.org/)."
-#    Alternately, this acknowledgment may appear in the software itself,
-#    if and wherever such third-party acknowledgments normally appear.
-#
-# 4. The names "Apache" and "Apache Software Foundation" must
-#    not be used to endorse or promote products derived from this
-#    software without prior written permission. For written
-#    permission, please contact apache@apache.org.
-#
-# 5. Products derived from this software may not be called "Apache",
-#    nor may "Apache" appear in their name, without prior written
-#    permission of the Apache Software Foundation.
-#
-# THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
-# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-# DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
-# ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
-# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
-# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-# SUCH DAMAGE.
-# ====================================================================
-#
-# This software consists of voluntary contributions made by many
-# individuals on behalf of the Apache Software Foundation.  For more
-# information on the Apache Software Foundation, please see
-# <http://www.apache.org/>.
-
-# This script will take a combined Web server access
-# log file and break its contents into separate files.
-# It assumes that the first field of each line is the
-# virtual host identity (put there by "%v"), and that
-# the logfiles should be named that+".log" in the current
-# directory.
-#
-# The combined log file is read from stdin. Records read
-# will be appended to any existing log files.
-#
-%is_open = ();
-
-while ($log_line = <STDIN>) {
-    #
-    # Get the first token from the log record; it's the
-    # identity of the virtual host to which the record
-    # applies.
-    #
-    ($vhost) = split (/\s/, $log_line);
-    #
-    # Normalize the virtual host name to all lowercase.
-    # If it's blank, the request was handled by the default
-    # server, so supply a default name.  This shouldn't
-    # happen, but caution rocks.
-    #
-    $vhost = lc ($vhost) or "access";
-    #
-    # If the log file for this virtual host isn't opened
-    # yet, do it now.
-    #
-    if (! $is_open{$vhost}) {
-        open $vhost, ">>${vhost}.log"
-            or die ("Can't open ${vhost}.log");
-        $is_open{$vhost} = 1;
-    }
-    #
-    # Strip off the first token (which may be null in the
-    # case of the default server), and write the edited
-    # record to the current log file.
-    #
-    $log_line =~ s/^\S*\s+//;
-    printf $vhost "%s", $log_line;
-}
-exit 0;
diff --git a/support/suexec.c b/support/suexec.c
deleted file mode 100644
index 16c8e6e..0000000
--- a/support/suexec.c
+++ /dev/null
@@ -1,636 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-/*
- * suexec.c -- "Wrapper" support program for suEXEC behaviour for Apache
- *
- ***********************************************************************
- *
- * NOTE! : DO NOT edit this code!!!  Unless you know what you are doing,
- *         editing this code might open up your system in unexpected 
- *         ways to would-be crackers.  Every precaution has been taken 
- *         to make this code as safe as possible; alter it at your own
- *         risk.
- *
- ***********************************************************************
- *
- *
- */
-
-#include "ap_config.h"
-#include <sys/param.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-#include <string.h>
-#include <time.h>
-#if APR_HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include <stdio.h>
-#include <stdarg.h>
-#include <stdlib.h>
-
-#include "suexec.h"
-
-#ifdef HAVE_PWD_H
-#include <pwd.h>
-#endif
-
-#ifdef HAVE_GRP_H
-#include <grp.h>
-#endif
-
-/*
- ***********************************************************************
- * There is no initgroups() in QNX, so I believe this is safe :-)
- * Use cc -osuexec -3 -O -mf -DQNX suexec.c to compile.
- *
- * May 17, 1997.
- * Igor N. Kovalenko -- infoh@mail.wplus.net
- ***********************************************************************
- */
-
-#if defined(NEED_INITGROUPS)
-int initgroups(const char *name, gid_t basegid)
-{
-    /* QNX and MPE do not appear to support supplementary groups. */
-    return 0;
-}
-#endif
-
-#if defined(PATH_MAX)
-#define AP_MAXPATH PATH_MAX
-#elif defined(MAXPATHLEN)
-#define AP_MAXPATH MAXPATHLEN
-#else
-#define AP_MAXPATH 8192
-#endif
-
-#define AP_ENVBUF 256
-
-extern char **environ;
-static FILE *log = NULL;
-
-char *safe_env_lst[] =
-{
-    "AUTH_TYPE",
-    "CONTENT_LENGTH",
-    "CONTENT_TYPE",
-    "DATE_GMT",
-    "DATE_LOCAL",
-    "DOCUMENT_NAME",
-    "DOCUMENT_PATH_INFO",
-    "DOCUMENT_ROOT",
-    "DOCUMENT_URI",
-    "FILEPATH_INFO",
-    "GATEWAY_INTERFACE",
-    "HTTPS",
-    "LAST_MODIFIED",
-    "PATH_INFO",
-    "PATH_TRANSLATED",
-    "QUERY_STRING",
-    "QUERY_STRING_UNESCAPED",
-    "REMOTE_ADDR",
-    "REMOTE_HOST",
-    "REMOTE_IDENT",
-    "REMOTE_PORT",
-    "REMOTE_USER",
-    "REDIRECT_QUERY_STRING",
-    "REDIRECT_STATUS",
-    "REDIRECT_URL",
-    "REQUEST_METHOD",
-    "REQUEST_URI",
-    "SCRIPT_FILENAME",
-    "SCRIPT_NAME",
-    "SCRIPT_URI",
-    "SCRIPT_URL",
-    "SERVER_ADMIN",
-    "SERVER_NAME",
-    "SERVER_ADDR",
-    "SERVER_PORT",
-    "SERVER_PROTOCOL",
-    "SERVER_SOFTWARE",
-    "UNIQUE_ID",
-    "USER_NAME",
-    "TZ",
-    NULL
-};
-
-
-static void err_output(const char *fmt, va_list ap)
-{
-#ifdef AP_LOG_EXEC
-    time_t timevar;
-    struct tm *lt;
-
-    if (!log) {
-        if ((log = fopen(AP_LOG_EXEC, "a")) == NULL) {
-            fprintf(stderr, "failed to open log file\n");
-            perror("fopen");
-            exit(1);
-        }
-    }
-
-    time(&timevar);
-    lt = localtime(&timevar);
-
-    fprintf(log, "[%d-%.2d-%.2d %.2d:%.2d:%.2d]: ",
-            lt->tm_year + 1900, lt->tm_mon + 1, lt->tm_mday,
-            lt->tm_hour, lt->tm_min, lt->tm_sec);
-
-    vfprintf(log, fmt, ap);
-
-    fflush(log);
-#endif /* AP_LOG_EXEC */
-    return;
-}
-
-static void log_err(const char *fmt,...)
-{
-#ifdef AP_LOG_EXEC
-    va_list ap;
-
-    va_start(ap, fmt);
-    err_output(fmt, ap);
-    va_end(ap);
-#endif /* AP_LOG_EXEC */
-    return;
-}
-
-static void clean_env(void)
-{
-    char pathbuf[512];
-    char **cleanenv;
-    char **ep;
-    int cidx = 0;
-    int idx;
-
-
-    if ((cleanenv = (char **) calloc(AP_ENVBUF, sizeof(char *))) == NULL) {
-        log_err("failed to malloc memory for environment\n");
-        exit(120);
-    }
-
-    sprintf(pathbuf, "PATH=%s", AP_SAFE_PATH);
-    cleanenv[cidx] = strdup(pathbuf);
-    cidx++;
-
-    for (ep = environ; *ep && cidx < AP_ENVBUF-1; ep++) {
-        if (!strncmp(*ep, "HTTP_", 5) || !strncmp(*ep, "SSL_", 4)) {
-            cleanenv[cidx] = *ep;
-            cidx++;
-        }
-        else {
-            for (idx = 0; safe_env_lst[idx]; idx++) {
-                if (!strncmp(*ep, safe_env_lst[idx],
-                             strlen(safe_env_lst[idx]))) {
-                    cleanenv[cidx] = *ep;
-                    cidx++;
-                    break;
-                }
-            }
-        }
-    }
-
-    cleanenv[cidx] = NULL;
-
-    environ = cleanenv;
-}
-
-int main(int argc, char *argv[])
-{
-    int userdir = 0;        /* ~userdir flag             */
-    uid_t uid;              /* user information          */
-    gid_t gid;              /* target group placeholder  */
-    char *target_uname;     /* target user name          */
-    char *target_gname;     /* target group name         */
-    char *target_homedir;   /* target home directory     */
-    char *actual_uname;     /* actual user name          */
-    char *actual_gname;     /* actual group name         */
-    char *prog;             /* name of this program      */
-    char *cmd;              /* command to be executed    */
-    char cwd[AP_MAXPATH];   /* current working directory */
-    char dwd[AP_MAXPATH];   /* docroot working directory */
-    struct passwd *pw;      /* password entry holder     */
-    struct group *gr;       /* group entry holder        */
-    struct stat dir_info;   /* directory info holder     */
-    struct stat prg_info;   /* program info holder       */
-
-    prog = argv[0];
-    /*
-     * Check existence/validity of the UID of the user
-     * running this program.  Error out if invalid.
-     */
-    uid = getuid();
-    if ((pw = getpwuid(uid)) == NULL) {
-        log_err("crit: invalid uid: (%ld)\n", uid);
-        exit(102);
-    }
-    /*
-     * See if this is a 'how were you compiled' request, and
-     * comply if so.
-     */
-    if ((argc > 1)
-        && (! strcmp(argv[1], "-V"))
-        && ((uid == 0)
-#ifdef _OSD_POSIX
-        /* User name comparisons are case insensitive on BS2000/OSD */
-            || (! strcasecmp(AP_HTTPD_USER, pw->pw_name)))
-#else  /* _OSD_POSIX */
-            || (! strcmp(AP_HTTPD_USER, pw->pw_name)))
-#endif /* _OSD_POSIX */
-        ) {
-#ifdef AP_DOC_ROOT
-        fprintf(stderr, " -D AP_DOC_ROOT=\"%s\"\n", AP_DOC_ROOT);
-#endif
-#ifdef AP_GID_MIN
-        fprintf(stderr, " -D AP_GID_MIN=%d\n", AP_GID_MIN);
-#endif
-#ifdef AP_HTTPD_USER
-        fprintf(stderr, " -D AP_HTTPD_USER=\"%s\"\n", AP_HTTPD_USER);
-#endif
-#ifdef AP_LOG_EXEC
-        fprintf(stderr, " -D AP_LOG_EXEC=\"%s\"\n", AP_LOG_EXEC);
-#endif
-#ifdef AP_SAFE_PATH
-        fprintf(stderr, " -D AP_SAFE_PATH=\"%s\"\n", AP_SAFE_PATH);
-#endif
-#ifdef AP_SUEXEC_UMASK
-        fprintf(stderr, " -D AP_SUEXEC_UMASK=%03o\n", AP_SUEXEC_UMASK);
-#endif
-#ifdef AP_UID_MIN
-        fprintf(stderr, " -D AP_UID_MIN=%d\n", AP_UID_MIN);
-#endif
-#ifdef AP_USERDIR_SUFFIX
-        fprintf(stderr, " -D AP_USERDIR_SUFFIX=\"%s\"\n", AP_USERDIR_SUFFIX);
-#endif
-        exit(0);
-    }
-    /*
-     * If there are a proper number of arguments, set
-     * all of them to variables.  Otherwise, error out.
-     */
-    if (argc < 4) {
-        log_err("too few arguments\n");
-        exit(101);
-    }
-    target_uname = argv[1];
-    target_gname = argv[2];
-    cmd = argv[3];
-
-    /*
-     * Check to see if the user running this program
-     * is the user allowed to do so as defined in
-     * suexec.h.  If not the allowed user, error out.
-     */
-#ifdef _OSD_POSIX
-    /* User name comparisons are case insensitive on BS2000/OSD */
-    if (strcasecmp(AP_HTTPD_USER, pw->pw_name)) {
-        log_err("user mismatch (%s instead of %s)\n", pw->pw_name, AP_HTTPD_USER);
-        exit(103);
-    }
-#else  /*_OSD_POSIX*/
-    if (strcmp(AP_HTTPD_USER, pw->pw_name)) {
-        log_err("user mismatch (%s instead of %s)\n", pw->pw_name, AP_HTTPD_USER);
-        exit(103);
-    }
-#endif /*_OSD_POSIX*/
-
-    /*
-     * Check for a leading '/' (absolute path) in the command to be executed,
-     * or attempts to back up out of the current directory,
-     * to protect against attacks.  If any are
-     * found, error out.  Naughty naughty crackers.
-     */
-    if ((cmd[0] == '/') || (!strncmp(cmd, "../", 3))
-        || (strstr(cmd, "/../") != NULL)) {
-        log_err("invalid command (%s)\n", cmd);
-        exit(104);
-    }
-
-    /*
-     * Check to see if this is a ~userdir request.  If
-     * so, set the flag, and remove the '~' from the
-     * target username.
-     */
-    if (!strncmp("~", target_uname, 1)) {
-        target_uname++;
-        userdir = 1;
-    }
-
-    /*
-     * Error out if the target username is invalid.
-     */
-    if (strspn(target_uname, "1234567890") != strlen(target_uname)) {
-        if ((pw = getpwnam(target_uname)) == NULL) {
-            log_err("invalid target user name: (%s)\n", target_uname);
-            exit(105);
-        }
-    }
-    else {
-        if ((pw = getpwuid(atoi(target_uname))) == NULL) {
-            log_err("invalud target user id: (%s)\n", target_uname);
-            exit(121);
-        }
-    }
-
-    /*
-     * Error out if the target group name is invalid.
-     */
-    if (strspn(target_gname, "1234567890") != strlen(target_gname)) {
-        if ((gr = getgrnam(target_gname)) == NULL) {
-            log_err("invalid target group name: (%s)\n", target_gname);
-            exit(106);
-        }
-        gid = gr->gr_gid;
-        actual_gname = strdup(gr->gr_name);
-    }
-    else {
-        gid = atoi(target_gname);
-        actual_gname = strdup(target_gname);
-    }
-
-#ifdef _OSD_POSIX
-    /*
-     * Initialize BS2000 user environment
-     */
-    {
-        pid_t pid;
-        int status;
-
-        switch (pid = ufork(target_uname)) {
-        case -1:    /* Error */
-            log_err("failed to setup bs2000 environment for user %s: %s\n",
-                    target_uname, strerror(errno));
-            exit(150);
-        case 0:     /* Child */
-            break;
-        default:    /* Father */
-            while (pid != waitpid(pid, &status, 0))
-                ;
-            /* @@@ FIXME: should we deal with STOP signals as well? */
-            if (WIFSIGNALED(status)) {
-                kill (getpid(), WTERMSIG(status));
-            }
-            exit(WEXITSTATUS(status));
-        }
-    }
-#endif /*_OSD_POSIX*/
-    
-    /*
-     * Save these for later since initgroups will hose the struct
-     */
-    uid = pw->pw_uid;
-    actual_uname = strdup(pw->pw_name);
-    target_homedir = strdup(pw->pw_dir);
-
-    /*
-     * Log the transaction here to be sure we have an open log 
-     * before we setuid().
-     */
-    log_err("uid: (%s/%s) gid: (%s/%s) cmd: %s\n",
-            target_uname, actual_uname,
-            target_gname, actual_gname,
-            cmd);
-
-    /*
-     * Error out if attempt is made to execute as root or as
-     * a UID less than AP_UID_MIN.  Tsk tsk.
-     */
-    if ((uid == 0) || (uid < AP_UID_MIN)) {
-        log_err("cannot run as forbidden uid (%d/%s)\n", uid, cmd);
-        exit(107);
-    }
-
-    /*
-     * Error out if attempt is made to execute as root group
-     * or as a GID less than AP_GID_MIN.  Tsk tsk.
-     */
-    if ((gid == 0) || (gid < AP_GID_MIN)) {
-        log_err("cannot run as forbidden gid (%d/%s)\n", gid, cmd);
-        exit(108);
-    }
-
-    /*
-     * Change UID/GID here so that the following tests work over NFS.
-     *
-     * Initialize the group access list for the target user,
-     * and setgid() to the target group. If unsuccessful, error out.
-     */
-    if (((setgid(gid)) != 0) || (initgroups(actual_uname, gid) != 0)) {
-        log_err("failed to setgid (%ld: %s)\n", gid, cmd);
-        exit(109);
-    }
-
-    /*
-     * setuid() to the target user.  Error out on fail.
-     */
-    if ((setuid(uid)) != 0) {
-        log_err("failed to setuid (%ld: %s)\n", uid, cmd);
-        exit(110);
-    }
-
-    /*
-     * Get the current working directory, as well as the proper
-     * document root (dependant upon whether or not it is a
-     * ~userdir request).  Error out if we cannot get either one,
-     * or if the current working directory is not in the docroot.
-     * Use chdir()s and getcwd()s to avoid problems with symlinked
-     * directories.  Yuck.
-     */
-    if (getcwd(cwd, AP_MAXPATH) == NULL) {
-        log_err("cannot get current working directory\n");
-        exit(111);
-    }
-
-    if (userdir) {
-        if (((chdir(target_homedir)) != 0) ||
-            ((chdir(AP_USERDIR_SUFFIX)) != 0) ||
-            ((getcwd(dwd, AP_MAXPATH)) == NULL) ||
-            ((chdir(cwd)) != 0)) {
-            log_err("cannot get docroot information (%s)\n", target_homedir);
-            exit(112);
-        }
-    }
-    else {
-        if (((chdir(AP_DOC_ROOT)) != 0) ||
-            ((getcwd(dwd, AP_MAXPATH)) == NULL) ||
-            ((chdir(cwd)) != 0)) {
-            log_err("cannot get docroot information (%s)\n", AP_DOC_ROOT);
-            exit(113);
-        }
-    }
-
-    if ((strncmp(cwd, dwd, strlen(dwd))) != 0) {
-        log_err("command not in docroot (%s/%s)\n", cwd, cmd);
-        exit(114);
-    }
-
-    /*
-     * Stat the cwd and verify it is a directory, or error out.
-     */
-    if (((lstat(cwd, &dir_info)) != 0) || !(S_ISDIR(dir_info.st_mode))) {
-        log_err("cannot stat directory: (%s)\n", cwd);
-        exit(115);
-    }
-
-    /*
-     * Error out if cwd is writable by others.
-     */
-    if ((dir_info.st_mode & S_IWOTH) || (dir_info.st_mode & S_IWGRP)) {
-        log_err("directory is writable by others: (%s)\n", cwd);
-        exit(116);
-    }
-
-    /*
-     * Error out if we cannot stat the program.
-     */
-    if (((lstat(cmd, &prg_info)) != 0) || (S_ISLNK(prg_info.st_mode))) {
-        log_err("cannot stat program: (%s)\n", cmd);
-        exit(117);
-    }
-
-    /*
-     * Error out if the program is writable by others.
-     */
-    if ((prg_info.st_mode & S_IWOTH) || (prg_info.st_mode & S_IWGRP)) {
-        log_err("file is writable by others: (%s/%s)\n", cwd, cmd);
-        exit(118);
-    }
-
-    /*
-     * Error out if the file is setuid or setgid.
-     */
-    if ((prg_info.st_mode & S_ISUID) || (prg_info.st_mode & S_ISGID)) {
-        log_err("file is either setuid or setgid: (%s/%s)\n", cwd, cmd);
-        exit(119);
-    }
-
-    /*
-     * Error out if the target name/group is different from
-     * the name/group of the cwd or the program.
-     */
-    if ((uid != dir_info.st_uid) ||
-        (gid != dir_info.st_gid) ||
-        (uid != prg_info.st_uid) ||
-        (gid != prg_info.st_gid)) {
-        log_err("target uid/gid (%ld/%ld) mismatch "
-                "with directory (%ld/%ld) or program (%ld/%ld)\n",
-                uid, gid,
-                dir_info.st_uid, dir_info.st_gid,
-                prg_info.st_uid, prg_info.st_gid);
-        exit(120);
-    }
-    /*
-     * Error out if the program is not executable for the user.
-     * Otherwise, she won't find any error in the logs except for
-     * "[error] Premature end of script headers: ..."
-     */
-    if (!(prg_info.st_mode & S_IXUSR)) {
-        log_err("file has no execute permission: (%s/%s)\n", cwd, cmd);
-        exit(121);
-    }
-
-#ifdef AP_SUEXEC_UMASK
-    /*
-     * umask() uses inverse logic; bits are CLEAR for allowed access.
-     */
-    if ((~AP_SUEXEC_UMASK) & 0022) {
-        log_err("notice: AP_SUEXEC_UMASK of %03o allows "
-                "write permission to group and/or other\n", AP_SUEXEC_UMASK);
-    }
-    umask(AP_SUEXEC_UMASK);
-#endif /* AP_SUEXEC_UMASK */
-    clean_env();
-
-    /* 
-     * Be sure to close the log file so the CGI can't
-     * mess with it.  If the exec fails, it will be reopened 
-     * automatically when log_err is called.  Note that the log
-     * might not actually be open if AP_LOG_EXEC isn't defined.
-     * However, the "log" cell isn't ifdef'd so let's be defensive
-     * and assume someone might have done something with it
-     * outside an ifdef'd AP_LOG_EXEC block.
-     */
-    if (log != NULL) {
-        fclose(log);
-        log = NULL;
-    }
-
-    /*
-     * Execute the command, replacing our image with its own.
-     */
-#ifdef NEED_HASHBANG_EMUL
-    /* We need the #! emulation when we want to execute scripts */
-    {
-        extern char **environ;
-
-        ap_execve(cmd, &argv[3], environ);
-    }
-#else /*NEED_HASHBANG_EMUL*/
-    execv(cmd, &argv[3]);
-#endif /*NEED_HASHBANG_EMUL*/
-
-    /*
-     * (I can't help myself...sorry.)
-     *
-     * Uh oh.  Still here.  Where's the kaboom?  There was supposed to be an
-     * EARTH-shattering kaboom!
-     *
-     * Oh well, log the failure and error out.
-     */
-    log_err("(%d)%s: exec failed (%s)\n", errno, strerror(errno), cmd);
-    exit(255);
-}
diff --git a/support/suexec.h b/support/suexec.h
deleted file mode 100644
index 34a91f9..0000000
--- a/support/suexec.h
+++ /dev/null
@@ -1,140 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-/*
- * suexec.h -- user-definable variables for the suexec wrapper code.
- *             (See README.configure on how to customize these variables.)
- */
-
-
-#ifndef _SUEXEC_H
-#define _SUEXEC_H
-
-/*
- * HTTPD_USER -- Define as the username under which Apache normally
- *               runs.  This is the only user allowed to execute
- *               this program.
- */
-#ifndef AP_HTTPD_USER
-#define AP_HTTPD_USER "www"
-#endif
-
-/*
- * UID_MIN -- Define this as the lowest UID allowed to be a target user
- *            for suEXEC.  For most systems, 500 or 100 is common.
- */
-#ifndef AP_UID_MIN
-#define AP_UID_MIN 100
-#endif
-
-/*
- * GID_MIN -- Define this as the lowest GID allowed to be a target group
- *            for suEXEC.  For most systems, 100 is common.
- */
-#ifndef AP_GID_MIN
-#define AP_GID_MIN 100
-#endif
-
-/*
- * USERDIR_SUFFIX -- Define to be the subdirectory under users' 
- *                   home directories where suEXEC access should
- *                   be allowed.  All executables under this directory
- *                   will be executable by suEXEC as the user so 
- *                   they should be "safe" programs.  If you are 
- *                   using a "simple" UserDir directive (ie. one 
- *                   without a "*" in it) this should be set to 
- *                   the same value.  suEXEC will not work properly
- *                   in cases where the UserDir directive points to 
- *                   a location that is not the same as the user's
- *                   home directory as referenced in the passwd file.
- *
- *                   If you have VirtualHosts with a different
- *                   UserDir for each, you will need to define them to
- *                   all reside in one parent directory; then name that
- *                   parent directory here.  IF THIS IS NOT DEFINED
- *                   PROPERLY, ~USERDIR CGI REQUESTS WILL NOT WORK!
- *                   See the suEXEC documentation for more detailed
- *                   information.
- */
-#ifndef AP_USERDIR_SUFFIX
-#define AP_USERDIR_SUFFIX "public_html"
-#endif
-
-/*
- * LOG_EXEC -- Define this as a filename if you want all suEXEC
- *             transactions and errors logged for auditing and
- *             debugging purposes.
- */
-#ifndef AP_LOG_EXEC
-#define AP_LOG_EXEC "/usr/local/apache/logs/cgi.log"	/* Need me? */
-#endif
-
-/*
- * DOC_ROOT -- Define as the DocumentRoot set for Apache.  This
- *             will be the only hierarchy (aside from UserDirs)
- *             that can be used for suEXEC behavior.
- */
-#ifndef AP_DOC_ROOT
-#define AP_DOC_ROOT "/usr/local/apache/htdocs"
-#endif
-
-/*
- * SAFE_PATH -- Define a safe PATH environment to pass to CGI executables.
- *
- */
-#ifndef AP_SAFE_PATH
-#define AP_SAFE_PATH "/usr/local/bin:/usr/bin:/bin"
-#endif
-
-#endif /* _SUEXEC_H */
diff --git a/support/utilitiesnw.def b/support/utilitiesnw.def
deleted file mode 100644
index 426b8c9..0000000
--- a/support/utilitiesnw.def
+++ /dev/null
@@ -1,3 +0,0 @@
-MODULE  APRLIB.NLM
-MODULE  LIBC.NLM
-
diff --git a/support/win32/.cvsignore b/support/win32/.cvsignore
deleted file mode 100644
index f1a34d0..0000000
--- a/support/win32/.cvsignore
+++ /dev/null
@@ -1,8 +0,0 @@
-Release
-Debug
-ApacheMonitorVersion.rc
-wintty.rc
-*.plg
-*.aps
-*.dep
-*.mak
diff --git a/support/win32/ApacheMonitor.c b/support/win32/ApacheMonitor.c
deleted file mode 100644
index 2a54fad..0000000
--- a/support/win32/ApacheMonitor.c
+++ /dev/null
@@ -1,1663 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-/* ====================================================================
- * ApacheMonitor.c Simple program to manage and monitor Apache services.
- *
- * Contributed by Mladen Turk <mturk@mappingsoft.com>
- *
- * 05 Aug 2001
- * ==================================================================== 
- */
-
-#define _WIN32_WINNT 0x0400
-#ifndef STRICT
-#define STRICT
-#endif
-#ifndef OEMRESOURCE
-#define OEMRESOURCE
-#endif
-
-#include <windows.h>
-#include <windowsx.h>
-#include <commctrl.h>
-#include <objbase.h>
-#include <shlobj.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include "ApacheMonitor.h"
-
-
-#define OS_VERSION_WIN9X    1
-#define OS_VERSION_WINNT    2
-#define OS_VERSION_WIN2K    3
-/* Should be enough */
-#define MAX_APACHE_SERVICES 128
-#define MAX_APACHE_COMPUTERS 32
-
-#define WM_TRAYMESSAGE         (WM_APP+1)
-#define WM_UPDATEMESSAGE       (WM_USER+1)
-#define WM_MANAGEMESSAGE       (WM_USER+2)
-#define WM_TIMER_REFRESH       10
-#define WM_TIMER_RESCAN        11
-#define SERVICE_APACHE_RESTART 128
-#define XBITMAP                16
-#define YBITMAP                16 
-#define MAX_LOADSTRING         100
-#define REFRESH_TIME           2000           /* service refresh time (ms) */
-#define RESCAN_TIME            20000          /* registry rescan time (ms) */
-
-typedef struct _st_APACHE_SERVICE
-{
-    LPSTR    szServiceName;
-    LPSTR    szDisplayName;
-    LPSTR    szDescription;
-    LPSTR    szImagePath;
-    LPSTR    szComputerName;
-    DWORD    dwPid;
-} ST_APACHE_SERVICE;
-
-typedef struct _st_MONITORED_COMPUTERS
-{
-    LPSTR   szComputerName;
-    HKEY    hRegistry;
-} ST_MONITORED_COMP;
-
-/* Global variables */
-HINSTANCE         g_hInstance = NULL;
-CHAR              *g_szTitle;          /* The title bar text */
-CHAR              *g_szWindowClass;    /* Window Class Name  */
-HICON             g_icoStop;
-HICON             g_icoRun;
-UINT              g_bUiTaskbarCreated;
-DWORD             g_dwOSVersion;
-BOOL              g_bDlgServiceOn = FALSE;
-BOOL              g_bConsoleRun = FALSE;
-ST_APACHE_SERVICE g_stServices[MAX_APACHE_SERVICES];
-ST_MONITORED_COMP g_stComputers[MAX_APACHE_COMPUTERS];
-
-HBITMAP           g_hBmpStart, g_hBmpStop; 
-HBITMAP           g_hBmpPicture, g_hBmpOld; 
-BOOL              g_bRescanServices;
-HWND              g_hwndServiceDlg;
-HWND              g_hwndMain;
-HWND              g_hwndStdoutList;
-HWND              g_hwndConnectDlg;
-HCURSOR           g_hCursorHourglass;
-HCURSOR           g_hCursorArrow;
-
-HANDLE            g_hpipeOutRead;
-HANDLE            g_hpipeOutWrite;
-HANDLE            g_hpipeInRead;
-HANDLE            g_hpipeInWrite;
-HANDLE            g_hpipeStdError;
-LANGID            g_LangID;
-PROCESS_INFORMATION g_lpRedirectProc;
-CRITICAL_SECTION    g_stcSection;
-LPSTR             g_szLocalHost;
-
-/* locale language support */
-static CHAR *g_lpMsg[IDS_MSG_LAST - IDS_MSG_FIRST + 1];
-
-void am_ClearServicesSt()
-{
-    int i;
-    for (i = 0; i < MAX_APACHE_SERVICES; i++)
-    {
-        if (g_stServices[i].szServiceName)
-            free(g_stServices[i].szServiceName);
-        if (g_stServices[i].szDisplayName)
-            free(g_stServices[i].szDisplayName);
-        if (g_stServices[i].szDescription)
-            free(g_stServices[i].szDescription);
-        if (g_stServices[i].szImagePath)
-            free(g_stServices[i].szImagePath);
-        if (g_stServices[i].szComputerName)
-            free(g_stServices[i].szComputerName);
-
-    }
-    ZeroMemory(g_stServices, sizeof(ST_APACHE_SERVICE) * MAX_APACHE_SERVICES);
-
-}
-
-void am_ClearComputersSt()
-{
-    int i;
-    for (i = 0; i < MAX_APACHE_COMPUTERS; i++)
-    {
-        if (g_stComputers[i].szComputerName) {
-            free(g_stComputers[i].szComputerName);
-            RegCloseKey(g_stComputers[i].hRegistry);
-        }
-    }
-    ZeroMemory(g_stComputers, sizeof(ST_MONITORED_COMP) * MAX_APACHE_COMPUTERS);
-
-}
-
-BOOL am_IsComputerConnected( LPSTR szComputerName)
-{
-    int i = 0;
-    while (g_stComputers[i].szComputerName != NULL) {
-        if (strcmp(g_stComputers[i].szComputerName, szComputerName) == 0)
-            return TRUE;
-        ++i;
-    }
-    return FALSE;
-}
-
-void am_DisconnectComputer( LPSTR szComputerName)
-{
-    int i = 0, j;
-    while (g_stComputers[i].szComputerName != NULL) {
-        if (strcmp(g_stComputers[i].szComputerName, szComputerName) == 0)
-            break;
-        ++i;
-    }
-    if (g_stComputers[i].szComputerName != NULL) {
-        free(g_stComputers[i].szComputerName);
-        RegCloseKey(g_stComputers[i].hRegistry);
-        for( j = i; j < MAX_APACHE_COMPUTERS - 1; j++) {
-            g_stComputers[i].szComputerName = g_stComputers[i+1].szComputerName;
-            g_stComputers[i].hRegistry = g_stComputers[i+1].hRegistry;
-        }
-        for( i = j; i < MAX_APACHE_COMPUTERS; i++) {
-            g_stComputers[i].szComputerName = NULL;
-            g_stComputers[i].hRegistry = NULL;
-        }
-    } 
-
-}
-
-void ErrorMessage(LPCSTR szError, BOOL bFatal)
-{
-    LPVOID lpMsgBuf  = NULL;
-    if (szError)
-        MessageBox(NULL, szError, g_lpMsg[IDS_MSG_ERROR-IDS_MSG_FIRST],
-                    MB_OK | (bFatal ? MB_ICONERROR : MB_ICONEXCLAMATION));
-    else
-    {
-        FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
-            FORMAT_MESSAGE_FROM_SYSTEM |
-            FORMAT_MESSAGE_IGNORE_INSERTS,
-            NULL,
-            GetLastError(),
-            g_LangID,
-            (LPSTR) &lpMsgBuf, 0, NULL);
-        MessageBox(NULL, (LPCSTR)lpMsgBuf, g_lpMsg[IDS_MSG_ERROR-IDS_MSG_FIRST],
-                    MB_OK | (bFatal ? MB_ICONERROR : MB_ICONEXCLAMATION));
-        LocalFree(lpMsgBuf);
-    }
-    if ( bFatal)
-        PostQuitMessage(0);
-}
-
-BOOL am_ConnectComputer(LPSTR szComputerName)
-{
-    int i = 0;
-    HKEY hKeyRemote;
-    char szTmp[MAX_PATH];
-
-    while (g_stComputers[i].szComputerName != NULL) {
-        if (strcmp(g_stComputers[i].szComputerName, szComputerName) == 0)
-            return FALSE;
-        ++i;
-    }
-    if (i > MAX_APACHE_COMPUTERS - 1)
-        return FALSE;
-    if (RegConnectRegistry(szComputerName, HKEY_LOCAL_MACHINE, &hKeyRemote) != ERROR_SUCCESS)
-    {
-        sprintf(szTmp, g_lpMsg[IDS_MSG_ECONNECT-IDS_MSG_FIRST], szComputerName);
-        ErrorMessage(szTmp, FALSE);
-        return FALSE;
-    }
-    else 
-    {
-        g_stComputers[i].szComputerName = strdup(szComputerName);
-        g_stComputers[i].hRegistry = hKeyRemote;
-        return TRUE;
-    }
-} 
-
-LPSTR GetStringRes(int id)
-{
-  static CHAR buffer[MAX_PATH];
-
-  buffer[0] = 0;
-  LoadString(GetModuleHandle (NULL), id, buffer, MAX_PATH);
-  return buffer;
-}
-
-BOOL GetSystemOSVersion(LPDWORD dwVersion)
-{
-    OSVERSIONINFO osvi;
-    /* 
-    Try calling GetVersionEx using the OSVERSIONINFOEX structure.
-    If that fails, try using the OSVERSIONINFO structure.
-    */
-    ZeroMemory(&osvi, sizeof(OSVERSIONINFO));
-    osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
-    
-    if (!GetVersionEx(&osvi))
-        return FALSE;
-    
-    switch (osvi.dwPlatformId)
-    {
-    case VER_PLATFORM_WIN32_NT:        
-        if (osvi.dwMajorVersion <= 4)
-            *dwVersion = OS_VERSION_WINNT;
-        else if (osvi.dwMajorVersion == 5)
-            *dwVersion = OS_VERSION_WIN2K;
-        else
-            return FALSE;
-        
-        break;        
-    case VER_PLATFORM_WIN32_WINDOWS:
-            *dwVersion = OS_VERSION_WIN9X;        
-        break;
-        
-    case VER_PLATFORM_WIN32s:
-            *dwVersion = 0;
-        return FALSE;
-    default:
-        return FALSE;
-        break;
-   }
-   return TRUE; 
-}
-
-static VOID ShowNotifyIcon(HWND hWnd, DWORD dwMessage)
-{
-    
-    NOTIFYICONDATA nid;
-    int  i = 0, n = 0;
-
-    ZeroMemory(&nid,sizeof(nid));
-    nid.cbSize = sizeof(NOTIFYICONDATA);
-    nid.hWnd = hWnd;
-    nid.uID = 0xFF;
-    nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
-    nid.uCallbackMessage = WM_TRAYMESSAGE;
-    
-    while (g_stServices[i].szServiceName != NULL)
-    {    
-        if (g_stServices[i].dwPid != 0)
-            ++n;
-        ++i;
-    }
-    if (dwMessage != NIM_DELETE)
-    {
-        if (n)
-            nid.hIcon = g_icoRun;
-        else
-            nid.hIcon = g_icoStop;
-    }
-    else
-        nid.hIcon = NULL;
-    if (n == i && n > 0)
-        lstrcpy(nid.szTip, g_lpMsg[IDS_MSG_RUNNINGALL-IDS_MSG_FIRST]);
-    else if (n)
-        sprintf(nid.szTip, g_lpMsg[IDS_MSG_RUNNING-IDS_MSG_FIRST], n, i);
-    else if (i)
-        sprintf(nid.szTip, g_lpMsg[IDS_MSG_RUNNINGNONE-IDS_MSG_FIRST], i);
-    else
-        lstrcpy(nid.szTip, g_lpMsg[IDS_MSG_NOSERVICES-IDS_MSG_FIRST]);
-    Shell_NotifyIcon(dwMessage, &nid);
-}
-
-void appendMenuItem(HMENU hMenu, UINT uMenuId, LPSTR szName, BOOL fDefault, BOOL fEnabled)
-{
-    MENUITEMINFO mii;
-    
-    ZeroMemory(&mii, sizeof(MENUITEMINFO));
-    mii.cbSize = sizeof(MENUITEMINFO);
-    mii.fMask = MIIM_ID | MIIM_TYPE | MIIM_STATE;
-    if (lstrlen(szName))
-    {
-        mii.fType = MFT_STRING;
-        mii.wID = uMenuId;
-        if (fDefault)
-            mii.fState = MFS_DEFAULT;
-        if (!fEnabled)
-            mii.fState |= MFS_DISABLED;
-        mii.dwTypeData = szName;
-    }
-    else
-        mii.fType = MFT_SEPARATOR;
-    InsertMenuItem(hMenu, uMenuId, FALSE, &mii);
-}
-
-void appendServiceMenu(HMENU hMenu, UINT uMenuId, LPSTR szServiceName, BOOL fRunning)
-{
-    MENUITEMINFO mii;
-    HMENU        smh;    
-
-    smh = CreatePopupMenu();
-
-    appendMenuItem(smh,  IDM_SM_START + uMenuId, g_lpMsg[IDS_MSG_SSTART-IDS_MSG_FIRST], FALSE, !fRunning);
-    appendMenuItem(smh,  IDM_SM_STOP + uMenuId, g_lpMsg[IDS_MSG_SSTOP-IDS_MSG_FIRST], FALSE, fRunning);
-    appendMenuItem(smh,  IDM_SM_RESTART + uMenuId, g_lpMsg[IDS_MSG_SRESTART-IDS_MSG_FIRST], FALSE, fRunning);
-
-    ZeroMemory(&mii, sizeof(MENUITEMINFO));
-    mii.cbSize = sizeof(MENUITEMINFO);
-    mii.fMask = MIIM_ID | MIIM_TYPE | MIIM_STATE | MIIM_SUBMENU | MIIM_CHECKMARKS;
-    mii.fType = MFT_STRING;
-    mii.wID = uMenuId;
-    mii.hbmpChecked = g_hBmpStart;
-    mii.hbmpUnchecked = g_hBmpStop;
-    mii.dwTypeData = szServiceName;
-    mii.hSubMenu = smh;
-    mii.fState = fRunning ? MFS_CHECKED : MFS_UNCHECKED;
-    InsertMenuItem(hMenu, IDM_SM_SERVICE + uMenuId, FALSE, &mii);
-}
-
-void ShowTryPopupMenu(HWND hWnd)
-{
-    /* create popup menu */
-    HMENU hMenu = CreatePopupMenu();
-    POINT pt;
-
-    if (hMenu)
-    {
-        appendMenuItem(hMenu, IDM_RESTORE, g_lpMsg[IDS_MSG_MNUSHOW-IDS_MSG_FIRST], TRUE, TRUE);
-        if (g_dwOSVersion >= OS_VERSION_WINNT)
-            appendMenuItem(hMenu, IDC_SMANAGER, g_lpMsg[IDS_MSG_MNUSERVICES-IDS_MSG_FIRST], FALSE, TRUE);
-        appendMenuItem(hMenu, 0, "", FALSE, TRUE);
-        appendMenuItem(hMenu, IDM_EXIT,  g_lpMsg[IDS_MSG_MNUEXIT-IDS_MSG_FIRST], FALSE, TRUE);
-
-        if (!SetForegroundWindow(hWnd))
-            SetForegroundWindow(NULL);
-        GetCursorPos(&pt);
-        TrackPopupMenu(hMenu, TPM_LEFTALIGN|TPM_RIGHTBUTTON, 
-                       pt.x, pt.y, 0, hWnd, NULL);
-        DestroyMenu(hMenu);
-    }
-}
-
-void ShowTryServicesMenu(HWND hWnd)
-{
-    /* create services list popup menu and submenus */
-    HMENU hMenu = CreatePopupMenu();
-    POINT pt;
-    int i = 0;
-
-    if (hMenu)
-    {
-        while (g_stServices[i].szServiceName != NULL)
-        {   
-            appendServiceMenu(hMenu, i, g_stServices[i].szDisplayName,
-                              g_stServices[i].dwPid != 0);               
-            ++i;
-        }
-        if (i)
-        {
-            if (!SetForegroundWindow(hWnd))
-                SetForegroundWindow(NULL);
-            GetCursorPos(&pt);
-            TrackPopupMenu(hMenu, TPM_LEFTALIGN|TPM_RIGHTBUTTON, 
-                           pt.x, pt.y, 0, hWnd, NULL);
-            DestroyMenu(hMenu);
-        }
-    }
-}
-
-BOOL CenterWindow(HWND hwndChild)
-{
-   RECT    rChild, rWorkArea;
-   int     wChild, hChild;
-   int     xNew, yNew;
-   BOOL    bResult;
-
-   /* Get the Height and Width of the child window */
-   GetWindowRect(hwndChild, &rChild);
-   wChild = rChild.right - rChild.left;
-   hChild = rChild.bottom - rChild.top;
-
-   /* Get the limits of the 'workarea' */
-   bResult = SystemParametersInfo(
-      SPI_GETWORKAREA,
-      sizeof(RECT),
-      &rWorkArea,
-      0);
-   if (!bResult) {
-      rWorkArea.left = rWorkArea.top = 0;
-      rWorkArea.right = GetSystemMetrics(SM_CXSCREEN);
-      rWorkArea.bottom = GetSystemMetrics(SM_CYSCREEN);
-   }
-
-   /* Calculate new X and Y position*/
-   xNew = (rWorkArea.right - wChild)/2;
-   yNew = (rWorkArea.bottom - hChild)/2;
-   return SetWindowPos (hwndChild, HWND_TOP, xNew, yNew, 0, 0, SWP_NOSIZE | SWP_SHOWWINDOW);
-}
-
-static void addListBoxItem(HWND hDlg, LPSTR lpStr, HBITMAP hBmp) 
-{ 
-    int nItem; 
- 
-    nItem = SendMessage(hDlg, LB_ADDSTRING, 0, (LPARAM)lpStr); 
-    SendMessage(hDlg, LB_SETITEMDATA, nItem, (LPARAM)hBmp); 
-} 
-
-static void addListBoxString(HWND hListBox, LPSTR lpStr)
-{
-    static int nItems = 0;
-    if (!g_bDlgServiceOn)
-        return;
-
-    ++nItems;
-    if ( nItems > MAX_LOADSTRING)
-    {
-        SendMessage(hListBox, LB_RESETCONTENT, 0, 0); 
-        nItems = 1;
-    }
-    ListBox_SetCurSel(hListBox,
-                      ListBox_AddString(hListBox, lpStr));
-
-}
-static DWORD WINAPI ConsoleOutputThread(LPVOID lpThreadParameter)
-{
-    static BYTE lpBuffer[MAX_PATH+1];
-    int nPtr = 0;
-    BYTE  ch;
-    DWORD dwReaded;
-
-    while (ReadFile(g_hpipeOutRead, &ch, 1, &dwReaded, NULL) == TRUE) 
-    {
-        if (dwReaded > 0) 
-        {
-            if (ch == '\n' || nPtr >= MAX_PATH) 
-            {
-                lpBuffer[nPtr] = '\0';
-                addListBoxString(g_hwndStdoutList, lpBuffer);
-                nPtr  = 0;
-            } 
-            else if (ch == '\t' && nPtr < (MAX_PATH - 4)) 
-            {
-                int i;
-                for (i = 0; i < 4; ++i)
-                    lpBuffer[nPtr++] = ' ';
-            }
-            else if (ch != '\r')
-                lpBuffer[nPtr++] = ch;
-        }
-    }
-    CloseHandle(g_hpipeInWrite);
-    CloseHandle(g_hpipeOutRead);
-    CloseHandle(g_hpipeStdError);
-    return 0;
-}
-
-
-DWORD WINAPI ConsoleWaitingThread(LPVOID lpThreadParameter)
-{
-    WaitForSingleObject(g_lpRedirectProc.hThread, INFINITE);
-    CloseHandle(g_lpRedirectProc.hThread);
-    MessageBeep(100);
-    g_bConsoleRun = FALSE;
-    SetCursor(g_hCursorArrow);
-    return 0;
-}
-
-
-BOOL RunRedirectedConsole(LPSTR szCmdLine)
-{
-    
-    DWORD  dwThreadId;
-    HANDLE hProc;
-    STARTUPINFO stInfo;
-    BOOL bResult;
-    ZeroMemory(&stInfo, sizeof(stInfo));
-    stInfo.cb = sizeof(stInfo);
-    stInfo.dwFlags = STARTF_USESTDHANDLES|STARTF_USESHOWWINDOW;
-    stInfo.wShowWindow = SW_HIDE;
-    
-    hProc = GetCurrentProcess();
-
-    if (!CreatePipe(&g_hpipeInRead, &g_hpipeInWrite, NULL, MAX_PATH))
-        ErrorMessage(NULL, TRUE);
-    if (!CreatePipe(&g_hpipeOutRead, &g_hpipeOutWrite, NULL, MAX_PATH*8))
-        ErrorMessage(NULL, TRUE);
-        
-    DuplicateHandle(hProc, g_hpipeInRead, hProc, &g_hpipeInRead, 0, TRUE, 
-                    DUPLICATE_CLOSE_SOURCE|DUPLICATE_SAME_ACCESS);
-    DuplicateHandle(hProc, g_hpipeOutWrite, hProc, &g_hpipeOutWrite, 0, TRUE, 
-                    DUPLICATE_CLOSE_SOURCE|DUPLICATE_SAME_ACCESS);
-    DuplicateHandle(hProc, g_hpipeOutWrite, hProc, &g_hpipeStdError, 0, TRUE, 
-                    DUPLICATE_SAME_ACCESS);
-    if (!g_hpipeInRead && !g_hpipeOutWrite && !g_hpipeStdError)
-        ErrorMessage(NULL, TRUE);
-
-    stInfo.hStdInput  = g_hpipeInRead;
-    stInfo.hStdOutput = g_hpipeOutWrite;
-    stInfo.hStdError  = g_hpipeStdError;
-
-    bResult = CreateProcess(NULL,
-        szCmdLine,
-        NULL,
-        NULL,
-        TRUE,
-        CREATE_SUSPENDED,
-        NULL,
-        NULL ,
-        &stInfo,
-        &g_lpRedirectProc);
-
-
-    CloseHandle(g_hpipeInRead);
-    CloseHandle(g_hpipeOutWrite);
-    CloseHandle(g_hpipeStdError);
-
-    if (!bResult)
-    {     
-        CloseHandle(g_hpipeInWrite);
-        CloseHandle(g_hpipeOutRead);
-        CloseHandle(g_hpipeStdError);
-        return FALSE;
-    }
-
-    CloseHandle(CreateThread(NULL, 0, ConsoleOutputThread, 0, 0, &dwThreadId));
-    ResumeThread(g_lpRedirectProc.hThread);
-    CloseHandle(CreateThread(NULL, 0, ConsoleWaitingThread, 0, 0, &dwThreadId));
-
-    return TRUE;
-}
-
-BOOL RunAndForgetConsole(LPSTR szCmdLine,
-                         BOOL  bRedirectConsole)
-{
-        
-    STARTUPINFO stInfo;
-    PROCESS_INFORMATION prInfo;
-    BOOL bResult;
-    
-    if (bRedirectConsole)
-        return RunRedirectedConsole(szCmdLine);
-
-    
-    ZeroMemory(&stInfo, sizeof(stInfo));
-    stInfo.cb = sizeof(stInfo);
-    stInfo.dwFlags = STARTF_USESHOWWINDOW;
-    stInfo.wShowWindow = SW_HIDE;
-
-    bResult = CreateProcess(NULL,
-        szCmdLine,
-        NULL,
-        NULL,
-        TRUE,
-        CREATE_NEW_CONSOLE,
-        NULL,
-        NULL ,
-        &stInfo,
-        &prInfo);
-
-    if (!bResult)
-    {     
-        return FALSE;
-    }
-    if (g_dwOSVersion == OS_VERSION_WIN9X) /* give some time to rescan the status */
-        Sleep(2000);
-    CloseHandle(prInfo.hThread);
-    CloseHandle(prInfo.hProcess);
-    return TRUE;
-}
-
-BOOL ApacheManageService(LPCSTR szServiceName, LPCSTR szImagePath, LPSTR szComputerName, DWORD dwCommand)
-{
-    
-    CHAR      szBuf[MAX_PATH];
-    CHAR      szMsg[MAX_PATH];
-    LPSTR     sPos;
-    BOOL      retValue;
-    BOOL      serviceFlag = TRUE;
-    SC_HANDLE schService;
-    SC_HANDLE schSCManager;    
-    SERVICE_STATUS schSStatus;
-    LPSTR     *args;
-    int       ticks;
-
-    if (g_dwOSVersion == OS_VERSION_WIN9X)
-    {
-        sPos = strstr(szImagePath, "-k start");
-        if (sPos)
-        {
-            lstrcpyn(szBuf, szImagePath, sPos - szImagePath);
-            switch (dwCommand)
-            {
-            case SERVICE_CONTROL_STOP:
-                lstrcat(szBuf, " -k shutdown -n ");
-                break;
-            case SERVICE_CONTROL_CONTINUE:
-                sprintf(szMsg, g_lpMsg[IDS_MSG_SRVSTART-IDS_MSG_FIRST], szServiceName);
-                addListBoxString(g_hwndStdoutList, szMsg);
-                lstrcat(szBuf, " -k start -n ");
-                serviceFlag = FALSE;
-                break;
-            case SERVICE_APACHE_RESTART:
-                lstrcat(szBuf, " -k restart -n ");
-                break;
-            default:
-                return FALSE;
-            }
-            lstrcat(szBuf, szServiceName);
-        }
-        else
-            return FALSE;
-        g_bConsoleRun = TRUE;
-        SetCursor(g_hCursorHourglass);
-        if (!RunAndForgetConsole(szBuf, serviceFlag))
-        {
-            ErrorMessage(NULL, FALSE);
-            g_bConsoleRun = FALSE;
-            SetCursor(g_hCursorArrow);
-            return FALSE;
-        }
-        else if (!serviceFlag)
-        {
-            sprintf(szMsg, g_lpMsg[IDS_MSG_SRVSTARTED-IDS_MSG_FIRST], szServiceName);
-            addListBoxString(g_hwndStdoutList, szMsg);
-            g_bConsoleRun = FALSE;
-            SetCursor(g_hCursorArrow);
-            return TRUE;
-        }
-    }
-    else
-    {
-        /* Apache 2.0 uses '-k runservice' as cmdline parameter */
-        sPos = strstr(szImagePath, "--ntservice");
-        if (!sPos)
-        {
-            sPos = strstr(szImagePath, "-k runservice");
-            serviceFlag = FALSE;
-        }
-        if (sPos)
-            lstrcpyn(szBuf, szImagePath, sPos - szImagePath);
-        else
-            return FALSE;
-        schSCManager = OpenSCManager(
-            szComputerName,
-            NULL,
-            SC_MANAGER_ALL_ACCESS
-           );
-        if (!schSCManager)
-            return FALSE;
-        
-        schService = OpenService(schSCManager, szServiceName, SERVICE_ALL_ACCESS);
-        if (schService != NULL)
-        {
-            retValue = FALSE;
-            g_bConsoleRun = TRUE;
-            SetCursor(g_hCursorHourglass);
-            switch (dwCommand)
-            {
-                case SERVICE_CONTROL_STOP:
-                    sprintf(szMsg, g_lpMsg[IDS_MSG_SRVSTOP-IDS_MSG_FIRST], szServiceName);
-                    addListBoxString(g_hwndStdoutList, szMsg);
-                    if (ControlService(schService, SERVICE_CONTROL_STOP, &schSStatus)) 
-                    {
-                        Sleep(1000);
-                        while (QueryServiceStatus(schService, &schSStatus)) 
-                        {
-                            if (schSStatus.dwCurrentState == SERVICE_STOP_PENDING)
-                                Sleep(1000);
-                            else
-                                break;
-                        }
-                    }
-                    if (QueryServiceStatus(schService, &schSStatus))
-                    {
-                        if (schSStatus.dwCurrentState == SERVICE_STOPPED)
-                        {
-                            retValue = TRUE;
-                            sprintf(szMsg, g_lpMsg[IDS_MSG_SRVSTOPPED-IDS_MSG_FIRST], szServiceName);
-                            addListBoxString(g_hwndStdoutList, szMsg);
-                        }
-                    }
-                break;                
-                case SERVICE_CONTROL_CONTINUE:
-                    sprintf(szMsg, g_lpMsg[IDS_MSG_SRVSTART-IDS_MSG_FIRST], szServiceName);
-                    addListBoxString(g_hwndStdoutList, szMsg);
-                    args = (char **)malloc(3 * sizeof(char*));
-                    args[0] = szBuf;
-                    if (serviceFlag)
-                        args[1] = "--ntservice";
-                    else
-                    {
-                        args[1] = "-k";
-                        args[2] = "runservice";
-                    }
-                    if (StartService(schService, serviceFlag ? 2 : 3, args)) 
-                    {
-                        Sleep(1000);
-                        while (QueryServiceStatus(schService, &schSStatus)) 
-                        {
-                            if (schSStatus.dwCurrentState == SERVICE_START_PENDING)
-                                Sleep(1000);
-                            else
-                                break;
-                        }
-                    }
-                    if (QueryServiceStatus(schService, &schSStatus))
-                    {
-                        if (schSStatus.dwCurrentState == SERVICE_RUNNING)
-                        {
-                            retValue = TRUE;
-                            sprintf(szMsg, g_lpMsg[IDS_MSG_SRVSTARTED-IDS_MSG_FIRST], szServiceName);
-                            addListBoxString(g_hwndStdoutList, szMsg);
-                        }
-                    }
-                    /* is this OK to do? */
-                    free(args);
-                break;                
-                case SERVICE_APACHE_RESTART:
-                    sprintf(szMsg, g_lpMsg[IDS_MSG_SRVRESTART-IDS_MSG_FIRST], szServiceName);
-                    addListBoxString(g_hwndStdoutList, szMsg);
-                    if (ControlService(schService, SERVICE_APACHE_RESTART, &schSStatus)) 
-                    {
-                        ticks = 60;
-                        while (schSStatus.dwCurrentState == SERVICE_START_PENDING) 
-                        {
-                            Sleep(1000);
-                            if (!QueryServiceStatus(schService, &schSStatus))
-                            {
-                                CloseServiceHandle(schService);
-                                CloseServiceHandle(schSCManager);
-                                g_bConsoleRun = FALSE;
-                                SetCursor(g_hCursorArrow);
-                                return FALSE;
-                            }
-                            if (!--ticks)
-                                break;
-                        }
-                    }
-                    if (schSStatus.dwCurrentState == SERVICE_RUNNING)
-                    {
-                        retValue = TRUE;
-                        sprintf(szMsg, g_lpMsg[IDS_MSG_SRVRESTARTED-IDS_MSG_FIRST], szServiceName);
-                        addListBoxString(g_hwndStdoutList, szMsg);
-                    }
-                break;                
-            }
-            CloseServiceHandle(schService);
-            CloseServiceHandle(schSCManager);
-            if (!retValue)
-                ErrorMessage(g_lpMsg[IDS_MSG_SRVFAILED-IDS_MSG_FIRST], FALSE);
-            g_bConsoleRun = FALSE;
-            SetCursor(g_hCursorArrow);
-            return retValue;
-            
-        }
-        else
-            g_bRescanServices = TRUE;
-        
-        CloseServiceHandle(schSCManager);
-        return FALSE;
-    }
-    
-    return FALSE;
-}
-
-BOOL IsServiceRunning(LPCSTR szServiceName, LPCSTR szComputerName, LPDWORD lpdwPid)
-{
-
-    DWORD                   dwPid;
-    HWND                    hWnd;
-    SC_HANDLE               schService;
-    SC_HANDLE               schSCManager;    
-    SERVICE_STATUS          schSStatus;
-
-    if (g_dwOSVersion == OS_VERSION_WIN9X)
-    {
-        hWnd = FindWindow("ApacheWin95ServiceMonitor", szServiceName);
-        if (hWnd && GetWindowThreadProcessId(hWnd, &dwPid))
-        {
-            *lpdwPid = 1;
-            return TRUE;
-        }
-        else
-            return FALSE;
-    }
-    else
-    {
-
-        dwPid = 0;
-        schSCManager = OpenSCManager(
-                            szComputerName,
-                            NULL,
-                            SC_MANAGER_ALL_ACCESS
-                           );
-        if (!schSCManager)
-            return FALSE;
-
-        schService = OpenService(schSCManager, szServiceName, SERVICE_QUERY_STATUS);
-        if (schService != NULL)
-        {
-            if (QueryServiceStatus(schService, &schSStatus))
-            {
-                
-                dwPid = schSStatus.dwCurrentState;
-                if (lpdwPid)
-                    *lpdwPid = 1;
-            }
-            CloseServiceHandle(schService);
-            CloseServiceHandle(schSCManager);
-            return dwPid == SERVICE_RUNNING ? TRUE : FALSE;
-        }
-        else
-            g_bRescanServices = TRUE;
-
-        CloseServiceHandle(schSCManager);
-        return FALSE;
-
-    }
-
-    return FALSE;
-}
-
-BOOL FindRunningServices(void)
-{
-    int i = 0;
-    DWORD dwPid;
-    BOOL rv = FALSE;
-    while (g_stServices[i].szServiceName != NULL)
-    {    
-        if (!IsServiceRunning(g_stServices[i].szServiceName, g_stServices[i].szComputerName, &dwPid))
-            dwPid = 0;
-        if (g_stServices[i].dwPid != dwPid)
-            rv = TRUE;
-        g_stServices[i].dwPid = dwPid;
-        ++i;
-    }                        
-    return rv;
-}
-
-BOOL GetApacheServicesStatus()
-{
-
-    CHAR    szKey[MAX_PATH];
-    CHAR    achKey[MAX_PATH];
-    CHAR    szImagePath[MAX_PATH];
-    CHAR    szBuf[MAX_PATH];
-    CHAR    szTmp[MAX_PATH];
-
-    HKEY    hKey, hSubKey, hKeyRemote;
-    DWORD   retCode, rv, dwKeyType;
-    DWORD   dwBufLen = MAX_PATH;
-    int     i, stPos = 0;
-    int     computers = 0;
-
-    g_bRescanServices = FALSE;
-
-    
-    am_ClearServicesSt();
-    while (g_stComputers[computers].szComputerName != NULL) {
-        hKeyRemote = g_stComputers[computers].hRegistry;
-        retCode = RegOpenKeyEx(hKeyRemote,
-                                "System\\CurrentControlSet\\Services\\",
-                                0, KEY_READ, &hKey);
-        if (retCode != ERROR_SUCCESS)
-        {
-            ErrorMessage(NULL, FALSE);
-            return FALSE;
-        }
-        for (i = 0, retCode = ERROR_SUCCESS; retCode == ERROR_SUCCESS; i++)
-        {
-
-            retCode = RegEnumKey(hKey, i, achKey, MAX_PATH);
-            if (retCode == ERROR_SUCCESS)
-            {
-                lstrcpy(szKey, "System\\CurrentControlSet\\Services\\");
-                lstrcat(szKey, achKey);
-
-                if (RegOpenKeyEx(hKeyRemote, szKey, 0, 
-                    KEY_QUERY_VALUE, &hSubKey) == ERROR_SUCCESS)
-                {
-                    dwBufLen = MAX_PATH;
-                    rv = RegQueryValueEx(hSubKey, "ImagePath", NULL,
-                                          &dwKeyType, szImagePath, &dwBufLen);
-
-                    if (rv == ERROR_SUCCESS && (dwKeyType == REG_SZ  || dwKeyType == REG_EXPAND_SZ) && dwBufLen)
-                    {
-                        lstrcpy(szBuf, szImagePath);
-                        CharLower(szBuf);
-                        /* the service name could be Apache*.exe */
-                        if (strstr(szBuf, "\\apache") != NULL && strstr(szBuf, ".exe") &&
-                        (strstr(szBuf, "--ntservice") != NULL || strstr(szBuf, "-k ") !=NULL))
-                        {
-                            g_stServices[stPos].szServiceName = strdup(achKey);
-                            g_stServices[stPos].szImagePath = strdup(szImagePath);
-                            g_stServices[stPos].szComputerName = strdup(g_stComputers[computers].szComputerName);
-                            dwBufLen = MAX_PATH;
-                            if (RegQueryValueEx(hSubKey, "Description", NULL,
-                                          &dwKeyType, szBuf, &dwBufLen) == ERROR_SUCCESS)
-                                g_stServices[stPos].szDescription = strdup(szBuf);
-
-                            dwBufLen = MAX_PATH;
-                            if (RegQueryValueEx(hSubKey, "DisplayName", NULL,
-                                          &dwKeyType, szBuf, &dwBufLen) == ERROR_SUCCESS) {
-                                if (strcmp(g_stComputers[computers].szComputerName, g_szLocalHost) != 0) { 
-                                    strcpy(szTmp, g_stComputers[computers].szComputerName + 2);
-                                    strcat(szTmp, "@");
-                                    strcat(szTmp, szBuf);
-                                }
-                                else
-                                    strcpy( szTmp, szBuf);
-                                g_stServices[stPos].szDisplayName= strdup(szTmp);
-
-                            }
-                            ++stPos;
-                            if (stPos >= MAX_APACHE_SERVICES)
-                                retCode = !ERROR_SUCCESS;
-                        }
-                    }
-                    RegCloseKey(hSubKey);
-                }
-            }
-        }
-        ++computers;
-    }
-    RegCloseKey(hKey);
-    FindRunningServices();
-    return TRUE;
-}
-
-LRESULT CALLBACK ConnectDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
-{
-    CHAR szCmp[MAX_COMPUTERNAME_LENGTH+4];
-    switch (message) 
-    { 
- 
-        case WM_INITDIALOG: 
-            ShowWindow(hDlg, SW_HIDE);
-            g_hwndConnectDlg = hDlg;
-            CenterWindow(hDlg);
-            ShowWindow(hDlg, SW_SHOW);
-            SetFocus(GetDlgItem(hDlg, IDC_COMPUTER));
-            return TRUE;
-        case WM_COMMAND: 
-            switch (LOWORD(wParam)) 
-            { 
-                case IDOK: 
-                    ZeroMemory(szCmp, MAX_COMPUTERNAME_LENGTH+4);
-                    strcpy(szCmp, "\\\\");
-                    SendMessage(GetDlgItem(hDlg, IDC_COMPUTER), WM_GETTEXT, 
-                        (WPARAM) MAX_COMPUTERNAME_LENGTH, (LPARAM) szCmp+2); 
-
-                    strupr(szCmp);
-                    if (strlen(szCmp) < 3) {
-                        EndDialog(hDlg, TRUE); 
-                        return TRUE;
-                    }
-                    am_ConnectComputer(szCmp);
-                    SendMessage(g_hwndMain, WM_TIMER, WM_TIMER_RESCAN, 0);                        
-                case IDCANCEL:
-                    EndDialog(hDlg, TRUE); 
-                    return TRUE; 
-                case IDC_LBROWSE:
-                    {
-                        BROWSEINFO      bi;
-                        ITEMIDLIST      *il;
-                        LPMALLOC        pMalloc;
-                        memset(&bi, 0, sizeof(BROWSEINFO));
-                        SHGetSpecialFolderLocation(hDlg, CSIDL_NETWORK, &il);
-
-                        bi.lpszTitle      = "ApacheMonitor :\nSelect Network Computer!";
-                        bi.pszDisplayName = szCmp;
-                        bi.hwndOwner =      hDlg;
-                        bi.ulFlags =        BIF_BROWSEFORCOMPUTER;
-                        bi.lpfn =           NULL;
-                        bi.lParam =         0;
-                        bi.iImage =         0;
-                        bi.pidlRoot =       il;
-                        
-                        if (SHBrowseForFolder(&bi) != NULL) {                     
-                                SendMessage(GetDlgItem(hDlg, IDC_COMPUTER), WM_SETTEXT, 
-                                    (WPARAM) NULL, (LPARAM) szCmp); 
-                        }
-                        if (SHGetMalloc(&pMalloc)) {
-                            pMalloc->lpVtbl->Free(pMalloc, il);
-                            pMalloc->lpVtbl->Release(pMalloc);
-                        }
-                    }
-                    return TRUE;
-            }
-        break;
-        case WM_QUIT:
-        case WM_CLOSE: 
-            EndDialog(hDlg, TRUE);
-            return TRUE;
-        default:
-            return FALSE;
-    }
-    return FALSE;
-
-}
-
-LRESULT CALLBACK ServiceDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
-{
-
-    CHAR        szBuf[MAX_PATH]; 
-    HWND        hListBox;
-    static      HWND  hStatusBar; 
-    TEXTMETRIC  tm; 
-    int         i, y; 
-    HDC         hdcMem; 
-    RECT        rcBitmap; 
-    UINT        nItem;
-    LPMEASUREITEMSTRUCT lpmis; 
-    LPDRAWITEMSTRUCT    lpdis; 
-
-    ZeroMemory(szBuf, MAX_PATH);
-    switch (message) 
-    { 
- 
-        case WM_INITDIALOG: 
-            ShowWindow(hDlg, SW_HIDE);
-            g_hwndServiceDlg = hDlg;
-            SetWindowText(hDlg, g_szTitle);
-            Button_Enable(GetDlgItem(hDlg, IDC_SSTART), FALSE);
-            Button_Enable(GetDlgItem(hDlg, IDC_SSTOP), FALSE);
-            Button_Enable(GetDlgItem(hDlg, IDC_SRESTART), FALSE);
-            Button_Enable(GetDlgItem(hDlg, IDC_SDISCONN), FALSE);
-            SetWindowText(GetDlgItem(hDlg, IDC_SSTART), g_lpMsg[IDS_MSG_SSTART-IDS_MSG_FIRST]);
-            SetWindowText(GetDlgItem(hDlg, IDC_SSTOP), g_lpMsg[IDS_MSG_SSTOP-IDS_MSG_FIRST]);
-            SetWindowText(GetDlgItem(hDlg, IDC_SRESTART), g_lpMsg[IDS_MSG_SRESTART-IDS_MSG_FIRST]);
-            SetWindowText(GetDlgItem(hDlg, IDC_SMANAGER), g_lpMsg[IDS_MSG_SERVICES-IDS_MSG_FIRST]);
-            SetWindowText(GetDlgItem(hDlg, IDC_SCONNECT), g_lpMsg[IDS_MSG_CONNECT-IDS_MSG_FIRST]);
-            SetWindowText(GetDlgItem(hDlg, IDC_SEXIT), g_lpMsg[IDS_MSG_MNUEXIT-IDS_MSG_FIRST]);
-            if (g_dwOSVersion < OS_VERSION_WINNT)
-            {
-                ShowWindow(GetDlgItem(hDlg, IDC_SMANAGER), SW_HIDE);
-                ShowWindow(GetDlgItem(hDlg, IDC_SCONNECT), SW_HIDE);
-                ShowWindow(GetDlgItem(hDlg, IDC_SDISCONN), SW_HIDE);
-            }
-            hListBox = GetDlgItem(hDlg, IDL_SERVICES); 
-            g_hwndStdoutList = GetDlgItem(hDlg, IDL_STDOUT);
-            hStatusBar = CreateStatusWindow(0x0800 /* SBT_TOOLTIPS */
-                                          | WS_CHILD | WS_VISIBLE,
-                                            "", hDlg, IDC_STATBAR);            
-            if (GetApacheServicesStatus())
-            {
-                i = 0;
-                while (g_stServices[i].szServiceName != NULL)
-                {    
-                    addListBoxItem(hListBox, g_stServices[i].szDisplayName,
-                        g_stServices[i].dwPid == 0 ? g_hBmpStop : g_hBmpStart);
-                    ++i;
-                }
-            }
-            CenterWindow(hDlg);
-            ShowWindow(hDlg, SW_SHOW);
-            SetFocus(hListBox); 
-            SendMessage(hListBox, LB_SETCURSEL, 0, 0); 
-            return TRUE;
-        break;
-        case WM_MANAGEMESSAGE:
-            ApacheManageService(g_stServices[LOWORD(wParam)].szServiceName,
-                        g_stServices[LOWORD(wParam)].szImagePath,
-                        g_stServices[LOWORD(wParam)].szComputerName,
-                        LOWORD(lParam));
-    
-            return TRUE;
-        break;
-        case WM_UPDATEMESSAGE:
-            hListBox = GetDlgItem(hDlg, IDL_SERVICES); 
-            SendMessage(hListBox, LB_RESETCONTENT, 0, 0); 
-            SendMessage(hStatusBar, SB_SETTEXT, 0, (LPARAM)"");
-            Button_Enable(GetDlgItem(hDlg, IDC_SSTART), FALSE);
-            Button_Enable(GetDlgItem(hDlg, IDC_SSTOP), FALSE);
-            Button_Enable(GetDlgItem(hDlg, IDC_SRESTART), FALSE);
-            Button_Enable(GetDlgItem(hDlg, IDC_SDISCONN), FALSE);
-            i = 0;
-            while (g_stServices[i].szServiceName != NULL)
-            {    
-                addListBoxItem(hListBox, g_stServices[i].szDisplayName, 
-                    g_stServices[i].dwPid == 0 ? g_hBmpStop : g_hBmpStart);
-                ++i;
-            }
-            SendMessage(hListBox, LB_SETCURSEL, 0, 0); 
-            /* Dirty hack to bring the window to the foreground */
-            SetWindowPos(hDlg, HWND_TOPMOST, 0, 0, 0, 0,
-                                    SWP_NOSIZE | SWP_NOMOVE | SWP_SHOWWINDOW);
-            SetWindowPos(hDlg, HWND_NOTOPMOST, 0, 0, 0, 0,
-                                    SWP_NOSIZE | SWP_NOMOVE | SWP_SHOWWINDOW);
-            SetFocus(hListBox); 
-            return TRUE;
-        break;
-        case WM_MEASUREITEM: 
- 
-            lpmis = (LPMEASUREITEMSTRUCT) lParam; 
-            lpmis->itemHeight = YBITMAP; 
-            return TRUE; 
-        case WM_SETCURSOR:
-            if (g_bConsoleRun)
-                SetCursor(g_hCursorHourglass);
-            else
-                SetCursor(g_hCursorArrow);
-            return TRUE;
-        case WM_DRAWITEM: 
-            lpdis = (LPDRAWITEMSTRUCT) lParam; 
-            if (lpdis->itemID == -1) 
-            { 
-                break; 
-            } 
-            switch (lpdis->itemAction) 
-            { 
-                case ODA_SELECT: 
-                case ODA_DRAWENTIRE: 
-                    g_hBmpPicture = (HBITMAP)SendMessage(lpdis->hwndItem, 
-                        LB_GETITEMDATA, lpdis->itemID, (LPARAM) 0); 
-                        
-                    hdcMem = CreateCompatibleDC(lpdis->hDC); 
-                    g_hBmpOld = SelectObject(hdcMem, g_hBmpPicture); 
- 
-                    BitBlt(lpdis->hDC, 
-                        lpdis->rcItem.left, lpdis->rcItem.top, 
-                        lpdis->rcItem.right - lpdis->rcItem.left, 
-                        lpdis->rcItem.bottom - lpdis->rcItem.top, 
-                        hdcMem, 0, 0, SRCCOPY); 
-                    SendMessage(lpdis->hwndItem, LB_GETTEXT, 
-                        lpdis->itemID, (LPARAM) szBuf); 
- 
-                    GetTextMetrics(lpdis->hDC, &tm);  
-                    y = (lpdis->rcItem.bottom + lpdis->rcItem.top - 
-                        tm.tmHeight) / 2; 
-  
-                    SelectObject(hdcMem, g_hBmpOld); 
-                    DeleteDC(hdcMem); 
- 
-                    rcBitmap.left = lpdis->rcItem.left + XBITMAP + 2; 
-                    rcBitmap.top = lpdis->rcItem.top; 
-                    rcBitmap.right = lpdis->rcItem.right; 
-                    rcBitmap.bottom = lpdis->rcItem.top + YBITMAP; 
-
-                    if (lpdis->itemState & ODS_SELECTED) 
-                    { 
-                        if (g_hBmpPicture == g_hBmpStop)
-                        {
-                            Button_Enable(GetDlgItem(hDlg, IDC_SSTART), TRUE);
-                            Button_Enable(GetDlgItem(hDlg, IDC_SSTOP), FALSE);
-                            Button_Enable(GetDlgItem(hDlg, IDC_SRESTART), FALSE);
-                        }
-                        else if (g_hBmpPicture == g_hBmpStart) 
-                        {
-                            Button_Enable(GetDlgItem(hDlg, IDC_SSTART), FALSE);
-                            Button_Enable(GetDlgItem(hDlg, IDC_SSTOP), TRUE);
-                            Button_Enable(GetDlgItem(hDlg, IDC_SRESTART), TRUE);
-                        }
-                        else {
-                            Button_Enable(GetDlgItem(hDlg, IDC_SSTART), FALSE);
-                            Button_Enable(GetDlgItem(hDlg, IDC_SSTOP), FALSE);
-                            Button_Enable(GetDlgItem(hDlg, IDC_SRESTART), FALSE);
-                        }
-                        if (strcmp(g_stServices[lpdis->itemID].szComputerName, g_szLocalHost) == 0)
-                            Button_Enable(GetDlgItem(hDlg, IDC_SDISCONN), FALSE);
-                        else
-                            Button_Enable(GetDlgItem(hDlg, IDC_SDISCONN), TRUE);
-
-                        if (g_stServices[lpdis->itemID].szDescription)
-                            SendMessage(hStatusBar, SB_SETTEXT, 0, 
-                                        (LPARAM)g_stServices[lpdis->itemID].szDescription);
-                        else
-                            SendMessage(hStatusBar, SB_SETTEXT, 0, (LPARAM)"");
-                        
-                        SetTextColor(lpdis->hDC, GetSysColor(COLOR_HIGHLIGHTTEXT)); 
-                        SetBkColor(lpdis->hDC, GetSysColor(COLOR_HIGHLIGHT)); 
-                        FillRect(lpdis->hDC, &rcBitmap, (HBRUSH)(COLOR_HIGHLIGHTTEXT)); 
-                    } 
-                    else
-                    {
-                       SetTextColor(lpdis->hDC, GetSysColor(COLOR_MENUTEXT)); 
-                       SetBkColor(lpdis->hDC, GetSysColor(COLOR_WINDOW)); 
-                       FillRect(lpdis->hDC, &rcBitmap, (HBRUSH)(COLOR_WINDOW+1)); 
-                    }
-                    TextOut(lpdis->hDC, 
-                        XBITMAP + 6, 
-                        y, 
-                        szBuf, 
-                        strlen(szBuf)); 
-                    break; 
- 
-                case ODA_FOCUS: 
-                    break; 
-            } 
-            return TRUE;  
-        case WM_COMMAND: 
-            switch (LOWORD(wParam)) 
-            { 
-                case IDL_SERVICES:
-                    switch (HIWORD(wParam))
-                    {
-                        case LBN_DBLCLK:
-                            /* if started then stop, if stopped then start the service */
-                            hListBox = GetDlgItem(hDlg, IDL_SERVICES); 
-                            nItem = SendMessage(hListBox, LB_GETCURSEL, 0, 0); 
-                            if (nItem != LB_ERR)
-                            {
-                                g_hBmpPicture = (HBITMAP)SendMessage(hListBox, LB_GETITEMDATA,
-                                                               nItem, (LPARAM) 0); 
-                                if (g_hBmpPicture == g_hBmpStop)
-                                {
-                                    SendMessage(hDlg, WM_MANAGEMESSAGE, nItem, SERVICE_CONTROL_CONTINUE);                                    
-                                }
-                                else
-                                    SendMessage(hDlg, WM_MANAGEMESSAGE, nItem, SERVICE_CONTROL_STOP);                                    
-
-                            }
-                            return TRUE;
-                        break;
-                     }
-                break;
-                case IDOK: 
-                    EndDialog(hDlg, TRUE); 
-                    return TRUE; 
-                case IDC_SSTART: 
-                    Button_Enable(GetDlgItem(hDlg, IDC_SSTART), FALSE);
-                    hListBox = GetDlgItem(hDlg, IDL_SERVICES); 
-                    nItem = SendMessage(hListBox, LB_GETCURSEL, 0, 0); 
-                    if (nItem != LB_ERR)
-                    {
-                        SendMessage(hDlg, WM_MANAGEMESSAGE, nItem, SERVICE_CONTROL_CONTINUE);                                    
-                    }
-                    Button_Enable(GetDlgItem(hDlg, IDC_SSTART), TRUE);
-                    return TRUE;
-                case IDC_SSTOP: 
-                    Button_Enable(GetDlgItem(hDlg, IDC_SSTOP), FALSE);
-                    hListBox = GetDlgItem(hDlg, IDL_SERVICES); 
-                    nItem = SendMessage(hListBox, LB_GETCURSEL, 0, 0); 
-                    if (nItem != LB_ERR)
-                    {
-                        SendMessage(hDlg, WM_MANAGEMESSAGE, nItem, SERVICE_CONTROL_STOP);                                    
-                    }
-                    Button_Enable(GetDlgItem(hDlg, IDC_SSTOP), TRUE);
-                    return TRUE;
-                case IDC_SRESTART: 
-                    Button_Enable(GetDlgItem(hDlg, IDC_SRESTART), FALSE);
-                    hListBox = GetDlgItem(hDlg, IDL_SERVICES); 
-                    nItem = SendMessage(hListBox, LB_GETCURSEL, 0, 0); 
-                    if (nItem != LB_ERR)
-                    {
-                        SendMessage(hDlg, WM_MANAGEMESSAGE, nItem, SERVICE_APACHE_RESTART);                                    
-                    }
-                    Button_Enable(GetDlgItem(hDlg, IDC_SRESTART), TRUE);
-                    return TRUE;
-                case IDC_SMANAGER: 
-                    if (g_dwOSVersion >= OS_VERSION_WIN2K)
-                        ShellExecute(hDlg, "open", "services.msc", "/s", NULL, SW_NORMAL);
-                    else
-                        WinExec("Control.exe SrvMgr.cpl Services", SW_NORMAL);
-                    return TRUE;
-                case IDC_SEXIT: 
-                    EndDialog( hDlg, TRUE);
-                    SendMessage( g_hwndMain, WM_COMMAND, (WPARAM)IDM_EXIT, 0);
-                    return TRUE;
-                case IDC_SCONNECT: 
-                    DialogBox(g_hInstance, MAKEINTRESOURCE(IDD_DLGCONNECT),
-                                    hDlg, (DLGPROC)ConnectDlgProc);
-                    return TRUE;
-                case IDC_SDISCONN: 
-                    hListBox = GetDlgItem(hDlg, IDL_SERVICES); 
-                    nItem = SendMessage(hListBox, LB_GETCURSEL, 0, 0); 
-                    if (nItem != LB_ERR) {
-                        am_DisconnectComputer(g_stServices[nItem].szComputerName);
-                        SendMessage(g_hwndMain, WM_TIMER, WM_TIMER_RESCAN, 0);                        
-                    }
-                    return TRUE;
-             }
-        break;
-        case WM_SIZE:
-            switch (LOWORD(wParam)) 
-            { 
-                case SIZE_MINIMIZED:
-                    EndDialog(hDlg, TRUE); 
-                    return TRUE; 
-                break;
-            }
-        break;
-        case WM_QUIT:
-        case WM_CLOSE: 
-            EndDialog(hDlg, TRUE);
-            return TRUE;
-        default:
-            return FALSE;
-    }
-    return FALSE;
-}
-
-
-LRESULT CALLBACK WndProc(HWND hWnd, UINT message,
-                          WPARAM wParam, LPARAM lParam)
-{
-    if (message == g_bUiTaskbarCreated)
-    {
-        /* restore the tray icon on shell restart */
-        ShowNotifyIcon(hWnd, NIM_ADD);
-        return DefWindowProc(hWnd, message, wParam, lParam);
-    }
-    switch (message) 
-    {
-        case WM_CREATE:
-            GetApacheServicesStatus();
-            ShowNotifyIcon(hWnd, NIM_ADD);
-            SetTimer(hWnd, WM_TIMER_REFRESH, REFRESH_TIME, NULL);
-            SetTimer(hWnd, WM_TIMER_RESCAN,  RESCAN_TIME, NULL);
-            break;
-        case WM_TIMER:
-            switch (wParam)
-            {
-                case WM_TIMER_RESCAN:
-                {
-                    int nPrev = 0, nNew = 0;
-                    EnterCriticalSection(&g_stcSection);
-                    if (FindRunningServices() || g_bRescanServices)
-                    {
-                        ShowNotifyIcon(hWnd, NIM_MODIFY);
-                        if (g_hwndServiceDlg)
-                            PostMessage(g_hwndServiceDlg, WM_UPDATEMESSAGE, 0, 0);
-                    }
-                    /* check if services list changed */
-                    while (g_stServices[nPrev].szServiceName != NULL)
-                        ++nPrev;
-                    GetApacheServicesStatus();
-                    while (g_stServices[nNew].szServiceName != NULL)
-                        ++nNew;
-                    if (nPrev != nNew)
-                    {
-                        ShowNotifyIcon(hWnd, NIM_MODIFY);
-                        if (g_hwndServiceDlg)
-                            PostMessage(g_hwndServiceDlg, WM_UPDATEMESSAGE, 0, 0);
-                    }
-                    LeaveCriticalSection(&g_stcSection);
-                break;
-                }
-                case WM_TIMER_REFRESH:
-                {
-                    int nPrev = 0, nNew = 0;
-                    EnterCriticalSection(&g_stcSection);
-                    if (g_bRescanServices)
-                    {       
-                        GetApacheServicesStatus();
-                        ShowNotifyIcon(hWnd, NIM_MODIFY);
-                        if (g_hwndServiceDlg)
-                            PostMessage(g_hwndServiceDlg, WM_UPDATEMESSAGE, 0, 0);
-                    }
-                    else if (FindRunningServices())
-                    {
-                        ShowNotifyIcon(hWnd, NIM_MODIFY);
-                        if (g_hwndServiceDlg)
-                            PostMessage(g_hwndServiceDlg, WM_UPDATEMESSAGE, 0, 0);
-                    }
-                    LeaveCriticalSection(&g_stcSection);
-                    break;
-                }
-            }
-            break;
-        case WM_QUIT:
-            ShowNotifyIcon(hWnd, NIM_DELETE);
-            break;
-        case WM_TRAYMESSAGE:
-            switch(lParam)
-            {
-                case WM_LBUTTONDBLCLK:
-                   if (!g_bDlgServiceOn)
-                   {
-                       g_bDlgServiceOn = TRUE;
-                       DialogBox(g_hInstance, MAKEINTRESOURCE(IDD_DLGSERVICES),
-                             hWnd, (DLGPROC)ServiceDlgProc);
-                       g_bDlgServiceOn = FALSE;
-                       g_hwndServiceDlg = NULL;
-                   }
-                   else if (IsWindow(g_hwndServiceDlg))
-                   {
-                       /* Dirty hack to bring the window to the foreground */
-                       SetWindowPos(g_hwndServiceDlg, HWND_TOPMOST, 0, 0, 0, 0,
-                                    SWP_NOSIZE | SWP_NOMOVE | SWP_SHOWWINDOW);
-                       SetWindowPos(g_hwndServiceDlg, HWND_NOTOPMOST, 0, 0, 0, 0,
-                                    SWP_NOSIZE | SWP_NOMOVE | SWP_SHOWWINDOW);
-                       SetFocus(g_hwndServiceDlg);
-                   }
-                break;
-                case WM_LBUTTONUP:
-                    ShowTryServicesMenu(hWnd);
-                break;    
-                case WM_RBUTTONUP:
-                    ShowTryPopupMenu(hWnd);
-                break;    
-            }
-            break;
-        case WM_COMMAND:
-            if ((LOWORD(wParam) & IDM_SM_START) == IDM_SM_START)
-            {
-                ApacheManageService(g_stServices[LOWORD(wParam) - IDM_SM_START].szServiceName,
-                                    g_stServices[LOWORD(wParam) - IDM_SM_START].szImagePath,
-                                    g_stServices[LOWORD(wParam) - IDM_SM_START].szComputerName,
-                                    SERVICE_CONTROL_CONTINUE);                
-                return TRUE;
-            }
-            else if ((LOWORD(wParam) & IDM_SM_STOP) == IDM_SM_STOP)
-            {
-                ApacheManageService(g_stServices[LOWORD(wParam) - IDM_SM_STOP].szServiceName,
-                                    g_stServices[LOWORD(wParam) - IDM_SM_STOP].szImagePath,
-                                    g_stServices[LOWORD(wParam) - IDM_SM_START].szComputerName,
-                                    SERVICE_CONTROL_STOP);                
-                return TRUE;
-            }
-            else if ((LOWORD(wParam) & IDM_SM_RESTART) == IDM_SM_RESTART)
-            {
-                ApacheManageService(g_stServices[LOWORD(wParam) - IDM_SM_RESTART].szServiceName,
-                                    g_stServices[LOWORD(wParam) - IDM_SM_RESTART].szImagePath,
-                                    g_stServices[LOWORD(wParam) - IDM_SM_START].szComputerName,
-                                    SERVICE_APACHE_RESTART);                
-                return TRUE;
-            }
-            switch (LOWORD(wParam))
-            {
-               case IDM_RESTORE:
-                   if (!g_bDlgServiceOn)
-                   {
-                       g_bDlgServiceOn = TRUE;
-                       DialogBox(g_hInstance, MAKEINTRESOURCE(IDD_DLGSERVICES),
-                             hWnd, (DLGPROC)ServiceDlgProc);
-                       g_bDlgServiceOn = FALSE;
-                       g_hwndServiceDlg = NULL;
-                   }
-                   else if (IsWindow(g_hwndServiceDlg))
-                       SetFocus(g_hwndServiceDlg);
-                   break;
-                case IDC_SMANAGER: 
-                    if (g_dwOSVersion >= OS_VERSION_WIN2K)
-                        ShellExecute(NULL, "open", "services.msc", "/s", NULL, SW_NORMAL);
-                    else
-                        WinExec("Control.exe SrvMgr.cpl Services", SW_NORMAL);
-                    return TRUE;
-               case IDM_EXIT:
-                   ShowNotifyIcon(hWnd, NIM_DELETE);
-                   PostQuitMessage(0);
-                   return TRUE;
-            }
-        default:
-            return DefWindowProc(hWnd, message, wParam, lParam);
-    }
-
-    return FALSE;
-}
-
-/* Create main invisible window */
-HWND CreateMainWindow(HINSTANCE hInstance)
-{
-    HWND       hWnd = NULL;
-    WNDCLASSEX wcex;
-
-    if (!GetSystemOSVersion(&g_dwOSVersion))
-    {
-        ErrorMessage(NULL, TRUE);
-        return hWnd;
-    }
-
-    wcex.cbSize = sizeof(WNDCLASSEX); 
-
-    wcex.style          = CS_HREDRAW | CS_VREDRAW;
-    wcex.lpfnWndProc    = (WNDPROC)WndProc;
-    wcex.cbClsExtra     = 0;
-    wcex.cbWndExtra     = 0;
-    wcex.hInstance      = hInstance;
-    wcex.hIcon          = (HICON)LoadImage(hInstance, MAKEINTRESOURCE(IDI_APSRVMON),
-                                           IMAGE_ICON, 32, 32, LR_DEFAULTCOLOR);
-    wcex.hCursor        = g_hCursorArrow;
-    wcex.hbrBackground  = (HBRUSH)(COLOR_WINDOW+1);
-    wcex.lpszMenuName   = 0;
-    wcex.lpszClassName  = g_szWindowClass;
-    wcex.hIconSm        = (HICON)LoadImage(hInstance, MAKEINTRESOURCE(IDI_APSRVMON),
-                                           IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR);
-
-    if (RegisterClassEx(&wcex))
-        hWnd = CreateWindow(g_szWindowClass, g_szTitle,
-                             0, 0, 0, 0, 0,
-                             NULL, NULL, hInstance, NULL);
-
-    return hWnd;
-
-}
-
-
-int WINAPI WinMain(HINSTANCE hInstance,
-                    HINSTANCE hPrevInstance,
-                    LPSTR lpCmdLine,
-                    int nCmdShow)
-{
-    CHAR szTmp[MAX_LOADSTRING];
-    CHAR szCmp[MAX_COMPUTERNAME_LENGTH+4];
-    MSG     msg;
-    /* single instance mutex */
-    HANDLE hMutex;
-    int i;
-    DWORD d;
-
-    g_LangID = GetUserDefaultLangID();
-    if ((g_LangID & 0xFF) != LANG_ENGLISH)
-        g_LangID = MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL);
-    
-    for (i = IDS_MSG_FIRST; i <= IDS_MSG_LAST; ++i) {
-        LoadString(hInstance, i, szTmp, MAX_LOADSTRING);
-        g_lpMsg[i - IDS_MSG_FIRST] = strdup(szTmp);
-    }
-    LoadString(hInstance, IDS_APMONITORTITLE, szTmp, MAX_LOADSTRING);
-    d = MAX_COMPUTERNAME_LENGTH+1;
-    strcpy(szCmp, "\\\\");
-    GetComputerName(szCmp + 2, &d);
-    strupr(szCmp);
-    g_szLocalHost = strdup(szCmp);
-
-    ZeroMemory(g_stComputers, sizeof(ST_MONITORED_COMP) * MAX_APACHE_COMPUTERS);
-    g_stComputers[0].szComputerName = strdup(szCmp);
-    g_stComputers[0].hRegistry = HKEY_LOCAL_MACHINE;
-    g_szTitle = strdup(szTmp);
-    LoadString(hInstance, IDS_APMONITORCLASS, szTmp, MAX_LOADSTRING);
-    g_szWindowClass = strdup(szTmp);
-
-    g_icoStop          = LoadImage(hInstance, MAKEINTRESOURCE(IDI_ICOSTOP),
-                                   IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR);
-    g_icoRun           = LoadImage(hInstance, MAKEINTRESOURCE(IDI_ICORUN),
-                                   IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR);
-    g_hCursorHourglass = LoadImage(NULL, MAKEINTRESOURCE(OCR_WAIT), IMAGE_CURSOR,
-                                   LR_DEFAULTSIZE, LR_DEFAULTSIZE, LR_SHARED);
-    g_hCursorArrow     = LoadImage(NULL, MAKEINTRESOURCE(OCR_NORMAL), IMAGE_CURSOR,
-                                   LR_DEFAULTSIZE, LR_DEFAULTSIZE, LR_SHARED);
-    g_hBmpStart        = LoadImage(hInstance, MAKEINTRESOURCE(IDB_BMPRUN),
-                                   IMAGE_BITMAP, XBITMAP, YBITMAP, LR_DEFAULTCOLOR);
-    g_hBmpStop         = LoadImage(hInstance, MAKEINTRESOURCE(IDB_BMPSTOP),
-                                   IMAGE_BITMAP, XBITMAP, YBITMAP, LR_DEFAULTCOLOR);
-
-    hMutex = CreateMutex(NULL, FALSE, "APSRVMON_MUTEX");
-    if ((hMutex == NULL) || (GetLastError() == ERROR_ALREADY_EXISTS))
-    {
-        ErrorMessage(g_lpMsg[IDS_MSG_APPRUNNING-IDS_MSG_FIRST], FALSE);
-        if (hMutex)
-            CloseHandle(hMutex);
-
-        return 0;
-    }
-
-    ZeroMemory(g_stServices, sizeof(ST_APACHE_SERVICE) * MAX_APACHE_SERVICES);
-    CoInitialize(NULL);
-    InitCommonControls();
-    g_hInstance = hInstance;
-    g_hwndMain = CreateMainWindow(hInstance);
-    g_bUiTaskbarCreated = RegisterWindowMessage("TaskbarCreated");
-    InitializeCriticalSection(&g_stcSection);
-    g_hwndServiceDlg = NULL;                      
-    if (g_hwndMain != NULL)
-    {
-        while (GetMessage(&msg, NULL, 0, 0) == TRUE) 
-        {
-            TranslateMessage(&msg);
-            DispatchMessage(&msg);
-        }    
-        am_ClearServicesSt();
-    }
-    am_ClearComputersSt();
-    DeleteCriticalSection(&g_stcSection);
-    CloseHandle(hMutex);
-    DestroyIcon(g_icoStop);
-    DestroyIcon(g_icoRun);
-    DestroyCursor(g_hCursorHourglass);
-    DestroyCursor(g_hCursorArrow);
-    DeleteObject(g_hBmpStart); 
-    DeleteObject(g_hBmpStop); 
-    CoUninitialize();
-    return 0;
-}
diff --git a/support/win32/ApacheMonitor.dsp b/support/win32/ApacheMonitor.dsp
deleted file mode 100644
index 5a865d1..0000000
--- a/support/win32/ApacheMonitor.dsp
+++ /dev/null
@@ -1,164 +0,0 @@
-# Microsoft Developer Studio Project File - Name="ApacheMonitor" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Application" 0x0101
-
-CFG=ApacheMonitor - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "ApacheMonitor.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "ApacheMonitor.mak" CFG="ApacheMonitor - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "ApacheMonitor - Win32 Release" (based on "Win32 (x86) Application")
-!MESSAGE "ApacheMonitor - Win32 Debug" (based on "Win32 (x86) Application")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "ApacheMonitor - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /Yu"stdafx.h" /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "STRICT" /FD /c
-# SUBTRACT CPP /YX /Yc /Yu
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib version.lib comctl32.lib /nologo /subsystem:windows /machine:I386
-
-!ELSEIF  "$(CFG)" == "ApacheMonitor - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /Yu"stdafx.h" /FD /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "STRICT" /FD /c
-# SUBTRACT CPP /YX /Yc /Yu
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib version.lib comctl32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
-
-!ENDIF 
-
-# Begin Target
-
-# Name "ApacheMonitor - Win32 Release"
-# Name "ApacheMonitor - Win32 Debug"
-# Begin Group "Resource Files"
-
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-# Begin Source File
-
-SOURCE=.\apache_header.bmp
-# End Source File
-# Begin Source File
-
-SOURCE=.\ApacheMonitor.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\ApacheMonitor.ico
-# End Source File
-# Begin Source File
-
-SOURCE=.\ApacheMonitor.rc
-# End Source File
-# Begin Source File
-
-SOURCE=.\aprun.ico
-# End Source File
-# Begin Source File
-
-SOURCE=.\apstop.ico
-# End Source File
-# Begin Source File
-
-SOURCE=.\srun.bmp
-# End Source File
-# Begin Source File
-
-SOURCE=.\sstop.bmp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\build\win32\win32ver.awk
-
-!IF  "$(CFG)" == "ApacheMonitor - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-USERDEP__WIN32=".\ApacheMonitor.rc"	
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\ApacheMonitorVersion.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ../../build/win32/win32ver.awk ApacheMonitor  "Apache HTTP Server Monitor" ../../include/ap_release.h > .\ApacheMonitorVersion.rc
-
-# End Custom Build
-
-!ELSEIF  "$(CFG)" == "ApacheMonitor - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-USERDEP__WIN32=".\ApacheMonitor.rc"	
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\ApacheMonitorVersion.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ../../build/win32/win32ver.awk ApacheMonitor  "Apache HTTP Server Monitor" ../../include/ap_release.h > .\ApacheMonitorVersion.rc
-
-# End Custom Build
-
-!ENDIF 
-
-# End Source File
-# End Group
-# Begin Source File
-
-SOURCE=.\ApacheMonitor.c
-# End Source File
-# End Target
-# End Project
diff --git a/support/win32/ApacheMonitor.h b/support/win32/ApacheMonitor.h
deleted file mode 100644
index c3ef3c4..0000000
--- a/support/win32/ApacheMonitor.h
+++ /dev/null
@@ -1,55 +0,0 @@
-#define IDD_DLGSERVICES                 101
-#define IDS_APMONITORTITLE              102
-#define IDS_APMONITORCLASS              103
-#define IDM_RESTORE                     104
-#define IDM_EXIT                        105
-#define IDI_APSRVMON                    106
-#define IDI_ICOSTOP                     107
-#define IDI_ICORUN                      108
-#define IDC_STATBAR                     109
-#define IDC_SSTATUS                     110
-#define IDB_BMPSTOP                     111
-#define IDB_BMPRUN                      112
-#define IDB_BMPHEADER                   114
-#define IDL_SERVICES                    115
-#define IDL_STDOUT                      116
-#define IDC_SSTART                      117
-#define IDC_SSTOP                       118
-#define IDC_SRESTART                    119
-#define IDC_SEXIT                       120
-#define IDC_SMANAGER                    121
-#define IDD_DLGCONNECT                  122
-#define IDC_LREMOTE                     123
-#define IDC_LBROWSE                     124
-#define IDC_COMPUTER                    125
-#define IDC_SCONNECT                    126
-#define IDC_SDISCONN                    127
-#define IDS_MSG_FIRST                   256
-#define IDS_MSG_APPRUNNING              256
-#define IDS_MSG_ERROR                   257
-#define IDS_MSG_RUNNINGALL              258
-#define IDS_MSG_RUNNING                 259
-#define IDS_MSG_RUNNINGNONE             260
-#define IDS_MSG_NOSERVICES              261
-#define IDS_MSG_MNUSERVICES             262
-#define IDS_MSG_MNUSHOW                 263
-#define IDS_MSG_MNUEXIT                 264
-#define IDS_MSG_SRVSTART                265
-#define IDS_MSG_SRVSTARTED              266
-#define IDS_MSG_SRVSTOP                 267
-#define IDS_MSG_SRVSTOPPED              268
-#define IDS_MSG_SRVRESTART              269
-#define IDS_MSG_SRVRESTARTED            270
-#define IDS_MSG_SRVFAILED               271
-#define IDS_MSG_SSTART                  272
-#define IDS_MSG_SSTOP                   273
-#define IDS_MSG_SRESTART                274
-#define IDS_MSG_SERVICES                275
-#define IDS_MSG_CONNECT                 276
-#define IDS_MSG_ECONNECT                277
-#define IDS_MSG_LAST                    277
-#define IDM_SM_SERVICE                  0x1100
-#define IDM_SM_START                    0x1200
-#define IDM_SM_STOP                     0x1400
-#define IDM_SM_RESTART                  0x1800
-#define IDC_STATIC                      -1
diff --git a/support/win32/ApacheMonitor.ico b/support/win32/ApacheMonitor.ico
deleted file mode 100644
index cd28dc5..0000000
--- a/support/win32/ApacheMonitor.ico
+++ /dev/null
Binary files differ
diff --git a/support/win32/ApacheMonitor.rc b/support/win32/ApacheMonitor.rc
deleted file mode 100644
index 2219b6a..0000000
--- a/support/win32/ApacheMonitor.rc
+++ /dev/null
@@ -1,80 +0,0 @@
-#include "apachemonitor.h"
-#include <windows.h>
-IDI_APSRVMON            ICON    DISCARDABLE     "ApacheMonitor.ico"
-IDI_ICOSTOP             ICON    DISCARDABLE     "apstop.ico"
-IDI_ICORUN              ICON    DISCARDABLE     "aprun.ico"
-
-#include "ApacheMonitorVersion.rc"
-
-IDD_DLGSERVICES DIALOGEX 0, 0, 350, 188
-STYLE DS_MODALFRAME | DS_SETFOREGROUND | WS_MINIMIZEBOX | WS_VISIBLE | 
-    WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU
-EXSTYLE WS_EX_CONTROLPARENT
-CAPTION "Apache Service Monitor"
-FONT 8, "MS Sans Serif"
-BEGIN
-    DEFPUSHBUTTON   "&OK",IDOK,298,49,50,14
-    LTEXT           "Service St&atus :",IDC_SSTATUS,3,40,272,8
-    LISTBOX         IDL_SERVICES,2,49,285,73,LBS_OWNERDRAWFIXED | 
-                    LBS_HASSTRINGS | LBS_USETABSTOPS | LBS_NOINTEGRALHEIGHT | 
-                    LBS_DISABLENOSCROLL | WS_VSCROLL | WS_TABSTOP
-    LISTBOX         IDL_STDOUT,2,124,285,51,LBS_NOINTEGRALHEIGHT | 
-                    LBS_DISABLENOSCROLL | LBS_NOSEL | WS_VSCROLL
-    PUSHBUTTON      "&Start",IDC_SSTART,298,75,50,14
-    PUSHBUTTON      "S&top",IDC_SSTOP,298,91,50,14
-    PUSHBUTTON      "&Restart",IDC_SRESTART,298,107,50,14
-    PUSHBUTTON      "Ser&vices",IDC_SMANAGER,298,123,50,14
-    CONTROL         IDB_BMPHEADER,IDC_STATIC,"Static",SS_BITMAP,0,0,349,38
-    PUSHBUTTON      "&Connect",IDC_SCONNECT,298,139,50,14
-    PUSHBUTTON      "E&xit",IDC_SEXIT,298,161,50,14
-END
-
-IDD_DLGCONNECT DIALOGEX 0, 0, 240, 54
-STYLE DS_MODALFRAME | DS_SETFOREGROUND | WS_VISIBLE | WS_CLIPCHILDREN | 
-    WS_CAPTION | WS_SYSMENU
-EXSTYLE WS_EX_CONTROLPARENT
-CAPTION "Connect Remote Computer"
-FONT 8, "MS Sans Serif"
-BEGIN
-    LTEXT           "Computer &Name:",IDC_LREMOTE,7,4,155,8
-    EDITTEXT        IDC_COMPUTER,7,14,169,14,ES_AUTOHSCROLL
-    DEFPUSHBUTTON   "&OK",IDOK,183,14,50,14
-    PUSHBUTTON      "&Cancel",IDCANCEL,183,34,50,14
-    PUSHBUTTON      "&Browse",IDC_LBROWSE,7,34,50,14
-END
-
-IDB_BMPSTOP             BITMAP  DISCARDABLE     "sstop.bmp"
-IDB_BMPRUN              BITMAP  DISCARDABLE     "srun.bmp"
-IDB_BMPHEADER           BITMAP  DISCARDABLE     "apache_header.bmp"
-
-STRINGTABLE DISCARDABLE 
-BEGIN
-    IDS_APMONITORTITLE      "Apache Service Monitor"
-    IDS_APMONITORCLASS      "ApacheServiceMonitorClass"
-END
-
-STRINGTABLE DISCARDABLE 
-BEGIN
-    IDS_MSG_APPRUNNING      "Apache monitor is allready started"
-    IDS_MSG_ERROR           "Error"
-    IDS_MSG_RUNNINGALL      "Running all Apache services"
-    IDS_MSG_RUNNING         "Running %d from %d Apache services"
-    IDS_MSG_RUNNINGNONE     "Running none from %d Apache services"
-    IDS_MSG_NOSERVICES      "No services installed"
-    IDS_MSG_MNUSERVICES     "Open &Services"
-    IDS_MSG_MNUSHOW         "&Open Apache Monitor"
-    IDS_MSG_MNUEXIT         "E&xit"
-    IDS_MSG_SRVSTART        "The %s is starting."
-    IDS_MSG_SRVSTARTED      "The %s has started."
-    IDS_MSG_SRVSTOP         "The %s is stopping."
-    IDS_MSG_SRVSTOPPED      "The %s has stopped."
-    IDS_MSG_SRVRESTART      "The %s is restarting."
-    IDS_MSG_SRVRESTARTED    "The %s has restarted."
-    IDS_MSG_SRVFAILED       "The requested operation has failed!"
-    IDS_MSG_SSTART          "&Start"
-    IDS_MSG_SSTOP           "S&top"
-    IDS_MSG_SRESTART        "&Restart"
-    IDS_MSG_SERVICES        "Ser&vices"
-    IDS_MSG_CONNECT         "&Connect"
-    IDS_MSG_ECONNECT        "Unable to connect remote registry on %s"
-END
diff --git a/support/win32/apache_header.bmp b/support/win32/apache_header.bmp
deleted file mode 100644
index 7340fac..0000000
--- a/support/win32/apache_header.bmp
+++ /dev/null
Binary files differ
diff --git a/support/win32/aprun.ico b/support/win32/aprun.ico
deleted file mode 100644
index dbd5832..0000000
--- a/support/win32/aprun.ico
+++ /dev/null
Binary files differ
diff --git a/support/win32/apstop.ico b/support/win32/apstop.ico
deleted file mode 100644
index fba49ad..0000000
--- a/support/win32/apstop.ico
+++ /dev/null
Binary files differ
diff --git a/support/win32/srun.bmp b/support/win32/srun.bmp
deleted file mode 100644
index 90ecd46..0000000
--- a/support/win32/srun.bmp
+++ /dev/null
Binary files differ
diff --git a/support/win32/sstop.bmp b/support/win32/sstop.bmp
deleted file mode 100644
index ba73d87..0000000
--- a/support/win32/sstop.bmp
+++ /dev/null
Binary files differ
diff --git a/support/win32/wintty.c b/support/win32/wintty.c
deleted file mode 100644
index 13b0f38..0000000
--- a/support/win32/wintty.c
+++ /dev/null
@@ -1,390 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- */
-
-/* --------------------------------------------------------------------
- *
- * wintty : a Apache/WinNT support utility for monitoring and 
- *          reflecting user feedback from the Apache process via
- *          stdin/stdout, even as running within the service context.
- *
- * Originally contributed by William Rowe <wrowe@covalent.net>
- *
- * Note: this implementation is _very_ experimental, and error handling
- * is far from complete.  Using it as a cgi or pipe process allows the
- * programmer to discover if facilities such as reliable piped logs
- * are working as expected, or answer operator prompts that would
- * otherwise be discarded by the service process.
- *
- * Also note the isservice detection semantics, which far exceed any
- * mechanism we have discovered thus far.
- * 
- * --------------------------------------------------------------------
- */
-
-#define WIN32_LEAN_AND_MEAN
-#include <windows.h>
-#include <stdlib.h>
-#include <stdio.h>
-
-const char *options = 
-"\nwintty: a utility for echoing the stdin stream to a new console window,\n"
-"\teven when invoked from within a service (such as the Apache server.)\n"
-"\tAlso reflects the console input back to the stdout stream, allowing\n"
-"\tthe operator to respond to prompts from the context of a service.\n\n"
-"Syntax: %s [opts] [-t \"Window Title\"]\n\n"
-"  opts: -c{haracter}   or -l{ine} input\n"
-"\t-q{uiet}       or -e{cho} input\n"
-"\t-u{nprocessed} or -p{rocessed} input\n"
-"\t-n{owrap}      or -w{rap} output lines\n"
-"\t-f{ormatted}   or -r{aw} output lines\n"
-"\t-v{erbose} error reporting (for debugging)\n"
-"\t-? for this message\n\n";
-
-BOOL verbose = FALSE;
-
-void printerr(char *fmt, ...) 
-{
-    char str[1024];
-    va_list args;
-    if (!verbose)
-        return;
-    va_start(args, fmt);
-    wvsprintf(str, fmt, args);
-    OutputDebugString(str);
-}
-
-DWORD WINAPI feedback(LPVOID args);
-
-typedef struct feedback_args_t {
-    HANDLE in;
-    HANDLE out;
-} feedback_args_t;
-
-int main(int argc, char** argv)
-{
-    char str[1024], *contitle;
-    HANDLE hproc, thread;
-    HANDLE hwinsta, hsavewinsta;
-    HANDLE hdesk, hsavedesk;
-    HANDLE conin, conout;
-    HANDLE hstdin, hstdout, hstderr, hdup;
-    feedback_args_t feed;
-    DWORD conmode;
-    DWORD newinmode = 0, notinmode = 0;
-    DWORD newoutmode = 0, notoutmode = 0;
-    DWORD tid;
-    DWORD len;
-    BOOL isservice = FALSE;
-    char *arg0 = argv[0];
-
-    while (--argc) {
-        ++argv;
-        if (**argv == '/' || **argv == '-') {
-            switch (tolower((*argv)[1])) {
-                case 'c':
-                    notinmode |= ENABLE_LINE_INPUT;          break;
-                case 'l':
-                    newinmode |= ENABLE_LINE_INPUT;          break;
-                case 'q':
-                    notinmode |= ENABLE_ECHO_INPUT;          break;
-                case 'e':
-                    newinmode |= ENABLE_ECHO_INPUT;          break;
-                case 'u':
-                    notinmode |= ENABLE_PROCESSED_INPUT;     break;
-                case 'p':
-                    newinmode |= ENABLE_PROCESSED_INPUT;     break;
-                case 'n':
-                    notoutmode |= ENABLE_WRAP_AT_EOL_OUTPUT; break;
-                case 'w':
-                    newoutmode |= ENABLE_WRAP_AT_EOL_OUTPUT; break;
-                case 'r':
-                    notoutmode |= ENABLE_PROCESSED_OUTPUT;   break;
-                case 'f':
-                    newoutmode |= ENABLE_PROCESSED_OUTPUT;   break;
-                case 'v':
-                    verbose = TRUE;
-                    break;
-                case 't':
-                    contitle = *(++argv);
-                    --argc;
-                    break;
-                case '?':
-                    printf(options, arg0);
-                    exit(1);
-		default:
-                    printf("wintty option %s not recognized, use -? for help.\n\n", *argv);
-                    exit(1);
-            }
-        }
-        else {
-            printf("wintty argument %s not understood, use -? for help.\n\n", *argv);
-            exit(1);
-        }
-    }
-
-    hproc = GetCurrentProcess();
-    hsavewinsta = GetProcessWindowStation();
-    if (!hsavewinsta || hsavewinsta == INVALID_HANDLE_VALUE) {
-        printerr("GetProcessWindowStation() failed (%d)\n", GetLastError());
-    }
-    else if (!GetUserObjectInformation(hsavewinsta, UOI_NAME, str, sizeof(str), &len)) {
-        printerr("GetUserObjectInfoformation(hWinSta) failed (%d)\n", GetLastError());
-    }
-    else if (strnicmp(str, "Service-", 8) == 0) {
-        printerr("WindowStation Name %s is a service\n", str);
-        isservice = TRUE;
-    }
-    SetLastError(0);
-
-    hstdin = GetStdHandle(STD_INPUT_HANDLE);
-    if (!hstdin || hstdin == INVALID_HANDLE_VALUE) {
-        printerr("GetStdHandle(STD_INPUT_HANDLE) failed (%d)\n", 
-                 GetLastError());
-    }
-    else if (DuplicateHandle(hproc, hstdin, hproc, &hdup, 0, 
-                             isservice, DUPLICATE_SAME_ACCESS)) {
-        CloseHandle(hstdin);
-        hstdin = hdup;
-    }
-    else {
-        printerr("DupHandle(stdin [%x]) failed (%d)\n", 
-                 hstdin, GetLastError());
-    }
-
-    hstdout = GetStdHandle(STD_OUTPUT_HANDLE);
-    if (!hstdout || hstdout == INVALID_HANDLE_VALUE) {
-        printerr("GetStdHandle(STD_OUTPUT_HANDLE) failed (%d)\n", 
-                 GetLastError());
-    }
-    else if (DuplicateHandle(hproc, hstdout, hproc, &hdup, 0, 
-                             isservice, DUPLICATE_SAME_ACCESS)) {
-        CloseHandle(hstdout);
-        hstdout = hdup;
-    }
-    else {
-        printerr("DupHandle(stdout [%x]) failed (%d)\n", 
-                 hstdout, GetLastError());
-    }
-
-    hstderr = GetStdHandle(STD_ERROR_HANDLE);
-    if (!hstderr || hstderr == INVALID_HANDLE_VALUE) {
-        printerr("GetStdHandle(STD_ERROR_HANDLE) failed (%d)\n", 
-                 GetLastError());
-    }
-    else if (DuplicateHandle(hproc, hstderr, hproc, &hdup, 0, 
-                             isservice, DUPLICATE_SAME_ACCESS)) {
-        CloseHandle(hstderr);
-        hstderr = hdup;
-    }
-    else {
-        printerr("DupHandle(stderr [%x]) failed (%d)\n", 
-                 hstderr, GetLastError());
-    }
-
-    /* You can't close the console till all the handles above were
-     * rescued by DuplicateHandle()
-     */
-    if (!FreeConsole())
-        printerr("FreeConsole() failed (%d)\n", GetLastError());
-        
-    if (isservice) {
-#ifdef WE_EVER_FIGURE_OUT_WHY_THIS_DOESNT_WORK
-	hsavedesk = GetThreadDesktop(GetCurrentThreadId());
-        if (!hsavedesk || hsavedesk == INVALID_HANDLE_VALUE) {
-            printerr("GetThreadDesktop(GetTID()) failed (%d)\n", GetLastError());
-        }
-        CloseWindowStation(hwinsta);
-        hwinsta = OpenWindowStation("WinSta0", TRUE, MAXIMUM_ALLOWED);
-        if (!hwinsta || hwinsta == INVALID_HANDLE_VALUE) {
-            printerr("OpenWinSta(WinSta0) failed (%d)\n", GetLastError());
-        }
-        else if (!SetProcessWindowStation(hwinsta)) {
-            printerr("SetProcWinSta(WinSta0) failed (%d)\n", GetLastError());
-        }
-        hdesk = OpenDesktop("Default", 0, TRUE, MAXIMUM_ALLOWED);
-        if (!hdesk || hdesk == INVALID_HANDLE_VALUE) {
-            printerr("OpenDesktop(Default) failed (%d)\n", GetLastError());
-        } 
-        else if (!SetThreadDesktop(hdesk)) {
-            printerr("SetThreadDesktop(Default) failed (%d)\n", GetLastError());
-        }
-#else
-        PROCESS_INFORMATION pi;
-        STARTUPINFO si;
-        DWORD exitcode = 1;
-        char appbuff[MAX_PATH];
-        char *appname = NULL;
-        char *cmdline = GetCommandLine();
-        
-        if (!GetModuleFileName(NULL, appbuff, sizeof(appbuff))) {
-            appname = appbuff;
-        }
-        
-        memset(&si, 0, sizeof(si));
-        si.cb = sizeof(si);
-        si.dwFlags     = STARTF_USESHOWWINDOW
-                       | STARTF_USESTDHANDLES;
-        si.lpDesktop   = "WinSta0\\Default";
-        si.wShowWindow = 1;  /* SW_SHOWNORMAL */
-        si.hStdInput   = hstdin;
-        si.hStdOutput  = hstdout;
-        si.hStdError   = hstderr;
-
-        /* Instantly, upon creating the new process, we will close our
-         * copies of the handles so our parent isn't confused when the
-         * child closes their copy of the handle.  Without this action,
-         * we would hold a copy of the handle, and the parent would not
-         * receive their EOF notification.
-         */
-        if (CreateProcess(appname, cmdline, NULL, NULL, TRUE,
-                          CREATE_SUSPENDED | CREATE_NEW_CONSOLE, 
-                          NULL, NULL, &si, &pi)) {
-            CloseHandle(si.hStdInput);
-            CloseHandle(si.hStdOutput);
-            CloseHandle(si.hStdError);
-            ResumeThread(pi.hThread);
-            CloseHandle(pi.hThread);
-            WaitForSingleObject(pi.hProcess, INFINITE);
-            GetExitCodeProcess(pi.hProcess, &exitcode);
-            CloseHandle(pi.hProcess);
-            return exitcode;
-        }
-        return 1;
-#endif
-    }
-
-    if (!AllocConsole()) {
-        printerr("AllocConsole(Default) failed (%d)\n", GetLastError());
-    }
-
-    if (contitle && !SetConsoleTitle(contitle)) {
-        printerr("SetConsoleTitle() failed (%d)\n", GetLastError());
-    }
-
-    conout = CreateFile("CONOUT$", GENERIC_READ | GENERIC_WRITE, 
-                        FILE_SHARE_READ | FILE_SHARE_WRITE, 
-                        FALSE, OPEN_EXISTING, 0, NULL);
-    if (!conout || conout == INVALID_HANDLE_VALUE) {
-        printerr("CreateFile(CONOUT$) failed (%d)\n", GetLastError());
-    }
-    else if (!GetConsoleMode(conout, &conmode)) {
-        printerr("GetConsoleMode(CONOUT) failed (%d)\n", GetLastError());
-    }
-    else if (!SetConsoleMode(conout, conmode = ((conmode | newoutmode)
-                                                         & ~notoutmode))) {
-        printerr("SetConsoleMode(CONOUT, 0x%x) failed (%d)\n", 
-                 conmode, GetLastError());
-    }
-
-    conin = CreateFile("CONIN$", GENERIC_READ | GENERIC_WRITE, 
-                       FILE_SHARE_READ | FILE_SHARE_WRITE, 
-                       FALSE, OPEN_EXISTING, 0, NULL);
-    if (!conin || conin == INVALID_HANDLE_VALUE) {
-        printerr("CreateFile(CONIN$) failed (%d)\n", GetLastError());
-    }
-    else if (!GetConsoleMode(conin, &conmode)) {
-        printerr("GetConsoleMode(CONIN) failed (%d)\n", GetLastError());
-    }
-    else if (!SetConsoleMode(conin, conmode = ((conmode | newinmode) 
-                                                        & ~notinmode))) {
-        printerr("SetConsoleMode(CONIN, 0x%x) failed (%d)\n", 
-                 conmode, GetLastError());
-    }
-
-    feed.in = conin;
-    feed.out = hstdout;
-    thread = CreateThread(NULL, 0, feedback, (LPVOID)&feed, 0, &tid);
-
-    while (ReadFile(hstdin, str, sizeof(str), &len, NULL))
-        if (!len || !WriteFile(conout, str, len, &len, NULL))
-           break;
-
-    printerr("[EOF] from stdin (%d)\n", GetLastError());
-
-    CloseHandle(stdout);
-    if (!GetConsoleTitle(str, sizeof(str))) {
-        printerr("SetConsoleTitle() failed (%d)\n", GetLastError());
-    }
-    else {
-        strcat(str, " - [Finished]");
-        if (!SetConsoleTitle(str)) {
-            printerr("SetConsoleTitle() failed (%d)\n", GetLastError());
-        }
-    }
-
-    WaitForSingleObject(thread, INFINITE);
-    FreeConsole();
-    if (isservice) {
-        if (!SetProcessWindowStation(hsavewinsta)) {
-            len = GetLastError();
-        }
-        if (!SetThreadDesktop(hsavedesk)) {
-            len = GetLastError();
-        }
-        CloseDesktop(hdesk);
-        CloseWindowStation(hwinsta);
-    }
-    return 0;
-}
-
-
-DWORD WINAPI feedback(LPVOID arg)
-{
-    feedback_args_t *feed = (feedback_args_t*)arg;
-    char *str[1024];
-    DWORD len;
-
-    while (ReadFile(feed->in, str, sizeof(str), &len, NULL))
-        if (!len || !WriteFile(feed->out, str, len, &len, NULL))
-            break;
-
-    printerr("[EOF] from Console (%d)\n", GetLastError());
-
-    return 0;
-}
diff --git a/support/win32/wintty.dsp b/support/win32/wintty.dsp
deleted file mode 100644
index 5eb1af7..0000000
--- a/support/win32/wintty.dsp
+++ /dev/null
@@ -1,123 +0,0 @@
-# Microsoft Developer Studio Project File - Name="wintty" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Console Application" 0x0103
-
-CFG=wintty - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "wintty.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "wintty.mak" CFG="wintty - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "wintty - Win32 Release" (based on "Win32 (x86) Console Application")
-!MESSAGE "wintty - Win32 Debug" (based on "Win32 (x86) Console Application")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "wintty - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "APR_DECLARE_STATIC" /D "APU_DECLARE_STATIC" /FD /c
-# ADD CPP /nologo /MD /W3 /O2 /I "../srclib/apr/include" /I "../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "APR_DECLARE_STATIC" /D "APU_DECLARE_STATIC" /Fd"Release/wintty" /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib advapi32.lib /nologo /subsystem:console /map /machine:I386
-# ADD LINK32 kernel32.lib user32.lib advapi32.lib /nologo /subsystem:console /map /machine:I386
-
-!ELSEIF  "$(CFG)" == "wintty - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "APR_DECLARE_STATIC" /D "APU_DECLARE_STATIC" /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../srclib/apr/include" /I "../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "APR_DECLARE_STATIC" /D "APU_DECLARE_STATIC" /Fd"Debug/wintty" /FD /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib advapi32.lib /nologo /subsystem:console /incremental:no /map /debug /machine:I386
-# ADD LINK32 kernel32.lib user32.lib advapi32.lib /nologo /subsystem:console /incremental:no /map /debug /machine:I386
-
-!ENDIF 
-
-# Begin Target
-
-# Name "wintty - Win32 Release"
-# Name "wintty - Win32 Debug"
-# Begin Source File
-
-SOURCE=..\..\build\win32\win32ver.awk
-
-!IF  "$(CFG)" == "wintty - Win32 Release"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\wintty.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ../../build/win32/win32ver.awk wintty  "wintty Console Utility" ../../include/ap_release.h > .\wintty.rc
-
-# End Custom Build
-
-!ELSEIF  "$(CFG)" == "wintty - Win32 Debug"
-
-# PROP Ignore_Default_Tool 1
-# Begin Custom Build - Creating Version Resource
-InputPath=..\..\build\win32\win32ver.awk
-
-".\wintty.rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	awk -f ../../build/win32/win32ver.awk wintty  "wintty Console Utility" ../../include/ap_release.h > .\wintty.rc
-
-# End Custom Build
-
-!ENDIF 
-
-# End Source File
-# Begin Source File
-
-SOURCE=.\wintty.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\wintty.rc
-# End Source File
-# End Target
-# End Project
diff --git a/test/.cvsignore b/test/.cvsignore
deleted file mode 100644
index d961cf0..0000000
--- a/test/.cvsignore
+++ /dev/null
@@ -1,16 +0,0 @@
-a.out
-time-FCNTL
-time-FLOCK
-time-SYSVSEM
-time-SYSVSEM2
-time-PTHREAD
-time-USLOCK
-zb
-test-writev
-test_date
-test_select
-.libs
-.deps
-*.lo
-Makefile
-dbu
diff --git a/test/.indent.pro b/test/.indent.pro
deleted file mode 100644
index a9fbe9f..0000000
--- a/test/.indent.pro
+++ /dev/null
@@ -1,54 +0,0 @@
--i4 -npsl -di0 -br -nce -d0 -cli0 -npcs -nfc1
--TBUFF
--TFILE
--TTRANS
--TUINT4
--T_trans
--Tallow_options_t
--Tapache_sfio
--Tarray_header
--Tbool_int
--Tbuf_area
--Tbuff_struct
--Tbuffy
--Tcmd_how
--Tcmd_parms
--Tcommand_rec
--Tcommand_struct
--Tconn_rec
--Tcore_dir_config
--Tcore_server_config
--Tdir_maker_func
--Tevent
--Tglobals_s
--Thandler_func
--Thandler_rec
--Tjoblist_s
--Tlisten_rec
--Tmerger_func
--Tmode_t
--Tmodule
--Tmodule_struct
--Tmutex
--Tn_long
--Tother_child_rec
--Toverrides_t
--Tparent_score
--Tpid_t
--Tpiped_log
--Tpool
--Trequest_rec
--Trequire_line
--Trlim_t
--Tscoreboard
--Tsemaphore
--Tserver_addr_rec
--Tserver_rec
--Tserver_rec_chain
--Tshort_score
--Ttable
--Ttable_entry
--Tthread
--Tu_wide_int
--Tvtime_t
--Twide_int
diff --git a/test/Makefile.in b/test/Makefile.in
deleted file mode 100644
index 6d83405..0000000
--- a/test/Makefile.in
+++ /dev/null
@@ -1,20 +0,0 @@
-
-# no targets: we don't want to build anything by default. if you want the
-# test programs, then "make test"
-TARGETS =
-
-PROGRAMS =
-
-PROGRAM_LDADD        = $(EXTRA_LDFLAGS) $(PROGRAM_DEPENDENCIES) $(EXTRA_LIBS)
-PROGRAM_DEPENDENCIES =  \
-	$(top_srcdir)/srclib/apr-util/libaprutil.la \
-	$(top_srcdir)/srclib/apr/libapr.la
-
-include $(top_builddir)/build/rules.mk
-
-test: $(PROGRAMS)
-
-# example for building a test proggie
-# dbu_OBJECTS = dbu.lo
-# dbu: $(dbu_OBJECTS)
-#	$(LINK) $(dbu_OBJECTS) $(PROGRAM_LDADD)
diff --git a/test/README b/test/README
deleted file mode 100644
index 9f8be50..0000000
--- a/test/README
+++ /dev/null
@@ -1,3 +0,0 @@
-This directory contains useful test code for testing various bits
-of Apache functionality.  This stuff is for the developers only,
-so we might remove it on public releases.
diff --git a/test/check_chunked b/test/check_chunked
deleted file mode 100644
index 6a12167..0000000
--- a/test/check_chunked
+++ /dev/null
@@ -1,42 +0,0 @@
-#!/usr/bin/perl -w
-
-# This is meant to be used on the raw output of an HTTP/1.1 connection
-# to check that the chunks are all correctly laid out.  It's easiest
-# to use a tool like netcat to generate the output.  This script
-# *insists* that \r exist in the output.
-#
-# You can find netcat at avian.org:/src/hacks/nc110.tgz.
-
-use strict;
-
-my $is_chunked = 0;
-
-# must toss headers
-while(<>) {
-    if (/^Transfer-Encoding:\s+chunked/i) {
-	$is_chunked = 1;
-    }
-    last if ($_ eq "\r\n");
-}
-
-$is_chunked || die "wasn't chunked\n";
-
-for(;;) {
-    $_ = <> || die "unexpected end of file!\n";
-
-    m#^([0-9a-f]+) *\r$#i || die "bogus chunklen: $_";
-
-    my $chunklen = hex($1);
-
-    exit 0 if ($chunklen == 0);
-
-    chop; chop;
-    print "$_ ";
-
-    my $data = '';
-    read(ARGV, $data, $chunklen) == $chunklen || die "short read!\n";
-
-    $_ = <> || die "unexpected end of file!\n";
-
-    $_ eq "\r\n" || die "missing chunk trailer!\n";
-}
diff --git a/test/cls.c b/test/cls.c
deleted file mode 100644
index 91114a7..0000000
--- a/test/cls.c
+++ /dev/null
@@ -1,166 +0,0 @@
-#include <ctype.h>
-#include <dirent.h>
-#include <stdio.h>
-#include <string.h>
-#include <time.h>
-
-/*
- * Compare a string to a mask
- * Mask characters:
- *   @ - uppercase letter
- *   # - lowercase letter
- *   & - hex digit
- *   # - digit
- *   * - swallow remaining characters 
- *  <x> - exact match for any other character
- */
-static int checkmask(const char *data, const char *mask)
-{
-    int i, ch, d;
-
-    for (i = 0; mask[i] != '\0' && mask[i] != '*'; i++) {
-	ch = mask[i];
-	d = data[i];
-	if (ch == '@') {
-	    if (!isupper(d))
-		return 0;
-	}
-	else if (ch == '$') {
-	    if (!islower(d))
-		return 0;
-	}
-	else if (ch == '#') {
-	    if (!isdigit(d))
-		return 0;
-	}
-	else if (ch == '&') {
-	    if (!isxdigit(d))
-		return 0;
-	}
-	else if (ch != d)
-	    return 0;
-    }
-
-    if (mask[i] == '*')
-	return 1;
-    else
-	return (data[i] == '\0');
-}
-
-/*
- * Converts 8 hex digits to a time integer
- */
-static int hex2sec(const char *x)
-{
-    int i, ch;
-    unsigned int j;
-
-    for (i = 0, j = 0; i < 8; i++) {
-	ch = x[i];
-	j <<= 4;
-	if (isdigit(ch))
-	    j |= ch - '0';
-	else if (isupper(ch))
-	    j |= ch - ('A' - 10);
-	else
-	    j |= ch - ('a' - 10);
-    }
-    if (j == 0xffffffff)
-	return -1;		/* so that it works with 8-byte ints */
-    else
-	return j;
-}
-
-int main(int argc, char **argv)
-{
-    int i, ver;
-    DIR *d;
-    struct dirent *e;
-    const char *s;
-    FILE *fp;
-    char path[FILENAME_MAX + 1];
-    char line[1035];
-    time_t date, lmod, expire;
-    unsigned int len;
-    struct tm ts;
-    char sdate[30], slmod[30], sexpire[30];
-    const char time_format[] = "%e %b %Y %R";
-
-    if (argc != 2) {
-	printf("Usage: cls directory\n");
-	exit(0);
-    }
-
-    d = opendir(argv[1]);
-    if (d == NULL) {
-	perror("opendir");
-	exit(1);
-    }
-
-    for (;;) {
-	e = readdir(d);
-	if (e == NULL)
-	    break;
-	s = e->d_name;
-	if (s[0] == '.' || s[0] == '#')
-	    continue;
-	sprintf(path, "%s/%s", argv[1], s);
-	fp = fopen(path, "r");
-	if (fp == NULL) {
-	    perror("fopen");
-	    continue;
-	}
-	if (fgets(line, 1034, fp) == NULL) {
-	    perror("fgets");
-	    fclose(fp);
-	    continue;
-	}
-	if (!checkmask(line, "&&&&&&&& &&&&&&&& &&&&&&&& &&&&&&&& &&&&&&&&\n")) {
-	    fprintf(stderr, "Bad cache file\n");
-	    fclose(fp);
-	    continue;
-	}
-	date = hex2sec(line);
-	lmod = hex2sec(line + 9);
-	expire = hex2sec(line + 18);
-	ver = hex2sec(line + 27);
-	len = hex2sec(line + 35);
-	if (fgets(line, 1034, fp) == NULL) {
-	    perror("fgets");
-	    fclose(fp);
-	    continue;
-	}
-	fclose(fp);
-	i = strlen(line);
-	if (strncmp(line, "X-URL: ", 7) != 0 || line[i - 1] != '\n') {
-	    fprintf(stderr, "Bad cache file\n");
-	    continue;
-	}
-	line[i - 1] = '\0';
-	if (date != -1) {
-	    ts = *gmtime(&date);
-	    strftime(sdate, 30, time_format, &ts);
-	}
-	else
-	    strcpy(sdate, "-");
-
-	if (lmod != -1) {
-	    ts = *gmtime(&lmod);
-	    strftime(slmod, 30, time_format, &ts);
-	}
-	else
-	    strcpy(slmod, "-");
-
-	if (expire != -1) {
-	    ts = *gmtime(&expire);
-	    strftime(sexpire, 30, time_format, &ts);
-	}
-	else
-	    strcpy(sexpire, "-");
-
-	printf("%s: %d; %s  %s  %s\n", line + 7, ver, sdate, slmod, sexpire);
-    }
-
-    closedir(d);
-    return 0;
-}
diff --git a/test/tcpdumpscii.txt b/test/tcpdumpscii.txt
deleted file mode 100644
index 9c1060e..0000000
--- a/test/tcpdumpscii.txt
+++ /dev/null
@@ -1,50 +0,0 @@
-
-From marcs@znep.com Fri Apr 17 15:16:16 1998
-Date: Sat, 22 Nov 1997 20:44:10 -0700 (MST)
-From: Marc Slemko <marcs@znep.com>
-To: TLOSAP <new-httpd@apache.org>
-Subject: Re: Getting ethernet packets content under FreeBSD?  (fwd)
-Reply-To: new-httpd@apache.org
-
-Anyone too lazy to hack tcpdump (eg. my tcpdump has a -X option to display
-the data in ASCII) can use something like the below to grab HTTP headers
-when debugging broken clients.
-
-Nothing complicated, but handy.
-
----------- Forwarded message ----------
-Date: Sat, 22 Nov 1997 14:35:23 PST
-From: Bill Fenner <fenner@parc.xerox.com>
-To: Nate Williams <nate@mt.sri.com>
-Cc: bmah@ca.sandia.gov, hackers@FreeBSD.ORG
-Subject: Re: Getting ethernet packets content under FreeBSD? 
-
-I usually just use this perl script, which I call "tcpdumpscii".
-Then run "tcpdumpscii -s 1500 -x [other tcpdump args]".
-
-  Bill
-
-#!/import/misc/bin/perl
-#
-#
-open(TCPDUMP,"tcpdump -l @ARGV|");
-while (<TCPDUMP>) {
-	if (/^\s+(\S\S)+/) {
-		$sav = $_;
-		$asc = "";
-		while (s/\s*(\S\S)\s*//) {
-			$i = hex($1);
-			if ($i < 32 || $i > 126) {
-				$asc .= ".";
-			} else {
-				$asc .= pack(C,hex($1));
-			}
-		}
-		$foo = "." x length($asc);
-		$_ = $sav;
-		s/\t/        /g;
-		s/^$foo/$asc/;
-	}
-	print;
-}
-
diff --git a/test/test-writev.c b/test/test-writev.c
deleted file mode 100644
index 852c701..0000000
--- a/test/test-writev.c
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
-    test-writev: use this to figure out if your writev() does intelligent
-    things on the network.  Some writev()s when given multiple buffers
-    will break them up into multiple packets, which is a waste.
-
-    Linux prior to 2.0.31 has this problem.
-
-    Solaris 2.5, 2.5.1 doesn't appear to, 2.6 hasn't been tested.
-
-    IRIX 5.3 doesn't have this problem.
-
-    To use this you want to snoop the wire with tcpdump, and then run
-    "test-writev a.b.c.d port#" ... against some TCP service on another
-    box.  For example you can run it against port 80 on another server.
-    You want to look to see how many data packets are sent, you're hoping
-    only one of size 300 is sent.
-*/
-
-#include <stdio.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <arpa/inet.h>
-#include <sys/uio.h>
-#include <errno.h>
-
-#ifndef INADDR_NONE
-#define INADDR_NONE (-1ul)
-#endif
-
-void main( int argc, char **argv )
-{
-    struct sockaddr_in server_addr;
-    int s;
-    struct iovec vector[3];
-    char buf[100];
-    int i;
-    const int just_say_no = 1;
-
-    if( argc != 3 ) {
-usage:
-	fprintf( stderr, "usage: test-writev a.b.c.d port#\n" );
-	exit( 1 );
-    }
-    server_addr.sin_family = AF_INET;
-    server_addr.sin_addr.s_addr = inet_addr( argv[1] );
-    if( server_addr.sin_addr.s_addr == INADDR_NONE ) {
-	fprintf( stderr, "bogus address\n" );
-	goto usage;
-    }
-    server_addr.sin_port = htons( atoi( argv[2] ) );
-
-    s = socket( AF_INET, SOCK_STREAM, 0 );
-    if( s < 0 ) {
-	perror("socket");
-	exit(1);
-    }
-    if( connect( s, (struct sockaddr *)&server_addr, sizeof( server_addr ) )
-	!= 0 ) {
-	perror("connect");
-	exit(1);
-    }
-
-    if( setsockopt(s, IPPROTO_TCP, TCP_NODELAY, (char*)&just_say_no,
-	sizeof(just_say_no)) != 0 ) {
-	perror( "TCP_NODELAY" );
-	exit(1);
-    }
-    /* now build up a two part writev and write it out */
-    for( i = 0; i < sizeof( buf ); ++i ) {
-	buf[i] = 'x';
-    }
-    vector[0].iov_base = buf;
-    vector[0].iov_len = sizeof(buf);
-    vector[1].iov_base = buf;
-    vector[1].iov_len = sizeof(buf);
-    vector[2].iov_base = buf;
-    vector[2].iov_len = sizeof(buf);
-
-    i = writev( s, &vector[0], 3 );
-    fprintf( stdout, "i=%d, errno=%d\n", i, errno );
-    exit(0);
-}
diff --git a/test/test_find.c b/test/test_find.c
deleted file mode 100644
index e71a531..0000000
--- a/test/test_find.c
+++ /dev/null
@@ -1,62 +0,0 @@
-/* This program tests the ap_find_list_item routine in ../main/util.c.
- *
- * The defines in this sample compile line are specific to Roy's system.
- * They should match whatever was used to compile Apache first.
- *
-     gcc -g -O2 -I../os/unix -I../include -o test_find \
-            -DSOLARIS2=250 -Wall -DALLOC_DEBUG -DPOOL_DEBUG \
-            ../main/alloc.o ../main/buff.o ../main/util.o \
-            ../ap/libap.a -lsocket -lnsl test_find.c
- * 
- * Roy Fielding, 1999
- */
-#include <stdio.h>
-#include <stdlib.h>
-#include "httpd.h"
-#include "apr_general.h"
-
-/*
- * Dummy a bunch of stuff just to get a compile
- */
-uid_t ap_user_id;
-gid_t ap_group_id;
-void *ap_dummy_mutex = &ap_dummy_mutex;
-char *ap_server_argv0;
-
-AP_DECLARE(void) ap_block_alarms(void)
-{
-    ;
-}
-
-AP_DECLARE(void) ap_unblock_alarms(void)
-{
-    ;
-}
-
-AP_DECLARE(void) ap_log_error(const char *file, int line, int level,
-                              const request_rec *r, const char *fmt, ...)
-{
-    ;
-}
-
-int main (void)
-{
-    apr_pool_t *p;
-    char line[512];
-    char tok[512];
-
-    p = apr_pool_alloc_init();
-
-    printf("Enter field value to find items within:\n");
-    if (!gets(line))
-        exit(0);
-
-    printf("Enter search item:\n");
-    while (gets(tok)) {
-        printf("  [%s] == %s\n", tok, ap_find_list_item(p, line, tok)
-                                  ? "Yes" : "No");
-        printf("Enter search item:\n");
-    }
-    
-    exit(0);
-}
diff --git a/test/test_limits.c b/test/test_limits.c
deleted file mode 100644
index 8d76ce2..0000000
--- a/test/test_limits.c
+++ /dev/null
@@ -1,200 +0,0 @@
-/**************************************************************
- * test_limits.c
- *
- * A simple program for sending abusive requests to a server, based
- * on the sioux.c exploit code that this nimrod posted (see below).
- * Roy added options for testing long header fieldsize (-t h), long
- * request-lines (-t r), and a long request body (-t b).
- *
- * FreeBSD 2.2.x, FreeBSD 3.0, IRIX 5.3, IRIX 6.2:
- *   gcc -o test_limits test_limits.c
- * 
- * Solaris 2.5.1:
- *   gcc -o test_limits test_limits.c -lsocket -lnsl
- * 
- *
- * Message-ID: <861zqspvtw.fsf@niobe.ewox.org>
- * Date: 	Fri, 7 Aug 1998 19:04:27 +0200
- * Sender: Bugtraq List <BUGTRAQ@netspace.org>
- * From: Dag-Erling Coidan =?ISO-8859-1?Q?Sm=F8rgrav?= <finrod@EWOX.ORG>
- * Subject:      YA Apache DoS attack
- * 
- * Copyright (c) 1998 Dag-Erling Codan Smrgrav
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer
- *    in this position and unchanged.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software withough specific prior written permission
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- */
-
-/*
- * Kudos to Mark Huizer who originally suggested this on freebsd-current
- */
-
-#include <sys/types.h>
-#include <sys/uio.h>
-
-#include <sys/socket.h>
-#include <netinet/in.h>
-
-#include <netdb.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-#define TEST_LONG_REQUEST_LINE      1
-#define TEST_LONG_REQUEST_FIELDS    2
-#define TEST_LONG_REQUEST_FIELDSIZE 3
-#define TEST_LONG_REQUEST_BODY      4
-
-void
-usage(void)
-{
-    fprintf(stderr,
-      "usage: test_limits [-t (r|n|h|b)] [-a address] [-p port] [-n num]\n");
-    exit(1);
-}
-
-int
-main(int argc, char *argv[])
-{
-    struct sockaddr_in sin;
-    struct hostent *he;
-    FILE *f;
-    int o, sd;
-
-    /* default parameters */
-    char *addr = "localhost";
-    int port = 80;
-    int num = 1000;
-    int testtype = TEST_LONG_REQUEST_FIELDS;
-
-    /* get options */
-    while ((o = getopt(argc, argv, "t:a:p:n:")) != EOF)
-        switch (o) {
-        case 't':
-            if (*optarg == 'r')
-                testtype = TEST_LONG_REQUEST_LINE;
-            else if (*optarg == 'n')
-                testtype = TEST_LONG_REQUEST_FIELDS;
-            else if (*optarg == 'h')
-                testtype = TEST_LONG_REQUEST_FIELDSIZE;
-            else if (*optarg == 'b')
-                testtype = TEST_LONG_REQUEST_BODY;
-            break;
-        case 'a':
-            addr = optarg;
-            break;
-        case 'p':
-            port = atoi(optarg);
-            break;
-        case 'n':
-            num = atoi(optarg);
-            break;
-        default:
-            usage();
-        }
-
-    if (argc != optind)
-        usage();
-
-    /* connect */
-    if ((he = gethostbyname(addr)) == NULL) {
-        perror("gethostbyname");
-        exit(1);
-    }
-    bzero(&sin, sizeof(sin));
-    bcopy(he->h_addr, (char *)&sin.sin_addr, he->h_length);
-    sin.sin_family = he->h_addrtype;
-    sin.sin_port = htons(port);
-
-    if ((sd = socket(sin.sin_family, SOCK_STREAM, IPPROTO_TCP)) == -1) {
-        perror("socket");
-        exit(1);
-    }
-
-    if (connect(sd, (struct sockaddr *)&sin, sizeof(sin)) == -1) {
-        perror("connect");
-        exit(1);
-    }
-
-    if ((f = fdopen(sd, "r+")) == NULL) {
-        perror("fdopen");
-        exit(1);
-    }
-
-    /* attack! */
-    fprintf(stderr, "Testing like a plague of locusts on %s\n", addr);
-
-    if (testtype == TEST_LONG_REQUEST_LINE) {
-        fprintf(f, "GET ");
-        while (num-- && !ferror(f)) {
-            fprintf(f, "/123456789");
-            fflush(f);
-        }
-        fprintf(f, " HTTP/1.0\r\n\r\n");
-    }
-    else {
-        fprintf(f, "GET /fred/foo HTTP/1.0\r\n");
-
-        if (testtype == TEST_LONG_REQUEST_FIELDSIZE) {
-            while (num-- && !ferror(f)) {
-                fprintf(f, "User-Agent: sioux");
-                fflush(f);
-            }
-            fprintf(f, "\r\n");
-        }
-        else if (testtype == TEST_LONG_REQUEST_FIELDS) {
-            while (num-- && !ferror(f))
-                fprintf(f, "User-Agent: sioux\r\n");
-            fprintf(f, "\r\n");
-        }
-        else if (testtype == TEST_LONG_REQUEST_BODY) {
-            fprintf(f, "User-Agent: sioux\r\n");
-            fprintf(f, "Content-Length: 33554433\r\n");
-            fprintf(f, "\r\n");
-            while (num-- && !ferror(f))
-                fprintf(f, "User-Agent: sioux\r\n");
-        }
-        else {
-            fprintf(f, "\r\n");
-        }
-    }
-    fflush(f);
-
-    {
-        ssize_t len;
-        char buff[512];
-
-        while ((len = read(sd, buff, 512)) > 0)
-            len = write(1, buff, len);
-    }
-    if (ferror(f)) {
-        perror("fprintf");
-        exit(1);
-    }
-
-    fclose(f);
-    exit(0);
-}
diff --git a/test/test_parser.c b/test/test_parser.c
deleted file mode 100644
index eef1be4..0000000
--- a/test/test_parser.c
+++ /dev/null
@@ -1,59 +0,0 @@
-/* This program tests the ap_get_list_item routine in ../main/util.c.
- *
- * The defines in this sample compile line are specific to Roy's system.
- * They should match whatever was used to compile Apache first.
- *
-     gcc -g -O2 -I../os/unix -I../include -o test_parser \
-            -DSOLARIS2=250 -Wall -DALLOC_DEBUG -DPOOL_DEBUG \
-            ../main/alloc.o ../main/buff.o ../main/util.o \
-            ../ap/libap.a -lsocket -lnsl test_parser.c
- * 
- * Roy Fielding, 1999
- */
-#include <stdio.h>
-#include <stdlib.h>
-#include "httpd.h"
-#include "apr_general.h"
-
-/*
- * Dummy a bunch of stuff just to get a compile
- */
-uid_t ap_user_id;
-gid_t ap_group_id;
-void *ap_dummy_mutex = &ap_dummy_mutex;
-char *ap_server_argv0;
-
-AP_DECLARE(void) ap_block_alarms(void)
-{
-    ;
-}
-
-AP_DECLARE(void) ap_unblock_alarms(void)
-{
-    ;
-}
-
-AP_DECLARE(void) ap_log_error(const char *file, int line, int level,
-                               const request_rec *r, const char *fmt, ...)
-{
-    ;
-}
-
-int main (void)
-{
-    apr_pool_t *p;
-    const char *field;
-    char *newstr;
-    char instr[512];
-
-    p = apr_pool_alloc_init();
-
-    while (gets(instr)) {
-        printf("  [%s] ==\n", instr);
-        field = instr;
-        while ((newstr = ap_get_list_item(p, &field)) != NULL)
-            printf("  <%s> ..\n", newstr);
-    }
-    
-    exit(0);
-}
diff --git a/test/test_select.c b/test/test_select.c
deleted file mode 100644
index 8c0a6a4..0000000
--- a/test/test_select.c
+++ /dev/null
@@ -1,30 +0,0 @@
-/* This is just a quick test program to see how long a wait is
- * produced by a select loop with an exponential backoff.
- *
- *   gcc -g -O2 -o test_select test_select.c
- *   test_select
- *
- * Roy Fielding, 1996
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/time.h>
-
-int main (void)
-{
-    int srv;
-    long waittime = 4096;
-    struct timeval tv;
-
-    printf("Start\n");
-    while ((waittime > 0) && (waittime < 3000000)) {
-        printf("%d\n", waittime);
-        tv.tv_sec  = waittime/1000000;
-        tv.tv_usec = waittime%1000000;
-        waittime <<= 1;
-        srv = select(0, NULL, NULL, NULL, &tv);
-    }
-    printf("End\n");
-    exit(0);
-}
diff --git a/test/time-sem.c b/test/time-sem.c
deleted file mode 100644
index 7800844..0000000
--- a/test/time-sem.c
+++ /dev/null
@@ -1,572 +0,0 @@
-/*
-time-sem.c has the basics of the semaphores we use in http_main.c.  It's
-intended for timing differences between various methods on an
-architecture.  In practice we've found many things affect which semaphore
-to be used:
-
-    - NFS filesystems absolutely suck for fcntl() and flock()
-
-    - uslock absolutely sucks on single-processor IRIX boxes, but
-	absolutely rocks on multi-processor boxes.  The converse
-	is true for fcntl.  sysvsem seems a moderate balance.
-
-    - Under Solaris you can't have too many processes use SEM_UNDO, there
-	might be a tuneable somewhere that increases the limit from 29.
-	We're not sure what the tunable is, so there's a define
-	NO_SEM_UNDO which can be used to simulate us trapping/blocking
-	signals to be able to properly release the semaphore on a clean
-	child death.  You'll also need to define NEED_UNION_SEMUN
-	under solaris.
-
-You'll need to define USE_SHMGET_SCOREBOARD if anonymous shared mmap()
-doesn't work on your system (i.e. linux).
-
-argv[1] is the #children, argv[2] is the #iterations per child
-
-You should run each over many different #children inputs, and choose
-#iter such that the program runs for at least a second or so... or even
-longer depending on your patience.
-
-compile with:
-
-gcc -o time-FCNTL -Wall -O time-sem.c -DUSE_FCNTL_SERIALIZED_ACCEPT
-gcc -o time-FLOCK -Wall -O time-sem.c -DUSE_FLOCK_SERIALIZED_ACCEPT
-gcc -o time-SYSVSEM -Wall -O time-sem.c -DUSE_SYSVSEM_SERIALIZED_ACCEPT
-gcc -o time-SYSVSEM2 -Wall -O time-sem.c -DUSE_SYSVSEM_SERIALIZED_ACCEPT -DNO_SEM_UNDO
-gcc -o time-PTHREAD -Wall -O time-sem.c -DUSE_PTHREAD_SERIALIZED_ACCEPT -lpthread
-gcc -o time-USLOCK -Wall -O time-sem.c -DUSE_USLOCK_SERIALIZED_ACCEPT
-
-not all versions work on all systems.
-*/
-
-#include <errno.h>
-#include <sys/time.h>
-#include <unistd.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <sys/wait.h>
-#include <sys/mman.h>
-#include <signal.h>
-
-#if defined(USE_FCNTL_SERIALIZED_ACCEPT)
-
-static struct flock lock_it;
-static struct flock unlock_it;
-
-static int fcntl_fd=-1;
-
-#define accept_mutex_child_init()
-#define accept_mutex_cleanup()
-
-/*
- * Initialize mutex lock.
- * Must be safe to call this on a restart.
- */
-void
-accept_mutex_init(void)
-{
-
-    lock_it.l_whence = SEEK_SET;   /* from current point */
-    lock_it.l_start  = 0;          /* -"- */
-    lock_it.l_len    = 0;          /* until end of file */
-    lock_it.l_type   = F_WRLCK;    /* set exclusive/write lock */
-    lock_it.l_pid    = 0;          /* pid not actually interesting */
-    unlock_it.l_whence = SEEK_SET; /* from current point */
-    unlock_it.l_start  = 0;        /* -"- */
-    unlock_it.l_len    = 0;        /* until end of file */
-    unlock_it.l_type   = F_UNLCK;  /* set exclusive/write lock */
-    unlock_it.l_pid    = 0;        /* pid not actually interesting */
-
-    printf("opening test-lock-thing in current directory\n");
-    fcntl_fd = open("test-lock-thing", O_CREAT | O_WRONLY | O_EXCL, 0644);
-    if (fcntl_fd == -1)
-    {
-	perror ("open");
-	fprintf (stderr, "Cannot open lock file: %s\n", "test-lock-thing");
-	exit (1);
-    }
-    unlink("test-lock-thing");
-}
-
-void accept_mutex_on(void)
-{
-    int ret;
-    
-    while ((ret = fcntl(fcntl_fd, F_SETLKW, &lock_it)) < 0 && errno == EINTR)
-	continue;
-
-    if (ret < 0) {
-	perror ("fcntl lock_it");
-	exit(1);
-    }
-}
-
-void accept_mutex_off(void)
-{
-    if (fcntl (fcntl_fd, F_SETLKW, &unlock_it) < 0)
-    {
-	perror ("fcntl unlock_it");
-	exit(1);
-    }
-}
-
-#elif defined(USE_FLOCK_SERIALIZED_ACCEPT)
-
-#include <sys/file.h>
-
-static int flock_fd=-1;
-
-#define FNAME "test-lock-thing"
-
-/*
- * Initialize mutex lock.
- * Must be safe to call this on a restart.
- */
-void accept_mutex_init(void)
-{
-
-    printf("opening " FNAME " in current directory\n");
-    flock_fd = open(FNAME, O_CREAT | O_WRONLY | O_EXCL, 0644);
-    if (flock_fd == -1)
-    {
-	perror ("open");
-	fprintf (stderr, "Cannot open lock file: %s\n", "test-lock-thing");
-	exit (1);
-    }
-}
-
-void accept_mutex_child_init(void)
-{
-    flock_fd = open(FNAME, O_WRONLY, 0600);
-    if (flock_fd == -1) {
-	perror("open");
-	exit(1);
-    }
-}
-
-void accept_mutex_cleanup(void)
-{
-    unlink(FNAME);
-}
-
-void accept_mutex_on(void)
-{
-    int ret;
-    
-    while ((ret = flock(flock_fd, LOCK_EX)) < 0 && errno == EINTR)
-	continue;
-
-    if (ret < 0) {
-	perror ("flock(LOCK_EX)");
-	exit(1);
-    }
-}
-
-void accept_mutex_off(void)
-{
-    if (flock (flock_fd, LOCK_UN) < 0)
-    {
-	perror ("flock(LOCK_UN)");
-	exit(1);
-    }
-}
-
-#elif defined (USE_SYSVSEM_SERIALIZED_ACCEPT)
-
-#include <sys/types.h>
-#include <sys/ipc.h>
-#include <sys/sem.h>
-
-static   int sem_id = -1;
-#ifdef NO_SEM_UNDO
-static sigset_t accept_block_mask;
-static sigset_t accept_previous_mask;
-#endif
-
-#define accept_mutex_child_init()
-#define accept_mutex_cleanup()
-
-void accept_mutex_init(void)
-{
-#ifdef NEED_UNION_SEMUN
-    /* believe it or not, you need to define this under solaris */
-    union semun {
-	int val;
-	struct semid_ds *buf;
-	ushort *array;
-    };
-#endif
-
-    union semun ick;
-
-    sem_id = semget(999, 1, IPC_CREAT | 0666);
-    if (sem_id < 0) {
-       perror ("semget");
-       exit (1);
-    }
-    ick.val = 1;
-    if (semctl(sem_id, 0, SETVAL, ick) < 0) {
-       perror ("semctl");
-        exit(1);
-    }
-#ifdef NO_SEM_UNDO
-    sigfillset(&accept_block_mask);
-    sigdelset(&accept_block_mask, SIGHUP);
-    sigdelset(&accept_block_mask, SIGTERM);
-    sigdelset(&accept_block_mask, SIGUSR1);
-#endif
-}
-
-void accept_mutex_on()
-{
-    struct sembuf op;
-
-#ifdef NO_SEM_UNDO
-    if (sigprocmask(SIG_BLOCK, &accept_block_mask, &accept_previous_mask)) {
-	perror("sigprocmask(SIG_BLOCK)");
-	exit (1);
-    }
-    op.sem_flg = 0;
-#else
-    op.sem_flg = SEM_UNDO;
-#endif
-    op.sem_num = 0;
-    op.sem_op  = -1;
-    if (semop(sem_id, &op, 1) < 0) {
-	perror ("accept_mutex_on");
-	exit (1);
-    }
-}
-
-void accept_mutex_off()
-{
-    struct sembuf op;
-
-    op.sem_num = 0;
-    op.sem_op  = 1;
-#ifdef NO_SEM_UNDO
-    op.sem_flg = 0;
-#else
-    op.sem_flg = SEM_UNDO;
-#endif
-    if (semop(sem_id, &op, 1) < 0) {
-	perror ("accept_mutex_off");
-        exit (1);
-    }
-#ifdef NO_SEM_UNDO
-    if (sigprocmask(SIG_SETMASK, &accept_previous_mask, NULL)) {
-	perror("sigprocmask(SIG_SETMASK)");
-	exit (1);
-    }
-#endif
-}
-
-#elif defined (USE_PTHREAD_SERIALIZED_ACCEPT)
-
-/* note: pthread mutexes aren't released on child death, hence the
- * signal goop ... in a real implementation we'd do special things
- * during hup, term, usr1.
- */
-
-#include <pthread.h>
-
-static pthread_mutex_t *mutex;
-static sigset_t accept_block_mask;
-static sigset_t accept_previous_mask;
-
-#define accept_mutex_child_init()
-#define accept_mutex_cleanup()
-
-void accept_mutex_init(void)
-{
-    pthread_mutexattr_t mattr;
-    int fd;
-
-    fd = open ("/dev/zero", O_RDWR);
-    if (fd == -1) {
-	perror ("open(/dev/zero)");
-	exit (1);
-    }
-    mutex = (pthread_mutex_t *)mmap ((caddr_t)0, sizeof (*mutex),
-		    PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
-    if (mutex == (void *)(caddr_t)-1) {
-	perror ("mmap");
-	exit (1);
-    }
-    close (fd);
-    if (pthread_mutexattr_init(&mattr)) {
-	perror ("pthread_mutexattr_init");
-	exit (1);
-    }
-    if (pthread_mutexattr_setpshared(&mattr, PTHREAD_PROCESS_SHARED)) {
-	perror ("pthread_mutexattr_setpshared");
-	exit (1);
-    }
-    if (pthread_mutex_init(mutex, &mattr)) {
-	perror ("pthread_mutex_init");
-	exit (1);
-    }
-    sigfillset(&accept_block_mask);
-    sigdelset(&accept_block_mask, SIGHUP);
-    sigdelset(&accept_block_mask, SIGTERM);
-    sigdelset(&accept_block_mask, SIGUSR1);
-}
-
-void accept_mutex_on()
-{
-    if (sigprocmask(SIG_BLOCK, &accept_block_mask, &accept_previous_mask)) {
-	perror("sigprocmask(SIG_BLOCK)");
-	exit (1);
-    }
-    if (pthread_mutex_lock (mutex)) {
-	perror ("pthread_mutex_lock");
-	exit (1);
-    }
-}
-
-void accept_mutex_off()
-{
-    if (pthread_mutex_unlock (mutex)) {
-	perror ("pthread_mutex_unlock");
-	exit (1);
-    }
-    if (sigprocmask(SIG_SETMASK, &accept_previous_mask, NULL)) {
-	perror("sigprocmask(SIG_SETMASK)");
-	exit (1);
-    }
-}
-
-#elif defined (USE_USLOCK_SERIALIZED_ACCEPT)
-
-#include <ulocks.h>
-
-static usptr_t *us = NULL;
-static ulock_t uslock = NULL;
-
-#define accept_mutex_child_init()
-#define accept_mutex_cleanup()
-
-void accept_mutex_init(void)
-{
-    ptrdiff_t old;
-    /* default is 8 */
-#define CONF_INITUSERS_MAX 15
-    if ((old = usconfig(CONF_INITUSERS, CONF_INITUSERS_MAX)) == -1) {
-        perror("usconfig");
-        exit(-1);
-    }
-    if ((old = usconfig(CONF_LOCKTYPE, US_NODEBUG)) == -1) {
-        perror("usconfig");
-        exit(-1);
-    }
-    if ((old = usconfig(CONF_ARENATYPE, US_SHAREDONLY)) == -1) {
-        perror("usconfig");
-        exit(-1);
-    }
-    if ((us = usinit("/dev/zero")) == NULL) {
-        perror("usinit");
-        exit(-1);
-    }
-    if ((uslock = usnewlock(us)) == NULL) {
-        perror("usnewlock");
-        exit(-1);
-    }
-}
-void accept_mutex_on()
-{
-    switch(ussetlock(uslock)) {
-        case 1:
-            /* got lock */
-            break;
-        case 0:
-            fprintf(stderr, "didn't get lock\n");
-            exit(-1);
-        case -1:
-            perror("ussetlock");
-            exit(-1);
-    }
-}
-void accept_mutex_off()
-{
-    if (usunsetlock(uslock) == -1) {
-        perror("usunsetlock");
-        exit(-1);
-    }
-}
-#endif
-
-
-#ifndef USE_SHMGET_SCOREBOARD
-static void *get_shared_mem(size_t size)
-{
-    void *result;
-
-    /* allocate shared memory for the shared_counter */
-    result = (unsigned long *)mmap ((caddr_t)0, size,
-		    PROT_READ|PROT_WRITE, MAP_ANON|MAP_SHARED, -1, 0);
-    if (result == (void *)(caddr_t)-1) {
-	perror ("mmap");
-	exit (1);
-    }
-    return result;
-}
-#else
-#include <sys/types.h>
-#include <sys/ipc.h>
-#include <sys/shm.h>
-
-static void *get_shared_mem(size_t size)
-{
-    key_t shmkey = IPC_PRIVATE;
-    int shmid = -1;
-    void *result;
-#ifdef MOVEBREAK
-    char *obrk;
-#endif
-
-    if ((shmid = shmget(shmkey, size, IPC_CREAT | SHM_R | SHM_W)) == -1) {
-	perror("shmget");
-	exit(1);
-    }
-
-#ifdef MOVEBREAK
-    /*
-     * Some SysV systems place the shared segment WAY too close
-     * to the dynamic memory break point (sbrk(0)). This severely
-     * limits the use of malloc/sbrk in the program since sbrk will
-     * refuse to move past that point.
-     *
-     * To get around this, we move the break point "way up there",
-     * attach the segment and then move break back down. Ugly
-     */
-    if ((obrk = sbrk(MOVEBREAK)) == (char *) -1) {
-	perror("sbrk");
-    }
-#endif
-
-#define BADSHMAT	((void *)(-1))
-    if ((result = shmat(shmid, 0, 0)) == BADSHMAT) {
-	perror("shmat");
-    }
-    /*
-     * We must avoid leaving segments in the kernel's
-     * (small) tables.
-     */
-    if (shmctl(shmid, IPC_RMID, NULL) != 0) {
-	perror("shmctl(IPC_RMID)");
-    }
-    if (result == BADSHMAT)	/* now bailout */
-	exit(1);
-
-#ifdef MOVEBREAK
-    if (obrk == (char *) -1)
-	return;			/* nothing else to do */
-    if (sbrk(-(MOVEBREAK)) == (char *) -1) {
-	perror("sbrk 2");
-    }
-#endif
-    return result;
-}
-#endif
-
-#ifdef _POSIX_PRIORITY_SCHEDULING
-/* don't ask */
-#define _P __P
-#include <sched.h>
-#define YIELD	sched_yield()
-#else
-#define YIELD	do { struct timeval zero; zero.tv_sec = zero.tv_usec = 0; select(0,0,0,0,&zero); } while(0)
-#endif
-
-void main (int argc, char **argv)
-{
-    int num_iter;
-    int num_child;
-    int i;
-    struct timeval first;
-    struct timeval last;
-    long ms;
-    int pid;
-    unsigned long *shared_counter;
-
-    if (argc != 3) {
-	fprintf (stderr, "Usage: time-sem num-child num iter\n");
-	exit (1);
-    }
-
-    num_child = atoi (argv[1]);
-    num_iter = atoi (argv[2]);
-
-    /* allocate shared memory for the shared_counter */
-    shared_counter = get_shared_mem(sizeof(*shared_counter));
-
-    /* initialize counter to 0 */
-    *shared_counter = 0;
-
-    accept_mutex_init ();
-
-    /* parent grabs mutex until done spawning children */
-    accept_mutex_on ();
-
-    for (i = 0; i < num_child; ++i) {
-	pid = fork();
-	if (pid == 0) {
-	    /* child, do our thing */
-	    accept_mutex_child_init();
-	    for (i = 0; i < num_iter; ++i) {
-		unsigned long tmp;
-
-		accept_mutex_on ();
-		tmp = *shared_counter;
-		YIELD;
-		*shared_counter = tmp + 1;
-		accept_mutex_off ();
-	    }
-	    exit (0);
-	} else if (pid == -1) {
-	    perror ("fork");
-	    exit (1);
-	}
-    }
-
-    /* a quick test to see that nothing is screwed up */
-    if (*shared_counter != 0) {
-	puts ("WTF! shared_counter != 0 before the children have been started!");
-	exit (1);
-    }
-
-    gettimeofday (&first, NULL);
-    /* launch children into action */
-    accept_mutex_off ();
-    for (i = 0; i < num_child; ++i) {
-	if (wait(NULL) == -1) {
-	    perror ("wait");
-	}
-    }
-    gettimeofday (&last, NULL);
-
-    if (*shared_counter != num_child * num_iter) {
-	printf ("WTF! shared_counter != num_child * num_iter!\n"
-		"shared_counter = %lu\nnum_child = %d\nnum_iter=%d\n",
-		*shared_counter,
-		num_child, num_iter);
-    }
-
-    last.tv_sec -= first.tv_sec;
-    ms = last.tv_usec - first.tv_usec;
-    if (ms < 0) {
-	--last.tv_sec;
-	ms += 1000000;
-    }
-    last.tv_usec = ms;
-    printf ("%8lu.%06lu\n", last.tv_sec, last.tv_usec);
-
-    accept_mutex_cleanup();
-
-    exit(0);
-}
-
diff --git a/test/zb.c b/test/zb.c
deleted file mode 100644
index 0a6666e..0000000
--- a/test/zb.c
+++ /dev/null
@@ -1,567 +0,0 @@
-
-/*                          ZeusBench V1.01
-			    ===============
-
-This program is Copyright (C) Zeus Technology Limited 1996.
-
-This program may be used and copied freely providing this copyright notice
-is not removed.
-
-This software is provided "as is" and any express or implied waranties, 
-including but not limited to, the implied warranties of merchantability and
-fitness for a particular purpose are disclaimed.  In no event shall 
-Zeus Technology Ltd. be liable for any direct, indirect, incidental, special, 
-exemplary, or consequential damaged (including, but not limited to, 
-procurement of substitute good or services; loss of use, data, or profits;
-or business interruption) however caused and on theory of liability.  Whether
-in contract, strict liability or tort (including negligence or otherwise) 
-arising in any way out of the use of this software, even if advised of the
-possibility of such damage.
-
-     Written by Adam Twiss (adam@zeus.co.uk).  March 1996
-
-Thanks to the following people for their input:
-  Mike Belshe (mbelshe@netscape.com) 
-  Michael Campanella (campanella@stevms.enet.dec.com)
-
-*/
-
-/* -------------------- Notes on compiling ------------------------------
-
-This should compile unmodified using gcc on HP-UX, FreeBSD, Linux,
-IRIX, Solaris, AIX and Digital Unix (OSF).  On Solaris 2.x you will
-need to compile with "-lnsl -lsocket" options.  If you have any
-difficulties compiling then let me know.
-
-On SunOS 4.x.x you may need to compile with -DSUNOS4 to add the following 
-two lines of code which appear not to exist in my SunOS headers */
-
-#ifdef SUNOS4
-extern char *optarg; 
-extern int optind, opterr, optopt;   
-#endif
-
-/*  -------------------------------------------------------------------- */
-
-/* affects include files on Solaris */
-#define BSD_COMP
-
-#include <sys/time.h> 
-#include <sys/ioctl.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <fcntl.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <netdb.h> 
-#include <errno.h>
-#include <sys/ioctl.h>
-#include <string.h>
-
-/* ------------------- DEFINITIONS -------------------------- */
-
-/* maximum number of requests on a time limited test */
-#define MAX_REQUESTS 50000 
-
-/* good old state machine */
-#define STATE_UNCONNECTED 0
-#define STATE_CONNECTING  1
-#define STATE_READ        2
-
-#define CBUFFSIZE       512
-
-struct connection 
-{
-  int fd;
-  int state;
-  int read;       /* amount of bytes read */
-  int bread;      /* amount of body read */
-  int length;     /* Content-Length value used for keep-alive */
-  char cbuff[CBUFFSIZE];  /* a buffer to store server response header */
-  int cbx;                /* offset in cbuffer */
-  int keepalive;          /* non-zero if a keep-alive request */
-  int gotheader;          /* non-zero if we have the entire header in cbuff */
-  struct timeval start, connect, done; 
-};
-
-struct data 
-{
-  int read;      /* number of bytes read */
-  int ctime;     /* time in ms to connect */
-  int time;      /* time in ms for connection */
-};
-
-#define min(a,b) ((a)<(b))?(a):(b)
-#define max(a,b) ((a)>(b))?(a):(b)
-
-/* --------------------- GLOBALS ---------------------------- */
-
-int requests = 1;      /* Number of requests to make */
-int concurrency = 1;   /* Number of multiple requests to make */
-int tlimit = 0;        /* time limit in cs */
-int keepalive = 0;     /* try and do keepalive connections */
-char *machine;         /* Machine name */
-char *file;            /* file name to use */
-char server_name[80];  /* name that server reports */
-int port = 80;         /* port to use */
-
-int doclen = 0;        /* the length the document should be */
-int totalread = 0;     /* total number of bytes read */
-int totalbread = 0;    /* totoal amount of entity body read */
-int done=0;            /* number of requests we have done */
-int doneka=0;          /* number of keep alive connections done */
-int good=0, bad=0;     /* number of good and bad requests */
-
-/* store error cases */
-int err_length = 0, err_conn = 0, err_except = 0;
-
-struct timeval start, endtime;
-
-/* global request (and its length) */
-char request[512];
-int reqlen;
-
-/* one global throw-away buffer to read stuff into */
-char buffer[4096];
-
-struct connection *con;      /* connection array */
-struct data *stats;          /* date for each request */
-
-fd_set readbits, writebits;  /* bits for select */
-struct sockaddr_in server;   /* server addr structure */
-
-/* --------------------------------------------------------- */
-
-/* simple little function to perror and exit */
-
-static void err(char *s) 
-{
-  perror(s);
-  exit(errno);
-}
-
-/* --------------------------------------------------------- */
-
-/* write out request to a connection - assumes we can write 
-   (small) request out in one go into our new socket buffer  */
-
-void write_request(struct connection *c)
-{
-  gettimeofday(&c->connect,0);
-  write(c->fd,request, reqlen);  
-  c->state = STATE_READ;
-  FD_SET(c->fd, &readbits);
-  FD_CLR(c->fd, &writebits);
-}
-
-/* --------------------------------------------------------- */
-
-/* make an fd non blocking */
-
-void nonblock(int fd) 
-{
-  int i=1;
-  ioctl(fd, FIONBIO, &i);
-}
-
-/* --------------------------------------------------------- */
-
-/* returns the time in ms between two timevals */
-
-int timedif(struct timeval a, struct timeval b)
-{
-  register int us,s;
-
-  us = a.tv_usec - b.tv_usec;
-  us /= 1000;
-  s = a.tv_sec - b.tv_sec;
-  s *= 1000;
-  return s+us;
-}
-
-/* --------------------------------------------------------- */
-
-/* calculate and output results and exit */
-
-void output_results()
-{
-  int timetaken;
-  
-  gettimeofday(&endtime,0);
-  timetaken = timedif(endtime, start);
-  
-  printf("\n---\n");
-  printf("Server:                 %s\n", server_name);
-  printf("Document Length:        %d\n", doclen);  
-  printf("Concurency Level:       %d\n", concurrency);
-  printf("Time taken for tests:   %d.%03d seconds\n", 
-	 timetaken/1000, timetaken%1000);
-  printf("Complete requests:      %d\n", done);
-  printf("Failed requests:        %d\n", bad);
-  if(bad) printf("   (Connect: %d, Length: %d, Exceptions: %d)\n",
-		 err_conn, err_length, err_except);
-  if(keepalive) printf("Keep-Alive requests:    %d\n", doneka);
-  printf("Bytes transfered:       %d\n", totalread);
-  printf("HTML transfered:        %d\n", totalbread);
-  
-  /* avoid divide by zero */
-  if(timetaken) {
-    printf("Requests per seconds:   %.2f\n", 1000*(float)(done)/timetaken);
-    printf("Transfer rate:          %.2f kb/s\n", 
-	   (float)(totalread)/timetaken);
-  }
-
-  {
-    /* work out connection times */
-    int i;
-    int totalcon=0, total=0;
-    int mincon=9999999, mintot=999999;
-    int maxcon=0, maxtot=0;
-
-    for(i=0; i<requests; i++) {
-      struct data s = stats[i];
-      mincon = min(mincon, s.ctime);
-      mintot = min(mintot, s.time);
-      maxcon = max(maxcon, s.ctime);
-      maxtot = max(maxtot, s.time);
-      totalcon += s.ctime;
-      total += s.time;
-    }
-    printf("\nConnnection Times (ms)\n");
-    printf("           min   avg   max\n");
-    printf("Connect: %5d %5d %5d\n",mincon, totalcon/requests, maxcon );
-    printf("Total:   %5d %5d %5d\n", mintot, total/requests, maxtot);
-    printf("---\n\n");
-  }
-
-  exit(0);
-}
-
-/* --------------------------------------------------------- */
-
-/* start asnchronous non-blocking connection */
-
-void start_connect(struct connection *c)
-{
-  c->read = 0;
-  c->bread = 0;
-  c->keepalive = 0;
-  c->cbx = 0; 
-  c->gotheader = 0;
-
-  c->fd = socket(AF_INET, SOCK_STREAM, 0);
-  if(c->fd<0) err("socket");
-
-  nonblock(c->fd);
-  gettimeofday(&c->start,0);
-
-  if(connect(c->fd, (struct sockaddr *) &server, sizeof(server))<0) {
-    if(errno==EINPROGRESS) {
-      c->state = STATE_CONNECTING;
-      FD_SET(c->fd, &writebits);
-      return;
-    }
-    else {
-      close(c->fd);
-      err_conn++;
-      if(bad++>10) {
-	printf("\nTest aborted after 10 failures\n\n");
-	exit(1);
-      } 
-      start_connect(c);
-    }      
-  }
-  
-  /* connected first time */
-  write_request(c);
-}
-
-/* --------------------------------------------------------- */
-
-/* close down connection and save stats */
-
-void close_connection(struct connection *c)
-{
-  if(c->read == 0 && c->keepalive) {
-    /* server has legitiamately shut down an idle keep alive request */
-    good--;  /* connection never happend */
-  } 
-  else {
-    if(good==1) {
-      /* first time here */
-      doclen = c->bread;
-    } else if (c->bread!=doclen) { 
-      bad++; 
-      err_length++; 
-    }
-    
-    /* save out time */
-    if(done < requests) {
-      struct data s;
-      gettimeofday(&c->done,0);
-      s.read = c->read;
-      s.ctime = timedif(c->connect, c->start);
-      s.time = timedif(c->done, c->start);
-      stats[done++] = s;
-    }
-  }
-
-  close(c->fd);
-  FD_CLR(c->fd, &readbits);
-  FD_CLR(c->fd, &writebits);
-
-  /* connect again */
-  start_connect(c); 
-  return;
-}
-
-/* --------------------------------------------------------- */
-
-/* read data from connection */
-
-void read_connection(struct connection *c)
-{
-  int r;
-  
-  r=read(c->fd,buffer,sizeof(buffer));
-  if(r==0 || (r<0 && errno!=EAGAIN)) {
-    good++;
-    close_connection(c);
-    return;
-  } 
-  
-  if(r<0 && errno==EAGAIN) return;
-
-  c->read += r;
-  totalread += r;
-  
-  if(!c->gotheader) {
-    char *s;
-    int l=4;
-    int space = CBUFFSIZE - c->cbx - 1; /* -1 to allow for 0 terminator */
-    int tocopy = (space<r)?space:r;
-    memcpy(c->cbuff+c->cbx, buffer, space);
-    c->cbx += tocopy; space -= tocopy;
-    c->cbuff[c->cbx] = 0; /* terminate for benefit of strstr */
-    s = strstr(c->cbuff, "\r\n\r\n");
-    /* this next line is so that we talk to NCSA 1.5 which blatantly breaks 
-       the http specifaction */
-    if(!s) { s = strstr(c->cbuff,"\n\n"); l=2; }
-
-    if(!s) {
-       /* read rest next time */
-      if(space) 
-	return;
-      else {
-	/* header is in invalid or too big - close connection */
-	close(c->fd);
-	if(bad++>10) {
-	  printf("\nTest aborted after 10 failures\n\n");
-	  exit(1);
-	} 
-	FD_CLR(c->fd, &writebits);
-	start_connect(c);
-      }	
-    }
-    else {
-      /* have full header */
-      if(!good) {
-	/* this is first time, extract some interesting info */
-	char *p, *q;
-	p = strstr(c->cbuff, "Server:");
-	q = server_name;
-	if(p) { p+=8; while(*p>32) *q++ = *p++; }
-	*q = 0;
-      }
-	
-      c->gotheader = 1;
-      *s = 0; /* terminate at end of header */
-      if(keepalive && 
-	 (strstr(c->cbuff, "Keep-Alive") 
-	  || strstr(c->cbuff, "keep-alive")))  /* for benefit of MSIIS */
-	{
-	char *cl;
-	cl = strstr(c->cbuff, "Content-Length:");
-	/* for cacky servers like NCSA which break the spec and send a 
-	   lower case 'l' */
-	if(!cl) cl = strstr(c->cbuff, "Content-length:");
-	if(cl) {
-	  c->keepalive=1;
-	  c->length = atoi(cl+16);
-	}
-      }
-      c->bread += c->cbx - (s+l-c->cbuff) + r-tocopy;
-      totalbread += c->bread;
-    }
-  }  
-  else {
-    /* outside header, everything we have read is entity body */
-    c->bread += r;
-    totalbread += r;
-  }
-
-  if(c->keepalive && (c->bread >= c->length)) {
-    /* finished a keep-alive connection */
-    good++; doneka++;
-    /* save out time */
-    if(good==1) {
-      /* first time here */
-      doclen = c->bread;
-    } else if(c->bread!=doclen) { bad++; err_length++; }
-    if(done < requests) {
-      struct data s;
-      gettimeofday(&c->done,0);
-      s.read = c->read;
-      s.ctime = timedif(c->connect, c->start);
-      s.time = timedif(c->done, c->start);
-      stats[done++] = s;
-    }
-    c->keepalive = 0; c->length = 0; c->gotheader=0; c->cbx = 0;
-    c->read = c->bread = 0;
-    write_request(c);
-    c->start = c->connect; /* zero connect time with keep-alive */
-  }
-}
-
-/* --------------------------------------------------------- */
-
-/* run the tests */
-
-int test() 
-{
-  struct timeval timeout, now;
-  fd_set sel_read, sel_except, sel_write;
-  int i;
-  
-  {
-    /* get server information */
-    struct hostent *he;
-    he = gethostbyname(machine);
-    if (!he) err("gethostbyname");
-    server.sin_family      = he->h_addrtype;
-    server.sin_port        = htons(port);
-    server.sin_addr.s_addr = ((unsigned long *)(he->h_addr_list[0]))[0];
-  }
-
-  con = malloc(concurrency*sizeof(struct connection));
-  memset(con,0,concurrency*sizeof(struct connection));
-  
-  stats = malloc(requests * sizeof(struct data));
-
-  FD_ZERO(&readbits);
-  FD_ZERO(&writebits);
-
-  /* setup request */
-  sprintf(request,"GET %s HTTP/1.0\r\nUser-Agent: ZeusBench/1.0\r\n"
-	  "%sHost: %s\r\nAccept: */*\r\n\r\n", file, 
-	  keepalive?"Connection: Keep-Alive\r\n":"", machine );
-    
-  reqlen = strlen(request);
-
-  /* ok - lets start */
-  gettimeofday(&start,0);
-
-  /* initialise lots of requests */
-  for(i=0; i<concurrency; i++) start_connect(&con[i]);
-
-  while(done<requests) {
-    int n;
-    /* setup bit arrays */
-    memcpy(&sel_except, &readbits, sizeof(readbits));
-    memcpy(&sel_read, &readbits, sizeof(readbits));
-    memcpy(&sel_write, &writebits, sizeof(readbits));
-
-    /* check for time limit expiry */
-    gettimeofday(&now,0);
-    if(tlimit && timedif(now,start) > (tlimit*1000)) {
-      requests=done;   /* so stats are correct */
-      output_results();
-    }
-
-    /* Timeout of 30 seconds. */
-    timeout.tv_sec=30; timeout.tv_usec=0;
-    n=select(256, &sel_read, &sel_write, &sel_except, &timeout);
-    if(!n) {
-      printf("\nServer timed out\n\n");
-      exit(1);
-    }
-    if(n<1) err("select");
-
-    for(i=0; i<concurrency; i++) {
-      int s = con[i].fd;
-      if(FD_ISSET(s, &sel_except)) {
-	bad++; 
-	err_except++;
-	start_connect(&con[i]);
-	continue;
-      }
-      if(FD_ISSET(s, &sel_read)) read_connection(&con[i]);
-      if(FD_ISSET(s, &sel_write)) write_request(&con[i]);
-    }
-    if(done>=requests) output_results();
-  }
-  return 0;
-}
-
-/* ------------------------------------------------------- */
-
-/* display usage information */
-
-void usage(char *progname) {
-  printf("\nZeusBench v1.0\n\n");
-  printf("Usage: %s <machine> <file> [-k] [-n requests | -t timelimit (sec)]"
-	 "\n\t\t[-c concurrency] [-p port] \n",progname);
-  printf("Filename should start with a '/' e.g. /index.html\n\n");
-  exit(EINVAL);
-}
-
-/* ------------------------------------------------------- */
-
-/* sort out command-line args and call test */
-
-int main(int argc, char **argv) {
-  int c;
-  if (argc < 3) usage(argv[0]);
-  
-  machine = argv[1]; 
-  file = argv[2];
-  optind = 3;
-  while ((c = getopt(argc,argv,"p:n:c:d:t:d:k"))>0) {
-    switch(c) {
-    case 'd':
-      break;
-    case 'n': 
-      requests = atoi(optarg);
-      if(!requests) {
-	printf("Invalid number of requests\n");
-	exit(1);
-      }
-      break;
-    case 'k':
-      keepalive=1;
-      break;
-    case 'c':
-      concurrency = atoi(optarg);
-      break;
-    case 'p':
-      port = atoi(optarg);
-      break;
-    case 't':
-      tlimit = atoi(optarg);
-      requests = MAX_REQUESTS;  /* need to size data array on something */
-      break;
-    default:
-      usage(argv[0]);
-      break;
-    }
-  }   
-  test();
-  return 0;
-}
-
-
-
-
-
-